atomes_1.3.1/0000775000175000017500000000000015212624223012505 5ustar lerouxlerouxatomes_1.3.1/metadata/0000775000175000017500000000000015212624223014265 5ustar lerouxlerouxatomes_1.3.1/metadata/atomes.desktop0000664000175000017500000000150515212624223017151 0ustar lerouxleroux[Desktop Entry] Type=Application Name=atomes GenericName=atomes Comment=An atomic scale modeling toolbox Comment[fr]=Une boite à outils pour la modélisation à l'échelle atomique Keywords=chemistry;physics;atom;molecule;crystal;coordination;polyedra;measure;volume;builder;material; Keywords[fr]=chimie;physique;atome;molécule;cristal;coordination;polyèdre;mesure;volume;constructeur;matériau; Keywords[es]=química;física;átomo;molécula;cristal;coordinación;poliedro;medida;volumen;constructor;material; Icon=atomes Exec=atomes %F Terminal=false MimeType=application/x-awf;application/x-apf;application/x-ipf;application/x-xyz;application/x-pdb;application/x-ent;application/x-cif;application/x-trj;application/x-xdatcar;application/x-c3d;application/x-hist; StartupNotify=true Categories=Education;Science;Chemistry;Physics; atomes_1.3.1/metadata/icons/0000775000175000017500000000000015212624223015400 5ustar lerouxlerouxatomes_1.3.1/metadata/icons/atomes-workspace.png0000664000175000017500000000602115212624223021371 0ustar lerouxleroux‰PNG  IHDR00Wù‡…iCCPICC profile(‘}‘=HÃ@†ßþHE* vqÈP�,ˆ–â¨U(B…P+´ê`ré4iHR\ׂƒ?‹Ug]\AðÄÕÅIÑEJü.)´ˆñŽãÞûÞ—»ï³ÊT38 ¨šedRI!—_B¯ÒD ‰™úœ(¦á9¾îáãû]Œgy×ý9ú•‚ÉŸ@<ËtÃ"Þ NlZ:ç}â+K ñ9ñ„A$~äºìòç’Ã~ž1²™yâ±Pêb¹‹YÙP‰ãÄQEÕ(ߟsYá¼ÅY­ÖYûžü…á‚¶²ÌuZ£HaK!@FTa!F»FЉ �'=ü#Ž_$—L® 9Pƒ ÉñƒÿÁïÞšÅé)7)œz^lûc í­†mÛvë<WZÇ_k3Ÿ¤7:ZôØ.®;š¼\îÃOºdHŽ å/�÷3ú¦<0t ô­¹}kŸãôÈR¯Ò7ÀÁ!0^¢ìu�w÷v÷íßšvÿ~¶rÂìïóbKGD#WÖya¡ pHYs  šœtIMEç83 Î� IDAThÞµš]ŒTåÇï{¾g眙Ù9û½°Àò±ˆšbÕ†"D-›4&Ö&Þ`¸X.4FC¶*)¦’x¥íEIjjc“¦‰Ñ^@�„’n,­)@L€�ÈÇî,,»ËÎÌΜ9½`v\vg—v|“ÉÉ™3ç=ÿÿóý`J<·\×ur¹œ†á¢I!üëׯß²@i±{ªó\Ó^{íµ•Û¶mûsEJ 5¯ ( Á™3g>èííýK†Àû>@+ m¦i®™ð|×¢èv+ Ãß÷Yºtéo÷ïßo½òÊ+†CBÎw­X,ZÓ�VûÜÉd¦¤”hšF¡PP–-[Ö÷Ö[oý hôä\@ç"4Q!š¦¡( ÅbQ[³fͯ÷îÝû¼¢ùnIÈ:^M’ŸOªª¢ë:Ùl–¦¦&}íÚµoôõõýh´º˜içµJ~&i)%Š¢�ËåH$´¶¶êëÖ­{ýÕW_}önHÈZlx.Éß ôLAH) ‚€x<Žëº´µµY==={_~ùå_!šj!!ïÆ ãÈS¿�¢]×±m×uioo�õôôü¦··÷ç@z¡$d- ãÈÕÌÑónEOÃ0H&“´··7Üwß}ûvíÚµh¼Cžºc"›óÁ Y“¹¥b‘x"�T”Û‚�R>ÿý÷‰¢UU1MÛ¶±mÛÙ¸qãþ�;w–8ðw`ðïŠÀt)×’‰od2|¹{7æ·ßbíÙÚ-[ˆÅb•ë¦iÒÒÒ‚mÛAP!¥iRJ\×MnݺõÃ0²ï½÷ÞgÀÍrýT;�;�®ö}æüyÚŽ§ 8qè£6 ë:ªª"¥Ä¶mV¬X�ïû„ax›f¦¢”ªª�ï‹Å§8p(ÖEw’~~r’ó7n U•kšFØÓC†DQTÙË4Mt]ŸUjÌ\±Xlikkkp¡\nDuÕÀL‡’ÀñçŸgSo/©T YÖÊ\©K5w6îÙCb÷nNÛ6­žÇ¦\Ž””DºNƒç¡Þ¸A4d’Õ¶ÑS)„ü7 ٚ͒J&+…^Ý50WîhjÂÓu‚uÙ,;¦5(Iɹ®.ü*.ttp=�fE:}+ƒÿž˜ 3ŸÇ²¬Ê³ªå‚º÷Ä--DemÈ0D^*EA×q t߯䆢i’O&)¹.�¦!äw�ü�ï“Åó¼YúD¡¹šš¤ãðÃ`Øó¸�Hðéã Ág®‹(†Ád,aHdšàº`|Ÿ+##,mnFÁ8p*›¥crÃ0f™OÝ¢Ð̬x ³Y¾p]ut€ï#u/ŠnuA@dY`šÐØeÉ�xÍ…–ukfö…ç±ilŒx<ަi59pÍ&$„ ŸËñ¯7ßä¡?dÕáÃt´µ�¦!U¢ˆHD ÄÇ�†Ðu�’HJ|ÿ»ñ2pðäI†‡‡gE¤º�U¦o˜Ã:x�î("=1ÁS®‹(Gm:€)¶ Å"”JE†LxÞm$¾4M.^¼H>Ÿ¯¹¯YN:MiçNN&“ä_x�¥K–ÐcY¤Uµbj©„0Í[$J%ð}ð}” `0Šøj|œ‰L†°Tâf2I&Èçó5jr⩆|ó‹/2øä“è¦É�ÁA~ôÍ7x¾Ï‘în.LNÞºOJhlD‘ï#€&M£¥¥Ï÷Ëfñ®^¥48ˆÞÜÌ©D‚å. ) ‰r�·h'®& )%‰D˲¸qý:§÷íãǧNqÁqX½e ç¾þ Øš†“Ë‘èì$fš•{§¼1ÓÄ3 òƒƒ¬`Ý©SŒ=JÿŽ<Ø×G£ë~?&4Ä4M4EAÏdHV¡ÀÖt=ŠÐ£3'®ëØ (Šr[Í3µ—é84¯\‰¶jf&ò0Dÿøc®S,ëcBó­TS‰7ÞàÌçŸclÚÄ’®.6Ÿ8Á•B�qËÂîìœõr¬h‚{¤¤]Uq5 3‘àò3Ïpâ“O�>Šjšõ/æª5McÃöíŒ>ðarþØ16÷÷Sð}ŽìÚ…¯i¤„`¹,Q:5�”®3 LÃ@×õJEÚÞÞÎøc��ض�aõéÈîD¦¡¡Ó4¹võ*¹}ûØœÉpƲxÜqXjY¸–EܲÐuchUUQUµ²W†8ŽC†¨ªŠ¢(•¡W]«Ñª›¨*ºeá'd3Â%KXã8´·µá8†aT@ÍœM¥”†1ëûºj`>“J¥ÓÜûëï§måJZÛÛI§ÓÄãñj³žÛÊ…¹jŸºøÀBI)ŠB÷Úµ´tu†!±Xlø…‚^¨ôM`¦„¦l|Ê$ª[(èztd‘"¬•ÌÌ&}æØp¾†eŽï¢»%†19s"\ HµpŽ9ç¼B¨v]×õÉr7ç»à¹–™H$–tvv®.•J-Q©µ8X5 Ô^QÒu}øÒ¥KgÇÇÇ/…Z (€ Ø€Që Á:¬°üRc¢ >¨•@åm=õý»M-ëŽÍù?Ûðü!U›pIEND®B`‚atomes_1.3.1/metadata/icons/atomes.png0000664000175000017500000000631415212624223017402 0ustar lerouxleroux‰PNG  IHDR00Wù‡…iCCPICC profile(‘}‘=HÃ@†ßþHE* vqÈP�,ˆ–â¨U(B…P+´ê`ré4iHR\ׂƒ?‹Ug]\AðÄÕÅIÑEJü.)´ˆñŽãÞûÞ—»ï³ÊT38 ¨šedRI!—_B¯ÒD ‰™úœ(¦á9¾îáãû]Œgy×ý9ú•‚ÉŸ@<ËtÃ"Þ NlZ:ç}â+K ñ9ñ„A$~äºìòç’Ã~ž1²™yâ±Pêb¹‹YÙP‰ãÄQEÕ(ߟsYá¼ÅY­ÖYûžü…á‚¶²ÌuZ£HaK!@FTa!F»FЉ �'=ü#Ž_$—L® 9Pƒ ÉñƒÿÁïÞšÅé)7)œz^lûc í­†mÛvë<WZÇ_k3Ÿ¤7:ZôØ.®;š¼\îÃOºdHŽ å/�÷3ú¦<0t ô­¹}kŸãôÈR¯Ò7ÀÁ!0^¢ìu�w÷v÷íßšvÿ~¶rÂìïóbKGD#WÖya¡ pHYs  šœtIMEç8 !v ÈIDAThÞÍš]l\g™Çï{¾fÎ|ûø+ñ8išºm´m·P @­B[ @Ó– ´ÒŠ^TH{¹Z¤î +íÅJ€v¯ŠHH $Ä €T¡~nÕEmIJš�/š¶NÛ3öx<ÏœÏw/Î{’qbÛ�¶GzuŽí3sþÿçãÿ>Ïs,¸ÎÇÇ ¿�O � pì(üú$,= ú[¾ß¼žà9¿º î° Tà±6üËEh šÈŽãz¸ >? ßÙb(¹Ôj{(�‚c€Ôâ�þñ· ÚÀ<0´�Fzýàh#JMøƒ÷ÀЍTúXsbâßßtÝ´ZÂ8s†¢FÙuž}Žj‹gNR8�Ò7¾1Ùôý§:ùüƒ�”XqŒgš”>ûY¢^à�ÇçÔÔÔé?>ùä €?°MâƒQ¡©ûîªÞzëŽóãŽãüC,Òh0£ˆs¼}óÍÜÒíòÊ—¾„š˜ð Ï;±üúë�EÒý ôßwrzZî¾çžï­‹?o¹îݱ”Îå?*E>аGFèÙ6/8@~ri"72Rm¼ôÒKªß_ÒiÑÂ÷-„î¼í¶rkïÞ‡g«Õï´`ïºä”ÂvD.G”<ò҇‹S•O|¢ÔzúiCÑ|_d4w䈬ÆW/Æÿtl{Ïf÷ÚQ„ܹZm ¿ú—¿ü•ÖÓO¿­•È:;IäË!täî‚�îï/i\Z€i<Ë›ï»ï a¹ü“®ãük`Õ¿öÅyÓÄ®¦·%¶MebÄ¥”Ž3–ärè?ÞÒ‰¼º“ºÈx¾y3üGö$NÂÌ ø·W¤<:\©ü`ζïåÖ¶ XµBkdÞóÖ€RªÞ1çµ ;Idã|æ6øé~†À¨B-*—?óÞý÷ß{Þ÷}ÓÜ•ˆ­ï3�ç!víB �/%µzü6ZÍb±>ÿòËϪn·¯¥´»]9•ãðõQ¨Ô€q`(›&Ïß{ïî%×}h»QB�Œ�±T,òÞÈñè(–ã¬ÿpË›þö·¿µŠÛVB S'Ä.Nâ˜;º]Êaˆ†¥6 —HJ|ÓÄ·müZ åºiÈ$ • À_†ÑÑÏiàE]çmKÚe–Wt={ ¸¬NN²bÛ8JQ Cнv ’µÞ�„ ï8®K\(».ÉØCC²yDHÛž¼ñÉ'?ªÁôÚ– ]ráQ !ðÆ¡Cützš9ËBèúŬ$!p]ú–…PŠXB×ÛËJA—Ë04t%a£ˆ¥~+Š(¸îÆ’[­ŽÏ¿òÊKªÛíé ­»UI5æÀ? ¿2aWâû÷Û§kµ\b(¥J!€ÐuiÕj(ËJ«/ËJ�›f Þ0`l,ýÝeó¦ªÕî÷)I‰³Q.˜æP¾^«õ⋵¤ötRoɉö)xíux¹Y¯ÏÏû\"%¡iJ‰RŠÀqðm;µn®/%”JP©¤×B\ñ‚¾îõzx¥b}5ÒqÔüoûš–ÒL‘¶F@˵’dÿþŠQ©f®µ²P,B.—°¬õ½`øáÆx„”ÎÈ¡C� ×-ëD.m¥ÉÜZW�ÆÅ‹ÏûR66o¯²rµš‚ÎçÓ•¡Ô›ç¥U©²n¸¡: «öv[ʰRív_Ý|·’)Q’@¤+IÖÞs™ë_7èÔ·¾ud@RK;é‰{˦yfÃ$ÉZ€º`#IÀ÷Ó•i¿RWV’Ðêõèõ7/wœáá{†zh÷ÀÆfo—@xÃÙ³3b6’E)H×Mc>#4Hnð¬7´¶ms²ÝæíFƒn¯·î„aTFï¾ûÞ/·K >Ñn?«6qÀ ‚T¡p-øÁÇW–a¤²kÛ,§:æ/\ XY¹&ÜlÏû¤-kðåͼ°nÝ‘3Í|iÏž‡ÓZ÷CJ—J¨‘‘4a->2$ DæI%—c%®È®aPn6ñggñ»]¤mcj‰•¦Y)Üxã{‹Ï??£7¶Xç§ÚRGÖo6ûÂ0þOÀþõþžH¹¶æÉB*ë2QDÝuñ<¤”xA@³Ó¡}»ß!P�Ë�²X¤8>ŽY(ˆâ¾}ÿ Ô5 tÿìo¥©7öíÞýÀr±xûzºyjt4ÇTÂEÆ1¶Rìr&=�j¥rY}LàìºxŽƒµºJÐë!”Bf±ø‹‹tðƒ ðH³ùéó³�ÝGê°ç,ORÌaÖ7lÔ‡ïÚö/ øçk´:ŠJÄì,MÏÃ4 nGÊ­ù,Ë¢Z¯�Œ°ÚlÒk40â8àû|þøqú`Õ& )Zo¦lp ß�Ó>º„ˆG–—ýn¹¬|øì‘$¸ŽƒaÛ†T›MjÓÓÛ¿&~‡òÄű1VææX�Ÿ§/%#§N‘;c Ï4Óøù§ü¬™jI46 !µüÎ;+âöÛBŒd¿,Îð0Ò0H€üØŵӆ�M�¥Ä)—ÉÓ´,„e1qâ%¥øG=ýíéó øãR: €ÕÍL õzkBÇ)—‘¶�JA>OI�MþG‹I¯wÚ‚ßÉsç:ý8Æ'}��en7�€uôk°7› Å�R¿>b& nc”Ë( oï^¤¹ãyTu»3ñêê\ûÏ> „3O=u^‡ER‡™]ðM@vuÆ6€sðûå4yÅÖ[q¼`+ÅÃ'OòÜÁƒø¦‰PŠÒÄvaë�_ÜïÏ£TÐo4N†ívóü�~ô'åû�j·³Án6ä �äY¸ aaŽäà¦Þ{ Žþ~£Ñ×÷VW÷À#õ|þ 9<|x×Å‹,>ÌM—.ñƒ#G¨8pÍœg Ð‹”Rq~þµpiivùôé󋯾ÚÏžÍê{“•É£ÔaRð`ÿB :ÛÌ–€¦.ÿç×õÀ#ðÄüpw¯'ì™|@>ó ³âÖëkÀ«$ ¢••·Ãv{&h·çVÎ�›™ûÅ/æ¶vÐú¡¾ônkyÀ]HSÀÑaãë\ÎÂêwÂØ$üç>5=_ ôùX«…å8+a§Ó[­wßxãØê»ï¶:/¾¸| _»y=°ÐP[4# ” B?2›Ù\‘ή&²^Çó5¸ý8:¥ßÀÝ ¼©}v’ÿ†ïwÓ/YÑkUé¿lp‘`oe¤ÎÕŒ@¼i-Ô3h”/eÒ Ï2Ûx9Ñ °ØÌÂj§ŠµÙ„âÏÀ¹:œ…)©ÍëkÄïÀ¥nê¾E`NŸ;ú¶UM"º*®ë±ÞN¬,xÓ‚;cͺý3ðî ðÃ¥ôdž^ ú¼È•Hx±AÌ�{°kÜ[†»–àøihX¿¡ÓbN[þ;6Ú\` ¨-ièYÖ±ßÐ×|   Áš>g-]6·\Ò ¤>̲$ÏiMZ úü�ÿ"ó÷<þv+s IEND®B`‚atomes_1.3.1/metadata/icons/atomes.ico0000664000175000017500000017017615212624223017400 0ustar lerouxlerouxx| hð(xø      !$'))*)(%"  %).134441.+&" "(.37;>?@><94/)$ ")07=BFIKKJGC>82+% !)18@FLQTVVURNIB;4,%&/8@IPV[_aa`]XSLD;3+# #+5>Hÿ=ÿ@ÿ2ÿikkjgb\ULD;2)"&0:Rÿfÿpÿtÿuÿrÿjÿ[ÿ6ÿspke]ULB8/'   )@ÿgÿxÿ‚ÿˆÿ‹ÿŒÿŠÿ„ÿ|ÿnÿSÿwsle\SI@6.& "Eÿmÿ€ÿŒÿ“ÿ˜ÿ›ÿ›ÿ™ÿ•ÿŽÿ„ÿtÿYÿysldZPG=5,&   &ÿjÿ�ÿ�ÿ™ÿŸÿ£ÿ¥ÿ¦ÿ¤ÿ ÿ›ÿ’ÿ†ÿsÿOÿyrjaXOE<4-'"  \ÿ|ÿ�ÿ™ÿ¢ÿ¨ÿ«ÿ­ÿ®ÿ¬ÿ©ÿ¤ÿœÿ‘ÿ‚ÿjÿÿwph_VMD=5/*%"  ÿnÿ‡ÿ–ÿ¡ÿ¨ÿ®ÿ²ÿ´ÿ´ÿ²ÿ¯ÿªÿ£ÿ™ÿŒÿxÿRÿ}vng^VMF?94/+(%"  Nÿxÿ�ÿ›ÿ¥ÿ­ÿ²ÿ·ÿ»ÿ»ÿ¸ÿ³ÿ®ÿ§ÿžÿ’ÿ€ÿbÿ�{tmf^VPIC>:52.+)&$" Yÿ}ÿ‘ÿžÿ¨ÿ¯ÿµÿ½ÿÚÿìÿÂÿ·ÿ±ÿªÿ¡ÿ•ÿ„ÿiÿ…€ztmg`YSNIEA=:741.+)&%"  ]ÿÿ’ÿŸÿ©ÿ°ÿ¶ÿÃÿÿÿÿÿÑÿ¸ÿ²ÿ«ÿ¢ÿ–ÿ†ÿkÿˆ„€zuojd^YUPMIFB?<:741/,*(%#! Zÿ}ÿ‘ÿžÿ¨ÿ¯ÿµÿ½ÿáÿúÿÃÿ·ÿ±ÿªÿ¡ÿ•ÿ„ÿiÿ‹ˆ…€|wrmhd`\YUROLIFC@=:852/-+(&#! Pÿxÿ�ÿ›ÿ¥ÿ­ÿ²ÿ·ÿ»ÿ¼ÿ¸ÿ³ÿ®ÿ§ÿžÿ’ÿ€ÿbÿ�‹‰†‚~zvrnkgda^[XUROLIFDA>;8530.+(&$"   3ÿoÿ‡ÿ–ÿ ÿ¨ÿ®ÿ±ÿ³ÿ´ÿ²ÿ¯ÿªÿ£ÿ™ÿŒÿxÿTÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿˆ…‚~{xuroligda^[XVSPMJGDA>;9631.+)&%"    _ÿ}ÿŽÿ™ÿ¢ÿ§ÿ«ÿ­ÿ­ÿ¬ÿ©ÿ£ÿœÿ‘ÿƒÿkÿ1ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ‚€}{yvtqnljgdb_\YVSQNKHEB?<:741/,*(%#!  "%'(((&$" :ÿlÿ‚ÿ�ÿ™ÿŸÿ£ÿ¥ÿ¥ÿ¤ÿ ÿ›ÿ’ÿ†ÿtÿTÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ�}zyvtqomjheb`]ZWTQNKHFC@=:852/-+(&#!   %(,/12220.*&" Mÿoÿ�ÿŒÿ“ÿ˜ÿ›ÿ›ÿ™ÿ•ÿ�ÿ…ÿvÿ]ÿ‰ÿqÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€}{ywtspnkhfc`^[XUROLIFDA>;8530.+(&$"!%).26:<=>=;84/)# Kÿjÿyÿƒÿ‰ÿŒÿŒÿŠÿ…ÿ}ÿpÿYÿœÿ’ÿ‚ÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ}|zwvsqnkifda^[XVSPMJGDA>;9631.+)'%#" "#&*.38=ADGIIIFB=81+$ .ÿYÿiÿrÿvÿwÿtÿmÿ`ÿFÿ¢ÿŸÿ™ÿ�ÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€~|zxvsqnljgdb_\YVSQNKHEB?<:742/-+*)))+-048=CGLPSUUSQMGA:2+#(@ÿKÿMÿFÿ‰ÿ–ÿTT ÿvv ÿ¡ÿ�ÿ•ÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€|zxvtqomjheb`]ZWTQNKHFC@=;87544458;>CIMSX[^``^[WQJB:1)  &333ÿ^^ ÿ^^ ÿSÿ{ÿŽÿTTÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€}{ywtspnkhfc`^[XUROLIGDCA@@@ACFJOSY'ÿ4ÿ%ÿijjheaZRJA7.%%^^ ÿ^^ ÿ^^ ÿ^^ ÿfÿƒÿTTÿTTÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ}|zwvsqnkifda^[XVSQOMLLLMORU<ÿ\ÿiÿpÿrÿpÿjÿ]ÿ<ÿqmhbYPF=2)  %^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿsÿTTÿTTÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€~|zxvsqnljgdb_][YXXXY[]Wÿoÿ|ÿ„ÿ‰ÿ‹ÿ‰ÿ…ÿ~ÿqÿYÿtnh_VLA6,# %^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€|zxvtqpmkigeddddf]ÿvÿ…ÿ�ÿ•ÿ™ÿšÿ™ÿ–ÿ�ÿ‡ÿyÿ`ÿtmdZOD9.% &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€}{ywusqponnoVÿvÿˆÿ“ÿœÿ¡ÿ¤ÿ¥ÿ¤ÿ¢ÿ�ÿ•ÿŠÿyÿYÿpg\RF;0&333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€~}{zyxx:ÿnÿ„ÿ“ÿ�ÿ¤ÿ©ÿ¬ÿ­ÿ­ÿªÿ¦ÿŸÿ•ÿ‡ÿqÿ:ÿg]RG;1&333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ‚�€€Yÿ{ÿŽÿ›ÿ¤ÿ«ÿ°ÿ³ÿ´ÿ³ÿ°ÿ¬ÿ¦ÿ�ÿ�ÿ~ÿ\ÿg\RF;0&!^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvv ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿfÿ‚ÿ”ÿ ÿ©ÿ¯ÿ´ÿ¹ÿ¼ÿºÿµÿ°ÿªÿ¢ÿ–ÿ…ÿjÿdZOD9.% "^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿVV ÿTTÿXXÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿssÿ››(ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿ—ÿ£ÿ«ÿ²ÿ¸ÿÊÿÿÿÏÿºÿ³ÿ­ÿ¥ÿšÿ‰ÿpÿ_VKA6," $^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿUUÿSSÿiiÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿ||ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvv ÿvvÿvvÿ�ÿ˜ÿ£ÿ¬ÿ³ÿºÿíÿÿÿÿÿ¼ÿ´ÿ®ÿ¥ÿšÿ‹ÿrÿ,ÿPF<2) &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿZZ ÿSSÿUUÿuuÿvv ÿvv ÿvv ÿvv ÿvvÿvvÿuuÿ††ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿ—ÿŸÿ¤ÿ¢ÿ«ÿ±ÿ¸ÿÇÿïÿËÿ¹ÿ³ÿ­ÿ¤ÿ™ÿ‰ÿpÿSJ@7.%333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿWWÿTTÿllÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿuuÿ¡¡'ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿ¤ÿ¨ÿ«ÿ­ÿ¨ÿ¯ÿ´ÿ¸ÿºÿ¹ÿ´ÿ°ÿªÿ¡ÿ•ÿ…ÿiÿJB:1(   ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿTTÿXXÿxxÿvvÿvv ÿvv ÿvv ÿvvÿvvÿÿ‰‰ÿ««6ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿ©ÿ«ÿ­ÿ­ÿ­ÿ£ÿªÿ¯ÿ²ÿ³ÿ²ÿ¯ÿ«ÿ¥ÿœÿ�ÿ|ÿZÿA:2*#"^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿZZ ÿRRÿjjÿvvÿvv ÿvv ÿvv ÿvv ÿxxÿ‘‘ÿŒŒÿ““ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿ­ÿ­ÿ­ÿ«ÿ¨ÿ£ÿ£ÿ¨ÿ«ÿ¬ÿ«ÿ©ÿ¤ÿžÿ”ÿ…ÿoÿ5ÿ81+$ #^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿVVÿYYÿvvÿvvÿvv ÿuu!ÿyyÿ‘‘ÿ““ÿ��ÿ‰‰ÿ¤¤-ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿ­ÿ«ÿ¨ÿ£ÿ�ÿ•ÿšÿŸÿ¢ÿ¤ÿ£ÿ ÿ›ÿ“ÿˆÿvÿVÿ5/)# %^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿRRÿnnÿvvÿvvÿ††ÿ––ÿ––ÿ””ÿ’’ÿŽŽÿˆˆÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¦¦1ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv"ÿvv!ÿvvÿvvÿvvÿvvÿ�ÿ“ÿ—ÿ˜ÿ—ÿ”ÿŽÿ…ÿvÿ\ÿ1,&" 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿggÿ‹‹ÿ’’ÿ––ÿ––ÿ––ÿ••ÿ””ÿ‘‘ÿŒŒÿ˜˜ÿ——ÿŒŒÿ‰‰ÿ††ÿ„„ÿƒƒÿƒƒÿ„„ÿ††ÿ‰‰ÿŒŒÿ––ÿ¨¨3ÿªª5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ««4ÿ  ,ÿ‚‚ÿuuÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv"ÿvv!ÿvvÿvvÿvvÿvvÿvvÿvvÿyÿ‚ÿ†ÿˆÿ‡ÿ‚ÿ{ÿmÿUÿ,(# 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿ‡‡ÿ’’ÿ””ÿ••ÿ––ÿ––ÿ••ÿ““ÿ��ÿ‡‡ÿ„„ÿˆˆÿ‰‰ÿŠŠÿ‹‹ÿ‹‹ÿ‹‹ÿ‹‹ÿŠŠÿ‰‰ÿˆˆÿ††ÿ��ÿ��ÿ¡¡*ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªª4ÿ  ,ÿ††ÿttÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿvvÿ©©3ÿvv ÿWÿeÿlÿoÿmÿfÿXÿ3ÿ(#  ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿooÿ‘‘ÿ““ÿ••ÿ––ÿ––ÿ••ÿ””ÿ’’ÿŽŽÿ‡‡ÿŒŒÿ��ÿ��ÿŽŽÿŽŽÿŽŽÿŽŽÿ��ÿ��ÿŒŒÿ‹‹ÿŠŠÿˆˆÿ……ÿ‰‰ ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ££-ÿŒŒÿŒŒÿ‚‚ÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿj`VLÿ:2+%   "^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿƒƒÿ‘‘ÿ””ÿ••ÿ––ÿ––ÿ••ÿ””ÿ��ÿ‹‹ÿ‹‹ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿŠŠÿ‡‡ÿ……ÿ››"ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ««5ÿžž%ÿ�� ÿŠŠÿ��ÿ““ÿ••ÿ……ÿuu"ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYOE;2+$ $^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿjjÿ��ÿ’’ÿ””ÿ––ÿ––ÿ––ÿ””ÿ““ÿ��ÿ‰‰ÿ’’ÿ‘‘ÿ‘‘ÿ’’ÿ’’ÿ‘‘ÿ‘‘ÿ‘‘ÿ��ÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿ‰‰ÿƒƒÿ’’ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©4ÿ  'ÿ�� ÿŠŠÿ��ÿ““ÿ””ÿ––ÿ––ÿššÿ{{ÿvv#ÿvv#ÿvv"ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^SI>4+$ &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿ††ÿ��ÿ““ÿ••ÿ––ÿ––ÿ••ÿ””ÿ‘‘ÿ��ÿ““ÿ““ÿ““ÿ““ÿ““ÿ““ÿ““ÿ““ÿ’’ÿ’’ÿ‘‘ÿ��ÿ��ÿŽŽÿŒŒÿ‰‰ÿ††ÿ��ÿªª4ÿ©©3ÿ¤¤-ÿ‰‰ÿŒŒÿ��ÿ““ÿ””ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ‘‘ÿvv#ÿvv"ÿvv!ÿvv ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMC8.& 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿffÿ��ÿ‘‘ÿ””ÿ••ÿ––ÿ––ÿ••ÿ““ÿ““ÿ””ÿ••ÿ••ÿ••ÿ••ÿ••ÿ••ÿ””ÿ””ÿ““ÿ’’ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿŠŠÿ††ÿ��ÿŽŽ ÿ‹‹ÿ��ÿ““ÿ””ÿ––ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿww!ÿvv ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^SG=2)   ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]]ÿccÿhhÿ‚‚ÿ��ÿ““ÿ””ÿ••ÿ––ÿ––ÿ••ÿ••ÿ••ÿ••ÿ••ÿ––ÿ––ÿ••ÿ••ÿ••ÿ••ÿ””ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿ„„ÿŠŠÿ““ÿ””ÿ––ÿ––ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ‚‚ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMB7-$"^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿggÿjjÿttÿ‹‹ÿ��ÿ““ÿ••ÿ––ÿ••ÿ••ÿ––ÿ––ÿ––ÿ——ÿ——ÿ——ÿ——ÿ––ÿ––ÿ––ÿ••ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿ„„ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ””ÿ„„ÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2( #^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿiiÿllÿllÿ‰‰ÿ��ÿ““ÿ””ÿ••ÿ––ÿ––ÿ——ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ‡‡ÿ……ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿ��ÿ~~ ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC8-$ %^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿhhÿkkÿmmÿooÿyyÿ””ÿ””ÿ••ÿ––ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿ……ÿ““ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿ��ÿ��ÿ——ÿ¬¬6ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3) 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿffÿjjÿllÿnnÿppÿqqÿ’’ÿ••ÿ––ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿˆˆÿ‰‰ÿ˜˜ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿ‰‰ÿ›› ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD8.%333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿhhÿkkÿmmÿooÿqqÿrrÿyyÿ——ÿ––ÿ——ÿ˜˜ÿ˜˜ÿ™™ÿ™™ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ––ÿ••ÿ””ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿƒƒÿ””ÿ““ÿ‘‘ÿ��ÿˆˆÿœœ!ÿ§§1ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4* !^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿiiÿmmÿnnÿppÿrrÿrrÿttÿ’’ÿ——ÿ——ÿ˜˜ÿ™™ÿ™™ÿ™™ÿššÿššÿššÿššÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿ††ÿˆˆÿ��ÿ��ÿ——ÿ««6ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/% #^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿffÿjjÿmmÿooÿqqÿrrÿssÿttÿƒƒÿ˜˜ÿ˜˜ÿ™™ÿ™™ÿ™™ÿššÿššÿ››ÿ››ÿ››ÿ››ÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ’’ÿ��ÿ��ÿŒŒÿˆˆÿƒƒÿ›› ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿhhÿkkÿnnÿooÿqqÿssÿssÿuuÿttÿ””ÿ˜˜ÿ™™ÿ™™ÿššÿššÿ››ÿœœÿ��ÿ��ÿœœÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ””ÿ““ÿ‘‘ÿ��ÿ��ÿ‰‰ÿŠŠ ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^RG;1&(^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿhhÿllÿnnÿppÿqqÿssÿttÿuuÿvvÿ€€ÿ™™ÿ™™ÿššÿššÿ››ÿ��ÿŸŸÿ¢¢ÿ¢¢ÿŸŸÿ��ÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿ��ÿŠŠÿ††ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMA7," #333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿvvÿ™™ÿ™™ÿššÿ››ÿœœÿŸŸÿ§§ÿ©©ÿ©©ÿ§§ÿŸŸÿœœÿ››ÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ„„ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2(&^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿvvÿ‚‚ÿ››ÿššÿ››ÿ��ÿ¢¢ÿ©©ÿ©©ÿ©©ÿ©©ÿ¢¢ÿ��ÿ››ÿššÿššÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿƒƒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC7-# #+^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿwwÿvvÿ——ÿššÿ››ÿ��ÿ¢¢ÿ©©ÿ©©ÿ©©ÿ©©ÿ¢¢ÿ��ÿ››ÿššÿššÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿƒƒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3)  (1^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿvvÿwwÿ‰‰ÿ››ÿ››ÿœœÿŸŸÿ§§ÿ©©ÿ©©ÿ§§ÿŸŸÿœœÿ››ÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ„„ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD8.% '.7^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿhhÿllÿnnÿppÿqqÿssÿttÿuuÿvvÿvvÿwwÿwwÿ˜˜ÿššÿ››ÿ��ÿŸŸÿ¢¢ÿ¢¢ÿŸŸÿ��ÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿ��ÿŠŠÿ††ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4*  '.6333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿhhÿkkÿnnÿooÿqqÿssÿssÿuuÿuuÿvvÿwwÿwwÿ……ÿššÿššÿ››ÿœœÿ��ÿ��ÿœœÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ””ÿ““ÿ‘‘ÿ��ÿ��ÿ‰‰ÿ‰‰ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/%!(/6>^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿbbÿffÿjjÿmmÿooÿqqÿrrÿssÿttÿuuÿvvÿvvÿwwÿyyÿ™™ÿššÿššÿ››ÿ››ÿ››ÿ››ÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ’’ÿ��ÿ��ÿŒŒÿˆˆÿŒŒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" ")/7?G^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿddÿhhÿkkÿeeÿeeÿiiÿmmÿnnÿppÿrrÿrrÿttÿuuÿuuÿvvÿwwÿvvÿ‰‰ÿššÿššÿššÿššÿššÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿ††ÿ––ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^RG;1&")08@HP^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿYY ÿZZ ÿiiÿkkÿmmÿnnÿooÿaaÿhhÿkkÿmmÿooÿqqÿrrÿssÿttÿuuÿvvÿvvÿwwÿvvÿ——ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ––ÿ••ÿ””ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿ��ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMA7,"  (08@IQY^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿWW ÿTTÿSSÿeeÿmmÿooÿooÿppÿrrÿeeÿffÿjjÿllÿnnÿppÿqqÿrrÿttÿttÿuuÿvvÿvvÿvvÿ‹‹ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿˆˆÿ‘‘ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2(&.7@IRZb^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿWW ÿTTÿTTÿTTÿSSÿllÿppÿppÿqqÿqqÿqqÿmmÿccÿhhÿkkÿmmÿooÿqqÿqqÿssÿttÿttÿuuÿuuÿvvÿvvÿ™™ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿ……ÿ¡¡*ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC7-# "+4>GQZb333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿWW ÿSSÿTTÿTTÿTTÿTTÿSSÿiiÿqqÿqqÿqqÿqqÿqqÿqqÿbbÿeeÿiiÿllÿnnÿooÿqqÿqqÿssÿttÿttÿuuÿuuÿuuÿ……ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ‡‡ÿ‰‰ ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3) &/: ÿLÿXÿ\ÿYÿTTÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿ``ÿqqÿqqÿqqÿqqÿppÿooÿnnÿbbÿggÿjjÿllÿnnÿooÿqqÿqqÿrrÿssÿttÿttÿuuÿxxÿ——ÿ——ÿ——ÿ——ÿ––ÿ––ÿ––ÿ••ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿ……ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD8.% )3Yÿlÿvÿ|ÿ}ÿ|ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿUUÿqqÿqqÿppÿooÿnnÿllÿkkÿccÿccÿhhÿjjÿmmÿnnÿooÿqqÿqqÿrrÿrrÿssÿssÿssÿŠŠÿ——ÿ––ÿ••ÿ••ÿ••ÿ••ÿ””ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿƒƒÿ››"ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4*  "9ÿfÿyÿ„ÿŒÿ�ÿ‘ÿ�ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿYYÿnnÿnnÿllÿjjÿggÿbbÿ^^ÿ^^ÿddÿhhÿjjÿllÿnnÿooÿppÿqqÿrrÿrrÿssÿssÿssÿ””ÿ••ÿ••ÿ••ÿ••ÿ––ÿ––ÿ••ÿ‘‘ÿ��ÿ��ÿŽŽÿŒŒÿŠŠÿ††ÿ’’ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/% +ÿhÿ~ÿ‹ÿ”ÿšÿ�ÿžÿ�ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿUUÿeeÿffÿaaÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿddÿhhÿjjÿllÿmmÿnnÿooÿppÿqqÿqqÿqqÿrrÿˆˆÿ““ÿ““ÿ””ÿ––ÿ––ÿ––ÿ••ÿ““ÿŽŽÿˆˆÿŒŒÿ‰‰ÿ††ÿ��ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" _ÿ{ÿŒÿ—ÿŸÿ¤ÿ§ÿ¨ÿ§ÿ¤ÿ|ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿXX ÿ\\ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿggÿiiÿkkÿllÿmmÿnnÿooÿooÿppÿppÿssÿ””ÿ��ÿ””ÿ••ÿ––ÿ––ÿ––ÿ””ÿ��ÿˆˆÿ‰‰ÿƒƒÿ’’ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^RG;1& Aÿrÿˆÿ–ÿŸÿ¦ÿ«ÿ®ÿ¯ÿ®ÿ«ÿ‰ÿ�ÿ�ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿXX ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]]ÿaaÿffÿhhÿjjÿkkÿmmÿmmÿnnÿnnÿooÿnnÿ€€ÿ��ÿ’’ÿ••ÿ––ÿ––ÿ––ÿ””ÿ‘‘ÿŠŠÿ……ÿ››"ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMA7," [ÿ}ÿ�ÿœÿ¥ÿ¬ÿ±ÿ´ÿµÿ´ÿ±ÿ�ÿ‘ÿ’ÿ’ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿYY ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿffÿhhÿiiÿjjÿkkÿllÿllÿllÿooÿŠŠÿ‘‘ÿ””ÿ––ÿ––ÿ––ÿ••ÿ““ÿ��ÿ‘‘ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2( fÿƒÿ”ÿ ÿ©ÿ¯ÿµÿ½ÿÇÿ¾ÿ¶ÿ’ÿ‘ÿ�ÿŽÿTTÿTTÿTTÿTTÿTTÿTTÿUUÿZZ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿ^^ÿbbÿeeÿffÿhhÿhhÿiiÿiiÿhhÿÿ��ÿ””ÿ••ÿ––ÿ––ÿ––ÿ””ÿ��ÿˆˆÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC7-# jÿ†ÿ–ÿ¢ÿ«ÿ±ÿ¸ÿÜÿÿÿóÿºÿ�ÿŽÿ‹ÿ†ÿTTÿTTÿTTÿTTÿVVÿZZ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿ__ÿaaÿbbÿccÿccÿccÿbbÿ��ÿ’’ÿ••ÿ––ÿ––ÿ––ÿ””ÿ‘‘ÿŒŒÿ  'ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3) jÿ†ÿ–ÿ¢ÿ«ÿ±ÿ¸ÿ×ÿÿÿçÿºÿ²ÿ†ÿ€ÿTTÿTTÿTTÿTTÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ��ÿ‘‘ÿ””ÿ––ÿ––ÿ––ÿ••ÿ’’ÿŽŽÿ””ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD9.%eÿ‚ÿ”ÿ ÿ©ÿ¯ÿµÿ»ÿÃÿ½ÿµÿ°ÿ©ÿ¡ÿTTÿTTÿTTÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿ��ÿ““ÿ••ÿ––ÿ––ÿ••ÿ““ÿ��ÿˆˆÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4* Yÿ|ÿ�ÿœÿ¥ÿ¬ÿ°ÿ³ÿµÿ´ÿ±ÿ¬ÿ¦ÿ�ÿTTÿTTÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿŒŒÿ’’ÿ””ÿ––ÿ––ÿ––ÿ””ÿ‘‘ÿŒŒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/%:ÿpÿ‡ÿ•ÿŸÿ¦ÿ«ÿ®ÿ¯ÿ®ÿ«ÿ¦ÿ ÿ–ÿ‰ÿÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿhhÿ��ÿ””ÿ––ÿ––ÿ––ÿ••ÿ““ÿŽŽÿƒƒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" \ÿzÿ‹ÿ–ÿžÿ£ÿ¦ÿ§ÿ¦ÿ£ÿŸÿ—ÿ�ÿ}ÿcÿ@333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿŽŽÿ““ÿ••ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^SG;1&eÿ|ÿŠÿ“ÿ™ÿœÿ�ÿœÿ™ÿ”ÿ‹ÿ~ÿjÿ<ÿ421^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿkkÿvvÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMB7,# ÿbÿwÿƒÿŠÿŽÿ�ÿŽÿ‹ÿ„ÿyÿgÿAÿ+)(&%$^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿggÿvvÿvvÿvv ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TI=2(Rÿhÿsÿyÿ{ÿzÿtÿkÿXÿÿ"! 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvvÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿf[OC8.$ @ÿPÿUÿRÿEÿ 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿvvÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaVJ>4)   333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ]QF:/% ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿvvÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdXLA5+"  ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_SH<1'333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿg[PD8.# 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5*!333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿkaUI=2( ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿj^RF;/% ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿh]QE9.$ 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿqg\PD8.$ 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿrh\QE9.% 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿTTÿvv ÿvv!ÿvv ÿ˜ÿ‰ÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ{si^RF;/& 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv ÿœÿ�ÿxÿvv ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ|tk`UI=2( ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿTT ÿvv!ÿ£ÿŸÿ”ÿ‚ÿvvÿ©©3ÿ©©3ÿ©©3ÿ„~vmbXL@5+! 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿvÿŽÿ›ÿvv ÿ¤ÿ¡ÿ™ÿŠÿmÿ©©3ÿ©©3ÿ©©3ÿ…€ype[OC8-# 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿhÿ‡ÿ—ÿ ÿ¤ÿTÿ^ÿbÿ`ÿYÿHÿІ‚{si^SG;0& 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿRÿÿ“ÿ^ÿoÿxÿ~ÿ€ÿÿ{ÿsÿfÿLÿƒ}ukaVJ>3( 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿGÿiÿ{ÿ†ÿ�ÿ‘ÿ’ÿ’ÿ�ÿ‰ÿ€ÿqÿXÿ~wncXL@5+! ^^ ÿ^^ ÿAÿkÿÿŒÿ”ÿšÿžÿŸÿžÿœÿ—ÿ�ÿ…ÿtÿWÿxoeZNB7,"  "+dÿ}ÿ�ÿ—ÿŸÿ¤ÿ§ÿ¨ÿ¨ÿ¦ÿ¡ÿ›ÿ’ÿ„ÿpÿDÿoeZOC7,# Nÿtÿ‰ÿ–ÿ ÿ§ÿ«ÿ®ÿ°ÿ¯ÿ­ÿ©ÿ£ÿ›ÿ�ÿ~ÿaÿndYNC7," aÿ~ÿ�ÿ�ÿ¦ÿ¬ÿ±ÿ´ÿ¶ÿµÿ³ÿ®ÿ©ÿ¡ÿ–ÿ‡ÿoÿ2ÿbXLA5+" jÿ…ÿ•ÿ¡ÿ©ÿ°ÿµÿ¼ÿÄÿÀÿ¸ÿ²ÿ­ÿ¥ÿ›ÿŒÿwÿLÿ^TI>3) -ÿoÿˆÿ—ÿ£ÿ«ÿ²ÿ¹ÿÑÿÿÿÿÿ¾ÿµÿ®ÿ§ÿ�ÿ�ÿzÿTÿYOD:0&.ÿoÿˆÿ˜ÿ£ÿ¬ÿ²ÿ¹ÿÕÿÿÿÿÿ¾ÿµÿ¯ÿ§ÿ�ÿ�ÿ{ÿTÿRI?5,# kÿ…ÿ–ÿ¡ÿªÿ±ÿ¶ÿ¾ÿËÿÃÿ¹ÿ³ÿ­ÿ¦ÿ›ÿ�ÿxÿMÿJB90'bÿ€ÿ‘ÿžÿ§ÿ­ÿ²ÿ¶ÿ¸ÿ·ÿ´ÿ°ÿªÿ¢ÿ—ÿˆÿpÿ4ÿB:2*" PÿvÿŠÿ˜ÿ¡ÿ¨ÿ­ÿ°ÿ±ÿ±ÿ¯ÿ«ÿ¥ÿœÿ‘ÿ€ÿcÿ@92+#fÿÿ�ÿšÿ¡ÿ¦ÿ©ÿ«ÿªÿ¨ÿ¤ÿ�ÿ”ÿ‡ÿrÿGÿ50*# Eÿnÿ‚ÿ�ÿ—ÿ�ÿ ÿ¢ÿ¡ÿŸÿšÿ“ÿˆÿwÿZÿ1,(" Lÿmÿ~ÿ‰ÿ�ÿ”ÿ•ÿ•ÿ’ÿŒÿƒÿuÿ\ÿ*'# >ÿcÿsÿ}ÿ‚ÿ„ÿƒÿÿxÿjÿQÿ#!CÿZÿcÿgÿeÿ^ÿNÿ  ÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿðÿÿþÿÿðÿÿàÿÿðÿ€ÿøþ?ÿøÿüÿüÿþÿþÿþÿÿÿÿÿÿÿÿÿþÿþÿþÿþÿþÿþÿüÿüÿüÿüÿüÿü?ÿøÿøÿÿøÿÿøÿÿø?ÿÿðÿÿðÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿàÿÿÿàÿÿÿàÿÿÿÀÿÿÿÀÿÿÿÀÿÿÿ€ÿÿÿÿÿþ?ÿÿü?ÿÿø?ÿÿðÿÿàÿÿÀÿÿÿÀÿÿÿ€ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿ€?ÿÿÿ€?ÿÿÿ€ÿÿÿÀÿÿÿàÿÿÿÿàÿÿÿÿøÿÿÿÿþÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÿÿøÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿatomes_1.3.1/metadata/icons/atomes.svg0000664000175000017500000002542715212624223017423 0ustar lerouxleroux atomes_1.3.1/metadata/icons/atomes-project.svg0000664000175000017500000002513515212624223021063 0ustar lerouxleroux atomes_1.3.1/metadata/icons/atomes-workspace.svg0000664000175000017500000003117715212624223021416 0ustar lerouxleroux atomes_1.3.1/metadata/icons/atomes-workspace.ico0000664000175000017500000020407615212624223021371 0ustar lerouxleroux€€ ((€     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}€��������������������������������������������������������������������������€}vk]J6$  ,BàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿáááøA+ 2KàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùK26QàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùP6 8TßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿßßßúT7  :VßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúU9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿêêêÿèèèÿæææÿæææÿæææÿéééÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿèèèÿâââÿÞÞÞÿÜÜÜÿÛÛÛÿÝÝÝÿßßßÿâââÿèèèÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿçççÿßßßÿÚÚÚÿÖÖÖÿÓÓÓÿÒÒÒÿÓÓÓÿ×××ÿÛÛÛÿàààÿçççÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿèèèÿßßßÿÙÙÙÿÓÓÓÿÍÍÍÿÈÈÈÿÇÇÇÿÈÈÈÿÌÌÌÿÒÒÒÿÙÙÙÿßßßÿèèèÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿãããÿÚÚÚÿÑÑÑÿ²²³ÿ��—ÿ¥¥¨ÿ¸¸¹ÿ½½½ÿÂÂÂÿÉÉÉÿÑÑÑÿÙÙÙÿàààÿèèèÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞúV9  :Wßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿéééÿßßßÿ¼¼¿ÿtt�ÿ|ÿ€ÿ}ÿ00mÿ›› ÿ¸¸¸ÿÀÀÀÿÊÊÊÿÓÓÓÿÚÚÚÿáááÿèèèÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿÁÁÃÿ00sÿ�ÿ›ÿ ÿœÿ�ÿ""wÿ˜˜žÿ¸¸¸ÿÂÂÂÿÌÌÌÿÔÔÔÿÚÚÚÿßßßÿäääÿèèèÿêêêÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿäääÿ||Žÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ--fÿ¯¯°ÿ»»»ÿÄÄÄÿÌÌÌÿÓÓÓÿØØØÿÛÛÛÿÞÞÞÿàààÿãããÿåååÿèèèÿéééÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿãããÿ22tÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ""yÿ¨¨©ÿ³³³ÿºººÿÂÂÂÿÈÈÈÿÍÍÍÿÑÑÑÿÔÔÔÿ×××ÿÙÙÙÿÛÛÛÿÝÝÝÿßßßÿâââÿäääÿæææÿèèèÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿääåÿ55yÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ""|ÿ¤¤¥ÿ«««ÿ±±±ÿ¸¸¸ÿ½½½ÿÂÂÂÿÅÅÅÿÉÉÉÿÌÌÌÿÏÏÏÿÑÑÑÿÔÔÔÿÖÖÖÿÙÙÙÿÙÙÙÿÜÜÜÿÞÞÞÿàààÿãããÿåååÿæææÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿçççÿæææÿäääÿãããÿßßàÿ>>pÿ‘ÿ¦ÿ²ÿ¹ÿ³ÿ¨ÿ•ÿ!!oÿ££{ÿ¨¨€ÿªª¦ÿ®®«ÿ²²²ÿ¶¶¶ÿ¹¹¹ÿ½½½ÿÀÀÀÿÃÃÃÿÅÅÅÿÈÈÈÿÊÊÊÿÍÍÍÿÐÐÐÿÒÒÒÿÕÕÕÿ×××ÿÙÙÙÿÚÚÚÿÜÜÜÿÞÞÞÿáááÿäääÿæææÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿãããÿßßßÿÛÛÛÿÚÚÚÿÛÛÛÿÝÝÝÿàààÿãããÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿåååÿßßßÿÛÛÛÿÚÚÚÿÙÙÙÿÚÚÚÿ¡¡ªÿ~ÿ™ÿ¥ÿ©ÿ¦ÿ›ÿƒÿBBPÿ¦¦2ÿ©©3ÿ©©=ÿªªCÿªªÿ¬¬…ÿ®®ªÿ±±®ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¾¾¾ÿÁÁÁÿÄÄÄÿÇÇÇÿÊÊÊÿÌÌÌÿÎÎÎÿÑÑÑÿÓÓÓÿÕÕÕÿØØØÿÚÚÚÿÛÛÛÿÝÝÝÿàààÿâââÿäääÿäääÿåååÿäääÿâââÿÝÝÝÿÙÙÙÿÖÖÖÿÓÓÓÿÒÒÒÿÓÓÓÿÓÓÓÿ×××ÿÜÜÜÿãããÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿäääÿÜÜÜÿØØØÿÔÔÔÿÐÐÐÿÏÏÏÿÑÑÑÿÐÐÑÿ{{�ÿ|ÿŽÿ“ÿ�ÿ€ÿyÿ€ÿ‘‘-ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿªª€ÿ««ƒÿ­­™ÿ°°­ÿ²²±ÿµµµÿ···ÿ»»»ÿ½½½ÿÀÀÀÿÂÂÂÿÅÅÅÿÈÈÈÿËËËÿÎÎÎÿÏÏÏÿÒÒÒÿÔÔÔÿÖÖÖÿØØØÿÙÙÙÿÚÚÚÿÛÛÛÿÚÚÚÿØØØÿÕÕÕÿÐÐÐÿÍÍÍÿÉÉÉÿÈÈÈÿÈÈÈÿËËËÿÐÐÐÿÕÕÕÿÛÛÛÿâââÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿåååÿÝÝÝÿ×××ÿÐÐÐÿÊÊÊÿÆÆÆÿÄÄÄÿÅÅÅÿÊÊÊÿËËËÿ˜˜ ÿmmˆÿdÿpÿ++fÿ==‰ÿ ‘ÿxx(ÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªgÿ««‚ÿ­­™ÿ®®«ÿ±±¯ÿ³³³ÿ¶¶¶ÿ¹¹¹ÿ¼¼¼ÿ¿¿¿ÿÁÁÁÿÄÄÄÿÆÆÆÿÉÉÉÿÌÌÌÿÎÎÎÿÐÐÐÿÒÒÒÿÒÒÒÿÒÒÒÿÐÐÐÿÌÌÌÿÇÇÇÿ¿¿¿ÿ½½½ÿ½½½ÿ½½½ÿÁÁÁÿÈÈÈÿÏÏÏÿÖÖÖÿÝÝÝÿãããÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿàààÿØØØÿÏÏÏÿ¯¯±ÿŽŽ•ÿ££¦ÿ¶¶·ÿºººÿ¿¿¿ÿÆÆÆÿÇÇÇÿ››•ÿ[[ÿ22[ÿ==dÿmm(ÿtt-ÿvvÿ‡‡ ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªgÿªª‚ÿ««…ÿ®®ªÿ°°­ÿ²²±ÿµµµÿ···ÿºººÿ½½½ÿÀÀÀÿÂÂÂÿÅÅÅÿÆÆÆÿÇÇÇÿÇÇÇÿÄÄÄÿ©©¬ÿ‰‰™ÿ11eÿcc~ÿ††�ÿ°°±ÿ¸¸¸ÿÀÀÀÿÉÉÉÿÑÑÑÿØØØÿâââÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿæææÿÜÜÜÿºº½ÿrrŽÿ|ÿ€ÿ}ÿ//lÿ™™žÿ¶¶¶ÿ½½½ÿÀÀÀÿššŽÿ^^ ÿZZÿJJ=ÿffÿvv ÿvvÿwwÿœœ,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿ©©ÿ««„ÿ­­¨ÿ¯¯¬ÿ²²±ÿ³³³ÿ¶¶¶ÿ¸¸¸ÿºººÿ»»»ÿºººÿ  §ÿ((wÿ‰ÿ‘ÿ�ÿ�ÿbb‚ÿ®®¯ÿºººÿÄÄÄÿÎÎÎÿÖÖÖÿàààÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿåååÿ¿¿Áÿ//sÿ�ÿ›ÿ ÿœÿ�ÿ""wÿ––œÿ¶¶¶ÿ¶¶¶ÿ{{jÿ^^ ÿ^^ ÿYYÿVVÿttÿvv ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿ©©~ÿªª�ÿ««—ÿ­­ªÿ¯¯­ÿ¯¯¯ÿ™™�ÿ%%vÿ’ÿ¢ÿ¨ÿ§ÿ�ÿˆÿdd~ÿ¶¶¶ÿÂÂÂÿÌÌÌÿÕÕÕÿÞÞÞÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿâââÿzz�ÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ,,eÿ¬¬¬ÿ­­­ÿ\\0ÿ^^ ÿ^^ ÿ^^ ÿWWÿggÿvv ÿvv ÿvvÿ‡‡ ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿ¨¨eÿ¨¨ÿzzqÿ †ÿ¢ÿ¯ÿ¹ÿµÿ«ÿ™ÿ%%xÿµµ¶ÿÂÂÂÿÍÍÍÿÕÕÕÿßßßÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿàààÿ22sÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ""yÿ¥¥¦ÿ¥¥¤ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿWWÿrrÿvv ÿvvÿvvÿšš*ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿœœ,ÿuu(ÿ<<„ÿ§ÿ·ÿêÿÓÿ°ÿŸÿ€ÿ¦¦¨ÿÆÆÆÿÏÏÏÿ×××ÿàààÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿááâÿ44xÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ""{ÿŸŸ ÿŽŽŒÿ``ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿYYÿddÿvvÿvv ÿvvÿ}}ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿUUvÿ¥ÿ©ÿ³ÿËÿ¾ÿ®ÿ�ÿ((ÿ¾¾¿ÿËËËÿÓÓÓÿÛÛÛÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿãããÿáááÿàààÿÝÝÝÿ==pÿ‘ÿ¦ÿ²ÿ¹ÿ³ÿ¨ÿ•ÿ oÿžžvÿ‚‚Vÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿXXÿrrÿvv ÿvvÿ��ÿ––ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿvvÿtt1ÿ§ÿ¬ÿ§ÿ©ÿ¯ÿ­ÿ¤ÿ‘ÿ55oÿÈÈÈÿÑÑÑÿØØØÿßßßÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿâââÿÜÜÜÿÚÚÚÿ×××ÿ×××ÿ×××ÿŸŸ¨ÿ~ÿ™ÿ¥ÿ©ÿ¦ÿ›ÿƒÿBBPÿ  0ÿ‚‚"ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿffÿwwÿ„„ÿ““ÿ��ÿŸŸ)ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿ��,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿuu,ÿWW}ÿUU{ÿSStÿ •ÿ�ÿ›ÿ�ÿ++{ÿ²²·ÿÒÒÒÿ×××ÿÞÞÞÿâââÿâââÿâââÿâââÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿáááÿÚÚÚÿÕÕÕÿÑÑÑÿÏÏÏÿÍÍÍÿÎÎÎÿÎÎÎÿyyŽÿ|ÿŽÿ“ÿ�ÿ€ÿyÿ€ÿˆˆ+ÿVV#ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿ‹‹ÿ••ÿ––ÿ““ÿ�� ÿ��ÿŠŠÿ‰‰ÿ‰‰ÿŠŠÿŽŽÿšš%ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿŸŸ,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿvvÿzzÿ„„.ÿ,,tÿ~ÿ++~ÿ88oÿµµºÿÕÕÕÿÚÚÚÿÞÞÞÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿãããÿÚÚÚÿÔÔÔÿÍÍÍÿÈÈÈÿÃÃÃÿÂÂÂÿÄÄÄÿÇÇÇÿÈÈÈÿ––žÿll‡ÿdÿpÿ++fÿ==‰ÿ �ÿqq%ÿaaÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿzzÿ““ÿ––ÿ••ÿ‘‘ÿ‹‹ÿŽŽÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿŠŠÿ��'ÿ©©3ÿ©©3ÿ©©3ÿ©©2ÿ  (ÿ””ÿŽŽÿ{{ÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿwwÿ††"ÿ““&ÿ§§2ÿ¦¦zÿ¯¯¯ÿ©©ªÿÉÉÉÿÐÐÑÿØØØÿÞÞÞÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿÝÝÝÿÖÖÖÿÌÌÌÿ­­¯ÿŒŒ“ÿ¡¡¤ÿ´´´ÿ¸¸¸ÿ¾¾¾ÿÄÄÄÿÄÄÄÿ™™“ÿ[[ÿ22[ÿ==dÿmm(ÿrr,ÿmmÿ`` ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿŒŒÿ””ÿ––ÿ””ÿ��ÿ’’ÿ’’ÿ’’ÿ’’ÿ‘‘ÿ��ÿ��ÿ‰‰ÿ––ÿ¨¨2ÿ  *ÿ””ÿ‘‘ÿ••ÿ——ÿ�� ÿww"ÿvv!ÿvv ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©8ÿ¥¥�ÿ³³³ÿÃÃÃÿÒÒÒÿÛÛÛÿáááÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿÙÙÙÿ··ºÿqqŽÿ|ÿ€ÿ}ÿ..lÿ——œÿ³³³ÿ»»»ÿ¾¾¾ÿ™™�ÿ^^ ÿZZÿJJ=ÿffÿssÿaa ÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ``ÿyyÿ‘‘ÿ••ÿ––ÿ””ÿ••ÿ••ÿ••ÿ••ÿ””ÿ““ÿ‘‘ÿŽŽÿŠŠÿŒŒ ÿ‘‘ÿ••ÿ——ÿ˜˜ÿ˜˜ÿ––ÿ{{ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ¤¤[ÿ££¢ÿµµµÿÅÅÅÿÖÖÖÿáááÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿâââÿ¼¼¾ÿ..rÿ�ÿ›ÿ ÿœÿ�ÿ!!wÿ””šÿ³³³ÿ´´´ÿ{{iÿ^^ ÿ^^ ÿYYÿVVÿppÿggÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿooÿŒŒÿ””ÿ––ÿ––ÿ——ÿ——ÿ——ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿˆˆÿ’’ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ’’ÿŒŒÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ§§4ÿ™™‚ÿ¦¦¦ÿ¸¸¸ÿÈÈÈÿÚÚÚÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿßßßÿxx‹ÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ++eÿªªªÿ««ªÿ\\/ÿ^^ ÿ^^ ÿ^^ ÿWWÿbbÿ[[ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿjjÿooÿ……ÿ••ÿ––ÿ——ÿ˜˜ÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ��ÿŒŒÿ‹‹ÿ——ÿ••ÿ’’ÿ’’ÿžž&ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¤¤6ÿ——”ÿªªªÿ½½½ÿÌÌÌÿÞÞÞÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿÞÞÞÿ11sÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ!!yÿ££¤ÿ££¢ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ[[ ÿRRÿWWÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿffÿmmÿppÿvvÿ””ÿ˜˜ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ––ÿ””ÿ’’ÿŽŽÿˆˆÿ��ÿ’’ÿŸŸ(ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ}}RÿŒŒŽÿ²²²ÿÂÂÂÿÒÒÒÿàààÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿÛÛÛúV9  :WÝÝÝúâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿÞÞßÿ33xÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ!!{ÿ��žÿŒŒŠÿ``ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿTT ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿiiÿnnÿrrÿttÿ‰‰ÿ˜˜ÿ™™ÿššÿœœÿœœÿššÿ™™ÿ˜˜ÿ——ÿ••ÿ““ÿ��ÿ‹‹ÿ––ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¤¤:ÿ44fÿ¥¥¦ÿºººÿÉÉÉÿØØØÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÛÛÛúV9  :WÜÜÜúâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿßßßÿ<ÿ]]ÿ//Xÿyÿ€ÿˆÿ‡ÿzÿYYwÿ¡¡¢ÿ®®®ÿ¹¹¹ÿÃÃÃÿÌÌÌÿÕÕÕÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿÔÔÔùO3 :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÍÍÌÿžž”ÿ!!iÿŒÿœÿ£ÿ¢ÿ™ÿ„ÿ]]xÿ«««ÿ···ÿÂÂÂÿËËËÿÔÔÔÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿÔÔÔùI.  :WÔÔÔúÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿ×××ÿ››¦ÿƒÿžÿ¬ÿ²ÿ±ÿ©ÿ˜ÿxÿ——šÿ¸¸¸ÿÂÂÂÿËËËÿÔÔÔÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÕÕÕÿÖÖÖÿÔÔÔùA)  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿØØØÿtt‹ÿŽÿ¦ÿ´ÿÕÿÏÿ°ÿ¡ÿƒÿƒƒŽÿ»»»ÿÅÅÅÿÍÍÍÿÕÕÕÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿ×××ÿÕÕÕÿÑÑÑÿÌÌÌÿËËËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÅÿÅÅÅÿÆÆÆÿÆÆÆÿÇÇÇÿÈÈÈÿÉÉÉÿËËËÿÊÊÊÿËËËÿÌÌÌÿÍÍÍÿÍÍÍÿÎÎÎÿÏÏÏÿÐÐÐÿÓÓÓÿÔÔÔÿÃÃÃ×7! :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿyy�ÿŽÿ¦ÿµÿØÿÐÿ±ÿ¡ÿƒÿˆˆ’ÿ¿¿¿ÿÈÈÈÿÏÏÏÿØØØÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÑÑÑÿÉÉÉÿÃÃÃÿ¿¿¿ÿ¼¼¼ÿºººÿºººÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¹¹¹ÿ¹¹¹ÿºººÿ»»»ÿ¼¼¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÂÂÂÿÄÄÄÿÅÅÅÿÆÆÆÿÊÊÊÿÌÌÌÿÏÏÏÿ···í___i+  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿ¢¢­ÿ„ÿŸÿ­ÿ´ÿ³ÿªÿ™ÿzÿ§§ªÿÆÆÆÿÌÌÌÿÓÓÓÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÕÕÕÿÎÎÎÿÀÀÀÿµµµÿ¯¯¯ÿ¬¬¬ÿªªªÿ¨¨¨ÿ¨¨¨ÿ§§§ÿ§§§ÿ§§§ÿ§§§ÿ¨¨¨ÿ©©©ÿªªªÿ¬¬¬ÿ®®®ÿ¯¯¯ÿ±±±ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¿¿¿ÿÄÄÄÿÇÇÇÿ¦¦¦øfff}2   :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÕÿ99vÿŽÿŸÿ¥ÿ¤ÿ›ÿ†ÿqq‰ÿÆÆÆÿÌÌÌÿÒÒÒÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÖÖÖÿÒÒÒÿÉÉÉÿ···ÿ¨¨¨ÿ¡¡¡ÿ���ÿšššÿ˜˜˜ÿ———ÿ———ÿ–––ÿ———ÿ———ÿ˜˜˜ÿ˜˜˜ÿ›››ÿ���ÿžžžÿ¡¡¡ÿ£££ÿ¦¦¦ÿ©©©ÿ®®®ÿ²²²ÿ¹¹¹ÿºººÿ™™™ýhhh‡7$  :WÔÔÔúØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿ¼¼¿ÿ99tÿ‚ÿŒÿŠÿ€ÿttŽÿÈÈÉÿÏÏÏÿÓÓÓÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÅÅÅÿ¯¯¯ÿžžžÿ”””ÿ���ÿŒŒŒÿŠŠŠÿˆˆˆÿˆˆˆÿ‡‡‡ÿˆˆˆÿˆˆˆÿ‰‰‰ÿ‹‹‹ÿ���ÿ���ÿ’’’ÿ•••ÿ˜˜˜ÿœœœÿŸŸŸÿ¦¦¦ÿ±±±ÿ¬¬¬ÿ“““ÿppp”<'  :WÔÔÔúØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÕÿ¢¢«ÿ  ­ÿ��ªÿ··¼ÿÑÑÑÿÔÔÔÿ×××ÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÃÃÃÿªªªÿ———ÿ‹‹‹ÿ………ÿ‚‚‚ÿÿ}}}ÿ}}}ÿ}}}ÿ}}}ÿ~~~ÿ€€€ÿ‚‚‚ÿ„„„ÿ†††ÿˆˆˆÿŒŒŒÿ���ÿ”””ÿ���ÿ°°°ÿ¡¡¡ÿ“““ÿnnn™@+ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÁÁÁÿ§§§ÿ’’’ÿ………ÿ~~~ÿ{{{ÿyyyÿwwwÿwwwÿvvvÿwwwÿxxxÿzzzÿ|||ÿ~~~ÿ€€€ÿƒƒƒÿ‡‡‡ÿ›››ÿ²²²ÿ­­­ÿŸŸŸÿ•••ÿoooŸC- :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÏÏÏÿ¿¿¿ÿ¥¥¥ÿ���ÿ‚‚‚ÿ€€€ÿ‡‡‡ÿ‡‡‡ÿ���ÿ‹‹‹ÿ‹‹‹ÿ”””ÿ———ÿ˜˜˜ÿ   ÿ§§§ÿ±±±ÿºººÿÁÁÁÿ¹¹¹ÿ­­­ÿ   ÿ–––ÿrrr¤F. :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ———ÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿæææÿâââÿÜÜÜÿÕÕÕÿÌÌÌÿÄÄÄÿºººÿ®®®ÿ¢¢¢ÿ———ÿwww­G/ :WÓÓÓú×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ”””ÿîîîÿîîîÿîîîÿíííÿêêêÿçççÿâââÿÜÜÜÿÕÕÕÿÎÎÎÿÅÅÅÿ»»»ÿ¯¯¯ÿ£££ÿ———ÿzzz¯I0 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ“““ÿîîîÿîîîÿíííÿëëëÿçççÿâââÿÜÜÜÿ×××ÿÏÏÏÿÆÆÆÿ»»»ÿ°°°ÿ¤¤¤ÿ™™™ÿ¹J1 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¤¤¤ÿŽŽŽÿ‚‚‚ÿ’’’ÿîîîÿîîîÿêêêÿçççÿãããÿÞÞÞÿ×××ÿÏÏÏÿÇÇÇÿ¼¼¼ÿ±±±ÿ¦¦¦ÿ›››ÿ€€€»L3 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿƒƒƒÿ‘‘‘ÿîîîÿêêêÿèèèÿäääÿÞÞÞÿØØØÿÑÑÑÿÇÇÇÿ½½½ÿ³³³ÿ§§§ÿ›››ÿ‚‚‚¿M4  :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿìììÿèèèÿäääÿßßßÿÙÙÙÿÒÒÒÿÈÈÈÿ¿¿¿ÿ´´´ÿ¨¨¨ÿ›››ÿ‡‡‡ÆN5   :WÒÒÒúÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿèèèÿåååÿàààÿÚÚÚÿÑÑÑÿÊÊÊÿÀÀÀÿµµµÿªªªÿ���ÿ‹‹‹ÈO5!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¤¤¤ÿ‘‘‘ÿ………ÿ���ÿåååÿàààÿÚÚÚÿÓÓÓÿÊÊÊÿÁÁÁÿ···ÿ«««ÿžžžÿŒŒŒÌP6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÌÌÌÿ¾¾¾ÿ¤¤¤ÿ‘‘‘ÿ†††ÿ’’’ÿáááÿÚÚÚÿÓÓÓÿËËËÿÂÂÂÿ¸¸¸ÿ¬¬¬ÿŸŸŸÿ���ÒQ6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÒÒÒÿËËËÿ¼¼¼ÿ£££ÿ’’’ÿˆˆˆÿšššÿÛÛÛÿÔÔÔÿÍÍÍÿÃÃÃÿ¹¹¹ÿ®®®ÿ¢¢¢ÿ“““ÕQ6"  :WÑÑÑúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÒÒÒÿÊÊÊÿ»»»ÿ¢¢¢ÿ’’’ÿŠŠŠÿ¡¡¡ÿÕÕÕÿÍÍÍÿÄÄÄÿ»»»ÿ®®®ÿ¢¢¢ÿ•••ØQ8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÑÑÑÿÉÉÉÿ¹¹¹ÿ¡¡¡ÿ“““ÿ‹‹‹ÿ±±±ÿÎÎÎÿÆÆÆÿ¼¼¼ÿ¯¯¯ÿ£££ÿ™™™ÝR8$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÐÐÐÿÇÇÇÿµµµÿ   ÿ“““ÿ���ÿ»»»ÿÇÇÇÿ»»»ÿ±±±ÿ¥¥¥ÿšššßR7$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÍÍÍÿÃÃÃÿ²²²ÿŸŸŸÿ•••ÿ‘‘‘ÿÃÃÃÿ½½½ÿ²²²ÿ¦¦¦ÿ›››âS8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÀÀÀÿ¯¯¯ÿŸŸŸÿ———ÿ¡¡¡ÿ¾¾¾ÿ³³³ÿ§§§ÿŸŸŸåS9#  :WÐÐÐúÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÓÓÓÿÑÑÑÿÉÉÉÿ½½½ÿ¬¬¬ÿ   ÿ›››ÿ···ÿ´´´ÿ©©©ÿ   éR9$  :VÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÏÏÏÿÇÇÇÿ¹¹¹ÿªªªÿ¢¢¢ÿ¢¢¢ÿ···ÿªªªÿ¢¢¢êU9$  8TÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÃÃÃÿµµµÿªªªÿ¥¥¥ÿµµµÿ«««ÿ¥¥¥ïT9$ 6QÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÊÊÊÿÀÀÀÿ´´´ÿ¬¬¬ÿ­­­ÿ±±±ÿ¨¨¨ïT9% 2KÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿ¿¿¿ÿµµµÿ²²²ÿ¸¸¸ÿ¨¨¨ñ U9%  ,BÐÐÐùÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿÀÀÀÿ¹¹¹ÿ»»»ÿ«««ñU9%  $6ÑÑÑøÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿËËËÿÃÃÃÿ¿¿¿ÿ­­­êR7% )ÒÒÒ÷ÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÒÒÒÿÑÑÑÿÐÐÐÿÌÌÌÿÇÇÇÿ¯¯¯Ö$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ÿÿþÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþ?ÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþ?ÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÿatomes_1.3.1/metadata/icons/atomes-coordinates.ico0000664000175000017500000020407615212624223021705 0ustar lerouxleroux€€ ((€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $6J]mw}€��������������������������������������������������������������������������€}vk]J6$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ,BàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿáááøA+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2KàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùK2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6QàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùP6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8TßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿßßßúT7 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :VßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúU9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿÓÓÓÿ£££ÿ›››ÿÁÁÁÿâââÿçççÿçççÿèèèÿ½½½ÿ———ÿÀÀÀÿæææÿéééÿéééÿéééÿÓÓÓÿœœœÿ¬¬¬ÿáááÿêêêÿêêêÿÇÇÇÿÈÈÈÿëëëÿëëëÿëëëÿëëëÿÖÖÖÿ›››ÿ¸¸¸ÿÓÓÓÿ¾¾¾ÿèèèÿâââÿ½½½ÿÞÞÞÿêêêÿÂÂÂÿÍÍÍÿëëëÿëëëÿÔÔÔÿ¾¾¾ÿçççÿêêêÿäääÿ¢¢¢ÿ¥¥¥ÿÚÚÚÿ½½½ÿÓÓÓÿéééÿéééÿãããÿÇÇÇÿ¾¾¾ÿçççÿèèèÿÑÑÑÿ���ÿœœœÿÄÄÄÿãããÿæææÿØØØÿ¦¦¦ÿ–––ÿ¸¸¸ÿáááÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿVVVÿÿÿÿÿ+++ÿÏÏÏÿçççÿIIIÿ ÿÿÿJJJÿßßßÿéééÿ‹‹‹ÿÿÿ ÿ***ÿ¸¸¸ÿêêêÿ###ÿ***ÿêêêÿëëëÿëëëÿ³³³ÿÿÿ ÿÿÿÂÂÂÿ¤¤¤ÿ ÿ{{{ÿêêêÿÿ777ÿëëëÿëëëÿOOOÿÿÈÈÈÿæææÿ,,,ÿÿ ÿÿÿQQQÿéééÿ¼¼¼ÿ ÿÿÿÛÛÛÿtttÿÿÿÿÿNNNÿÁÁÁÿÿÿÿÿ===ÿØØØÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿåååÿåååÿåååÿåååÿkkkÿÿ)))ÿ–––ÿ™™™ÿVVVÿÿ˜˜˜ÿªªªÿÿ;;;ÿ³³³ÿJJJÿ ÿXXXÿéééÿ!!!ÿÿ®®®ÿ{{{ÿÿ&&&ÿáááÿ===ÿÿÜÜÜÿëëëÿëëëÿ888ÿÿ‰‰‰ÿ™™™ÿÿÿ„„„ÿÙÙÙÿÿGGGÿëëëÿ///ÿ###ÿçççÿëëëÿ‰‰‰ÿÿ���ÿ¥¥¥ÿÿDDDÿ±±±ÿ666ÿÿ444ÿéééÿOOOÿ ÿhhhÿ���ÿÙÙÙÿÿ ÿ£££ÿ³³³ÿnnnÿ???ÿÜÜÜÿ000ÿŒŒŒÿ¼¼¼ÿiiiÿ ÿ___ÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿ222ÿÿÌÌÌÿåååÿåååÿåååÿÐÐÐÿ¿¿¿ÿlllÿÿžžžÿåååÿåååÿ///ÿÿÊÊÊÿÿ@@@ÿæææÿäääÿsssÿÿ€€€ÿcccÿ ÿ©©©ÿåååÿåååÿ***ÿ$$$ÿåååÿåååÿ–––ÿÿLLLÿåååÿ ÿ000ÿåååÿGGGÿÿÊÊÊÿåååÿÆÆÆÿ ÿRRRÿ¼¼¼ÿÿLLLÿ×××ÿÝÝÝÿ"""ÿ"""ÿáááÿ^^^ÿ ÿ¯¯¯ÿåååÿ¾¾¾ÿÿXXXÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿØØØÿæææÿãããÿµµµÿQQQÿ ÿ???ÿæææÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿ&&&ÿÿÞÞÞÿåååÿåååÿåååÿåååÿæææÿ���ÿÿ‚‚‚ÿåååÿåååÿfffÿ ÿ¥¥¥ÿÿ777ÿæææÿäääÿÔÔÔÿÿFFFÿªªªÿÿgggÿåååÿåååÿ333ÿÿÛÛÛÿåååÿåååÿÿ333ÿåååÿ555ÿÿÝÝÝÿ{{{ÿÿŽŽŽÿåååÿäääÿÿ666ÿåååÿHHHÿ ÿÿ'''ÿÿÿÈÈÈÿ¤¤¤ÿÿsssÿåååÿÏÏÏÿÿ ÿ ÿ ÿ ÿÿKKKÿÞÞÞÿ111ÿÿ ÿ&&&ÿ¸¸¸ÿæææÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿ---ÿÿÌÌÌÿåååÿåååÿåååÿåååÿåååÿÒÒÒÿÿ333ÿÞÞÞÿåååÿzzzÿÿ‘‘‘ÿ444ÿÿ¾¾¾ÿäääÿáááÿÿ===ÿÚÚÚÿÿ)))ÿÚÚÚÿåååÿmmmÿÿ{{{ÿåååÿåååÿ"""ÿ!!!ÿàààÿTTTÿÿ½½½ÿ¾¾¾ÿÿ<<<ÿâââÿåååÿ---ÿ&&&ÿåååÿåååÿ¦¦¦ÿZZZÿJJJÿ///ÿÿ���ÿØØØÿÿCCCÿåååÿåååÿ)))ÿÿŠŠŠÿ���ÿœœœÿÿ@@@ÿ•••ÿÿ777ÿ¿¿¿ÿåååÿäääÿåååÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿTTTÿÿlllÿäääÿåååÿåååÿåååÿåååÿäääÿWWWÿÿ===ÿ{{{ÿ%%%ÿÿÌÌÌÿ®®®ÿÿ"""ÿvvvÿEEEÿÿjjjÿåååÿ$$$ÿÿ000ÿgggÿwwwÿ"""ÿÿdddÿ^^^ÿÿÿÄÄÄÿ”””ÿÿ€€€ÿáááÿÿ ÿAAAÿqqqÿÿ'''ÿäääÿÍÍÍÿ(((ÿbbbÿ~~~ÿ,,,ÿ ÿ»»»ÿ”””ÿÿ$$$ÿoooÿuuuÿšššÿ ÿ)))ÿuuuÿDDDÿÿoooÿÆÆÆÿ ÿ333ÿ€€€ÿlllÿ555ÿÜÜÜÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿÌÌÌÿÿÿÈÈÈÿåååÿåååÿåååÿÂÂÂÿÁÁÁÿâââÿXXXÿÿ ÿÿ|||ÿåååÿåååÿ–––ÿ"""ÿ ÿÿBBBÿâââÿåååÿ???ÿÿ%%%ÿ ÿ000ÿÇÇÇÿ111ÿÿÿ+++ÿÿ‹‹‹ÿÏÏÏÿÿUUUÿäääÿ...ÿÿ ÿ ÿÿ|||ÿäääÿäääÿ333ÿÿ ÿÿSSSÿåååÿGGGÿÿÿÿÿÌÌÌÿ•••ÿ###ÿ ÿÿ@@@ÿâââÿåååÿ{{{ÿÿ ÿ ÿÿÏÏÏÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúäääÿäääÿäääÿäääÿåååÿåååÿåååÿvvvÿÿ###ÿ|||ÿŸŸŸÿhhhÿÿuuuÿäääÿåååÿßßßÿÍÍÍÿáááÿäääÿåååÿåååÿåååÿäääÿÎÎÎÿÚÚÚÿåååÿåååÿåååÿäääÿäääÿåååÿÎÎÎÿØØØÿäääÿåååÿ×××ÿØØØÿÅÅÅÿ ÿQQQÿåååÿ’’’ÿ���ÿäääÿäääÿåååÿåååÿÍÍÍÿÝÝÝÿäääÿäääÿåååÿåååÿßßßÿÉÉÉÿÜÜÜÿåååÿåååÿåååÿVVVÿÿ¸¸¸ÿåååÿåååÿåååÿäääÿÔÔÔÿÚÚÚÿåååÿåååÿåååÿäääÿãããÿÏÏÏÿÑÑÑÿåååÿåååÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿ|||ÿÿÿÿÿ!!!ÿžžžÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿÿ444ÿäääÿ,,,ÿÿßßßÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿžžžÿÿœœœÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿãããÿãããÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿàààÿ²²²ÿ–––ÿ»»»ÿáááÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿhhhÿgggÿäääÿŠŠŠÿNNNÿßßßÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿãããÿãããÿãããÿãããÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿãããÿãããÿãããÿãããÿãããÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿãããÿãããÿãããÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿßßßÿØØØÿâââÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿâââÿÚÚÚÿÛÛÛÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿPPPÿ%%%ÿ²²²ÿäääÿäääÿäääÿãããÿ+++ÿ>>>ÿäääÿ———ÿ222ÿ'''ÿbbbÿäääÿbbbÿ###ÿÿ111ÿ£££ÿäääÿ���ÿ ÿ¨¨¨ÿäääÿÎÎÎÿ$$$ÿlllÿäääÿäääÿ444ÿEEEÿäääÿKKKÿ222ÿßßßÿäääÿ¢¢¢ÿ---ÿÿ!!!ÿ???ÿÝÝÝÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿ³³³ÿ ÿ999ÿâââÿäääÿäääÿÊÊÊÿ ÿ:::ÿäääÿ!!!ÿÿ<<<ÿoooÿ���ÿÿ...ÿLLLÿÿÿªªªÿ±±±ÿÿgggÿäääÿáááÿÿ888ÿãããÿäääÿ222ÿ ÿßßßÿLLLÿÿÅÅÅÿÝÝÝÿÿÿLLLÿJJJÿÿÄÄÄÿäääÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿâââÿâââÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿEEEÿ ÿ@@@ÿBBBÿBBBÿ444ÿÿ\\\ÿäääÿÿ333ÿãããÿãããÿEEEÿÿÍÍÍÿãããÿÃÃÃÿÿ999ÿÛÛÛÿÿ???ÿäääÿäääÿ,,,ÿ&&&ÿáááÿäääÿMMMÿÿÃÃÃÿ………ÿÿŒŒŒÿ³³³ÿÿVVVÿãããÿäääÿáááÿÞÞÞÿäääÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿâââÿâââÿâââÿâââÿâââÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿÐÐÐÿÿ ÿÿÿÿÿšššÿãããÿ000ÿ"""ÿßßßÿãããÿIIIÿÿÉÉÉÿãããÿãããÿ777ÿÿÚÚÚÿ&&&ÿ***ÿâââÿäääÿDDDÿÿÎÎÎÿãããÿˆˆˆÿÿ‰‰‰ÿÅÅÅÿ ÿRRRÿ¶¶¶ÿÿPPPÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿäääÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿãããÿgggÿ ÿ|||ÿäääÿ999ÿÿÐÐÐÿãããÿJJJÿÿÆÆÆÿãããÿ���ÿÿvvvÿãããÿãããÿHHHÿÿÉÉÉÿ<<<ÿÿÃÃÃÿãããÿqqqÿÿ‚‚‚ÿãããÿÄÄÄÿ ÿSSSÿâââÿÿ666ÿÞÞÞÿÿ(((ÿÙÙÙÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿäääÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿãããÿßßßÿ###ÿ!!!ÿÕÕÕÿ'''ÿ"""ÿâââÿãããÿuuuÿÿ‡‡‡ÿËËËÿÏÏÏÿ ÿÿ›››ÿÊÊÊÿ)))ÿÿÞÞÞÿaaaÿÿ///ÿºººÿ[[[ÿÿÿ£££ÿ£££ÿ ÿHHHÿãããÿ...ÿ###ÿßßßÿaaaÿÿGGGÿ¿¿¿ÿÀÀÀÿ]]]ÿßßßÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿäääÿâââÿâââÿâââÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿ“““ÿ ÿ\\\ÿÿ444ÿãããÿÕÕÕÿ ÿÿ ÿ ÿ888ÿ¯¯¯ÿÿ ÿÿ ÿfffÿãããÿ§§§ÿÿ ÿ ÿ ÿÿ:::ÿ ÿ ÿ ÿ���ÿãããÿGGGÿÿÊÊÊÿáááÿQQQÿ ÿÿÿ ÿÌÌÌÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿáááÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿ333ÿÿ ÿJJJÿãããÿãããÿ£££ÿÿ'''ÿ›››ÿ´´´ÿãããÿØØØÿŠŠŠÿlllÿµµµÿãããÿãããÿÛÛÛÿ���ÿÀÀÀÿ���ÿmmmÿÇÇÇÿãããÿ¤¤¤ÿjjjÿ¯¯¯ÿãããÿâââÿÅÅÅÿŽŽŽÿÑÑÑÿãããÿâââÿÃÃÃÿÿpppÿ»»»ÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿáááÿáááÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿ¼¼¼ÿÿÿ€€€ÿãããÿãããÿãããÿ)))ÿ ÿâââÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿ¾¾¾ÿÿ\\\ÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿáááÿáááÿáááÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿ���ÿUUUÿÎÎÎÿâââÿãããÿãããÿÏÏÏÿÇÇÇÿâââÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿßßßÿ&&&ÿOOOÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿáááÿáááÿáááÿáááÿáááÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿáááÿáááÿáááÿáááÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿáááÿáááÿáááÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿãããÿáááÿáááÿàààÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿàààÿàààÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿáááÿâââÿâââÿáááÿàààÿàààÿßßßÿàààÿàààÿáááÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿàààÿàààÿàààÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿàààÿÞÞÞÿÝÝÝÿÛÛÛÿÜÜÜÿÞÞÞÿßßßÿàààÿàààÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿàààÿàààÿàààÿàààÿàààÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿáááÿàààÿßßßÿÝÝÝÿÚÚÚÿ×××ÿÔÔÔÿÕÕÕÿ×××ÿÜÜÜÿÞÞÞÿßßßÿàààÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿàààÿàààÿàààÿàààÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿàààÿßßßÿÜÜÜÿØØØÿÒÒÒÿÍÍÍÿÉÉÉÿÊÊÊÿÏÏÏÿÕÕÕÿÛÛÛÿÞÞÞÿßßßÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿàààÿàààÿàààÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÞÞÞÿÙÙÙÿÒÒÒÿÅÅÆÿ¶¶·ÿ¼¼¼ÿ½½½ÿÄÄÄÿÍÍÍÿÖÖÖÿÛÛÛÿßßßÿàààÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿâââÿàààÿàààÿßßßÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿßßßÿÜÜÜÿÖÖÖÿšš¦ÿHH†ÿÿQQÿ¥¥¨ÿ¹¹¹ÿÅÅÅÿÑÑÑÿÙÙÙÿÝÝÝÿßßßÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿßßßÿÛÛÛÿ±±¸ÿŠÿ¤ÿ¨ÿœÿ;;}ÿ±±±ÿ¿¿¿ÿÌÌÌÿÖÖÖÿÛÛÛÿßßßÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿßßßÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿàààÿÞÞÞÿÛÛÛÿdd‹ÿŸÿºÿËÿ­ÿ�ÿ‹‹”ÿ¹¹¹ÿÇÇÇÿÑÑÑÿØØØÿÜÜÜÿßßßÿßßßÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿÞÞÞÿÚÚÚÿbb‹ÿŸÿ¹ÿÎÿ­ÿ�ÿ††�ÿ³³³ÿ¿¿¿ÿÊÊÊÿÒÒÒÿ×××ÿÛÛÛÿÞÞÞÿßßßÿßßßÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿàààÿàààÿàààÿßßßÿÝÝÝÿÙÙÙÿ¢¢¬ÿ‹ÿ¤ÿ¨ÿœÿ""tÿžžœÿªªªÿµµµÿ¿¿¿ÿÈÈÈÿÏÏÏÿÕÕÕÿÚÚÚÿÝÝÝÿÞÞÞÿÞÞÞÿßßßÿàààÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÞÞÞÿÛÛÛÿÖÖÖÿÍÍÍÿoozÿ yÿ‚ÿxÿ{{Mÿ——Sÿ  ’ÿªª©ÿ²²²ÿ»»»ÿÄÄÄÿÌÌÌÿÒÒÒÿ×××ÿÚÚÚÿÜÜÜÿÞÞÞÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÞÞÞÿÜÜÜÿØØØÿÑÑÑÿ¼¼µÿzzÿXXVÿ::�ÿHH`ÿuuDÿ••@ÿ””@ÿššvÿ¥¥ ÿ®®®ÿ¶¶¶ÿ¿¿¿ÿÈÈÈÿÏÏÏÿÔÔÔÿØØØÿÛÛÛÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿÝÝÝÿÚÚÚÿÓÓÓÿÆÆÄÿ‚‚<ÿzzÿrrÿbbEÿaa&ÿss.ÿ””@ÿ””@ÿ””@ÿŠŠ=ÿŸŸˆÿªª©ÿ²²²ÿ»»»ÿÃÃÃÿÊÊÊÿÑÑÑÿÖÖÖÿÙÙÙÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÞÞÞÿÞÞÞÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿÞÞÞÿÝÝÝÿÛÛÛÿÖÖÖÿÍÍÍÿ••qÿzzÿzzÿvvÿjj#ÿii&ÿVVÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ˜˜hÿ¤¤žÿ­­­ÿµµµÿ½½½ÿÅÅÅÿÍÍÍÿÒÒÒÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿ×××ÿÙÙÙÿÜÜÜÿÝÝÝÿÞÞÞÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÛÛÛÿÖÖÖÿÏÏÏÿ­­žÿ{{ÿzzÿzzÿxxÿkk ÿii'ÿXX ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ••Kÿ’’wÿ¨¨§ÿ¯¯¯ÿ¸¸¸ÿ¿¿¿ÿÆÆÆÿËËËÿËËËÿËËËÿËËËÿÍÍÍÿÒÒÒÿ×××ÿÚÚÚÿÝÝÝÿÞÞÞÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿÞÞÞÿÝÝÝÿÛÛÛÿØØØÿÑÑÑÿ¿¿ºÿ{{ÿzzÿzzÿzzÿzzÿkkÿjj'ÿ^^"ÿ……7ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ––Wÿ¡¡–ÿªªªÿ±±±ÿ¸¸¸ÿ¼¼¼ÿ½½½ÿ½½½ÿ½½½ÿÁÁÁÿÈÈÈÿÑÑÑÿ×××ÿÛÛÛÿÝÝÝÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÜÜÜÿÙÙÙÿÓÓÓÿÉÉÉÿ……Gÿzzÿzzÿzzÿzzÿzzÿnnÿjj&ÿbb$ÿƒƒ4ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ››yÿ¤¤ ÿ©©©ÿ��Ÿÿ€€’ÿmm‡ÿ““›ÿ´´´ÿ¾¾¾ÿÊÊÊÿÓÓÓÿÙÙÙÿÝÝÝÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÝÝÝÿÚÚÚÿÕÕÕÿÍÍÍÿ››~ÿzzÿzzÿzzÿzzÿzzÿzzÿ}} ÿ��ÿ‹‹ ÿzz ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‰‰@ÿ��~ÿvÿ–ÿœÿŒÿtt‰ÿ¹¹¹ÿÅÅÅÿÑÑÑÿÙÙÙÿÝÝÝÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÝÝÝÿÛÛÛÿ×××ÿÏÏÏÿ±±¤ÿ{{ÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿŽŽÿ‘‘ÿ‚‚ ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‘‘>ÿmm*ÿ55~ÿ°ÿ·ÿ¨ÿ ƒÿ³³´ÿÆÆÆÿÐÐÐÿÙÙÙÿÝÝÝÿÞÞÞÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÝÝÝÿÜÜÜÿÛÛÛÿØØØÿÒÒÒÿÁÁ½ÿ~~1ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ{{ÿ‹‹ÿ‘‘ÿ��ÿ��=ÿ““?ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ““?ÿ��<ÿpp*ÿ\\"ÿTT ÿ�ÿºÿ×ÿ®ÿ‹ÿ··¹ÿÊÊÊÿÒÒÒÿÙÙÙÿÜÜÜÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÜÜÜÿÛÛÛÿØØØÿÓÓÓÿÊÊÊÿ’’lÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿ‰‰ÿ‘‘ÿ††ÿppÿrrÿ‹‹8ÿ””@ÿ””@ÿŒŒ9ÿ+ÿhh$ÿSS!ÿTT$ÿTT%ÿTT$ÿ##„ÿ¢ÿ¯ÿ¢ÿ@@†ÿÂÂÃÿÐÐÐÿÖÖÖÿÚÚÚÿÜÜÜÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÜÜÜÿÛÛÛÿÚÚÚÿØØØÿÔÔÔÿÍÍÍÿ¢¢Œÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿˆˆÿŒŒÿ‘‘ÿ‘‘ÿ{{ÿwwÿooÿ{{%ÿvvÿttÿxxÿrr ÿUU%ÿTT$ÿTT!ÿ]]"ÿ__ÿ&&|ÿ�ÿ{ÿ  ¨ÿÏÏÏÿÕÕÕÿÚÚÚÿÜÜÜÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÚÚÚÿØØØÿÖÖÖÿÒÒÒÿÍÍÍÿ²²§ÿ{{ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿyy ÿ……ÿ��ÿ““ÿ••ÿ––ÿ‰‰ÿ||ÿwwÿppÿyyÿzzÿyyÿuuÿ__$ÿrr-ÿ††8ÿ““?ÿ��Fÿššœÿ——ŸÿÈÈÈÿÒÒÒÿÖÖÖÿÚÚÚÿÜÜÜÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÛÛÛÿÙÙÙÿÕÕÕÿÑÑÑÿÍÍÍÿÉÉÉÿ¿¿¼ÿ„„Fÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿ‹‹ÿ’’ÿ––ÿ˜˜ÿ››ÿ��ÿ~~ÿzzÿqqÿuuÿttÿyyÿ„„3ÿ’’?ÿ””@ÿ””@ÿ””@ÿ••lÿºººÿÈÈÈÿÑÑÑÿ×××ÿÚÚÚÿÜÜÜÿÜÜÜÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÜÜÜÿÚÚÚÿ×××ÿÓÓÓÿÍÍÍÿÆÆÆÿÁÁÁÿ»»»ÿ““pÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ}} ÿ‚‚ÿ��ÿŒŒÿ““ÿ––ÿžžÿ¨¨ÿ˜˜ÿ��ÿ{{ÿssÿ||)ÿ��=ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿŸŸ’ÿÀÀÀÿÌÌÌÿÔÔÔÿÚÚÚÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÙÙÙÿÔÔÔÿÌÌÌÿÂÂÂÿºººÿ³³³ÿšš‡ÿzzÿzzÿzzÿwwÿttÿyyÿˆˆÿ��ÿ‘‘ÿ““ÿŽŽÿ‹‹ÿ’’ÿ––ÿ™™ÿ��ÿ˜˜ÿ‚‚ÿzzÿqqÿ��:ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ——Wÿ¶¶¶ÿÅÅÅÿÐÐÐÿ×××ÿÚÚÚÿÜÜÜÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÛÛÛÿØØØÿÊÊËÿ||“ÿ}ÿ~ÿffyÿwwÿssÿqqÿjj ÿjj$ÿjj'ÿˆˆÿ““ÿ””ÿ““ÿ““ÿ��ÿ‡‡ÿ��ÿ””ÿ––ÿ––ÿ••ÿ‰‰ÿwwÿoo ÿ““?ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ››ÿ¼¼¼ÿÊÊÊÿÔÔÔÿÙÙÙÿÛÛÛÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÛÛÛÿ×××ÿŠŠœÿ“ÿ¦ÿ¦ÿ((�ÿOOrÿii-ÿjj)ÿjj*ÿjj*ÿjj)ÿ{{ÿ��ÿŠŠÿ„„ÿÿ{{ ÿ}}ÿ‰‰ÿ��ÿ’’ÿ““ÿ““ÿŠŠÿppÿ‡‡4ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ““Bÿ¦¦žÿÁÁÁÿÎÎÎÿÖÖÖÿÚÚÚÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÚÚÚÿ×××ÿ44}ÿ¤ÿÂÿÅÿ©ÿ§ÿRRsÿjj'ÿjj$ÿkk ÿooÿrrÿ||ÿzzÿzzÿzzÿzzÿzzÿ}}ÿ††ÿŠŠÿŒŒÿ““ÿ‘‘ÿ~~$ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‹‹Iÿ¹¹¹ÿÇÇÇÿÑÑÑÿØØØÿÛÛÛÿÜÜÜÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÚÚÚÿ×××ÿrÿ£ÿ¼ÿ¾ÿ¤ÿRReÿoo#ÿssÿvvÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿyy ÿ{{ ÿ~~ÿ‘‘ÿ““ÿ||ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿŸŸŽÿ¾¾¾ÿËËËÿÓÓÓÿØØØÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÚÚÚÿ››¨ÿ�ÿ¡ÿ¢ÿ�ÿuu�ÿ››|ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿŒŒÿ””ÿ‡‡ÿ‹‹7ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ““Gÿ­­©ÿÂÂÂÿÎÎÎÿÕÕÕÿÙÙÙÿÛÛÛÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÙÙÙÿ¢¢­ÿnn–ÿmm–ÿ““¢ÿÎÎÎÿÑÑÑÿÄľÿ˜˜uÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿƒƒÿ““ÿ’’ÿ‚‚*ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‘‘aÿºººÿÇÇÇÿÒÒÒÿ×××ÿÚÚÚÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÚÚÚÿÙÙÙÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÕÕÔÿ¿¿µÿ��[ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿ��ÿ€€ÿggÿ’’?ÿ””@ÿ””@ÿ””@ÿ””@ÿ©©šÿ¿¿¿ÿÌÌÌÿÔÔÔÿÙÙÙÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿØØØÿÖÖÖÿ½½²ÿ��cÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿooÿjj)ÿ``&ÿ€€5ÿ””@ÿ””@ÿ””@ÿ‘‘Oÿ²²±ÿÄÄÄÿÏÏÏÿÖÖÖÿÙÙÙÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿØØØÿ×××ÿ»»¯ÿ0ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿqqÿjj(ÿdd(ÿkk+ÿ””@ÿ””@ÿ””@ÿ——tÿ¹¹¹ÿÇÇÇÿÒÒÒÿØØØÿÙÙÙÿÚÚÚÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿÒÒÐÿ­­™ÿ……Eÿzzÿzzÿzzÿzzÿzzÿzzÿwwÿjj$ÿjj*ÿ[[&ÿ��>ÿ””@ÿ””@ÿ  –ÿ½½½ÿÊÊÊÿÓÓÓÿØØØÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÓÓÒÿ¬¬—ÿ††Gÿzzÿzzÿzzÿzzÿzzÿllÿjj)ÿ[['ÿzz1ÿ””@ÿ——]ÿ°°¯ÿ¿¿¿ÿËËËÿÔÔÔÿØØØÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÑÑÐÿ¤¤‰ÿ}})ÿzzÿzzÿzzÿssÿjj&ÿcc(ÿPPWÿ••@ÿ••|ÿ¯¯¯ÿ¾¾¾ÿËËËÿÓÓÓÿØØØÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÖÖÖÿÊÊÆÿŸŸ€ÿ||ÿzzÿyyÿLLmÿPPmÿ""„ÿ„„Iÿ˜˜”ÿ«««ÿ»»»ÿÈÈÈÿÒÒÒÿ×××ÿØØØÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÔÔÔúU8 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿ×××ÿÕÕÕÿÉÉÄÿ££ˆÿzzÿQQZÿŒÿ~ÿ xÿll„ÿ¨¨¨ÿ¶¶¶ÿÄÄÄÿÐÐÐÿÖÖÖÿØØØÿÙÙÙÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿÕÕÕùS6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÓÓÓÿ½ÿ00cÿ–ÿ¦ÿ¤ÿ�ÿkk�ÿµµµÿÃÃÃÿÎÎÎÿÕÕÕÿØØØÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿÔÔÔùO3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÖÖÖÿ¼¼½ÿ„ÿ©ÿÄÿ½ÿ¤ÿ77}ÿ´´´ÿÅÅÅÿÏÏÏÿÕÕÕÿØØØÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿÔÔÔùI. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿØØØÿÀÀÁÿ„ÿ©ÿÈÿ¿ÿ¤ÿTTŠÿÀÀÀÿÊÊÊÿÑÑÑÿÕÕÕÿÕÕÕÿÖÖÖÿÔÔÔÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÕÕÕÿÖÖÖÿÔÔÔùA) ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿ×××ÿ]]…ÿ˜ÿ¨ÿ¦ÿ‘ÿ}}�ÿÊÊÊÿÐÐÐÿÔÔÔÿÕÕÕÿÔÔÔÿÑÑÑÿÌÌÌÿËËËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÅÿÅÅÅÿÆÆÆÿÆÆÆÿÇÇÇÿÈÈÈÿÉÉÉÿËËËÿÊÊÊÿËËËÿÌÌÌÿÍÍÍÿÍÍÍÿÎÎÎÿÏÏÏÿÐÐÐÿÓÓÓÿÔÔÔÿÃÃÃ×7!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÍÍÎÿxx•ÿ|ÿyÿ��ŸÿÍÍÍÿÑÑÑÿÔÔÔÿÖÖÖÿÖÖÖÿÑÑÑÿÉÉÉÿÃÃÃÿ¿¿¿ÿ¼¼¼ÿºººÿºººÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¹¹¹ÿ¹¹¹ÿºººÿ»»»ÿ¼¼¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÂÂÂÿÄÄÄÿÅÅÅÿÆÆÆÿÊÊÊÿÌÌÌÿÏÏÏÿ···í___i+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿ×××ÿÓÓÓÿÑÑÒÿÔÔÔÿÕÕÕÿÖÖÖÿ×××ÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿµµµÿ¯¯¯ÿ¬¬¬ÿªªªÿ¨¨¨ÿ¨¨¨ÿ§§§ÿ§§§ÿ§§§ÿ§§§ÿ¨¨¨ÿ©©©ÿªªªÿ¬¬¬ÿ®®®ÿ¯¯¯ÿ±±±ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¿¿¿ÿÄÄÄÿÇÇÇÿ¦¦¦øfff}2  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÒÒÒÿÉÉÉÿ···ÿ¨¨¨ÿ¡¡¡ÿ���ÿšššÿ˜˜˜ÿ———ÿ———ÿ–––ÿ———ÿ———ÿ˜˜˜ÿ˜˜˜ÿ›››ÿ���ÿžžžÿ¡¡¡ÿ£££ÿ¦¦¦ÿ©©©ÿ®®®ÿ²²²ÿ¹¹¹ÿºººÿ™™™ýhhh‡7$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿØØØÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÅÅÅÿ¯¯¯ÿžžžÿ”””ÿ���ÿŒŒŒÿŠŠŠÿˆˆˆÿˆˆˆÿ‡‡‡ÿˆˆˆÿˆˆˆÿ‰‰‰ÿ‹‹‹ÿ���ÿ���ÿ’’’ÿ•••ÿ˜˜˜ÿœœœÿŸŸŸÿ¦¦¦ÿ±±±ÿ¬¬¬ÿ“““ÿppp”<' ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÃÃÃÿªªªÿ———ÿ‹‹‹ÿ………ÿ‚‚‚ÿÿ}}}ÿ}}}ÿ}}}ÿ}}}ÿ~~~ÿ€€€ÿ‚‚‚ÿ„„„ÿ†††ÿˆˆˆÿŒŒŒÿ���ÿ”””ÿ���ÿ°°°ÿ¡¡¡ÿ“““ÿnnn™@+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÁÁÁÿ§§§ÿ’’’ÿ………ÿ~~~ÿ{{{ÿyyyÿwwwÿwwwÿvvvÿwwwÿxxxÿzzzÿ|||ÿ~~~ÿ€€€ÿƒƒƒÿ‡‡‡ÿ›››ÿ²²²ÿ­­­ÿŸŸŸÿ•••ÿoooŸC-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÏÏÏÿ¿¿¿ÿ¥¥¥ÿ���ÿ‚‚‚ÿ€€€ÿ‡‡‡ÿ‡‡‡ÿ���ÿ‹‹‹ÿ‹‹‹ÿ”””ÿ———ÿ˜˜˜ÿ   ÿ§§§ÿ±±±ÿºººÿÁÁÁÿ¹¹¹ÿ­­­ÿ   ÿ–––ÿrrr¤F.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ———ÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿæææÿâââÿÜÜÜÿÕÕÕÿÌÌÌÿÄÄÄÿºººÿ®®®ÿ¢¢¢ÿ———ÿwww­G/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ”””ÿîîîÿîîîÿîîîÿíííÿêêêÿçççÿâââÿÜÜÜÿÕÕÕÿÎÎÎÿÅÅÅÿ»»»ÿ¯¯¯ÿ£££ÿ———ÿzzz¯I0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ“““ÿîîîÿîîîÿíííÿëëëÿçççÿâââÿÜÜÜÿ×××ÿÏÏÏÿÆÆÆÿ»»»ÿ°°°ÿ¤¤¤ÿ™™™ÿ¹J1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¤¤¤ÿŽŽŽÿ‚‚‚ÿ’’’ÿîîîÿîîîÿêêêÿçççÿãããÿÞÞÞÿ×××ÿÏÏÏÿÇÇÇÿ¼¼¼ÿ±±±ÿ¦¦¦ÿ›››ÿ€€€»L3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿƒƒƒÿ‘‘‘ÿîîîÿêêêÿèèèÿäääÿÞÞÞÿØØØÿÑÑÑÿÇÇÇÿ½½½ÿ³³³ÿ§§§ÿ›››ÿ‚‚‚¿M4 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿìììÿèèèÿäääÿßßßÿÙÙÙÿÒÒÒÿÈÈÈÿ¿¿¿ÿ´´´ÿ¨¨¨ÿ›››ÿ‡‡‡ÆN5  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿèèèÿåååÿàààÿÚÚÚÿÑÑÑÿÊÊÊÿÀÀÀÿµµµÿªªªÿ���ÿ‹‹‹ÈO5! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¤¤¤ÿ‘‘‘ÿ………ÿ���ÿåååÿàààÿÚÚÚÿÓÓÓÿÊÊÊÿÁÁÁÿ···ÿ«««ÿžžžÿŒŒŒÌP6! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÌÌÌÿ¾¾¾ÿ¤¤¤ÿ‘‘‘ÿ†††ÿ’’’ÿáááÿÚÚÚÿÓÓÓÿËËËÿÂÂÂÿ¸¸¸ÿ¬¬¬ÿŸŸŸÿ���ÒQ6! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÒÒÒÿËËËÿ¼¼¼ÿ£££ÿ’’’ÿˆˆˆÿšššÿÛÛÛÿÔÔÔÿÍÍÍÿÃÃÃÿ¹¹¹ÿ®®®ÿ¢¢¢ÿ“““ÕQ6" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÒÒÒÿÊÊÊÿ»»»ÿ¢¢¢ÿ’’’ÿŠŠŠÿ¡¡¡ÿÕÕÕÿÍÍÍÿÄÄÄÿ»»»ÿ®®®ÿ¢¢¢ÿ•••ØQ8# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÑÑÑÿÉÉÉÿ¹¹¹ÿ¡¡¡ÿ“““ÿ‹‹‹ÿ±±±ÿÎÎÎÿÆÆÆÿ¼¼¼ÿ¯¯¯ÿ£££ÿ™™™ÝR8$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÐÐÐÿÇÇÇÿµµµÿ   ÿ“““ÿ���ÿ»»»ÿÇÇÇÿ»»»ÿ±±±ÿ¥¥¥ÿšššßR7$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÍÍÍÿÃÃÃÿ²²²ÿŸŸŸÿ•••ÿ‘‘‘ÿÃÃÃÿ½½½ÿ²²²ÿ¦¦¦ÿ›››âS8# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÀÀÀÿ¯¯¯ÿŸŸŸÿ———ÿ¡¡¡ÿ¾¾¾ÿ³³³ÿ§§§ÿŸŸŸåS9# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÐÐÐúÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÓÓÓÿÑÑÑÿÉÉÉÿ½½½ÿ¬¬¬ÿ   ÿ›››ÿ···ÿ´´´ÿ©©©ÿ   éR9$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :VÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÏÏÏÿÇÇÇÿ¹¹¹ÿªªªÿ¢¢¢ÿ¢¢¢ÿ···ÿªªªÿ¢¢¢êU9$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8TÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÃÃÃÿµµµÿªªªÿ¥¥¥ÿµµµÿ«««ÿ¥¥¥ïT9$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6QÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÊÊÊÿÀÀÀÿ´´´ÿ¬¬¬ÿ­­­ÿ±±±ÿ¨¨¨ïT9% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2KÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿ¿¿¿ÿµµµÿ²²²ÿ¸¸¸ÿ¨¨¨ñ U9% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ,BÐÐÐùÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿÀÀÀÿ¹¹¹ÿ»»»ÿ«««ñU9% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $6ÑÑÑøÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿËËËÿÃÃÃÿ¿¿¿ÿ­­­êR7% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)ÒÒÒ÷ÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÒÒÒÿÑÑÑÿÐÐÐÿÌÌÌÿÇÇÇÿ¯¯¯Ö$$$M2# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #&())))))))))))))))))))))))))))))))))))))))))))))))('# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþ?ÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþ?ÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÿatomes_1.3.1/metadata/icons/atomes-coordinates.png0000664000175000017500000002153715212624223021716 0ustar lerouxleroux‰PNG  IHDR€€Ã>aË pHYsÃÃÇo¨dtEXtSoftwarewww.inkscape.org›î< IDATxœí�{tTÕÙÿ?gÎÜg2™I&7IHB0°ˆ/ Šâ¥^°Ö ꯊ®…/µVÛ[ ÖK}Û.¡ i«¢UuÕ·Ú‹¢¯?@‹EÁ"H½Â=�;¹‘ÛÜ÷ï�™sr2LBÂÌ$_ŸµÎJfŸ}öyÎ~¾ûÙÏóì›$„ Y$I’”´Â‡‰D2+lHJÔ÷h„-ô¯Dôÿ©ˆ„ "|EкÈ%E]©N"r…"¿CšÿEªAoá+‚—#åê"¿. Ð "WJ’”’Ú nÐ#\`Œ€Ió¿L�FHeRü€7rù[ A4ý¾"|3`¹óÎ;Çuww[<�ÉçóC¡�Žpw“’ �$IVó!Y–ƒ›7o>râĉv è<„AàO5ÄeD ¨z3�¤ýûßÿÞ)I’yåœ6ɦP(„!�@¿ßO]]]ÅâÅ‹—îß¿¿hÚ Á¹RÆ&Ð%  ‰°šW4@Z-]’¤“®‘LZ8�βßýîwÏååån °îò áÇFø‡E(^hûE صH%a÷GBB¡Á`ŸÏ‡ÃáÈZ½zõÚ¬¬¬Ñœ =)‚DiFÀ’,�ÇÒ§{�.)Z »»›´´4Çã�?þ¬ÅbÉ' a˜H$p2N¿ $m°ï‰õ.í=!>Ÿ�ÎÎN,‹cíÚµÏ�ÆQô€ÀBŠ€ QPÊÒò@­ý‘l(üètº^—,ËH’D(Âãñ ×ë‘eÙ¹víÚ?ɲ ‚ß$R(åÅ,s$ { $Ë2z½½>ì=ƒAššš°Ûí çÚµkŸ”e9È¢§;Ñ H¤P(¦˜LJfŸ¯}‡¢ôz=:�ŽP(„×ëÀjµb2™²ž{î¹?yô�� ‚d !•žhƒ.ž²´÷eYV/Å lhhÀjµ* È^»víãÀ„A�ÆAR0XIÝ逡„E­­­ ¬V+6› “ÉtÆŸþô§?Ђ« †#E؃!¥ Pì­1ðx@$B «8R„®�6°¡ºˆ§½aY,B¡�ª¢[¿–´Ï+š@ë.jÿ*±ƒI“&éÒÒÒ…B¡®gžyækÊþ©€D =žò´BRßÕÙÉǯ½Fíòå�Ò•+™4{¶ç×¶^ÅÂ×¶~mY±øŒB,PH’¤v eee&—Ëu�×ë=¾nݺr­ßOâ¢xW+«�¬€“ð0gÁ_|ñ’Á`0hòÅÇd’5…Öûû#��ùÒK8 ×n# |�™W_�ÑhT§‚)CÀ~¿_}V«ú£AдžB¬<Š ÙÒÒ²gÖ¬Yó�Â+’•ÕÈ¡xº�gW· „ ¡¾ñÒK¸€B ›0j**èºä•?ƒY–ûTûÚ²µÔWL!š´@p¹\c743aáËD<‚x()ˆ'‚7ÔËêµ­?è©OÅìh?z”ŽŽu„P[¦²J(‘¤åz5 íäí>L§]i#b8x8H«¦•eß�š<™&  ¨Žú©S‘$©—šO&im�¨†¤ì?�°mw†ÔÔ~L¬þ±¯ôxòöõ[+ü–Ž>¬¬dyEsŠ‹éúì3êŸÅ‚}ÁÆ�þI†Û`¾k0ü+ÿG?ù­ÌHXÃôÕ &=ž¼Šà£[}kG›¾ü’µÐ �dúý¹öZrþýoþõŸÿÉUn·êö)–¹R¾N[ñòßïÊ|­ê�›†ÍáCd ·ÏÇÆÏ?ç…½{© Õ¼Ÿ��£G£óz9{Ò$º].ê‚AFE\@Y áÇÈ—0Á+4âŒÀDR´àý�[÷îåõÊJ¶wtœ”ßäõ"!�‡Ê H‚#²Ì”(íëDà Œî›O•>˜2 ·à…x|>¶ïÛÇ_÷ìá_��±Ë 1‡BªI�–� ÀÑ`�ÚÖV‘ѺþøKÿJã*ohØŒÀÁ¤÷eXõ—®\{Žã¿>ü�Ã~¿¼™|>ô@ÈçÃàt¢Ó¸w»»)‰Dûb �ÿ}åíïÙdPÊ�ÑV|tº�ß_[ËŸÎßÄ£1Òúƒ�iùù½îíóù˜åõbÓ ÷jí�Áð?Ðô�Þ�—RÊŒ¶â£) q¤¡�?ïÜÉÿ45 ˜O¿NGÝèÑd··¨­%/#£×ý6Y¦¾»‡ßß ƒå éñæ ¥Œ¨ý‹íÛ©ß±„À^ZÊYç�‡,Ë4µ·óÿ¾ø‚?UU ºlŸÉ„ßhäXFt:¤þÇuu¹\øý~uÊ××Á0L #Piõ»ÊË©¾ãÜ„}¡&àÍÅ‹ñ—–òÇC‡N‹,�$¤ŽÒ,–˜ùjt:ZÚÛ1›Í�^#ƒ§â?�Ê„¡ ‹§„¨„j?Y²„s¯§R""_8ÀfŸ½^O@–a€±ù „t:|²Œ0@œ��Xrscæ÷JÕ'N�årõ𸡬 ê�ÿÓ1•´dƒ`Hw9�tmØJJ�è½ýÅÿ;×=Jfw7mmX;;1z<„tº˜£$Y¦=-�Îôtüèt ‘Ù‡ zçøqü~?�@@µAb )Öw ¶z?^J)#°ð¦›hÙ±CEmýøñ7ŽwrrÔ“*ŒB`ñûé´ÛiÈÌDç÷#ù|ü~ô�~�¯ÝF#È2(ïózÙâN‹{ZZLÞ¼f3ÕMMêôîP(³ˆç[û¢d�`Ä- é¯Ì³gφ Âåb�ËEÃð·ñã©·Z9a2ÑExºLèJK½ž�ÕJ0=�ÛMGF^«L&0ÂÝ…,‡5€`2±§®®Oµ’$ŽtvöÒ±&¤�x#PI“$ ‹ÕÊŒk¯¥ë²Ëðxi_nßNg?-FÃB×ëí="p¼Þð_z=IâˆTµµQ²o–ÌLln7¦´4*ý~ªF);çµ¥*ó´!êÁ~ë`ë+^1 CBJåjçÔ+Wé¨Q,7ŽßîÙÓçó²$aéî¦[–ÃÂV&.Ÿ8�’ÇÃX»�~?õ¡èõ؃A¤®.º;;騪B²XêtþøcÜ••¼ |ë…wöÙ!0 ªH…á°ìO‹ÐÚÚE–F£‘ Æ�çÖ>9 ™B!,atvBg'Y~?çæç3*/�²Ñ£™‘›ËD“‰œ®.Ÿ_躻¹ãÃ)­¬¤|á:ÚÛOòN·’íûk)%ŒÀh#*:¯5®;ûl¶?Ρ@ß3¦ BÐi¥&¿ŸéEEê …Lf3Yf3Âí&èóÑ|ô(žãÇ yÀ`"�ƒ)CÑÊ®\?›9“[ß}_T>C0ˆ„äS,G§ãB› wdK“ÉDff&’FÃ(A)“ɤº‚ ?ƒá_IÿÚFáôº„¾"lÑiÚtƒÁ@–ÓÉòÿøܹ³'> !AÈçÃ’žó½6Iâ¬`�Én7æÈ¦NŠ�5ë^�žÍ"”µ‚Ú¢�ò+ýk „äÛÚÿ�œ]TÄMuu¬­®@ ! Þf#Æ´2€ñz=ÓívÒ#;|j/EÈÚ÷imíïxë@¹—L¤D(x0yµš@±æžsÿjjâ �)`ŒÇÃ!pôz6ØÕÅUYYÛlX"[»*C¿JËWZxô»µïMd(x yN—R*<мŠ5®h‚4›�ûfÎdÞæÍ\RSÃĪ*F9s» DBÂÓ�F&¸\84ûú*j_YkX4/Éð›w0”R¡àÁ¾[Èu¹¸»³ñæ›H¹@Ó”)u:.´XȱZÕV¯´|e‡OEð™ü‘(þSzaÈ@Zþ@†N•ôÓÉ ‚C_~‰ë±ÇÈ#üÑ@à•WÿÀ8"[·j7pÔ _Ûº•+Yü+éC‚!?1$ÞôÁæU®Cï¿�›ð1¥€ È;x�öºº^;x[­VµõkWk×ì5ÿɤ¯� Më¥ Ã�ðîJ i7qVZ¾v’Ç©T~²øÌýxhÈŽŒ‰'=ž¼Êÿߺúj ï°thZÏ;�‚ÒRUÝ+*?zšW¢y:Uz,J9#†×Ô’$IŒ>óLšŸy†Ãÿ;ÞÏ>ƒ3˜xà 1�=ísÃÅoJ�púaÐD,�æA1Ïúö·)š8‘¶¶6 F#’$©'|)qüè¾>Ñ<�*¯Ö�MÙPp¢ü%}0¡Ô¾*U)´§¥aŠ,ï’$©×�Ñý~²xh RbBH"òj'• ‚Á`¯ß±Z~²yhzʇ‚ax…mÌ)›;Ærïú3̾Ž^À×n, Všö·vêv´ÐûšÐ‘ žN•~ºùKIÀH~_‚þߦöµ”ôSÑoÞhêg'Î!ãéTu0T.hÒ�(á'Z�Ž„V>/ Ù4¤ëFRw�Ì÷$*o鉢!=94Þt%íùçŸçÞ{ïåøñã½Ò�?NudæO¢… ¹ôÒKùÉO~’ÐrûKèýxhÈÖÄ›®¤íÝ»—•+Wò׿þ•õë×÷Ê{Ë-·póÍ7'ä=ÑtèÐ!IÓlñ�0 ´téRu£¦O>ù„ ðþûïÓÒÒBzz:7n$//�³Ï>›®®.Ö¯_OUUW^y%“&MÀëõR^^NII Ÿ~ú)‡æ–[n!??Ÿ-[¶ðÑGñ�ï|‡©S§`2™xðÁ¹$rpÀáÇy÷Ýwikk㪫®büøñ ùÆ¡ô’rdÌ�Ô#c‰Ü×_�%K–0wî\Þyç øÇ?þÁ‰'˜>}:]]]˜Íf$IbÒ¤I,]º”… ÒÜÜŒÑhÄçó1oÞ<|ðA>üðCæÍ›§ÑF ÀétR\\ÌîÝ»ÕxÁªU«¸ì²ËøÁ~À¶mÛxç�wÈÉÉáž{îá�wÞA–eu‡�÷Þ{�œœœ¸¿3z7R¿ßï;vì­ÀQÂG´>9$ „8í³ƒRÆ ¬ZµŠÜÜ\î»ï>œN'ÍÍÍ!p8Ü}÷ÝȲÌC=Ä–-[xê©§X´hÁ`�U«V±qãFF�Í›o¾‰ßïgÓ¦M!3f ûÛ߸þúë©««£²²’5kÖðä“O …xíµ×¨­­Åív“••ÅÃ?ÌÛo¿Íyç�Ç믿Îúõë¹öÚkÉÌÌLhݤ¬‰÷–/_NMM óæÍ#==�ŒŒ ÚÚÚhnnàË/¿Äáppá…’››Ëúõë©®®æÖ[oåŠ+® //�ÂÂBº»»illdß¾}¸ÝnþøÇ?RVVFvv6z½ž… 2{ölŠ‹‹B`³ÙBÐÔÔDff&B6nÜHqq1«W¯fìØ±”””°lÙ²“Ö ôõ]‰°E)1%¬©©‰7ÞxI’xöÙg™6m´µµñÉ'ŸPSSƒÓé$//€mÛ¶‘––ÆÜ¹sÕòZZZ°Z­¸\.ÈÊÊ¢°°I’øüóÏIOOç»ßý.~ø!�‡éÓ§sôèQZZZÈÏÏgÏž=4662~üx¬Vë ¿k¸Ü½¾hÈâñh„Å‹ÓÙÙÉôéÓ™0aeeeŒ;–`0Hyy9’$ÑÜÜŒËåRqR^R~>|˜}ûö©onn&++KíëëêêÈÈÈ/û’$¶nÝŠÃá`æÌ™¼ÿþûx½^fΜ©n£œ,IÁ`ŸÏ—ð:èýxhÄ{»víbÛ¶mœuÖY¼øâ‹ªÀjjj¸ä’K8xð î­©©áæ›ofÊ”)Ì™3‡òòrn¿ývF�ͧŸ~Š^¯gÑ¢E|õÕW´¶¶ªV{0¤©©‰ÂÂBµüêêjœN'ùùù|üñÇ8f̘Ann.999”——s×]w …صk¯½öEEE ùæX^@²@0âãÏ=÷œjøi§kååå1zôhµ…/Y²„¼¼<iooçÆodÞ¼ytvv²{÷nrssY¹r%3gÎäàÁƒäççsÑEá.Æf³15r:„Ç Î<óL BŠ‹‹9ãŒ30™L<òÈ#dee±{÷n***(--U»ž¾¾k¤EÕ÷$à ú(&“‰¥K—²fÍ,X@GGj~ŸÏG]]�}Ó–!„ ¡¡�®®®>[Z}}=‘B%Iâĉ´··säÈZ[[)((@’$~øÃrï½÷ªÞ‚R^]]Í6rJºÏ磺ºZuÚ°aíííäççŸÄSkk+]16³BÐØØ¨Nn‰U_I¥èƒs�‘p  ˜ üŸC‡ùŽ;&´Wuuµ¨®®;vìn·[ŠmÛ¶©éÕÕÕ¢¼¼\lÙ²ETUU‰ïÿû";;[X­V‘——'xà5ß“O>)ÆŒ#l6›p:�ââ‹/UUU¢ººZ\xá…"33Sœyæ™Âf³‰É“'‹�?þXœsÎ9Âápˆôôt1qâD¡ÓéÄŠ+Ä®]»„Ûí7Þx£8v옘4i’ÈÊÊEEEÂjµŠììlñÀ¨ß1eÊár¹„Åbn·[Ì�;WTWW‹Ë/¿\8a2™DFF†p:�bÇŽâ‰'ž%%%Ân· §Ó)fÏž­òzÿý÷‹Q£F «Õ*ìv»(((»víRßuôèQõ:xð ¸ ˜©kg¤îuñÈpÈ»€åË—ÓÒÒÂÕW_M~Ô�%%%”””°xñb^ýuÆ�Ç¢E‹°Ûí¬Y³†ÚÚZ¶oßÎ}÷ÝÀ�üc¦M›Æ|ÀòåË�p·½½›ÍÆ­·ÞÊå—_μy󨩩ᦛnâšk®aÿþý¤§§3cÆ ¶nÝJss3'N$ ÒØØHWWÅÅÅÜyç�èõzuH¸¾¾žÎÎN®»î:/^Lnn.6l૯¾âꫯÆn·SPPÀm·ÝÆwÜÁÎ�;ùÅ/~�Ñhä®»îbêÔ©|ôÑG¬\¹’#GŽðØc�‘››Ë’%K˜?>¹¹¹šq”Hò…!{÷îÅét2þü˜ØÜÜÌ?ÿùO&NœÈºuë0™L!X¶l[·n套^Âb±ðì³ÏRZZJ0dêÔ©|þùçtvvÒÒÒBII ¯¾ú*6›�åË—sìØ1/^ÌÝwß „Gú„äçç³jÕ*ìv;³fÍâÀ�´´´0uêTÖ­[‡,˼ûî»x½^$I"77—‡zˆ·Þz‹;v Ë2>Ÿ�ªª*.½ôRzè!ÊÊÊX²d —^z)V«•Ûo¿�ÌÌLÆ�Çîݻٽ{7¥¥¥tvv¢×ë¹ð )--ÒE¡ ù`�–͈:�Â@Ù¼y3MMM,\¸S䨖ãÇ�c6›q»ÝTWWSXXÈøñã …B´Gvé¶X,|öÙg´´´pà 7¨3}>úè#²²²˜?~/rss1 9r§ÓIQQÏ?ÿ<�@€ë¯¿^�éÓÜŲ̈Q£X°`|ðX­VšššHKKcâÄ‰ìØ±ƒÖÖV&Ož @CCÕÕÕøý~~øaõÝz½›ÍÆ•W^ÉäÉ“©¨¨`Μ9°zõj&MštÒæÒÉÄ�wv»�ÎÎNu"‡B���ìÝ»—ýû÷#Ër¯îaûöídddpæ™gâñxzÅÞ×®]Kww73gÎdãÆ�˜Íf.¾øbõ~ww·º Ào¼Acc£:xÓØØHFFf³™;v�žžÎùçŸ@UU•: ¢¢‚÷Þ{�‹.ºˆM›6ñöÛoãp8Ô9›6mÂjµªÏ¶´´àõz¹æšk(//W¯Í›7³råJÌf3ëׯç•W^áŠ+® ¦¦†eË–%§Òû¡!ß,zÆŒ´··sÛm·ñÆoðÖ[o±hÑ".ºè"öîÝË\€,Ë<÷Üsìܹ“;ÊÊJfÍšEaa!N§“C‡±mÛ6žzê)Ö­[Gaa!·ß~;•••¤§§3eÊŒF#F£‡ÃAcc#/¿ü2o½õ?ü0�@€oûÛtttÐÚÚJNNF£‘ºº:œN'�F>øà<ç�wõõõø|><•••Ü|óÍ9rDO[[›:[èÕW_eÔ¨Q8�N¶mÛFEEµµµ¼øâ‹üìg?C¯×3gÎþò—¿`2™ÈÍÍ% RTT4¤êH¾ µò•릛nÙÙÙÂd2 £Ñ(222ÄĉÅ®]»Dmm­¸òÊ+EZZšzoΜ9âСC¢¾¾^¬X±Bäää£Ñ(l6›˜0a‚ذaƒhhh%%%b„ ¢¡¡A466ŠÆÆFñæ›oŠ3Î8C�Fa·Û…Ëå.—K”——‹—_~YØívqÿý÷‹††‘——'Î=÷\õÙk®¹FdffŠmÛ¶‰ššqÖYg £Ñ(,‹5j”p¹\âºë®õõõâÝwßEEEÂét ·Û-öíÛ'~þ󟫼šÍfár¹Ä÷¾÷=±¸ÅàIDATeË‘••¥~¿Ãá³fÍ{öìÕÕÕ"Úƒ:vìXÒ¼€¤ :t¨ßYÁ’$ÑÔÔÄgŸ}†Çã¡´´”âÈŽÛÊý/¿ü’ÊÊJÊÊÊ(--íµ=kCCÛ·oÇét2mÚ4µK8pà’$QRRÒë}���lݺ•‚‚F�Ecc#&LÀçó±oß>Š‹‹±ÛíìÙ³›ÍÆèÑ£�°ÕßÐÐ@YY™jðmÞ¼Y–™6mG�%;;›ììl 8vìÝÝÝ”••©±ˆ;v „`üøñ"Ë2'Nœ`çÎ�´¶¶2fÌÊÊÊÔ¹ pòr>ŸÏ?f̘„9²�'Ï@ïi©¿úˆu/:-Yy’€” Š×Ìó’ßÞ|ñŒH&ú™�а Q–è!Ö�j˜Tx4 ;N‡Z9ñζý: <šR¡þ4‚VÍGÿh9ƒÍ“ˆg’AÉ@\Žl2+3^�0Ø|ñ>ƒ$HÆB‘kÄQ<Â.�Ç(CÐS¿ C"5€"ü $ICÎêMCé5$ê�§*#R§zƒ nJ¤fÐwм#‚NÕ÷äùDð0Hò®ã#HD ¿;®Â†:Nò ½DRDt^‚x#� ŽI+ÑÀ À dF~[#÷e`d˜¾#Ÿác ¼@'phŽÍôD}@PÄ!ÄDÌP˜õ �°f F˜4†HÚ7)ZÕG„AÐNXÃú ×oÜ QPºEý‡3~‚Þ­ÿ ŒDä ÐÓ°ºk ìâ€BDº�aF¡ ]ôÿ›Ö?xÒ6,äòÖ þÈ=âQÿ�8 = P˜VF %¾iý§C‚Þš@©× =­x�@µ�°P¬£§Å#üøHD]Ú@›ˆ·õC‚*àda#üø(Z@âWý % 1 nçùkB‰v,úÿ`míPëBƒIEND®B`‚atomes_1.3.1/metadata/icons/atomes-coordinates.svg0000664000175000017500000002641415212624223021730 0ustar lerouxleroux Atomic CoordinatesAtomic Coordinates atomes_1.3.1/metadata/icons/atomes-project.png0000664000175000017500000000467215212624223021053 0ustar lerouxleroux‰PNG  IHDR00Wù‡…iCCPICC profile(‘}‘=HÃ@†ßþHE* vqÈP�,ˆ–â¨U(B…P+´ê`ré4iHR\ׂƒ?‹Ug]\AðÄÕÅIÑEJü.)´ˆñŽãÞûÞ—»ï³ÊT38 ¨šedRI!—_B¯ÒD ‰™úœ(¦á9¾îáãû]Œgy×ý9ú•‚ÉŸ@<ËtÃ"Þ NlZ:ç}â+K ñ9ñ„A$~äºìòç’Ã~ž1²™yâ±Pêb¹‹YÙP‰ãÄQEÕ(ߟsYá¼ÅY­ÖYûžü…á‚¶²ÌuZ£HaK!@FTa!F»FЉ �'=ü#Ž_$—L® 9Pƒ ÉñƒÿÁïÞšÅé)7)œz^lûc í­†mÛvë<WZÇ_k3Ÿ¤7:ZôØ.®;š¼\îÃOºdHŽ å/�÷3ú¦<0t ô­¹}kŸãôÈR¯Ò7ÀÁ!0^¢ìu�w÷v÷íßšvÿ~¶rÂìïóbKGD#WÖya¡ pHYs  šœtIMEç8 � �N¶IDAThÞµš[h×ÇçÌu/³»ìÅ–uYUQê4ØB6Ž % íC„óÔBBšBÚ>ƒʃ�±ÜS›bÈ›Cô`ÚB¡o)%Œ¡N �ÆD44±”ÊNìDª×VlI³Ú�Ý�™>H»‘6³—Ù]XfwÎîÌÿ¾ÿw9߬ õ€Ü:ökø€·uìy´¦ÄãñH6›M Óó¼žI!ª÷ïß_l Òë5ÕsÚéÓ§÷9räO¾ï+@B×u)•Jîõë×ÿ8==ýÏóîåGA@Z©TÚcšæ¾V€[ÍùþN•xžGµZ%ŸÏÿþÂ… ‘“'Oþøª²Õœã8‘í@ƒ^í$³ý%¥DÓ4J¥’266væüùó¿vú£ Ù h3B­ˆ !Ð4 EQpGÛ·o߯Ϟ=ûK!Ä®nIÈ/ÔÊ·²†ªªèºŽmÛär9}ÿþý¿=sæÌ/€]€Öw�:»ò�¤¥”(ŠB¡P ™L200 OLLüæÔ©S? £áf+ßtãBH)q]—xþ-p¾ïïx_›ßþ¾ç<&Œº®Ë­[üù�wøëÒcÑ(?|ñEìgŸe"•B×õÀEi$Òi°èÙÛÏÝ^Zâoï¿Ï›ss(€âyØé4ÿ%©i<†~Ó¸ÒAé‰@p×uùêÖ-�’Üð0×Ö¸:;Ë›×®±âºÔöŸ†aà›&‘tøÈqøn©D<GQ”ŽäÓ³„‚d4ÿÞ{¬¾ú*EÃàí×^ãïwîpÓqv† !(ŽŽ¢›&ªiða¥Â� ‰‘H¤­|:±@Wû�õ/¿$W,‚ËŸ|Â’m#·næ AY×)¥ÓÒi”d±ómàß¶M±Xl¹PÍ|¯o>0òôÓ|üÒK\-¹«(Ä**±à¾®ÃÐÁ�� ¦‰¹e…w‡ïÛ6ñxÃ0Zʧg�„ ��qøøqö>ó «¦Éº®SÔuªºŽo�H€e�¢PÕ4–>¬[ñ}Ö×wX¡ È0ÀkïUU%“ÍòøÈžTT½P)AQ �†ht󳔨¾�çºõë^-± ªÕjSÀ�†Ñ®÷Äš¦‘øFƒ¾�ð}Ðu0M¨T æžGe�ÛžÇ�õuJ¥RÓæA§QHv›„¤S)¾³¥cÈryS:žå2¸.T«¸À§¶ÍÝpËe|àŸ…v¡Pßt#ŸP{â ›$-‹‘xü›ˆ ª‹m‚wD¹Ì.!x2�&#%kk¬ÎÍa/.ò¡m³ôð!k««;H´ªzNd�7Ñ4�½Ù,ﮬ |ŸD,F±Ze0‘@Š¢`š&B¢‘e]§X­R¾w�‰7˜_\dya�ñsçØ{èÐfâ ˆH}sâÆsRJžÌçñ�ˆ”D…`XÓ°âqâñøŽd Çb${ŒÔO`W®0yó&ÿ½|™ÕÕU<Ï íÈ=Y`0—#Y© §Ó(–E4“ \¥ð¸Œ¨*ÙtyàËcc|}û6ŒŽÖ·—RÊþU£í ¸jµJá‹/xáã�)8Àìáà %&0ŒHɈª²KUɦa`ÆfE::Ê×o¼Áƒ•²D£QTUÝ‘Àz.æZ9–‚ÿ|ðî±cüÈó˜�˜`*aLÓ4 b†AÔ4ë€k¯Zç •Jáäóõ}²”røG&¡Ú±´¶FÌóˆ{¤d¯e‘ÉdˆF£uàŠ¢Ô» ÛËß÷1¶,²ý\£z–P«1öÔS\;~œÂò2ƒÏ=G.—#“ɉDꀃêþ ê³ð¡| è˜ÎåøÁ+¯`Û6ªª’L&‰F£-ý¦ø~>#kKFQR©‰D¢Þûo÷È)¨âl¼Gßœ¸“x\뤵*;‚ä³\3 õ½½ÞNRíZ0�ü>lãLÒ‡Ñ,Ñ5­úºoÂô‰Â‚î´ kEÀBx½H«™Bñ»ubÏ0ŒbcG8(’5£‚º í3h^×õ"à6]¸VÏ!’ÉäÈððð÷*•Ênß÷Õ0Zmœ ^QÑuý‹‹‹ó«««K@),0 0úåð!†·õPc} ¼–@}§Hÿnf´ýkÎÿ ßó¶�ôNIEND®B`‚atomes_1.3.1/metadata/icons/atomes-project.ico0000664000175000017500000020407615212624223021041 0ustar lerouxleroux€€ ((€     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}€��������������������������������������������������������������������������€}vk]J6$  ,BàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿáááøA+ 2KàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùK26QàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùP6 8TßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿßßßúT7  :VßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúU9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿçççÿåååÿäääÿãããÿãããÿæææÿèèèÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿåååÿßßßÿÛÛÛÿÙÙÙÿÙÙÙÿÚÚÚÿÜÜÜÿßßßÿåååÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿäääÿÜÜÜÿØØØÿÔÔÔÿÐÐÐÿÏÏÏÿÐÐÐÿÔÔÔÿØØØÿÝÝÝÿäääÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿåååÿÜÜÜÿ×××ÿÐÐÐÿÊÊÊÿÆÆÆÿÄÄÄÿÅÅÅÿÉÉÉÿÐÐÐÿÖÖÖÿÜÜÜÿåååÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿàààÿØØØÿÎÎÎÿ¯¯±ÿŽŽ•ÿ££¦ÿ¶¶·ÿºººÿ¿¿¿ÿÆÆÆÿÎÎÎÿ×××ÿÞÞÞÿæææÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿæææÿÜÜÜÿºº½ÿrrŽÿ|ÿ€ÿ}ÿ//lÿ™™žÿ¶¶¶ÿ¾¾¾ÿÇÇÇÿÐÐÐÿØØØÿßßßÿæææÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿ¿¿Áÿ//sÿ�ÿ›ÿ ÿœÿ�ÿ""wÿ––œÿ¶¶¶ÿÀÀÀÿÉÉÉÿÒÒÒÿØØØÿÜÜÜÿáááÿæææÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿáááÿzz�ÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ,,eÿ­­­ÿ¸¸¸ÿÁÁÁÿÊÊÊÿÐÐÐÿÕÕÕÿØØØÿÛÛÛÿÞÞÞÿáááÿãããÿæææÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿàààÿ11sÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ""yÿ§§¨ÿ±±±ÿ¹¹¹ÿÀÀÀÿÇÇÇÿËËËÿÏÏÏÿÒÒÒÿÕÕÕÿ×××ÿÙÙÙÿÛÛÛÿÝÝÝÿàààÿâââÿåååÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿááâÿ44xÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ""{ÿ¢¢£ÿ©©©ÿ°°°ÿ¶¶¶ÿ¼¼¼ÿÀÀÀÿÄÄÄÿÇÇÇÿÊÊÊÿÍÍÍÿÏÏÏÿÒÒÒÿÔÔÔÿ×××ÿØØØÿÛÛÛÿÝÝÝÿßßßÿâââÿäääÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿâââÿ==pÿ‘ÿ¦ÿ²ÿ¹ÿ³ÿ¨ÿ•ÿ oÿ¢¢zÿ§§~ÿ¨¨£ÿ¬¬©ÿ°°°ÿ´´´ÿ¸¸¸ÿ»»»ÿ¾¾¾ÿÁÁÁÿÄÄÄÿÇÇÇÿÉÉÉÿÌÌÌÿÏÏÏÿÑÑÑÿÔÔÔÿÖÖÖÿØØØÿÙÙÙÿÛÛÛÿÞÞÞÿàààÿãããÿåååÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿãããÿßßßÿÛÛÛÿÚÚÚÿÛÛÛÿÝÝÝÿáááÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿ¨¨±ÿ~ÿ™ÿ¥ÿ©ÿ¦ÿ›ÿƒÿBBPÿ¦¦2ÿ©©3ÿ©©=ÿªªCÿ©©~ÿ««„ÿ¬¬¨ÿ¯¯¬ÿ²²±ÿ´´´ÿ···ÿºººÿ½½½ÿ¿¿¿ÿÂÂÂÿÅÅÅÿÈÈÈÿËËËÿÍÍÍÿÐÐÐÿÒÒÒÿÔÔÔÿ×××ÿÙÙÙÿÛÛÛÿÝÝÝÿàààÿáááÿãããÿäääÿåååÿäääÿâââÿÝÝÝÿÙÙÙÿÖÖÖÿÓÓÓÿÒÒÒÿÓÓÓÿÔÔÔÿ×××ÿÜÜÜÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿâââÿƒƒ–ÿ|ÿŽÿ“ÿ�ÿ€ÿyÿ€ÿ‘‘-ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿ©©ÿªª‚ÿ¬¬˜ÿ®®«ÿ±±¯ÿ³³³ÿ¶¶¶ÿ¹¹¹ÿ¼¼¼ÿ¿¿¿ÿÁÁÁÿÄÄÄÿÇÇÇÿÊÊÊÿÍÍÍÿÏÏÏÿÒÒÒÿÓÓÓÿÕÕÕÿ×××ÿÙÙÙÿÚÚÚÿÛÛÛÿÚÚÚÿØØØÿÔÔÔÿÐÐÐÿÍÍÍÿÉÉÉÿÈÈÈÿÈÈÈÿËËËÿÐÐÐÿÕÕÕÿÛÛÛÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿààáÿ¤¤«ÿrr‹ÿdÿpÿ++fÿ==‰ÿ ‘ÿxx(ÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªfÿªª�ÿ¬¬˜ÿ®®«ÿ°°¯ÿ³³³ÿµµµÿ¸¸¸ÿ»»»ÿ¾¾¾ÿÀÀÀÿÃÃÃÿÆÆÆÿÈÈÈÿËËËÿÎÎÎÿÐÐÐÿÒÒÒÿÒÒÒÿÑÑÑÿÏÏÏÿÌÌÌÿÇÇÇÿ¿¿¿ÿ½½½ÿ½½½ÿ½½½ÿÁÁÁÿÈÈÈÿÏÏÏÿÖÖÖÿÞÞÞÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿÝÝÝÿ¥¥Ÿÿ[[ÿ22[ÿ==dÿmm(ÿtt-ÿvvÿ‡‡ ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªfÿªª�ÿ««„ÿ­­¨ÿ®®¬ÿ±±±ÿ´´´ÿ···ÿ¹¹¹ÿ¼¼¼ÿÀÀÀÿÂÂÂÿÅÅÅÿÆÆÆÿÇÇÇÿÆÆÆÿÄÄÄÿ©©¬ÿ‰‰™ÿ11eÿcc~ÿ††�ÿ°°±ÿ¸¸¸ÿÀÀÀÿÉÉÉÿÒÒÒÿØØØÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿÜÜÜÿ¨¨žÿ^^ ÿZZÿJJ=ÿffÿvv ÿvvÿwwÿœœ,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿ©©Cÿ©©~ÿ««„ÿ¬¬¨ÿ®®¬ÿ±±±ÿ³³³ÿ¶¶¶ÿ···ÿºººÿ»»»ÿºººÿ  §ÿ((wÿ‰ÿ‘ÿ�ÿ�ÿbb‚ÿ®®¯ÿºººÿÅÅÅÿÎÎÎÿÖÖÖÿàààÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿÚÚÚÿˆˆyÿ^^ ÿ^^ ÿYYÿVVÿttÿvv ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿ©©Cÿ©©~ÿªª�ÿ««–ÿ¬¬©ÿ®®­ÿ¯¯¯ÿ™™�ÿ%%vÿ’ÿ¢ÿ¨ÿ§ÿ�ÿˆÿdd~ÿ¶¶¶ÿÂÂÂÿÌÌÌÿÕÕÕÿÞÞÞÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿäääÿÖÖÖÿ``7ÿ^^ ÿ^^ ÿ^^ ÿWWÿggÿvv ÿvv ÿvvÿ‡‡ ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿ¨¨eÿ¨¨ÿzzqÿ †ÿ¢ÿ¯ÿ¹ÿµÿ«ÿ™ÿ%%xÿµµ¶ÿÂÂÂÿÍÍÍÿÕÕÕÿßßßÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿãããÿÕÕÕÿgg1ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿWWÿrrÿvv ÿvvÿvvÿšš*ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿœœ,ÿuu(ÿ<<„ÿ§ÿ·ÿêÿÓÿ°ÿŸÿ€ÿ¦¦¨ÿÆÆÆÿÏÏÏÿ×××ÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿÛÛÛúV9  :WÝÝÝúâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿáááÿ¾¾½ÿbb&ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿYYÿddÿvvÿvv ÿvvÿ}}ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿUUvÿ¥ÿ©ÿ³ÿËÿ¾ÿ®ÿ�ÿ((ÿ¾¾¿ÿËËËÿÓÓÓÿÛÛÛÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÛÛÛúV9  :WÜÜÜúâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿÞÞÞÿ©©žÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿXXÿrrÿvv ÿvvÿ��ÿ––ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿvvÿtt1ÿ§ÿ¬ÿ§ÿ©ÿ¯ÿ­ÿ¤ÿ‘ÿ55oÿÈÈÈÿÑÑÑÿ×××ÿßßßÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿÜÜÜÿ¦¦šÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿffÿwwÿ„„ÿ““ÿ��ÿŸŸ)ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿ��,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿuu,ÿWW}ÿUU{ÿSStÿ •ÿ�ÿ›ÿ�ÿ++{ÿ²²·ÿÒÒÒÿÖÖÖÿÞÞÞÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿÖÖÖÿ__Dÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿ‹‹ÿ••ÿ––ÿ““ÿ�� ÿ��ÿŠŠÿ‰‰ÿ‰‰ÿŠŠÿŽŽÿšš%ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿŸŸ,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿvvÿzzÿ„„.ÿ//tÿ~ÿ++~ÿ88oÿµµºÿÕÕÕÿÙÙÙÿÞÞÞÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿâââÿÕÕÔÿff1ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿzzÿ““ÿ––ÿ••ÿ‘‘ÿ‹‹ÿŽŽÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿŠŠÿ��'ÿ©©3ÿ©©3ÿ©©3ÿ©©2ÿ  (ÿ””ÿŽŽÿ{{ÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿwwÿ††"ÿ““&ÿ§§2ÿ®®…ÿ¹¹ºÿ®®¯ÿÉÉÉÿÐÐÑÿ×××ÿÝÝÝÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿáááÿÒÒÑÿgg1ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿŒŒÿ””ÿ––ÿ””ÿ��ÿ’’ÿ’’ÿ’’ÿ’’ÿ‘‘ÿ��ÿ��ÿ‰‰ÿ––ÿ¨¨2ÿ  *ÿ””ÿ‘‘ÿ••ÿ——ÿ�� ÿww"ÿvv!ÿvv ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©:ÿµµ£ÿÂÂÂÿÌÌÌÿÔÔÔÿÚÚÚÿàààÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿÚÚÚúV9  :WÜÜÜúáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿÞÞÞÿ¨¨¢ÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ``ÿyyÿ‘‘ÿ••ÿ––ÿ””ÿ••ÿ••ÿ••ÿ••ÿ””ÿ““ÿ‘‘ÿŽŽÿŠŠÿŒŒ ÿ‘‘ÿ••ÿ——ÿ˜˜ÿ˜˜ÿ––ÿ{{ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ­­lÿ½½¼ÿÈÈÈÿÐÐÐÿ×××ÿàààÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÚÚÚúV9  :WÜÜÜúáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿÜÜÜÿ¨¨�ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿooÿŒŒÿ””ÿ––ÿ––ÿ——ÿ——ÿ——ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿˆˆÿ’’ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ’’ÿŒŒÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿµµ¢ÿÂÂÂÿÌÌÌÿÔÔÔÿÝÝÝÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿØØØÿ‡‡xÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿjjÿooÿ……ÿ••ÿ––ÿ——ÿ˜˜ÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ��ÿŒŒÿ‹‹ÿ——ÿ••ÿ’’ÿ’’ÿžž&ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªFÿ»»¸ÿÆÆÆÿÐÐÐÿØØØÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿÕÕÔÿ``6ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿffÿmmÿppÿvvÿ””ÿ˜˜ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ––ÿ””ÿ’’ÿŽŽÿˆˆÿ��ÿ’’ÿŸŸ(ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ±±‹ÿÀÀÀÿËËËÿÔÔÔÿÜÜÜÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿÞÞÞÿÓÓÒÿgg0ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿiiÿnnÿrrÿttÿ‰‰ÿ˜˜ÿ™™ÿššÿœœÿœœÿššÿ™™ÿ˜˜ÿ——ÿ••ÿ““ÿ��ÿ‹‹ÿ––ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªDÿºº¶ÿÅÅÅÿÏÏÏÿ×××ÿàààÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿÛÛÛÿºº¹ÿaa!ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿjjÿooÿrrÿttÿzzÿ˜˜ÿššÿ��ÿ¤¤ÿ¤¤ÿ��ÿššÿ™™ÿ˜˜ÿ––ÿ””ÿ��ÿŒŒÿ™™#ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ°°Šÿ¿¿¿ÿÊÊÊÿÓÓÓÿÜÜÜÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙÙúV9  :WÛÛÛúàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿÞÞÞÿÖÖÖÿ¥¥šÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿjjÿooÿrrÿuuÿvvÿŒŒÿ››ÿ  ÿ©©ÿ©©ÿ  ÿ››ÿ™™ÿ˜˜ÿ––ÿ””ÿ‘‘ÿŒŒÿ˜˜#ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªª?ÿ¸¸´ÿÄÄÄÿÎÎÎÿÕÕÕÿßßßÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÙÙÙúV9  :WÛÛÛúàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿßßßÿØØØÿÒÒÒÿ  ”ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿjjÿooÿrrÿttÿvvÿ}}ÿ™™ÿ��ÿ¤¤ÿ¤¤ÿ��ÿššÿ™™ÿ˜˜ÿ––ÿ””ÿ��ÿŒŒÿ™™#ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ­­mÿ¾¾¼ÿÈÈÈÿÑÑÑÿÙÙÙÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9  :WÚÚÚúàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿÞÞÞÿÖÖÖÿÒÒÒÿÈÈÈÿcc<ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿiiÿnnÿrrÿttÿvvÿwwÿ��ÿššÿœœÿœœÿššÿ™™ÿ˜˜ÿ——ÿ••ÿ““ÿ��ÿ‹‹ÿ››%ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ´´¢ÿÂÂÂÿÌÌÌÿÔÔÔÿÝÝÝÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9  :WÚÚÚúßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿÞÞÞÿÖÖÖÿÐÐÐÿÊÊÊÿÀÀ¿ÿdd*ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿaaÿiiÿkkÿffÿmmÿppÿssÿuuÿvvÿ}}ÿ˜˜ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ––ÿ””ÿ’’ÿŽŽÿ‰‰ÿ££.ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¬¬kÿ»»ºÿÆÆÆÿÐÐÐÿØØØÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9  :WÚÚÚúßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿØØØÿÑÑÑÿÊÊÊÿÂÂÂÿ¶¶µÿcc'ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿXXÿUUÿkkÿppÿqqÿggÿjjÿnnÿqqÿttÿuuÿvvÿ��ÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ��ÿŒŒÿ‘‘ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©9ÿ³³¡ÿÁÁÁÿËËËÿÔÔÔÿÝÝÝÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿØØØúV9  :WÚÚÚúßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿÝÝÝÿÔÔÔÿÉÉÉÿ’’™ÿ‰‰–ÿoopÿ[[ ÿ^^ ÿ[[ ÿWWÿTTÿTTÿUUÿjjÿqqÿqqÿllÿffÿllÿooÿrrÿssÿttÿ{{ÿ––ÿ——ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿ‰‰ÿ¡¡,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªEÿºº¸ÿÅÅÅÿÏÏÏÿ×××ÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿØØØúV9  :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿÙÙÙÿ¶¶¹ÿppŽÿ|ÿ†ÿ;;aÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿ^^ÿnnÿmmÿhhÿaaÿggÿllÿooÿqqÿrrÿttÿŠŠÿ••ÿ••ÿ••ÿ““ÿ��ÿŽŽÿŠŠÿ˜˜!ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ±±Šÿ¿¿¿ÿÊÊÊÿÒÒÒÿÚÚÚÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿØØØúV9  :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿÒÒÓÿ77nÿ‹ÿœÿ¢ÿ))�ÿHHIÿSS"ÿTTÿTTÿTTÿTTÿTTÿTTÿ[[ÿaaÿ^^ ÿ^^ ÿ``ÿggÿkkÿnnÿooÿppÿyyÿ‘‘ÿ••ÿ––ÿ””ÿŒŒÿ‰‰ÿ––ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©Dÿ¸¸´ÿÃÃÃÿÍÍÍÿÕÕÕÿÞÞÞÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9  :WÙÙÙúÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿ££«ÿ�ÿ�ÿ«ÿ²ÿ®ÿŽÿ--}ÿSS$ÿTTÿTTÿTTÿVVÿZZ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿddÿiiÿkkÿmmÿnnÿ‚‚ÿ““ÿ––ÿ••ÿ��ÿ—— ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¯¯ˆÿ½½½ÿÈÈÈÿÑÑÑÿÚÚÚÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9  :WÙÙÙúÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿ¢¢°ÿŒÿ¥ÿ´ÿØÿÉÿ“ÿˆÿRR'ÿTTÿVVÿ[[ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿbbÿeeÿffÿnnÿ��ÿ••ÿ––ÿ’’ÿ˜˜ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªª?ÿ··³ÿÂÂÂÿÌÌÌÿÔÔÔÿÞÞÞÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9  :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿ¤¤²ÿŒÿ¥ÿ´ÿÖÿÇÿ¥ÿ::mÿTTÿYYÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿ‚‚ÿ””ÿ––ÿ””ÿ�� ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¬¬lÿ¼¼»ÿÇÇÇÿÐÐÐÿØØØÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿ×××úV9  :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿ¦¦®ÿ€ÿ�ÿ«ÿ±ÿ¯ÿ¦ÿ))�ÿOO)ÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿooÿ’’ÿ••ÿ””ÿ��ÿ  +ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©9ÿ´´¡ÿÁÁÁÿËËËÿÓÓÓÿÛÛÛÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿ×××úV9  :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÛÛÜÿ{{–ÿ‰ÿ›ÿ¡ÿŸÿ•ÿ|ÿ��šÿžž—ÿjj9ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿ�� ÿÿxx ÿwwÿ’’&ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¬¬kÿºº¸ÿÅÅÅÿÎÎÎÿÖÖÖÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9  :WØØØúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÄÄÅÿ{{•ÿ ~ÿ„ÿ‚ÿ--xÿww†ÿÌÌÌÿÒÒÒÿÏÏÎÿŠŠ|ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿuuÿvv!ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©9ÿ²²Ÿÿ¿¿¿ÿÉÉÉÿÑÑÑÿÛÛÛÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9  :WØØØúÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÂÂÅÿ££¬ÿ¥¥­ÿÓÓÓÿÖÖÖÿÙÙÙÿÚÚÚÿÜÜÜÿÚÚÚÿÁÁÀÿŠŠ|ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿZZÿnnÿvv ÿvv ÿwwÿ��,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªEÿ¸¸µÿÃÃÃÿÍÍÍÿÕÕÕÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÅÅÁÿŽŽzÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ[[ ÿ__ÿuuÿvv ÿvvÿ‘‘'ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¯¯ˆÿ½½½ÿÇÇÇÿÐÐÐÿÙÙÙÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖÖúV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÛÛÛÿªª¤ÿeeAÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿVVÿnnÿvv!ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©Cÿµµ±ÿÀÀÀÿËËËÿÓÓÓÿÜÜÜÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÖÖÖúV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙØÿªª¤ÿll=ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿYYÿ__ÿuu ÿvv ÿwwÿ��-ÿ©©3ÿ©©3ÿ©©3ÿ¬¬ƒÿ···ÿÂÂÂÿÌÌÌÿÔÔÔÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙØÿ���ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ[[ ÿUUÿnnÿvv ÿvvÿ††ÿ¨¨2ÿ©©3ÿ©©9ÿ­­šÿ¸¸¸ÿÄÄÄÿÍÍÍÿÖÖÖÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9  :W×××úÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÃÃÂÿ‹‹}ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿUUÿ__ÿuu!ÿggTÿiiMÿ¦¦2ÿ©©3ÿ¨¨dÿ­­¬ÿ¸¸¸ÿÃÃÃÿÍÍÍÿÕÕÕÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÂÂÁÿŽŽyÿ]] ÿ^^ ÿ^^ ÿ^^ ÿYYÿSS'ÿll/ÿ??Šÿ†ÿ‘‘1ÿ©©9ÿ¤¤�ÿ«««ÿ¶¶¶ÿÁÁÁÿËËËÿÓÓÓÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÕÕÕúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÚÚÚÿ©©¤ÿeeAÿ]] ÿ^^ ÿZZÿzÿ;;ˆÿ ’ÿ|ÿZZZÿ��aÿŸŸžÿ¨¨¨ÿ³³³ÿ½½½ÿÈÈÈÿÐÐÐÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÕÕÕúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿ×××ÿ¦¦ ÿdd?ÿ]]ÿ//Xÿyÿ€ÿˆÿ‡ÿzÿZZxÿ¢¢£ÿ¯¯¯ÿºººÿÅÅÅÿÎÎÎÿ×××ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÏÏÎÿŸŸ•ÿ""iÿŒÿœÿ£ÿ¢ÿ™ÿ„ÿ]]yÿ¬¬­ÿ¹¹¹ÿÄÄÄÿÍÍÍÿÖÖÖÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9  :WÖÖÖúÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÙÙÙÿœœ§ÿƒÿžÿ¬ÿ²ÿ±ÿ©ÿ˜ÿxÿ™™œÿ¹¹¹ÿÄÄÄÿÍÍÍÿÖÖÖÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÚÚÚÿuuŒÿŽÿ¦ÿ´ÿÕÿÏÿ°ÿ¡ÿƒÿ„„�ÿ½½½ÿÆÆÆÿÎÎÎÿ×××ÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÔúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿzz�ÿŽÿ¦ÿµÿØÿÐÿ±ÿ¡ÿƒÿ‰‰”ÿÁÁÁÿÉÉÉÿÑÑÑÿÚÚÚÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¥¥¯ÿ„ÿŸÿ­ÿ´ÿ³ÿªÿ™ÿzÿ©©¬ÿÈÈÈÿÎÎÎÿÕÕÕÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖ×ÿ::vÿŽÿŸÿ¥ÿ¤ÿ›ÿ†ÿrrŠÿÈÈÈÿÎÎÎÿÔÔÔÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÕÕÕúÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ½½Áÿ::tÿ‚ÿŒÿŠÿ€ÿvv�ÿÊÊÊÿÑÑÑÿÕÕÕÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖ×ÿ¤¤¬ÿ¡¡®ÿŸŸ«ÿ¹¹½ÿÓÓÓÿÖÖÖÿÙÙÙÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÔÔÔúU8  :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿÕÕÕùS6 :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿÔÔÔùO3 :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿÔÔÔùI.  :WÔÔÔúÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÕÕÕÿÖÖÖÿÔÔÔùA)  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿ×××ÿÕÕÕÿÑÑÑÿÌÌÌÿËËËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÅÿÅÅÅÿÆÆÆÿÆÆÆÿÇÇÇÿÈÈÈÿÉÉÉÿËËËÿÊÊÊÿËËËÿÌÌÌÿÍÍÍÿÍÍÍÿÎÎÎÿÏÏÏÿÐÐÐÿÓÓÓÿÔÔÔÿÃÃÃ×7! :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÑÑÑÿÉÉÉÿÃÃÃÿ¿¿¿ÿ¼¼¼ÿºººÿºººÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¹¹¹ÿ¹¹¹ÿºººÿ»»»ÿ¼¼¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÂÂÂÿÄÄÄÿÅÅÅÿÆÆÆÿÊÊÊÿÌÌÌÿÏÏÏÿ···í___i+  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÕÕÕÿÎÎÎÿÀÀÀÿµµµÿ¯¯¯ÿ¬¬¬ÿªªªÿ¨¨¨ÿ¨¨¨ÿ§§§ÿ§§§ÿ§§§ÿ§§§ÿ¨¨¨ÿ©©©ÿªªªÿ¬¬¬ÿ®®®ÿ¯¯¯ÿ±±±ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¿¿¿ÿÄÄÄÿÇÇÇÿ¦¦¦øfff}2   :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÖÖÖÿÒÒÒÿÉÉÉÿ···ÿ¨¨¨ÿ¡¡¡ÿ���ÿšššÿ˜˜˜ÿ———ÿ———ÿ–––ÿ———ÿ———ÿ˜˜˜ÿ˜˜˜ÿ›››ÿ���ÿžžžÿ¡¡¡ÿ£££ÿ¦¦¦ÿ©©©ÿ®®®ÿ²²²ÿ¹¹¹ÿºººÿ™™™ýhhh‡7$  :WÔÔÔúØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÅÅÅÿ¯¯¯ÿžžžÿ”””ÿ���ÿŒŒŒÿŠŠŠÿˆˆˆÿˆˆˆÿ‡‡‡ÿˆˆˆÿˆˆˆÿ‰‰‰ÿ‹‹‹ÿ���ÿ���ÿ’’’ÿ•••ÿ˜˜˜ÿœœœÿŸŸŸÿ¦¦¦ÿ±±±ÿ¬¬¬ÿ“““ÿppp”<'  :WÔÔÔúØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÃÃÃÿªªªÿ———ÿ‹‹‹ÿ………ÿ‚‚‚ÿÿ}}}ÿ}}}ÿ}}}ÿ}}}ÿ~~~ÿ€€€ÿ‚‚‚ÿ„„„ÿ†††ÿˆˆˆÿŒŒŒÿ���ÿ”””ÿ���ÿ°°°ÿ¡¡¡ÿ“““ÿnnn™@+ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÁÁÁÿ§§§ÿ’’’ÿ………ÿ~~~ÿ{{{ÿyyyÿwwwÿwwwÿvvvÿwwwÿxxxÿzzzÿ|||ÿ~~~ÿ€€€ÿƒƒƒÿ‡‡‡ÿ›››ÿ²²²ÿ­­­ÿŸŸŸÿ•••ÿoooŸC- :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÏÏÏÿ¿¿¿ÿ¥¥¥ÿ���ÿ‚‚‚ÿ€€€ÿ‡‡‡ÿ‡‡‡ÿ���ÿ‹‹‹ÿ‹‹‹ÿ”””ÿ———ÿ˜˜˜ÿ   ÿ§§§ÿ±±±ÿºººÿÁÁÁÿ¹¹¹ÿ­­­ÿ   ÿ–––ÿrrr¤F. :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ———ÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿæææÿâââÿÜÜÜÿÕÕÕÿÌÌÌÿÄÄÄÿºººÿ®®®ÿ¢¢¢ÿ———ÿwww­G/ :WÓÓÓú×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ”””ÿîîîÿîîîÿîîîÿíííÿêêêÿçççÿâââÿÜÜÜÿÕÕÕÿÎÎÎÿÅÅÅÿ»»»ÿ¯¯¯ÿ£££ÿ———ÿzzz¯I0 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ“““ÿîîîÿîîîÿíííÿëëëÿçççÿâââÿÜÜÜÿ×××ÿÏÏÏÿÆÆÆÿ»»»ÿ°°°ÿ¤¤¤ÿ™™™ÿ¹J1 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¤¤¤ÿŽŽŽÿ‚‚‚ÿ’’’ÿîîîÿîîîÿêêêÿçççÿãããÿÞÞÞÿ×××ÿÏÏÏÿÇÇÇÿ¼¼¼ÿ±±±ÿ¦¦¦ÿ›››ÿ€€€»L3 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿƒƒƒÿ‘‘‘ÿîîîÿêêêÿèèèÿäääÿÞÞÞÿØØØÿÑÑÑÿÇÇÇÿ½½½ÿ³³³ÿ§§§ÿ›››ÿ‚‚‚¿M4  :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿìììÿèèèÿäääÿßßßÿÙÙÙÿÒÒÒÿÈÈÈÿ¿¿¿ÿ´´´ÿ¨¨¨ÿ›››ÿ‡‡‡ÆN5   :WÒÒÒúÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿèèèÿåååÿàààÿÚÚÚÿÑÑÑÿÊÊÊÿÀÀÀÿµµµÿªªªÿ���ÿ‹‹‹ÈO5!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¤¤¤ÿ‘‘‘ÿ………ÿ���ÿåååÿàààÿÚÚÚÿÓÓÓÿÊÊÊÿÁÁÁÿ···ÿ«««ÿžžžÿŒŒŒÌP6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÌÌÌÿ¾¾¾ÿ¤¤¤ÿ‘‘‘ÿ†††ÿ’’’ÿáááÿÚÚÚÿÓÓÓÿËËËÿÂÂÂÿ¸¸¸ÿ¬¬¬ÿŸŸŸÿ���ÒQ6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÒÒÒÿËËËÿ¼¼¼ÿ£££ÿ’’’ÿˆˆˆÿšššÿÛÛÛÿÔÔÔÿÍÍÍÿÃÃÃÿ¹¹¹ÿ®®®ÿ¢¢¢ÿ“““ÕQ6"  :WÑÑÑúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÒÒÒÿÊÊÊÿ»»»ÿ¢¢¢ÿ’’’ÿŠŠŠÿ¡¡¡ÿÕÕÕÿÍÍÍÿÄÄÄÿ»»»ÿ®®®ÿ¢¢¢ÿ•••ØQ8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÑÑÑÿÉÉÉÿ¹¹¹ÿ¡¡¡ÿ“““ÿ‹‹‹ÿ±±±ÿÎÎÎÿÆÆÆÿ¼¼¼ÿ¯¯¯ÿ£££ÿ™™™ÝR8$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÐÐÐÿÇÇÇÿµµµÿ   ÿ“““ÿ���ÿ»»»ÿÇÇÇÿ»»»ÿ±±±ÿ¥¥¥ÿšššßR7$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÍÍÍÿÃÃÃÿ²²²ÿŸŸŸÿ•••ÿ‘‘‘ÿÃÃÃÿ½½½ÿ²²²ÿ¦¦¦ÿ›››âS8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÀÀÀÿ¯¯¯ÿŸŸŸÿ———ÿ¡¡¡ÿ¾¾¾ÿ³³³ÿ§§§ÿŸŸŸåS9#  :WÐÐÐúÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÓÓÓÿÑÑÑÿÉÉÉÿ½½½ÿ¬¬¬ÿ   ÿ›››ÿ···ÿ´´´ÿ©©©ÿ   éR9$  :VÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÏÏÏÿÇÇÇÿ¹¹¹ÿªªªÿ¢¢¢ÿ¢¢¢ÿ···ÿªªªÿ¢¢¢êU9$  8TÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÃÃÃÿµµµÿªªªÿ¥¥¥ÿµµµÿ«««ÿ¥¥¥ïT9$ 6QÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÊÊÊÿÀÀÀÿ´´´ÿ¬¬¬ÿ­­­ÿ±±±ÿ¨¨¨ïT9% 2KÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿ¿¿¿ÿµµµÿ²²²ÿ¸¸¸ÿ¨¨¨ñ U9%  ,BÐÐÐùÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿÀÀÀÿ¹¹¹ÿ»»»ÿ«««ñU9%  $6ÑÑÑøÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿËËËÿÃÃÃÿ¿¿¿ÿ­­­êR7% )ÒÒÒ÷ÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÒÒÒÿÑÑÑÿÐÐÐÿÌÌÌÿÇÇÇÿ¯¯¯Ö$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ÿÿþÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþ?ÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþ?ÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÿatomes_1.3.1/metadata/fr.ipcms.atomes.appdata.xml0000664000175000017500000002745015212624223021440 0ustar lerouxleroux fr.ipcms.atomes atomes An atomic scale modeling toolbox Une boite à outils pour la modélisation à l'échelle atomique FSFAP AGPL-3.0-or-later

atomes: a toolbox to analyze, to visualize and to create/edit 3D atomic scale models. The software interface offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates...

atomes: une boîte à outils pour analyser, visualiser et créer/éditer des modèles 3D à l'échelle atomique. L'interface du logiciel offre un espace de travail qui permet d'avoir plusieurs projets ouvert simultanément. Les différents projets de l'espace de travail peuvent échanger des données: résultats d'analyses, coordonnées atomiques...

atomes also provides an advanced input preparation system for further calculations using well known Molecular Dynamics codes:

atomes propose également un système avancé de préparation de fichiers d'entrée pour des calculs externes avec des codes de Dynamique Moléculaire bien connus:

  • Classical MD: DLPOLY and LAMMPS
  • ab-initio MD: CPMD and CP2K
  • Hybrid MD (QM-MM): CPMD and CP2K
  • DM classique: DLPOLY et LAMMPS
  • DM ab-initio: CPMD et CP2K
  • DM hybride (QM-MM): CPMD et CP2K

To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step.

Préparer les fichiers d'entrée pour ces calculs est généralement le point clef, et l'étape la plus complexe pour réaliser des calculs de DM. atomes propose des assistants à l'interface utilisateur conviviale pour aider et guider le scientifique pas à pas pour réaliser cette étape cruciale.

atomes.desktop A powerful program for 3D atomic scale modeling Overview of the atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/atomes-16-9.png Physico-chemical analysis in the atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/calc-16-9.png Visualization tools in the atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/Ni-Phth-16-9.png https://atomes.ipcms.fr/ https://github.com/Slookeur/atomes/issues/new/choose Dr. Sébastien Le Roux atomes_AT_ipcms.unistra.fr atomes.desktop chemistry physics atom molecule crystal coordination polyhedra measure volume builder material chimie physique atome molécule cristal coordination polyhèdre mesure volume constructeur matériau química física átomo molécula cristal ccoordinación poliedro medida volumen constructor material

Release of version 1.3.1:

- Bug correction, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.1

Release of version 1.3.0:

- New features, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0

- Bug correction, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0

Release of version 1.2.1:

- Bug correction, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.1

Release of version 1.2.0:

- New features, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.0

Release of version 1.1.18:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.18

Release of version 1.1.17:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.17

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.17

Release of version 1.1.16:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.16

Release of version 1.1.15:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.15

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.15

Release of version 1.1.14:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14

Release of version 1.1.13:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.13

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.13

Release of version 1.1.12:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.12

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.12

Release of version 1.1.11:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.11

Release of version 1.1.10:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.10

Release of version 1.1.9:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.9

Release of version 1.1.8:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.8

Release of version 1.1.7:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.7

Release of version 1.1.6:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.6

Release of version 1.1.5:

- Bug correction:

  • w_search.c: selection not to crash if atom_win is closed

Release of version 1.1.4:

- Bug corrections:

  • read_coord.c: Windows to handle properly EOL symbols
  • m_curve.c: Windows to not crash when destroying label widget
  • glview.c: correct GWARNING messages on widget scale

Release of version 1.1.3:

- Bug corrections:

  • read_opengl.c: correct 'read_atom_b'
  • initring.c: correct 'send_rings_opengl_'

Release of version 1.1.2:

- Bug corrections:

  • atom_action.c: recompute bonding on passivate
  • bdcall.c: do not trigger menu init on passivate

Release of version 1.1.1:

- Bug correction:

  • workspace.c: double click on workspace

Initial release of the atomes program v1.1.0 !

atomes_1.3.1/metadata/atomes-mime.xml0000664000175000017500000000504615212624223017231 0ustar lerouxleroux atomes Workspace atomes Project I.S.A.A.C.S. project file XYZ atomic coordinates Protein Data Bank file Protein Data Bank file Crystallographic information CPMD trajectory VASP trajectory Chem3D atomic coordinates DL-POLY History file atomes_1.3.1/CONTRIBUTING.md0000664000175000017500000000164415212624223014743 0ustar lerouxleroux# How to contribute to atomes [atomes][atomes] development relies on voluntary contributions and everyone is invited to help. If your are interested in helping to improve [atomes][atomes] you are welcome to contact the developper(s): [https://atomes.ipcms.fr/about/](https://atomes.ipcms.fr/about/) ## Software development To get started with [atomes][atomes] development give a look to the [DEVELOPER.md](./DEVELOPER.md) file. ## Contributions other than software development There are many possible task: - Translate in your native language - Testing the features, reporting any bugs you find. - Improving the documentation. - Graphics design. - Sharing news and tips about [atomes][atomes] in your native language / local community. - Etc ## Bug tracking: - Bugs should be filled on the GitHub issue tracker: [issue](https://github.com/Slookeur/atomes-GNU/issues) [atomes]:https://atomes.ipcms.fr/ atomes_1.3.1/src/0000775000175000017500000000000015212624223013274 5ustar lerouxlerouxatomes_1.3.1/src/project/0000775000175000017500000000000015212624223014742 5ustar lerouxlerouxatomes_1.3.1/src/project/save_bond.c0000664000175000017500000001072015212624223017046 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_bond.c * @short Functions to save bonding information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_bond.c' * * Contains: * - The functions to save bonding information in the atomes project file format * * List of functions: int save_bonding (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" /*! \fn int save_bonding (FILE * fp, project * this_proj) \brief save bonding information to file \param fp the file pointer \param this_proj the target project */ int save_bonding (FILE * fp, project * this_proj) { int i, j, k; image * img = this_proj -> modelgl -> anim -> last -> img; if (! this_proj -> modelgl -> bonding || ! this_proj -> modelgl -> adv_bonding[1] || this_proj -> natomes > ATOM_LIMIT || this_proj -> steps > STEP_LIMIT) { for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fwrite (this_proj -> atoms[i][j].coord, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fwrite (& this_proj -> atoms[i][j].numv, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (this_proj -> atoms[i][j].numv) { if (fwrite (this_proj -> atoms[i][j].vois, sizeof(int), this_proj -> atoms[i][j].numv, fp) != this_proj -> atoms[i][j].numv) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } if (fwrite (this_proj -> modelgl -> bonds[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); for (j=0; j<2; j++) { for (k=0; k modelgl -> bonds[i][j]; k++) { if (fwrite (this_proj -> modelgl -> bondid[i][j][k], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } coord_info * coord = this_proj -> coord; for (i=0; i<2; i++) { if (fwrite (coord -> ntg[i], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); for (j=0; j species; j++) { if (fwrite (coord -> geolist[i][j], sizeof(int), coord -> ntg[i][j], fp) != coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i == 1) { for (k=0; k ntg[i][j]; k++) { if (fwrite (coord -> partial_geo[j][k], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } } } for (i=0; i<10; i++) { if (fwrite (& this_proj -> coord -> totcoord[i], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2) { if (fwrite (img -> show_atom[i], sizeof(gboolean), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fwrite (img -> show_label[i], sizeof(gboolean), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } if (this_proj -> coord -> totcoord[i]) { if (fwrite (img -> show_coord[i], sizeof(gboolean), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2 || (i > 3 && i < 9)) { if (fwrite (img -> show_poly[i], sizeof(gboolean), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } return OK; } atomes_1.3.1/src/project/close_p.c0000664000175000017500000003450115212624223016535 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file close_p.c * @short Functions to close an atomes project \n Callbacks to close an atomes project * @author Sébastien Le Roux */ /* * This file: 'close_p.c' * * Contains: * - the functions to close an atomes project - the callbacks to close an atomes project * * List of functions: glwin * free_glwin (project * to_close, glwin * to_clow); void update_insert_combos (); void close_project (project * to_close); void to_close_this_project (int to_activate, project * this_proj); G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "curve.h" #include "glview.h" extern GtkTreeStore * tool_model; extern GtkTreeModel * replace_combo_tree (gboolean insert, int proj); extern G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); extern void clean_animation (project * proj, glwin * view); extern void free_glwin_spec_data (project * this_proj, int spec); /*! \fn void update_insert_combos () \brief update some GtkComboBox in the workspace if a project is removed */ void update_insert_combos () { GtkTreeModel * model; project * this_proj; GtkWidget * box; int i; for (i=0; i modelgl) { if ((this_proj -> modelgl -> atom_win && this_proj -> modelgl -> atom_win -> visible) || this_proj -> modelgl -> builder_win) { model = replace_combo_tree (TRUE, i); box = (this_proj -> modelgl -> builder_win) ? this_proj -> modelgl -> builder_win -> add_combo : this_proj -> modelgl -> atom_win -> atom_combo[3]; gtk_combo_box_set_model (GTK_COMBO_BOX(box), model); combo_set_active (box, 0); combo_set_markup (box); g_object_unref (model); } } } } /*! \fn glwin * free_glwin (project * to_close, glwin * to_clow) \brief free all memory related to a gliwn data structure \param to_close the target project \param to_clow the target gliwn to free */ glwin * free_glwin (project * to_close, glwin * to_clow) { int i, j, k; if (to_clow -> color_to_pick != NULL) { g_free (to_clow -> color_to_pick); to_clow -> color_to_pick = NULL; } #ifdef GTK3 for (i=0; i<2; i++) { g_free (to_clow -> ogl_box_axis[i]); for (j=0; j<10; j++) { if (to_clow -> ogl_geom[i][j]) g_free (to_clow -> ogl_geom[i][j]); if (to_clow -> oglmv[i][j]) g_free (to_clow -> oglmv[i][j]); if (j < 9) { if (to_clow -> ogl_poly[i][j]) g_free (to_clow -> ogl_poly[i][j]); if (to_clow -> oglmc[i][j]) g_free (to_clow -> oglmc[i][j]); } } } #endif for (i=0; i<10; i++) { if (to_clow -> gcid[i]) { for (j=0; j < to_close -> coord -> totcoord[i]; j++) { if (to_clow -> gcid[i][j]) { g_free (to_clow -> gcid[i][j]); } } g_free (to_clow -> gcid[i]); } } for (i=0; i steps; i++) { if (to_clow -> bondid[i]) { for (j=0; j<2; j++) { if (to_clow -> bondid[i][j]) { for (k=0; k bonds[i][j]; k++) { if (to_clow -> bondid[i][j][k]) g_free(to_clow -> bondid[i][j][k]); } g_free(to_clow -> bondid[i][j]); } } g_free(to_clow -> bondid[i]); } if (to_clow -> clones[i]) g_free(to_clow -> clones[i]); } if (to_clow -> bondid) g_free(to_clow -> bondid); if (to_clow -> clones) g_free(to_clow -> clones); free_glwin_spec_data (to_close, to_close -> nspec); if (to_clow -> rep_win) { to_clow -> rep_win -> win = destroy_this_widget (to_clow -> rep_win -> win); g_free (to_clow -> rep_win); } if (to_clow -> gradient_win) { to_clow -> gradient_win -> win = destroy_this_widget (to_clow -> gradient_win -> win); g_free (to_clow -> gradient_win); } if (to_clow -> box_win) { to_clow -> box_win -> win = destroy_this_widget (to_clow -> box_win -> win); g_free (to_clow -> box_win); } if (to_clow -> axis_win) { to_clow -> axis_win -> win = destroy_this_widget (to_clow -> axis_win -> win); g_free (to_clow -> axis_win); } if (to_clow -> measure_win) { to_clow -> measure_win -> win = destroy_this_widget (to_clow -> measure_win -> win); g_free (to_clow -> measure_win); } if (to_clow -> volume_win) { to_clow -> volume_win -> win = destroy_this_widget (to_clow -> volume_win -> win); g_free (to_clow -> volume_win); } if (to_clow -> player) { to_clow -> player -> win = destroy_this_widget (to_clow -> player -> win); g_free (to_clow -> player); } // Stop the spinning if any spin_stop (NULL, to_clow); if (to_clow -> spiner) { to_clow -> spiner -> win = destroy_this_widget (to_clow -> spiner -> win); g_free (to_clow -> spiner); } if (to_clow -> rec) { to_clow -> rec -> win = destroy_this_widget (to_clow -> rec -> win); g_free (to_clow -> rec); } if (to_clow -> atom_win) { to_clow -> atom_win -> win = destroy_this_widget (to_clow -> atom_win -> win); g_free (to_clow -> atom_win); } if (to_clow -> cell_win) { to_clow -> cell_win -> win = destroy_this_widget (to_clow -> cell_win -> win); g_free (to_clow -> cell_win); } if (to_clow -> builder_win) { to_clow -> builder_win -> win = destroy_this_widget (to_clow -> builder_win -> win); g_free (to_clow -> builder_win); } if (to_clow -> coord_win) { to_clow -> coord_win -> win = destroy_this_widget (to_clow -> coord_win -> win); g_free (to_clow -> coord_win); } for (i=0; i<2; i++) { if (to_clow -> model_win[i]) { to_clow -> model_win[i] -> win = destroy_this_widget (to_clow -> model_win[i] -> win); g_free (to_clow -> model_win[i]); } } if (to_clow -> opengl_win) { to_clow -> opengl_win -> win = destroy_this_widget (to_clow -> opengl_win -> win); g_free (to_clow -> opengl_win); } to_clow -> win = destroy_this_widget (to_clow -> win); for (i=0; i ogl_glsl[i]); g_free (to_clow -> n_shaders[i]); } clean_animation (to_close, to_clow); g_free (to_clow); return NULL; } /*! \fn void close_project (project * to_close) \brief close a project \param to_close the project to close */ void close_project (project * to_close) { int i, j, k, l; #ifdef DEBUG g_debug ("CLOSE_PROJECT: proj to close= %d", to_close -> id); g_debug ("CLOSE_PROJECT: nprojects = %d", nprojects); g_debug ("CLOSE_PROJECT: activep = %d", activep); if (to_close -> pixels) { for (i=0; i pix[0]*active_project -> pix[1]*active_project -> pix[2]; i++) { g_free (to_close -> pixels[i]); } g_free (to_close -> pixels); } #endif if (to_close -> modelgl) { to_close -> modelgl = free_glwin (to_close, to_close -> modelgl); if (to_close -> modelfc) { if (to_close -> modelfc -> mols) { for (i=0; i< to_close -> steps; i++) { if (to_close -> modelfc -> mols[i]) { for (j=0; j modelfc -> mol_by_step[i]; j++) { g_free (to_close -> modelfc -> mols[i][j].fragments); g_free (to_close -> modelfc -> mols[i][j].species); } g_free (to_close -> modelfc -> mols[i]); } } g_free (to_close -> modelfc -> mols); } } } if (to_close -> atoms) { for (i=0; i steps; i++) { for (j=0; j natomes; j++) { g_free (to_close -> atoms[i][j].vois); } if (to_close -> atoms[i]) g_free (to_close -> atoms[i]); } g_free (to_close -> atoms); } if (to_close -> cell.box) g_free (to_close -> cell.box); if (to_close -> cell.sp_group) g_free (to_close -> cell.sp_group); if (to_close -> run) { if (to_close -> analysis) { for (i=0 ; i analysis[i]) { to_close -> analysis[i] -> calc_ok = FALSE; if (to_close -> analysis[i] -> name) g_free (to_close -> analysis[i] -> name); if (to_close -> analysis[i] -> x_title) g_free (to_close -> analysis[i] -> x_title); if (to_close -> analysis[i] -> compat_id) g_free (to_close -> analysis[i] -> compat_id); if (to_close -> analysis[i] -> curves) { hide_curves (to_close, i); erase_curves (to_close, i); g_free (to_close -> analysis[i] -> idcc); g_free (to_close -> analysis[i] -> curves); } g_free (to_close -> analysis[i]); } } g_free (to_close -> analysis); } } if (! atomes_render_image) clean_view (); g_free (to_close -> projfile); if (nprojects > 1) { if (to_close == workzone.first) { workzone.first = workzone.first -> next; workzone.first -> prev = NULL; } else if (to_close == workzone.last) { workzone.last = workzone.last -> prev; workzone.last -> next = NULL; } else { to_close -> prev -> next = to_close -> next; to_close -> next -> prev = to_close -> prev; } } else if (! atomes_render_image) { // if (workzone.first) g_free (workzone.first); workzone.first = NULL; // if (workzone.last) g_free (workzone.last); workzone.last = NULL; activep = -1; correct_this_window_title (MainWindow, g_strdup_printf ("%s", PACKAGE)); correct_this_window_title (curvetoolbox, g_strdup_printf (_("Toolboxes"))); if (workspacefile != NULL) { g_free (workspacefile); workspacefile = NULL; } newspace = TRUE; } g_free (to_close); nprojects --; if (nprojects) { project * this_proj = workzone.first; for (i=0 ; i id = i; if (this_proj -> initgl && this_proj -> modelgl) { this_proj -> modelgl -> proj = i; for (j=0; j nspec*2; k++) { this_proj -> modelgl -> colorp[j][k].a = i; } } for (j=0; j<10; j++) { if (this_proj -> modelgl -> gcid[j] != NULL) { for (k=0; k coord -> totcoord[j]; k++) { for (l=0; l modelgl -> gcid[j][k][l].a = i; } } } } if (this_proj -> modelgl -> atom_win) { for (j=0; j<8; j++) { if (this_proj -> modelgl -> search_widg[j]) { for (k=0; k<3; k++) this_proj -> modelgl -> search_widg[j] -> pointer[k].a = i; } } } } if (this_proj -> analysis) { for (j=0; j analysis[j]) { if (this_proj -> analysis[j] -> idcc != NULL) { for (k=0; k analysis[j] -> numc; k++) { this_proj -> analysis[j] -> idcc[k].a = i; } } } } } if (this_proj -> next != NULL) this_proj = this_proj -> next; } this_proj = workzone.first; for (i=0 ; i id = i; if (this_proj -> analysis) { for (j=0; j analysis[j]) { for (k=0; k analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> window) { curve_window_add_menu_bar (& this_proj -> analysis[j] -> idcc[k]); if (is_the_widget_visible(this_proj -> analysis[j] -> curves[k] -> plot)) { gtk_widget_queue_draw (this_proj -> analysis[j] -> curves[k] -> plot); } } } } } } if (this_proj -> next != NULL) this_proj = this_proj -> next; } } if (! atomes_render_image) update_insert_combos (); } /*! \fn void to_close_this_project (int to_activate, project * this_proj) \brief to close this project \param to_activate If the workspace is not empty, activate first another project \param this_proj the target project */ void to_close_this_project (int to_activate, project * this_proj) { if (nprojects > 0) close_project (this_proj); if (nprojects > 0) { int new_p = (to_activate >= nprojects) ? nprojects - 1 : to_activate; activate_project (NULL, GINT_TO_POINTER(new_p)); } else if (! atomes_render_image || atomes_from_libreoffice) { remove_edition_and_analyze_actions (); active_project = NULL; fill_tool_model (); } } /*! \fn G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) \brief signal to close a project \param widg the GtkWidget sending the signal \param cdata the associated data pointer */ G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) { if (nprojects > 0) { int i = GPOINTER_TO_INT(cdata); int j = activep; if (j >= i && j > 0) j--; gtk_tree_store_clear (tool_model); remove_project_from_workspace (i); close_project (get_project_by_id(i)); if (nprojects > 0) { activate_project (NULL, GINT_TO_POINTER(j)); } else { remove_edition_and_analyze_actions (); active_project = NULL; fill_tool_model (); } } else { show_warning (_("No project to be closed"), MainWindow); } } atomes_1.3.1/src/project/read_curve.c0000664000175000017500000003277015212624223017236 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_curve.c * @short Functions to read curve data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_curve.c' * * Contains: * - The functions to read curve data in the atomes project file format * * List of functions: int read_data_layout (FILE * fp, DataLayout * layout); int read_project_curve (FILE * fp, int wid, int pid); */ #include "global.h" #include "project.h" extern gboolean version_2_9_and_above; // Project reading flag, required for project files < v2.9 gboolean reading_project = FALSE; /*! \fn int read_data_layout (FILE * fp, DataLayout * layout) \brief read data layout from file \param fp the file pointer \param layout the data layout to store the data */ int read_data_layout (FILE * fp, DataLayout * layout) { if (fread (& layout -> datacolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> glyph, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> gsize, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> gfreq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> hwidth, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> hopac, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> hpos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> aspect, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); return OK; } /*! \fn int read_project_curve (FILE * fp, int wid, int pid) \brief read a project curve from file \param fp the file pointer \param wid reading workspace (1/0) \param pid the active project id */ int read_project_curve (FILE * fp, int wid, int pid) { int i, j; int rid, cid; if (! version_2_9_and_above && ! reading_project) { if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } project * this_proj = get_project_by_id (pid); if (fread (& rid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& cid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; if (version_2_9_and_above) { // curve name can be NULL, so do not test for emptyness this_curve -> name = read_this_string (fp); } if (fread (& this_curve -> displayed, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> ndata, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> data[0] = allocdouble (this_curve -> ndata); if (fread (this_curve -> data[0], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> data[1] = allocdouble (this_curve -> ndata); if (fread (this_curve -> data[1], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (i) { this_curve -> err = allocdouble (this_curve -> ndata); if (fread (this_curve -> err, sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (this_curve -> displayed) { if (fread (this_curve -> wsize, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> cmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> cmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Title if (fread (& this_curve -> show_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> default_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (! this_curve -> default_title) { this_curve -> title = read_this_string (fp); if (this_curve -> title == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fread (this_curve -> title_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> title_font = read_this_string (fp); if (this_curve -> title_font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> title_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Axis if (fread (this_curve -> axmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> axmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { this_curve -> axis_title[j] = read_this_string (fp); if (this_curve -> axis_title[j] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> axis_title_font[j] = read_this_string (fp); if (this_curve -> axis_title_font[j] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fread (this_curve -> axis_title_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> axis_title_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> scale, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> axis_defaut_title, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> autoscale, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> majt, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> mint, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> ticks_io, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> ticks_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> majt_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> mint_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_digit, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { this_curve -> labels_font[j] = read_this_string (fp); if (this_curve -> labels_font[j] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fread (this_curve -> labels_angle, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_shift_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_shift_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> show_grid, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> show_axis, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Legend if (fread (& this_curve -> show_legend, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> legend_font = read_this_string (fp); if (this_curve -> legend_font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> legend_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> show_legend_box, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_box_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_box_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_box_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Frame if (fread (& this_curve -> show_frame, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> frame_pos, sizeof(this_curve -> frame_pos), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Data this_curve -> layout = g_malloc0(sizeof*this_curve -> layout); if (read_data_layout (fp, this_curve -> layout) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } if (fread (& this_curve -> draw_id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> bshift, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> extrac = g_malloc0(sizeof*this_curve -> extrac); if (fread (& this_curve -> extrac -> extras, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (this_curve -> extrac -> extras > 0) { this_curve -> extrac -> first = g_malloc0(sizeof*this_curve -> extrac -> first); this_curve -> extrac -> last = g_malloc0(sizeof*this_curve -> extrac -> last); CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0; i extrac -> extras; i++) { if (fread (& ctmp -> id.a, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (! wid) ctmp -> id.a += (nprojects - 1); if (fread (& ctmp -> id.b, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& ctmp -> id.c, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); ctmp -> layout = g_malloc0(sizeof*ctmp -> layout); if (read_data_layout (fp, ctmp -> layout) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } if (i < this_curve -> extrac -> extras - 1) { ctmp -> next = g_malloc0(sizeof*ctmp -> next); ctmp -> next -> prev = ctmp; ctmp = ctmp -> next; } else if (i == this_curve -> extrac -> extras - 1) { this_curve -> extrac -> last = ctmp; } } } this_curve -> cfile = read_this_string (fp); } #ifdef DEBUG // debugiocurve (this_proj, FALSE, rid, cid, "READ"); #endif return OK; } atomes_1.3.1/src/project/save_mol.c0000664000175000017500000001342315212624223016716 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_mol.c * @short Functions to save molecules information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_mol.c' * * Contains: * - The functions to save molecules information in the atomes project file format * * List of functions: int save_atom_m (FILE * fp, project * this_proj, int s, int a); int save_this_mol (FILE * fp, project * this_proj, molecule * tmp); int save_mol (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" /*molecule { int id; // Molecule id number int md; // MD step int multiplicity; // Multiplicity int * fragments; // Fragments list int natoms; // Number of atoms int nspec; // Number of chemical species int * species; // Number of atom by species atom ** atoms; // The list of all atoms int nbonds; // Number of chemical bonds int ** pbonds; // Number of chemical bonds by geometries int nangles; // Number of bond angles int *** pangles; // Number of bond angles by geometries int ** lgeo; // list of coordination spheres (by species) molecule * next; molecule * prev; };*/ /*! \fn int save_atom_m (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_m (FILE * fp, project * this_proj, int s, int a) { if (fwrite (& this_proj -> atoms[s][a].coord[2], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& this_proj -> atoms[s][a].coord[3], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); return OK; } /*! \fn int save_this_mol (FILE * fp, project * this_proj, molecule * tmp) \brief save this molecule data to file \param fp the file pointer \param this_proj the target project \param tmp the molecule that contains the data */ int save_this_mol (FILE * fp, project * this_proj, molecule * tmp) { if (fwrite (& tmp -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& tmp -> md, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL));; if (fwrite (& tmp -> multiplicity, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (tmp -> fragments, sizeof(int), tmp -> multiplicity, fp) != tmp -> multiplicity) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& tmp -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& tmp -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (tmp -> species, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); return OK; } /*! \fn int save_mol (FILE * fp, project * this_proj) \brief save molecule information to file \param fp the file pointer \param this_proj the target project */ int save_mol (FILE * fp, project * this_proj) { int i, j; i = 0; if (! this_proj -> modelfc) { if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); for (i=1; i<4; i++) { if (fwrite (& this_proj -> coord -> totcoord[i], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); } if (fwrite (this_proj -> modelfc -> mol_by_step, sizeof(int), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); for (i=0; i steps; i++) { for (j=0; j modelfc -> mol_by_step[i]; j++) { if (save_this_mol (fp, this_proj, & this_proj -> modelfc -> mols[i][j]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (save_atom_m (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } return OK; } atomes_1.3.1/src/project/save_field.c0000664000175000017500000005760615212624223017225 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_field.c * @short Functions to save force field information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_field.c' * * Contains: * - The functions to save force field information in the atomes project file format * * List of functions: int save_field_atom (FILE * fp); int save_field_shell (FILE * fp); int save_field_constraint (FILE * fp); int save_field_pmf (FILE * fp); int save_field_rigid (FILE * fp); int save_field_tethered (FILE * fp, int fid); int save_field_prop (FILE * fp, int fid, int pid); int save_field_struct (FILE * fp, int fid); int save_field_molecule (FILE * fp, int fid); int save_field_body (FILE * fp, int fid); int save_field_external (FILE * fp, int fid); int save_dlp_field_data (FILE * fp, project * this_proj); int save_lmp_field_data (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /* typedef struct field field struct field { gboolean prepare_file[2]; // Field and Config files gboolean afp[MAXDATC+MAXDATA]; int type; int energy_unit; int atom_init; int molecules; field_molecule * first_molecule; int nbody[5]; field_nth_body * first_body[5]; // Tersoff potential cross terms double ** cross; int extern_fields; field_external * first_external; // Control file double sys_opts[17]; double io_opts[23]; double ana_opts[17]; double elec_opts[11]; double vdw_opts[6]; double met_opts[2]; double equi_opts[17]; int ensemble; int thermostat; double thermo_opts[10]; double md_opts[20]; double out_opts[31]; }; */ /*! \fn int save_field_atom (FILE * fp) \brief save field atom data to file \param fp the file pointer */ int save_field_atom (FILE * fp) { if (fwrite (& tmp_fat -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> fid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> afid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (save_this_string (fp, tmp_fat -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> mass, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> charge, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> frozen, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fat -> frozen_id, sizeof(gboolean), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fat -> list, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fat -> list_id, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_shell (FILE * fp) \brief save field core shell data to file \param fp the file pointer */ int save_field_shell (FILE * fp) { if (fwrite (& tmp_fshell -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fshell -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> m, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> z, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> k2, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> k4, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> vdw, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_constraint (FILE * fp) \brief save field constraint data to file \param fp the file pointer */ int save_field_constraint (FILE * fp) { if (fwrite (& tmp_fcons -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fcons -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_pmf (FILE * fp) \brief save field mean force potential data to file \param fp the file pointer */ int save_field_pmf (FILE * fp) { if (fwrite (& tmp_fpmf -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fpmf -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fpmf -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fpmf -> num, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i<2; i++) { if (fwrite (tmp_fpmf -> list[i], sizeof(int), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fpmf -> weight[i], sizeof(float), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fwrite (& tmp_fpmf -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fpmf -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_rigid (FILE * fp) \brief save field rigid constraints data to file \param fp the file pointer */ int save_field_rigid (FILE * fp) { if (fwrite (& tmp_frig -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_frig -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_frig -> list, sizeof(int), tmp_frig -> num, fp) != tmp_frig -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_frig -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_frig -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_tethered (FILE * fp, int fid) \brief save field tethered data to file \param fp the file pointer \param fid */ int save_field_tethered (FILE * fp, int fid) { if (fwrite (& tmp_ftet -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][0][tmp_ftet -> key]; if (fwrite (tmp_ftet -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_prop (FILE * fp, int fid, int pid) \brief save field property data to file \param fp the file pointer \param fid the field id \param pid the property id */ int save_field_prop (FILE * fp, int fid, int pid) { if (fwrite (& tmp_fprop -> pid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> fpid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = struct_id(pid+7); if (fwrite (tmp_fprop -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); i = fvalues[fid][pid+1][tmp_fprop -> key]; if (fwrite (tmp_fprop -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_struct (FILE * fp, int fid) \brief save field structural properties to file \param fp the file pointer \param fid the field id */ int save_field_struct (FILE * fp, int fid) { if (fwrite (& tmp_fstr -> st, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fstr -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fstr -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = struct_id(tmp_fstr -> st + 7); if (fwrite (tmp_fstr -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fstr-> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fprop = tmp_fstr -> def; if (save_field_prop(fp, fid, tmp_fstr -> st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fprop = tmp_fstr -> other; i = 0; while (tmp_fprop) { i ++; tmp_fprop = tmp_fprop -> next; } if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (save_field_prop(fp, fid, tmp_fstr -> st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fprop = tmp_fprop -> next; } } return OK; } /*! \fn int save_field_molecule (FILE * fp, int fid) \brief save field molecule data to file \param fp the file pointer \param fid the field id */ int save_field_molecule (FILE * fp, int fid) { if (fwrite (& tmp_fmol -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fmol -> mol -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (save_this_string (fp, tmp_fmol -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fmol -> multi, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fmol -> fragments, sizeof(int), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i mol -> natoms; i++) { if (fwrite (tmp_fmol -> atoms_id[i], sizeof(dint), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fwrite (& tmp_fmol -> atoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (save_field_atom(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fat = tmp_fat -> next; } if (fwrite (& tmp_fmol -> shells, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fshell = tmp_fmol -> first_shell; while (tmp_fshell) { if (save_field_shell(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fshell = tmp_fshell -> next; } if (fwrite (& tmp_fmol -> constraints, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fcons = tmp_fmol -> first_constraint; while (tmp_fcons) { if (save_field_constraint(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fcons = tmp_fcons -> next; } if (fwrite (& tmp_fmol -> pmfs, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fpmf = tmp_fmol -> first_pmf; while (tmp_fpmf) { if (save_field_pmf(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fpmf = tmp_fpmf -> next; } if (fwrite (& tmp_fmol -> rigids, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_frig = tmp_fmol -> first_rigid; while (tmp_frig) { if (save_field_rigid(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_frig = tmp_frig -> next; } if (fwrite (& tmp_fmol -> tethered, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_ftet = tmp_fmol -> first_tethered; while (tmp_ftet) { if (save_field_tethered(fp, fid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_ftet = tmp_ftet -> next; } if (fwrite (tmp_fmol -> nstruct, sizeof(int), 8, fp) != 8) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<8; i++) { tmp_fstr = tmp_fmol -> first_struct[i]; while (tmp_fstr) { if (save_field_struct (fp, fid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fstr = tmp_fstr -> next; } } return OK; } /*! \fn int save_field_body (FILE * fp, int fid) \brief save field nth body data to file \param fp the file pointer \param fid the field id */ int save_field_body (FILE * fp, int fid) { if (fwrite (& tmp_fbody -> bd, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fbody -> bd == 0) if (fwrite (tmp_fbody -> fpid, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fbody -> na, sizeof(int), body_at(tmp_fbody -> bd), fp) != body_at(tmp_fbody -> bd)) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i bd); i++) { if (fwrite (tmp_fbody -> ma[i], sizeof(int), tmp_fbody -> na[i], fp) != tmp_fbody -> na[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fbody -> a[i], sizeof(int), tmp_fbody -> na[i], fp) != tmp_fbody -> na[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } i = fvalues[fid][9+tmp_fbody -> bd][tmp_fbody -> key]; if (fwrite (tmp_fbody -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_external (FILE * fp, int fid) \brief save field external data to file \param fp the file pointer \param fid the field id */ int save_field_external (FILE * fp, int fid) { if (fwrite (& tmp_fext -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fext -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][14][tmp_fext -> key]; if (fwrite (tmp_fext -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fext -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_dlp_field_data (FILE * fp, project * this_proj) \brief save force field data to file \param fp the file pointer \param this_proj the target project */ int save_dlp_field_data (FILE * fp, project * this_proj) { int i, j; if (this_proj -> force_field[0] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // CONTROL file if (fwrite (this_proj -> force_field[0] -> sys_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> io_opts, sizeof(double), 23, fp) != 23) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> ana_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> elec_opts, sizeof(double), 11, fp) != 11) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> vdw_opts, sizeof(double), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> met_opts, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> equi_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> ensemble, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> thermostat, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> thermo_opts, sizeof(double), 10, fp) != 10) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> md_opts, sizeof(double), 20, fp) != 20) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> out_opts, sizeof(double), 31, fp) != 31) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // FIELD file if (fwrite (this_proj -> force_field[0] -> prepare_file, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> afp, sizeof(gboolean), MAXDATC+MAXDATA, fp) != MAXDATC+MAXDATA) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> energy_unit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> atom_init, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> molecules, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! this_proj -> force_field[0] -> molecules) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol = this_proj -> force_field[0] -> first_molecule; while (tmp_fmol) { if (save_field_molecule (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fmol = tmp_fmol -> next; } if (fwrite (this_proj -> force_field[0] -> nbody, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<5; i++) { if (this_proj -> force_field[0] -> nbody[i]) { tmp_fbody = this_proj -> force_field[0] -> first_body[i]; while (tmp_fbody) { if (save_field_body (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fbody = tmp_fbody -> next; } } } // Tersoff potential cross terms i = (this_proj -> force_field[0] -> cross) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (this_proj -> force_field[0] -> cross) { i = this_proj -> force_field[0] -> nbody[2] * (this_proj -> force_field[0] -> nbody[2] - 1) / 2; for (j=0; j force_field[0] -> cross[j], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } } if (fwrite (& this_proj -> force_field[0] -> extern_fields, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fext = this_proj -> force_field[0] -> first_external; while (tmp_fext) { if (save_field_external(fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fext = tmp_fext -> next; } return OK; } /*! \fn int save_lmp_field_data (FILE * fp, project * this_proj) \brief save LAMMPS force field data to file \param fp the file pointer \param this_proj the target project */ int save_lmp_field_data (FILE * fp, project * this_proj) { int i; if (this_proj -> force_field[1] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } return OK; } atomes_1.3.1/src/project/read_mol.c0000664000175000017500000001331715212624223016675 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_mol.c * @short Functions to read molecule(s) data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_mol.c' * * Contains: * - The functions to read molecule(s) data in the atomes project file format * * List of functions: int read_atom_m (FILE * fp, int s, int a); int read_this_mol (FILE * fp, molecule * tmp); int read_mol (FILE * fp); */ #include "global.h" #include "project.h" #include "initcoord.h" #include "submenus.h" extern void duplicate_molecule (molecule * new_mol, molecule * old_mol); /*! \fn int read_atom_m (FILE * fp, int s, int a) \brief read atom fragment and molecule data \param fp the file pointer \param s the MD step \param a the atom number */ int read_atom_m (FILE * fp, int s, int a) { if (fread (& active_project -> atoms[s][a].coord[2], sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& active_project -> atoms[s][a].coord[3], sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_this_mol (FILE * fp, molecule * tmp) \brief read molecule data \param fp the file pointer \param tmp the molecule to store the data */ int read_this_mol (FILE * fp, molecule * tmp) { if (fread (& tmp -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> md, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> multiplicity, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (! tmp -> multiplicity) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); tmp -> fragments = allocint (tmp -> multiplicity); if (fread (tmp -> fragments, sizeof(int), tmp -> multiplicity, fp) != tmp -> multiplicity) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); tmp -> species = allocint (active_project -> nspec); if (fread (tmp -> species, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); return OK; } /*! \fn int read_mol (FILE * fp) \brief read molecule(s) information from file \param fp the file pointer */ int read_mol (FILE * fp) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (! i) return OK; active_project -> modelfc = g_malloc0(sizeof*active_project -> modelfc); for (i=1; i<4; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (i == 1 && j != active_coord -> totcoord[1]) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (i > 1) active_coord -> totcoord[i] = j; } active_project -> modelfc -> mol_by_step = allocint (active_project -> steps); if (fread (active_project -> modelfc -> mol_by_step, sizeof(int), active_project -> steps, fp) != active_project -> steps) return ERROR_MOL; active_project -> modelfc -> mols = g_malloc0(active_project -> steps*sizeof*active_project -> modelfc -> mols); for (i=0; i steps; i++) { active_project -> modelfc -> mols[i] = g_malloc0(active_project -> modelfc -> mol_by_step[i]*sizeof*active_project -> modelfc -> mols[i]); } molecule * tmp = g_malloc0(sizeof*tmp); for (i=0; i steps; i++) { for (j=0; j modelfc -> mol_by_step[i]; j++) { if (read_this_mol(fp, & active_project -> modelfc -> mols[i][j]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } for (i=0; i steps; i++) { for (j=0; j< active_project -> natomes; j++) { if (read_atom_m (fp, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } #ifdef GTK3 // Now recreate menus for (i=2; i<4; i++) { init_opengl_coords (i, active_coord -> totcoord[i], 1); init_menu_fragmol_ (& i); active_glwin -> adv_bonding[i-2] = TRUE; for (j=2; j<4; j++) { detach_frag_mol_menu (active_glwin, i, j); } active_glwin -> ogl_coord[i+1] = destroy_this_widget (active_glwin -> ogl_coord[i+1]); if (i == 2) active_glwin -> ogl_coord[3] = menu_item_new_with_submenu (_("Fragment(s)"), active_project -> coord -> totcoord[2], add_menu_coord (active_glwin, 0, 2)); if (i == 3) active_glwin -> ogl_coord[4] = menu_item_new_with_submenu (_("Molecule(s)"), active_project -> coord -> totcoord[2], add_menu_coord (active_glwin, 0, 3)); GtkWidget * cmenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (active_glwin -> ogl_coord[0])); gtk_menu_shell_insert (GTK_MENU_SHELL(cmenu), active_glwin -> ogl_coord[i+1], i+2); } #endif return OK; } atomes_1.3.1/src/project/readers/0000775000175000017500000000000015212624223016367 5ustar lerouxlerouxatomes_1.3.1/src/project/readers/read_hist.c0000664000175000017500000003253515212624223020505 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_hist.c * @short Functions to read DL-POLY history file * @author Sébastien Le Roux */ /* * This file: 'read_hist.c' * * Contains: * - The functions to read DL-POLY history file * * List of functions: int hist_get_data (int linec); int hist_get_content (); int open_hist_file (int linec); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include #include "cbuild_edit.h" #include "readers.h" #ifdef OPENMP # include #endif extern void check_for_species (double v, int ato); /*! \fn int hist_get_data (int linec) \brief read data from the DL-POLY history file \param linec Total number of lines */ int hist_get_data (int linec) { int i; if (linec < 7) return 0; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[1]); #else line_node * tmp_line; tail = head; tmp_line = tail; tail = tail -> next; g_free (tmp_line); this_line = g_strdup_printf ("%s", tail -> line); #endif // OPENMP this_word = strtok (this_line, " "); this_reader -> traj = (int)string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { add_reader_info (_("Wrong file format - record ii line is corrupted !"), 0); return 0; } this_reader -> lattice.pbc = (int)string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { add_reader_info (_("Wrong file format - record ii line is corrupted !"), 0); return 0; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); i = linec - 2; if (i%(4 + (2+this_reader -> traj)*this_reader -> natomes)) return 0; this_reader -> steps = i/(4 + (2+this_reader -> traj)*this_reader -> natomes); return 1; } /*! \fn int hist_get_content () \brief read the content of the DL-POLY history file */ int hist_get_content () { gchar * lil[3] = {"ii", "iii", "iv"}; int i, j, k, l; double v; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); this_reader -> lattice.box = g_malloc0(this_reader -> steps*sizeof*this_reader -> lattice.box); int res = 1; #ifdef OPENMP int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms for (i=0; i steps; i++) { k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj) + 4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); return 0; } this_reader -> lattice.box[i].vect[j][l] = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); } } k += 3; #pragma omp parallel for num_threads(numth) private(j,l,v,this_line,saved_line,this_word) shared(i,k,lil,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+j*(2+this_reader -> traj)); res = 0; goto enda; } if (l < 2) this_word = strtok_r (NULL, " ", & saved_line); } v = string_to_double ((gpointer)this_word); if (v > 0.0) { if (! i) { #pragma omp critical check_for_species (v, j); } g_free (this_line); this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)+1]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[0], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[1], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto enda; } g_free (this_line); enda:; } if (res == 0) break; } } else { // OpenMP on MD steps #pragma omp parallel for num_threads(numth) private(i,j,k,l,v,this_line,saved_line,this_word) shared(lil,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (! res) goto ends; k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj)+4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); res = 0; goto ends; } this_reader -> lattice.box[i].vect[j][l] = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); } } k += 3; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+j*(2+this_reader -> traj)); res = 0; goto ends; } if (l < 2) this_word = strtok_r (NULL, " ", & saved_line); } v = string_to_double ((gpointer)this_word); if (v > 0.0) { if (! i) check_for_species (v, j); g_free (this_line); this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)+1]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[0], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[1], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto ends; } g_free (this_line); } ends:; } } #else line_node * tmp_line; tmp_line = tail; tail = tail -> next; g_free (tmp_line); for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj) + 4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); return 0; } this_reader -> lattice.box[i].vect[j][l] = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); } tmp_line = tail; tail = tail -> next; g_free (tmp_line); } k += 3; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+2*j); return 0; } if (l < 2) this_word = strtok (NULL, " "); } v = string_to_double ((gpointer)this_word); if (v > 0.0) { if (! i) check_for_species (v, j); tmp_line = tail; tail = tail -> next; g_free (tmp_line); this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lil[0], k+2*j+1); return 0; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lil[1], k+2*j+1); return 0; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lil[2], k+2*j+1); return 0; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lil[l], k+2*j+1); return 0; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); } } #endif if (! res) return res; gboolean add_spec; for (i=0; i nspec; i++) { add_spec = FALSE; for (j=1; j<120; j++) { if (fabs(periodic_table_info[j].M - this_reader -> z[i]) < 0.1) { this_reader -> z[i] = (float)j; add_spec = TRUE; break; } } if (! add_spec) { gchar * str = g_strdup_printf (_("Cannot find species with a mass of %f !"), this_reader -> z[i]); add_reader_info (str, 0); g_free (str); return 0; } } for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } this_reader -> lattice.npt = FALSE; for (i=1; i steps; i++) { for (j=0; j<3; j++) { for (k=0; k<3; k++) { if (this_reader -> lattice.box[i].vect[j][k] != this_reader -> lattice.box[0].vect[j][k]) { this_reader -> lattice.npt = TRUE; break; } } if (this_reader -> lattice.npt) break; } if (this_reader -> lattice.npt) break; } return 1; } /*! \fn int open_hist_file (int linec) \brief open DL-POLY history file \param linec Number of lines in the file */ int open_hist_file (int linec) { int res; int i, j, k, l; if (hist_get_data(linec)) { reader_info ("hist", _("Number of atoms"), this_reader -> natomes); reader_info ("hist", _("Number of steps"), this_reader -> steps); if (hist_get_content()) { active_cell -> ltype = 2; active_cell -> pbc = this_reader -> lattice.pbc; active_cell -> npt = this_reader -> lattice.npt; i = (active_cell -> npt) ? this_reader -> steps : 1; if (active_cell -> npt) { g_free (active_cell -> box); active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; } for (j=0; j box[j].vect[k][l] = this_reader -> lattice.box[j].vect[k][l]; } } } active_cell -> has_a_box = TRUE; active_cell -> crystal = FALSE; res = 0; } else { // Content error res = 2; } } else { // Data error res = 2; } return res; } atomes_1.3.1/src/project/readers/read_pdb.c0000664000175000017500000001371015212624223020275 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_pdb.c * @short Functions to read PDB files * @author Sébastien Le Roux */ /* * This file: 'read_pdb.c' * * Contains: * - The functions to read PDB files * * List of functions: int pdb_get_atoms_data (int linec); int open_pdb_file (int linec); double get_z_from_pdb_name (char * name); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #include #ifdef OPENMP # include #endif /*! \fn double get_z_from_pdb_name (char * name) \brief get Z from the PDB atom string \param name the string from the PDB file */ double get_z_from_pdb_name (char * name) { if (strlen(name) == 2) name[1] = tolower ((unsigned char)name[1]); return get_z_from_periodic_table (name); } /*! \fn int pdb_get_atoms_data (int linec) \brief get the atomic data from the PDB file \param linec Total number of lines */ int pdb_get_atoms_data (int linec) { typedef struct pdb_atom pdb_atom; struct pdb_atom { int id; int sp; double nz; double x, y, z; pdb_atom * prev; pdb_atom * next; }; #ifdef OPENMP int h, i, j, k, l; int res; int numth = omp_get_max_threads (); pdb_atom ** first_at = g_malloc0(numth*sizeof*first_at); pdb_atom * other_at = NULL; gchar * saved_line; gboolean add_spec; h = 0; res = 1; #pragma omp parallel for num_threads(numth) private(i,j,k,l,this_line,saved_line,this_word,other_at,add_spec) shared(h,this_reader,res,coord_line,first_at) for (i=0; i next = g_malloc0(sizeof*other_at -> next); other_at -> prev = g_malloc0(sizeof*other_at -> prev); other_at -> next -> prev = other_at; other_at = other_at -> next; } for (k=0; k<13; k++) { this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { add_reader_info (g_strdup_printf (_("Wrong file format - record %d on line %d is corrupted !"), k+2, i+1), 0); res = 0; goto ends; } if (k == 8) other_at -> x = string_to_double ((gpointer)this_word); if (k == 9) other_at -> y = string_to_double ((gpointer)this_word); if (k == 10) other_at -> z = string_to_double ((gpointer)this_word); if (k == 12) { other_at -> nz = get_z_from_pdb_name (this_word); add_spec = TRUE; #pragma omp critical if (other_at -> nz) { if (this_reader -> z) { for (l=0; l nspec; l++) { if (active_chem -> chem_prop[CHEM_Z][l] == other_at -> nz) { other_at -> sp = l; if (! i) this_reader -> nsps[l] ++; add_spec = FALSE; break; } } } else { this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); } if (add_spec) { if (this_reader -> nspec) { this_reader -> z = g_realloc (this_reader -> z, (this_reader -> nspec+1)*sizeof*this_reader -> z); this_reader -> nsps = g_realloc (this_reader -> nsps, (this_reader -> nspec+1)*sizeof*this_reader -> nsps); } other_at -> sp = this_reader -> nspec; this_reader -> nsps[this_reader -> nspec] ++; this_reader -> nspec ++; } } } } } } ends:; } if (! res) { g_free (first_at); g_free (other_at); return 0; } active_project -> natomes = h; active_project -> steps = 1; active_project -> nspec = this_reader -> nspec; if (active_project -> natomes) return 0; alloc_proj_data (active_project, 1); active_project_changed (activep); j = 0; for (i=0; i atoms[0][j].id = j; active_project -> atoms[0][j].sp = other_at -> sp; active_project -> atoms[0][j].x = other_at -> x; active_project -> atoms[0][j].y = other_at -> y; active_project -> atoms[0][j].z = other_at -> z; j ++; other_at = other_at -> next; g_free (other_at -> prev); } // Get back results } #else #endif return active_project -> natomes; } /*! \fn int open_pdb_file (int linec) \brief open PDB file \param linec Number of lines in the file */ int open_pdb_file (int linec) { if (! pdb_get_atoms_data (linec)) return 2; return 0; } atomes_1.3.1/src/project/readers/readers.h0000664000175000017500000000321115212624223020162 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file readers.h * @short Functions declaration to read atomic coordinates * @author Sébastien Le Roux */ /* * This header file: 'readers.h' * * Contains: - Functions declaration to read atomic coordinates */ #ifndef READERS_H_ #define READERS_H_ #include "read_isaacs.h" extern int set_v_dummy (gchar * this_word); extern double get_z_from_periodic_table (gchar * lab); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern FILE * coordf; extern coord_file * this_reader; extern gchar * this_line; extern char * this_word; extern gchar ** coord_line; extern line_node * head; extern line_node * tail; extern void add_reader_info (gchar * info, int mid); extern void reader_info (gchar * type, gchar * sinf, int val); extern void format_error (int stp, int ato, gchar * mot, int line); extern void check_for_species (double v, int ato); #endif atomes_1.3.1/src/project/readers/read_trj.c0000664000175000017500000001572615212624223020340 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_trj.c * @short Functions to read CPMD atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_trj.c' * * Contains: * - The functions to read CPMD atomic coordinates * * List of functions: int trj_get_atom_coordinates (); int open_trj_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif /*! \fn int trj_get_atom_coordinates () \brief get the atomic coordinates from the CPMD file */ int trj_get_atom_coordinates () { int i, j, k, l; gchar * lia[4] = {"a", "b", "c", "d"}; allocatoms (active_project); #ifdef OPENMP int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (active_project -> steps < numth) { if (numth >= 2*(active_project -> steps-1)) { doatoms = TRUE; } else { numth = active_project -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*active_project -> natomes; #pragma omp parallel for num_threads(numth) private(j,this_line,saved_line,this_word) shared(i,k,lia,coord_line,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,this_line,saved_line,this_word) shared(lia,coord_line,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*active_project -> natomes; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word) * 0.52917721; g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; for (i=1; i steps; i++) { for (j=0; j natomes; j++) { if (active_project -> atoms[i-1][j].sp != active_project -> atoms[i][j].sp) { add_reader_info (g_strdup_printf (_("Error - chemical species changes between steps %d and %d, for atom %d !"), i, i+1, j+1), 0); return 2; } } } #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k); return 2; } this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word) * 0.52917721; tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif i = 0; for (j=0; j nspec; j++) { for (k=0; k nsps[j]; k++) { for (l=0; l steps; l++) { active_project -> atoms[l][i].sp = j; } i ++; } } return 0; } /*! \fn int open_trj_file (int linec) \brief open CPMD file \param linec Number of lines in the file */ int open_trj_file (int linec) { if (linec%(this_reader -> natomes) != 0) return 2; reader_info ("trj", _("Number of atoms"), this_reader -> natomes); active_project -> steps = linec / this_reader -> natomes; reader_info ("trj", _("Number of steps"), active_project -> steps); active_project -> natomes = this_reader -> natomes; return trj_get_atom_coordinates (); } atomes_1.3.1/src/project/readers/read_xyz.c0000664000175000017500000002245415212624223020367 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_xyz.c * @short Functions to read XYZ atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_xyz.c' * * Contains: * - The functions to read XYZ atomic coordinates * * List of functions: int xyz_get_atom_coordinates (); int open_xyz_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif /*! \fn int xyz_get_atom_coordinates () \brief get the atomic coordinates from the XYZ file */ int xyz_get_atom_coordinates () { int i, j, k; double v; gchar * lia[4] = {"a", "b", "c", "d"}; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); #ifdef OPENMP int v_dummy; int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*(this_reader -> natomes + 2) + 2; #pragma omp parallel for num_threads(numth) private(j,v,v_dummy,this_line,saved_line,this_word) shared(i,k,lia,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; #pragma omp critical check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,v,v_dummy,this_line,saved_line,this_word) shared(lia,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*(this_reader -> natomes + 2) + 2; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { for (j=0; j<2; j++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); return 2; } v = get_z_from_periodic_table (this_word); if (v) { if (! i) check_for_species (v, j); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); return 2; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } return 0; } /*! \fn int open_xyz_file (int linec) \brief open XYZ file \param linec Number of lines in the file */ int open_xyz_file (int linec) { int res; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[0]); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("xyz", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 2) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 2); reader_info ("xyz", _("Number of steps"), this_reader -> steps); res = xyz_get_atom_coordinates (); } #else this_line = g_strdup_printf ("%s", head -> line); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("xyz", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 2) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 2); reader_info ("xyz", _("Number of steps"), this_reader -> steps); res = xyz_get_atom_coordinates (); } #endif end: return res; } atomes_1.3.1/src/project/readers/read_c3d.c0000664000175000017500000002366615212624223020214 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_c3d.c * @short Functions to read Chem3d atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_c3d.c' * * Contains: * - The functions to read Chem3d atomic coordinates * * List of functions: int c3d_get_atom_coordinates (); int open_c3d_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif extern void check_for_species (double v, int ato); /*! \fn int c3d_get_atom_coordinates () \brief get the atomic coordinates from the C3D file */ int c3d_get_atom_coordinates () { int i, j, k; double v; gchar * lia[5] = {"a", "b", "c", "d", "e"}; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); #ifdef OPENMP int v_dummy; int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*(this_reader -> natomes + 1) + 1; #pragma omp parallel for num_threads(numth) private(j,v,v_dummy,this_line,saved_line,this_word) shared(i,k,lia,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; #pragma omp critical check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,v,v_dummy,this_line,saved_line,this_word) shared(lia,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*(this_reader -> natomes + 1) + 1; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); return 2; } v = get_z_from_periodic_table (this_word); if (v) { if (! i) check_for_species (v, j); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); return 2; } this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); return 2; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } return 0; } /*! \fn int open_c3d_file (int linec) \brief open C3D file \param linec Number of lines in the file */ int open_c3d_file (int linec) { int res; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[0]); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("c3d", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 1) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 1); reader_info ("c3d", _("Number of steps"), this_reader -> steps); res = (this_reader -> steps > 1) ? 2 : c3d_get_atom_coordinates (); } #else this_line = g_strdup_printf ("%s", head -> line); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("chem3d", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 1) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 1); reader_info ("chem3d", _("Number of steps"), this_reader -> steps); res = (this_reader -> steps > 1) ? 2 : c3d_get_atom_coordinates (); } #endif end: return res; } atomes_1.3.1/src/project/readers/read_isaacs.h0000664000175000017500000000327115212624223021001 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_isaacs.h * @short Function declarations to read / write ISAACS XML file * @author Sébastien Le Roux */ /* * This header file: 'read_isaacs.h' * * Contains: - Function declarations to read / write ISAACS XML file */ #ifndef ISAACSRW_H_ #define ISAACSRW_H_ #include #include #include #include size_t strfind (int * ida); int XmlwriterFilename (const char *uri); int write_xml (const char * filetosave); gboolean file_exists (const char * filename); xmlNodePtr findnode (xmlNodePtr startnode, char * nname); int setprop (xmlNodePtr pnode); int testopening (char * tdata, char * tfichier); int setchemistry (xmlNodePtr xsnode); int setbox (xmlNodePtr boxnode); int setpbc (xmlNodePtr pbcnode); int setcutoffs (xmlNodePtr cutnode); int settime(xmlNodePtr timenode); int check_xml (const char * filetocheck); gchar * open_xml (const char * filetoread); #endif atomes_1.3.1/src/project/readers/read_cif.c0000664000175000017500000024651715212624223020306 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_cif.c * @short Functions to read CIF files * @author Sébastien Le Roux */ /* * This file: 'read_cif.c' * * Contains: * - The functions to read CIF files * * List of functions: int get_atom_wyckoff (gchar * line, int wid); int cif_get_value int cif_get_value (gchar * kroot, gchar * keyw, int lstart, int linec, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean total_num, gboolean record_position, int * line_position) int cif_file_get_data_in_loop (int linec, int lid); int cif_file_get_number_of_atoms (int linec, int lid, int nelem); int get_loop_line_id (int lid); int get_loop_line_for_key (int linec, int conf, gchar * key_a, gchar * key_b); int cif_file_get_number_of_positions (int lid); int get_space_group_from_hm (gchar * hmk); int get_setting_from_hm (gchar * hmk, int end); int group_info_from_hm_key (int spg, gchar * key_hm); int cif_get_space_group (int linec); int open_cif_configuration (int linec, int conf); int open_cif_file (int linec); float get_atom_coord (gchar * line, int mid); gboolean get_missing_object_from_user (); gboolean cif_file_get_atoms_data (int conf, int lin, int cid[8]); gboolean cif_get_atomic_coordinates (int linec); gboolean cif_get_symmetry_positions (int linec); gboolean cif_get_cell_data (int linec, int conf); gchar * get_cif_word (gchar * mot); gchar * get_atom_label (gchar * line, int lid); gchar * get_atom_disorder (gchar * line, int lid); gchar * get_string_from_origin (space_group * spg); gchar * cif_retrieve_value (int linec, int conf, gchar * key_a, gchar * key_b, gboolean all_ligne, gboolean in_loop, gboolean warning); G_MODULE_EXPORT void set_cif_to_insert (GtkComboBox * box, gpointer data); void file_get_to_line (int line_id); void check_for_to_lab (int ato, gchar * stlab); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include "atom_edit.h" #include "cbuild_edit.h" #include "readers.h" #include #ifdef OPENMP # include #endif extern int get_atom_id_from_periodic_table (atom_search * asearch); extern double get_z_from_periodic_table (gchar * lab); extern void get_origin (space_group * spg); extern void compute_lattice_properties (cell_info * cell, int box_id); extern int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); extern int read_space_group (builder_edition * cbuilder, int spg); extern gchar * wnpos[3]; extern void get_wyck_char (float val, int ax, int bx); extern space_group * duplicate_space_group (space_group * spg); extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern void sort (int dim, int * tab); extern gchar * tmp_pos; FILE * cifp; char * line_ptr; int * keylines = NULL; int saved_group; int cif_atoms; int cif_nspec; int * cif_lot = NULL; int * cif_nsps = NULL; gboolean cif_multiple = FALSE; gchar ** cif_strings = NULL; gchar * cif_coord_opts[40][2] = {{"b1", "Monoclinic unique axis b, cell choice 1, abc"}, // 0 {"b2", "Monoclinic unique axis b, cell choice 2, abc"}, // 1 {"b3", "Monoclinic unique axis b, cell choice 3, abc"}, // 2 {"-b1", "Monoclinic unique axis b, cell choice 1, c-ba"}, // 3 {"-b2", "Monoclinic unique axis b, cell choice 2, c-ba"}, // 4 {"-b3", "Monoclinic unique axis b, cell choice 3, c-ba"}, // 5 {"c1", "Monoclinic unique axis c, cell choice 1, abc"}, // 6 {"c2", "Monoclinic unique axis c, cell choice 2, abc"}, // 7 {"c3", "Monoclinic unique axis c, cell choice 3, abc"}, // 8 {"-c1", "Monoclinic unique axis c, cell choice 1, ba-c"}, // 9 {"-c2", "Monoclinic unique axis c, cell choice 2, ba-c"}, // 10 {"-c3", "Monoclinic unique axis c, cell choice 3, ba-c"}, // 11 {"a1", "Monoclinic unique axis a, cell choice 1, abc"}, // 12 {"a2", "Monoclinic unique axis a, cell choice 2, abc"}, // 13 {"a3", "Monoclinic unique axis a, cell choice 3, abc"}, // 14 {"-a1", "Monoclinic unique axis a, cell choice 1, -acb"}, // 15 {"-a2", "Monoclinic unique axis a, cell choice 2, -acb"}, // 16 {"-a3", "Monoclinic unique axis a, cell choice 3, -acb"}, // 17 {"abc", "Orthorhombic"}, // 18 {"ba-c", "Orthorhombic"}, // 10 {"cab", "Orthorhombic"}, // 20 {"-cba", "Orthorhombic"}, // 21 {"bca", "Orthorhombic"}, // 22 {"a-cb", "Orthorhombic"}, // 23 {"1abc", "Orthorhombic origin choice 1"}, // 24 {"1ba-c", "Orthorhombic origin choice 1"}, // 25 {"1cab", "Orthorhombic origin choice 1"}, // 26 {"1-cba", "Orthorhombic origin choice 1"}, // 27 {"1bca", "Orthorhombic origin choice 1"}, // 28 {"1a-cb", "rthorhombic origin choice 1"}, // 29 {"2abc", "Orthorhombic origin choice 2"}, // 30 {"2ba-c", "Orthorhombic origin choice 2"}, // 31 {"2cab", "Orthorhombic origin choice 2"}, // 32 {"2-cba", "Orthorhombic origin choice 2"}, // 33 {"2bca", "Orthorhombic origin choice 2"}, // 34 {"2a-cb", "Orthorhombic origin choice 2"}, // 35 {"1", "Tetragonal or cubic origin choice 1"}, // 36 {"2", "Tetragonal or cubic origin choice 2"}, // 37 {"h", "Trigonal using hexagonal axes"}, // 38 {"r", "Trigonal using rhombohedral axes "}}; // 39 #ifdef G_OS_WIN32 typedef intptr_t ssize_t; ssize_t getline(char **lineptr, size_t *n, FILE *stream) { size_t pos; int c; if (lineptr == NULL || stream == NULL || n == NULL) { errno = EINVAL; return -1; } c = getc(stream); if (c == EOF) return -1; if (*lineptr == NULL) { *lineptr = malloc(128); if (*lineptr == NULL) return -1; *n = 128; } pos = 0; while(c != EOF) { if (pos + 1 >= *n) { size_t new_size = *n + (*n >> 2); if (new_size < 128) { new_size = 128; } char *new_ptr = realloc(*lineptr, new_size); if (new_ptr == NULL) return -1; *n = new_size; *lineptr = new_ptr; } ((unsigned char *)(*lineptr))[pos ++] = c; if (c == '\n') break; c = getc(stream); } (*lineptr)[pos] = '\0'; return pos; } #endif // G_OS_WIN_32 /*! \fn gchar * get_cif_word (gchar * mot) \brief get string from CIF file, EOL can be ugly \param mot the string that was read in the file */ gchar * get_cif_word (gchar * mot) { gchar * word = substitute_string (mot, "\n", NULL); word = substitute_string (word, "\r", NULL); return word; } /*! \fn float get_atom_coord (gchar * line, int mid) \brief read atom coordinates from CIF file \param line the string that contains the data \param mid the position to reach on the line */ float get_atom_coord (gchar * line, int mid) { gchar * co_line; gchar * init = g_strdup_printf ("%s", line); char * co_word = strtok_r (init, " ", & co_line); int i; for (i=0; i lattice.sp_group -> numw; i++) { if (g_strcmp0(get_cif_word(wy_word), this_reader -> lattice.sp_group -> wyckoff[i].let) == 0) { j = i; break; } } g_free (init); return j; } /*! \fn gchar * get_atom_disorder (gchar * line, int lid) \brief read atom disorder group from CIF file \param line the string that contains the data \param lid the position to reach on the line */ gchar * get_atom_disorder (gchar * line, int lid) { gchar * at_line; gchar * init = g_strdup_printf ("%s", line); char * at_word = strtok_r (init, " ", & at_line); int i; for (i=0; i 0) { gtk_tree_store_set (GTK_TREE_STORE(cmodel), & iter, 0, periodic_table_info[j].lab, -1); } cif_search -> todo[i] = (! j) ? 0 : 1; if (! j) done = FALSE; cif_search -> in_selection = 0; for (k=0; k object_to_insert; k++) cif_search -> in_selection += cif_search -> todo[k]; } str = (done) ? g_strdup_printf (APPLY) : g_strdup_printf (DELETEB); set_image_from_icon_name (img_cif[i], str); g_free (str); if (! done) combo_set_active ((GtkWidget *)box, 0); } /*! \fn gboolean get_missing_object_from_user () \brief get missing atomic number in CIF file from the user */ gboolean get_missing_object_from_user () { cif_search = allocate_atom_search (activep, REPLACE, 0, this_reader -> object_to_insert); cif_object = NULL; GtkWidget * info = dialogmodal (_("Error while reading CIF file"), GTK_WINDOW(MainWindow)); GtkWidget * vbox, * hbox; gchar * str; vbox = dialog_get_content_area (info); gchar * labpick = _("To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s)." "\n\nPlease select an atom type for the following object(s):"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (labpick, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); img_cif = g_malloc0(this_reader -> object_to_insert*sizeof*img_cif); GtkWidget * but; GtkCellRenderer * renderer; GtkTreeModel * model; int i; for (i=0; i object_to_insert; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); str = g_strdup_printf (_("Type N°%d:\t%s"), i+1, this_reader -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); img_cif[i] = stock_image (DELETEB); model = replace_combo_tree (TRUE, activep); but = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (but), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (but), renderer, "text", 0, NULL); combo_set_active (but, 0); g_signal_connect (G_OBJECT(but), "changed", G_CALLBACK(set_cif_to_insert), GINT_TO_POINTER(i)); combo_set_markup (but); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_cif[i], FALSE, FALSE, 30); } gchar * endpick = _("In case of a molecule: insert an extra type of atom and run a substitution afterwards."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (endpick, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); g_free (img_cif); return (cif_search -> in_selection == this_reader -> object_to_insert) ? TRUE : FALSE; } #ifndef OPENMP /*! \fn void file_get_to_line (int line_id) \brief reach line in CIF file \param line_id Line to reach */ void file_get_to_line (int line_id) { int i; tail = head; for (i=0; i next; } #endif /*! \fn int cif_get_value (gchar * kroot, gchar * keyw, int lstart, int linec, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean total_num, gboolean record_position, int * line_position) \brief read pattern in CIF file \param kroot string key (first part) \param keyw string key (second part) \param lstart starting line to reach \param lend final line \param cif_word pointer to store the data to read \param rec_val record position on the line \param all_ligne browse all line (1/0) \param total_num get the total number of occurrences \param record_position record line position of each occurrences \param line_position line position of each occurrences */ int cif_get_value (gchar * kroot, gchar * keyw, int lstart, int lend, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean total_num, gboolean record_position, int * line_position) { int res = 0; int i; size_t j, k, l, m; gchar * str; gchar * str_w, * str_a, * str_b; gchar * mot; gchar * saved_line; gchar * the_line; gchar * the_word; j = strlen(kroot); k = strlen(keyw); l = j+k+1; #ifdef OPENMP int numth = omp_get_max_threads (); #pragma omp parallel for num_threads(numth) private(i,m,the_line,saved_line,the_word,mot,str_a,str_b,str_w) shared(j,k,l,this_reader,coord_line,cif_word,rec_val,all_ligne,kroot,keyw,total_num,record_position,line_position,res) for (i=lstart; i%s - error at line %d !\n"), keyw, i+1); add_reader_info (str, 0); g_free (str); g_free (str_w); g_free (str_a); g_free (str_b); res = -1; goto endi; } } if (total_num) { #pragma omp critical { if (record_position) { line_position[res] = i + 1; } res ++; if (this_reader -> steps && res == this_reader -> steps) total_num = FALSE; } } else { res = i + 1; } if (all_ligne) { mot = g_strdup_printf ("%s", the_word); the_word = strtok_r (NULL, " ", & saved_line); while (the_word) { mot = g_strdup_printf ("%s%s", mot, the_word); the_word = strtok_r (NULL, " ", & saved_line); } the_word = g_strdup_printf ("%s", mot); g_free (mot); } if (the_word && rec_val) { * cif_word = get_cif_word (the_word); } g_free (str_w); g_free (str_a); g_free (str_b); goto endi; } g_free (str_a); g_free (str_b); } g_free (str_w); the_word = strtok_r (NULL, " ", & saved_line); } endi:; g_free (the_line); } if (res < 0) res = 0; #else file_get_to_line (lstart); res = 0; i = lstart; while (tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); while (the_word) { str_w = get_cif_word (the_word); str_w = g_ascii_strdown (str_w, strlen(str_w)); if (strlen(str_w) == l) { str_a = g_strdup_printf ("%c", str_w[0]); for (m=1; m%s - error at line %d !\n"), keyw, i+1); add_reader_info (str, 0); g_free (str); g_free (str_w); g_free (str_a); g_free (str_b); g_free (the_line); return 0; } } if (all_ligne) { mot = g_strdup_printf ("%s", the_word); the_word = strtok_r (NULL, " ", & saved_line); while (the_word) { mot = g_strdup_printf ("%s%s", mot, the_word); the_word = strtok_r (NULL, " ", & saved_line); } the_word = g_strdup_printf ("%s", mot); g_free (mot); } if (the_word && rec_val) { * cif_word = get_cif_word (the_word); } if (total_num) { if (record_position) { line_position[res] = i + 1; } res ++; if (this_reader -> steps && res == this_reader -> steps) { g_free (str_a); g_free (str_b); g_free (str_w); g_free (the_line); return res; } } else { g_free (str_a); g_free (str_b); g_free (str_w); g_free (the_line); return i + 1; } } g_free (str_a); g_free (str_b); } g_free (str_w); the_word = strtok_r (NULL, " ", & saved_line); } g_free (the_line); tail = tail -> next; i ++; } #endif return res; } /*! \fn int cif_file_get_data_in_loop (int linec, int lid) \brief get the number of "_" motifs in a line \param linec total number of lines \param lid line to reach */ int cif_file_get_data_in_loop (int linec, int lid) { gboolean res = FALSE; int i = 0; gchar * the_word; gchar * the_line; gchar * saved_line; #ifdef OPENMP while (! res) { if (lid+i < linec) { the_line = g_strdup_printf ("%s", coord_line[lid+i]); the_word = strtok_r (the_line, " ", & saved_line); if (the_word[0] == '_') { i ++; } else { res = TRUE; } g_free (the_line); } else { res = TRUE; } } #else file_get_to_line (lid); while (! res) { if (tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); if (the_word[0] == '_') { i ++; tail = tail -> next; } else { res = TRUE; } g_free (the_line); } else { res = TRUE; } } #endif return i; } /*! \fn int get_loop_line_id (int lid) \brief reach a line in the CIF file \param lid line to reach */ int get_loop_line_id (int lid) { int i; gchar * the_word; gchar * the_line; gchar * saved_line; gchar * str_w; #ifdef OPENMP for (i=lid-1; i>-1; i--) { the_line = g_strdup_printf ("%s", coord_line[i]); the_word = strtok_r (the_line, " ", & saved_line); if (the_word) { str_w = g_ascii_strdown (the_word, strlen(the_word)); if (g_strcmp0 ("loop_", get_cif_word(str_w)) == 0) { g_free (str_w); return i+1; } g_free (str_w); } } #else file_get_to_line (lid); i = lid; while (tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); if (the_word) { str_w = g_ascii_strdown (the_word, strlen(the_word)); if (g_strcmp0 ("loop_", get_cif_word(str_w)) == 0) { g_free (str_w); return i+1; } g_free (str_w); } i --; tail = tail -> prev; } #endif return 0; } /*! \fn int get_loop_line_for_key (int linec, int conf, gchar * key_a, gchar * key_b) \brief search a string \param linec total number of lines \param conf configuration to read \param key_a string root (first part) \param key_b string end (second part) */ int get_loop_line_for_key (int linec, int conf, gchar * key_a, gchar * key_b) { int lli = 0; int * line_numbers; int steps; if (this_reader -> steps > 1) { line_numbers = allocint (this_reader -> steps); steps = cif_get_value (key_a, key_b, 0, linec, NULL, FALSE, FALSE, TRUE, TRUE, line_numbers); if (steps) { if (steps != this_reader -> steps) { gchar * str = g_strdup_printf (_("CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n"), key_a, key_b, steps, this_reader -> steps); add_reader_info (str, 0); g_free (str); g_free (line_numbers); return 0; } sort (steps, line_numbers); lli = line_numbers[conf]; g_free (line_numbers); } } else { lli = cif_get_value (key_a, key_b, 0, linec, NULL, FALSE, FALSE, FALSE, FALSE, NULL); } return (lli) ? get_loop_line_id (lli) : 0; } /*! \fn gchar * cif_retrieve_value (int linec, int conf, gchar * key_a, gchar * key_b, gboolean all_ligne, gboolean in_loop, gboolean warning) \brief retrieve a field value as string in the CIF file \param linec total number of lines \param conf configuration to read \param keya string key (first part) \param keyb string key (second part) \param all_ligne browse all line (1/0) \param in_loop is field in a loop (1/0) \param warning show warning (1/0) */ gchar * cif_retrieve_value (int linec, int conf, gchar * key_a, gchar * key_b, gboolean all_ligne, gboolean in_loop, gboolean warning) { gchar * str; gchar * cif_value = NULL; int loop_pos[2]; int * line_numbers; int steps; if (this_reader -> steps > 1) { line_numbers = allocint (this_reader -> steps); // g_debug ("CIF:: retrieve:: linec= %d, conf= %d, key_a= %s, key_b= %s, this_reader -> steps= %d", linec, conf, key_a, key_b, this_reader -> steps); steps = cif_get_value (key_a, key_b, 0, linec, NULL, FALSE, FALSE, TRUE, TRUE, line_numbers); // g_debug ("CIF:: retrieve:: steps= %d", steps); if (steps) { if (steps != this_reader -> steps) { str = g_strdup_printf (_("CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n"), key_a, key_b, steps, this_reader -> steps); add_reader_info (str, 0); g_free (str); str = NULL; g_free (line_numbers); line_numbers = NULL; return NULL; } sort (steps, line_numbers); if (in_loop) { // Considering that the loop has not more than a thousand keys loop_pos[0] = get_loop_line_id (line_numbers[conf]); loop_pos[1] = (loop_pos[0] + 1000) > linec ? linec : (loop_pos[0] + 1000); } else { loop_pos[0] = (! line_numbers[conf]) ? line_numbers[conf] : line_numbers[conf] - 1; loop_pos[1] = (loop_pos[0] + 1000) > linec ? linec : (loop_pos[0] + 1000); // loop_pos[1] = (conf == this_reader -> steps - 1) ? linec : line_numbers[conf + 1]; } g_free (line_numbers); line_numbers = NULL; } } else { loop_pos[0] = 0; loop_pos[1] = linec; } if (! cif_get_value (key_a, key_b, loop_pos[0], loop_pos[1], & cif_value, TRUE, all_ligne, FALSE, FALSE, NULL) && warning) { #ifdef DEBUG g_debug ("CIF:: retrieve:: keyword: %s_%s not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n", key_a, key_b, conf, loop_pos[0], loop_pos[1]); #endif str = g_strdup_printf (_("Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n"), key_a, key_b, conf, loop_pos[0], loop_pos[1]); add_reader_info (str, 0); g_free (str); return NULL; } return cif_value; } /*! \fn int cif_file_get_number_of_atoms (int linec, int lid, int nelem) \brief get the number of atom(s) in a CIF file \param linec total number of lines \param lid line to reach \param nelem number of element(s) the line */ int cif_file_get_number_of_atoms (int linec, int lid, int nelem) { gboolean res = FALSE; int i, j; char init; gchar * the_word; gchar * the_line; gchar * saved_line; i = 0; #ifdef OPENMP while (! res && (lid+i) < linec) { the_line = g_strdup_printf ("%s", coord_line[lid+i]); the_word = strtok_r (the_line, " ", & saved_line); j = 0; while (the_word) { if (! j) init = the_word[0]; j ++; the_word = strtok_r (NULL, " ", & saved_line); } if (j == nelem && init != '_') { i ++; } else { res = TRUE; } g_free (the_line); } #else file_get_to_line (lid); while (! res && tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); j = 0; while (the_word) { if (j == 0) init = the_word[0]; j ++; the_word = strtok_r (NULL, " ", & saved_line); } if (j == nelem && init != '_') { i ++; } else { res = TRUE; } g_free (the_line); tail = tail -> next; } #endif return i; } /*! \fn void check_for_to_lab (int ato, gchar * stlab) \brief check atom label \param ato atom id \param stlab label to read in the CIF file */ void check_for_to_lab (int ato, gchar * stlab) { int i, j; j = -1; // First is the label of 'ato' already listed for (i=0; i object_to_insert; i++) { if (g_strcmp0(this_reader -> label[i], stlab) == 0) { j = i; break; } } if (j < 0) { if (this_reader -> label) { this_reader -> label = g_realloc (this_reader -> label, (this_reader -> object_to_insert+1)*sizeof*this_reader -> label); } else { this_reader -> label = g_malloc0(1*sizeof*this_reader -> label); } this_reader -> label[this_reader -> object_to_insert] = g_strdup_printf ("%s", stlab); this_reader -> object_to_insert ++; j = this_reader -> object_to_insert-1; } if (this_reader -> object_list) { this_reader -> object_list = g_realloc (this_reader -> object_list, (this_reader -> atom_unlabelled+1)*sizeof*this_reader -> object_list); this_reader -> u_atom_list = g_realloc (this_reader -> u_atom_list, (this_reader -> atom_unlabelled+1)*sizeof*this_reader -> u_atom_list); } else { this_reader -> object_list = g_malloc0(1*sizeof*this_reader -> object_list); this_reader -> u_atom_list = g_malloc0(1*sizeof*this_reader -> u_atom_list); } this_reader -> object_list[this_reader -> atom_unlabelled] = j; this_reader -> u_atom_list[this_reader -> atom_unlabelled] = ato; this_reader -> atom_unlabelled ++; } /*! \fn gboolean cif_file_get_atoms_data (int conf, int lin, int cid[8]) \brief get atoms data from the CIF file \param conf the configuration to read \param lin line to reach \param cid positions on the line for the data to read */ gboolean cif_file_get_atoms_data (int conf, int lin, int cid[9]) { int i, j; double v; gchar * str; gboolean done = TRUE; gchar * cline; int at_step = (active_project -> steps == 1) ? 0 : conf; #ifdef OPENMP int numth = omp_get_max_threads (); #pragma omp parallel for num_threads(numth) private(i,j,v,cline,str) shared(this_reader,coord_line,at_step,done,lin,cid) for (i=0; i natomes; i++) { cline = g_strdup_printf ("%s", coord_line[i+lin]); str = get_atom_label (cline, (cid[0]) ? cid[0] : cid[1]); v = get_z_from_periodic_table (str); #pragma omp critical { if (v) { check_for_species (v, i); } else { done = FALSE; check_for_to_lab (i, str); } } if (this_reader -> cartesian) { active_project -> atoms[at_step][i].x = get_atom_coord (cline, cid[2]); active_project -> atoms[at_step][i].y = get_atom_coord (cline, cid[3]); active_project -> atoms[at_step][i].z = get_atom_coord (cline, cid[4]); } else { for (j=0; j<3; j++) this_reader -> coord[i][j] = get_atom_coord (cline, cid[j+2]); } if (! this_reader -> cartesian) { this_reader -> wyckoff[i] = (cid[5]) ? get_atom_wyckoff (cline, cid[5]) : 0; this_reader -> occupancy[i] = (cid[6]) ? get_atom_coord (cline, cid[6]) : 1.0; this_reader -> multi[i] = (cid[7]) ? get_atom_coord (cline, cid[7]) : 0.0; this_reader -> disorder[i] = (cid[8]) ? (int) get_atom_coord (cline, cid[8]) : 0; } if (cline) { g_free (cline); cline = NULL; } if (str) { g_free (str); str = NULL; } } #else file_get_to_line (lin); for (i=0; i natomes; i++) { cline = g_strdup_printf ("%s", tail -> line); str = get_atom_label (cline, (cid[0]) ? cid[0] : cid[1]); v = get_z_from_periodic_table (str); if (v) { check_for_species (v, i); } else { done = FALSE; check_for_to_lab (i, str); } if (this_reader -> cartesian) { active_project -> atoms[at_step][i].x = get_atom_coord (cline, cid[2]); active_project -> atoms[at_step][i].y = get_atom_coord (cline, cid[3]); active_project -> atoms[at_step][i].z = get_atom_coord (cline, cid[4]); } else { for (j=0; j<3; j++) this_reader -> coord[i][j] = get_atom_coord (cline, cid[j+2]); } if (! this_reader -> cartesian) { this_reader -> wyckoff[i] = (cid[5]) ? get_atom_wyckoff (cline, cid[5]) : 0; this_reader -> occupancy[i] = (cid[6]) ? get_atom_coord (cline, cid[6]) : 1.0; this_reader -> multi[i] = (cid[7]) ? get_atom_coord (cline, cid[7]) : 0.0; this_reader -> disorder[i] = (cid[8]) ? get_atom_coord (cline, cid[8]) : 0; } /* #ifdef DEBUG j = this_reader -> wyckoff[i]; g_debug ("CIF:: At= %s, w_letter[%d]= %s, occ= %f, x= %f, y= %f, z= %f", this_reader -> label[i], j, this_reader -> lattice.sp_group -> wyckoff[j].let, this_reader -> occupancy[i], this_reader -> coord[i][0], this_reader -> coord[i][1], this_reader -> coord[i][2]); #endif */ tail = tail -> next; } #endif if (! done) { done = (cif_search) ? TRUE : get_missing_object_from_user (); } return done; } /*! \fn gboolean cif_get_atomic_coordinates (int linec) \brief read the atomic coordinates from the CIF file \param linec total number of lines \param conf configuration to read */ gboolean cif_get_atomic_coordinates (int linec, int conf) { gchar * labkeys[2] = {"type_symbol", "label"}; gchar * frackeys[3] = {"fract_x", "fract_y", "fract_z"}; gchar * cartkeys[3] = {"cartn_x", "cartn_y", "cartn_z"}; gchar * symkeys[4] = {"wyckoff_symbol", "occupancy", "symmetry_multiplicity", "disorder_group"}; gchar * str = NULL; int cid[9]; int loop_line; int loop_max; int i, j, k; double u, v; int * tmp_nsps; double * tmp_z; if (cif_multiple) { loop_line = get_loop_line_for_key (linec, conf, "_atom_site", (this_reader -> cartesian) ? cartkeys[0] : frackeys[0]); if (! loop_line) { return FALSE; } } else { loop_line = get_loop_line_for_key (linec, 0, "_atom_site", cartkeys[0]); if (! loop_line) { loop_line = get_loop_line_for_key (linec, 0, "_atom_site", frackeys[0]); if (! loop_line) { return FALSE; } } else { this_reader -> cartesian = TRUE; } } loop_max = (loop_line + 1000 > linec) ? linec : loop_line + 1000; i = 0; for (j=0; j<2; j++) { cid[j] = cif_get_value ("_atom_site", labkeys[j], loop_line, loop_max, NULL, FALSE, FALSE, FALSE, FALSE, NULL); if (cid[j]) { i ++; cid[j] -= loop_line; } } if (! i) { add_reader_info (_("Atomic coordinates: impossible to find atomic label(s) ..."), 0); return FALSE; } for (i=0; i<3; i++) { cid[i+2] = cif_get_value ("_atom_site", (this_reader -> cartesian) ? cartkeys[i] : frackeys[i], loop_line, loop_max, NULL, FALSE, FALSE, FALSE, FALSE, NULL); if (cid[i+2]) { cid[i+2] -= loop_line; } else { str = g_strdup_printf (_("Atomic coordinates: impossible to find '%s' ..."), (this_reader -> cartesian) ? cartkeys[i] : frackeys[i]); add_reader_info (str, 1); g_free (str); this_reader -> cartesian = FALSE; } } if (! this_reader -> cartesian) { for (i=0; i<4; i++) { cid[i+5] = cif_get_value ("_atom_site", symkeys[i], loop_line, loop_max, NULL, FALSE, FALSE, FALSE, FALSE, NULL); if (cid[i+5]) { cid[i+5] -= loop_line; if (i == 1 && this_reader -> rounding < 0) { this_reader -> rounding = iask (_("Please select how to handle occupancy"), _("Select how to handle occupancy"), 5, MainWindow); if (this_reader -> rounding < 0 || this_reader -> rounding > 2) this_reader -> rounding = 2; if (! cif_use_symmetry_positions) { str = g_strdup_printf (_("Occupancy %s\n\t%s\n"), cif_occ[this_reader -> rounding], cif_sites[cif_use_symmetry_positions]); add_reader_info (str, 1); g_free (str); } } } } } i = cif_file_get_data_in_loop (linec, loop_line); this_reader -> natomes = cif_file_get_number_of_atoms (linec, loop_line+i, i); if (! this_reader -> natomes) return FALSE; if (conf && active_project -> steps > 1 && this_reader -> natomes != cif_atoms) { // Not the same number of atoms between each configuration str = g_strdup_printf (_("Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n"), conf, this_reader -> natomes, cif_atoms); add_reader_info (str, 0); g_free (str); return FALSE; } if (this_reader -> cartesian) { if (! conf) { active_project -> natomes = this_reader -> natomes; allocatoms (active_project); } } else { this_reader -> coord = allocddouble (this_reader -> natomes*this_reader -> steps, 3); } if (! this_reader -> cartesian) { this_reader -> lot = allocint (this_reader -> natomes); this_reader -> wyckoff = allocint (this_reader -> natomes); this_reader -> occupancy = allocdouble (this_reader -> natomes); this_reader -> multi = allocint (this_reader -> natomes); this_reader -> disorder = allocint (this_reader -> natomes); } this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); if (! cif_file_get_atoms_data (conf, loop_line+i, cid)) return FALSE; if (active_project -> steps > 1) { tmp_nsps = duplicate_int (this_reader -> nspec, this_reader -> nsps); tmp_z = duplicate_double (this_reader -> nspec, this_reader -> z); for (i=1; i nspec; i++) { v = tmp_z[i]; j = tmp_nsps[i]; for (k=i-1; k>-1; k--) { if (tmp_z[k] <= v) break; tmp_z[k+1] = tmp_z[k]; tmp_nsps[k+1] = tmp_nsps[k]; } tmp_z[k+1] = v; tmp_nsps[k+1] = j; } g_free (tmp_z); if (! conf) { cif_atoms = this_reader -> natomes; cif_nspec = this_reader -> nspec; cif_nsps = duplicate_int (this_reader -> nspec, tmp_nsps); } } if (conf && active_project -> steps > 1) { if (this_reader -> nspec != cif_nspec) { // Not the same number of chemical species between each configuration str = g_strdup_printf (_("Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n"), conf, this_reader -> nspec, cif_nspec); add_reader_info (str, 0); g_free (str); return FALSE; } for (i=0; i nspec; i++) { if (tmp_nsps[i] != cif_nsps[i]) { // Not the same number of atom(s) by chemical species between each configuration str = g_strdup_printf (_("Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n"), conf, i+1, this_reader -> nsps[i], cif_nsps[i]); add_reader_info (str, 0); g_free (str); return FALSE; } } g_free (tmp_nsps); } if (! this_reader -> cartesian && cif_use_symmetry_positions) { // Testing site multiplicity, to ensure that occupancy is not > 1.0 for (i=0; i natomes; i++) { v = this_reader -> occupancy[i]; for (j=0; j natomes; j++) { if (j != i) { if (this_reader -> coord[i][0] == this_reader -> coord[j][0] && this_reader -> coord[i][1] == this_reader -> coord[j][1] && this_reader -> coord[i][2] == this_reader -> coord[j][2]) { v += this_reader -> occupancy[j]; if (v > 1.00001) { add_reader_info (_("Atomic coordinates: a site has an occupancy > 1.0 !\n"), 0); return FALSE; } } } } } } if (! this_reader -> cartesian && this_reader -> chemical) { // Testing the different number of occupancies double * test_occ = allocdouble (1); int * num_occ = allocint (1); int * test_order = allocint (1); int * num_order = allocint (1); gboolean new_occ, new_order; int occupancies = 1; int disorders = 1; u = v = test_occ[0] = this_reader -> occupancy[0]; test_order[0] = this_reader -> disorder[0]; num_occ[0] = num_order[0] = 1; for (i=1; i natomes; i++) { new_occ = new_order = TRUE; for (j=0; j occupancy[i]) { num_occ[j] ++; new_occ = FALSE; break; } } if (new_occ) { test_occ = g_realloc (test_occ, (occupancies+1)*sizeof*test_occ); test_occ[occupancies] = this_reader -> occupancy[i]; u = min (u, test_occ[occupancies]); v = max (v, test_occ[occupancies]); num_occ = g_realloc (num_occ, (occupancies+1)*sizeof*num_occ); num_occ[occupancies] = 1; occupancies ++; } for (j=0; j disorder[i]) { num_order[j] ++; new_order = FALSE; break; } } if (new_order) { test_order = g_realloc (test_order, (disorders+1)*sizeof*test_order); test_order[disorders] = this_reader -> disorder[i]; num_order = g_realloc (num_order, (disorders+1)*sizeof*num_order); num_order[disorders] = 1; disorders ++; } } if (this_reader -> natomes%occupancies == 0 || this_reader -> natomes%disorders == 0) { // Atoms can be separated based on site occupancy or site disorder // We can consider this as a chemical reaction or trajectory // As many lattices near by as occupancies or disorders new_occ = TRUE; for (i=0; i natomes/occupancies) { new_occ = FALSE; break; } } // if (new_occ) add_reader_info (_("CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n"), 1); // g_debug ("min= %f, max= %f, max/min= %f", u, v, v/u); new_order = TRUE; for (i=0; i natomes/disorders) { new_order = FALSE; break; } } // if (new_order) add_reader_info (_("CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n"), 1); } } return TRUE; } /*! \fn int cif_file_get_number_of_positions (int lid) \brief get the number of symmetry positions \param lid line to reach */ int cif_file_get_number_of_positions (int lid) { gboolean res = FALSE; gchar * saved_line; gchar * the_line; gchar * the_word; int i = 0; while (! res) { #ifdef OPENMP the_line = g_strdup_printf ("%s", coord_line[lid+i]); #else file_get_to_line (lid+i); the_line = g_strdup_printf ("%s", tail -> line); #endif the_word = strtok_r (the_line, " ", & saved_line); if (the_word[0] == '_' || g_strcmp0(the_word, "loop_") == 0) { res = TRUE; break; } else { i ++; } } if (i) { this_reader -> sym_pos = g_malloc0(i*sizeof*this_reader -> sym_pos); int j, k; gchar * str; gchar * k_word; gchar * sym_pos_line; for (j=0; j sym_pos[j] = g_malloc0(3*sizeof*this_reader -> sym_pos[j]); #ifdef OPENMP sym_pos_line = g_strdup_printf ("%s", coord_line[lid+j]); #else file_get_to_line (lid+j); sym_pos_line = g_strdup_printf ("%s", tail -> line); #endif the_line = g_strdup_printf ("%s", sym_pos_line); the_word = strtok_r (the_line, " ", & saved_line); k_word = g_strdup_printf ("%s", the_word); str = g_strdup_printf ("%d", j+1); if (g_strcmp0(k_word, str) == 0) { g_free (the_line); the_line = NULL; for (k=strlen(k_word); k sym_pos[j][k] = g_strdup_printf ("%s", the_word); the_word = strtok_r (NULL, " ", & saved_line); } #ifdef DEBUG g_debug ("SYM_POS:: pos= %d, x= %s, y= %s, z= %s", j+1, this_reader -> sym_pos[j][0], this_reader -> sym_pos[j][1], this_reader -> sym_pos[j][2]); #endif // DEBUG } } return i; } /*! \fn gboolean cif_get_symmetry_positions (int linec, int conf) \brief read the symmetry positions from the CIF file \param linec total number of lines \param conf configuration to read */ gboolean cif_get_symmetry_positions (int linec, int conf) { gchar * pos_key[2]={"_symmetry_equiv_pos_as", "_space_group_symop_operation"}; int loop_line; int line_id; int i; for (i=0; i<2; i++) { loop_line = get_loop_line_for_key (linec, conf, pos_key[i], "xyz"); if (loop_line) { line_id = cif_get_value (pos_key[i], "xyz", loop_line, linec, NULL, FALSE, FALSE, FALSE, FALSE, NULL); break; } } if (! loop_line) return FALSE; // Read lines after the instruction, as many positions as line until _ or loop this_reader -> num_sym_pos = cif_file_get_number_of_positions (line_id); return TRUE; } /*! \fn int get_space_group_from_hm (gchar * hmk) \brief retrieve space group using the HM Key \param hmk */ int get_space_group_from_hm (gchar * hmk) { int i; gchar * str; gchar * hm = replace_markup (hmk, "S", NULL); for (i=0; i<230; i++) { str = substitute_string (hmsymbols[i], " ", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } g_free (str); str = substitute_string (groups[i], "", NULL); str = substitute_string (str, "", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } g_free (str); } // Cross checking for erroneus writting in the CIF file // ie. Fm3m in place of Fm-3m for (i=0; i<230; i++) { str = substitute_string (groups[i], "", NULL); str = substitute_string (str, "", NULL); if (g_strrstr(str, "-")) { str = substitute_string (str, "-", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } } g_free (str); } g_free (hm); return 0; } /*! \fn gchar * get_string_from_origin (space_group * spg) \brief get the space group origin from its name \param spg space group */ gchar * get_string_from_origin (space_group * spg) { gchar * str = NULL; if (wnpos[1]) { g_free (wnpos[1]); wnpos[1] = NULL; } get_wyck_char (spg -> coord_origin.m01, 1, 0); get_wyck_char (spg -> coord_origin.m11, 1, 1); get_wyck_char (spg -> coord_origin.m21, 1, 2); if (wnpos[1]) { str = g_strdup_printf ("%s", wnpos[1]); g_free (wnpos[1]); wnpos[1] = NULL; } return str; } /*! \fn int get_setting_from_hm (gchar * hmk, int end) \brief Getting the space group parameters using the HM Key \param hmk the HM key \param end use origin (number of possible SP origins), or not (-1) */ int get_setting_from_hm (gchar * hmk, int end) { int i, j; gchar * str; if (this_reader -> lattice.sp_group) { i = this_reader -> lattice.sp_group -> nums; for (j=0; j lattice.sp_group -> settings[j].name, "s", "/"); str = substitute_string (str, "_", NULL); if (end < 0) { if (g_strcmp0(str, hmk) == 0) { g_free (str); return j; } } else { if (g_strcmp0(str, hmk) == 0 && this_reader -> lattice.sp_group -> settings[j].origin == end+1) { g_free (str); return j; } } g_free (str); } if (this_reader -> lattice.sp_group -> id > 2 && this_reader -> lattice.sp_group -> id < 16) { // This is a way around the way this familly of SG is often written, // using incomplete or inexact hmk keyword, ex: P21/a instead of P121/a1 for (j=0; j lattice.sp_group -> settings[j].name, "s", "/"); str = substitute_string (str, "_", NULL); str = substitute_string (str, "12", "2"); str = substitute_string (str, "/a1", "/a"); str = substitute_string (str, "/b1", "/b"); str = substitute_string (str, "/c1", "/c"); str = substitute_string (str, "/m1", "/m"); str = substitute_string (str, "/n1", "/n"); if (end < 0) { if (g_strcmp0(str, hmk) == 0) { g_free (str); str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], hmk); add_reader_info (str, 1); g_free (str); return j; } } else { if (g_strcmp0(str, hmk) == 0 && this_reader -> lattice.sp_group -> settings[j].origin == end+1) { g_free (str); str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], hmk); add_reader_info (str, 1); g_free (str); return j; } } g_free (str); } } return -1; } else { return -1; } } /*! \fn int group_info_from_hm_key (int spg, gchar * key_hm) \brief get the space group information using the HM key from the CIF file \param spg space group \param key_hm HM key */ int group_info_from_hm_key (int spg, gchar * key_hm) { int i, j; gchar * str; gchar * exts[2] = {"h", "r"}; gchar * orig[2] = {"1", "2"}; gchar * key = NULL; gchar * hmk = NULL; gchar * hma, * hmb; gchar * hmkey = substitute_string (key_hm, "'", NULL); //hmkey = substitute_string (hmkey, "/", "s"); this_reader -> setting = -1; if (strstr(hmkey,":")) { key = g_strdup_printf ("%s", hmkey); hmk = g_strdup_printf ("%s", strtok (key, ":")); hma = g_strdup_printf ("%s:", hmk); hmb = replace_markup (hmkey, hma, NULL); i = strlen(hmb); hmb = g_ascii_strdown (hmb, i); for (i=0; i<2; i++) { if (g_strcmp0(hmb, exts[i]) == 0) { this_reader -> setting = i; break; } } g_free (hma); g_free (key); if (this_reader -> setting < 0) { for (i=0; i<2; i++) { if (g_strcmp0(hmb, orig[i]) == 0) { j = get_space_group_from_hm (hmk); this_reader -> setting = (spg) ? get_setting_from_hm (hmk, i) : 0; if (! j && this_reader -> setting < 0) { this_reader -> setting = 0; str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], key_hm); add_reader_info (str, 1); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; g_free (hmk); g_free (hmb); return j; } } } g_free (hmb); } else { hmk = g_strdup_printf ("%s", hmkey); } j = get_space_group_from_hm (hmk); this_reader -> setting = (spg || j) ? get_setting_from_hm (hmk, -1) : 0; g_free (hmk); if (! j && this_reader -> setting < 0) { str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], key_hm); add_reader_info (str, 1); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; return (spg) ? (j) ? j : spg : j; } /*! \fn gboolean cif_get_cell_data (int linec, int conf) \brief get the cell data from the CIF file \param linec total number of lines \param conf configuration to read */ gboolean cif_get_cell_data (int linec, int conf) { gchar * cellkeys[3] = {"length_a", "length_b", "length_c"}; gchar * cellangs[3] = {"angle_alpha", "angle_beta", "angle_gamma",}; int i, j; gchar * str = NULL; if (! conf || (conf && active_project -> steps == 1)) { this_reader -> lattice.box = g_malloc0(active_project -> steps*sizeof*this_reader -> lattice.box); } i = (conf && active_project -> steps == 1) ? 0 : conf; for (j=0; j<3; j++) { str = cif_retrieve_value (linec, conf, "_cell", cellkeys[j], TRUE, TRUE, TRUE); if (! str) { str = g_strdup_printf (_("Lattice parameters: impossible to retrieve the '%s' parameter !\n"), box_prop[0][j]); add_reader_info (str, 0); g_free (str); return FALSE; } this_reader -> lattice.box[i].param[0][j] = string_to_double ((gpointer)str); if (i) { if (this_reader -> lattice.box[i].param[0][j] != this_reader -> lattice.box[i-1].param[0][j]) active_cell -> npt = TRUE; } #ifdef DEBUG g_debug ("CIF:: box[%d][%d]= %f", i, j, this_reader -> lattice.box[i].param[0][j]); #endif g_free (str); str = cif_retrieve_value (linec, conf, "_cell", cellangs[j], TRUE, TRUE, TRUE); if (! str) { str = g_strdup_printf (_("Lattice parameters: impossible to retrieve the '%s' parameter !\n"), box_prop[1][j]); add_reader_info (str, 0); g_free (str); return FALSE; } this_reader -> lattice.box[i].param[1][j] = string_to_double ((gpointer)str); g_free (str); if (i) { if (this_reader -> lattice.box[i].param[1][j] != this_reader -> lattice.box[i-1].param[1][j]) active_cell -> npt = TRUE; } #ifdef DEBUG g_debug ("CIF:: angle[%d][%d]= %f", i, j, this_reader -> lattice.box[i].param[1][j]); #endif } this_reader -> lattice.ltype = 0; compute_lattice_properties (& this_reader -> lattice, i); for (i=0; i<3; i++) this_reader -> lattice.cextra[i] = 1; return TRUE; } /*! \fn int cif_get_space_group (int linec, int conf) \brief get the space group from the CIF file \param linec total number of lines \param conf configuration to read */ int cif_get_space_group (int linec, int conf) { gchar * symkey[2] = {"int_tables_number", "group_it_number"}; gchar * str = NULL; int spg = 0; int i, j, k, l; for (i=0; i<2; i++) { str = cif_retrieve_value (linec, conf, "_symmetry", symkey[i], TRUE, FALSE, FALSE); if (str) { spg = (int)string_to_double ((gpointer)str); break; } } if (! spg) { str = cif_retrieve_value (linec, conf, "_space_group", "it_number", TRUE, FALSE, FALSE); if (str) { spg = (int)string_to_double ((gpointer)str); } } gchar * hmkey = NULL; hmkey = cif_retrieve_value (linec, conf, "_symmetry", "space_group_name_h-m", TRUE, FALSE, FALSE); if (! hmkey) { hmkey = cif_retrieve_value (linec, conf, "_symmetry", "name_h-m_alt", TRUE, FALSE, FALSE); } if (! hmkey && ! spg) { add_reader_info (_("Space group: no space group and no H-M symbol found !\n"), 1); return FALSE; } #ifdef DEBUG if (spg) g_debug ("CIF:: Space group:: N°= %d, name= %s", spg, groups[spg-1]); if (hmkey) g_debug ("CIF:: H-M symbol:: %s", hmkey); #endif if (spg) { if (! read_space_group (NULL, spg-1)) return FALSE; } if (hmkey) { i = group_info_from_hm_key (spg, hmkey); if (! spg && ! i) { add_reader_info (_("Space group: no space group found, unknown H-M symbol !\n"), 1); #ifdef DEBUG g_debug ("CIF:: No space group found, unknown H-M symbol !"); #endif } else if (spg && ! i) { str = g_strdup_printf (_("Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[spg-1], hmkey); add_reader_info (str, 1); g_free (str); #ifdef DEBUG g_debug ("CIF:: Space group and H-M symbol do not match:: spg= %d, hm= %d", spg, i); #endif } else if (i && ! spg) { spg = i; } if (! this_reader -> lattice.sp_group) { if (! read_space_group (NULL, spg-1)) return FALSE; } } gchar * lat; int res = spg; if (spg > 1) { str = cif_retrieve_value (linec, conf, "_space_group", "it_coordinate_system_code", TRUE, FALSE, FALSE); if (str) { str = substitute_string (str, "'", NULL); for (i=0; i<40; i++) { if (g_strcmp0(str, cif_coord_opts[i][0]) == 0) { if (i < 18) { if (spg < 3 || spg > 15) { res = 0; break; } if (str[0] == '-') { k = (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[2])); str = g_strdup_printf ("%c%c", str[0], str[1]); } else { k = (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[1])); str = g_strdup_printf ("%c", str[0]); } l = 0; for (j=0; j< this_reader -> lattice.sp_group -> nums; j++) { this_reader -> lattice.sp_group -> sid = j; get_origin (this_reader -> lattice.sp_group); lat = get_string_from_origin (this_reader -> lattice.sp_group); if (g_strcmp0(lat, str) == 0) l ++; if (l == k) { if (j < this_reader -> setting) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); this_reader -> setting = j; break; } } } else if (i < 36) { if (spg < 16 || spg > 74) { res = 0; break; } k = 0; if (str[0] == '1' || str[0]=='2') { k = (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[0])); str = replace_markup (str, g_strdup_printf("%d", k), NULL); } l = 0; for (j=0; j< this_reader -> lattice.sp_group -> nums; j++) { lat = g_strdup_printf ("%s%s%s", this_reader -> lattice.sp_group -> settings[j].pos[0], this_reader -> lattice.sp_group -> settings[j].pos[1], this_reader -> lattice.sp_group -> settings[j].pos[2]); if (g_strcmp0(lat, str) == 0) { if (j < this_reader -> setting || this_reader -> lattice.sp_group -> settings[j].origin != k) { add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); } this_reader -> setting = j; l = 1; break; } } if (! l) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); } else if (i < 38) { if (spg < 75 || (spg > 142 && spg < 195)) { res = 0; break; } j = i - 36; if (j < this_reader -> setting) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); this_reader -> setting = j; } else { if (spg < 143 || spg > 165) { res = 0; break; } j = i - 38; if (j < this_reader -> setting) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); this_reader -> setting = j; } } } g_free (str); } if (spg > 142 && spg < 168) { // Trigonal space group gboolean correct_this = FALSE; box_info * box = (conf && active_project -> steps == 1) ? & this_reader -> lattice.box[0] : & this_reader -> lattice.box[conf]; switch (this_reader -> setting) { case 0: if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2]) { correct_this = TRUE; } } break; case 1: if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == 90.0 && box -> param[1][2] == 120.0) { correct_this = TRUE; } } break; } if (correct_this) { gchar * setc[2] = {i18n("hexagonal"), i18n("rhombohedral")}; str = g_strdup_printf (_("Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n"), spg, groups[spg-1], _(setc[this_reader -> setting]), _(setc[! this_reader -> setting])); add_reader_info (str, 1); g_free (str); this_reader -> setting = ! this_reader -> setting; } } // Test space group vs. box parameters: this_reader -> lattice.sp_group -> sid = this_reader -> setting; if (! test_lattice (NULL, & this_reader -> lattice)) { str = g_strdup_printf (_("Space group and lattice parameters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system.\n")); add_reader_info (str, 0); g_free (str); res = -1; } } this_reader -> lattice.sp_group -> sid = this_reader -> setting; get_origin (this_reader -> lattice.sp_group); return res; } /*! \fn int open_cif_configuration (int line_start, int line_end, int cif_step) \brief open CIF configuration in CIF file \param linec total number of lines \param conf configuration to read */ int open_cif_configuration (int linec, int conf) { int res; int i, j, k, l, m, n; int cid; if (cif_get_cell_data (linec, conf)) { i = cif_get_space_group (linec, conf); if (conf && active_project -> steps > 1 && i != saved_group) { #ifdef DEBUG g_debug ("CIF:: SP group changes between configuration:: conf= %d, saved_group= %d, new_group= %d", conf, saved_group, i); #endif add_reader_info (_("Space group changes between configurations !\n"), 0); return 3; } else if (i > 0) { saved_group = i; #ifdef DEBUG g_debug ("CIF:: SP setting:: %d, name= %s", this_reader -> setting+1, this_reader -> lattice.sp_group -> settings[this_reader -> setting].name); #endif if (this_reader -> lattice.sp_group) get_origin (this_reader -> lattice.sp_group); } else if (i == 0) { // No space group found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve space group information !"); #endif } else if (cif_multiple && ! this_reader -> cartesian) { // Error in space group return 3; } } else if (! this_reader -> cartesian) { // Error no cell data using fractional coordinates return 3; } // Reading positions if (cif_get_symmetry_positions (linec, conf)) { if (! cif_use_symmetry_positions && this_reader -> num_sym_pos) { add_reader_info (_("Symmetry position(s) in CIF file\n"), 1); } } if (cif_use_symmetry_positions && ! this_reader -> num_sym_pos) { add_reader_info (_("No symmetry position(s) in CIF file\n"), 0); return 3; } if (cif_get_atomic_coordinates (linec, conf)) { cid = (conf && active_project -> steps == 1) ? 0 : conf; if (! this_reader -> cartesian) { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) { active_cell -> box[cid].param[i][j] = this_reader -> lattice.box[cid].param[i][j]; } active_cell -> box[cid].vect[i][j] = this_reader -> lattice.box[cid].vect[i][j]; } } active_cell -> ltype = 1; active_cell -> pbc = TRUE; active_cell -> has_a_box = TRUE; if (this_reader -> lattice.sp_group) { active_cell -> crystal = TRUE; active_cell -> sp_group = duplicate_space_group (this_reader -> lattice.sp_group); } } res = 0; if (cif_use_symmetry_positions) { gchar * str = g_strdup_printf (_("Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n"), cif_occ[this_reader -> rounding], cif_sites[1]); add_reader_info (str, 1); g_free (str); this_reader -> cartesian = TRUE; compute_lattice_properties (active_cell, cid); double spgpos[3][4]; int max_pos = this_reader -> num_sym_pos * this_reader -> natomes; gboolean dist_message = FALSE; gboolean low_occ = FALSE; gboolean save_it; vec3_t f_pos, c_pos; gboolean * save_pos = allocbool (max_pos); mat4_t pos_mat; atom at, bt; distance dist; double u; vec3_t * all_pos = g_malloc0(max_pos*sizeof*all_pos); int * all_origin = allocint (max_pos); int * cif_pos = allocint (this_reader -> natomes); double ** cryst_pos = allocddouble (this_reader -> natomes, 3); double ** occ_pos = g_malloc0(sizeof*occ_pos); int ** lot_pos = g_malloc0(sizeof*lot_pos); double * list_occ = allocdouble (this_reader -> natomes); double val; int vbl; int * list_pos = allocint (this_reader -> natomes); for (i=0; i natomes; i++) { list_pos[i] = i; list_occ[i] = this_reader -> occupancy[i]; } for (i=1; i natomes; i++) { val = list_occ[i]; vbl = list_pos[i]; for (j=i-1; j>-1; j--) { if (list_occ[j] >= val) break; list_occ[j+1] = list_occ[j]; list_pos[j+1] = list_pos[j]; } list_occ[j+1] = val; list_pos[j+1] = vbl; } int num_pos = 0; int pos_max = 0; // The following might be modified for reaction CIF: // - this_reader -> coord[i] and this_readaer -> coord[j] are not necessarily equal // - both the disorder group and the occupancy matters in place of the coordinates for (i=0; i<2; i++) { for (j=0; j natomes; j++) { k = list_pos[j]; if (! j) { num_pos = 0; for (l=0; l<3; l++) cryst_pos[num_pos][l] = this_reader -> coord[k][l]; cif_pos[num_pos] = 1; if (i) { occ_pos[num_pos][0] = this_reader -> occupancy[k]; lot_pos[num_pos][0] = this_reader -> lot[k]; } num_pos ++; pos_max = 1; } else { save_it = TRUE; for (l=0; l coord[k][0] == cryst_pos[l][0] && this_reader -> coord[k][1] == cryst_pos[l][1] && this_reader -> coord[k][2] == cryst_pos[l][2]) { save_it = FALSE; break; } } if (save_it) { for (l=0; l<3; l++) cryst_pos[num_pos][l] = this_reader -> coord[k][l]; cif_pos[num_pos] = 1; if (i) { occ_pos[num_pos][0] = this_reader -> occupancy[k]; lot_pos[num_pos][0] = this_reader -> lot[k]; } num_pos ++; } else { if (i) { occ_pos[l][cif_pos[l]] = this_reader -> occupancy[k]; lot_pos[l][cif_pos[l]] = this_reader -> lot[k]; } cif_pos[l] ++; pos_max = max (pos_max, cif_pos[l]); } } } if (! i) { occ_pos = allocddouble (num_pos, pos_max); lot_pos = allocdint (num_pos, pos_max); } } g_free (list_occ); g_free (list_pos); for (i=0; i num_sym_pos; i++) { for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", this_reader -> sym_pos[i][j]); for (k=0; k<3; k++) { spgpos[j][k] = get_val_from_wyckoff (vect_comp[k], this_reader -> sym_pos[i][j]); } if (tmp_pos) { spgpos[j][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[j][3] = 0.0; } } pos_mat = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); for (j=0; j lattice.box[cid].frac_to_cart, f_pos); all_pos[l].x = c_pos.x; all_pos[l].y = c_pos.y; all_pos[l].z = c_pos.z; all_origin[l] = j; save_it = TRUE; if (l) { at.x = all_pos[l].x; at.y = all_pos[l].y; at.z = all_pos[l].z; for (k=0; k rounding)) { CPU_time = clock (); m = (CPU_time - (j+17)*all_id[i]); prob = random3_(& m); m = round (prob * (all_id[i]-1)); pick_it = ! taken_pos[i][m]; if (pick_it) { site_lot[i][m] = k; taken_pos[i][m] = TRUE; l ++; tot_pos ++; } } } } crystal_data * cryst = allocate_crystal_data (tot_pos, this_reader -> nspec + this_reader -> object_to_insert); i = 0; int * cryst_lot = allocint (cryst -> objects); int * from_origin = allocint (num_pos); for (j=0; j coord[i] = g_malloc0(sizeof*cryst -> coord[i]); cryst -> coord[i][0].x = all_pos[j].x; cryst -> coord[i][0].y = all_pos[j].y; cryst -> coord[i][0].z = all_pos[j].z; cryst -> pos_by_object[i] = 1; cryst_lot[i] = site_lot[k][l]; if (cryst_lot[i] < 0) { cryst -> at_by_object[i] = get_atomic_object_by_origin (cif_object, - cryst_lot[i] - 1, 0) -> atoms; } else { cryst -> at_by_object[i] = 1; } i ++; } from_origin[k] ++; } } g_free (site_lot); g_free (all_origin); g_free (from_origin); g_free (all_pos); g_free (save_pos); g_free (taken_pos); g_free (all_id); i = 0; for (j=0; j objects; j++) { i += cryst -> at_by_object[j] * cryst -> pos_by_object[j]; } if (! conf || active_project -> steps == 1) { active_project -> natomes = i; allocatoms (active_project); } atomic_object * c_obj; int * spec_num = allocint (120); i = 0; for (j=0; j objects; j++) { if (cryst_lot[j] < 0) { k = - cryst_lot[j] - 1; c_obj = get_atomic_object_by_origin (cif_object, k, 0); for (l=0; l atoms; l++) { m = c_obj -> at_list[l].sp; n = c_obj -> old_z[m]; spec_num[n] ++; active_project -> atoms[cid][i].sp = n; active_project -> atoms[cid][i].x = cryst -> coord[j][0].x + c_obj -> at_list[l].x; active_project -> atoms[cid][i].y = cryst -> coord[j][0].y + c_obj -> at_list[l].y; active_project -> atoms[cid][i].z = cryst -> coord[j][0].z + c_obj -> at_list[l].z; i ++; } } else { k = (int)this_reader -> z[cryst_lot[j]]; spec_num[k] ++; active_project -> atoms[cid][i].sp = k; active_project -> atoms[cid][i].x = cryst -> coord[j][0].x; active_project -> atoms[cid][i].y = cryst -> coord[j][0].y; active_project -> atoms[cid][i].z = cryst -> coord[j][0].z; i ++; } } g_free (this_reader -> nsps); int * tmp_nsps = allocint (120); int * tmp_spid = allocint (120); i = 0; for (j=0; j<120; j++) { if (spec_num[j]) { tmp_nsps[i] = spec_num[j]; tmp_spid[j] = i; i++; } } this_reader -> nspec = i; this_reader -> nsps = allocint (i); for (i=0; i nspec; i++) this_reader -> nsps[i] = tmp_nsps[i]; g_free (tmp_nsps); g_free (this_reader -> z); this_reader -> z = allocdouble (i); i = 0; for (j=0; j<120; j++) { if (spec_num[j]) { this_reader -> z[i] = (double)j; i ++; } } for (i=0; i natomes; i++) { j = active_project -> atoms[cid][i].sp; k = tmp_spid[j]; active_project -> atoms[cid][i].sp = k; } g_free (tmp_spid); if (low_occ) { add_reader_info (_("The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n"), 1); } if (dist_message) { add_reader_info (_("Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n "), 1); } } } else { // No coordinates found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve atomic coordinates !"); #endif res = 2; } return res; } /*! \fn int open_cif_file (int linec) \brief open CIF file \param linec Total number of lines */ int open_cif_file (int linec) { gchar * frackeys[3] = {"fract_x", "fract_y", "fract_z"}; gchar * cartkeys[3] = {"cartn_x", "cartn_y", "cartn_z"}; gchar * str = NULL; int cif_action = 0; int cif_step = 1; int cif_site; int cif_occup = 0; int i, j; cif_multiple = TRUE; // Determine the number of configuration(s) by checking the presence // of the instruction used to declare atomic coordinates this_reader -> steps = cif_get_value ("_atom_site", frackeys[0], 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); if (! this_reader -> steps) { this_reader -> steps = cif_get_value ("_atom_site", cartkeys[0], 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); this_reader -> cartesian = TRUE; } else { // How to treat occupancy cif_occup = cif_get_value ("_atom_site", _("occupancy"), 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); if (cif_occup) { this_reader -> rounding = iask (_("Please select how to handle occupancy"), _("Select how to handle occupancy"), 5, MainWindow); if (this_reader -> rounding < 0 || this_reader -> rounding > 2) this_reader -> rounding = 2; if (! cif_use_symmetry_positions) { str = g_strdup_printf (_("Occupancy %s\n\t%s\n"), cif_occ[this_reader -> rounding], cif_sites[cif_use_symmetry_positions]); add_reader_info (str, 1); g_free (str); } } } if (this_reader -> steps > 1) { str = g_strdup_printf (_("It seems the CIF file contains %d distinct configurations\n"), this_reader -> steps); add_reader_info (str, 1); g_free (str); if (cif_use_symmetry_positions) { str = g_strdup_printf (_("Impossible to use symmetry positions with multiple configurations\n")); add_reader_info (str, 1); g_free (str); } } if (this_reader -> steps > 1 && ! cif_use_symmetry_positions) { cif_site = cif_get_value ("_atom_site", "disorder_group", 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); if (cif_occup == this_reader -> steps && cif_occup == cif_site) { add_reader_info (_("This CIF file could be describing a trajectory or a chemical reaction.\n"), 1); // This is where to ask what to do ! // Read like a chemical reaction: read one configuration sort coordinates by occupancy // Read all as trajectory CIF file: forget about using occupancy to sort coordinates // - possible if the number of atom(s) by configuration remains constant // Read only a selected configuration and: // - read as normal CIF file, forget about using occupancy to sort coordinates // Because what follow will depend on this choice /* cif_action = iask ("Please select how to process the data in the CIF file", "Select how to process data", 3, MainWindow); this_reader -> chemical = ! cif_action; cif_action = (cif_action == 1) ? 0 : 1; */ cif_action = iask (_("Please select how to process the data in the CIF file"), _("Select how to process data"), 4, MainWindow); } else { add_reader_info (_("This CIF file could be describing a trajectory.\n"), 1); cif_action = iask (_("Please select how to process the data in the CIF file"), _("Select how to process data"), 4, MainWindow); } } else { cif_action = 1; } if (cif_action && this_reader -> steps > 1) { // We need to select the step to work on str = g_strdup_printf (_("Select the configuration c, c ∈ [1-%d]"), this_reader -> steps); cif_step = 0; while (! cif_step) { cif_step = iask (_("Please select the configuration to work on"), str, 0, MainWindow); if (cif_step < 1 || cif_step > this_reader -> steps) cif_step = 0; } g_free (str); } if (cif_action) { active_project -> steps = 1; if (this_reader -> steps > 1) { str = g_strdup_printf (_("Working on configuration N°%d\n"), cif_step); add_reader_info (str, 1); g_free (str); } } if (cif_action) { return open_cif_configuration (linec, cif_step - 1); } else { active_project -> steps = this_reader -> steps; g_free (active_cell -> box); active_cell -> box = g_malloc0(this_reader -> steps*sizeof*active_cell -> box); // For each configuration open it: i = 0; for (j=0; j steps; j++) { this_reader -> nspec = 0; if (this_reader -> nsps) { g_free (this_reader -> nsps); this_reader -> nsps = NULL; } i = open_cif_configuration (linec, j); if (i) return i; } return 0; } } atomes_1.3.1/src/project/readers/read_vas.c0000664000175000017500000001544215212624223020325 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_vas.c * @short Functions to read VASP atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_vas.c' * * Contains: * - The functions to read VASP atomic coordinates * * List of functions: int vas_get_atom_coordinates (int sli); int open_vas_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif /*! \fn int vas_get_atom_coordinates (int sli) \brief get the atomic coordinates from the VASP file \param sli Correction parameters depending on the VASP file version */ int vas_get_atom_coordinates (int sli) { int i, j, k, l; gchar * lia[4] = {"a", "b", "c", "d"}; allocatoms (active_project); #ifdef OPENMP int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (active_project -> steps < numth) { if (numth >= 2*(active_project -> steps-1)) { doatoms = TRUE; } else { numth = active_project -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = 1 + i*(active_project -> natomes + 1) + sli; #pragma omp parallel for num_threads(numth) private(j,this_line,saved_line,this_word) shared(i,k,lia,coord_line,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,this_line,saved_line,this_word) shared(lia,coord_line,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = 1 + i*(active_project -> natomes + 1) + sli; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; for (i=1; i steps; i++) { for (j=0; j natomes; j++) { if (active_project -> atoms[i-1][j].sp != active_project -> atoms[i][j].sp) { add_reader_info (g_strdup_printf (_("Error - chemical species changes between steps %d and %d, for atom %d !"), i, i+1, j+1), 0); return 2; } } } #else line_node * tmp_line; tail = head; k = 0; for (i=0; i next; g_free (tmp_line); k ++; } for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif i = 0; for (j=0; j nspec; j++) { for (k=0; k nsps[j]; k++) { for (l=0; l steps; l++) { active_project -> atoms[l][i].sp = j; } i ++; } } return 0; } /*! \fn int open_vas_file (int linec) \brief open VASP file \param linec Number of lines in the file */ int open_vas_file (int linec) { int i, j; j = 0; for (i=5; i<8; i++) { if ((linec - i)%(this_reader -> natomes + 1) == 0) j = i; } if (! j) return 2; reader_info ("xdatcar", _("Number of atoms"), this_reader -> natomes); active_project -> steps = (linec-j) / (this_reader -> natomes + 1); reader_info ("xdatcar", _("Number of steps"), active_project -> steps); active_project -> natomes = this_reader -> natomes; return vas_get_atom_coordinates (j); } atomes_1.3.1/src/project/readers/read_isaacs.c0000664000175000017500000011142715212624223020777 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_isaacs.c * @short Functions to read an ISAACS XML file \n Functions to write an ISAACS XML file * @author Sébastien Le Roux */ /* * This file: 'read_isaacs.c' * * Contains: * - The functions to read an ISAACS XML file - The functions to write an ISAACS XML file * * List of functions: int XmlwriterFilename (const char *uri); int write_xml (const char * filetosave); int get_spec_from_data (xmlChar * data); int setprop (xmlNodePtr pnode); int testopening (char * tdata, char * tfichier); int setchemistry (xmlNodePtr xsnode); int setbox (xmlNodePtr boxnode); int setpbc (xmlNodePtr pbcnode); int setcutoffs (xmlNodePtr cutnode); int settime(xmlNodePtr timenode); int check_xml (const char * filetocheck); size_t strfind (char * ida); gboolean file_exists(const char * filename); gchar * open_xml (const char * filetoread); xmlNodePtr findnode (xmlNodePtr startnode, char * nname); */ #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" extern int open_coordinate_file (int id); #define NFORMATS 7 char * reg_types[NFORMATS] = {"XYZ file", "Chem3D file", "CPMD trajectory", "VASP trajectory", "multiple XYZ file", "multiple Chem3D file", "PDB file"}; /*! \fn size_t strfind (char * ida) \brief size of a string without spaces \param ida */ size_t strfind (char * ida) { size_t a, b, c; a = strlen(ida); b = 0; for ( c=0 ; c < a ; c++) { if (ida[c] != ' ') { b ++; } } return b; } /*! \fn int XmlwriterFilename (const char * uri) \brief write ISAACS XML file \param uri the file name */ int XmlwriterFilename (const char * uri) { int rc; int i, j; xmlTextWriterPtr writer; char * val; char * ncut; size_t lgt; /* Create a new XmlWriter for uri, with no compression. */ writer = xmlNewTextWriterFilename(uri, 0); if (writer == NULL) return 0; rc = xmlTextWriterSetIndent(writer, 1); if (rc < 0) return 0; /* Start the document with the xml default for the version, * encoding MY_ENCODING and the default for the standalone * declaration. */ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL); if (rc < 0) return 0; rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" I.S.A.A.C.S. v1.0 XML file ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST "isaacs-xml"); if (rc < 0) return 0; /* Start the "data" element. Since this is the first * element, this will be the root element of the document. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Data format and file containing the configuration(s) ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"data"); if (rc < 0) return 0; int reg = 0; if (active_project -> tfile < 2) { reg = (active_project -> steps > 1) ? 4 : 0; } else if (active_project -> tfile == 2) { reg = (active_project -> steps > 1) ? 5 : 1; } else if (active_project -> tfile < 5) { reg = 2; } else if (active_project -> tfile < 6) { reg = 3; } else if (active_project -> tfile < 9) { reg = 6; } else { return 0; } rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"type", "%s", reg_types[reg]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"file", "%s", active_project -> coordfile); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "chemistry" element. label id="0"> label> ... */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Chemistry information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"chemistry"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"atoms", "%d", active_project -> natomes); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"species"); if (rc < 0) return 0; val = g_strdup_printf("%d",active_project -> nspec); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"number", BAD_CAST val); g_free (val); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"label"); if (rc < 0) return 0; val = g_strdup_printf("%d",i); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"id", BAD_CAST val); g_free (val); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatString (writer, "%s", active_chem -> label[i]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"element"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"symbol", BAD_CAST active_chem -> label[i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"name", "%s ", active_chem -> element[i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"z", "%d", (int)active_chem -> chem_prop[CHEM_Z][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"mass", "%f", active_chem -> chem_prop[CHEM_M][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"rad", "%d", 0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"radius", "%f", active_chem -> chem_prop[CHEM_R][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"nscatt", "%f", active_chem -> chem_prop[CHEM_N][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"xscatt", "%f", active_chem -> chem_prop[CHEM_Z][i]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "box" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Box information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"box"); if (rc < 0) return 0; if (active_cell -> ltype == 1) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"edges"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a", "%f", active_box -> param[0][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b", "%f", active_box -> param[0][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c", "%f", active_box -> param[0][2]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"angles"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"alpha", "%f", active_box -> param[1][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"beta", "%f", active_box -> param[1][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"gamma", "%f", active_box -> param[1][2]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } else { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"edges"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"angles"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"alpha", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"beta", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"gamma", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"vectors"); if (rc < 0) return 0; if (active_cell -> ltype == 2) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.x", "%f", active_box -> vect[0][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.y", "%f", active_box -> vect[0][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.z", "%f", active_box -> vect[0][2]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.x", "%f", active_box -> vect[1][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.y", "%f", active_box -> vect[1][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.z", "%f", active_box -> vect[1][2]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.x", "%f", active_box -> vect[2][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.y", "%f", active_box -> vect[2][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.z", "%f", active_box -> vect[2][2]); if (rc < 0) return 0; } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.z", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.z", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.z", "%f", 0.0); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "pbc" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" PBC information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"pbc"); if (rc < 0) return 0; if (active_cell -> pbc) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"apply", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"apply", "%s", "FALSE"); } if (rc < 0) return 0; if (active_cell -> frac) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractional", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractional", "%s", "FALSE"); } if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractype", "%d", active_cell -> frac); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "cutoffs" element. label[spi]-active_chem -> label[spj]> label[spi]-active_chem -> label[spj]> */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Cutoffs information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"cutoffs"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"total", "%f", active_chem -> grtotcutoff); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"partials"); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++ ) { for ( j=0 ; j nspec ; j++ ) { lgt = 10; lgt += strfind (active_chem -> label[i]) + strlen("-") + strfind(active_chem -> label[j]); ncut = g_malloc0(lgt*sizeof*ncut); strncpy (ncut, active_chem -> label[i], strfind(active_chem -> label[i])); strcat (ncut, "-"); strncat (ncut, active_chem -> label[j], strfind(active_chem -> label[j])); rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST ncut, "%f", active_chem -> cutoffs[i][j]); if (rc < 0) return 0; g_free (ncut); ncut=NULL; } } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "time series" element.
*/ if (active_project -> steps > 1) { rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Time series ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"time-series"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"dt", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"unit", "t [%s]", untime[active_project -> tunit]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"ndt", "%d", 1); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } /* Start the "project" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Apply project ")); if (rc < 0) return 0; if (active_project -> run) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"project", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"project", "%s", "FALSE"); } if (rc < 0) return 0; // Closing "" rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndDocument(writer); if (rc < 0) return 0; xmlFreeTextWriter(writer); return 1; } /*! \fn int write_xml (const char * filetosave) \brief write XML file \param filetosave File to write */ int write_xml (const char * filetosave) { /* first, the file version */ int res=XmlwriterFilename(filetosave); /* * Cleanup function for the XML library. */ xmlCleanupParser(); /* * this is to debug memory for regression tests */ xmlMemoryDump(); return res; } /*! \fn gboolean file_exists(const char * filename) \brief file exists ? \param filename File name */ gboolean file_exists(const char * filename) { FILE * file; if ((file = fopen(filename, "r"))) { fclose(file); return TRUE; } return FALSE; } /*! \fn xmlNodePtr findnode (xmlNodePtr startnode, char * nname) \brief find XML node \param startnode Starting node \param nname Node name to find */ xmlNodePtr findnode (xmlNodePtr startnode, char * nname) { xmlNodePtr tmp; tmp = startnode; while (g_strcmp0 ((char *)(tmp -> name), nname) != 0) { if (tmp -> next == NULL) { return NULL; } tmp = tmp -> next; } return tmp; } /*! \fn int get_spec_from_data (xmlChar * data) \brief get atomic species from data \param data the data */ int get_spec_from_data (xmlChar * data) { int i; for ( i=0 ; i nspec ; i++) { if (g_strcmp0 (exact_name((char *)data), active_chem -> label[i]) == 0) { return i; } } return -1; } /*! \fn int setprop (xmlNodePtr pnode) \brief read chemical properties from XML node \param pnode the XML node */ int setprop (xmlNodePtr pnode) { int i, res; xmlAttrPtr pspec; xmlNodePtr idn, ptnode, ptn; xmlChar * data; ptnode=pnode; for ( i=0 ; i nspec ; i++) { ptnode = findnode(ptnode, "element"); if (ptnode == NULL) { res=6; goto pend; } pspec = ptnode -> properties; idn = pspec -> children; data = xmlNodeGetContent(idn); res = get_spec_from_data(data); xmlFree (data); if (res < 0) { res=6; goto pend; } ptnode = ptnode -> children; ptn = findnode(ptnode, "name"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); if (g_strcmp0 (exact_name((char *)data), active_chem -> element[res]) != 0) { xmlFree (data); res=6; goto pend; } xmlFree (data); ptn = findnode(ptnode, "z"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); if ((int)active_chem -> chem_prop[CHEM_Z][res] != (int)string_to_double ((gpointer)data)) { xmlFree (data); res=6; goto pend; } xmlFree (data); ptn = findnode(ptnode, "mass"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_M][res] = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "rad"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); // val = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "radius"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_R][res] = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "nscatt"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_N][res] = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "xscatt"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_X][res] = string_to_double ((gpointer)data); xmlFree (data); ptnode = ptnode -> parent; ptnode = ptnode -> next; } res = 0; pend: return res; } /*! \fn int testopening (char * tdata, char * tfichier) \brief test atomic coordinates file opening \param tdata Type of coordinates \param tfichier File name */ int testopening (char * tdata, char * tfichier) { int i, j; char * err; j = -1; for ( i=0 ; i -1) { if (file_exists (tfichier)) { switch (j) { case 0: active_project -> tfile = 0; break; case 1: active_project -> tfile = 2; break; case 2: active_project -> tfile = 3; break; case 3: active_project -> tfile = 5; break; case 4: active_project -> tfile = 0; break; case 5: active_project -> tfile = 2; break; case 6: active_project -> tfile = 7; break; } active_project -> coordfile = tfichier; if (open_coordinate_file (active_project -> tfile) == 0) { return 0; } else { return 11; } } else { j=4; err=g_strdup_printf(_("The %s\n %s\n from the XML file does not exist\n"), tdata, tfichier); show_error (err, 0, MainWindow); g_free (err); return j; } } else { show_error (_("Unknown data format in XML file\n"), 0, MainWindow); j=4; return j; } } /*! \fn int setchemistry (xmlNodePtr xsnode) \brief read chemistry data from node \param xsnode the XML node */ int setchemistry (xmlNodePtr xsnode) { xmlNodePtr idn, cs, xnode; xmlAttrPtr xspec; xmlChar * data; int ats, res, i; double val; xnode = xsnode -> children; cs = findnode(xnode, "atoms"); if (cs == NULL) { res=5; goto xend; } data = xmlNodeGetContent(cs); val = string_to_double ((gpointer)data); ats = val; if (ats != active_project -> natomes) { show_warning (_("The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n"), MainWindow); res=5; goto xend; } else { cs = findnode(xnode, "species"); if (cs == NULL) { res=5; goto xend; } xspec = cs -> properties; idn = xspec -> children; data = xmlNodeGetContent(idn); val = string_to_double ((gpointer)data); ats = val; if (ats != active_project -> nspec) { show_warning (_("The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n"), MainWindow); res = 5; goto xend; } else { cs = cs -> children; ats = 0; for ( i=0 ; i nspec ; i++) { cs = findnode(cs, "label"); if (cs == NULL) { res=5; goto xend; } data = xmlNodeGetContent(cs); res = get_spec_from_data (data); if (res < 0) { res=5; goto xend; } else { ats ++; } } if (ats != active_project -> nspec) { res=5; goto xend; } xnode = xsnode -> children; res = setprop (xnode); } } xend: return res; } /*! \fn int setbox (xmlNodePtr boxnode) \brief read box properties from node \param boxnode the XML node */ int setbox (xmlNodePtr boxnode) { int box; xmlNodePtr bnode, ba, bb; xmlChar * data; double val; bnode = boxnode -> children; ba=findnode(bnode, "edges"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "a"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[0][0]= val; bb=findnode(ba, "b"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[0][1]= val; bb=findnode(ba, "c"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[0][2]= val; ba=findnode(bnode, "angles"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "alpha"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[1][0] = val; bb=findnode(ba, "beta"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[1][1]= val; bb=findnode(ba, "gamma"); if (bb == NULL) { box=7; goto bend; } if (active_box -> param[0][0] != 0.0 && active_box -> param[0][1] != 0.0 && active_box -> param[0][2] != 0.0 && active_box -> param[1][0] != 0.0 && active_box -> param[1][1] != 0.0 && active_box -> param[1][2] != 0.0) { active_cell -> ltype = 1; } else { active_cell -> ltype = 0; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[1][2]= val; ba=findnode(bnode, "vectors"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "a.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[0][0]= val; bb=findnode(ba, "a.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[0][1]= val; bb=findnode(ba, "a.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[0][2]= val; bb=findnode(ba, "b.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[1][0]= val; bb=findnode(ba, "b.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[1][1]= val; bb=findnode(ba, "b.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[1][2]= val; bb=findnode(ba, "c.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[2][0]= val; bb=findnode(ba, "c.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[2][1]= val; bb=findnode(ba, "c.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[2][2]= val; if (active_box -> vect[0][0] != 0.0 && active_box -> vect[0][1] != 0.0 && active_box -> vect[0][2] != 0.0 && active_box -> vect[1][0] != 0.0 && active_box -> vect[1][1] != 0.0 && active_box -> vect[1][2] != 0.0 && active_box -> vect[2][0] != 0.0 && active_box -> vect[2][1] != 0.0 && active_box -> vect[2][2] != 0.0) { active_cell -> ltype = 2; } box = 0; bend: return box; } /*! \fn int setpbc (xmlNodePtr pbcnode) \brief read the PBC information from node \param pbcnode the XML node */ int setpbc (xmlNodePtr pbcnode) { int pbc;//, j; xmlNodePtr pnode, bnode; xmlChar * data; //double val; pnode = pbcnode -> children; bnode=findnode(pnode, "apply"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); active_cell -> pbc = 0; if (g_strcmp0 ((char *)data, (char *)"TRUE") == 0) { active_cell -> pbc = 1; } xmlFree (data); bnode=findnode(pnode, "fractional"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); active_cell -> frac = 0; if (g_strcmp0 ((char *)data, (char *)"TRUE") == 0) { xmlFree (data); bnode=findnode(pnode, "fractype"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); //val=string_to_double ((gpointer)data); //j = val; xmlFree (data); active_cell -> frac = 1; } pbc=0; pend: return pbc; } /*! \fn int setcutoffs (xmlNodePtr cutnode) \brief read bond cutoffs from node \param cutnode the XML node */ int setcutoffs (xmlNodePtr cutnode) { int cut; int i, j; xmlNodePtr cnode, cn; xmlChar * data; double val; char * ncut; size_t lgt; cnode = cutnode -> children; cn = findnode(cnode, "total"); if (cn == NULL) { cut=9; goto cend; } data = xmlNodeGetContent(cn); val=string_to_double ((gpointer)data); xmlFree (data); active_chem -> grtotcutoff = val; cn = findnode(cnode, "partials"); if (cn == NULL) { cut=9; goto cend; } cnode = cn -> children; for ( i=0 ; i nspec ; i++ ) { for ( j=0 ; j nspec ; j++ ) { lgt=10; lgt+=strfind(active_chem -> label[i]) + strlen("-") + strfind(active_chem -> label[j]); ncut = g_malloc0(lgt*sizeof*ncut); strncpy (ncut, active_chem -> label[i], strfind(active_chem -> label[i])); strcat (ncut, "-"); strncat (ncut, active_chem -> label[j], strfind(active_chem -> label[j])); cn = findnode(cnode, ncut); if (cn == NULL) { cut=9; goto cend; } data = xmlNodeGetContent(cn); val = string_to_double ((gpointer)data); xmlFree (data); active_chem -> cutoffs[i][j] = val; g_free (ncut); ncut = NULL; } } cut=0; cend: return cut; } /*! \fn int settime(xmlNodePtr timenode) \brief read MD information from node \param timenode the XML node */ int settime(xmlNodePtr timenode) { int i, j; //double val, delta_t; //int tunit, ndtbs; int tps; xmlChar * data; xmlNodePtr tnode, tn; tnode = timenode -> children; tn = findnode(tnode, "dt"); if (tn == NULL) { tps=10; goto tend; } data = xmlNodeGetContent(tn); //val = string_to_double ((gpointer)data); //delta_t = val; xmlFree (data); tn = findnode(tnode, "unit"); if (tn == NULL) { tps=10; goto tend; } data = xmlNodeGetContent(tn); j=-1; for ( i=0 ; i<5 ; i++) { if (g_strcmp0 ((char *)data, g_strdup_printf ("t [%s]", untime[i])) == 0) j=i; } xmlFree (data); if (j == -1) { tps=10; goto tend; } if (j < 5) { //tunit = j+1; } tn = findnode(tnode, "ndt"); if (tn != NULL) { data = xmlNodeGetContent(tn); //val = string_to_double ((gpointer)data); //ndtbs = val; xmlFree (data); } tps=0; tend: return tps; } /*! \fn int check_xml (const char * filetocheck) \brief check the opening of ISAACS XML file \param filetocheck File name */ int check_xml (const char * filetocheck) { int res; xmlDoc * doc; xmlTextReaderPtr reader; xmlChar * cdata, * cfichier; xmlNodePtr racine, node; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetocheck, NULL, 0); if (reader != NULL) { res = 0; doc = xmlParseFile(filetocheck); if (doc == NULL) { res=1; goto end; } else { racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine->name), "isaacs-xml") != 0) { res=2; goto end; } else { node = racine -> children; node = findnode(node, "data"); if (node == NULL) { res=3; goto end; } node = node -> children; node = findnode(node, "type"); if (node == NULL) { res=3; goto end; } cdata = xmlNodeGetContent(node); node = findnode(node, "file"); if (node == NULL) { xmlFree (cdata); res=3; goto end; } cfichier = xmlNodeGetContent(node); res= testopening((char *)cdata, (char *)cfichier); xmlFree (cdata); xmlFree (cfichier); if (res != 0) { goto end; } else { node = racine -> children; node = findnode(node, "chemistry"); if (node == NULL) { res=3; goto end; } res= setchemistry(node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "pbc"); if (node == NULL) { res=3; goto end; } res=setpbc (node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "box"); if (node == NULL) { res=3; goto end; } active_cell -> box = g_malloc0(sizeof*active_cell -> box); active_box = & active_cell -> box[0]; res=setbox (node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "cutoffs"); if (node == NULL) { res=3; goto end; } active_chem -> cutoffs = allocddouble (active_project -> nspec, active_project -> nspec); res=setcutoffs (node); if (res != 0) { goto end; } if (active_project -> steps > 1) { node = racine -> children; node = findnode(node, "time-series"); if (node == NULL) { res=3; goto end; } res=settime (node); if (res != 0) { goto end; } } node = racine -> children; node = findnode(node, "project"); if (node == NULL) { res=3; goto end; } cdata = xmlNodeGetContent(node); if (g_strcmp0 ((char *)cdata, (char *)"TRUE") == 0) { active_project -> run = 1; } else { active_project -> run = 0; } xmlFree (cdata); } } } } else { res=1; } end: /* * Cleanup function for the XML library. */ if (reader != NULL) xmlFreeTextReader(reader); /* *Free the global variables that may *have been allocated by the parser. */ xmlCleanupParser(); return res; } /*! \fn gchar * open_xml (const char * filetoread) \brief Open ISAACS XML file \param filetoread File name */ gchar * open_xml (const char * filetoread) { int oxml; oxml = check_xml(filetoread); switch(oxml) { case 1: return (_("Impossible to open the ISAACS project file (XML) file\n")); break; case 2: return (_("The file is not a valid ISAACS project file (XML) file\n")); break; case 3: return (_("The ISAACS project file (XML) file is incomplete\n")); break; case 4: return (_("Problem(s) in the <data> section of the ISAACS project file (XML)\n")); break; case 5: return (_("Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n")); break; case 6: return (_("Problem(s) in the <element> section of the ISAACS project file (XML)\n")); break; case 7: return (_("Problem(s) in the <box> section of the ISAACS project file (XML)\n")); break; case 8: return (_("Problem(s) in the <pbc> section of the ISAACS project file (XML)\n")); break; case 9: return (_("Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n")); break; case 10: return (_("Problem(s) in the <time-series> section of the ISAACS project file (XML)\n")); break; default: return NULL; break; } } atomes_1.3.1/src/project/readers/read_coord.c0000664000175000017500000003605015212624223020640 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_coord.c * @short General functions to import atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_coord.c' * * Contains: * - The general functions to import atomic coordinates * * List of functions: gboolean set_dummy_in_use (gchar * this_word); int open_coord_file (gchar * filename, int fti); void add_reader_info (gchar * info, int mid); void reader_info (gchar * type, gchar * sinf, int val); void format_error (int stp, int ato, gchar * mot, int line); void check_for_species (double v, int ato); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "cbuild_edit.h" #ifdef OPENMP # include #endif extern int open_xyz_file (int linec); extern int open_c3d_file (int linec); extern int open_pdb_file (int linec); extern int open_trj_file (int linec); extern int open_vas_file (int linec); extern int open_cif_configuration (int linec, int conf); extern int open_cif_file (int linec); extern int open_hist_file (int linec); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); extern const gchar * dfi[2]; extern atom_search * cif_search; extern atomic_object * cif_object; extern gboolean cif_multiple; FILE * coordf; coord_file * this_reader; gchar ** coord_line = NULL; gchar * this_line = NULL; char * this_word; line_node * head = NULL; line_node * tail = NULL; /*! \fn void add_reader_info (gchar * info, int mid) \brief append information message to the reader information \param info the reader information message \param mid message type (0 = error, 1 = warning) */ void add_reader_info (gchar * info, int mid) { int i; gboolean append = TRUE; for (i=0; i msg; i++) { if (g_strcmp0(this_reader -> info[i], info) == 0) { append = FALSE; break; } } if (append) { if (! this_reader -> msg) { this_reader -> info = g_malloc0(sizeof*this_reader -> info); } else { this_reader -> info = g_realloc (this_reader -> info, (this_reader -> msg+1)*sizeof*this_reader -> info); } this_reader -> info[this_reader -> msg] = g_strdup_printf ("%s", info); this_reader -> msg ++; } if (! mid) this_reader -> mid = 0; } /*! \fn void reader_info (gchar * type, gchar * sinf, int val) \brief display reader information \param type File type \param sinf Information message \param val Value to present */ void reader_info (gchar * type, gchar * sinf, int val) { g_print ("Reading coordinates [%s]: %s = %d\n", type, sinf, val); } /*! \fn void format_error (int stp, int ato, gchar * mot, int line) \brief Message to display an error message \param stp the MD step id \param ato Atom id \param mot Message \param line Line with the error */ void format_error (int stp, int ato, gchar * mot, int line) { gchar * str; if (ato < 0) { str = g_strdup_printf (_("Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !"), stp, mot, line); } else { str = g_strdup_printf (_("Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !"), stp, ato, mot, line+1); } add_reader_info (str, 0); g_free (str); } /*! \fn int set_v_dummy (gchar * this_word) \brief check if dummy is used for unknown species, if not then ask what to do \param this_word the chemical species label */ int set_v_dummy (gchar * this_word) { int i; for (i=0; i ndummy; i++) { if (g_strcmp0(this_reader -> dummy[i], this_word) == 0) { return i+1; } } gchar ** dummy = NULL; if (this_reader -> ndummy) { dummy = duplicate_strings (this_reader -> ndummy, this_reader -> dummy); g_free (this_reader -> dummy); } this_reader -> ndummy ++; this_reader -> dummy = g_malloc0(this_reader -> ndummy*sizeof*this_reader -> dummy); if (dummy) { for (i=0; i ndummy-1; i++) { this_reader -> dummy[i] = g_strdup_printf ("%s", dummy[i]); } } this_reader -> dummy[this_reader -> ndummy-1] = g_strdup_printf ("%s", this_word); // Dummy added, then do we use this dummy ? gchar * str = g_strdup_printf (_("Use dummy atom(s) for unknown %s species ?"), this_word); gboolean use_dummy = ask_yes_no (_("Use dummy atom(s) ?"), str, GTK_MESSAGE_QUESTION, MainWindow); g_free (str); if (use_dummy) { str = g_strdup_printf (_("Using dummy atom(s) for unknown %s species"), this_word); add_reader_info (str, 1); g_free (str); return this_reader -> ndummy; } else { str = g_strdup_printf (_("No dummy atom(s) for unknown %s species"), this_word); add_reader_info (str, 1); g_free (str); return 0; } } /*! \fn void check_for_species (double v, int ato) \brief Fill the species for each atom and the associated data \param v Z \param ato the atom id */ void check_for_species (double v, int ato) { int i; gboolean add_spec; add_spec = TRUE; if (this_reader -> nspec) { for (i=0; i nspec; i++) { if (this_reader -> z[i] == v) { if (this_reader -> cartesian) { active_project -> atoms[0][ato].sp = i; } else { this_reader -> lot[ato] = i; } this_reader -> nsps[i] ++; add_spec = FALSE; break; } } } if (add_spec) { if (this_reader -> nspec) { this_reader -> z = g_realloc (this_reader -> z, (this_reader -> nspec+1)*sizeof*this_reader -> z); this_reader -> nsps = g_realloc (this_reader -> nsps, (this_reader -> nspec+1)*sizeof*this_reader -> nsps); } if (this_reader -> cartesian) { active_project -> atoms[0][ato].sp = this_reader -> nspec; } else { this_reader -> lot[ato] = this_reader -> nspec; } this_reader -> nsps[this_reader -> nspec] = 1; this_reader -> z[this_reader -> nspec] = v; this_reader -> nspec ++; } } /*! \fn int open_coord_file (gchar * filename, int fti) \brief open atomic coordinates file \param filename the file name \param fti the type of coordinates */ int open_coord_file (gchar * filename, int fti) { int res = 0; #ifdef OPENMP struct stat status; res = stat (filename, & status); if (res == -1) { add_reader_info (_("Error - cannot get file statistics !\n"), 0); return 1; } int fsize = status.st_size; #endif coordf = fopen (filename, dfi[0]); if (! coordf) { add_reader_info (_("Error - cannot open coordinates file !\n"), 0); return 1; } int i, j, k, l; #ifdef OPENMP gchar * coord_content = g_malloc0(fsize*sizeof*coord_content); fread (coord_content, fsize, 1, coordf); fclose (coordf); int linecount = 0; for (j=0; j next = g_malloc0(sizeof*tail -> next); if (fti == 9 || fti == 10) { tail -> next -> prev = g_malloc0(sizeof*tail -> next -> prev); tail -> next -> prev = tail; } tail = tail -> next; } tail -> line = g_strdup_printf ("%s", buf); tail -> line = substitute_string (tail -> line, "\n", "\0"); i ++; } g_free (buf); fclose (coordf); #endif if (i) { this_reader -> cartesian = TRUE; if (fti < 2) { res = open_xyz_file (i); } else if (fti == 2) { res = open_c3d_file (i); } else if (fti < 5) { res = open_trj_file (i); } else if (fti < 7) { res = open_vas_file (i); } else if (fti > 6 && fti < 9) { res = open_pdb_file (i); } else if (fti > 8 && fti < 12) { if (fti == 11) cif_use_symmetry_positions = TRUE; this_reader -> cartesian = FALSE; if (fti == 10) { res = open_cif_file (i); } else { active_project -> steps = this_reader -> steps = 1; this_reader -> rounding = -1; cif_multiple = FALSE; res = open_cif_configuration (i, 0); } } else if (fti == 12) { res = open_hist_file (i); } } else { res = 1; } #ifndef OPENMP if (tail) g_free (tail); #endif if (! res) { if (fti == 9 && ! this_reader -> cartesian) { // this_reader -> lattice.sp_group -> sid = 2; // get_origin (this_reader -> lattice.sp_group); if (! cif_use_symmetry_positions) { // Test for all configurations, do build each: // - a single trajectory ? // - each in a single project ? i = 1; crystal_dist_chk = TRUE; crystal_crowded = FALSE; crystal_low_warning = TRUE; for (j=0; j steps; j++) { k = build_crystal (FALSE, active_project, j, TRUE, FALSE, & this_reader -> lattice, MainWindow); if (! k) { add_reader_info (_("Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n"), 0); res = 3; goto end; } else if (k < 0) { add_reader_info (_("Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n"), 0); res = 3; goto end; } else if (k > 1 && i) { add_reader_info (_("Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n"), 1); if (this_reader -> num_sym_pos && active_project -> steps == 1) { add_reader_info (_("\nAnother model will be built using included symmetry positions\n"), 1); cif_use_symmetry_positions = TRUE; } i = 0; } } } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; active_project -> atoms[i][j].pick[0] = FALSE; active_project -> atoms[i][j].cloned = FALSE; } } if (active_project -> steps > 1) { active_project -> skt_corr_threshold = (active_project -> steps < 20) ? 1 : 10; active_project -> skt_n_data_sets = min (5, active_project -> steps); active_project -> sqw_n_data_sets = 5; } if (fti != 9 || this_reader -> cartesian) { active_project -> nspec = this_reader -> nspec; active_project -> chemistry = alloc_chem_data (active_project -> nspec); active_project_changed (activep); k = l = 0; reader_info (coord_files_ext[fti], _("Number of species"), active_project -> nspec); for (i=0; i nspec; i++) { active_chem -> chem_prop[CHEM_Z][i] = this_reader -> z[i]; j = (int)this_reader -> z[i]; if (this_reader -> z[i] < 1.0) { active_chem -> label[i] = g_strdup_printf ("%s", this_reader -> dummy[l]); active_chem -> element[i] = g_strdup_printf (_("Dummy %s"), this_reader -> dummy[l]); active_chem -> chem_prop[CHEM_M][i] = 1.0; active_chem -> chem_prop[CHEM_R][i] = 0.5; l ++; } else { active_chem -> label[i] = g_strdup_printf ("%s", periodic_table_info[j].lab); active_chem -> element[i] = g_strdup_printf ("%s", periodic_table_info[j].name); active_chem -> chem_prop[CHEM_M][i] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][i] = set_radius_ (& j, & k); if (! active_chem -> chem_prop[CHEM_R][i]) { gchar * str = g_strdup_printf (_("For species %s, radius is equal to 0.0 !\n"), active_chem -> label[i]); add_reader_info (str, 1); g_free (str); } active_chem -> chem_prop[CHEM_N][i] = set_neutron_ (& j); active_chem -> chem_prop[CHEM_X][i] = active_chem -> chem_prop[CHEM_Z][i]; } active_chem -> nsps[i] = this_reader -> nsps[i]; g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", coord_files_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); } } else { reader_info (coord_files_ext[fti], _("Number of species"), active_project -> nspec); for (i=0; i nspec; i++) { g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", coord_files_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); } } } end:; if (! (fti == 9 && cif_use_symmetry_positions) || res) { if (cif_search) { g_free (cif_search); cif_search = NULL; } if (cif_object) { g_free (cif_object); cif_object = NULL; } cif_use_symmetry_positions = FALSE; } return res; } atomes_1.3.1/src/project/readers/read_npt.c0000664000175000017500000001737115212624223020340 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_npt.c * @short Functions to read NPT data * @author Sébastien Le Roux */ /* * This file: 'read_npt.c' * * Contains: * - The functions to read NPT data * * List of functions: int cell_get_lattice (int format); int open_cell_file (int format, gchar * filename); void add_cell_info (gchar * info); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include #include "cbuild_edit.h" #include "readers.h" #ifdef G_OS_WIN32 typedef intptr_t ssize_t; extern ssize_t getline(char **lineptr, size_t *n, FILE *stream); #endif FILE * cellp; typedef struct cell_file cell_file; struct cell_file { cell_info lattice; gchar * info; }; cell_file * this_cell; /*! \fn void add_cell_info (gchar * info) \brief append information message to the cell information \param info the cell information message */ void add_cell_info (gchar * info) { this_cell -> info = (this_cell -> info) ? g_strdup_printf ("%s\n%s", this_cell -> info, info) : g_strdup_printf ("%s", info); } /*! \fn int cell_get_lattice (int format) \brief get the lattice parameters format from the file \param format File format */ int cell_get_lattice (int format) { size_t length = 0; gchar * line = NULL; int i, j, k; char c; i = 0; for (c = getc(cellp); c != EOF; c = getc(cellp)) if (c == '\n') i ++; j = (format == 0 || format == 2) ? 1 : (format == 1) ? 2 : 3; k = i / j; i = i - k * j; if (i) return 0; if (k != active_project -> steps) { add_cell_info (g_strdup_printf (_("Wrong file format - %d steps in coordinates file"), active_project -> steps)); add_cell_info (g_strdup_printf (_("Wrong file format - %d steps found in cell file"), k)); return 0; } rewind (cellp); this_cell -> lattice.box = g_malloc0(k*sizeof*this_cell -> lattice.box); for (i=0; i steps; i++) { if (format < 2) { for (j=0; j<2; j++) { if (! j || format == 1) { getline (& line, & length, cellp); this_line = g_strdup_printf ("%s", line); this_word = strtok (this_line, " "); } else { this_word = strtok (NULL, " "); } k = 0; if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = string_to_double ((gpointer)this_word); } } else { for (j=0; j<3; j++) { if (! j || format == 3) { getline (& line, & length, cellp); this_line = g_strdup_printf ("%s", line); this_word = strtok (this_line, " "); } else { this_word = strtok (NULL, " "); } k = 0; if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = string_to_double ((gpointer)this_word); } } } this_cell -> lattice.npt = FALSE; for (i=1; i steps; i++) { if (format < 2) { for (j=0; j<2; j++) { for (k=0; k<3; k++) { if (this_cell -> lattice.box[i].param[j][k] != this_cell -> lattice.box[0].param[j][k]) { this_cell -> lattice.npt = TRUE; break; } } if (this_cell -> lattice.npt) break; } if (this_cell -> lattice.npt) break; } else { for (j=0; j<3; j++) { for (k=0; k<3; k++) { if (this_cell -> lattice.box[i].vect[j][k] != this_cell -> lattice.box[0].vect[j][k]) { this_cell -> lattice.npt = TRUE; break; } } if (this_cell -> lattice.npt) break; } if (this_cell -> lattice.npt) break; } } return 1; } /*! \fn int open_cell_file (int format, gchar * filename) \brief open the file that contains the cell parameters \param format File format \param filename File name */ int open_cell_file (int format, gchar * filename) { int res; int i, j, k, l; cellp = fopen (filename, "r"); if (cellp) { this_cell = g_malloc0(sizeof*this_cell); if (cell_get_lattice(format)) { active_cell -> ltype = format/2 + 1; active_cell -> pbc = TRUE; active_cell -> npt = this_cell -> lattice.npt; i = (active_cell -> npt) ? active_project -> steps : 1; if (active_cell -> npt) { g_free (active_cell -> box); active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; } for (j=0; j box[j].param[k][l] = this_cell -> lattice.box[j].param[k][l]; } } } else { for (k=0; k<3; k++) { for (l=0; l<3; l++) { active_cell -> box[j].vect[k][l] = this_cell -> lattice.box[j].vect[k][l]; } } } } active_cell -> has_a_box = TRUE; active_cell -> crystal = FALSE; res = 0; } else { // No or wrong cell data found #ifdef DEBUG g_debug ("CELL-NPT:: Impossible to retrieve cell parameters !"); #endif res = 2; } } else { // Cannot open file res = 1; } if (this_cell) { if (this_cell -> info) { show_error (this_cell -> info, 0, MainWindow); } if (this_cell) { if (this_cell -> info) g_free (this_cell -> info); if (this_cell -> lattice.box) g_free (this_cell -> lattice.box); g_free (this_cell); this_cell = NULL; } } return res; } atomes_1.3.1/src/project/project.c0000664000175000017500000000663415212624223016565 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file project.c * @short Project management functions * @author Sébastien Le Roux */ /* * This file: 'project.c' * * Contains: * - Project management functions * * List of functions: void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]); void send_steps_ (int * steps); project * get_project_by_id (int p); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "bind.h" workspace workzone; project * active_project = NULL; chemical_data * active_chem = NULL; coord_info * active_coord = NULL; cell_info * active_cell = NULL; box_info * active_box = NULL; image * active_image = NULL; glwin * active_glwin = NULL; project * opengl_project = NULL; /*! \fn void save_pos_ (int * nat, int lot[*nat], int * num, double xpos[*num], double ypos[*num], double zpos[*num]) \brief retrieve atomic coordinates from Fortran90 \param nat Number of atoms \param lot List of chemical species by atoms \param num Number of coordinates (NA x NS) \param xpos x coordinates \param ypos y coordinates \param zpos z coordinates */ void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]) { int i, j, k; k = 0; for ( i=0 ; i < active_project -> steps ; i++ ) { for (j=0; j < active_project -> natomes; j++) { active_project -> atoms[i][j].x = xpos[k]; active_project -> atoms[i][j].y = ypos[k]; active_project -> atoms[i][j].z = zpos[k]; active_project -> atoms[i][j].sp = lot[j]-1; active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; if (active_glwin == NULL) { active_project -> atoms[i][j].pick[0] = FALSE; } else if (! active_image -> selected[0] -> selected) { active_project -> atoms[i][j].pick[0] = FALSE; } active_project -> atoms[i][j].cloned = FALSE; k++; } } } /*! \fn void send_steps_ (int * steps) \brief retrieve the number of MD steps from Fortran90 \param steps the number of MD steps */ void send_steps_ (int * steps) { active_project -> steps = * steps; } /*! \fn project * get_project_by_id (int p) \brief get project pointer using id number \param p the id number */ project * get_project_by_id (int p) { project * tmp = workzone.first; int i; for (i=0; i id == p) return tmp; if (tmp -> next != NULL) tmp = tmp -> next; } return NULL; } atomes_1.3.1/src/project/project.h0000664000175000017500000001041415212624223016561 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file project.h * @short Function declarations for reading atomes project file \n Function declarations for saving atomes project file * @author Sébastien Le Roux */ /* * This header file: 'project.h' * * Contains: - Function declarations for reading atomes project file - Function declarations for saving atomes project file */ #ifndef PROJECT_H_ #define PROJECT_H_ extern float project_file_version; extern gboolean reading_project; extern atomes_error * project_error; #define IODEBUG FALSE extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); // Read extern int read_atom_a (FILE * fp, project * this_proj, int s, int a); extern int read_atom_b (FILE * fp, project * this_proj, int s, int a); extern int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid); extern int read_project_curve (FILE * fp, int wid, int pid); extern int read_mol (FILE * fp); extern int read_bonding (FILE * fp); extern int read_dlp_field_data (FILE * fp, project * this_proj); extern int read_lmp_field_data (FILE * fp, project * this_proj); extern int read_cpmd_data (FILE * fp, int cid, project * this_proj); extern int read_cp2k_data (FILE * fp, int cid, project * this_proj); extern gchar * read_this_string (FILE * fp); extern void alloc_proj_data (project * this_proj, int cid); extern int open_project (FILE * fp, int wid); // Save extern int save_atom_a (FILE * fp, project * this_proj, int s, int a); extern int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid); extern int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid); extern int save_dlp_field_data (FILE * fp, project * this_proj); extern int save_lmp_field_data (FILE * fp, project * this_proj); extern int save_cpmd_data (FILE * fp, int cid, project * this_proj); extern int save_cp2k_data (FILE * fp, int cid, project * this_proj); extern int save_this_string (FILE * fp, gchar * string); extern int save_mol (FILE * fp, project * this_proj); extern int save_bonding (FILE * fp, project * this_proj); extern int save_project (FILE * fp, project * this_proj, int wid); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern int * save_color_map (glwin * view); extern void restore_color_map (glwin * view, int * colm); extern colormap * allocate_color_map (int pts, project * this_proj); extern gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init); #ifdef GTK4 extern G_MODULE_EXPORT gboolean edit_tab (GtkWidget * widget, GdkEvent * event, gpointer fdata); #else extern G_MODULE_EXPORT gboolean edit_tab (GtkWidget * widget, GdkEventButton * event, gpointer fdata); #endif extern void init_curves_and_calc (project * this_proj); extern void init_project (gboolean alloc_box); extern void update_analysis_availability (project * this_proj); extern int update_project (); extern void clean_view (); extern void view_buffer (GtkTextBuffer * buffer); extern void update_insert_combos (); extern void close_project (project * to_close); extern void to_close_this_project (int to_activate, project * this_proj); extern void hide_current_project (project * to_hide); extern void active_project_changed (int id); extern void opengl_project_changed (int id); extern G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata); extern void add_project (GtkTreeStore * store, int i); extern void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost); extern void debugioproj (project * this_proj, gchar * iost); #endif atomes_1.3.1/src/project/update_p.c0000664000175000017500000002054115212624223016711 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file update_p.c * @short Functions to update a project \n Functions to activate a project * @author Sébastien Le Roux */ /* * This file: 'update_p.c' * * Contains: * - The functions to update a project - The functions to activate a project * * List of functions: int update_project (); void prep_calc_actions (); void active_project_changed (int id); void opengl_project_changed (int id); void update_analysis_availability (project * this_proj); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "workspace.h" extern GtkWidget * work_menu (int p, int c); extern GtkTreeStore * tool_model; /*! \fn void prep_calc_actions () \brief prepare analysis widgets */ void prep_calc_actions () { int i; gchar * str; // Depends on the number of calculations available for (i=0; i analysis) { remove_action (str); } else { if (i < ANG) { if (active_project -> analysis[i]) { if (active_project -> analysis[i] -> avail_ok) { add_analysis_action (i); } else { remove_action (str); } } else { remove_action (str); } } else { if (active_project -> analysis[i+1]) { if (active_project -> analysis[i+1] -> avail_ok) { add_analysis_action (i); } else { remove_action (str); } } else { remove_action (str); } } } g_free (str); } } /*! \fn void update_analysis_availability (project * this_proj) \brief update analysis availability for a target projet \param this_proj the target project */ void update_analysis_availability (project * this_proj) { if (this_proj -> natomes && this_proj -> analysis) { if (this_proj -> cell.has_a_box) { if (this_proj -> analysis[GDR]) this_proj -> analysis[GDR] -> avail_ok = TRUE; if (this_proj -> analysis[SKD]) this_proj -> analysis[SKD] -> avail_ok = TRUE; if (this_proj -> analysis[SQD] && this_proj -> analysis[GDR]) this_proj -> analysis[SQD] -> avail_ok = this_proj -> analysis[GDR] -> calc_ok; if (this_proj -> analysis[GDK] && this_proj -> analysis[SKD]) this_proj -> analysis[GDK] -> avail_ok = this_proj -> analysis[SKD] -> calc_ok; if (this_proj -> steps > 1 && this_proj -> analysis[SKT]) this_proj -> analysis[SKT] -> avail_ok = TRUE; } else { if (this_proj -> analysis[GDR]) this_proj -> analysis[GDR] -> avail_ok = FALSE; if (this_proj -> analysis[SQD]) this_proj -> analysis[SQD] -> avail_ok = FALSE; if (this_proj -> analysis[SKD]) this_proj -> analysis[SKD] -> avail_ok = FALSE; if (this_proj -> analysis[GDK]) this_proj -> analysis[GDK] -> avail_ok = FALSE; } if (this_proj -> analysis[BND]) this_proj -> analysis[BND] -> avail_ok = TRUE; if (this_proj -> analysis[ANG]) this_proj -> analysis[ANG] -> avail_ok = TRUE; if (this_proj -> analysis[RIN]) this_proj -> analysis[RIN] -> avail_ok = TRUE; if (this_proj -> analysis[CHA]) this_proj -> analysis[CHA] -> avail_ok = TRUE; if (this_proj -> analysis[SPH]) this_proj -> analysis[SPH] -> avail_ok = TRUE; if (this_proj -> steps > 1 && this_proj -> analysis[MSD]) this_proj -> analysis[MSD] -> avail_ok = TRUE; } else if (this_proj -> analysis) { int i; for (i=0; i analysis[i]) this_proj -> analysis[i] -> avail_ok = FALSE; } } } /*! \fn int update_project () \brief update project: send data to Fortran90, and update calculation interactors */ int update_project () { #ifdef DEBUG g_debug ("UPDATE_PROJECT: to update"); #endif int i, j; if (! active_project -> newproj && active_project -> natomes) { i = alloc_data_ (& active_project -> natomes, & active_project -> nspec, & active_project -> steps); if (i == 1) { to_read_pos (); int * lot = allocint (active_project -> natomes); for (j=0; j natomes; j++) lot[j] = active_project -> atoms[0][j].sp; read_data_ (lot, active_chem -> nsps); g_free (lot); read_chem_ (active_chem -> chem_prop[CHEM_M], active_chem -> chem_prop[CHEM_R], active_chem -> chem_prop[CHEM_N], active_chem -> chem_prop[CHEM_X]); j = 0; prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps, & j); } else { return 0; } if (active_project -> run) { j = (active_cell -> npt) ? active_project -> steps : 1; for (i=0; i box[i].vect, active_cell -> box[i].param[0], active_cell -> box[i].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } cutoffsend (); } } if (! atomes_render_image) update_analysis_availability (active_project); #ifdef DEBUG g_debug ("UPDATE_PROJECT: updated"); #endif return 1; } /*! \fn void active_project_changed (int id) \brief change the active project \param id the id of the new active project */ void active_project_changed (int id) { char * errp = NULL; if (! atomes_render_image) { if (id != inactep && inactep < nprojects && ! atomes_logo) clean_view (); gtk_tree_store_clear (tool_model); } activep = id; active_project = get_project_by_id (id); active_chem = active_project -> chemistry; active_coord = active_project -> coord; active_cell = & active_project -> cell; active_box = NULL; active_glwin = NULL; active_image = NULL; if (active_project -> modelgl != NULL) { active_glwin = active_project -> modelgl; if (active_glwin -> anim != NULL) { active_image = active_glwin -> anim -> last -> img; } } if (active_cell -> box) { if (active_project -> steps == 1 || ! active_cell -> npt || ! active_image) { active_box = & active_cell -> box[0]; } else if (active_cell -> npt) { active_box = & active_cell -> box[active_image -> step]; } } if (update_project() == 0) { errp = g_strdup_printf (_("Impossible to update project: %s\n"), active_project -> name); show_error (errp, 0, MainWindow); g_free (errp); } else { if (! atomes_render_image) { if (active_project -> analysis) { prep_calc_actions (); g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(edition_actions[0])); if (active_cell -> npt) { remove_action (edition_acts[1].action_name); } else { g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(edition_actions[1])); } g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(edition_actions[2])); fill_tool_model (); correct_this_window_title (curvetoolbox, g_strdup_printf (_("Toolboxes - %s"), prepare_for_title(active_project -> name))); correct_this_window_title (MainWindow, g_strdup_printf ("%s - %s", PACKAGE, prepare_for_title (active_project -> name))); } } inactep = activep; } activew = activep; } /*! \fn void opengl_project_changed (int id) \brief change the OpenGL project \param id the id of the new OpenGL project */ void opengl_project_changed (int id) { activev = id; opengl_project = get_project_by_id(id); } atomes_1.3.1/src/project/read_field.c0000664000175000017500000007041215212624223017170 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_field.c * @short Functions to read DLPOLY force field data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_field.c' * * Contains: * - The functions to read DLPOLY force field data in the atomes project file format * * List of functions: int read_field_atom (FILE * fp); int read_field_shell (FILE * fp); int read_field_constraint (FILE * fp); int read_field_pmf (FILE * fp); int read_field_rigid (FILE * fp); int read_field_tethered (FILE * fp, int fid); int read_field_prop (FILE * fp, int fid, int pid); int read_field_struct (FILE * fp, int fid); int read_field_molecule (FILE * fp, int fid); int read_field_body (FILE * fp, int fid); int read_field_external (FILE * fp, int fid); int read_dlp_field_data (FILE * fp, project * this_proj); int read_lmp_field_data (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /*! \fn int read_field_atom (FILE * fp) \brief read field atom properties from file \param fp the file pointer */ int read_field_atom (FILE * fp) { if (fread (& tmp_fat -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> fid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> afid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> name = read_this_string (fp); if (tmp_fat -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> mass, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> charge, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> frozen, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> frozen_id = allocbool(tmp_fat -> num); if (fread (tmp_fat -> frozen_id, sizeof(gboolean), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> list = allocint (tmp_fat -> num); if (fread (tmp_fat -> list, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> list_id = allocint (tmp_fat -> num); if (fread (tmp_fat -> list_id, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_shell (FILE * fp) \brief read field core shell data from file \param fp the file pointer */ int read_field_shell (FILE * fp) { if (fread (& tmp_fshell -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (tmp_fshell -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> m, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> z, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> k2, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> k4, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> vdw, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_constraint (FILE * fp) \brief read field constraint data from file \param fp the file pointer */ int read_field_constraint (FILE * fp) { if (fread (& tmp_fcons -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (tmp_fcons -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_pmf (FILE * fp) \brief read field mean force potential data from file \param fp the file pointer */ int read_field_pmf (FILE * fp) { if (fread (& tmp_fpmf -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fpmf -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fpmf -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (tmp_fpmf -> num, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i<2; i++) { tmp_fpmf -> list[i] = allocint (tmp_fpmf -> num[i]); if (fread (tmp_fpmf -> list[i], sizeof(int), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fpmf -> weight[i] = allocfloat (tmp_fpmf -> num[i]); if (fread (tmp_fpmf -> weight[i], sizeof(float), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fread (& tmp_fpmf -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fpmf -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_rigid (FILE * fp) \brief read field rigid constraints data from file \param fp the file pointer */ int read_field_rigid (FILE * fp) { if (fread (& tmp_frig -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_frig -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_frig -> list = allocint (tmp_frig -> num); if (fread (tmp_frig -> list, sizeof(int), tmp_frig -> num, fp) != tmp_frig -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_frig -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_frig -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_tethered (FILE * fp, int fid) \brief read field tethered data from file \param fp the file pointer \param fid the field id */ int read_field_tethered (FILE * fp, int fid) { if (fread (& tmp_ftet -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][0][tmp_ftet -> key]; tmp_ftet -> val = allocfloat (i); if (fread (tmp_ftet -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_prop (FILE * fp, int fid, int pid) \brief read field property from file \param fp the file pointer \param fid the field id \param pid the property id */ int read_field_prop (FILE * fp, int fid, int pid) { if (fread (& tmp_fprop -> pid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> fpid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = struct_id(pid+7); tmp_fprop -> aid = allocint (i); if (fread (tmp_fprop -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); i = fvalues[fid][pid+1][tmp_fprop -> key]; tmp_fprop -> val = allocfloat (i); if (fread (tmp_fprop -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_struct (FILE * fp, int fid) \brief read field structural properties from file \param fp the file pointer \param fid the field id */ int read_field_struct (FILE * fp, int fid) { if (fread (& tmp_fstr -> st, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fstr -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fstr -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i, j; i = struct_id(tmp_fstr -> st + 7); tmp_fstr -> aid = allocint (i); if (fread (tmp_fstr -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fstr-> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fstr -> def = g_malloc0(sizeof*tmp_fstr -> def); tmp_fprop = tmp_fstr -> def; if (read_field_prop(fp, fid, tmp_fstr -> st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (i) { tmp_fstr -> other = g_malloc0(sizeof*tmp_fstr -> other); tmp_fprop = tmp_fstr -> other; for (j=0; j st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (j < i-1) { tmp_fprop -> next = g_malloc0(sizeof*tmp_fprop -> next); tmp_fprop = tmp_fprop -> next; } } } return OK; } /*! \fn int read_field_molecule (FILE * fp, int fid) \brief read field molecule from file \param fp the file pointer \param fid the field id */ int read_field_molecule (FILE * fp, int fid) { if (fread (& tmp_fmol -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); //tmp_fmol -> mol = g_malloc0(sizeof*tmp_fmol -> mol); int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // if (i == 20) i = 1; tmp_fmol -> mol = & active_project -> modelfc -> mols[0][i]; tmp_fmol -> name = read_this_string (fp); if (tmp_fmol -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fmol -> multi, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol -> fragments = allocint (tmp_fmol -> multi); if (fread (tmp_fmol -> fragments, sizeof(int), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol -> atoms_id = g_malloc0(tmp_fmol -> mol -> natoms*sizeof*tmp_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { tmp_fmol -> atoms_id[i] = g_malloc0(tmp_fmol -> multi*sizeof*tmp_fmol -> atoms_id[i]); if (fread (tmp_fmol -> atoms_id[i], sizeof(dint), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fread (& tmp_fmol -> atoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol -> first_atom = g_malloc0(sizeof*tmp_fmol -> first_atom); tmp_fat = tmp_fmol -> first_atom; for (i=0; i atoms; i++) { if (read_field_atom(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> atoms-1) { tmp_fat -> next = g_malloc0(sizeof*tmp_fat -> next); tmp_fat = tmp_fat -> next; } } if (fread (& tmp_fmol -> shells, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> shells) { tmp_fmol -> first_shell = g_malloc0(sizeof*tmp_fmol -> first_shell); tmp_fshell = tmp_fmol -> first_shell; for (i=0; i shells; i++) { if (read_field_shell(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> shells - 1) { tmp_fshell -> next = g_malloc0(sizeof*tmp_fshell -> next); tmp_fshell = tmp_fshell -> next; } } } if (fread (& tmp_fmol -> constraints, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> constraints) { tmp_fmol -> first_constraint = g_malloc0(sizeof*tmp_fmol -> first_constraint); tmp_fcons = tmp_fmol -> first_constraint; for (i=0; i constraints; i++) { if (read_field_constraint(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> constraints - 1) { tmp_fcons -> next = g_malloc0(sizeof*tmp_fcons -> next); tmp_fcons = tmp_fcons -> next; } } } if (fread (& tmp_fmol -> pmfs, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> pmfs) { tmp_fmol -> first_pmf = g_malloc0(sizeof*tmp_fmol -> first_pmf); tmp_fpmf = tmp_fmol -> first_pmf; for (i=0; i pmfs; i++) { if (read_field_pmf(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> pmfs - 1) { tmp_fpmf -> next = g_malloc0(sizeof*tmp_fpmf -> next); tmp_fpmf = tmp_fpmf -> next; } } } if (fread (& tmp_fmol -> rigids, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> rigids) { tmp_fmol -> first_rigid = g_malloc0(sizeof*tmp_fmol -> first_rigid); tmp_frig = tmp_fmol -> first_rigid; for (i=0; i rigids; i++) { if (read_field_rigid(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> rigids - 1) { tmp_frig -> next = g_malloc0(sizeof*tmp_frig -> next); tmp_frig = tmp_frig -> next; } } } if (fread (& tmp_fmol -> tethered, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> tethered) { tmp_fmol -> first_tethered = g_malloc0(sizeof*tmp_fmol -> first_tethered); tmp_ftet = tmp_fmol -> first_tethered; for (i=0; i tethered; i++) { if (read_field_tethered(fp, fid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> tethered - 1) { tmp_ftet -> next = g_malloc0(sizeof*tmp_ftet -> next); tmp_ftet = tmp_ftet -> next; } } } if (fread (tmp_fmol -> nstruct, sizeof(int), 8, fp) != 8) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<8; i++) { if (tmp_fmol -> nstruct[i]) { tmp_fmol -> first_struct[i] = g_malloc0(sizeof*tmp_fmol -> first_struct[i]); tmp_fstr = tmp_fmol -> first_struct[i]; for (j=0; j nstruct[i]; j++) { if (read_field_struct (fp, fid)!= OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (j < tmp_fmol -> nstruct[i]-1) { tmp_fstr -> next = g_malloc0(sizeof*tmp_fstr -> next); tmp_fstr = tmp_fstr -> next; } } } } return OK; } /*! \fn int read_field_body (FILE * fp, int fid) \brief read field nth body data from file \param fp the file pointer \param fid the field id */ int read_field_body (FILE * fp, int fid) { if (fread (& tmp_fbody -> bd, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fbody -> bd == 0) { tmp_fbody -> fpid = allocint (2); if (fread (tmp_fbody -> fpid, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } int i, j; i = body_at(tmp_fbody -> bd); tmp_fbody -> na = allocint (i); if (fread (tmp_fbody -> na, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fbody -> ma = g_malloc0(i*sizeof*tmp_fbody -> ma); tmp_fbody -> a = g_malloc0(i*sizeof*tmp_fbody -> a); for (j=0; j ma[j] = allocint (tmp_fbody -> na[j]); if (fread (tmp_fbody -> ma[j], sizeof(int), tmp_fbody -> na[j], fp) != tmp_fbody -> na[j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fbody -> a[j] = allocint (tmp_fbody -> na[j]); if (fread (tmp_fbody -> a[j], sizeof(int), tmp_fbody -> na[j], fp) != tmp_fbody -> na[j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } i = fvalues[fid][9+tmp_fbody -> bd][tmp_fbody -> key]; tmp_fbody -> val = allocfloat (i); if (fread (tmp_fbody -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_external (FILE * fp, int fid) \brief read field external data from file \param fp the file pointer \param fid the field id */ int read_field_external (FILE * fp, int fid) { if (fread (& tmp_fext -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fext -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][14][tmp_fext -> key]; tmp_fext -> val = allocfloat (i); if (fread (tmp_fext -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fext -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_dlp_field_data (FILE * fp, project * this_proj) \brief read force field data from file \param fp the file pointer \param this_proj the target project */ int read_dlp_field_data (FILE * fp, project * this_proj) { int i, j, k, l, m, n; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! i) return OK; this_proj -> force_field[0] = g_malloc0(sizeof*this_proj -> force_field[0]); // Allocate force field data this_proj -> force_field[0] -> sys_opts = allocdouble (17); this_proj -> force_field[0] -> io_opts = allocdouble (23); this_proj -> force_field[0] -> ana_opts = allocdouble (17); this_proj -> force_field[0] -> elec_opts = allocdouble (11); this_proj -> force_field[0] -> vdw_opts = allocdouble (6); this_proj -> force_field[0] -> met_opts = allocdouble (2); this_proj -> force_field[0] -> equi_opts = allocdouble (17); this_proj -> force_field[0] -> thermo_opts= allocdouble (10); this_proj -> force_field[0] -> md_opts = allocdouble (20); this_proj -> force_field[0] -> out_opts = allocdouble (31); // CONTROL file if (fread (this_proj -> force_field[0] -> sys_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> io_opts, sizeof(double), 23, fp) != 23) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> ana_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> elec_opts, sizeof(double), 11, fp) != 11) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> vdw_opts, sizeof(double), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> met_opts, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> equi_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> ensemble, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> thermostat, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> thermo_opts, sizeof(double), 10, fp) != 10) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> md_opts, sizeof(double), 20, fp) != 20) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> out_opts, sizeof(double), 31, fp) != 31) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // FIELD file if (fread (this_proj -> force_field[0] -> prepare_file, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> afp, sizeof(gboolean), MAXDATC+MAXDATA, fp) != MAXDATC+MAXDATA) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> energy_unit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> atom_init, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> molecules, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! this_proj -> force_field[0] -> molecules) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); this_proj -> force_field[0] -> first_molecule = g_malloc0(sizeof*this_proj -> force_field[0] -> first_molecule); tmp_fmol = this_proj -> force_field[0] -> first_molecule; for (i=0; i force_field[0] -> molecules; i++) { if (read_field_molecule (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } // setup_field_molecule_neighbors (i, this_proj); for (j=0; j mol -> natoms; j++) { for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[j][k].a; m = tmp_fmol -> atoms_id[j][k].b; tmp_fat = tmp_fmol -> first_atom; while (tmp_fat -> id < l) tmp_fat = tmp_fat -> next; n = tmp_fat -> list[m]; this_proj -> atoms[0][n].fid = j; this_proj -> atoms[0][n].faid = l; } } if (i < this_proj -> force_field[0] -> molecules-1) { tmp_fmol -> next = g_malloc0(sizeof*tmp_fmol -> next); tmp_fmol = tmp_fmol -> next; } } if (fread (this_proj -> force_field[0] -> nbody, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<5; i++) { if (this_proj -> force_field[0] -> nbody[i]) { this_proj -> force_field[0] -> first_body[i] = g_malloc0(sizeof*this_proj -> force_field[0] -> first_body[i]); tmp_fbody = this_proj -> force_field[0] -> first_body[i]; for (j=0; j force_field[0] -> nbody[i]; j++) { if (read_field_body (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (j < this_proj -> force_field[0] -> nbody[i]-1) { tmp_fbody -> next = g_malloc0(sizeof*tmp_fbody -> next); tmp_fbody = tmp_fbody -> next; } } } } // Tersoff potential cross terms if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (i) { j = this_proj -> force_field[0] -> nbody[2] * (this_proj -> force_field[0] -> nbody[2] - 1) / 2; this_proj -> force_field[0] -> cross = g_malloc0(j*sizeof*this_proj -> force_field[0] -> cross); for (k=0; k force_field[0] -> cross[k] = g_malloc0(3*sizeof*this_proj -> force_field[0] -> cross[k]); if (fread (& this_proj -> force_field[0] -> cross[k], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } } if (fread (& this_proj -> force_field[0] -> extern_fields, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (this_proj -> force_field[0] -> extern_fields) { this_proj -> force_field[0] -> first_external = g_malloc0(sizeof*this_proj -> force_field[0] -> first_external); tmp_fext = this_proj -> force_field[0] -> first_external; for (i=0; i force_field[0] -> extern_fields; i++) { if (read_field_external(fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < this_proj -> force_field[0] -> extern_fields-1) { tmp_fext -> next = g_malloc0(sizeof*tmp_fext -> next); tmp_fext = tmp_fext -> next; } } } return OK; } /*! \fn int read_lmp_field_data (FILE * fp, project * this_proj) \brief read LAMMPS field data from file \param fp the file pointer \param this_proj the target project */ int read_lmp_field_data (FILE * fp, project * this_proj) { int i; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! i) return OK; return OK; } atomes_1.3.1/src/project/read_opengl.c0000664000175000017500000012016615212624223017373 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_opengl.c * @short Functions to read the OpenGL window data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_opengl.c' * * Contains: * - The functions to read the OpenGL window data in the atomes project file format * * List of functions: int read_atom_a (FILE * fp, project * this_proj, int s, int a); int read_atom_b (FILE * fp, project * this_proj, int s, int a); int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps); int read_this_image_label (FILE * fp, screen_label * label); int read_this_box (FILE * fp, box * abc); int read_this_axis (FILE * fp, axis * xyz); int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" #include "preferences.h" extern gboolean version_2_8_and_above; extern gboolean version_2_9_and_above; /*! \fn int read_atom_a (FILE * fp, project * this_proj, int s, int a) \brief read atom properties from file (a) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int read_atom_a (FILE * fp, project * this_proj, int s, int a) { if (fread (& this_proj -> atoms[s][a].id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].x, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].y, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].z, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); //g_debug ("Reading:: step= %d, at= %d, sp[%d]= %d, x[%d]= %f, y[%d]= %f, z[%d]= %f", // s, a+1, a, this_proj -> atoms[s][a].sp, a, this_proj -> atoms[s][a].x, a, this_proj -> atoms[s][a].y, a, this_proj -> atoms[s][a].z); return OK; } /*! \fn int read_atom_b (FILE * fp, project * this_proj, int s, int a) \brief read atom properties from file (b) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int read_atom_b (FILE * fp, project * this_proj, int s, int a) { if (fread (this_proj -> atoms[s][a].show, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fread (this_proj -> atoms[s][a].label, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fread (& this_proj -> atoms[s][a].style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); int i, j, k, l, m; int * rings_ij; if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (this_proj -> modelgl -> ring_max[i]) { this_proj -> atoms[s][a].rings[i] = g_malloc0(this_proj -> rsparam[i][1]*sizeof*this_proj -> atoms[s][a].rings[i]); for (j=0; j rsparam[i][1]; j++) { rings_ij = allocint (this_proj -> modelgl -> num_rings[i][s][j]); m = 0; for (k=0; k modelgl -> num_rings[i][s][j]; k++) { for (l=0; l modelgl -> all_rings[i][s][j][k][l] == a) { rings_ij[m] = k; m ++; break; } } } this_proj -> atoms[s][a].rings[i][j] = allocint (m+1); this_proj -> atoms[s][a].rings[i][j][0] = m; for (k=0; k atoms[s][a].rings[i][j][k+1] = rings_ij[k]; g_free (rings_ij); } } } } if (this_proj -> modelgl -> chains) { if (this_proj -> modelgl -> chain_max) { this_proj -> atoms[s][a].chain = g_malloc0(this_proj -> csparam[5]*sizeof*this_proj -> atoms[s][a].chain); for (j=0; j csparam[5]; j++) { rings_ij = allocint (this_proj -> modelgl -> num_chains[s][j]); m = 0; for (k=0; k modelgl -> num_chains[s][j]; k++) { for (l=0; l modelgl -> all_chains[s][j][k][l] == a) { m ++; rings_ij[m] = k; break; } } } this_proj -> atoms[s][a].chain[j] = allocint (m + 1); this_proj -> atoms[s][a].chain[j][0] = m; for (k=0; k atoms[s][a].chain[j][k+1] = rings_ij[k]; g_free (rings_ij); } } } return OK; } /*! \fn int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) \brief read rings and chains statistics data from file \param fp the file pointer \param view the glwin to store the data \param type Rings (0) or chains (1) \param rid the ring id or 0 \param size the size of the ring or chain \param steps the number of MD steps */ int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) { int i, j, k; int * tmpcoo, * tmpcoord; if (! type) { if (fread (& view -> ring_max[rid], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); if (view -> ring_max[rid]) { view -> num_rings[rid] = allocdint (steps, size); view -> show_rpoly[rid] = g_malloc0(steps*sizeof*view -> show_rpoly[rid]); view -> all_rings[rid] = g_malloc0(steps*sizeof*view -> all_rings[rid]); tmpcoo = allocint (size); for (i=0; i num_rings[rid][i], sizeof(int), size, fp) != size) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); view -> all_rings[rid][i] = g_malloc0(size*sizeof*view -> all_rings[rid][i]); view -> show_rpoly[rid][i] = g_malloc0(size*sizeof*view -> show_rpoly[rid][i]); for (j=0; j num_rings[rid][i][j]; if (view -> num_rings[rid][i][j]) { view -> all_rings[rid][i][j] = allocdint (view -> num_rings[rid][i][j], j+1); view -> show_rpoly[rid][i][j] = allocbool (view -> num_rings[rid][i][j]); if (fread (view -> show_rpoly[rid][i][j], sizeof(int), view -> num_rings[rid][i][j], fp) != view -> num_rings[rid][i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); for (k=0; k num_rings[rid][i][j]; k++) { if (fread (view -> all_rings[rid][i][j][k], sizeof(int), j+1, fp) != j+1) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); } } } } i = 0; for (j=0; j anim -> last -> img -> show_coord[j]); init_opengl_coords (4+rid, i, 1); k = 0; init_menurings_ (& j, & rid, & i, tmpcoord, & k); g_free (tmpcoo); g_free (tmpcoord); view -> anim -> last -> img -> show_coord[j] = duplicate_bool(i, show_rings); g_free (show_rings); } } else { if (fread (& view -> chain_max, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CHAINS); if (view -> chain_max) { view -> num_chains = allocdint (steps, size); view -> all_chains = g_malloc0(steps*sizeof*view -> all_rings[rid]); tmpcoo = allocint (size); for (i=0; i num_chains[i], sizeof(int), size, fp) != size) return signal_error (__FILE__, __func__, __LINE__, ERROR_CHAINS); view -> all_chains[i] = g_malloc0(size*sizeof*view -> all_chains[i]); for (j=0; j num_chains[i][j]; if (view -> num_chains[i][j]) { view -> all_chains[i][j] = allocdint (view -> num_chains[i][j], j+1); for (k=0; k num_chains[i][j]; k++) { if (fread (view -> all_chains[i][j][k], sizeof(int), j+1, fp) != j+1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CHAINS); } } } } i = 0; for (j=0; j anim -> last -> img -> show_coord[j]); init_opengl_coords (j, i, 1); init_menurings_ (& j, & k , & i, tmpcoord, & k); g_free (tmpcoo); g_free (tmpcoord); view -> anim -> last -> img -> show_coord[j] = duplicate_bool(i, show_chains); g_free (show_chains); } } return OK; } /*! \fn int read_this_image_label (FILE * fp, screen_label label) \brief read image label from file \param fp the file pointer \param label the target label */ int read_this_image_label (FILE * fp, screen_label * label) { if (fread (& label -> position, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> render, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> scale, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> shift, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> n_colors, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (label -> n_colors) { label -> color = g_malloc0(label -> n_colors*sizeof*label -> color); if (fread (label -> color, sizeof(ColRGBA), label -> n_colors, fp) != label -> n_colors) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } else if (label -> color) { g_free (label -> color); label -> color = NULL; } label -> font = read_this_string (fp); if (label -> font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); return OK; } /*! \fn int read_this_box (FILE * fp, box * abc) \brief read OpenGL image box properties to file \param fp the file pointer \param box the target box data */ int read_this_box (FILE * fp, box * abc) { if (fread (& abc -> box, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& abc -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& abc -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& abc -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (abc -> extra_cell, sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); return OK; } /*! \fn int read_this_axis (FILE * fp, axis * xyz) \brief read OpenGL image axis properties to file \param fp the file pointer \param axis the target axis data */ int read_this_axis (FILE * fp, axis * xyz) { if (fread (& xyz -> axis, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& xyz -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& xyz -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (! version_2_9_and_above) { xyz -> color = g_malloc0(sizeof*xyz -> color); if (fread (& xyz -> color[0], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); g_free (xyz -> color); xyz -> color = NULL; } if (fread (& xyz -> t_pos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& xyz -> length, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (xyz -> c_pos, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); gboolean val; int i; if (fread (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { xyz -> color = g_malloc0(3*sizeof*xyz -> color); for (i=0; i<3; i++) { if (fread (& xyz -> color[i], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (& xyz -> labels, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<3; i++) { xyz -> title[i] = read_this_string (fp); if (xyz -> title[i] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } return OK; } /*! \fn int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid) \brief read OpenGL image properties from file \param fp the file pointer \param this_proj the target project \param img the latest image to store the data \param sid the number of chemical species */ int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid) { int i, j, k, l, m, n; gboolean val; duplicate_background_data (img -> back, & default_background); if (version_2_8_and_above) { if (fread (& img -> back -> gradient, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> back -> gradient) { if (fread (& img -> back -> direction, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> back -> position, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> back -> gradient_color, sizeof(ColRGBA), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } else { if (fread (& img -> back -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { img -> back -> gradient = 0; img -> back -> position = 0.5; if (fread (& img -> back -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> color_map, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> color_map[0] > ATOM_MAPS-1) { img -> color_map[0] -= 10; if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> custom_map = allocate_color_map (j, this_proj); this_proj -> modelgl -> custom_map -> points = j; if (fread (& this_proj -> modelgl -> custom_map -> cmax, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& this_proj -> modelgl -> custom_map -> cmin, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> custom_map -> positions = allocfloat (j); this_proj -> modelgl -> custom_map -> values = g_malloc0(j*sizeof*this_proj -> modelgl -> custom_map -> values); if (fread (this_proj -> modelgl -> custom_map -> positions, sizeof(float), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (this_proj -> modelgl -> custom_map -> values, sizeof(ColRGBA), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); j = this_proj -> steps*this_proj -> natomes; for (i=0; i steps; i++) { if (fread (this_proj -> modelgl -> custom_map -> data[i], sizeof(float), this_proj -> natomes, fp) != this_proj -> natomes) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } setup_custom_color_map (NULL, this_proj, FALSE); } if (fread (& img -> cloned_poly, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> at_color, sizeof(ColRGBA), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> sphererad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> pointrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> atomicrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i bondrad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> linerad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> radall, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> draw_clones, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (! version_2_8_and_above) { for (i=0; i<5; i++) { if (fread (& img -> labels[i].position, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } for (i=0; i<5; i++) { if (fread (& img -> labels[i].render, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } for (i=0; i<5; i++) { if (fread (& img -> labels[i].scale, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> acl_format, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<5; i++) { if (fread (img -> labels[i].shift, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { if (i < 2) { j = 2*sid; } else if (i == 2) { j = 3; } else { j = 1; } img -> labels[i].n_colors = j; img -> labels[i].color = g_malloc0(j*sizeof*img -> labels[i].color); for (k=0; k labels[i].color[k], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { img -> labels[i].n_colors = 0; if (img -> labels[i].color) { g_free (img -> labels[i].color); img -> labels[i].color = NULL; } } img -> labels[i].font = read_this_string (fp); if (img -> labels[i].font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> mtilt[0], sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mtilt[1] = img -> mtilt[0]; if (fread (& img -> mpattern[0], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mpattern[1] = img -> mpattern[0]; if (fread (& img -> mfactor[0], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mfactor[1] = img -> mfactor[0]; if (fread (& img -> mwidth[0], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mwidth[1] = img -> mwidth[0]; } else { for (i=0; i<5; i++) { if (read_this_image_label (fp, & img -> labels[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } } if (fread (img -> acl_format, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mtilt, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mpattern, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mfactor, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mwidth, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> m_is_pressed, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Model box and axis if (! version_2_8_and_above) { if (fread (& img -> abc -> box, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> axis, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> abc -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> abc -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> abc -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> abc -> extra_cell, sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Axis if (fread (& img -> xyz -> t_pos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> length, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> xyz -> c_pos, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { img -> xyz -> color = g_malloc0(3*sizeof*img -> xyz -> color); for (i=0; i<3; i++) { if (fread (& img -> xyz -> color[i], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (& img -> xyz -> labels, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<3; i++) { img -> xyz -> title[i] = read_this_string (fp); if (img -> xyz -> title[i] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { // Model box if (read_this_box (fp, img -> abc) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } // Axis if (read_this_axis (fp, img -> xyz) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } } // OpenGL if (fread (& img -> p_depth, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gnear, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gfar, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gleft, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gright, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gtop, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gbottom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> rotation_quaternion, sizeof(vec4_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> rotation_mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> zoom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> c_shift, sizeof(GLdouble), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> quality, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (version_2_9_and_above) { if (fread (& img -> ray_tracing, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> render, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.lights, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> l_ghtning.spot != NULL) { g_free (img -> l_ghtning.spot); img -> l_ghtning.spot = NULL; } img -> l_ghtning.spot = g_malloc0(img -> l_ghtning.lights*sizeof*img -> l_ghtning.spot); for (i=0; i l_ghtning.lights; i++) { img -> l_ghtning.spot[i] = g_malloc0(sizeof*img -> l_ghtning.spot[i]); if (fread (& img -> l_ghtning.spot[i] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> fix, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> show, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> position, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> direction, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> intensity, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> attenuation, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> spot_data, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> m_terial.predefine, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> m_terial.albedo, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> m_terial.param, sizeof(GLfloat), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.based, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.density, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.depth, sizeof(float), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.color, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> filled_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> step, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> rep, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<4; i++) { if (i < 2) { for (j=0; j spcolor[i][j], sizeof(ColRGBA), this_proj -> coord -> ntg[i][j], fp) != this_proj -> coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { if (j != this_proj -> coord -> totcoord[i]) { return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> spcolor[i][0], sizeof(ColRGBA), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } active_glwin = this_proj -> modelgl; active_image = this_proj -> modelgl -> anim -> last -> img; active_coord = this_proj -> coord; if (fread (& this_proj -> modelgl -> rings, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (read_rings_chains_data (fp, this_proj -> modelgl, 0, i, this_proj -> rsparam[i][1], this_proj -> steps) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_RINGS; } } } if (fread (& this_proj -> modelgl -> chains, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> chains) { if (read_rings_chains_data (fp, this_proj -> modelgl, 1, 0, this_proj -> csparam[5], this_proj -> steps) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CHAINS; } } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (i) { this_proj -> modelgl -> create_shaders[VOLMS] = TRUE; this_proj -> modelgl -> volumes = TRUE; for (i=0; i modelgl -> atoms_volume[i] = allocdouble (this_proj -> steps); this_proj -> modelgl -> atoms_ppvolume[i] = allocdouble (this_proj -> steps); if (fread (this_proj -> modelgl -> atoms_volume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (this_proj -> modelgl -> atoms_ppvolume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> volume_box[i] = allocddouble (this_proj -> steps, 9); for (j=0; j steps; j++) { if (fread (this_proj -> modelgl -> volume_box[i][j], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (this_proj -> modelgl -> comp_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (active_image -> show_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (active_image -> vol_col, sizeof(ColRGBA), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (i) { for (j=0; j modelgl -> frag_mol_volume[0][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> frag_mol_ppvolume[0][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> fm_comp_vol[0][j] = allocdbool (this_proj -> steps, i); active_image -> fm_show_vol[0][j] = allocbool (i); this_proj -> modelgl -> frag_box[j] = alloctdouble (this_proj -> steps, i, 9); for (l=0; l modelgl -> frag_mol_ppvolume[0][j][m][n], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (this_proj -> modelgl -> frag_box[j][m][n], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> fm_comp_vol[0][j][m][n] = TRUE; } active_image -> fm_vol_col[0][j] = g_malloc0(i*sizeof*active_image -> fm_vol_col[0][j]); if (fread (active_image -> fm_show_vol[0][j], sizeof(gboolean), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (active_image -> fm_vol_col[0][j], sizeof(ColRGBA), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (i) { for (j=0; j modelgl -> frag_mol_volume[1][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> frag_mol_ppvolume[1][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> fm_comp_vol[1][j] = allocdbool (this_proj -> steps, i); active_image -> fm_show_vol[1][j] = allocbool (i); for (l=0; l modelgl -> frag_mol_ppvolume[1][j][m][n], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> fm_comp_vol[1][j][m][n] = TRUE; } if (fread (active_image -> fm_show_vol[1][j], sizeof(gboolean), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); active_image -> fm_vol_col[1][j] = g_malloc0(i*sizeof*active_image -> fm_vol_col[1][j]); if (fread (active_image -> fm_vol_col[1][j], sizeof(ColRGBA), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } } } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (read_atom_b (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_B; } } } // Finally selection lists, bonds, angles and dihedrals for (i=0; i<2; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { for (k=0; k modelgl, l, 0, 0, i); } update_all_selections (this_proj -> modelgl, i); if (img -> selected[i] -> selected >= 2 && img -> selected[i] -> selected <= 20) { j = num_bonds (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_bonds, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 3) { j = num_angles (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_angles, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 4 && img -> selected[i] -> selected <= 10) { j = num_dihedrals (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_dihedrals, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { for (j=0; j modelgl -> ogl_spec[i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j]) != img -> show_atom[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], img -> show_atom[i][j]); } } } } for (i=0; i<10; i++) { if (this_proj -> modelgl -> ogl_poly[0][i] != NULL) { for (j=0; j coord -> totcoord[i]; j++) { if (i < 2 || (i > 3 && i < 9)) { if (this_proj -> modelgl -> ogl_poly[0][i][j] != NULL) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j]) != img -> show_poly[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j], img -> show_poly[i][j]); } } } } } } if (this_proj -> modelgl -> ogl_geom[0][i] != NULL) { for (j=0; j coord -> totcoord[i]; j++) { if (this_proj -> modelgl -> ogl_geom[0][i][j] != NULL) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j]) != img -> show_coord[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j], img -> show_coord[i][j]); } } } } } } show_the_widgets (this_proj -> modelgl -> ogl_coord[0]); update_all_menus (this_proj -> modelgl, this_proj -> natomes); #endif this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); #ifdef GTK4 for (i=0; i<2; i++) { for (j=0; j show_atom[i][j]) { show_hide_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[i][j]); } } } for (i=0; i<10; i++) { for (j=0; j coord -> totcoord[i]; j++) { if (i < 2 || (i > 3 && i < 9)) { if (img -> show_poly[i][j]) { show_hide_poly (NULL, NULL, & this_proj -> modelgl -> gcid[i][j][i]); } } } for (j=0; j coord -> totcoord[i]; j++) { if (! img -> show_coord[i][j]) { show_hide_coord (NULL, NULL, & this_proj -> modelgl -> gcid[i][j][i]); } } } update_menu_bar (this_proj -> modelgl); #endif return OK; } atomes_1.3.1/src/project/read_bond.c0000664000175000017500000002000615212624223017021 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_bond.c * @short Function to read bonding information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_bond.c' * * Contains: * - The function to read bonding information in the atomes project file format * * List of functions: int read_bonding (FILE * fp); */ #include "global.h" #include "project.h" #include "glview.h" extern void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol); /*! \fn int read_bonding (FILE * fp) \brief read bonding information from file \param fp the file pointer */ int read_bonding (FILE * fp) { int i, j, k, l, m; distance clo; coord_info * coord = g_malloc0(sizeof*coord); coord -> species = active_project -> nspec; image * img = active_glwin -> anim -> last -> img; gboolean read_bond = FALSE; if (! active_glwin -> bonding || ! active_glwin -> adv_bonding[1] || active_project -> natomes > ATOM_LIMIT || active_project -> steps > reading_step_limit) { read_bond = TRUE; } if (read_bond) { active_glwin -> bonds = allocdint (active_project -> steps, 2); active_glwin -> bondid = g_malloc0(active_project -> steps*sizeof*active_glwin -> bondid); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fread (active_project -> atoms[i][j].coord, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fread (& active_project -> atoms[i][j].numv, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (active_project -> atoms[i][j].numv) { active_project -> atoms[i][j].vois = allocint (active_project -> atoms[i][j].numv); if (fread (active_project -> atoms[i][j].vois, sizeof(int), active_project -> atoms[i][j].numv, fp) != active_project -> atoms[i][j].numv) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } if (fread (active_glwin -> bonds[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); active_glwin -> bondid[i] = g_malloc0(2*sizeof*active_glwin -> bondid[i]); for (j=0; j<2; j++) { if (active_glwin -> bonds[i][j]) { active_glwin -> allbonds[j] += active_glwin -> bonds[i][j]; active_glwin -> bondid[i][j] = allocdint (active_glwin -> bonds[i][j], 2); if (j) active_glwin -> clones[i] = g_malloc0(active_glwin -> bonds[i][1]*sizeof*active_glwin -> clones[i]); for (k=0; k bonds[i][j]; k++) { if (fread (active_glwin -> bondid[i][j][k], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (j) { l = active_glwin -> bondid[i][j][k][0]; m = active_glwin -> bondid[i][j][k][1]; clo = distance_3d (active_cell, (active_cell -> npt) ? i : 0, & active_project -> atoms[i][l], & active_project -> atoms[i][m]); active_glwin -> clones[i][k].x = clo.x; active_glwin -> clones[i][k].y = clo.y; active_glwin -> clones[i][k].z = clo.z; } } } } } for (i=0; i<2; i++) { coord -> ntg[i] = allocint (coord -> species); if (fread (coord -> ntg[i], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); coord -> geolist[i] = g_malloc0(coord -> species*sizeof*coord -> geolist[i]); if (i == 1) coord -> partial_geo = g_malloc0(coord -> species*sizeof*coord -> partial_geo); for (j=0; j species; j++) { coord -> geolist[i][j] = g_malloc0(coord -> ntg[i][j]*sizeof*coord -> geolist[i][j]); if (fread (coord -> geolist[i][j], sizeof(int), coord -> ntg[i][j], fp) != coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i == 1) { coord -> partial_geo[j] = g_malloc0(coord -> ntg[i][j]*sizeof*coord -> partial_geo[j]); for (k=0; k ntg[i][j]; k++) { coord -> partial_geo[j][k] = g_malloc0(coord -> species*sizeof*coord -> partial_geo[j][k]); if (fread (coord -> partial_geo[j][k], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } } coord -> cmax = 0; coord -> cmin = 20; for (i=0; i species; i++) { for (j=0; j ntg[1][i]; j++) { coord -> cmax = max(coord -> cmax, coord -> geolist[1][i][j]); coord -> cmin = min(coord -> cmin, coord -> geolist[1][i][j]); } } } for (i=0; i<10; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2 && active_glwin -> bonding && j != active_project -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i > 1 && i < 4 && active_glwin -> adv_bonding[i-2] && j != active_project -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2) { if (fread (img -> show_atom[i], sizeof(gboolean), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fread (img -> show_label[i], sizeof(gboolean), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } if (active_project -> coord -> totcoord[i]) { if (! img -> show_poly[i] && (i < 2 || (i > 3 && i < 9))) img -> show_poly[i] = allocbool(active_project -> coord -> totcoord[i]); if (! img -> show_coord[i]) img -> show_coord[i] = allocbool(active_project -> coord -> totcoord[i]); if (fread (img -> show_coord[i], sizeof(gboolean), active_project -> coord -> totcoord[i], fp) != active_project -> coord -> totcoord[i]) return ERROR_RW; if (i < 2 || (i > 3 && i < 9)) { if (fread (img -> show_poly[i], sizeof(gboolean), active_project -> coord -> totcoord[i], fp) != active_project -> coord -> totcoord[i]) return ERROR_RW; } } } if (! active_glwin -> bonding || ! active_glwin -> adv_bonding[1] || active_project -> natomes > ATOM_LIMIT || active_project -> steps > reading_step_limit) { gboolean * showfrag = duplicate_bool (active_project -> coord -> totcoord[2], img -> show_coord[2]); gboolean * showcoord[2]; gboolean * showpoly[2]; for (i=0; i<2; i++) { showcoord[i] = duplicate_bool (active_project -> coord -> totcoord[i], img -> show_coord[i]); showpoly[i] = duplicate_bool (active_project -> coord -> totcoord[i], img -> show_poly[i]); } for (i=0; i<10; i++) coord -> totcoord[i] = active_project -> coord -> totcoord[i]; active_project -> coord -> cmax = coord -> cmax; active_project -> coord -> cmin = coord -> cmin; new_coord_menus (active_project, coord, active_project -> nspec, 0, showcoord, showpoly, showfrag, TRUE, TRUE); } g_free (coord); return OK; } atomes_1.3.1/src/project/save_qm.c0000664000175000017500000002310715212624223016544 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_qm.c * @short Functions to save ab-initio (CPMD/CP2K) calculation parameters in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_qm.c' * * Contains: * - The functions to save ab-initio (CPMD/CP2K) calculation parameters in the atomes project file format * * List of functions: int save_thermo (FILE * fp, thermostat * thermo); int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord); int save_cpmd_data (FILE * fp, int cid, project * this_proj); int save_cp2k_data (FILE * fp, int cid, project * this_proj); */ #include "global.h" #include "project.h" /*! \fn int save_thermo (FILE * fp, thermostat * thermo) \brief save thermostat to file \param fp the file pointer \param thermo the thermostat to save */ int save_thermo (FILE * fp, thermostat * thermo) { if (fwrite (& thermo -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> sys, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (thermo -> params, sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } /*! \fn int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) \brief save fixed atom(s) to file \param fp the file pointer \param fixatoms the number of fixed atom(s) \param fixlist the list of fixed atom(s) \param fixcoord the list of fixed coordinate(s) for the fix atom(s) */ int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) { int i; if (fwrite (& fixatoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fixatoms) { if (fixlist) { if (fwrite (fixlist, sizeof(int), fixatoms, fp) != fixatoms) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fixcoord) { for (i=0; i cpmd_input[cid] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& this_proj -> cpmd_input[cid] -> calc_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (this_proj -> cpmd_input[cid] -> default_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (this_proj -> cpmd_input[cid] -> calc_opts, sizeof(double), 24, fp) != 24) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& this_proj -> cpmd_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> thermostats) { thermostat * thermo = this_proj -> cpmd_input[cid] -> ions_thermostat; i = 0; while (thermo) { if (save_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } i ++; thermo = thermo -> next; } i = (this_proj -> cpmd_input[cid] -> elec_thermostat) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> elec_thermostat) { if (save_thermo (fp, this_proj -> cpmd_input[cid] -> elec_thermostat) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } } if (save_fixed_atoms (fp, this_proj -> cpmd_input[cid] -> fixat, this_proj -> cpmd_input[cid] -> fixlist, this_proj -> cpmd_input[cid] -> fixcoord) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (fwrite (& this_proj -> cpmd_input[cid] -> dummies, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> dummies) { dummy_atom * dummy = this_proj -> cpmd_input[cid] -> dummy; while (dummy) { if (fwrite (& dummy -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& dummy -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& dummy -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (dummy -> xyz, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (dummy -> coord, sizeof(int), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& dummy -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (dummy -> natoms) { if (fwrite (dummy -> list, sizeof(int), dummy -> natoms, fp) != dummy -> natoms) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } dummy = dummy -> next; } } for (i=0; i nspec; i++) { if (fwrite (this_proj -> cpmd_input[cid] -> pp[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } return save_this_string (fp, this_proj -> cpmd_input[cid] -> info); } /*! \fn int save_cp2k_data (FILE * fp, int cid, project * this_proj) \brief save CP2K data to file \param fp the file pointer \param cid the CP2K id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int save_cp2k_data (FILE * fp, int cid, project * this_proj) { int i, j; if (this_proj -> cp2k_input[cid] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& this_proj -> cp2k_input[cid] -> input_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (this_proj -> cp2k_input[cid] -> opts, sizeof(double), 42, fp) != 42) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); for (i=0; i<3; i++) { if (fwrite (this_proj -> cp2k_input[cid] -> extra_opts[i], sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fwrite (& this_proj -> cp2k_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cp2k_input[cid] -> thermostats) { thermostat * thermo = this_proj -> cp2k_input[cid] -> ions_thermostat; while (thermo) { if (save_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } thermo = thermo -> next; } } for (i=0; i<2; i++) { if (save_fixed_atoms (fp, this_proj -> cp2k_input[cid] -> fixat[i], this_proj -> cp2k_input[cid] -> fixlist[i], this_proj -> cp2k_input[cid] -> fixcoord[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } for (i=0; i nspec; i++) { if (fwrite (this_proj -> cp2k_input[cid] -> spec_data[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); for (j=0; j<2; j++) { if (save_this_string (fp, this_proj -> cp2k_input[cid] -> spec_files[i][j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } } for (i=0; i<5; i++) { if (save_this_string (fp, this_proj -> cp2k_input[cid] -> files[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } return save_this_string (fp, this_proj -> cp2k_input[cid] -> info); } atomes_1.3.1/src/project/save_p.c0000664000175000017500000004070315212624223016367 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_p.c * @short Functions to start saving an atomes project file * @author Sébastien Le Roux */ /* * This file: 'save_p.c' * * Contains: * - The functions to start saving an atomes project file * * List of functions: int save_this_string (FILE * fp, gchar * string); int save_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid); int save_project (FILE * fp, project * this_proj, int wid); */ #include "global.h" #include "project.h" /*! \fn int save_this_string (FILE * fp, gchar * string) \brief save string to file \param fp the file pointer \param string the string to save */ int save_this_string (FILE * fp, gchar * string) { int i; if (string) { i = strlen (string); if (i > 0) { i ++; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (string, sizeof(char), i, fp) != i) return ERROR_RW; } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } return OK; } /*! \fn int save_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) \brief saving analysis parameter(s) and result(s) to project file \param fp the file pointer \param this_proj the target project \param this_analysis the target analysis \param wid saving workspace (1/0) */ int save_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) { int i, j; if (fwrite (& this_analysis -> aid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (save_this_string (fp, this_analysis -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> avail_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> init_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> calc_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> requires_md, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> num_delta, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> delta, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> min, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> max, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> fact, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> graph_res, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (this_analysis -> graph_res) { if (fwrite (& this_analysis -> numc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> c_sets, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (this_analysis -> compat_id, sizeof(int), this_analysis -> c_sets, fp) != this_analysis -> c_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); i = (this_analysis -> x_title) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (this_analysis -> x_title) { if (save_this_string (fp, this_analysis -> x_title) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } if (this_analysis -> curves) { i = 0; for (j=0; j numc; j++) { if (this_analysis -> curves[j] -> ndata) i ++; } if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i) { for (j=0; j numc; j++) { if (this_analysis -> curves[j] -> ndata) { if (save_project_curve (fp, this_proj, wid, this_analysis -> aid, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } } } } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } } return OK; } /*! \fn int save_project (FILE * fp, project * this_proj, int wid) \brief save project to file \param fp the file pointer \param this_proj the target project \param wid saving workspace (1/0) */ int save_project (FILE * fp, project * this_proj, int wid) { int i, j, k; gchar * ver; // First 2 lines for compatibility issues i = 2; j = 9; ver = g_strdup_printf ("%%\n%% project file v-%1d.%1d\n%%\n", i, j); if (save_this_string (fp, ver) != OK) { g_free (ver); return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } g_free (ver); if (save_this_string (fp, this_proj -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> tfile, sizeof(this_proj -> tfile), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (this_proj -> tfile > -1) { if (save_this_string (fp, this_proj -> coordfile) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (this_proj -> bondfile != NULL) { if (save_this_string (fp, this_proj -> bondfile) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { i = -1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } //Note: we now save the number of analysis available at this version of the project file i = NCALCS; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> natomes, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> steps, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> cell.pbc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> cell.frac, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> cell.ltype, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); i = (this_proj -> cell.npt) ? this_proj -> steps : 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (j=0; j cell.box[j].vect[k], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (this_proj -> cell.box[j].param[0], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> cell.box[j].param[1], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> cell.crystal, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (this_proj -> cell.sp_group) { if (fwrite (& this_proj -> cell.sp_group -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> cell.sp_group -> bravais) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> cell.sp_group -> hms) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> cell.sp_group -> setting) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> run, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> initgl, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> modelgl -> pixels, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); // Analysis data for k-points sampling for (i=0; i<2; i++) { if (fwrite (this_proj -> sk_advanced[i], sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } // Next lines are calculation data related to rings and chains statistics if (fwrite (this_proj -> rsearch, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i<5; i++) { if (fwrite (this_proj -> rsparam[i], sizeof(int), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> rsdata[i], sizeof(double), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> csearch, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> csparam, sizeof(int), 7, fp) != 7) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> csdata, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); // Time unit for dynamical calculations, delta t and steps are stored in MSD analysis if (fwrite (& this_proj -> tunit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (this_proj -> steps) { if (fwrite (& this_proj -> skt_corr_threshold, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> skt_all_sets, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (! this_proj -> skt_all_sets) { i = (this_proj -> skt_step_id) ? this_proj -> skt_n_data_sets : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i) { if (fwrite (this_proj -> skt_step_id, sizeof(int), this_proj -> skt_n_data_sets, fp) != this_proj -> skt_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } i = (this_proj -> sqw_q_id) ? this_proj -> sqw_n_data_sets : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i) { if (fwrite (this_proj -> sqw_q_id, sizeof(double), this_proj -> sqw_n_data_sets, fp) != this_proj -> sqw_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> sqw_freq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (this_proj -> natomes == 0 || this_proj -> nspec == 0) { // error return signal_error (__FILE__, __func__, __LINE__, ERROR_NO_WAY); } else { for (i=0; i nspec; i++) { if (save_this_string (fp, this_proj -> chemistry -> label[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> chemistry -> element[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (this_proj -> chemistry -> nsps, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> chemistry -> formula, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i chemistry -> chem_prop[i], sizeof(double), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> chemistry -> grtotcutoff, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i nspec; i++) { if (fwrite (this_proj -> chemistry -> cutoffs[i], sizeof(double), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (save_atom_a (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_A; } } } if (this_proj -> run) { if (this_proj -> analysis) { for (i=0; i analysis[i]) { if (save_analysis (fp, this_proj, this_proj -> analysis[i], wid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ANA; } } } } if (this_proj -> initgl) { if (fwrite (& this_proj -> modelgl -> bonding, sizeof(gboolean), 1, fp) != 1) return ERROR_COORD; if (fwrite (this_proj -> modelgl -> adv_bonding, sizeof(gboolean), 2, fp) != 2) return ERROR_COORD; // for (i=0; i<10; i++) g_debug ("SAVING :: i= %d, this_proj -> coord -> totcoord[%d]= %d", i, i, this_proj -> coord -> totcoord[i]); if (fwrite (this_proj -> coord -> totcoord, sizeof(int), 10, fp) != 10) return ERROR_COORD; // Save molecule if ((this_proj -> natomes > ATOM_LIMIT || this_proj -> steps > STEP_LIMIT) && this_proj -> modelgl -> adv_bonding[1]) { if (save_mol (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } // saving bonding info if (save_bonding (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_COORD; } // saving glwin info if (save_opengl_image (fp, this_proj, this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } if (save_dlp_field_data (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (save_lmp_field_data (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } for (i=0; i<2; i++) { if (save_cpmd_data (fp, i, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } for (i=0; i<2; i++) { if (save_cp2k_data (fp, i, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } } } } #ifdef DEBUG // debugioproj (this_proj, "WRITE"); #endif return OK; } atomes_1.3.1/src/project/save_opengl.c0000664000175000017500000006624115212624223017421 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_opengl.c * @short Functions to save OpenGL information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_opengl.c' * * Contains: * - The functions to save OpenGL information in the atomes project file format * * List of functions: int save_atom_a (FILE * fp, project * this_proj, int s, int a); int save_atom_b (FILE * fp, project * this_proj, int s, int a); int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data); int write_this_image_label (FILE * fp, screen_label label); int write_this_box (FILE * fp, box * abc); int write_this_axis (FILE * fp, axis * xyz); int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glwin.h" /*! \fn int save_atom_a (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file (a) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_a (FILE * fp, project * this_proj, int s, int a) { if (fwrite (& this_proj -> atoms[s][a].id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].x, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].y, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].z, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); //g_debug ("Saving:: step= %d, at= %d, sp[%d]= %d, x[%d]= %f, y[%d]= %f, z[%d]= %f", // s, a+1, a, this_proj -> atoms[s][a].sp, a, this_proj -> atoms[s][a].x, a, this_proj -> atoms[s][a].y, a, this_proj -> atoms[s][a].z); return OK; } /*! \fn int save_atom_b (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file (b) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_b (FILE * fp, project * this_proj, int s, int a) { if (fwrite (this_proj -> atoms[s][a].show, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fwrite (this_proj -> atoms[s][a].label, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fwrite (& this_proj -> atoms[s][a].style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); return OK; } /*! \fn int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) \brief saving rings and chains statistics data to file \param fp the file pointer \param type Rings (0) or chains (1) \param size the number of data to save \param steps the MD step \param data_max the maximum size of \param num_data Id of the objects to save \param show Display information pointer \param all_data Atoms id of the objects to save */ int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) { int i, j, k; if (fwrite (& data_max, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_RW); if (data_max) { for (i=0; i box, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& abc -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& abc -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& abc -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (abc -> extra_cell, sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); return OK; } /*! \fn int write_this_axis (FILE * fp, axis * xyz) \brief save OpenGL image axis properties to file \param fp the file pointer \param axis the target axis data */ int write_this_axis (FILE * fp, axis * xyz) { if (fwrite (& xyz -> axis, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // if (fwrite (& xyz -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> t_pos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> length, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (xyz -> c_pos, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); gboolean val; int i; if (xyz -> color != NULL) { val = TRUE; } else { val = FALSE; } if (fwrite (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { for (i=0; i<3; i++) { if (fwrite (& xyz -> color[i], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fwrite (& xyz -> labels, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<3; i++) { if (save_this_string (fp, xyz -> title[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } return OK; } /*! \fn int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid) \brief save OpenGL image properties to file \param fp the file pointer \param this_proj the target project \param img the image that contains the data \param sid the number of chemical species */ int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid) { int i, j, k, l; if (fwrite (& img -> back -> gradient, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> back -> gradient) { if (fwrite (& img -> back -> direction, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> back -> position, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> back -> gradient_color, sizeof(ColRGBA), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } else { if (fwrite (& img -> back -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (this_proj -> modelgl -> custom_map != NULL) img -> color_map[0] += 10; if (fwrite (img -> color_map, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> custom_map != NULL) { img -> color_map[0] -= 10; colormap * map = this_proj -> modelgl -> custom_map; if (fwrite (& map -> points, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& map -> cmax, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& map -> cmin, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (map -> positions, sizeof(float), map -> points, fp) != map -> points) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (map -> values, sizeof(ColRGBA), map -> points, fp) != map -> points) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i steps; i++) { if (fwrite (map -> data[i], sizeof(float), this_proj -> natomes, fp) != this_proj -> natomes) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fwrite (& img -> cloned_poly, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> at_color, sizeof(ColRGBA), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> sphererad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> pointrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> atomicrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i bondrad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> linerad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fwrite (img -> radall, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> draw_clones, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<5; i++) { if (write_this_image_label(fp, img -> labels[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } } if (fwrite (img -> acl_format, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Measures if (fwrite (img -> mtilt, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> mpattern, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> mfactor, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> mwidth, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> m_is_pressed, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Model box if (write_this_box (fp, img -> abc) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } // Axis if (write_this_axis (fp, img -> xyz) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } // OpenGL if (fwrite (& img -> p_depth, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gnear, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gfar, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gleft, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gright, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gtop, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gbottom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> rotation_quaternion, sizeof(vec4_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> rotation_mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> zoom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> c_shift, sizeof(GLdouble), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> quality, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> ray_tracing, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> render, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.lights, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i l_ghtning.lights; i++) { if (fwrite (& img -> l_ghtning.spot[i] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> fix, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> show, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> position, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> direction, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> intensity, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> attenuation, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> spot_data, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fwrite (& img -> m_terial.predefine, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> m_terial.albedo, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> m_terial.param, sizeof(GLfloat), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.based, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.density, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> f_g.depth, sizeof(float), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.color, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> filled_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> step, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> rep, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<4; i++) { if (i < 2) { for (j=0; j spcolor[i][j], sizeof(ColRGBA), this_proj -> coord -> ntg[i][j], fp) != this_proj -> coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { j = (this_proj -> modelgl -> adv_bonding[i-2] && this_proj -> coord -> totcoord[i]) ? this_proj -> coord -> totcoord[i] : 0; if (fwrite (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { if (fwrite (img -> spcolor[i][0], sizeof(ColRGBA), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } if (fwrite (& this_proj -> modelgl -> rings, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (save_rings_chains_data (fp, 0, this_proj -> rsparam[i][1], this_proj -> steps, this_proj -> modelgl -> ring_max[i], this_proj -> modelgl -> num_rings[i], this_proj -> modelgl -> show_rpoly[i], this_proj -> modelgl -> all_rings[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_RINGS; } } } if (fwrite (& this_proj -> modelgl -> chains, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> chains) { if (save_rings_chains_data (fp, 1, this_proj -> csparam[5], this_proj -> steps, this_proj -> modelgl -> chain_max, this_proj -> modelgl -> num_chains, NULL, this_proj -> modelgl -> all_chains) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CHAINS; } } if (this_proj -> modelgl -> volumes) { i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i modelgl -> atoms_volume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (this_proj -> modelgl -> atoms_ppvolume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (j=0; j steps; j++) { if (fwrite (this_proj -> modelgl -> volume_box[i][j], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fwrite (this_proj -> modelgl -> comp_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> show_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> vol_col, sizeof(ColRGBA), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> adv_bonding[0]) { if (fwrite (& this_proj -> coord -> totcoord[2], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i steps; k++) { for (l=0; l coord -> totcoord[2]; l++) { if (this_proj -> modelgl -> fm_comp_vol[0][i][k][l]) j++; } } if (fwrite (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { for (k=0; k steps; k++) { for (l=0; l coord -> totcoord[2]; l++) { if (this_proj -> modelgl -> fm_comp_vol[0][i][k][l]) { if (fwrite (& k, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& l, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& this_proj -> modelgl -> frag_mol_ppvolume[0][i][k][l], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (this_proj -> modelgl -> frag_box[i][k][l], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } if (fwrite (img -> fm_show_vol[0][i], sizeof(gboolean), this_proj -> coord -> totcoord[2], fp) != this_proj -> coord -> totcoord[2]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> fm_vol_col[0][i], sizeof(ColRGBA), this_proj -> coord -> totcoord[2], fp) != this_proj -> coord -> totcoord[2]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (this_proj -> modelgl -> adv_bonding[1]) { if (fwrite (& this_proj -> coord -> totcoord[3], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i steps; k++) { for (l=0; l coord -> totcoord[3]; l++) { if (this_proj -> modelgl -> fm_comp_vol[1][i][k][l]) j++; } } if (fwrite (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { for (k=0; k steps; k++) { for (l=0; l coord -> totcoord[3]; l++) { if (this_proj -> modelgl -> fm_comp_vol[1][i][k][l]) { if (fwrite (& k, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& l, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& this_proj -> modelgl -> frag_mol_ppvolume[1][i][k][l], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } if (fwrite (img -> fm_show_vol[1][i], sizeof(gboolean), this_proj -> coord -> totcoord[3], fp) != this_proj -> coord -> totcoord[3]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> fm_vol_col[1][i], sizeof(ColRGBA), this_proj -> coord -> totcoord[3], fp) != this_proj -> coord -> totcoord[3]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (save_atom_b (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_B; } } } // Finally selection lists, bonds, angles and dihedrals for (i=0; i<2; i++) { if (fwrite (& img -> selected[i] -> selected, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected) { atom_in_selection * at = img -> selected[i] -> first; for (j=0; j selected[i] -> selected; j++) { if (fwrite (& at -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (at -> next) at = at -> next; } if (img -> selected[i] -> selected >= 2 && img -> selected[i] -> selected <= 20) { j = num_bonds (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_bonds, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 3) { j = num_angles (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_angles, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 4 && img -> selected[i] -> selected <= 10) { j = num_dihedrals (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_dihedrals, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } } } return OK; } atomes_1.3.1/src/project/open_p.c0000664000175000017500000007034215212624223016374 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file open_p.c * @short Functions to start the reading of an atomes project file * @author Sébastien Le Roux */ /* * This file: 'open_p.c' * * Contains: * - The functions to start the reading of an atomes project file * * List of functions: int read_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid); int open_project (FILE * fp, int wid); char * read_string (int i, FILE * fp); gchar * read_this_string (FILE * fp); void initcnames (project * this_proj, int rid); void allocatoms (project * this_proj); void alloc_proj_data (project * this_proj, int cid); chemical_data * alloc_chem_data (int spec); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "glview.h" #include "movie.h" #include "preferences.h" extern void init_box_calc (); extern void set_color_map_sensitive (glwin * view); extern void init_gr (project * this_proj, int rdf); extern void init_sq (project * this_proj, int sqk); extern void init_bond (project * this_proj); extern void init_ang (project * this_proj); extern void init_ring (project * this_proj); extern void init_chain (project * this_proj); extern void init_msd (project * this_proj); extern void init_sph (project * this_proj, int opening); extern void init_skt (project * this_proj, int opening); extern void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); extern void add_curve_widgets (project * this_proj, int rid); extern G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data); float project_file_version; gboolean version_2_5_and_bellow; gboolean version_2_6_and_above; gboolean version_2_7_and_above; gboolean version_2_8_and_above; gboolean version_2_9_and_above; /*! \fn char * read_string (int i, FILE * fp) \brief read a string from a file \param i the size of the string to read \param fp the file pointer */ char * read_string (int i, FILE * fp) { char * tmp = NULL; tmp = g_malloc0(i*sizeof*tmp); int j; for (j=0; j 0) { gchar * str = read_string (i, fp); return str; } return NULL; } /*! \fn void initcnames (project * this_proj, int rid) \brief initialize curve names \param project the target project \param rid calculation id */ void initcnames (project * this_proj, int rid) { switch (rid) { case GDR: init_gr (this_proj, rid); break; case SQD: init_sq (this_proj, rid); break; case SKD: init_sq (this_proj, rid); break; case GDK: init_gr (this_proj, rid); break; case BND: init_bond (this_proj); break; case ANG: init_ang (this_proj); break; case RIN: init_ring (this_proj); break; case CHA: init_chain (this_proj); break; case SPH: init_sph (this_proj, 1); break; case MSD: init_msd (this_proj); break; case SKT: init_skt (this_proj, 1); break; } } /*! \fn void allocatoms (project * this_proj) \brief allocate project data \param this_proj the target project */ void allocatoms (project * this_proj) { int i, j; if (this_proj -> atoms != NULL) { g_free (this_proj -> atoms); this_proj -> atoms = NULL; } this_proj -> atoms = g_malloc0(this_proj -> steps*sizeof*this_proj -> atoms); for (i=0; i < this_proj -> steps; i++) { this_proj -> atoms[i] = g_malloc0(this_proj -> natomes*sizeof*this_proj -> atoms[i]); for (j=0; j natomes; j++) { this_proj -> atoms[i][j].style = NONE; } } } /*! \fn chemical_data * alloc_chem_data (int spec) \brief allocate chemistry data \param spec the number of chemical species */ chemical_data * alloc_chem_data (int spec) { chemical_data * chem = g_malloc0(sizeof*chem); chem -> label = g_malloc0(spec*sizeof*chem -> label); chem -> element = g_malloc0(spec*sizeof*chem -> element); chem -> nsps = allocint (spec); chem -> formula = allocint (spec); chem -> grtotcutoff = default_totcut; chem -> cutoffs = allocddouble (spec, spec); chem -> chem_prop = allocddouble (CHEM_PARAMS, spec); return chem; } /*! \fn void alloc_proj_data (project * this_proj, int cid) \brief allocate data \param this_proj the target project \param cid Allocate chemistry data (1/0) */ void alloc_proj_data (project * this_proj, int cid) { if (cid) this_proj -> chemistry = alloc_chem_data (this_proj -> nspec); allocatoms (this_proj); } /*! \fn int read_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) \brief saving analysis parameter(s) and result(s) to project file \param fp the file pointer \param this_proj the target project \param this_analysis the target analysis \param wid reading workspace (1/0) */ int read_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i != this_analysis -> aid) { // This is not supposed to happen return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } this_analysis -> name = read_this_string (fp); if (! this_analysis -> name) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> avail_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> init_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> calc_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> requires_md, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> num_delta, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> delta, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> min, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> max, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> fact, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> graph_res, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (this_analysis -> graph_res) { if (fread (& this_analysis -> numc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i != this_analysis -> c_sets) { // This is not supposed to happen return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } if (fread (this_analysis -> compat_id, sizeof(int), this_analysis -> c_sets, fp) != this_analysis -> c_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i) { this_analysis -> x_title = read_this_string (fp); if (! this_analysis -> x_title) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i) { initcnames (this_proj, this_analysis -> aid); for (j=0; j name, this_analysis -> aid, j); if (read_project_curve (fp, wid, this_proj -> id) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); // g_debug ("Error :: analysis= %s, aid= %d, j= %d", this_analysis -> name, this_analysis -> aid, j); return ERROR_CURVE; } if (this_analysis -> aid == SPH) { init_curve_title (this_proj, SPH, j); } } } } return OK; } /*! \fn int open_project (FILE * fp, int wid) \brief open atomes project file \param fp the file pointer \param wid reading workspace (1/0) */ int open_project (FILE * fp, int wid) { int i, j, k; gchar * version; version = read_this_string (fp); if (! version) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); project_file_version = 0.0; if (sscanf(version, "%*[^0-9]%f", & project_file_version) != 1) { return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } version_2_6_and_above = FALSE; version_2_7_and_above = FALSE; version_2_8_and_above = FALSE; version_2_9_and_above = FALSE; int calcs_to_read; // Start version related tests if (g_strcmp0(version, "%\n% project file v-2.6\n%\n") == 0) { version_2_6_and_above = TRUE; } else if (g_strcmp0(version, "%\n% project file v-2.7\n%\n") == 0) { version_2_6_and_above = TRUE; version_2_7_and_above = TRUE; } else if (g_strcmp0(version, "%\n% project file v-2.8\n%\n") == 0) { version_2_6_and_above = TRUE; version_2_7_and_above = TRUE; version_2_8_and_above = TRUE; } else if (g_strcmp0(version, "%\n% project file v-2.9\n%\n") == 0) { version_2_6_and_above = TRUE; version_2_7_and_above = TRUE; version_2_8_and_above = TRUE; version_2_9_and_above = TRUE; } // End version related tests // Ensure file compatibility with STEP_LIMIT for atomes version < 1.3.0 reading_step_limit = (version_2_9_and_above) ? STEP_LIMIT : STEP_LIMIT*10; // Temporary buffers for version compatibility < 2.9 gboolean * tmp_avail, * tmp_init, * tmp_calc; int * tmp_num_delta; double * tmp_delta; double * tmp_min; double * tmp_max; #ifdef DEBUG g_debug ("%s", version); #endif // DEBUG g_free (version); // After that we read the data active_project -> name = read_this_string (fp); if (active_project -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); #ifdef DEBUG g_debug ("OPEN_PROJECT: Project name= %s",active_project -> name); #endif if (fread (& active_project -> tfile, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_project -> tfile > -1) { active_project -> coordfile = read_this_string (fp); if (active_project -> coordfile == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i > -1) { active_project -> bondfile = read_this_string (fp); if (active_project -> bondfile == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (version_2_9_and_above) { if (fread (& calcs_to_read, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { // NCALCS was first set to 10 calcs_to_read = 10; // We need temporary buffers to read this data tmp_avail = allocbool (calcs_to_read); tmp_init = allocbool (calcs_to_read); tmp_calc = allocbool (calcs_to_read); if (fread (tmp_avail, sizeof(gboolean), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_init, sizeof(gboolean), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_calc, sizeof(gboolean), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> natomes, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> steps, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_cell -> pbc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_cell -> frac, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_cell -> ltype, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i > 1 && i != active_project -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i > 1) active_cell -> npt = TRUE; active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; for (j=0; j box[j].vect[k], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (active_cell -> box[j].param[0], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_cell -> box[j].param[1], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_cell -> crystal, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_cell -> crystal && i) { active_cell -> sp_group = g_malloc0(sizeof*active_cell -> sp_group); active_cell -> sp_group -> id = i; active_cell -> sp_group -> bravais = read_this_string (fp); if (! active_cell -> sp_group -> bravais) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); active_cell -> sp_group -> hms = read_this_string (fp); if (! active_cell -> sp_group -> hms) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); active_cell -> sp_group -> setting = read_this_string (fp); if (! active_cell -> sp_group -> setting) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> run, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> initgl, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> tmp_pixels, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (atomes_render_image && ! render_image_pixels) render_image_pixels = duplicate_int (2, active_project -> tmp_pixels); if (! version_2_9_and_above) { // Temporary buffers again tmp_num_delta = allocint (calcs_to_read); tmp_delta = allocdouble (calcs_to_read); if (fread (tmp_num_delta, sizeof(int), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_delta, sizeof(double), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { // Analysis data for k-points sampling for (i=0; i<2; i++) { if (fread (active_project -> sk_advanced[i], sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (fread (active_project -> rsearch, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i<5; i++) { if (fread (active_project -> rsparam[i], sizeof(int), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> rsdata[i], sizeof(double), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> csearch, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> csparam, sizeof(int), 7, fp) != 7) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> csdata, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (! version_2_9_and_above) { // Temporary buffers again tmp_min = allocdouble (calcs_to_read); tmp_max = allocdouble (calcs_to_read); if (fread (tmp_min, sizeof(double), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_max, sizeof(double), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> tunit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (version_2_9_and_above) { if (active_project -> steps) { if (fread (& active_project -> skt_corr_threshold, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> skt_all_sets, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (! active_project -> skt_all_sets) { if (fread (& active_project -> skt_n_data_sets, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_project -> skt_n_data_sets) { active_project -> skt_step_id = allocint (active_project -> skt_n_data_sets); if (fread (active_project -> skt_step_id, sizeof(int), active_project -> skt_n_data_sets, fp) != active_project -> skt_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (fread (& active_project -> sqw_n_data_sets, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_project -> sqw_n_data_sets) { active_project -> sqw_q_id = allocdouble (active_project -> sqw_n_data_sets); if (fread (active_project -> sqw_q_id, sizeof(double), active_project -> sqw_n_data_sets, fp) != active_project -> sqw_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> sqw_freq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (! active_project -> natomes || ! active_project -> nspec) { return signal_error (__FILE__, __func__, __LINE__-2, ERROR_NO_WAY); } else { alloc_proj_data (active_project, 1); active_chem = active_project -> chemistry; if (version_2_6_and_above) { for (i=0; i nspec; i++) { active_chem -> label[i] = read_this_string (fp); if (! active_chem -> label[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); active_chem -> element[i] = read_this_string (fp); if (! active_chem -> element[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (fread (active_chem -> nsps, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_chem -> formula, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); j = 0; for (i=0; i nspec; i++) j+= active_chem -> nsps[i]; if (j != active_project -> natomes) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i chem_prop[i], sizeof(double), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (! version_2_7_and_above) { for (i=0; i nspec; i++) { active_chem -> chem_prop[CHEM_X][i] = active_chem -> chem_prop[CHEM_Z][i]; } } if (fread (& active_chem -> grtotcutoff, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for ( i = 0 ; i < active_project -> nspec ; i ++ ) { if (fread (active_chem -> cutoffs[i], sizeof(double), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } for (i=0; i steps; i++) { for (j=0; j< active_project -> natomes; j++) { if (read_atom_a (fp, active_project, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_A; } } } init_box_calc (); if (active_project -> run) { #ifdef DEBUG g_debug ("OPEN_PROJECT:: So far so good ... still"); g_debug ("OPEN_PROJECT:: RUN PROJECT\n"); #endif i = alloc_data_ (& active_project -> natomes, & active_project -> nspec, & active_project -> steps); if (i == 1) { if (! version_2_6_and_above) { j = 1; prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps, & j); } // Read curves init_atomes_analysis (active_project, FALSE); if (version_2_9_and_above) { for (i=0; i analysis[i]) { if (read_analysis (fp, active_project, active_project -> analysis[i], wid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ANA; } } } } else { for (i=0; i analysis[i]) { active_project -> analysis[i] -> avail_ok = tmp_avail[i]; active_project -> analysis[i] -> init_ok = tmp_init[i]; active_project -> analysis[i] -> calc_ok = tmp_calc[i]; active_project -> analysis[i] -> delta = tmp_delta[i]; active_project -> analysis[i] -> num_delta = tmp_num_delta[i]; active_project -> analysis[i] -> min = tmp_min[i]; active_project -> analysis[i] -> max = tmp_max[i]; if (active_project -> analysis[i] -> init_ok) { initcnames (active_project, i); } } } g_free (tmp_avail); g_free (tmp_init); g_free (tmp_calc); g_free (tmp_delta); g_free (tmp_num_delta); g_free (tmp_min); g_free (tmp_max); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); #ifdef DEBUG g_debug ("\n**********************************************\n curves to read= %d\n**********************************************\n", i); #endif if (i != 0) { j = 0; if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (j) { active_project -> analysis[SPH] -> numc = j; alloc_analysis_curves (active_project -> id, active_project -> analysis[SPH]); add_curve_widgets (active_project, SPH); active_project -> analysis[SPH] -> avail_ok = TRUE; for (k=0; k analysis[SPH] -> curves[k] -> name = read_this_string (fp); if (active_project -> analysis[SPH] -> curves[k] -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } for (j=0; j initgl) { gboolean tmp_bonding; if (fread (& tmp_bonding, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_adv_bonding, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); apply_project (TRUE); if (! atomes_render_image) fill_tool_model (); int tmpcoord[10]; if (fread (tmpcoord, sizeof(int), 10, fp) != 10) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_glwin -> bonding) { // for (i=0; i<10; i++) g_debug ("READING :: i= %d, tmpcoord[%d]= %d, active_coord -> totcoord[%d]= %d", i, i, tmpcoord[i], i, active_coord -> totcoord[i]); for (i=0; i<2; i++) if (tmpcoord[i] != active_coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=2; i<4; i++) { if (active_glwin -> adv_bonding[i-2]) { if (tmpcoord[i] != active_coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } } for (i=0; i<10; i++) active_coord -> totcoord[i] = tmpcoord[i]; // Read molecule info if ((active_project -> natomes > ATOM_LIMIT || active_project -> steps > reading_step_limit) && tmp_adv_bonding[1]) { if (read_mol (fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } for (i=0; i<2; i++) active_glwin -> adv_bonding[i] = tmp_adv_bonding[i]; active_glwin -> bonding = tmp_bonding; if (read_bonding (fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_COORD; } if (read_opengl_image (fp, active_project, active_glwin -> anim -> last -> img, active_project -> nspec) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } if (read_dlp_field_data (fp, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (read_lmp_field_data (fp, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } for (i=0; i<2; i++) { if (read_cpmd_data (fp, i, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } for (i=0; i<2; i++) { if (read_cp2k_data (fp, i, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } #ifdef GTK3 // GTK3 Menu Action To Check set_color_map_sensitive (active_glwin); #endif return OK; } return OK; } } atomes_1.3.1/src/project/save_curve.c0000664000175000017500000003140715212624223017255 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_curve.c * @short Functions to save curves information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_curve.c' * * Contains: * - The functions to save curves information in the atomes project file format * * List of functions: int write_data_layout (FILE * fp, DataLayout * layout); int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid); */ #include "global.h" #include "project.h" /*! \fn int write_data_layout (FILE * fp, DataLayout * layout) \brief save curve data layout to file \param fp the file pointer \param layout the data layout to save */ int write_data_layout (FILE * fp, DataLayout * layout) { if (fwrite (& layout -> datacolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> glyph, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> gsize, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> gfreq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> hwidth, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> hopac, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> hpos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> aspect, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); return OK; } /*! \fn int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid) \brief save project curve to file \param fp the file pointer \param this_proj the target project \param wid saving workspace (1/0) \param rid the calculation to save \param cid the curve id to save */ int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid) { int i, j, k; if (fwrite (& rid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& cid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; if (save_this_string (fp, this_curve -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> displayed, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> ndata, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> data[0], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> data[1], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); i = 0; if (this_curve -> err != NULL) i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (this_curve -> err != NULL) { if (fwrite (this_curve -> err, sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (this_curve -> displayed) { if (fwrite (this_curve -> wsize, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> cmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> cmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Title if (fwrite (& this_curve -> show_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> default_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (! this_curve -> default_title) { if (save_this_string (fp, this_curve -> title) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fwrite (this_curve -> title_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (save_this_string (fp, this_curve -> title_font) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> title_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Axis if (fwrite (this_curve -> axmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> axmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { if (save_this_string (fp, this_curve -> axis_title[j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (save_this_string (fp, this_curve -> axis_title_font[j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fwrite (this_curve -> axis_title_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> axis_title_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> scale, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> axis_defaut_title, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> autoscale, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> majt, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> mint, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> ticks_io, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> ticks_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> majt_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> mint_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_digit, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { if (save_this_string (fp, this_curve -> labels_font[j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fwrite (this_curve -> labels_angle, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_shift_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_shift_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> show_grid, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> show_axis, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Legend if (fwrite (& this_curve -> show_legend, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (save_this_string (fp, this_curve -> legend_font) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> legend_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> show_legend_box, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_box_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_box_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_box_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Frame if (fwrite (& this_curve -> show_frame, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> frame_pos, sizeof(this_curve -> frame_pos), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Data if (fwrite (& this_curve -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (write_data_layout (fp, this_curve -> layout) != OK ) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } if (fwrite (& this_curve -> draw_id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> bshift, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); i = 0; CurveExtra * ctmp; if (this_curve -> extrac -> extras > 0) { ctmp = this_curve -> extrac -> first; for (j=0; j extrac -> extras; j++) { if (ctmp -> id.a == this_proj -> id || wid) { i ++; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (i > 0) { ctmp = this_curve -> extrac -> first; for (j=0; j extrac -> extras; j++) { if (ctmp -> id.a == this_proj -> id || wid) { k = (wid) ? ctmp -> id.a : 0; if (fwrite (& k, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& ctmp -> id.b, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& ctmp -> id.c, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (write_data_layout (fp, ctmp -> layout) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } if (save_this_string (fp, this_curve -> cfile) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } #ifdef DEBUG // debugiocurve (this_proj, win, rid, cid, "WRITE"); #endif return OK; } atomes_1.3.1/src/project/init_p.c0000664000175000017500000002445115212624223016376 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file init_p.c * @short Functions to initialize an atomes project * @author Sébastien Le Roux */ /* * This file: 'init_p.c' * * Contains: * - The functions to initialize an atomes project * * List of functions: void init_curves_and_calc (project * this_proj); void apply_analysis_default_parameters_to_project (project * this_proj, gboolean with_analysis); void apply_default_parameters_to_project (project * this_proj); void init_project (gboolean alloc_box); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "preferences.h" #include "project.h" #include "curve.h" #include "glview.h" #include "glwindow.h" extern void init_camera (project * this_proj); extern void setup_default_image (project * this_proj, image * img); extern void clean_atom_style (project * this_proj); extern void setup_default_species_parameters_for_image (project * this_proj, image * img); extern void init_shaders (glwin * view); extern G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern void update_gradient_widgets (gradient_edition * gradient_win, background * back); extern G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); /*! \fn void init_curves_and_calc (project * this_proj) \brief for a project reset analysis, curves, data to not performed \param this_proj the target project */ void init_curves_and_calc (project * this_proj) { int i; if (this_proj -> analysis) { for (i=0; i analysis[i]) { this_proj -> analysis[i] -> avail_ok = FALSE; this_proj -> analysis[i] -> init_ok = FALSE; this_proj -> analysis[i] -> calc_ok = FALSE; } } } } /*! \fn void apply_analysis_default_parameters_to_project (project * this_proj) \brief apply default analysis parameters to project \param this_proj the target project */ void apply_analysis_default_parameters_to_project (project * this_proj) { int i, j; for (i=0; i<6; i++) { if (this_proj -> analysis[i]) this_proj -> analysis[i] -> num_delta = default_num_delta[i]; } if (this_proj -> analysis[RIN]) { active_project -> analysis[RIN] -> delta = 1.0; active_project -> analysis[RIN] -> min = 1.0; } if (this_proj -> analysis[CHA]) { active_project -> analysis[CHA] -> delta = 1.0; active_project -> analysis[CHA] -> min = 1.0; } if (this_proj -> analysis[SPH]) { active_project -> analysis[SPH] -> delta = 2.0; this_proj -> analysis[SPH] -> num_delta = default_num_delta[6]; } if (this_proj -> analysis[MSD]) this_proj -> analysis[MSD] -> num_delta = default_num_delta[7]; if (this_proj -> analysis[MSD]) this_proj -> analysis[MSD] -> delta = default_delta_t[0]; // Other analysis parameters for (i=0; i<5; i++) { this_proj -> rsparam[i][0] = default_rsparam[1]; this_proj -> rsparam[i][1] = default_rsparam[2]; for (j=2; j<5; j++) this_proj -> rsparam[i][j] = default_rsparam[j+2]; } this_proj -> rsearch[0] = default_rsparam[0]; this_proj -> rsearch[1] = default_rsparam[3]; this_proj -> csparam[0] = default_csparam[0]; for (i=1; i<4; i++) this_proj -> csparam[i]= default_csparam[i+2]; this_proj -> csparam[5] = default_csparam[1]; this_proj -> csearch = default_csparam[2]; this_proj -> tunit = default_delta_t[1]; this_proj -> skt_all_sets = default_skt_sets; this_proj -> skt_n_data_sets = default_skt_n_sets; this_proj -> sqw_n_data_sets = default_sqw_n_sets; this_proj -> sqw_freq = default_sqw_freq; } /*! \fn void apply_default_parameters_to_project (project * this_proj, gboolean with_analysis) \brief apply default parameters to project \param this_proj the target project */ void apply_default_parameters_to_project (project * this_proj, gboolean with_analysis) { int i, j, k, l; if (with_analysis) { // Calc parameters if (this_proj -> chemistry) { this_proj -> chemistry -> grtotcutoff = default_totcut; bond_cutoff * cut = default_bond_cutoff; gboolean cupdate = FALSE; while (cut) { i = cut -> Z[0]; j = cut -> Z[1]; for (k=0; k nspec; k++) { if ((int)this_proj -> chemistry -> chem_prop[CHEM_Z][k] == i) { cupdate = TRUE; break; } } if (cupdate) { cupdate = FALSE; for (l=0; l nspec; l++) { if ((int)this_proj -> chemistry -> chem_prop[CHEM_Z][l] == j) { cupdate = TRUE; break; } } } if (cupdate) { this_proj -> chemistry -> cutoffs[k][l] = this_proj -> chemistry -> cutoffs[l][k] = cut -> cutoff; } cut = cut -> next; } if (this_proj -> analysis) { apply_analysis_default_parameters_to_project (this_proj); } } // Other analysis parameters for (i=0; i<5; i++) { this_proj -> rsparam[i][0] = default_rsparam[1]; this_proj -> rsparam[i][1] = default_rsparam[2]; for (j=2; j<5; j++) this_proj -> rsparam[i][j] = default_rsparam[j+2]; } this_proj -> rsearch[0] = default_rsparam[0]; this_proj -> rsearch[1] = default_rsparam[3]; this_proj -> csparam[0] = default_csparam[0]; for (i=1; i<4; i++) this_proj -> csparam[i]= default_csparam[i+2]; this_proj -> csparam[5] = default_csparam[1]; this_proj -> csearch = default_csparam[2]; this_proj -> tunit = default_delta_t[1]; this_proj -> skt_all_sets = default_skt_sets; this_proj -> skt_n_data_sets = default_skt_n_sets; this_proj -> sqw_n_data_sets = default_sqw_n_sets; this_proj -> sqw_freq = default_sqw_freq; } if (this_proj -> modelgl) { image * img = this_proj -> modelgl -> anim -> last -> img; if (img) { preferences = FALSE; setup_default_image (this_proj, img); preferences = TRUE; i = -1; if (this_proj -> id != activep) { i = activep; active_project_changed (this_proj -> id); } init_camera (this_proj); if (i != -1) active_project_changed (i); setup_default_species_parameters_for_image (this_proj, img); clean_atom_style (this_proj); init_shaders (this_proj -> modelgl); update (this_proj -> modelgl); if (this_proj -> modelgl -> box_win) { if (this_proj -> modelgl -> box_win -> win) this_proj -> modelgl -> box_win -> win = destroy_this_widget (this_proj -> modelgl -> box_win -> win); g_free (this_proj -> modelgl -> box_win); this_proj -> modelgl -> box_win = NULL; box_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> axis_win) { if (this_proj -> modelgl -> axis_win -> win) this_proj -> modelgl -> axis_win -> win = destroy_this_widget (this_proj -> modelgl -> axis_win -> win); g_free (this_proj -> modelgl -> axis_win); this_proj -> modelgl -> axis_win = NULL; axis_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> rep_win) { if (this_proj -> modelgl -> rep_win -> win) this_proj -> modelgl -> rep_win -> win = destroy_this_widget (this_proj -> modelgl -> rep_win -> win); g_free (this_proj -> modelgl -> rep_win); this_proj -> modelgl -> rep_win = NULL; representation_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> opengl_win) { if (this_proj -> modelgl -> opengl_win -> win) this_proj -> modelgl -> opengl_win -> win = destroy_this_widget (this_proj -> modelgl -> opengl_win -> win); g_free (this_proj -> modelgl -> opengl_win); this_proj -> modelgl -> opengl_win = NULL; opengl_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> gradient_win) update_gradient_widgets (this_proj -> modelgl -> gradient_win, img -> back); } } } /*! \fn void init_project (gboolean alloc_box) \brief initialize a new project \param alloc_box allocate data for the MD box (1/0) */ void init_project (gboolean alloc_box) { project * new_proj = g_malloc0(sizeof*new_proj); nprojects ++; activep = nprojects - 1; new_proj -> id = activep; new_proj -> name = g_strdup_printf("%s%2d", _("Project N°"), activep); apply_default_parameters_to_project (new_proj, TRUE); new_proj -> tfile = -1; new_proj -> newproj = TRUE; new_proj -> steps = 1; new_proj -> tunit = (int)default_delta_t[1]; // Other calculation related parameters : to be added to user preferences new_proj -> xcor = 1; new_proj -> sk_advanced[0][0] = new_proj -> sk_advanced[1][0] = 1.0; new_proj -> sk_advanced[0][1] = new_proj -> sk_advanced[1][1] = 15.0; // new_proj -> skt_corr_threshold = 10; // new_proj -> skt_n_data_sets = 5; // new_proj -> sqw_n_data_sets = 5; // new_proj -> coord = g_malloc0(sizeof*new_proj -> coord); if (alloc_box) new_proj -> cell.box = g_malloc0(sizeof*new_proj -> cell.box); remove_edition_actions (); if (nprojects == 1) { workzone.first = g_malloc0(sizeof*workzone.first); workzone.first = new_proj; workzone.last = g_malloc0(sizeof*workzone.last); } else { new_proj -> prev = workzone.last; workzone.last -> next = new_proj; } workzone.last = new_proj; active_project_changed (new_proj -> id); prep_calc_actions (); new_proj -> newproj = FALSE; } atomes_1.3.1/src/project/read_qm.c0000664000175000017500000003032215212624223016516 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_qm.c * @short Functions to read ab-intio (CPMD/CP2K) calculation parameters in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_qm.c' * * Contains: * - Functions to read ab-intio (CPMD/CP2K) calculation parameters in the atomes project file format * * List of functions: int read_thermo (FILE * fp, thermostat * thermo); int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input); int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf); int read_cpmd_data (FILE * fp, int cid, project * this_proj); int read_cp2k_data (FILE * fp, int cid, project * this_proj); */ #include "global.h" #include "project.h" /*! \fn int read_thermo (FILE * fp, thermostat * thermo) \brief read thermostat information from file \param fp the file pointer \param thermo the thermostat to store the data */ int read_thermo (FILE * fp, thermostat * thermo) { if (fread (& thermo -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> sys, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (thermo -> params, sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } /*! \fn int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) \brief read fixed CPMD atom(s) from file \param fp the file pointer \param cpmd_input the CPMD input structure to store the data */ int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) { int i; if (fread (& cpmd_input -> fixat, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (cpmd_input -> fixat) { if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cpmd_input -> fixlist = allocint (cpmd_input -> fixat); if (fread (cpmd_input -> fixlist, sizeof(int), cpmd_input -> fixat, fp) != cpmd_input -> fixat) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cpmd_input -> fixcoord = allocdint (cpmd_input -> fixat, 3); for (i=0; i fixat; i++) if (fread (cpmd_input -> fixcoord[i], sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } } return OK; } /*! \fn int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) \brief read fixed CP2K from file \param fp the file pointer \param cp2k_input the CP2K input structure to store the data \param idf the fixed atom(s) format */ int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) { int i; if (fread (& cp2k_input -> fixat[idf], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (cp2k_input -> fixat[idf]) { if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cp2k_input -> fixlist[idf] = allocint (cp2k_input -> fixat[idf]); if (fread (cp2k_input -> fixlist[idf], sizeof(int), cp2k_input -> fixat[idf], fp) != cp2k_input -> fixat[idf]) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cp2k_input -> fixcoord[idf] = allocdint (cp2k_input -> fixat[idf], 3); for (i=0; i fixat[idf]; i++) if (fread (cp2k_input -> fixcoord[idf][i], sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } } return OK; } /*! \fn int read_cpmd_data (FILE * fp, int cid, project * this_proj) \brief read CPMD data from file \param fp the file pointer \param cid CPMD id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int read_cpmd_data (FILE * fp, int cid, project * this_proj) { int i; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (! i) return OK; this_proj -> cpmd_input[cid] = g_malloc0(sizeof*this_proj -> cpmd_input[cid]); if (fread (& this_proj -> cpmd_input[cid] -> calc_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (this_proj -> cpmd_input[cid] -> default_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (this_proj -> cpmd_input[cid] -> calc_opts, sizeof(double), 24, fp) != 24) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& this_proj -> cpmd_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> thermostats) { this_proj -> cpmd_input[cid] -> ions_thermostat = g_malloc0(sizeof*this_proj -> cpmd_input[cid] -> ions_thermostat); thermostat * thermo = this_proj -> cpmd_input[cid] -> ions_thermostat; for (i=0; i cpmd_input[cid] -> thermostats; i++) { if (read_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (i < this_proj -> cpmd_input[cid] -> thermostats - 1) { thermo -> next = g_malloc0(sizeof*thermo -> next); thermo -> next -> prev = thermo; thermo = thermo -> next; } } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { this_proj -> cpmd_input[cid] -> elec_thermostat = g_malloc0(sizeof*this_proj -> cpmd_input[cid] -> elec_thermostat); if (read_thermo (fp, this_proj -> cpmd_input[cid] -> elec_thermostat) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } } if (read_fixed_atoms_cpmd (fp, this_proj -> cpmd_input[cid]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (fread (& this_proj -> cpmd_input[cid] -> dummies, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> dummies) { this_proj -> cpmd_input[cid] -> dummy = g_malloc0(sizeof*this_proj -> cpmd_input[cid] -> dummy); dummy_atom * dummy = this_proj -> cpmd_input[cid] -> dummy; for (i=0; i < this_proj -> cpmd_input[cid] -> dummies; i ++) { if (fread (& dummy -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& dummy -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& dummy -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (dummy -> xyz, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (dummy -> coord, sizeof(int), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& dummy -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (dummy -> natoms) { dummy -> list = allocint (dummy -> natoms); if (fread (dummy -> list, sizeof(int), dummy -> natoms, fp) != dummy -> natoms) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (i < this_proj -> cpmd_input[cid] -> dummies - 1) { dummy -> next = g_malloc0(sizeof*dummy -> next); dummy -> next -> prev = dummy; dummy = dummy -> next; } } } this_proj -> cpmd_input[cid] -> pp = allocdint (this_proj -> nspec, 2); for (i=0; i nspec; i++) { if (fread (this_proj -> cpmd_input[cid] -> pp[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } this_proj -> cpmd_input[cid] -> info = read_this_string (fp); /*g_debug (" ********************* CPMD INFO *********************"); g_debug ("\n%s\n", this_proj -> cpmd_input[cid] -> info); g_debug (" *****************************************************");*/ if (this_proj -> cpmd_input[cid] -> info == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } /*! \fn int read_cp2k_data (FILE * fp, int cid, project * this_proj) \brief read CP2K data from file \param fp the file pointer \param cid CP2K id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int read_cp2k_data (FILE * fp, int cid, project * this_proj) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (! i) return OK; this_proj -> cp2k_input[cid] = g_malloc0(sizeof*this_proj -> cp2k_input[cid]); if (fread (& this_proj -> cp2k_input[cid] -> input_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (this_proj -> cp2k_input[cid] -> opts, sizeof(double), 42, fp) != 42) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); for (i=0; i<3; i++) { if (fread (this_proj -> cp2k_input[cid] -> extra_opts[i], sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fread (& this_proj -> cp2k_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cp2k_input[cid] -> thermostats) { this_proj -> cp2k_input[cid] -> ions_thermostat = g_malloc0(sizeof*this_proj -> cp2k_input[cid] -> ions_thermostat); thermostat * thermo = this_proj -> cp2k_input[cid] -> ions_thermostat; for (i=0; i cp2k_input[cid] -> thermostats; i++) { if (read_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (i < this_proj -> cp2k_input[cid] -> thermostats - 1) { thermo -> next = g_malloc0(sizeof*thermo -> next); thermo -> next -> prev = thermo; thermo = thermo -> next; } } } for (i=0; i<2; i++) { if (read_fixed_atoms_cp2k (fp, this_proj -> cp2k_input[cid], i) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } this_proj -> cp2k_input[cid] -> spec_data = allocdint (this_proj -> nspec, 2); this_proj -> cp2k_input[cid] -> spec_files = g_malloc0(this_proj -> nspec*sizeof*this_proj -> cp2k_input[cid] -> spec_files); for (i=0; i nspec; i++) { if (fread (this_proj -> cp2k_input[cid] -> spec_data[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); this_proj -> cp2k_input[cid] -> spec_files[i] = g_malloc0(2*sizeof*this_proj -> cp2k_input[cid] -> spec_files[i]); for (j=0; j<2; j++) { this_proj -> cp2k_input[cid] -> spec_files[i][j] = read_this_string (fp); } } for (i=0; i<5; i++) { this_proj -> cp2k_input[cid] -> files[i] = read_this_string (fp); } this_proj -> cp2k_input[cid] -> info = read_this_string (fp); if (this_proj -> cp2k_input[cid] -> info == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } atomes_1.3.1/src/project/debugio.c0000664000175000017500000003660715212624223016540 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file debugio.c * @short Some debugging and printing functions * @author Sébastien Le Roux */ /* * This file: 'debugio.c' * * Contains: * - Some debugging and printing functions * * List of functions: void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost); void debug_lattice_info (project * this_proj, gchar * iost); void debugioproj (project * this_proj, gchar * iost); void debug_chemical_information (project * this_proj); */ #include "global.h" #include "project.h" /*! \fn void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost) \brief debug and print some info about the curves in a project \param this_proj the target project \param win curve window exists (1/0) \param rid analysis id \param cid curve id \param iost input or output information */ void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost) { Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; g_debug (" "); g_debug ("IODEBUG: %s: pid= %d, rid= %d, cid= %d", iost, this_proj -> id, rid, cid); g_debug ("IODEBUG: %s: ndata= %d", iost, this_curve -> ndata); if (this_curve -> data[0] == NULL) { g_debug ("IODEBUG: %s: data[0] == NULL", iost); } g_debug ("IODEBUG: %s: x[0]= %f", iost, this_curve -> data[0][0]); g_debug ("IODEBUG: %s: y[0]= %f", iost, this_curve -> data[1][0]); g_debug ("IODEBUG: %s: x[ndata-1]= %f", iost, this_curve -> data[0][this_curve -> ndata - 1]); g_debug ("IODEBUG: %s: y[ndata-1]= %f", iost, this_curve -> data[1][this_curve -> ndata - 1]); if (win) { g_debug ("IODEBUG: %s: cmax[0]= %f, cmax[1]= %f", iost, this_curve -> cmax[0], this_curve -> cmax[1]); g_debug ("IODEBUG: %s: name= %s", iost, this_curve -> name); g_debug ("IODEBUG: %s: show_title= %d", iost, this_curve -> show_title); g_debug ("IODEBUG: %s: default_title= %d", iost, this_curve -> default_title); g_debug ("IODEBUG: %s: title= %s", iost, this_curve -> title); g_debug ("IODEBUG: %s: title_font= %s", iost, this_curve -> title_font); g_debug ("IODEBUG: %s: title_pos[0]= %f, title_pos[1]= %f", iost, this_curve -> title_pos[0], this_curve -> title_pos[1]); g_debug ("IODEBUG: %s: title.red= %f, title.green= %f, title.blue= %f", iost, this_curve -> title_color.red, this_curve -> title_color.green, this_curve -> title_color.blue); // Axis g_debug ("IODEBUG: %s: axmin[0]= %f, axmin[1]= %f", iost, this_curve -> axmin[0], this_curve -> axmin[1]); g_debug ("IODEBUG: %s: axmax[0]= %f, axmax[1]= %f", iost, this_curve -> axmax[0], this_curve -> axmax[1]); g_debug ("IODEBUG: %s: x_axis_title= %s", iost, this_curve -> axis_title[0]); g_debug ("IODEBUG: %s: x_axis_title_font= %s", iost, this_curve -> axis_title_font[0]); g_debug ("IODEBUG: %s: x_axis_title_pos[0]= %d, x_axis_title_pos[1]= %d", iost, this_curve -> axis_title_x[0], this_curve -> axis_title_y[0]); g_debug ("IODEBUG: %s: y_axis_title= %s", iost, this_curve -> axis_title[1]); g_debug ("IODEBUG: %s: y_axis_title_font= %s", iost, this_curve -> axis_title_font[1]); g_debug ("IODEBUG: %s: y_axis_title_pos[0]= %d, y_axis_title_pos[1]= %d", iost, this_curve -> axis_title_x[1], this_curve -> axis_title_y[1]); g_debug ("IODEBUG: %s: scale[0]= %d, scale[1]= %d", iost, this_curve -> scale[0], this_curve -> scale[1]); g_debug ("IODEBUG: %s: x_axis_defaut_title= %d", iost, this_curve -> axis_defaut_title[0]); g_debug ("IODEBUG: %s: y_axis_defaut_title= %d", iost, this_curve -> axis_defaut_title[1]); g_debug ("IODEBUG: %s: grid[0]= %d, grid[1]= %d", iost, this_curve -> show_grid[0], this_curve -> show_grid[1]); g_debug ("IODEBUG: %s: show_axis[0]= %d, show_axis[1]= %d", iost, this_curve -> show_axis[0], this_curve -> show_axis[1]); g_debug ("IODEBUG: %s: autoscale[0]= %d, autoscale[1]= %d", iost, this_curve -> autoscale[0], this_curve -> autoscale[1]); g_debug ("IODEBUG: %s: majt[0]= %f, majt[1]= %f", iost, this_curve -> majt[0], this_curve -> majt[1]); g_debug ("IODEBUG: %s: mint[0]= %d, mint[1]= %d", iost, this_curve -> mint[0], this_curve -> mint[1]); g_debug ("IODEBUG: %s: ticks_io[0]= %d, ticks_io[1]= %d", iost, this_curve -> ticks_io[0], this_curve -> ticks_io[1]); g_debug ("IODEBUG: %s: ticks_pos[0]= %d, ticks_pos[1]= %d", iost, this_curve -> ticks_pos[0], this_curve -> ticks_pos[1]); g_debug ("IODEBUG: %s: majt_size[0]= %d, majt_size[1]= %d", iost, this_curve -> majt_size[0], this_curve -> majt_size[1]); g_debug ("IODEBUG: %s: mint_size[0]= %d, mint_size[1]= %d", iost, this_curve -> mint_size[0], this_curve -> mint_size[1]); g_debug ("IODEBUG: %s: labels_pos[0]= %d, labels_pos[1]= %d", iost, this_curve -> labels_pos[0], this_curve -> labels_pos[1]); g_debug ("IODEBUG: %s: labels_digit[0]= %d, labels_digit[1]= %d", iost, this_curve -> labels_digit[0], this_curve -> labels_digit[1]); g_debug ("IODEBUG: %s: labels_font[0]= %s, labels_font[1]= %s", iost, this_curve -> labels_font[0], this_curve -> labels_font[1]); g_debug ("IODEBUG: %s: labels_angle[0]= %f, labels_angle[1]= %f", iost, this_curve -> labels_angle[0], this_curve -> labels_angle[1]); g_debug ("IODEBUG: %s: labels_shift_x[0]= %d, labels_shift_y[0]= %d", iost, this_curve -> labels_shift_x[0], this_curve -> labels_shift_y[0]); g_debug ("IODEBUG: %s: labels_shift_x[1]= %d, labels_shift_y[1]= %d", iost, this_curve -> labels_shift_x[1], this_curve -> labels_shift_y[1]); // Legend g_debug ("IODEBUG: %s: show_legend= %d", iost, this_curve -> show_legend); g_debug ("IODEBUG: %s: legend_pos[0]= %f, legend_pos[1]= %f", iost, this_curve -> legend_pos[0], this_curve -> legend_pos[1]); g_debug ("IODEBUG: %s: legend_font= %s", iost, this_curve -> legend_font); g_debug ("IODEBUG: %s: legend.red= %f, legend.green= %f, legend.blue= %f", iost, this_curve -> legend_color.red, this_curve -> legend_color.green, this_curve -> legend_color.blue); g_debug ("IODEBUG: %s: show_legend_box= %d", iost, this_curve -> show_legend_box); g_debug ("IODEBUG: %s: legend_box_dash= %d", iost, this_curve -> legend_box_dash); g_debug ("IODEBUG: %s: legend_box_thickness= %f", iost, this_curve -> legend_box_thickness); g_debug ("IODEBUG: %s: legend_box.red= %f, legend_box.green= %f, legend_box.blue= %f", iost, this_curve -> legend_box_color.red, this_curve -> legend_box_color.green, this_curve -> legend_box_color.blue); // Frame g_debug ("IODEBUG: %s: show_frame= %d", iost, this_curve -> show_frame); g_debug ("IODEBUG: %s: frame_type= %d", iost, this_curve -> frame_type); g_debug ("IODEBUG: %s: frame_dash= %d", iost, this_curve -> frame_dash); g_debug ("IODEBUG: %s: frame_thickness= %f", iost, this_curve -> frame_thickness); g_debug ("IODEBUG: %s: frame.red= %f, frame.green= %f, frame.blue= %f", iost, this_curve -> frame_color.red, this_curve -> frame_color.green, this_curve -> frame_color.blue); g_debug ("IODEBUG: %s: frame.xmin= %f, frame.xmax= %f", iost, this_curve -> frame_pos[0][0], this_curve -> frame_pos[0][1]); g_debug ("IODEBUG: %s: frame.ymin= %f, frame.ymax= %f", iost, this_curve -> frame_pos[1][0], this_curve -> frame_pos[1][1]); // Data g_debug ("IODEBUG: %s: backc.red= %f, backc.green= %f, backc.blue= %f", iost, this_curve -> backcolor.red, this_curve -> backcolor.green, this_curve -> backcolor.blue); g_debug ("IODEBUG: %s: legend_font= %s", iost, this_curve -> legend_font); if (this_curve -> cfile != NULL) { g_debug ("IODEBUG: %s: cfile= %s", iost, this_curve -> cfile); } } else { g_debug ("IODEBUG: %s: No curve window", iost); } } /*! \fn void debug_lattice_info (project * this_proj, gchar * iost) \brief debug lattice data \param this_proj the target project \param iost input or output information */ void debug_lattice_info (project * this_proj, gchar * iost) { g_debug ("IODEBUG::%s:: lattice debug", iost); cell_info * debug_cell = & this_proj -> cell; g_debug ("IODEBUG::%s:: pbc= %d, frac= %d, ltype= %d", iost, debug_cell -> pbc, debug_cell -> frac, debug_cell -> ltype); g_debug ("IODEBUG::%s:: npt= %d, has_a_box= %d, crystal= %d", iost, debug_cell -> npt, debug_cell -> has_a_box, debug_cell -> crystal); g_debug ("IODEBUG::%s:: volumec= %f, density= %f", iost, debug_cell -> volume, debug_cell -> density); g_debug ("IODEBUG::%s:: cextra[0]= %d, cextra[1]= %d, cextra[2]= %d", iost, debug_cell -> cextra[0], debug_cell -> cextra[1], debug_cell -> cextra[2]); if (debug_cell -> box) { box_info * debug_box = debug_cell -> box; int i; for (i=0; i<2; i++) g_debug ("IODEBUG::%s:: i= %d, param[%d][0]= %f, param[%d][1]= %f, param[%d][2]= %f", iost, i, i, debug_box -> param[i][0], i, debug_box -> param[i][1], i, debug_box -> param[i][2]); for (i=0; i<3; i++) g_debug ("IODEBUG::%s:: i= %d, vect[%d][0]= %f, vect[%d][1]= %f, vect[%d][2]= %f", iost, i, i, debug_box -> vect[i][0], i, debug_box -> vect[i][1], i, debug_box -> vect[i][2]); for (i=0; i<3; i++) g_debug ("IODEBUG::%s:: i= %d, rvect[%d][0]= %f, rvect[%d][1]= %f, rvect[%d][2]= %f", iost, i, i, debug_box -> rvect[i][0], i, debug_box -> rvect[i][1], i, debug_box -> rvect[i][2]); } } /*! \fn void debugioproj (project * this_proj, gchar * iost) \brief debug project info \param this_proj the target project \param iost input or output information */ void debugioproj (project * this_proj, gchar * iost) { int i, j; g_debug ("IODEBUG::%s: name= %s", iost, this_proj -> name); if (this_proj -> coordfile != NULL) { g_debug ("IODEBUG::%s: coordfile= %s", iost, this_proj -> coordfile); g_debug ("IODEBUG::%s: tfile= %d", iost, this_proj -> tfile); } if (this_proj -> bondfile != NULL) { g_debug ("IODEBUG::%s: bondfile= %s", iost, this_proj -> bondfile); } g_debug ("IODEBUG::%s: newproj= %d", iost, this_proj -> newproj); g_debug ("IODEBUG::%s: pbc= %d", iost, this_proj -> cell.pbc); g_debug ("IODEBUG::%s: frac= %d", iost, this_proj -> cell.frac); g_debug ("IODEBUG::%s: run= %d", iost, this_proj -> run); g_debug ("IODEBUG::%s: dmtx= %d", iost, this_proj -> dmtx); g_debug ("IODEBUG::%s: nspec= %d", iost, this_proj -> nspec); g_debug ("IODEBUG::%s: natomes= %d", iost, this_proj -> natomes); g_debug ("IODEBUG::%s: steps= %d", iost, this_proj -> steps); g_debug ("IODEBUG::%s: grtotcutoff= %f", iost, this_proj -> chemistry -> grtotcutoff); g_debug ("IODEBUG::%s: cvect[0][0]= %f, cvect[0][1]= %f, cvect[0][2]= %f", iost, this_proj -> cell.box[0].vect[0][0], this_proj -> cell.box[0].vect[0][1], this_proj -> cell.box[0].vect[0][2]); g_debug ("IODEBUG::%s: cvect[1][0]= %f, cvect[1][1]= %f, cvect[1][2]= %f", iost, this_proj -> cell.box[0].vect[1][0], this_proj -> cell.box[0].vect[1][1], this_proj -> cell.box[0].vect[1][2]); g_debug ("IODEBUG::%s: cvect[2][0]= %f, cvect[2][1]= %f, cvect[2][2]= %f", iost, this_proj -> cell.box[0].vect[2][0], this_proj -> cell.box[0].vect[2][1], this_proj -> cell.box[0].vect[2][2]); g_debug ("IODEBUG::%s: langles[0]= %f, langles[1]= %f, langles[2]= %f", iost, this_proj -> cell.box[0].param[1][0], this_proj -> cell.box[0].param[1][1], this_proj -> cell.box[0].param[1][2]); g_debug ("IODEBUG::%s: vmod[0]= %f, vmod[1]= %f, vmod[2]= %f", iost, this_proj -> cell.box[0].param[0][0], this_proj -> cell.box[0].param[0][1], this_proj -> cell.box[0].param[0][2]); for (i=0; i analysis[i] -> calc_ok); g_debug ("IODEBUG::%s: i= %d, initok[i]= %d", iost, i, this_proj -> analysis[i] -> init_ok); g_debug ("IODEBUG::%s: i= %d, num_delta[i]= %d", iost, i, this_proj -> analysis[i] -> num_delta); g_debug ("IODEBUG::%s: i= %d, delta[i]= %f", iost, i, this_proj -> analysis[i] -> delta); g_debug ("IODEBUG::%s: i= %d, min[i]= %f", iost, i, this_proj -> analysis[i] -> min); g_debug ("IODEBUG::%s: i= %d, max[i]= %f", iost, i, this_proj -> analysis[i] -> max); } if (this_proj -> natomes != 0 && this_proj -> nspec != 0) { for (i=0; i steps; i++) { g_debug ("IODEBUG::%s: proj.atom[%d][%d].x= %f, proj.atom[%d][%d].x= %f", iost, i, 0, this_proj -> atoms[i][0].x, i, this_proj -> natomes-1, this_proj -> atoms[i][this_proj -> natomes - 1].x); g_debug ("IODEBUG::%s: proj.atom[%d][%d].y= %f, proj.atom[%d][%d].y= %f", iost, i, 0, this_proj -> atoms[i][0].y, i, this_proj -> natomes - 1, this_proj -> atoms[i][this_proj -> natomes - 1].y); g_debug ("IODEBUG::%s: proj.atom[%d][%d].z= %f, proj.atom[%d][%d].z= %f", iost, i, 0, this_proj -> atoms[i][0].z, i, this_proj -> natomes - 1, this_proj -> atoms[i][this_proj -> natomes - 1].z); } for (i=0; i nspec; i++) { g_debug ("IODEBUG::%s: i= %d, nsps[i]= %d", iost, i, this_proj -> chemistry -> nsps[i]); g_debug ("IODEBUG::%s: i= %d, atid[i]= %d", iost, i, (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]); g_debug ("IODEBUG::%s: i= %d, mass[i]= %f", iost, i, this_proj -> chemistry -> chem_prop[CHEM_M][i]); g_debug ("IODEBUG::%s: i= %d, rad[i]= %f", iost, i, this_proj -> chemistry -> chem_prop[CHEM_R][i]); } for (i=0; i nspec; i++) { for (j=0; j nspec; j++) { g_debug ("IODEBUG::%s: i= %d, j= %d, cutoffs[i][j]= %f", iost, i, j, this_proj -> chemistry -> cutoffs[i][j]); } } } debug_lattice_info (this_proj, iost); } /*! \fn void debug_chemical_information (project * this_proj) \brief debug chemical data info \param this_proj the target project */ void debug_chemical_information (project * this_proj) { g_debug ("Number of species: %d", this_proj -> nspec); int i; for (i=0; i nspec; i++) { g_debug ("Spec= %d, label= %s, element= %s ", i+1, this_proj -> chemistry -> label[i], this_proj -> chemistry -> element[i]); g_debug (" nsps[%d]= %d, formula[%d]= %d", i+1, this_proj -> chemistry -> nsps[i], i+1, this_proj -> chemistry -> formula[i]); } g_debug ("Number of atoms: %d", this_proj -> natomes); for (i=0; i natomes; i++) { g_debug (" at= %d, lot[%d]= %d", i+1, i+1, this_proj -> atoms[0][i].sp); } } atomes_1.3.1/src/curve/0000775000175000017500000000000015212624223014420 5ustar lerouxlerouxatomes_1.3.1/src/curve/show.c0000664000175000017500000002540115212624223015546 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file show.c * @short Functions to draw the complete graph * @author Sébastien Le Roux */ /* * This file: 'show.c' * * Contains: * - The functions to draw the complete graph * * List of functions: gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve); G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data); G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data); void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve); void hide_curve (gpointer data); */ #include #include #include #include #include #include "global.h" #include "curve.h" extern void adjust_tool_model (int calc, int curve, gchar * string_path); #ifdef GTK3 /*! \fn gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) \brief show curve callback GTK4 \param grwdget the GtkWidget sending the signal \param cr the cairo drawing context to use for the draw \param curve the associated data pointer */ gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) #else /*! \fn void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) \brief show curve callback GTK3 \param area the GtkDrawingArea sending the signal \param cr the cairo drawing context to use for the draw \param width drawing area width \param height drawing area height \param curve the associated pointer data */ void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) #endif { int pid, rid, cid; int where; int i, j, k; double alp; gboolean upm; Curve * this_curve = get_curve_from_pointer (curve); pid = ((tint *)curve) -> a; rid = ((tint *)curve) -> b; cid = ((tint *)curve) -> c; cairo_surface_t * surface = NULL; project * this_proj = get_project_by_id(pid); where = this_curve -> format; // g_print ("where= %d, width = %d, height= %d\n", where, width, height); this_curve -> format = 0; if (where == 0) { alp=1.0; #ifdef GTK3 this_curve -> wsize[0] = get_widget_width (grwdget); this_curve -> wsize[1] = get_widget_height (grwdget); #else this_curve -> wsize[0] = width; this_curve -> wsize[1] = height; #endif for (j=0; j<2; j++) { resol[j] = this_curve -> wsize[j]; if (this_curve -> curve_edit) { if (this_curve -> curve_edit -> xyp[j] != NULL) update_entry_int (GTK_ENTRY(this_curve -> curve_edit -> xyp[j]), this_curve -> wsize[j]); } } } else { alp=0.0; if (where == 1) { alp = back_alpha; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, resol[0], resol[1]); } else if (where == 2) { alp=1.0; surface = cairo_pdf_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } else if (where == 3) { alp = back_alpha; surface = cairo_svg_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } else if (where == 4) { surface = cairo_ps_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } cr = cairo_create (surface); } // Painting the background cairo_set_source_rgba (cr, this_curve -> backcolor.red, this_curve -> backcolor.green, this_curve -> backcolor.blue, alp); cairo_paint (cr); cairo_set_source_rgba (cr, this_curve -> backcolor.red, this_curve -> backcolor.green, this_curve -> backcolor.blue, 1.0); // Creating Pango Font Layout layout = pango_cairo_create_layout (cr); upm = FALSE; // Autoscale and autoticking for X and or Y axis for (j=0; j<2; j++) { if (this_curve -> autoscale[j]) { // Autoscale autoscale_axis (this_proj, this_curve, rid, cid, j); this_curve -> autoscale[j] = FALSE; // Autoticking this_curve -> majt[j] = scale (this_curve -> axmax[j] - this_curve -> axmin[j]); this_curve -> mint[j] = 2; upm = TRUE; } cxy[j] = this_curve -> axmin[j]; } xmax = this_curve -> axmax[0] - cxy[0]; ymax = this_curve -> axmax[1] - cxy[1]; // Ensuring no log scale issuesthis_curve -> extrac if (this_curve -> scale[0]) setup_xaxis_log (cr, this_curve, rid, cid, FALSE); if (this_curve -> scale[1]) setup_yaxis_log (cr, this_curve, FALSE); if (upm) { if (this_curve -> curve_edit) { if (this_curve -> curve_edit -> axischoice != NULL) { j = combo_get_active (this_curve -> curve_edit -> axischoice); update_entry_double (GTK_ENTRY(this_curve -> curve_edit -> vmin), this_curve -> axmin[j]); update_entry_double (GTK_ENTRY(this_curve -> curve_edit -> vmax), this_curve -> axmax[j]); update_entry_double (GTK_ENTRY(this_curve -> curve_edit -> majt), this_curve -> majt[j]); update_entry_int (GTK_ENTRY(this_curve -> curve_edit -> nmi[j]), this_curve -> mint[j] - 1); } } } prep_plot (this_curve); // let's go for the plot // first we start by the possible extra curves i = 0; CurveExtra * ctmp = this_curve -> extrac -> last; for ( j=0 ; j < this_curve -> extrac -> extras + 1; j++ ) { if (this_curve -> draw_id == j) { if (this_curve -> bshift && this_curve -> layout -> aspect && this_curve -> extrac -> extras) i ++; k = (this_curve -> layout -> aspect) ? i : 0; draw_curve (cr, cid, rid, this_proj, this_curve -> ndata, this_curve -> layout -> datacolor, this_curve -> scale[0], this_curve -> scale[1], this_curve -> layout -> aspect, this_curve -> layout -> dash, this_curve -> layout -> thickness, this_curve -> layout -> glyph, this_curve -> layout -> gsize, this_curve -> layout -> gfreq, this_curve -> layout -> hwidth, this_curve -> layout -> hopac, this_curve -> layout -> hpos, this_curve -> extrac -> extras, k); } else { if (this_curve -> bshift && ctmp -> layout -> aspect) i++; k = (ctmp -> layout -> aspect) ? i : 0; draw_curve (cr, ctmp -> id.c, ctmp -> id.b, get_project_by_id(ctmp -> id.a), get_project_by_id(ctmp -> id.a) -> analysis[ctmp -> id.b] -> curves[ctmp -> id.c] -> ndata, ctmp -> layout -> datacolor, this_curve -> scale[0], this_curve -> scale[1], ctmp -> layout -> aspect, ctmp -> layout -> dash, ctmp -> layout -> thickness, ctmp -> layout -> glyph, ctmp -> layout -> gsize, ctmp -> layout -> gfreq, ctmp -> layout -> hwidth, ctmp -> layout -> hopac, ctmp -> layout -> hpos, this_curve -> extrac -> extras, k); if (ctmp -> prev != NULL) ctmp = ctmp -> prev; } } // Draw the axis bars - in option if (this_curve -> show_axis[1]) { if (this_curve -> axmin[0] < 0.0 && this_curve -> axmax[0] > 0.0) { cairo_set_line_width (cr, 1.0); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_move_to (cr, x_min - this_curve -> axmin[0] * XDRAW / xmax, y_min); cairo_line_to (cr, x_min - this_curve -> axmin[0] * XDRAW / xmax, y_max); cairo_stroke (cr); } } if (this_curve -> show_axis[0]) { if (this_curve -> axmin[1] < 0.0 && this_curve -> axmax[1] > 0.0) { cairo_set_line_width (cr, 1.0); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_move_to (cr, x_min, y_min - this_curve -> axmin[1] * YDRAW / ymax); cairo_line_to (cr, x_max, y_min - this_curve -> axmin[1] * YDRAW / ymax); cairo_stroke (cr); } } // Maybe show the frame if (this_curve -> show_frame) draw_frame (cr, this_curve, rid, cid); // maybe for the title if (this_curve -> show_title) show_title (cr, this_curve); // and maybe for the legend if (this_curve -> show_legend) show_legend (cr, this_proj, rid, cid); // and we plot the complete curve if (where == 0) { this_curve -> surface = cairo_surface_reference (cairo_get_target (cr)); } else if (where == 1) { cairo_surface_write_to_png (surface, curve_image_file); cairo_surface_destroy (surface); } else if (where == 2 || where == 4) { cairo_show_page (cr); cairo_surface_destroy (surface); } else if (where == 3) { cairo_surface_destroy (surface); } if (where > 0) cairo_destroy (cr); this_curve -> displayed = TRUE; #ifdef GTK3 return TRUE; #endif } /*! \fn void hide_curve (gpointer data) \brief hide curve \param data the associated data pointer */ void hide_curve (gpointer data) { tint * idc = (tint *)data; Curve * this_curve = get_curve_from_pointer (data); hide_the_widgets (this_curve -> window); if (idc -> a == activep) { adjust_tool_model (idc -> b, idc -> c, this_curve -> path); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) \brief hide curve callback GTK4 \param thecurve the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) \brief hide curve callback GTK3 \param thecurve the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) #endif { hide_curve (data); return TRUE; } atomes_1.3.1/src/curve/cedit.c0000664000175000017500000003525415212624223015665 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cedit.c * @short Initialization of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'cedit.c' * * Contains: * - The initialization of the curve layout edition dialog * * List of functions: void prepbox (gpointer data); void set_set (int a, int b, int c, gpointer data); void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void edit_curve (gpointer data); static void fill_proj_model (curve_edition * cedit, GtkTreeStore * store, gpointer data); G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data); GtkWidget * create_projects_tree (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data); extern void action_to_plot (gpointer data); extern gboolean was_not_added (ExtraSets * sets, int a, int b, int c); extern G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data); extern GtkWidget * create_org_list (gpointer data); extern GtkWidget * create_tab_1 (curve_edition * cedit, gpointer data); extern GtkWidget * create_tab_2 (curve_edition * cedit, gpointer data); extern GtkWidget * create_tab_3 (curve_edition * cedit, gpointer data); extern GtkWidget * create_tab_4 (curve_edition * cedit, gpointer data); int activeg = 0; int activec = 0; int activer = 0; char * lapos[2]={"x: ", "y: "}; /*! \fn void prepbox (gpointer data) \brief prepare the curve selection combo box \param data the associate data pointer */ void prepbox (gpointer data) { int i, n, o, p; gchar * str; project * extra_proj; project * this_proj = get_project_by_id(((tint *)data) -> a); Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_curve -> name); combo_text_append (cedit -> setcolorbox, str); g_free (str); CurveExtra * ctmp = this_curve -> extrac -> first; for ( i=0 ; i < this_curve -> extrac -> extras ; i++ ) { n = ctmp -> id.a; o = ctmp -> id.b; p = ctmp -> id.c; extra_proj = get_project_by_id(n); str = g_strdup_printf ("%s - %s", prepare_for_title(extra_proj -> name), extra_proj -> analysis[o] -> curves[p] -> name); combo_text_append (cedit -> setcolorbox, str); g_free (str); if (ctmp -> next != NULL) ctmp = ctmp -> next; } if (this_curve -> extrac -> extras > 0) { widget_set_sensitive (cedit -> setcolorbox, 1); } else { widget_set_sensitive (cedit -> setcolorbox, 0); } gtk_widget_set_size_request (cedit -> setcolorbox, -1, 30); combo_set_active (cedit -> setcolorbox, 0); g_signal_connect (G_OBJECT(cedit -> setcolorbox), "changed", G_CALLBACK(choose_set), data); } /*! \fn void set_set (int a, int b, int c, gpointer data) \brief addjust widgets to handle the new curve \param a project id \param b calculation id \param c curve id \param data the associated data pointer */ void set_set (int a, int b, int c, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; cedit -> setcolorbox = destroy_this_widget (cedit -> setcolorbox); cedit -> setcolorbox = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, cedit -> setcolorbox, FALSE, FALSE, 0); show_the_widgets (cedit -> setcolorbox); activeg = ((tint *)data) -> a; action_to_plot (& get_project_by_id(a) -> analysis[b] -> idcc[c]); prepbox (data); choose_set (GTK_COMBO_BOX(cedit -> setcolorbox), data); cedit -> orgtree = destroy_this_widget (cedit -> orgtree); add_container_child (CONTAINER_SCR, cedit -> datascroll, create_org_list(data)); show_the_widgets (cedit -> orgtree); widget_set_sensitive (cedit -> orgtree, this_curve -> extrac -> extras); } /*! \fn static void fill_proj_model (curve_edition * cedit, GtkTreeStore * store, gpointer data) \brief fill project(s) / curves tree store \param cedit the target curve_edition pointer \param store the GtkTreeStore to fill \param data the associated data pointer */ static void fill_proj_model (curve_edition * cedit, GtkTreeStore * store, gpointer data) { GtkTreeIter projlevel; GtkTreeIter calclevel; GtkTreeIter curvelevel; project * this_proj; int i, j, k, l; gboolean append; int pid = ((tint *)data) -> a; int rid = ((tint *)data) -> b; int cid = ((tint *)data) -> c; /* Append a top level row and leave it empty */ if (cedit -> ppath != NULL) g_free (cedit -> ppath); if (cedit -> cpath != NULL) g_free (cedit -> cpath); cedit -> ppath = g_malloc0(nprojects*sizeof*cedit -> ppath); cedit -> cpath = g_malloc0(nprojects*sizeof*cedit -> cpath); project * the_proj = get_project_by_id (pid); for (i=0; i name), 2, TRUE, 3, -1, -1); cedit -> ppath[i] = gtk_tree_model_get_path ((GtkTreeModel *)store, & projlevel); for (j=0; j analysis[rid] -> c_sets; j++) { k = the_proj -> analysis[rid] -> compat_id[j]; if (this_proj -> analysis[k] -> calc_ok) { gtk_tree_store_append (store, & calclevel, & projlevel); gtk_tree_store_set (store, & calclevel, 0, 0, 1, graph_name[k], 2, TRUE, 3, -1, -1); if (j == 0) { cedit -> cpath[i] = gtk_tree_model_get_path ((GtkTreeModel *)store, & calclevel); } for (l = 0 ; l < this_proj -> analysis[k] -> numc ; l++) { append = FALSE; if (i != pid && this_proj -> analysis[k] -> curves[l] -> ndata != 0) { append = TRUE; } else if (((i != pid) || (k != rid || l != cid)) && this_proj -> analysis[k] -> curves[l] -> ndata != 0) { append = TRUE; } if (append) { // Special condition for the F(k,t) and S(q,w) if (rid == SKT) { if (cid < the_proj -> skt_sets && l > this_proj -> skt_sets-1) { append = FALSE; } else if (cid > the_proj -> skt_sets-1 && l < this_proj -> skt_sets) { append = FALSE; } } } if (append) { gtk_tree_store_append (store, & curvelevel, & calclevel); gtk_tree_store_set (store, & curvelevel, 0, 1, 1, this_proj -> analysis[k] -> curves[l] -> name, 2, ! was_not_added (get_curve_from_pointer(data) -> extrac, i, k, l), 3, i, 4, k, 5, l, -1); } } } } } } GtkTreeStore * projmodel; /*! \fn void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief show / hide curve cellrenderer toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; gboolean status; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(projmodel), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(projmodel), & iter, 2, & status, 3, & i, 4, & j, 5, & k, -1); gtk_tree_store_set (projmodel, & iter, 2, ! status, -1); set_set (i, j, k, data); } /*! \fn void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int m; gtk_tree_model_get (mod, iter, 0, & m, -1); gtk_cell_renderer_set_visible (renderer, m); } /*! \fn GtkWidget * create_projects_tree (curve_edition * cedit, gpointer data) \brief curve edition create the project(s) / curves tree model \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_projects_tree (curve_edition * cedit, gpointer data) { int i; GtkTreeViewColumn * projcol[6]; GtkCellRenderer * projcell[6]; gchar * col_title[6] = {" ", i18n("Data sets"), i18n("Select"), " ", " ", " "}; gchar * ctype[6]={"text", "text", "active", "text", "text", "text"}; GType col_type[6] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}; projmodel = gtk_tree_store_newv (6, col_type); cedit -> projtree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(projmodel)); for (i=0; i<6; i++) { if (i == 2) { projcell[i] = gtk_cell_renderer_toggle_new (); projcol[i] = gtk_tree_view_column_new_with_attributes(_(col_title[i]), projcell[i], ctype[i], i, NULL); g_signal_connect (G_OBJECT(projcell[i]), "toggled", G_CALLBACK(toggle_curve), data); gtk_tree_view_column_set_cell_data_func (projcol[i], projcell[i], set_visible_curve_data, NULL, NULL); } else { projcell[i] = gtk_cell_renderer_text_new(); projcol[i] = gtk_tree_view_column_new_with_attributes(_(col_title[i]), projcell[i], ctype[i], i, NULL); } gtk_tree_view_append_column(GTK_TREE_VIEW(cedit -> projtree), projcol[i]); if (i == 0 || i > 2) gtk_tree_view_column_set_visible (projcol[i], FALSE); } fill_proj_model (cedit, projmodel, data); g_object_unref (projmodel); gtk_tree_view_expand_all (GTK_TREE_VIEW(cedit -> projtree)); return cedit -> projtree; } /*! \fn G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) \brief curve edition dialog callback \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) { destroy_this_dialog (dial); if (get_curve_from_pointer(data) -> curve_edit) { g_free (get_curve_from_pointer(data) -> curve_edit); get_curve_from_pointer(data) -> curve_edit = NULL; } } /*! \fn void edit_curve (gpointer data) \brief create the curve edition dialog \param data the associated data pointer */ void edit_curve (gpointer data) { GtkWidget * ebox; GtkWidget * enoote; GtkWidget * dbox; GtkWidget * scrollsets; activer = ((tint *)data) -> b; activec = ((tint *)data) -> c; // Axis data Curve * this_curve = get_curve_from_pointer (data); this_curve -> curve_edit = g_malloc0(sizeof*this_curve -> curve_edit); curve_edition * this_cedit = this_curve -> curve_edit; this_cedit -> win = dialogmodal (_("Edit curve"), GTK_WINDOW(this_curve -> window)); gtk_window_set_resizable (GTK_WINDOW (this_cedit -> win), FALSE); #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (this_cedit -> win), THETD); #endif ebox = dialog_get_content_area (this_cedit -> win); enoote = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, enoote, FALSE, FALSE, 0); // The first tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_1 (this_cedit, data), gtk_label_new (_("Graph"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 0), gtk_label_new (_("Graph"))); // The second tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_2 (this_cedit, data), gtk_label_new (_("Data"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 1), gtk_label_new (_("Data"))); // The third tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_3 (this_cedit, data), gtk_label_new (_("Legend"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 2), gtk_label_new (_("Legend"))); // The fourth tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_4 (this_cedit, data), gtk_label_new (_("Axis"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 3), gtk_label_new (_("Axis"))); // The fifth tab of the notebook dbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, dbox, markup_label(_("Add data set(s) to the active window"), -1, 30, 0.5, 0.5), FALSE, FALSE, 0); scrollsets = create_scroll (dbox, 250, 525, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, create_projects_tree (this_cedit, data)); gtk_notebook_append_page (GTK_NOTEBOOK(enoote), dbox, gtk_label_new (_("Add data set"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 4), gtk_label_new (_("Add data set"))); add_gtk_close_event (this_cedit -> win, G_CALLBACK(destroy_this_window), NULL); g_signal_connect (G_OBJECT(this_cedit -> win), "response", G_CALLBACK(run_curve_edit), data); show_the_widgets (this_cedit -> win); set_data_aspect (GTK_COMBO_BOX(this_cedit -> data_aspect), data); update_axis (GTK_COMBO_BOX(this_cedit -> axischoice), data); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } atomes_1.3.1/src/curve/cedit.h0000664000175000017500000000543715212624223015672 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cedit.h * @short Variable declarations for the curve layout edition window * @author Sébastien Le Roux */ /* * This header file: 'cedit.h' * * Contains: - Variable declarations for the curve layout edition window */ #ifndef CEDIT_H_ #define CEDIT_H_ typedef struct curve_edition curve_edition; struct curve_edition { GtkWidget * win; tint prc; GtkTreePath ** ppath; GtkTreePath ** cpath; GtkWidget * projtree; GtkWidget * xyp[2]; // tab 1 GtkWidget * title_box; GtkWidget * frame[11]; GtkWidget * frame_box; GtkWidget * frame_style_area; GtkWidget * frame_pix_box; qint dataxe[2]; qint framxe[4]; GtkWidget * custom_title; // tab 2 GtkWidget * setcolorbox; GtkWidget * thesetbox; GtkWidget * data_color; GtkWidget * data_aspect; GtkWidget * data_thickness; GtkWidget * data_glyph; GtkWidget * data_glyph_size; GtkWidget * data_glyph_freq; GtkWidget * data_hist_width; GtkWidget * data_hist_opac; GtkWidget * data_hist_pos; GtkWidget * data_dash; GtkWidget * stylearea; GtkWidget * pixarea; GtkWidget * Glyph_box; GtkWidget * Hist_box; GtkWidget * xyl[2]; GtkWidget * orgtree; GtkWidget * datascroll; // tab 3 GtkWidget * legend_box; GtkWidget * legend_box_style; GtkWidget * legend_style_area; // tab 4 GtkWidget * axischoice; GtkWidget * scale_box; GtkWidget * ticks_inout_box; GtkWidget * ticks_pos_box; GtkWidget * labels_pos_box; GtkWidget * ticks_labels_angle; GtkWidget * ticks_labels_font; GtkWidget * show_axis; GtkWidget * show_grid; GtkWidget * auto_scale; GtkWidget * axis_default_title; GtkWidget * axis_title; GtkWidget * axis_title_font; GtkWidget * majt; GtkWidget * vmin; GtkWidget * vmax; GtkWidget * nmi[2], * ndi[2]; GtkWidget * mats[2]; GtkWidget * mits[2]; GtkWidget * nptx[2], * npty[2]; GtkWidget * tptx[2], * tpty[2]; int handler_id; }; extern int activeg; extern int activec; extern int activer; extern char * lapos[2]; extern char * ctext[2]; void prepbox (gpointer data); void edit_curve (gpointer cdata); #endif atomes_1.3.1/src/curve/datab.c0000664000175000017500000010233015212624223015636 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file datab.c * @short Curve data edition window and associated callbacks * @author Sébastien Le Roux */ /* * This file: 'datab.c' * * Contains: * - The curve data edition window and associated callbacks * * List of functions: G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data); void get_tree_data (GtkWidget * tree); void save_row (gpointer data, gpointer user_data); void update_first_row (gpointer data, gpointer user_data); void update_first_col (); void add_to_last_row (gpointer data, gpointer user_data); void add_to_last_col (double cte, gpointer data); void multiply_last_row (gpointer data, gpointer user_data); void multiply_last_col (double cte, gpointer data); void select_row (gpointer data, gpointer user_data); void copy_row (gpointer data, gpointer user_data); void copy_content (gpointer data); void add_row (gpointer data, gpointer user_data); void delete_row (gpointer data, gpointer user_data); void insert_cell (gpointer data); void delete_cell (gpointer data); void add_to_column (gpointer data); void multiply_column (gpointer data); void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data); void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data); void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data); void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data); void cancel_changes (GtkWidget * widg, gpointer data); void edit_data (gpointer data); static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c); G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data); G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data); G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data); G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data); G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data); GtkWidget * setview (project * this_proj, int b, int c); GMenu * insert_place (); GMenu * insert_data (); GMenu * delete_data (); GMenu* cell_actions (); GMenu * cell_title (); GMenu * column_actions (); GMenu * column_title (); GMenu * data_menu (); */ #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" int nrows; GtkTreeModel * curve_model; GList * lrows; GList * rows; GtkTreeSelection * sel; GtkTreePath * path; GtkTreeIter row; gchar * text; /*! \fn void get_tree_data (GtkWidget * tree) \brief get information on location in a GtkTreeView \param tree the GtkTreeView */ void get_tree_data (GtkWidget * tree) { sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree)); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree)); lrows = gtk_tree_selection_get_selected_rows (sel, & curve_model); nrows = gtk_tree_selection_count_selected_rows (sel); } /*! \fn void save_row (gpointer data, gpointer user_data) \brief save row data and udpate calculation result accordingly \param data the path in the tree model \param user_data the associated data pointer */ void save_row (gpointer data, gpointer user_data) { path = data; Curve * this_curve = get_curve_from_pointer (user_data); if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 1, & this_curve -> data[0][nrows], 2, & this_curve -> data[1][nrows], -1); } nrows = nrows + 1; } /*! \fn void update_first_row (gpointer data, gpointer user_data) \brief update row in the first column \param data the path in the tree model \param user_data the associated data pointer */ void update_first_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { nrows = nrows + 1; gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 0, nrows, -1); } } /*! \fn void update_first_col () \brief update all rows in the first column * */ void update_first_col () { gtk_tree_selection_select_all (sel); lrows = gtk_tree_selection_get_selected_rows (sel, & curve_model); nrows = 0; g_list_foreach (lrows, (GFunc)update_first_row, NULL); gtk_tree_selection_unselect_all (sel); } /*! \fn void add_to_last_row (gpointer data, gpointer user_data) \brief add constant to last row \param data the path in the tree model \param user_data the constant */ void add_to_last_row (gpointer data, gpointer user_data) { path = data; double vold; double * cte = (double *)user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 2, & vold, -1); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 2, * cte + vold, -1); } } /*! \fn void add_to_last_col (double cte, gpointer data) \brief add constant value to selected rows \param cte the constant to add \param data the associated data pointer */ void add_to_last_col (double cte, gpointer data) { qint * dat = (qint *)data; Curve * this_curve; this_curve = get_project_by_id (((tint *)data) -> a) -> analysis[dat -> b] -> curves[dat -> c]; curve_model = gtk_tree_view_get_model (GTK_TREE_VIEW(this_curve -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_curve -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_curve -> datatree); g_list_foreach (lrows, (GFunc)add_to_last_row, & cte); gtk_tree_selection_unselect_all (sel); } /*! \fn void multiply_last_row (gpointer data, gpointer user_data) \brief multiply last row by constant \param data the path in the tree model \param user_data the constant */ void multiply_last_row (gpointer data, gpointer user_data) { path = data; double vold; double * cte = (double *) user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 2, & vold, -1); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 2, * cte * vold, -1); } } /*! \fn void multiply_last_col (double cte, gpointer data) \brief multiply last colum by constant value \param cte the constant value \param data the associated data pointer */ void multiply_last_col (double cte, gpointer data) { qint * dat = (qint *)data; Curve * this_curve; this_curve = get_project_by_id (dat -> a) -> analysis[dat -> b] -> curves[dat -> c]; curve_model = gtk_tree_view_get_model (GTK_TREE_VIEW(this_curve -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_curve -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_curve -> datatree); g_list_foreach (lrows, (GFunc)multiply_last_row, & cte); gtk_tree_selection_unselect_all (sel); } /*! \fn void select_row (gpointer data, gpointer user_data) \brief select row \param data the path in the tree model \param user_data the associated data pointer */ void select_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_selection_select_iter (sel, & row); } } /*! \fn void copy_row (gpointer data, gpointer user_data) \brief copy row \param data the path in the tree model \param user_data the associated data pointer */ void copy_row (gpointer data, gpointer user_data) { path = data; int v1; double v2, v3; gchar * tmp; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 0, & v1, 1, & v2, 2, & v3, -1); if (text == NULL) { text = g_strdup_printf ("%d\t%f\t%f\n", v1, v2, v3); } else { tmp = g_strdup_printf ("%s%d\t%f\t%f\n", text, v1, v2, v3); g_free (text); text = g_strdup_printf ("%s", tmp); g_free (tmp); } } } /*! \fn void copy_content (gpointer data) \brief copy selection \param data the associated data pointer */ void copy_content (gpointer data) { text = NULL; g_list_foreach (lrows, (GFunc)copy_row, NULL); #ifdef GTK3 gtk_clipboard_set_text (gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), text, -1); gtk_clipboard_store (gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); #endif g_free (text); } /*! \fn void add_row (gpointer data, gpointer user_data) \brief add row \param data the path in the tree model \param user_data the associated data pointer */ void add_row (gpointer data, gpointer user_data) { GtkTreeIter newrow; if (gtk_tree_model_get_iter (curve_model, & row, path)) { if (GPOINTER_TO_INT(user_data) == 0) { gtk_list_store_insert_before (GTK_LIST_STORE(curve_model), & newrow, & row); } else { gtk_list_store_insert_after (GTK_LIST_STORE(curve_model), & newrow, & row); } gtk_list_store_set (GTK_LIST_STORE(curve_model), & newrow, 0, 0, 1, 0.00000, 2, 0.00000, -1); } } /*! \fn void delete_row (gpointer data, gpointer user_data) \brief delete row \param data the path in the tree model \param user_data the associated data pointer */ void delete_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_list_store_remove (GTK_LIST_STORE(curve_model), & row); } } /*! \fn void insert_cell (gpointer data) \brief insert row \param data the associated data pointer */ void insert_cell (gpointer data) { if (GPOINTER_TO_INT(data) == 0) { path = (GtkTreePath *) g_list_nth_data (lrows, 0); } else { path = (GtkTreePath *) g_list_nth_data (lrows, nrows-1); } g_list_foreach (lrows, (GFunc)add_row, data); update_first_col (); } /*! \fn void delete_cell (gpointer data) \brief delete row \param data the associated data pointer */ void delete_cell (gpointer data) { g_list_foreach (g_list_reverse (lrows), (GFunc)delete_row, NULL); update_first_col (); } /*! \fn G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) \brief edit cell in the curve data edition tree model \param cell the GtkCellRendererText sending the signal \param path_string the path in the tree model \param new_text the string describing the new value \param user_data the associated data pointer */ G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) { qint * id = (qint *)user_data; project * this_proj = get_project_by_id (id -> a); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(this_proj -> analysis[id -> b] -> curves[id -> c] -> datatree)); gtk_tree_model_get_iter_from_string (curve_model, & row, path_string); double val = string_to_double ((gpointer)new_text); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, id -> d, val, -1); } GtkWidget * col_entry; /*! \fn G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) \brief adjust constant value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); update_entry_double (res, v); } /*! \fn G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) \brief add constant to column - running the dialog \param wind the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { const gchar * p = entry_get_text (GTK_ENTRY(col_entry)); double c = string_to_double ((gpointer)p); update_entry_double (GTK_ENTRY(col_entry), c); add_to_last_col (c, data); } destroy_this_dialog (wind); } /*! \fn void add_to_column (gpointer data) \brief add constant to column - creating the dialog \param data the associated data pointer */ void add_to_column (gpointer data) { GtkWidget * wind; GtkWidget * box; GtkWidget * hbox; GtkWidget * lab; gchar * str; qint * dat = (qint *)data; wind = dialogmodal (_("Add Constant to Column"), GTK_WINDOW(get_project_by_id(dat -> a) -> analysis[dat -> b] -> curves[dat -> c] -> window)); gtk_dialog_add_button (GTK_DIALOG (wind), _("Apply"), GTK_RESPONSE_APPLY); box = dialog_get_content_area (wind); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); str = g_strdup_printf (_("Add Constant to Last Column")); lab = gtk_label_new (str); gtk_widget_set_size_request (lab, 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, TRUE, FALSE, 0); col_entry = create_entry (G_CALLBACK(adjust_value), 100, 15, FALSE, NULL); gtk_entry_set_alignment (GTK_ENTRY(col_entry), 1.0); update_entry_double (GTK_ENTRY(col_entry), 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, col_entry, FALSE, FALSE, 0); run_this_gtk_dialog (wind, G_CALLBACK(run_add_to_column), data); } /*! \fn G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) \brief multiply column by constant - running the dialog \param wind the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { const gchar * p = entry_get_text (GTK_ENTRY(col_entry)); double c = string_to_double ((gpointer)p); update_entry_double (GTK_ENTRY(col_entry), c); multiply_last_col (c, data); } destroy_this_dialog (wind); } /*! \fn void multiply_column (gpointer data) \brief multiply column by constant - creating dialog \param data the associated data pointer */ void multiply_column (gpointer data) { GtkWidget * wind; GtkWidget * box; GtkWidget * hbox; GtkWidget * lab; gchar * str; qint * dat = (qint *)data; wind = dialogmodal (_("Multiply Column by Constant"), GTK_WINDOW(get_project_by_id(dat -> a) -> analysis[dat -> b] -> curves[dat -> c] -> window)); gtk_dialog_add_button (GTK_DIALOG (wind), _("Apply"), GTK_RESPONSE_APPLY); box = dialog_get_content_area (wind); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); str = g_strdup_printf (_("Multiply Last Column by Constant")); lab = gtk_label_new (str); gtk_widget_set_size_request (lab, 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, TRUE, FALSE, 0); col_entry = create_entry (G_CALLBACK(adjust_value), 100, 15, FALSE, NULL); gtk_entry_set_alignment (GTK_ENTRY(col_entry), 1.0); update_entry_double (GTK_ENTRY(col_entry), 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, col_entry, FALSE, FALSE, 0); run_this_gtk_dialog (wind, G_CALLBACK(run_multiply_column), data); } /*! \fn GMenu * insert_place () \brief create the insertion submenu */ GMenu * insert_place () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Before"), "data-pop.insert.before", NULL, NULL, IMG_STOCK, (gpointer)GO_UP, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("After"), "data-pop.insert.after", NULL, NULL, IMG_STOCK, (gpointer)GO_DOWN, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * insert_data () \brief create the insert data submenu */ GMenu * insert_data () { GMenu * menu = g_menu_new (); append_submenu (menu, _("Insert Row(s)"), insert_place()); return menu; } /*! \fn GMenu * delete_data () \brief create the delete data submenu */ GMenu * delete_data () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Delete Row(s)"), "data-pop.delete", NULL, NULL, IMG_STOCK, (gpointer)LIST_REM, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu* cell_actions () \brief create the cell actions submenu */ GMenu* cell_actions () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Copy Selected Row(s)"), "data-pop.copy", NULL, NULL, IMG_STOCK, (gpointer)EDITC, FALSE, FALSE, FALSE, NULL); g_menu_append_section (menu, NULL, (GMenuModel*)insert_data()); g_menu_append_section (menu, NULL, (GMenuModel*)delete_data()); return menu; } /*! \fn GMenu * cell_title () \brief create the cell based operations subemu */ GMenu * cell_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Cell Based Operations"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * column_actions () \brief create the column actions submenu */ GMenu * column_actions () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Add Constant to Last Column"), "data-pop.add", NULL, NULL, IMG_STOCK, (gpointer)LIST_ADD, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Multiply Last Column by Constant"), "data-pop.mul", NULL, NULL, IMG_STOCK, (gpointer)FCLOSE, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * column_title () \brief create the column based operations submenu */ GMenu * column_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Column Based Operations"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * data_menu () \brief create the curve data edition popup menu elements */ GMenu * data_menu () { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)cell_title()); g_menu_append_section (menu, NULL, (GMenuModel*)cell_actions()); g_menu_append_section (menu, NULL, (GMenuModel*)column_title()); g_menu_append_section (menu, NULL, (GMenuModel*)column_actions()); return menu; } /*! \fn G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve data edition popup menu actions callbacks \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "copy") == 0) { copy_content (data); } else if (g_strcmp0 (name, "insert.before") == 0) { insert_cell (data); } else if (g_strcmp0 (name, "insert.after") == 0) { insert_cell (data); } else if (g_strcmp0 (name, "delete") == 0) { delete_cell (data); } else if (g_strcmp0 (name, "add") == 0) { add_to_column (data); } else if (g_strcmp0 (name, "mul") == 0) { multiply_column (data); } } #ifdef GTK4 /*! \fn void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) \brief create curve data edition popup menu GTK4 \param top_level the top level widget \param x x position \param y y position \param data the associated data pointer */ void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) #else /*! \fn void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) \brief create curve data edition popup menu GTK3 \param top_level the top level widget \param event the GdkEvent triggering the signal \param data the associated data pointer */ void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) #endif { GSimpleActionGroup * data_popup = g_simple_action_group_new (); GSimpleAction * pop_data[6]; pop_data[0] = g_simple_action_new ("copy", NULL); pop_data[1] = g_simple_action_new ("insert.before", NULL); pop_data[2] = g_simple_action_new ("insert.after", NULL); pop_data[3] = g_simple_action_new ("delete", NULL); pop_data[4] = g_simple_action_new ("add", NULL); pop_data[5] = g_simple_action_new ("mul", NULL); g_signal_connect (pop_data[0], "activate", G_CALLBACK(data_pop_action), NULL); g_signal_connect (pop_data[1], "activate", G_CALLBACK(data_pop_action), GINT_TO_POINTER(0)); g_signal_connect (pop_data[2], "activate", G_CALLBACK(data_pop_action), GINT_TO_POINTER(1)); g_signal_connect (pop_data[3], "activate", G_CALLBACK(data_pop_action), NULL); g_signal_connect (pop_data[4], "activate", G_CALLBACK(data_pop_action), data); g_signal_connect (pop_data[5], "activate", G_CALLBACK(data_pop_action), data); int i; for (i=0; i<6; i++) g_action_map_add_action (G_ACTION_MAP(data_popup), G_ACTION(pop_data[i])); GtkWidget * menu; #ifdef GTK4 menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)data_menu(), GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (menu, top_level); #else menu = gtk_menu_new_from_model ((GMenuModel *)data_menu ()); #endif gtk_widget_insert_action_group (menu, "data-pop", G_ACTION_GROUP(data_popup)); #ifdef GTK4 gtk_widget_set_size_request (menu, -1, 240); pop_menu_at_pointer (menu, x, y); #else pop_menu_at_pointer (menu, event); #endif } #ifdef GTK4 /*! \fn void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) \brief curve data edition mouse button event GTK4 \param data_tree the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param data the associated data pointer */ void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) #else /*! \fn void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) \brief curve data edition mouse button event GTK3 \param data_tree the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param event_button event button \param event_type event type \param data the associated data pointer */ void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { get_tree_data (data_tree); if (event_button == 3) { #ifdef GTK4 data_popup_menu ((GtkWidget *)get_top_level(data_tree), event_x, event_y, data); #else data_popup_menu (data_tree, event, data); #endif } } else if (event_type == GDK_BUTTON_RELEASE) { g_list_foreach (lrows, (GFunc)gtk_tree_path_free, NULL); g_list_free (lrows); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { data_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, data); } /*! \fn G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { data_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, data); } #else /*! \fn G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief on button event in the curve data edition window \param widget the GtkWidget sending the signal \param event \param data */ G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; data_button_event (widget, event, bevent -> button, bevent -> type, data); return FALSE; } #endif /*! \fn static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c) \brief fill curve data list store \param store the GtkListStore to fill \param this_proj the target project \param b the calculation id \param c the curve id */ static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c) { GtkTreeIter datalevel; int i; for (i=0; i analysis[b] -> curves[c] -> ndata; i++) { gtk_list_store_append (store, & datalevel); gtk_list_store_set (store, & datalevel, 0, i+1, 1, this_proj -> analysis[b] -> curves[c] -> data[0][i], 2, this_proj -> analysis[b] -> curves[c] -> data[1][i], -1); } } /*! \fn GtkWidget * setview (project * this_proj, int b, int c) \brief create the curve data tree store \param this_proj the target project \param b the target calculation \param c the target curve */ GtkWidget * setview (project * this_proj, int b, int c) { GtkWidget * dataview; GtkListStore * datamodel; GType type[3]={G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE}; GtkTreeViewColumn * datacol[3]; GtkCellRenderer * datacel[3]; GtkTreeSelection * dataselect; // ColRGBA col[3]; gchar * name[3]; int i; Curve * this_curve = this_proj -> analysis[b] -> curves[c]; name[0]=g_strdup_printf (" "); name[1]=g_strdup_printf ("%s", this_curve -> axis_title[0]); name[2]=g_strdup_printf ("%s\n%s", prepare_for_title(this_proj -> name), this_curve -> name); datamodel = gtk_list_store_newv (3, type); fill_data_model (datamodel, this_proj, b, c); dataview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(datamodel)); //gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(dataview), TRUE); for (i=0; i<3; i++) { datacel[i] = gtk_cell_renderer_text_new(); /* if (i == 1) { col[i].red = 62965; col[i].green = 62965; col[i].blue = 62965; } else { col[i].red = 51914; col[i].green = 57825; col[i].blue = 65535; } g_object_set (datacel[i], "cell-background-gdk", & col[i], "cell-background-set", TRUE, NULL); */ if (i > 0) { g_object_set (datacel[i], "editable", TRUE, NULL); gtk_cell_renderer_set_alignment (datacel[i], 0.5, 0.5); this_curve -> idcol[i-1].a = this_proj -> id; this_curve -> idcol[i-1].b = b; this_curve -> idcol[i-1].c = c; this_curve -> idcol[i-1].d = i; g_signal_connect (G_OBJECT(datacel[i]), "edited", G_CALLBACK(edit_cell), & this_curve -> idcol[i-1]); } datacol[i] = gtk_tree_view_column_new_with_attributes(name[i], datacel[i], "text", i, NULL); gtk_tree_view_column_set_alignment (datacol[i], 0.5); gtk_tree_view_column_set_resizable (datacol[i], TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(dataview), datacol[i]); if (i > 0) { gtk_tree_view_column_set_min_width (datacol[i], 100); } } g_object_unref (datamodel); dataselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(dataview)); gtk_tree_selection_set_mode (dataselect, GTK_SELECTION_MULTIPLE); #ifdef GTK3 g_signal_connect (G_OBJECT(dataview), "button_press_event", G_CALLBACK(on_data_button_event), & this_curve -> idcol[1]); #else add_widget_gesture_and_key_action (dataview, "datab-context-click", G_CALLBACK(on_data_button_pressed), & this_curve -> idcol[1], "datab-context-release", G_CALLBACK(on_data_button_released), & this_curve -> idcol[1], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif gtk_tree_view_expand_all (GTK_TREE_VIEW(dataview)); return dataview; } /*! \fn void cancel_changes (GtkWidget * widg, gpointer data) \brief cancel curve data edition \param widg the GtkWidget sending the signal \param data the associated data pointer */ void cancel_changes (GtkWidget * widg, gpointer data) { destroy_this_widget (widg); get_curve_from_pointer (data) -> datatree = NULL; } /*! \fn G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) \brief cancel curve data edition button callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) { cancel_changes (get_top_level(GTK_WIDGET(but)), data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) \brief cancel curve data edition callback GTK4 \param win the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) \brief cancel curve data edition callback GTK3 \param win the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) #endif { cancel_changes ((GtkWidget *)win, data); return TRUE; } /*! \fn G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) \brief apply data edition changes \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); Curve * this_curve = this_proj -> analysis[id -> b] -> curves[id -> c]; curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(this_curve -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_curve -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_curve -> datatree); if (nrows != this_curve -> ndata) { this_curve -> ndata = nrows; g_free (this_curve -> data[0]); this_curve -> data[0] = allocdouble (nrows); g_free (this_curve -> data[1]); this_curve -> data[1] = allocdouble (nrows); } nrows = 0; g_list_foreach (lrows, (GFunc)save_row, data); cancel_changes (get_top_level(GTK_WIDGET(but)), data); update_curves (); } /*! \fn void edit_data (gpointer data) \brief create edit curve data dialog \param data the associated data pointer */ void edit_data (gpointer data) { GtkWidget * win; tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); Curve * this_curve = this_proj -> analysis[id -> b] -> curves[id -> c]; if (this_curve -> datatree != NULL) { win = get_top_level(GTK_WIDGET(this_curve -> datatree)); } else { gchar * str = g_strdup_printf ("%s - %s", prepare_for_title (this_proj -> name), this_curve -> name); win = create_win (str, MainWindow, FALSE, TRUE); g_free (str); gtk_window_set_default_size (GTK_WINDOW(win), 300, 600); GtkWidget * vbox = create_vbox (BSEP); this_curve -> datatree = setview (this_proj, id -> b, id -> c); GtkWidget * scrol = create_scroll (vbox, -1, 570, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrol, this_curve -> datatree); GtkWidget * hbox = create_hbox (0); GtkWidget * butc = create_button (_("Cancel"), IMG_STOCK, CANCEL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cancel_but), data); GtkWidget * butv = create_button (_("Apply"), IMG_STOCK, EXECUTE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(validate_changes), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, butc, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, butv, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox, -1, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_container_child (CONTAINER_WIN, win, vbox); add_gtk_close_event (win, G_CALLBACK(cancel_win), data); } show_the_widgets (win); } atomes_1.3.1/src/curve/w_curve.c0000664000175000017500000005721515212624223016250 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_curve.c * @short Functions to create the graph/curve window * @author Sébastien Le Roux */ /* * This file: 'w_curve.c' * * Contains: * - The functions to create the graph/curve window * * List of functions: int get_curve_shift (Curve * this_curve); G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data); G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data); void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data); static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data); GtkWidget * create_curve (tint * data); */ #include #include #include #include #include #include "global.h" #include "callbacks.h" #include "curve.h" #include "cedit.h" #include "datab.h" extern void autoscale (gpointer data); extern void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); int curve_action_id = -1; #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) \brief show curve popup menu GTK3 \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) { pop_menu_at_pointer (curve_popup_menu(data), NULL); return TRUE; } #endif /*! \fn void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) \brief curve zoom in or out \param state mouse button state (pressed or released) \param event_x x position \param event_y y position \param data the associated data pointer */ void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) { int x, y; double r, g, d; double tmp, xp, yp; gchar * str; gint width, height; CurveState * cstate = (CurveState *)data; Curve * this_curve = get_curve_from_pointer ((gpointer)(cstate -> id)); int curve_shift = get_curve_shift (this_curve); #ifdef GTK4 event_y -= (double) curve_shift; #endif if (state && cstate -> mouseState.MouseIsDown) { cairo_t * rec; cairo_region_t * reg; #ifdef GTK3 GdkWindow * win = gtk_widget_get_window (this_curve -> plot); reg = gdk_window_get_visible_region (win); GdkDrawingContext * curve_context = gdk_window_begin_draw_frame (win, reg); if (gdk_drawing_context_is_valid (curve_context)) { rec = gdk_drawing_context_get_cairo_context (curve_context); if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #else GtkNative * native = gtk_widget_get_native (this_curve -> plot); GdkSurface * surf = gtk_native_get_surface (native); cairo_surface_t * csurf = cairo_surface_create_for_rectangle (this_curve -> surface, 0.0, (double)curve_shift, (double)gtk_widget_get_width(this_curve -> plot), (double)gtk_widget_get_height(this_curve -> plot)); reg = gdk_cairo_region_create_from_surface (csurf); GdkDrawContext * curve_context = (GdkDrawContext *) gdk_surface_create_cairo_context (surf); gdk_draw_context_begin_frame (curve_context, reg); if (gdk_draw_context_is_in_frame (curve_context)) { rec = gdk_cairo_context_cairo_create ((GdkCairoContext *)curve_context); if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #endif { width = event_x - cstate -> mouseState.start_x; height = event_y - cstate -> mouseState.start_y; #ifdef GTK3 cairo_set_source_surface (rec, this_curve -> surface, 0, -curve_shift); #else height += (double) curve_shift; cairo_set_source_surface (rec, this_curve -> surface, 0, +curve_shift); #endif cairo_paint (rec); if (event_x < cstate -> mouseState.start_x) { r=0.0; x = cstate -> mouseState.start_x + 2; if (event_y < cstate -> mouseState.start_y) { g=0.0; d=1.0; y = cstate -> mouseState.start_y + 8; str = g_strdup_printf (_("zoom: out (x) / in (y)")); } else { g=1.0; d=0.0; y = cstate -> mouseState.start_y - 4; str = g_strdup_printf (_("zoom: out (x) / out (y)")); } } else { r=1.0; x = cstate -> mouseState.start_x - 100; if (event_y < cstate -> mouseState.start_y) { g=0.0; d=0.0; y = cstate -> mouseState.start_y + 8; str = g_strdup_printf (_("zoom: in (x) / in (y)")); } else { g=0.0; d=1.0; y = cstate -> mouseState.start_y - 4; str = g_strdup_printf (_("zoom: in (x) / out (y)")); } } cairo_set_source_rgba (rec, r, g, d, 0.05); cairo_rectangle (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y, width, height); cairo_fill (rec); cairo_set_source_rgba (rec, r, g, d, 1.0); cairo_set_line_width (rec, 1.0); cairo_move_to (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y); #ifdef GTK4 event_y += (double) curve_shift; #endif cairo_line_to (rec, cstate -> mouseState.start_x, event_y); cairo_line_to (rec, event_x, event_y); cairo_line_to (rec, event_x, cstate -> mouseState.start_y); cairo_line_to (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y); cairo_stroke (rec); if (abs(width) > 10 && abs(height) > 5) { cairo_move_to (rec, x, y); cairo_show_text (rec, str); } g_free (str); width = event_x - x_min; tmp = this_curve -> axmax[0] - this_curve -> axmin[0]; xp = this_curve -> axmin[0] + width * tmp / XDRAW; #ifdef GTK4 event_y -= (double) curve_shift; #endif height = event_y - y_max; tmp = this_curve -> axmax[1] - this_curve -> axmin[1]; yp = this_curve -> axmax[1] + height * tmp / YDRAW; str = g_strdup_printf ("(x= %f, y= %f)", xp, yp); } else { str = g_strdup_printf (_("(Not in plot)")); } gtk_label_set_text (GTK_LABEL(this_curve -> pos), str); g_free (str); } #ifdef GTK3 gdk_window_end_draw_frame (win, curve_context); #else gdk_draw_context_end_frame (curve_context); #endif } else if (! cstate -> mouseState.MouseIsDown) { #ifdef GTK3 // gtk_widget_get_size_request (this_curve -> plot, & this_curve -> wsize[0], & this_curve -> wsize[1]); gtk_window_get_size (GTK_WINDOW(this_curve -> window), & this_curve -> wsize[0], & y); this_curve -> wsize[1] = y - curve_shift; #else this_curve -> wsize[0] = gtk_widget_get_width (this_curve -> plot); this_curve -> wsize[1] = gtk_widget_get_height (this_curve -> plot); #endif prep_plot (this_curve); #ifdef GTK4 if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #else if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #endif { width = event_x - x_min; tmp = this_curve -> axmax[0] - this_curve -> axmin[0]; xp = this_curve -> axmin[0] + width * tmp / XDRAW; height = event_y - y_max; tmp = this_curve -> axmax[1] - this_curve -> axmin[1]; yp = this_curve -> axmax[1] + height * tmp / YDRAW; str = g_strdup_printf ("(x= %f, y= %f)", xp, yp); } else { str = g_strdup_printf (_("Not in plot")); } gtk_label_set_text (GTK_LABEL(this_curve -> pos), str); g_free (str); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) \brief handle mouse motion event in the OpenGL window GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) { curve_zoom_in_out ((event -> state & GDK_BUTTON1_MASK) ? TRUE : FALSE, event -> x, event -> y, data); return TRUE; } #else /*! \fn static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) \brief handle mouse motion event in the curve window GTK4 \param motion The GtkEvenController sending the signal \param x x position \param y y position \param data the associated data pointer */ static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) { curve_zoom_in_out (((CurveState *)data) -> mouseState.MouseIsDown, x, y, data); } #endif #ifdef GTK4 /*! \fn void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the curve window GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the curve window GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { int x1, x2, y1, y2; double tmp; CurveState * cstate = (CurveState *)data; Curve * this_curve = get_curve_from_pointer ((gpointer)cstate -> id); #ifdef GTK4 int curve_shift = get_curve_shift (this_curve); #endif if (event_type == GDK_BUTTON_PRESS) { if (event_button == 1) { #ifdef GTK3 /* The following is not working: gtk_widget_get_size_request (this_curve -> plot, & this_curve -> wsize[0], & this_curve -> wsize[1]); */ gtk_window_get_size (GTK_WINDOW(this_curve -> window), & this_curve -> wsize[0], & y1); this_curve -> wsize[1] = y1 - get_curve_shift (this_curve); #else this_curve -> wsize[0] = gtk_widget_get_width (this_curve -> plot); this_curve -> wsize[1] = gtk_widget_get_height (this_curve -> plot); #endif prep_plot (this_curve); #ifdef GTK4 if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #else if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #endif { cstate -> mouseState.start_x = event_x; cstate -> mouseState.start_y = event_y; cstate -> mouseState.time = event_time; cstate -> mouseState.MouseIsDown = TRUE; } } else if (event_button == 3) { #ifdef GTK4 pop_menu_at_pointer (curve_popup_menu(data), event_x, event_y); #else pop_menu_at_pointer (curve_popup_menu(data), event); #endif } } else if (event_type == GDK_BUTTON_RELEASE) { cstate -> mouseState.MouseIsDown = FALSE; if (event_button == 1) { etime = event_time - cstate -> mouseState.time; if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) { if (event_x != cstate -> mouseState.start_x && event_y != cstate -> mouseState.start_y) { if (etime > 500 && etime < 50000) { x1 = cstate -> mouseState.start_x - x_min; y1 = cstate -> mouseState.start_y - y_max; x2 = event_x - x_min; y2 = event_y - y_max; #ifdef GTK4 y1 -= curve_shift; y2 -= curve_shift; #endif tmp = this_curve -> axmax[0] - this_curve -> axmin[0]; if (x2 > x1) { // zoom-in on X this_curve -> axmax[0] = this_curve -> axmin[0] + x2 * tmp / XDRAW; this_curve -> axmin[0] = this_curve -> axmin[0] + x1 * tmp / XDRAW; } else { // zoom-out on X this_curve -> axmin[0] = this_curve -> axmin[0] - (x1 - x2) * tmp / XDRAW; this_curve -> axmax[0] = this_curve -> axmax[0] + (x1 - x2) * tmp / XDRAW; } tmp = this_curve -> axmax[1] - this_curve -> axmin[1]; if (y1 > y2) { // zoom-in on Y this_curve -> axmin[1] = this_curve -> axmax[1] + y1 * tmp / YDRAW; this_curve -> axmax[1] = this_curve -> axmax[1] + y2 * tmp / YDRAW; } else { // zoom-out on Y this_curve -> axmin[1] = this_curve -> axmin[1] + (y2 - y1) * tmp / YDRAW; this_curve -> axmax[1] = this_curve -> axmax[1] - (y2 - y1) * tmp / YDRAW; } } } } update_curve ((gpointer)cstate -> id); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the curve window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { curve_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the curve window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { curve_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief mouse button event on the curve window \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; curve_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return TRUE; } #endif /*! \fn void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) \brief the keyboard shortcut actions for the curve window \param keyval the key pressed \param state the keyboard modifier \param data the associated data pointer */ void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) { if (state & GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_a: autoscale (data); break; case GDK_KEY_c: hide_curve (data); break; case GDK_KEY_e: edit_curve (data); break; case GDK_KEY_i: save_image (data); break; case GDK_KEY_s: write_curve (data); break; } } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) \brief keyboard key press event for the curve window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEventKey triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { //GdkModifierType accel_mask = gtk_accelerator_get_default_mod_mask (); // if ((event -> state & accel_mask) == GDK_CONTROL_MASK) curve_key_pressed (event -> keyval, event -> state, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief keyboard key press event for the curve window GTK4 \param self the GtkEventControllerKey sending the signal \param keyval number of times it was pressed \param keycode the key pressed \param state the keyboard modifier \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { curve_key_pressed (keyval, state, data); return TRUE; } #endif /*! \fn int get_curve_shift (Curve * this_curve) \brief get cruve window size shift \param this_curve the target curve */ int get_curve_shift (Curve * this_curve) { return get_widget_height (this_curve -> window) - get_widget_height (this_curve -> plot); } /*! \fn G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) \brief curve window realize callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); resize_this_window (this_curve -> window, this_curve -> wsize[0], this_curve -> wsize[1] + get_curve_shift (this_curve)); } /*! \fn GtkWidget * create_curve (tint * data) \brief create the curve data plot window \param data the associated data pointer */ GtkWidget * create_curve (tint * data) { GtkWidget * curve_win, * vbox; activeg = data -> a; activer = data -> b; activec = data -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)data); gchar * str = g_strdup_printf ("%s - %s", prepare_for_title (get_project_by_id(data -> a) -> name), this_curve -> name); curve_win = create_win (str, MainWindow, FALSE, TRUE); g_free (str); vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, curve_win, vbox); this_curve -> curve_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_curve -> curve_vbox, FALSE, FALSE, 0); curve_action_id ++; this_curve -> action_id = curve_action_id; this_curve -> action_group = g_simple_action_group_new (); GSimpleAction * curve_action[5]; curve_action[0] = g_simple_action_new ("save.data", NULL); curve_action[1] = g_simple_action_new ("close.curve", NULL); curve_action[2] = g_simple_action_new ("edit.curve", NULL); curve_action[3] = g_simple_action_new ("save.image", NULL); curve_action[4] = g_simple_action_new ("shortcuts.curve", NULL); int i; for (i=0; i<5; i++) { g_action_map_add_action (G_ACTION_MAP(this_curve -> action_group), G_ACTION(curve_action[i])); g_signal_connect (curve_action[i], "activate", G_CALLBACK(curve_menu_bar_action), data); } str = g_strdup_printf ("c-%d", this_curve -> action_id); gtk_widget_insert_action_group (curve_win, str, G_ACTION_GROUP(this_curve -> action_group)); g_free (str); curve_window_add_menu_bar (data); this_curve -> datatree = NULL; this_curve -> state.id = data; this_curve -> plot = gtk_drawing_area_new (); gtk_widget_set_size_request (this_curve -> plot, 100, 100); gtk_widget_set_hexpand (this_curve -> plot, TRUE); gtk_widget_set_vexpand (this_curve -> plot, TRUE); #ifdef GTK3 gtk_widget_add_events (GTK_WIDGET (this_curve -> plot), GDK_EXPOSURE_MASK | GDK_SMOOTH_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); g_signal_connect (G_OBJECT(this_curve -> plot), "motion_notify_event", G_CALLBACK(on_motion_notify_event), & this_curve -> state); g_signal_connect (G_OBJECT(this_curve -> plot), "button_press_event", G_CALLBACK(on_curve_button_event), & this_curve -> state); g_signal_connect (G_OBJECT(this_curve -> plot), "button_release_event", G_CALLBACK(on_curve_button_event),& this_curve -> state); g_signal_connect (G_OBJECT(this_curve -> plot), "popup-menu", G_CALLBACK(view_curve_popup), & this_curve -> state); #else add_widget_gesture_and_key_action (curve_win, "curve-button-pressed", G_CALLBACK(on_curve_button_pressed), & this_curve -> state, "curve-button-released", G_CALLBACK(on_curve_button_released), & this_curve -> state, "curve-key-pressed", G_CALLBACK(on_curve_key_pressed), data, "curve-pointer-motion", G_CALLBACK(on_curve_pointer_motion), & this_curve -> state, NULL, NULL, NULL); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_curve -> plot, FALSE, TRUE, 0); #ifdef GTK3 g_signal_connect (G_OBJECT(this_curve -> plot), "draw", G_CALLBACK(show_curve), data); g_signal_connect (G_OBJECT(curve_win), "key-press-event", G_CALLBACK(on_curve_key_pressed), data); #else gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA(this_curve -> plot), (GtkDrawingAreaDrawFunc)show_curve, data, NULL); #endif g_signal_connect (G_OBJECT(curve_win), "realize", G_CALLBACK(on_curve_realize), data); add_gtk_close_event (curve_win, G_CALLBACK(to_hide_curve), data); return curve_win; } atomes_1.3.1/src/curve/curve.h0000664000175000017500000001334015212624223015716 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file curve.h * @short Variable declarations for the curve widget \n Functions for interactions with the curve widget * @author Sébastien Le Roux */ /* * This header file: 'curve.h' * * Contains: - Variable declarations for the curve widget - Functions for interactions with the curve widget */ #ifndef CURVE_H_ #define CURVE_H_ #include "global.h" // Grid lines width in pixels #define GRIDSIZE 0.1 // Default position of the legend on the curve #define LEGX 0.65 #define LEGY 0.15 // Default color of the data from 0 to 65535 #define RED 1.0 #define GREEN 0.0 #define BLUE 0.0 // Default linewidth of the data line #define DTHICK 1.0 // Number of dash types #define NDASHS 11 // Number of glyph types #define NGLYPHS 37 // The marges between the windows border and the axes #define MARGX 100 #define MARGY 70 extern GtkWidget * axischoice; extern GtkWidget * vmin, * vmax; extern GtkWidget * majt; extern GtkWidget * nmi[2]; extern GtkWidget * xyp[2]; extern int resol[2]; extern int originp; extern int ndash; extern int nglyph; extern double back_alpha; typedef struct curve_dash curve_dash; struct curve_dash { const double * a; int b; }; extern gint32 etime; extern double XDRAW, YDRAW; extern double DXDRAW, DYDRAW; extern double xmax, ymax; extern double x_min, x_max; extern double y_max, y_min; extern double ax, ay; extern double cxy[2]; extern double mticks; extern int nticks; extern int xlog, ylog; extern int dxlog, dylog; extern char * sca; extern PangoLayout * layout; extern gboolean dogrid; extern int x_shift, y_shift; extern int amint, amajt; extern int tickpos, labpos; // Marge sur X et Y dans les graphs extern int xmarge; extern int ymarge; extern char * curve_image_file; extern int get_curve_shift (Curve * this_curve); // Number of dash formats extern int ndash; extern int nglyph; extern const double dashed1[]; extern int len1; extern const double pdashed[]; extern int lenp; extern curve_dash * selectdash (int iddash); extern double scale (double axe); extern Curve * get_curve_from_pointer (gpointer data); extern void prep_plot (Curve * this_curve); extern void hide_curves (project * this_proj, int c); extern void erase_curves (project * this_proj, int c); extern void update_curves (); extern void update_curve (gpointer curve); #ifdef GTK3 extern gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve); #else extern void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve); #endif extern void hide_curve (gpointer data); #ifdef GTK3 extern G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data); #else extern G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data); #endif extern void clean_curves_data (int calc, int start, int end); extern void initcurve (project * pid, int rid, int cid); extern void init_curve_title (project * this_proj, int rid, int cid); extern void add_curve_widgets (project * this_proj, int rid); extern void allocextra (int a, int b, int c); extern void label_curve (cairo_t * cr, double val, int axe, int p, Curve * this_curve); extern void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol); extern void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); extern void draw_frame (cairo_t * cr, Curve * this_curve, int rid, int cid); extern void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size); extern const gchar * default_title (int ax, gpointer data); extern void show_title (cairo_t * cr, Curve * this_curve); extern void autoscale_axis (project * this_proj, Curve * this_curve, int rid, int cid, int aid); extern void setup_xaxis_linear (cairo_t * cr, Curve * this_curve); extern void setup_xaxis_log (cairo_t * cr, Curve * this_curve, int rid, int cid, gboolean draw_it); extern void setup_yaxis_linear (cairo_t * cr, Curve * this_curve); extern void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it); extern void write_curve (gpointer idata); extern void save_image (gpointer cdata); extern void remove_extra (ExtraSets * sets, CurveExtra * ctmp); extern void curve_window_add_menu_bar (tint * data); extern GtkWidget * curve_popup_menu (gpointer data); extern void show_curve_popup_menu (GdkEvent * event, gpointer data); void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid); extern void show_legend (cairo_t * cr, project * this_proj, int rid, int cid); #endif atomes_1.3.1/src/curve/w_data.c0000664000175000017500000001563315212624223016033 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_data.c * @short Functions to export curve data * @author Sébastien Le Roux */ /* * This file: 'w_data.c' * * Contains: * - The functions to export curve data * * List of functions: void write_curve (gpointer idata); G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data); */ #include #include #include #include "global.h" #include "interface.h" #include "project.h" #include "curve.h" void save_to_file_ (int *, char *, int *, double *, double *, int *, int *, int *, double *, int *, int *, int *, int *, int *, char *); void prep_file_ (int *, char *, int *, int *, int *, int *, double *, int *, int *); void append_to_file_ (int *, double *, double *, double *, int *, int *, int *, int *, int *, int *, int *, int *, char *); GtkFileFilter * filter1, * filter2; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) \brief save curve data - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) \brief save curve data - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int a, b, c, i, j, k, l, m, n, o, p, q; tint * cd = (tint *)data; Curve * this_curve = get_curve_from_pointer (data); a = cd -> a; b = cd -> b; c = cd -> c; if (response_id == GTK_RESPONSE_ACCEPT) { project * this_proj = get_project_by_id(a); double delta = this_proj -> analysis[b] -> delta; this_curve -> cfile = file_chooser_get_file_name (chooser); GtkFileFilter * tmp = gtk_file_chooser_get_filter (chooser); if (tmp == filter1) { l = 0; } else if (tmp == filter2) { l = 1; } k = strlen (this_curve -> cfile); j = strlen (this_curve -> title); // Get n if (this_curve -> extrac -> extras == 0) { m = activep; active_project_changed (a); save_to_file_ (& k, this_curve -> cfile, & this_curve -> ndata, this_curve -> data[0], this_curve -> data[1], & this_curve -> scale[0], & this_curve -> scale[1], & this_curve -> layout -> aspect, & delta, & b, & c, & this_proj -> nspec, & l, & j, this_curve -> title); active_project_changed (m); } else { p = this_curve -> extrac -> extras + 1; m = 0; prep_file_ (& k, this_curve -> cfile, & this_proj -> nspec, & l, & this_curve -> scale[0], & this_curve -> scale[1], & delta, & b, & c); append_to_file_ (& this_curve -> ndata, this_curve -> data[0], this_curve -> data[1], & delta, & this_curve -> layout -> aspect, & b, & c, & this_proj -> nspec, & l, & m, & p, & j, this_curve -> title); j = this_curve -> extrac -> extras; CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0 ; i < j ; i++ ) { m = m + 1; q = ctmp -> id.a; o = ctmp -> id.b; n = ctmp -> id.c; this_proj = get_project_by_id(q); j = strlen (this_proj -> analysis[o] -> curves[n] -> title); append_to_file_ (& this_proj -> analysis[o] -> curves[n] -> ndata, this_proj -> analysis[o] -> curves[n] -> data[0], this_proj -> analysis[o] -> curves[n] -> data[1], & this_proj -> analysis[o] -> delta, & ctmp -> layout -> aspect, & o, & n, & this_proj -> nspec, & l, & m, & p, & j, this_proj -> analysis[o] -> curves[n] -> title); if (ctmp -> next) ctmp = ctmp -> next; } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void write_curve (gpointer idata) \brief save curve data - creating the dialog \param idata the associated data pointer */ void write_curve (gpointer idata) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif Curve * this_curve = get_curve_from_pointer (idata); info = create_file_chooser (_("Save Data"), GTK_WINDOW(this_curve -> window), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _("Xmgrace file (*.agr)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), "*.agr"); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("x/y ASCII file (*.dat)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*.dat"); gtk_file_chooser_add_filter (chooser, filter2); if (this_curve -> cfile != NULL) { if (! file_chooser_set_file_name (chooser, this_curve -> cfile)) goto end; } else { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, this_curve -> name); } #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_write_curve), idata); #else run_this_gtk_dialog (info, G_CALLBACK(run_write_curve), idata); #endif end:; } atomes_1.3.1/src/curve/tab-1.c0000664000175000017500000006143415212624223015500 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-1.c * @short 1st tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-1.c' * * Contains: * - The 1st tab of the curve layout edition dialog * * List of functions: void set_frame_style (gpointer data); G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data); G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data); G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data); cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol); GtkWidget * create_tab_1 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern void set_data_style (gpointer data); char * ctext[2] = {"x ∈ [0.0, 1.0]", "y ∈ [0.0, 1.0]"}; /*! \fn G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) \brief change window size entry callback \param maj the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) { const gchar *m; char * text[2]; int i; qint * ad = (qint *)data; Curve * this_curve = get_project_by_id (ad -> a) -> analysis[ad -> b] -> curves[ad -> c]; int shift = get_curve_shift (this_curve); text[0] = i18n("X size must be > 0"); text[1] = i18n("Y size must be > 0"); m = entry_get_text (maj); i = string_to_double ((gpointer)m); if (i > 0) { switch (ad -> d) { case 0: resize_this_window (this_curve -> window, i, this_curve -> wsize[1] + shift); break; case 1: resize_this_window (this_curve -> window, this_curve -> wsize[0], i + shift); break; } this_curve -> wsize[ad -> d] = i; } else { show_warning (_(text[ad -> d]), this_curve -> window); } update_entry_int (maj, this_curve -> wsize[ad -> d]); } /*! \fn cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) \brief draw frame preview \param tf frame type \param da frame dash \param ti frame thickness \param x x positions (min / max) \param y y positions (min / max) \param dcol frame color \param bcol background color */ cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) { cairo_surface_t * cst; cairo_t * tcst; int r[2]; r[0] = 100; r[1] = 100; cst = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); tcst = cairo_create (cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); show_frame (tcst, tf, da, r, ti, x, y, dcol); cairo_destroy (tcst); return cst; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) \brief show / hide title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) \brief show / hide title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> show_title = button_get_status ((GtkWidget *)but); widget_set_sensitive (this_curve -> curve_edit -> title_box, this_curve -> show_title); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) \brief use / not default title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) \brief use / not default title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> default_title = button_get_status ((GtkWidget *)but); widget_set_sensitive (this_curve -> curve_edit -> custom_title, ! this_curve -> default_title); if (this_curve -> default_title) { g_free (this_curve -> title); this_curve -> title = g_strdup_printf ("%s - %s", prepare_for_title(get_project_by_id(((tint *)data) -> a) -> name), this_curve -> name); } update_entry_text (GTK_ENTRY(this_curve -> curve_edit -> custom_title), this_curve -> title); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) \brief set custom title entry callback \param tit the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); g_free (this_curve -> title); this_curve -> title = g_strdup_printf ("%s", entry_get_text (tit)); update_entry_text (tit, this_curve -> title); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) \brief set title font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); g_free (this_curve -> title_font); this_curve -> title_font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) \brief set title color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> title_color = get_button_color (colob); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) \brief set axis title position entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) { const gchar * p; double v; qint * ad = (qint *)data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); p = entry_get_text (entry); v = string_to_double ((gpointer)p); if (v >= 0.0 && v <= 1.0) { this_curve -> title_pos[ad -> d] = v; } else { show_warning (ctext[ad -> d], this_curve -> window); } update_entry_double (entry, this_curve -> title_pos[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn void set_frame_style (gpointer data) \brief create frame preview \param data the associated data pointer */ void set_frame_style (gpointer data) { cairo_surface_t * surf; Curve * this_curve = get_curve_from_pointer (data); surf = draw_frame_surface (this_curve -> frame_type, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_pos[0], this_curve -> frame_pos[1], this_curve -> frame_color, this_curve -> backcolor); this_curve -> curve_edit -> frame_style_area = destroy_this_widget (this_curve -> curve_edit -> frame_style_area); this_curve -> curve_edit -> frame_style_area = create_image_from_data (IMG_SURFACE, (gpointer)surf); cairo_surface_destroy (surf); widget_set_sensitive (this_curve -> curve_edit -> frame_style_area, this_curve -> show_frame); show_the_widgets (this_curve -> curve_edit -> frame_style_area); #ifdef GTK4 gtk_widget_set_hexpand (this_curve -> curve_edit -> frame_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_curve -> curve_edit -> frame_pix_box, this_curve -> curve_edit -> frame_style_area, TRUE, TRUE, 20); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) \brief show / hide frame toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) \brief show / hide frame toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> show_frame = button_get_status ((GtkWidget *)but); widget_set_sensitive (this_curve -> curve_edit -> frame_box, this_curve -> show_frame); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) \brief change background color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> backcolor = get_button_color (colob); set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) \brief change frame type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) { get_curve_from_pointer (data) -> frame_type = combo_get_active ((GtkWidget *)fbox); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) \brief change frame line type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) { get_curve_from_pointer (data) -> frame_dash = combo_get_active ((GtkWidget *)fbox) + 1; set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) \brief set frame thickness entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) { const gchar * str; str = entry_get_text (entry); Curve * this_curve = get_curve_from_pointer (data); this_curve -> frame_thickness = string_to_double ((gpointer)str); update_entry_double (entry, this_curve -> frame_thickness); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) \brief set frame color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> frame_color = get_button_color (colob); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) \brief set frame position entry callback \param fen the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) { qint * cd = (qint *)data; int k; const gchar * m; double z; Curve * this_curve = get_curve_from_pointer (data); m = entry_get_text (fen); z = string_to_double ((gpointer)m); if (cd -> d < 2) { if (cd -> d == 0) { k = 0; if (z < this_curve -> frame_pos[0][1]) { this_curve -> frame_pos[0][0] = z; } else { show_warning (_("Frame x min must be < to frame x max"), this_curve -> window); } } else if (cd -> d == 1) { k = 1; if (z > this_curve -> frame_pos[0][0]) { this_curve -> frame_pos[0][1] = z; } else { show_warning (_("Frame x max must be > to frame x min"), this_curve -> window); } } update_entry_double (fen, this_curve -> frame_pos[0][k]); } else { if (cd -> d == 2) { k = 0; if (z > this_curve -> frame_pos[1][1]) { this_curve -> frame_pos[1][0] = z; } else { show_warning (_("Frame y min must be > to frame y max"), this_curve -> window); } } else { k = 1; if (z < this_curve -> frame_pos[1][0]) { this_curve -> frame_pos[1][1] = z; } else { show_warning (_("Frame y max must be < to frame y min"), this_curve -> window); } } update_entry_double (fen, this_curve -> frame_pos[1][k]); } set_frame_style (data); } /*! \fn GtkWidget * create_tab_1 (curve_edition * cedit, gpointer data) \brief handle the creation of the 1st tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_1 (curve_edition * cedit, gpointer data) { GtkWidget * graphbox; GtkWidget * fbox; GtkWidget * ghbox; GtkWidget * gvbox; GtkWidget * frame_style_box; GtkWidget * frame_thickness; GtkWidget * xyf; gchar * str[2]; str[0] = "min"; str[1] = "max"; gchar * axl[2]; axl[0] = "x"; axl[1] = "y"; gchar * ftb[5] = {i18n("Closed"), i18n("Top Open"), i18n("Right Open"), i18n("Left Open"), i18n("Open ")}; int xlgt, ylgt; int i, j, k; Curve * this_curve = get_curve_from_pointer (data); // Axis related signals for ( i=0 ; i < 2 ; i++ ) { cedit -> dataxe[i].a = ((tint *)data) -> a; cedit -> dataxe[i].b = ((tint *)data) -> b; cedit -> dataxe[i].c = ((tint *)data) -> c; cedit -> dataxe[i].d = i; cedit -> xyp[i] = create_entry (G_CALLBACK(set_window_size), 100, 10, FALSE, (gpointer)& cedit -> dataxe[i]); } graphbox = create_vbox (BSEP); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, ghbox, FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(_("Size:"), 50, 35, 1.0, 0.5), FALSE, FALSE, 20); xlgt = get_widget_width (this_curve -> plot); ylgt = get_widget_height (this_curve -> plot); update_entry_int (GTK_ENTRY(cedit -> xyp[0]), xlgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, cedit -> xyp[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label("x", -1, -1, 0.5, 0.5), FALSE, FALSE, 10); update_entry_int (GTK_ENTRY(cedit -> xyp[1]), ylgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, cedit -> xyp[1], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(_("pixels"), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, check_button (_("Insert title"), -1, -1, this_curve -> show_title, G_CALLBACK(set_title), data), FALSE, FALSE, 10); cedit -> title_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, cedit -> title_box, FALSE, FALSE, 0); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> title_box, ghbox, FALSE, FALSE, 2); gvbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, gvbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, gvbox, check_button (_("Default title"), 100, 35, this_curve -> default_title, G_CALLBACK(set_title_default), data), FALSE, FALSE, 40); cedit -> custom_title = create_entry (G_CALLBACK(set_title_custom), 200, 15, TRUE, data); gtk_entry_set_alignment (GTK_ENTRY(cedit -> custom_title), 0.0); if (this_curve -> show_title) { widget_set_sensitive (cedit -> custom_title, ! this_curve -> default_title); } else { widget_set_sensitive (cedit -> custom_title, 0); } update_entry_text (GTK_ENTRY(cedit -> custom_title), this_curve -> title); add_box_child_end (gvbox, cedit -> custom_title, FALSE, FALSE, 0); add_box_child_end (bbox (cedit -> title_box, _("Font:")), font_button (this_curve -> title_font, 150, 35, G_CALLBACK(set_title_font), data), FALSE, FALSE, 0); add_box_child_end (bbox (cedit -> title_box, _("Color:")), color_button (this_curve -> title_color, TRUE, 150, 30, G_CALLBACK(set_title_color), data), FALSE, FALSE, 0); ghbox = bbox (cedit -> title_box, _("Position:")); GtkWidget * txyc; for ( i=0 ; i < 2 ; i++ ) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(lapos[i], (i==0)?10:30, -1, 1.0, 0.5), FALSE, FALSE, 5); txyc = create_entry (G_CALLBACK(set_title_pos), 100, 10, FALSE, (gpointer)& cedit -> dataxe[i]); update_entry_double (GTK_ENTRY(txyc), this_curve -> title_pos[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, txyc, FALSE, FALSE, 5); } widget_set_sensitive (cedit -> title_box, this_curve -> show_title); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, ghbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(_("Background color:"), 120, 30, 0.0, 0.5), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, color_button (this_curve -> backcolor, TRUE, 100, -1, G_CALLBACK(set_background_color), data), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); // Frame add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, check_button (_("Show/Hide frame"), -1, -1, this_curve -> show_frame, G_CALLBACK(set_show_frame), data), FALSE, FALSE, 10); cedit -> frame_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, cedit -> frame_box, FALSE, FALSE, 0); cedit -> frame_pix_box = create_hbox (0); frame_style_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> frame_box, cedit -> frame_pix_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> frame_pix_box, frame_style_box, FALSE, FALSE, 0); // Frame style fbox = create_combo (); for (i=0; i<5; i++) { combo_text_append (fbox, _(ftb[i])); } gtk_widget_set_size_request (fbox, 150, 30); combo_set_active (fbox, this_curve -> frame_type); g_signal_connect (G_OBJECT(fbox), "changed", G_CALLBACK(set_frame_type), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Type:")), fbox, FALSE, FALSE, 0); // Frame line style fbox = create_combo (); for ( i=1 ; i < ndash ; i++) { combo_text_append (fbox, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (fbox, 150, 30); combo_set_active (fbox, this_curve -> frame_dash - 1); g_signal_connect (G_OBJECT(fbox), "changed", G_CALLBACK(set_frame_line), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Line style:")), fbox, FALSE, FALSE, 0); // Frame line width frame_thickness = create_entry (G_CALLBACK(set_frame_thickness), -1, 10, FALSE, data); update_entry_double (GTK_ENTRY(frame_thickness), this_curve -> frame_thickness); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Line width:")), frame_thickness, FALSE, FALSE, 0); // Frame color add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Color:")), color_button (this_curve -> frame_color, TRUE, 150, 30, G_CALLBACK(set_frame_color), data), FALSE, FALSE, 0); // Frame pix cairo_surface_t * frame = draw_frame_surface (this_curve -> frame_type, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_pos[0], this_curve -> frame_pos[1], this_curve -> frame_color, this_curve -> backcolor); cedit -> frame_style_area = create_image_from_data (IMG_SURFACE, (gpointer)frame); cairo_surface_destroy (frame); gtk_widget_set_size_request (cedit -> frame_pix_box, -1, 150); #ifdef GTK4 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> frame_pix_box, markup_label(" ", 20, -1, 0.0, 0.0), FALSE, FALSE, 0); gtk_widget_set_hexpand (cedit -> frame_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> frame_pix_box, cedit -> frame_style_area, FALSE, FALSE, 20); bbox (cedit -> frame_box, _("Position: ")); GtkWidget * fxyc; k = -1; for (i=0; i<2; i++) { ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> frame_box, ghbox, FALSE, FALSE, 0); for (j=0; j<2; j++) { k = k + 1; cedit -> framxe[k].a = ((tint *)data) -> a; cedit -> framxe[k].b = ((tint *)data) -> b; cedit -> framxe[k].c = ((tint *)data) -> c; cedit -> framxe[k].d = k; xyf = markup_label (g_strdup_printf ("%s %s: ",axl[i], str[j]), 70, -1, 1.0, 0.5); widget_set_sensitive (xyf, this_curve -> show_frame); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, xyf, FALSE, FALSE, 20); fxyc = create_entry (G_CALLBACK(set_frame_pos), 100, 10, FALSE, (gpointer)& cedit -> framxe[k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, fxyc, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(fxyc), this_curve -> frame_pos[i][j]); } } widget_set_sensitive (cedit -> frame_box, this_curve -> show_frame); return graphbox; } atomes_1.3.1/src/curve/labels.c0000664000175000017500000000560315212624223016032 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file labels.c * @short Function to draw the axis labels * @author Sébastien Le Roux */ /* * This file: 'labels.c' * * Contains: * - Function to draw the axis labels * * List of functions: void label_curve (cairo_t * cr, double val, int axe, int p, project * this_proj); */ #include #include #include #include #include "global.h" #include "curve.h" /*! \fn void label_curve (cairo_t * cr, double val, int axe, int p, Curve * this_curve) \brief draw axis label \param cr the cairo drawing context to use for the draw \param val the value to display \param axe axis (0 = x, 1 = y) \param p label position (0 = bottom, 1 = top) \param this_curve the target curve */ void label_curve (cairo_t * cr, double val, int axe, int p, Curve * this_curve) { gchar * label; gchar * lab; gchar * tmp; int i, j; double u, v; lab = g_strdup_printf ("%.10lf", val); for (i=0; i < strlen(lab); i++) { tmp = g_strdup_printf ("%c", lab[i]); if (g_strcmp0 ((char *)tmp, ".") == 0) j = i; g_free (tmp); } for (i=0; i < j + this_curve -> labels_digit[axe] + 1; i++) { if (i == 0) { label = g_strdup_printf ("%c", lab[i]); } else { tmp = g_strdup_printf ("%s%c", label, lab[i]); g_free (label); label = g_strdup_printf ("%s", tmp); g_free (tmp); } } pango_layout_set_markup (layout, label, -1); if (p == 1) { pango_layout_get_size (layout, & i, & j); if (axe == 0) { u = sin (this_curve -> labels_angle[axe]) * (double)i; v = sin (pi / 2.0 - this_curve -> labels_angle[axe]) * (double)j; ay = ay - (u + v)/PANGO_SCALE; } else { u = sqrt (1.0*i*i + 1.0*j*j); v = atan ((1.0*j) / (1.0*i)); u = u * cos (this_curve -> labels_angle[axe] + v); ax = ax - u / PANGO_SCALE; } } cairo_move_to (cr, ax, ay); cairo_rotate (cr, this_curve -> labels_angle[axe]); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); cairo_rotate (cr, -this_curve -> labels_angle[axe]); pango_cairo_update_layout (cr, layout); } atomes_1.3.1/src/curve/tab-2.c0000664000175000017500000010272315212624223015476 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-2.c * @short 2nd tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-2.c' * * Contains: * - The 2nd tab of the curve layout edition dialog * * List of functions: void set_data_style (gpointer data); static void fill_org_model (GtkListStore * store, gpointer data); G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data); G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data); G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data); G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data); G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data); GtkWidget * create_org_list (gpointer data); GtkWidget * create_tab_2 (gpointer data); DataLayout * get_extra_layout (gpointer data, int i); DataLayout * duplicate_curve_layout (DataLayout * old_layout); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" GtkTreeModel * orgmodel; /*! \fn cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) \brief draw the data set preview \param aspect the data aspect (x/y or bars) \param hwidth the histogram bar width \param hopac the histogram bar opacity \param da the dash type \param ti the thickness \param dcol the data color \param bcol the background color \param tglyph the glyphe type \param tgsize the glyph size */ cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) { cairo_surface_t * cst; cairo_t * tcst; curve_dash * tdash; double x, y; double x1, x2, y1, y2; switch (aspect) { case 1: cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 100); tcst = cairo_create(cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_stroke (tcst); cairo_set_source_rgba (tcst, dcol.red, dcol.green, dcol.blue, hopac); x1 = (100.0-hwidth*50.0)/2.0; x2 = hwidth*50.0; y1 = 15.0; y2 = 70.0; cairo_rectangle (tcst, x1, y1, x2, y2); cairo_fill (tcst); cairo_set_source_rgba (tcst, dcol.red, dcol.green, dcol.blue, 1.0); cairo_stroke (tcst); if (da > 0) { tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_line_width (tcst, ti); x2 += x1; y2 = 100 - y1; cairo_move_to (tcst, x1, y2); cairo_line_to (tcst, x1, y1); cairo_move_to (tcst, x1, y1); cairo_line_to (tcst, x2, y1); cairo_move_to (tcst, x2, y1); cairo_line_to (tcst, x2, y2); cairo_stroke (tcst); g_free (tdash); } break; default: cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 30); tcst = cairo_create(cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_stroke (tcst); if (da > 0) { tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_source_rgb (tcst, dcol.red, dcol.green, dcol.blue); cairo_set_line_width (tcst, ti); cairo_move_to (tcst, 0, 15); cairo_line_to (tcst, 100, 15); cairo_stroke (tcst); g_free (tdash); } x = 25.0; y = 15.0; draw_glyph (tcst, tglyph, x, y, dcol, tgsize); x = 75.0; draw_glyph (tcst, tglyph, x, y, dcol, tgsize); break; } cairo_destroy (tcst); return cst; } /*! \fn DataLayout * get_extra_layout (gpointer data, int i) \brief retrieve the i data layout \param data the target data pointer \param i the id of data layout to retrieve */ DataLayout * get_extra_layout (gpointer data, int i) { int j; CurveExtra * ctmp = get_curve_from_pointer (data) -> extrac -> first; for (j=0; j next; } return ctmp -> layout; } /*! \fn void set_data_style (gpointer data) \brief update the data style widgets \param data the associated data pointer */ void set_data_style (gpointer data) { int i; cairo_surface_t * pix; Curve * this_curve = get_curve_from_pointer (data); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); DataLayout * layout; if (i > 0) { layout = get_extra_layout (data, i-1); } else { layout = this_curve -> layout; } pix = draw_surface (layout -> aspect, layout -> hwidth, layout -> hopac, layout -> dash, layout -> thickness, layout -> datacolor, this_curve -> backcolor, layout -> glyph, layout -> gsize); this_curve -> curve_edit -> stylearea = destroy_this_widget (this_curve -> curve_edit -> stylearea); this_curve -> curve_edit -> stylearea = create_image_from_data (IMG_SURFACE, pix); cairo_surface_destroy (pix); show_the_widgets (this_curve -> curve_edit -> stylearea); #ifdef GTK4 gtk_widget_set_hexpand (this_curve -> curve_edit -> stylearea, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_curve -> curve_edit -> pixarea, this_curve -> curve_edit -> stylearea, TRUE, TRUE, 0); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) \brief change glyph type \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) { int i, j; curve_edition * cedit = get_curve_from_pointer(data) -> curve_edit; i = combo_get_active (cedit -> setcolorbox); j = combo_get_active ((GtkWidget *)gbox); if (i > 0) { get_extra_layout (data, i-1) -> glyph = j; } else { get_curve_from_pointer (data) -> layout -> glyph = j; } if (j == 0) { widget_set_sensitive (cedit -> data_glyph_size, 0); widget_set_sensitive (cedit -> data_glyph_freq, 0); } else { widget_set_sensitive (cedit -> data_glyph_size, 1); widget_set_sensitive (cedit -> data_glyph_freq, 1); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) \brief change data dash style \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) { int i, j; curve_edition * cedit = get_curve_from_pointer(data) -> curve_edit; i = combo_get_active (cedit -> setcolorbox); j = combo_get_active ((GtkWidget *)gbox); if (i > 0) { get_extra_layout (data, i-1) -> dash = j; } else { get_curve_from_pointer (data) -> layout -> dash = j; } if (j == 0) { widget_set_sensitive (cedit -> data_thickness, 0); } else { widget_set_sensitive (cedit -> data_thickness, 1); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) \brief set data color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) { int i; i = combo_get_active (get_curve_from_pointer(data) -> curve_edit -> setcolorbox); if (i > 0) { get_extra_layout (data, i-1) -> datacolor = get_button_color (colob); } else { get_curve_from_pointer (data) -> layout -> datacolor = get_button_color (colob); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) \brief set data thickness entry callback \param thickd the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (thickd); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k > 0.0) { if (i > 0) { get_extra_layout (data, i-1) -> thickness = k; } else { this_curve -> layout -> thickness = k; } update_entry_double (thickd, k); set_data_style (data); } else { show_warning (_("Line width must be > 0.0"), this_curve -> window); if (i > 0) { update_entry_double (thickd, get_extra_layout (data, i-1) -> thickness); } else { update_entry_double (thickd, this_curve -> layout -> thickness); } } } /*! \fn G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) \brief set glyph size entry callback \param glsize the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (glsize); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k > 0.0) { if (i > 0) { get_extra_layout (data, i-1) -> gsize = k; } else { this_curve -> layout -> gsize = k; } update_entry_double (glsize, k); set_data_style (data); } else { show_warning (_("Glyph size must be > 0.0"), this_curve -> window); if (i > 0) { update_entry_double (glsize, get_extra_layout (data, i-1) -> gsize); } else { update_entry_double (glsize, this_curve -> layout -> gsize); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) \brief set histogram bar width entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (entry); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k > 0.0) { if (i > 0) { get_extra_layout (data, i-1) -> hwidth = k; } else { this_curve -> layout -> hwidth = k; } update_entry_double (entry, k); set_data_style (data); } else { show_warning (_("Bar width must be > 0.0"), this_curve -> window); if (i > 0) { update_entry_double (entry, get_extra_layout (data, i-1) -> hwidth); } else { update_entry_double (entry, this_curve -> layout -> hwidth); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) \brief set histogram bar opacity entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (entry); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k >= 0.0 && k <= 1.0) { if (i > 0) { get_extra_layout (data, i-1) -> hopac = k; } else { this_curve -> layout -> hopac = k; } update_entry_double (entry, k); set_data_style (data); } else { show_warning (_("Bar opacity must ∈ [0.0 - 1.0]"), this_curve -> window); if (i > 0) { update_entry_double (entry, get_extra_layout (data, i-1) -> hopac); } else { update_entry_double (entry, this_curve -> layout -> hopac); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) \brief change histogram bar position \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) { int i, j; i = combo_get_active (get_curve_from_pointer (data) -> curve_edit -> setcolorbox); j = combo_get_active ((GtkWidget *)gbox); if (i > 0) { get_extra_layout (data, i-1) -> hpos = j; } else { get_curve_from_pointer (data) -> layout -> hpos = j; } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) \brief set glyph frequency entry callback \param glfreq the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) { int i, j; const gchar * wid; wid = entry_get_text (glfreq); j = string_to_double ((gpointer)wid); Curve * this_curve = get_curve_from_pointer (data); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (j > 0) { if (i > 0) { get_extra_layout (data, i-1) -> gfreq = j; } else { this_curve -> layout -> gfreq = j; } update_entry_int (glfreq, j); set_data_style (data); } else { show_warning (_("Glyph frequency must be > 0"), this_curve -> window); if (i > 0) { update_entry_int (glfreq, get_extra_layout (data, i-1) -> thickness); } else { update_entry_int (glfreq, this_curve -> layout -> gfreq); } } } /*! \fn G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) \brief change the data set to customize \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); DataLayout * layout; if (i > 0) { layout = get_extra_layout (data, i-1); } else { layout = get_curve_from_pointer (data) -> layout; } curve_edition * cedit = get_curve_from_pointer (data) -> curve_edit; GdkRGBA col = colrgba_togtkrgba (layout -> datacolor); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(cedit -> data_color), & col); combo_set_active (cedit -> data_dash, layout -> dash); update_entry_double (GTK_ENTRY(cedit -> data_thickness), layout -> thickness); combo_set_active (cedit -> data_glyph, layout -> glyph); update_entry_double (GTK_ENTRY(cedit -> data_glyph_size), layout -> gsize); update_entry_int (GTK_ENTRY(cedit -> data_glyph_freq), layout -> gfreq); update_entry_double (GTK_ENTRY(cedit -> data_hist_width), layout -> hwidth); update_entry_double (GTK_ENTRY(cedit -> data_hist_opac), layout -> hopac); combo_set_active (cedit -> data_hist_pos, layout -> hpos); combo_set_active (cedit -> data_aspect, layout -> aspect); set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) \brief change data aspect (x/y or histogram bars) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) { int i, j; curve_edition * cedit = get_curve_from_pointer (data) -> curve_edit; i = combo_get_active (cedit -> setcolorbox); j = combo_get_active ((GtkWidget *)box); if (j == 1) { combo_set_active (cedit -> data_glyph, 0); widget_set_sensitive (cedit -> data_glyph, 0); hide_the_widgets (cedit -> Glyph_box); show_the_widgets (cedit -> Hist_box); } else { widget_set_sensitive (cedit -> data_glyph, 1); hide_the_widgets (cedit -> Hist_box); show_the_widgets (cedit -> Glyph_box); } if (i > 0) { get_extra_layout (data, i-1) -> aspect = j; } else { get_curve_from_pointer (data) -> layout -> aspect = j; } set_data_style (data); update_curve (data); } /*! \fn static void fill_org_model (GtkListStore * store, gpointer data) \brief fill the data set list store \param store the data set list store to fill \param data the associated data pointer */ static void fill_org_model (GtkListStore * store, gpointer data) { GtkTreeIter curvelevel; int i, j, k, l; Curve * this_curve = get_curve_from_pointer (data); gchar * str; CurveExtra * ctmp; ctmp = this_curve -> extrac -> first; if (this_curve -> draw_id == this_curve -> extrac -> extras) { gtk_list_store_append (store, & curvelevel); str = g_strdup_printf ("%s - %s", get_project_by_id(((tint *)data) -> a) -> name, this_curve -> name); gtk_list_store_set (store, & curvelevel, 0, ((tint *)data) -> a, 1, ((tint *)data) -> b, 2, ((tint *)data) -> c, 3, str, -1); g_free (str); } i = this_curve -> extrac -> extras; while (ctmp) { gtk_list_store_append (store, & curvelevel); j = ctmp -> id.a; k = ctmp -> id.b; l = ctmp -> id.c; str = g_strdup_printf ("%s - %s", get_project_by_id(j) -> name, get_project_by_id(j) -> analysis[k] -> curves[l] -> name); gtk_list_store_set (store, & curvelevel, 0, j, 1, k, 2, l, 3, str, -1); g_free (str); i --; if (this_curve -> draw_id == i) { gtk_list_store_append (store, & curvelevel); str = g_strdup_printf ("%s - %s", get_project_by_id(((tint *)data) -> a) -> name, this_curve -> name); gtk_list_store_set (store, & curvelevel, 0, ((tint *)data) -> a, 1, ((tint *)data) -> b, 2, ((tint *)data) -> c, 3, str, -1); g_free (str); } ctmp = ctmp -> next; } } /*! \fn DataLayout * duplicate_curve_layout (DataLayout * old_layout) \brief duplicate a curve layout \param old_layout the layout to duplicate */ DataLayout * duplicate_curve_layout (DataLayout * old_layout) { DataLayout * new_layout = g_malloc0(sizeof*new_layout); new_layout -> datacolor.red = old_layout -> datacolor.red; new_layout -> datacolor.green = old_layout -> datacolor.green; new_layout -> datacolor.blue = old_layout -> datacolor.blue; new_layout -> datacolor.alpha = 1.0; new_layout -> thickness = old_layout -> thickness; new_layout -> hwidth = old_layout -> hwidth; new_layout -> hopac = old_layout -> hopac; new_layout -> hpos = old_layout -> hpos; new_layout -> dash = old_layout -> dash; new_layout -> gfreq = old_layout -> gfreq; new_layout -> aspect = old_layout -> aspect; new_layout -> glyph = old_layout -> glyph; new_layout -> gsize = old_layout -> gsize; return new_layout; } /*! \fn G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) \brief move up or down data set in the tree model to move it front or back in the data plot \param tree_model the GtkTreeModel sending the signal \param path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) { tint * cid = (tint *) data; GtkTreeIter iter; gboolean valid; gboolean done; int i, j, k, l, m; tint cbid; CurveExtra * ctmpa = NULL; Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; m = combo_get_active (cedit -> setcolorbox); if (m > 0) { ctmpa = this_curve -> extrac -> first; for (i=0; i next; cbid = ctmpa -> id; } l = this_curve -> extrac -> extras; valid = gtk_tree_model_get_iter_first (tree_model, & iter); CurveExtra * new_extra = NULL; CurveExtra * tmp_extra; while (valid) { gtk_tree_model_get (tree_model, & iter, 0, & i, 1, & j, 2, & k, -1); if (i == cid -> a && j == cid -> b && k == cid -> c) { // To set the draw order for the host curve this_curve -> draw_id = l; } else { l --; ctmpa = this_curve -> extrac -> first; done = FALSE; while (! done && ctmpa) { if (ctmpa -> id.a == i && ctmpa -> id.b == j && ctmpa -> id.c == k) { done = TRUE; } else { ctmpa = ctmpa -> next; done = FALSE; } } if (ctmpa) { if (new_extra == NULL) { new_extra = g_malloc0(sizeof*tmp_extra); tmp_extra = new_extra; } else { tmp_extra -> next = g_malloc0(sizeof*tmp_extra -> next); tmp_extra -> next -> prev = tmp_extra; tmp_extra = tmp_extra -> next; } tmp_extra -> id = ctmpa -> id; tmp_extra -> layout = duplicate_curve_layout (ctmpa -> layout); } } valid = gtk_tree_model_iter_next (tree_model, & iter); } ctmpa = this_curve -> extrac -> first -> next; while (ctmpa) { if (ctmpa -> prev) g_free (ctmpa -> prev); ctmpa = ctmpa -> next; } this_curve -> extrac -> first = new_extra; this_curve -> extrac -> last = tmp_extra; if (m > 0) { ctmpa = this_curve -> extrac -> first; m = 0; while (ctmpa) { if (cbid.a == ctmpa -> id.a && cbid.b == ctmpa -> id.b && cbid.c == ctmpa -> id.c) break; m ++; ctmpa = ctmpa -> next; } } cedit -> setcolorbox = destroy_this_widget (cedit -> setcolorbox); cedit -> setcolorbox = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, cedit -> setcolorbox, FALSE, FALSE, 0); show_the_widgets (cedit -> setcolorbox); prepbox (data); combo_set_active (cedit -> setcolorbox, m); choose_set (GTK_COMBO_BOX(cedit -> setcolorbox), data); update_curve (data); } /*! \fn void curve_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Curve edit window, tab-2, Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void curve_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { set_renderer_markup (mod, iter, renderer, 3); } /*! \fn GtkWidget * create_org_list (gpointer data) \brief create the data set organisation widget \param data the associated data pointer */ GtkWidget * create_org_list (gpointer data) { int i; GtkTreeViewColumn * orgcol[4]; GtkCellRenderer * orgcell[4]; gchar * ctype[4] = {"text", "text", "text", "text"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING}; GtkListStore * orglist = gtk_list_store_newv (4, col_type); orgmodel = GTK_TREE_MODEL(orglist); curve_edition * cedit = get_curve_from_pointer (data) -> curve_edit; cedit -> orgtree = gtk_tree_view_new_with_model(orgmodel); for (i=0; i<4; i++) { orgcell[i] = gtk_cell_renderer_text_new(); orgcol[i] = gtk_tree_view_column_new_with_attributes((i<3) ? " " : _("Data set(s)"), orgcell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(cedit -> orgtree), orgcol[i]); if (i < 3) { gtk_tree_view_column_set_visible (orgcol[i], FALSE); } else { gtk_tree_view_column_set_cell_data_func (orgcol[i], orgcell[i], curve_set_markup, NULL, NULL); } } fill_org_model (orglist, data); g_object_unref (orglist); g_signal_connect (G_OBJECT(orgmodel), "row-deleted", G_CALLBACK(move_back_front), data); gtk_tree_view_expand_all (GTK_TREE_VIEW(cedit -> orgtree)); gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(cedit -> orgtree), TRUE); /* #ifdef GTK4 add_widget_gesture_and_key_action (cedit -> orgtree, "orgtree-pressed", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif */ gtk_tree_view_set_reorderable (GTK_TREE_VIEW(cedit -> orgtree), TRUE); return cedit -> orgtree; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) \brief shift / not histogram bars toggle callback GTK4 \param shift the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) \brief shift / not histogram bars toggle callback GTK3 \param shift the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) #endif { get_curve_from_pointer (data) -> bshift = button_get_status ((GtkWidget *)shift); update_curve (data); } /*! \fn GtkWidget * create_tab_2 (curve_edition * cedit, gpointer data) \brief handle the creation of the 2nd tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_2 (curve_edition * cedit, gpointer data) { GtkWidget * dhbox; Curve * this_curve = get_curve_from_pointer (data); int i; GtkWidget * databox = create_vbox (BSEP); cedit -> thesetbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, cedit -> thesetbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, markup_label(_("Select set: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); cedit -> setcolorbox = create_combo (); prepbox (data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, cedit -> setcolorbox, FALSE, FALSE, 10); cedit -> pixarea = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, cedit -> pixarea, FALSE, FALSE, 10); dhbox = create_vbox (BSEP); gtk_widget_set_size_request (dhbox, -1, 270); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> pixarea, dhbox, FALSE, FALSE, 0); cedit -> data_aspect = create_combo (); combo_text_append (cedit -> data_aspect, "x/y"); combo_text_append (cedit -> data_aspect, _("Bar")); combo_set_active (cedit -> data_aspect, this_curve -> layout -> aspect); gtk_widget_set_size_request (cedit -> data_aspect, 120, -1); g_signal_connect (G_OBJECT(cedit -> data_aspect), "changed", G_CALLBACK(set_data_aspect), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Plot type:")), cedit -> data_aspect, FALSE, FALSE, 0); if (((tint *)data) -> b == MSD) { widget_set_sensitive (cedit -> data_aspect, 0); } // Data color cedit -> data_color = color_button (this_curve -> layout -> datacolor, TRUE, 120, -1, G_CALLBACK(set_data_color), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Data color:")), cedit -> data_color, FALSE, FALSE, 0); // Line style cedit -> data_dash = create_combo (); combo_text_append (cedit -> data_dash, _("No Line")); for ( i=1 ; i < ndash ; i++) { combo_text_append (cedit -> data_dash, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (cedit -> data_dash, 120, -1); combo_set_active (cedit -> data_dash, this_curve -> layout -> dash); g_signal_connect (G_OBJECT(cedit -> data_dash), "changed", G_CALLBACK(set_data_dash), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Line style:")), cedit -> data_dash, FALSE, FALSE, 0); // Line line width cedit -> data_thickness = create_entry (G_CALLBACK(set_data_thickness), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_thickness), this_curve -> layout -> thickness); if (this_curve -> layout -> dash == 0) { widget_set_sensitive (cedit -> data_thickness, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Line width:")), cedit -> data_thickness, FALSE, FALSE, 0); GtkWidget * data_shape = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, dhbox, data_shape, FALSE, FALSE, 0); cedit -> Glyph_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, data_shape, cedit -> Glyph_box, FALSE, FALSE, 0); // Glyph type cedit -> data_glyph = create_combo (); combo_text_append (cedit -> data_glyph, _("No Glyph")); for ( i=1 ; i < nglyph ; i++) { combo_text_append (cedit -> data_glyph, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (cedit -> data_glyph, 120, -1); combo_set_active (cedit -> data_glyph, this_curve -> layout -> glyph); g_signal_connect (G_OBJECT(cedit -> data_glyph), "changed", G_CALLBACK(set_data_glyph), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Glyph_box, _("Glyph type:")), cedit -> data_glyph, FALSE, FALSE, 0); // Glyph size cedit -> data_glyph_size = create_entry (G_CALLBACK(set_data_glyph_size), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_glyph_size), this_curve -> layout -> gsize); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Glyph_box, _("Glyph size:")), cedit -> data_glyph_size, FALSE, FALSE, 0); // Glyph frequency cedit -> data_glyph_freq = create_entry (G_CALLBACK(set_data_glyph_freq), 120, 10, FALSE, data); update_entry_int (GTK_ENTRY(cedit -> data_glyph_freq), this_curve -> layout -> gfreq); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Glyph_box, _("Glyph freq.:")), cedit -> data_glyph_freq, FALSE, FALSE, 0); if (this_curve -> layout -> glyph == 0) { widget_set_sensitive (cedit -> data_glyph_size, 0); widget_set_sensitive (cedit -> data_glyph_freq, 0); } cedit -> Hist_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, data_shape, cedit -> Hist_box, FALSE, FALSE, 0); // Histogram width cedit -> data_hist_width = create_entry (G_CALLBACK(set_data_hist_width), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_hist_width), this_curve -> layout -> hwidth); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Hist_box, _("Bar width:")), cedit -> data_hist_width, FALSE, FALSE, 0); // Histogram opacity cedit -> data_hist_opac = create_entry (G_CALLBACK(set_data_hist_opac), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_hist_opac), this_curve -> layout -> hopac); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Hist_box, _("Color opacity:")), cedit -> data_hist_opac, FALSE, FALSE, 0); cedit -> data_hist_pos = create_combo (); combo_text_append (cedit -> data_hist_pos, _("Transparent")); combo_text_append (cedit -> data_hist_pos, _("Plain")); gtk_widget_set_size_request (cedit -> data_hist_pos, 120, -1); combo_set_active (cedit -> data_hist_pos, this_curve -> layout -> hpos); g_signal_connect (G_OBJECT(cedit -> data_hist_pos), "changed", G_CALLBACK(set_data_hist_pos), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Hist_box, _("Bar opacity:")), cedit -> data_hist_pos, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); GtkWidget * hbox; if (((tint *)data) -> b != MSD) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Automatic x axis shift for bar diagram (to improve visibility)"), -1, -1, this_curve -> bshift, G_CALLBACK(set_bshift), data), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Layers organization: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); GtkWidget * shbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, shbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shbox, hbox, FALSE, FALSE, 75); cedit -> datascroll = create_scroll (hbox, 350, 200, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, cedit -> datascroll, create_org_list(data)); widget_set_sensitive (cedit -> orgtree, this_curve -> extrac -> extras); #ifndef GTK4 gchar * str = _("\tMove up/down to adjust layer position (up to front, down to back)"); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); #endif return databox; } atomes_1.3.1/src/curve/cwidget.c0000664000175000017500000002053715212624223016221 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cwidget.c * @short Initialization of the curve widget * @author Sébastien Le Roux */ /* * This file: 'cwidget.c' * * Contains: * - The initialization of the curve widget * * List of functions: void curve_default_scale (project * this_proj, int rid, int cid, Curve * this_curve); void initcurve (project * pid, int rid, int cid); void init_curve_title (project * this_proj, int rid, int cid); void add_curve_widgets (project * this_proj, int rid); DataLayout * curve_default_layout (project * pid, int rid, int cid); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" /*! \fn DataLayout * curve_default_layout (project * pid, int rid, int cid) \brief prepare the default layout for a curve \param pid the project id \param rid the analysis id \param cid the curve id */ DataLayout * curve_default_layout (project * pid, int rid, int cid) { DataLayout * layout = g_malloc0(sizeof*layout); layout -> datacolor.red = RED; layout -> datacolor.green = GREEN; layout -> datacolor.blue = BLUE; layout -> datacolor.alpha = 1.0; layout -> thickness = DTHICK; layout -> hwidth = (rid == SPH) ? 1.0 : pid -> analysis[rid] -> delta; layout -> hopac = 0.25; layout -> hpos = 1; layout -> dash = 1; layout -> gfreq = 1; if (rid < RIN) { layout -> aspect = 0; layout -> glyph = 0; layout -> gsize = 10; } else if (rid == RIN) { if ( cid%4 == 0 || cid%4 == 1 ) { layout -> aspect = 1; layout -> glyph = 0; layout -> gsize = 10; } else { layout -> aspect = 0; layout -> glyph = 13; layout -> gsize = 5.0; } } else if (rid < MSD) { layout -> aspect = 1; layout -> glyph = 0; layout -> gsize = 10; } else { layout -> aspect = 0; layout -> glyph = 0; layout -> gsize = 10; } return layout; } /*! \fn void curve_default_scale (project * this_proj, int rid, int cid, Curve * this_curve) \brief pick appropriate scale based on the type of analysis \param this_proj the target project \param rid analysis id \param cid curve id \param this_curve the target curve */ void curve_default_scale (project * this_proj, int rid, int cid, Curve * this_curve) { if (rid < RIN || rid == MSD || rid == SKT) { this_curve -> cmin[0] = this_proj -> analysis[rid] -> min; this_curve -> cmax[0] = this_proj -> analysis[rid] -> max; } else { this_curve -> cmin[0] = 1.0; this_curve -> cmax[0] = this_curve -> ndata; } if (rid != MSD) { this_curve -> scale[0] = 0; this_curve -> scale[1] = 0; } else { if (cid < active_project -> analysis[MSD] -> numc - 6 ) { this_curve -> scale[0] = 1; this_curve -> scale[1] = 1; } else { this_curve -> scale[0] = 0; this_curve -> scale[1] = 0; } } } /*! \fn void initcurve (project * pid, int rid, int cid) \brief initialize curve widget \param pid the target project \param rid the analysis id \param cid the curve id */ void initcurve (project * pid, int rid, int cid) { int k; Curve * this_curve = pid -> analysis[rid] -> curves[cid]; this_curve -> window = NULL; this_curve -> plot = NULL; this_curve -> wsize[0] = 800; this_curve -> wsize[1] = 600; this_curve -> show_title = FALSE; this_curve -> default_title = TRUE; this_curve -> title_font = g_strdup_printf ("Sans Bold 12"); this_curve -> title_pos[0] = 0.4; this_curve -> title_pos[1] = 0.05; this_curve -> title_color.red = 0.0; this_curve -> title_color.blue = 0.0; this_curve -> title_color.green = 0.0; this_curve -> title_color.alpha = 1.0; this_curve -> format = 0; for (k=0 ; k<2; k++) { if (this_curve -> data[k] != NULL) { g_free (this_curve -> data[k]); this_curve -> data[k] = NULL; } this_curve -> autoscale[k] = TRUE; this_curve -> show_grid[k] = FALSE; this_curve -> show_axis[k] = TRUE; this_curve -> labels_digit[k] = 1; this_curve -> ticks_io[k] = 0; this_curve -> labels_angle[k] = 0.0; this_curve -> labels_font[k] = g_strdup_printf ("Sans 12"); this_curve -> mint_size[k] = 5; this_curve -> majt_size[k] = 10; this_curve -> axis_defaut_title[k] = TRUE; this_curve -> axis_title_font[k] = g_strdup_printf ("Sans 12"); } if (this_curve -> err != NULL) { g_free (this_curve -> err); this_curve -> err = NULL; } this_curve -> labels_shift_x[0] = 10; this_curve -> labels_shift_y[0] = 20; this_curve -> labels_shift_x[1] = 50; this_curve -> labels_shift_y[1] = 10; this_curve -> axis_title_x[0] = -20; this_curve -> axis_title_y[0] = 45; this_curve -> axis_title_x[1] = MARGX - 10; this_curve -> axis_title_y[1] = -50; this_curve -> frame_type = 2; this_curve -> frame_dash = 1; this_curve -> frame_thickness = 1.0; this_curve -> frame_color.red = 0.0; this_curve -> frame_color.green = 0.0; this_curve -> frame_color.blue = 0.0; this_curve -> frame_color.alpha = 1.0; this_curve -> frame_pos[0][0] = 100.0/840.0; this_curve -> frame_pos[0][1] = 1.0; this_curve -> frame_pos[1][0] = 530.0/600.0; this_curve -> frame_pos[1][1] = 0.0; this_curve -> legend_font = g_strdup_printf ("Sans 10"); this_curve -> show_legend = FALSE; this_curve -> show_frame = TRUE; this_curve -> legend_color.red = 0.0; this_curve -> legend_color.blue = 0.0; this_curve -> legend_color.green = 0.0; this_curve -> legend_color.alpha = 1.0; this_curve -> legend_pos[0] = LEGX; this_curve -> legend_pos[1] = LEGY; this_curve -> show_legend_box = FALSE; this_curve -> legend_box_dash = 1; this_curve -> legend_box_color.red = 0.0; this_curve -> legend_box_color.green = 0.0; this_curve -> legend_box_color.blue = 0.0; this_curve -> legend_box_color.alpha = 1.0; this_curve -> legend_box_thickness = 1.0; this_curve -> backcolor.red = 1.0; this_curve -> backcolor.green = 1.0; this_curve -> backcolor.blue = 1.0; this_curve -> backcolor.alpha = 1.0; this_curve -> layout = curve_default_layout (pid, rid, cid); this_curve -> extrac = NULL; this_curve -> extrac = g_malloc0(sizeof*this_curve -> extrac); this_curve -> extrac -> extras = 0; if (this_curve -> cfile != NULL) { g_free (this_curve -> cfile); } curve_default_scale (pid, rid, cid, this_curve); } /*! \fn void init_curve_title (project * this_proj, int rid, int cid) \brief init curve title and axis titles \param this_proj the target project \param rid the analysis id \param cid the curve id */ void init_curve_title (project * this_proj, int rid, int cid) { if (this_proj -> analysis[rid] -> curves[cid] -> default_title) { this_proj -> analysis[rid] -> curves[cid] -> title = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> analysis[rid] -> curves[cid] -> name); } int i; for (i=0; i<2; i++) { if (this_proj -> analysis[rid] -> curves[cid] -> axis_defaut_title[i]) { this_proj -> analysis[rid] -> curves[cid] -> axis_title[i] = g_strdup_printf ("%s", default_title(i, & this_proj -> analysis[rid] -> idcc[cid])); } } } /*! \fn void add_curve_widgets (project * this_proj, int rid) \brief add curve widgets to the project \param this_proj the target project \param rid the analysis id */ void add_curve_widgets (project * this_proj, int rid) { int i; for (i=0; i analysis[rid] -> numc; i++) { this_proj -> analysis[rid] -> curves[i] -> cid = i; if (this_proj -> analysis[rid] -> curves[i] -> ndata == 0) { initcurve (this_proj, rid, i); } if (this_proj -> analysis[rid] -> curves[i] -> name) { init_curve_title (this_proj, rid, i); } } } atomes_1.3.1/src/curve/datab.h0000664000175000017500000000206015212624223015642 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file datab.h * @short Variable declarations for the curve data edition window * @author Sébastien Le Roux */ /* * This header file: 'datab.h' * * Contains: - Variable declarations for the curve data edition window */ #ifndef DATAB_H_ #define DATAB_H_ extern void edit_data (gpointer data); #endif atomes_1.3.1/src/curve/xaxis.c0000664000175000017500000002123415212624223015722 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file xaxis.c * @short Functions to draw the x axis * @author Sébastien Le Roux */ /* * This file: 'xaxis.c' * * Contains: * - The functions to draw the x axis * * List of functions: void setup_xaxis_linear (cairo_t * cr, Curve * this_curve); void setup_xaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /*! \fn void setup_xaxis_linear (cairo_t * cr, Curve * this_curve) \brief setup x axis using a linear scale \param cr the cairo drawing context \param this_curve the target curve */ void setup_xaxis_linear (cairo_t * cr, Curve * this_curve) { int k; double u, v; k = cxy[0] / mticks; v = cxy[0] - k * mticks; if (k * mticks < cxy[0]) v = mticks - v; v = fabs(v); for ( u = 0.0 ; u < xmax; u = u + mticks ) { if (x_min + (u + v) * XDRAW / xmax <= x_max) { switch (labpos) { case 0: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_min + y_shift; label_curve (cr, cxy[0] + u + v, 0, 0, this_curve); break; case 1: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_max - y_shift; label_curve (cr, cxy[0] + u + v, 0, 1, this_curve); break; case 2: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_min + y_shift; label_curve (cr, cxy[0] + u + v, 0, 0, this_curve); ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_max - y_shift; label_curve (cr, cxy[0] + u + v, 0, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amajt); break; case 1: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amajt); break; case 2: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amajt); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amajt); break; } } } cairo_stroke (cr); for (u = v ; u > mticks / nticks ; u -= mticks / nticks); v = u; for ( u = 0.0 ; u < xmax ; u = u + mticks / nticks ) { if (x_min + (u + v) * XDRAW / xmax <= x_max) { if (dogrid) { cairo_stroke(cr); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_line_width (cr, GRIDSIZE); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v)* XDRAW / xmax, y_max); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } if (fmod(u+v, mticks) != 0.0) { switch (tickpos) { case 0: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amint); break; case 1: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amint); break; case 2: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amint); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amint); break; } } } cairo_stroke(cr); } } /*! \fn void setup_xaxis_log (cairo_t * cr, Curve * this_curve, int rid, int cid, gboolean draw_it) \brief setup x axis using a log scale \param cr the cairo drawing context \param this_curve the target curve \param rid the analysis id \param cid the curve id \param draw_it 1/0 draw or not */ void setup_xaxis_log (cairo_t * cr, Curve * this_curve, int rid, int cid, gboolean draw_it) { int i, k, l; gboolean istrue; double v; istrue = TRUE; xlog = 1; if (cxy[0] != 0.0) { k = (xmax+cxy[0])/cxy[0]; } while (istrue) { k = k/10; if (k > 0) { xlog ++; } else { istrue = FALSE; } } istrue = TRUE; dxlog = 0; i = 100; while (istrue) { if (cxy[0] >= pow(10, i)) { istrue = FALSE; dxlog --; } else { dxlog ++; i=i-1; } } dxlog = dxlog - 100; if (draw_it) { for ( l = 0 ; l < xlog ; l = l + 1 ) { v = pow (10, l-dxlog); if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (labpos) { case 0: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_min + y_shift; label_curve (cr, v, 0, 0, this_curve); break; case 1: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_max - y_shift; label_curve (cr, v, 0, 1, this_curve); break; case 2: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_min + y_shift; label_curve (cr, v, 0, 0, this_curve); ax = x_min - x_shift + l * XDRAW / xlog; ay = y_max - y_shift; label_curve (cr, v, 0, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_min + amajt); break; case 1: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max - amajt); break; case 2: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_min + amajt); cairo_move_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max - amajt); break; } for ( k = 2 ; k < 10 ; k = k + 1 ) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (tickpos) { case 0: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min + amint); break; case 1: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max - amint); break; case 2: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min + amint); cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max - amint); break; } } } cairo_stroke (cr); } } atomes_1.3.1/src/curve/title.c0000664000175000017500000000613015212624223015705 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file title.c * @short Functions to draw the title * @author Sébastien Le Roux */ /* * This file: 'title.c' * * Contains: * - The functions to draw the curve title * * List of functions: const gchar * default_title (int ax, gpointer data); void show_title (cairo_t * cr, Curve * this_curve); */ #include #include #include #include "global.h" #include "curve.h" /*! \fn const gchar * default_title (int ax, gpointer data) \brief default title string \param ax axis \param data the associated data pointer */ const gchar * default_title (int ax, gpointer data) { tint * pcc = (tint *)data; project * this_proj = get_project_by_id (pcc -> a); gchar * freq_unit[5]={" THz", " THz", " MHz", " KHz", " Hz"}; if (ax == 0) { int rid = pcc -> b; int cid = pcc -> c; if (rid == MSD) { if (this_proj -> tunit > -1) { return g_strdup_printf ("t [%s]", untime[this_proj -> tunit]); } else { return NULL; } } else if (rid == SKT) { if (cid < this_proj -> skt_sets) { return g_strdup_printf ("q [Å-1]"); } else { return g_strdup_printf ("ω %s", freq_unit[this_proj -> tunit]); } } else { return this_proj -> analysis[rid] -> x_title; } } else { return get_curve_from_pointer (data) -> name; } } /*! \fn void show_title (cairo_t * cr, Curve * this_curve) \brief draw title \param cr the cairo drawing context to use for the draw \param this_curve the target curve */ void show_title (cairo_t * cr, Curve * this_curve) { double x, y; x = this_curve -> title_pos[0] * resol[0]; y = this_curve -> title_pos[1] * resol[1]; cairo_set_source_rgba (cr, this_curve -> title_color.red, this_curve -> title_color.green, this_curve -> title_color.blue, this_curve -> title_color.alpha); pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> title_font)); pango_layout_set_markup (layout, this_curve -> title, -1); // pango_layout_set_text (layout, this_curve -> title, -1); cairo_move_to (cr, x, y); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); } atomes_1.3.1/src/curve/tab-3.c0000664000175000017500000003452215212624223015500 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-3.c * @short 3rd tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-3.c' * * Contains: * - The 3rd tab of the curve layout edition dialog * * List of functions: void set_legend_box_style (gpointer data); G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data); G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data); G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data); G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data); G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_legend_pos (GtkEntry * p, gpointer data); G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data); GtkWidget * create_tab_3 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) \brief draw legend preview \param da the dash type \param ti the thickness \param dcol the legend color \param bcol the background color */ cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) { cairo_surface_t * cst; cairo_t * tcst; curve_dash * tdash; cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 80, 80); tcst = cairo_create (cst); tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_set_source_rgb (tcst, dcol.red, dcol.green, dcol.blue); cairo_set_line_width (tcst, ti); cairo_move_to (tcst, 10, 10); cairo_line_to (tcst, 70, 10); cairo_line_to (tcst, 70, 70); cairo_line_to (tcst, 10, 70); cairo_line_to (tcst, 10, 10); cairo_stroke (tcst); g_free (tdash); cairo_destroy (tcst); return cst; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) \brief show / hide legend toggle callback GTK4 \param leg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) \brief show / hide legend toggle callback GTK3 \param leg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> show_legend = button_get_status ((GtkWidget *)leg); widget_set_sensitive (this_curve -> curve_edit -> legend_box, this_curve -> show_legend); if (! this_curve -> show_legend) { widget_set_sensitive (this_curve -> curve_edit -> legend_box_style, 0); } else { widget_set_sensitive (this_curve -> curve_edit -> legend_box_style, this_curve -> show_legend_box); } update_curve (data); } /*! \fn void set_legend_box_style (gpointer data) \brief update legend style widgets \param data the associated data pointer */ void set_legend_box_style (gpointer data) { cairo_surface_t * pix; Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; pix = draw_legend_surface (this_curve -> legend_box_dash, this_curve -> legend_box_thickness, this_curve -> legend_box_color, this_curve -> backcolor); cedit -> legend_style_area = destroy_this_widget (cedit -> legend_style_area); cedit -> legend_style_area = create_image_from_data (IMG_SURFACE, (gpointer)pix); cairo_surface_destroy (pix); widget_set_sensitive (cedit -> legend_style_area, this_curve -> show_legend_box); show_the_widgets (cedit -> legend_style_area); #ifdef GTK4 gtk_widget_set_hexpand (cedit -> legend_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, cedit -> legend_style_area, TRUE, TRUE, 0); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) \brief show / hide legend box toggle callback GTK4 \param bleg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) \brief show / hide legend box toggle callback GTK3 \param bleg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) #endif { get_curve_from_pointer (data) -> show_legend_box = button_get_status ((GtkWidget *)bleg); widget_set_sensitive (get_curve_from_pointer (data) -> curve_edit -> legend_box_style, get_curve_from_pointer (data) -> show_legend_box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) \brief change legend font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); g_free (this_curve -> legend_font); this_curve -> legend_font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) \brief change legend color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> legend_color = get_button_color (colob); set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) \brief set the legend position entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) { const gchar *f; double z; qint * ad = (qint *)data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; f = entry_get_text (entry); z = string_to_double ((gpointer)f); Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); if (z >= 0.0 && z <= 1.0) { this_curve -> legend_pos[ad -> d] = z; } else { show_warning (ctext[ad -> d], this_curve -> window); } update_entry_double (entry, this_curve -> legend_pos[ad -> d]); update_curve (& cd); } /*! \fn G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) \brief change the legend box line type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) { get_curve_from_pointer (data) -> legend_box_dash = combo_get_active ((GtkWidget *)fbox) + 1; set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) \brief set legend box thickness entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) { const gchar * str; Curve * this_curve = get_curve_from_pointer (data); str = entry_get_text (entry); this_curve -> legend_box_thickness = string_to_double ((gpointer)str); update_entry_double (entry, this_curve -> legend_box_thickness); set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) \brief set legend color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> legend_box_color = get_button_color (colob); set_legend_box_style (data); } /*! \fn GtkWidget * create_tab_3 (curve_edition * cedit, gpointer data) \brief handle the creation of the 3rd tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_3 (curve_edition * cedit, gpointer data) { GtkWidget * dhbox; GtkWidget * legend_area; GtkWidget * legend_style_box; GtkWidget * legend_dash_box; GtkWidget * legend_thickness; int i; Curve * this_curve = get_curve_from_pointer (data); GtkWidget * legendbox = create_vbox (BSEP); GtkWidget * leghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legendbox, leghbox, FALSE, FALSE, 10); GtkWidget * legvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, leghbox, legvbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, legvbox, check_button (_("Show/Hide legend"), -1, -1, this_curve -> show_legend, G_CALLBACK(show_data_legend), data), FALSE, TRUE, 5); legend_area = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legvbox, legend_area, FALSE, FALSE, 10); cedit -> legend_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_area, cedit -> legend_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> legend_box, _("Font:")), font_button (this_curve -> legend_font, 150, -1, G_CALLBACK(set_legend_font), data), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> legend_box, _("Color:")), color_button (this_curve -> legend_color, TRUE, 150, 30, G_CALLBACK(set_legend_color), data), FALSE, FALSE, 0); dhbox = bbox (cedit -> legend_box, _("Position:")); GtkWidget * lxyc; for ( i=0 ; i < 2 ; i++ ) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, markup_label(lapos[i], (i==0)?10:30, -1, 1.0, 0.5), FALSE, FALSE, 5); lxyc = create_entry (G_CALLBACK(set_legend_pos), 100, 10, FALSE, (gpointer)& cedit -> dataxe[i]); update_entry_double (GTK_ENTRY(lxyc), this_curve -> legend_pos[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, lxyc, FALSE, FALSE, 5); } dhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> legend_box, dhbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, check_button (_("Show/Hide legend box"), -1, -1, this_curve -> show_legend_box, G_CALLBACK(show_data_legend_box), data), FALSE, FALSE, 40); cedit -> legend_box_style = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> legend_box, cedit -> legend_box_style, FALSE, FALSE, 0); legend_style_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, legend_style_box, FALSE, FALSE, 0); // Legend box style legend_dash_box = create_combo (); for ( i=1 ; i < ndash ; i++) { combo_text_append (legend_dash_box, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (legend_dash_box, 120, -1); combo_set_active (legend_dash_box, this_curve -> legend_box_dash - 1); g_signal_connect (G_OBJECT(legend_dash_box), "changed", G_CALLBACK(set_legend_box_line), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, _("Line style:")), legend_dash_box, FALSE, FALSE, 0); // Legend box linewidth legend_thickness = create_entry (G_CALLBACK(set_legend_box_thickness), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(legend_thickness), this_curve -> legend_box_thickness); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, _("Line width:")), legend_thickness, FALSE, FALSE, 0); // Legend box line color add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, _("Color:")), color_button (this_curve -> legend_box_color, TRUE, 120, -1, G_CALLBACK(set_legend_box_color), data), FALSE, FALSE, 0); // Legend box pix cairo_surface_t * legend_pix = draw_legend_surface (this_curve -> legend_box_dash, this_curve -> legend_box_thickness, this_curve -> legend_box_color, this_curve -> backcolor); cedit -> legend_style_area = create_image_from_data (IMG_SURFACE, (gpointer)legend_pix); cairo_surface_destroy (legend_pix); #ifdef GTK4 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, markup_label(" ", 20, -1, 0.0, 0.0), FALSE, FALSE, 0); gtk_widget_set_hexpand (cedit -> legend_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, cedit -> legend_style_area, FALSE, FALSE, 0); widget_set_sensitive (cedit -> legend_box_style, this_curve -> show_legend_box); widget_set_sensitive (cedit -> legend_box, this_curve -> show_legend); return legendbox; } atomes_1.3.1/src/curve/legend.c0000664000175000017500000001321215212624223016021 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file legend.c * @short Function to draw the legend * @author Sébastien Le Roux */ /* * This file: 'legend.c' * * Contains: * - The function to draw the legend * * List of functions: void show_legend (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" extern DataLayout * get_extra_layout (int i); /*! \fn void show_legend (cairo_t * cr, project * this_proj, int rid, int cid) \brief draw legend \param cr the cairo drawing context to use for the draw \param this_proj the target project \param rid the calculation id \param cid the curve id */ void show_legend (cairo_t * cr, project * this_proj, int rid, int cid) { double x, y, z; double ih, fh; double tw, th; int w, h; int j, k, l, m; gchar * str; curve_dash * dasht; Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; x = this_curve -> legend_pos[0] * resol[0]; y = this_curve -> legend_pos[1] * resol[1]; pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> legend_font)); CurveExtra * ctmp; ctmp = this_curve -> extrac -> first; for ( j=this_curve -> extrac -> extras ; j >= 0 ; j-- ) { y = y + 4.0*z/3.0; if (this_curve -> draw_id == j) { if (this_curve -> layout -> dash > 0) { dasht = selectdash (this_curve -> layout -> dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, this_curve -> layout -> datacolor.red, this_curve -> layout -> datacolor.green, this_curve -> layout -> datacolor.blue, this_curve -> layout -> datacolor.alpha); cairo_set_line_width (cr, this_curve -> layout -> thickness); cairo_move_to (cr, x-5, y); cairo_line_to (cr, x+20, y); cairo_stroke(cr); g_free (dasht); } z = x-5; draw_glyph (cr, this_curve -> layout -> glyph, z, y, this_curve -> layout -> datacolor, this_curve -> layout -> gsize); z = x+20; draw_glyph (cr, this_curve -> layout -> glyph, z, y, this_curve -> layout -> datacolor, this_curve -> layout -> gsize); cairo_set_source_rgba (cr, this_curve -> legend_color.red, this_curve -> legend_color.green, this_curve -> legend_color.blue, this_curve -> legend_color.alpha); str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_curve -> name); } else { DataLayout * lay = ctmp -> layout; if (lay -> dash > 0) { dasht = selectdash (lay -> dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, lay -> datacolor.red, lay -> datacolor.green, lay -> datacolor.blue, lay -> datacolor.alpha); cairo_set_line_width (cr, lay -> thickness); cairo_move_to (cr, x-5, y); cairo_line_to (cr, x+20, y); cairo_stroke(cr); g_free (dasht); } z = x-5; draw_glyph (cr, lay -> glyph, z, y, lay -> datacolor, lay -> gsize); z = x+20; draw_glyph (cr, lay -> glyph, z, y, lay -> datacolor, lay -> gsize); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); k = ctmp -> id.a; l = ctmp -> id.b; m = ctmp -> id.c; str = g_strdup_printf ("%s - %s", get_project_by_id(k) -> name, get_project_by_id(k) -> analysis[l] -> curves[m] -> name); if (ctmp -> next != NULL) ctmp = ctmp -> next; } pango_layout_set_markup (layout, str, -1); pango_layout_get_size (layout, & w, & h); z = (double) h / PANGO_SCALE; if (j == 0) ih = z; fh = z; tw = max(tw, (double) w / PANGO_SCALE); cairo_move_to (cr, x + 35.0, y - z/2); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); g_free (str); } if (this_curve -> show_legend_box) { dasht = selectdash (this_curve -> legend_box_dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, this_curve -> legend_box_color.red, this_curve -> legend_box_color.green, this_curve -> legend_box_color.blue, this_curve -> legend_box_color.alpha); cairo_set_line_width (cr, this_curve -> legend_box_thickness); x = this_curve -> legend_pos[0] * resol[0] - 25; th = ih + fh + (y - this_curve -> legend_pos[1] * resol[1]); y = this_curve -> legend_pos[1] * resol[1] - ih; tw = tw + 80; cairo_rectangle (cr, x, y, tw, th); cairo_stroke(cr); g_free (dasht); } } atomes_1.3.1/src/curve/draw.c0000664000175000017500000002232215212624223015522 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file draw.c * @short Function to draw a curve * @author Sébastien Le Roux */ /* * This file: 'draw.c' * * Contains: * - The function to draw a curve * */ #include #include #include #include #include #include "global.h" #include "curve.h" /*! \fn void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid) \brief draw target curve to the cairo drawing context \param cr the cairo drawing context to use for the draw \param cid the target curve id \param rid the target calculation id \param this_proj the target project \param points the number of data point(s) \param withcolor the data color \param xscale x axis scale type (0 = linear, 1 = log) \param yscale y axis scale type (0 = linear, 1 = log) \param asp data aspect (0 = x/y normal, 1 = historgram) \param vdash dash type \param thick line tthickness \param glyp glyph type \param gize glyph size \param freq glyph frequency \param hwidth histogram bar width \param hopac histogram bar opacity value \param hpos histogram opacity treatment (0 = no opacity, 1 = use opacity) \param extra the number of extra data sets \param pid 0 (x/y plot) or plot id number (historgram) */ void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid) { int i, j, k; double x, y; double x1, x2, y1, y2; double dx1, dx2, dy1, dy2; double slope, bval; double ** plotdata; gboolean plot; gboolean dglyp; curve_dash * dasht; Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; plotdata = allocddouble (points, 2); for ( i=0 ; i < points; i++ ) { if (xscale == 0) { plotdata[i][0] = x_min + XDRAW * (this_curve -> data[0][i] - cxy[0]) / xmax; } else { x = (i+1) * this_proj -> analysis[rid] -> num_delta * this_proj -> analysis[rid] -> delta * pow(10, dxlog); x = log(x) / log(pow(10, xlog)); plotdata[i][0] = x_min + XDRAW * x; } if (yscale == 0) { plotdata[i][1] = y_min + YDRAW * (this_curve -> data[1][i] - cxy[1]) / ymax; } else { y = this_curve -> data[1][i] * pow(10, dylog); y = log(y) / log(pow(10, ylog)); plotdata[i][1] = y_min + YDRAW * y; } #ifdef DEBUG // g_debug ("CURVE: DRAWCURVE: x= %f, y= %f", plotdata[i][0], plotdata[i][1]); #endif } if (vdash > 0) { dasht = selectdash (vdash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_line_width (cr, thick); g_free (dasht); } else { cairo_set_line_width (cr, 0.0); } cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, 1.0); if (asp == 0) { j = 0; k = 1; if (rid == RIN) j = 2; for ( i = j ; i < points - k ; i ++) { plot = TRUE; dglyp = FALSE; slope = (plotdata[i+k][1] - plotdata[i][1])/ (plotdata[i+k][0] - plotdata[i][0]); bval = plotdata[i][1] - slope*plotdata[i][0]; dy1 = slope*x_min + bval; dy2 = slope*x_max + bval; if (slope < 0) { dx1 = (y_min - bval) / slope; dx2 = (y_max - bval) / slope; } else { dx1 = (y_max - bval) / slope; dx2 = (y_min - bval) / slope; } if (plotdata[i][0] < x_min && plotdata[i+k][0] < x_min) { plot = FALSE; } else if (plotdata[i][0] > x_max && plotdata[i+k][0] > x_max) { plot = FALSE; } if (plotdata[i][1] < y_max && plotdata[i+k][1] < y_max) { plot = FALSE; } else if (plotdata[i][1] > y_min && plotdata[i+k][1] > y_min) { plot = FALSE; } if (plot) { if (plotdata[i][0] >= x_min && plotdata[i][0] <= x_max) { if(plotdata[i][1] >= y_max && plotdata[i][1] <= y_min) { x1 = plotdata[i][0]; y1 = plotdata[i][1]; dglyp = TRUE; } else { x1 = dx1; y1 = (slope < 0) ? y_min : y_max; } } else { x1 = x_min; y1 = dy1; } if (plotdata[i+k][0] >= x_min && plotdata[i+k][0] <= x_max) { if (plotdata[i+k][1] >= y_max && plotdata[i+k][1] <= y_min) { x2 = plotdata[i+k][0]; y2 = plotdata[i+k][1]; } else { x2 = dx2; y2 = (slope < 0) ? y_max : y_min; } } else { x2 = x_max; y2 = dy2; } cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); if (i % freq == 0 && dglyp) draw_glyph (cr, glyp, x1, y1, withcolor, gize); if (i == points - 2 && (i+k) % freq == 0 && dglyp) { draw_glyph (cr, glyp, x2, y2, withcolor, gize); } } } } else if (asp == 1) { j = 0; k = 1; if (rid == RIN) j = 2; // g_debug ("x_min= %f, x_max= %f, y_min= %f, y_max= %f", x_min, x_max, y_min, y_max); for ( i = j ; i < points ; i ++) { if (this_curve -> data[1][i] != 0.0) { if (plotdata[i][0] >= x_min && plotdata[i][0] <= x_max) { if (plotdata[i][1] <= y_min || (cxy[1] <= 0.0 && plotdata[i][1] > y_min)) { x1 = plotdata[i][0] - hwidth * 0.5 * XDRAW / xmax; if (pid) x1 -= hwidth * 0.5 * ((float)pid / (float)extra) * XDRAW / xmax; x2 = hwidth * XDRAW / xmax; if (x1 < x_min) { x2 -= (x_min - x1); x1 = x_min; } if (x1+x2 > x_max) { x2 = x_max - x1; } y1 = plotdata[i][1]; if (plotdata[i][1] > y_min) { y1 = y_min; } else if (plotdata[i][1] < y_max) { y1 = y_max; } y2 = y_min - y1; if (cxy[1] <= 0.0) { y2 = y2 - cxy[1] * YDRAW / ymax; } if (hpos) { cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0); cairo_rectangle (cr, x1, y1, x2, y2); cairo_fill(cr); } cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, hopac); cairo_rectangle (cr, x1, y1, x2, y2); cairo_fill(cr); cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, 1.0); y2 = y_min; if (cxy[1] <= 0.0) { y2 = y2 - cxy[1] * YDRAW / ymax; } cairo_move_to (cr, x1, y2); cairo_line_to (cr, x1, y1); cairo_move_to (cr, x1, y1); x2 = plotdata[i][0] + hwidth * 0.5 * XDRAW / xmax; if (pid) x2 -= hwidth * 0.5 * ((float)pid / (float)extra) * XDRAW / xmax; if (x2 > x_max) { x2 = x_max; cairo_line_to(cr, x2, y1); cairo_move_to(cr, x2, y1); } else { cairo_line_to(cr, x2, y1); cairo_move_to(cr, x2, y1); cairo_line_to(cr, x2, y2); } cairo_stroke(cr); } } } } } cairo_stroke(cr); g_free (plotdata); } atomes_1.3.1/src/curve/yaxis.c0000664000175000017500000002547015212624223015731 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file yaxis.c * @short Functions to draw the y axis * @author Sébastien Le Roux */ /* * This file: 'yaxis.c' * * Contains: * - The functions to draw the y axis * * List of functions: void autoscale_axis (project * this_proj, int rid, int cid, int aid); void setup_yaxis_linear (cairo_t * cr, Curve * this_curve); void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /*! \fn void autoscale_axis (project * this_proj, Curve * this_curve, int rid, int cid, int aid) \brief autoscale axis \param this_proj the target project \param this_curve the target curve \param rid the analysis id \param cid the curve id \param aid the axis id */ void autoscale_axis (project * this_proj, Curve * this_curve, int rid, int cid, int aid) { int i, j, k, l, m, n; if (! aid && (rid == RIN ||rid == CHA)) { i = cid / ((this_proj -> nspec+1) * 4); this_curve -> axmax[aid] = (rid == RIN) ? this_proj -> rsparam[i][1]: this_proj -> csparam[5]; this_curve -> axmax[aid] += 1.0; this_curve -> axmin[aid] = (rid == RIN) ? 2 : 1; } else { n = (rid == SPH && aid == 1) ? 1 : 0; this_curve -> axmax[aid] = this_curve -> data[aid][n]; this_curve -> axmin[aid] = this_curve -> data[aid][n]; for ( i=n ; i < this_curve -> ndata ; i++ ) { this_curve -> axmax[aid] = max(this_curve -> axmax[aid], this_curve -> data[aid][i]); this_curve -> axmin[aid] = min(this_curve -> axmin[aid], this_curve -> data[aid][i]); } if (this_curve -> extrac) { CurveExtra * ctmp = this_curve -> extrac -> first; project * that_proj; for ( j=0 ; j < this_curve -> extrac -> extras ; j++ ) { m = ctmp -> id.a; k = ctmp -> id.b; l = ctmp -> id.c; that_proj = get_project_by_id(m); for ( i=n ; i < that_proj -> analysis[k] -> curves[l] -> ndata ; i++ ) { this_curve -> axmax[aid] = max(this_curve -> axmax[aid], that_proj -> analysis[k] -> curves[l] -> data[aid][i]); this_curve -> axmin[aid] = min(this_curve -> axmin[aid], that_proj -> analysis[k] -> curves[l] -> data[aid][i]); } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } if (aid == 1) { this_curve -> cmin[aid] = this_curve -> axmin[aid]; this_curve -> cmax[aid] = this_curve -> axmax[aid]; this_curve -> axmin[aid] = this_curve -> cmin[aid] - fabs(this_curve -> cmin[aid]) / 10.0; this_curve -> axmax[aid] = this_curve -> cmax[aid] + fabs(this_curve -> cmax[aid]) / 10.0; // Adjust autoscale information if required if (rid > GDK && rid < MSD) { this_curve -> axmin[aid] = 0.0; } } } /*! \fn void setup_yaxis_linear (cairo_t * cr, Curve * this_curve) \brief setup y axis using a linear scale \param cr the cairo drawing context \param this_curve the target curve */ void setup_yaxis_linear (cairo_t * cr, Curve * this_curve) { int k; double u, v; k = cxy[1] / mticks; v = cxy[1] - k * mticks; if (k * mticks < cxy[1]) v = mticks - v; v = fabs(v); if (k * mticks > fabs(cxy[1])) v = mticks - v; for ( u = 0.0 ; u < ymax ; u = u + mticks ) { if (y_min + (u + v) * YDRAW / ymax >= y_max) { switch (labpos) { case 0: ax = x_min - x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 0, this_curve); break; case 1: ax = x_max + x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 1, this_curve); break; case 2: ax = x_min - x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 0, this_curve); ax = x_max + x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amajt, y_min + (u + v) * YDRAW / ymax); break; case 1: cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amajt, y_min + (u + v) * YDRAW / ymax); break; case 2: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amajt, y_min + (u + v) * YDRAW / ymax); cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amajt, y_min + (u + v) * YDRAW / ymax); break; } } } cairo_stroke (cr); for (u = v ; u > mticks / nticks ; u -= mticks / nticks); v = u; for (u = 0.0 ; u < ymax ; u = u + mticks / nticks) { if (y_min + (u + v) * YDRAW / ymax >= y_max) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } if (fmod(u+v, mticks) != 0.0) { switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amint, y_min + (u + v) * YDRAW / ymax); break; case 1: cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amint, y_min + (u + v) * YDRAW / ymax); break; case 2: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amint, y_min + (u + v) * YDRAW / ymax); cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amint, y_min + (u + v) * YDRAW / ymax); break; } } } cairo_stroke (cr); } } /*! \fn void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it) \brief setup y axis using a log scale \param cr the cairo drawing context \param this_curve the target curve \param draw_it 1/0 draw or not */ void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it) { int i, k, l; gboolean istrue; double v; istrue = TRUE; ylog = 1; if (cxy[1] != 0.0) { k = (ymax+cxy[1])/cxy[1]; } while (istrue) { k = k/10; if (k > 0) { ylog ++; } else { ylog ++; istrue = FALSE; } } istrue = TRUE; dylog = 0; i = 100; while (istrue) { if (cxy[1] >= pow(10, i)) { istrue = FALSE; } else { dylog ++; i=i-1; } } dylog = dylog - 100; if (draw_it) { for ( l = 0 ; l < ylog ; l ++ ) { v = pow (10, l-dylog); if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (labpos) { case 0: ax = x_min - x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 0, this_curve); break; case 1: ax = x_max + x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 1, this_curve); break; case 2: ax = x_min - x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 0, this_curve); ax = x_max + x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_min - amajt, y_min + YDRAW * l / ylog); break; case 1: cairo_move_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max - amajt, y_min + YDRAW * l / ylog); break; case 2: cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_min - amajt, y_min + YDRAW * l / ylog); cairo_move_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max - amajt, y_min + YDRAW * l / ylog); break; } for ( k = 2 ; k < 10 ; k ++ ) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_min - amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; case 1: cairo_move_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max + amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; case 2: cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_min - amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); cairo_move_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max + amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; } } } cairo_stroke (cr); } } atomes_1.3.1/src/curve/frame.c0000664000175000017500000001377615212624223015674 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file frame.c * @short Functions to draw the frame * @author Sébastien Le Roux */ /* * This file: 'frame.c' * * Contains: * - The functions to draw the frame * * List of functions: void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); void prep_axis_data (project * this_proj, int rid, int cid, int ax); void draw_frame (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" /*! \fn void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) \brief draw frame line \param fr the cairo drawing context to use for the draw \param da dash type \param ti line width \param dcol color */ void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) { curve_dash * tdash; tdash = selectdash (da); cairo_set_dash (fr, tdash -> a, tdash -> b, 0.0); cairo_set_source_rgba (fr, dcol.red, dcol.green, dcol.blue, dcol.alpha); cairo_set_line_width (fr, ti); g_free (tdash); } /*! \fn void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) \brief draw frame \param cd the cairo drawing context to use for the draw \param tf frame type \param da dash type \param res image size \param ti line width \param x x positions (right, left) \param y y positions (top, bottom) \param dcol color */ void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) { double x1, x2; double y1, y2; prep_frame (cd, da, ti, dcol); x1 = x[0] * res[0]; x2 = x[1] * res[0]; y1 = y[0] * res[1]; y2 = y[1] * res[1]; switch (tf) { case 0: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x2, y2); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x1, y2); break; case 1: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x2, y2); break; case 2: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x2, y1); break; case 3: cairo_move_to (cd, x2, y2); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x1, y1); break; case 4: cairo_move_to (cd, x1, y1); cairo_line_to (cd, x2, y1); break; } cairo_stroke (cd); } /*! \fn void prep_axis_data (Curve * this_curve, int ax) \brief prepare axis data \param this_curve the target Curve \param ax the axis */ void prep_axis_data (Curve * this_curve, int ax) { dogrid = this_curve -> show_grid[ax]; x_shift = this_curve -> labels_shift_x[ax]; y_shift = this_curve -> labels_shift_y[ax]; mticks = this_curve -> majt[ax]; nticks = this_curve -> mint[ax]; if (this_curve -> ticks_io[ax] == 1) { amint = this_curve -> mint_size[ax]; amajt = this_curve -> majt_size[ax]; } else { amint = - this_curve -> mint_size[ax]; amajt = - this_curve -> majt_size[ax]; } tickpos = this_curve -> ticks_pos[ax]; labpos = this_curve -> labels_pos[ax]; } /*! \fn void draw_frame (cairo_t * cr, Curve * this_curve, int rid, int cid) \brief draw frame and axis data \param cr the cairo drawing context to use for the draw \param this_curve the target curve \param rid the calculation id \param cid the curve id */ void draw_frame (cairo_t * cr, Curve * this_curve, int rid, int cid) { show_frame (cr, this_curve -> frame_type, this_curve -> frame_dash, resol, this_curve -> frame_thickness, this_curve -> frame_pos[0], this_curve -> frame_pos[1], this_curve -> frame_color); // X axis // Draw X axis ticks and labels pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> labels_font[0])); prep_axis_data (this_curve, 0); if (this_curve -> scale[0] == 0) { setup_xaxis_linear (cr, this_curve); } else { setup_xaxis_log (cr, this_curve, rid, cid, TRUE); } // Draw X axis title cairo_move_to (cr, x_min + XDRAW / 2.0 + this_curve -> axis_title_x[0], y_min + this_curve -> axis_title_y[0]); pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> axis_title_font[0])); pango_layout_set_markup (layout, this_curve -> axis_title[0], -1); // pango_layout_set_text (layout, this_curve -> axis_title[0], -1); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke(cr); // Y axis // Draw Y axis ticks and labels pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> labels_font[1])); prep_axis_data (this_curve, 1); if (this_curve -> scale[1] == 0) { setup_yaxis_linear (cr, this_curve); } else { setup_yaxis_log (cr, this_curve, TRUE); } cairo_move_to (cr, x_min - this_curve -> axis_title_x[1], y_min + YDRAW/2 - this_curve -> axis_title_y[1]); pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> axis_title_font[1])); pango_layout_set_markup (layout, this_curve -> axis_title[1], -1); cairo_rotate (cr, -pi/2.0); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); cairo_rotate (cr, pi/2.0); pango_cairo_update_layout (cr, layout); } atomes_1.3.1/src/curve/m_curve.c0000664000175000017500000006142715212624223016236 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_curve.c * @short Curve context menu (mouse right click) * @author Sébastien Le Roux */ /* * This file: 'm_curve.c' * * Contains: * - The curve context menu (mouse right click) * * List of functions: gboolean was_not_added (ExtraSets * sets, int a, int b, int c); void autoscale (gpointer data); void action_to_plot (pointer data); void add_extra (ExtraSets * sets, tint * id); void remove_extra (ExtraSets * sets, CurveExtra * ctmp); void prep_extra_rid (tint * data); void curve_window_add_menu_bar (tint * data); G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * curve_popup_menu (gpointer data); GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data); GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit); GMenu * create_curve_menu (gchar * str); GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data); GMenu * curve_close_section (gchar * str); GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data); GMenu * curve_menu_bar (project * this_proj, GSimpleActionGroup * action_group, gchar * str, tint * data); GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data); GMenu * autoscale_section (gchar * str); CurveExtra * init_extra (tint * id); */ #include #include #include "global.h" #include "callbacks.h" #include "curve.h" #include "cedit.h" #include "datab.h" extern DataLayout * curve_default_layout (project * pid, int rid, int cid); extern GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]); int ** extrarid; gchar * curve_section_names[]={i18n("Curve window")}; int curve_group_by_section[] = { 2 }; gchar * curve_group_names[]={i18n("Edition "), i18n("Export")}; int curve_shortcut_by_group[] = { 3, 2 }; shortcuts curve_shortcuts[] = { // // Global // { i18n("Autoscale"), i18n("Autoscale"), GDK_KEY_a, "a" }, { i18n("Edit curve"), i18n("Edit curve"), GDK_KEY_e, "e" }, { i18n("Close curve"), i18n("Close curve"), GDK_KEY_c, "c" }, { i18n("Export data"), i18n("Export data"), GDK_KEY_s, "s" }, { i18n("Save image"), i18n("Save image"), GDK_KEY_i, "i" } }; /*! \fn void autoscale (gpointer data) \brief autoscale callback \param data the associated data pointer */ void autoscale (gpointer data) { Curve * this_curve = get_curve_from_pointer (data); this_curve -> autoscale[0] = TRUE; this_curve -> autoscale[1] = TRUE; update_curve (data); } /*! \fn CurveExtra * init_extra (tint * id) \brief create extra data set \param id the associated data pointer */ CurveExtra * init_extra (tint * id) { CurveExtra * ctmp = g_malloc0(sizeof*ctmp); ctmp -> id.a = id -> a; ctmp -> id.b = id -> b; ctmp -> id.c = id -> c; ctmp -> layout = curve_default_layout (get_project_by_id(id -> a), id -> b, id -> c); ctmp -> layout -> datacolor.red = 0.0; ctmp -> layout -> datacolor.green = 0.0; ctmp -> layout -> datacolor.blue = 0.0; return ctmp; } /*! \fn void add_extra (ExtraSets * sets, tint * id) \brief add set to the extra set(s) \param sets the extra set(s) \param id the associated data pointer */ void add_extra (ExtraSets * sets, tint * id) { if (sets -> extras == 0) { sets -> first = init_extra (id); sets -> last = sets -> first; } else { sets -> last -> next = init_extra (id); sets -> last -> next -> prev = sets -> last; sets -> last = sets -> last -> next; } sets -> extras ++; } /*! \fn void remove_extra (ExtraSets * sets, CurveExtra * ctmp) \brief remove data from extra set(s) \param sets the extra set(s) \param ctmp the data set to remove from the extra set(s) */ void remove_extra (ExtraSets * sets, CurveExtra * ctmp) { if (sets -> extras == 1) { g_free (ctmp); sets -> first = NULL; sets -> last = NULL; } else { if (ctmp -> prev == NULL) { sets -> first = ctmp -> next; g_free (ctmp); sets -> first -> prev = NULL; } else if (ctmp -> next == NULL) { ctmp = ctmp -> prev; g_free (ctmp -> next); ctmp -> next = NULL; sets -> last = ctmp; } else { ctmp -> prev -> next = ctmp -> next; ctmp -> next -> prev = ctmp -> prev; g_free (ctmp); } } sets -> extras --; } void curve_window_add_menu_bar (tint * data); /*! \fn void prep_extra_rid (tint * data) \brief look up extra data set(s) for curve \param data the associated data pointer */ void prep_extra_rid (tint * data) { int i; extrarid = allocdint (nprojects, NCALCS); Curve * this_curve = get_curve_from_pointer (data); if (this_curve -> extrac) { if (this_curve -> extrac -> extras > 0) { CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0; i extrac -> extras; i++) { extrarid[ctmp -> id.a][ctmp -> id.b] ++; if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } } /*! \fn void action_to_plot (gpointer data) \brief add to plot, or, remove curve from plot \param data the associated data pointer */ void action_to_plot (gpointer data) { int i; tint * id = (tint *)data; gboolean remove = FALSE; project * this_proj = get_project_by_id (activeg); Curve * this_curve = this_proj -> analysis[activer] -> curves[activec]; if (this_curve -> extrac > 0) { CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0; i extrac -> extras; i++) { if (ctmp -> id.a == id -> a && ctmp -> id.b == id -> b && ctmp -> id.c == id -> c) { remove = TRUE; break; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } if (! remove) { add_extra (this_curve -> extrac, id); } else { remove_extra (this_curve -> extrac, ctmp); } } else { add_extra (this_curve -> extrac, id); } curve_window_add_menu_bar (& this_proj -> analysis[activer] -> idcc[activec]); update_curve ((gpointer)& this_proj -> analysis[activer] -> idcc[activec]); } /*! \fn G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu edit action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { edit_data (data); } /*! \fn G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu add / remove action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { action_to_plot (data); } /*! \fn G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "save.data") == 0) { write_curve (data); } else if (g_strcmp0 (name, "close.curve") == 0) { hide_curve (data); } else if (g_strcmp0 (name, "edit.curve") == 0) { edit_curve (data); } else if (g_strcmp0 (name, "save.image") == 0) { save_image (data); } else if (g_strcmp0 (name, "autoscale.curve") == 0) { autoscale (data); } else if (g_strcmp0 (name, "shortcuts.curve") == 0) { Curve * this_curve = get_curve_from_pointer (data); this_curve -> shortcuts = destroy_this_widget (this_curve -> shortcuts); this_curve -> shortcuts = shortcuts_window (G_N_ELEMENTS(curve_group_by_section), curve_group_by_section, G_N_ELEMENTS(curve_shortcut_by_group), curve_shortcut_by_group, curve_section_names, curve_group_names, curve_shortcuts); } } /*! \fn gboolean was_not_added (ExtraSets * sets, int a, int b, int c) \brief test if already in the menu or not \param sets the target extra sets \param a the target project \param b the target calculation \param c the target curve */ gboolean was_not_added (ExtraSets * sets, int a, int b, int c) { int i, j; CurveExtra * ctmp = sets -> first; for (i=0; i extras; i++) { if (ctmp -> id.a == a && ctmp -> id.b == b) { for (j=0; j analysis[b] -> numc; j++) { if (ctmp -> id.c == c) return FALSE; } } if (ctmp -> next != NULL) ctmp = ctmp -> next; } return TRUE; } /*! \fn GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) \brief create curve submenu \param action_group the menu action group \param act the action string \param sets the target extra sets \param add remove (0) or add (1) menu \param edit data edition (1 / 0) \param a target project \param b target calculation \param data the associated data pointer */ GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) { GMenu * menu = g_menu_new (); gchar * str_a, * str_b, * str_c; gchar * text[2] = {"curve.action", "edit.data"}; project * this_proj = get_project_by_id(a); int g, h, i; if (b == SKT) { g = (data -> c < get_project_by_id(data -> a) -> skt_sets) ? this_proj -> skt_sets : this_proj -> sqw_sets; h = (data -> c < get_project_by_id(data -> a) -> skt_sets) ? 0 : this_proj -> skt_sets; } else { g = this_proj -> analysis[b] -> numc; h = 0; } for (i=0; i analysis[b] -> curves[i+h] -> ndata > 0) { if (((a != data -> a || b != data -> b || i+h != data -> c) && add == was_not_added(sets, a, b, i+h)) || (a == data -> a && b == data -> b && i+h == data -> c && edit)) { #ifdef GTK3 str_a = g_strdup_printf ("%s", prepare_for_title(this_proj -> analysis[b] -> curves[i+h] -> name)); #else str_a = g_strdup_printf ("%s", this_proj -> analysis[b] -> curves[i+h] -> name); #endif str_b = g_strdup_printf ("%s.%d-%d-%d", text[edit], a, b, i+h); str_c = g_strdup_printf ("%s.%s", act, str_b); append_menu_item (menu, (const gchar *)str_a, (const gchar *)str_c, NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); g_free (str_a); g_free (str_c); if (edit) { widget_add_action (action_group, (const gchar *)str_b, G_CALLBACK(curve_edit_menu_action), & this_proj -> analysis[b] -> idcc[i+h], FALSE, FALSE, FALSE, NULL); } else { widget_add_action (action_group, (const gchar *)str_b, G_CALLBACK(curve_add_remove_menu_action), & this_proj -> analysis[b] -> idcc[i+h], FALSE, FALSE, FALSE, NULL); } g_free (str_b); } } } return menu; } /*! \fn GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) \brief create curve add / remove submenus \param action_group the menu action group \param act the action string \param data the associated data pointer \param add remove (0) or add (1) menu \param edit data edition (1 / 0) */ GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) { project * this_proj; GMenu * menu = g_menu_new (); int i, j, k, l; gboolean * create_proj = allocbool (nprojects); gboolean ** create_menu = allocdbool (nprojects, NCALCS); for (i=0; i analysis[data -> b]) { for (j=0; j analysis[data -> b] -> c_sets; j++) { k = this_proj -> analysis[data -> b] -> compat_id[j]; create_menu[i][k] = FALSE; if (data -> b == SKT) { l = (data -> c < get_project_by_id(data -> a) -> skt_sets) ? this_proj -> skt_sets : this_proj -> sqw_sets; } else { l = this_proj -> analysis[k] -> numc; } if (((add && extrarid[i][k] < l) || (! add && extrarid[i][k] > 0)) && this_proj -> analysis[k] -> calc_ok) { create_menu[i][k] = TRUE; create_proj[i] = TRUE; } } } } if (edit) { create_menu[data -> a][data -> b] = TRUE; create_proj[data -> a] = TRUE; } Curve * this_curve = get_curve_from_pointer (data); GMenu * smenu; for (i=0; i extrac, add, edit, i, j, data)); } // This way GTK3 will not be able to apply markup #ifdef GTK3 append_submenu (menu, prepare_for_title(get_project_by_id(i) -> name), smenu); #else append_submenu (menu, get_project_by_id(i) -> name, smenu); #endif g_object_unref (smenu); } } g_free (create_proj); g_free (create_menu); return menu; } extern GIcon * get_gicon_from_data (int format, const gchar * icon); /*! \fn GMenu * create_curve_menu (gchar * str) \brief create the curve submenu \param str the action string */ GMenu * create_curve_menu (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.edit.curve", str); append_menu_item (menu, _("Edit Curve"), (const gchar *)act, "E", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL); g_free (act); act = g_strdup_printf ("%s.save.image", str); append_menu_item (menu, _("Export Image"), (const gchar *)act, "I", NULL, IMG_FILE, PACKAGE_IMG, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) \brief create the edit data submenu \param action_group the menu action group \param str the action string \param data the associated data pointer */ GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) { GMenu * menu = g_menu_new (); GMenuItem * item = g_menu_item_new (_("Edit Data"), NULL); gchar * str_edit = g_strdup_printf ("%s-win-edit", str); g_menu_item_set_attribute (item, "custom", "s", str_edit, NULL); g_free (str_edit); #ifdef MENU_ICONS GIcon * gicon = get_gicon_from_data (IMG_STOCK, EDITA); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, str, data, FALSE, 1)); g_menu_append_item (menu, item); g_object_unref (item); return menu; } /*! \fn GMenu * curve_close_section (gchar * str) \brief create the close menu item \param str the action string */ GMenu * curve_close_section (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.close.curve", str); append_menu_item (menu, _("Close"), (const gchar *)act, "C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * curve_help_menu (gchar * str) \brief create the help menu item \param str the action string */ GMenu * curve_help_menu (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.shortcuts.curve", str); append_menu_item (menu, _("Shortcuts"), (const gchar *)act, NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) \brief create the save data submenu \param action_group the menu action group \param pop 0 = menu bar, 1 = popup menu \param str the action string \param data the associated data pointer */ GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)edit_data_section(action_group, str, data)); gchar * act = g_strdup_printf ("%s.save.data", str); append_menu_item (menu, _("Save Data"), (const gchar *)act, "S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (act); if (! pop) g_menu_append_section (menu, NULL, (GMenuModel *)curve_close_section(str)); return menu; } /*! \fn GMenu * curve_menu_bar (GSimpleActionGroup * action_group, gchar * str, tint * data) \brief create the curve window menu bar \param action_group the menu action group \param str the action string \param data the associated data pointer */ GMenu * curve_menu_bar (GSimpleActionGroup * action_group, gchar * str, tint * data) { GMenu * menu = g_menu_new (); prep_extra_rid (data); append_submenu (menu, _("Data"), create_data_menu(action_group, 0, str, data)); g_free (extrarid); append_submenu (menu, _("Curve"), create_curve_menu(str)); append_submenu (menu, _("Help"), curve_help_menu(str)); return menu; } /*! \fn void curve_window_add_menu_bar (tint * data) \brief add menu bar to the curve window \param data the associated data pointer */ void curve_window_add_menu_bar (tint * data) { Curve * this_curve = get_curve_from_pointer (data); this_curve -> pos = destroy_this_widget (this_curve -> pos); this_curve -> pos = gtk_label_new (" "); this_curve -> curve_hbox = destroy_this_widget (this_curve -> curve_hbox); this_curve -> curve_hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_curve -> curve_vbox, this_curve -> curve_hbox, FALSE, FALSE, 0); gchar * str = g_strdup_printf ("c-%d", this_curve -> action_id); #ifdef GTK3 GtkWidget * menu = gtk_menu_bar_new_from_model ((GMenuModel *)curve_menu_bar(this_curve -> action_group, str, data)); #else GtkWidget * menu = gtk_popover_menu_bar_new_from_model ((GMenuModel *)curve_menu_bar(this_curve -> action_group, str, data)); #endif g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_curve -> curve_hbox, menu, TRUE, TRUE, 0); gtk_label_align (this_curve -> pos, 1.0, 0.5); add_box_child_end (this_curve -> curve_hbox, this_curve -> pos, FALSE, FALSE, 0); show_the_widgets (this_curve -> curve_hbox); } /*! \fn GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) \brief create the add / remove curve submenus \param action_group the menu action group \param act the action string \param num the number of curve(s) to add \param data the associatec data pointer */ GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) { GMenu * menu = g_menu_new (); GMenuItem * item = g_menu_item_new (_("Add Data Set"), NULL); #ifdef MENU_ICONS GIcon * gicon = get_gicon_from_data (IMG_STOCK, LIST_ADD); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif Curve * this_curve = get_curve_from_pointer (data); if (this_curve -> extrac -> extras < num) { g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, act, data, TRUE, 0)); } else { g_menu_item_set_attribute (item, "action", "s", "None", NULL); } g_menu_append_item (menu, item); g_object_unref (item); item = g_menu_item_new (_("Remove Data Set"), NULL); #ifdef MENU_ICONS gicon = get_gicon_from_data (IMG_STOCK, LIST_REM); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif if (this_curve -> extrac -> extras > 0) { g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, act, data, FALSE, 0)); } else { g_menu_item_set_attribute (item, "action", "s", "None", NULL); } g_menu_append_item (menu, item); g_object_unref (item); return menu; } /*! \fn GMenu * autoscale_section (gchar * str) \brief create autoscale menu item \param str the action string id */ GMenu * autoscale_section (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.autoscale.curve", str); append_menu_item (menu, _("Autoscale"), (const gchar *)act, "A", NULL, IMG_STOCK, FITBEST, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GtkWidget * curve_popup_menu (gpointer data) \brief create curve popup menu \param data the associated data pointer */ GtkWidget * curve_popup_menu (gpointer data) { GtkWidget * curve_pop_menu; int i, j, k, l; CurveState * cstate = (CurveState *)data; activeg = cstate -> id -> a; activer = cstate -> id -> b; activec = cstate -> id -> c; GSimpleActionGroup * curve_popup_actions = g_simple_action_group_new (); GSimpleAction * curve_popup_action[6]; curve_popup_action[0] = g_simple_action_new ("save.data", NULL); curve_popup_action[1] = g_simple_action_new ("close.curve", NULL); curve_popup_action[2] = g_simple_action_new ("edit.curve", NULL); curve_popup_action[3] = g_simple_action_new ("save.image", NULL); curve_popup_action[4] = g_simple_action_new ("autoscale.curve", NULL); curve_popup_action[5] = g_simple_action_new ("shortcuts.curve", NULL); for (i=0; i<6; i++) { g_action_map_add_action (G_ACTION_MAP(curve_popup_actions), G_ACTION(curve_popup_action[i])); g_signal_connect (curve_popup_action[i], "activate", G_CALLBACK(curve_menu_bar_action), cstate -> id); } prep_extra_rid (cstate -> id); Curve * this_curve = get_project_by_id(cstate -> id -> a) -> analysis[cstate -> id -> b] -> curves[cstate -> id -> c]; gchar * str = g_strdup_printf ("mc-%d", this_curve -> action_id); GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel *)create_data_menu(curve_popup_actions, 1, str, cstate -> id)); g_menu_append_section (menu, NULL, (GMenuModel *)create_curve_menu(str)); i = -1; project * this_proj = get_project_by_id (activeg); for ( j=0 ; j < this_proj -> analysis[activer] -> c_sets; j++) { k = this_proj -> analysis[activer] -> compat_id[j]; for ( l=0 ; l < nprojects; l++ ) { if (get_project_by_id(l) -> analysis) { if (get_project_by_id(l) -> analysis[k]) { if (activer == SKT) { i += (activec < this_proj -> skt_sets) ? get_project_by_id(l) -> skt_sets : get_project_by_id(l) -> sqw_sets; } else { i += get_project_by_id(l) -> analysis[k] -> numc; } } } } } // i is the potential number of extra curves, skt is messing with that g_menu_append_section (menu, NULL, (GMenuModel *)create_add_remove_section(curve_popup_actions, str, i, cstate -> id)); g_menu_append_section (menu, NULL, (GMenuModel *)autoscale_section(str)); g_menu_append_section (menu, NULL, (GMenuModel *)curve_close_section(str)); g_menu_append_section (menu, NULL, (GMenuModel *)curve_help_menu(str)); g_free (extrarid); #ifdef GTK4 curve_pop_menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)menu, GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (curve_pop_menu, this_curve -> window); gtk_widget_set_size_request (curve_pop_menu, -1, 305); #else curve_pop_menu = gtk_menu_new_from_model ((GMenuModel *)menu); #endif // Finally adding actions to the menu gtk_widget_insert_action_group (curve_pop_menu, str, G_ACTION_GROUP(curve_popup_actions)); g_free (str); return curve_pop_menu; } atomes_1.3.1/src/curve/glyph.c0000664000175000017500000001647015212624223015717 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glyph.c * @short Functions to draw the glyphs * @author Sébastien Le Roux */ /* * This file: 'glyph.c' * * Contains: * - Functions to draw the glyphs * * List of functions: void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp); void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size); */ #include #include #include "global.h" #include "curve.h" /*! \fn void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) \brief draw polyhedra glyph \param to the cairo drawing context to use for the draw \param x x position \param y y position \param size glyph size \param step number of points \param initp starting position */ void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) { double px, py; double alpha; double astep; double astart; astart = 2*pi / initp; px = x + size * cos (astart); py = y + size * sin (astart); astep = 2 * pi / step; cairo_move_to (to, px, py); for (alpha =0.0 ; alpha <= 2*pi ; alpha += astep) { px = x + size * cos (astart + alpha); py = y + size *sin (astart + alpha); cairo_line_to (to, px, py); } } /*! \fn void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) \brief draw glyph at (x,y) \param in the cairo drawing context to use for the draw \param theglyph the type of glyph \param x x position \param y y position \param gcolor the glyph color \param size the glyph size */ void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) { double step; double start; double width; double cdash[3]; double offset; int dcount; int idglyph; double starttab[] = {1.0, 4.0, 2.0, 1.33333}; dcount = cairo_get_dash_count (in); cairo_get_dash (in, cdash, & offset); cairo_set_dash (in, dashed1, len1, 0.0); width = cairo_get_line_width (in); cairo_set_line_width (in, 1.0); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 1.0); if (theglyph == 1) { cairo_move_to (in, x + size/2.0, y - size/2.0); cairo_line_to (in, x - size/2.0, y + size/2.0); cairo_move_to (in, x + size/2.0, y + size/2.0); cairo_line_to (in, x - size/2.0, y - size/2.0); cairo_stroke (in); } if (theglyph > 1 && theglyph < 7) { cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); if (theglyph == 2) { cairo_fill(in); } else if (theglyph == 3) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } else if (theglyph == 4) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } else if (theglyph == 5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } cairo_stroke (in); } else if (theglyph >= 7 && theglyph < 12) { step = 4.0; start = 1.0; draw_poly (in, x, y, size, step, start); if (theglyph == 7) { cairo_fill(in); } else if (theglyph == 8) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 9) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 10) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); } cairo_stroke (in); } else if (theglyph >= 12 && theglyph < 17) { cairo_arc (in, x, y, size, 0.0, 2*pi); if (theglyph == 12) { cairo_fill(in); } else if (theglyph == 13) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } else if (theglyph == 14) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } else if (theglyph == 15) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } cairo_stroke (in); } else if (theglyph > 16) { step = 3.0; idglyph = (theglyph - 17) / 5; start = starttab[idglyph]; draw_poly (in, x, y, size, step, start); if (theglyph == 18 + idglyph*5) { cairo_fill(in); } else if (theglyph == 19 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 20 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 21 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); } cairo_stroke (in); } cairo_set_dash (in, cdash, dcount, offset); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 1.0); cairo_set_line_width (in, width); } atomes_1.3.1/src/curve/tab-4.c0000664000175000017500000010044515212624223015477 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-4.c * @short 4th tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-4.c' * * Contains: * - The 4th tab of the curve layout edition dialog * * List of functions: int get_active_axis (this_curve -> curve_edit); G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void ticks_angle_has_changed (gpointer data, double value); G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data); G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data); G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data); G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data); G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data); G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data); G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data); G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data); G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data); G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data); GtkWidget * create_tab_4 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn int get_active_axis (curve_edition * cedit) \brief get active axis \param cedit the target curve_edition pointer */ int get_active_axis (curve_edition * cedit) { return combo_get_active (cedit -> axischoice); } /*! \fn G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) \brief set axis min \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); if (i > -1) { const gchar * m; m = entry_get_text (res); if (string_to_double ((gpointer)m) < this_curve -> axmax[i]) { this_curve -> axmin[i] = string_to_double ((gpointer)m); } else { show_warning (_("Axis min must be < to axis max"), this_curve -> window); } update_entry_double (res, this_curve -> axmin[i]); update_curve (data); } } /*! \fn G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) \brief set axis max \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); const gchar * m; m = entry_get_text (res); if (string_to_double ((gpointer)m) > this_curve -> axmin[i]) { this_curve -> axmax[i] = string_to_double ((gpointer)m); } else { show_warning (_("Axis max must be > to axis min"), this_curve -> window); } update_entry_double (res, this_curve -> axmax[i]); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) \brief set number of major tick divisions \param maj the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); double tmp; const gchar * m; m = entry_get_text (maj); tmp = string_to_double ((gpointer)m); if (tmp != 0.0) { this_curve -> majt[i] = tmp; update_curve (data); } else { show_warning (_("Major tick must be > 0.0"), this_curve -> window); } update_entry_double (maj, this_curve -> majt[i]); } /*! \fn G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) \brief set number of minor tick division(s) \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> mint[ad -> d] = gtk_spin_button_get_value_as_int(res) + 1; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) \brief set major ticks size \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> majt_size[ad -> d] = gtk_spin_button_get_value_as_int(res); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) \brief set minor ticks size \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> mint_size[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> mint_size[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) \brief set ticks label number of digit(s) \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> labels_digit[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> labels_digit[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) \brief set ticks label position shift on x axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> labels_shift_x[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> labels_shift_x[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) \brief set ticks label position shift on y axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> labels_shift_y[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> labels_shift_y[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) \brief set axis title position shift on x axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> axis_title_x[ad -> d] = gtk_spin_button_get_value_as_int(res); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) \brief set axis title position shift on y axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> axis_title_y[ad -> d] = gtk_spin_button_get_value_as_int(res); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) \brief change tick marks location \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) { Curve * this_curve = get_curve_from_pointer(data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> ticks_io[i] = combo_get_active ((GtkWidget *)box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) \brief change tick marks position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) { Curve * this_curve = get_curve_from_pointer(data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> ticks_pos[i] = combo_get_active ((GtkWidget *)box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) \brief change ticks labels position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) { Curve * this_curve = get_curve_from_pointer(data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> labels_pos[i] = combo_get_active ((GtkWidget *)box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) \brief set ticks labels font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); g_free (this_curve -> labels_font[i]); this_curve -> labels_font[i] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn void ticks_angle_has_changed (gpointer data, double value) \brief set ticks angle \param data the associated data pointer \param value the new ticks angle */ void ticks_angle_has_changed (gpointer data, double value) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> labels_angle[i] = value * (pi/180.0); update_curve (data); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set ticks angle callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { ticks_angle_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) \brief set ticks angle callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) { ticks_angle_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) \brief show / hide axis title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) \brief show / hide axis title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; int i = get_active_axis (cedit); if (button_get_status ((GtkWidget *)but)) { widget_set_sensitive (cedit -> axis_title, 0); g_free (this_curve -> axis_title[i]); this_curve -> axis_title[i] = g_strdup_printf ("%s", default_title (i, data)); update_entry_text (GTK_ENTRY(cedit -> axis_title), this_curve -> axis_title[i]); } else { widget_set_sensitive (cedit -> axis_title, 1); } update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) \brief show / hide grid toggle callback GTK4 \param grid the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) \brief show / hide grid toggle callback GTK3 \param grid the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> show_grid[i] = button_get_status ((GtkWidget *)grid); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) \brief autoscale axis \param autosc the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> autoscale[i] = TRUE; update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) \brief show / hide axis toggle callback GTK4 \param axis the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) \brief show / hide axis toggle callback GTK3 \param axis the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> show_axis[i] = button_get_status ((GtkWidget *)axis); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) \brief set axis legend entry callback \param xtit the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); g_free (this_curve -> axis_title[i]); this_curve -> axis_title[i] = g_strdup_printf ("%s", entry_get_text (xtit)); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) \brief set axis title font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); g_free (this_curve -> axis_title_font[i]); this_curve -> axis_title_font[i] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) \brief change the axis scale \param sbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); int j = combo_get_active((GtkWidget *)sbox); this_curve -> scale[i] = j; widget_set_sensitive (this_curve -> curve_edit -> majt, ! j); widget_set_sensitive (this_curve -> curve_edit -> nmi[i], ! j); this_curve -> autoscale[i] = TRUE; update_curve (data); } /*! \fn G_MODULE_EXPORT void update_axis (GtkComboBox * box, gpointer data) \brief change the axis \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis (GtkComboBox * box, gpointer data) { int i; Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; i = combo_get_active ((GtkWidget *)box); update_entry_double (GTK_ENTRY(cedit -> vmin), this_curve -> axmin[i]); update_entry_double (GTK_ENTRY(cedit -> vmax), this_curve -> axmax[i]); update_entry_double (GTK_ENTRY(cedit -> majt), this_curve -> majt[i]); combo_set_active (cedit -> ticks_inout_box, this_curve -> ticks_io[i]); combo_set_active (cedit -> ticks_pos_box, this_curve -> ticks_pos[i]); combo_set_active (cedit -> labels_pos_box, this_curve -> labels_pos[i]); gtk_font_chooser_set_font (GTK_FONT_CHOOSER(cedit -> ticks_labels_font), this_curve -> labels_font[i]); gtk_range_set_value (GTK_RANGE(cedit -> ticks_labels_angle), this_curve -> labels_angle[i] * (180.0/pi)); if (((tint *)data) -> b < MSD) { widget_set_sensitive (cedit -> scale_box, 0); } else { g_signal_handler_disconnect (G_OBJECT(cedit -> scale_box), cedit -> handler_id); combo_set_active (cedit -> scale_box, this_curve -> scale[i]); cedit -> handler_id = g_signal_connect (G_OBJECT(cedit -> scale_box), "changed", G_CALLBACK(set_scale), data); widget_set_sensitive (cedit -> scale_box, 1); /* widget_set_sensitive (cedit -> vmax, ! this_curve -> scale[i]); widget_set_sensitive (cedit -> vmin, ! this_curve -> scale[i]); */ widget_set_sensitive (cedit -> majt, ! this_curve -> scale[i]); widget_set_sensitive (cedit -> nmi[i], ! this_curve -> scale[i]); } hide_the_widgets (cedit -> nmi[! i]); hide_the_widgets (cedit -> ndi[! i]); hide_the_widgets (cedit -> mats[! i]); hide_the_widgets (cedit -> mits[! i]); hide_the_widgets (cedit -> nptx[! i]); hide_the_widgets (cedit -> npty[! i]); hide_the_widgets (cedit -> tptx[! i]); hide_the_widgets (cedit -> tpty[! i]); show_the_widgets (cedit -> nmi[i]); show_the_widgets (cedit -> ndi[i]); show_the_widgets (cedit -> mats[i]); show_the_widgets (cedit -> mits[i]); show_the_widgets (cedit -> nptx[i]); show_the_widgets (cedit -> npty[i]); show_the_widgets (cedit -> tptx[i]); show_the_widgets (cedit -> tpty[i]); button_set_status (cedit -> show_axis, this_curve -> show_axis[i]); button_set_status (cedit -> show_grid, this_curve -> show_grid[i]); button_set_status (cedit -> axis_default_title, this_curve -> axis_defaut_title[i]); widget_set_sensitive (cedit -> axis_title, ! this_curve -> axis_defaut_title[i]); update_entry_text (GTK_ENTRY(cedit -> axis_title), this_curve -> axis_title[i]); gtk_font_chooser_set_font (GTK_FONT_CHOOSER(cedit -> axis_title_font), this_curve -> axis_title_font[i]); } /*! \fn GtkWidget * create_tab_4 (curve_edition * cedit, gpointer data) \brief handle the creation of the 4th tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_4 (curve_edition * cedit, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i; GtkWidget * axisbox; #ifdef GTK4 axisbox = create_vbox (3); #else axisbox = create_vbox (BSEP); #endif GtkWidget * ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Select axis:"), 175, -1, 1.0, 0.5), FALSE, FALSE, 0); cedit -> axischoice = create_combo (); combo_text_append (cedit -> axischoice, _("X axis")); combo_text_append (cedit -> axischoice, _("Y axis")); combo_set_active (cedit -> axischoice, 0); gtk_widget_set_size_request (cedit -> axischoice, 80, 35); g_signal_connect (G_OBJECT(cedit -> axischoice), "changed", G_CALLBACK(update_axis), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> axischoice, FALSE, FALSE, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Scale type:"), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); cedit -> scale_box = create_combo (); combo_text_append (cedit -> scale_box, _("Linear")); combo_text_append (cedit -> scale_box, "Log"); combo_set_active (cedit -> scale_box, this_curve -> scale[0]); gtk_widget_set_size_request (cedit -> scale_box, 80, -1); cedit -> handler_id = g_signal_connect (G_OBJECT(cedit -> scale_box), "changed", G_CALLBACK(set_scale), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> scale_box, FALSE, FALSE, 0); cedit -> auto_scale = create_button (_("Autoscale axis"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_autoscale), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> auto_scale, FALSE, FALSE, 30); // Axis min and max ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Min:"), 30, -1, 0.5, 0.5), FALSE, FALSE, 20); cedit -> vmin = create_entry (G_CALLBACK(set_axis_min), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> vmin, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Max:"), 30, -1, 0.5, 0.5), FALSE, FALSE, 20); cedit -> vmax = create_entry (G_CALLBACK(set_axis_max), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> vmax, FALSE, FALSE, 0); // Major ticks spacing ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Major ticks spacing:"), 160, -1, 0.0, 0.5), FALSE, FALSE, 10); cedit -> majt = create_entry (G_CALLBACK(set_max_div), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> majt, FALSE, FALSE, 0); // Number of minors ticks ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Number of minor ticks:"), 160, -1, 0.0, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> nmi[i] = spin_button (G_CALLBACK(set_min_div_spin), (double)this_curve -> mint[i]-1.0, 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> nmi[i], FALSE, FALSE, 0); } // Ticks ... ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Tick marks:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); // ... position ... ahbox = abox (axisbox, _("Location:"), 1); cedit -> ticks_inout_box = create_combo (); combo_text_append (cedit -> ticks_inout_box, _("In")); combo_text_append (cedit -> ticks_inout_box, _("Out")); gtk_widget_set_size_request (cedit -> ticks_inout_box, 60, -1); g_signal_connect (G_OBJECT(cedit -> ticks_inout_box), "changed", G_CALLBACK(set_io_ticks), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> ticks_inout_box, FALSE, FALSE, 3); cedit -> ticks_pos_box = create_combo (); combo_text_append (cedit -> ticks_pos_box, _("Normal")); combo_text_append (cedit -> ticks_pos_box, _("Opposite")); combo_text_append (cedit -> ticks_pos_box, _("Both")); combo_text_append (cedit -> ticks_pos_box, _("None")); gtk_widget_set_size_request (cedit -> ticks_pos_box, 100, -1); g_signal_connect (G_OBJECT(cedit -> ticks_pos_box), "changed", G_CALLBACK(set_pos_ticks), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> ticks_pos_box, FALSE, FALSE, 3); // ... sizes ... ahbox = abox (axisbox, _("Major ticks size:"), 1); for (i=0; i<2; i++) { cedit -> mats[i] = spin_button (G_CALLBACK(set_ticks_size_major_spin), (double)this_curve -> majt_size[i], 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> mats[i], FALSE, FALSE, 0); } ahbox = abox (axisbox, _("Minor ticks size:"), 1); for (i=0; i<2; i++) { cedit -> mits[i] = spin_button (G_CALLBACK(set_ticks_size_minor_spin), (double)this_curve -> mint_size[i], 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> mits[i], FALSE, FALSE, 0); } // Ticks labels ... ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Tick labels:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); // ... position ... ahbox = abox (axisbox, _("Location:"), 1); cedit -> labels_pos_box = create_combo (); combo_text_append (cedit -> labels_pos_box, _("Normal")); combo_text_append (cedit -> labels_pos_box, _("Opposite")); combo_text_append (cedit -> labels_pos_box, _("Both")); combo_text_append (cedit -> labels_pos_box, _("None")); gtk_widget_set_size_request (cedit -> labels_pos_box, 150, -1); g_signal_connect (G_OBJECT(cedit -> labels_pos_box), "changed", G_CALLBACK(set_pos_labels), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> labels_pos_box, FALSE, FALSE, 0); // ... significant digits ... ahbox = abox (axisbox, _("Significant digits:"), 1); for (i=0; i<2; i++) { cedit -> ndi[i] = spin_button (G_CALLBACK(set_lab_digit_spin), (double)this_curve -> labels_digit[i], 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> ndi[i], FALSE, FALSE, 0); } // ... font ... cedit -> ticks_labels_font = font_button (this_curve -> labels_font[0], 150, 35, G_CALLBACK(set_ticks_labels_font), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, _("Font:"), 1), cedit -> ticks_labels_font, FALSE, FALSE, 5); // ... angle .. cedit -> ticks_labels_angle = create_hscale (-180.0, 180.0, 1.0, 0.0, GTK_POS_LEFT, 0, 150, G_CALLBACK(set_ticks_angle), G_CALLBACK(scroll_set_ticks_angle), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, _("Angle:"), 1), cedit -> ticks_labels_angle, FALSE, FALSE, 5); // ...distance to axis ahbox = abox (axisbox, _("Position: "), 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("x:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> nptx[i] = spin_button (G_CALLBACK(set_lab_shift_x_spin), (double)this_curve -> labels_shift_x[i], -100.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> nptx[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("y:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> npty[i] = spin_button (G_CALLBACK(set_lab_shift_y_spin), (double) this_curve -> labels_shift_y[i], -100.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> npty[i], FALSE, FALSE, 0); } cedit -> show_axis = check_button (_("Show/Hide axis (if min[axis] < 0.0 < max[axis])"), 100, 30, FALSE, G_CALLBACK(set_axis), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, cedit -> show_axis, FALSE, FALSE, 3); cedit -> show_grid = check_button (_("Show/Hide axis grid"), 100, 30, FALSE, G_CALLBACK(set_grid), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, cedit -> show_grid, FALSE, FALSE, 1); // Axis title ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE,3); cedit -> axis_default_title = check_button (_("Use default axis title"), 175, -1, FALSE, G_CALLBACK(to_axis_title), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> axis_default_title, FALSE, FALSE, 0); cedit -> axis_title = create_entry (G_CALLBACK(set_axis_legend), 150, 15, FALSE, data); gtk_entry_set_alignment (GTK_ENTRY(cedit -> axis_title), 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> axis_title, FALSE, FALSE, 0); cedit -> axis_title_font = font_button (this_curve -> axis_title_font[0], 150, 35, G_CALLBACK(set_axis_title_font), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, _("Font:"), 3), cedit -> axis_title_font, FALSE, FALSE, 0); ahbox = abox (axisbox, _("Position: "), 3); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("x:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> tptx[i] = spin_button (G_CALLBACK(set_axis_title_x_spin), (double)this_curve -> axis_title_x[i], -500.0, 500.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> tptx[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("y:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> tpty[i] = spin_button (G_CALLBACK(set_axis_title_y_spin), (double)this_curve -> axis_title_y[i], -500.0, 500.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> tpty[i], FALSE, FALSE, 0); } return axisbox; } atomes_1.3.1/src/curve/curve.c0000664000175000017500000003641015212624223015714 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file curve.c * @short Functions to manage curves * @author Sébastien Le Roux */ /* * This file: 'curve.c' * * Contains: * - Functions to manage curves * * List of functions: double scale (double axe); void prep_plot (Curve * this_curve); void clean_this_curve_window (int cid, int rid); void set_curve_data_zero (int rid, int cid, int interv); void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid); void hide_curves (project * this_proj, int c); void remove_this_curve_from_extras (int a, int b, int c); void erase_curves (project * this_proj, int c); void update_curves (); void update_curve (gpointer data); curve_dash * selectdash (int iddash); Curve * get_curve_from_pointer (gpointer data); */ #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "cedit.h" #include "curve.h" extern void adjust_tool_model (int calc, int curve, gchar * string_path); gint32 etime; int resol[2]; double XDRAW, YDRAW; double DXDRAW, DYDRAW; double xmax, ymax; double x_min, x_max; double y_max, y_min; double ax, ay; double cxy[2]; double mticks; int nticks; int xlog, ylog; int dxlog, dylog; char * sca; int originp; PangoLayout * layout; gboolean dogrid; int x_shift, y_shift; int amint, amajt; int tickpos, labpos; // Marge sur X et Y dans les graphs int xmarge = MARGX; int ymarge = MARGY; char * curve_image_file = NULL; // Number of dash formats int ndash = NDASHS; int nglyph = NGLYPHS; const double dashed0[] = {0.0, 0.0}; int len0 = sizeof(dashed0) / sizeof(dashed0[0]); const double dashed1[] = {1.0, 0.0}; int len1 = sizeof(dashed1) / sizeof(dashed1[0]); const double dashed2[] = {5.0, 2.5}; int len2 = sizeof(dashed2) / sizeof(dashed2[0]); const double dashed3[] = {4.0, 6.0}; int len3 = sizeof(dashed3) / sizeof(dashed3[0]); const double dashed4[] = {2.0, 5.0}; int len4 = sizeof(dashed4) / sizeof(dashed4[0]); const double dashed5[] = {10.0, 5.0}; int len5 = sizeof(dashed5) / sizeof(dashed5[0]);; const double dashed6[] = {10.0, 10.0}; int len6 = sizeof(dashed6) / sizeof(dashed6[0]);; const double dashed7[] = {4.0, 1.0, 4.0}; int len7 = sizeof(dashed7) / sizeof(dashed7[0]); const double dashed8[] = {10.0, 2.5, 10.0}; int len8 = sizeof(dashed8) / sizeof(dashed8[0]);; const double dashed9[] = {10.0, 5.0, 2.0}; int len9 = sizeof(dashed9) / sizeof(dashed9[0]);; const double pdashed[] = {1.0}; int lenp = 1; /*! \fn curve_dash * selectdash (int iddash) \brief setup dash pointer \param iddash the target dash */ curve_dash * selectdash (int iddash) { curve_dash * dashtab; dashtab = g_malloc0(sizeof*dashtab); if (iddash == 0) { dashtab -> a = dashed0; dashtab -> b = len0; } if (iddash == 1) { dashtab -> a = dashed1; dashtab -> b = len1; } if (iddash == 2) { dashtab -> a = dashed2; dashtab -> b = len2; } if (iddash == 3) { dashtab -> a = dashed3; dashtab -> b = len3; } if (iddash == 4) { dashtab -> a = dashed4; dashtab -> b = len4; } if (iddash == 5) { dashtab -> a = dashed5; dashtab -> b = len5; } if (iddash == 6) { dashtab -> a = dashed6; dashtab -> b = len6; } if (iddash == 7) { dashtab -> a = dashed7; dashtab -> b = len7; } if (iddash == 8) { dashtab -> a = dashed8; dashtab -> b = len8; } if (iddash == 9) { dashtab -> a = dashed9; dashtab -> b = len9; } if (iddash == 10) { dashtab -> a = pdashed; dashtab -> b = lenp; } return dashtab; } /*! \fn double scale (double axe) \brief find appropriate major tick spacing based on axis length \param axe axis length */ double scale (double axe) { double xs; double axis; axis = fabs(axe); if (axis < 0.0005) { xs=0.00005; } else if (axis < 0.0025) { xs=0.00025; } else if (axis < 0.005) { xs=0.0005; } else if (axis < 0.025) { xs=0.0025; } else if (axis < 0.05) { xs=0.005; } else if (axis < 0.25) { xs=0.025; } else if (axis < 0.5 ) { xs=0.05; } else if (axis < 1.5 ) { xs=0.1; } else if (axis < 2.5) { xs=0.25; } else if (axis < 5) { xs=0.5; } else if (axis < 15) { xs = 1.0; } else if (axis < 30) { xs = 2.0; } else if (axis < 50) { xs = 5.0; } else if (axis < 100) { xs = 10.0; } else if (axis < 250) { xs = 25.0; } else if (axis < 500) { xs = 50.0; } else if (axis < 1000) { xs = 100.0; } else if (axis < 5000) { xs = 500.0; } else if (axis < 10000) { xs = 1000.0; } else if (axis < 50000) { xs = 5000.0; } else if (axis < 100000) { xs = 10000.0; } else if (axis < 500000) { xs = 50000.0; } else if (axis < 1000000) { xs = 100000.0; } return xs; } /*! \fn Curve * get_curve_from_pointer (gpointer data) \brief get Curve pointer from pointer \param data the target pointer */ Curve * get_curve_from_pointer (gpointer data) { tint * ad = (tint *)data; return get_project_by_id(ad -> a) -> analysis[ad -> b] -> curves[ad -> c]; } /*! \fn void prep_plot (Curve * this_curve) \brief prepare curve plot (setting up variables for the plot) \param this_curve the target curve */ void prep_plot (Curve * this_curve) { x_min = resol[0] * this_curve -> frame_pos[0][0]; x_max = resol[0] * this_curve -> frame_pos[0][1]; y_max = resol[1] * (1.0 - this_curve -> frame_pos[1][1]); y_max = resol[1] - y_max; y_min = resol[1] * (1.0 - this_curve -> frame_pos[1][0]); y_min = resol[1] - y_min; // The x size of the graph in pixels XDRAW = x_max - x_min; // The y size of the graph in pixels YDRAW = y_max - y_min; } /*! \fn void clean_this_curve_window (int cid, int rid) \brief free curve window data \param cid the curve id \param rid the calculation id */ void clean_this_curve_window (int cid, int rid) { /*if (active_project -> analysis[rid] -> curves[cid] -> window != NULL) { active_project -> analysis[rid] -> curves[cid] -> window = destroy_this_widget (active_project -> analysis[rid] -> curves[cid] -> window); active_project -> analysis[rid] -> curves[cid] -> plot = destroy_this_widget (active_project -> analysis[rid] -> curves[cid] -> plot); }*/ if (active_project -> analysis[rid] -> curves[cid] -> ndata > 0) { int i; for (i=0; i<2; i++) { if (active_project -> analysis[rid] -> curves[cid] -> data[i] != NULL) { g_free (active_project -> analysis[rid] -> curves[cid] -> data[i]); active_project -> analysis[rid] -> curves[cid] -> data[i] = NULL; } } } active_project -> analysis[rid] -> curves[cid] -> ndata = 0; } /*! \fn void set_curve_data_zero (int rid, int cid, int interv) \brief initialize curve data \param rid the calculation id \param cid the curve id \param interv the number of data point(s) */ void set_curve_data_zero (int rid, int cid, int interv) { active_project -> analysis[rid] -> curves[cid] -> ndata = interv; active_project -> analysis[rid] -> curves[cid] -> data[0] = allocdouble (interv); int i; if (rid != SKT) { for (i=0; i analysis[rid] -> curves[cid] -> data[0][i] = active_project -> analysis[rid] -> min + i*active_project -> analysis[rid] -> delta; } } else { double delta_omega = (pi/(active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta)) / active_project -> sqw_freq; for (i=0; i analysis[rid] -> curves[cid] -> data[0][i] = i*delta_omega; } } } /*! \fn void save_curve_ (int * interv, double datacurve[*interv], int * cid, int * rid) \brief save calculation results from Fortran90 \param interv number of data point(s) \param datacurve calculation result(s) to save \param cid curve id \param rid calculation id */ void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid) { int i, j; Curve * this_curve = active_project -> analysis[* rid] -> curves[* cid]; #ifdef DEBUG // g_debug ("SAVE_CURVE:: rid= %d, cid= %d, name= %s, interv= %d", * rid, * cid, this_curve -> name, * interv); /*for ( i=0 ; i < *interv ; i++ ) { g_debug ("SAVECURVE:: i= %d, data[i]= %f", i, datacurve[i]); }*/ #endif // DEBUG clean_this_curve_window (* cid, * rid); if (* interv != 0) { int inter = (* rid == SPH) ? * interv/2 + 1: * interv; if (* rid == SKD || (* rid == SKT && * cid < active_project -> skt_sets)) { this_curve -> ndata = inter; this_curve -> data[0] = duplicate_double (inter, xsk); } else { set_curve_data_zero (* rid, * cid, inter); } if (* rid != SPH) { this_curve -> data[1] = duplicate_double (inter, datacurve); } else { this_curve -> data[1] = allocdouble (inter); for (i=0; i data[1][i] = datacurve[i*2]; } } for (i=0; i<2; i++) { j = (this_curve -> extrac) ? this_curve -> extrac -> extras : 0; if (this_curve -> extrac) this_curve -> extrac -> extras = 0; autoscale_axis (active_project, this_curve, * rid, * cid, i); if (this_curve -> extrac) this_curve -> extrac -> extras = j; this_curve -> majt[i] = scale (this_curve -> axmax[i] - this_curve -> axmin[i]); this_curve -> mint[i] = 2; } } else { this_curve -> ndata = 0; } } /*! \fn void hide_curves (project * this_proj, int c) \brief for project hide all curves for a calculation \param this_proj the target project \param c the target calculation */ void hide_curves (project * this_proj, int c) { int i; for ( i = 0 ; i < this_proj -> analysis[c] -> numc ; i ++ ) { if (this_proj -> analysis[c] -> curves[i]) { if (this_proj -> analysis[c] -> curves[i] -> window) { if (is_the_widget_visible(this_proj -> analysis[c] -> curves[i] -> window)) { hide_the_widgets (this_proj -> analysis[c] -> curves[i] -> window); adjust_tool_model (c, i, this_proj -> analysis[c] -> curves[i] -> path); g_free (this_proj -> analysis[c] -> curves[i] -> path); this_proj -> analysis[c] -> curves[i] -> path = NULL; } } } } } /*! \fn void remove_this_curve_from_extras (int a, int b, int c) \brief free all target (a,b,c) curve from other curve(s) extra(s) \param a the target project \param b the target calculation \param c the target curve */ void remove_this_curve_from_extras (int a, int b, int c) { int i, j, k, l; project * this_proj; CurveExtra * ctmp; for (i=0; i analysis) { for (j=0; j analysis[j]) { if (this_proj -> analysis[j] -> idcc != NULL) { for (k=0; k analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> extrac > 0) { ctmp = this_proj -> analysis[j] -> curves[k] -> extrac -> first; for (l=0; l analysis[j] -> curves[k] -> extrac -> extras; l++) { if (ctmp -> id.a == a && ctmp -> id.b == b && ctmp -> id.c == c) { remove_extra (this_proj -> analysis[j] -> curves[k] -> extrac, ctmp); break; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } } } } } } } } /*! \fn void erase_curves (project * this_proj, int c) \brief free all curve(s) data \param this_proj the target project \param c the target calculation */ void erase_curves (project * this_proj, int c) { int i, j; for (i=0 ; i analysis[c] -> numc; i ++) { if (this_proj -> analysis[c] -> curves[i]) { remove_this_curve_from_extras (this_proj -> id, c, i); for (j=0; j<2; j++) { if (this_proj -> analysis[c] -> curves[i] -> data[j]) { g_free (this_proj -> analysis[c] -> curves[i] -> data[j]); this_proj -> analysis[c] -> curves[i] -> data[j] = NULL; } if (this_proj -> analysis[c] -> curves[i] -> axis_title[j]) { g_free (this_proj -> analysis[c] -> curves[i] -> axis_title[j]); } g_free (this_proj -> analysis[c] -> curves[i] -> labels_font[j]); this_proj -> analysis[c] -> curves[i] -> labels_font[j] = NULL; g_free (this_proj -> analysis[c] -> curves[i] -> axis_title_font[j]); this_proj -> analysis[c] -> curves[i] -> axis_title_font[j] = NULL; } if (this_proj -> analysis[c] -> curves[i] -> name) { g_free (this_proj -> analysis[c] -> curves[i] -> name); this_proj -> analysis[c] -> curves[i] -> name = NULL; } if (this_proj -> analysis[c] -> curves[i] -> title) { g_free (this_proj -> analysis[c] -> curves[i] -> title); this_proj -> analysis[c] -> curves[i] -> title = NULL; } if (this_proj -> analysis[c] -> curves[i] -> title_font) { g_free (this_proj -> analysis[c] -> curves[i] -> title_font); this_proj -> analysis[c] -> curves[i] -> title_font = NULL; } g_free (this_proj -> analysis[c] -> curves[i] -> legend_font); g_free (this_proj -> analysis[c] -> curves[i] -> layout); g_free (this_proj -> analysis[c] -> curves[i] -> extrac); g_free (this_proj -> analysis[c] -> curves[i]); this_proj -> analysis[c] -> curves[i] = NULL; } } } /*! \fn void update_curves () \brief update all curve(s) rendering for all project(s) in the workspace */ void update_curves () { int i, j, k; project * this_proj; for (i=0; i analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> plot != NULL) { if (is_the_widget_visible(this_proj -> analysis[j] -> curves[k] -> plot)) { gtk_widget_queue_draw (this_proj -> analysis[j] -> curves[k] -> plot); } } } } } } /*! \fn void update_curve (gpointer data) \brief update curve rendering \param data the associated data pointer */ void update_curve (gpointer data) { gtk_widget_queue_draw (get_curve_from_pointer(data) -> plot); } atomes_1.3.1/src/curve/w_img.c0000664000175000017500000002614715212624223015700 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_img.c * @short Functions to save screenshot from graph / curve(s) * @author Sébastien Le Roux */ /* * This file: 'w_img.c' * * Contains: * - The functions to save screenshot from graph / curve(s) * * List of functions: void write_image (gpointer curetow); void save_image (gpointer cdata); G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data); G_MODULE_EXPORT void set_background (GtkCheckButton * backb); G_MODULE_EXPORT void set_background (GtkToggleButton * backb); G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid); G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" typedef struct { GtkWidget * a; GtkWidget * b; } dwidget; double back_alpha; dwidget thedata; int forme; /*! \fn G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) \brief set image size entry callback \param val the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) { const gchar * m; int i, j; j = GPOINTER_TO_INT(data); m = entry_get_text (val); i = string_to_double ((gpointer)m); if (i > 0) { resol[j] = i; } else { show_warning ((j) ? _("Y size must be > 0") : _("X size must be > 0"), NULL); } update_entry_int (val, resol[j]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) \brief show / hide image background toggle callback GTK4 \param backb the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) \brief show / hide image background toggle callback GTK3 \param backb the GtkTogglekButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) #endif { if (button_get_status ((GtkWidget *)backb)) { back_alpha = 0.0; } else { back_alpha = 1.0; } } /*! \fn G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) \brief change image format \param box the GtkComboBox sending the signal \param cid the associated data pointer */ G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) { forme = combo_get_active ((GtkWidget *)box); if (forme != -1) { dwidget * imf = (dwidget *) cid; button_set_status (imf -> a, 0); if (forme == 1 || forme == 3) { widget_set_sensitive(imf -> a, 0); } else { widget_set_sensitive(imf -> a, 1); } switch (forme) { case 0: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_PNG); break; case 1: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_PDF); break; case 2: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_SVG); break; case 3: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_EPS); break; } } } gchar * i_title[4]={"Portable Network Graphics", "Portable Document File", "Scalable Vector Graphics", "Encapsulated Post-Script Image"}; gchar * i_pattern[4]={"*.png", "*.pdf", "*.svg", "*.eps"}; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) \brief write image - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) \brief write image - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { curve_image_file = file_chooser_get_file_name (chooser); Curve * this_curve = get_curve_from_pointer (data); this_curve -> format = forme + 1; #ifdef GTK3 show_curve (NULL, NULL, data); #else GdkSurface * surf = gtk_native_get_surface ((GtkNative *)this_curve -> plot); cairo_t * rec = (cairo_t *)gdk_cairo_context_cairo_create (gdk_surface_create_cairo_context (surf)); show_curve (NULL, rec, resol[0], resol[1], data); #endif } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void write_image (gpointer curetow) \brief write image - creating the file chooser dialog \param curetow the associated data pointer */ void write_image (gpointer curetow) { gchar * i_filter[4]={i18n("PNG file (*.png)"), i18n("PDF file (*.pdf)"), i18n("SVG file (*.svg)"), i18n("EPS file (*.eps)")}; GtkFileFilter * filter; Curve * this_curve = get_curve_from_pointer (curetow); if (forme == -1) { show_warning (_("To save an image please enter a file format"), this_curve -> window); } else if (resol[0] == 0 || resol[1] == 0) { show_warning (_("You need to specify the size of the image"), this_curve -> window); } else { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_(i_title[forme]), GTK_WINDOW(this_curve -> window), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif filter = gtk_file_filter_new(); gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _(i_filter[forme])); gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), i_pattern[forme]); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_write_image), curetow); #else run_this_gtk_dialog (info, G_CALLBACK(run_write_image), curetow); #endif } } /*! \fn G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) \brief export curve window plot to image - running the dialog \param save_img the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) { gboolean done = FALSE; while (! done) { switch (response_id) { case GTK_RESPONSE_APPLY: if (forme > -1) { write_image (data); done = TRUE; } else { done = FALSE; } break; default: done = TRUE; break; } } if (done) destroy_this_dialog (save_img); } /*! \fn void save_image (gpointer cdata) \brief export curve window plot to image - creating the dialog \param cdata the associated data pointer */ void save_image (gpointer cdata) { GtkWidget * save_img; GtkWidget * hbox; GtkWidget * comboformat; GtkWidget * x; GtkWidget * y; GtkWidget * background; GtkWidget * log; int xlgt, ylgt; int i; gchar * str; Curve * this_curve = get_curve_from_pointer (cdata); save_img = dialog_cancel_apply (_("Export image"), this_curve -> window, FALSE); gtk_window_set_resizable (GTK_WINDOW (save_img), FALSE); #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (save_img), THETD); #endif GtkWidget * vbox = dialog_get_content_area (save_img); gtk_box_set_spacing (GTK_BOX(vbox), 15); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Format: "), -1, 50, 0.0, 0.5), TRUE, TRUE, 0); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, TRUE, TRUE, 10); comboformat = create_combo (); for (i=0; i<4; i++) { str = g_strdup_printf ("%s - (%s)", _(i_title[i]), i_pattern[i]); combo_text_append (comboformat, str); g_free (str); } gtk_fixed_put (GTK_FIXED(fixed), comboformat, -1, 10); gtk_widget_set_size_request (comboformat, -1, 30); log = gtk_image_new_from_file (PACKAGE_VOID); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, log, TRUE, TRUE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Size: "), 100, -1, 0.0, 0.5), FALSE, TRUE, 0); xlgt = get_widget_width (this_curve -> plot); ylgt = get_widget_height (this_curve -> plot); x = create_entry (G_CALLBACK(set_size), 50, 15, FALSE, GINT_TO_POINTER(0)); update_entry_int (GTK_ENTRY(x), xlgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, x, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("x"), TRUE, TRUE, 5); y = create_entry (G_CALLBACK(set_size), 50, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(y), ylgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, y, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (_("pixels")), TRUE, TRUE, 0); background = check_button (_("Make background transparent"), -1, -1, FALSE, G_CALLBACK(set_background), NULL); widget_set_sensitive (background, FALSE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, background, TRUE, TRUE, 0); forme = -1; back_alpha = 1.0; thedata.a = background; thedata.b = log; g_signal_connect (G_OBJECT(comboformat), "changed", G_CALLBACK(choose_format), & thedata); run_this_gtk_dialog (save_img, G_CALLBACK(run_save_image), cdata); } atomes_1.3.1/src/affero.h0000664000175000017500000010517415212624223014717 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file affero.h * @short The text of the Affero GPL v3 license * @author Sébastien Le Roux */ /* * This header file: 'affero.h' * * Contains: - The text of the Affero GPL v3 license */ gchar * affero_license="\n" " GNU AFFERO GENERAL PUBLIC LICENSE\n\n" " Version 3, 19 November 2007\n" "\n" " Copyright (C) 2007 Free Software Foundation, Inc. \n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" " Preamble\n" "\n" " The GNU Affero General Public License is a free, copyleft license for\n" "software and other kinds of works, specifically designed to ensure\n" "cooperation with the community in the case of network server software.\n" "\n" " The licenses for most software and other practical works are designed\n" "to take away your freedom to share and change the works. By contrast,\n" "our General Public Licenses are intended to guarantee your freedom to\n" "share and change all versions of a program--to make sure it remains free\n" "software for all its users.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "them if you wish), that you receive source code or can get it if you\n" "want it, that you can change the software or use pieces of it in new\n" "free programs, and that you know you can do these things.\n" "\n" " Developers that use our General Public Licenses protect your rights\n" "with two steps: (1) assert copyright on the software, and (2) offer\n" "you this License which gives you legal permission to copy, distribute\n" "and/or modify the software.\n" "\n" " A secondary benefit of defending all users' freedom is that\n" "improvements made in alternate versions of the program, if they\n" "receive widespread use, become available for other developers to\n" "incorporate. Many developers of free software are heartened and\n" "encouraged by the resulting cooperation. However, in the case of\n" "software used on network servers, this result may fail to come about.\n" "The GNU General Public License permits making a modified version and\n" "letting the public access it on a server without ever releasing its\n" "source code to the public.\n" "\n" " The GNU Affero General Public License is designed specifically to\n" "ensure that, in such cases, the modified source code becomes available\n" "to the community. It requires the operator of a network server to\n" "provide the source code of the modified version running there to the\n" "users of that server. Therefore, public use of a modified version, on\n" "a publicly accessible server, gives the public access to the source\n" "code of the modified version.\n" "\n" " An older license, called the Affero General Public License and\n" "published by Affero, was designed to accomplish similar goals. This is\n" "a different license, not a version of the Affero GPL, but Affero has\n" "released a new version of the Affero GPL which permits relicensing under\n" "this license.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" " TERMS AND CONDITIONS\n" "\n" " 0. Definitions.\n" "\n" " ""This License"" refers to version 3 of the GNU Affero General Public License.\n" "\n" " ""Copyright"" also means copyright-like laws that apply to other kinds of\n" "works, such as semiconductor masks.\n" "\n" " ""The Program"" refers to any copyrightable work licensed under this\n" "License. Each licensee is addressed as ""you"". ""Licensees"" and\n" """recipients"" may be individuals or organizations.\n" "\n" " To ""modify"" a work means to copy from or adapt all or part of the work\n" "in a fashion requiring copyright permission, other than the making of an\n" "exact copy. The resulting work is called a ""modified version"" of the\n" "earlier work or a work ""based on"" the earlier work.\n" "\n" " A ""covered work"" means either the unmodified Program or a work based\n" "on the Program.\n" "\n" " To ""propagate"" a work means to do anything with it that, without\n" "permission, would make you directly or secondarily liable for\n" "infringement under applicable copyright law, except executing it on a\n" "computer or modifying a private copy. Propagation includes copying,\n" "distribution (with or without modification), making available to the\n" "public, and in some countries other activities as well.\n" "\n" " To ""convey"" a work means any kind of propagation that enables other\n" "parties to make or receive copies. Mere interaction with a user through\n" "a computer network, with no transfer of a copy, is not conveying.\n" "\n" " An interactive user interface displays ""Appropriate Legal Notices""\n" "to the extent that it includes a convenient and prominently visible\n" "feature that (1) displays an appropriate copyright notice, and (2)\n" "tells the user that there is no warranty for the work (except to the\n" "extent that warranties are provided), that licensees may convey the\n" "work under this License, and how to view a copy of this License. If\n" "the interface presents a list of user commands or options, such as a\n" "menu, a prominent item in the list meets this criterion.\n" "\n" " 1. Source Code.\n" "\n" " The ""source code"" for a work means the preferred form of the work\n" "for making modifications to it. ""Object code"" means any non-source\n" "form of a work.\n" "\n" " A ""Standard Interface"" means an interface that either is an official\n" "standard defined by a recognized standards body, or, in the case of\n" "interfaces specified for a particular programming language, one that\n" "is widely used among developers working in that language.\n" "\n" " The ""System Libraries"" of an executable work include anything, other\n" "than the work as a whole, that (a) is included in the normal form of\n" "packaging a Major Component, but which is not part of that Major\n" "Component, and (b) serves only to enable use of the work with that\n" "Major Component, or to implement a Standard Interface for which an\n" "implementation is available to the public in source code form. A\n" """Major Component"", in this context, means a major essential component\n" "(kernel, window system, and so on) of the specific operating system\n" "(if any) on which the executable work runs, or a compiler used to\n" "produce the work, or an object code interpreter used to run it.\n" "\n" " The ""Corresponding Source"" for a work in object code form means all\n" "the source code needed to generate, install, and (for an executable\n" "work) run the object code and to modify the work, including scripts to\n" "control those activities. However, it does not include the work's\n" "System Libraries, or general-purpose tools or generally available free\n" "programs which are used unmodified in performing those activities but\n" "which are not part of the work. For example, Corresponding Source\n" "includes interface definition files associated with source files for\n" "the work, and the source code for shared libraries and dynamically\n" "linked subprograms that the work is specifically designed to require,\n" "such as by intimate data communication or control flow between those\n" "subprograms and other parts of the work.\n" "\n" " The Corresponding Source need not include anything that users\n" "can regenerate automatically from other parts of the Corresponding\n" "Source.\n" "\n" " The Corresponding Source for a work in source code form is that\n" "same work.\n" "\n" " 2. Basic Permissions.\n" "\n" " All rights granted under this License are granted for the term of\n" "copyright on the Program, and are irrevocable provided the stated\n" "conditions are met. This License explicitly affirms your unlimited\n" "permission to run the unmodified Program. The output from running a\n" "covered work is covered by this License only if the output, given its\n" "content, constitutes a covered work. This License acknowledges your\n" "rights of fair use or other equivalent, as provided by copyright law.\n" "\n" " You may make, run and propagate covered works that you do not\n" "convey, without conditions so long as your license otherwise remains\n" "in force. You may convey covered works to others for the sole purpose\n" "of having them make modifications exclusively for you, or provide you\n" "with facilities for running those works, provided that you comply with\n" "the terms of this License in conveying all material for which you do\n" "not control copyright. Those thus making or running the covered works\n" "for you must do so exclusively on your behalf, under your direction\n" "and control, on terms that prohibit them from making any copies of\n" "your copyrighted material outside their relationship with you.\n" "\n" " Conveying under any other circumstances is permitted solely under\n" "the conditions stated below. Sublicensing is not allowed; section 10\n" "makes it unnecessary.\n" "\n" " 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n" "\n" " No covered work shall be deemed part of an effective technological\n" "measure under any applicable law fulfilling obligations under article\n" "11 of the WIPO copyright treaty adopted on 20 December 1996, or\n" "similar laws prohibiting or restricting circumvention of such\n" "measures.\n" "\n" " When you convey a covered work, you waive any legal power to forbid\n" "circumvention of technological measures to the extent such circumvention\n" "is effected by exercising rights under this License with respect to\n" "the covered work, and you disclaim any intention to limit operation or\n" "modification of the work as a means of enforcing, against the work's\n" "users, your or third parties' legal rights to forbid circumvention of\n" "technological measures.\n" "\n" " 4. Conveying Verbatim Copies.\n" "\n" " You may convey verbatim copies of the Program's source code as you\n" "receive it, in any medium, provided that you conspicuously and\n" "appropriately publish on each copy an appropriate copyright notice;\n" "keep intact all notices stating that this License and any\n" "non-permissive terms added in accord with section 7 apply to the code;\n" "keep intact all notices of the absence of any warranty; and give all\n" "recipients a copy of this License along with the Program.\n" "\n" " You may charge any price or no price for each copy that you convey,\n" "and you may offer support or warranty protection for a fee.\n" "\n" " 5. Conveying Modified Source Versions.\n" "\n" " You may convey a work based on the Program, or the modifications to\n" "produce it from the Program, in the form of source code under the\n" "terms of section 4, provided that you also meet all of these conditions:\n" "\n" " a) The work must carry prominent notices stating that you modified\n" " it, and giving a relevant date.\n" "\n" " b) The work must carry prominent notices stating that it is\n" " released under this License and any conditions added under section\n" " 7. This requirement modifies the requirement in section 4 to\n" " ""keep intact all notices"".\n" "\n" " c) You must license the entire work, as a whole, under this\n" " License to anyone who comes into possession of a copy. This\n" " License will therefore apply, along with any applicable section 7\n" " additional terms, to the whole of the work, and all its parts,\n" " regardless of how they are packaged. This License gives no\n" " permission to license the work in any other way, but it does not\n" " invalidate such permission if you have separately received it.\n" "\n" " d) If the work has interactive user interfaces, each must display\n" " Appropriate Legal Notices; however, if the Program has interactive\n" " interfaces that do not display Appropriate Legal Notices, your\n" " work need not make them do so.\n" "\n" " A compilation of a covered work with other separate and independent\n" "works, which are not by their nature extensions of the covered work,\n" "and which are not combined with it such as to form a larger program,\n" "in or on a volume of a storage or distribution medium, is called an\n" """aggregate"" if the compilation and its resulting copyright are not\n" "used to limit the access or legal rights of the compilation's users\n" "beyond what the individual works permit. Inclusion of a covered work\n" "in an aggregate does not cause this License to apply to the other\n" "parts of the aggregate.\n" "\n" " 6. Conveying Non-Source Forms.\n" "\n" " You may convey a covered work in object code form under the terms\n" "of sections 4 and 5, provided that you also convey the\n" "machine-readable Corresponding Source under the terms of this License,\n" "in one of these ways:\n" "\n" " a) Convey the object code in, or embodied in, a physical product\n" " (including a physical distribution medium), accompanied by the\n" " Corresponding Source fixed on a durable physical medium\n" " customarily used for software interchange.\n" "\n" " b) Convey the object code in, or embodied in, a physical product\n" " (including a physical distribution medium), accompanied by a\n" " written offer, valid for at least three years and valid for as\n" " long as you offer spare parts or customer support for that product\n" " model, to give anyone who possesses the object code either (1) a\n" " copy of the Corresponding Source for all the software in the\n" " product that is covered by this License, on a durable physical\n" " medium customarily used for software interchange, for a price no\n" " more than your reasonable cost of physically performing this\n" " conveying of source, or (2) access to copy the\n" " Corresponding Source from a network server at no charge.\n" "\n" " c) Convey individual copies of the object code with a copy of the\n" " written offer to provide the Corresponding Source. This\n" " alternative is allowed only occasionally and noncommercially, and\n" " only if you received the object code with such an offer, in accord\n" " with subsection 6b.\n" "\n" " d) Convey the object code by offering access from a designated\n" " place (gratis or for a charge), and offer equivalent access to the\n" " Corresponding Source in the same way through the same place at no\n" " further charge. You need not require recipients to copy the\n" " Corresponding Source along with the object code. If the place to\n" " copy the object code is a network server, the Corresponding Source\n" " may be on a different server (operated by you or a third party)\n" " that supports equivalent copying facilities, provided you maintain\n" " clear directions next to the object code saying where to find the\n" " Corresponding Source. Regardless of what server hosts the\n" " Corresponding Source, you remain obligated to ensure that it is\n" " available for as long as needed to satisfy these requirements.\n" "\n" " e) Convey the object code using peer-to-peer transmission, provided\n" " you inform other peers where the object code and Corresponding\n" " Source of the work are being offered to the general public at no\n" " charge under subsection 6d.\n" "\n" " A separable portion of the object code, whose source code is excluded\n" "from the Corresponding Source as a System Library, need not be\n" "included in conveying the object code work.\n" "\n" " A ""User Product"" is either (1) a ""consumer product"", which means any\n" "tangible personal property which is normally used for personal, family,\n" "or household purposes, or (2) anything designed or sold for incorporation\n" "into a dwelling. In determining whether a product is a consumer product,\n" "doubtful cases shall be resolved in favor of coverage. For a particular\n" "product received by a particular user, ""normally used"" refers to a\n" "typical or common use of that class of product, regardless of the status\n" "of the particular user or of the way in which the particular user\n" "actually uses, or expects or is expected to use, the product. A product\n" "is a consumer product regardless of whether the product has substantial\n" "commercial, industrial or non-consumer uses, unless such uses represent\n" "the only significant mode of use of the product.\n" "\n" " ""Installation Information"" for a User Product means any methods,\n" "procedures, authorization keys, or other information required to install\n" "and execute modified versions of a covered work in that User Product from\n" "a modified version of its Corresponding Source. The information must\n" "suffice to ensure that the continued functioning of the modified object\n" "code is in no case prevented or interfered with solely because\n" "modification has been made.\n" "\n" " If you convey an object code work under this section in, or with, or\n" "specifically for use in, a User Product, and the conveying occurs as\n" "part of a transaction in which the right of possession and use of the\n" "User Product is transferred to the recipient in perpetuity or for a\n" "fixed term (regardless of how the transaction is characterized), the\n" "Corresponding Source conveyed under this section must be accompanied\n" "by the Installation Information. But this requirement does not apply\n" "if neither you nor any third party retains the ability to install\n" "modified object code on the User Product (for example, the work has\n" "been installed in ROM).\n" "\n" " The requirement to provide Installation Information does not include a\n" "requirement to continue to provide support service, warranty, or updates\n" "for a work that has been modified or installed by the recipient, or for\n" "the User Product in which it has been modified or installed. Access to a\n" "network may be denied when the modification itself materially and\n" "adversely affects the operation of the network or violates the rules and\n" "protocols for communication across the network.\n" "\n" " Corresponding Source conveyed, and Installation Information provided,\n" "in accord with this section must be in a format that is publicly\n" "documented (and with an implementation available to the public in\n" "source code form), and must require no special password or key for\n" "unpacking, reading or copying.\n" "\n" " 7. Additional Terms.\n" "\n" " ""Additional permissions"" are terms that supplement the terms of this\n" "License by making exceptions from one or more of its conditions.\n" "Additional permissions that are applicable to the entire Program shall\n" "be treated as though they were included in this License, to the extent\n" "that they are valid under applicable law. If additional permissions\n" "apply only to part of the Program, that part may be used separately\n" "under those permissions, but the entire Program remains governed by\n" "this License without regard to the additional permissions.\n" "\n" " When you convey a copy of a covered work, you may at your option\n" "remove any additional permissions from that copy, or from any part of\n" "it. (Additional permissions may be written to require their own\n" "removal in certain cases when you modify the work.) You may place\n" "additional permissions on material, added by you to a covered work,\n" "for which you have or can give appropriate copyright permission.\n" "\n" " Notwithstanding any other provision of this License, for material you\n" "add to a covered work, you may (if authorized by the copyright holders of\n" "that material) supplement the terms of this License with terms:\n" "\n" " a) Disclaiming warranty or limiting liability differently from the\n" " terms of sections 15 and 16 of this License; or\n" "\n" " b) Requiring preservation of specified reasonable legal notices or\n" " author attributions in that material or in the Appropriate Legal\n" " Notices displayed by works containing it; or\n" "\n" " c) Prohibiting misrepresentation of the origin of that material, or\n" " requiring that modified versions of such material be marked in\n" " reasonable ways as different from the original version; or\n" "\n" " d) Limiting the use for publicity purposes of names of licensors or\n" " authors of the material; or\n" "\n" " e) Declining to grant rights under trademark law for use of some\n" " trade names, trademarks, or service marks; or\n" "\n" " f) Requiring indemnification of licensors and authors of that\n" " material by anyone who conveys the material (or modified versions of\n" " it) with contractual assumptions of liability to the recipient, for\n" " any liability that these contractual assumptions directly impose on\n" " those licensors and authors.\n" "\n" " All other non-permissive additional terms are considered ""further\n" "restrictions"" within the meaning of section 10. If the Program as you\n" "received it, or any part of it, contains a notice stating that it is\n" "governed by this License along with a term that is a further\n" "restriction, you may remove that term. If a license document contains\n" "a further restriction but permits relicensing or conveying under this\n" "License, you may add to a covered work material governed by the terms\n" "of that license document, provided that the further restriction does\n" "not survive such relicensing or conveying.\n" "\n" " If you add terms to a covered work in accord with this section, you\n" "must place, in the relevant source files, a statement of the\n" "additional terms that apply to those files, or a notice indicating\n" "where to find the applicable terms.\n" "\n" " Additional terms, permissive or non-permissive, may be stated in the\n" "form of a separately written license, or stated as exceptions;\n" "the above requirements apply either way.\n" "\n" " 8. Termination.\n" "\n" " You may not propagate or modify a covered work except as expressly\n" "provided under this License. Any attempt otherwise to propagate or\n" "modify it is void, and will automatically terminate your rights under\n" "this License (including any patent licenses granted under the third\n" "paragraph of section 11).\n" "\n" " However, if you cease all violation of this License, then your\n" "license from a particular copyright holder is reinstated (a)\n" "provisionally, unless and until the copyright holder explicitly and\n" "finally terminates your license, and (b) permanently, if the copyright\n" "holder fails to notify you of the violation by some reasonable means\n" "prior to 60 days after the cessation.\n" "\n" " Moreover, your license from a particular copyright holder is\n" "reinstated permanently if the copyright holder notifies you of the\n" "violation by some reasonable means, this is the first time you have\n" "received notice of violation of this License (for any work) from that\n" "copyright holder, and you cure the violation prior to 30 days after\n" "your receipt of the notice.\n" "\n" " Termination of your rights under this section does not terminate the\n" "licenses of parties who have received copies or rights from you under\n" "this License. If your rights have been terminated and not permanently\n" "reinstated, you do not qualify to receive new licenses for the same\n" "material under section 10.\n" "\n" " 9. Acceptance Not Required for Having Copies.\n" "\n" " You are not required to accept this License in order to receive or\n" "run a copy of the Program. Ancillary propagation of a covered work\n" "occurring solely as a consequence of using peer-to-peer transmission\n" "to receive a copy likewise does not require acceptance. However,\n" "nothing other than this License grants you permission to propagate or\n" "modify any covered work. These actions infringe copyright if you do\n" "not accept this License. Therefore, by modifying or propagating a\n" "covered work, you indicate your acceptance of this License to do so.\n" "\n" " 10. Automatic Licensing of Downstream Recipients.\n" "\n" " Each time you convey a covered work, the recipient automatically\n" "receives a license from the original licensors, to run, modify and\n" "propagate that work, subject to this License. You are not responsible\n" "for enforcing compliance by third parties with this License.\n" "\n" " An ""entity transaction"" is a transaction transferring control of an\n" "organization, or substantially all assets of one, or subdividing an\n" "organization, or merging organizations. If propagation of a covered\n" "work results from an entity transaction, each party to that\n" "transaction who receives a copy of the work also receives whatever\n" "licenses to the work the party's predecessor in interest had or could\n" "give under the previous paragraph, plus a right to possession of the\n" "Corresponding Source of the work from the predecessor in interest, if\n" "the predecessor has it or can get it with reasonable efforts.\n" "\n" " You may not impose any further restrictions on the exercise of the\n" "rights granted or affirmed under this License. For example, you may\n" "not impose a license fee, royalty, or other charge for exercise of\n" "rights granted under this License, and you may not initiate litigation\n" "(including a cross-claim or counterclaim in a lawsuit) alleging that\n" "any patent claim is infringed by making, using, selling, offering for\n" "sale, or importing the Program or any portion of it.\n" "\n" " 11. Patents.\n" "\n" " A ""contributor"" is a copyright holder who authorizes use under this\n" "License of the Program or a work on which the Program is based. The\n" "work thus licensed is called the contributor's ""contributor version"".\n" "\n" " A contributor's ""essential patent claims"" are all patent claims\n" "owned or controlled by the contributor, whether already acquired or\n" "hereafter acquired, that would be infringed by some manner, permitted\n" "by this License, of making, using, or selling its contributor version,\n" "but do not include claims that would be infringed only as a\n" "consequence of further modification of the contributor version. For\n" "purposes of this definition, ""control"" includes the right to grant\n" "patent sublicenses in a manner consistent with the requirements of\n" "this License.\n" "\n" " Each contributor grants you a non-exclusive, worldwide, royalty-free\n" "patent license under the contributor's essential patent claims, to\n" "make, use, sell, offer for sale, import and otherwise run, modify and\n" "propagate the contents of its contributor version.\n" "\n" " In the following three paragraphs, a ""patent license"" is any express\n" "agreement or commitment, however denominated, not to enforce a patent\n" "(such as an express permission to practice a patent or covenant not to\n" "sue for patent infringement). To ""grant"" such a patent license to a\n" "party means to make such an agreement or commitment not to enforce a\n" "patent against the party.\n" "\n" " If you convey a covered work, knowingly relying on a patent license,\n" "and the Corresponding Source of the work is not available for anyone\n" "to copy, free of charge and under the terms of this License, through a\n" "publicly available network server or other readily accessible means,\n" "then you must either (1) cause the Corresponding Source to be so\n" "available, or (2) arrange to deprive yourself of the benefit of the\n" "patent license for this particular work, or (3) arrange, in a manner\n" "consistent with the requirements of this License, to extend the patent\n" "license to downstream recipients. ""Knowingly relying"" means you have\n" "actual knowledge that, but for the patent license, your conveying the\n" "covered work in a country, or your recipient's use of the covered work\n" "in a country, would infringe one or more identifiable patents in that\n" "country that you have reason to believe are valid.\n" "\n" " If, pursuant to or in connection with a single transaction or\n" "arrangement, you convey, or propagate by procuring conveyance of, a\n" "covered work, and grant a patent license to some of the parties\n" "receiving the covered work authorizing them to use, propagate, modify\n" "or convey a specific copy of the covered work, then the patent license\n" "you grant is automatically extended to all recipients of the covered\n" "work and works based on it.\n" "\n" " A patent license is ""discriminatory"" if it does not include within\n" "the scope of its coverage, prohibits the exercise of, or is\n" "conditioned on the non-exercise of one or more of the rights that are\n" "specifically granted under this License. You may not convey a covered\n" "work if you are a party to an arrangement with a third party that is\n" "in the business of distributing software, under which you make payment\n" "to the third party based on the extent of your activity of conveying\n" "the work, and under which the third party grants, to any of the\n" "parties who would receive the covered work from you, a discriminatory\n" "patent license (a) in connection with copies of the covered work\n" "conveyed by you (or copies made from those copies), or (b) primarily\n" "for and in connection with specific products or compilations that\n" "contain the covered work, unless you entered into that arrangement,\n" "or that patent license was granted, prior to 28 March 2007.\n" "\n" " Nothing in this License shall be construed as excluding or limiting\n" "any implied license or other defenses to infringement that may\n" "otherwise be available to you under applicable patent law.\n" "\n" " 12. No Surrender of Others' Freedom.\n" "\n" " If conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot convey a\n" "covered work so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you may\n" "not convey it at all. For example, if you agree to terms that obligate you\n" "to collect a royalty for further conveying from those to whom you convey\n" "the Program, the only way you could satisfy both those terms and this\n" "License would be to refrain entirely from conveying the Program.\n" "\n" " 13. Remote Network Interaction; Use with the GNU General Public License.\n" "\n" " Notwithstanding any other provision of this License, if you modify the\n" "Program, your modified version must prominently offer all users\n" "interacting with it remotely through a computer network (if your version\n" "supports such interaction) an opportunity to receive the Corresponding\n" "Source of your version by providing access to the Corresponding Source\n" "from a network server at no charge, through some standard or customary\n" "means of facilitating copying of software. This Corresponding Source\n" "shall include the Corresponding Source for any work covered by version 3\n" "of the GNU General Public License that is incorporated pursuant to the\n" "following paragraph.\n" "\n" " Notwithstanding any other provision of this License, you have\n" "permission to link or combine any covered work with a work licensed\n" "under version 3 of the GNU General Public License into a single\n" "combined work, and to convey the resulting work. The terms of this\n" "License will continue to apply to the part which is the covered work,\n" "but the work with which it is combined will remain governed by version\n" "3 of the GNU General Public License.\n" "\n" " 14. Revised Versions of this License.\n" "\n" " The Free Software Foundation may publish revised and/or new versions of\n" "the GNU Affero General Public License from time to time. Such new versions\n" "will be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" " Each version is given a distinguishing version number. If the\n" "Program specifies that a certain numbered version of the GNU Affero General\n" "Public License ""or any later version"" applies to it, you have the\n" "option of following the terms and conditions either of that numbered\n" "version or of any later version published by the Free Software\n" "Foundation. If the Program does not specify a version number of the\n" "GNU Affero General Public License, you may choose any version ever published\n" "by the Free Software Foundation.\n" "\n" " If the Program specifies that a proxy can decide which future\n" "versions of the GNU Affero General Public License can be used, that proxy's\n" "public statement of acceptance of a version permanently authorizes you\n" "to choose that version for the Program.\n" "\n" " Later license versions may give you additional or different\n" "permissions. However, no additional obligations are imposed on any\n" "author or copyright holder as a result of your choosing to follow a\n" "later version.\n" "\n" " 15. Disclaimer of Warranty.\n" "\n" " THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n" "APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n" "HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ""AS IS"" WITHOUT WARRANTY\n" "OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n" "THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n" "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n" "IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n" "ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n" "\n" " 16. Limitation of Liability.\n" "\n" " IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n" "THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n" "GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n" "USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n" "DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n" "PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n" "EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n" "SUCH DAMAGES.\n" "\n" " 17. Interpretation of Sections 15 and 16.\n" "\n" " If the disclaimer of warranty and limitation of liability provided\n" "above cannot be given local legal effect according to their terms,\n" "reviewing courts shall apply local law that most closely approximates\n" "an absolute waiver of all civil liability in connection with the\n" "Program, unless a warranty or assumption of liability accompanies a\n" "copy of the Program in return for a fee.\n" "\n" " END OF TERMS AND CONDITIONS\n"; atomes_1.3.1/src/bind.h0000664000175000017500000001370615212624223014370 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file bind.h * @short Binding to the Fortran90 subroutines * @author Sébastien Le Roux */ /* * This header file: 'bind.h' * * Contains: - Binding to the Fortran90 subroutines */ #ifndef BIND_H_ #define BIND_H_ extern void send_label_ (int *, int *, char *); extern int write_xyz_ (char *, int *, int *, int *); extern int read_xyz_ (char *, int *, int *); extern int read_c3d_ (char *, int *); extern int write_c3d_ (char *, int *, int *, int *); extern int read_pdb_ (char *, int *); extern int read_trj_ (char *, int *, int *, int *, int *); extern int read_vas_ (char *, int *, int *, int *, int *); extern double fdmax_ (int *); extern double fkmin_ (int *); extern double oglmax_ (); extern double random3_ (int *); extern int smooth_and_save_ (double *, double *, double *, int *, int *, int *); extern double set_mass_ (int *); extern double set_radius_ (int *, int *); extern double set_neutron_ (int *); extern void profree_ (); extern int chemistry_ (); extern void prep_pos_ (int *, int *); extern void prep_spec_ (double *, int *, int *); extern int prep_data_ (); extern int bonds_ (int *, int *, int *); extern int alloc_data_ (int *, int *, int *); extern void read_pos_ (double *, double *, double *); extern void read_data_ (int *, int *); extern void read_chem_ (double *, double *, double *, double *); extern int add_cells_ (int *, int *, int *); extern int shift_box_center_ (int *, int *, double[3], int *); extern void lattice_ (int *, int *, double[3][3], double[3], double[3], int *, int *, int *); extern void sendcuts_ (int *, int *, double *); extern int rundmtx_ (int *, int *, int *); extern void free_contj_voisj_ (); extern void read_contj_ (int *, int *, int *); extern void read_voisj_ (int *, int *, int *, int *); extern int alloc_contj_voisj_ (int *, int *); extern int bonding_ (int *, int *, int *, int *, double *, double *, char *); extern int molecules_ (int *, int *); extern int bond_angles_ (int *); extern int bond_diedrals_ (int *); extern int dihedrals_for_mol_ (); extern int initrings_ (int *, int *, int *, int *, int *, int *); extern int initchains_ (int *, int *, int *, int *, int *, int *, int *); extern int g_of_r_ (int *, double *, int *); extern int s_of_q_ (double *, double *, int *); extern int cqvf_ (double *, double *, int *, double *, double *); extern int s_of_k_ (int *, int *); extern int s_of_k_t_ (int *, int *, int *, int *, int *, double *, int *, double *, int *); extern int send_gr_ (int *, int *, double *, double *, double *); extern int send_sq_ (int *, int *, double *, double *, double *); extern int g_of_r_fft_ (int *, double *, double *); extern int msd_ (double *, int *); extern int sphericals_ (int *, int *, int *, int *, int *); #endif atomes_1.3.1/src/startup-testing/0000775000175000017500000000000015212624223016451 5ustar lerouxlerouxatomes_1.3.1/src/startup-testing/startup_testing.c0000664000175000017500000002734115212624223022063 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file startup_testing.c * @short Startup testing of OpenGL configuration for the atomes program * @author Sébastien Le Roux */ #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef GTK3 # include #endif #ifdef G_OS_WIN32 # include # include # include # include #else # include # include # ifdef OSX # include # else # include # endif #endif #ifdef G_OS_WIN32 #define APP_EXTENSION ".exe" #else #include #define APP_EXTENSION #endif int opengl_visual = 1; // OpenGL visual: 1 = GTK default, 0 = X11 default (GTK3 + GtkGLArea only), -1 = no OpenGL /*! \fn void printhelp() \brief print basic help */ void printhelp() { char * help = "\nUsage: ATOMES_OPENGL_TESTING\n\n" " atomes OpenGL setup utility\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n"; char bug[20] = "\nReport a bug to <"; char eh[4] = ">\n"; printf("%s", help); printf("%s", bug); printf("%s", PACKAGE_BUGREPORT); printf("%s\n", eh); } /*! \fn void printversion () \brief print version information */ void printversion () { char scanid[80]="\natomes OpenGL setup utility\n"; char bug[20] = "\nReport a bug to <"; char eh[4] = ">\n"; printf ("%s", scanid); printf ("\n%s version : %s\n", PACKAGE, VERSION); printf ("\nGTK+ version : %1d.%1d.%1d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf ("%s", bug); printf ("%s", PACKAGE_BUGREPORT); printf ("%s\n", eh); } /*! \fn void show_the_widgets (GtkWidget * widg) \brief show GtkWidget \param widg the GtkWidget to show */ void show_the_widgets (GtkWidget * widg) { #ifdef GTK4 gtk_widget_set_visible (widg, TRUE); #else gtk_widget_show_all (widg); #endif } /*! \fn void hide_the_widgets (GtkWidget * widg) \brief hide GtkWidget \param widg the GtkWidget to show */ void hide_the_widgets (GtkWidget * widg) { #ifdef GTK4 gtk_widget_set_visible (widg, FALSE); #else gtk_widget_hide (widg); #endif } /*! \fn gboolean is_the_widget_visible (GtkWidget * widg) \brief test if a GtkWidget exist, then return if it is visible or not \param widg the GtkWidget */ gboolean is_the_widget_visible (GtkWidget * widg) { if (GTK_IS_WIDGET(widg)) { return gtk_widget_is_visible (widg); } else { return FALSE; } } /*! \fn GtkWidget * destroy_this_widget (GtkWidget * widg) \brief destroy a GtkWidget \param widg the GtkWidget to destroy */ GtkWidget * destroy_this_widget (GtkWidget * widg) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { if (is_the_widget_visible(widg)) hide_the_widgets (widg); #ifdef GTK3 gtk_widget_destroy (widg); #endif } } return NULL; } /*! \fn gboolean is_GLExtension_Supported (const char * extension) \brief test if this GLExtension is support \param extension the target GLExtension */ gboolean is_GLExtension_Supported (const char * extension) { int i, j; i = j = 0; glGetIntegerv (GL_NUM_EXTENSIONS, & i); for (j=0; j 3.15.1 uses an X11 visual optimized for GTK+'s OpenGL stuff // since revid dae447728d: https://github.com/GNOME/gtk/commit/dae447728d // However, in some cases it simply cannot start an OpenGL context. // This changes to the default X11 visual instead the GTK's default. GdkScreen * screen = gdk_screen_get_default (); GList * visuals = gdk_screen_list_visuals (screen); // printf("n visuals: %u\n", g_list_length(visuals)); GdkX11Screen* x11_screen = GDK_X11_SCREEN (screen); g_assert (x11_screen != NULL); Visual * default_xvisual = DefaultVisual (GDK_SCREEN_XDISPLAY(x11_screen), GDK_SCREEN_XNUMBER(x11_screen)); GdkVisual * default_visual = NULL; // int i = 0; while (visuals != NULL) { GdkVisual * visual = GDK_X11_VISUAL (visuals -> data); if (default_xvisual -> visualid == gdk_x11_visual_get_xvisual(GDK_X11_VISUAL (visuals -> data)) -> visualid) { // printf("Default visual %d\n", i); default_visual = visual; } // i++; visuals = visuals -> next; } gtk_widget_set_visual (win, default_visual); } #endif #endif /*! \fn GtkWidget * create_opengl_window (GApplication * app) \brief create the test OpenGL window \param app the target GApplication */ GtkWidget * create_opengl_window (GApplication * app) { GtkWidget * win = gtk_application_window_new (GTK_APPLICATION(app)); #ifdef GTK3 #ifdef GTKGLAREA #ifdef LINUX if (! opengl_visual) gtk_window_change_gdk_visual (win); #endif #endif #endif GtkWidget * area; #ifdef GTKGLAREA area = gtk_gl_area_new (); #else area = gtk_drawing_area_new (); #endif #ifdef GTK3 gtk_container_add (GTK_CONTAINER(win), area); #else gtk_window_set_child (GTK_WINDOW(win), area); #endif g_signal_connect (G_OBJECT (area), "realize", G_CALLBACK(on_realize), NULL); show_the_widgets (win); return win; } /*! \fn void test_opengl_window (GApplication * app) \brief test possibility to create an OpenGL context \param app the application */ void test_opengl_window (GApplication * app) { GtkWidget * win = create_opengl_window (app); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! opengl_visual) { win = destroy_this_widget (win); win = create_opengl_window (app); } #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 win = destroy_this_widget (win); } /*! \fn G_MODULE_EXPORT void run_opengl_test (GApplication * app, gpointer data) \brief run the OpenGL testing \param app the application to run \param data the associated data pointer */ G_MODULE_EXPORT void run_opengl_test (GApplication * app, gpointer data) { test_opengl_window (app); g_application_quit (app); } int main (int argc, char * argv[]) { gboolean RUNC = TRUE; switch (argc) { case 2: if (g_strcmp0 (argv[1], "-h") == 0 || g_strcmp0 (argv[1], "--help") == 0) { printhelp(); RUNC=FALSE; } else if (g_strcmp0 (argv[1], "-v") == 0 || g_strcmp0 (argv[1], "--version") == 0) { printversion(); RUNC=FALSE; } break; default: break; } #ifdef G_OS_WIN32 #ifndef DEBUG FreeConsole (); #endif #endif if (RUNC) { GtkApplication * TestOpenGLApp; #if GLIB_MINOR_VERSION < 74 TestOpenGLApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.ogl-%d", (int)clock()), G_APPLICATION_FLAGS_NONE); #else TestOpenGLApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.ogl-%d", (int)clock()), G_APPLICATION_DEFAULT_FLAGS); #endif GError * error = NULL; g_application_register (G_APPLICATION(TestOpenGLApp), NULL, & error); g_signal_connect (G_OBJECT(TestOpenGLApp), "activate", G_CALLBACK(run_opengl_test), NULL); int status = g_application_run (G_APPLICATION (TestOpenGLApp), 0, NULL); g_object_unref (TestOpenGLApp); #ifdef DEBUG g_debug ("open_visual = %d, status= %d", opengl_visual, status); #endif switch (opengl_visual) { case 0: // X11 default return -1; break; case -1: // Impossible return -2; break; default: // Gtk default (0) or impossible with fatal error (1) return status; break; } } return 0; } atomes_1.3.1/src/startup-testing/Makefile.am0000664000175000017500000000231415212624223020505 0ustar lerouxleroux# Setup the name of the program to be generated, using: libexec_PROGRAMS = atomes_startup_testing atomes_startup_testing_LDADD = $(LGTK_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) if WINDOWS atomes_startup_testing_LDADD += win_startup.o win_startup.o: ../../misc/win/startup.rc $(WINDRES) $< $@ endif # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) if GTK3 GTK_VERSION=-DGTK3 else GTK_VERSION=-DGTK4 endif # Use AM_CPPFLAGS to define additional preprocessor flags: if WINDOWS AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA else PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" if LINUX AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) else AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) endif endif inc = -I../../ -I../ -I../opengl/ includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(LIBS_CFLAGS) atomes_startup_testing_src = startup_testing.c atomes_startup_testing_includes = config.h version.h clean: -rm -f *.o # List the files required to build the program atomes_startup_testing_SOURCES = $(atomes_startup_testing_src) atomes_1.3.1/src/startup-testing/Makefile.in0000664000175000017500000004760415212624223020531 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ libexec_PROGRAMS = atomes_startup_testing$(EXEEXT) @WINDOWS_TRUE@am__append_1 = win_startup.o subdir = src/startup-testing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(libexecdir)" PROGRAMS = $(libexec_PROGRAMS) am__objects_1 = startup_testing.$(OBJEXT) am_atomes_startup_testing_OBJECTS = $(am__objects_1) atomes_startup_testing_OBJECTS = $(am_atomes_startup_testing_OBJECTS) am__DEPENDENCIES_1 = atomes_startup_testing_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/startup_testing.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(atomes_startup_testing_SOURCES) DIST_SOURCES = $(atomes_startup_testing_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_startup_testing_LDADD = $(LGTK_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) \ $(am__append_1) # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) @GTK3_FALSE@GTK_VERSION = -DGTK4 @GTK3_TRUE@GTK_VERSION = -DGTK3 @LINUX_FALSE@@WINDOWS_FALSE@AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) @LINUX_TRUE@@WINDOWS_FALSE@AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) # Use AM_CPPFLAGS to define additional preprocessor flags: @WINDOWS_TRUE@AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA @WINDOWS_FALSE@PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" inc = -I../../ -I../ -I../opengl/ includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(LIBS_CFLAGS) atomes_startup_testing_src = startup_testing.c atomes_startup_testing_includes = config.h version.h # List the files required to build the program atomes_startup_testing_SOURCES = $(atomes_startup_testing_src) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/startup-testing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/startup-testing/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libexecPROGRAMS: $(libexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-libexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(libexecdir)" && $(am__rm_f) $$files clean-libexecPROGRAMS: -$(am__rm_f) $(libexec_PROGRAMS) atomes_startup_testing$(EXEEXT): $(atomes_startup_testing_OBJECTS) $(atomes_startup_testing_DEPENDENCIES) $(EXTRA_atomes_startup_testing_DEPENDENCIES) @rm -f atomes_startup_testing$(EXEEXT) $(AM_V_CCLD)$(LINK) $(atomes_startup_testing_OBJECTS) $(atomes_startup_testing_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/startup_testing.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @: >>$@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(libexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-generic clean-libexecPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/startup_testing.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libexecPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/startup_testing.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libexecPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libexecPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libexecPROGRAMS install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-libexecPROGRAMS .PRECIOUS: Makefile @WINDOWS_TRUE@win_startup.o: ../../misc/win/startup.rc @WINDOWS_TRUE@ $(WINDRES) $< $@ clean: -rm -f *.o # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/src/opengl/0000775000175000017500000000000015212624223014560 5ustar lerouxlerouxatomes_1.3.1/src/opengl/glview.h0000664000175000017500000002705315212624223016235 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glview.h * @short Variable declarations related to the OpenGL window \n Function declarations related to the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glview.h' * * Contains: - Variable declarations related to the OpenGL window - Function declaration related to the OpenGL window */ #ifndef GL_VIEW_H_ #define GL_VIEW_H_ /*! \def QUALITY \brief Default OpenGL quality (number of polygons) */ #define QUALITY 30 /*! \def DEFAULT_STYLE \brief Default OpenGL style: ball and stick */ #define DEFAULT_STYLE 1 #define DEFAULT_SIZE 1 /*! \def DEFAULT_LIGHTNING \brief Default OpenGL material ligthning */ #define DEFAULT_LIGHTNING 5.00 /*! \def DEFAULT_METALLIC \brief Default OpenGL material metallic */ #define DEFAULT_METALLIC 0.35 /*! \def DEFAULT_ROUGHNESS \brief Default OpenGL material roughness */ #define DEFAULT_ROUGHNESS 0.15 /*! \def DEFAULT_AMBIANT_OCCLUSION \brief Default OpenGL material ambiant occlusion */ #define DEFAULT_AMBIANT_OCCLUSION 0.99 /*! \def DEFAULT_GAMMA_CORRECTION \brief Default OpenGL material gamma correction */ #define DEFAULT_GAMMA_CORRECTION 1.50 /*! \def DEFAULT_OPACITY \brief Default OpenGL opacity */ #define DEFAULT_OPACITY 1.00 /*! \def TEMPLATES \brief Number of material templates */ #define TEMPLATES 7 extern gchar * material_template[TEMPLATES]; extern GLfloat template_parameters[TEMPLATES][5]; // default light data /*! \def MAX_LIGHTS \brief Maximum number of light sources */ #define MAX_LIGHTS 10 /*! \def DEFAULT_INTENSITY \brief Default light intensity */ #define DEFAULT_INTENSITY 30.0 /*! \def NEAR_PLANE \brief Default value for the OpenGL near plane */ #define NEAR_PLANE 1.0 /*! \def FAR_PLANE \brief Default value for the OpenGL far plane */ #define FAR_PLANE 10.0 /*! \def CAMERA_ANGLE_X \brief Default value for the OpenGL camera pitch in ° */ #define CAMERA_ANGLE_X 5.0 // Pitch in degree /*! \def CAMERA_ANGLE_Y \brief Default value for the OpenGL camera heading in ° */ #define CAMERA_ANGLE_Y -25.0 // Heading in degree /*! \def CAMERA_ANGLE_Z \brief Default value for the OpenGL camera toll in ° */ #define CAMERA_ANGLE_Z 0.0 /*! \def ZOOM \brief Default value for the OpenGL zoom */ #define ZOOM 1.5 /*! \def ZOOM_FACTOR \brief Default value for the OpenGL zoom factor */ #define ZOOM_FACTOR 0.05 /*! \def ZOOM_MAX \brief Maximum value for the OpenGL zoom factor */ #define ZOOM_MAX 0.001 /*! \def REFRESH \brief Refresh time for spinning the OpenGL window in milliseconds */ #define REFRESH 10 /*! \def MAX_IN_SELECTION \brief Maximum number of atoms in selection to display measure information */ #define MAX_IN_SELECTION 21 /*! \def COORD_MAX_MENU \brief Maximum number of fragments or molecules to build the related menu items */ #define COORD_MAX_MENU 20 /*! \enum radii */ enum radii { VDW = 0, /*!< 0 */ INC = 1, /*!< 1 */ COV = 2, /*!< 2 */ ION = 3 /*!< 3 */ }; /*! \enum representation */ enum representation { ORTHOGRAPHIC = 0, /*!< 0 */ PERSPECTIVE = 1 /*!< 1 */ }; /*! \enum modes */ enum modes { ANALYZE = 0, /*!< 0 */ EDITION = 1, /*!< 1 */ MOTION = 2, /*!< 2 */ DL_POLY = 3, /*!< 3 */ LAAMPS = 4, /*!< 4 */ CPMD_AI = 5, /*!< 5 */ CP2K_AI = 6, /*!< 6 */ CP2K_QMMM = 7, /*!< 7 */ CP2K_MM = 8 /*!< 8 */ }; #define NUM_STYLES OGL_STYLES+FILLED_STYLES+1 /*! \enum styles */ enum styles { NONE = -1, /*!< -1 */ BALL_AND_STICK = 0, /*!< 0 */ WIREFRAME = 1, /*!< 1 */ SPACEFILL = 2, /*!< 2 */ SPHERES = 3, /*!< 3 */ CYLINDERS = 4, /*!< 4 */ PUNT = 5 /*!< 5 */ }; /*! \enum render */ enum render { FILL = 0, /*!< 0 */ LINE = 1, /*!< 1 */ PTS = 2 /*!< 2 */ }; /*! \enum action */ enum action { ROTATE = 0, /*!< 0 */ MOVE = 1, /*!< 1 */ SELECT = 2, /*!< 2 */ ZOOM_IN_OUT = 3, /*!< 3 */ SPIN = 4 /*!< 4 */ }; /*! \enum mouse_status */ enum mouse_status { CLICKED = 0, /*!< 0 */ RELEASED = 1 /*!< 1 */ }; /*! \enum axisposition */ enum axisposition { TOP_RIGHT = 0, /*!< 0 */ TOP_LEFT = 1, /*!< 1 */ BOTTOM_RIGHT = 2, /*!< 2 */ BOTTOM_LEFT = 3, /*!< 3 */ CENTER = 4, /*!< 4 */ CUSTOM = 5 /*!< 5 */ }; /*! \enum labels */ enum labels { ELEMENT_NAME = 0, /*!< 0 Element name */ SYMBOL = 1, /*!< 1 Element symbol */ SYMBOL_AND_NUM = 2, /*!< 2 Element symbol and ID number */ SYMBOL_AND_IND = 3, /*!< 3 Element symbol and ID number in subscript font */ NUM = 4, /*!< 4 ID number */ ID_IN_MOLECULE = 5 /*!< 5 ID number in molecule */ }; /*! \enum actions */ enum actions { DISPL = 2, /*!< 2 */ REPLACE = 3, /*!< 3 */ REMOVE = 4, /*!< 4 */ INSERT = 5, /*!< 5 */ RANMOVE = 6 /*!< 6 */ }; /*! \enum texts */ enum texts { SIMPLE_TEXT = 0, /*!< 0 */ BETTER_TEXT = 1 /*!< 1 */ }; /*enum material { AMBIENT = 0, DIFFUSE = 1, SPECULAR = 2, EMISSION = 3, OPACITY = 4 };*/ extern GLfloat ** allocdGLfloat (int xal, int yal); extern GLfloat initlights[4][4]; extern gboolean pick; extern glwin * wingl; extern project * proj_gl; extern coord_info * coord_gl; extern box_info * box_gl; extern cell_info * cell_gl; extern int proj_sp; extern int proj_at; extern image * plot; extern int qual; extern int acolorm; extern int pcolorm; extern int step; extern int gColorID[3]; extern int field_object; extern GLenum ogl_texture; extern int get_filled_id (int sid); extern gboolean create_bond (int ac, int bid, int ba, int bb, int sel, double length); extern void draw_cylinder_bond (atom a, atom b, int bid, int ci, int bi); extern void draw_cylinder_bond_to_pick (atom a, atom b, int bid); extern void draw_wireframe_bond (atom a, atom b, int ci, int bi); extern gboolean create_atom (GLUquadricObj * quadric, int aid, int ac, int sp, int sel); extern void draw_vertices (int id); extern void draw_atom_to_pick (atom at); extern void draw_atom (atom at, double al); extern void draw_rings_gl (int se, int ge, int ta, int id); extern void draw_box (); extern void prepare_cuboid (vec3_t position, int id); extern void prepare_axis (); extern void draw (glwin * view); extern void render_all_strings (int glsl, int id); extern void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); ColRGBA init_color (int id, int numid); ColRGBA set_default_color (int z); extern void sort (int dim, int * tab); extern vec3_t get_insertion_coordinates (glwin * view); void setup_bonds (glwin * view); void update (glwin * view); void center_this_molecule (glwin * view); G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data); #ifdef GTK3 G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data); #else G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data); #endif void reshape (glwin * view, int width, int height, gboolean use_ratio); void zoom (glwin * view, int delta); void init_opengl (); void init_camera (project * this_proj); #ifdef GTKGLAREA G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data); #else G_MODULE_EXPORT void on_realize (GtkWidget * area, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data); #endif extern void debug_image (image img, int i); extern distance distance_2d (atom * at, atom * bt); extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern angle angle_2d (atom * at, atom * bt, atom * ct); extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); extern atom * duplicate_atom (atom * at); extern atom * free_atom (atom * at); extern void at_shift (atom * at, float * shift); extern void at_unshift (atom * at, float * shift); extern int check_label_numbers (project * this_proj, int types); extern mat4_t create_axis_matrices (int type); extern mat4_t create_label_matrices (); extern int nbs, nbl, nba; extern void re_create_all_md_shaders (glwin * view); extern void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj); extern void cleaning_shaders (glwin * view, int shader); extern void init_default_shaders (glwin * view); extern void init_shaders(glwin * view); extern object_3d * free_object_3d (object_3d * obj); extern glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj); extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add); extern void update_all_selections (glwin * view, int pi); extern void save_all_selections (glwin * view, int pi); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern void update_selection_tree (glwin * view, int pi, int id); extern void update_all_menus (glwin * view, int nats); extern gboolean is_coord_in_menu (int id, project * this_proj); extern atom_search * free_this_search_data (atom_search * this_search); #ifdef GTK3 extern G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data); #else extern G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * state, gpointer data); #endif extern void popup_selection (glwin * view, double ptx, double pty, int se, int pe, int ai, int bi, int ac); extern void popup_main_menu (glwin * view, double ptx, double pty); typedef struct gl_pop_info gl_pop_info; struct gl_pop_info { int action; double x, y; int pts[5]; }; extern gl_pop_info to_pop; #endif atomes_1.3.1/src/opengl/ogl_shaders.c0000664000175000017500000016660215212624223017231 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_shaders.c * @short OpenGL shaders for the atomes program * @author Sébastien Le Roux */ /* * This file: 'ogl_shaders.c' * * Contains: * - The OpenGL shaders for the atomes program * * Notes: * LLM tools (ChatGPT, Gemini via Antigravity, Claude) were used at few occasions to prepare some sections of this file, including: - To write parts of the ray-tracing shaders - To write parts the gradient background shaders */ #include "global.h" // Point shaders: // const GLchar * point_vertex; // const GLchar * point_colors; //#define GLSL(src) "#version 430 core\n" #src #define GLSL(src) "#version 150\n" #src const GLchar * point_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec3 offset; in float size; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_PointSize = size; gl_Position = mvp * vec4(vert + offset, 1.0); } ); const GLchar * point_color = GLSL( in vec4 vert_color; out vec4 fragment_color; void main() { fragment_color = vert_color; } ); // Basic line shaders // const GLchar * line_vertex; // const GLchar * line_colors; const GLchar * line_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = mvp * vec4(vert, 1.0); } ); const GLchar * line_color = GLSL( in vec4 vert_color; out vec4 fragment_color; void main() { fragment_color = vert_color; } ); const GLchar * line_stipple = GLSL( layout(lines) in; layout(line_strip, max_vertices=2) out; in vec4 vert_color[]; uniform float depth; out float line_pos; out vec4 v_color; void main() { vec2 win_pos_0 = gl_in[0].gl_Position.xy; vec2 win_pos_1 = gl_in[1].gl_Position.xy; gl_Position = gl_in[0].gl_Position; line_pos = 0.0; v_color = vert_color[0]; EmitVertex(); gl_Position = gl_in[1].gl_Position; float psize = 3.0; // No particular reason, just seems right line_pos = psize * length(win_pos_1 - win_pos_0); line_pos *= depth; v_color = vert_color[1]; EmitVertex(); EndPrimitive(); } ); const GLchar * angle_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = vec4(vert, 1.0); } ); const GLchar * angle_stipple = GLSL( layout(triangles) in; layout(line_strip, max_vertices=20) out; in vec4 vert_color[]; uniform float depth; uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; out float line_pos; out vec4 v_color; const float PI = 3.14159265359; mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec3 project (in vec3 coord) { mat4 n_mvp = (mvp * translate_this (coord)); vec4 res = n_mvp * vec4(vec3(0.0), 1.0); if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec3 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, res.z); } else { return vec3 (0.0, 0.0, -1.0); } } float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } void main() { vec3 pa = project (gl_in[0].gl_Position.xyz); vec3 pb = project (gl_in[1].gl_Position.xyz); vec3 pc = project (gl_in[2].gl_Position.xyz); vec2 pd; pd.x = pb.x + 100.0; pd.y = pb.y; float alpha = angle2d (pa.xy, pb.xy, pd); float beta = angle2d (pc.xy, pb.xy, pd); float theta = angle2d (pa.xy, pb.xy, pc.xy); if (pa.y > pb.y && pc.y > pb.y) { beta = min (alpha, beta); } else if (pa.y < pb.y && pc.y < pb.y) { beta = min (-alpha, -beta); // or beta = - max (alpha, beta); } else { vec2 pe; vec2 pf; pe.y = max(pa.y, pc.y); if (pe.y == pa.y) { pe.x = pa.x; pf.y = pc.y; pf.x = pc.x; } else { pe.x = pc.x; pf.y = pa.y; pf.x = pa.x; } beta = angle2d (pe, pb.xy, pd); alpha = angle2d (pf, pb.xy, pd); if (beta + alpha < PI) { beta -= theta; } } float psize = 3.0; // No particular reason, just seems right float tan_factor = tan(theta/10.0); float radial_factor = cos(theta/10.0); float dist = min(length(pb-pa), length(pb-pc)) / 3.0; float x = dist * cos(beta); float y = dist * sin(beta); float tx; float ty; vec2 apos; vec2 bpos; v_color = vert_color[0]; vec4 pos_s = mvp * gl_in[0].gl_Position; vec4 pos_e = mvp * gl_in[1].gl_Position; line_pos = 0.0; gl_Position = pos_s; EmitVertex(); float line_save = psize * length(pos_e.xy - pos_s.xy); line_pos = line_save; line_pos *= depth; gl_Position = pos_e; EmitVertex(); int i; line_pos = -1.0; EmitVertex(); for (i = 0; i < 11; i++) { apos = vec2(x,y); gl_Position = text_proj * (vec4(pb, 1.0) + vec4(apos.x, apos.y, 0.0, 1.0)); EmitVertex(); if (i == 0) { line_pos = line_save; EmitVertex(); } tx = -y; ty = x; x += tx * tan_factor; y += ty * tan_factor; x *= radial_factor; y *= radial_factor; bpos = vec2(x,y); line_pos += psize * length(bpos - apos) / 20.0; } EmitVertex(); line_save = line_pos; line_pos = -1.0; EmitVertex(); gl_Position = pos_e; EmitVertex(); line_pos = line_save; line_pos *= depth; EmitVertex(); pos_s = mvp * gl_in[2].gl_Position; line_pos += depth * psize * length(pos_s.xy - pos_e.xy); gl_Position = pos_s; EmitVertex(); EndPrimitive(); } ); const GLchar * line_stipple_color = GLSL( uniform int factor; uniform uint pattern; in float line_pos; in vec4 v_color; out vec4 fragment_color; void main() { fragment_color = v_color; if (line_pos == -1.0) discard; uint bit = uint(round(line_pos/factor)) % 16U; if ((pattern & (1U< light.cone_angle) { float epsilon = light.spot_inner - light.spot_outer; I = saturate((theta - light.spot_outer) / epsilon); } else { return vec3(0.0001); } } } vec3 V = normalize(-v_pos); vec3 H = normalize(L + V); vec3 N = surfaceNormal; // compute material reflectance float NdL = max(0.0, dot(N, L)); float NdV = max(0.001, dot(N, V)); float NdH = max(0.001, dot(N, H)); float HdV = max(0.001, dot(H, V)); float LdV = max(0.001, dot(L, V)); // fresnel term is common for any, except phong // so it will be calculated inside ifdefs vec3 specfresnel; vec3 specref; if (model == PHONG) { // specular reflectance with PHONG specfresnel = fresnel_factor (specular, NdV); specref = phong_specular (V, L, N, specfresnel, mat.roughness); } else if (model == BLINN) { // specular reflectance with BLINN specfresnel = fresnel_factor (specular, HdV); specref = blinn_specular (NdH, specfresnel, mat.roughness); } else { // specular reflectance with COOK-TORRANCE specfresnel = fresnel_factor(specular, HdV); specref = cooktorrance_specular(model, NdL, NdV, NdH, specfresnel, mat.roughness); } specref *= vec3(NdL); // diffuse is common for any model vec3 diffref = (vec3(1.0) - specfresnel) * phong_diffuse() * NdL; // compute lighting vec3 reflected_light = vec3(0); vec3 diffuse_light = vec3(0); // initial value == constant ambient light // point light vec3 light_color = light.intensity * A * I; reflected_light += specref * light_color; diffuse_light += diffref * light_color; // final result return diffuse_light * mix(mat.albedo, vec3(0.0), mat.metallic) + reflected_light; } vec3 Apply_fog (in vec3 lightColor) { //distance float dist = 0.0; float fogFactor = 0.0; //compute distance used in fog equations if (fog.based == 0) { //plane based dist = abs (surfacePosition.z); } else { //range based dist = length (surfacePosition); } if (fog.mode == 1) // linear fog { fogFactor = (fog.depth.x - dist)/(fog.depth.y - fog.depth.x); } else if (fog.mode == 2) // exponential fog { fogFactor = 1.0 / exp (dist * fog.density); } else { fogFactor = 1.0 / exp((dist * fog.density)* (dist * fog.density)); } fogFactor = saturate (fogFactor); return mix (fog.color, lightColor, fogFactor); } float computeAO(vec3 N) { float ao = 0.5 + 0.5 * N.y; // plage 0.0 -> 1.0 ao = pow(ao, 1.0); // gamma pour adoucir ao *= mat.ambient_occlusion; return saturate(ao); } void main () { // Properties vec3 color; float alpha; if (lights_on == 0) { color = vec3(1.0); alpha = surfaceColor.w; } else { // mix between metal and non-metal material, for non-metal // constant base specular factor of 0.04 grey is used vec3 specular = mix(vec3(0.04), mat.albedo, mat.metallic); color = vec3(0.0); for(int i = 0; i < numLights; i++) { color += Apply_lighting_model (lights_on, AllLights[i], specular); } color = pow(color, vec3(1.0/mat.gamma)); float ao = computeAO(surfaceNormal); color *= ao; alpha = surfaceColor.w * mat.alpha; } if (fog.mode > 0) { vec3 col = Apply_fog(surfaceColor.rgb*color); fragment_color = vec4 (col * alpha, alpha); } else { fragment_color = vec4 ((surfaceColor.rgb*color) * alpha, alpha); } } ); /* =========================================================================== * Perfect-impostor shaders (plot -> ray_tracing). * * Principle: each primitive (sphere, cylinder, cone, cap) is rendered as a * camera-aligned billboard quad (4 vertices, GL_TRIANGLE_STRIP). * The fragment shader performs an exact analytic ray intersection * and additionally writes gl_FragDepth with the depth of the actual hit point, * giving pixel-perfect silhouettes AND correct depth-buffer occlusion between * overlapping atoms / bonds. * * Billboard proxy geometry (draw_billboard_quad, see d_atoms.c): * vertices[0] = (-1,-1, 0) GL_TRIANGLE_STRIP layout: * vertices[1] = (-1,+1, 0) tri 0: verts 0-1-2 * vertices[2] = (+1,-1, 0) tri 1: verts 1-2-3 * vertices[3] = (+1,+1, 0) * indices: 0 1 2 3 * * Instance buffer layouts are IDENTICAL to the non-impostor counterparts * (ATOM_BUFF_SIZE, CYLI_BUFF_SIZE, CAPS_BUFF_SIZE) so no changes are needed * to the buffer-filling code in d_*.c. * ===========================================================================*/ /* -------------------------------------------------------------------------- * Sphere impostor – vertex shader * Build a camera-aligned billboard quad that tightly covers the projected * sphere footprint. All work is done in view space; m_proj is used for * the final clip-space position. * --------------------------------------------------------------------------*/ const GLchar * sphere_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec3 vert; /* billboard corner: (-1,-1,0)…(+1,+1,0) */ in vec3 offset; /* sphere center, world space (from instance data) */ in float radius; /* sphere radius (from instance data) */ in vec4 vertColor; /* RGBA color (from instance data) */ out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* sphere center, view space */ out vec3 imp_b; /* unused for sphere – set to 0 */ out float imp_r; /* sphere radius (world-space units) */ flat out int form_type; /* 0 = sphere */ flat out float clip_r_a; /* sphere clip radius at imp_a endpoint (0 for non-cylinders) */ flat out float clip_r_b; /* sphere clip radius at imp_b endpoint (0 for non-cylinders) */ void main () { surfaceColor = vertColor; /* Sphere centre in view space */ vec3 center_vs = vec3(m_view * vec4(offset, 1.0)); /* View-space radius with scale correction */ float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); /* Billboard quad shifted forward to be in front of the sphere focal plane, and inflated by 2.0x to cover perspective distortion at screen edges. */ // vec3 billboard_vs = center_vs + (2.0 * r_vs) * vec3(vert.x, vert.y, 1.0); float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; vec3 billboard_vs = center_vs + (inflation * r_vs) * vec3(vert.x, vert.y, 1.0); surfacePosition = billboard_vs; imp_a = center_vs; imp_b = vec3(0.0); imp_r = r_vs; form_type = 0; clip_r_a = 0.0; /* spheres have no clipping */ clip_r_b = 0.0; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Cylinder impostor – vertex shader * Build a tight axis-aligned bounding-box billboard from the two cylinder * endpoints (reconstructed from instance data). * --------------------------------------------------------------------------*/ const GLchar * cylinder_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec4 quat; /* rotation quaternion {w,x,y,z} */ in float height; /* full cylinder length (from instance data) */ in float radius; /* cylinder radius */ in vec3 offset; /* cylinder midpoint, world space */ in vec3 vert; /* billboard corner: (-1,-1,0)…(+1,+1,0) */ in vec4 vertColor; /* Sphere clip radii at the two cylinder endpoints (CYLI_BUFF_SIZE+2 layout). r_sphere_a = sphere radius at the atom-side endpoint (imp_a / local z=+0.5h). r_sphere_b = sphere radius at the midpoint-side endpoint (0.0 for half-bonds). */ in float r_sphere_a; in float r_sphere_b; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* endpoint p1, view space */ out vec3 imp_b; /* endpoint p2, view space */ out float imp_r; /* view-space radius */ flat out int form_type; /* 1 = cylinder */ flat out float clip_r_a; /* passed through to fragment for endpoint clipping */ flat out float clip_r_b; vec3 rotate_this (in vec3 v, in vec4 q) { vec3 u = vec3(q.x, q.y, q.z); float s = q.w; return 2.0 * dot(u, v) * u + (s*s - dot(u, u)) * v + 2.0 * s * cross(u, v); } void main () { surfaceColor = vertColor; /* Reconstruct world-space endpoints from instance data */ vec3 local_p1 = vec3(0.0, 0.0, 0.5 * height); vec3 local_p2 = vec3(0.0, 0.0, -0.5 * height); if (quat.w != 0.0) { local_p1 = rotate_this(local_p1, quat); local_p2 = rotate_this(local_p2, quat); } vec3 p1_vs = vec3(m_view * vec4(offset + local_p1, 1.0)); vec3 p2_vs = vec3(m_view * vec4(offset + local_p2, 1.0)); /* View-space radius with scale correction */ float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); /* Dual-endpoint perspective-aware inflation */ float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; float r_vs_bb = inflation * r_vs; /* View-space AABB of both endpoint discs */ float xmin = min(p1_vs.x, p2_vs.x) - r_vs_bb; float xmax = max(p1_vs.x, p2_vs.x) + r_vs_bb; float ymin = min(p1_vs.y, p2_vs.y) - r_vs_bb; float ymax = max(p1_vs.y, p2_vs.y) + r_vs_bb; float z_bb = max(p1_vs.z, p2_vs.z) + r_vs_bb; float bx = mix(xmin, xmax, (vert.x + 1.0) * 0.5); float by = mix(ymin, ymax, (vert.y + 1.0) * 0.5); vec3 billboard_vs = vec3(bx, by, z_bb); surfacePosition = billboard_vs; imp_a = p1_vs; imp_b = p2_vs; imp_r = r_vs; form_type = 1; /* Pass sphere clip radii to the fragment shader. clip_r_a is scaled to view space the same way as imp_r. */ float r_scale = length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); clip_r_a = r_sphere_a * r_scale; clip_r_b = r_sphere_b * r_scale; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Cone impostor – vertex shader * Same as cylinder impostor but accounts for the asymmetric radii: * ra = 0 at p1 (apex, local z = +0.5·height), rb = radius at p2 (base). * --------------------------------------------------------------------------*/ const GLchar * cone_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec4 quat; in float height; in float radius; /* base radius; apex radius is 0 */ in vec3 offset; in vec3 vert; in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* apex, view space */ out vec3 imp_b; /* base center, view space */ out float imp_r; /* base radius, view space */ flat out int form_type; /* 3 = cone */ flat out float clip_r_a; /* 0.0 – cones are arrowheads, no sphere junction */ flat out float clip_r_b; vec3 rotate_this (in vec3 v, in vec4 q) { vec3 u = vec3(q.x, q.y, q.z); float s = q.w; return 2.0 * dot(u, v) * u + (s*s - dot(u, u)) * v + 2.0 * s * cross(u, v); } void main () { surfaceColor = vertColor; /* p1 = apex (ra=0, local z=+0.5h), p2 = base (rb=radius, local z=-0.5h) */ vec3 local_apex = vec3(0.0, 0.0, 0.5 * height); vec3 local_base = vec3(0.0, 0.0, -0.5 * height); if (quat.w != 0.0) { local_apex = rotate_this(local_apex, quat); local_base = rotate_this(local_base, quat); } vec3 p_apex_vs = vec3(m_view * vec4(offset + local_apex, 1.0)); vec3 p_base_vs = vec3(m_view * vec4(offset + local_base, 1.0)); float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; float r_vs_bb = inflation * r_vs; /* Asymmetric AABB: apex contributes radius 0, base contributes r_vs_bb */ float xmin = min(p_apex_vs.x, p_base_vs.x - r_vs_bb); float xmax = max(p_apex_vs.x, p_base_vs.x + r_vs_bb); float ymin = min(p_apex_vs.y, p_base_vs.y - r_vs_bb); float ymax = max(p_apex_vs.y, p_base_vs.y + r_vs_bb); /* z: front face = closest of apex/base z + base radius (conservative bound). */ float z_bb = max(p_apex_vs.z, p_base_vs.z) + r_vs_bb; // float bx = (vert.x > 0.0) ? xmax : xmin; // float by = (vert.y > 0.0) ? ymax : ymin; float bx = mix(xmin, xmax, (vert.x + 1.0) * 0.5); float by = mix(ymin, ymax, (vert.y + 1.0) * 0.5); vec3 billboard_vs = vec3(bx, by, z_bb); surfacePosition = billboard_vs; /* imp_a = apex, imp_b = base centre (matches intersect_cone convention) */ imp_a = p_apex_vs; imp_b = p_base_vs; imp_r = r_vs; form_type = 3; clip_r_a = 0.0; clip_r_b = 0.0; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Cap impostor – vertex shader * A cap is a flat disk; its impostor is a square billboard centered on the * disk center with half-side = radius. * --------------------------------------------------------------------------*/ const GLchar * cap_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec4 quat; in float radius; in vec3 offset; /* cap center, world space */ in vec3 vert; /* billboard corner */ in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* cap center, view space */ out vec3 imp_b; /* cap normal, view space */ out float imp_r; /* cap radius */ flat out int form_type; /* 2 = cap */ flat out float clip_r_a; /* 0.0 – caps are at midpoints, no sphere junction */ flat out float clip_r_b; vec3 rotate_this (in vec3 v, in vec4 q) { vec3 u = vec3(q.x, q.y, q.z); float s = q.w; return 2.0 * dot(u, v) * u + (s*s - dot(u, u)) * v + 2.0 * s * cross(u, v); } void main () { surfaceColor = vertColor; vec3 center_vs = vec3(m_view * vec4(offset, 1.0)); /* Normal of the disk in view space */ vec3 norm_local = vec3(0.0, 0.0, -1.0); if (quat.w != 0.0) norm_local = rotate_this(norm_local, quat); vec3 norm_vs = normalize (mat3(m_view) * norm_local); float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; /* Camera-aligned square billboard, inflated for robustness. */ vec3 billboard_vs = center_vs + (inflation * r_vs) * vec3(vert.x, vert.y, 1.0); surfacePosition = billboard_vs; imp_a = center_vs; imp_b = norm_vs; imp_r = r_vs; form_type = 2; clip_r_a = 0.0; clip_r_b = 0.0; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Perfect-impostor fragment shader. * --------------------------------------------------------------------------*/ const GLchar * full_color_ray = GLSL( int PHONG = 1; int BLINN = 2; int COOK_BLINN = 3; int COOK_BECKMANN = 4; int COOK_GGX = 5; struct Light { int type; vec3 position; vec3 direction; vec3 intensity; float constant; float linear; float quadratic; float cone_angle; float spot_inner; float spot_outer; }; struct Material { vec3 albedo; float metallic; float roughness; float ambient_occlusion; float gamma; float alpha; }; struct Fog { int mode; int based; float density; vec2 depth; vec3 color; }; struct Hit { vec3 pos; vec3 normal; }; uniform Light AllLights[10]; uniform Material mat; uniform Fog fog; uniform int lights_on; uniform int numLights; uniform int view_is_ortho; uniform mat4 m_proj; in vec4 surfaceColor; in vec3 surfacePosition; // Standardized Raytracing parameters in vec3 imp_a; in vec3 imp_b; in float imp_r; flat in int form_type; /* Sphere clip radii at the two cylinder endpoints (passed from cylinder_vertex_ray). Non-zero only for cylinders (form_type==1). When a cylinder hit lies inside the sphere at either endpoint, the fragment is discarded — the sphere impostor handles that region. This eliminates z-fighting at sphere/cylinder junctions without any depth bias, which would break 3D depth perception. */ flat in float clip_r_a; flat in float clip_r_b; out vec4 fragment_color; const float PI = 3.14159265359; const float EPS = 1e-5; // clamping to 0 - 1 range float saturate (in float value) { return clamp(value, 0.0, 1.0); } // phong (lambertian) diffuse term float phong_diffuse() { return (1.0 / PI); } // compute Fresnel specular factor for given base specular and product // product could be NdV or VdH depending on used technique vec3 fresnel_factor (in vec3 f0, in float product) { return mix(f0, vec3(1.0), pow(1.01 - product, 5.0)); } // following functions are copies of UE4 // for computing Cook-Torrance specular lighting terms float D_blinn(in float roughness, in float NdH) { float m = roughness * roughness; float m2 = m * m; float n = 2.0 / m2 - 2.0; return (n + 2.0) / (2.0 * PI) * pow(NdH, n); } float D_beckmann(in float roughness, in float NdH) { float m = roughness * roughness; float m2 = m * m; float NdH2 = NdH * NdH; return exp((NdH2 - 1.0) / (m2 * NdH2)) / (PI * m2 * NdH2 * NdH2); } float D_GGX(in float roughness, in float NdH) { float m = roughness * roughness; float m2 = m * m; float d = (NdH * m2 - NdH) * NdH + 1.0; return m2 / (PI * d * d); } float G_schlick(in float roughness, in float NdV, in float NdL) { float k = roughness * roughness * 0.5; float V = NdV * (1.0 - k) + k; float L = NdL * (1.0 - k) + k; return 0.25 / (V * L); } // simple Phong specular calculation with normalization vec3 phong_specular(in vec3 V, in vec3 L, in vec3 N, in vec3 specular, in float roughness) { vec3 R = reflect(-L, N); float spec = max(0.0, dot(V, R)); float k = 1.999 / (roughness * roughness); return min(1.0, 3.0 * 0.0398 * k) * pow(spec, min(10000.0, k)) * specular; } // simple Blinn specular calculation with normalization vec3 blinn_specular(in float NdH, in vec3 specular, in float roughness) { float k = 1.999 / (roughness * roughness); return min(1.0, 3.0 * 0.0398 * k) * pow(NdH, min(10000.0, k)) * specular; } // Cook-Torrance specular calculation vec3 cooktorrance_specular (in int cook, in float NdL, in float NdV, in float NdH, in vec3 specular, in float roughness) { float D; if (cook == COOK_BLINN) { D = D_blinn(roughness, NdH); } else if (cook == COOK_BECKMANN) { D = D_beckmann(roughness, NdH); } else if (cook == COOK_GGX) { D = D_GGX(roughness, NdH); } float G = G_schlick(roughness, NdV, NdL); float rim = mix(1.0 - roughness * 0.9, 1.0, NdV); return (1.0 / rim) * specular * G * D; } vec3 Apply_lighting_model (in int model, in Light light, in vec3 specular, in vec3 v_pos, in vec3 N) { // L, V, H vectors vec3 L; float A; float I = 1.0; if (light.type == 0) { // Directional light L = normalize (-light.direction); A = 1.0; } else { L = light.position - v_pos; float dist = length (L); L = normalize(L); A = 1.0 / (light.constant + light.linear*dist + light.quadratic*dist*dist); if (light.type == 2) { float theta = dot(L, normalize(light.position-light.direction)); if(theta > light.cone_angle) { float epsilon = light.spot_inner - light.spot_outer; I = saturate((theta - light.spot_outer) / epsilon); } else { return vec3(0.0001); } } } vec3 V = normalize(-v_pos); vec3 H = normalize(L + V); // compute material reflectance float NdL = max(0.0, dot(N, L)); float NdV = max(0.001, dot(N, V)); float NdH = max(0.001, dot(N, H)); float HdV = max(0.001, dot(H, V)); float LdV = max(0.001, dot(L, V)); // Fresnel term is common for any, except Phong // so it will be calculated inside ifdefs vec3 specfresnel; vec3 specref; if (model == PHONG) { // specular reflectance with Phong specfresnel = fresnel_factor (specular, NdV); specref = phong_specular (V, L, N, specfresnel, mat.roughness); } else if (model == BLINN) { // specular reflectance with Blinn specfresnel = fresnel_factor (specular, HdV); specref = blinn_specular (NdH, specfresnel, mat.roughness); } else { // specular reflectance with Cook-Torrance specfresnel = fresnel_factor(specular, HdV); specref = cooktorrance_specular (model, NdL, NdV, NdH, specfresnel, mat.roughness); } specref *= vec3(NdL); // diffuse is common for any model vec3 diffref = (vec3(1.0) - specfresnel) * phong_diffuse() * NdL; // compute lighting vec3 reflected_light = vec3(0); vec3 diffuse_light = vec3(0); // initial value == constant ambient light // point light vec3 light_color = light.intensity * A * I; reflected_light += specref * light_color; diffuse_light += diffref * light_color; // final result return diffuse_light * mix(mat.albedo, vec3(0.0), mat.metallic) + reflected_light; } vec3 Apply_fog (in vec3 lightColor, in vec3 v_pos, in vec3 normal) { // distance float dist = 0.0; float fogFactor = 0.0; // compute distance used in fog equations if (fog.based == 0) { // plane based dist = abs (v_pos.z); } else { // range based dist = length (v_pos); } if (fog.mode == 1) // linear fog { fogFactor = (fog.depth.x - dist)/(fog.depth.y - fog.depth.x); } else if (fog.mode == 2) // exponential fog { fogFactor = 1.0 / exp (dist * fog.density); } else { fogFactor = 1.0 / exp((dist * fog.density)* (dist * fog.density)); } fogFactor = saturate (fogFactor); //float viewAngle = dot(normalize(-v_pos), normalize(normal)); // fogFactor *= mix(0.7, 1.0, viewAngle); return mix (fog.color, lightColor, fogFactor); } bool intersect_sphere(vec3 ro, vec3 rd, vec3 c, float r, out Hit hit) { vec3 oc = ro - c; vec3 cr = cross(rd, oc); float d2 = dot(cr, cr); float r2 = r*r; if (d2 > r2) return false; float tca = -dot(oc, rd); float thc = sqrt(r2 - d2); float t = tca - thc; if (t < EPS) t = tca + thc; if (t < EPS) return false; hit.pos = ro + rd*t; hit.normal = normalize(hit.pos - c); return true; } // Numerically stable cylinder intersection via cross products. bool intersect_cylinder(vec3 ro, vec3 rd, vec3 pa, vec3 pb, float ra, out Hit hit) { vec3 ba = pb - pa; vec3 oc = ro - pa; float baba = dot(ba, ba); float bard = dot(ba, rd); float baoc = dot(ba, oc); vec3 vb = cross(rd, ba); vec3 va = cross(oc, ba); float k2 = dot(vb, vb); if (k2 < 1e-10) return false; // Parallel to axis off-center float k1 = dot(va, vb); float k0 = dot(va, va) - ra * ra * baba; float h = k1 * k1 - k2 * k0; if (h < 0.0) return false; h = sqrt(h); float t = (-k1 - h) / k2; if (t < EPS) t = (-k1 + h) / k2; if (t < EPS) return false; float y = baoc + t * bard; if (y > -EPS && y < baba + EPS) { hit.pos = ro + t * rd; hit.normal = normalize((hit.pos - pa) * baba - ba * y); return true; } return false; } bool intersect_cone(vec3 ro, vec3 rd, vec3 pa, vec3 pb, float ra, out Hit hit) { vec3 ba = pb - pa; vec3 oa = ro - pa; float m0 = dot(ba,ba); float m1 = dot(oa,ba); float m2 = dot(rd,ba); if (m0 < 1e-6) return false; float k = (ra*ra) / m0; float m = dot(rd,ba)/m0; // ~ cos angle of ray with axis float n = dot(oa,ba)/m0; float a = dot(rd,rd) - m2*m2*(1.0+k)/m0; float b = dot(rd,oa) - m2*m1*(1.0+k)/m0; float c = dot(oa,oa) - m1*m1*(1.0+k)/m0; float h = b*b - a*c; if (h < 0.0) return false; h = sqrt(h); float t1 = (-b - h)/a; float t2 = (-b + h)/a; float t = 1e20; if (t1 > EPS) t = t1; if (t2 > EPS && t2 < t) t = t2; if (t == 1e20) return false; float y = m1 + t*m2; if (y > -EPS && y < m0 + EPS) { hit.pos = ro + t * rd; hit.normal = normalize(m0*(hit.pos-pa) - ba*(1.0+k)*y); return true; } return false; } bool intersect_cap(vec3 ro, vec3 rd, vec3 center, vec3 normal, float radius, out Hit hit) { float denom = dot(normal, rd); if (abs(denom) < 1e-6) return false; float t = dot(center - ro, normal) / denom; if (t < EPS) return false; vec3 p = ro + t * rd; vec3 v = p - center; if (dot(v, v) > radius * radius) return false; hit.pos = p; hit.normal = normal; // Orient normal towards ray if (dot(hit.normal, rd) > 0.0) hit.normal = -hit.normal; return true; } bool intersect_scene(vec3 ro, vec3 rd, out Hit hit) { if (form_type == 0) // Sphere { return intersect_sphere(ro, rd, imp_a, imp_r, hit); } else if (form_type == 1) // Cylinder { return intersect_cylinder(ro, rd, imp_a, imp_b, imp_r, hit); } else if (form_type == 2) // Cap { return intersect_cap(ro, rd, imp_a, imp_b, imp_r, hit); } else if (form_type == 3) // Cone { return intersect_cone(ro, rd, imp_a, imp_b, imp_r, hit); } return false; } float computeAO(vec3 pos, vec3 N) { const int AO_SAMPLES = 16; const float EPS_AO = 0.001; float maxDist = imp_r * 8.0; float occlusion = 0.0; vec3 tangent = normalize(abs(N.x) > 0.5 ? cross(N, vec3(0,1,0)) : cross(N, vec3(1,0,0))); vec3 bitangent = cross(N, tangent); for(int i = 0; i < AO_SAMPLES; i++) { float u = float(i)/float(AO_SAMPLES); float v = fract(sin(float(i)*91.345) * 47453.545); float phi = 2.0 * PI * v; float cosTheta = sqrt(1.0 - u); float sinTheta = sqrt(u); vec3 dir = vec3(cos(phi) * sinTheta, sin(phi) * sinTheta, cosTheta); // passage dans l’espace du tangent dir = normalize(dir.x*tangent + dir.y*bitangent + dir.z*N); Hit tmp; if(intersect_scene(pos + N * EPS_AO, dir, tmp)) { float dist = length(tmp.pos - pos); // float weight = 1.0 - saturate(dist / maxDist); float weight = exp(-dist * 2.0 / maxDist); occlusion += weight; } } float ao = 1.0 - (occlusion / float(AO_SAMPLES)); ao = pow(ao, mat.gamma); // softening // Safety clamp between 0.0 and 1.0 return saturate(ao); } float ray_computeAO(vec3 N) { // Up orientation (Y is the up vector) float ao = 0.5 + 0.5 * N.y; // Softening ao = pow(ao, mat.gamma); // Safety clamp between 0.0 and 1.0 return saturate(ao); } void main () { /* Ray from camera origin through billboard fragment (view space) */ vec3 surfaceToCamera = normalize(-surfacePosition); vec3 ray_origin = surfacePosition; vec3 ray_dir; if (view_is_ortho == 0) { ray_dir = vec3(0.0, 0.0, -1.0); // Parallel rays (Orthographic) } else { ray_dir = normalize(surfacePosition); // Perspective } Hit the_hit; bool hit = false; hit = intersect_scene (ray_origin, ray_dir, the_hit); if (! hit) discard; if (dot(the_hit.normal, surfaceToCamera) < 0.0) the_hit.normal = -the_hit.normal; /* Sphere-entry clipping for cylinders (form_type == 1): discard cylinder pixels that lie inside the sphere at each endpoint, so the sphere impostor has exclusive ownership of those pixels. This eliminates z-fighting at sphere/cylinder junctions analytically, with no depth bias that would break 3D depth perception. */ const float CLIP_MARGIN = 1.00f; // Optional extra margin if (clip_r_a > 0.0) { float r_clip = clip_r_a * CLIP_MARGIN; if (dot(the_hit.pos - imp_a, the_hit.pos - imp_a) < r_clip * r_clip) discard; } if (clip_r_b > 0.0) { float r_clip = clip_r_b * CLIP_MARGIN; if (dot(the_hit.pos - imp_b, the_hit.pos - imp_b) < r_clip * r_clip) discard; } vec4 hit_clip = m_proj * vec4(the_hit.pos, 1.0); if (hit_clip.w <= 0.0) discard; gl_FragDepth = clamp((hit_clip.z / hit_clip.w + 1.0) * 0.5, 0.0, 1.0); /* Lighting */ vec3 color; float alpha; if (lights_on == 0) { color = vec3(1.0); alpha = surfaceColor.w; } else { // mix between metal and non-metal material, for non-metal // constant base specular factor of 0.04 grey is used vec3 specular = mix(vec3(0.04), mat.albedo, mat.metallic); color = vec3(0.0); vec3 diffuse = vec3(0.0); int i; for(i = 0; i < numLights; i++) { diffuse += Apply_lighting_model (lights_on, AllLights[i], specular, the_hit.pos, the_hit.normal); } float ao = computeAO (the_hit.pos, the_hit.normal) * ray_computeAO (the_hit.normal); diffuse *= (ao * mat.ambient_occlusion); vec3 lit_color = pow(diffuse,vec3(1.0/mat.gamma)); color = surfaceColor.rgb*lit_color; alpha = surfaceColor.w*mat.alpha; } if (fog.mode > 0) { vec3 col = Apply_fog(color, the_hit.pos, the_hit.normal); fragment_color = vec4 (col * alpha, alpha); } else { fragment_color = vec4 (color * alpha, alpha); } } ); /* =========================================================================== * End of perfect-impostor shaders * ===========================================================================*/ const GLchar * angstrom_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; uniform int tilted; in vec2 vert; in vec2 tcoord; in vec3 offset; in vec3 at_a; in vec3 at_b; out vec2 text_coords; float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } mat4 rotate_this_z (in float theta) { return mat4 ( vec4( cos(theta), sin(theta), 0.0, 0.0), vec4(-sin(theta), cos(theta), 0.0, 0.0), vec4( 0.0, 0.0, 1.0, 0.0), vec4( 0.0, 0.0, 0.0, 1.0)); } mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord, vec4 shift) { mat4 n_mvp = mvp * translate_this (coord) * un_view; vec4 res = n_mvp * vec4(vec3(0.0), 1.0); res = translate_this (vec3(shift.x/viewp.z, shift.y/viewp.w, shift.z)) * res; if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; float rot_angle = 0.0; vec4 shift = pos_shift; if (tilted > 0) { vec3 pos_a = project (at_a, vec4(0.0)).xyz; vec3 pos_b = project (at_b, vec4(0.0)).xyz; vec2 pa; vec2 pb; vec2 pc; pa.y = max(pos_a.y, pos_b.y); if (pa.y == pos_a.y) { pa.x = pos_a.x; pb.x = pos_b.x; pb.y = pos_b.y; } else { pa.x = pos_b.x; pb.x = pos_a.x; pb.y = pos_a.y; } pc.x = pa.x; pc.y = pb.y; rot_angle = - angle2d (pa, pb, pc); if (pa.x < pb.x) { rot_angle = -rot_angle; shift.x = -shift.x; } } vec4 pos; if (rot_angle != 0.0) { pos = project(offset, shift) + vec4(vert, 0.0, 1.0) * rotate_this_z(rot_angle); } else { pos = project(offset, shift) + vec4(vert, 0.0, 1.0); } gl_Position = text_proj * pos; } ); const GLchar * degree_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; uniform int tilted; in vec2 vert; in vec2 tcoord; in vec3 offset; in vec3 at_a; in vec3 at_b; in vec3 at_c; const float PI = 3.14159265359; out vec2 text_coords; float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } mat4 rotate_this_z (in float theta) { return mat4 ( vec4( cos(theta), sin(theta), 0.0, 0.0), vec4(-sin(theta), cos(theta), 0.0, 0.0), vec4( 0.0, 0.0, 1.0, 0.0), vec4( 0.0, 0.0, 0.0, 1.0)); } mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord, vec4 shift) { mat4 n_mvp = mvp * translate_this (coord) * un_view; vec4 res = n_mvp * vec4(vec3(0.0), 1.0); res = translate_this (vec3(shift.x/viewp.z, shift.y/viewp.w, shift.z)) * res; if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; float rot_angle = 0.0; vec4 shift = pos_shift; vec3 pos_a = project (at_a, vec4(0.0)).xyz; vec3 pos_b = project (at_b, vec4(0.0)).xyz; vec3 pos_c = project (at_c, vec4(0.0)).xyz; vec2 pa = pos_a.xy; vec2 pb = pos_b.xy; vec2 pc = pos_c.xy; vec2 pd; float theta = angle2d (pa, pb, pc); pd.x = pb.x + 100.0; pd.y = pb.y; float alpha; float beta; float gamma; vec2 sign; sign.x = 1.0; sign.y = 1.0; beta = angle2d (pa, pb, pd); alpha = angle2d (pc, pb, pd); if (pa.y > pb.y && pc.y > pb.y) { gamma = min (alpha, beta); } else if (pa.y < pb.y && pc.y < pb.y) { gamma = min (-alpha, -beta); } else { vec2 pe; vec2 pf; pe.y = max(pa.y, pc.y); if (pe.y == pa.y) { pe.x = pa.x; pf.y = pc.y; pf.x = pc.x; } else { pe.x = pc.x; pf.y = pa.y; pf.x = pa.x; } beta = angle2d (pe, pb, pd); gamma = beta; alpha = angle2d (pf, pb, pd); if (beta + alpha < PI) { gamma -= theta; } } rot_angle = PI/2.0 - gamma - theta/2.0; vec3 a = at_b + ((at_a - at_b)/3.0 + (at_c - at_b)/3.0)/2.0; vec4 b = project (a, shift); float dist = min(length(pb-pa), length(pb-pc)) / 3.0; float x = pb.x + (shift.x+dist) * sin(rot_angle); float y = pb.y + (shift.y+dist) * cos(rot_angle); if (pa.y < pb.y && pc.y < pb.y) { gamma = - max (alpha, beta); } else if (pa.y > pb.y || pc.y > pb.y) { gamma += PI; } rot_angle = PI/2.0 - gamma - theta/2.0; vec3 c = vec3(x, y, b.z); vec4 pos = vec4(c, 1.0); if (tilted > 0) { rot_angle += PI; pos += vec4(vert, 0.0, 1.0) * rotate_this_z(rot_angle); } else { pos += vec4(vert, 0.0, 1.0); } gl_Position = text_proj * pos; } ); const GLchar * string_color = GLSL( uniform sampler2DRect tex; uniform vec4 vert_color; uniform vec4 viewp; uniform int tilted; in vec2 text_coords; out vec4 fragment_color; void main() { vec2 coords = text_coords; vec4 color = vert_color * vec4(1.0, 1.0, 1.0, texture (tex, text_coords).r); fragment_color = vec4(color.rgb * color.a, color.a); } ); const GLchar * string_color_2d = GLSL( uniform sampler2DRect tex; uniform vec4 vert_color; in vec2 text_coords; out vec4 fragment_color; void main() { vec4 sampled = vec4(1.0, 1.0, 1.0, texture (tex, text_coords).r); vec4 color = vert_color * sampled; fragment_color = vec4(color.rgb * color.a, color.a); } ); const GLchar * background_vertex = GLSL( in vec2 vert; out vec2 fragment_coord; void main () { fragment_coord = 0.5*vert + 0.5; gl_Position = vec4(vert, 0.0, 1.0); } ); const GLchar * background_linear = GLSL( in vec2 fragment_coord; uniform vec4 first_color; uniform vec4 second_color; uniform int gradient; uniform float position; out vec4 fragment_color; void main () { float horizontal = 1.0 - fragment_coord.x; float vertical = fragment_coord.y; float factor; switch (gradient) { case 1: // Linear right to left factor = clamp ((horizontal - position) * 2.0 + 0.5, 0.0, 1.0); break; case 2: // Linear bottom right to top left factor = clamp ((0.5*(horizontal + vertical) - position) * 2.0 + 0.5, 0.0, 1.0); break; case 3: // Linear bottom left to top right factor = clamp ((0.5*(fragment_coord.x + vertical) - position) * 2.0 + 0.5, 0.0, 1.0); break; default: // Linear top to bottom factor = clamp ((vertical - position) * 2.0 + 0.5, 0.0, 1.0); break; } fragment_color = mix(first_color, second_color, factor); } ); const GLchar * background_circular = GLSL( in vec2 fragment_coord; uniform vec4 first_color; uniform vec4 second_color; uniform int gradient; uniform float position; out vec4 fragment_color; void main () { float dist; float factor; vec2 center; switch (gradient) { case 0: // Circular right to left center = vec2 (0.0, 0.5); // left side centered vertically dist = distance (fragment_coord, center) + position - 0.5; // sqrt((1.0 - 0.0)^2 + (1.0 - 0.5)^2) ~ 1.118 factor = clamp (dist / 1.118, 0.0, 1.0); break; case 1: // Circular left to right center = vec2 (1.0, 0.5); // right side centered vertically dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.118, 0.0, 1.0); break; case 2: // Top to bottom center = vec2 (0.5, 1.0); // right side centered vertically dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.118, 0.0, 1.0); break; case 3: // Bottom to top center = vec2 (0.5, 0.0); // right side centered vertically dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.118, 0.0, 1.0); break; case 4: // Circular bottom right to top left center = vec2 (1.0, 0.0); // bottom right corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; case 5: // Circular bottom left to top right center = vec2 (0.0, 0.0); // bottom right corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; case 6: // Circular top right to bottom left center = vec2 (1.0, 1.0); // top right corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; case 7: // Circular top left to bottom right center = vec2 (0.0, 1.0); // top left corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; default: center = vec2 (0.5, 0.5); // from the center dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 0.707, 0.0, 1.0); break; } fragment_color = mix (first_color, second_color, factor); } ); atomes_1.3.1/src/opengl/ogl_shading.h0000664000175000017500000001206415212624223017212 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_shading.h * @short Variable declarations related to GLSL programs \n Data structure declarations related to GLSL programs * @author Sébastien Le Roux */ /* * This header file: 'ogl_shading.h' * * Contains: - Variable declarations related to GLSL programs - Data structure declarations related to GLSL programs */ #ifndef OGL_SHADING_H_ #define OGL_SHADING_H_ /*! \enum glsl_styles */ enum glsl_styles { GLSL_POINTS = 0, /*!< 0 */ GLSL_SPHERES = 1, /*!< 1 */ GLSL_LINES = 2, /*!< 2 */ GLSL_CYLINDERS = 3, /*!< 3 */ GLSL_CAPS = 4, /*!< 4 */ GLSL_POLYEDRA = 5, /*!< 5 */ GLSL_STRING = 6, /*!< 6 */ GLSL_LIGHT = 7, /*!< 7 */ GLSL_BACK = 8 /*!< 8 */ }; #define POLY_BUFF_SIZE 10 // p(x,y,z), n(x,y,z), color (r,g,b,a) #define LINE_BUFF_SIZE 7 // p(x,y,z), color (r,g,b,a) #define CYLI_BUFF_SIZE 13 // p(x,y,z), length, rad, quat(w,x,y,z), color (r,g,b,a) #define CAPS_BUFF_SIZE 12 // p(x,y,z), rad, quat(w,x,y,z), color (r,g,b,a) #define ATOM_BUFF_SIZE 8 // p(x,y,z), rad, color (r,g,b,a) #define CHAR_BUFF_SIZE 4 // p(x,y), t(x,y) // Points extern const GLchar * point_vertex; extern const GLchar * point_color; // Basic lines extern const GLchar * line_vertex; extern const GLchar * line_color; extern const GLchar * line_stipple; extern const GLchar * line_stipple_color; extern const GLchar * angle_vertex; extern const GLchar * angle_stipple; extern const GLchar * angle_color; extern const GLchar * angstrom_vertex; extern const GLchar * degree_vertex; // Triangles: Multiple lights + Materials + Transparency shaders extern const GLchar * full_vertex; extern const GLchar * full_color; extern const GLchar * full_color_ray; // Sphere extern const GLchar * sphere_vertex; extern const GLchar * sphere_vertex_ray; // Cylinder and caps extern const GLchar * cylinder_vertex; extern const GLchar * cylinder_vertex_ray; extern const GLchar * cone_vertex; extern const GLchar * cone_vertex_ray; extern const GLchar * cap_vertex; extern const GLchar * cap_vertex_ray; extern const GLchar * string_vertex; extern const GLchar * string_color; extern const GLchar * string_color_2d; extern const GLchar * background_vertex; extern const GLchar * background_linear; extern const GLchar * background_circular; /*! \typedef object_3d */ typedef struct object_3d object_3d; struct object_3d { int quality; /*!< OpenGL rendering quality */ int num_vertices; /*!< Number of vertices to render, if any */ int vert_buffer_size; /*!< Buffer size for the vertices, if any */ float * vertices; /*!< Vertices to render, if any */ int num_indices; /*!< Number of indices, if any */ int ind_buffer_size; /*!< Buffer size for the indices, if any */ int * indices; /*!< Indices to render, if any */ int num_instances; /*!< Number of instances, if any */ int inst_buffer_size; /*!< Buffer size for the instances, if any */ float * instances; /*!< Instances to render, if any */ GLuint texture; /*!< Texture ID, if any */ float shift[4]; /*!< 0 to 2, texture position shift, if any: \n (0 = x_shift, 1 = y_shift, 2 = z_shift), \n 3 visibility (0 = normal, 1 = always) */ }; /*! \typedef glsl_program */ typedef struct glsl_program glsl_program; struct glsl_program { int id; /*!< The GLSL program ID */ int object; /*!< The number of 3D object(s) to render */ GLuint vertex_shader; /*!< The vertex shader ID */ GLuint geometry_shader; /*!< The geometry shader ID */ GLuint fragment_shader; /*!< The fragment shader ID */ GLenum vert_type; /*!< The type of vertex */ int draw_type; /*!< In \enum glsl_styles */ gboolean draw_instanced; /*!< 0 = single instance, 1 = multiple instances */ GLuint vao; /*!< Vertex object array ID */ GLuint * vbo; /*!< Binding buffer(s) */ GLuint * array_pointer; /*!< Vertex pointer(s) */ GLuint * uniform_loc; /*!< Uniform location pointer(s) */ GLuint * light_uniform; /*!< Light(s) uniform */ object_3d * obj; /*!< The 3D object(s) to render */ float line_width; /*!< Wireframe line width */ ColRGBA * col; /*!< String color */ }; extern void allocate_instances (object_3d * object); #endif atomes_1.3.1/src/opengl/ogl_utils.c0000664000175000017500000001620515212624223016731 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_utils.c * @short 2D and 3D calculations utilities for distances and angles * @author Sébastien Le Roux */ /* * This file: 'ogl_utils.c' * * Contains: * - 2D and 3D calculations utilities for distances and angles * * List of functions: double arc_cos (double val); distance distance_2d (atom * at, atom * bt); distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); angle angle_2d (atom * at, atom * bt, atom * ct); angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); */ #include "global.h" #include "interface.h" #include "glview.h" #include "dlp_field.h" extern gboolean field_color; extern ColRGBA init_color (int id, int numid); /*! \fn distance distance_2d (atom * at, atom * bt) \brief distance between atom a and b in 2D \param at atom a \param bt atom b */ distance distance_2d (atom * at, atom * bt) { distance dist; dist.pbc = FALSE; dist.x = at -> x - bt -> x; dist.y = at -> y - bt -> y; dist.z = 0.0; dist.length = sqrt(dist.x*dist.x + dist.y*dist.y); return dist; } /*! \fn distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt) \brief distance between atom a and b in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b */ distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt) { distance dist; double tmp; vec3_t dij; dist.pbc = FALSE; dist.x = at -> x - bt -> x; dist.y = at -> y - bt -> y; dist.z = at -> z - bt -> z; dist.length = sqrt(dist.x*dist.x + dist.y*dist.y + dist.z*dist.z); if (cell -> pbc) { if (cell -> box[mdstep].param[1][0] == 90.0 && cell -> box[mdstep].param[1][1] == 90.0 && cell -> box[mdstep].param[1][2] == 90.0) { dij.x = dist.x - round((at -> x-bt -> x)/cell -> box[mdstep].param[0][0]) * cell -> box[mdstep].param[0][0]; dij.y = dist.y - round((at -> y-bt -> y)/cell -> box[mdstep].param[0][1]) * cell -> box[mdstep].param[0][1]; dij.z = dist.z - round((at -> z-bt -> z)/cell -> box[mdstep].param[0][2]) * cell -> box[mdstep].param[0][2]; } else { vec3_t a = vec3(at -> x, at -> y, at -> z); vec3_t b = vec3(bt -> x, bt -> y, bt -> z); vec3_t af = m4_mul_coord (cell -> box[mdstep].cart_to_frac, a); vec3_t bf = m4_mul_coord (cell -> box[mdstep].cart_to_frac, b); vec3_t nij = v3_sub(af, bf); nij.x -= round(nij.x); nij.y -= round(nij.y); nij.z -= round(nij.z); dij = m4_mul_coord (cell -> box[mdstep].frac_to_cart, nij); } tmp = v3_length(dij); if (dist.length - tmp > 0.001) { dist.pbc = TRUE; dist.x = dij.x; dist.y = dij.y; dist.z = dij.z; dist.length = tmp; } } return dist; } /*! \fn double arc_cos (double val) \brief compute arc cosinus \param val the angle */ double arc_cos (double val) { if (val < -1.0) { return acos(-2.0 - val) * 180.0 / pi; } else if (val > 1.0) { return acos(2.0 - val) * 180.0 / pi; } else { return acos(val) * 180.0 / pi; } } /*! \fn angle angle_2d (atom * at, atom * bt, atom * ct) \brief angle between atom a, b and c in 2D \param at atom a \param bt atom b \param ct atom c */ angle angle_2d (atom * at, atom * bt, atom * ct) { angle theta; distance dist_a = distance_2d (bt, at); distance dist_b = distance_2d (bt, ct); theta.pbc = FALSE; double v = 0.0; v = dist_a.x*dist_b.x + dist_a.y*dist_b.y; theta.angle = arc_cos(v/(dist_a.length*dist_b.length)); return theta; } /*! \fn angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct) \brief angle between atom a, b and c in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c */ angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct) { angle theta; distance dist_a = distance_3d (cell, mdstep, bt, at); distance dist_b = distance_3d (cell, mdstep, bt, ct); theta.pbc = FALSE; if (dist_a.pbc || dist_b.pbc) theta.pbc = TRUE; double v = 0.0; v = dist_a.x*dist_b.x + dist_a.y*dist_b.y + dist_a.z*dist_b.z; theta.angle = arc_cos(v/(dist_a.length*dist_b.length)); return theta; } /*! \fn angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) \brief dihedral between atom a, b, c and d in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c \param dt atom d */ angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) { angle phi; distance dist_a = distance_3d (cell, mdstep, at, bt); distance dist_b = distance_3d (cell, mdstep, bt, ct); distance dist_c = distance_3d (cell, mdstep, ct, dt); vec3_t u, v; if (dist_a.pbc || dist_b.pbc || dist_c.pbc) phi.pbc = TRUE; u = vec3(dist_a.y*dist_b.z - dist_a.z*dist_b.y, dist_a.z*dist_b.x - dist_a.x*dist_b.z, dist_a.x*dist_b.y - dist_a.y*dist_b.x); v = vec3(dist_b.y*dist_c.z - dist_b.z*dist_c.y, dist_b.z*dist_c.x - dist_b.x*dist_c.z, dist_b.x*dist_c.y - dist_b.y*dist_c.x); if (v3_length(u) == 0.0 || v3_length(v) == 0.0) { phi.angle = 0.0; } else { phi.angle = arc_cos(v3_dot(u, v)/(v3_length(u)*v3_length(v))); } return phi; } /*! \fn angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) \brief inversion angle between atom a, b, c and d in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c \param dt atom d */ angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) { angle inv; distance dist_a = distance_3d (cell, mdstep, bt, at); distance dist_b = distance_3d (cell, mdstep, ct, at); distance dist_c = distance_3d (cell, mdstep, at, dt); vec3_t u, v, w, x; if (dist_a.pbc || dist_b.pbc || dist_c.pbc) inv.pbc = TRUE; u = vec3(dist_b.x, dist_b.y, dist_b.z); v = vec3(dist_c.x, dist_c.y, dist_c.z); w = v3_cross (u, v); x = vec3(dist_a.x, dist_a.y, dist_a.z); if (v3_length(w) == 0.0 || v3_length(x) == 0.0) { inv.angle = 0.0; } else { inv.angle = fabs(90.0 - arc_cos(v3_dot(w, x)/(v3_length(w)*v3_length(x)))); } return inv; } atomes_1.3.1/src/opengl/glwin.h0000664000175000017500000011605415212624223016060 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glwin.h * @short Variable declarations related the OpenGL window \n Data structure declarations related the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glwin.h' * * Contains: - Variable declarations related the OpenGL window - Data structure declarations related the OpenGL window */ #ifndef GLWIN_H_ #define GLWIN_H_ #include "ogl_shading.h" #ifndef GL_COLOR_SUM_EXT # define GL_COLOR_SUM_EXT 0x8458 #endif #ifndef GL_LIGHT_MODEL_COLOR_CONTROL_EXT # define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #endif #ifndef GL_SEPARATE_SPECULAR_COLOR_EXT # define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif #ifndef GL_TEXTURE_RECTANGLE_ARB # define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #endif #define BOX 0 #define AXIS 1 #define OGL_RENDERS 3 #define OGL_BOX 8 #define OGL_AXIS 13 #define OGL_REPS 2 #define ATOM_MAPS 7 #define POLY_MAPS 7 #define OGL_COORDS 5 #define OGL_RINGS 12 #define NUM_COLORS 64 #define NINPUTS 6 #define NSELECTION 7 #define NGLOBAL_SHADERS 15 /*! \enum object_types */ enum object_types { FROM_DATA = -8, /*!< -8 */ FROM_SPEC = -7, /*!< -7 */ FROM_MOL = -6, /*!< -6 */ FROM_FRAG = -5, /*!< -5 */ FROM_COORD_P = -4, /*!< -4 */ FROM_COORD_T = -3, /*!< -3 */ FROM_LIBRARY = -2, /*!< -2 */ FROM_PROJECT = -1 /*!< -1 */ }; /*! \enum shaders \brief The different types of shaders in the atomes program */ enum shaders { ATOMS = 0, /*!< 0 */ BONDS = 1, /*!< 1 */ SELEC = 2, /*!< 2 */ POLYS = 3, /*!< 3 */ MDBOX = 4, /*!< 4 */ MAXIS = 5, /*!< 5 */ ARROW = 6, /*!< 6 */ RINGS = 7, /*!< 7 */ PICKS = 8, /*!< 8 */ LABEL = 9, /*!< 9 */ MEASU = 10, /*!< 10 */ LIGHT = 11, /*!< 11 */ SLABS = 12, /*!< 12 */ VOLMS = 13, /*!< 13 */ BACKG = 14 /*!< 14 */ }; #define FILLED_STYLES 4 #define OGL_STYLES 6 extern char * text_styles[OGL_STYLES]; extern char * text_filled[FILLED_STYLES]; /*! \typedef angle */ typedef struct angle angle; struct angle { double angle; /*!< the angle value */ gboolean pbc; /*!< are PBC used ? 1 = yes, 0 = no */ }; /*! \typedef distance */ typedef struct distance distance; struct distance { double length; /*!< the distance value */ double x; /*!< x vector component */ double y; /*!< y vector component */ double z; /*!< z vector component */ gboolean pbc; /*!< are PBC used ? 1 = yes, 0 = no */ }; typedef struct atom_data atom_data; struct atom_data { gboolean show[2]; gboolean label[2]; gboolean pick[2]; gboolean cloned; int style; }; typedef struct spinner spinner; struct spinner { GtkWidget * win; GtkWidget * right; GtkWidget * left; GtkWidget * up; GtkWidget * down; GtkWidget * stop; }; typedef struct sequencer sequencer; struct sequencer { GtkWidget * win; GtkWidget * first; GtkWidget * last; GtkWidget * prev; GtkWidget * next; GtkWidget * jump; GtkWidget * play; GtkWidget * stop; GtkWidget * loop; GtkWidget * fast; GtkWidget * slow; }; typedef struct recorder recorder; struct recorder { GtkWidget * win; GtkWidget * rec; GtkWidget * stop; }; /*! \typedef Light \brief Light parameters for OpenGL rendering */ typedef struct Light Light; struct Light { int type; /*!< Light type: 0 = directional, 1 = point, 2 = spot light */ int fix; /*!< Light fix: 0 = fix for the view, 1 = fix for the molecule */ int show; /*!< Show (1) or hide light (0) */ vec3_t position; /*!< Light position */ vec3_t direction; /*!< Light direction for directional and spot lights */ vec3_t intensity; /*!< Light colors */ vec3_t attenuation; /*!< Constant, linear and quadratic attenuation */ vec3_t spot_data; /*!< Angle, inner and outer spot light cutoff */ }; /*! \typedef Lightning \brief Lightning data for OpenGL rendering */ typedef struct Lightning Lightning; struct Lightning { int lights; /*!< The number of lights */ Light ** spot; /*!< The lights */ }; /*! \typedef Material \brief Material parameters for OpenGL rendering */ typedef struct Material Material; struct Material { int predefine; /*!< Cutsom (0) or template (1) */ vec3_t albedo; /*!< Albedo components */ // 0 = lightning model // 2 = metallic // 3 = roughness // 4 = ambient occlusion // 5 = gamma // 6 = opacity GLfloat param[6]; /*!< Material parameters \n 0 = lightning model, \n 1 = metallic, \n 2 = roughness, \n 3 = ambient occlusion, \n 4 = gamma, \n 5 = opacity*/ }; /*! \typedef Fog \brief Fog parameters for OpenGL rendering */ typedef struct Fog Fog; struct Fog { int mode; /*!< Fog mode in: none, linear (LINEAR), exponential (EXP) and exponential squared (EXP2) */ int based; /*!< Fog type: plane based (0) or range based (1) */ float density; /*!< Fog density */ float depth[2]; /*!< Fog depth: 0 = start value, 1 = end value */ vec3_t color; /*!< Fog color */ }; /*! \typedef screen_string \brief OpenGL string rendering */ typedef struct screen_string screen_string; struct screen_string { int id; /*!< The string unique ID */ int type; /*!< The type of string (3= labels, 4 = bonds, 5= angles) */ char * word; /*!< The text to be displayed */ ColRGBA col; /*!< Color of the string */ float shift[4]; /*!< The shifts (if any) on x, y, z, then visibility */ int num_instances; /*!< The number of instances for that string */ float * instances; /*!< The list of instances for that string */ screen_string * prev; screen_string * last; }; typedef struct screen_label screen_label; struct screen_label { int position; int render; int scale; gchar * font; int n_colors; ColRGBA * color; double shift[3]; screen_string * list; }; typedef struct atom_in_selection atom_in_selection; struct atom_in_selection { int id; int sp; atom_in_selection * prev; atom_in_selection * next; }; typedef struct atom_selection atom_selection; struct atom_selection { int selected; int * selected_bonds; ColRGBA * bond_colors; int * selected_angles; ColRGBA * angle_colors; int * selected_dihedrals; ColRGBA * dihedral_colors; atom_in_selection * first; atom_in_selection * last; }; /*! \typedef background \brief a background data structure */ typedef struct background background; struct background { int gradient; /*!< 0 = none \n 1 = linear \n 2 = circular */ int direction; /*!< If linear: \n 0 = right to left \n 1 = top to bottom \n 2 = bottom right to top left \n 3 = top right to bottom left \n If circular: \n 0 = right to left \n 1 = left to right \n 2 = top to bottom \n 3 = bottom to top \n 4 = bottom right to top left \n 5 = bottom left to top right \n 6 = top right to bottom left \n 7 = top left to bottom right \n 8 = center */ float position; /*!< Equal mixed position */ ColRGBA color; ColRGBA gradient_color[2]; }; /*! \typedef axis \brief axis layout data structure */ typedef struct axis axis; struct axis { int axis; /*!< 0 = NONE (hide), 1 = wireframe, 4 = cylinders */ double line; /*!< Width for wireframe */ double rad; /*!< Radius for cylinders */ double length; /*!< Axis length */ int t_pos; /*!< Axis template position */ GLfloat c_pos[3]; /*!< Axis custom positions */ int labels; /*!< Show / hide axis labels */ gchar * title[3]; /*!< Axis titles */ ColRGBA * color; /*!< Associated color */ }; /*! \typedef box \brief box layout data structure */ typedef struct box box; struct box { int box; /*!< 0 = NONE (hide), 1 = wireframe, 4 = cylinders */ double line; /*!< Width for wireframe */ double rad; /*!< Radius for cylinders */ ColRGBA color; /*!< Associated color */ int extra_cell[3]; /*!< Extra cells (if any) on x, y and z */ }; /*! \typedef image \brief a structure to describe the visual content of the OpenGL rendering */ typedef struct image image; struct image { background * back; /*!< Background data structure */ axis * xyz; /*!< Axis layout data structure */ box * abc; /*!< Box layout data structure */ // Color maps for atoms [0] and polyhedra [1] int color_map[2]; /*!< Color maps, 0= atoms, 1 = polyhedra */ gboolean * show_atom[2]; /*!< Daw or not the atom(s), 0 = atoms, 1 = clones */ gboolean * show_label[2]; /*!< Draw or not the label(s), 0 = atoms, 1 = clones */ gboolean * show_poly[9]; /*!< Draw or not the polyhedra */ gboolean * show_coord[10]; /*!< Draw or not the coordination(s) */ // Atoms ColRGBA * at_color; /*!< Atomic species color(s) */ double * sphererad; /*!< Sphere radii (spheres or ball and stick used as style) */ double * pointrad; /*!< Point size (points or wireframe used as style) */ double * atomicrad; /*!< Sphere radii (spacefilled used as style) */ // Bonds double ** bondrad; /*!< Cylinder radii (ball and stick used as style) */ double ** linerad; /*!< Line width (wireframe used as style) */ double radall[2]; /*!< Cylinder radii (cylinders used as style) */ // Clones gboolean draw_clones; /*!< Draw clones: 0 = no, 1 = yes */ gboolean cloned_poly; /*!< Draw cloned ployhedra: 0 = no, 1 = yes */ // Labels // 0 = atoms, 1 = clones, 2 = axis, 3 = measures, 4 = measure edition screen_label labels[5]; /*!< Labels: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ // 0 = Element name, 1 = Atomic symbol, 2 = Atomic symbol + ID number, 3 = ID number int acl_format[2]; /*!< Label format for the atom(s) and clone(s): \n 0 = element name, \n 1 = atomic symbol, \n 2 = atomic symbol + ID number (default), \n 3 = ID number */ // In the following: 0 = measure in analysis mode, 1 = measure in edition mode gboolean mtilt[2]; /*!< Measure tilt, if any */ int mpattern[2]; /*!< Measure line pattern */ int mfactor[2]; /*!< Measure */ double mwidth[2]; /*!< Measure line width */ int m_is_pressed; /*!< is the key m pressed ? */ // Atom selection: 0 = normal mode, 1 = edition mode atom_selection * selected[2]; /*!< atom(s) selection lists \n 0 = analysis mode, \n 1 = edition mode */ // Colors for atom selections ColRGBA sel_color[2]; // Coordination(s) ColRGBA ** spcolor[10]; /*!< Coordination sphere colors */ GLdouble p_depth; /*!< Camera depth */ GLdouble m_depth; /*!< Maximum camera depth */ GLdouble c_angle[2]; /*!< Camera angle: pitch and heading */ GLdouble c_shift[2]; /*!< Camera position: x and y */ GLdouble gnear; /*!< Near plane position */ GLdouble gfar; /*!< Far plane position */ GLdouble gleft; /*!< Left plane position */ GLdouble gright; /*!< Right plane position */ GLdouble gtop; /*!< Top plane position */ GLdouble gbottom; /*!< Bottom plane position */ GLdouble zoom; /*!< Zoom factor */ vec4_t rotation_quaternion; /*!< Rotation quaternion */ // Only for recording int ** i_rings[5]; /*!< Ring(s) visual information, temporary buffer for movie encoding */ atom_data * at_data; /*!< Atom visual information, temporary buffer for movie encoding */ // Volumes gboolean show_vol[FILLED_STYLES]; /*!< Show (1) or hide (0) overall molecular volumes, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ ColRGBA vol_col[FILLED_STYLES]; /*!< Overall molecular volume colors, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ gboolean * fm_show_vol[2][FILLED_STYLES]; /*!< Show (1) or hide (0) isolated fragment(s) and molecule(s) volumes, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ ColRGBA * fm_vol_col[2][FILLED_STYLES]; /*!< Isolated fragment(s) and molecule(s) volume colors: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ int rotation_mode; /*!< Not used anymore, should be removed */ int style; /*!< Default style, in: \n 0 = ball and stick, \n 1 = wireframe, \n 2 = spacefilled, \n 2 = spheres, \n 3 = cylinders, \n 4 = dots */ int filled_type; /*!< Spacefilled type, in: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ GLint quality; /*!< Quality of the rendering */ GLint render; /*!< OpenGL render type, in \n 0 = filled (default), \n 1 = lines, \n 2 = points */ int * light_loc; /*!< Lights locations (only used when drawing light spots), in \n 0 = ambient light, not in the model, \n 1 = spot or directional light, in the model */ Lightning l_ghtning; /*!< Lightning description */ Material m_terial; /*!< Material description, if any */ Fog f_g; /*!< Fog description, if any*/ gboolean ray_tracing; /*!< Use or not raytracing rendering with quad billboards, default = TRUE */ int step; /*!< The MD step, in case of trajectory */ int rep; /*!< Representation: 0 = orthographic, 1 = perspective */ int id; /*!< Image ID */ }; /*! \typedef snapshot */ typedef struct snapshot snapshot; struct snapshot { image * img; /*!< The image structure for this snapshot */ snapshot * prev; snapshot * next; }; /*! \typedef animation */ typedef struct animation animation; struct animation { int frames; /*!< Number of frames or snapshots */ snapshot * first; snapshot * last; }; /*! \typedef colormap */ typedef struct colormap colormap; struct colormap { float ** data; /*!< Data to use as custom color map, value per MD step x atom */ int points; /*!< Number of color(s) to build the custom color map */ ColRGBA ** colors; /*!< Color(s) to use to build the custom color map */ float * positions; /*!< Point positions, in the overall value range */ float cmin; /*!< Minimum value */ float cmax; /*!< Maximum value */ ColRGBA * values; /*!< The atom(s) colors calculated using the custom color map information */ }; /*! \typedef atom_search \brief a data structure to search for atom(s) and edit the model */ typedef struct atom_search atom_search; struct atom_search { int proj; /*!< Target project */ int action; /*!< Action to be performed */ GtkWidget * atom_tree; GtkWidget * mode_box; GtkWidget * object_box; GtkWidget * filter_box; GtkWidget * atom_box; GtkWidget * id_box; GtkWidget * big_box; GtkTreeStore * atom_model; GtkListStore * obj_model; GtkTreePath * path; GtkWidget * info[2]; GtkWidget * preview[2]; // 0 = Unselected // 1 = Selected // 2 = All int status; /*!< Atom(s) status for the search, in: \n 0 = unselected, \n 1 = selected, \n 2 = all */ // O = Normal // 1 = Random int mode; /*!< Search mode, in: \n 0 = normal, \n 1 = random */ // 0 = Atoms // 1 = Groups int object; /*!< Search object, in: \n 0 = isolated atom(s), \n 1 = group of atoms */ int filter; /*!< Search filter, in: \n 0 = chemical species, \n 1 = total coordination(s), \n 2 = partial coordination(s), \n 3 = fragment(s), \n 4 = molecule(s) */ int spec; /*!< Target chemical species, if any */ int search_digit; int spec_to_add; int num_to_add; int in_selection; GtkWidget * entry_a, * entry_b; GtkWidget * but_a, * but_b; GtkWidget * img_a, * img_b; // Passivating = for all atoms of that type but not as a group gboolean passivating; gboolean was_selected; gboolean recompute_bonding; int set_for_all; int int_b; int * lab; int * pick; int todo_size; int * todo; tint pointer[6]; }; /*! \typedef atomic_object \brief a data structure to describe an object to work on. \n the object can be one or more: \n - atom(s) \n - chemical species \n - coordination sphere(s) (total or partial) \n - fragment(s) \n - molecule(s) \n - selection(s) of atom(s) from any project in the workspace */ typedef struct atomic_object atomic_object; struct atomic_object { int id; /*!< Object ID */ int origin; /*!< Origin project for the object */ float dim; /*!< Maximum size in x, y or z for the object */ gchar * name; /*!< Name of the object */ int type; /*!< Type of object */ int atoms; /*!< Number of atom(s) */ int species; /*!< Number of chemical species */ int * old_z; /*!< Temporary buffer to preserve the atomic numbers */ struct atom * at_list; /*!< List of atom(s) in the object */ int ifcl; /*!< Number of clone(s), if any */ int * bcid; /*!< Cloned bonds ID */ double occ; /*!< Occupancy (for crystal building purposes) */ double * baryc; /*!< Position barycenter for the object */ int bonds; /*!< Number of chemical bonds */ int ** ibonds; /*!< List of bonds */ coord_info * coord; /*!< coordination information */ atomic_object * prev; atomic_object * next; }; /*! \typedef wyckoff_position \brief a structure to describe a Wyckoff position in crystallography */ typedef struct wyckoff_position wyckoff_position; struct wyckoff_position { int multi; /*!< Multiplicity */ gchar * let; /*!< Letter */ gchar * site; /*!< Symmetry */ gchar *** pos; /*!< Coordinate(s) */ }; /*! \typedef spg_setting \brief a structure to describe the settings of a space group in crystallography */ typedef struct spg_setting spg_setting; struct spg_setting { int origin; /*!< Origin */ gchar * name; /*!< Name of the setting */ gchar * pos[3]; /*!< Lattice orientation modification(s) */ int nump; /*!< Number of Wyckoff position modification(s) */ gchar *** points; /*!< Wyckoff position modification(s) */ }; /*! \typedef space_group \brief a structure to described a space group in crystallography */ typedef struct space_group space_group; struct space_group { int id; /*!< ID number, in [1-230] */ gchar * name; /*!< Name */ gchar * hms; /*!< Hermann-Mauguin symbol */ gchar * bravais; /*!< Type of Bravais lattice */ gchar * setting; /*!< Available setting(s), if any*/ int sid; /*!< Selected setting, if any */ int nums; /*!< Number of possible setting(s) */ spg_setting * settings; /*!< Space group settings */ int numw; /*!< Number of Wyckoff position(s) */ wyckoff_position * wyckoff; /*!< Wyckoff position(s) */ mat4_t coord_origin; /*!< Origin of the atomic coordinates */ mat4_t wyck_origin; /*!< Origin of the Wyckoff positions */ }; /*! \typedef box_info \brief model box information */ typedef struct box_info box_info; struct box_info { double param[2][3]; /*!< Box parameters: \n 0: a, b, c \n 1: alpha, beta, gamma */ double vect[3][3]; /*!< Box vectors */ double rvect[3][3]; /*!< Reciprocal vectors */ mat4_t frac_to_cart; /*!< Fractional to Cartesian matrix */ mat4_t cart_to_frac; /*!< Cartesian to fractional matrix */ double vol; /*!< Volume */ double dens; /*!< Density */ }; /*! \typedef cell_info \brief Description of the periodicity */ typedef struct cell_info cell_info; struct cell_info { box_info * box; /*!< Model box description \n In the case of NPT calculation as many boxes as MD steps are described */ int cextra[3]; /*!< Extra boxes (if any), on x, y and z*/ int pbc; /*!< Apply PBC */ int frac; /*!< Are the initial coordinates fractional ? */ int ltype; /*!< Lattice type, in \n 0 = isolated, \n 1 = a,b,c + angles, \n 2 = vectors */ double volume; /*!< Volume, average if NPT */ double density; /*!< Density, average if NPT */ gboolean npt; /*!< NPT trajectory (0 = no, 1 = yes) */ gboolean has_a_box; /*!< Is there a model box ? (0 = no, 1 = yes) */ gboolean crystal; /*!< Is this a crystal ? (0 = no, 1 = yes) */ space_group * sp_group; /*!< Space group in the case of a crystal */ }; typedef struct builder_edition builder_edition; struct builder_edition { GtkWidget * win; GtkWidget * bh_box; GtkWidget * bv_box[2]; GtkWidget * cs_combo; GtkWidget * bl_box; GtkWidget * ltc_box; GtkWidget * ltc_cons; GtkWidget * bv_img; GtkWidget * bl_combo; GtkWidget * sg_box; GtkWidget * sg_combo; GtkWidget * sg_but; GtkWidget * so_box; GtkWidget * so_combo; GtkWidget * so_info; GtkWidget * la_combo; GtkWidget * lattice_grid; GtkWidget * lattice_box; GtkWidget * bentry[2][3]; GtkWidget * ventry[3][3]; GtkWidget * add_combo; GtkWidget * pbut; cell_info cell; int occupancy; int rounding; gboolean overlapping; gboolean wrap; gboolean clones; int extrac[3]; tint pointers[3][3]; }; typedef struct atom_edition atom_edition; struct atom_edition { GtkWidget * win; GtkWidget * vbox; GtkWidget * notebook; GtkWidget * atom_combo[5]; GtkWidget * axis_combo[2]; GtkWidget * axis_but[2]; GtkWidget * edit_entry[6]; GtkWidget * edit_scale[6]; GtkWidget * at_expand[3]; GtkWidget * edition_but[2]; GtkTreePath ** replace_nodes[2]; gboolean visible; int active; int axis[2]; gboolean show_axis[2]; gboolean rebuilt[2]; gboolean old_axis; float new_param[3][2][6]; float old_param[3][2][6]; int repeat_move; float * msd; float * msd_all; // 0 = REPLACE // 1 = INSERT // 2 = CBUILD // 3 = PASSIVATE atomic_object * to_be_inserted[4]; atomic_object * to_be_moved[2]; int adv_bonding[2]; coord_info * coord; int add_spec; double * new_z; }; typedef struct cell_edition cell_edition; struct cell_edition { GtkWidget * win; GtkWidget * notebook; GtkWidget * put_in_box; GtkWidget * passivate; GtkWidget * superbut; GtkWidget * shift_box[2]; GtkWidget * ax_cell[3]; GtkWidget * edit_entry[21]; GtkWidget * edit_scale[21]; GtkWidget * density_box; GtkWidget * density; gboolean slab_show; gboolean slab_pbc; gboolean cut_this_slab; gboolean slab_passivate; int slab_type; int slab_act; int slab_out; double slab_vol; float slab_alpha; int slab_atoms; int * slab_lot; GtkWidget * slab_opts; GtkWidget * slab_hbox[3]; GtkWidget * slab_param[3]; GtkWidget * slab_box[6]; GtkWidget * slab_info_box; GtkWidget * slab_info; gboolean homo_density; double cparam[21]; double initbox[3]; dint slab_pointer[5]; }; typedef struct opengl_edition opengl_edition; struct opengl_edition { GtkWidget * win; GtkWidget * templates; GtkWidget * param_mat; GtkWidget * m_entry[5]; GtkWidget * m_scale[5]; GtkWidget * lights; GtkWidget * lights_box; GtkWidget * render_fix; GtkWidget * basic[2]; GtkWidget * base_ogl[2][5]; GtkWidget * entogl[5][3]; GtkWidget * advanced_light_box; GtkWidget * light_type; GtkWidget * light_type_box; GtkWidget * light_fix; GtkWidget * light_show; GtkWidget * light_b_entry[2]; GtkWidget * light_entry[6]; GtkWidget * light_b_coord[2]; GtkWidget * dens_box; GtkWidget * depth_box; GtkWidget * fog_range[3]; GtkWidget * param_fog; int proj; dint pointer[6]; tint pos_pointer[5][3]; }; typedef struct coord_edition coord_edition; struct coord_edition { GtkWidget * win; GtkWidget * notebook; GtkTreeStore * rings_model[5]; GtkTreeStore * chains_model; GtkListStore * frag_mol_model[2]; int rst[5], rsz[5], ri[5]; GtkWidget * rilab[5][3]; int cst, csz, ch; GtkWidget * chlab[3]; }; typedef struct measures measures; struct measures { GtkWidget * win; GtkWidget * label; GtkWidget * selection_tree[3]; }; typedef struct volumes volumes; struct volumes { GtkWidget * win; // All model GtkWidget * compb[FILLED_STYLES]; GtkWidget * hboxv[FILLED_STYLES]; GtkWidget * hbvol[FILLED_STYLES]; GtkWidget * lab_vol[FILLED_STYLES]; double angp; // Fragments and molecules int sid[2]; GtkWidget ** fm_compb[2][FILLED_STYLES]; GtkWidget ** fm_hboxv[2][FILLED_STYLES]; GtkWidget ** fm_hbvol[2][FILLED_STYLES]; GtkWidget ** fm_lab_vol[2][FILLED_STYLES]; GtkWidget * fm_vbox[2]; GtkWidget * fm_vvbox[2]; int ngeov[2]; int * geov_id[2]; }; typedef struct model_edition model_edition; struct model_edition { GtkWidget * win; GtkWidget * notebook; }; typedef struct box_edition box_edition; struct box_edition { GtkWidget * win; GtkWidget * show_hide; GtkWidget * styles; GtkWidget * width_box; GtkWidget * width; GtkWidget * radius_box; GtkWidget * radius; GtkWidget * box_data; }; typedef struct axis_edition axis_edition; struct axis_edition { GtkWidget * win; GtkWidget * show_hide; GtkWidget * styles; GtkWidget * width_box; GtkWidget * width; GtkWidget * radius_box; GtkWidget * radius; GtkWidget * length; GtkWidget * axis_data; GtkWidget * templates; GtkWidget * axis_position_box; GtkWidget * axis_label_box[2]; GtkWidget * axis_color_title[3]; }; typedef struct rep_edition rep_edition; struct rep_edition { GtkWidget * win; GtkWidget * camera_widg[7]; }; typedef struct gradient_edition gradient_edition; struct gradient_edition { GtkWidget * win; GtkWidget * g_box; GtkWidget * dir; GtkWidget * d_box[2]; GtkWidget * color_box[2]; GtkWidget * p_box; GtkWidget * p_scale; GtkWidget * col_but; GtkWidget * grad_but[2]; }; /*! \typedef glwin \brief OpenGL window widget structure */ typedef struct glwin glwin; struct glwin { gboolean init; /*!< Was rendering initialized (0 = no, 1 = yes) */ int proj; /*!< Target project */ // The entire OpenGL window GtkWidget * win; // The menu bar GtkWidget * menu_box; GtkWidget * menu_bar; #ifdef GTK3 // OpenGL menus GtkWidget * ogl_styles[OGL_STYLES]; GtkWidget * filled_styles[FILLED_STYLES]; GtkWidget * color_styles[ATOM_MAPS+POLY_MAPS]; GtkWidget * ogl_rep[OGL_REPS]; GtkWidget ** ogl_box_axis[2]; GtkWidget * ogl_box[8]; GtkWidget * ogl_mouse[3]; GtkWidget * ogl_atoms[8]; GtkWidget ** ogl_spec[2]; GtkWidget ** ogl_lab[2]; GtkWidget * ogl_bonds[14]; GtkWidget * ogl_clones[6]; GtkWidget * ogl_coord[OGL_COORDS]; GtkWidget * ogl_rings[OGL_RINGS]; GtkWidget * ogl_chains[2]; GtkWidget ** ogl_geom[2][10]; GtkWidget ** ogl_poly[2][9]; GtkWidget ** oglmv[2][10]; // Coordination sphere show/hide menus GtkWidget ** oglmc[2][9]; // Coordination sphere color menus GtkWidget ** oglmpv[2][9]; // Polyhedra view/hide menus GtkWidget * ogl_mode[2+2*NINPUTS]; GtkWidget * ogl_smode[NSELECTION]; GtkWidget * ogl_anim[2]; #endif GtkWidget * rbuild[2]; GtkWidget * cbuilder; // Matrices et OpenGL vec3_t model_position; vec4_t view_port; mat4_t projection_matrix; mat4_t model_matrix; mat4_t view_matrix; mat4_t un_view_matrix; mat4_t model_view_matrix; mat4_t view_model_matrix; mat4_t proj_model_matrix; mat4_t proj_model_view_matrix; mat4_t proj_view_matrix; mat4_t normal_matrix; mat4_t axis_proj_model_view_matrix; mat4_t label_projection_matrix; gboolean create_shaders[NGLOBAL_SHADERS]; glsl_program *** ogl_glsl[NGLOBAL_SHADERS]; int * n_shaders[NGLOBAL_SHADERS]; opengl_edition * opengl_win; model_edition * model_win[2]; builder_edition * builder_win; box_edition * box_win; axis_edition * axis_win; rep_edition * rep_win; gradient_edition * gradient_win; // OpenGL plot GtkWidget * plot; #ifndef GTKGLAREA GLXContext glcontext; #endif int pixels[2]; int mouseX; int mouseY; int mouseButton; int mouseAction; int mouseStatus; int nth_copy; gboolean to_pick; // Action mode // 0 = analyze (normal), 1 = edit structure int mode; /*!< Mouse mode, in: \n 0 = analyze (default), \n 1 = edition (default for new project) */ // Selection mode int selection_mode; /*!< Mouse selection mode, in: \n 0 = atom / bond, \n 1 = total coordination sphere, \n 2 = partial coordination sphere, \n 3 = fragment, \n 4 = molecule, \n 5 = single fragment, \n 6 = single molecule, \n 7 = selection in edition mode */ // For temporary backup purposes only: atom_selection * tmp_sel[2]; int * stored_labels[2]; int other_status; coord_edition * coord_win; int cmap[ATOM_MAPS]; atom_edition * atom_win; double ** saved_coord[3]; cell_edition * cell_win; // 0 = atoms // 1 = clones // 2 = MOVE // 3 = REPLACE // 4 = REMOVE // 5 = INSERT // 6 = RANMOVE // 7 = CBUILDER // 8 = PASSIVATE atom_search * search_widg[9]; vec3_t baryc[3]; vec3_t insert_coords; // 0 = Status // 1 = Translation / Rotation // 3 = x_t, y_t, z_t, x_r, y_r, z_r float edition_param[3][2][6]; // 0-2 translation, 3-5 rotation // Color pointers, these are used to deal with the // Callbacks for the OpenGL window menus, and are used // for atoms / box / axis ... tint * colorp[64]; /*!< Color pointers \n these are used to deal with the Callbacks for the OpenGL window, \n and are used for atoms / box / axis ... */ colormap * custom_map; /*!< User defined color map, if any */ int allbonds[2]; /*!< Total number of chemical bond(s): \n 0 = normal bond(s), \n 1 = cloned bonds */ int ** bonds; /*!< Number of bond(s) by MD step, then 0/1=normal/cloned */ int **** bondid; /*!< Atoms ID in bonds, by MD step, then 0/1=norm/clones, then bond ID */ // Clones vec3_t ** clones; /*!< List of cloned atomic coordiantes */ gboolean prepare_motion; gboolean was_moved; // Rebuild trigger switch on edition // [0] = on move: // [0] atom_win active: 0/1 to turn off/on // [1] atom_win inactive: 0/1 to turn off/on // [1] = on copy: // [0] atom_win active: 0/1 to turn off/on // [1] atom_win inactive: 0/1 to turn off/on gboolean rebuild[2][2]; /*!< Rebuild trigger switch on edition: \n [0] = on move: \n [0] atom_win active: 0/1 to turn off/on \n [1] atom_win inactive: 0/1 to turn off/on \n [1] = on copy: \n [0] atom_win active: 0/1 to turn off/on \n [1] atom_win inactive: 0/1 to turn off/on */ gboolean bonding; gboolean adv_bonding[2]; /*!< Is advanced bonding information available, \n 0 = Fragments, \n 1 = Molecules */ qint ** gcid[10]; /*!< Geom colors pointers */ gboolean rings; int ring_max[5]; /*!< The largest ring size */ int ** num_rings[5]; /*!< The number of rings (search type, step, ring size) */ int **** all_rings[5]; /*!< The ring(s) of atoms */ gboolean *** show_rpoly[5]; /*!< Show polyhedra of selected rings */ gboolean chains; int chain_max; /*!< The largest chain size */ int ** num_chains; /*!< The number of chains (chain size, step) */ int **** all_chains; /*!< The chain(s) of atoms */ // Volumes data gboolean volumes; double * atoms_volume[FILLED_STYLES]; double * atoms_ppvolume[FILLED_STYLES]; // [9] : a,b,c,alpha,beta,gama,p.x,p.y,p.z double ** volume_box[FILLED_STYLES]; gboolean comp_vol[FILLED_STYLES]; double ** frag_mol_volume[2][FILLED_STYLES]; double ** frag_mol_ppvolume[2][FILLED_STYLES]; double *** frag_box[FILLED_STYLES]; gboolean ** fm_comp_vol[2][FILLED_STYLES]; int labelled; int picked; // Color picking int to_be_picked; /*!< Total number of objects that can be picked */ int atoms_to_be_picked; /*!< Number of atoms that can be picked */ int clones_to_be_picked; /*!< Number of clones that can be picked */ int bonds_to_be_picked; /*!< Number of bonds that can be picked (do not include clones) */ int * color_to_pick; /*!< The different colors that can be picked */ // Spinner, player sequencer * player; gboolean play; gboolean stop; gboolean loop; int speed; spinner * spiner; gboolean spin[4]; int spin_speed[4]; recorder * rec; gboolean record; int frames; animation * anim; double cshift[3]; gboolean wrapped; measures * measure_win; volumes * volume_win; float zoom_factor; GLdouble p_moy; gboolean fullscreen; int action_id; GSimpleActionGroup * action_group; GtkWidget * shortcuts; }; #endif atomes_1.3.1/src/opengl/win/0000775000175000017500000000000015212624223015355 5ustar lerouxlerouxatomes_1.3.1/src/opengl/win/w_bonds.c0000664000175000017500000004177015212624223017165 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_bonds.c * @short Functions to create the bond (legnth/radius) edition window(s) * @author Sébastien Le Roux */ /* * This file: 'w_bonds.c' * * Contains: * - The functions to create the bond (legnth/radius) edition window(s) * * List of functions: void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern gchar * label_cutrab (project * this_proj, glwin * view, int id); /*! \fn G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) \brief update bond parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT(data); const gchar * n = entry_get_text (res); double v = string_to_double ((gpointer)n); int j, k, l, m; int a, b, s; s = opengl_project -> nspec; #ifdef GTK3 // GTK3 Menu Action To Check int c; gchar * str; #endif switch (id) { case -5: if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> xyz -> length = v; v = opengl_project -> modelgl -> anim -> last -> img -> xyz -> length; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Axis length [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][7]), str); g_free (str); #endif if (opengl_project -> modelgl -> axis_win -> length) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> axis_win -> length), v); } opengl_project -> modelgl -> create_shaders[MAXIS] = TRUE; break; case -4: if (opengl_project -> modelgl -> anim -> last -> img -> xyz -> axis == CYLINDERS) { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> xyz -> rad = v; v = opengl_project -> modelgl -> anim -> last -> img -> xyz -> rad; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][6]), str); g_free (str); #endif if (opengl_project -> modelgl -> axis_win) { if (opengl_project -> modelgl -> axis_win -> radius && GTK_IS_WIDGET(opengl_project -> modelgl -> axis_win -> radius)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> axis_win -> radius), v); } } } else { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> xyz -> line = v; v = opengl_project -> modelgl -> anim -> last -> img -> xyz -> line; #ifdef GTK3 str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][4]), str); g_free (str); #endif } if (opengl_project -> modelgl -> axis_win) { if (opengl_project -> modelgl -> axis_win -> width && GTK_IS_WIDGET(opengl_project -> modelgl -> axis_win -> width)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> axis_win -> width), v); } } opengl_project -> modelgl -> create_shaders[MAXIS] = TRUE; break; case -3: if (opengl_project -> modelgl -> anim -> last -> img -> abc -> box == CYLINDERS) { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> abc -> rad = v; v = opengl_project -> modelgl -> anim -> last -> img -> abc -> rad; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[0][6]), str); g_free (str); #endif if (opengl_project -> modelgl -> box_win) { if (opengl_project -> modelgl -> box_win -> radius && GTK_IS_WIDGET(opengl_project -> modelgl -> box_win -> radius)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> box_win -> radius), v); } } } else { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> abc -> line = v; v = opengl_project -> modelgl -> anim -> last -> img -> abc -> line; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[0][4]), str); g_free (str); #endif if (opengl_project -> modelgl -> box_win) { if (opengl_project -> modelgl -> box_win -> width && GTK_IS_WIDGET(opengl_project -> modelgl -> box_win -> width)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> box_win -> width), v); } } } opengl_project -> modelgl -> create_shaders[MDBOX] = TRUE; break; case -2: if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> radall[1] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> radall[1]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[8]), str); g_free (str); #endif init_default_shaders (opengl_project -> modelgl); break; case -1: if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> radall[0] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> radall[0]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[1]), str); g_free (str); #endif init_default_shaders (opengl_project -> modelgl); break; default: k = s*(s + 1)/2; if (id < k) { j = id; m = 0; #ifdef GTK3 // GTK3 Menu Action To Check c = 0; #endif } else { j = id - k; m = s; #ifdef GTK3 // GTK3 Menu Action To Check c = 1; #endif } if (j < s) { a = j + m; b = j + m; } else { j -= s; for (k=0; k modelgl -> anim -> last -> img -> style == WIREFRAME) { if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> linerad[a][b] = opengl_project -> modelgl -> anim -> last -> img -> linerad[b][a] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> linerad[a][b]; #ifdef GTK3 // GTK3 Menu Action To Check gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[5+8*c]), label_cutrab (opengl_project, opengl_project -> modelgl, 3+c)); #endif } else { if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> bondrad[a][b] = opengl_project -> modelgl -> anim -> last -> img -> bondrad[b][a] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> bondrad[a][b]; #ifdef GTK3 // GTK3 Menu Action To Check gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[3+8*c]), label_cutrab (opengl_project, opengl_project -> modelgl, 1+c)); #endif } init_default_shaders (opengl_project -> modelgl); break; } update_entry_double (res, v); update (opengl_project -> modelgl); } /*! \fn void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) \brief prepare bond property entry list \param win the GtkWidget sending the signal \param this_proj the target project \param nspec total number of chemical species \param aoc atom(s) (0) or clone(s) (1) \param val the list of value(s) to display */ void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) { int i, j, k, l, m, n; gchar * dim[2]={" pts"," Ã… "}; GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbo; GtkWidget * rad; gchar * str; if (this_proj -> modelgl -> anim -> last -> img -> style == WIREFRAME) { n = 0; } else { n = 1; } for (i=0, k=aoc*nspec; i chemistry -> label[i], this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); rad = create_entry (G_CALLBACK(update_bond_parameter), 120, 15, FALSE, GINT_TO_POINTER(j)); update_entry_double (GTK_ENTRY(rad), val[k][k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[n], 40, -1, 0.0, 0.5), FALSE, FALSE, 0); } k = j+1; for (i=0; i chemistry -> label[i], this_proj -> chemistry -> label[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); rad = create_entry (G_CALLBACK(update_bond_parameter), 120, 15, FALSE, GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(rad), val[l][m]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[n], 40, -1, 0.0, 0.5), FALSE, FALSE, 0); } } show_the_widgets (vbox); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) \brief update bond parameter callback - creating the dialog GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) \brief update bond parameter callback - creating the dialog GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) #endif { tint * the_data = (tint *)data; gchar * title[2][2] = {{i18n("Adjust atomic bond radius(ii)"), i18n("Adjust clone bond radius(ii)")}, {i18n("Adjust atomic line width(s)"), i18n("Adjust clone line width(s)")}}; int p = the_data -> a; opengl_project_changed (p); int s = opengl_project -> nspec; double ** val; int id = the_data -> b; int jd = the_data -> c; if (jd) { val = opengl_project -> modelgl -> anim -> last -> img -> linerad; } else { val = opengl_project -> modelgl -> anim -> last -> img -> bondrad; } GtkWidget * win = dialogmodal (_(title[jd][id]), GTK_WINDOW(opengl_project -> modelgl -> win)); bonds_input_win (win, opengl_project, s, id, val); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK4 update_menu_bar (opengl_project -> modelgl); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create bond(s) configuration window(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) \brief create bond(s) configuration window(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) #endif { int id; tint * bid = (tint *)data; gchar * obj[4] = {i18n("box"), i18n("axis"), i18n("bond"), i18n("clone bond")}; gchar * Nobj[4] = {i18n("Box"), i18n("Axis"), i18n("Bond"), i18n("Clone bond")}; gchar * str; switch (bid -> b) { case 0: id = -5; str = g_strdup_printf (_("Adjust axis length")); break; case 1: id = -3 - bid -> c; str = g_strdup_printf (_("Adjust %s line width"), _(obj[bid -> c])); break; case 4: id = -3 - bid -> c; str = g_strdup_printf (_("Adjust %s cylinders radius"), _(obj[bid -> c])); break; default: id = - bid -> b + 1; str = g_strdup_printf (_("Adjust %s cylinders radius"), _(obj[bid -> b])); break; } opengl_project_changed (bid -> a); GtkWidget * win = dialogmodal (str, GTK_WINDOW(opengl_project -> modelgl -> win)); g_free (str); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); switch (bid -> b) { case 0: str = g_strdup_printf (_("Axis length")); break; case 1: str = g_strdup_printf (_("%s line width"), _(Nobj[bid -> c])); break; case 4: str = g_strdup_printf (_("%s cylinders radius"), _(Nobj[bid -> c])); break; default: str = g_strdup_printf (_("%s cylinders radius"), _(Nobj[bid -> b])); break; } GtkWidget * label = gtk_label_new (str); g_free (str); gtk_widget_set_size_request (label, 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, label, FALSE, FALSE, 0); GtkWidget * rad = create_entry (G_CALLBACK(update_bond_parameter), 120, -1, FALSE, GINT_TO_POINTER(id)); switch (bid -> b) { case 0: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> xyz -> length); break; case 1: update_entry_double (GTK_ENTRY(rad), (bid -> c) ? opengl_project -> modelgl -> anim -> last -> img -> xyz -> line : opengl_project -> modelgl -> anim -> last -> img -> abc -> line); break; case 4: update_entry_double (GTK_ENTRY(rad), (bid -> c) ? opengl_project -> modelgl -> anim -> last -> img -> xyz -> rad : opengl_project -> modelgl -> anim -> last -> img -> abc -> rad); break; default: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> radall[bid -> b-2]); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rad, FALSE, FALSE, 0); switch (bid -> b) { case 1: add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(" [pts]"), 40, -1, 0.0, 0.5), FALSE, FALSE, 0); break; default: add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" [Å]", 30, -1, 0.0, 0.5), FALSE, FALSE, 0); break; } gtk_widget_set_size_request (win, 350, 100); show_the_widgets (vbox); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK4 update_menu_bar (opengl_project -> modelgl); #endif } atomes_1.3.1/src/opengl/win/m_quality.c0000664000175000017500000000420315212624223017524 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_quality.c * @short Functions to create the 'OengGL -> Quality' submenu * @author Sébastien Le Roux */ /* * This file: 'm_quality.c' * * Contains: * - The functions to create the 'OengGL -> Quality' submenu * * List of functions: void set_quality (int q, glwin * view); G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "project.h" #include "glwindow.h" #include "glview.h" /*! \fn void set_quality (int q, glwin * view) \brief set OpenGL quality \param q new OpenGL quality \param view the target glwin */ void set_quality (int q, glwin * view) { if (! preferences) { view -> anim -> last -> img -> quality = q; init_default_shaders (view); view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; update (view); } else { tmp_opengl[3] = q; } } /*! \fn G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) \brief set quality spin button callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) { glwin * view = (glwin *)data; set_quality (gtk_spin_button_get_value_as_int(res), view); update_entry_int (GTK_ENTRY(res), view -> anim -> last -> img -> quality); } atomes_1.3.1/src/opengl/win/m_anim.c0000664000175000017500000001230115212624223016756 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_anim.c * @short Functions to create the 'Animate' submenu * @author Sébastien Le Roux */ /* * This file: 'm_anim.c' * * Contains: * - The functions to create the 'Animate' submenu * * List of functions: G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_anim (glwin * view, int id); GMenu * menu_anim (glwin * view, int popm); */ #include "global.h" #include "glwindow.h" extern G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data); #ifdef GTK3 /*! \fn GtkWidget * menu_anim (glwin * view, int id) \brief create the 'Animate' submenu elements GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_anim (glwin * view, int id) { GtkWidget * menuanim = create_menu_item (FALSE, _("Animate")); GtkWidget * menua = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)menuanim, menua); if (id == 0) { view -> ogl_anim[0] = gtk3_menu_item (menua, _("Spin"), IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(window_spinner), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menua, _("Spin"), IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(window_spinner), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } GtkWidget * item = gtk3_menu_item (menua, _("Sequencer"), IMG_STOCK, (gpointer)MEDIA_PLAY, G_CALLBACK(window_sequencer), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); if (get_project_by_id(view -> proj) -> steps == 1) { widget_set_sensitive (item, 0); } if (id == 0) { view -> ogl_anim[1] = gtk3_menu_item (menua, _("Recorder"), IMG_STOCK, (gpointer)RECORD, G_CALLBACK(window_recorder), (gpointer)view, TRUE, GDK_KEY_r, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menua, _("Recorder"), IMG_STOCK, (gpointer)RECORD, G_CALLBACK(window_recorder), (gpointer)view, TRUE, GDK_KEY_r, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } widget_set_sensitive (menuanim, get_project_by_id(view -> proj) -> natomes); return (menuanim); } #else /*! \fn G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the spinner window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) { window_spinner (NULL, data); } /*! \fn G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the sequencer window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) { window_sequencer (NULL, data); } /*! \fn G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the recorder window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) { window_recorder (NULL, data); } /*! \fn GMenu * menu_anim (glwin * view, int popm) \brief create the 'Animate' submenu elements \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_anim (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Spin"), "spin", popm, popm, NULL, IMG_STOCK, (gpointer)MEDIA_LOOP, FALSE, G_CALLBACK(to_spin), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Sequencer"), "seq", popm, popm, NULL, IMG_STOCK, (gpointer)MEDIA_PLAY, FALSE, G_CALLBACK(to_seq), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Recorder"), "rec", popm, popm, "R", IMG_STOCK, (gpointer)RECORD, FALSE, G_CALLBACK(to_rec), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } #endif atomes_1.3.1/src/opengl/win/w_volumes.c0000664000175000017500000013336215212624223017551 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_volumes.c * @short Functions to create the 'Volumes' window \n Functions to compute system / fragment / molecular volumes * @author Sébastien Le Roux */ /* * This file: 'w_volumes.c' * * Contains: * - The functions to create the 'Volumes' window - The functions to compute system / fragment / molecular volumes * * List of functions: double cap_volume (double ht, double dh); double get_sphere_caps_volume (double dab, double rad, double rbd); double sphere_volume (double rad); double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid); double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang); double get_atoms_box (project * this_proj, int rid, int sid, int geo, int gid); void clean_volumes_data (glwin * view); void adjust_vol_md_step (project * this_proj, int geo); void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo); G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data); G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data); G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); GtkWidget * frag_mol_volume_search (project * this_proj, int g); GtkWidget * frag_mol_volume_tab (glwin * view, int geo); GtkWidget * vol_model_tab (glwin * view); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "glview.h" #include "atom_edit.h" extern void center_this_molecule (glwin * view); extern double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha); /*! \fn void clean_volumes_data (glwin * view) \brief clean volume data \param view the target glwin */ void clean_volumes_data (glwin * view) { if (view -> volume_win) { if (view -> volume_win -> win) { destroy_this_widget (view -> volume_win -> win); } g_free (view -> volume_win); view -> volume_win = NULL; } int i, j; for (i=0; i atoms_volume[i]) g_free (view -> atoms_volume[i]); view -> atoms_volume[i] = NULL; if (view -> atoms_ppvolume[i]) g_free (view -> atoms_ppvolume[i]); view -> atoms_ppvolume[i] = NULL; if (view -> volume_box[i]) g_free (view -> volume_box[i]); view -> volume_box[i] = NULL; view -> comp_vol[i] = FALSE; view -> anim -> last -> img -> show_vol[i] = FALSE; } for (i=0; i<2; i++) { for (j=0; j frag_mol_volume[i][j]) g_free (view -> frag_mol_volume[i][j]); view -> frag_mol_volume[i][j] = NULL; if (view -> frag_mol_ppvolume[i][j]) g_free (view -> frag_mol_ppvolume[i][j]); view -> frag_mol_ppvolume[i][j] = NULL; if (! i) { if (view -> frag_box[j]) g_free (view -> frag_box[j]); view -> frag_box[j] = NULL; } if (view -> fm_comp_vol[i][j]) g_free (view -> fm_comp_vol[i][j]); view -> fm_comp_vol[i][j] = NULL; if (view -> anim -> last -> img -> fm_show_vol[i][j]) g_free (view -> anim -> last -> img -> fm_show_vol[i][j]); view -> anim -> last -> img -> fm_show_vol[i][j] = NULL; if (view -> anim -> last -> img -> fm_vol_col[i][j]) g_free (view -> anim -> last -> img -> fm_vol_col[i][j]); view -> anim -> last -> img -> fm_vol_col[i][j] = NULL; } } int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, get_project_by_id(view -> proj)); } /*! \fn double cap_volume (double ht, double dh) \brief compute cap volume \param ht cap height \param dh sphere radius */ double cap_volume (double ht, double dh) { return (pi/3.0)*ht*ht*(3*dh-ht); } /*! \fn double get_sphere_caps_volume (double dab, double rad, double rbd) \brief compute sphere cap volume \param dab distance between the center of the 2 spheres \param rad sphere a radius \param rbd sphere b radius */ double get_sphere_caps_volume (double dab, double rad, double rbd) { double h1, h2; double px; double rmi, rma; rmi = min (rad, rbd); rma = max (rad, rbd); px = (dab*dab - rmi*rmi + rma*rma) / (2.0*dab); h1 = rma - px; h2 = rmi - (dab - px); return cap_volume (h1, rma) + cap_volume (h2, rmi); } /*! \fn double sphere_volume (double rad) \brief compute sphere volume \param rad sphere radius */ double sphere_volume (double rad) { return ((4.0*pi)/3.0)*rad*rad*rad; } /*! \fn double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid) \brief compute exact atomic volume for all system or fragment or molecule \param this_proj the target project \param rid the type of atomic radius(ii) \param sid the MD step \param gid -1 = all system, 2 = fragment(s), 3 = molecule(s) \param gcid fragment or molecule id number */ double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid) { int i, j, k, l, m, n, o; double vol = 0.0; double cap_vol = 0.0; double * rvdws = allocdouble (this_proj -> nspec); distance dist; for (i=0; i nspec; i++) { j = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; rvdws[i] = set_radius_ (& j, & rid); } for (j=0; j<2; j++) { for (k=0; k modelgl -> bonds[sid][j]; k++) { l = this_proj -> modelgl -> bondid[sid][j][k][0]; m = this_proj -> atoms[sid][l].sp; n = this_proj -> modelgl -> bondid[sid][j][k][1]; o = this_proj -> atoms[sid][n].sp; if (gid < 0 || this_proj -> atoms[sid][l].coord[gid] == gcid) { dist = distance_3d (& this_proj -> cell, (this_proj -> cell.npt) ? sid : 0, & this_proj -> atoms[sid][l], & this_proj -> atoms[sid][n]); if (dist.length < rvdws[m]+rvdws[o]) cap_vol += get_sphere_caps_volume (dist.length, rvdws[m], rvdws[o]); } } } vol = 0.0; if (gid < 0) { for (i=0; i nspec; i++) { vol += this_proj -> chemistry -> nsps[i] * sphere_volume (rvdws[i]); } vol -= cap_vol; } else { if (gid == 3) { for (i=0; i nspec; i++) { vol += this_proj -> modelfc -> mols[sid][gcid].species[i] * sphere_volume (rvdws[i]); } vol *= this_proj -> modelfc -> mols[sid][gcid].multiplicity; vol -= cap_vol; vol /= this_proj -> modelfc -> mols[sid][gcid].multiplicity; } else { for (i=0; i natomes; i++) { if (this_proj -> atoms[sid][i].coord[gid] == gcid) { j = this_proj -> atoms[sid][i].sp; vol += sphere_volume (rvdws[j]); } } vol -= cap_vol; } } g_free (rvdws); return vol; } double vamin[3], vamax[3]; /*! \fn double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) \brief compute volume \param nats number of atoms \param ats_vol the list of atom(s) \param baryc barycenter of the atomic coordinates \param rvdws the list of atomic radius (ii) \param a_ang x axis rotation angle \param b_ang y axis rotation angle \param c_ang z axis rotation angle */ double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) { double paral[3][3]; mat4_t rot; vec3_t c_old, c_new; rot = m4_rotation_xyz (a_ang, b_ang, c_ang); int i, j, k; k = 0; for (i=0; i nspec); for (i=0; i nspec; i++) { j = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; rvdws[i] = set_radius_ (& j, & rid); } if (geo < 0) center_this_molecule (this_proj -> modelgl); int a_ang, b_ang, c_ang; double val, vbl; int finess = pow (10, this_proj -> modelgl -> volume_win -> angp); int nats; atom * ats_vol = NULL; atomic_object * object = NULL; gboolean rtmp; double * baryc; switch (geo) { case 2: object_motion = TRUE; rtmp = this_proj -> modelgl -> rebuild[0][0]; this_proj -> modelgl -> rebuild[0][0] = TRUE; object = create_object_from_frag_mol (this_proj, geo, gid, NULL); object_motion = FALSE; this_proj -> modelgl -> rebuild[0][0] = rtmp; nats = object -> atoms; baryc = duplicate_double (3, object -> baryc); ats_vol = object -> at_list; break; default: nats = this_proj -> natomes; ats_vol = this_proj -> atoms[sid]; baryc = allocdouble (3); break; } for (a_ang=0; a_ang < 90*finess; a_ang ++) { for (b_ang=0; b_ang < 90*finess; b_ang ++) { for (c_ang=0; c_ang < 90*finess; c_ang ++) { val = molecular_volume (nats, ats_vol, baryc, rvdws, a_ang/finess, b_ang/finess, c_ang/finess); if (a_ang == 0 && b_ang == 0 && c_ang == 0) { vbl = val; if (geo < 0) { for (i=0; i<3; i++) { this_proj -> modelgl -> volume_box[rid][sid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> volume_box[rid][sid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> volume_box[rid][sid][3] = a_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][4] = b_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][5] = c_ang/finess; } else { for (i=0; i<3; i++) { this_proj -> modelgl -> frag_box[rid][sid][gid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> frag_box[rid][sid][gid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> frag_box[rid][sid][gid][3] = a_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][4] = b_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][5] = c_ang/finess; } } else if (val < vbl) { vbl = val; if (geo < 0) { for (i=0; i<3; i++) { this_proj -> modelgl -> volume_box[rid][sid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> volume_box[rid][sid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> volume_box[rid][sid][3] = a_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][4] = b_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][5] = c_ang/finess; } else { for (i=0; i<3; i++) { this_proj -> modelgl -> frag_box[rid][sid][gid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> frag_box[rid][sid][gid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> frag_box[rid][sid][gid][3] = a_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][4] = b_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][5] = c_ang/finess; } } else { break; } } } } ats_vol = NULL; g_free (rvdws); g_free (baryc); if (geo == 2) g_free (object); return vbl; } /*! \fn G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) \brief compute volume \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int i; for (i=0; i steps; i++) this_proj -> modelgl -> atoms_ppvolume[dat -> b][i] = get_atoms_box (this_proj, dat -> b, i, -1, 0); this_proj -> modelgl -> comp_vol[dat -> b] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> hbvol[dat -> b], this_proj -> modelgl -> comp_vol[dat -> b]); double movol = 0.0; for (i=0; i steps; i++) movol += this_proj -> modelgl -> atoms_ppvolume[dat -> b][i]; movol /= this_proj -> steps; gchar * str = g_strdup_printf ("%15.3f", movol); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> lab_vol[dat -> b], str); g_free (str); if (this_proj -> modelgl -> comp_vol[dat -> b]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> compb[dat -> b]); show_the_widgets (this_proj -> modelgl -> volume_win -> hboxv[dat -> b]); } this_proj -> modelgl -> volumes = TRUE; } /*! \fn void adjust_vol_md_step (project * this_proj, int geo) \brief update volume value labels \param this_proj the target project \param geo 2 = fragment(s), 3 = molecule(s) */ void adjust_vol_md_step (project * this_proj, int geo) { int i, j, k; k = this_proj -> modelgl -> volume_win -> sid[geo-2]; gchar * str; if (this_proj -> coord -> totcoord[geo] < GTK_LIMIT) { for (i=0; i coord -> totcoord[geo]; j++) { if (this_proj -> modelgl -> fm_comp_vol[geo-2][i][k][j]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][j]); str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[geo-2][i][k][j]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[geo-2][i][j], str); g_free (str); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][j]); } else { show_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][j]); hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][j]); } } } } else { for (i=0; i modelgl -> volume_win -> ngeov[geo-2]; j++) { k = this_proj -> modelgl -> volume_win -> geov_id[geo-2][j]; if (this_proj -> modelgl -> fm_comp_vol[geo-2][i][0][k]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][k]); str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[geo-2][i][0][k]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[geo-2][i][k], str); g_free (str); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][k]); } else { show_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][k]); hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][k]); } } } } } /*! \fn G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) \brief compute fragment / molecule volume \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) { int i, j; qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); int sid = this_proj -> modelgl -> volume_win -> sid[dat -> b-2]; if (dat -> b == 2) { this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] = get_atoms_box (this_proj, dat -> d, sid, dat -> b, dat -> c); } else { this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] = 0.0; for (i=0; i modelfc -> mols[sid][dat -> c].multiplicity; i++) { j = this_proj -> modelfc -> mols[sid][dat -> c].fragments[i]; if (! this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j]) { this_proj -> modelgl -> frag_mol_ppvolume[0][dat -> d][sid][j] = get_atoms_box (this_proj, dat -> d, sid, 2, j); this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> fm_hbvol[0][dat -> d][j], this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j]); } this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] += this_proj -> modelgl -> frag_mol_ppvolume[0][dat -> d][sid][j]; } this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] /= this_proj -> modelfc -> mols[sid][dat -> c].multiplicity; } center_molecule (this_proj); for (i=0; i<2; i++) this_proj -> modelgl -> saved_coord[i] = save_coordinates (this_proj, i); init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> fm_hbvol[dat -> b-2][dat -> d][dat -> c], this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c]); gchar * str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[dat -> b-2][dat -> d][dat -> c], str); g_free (str); if (this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[dat -> b-2][dat -> d][dat -> c]); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[dat -> b-2][dat -> d][dat -> c]); } if (dat -> b == 3) { adjust_vol_md_step (this_proj, 2); } this_proj -> modelgl -> volumes = TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) \brief toggle show / hide volume callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) \brief toggle show / hide volume callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> show_vol[dat -> b] = button_get_status ((GtkWidget *)but); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) \brief toggle show / hide fragment / molecule volume callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) \brief toggle show / hide fragment / molecule volume callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) #endif { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> fm_show_vol[dat -> b-2][dat -> d][dat -> c] = button_get_status ((GtkWidget *)but); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) \brief change volume color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> vol_col[id -> b] = get_button_color (colob); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) \brief change fragment / molecule volume color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> fm_vol_col[dat -> b-2][dat -> d][dat -> c] = get_button_color (colob); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) \brief change MD step spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> volume_win -> sid[dat -> b-2] = gtk_spin_button_get_value_as_int(res); adjust_vol_md_step (this_proj, dat -> b); } /*! \fn void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo) \brief add fragment / molecule volume data to the search tab \param vbox the GtkWidget sending the signal \param this_proj the target project \param view the target glwin \param geo 2 = fragment(s), 3 = molecule(s) */ void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo) { gchar * name_geo[2] = {i18n("fragment"), i18n("molecule")}; gchar * fmo[2] = {i18n("Fragment"), i18n("Molecule")}; GtkWidget * hbox; GtkWidget * hhbox; GtkWidget * fragtab; gchar * str; int i, j; int ngeov = (this_proj -> coord -> totcoord[geo] >= GTK_LIMIT) ? view -> volume_win -> ngeov[geo-2] : this_proj -> coord -> totcoord[geo]; if (geo == 3) { str = g_strdup_printf (_("Mean volume(s) occupied by the atom(s) for each %s:"), _(name_geo[geo-2])); } else { str = g_strdup_printf (_("Volume(s) occupied by the atom(s) for each %s:"), _(name_geo[geo-2])); } abox (vbox, str, 5); g_free (str); fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); GtkWidget * vvbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragtab, vvbox); double vof; int geoid; for (i=0; i coord -> totcoord[geo] >= GTK_LIMIT) ? view -> volume_win -> geov_id[geo-2][i] : i; str = g_strdup_printf ("%s N°%d", _(fmo[geo-2]), geoid+1); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); g_free (str); for (j=0; j%s: "), _(text_filled[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); view -> frag_mol_volume[geo-2][j][0][geoid] = get_atoms_volume (this_proj, j, 0, geo, i); str = g_strdup_printf ("%15.3f", view -> frag_mol_volume[geo-2][j][0][geoid]); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); } } if (geo == 3) { str = g_strdup_printf (_("Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:"), _(name_geo[geo-2])); } else { str = g_strdup_printf (_("Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:"), _(name_geo[geo-2])); } abox (vbox, str, 5); g_free (str); fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); vvbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragtab, vvbox); for (i=0; i coord -> totcoord[geo] >= GTK_LIMIT) ? view -> volume_win -> geov_id[geo-2][i] : i; str = g_strdup_printf ("%s N°%d", fmo[geo-2], geoid+1); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); g_free (str); for (j=0; j%s: "), _(text_filled[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); view -> volume_win -> fm_compb[geo-2][j][geoid] = create_button (_("Compute"), IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(fm_molecular_volumes), & view -> gcid[geo][geoid][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> fm_compb[geo-2][j][geoid], FALSE, FALSE, 20); vof = 0.0; if (view -> frag_mol_ppvolume[geo-2][j]) vof = view -> frag_mol_ppvolume[geo-2][j][0][geoid]; str = g_strdup_printf ("%15.3f", vof); view -> volume_win -> fm_hboxv[geo-2][j][geoid] = create_hbox (BSEP); view -> volume_win -> fm_lab_vol[geo-2][j][geoid] = markup_label (str, 100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , view -> volume_win -> fm_lab_vol[geo-2][j][geoid], FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , FALSE, FALSE, 0); view -> volume_win -> fm_hbvol[geo-2][j][geoid] = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hbvol[geo-2][j][geoid], check_button (_("Show/Hide"), 100, -1, view -> anim -> last -> img -> fm_show_vol[geo-2][j][geoid], G_CALLBACK(fm_show_volumes), & view -> gcid[geo][geoid][j]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hbvol[geo-2][j][geoid], color_button (view -> anim -> last -> img -> fm_vol_col[geo-2][j][geoid], TRUE, 50, -1, G_CALLBACK(fm_set_volume_color), & view -> gcid[geo][geoid][j]), FALSE, FALSE, 5); widget_set_sensitive (view -> volume_win -> fm_hbvol[geo-2][j][geoid], view -> fm_comp_vol[geo-2][j][0][geoid]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> volume_win -> fm_hbvol[geo-2][j][geoid], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } } } /*! \fn G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) \brief update fragment / molecule search entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; const gchar * m = entry_get_text (res); int v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); int g = dat -> b; if (v > 0 && v <= this_proj -> coord -> totcoord[g]) { int i; gboolean update = TRUE; for (i=0; i modelgl -> volume_win -> ngeov[g-2]; i++) { if (this_proj -> modelgl -> volume_win -> geov_id[g-2][i] == v-1) { update = FALSE; break; } } if (update) { int * sdata = duplicate_int (this_proj -> modelgl -> volume_win -> ngeov[g-2], this_proj -> modelgl -> volume_win -> geov_id[g-2]); g_free (this_proj -> modelgl -> volume_win -> geov_id[g-2]); this_proj -> modelgl -> volume_win -> geov_id[g-2] = allocint (this_proj -> modelgl -> volume_win -> ngeov[g-2]+1); for (i=0; i modelgl -> volume_win -> ngeov[g-2]; i++) { this_proj -> modelgl -> volume_win -> geov_id[g-2][i] = sdata[i]; } this_proj -> modelgl -> volume_win -> geov_id[g-2][i] = v-1; this_proj -> modelgl -> volume_win -> ngeov[g-2] ++; destroy_this_widget (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2]); this_proj -> modelgl -> volume_win -> fm_vvbox[g-2] = create_vbox (BSEP); add_frag_mol_vol_data (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2], this_proj, this_proj -> modelgl, g); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> volume_win -> fm_vbox[g-2], this_proj -> modelgl -> volume_win -> fm_vvbox[g-2], TRUE, TRUE, 0); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2]); adjust_vol_md_step (this_proj, g); } } else { update_entry_text (res, ""); } } /*! \fn GtkWidget * frag_mol_volume_search (project * this_proj, int g) \brief create the fragment(s) / molecule(s) search widget \param this_proj the target project \param g 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_search (project * this_proj, int g) { GtkWidget * frag_mol_search = create_vbox (BSEP); gchar * obj[2] = {i18n("fragment"), i18n("molecule")}; gchar * str = g_strdup_printf (_("Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n"), _(obj[g-2]), _(obj[g-2])); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[2]={i18n("Fragment Id.:"), i18n("Molecule Id.:")}; GtkWidget * hbox; GtkWidget * entry; GtkWidget * label; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[g-2]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_vol_frag_mol_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[g][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); str = g_strdup_printf ("∈ [%d - %d]", 1, this_proj -> coord -> totcoord[g]); label = markup_label (str, 50, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,label, FALSE, FALSE, 20); g_free (str); return frag_mol_search; } /*! \fn GtkWidget * frag_mol_volume_tab (glwin * view, int geo) \brief create the fragment(s) / molecule(s) tab \param view the target glwin \param geo 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_tab (glwin * view, int geo) { GtkWidget * vbox = create_vbox (BSEP); project * this_proj = get_project_by_id (view -> proj); GtkWidget * hbox; gchar * str; if (this_proj -> steps > 1) { // MD step box GtkWidget * sbut = spin_button (G_CALLBACK(set_md_step_vol), view -> volume_win -> sid[geo-2], 1.0, this_proj -> steps, 1.0, 0, 1000, & view -> gcid[geo][0][geo]); gtk_widget_set_size_request (sbut, 25, -1); GtkWidget * fix = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED (fix), sbut, 0, 10); str = g_strdup_printf (_("Select MD step [1-%d]:"), this_proj -> steps); hbox = abox (vbox, str, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fix, FALSE, FALSE, 20); } int i, j; for (i=0; i fm_comp_vol[geo-2][i]) { view -> fm_comp_vol[geo-2][i] = allocdbool (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> anim -> last -> img -> fm_show_vol[geo-2][i]) { view -> anim -> last -> img -> fm_show_vol[geo-2][i] = allocbool (this_proj -> coord -> totcoord[geo]); } if (! view -> anim -> last -> img -> fm_vol_col[geo-2][i]) { view -> anim -> last -> img -> fm_vol_col[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> anim -> last -> img -> fm_vol_col[geo-2][i]); for (j=0; j coord -> totcoord[geo]; j++) { view -> anim -> last -> img -> fm_vol_col[geo-2][i][j] = init_color (j+i*this_proj -> coord -> totcoord[geo], FILLED_STYLES*this_proj -> coord -> totcoord[geo]); view -> anim -> last -> img -> fm_vol_col[geo-2][i][j].alpha = 0.75; } } if (! view -> frag_box[i]) { view -> frag_box[i] = alloctdouble (this_proj -> steps, this_proj -> coord -> totcoord[geo], 9); } if (! view -> frag_mol_volume[geo-2][i]) { view -> frag_mol_volume[geo-2][i] = allocddouble (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> frag_mol_ppvolume[geo-2][i]) { view -> frag_mol_ppvolume[geo-2][i] = allocddouble (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> volume_win -> fm_compb[geo-2][i]) { view -> volume_win -> fm_compb[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win ->fm_compb[geo-2][i]); } if (! view -> volume_win -> fm_hbvol[geo-2][i]) { view -> volume_win -> fm_hbvol[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_hbvol[geo-2][i]); } if (! view -> volume_win -> fm_hboxv[geo-2][i]) { view -> volume_win -> fm_hboxv[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_hboxv[geo-2][i]); } if (! view -> volume_win -> fm_lab_vol[geo-2][i]) { view -> volume_win -> fm_lab_vol[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_lab_vol[geo-2][i]); } } GtkWidget * fragtab; if (this_proj -> coord -> totcoord[geo] >= GTK_LIMIT) { fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); add_container_child (CONTAINER_SCR, fragtab, frag_mol_volume_search(this_proj, geo)); } view -> volume_win -> fm_vbox[geo-2] = create_vbox (BSEP); view -> volume_win -> fm_vvbox[geo-2] = create_vbox (BSEP); add_frag_mol_vol_data (view -> volume_win -> fm_vvbox[geo-2], this_proj, view, geo); add_box_child_start (GTK_ORIENTATION_VERTICAL, view -> volume_win -> fm_vbox[geo-2], view -> volume_win -> fm_vvbox[geo-2], TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> volume_win -> fm_vbox[geo-2], TRUE, TRUE, 0); return vbox; } /*! \fn G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) \brief change angular precision \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = combo_get_active ((GtkWidget *)box); if (i != view -> volume_win -> angp) { project * this_proj = get_project_by_id (view -> proj); view -> volume_win -> angp = i; int j, k; for (i=0; i volume_win -> compb[i]); hide_the_widgets (view -> volume_win -> hboxv[i]); view -> comp_vol[i] = FALSE; widget_set_sensitive (view -> volume_win -> hbvol[i], view -> comp_vol[i]); view -> anim -> last -> img -> show_vol[i] = FALSE; for (j=0; j<2; j++) { for (k=0; k coord -> totcoord[j+2]; k++) { show_the_widgets (view -> volume_win -> fm_compb[j][i][k]); hide_the_widgets (view -> volume_win -> fm_hboxv[j][i][k]); view -> fm_comp_vol[j][i][0][k] = FALSE; widget_set_sensitive (view -> volume_win -> fm_hbvol[j][i][k], view -> fm_comp_vol[j][i][0][k]); view -> anim -> last -> img -> fm_show_vol[j][i][k] = FALSE; } } } this_proj -> modelgl -> volumes = FALSE; int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (view); } } /*! \fn GtkWidget * vol_model_tab (glwin * view) \brief create the 'Model' volume tab \param view the target glwin */ GtkWidget * vol_model_tab (glwin * view) { GtkWidget * vbox = create_vbox (BSEP); abox (vbox, _("Volume(s) occupied by all the atom(s):"), 5); GtkWidget * hbox; int i, j; project * this_proj = get_project_by_id (view -> proj); GtkWidget * hhbox; gchar * str; double vof; for (i=0; i%s: "), _(text_filled[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); if (! view -> atoms_volume[i]) view -> atoms_volume[i] = allocdouble (this_proj -> steps); for (j=0; j steps; j++) view -> atoms_volume[i][j] = get_atoms_volume (this_proj, i, j, -1, 0); vof = 0.0; for (j=0; j steps; j++) vof += view -> atoms_volume[i][j]; vof /= this_proj -> steps; str = g_strdup_printf ("%15.3f", vof); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 20); if (this_proj -> steps > 1) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("average by MD step"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } abox (vbox, _("Smallest rectangle parallepiped volume(s) to englobe all atom(s):"), 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("Angular precision: ")), FALSE, FALSE, 10); GtkWidget * ang_combo = create_combo (); gchar * angpr[4] = {"°", "°/10", "°/100", "°/1000"}; for (i=0; i<4; i++) combo_text_append (ang_combo, angpr[i]); combo_set_active (ang_combo, view -> volume_win -> angp); g_signal_connect (G_OBJECT (ang_combo), "changed", G_CALLBACK(set_angular_precision), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ang_combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); for (i=0; i%s: "), _(text_filled[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); hhbox = create_hbox (BSEP); if (! view -> comp_vol[i]) { view -> anim -> last -> img -> vol_col[i].red = (i+1.0)/FILLED_STYLES; view -> anim -> last -> img -> vol_col[i].green = 1.0; view -> anim -> last -> img -> vol_col[i].blue = 0.0; view -> anim -> last -> img -> vol_col[i].alpha = 0.75; } if (! view -> atoms_ppvolume[i]) view -> atoms_ppvolume[i] = allocdouble (this_proj -> steps); if (! view -> volume_box[i]) view -> volume_box[i] = allocddouble (this_proj -> steps, 9); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); view -> volume_win -> compb[i] = create_button (_("Compute"), IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(molecular_volumes), & view -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> compb[i], FALSE, FALSE, 20); vof = 0.0; for (j=0; j steps; j++) vof += view -> atoms_ppvolume[i][j]; vof /= this_proj -> steps; str = g_strdup_printf ("%15.3f", vof); view -> volume_win -> hboxv[i] = create_hbox (BSEP); view -> volume_win -> lab_vol[i] = markup_label (str, 100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hboxv[i], view -> volume_win -> lab_vol[i], FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hboxv[i], markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> hboxv[i], FALSE, FALSE, 0); view -> volume_win -> hbvol[i] = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hbvol[i], check_button (_("Show/Hide"), 100, -1, view -> anim -> last -> img -> show_vol[i], G_CALLBACK(show_volumes), & view -> colorp[i][0]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hbvol[i], color_button (view -> anim -> last -> img -> vol_col[i], TRUE, 50, -1, G_CALLBACK(set_volume_color), & view -> colorp[i][0]), FALSE, FALSE, 5); widget_set_sensitive (view -> volume_win -> hbvol[i], view -> comp_vol[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> volume_win -> hbvol[i], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) \brief create the 'Volumes' window callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> volume_win == NULL) { view -> volume_win = g_malloc0(sizeof*view -> volume_win); project * this_proj = get_project_by_id (view -> proj); gchar * str = g_strdup_printf (_("%s - volumes"), this_proj -> name); view -> volume_win -> win = create_win (str, view -> win, FALSE, FALSE); gtk_widget_set_size_request (view -> volume_win -> win, 450, 420); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> volume_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vol_model_tab (view), gtk_label_new (_("Model"))); if (view -> adv_bonding[0]) gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frag_mol_volume_tab (view, 2), gtk_label_new (_("Fragment(s)"))); if (view -> adv_bonding[1]) gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frag_mol_volume_tab (view, 3), gtk_label_new (_("Molecule(s)"))); add_gtk_close_event (view -> volume_win -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> volume_win -> win); int i; for (i=0; i comp_vol[i]) { hide_the_widgets (view -> volume_win -> compb[i]); } else { hide_the_widgets (view -> volume_win -> hboxv[i]); } } if (view -> adv_bonding[0]) adjust_vol_md_step (this_proj, 2); if (view -> adv_bonding[1]) adjust_vol_md_step (this_proj, 3); } else { show_the_widgets (view -> volume_win -> win); } } atomes_1.3.1/src/opengl/win/m_clones.c0000664000175000017500000001426615212624223017331 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_clones.c * @short Functions to create the 'Model -> Clone(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_clones.c' * * Contains: * - The functions to create the 'Model -> Clone(s)' submenu * * List of functions: G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view); GtkWidget * menu_clones (glwin * view, int id); GMenu * menu_clones (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #ifdef GTK3 /*! \fn G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) \brief show/hide clone(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gboolean j; j = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != view -> ogl_clones[0]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], j); } view -> anim -> last -> img -> draw_clones = j; widget_set_sensitive (view -> ogl_atoms[5], j); widget_set_sensitive (view -> ogl_atoms[7], j); widget_set_sensitive (view -> ogl_bonds[9], j); widget_set_sensitive (view -> ogl_bonds[11], j); widget_set_sensitive (view -> ogl_bonds[13], j); widget_set_sensitive (view -> ogl_clones[1], j); widget_set_sensitive (view -> ogl_clones[2], j); widget_set_sensitive (view -> ogl_clones[3], j); widget_set_sensitive (view -> ogl_clones[4], j); int i; for (i=0; i proj) -> nspec; i++) { widget_set_sensitive (view -> ogl_spec[1][i], j); widget_set_sensitive (view -> ogl_lab[1][i], j); } init_default_shaders (view); update (view); } /*! \fn GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) \brief create the 'Show/Hide clone(s)' menu item GTK3 \param name label of the new menu item \param clone draw clones (1) or not (0) \param menu the GtkMenu to attach the new item to \param view the target glwin */ GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) { GtkWidget * clone_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(show_hide_clones), view, FALSE, 0, 0, TRUE, FALSE, clone); widget_set_sensitive (clone_widget, view -> allbonds[1]); return clone_widget; } /*! \fn GtkWidget * menu_clones (glwin * view, int id) \brief create the 'Clone(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_clones (glwin * view, int id) { GtkWidget * menu = gtk_menu_new (); if (id == 0) { view -> ogl_clones[0] = create_clone_widget (_("Show/Hide"), view -> anim -> last -> img -> draw_clones, menu, view); } else { create_clone_widget (_("Show/Hide"), view -> anim -> last -> img -> draw_clones, menu, view); } gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Atom(s)"), TRUE, menu_atoms (view, id, 1))); if ((id == 0) || (view -> anim -> last -> img -> style != SPHERES && view -> anim -> last -> img -> style != PUNT)) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Bond(s)"), TRUE, menu_bonds (view, id, 1))); } return menu; } #else /*! \fn G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show/hide clones menu item callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * name = g_action_get_name ((GAction *)action); if (g_strcmp0(name, "set-show-clones.1.1") == 0) { g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-show-clones.0.0", NULL); } else { GVariant * state; gboolean show; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); } else { show = ! view -> anim -> last -> img -> draw_clones; } view -> anim -> last -> img -> draw_clones = show; init_default_shaders (view); update (view); // Update the menu bar is reqiured to udpate the clone(s) submenus update_menu_bar (view); if (action) { g_variant_unref (state); } } } /*! \fn GMenu * menu_clones (glwin * view, int popm) \brief create the 'Clone(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_clones (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Show/Hide"), "show-clones", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_clones), (gpointer)view, TRUE, view -> anim -> last -> img -> draw_clones, FALSE, (view -> allbonds[1]) ? TRUE : FALSE); append_submenu (menu, _("Atom(s)"), menu_atoms(view, popm, 1)); if (view -> anim -> last -> img -> style != SPHERES && view -> anim -> last -> img -> style != PUNT) { append_submenu (menu, _("Bonds(s)"), menu_bonds(view, popm, 1)); } return menu; } #endif atomes_1.3.1/src/opengl/win/m_tools.c0000664000175000017500000006453415212624223017211 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_tools.c * @short Functions to create the 'Tools' submenu * @author Sébastien Le Roux */ /* * This file: 'm_tools.c' * * Contains: * - The functions to create the 'Tools' submenu * * List of functions: void set_motion_sensitive (glwin * view, int status); void invert_visible (project * this_proj); G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_tools (glwin * view, int id); GMenu * measure_section (glwin * view, int popm); GMenu * volume_section (glwin * view, int popm); GMenu * edit_section (glwin * view, int popm); GMenu * mouse_mode_menu (glwin * view, int popm); GMenu * selection_mode_menu (glwin * view, int popm); GMenu * modes_section (glwin * view, int popm); GMenu * md_menu (glwin * view, int popm); GMenu * inv_menu (glwin * view, int popm); GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men); GMenu * menu_tools (glwin * view, int popm); */ #include "cell_edit.h" #include "atom_edit.h" #include "submenus.h" extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data); extern gboolean spin (gpointer data); extern void check_hidden_visible (project * this_proj); char * input_types[NINPUTS] = {i18n("Classical: DL-POLY"), i18n("Classical: LAMMPS"), i18n("First-Principles: CPMD"), i18n("First-Principles: CP2K"), i18n("QM-MM: CPMD - [Soon]"), i18n("QM-MM: CP2K - [Soon]")}; gchar * modes[3]={i18n("Analysis "), i18n("Edition "), i18n("Input(s)")}; gchar * smodes[NSELECTION]={i18n("Atom/Bond"), i18n("Coordination Sphere"), i18n("Fragment"), i18n("Molecule"), i18n("Single Fragment"), i18n("Single Molecule"), i18n("Measures (Edition Mode Only)")}; gchar * invl[2]={i18n("Selection"), i18n("Visible/Hidden")}; /*! \fn void set_motion_sensitive (glwin * view, int status) \brief change motion parameters following a change in the mouse mode \param view the target glwin \param status initialize or restore spin */ void set_motion_sensitive (glwin * view, int status) { int i; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) widget_set_sensitive (view -> ogl_anim[i], status); #endif if (view -> player != NULL) widget_set_sensitive (view -> player -> win, status); if (view -> spiner != NULL) widget_set_sensitive (view -> spiner -> win, status); if (view -> rec != NULL) widget_set_sensitive (view -> rec -> win, status); if (! status) { if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } } else if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } } /*! \fn G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) \brief set selection mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> selection_mode; int j = the_data -> b; #ifdef GTK4 if (i != j) { #else // GTK3 Menu Action To Check if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { this_proj -> modelgl -> selection_mode = NONE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[i], FALSE); if (widg != this_proj -> modelgl -> ogl_smode[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE); } #endif this_proj -> modelgl -> selection_mode = j; } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE); } #endif } /*! \fn G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) \brief set mouse mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> mode; int j = the_data -> b; if (! (j == EDITION && is_atom_win_active(this_proj -> modelgl))) { #ifdef GTK4 if (i != j) #else if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #endif { this_proj -> modelgl -> mode = NONE; #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[i], FALSE); if (widg != this_proj -> modelgl -> ogl_mode[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE); } #endif this_proj -> modelgl -> mode = j; if (this_proj -> modelgl -> mode == EDITION) { for (i=1; i<3; i++) init_coordinates (this_proj, i, FALSE, TRUE); set_motion_sensitive (this_proj -> modelgl, 0); } else { for (i=1; i<3; i++) { if (this_proj -> modelgl -> saved_coord[i] != NULL) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; } } set_motion_sensitive (this_proj -> modelgl, 1); if (this_proj -> modelgl -> selection_mode == NSELECTION-1) { #ifdef GTK4 set_selection_mode (NULL, & this_proj -> modelgl -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[0], TRUE); set_selection_mode (this_proj -> modelgl -> ogl_smode[0], & this_proj -> modelgl -> colorp[0][0]); #endif } } i = activep; active_project_changed (this_proj -> id); active_project_changed (i); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (this_proj -> modelgl -> ogl_smode[NSELECTION-1], (this_proj -> modelgl -> mode == EDITION) ? 1 : 0); #endif i = (this_proj -> modelgl -> mode == EDITION) ? EDITION : ANALYZE; gchar * str = g_strdup_printf (_("%s - 3D view - [%s mode]"), prepare_for_title(this_proj -> name), _(mode_name[i])); gtk_window_set_title (GTK_WINDOW (this_proj -> modelgl -> win), str); g_free (str); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE); } #endif } } /*! \fn void invert_visible (project * this_proj) \brief invert visible atom(s) \param this_proj the target project */ void invert_visible (project * this_proj) { int i, j, k; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (k=0; k<2; k++) this_proj -> atoms[i][j].show[k] = ! this_proj -> atoms[i][j].show[k]; } } check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) \brief invert selection or visible callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); switch (the_data -> b) { case 0: invert_selection (this_proj); init_default_shaders (this_proj -> modelgl); break; case 1: invert_visible (this_proj); break; } } #ifdef GTK3 extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); /*! \fn GtkWidget * menu_tools (glwin * view, int id) \brief create the 'Tools' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_tools (glwin * view, int id) { int i; GtkWidget * menut = gtk_menu_new (); gtk3_menu_item (menut, _("Measures"), IMG_NONE, NULL, G_CALLBACK(window_measures), (gpointer)view, TRUE, GDK_KEY_m, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); GtkWidget * widg = gtk3_menu_item (menut, _("Volumes"), IMG_NONE, NULL, G_CALLBACK(window_volumes), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); add_menu_separator (menut); gtk_menu_shell_append ((GtkMenuShell *)menut, menu_item_new_with_submenu(_("Edit"), TRUE, menu_edit(view, id))); add_menu_separator (menut); widg = create_menu_item (FALSE, _("Mouse Mode")); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); GtkWidget * menum = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menum); guint accel[3]={GDK_KEY_a, GDK_KEY_e, GDK_KEY_i}; guint acces[4]={GDK_KEY_A, GDK_KEY_C, GDK_KEY_F, GDK_KEY_M}; if (id == 0) { for (i=0; i<2; i++) { view -> ogl_mode[i] = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0], TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_mode[i], (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); } } else { for (i=0; i<2; i++) { widg = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0], TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); } } /*widg = create_menu_item (TRUE, _(modes[2])); gtk_menu_shell_append ((GtkMenuShell *)menum, widg); GtkWidget * menui = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menui); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); if (id == 0) { for (i=0; i ogl_mode[i+2] = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[2+i][0], FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_mode[i+2], 0); } } else { for (i=0; i colorp[2+i][0], FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE); widget_set_sensitive (widg, 0); } }*/ widg = create_menu_item (FALSE, _("Selection Mode")); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); GtkWidget * menusm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menusm); if (id == 0) { for (i=0; i ogl_smode[i] = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } else { view -> ogl_smode[i] = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } if (i == NSELECTION-1) widget_set_sensitive (view -> ogl_smode[i], (view -> mode == EDITION) ? 1 : 0); } } else { for (i=0; i colorp[i][0], TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } else { widg = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } if (i == NSELECTION-1) widget_set_sensitive (widg, (view -> mode == EDITION) ? 1 : 0); } } add_menu_separator (menut); GtkWidget * menuf = NULL; widg = create_menu_item (FALSE, _("Molecular Dynamics")); widget_set_sensitive (widg, get_project_by_id(view -> proj) -> nspec); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); if (id == 0) { for (i=0; i ogl_mode[i+2+NINPUTS] = create_menu_item (TRUE, _(input_types[i])); gtk_menu_shell_append ((GtkMenuShell *)menuf, view -> ogl_mode[i+2+NINPUTS]); g_signal_connect (G_OBJECT (view -> ogl_mode[i+2+NINPUTS]), "activate", G_CALLBACK(create_field), & view -> colorp[i][0]); if (i > 3) widget_set_sensitive (view -> ogl_mode[i+2+NINPUTS], 0); } set_advanced_bonding_menus (view); } else { for (i=0; i colorp[i][0]); // if (i < 2 || i > 3) widget_set_sensitive (widg, view -> adv_bonding[1]); if (i < 2) widget_set_sensitive (widg, view -> adv_bonding[1]); if (i > 3) widget_set_sensitive (widg, 0); } } add_menu_separator (menut); GtkWidget * menuin = NULL; widg = create_menu_item (FALSE, _("Invert")); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); menuin = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuin); for (i=0; i<2; i++) { widg = create_menu_item (FALSE, _(invl[i])); gtk_menu_shell_append ((GtkMenuShell *)menuin, widg); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(invert_this), & view -> colorp[i][0]); } return menut; } #else /*! \fn G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open the measurement window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) { window_measures (NULL, data); } /*! \fn GMenu * measure_section (glwin * view, int popm) \brief create the 'Tools -> Measures' menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * measure_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Measures"), "measures", popm, popm, "M", IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_measures), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open the volumes window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) { window_volumes (NULL, data); } /*! \fn GMenu * volume_section (glwin * view, int popm) \brief create the 'Tools -> Volumes' menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * volume_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Volumes"), "volumes", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_volumes), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * edit_section (glwin * view, int popm) \brief create the 'Tools -> Edit' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * edit_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Edit"), menu_edit(view, popm)); return menu; } /*! \fn G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change mouse radio menu item callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * mode = g_variant_get_string (parameter, NULL); int lgt = strlen (mode); gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, mode); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-mouse-mode", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * mode_name = NULL; int i; for (i=0; i<2; i++) { mode_name = g_strdup_printf ("set-mouse-mode.%d.0", i); if (g_strcmp0(mode, (const gchar *)mode_name) == 0) { set_mode (NULL, & view -> colorp[i][0]); g_free (mode_name); mode_name = NULL; break; } g_free (mode_name); mode_name = NULL; } // Update the menu bar is required to activate / deactivate the selection mode option update_menu_bar (view); } } /*! \fn GMenu * mouse_mode_menu (glwin * view, int popm) \brief create the 'Tools -> Mouse Mode' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * mouse_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * accel[3] = {"A", "E", "I"}; int i, j; j = (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1; for (i=0; i<2; i++) { append_opengl_item (view, menu, _(modes[i]), "mouse-mode", popm, i, accel[i], IMG_NONE, NULL, FALSE, G_CALLBACK(change_mouse_mode_radio), (gpointer)view, FALSE, (i == view -> mode) ? TRUE : FALSE, TRUE, j); } return menu; } /*! \fn G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change selection mode callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * mode = g_variant_get_string (parameter, NULL); int lgt = strlen (mode); gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, mode); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-sel-mode", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * mode_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (mode_name); mode_name = NULL; break; } g_free (mode_name); mode_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * selection_mode_menu (glwin * view, int popm) \brief create the 'Tools -> Selection Mode' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * selection_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * acces[4]={"A", "C", "F", "M"}; gchar * str; int i, j; for (i=0; i mode == EDITION) ? 1 : 0 : TRUE; if (i < 4) { str = g_strdup_printf ("%s", acces[i]); append_opengl_item (view, menu, _(smodes[i]), "sel-mode", popm, i, str, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view, FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j); g_free (str); } else { append_opengl_item (view, menu, _(smodes[i]), "sel-mode", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view, FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j); } } return menu; } /*! \fn GMenu * modes_section (glwin * view, int popm) \brief create the 'Tools -> * Modes' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * modes_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Mouse Mode"), mouse_mode_menu(view, popm)); append_submenu (menu, _("Selection Mode"), selection_mode_menu(view, popm)); return menu; } /*! \fn G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief run MD input assistant callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) { create_field (NULL, data); } /*! \fn GMenu * md_menu (glwin * view, int popm) \brief create the 'Molecular Dynamics' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * md_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i colorp[i][0], FALSE, FALSE, FALSE, (i < 2) ? view -> adv_bonding[1] : (i > 3) ? FALSE : TRUE); } return menu; } /*! \fn G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) \brief invert this callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) { invert_this (NULL, data); } /*! \fn GMenu * inv_menu (glwin * view, int popm) \brief create the 'Tools -> Invert' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * inv_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i<2; i++) { append_opengl_item (view, menu, _(invl[i]), "inv", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_invert_this), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE); } return menu; } /*! \fn GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) \brief append a new menu item with a new submenu \param view the target glwin \param item_name the new menu item label \param men the menu item new submenu */ GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) { GMenu * menu = g_menu_new (); append_submenu (menu, item_name, men); return menu; } /*! \fn GMenu * menu_tools (glwin * view, int popm) \brief create the 'Tools' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_tools (glwin * view, int popm) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)measure_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)volume_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)edit_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)modes_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, _("Molecular Dynamics"), md_menu(view, popm))); g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, _("Invert"), inv_menu(view, popm))); return menu; } #endif atomes_1.3.1/src/opengl/win/m_back.c0000664000175000017500000000572615212624223016747 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_back.c * @short Function to create the background color menu item * @author Sébastien Le Roux */ /* * This file: 'm_back.c' * * Contains: * - The function to create the background color menu item * * List of functions: GtkWidget * menu_back (glwin * view); GMenu * menu_back (glwin * view, int popm); */ #include "global.h" #include "color_box.h" #include "glwindow.h" extern G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_gradient_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run background gradient color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_gradient_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { gradient_advanced (NULL, data); } #endif #ifdef GTK3 /*! \fn GtkWidget * menu_back (glwin * view) \brief create the background color menu item GTK3 \param view the target glwin */ GtkWidget * menu_back (glwin * view) { GtkWidget * menub = gtk_menu_new (); GtkWidget * bc = create_menu_item (FALSE, _("Color")); gtk_menu_shell_append ((GtkMenuShell *)menub, bc); gtk_menu_item_set_submenu ((GtkMenuItem *)bc, color_box(view, -2, 0, 0)); GtkWidget * gc = create_menu_item (FALSE, _("Gradient color")); g_signal_connect (G_OBJECT (gc), "activate", G_CALLBACK(gradient_advanced), view); gtk_menu_shell_append ((GtkMenuShell *)menub, gc); return menub; } #else /*! \fn GMenu * menu_back (glwin * view, int popm) \brief create the background color menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_back (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("More Colors ..."), "back-color", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_back_color_window), view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Gradient colors"), "back-gradient", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_gradient_advanced), view, FALSE, FALSE, FALSE, TRUE); return menu; } #endif atomes_1.3.1/src/opengl/win/w_box.c0000664000175000017500000002756215212624223016653 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_box.c * @short Functions to create the box properties window * @author Sébastien Le Roux */ /* * This file: 'w_box.c' * * Contains: * - The functions to create the box properties window * * List of functions: G_MODULE_EXPORT void update_box_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" gboolean from_box_or_axis = FALSE; /*! \fn G_MODULE_EXPORT void update_box_parameter (GtkEntry * res, gpointer data) \brief update box parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_box_parameter (GtkEntry * res, gpointer data) { glwin * view; int box_type; double box_line; double box_rad; const gchar * n = entry_get_text (res); #ifdef GTK3 gchar * str; #endif // GTK3 double v = string_to_double ((gpointer)n); if (preferences) { box_type = tmp_box -> box; box_line = tmp_box -> line; box_rad = tmp_box -> rad; } else { view = (glwin *)data; box_type = view -> anim -> last -> img -> abc -> box; box_line = view -> anim -> last -> img -> abc -> line; box_rad = view -> anim -> last -> img -> abc -> rad; } if (box_type == CYLINDERS) { if (v > 0.0) box_rad = v; v = box_rad; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[0][6]), str); g_free (str); #endif view -> anim -> last -> img -> abc -> rad = v; } else { tmp_box -> rad = v; } } else { if (v > 0.0) box_line = v; v = box_line; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[0][4]), str); g_free (str); #endif view -> anim -> last -> img -> abc -> line = v; } else { tmp_box -> line = v; } } update_entry_double (res, v); if (! preferences) { view -> create_shaders[MDBOX] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) \brief set box style callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) { int i = combo_get_active (widg); glwin * view; box_edition * box_win; if (! preferences) { view = (glwin *)data; box_win = view -> box_win; } else { box_win = pref_box_win; } #ifdef GTK4 if (! preferences) { view -> anim -> last -> img -> abc -> box = (i < 0) ? (NONE) : (i == 0) ? WIREFRAME : CYLINDERS; view -> create_shaders[MDBOX] = TRUE; update (view); } #else from_box_or_axis = TRUE; #endif if (i == 1) { hide_the_widgets (box_win -> width_box); show_the_widgets (box_win -> radius_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][2], TRUE); #endif } else { tmp_box -> box = CYLINDERS; } } else if (i == 0) { hide_the_widgets (box_win -> radius_box); show_the_widgets (box_win -> width_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][1], TRUE); #endif } else { tmp_box -> box = WIREFRAME; } } if (! preferences) { view -> create_shaders[MDBOX] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } #ifdef GTK3 from_box_or_axis = FALSE; #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) \brief toggle show / hide box callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) \brief toggle show / hide box callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) #endif { gboolean val = button_get_status ((GtkWidget *)but); glwin * view; box_edition * box_win; if (! preferences) { view = (glwin *)data; box_win = view -> box_win; } else { box_win = pref_box_win; } #ifdef GTK3 from_box_or_axis = TRUE; #endif // GTK3 if (val) { if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], TRUE); #endif } combo_set_active (box_win -> styles, WIREFRAME-1); } else { if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], FALSE); #endif } combo_set_active (box_win -> styles, NONE); } #ifdef GTK3 from_box_or_axis = FALSE; #endif // GTK3 widget_set_sensitive (box_win -> box_data, val); #ifdef GTK4 if (! preferences) update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) \brief set box color callback \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) { if (preferences) { tmp_box -> color = get_button_color (colob); } else { glwin * view = (glwin *)data; view -> anim -> last -> img -> abc -> color = get_button_color (colob); view -> create_shaders[MDBOX] = TRUE; update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_box_delete (GtkWindow * widg, gpointer data) \brief box window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_box_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_box_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief box window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_box_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; view -> box_win -> win = destroy_this_widget (view -> box_win -> win); g_free (view -> box_win); view -> box_win = NULL; return TRUE; } /*! \fn G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) \brief create the box edition window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) { int i; glwin * view; box_edition * the_box; int box_type; double box_line; double box_rad; ColRGBA box_color; if (preferences) { the_box = pref_box_win; box_type = tmp_box -> box; box_color = tmp_box -> color; box_line = tmp_box -> line; box_rad = tmp_box -> rad; } else { view = (glwin *)data; view -> box_win = g_malloc0(sizeof*view -> box_win); the_box = view -> box_win; box_type = view -> anim -> last -> img -> abc -> box; box_color = view -> anim -> last -> img -> abc -> color; box_line = view -> anim -> last -> img -> abc -> line; box_rad = view -> anim -> last -> img -> abc -> rad; } GtkWidget * vbox = create_vbox (BSEP); if (preferences) { the_box -> win = create_vbox (BSEP); adv_box (the_box -> win, _("Box settings"), 5, 120, 0.0); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_box -> win, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 60); } else { gchar * str = g_strdup_printf (_("%s - box settings"), get_project_by_id(view -> proj)->name); the_box -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_box -> win, vbox); } GtkWidget * box; gboolean ac; if (box_type != NONE) { ac = TRUE; } else { ac = FALSE; } the_box -> show_hide = check_button (_("Show/Hide box"), 100, 40, ac, G_CALLBACK(set_show_box_toggle), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_box -> show_hide, FALSE, FALSE, 0); the_box -> box_data = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_box -> box_data, TRUE, TRUE, 10); widget_set_sensitive (the_box -> box_data, ac); GtkWidget * pos_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_box -> box_data, pos_box, TRUE, TRUE, 0); box = abox (the_box -> box_data, _("Style "), 5); the_box -> styles = create_combo (); combo_text_append (the_box -> styles, _("Wireframes")); combo_text_append (the_box -> styles, _("Cylinders")); if (box_type == NONE) i = NONE; if (box_type == WIREFRAME) i = 0; if (box_type == CYLINDERS) i = 1; combo_set_active (the_box -> styles, i); gtk_widget_set_size_request (the_box -> styles, 120, -1); g_signal_connect (G_OBJECT (the_box -> styles), "changed", G_CALLBACK(set_box_combo_style), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, the_box -> styles, FALSE, FALSE, 10); the_box -> width_box = abox (the_box -> box_data, _("Line width [pts] "), 0); the_box -> width = create_entry (G_CALLBACK(update_box_parameter), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(the_box -> width), box_line); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_box -> width_box, the_box -> width, FALSE, FALSE, 10); the_box -> radius_box = abox (the_box -> box_data, _("Cylinder radius [Å] "), 0); the_box -> radius = create_entry (G_CALLBACK(update_box_parameter), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(the_box -> radius), box_rad); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_box -> radius_box, the_box -> radius, FALSE, FALSE, 10); // Colors add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (the_box -> box_data, _("Color "), 5), color_button(box_color, TRUE, 120, -1, G_CALLBACK(set_color_box), data), FALSE, FALSE, 10); if (! preferences) { add_global_option (vbox, & view -> colorp[1][0]); add_gtk_close_event (the_box -> win, G_CALLBACK(on_box_delete), view); show_the_widgets (the_box -> win); if (box_type) { hide_the_widgets (the_box -> width_box); } else { hide_the_widgets (the_box -> radius_box); } } } atomes_1.3.1/src/opengl/win/m_atoms.c0000664000175000017500000006761715212624223017201 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_atoms.c * @short Functions to create the 'Model -> Atom(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_atoms.c' * * Contains: * - The functions to create the 'Model -> Atom(s)' submenu * * List of functions: gchar * label_atpts (project * this_proj, glwin * view, int id); G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data); GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data); GtkWidget * show_atoms_submenu (glwin * view, int id, int at); GtkWidget * color_atoms_submenu (glwin * view, int id, int at); GtkWidget * label_atoms_submenu (glwin * view, int id, int at); GtkWidget * menu_atoms (glwin * view, int id, int at); GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * menu_atoms (glwin * view, int popm, int at); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern void check_hidden_visible (project * this_proj); extern G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data); /*! \fn gchar * label_atpts (project * this_proj, glwin * view, int id) \brief prepare the text of a menu item in the 'Model -> Atom(s)' submenu \param this_proj the target project \param view the target glwin \param id the type of label to prepare */ gchar * label_atpts (project * this_proj, glwin * view, int id) { int i; gchar * mot; gchar * tmp; gchar * str; for (i=0; i < this_proj -> nspec; i++) { switch (id) { case 0: str = g_strdup_printf ("%s [ %f Ã… ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> sphererad[i]); break; case 1: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> pointrad[i]); break; case 2: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> sphererad[i+this_proj -> nspec]); break; case 3: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> pointrad[i+this_proj -> nspec]); break; default: str = g_strdup_printf ("%s [ %f Ã… ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> atomicrad[i]); break; } if (i == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); } return mot; } #ifdef GTK3 extern G_MODULE_EXPORT void set_show_hide_all_atom_labels (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) \brief handle the show / hide atomic species signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; int l, m; project * this_proj = get_project_by_id(the_data -> a); gboolean v = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != this_proj -> modelgl -> ogl_spec[j][k]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[j][k], v); } for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) this_proj -> atoms[l][m].show[j] = v; } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = v; check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) \brief handle the show / hide atomic species label signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) { int l, m; tint * id = (tint *) data; int j = id -> b; int k = id -> c; project * this_proj = get_project_by_id(id -> a); gboolean v = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != this_proj -> modelgl -> ogl_lab[j][k]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], v); } for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { if (this_proj -> atoms[l][m].label[j] != v) { this_proj -> atoms[l][m].label[j] = v; } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) \brief handle the show / hide all atomic labels signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) { tint * id = (tint *) data; int j = id -> b; int k; gboolean show = TRUE; project * this_proj = get_project_by_id(id -> a); for (k=0; k nspec; k++) { if (plot -> show_label[j][k]) show = FALSE; } for (k=0; k nspec; k++) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], show); } } /*! \fn GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) \brief create a chemical species related check menu item GTK3 \param name menu item name \param va check menu item status \param vb menu item sensitivity \param menu the GtkWidget sending the signal \param handler the associated callback \param data the associated data pointer */ GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) { GtkWidget * spec_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, handler, data, FALSE, 0, 0, TRUE, FALSE, va); widget_set_sensitive (spec_widget, vb); return spec_widget; } /*! \fn GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) \brief create a 'Model -> Atom(s)' menu item GTK3 \param str the label for the menu item \param widg the menu GtkWidget to attach the menu item to \param data the associated data pointer */ GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) { GtkWidget * menu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menu); GtkWidget * layout = create_menu_item (TRUE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(set_atom_parameter), data); return layout; } /*! \fn GtkWidget * show_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> show' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * show_atoms_submenu (glwin * view, int id, int at) { GtkWidget * mshow = gtk_menu_new (); gchar * str; gboolean sensitive = (! at) ? TRUE : view -> anim -> last -> img -> draw_clones; project * this_proj = get_project_by_id (view -> proj); if (id == 0) { view -> ogl_spec[at] = g_malloc0(this_proj -> nspec*sizeof*view -> ogl_spec[at]); } int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } if (id == 0) { view -> ogl_spec[at][i] = create_spec_menu (str, view -> anim -> last -> img -> show_atom[at][i], sensitive, mshow, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i]); } else { create_spec_menu (str, view -> anim -> last -> img -> show_atom[at][i], sensitive, mshow, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i]); } g_free (str); } return mshow; } /*! \fn GtkWidget * color_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> Color(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * color_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menuc = gtk_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * str; GtkWidget * sp; int i, j; if (at == 0) { j = 0; } else { j = this_proj -> nspec; } for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } sp = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menuc, sp); gtk_menu_item_set_submenu ((GtkMenuItem *)sp, color_box(view, i+j, 0, 0)); } if (at == 1) widget_set_sensitive (menuc, view -> anim -> last -> img -> draw_clones); return menuc; } /*! \fn GtkWidget * label_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> Label(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * label_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menul = gtk_menu_new (); GtkWidget * all = create_menu_item (FALSE, _("Show/Hide All")); g_signal_connect (G_OBJECT (all), "activate", G_CALLBACK(show_hide_all_atom_labels), & view -> colorp[at][0]); gtk_menu_shell_append ((GtkMenuShell *)menul, all); GtkWidget * l_show = create_menu_item (FALSE, _("Show")); gtk_menu_shell_append ((GtkMenuShell *)menul, l_show); GtkWidget * mshow = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)l_show, mshow); project * this_proj = get_project_by_id (view -> proj); gchar * str; gboolean sensitive = (! at) ? TRUE : view -> anim -> last -> img -> draw_clones; if (id == 0) { view -> ogl_lab[at] = g_malloc0(this_proj -> nspec*sizeof*view -> ogl_lab[at]); } int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } if (id == 0) { view -> ogl_lab[at][i] = create_spec_menu (str, view -> anim -> last -> img -> show_label[at][i], sensitive, mshow, G_CALLBACK(show_hide_labels), & view -> colorp[at][i]); } else { create_spec_menu (str, view -> anim -> last -> img -> show_label[at][i], sensitive, mshow, G_CALLBACK(show_hide_labels), & view -> colorp[at][i]); } g_free (str); } if (at == 0 || id == 1) { GtkWidget * l_sel = create_menu_item (FALSE, _("Select atom(s)")); gtk_menu_shell_append ((GtkMenuShell *)menul, l_sel); g_signal_connect (G_OBJECT (l_sel), "activate",G_CALLBACK(atom_properties), & view -> colorp[at][2]); if (id == 1) widget_set_sensitive (l_sel, sensitive); GtkWidget * l_adv = add_advanced_item (menul, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][1], FALSE, 0, 0); if (id == 1) widget_set_sensitive (l_adv, sensitive); } else { view -> ogl_clones[2] = create_menu_item (FALSE, _("Select atom(s)")); gtk_menu_shell_append ((GtkMenuShell *)menul, view -> ogl_clones[2]); g_signal_connect (G_OBJECT (view -> ogl_clones[2]), "activate",G_CALLBACK(atom_properties), & view -> colorp[at][2]); widget_set_sensitive (view -> ogl_clones[2], sensitive); view -> ogl_clones[3] = add_advanced_item (menul, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][1], FALSE, 0, 0); widget_set_sensitive (view -> ogl_clones[3], sensitive); } return menul; } /*! \fn GtkWidget * menu_atoms (glwin * view, int id, int at) \brief create the 'Atom(s)' submenu elements GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * menu_atoms (glwin * view, int id, int at) { int i; GtkWidget * widg; gchar * str; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menua = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Show"), TRUE, show_atoms_submenu (view, id, at))); if (at == 1 && id == 0) { view -> ogl_clones[1] = color_atoms_submenu (view, id, at); gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Color(s)"), ! (view -> anim -> last -> img -> color_map[0] != 0), view -> ogl_clones[1])); } else { gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Color(s)"), ! (view -> anim -> last -> img -> color_map[0] != 0), color_atoms_submenu (view, id, at))); } gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Label(s)"), TRUE, label_atoms_submenu (view, id, at))); i = view -> anim -> last -> img -> style; str = label_atpts (this_proj, view, 2*at); if (id == 0) { view -> ogl_atoms[4*at] = create_menu_item(FALSE, _("Radius(ii)")); gtk_menu_shell_append ((GtkMenuShell *)menua, view -> ogl_atoms[4*at]); view -> ogl_atoms[4*at+1] = create_atom_layout_widget (str, view -> ogl_atoms[4*at], & view -> colorp[at][0]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_atoms[4*at+1], 0); } } else if (i == SPHERES || i == BALL_AND_STICK) { widg = create_menu_item (FALSE, _("Radius(ii)")); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widg = create_atom_layout_widget (str, widg, & view -> colorp[at][0]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } g_free (str); str = label_atpts (this_proj, view, 1+2*at); if (id == 0) { view -> ogl_atoms[4*at+2] = create_menu_item(FALSE, _("Dot Size(s)")); gtk_menu_shell_append ((GtkMenuShell *)menua, view -> ogl_atoms[4*at+2]); view -> ogl_atoms[4*at+3] = create_atom_layout_widget (str, view -> ogl_atoms[4*at+2], & view -> colorp[at][1]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_atoms[4*at+3], 0); } } else if (i == WIREFRAME || i == PUNT) { widg = create_menu_item (FALSE, _("Dot Size(s)")); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widg = create_atom_layout_widget (str, widg, & view -> colorp[at][1]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } g_free (str); if (id == 0 && at == 1) { view -> ogl_clones[4] = add_advanced_item (menua, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][0], FALSE, 0, 0); if (at == 1) { widget_set_sensitive (view -> ogl_clones[4], view -> anim -> last -> img -> draw_clones); } } else { GtkWidget * advanced = add_advanced_item (menua, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][0], FALSE, 0, 0); if (at == 1) { widget_set_sensitive (advanced, view -> anim -> last -> img -> draw_clones); } } return menua; } #else extern G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * state, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; int l, m; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id (the_data -> a); GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * atom = g_action_get_name ((GAction *)action); int lgt = strlen (atom); gchar * name = g_strdup_printf ("%c%c", atom[lgt-2], atom[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, atom); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k]; } if (doit) { for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) this_proj -> atoms[l][m].show[j] = show; } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = show; init_default_shaders (this_proj -> modelgl); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /*! \fn G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide label signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id (the_data -> a); GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * label = g_action_get_name ((GAction *)action); int lgt = strlen (label); gchar * name = g_strdup_printf ("%c%c", label[lgt-2], label[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, label); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = ! this_proj -> modelgl -> anim -> last -> img -> show_label[j][k]; } if (doit) { int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { if (this_proj -> atoms[l][m].label[j] != show) { this_proj -> atoms[l][m].label[j] = show; } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /*! \fn G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide all labels GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) { // Neither check, nor radio tint * id = (tint *) data; int i, j, k; project * this_proj = get_project_by_id(id -> a); i = id -> b; gboolean show = ! this_proj -> atoms[0][0].label[i]; for (j=0; j steps; j++) { for (k=0; k natomes; k++) { this_proj -> atoms[j][k].label[i] = show; } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, i); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); } /*! \fn GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Label(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Show/Hide All"), (at) ? "clones-labels-all" : "atoms-labels-all", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_all_atom_labels), & view -> colorp[at][0], FALSE, FALSE, FALSE, sensitive); GMenu * smenu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * str; int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } append_opengl_item (view, smenu, str, (! at) ? "atom-label" : "clone-label", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_labels), & view -> colorp[at][i], TRUE, view -> anim -> last -> img -> show_label[at][i], FALSE, sensitive); } append_submenu (menu, _("Show"), smenu); append_opengl_item (view, menu, _("Select atom(s)"), (! at) ? "atom-select" : "clone-select", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][2], FALSE, FALSE, FALSE, sensitive); append_opengl_item (view, menu, _("Advanced"), (! at) ? "atom-lab-adv" : "clone-lab-adv", popm, i, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][1], FALSE, FALSE, FALSE, sensitive); return menu; } /*! \fn GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Color(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); GMenu * menuc; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { stra = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { stra = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } strb = g_strdup_printf ("%s", (! at) ? "atom-color" : "clone-color"); menuc = g_menu_new (); append_opengl_item (view, menuc, strb, strb, popm, i, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menuc, _("More Colors ..."), strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][i+at*this_proj -> nspec], FALSE, FALSE, FALSE, sensitive); append_submenu (menu, stra, menuc); g_free (stra); g_free (strb); g_object_unref (menuc); } return menu; } /*! \fn GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Show' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); gchar * str; project * this_proj = get_project_by_id (view -> proj); int i; for (i=0; i nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } append_opengl_item (view, menu, str, (! at) ? "show-atom" : "show-clone", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i], TRUE, view -> anim -> last -> img -> show_atom[at][i], FALSE, sensitive); g_free (str); } return menu; } /*! \fn GMenu * menu_atoms (glwin * view, int popm, int at) \brief create the 'Atom(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) */ GMenu * menu_atoms (glwin * view, int popm, int at) { int i = view -> anim -> last -> img -> style; gboolean sensitive = (at) ? view -> anim -> last -> img -> draw_clones : TRUE; GMenu * menu = g_menu_new (); append_submenu (menu, _("Show"), show_atoms_submenu(view, popm, at, sensitive)); append_submenu (menu, _("Color(s)"), color_atoms_submenu (view, popm, at, sensitive)); append_submenu (menu, _("Label(s)"), label_atoms_submenu (view, popm, at, sensitive)); GMenuItem * item; if (i == SPHERES || i == BALL_AND_STICK) { item = g_menu_item_new (_("Radius(ii)"), (sensitive) ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (at) ? "clone-radii" : "atom-radii", NULL); g_menu_append_item (menu, item); } if (i == WIREFRAME || i == PUNT) { item = g_menu_item_new (_("Dot Size(s)"), (sensitive) ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (at) ? "clone-pts" : "atom-pts", NULL); g_menu_append_item (menu, item); } append_opengl_item (view, menu, _("Advanced"), (! at) ? "atom-advanced" : "clone-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][0], FALSE, FALSE, FALSE, sensitive); return menu; } #endif atomes_1.3.1/src/opengl/win/color_box.h0000664000175000017500000000423615212624223017521 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file color_box.h * @short Structure definitions for color management \n Function declarations for color management * @author Sébastien Le Roux */ /* * This header file: 'color_box.h' * * Contains: - Structure definitions for color management - Function declarations for color management */ typedef struct { double red; double green; double blue; } color; extern color colorp[64]; #ifdef GTK4 extern void color_box (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern GtkWidget * color_box (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data); #endif extern G_MODULE_EXPORT void window_color_total_poly (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_color_partial_poly (GtkWidget * widg, gpointer data); atomes_1.3.1/src/opengl/win/m_rep.c0000664000175000017500000006431615212624223016635 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_rep.c * @short Functions to create the 'View -> Representation' submenu * @author Sébastien Le Roux */ /* * This file: 'm_rep.c' * * Contains: * - The functions to create the 'View -> Representation' submenu * * List of functions: G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data); void update_labels (glwin * view); void camera_has_changed (gdouble value, gpointer data); G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data); G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_center_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_rep (glwin * view, int id); GMenu * menu_rep (glwin * view, int popm); GMenu * menu_reset (glwin * view, int popm); GMenu * menu_fullscreen (glwin * view, int popm); GMenu * menu_view (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #include "preferences.h" extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); extern G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); #endif gchar * text_reps[OGL_REPS] = {i18n("Orthographic"), i18n("Perspective")}; /*! \fn void update_labels (glwin * view) \brief update labels (on representation data update) \param view the target glwin */ void update_labels (glwin * view) { int i; for (i=0; i<2; i++) if (view -> anim -> last -> img -> labels[i].scale) view -> create_shaders[LABEL] = TRUE; if (view -> anim -> last -> img -> labels[2].scale) view -> create_shaders[MAXIS] = TRUE; if (view -> anim -> last -> img -> labels[3].scale) view -> create_shaders[MEASU] = TRUE; } /*! \fn void camera_has_changed (gdouble value, gpointer data) \brief update camera data \param value the new value \param data the associated data pointer */ void camera_has_changed (gdouble value, gpointer data) { tint * cid = (tint *)data; glwin * view; rep_edition * the_rep; GLdouble * p_depth; GLdouble * c_angle; GLdouble * c_shift; GLdouble * gnear; GLdouble * zoom; if (preferences) { the_rep = pref_rep_win; GLdouble val = 10000.0; p_depth = & val; c_angle = tmp_rep -> c_angle; c_shift = tmp_rep -> c_shift; gnear = & tmp_rep -> gnear; zoom = & tmp_rep -> zoom; } else { view = get_project_by_id(cid -> a) -> modelgl; the_rep = view -> rep_win; p_depth = & view -> anim -> last -> img -> p_depth; c_angle = view -> anim -> last -> img -> c_angle; c_shift = view -> anim -> last -> img -> c_shift; gnear = & view -> anim -> last -> img -> gnear; zoom = & view -> anim -> last -> img -> zoom; } double v; switch (cid -> b) { case 0: * zoom = 2.0*(1.0-value); // gtk_spin_button_set_increments ((GtkSpinButton *)view -> rep_win -> camera_widg[0], view -> zoom_factor, view -> zoom_factor); break; case 1: // > camera depth if (value > * gnear) { * p_depth = value; } else { * p_depth = * gnear + 0.01; gtk_spin_button_set_value ((GtkSpinButton *)the_rep -> camera_widg[1], * p_depth); } break; case 2: // < perspective depth if (value < * p_depth) { * gnear = value; } else { * gnear = * p_depth - 0.01; gtk_spin_button_set_value ((GtkSpinButton *)the_rep -> camera_widg[2], * gnear); } break; default: if (cid -> b < 5) { if (value != c_angle[cid -> b - 3]) { if (preferences) { c_angle[cid -> b - 3] = value; } else { v = c_angle[cid -> b - 3] - value; save_rotation_quaternion (view); if (cid -> b == 3) { rotate_x_y (view, v, 0.0); } else { rotate_x_y (view, 0.0, v); } } gtk_spin_button_set_value ((GtkSpinButton *)the_rep -> camera_widg[cid -> b], value); } } else { c_shift[cid -> b - 5] = (value == 0.0) ? value : - value; } break; } if (! preferences) { update_labels (view); if (view -> anim -> last -> img -> xyz -> axis != NONE) view -> create_shaders[MAXIS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) \brief reset view callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) { int i; if (preferences) { tmp_rep -> proj = -1; tmp_rep -> zoom = ZOOM; tmp_rep -> c_angle[0] = - CAMERA_ANGLE_X; tmp_rep -> c_angle[1] = - CAMERA_ANGLE_Y; for (i=0; i<2; i++) tmp_rep -> c_shift[i] = 0.0; tmp_rep -> gnear = 6.0; if (pref_rep_win) { if (pref_rep_win -> camera_widg[2] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[2])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[2], tmp_rep -> gnear); } for (i=0; i<2; i++) { if (pref_rep_win -> camera_widg[i+3] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[i+3], tmp_rep -> c_angle[i]); } if (pref_rep_win -> camera_widg[i+5] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[i+5])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[i+5], tmp_rep -> c_shift[i]); } } if (pref_rep_win -> camera_widg[0] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[0], 1.0 - 0.5*tmp_rep -> zoom); } } } else { glwin * view = (glwin *)data; i = view -> mode; view -> mode = ANALYZE; init_camera (get_project_by_id(view -> proj)); view -> mode = i; update_labels (view); update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) \brief reset view callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) \brief reset view callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) #endif { reset_view (NULL, data); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update camera data callback - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { camera_has_changed (value, data); return FALSE; } /*! \fn G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) \brief update camera data callback - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) { camera_has_changed (gtk_range_get_value (range), data); } /*! \fn G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) \brief update camera data callback - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) { camera_has_changed (gtk_spin_button_get_value(res), data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) \brief representation window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief representation window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; int i; for (i=0; i<7; i++) { if (view -> rep_win -> camera_widg[i]) view -> rep_win -> camera_widg[i] = destroy_this_widget(view -> rep_win -> camera_widg[i]); } destroy_this_widget ((GtkWidget *)widg); return TRUE; } /*! \fn G_MODULE_EXPORT void set_rep_combo (GtkComboBox * box, gpointer data) \brief change representation combo callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rep_combo (GtkComboBox * box, gpointer data) { int rep = combo_get_active ((GtkWidget *)box); rep_edition * the_rep; glwin * view; if (preferences) { tmp_rep -> rep = rep; the_rep = pref_rep_win; } else { view = (glwin *)data; the_rep = view -> rep_win; view -> anim -> last -> img -> rep = rep; update (view); } int i; for (i=1; i<3; i++) { if (the_rep) { if (the_rep -> camera_widg[i] && GTK_IS_WIDGET(the_rep -> camera_widg[i])) { widget_set_sensitive (the_rep -> camera_widg[i], rep); } } } } /*! \fn G_MODULE_EXPORT void set_projection_combo (GtkComboBox * box, gpointer data) \brief change projection combo callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_projection_combo (GtkComboBox * box, gpointer data) { int proj = combo_get_active ((GtkWidget *)box); if (preferences) { tmp_rep -> proj = proj; set_camera_pos (NULL, & pref_pointer[proj]); } else { glwin * view = (glwin *)data; set_camera_pos (NULL, & view -> colorp[proj][0]); } } /*! \fn G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) \brief open advanced representation dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) { gchar * cam_opts[7]={_("Zoom"), _("Perspective depth"), _("Camera depth"), _("Camera pitch"), _("Camera heading"), _("Camera right/left"), _("Camera up/down")}; gchar * str; double smax[7] = {1.0, 100.0, 100.0, 180.0, 180.0, 100.0, 100.0}; double smin[7] = {-2.0, 0.0, 0.0, -180.0, -180.0, -100.0, -100.0}; double sdel[7] = {0.001, 0.01, 0.01, 0.1, 0.1, 0.01, 0.01}; int sdig[7] = {3, 2, 2, 1, 1, 2, 2}; int i; double max_depth; double v, v_max; glwin * view; rep_edition * the_rep; GtkWidget * hbox; GtkWidget * phbox, * pvbox; GtkWidget * vbox = create_vbox (BSEP); int rep; gboolean build_win = TRUE; if (preferences) { the_rep = pref_rep_win; the_rep -> win = create_vbox (BSEP); rep = tmp_rep -> rep; max_depth = 100.0; add_box_child_start (GTK_ORIENTATION_VERTICAL, the_rep -> win, vbox, FALSE, FALSE, 10); } else { view = (glwin *)data; max_depth = view -> anim -> last -> img -> m_depth; if (view -> rep_win) { if (view -> rep_win -> win && GTK_IS_WIDGET(view -> rep_win -> win)) { build_win = FALSE; show_the_widgets (view -> rep_win -> win); } } if (build_win) { view -> rep_win = g_malloc0(sizeof*view -> rep_win); the_rep = view -> rep_win; str = g_strdup_printf (_("%s - OpenGL scene set-up"), get_project_by_id(view -> proj)->name); the_rep -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_rep -> win, vbox); rep = view -> anim -> last -> img -> rep; } } if (build_win) { adv_box (vbox, _("Projection"), 10, 120, 0.0); if (preferences) { phbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, phbox, FALSE, FALSE, 0); pvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, phbox, pvbox, FALSE, FALSE, 30); } gchar * projection[6]={_("Right [1, 0, 0]"), _("Left [-1, 0, 0]"), _("Top [0, 1, 0]"), _("Bottom [0, -1, 0]"), _("Front [0, 0, 1]"), _("Back [0, 0, -1]")}; hbox = abox ((preferences) ? pvbox : vbox, _("Select"), 0); GtkWidget * combo = create_combo (); combo = create_combo (); for (i=0; i<6; i++) combo_text_append (combo, projection[i]); combo_set_active (combo, (preferences) ? tmp_rep -> proj : -1); gtk_widget_set_size_request (combo, 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_projection_combo), (preferences) ? NULL : view); adv_box (vbox, _("Representation"), 10, 120, 0.0); if (preferences) { phbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, phbox, FALSE, FALSE, 0); pvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, phbox, pvbox, FALSE, FALSE, 30); } hbox = abox ((preferences) ? pvbox : vbox, _("Mode"), 0); combo = create_combo (); for (i=0; iOpenGL camera set-up"), 10, 120, 0.0); if (preferences) { phbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, phbox, FALSE, FALSE, 0); pvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, phbox, pvbox, FALSE, FALSE, 30); } for (i=0; i<7; i++) { if (! preferences || i != 1) { hbox = abox ((preferences) ? pvbox : vbox, cam_opts[i], 0); switch (i) { case 0: v = 1.0-0.5*((preferences) ? tmp_rep -> zoom : view -> anim -> last -> img -> zoom); break; case 1: v = view -> anim -> last -> img -> p_depth; break; case 2: v = (preferences) ? tmp_rep -> gnear : view -> anim -> last -> img -> gnear; break; default: if (i < 5) { v = (preferences) ? tmp_rep -> c_angle[i-3] : view -> anim -> last -> img -> c_angle[i-3]; } else { if (preferences) { v = (tmp_rep -> c_shift[i-5] == 0.0) ? 0.0 : - tmp_rep -> c_shift[i-5]; } else { v = (view -> anim -> last -> img -> c_shift[i-5] == 0.0) ? 0.0 : - view -> anim -> last -> img -> c_shift[i-5]; } } break; } if (the_rep -> camera_widg[i]) the_rep -> camera_widg[i] = destroy_this_widget (the_rep -> camera_widg[i]); v_max = (i == 1) ? max_depth : (preferences && i == 2) ? 1000.0 : smax[i]; the_rep -> camera_widg[i] = spin_button (G_CALLBACK(set_camera_spin), v, smin[i], v_max, sdel[i], sdig[i], 150, (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, the_rep -> camera_widg[i], FALSE, FALSE, 10); if (i > 2 || i == 0) { str = g_strdup_printf ("∈ [%.1f, %.1f]", smin[i], smax[i]); } else if (i == 1) { str = g_strdup_printf (_("∈ [C. depth, %.1f]"), max_depth); } else { str = (preferences) ? g_strdup_printf (_("∈ [%.1f, P. depth*]"), smin[i]) : g_strdup_printf (_("∈ [%.1f, P. depth]"), smin[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 25, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); if ((i == 1 || i == 2) && rep == ORTHOGRAPHIC) widget_set_sensitive (the_rep -> camera_widg[i], 0); } } hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button((preferences) ? _("Reset") : _("Reset View"), IMG_NONE, NULL, 100, 25, GTK_RELIEF_NORMAL, G_CALLBACK(reset_view), view), FALSE, FALSE, 200); if (! preferences) { add_gtk_close_event (the_rep -> win, G_CALLBACK(on_rep_delete), view); show_the_widgets (the_rep -> win); } else { append_comments (the_rep -> win, "*", _("Perspective depth evaluated from the model")); } } } /*! \fn G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) \brief change representation callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i, j; i = this_proj -> modelgl -> anim -> last -> img -> rep; j = the_data -> b; #ifdef GTK4 if (i != j) #else if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #endif { this_proj -> modelgl -> anim -> last -> img -> rep = NONE; #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[i], FALSE); if (widg != this_proj -> modelgl -> ogl_rep[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> rep = j; for (i=1; i<3; i++) { if (this_proj -> modelgl -> rep_win) { if (this_proj -> modelgl -> rep_win -> camera_widg[i] && GTK_IS_WIDGET(this_proj -> modelgl -> rep_win -> camera_widg[i])) { widget_set_sensitive (this_proj -> modelgl -> rep_win -> camera_widg[i], j); } } } this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_rep (glwin * view, int id) \brief create the 'View' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_rep (glwin * view, int id) { int i, j; GtkWidget * menur = gtk_menu_new (); j = view -> anim -> last -> img -> rep; if (id == 0) { for (i=0; i ogl_rep[i] = gtk3_menu_item (menur, _(text_reps[i]), IMG_NONE, NULL, G_CALLBACK(set_rep), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); } } else { for (i=0; i colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); } } add_advanced_item (menur, G_CALLBACK(representation_advanced), (gpointer)view, FALSE, 0, 0); return menur; } #else /*! \fn G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change representation radio items callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * rep = g_variant_get_string (parameter, NULL); int lgt = strlen (rep); gchar * name = g_strdup_printf ("%c%c", rep[lgt-2], rep[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, rep); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-rep", g_variant_new_string((const gchar *)name)); g_free (name); } else { const gchar * rep = g_variant_get_string (parameter, NULL); gchar * rep_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (rep_name); rep_name = NULL; break; } g_free (rep_name); rep_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change representation callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { representation_advanced (NULL, data); } /*! \fn GMenu * menu_rep (glwin * view, int popm) \brief create 'View -> Representation' submenu items - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_rep (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i, j; i = view -> anim -> last -> img -> rep; for (j=0; jF", IMG_STOCK, (gpointer)FULLSCREEN, FALSE, G_CALLBACK(set_full_screen), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_view (glwin * view, int popm) \brief create the 'View' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_view (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Representation"), menu_rep(view, popm)); append_submenu (menu, _("Projection"), menu_proj(view, popm)); append_submenu (menu, _("Background"), menu_back(view, popm)); if (get_project_by_id(view -> proj) -> nspec) g_menu_append_item (menu, menu_box_axis (view, popm, 1)); if (! popm) { g_menu_append_section (menu, NULL, (GMenuModel*)menu_reset(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)menu_fullscreen(view, popm)); } return menu; } #endif atomes_1.3.1/src/opengl/win/m_bonds.c0000664000175000017500000003171015212624223017144 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_bonds.c * @short Functions to create the 'Model -> Bond(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_bonds.c' * * Contains: * - The functions to create the 'Model -> Bond(s)' submenu * * List of functions: gchar * label_cutrab (project * this_proj, glwin * view, int id); GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu); GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data); GtkWidget * menu_bonds (glwin * view, int id, int at); GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive); GMenu * menu_bonds (glwin * view, int popm, int at); */ #include "global.h" #include "glview.h" #include "glwindow.h" #ifdef GTK4 extern G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data); #endif /*! \fn gchar * label_cutrab (project * this_proj, glwin * view, int id) \brief prepare the text of a menu item in the 'Model -> Bond(s)' submenu \param this_proj the target project \param view the target glwin \param id the type of label to prepare */ gchar * label_cutrab (project * this_proj, glwin * view, int id) { int i, j, k, m; gchar * mot; gchar * tmp; gchar * str; chemical_data * chem = this_proj -> chemistry; k = 0; m = this_proj -> nspec; for (i=0; i < m; i++) { if (id == 0) { str = g_strdup_printf ("%s-%s [ %f Ã… ]", chem -> label[i], chem -> label[i], chem -> cutoffs[i][i]); } else { if (id == 1) { str = g_strdup_printf ("%s-%s [ %f Ã… ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> bondrad[i][i]); } else if (id == 2) { str = g_strdup_printf ("%s-%s [ %f Ã… ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> bondrad[i+m][i+m]); } else if (id == 3) { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> linerad[i][i]); } else { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> linerad[i+m][i+m]); } } if (i == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); k+=1; } for (i=0; i < m-1; i++) { for (j=i+1; j < m; j++) { if (id == 0) { str = g_strdup_printf ("%s-%s [ %f Ã… ]", chem -> label[i], chem -> label[j], chem -> cutoffs[i][j]); } else { if (id == 1) { str = g_strdup_printf ("%s-%s [ %f Ã… ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> bondrad[i][j]); } else if (id == 2) { str = g_strdup_printf ("%s-%s [ %f Ã… ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> bondrad[i+m][j+m]); } else if (id == 3) { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> linerad[i][j]); } else { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> linerad[i+m][j+m]); } } if (k == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); k += 1; } } if (id == 0) { str = g_strdup_printf (_("Total [ %f Ã… ]"), chem -> grtotcutoff); tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); g_free (str); } return mot; } #ifdef GTK3 /*! \fn GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) \brief create a menu item, and attach it to menu \param str the label of the menu item \param menu the GtkWidget menu to attach the menu item to */ GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) { GtkWidget * layout = create_menu_item (FALSE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); return layout; } /*! \fn GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) \brief create a 'Model -> Bond(s)' menu item GTK3 \param str the menu item name \param widg the menu GtkWidget to attach the menu item to \param va the type of bond item to set the appropriate action \param data the associated data pointer */ GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) { GtkWidget * menu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menu); GtkWidget * layout = create_menu_item (FALSE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); switch (va) { case 0: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_bonds), data); break; case 1: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(set_bond_parameter), data); break; default: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_cuts), data); break; } return layout; } /*! \fn GtkWidget * menu_bonds (glwin * view, int id, int at) \brief create the 'Bond(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * menu_bonds (glwin * view, int id, int at) { GtkWidget * widg; gchar * str; int i; GtkWidget * menub = gtk_menu_new (); i = view -> anim -> last -> img -> style; if (id == 0) { if (at == 0) { str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), view -> anim -> last -> img -> radall[1]); } view -> ogl_bonds[8*at] = create_bond_menu_item (_("Radius"), menub); view -> ogl_bonds[1+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[8*at], 0, & view -> colorp[2+at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[1+8*at], 0); } } else if (i == CYLINDERS) { if (at == 0) { str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), view -> anim -> last -> img -> radall[1]); } widg = create_bond_menu_item (_("Cylinder Radius(ii)"), menub); widg = create_bond_layout_widget (str, widg, 0, & view -> colorp[2+at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (id == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); view -> ogl_bonds[2+8*at] = create_bond_menu_item (_("Radius(ii)"), menub); view -> ogl_bonds[3+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[2+8*at], 1, & view -> colorp[at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[3+8*at], 0); } } else if (i == BALL_AND_STICK) { str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); widg = create_bond_menu_item (_("Radius(ii)"), menub); widg = create_bond_layout_widget (str, widg, 1, & view -> colorp[at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (id == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); view -> ogl_bonds[4+8*at] = create_bond_menu_item (_("Line Width(s)"), menub); view -> ogl_bonds[5+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[4+8*at], 1, & view -> colorp[at][1]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[5+8*at], 0); } } else if (i == WIREFRAME) { str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); widg = create_bond_menu_item (_("Line Width(s)"), menub);; widg = create_bond_layout_widget (str, widg, 1, & view -> colorp[at][1]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (at == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 0); if (id == 0) { view -> ogl_bonds[6] = create_bond_menu_item (_("Cutoffs"), menub); view -> ogl_bonds[7] = create_bond_layout_widget (str, view -> ogl_bonds[6], 2, & view -> colorp[at][0]); } else { widg = create_bond_menu_item (_("Cutoffs"), menub); widg = create_bond_layout_widget (str, widg, 2, & view -> colorp[at][0]); } g_free (str); } return menub; } #else /*! \fn GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) \brief create a bond menu item GTK4 \param view the target glwin \param str menu item name \param key menu item action key \param popm main app (0) or popup (1) \param id menu item action id \param handler the associated callback \param data the associated data pointer \param sensitive menu item sensitivity */ GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, str, key, popm, id, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, sensitive); return menu; } /*! \fn GMenu * menu_bonds (glwin * view, int popm, int at) \brief create the 'Bond(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) */ GMenu * menu_bonds (glwin * view, int popm, int at) { gchar * str; gboolean sensitive = (at == 1 && ! view -> anim -> last -> img -> draw_clones) ? FALSE : TRUE; GMenu * menu = g_menu_new (); switch (view -> anim -> last -> img -> style) { case CYLINDERS: if (at == 0) { str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf (_("Cylinder(s) [ %f Ã… ]"), view -> anim -> last -> img -> radall[1]); } append_submenu (menu, _("Cylinder Radius(ii)"), create_bond_layout_section (view, str, (at) ? "clone-cyl-rad" : "atom-cyl-rad", popm, at, G_CALLBACK(window_bonds), & view -> colorp[2+at][0], sensitive)); g_free (str); break; case BALL_AND_STICK: str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); append_submenu (menu, _("Radius(ii)"), create_bond_layout_section (view, str, (at) ? "clone-rad" : "atom-rad", popm, at+1, G_CALLBACK(set_bond_parameter), & view -> colorp[at][0], sensitive)); g_free (str); break; case WIREFRAME: str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); append_submenu (menu, _("Line Width(s)"), create_bond_layout_section (view, str, (at) ? "clone-line" : "atom-line", popm, at+2, G_CALLBACK(set_bond_parameter), & view -> colorp[at][1], sensitive)); g_free (str); break; } if (! at) { str = label_cutrab (get_project_by_id(view -> proj), view, 0); append_submenu (menu, _("Cutoffs"), create_bond_layout_section (view, str, "bond-cutoffs", popm, at+3, G_CALLBACK(window_cuts), & view -> colorp[at][0], sensitive)); g_free (str); } return menu; } #endif atomes_1.3.1/src/opengl/win/glwindow.h0000664000175000017500000000343015212624223017360 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glwindow.h * @short Function declarations for the creation of the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glwindow.h' * * Contains: - Function declarations for the creation of the OpenGL window */ extern void set_this_style (glwin * view, int style); extern void update_menus (glwin * view); extern void prep_model (int p); extern void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); #ifdef GTK4 extern G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data); extern void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view); #else extern G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); #endif atomes_1.3.1/src/opengl/win/initcoord.h0000664000175000017500000000316515212624223017525 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initcoord.h * @short Function declarations to handle the atomic coordination data * @author Sébastien Le Roux */ /* * This header file: 'initcoord.h' * * Contains: - Function declarations to handle the atomic coordination data */ #ifdef GTK3 void prep_all_coord_menus (glwin * view); void prep_all_ring_menus (glwin * view); #endif // GTK3 void set_advanced_bonding_menus (glwin * view); void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]); void allocate_partial_geo_ (int * sp, int * ngsp); void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]); void init_menu_fragmol_ (int * id); void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init); void init_opengl_coords (int id, int nt, int init); void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]); atomes_1.3.1/src/opengl/win/w_measures.c0000664000175000017500000007275215212624223017710 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_measures.c * @short Functions to create the measurement(s) window * @author Sébastien Le Roux */ /* * This file: 'w_measures.c' * * Contains: * - The functions to create the measurement(s) window * * List of functions: int get_selection_type (glwin * view); G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data); G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data); gchar * create_measure_label (glwin * view, int sid); void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store); void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store); void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store); void update_selection_tree (glwin * view, int sid, int mid); void update_label_selection (glwin * view, int sid); void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data); G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data); G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); GtkWidget * create_selection_tree (glwin * view, int sid, int mid); GtkWidget * measurment_tab (glwin * view, int sid, int mid); */ #include "global.h" #include "glview.h" extern void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); int bond_id; int angle_id; int dihedral_id; /*! \fn int get_selection_type (glwin * view) \brief get selection type \param view the target glwin */ int get_selection_type (glwin * view) { if (view -> mode == EDITION && view -> selection_mode == NSELECTION-1) { return 1; } else if (view -> atom_win) { return 1; } else { return 0; } } /*! \fn void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) \brief fill bond tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param store the GtkTreeStore to fill */ void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) { GtkTreeIter bond_level; gchar * str_a, * str_b, * str_c; project * this_proj = get_project_by_id(p); atom * at, * bt; gboolean pbc = this_proj -> cell.pbc; distance dist; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; bond_id ++; dist = distance_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%.3lf", dist.length); if (pbc) { gtk_tree_store_append (store, & bond_level, NULL); gtk_tree_store_set (store, & bond_level, 0, bond_id, 1, str_a, 2, str_b, 3, str_c, 4, dist.pbc, -1); } else { gtk_tree_store_append (store, & bond_level, NULL); gtk_tree_store_set (store, & bond_level, 0, bond_id, 1, str_a, 2, str_b, 3, str_c, -1); } g_free (str_a); g_free (str_b); g_free (str_c); } /*! \fn void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) \brief fill angle tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param store the GtkTreeStore to fill */ void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) { GtkTreeIter angle_level; gchar * str_a, * str_b, * str_c, * str_d; project * this_proj = get_project_by_id(p); atom * at, * bt, * ct; gboolean pbc = this_proj -> cell.pbc; angle theta; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; ct = & this_proj -> atoms[s][c]; angle_id ++; theta = angle_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt, ct); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%s%d", this_proj -> chemistry -> label[ct -> sp], c+1); str_d = g_strdup_printf("%.2lf", theta.angle); if (pbc) { gtk_tree_store_append (store, & angle_level, NULL); gtk_tree_store_set (store, & angle_level, 0, angle_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, theta.pbc, -1); } else { gtk_tree_store_append (store, & angle_level, NULL); gtk_tree_store_set (store, & angle_level, 0, angle_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, -1); } g_free (str_a); g_free (str_b); g_free (str_c); g_free (str_d); } /*! \fn void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) \brief fill dihedral tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param d 4th atom id \param store the GtkTreeStore to fill */ void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) { GtkTreeIter dihedral_level; gchar * str_a, * str_b, * str_c, * str_d, * str_e; project * this_proj = get_project_by_id(p); atom * at, * bt, * ct, * dt; gboolean pbc = this_proj -> cell.pbc; angle phi; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; ct = & this_proj -> atoms[s][c]; dt = & this_proj -> atoms[s][d]; dihedral_id ++; phi = dihedral_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt, ct, dt); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%s%d", this_proj -> chemistry -> label[ct -> sp], c+1); str_d = g_strdup_printf("%s%d", this_proj -> chemistry -> label[dt -> sp], d+1); str_e = g_strdup_printf("%.2lf", phi.angle); if (pbc) { gtk_tree_store_append (store, & dihedral_level, NULL); gtk_tree_store_set (store, & dihedral_level, 0, dihedral_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, str_e, 6, phi.pbc, -1); } else { gtk_tree_store_append (store, & dihedral_level, NULL); gtk_tree_store_set (store, & dihedral_level, 0, dihedral_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, str_e, -1); } g_free (str_a); g_free (str_b); g_free (str_c); g_free (str_d); g_free (str_e); } extern ColRGBA init_color (int id, int numid); /*! \fn void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the measures tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; gtk_tree_model_get (mod, iter, dat -> b, & i, -1); gtk_cell_renderer_set_visible (renderer, i); } /*! \fn void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the measures tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; j = 0; tint * dat = (tint *) data; gboolean docolor = FALSE; gtk_tree_model_get (mod, iter, 0, & i, -1); project * this_proj = get_project_by_id(dat -> a); image * img = this_proj -> modelgl -> anim -> last -> img; int pi = get_selection_type (this_proj -> modelgl); if (img -> selected[pi] -> selected) { if ((dat -> c == 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) || (dat -> c < 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION)) { switch (dat -> c) { case 0: j = num_bonds (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_bonds[i]) docolor = TRUE; break; case 1: j = num_angles (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_angles[i]) docolor = TRUE; break; case 2: j = num_dihedrals (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_dihedrals[i]) docolor = TRUE; break; } } } set_renderer_color (docolor, renderer, init_color (i, j)); } /*! \fn void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; dat -> c = 2; measure_set_color (col, renderer, mod, iter, data); set_renderer_markup (mod, iter, renderer, dat -> b); } /*! \fn void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Measure window set color and Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; measure_set_color (col, renderer, mod, iter, dat); set_renderer_markup (mod, iter, renderer, dat -> b); } GtkWidget * create_selection_tree (glwin * view, int sid, int mid); /*! \fn void update_selection_tree (glwin * view, int sid, int mid) \brief update measurements tree view \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ void update_selection_tree (glwin * view, int sid, int mid) { GtkWidget * cont = gtk_widget_get_parent (view -> measure_win -> selection_tree[mid]); view -> measure_win -> selection_tree[mid] = destroy_this_widget (view -> measure_win -> selection_tree[mid]); view -> measure_win -> selection_tree[mid] = create_selection_tree (view, sid, mid); add_container_child (CONTAINER_SCR, cont, view -> measure_win -> selection_tree[mid]); show_the_widgets (cont); } /*! \fn void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) \brief measure tree button event \param widget the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event buttton \param data the associated data pointer */ void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) { if (event_button == 1) { tint * dat = (tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; int pi = get_selection_type (view); GtkTreeModel * measure_model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(widget), event_x, event_y, & e_x, & e_y); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), e_x, e_y, & path, & column, & i, & j)) #else if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), event_x, event_y, & path, & column, & i, & j)) #endif { GtkTreeIter row; if (gtk_tree_model_get_iter (measure_model, & row, path)) { gtk_tree_model_get (measure_model, & row, 0, & j, -1); // select bonds, angles or dihedrals: switch (dat -> c) { case 0: view -> anim -> last -> img -> selected[pi] -> selected_bonds[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_bonds[j]; break; case 1: view -> anim -> last -> img -> selected[pi] -> selected_angles[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_angles[j]; break; case 2: view -> anim -> last -> img -> selected[pi] -> selected_dihedrals[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_dihedrals[j]; break; } } } view -> create_shaders[MEASU] = TRUE; update (view); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief measures tree view button press callback GTK3 \param widget the GtkWidget sending the signal \param event the GtkEventButton triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS) { GdkEventButton * bevent = (GdkEventButton*)event; measure_tree_button_event (widget, bevent -> x, bevent -> y, bevent -> button, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief measures tree view button press callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { measure_tree_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #endif /*! \fn GtkWidget * create_selection_tree (glwin * view, int sid, int mid) \brief create the measurements selection tree \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ GtkWidget * create_selection_tree (glwin * view, int sid, int mid) { int i, j; GtkTreeViewColumn * sel_col[7]; GtkCellRenderer * sel_cell[7]; GtkTreeStore * sel_model; gchar * ctitle[3][7]={{i18n("Id."), i18n("Atom 1"), i18n("Atom 2"), i18n("Distance [Ã…]"), i18n("Using PBC"), "NULL", "NULL"}, {i18n("Id."), i18n("Atom 1"), i18n("Atom 2"), i18n("Atom 3"), "θ [°]", i18n("Using PBC"), "NULL"}, {i18n("Id."), i18n("Atom 1"), i18n("Atom 2"), i18n("Atom 3"), i18n("Atom 4"), "Ï• [°]", i18n("Using PBC")}}; gchar * ctype[3][7]={{"text", "text", "text", "text", "active", "text", "text"}, {"text", "text", "text", "text", "text", "active", "text"}, {"text", "text", "text", "text", "text", "text", "active"}}; int tree_dim[3]={4, 5, 6}; GType col_type[3][7]= {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}}; if (get_project_by_id(view -> proj) -> cell.pbc) { sel_model = gtk_tree_store_newv (tree_dim[mid]+1, col_type[mid]); j = 1; } else { sel_model = gtk_tree_store_newv (tree_dim[mid], col_type[mid]); j = 0; } GtkWidget * selection_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(sel_model)); for (i=0; i<4+j+mid; i++) { if ((mid == 0 && i < 4) || (mid == 1 && i < 5) || (mid == 2 && i < 6)) { sel_cell[i] = gtk_cell_renderer_text_new(); sel_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[mid][i]), sel_cell[i], ctype[mid][i], i, NULL); if (i == 0) gtk_tree_view_column_set_visible (sel_col[i], FALSE); } else if ((mid == 0 && i == 4) || (mid == 1 && i == 5) || (mid == 2 && i == 6)) { sel_cell[i] = gtk_cell_renderer_toggle_new (); sel_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[mid][i]), sel_cell[i], ctype[mid][i], i, NULL); } gtk_tree_view_column_set_alignment (sel_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(selection_tree), sel_col[i]); if (i > 0 && i < 4+mid) { if (mid < 2) { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], measure_set_color_and_markup, & view -> colorp[i][mid], NULL); } else { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], dihedral_set_color_and_markup, & view -> colorp[i][0], NULL); } } else if (i > 0) { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], measure_set_visible, & view -> colorp[i][0], NULL); } } image * img = view -> anim -> last -> img; if (img -> selected[sid] -> selected < MAX_IN_SELECTION) { if ( (mid == 0 && img -> selected[sid] -> selected > 1) || (mid == 1 && img -> selected[sid] -> selected > 2) || (mid == 2 && img -> selected[sid] -> selected > 3 && img -> selected[sid] -> selected < MAX_IN_SELECTION-10)) { if (mid == 0) { bond_id = -1; bonds_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); #ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "bond-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif } else if (mid == 1) { angle_id = -1; angles_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); #ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "angle-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif } else if (mid == 2) { dihedral_id = -1; dihedrals_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); /*#ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "dihedral-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif*/ } } } GtkTreeSelection * selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(selection_tree)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE); gtk_tree_view_expand_all (GTK_TREE_VIEW(selection_tree)); return selection_tree; } /*! \fn GtkWidget * measurment_tab (glwin * view, int sid, mid) \brief create measurement tab \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ GtkWidget * measurment_tab (glwin * view, int sid, int mid) { GtkWidget * scrollsets = create_scroll (NULL, 350+50*mid, 350, GTK_SHADOW_NONE); view -> measure_win -> selection_tree[mid] = create_selection_tree (view, sid, mid); add_container_child (CONTAINER_SCR, scrollsets, view -> measure_win -> selection_tree[mid]); return scrollsets; } /*! \fn gchar * create_measure_label (glwin * view, int sid) \brief create the text information for the number of atom(s) in selection \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) */ gchar * create_measure_label (glwin * view, int sid) { gchar * str; image * img = view -> anim -> last -> img; if (img -> selected[sid] -> selected < MAX_IN_SELECTION) { str = g_strdup_printf (_("\tAtom(s) in selection* :\t%d"), img -> selected[sid] -> selected); } else { str = g_strdup_printf (_("\tSorry too many [%d] atoms in selection*"), img -> selected[sid] -> selected); } return str; } /*! \fn void update_label_selection (glwin * view, int sid) \brief update the text information for the number of atoms/measures in selection \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) */ void update_label_selection (glwin * view, int sid) { gtk_label_set_text (GTK_LABEL(view -> measure_win -> label), create_measure_label(view, sid)); gtk_label_set_use_markup (GTK_LABEL(view -> measure_win -> label), TRUE); } extern GtkWidget * labels_tab (glwin * view, int id); /*! \fn G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) \brief measurements style edition window close button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) { destroy_this_widget (GTK_WIDGET(data)); } /*! \fn G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) \brief measurements style edition window \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; gchar * str = g_strdup_printf (_("%s - measures - style"), get_project_by_id(view -> proj) -> name); GtkWidget * win = create_win (str, view -> measure_win -> win, TRUE, FALSE); //gtk_widget_set_size_request (win, -1, -1480); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, win, vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, labels_tab (view, (is_atom_win_active(view) || (view -> mode == EDITION && view -> selection_mode == NSELECTION-1)) ? 4 : 3), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); GtkWidget * close_but = create_button (_("Close"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_ml), win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, close_but, FALSE, TRUE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_gtk_close_event (win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (win); gtk_window_set_resizable (GTK_WINDOW(win), FALSE); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) \brief measurements window close event callback GTK4 \param data the associated data pointer \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) \brief measurements window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *) data; view -> measure_win -> win = destroy_this_widget (view -> measure_win -> win); int i; for (i=0; i<3; i++) { view -> measure_win -> selection_tree[i] = NULL; } g_free (view -> measure_win); view -> measure_win = NULL; return FALSE; } /*! \fn G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) \brief create the measurements window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> measure_win == NULL) { view -> measure_win = g_malloc0(sizeof*view -> measure_win); gchar * str = g_strdup_printf (_("%s - measures"), get_project_by_id(view -> proj) -> name); int pi = get_selection_type (view); view -> measure_win -> win = create_win (str, view -> win, FALSE, FALSE); gtk_widget_set_size_request (view -> measure_win -> win, 450, 500); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> measure_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); view -> measure_win -> label = markup_label(create_measure_label(view, pi), -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> measure_win -> label, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 0), gtk_label_new (_("Distances"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 1), gtk_label_new (_("Angles"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 2), gtk_label_new (_("Dihedrals"))); str = g_strdup_printf (_("You can select up to %d atoms for both inter-atomic distance(s) and angle(s),"), MAX_IN_SELECTION-1); append_comments (vbox, "*", str); g_free (str); str = g_strdup_printf (_("and up to %d atoms for dihedral angle(s) measurement(s)"), MAX_IN_SELECTION-11); append_comments (vbox, " ", str); g_free (str); GtkWidget * hbox = create_hbox (0); GtkWidget * but = create_button (_("Font and style"), IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(measure_labels), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, TRUE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_gtk_close_event (view -> measure_win -> win, G_CALLBACK(close_measure_event), view); show_the_widgets (view -> measure_win -> win); } else { show_the_widgets (view -> measure_win -> win); } } atomes_1.3.1/src/opengl/win/w_search.c0000664000175000017500000044512315212624223017325 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_search.c * @short Functions to create the object search widgets, for: - The atom(s) / clone(s) advanced window \n - The model edition window (move, remove, replace, insert, random move) \n - The crystal builder window * @author Sébastien Le Roux */ /* * This file: 'w_search.c' * * Contains: * - The functions to create the object search widgets, for: - The atom(s) / clone(s) advanced window - The model edition window (move, remove, replace, insert, random move) - The crystal builder window * * List of functions: int get_asearch_num_objects (atom_search * asearch); int get_asearch_object (atom_search * asearch); int get_asearch_filter (atom_search * asearch); int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch); int get_todo_size (atom_search * asearch); gboolean get_asearch_is_object (atom_search * asearch); gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj); gboolean append (atom_search * asearch, project * this_proj, int i, int j); gboolean update_this_search (atom_search * asearch); gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init); gchar * get_node_name (int node, atom_search * asearch, project * this_proj); void check_tree_for_this_search (project * this_proj, atom_search * asearch); void check_all_trees (project * this_proj); void motion_to_zero (atom_search * asearch); void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id); void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj); void fill_atom_model (atom_search * asearch, project * this_proj); void update_search_tree (atom_search * asearch); void clear_fields (atom_search * asearch); void re_populate_tree_search (atom_search * asearch); void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status); void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter); void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter); void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid); void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg); void allocate_todo (atom_search * asearch, int tsize); void clean_todo (atom_search * asearch); void clean_picked_and_labelled (atom_search * asearch); void add_random_column (atom_search * asearch); void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo); G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data); G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data); G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data); GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats); GtkWidget * prepare_box_too_much (atom_search * asearch); GtkWidget * selection_tab (atom_search * asearch, int nats); GtkTreeModel * replace_combo_tree (gboolean insert, int proj); atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid); */ #include "atom_edit.h" extern int check_label_numbers (project * this_proj, int types); extern int selected_aspec; extern int select_from_library (gboolean visible, project * this_proj, atom_search * asearch); extern atom_selection * preserve_ogl_selection (glwin * view); extern void create_slab_lists (project * this_proj); extern int get_to_be_selected (glwin * view); extern void restore_ogl_selection (glwin * view); /*! \fn int get_asearch_num_objects (atom_search * asearch) \brief the number of type of object(s) in this atom search \param asearch the target atom search */ int get_asearch_num_objects (atom_search * asearch) { int filter = get_asearch_filter (asearch); switch (filter) { case 0: return get_project_by_id (asearch -> proj) -> nspec; break; case 1: return get_project_by_id (asearch -> proj) -> coord -> cmax+1; break; default: return get_project_by_id (asearch -> proj) -> coord -> totcoord[filter -1]; break; } } /*! \fn int get_asearch_object (atom_search * asearch) \brief get the number of object(s) in this atom search \param asearch the target atom search */ int get_asearch_object (atom_search * asearch) { if (asearch -> object < 0) return 0; if (asearch -> mode) return asearch -> object; if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { return (asearch -> object > 1) ? 2 : asearch -> object; } else { return asearch -> object; } } /*! \fn int get_asearch_filter (atom_search * asearch) \brief get asearch filter \param asearch the target atom search */ int get_asearch_filter (atom_search * asearch) { if (asearch -> object < 0 || asearch -> filter < 0) return 0; if (asearch -> mode) { return asearch -> object + asearch -> filter; } else if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { return (asearch -> object > 1) ? 1 + asearch -> filter : asearch -> filter; } else { return asearch -> object + asearch -> filter; } } /*! \fn gboolean get_asearch_is_object (atom_search * asearch) \brief get asearch object \param asearch the target atom search */ gboolean get_asearch_is_object (atom_search * asearch) { if (asearch -> passivating) { return (asearch -> object > 1) ? TRUE : FALSE; } else { return (asearch -> object) ? TRUE : FALSE; } } /*! \fn void check_tree_for_this_search (project * this_proj, atom_search * asearch) \brief check, and adjust if needed, the tree construction for this atom search \param this_proj the target project \param asearch the target atom search */ void check_tree_for_this_search (project * this_proj, atom_search * asearch) { int j, k, l, m, n, o, p; double u, v; gchar * str; GtkTreeIter iter; GtkTreeIter child; GtkTreeModel * atom_model; gboolean dothis, dothat, is_first; int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int is_clone = (asearch -> action == 1) ? 1 : 0; int status = (asearch -> action < 2) ? 2 : asearch -> status; int val = get_asearch_num_objects (asearch); int step = this_proj -> modelgl -> anim -> last -> img -> step; atom_model = GTK_TREE_MODEL(asearch -> atom_model); if (gtk_tree_model_get_iter_first (atom_model, & iter)) { dothis = TRUE; if (! filter && status == 2) { while (dothis) { gtk_tree_model_get (atom_model, & iter, IDCOL, & j, -1); j = abs(j) -1; if (j > -1) { gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, this_proj -> modelgl -> anim -> last -> img -> show_label[is_clone][j], -1); if (gtk_tree_model_iter_children (atom_model, & child, & iter)) { dothat = is_first = TRUE; u = v = 0.0; l = 0; m = 1; while (dothat) { gtk_tree_model_get (atom_model, & child, IDCOL, & k, TOPIC, & l, -1); if (k > 0) { k --; if (asearch -> action == RANMOVE) { v = this_proj -> modelgl -> atom_win -> msd[k]; if (! is_first && u != v) v = 0.0; is_first = FALSE; u = v; } m = (l && m) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & child, TOLAB, this_proj -> atoms[step][k].label[is_clone], -1); if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd[k] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[k]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+2, str, -1); g_free (str); } is_first = FALSE; } dothat = gtk_tree_model_iter_next (atom_model, & child); } asearch -> pick[j] = m; if (asearch -> action == RANMOVE) { if (v > 0.0) { str = g_strdup_printf (_("For all: MSDmax= %f"), v); } else { str = g_strdup_printf (_("Set MSDmax for all ...")); } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, asearch -> pick[j], -1); } dothis = gtk_tree_model_iter_next (atom_model, & iter); } } else { while (dothis) { gtk_tree_model_get (atom_model, & iter, IDCOL, & j, -1); j = abs(j) - 1; if (j > -1 && j < val) { k = l = 0; switch (filter) { case 0: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; if (n == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; case 1: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; o = this_proj -> atoms[step][m].coord[filter-1]; if (this_proj -> atoms[step][m].numv == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; default: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; o = this_proj -> atoms[step][m].coord[filter-1]; if (filter == 2) { for (p=0; p coord -> ntg[1][p]; } } if (o == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; } gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, (k == l && k != 0) ? 1 : 0, -1); if (gtk_tree_model_iter_children (atom_model, & child, & iter)) { dothat = TRUE; u = v = 0.0; l = n = 0; m = o = 1; while (dothat) { gtk_tree_model_get (atom_model, & child, IDCOL, & k, TOPIC, & l, -1); if (asearch -> action == RANMOVE && obj) { gtk_tree_model_get (atom_model, & child, TOPIC+1, & n, -1); } if (k > 0) { k --; if (asearch -> action == RANMOVE) { v = this_proj -> modelgl -> atom_win -> msd[k]; if (! is_first && u != v) v = 0.0; is_first = FALSE; u = v; } m = (m && l) ? 1 : 0; o = (o && n) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & child, TOLAB, this_proj -> atoms[step][k].label[is_clone], -1); if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd[k] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[k]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+2, str, -1); g_free (str); } } dothat = gtk_tree_model_iter_next (atom_model, & child); } if (asearch -> action == RANMOVE) { asearch -> pick[j] = (m && o) ? 3 : (o) ? 2 : (m) ? 1 : 0; } else { asearch -> pick[j] = m; } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, m, -1); if (asearch -> action == RANMOVE && v != 0) { if (v > 0.0) { if (filter > 2) { str = g_strdup_printf (_("For all: MSDmax= %f"), v); } else { str = g_strdup_printf (_("MSDmax= %f"), v); } } else { if (obj && filter > 2) { str = g_strdup_printf (_("Set MSDmax for ...")); } else { str = g_strdup_printf (_("Set MSDmax for all ...")); } } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); if (obj) gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+1, o, -1); } } } dothis = gtk_tree_model_iter_next (atom_model, & iter); } } } } /*! \fn void check_all_trees (project * this_proj) \brief check all search trees \param this_proj the target project */ void check_all_trees (project * this_proj) { int i; for (i=0; i<7; i++) { if (i != 5 && this_proj -> modelgl -> search_widg[i] != NULL) { if (this_proj -> modelgl -> search_widg[i] -> atom_model && this_proj -> modelgl -> search_widg[i] -> todo_size < GTK_LIMIT) { check_tree_for_this_search (this_proj, this_proj -> modelgl -> search_widg[i]); } } } } /*! \fn atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid) \brief get insert object from a list by id \param first the first insert object of the list \param oid object origin id (type of origin) \param aid object id */ atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid) { atomic_object * object = first; while (object) { if (! aid && object -> origin == oid) return object; if (aid && object -> id == aid-1) return object; object = object -> next; } return NULL; } /*! \fn void motion_to_zero (atom_search * asearch) \brief reset motion to 0.0 \param asearch the target atom search */ void motion_to_zero (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); int i, j; for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> old_param[asearch -> status][i][j] = this_proj -> modelgl -> atom_win -> new_param[asearch -> status][i][j] = 0.0; } } for (i=0; i<2; i++) { for (j=0; j<6; j++) { update_range_and_entry (this_proj, asearch -> status, i, j); } } } /*! \fn void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id) \brief adjust atom search parameters for motion cases \param this_proj the target project \param asearch the target atom search \param mv motion id (0 = standard, 1 = random) \param id object id */ void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id) { gboolean adjust_mv = FALSE; int filter = get_asearch_filter (asearch); if (this_proj -> modelgl -> atom_win -> to_be_moved[mv]) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[mv]; gboolean check_it = TRUE; gboolean remove_it = FALSE; gboolean add_it = FALSE; while (check_it) { if (object -> id == id) { if (! asearch -> todo[id]) remove_it = TRUE; check_it = FALSE; } else { if (object -> next) { object = object -> next; } else { check_it = FALSE; add_it = TRUE; } } } if (remove_it) { adjust_mv = TRUE; if (object -> ibonds) g_free (object -> ibonds); if (object -> baryc) g_free (object -> baryc); if (object -> at_list) g_free (object -> at_list); if (object -> coord) g_free (object -> coord); if (object -> bcid) g_free (object -> bcid); object -> atoms = object -> bonds = 0; if (object -> next && object -> prev) { object -> prev -> next = object -> next; object -> next -> prev = object -> prev; g_free (object); } else if (! object -> prev && object -> next) { object = object -> next; object -> prev = NULL; g_free (this_proj -> modelgl -> atom_win -> to_be_moved[mv]); this_proj -> modelgl -> atom_win -> to_be_moved[mv] = object; } else if (object -> prev) { object -> prev -> next = NULL; g_free (object); } else { g_free (this_proj -> modelgl -> atom_win -> to_be_moved[mv]); this_proj -> modelgl -> atom_win -> to_be_moved[mv] = NULL; } } else if (add_it) { adjust_mv = TRUE; object_motion = TRUE; if (! filter) { object -> next = create_object_from_species (this_proj, id, NULL); } else if (filter < 3) { object -> next = create_object_from_atom_coordination (this_proj, filter-1, id, NULL); } else { object -> next = create_object_from_frag_mol (this_proj, filter-1, id, NULL); } object -> next -> id = id; object_motion = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[mv] = FALSE; object -> next -> prev = object; } } else { adjust_mv = TRUE; object_motion = TRUE; if (! filter) { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_species (this_proj, id, NULL); } else if (filter < 3) { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_atom_coordination (this_proj, filter-1, id, NULL); } else { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_frag_mol (this_proj, filter-1, id, NULL); } this_proj -> modelgl -> atom_win -> to_be_moved[mv] -> id = id; this_proj -> modelgl -> atom_win -> rebuilt[mv] = FALSE; object_motion = FALSE; } if (adjust_mv && ! mv && this_proj -> modelgl -> atom_win) motion_to_zero (asearch); } /*! \fn void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj) \brief append data to the search tree store \param atom_level the iter to insert the data to \param asearch the target atom search \param is_object the atom search object (atom or group of atoms) \param h the object type id \param i the object id \param this_proj the target project */ void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj) { int j, k, l; int step = this_proj -> modelgl -> anim -> last -> img -> step; gchar * str; j = this_proj -> atoms[0][i].sp; str = g_strdup_printf ("%s%d", this_proj -> chemistry -> label[j], i+1); int aobj = get_asearch_object (asearch); if (aobj == 2) str = g_strdup_printf (_("%s + neighbor(s)"), str); gboolean is_clone = (asearch -> pointer[0].c == 1) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, atom_level, IDCOL, i+1, 1, " ", 2, str, TOLAB, this_proj -> atoms[step][i].label[is_clone], -1); g_free (str); atomic_object * object; switch (asearch -> action) { case 0: gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, this_proj -> atoms[step][i].pick[0], -1); break; case 1: gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, this_proj -> atoms[step][i].pick[0], -1); break; case RANMOVE: if (asearch -> set_for_all > 0) { asearch -> todo[i] = asearch -> set_for_all; if (aobj) { adjust_object_to_move (this_proj, asearch, 1, i); } } k = (asearch -> todo[i] == 1 || asearch -> todo[i] == 3) ? 1 : 0; l = (asearch -> todo[i] == 2 || asearch -> todo[i] == 3) ? 1 : 0; if (this_proj -> modelgl -> atom_win -> msd[i] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[i]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, k, TOPIC+2, str, -1); if (is_object) { gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC+1, l, -1); } g_free (str); break; default: if (asearch -> set_for_all > 0) { asearch -> todo[i] = asearch -> set_for_all; if (asearch -> action == DISPL) { if (aobj) { adjust_object_to_move (this_proj, asearch, 0, i); } } } gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, asearch -> todo[i], -1); if (asearch -> action == REPLACE) { object = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[0], i, 0); gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC+1, (object) ? object -> name : _("Select ..."), TOPIC+3, h, -1); } break; } } /*! \fn gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj) \brief test if the atom 'i' of species 'j' matches requirement(s) to be in the tree store \param asearch the target atom search \param i the atom id \param j the chemical species id (or type id) \param this_proj the target project */ gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj) { gboolean append = FALSE; if (asearch -> spec == 0 || asearch -> spec == j+1) { if (asearch -> action > 1) { if (asearch -> status == 2) { append = TRUE; } else { append = (this_proj -> atoms[0][i].pick[0] == asearch -> status) ? TRUE : FALSE; } } else { append = TRUE; } } return append; } /*! \fn gboolean append (atom_search * asearch, project * this_proj, int i, int j) \brief test if the atom 'i' of species 'j' must be added to the tree store or not \param asearch the target atom search \param this_proj the target project \param i the atom id \param j the chemical species id */ gboolean append (atom_search * asearch, project * this_proj, int i, int j) { int k; gchar * str_a, * str_b; k = this_proj -> modelgl -> anim -> last -> img -> step; gboolean append = FALSE; if (fill_for_action (asearch, i, j, this_proj)) { if (asearch -> search_digit == -1) { if (asearch -> pointer[0].c == 1) { append = this_proj -> atoms[k][i].cloned; } else { append = TRUE; } } else { str_a = g_strdup_printf ("%d", i+1); str_b = g_strdup_printf ("%d", asearch -> search_digit); if (strlen (str_b) > strlen (str_a)) { append = FALSE; } else { k = 0; append = TRUE; while (k < strlen (str_b)) { if (str_a[k] != str_b[k]) { append = FALSE; break; } k++; } } g_free (str_a); g_free (str_b); } } return append; } /*! \fn gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init) \brief adjust the name of the replacement object to use for a type of object if any \param picked type name (species, coordination, fragment, molecule name) \param object the target insert object \param init 1 / 0 depending on the atom search filter */ gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init) { if (object) { if (init && ! picked) { return g_strdup_printf ("%s", object -> name); } else { if (g_strcmp0(picked, object -> name) == 0) { return g_strdup_printf ("%s", picked); } else { return NULL; } } } else { return NULL; } } /*! \fn gchar * get_node_name (int node, atom_search * asearch, project * this_proj) \brief get node label in the atom search tree store \param node the node id \param asearch the target atom search \param this_proj the target project */ gchar * get_node_name (int node, atom_search * asearch, project * this_proj) { int i, j, k, l; int filter = get_asearch_filter (asearch); gchar * str; if (! filter) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[node]); } else if (filter == 1) { str = (node) ? g_strdup_printf (_("%d-fold"), node) : g_strdup_printf (_("Isolated")); } else if (filter == 2) { i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > node) break; } k = 0; for (l=0; l coord -> ntg[filter - 1][l]; str = g_strdup_printf ("%s", env_name(this_proj, node-k, j, 1, NULL)); } else if (filter == 3) { str = g_strdup_printf (_("Fragment N°%d"), node+1); } else { str = g_strdup_printf (_("Molecule N°%d"), node+1); } if (filter < 3 && asearch -> pointer[0].c == 1) str = g_strdup_printf ("%s*", str); return str; } /*! \fn void fill_atom_model (atom_search * asearch, project * this_proj) \brief fill atom search tree store \param asearch the target atom search \param this_proj the target project */ void fill_atom_model (atom_search * asearch, project * this_proj) { GtkTreeIter spec_level, atom_level; int g, h, i, j, k, l, m, n; gchar * str; gboolean do_append; gboolean doit; gboolean * to_insert; gboolean is_object = get_asearch_is_object (asearch); gchar ** picked_names; int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int step = this_proj -> modelgl -> anim -> last -> img -> step; if (asearch -> action != INSERT) { if (asearch -> todo_size >= GTK_LIMIT && ! asearch -> passivating && ! asearch -> mode) { show_the_widgets (asearch -> info[1]); hide_the_widgets (asearch -> id_box); } else { hide_the_widgets (asearch -> info[1]); if (asearch -> mode) { hide_the_widgets (asearch -> id_box); } else { if (asearch -> passivating || (filter > 2 && obj == 2)) { hide_the_widgets (asearch -> id_box); } else { show_the_widgets (asearch -> id_box); } } int val = get_asearch_num_objects (asearch); to_insert = allocbool(val); n = 0; if (asearch -> action == REPLACE) { picked_names = g_malloc0(val*sizeof*picked_names); n = (asearch -> pointer[0].c == 3) ? 0 : 3; } switch (filter) { case 0: for (h=0; h spec || asearch -> spec == h+1) { for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; if (j == h) { to_insert[h] = append (asearch, this_proj, i, j); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); doit = FALSE; } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } } break; case 1: for (h=0; h natomes; i++) { if (this_proj -> atoms[0][i].numv == h) { j = this_proj -> atoms[0][i].sp; to_insert[h] = append (asearch, this_proj, i, j); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } break; default: if (val >= GTK_LIMIT && (obj == 1 || asearch -> object == 3)) { // Improbable: more than 10 000 fragments or molecules // Note: so far the selection and the test case functions are not ready yet to_insert[0] = TRUE; picked_names[0] = g_strdup_printf (_("All %s(s)"), (filter == 2) ? _("fragment") : _("molecule")); val = 1; } else { for (h=0; h natomes; i++) { if (asearch -> spec == 0 || asearch -> spec == this_proj -> atoms[0][i].sp + 1) { j = this_proj -> atoms[step][i].coord[filter - 1]; if (filter == 2) { for (k=0; k atoms[0][i].sp; k++) j += this_proj -> coord -> ntg[filter - 1][k]; } if (j == h) { to_insert[h] = append (asearch, this_proj, i, this_proj -> atoms[0][i].sp); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } } } break; } if ((asearch -> action == REPLACE || asearch -> action == REMOVE) && asearch -> mode && obj && filter > 2) { if (filter == 3 && this_proj -> coord -> totcoord[2] > 1) { str = g_strdup_printf (_("Fragments")); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> set_for_all > 0) asearch -> pick[0] = asearch -> set_for_all; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -1, 1, str, TOPIC, asearch -> pick[0], -1); g_free (str); str = g_strdup_printf ("%d", asearch -> todo[0]); j = (asearch -> action == REMOVE) ? 1 : 2; gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+j, str, -1); g_free (str); if (asearch -> action == REPLACE) { if (picked_names[0]) { str = g_strdup_printf (_("For all: %s"), picked_names[0]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } } } else if (filter == 4 && this_proj -> modelfc) { for (k=0; k modelfc -> mol_by_step[0]; k++) { if (this_proj -> modelfc -> mols[0][k].multiplicity > 1) { str = g_strdup_printf (_("Molecule N°%d"), k+1); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> set_for_all > 0) asearch -> pick[k] = asearch -> set_for_all; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(k+1), 1, str, TOPIC, asearch -> pick[k], -1); g_free (str); str = g_strdup_printf ("%d", asearch -> todo[k]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); if (asearch -> action == REPLACE) { if (picked_names[k]) { str = g_strdup_printf (_("For all: %s"), picked_names[k]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } } } } } } else { for (h=0; h atom_model, & spec_level, NULL); if (asearch -> action == REPLACE && ! asearch -> mode) { g = (asearch -> pointer[0].c == 3) ? 0 : 1; this_proj -> modelgl -> atom_win -> replace_nodes[g][h] = gtk_tree_model_get_path (GTK_TREE_MODEL(asearch -> atom_model), & spec_level); } str = get_node_name (h, asearch, this_proj); if (asearch -> set_for_all > 0) asearch -> pick[h] = asearch -> set_for_all; if (asearch -> action < RANMOVE || asearch -> action > RANMOVE) { gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(h+1), 1, str, TOPIC, asearch -> pick[h], -1); if (asearch -> passivating) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOLAB, asearch -> lab[h], -1); } if (asearch -> set_for_all > 0 && asearch -> action == DISPL && filter > 2) { asearch -> todo[h] = asearch -> set_for_all; adjust_object_to_move (this_proj, asearch, 0, h); } if (asearch -> mode) { g_free (str); str = g_strdup_printf ("%d", asearch -> todo[h]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+5-asearch -> action, str, -1); } } else if (asearch -> action == RANMOVE) { i = (asearch -> pick[h] == 1 || asearch -> pick[h] == 3) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(h+1), 1, str, TOPIC, i, -1); if (is_object) { i = (asearch -> pick[h] == 2 || asearch -> pick[h] == 3) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, i, -1); if (asearch -> set_for_all > 0) { if (filter > 2) { asearch -> todo[h] = asearch -> set_for_all; adjust_object_to_move (this_proj, asearch, 1, h); } } } } g_free (str); if (asearch -> action == REPLACE) { if (picked_names[h]) { if (asearch -> mode || (obj && filter > 2)) { str = g_strdup_printf ("%s", picked_names[h]); } else { str = g_strdup_printf (_("For all: %s"), picked_names[h]); } gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { if (asearch -> mode || (obj && filter > 2)) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select ..."), -1); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } } } else if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd_all[h] > 0.0) { if (obj && filter > 2) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[h]); } else { str = g_strdup_printf (_("For all: MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[h]); } gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } else { if (obj && filter > 2) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, _("Set MSDmax for ..."), -1); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, _("Set MSDmax for all ..."), -1); } } } doit = FALSE; if (asearch -> action > REMOVE && asearch -> action != RANMOVE) { doit = TRUE; } else { doit = (asearch -> passivating) ? FALSE : ! asearch -> mode; } if (doit && (! obj || (filter > 0 && filter < 3))) { for (i=0; i natomes; i++) { do_append = FALSE; j = this_proj -> atoms[0][i].sp; if (! filter) { if (j == h && append (asearch, this_proj, i, j)) do_append=TRUE; } else { k = filter - 1; l = this_proj -> atoms[step][i].coord[k]; if (filter == 1) { m = this_proj -> coord -> geolist[0][j][l]; if (m == h && append (asearch, this_proj, i, j)) do_append=TRUE; } else { if (filter == 2) for (m=0; m coord -> ntg[1][m]; if (l == h && append (asearch, this_proj, i, j)) do_append=TRUE; } } if (do_append) { gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, h, i, this_proj); } } } } } g_free (to_insert); if (asearch -> action == DISPL) check_motion_interactors (this_proj, asearch); if (asearch -> action == REPLACE) g_free (picked_names); } //if (asearch -> passivating) check_tree_for_this_search (this_proj, asearch); } } else { i = (asearch -> pointer[0].c == 7) ? 2 : 1; atomic_object * iobj = this_proj -> modelgl -> atom_win -> to_be_inserted[i]; j = 0; while (iobj) { gtk_list_store_append (asearch -> obj_model, & atom_level); str = g_strdup_printf ("x= %f, y= %f, z= %f", iobj -> baryc[0], iobj -> baryc[1], iobj -> baryc[2]); gtk_list_store_set (asearch -> obj_model, & atom_level, IDCOL, j+1, 1, g_strdup_printf ("%d", j+1), 2, iobj -> name, TOLAB, asearch -> todo[j], TOPIC, str, -1); g_free (str); if (i == 2) { str = g_strdup_printf ("%f", iobj -> occ); gtk_list_store_set (asearch -> obj_model, & atom_level, TOPIC+1, str, -1); g_free (str); } j ++; iobj = iobj -> next; } } if (asearch -> set_for_all > 0) asearch -> set_for_all = -asearch -> set_for_all; } G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); void add_random_column (atom_search * asearch); /*! \fn void update_search_tree (atom_search * asearch) \brief update search tree \param asearch the target atom search */ void update_search_tree (atom_search * asearch) { if (asearch -> pointer[0].c == 7 && asearch -> obj_model) { g_signal_handler_disconnect (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), asearch -> filter); gtk_list_store_clear (asearch -> obj_model); asearch -> filter = g_signal_connect_data (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), "row-deleted", G_CALLBACK(move_up_down), asearch, NULL, (GConnectFlags) 0); } else { if (asearch -> atom_model) gtk_tree_store_clear (asearch -> atom_model); if (asearch -> obj_model) gtk_list_store_clear (asearch -> obj_model); } fill_atom_model (asearch, get_project_by_id(asearch -> proj)); //if (asearch -> action) gtk_tree_view_expand_all (GTK_TREE_VIEW(asearch -> atom_tree)); } /*! \fn gboolean update_this_search (atom_search * asearch) \brief test if it is required to update the search tree or not \param asearch the target atom search */ gboolean update_this_search (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); if (asearch -> passivating) { return FALSE; } else if (! asearch -> passivating && asearch -> todo_size >= GTK_LIMIT) { return FALSE; } else if (! (object && filter > 2)) { return TRUE; } return FALSE; } /*! \fn G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) \brief adjust atom search parameters if >= 10 000 atoms \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; int i; project * this_proj = get_project_by_id(asearch -> proj); gchar * str_a, * str_b; str_a = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(asearch -> entry_a))); asearch -> spec_to_add = -1; for (i = 0; i < this_proj -> nspec; i++) { str_b = g_strdup_printf ("%s", exact_name(this_proj -> chemistry -> label[i])); if (g_strcmp0 (str_a, str_b) == 0) { asearch -> spec_to_add = i; } g_free (str_b); } g_free (str_a); if (asearch -> spec_to_add != -1) { widget_set_sensitive (asearch -> entry_b, 1); set_image_from_icon_name (asearch -> img_a, APPLY); } else { widget_set_sensitive (asearch -> entry_b, 0); widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 0); update_entry_text (GTK_ENTRY(asearch -> entry_b), ""); set_image_from_icon_name (asearch -> img_a, DIAL_ERROR); } } /*! \fn void clear_fields (atom_search * asearch) \brief clear all search fields if >= 10 000 atoms \param asearch the target atom search */ void clear_fields (atom_search * asearch) { int i = combo_get_active (asearch -> atom_box); if (i) { update_entry_text (GTK_ENTRY(asearch -> entry_a), exact_name(get_project_by_id(asearch -> proj) -> chemistry -> label[i-1])); } else { update_entry_text (GTK_ENTRY(asearch -> entry_a), ""); } set_atom (GTK_ENTRY(asearch -> entry_a), asearch); update_entry_text (GTK_ENTRY(asearch -> entry_b), ""); set_image_from_icon_name (asearch -> img_b, DIAL_ERROR); } /*! \fn gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief remove from the tree model \param model the tree model \param path the path in the tree model \param iter the tree iter \param data the associated data pointer */ gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i, j; GtkTreeIter parent; atom_search * asearch = (atom_search *)data; project * this_proj; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & i, -1); if (i == asearch -> int_b) { j = (i > 0) ? i -- : abs(i) - 1; asearch -> todo[j] = 0; if (asearch -> action == REPLACE) { j = (i > 0) ? i -- : i - 2; this_proj = get_project_by_id(asearch -> proj); clean_this_object (j, 0, this_proj, asearch); asearch -> in_selection --; } if (gtk_tree_model_iter_parent (model, & parent, iter)) { gtk_tree_store_remove (GTK_TREE_STORE(model), iter); if (! gtk_tree_model_iter_has_child(model, & parent)) { gtk_tree_store_remove (GTK_TREE_STORE(model), & parent); if (asearch -> action == REPLACE) { j = abs(i) - 1; gtk_tree_path_free (this_proj -> modelgl -> atom_win -> replace_nodes[0][j]); this_proj -> modelgl -> atom_win -> replace_nodes[0][j] = NULL; } } } else { gtk_tree_store_remove (GTK_TREE_STORE(model), iter); } return TRUE; } } return FALSE; } /*! \fn G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) \brief remove atom (or object) from the search tree if >= 10 000 atoms \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; asearch -> int_b = (int )string_to_double ((gpointer)entry_get_text (GTK_ENTRY(asearch -> entry_b))); gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), remove_from_model, asearch); clear_fields (asearch); } /*! \fn gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief is this atom already in the tree model if >= 10 000 atoms \param model the target tree model \param path the path in the tree model \param iter the tree iter \param data the associated data pointer */ gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int b; atom_search * asearch = (atom_search *)data; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & b, -1); if (b == asearch -> int_b) { asearch -> was_selected = TRUE; asearch -> path = gtk_tree_model_get_path (model, iter); return TRUE; } } return FALSE; } /*! \fn G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) \brief add atom (or object) to the search tree if >= 10 000 atoms \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); GtkTreeIter spec_level, atom_level, new_level; int i, j, k, l, m; i = this_proj -> modelgl -> anim -> last -> img -> step; j = asearch -> spec_to_add; int filter = get_asearch_filter (asearch); gboolean is_object = get_asearch_is_object (asearch); if (! asearch -> mode) { if (append (asearch, this_proj, -1, j)) { asearch -> was_selected = FALSE; m = asearch -> int_b; asearch -> int_b = j+1; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { switch (filter) { case 0: l = j; break; case 1: l = this_proj -> atoms[i][asearch -> num_to_add].numv; break; case 2: l = this_proj -> atoms[i][asearch -> num_to_add].coord[filter - 1]; for (k=0; k coord -> ntg[filter - 1][k]; break; default: l = this_proj -> atoms[i][asearch -> num_to_add].coord[filter - 1]; break; } asearch -> int_b = -(l+1); gchar * str = get_node_name (l, asearch, this_proj); asearch -> was_selected = FALSE; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> action == REPLACE) { this_proj -> modelgl -> atom_win -> replace_nodes[0][l] = gtk_tree_model_get_path (GTK_TREE_MODEL(asearch -> atom_model), & spec_level); } gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(l+1), 1, str, -1); gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, l, asearch -> num_to_add, this_proj); } else { // Find out where to insert that node ! gtk_tree_model_get_iter (GTK_TREE_MODEL(asearch -> atom_model), & spec_level, asearch -> path); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, & spec_level)) { gboolean append = FALSE; gboolean dothat = TRUE; k = 0; while (dothat) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, IDCOL, & k, -1); if (k > asearch -> num_to_add) { dothat = FALSE; } else { dothat = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & atom_level); append = TRUE; } } gtk_tree_store_insert_before (asearch -> atom_model, & new_level, & spec_level, (append) ? NULL : & atom_level); append_to_model (& new_level, asearch, l, is_object, asearch -> num_to_add, this_proj); } } g_free (str); asearch -> int_b = m; if (asearch -> action == REPLACE) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } else if (asearch -> action == RANMOVE) { str = g_strdup_printf (_("Set MSDmax for all ...")); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } } } } clear_fields (asearch); } /*! \fn void re_populate_tree_search (atom_search * asearch) \brief re populate search tree after atom action if >= 10 000 atoms \param asearch the target atom search */ void re_populate_tree_search (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); GtkTreeIter spec_level, atom_level, new_level; int i, j, k, l, m; i = this_proj -> modelgl -> anim -> last -> img -> step; int filter = get_asearch_filter (asearch); gboolean is_object = get_asearch_is_object (asearch); int s_int_b = asearch -> int_b; for (j=0; j todo_size; j++) { if (asearch -> todo[j]) { k = this_proj -> atoms[i][j].sp; if (append (asearch, this_proj, -1, k)) { asearch -> was_selected = FALSE; switch (filter) { case 0: l = k; break; case 1: l = this_proj -> atoms[i][j].numv; break; case 2: l = this_proj -> atoms[i][j].coord[filter - 1]; for (m=0; m coord -> ntg[filter - 1][m]; break; default: l = this_proj -> atoms[i][j].coord[filter - 1]; break; } asearch -> int_b = -(l+1); gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { gchar * str = get_node_name (l, asearch, this_proj); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, asearch -> int_b, 1, str, -1); if (asearch -> action == RANMOVE) { str = g_strdup_printf (_("Set MSDmax for all ...")); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, l, j, this_proj); } else { // Find out where to insert that node ! gtk_tree_model_get_iter (GTK_TREE_MODEL(asearch -> atom_model), & spec_level, asearch -> path); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, & spec_level)) { gboolean append = FALSE; gboolean dothat = TRUE; k = 0; while (dothat) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, IDCOL, & k, -1); if (k > j) { dothat = FALSE; } else { dothat = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & atom_level); append = TRUE; } } gtk_tree_store_insert_before (asearch -> atom_model, & new_level, & spec_level, (append) ? NULL : & atom_level); append_to_model (& new_level, asearch, is_object, l, j, this_proj); } } } } } asearch -> int_b = s_int_b; } /*! \fn G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) \brief set search id if >= 10 000 atoms \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); asearch -> int_b = (int )string_to_double ((gpointer)entry_get_text (GTK_ENTRY(asearch -> entry_b))); if (asearch -> int_b > 0 && asearch -> int_b < this_proj -> natomes+1) { asearch -> was_selected = FALSE; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); int s = this_proj -> modelgl -> anim -> last -> img -> step; asearch -> int_b --; if (asearch -> was_selected && this_proj -> atoms[s][asearch -> int_b].sp == asearch -> spec_to_add) { widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 1); set_image_from_icon_name (asearch -> img_b, APPLY); } else { if (this_proj -> atoms[s][asearch -> int_b].sp == asearch -> spec_to_add) { asearch -> num_to_add = asearch -> int_b; widget_set_sensitive (asearch -> but_a, 1); widget_set_sensitive (asearch -> but_b, 0); set_image_from_icon_name (asearch -> img_b, APPLY); } else { widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 0); set_image_from_icon_name (asearch -> img_b, DIAL_ERROR); } } } } /*! \fn void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status) \brief adjust parameters for this atom search \param asearch the target atom search \param this_proj the target project \param a the atom id \param s the chemical species, or object id \param c the column id \param status the new toogle status */ void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status) { int i, j, k, l, m; opengl_project_changed (asearch -> proj); i = (a < 0) ? 0 : a; for (j=i; j natomes; j++) { k = this_proj -> atoms[0][j].pick[0]; l = this_proj -> atoms[0][j].sp; m = this_proj -> atoms[0][j].label[0]; if (s < 0 || l == s) { if (asearch -> status == 2 || asearch -> status == k) { if (a == j || a < 0) { switch (c) { case TOLAB: #ifdef GTK4 if (m != status) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); #else if (m != status) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); #endif break; default: if (asearch -> action != RANMOVE) { asearch -> todo[j] = status; if (asearch -> action == DISPL && asearch -> object) adjust_object_to_move (this_proj, asearch, 0, j); } else { switch (asearch -> todo[j]) { case 0: asearch -> todo[j] += (c-TOLAB); break; case 1: if (c == TOPIC) { asearch -> todo[j] -= (c-TOLAB); } else { asearch -> todo[j] += (c-TOLAB); } break; case 2: if (c == TOPIC) { asearch -> todo[j] += (c-TOLAB); } else { asearch -> todo[j] -= (c-TOLAB); } break; case 3: asearch -> todo[j] -= (c-TOLAB); break; } if (asearch -> object) adjust_object_to_move (this_proj, asearch, 1, j); } break; } } if (a == j) break; } } } } G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); /*! \fn void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter) \brief adjust tree branch (for an entire type of object) \param asearch the target atom search \param this_proj the target project \param oid the column id \param sid the chemical species or object type id \param iter the tree iter */ void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter) { int k, l, m, n, o, p, q; int status; int * to_label = NULL; int is_clone = (asearch -> action == 1) ? 1 : 0; int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); gboolean doit; GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); opengl_project_changed (this_proj -> id); gtk_tree_model_get (model, & iter, oid, & status, -1); atom_in_selection * selected; if (asearch -> action < 2 && oid == TOPIC) { selected_status = ! status; switch (filter) { case 0: selected_aspec = sid; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][! status]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][! status]); #endif break; default: if (filter < 3) { k = this_proj -> modelgl -> selection_mode; this_proj -> modelgl -> selection_mode = object; } p = this_proj -> modelgl -> anim -> last -> img -> step; for (l=0; l natomes; l++) { n = this_proj -> atoms[p][l].sp; o = this_proj -> atoms[p][l].coord[filter-1]; doit = FALSE; if (filter == 1) { if (this_proj -> atoms[p][l].numv == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else { if (filter == 2) { for (m=0; m coord -> ntg[1][m]; } } if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } if (doit) { o = get_to_be_selected (this_proj -> modelgl); #ifdef GTK4 if (this_proj -> atoms[p][l].pick[o] != status) { select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(l)); } select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(l)); #else if (this_proj -> atoms[p][l].pick[o] != status) { select_unselect_this_atom (NULL, GINT_TO_POINTER(l)); } select_unselect_this_atom (NULL, GINT_TO_POINTER(l)); #endif } } if (filter < 3) this_proj -> modelgl -> selection_mode = k; break; } } else { if (asearch -> action != INSERT) { if (oid == TOLAB) { if (asearch -> pointer[0].c == 8) { preserve_ogl_selection (this_proj -> modelgl); this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); q = 0; if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { to_label = allocint (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected); } } p = this_proj -> modelgl -> anim -> last -> img -> step; switch (filter) { case 0: if (asearch -> pointer[0].c == 8) { if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { selected = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> first; while (selected) { if (selected -> sp == sid) { to_label[q] = selected -> id; q ++; } selected = selected -> next; } } } else { #ifdef GTK4 show_hide_labels (NULL, NULL, & this_proj -> modelgl -> colorp[is_clone][sid]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[is_clone][sid], ! status); show_hide_labels (this_proj -> modelgl -> ogl_lab[is_clone][sid], & this_proj -> modelgl -> colorp[is_clone][sid]); #endif } break; default: if (filter < 3) { k = this_proj -> modelgl -> selection_mode; this_proj -> modelgl -> selection_mode = object; } for (l=0; l natomes; l++) { n = this_proj -> atoms[p][l].sp; o = this_proj -> atoms[p][l].coord[filter-1]; doit = FALSE; if (filter == 1) { if (this_proj -> atoms[p][l].numv == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else if (filter == 2 || filter == 4) { if (filter == 2) { for (m=0; m coord -> ntg[1][m]; } } if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else if (filter == 3) { if (asearch -> mode && object) { doit = TRUE; } else { if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } } if (doit) { if (asearch -> pointer[0].c == 8) { if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { selected = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> first; while (selected) { if (selected -> id == l) { to_label[q] = l; q ++; } selected = selected -> next; } } } else { this_proj -> atoms[p][l].label[0] = status; #ifdef GTK4 label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(l)); #else label_unlabel_this_atom (NULL, GINT_TO_POINTER(l)); #endif } } } if (filter < 3) this_proj -> modelgl -> selection_mode = k; break; } if (asearch -> pointer[0].c == 8) { restore_ogl_selection (this_proj -> modelgl); if (q) { for (l=0; l atoms[0][m].label[0] = ! status; this_proj -> atoms[0][m].label[1] = ! status; } g_free (to_label); } this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, ! status, -1); } } else { if (asearch -> passivating || (object && filter > 2)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[sid] += (oid-TOLAB); } else { asearch -> todo[sid] -= (oid-TOLAB); } if (object && ! asearch -> passivating) adjust_object_to_move (this_proj, asearch, 1, sid); } else { asearch -> todo[sid] = ! status; if (asearch -> action == DISPL) { if (object && ! asearch -> passivating) adjust_object_to_move (this_proj, asearch, 0, sid); motion_to_zero (asearch); } } } else if (! asearch -> mode) { switch (filter) { case 0: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; if (n == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; case 1: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; if (this_proj -> atoms[0][l].numv == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; case 2: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; o = this_proj -> atoms[0][l].coord[filter-1]; for (m=0; m coord -> ntg[1][m]; } if (o == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; default: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; o = this_proj -> atoms[0][l].coord[filter-1]; if (o == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; } } } } else { for (k=0; k in_selection; k++) { asearch -> todo[k] = ! status; } } } switch (oid) { case TOLAB: if (asearch -> action == INSERT) asearch -> pick[sid] = ! status; asearch -> lab[sid] = ! status; break; default: if (asearch -> action == RANMOVE) { if (! status) { asearch -> pick[sid] += (oid-TOLAB); } else { asearch -> pick[sid] -= (oid-TOLAB); } } else { asearch -> pick[sid] = ! status; } break; } if (asearch -> todo_size < GTK_LIMIT || asearch -> passivating || (object == 2 && filter > 2)) update_search_tree (asearch); } /*! \fn void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) \brief adjust tree leaf (for a single object) \param asearch the target atom search \param this_proj the target project \param oid the column id \param aid the atom id \param new_status the new toggle status \param iter the tree iter */ void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) { int status; int k, l, p; opengl_project_changed (this_proj -> id); int sel = this_proj -> modelgl -> selection_mode; int is_clone = (asearch -> action == 1) ? 1 : 0; int object = (asearch -> object) ? 1 : 0; this_proj -> modelgl -> selection_mode = object; p = this_proj -> modelgl -> anim -> last -> img -> step; // For atom i if (oid == TOLAB) { if (asearch -> action == INSERT) { if (asearch -> todo[aid] != new_status || new_status < 0) { status = ! asearch -> todo[aid]; asearch -> todo[aid] = status; } } else if (this_proj -> atoms[p][aid].label[is_clone] != new_status || new_status < 0) { #ifdef GTK4 label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(aid)); #else label_unlabel_this_atom (NULL, GINT_TO_POINTER(aid)); #endif status = this_proj -> atoms[p][aid].label[is_clone]; } } else { if (asearch -> action < 2) { if (this_proj -> atoms[p][aid].pick[0] != new_status || new_status < 0) { // selected_status = ! this_proj -> atoms[p][aid].pick[get_to_be_selected (this_proj -> modelgl)]; selected_status = ! this_proj -> atoms[p][aid].pick[0]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(aid)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(aid)); #endif status = this_proj -> atoms[p][aid].pick[0]; } } else { if (asearch -> todo[aid] != new_status || new_status < 0) { status = ! asearch -> todo[aid]; adjust_search_param (asearch, this_proj, aid, this_proj -> atoms[p][aid].sp, oid, status); } } } status = (new_status < 0) ? status : new_status; if (asearch -> action == RANMOVE && oid != TOLAB) { k = (asearch -> todo[aid] == 1 || asearch -> todo[aid] == 3) ? 1 : 0; l = (asearch -> todo[aid] == 2 || asearch -> todo[aid] == 3) ? 1 : 0; // Check 'for all' gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, k, -1); if (object) gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+1, l, -1); } else if (asearch -> action == INSERT) { gtk_list_store_set (asearch -> obj_model, & iter, oid, status, -1); } else { if (asearch -> action == DISPL && oid != TOLAB) motion_to_zero (asearch); gtk_tree_store_set (asearch -> atom_model, & iter, oid, status, -1); } this_proj -> modelgl -> selection_mode = sel; check_all_trees (this_proj); } /*! \fn G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief toggle select / unselect object in the atom search tree model \param cell_renderer the cell renderer toggle button \param string_path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; GtkTreeIter iter; tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); gtk_tree_model_get_iter (model, & iter, path); gtk_tree_model_get (model, & iter, IDCOL, & i, -1); check_label = FALSE; if (this_proj -> modelgl -> atom_win) { this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == RANMOVE) ? 1 : 0] = FALSE; } if (i > 0) { i --; // For atom i adjust_this_tree_leaf (asearch, this_proj, dat -> b, i, -1, iter); } else { // For spec i if (asearch -> todo_size >= GTK_LIMIT && ! asearch -> passivating) { GtkTreeIter child; gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & iter, dat -> b, & j, -1); gtk_tree_store_set (asearch -> atom_model, & iter, dat -> b, ! j, -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, & iter)) { gboolean dothis = TRUE; while (dothis) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & child, IDCOL, & k, -1); k --; adjust_this_tree_leaf (asearch, this_proj, dat -> b, k, ! j, child); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } } else { adjust_this_tree_branch (asearch, this_proj, dat -> b, abs(i) - 1, iter); } } if (asearch -> action == DISPL) check_motion_interactors (this_proj, asearch); check_label = TRUE; this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); update (this_proj -> modelgl); } /*! \fn int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) \brief get the id of the object selected (in contextual menu, or in combo box) \param visible is the 'model edition' window visible (1/0) \param p the target project id \param str the string that describing the selection \param asearch the target atom search */ int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) { int i, j; gchar * word, * name; gchar * cmp; for (i = 1; mol[i].type || mol[i].object; i++) { if (mol[i].object != NULL) { cmp = g_strdup_printf ("%s", (i == 9 || i == 13 || i == 16 || i == 17) ? _(mol[i].object) : mol[i].object); if (g_strcmp0 (cmp, str) == 0) { g_free (cmp); if (i < 9) { return (int) mol[i].Z; } else if (i == 9) { return get_atom_id_from_periodic_table (asearch); } else if (i > 10 && i < 17) { return insert_this_project_from_lib (i-11, visible, get_project_by_id(p), asearch); } else if (i == 17) { return select_from_library (visible, get_project_by_id(p), asearch); } } g_free (cmp); } } for (i=0; i name, i+1); for (j=0; j<3; j++) { word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); if (g_strcmp0 (word, str) == 0) { g_free (word); g_free (name); get_project_by_id(p) -> modelgl -> other_status = j; return create_object_from_open_project (get_project_by_id(p), i); } else { g_free (word); } } g_free (name); } if (g_strcmp0 (_("Copied data"), str) == 0) { return FROM_DATA; } if (g_strcmp0 (_("Empty position"), str) == 0) return 120; return 0; } /*! \fn void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid) \brief adjust the data of the tree model to insert 'vid' \param this_proj the target project \param asearch the target atom search \param sid the chemical species \param vid id of the object to insert */ void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid) { int i, j, k, l; int filter = get_asearch_filter (asearch); switch (filter) { case 0: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == sid && append (asearch, this_proj, i, this_proj -> atoms[0][i].sp)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == sid) { j = this_proj -> atoms[0][i].sp; if (append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } } break; case 2: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[1]; for (l=0; l coord -> ntg[1][l]; if (k == sid && append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; default: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[filter-1]; if (k == sid && append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; } } /*! \fn G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) \brief change combo box in atom search tree model \param combo the cell renderer combo box \param path_string the path in the tree model \param iter the tree iter \param data the associated data pointer */ G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); int h, i, j, k; atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; GValue val = {0, }; GObject * cmodel; g_object_get (combo, "model", & cmodel, NULL); gtk_tree_model_get_value ((GtkTreeModel *)cmodel, iter, 0, & val); GtkTreeIter child; gboolean dothis; GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); if (gtk_tree_model_get_iter_from_string (model, iter, path_string)) { gtk_tree_model_get (model, iter, IDCOL, & h, -1); gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); i = get_selected_object_id (TRUE, this_proj -> id, str, asearch); g_free (str); int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); k = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; if (h > 0 || (object && ! asearch -> passivating && filter > 2) || asearch -> passivating || asearch -> mode) { // Single atom or object if (i) { j = (asearch -> mode) ? h - 2 : abs(h) - 1; to_insert_in_project (i, j, this_proj, asearch, TRUE); str = (asearch -> mode) ? g_strdup_printf ("%s", get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name) : g_strdup_printf (_("For all: %s"), get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name); gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, (h > 0) ? _("Select ...") : _("Select for all ..."), -1); } } else { // The entire species if (i) { if (! asearch -> passivating && this_proj -> natomes >= GTK_LIMIT) { if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, iter)) { dothis = TRUE; while (dothis) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & child, IDCOL, & j, -1); j --; to_insert_in_project (i, j, this_proj, asearch, TRUE); gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+1, get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name, -1); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } str = g_strdup_printf (_("For all: %s"), get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name); gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, str, -1); g_free (str); } else { adjust_data_model_to_replace (this_proj, asearch, abs(h)-1, i); } } else { if (! asearch -> passivating && this_proj -> natomes >= GTK_LIMIT) { gtk_tree_store_set (asearch -> atom_model, iter, 5, _("Select for all ..."), -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, iter)) { dothis = TRUE; while (dothis) { gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+1, _("Select ..."), -1); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } } else { gtk_tree_store_set (asearch -> atom_model, iter, 5, _("Select ..."), -1); } } } if (update_this_search(asearch)) update_search_tree (asearch); } } /*! \fn GtkTreeModel * replace_combo_tree (gboolean insert, int proj) \brief replace combo box in the tree view \param insert add 'Select ...' combo box item \param proj target crystal builder project id */ GtkTreeModel * replace_combo_tree (gboolean insert, int proj) { GtkTreeIter iter, iter2, iter3; GtkTreeStore *store; int i, j; gchar * name, * word; store = gtk_tree_store_new (1, G_TYPE_STRING); if (insert) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Select ..."), -1); } for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].type) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _(mol[i].type), -1); } else if (mol[i].object) { gtk_tree_store_append (store, & iter2, & iter); if (i == 9 || i == 13 || i == 16 || i == 17) { gtk_tree_store_set (store, & iter2, 0, _(mol[i].object), -1); } else { gtk_tree_store_set (store, & iter2, 0, mol[i].object, -1); } } } gboolean doit = FALSE; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Import From Project"), -1); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { gtk_tree_store_append (store, & iter2, & iter); name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); gtk_tree_store_set (store, & iter2, 0, name, -1); for (j=0; j<3; j++) { gtk_tree_store_append (store, & iter3, & iter2); word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); gtk_tree_store_set (store, & iter3, 0, word, -1); g_free (word); } g_free (name); } } } if (copied_object) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Copied data"), -1); } if (get_project_by_id(proj) -> modelgl) { if (get_project_by_id(proj) -> modelgl -> builder_win) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Empty position"), -1); } } return GTK_TREE_MODEL (store); } /*! \fn void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer, if visible then add or not pango markup \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); i ++; gtk_tree_model_get (mod, iter, IDCOL, & j, -1); gboolean vis = (j < 0 && i == 2) ? FALSE : TRUE; gtk_cell_renderer_set_visible (renderer, vis); if (vis && (i < TOLAB || i > TOPIC)) { set_renderer_markup (mod, iter, renderer, i); } } int atom_to_edit; atom_search * csearch; /*! \fn G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) \brief set occupancy entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); atomic_object * object = (atomic_object *)data; if (v > 0.0 && v<= 1.0) { object -> occ = v; } update_entry_double (res, object -> occ); } /*! \fn G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) \brief set insertion coordinate(s) for the object to be inserted entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int ax = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (csearch -> proj); int oid = (csearch -> pointer[0].c == 5) ? 1 : 2; atomic_object * object = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[oid], 0, atom_to_edit+1); object -> baryc[ax] = v; update_entry_double (res, object -> baryc[ax]); } /*! \fn G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) \brief set MSD max entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int ax = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (csearch -> proj); if (! (v < 0.0)) { if (ax > 0) { if (this_proj -> modelgl -> atom_win -> msd[ax-1] != v) csearch -> pick[this_proj -> atoms[0][ax-1].sp] = 0; this_proj -> modelgl -> atom_win -> msd[ax-1] = v; } else { ax = -ax-1; this_proj -> modelgl -> atom_win -> msd_all[ax] = v; if (! csearch -> passivating) { int object = get_asearch_object (csearch); int filter = get_asearch_filter (csearch); int i, j, k, l; switch (filter) { case 0: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; case 1: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; if (this_proj -> atoms[0][i].numv == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; case 2: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[filter-1]; for (l=0; l coord -> ntg[1][l]; if (k == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; default: if (! object) { for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].coord[filter-1]; if (j == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } } break; } } } update_entry_double (res, v); } else { //show_error (_("MSDmax must be > 0.0 !"), 1, this_proj -> modelgl -> atom_win -> win); if (ax > 0) { v = this_proj -> modelgl -> atom_win -> msd[ax-1]; } else { v = this_proj -> modelgl -> atom_win -> msd_all[-ax-1]; } update_entry_double (res, v); } } int max_random; /*! \fn G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) \brief set how many time(s) to re-do the action \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); int v = (int)string_to_double ((gpointer)m); int ax = GPOINTER_TO_INT (data); if (v > -1 && v <= max_random) { csearch -> todo[-ax-1] = v; } update_entry_int (res, csearch -> todo[-ax-1]); } /*! \fn void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) \brief find iter in the tree model using path string, then edit the data \param path_string the path in the tree model \param data the associated data pointer \param widg the GtkWidget sending the signal */ void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) { tint * cid = (tint *)data; project * this_proj = get_project_by_id (cid -> a); csearch = this_proj -> modelgl -> search_widg[cid -> c]; GtkTreeIter iter; GtkTreeModel * model = (csearch -> action == INSERT) ? GTK_TREE_MODEL(csearch -> obj_model) : GTK_TREE_MODEL(csearch -> atom_model); if (gtk_tree_model_get_iter (model, & iter, gtk_tree_path_new_from_string (path_string))) { int h, i, j, k, l; gtk_tree_model_get (model, & iter, IDCOL, & h, -1); if (h > 0 || csearch -> action == REPLACE || csearch -> action == REMOVE || csearch -> action == RANMOVE) { atom_to_edit = h-1; GtkWidget * win = gtk_dialog_new (); if (this_proj -> modelgl -> builder_win) { gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> builder_win -> win)); } else { gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> atom_win -> win)); } gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gchar * str; atomic_object * iobj; gchar * obj[5]={_("atom(s)"), _("total coordination(s)"), _("partial coordination(s)"), _("in fragment"), _("in molecule")}; gchar * act[2]={_("Replace"), _("Remove")}; int object = get_asearch_object (csearch); int filter = get_asearch_filter (csearch); switch (csearch -> action) { case REPLACE: str = g_strdup_printf (_("%s %s randomly"), _("Replace"), obj[(object) ? filter : 0]); break; case REMOVE: str = g_strdup_printf (_("%s %s randomly"), _("Remove"), obj[(object) ? filter : 0]); break; case RANMOVE: str = g_strdup_printf (_("Maximum Mean Square Displacement")); break; default: i = (csearch -> pointer[0].c == 5) ? 1 : 2; iobj = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[i], 0, atom_to_edit+1); if (cid -> b - TOLAB) { str = g_strdup_printf (_("Site occupancy for %s"), prepare_for_title(iobj -> name)); } else { str = g_strdup_printf (_("Insert %s at"), prepare_for_title(iobj -> name)); } break; } gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox; GtkWidget * entry; gchar * axis[3]={"x", "y", "z"}; gchar * nran = NULL; switch (csearch -> action) { case INSERT: if (cid -> b - TOLAB && csearch -> pointer[0].c == 7) { hbox = create_hbox (5); str = g_strdup_printf (_("Occupancy= ")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_occupancy), 100, 15, FALSE, iobj); update_entry_double (GTK_ENTRY(entry), iobj -> occ); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } else { for (i=0; i<3; i++) { hbox = create_hbox (5); str = g_strdup_printf ("%s =", axis[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_i_coord), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), iobj -> baryc[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } } break; case RANMOVE: hbox = create_hbox (5); entry = create_entry (G_CALLBACK(set_max_msd), 100, 15, FALSE, GINT_TO_POINTER(h)); if (h > 0) { j = this_proj -> atoms[0][atom_to_edit].sp; if (object) { str = g_strdup_printf (_("MSDmax for %s%d + neighbors = "), this_proj -> chemistry -> label[j], atom_to_edit+1); } else { str = g_strdup_printf (_("MSDmax for %s%d = "), this_proj -> chemistry -> label[j], atom_to_edit+1); } update_entry_double (GTK_ENTRY(entry), this_proj -> modelgl -> atom_win -> msd[atom_to_edit]); } else { switch (filter) { case 0: str = g_strdup_printf (_("MSDmax for all %s atom(s) = "), this_proj -> chemistry -> label[-h-1]); break; case 1: if (-h-1 == 0) { str = g_strdup_printf (_("MSDmax for all isolated atom(s) = ")); } else if (object) { str = g_strdup_printf (_("MSDmax for all %d-fold atom(s) + neighbors = "), -h-1); } else { str = g_strdup_printf (_("MSDmax for all %d-fold atom(s) = "), -h-1); } break; case 2: i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > -h-1) break; } k = 0; for (l=0; l coord -> ntg[1][l]; i = (-h-1) - k; nran = env_name(this_proj, i, j, 1, NULL); if (object) { str = g_strdup_printf (_("MSDmax for all %s + neighbors = "), nran); } else { str = g_strdup_printf (_("MSDmax for all %s = "), nran); } break; case 3: if (object) { str = g_strdup_printf (_("MSDmax for fragment N°%d = "), -h); } else { str = g_strdup_printf (_("MSDmax for the atom(s) in fragment N°%d = "), -h); } break; case 4: if (object) { str = g_strdup_printf (_("MSDmax for molecule N°%d = "), -h); } else { str = g_strdup_printf (_("MSDmax for the atom(s) in molecule N°%d = "), -h); } break; } update_entry_double (GTK_ENTRY(entry), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("[Å2]", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); break; default: max_random = 0; switch (filter) { case 0: if (csearch -> status == 2) { max_random = this_proj -> chemistry -> nsps[-h-1]; nran = g_strdup_printf ("%s", this_proj -> chemistry -> label[-h-1]); } else { max_random = 0; for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == -h-1 && this_proj -> atoms[0][i].pick[0] == csearch -> status) max_random ++; } } break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == -h-1 && (this_proj -> atoms[0][i].pick[0] == csearch -> status || csearch -> status == 2)) max_random ++; } if (-h-1 > 0) { nran = g_strdup_printf (_("%d-fold"), -h-1); } else { nran = g_strdup_printf (_("isolated")); } break; case 2: i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > -h-1) break; } k = 0; for (l=0; l coord -> ntg[1][l]; i = (-h-1) - k; for (k=0; k natomes; k++) { if (this_proj -> atoms[0][k].sp == j && this_proj -> atoms[0][k].coord[1] == i) { if (this_proj -> atoms[0][k].pick[0] == csearch -> status || csearch -> status == 2) max_random ++; } } if (csearch -> action != RANMOVE) nran = env_name(this_proj, i, j, 1, NULL); break; default: if (object) { i = (-h-1); if (filter == 3) { max_random = this_proj -> coord -> totcoord[2]; } else if (filter == 4) { max_random = this_proj -> modelfc -> mols[0][i].multiplicity; } } else { i = (-h-1); for (k=0; k natomes; k++) { if (this_proj -> atoms[0][k].coord[filter-1] == i) { if (this_proj -> atoms[0][k].pick[0] == csearch -> status || csearch -> status == 2) max_random ++; } } nran = g_strdup_printf (_("atom(s)")); } break; } hbox = create_hbox (5); entry = create_entry (G_CALLBACK(set_max_action), 100, 15, FALSE, GINT_TO_POINTER(h)); if (object) { if (filter == 3) { str = g_strdup_printf (_("%s randomly n fragment(s) in all fragments, n= "), act[csearch -> action - 3]); } else if (filter == 4) { str = g_strdup_printf (_("%s randomly n fragment(s) in molecule N°%d, n= "), act[csearch -> action - 3], -h); } else { str = g_strdup_printf (_("%s randomly n %s coordinations, n= "), act[csearch -> action - 3], nran); } } else { if (filter < 3) { str = g_strdup_printf (_("%s randomly n %s %s, n= "), act[csearch -> action - 3], nran, obj[0]); } else { str = g_strdup_printf (_("%s randomly n %s %s N°%d, n= "), act[csearch -> action - 3], nran, obj[filter], -h); } } if (nran) g_free (nran); update_entry_int (GTK_ENTRY(entry), csearch -> todo[-h-1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf (_(" with nmax = %d"), max_random); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); break; } run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); if (csearch -> action != RANMOVE) { update_search_tree (csearch); } else { if (h > 0) { if (this_proj -> modelgl -> atom_win -> msd[atom_to_edit] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[atom_to_edit]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } else { if (this_proj -> modelgl -> atom_win -> msd_all[-h-1] > 0.0) { if (object && filter > 2) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } else { str = g_strdup_printf (_("For all: MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } else { if (object && filter > 2) { gtk_tree_store_set (csearch -> atom_model, &iter, TOPIC+2, _("Set MSDmax for ..."), -1); } else { gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, _("Set MSDmax for all ..."), -1); } } } check_all_trees (this_proj); } } } } /*! \fn G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief to edit data in the atom search tree model \param cell the GtkCellRenderer \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { destroy_this_widget (GTK_WIDGET(editable)); get_coord_iter_and_edit (path_string, data, NULL); } /*! \fn G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief add pango markup to a combo box inserted in the cell of a tree view \param cell the GtkCellRendererCombo \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { combo_set_markup ((GtkWidget *)editable); } /*! \fn G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) \brief set the maximum MSD for all atom(s) / object(s) of the search \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); project * this_proj = get_project_by_id (csearch -> proj); int i, j; if (v <= 0.0) { // show_error (_("MSDmax must be > 0.0 !"), 1, this_proj -> modelgl -> atom_win -> win); v = this_proj -> modelgl -> atom_win -> msd[0]; } i = csearch -> todo_size; for (j=0; j modelgl -> atom_win -> msd[j] = v; } i = get_asearch_num_objects (csearch); for (j=0; j modelgl -> atom_win -> msd_all[j] = v; } update_entry_double (res, v); } /*! \fn gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief update tree model for each iter \param model the tree model \param path the path in the tree model \param iter the tree it \param data the associated data pointer */ gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & i, -1); gtk_tree_store_set (GTK_TREE_STORE(model), iter, dat -> b, asearch -> int_b, -1); if (i > 0) { i --; adjust_this_tree_leaf (asearch, this_proj, dat -> b, i, asearch -> int_b, * iter); } else if (asearch -> object) { adjust_this_tree_branch (asearch, this_proj, dat -> b, abs(i) - 1, * iter); } return FALSE; } else { return TRUE; } } /*! \fn G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) \brief select all element(s) in the tree view column \param col the target tree view column \param data the associated data pointer */ G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); csearch = this_proj -> modelgl -> search_widg[dat -> c]; int i, j, k; opengl_project_changed (dat -> a); if (dat -> b == TOPIC+2) { GtkWidget * win = gtk_dialog_new (); gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> atom_win -> win)); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gchar * str = g_strdup_printf (_("Maximum Mean Square Displacement")); gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (5); GtkWidget * entry = create_entry (G_CALLBACK(set_max_msd_for_all), 100, 15, FALSE, NULL); update_entry_double (GTK_ENTRY(entry), 0.0); str = g_strdup_printf (_("MSDmax for all objects = ")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å2]"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); update_search_tree (csearch); } else { if (dat -> b == TOLAB) { if (csearch -> action == INSERT) { k = (csearch -> pointer[0].c == 5) ? 1 : 2; if (this_proj -> modelgl -> atom_win -> to_be_inserted[k]) { j = ! csearch -> todo[0]; for (i=0; i in_selection; i++) csearch -> todo[i] = j; } } else { k = this_proj -> modelgl -> anim -> last -> img -> step; if (csearch -> action < 2) { is_selected = -1; i = 0; } else { if (csearch -> status < 2) { is_selected = csearch -> status; for (i=0; i natomes; i++) { if (this_proj -> atoms[k][i].pick[0] == is_selected) break; } } else { is_selected = -1; i = 0; } } j = ! this_proj -> atoms[k][i].label[0]; selected_aspec = -1; column_label = TRUE; #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][j]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][j]); #endif column_label = FALSE; } } else { k = this_proj -> modelgl -> anim -> last -> img -> step; if (csearch -> action < 2) { j = ! this_proj -> atoms[k][0].pick[0]; selected_aspec = is_selected = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][j]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][j]); #endif } else { if (csearch -> action != RANMOVE) { j = (csearch -> set_for_all < 0) ? 0 : 1; } else { // The value depends on both translation (1), rotation (2), or both (3) switch (abs(csearch -> set_for_all)) { case 0: if (dat -> b == TOPIC) { j = 1; } else { j = 2; } break; case 1: if (dat -> b == TOPIC) { j = 0; } else { j = 3; } break; case 2: if (dat -> b == TOPIC) { j = 3; } else { j = 0; } break; case 3: if (dat -> b == TOPIC) { j = 2; } else { j = 1; } break; } } } } if (csearch -> action > 1 && dat -> c != 7) { clean_picked_and_labelled (csearch, FALSE); if (dat -> b != TOLAB) clean_todo (csearch); } csearch -> set_for_all = (dat -> b == TOLAB) ? 0 : j; update_search_tree (csearch); } /*else { GtkTreeIter iter; if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(csearch -> atom_model), & iter)) { gtk_tree_model_get (GTK_TREE_MODEL(csearch -> atom_model), & iter, dat -> b, & j, -1); g_debug ("j= %d,", j); g_debug ("a= %d, b= %d, c= %d, aa= %d, bb= %d, cc= %d", dat -> a, dat -> b, dat -> c, csearch -> pointer[dat -> b-TOLAB].a, csearch -> pointer[dat -> b-TOLAB].b, csearch -> pointer[dat -> b-TOLAB].c); csearch -> int_b = ! j; gtk_tree_model_foreach (GTK_TREE_MODEL(csearch -> atom_model), update_search_model, & csearch -> pointer[dat -> b-TOLAB]); } }*/ } /*! \fn G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) \brief Move row up or down in the tree model using the mouse \param tree_model the target tree model \param path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); atomic_object * obja, * objb, * objc; GtkTreeIter iter; gboolean valid; int i, j; int * old_todo = duplicate_int (asearch -> in_selection, asearch -> todo); obja = duplicate_atomic_object (this_proj -> modelgl -> atom_win -> to_be_inserted[2]); obja -> next = this_proj -> modelgl -> atom_win -> to_be_inserted[2] -> next; g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[2]); objb = NULL; valid = gtk_tree_model_get_iter_first (tree_model, & iter); j = 0; while (valid) { gtk_tree_model_get (tree_model, & iter, 0, & i, -1); i --; objc = obja; while (objc -> id != i) objc = objc -> next; if (objc) { if (! objb) { this_proj -> modelgl -> atom_win -> to_be_inserted[2] = duplicate_atomic_object (objc); objb = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { objb -> next = duplicate_atomic_object (objc); objb -> next -> prev = objb; objb = objb -> next; } objb -> id = j; asearch -> todo[j] = old_todo[i]; j ++; } valid = gtk_tree_model_iter_next (tree_model, & iter); } g_free (old_todo); i = 0; valid = gtk_tree_model_get_iter_first (tree_model, & iter); while (valid) { gtk_list_store_set (GTK_LIST_STORE(tree_model), & iter, IDCOL, i+1, 1, g_strdup_printf ("%d", i+1), -1); i ++; valid = gtk_tree_model_iter_next (tree_model, & iter); } } /*! \fn GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats) \brief create atom search tree view \param asearch the target atom search \param this_proj the target project \param nats the total number of atom(s) */ GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats) { int i, j, k, l; GtkTreeViewColumn * atom_col[5]; GtkCellRenderer * atom_cell[5]; gchar * ctitle[6][5]={{i18n("Object"), i18n("Name"), i18n("Label"), i18n("Pick"), " "}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Move"), " "}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Replace"), i18n("By")}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Remove"), " "}, {i18n("Object"), i18n("Name"), i18n("Insert"), i18n("Position"), i18n("Occupancy")}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Translate"), i18n("Max. MSD")}}; gchar * ctype[3][5]={{"text", "text", "active", "active", "text"}, {"text", "text", "active", "text", "text"}, {"text", "text", "active", "active", "text"}}; j = (asearch -> action == REPLACE || asearch -> action == RANMOVE) ? 1 : 0; k = (asearch -> action == RANMOVE) ? 2 : (asearch -> action == INSERT) ? 1 : 0; if (asearch -> action == INSERT && asearch -> pointer[0].c == 7) j ++; gboolean toggle; GType coltype[3][8] = {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_INT}}; if (asearch -> action == INSERT) { asearch -> obj_model = gtk_list_store_newv (8, coltype[k]); } else { asearch -> atom_model = gtk_tree_store_newv (8, coltype[k]); } if (! (nats >= GTK_LIMIT) || asearch -> action == INSERT) { fill_atom_model (asearch, this_proj); } if (asearch -> action == INSERT) { asearch -> atom_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(asearch -> obj_model)); } else { asearch -> atom_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(asearch -> atom_model)); } for (i=0; i<4+j; i++) { toggle = FALSE; if (i < 2 || (asearch -> action == INSERT && i > 2) || (asearch -> action == RANMOVE && i == 4)) { atom_cell[i] = gtk_cell_renderer_text_new (); if ((asearch -> action == INSERT && i > 2) || (asearch -> action == RANMOVE && i == 4)) { g_object_set (atom_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(atom_cell[i]), "editing-started", G_CALLBACK(to_edit_coords), & asearch -> pointer[i-3]); if (asearch -> action == RANMOVE) toggle = TRUE; } } else if (i < 4) { atom_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(atom_cell[i]), "toggled", G_CALLBACK(select_atom), & asearch -> pointer[i-2]); toggle = TRUE; } else { atom_cell[i] = gtk_cell_renderer_combo_new (); GtkTreeModel * model = replace_combo_tree (FALSE, this_proj -> id); g_object_set (atom_cell[i], "model", model, "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); g_object_unref (model); g_signal_connect (G_OBJECT(atom_cell[i]), "editing-started", G_CALLBACK(markup_action_renderer), & asearch -> pointer[i-4]); g_signal_connect (G_OBJECT(atom_cell[i]), "changed", G_CALLBACK(changed_action_renderer), & asearch -> pointer[i-4]); } gtk_cell_renderer_set_fixed_size (atom_cell[i], -1, 25); l = (asearch -> action == RANMOVE && i == 4) ? i+1 : i; atom_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[(asearch -> action < 2) ? 0 : asearch -> action - 1][i]), atom_cell[i], ctype[k][i], l+1, NULL); if (toggle && ! asearch -> passivating) { gtk_tree_view_column_set_clickable (atom_col[i], TRUE); g_signal_connect (G_OBJECT(atom_col[i]), "clicked", G_CALLBACK(select_all_atoms), & asearch -> pointer[l-2]); } gtk_tree_view_append_column(GTK_TREE_VIEW(asearch -> atom_tree), atom_col[i]); gtk_tree_view_column_set_alignment (atom_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (atom_col[i], atom_cell[i], search_set_visible, GINT_TO_POINTER(l), NULL); } if (asearch -> pointer[0].c == 7) { asearch -> filter = g_signal_connect_data (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), "row-deleted", G_CALLBACK(move_up_down), asearch, NULL, (GConnectFlags) 0); gtk_tree_view_set_reorderable (GTK_TREE_VIEW(asearch -> atom_tree), TRUE); } return asearch -> atom_tree; } /*! \fn int get_todo_size (atom_search * asearch) \brief get the size of the atom search selection list \param asearch the target atom search */ int get_todo_size (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); project * this_proj = get_project_by_id (asearch -> proj); int tsize = 0; switch (filter) { case 0: tsize = (asearch -> mode || asearch -> passivating) ? this_proj -> nspec : this_proj -> natomes; break; case 1: tsize = (asearch -> mode || asearch -> passivating) ? this_proj -> coord -> cmax+1 : this_proj -> natomes; break; default: if (asearch -> mode || asearch -> passivating) { tsize = this_proj -> coord -> totcoord[filter -1]; } else { tsize = (object && filter > 2) ? this_proj -> coord -> totcoord[filter -1] : this_proj -> natomes; } break; } return tsize; } /*! \fn void allocate_todo (atom_search * asearch, int tsize) \brief allocate the selection list data buffer \param asearch the target atom search \param tsize the target size */ void allocate_todo (atom_search * asearch, int tsize) { asearch -> todo = allocint (tsize); asearch -> todo_size = tsize; } /*! \fn void clean_todo (atom_search * asearch) \brief clean atom search selection list \param asearch the target atom search */ void clean_todo (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); if (asearch -> todo) g_free (asearch -> todo); allocate_todo (asearch, get_todo_size(asearch)); atomic_object * object; switch (asearch -> action) { case DISPL: if (this_proj -> modelgl -> atom_win -> to_be_moved[0]) { object = this_proj -> modelgl -> atom_win -> to_be_moved[0]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[0] = NULL; } break; case RANMOVE: if (this_proj -> modelgl -> atom_win -> to_be_moved[1]) { object = this_proj -> modelgl -> atom_win -> to_be_moved[1]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[1] = NULL; } g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = allocfloat (asearch -> todo_size); break; case REPLACE: if (this_proj -> modelgl -> atom_win -> to_be_inserted[0]) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_inserted[0] = NULL; } asearch -> in_selection = 0; break; } } /*! \fn void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd) \brief initialize atom search data buffers \param asearch the target atom search \param clean_msd clean msd all data (1) or not (0) */ void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd) { project * this_proj; int val = get_asearch_num_objects (asearch); asearch -> lab = allocint (val); asearch -> pick = allocint (val); if (asearch -> action == RANMOVE) { this_proj = get_project_by_id (asearch -> proj); if (this_proj -> modelgl -> atom_win && clean_msd) { g_free (this_proj -> modelgl -> atom_win -> msd_all); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (val); } } else if (asearch -> action == REPLACE) { this_proj = get_project_by_id (asearch -> proj); int i = (asearch -> pointer[0].c == 3) ? 0 : 1; if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> win && this_proj -> modelgl -> atom_win -> replace_nodes[i]) { g_free (this_proj -> modelgl -> atom_win -> replace_nodes[i]); } this_proj -> modelgl -> atom_win -> replace_nodes[i] = g_malloc0(val*sizeof*this_proj -> modelgl -> atom_win -> replace_nodes[i]); } } } /*! \fn G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) \brief change the search chemical species \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; int i = combo_get_active ((GtkWidget *)box); asearch -> spec = i; update_search_tree (asearch); if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { if (i > 0) { update_entry_text (GTK_ENTRY(asearch -> entry_a), exact_name(get_project_by_id(asearch -> proj) -> chemistry -> label[i-1])); } else { update_entry_text (GTK_ENTRY(asearch -> entry_a), ""); } set_atom (GTK_ENTRY(asearch -> entry_a), asearch); widget_set_sensitive (asearch -> entry_a, ! i); } } /*! \fn G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) \brief change the search filter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; asearch -> filter = combo_get_active ((GtkWidget *)box); int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); widget_set_sensitive (asearch -> atom_box, (object && filter > 2) ? 0 : 1); widget_set_sensitive (asearch -> id_box, (object && filter > 2) ? 0 : 1); if (object && filter > 2) { combo_set_active (asearch -> atom_box, 0); } if (asearch -> action == DISPL) motion_to_zero (asearch); clean_todo (asearch); clean_picked_and_labelled (asearch, TRUE); set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), asearch); } /*! \fn G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) \brief change the search object \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; GtkTreeViewColumn * rot_c; int was_object; int object; int filter; if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { was_object = ((! asearch -> mode && asearch -> object > 1) || (asearch -> mode && asearch -> object)) ? 1 : 0; asearch -> object = combo_get_active ((GtkWidget *)box); filter = get_asearch_filter (asearch); object = ((! asearch -> mode && asearch -> object > 1) || (asearch -> mode && asearch -> object)) ? 1 : 0; if ((! asearch -> mode && (asearch -> object == 1 || asearch -> object == 3)) || (asearch -> mode && asearch -> object)) { if (! asearch -> mode) asearch -> passivating = TRUE; hide_the_widgets (asearch -> id_box); hide_the_widgets (asearch -> info[1]); } else { asearch -> passivating = FALSE; if (((! asearch -> mode && asearch -> object == 2) || (asearch -> mode && asearch -> object)) && filter > 2) { hide_the_widgets (asearch -> id_box); hide_the_widgets (asearch -> info[1]); } else { show_the_widgets (asearch -> id_box); show_the_widgets (asearch -> info[1]); } } } else { was_object = (asearch -> object) ? 1 : 0; asearch -> object = combo_get_active ((GtkWidget *)box); filter = get_asearch_filter (asearch); object = (asearch -> object) ? 1 : 0; hide_the_widgets (asearch -> id_box); hide_the_widgets (asearch -> info[1]); } if (was_object) { combo_text_prepend (asearch -> filter_box, _("Chemical Species")); if (asearch -> action == RANMOVE) { rot_c = gtk_tree_view_get_column (GTK_TREE_VIEW(asearch -> atom_tree), 4); gtk_tree_view_remove_column (GTK_TREE_VIEW(asearch -> atom_tree), rot_c); } } if (object) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 0); if (asearch -> action == RANMOVE) { GtkCellRenderer * rot = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(rot), "toggled", G_CALLBACK(select_atom), & asearch -> pointer[2]); int i = 5; rot_c = gtk_tree_view_column_new_with_attributes (_("Rotate"), rot, "active", i, NULL); gtk_tree_view_column_set_clickable (rot_c, TRUE); g_signal_connect (G_OBJECT(rot_c), "clicked", G_CALLBACK(select_all_atoms), & asearch -> pointer[2]); gtk_tree_view_column_set_alignment (rot_c, 0.5); gtk_tree_view_insert_column (GTK_TREE_VIEW(asearch -> atom_tree), rot_c, i-1); } } if (asearch -> action == DISPL) widget_set_sensitive (get_project_by_id(asearch -> proj) -> modelgl -> atom_win -> at_expand[2], object); combo_set_active (asearch -> filter_box, 0); set_filter_changed (GTK_COMBO_BOX(asearch -> filter_box), asearch); } /*! \fn void add_random_column (atom_search * asearch) \brief add a column to the search tree model for the case of random search \param asearch the target atom search */ void add_random_column (atom_search * asearch) { int i = 8 - asearch -> action; GtkCellRenderer * num = gtk_cell_renderer_text_new (); g_object_set (num, "editable", TRUE, NULL); g_signal_connect (G_OBJECT(num), "editing-started", G_CALLBACK(to_edit_coords), & asearch -> pointer[0]); GtkTreeViewColumn * num_c = gtk_tree_view_column_new_with_attributes (_("Number"), num, "text", i, NULL); gtk_tree_view_column_set_cell_data_func (num_c, num, search_set_visible, GINT_TO_POINTER(i), NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(asearch -> atom_tree), num_c); } /*! \fn G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) \brief change search mode \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); asearch -> mode = combo_get_active ((GtkWidget *)box); if ((asearch -> action == REPLACE || asearch -> action == REMOVE) && asearch -> atom_tree) { if (! asearch -> mode) { GtkTreeViewColumn * num_c; num_c = gtk_tree_view_get_column (GTK_TREE_VIEW(asearch -> atom_tree), 8 - asearch -> action); gtk_tree_view_remove_column (GTK_TREE_VIEW(asearch -> atom_tree), num_c); } else { add_random_column (asearch); } } if (this_proj -> natomes >= GTK_LIMIT) { if (asearch -> object_box) { if (asearch -> mode) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> object_box, 3); gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> object_box, 1); } else { gtk_combo_box_text_insert ((GtkComboBoxText *)asearch -> object_box, 1, NULL, _("Atom(s): All")); combo_text_append (asearch -> object_box, _("Group of Atoms: All")); } } } else { gtk_combo_box_text_remove_all ((GtkComboBoxText *)asearch -> object_box); combo_text_append (asearch -> object_box, _("Atom(s)")); combo_text_append (asearch -> object_box, _("Group of Atoms")); } /*if (asearch -> filter_box) { if (! this_proj -> modelgl -> adv_bonding[1] && this_proj -> modelgl -> atom_win -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 3+i); } if (! this_proj -> modelgl -> adv_bonding[0] && this_proj -> modelgl -> atom_win -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 2+i); } combo_set_active (asearch -> filter_box, 0); set_filter_changed (GTK_COMBO_BOX(asearch -> filter_box), asearch); }*/ combo_set_active (asearch -> object_box, 0); set_object_changed (GTK_COMBO_BOX(asearch -> object_box), asearch); } /*! \fn G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) \brief update search entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) { atom_search * asearch = (atom_search *) data; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); asearch -> search_digit = (int)v; if (asearch -> search_digit <= 0) { asearch -> search_digit --; update_entry_text (res, ""); } else { update_entry_int (res, asearch -> search_digit); } set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), data); } /*! \fn void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) \brief prepare some search widgets \param vbox the box to insert the search box in \param lab the GtkWidget sending the signal \param combo the GtkWidget sending the signal */ void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 10); gtk_widget_set_size_request (combo, 175, -1); gtk_fixed_put (GTK_FIXED(fixed), combo, 0, 0); } /*! \fn GtkWidget * prepare_box_too_much (atom_search * asearch) \brief if too many atoms, then individual search \param asearch the target atom search */ GtkWidget * prepare_box_too_much (atom_search * asearch) { GtkWidget * box; GtkWidget * widg; GtkWidget * too_box = create_vbox (BSEP); widg = bbox (too_box, _("\t Atom species: ")); gtk_widget_set_size_request (widg, 200, -1); asearch -> entry_a = create_entry (G_CALLBACK(set_atom), 90, 15, TRUE, asearch); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> entry_a, FALSE, FALSE, 0); asearch -> img_a = stock_image (DIAL_ERROR); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> img_a, FALSE, FALSE, 5); widg = bbox (too_box, _("\t Atom Id: ")); gtk_widget_set_size_request (widg, 200, -1); asearch -> entry_b = create_entry (G_CALLBACK(set_id), 90, 15, TRUE, asearch); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> entry_b, FALSE, FALSE, 0); asearch -> img_b = stock_image (DIAL_ERROR); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> img_b, FALSE, FALSE, 5); box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, too_box, box, FALSE, FALSE, 5); asearch -> but_a = create_button (_("Add"), IMG_NONE, NULL, 75, -1, GTK_RELIEF_NORMAL, G_CALLBACK(add_atom), asearch); widget_set_sensitive (asearch -> but_a, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> but_a, FALSE, FALSE, 75); asearch -> but_b = create_button (_("Remove"), IMG_NONE, NULL, 75, -1, GTK_RELIEF_NORMAL, G_CALLBACK(remove_atom), asearch); widget_set_sensitive (asearch -> but_b, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> but_b, FALSE, FALSE, 0); return too_box; } /*! \fn GtkWidget * selection_tab (atom_search * asearch, int nats) \brief create the search widget \param asearch the target atom search \param nats the total number of atoms */ GtkWidget * selection_tab (atom_search * asearch, int nats) { project * this_proj = get_project_by_id (asearch -> proj); int i, j; i = (nats < GTK_LIMIT) ? 1 : 0; j = (asearch -> action == 5) ? 300 : -1; GtkWidget * selection = create_layout (j, 390 + (! i)*60 - i*100); GtkWidget * vbox = add_vbox_to_layout (selection, 0, (asearch -> action > 1) ? 0 : 10); GtkWidget * hbox, * vvbox; GtkWidget * lab; if (asearch -> action != 5) { // Later on simply hide info[1] (to much atoms info) if needed for (j=0; j<2; j++) { asearch -> info[j] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, asearch -> info[j], FALSE, FALSE, 0); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Search "), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); asearch -> object_box = create_combo (); combo_text_append (asearch -> object_box, _("Atom(s)")); if (! i) combo_text_append (asearch -> object_box, _("Atom(s): All")); combo_text_append (asearch -> object_box, _("Group of Atoms")); if (! i) combo_text_append (asearch -> object_box, _("Group of Atoms: All")); combo_set_active (asearch -> object_box, asearch -> object); asearch -> filter_box = create_combo (); gchar * filters[5]={i18n("Chemical Species"), i18n("Total Coordination"), i18n("Partial Coordination"), i18n("Fragment"), i18n("Molecule")}; for (j=0; j<3; j++) combo_text_append (asearch -> filter_box, _(filters[j])); if (this_proj -> modelgl -> adv_bonding[0]) combo_text_append (asearch -> filter_box, _(filters[3])); if (this_proj -> modelgl -> adv_bonding[1]) combo_text_append (asearch -> filter_box, _(filters[4])); combo_set_active (asearch -> filter_box, asearch -> filter); asearch -> atom_box = create_combo (); combo_text_append (asearch -> atom_box, _("All")); for (j=0; j nspec; j++) combo_text_append (asearch -> atom_box, this_proj -> chemistry -> label[j]); combo_set_active (asearch -> atom_box, asearch -> spec); g_signal_connect (G_OBJECT (asearch -> object_box), "changed", G_CALLBACK(set_object_changed), asearch); g_signal_connect (G_OBJECT (asearch -> filter_box), "changed", G_CALLBACK(set_filter_changed), asearch); g_signal_connect (G_OBJECT (asearch -> atom_box), "changed", G_CALLBACK(set_spec_changed), asearch); GtkWidget * entry = create_entry (G_CALLBACK(set_search_digit), 90, 15, TRUE, asearch); if (asearch -> action < 2) { prep_search_box (asearch -> info[0], markup_label(_("For "), 100, -1, 0.0, 0.5), asearch -> object_box); prep_search_box (asearch -> info[0], markup_label(_("Filter by "), 100, -1, 0.0, 0.5), asearch -> filter_box); prep_search_box (asearch -> info[0], markup_label(_("Species "), 100, -1, 0.0, 0.5), asearch -> atom_box); asearch -> id_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], asearch -> id_box, FALSE, FALSE, 0); prep_search_box (asearch -> id_box, markup_label(_("Atom Id."), 100, -1, 0.0, 0.5), entry); } else { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("For "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> object_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Filter by "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> filter_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Species "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> atom_box, FALSE, FALSE, 0); asearch -> id_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> id_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, asearch -> id_box, markup_label(_("Atom Id "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, asearch -> id_box, entry, FALSE, FALSE, 0); } // If more than 10 000 atoms: if (asearch -> action < 2) { lab = markup_label(_("\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:"), -1, -1, 0.5, 0.5); } else { lab = markup_label(_("The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:"), -1, -1, 0.5, 0.5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], lab, FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], hbox, FALSE, FALSE, 0); /* vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 80); cbox = create_combo (); combo_text_append (cbox, _("All objects")); combo_text_append (cbox, _("Selection")); g_signal_connect (G_OBJECT(cbox), "changed", G_CALLBACK(set_too_much_type), asearch); combo_set_active (cbox, asearch -> too_much); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, cbox, FALSE, FALSE, 30); // asearch -> big_box = // Combo box with _("All objects"), _("Selection") */ vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 120); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, prepare_box_too_much (asearch), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], markup_label(_("The search must be performed using species and/or Id.\n" "Use the filters above to define the object(s) of the search"), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); } abox (vbox, _("Selection "), 2); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); i = (asearch -> action < 2) ? 0 : 1; j = (asearch -> action < 2) ? 1 : 0; if (asearch -> action < 2) { gtk_widget_set_size_request (scrollsets, 400+i*100, 270); } else { gtk_widget_set_size_request (scrollsets, 400+i*100, 290-i*120); } gtk_widget_set_hexpand (scrollsets, TRUE); add_container_child (CONTAINER_SCR, scrollsets, create_atoms_tree (asearch, this_proj, nats)); check_all_trees (this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, 100-j*75); return selection; } atomes_1.3.1/src/opengl/win/m_edit.c0000664000175000017500000002776415212624223017002 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_edit.c * @short Functions to create the 'Tools -> Edit' submenu * @author Sébastien Le Roux */ /* * This file: 'm_edit.c' * * Contains: * - The functions to create the 'Tools -> Edit' submenu * * List of functions: G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_cell_edit (glwin * view , int id, int j); GtkWidget * menu_edit (glwin * view, int id); GMenu * menu_cell_edit (glwin * view, int popm, int sensitive); GMenu * menu_atom_edit (glwin * view, int popm); GMenu * extract_section (glwin * view, int popm); GMenu * menu_edit (glwin * view, int popm); */ #include "cell_edit.h" #include "atom_edit.h" #ifdef GTK4 extern G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data); #endif #ifdef GTK4 /*! \fn G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief wrapp coordinates callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) \brief wrapp coordinates callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); } #ifdef GTK3 /*! \fn GtkWidget * menu_cell_edit (glwin * view , int id, int j) \brief create the 'Edit -> Cell' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param j menu items sensitivity (cell + single MD step) */ GtkWidget * menu_cell_edit (glwin * view , int id, int j) { int i, k, l; GtkWidget * menu = gtk_menu_new (); if (id == 0) { for (i=0; i<6; i++) { view -> ogl_box[2+i] = create_menu_item (FALSE, _(edit_names[i])); if (i == 0) { g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(wrapping_coord), view); } else if (i == 3) { g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(super_cell), view); } else { k = (i < 3) ? i-1 : i-2; g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(edition_win), & view -> colorp[k][0]); } if (i > 2) widget_set_sensitive (view -> ogl_box[2+i], j); if (i == 0) widget_set_sensitive (view -> ogl_box[2+i], ! view -> wrapped); if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> abc -> extra_cell[l]; widget_set_sensitive (view -> ogl_box[2+i], k); } gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_box[2+i]); } } else { for (i=0; i<6; i++) { GtkWidget * widg = create_menu_item (FALSE, _(edit_names[i])); if (i == 0) { g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(wrapping_coord), view); } else if (i == 3) { g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(super_cell), view); } else { k = (i < 3) ? i-1 : i-2; g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(edition_win), & view -> colorp[k][0]); } if (i > 2) widget_set_sensitive (widg, j); if (i == 0) widget_set_sensitive (widg, ! view -> wrapped); if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> abc -> extra_cell[l]; widget_set_sensitive (widg, k); } gtk_menu_shell_append ((GtkMenuShell *)menu, widg); } } return menu; } /*! \fn GtkWidget * menu_edit (glwin * view, int id) \brief create the 'Edit' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_edit (glwin * view, int id) { int i, j; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menu = gtk_menu_new (); GtkWidget * widg; if (id == 0) { view -> cbuilder = create_menu_item (FALSE, _("Crystal Builder")); g_signal_connect (G_OBJECT (view -> cbuilder), "activate", G_CALLBACK(crystal_window), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> cbuilder); } else { widg = create_menu_item (FALSE, _("Crystal Builder")); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(crystal_window), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, widg); } j = (this_proj -> cell.ltype && this_proj -> steps == 1) ? 1 : 0; if (id == 0) { view -> ogl_box[1] = menu_item_new_with_submenu (_("Cell"), (this_proj -> natomes) ? this_proj -> cell.ltype : 0, menu_cell_edit(view, id, j)); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_box[1]); } else { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Cell"), (this_proj -> natomes) ? this_proj -> cell.ltype : 0, menu_cell_edit(view, id, j))); } GtkWidget * ats = create_menu_item (FALSE, _("Atoms")); gtk_menu_shell_append ((GtkMenuShell *)menu, ats); GtkWidget * menua = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)ats, menua); j = (this_proj -> steps == 1) ? 1 : 0; for (i=0; i<5; i++) { widg = create_menu_item (TRUE, _(action_name[i])); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(action_window), & view -> colorp[i][0]); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widget_set_sensitive (widg, this_proj -> nspec); widget_set_sensitive (widg, (i == 3) ? j : (this_proj -> natomes) ? j : 0); } if (id == 0) { gchar * rtext[2] = {i18n("Extract/Rebuild on Motion"), i18n("Extract/Rebuild on Copy")}; for (i=0; i<2; i++) { view -> rbuild[i] = gtk3_menu_item (menu, _(rtext[i]), IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[i][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[i][0]); widget_set_sensitive (view -> rbuild[i], (this_proj -> steps == 1) ? 1 : 0); } } return menu; } #else /*! \fn GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) \brief create the 'Edit -> Cell' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param sensitive menu items sensitivity (cell + single MD step) */ GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) { GMenu * menu = g_menu_new (); gboolean sens; GCallback edit_handler[3] = {G_CALLBACK(wrapping_coord), G_CALLBACK(super_cell), G_CALLBACK(edition_win)}; int i, j, k, l; gchar * act; for (i=0; i<6; i++) { j = (i == 0) ? i : (i == 3) ? 1 : 2; if (i > 2) sens = sensitive; if (i == 0) sens = ! view -> wrapped; if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> abc -> extra_cell[l]; sens = k; } act = g_strdup_printf ("ceed-%d", i); if (i == 0 || i == 3) { append_opengl_item (view, menu, _(edit_names[i]), act, popm, i, NULL, IMG_NONE, NULL, FALSE, edit_handler[j], (gpointer)view, FALSE, FALSE, FALSE, sens); } else { k = (i < 3) ? i-1 : i-2; append_opengl_item (view, menu, _(edit_names[i]), act, popm, i, NULL, IMG_NONE, NULL, FALSE, edit_handler[j], & view -> colorp[k][0], FALSE, FALSE, FALSE, sens); } g_free (act); } return menu; } /*! \fn GMenu * menu_atom_edit (glwin * view, int popm) \brief create the 'Edit -> Atom(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_atom_edit (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * act; int i, j; project * this_proj = get_project_by_id(view -> proj); j = (this_proj -> steps == 1) ? 1 : 0; for (i=0; i<5; i++) { act = g_strdup_printf ("ated-%d", i); append_opengl_item (view, menu, _(action_name[i]), act, popm, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(action_window), & view -> colorp[i][0], FALSE, FALSE, FALSE, (i == 3) ? j : (this_proj -> natomes) ? j : 0); g_free (act); } return menu; } /*! \fn G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) \brief Extract/Rebuild menu items callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * dat =(tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; gboolean doit = TRUE; GVariant * state = g_action_get_state (G_ACTION (action)); const gchar * rebuild = g_action_get_name ((GAction *)action); int lgt = strlen (rebuild); gchar * name = g_strdup_printf ("%c%c", rebuild[lgt-2], rebuild[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, rebuild); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } if (doit) { turn_rebuild (NULL, NULL, data); g_action_change_state (G_ACTION (action), g_variant_new_boolean (! g_variant_get_boolean (state))); g_variant_unref (state); } } /*! \fn GMenu * extract_section (glwin * view, int popm) \brief create the 'Extract/Rebuild' menu items GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * extract_section (glwin * view, int popm) { int i; project * this_proj = get_project_by_id(view -> proj); GMenu * menu = g_menu_new (); gchar * rtext[2] = {i18n("Extract/Rebuild on Motion"), i18n("Extract/Rebuild on Copy")}; for (i=0; i<2; i++) { append_opengl_item (view, menu, _(rtext[i]), "aext", popm, i, NULL, IMG_STOCK, (gpointer)ECUT, FALSE, G_CALLBACK(to_run_rebuild), & view -> colorp[i][0], TRUE, view -> rebuild[i][0], FALSE, (this_proj -> steps == 1) ? 1 : 0); } return menu; } /*! \fn GMenu * menu_edit (glwin * view, int popm) \brief create the 'Edit' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_edit (glwin * view, int popm) { project * this_proj = get_project_by_id(view -> proj); GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Crystal Builder"), "cbuilder", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(crystal_window), & view -> colorp[0][0], FALSE, FALSE, FALSE, TRUE); append_submenu (menu, _("Cell"), menu_cell_edit(view, popm, (this_proj -> cell.ltype && this_proj -> steps == 1) ? 1 : 0)); append_submenu (menu, _("Atom(s)"), menu_atom_edit(view, popm)); if (! popm) g_menu_append_section (menu, NULL, (GMenuModel*)extract_section(view, popm)); return menu; } #endif atomes_1.3.1/src/opengl/win/m_proj.c0000664000175000017500000001417115212624223017013 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_proj.c * @short Functions to create the 'View -> Projection' submenu * @author Sébastien Le Roux */ /* * This file: 'm_proj.c' * * Contains: * - The functions to create the 'View -> Projection' submenu * * List of functions: G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_proj (glwin * view); GMenu * menu_proj (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" /*! \enum position */ enum position { RIGHT = 0, /*!< 0 */ LEFT = 1, /*!< 1 */ TOP = 2, /*!< 2 */ BOTTOM = 3, /*!< 3 */ FRONT = 4, /*!< 4 */ BACK = 5 /*!< 5 */ }; extern void camera_has_changed (gdouble value, gpointer data); /*! \fn G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) \brief set camera position callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) { tint * id = (tint *)data; double angle_x, angle_y; switch (id -> b) { case RIGHT: angle_x = 0.0; angle_y = -90.0; break; case LEFT: angle_x = 0.0; angle_y = 90.0; break; case TOP: angle_x = 90.0; angle_y = 0.0; break; case BOTTOM: angle_x = -90.0; angle_y = 0.0; break; case FRONT: angle_x = 0.0; angle_y = 0.0; break; case BACK: angle_x = 0.0; angle_y = 180.0; break; } if (preferences) { camera_has_changed (angle_x, & pref_pointer[3]); camera_has_changed (angle_y, & pref_pointer[4]); } else { vec4_t q_a, q_b; vec3_t axis; axis.x = 0.0; axis.y = 1.0; axis.z = 0.0; q_a = axis_to_quat (axis, -pi*angle_y/180.0); axis.x = 1.0; axis.y = 0.0; axis.z = 0.0; q_b = axis_to_quat (axis, -pi*angle_x/180.0); glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> rotation_quaternion = q4_mul (q_a, q_b); update (view); view -> anim -> last -> img -> c_angle[0] = - angle_x; view -> anim -> last -> img -> c_angle[1] = - angle_y; int i; for (i=0; i<2; i++) { if (view -> rep_win) { if (view -> rep_win -> camera_widg[i+3] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[i+3], view -> anim -> last -> img -> c_angle[i]); } } } } } #ifdef GTK3 /*! \fn GtkWidget * menu_proj (glwin * view) \brief create the 'View -> Projection' submenu - GTK3 \param view the target glwin */ GtkWidget * menu_proj (glwin * view) { GtkWidget * menup = gtk_menu_new (); GtkWidget * r = create_menu_item (FALSE, _("Right [1, 0, 0]")); g_signal_connect (G_OBJECT (r), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[RIGHT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, r); GtkWidget * l = create_menu_item (FALSE, _("Left [-1, 0, 0]")); g_signal_connect (G_OBJECT (l), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[LEFT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, l); GtkWidget * t = create_menu_item (FALSE, _("Top [0, 1, 0]")); g_signal_connect (G_OBJECT (t), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[TOP][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, t); GtkWidget * b = create_menu_item (FALSE, _("Bottom [0, -1, 0]")); g_signal_connect (G_OBJECT (b), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[BOTTOM][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, b); GtkWidget * f = create_menu_item (FALSE, _("Front [0, 0, 1]")); g_signal_connect (G_OBJECT (f), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[FRONT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, f); GtkWidget * a = create_menu_item (FALSE, _("Back [0, 0, -1]")); g_signal_connect (G_OBJECT (a), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[BACK][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, a); return menup; } #else /*! \fn G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set camera position callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) { set_camera_pos (NULL, data); } /*! \fn GMenu * menu_proj (glwin * view, int popm) \brief create the 'View -> Projection' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_proj (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * projection[6]={i18n("Right [1, 0, 0]"), i18n("Left [-1, 0, 0]"), i18n("Top [0, 1, 0]"), i18n("Bottom [0, -1, 0]"), i18n("Front [0, 0, 1]"), i18n("Back [0, 0, -1]")}; int i; for (i=0; i<6; i++) { append_opengl_item (view, menu, _(projection[i]), "proj", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_set_camera_pos), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE); } return menu; } #endif atomes_1.3.1/src/opengl/win/w_labels.c0000664000175000017500000006667715212624223017337 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_labels.c * @short Functions to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window \n Functions to create the measure labels window of the 'Measures' window * @author Sébastien Le Roux */ /* * This file: 'w_labels.c' * * Contains: * - The functions to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window - The functions to create the measure labels window of the 'Measures' window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void init_labels_colors (image * img, int sp, int id); void label_shift_has_changed (gpointer data, double value); void mesure_factor_has_changed (gpointer data, double value); void measure_width_has_changed (gpointer data, double value); G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data); G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data); GtkWidget * labels_tab (glwin * view, int id); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" #define LABEL_FORMATS 5 gchar * lab_formats[LABEL_FORMATS] = {i18n("Element Name"), i18n("Atomic Symbol"), i18n("Atomic Symbol + Id. Number"), i18n("Sym. + Id. Num. Subscript"), i18n("Id. Number")}; GtkWidget * atom_color_box; GtkWidget ** color_title; GtkWidget * tilt; /*! \fn G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) \brief change measure style \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mpattern[id -> b] = combo_get_active ((GtkWidget *)box); view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mpattern[id -> b] = combo_get_active ((GtkWidget *)box); } } /*! \fn G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) \brief change label(s) format \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (! preferences) { glwin * view = get_project_by_id(id -> a) -> modelgl; if (i != view -> anim -> last -> img -> acl_format[id -> b]) { view -> anim -> last -> img -> acl_format[id -> b] = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } } else { tmp_acl_format[id -> b] = i; } } /*! \fn G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) \brief change label(s) rendering mode \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (! preferences) { glwin * view = get_project_by_id(id -> a) -> modelgl; if (i != view -> anim -> last -> img -> labels[id -> b].render) { view -> anim -> last -> img -> labels[id -> b].render = i; if (id -> b < 2) { view -> create_shaders[LABEL] = TRUE; } else if (id -> b == 2) { view -> create_shaders[MAXIS] = TRUE; } else if (id -> b == 3 || id -> b == 4) { combo_set_active (tilt, view -> anim -> last -> img -> mtilt[id -> b-3]); view -> create_shaders[MEASU] = TRUE; } update (view); } } else { tmp_label[id -> b] -> render = i; } } /*! \fn void init_labels_colors (image * img, int sp, int id) \brief initialize atomic labels colors \param img the target image \param sp the total number of chemical species \param id atom(s) 0 or clone(s) 1 */ void init_labels_colors (image * img, int sp, int id) { int i; for (i = 0; i < sp; i++) { img -> labels[id].color[i].red = img -> at_color[i+id*sp].red; img -> labels[id].color[i].green = img -> at_color[i+id*sp].green; img -> labels[id].color[i].blue = img -> at_color[i+id*sp].blue; img -> labels[id].color[i].alpha = 1.0; GdkRGBA col = colrgba_togtkrgba (img -> labels[id].color[i]); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_title[i]), & col); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) \brief use default atom colors - toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) \brief use default atom colors - toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; gboolean val = button_get_status ((GtkWidget *)but); int b = id -> b; project * this_proj = get_project_by_id(id -> a); if (val) { if (this_proj -> modelgl -> anim -> last -> img -> labels[b].color != NULL) { init_labels_colors (this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec, b); g_free (this_proj -> modelgl -> anim -> last -> img -> labels[b].color); } this_proj -> modelgl -> anim -> last -> img -> labels[b].color = NULL; this_proj -> modelgl -> anim -> last -> img -> labels[b].n_colors = 0; } else { this_proj -> modelgl -> anim -> last -> img -> labels[b].color = g_malloc0(2*this_proj -> nspec*sizeof*this_proj -> modelgl -> anim -> last -> img -> labels[b].color); init_labels_colors (this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec, b); this_proj -> modelgl -> anim -> last -> img -> labels[b].n_colors = 2*this_proj -> nspec; } widget_set_sensitive (atom_color_box, ! val); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) \brief change label(s) font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; g_free (view -> anim -> last -> img -> labels[id -> b].font); view -> anim -> last -> img -> labels[id -> b].font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); if (id -> b < 2) { view -> create_shaders[LABEL] = TRUE; } else if (id -> b == 2) { view -> create_shaders[MAXIS] = TRUE; } else if (id -> b == 3 || id -> b == 4) { view -> create_shaders[MEASU] = TRUE; } update (view); } else { tmp_label[id -> b] -> font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); } } /*! \fn G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) \brief change label(s) color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[id -> b].color[id -> c] = get_button_color (colob); if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_label[id -> b] -> color[0] = get_button_color (colob); } } /*! \fn G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) \brief change label(s) position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[id -> b].position = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_label[id -> b] -> position = i; } } /*! \fn void label_shift_has_changed (gpointer data, double value) \brief change label(s) shift \param data the associated data pointer \param value the new label(s) shift */ void label_shift_has_changed (gpointer data, double value) { tint * id = (tint *) data; int i = id -> b / 10; int j = id -> b - i * 10; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[i].shift[j] = value; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; update (view); } else { tmp_label[i] -> shift[j] = value; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change label(s) shift - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { label_shift_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) \brief change label(s) shift - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) { label_shift_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) \brief change label(s) scale - toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) \brief change label(s) scale - toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; int i = button_get_status ((GtkWidget *)but); if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[id -> b].scale = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 2) view -> create_shaders[MAXIS] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_label[id -> b] -> scale = i; } } /*! \fn G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) \brief change label(s) tilt \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mtilt[id -> b] = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mtilt[id -> b] = i; } } /*! \fn void mesure_factor_has_changed (gpointer data, double value) \brief change measure scale factor \param data the associated data pointer \param value the new scale factor */ void mesure_factor_has_changed (gpointer data, double value) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mfactor[id -> b] = (int)value; view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mfactor[id -> b] = (int)value; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change measure scall factor - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { mesure_factor_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) \brief change measure scall factor - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) { mesure_factor_has_changed (data, gtk_range_get_value (range)); } /*! \fn void measure_width_has_changed (gpointer data, double value) \brief change measure width \param data the associated data pointer \param value the new width value */ void measure_width_has_changed (gpointer data, double value) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mwidth[id -> b] = value; view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mwidth[id -> b] = value; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change measure width - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { measure_width_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) \brief change measure width - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) { measure_width_has_changed (data, gtk_range_get_value (range)); } GtkWidget * line_box; GtkWidget * lstyle; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) \brief toggle enable measure lines callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) \brief toggle enable measure lines callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; glwin * view; if (id -> a != -1) view = get_project_by_id(id -> a) -> modelgl; int i, j; i = button_get_status ((GtkWidget *)but); widget_set_sensitive (line_box, i); if (i) { if (id -> a != -1) { j = view -> anim -> last -> img -> mpattern[id -> b] = 0; } else { j = tmp_mpattern[id -> b] = 0; } } else { if (id -> a != -1) { j = view -> anim -> last -> img -> mpattern[id -> b] = -1; } else { j = tmp_mpattern[id -> b] = -1; } } combo_set_active (lstyle, j); if (id -> a != -1) { view -> create_shaders[MEASU] = TRUE; update (view); } } /*! \fn GtkWidget * labels_tab (glwin * view, int lid) \brief create atomic label(s) tab for the atom(s) / clone(s) window \param view the target glwin \param lid label type (0 = atoms, 1 = clones, 3 = analysis measures, 4 = edition mode measures) */ GtkWidget * labels_tab (glwin * view, int lid) { int i; gchar * lpos[3] = {"x", "y", "z"}; project * this_proj; screen_label * label; int acl_format; gboolean mtilt; int mpattern; int mfactor; double mwidth; tint * lab_pointer; tint * measure_pointer; tint * shift_pointer[2]; if (! preferences) { this_proj = get_project_by_id (view -> proj); label = & view -> anim -> last -> img -> labels[lid]; lab_pointer = & view -> colorp[lid][0]; measure_pointer = (lid > 2) ? & view -> colorp[lid-3][0] : NULL; for (i=0; i<2; i++) shift_pointer[i] = & view -> colorp[lid*10+i][0]; if (lid < 2) { acl_format = view -> anim -> last -> img -> acl_format[lid]; } else { mtilt = view -> anim -> last -> img -> mtilt[lid-3]; mpattern = view -> anim -> last -> img -> mpattern[lid-3]; mfactor = view -> anim -> last -> img -> mfactor[lid-3]; mwidth = view -> anim -> last -> img -> mwidth[lid-3]; } } else { label = tmp_label[lid]; lab_pointer = & pref_pointer[lid]; measure_pointer = (lid > 2) ? & pref_pointer[lid-3] : NULL; for (i=0; i<2; i++) shift_pointer[i] = & pref_pointer[lid*10+i]; if (lid < 2) { acl_format = tmp_acl_format[lid]; } else { mtilt = tmp_mtilt[lid-3]; mpattern = tmp_mpattern[lid-3]; mfactor = tmp_mfactor[lid-3]; mwidth = tmp_mwidth[lid-3]; } } GtkWidget * tbox = create_vbox (BSEP); GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, vbox, FALSE, FALSE, 5); GtkWidget * box; if (lid < 2) { box = abox (vbox, _("Templates "), 0); GtkWidget * formats = create_combo (); for (i=0; iLabel(s):"), -1, 40, 0.0, 0.5), FALSE, FALSE, 0); } // Rendering box = abox (vbox, _("Rendering "), 0); GtkWidget * config = create_combo (); combo_text_append (config, _("Basic Text")); combo_text_append (config, _("Highlighted")); combo_set_active (config, label -> render); gtk_widget_set_size_request (config, 220, -1); g_signal_connect (G_OBJECT (config), "changed", G_CALLBACK(set_labels_render), lab_pointer); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, config, FALSE, FALSE, 10); // Font box = abox (vbox, _("Font"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, font_button (label -> font, 220, -1, G_CALLBACK(set_labels_font), lab_pointer), FALSE, FALSE, 10); if (lid == 3 || lid == 4) { box = abox (vbox, _("Font color"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, color_button (label -> color[0], TRUE, 220, -1, G_CALLBACK(set_label_color), lab_pointer), FALSE, FALSE, 10); } // Position box = abox (vbox, _("Position"), 0); GtkWidget * position = create_combo (); combo_text_append (position, _("Always Visible")); combo_text_append (position, _("Normal")); combo_set_active (position, label -> position); gtk_widget_set_size_request (position, 220, -1); g_signal_connect (G_OBJECT (position), "changed", G_CALLBACK(set_labels_position), lab_pointer); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, position, FALSE, FALSE, 10); // Size / scale box = abox (vbox, _("Size"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button (_("Scale with zoom in/out"), 220, -1, label -> scale, G_CALLBACK(set_labels_scale), lab_pointer), FALSE, FALSE, 10); if (lid == 3 || lid == 4) { // Tilt box = abox (vbox, _("Tilt"), 0); tilt = create_combo (); combo_text_append (tilt, _("None")); combo_text_append (tilt, _("Adapted")); combo_set_active (tilt, mtilt); gtk_widget_set_size_request (tilt, 220, -1); g_signal_connect (G_OBJECT (tilt), "changed", G_CALLBACK(set_labels_tilt), measure_pointer); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, tilt, FALSE, FALSE, 10); } GtkWidget * chbox; if (lid < 3) { box = abox (vbox, _("Distance to atom [Å]"), 0); chbox = create_hbox (0); for (i=0; i<2; i++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, markup_label(lpos[i], 30, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, create_hscale(-5.0, 5.0, 0.01, label -> shift[i], (preferences) ? GTK_POS_RIGHT : GTK_POS_TOP, 3, 100, G_CALLBACK(set_label_shift), G_CALLBACK(scroll_set_label_shift), shift_pointer[i]), FALSE, FALSE, 0); } if (preferences) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, chbox, FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, chbox, FALSE, FALSE, 0); } } // Colors gboolean ac; if (label -> color == NULL) { ac = TRUE; } else { ac = FALSE; } if (lid < 3 && ! preferences) { box = abox (vbox, _("Color(s)"), 0); GtkWidget * col_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, col_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, check_button (_("Use atom colors"), 100, 40, ac, G_CALLBACK(use_atom_default_colors), (gpointer)lab_pointer), FALSE, FALSE, 0); atom_color_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, atom_color_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, atom_color_box, markup_label (_("Please select atom label colors:"), -1, -1, 0.25, 0.5), FALSE, FALSE, 5); color_title = g_malloc0(this_proj -> nspec*sizeof*color_title); for (i=0; i< this_proj -> nspec; i++) { chbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, markup_label(this_proj -> chemistry -> label[i], 120, -1, 0.5, 0.5), FALSE, FALSE, 20); if (label -> color == NULL) { color_title[i] = color_button(view -> anim -> last -> img -> at_color[i], TRUE, 80, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][i]); } else { color_title[i] = color_button(label -> color[i], TRUE, 80, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, color_title[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, atom_color_box, chbox, FALSE, FALSE, 0); } widget_set_sensitive (atom_color_box, ! ac); } else if (lid >= 3) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Line(s):"), -1, 40, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Show/Hide"), -1, 40, mpattern+1, G_CALLBACK(enable_lines), measure_pointer), FALSE, FALSE, 30); line_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, line_box, TRUE, TRUE, 0); box = abox (line_box, _("Pattern"), 0); GtkListStore * store = gtk_list_store_new (1, GDK_TYPE_PIXBUF); GtkTreeIter iter; for (i=0; i Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_crystal.c * @short Functions to create a crystal database window \n This is a project and not in use for the time being * @author Sébastien Le Roux */ /* * This file: 'w_crystal.c' * * Contains: * - The functions to create a crystal database window - This is a project and not in use for the time being * * List of functions: int cif_preview (const char * filetoread); int get_cgroup (gchar * str); int get_cif_files (); int get_num_cif (); int get_num_group (); int get_cif_info_from_cif_node (xmlNodePtr * cnode); int open_cif_database (gchar * filetoread); int prepare_data_base (int db); int build_crystal_from_cif_database (project * this_proj); void sort_crystal_files (int num_c); void fill_cif_tree (GtkListStore * store); void fill_group_tree (GtkListStore * store); void fill_symmetry_tree (GtkListStore * store); void fill_database_tree (GtkListStore * store); void insert_cif_preview (); void prepare_cif_preview (int id); void prepare_cif_list (int dba, int sym, int spg); GtkWidget * cif_tree (GtkListStore * store, int id, gchar * name); */ /* Crystal database window, project not in use for the time being */ #include "global.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "bind.h" #define DATABASE 1 gchar * database_list[DATABASE] = {"American Mineralogist Crystal Structure Database"}; /*"Crystallography Open Database", "Database of Zeolite Structures"};*/ gchar * database_dir[DATABASE] = {"AMCSD"};//, "COD", "DZC"}; #define SYMMETRIES 8 gchar * sym_list[SYMMETRIES]= {"Triclinic", "Monoclinic", "Orthorhombic", "Tetragonal", "Trigonal", "Hexagonal", " Cubic", "Other"}; extern G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); #ifdef GTK3 #ifndef G_OS_WIN32 extern void gtk_window_change_gdk_visual (GtkWidget * win); #endif // G_OS_WIN32 #endif // GTK3 extern gboolean create_3d_model (int p, gboolean load); extern G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); extern void init_camera (project * this_proj); extern void alloc_proj_data (project * this_proj, int cid); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, int status, gboolean visible); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern void create_object_from_library (int p); GtkListStore * database_store; GtkTreeIter first_database_iter; GtkListStore * symmetry_store; GtkTreeIter first_symmetry_iter; GtkListStore * group_store; GtkTreeIter first_group_iter; GtkListStore * cif_store; GtkTreeIter first_cif_iter; GtkTreeSelection * cifselect[3]; int the_database; int the_symmetry; int the_group; gchar * the_crystal; gchar ** cif_file_name; gchar ** cif_name; GtkWidget * cif_preview_box = NULL; GtkWidget * cif_preview_plot = NULL; project * cif_proj = NULL; gchar * other_name[5]; int o_names; /*! \fn int cif_preview (const char * filetoread) \brief NOT USED ! \param filetoread */ int cif_preview (const char * filetoread) { int i, j, k; if (cif_proj != NULL) close_project (cif_proj); init_project (TRUE); cif_proj = active_project; cif_proj -> coordfile = g_strdup_print ("%s", filetoread); if (open_coordinate_file (6)) { // Cif error return 0; } return 1; } /*! \fn int get_cgroup (gchar * str) \brief NOT USED ! \param str */ int get_cgroup (gchar * str) { int i; for (i=0; i0) { str = g_strdup_printf ("%s", cif_name[i]); cif_name[i] = g_strdup_printf ("%s", cif_name[j]); cif_name[j] = g_strdup_printf ("%s", str); str = g_strdup_printf ("%s", cif_file_name[i]); cif_file_name[i] = g_strdup_printf ("%s", cif_file_name[j]); cif_file_name[j] = g_strdup_printf ("%s", str); } } } for(i=0;i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); if (open_cif_file(str) != NULL) val ++; g_free (str); } } closedir(d); } #endif if (val > 0) { cif_file_name = calloc(val, sizeof*cif_file_name); cif_name = calloc(val, sizeof*cif_name); val = 0; #ifdef G_OS_WIN32 hFind = FindFirstFile (libwin32, & ffd); if (hFind != INVALID_HANDLE_VALUE) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } } FindClose(hFind); } #else d = opendir (libdir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } } closedir(d); } #endif sort_crystal_files (val); } return val; } /*! \fn int get_num_cif () \brief NOT USED ! */ int get_num_cif () { return num_cif[the_symmetry][the_group]; } /*! \fn int get_num_group () \brief NOT USED ! */ int get_num_group () { return num_group[the_symmetry]; } /*! \fn void fill_cif_tree (GtkListStore * store) \brief NOT USED ! \param store */ void fill_cif_tree (GtkListStore * store) { GtkTreeIter cif_level; int i; for (i=0; i modelgl -> plot, 0, 0, 4, 4); gtk_grid_attach (GTK_GRID (grid), markup_label(_("Formula:"), 100, -1, 0.0, 0.5), 5, 1, 3, 1); int i; for (i=0; i nspec; i++) { if (i > 0) { str = g_strdup_printf ("%s %s", str, cif_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s", cif_proj -> chemistry -> label[i]); } if (cif_proj -> chemistry -> nsps[i] > 1) { str = g_strdup_printf ("%s%d", str, cif_proj -> chemistry -> nsps[i]); } str = g_strdup_printf ("%s", str); } gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 1, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid),markup_label(_("Density:"), 100, -1, 0.0, 0.5), 5, 2, 3, 1); str = g_strdup_printf ("%.3f g/cm3", cif_proj -> density); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 2, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid), markup_label(_("Name:"), 100, -1, 0.0, 0.5), 0, 5, 3, 1); str = g_strdup_printf ("%s", ); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, 30, 0.0, 0.5), 3, 5, 11, 1); show_the_widgets_all (cif_preview_box); } /*! \fn void prepare_cif_preview (int id) \brief NOT USED ! \param id */ void prepare_cif_preview (int id) { if (cif_file_name != NULL) { if (cif_preview (cif_file_name[id])) { if (cif_preview_plot != NULL) gtk_widget_destroy (cif_preview_plot); cif_proj -> run = TRUE; active_project_changed (cif_proj -> id); create_3d_model (cif_proj -> id, FALSE); insert_cif_preview (); bonds_update = 0; active_glwin = cif_proj -> modelgl; active_glwin -> init = FALSE; active_image = & active_glwin -> anim -> last -> img; on_calc_bonds_released (NULL, NULL); cif_proj -> modelgl -> anim -> last -> img.quality = 30; cif_proj -> modelgl -> anim -> last -> img.rep = ORTHOGRAPHIC; gtk_widget_set_size_request (cif_proj -> modelgl -> plot, 150, 150); update (cif_proj -> modelgl); } } } /*! \fn int get_cif_info_from_cif_node (xmlNodePtr * cnode) \brief NOT USED ! \param cnode */ int get_cif_info_from_cif_node (xmlNodePtr * cnode) { return 1; } /*! \fn void prepare_cif_list (int dba, int sym, int spg) \brief NOT USED ! \param dba \param sym \param spg */ void prepare_cif_list (int dba, int sym, int spg) { #ifdef G_OS_WIN32 data_xml = g_strdup_printf ("%s\\crystals\\%s_list.xml", PACKAGE_LIB_DIR, database_dir[dba]); #else data_xml = g_strdup_printf ("%s/crystals/%s_list.xml", PACKAGE_LIB_DIR, database_dir[dba]); #endif xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar cif_base[8]="cif-database"; xmlChar * cdata; xmlNodePtr racine, node, sym_node, group_node, cif_node; reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return 0; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (strcmp((char *)(racine -> name), (char *)cif_base) != 0) return clean_xml_data (doc, reader); node = findnode (racine -> children, "cif-list"); if (node == NULL) return clean_xml_data (doc, reader); sym_node = findnode (sym_node, sym_list[sym]); if (sym_node == NULL) return clean_xml_data (doc, reader); group_node = findnode (sym_node, group_names_by_sym[sym][spg]); cif_file_name = calloc(num_cif_by_sym_group[sym][spg], sizeof*cif_file_name); file_node = group_node -> properties; while (file_node) { cif_node = file_node -> children; if (cif_node == NULL) return clean_xml_data (doc, reader); if (! get_cif_info_from_cif_node (cif_node)) return 0; } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); } } /*! \fn int open_cif_database (gchar * filetoread) \brief NOT USED ! \param filetoread */ int open_cif_database (gchar * filetoread) { xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar cif_base[8]="cif-database"; xmlChar * cdata; xmlNodePtr racine, node, sym_node, group_node, cif_node; gchar * str; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return 0; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (strcmp((char *)(racine -> name), (char *)cif_base) != 0) return clean_xml_data (doc, reader); node = racine -> children; node = findnode (racine -> children, "num-cif"); if (node == NULL) return clean_xml_data (doc, reader); cdata = xmlNodeGetContent(node); total_num_cif = (int)string_to_double ((gpointer)cdata); xmlFree (cdata); sym_node = findnode (racine -> children, "sym-cif"); if (sym_node == NULL) return clean_xml_data (doc, reader); int i, j; for (i=0; i properties; while (group_spec) { cif_node = group_spec -> children; if (cif_node == NULL) return clean_xml_data (doc, reader); if (strcmp("num_cif", (char *)cif_node -> name) == 0) { cdata = xmlNodeGetContent(cif_node); num_cif_by_sym_group[i][j] = (int)string_to_double ((gpointer)cdata); xmlFree (cdata); } } cdata = xmlNodeGetContent(group); group_names_by_sym[i][j] = g_strdup_printf ("%s", content); } } sym_node = findnode (racine -> children, "cif-list"); if (sym_node == NULL) return clean_xml_data (doc, reader); for (i=0; i modelgl -> win)); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (clib); #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 gtk_dialog_add_button (GTK_DIALOG(clib), _("Build"), GTK_RESPONSE_APPLY); GtkWidget * vbox = gtk_dialog_get_content_area(GTK_DIALOG (clib)); GtkWidget * hbox = create_hbox (5); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); cif_file_name = cif_name = NULL; database_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (database_store, 0, _("Database")), FALSE, FALSE, 0); group_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (database_store, 1, _("Symmetry")), FALSE, FALSE, 0); group_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (group_store, 2, _("Group")), FALSE, FALSE, 0); cif_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (cif_store, 3, _("Crystal")), FALSE, FALSE, 0); fill_database_store (database_store); cif_preview_box = create_hbox(0); gtk_box_pack_start (GTK_BOX(hbox), cif_preview_box, FALSE, FALSE, 0); cif_preview_plot = NULL; the_database = the_group = 0; gtk_tree_selection_select_iter (cifselect[0], & first_database_iter); gtk_tree_selection_select_iter (cifselect[1], & first_symmetry_iter); gtk_tree_selection_select_iter (cifselect[2], & first_group_iter); gtk_list_store_clear (cif_store); fill_cif_tree (cif_store); gtk_tree_selection_select_iter (cifselect[3], & first_cif_iter); show_the_widgets_all (clib); prepare_cif_preview (0); this_proj -> modelgl -> nth_copy = 0; switch (gtk_dialog_run (GTK_DIALOG(clib))) { case GTK_RESPONSE_APPLY: gtk_widget_set_sensitive (vbox, 0); this_proj -> modelgl -> other_status = 2; create_object_from_library (cif_proj -> id); gtk_widget_set_sensitive (vbox, 1); break; default: res = 0; break; } gtk_widget_destroy (clib); active_project_changed (active); if (cif_file_name != NULL) free (cif_file_name); if (cif_name != NULL) free (cif_name); if (cif_proj != NULL) close_project (cif_proj); cif_proj = NULL; return res; } atomes_1.3.1/src/opengl/win/initcoord.c0000664000175000017500000005537115212624223017526 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initcoord.c * @short Coordinations and polyhedra menus initialization \n Coordinations and polyhedra GTK3 menus and menu items creation \n Initialization of coordinations and polyhedra related data from Fortran90 information * @author Sébastien Le Roux */ /* * This file: 'initcoord.c' * * Contains: * - Coordinations and polyhedra menu initialization - Coordinations and polyhedra GTK3 menus and menu items creation - Initialization of coordinations and polyhedra related data from Fortran90 information * * List of functions: void gcid_spcolor_setup (int sp, int id); void set_color_map_sensitive (glwin * view); void set_advanced_bonding_menus (glwin * view); void prep_all_coord_menus (glwin * view); void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]); void allocate_partial_geo_ (int * sp, int * ngsp); void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]); void init_menu_fragmol_ (int * id); void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init); void init_opengl_coords (int id, int nt, int init); void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]); GtkWidget * coord_view_setup (int * sp, int id, int jd); GtkWidget * coord_color_setup (int * sp, int id, int jd); GtkWidget * poly_show_setup (int * sp, int id, int jd); GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data); ColRGBA init_color (int id, int numid); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "glview.h" extern GtkWidget * coord_menu (glwin * view); extern cairo_surface_t * col_surface (double r, double g, double b, int x, int y); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern void setup_molecules (); extern int * duplicate_int (int num, int * old_val); int ** idgeo = NULL; /*! \fn ColRGBA init_color (int id, int numid) \brief initialize color based id number over total number of elements \param id the id number \param numid the total number of elements */ ColRGBA init_color (int id, int numid) { float a, b; ColRGBA col; if (numid > 5) { a = (float)id; b = (float)numid / 4.0; if (a < b) { col.red = 1.0; col.green = a / b; col.blue = 0.0; } else if (a < 2*b) { col.red = 1.0 - (1.0 * (a-b)/b); col.green = 1.0; col.blue = 0.0; } else if (a < 3*b) { col.red = 0.0; col.green = 1.0; col.blue = (1.0 * (a-2.0*b)/b); } else { col.red = 0.0; col.green = 1.0 - (1.0 * (a-3.0*b)/b); col.blue = 1.0; } col.alpha = 1.0; } else { col = std[id]; col.alpha = 1.0; } return col; } /*! \fn void gcid_spcolor_setup (int sp, int id) \brief prepare color pointers \param sp the chemical species \param id the coordination id */ void gcid_spcolor_setup (int sp, int id) { int i; if (active_glwin -> gcid[id] == NULL) { active_glwin -> gcid[id] = g_malloc0(active_coord -> totcoord[id]*sizeof*active_glwin -> gcid[id]); for (i=0; i totcoord[id]; i++) { active_glwin -> gcid[id][i] = g_malloc0(64*sizeof*active_glwin -> gcid[id][i]); } } active_image -> spcolor[id][sp] = g_malloc0(active_coord -> totcoord[id]*sizeof*active_image -> spcolor[id][sp]); } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn void set_color_map_sensitive (glwin * view) \brief set color map menu items sensitivity GTK3 \param view the target glwin */ void set_color_map_sensitive (glwin * view) { int i, j; for (i=0; i color_styles[i], 1); if (j == 3) widget_set_sensitive (view -> color_styles[i], view -> adv_bonding[0]); if (j == 4) widget_set_sensitive (view -> color_styles[i], view -> adv_bonding[1]); if (j == 5) widget_set_sensitive (view -> color_styles[i], (get_project_by_id(view -> proj) -> force_field[0]) ? 1 : 0); if (j == 6) widget_set_sensitive (view -> color_styles[i], (! (i/ATOM_MAPS) || view -> custom_map) ? 1 : 0); } } /*! \fn void set_advanced_bonding_menus (glwin * view) \brief set sensitivity of advanced bonding menus GTK3 \param view the target glwin */ void set_advanced_bonding_menus (glwin * view) { int i; for (i=0; i<2; i++) { widget_set_sensitive (view -> ogl_smode[2*i+2], view -> adv_bonding[0]); widget_set_sensitive (view -> ogl_smode[2*i+3], view -> adv_bonding[1]); widget_set_sensitive (view -> ogl_mode[2+i+NINPUTS], view -> adv_bonding[1]); } } /*! \fn void prep_all_coord_menus (glwin * view) \brief prepare coordination menus GTK3 \param view the target glwin */ void prep_all_coord_menus (glwin * view) { // GTK3 Menu Action To Check set_color_map_sensitive (view); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0], coord_menu (view)); widget_set_sensitive (view -> ogl_coord[3], view -> adv_bonding[0]); widget_set_sensitive (view -> ogl_coord[4], view -> adv_bonding[1]); show_the_widgets (view -> ogl_coord[0]); set_advanced_bonding_menus (view); } /*! \fn GtkWidget * coord_view_setup (int * sp, int id, int jd) \brief create coordination menu elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * coord_view_setup (int * sp, int id, int jd) { GtkWidget * menuv = gtk_menu_new (); if (id < 2) { active_glwin -> oglmv[jd][id][* sp] = NULL; active_glwin -> oglmv[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmv[jd][id][* sp], menuv); } return menuv; } /*! \fn GtkWidget * coord_color_setup (int * sp, int id, int jd) \brief create coordination color menu elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * coord_color_setup (int * sp, int id, int jd) { if (! jd) gcid_spcolor_setup (* sp, id); GtkWidget * menuc = NULL; menuc = gtk_menu_new (); if (id < 2) { active_glwin -> oglmc[jd][id][* sp] = NULL; active_glwin -> oglmc[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmc[jd][id][* sp], menuc); } return menuc; } /*! \fn GtkWidget * poly_show_setup (int * sp, int id, int jd) \brief create polyhedra menu item elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * poly_show_setup (int * sp, int id, int jd) { GtkWidget * menup = gtk_menu_new (); active_glwin -> oglmpv[jd][id][* sp] = NULL; if (id < 2) { active_glwin -> oglmpv[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); } else { active_glwin -> oglmpv[jd][id][* sp] = create_menu_item (TRUE, _("Show/Hide")); } gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmpv[jd][id][* sp], menup); return menup; } /*! \fn GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) \brief create coordination/polyhedra menu widget GTK3 \param p coordination (0), or polyhedra (1) \param name text of the menu item \param va status, coordination or polyhedra visible or not (1/0) \param menu the GtkWidget menu to attach the menu item to \param data the associated data pointer */ GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) { GtkWidget * coord_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, NULL, NULL, FALSE, 0, 0, TRUE, FALSE, va); if (p == 0) { g_signal_connect (G_OBJECT (coord_widget), "activate", G_CALLBACK(show_hide_coord), data); } else { g_signal_connect (G_OBJECT (coord_widget), "activate", G_CALLBACK(show_hide_poly), data); } return coord_widget; } #endif /*! \fn void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) \brief partial coordination data from Fortran90 \param sp the chemical species \param id the partial coordination id \param ngsp the number of chemical species \param coord the list of partial coordination(s) for that chemical species and coordination id */ void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) { active_coord -> partial_geo[* sp][* id] = duplicate_int (* ngsp, coord); } /*! \fn void allocate_partial_geo_ (int * sp, int * ngsp) \brief allocate partial coordination(s) data \param sp the chemical species \param ngsp the number of distinct coordination(s) for that chemical species */ void allocate_partial_geo_ (int * sp, int * ngsp) { if (active_coord -> partial_geo[* sp] != NULL) { g_free (active_coord -> partial_geo[* sp]); active_coord -> partial_geo[* sp] = NULL; } active_coord -> partial_geo[* sp] = g_malloc0(* ngsp * sizeof*active_coord -> partial_geo[* sp]); } /*! \fn void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[*ngsp]) \brief getting atomic coordinations data from Fortran90, and related GTK3 menu elements creation \param id 0 for total coordination(s), 1 for partial coordination(s) \param sp the chemical species \param ngsp the number of distinct coordination(s) for that chemical species \param coordt the list of coordination(s) for that chemical species */ void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]) { int i, j, k, l, m, n, o; #ifdef GTK3 // GTK3 Menu Action To Check gchar * str, * env; GtkWidget * spm; GtkWidget * menupv; GtkWidget * menuc; GtkWidget * menuv; #endif i = 0; for (j=0; j < * sp; j++) { i += active_coord -> ntg[* id][j]; } j = 2*active_project -> nspec; for (l=0; l < * id; l++) { j += active_coord -> totcoord[l]; } k = i + j; if (active_coord -> geolist[* id][* sp] != NULL) { g_free (active_coord -> geolist[* id][* sp]); active_coord -> geolist[* id][* sp] = NULL; } active_coord -> geolist[* id][* sp] = duplicate_int (* ngsp, coordt); active_coord -> ntg[* id][* sp] = * ngsp; l = 0; for (m=0; m < * ngsp; m++) { if (* id) { n = 0; for (o=0; o nspec; o++) { n += active_coord -> partial_geo[* sp][m][o]; } } else { n = coordt[m]; } if (n > 2) { l ++; active_image -> show_poly[* id][m+i] = TRUE; } else { active_image -> show_poly[* id][m+i] = FALSE; } } #ifdef GTK4 gcid_spcolor_setup (* sp, * id); for (m=0; m < * ngsp; m++) { active_image -> show_coord[* id][m+i] = TRUE; active_coord -> geolist[* id][* sp][m] = coordt[m]; if (* id) { active_image -> spcolor[* id][* sp][m] = init_color (m+i, active_coord -> totcoord[* id]); } else { active_image -> spcolor[* id][* sp][m] = init_color (coordt[m]-active_coord -> cmin, active_coord -> cmax-active_coord -> cmin); } active_image -> show_poly[* id][m+i] = FALSE; active_image -> spcolor[* id][* sp][m].alpha = DEFAULT_ALPHA; color_box (active_glwin, k+m, * sp, m); } #else // GTK3 Menu Action To Check for (m=0; m<2; m++) { menuc = coord_color_setup (sp, * id, m); menuv = coord_view_setup (sp, * id, m); if (l > 0) { menupv = poly_show_setup (sp, * id, m); } else { active_glwin -> oglmpv[m][* id][* sp] = NULL; } for (n=0; n < * ngsp; n++) { if (* id) { env = env_name (active_project, n, * sp, 1, NULL); str = exact_name (env); g_free (env); spm = create_menu_item_from_widget (markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); } else { str = g_strdup_printf ("%d", coordt[n]); spm = create_menu_item (TRUE, str); } if (! m) { active_image -> show_coord[* id][n+i] = TRUE; active_coord -> geolist[* id][* sp][n] = coordt[n]; if (* id) { active_image -> spcolor[* id][* sp][n] = init_color (n+i, active_coord -> totcoord[* id]); } else { active_image -> spcolor[* id][* sp][n] = init_color (coordt[n]-active_coord -> cmin, active_coord -> cmax-active_coord -> cmin); } active_image -> spcolor[* id][* sp][n].alpha = DEFAULT_ALPHA; } active_glwin -> ogl_geom[m][* id][n+i] = create_coord_menu (0, str, TRUE, menuv, & active_glwin -> gcid[* id][n+i][* id]); gtk_menu_shell_append ((GtkMenuShell *)menuc, spm); gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, k+n, * sp, n)); if (active_image -> show_poly[* id][n+i]) { // The polyhedra show/hide menu active_glwin -> ogl_poly[m][* id][n+i] = create_coord_menu (1, str, FALSE, menupv, & active_glwin -> gcid[* id][n+i][* id]); if (m) active_image -> show_poly[* id][n+i] = FALSE; } g_free (str); } } #endif } /*! \fn void init_menu_fragmol_ (int * id) \brief getting fragment(s)/molecule(s) data from Fortran90, and related GTK3 menu elements creation \param id 2 for fragments, 3 for molecules */ void init_menu_fragmol_ (int * id) { #ifdef DEBUG gchar * keyw[2] = {i18n("fragment(s)"), i18n("molecule(s)")}; if (active_project -> steps > 1) { gchar * str = g_strdup_printf (_("Maximum number of %s per MD step: %d"), _(keyw[* id -2]), active_coord -> totcoord[* id]); g_debug ("%s", str); } #endif // DEBUG if (* id == 3) { if (active_image -> show_coord[3]) g_free (active_image -> show_coord[3]); active_image -> show_coord[3] = allocbool (active_coord -> totcoord[3]); #ifdef GTK3 // GTK3 Menu Action To Check if (active_coord -> totcoord[3] <= COORD_MAX_MENU) { active_glwin -> ogl_geom[0][3] = g_malloc0(active_coord -> totcoord[3]*sizeof*active_glwin -> ogl_geom[0][3]); active_glwin -> ogl_geom[1][3] = g_malloc0(active_coord -> totcoord[3]*sizeof*active_glwin -> ogl_geom[1][3]); } #endif } int i, j; j = 2 * active_project -> nspec; for (i=0; i < * id; i++) { j += active_coord -> totcoord[i]; } #ifdef GTK4 gcid_spcolor_setup (0, * id); for (i=0; i < active_coord -> totcoord[* id]; i++) { color_box (active_glwin, j+i, * id, i); active_image -> spcolor[* id][0][i] = init_color (i, active_coord -> totcoord[* id]); active_image -> spcolor[* id][0][i].alpha = DEFAULT_ALPHA; active_image -> show_coord[* id][i] = TRUE; } #else int k; gchar * str; GtkWidget * spm; for (k=0; k<2; k++) { i = 0; active_glwin -> oglmv[k][* id][0] = coord_view_setup (& i, * id, k); active_glwin -> oglmc[k][* id][0] = coord_color_setup (& i, * id, k); for (i=0; i < active_coord -> totcoord[* id]; i++) { if (! k) active_image -> show_coord[* id][i] = TRUE; if (active_coord -> totcoord[* id] <= COORD_MAX_MENU) { if (* id == 2) { str = g_strdup_printf (_("Fragment N°%d"), i+1); } else { str = g_strdup_printf (_("Molecule N°%d"), i+1); } active_glwin -> ogl_geom[k][* id][i] = create_coord_menu (0, str, TRUE, active_glwin -> oglmv[k][* id][0], & active_glwin -> gcid[* id][i][* id]); spm = create_menu_item (TRUE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[k][* id][0], spm); gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, j+i, * id, i)); } else { active_glwin -> gcid[* id][i][* id].a = active_glwin -> proj; active_glwin -> gcid[* id][i][* id].b = * id; active_glwin -> gcid[* id][i][* id].c = i; active_glwin -> gcid[* id][i][* id].d = * id; } active_image -> spcolor[* id][0][i] = init_color (i, active_coord -> totcoord[* id]); active_image -> spcolor[* id][0][i].alpha = DEFAULT_ALPHA; } } #endif } /*! \fn void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[*ngsp], int * init) \brief getting rings statistics data from Fortran90, and related GTK3 menu elements creation \param coo the coord type \param ids the ring(s) type in [0-4], or 0 for the chains \param ngsp the total number of distinct ring size(s) \param coordt the list of ring size(s) with rings \param init initialize some visual information (1/0) */ void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init) { int j; if (active_coord -> geolist[* coo][0] != NULL) { g_free (active_coord -> geolist[* coo][0]); active_coord -> geolist[* coo][0] = NULL; } active_coord -> geolist[* coo][0] = allocint (* ngsp); #ifdef GTK4 gcid_spcolor_setup (0, * coo); for ( j=0 ; j < * ngsp ; j++ ) { active_coord -> geolist[* coo][0][j] = coordt[j]; active_image -> show_coord[* coo][j] = TRUE; if ( * coo < 9) { color_box (active_glwin, -3, * ids, j); if (* init) active_image -> show_poly[* coo][j] = FALSE; active_image -> spcolor[* coo][0][j] = init_color (coordt[j]-3, active_glwin -> ring_max[* ids]); active_image -> spcolor[* coo][0][j].alpha = DEFAULT_ALPHA; } else { active_glwin -> gcid[9][j][9].a = active_glwin -> proj; active_glwin -> gcid[9][j][9].b = 0; active_glwin -> gcid[9][j][9].c = j; active_glwin -> gcid[9][j][9].d = 9; } } #else gchar * str; GtkWidget * spm; GtkWidget * allt; int i; for (i=0 ; i < 2 ; i++) { j = 0; active_glwin -> oglmc[i][* coo][j] = NULL; active_glwin -> oglmc[i][* coo][j] = coord_color_setup (& j, * coo, i); if (! * init) active_glwin -> ogl_poly[i][* coo] = g_malloc0(*ngsp*sizeof*active_glwin -> ogl_poly[i][* coo]); for ( j=0 ; j < * ngsp ; j++ ) { if (i == 0) { active_image -> show_coord[* coo][j] = TRUE; if (* coo < 9) { if (* init) active_image -> show_poly[* coo][j] = FALSE; active_image -> spcolor[* coo][0][j] = init_color (coordt[j]-3, active_glwin -> ring_max[* ids]); active_image -> spcolor[* coo][0][j].alpha = DEFAULT_ALPHA; } active_coord -> geolist[* coo][0][j] = coordt[j]; } str = g_strdup_printf ("%d", coordt[j]); spm = create_menu_item (TRUE, str); active_glwin -> ogl_geom[i][* coo][j] = create_coord_menu (0, str, TRUE, NULL, & active_glwin -> gcid[* coo][j][* coo]); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[i][* coo][0], spm); if (* coo < 9) { gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, -3, * ids, j)); active_glwin -> ogl_poly[i][* coo][j] = create_coord_menu (1, str, active_image -> show_poly[* coo][j], NULL, & active_glwin -> gcid[* coo][j][* coo]); } else { active_glwin -> gcid[9][j][9].a = active_glwin -> proj; active_glwin -> gcid[9][j][9].b = 0; active_glwin -> gcid[9][j][9].c = j; active_glwin -> gcid[9][j][9].d = 9; } g_free (str); } allt = create_menu_item (TRUE, _("All")); g_signal_connect (G_OBJECT (allt), "activate", G_CALLBACK(coord_properties), & active_glwin -> colorp[* coo][1]); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[i][* coo][0], allt); } #endif } /*! \fn void init_opengl_coords (int id, int nt, int init) \brief initialize data to store the coordination data \param id the geometry id, in: [0-9] \param nt total number of distinct coordination \param init initialize some visual information (1/0) */ void init_opengl_coords (int id, int nt, int init) { int k; active_coord -> species = active_project -> nspec; active_coord -> totcoord[id] = nt; if (active_image -> show_coord[id]) { g_free (active_image -> show_coord[id]); active_image -> show_coord[id] = NULL; } active_image -> show_coord[id] = allocbool (nt); #ifdef GTK3 int i, j; for (i=0; i<2; i++) { if (active_glwin -> ogl_geom[i][id]) g_free (active_glwin -> ogl_geom[i][id]); active_glwin -> ogl_geom[i][id] = g_malloc0(nt*sizeof*active_glwin -> ogl_geom[i][id]); for (j=0; j < nt; j++) { active_glwin -> ogl_geom[i][id][j] = NULL; } } #endif if (id < 2 || id > 3) { k = (id > 3) ? 1 : active_project -> nspec; if (active_coord -> ntg[id]) g_free (active_coord -> ntg[id]); active_coord -> ntg[id] = g_malloc0(k*sizeof*active_coord -> ntg[id]); if (id > 3) active_coord -> ntg[id][0] = nt; if (id < 9) { if (! init) { if (active_image -> show_poly[id]) g_free (active_image -> show_poly[id]); active_image -> show_poly[id] = allocbool (nt); } #ifdef GTK3 for (i=0; i<2; i++) { if (active_glwin -> ogl_poly[i][id]) g_free (active_glwin -> ogl_poly[i][id]); active_glwin -> ogl_poly[i][id] = g_malloc0(nt*sizeof*active_glwin -> ogl_poly[i][id]); for (j=0; j < nt; j++) { active_glwin -> ogl_poly[i][id][j] = NULL; } } #endif } } } /*! \fn void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[*num]) \brief coordination information from Fortran90 \param id the geometry id, in: [0-9] \param num number of atom(s) \param cmin min value for the total coordination \param cmax max value for the total coordination \param nt total number of distinct coordination \param coord the values for each atom */ void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]) { int i, j, k; if (* nt) init_opengl_coords (* id, * nt, 0); if (* id < 2) { if (* id == 0) { // Total coordination active_coord -> cmax = * cmax; active_coord -> cmin = * cmin; } if (coord != NULL) { for (i=0, k=0; i < active_project -> steps; i++) { for (j=0; j < active_project -> natomes; j++, k++) { active_project -> atoms[i][j].coord[* id] = coord[k] - 1; } } } } } atomes_1.3.1/src/opengl/win/w_library.c0000664000175000017500000011705015212624223017517 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_library.c * @short Functions to create the molecular library \n Functions to read the 'Simple chemical XML' files * @author Sébastien Le Roux */ /* * This file: 'w_library.c' * * Contains: * - The functions to create the molecular library - The functions to read the 'Simple chemical XML' files * * List of functions: int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); int sml_preview (const char * filetoread); int get_family (gchar * str); int get_sml_files (); int select_from_library (gboolean visible, project * this_proj, atom_search * asearch); int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); double get_z_from_periodic_table (gchar * lab); gchar * replace_markup (char * init, char * key, char * rep); gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); gchar * check_xml_string (gchar * init); gchar * open_sml_file (const char * filetoread, int fam); void sort_files (int num_f); void fill_molecule_tree (GtkListStore * store); void fill_family_tree (GtkListStore * store); void insert_preview (); void prepare_preview (int active, int id, gboolean visible); G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data); G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data); GtkWidget * library_tree (GtkListStore * store, int id, gchar * name); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include element_data periodic_table_info[] = { {"X", i18n("Unknown"), 0, 0}, {"H", i18n("Hydrogen"), 1, 1.008}, {"He", i18n("Helium"), 2, 4.003}, {"Li", i18n("Lithium"), 3, 6.94}, {"Be", i18n("Beryllium"), 4, 9.012}, {"B", i18n("Boron"), 5, 10.81}, {"C", i18n("Carbon"), 6, 12.011}, {"N", i18n("Nitrogen"), 7, 14.007}, {"O", i18n("Oxygen"), 8, 15.999}, {"F", i18n("Fluorine"), 9, 18.998}, {"Ne", i18n("Neon"), 10, 20.18}, {"Na", i18n("Sodium"), 11, 22.99}, {"Mg", i18n("Magnesium"), 12, 24.305}, {"Al", i18n("Aluminium"), 13, 26.982}, {"Si", i18n("Silicon"), 14, 28.085}, {"P", i18n("Phosphorus"), 15, 30.974}, {"S", i18n("Sulfur"), 16, 32.06}, {"Cl", i18n("Chlorine"), 17, 35.45}, {"Ar", i18n("Argon"), 18, 39.948}, {"K", i18n("Potassium"), 19, 39.098}, {"Ca", i18n("Calcium"), 20, 40.078}, {"Sc", i18n("Scandium"), 21, 44.956}, {"Ti", i18n("Titanium"), 22, 47.867}, {"V", i18n("Vanadium"), 23, 50.942}, {"Cr", i18n("Chromium"), 24, 51.996}, {"Mn", i18n("Manganese"), 25, 54.938}, {"Fe", i18n("Iron"), 26, 55.845}, {"Co", i18n("Cobalt"), 27, 58.933}, {"Ni", i18n("Nickel"), 28, 58.693}, {"Cu", i18n("Copper"), 29, 63.546}, {"Zn", i18n("Zinc"), 30, 65.38}, {"Ga", i18n("Gallium"), 31, 69.723}, {"Ge", i18n("Germanium"), 32, 72.63}, {"As", i18n("Arsenic"), 33, 74.922}, {"Se", i18n("Selenium"), 34, 78.971}, {"Br", i18n("Bromine"), 35, 79.904}, {"Kr", i18n("Krypton"), 36, 83.798}, {"Rb", i18n("Rubidium"), 37, 85.468}, {"Sr", i18n("Strontium"), 38, 87.62}, {"Y", i18n("Yttrium"), 39, 88.906}, {"Zr", i18n("Zirconium"), 40, 91.224}, {"Nb", i18n("Niobium"), 41, 92.906}, {"Mo", i18n("Molybdenum"), 42, 95.95}, {"Tc", i18n("Technetium"), 43, 98}, {"Ru", i18n("Ruthenium"), 44, 101.07}, {"Rh", i18n("Rhodium"), 45, 102.906}, {"Pd", i18n("Palladium"), 46, 106.42}, {"Ag", i18n("Silver"), 47, 107.868}, {"Cd", i18n("Cadmium"), 48, 112.414}, {"In", i18n("Indium"), 49, 114.818}, {"Sn", i18n("Tin"), 50, 118.71}, {"Sb", i18n("Antimony"), 51, 121.76}, {"Te", i18n("Tellurium"), 52, 127.6}, {"I", i18n("Iodine"), 53, 126.904}, {"Xe", i18n("Xenon"), 54, 131.293}, {"Cs", i18n("Caesium"), 55, 132.905}, {"Ba", i18n("Barium"), 56, 137.327}, {"La", i18n("Lanthanum"), 57, 138.905}, {"Ce", i18n("Cerium"), 58, 140.116}, {"Pr", i18n("Praseodymium"), 59, 140.908}, {"Nd", i18n("Neodymium"), 60, 144.242}, {"Pm", i18n("Promethium"), 61, 145}, {"Sm", i18n("Samarium"), 62, 150.36}, {"Eu", i18n("Europium"), 63, 151.964}, {"Gd", i18n("Gadolinium"), 64, 157.25}, {"Tb", i18n("Terbium"), 65, 158.925}, {"Dy", i18n("Dysprosium"), 66, 162.5}, {"Ho", i18n("Holmium"), 67, 164.93}, {"Er", i18n("Erbium"), 68, 167.259}, {"Tm", i18n("Thulium"), 69, 168.934}, {"Yb", i18n("Ytterbium"), 70, 173.045}, {"Lu", i18n("Lutetium"), 71, 174.967}, {"Hf", i18n("Hafnium"), 72, 178.49}, {"Ta", i18n("Tantalum"), 73, 180.948}, {"W", i18n("Tungsten"), 74, 183.84}, {"Re", i18n("Rhenium"), 75, 186.207}, {"Os", i18n("Osmium"), 76, 190.23}, {"Ir", i18n("Iridium"), 77, 192.217}, {"Pt", i18n("Platinum"), 78, 195.084}, {"Au", i18n("Gold"), 79, 196.967}, {"Hg", i18n("Mercury"), 80, 200.592}, {"Tl", i18n("Thallium"), 81, 204.38}, {"Pb", i18n("Lead"), 82, 207.2}, {"Bi", i18n("Bismuth"), 83, 208.98}, {"Po", i18n("Polonium"), 84, 209}, {"At", i18n("Astatine"), 85, 210}, {"Rn", i18n("Radon"), 86, 222}, {"Fr", i18n("Francium"), 87, 223}, {"Ra", i18n("Radium"), 88, 226}, {"Ac", i18n("Actinium"), 89, 227}, {"Th", i18n("Thorium"), 90, 232.038}, {"Pa", i18n("Protactinium"), 91, 231.036}, {"U", i18n("Uranium"), 92, 238.029}, {"Np", i18n("Neptunium"), 93, 237}, {"Pu", i18n("Plutonium"), 94, 244}, {"Am", i18n("Americium"), 95, 243}, {"Cm", i18n("Curium"), 96, 247}, {"Bk", i18n("Berkelium"), 97, 247}, {"Cf", i18n("Californium"), 98, 251}, {"Es", i18n("Einsteinium"), 99, 252}, {"Fm", i18n("Fermium"), 100, 257}, {"Md", i18n("Mendelevium"), 101, 258}, {"No", i18n("Nobelium"), 102, 258}, {"Lr", i18n("Lawrencium"), 103, 262}, {"Rf", i18n("Rutherfordium"), 104, 267}, {"Db", i18n("Dubnium"), 105, 268}, {"Sg", i18n("Seaborgium"), 106, 269}, {"Bh", i18n("Bohrium"), 107, 270}, {"Hs", i18n("Hassium"), 108, 277}, {"Mt", i18n("Meitnerium"), 109, 278}, {"Ds", i18n("Darmstadtium"), 110, 281}, {"Rg", i18n("Roentgenium"), 111, 282}, {"Cn", i18n("Copernicium"), 112, 285}, {"Nh", i18n("Nihonium"), 113, 286}, {"Fl", i18n("Flerovium"), 114, 289}, {"Mc", i18n("Moscovium"), 115, 289}, {"Lv", i18n("Livermorium"), 116, 293}, {"Ts", i18n("Tennessine"), 117, 294}, {"Og", i18n("Oganesson"), 118, 294}, {"D", i18n("Deuterium"), 1, 2.014000}}; insertion_menu mol[] = { { i18n("Atom"), NULL, -1, 0 }, { NULL, "H", 1, 1 }, { NULL, "B", 5, 1 }, { NULL, "C", 6, 1 }, { NULL, "N", 7, 1 }, { NULL, "O", 8, 1 }, { NULL, "F", 9, 1 }, { NULL, "S", 16, 1 }, { NULL, "Cl", 17, 1 }, { NULL, i18n("Other ..."), -1, 1 }, { i18n("Library"), NULL, -1, 0 }, { NULL, "H2O", -1, 3 }, { NULL, "CH4", -1, 5 }, { NULL, i18n("Toluene"), -1, 15 }, { NULL, "Cp", -1, 10 }, { NULL, "C60", -1, 60}, { NULL, i18n("Ni-Phthalocyanine"), -1, 57 }, { NULL, i18n("More ..."), -1, -1 }, { NULL, NULL, -1, 0 }}; #define FAMILY 26 gchar * family_list[FAMILY]={i18n("Misc"), i18n("Alcohols"), i18n("Aldehydes"), i18n("Alkanes"), i18n("Alkenes"), i18n("Alkynes"), i18n("Amides"), i18n("Amines"), i18n("Amino acids"), i18n("Aromatics"), i18n("Carboxylic acids"), i18n("Cyclic alkanes"), i18n("Cyclic alkenes"), i18n("Ethers"), i18n("Fatty acids"), i18n("Fullerenes"), i18n("Heterocyclics"), i18n("Macrocycles"), i18n("Ketones"), i18n("Nitriles"), i18n("Nucleobases"), i18n("Steroids"), i18n("Sugars (Linears)"), i18n("Sugars (Cyclics)"), i18n("Sulfoxides"), i18n("Thiols")}; gchar * family_dir[FAMILY]={"Misc", "Alcohols", "Aldehydes", "Alkanes", "Alkenes", "Alkynes", "Amides", "Amines", "Amino_acids", "Aromatics", "Carboxylic_acids", "Cyclic_alkanes", "Cyclic_alkenes", "Ethers", "Fatty_acids", "Fullerenes", "Heterocyclics", "Macrocycles", "Ketones", "Nitriles", "Nucleobases", "Steroids", "Linear_sugars", "Cyclic_sugars", "Sulfoxides", "Thiols"}; #ifdef GTK3 #ifndef G_OS_WIN32 extern void gtk_window_change_gdk_visual (GtkWidget * win); #endif // G_OS_WIN32 #endif // GTK3 extern gboolean create_3d_model (int p, gboolean load); extern G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern void create_object_from_library (int p); extern atom_search * remove_search; GtkListStore * family_store; GtkTreeIter first_family_iter; GtkListStore * molecule_store; GtkTreeIter first_mol_iter; GtkTreeSelection * libselect[2]; int the_family; gchar * the_molecule; gchar ** sml_file_name; gchar ** mol_name; GtkWidget * lib_preview_box = NULL; GtkWidget * lib_preview_plot = NULL; project * lib_proj = NULL; gchar * other_name[5]; int o_names; int inserted_from_lib; /*! \fn double get_z_from_periodic_table (gchar * lab) \brief get Z from atom label \param lab the atomic label */ double get_z_from_periodic_table (gchar * lab) { int i; for (i=0; i<120; i++) { if (g_strcmp0 (periodic_table_info[i].lab, lab) == 0) return periodic_table_info[i].Z; } return 0.0; } /*! \fn int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief free XML data \param doc the XML doc pointer to free \param reader the XML reader to free */ int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 0; } /*! \fn gchar * replace_markup (char * init, char * key, char * rep) \brief replace pattern in string \param init the string \param key the pattern to replace \param rep the new pattern */ gchar * replace_markup (char * init, char * key, char * rep) { gchar * buffer = NULL; char * p = NULL; int inilen = strlen(init); int oldlen = strlen(key); int newlen = (rep) ? strlen(rep) : 0; // Is key in init p = strstr(init, key); if (! p) return g_strdup(init); buffer = g_malloc0 ((inilen+newlen-oldlen+1)*sizeof*buffer); buffer[0] = '\0'; // Copy what is before the pattern strncat(buffer, init, p - init); // Replace if (rep) strcat(buffer, rep); // Add the rest of the key strcat(buffer, p+oldlen); return buffer; } /*! \fn gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) \brief substitute all patterns in string \param init the initial string \param o_motif the pattern to replace \param n_motif the new pattern */ gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) { gchar * str_a, * str_b; str_a = replace_markup (init, o_motif, n_motif); str_b = g_strdup_printf ("%s", init); while (g_strcmp0 (str_a, str_b)) { g_free (str_b); str_b = g_strdup_printf ("%s", str_a); g_free (str_a); str_a = replace_markup (str_b, o_motif, n_motif); } g_free (str_b); return str_a; } /*! \fn gchar * check_xml_string (gchar * init) \brief check for, and correct tags in XML string \param init the XML string to check / correct */ gchar * check_xml_string (gchar * init) { gchar * str = g_strdup_printf ("%s", substitute_string (init, "--i--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--I--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--b--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--e--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--c--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--f--", "")); return str; } /*! \fn int sml_preview (const char * filetoread) \brief retrieve preview information from 'Simple chemical library XML' file \param filetoread the name of the file to read */ int sml_preview (const char * filetoread) { int i, j, k; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, name_node, chem_node; xmlNodePtr n_node, at_node, sp_node, coord_node; xmlNodePtr spec_node, lab_node, lot_node, pbc_node; xmlAttrPtr xspec; xmlChar * content; if (lib_proj != NULL) close_project (lib_proj); init_project (TRUE); lib_proj = active_project; reader = xmlReaderForFile(filetoread, NULL, 0); doc = xmlParseFile(filetoread); racine = xmlDocGetRootElement(doc); name_node = findnode (racine -> children, "names"); if (name_node == NULL) return clean_xml_data (doc, reader); n_node = findnode (name_node -> children, "library-name"); if (n_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(n_node); lib_proj -> name = g_strdup_printf ("%s", content); xmlFree (content); lib_proj -> name = check_xml_string (lib_proj -> name); n_node = findnode (name_node -> children, "iupac-name"); if (n_node == NULL) return clean_xml_data (doc, reader); o_names = 0; content = xmlNodeGetContent(n_node); other_name[0] = g_strdup_printf ("%s", content); xmlFree (content); o_names ++; n_node = findnode (name_node -> children, "other-names"); if (n_node == NULL) return clean_xml_data (doc, reader); n_node = n_node -> children; for (name_node = n_node; name_node && o_names < 5; name_node = name_node->next) { if (name_node -> type == XML_ELEMENT_NODE) { content = xmlNodeGetContent(name_node); other_name[o_names] = g_strdup_printf ("%s", content); xmlFree (content); o_names ++; } } chem_node = findnode(racine -> children, "chemistry"); if (chem_node == NULL) return clean_xml_data (doc, reader); at_node = findnode (chem_node -> children, "atoms"); if (at_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(at_node); lib_proj -> natomes = (int)string_to_double ((gpointer)content); xmlFree (content); sp_node = findnode (chem_node -> children, "species"); if (sp_node == NULL) return clean_xml_data (doc, reader); spec_node = sp_node -> properties -> children; if (spec_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(spec_node); lib_proj -> nspec = (int)string_to_double ((gpointer)content); xmlFree (content); if (lib_proj -> natomes < 1 || lib_proj -> nspec < 1) return clean_xml_data (doc, reader); alloc_proj_data (lib_proj, 1); lab_node = sp_node -> children; if (lab_node == NULL) return clean_xml_data (doc, reader); j = 0; for (i=0; i nspec; i++) { lab_node = findnode (lab_node, "label"); if (lab_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(lab_node); lib_proj -> chemistry -> label[i] = g_strdup_printf ("%s", content); xmlFree (content); xspec = lab_node -> properties; if (xspec == NULL) return clean_xml_data (doc, reader); while (xspec) { lot_node = xspec -> children; if (lot_node == NULL) return clean_xml_data (doc, reader); if (g_strcmp0 ("num",(char *)xspec -> name) == 0) { content = xmlNodeGetContent(lot_node); lib_proj -> chemistry -> nsps[i] = (int)string_to_double ((gpointer)content); xmlFree (content); lib_proj -> chemistry -> chem_prop[CHEM_Z][i] = get_z_from_periodic_table (lib_proj -> chemistry -> label[i]); k = (int)lib_proj -> chemistry -> chem_prop[CHEM_Z][i]; lib_proj -> chemistry -> chem_prop[CHEM_M][i] = periodic_table_info[k].M; lib_proj -> chemistry -> chem_prop[CHEM_R][i] = set_radius_ (& k, & j); } xspec = xspec -> next; } lab_node = lab_node -> next; } active_chem = lib_proj -> chemistry; initcutoffs (active_chem, lib_proj -> nspec); at_node = findnode (racine -> children, "coordinates"); if (at_node == NULL) return clean_xml_data (doc, reader); coord_node = at_node -> children; if (coord_node == NULL) return clean_xml_data (doc, reader); for (i=0; i natomes; i++) { coord_node = findnode (coord_node, "atom"); if (coord_node == NULL) return clean_xml_data (doc, reader); xspec = coord_node -> properties; if (xspec == NULL) return clean_xml_data (doc, reader); while (xspec) { lot_node = xspec -> children; if (lot_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(lot_node); if (g_strcmp0 ("x",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].x = string_to_double ((gpointer)content); } else if (g_strcmp0 ("y",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].y = string_to_double ((gpointer)content); } else if (g_strcmp0 ("z",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].z = string_to_double ((gpointer)content); } else if (g_strcmp0 ("sp",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].sp = (int)string_to_double ((gpointer)content); lib_proj -> atoms[0][i].show[0] = TRUE; } xmlFree (content); xspec = xspec -> next; } coord_node = coord_node -> next; } pbc_node = findnode (racine -> children, "lattice"); if (pbc_node != NULL) { } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 1; } /*! \fn gchar * open_sml_file (const char * filetoread, int fam) \brief open 'Simple chemical library XML' file \param filetoread the name of the file to open \param fam the molecular family */ gchar * open_sml_file (const char * filetoread, int fam) { xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar sml[8]="scl-xml"; xmlChar * cdata; xmlNodePtr racine, node; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return NULL; racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine -> name), (char *)sml) != 0) { clean_xml_data (doc, reader); return NULL; } node = racine -> children; node = findnode(node, "class"); cdata = xmlNodeGetContent(node); if (g_strcmp0 ((gchar *)cdata, family_list[fam]) != 0) { xmlFree (cdata); clean_xml_data (doc, reader); return NULL; } xmlFree (cdata); node = findnode (racine -> children, "names"); if (node == NULL) { clean_xml_data (doc, reader); return NULL; } node = findnode (node -> children, "library-name"); if (node == NULL) { clean_xml_data (doc, reader); return NULL; } cdata = xmlNodeGetContent(node); xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return (gchar *)cdata; } } /*! \fn int get_family (gchar * str) \brief get molecular family id \param str the moecular family */ int get_family (gchar * str) { int i; for (i=0; i0) { str = g_strdup_printf ("%s", mol_name[i]); mol_name[i] = g_strdup_printf ("%s", mol_name[j]); mol_name[j] = g_strdup_printf ("%s", str); str = g_strdup_printf ("%s", sml_file_name[i]); sml_file_name[i] = g_strdup_printf ("%s", sml_file_name[j]); sml_file_name[j] = g_strdup_printf ("%s", str); } } } for(i=0;i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); if (open_sml_file(str, the_family) != NULL) val ++; g_free (str); } } closedir(d); } #endif if (val > 0) { sml_file_name = g_malloc0(val*sizeof*sml_file_name); mol_name = g_malloc0(val*sizeof*mol_name); val = 0; #ifdef G_OS_WIN32 hFind = FindFirstFile (libwin32, & ffd); if (hFind != INVALID_HANDLE_VALUE) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } } FindClose(hFind); } #else d = opendir (libdir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } } closedir(d); } #endif sort_files (val); } return val; } /*! \fn void fill_molecule_tree (GtkListStore * store) \brief fill molecule list store \param store the list store to fill */ void fill_molecule_tree (GtkListStore * store) { GtkTreeIter mol_level; int i; for (i=0; i modelgl -> plot, 0, 0, 4, 4); gtk_grid_attach (GTK_GRID (grid), markup_label(_("Formula:"), 100, -1, 0.0, 0.5), 5, 1, 3, 1); int i; for (i=0; i nspec; i++) { if (i > 0) { str = g_strdup_printf ("%s %s", str, lib_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s", lib_proj -> chemistry -> label[i]); } if (lib_proj -> chemistry -> nsps[i] > 1) { str = g_strdup_printf ("%s%d", str, lib_proj -> chemistry -> nsps[i]); } str = g_strdup_printf ("%s", str); } gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 1, 3, 1); gtk_grid_attach (GTK_GRID (grid),markup_label(_("Molecular mass:"), 100, -1, 0.0, 0.5), 5, 2, 3, 1); g_free (str); double mass = 0.0; for (i=0; i nspec; i++) { mass += (lib_proj -> chemistry -> nsps[i]*lib_proj -> chemistry -> chem_prop[CHEM_M][i]); } str = g_strdup_printf ("%.3f g/mol", mass); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 2, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid), markup_label(_("IUPAC name:"), 100, -1, 0.0, 0.5), 0, 5, 3, 1); str = g_strdup_printf ("%s", check_xml_string(other_name[0])); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, 30, 0.0, 0.5), 3, 5, 11, 1); if (o_names > 1) { GtkWidget * hbox = create_hbox (0); gtk_fixed_put (GTK_FIXED(lib_preview_plot), hbox, 0, 230); GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Other name(s):"), 100, 30, 0.0, 0.5), FALSE, FALSE, 0); for (i=1; i 1) { str = g_strdup_printf ("%s\n%s", str, check_xml_string(other_name[i])); } else { str = g_strdup_printf ("%s", check_xml_string(other_name[i])); } } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, 100, 30+20*(o_names-2), 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } show_the_widgets (lib_preview_box); } /*! \fn void prepare_preview (int active, int id, gboolean visible) \brief prepare library molecule preview \param active active project id \param id molecule id number \param visible is the 'model edition' window visible */ void prepare_preview (int active, int id, gboolean visible) { if (sml_file_name != NULL) { if (sml_preview (sml_file_name[id])) { lib_preview_plot = destroy_this_widget (lib_preview_plot); lib_proj -> run = TRUE; active_project_changed (lib_proj -> id); create_3d_model (lib_proj -> id, FALSE); if (visible) { insert_preview (); } else { on_realize (NULL, lib_proj -> modelgl); } bonds_update = 0; active_glwin = lib_proj -> modelgl; active_glwin -> init = FALSE; active_image = active_glwin -> anim -> last -> img; lib_proj -> runc[0] = TRUE; init_atomes_analysis (lib_proj, TRUE); on_calc_bonds_released (NULL, NULL); lib_proj -> modelgl -> anim -> last -> img -> quality = 30; lib_proj -> modelgl -> anim -> last -> img -> rep = ORTHOGRAPHIC; lib_proj -> modelgl -> anim -> last -> img -> xyz -> axis = NONE; lib_proj -> modelgl -> anim -> last -> img -> abc -> box = NONE; if (visible) { gtk_widget_set_size_request (lib_proj -> modelgl -> plot, 150, 150); update (lib_proj -> modelgl); } active_project_changed (active); } } } /*! \fn G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) \brief select library element callback \param tree_view the GtkTreeView sending the signal \param path the path in the tree view \param column the column in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) { GtkTreeIter row; GtkTreeModel * model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter (model, & row, path)) { GValue val = {0, }; GValue vbl = {0, }; gtk_tree_model_get_value (model, & row, 0, & val); gtk_tree_model_get_value (model, & row, 1, & vbl); int i = (int)g_value_get_int (& val); if (i > -1) { the_family = i; gtk_list_store_clear (molecule_store); fill_molecule_tree (molecule_store); gtk_tree_selection_select_iter (libselect[1], & first_mol_iter); prepare_preview (activep, 0, TRUE); } else { the_molecule = g_strdup_printf ("%s", (char *)g_value_get_string (& vbl)); prepare_preview (activep, -i-1, TRUE); } } } /*! \fn G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set font markup in the molecular library tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { set_renderer_markup (mod, iter, renderer, 1); } /*! \fn GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) \brief create library tree store widget \param store the list store model to use \param id selection id (0 = family, 1 = molecule) \param name column label */ GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) { GtkWidget * scrol = create_scroll (NULL, 150, 300, GTK_SHADOW_ETCHED_IN); GtkTreeViewColumn * datacol; GtkCellRenderer * datacel; GtkWidget * dataview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store)); datacel = gtk_cell_renderer_text_new (); datacol = gtk_tree_view_column_new_with_attributes (name, datacel, "text", 1, NULL); gtk_tree_view_column_set_cell_data_func (datacol, datacel, set_library_markup, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(dataview), datacol); gtk_tree_view_column_set_alignment (datacol, 0.5); gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(dataview), TRUE); g_signal_connect (G_OBJECT(dataview), "row-activated", G_CALLBACK(select_library_data), NULL); g_object_unref (store); libselect[id] = gtk_tree_view_get_selection (GTK_TREE_VIEW(dataview)); gtk_tree_selection_set_mode (libselect[id], GTK_SELECTION_SINGLE); add_container_child (CONTAINER_SCR, scrol, dataview); return scrol; } gboolean lib_res; gboolean lib_visible; /*! \fn G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) \brief select from library - running the dialog \param lib the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) { gboolean done = FALSE; atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id (asearch -> proj); GtkWidget * vbox; switch (response_id) { case GTK_RESPONSE_APPLY: vbox = dialog_get_content_area ((GtkWidget *)lib); widget_set_sensitive (vbox, FALSE); if (this_proj -> modelgl) this_proj -> modelgl -> other_status = 2; create_object_from_library (lib_proj -> id); active_project_changed (activep); if (asearch -> action == INSERT) { to_insert_in_project (FROM_LIBRARY, -1, this_proj, asearch, lib_visible); if (! lib_visible) { gboolean vis; if (this_proj -> modelgl) { vis = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; } else { vis = FALSE; } inserted_from_lib += action_atoms_from_project (this_proj, asearch, vis); } if (this_proj -> modelgl) this_proj -> modelgl -> nth_copy ++; } lib_res = FROM_LIBRARY; widget_set_sensitive (vbox, TRUE); if (asearch -> action == REPLACE) done = TRUE; break; default: if (this_proj -> modelgl) { if (this_proj -> modelgl -> mode == EDITION) asearch -> todo[0] = 0; } lib_res = 0; done = TRUE; break; } if (done) destroy_this_dialog (lib); } /*! \fn int select_from_library (gboolean visible, project * this_proj, atom_search * asearch) \brief select object to insert from the library \param visible is the 'model edition' window visible \param this_proj the target project \param asearch the target atom search */ int select_from_library (gboolean visible, project * this_proj, atom_search * asearch) { int active = activep; int nats = this_proj -> natomes; lib_visible = visible; GtkWidget * lib = dialogmodal (_("Library"), GTK_WINDOW((this_proj -> modelgl) ? this_proj -> modelgl -> win : MainWindow)); #ifdef GTK3 #ifdef GTKGLAREA #ifndef OSX #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (lib); #endif // G_OS_WIN32 #endif // OSX #endif // GTKGLAREA #endif // GTK3 gtk_dialog_add_button (GTK_DIALOG(lib), (asearch -> action == REPLACE) ? _("Replace") : _("Insert"), GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (lib); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); sml_file_name = mol_name = NULL; family_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); fill_family_tree (family_store); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, library_tree (family_store, 0, _("Family")), FALSE, FALSE, 0); molecule_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, library_tree (molecule_store, 1, _("Molecule")), FALSE, FALSE, 0); lib_preview_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lib_preview_box, FALSE, FALSE, 10); lib_preview_plot = NULL; the_family = 0; gtk_tree_selection_select_iter (libselect[0], & first_family_iter); gtk_list_store_clear (molecule_store); fill_molecule_tree (molecule_store); gtk_tree_selection_select_iter (libselect[1], & first_mol_iter); show_the_widgets (lib); prepare_preview (active, 0, TRUE); if (this_proj -> modelgl) this_proj -> modelgl -> nth_copy = 0; inserted_from_lib = 0; run_this_gtk_dialog (lib, G_CALLBACK(run_select_from_library), asearch); active_project_changed (active); if (! nats && active_project -> natomes) { int i; if (active_image -> style == SPACEFILL) { i = OGL_STYLES + active_image -> filled_type; set_this_style (active_glwin, WIREFRAME); } else { i = active_image -> style; set_this_style (active_glwin, OGL_STYLES); } set_this_style (active_glwin, i); } if (sml_file_name != NULL) g_free (sml_file_name); if (mol_name != NULL) g_free (mol_name); if (lib_proj != NULL) close_project (lib_proj); lib_proj = NULL; lib_preview_plot = NULL; return lib_res; } /*! \fn int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch) \brief insert object from the library \param id object id to insert \param visible is the 'model edition window' visible \param this_proj the target project \param asearch the target atom search */ int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch) { sml_file_name = mol_name = NULL; int family[6] = {0, 3, 9, 9, 15, 17}; int molec[6] = {0, 8, 36, 21, 11, 0}; int active = activep; int nats = this_proj -> natomes; the_family = family[id]; if (get_sml_files ()) { prepare_preview (active, molec[id], FALSE); if (this_proj -> modelgl) this_proj -> modelgl -> other_status = 2; create_object_from_library (lib_proj -> id); if (asearch -> action == INSERT) { to_insert_in_project (FROM_LIBRARY, -1, this_proj, asearch, visible); } } active_project_changed (active); if (! nats && active_project -> natomes) { int i; if (active_image -> style == SPACEFILL) { i = OGL_STYLES + active_image -> filled_type; set_this_style (active_glwin, WIREFRAME); } else { i = active_image -> style; set_this_style (active_glwin, OGL_STYLES); } set_this_style (active_glwin, i); } if (sml_file_name != NULL) g_free (sml_file_name); if (mol_name != NULL) g_free (mol_name); if (lib_proj != NULL) close_project (lib_proj); lib_proj = NULL; return FROM_LIBRARY; } atomes_1.3.1/src/opengl/win/m_box.c0000664000175000017500000005327015212624223016634 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_box.c * @short Functions to create the 'Model -> Box' submenu * @author Sébastien Le Roux */ /* * This file: 'm_box.c' * * Contains: * - The functions to create the 'Model -> Box' submenu * * List of functions: void update_show_hide_box_axis (glwin * view, int box_or_axis, int status); G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data); GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va); GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data); GtkWidget * menu_box_axis (glwin * view, int id, int ab); GMenuItem * menu_box_axis (glwin * view, int popm, int ab); GMenu * axis_box_style (glwin * view, int popm, int ab, int abs); GMenu * axis_box_param (glwin * view, int popm, int ab, int style); GMenuItem * menu_box_axis (glwin * view, int popm, int ab); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" #include "submenus.h" G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); #endif extern gboolean from_box_or_axis; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open box configuration window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { box_advanced (NULL, data); } #endif /*! \fn void update_show_hide_box_axis (glwin * view, int box_or_axis, int status) \brief update edition buttons with menu show / hide status */ void update_show_hide_box_axis (glwin * view, int box_or_axis, int status) { switch (box_or_axis) { case 0: if (view -> box_win) { if (view -> box_win -> show_hide && GTK_IS_WIDGET(view -> box_win -> show_hide)) { button_set_status (view -> box_win -> show_hide, ! status); } } break; case 1: if (view -> axis_win) { if (view -> axis_win -> show_hide && GTK_IS_WIDGET(view -> axis_win -> show_hide)) { button_set_status (view -> axis_win -> show_hide, ! status); } } break; } } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) \brief set box/axis style \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; int i, j, k, l, m, n; j = the_data -> b; n = the_data -> c; glwin * view = get_project_by_id(the_data -> a) -> modelgl; k = (n) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; int dim[2]={OGL_BOX, OGL_AXIS}; l = (k == NONE) ? 2 : (j == WIREFRAME) ? 2 : 1; m = (k == NONE) ? 0 : (j == WIREFRAME) ? 1 : 2; if (k != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { if (n) { view -> anim -> last -> img -> xyz -> axis = NONE - 1; } else { view -> anim -> last -> img -> abc -> box = NONE - 1; } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][l], FALSE); show_the_widgets (view -> ogl_box_axis[n][3+2*(m-1)]); hide_the_widgets (view -> ogl_box_axis[n][3+2*(l-1)]); if (widg != view -> ogl_box_axis[n][(k == NONE) ? 1 : m]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][(k == NONE) ? 1 : m], TRUE); } for (i=1; i ogl_box_axis[n][i], 1); if (n) { view -> anim -> last -> img -> xyz -> axis = (k == NONE) ? WIREFRAME : j; } else { view -> anim -> last -> img -> abc -> box = (k == NONE) ? WIREFRAME : j; } } else if (k == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][(k == NONE) ? 1 : m], TRUE); } else if (j == 0) { for (i=1; i<3; i++) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][i], FALSE); widget_set_sensitive (view -> ogl_box_axis[n][i], 0); widget_set_sensitive (view -> ogl_box_axis[n][i], 0); } widget_set_sensitive (view -> ogl_box_axis[n][4], 0); for (i=6; i ogl_box_axis[n][i], 0); } if (widg != view -> ogl_box_axis[n][0]) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][0], FALSE); if (n) { view -> anim -> last -> img -> xyz -> axis = NONE; } else { view -> anim -> last -> img -> abc -> box = NONE; } } if (n) { i = (view -> anim -> last -> img -> xyz -> axis == NONE) ? NONE : (view -> anim -> last -> img -> xyz -> axis == WIREFRAME) ? 0 : 1; } else { i = (view -> anim -> last -> img -> abc -> box == NONE) ? NONE : (view -> anim -> last -> img -> abc -> box == WIREFRAME) ? 0 : 1; } switch (n) { case 0: if (view -> box_win) { if (view -> box_win -> styles && GTK_IS_WIDGET(view -> box_win -> styles)) { combo_set_active (view -> box_win -> styles, i); } } break; case 1: if (view -> axis_win) { if (view -> axis_win -> styles && GTK_IS_WIDGET(view -> axis_win -> styles)) { combo_set_active (view -> axis_win -> styles, i); } } break; } if (! from_box_or_axis) update_show_hide_box_axis (view, n, (i == NONE) ? 1 : 0); view -> create_shaders[n+MDBOX] = TRUE; update (view); } /*! \fn GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) \brief create a menu item for box/axis style \param name the new menu item label \param val box/axis active style \param box menu item style type \param menu the GtkMenu to attach the new item to \param data the pointer associated with the callback */ GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) { GtkWidget * box_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_box_axis_style), data, FALSE, 0, 0, TRUE, (data -> b != 0) ? TRUE : FALSE, (box == val && val != NONE) ? TRUE : FALSE); if (data -> b != 0) { if (val == NONE) { widget_set_sensitive (box_widget, 0); } } return box_widget; } /*! \fn GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) \brief create box color selection menu item \param widg the GtkMenuItem to attach the color palette to \param view the target glwin \param va box style */ GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) { GtkWidget * color_widget = color_box(view, -1, 0, 0); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, color_widget); if (va == NONE) { widget_set_sensitive (color_widget, 0); } return color_widget; } /*! \fn GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) \brief create box/axis style menu widget \param str menu item label \param menu the GtkMenu to attach the new item to \param vab box/axis style \param data the associated data pointer */ GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) { GtkWidget * layout = create_menu_item (TRUE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_bonds), data); if (vab == NONE) widget_set_sensitive (layout, 0); return layout; } /*! \fn GtkWidget * menu_box_axis (glwin * view, int id, int ab) \brief create the 'Model -> Box' and 'View -> Axis' submenus GTK3 \param view the target glwin \param id main app (0) or popup (1) \param ab box (0) or axis (1) */ GtkWidget * menu_box_axis (glwin * view, int id, int ab) { GtkWidget * widg; gchar * menu_title[2]={i18n("Box"), i18n("Axis")}; GtkWidget * ab_menu; GtkWidget * menu_ab = gtk_menu_new (); if (id == 0 && ab == 0) { view -> ogl_box[0] = create_menu_item (TRUE, _(menu_title[ab])); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box[0], menu_ab); widget_set_sensitive (view -> ogl_box[0], get_project_by_id(view -> proj) -> cell.ltype); } else { ab_menu = create_menu_item (TRUE, _(menu_title[ab])); gtk_menu_item_set_submenu ((GtkMenuItem *)ab_menu, menu_ab); if (ab == 0) widget_set_sensitive (ab_menu, get_project_by_id(view -> proj) -> cell.ltype); } GtkWidget * menul; int i = (ab) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; if (id == 0) { view -> ogl_box_axis[ab][0] = create_box_axis_menu (_("Show/Hide"), i, i, menu_ab, & view -> colorp[0][ab]); } else { widg = create_box_axis_menu (_("Show/Hide"), i, i, menu_ab, & view -> colorp[0][ab]); } widg = create_menu_item (FALSE, _("Style")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); GtkWidget * menus = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menus); gchar * str; str = g_strdup_printf (_("Width [ %f pts ]"), (ab) ? view -> anim -> last -> img -> xyz -> line : view -> anim -> last -> img -> abc -> line); int box_axis = (ab) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; if (id == 0) { view -> ogl_box_axis[ab][1] = create_box_axis_menu (_(text_styles[1]), i, 1, menus, & view -> colorp[1][ab]); view -> ogl_box_axis[ab][2] = create_box_axis_menu (_(text_styles[4]), i, 4, menus, & view -> colorp[4][ab]); view -> ogl_box_axis[ab][3] = create_menu_item (TRUE, _("Lines")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, view -> ogl_box_axis[ab][3]); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box_axis[ab][3], menul); view -> ogl_box_axis[ab][4] = create_layout_widget (str, menul, box_axis, & view -> colorp[WIREFRAME][ab]); } else { create_box_axis_menu (_(text_styles[1]), i, 1, menus, & view -> colorp[1][ab]); create_box_axis_menu (_(text_styles[4]), i, 4, menus, & view -> colorp[4][ab]); if (i == WIREFRAME) { widg = create_menu_item (FALSE, _("Lines")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); widg = create_layout_widget (str, menul, box_axis, & view -> colorp[WIREFRAME][ab]); } } g_free (str); str = g_strdup_printf (_("Radius [ %f Ã… ]"), (ab) ? view -> anim -> last -> img -> xyz -> rad : view -> anim -> last -> img -> abc -> rad); if (id == 0) { view -> ogl_box_axis[ab][5] = create_menu_item (FALSE, _("Cylinders")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, view -> ogl_box_axis[ab][5]); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box_axis[ab][5], menul); view -> ogl_box_axis[ab][6] = create_layout_widget (str, menul, box_axis, & view -> colorp[CYLINDERS][ab]); } else if (i == CYLINDERS) { widg = create_menu_item (FALSE, _("Cylinders")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); widg = create_layout_widget (str, menul, box_axis, & view -> colorp[CYLINDERS][ab]); } g_free (str); if (ab == 0) { widg = create_menu_item (FALSE, _("Color")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); if (id == 0) { view -> ogl_box_axis[ab][7] = create_color_widget (widg, view, i); } else { widg = create_color_widget (widg, view, i); } add_advanced_item (menu_ab, G_CALLBACK(box_advanced), (gpointer)view, FALSE, 0, 0); } else { menu_axis (menu_ab, view, id); } if (id == 0 && ab == 0) { return view -> ogl_box[0]; } else { return ab_menu; } } #else /*! \fn G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the 'box/axis' show/hide signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *)data; glwin * view = get_project_by_id(the_data -> a) -> modelgl; const gchar * name = g_action_get_name ((GAction *)action); int lgt = strlen (name); gchar * str = g_strdup_printf ("%c%c", name[lgt-2], name[lgt-1]); if (g_strcmp0(str, ".1") == 0) { g_free (str); str = g_strdup_printf ("%.*s.0.0", lgt-4, name); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)str, NULL); g_free (str); } else { GVariant * state; gboolean show; state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); if (show) { switch (the_data -> c) { case 0: view -> anim -> last -> img -> abc -> box = WIREFRAME; break; case 1: view -> anim -> last -> img -> xyz -> axis = WIREFRAME; break; } } else { switch (the_data -> c) { case 0: view -> anim -> last -> img -> abc -> box = NONE; break; case 1: view -> anim -> last -> img -> xyz -> axis = NONE; break; } } view -> create_shaders[the_data -> c+MDBOX] = TRUE; update_menu_bar (view); update (view); g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); update_show_hide_box_axis (view, the_data -> c, ! show); } } /*! \fn G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle a box/axis radio menu item signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *)data; int i, j; i = the_data -> c; glwin * view = get_project_by_id (the_data -> a) -> modelgl; const gchar * style = g_variant_get_string (parameter, NULL); int lgt = strlen (style); gchar * name = g_strdup_printf ("%c%c", style[lgt-2], style[lgt-1]); if (g_strcmp0(name, ".1") == 0) { name = g_strdup_printf ("%.*s.0", lgt-2, style); gchar * str = g_strdup_printf ("set-%s-style", (i) ? "axis" : "box"); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)str, g_variant_new_string((const gchar *)name)); g_free (str); g_free (name); } else { gchar * style_name = NULL; gchar * str = g_strdup_printf ("set-%s-style", (i) ? "axis" : "box"); for (j=0; j<2; j++) { style_name = g_strdup_printf ("%s.%d.0", str, j); if (g_strcmp0(style, (const gchar *)style_name) == 0) { if (i) { view -> anim -> last -> img -> xyz -> axis = (j == 0) ? WIREFRAME : CYLINDERS; } else { view -> anim -> last -> img -> abc -> box = (j == 0) ? WIREFRAME : CYLINDERS; } view -> create_shaders[i+MDBOX] = TRUE; update (view); update_menu_bar (view); g_free (style_name); style_name = NULL; break; } g_free (style_name); style_name = NULL; } g_free (str); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) \brief create the box/axis '-> Style' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) \param abs the active box/axis style */ GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("%s-style", (ab) ? "axis" : "box"); append_opengl_item (view, menu, _(text_styles[1]), str, popm, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_box_axis_radio), & view -> colorp[1][ab], FALSE, (abs == WIREFRAME) ? TRUE : FALSE, TRUE, (abs != NONE) ? TRUE : FALSE); g_free (str); str = g_strdup_printf (_("%s-style"), (ab) ? "axis" : "box"); append_opengl_item (view, menu, _(text_styles[4]), str, popm, 1, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_box_axis_radio), & view -> colorp[4][ab], FALSE, (abs == CYLINDERS) ? TRUE : FALSE, TRUE, (abs != NONE) ? TRUE : FALSE); g_free (str); return menu; } /*! \fn GMenu * axis_box_param (glwin * view, int popm, int ab, int style) \brief create the box/axis '-> Length/Width/Radius' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) \param style the active box/axis style */ GMenu * axis_box_param (glwin * view, int popm, int ab, int style) { gchar * str, * key; if (style == WIREFRAME) { str = g_strdup_printf (_("Width [ %f pts ]"), (ab) ? view -> anim -> last -> img -> xyz -> line : view -> anim -> last -> img -> abc -> line); key = g_strdup_printf ("%s-width", (ab) ? "axis" : "box"); } else if (style == CYLINDERS) { str = g_strdup_printf (_("Radius [ %f Ã… ]"), (ab) ? view -> anim -> last -> img -> xyz -> rad : view -> anim -> last -> img -> abc -> rad); key = g_strdup_printf ("%s-radius", (ab) ? "axis" : "box"); } else { str = g_strdup_printf (_(" length [ %f Ã… ]"), view -> anim -> last -> img -> xyz -> length); key = g_strdup_printf ("axis-legnth"); } GMenu * menu = g_menu_new (); append_opengl_item (view, menu, str, key, popm, ab, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(window_bonds), & view -> colorp[style][ab], FALSE, FALSE, FALSE, TRUE); g_free (str); g_free (key); return menu; } /*! \fn GMenuItem * menu_box_axis (glwin * view, int popm, int ab) \brief create the 'Model -> Box' and 'View -> Axis' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) */ GMenuItem * menu_box_axis (glwin * view, int popm, int ab) { GMenuItem * ab_item = g_menu_item_new ((ab) ? _("Axis") : _("Box"), (ab) ? NULL : (get_project_by_id(view -> proj) -> cell.ltype) ? NULL : "None"); int i = (ab) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Show/Hide", (ab) ? "show-axis" : "show-box", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_box_axis), & view -> colorp[0][ab], TRUE, (i != NONE) ? TRUE : FALSE, FALSE, (ab) ? TRUE : get_project_by_id(view -> proj) -> cell.ltype); append_submenu (menu, _("Style"), axis_box_style (view, popm, ab, i)); GMenuItem * item ; if (i == WIREFRAME) { item = g_menu_item_new (_("Lines"), NULL); g_menu_item_set_attribute (item, "custom", "s", (ab) ? "axis-lines" : "box-lines", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, ab, WIREFRAME)); g_menu_append_item (menu, item); } if (i == CYLINDERS) { item = g_menu_item_new (_("Cylinders"), NULL); g_menu_item_set_attribute (item, "custom", "s", (ab) ? "axis-cylinders" : "box-cylinders", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, ab, CYLINDERS)); g_menu_append_item (menu, item); } if (ab == 0) { GMenu * menuc = g_menu_new (); append_opengl_item (view, menuc, "box-color", "box-color", popm, popm, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menuc, _("More Colors ..."), "box-color", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_box_color_window), view, FALSE, FALSE, FALSE, get_project_by_id(view -> proj) -> cell.ltype); append_submenu (menu, _("Color"), menuc); g_object_unref (menuc); append_opengl_item (view, menu, _("Advanced"), "box-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(to_box_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); } else { menu_axis (menu, view, popm); } g_menu_item_set_submenu (ab_item, (GMenuModel *)menu); return ab_item; } #endif atomes_1.3.1/src/opengl/win/w_rings.c0000664000175000017500000012474615212624223017207 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_rings.c * @short Functions to create the ring(s) tab for the advanced environments window * @author Sébastien Le Roux */ /* * This file: 'w_rings.c' * * Contains: * - The functions to create the ring(s) tab for the advanced environments window * * List of functions: gchar * ring_atoms (project * this_proj, int ring, int step, int size, int rid, gboolean to_file); int get_rmin (project * this_proj, int rid, int step); int get_rmax (project * this_proj, int rid, int step); void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid); void rings_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void add_this_ring_to_search_tree (project * this_proj, int rid); G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_save_rings_to_file (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_rings_to_file (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void save_rings_to_file (GtkButton * but, gpointer data); GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this); GtkWidget * create_rings_search (project * this_proj, int rid); GtkWidget * rings_tab (glwin * view, int rid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern const gchar * dfi[2]; gchar * rtype[5] = {i18n("all"), i18n("King"), i18n("Guttman"), i18n("primtive"), i18n("strong")}; /*! \fn G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select ring toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { tint * dat = (tint * )data; gboolean saved_label[2]; int i, j, g, c, s, v, u, a, b; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; b = (opengl_project -> steps > 1) ? 1: 0; for (i=0; i<5; i++) { if (i*10 > dat -> b) break; } g = i - 1; for (i=2+b; i<5+b; i++) { if (10*g+i == dat -> b) break; } c = i; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, path); gtk_tree_store_set (coord -> rings_model[g], & iter, c, v, -1); if (b) { gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, 0, & s, -1); s = - s - 1; } else { s = 0; } gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, b, & i, -1); i = -i; gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, b+1, & j, -1); switch (c-b) { case 2: // Viz for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; #ifdef GTK4 if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 } break; case 3: // Show poly opengl_project -> modelgl -> show_rpoly[g][s][i-1][j-1] = v; int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, opengl_project); break; case 4: // Label for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; opengl_project -> atoms[s][a].label[0] = opengl_project -> atoms[s][a].label[1] = v; } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; break; case 5: // Pick for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; saved_label[0] = opengl_project -> atoms[s][a].label[0]; saved_label[1] = opengl_project -> atoms[s][a].label[1]; #ifdef GTK4 if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 opengl_project -> atoms[s][a].label[0] = saved_label[0]; opengl_project -> atoms[s][a].label[1] = saved_label[1]; } break; } update (opengl_project -> modelgl); } /*! \fn void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the ring search tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * id = (tint *)data; int i, j, k; project * this_proj = get_project_by_id(id -> a); i = id -> b; j = (this_proj -> steps > 1) ? 1: 0; gtk_tree_model_get (mod, iter, j, & k, -1); if (j) { gtk_tree_model_get (mod, iter, 0, & k, -1); if (i == 0) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_tree_model_get (mod, iter, j, & k, -1); if (i == 1) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } } } else { if (i == 0) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } } } /*! \fn gchar * ring_atoms (project * this_proj, int ring, int step, int size, int rid) \brief create a string containing the list of atoms in a ring \param this_proj the target project \param ring the type of ring \param step the configuration \param size the size of the ring \param rid the id number of the ring \param to_file type of output */ gchar * ring_atoms (project * this_proj, int ring, int step, int size, int rid, gboolean to_file) { gchar * str; int aid, sid; aid = this_proj -> modelgl -> all_rings[ring][step][size][rid][0]; sid = this_proj -> atoms[step][aid].sp; int i; if (to_file) { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_rings[ring][step][size][rid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s - %s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } else { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_rings[ring][step][size][rid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s-%s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } return str; } /*! \fn void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid) \brief fill the entire ring(s) tree store \param store the GtkTreeStore to fill \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid) { GtkTreeIter step_level, size_level, ring_level; gchar * str; int h, i, j, k, l; if (this_proj -> coord -> totcoord[rid+4]) { for (h=0; h < this_proj -> steps; h++) { if (this_proj -> steps > 1) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); } for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; k = this_proj -> modelgl -> num_rings[rid][h][j-1]; if (this_proj -> steps > 1 && k > 0) { gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, j, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); } else if (this_proj -> steps == 1) { gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, j, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); } for (l=0; l steps > 1) { gtk_tree_store_set (store, & ring_level, 0, -(h+1), 1, -j, 2, l+1, 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l], 5, FALSE, 6, FALSE, 7, str, -1); } else { gtk_tree_store_set (store, & ring_level, 0, -j, 1, l+1, 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l], 4, FALSE, 5, FALSE, 6, str, -1); } g_free (str); } } } } } /*! \fn void rings_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Rings tree view set color and Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void rings_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int steps = GPOINTER_TO_INT(data); set_renderer_markup (mod, iter, renderer, (steps) ? 7 : 6); } /*! \fn GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this) \brief create the ring(s) search tree store \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param fill_this 1 = yes, 0 = no */ GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this) { int i, j, k; GtkTreeViewColumn * rings_col[7]; GtkCellRenderer * rings_cell[7]; gchar * ctitle[8]={i18n("MD step"), i18n("Ring(s) size"), i18n("Id."), i18n("Show"), i18n("Poly."), i18n("Label"), i18n("Pick"), i18n("Atoms")}; gchar * ctype[8]={"text", "text", "text", "active", "active", "active", "active", "text"}; GType col_type_ms[8]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; GType col_type_ss[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; coord_edition * coord = this_proj -> modelgl -> coord_win; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; coord -> rings_model[rid] = gtk_tree_store_newv (7+j, (j) ? col_type_ms : col_type_ss); if (fill_this) fill_rings_model (coord -> rings_model[rid], this_proj, rid); GtkWidget * rings_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> rings_model[rid])); for (i=0; i<7+j; i++) { if (i < 2+j || i > 5+j) { rings_cell[i] = gtk_cell_renderer_text_new (); } else { rings_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(rings_cell[i]), "toggled", G_CALLBACK(on_select_rings), & this_proj -> modelgl -> colorp[rid*10+i][0]); } gtk_cell_renderer_set_fixed_size (rings_cell[i], -1, 25); rings_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i+k]), rings_cell[i], ctype[i+k], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(rings_tree), rings_col[i]); gtk_tree_view_column_set_alignment (rings_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i], rings_set_visible, & this_proj -> modelgl -> colorp[i][0], NULL); if (i > 5+j) gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i], rings_set_markup, GINT_TO_POINTER(j), NULL); } return rings_tree; } /*! \fn void add_this_ring_to_search_tree (project * this_proj, int rid) \brief add ring in the search tree based on ring size and id \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void add_this_ring_to_search_tree (project * this_proj, int rid) { GtkTreeIter step_level, size_level, ring_level; GtkTreeIter new_level; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkTreeStore * store = (GtkTreeStore *) coord -> rings_model[rid]; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> rings_model[rid]); gboolean valid; gboolean insert = TRUE; gchar * str; int f, h, i, j, k, l, m; int prepend = 0; if (this_proj -> steps > 1) { valid = gtk_tree_model_get_iter_first(mod, & step_level); while (valid) { gtk_tree_model_get (mod, & step_level, 0, & f, -1); if (f > coord -> rst[rid]) { prepend = 1; valid = FALSE; } else if (f == coord -> rst[rid]) { if (gtk_tree_model_iter_has_child (mod, &step_level)) { h = gtk_tree_model_iter_n_children (mod, &step_level); for (i=0; i coord -> rsz[rid]) { prepend = 3; valid = FALSE; break; } else if (j == coord -> rsz[rid]) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { k = gtk_tree_model_iter_n_children (mod, &size_level); for (l=0; l coord -> ri[rid]) { prepend = 5; valid = FALSE; break; } else if (m == coord -> ri[rid]) { insert = valid = FALSE; break; } } } if (valid) { prepend = 4; valid = FALSE; break; } } } } } if (valid) { prepend = 2; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = ring_atoms (this_proj, rid, coord -> rst[rid]-1, coord -> rsz[rid]-1, coord -> ri[rid]-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, coord -> rst[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & step_level); gtk_tree_store_set (store, & new_level, 0, coord -> rst[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & size_level, & new_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 2: gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 3: gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 4: gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 5: gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; } g_free (str); } } else { valid = gtk_tree_model_get_iter_first(mod, & size_level); while (valid) { gtk_tree_model_get (mod, & size_level, 0, & i, -1); if (i > coord -> rsz[rid]) { prepend = 1; valid = FALSE; } else if (i == coord -> rsz[rid]) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { j = gtk_tree_model_iter_n_children (mod, &size_level); for (k=0; k coord -> ri[rid]) { prepend = 2; valid = FALSE; break; } else if (l == coord -> ri[rid]) { insert = valid = FALSE; break; } } } if (valid) { prepend = 3; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = ring_atoms (this_proj, rid, coord -> rst[rid]-1, coord -> rsz[rid]-1, coord -> ri[rid]-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, coord -> rsz[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & size_level); gtk_tree_store_set (store, & new_level, 0, coord -> rsz[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; case 2: gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; case 3: gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; } g_free (str); } } } /*! \fn int get_rmin (project * this_proj, int rid, int step) \brief get ring(s) max size for the MD step \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param step the MD step */ int get_rmin (project * this_proj, int rid, int step) { int i, j; for (i=0; i coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; if (this_proj -> modelgl -> num_rings[rid][step-1][j-1]) break; } return j; } /*! \fn int get_rmax (project * this_proj, int rid, int step) \brief get ring(s) min size for the MD step \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param step the MD step */ int get_rmax (project * this_proj, int rid, int step) { int i, j; for (i=this_proj -> coord -> totcoord[rid+4]-1; i>-1; i--) { j = this_proj -> coord -> geolist[rid+4][0][i]; if (this_proj -> modelgl -> num_rings[rid][step-1][j-1]) break; } return j; } /*! \fn G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) \brief update the ring(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; gchar * str; int i, j, k, v; int rid; const gchar * m = entry_get_text (res); v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); coord_edition * coord = this_proj -> modelgl -> coord_win; for (i=0; i<5; i++) { if (i*10 > dat -> b) break; } rid = i - 1; for (i=0; i<3; i++) { if (10*rid+i == dat -> b) break; } switch (i) { case 0: if (v > 0 && v < this_proj -> steps+1) { if (v != coord -> rst[rid]) { coord -> rst[rid] = v; coord -> rsz[rid] = coord -> ri[rid] = -1; for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][j]), ""); } } else { coord -> rst[rid] = coord -> rsz[rid] = coord -> ri[rid] = -1; } if (coord -> rst[rid] > 0) { update_entry_int(res, coord -> rst[rid]); str = g_strdup_printf ("∈ [%d - %d]", get_rmin(this_proj, rid, coord -> rst[rid]), get_rmax(this_proj, rid, coord -> rst[rid])); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][1]), str); g_free (str); } else { update_entry_text (res, ""); } break; case 1: if (coord -> rst[rid] > -1) { j = get_rmin(this_proj, rid, coord -> rst[rid]); k = get_rmax(this_proj, rid, coord -> rst[rid]); if (v >= j && v <= k) { if (v != coord -> rsz[rid]) { if (this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][v-1]) { coord -> rsz[rid] = v; coord -> ri[rid] = -1; } else { coord -> rsz[rid] = -1; } } } } else { coord -> rsz[rid] = coord -> ri[rid] = -1; } if (coord -> rsz[rid] > 0) { update_entry_int(res, coord -> rsz[rid]); str = g_strdup_printf ("∈ [1 - %d]", this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1]); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][2]), str); g_free (str); } else { update_entry_text (res, ""); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][2]), ""); } break; case 2: if (coord -> rst[rid] > -1 && coord -> rsz[rid] > -1) { if (v > 0 && v < this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1]+1) { coord -> ri[rid] = v; } else { coord -> ri[rid] = -1; } } else { coord -> ri[rid] = -1; } if (coord -> ri[rid] > 0) { update_entry_int(res, coord -> ri[rid]); } else { update_entry_text (res, ""); } break; } if (coord -> rst[rid] > 0 && coord -> rsz[rid] > 0 && coord -> ri[rid] > 0) { add_this_ring_to_search_tree (this_proj, rid); } } /*! \fn GtkWidget * create_rings_search (project * this_proj, int rid) \brief create the ring(s) search widget \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * create_rings_search (project * this_proj, int rid) { GtkWidget * rings_search = create_vbox (BSEP); gchar * str = g_strdup_printf (_("Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n"), _(rings_type[rid])); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[3]={i18n("MD step:"), i18n("Ring size:"), i18n("Ring Id.:")}; int i, j; GtkWidget * hbox; GtkWidget * entry; j = (this_proj -> steps) > 1 ? 0 : 1; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> rst[rid] = 1; for (i=j; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[i]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_rings_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[rid*10+i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); if (i==0) { str = g_strdup_printf ("∈ [1 - %d]", this_proj -> steps); coord -> rilab[rid][i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else if (i == 1) { str = g_strdup_printf ("∈ [%d - %d]", get_rmin(this_proj, rid, coord -> rst[rid]), get_rmax(this_proj, rid, coord -> rst[rid])); coord -> rilab[rid][i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else { coord -> rilab[rid][i] = markup_label("", 50, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, coord -> rilab[rid][i], FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, markup_label(_("Search result(s)"), 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, create_rings_tree (this_proj, rid, FALSE), FALSE, FALSE, 0); return rings_search; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_rings_to_file (GtkNativeDialog * info, gint response_id, gpointer data) \brief save rings data to file: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_rings_to_file (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_rings_to_file (GtkDialog * info, gint response_id, gpointer data) \brief save rings data to file: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_rings_to_file (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * rings_file = file_chooser_get_file_name (chooser); // Save data to file here ! if (rings_file) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int rid = dat -> b; if (this_proj -> coord -> totcoord[rid+4]) { FILE * fp = fopen (rings_file, dfi[1]); gchar * str; if (fp) { if (! rid) { fprintf (fp, _("# This file contains the list of all rings in the %s model\n\n"), prepare_for_title(this_proj -> name)); } else { fprintf (fp, _("# This file contains the list of all %s rings in the %s model\n\n"), _(rtype[rid]), prepare_for_title(this_proj -> name)); } int h, i, j, k, l; for (h=0; h < this_proj -> steps; h++) { i = h+1; if (this_proj -> steps > 1) fprintf (fp, _("Step N°%d\n"), i); for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; fprintf (fp, (this_proj -> steps > 1) ? _("\n\tRing(s) of size %d atoms\n") : _("\nRing(s) of size %d atoms\n"), j); k = this_proj -> modelgl -> num_rings[rid][h][j-1]; // ring size for (l=0; l steps > 1) ? "\t\tN°%d\t:\t%s\n" : "\tN°%d\t:\t%s\n", l+1, str); g_free (str); } } } fclose (fp); } else { str = g_strdup_printf (_("Impossible to open file: %s"), rings_file); show_error (str, 0, this_proj -> modelgl -> coord_win -> win); g_free (str); } } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn G_MODULE_EXPORT void save_rings_to_file (GtkButton * but, gpointer data) \brief save rings data to file \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void save_rings_to_file (GtkButton * but, gpointer data) { tint * dat = (tint *) data; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif gchar * crname = g_strdup_printf (_("Save atoms in %s rings to file"), _(rtype[dat -> b])); info = create_file_chooser (crname, GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); g_free (crname); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gchar * rings_file = g_strdup_printf ("%s-rings.dat", _(rtype[dat -> b])); gtk_file_chooser_set_current_name (chooser, rings_file); // g_free (rings_file); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_rings_to_file), data); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_rings_to_file), data); #endif } /*! \fn GtkWidget * rings_tab (glwin * view, int rid) \brief create the ring(s) tab for the advanced environments window \param view the target glwin \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * rings_tab (glwin * view, int rid) { GtkWidget * rings = create_vbox (0); GtkWidget * scroll = create_scroll (rings, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (rings, TRUE); gtk_widget_set_vexpand (rings, TRUE); int h, i, j, k; project * this_proj = get_project_by_id(view -> proj); k = 0; for (h=0; h < this_proj -> steps; h++) { for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; k += this_proj -> modelgl -> num_rings[rid][h][j-1]; } } if (k < GTK_LIMIT) { add_container_child (CONTAINER_SCR, scroll, create_rings_tree (this_proj, rid, TRUE)); } else { add_container_child (CONTAINER_SCR, scroll, create_rings_search (this_proj, rid)); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button(_("Save to file"), IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(save_rings_to_file), & view -> colorp[rid][0]), TRUE, TRUE, 40); return rings; } atomes_1.3.1/src/opengl/win/color_box.c0000664000175000017500000003731615212624223017521 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file color_box.c * @short Functions to create the color palettes for the menus of the OpenGL window \n Callbacks to set the color using the color palettes * @author Sébastien Le Roux */ /* * This file: 'color_box.c' * * Contains: * - The functions to create the color palettes for the menus of the OpenGL window - The callbacks to set the color using the color palettes * * List of functions: void get_color (ColRGBA * but, int cid); void color_box (glwin * view, int ideo, int spec, int geo); G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data); GtkWidget * color_box (glwin * view, int ideo, int spec, int geo); GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "color_box.h" #include "glview.h" extern void update_gradient_widgets (gradient_edition * gradient_win, background * back); /*! \fn void get_color (ColRGBA * but, int cid) \brief get color from the color palette id \param but the color to prepare \param cid the color palette id, in [0-63] */ void get_color (ColRGBA * but, int cid) { int rid = cid / 4; int bid = cid - rid*4; but -> red = (rid < 6) ? 0.0 : (rid < 11) ? 0.2 * (rid - 5) : 1.0; but -> green = (rid < 6) ? 0.2*rid : (rid < 11) ? 1.0 - 0.2 * (rid - 5) : 0.2 * (rid - 10); but -> blue = bid * 0.333; if (bid == 3) but -> blue = 1.0; } /*! \fn cairo_surface_t * col_surface (double r, double g, double b, int x, int y) \brief create a cairo sufrace painted with the appropriate color \param r red value \param g green value \param b blue value \param x surface x size \param y surface y size */ cairo_surface_t * col_surface (double r, double g, double b, int x, int y) { cairo_surface_t * cst; cairo_t * tcst; cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, x, y); tcst = cairo_create (cst); cairo_set_source_rgb (tcst, r, g, b); cairo_paint (tcst); cairo_destroy (tcst); return cst; } /*! \fn G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) \brief set background color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> back -> color, col -> b); this_proj -> modelgl -> anim -> last -> img -> back -> gradient = 0; cleaning_shaders (this_proj -> modelgl, BACKG); if (this_proj -> modelgl -> gradient_win) update_gradient_widgets (this_proj -> modelgl -> gradient_win, this_proj -> modelgl -> anim -> last -> img -> back); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) \brief set box color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> abc -> color, col -> b); this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) \brief set atomic species color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> at_color[col -> c], col -> b); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 0) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) \brief set ring polyhedra color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[4+col -> b][0][col -> c], col -> d); int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) \brief set total coordination color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[0][col -> b][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 1) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) \brief set partial coordination color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[1][col -> b][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 2) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) \brief set fragment color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[col -> b][0][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == col -> b + 1) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn void color_box (glwin * view, int ideo, int spec, int geo) \brief create the color palette menus data pointers GTK4 \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ void color_box (glwin * view, int ideo, int spec, int geo) #else /*! \fn GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) \brief create the color palette pointers and menus GTK3 version \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) #endif { int l, m, n, p; p = view -> proj; #ifdef GTK3 GtkWidget * but; GtkWidget * coltable; // #ifdef GTK3 coltable = gtk_menu_new (); // #else // coltable = gtk_grid_new (); // #endif ColRGBA but_col; #endif project * this_proj = get_project_by_id(p); l = 0; for (l=0; l<64; l++) { #ifdef GTK3 get_color (& but_col, l); cairo_surface_t * surface = col_surface (but_col.red, but_col.green, but_col.blue, 12, 12); // #ifdef GTK3 but = gtk3_menu_item (NULL, NULL, IMG_SURFACE, (gpointer)surface, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); /* #else GtkWidget * but_img = create_image_from_data (IMG_SURFACE, surface); show_the_widgets (but_img); but = gtk_button_new (); add_container_child (CONTAINER_BUT, but, but_img); gtk_button_set_has_frame ((GtkButton *)but, FALSE); show_the_widgets (but); #endif */ cairo_surface_destroy (surface); #endif if (ideo < -2) { view -> gcid[4+spec][geo][l].a = p; view -> gcid[4+spec][geo][l].b = spec; view -> gcid[4+spec][geo][l].c = geo; view -> gcid[4+spec][geo][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_rings_color), & view -> gcid[4+spec][geo][l]); #endif } else if (ideo == -2) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_back_color), & view -> colorp[l][0]); #endif } else if (ideo == -1) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_box_color), & view -> colorp[l][0]); #endif } else if (ideo < this_proj -> nspec*2) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_at_color), & view -> colorp[l][ideo]); #endif } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0]) { n = ideo - 2*this_proj -> nspec; view -> gcid[0][n][l].a = p; view -> gcid[0][n][l].b = spec; view -> gcid[0][n][l].c = geo; view -> gcid[0][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_total_coord_color), & view -> gcid[0][n][l]); #endif } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { n = ideo - 2*this_proj -> nspec - this_proj -> coord -> totcoord[0]; view -> gcid[1][n][l].a = p; view -> gcid[1][n][l].b = spec; view -> gcid[1][n][l].c = geo; view -> gcid[1][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_partial_coord_color), & view -> gcid[1][n][l]); #endif } else { n = ideo - 2*this_proj -> nspec; for (m= 0; m coord -> totcoord[m]; } view -> gcid[spec][n][l].a = p; view -> gcid[spec][n][l].b = spec; view -> gcid[spec][n][l].c = geo; view -> gcid[spec][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_frag_mol_color), & view -> gcid[spec][n][l]); #endif } m = l/4; #ifdef GTK3 gtk_menu_attach (GTK_MENU(coltable), but, l-m*4, l+1-m*4, m, m+1); // #else // gtk_grid_attach (GTK_GRID(coltable), but, l-m*4, m, 1, 1); #endif } #ifdef GTK3 but = create_menu_item (FALSE, _("More Colors ...")); gtk_menu_shell_append ((GtkMenuShell *)coltable, but); if (ideo < -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[4+spec][geo][4+spec]); } else if (ideo == -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_back_color_window), view); } else if (ideo == -1) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_box_color_window), view); } else if (ideo < this_proj -> nspec*2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][ideo]); } else if (ideo < this_proj -> nspec*2 + this_proj -> coord -> totcoord[0]) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[0][n][0]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[1][n][1]); } else { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[spec][n][spec]); } show_the_widgets (coltable); return coltable; #endif } #ifdef GTK4 /*! \fn GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) \brief create the color palette menus GTK4 version \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) { int l, m, n, p; p = view -> proj; GtkWidget * but; GtkWidget * coltable = gtk_grid_new (); ColRGBA but_col; project * this_proj = get_project_by_id(p); l = 0; for (l=0; l<64; l++) { get_color (& but_col, l); cairo_surface_t * surface = col_surface (but_col.red, but_col.green, but_col.blue, 12, 12); GtkWidget * but_img = create_image_from_data (IMG_SURFACE, surface); show_the_widgets (but_img); but = gtk_button_new (); add_container_child (CONTAINER_BUT, but, but_img); gtk_button_set_has_frame ((GtkButton *)but, FALSE); show_the_widgets (but); cairo_surface_destroy (surface); if (ideo < -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_rings_color), & view -> gcid[4+spec][geo][l]); } else if (ideo == -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_back_color), & view -> colorp[l][0]); } else if (ideo == -1) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_box_color), & view -> colorp[l][0]); } else if (ideo < this_proj -> nspec*2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_at_color), & view -> colorp[l][ideo]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0]) { n = ideo - 2*this_proj -> nspec; g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_total_coord_color), & view -> gcid[0][n][l]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { n = ideo - 2*this_proj -> nspec - this_proj -> coord -> totcoord[0]; g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_partial_coord_color), & view -> gcid[1][n][l]); } else { n = ideo - 2*this_proj -> nspec; for (m= 0; m coord -> totcoord[m]; } g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_frag_mol_color), & view -> gcid[spec][n][l]); } m = l/4; gtk_grid_attach (GTK_GRID(coltable), but, l-m*4, m, 1, 1); } show_the_widgets (coltable); return coltable; } #endif atomes_1.3.1/src/opengl/win/w_periodic.c0000664000175000017500000005326015212624223017653 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_periodic.c * @short Functions to create the periodic table of the elements \n Functions to select element from the periodic table * @author Sébastien Le Roux */ /* * This file: 'w_periodic.c' * * Contains: * - The functions to create the periodic table of the elements - The functions to select element from the periodic table * * List of functions: int is_in_table (int i, int j); int get_atom_id_from_periodic_table (atom_search * asearch); G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * get_electronic_structure (int r, int c); G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data); G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data); GtkWidget * create_el_preview (int p, int a, int r, int c); GtkWidget * el_preview (int p, int a); GtkWidget * create_css_button (int p, int id, int r, int c); GtkWidget * create_css_group (int p, int i); GtkWidget * css_element (int p, int i, int j); GtkWidget * periodic_table (int p, int a); */ #include "global.h" extern insertion_menu mol[]; atom_search * periodic_search; int element; dint table_p[118]; ColRGBA rtcolo[11] = {{142, 255, 142, 1.0}, // #8EFF8E {245, 255, 83, 1.0}, // #F5FF53 {255, 184, 83, 1.0}, // #FFB853 {255, 108, 125, 1.0}, // #FF6C7D {244, 167, 255, 1.0}, // #F4A7FF {64, 133, 56}, // #408538 {177, 94, 255}, // #B15EFF {142, 227, 255, 1.0}, // #8EE3FF {80, 93, 253, 1.0}, // #505DFD {126, 255, 235, 1.0}, // #7EFFEB {95, 192, 176, 1.0}}; // #5FC0B0 gchar * ptcolo[11] = {"#8EFF8E", "#F5FF53", "#FFB853", "#FF6C7D", "#F4A7FF", "#408538", "#B15EFF", "#8EE3FF", "#505DFD", "#7EFFEB", "#5FC0B0"}; /*! \fn gchar * get_electronic_structure (int r, int c) \brief get electronic structure for this (row,column) combination \param r row \param c column */ gchar * get_electronic_structure (int r, int c) { gchar * str = NULL; gchar * prev[10]={" ", "He", "Ne", "Ar", "Kr", "Xe", "Rn", " ", "Xe", "Rn"}; if (r == -1 && c == -1) return g_strdup_printf (_("Electronic structure: [%s]"), _("None")); if (r > 0) { str = g_strdup_printf (_("Electronic structure:\t [%s]"), prev[r]); } else { str = g_strdup_printf (_("Electronic structure:\t ")); } if (c < 2) { str = g_strdup_printf ("%s %ds%d", str, r+1, c+1); } else { if (r < 3) { str = g_strdup_printf ("%s %ds%d %dp%d", str, r+1, 2, r+1, c-11); } else if (r < 5) { if (c == 5 || c == 10) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c, r+1, 1); } else if (r == 4 && (c == 4 || c == 7 ||c == 8)) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c, r+1, 1); } else if (r == 4 && c == 9) { str = g_strdup_printf ("%s %dd%d", str, r, 10); } else if (c < 12) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c-1, r+1, 2); } else { str = g_strdup_printf ("%s %dd%d %ds%d %dp%d", str, r, 10, r+1, 2, r+1, c-11); } } else if (r < 7) { if (c == 9 || c == 10) { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-1, 14, r, c, r+1, 1); } else if (c < 12) { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-1, 14, r, c-1, r+1, 2); } else { str = g_strdup_printf ("%s %df%d %dd%d %ds%d %dp%d", str, r-1, 14, r, 10, r+1, 2, r+1, c-11); } } else if (c == 3) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r-3, c-2, r-2, 2); } else if ((c > 7 && c < 10) || (c > 10 && c < 17)) { str = g_strdup_printf ("%s %df%d %ds%d", str, r-4, c-2, r-2, 2); } else if (r == 8) { if (c > 4 && c < 8) { str = g_strdup_printf ("%s %df%d %ds%d", str, r-4, c-2, r-2, 2); } else { str = g_strdup_printf ("%s 4f%d 5d1 6s2", str, c-3); } } else { if (c == 4) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r-3, c-2, r-2, 2); } else if (c == 17) { str = g_strdup_printf ("%s %df%d %ds%d %dp%d", str, r-4, c-3, r-2, 2, r-2, 1); } else { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-4, c-3, r-3, 1, r-2, 2); } } } return str; } /*! \fn int is_in_table (int i, int j) \brief is this (row,column) combination a chemical element ? \param i row \param j column */ int is_in_table (int i, int j) { if (i == 7) return 0; if (i == 0 && (j > 0 && j < 17)) return 0; if ((i == 1 || i == 2) && (j > 1 && j < 12)) return 0; if ((i == 5 || i == 6) && j ==2) return 0; if (i > 7 && j< 3) return 0; if (i > 2 && i < 5) return 19 + (i-3)*18 + j; if (i == 0) { if (j==0) { return 1; } else { return 2; } } if (i > 0 && i < 3) return 2 + j+1 - 10 * (j/11) + 8 * (i/2); if (i == 5 && j < 2) return 55 + j; if (i == 6 && j < 2) return 87 + j; if (i == 5 && j > 2) return 72 + j-3; if (i == 6 && j > 2) return 104 + j-3; if (i == 8) return 57 + j-3; if (i == 9) return 89 + j-3; return -1; } /*! \fn GtkWidget * create_el_preview (int p, int a, int r, int c) \brief create element preview \param p the target project id \param a target atom search id \param r row \param c column */ GtkWidget * create_el_preview (int p, int a, int r, int c) { GtkWidget * preview = create_vbox (5); GtkWidget * hbox; GtkWidget * lab[5]; int i, id; int size[5] = {125, 30, 15, 15, 15}; gchar * backcol; gchar * name; gchar * str; if (r < 0 && c < 0) { id = 0; } else { id = is_in_table (r, c); } for (i=0; i<5; i++) { backcol = g_strdup_printf ("label#prev-%d-%d-%d {\n" " color: black;\n" " font-weight: bold;\n" " font-size: %dpx;\n" "}\n", i, p, a, size[i]); provide_gtk_css (backcol); g_free (backcol); if (i == 2 || i == 4) hbox = create_hbox (0); name = g_strdup_printf ("prev-%d-%d-%d", i, p, a); switch (i) { case 0: lab[i] = gtk_label_new (periodic_table_info[id].lab); break; case 1: lab[i] = gtk_label_new (_(periodic_table_info[id].name)); break; case 2: str = g_strdup_printf ("Z= %d", periodic_table_info[id].Z); lab[i] = gtk_label_new (str); g_free (str); break; case 3: str = g_strdup_printf ("M= %.3f g/mol", periodic_table_info[id].M); lab[i] = gtk_label_new (str); g_free (str); break; case 4: lab[i] = markup_label(get_electronic_structure (r, c), -1, -1, 0.0, 0.5); break; } gtk_widget_set_name (lab[i], name); g_free (name); if (i < 2) { add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, lab[i], FALSE, FALSE, 0); } else { if (i == 2 || i == 4) add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab[i], FALSE, FALSE, 30); } } show_the_widgets (preview); return preview; } /*! \fn GtkWidget * el_preview (int p, int a) \brief create element preview CSS widget \param p the target project id \param a target atom search id */ GtkWidget * el_preview (int p, int a) { GtkWidget * preview = create_vbox (BSEP); gchar * backcol = g_strdup_printf ("box#preview-%d-%d {\n" "border: 3px solid black;\n" "background-color: white;\n" "border-top-left-radius: 60px 90px;\n" "border-bottom-right-radius: 60px 90px;\n" #ifdef GTK3 "box-shadow: 5px 5px 5px 5px rgba(0,0,0,0.4), 2px 2px 0px 1px rgba(0,0,0,0.4) inset;\n" #endif // GTK3 "}\n", p, a); provide_gtk_css (backcol); g_free (backcol); gchar * str = g_strdup_printf ("preview-%d-%d", p, a); gtk_widget_set_name (preview, str); g_free (str); periodic_search -> preview[1] = create_el_preview (p, a, -1, -1); gtk_widget_set_size_request (preview, 400, 275); add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, periodic_search -> preview[1], FALSE, FALSE, 0); return preview; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) \brief periodic table focus event callback GTK4 \param focus the GtkEventControllerFocus sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) \brief periodic table focus event callback GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) #endif { dint * id = (dint *)data; periodic_search -> preview[1] = destroy_this_widget (periodic_search -> preview[1]); periodic_search -> preview[1] = create_el_preview (periodic_search -> proj, periodic_search -> action, id -> a, id -> b); add_box_child_start (GTK_ORIENTATION_VERTICAL, periodic_search -> preview[0], periodic_search -> preview[1], FALSE, FALSE, 0); #ifdef GTK3 return FALSE; #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) \brief periodic table motion event callback GTK4 \param motion the GtkEventControllerMotion sending the signal \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) { dint * id = (dint *)data; periodic_search -> preview[1] = destroy_this_widget (periodic_search -> preview[1]); periodic_search -> preview[1] = create_el_preview (periodic_search -> proj, periodic_search -> action, id -> a, id -> b); add_box_child_start (GTK_ORIENTATION_VERTICAL, periodic_search -> preview[0], periodic_search -> preview[1], FALSE, FALSE, 0); } #endif /*! \fn G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) \brief periodic table - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) { destroy_this_dialog (info); } /*! \fn G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) \brief get element from periodic table button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) { element = GPOINTER_TO_INT(data); run_periodic_table (GTK_DIALOG(get_top_level(GTK_WIDGET(but))), 0, NULL); // g_signal_emit_by_name (G_OBJECT(get_top_level(but)), "activate", data); } /*! \fn GtkWidget * create_css_button (int p, int id, int r, int c) \brief create CSS periodic table element button \param p the target project id \param id is element table (1 / 0) \param r row \param c column */ GtkWidget * create_css_button (int p, int id, int r, int c) { int i; switch (r) { case 8: i = 9; break; case 9: i = 10; break; default: switch (c) { case 1: i = 2; break; case 2: i = 3; break; case 11: i = 4; break; case 12: i = 4; if (r == 1) i = 7; if (r == 6) i = 6; break; case 17: i = 6; if (r < 6) i = 8; break; default: if ((r == 0 && c == 0) || (r==1 && (c > 13 && c < 17)) || ((r>1 && r <5) && c == 16)) { i = 0; } else if (c == 0) { i = 1; } else if (c > 2 && c < 8) { i = 3; } else if ((c > 7 && c <11) && r < 6) { i = 3; } else if (r==6 && ((c > 7 && c < 11) || c > 11)) { i = 6; } else if (c==13 && (r == 4 || r == 5)) { i = 4; } else if ((c == 14 || c == 15) && r == 5) { i = 4; } else if ((r==1 && c==13) || (r==2 && (c==14||c==15)) || (r==3 && c==15)) { i = 5; } else { i = 7; } break; } } if (c == 2 && r == 5) i = 9; if (c == 2 && r ==6) i = 10; GtkWidget * but; if (p != -1) { but = create_button (NULL, IMG_NONE, NULL, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(get_element), GINT_TO_POINTER(id)); } else { but = create_button (NULL, IMG_NONE, NULL, -1, -1, GTK_RELIEF_NONE, NULL, NULL); } gchar * butcol = g_strdup_printf ("button#element-%d-%d {\n" //" border-radius: 10px;\n" " background-color: %s;\n" " border-color: black;\n" " border-width: 1px;\n" " color: black;\n" " font-weight: bold;\n" "}\n" "button#element-%d-%d:hover {\n" " background-color: rgba(255,255,255,0.3);\n" " color: %s;\n" " font-weight: bold;\n" "}\n", p, id, ptcolo[i], p, id, ptcolo[i]); provide_gtk_css (butcol); g_free (butcol); gchar * str = g_strdup_printf ("element-%d-%d", p, id); gtk_widget_set_name (but, str); g_free (str); GtkWidget * lab; if (id > 0) { GtkWidget * vbox = create_vbox (BSEP); lab = gtk_label_new (periodic_table_info[id].lab); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lab, FALSE, FALSE, 0); gchar * labcol = g_strdup_printf ("label#mass-%d-%d {\n" " font-size: 10px;" "}\n", p, id); str = g_strdup_printf ("%d", periodic_table_info[id].Z); lab = gtk_label_new (str); provide_gtk_css (labcol); g_free (labcol); str = g_strdup_printf ("mass-%d-%d", p, id); gtk_widget_set_name (lab, str); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lab, FALSE, FALSE, 0); add_container_child (CONTAINER_BUT, but, vbox); table_p[id-1].a = r; table_p[id-1].b = c; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "enter-notify-event", G_CALLBACK(on_element_focus), & table_p[id-1]); #endif } else { lab = gtk_label_new (" "); gtk_label_align (lab, 0.5, 0.5); add_container_child (CONTAINER_BUT, but, lab); } #ifdef GTK4 GtkEventController * focus = gtk_event_controller_focus_new (); g_signal_connect (G_OBJECT (focus), "enter", G_CALLBACK(on_element_focus), & table_p[id-1]); gtk_widget_add_controller (but, GTK_EVENT_CONTROLLER (focus)); GtkEventController * motion = gtk_event_controller_motion_new (); g_signal_connect (motion, "enter", G_CALLBACK(on_element_motion_enter), & table_p[id-1]); gtk_widget_add_controller (but, GTK_EVENT_CONTROLLER (motion)); #endif show_the_widgets (but); return but; } /*! \fn GtkWidget * create_css_group (int p, int i) \brief create group CSS \param p the target project id \param i the group */ GtkWidget * create_css_group (int p, int i) { gchar * backcol = g_strdup_printf ("label#group-%d-%d {\n" " border-radius: 25px;\n" " border-color: black;\n" " border-width: 1px;\n" " background-color: %s;\n" " color: black;\n" " font-weight: bold;\n" "}\n", p, i, ptcolo[i]); provide_gtk_css (backcol); g_free (backcol); GtkWidget * lab = gtk_label_new (" "); gtk_widget_set_size_request (lab, 50, 40); gtk_label_align (lab, 0.5, 0.5); gchar * str = g_strdup_printf ("group-%d-%d", p, i); gtk_widget_set_name (lab, str); g_free (str); show_the_widgets (lab); return lab; } /*! \fn GtkWidget * css_element (int p, int i, int j) \brief create CSS for the periodic table elements \param p target project id \param i row \param j column */ GtkWidget * css_element (int p, int i, int j) { int k = is_in_table (i, j); if (k) { return create_css_button (p, k, i, j); } else if (j == 2 && (i == 5 || i == 6)) { return create_css_button (p, i-7, i, j); } else { return gtk_label_new (" "); } } /*! \fn GtkWidget * periodic_table (int p, int a) \brief create periodic table \param p target project id \param a target atom search id */ GtkWidget * periodic_table (int p, int a) { GtkWidget * ptable = gtk_grid_new (); gtk_grid_set_row_homogeneous (GTK_GRID (ptable), TRUE); gtk_grid_set_column_homogeneous (GTK_GRID (ptable), TRUE); gtk_grid_set_row_spacing (GTK_GRID (ptable), 2); gtk_grid_set_column_spacing (GTK_GRID (ptable), 2); int i, j; periodic_search -> preview[0] = el_preview (p, a); gtk_grid_attach (GTK_GRID (ptable), periodic_search -> preview[0], 3, 0, 8, 5); for (i=0; i<10; i++) { for (j=0; j<18; j++) { gtk_grid_attach (GTK_GRID (ptable), css_element(p, i, j), j, i+3, 1, 1); } } gchar * groups[11] = {i18n(" Alkali metal"), i18n(" Alkaline earth metal"), i18n(" Lanthanide"), i18n(" Actinide"), i18n(" Transition metal"), i18n(" Post-transition metal"), i18n(" Metalloid"), i18n(" Polyatomic non-metal"), i18n(" Diatomic non-metal"), i18n(" Noble gas"), i18n(" Unknown")}; gtk_grid_attach (GTK_GRID (ptable), gtk_label_new (" "), 18, 0, 1, 1); int colid[11] = {1, 2, 9, 10, 3, 4, 7, 5, 0, 8, 6}; for (i=0; i<11; i++) { gtk_grid_attach (GTK_GRID (ptable), create_css_group (p, colid[i]), 19, 1+i, 1, 1); gtk_grid_attach (GTK_GRID (ptable), markup_label(_(groups[i]), 120, -1, 0.0, 0.5), 20, 1+i, 3, 1); } return ptable; } /*! \fn int get_atom_id_from_periodic_table (atom_search * asearch) \brief get atom Z from selection in the periodic table \param asearch target atom search, if any */ int get_atom_id_from_periodic_table (atom_search * asearch) { GtkWidget * win = gtk_dialog_new (); gchar * str; if (asearch != NULL) { str = g_strdup_printf (_("Element selection from the periodic table")); periodic_search = asearch; #ifdef GTK3 if (get_project_by_id (asearch -> proj) -> modelgl) { gtk_window_set_attached_to (GTK_WINDOW (win), get_project_by_id (asearch -> proj) -> modelgl -> win); } else { gtk_window_set_attached_to (GTK_WINDOW (win), MainWindow); } #endif } else { str = g_strdup_printf (_("Periodic table of the elements")); periodic_search = g_malloc0(sizeof*periodic_search); periodic_search -> proj = -1; periodic_search -> action = -1; #ifdef GTK3 gtk_window_set_attached_to (GTK_WINDOW (win), MainWindow); #endif } gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); element = 0; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, periodic_table (periodic_search -> proj, periodic_search -> action), FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_periodic_table), NULL); if (asearch == NULL) g_free (periodic_search); periodic_search = NULL; return element; } atomes_1.3.1/src/opengl/win/submenus.h0000664000175000017500000000743715212624223017402 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file submenus.h * @short Function declarations for the creation of the OpenGL window menus * @author Sébastien Le Roux */ /* * This header file: 'submenus.h' * * Contains: - Function declarations for the creation of the OpenGL window menus */ #ifndef SUBMENUS_H_ #define SUBMENUS_H_ #ifdef GTK3 extern void menu_items_opengl (GtkWidget * menu, glwin * view, int popm); extern GtkWidget * menu_style (glwin * view, int id); extern GtkWidget * menu_map (glwin * view, int id); extern GtkWidget * menu_atoms ( glwin * view, int id, int at); extern GtkWidget * menu_bonds (glwin * view, int id, int at); extern GtkWidget * menu_clones (glwin * view, int id); extern GtkWidget * menu_box_axis (glwin * view, int id, int ab); extern void detach_frag_mol_menu (glwin * view, int id, int jd); extern GtkWidget * menu_coord (glwin * view, int id); extern GtkWidget * add_menu_coord (glwin * view, int id, int jd); extern GtkWidget * menu_poly (glwin * view, int id); extern GtkWidget * menu_rings (glwin * view, int id); extern GtkWidget * menu_edit (glwin * view, int id); extern GtkWidget * menu_tools (glwin * view, int id); extern GtkWidget * menu_rep (glwin * view, int id); extern GtkWidget * menu_proj (glwin * view); extern GtkWidget * menu_back (glwin * view); extern void menu_axis (GtkWidget * menu_ab, glwin * view, int id); extern GtkWidget * menu_anim (glwin * view, int id); extern void menu_items_view (GtkWidget * menu, glwin * view, int popm); #else extern GMenu * menu_style (glwin * view, int popm); extern GMenu * menu_map (glwin * view, int popm); extern GMenu * menu_atoms ( glwin * view, int popm, int at); extern GMenu * menu_bonds (glwin * view, int popm, int at); extern GMenu * menu_clones (glwin * view, int popm); extern GMenu * axis_box_param (glwin * view, int popm, int ab, int style); extern GMenuItem * menu_box_axis (glwin * view, int popm, int ab); extern GMenu * color_item (glwin * view, gchar * act, int id, GCallback handler, gpointer data); extern GMenu * menu_coord (glwin * view, int popm); extern GMenu * add_menu_coord (glwin * view, int popm, int id); extern GMenu * menu_poly (glwin * view, int popm); extern GMenu * menu_rings (glwin * view, int popm); extern GMenu * extract_section (glwin * view, int popm); extern GMenu * menu_edit (glwin * view, int popm); extern GMenu * menu_tools (glwin * view, int popm); extern GMenu * menu_reset (glwin * view, int popm); extern GMenu * menu_fullscreen (glwin * view, int popm); extern GMenu * menu_rep (glwin * view, int popm); extern GMenu * menu_proj (glwin * view, int popm); extern GMenu * menu_back (glwin * view, int popm); extern void menu_axis (GMenu * menu, glwin * view, int popm); extern void menu_items_view (GMenu * menu, glwin * view, int popm); extern GMenu * prepare_opengl_menu (glwin * view, int popm); extern GMenu * prepare_model_menu (glwin * view, int popm); extern GMenu * prepare_coord_menu (glwin * view, int popm); extern GMenu * menu_view (glwin * view, int id); extern GMenu * menu_anim (glwin * view, int popm); extern GMenu * menu_shortcuts (glwin * view, int popm); #endif #endif atomes_1.3.1/src/opengl/win/w_colors.c0000664000175000017500000006220215212624223017352 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_colors.c * @short Functions to create the color selection dialogs * @author Sébastien Le Roux */ /* * This file: 'w_colors.c' * * Contains: * - The functions to create the color selection dialogs * * List of functions: void update_gradient_widgets (gradient_edition * gradient_win, background * back); void window_color (project * this_proj, glwin * view); void back_position_has_changed (gpointer data, GLfloat v); G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_gradient_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_gradient_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_back_position (GtkRange * range, gpointer data); G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT gboolean scroll_set_back_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean on_gradient_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_gradient_delete (GtkWidget * widg, GdkEvent * event, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "color_box.h" #include "preferences.h" /* The object type for color change -2 : background -1 : box > -1 : coordination */ int wc_cid; /*! \fn void update_gradient_widgets (gradient_edition * gradient_win, , background * back) \brief update the widgets of the gradient window \param gradient_win the target gradient edition \param back the target background information */ void update_gradient_widgets (gradient_edition * gradient_win, background * back) { combo_set_active (gradient_win -> g_box, back -> gradient); int i; GdkRGBA col = colrgba_togtkrgba (back -> color); gtk_color_chooser_set_rgba ((GtkColorChooser *)gradient_win -> col_but, & col); for (i=0; i<2; i++) { col = colrgba_togtkrgba (back -> gradient_color[i]); gtk_color_chooser_set_rgba ((GtkColorChooser *)gradient_win -> grad_but[i], & col); } combo_set_active (gradient_win -> g_box, back -> gradient); if (back -> gradient) { show_the_widgets (gradient_win -> dir); hide_the_widgets (gradient_win -> color_box[0]); show_the_widgets (gradient_win -> color_box[1]); hide_the_widgets (gradient_win -> d_box[(back -> gradient == 2) ? 0 : 1]); show_the_widgets (gradient_win -> d_box[back -> gradient - 1]); combo_set_active (gradient_win -> d_box[back -> gradient - 1], back -> direction); show_the_widgets (gradient_win -> p_box); } else { hide_the_widgets (gradient_win -> dir); show_the_widgets (gradient_win -> color_box[0]); hide_the_widgets (gradient_win -> color_box[1]); for (i=0; i<2; i++) hide_the_widgets (gradient_win -> d_box[i]); hide_the_widgets (gradient_win -> p_box); } } /*! \fn G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) \brief window color chooser - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) { project * this_proj = (project *)data; if (response_id == GTK_RESPONSE_OK) { ColRGBA colo = get_window_color (GTK_WIDGET(win)); if (wc_cid == -2) { this_proj -> modelgl -> anim -> last -> img -> back -> color = colo; this_proj -> modelgl -> anim -> last -> img -> back -> gradient = 0; cleaning_shaders (this_proj -> modelgl, BACKG); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; if (this_proj -> modelgl -> gradient_win) { update_gradient_widgets (this_proj -> modelgl -> gradient_win, this_proj -> modelgl -> anim -> last -> img -> back); } } else if (wc_cid == -1) { this_proj -> modelgl -> anim -> last -> img -> abc -> color = colo; this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; } else { this_proj -> modelgl -> anim -> last -> img -> at_color[wc_cid] = colo; int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); int shader[1] = {POLYS}; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 0) re_create_md_shaders (1, shader, this_proj); } update (this_proj -> modelgl); } destroy_this_dialog (win); } /*! \fn void window_color (project * this_proj, glwin * view) \brief window color chooser - creating the dialog \param this_proj the target project \param view the target glwin */ void window_color (project * this_proj, glwin * view) { gchar * str; GdkRGBA col; if (wc_cid == -2) { str = g_strdup_printf (_("Background color")); col = colrgba_togtkrgba (view -> anim -> last -> img -> back -> color); } else if (wc_cid == -1) { str = g_strdup_printf (_("Model box color")); col = colrgba_togtkrgba (view -> anim -> last -> img -> abc -> color); } else { if (wc_cid < this_proj -> nspec) { str = g_strdup_printf (_("%s - atom(s) color"), this_proj -> chemistry -> label[wc_cid]); } else { str = g_strdup_printf (_("%s* - clone(s) color"), this_proj -> chemistry -> label[wc_cid-this_proj -> nspec]); } col = colrgba_togtkrgba (view -> anim -> last -> img -> at_color[wc_cid]); } GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(view -> win)); gtk_window_set_modal (GTK_WINDOW(win), TRUE); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(win), & col); g_free (str); run_this_gtk_dialog (win, G_CALLBACK(run_window_color), this_proj); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run background color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) \brief to run background color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *) data; wc_cid = -2; window_color (get_project_by_id(view -> proj), view); update (view); } /*! \fn G_MODULE_EXPORT void set_gradient_color (GtkColorChooser * colob, gpointer data) \brief change background color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_gradient_color (GtkColorChooser * colob, gpointer data) { tint * bid = (tint *)data; glwin * view; if (preferences) { switch (bid -> b) { case 0: tmp_background -> color = get_button_color (colob); break; default: tmp_background -> gradient_color[bid -> b -1] = get_button_color (colob); break; } } else { view = get_project_by_id(bid -> a) -> modelgl; switch (bid -> b) { case 0: view -> anim -> last -> img -> back -> color = get_button_color (colob); break; default: view -> anim -> last -> img -> back -> gradient_color[bid -> b -1] = get_button_color (colob); break; } } if (! preferences) { if (bid -> b) { view -> create_shaders[BACKG] = TRUE; } view -> create_shaders[MEASU] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_gradient_parameter (GtkWidget * widg, gpointer data) \brief set gradient parameter callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_gradient_parameter (GtkWidget * widg, gpointer data) { tint * bid = (tint *)data; glwin * view; gradient_edition * the_gradient; background * the_back; int i = combo_get_active (widg); if (preferences) { the_gradient = pref_gradient_win; the_back = tmp_background; switch (bid -> b) { case 0: tmp_background -> gradient = i; tmp_background -> direction = 0; break; case 1: tmp_background -> direction = i; break; } } else { view = get_project_by_id(bid -> a) -> modelgl; the_gradient = view -> gradient_win; the_back = view -> anim -> last -> img -> back; switch (bid -> b) { case 0: view -> anim -> last -> img -> back -> gradient = i; view -> anim -> last -> img -> back -> direction = 0; break; default: view -> anim -> last -> img -> back -> direction = i; break; } } update_gradient_widgets (the_gradient, the_back); if (! preferences) { if (! bid -> b && ! i) { cleaning_shaders (view, BACKG); } else { view -> create_shaders[BACKG] = TRUE; } view -> create_shaders[MEASU] = TRUE; update (view); } } /*! \fn void back_position_has_changed (gpointer data, GLfloat v) \brief change gradient mixed position \param data the associated data pointer \param v the new position value */ void back_position_has_changed (gpointer data, GLfloat v) { tint * bid = (tint *)data; if (preferences) { if (v >= 0.0 && v <= 1.0) tmp_background -> position = v; } else { glwin * view = get_project_by_id (bid -> a) -> modelgl; if (v >= 0.0 && v <= 1.0) view -> anim -> last -> img -> back -> position = v; view -> create_shaders[BACKG] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_back_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set gradient mixed position - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_back_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { back_position_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_back_position (GtkRange * range, gpointer data) \brief set gradient mixed position - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_back_position (GtkRange * range, gpointer data) { back_position_has_changed (data, (GLfloat) gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_gradient_delete (GtkWindow * widg, gpointer data) \brief gradient window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_gradient_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_gradient_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief gradient window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_gradient_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; view -> gradient_win -> win = destroy_this_widget (view -> gradient_win -> win); g_free (view -> gradient_win); view -> gradient_win = NULL; return TRUE; } /*! \fn G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data) \brief Background configuration window \param widg the widget sending the signal, if any \param the associated data pointer */ G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data) { GtkWidget * hbox, * vbox; GtkWidget * hhbox, * vvbox; gradient_edition * the_gradient; int back_gradient; int back_direction; float back_position; ColRGBA back_color; ColRGBA * gradient_color; glwin * view; vbox = create_vbox (BSEP); if (preferences) { the_gradient = pref_gradient_win; back_gradient = tmp_background -> gradient; back_direction = tmp_background -> direction; back_position = tmp_background -> position; back_color = tmp_background -> color; gradient_color = tmp_background -> gradient_color; } else { view = (glwin *)data; view -> gradient_win = g_malloc0(sizeof*view -> gradient_win); the_gradient = view -> gradient_win; back_gradient = view -> anim -> last -> img -> back -> gradient; back_direction = view -> anim -> last -> img -> back -> direction; back_position = view -> anim -> last -> img -> back -> position; back_color = view -> anim -> last -> img -> back -> color; gradient_color = view -> anim -> last -> img -> back -> gradient_color; } if (preferences) { the_gradient -> win = create_vbox (BSEP); adv_box (the_gradient -> win, _("Background settings"), 5, 120, 0.0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_gradient -> win, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 60); } else { gchar * str = g_strdup_printf (_("%s - background settings"), get_project_by_id(view -> proj)->name); the_gradient -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_gradient -> win, vbox); } int i, j; gchar * g_direction[2][9] = {{i18n("Top to Bottom"), i18n("Right to Left"), i18n("Bottom Right to Top Left"), i18n("Top Right to Bottom Left"), "", "", "", "", ""}, {i18n("Right to Left"), i18n("Left to Right"), i18n("Top to Bottom"), i18n("Bottom to Top"), i18n("Bottom Right to Top Left"), i18n("Bottom Left to Top Right"), i18n("Top Right to Bottom Left"), i18n("Top Left to Bottom Right"), i18n("Center")}}; int n_val[2] = {4, 9}; hbox = abox (vbox, _("Gradient type"), 5); the_gradient -> g_box = create_combo (); combo_text_append (the_gradient -> g_box, _("No Gradient")); combo_text_append (the_gradient -> g_box, _("Linear")); combo_text_append (the_gradient -> g_box, _("Circular")); combo_set_active (the_gradient -> g_box, back_gradient); gtk_widget_set_size_request (the_gradient -> g_box, 200, -1); g_signal_connect (G_OBJECT (the_gradient -> g_box), "changed", G_CALLBACK(set_gradient_parameter), (preferences) ? & pref_pointer[0] : & view -> colorp[0][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, the_gradient -> g_box, FALSE, FALSE, 20); the_gradient -> dir = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_gradient -> dir, FALSE, FALSE, 0); hbox = abox (the_gradient -> dir, _("Gradient direction"), 5); for (i=0; i<2; i++) { the_gradient -> d_box[i] = create_combo (); for (j=0; j d_box[i], _(g_direction[i][j])); } gtk_widget_set_size_request (the_gradient -> d_box[i], 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, the_gradient -> d_box[i], FALSE, FALSE, 20); } if (back_gradient) { combo_set_active (the_gradient -> d_box[back_gradient-1], back_direction); } for (i=0; i<2; i++) { g_signal_connect (G_OBJECT (the_gradient -> d_box[i]), "changed", G_CALLBACK(set_gradient_parameter), (preferences) ? & pref_pointer[1] : & view -> colorp[1][0]); } the_gradient -> color_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_gradient -> color_box[0], FALSE, FALSE, 20); abox (the_gradient -> color_box[0], _("Background color"), 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_gradient -> color_box[0], hbox, FALSE, FALSE, 5); vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 60); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hhbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label (_("Single color"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); the_gradient -> col_but = color_button (back_color, FALSE, 100, -1, G_CALLBACK(set_gradient_color), (preferences) ? & pref_pointer[0] : & view -> colorp[0][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, the_gradient -> col_but, FALSE, FALSE, 0); the_gradient -> color_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_gradient -> color_box[1], FALSE, FALSE, 20); abox (the_gradient -> color_box[1], _("Gradient colors"), 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_gradient -> color_box[1], hbox, FALSE, FALSE, 5); vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 60); gchar * c_name[2] = {i18n("First color"), i18n("Second color")}; for (i=0; i<2; i++) { hhbox = create_hbox (BSEP); // g_print ("col.r= %f, col.g= %f, col.b= %f\n", gradient_color[i].red, gradient_color[i].green, gradient_color[i].blue); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hhbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label (_(c_name[i]), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); the_gradient -> grad_but[i] = color_button (gradient_color[i], FALSE, 100, -1, G_CALLBACK(set_gradient_color), (preferences) ? & pref_pointer[i+1] : & view -> colorp[i+1][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, the_gradient -> grad_but[i], FALSE, FALSE, 0); } the_gradient -> p_box = abox (the_gradient -> color_box[1], _("Mixed position"), 5); the_gradient -> p_scale = create_hscale (0.0, 1.0, 0.001, back_position, GTK_POS_TOP, 3, 150, G_CALLBACK(set_back_position), G_CALLBACK(scroll_set_back_position), (preferences) ? & pref_pointer[0] : & view -> colorp[0][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_gradient -> p_box, the_gradient -> p_scale, FALSE, FALSE, 20); if (! preferences) { add_global_option (vbox, & view -> colorp[3][0]); add_gtk_close_event (the_gradient -> win, G_CALLBACK(on_gradient_delete), view); show_the_widgets (the_gradient -> win); update_gradient_widgets (the_gradient, view -> anim -> last -> img -> back); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run box color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) \brief to run box color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *) data; wc_cid = -1; window_color (get_project_by_id(view -> proj), view); view -> create_shaders[MDBOX] = TRUE; update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run atom color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) \brief to run atom color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; // g_debug ("Atom color:: proj= %d, id -> b= %d, id -> c= %d", id -> a, id -> b, id -> c); project * this_proj = get_project_by_id(id -> a); wc_cid = id -> c; window_color (this_proj, this_proj -> modelgl); int shaders[3] = {ATOMS, BONDS, SELEC}; re_create_md_shaders (3, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) \brief window to select a color - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (response_id == GTK_RESPONSE_OK) { if (g > 1) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c] = get_window_color (GTK_WIDGET(win)); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } destroy_this_dialog (win); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create a window to select a color callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) \brief create a window to select a color callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) #endif { qint * cid = (qint *)data; gchar * str, * env; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; switch (g) { case 0: str = g_strdup_printf (_("%s atom(s) %d fold coordination sphere color"), this_proj -> chemistry -> label[s], this_proj -> coord -> geolist[0][s][c]); break; case 1: env = env_name (this_proj, c, s, 1, NULL); str = g_strdup_printf (_("%s - %s coordination sphere color"), this_proj -> chemistry -> label[s], prepare_for_title(exact_name(env))); g_free (env); break; case 2: str = g_strdup_printf (_("Fragment N°%d color"), c); g = s; s = 0; break; case 3: str = g_strdup_printf (_("Molecule N°%d color"), c); g = s; s = 0; break; case 9: str = g_strdup_printf (_("%d atom chain(s) color"), this_proj -> coord -> geolist[g][0][c]); s = 0; break; default: str = g_strdup_printf (_("%s - %d atom ring(s) color"), _(rings_type[s]), this_proj -> coord -> geolist[g][0][c]); s = 0; break; } GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(this_proj -> modelgl -> win)); g_free (str); set_color_chooser_color (win, this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c]); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_window_set_modal ((GtkWindow *)win, TRUE); run_this_gtk_dialog (win, G_CALLBACK(run_window_color_coord), data); } atomes_1.3.1/src/opengl/win/w_atoms.c0000664000175000017500000005144415212624223017202 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_atoms.c * @short Functions to create the atom(s) / clone(s) advanced configuration window * @author Sébastien Le Roux */ /* * This file: 'w_atoms.c' * * Contains: * - The functions to create the atom(s) / clone(s) advanced configuration window * * List of functions: G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data); void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val); G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data); G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * prop_tab (glwin * view, int aoc); GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone); GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern void check_hidden_visible (project * this_proj); extern gchar * label_atpts (project * this_proj, glwin * view, int id); extern GtkWidget * labels_tab (glwin * view, int id); extern GtkWidget * selection_tab (atom_search * asearch, int nats); extern GtkTreeStore * atom_model; /*! \fn G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) \brief update atom radius callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) { int j; gchar * str; tint * the_data = (tint *)data; int a, t; a = the_data -> c; project * this_proj = get_project_by_id (the_data -> a); j = this_proj -> modelgl -> anim -> last -> img -> style; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int s = this_proj -> nspec; if (j == WIREFRAME || j == PUNT) { if (v > 0.0) { this_proj -> modelgl -> anim -> last -> img -> pointrad[a] = v; int shaders[2] = {ATOMS, SELEC}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } v = this_proj -> modelgl -> anim -> last -> img -> pointrad[a]; t = PUNT; } else { if (v > 0.0) { this_proj -> modelgl -> anim -> last -> img -> sphererad[a] = v; int shaders[2] = {ATOMS, SELEC}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } v = this_proj -> modelgl -> anim -> last -> img -> sphererad[a]; t = SPHERES; } update_entry_double (res, v); if (a < s) { str = label_atpts (this_proj, this_proj -> modelgl, t/PUNT); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(this_proj -> modelgl -> ogl_atoms[t-2]), str); #endif } else { str = label_atpts (opengl_project, opengl_project -> modelgl, 2+t/PUNT); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_atoms[t+2]), str); #endif } g_free (str); update (this_proj -> modelgl); } /*! \fn void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val) \brief prepare atom radii entry list \param win the GtkWidget sending the signal \param this_proj the target project \param nspec total number of chemical species \param aoc atom(s) (0) or clone(s) (1) \param val radii list */ void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val) { int i, j, k; GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbo; GtkWidget * rad; gchar * dim[2]={" pts"," Ã… "}; gchar * str; if (this_proj -> modelgl -> anim -> last -> img -> style == WIREFRAME || this_proj -> modelgl -> anim -> last -> img -> style == PUNT) { k = 0; } else { k = 1; } for (i=0; i chemistry -> label[i]); } else { str = g_strdup_printf (" %s*", this_proj -> chemistry -> label[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); j = i + aoc*nspec; rad = create_entry (G_CALLBACK(update_atom_size), 120, 15, FALSE, (gpointer)& this_proj -> modelgl -> colorp[0][j]); update_entry_double (GTK_ENTRY(rad), val[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); if (this_proj -> modelgl -> anim -> last -> img -> style == SPACEFILL) widget_set_sensitive (rad, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[k], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } show_the_widgets (vbox); } /*! \fn G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) \brief set atom parameter - creating the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; gchar * title[2][2] = {{i18n("Adjust atom sphere radius"), i18n("Adjust clone sphere radius")}, {i18n("Adjust atom point size"), i18n("Adjust clone point size")}}; opengl_project_changed (the_data -> a); int s = opengl_project -> nspec; double * val; int id = the_data -> b; int jd = the_data -> c; if (jd) { val = opengl_project -> modelgl -> anim -> last -> img -> pointrad; } else if (opengl_project -> modelgl -> anim -> last -> img -> style == SPACEFILL) { val = opengl_project -> modelgl -> anim -> last -> img -> atomicrad; } else { val = opengl_project -> modelgl -> anim -> last -> img -> sphererad; } GtkWidget * win = dialogmodal (_(title[jd][id]), GTK_WINDOW(opengl_project -> modelgl -> win)); atoms_input_win (win, opengl_project, s, id, val); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) \brief set atom color callback \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) { tint * the_data = (tint *)data; int a; project * this_proj = get_project_by_id(the_data -> a); a = the_data -> c; this_proj -> modelgl -> anim -> last -> img -> at_color[a] = get_button_color (colob); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) \brief toggle show/hide atom(s) callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) \brief toggle show/hide atom(s) callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; int i, j, k; i = id -> a; j = id -> b; k = id -> c; gboolean show = button_get_status ((GtkWidget *)but); #ifdef GTK4 project * this_proj = get_project_by_id (i); int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { this_proj -> atoms[l][m].show[j] = show; } } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = show; check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); #else gtk_check_menu_item_set_active ((GtkCheckMenuItem *)get_project_by_id(i) -> modelgl -> ogl_spec[j][k], show); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) \brief toggle show/hide label(s) callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) \brief toggle show/hide label(s) callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; int i, j, k; i = id -> a; j = id -> b; k = id -> c; gboolean show = button_get_status ((GtkWidget *)but); project * this_proj = get_project_by_id (i); #ifdef GTK4 int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { this_proj -> atoms[l][m].label[j] = show; } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], show); #endif } /*! \fn GtkWidget * prop_tab (glwin * view, int aoc) \brief create atom(s)/clone(s) properties tab \param view the target glwin \param aoc atom(s) (0) or clone(s) (1) */ GtkWidget * prop_tab (glwin * view, int aoc) { int i, j, k; gchar * str; GtkWidget * lab; GtkWidget * prop_box; GtkWidget * hbox; GtkWidget * but; GtkWidget * entry; project * this_proj = get_project_by_id(view -> proj); gchar * coln[5] = {i18n("Color"), i18n("Radius [Ã…]"), i18n("Show"), i18n("Label"), i18n("Size [pts]")}; int csize[5] = {60, 0, 25, 0, 0}; GtkWidget * prop = create_layout (-1, -1); GtkWidget * vbox = add_vbox_to_layout (prop, -1, -1); k = view -> anim -> last -> img -> style; prop_box = create_hbox (0); gtk_widget_set_size_request (prop_box, -1, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, prop_box, FALSE, TRUE, 0); for (i=0; i<4; i++) { if (i == 1 && (k == WIREFRAME || k == PUNT)) { str = g_strdup_printf ("%s", _(coln[4])); } else { str = g_strdup_printf ("%s", _(coln[i])); } lab = markup_label(str, -1, -1, 0.0, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, prop_box, lab, FALSE, FALSE, csize[i]); } for (i=0; i< this_proj -> nspec; i++) { hbox = create_hbox (0); //gtk_widget_set_size_request (hbox, -1, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 0); j = i + aoc * this_proj -> nspec; if (aoc == 0) { str = g_strdup_printf (" %s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf (" %s*", this_proj -> chemistry -> label[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 30, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); but = color_button (view -> anim -> last -> img -> at_color[j], TRUE, 80, -1, G_CALLBACK(set_atom_color), & view -> colorp[0][j]); if (aoc == 0) { str = g_strdup_printf (_("%s atom(s) color"), this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf (_("%s clone(s) color"), this_proj -> chemistry -> label[i]); } gtk_color_button_set_title (GTK_COLOR_BUTTON(but), str); g_free (str); if (this_proj -> modelgl -> anim -> last -> img -> color_map[0] != 0) { widget_set_sensitive (but, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); // Raduis entry entry = create_entry (G_CALLBACK(update_atom_size), 80, 10, FALSE, (gpointer)& this_proj -> modelgl -> colorp[0][j]); if (k == WIREFRAME || k == PUNT) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> pointrad[j]); } else if (k == BALL_AND_STICK || k == SPHERES) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> sphererad[j]); } else if (k == SPACEFILL) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> atomicrad[j]); widget_set_sensitive (entry, 0); } else { if (k == CYLINDERS) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> radall[aoc]); } widget_set_sensitive (entry, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); // Show/Hide check button add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, view -> anim -> last -> img -> show_atom[aoc][i], G_CALLBACK(toggled_show_hide_atom), & view -> colorp[aoc][i]), FALSE, FALSE, 30); // Show/Hide label check button add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, view -> anim -> last -> img -> show_label[aoc][i], G_CALLBACK(toggled_show_hide_label), & view -> colorp[aoc][i]), FALSE, FALSE, 5); } return prop; } /*! \fn G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) \brief free 'model_win' data \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); this_proj -> modelgl -> model_win[dat -> b] -> win = destroy_this_widget (this_proj -> modelgl -> model_win[dat -> b] -> win); g_free (this_proj -> modelgl -> model_win[dat -> b]); this_proj -> modelgl -> model_win[dat -> b] = NULL; g_free (this_proj -> modelgl -> search_widg[dat -> b]); this_proj -> modelgl -> search_widg[dat -> b] = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) \brief close event callback GTK4 \param widg the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) \brief close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_model (NULL, data); return FALSE; } /*! \fn GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) \brief create atom(s) advanced properties notebook \param view the target glwin \param atom_or_clone atom(s) or clone(s) (0/1) */ GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), prop_tab (view, atom_or_clone), gtk_label_new (_("Display properties"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), labels_tab (view, atom_or_clone), gtk_label_new (_("Label properties"))); if (view -> search_widg[atom_or_clone] == NULL) { view -> search_widg[atom_or_clone] = allocate_atom_search (view -> proj, atom_or_clone, atom_or_clone, get_project_by_id(view -> proj) -> natomes); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), selection_tab (view -> search_widg[atom_or_clone], get_project_by_id(view -> proj) -> natomes), gtk_label_new ((atom_or_clone) ? _("Clone(s) selection") : _("Atom(s) selection"))); return notebook; } /*! \fn GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) \brief create atom advanced properties window 'model_win' \param atom_or_clone atom(s) (0) or clone(s) (1) \param view the target glwin */ GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) { GtkWidget * aprop; gchar * win_title[2]={i18n("Atom(s) configuration - "), i18n("Clone(s) configuration - ")}; gchar * str = g_strdup_printf ("%s%s", _(win_title[atom_or_clone]), prepare_for_title(get_project_by_id(view -> proj)->name)); aprop = create_win (str, view -> win, FALSE, FALSE); int i = (get_project_by_id(view -> proj)-> natomes >= GTK_LIMIT) ? 170 : 0; gtk_widget_set_size_request (aprop, -1, 580+i); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, aprop, vbox); view -> model_win[atom_or_clone] -> notebook = advance_atom_notebook (view, atom_or_clone); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> model_win[atom_or_clone] -> notebook, TRUE, TRUE, 0); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_model), & view -> colorp[atom_or_clone][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); add_gtk_close_event (aprop, G_CALLBACK(close_event_model), & view -> colorp[atom_or_clone][0]); return aprop; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) \brief atom(s) property callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) \brief atom(s) property callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) #endif { tint * the_data = (tint *) data; int atom_or_clone = the_data -> b; project * this_proj = get_project_by_id (the_data -> a); if (this_proj -> modelgl -> model_win[atom_or_clone] == NULL) { this_proj -> modelgl -> model_win[atom_or_clone] = g_malloc0(sizeof*this_proj -> modelgl -> model_win[atom_or_clone]); this_proj -> modelgl -> model_win[atom_or_clone] -> win = advanced_atom_properties (atom_or_clone, this_proj -> modelgl); show_the_widgets (this_proj -> modelgl -> model_win[atom_or_clone] -> win); if (this_proj -> natomes < GTK_LIMIT) { hide_the_widgets (this_proj -> modelgl -> search_widg[atom_or_clone] -> info[1]); } else { hide_the_widgets (this_proj -> modelgl -> search_widg[atom_or_clone] -> id_box); } } if (GTK_IS_WIDGET(this_proj -> modelgl -> model_win[atom_or_clone] -> win)) { gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> model_win[atom_or_clone] -> notebook), the_data -> c); } else { show_warning (g_strdup_printf (_("Error impossible to display the model window for %s !"), (atom_or_clone) ? _("clones") : _("atoms")), this_proj -> modelgl -> win); } } atomes_1.3.1/src/opengl/win/w_spiner.c0000664000175000017500000001425315212624223017354 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_spiner.c * @short Functions to create the 'Spin' window * @author Sébastien Le Roux */ /* * This file: 'w_spiner.c' * * Contains: * - The functions to create the 'Spin' window * * List of functions: gboolean spin (gpointer data); static gboolean spin_wait_for_stop (gpointer data); G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data); G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); */ #include "global.h" #include "glview.h" extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); /*! \fn gboolean spin (gpointer data) \brief spin \param data the associated data pointer */ gboolean spin (gpointer data) { tint * val = (tint *) data; project * this_proj = get_project_by_id(val -> a); #ifdef DEBUG // g_debug (":: SPIN:: a= %d, c= %d", val -> a, val -> c); // g_debug (":: SPIN:: speed[c]= %d", this_proj -> modelgl -> spin_speed[val -> c]); #endif // The next 2 tests are required if a spinning project is closed // For some reason even after ending the spin the signal is not // terminated before deleting the project's glwin. if (this_proj) { if (this_proj -> modelgl) { if (this_proj -> modelgl -> spin[val -> c]) { save_rotation_quaternion (this_proj -> modelgl); double cameraAngle[2] = {0.0, 0.0}; cameraAngle[val -> c] = 0.1 * this_proj -> modelgl -> spin_speed[val -> c]; rotate_x_y (this_proj -> modelgl, cameraAngle[0], cameraAngle[1]); update (this_proj -> modelgl); return TRUE; } else { return FALSE; } } else { return FALSE; } } else { return FALSE; } } /*! \fn static gboolean spin_wait_for_stop (gpointer data) \brief spin and wait for stop \param data the associated data pointer */ static gboolean spin_wait_for_stop (gpointer data) { tint * val = (tint *) data; if (get_project_by_id(val -> a) -> modelgl -> spin[val -> c]) { return TRUE; } else { return FALSE; } } /*! \fn G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) \brief start spin \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) { tint * val = (tint *) data; glwin * view = get_project_by_id(val -> a) -> modelgl; int s = val -> b - 2; #ifdef DEBUG // g_debug (":: SPIN_GO:: a= %d, b= %d, c= %d, d=%d", val -> a, val -> b, val -> c, s); // g_debug (":: SPIN_GO:: speed[b]= %d", view -> spin_speed[val -> c]); #endif view -> spin_speed[val -> c] += s; if (view -> spin_speed[val -> c] == 0) { view -> spin[val -> c] = FALSE; g_timeout_add (REFRESH, (GSourceFunc) spin_wait_for_stop, data); } else if (! view -> spin[val -> c]) { view -> spin[val -> c] = TRUE; g_timeout_add (REFRESH, (GSourceFunc) spin, data); } } /*! \fn G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) \brief stop spin \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int i; for (i=0; i<2; i++) { view -> spin[i] = FALSE; view -> spin_speed[i] = 0; } //set_sensitive_coord_menu (view, TRUE); } /*! \fn G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) \brief create the spin window callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> spiner == NULL) { view -> spiner = g_malloc0(sizeof*view -> spiner); gchar * str = g_strdup_printf (_("%s - spin"), prepare_for_title(get_project_by_id(view -> proj) -> name)); view -> spiner -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * table = gtk_grid_new (); add_container_child (CONTAINER_WIN, view -> spiner -> win, table); view -> spiner -> right = create_button (_("Right"), IMG_STOCK, GO_RIGHT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[1][1]); view -> spiner -> left = create_button (_("Left"), IMG_STOCK, GO_LEFT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[3][1]); view -> spiner -> stop = create_button (_("Stop"), IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_stop), view); view -> spiner -> up = create_button (_("Up"), IMG_STOCK, GO_UP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[3][0]); view -> spiner -> down = create_button (_("Down"), IMG_STOCK, GO_DOWN, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[1][0]); gtk_grid_attach (GTK_GRID (table), view -> spiner -> right, 2,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> left, 0,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> stop, 1,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> up, 1,0,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> down, 1,2,1,1); add_gtk_close_event (view -> spiner -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> spiner -> win); gtk_window_set_resizable (GTK_WINDOW(view -> spiner -> win), FALSE); } else { show_the_widgets (view -> spiner -> win); } } atomes_1.3.1/src/opengl/win/glwindow.c0000664000175000017500000016236415212624223017367 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glwindow.c * @short Functions to create a project OpenGL window * @author Sébastien Le Roux */ /* * This file: 'glwindow.c' * * Contains: * - The functions to create a project OpenGL window * * List of functions: gboolean create_3d_model (int p, gboolean load); G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void update_all_menus (glwin * view, int nats); void menu_items_opengl (GtkWidget * menu, glwin * view, int pop); void menu_items_model (GtkWidget * menu, glwin * view, int pop); void menu_items_view (GtkWidget * menu, glwin * view, int popm); void prepare_opengl_menu_bar (glwin * view); void change_color_map (glwin * view, int col); void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state); void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view); void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data); void prep_model (int p); G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data); GtkWidget * prep_rings_menu (glwin * view, int id); GtkWidget * coord_menu (glwin * view); GtkWidget * menu_opengl (glwin * view, int pop); GtkWidget * menu_model (glwin * view, int pop); GtkWidget * menu_view (glwin * view, int popm); mat4_t insert_projection (glwin * view); vec3_t get_insertion_coordinates (glwin * view); */ #include "global.h" #include "project.h" #include "calc.h" #include "glview.h" #include "initcoord.h" #include "submenus.h" #include "color_box.h" #include "movie.h" extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data); extern void set_render (gpointer data); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern void set_sensitive_coord_menu (glwin * view, gboolean status); extern void set_color_map_sensitive (glwin * view); extern G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data); extern gboolean spin (gpointer data); extern G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); extern G_MODULE_EXPORT void spin_go (GtkWidget * widg, gpointer data); extern void update_menus (glwin * view); extern void set_this_style (glwin * view, int style); extern G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); extern void window_encode (glwin * view, gboolean video); extern GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); #ifdef GTK4 extern void update_menu_bar (glwin * view); extern G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); #endif extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern int selected_aspec; extern int is_selected; extern int is_labelled; extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); extern gchar * action_atoms[3]; extern int get_selection_type (glwin * view); extern GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]); atomic_object * copied_object = NULL; gchar * opengl_section_names[]={ i18n("General"), i18n("Analysis mode"), i18n("Edition mode") }; int opengl_group_by_section[] = { 5, 4, 3 }; gchar * opengl_group_names[]={i18n("Styles"), i18n("Measures"), i18n("Selection mode"), i18n("Window management"), i18n("Mouse mode"), i18n("Camera rotation"), i18n("Camera motion"), i18n("Camera spin"), i18n("Model interaction"), i18n("Coordinates rotation"), i18n("Coordinates translation"), i18n("Model interaction")}; int opengl_shortcut_by_group[] = { 10, 1, 4, 6, 2, // Global 4, 6, 6, 3, // Analysis 4, 6, 6 }; // Edition shortcuts opengl_shortcuts[] = { // // Global // { i18n("Atom(s) color map"), i18n("change atom(s) color map"), GDK_KEY_a, "a" }, { i18n("Polyhedra color map"), i18n("change polyhedra color map"), GDK_KEY_p, "p" }, { i18n("Balls and Sticks"), i18n("change global style to balls and sticks"), GDK_KEY_b, "b" }, { i18n("Cylinders"), i18n("change global style to cylinders"), GDK_KEY_c, "c" }, { i18n("Spheres"), i18n("change global style to spheres"), GDK_KEY_s, "s" }, { i18n("Covalent Radii"), i18n("change global style to covalent radii"), GDK_KEY_o, "o" }, { i18n("Ionic Radii"), i18n("change global style to ionic radii"), GDK_KEY_i, "i" }, { i18n("van der Waals Radii"), i18n("change global style to van der Waals radii"), GDK_KEY_v, "v" }, { i18n("In Crystal Radii"), i18n("change global style to in crystal radii"), GDK_KEY_r, "r" }, { i18n("Wireframes"), i18n("change global style to wireframes"), GDK_KEY_w, "w" }, // { i18n("All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures"), i18n("Show measures"), GDK_KEY_m, "m" }, // { i18n("Atom"), i18n("atom selection mode"), GDK_KEY_a, "a" }, { i18n("Coordination"), i18n("coordination sphere selection mode"), GDK_KEY_c, "c" }, { i18n("Fragment"), i18n("fragment selection mode"), GDK_KEY_f, "f" }, { i18n("Molecule"), i18n("molecule selection mode"), GDK_KEY_m, "m" }, // { i18n("Environments"), i18n("Environments window"), GDK_KEY_e, "e" }, { i18n("Measures"), i18n("Measures window"), GDK_KEY_m, "m" }, { i18n("Recorder"), i18n("Recorder window"), GDK_KEY_r, "r" }, { i18n("Create new project"), i18n("Create new project"), GDK_KEY_n, "n" }, { i18n("Enter fullscreen"), i18n("Enter fullscreen"), GDK_KEY_f, "f" }, { i18n("Exit fullscreen"), i18n("Exit fullscreen"), GDK_KEY_Escape, "Escape" }, // #ifdef OSX { i18n("Analysis mode"), i18n("Analysis mode"), GDK_KEY_a, "a" }, { i18n("Edition mode"), i18n("Edition mode"), GDK_KEY_e, "e" }, #else { i18n("Analysis mode"), i18n("Analysis mode"), GDK_KEY_a, "a" }, { i18n("Edition mode"), i18n("Edition mode"), GDK_KEY_e, "e" }, #endif // // Analysis // { i18n("Rotate right"), i18n("rotate right"), GDK_KEY_Right, "Right" }, { i18n("Rotate left"), i18n("rotate left"), GDK_KEY_Left, "Left" }, { i18n("Rotate up"), i18n("rotate up"), GDK_KEY_Up, "Up" }, { i18n("Rotate down"), i18n("rotate down"), GDK_KEY_Down, "Down" }, // { i18n("Move right"), i18n("move camera right"), GDK_KEY_Right, "Right" }, { i18n("Move left"), i18n("move camera left"), GDK_KEY_Left, "Left" }, { i18n("Move up"), i18n("move camera up"), GDK_KEY_Up, "Up" }, { i18n("Move down"), i18n("move camera down"), GDK_KEY_Down, "Down" }, { i18n("Zoom in"), i18n("zoom camera in"), GDK_KEY_Down, "Up" }, { i18n("Zoom out"), i18n("zoom camera out"), GDK_KEY_Down, "Down" }, // { i18n("Spin right"), i18n("rotate right"), GDK_KEY_Right, "Right" }, { i18n("Spin left"), i18n("rotate left"), GDK_KEY_Left, "Left" }, { i18n("Spin up"), i18n("rotate up"), GDK_KEY_Up, "Up" }, { i18n("Spin down"), i18n("rotate down"), GDK_KEY_Down, "Down" }, { i18n("Pause / restart"), i18n("pause / restart spinning"), GDK_KEY_space, "space" }, { i18n("Stop"), i18n("stop spinning"), GDK_KEY_s, "s" }, // { i18n("Label / unlabel all atom(s)"), i18n("Label / unlabel all atom(s)"), GDK_KEY_l, "l" }, { i18n("Select / unselect all atom(s)"), i18n("Select / unselect all atom(s)"), GDK_KEY_a, "a" }, { i18n("Copy selection"), i18n("Copy selection"), GDK_KEY_c, "c" }, // // Edition // { i18n("Rotate right"), i18n("rotate right"), GDK_KEY_Right, "Right" }, { i18n("Rotate left"), i18n("rotate left"), GDK_KEY_Left, "Left" }, { i18n("Rotate up"), i18n("rotate up"), GDK_KEY_Up, "Up" }, { i18n("Rotate down"), i18n("rotate down"), GDK_KEY_Down, "Down" }, // { i18n("Translate right"), i18n("move camera right"), GDK_KEY_Right, "Right" }, { i18n("Translate left"), i18n("move camera left"), GDK_KEY_Left, "Left" }, { i18n("Translate up"), i18n("move camera up"), GDK_KEY_Up, "Up" }, { i18n("Translate down"), i18n("move camera down"), GDK_KEY_Down, "Down" }, { i18n("Zoom in"), i18n("zoom camera in"), GDK_KEY_Up, "Up" }, { i18n("Zoom out"), i18n("zoom camera out"), GDK_KEY_Down, "Down" }, // { i18n("Label / unlabel all atom(s)"), i18n("Label / unlabel all atom(s)"), GDK_KEY_l, "l" }, { i18n("Select / unselect all atom(s)"), i18n("Select / unselect all atom(s)"), GDK_KEY_a, "a" }, { i18n("Copy selection"), i18n("Copy selection"), GDK_KEY_c, "c" }, { i18n("Cut selection"), i18n("Cut selection"), GDK_KEY_x, "x" }, { i18n("Paste selection"), i18n("Paste selection"), GDK_KEY_v, "v" }, { i18n("Delete selection"), i18n("Delete selection"), GDK_KEY_Delete, "Delete" } }; #ifdef GTK3 /*! \fn GtkWidget * prep_rings_menu (glwin * view, int id) \brief create the 'Rings' submenu GTK3 \param view the target glwin \param id atoms in ring(s) (0) or polyhedra from rings (1) */ GtkWidget * prep_rings_menu (glwin * view, int id) { if (id == 0) { return menu_rings (view, 0); } else { return menupoly (view, 0, 2, NULL); } } /*! \fn GtkWidget * coord_menu (glwin * view) \brief create the 'Coordination' submenu GTK3 \param view the target glwin */ GtkWidget * coord_menu (glwin * view) { int i, j, k; GtkWidget * widg; for (j=4; j<10; j++) { if (j<9) { if (view -> ogl_poly[0][j] != NULL) { for (k=0; k proj) -> coord -> totcoord[j]; k++) { if (view -> ogl_poly[0][j][k] != NULL) { if (GTK_IS_WIDGET(view -> ogl_poly[0][j][k])) { widg = gtk_widget_get_parent (view -> ogl_poly[0][j][k]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_poly[0][j][k]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[0][j][k]); } } } } } } if (view -> ogl_geom[0][j] != NULL) { for (k=0; k proj) -> coord -> totcoord[j]; k++) { if (view -> ogl_geom[0][j][k] != NULL) { if (GTK_IS_WIDGET(view -> ogl_geom[0][j][k])) { widg = gtk_widget_get_parent (view -> ogl_geom[0][j][k]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_geom[0][j][k]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[0][j][k]); } } } } } } if (view -> ogl_chains[0]) view -> ogl_chains[0] = destroy_this_widget (view -> ogl_chains[0]); for (i=0; i<2; i++) { for (j=2; j<4; j++) { detach_frag_mol_menu (view, i, j); } } for (i=1; i ogl_coord[i] = destroy_this_widget (view -> ogl_coord[i]); } for (i=0; i<2; i++) { view -> ogl_rings[i*6] = menu_item_new_with_submenu (_("Ring(s)"), view -> rings, prep_rings_menu (view, i*6)); } view -> ogl_chains[0] = menu_item_new_with_submenu (_("Chain(s)"), view -> chains, add_menu_coord (view, 0, 9)); view -> ogl_coord[1] = menu_coord (view, 0); view -> ogl_coord[2] = menu_item_new_with_submenu (_("Polyhedra"), TRUE, menu_poly (view, 0)); view -> ogl_coord[3] = menu_item_new_with_submenu (_("Fragment(s)"), get_project_by_id(view -> proj) -> coord -> totcoord[2], add_menu_coord (view, 0, 2)); view -> ogl_coord[4] = menu_item_new_with_submenu (_("Molecule(s)"), get_project_by_id(view -> proj) -> coord -> totcoord[3], add_menu_coord (view, 0, 3)); GtkWidget * menu = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[1]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[2]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_rings[0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_chains[0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[3]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[4]); gtk3_menu_item (menu, _("Advanced"), IMG_NONE, NULL, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); // add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); return menu; } #endif /*! \fn void update_all_menus (glwin * view, int nats) \brief update all menus of the OpenGL window \param view the target glwin \param nats the total number of atoms */ void update_all_menus (glwin * view, int nats) { #ifdef GTK3 int i, j, k, l; i = view -> anim -> last -> img -> style; j = (nats <= 10000) ? BALL_AND_STICK : DEFAULT_STYLE; if (i != j) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[j], FALSE); if (i != SPACEFILL) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[i], TRUE); set_style (view -> ogl_styles[i], & view -> colorp[i][0]); } else { i = view -> anim -> last -> img -> filled_type; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[i], TRUE); set_style (view -> filled_styles[i], & view -> colorp[OGL_STYLES+i][0]); } } i = view -> anim -> last -> img -> render; j = FILL; if (i != j) { set_render (& view -> colorp[i][0]); } update_menus (view); widget_set_sensitive (view -> ogl_box[0], active_cell -> ltype); if (view -> anim -> last -> img -> abc -> box == NONE) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], FALSE); set_box_axis_style (view -> ogl_box_axis[0][0], & view -> colorp[0][0]); } else { j = (view -> anim -> last -> img -> abc -> box == WIREFRAME) ? 1 : 2; k = j*j; l = (view -> anim -> last -> img -> abc -> box == WIREFRAME) ? CYLINDERS : WIREFRAME; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], TRUE); set_box_axis_style (view -> ogl_box_axis[0][0], & view -> colorp[0][0]); view -> anim -> last -> img -> abc -> box = l; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[i][j], TRUE); set_box_axis_style (view -> ogl_box_axis[0][j], & view -> colorp[k][0]); } if (view -> anim -> last -> img -> xyz -> axis == NONE) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], FALSE); set_box_axis_style (view -> ogl_box_axis[i][0], & view -> colorp[0][1]); } else { j = (view -> anim -> last -> img -> xyz -> axis == WIREFRAME) ? 1 : 2; k = j*j; l = (view -> anim -> last -> img -> xyz -> axis == WIREFRAME) ? CYLINDERS : WIREFRAME; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], TRUE); set_box_axis_style (view -> ogl_box_axis[1][0], & view -> colorp[0][1]); view -> anim -> last -> img -> xyz -> axis = l; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][j], TRUE); set_box_axis_style (view -> ogl_box_axis[1][j], & view -> colorp[k][1]); } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[view -> anim -> last -> img -> rep], TRUE); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[! view -> anim -> last -> img -> rep], FALSE); for (i=0; i<5; i++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], FALSE); if (view -> anim -> last -> img -> xyz -> t_pos != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+view -> anim -> last -> img -> xyz -> t_pos], TRUE); } set_advanced_bonding_menus (view); widget_set_sensitive (view -> ogl_clones[0], view -> allbonds[1]); update_rings_menus (view); update_chains_menus (view); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], view -> anim -> last -> img -> draw_clones); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], view -> anim -> last -> img -> cloned_poly); int * cmap = save_color_map (view); set_color_map_sensitive (view); if (view -> color_styles[0]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[0], TRUE); set_color_map (view -> color_styles[0], & view -> colorp[0][0]); } if (view -> color_styles[ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[ATOM_MAPS], TRUE); set_color_map (view -> color_styles[ATOM_MAPS], & view -> colorp[ATOM_MAPS][0]); } restore_color_map (view, cmap); g_free (cmap); #else update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) \brief render image from the OpenGL window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; window_encode (view, FALSE); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data) \brief view OpenGL window shortcuts callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void view_shortcuts (GtkWidget * widg, gpointer data) \brief OpenGL window shortcuts callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void view_shortcuts (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; view -> shortcuts = destroy_this_widget (view -> shortcuts); view -> shortcuts = shortcuts_window (G_N_ELEMENTS(opengl_group_by_section), opengl_group_by_section, G_N_ELEMENTS(opengl_shortcut_by_group), opengl_shortcut_by_group, opengl_section_names, opengl_group_names, opengl_shortcuts); } #ifdef GTK3 /*! \fn void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) \brief create the 'OpenGL' submenu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param pop main app (0) or popup (1) */ void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) { GtkWidget * style = gtk3_menu_item (menu, _("Style"), IMG_FILE, (gpointer)PACKAGE_MOL, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, get_project_by_id(view -> proj) -> nspec); gtk_menu_item_set_submenu ((GtkMenuItem *)style, menu_style(view, pop)); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Color Maps"), get_project_by_id(view -> proj) -> nspec, menu_map(view, pop))); gtk3_menu_item (menu, _("Material and Light(s)"), IMG_NONE, NULL, G_CALLBACK(opengl_advanced), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Render Image"), IMG_FILE, (gpointer)PACKAGE_IMG, G_CALLBACK(render_gl_image), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } /*! \fn GtkWidget * menu_opengl (glwin * view, int pop) \brief create the 'OpenGL' submenu GTK3 \param view the target glwin \param pop main app (0) or popup (1) */ GtkWidget * menu_opengl (glwin * view, int pop) { GtkWidget * menu = gtk_menu_new (); menu_items_opengl (menu, view, pop); return menu; } /*! \fn void menu_items_model (GtkWidget * menu, glwin * view, int pop) \brief create the 'Model' submenu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param pop main app (0) or popup (1) */ void menu_items_model (GtkWidget * menu, glwin * view, int pop) { if (get_project_by_id(view -> proj) -> nspec) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Atom(s)"), TRUE, menu_atoms (view, pop, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Bond(s)"), TRUE, menu_bonds (view, pop, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Clone(s)"), TRUE, menu_clones (view, pop))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, 0, 0)); } } /*! \fn GtkWidget * menu_model (glwin * view, int pop) \brief create the 'Model' submenu GTK3 \param view the target glwin \param pop main app (0) or popup (1) */ GtkWidget * menu_model (glwin * view, int pop) { GtkWidget * menu = gtk_menu_new (); menu_items_model (menu, view, pop); return menu; } /*! \fn void menu_items_view (GtkWidget * menu, glwin * view, int popm) \brief create the 'View' menu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param popm main app (0) or popup (1) */ void menu_items_view (GtkWidget * menu, glwin * view, int popm) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Representation"), TRUE, menu_rep (view, popm))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Projection"), TRUE, menu_proj (view))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Background"), TRUE, menu_back (view))); if (get_project_by_id(view -> proj) -> nspec) gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, popm, 1)); if (! popm) { add_menu_separator (menu); gtk3_menu_item (menu, _("Reset View"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Center Molecule"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); gtk3_menu_item (menu, _("Fullscreen"), IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } } /*! \fn GtkWidget * menu_view (glwin * view, int popm) \brief create the 'View' submenu GTK3 \param view the target glwin \param popm main app (0) or popup (1) */ GtkWidget * menu_view (glwin * view, int popm) { GtkWidget * menu = gtk_menu_new (); menu_items_view (menu, view, popm); return menu; } /*! \fn GtkWidget * menu_help (glwin * view, int popm) \brief create the 'Help' submenu GTK3 \param view the target glwin \param popm main app (0) or popup (1) */ GtkWidget * menu_help (glwin * view, int popm) { GtkWidget * menu; menu = gtk_menu_new (); gtk3_menu_item (menu, _("Shortcuts"), IMG_NONE, NULL, G_CALLBACK(view_shortcuts), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); return menu; } #endif /*! \fn void prepare_opengl_menu_bar (glwin * view) \brief update the OpenGL window menu bar \param view the target glwin */ void prepare_opengl_menu_bar (glwin * view) { #ifdef GTK3 // clean_all_menu_bar_widgets (view); view -> ogl_coord[0] = destroy_this_widget (view -> ogl_coord[0]); #endif view -> menu_bar = destroy_this_widget (view -> menu_bar); #ifdef GTK3 view -> menu_bar = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu ("OpenGL", TRUE, menu_opengl(view, 0))); project * this_proj = get_project_by_id (view -> proj); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu (_("Model"), this_proj -> nspec, menu_model(view, 0))); view -> ogl_coord[0] = create_menu_item (FALSE, _("Chemistry")); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, view -> ogl_coord[0]); widget_set_sensitive (view -> ogl_coord[0], this_proj -> nspec); if (this_proj -> nspec) { gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0], coord_menu (view)); } gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu (_("Tools"), TRUE, menu_tools(view, 0))); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu (_("View"), TRUE, menu_view(view, 0))); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_anim (view, 0)); show_the_widgets (view -> menu_bar); if (this_proj -> nspec) update_all_menus (view, this_proj -> natomes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, view -> menu_bar, TRUE, TRUE, 0); /* GtkWidget * menu = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Help"), TRUE, menu_help(view, 0))); add_box_child_end (view -> menu_box, menu, FALSE, FALSE, 0); show_the_widgets (menu);*/ show_the_widgets (view -> menu_bar); #else update_menu_bar (view); #endif } /*! \fn void change_color_map (glwin * view, int col) \brief change atom / polyhedra color map \param view the target glwin \param col the color id */ void change_color_map (glwin * view, int col) { int i, j; i = ATOM_MAPS-1; if (view -> custom_map) i++; if (view -> anim -> last -> img -> color_map[col] < i-1) { if (view -> anim -> last -> img -> color_map[col] < 2) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 2 && view -> adv_bonding[0]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 3 && view -> adv_bonding[1]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 4 && get_project_by_id(view -> proj) -> force_field[0]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else { j = col*ATOM_MAPS + ((view -> custom_map) ? 6 : 0); } } else { j = col*ATOM_MAPS; } gboolean was_input = reading_input; reading_input = TRUE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); set_color_map (view -> color_styles[j], & view -> colorp[j][0]); #else gchar * variant = g_strdup_printf ("set-%s.%d.0", (col) ? "pmap" : "amap", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, (col) ? "set-pmap" : "set-amap", g_variant_new_string((const gchar *)variant)); g_free (variant); #endif reading_input = was_input; } /*! \fn void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) \brief handle keyboard motion event on the OpenGL window \param view the target glwin \param axis axis \param da direction (-1/1) \param db zoom out (1) or zoom in (3) \param UpDown up or down key motion (TRUE), or else (FALSE) \param state keyboard modifier */ void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) { if (state & GDK_CONTROL_MASK) { if (view -> mode == EDITION) { vec3_t trans; if (axis) { trans = vec3(view -> anim -> last -> img -> p_depth*(double) da / view -> pixels[axis], 0.0, 0.0); } else { trans = vec3(0.0, view -> anim -> last -> img -> p_depth*(double) da / view -> pixels[axis], 0.0); } translate (get_project_by_id(view -> proj), 1, 1, trans); init_default_shaders (view); update (view); } else if (state & GDK_SHIFT_MASK) { spin_go (NULL, & view -> colorp[db][axis]); } else { view -> anim -> last -> img -> c_shift[! axis] += (double) da / view -> pixels[axis]; if (view -> rep_win) { if (view -> rep_win -> camera_widg[! axis + 5] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[! axis + 5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[! axis + 5], - view -> anim -> last -> img -> c_shift[! axis]); } } update (view); } } else if ((state & GDK_SHIFT_MASK) && UpDown) { if (db == 1 && view -> anim -> last -> img -> zoom > ZOOM_MAX) zoom (view, -1); if (db == 3) zoom (view, 1); update (view); } else if (state != GDK_SHIFT_MASK) { save_rotation_quaternion (view); double cameraAngle[2] = {0.0, 0.0}; cameraAngle[axis] = 0.5*da; rotate_x_y (view, cameraAngle[0], cameraAngle[1]); update (view); } } /*! \fn mat4_t insert_projection (glwin * view) \brief calculate the insertion projection matrix to insert object in the 3D window \param view the target glwin */ mat4_t insert_projection (glwin * view) { GLdouble w, h; GLdouble dw, dh; double gleft, gright, gbottom, gtop; double zoom = view -> anim -> last -> img -> zoom; zoom *= (view -> anim -> last -> img -> p_depth / view -> anim -> last -> img -> gnear); dw = view -> anim -> last -> img -> c_shift[0]*2.0*zoom; dh = view -> anim -> last -> img -> c_shift[1]*2.0*zoom; double aspect = (double)view -> pixels[0] / (double)view -> pixels[1]; if (aspect > 1.0) { w = zoom * aspect; h = zoom; } else { w = zoom; h = zoom / aspect; } gleft = -w + dw; gright = w + dw; gbottom = -h + dh; gtop = h + dh; return m4_ortho (gleft, gright, gbottom, gtop, -view -> anim -> last -> img -> gfar, view -> anim -> last -> img -> gfar); } /*! \fn vec3_t get_insertion_coordinates (glwin * view) \brief get the insertion coordinates to insert object in the 3D window \param view the target glwin */ vec3_t get_insertion_coordinates (glwin * view) { vec3_t pos; mat4_t insert_pmv_matrix; insert_pmv_matrix = m4_mul (insert_projection (view), view -> model_view_matrix); pos = vec3 (view -> mouseX, view -> mouseY, 0.75); return v3_un_project (pos, view -> view_port, insert_pmv_matrix); } /*! \fn void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view) \brief the keyboard shortcut actions for the OpenGL window \param action_string the variant string \param action_name the action name \param view the target glwin */ void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view) { GVariant * action_state = g_variant_new_string (action_string); g_action_group_activate_action ((GActionGroup *)view -> action_group, action_name, action_state); // g_variant_unref (action_state); } /*! \fn void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) \brief the keyboard shortcut actions for the OpenGL window \param keyval the key pressed \param state the keyboard modifier \param data the associated data pointer */ void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) { glwin * view = (glwin *)data; int i; switch (keyval) { case GDK_KEY_Escape: if (view -> fullscreen) { #ifdef GTK4 set_full_screen (NULL, NULL, view); #else set_full_screen (NULL, view); #endif } break; case GDK_KEY_Delete: if (get_project_by_id(view -> proj) -> natomes && ! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { opengl_project_changed (view -> proj); is_selected = 1; selected_aspec = -1; #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif } break; case GDK_KEY_space: if (get_project_by_id(view -> proj) -> natomes) { if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } else if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } } break; case GDK_KEY_a: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { opengl_project_changed (view -> proj); selected_aspec = -1; i = get_selection_type (view); if (view -> anim -> last -> img -> selected[i] -> selected == opengl_project -> natomes) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][0]); #else select_unselect_atoms (NULL, & view -> colorp[0][0]); #endif } else { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][1]); #else select_unselect_atoms (NULL, & view -> colorp[0][1]); #endif } } #ifdef GTK4 #ifdef OSX else if (state & GDK_META_MASK) #else else if (state & GDK_ALT_MASK) #endif #else else if (state & GDK_MOD1_MASK) #endif { if (view -> mode == EDITION) { #ifdef GTK4 activate_glwin_action ("set-mouse-mode.0.0", "set-mouse-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[0], TRUE); set_mode (view -> ogl_mode[0], & view -> colorp[0][0]); #endif } } else if (get_project_by_id(view -> proj) -> natomes) { change_color_map (view, 0); update (view); } break; case GDK_KEY_A: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.0.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[0], TRUE); set_selection_mode (view -> ogl_smode[0], & view -> colorp[0][0]); #endif } break; case GDK_KEY_b: set_this_style (view, BALL_AND_STICK); break; case GDK_KEY_c: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { if (view -> anim -> last -> img -> selected[0] -> selected) { opengl_project_changed (view -> proj); selected_aspec = -1; is_selected = 1; view -> nth_copy = 1; view -> insert_coords = get_insertion_coordinates (view); #ifdef GTK4 copy_the_atoms (NULL, NULL, & cut_sel); #else copy_the_atoms (NULL, & cut_sel); #endif update_insert_combos (); } else { if (copied_object) { g_free (copied_object); copied_object = NULL; } } } else { set_this_style (view, CYLINDERS); } } break; case GDK_KEY_C: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.1.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[1], TRUE); set_selection_mode (view -> ogl_smode[1], & view -> colorp[1][0]); #endif } break; case GDK_KEY_d: set_this_style (view, PUNT); break; case GDK_KEY_e: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { coord_properties (NULL, & view -> colorp[30][0]); } #ifdef GTK4 #ifdef OSX else if (state & GDK_META_MASK) #else else if (state & GDK_ALT_MASK) #endif #else else if (state & GDK_MOD1_MASK) #endif { if (view -> mode == ANALYZE && get_project_by_id(view -> proj) -> steps == 1) { #ifdef GTK4 activate_glwin_action ("set-mouse-mode.1.0", "set-mouse-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[1], TRUE); set_mode (view -> ogl_mode[1], & view -> colorp[1][0]); #endif } } } break; case GDK_KEY_f: #ifdef GTK4 if (state & GDK_CONTROL_MASK) set_full_screen (NULL, NULL, view); #else if (state & GDK_CONTROL_MASK) set_full_screen (NULL, view); #endif break; case GDK_KEY_F: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.2.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[2], TRUE); set_selection_mode (view -> ogl_smode[2], & view -> colorp[2][0]); #endif } break; case GDK_KEY_i: set_this_style (view, OGL_STYLES+1); break; case GDK_KEY_l: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { opengl_project_changed (view -> proj); selected_aspec = is_selected = -1; if (view -> labelled == opengl_project -> natomes*opengl_project -> steps) { #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif } else { #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); #endif } } break; case GDK_KEY_m: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { view -> anim -> last -> img -> m_is_pressed = 0; window_measures (NULL, view); } else if (view -> anim -> last -> img -> m_is_pressed < 2) { view -> anim -> last -> img -> m_is_pressed ++; } else { view -> anim -> last -> img -> m_is_pressed = 0; } view -> create_shaders[MEASU] = TRUE; update (view); } break; case GDK_KEY_M: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.3.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[3], TRUE); set_selection_mode (view -> ogl_smode[3], & view -> colorp[3][0]); #endif } break; case GDK_KEY_n: if (state & GDK_CONTROL_MASK && ! atomes_from_libreoffice) on_create_new_project (NULL, NULL); break; case GDK_KEY_o: set_this_style (view, OGL_STYLES); break; case GDK_KEY_p: if (get_project_by_id(view -> proj) -> natomes) change_color_map (view, 1); break; case GDK_KEY_r: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { window_recorder (NULL, (gpointer)view); } else { set_this_style (view, OGL_STYLES+3); } } break; if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) window_recorder (NULL, (gpointer)view); break; case GDK_KEY_s: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { spin_stop (NULL, data); } else { set_this_style (view, SPHERES); } } break; case GDK_KEY_v: if (state & GDK_CONTROL_MASK) { if (copied_object && ! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { //i = (! get_project_by_id(view -> proj) -> natomes) ? 1 : 0; opengl_project_changed (view -> proj); #ifdef GTK4 add_object (NULL, NULL, & view -> colorp[0][0]); #else add_object (NULL, & view -> colorp[0][0]); #endif view -> nth_copy ++; /*if (i) { i = activep; active_project_changed (view -> proj); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; bonds_update = 1; on_calc_bonds_released (NULL, NULL); active_project_changed (i); }*/ } } else { set_this_style (view, OGL_STYLES+2); } break; case GDK_KEY_w: set_this_style (view, WIREFRAME); break; case GDK_KEY_x: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { if (! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { if (view -> anim -> last -> img -> selected[0] -> selected) { opengl_project_changed (view -> proj); selected_aspec = -1; is_selected = 1; #ifdef GTK4 copy_the_atoms (NULL, NULL, & cut_sel); remove_the_atoms (NULL, NULL, & cut_sel); #else copy_the_atoms (NULL, & cut_sel); remove_the_atoms (NULL, & cut_sel); #endif } } } break; case GDK_KEY_Right: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 1, 1, 1, FALSE, state); break; case GDK_KEY_Left: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 1, -1, 3, FALSE, state); break; case GDK_KEY_Up: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 0, 1, 3, TRUE, state); break; case GDK_KEY_Down: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 0, -1, 1, TRUE, state); break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) \brief keyboard key press event for the OpenGL window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEventKey triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { glwin_key_pressed (event -> keyval, event -> state, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief keyboard key press event for the OpenGL window GTK4 \param self the GtkEventControllerKey sending the signal \param keyval number of times it was pressed \param keycode the key pressed \param state the keyboard modifier \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { glwin_key_pressed (keyval, state, data); return TRUE; } #endif /*! \fn G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) \brief realize event for the OpenGL window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; int * pix = get_project_by_id(view -> proj) -> tmp_pixels; int shift = 0; if (GTK_IS_WIDGET(view -> menu_bar)) shift = get_widget_height (view -> menu_bar); if (pix[0] > 0 && pix[1] > 0) { resize_this_window (view -> win, pix[0], pix[1]+shift); pix[0] = pix[1] = -1; } else { resize_this_window (view -> win, 500, 500); } } #ifdef GTK3 #ifdef LINUX /*! \fn void gtk_window_change_gdk_visual (GtkWidget * win) \brief change the Gdk visual \param win the GtkWidget sending the signal */ void gtk_window_change_gdk_visual (GtkWidget * win) { // GTK+ > 3.15.1 uses an X11 visual optimized for GTK+'s OpenGL stuff // since revid dae447728d: https://github.com/GNOME/gtk/commit/dae447728d // However, in some cases it simply cannot start an OpenGL context. // This changes to the default X11 visual instead the GTK's default. GdkScreen * screen = gdk_screen_get_default (); GList * visuals = gdk_screen_list_visuals (screen); // printf("n visuals: %u\n", g_list_length(visuals)); GdkX11Screen* x11_screen = GDK_X11_SCREEN (screen); g_assert (x11_screen != NULL); Visual * default_xvisual = DefaultVisual (GDK_SCREEN_XDISPLAY(x11_screen), GDK_SCREEN_XNUMBER(x11_screen)); GdkVisual * default_visual = NULL; // int i = 0; while (visuals != NULL) { GdkVisual * visual = GDK_X11_VISUAL (visuals -> data); if (default_xvisual -> visualid == gdk_x11_visual_get_xvisual(GDK_X11_VISUAL (visuals -> data)) -> visualid) { // printf("Default visual %d\n", i); default_visual = visual; } // i++; visuals = visuals -> next; } gtk_widget_set_visual (win, default_visual); } #endif #endif #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean do_not_hide (GtkWindow * win, gpointer data) \brief prevent to hide the OpenGL window in LibreOffice mode \param win the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean do_not_hide (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean do_not_hide (GtkWidget * win, GdkEvent * event, gpointer data) \brief revent to hide the OpenGL window in LibreOffice mode \param win the GtkWindow sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean do_not_hide (GtkWidget * win, GdkEvent * event, gpointer data) #endif { return TRUE; } gboolean create_3d_model (int p, gboolean load) { project * this_proj = get_project_by_id (p); #ifndef GTKGLAREA if (! glXQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), NULL, NULL)) { g_warning (_("Sorry OpenGL is not supported !")); return FALSE; } else #endif { if (this_proj -> modelgl) { g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; } this_proj -> modelgl = g_malloc0(sizeof*this_proj -> modelgl); this_proj -> modelgl -> init = FALSE; this_proj -> modelgl -> proj = this_proj -> id; GtkWidget * gl_vbox; if (load) { gchar * str = g_strdup_printf (_("%s - 3D view - [%s mode]"), this_proj -> name, _(mode_name[0])); this_proj -> modelgl -> win = create_win (str, MainWindow, FALSE, TRUE); #ifdef GTK3 #ifdef GTKGLAREA #ifdef LINUX if (! atomes_visual) gtk_window_change_gdk_visual (this_proj -> modelgl -> win); #endif #endif #endif // this_proj -> modelgl -> accel_group = gtk_accel_group_new (); // gtk_window_add_accel_group (GTK_WINDOW (this_proj -> modelgl -> win), this_proj -> modelgl -> accel_group); g_free (str); gl_vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, this_proj -> modelgl -> win, gl_vbox); this_proj -> modelgl -> menu_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> menu_box, FALSE, FALSE, 0); #ifdef GTK3 this_proj -> modelgl -> menu_bar = gtk_menu_bar_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> menu_box, this_proj -> modelgl -> menu_bar, TRUE, TRUE, 0); #endif } #ifdef GTKGLAREA this_proj -> modelgl -> plot = gtk_gl_area_new (); gtk_widget_set_can_focus (this_proj -> modelgl -> plot, TRUE); #ifdef GTK4 gtk_widget_set_focusable (this_proj -> modelgl -> plot, TRUE); #endif #else this_proj -> modelgl -> plot = gtk_drawing_area_new (); #endif gtk_widget_set_size_request (this_proj -> modelgl -> plot, 100, 100); #ifndef GTKGLAREA gtk_widget_set_double_buffered (this_proj -> modelgl -> plot, FALSE); this_proj -> modelgl -> glcontext = NULL; #endif gtk_widget_set_hexpand (this_proj -> modelgl -> plot, TRUE); gtk_widget_set_vexpand (this_proj -> modelgl -> plot, TRUE); #ifdef GTKGLAREA #ifdef GTK3 gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl -> plot), GDK_SCROLL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); #endif #else gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl -> plot), GDK_SMOOTH_SCROLL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); #endif #ifdef GTK4 if (load) { add_widget_gesture_and_key_action (this_proj -> modelgl -> win, NULL, NULL, NULL, NULL, NULL, NULL, "glwin-key-pressed", G_CALLBACK(on_glwin_key_pressed), this_proj -> modelgl, NULL, NULL, NULL, NULL, NULL, NULL); add_widget_gesture_and_key_action (this_proj -> modelgl -> plot, "glwin-button-pressed", G_CALLBACK(on_glwin_button_pressed), this_proj -> modelgl, "glwin-button-released", G_CALLBACK(on_glwin_button_released), this_proj -> modelgl, NULL, NULL, NULL, "glwin-pointer-motion", G_CALLBACK(on_glwin_pointer_motion), this_proj -> modelgl, "glwin-pointer-scroll", G_CALLBACK(on_glwin_pointer_scoll), this_proj -> modelgl); } else { add_widget_gesture_and_key_action (this_proj -> modelgl -> plot, "glwin-button-pressed", G_CALLBACK(on_lib_button_pressed), this_proj -> modelgl, "glwin-button-released", G_CALLBACK(on_lib_button_released), this_proj -> modelgl, NULL, NULL, NULL, "glwin-pointer-motion", G_CALLBACK(on_glwin_pointer_motion), this_proj -> modelgl, NULL, NULL, NULL); } #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "motion-notify-event", G_CALLBACK(on_motion), this_proj -> modelgl); g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-release-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl); if (load) { g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-press-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl); g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "scroll-event", G_CALLBACK(on_scrolled), this_proj -> modelgl); } else { g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-press-event", G_CALLBACK(on_lib_pressed), this_proj -> modelgl); } #endif if (load) { add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> plot, FALSE, TRUE, 0); #ifdef GTK3 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "key-press-event", G_CALLBACK(on_key_pressed), this_proj -> modelgl); #endif g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "realize", G_CALLBACK(on_win_realize), this_proj -> modelgl); if (atomes_from_libreoffice) { #ifdef GTK4 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "close-request", G_CALLBACK(do_not_hide), NULL); #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "delete-event", G_CALLBACK(do_not_hide), NULL); #endif } else { add_gtk_close_event (this_proj -> modelgl -> win, G_CALLBACK(hide_this_window), NULL); } } g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "realize", G_CALLBACK(on_realize), this_proj -> modelgl); #ifdef GTKGLAREA g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "render", G_CALLBACK(on_expose), this_proj -> modelgl); #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "draw", G_CALLBACK(on_expose), this_proj -> modelgl); #endif return TRUE; } } /*! \fn void prep_model (int p) \brief prepare, or display, the OpenGL model window \param p the project id */ void prep_model (int p) { project * this_proj = get_project_by_id (p); gboolean adv_bonding[2]; if (this_proj -> modelgl == NULL) { if (create_3d_model (p, TRUE)) { /*GtkWidget * dummy = create_menu_item (FALSE, "Dummy"); gtk_menu_shell_append ((GtkMenuShell *)this_proj -> modelgl -> menu_bar, dummy); show_the_widgets (this_proj -> modelgl -> win); destroy_this_widget (dummy);*/ show_the_widgets (this_proj -> modelgl -> win); } if (this_proj -> initgl) { active_project_changed (p); #ifdef GTK3 // GTK3 Menu Action To Check active_glwin -> ogl_box_axis[0] = g_malloc0(OGL_BOX*sizeof*active_glwin -> ogl_box_axis[0]); active_glwin -> ogl_box_axis[1] = g_malloc0(OGL_AXIS*sizeof*active_glwin -> ogl_box_axis[1]); #endif prepare_opengl_menu_bar (active_glwin); #ifdef GTK3 GtkWidget * menu = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Help"), TRUE, menu_help(active_glwin, 0))); add_box_child_end (active_glwin -> menu_box, menu, FALSE, FALSE, 0); show_the_widgets (menu); #endif if (reading_input) { adv_bonding[0] = (active_project -> natomes > ATOM_LIMIT) ? 0 : tmp_adv_bonding[0]; adv_bonding[1] = (active_project -> steps > reading_step_limit) ? 0 : tmp_adv_bonding[1]; frag_update = (active_project -> natomes > ATOM_LIMIT || trigger_fragment_analysis) ? 0 : 1; mol_update = (trigger_molecule_analysis) ? 1 : (frag_update) ? ((active_project -> steps > reading_step_limit) ? 0 : 1) : 0; } else { frag_update = (force_mol || trigger_fragment_analysis) ? 1 : (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (force_mol || trigger_molecule_analysis) ? 1 : (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; adv_bonding[0] = adv_bonding[1] = TRUE; } if (active_project -> natomes && adv_bonding[0] && adv_bonding[1]) { bonds_update = 1; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } } } else { if (gtk_widget_get_visible(this_proj -> modelgl -> win)) { hide_the_widgets (this_proj -> modelgl -> win); } else { show_the_widgets (this_proj -> modelgl -> win); } } } atomes_1.3.1/src/opengl/win/w_cutoffs.c0000664000175000017500000002271415212624223017526 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_cutoffs.c * @short Functions to create the bond cutoffs update dialog * @author Sébastien Le Roux */ /* * This file: 'w_cutoffs.c' * * Contains: * - The functions to create the bond cutoffs update dialog * * List of functions: void update_cutoffs (project * this_proj); void cut_box (project * this_proj, GtkWidget * vbox); G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" extern gchar * label_cutrab (project * this_proj, glwin * view, int id); double * tmpcut; /*! \fn void update_cutoffs (project * this_proj) \brief update bond cutoffs \param this_proj the target project */ void update_cutoffs (project * this_proj) { int i, j, k; k = 0; for (i=0; i nspec; i++, k++) { if (this_proj -> chemistry -> cutoffs[i][i] != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> cutoffs[i][i] = tmpcut[k]; this_proj -> dmtx = FALSE; } } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { if (this_proj -> chemistry -> cutoffs[i][j] != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> cutoffs[i][j] = this_proj -> chemistry -> cutoffs[j][i] = tmpcut[k]; this_proj -> dmtx = FALSE; } } } if (this_proj -> chemistry -> grtotcutoff != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> grtotcutoff = tmpcut[k]; this_proj -> dmtx = FALSE; } if (! this_proj -> dmtx && this_proj -> initgl) { if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } bonds_update = 1; frag_update = (this_proj -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((this_proj -> steps > STEP_LIMIT) ? 0 : 1) : 0; this_proj -> runc[0] = FALSE; if (this_proj -> id != activep) { k = activep; active_project_changed (this_proj -> id); on_calc_bonds_released (NULL, NULL); active_project_changed (k); } else { update_project (); on_calc_bonds_released (NULL, NULL); } } } /*! \fn G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) \brief change cutoff entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) { const gchar * m; int id = GPOINTER_TO_INT(data); m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (v >= 0.0) { tmpcut[id] = (v < 0.5) ? 0.5 : v; } update_entry_double (res, tmpcut[id]); } /*! \fn void cut_box (project * this_proj, GtkWidget * vbox) \brief box cutoff entries \param this_proj the target project \param vbox the GtkWidget sending the signal */ void cut_box (project * this_proj, GtkWidget * vbox) { int i, j, k; GtkWidget * vbo, * hbo, * cut; gchar * str; i = 1 + this_proj -> nspec * (this_proj -> nspec + 1) / 2; j = (this_proj -> nspec > 4) ? 500 : i * 37; GtkWidget * cutscroll = create_scroll (vbox, 350, j, GTK_SHADOW_NONE); vbo = create_vbox (BSEP); tmpcut = allocdouble (i); k = 0; for (i=0; i nspec; i++, k++) { hbo = create_hbox (0); gtk_widget_set_size_request (hbo, 250, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); str = g_strdup_printf ("%s - %s", exact_name(this_proj -> chemistry -> label[i]), exact_name(this_proj -> chemistry -> label[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> cutoffs[i][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> cutoffs[i][i]; } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { hbo = create_hbox (0); gtk_widget_set_size_request (hbo, 250, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); str = g_strdup_printf ("%s - %s", exact_name(this_proj -> chemistry -> label[i]), exact_name(this_proj -> chemistry -> label[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> cutoffs[i][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> cutoffs[i][j]; } } hbo = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); gtk_widget_set_size_request (hbo, 250, -1); str = g_strdup_printf (_("Total")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> grtotcutoff); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> grtotcutoff; add_container_child (CONTAINER_SCR, cutscroll, vbo); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Cutoff(s) must be ≥ 0.5 Å"), -1, -1, 0.5, 0.5), FALSE, FALSE, 10); } /*! \fn G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) \brief bond cutoffs window - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { gboolean upc = FALSE; if (opengl_project -> modelgl -> rings || opengl_project -> modelgl -> chains) { upc = ask_yes_no (_("Data can be lost !"), _("You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?"), GTK_MESSAGE_WARNING, GTK_WIDGET(win)); } else { upc = TRUE; } if (upc) { bonds_update = 1; update_cutoffs (opengl_project); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[7]), label_cutrab (opengl_project, opengl_project -> modelgl, 0)); #endif } } destroy_this_dialog (win); if (tmpcut) { g_free (tmpcut); tmpcut = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) \brief adjust bond cutoffs window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) \brief adjust bond cutoffs window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) #endif { tint * the_data = (tint *)data; int p = the_data -> a; opengl_project_changed (p); gchar * str = g_strdup_printf (_("Adjust cutoff radius(ii) - %s"), prepare_for_title(opengl_project -> name)); GtkWidget * win = dialog_cancel_apply (str, opengl_project -> modelgl -> win, FALSE); g_free (str); cut_box (opengl_project, dialog_get_content_area (win)); run_this_gtk_dialog (win, G_CALLBACK(run_window_cuts), NULL); } atomes_1.3.1/src/opengl/win/m_poly.c0000664000175000017500000003703715212624223017032 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_poly.c * @short Functions to create the 'Chemistry -> Polyhedra' submenus * @author Sébastien Le Roux */ /* * This file: 'm_poly.c' * * Contains: * - The functions to create the 'Chemistry -> Polyhedra' submenus * * List of functions: G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data); GtkWidget * mpoly (glwin * view, int jd, int id); GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln); GtkWidget * menu_poly (glwin * view, int id); GMenu * menu_show_coord_poly (glwin * view, int popm, int id); GMenu * menu_show_rings_poly (glwin * view, int popm, int id); GMenu * add_menu_poly (glwin * view, int popm, int aid); GMenu * menu_poly_rings (glwin * view, int popm); GMenu * menu_poly (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide polyhedra callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) \brief show / hide polyhedra callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) #endif { qint * obj = (qint *)data; int i, j; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id(obj -> a); int s = obj -> b; int c = obj -> c; int g = obj -> d; j = c; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } #ifdef DEBUG g_debug ("SHOW_HIDE_POLY:: p= %d, s= %d, c= %d, g= %d", this_proj -> id, s, c, g); #endif #ifdef GTK4 GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * poly = g_action_get_name ((GAction *)action); int lgt = strlen (poly); gchar * name = g_strdup_printf ("%c%c", poly[lgt-2], poly[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, poly); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j]; } #else show = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); #endif #ifdef GTK3 // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { for (i=0; i<2; i++) { if (widg != this_proj -> modelgl -> ogl_poly[i][g][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[i][g][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[i][g][j]) != show) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[i][g][j], show); } } } } } #endif if (doit) { this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j] = show; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); #ifdef GTK4 if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } #endif } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) \brief cloned polyehdra callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) \brief cloned polyehdra callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; gboolean doit = TRUE; gboolean show; #ifdef GTK4 const gchar * name = g_action_get_name ((GAction *)action); if (g_strcmp0(name, "set-cloned-poly.1.1") == 0) { g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-cloned-poly.0.0", NULL); doit = FALSE; } #endif if (doit) { #ifdef GTK4 GVariant * state; state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); #else show = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != view -> ogl_clones[5]) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], show); #endif view -> anim -> last -> img -> cloned_poly = show; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, get_project_by_id(view -> proj)); update (view); #ifdef GTK4 g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); #endif } } #ifdef GTK3 /*! \fn GtkWidget * mpoly (glwin * view, int jd, int id) \brief update the 'Polyhedra -> * -> Show/Hide' subemnus - GTK3 \param view the target glwin \param jd main app (0) or popup (1) \param id the type of coordination */ GtkWidget * mpoly (glwin * view, int jd, int id) { int i, j; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menup = gtk_menu_new (); if (is_coord_in_menu(id, this_proj)) { GtkWidget * pshow = create_menu_item (FALSE, _("Show/Hide")); GtkWidget * widg; gtk_menu_shell_append ((GtkMenuShell *)menup, pshow); GtkWidget * menus = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)pshow, menus); j = (id < 2) ? this_proj -> nspec : this_proj -> coord -> totcoord[id]; for (i=0; i oglmpv[jd][id][i])) { widg = gtk_widget_get_parent (view -> oglmpv[jd][id][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmpv[jd][id][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmpv[jd][id][i]); } gtk_menu_shell_append ((GtkMenuShell *)menus, view -> oglmpv[jd][id][i]); } } else { if (GTK_IS_WIDGET(view -> ogl_poly[jd][id][i])) { widg = gtk_widget_get_parent (view -> ogl_poly[jd][id][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_poly[jd][id][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[jd][id][i]); } gtk_menu_shell_append ((GtkMenuShell *)menus, view -> ogl_poly[jd][id][i]); } } } } add_advanced_item (menup, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[id][0], FALSE, 0, 0); return menup; } /*! \fn GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) \brief update the polyhedra submenus - GTK3 \param view the target glwin \param jd main app (0) or popup (1) \param id the type of coordination: total (0), partial (1), rings (2) \param poln the label of the menu item */ GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) { int i; GtkWidget * item; if (id > 1) { GtkWidget * menui = gtk_menu_new (); if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (jd == 0) { view -> ogl_rings[7+i] = create_menu_item (TRUE, _(rings_type[i])); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_rings[7+i], mpoly(view, jd, 4+i)); gtk_menu_shell_append ((GtkMenuShell *)menui, view -> ogl_rings[7+i]); } else { item = create_menu_item (TRUE, _(rings_type[i])); gtk_menu_shell_append ((GtkMenuShell *)menui, item); gtk_menu_item_set_submenu ((GtkMenuItem *)item, mpoly(view, jd, 4+i)); } } } } return menui; } else { GtkWidget * poly = create_menu_item (TRUE, poln); gtk_menu_item_set_submenu ((GtkMenuItem *)poly, mpoly (view, jd, id)); return poly; } } /*! \fn GtkWidget * menu_poly (glwin * view, int id) \brief create the 'Chemistry -> Polyehdra' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_poly (glwin * view, int id) { GtkWidget * menup = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menup, menupoly(view, id, 0, _("Total Coordination(s)"))); gtk_menu_shell_append ((GtkMenuShell *)menup, menupoly(view, id, 1, _("Partial Coordination(s)"))); if (id == 0) { gtk_menu_shell_append ((GtkMenuShell *)menup, view -> ogl_rings[6]); widget_set_sensitive (view -> ogl_rings[6], view -> rings); view -> ogl_clones[5] = gtk3_menu_item (menup, _("Cloned Polyhedra"), IMG_NONE, NULL, G_CALLBACK(cloned_poly), view, FALSE, 0, 0, TRUE, FALSE, view -> anim -> last -> img -> cloned_poly); } else { GtkWidget * item = create_menu_item (FALSE, _("Ring(s)")); gtk_menu_item_set_submenu ((GtkMenuItem *)item, menupoly(view, id, 2, NULL)); gtk_menu_shell_append ((GtkMenuShell *)menup, item); widget_set_sensitive (item, view -> rings); GtkWidget * cloned_p = gtk3_menu_item (menup, _("Cloned Polyhedra"), IMG_NONE, NULL, G_CALLBACK(cloned_poly), view, FALSE, 0, 0, TRUE, FALSE, view -> anim -> last -> img -> cloned_poly); widget_set_sensitive ((cloned_p), get_project_by_id(view -> proj) -> cell.pbc); } return menup; } #else /*! \fn GMenu * menu_show_coord_poly (glwin * view, int popm, int id) \brief create the 'Polyedra -> Coordination -> Show/Hide' submenus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param id the coordination type: total (0) or partial (1) */ GMenu * menu_show_coord_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); GMenu * menus; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i, j, k; for (i=0; i nspec; i++) { j = 0; menus = g_menu_new (); if (this_proj -> coord) { if (this_proj -> coord -> ntg[id]) { for (k=0; k coord -> ntg[id][k]; } for (k=0; k < this_proj -> coord -> ntg[id][i]; k++) { if (id) { stra = exact_name (env_name (this_proj, k, i, 1, NULL)); } else { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][i][k]); } strb = g_strdup_printf ("%s-%d-p", stra, id); append_opengl_item (view, menus, stra, strb, popm, k+j, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_poly), & view -> gcid[id][k+j][id], TRUE, view -> anim -> last -> img -> show_poly[id][k+j], FALSE, TRUE); g_free (stra); g_free (strb); } } } append_submenu (menu, this_proj -> chemistry -> label[i], menus); g_object_unref (menus); } return menu; } /*! \fn GMenu * menu_show_rings_poly (glwin * view, int popm, int id) \brief create the 'Ring(s) -> Show/Hide' subemnus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param id the ring(s) type */ GMenu * menu_show_rings_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); if (this_proj -> coord) { int i; gchar * stra, * strb; for (i=0; i coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][0][i]); strb = g_strdup_printf ("%d-%s-p", id, stra); append_opengl_item (view, menu, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_poly), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_poly[id][i], FALSE, TRUE); g_free (stra); g_free (strb); } } return menu; } /*! \fn GMenu * add_menu_poly (glwin * view, int popm, int aid) \brief create the 'Show/Hide' polyhedra subemnus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param aid coordination id */ GMenu * add_menu_poly (glwin * view, int popm, int aid) { GMenu * menu = g_menu_new (); if (aid < 2) { append_submenu (menu, _("Show/Hide"), menu_show_coord_poly (view, popm, aid)); } else { append_submenu (menu, _("Show/Hide"), menu_show_rings_poly (view, popm, aid)); } append_opengl_item (view, menu, _("Advanced"), "adv-p", popm, aid, NULL, IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[aid][0], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_poly_rings (glwin * view, int popm) \brief create the 'Polyhedra -> Ring(s)' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_poly_rings (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { append_submenu (menu, _(rings_type[i]), add_menu_poly(view, popm, 4+i)); } } return menu; } /*! \fn GMenu * menu_poly (glwin * view, int popm) \brief create the 'Chemistry -> Polyehdra' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_poly (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Total Coordination(s)"), add_menu_poly (view, popm, 0)); append_submenu (menu, _("Partial Coordination(s)"), add_menu_poly (view, popm, 1)); if (view -> rings) { append_submenu (menu, _("Ring(s)"), menu_poly_rings (view, popm)); } else { append_menu_item (menu, _("Ring(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_opengl_item (view, menu, _("Cloned Polyhedra"), "cloned-poly", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(cloned_poly), view, TRUE, view -> anim -> last -> img -> cloned_poly, FALSE, view -> allbonds[1]); return menu; } #endif atomes_1.3.1/src/opengl/win/m_map.c0000664000175000017500000012647415212624223016630 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_map.c * @short Functions to create the 'OpenGL -> Color Scheme(s)' submenus \n Functions to handle custom color maps * @author Sébastien Le Roux */ /* * This file: 'm_map.c' * * Contains: * - The functions to create the 'OpenGL -> Color Scheme(s)' submenus - The functions to handle custom color maps * * List of functions: gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init); gboolean open_save_map (FILE * fp, int act, project * this_proj); gboolean use_custom_color_map (int p); void init_map_range (colormap * map, int pts); void update_color_map (); void fill_map_model (GtkTreeStore * store, project * this_proj); G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_css_color_bar (colormap * map); GtkWidget * create_map_buttons (); GtkWidget * create_map_tree (project * this_proj); GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str); GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid); GtkWidget * menu_map (glwin * view, int id); GMenu * menump (glwin * view, int popm, int mid, int cid); GMenu * menu_map (glwin * view, int popm); colormap * allocate_color_map (int pts, project * this_proj); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" extern const gchar * dfi[2]; gboolean cmap_changed = FALSE; GtkWidget * map_but[3]; GtkTreeStore * map_model; colormap * the_map; colormap * tmp_map; GtkWidget * vcbox; GtkWidget * vbbox; GtkWidget * color_fix; GtkWidget * color_bar; float * tmp_data; /*! \fn GtkWidget * create_css_color_bar (colormap * map) \brief create the custom color map visualization widget \param map the custom color map to visualize */ GtkWidget * create_css_color_bar (colormap * map) { GtkWidget * colob; gchar * tmp; tmp = g_strdup_printf ("rgba(%d,%d,%d,%d) 0%%", (int)(map -> values[0].red*255.0), (int)(map -> values[0].green*255.0), (int)(map -> values[0].blue*255.0), (int)map -> values[0].alpha); int i, j, k; j = (map -> positions[0] < map -> cmax) ? 0 : 1; for (i=j; i points; i++) { k = (int)(100.0*(1.0 - (map -> positions[i] - map -> cmin)/(map -> cmax - map -> cmin))); k = (i == map -> points-1 && map -> positions[i] == map -> cmin) ? 100 : k; tmp = g_strdup_printf ("%s, rgba(%d,%d,%d,%d) %d%%", tmp, (int)(map -> values[i].red*255.0), (int)(map -> values[i].green*255.0), (int)(map -> values[i].blue*255.0), (int)map -> values[i].alpha, k); } if (map -> positions[i-1] < map -> cmin) { tmp = g_strdup_printf ("%s, rgba(%d,%d,%d,%d) %d%%", tmp, (int)(map -> values[i-1].red*255.0), (int)(map -> values[i-1].green*255.0), (int)(map -> values[i-1].blue*255.0), (int)map -> values[i-1].alpha, 100); } gchar * gradient = g_strdup_printf ("image#gradient {\n" " background-image: linear-gradient(to bottom, %s);\n" " min-width: 50px;\n" " min-height: 400px;\n" "}", tmp); g_free (tmp); provide_gtk_css (gradient); colob = gtk_image_new (); gtk_widget_set_name (colob, "gradient"); show_the_widgets (colob); //gtk_widget_set_size_request (colob, 100, 400); g_free (gradient); return colob; } /*! \fn void init_map_range (colormap * map, int pts) \brief initialize custom color map \param map the custom color map \param pts number of point(s) in the custom color map */ void init_map_range (colormap * map, int pts) { map -> points = pts; if (map -> positions != NULL) { g_free (map -> positions); map -> positions = NULL; } if (map -> values != NULL) { g_free (map -> values); map -> values = NULL; } map -> positions = allocfloat (pts); map -> values = g_malloc0(pts*sizeof*map -> values); int i; for (i=0; i positions[i] = map -> cmax - i*(map -> cmax - map -> cmin)/(pts - 1.0); map -> values[i].red = 1.0 - i / (pts - 1.0); map -> values[i].green = 0.0; map -> values[i].blue = i / (pts - 1.0); map -> values[i].alpha = 1.0; } } /*! \fn colormap * allocate_color_map (int pts, project * this_proj) \brief allocate custom color map data \param pts the number of data point(s) to create \param this_proj the target project */ colormap * allocate_color_map (int pts, project * this_proj) { colormap * map = g_malloc0(sizeof*map); map -> data = g_malloc0(this_proj -> steps*sizeof*map -> data); map -> colors = g_malloc0(this_proj -> steps*sizeof*map -> colors); int i; for (i=0; i steps; i++) { map -> data[i] = g_malloc0(this_proj -> natomes*sizeof*map -> data[i]); map -> colors[i] = g_malloc0(this_proj -> natomes*sizeof*map -> colors[i]); } return map; } /*! \fn gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init) \brief prepare the custom color map data \param data data value(s) if any \param this_proj the target project \param init initialize color map (0= no, 1= yes) */ gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init) { int i, j, k; gboolean action; float cmin, cmax; float delta; if (data != NULL) { k = 0; cmin = cmax = data[0]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { cmin = min(cmin, data[k]); cmax = max(cmax, data[k]); k ++; } } } if (init) { gchar * str = g_strdup_printf (_("Range: [min-max] = %f - %f"), cmin, cmax); action = ask_yes_no (_("Use this data set ?"), str, GTK_MESSAGE_QUESTION, NULL); } else { action = TRUE; } if (action) { if (init) { this_proj -> modelgl -> custom_map = allocate_color_map (2, this_proj); this_proj -> modelgl -> custom_map -> points = 2; } the_map = this_proj -> modelgl -> custom_map; if (data != NULL) { the_map -> cmin = cmin; the_map -> cmax = cmax; init_map_range (the_map, the_map -> points); k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { the_map -> data[i][j] = data[k]; k ++; } } } gboolean done; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { done = FALSE; for (k=0; k points-1; k++) { if (the_map -> data[i][j] <= the_map -> positions[k] && the_map -> data[i][j] > the_map -> positions[k+1]) { delta = (the_map -> data[i][j]-the_map -> positions[k])/(the_map -> positions[k] - the_map -> positions[k+1]); the_map -> colors[i][j].red = the_map -> values[k].red + delta * (the_map -> values[k].red - the_map -> values[k+1].red); the_map -> colors[i][j].green = the_map -> values[k].green + delta * (the_map -> values[k].green - the_map -> values[k+1].green); the_map -> colors[i][j].blue = the_map -> values[k].blue + delta * (the_map -> values[k].blue - the_map -> values[k+1].blue); the_map -> colors[i][j].alpha = 1.0; done = TRUE; } } if (! done) { if (the_map -> data[i][j] > the_map -> positions[0]) { the_map -> colors[i][j].red = the_map -> values[0].red; the_map -> colors[i][j].green = the_map -> values[0].green; the_map -> colors[i][j].blue = the_map -> values[0].blue; the_map -> colors[i][j].alpha = 1.0; } else if (the_map -> data[i][j] < the_map -> positions[the_map -> points-1]) { the_map -> colors[i][j].red = the_map -> values[the_map -> points-1].red; the_map -> colors[i][j].green = the_map -> values[the_map -> points-1].green; the_map -> colors[i][j].blue = the_map -> values[the_map -> points-1].blue; the_map -> colors[i][j].alpha = 1.0; } } } } } return action; } /*! \fn G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) \brief update color map point position \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) { int pts = GPOINTER_TO_INT (data); float pos = (float) gtk_spin_button_get_value (res); gboolean update = FALSE; if (pos >= tmp_map -> cmin && pos <= tmp_map -> cmax) { if (pos != tmp_map -> positions[pts]) { if (pts == 0) { update = (pos > tmp_map -> positions[1]) ? TRUE : FALSE; } else if (pts == tmp_map -> points-1) { update = (pos < tmp_map -> positions[pts-1]) ? TRUE : FALSE; } else { update = (pos < tmp_map -> positions[pts-1] && pos > tmp_map -> positions[pts+1]) ? TRUE : FALSE; } if (update) tmp_map -> positions[pts] = pos; } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_map -> positions[pts]); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) \brief select color map point color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) { int pts = GPOINTER_TO_INT (data); tmp_map -> values[pts] =get_button_color (colob); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn GtkWidget * create_map_buttons () \brief create custom color map position and color buttons */ GtkWidget * create_map_buttons () { GtkWidget * vbox = create_vbox(5); int i; GtkWidget * hbox; GtkWidget * fixed; for (i=0; i points; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(fixed), color_button(tmp_map -> values[i], FALSE, 100, 25, G_CALLBACK(set_point_color), GINT_TO_POINTER(i)), 0, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(fixed), spin_button (G_CALLBACK(set_point_position), tmp_map -> positions[i], tmp_map -> cmin, tmp_map -> cmax, 0.01, 3, 100, GINT_TO_POINTER(i)), 0, 0); } return vbox; } /*! \fn void update_color_map () \brief update color map visualization widget */ void update_color_map () { destroy_this_widget (vbbox); vbbox = create_map_buttons (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vcbox, vbbox, FALSE, FALSE, 0); show_the_widgets (vbbox); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) \brief add point to the custom color map \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) { //project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); int id = gtk_spin_button_get_value_as_int (res); if (id >= 2 && id != tmp_map -> points) { init_map_range (tmp_map, id); update_color_map (); } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_map -> points); } /*! \fn G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) \brief update color map min / max \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); gboolean update_cmap = FALSE; switch (i) { case 0: if (v > tmp_map -> cmin && v != tmp_map -> cmax) { tmp_map -> cmax = v; update_cmap = TRUE; } v = tmp_map -> cmax; break; case 1: if (v < tmp_map -> cmax && v != tmp_map -> cmin) { tmp_map -> cmin = v; update_cmap = TRUE; } v = tmp_map -> cmin; break; } update_entry_double(res, v); if (update_cmap) { //init_map_range (tmp_map, tmp_map -> points); update_color_map (); } } /*! \fn G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) \brief customize the color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { project * this_proj = (project *)data; the_map -> cmax = tmp_map -> cmax; the_map -> cmin = tmp_map -> cmin; the_map -> points = tmp_map -> points; g_free (the_map -> positions); the_map -> positions = duplicate_float (the_map -> points, tmp_map -> positions); g_free (the_map -> values); the_map -> values = duplicate_color (the_map -> points, tmp_map -> values); setup_custom_color_map (NULL, this_proj, FALSE); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) \brief customize the color map - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkWidget * win = dialogmodal (_("Edit color map"), GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), _("Apply"), GTK_RESPONSE_APPLY); gtk_widget_set_size_request (win, 300, -1); GtkWidget * vbox = dialog_get_content_area (win); tmp_map = g_malloc0(sizeof*tmp_map); tmp_map -> cmin = the_map -> cmin; tmp_map -> cmax = the_map -> cmax; tmp_map -> points = the_map -> points; tmp_map -> positions = duplicate_float (the_map -> points, the_map -> positions); tmp_map -> values = duplicate_color (tmp_map -> points, the_map -> values); // Button for number of colors GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Number of color points for the gradient: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin_button (G_CALLBACK(add_map_points), tmp_map -> points, 2, 100, 1, 0, 150, data), FALSE, FALSE, 25); // Max hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Initial value (overall max): "), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * entry = create_entry (G_CALLBACK(update_cmin_max), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_double (GTK_ENTRY(entry), (double)tmp_map -> cmax); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 25); // Min hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Final value (overall min): "), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(update_cmin_max), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), (double)tmp_map -> cmin); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 25); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); vcbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vcbox, FALSE, FALSE, 5); vbbox = create_map_buttons (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vcbox, vbbox, FALSE, FALSE, 0); color_fix = gtk_fixed_new (); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_fix, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_custom_mize_map), this_proj); } /*void map_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & i, -1); if (i > 0) { if (j == 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (j == 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } }*/ /*! \fn void fill_map_model (GtkTreeStore * store, project * this_proj) \brief fill color map tree strore \param store the GtkTreeStore to fill \param this_proj the target project */ void fill_map_model (GtkTreeStore * store, project * this_proj) { GtkTreeIter step_level, atom_level; int h, i, j; if (this_proj -> steps > 1) { for (h=0; h < this_proj -> steps; h++) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, -1); for (i=0; i < this_proj -> natomes; i++) { gtk_tree_store_append (store, & atom_level, & step_level); j = this_proj -> atoms[h][i].sp; gtk_tree_store_set (store, & atom_level, 0, -h-1, 1, this_proj -> chemistry -> label[j] , 2, i+1, 3, the_map -> data[h][i], -1); } } } else { for (i=0; i < this_proj -> natomes; i++) { gtk_tree_store_append (store, & atom_level, NULL); j = this_proj -> atoms[0][i].sp; gtk_tree_store_set (store, & atom_level, 0, this_proj -> chemistry -> label[j] , 1, i+1, 2, the_map -> data[0][i], -1); } } } /*! \fn G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) \brief render color map tree store cell \param cell the GtkCellRendererText to render \param path_string the path in the tree store \param new_text \param data the associated data pointer */ G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) { int i, j; project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(map_model), & iter, path); if (this_proj -> steps > 1) { gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 2, & j, -1); } else { i = -1; gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 1, & j, -1); } tmp_data[(-i-1)*this_proj -> natomes + j - 1] = string_to_double ((gpointer)new_text); if (this_proj -> steps > 1) { gtk_tree_store_set (map_model, & iter, 3, tmp_data[(-i-1)*this_proj -> natomes + j - 1], -1); } else { gtk_tree_store_set (map_model, & iter, 2, tmp_data[(-i-1)*this_proj -> natomes + j - 1], -1); } } /*! \fn GtkWidget * create_map_tree (project * this_proj) \brief create color map tree view \param this_proj the target project */ GtkWidget * create_map_tree (project * this_proj) { int i, j, k; GtkTreeViewColumn * map_col[4]; GtkCellRenderer * map_cell[4]; gchar * ctitle[4]={i18n("MD step"), i18n("Element"), i18n("Id."), i18n("Value")}; gchar * ctype[4]={"text", "text", "text", "text"}; GType col_type[2][4]= {{G_TYPE_STRING, G_TYPE_INT, G_TYPE_FLOAT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_FLOAT}}; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; map_model = gtk_tree_store_newv (3+j, col_type[j]); fill_map_model (map_model, this_proj); GtkWidget * map_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(map_model)); for (i=0; i<3+j; i++) { map_cell[i] = gtk_cell_renderer_text_new (); map_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i+k]), map_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(map_tree), map_col[i]); gtk_tree_view_column_set_alignment (map_col[i], 0.5); //gtk_tree_view_column_set_cell_data_func (map_col[i], map_cell[i], map_set_visible, GINT_TO_POINTER(i), NULL); if (i == 2+j) { g_object_set (map_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(map_cell[i]), "edited", G_CALLBACK(edit_map_cell), GINT_TO_POINTER(this_proj -> id)); } } return map_tree; } /*! \fn G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) \brief edit color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); setup_custom_color_map (tmp_data, this_proj, FALSE); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } g_free (tmp_data); destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) \brief edit color map - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkWidget * win = dialogmodal (_("Edit color map data"), GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), _("Apply"), GTK_RESPONSE_APPLY); gtk_widget_set_size_request (win, 250, 600); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * maps = create_scroll(NULL, -1, -1, GTK_SHADOW_NONE); tmp_data = allocfloat (this_proj -> natomes*this_proj -> steps); int i, j, k; k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { tmp_data[k] = the_map -> data[i][j]; k ++; } } add_container_child (CONTAINER_SCR, maps, create_map_tree (this_proj)); gtk_widget_set_size_request (maps, -1, 550); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, maps, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_edit_data_map), data); } /*! \fn gboolean open_save_map (FILE * fp, int act, project * this_proj) \brief open or save a custom color map to file \param fp the file pointer \param act action (0 = read, 1 = write) \param this_proj the target project */ gboolean open_save_map (FILE * fp, int act, project * this_proj) { int i, j; if (act == 0) { float * tmp_map = allocfloat (this_proj -> natomes*this_proj -> steps); rewind (fp); for (i=0; i natomes*this_proj -> steps; i++) { if (fscanf (fp, "%f", & tmp_map[i]) != 1) { show_error (_("Wrong file format !\n Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms"), 0, this_proj -> modelgl -> win); g_free (tmp_map); cmap_changed = FALSE; return FALSE; } } cmap_changed = setup_custom_color_map (tmp_map, this_proj, TRUE); g_free (tmp_map); widget_set_sensitive (map_but[1], cmap_changed); widget_set_sensitive (map_but[2], cmap_changed); return TRUE; } else { cmap_changed = FALSE; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fprintf (fp, "%f\n", this_proj -> modelgl -> custom_map -> data[i][j]) < 0) { show_error (_("Error while saving custom color map"), 0, this_proj -> modelgl -> win); return FALSE; } } } return TRUE; } } dint osmap; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) \brief open / save color map data - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) \brief open / save color map data - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif gboolean status = FALSE; gchar * datafile; FILE * fp; switch (response_id) { case GTK_RESPONSE_ACCEPT: datafile = file_chooser_get_file_name (chooser); fp = fopen (datafile, dfi[osmap.b]); if (fp != NULL) { status = open_save_map (fp, osmap.b, get_project_by_id(osmap.a)); } else { status = FALSE; } fclose (fp); break; default: status = TRUE; break; } if (status) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) \brief open / save color map data - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) { GtkFileFilter * filter1, * filter2; const gchar * res[2] = {i18n("Open"), i18n("Save")}; GtkFileChooserAction act[2] = {GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; gchar * title[2] = {i18n("Opening custom map for "), i18n("Saving custom map for ")}; osmap.a = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id(osmap.a); gchar * str; gboolean open_save = FALSE; if (the_map != NULL) { str = g_strdup_printf (_("Do you want to save the color map data")); open_save = ask_yes_no (_("Save color map data to file ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win); g_free (str); if (open_save) { osmap.b = 1; } else { str = g_strdup_printf (_("Do you want to read new color map data")); open_save = ask_yes_no (_("Read color map data from file ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win); g_free (str); osmap.b = 0; } } else { osmap.b = 0; open_save = TRUE; } if (open_save) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif str = g_strdup_printf ("%s%s", _(title[osmap.b]), prepare_for_title(this_proj -> name)); info = create_file_chooser (str, GTK_WINDOW(MainWindow), act[osmap.b], _(res[osmap.b])); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); g_free (str); #ifdef GTK3 if (osmap.b == 1) gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _("Raw data (*.dat)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), "*.dat"); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_open_save_data_map), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_open_save_data_map), NULL); #endif } } gboolean res_use_map; /*! \fn G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) \brief use custom color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { res_use_map = (cmap_changed || the_map != NULL) ? TRUE : FALSE; } else { res_use_map = the_map != NULL ? TRUE : FALSE; } destroy_this_dialog (win); } /*! \fn gboolean use_custom_color_map (int p) \brief use custom color map - creating the dialog \param p the target project id */ gboolean use_custom_color_map (int p) { project * this_proj = get_project_by_id(p); GtkWidget * win = dialogmodal (_("Custom color map settings"), GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (win); gchar * btitle[3] = {i18n("Import / Save data"), i18n("Edit data"), i18n("Customize color map")}; gchar * bimage[3] = {FOPEN, EDITA, EDITA}; GCallback handlers[3] = {G_CALLBACK(open_save_data_map), G_CALLBACK(edit_data_map), G_CALLBACK(custom_mize_map)}; int i; for (i=0; i<3; i++) { map_but[i] = create_button (_(btitle[i]), IMG_STOCK, bimage[i], 150, 50, GTK_RELIEF_NORMAL, handlers[i], GINT_TO_POINTER(p)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, map_but[i], FALSE, FALSE, 10); if (i > 0 && the_map == NULL) { widget_set_sensitive (map_but[i], 0); } } run_this_gtk_dialog (win, G_CALLBACK(run_use_color_map), NULL); // res_use_map is updated when running the dialog return res_use_map; } /*! \fn G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) \brief set color map callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; project * this_proj = get_project_by_id(the_data -> a); the_map = this_proj -> modelgl -> custom_map; int i, j, k, l; j = the_data -> b; k = j / ATOM_MAPS; i = this_proj -> modelgl -> anim -> last -> img -> color_map[k]; l = j - k*ATOM_MAPS; #ifdef GTK3 if (i != l && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (i != l) #endif { gboolean change_map = TRUE; gboolean didit = FALSE; if (j == 6 && ! the_map && ! k) { change_map = use_custom_color_map (the_data -> a); didit = TRUE; } else if (j == 6 && k && ! the_map) { change_map = FALSE; } if (change_map) { this_proj -> modelgl -> anim -> last -> img -> color_map[k] = NONE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[k*ATOM_MAPS+i], FALSE); if (j == 6) widget_set_sensitive (this_proj -> modelgl -> color_styles[ATOM_MAPS+POLY_MAPS-1], TRUE); if (widg != this_proj -> modelgl -> color_styles[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> color_map[k] = l; if (k == 0) { int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } else { int shaders[1] = {POLYS}; re_create_md_shaders (1, shaders, this_proj); } update (this_proj -> modelgl); if (j == 6 && ! didit && ! reading_input && ! k) use_custom_color_map (the_data -> a); } } #ifdef GTK3 else if (k*ATOM_MAPS+i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) \brief create a color map menu item \param view the target glwin \param m main app (0) or popup (1) \param mi the object (0 = atoms, 1 = polyhedra) \param mid the menu item id in [0, ATOM_MAPS-1] \param cid the active color map for object \param str the label of the menu item */ GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) { int v = mi*ATOM_MAPS + mid; if (m == 0) { view -> color_styles[v] = gtk3_menu_item (NULL, str, IMG_NONE, NULL, G_CALLBACK(set_color_map), & view -> colorp[v][0], FALSE, 0, 0, TRUE, TRUE, (cid == mid) ? TRUE : FALSE); if ((mi && (! view -> bonding || ! view -> custom_map)) || (mid == 3 && ! view -> adv_bonding[0]) || (mid == 4 && ! view -> adv_bonding[1]) || (mid == 5 && ! get_project_by_id(view -> proj) -> force_field[0])) { widget_set_sensitive (view -> color_styles[v], 0); } return view -> color_styles[v]; } else { GtkWidget * ats = gtk3_menu_item (NULL, str, IMG_NONE, NULL, G_CALLBACK(set_color_map), & view -> colorp[v][0], FALSE, 0, 0, TRUE, TRUE, (cid == mid) ? TRUE : FALSE); if ((mi && (! view -> bonding || ! view -> custom_map)) || (mid == 3 && ! view -> adv_bonding[0]) || (mid == 4 && ! view -> adv_bonding[1]) || (mid == 5 && ! get_project_by_id(view -> proj) -> force_field[0])) { widget_set_sensitive (ats, 0); } return ats; } } /*! \fn GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) \brief create the 'Color Scheme(s) - > *' submenus - GTK3 \param view the target glwin \param ncm menu item label for object \param mid the object (0 = atoms, 1 = polyhedra) \param id main app (0) or popup (1) \param cid the active color map for object */ GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) { GtkWidget * map = create_menu_item (TRUE, ncm); GtkWidget * mapm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)map, mapm); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 0, cid, _("Atomic Species"))); GtkWidget * cp = create_menu_item (FALSE, _("Atomic Coordination")); gtk_menu_shell_append ((GtkMenuShell *)mapm, cp); GtkWidget * mapn = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)cp, mapn); gtk_menu_shell_append ((GtkMenuShell *)mapn, mapw(view, mid, id, 1, cid, _("Total"))); gtk_menu_shell_append ((GtkMenuShell *)mapn, mapw(view, mid, id, 2, cid, _("Partial"))); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 3, cid, _("Fragment(s)"))); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 4, cid, _("Molecule(s)"))); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 5, cid, _("Force Field (DL_POLY)"))); if (id == 0) { gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 6, cid, _("Custom"))); } else { gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 6, cid, _("Use Atom(s) Custom Map"))); } return map; } /*! \fn GtkWidget * menu_map (glwin * view, int id) \brief create the 'OpenGL -> Color Scheme(s)' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_map (glwin * view, int id) { GtkWidget * menum = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menum, menump(view, _("Atoms & bonds"), id, 0, view -> anim -> last -> img -> color_map[0])); gtk_menu_shell_append ((GtkMenuShell *)menum, menump(view, _("Polyhedra"), id, 1, view -> anim -> last -> img -> color_map[1])); widget_set_sensitive (menum, get_project_by_id(view -> proj) -> nspec); return menum; } #else /*! \fn G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change color map callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * color = g_variant_get_string (parameter, NULL); int lgt = strlen (color); gchar * name = g_strdup_printf ("%c%c", color[lgt-2], color[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s", 8, color); if (g_strcmp0(name, "set-amap") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, color); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-amap", g_variant_new_string((const gchar *)name)); } else { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, color); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-pmap", g_variant_new_string((const gchar *)name)); } g_free (name); } else { int i; gchar * dot = g_strdup_printf ("%c", color[lgt-4]); gchar * col; if (g_strcmp0(dot, ".") == 0) { col = g_strdup_printf ("%c", color[lgt-3]); } else { col = g_strdup_printf ("%c%c", color[lgt-4], color[lgt-3]); } i = (int)string_to_double ((gpointer)col); set_color_map (NULL, & view -> colorp[i][0]); g_free (dot); g_free (col); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menump (glwin * view, int popm, int mid, int cid) \brief create the 'Color Scheme(s) - > *' submenus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param mid the object (0 = atoms, 1 = polyhedra) \param cid the active color map for object */ GMenu * menump (glwin * view, int popm, int mid, int cid) { gchar * mapname[2] = {"amap", "pmap"}; gboolean sensitive; GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Atomic Species"), mapname[mid], popm, mid*ATOM_MAPS, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 0) ? TRUE : FALSE, TRUE, TRUE); GMenu * menuf = g_menu_new (); append_opengl_item (view, menuf, _("Total(s)"), mapname[mid], popm, mid*ATOM_MAPS+1, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 1) ? TRUE : FALSE, TRUE, TRUE); append_opengl_item (view, menuf, _("Partial(s)"), mapname[mid], popm, mid*ATOM_MAPS+2, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 2) ? TRUE : FALSE, TRUE, TRUE); append_submenu (menu, _("Atomic Coordinations"), menuf); g_object_unref (menuf); sensitive = view -> adv_bonding[0]; append_opengl_item (view, menu, _("Fragment(s)"), mapname[mid], popm, mid*ATOM_MAPS+3, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 3) ? TRUE : FALSE, TRUE, sensitive); sensitive = view -> adv_bonding[1]; append_opengl_item (view, menu, _("Molecule(s)"), mapname[mid], popm, mid*ATOM_MAPS+4, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 4) ? TRUE : FALSE, TRUE, sensitive); sensitive = (get_project_by_id(view -> proj) -> force_field[0]) ? TRUE : FALSE; append_opengl_item (view, menu, _("Force Field (DL_POLY)"), mapname[mid], popm, mid*ATOM_MAPS+5, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 5) ? TRUE : FALSE, TRUE, sensitive); sensitive = (! mid) ? TRUE : (view -> custom_map) ? TRUE : FALSE; append_opengl_item (view, menu, (! mid) ? _("Custom") : _("Use Atom(s) Custom Map"), mapname[mid], popm, mid*ATOM_MAPS+6, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 6) ? TRUE : FALSE, TRUE, sensitive); return menu; } /*! \fn GMenu * menu_map (glwin * view, int popm) \brief create the 'OpenGL -> Color Scheme(s)' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_map (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Atoms & Bonds"), menump(view, popm, 0, view -> anim -> last -> img -> color_map[0])); append_submenu (menu, _("Polyhedra"), menump(view, popm, 1, view -> anim -> last -> img -> color_map[1])); return menu; } #endif atomes_1.3.1/src/opengl/win/m_axis.c0000664000175000017500000002732015212624223017005 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_axis.c * @short Functions to create the 'View -> Axis' submenu * @author Sébastien Le Roux */ /* * This file: 'm_axis.c' * * Contains: * - The functions to create the 'View -> Axis' submenu * * List of functions: void menu_axis (GtkWidget * menu_ab, glwin * view, int id); void menu_axis (GMenu * menu_ab, glwin * view, int popm); G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * axis_position_submenu (glwin * view, int id); GMenu * position_submenu (glwin * view, int popm, int pos); GMenu * axis_position_submenu (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); extern GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data); #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the axis advanced parameters window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { axis_advanced (NULL, data); } #endif #ifdef GTK3 /*! \fn G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) \brief handle change axis position signal GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) { /* TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4 */ tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> anim -> last -> img -> xyz -> t_pos; int j = the_data -> b; if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg) && i != j) { this_proj -> modelgl -> anim -> last -> img -> xyz -> t_pos = NONE; if (i != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+i], FALSE); } if (widg != this_proj -> modelgl -> ogl_box_axis[1][8+j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+j], TRUE); } this_proj -> modelgl -> anim -> last -> img -> xyz -> t_pos = j; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); if (this_proj -> modelgl -> axis_win) { if (this_proj -> modelgl -> axis_win -> templates && GTK_IS_WIDGET(this_proj -> modelgl -> axis_win -> templates)) { combo_set_active (this_proj -> modelgl -> axis_win -> templates, j); } } } else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { if (i != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+i], TRUE); } } } /*! \fn GtkWidget * axis_position_submenu (glwin * view, int id) \brief create the 'Axis -> Position' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * axis_position_submenu (glwin * view, int id) { int i, j, k; GtkWidget * menup = gtk_menu_new (); GtkWidget * ud, * udm, * widg; gchar * udlab[2] = {i18n("Top"), i18n("Bottom")}; gchar * lrlab[2] = {i18n("Right Corner"), i18n("Left Corner")}; i = 0; for (j=0; j<2; j++) { ud = create_menu_item (FALSE, _(udlab[j])); gtk_menu_shell_append ((GtkMenuShell *)menup, ud); udm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)ud, udm); for (k=0; k<2; k++) { if (id == 0) { view -> ogl_box_axis[1][8+i] = gtk3_menu_item (udm, _(lrlab[k]), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (view -> ogl_box_axis[1][8+i], 0); } else { widg = gtk3_menu_item (udm, _(lrlab[k]), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (widg, 0); } i += 1; } } if (id == 0) { view -> ogl_box_axis[1][8+i] = gtk3_menu_item (menup, _("Center"), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (view -> ogl_box_axis[1][8+i], 0); } else { widg = gtk3_menu_item (menup, _("Center"), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (widg, 0); } return menup; } /*! \fn void menu_axis (GtkWidget * menu_ab, glwin * view, int id) \brief create 'Axis' menu GTK3 \param menu_ab the GtkWidget sending the signal \param view the target glwin \param id main app (0) or popup (1) */ void menu_axis (GtkWidget * menu_ab, glwin * view, int id) { GtkWidget * widg = create_menu_item (FALSE, _("Length")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); GtkWidget * menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); gchar * str = g_strdup_printf (_(" Length [ %f Ã… ]"), view -> anim -> last -> img -> xyz -> length); if (id == 0) { view -> ogl_box_axis[1][7] = create_layout_widget (str, menul, view -> anim -> last -> img -> xyz -> axis, & view -> colorp[0][AXIS]); if (view -> anim -> last -> img -> xyz -> axis == NONE) { widget_set_sensitive (view -> ogl_box_axis[1][7], 0); } } else { widg = create_layout_widget (str, menul, view -> anim -> last -> img -> xyz -> axis, & view -> colorp[0][AXIS]); if (view -> anim -> last -> img -> xyz -> axis == NONE) { widget_set_sensitive (widg, 0); } } g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, menu_item_new_with_submenu (_("Position"), TRUE, axis_position_submenu(view, id))); add_advanced_item (menu_ab, G_CALLBACK(axis_advanced), (gpointer)view, FALSE, 0, 0); } #else /*! \fn G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle change axis position signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { /* TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4 */ tint * the_data = (tint *)data; glwin * view = get_project_by_id(the_data -> a) -> modelgl; const gchar * pos = g_variant_get_string (parameter, NULL); int lgt = strlen (pos); gchar * name = g_strdup_printf ("%c%c", pos[lgt-2], pos[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, pos); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-axis-pos", g_variant_new_string((const gchar *)name)); g_free (name); } else { int i; gchar * pos_name = NULL; for (i=0; i<5; i++) { pos_name = g_strdup_printf ("set-axis-pos.%d.0", i); if (g_strcmp0(pos, (const gchar *)pos_name) == 0) { view -> anim -> last -> img -> xyz -> t_pos = i; g_free (pos_name); pos_name = NULL; break; } g_free (pos_name); pos_name = NULL; } g_action_change_state (G_ACTION (action), parameter); view -> create_shaders[MAXIS] = TRUE; update (view); g_action_change_state (G_ACTION (action), parameter); if (view -> axis_win) { if (view -> axis_win -> templates && GTK_IS_WIDGET(view -> axis_win -> templates)) { combo_set_active (view -> axis_win -> templates, i); } } } } /*! \fn GMenu * position_submenu (glwin * view, int popm, int pos) \brief create elements of the 'Axis -> Position' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param pos position id */ GMenu * position_submenu (glwin * view, int popm, int pos) { GMenu * menu = g_menu_new (); gchar * lrlab[2] = {i18n("Right Corner"), i18n("Left Corner")}; int i, j; i = pos*2; for (j=0; j<2; j++) { append_opengl_item (view, menu, _(lrlab[j]), "axis-pos", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_axis_pos_radio), & view -> colorp[i][0], FALSE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE, TRUE, TRUE); i ++; } return menu; } /*! \fn GMenu * axis_position_submenu (glwin * view, int popm) \brief create the 'Axis -> Position' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * axis_position_submenu (glwin * view, int popm) { int i; GMenu * menu = g_menu_new (); gchar * udlab[2] = {i18n("Top"), i18n("Bottom")}; for (i=0; i<2; i++) { append_submenu (menu, _(udlab[i]), position_submenu(view, popm, i)); } append_opengl_item (view, menu, _("Center"), "axis-pos", popm, 4, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_axis_pos_radio), & view -> colorp[4][0], FALSE, (view -> anim -> last -> img -> xyz -> t_pos == 4) ? TRUE: FALSE, TRUE, TRUE); return menu; } /*! \fn void menu_axis (GMenu * menu_ab, glwin * view, int popm) \brief create the 'Axis' submenu GTK4 \param menu_ab the menu to attach the new menu to \param view the target glwin \param popm main app (0) or popup (1) */ void menu_axis (GMenu * menu_ab, glwin * view, int popm) { GMenuItem * item = g_menu_item_new (_("Length"), (view -> anim -> last -> img -> xyz -> axis) != NONE ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", "axis-length", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, AXIS, NONE)); g_menu_append_item (menu_ab, item); append_submenu (menu_ab, _("Position"), axis_position_submenu(view, popm)); append_opengl_item (view, menu_ab, _("Advanced"), "axis-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(to_axis_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); } #endif atomes_1.3.1/src/opengl/win/popup.c0000664000175000017500000044444515212624223016703 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file popup.c * @short Functions to create the OpenGL window popup menus: - The main popup menu \n - The contextual, atom or bond related, popup menus * @author Sébastien Le Roux */ /* * This file: 'popup.c' * * Contains: * - The functions to create the OpenGL window popup menus: - The main popup menu - The contextual, atom or bond related, popup menus * * List of functions: int get_to_be_selected (glwin * view); int get_style (gchar * str); int check_label_numbers (project * this_proj, int types); gchar * get_object_from_action (GSimpleAction * action); void to_remove_this_object (int type, gpointer data); void to_replace_this_object (int type, GSimpleAction * action, gpointer data); void to_replace_this_object (int type, GtkWidget * widg, gpointer data); void copy_bond_selection (); void remove_object (); void insert_object (int action, gpointer data); void check_hidden_visible (project * this_proj); void create_new_project_using_data (atom_selection * selection); void add_style_sub_menu (GtkWidget * item, GCallback handler, gpointer data); void add_edition_sub_menu (GtkWidget * item, GCallback handler, gpointer data); void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data); void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol); void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc); void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu); void popup_main_menu (glwin * view, double ptx, double pty); G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data); GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data); GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c); GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data); GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data); GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c); GMenu * tools_section (glwin * view); GMenu * anim_section (glwin * view); atom_search * free_this_search_data (atom_search * this_search); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "workspace.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #include "color_box.h" #include "bind.h" #include "atom_edit.h" #define CONTEXTACT 12 extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern void check_all_trees (project * this_proj); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern void apply_project (gboolean showtools); extern GtkWidget * field_atom_menu (int p, int s, int a, int f); extern void reset_coordinates (project * this_proj, int status); extern vec3_t get_bary (project * this_proj, int status); extern void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible); extern insertion_menu mol[]; extern atom_in_selection * new_atom_in_selection (int id, int sp); extern int inserted_from_lib; extern void duplicate_material_and_lightning (image * new_img, image * old_img); #ifdef GTK4 extern GSimpleActionGroup * view_pop_actions; extern G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); #endif extern G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data); atom_search * remove_search = NULL; atom_search * insert_search = NULL; int selected_atom; int selected_btom; int selected_aspec; int selected_bspec; int is_selected; int is_labelled; atom_selection * bond_selection = NULL; tint atoid[CONTEXTACT][4]; dint btoid; /*! \fn int get_to_be_selected (glwin * view) \brief find which atom(s) are to be selected \param view the target glwin */ int get_to_be_selected (glwin * view) { if (view -> atom_win && ! column_label) { return (view -> atom_win -> visible || view -> selection_mode == NSELECTION-1) ? 1 : 0; } else { return 0; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set full screen callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) \brief set full screen callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; if (! view -> fullscreen) { gtk_window_fullscreen (GTK_WINDOW(view -> win)); hide_the_widgets (view -> menu_box); view -> fullscreen = TRUE; } else { gtk_window_unfullscreen (GTK_WINDOW(view -> win)); show_the_widgets (view -> menu_box); view -> fullscreen = FALSE; } } /*! \fn int get_style (gchar * str) \brief get OpenGL rendering style id \param str */ int get_style (gchar * str) { int i; #ifdef GTK4 i = strlen (str); return (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[i-1])); #else for (i=0; i proj); g_free (this_search); clean_other_window_after_edit (this_proj); if (this_proj -> modelgl -> atom_win) { if (! this_proj -> modelgl -> atom_win -> visible) { if (! this_proj -> modelgl -> cell_win || ! this_proj -> modelgl -> cell_win -> slab_passivate) { g_free (this_proj -> modelgl -> atom_win); this_proj -> modelgl -> atom_win = NULL; } } } return NULL; } /*! \fn void to_remove_this_object (int type, gpointer data) \brief remove a type of object \param type the type of object to remove (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param data the associated data pointer */ void to_remove_this_object (int type, gpointer data) { int i, j; atom_in_selection * selat; tint * sel; prepare_atom_edition (& opengl_project -> modelgl -> colorp[0][0], FALSE); remove_search = allocate_atom_search (opengl_project -> id, REMOVE, REMOVE, opengl_project -> natomes); switch (type) { case 0: i = GPOINTER_TO_INT(data); remove_search -> todo[i] = 1; break; case 1: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { remove_search -> todo[j] = 1; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { remove_search -> todo[j] = 1; } } } break; case 2: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; gboolean doit; for (j=0; j natomes; j++) { doit = FALSE; if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } else if (sel -> a == 2) { doit = TRUE; } else if (opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } if (doit) { remove_search -> todo[j] = 1; } } } break; case 3: selat = bond_selection -> first; for (i=0; i selected ; i++) { j = selat -> id; remove_search -> todo[j] = 1; selat = selat -> next; } break; } } /*! \fn gchar * get_object_from_action (GSimpleAction * action) \brief get object name from action name GTK4 \param action the GAction sending the signal */ gchar * get_object_from_action (GSimpleAction * action) { int i, j, k; const gchar * act = g_action_get_name(G_ACTION(action)); gchar * act_end; gchar * str; k = strlen (act); if (strstr(act, "set-mol-ins")) { act_end = g_strdup_printf ("%c%c", act[k-4], act[k-3]); for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].object) { str = (i < 10) ? g_strdup_printf (".%d", i) : g_strdup_printf ("%d", i); if (g_strcmp0(str, act_end) == 0) { g_free (str); g_free (act_end); if (i == 9 || i == 13 || i == 16 || i == 17) { return g_strdup_printf ("%s", _(mol[i].object)); } else { return g_strdup_printf ("%s", mol[i].object); } break; } g_free (str); } } g_free (act_end); } if (strstr(act, "set-ifp")) { act_end = g_strdup_printf ("%c%c%c%c", act[k-6], act[k-5], act[k-4], act[k-3]); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { for (j=0; j<3; j++) { str = g_strdup_printf ("-%d.%d", j, i); if (g_strcmp0(str, act_end) == 0) { g_free (str); g_free (act_end); return g_strdup_printf (_("%s in %s"), _(action_atoms[j]), g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1)); } g_free (str); } } } g_free (act_end); } return NULL; } #ifdef GTK4 /*! \fn void to_replace_this_object (int type, GSimpleAction * action, gpointer data) \brief replace a type of object GTK4 \param type the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param action the GAction sending the signal \param data the associated data pointer */ void to_replace_this_object (int type, GSimpleAction * action, gpointer data) #else /*! \fn void to_replace_this_object (int type, GtkWidget * widg, gpointer data) \brief replace a type of object GTK3 \param type the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param widg the GtkWidget sending the signal \param data the associated data pointer */ void to_replace_this_object (int type, GtkWidget * widg, gpointer data) #endif { int h, i, j; atom_in_selection * selat; tint * sel; gboolean replace = TRUE; if (opengl_project -> modelgl -> cell_win) { if (opengl_project -> modelgl -> cell_win -> cut_this_slab) replace = FALSE; } if (replace) { prepare_atom_edition (& opengl_project -> modelgl -> colorp[0][0], FALSE); insert_search = allocate_atom_search (opengl_project -> id, REPLACE, REPLACE, opengl_project -> natomes); } else { insert_search = opengl_project -> modelgl -> search_widg[8]; } gchar * lab; #ifdef GTK4 if (action != NULL) { lab = get_object_from_action (action); } #else if (widg != NULL) { lab = g_strdup_printf ("%s", gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); } #endif else { lab = g_strdup_printf (_("Copied Data")); } h = get_selected_object_id (FALSE, opengl_project -> id, lab, insert_search); g_free (lab); if (h != 0) { switch (type) { case 0: i = GPOINTER_TO_INT(data); to_insert_in_project (h, i, opengl_project, insert_search, FALSE); insert_search -> todo[i] = 1; break; case 1: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } else if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } break; case 2: sel = (tint * )data; gboolean doit; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { doit = FALSE; if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } else if (sel -> a == 2) { doit = TRUE; } else if (opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } if (doit) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } } break; case 3: selat = bond_selection -> first; for (i=0; i selected ; i++) { j = selat -> id; to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; selat = selat -> next; } break; } } } /*! \fn void copy_bond_selection () \brief copy bond selection */ void copy_bond_selection () { if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); atom_in_selection * selat = bond_selection -> first; while (selat) { pasted_todo[selat -> id] = 1; selat = selat -> next; } copied_object = create_object_from_selection (opengl_project); } /*! \fn void remove_object () \brief remove object using 'remove_search' */ void remove_object () { gchar * str; gboolean vis = (opengl_project -> modelgl -> atom_win) ? opengl_project -> modelgl -> atom_win -> visible : FALSE; int i = action_atoms_from_project (opengl_project, remove_search, vis); remove_search = free_this_search_data (remove_search); if (! opengl_project -> modelgl -> cell_win || ! opengl_project -> modelgl -> cell_win -> slab_passivate) { if (! i) { str = g_strdup_printf (_("No atoms to be removed !")); } else { str = g_strdup_printf (_("%d atom(s) removed !"), i); } show_info (str, 0, opengl_project -> modelgl -> win); g_free (str); } else { opengl_project -> modelgl -> search_widg[8] -> int_b = i; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) \brief remove this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (0, data); remove_object (); } /*! \fn void insert_object (int action, gpointer data) \brief insert object \param action the action to perform (replace = 1 or insert only = 3) \param data the associated data pointer */ void insert_object (int action, gpointer data) { int i, j; gchar * str; gboolean vis = (opengl_project -> modelgl -> atom_win) ? opengl_project -> modelgl -> atom_win -> visible : FALSE; if (insert_search -> in_selection) { if (action == 1 && remove_search != NULL) { i = action_atoms_from_project (opengl_project, remove_search, vis); } j = action_atoms_from_project (opengl_project, insert_search, vis); if (action == 1) { str = g_strdup_printf (_("%d atom(s) removed !\n%d atom(s) inserted !"), i, j); } else { str = g_strdup_printf (_("%d atom(s) inserted !"), (inserted_from_lib) ? inserted_from_lib : j); inserted_from_lib = 0; } clean_other_window_after_edit (opengl_project); if (action == 1) show_info (str, 0, opengl_project -> modelgl -> win); g_free (str); } insert_search = free_this_search_data (insert_search); } gboolean insert_this_object; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add object call back GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) \brief add object call back GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) #endif { int i, j; i = opengl_project -> natomes; prepare_atom_edition (data, FALSE); insert_search = allocate_atom_search (opengl_project -> id, INSERT, INSERT, 0); if (insert_this_object) { gchar * lab = NULL; #ifdef GTK4 if (action != NULL) { lab = get_object_from_action (action); } #else if (widg != NULL) { lab = g_strdup_printf ("%s", gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); } #endif else { lab = g_strdup_printf (_("Copied Data")); } allocate_todo (insert_search, 1); insert_search -> todo[0] = 1; prepare_to_instert (lab, opengl_project, insert_search, FALSE); g_free (lab); } else if (copied_object) { tint ul = ulam_coord (opengl_project -> modelgl); opengl_project -> modelgl -> atom_win -> to_be_inserted[1] = duplicate_atomic_object (copied_object); atomic_object * object = opengl_project -> modelgl -> atom_win -> to_be_inserted[1]; for (i=0; i atoms; i++) { object -> at_list[i].x += opengl_project -> modelgl -> insert_coords.x + object -> dim*ul.a; object -> at_list[i].y += opengl_project -> modelgl -> insert_coords.y + object -> dim*ul.b; object -> at_list[i].z += opengl_project -> modelgl -> insert_coords.z + object -> dim*ul.c; } allocate_todo (insert_search, 1); insert_search -> todo[0] = 1; insert_search -> in_selection ++; } insert_object (3, data); if (! i && opengl_project -> natomes) { if (opengl_project -> modelgl -> anim -> last -> img -> style == SPACEFILL) { j = OGL_STYLES + opengl_project -> modelgl -> anim -> last -> img -> filled_type; set_this_style (opengl_project -> modelgl, WIREFRAME); } else { j = opengl_project -> modelgl -> anim -> last -> img -> style; set_this_style (opengl_project -> modelgl, OGL_STYLES); } set_this_style (opengl_project -> modelgl, j); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to add object callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) \brief to add object callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) #endif { insert_this_object = TRUE; #ifdef GTK4 add_object (action, parameter, data); #else add_object (widg, data); #endif insert_this_object = FALSE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (0, action, data); #else /*! \fn G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) \brief replace this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) { to_replace_this_object (0, widg, data); #endif to_remove_this_object (0, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) \brief copy this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) #endif { int i; if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); i = GPOINTER_TO_INT(data); pasted_todo[i] = 1; copied_object = create_object_from_selection (opengl_project); } /*! \fn void check_hidden_visible (project * this_proj) \brief check how many atom(s) are visible \param this_proj the target project */ void check_hidden_visible (project * this_proj) { int i, j, k, l, m; int ** num; int * numc[4]; int * numv[4]; int * numg[2]; k = 2; num = allocdint (2, this_proj -> nspec); for (i=0; i<2; i++) if (this_proj -> modelgl -> adv_bonding[i]) k ++; for (i=0; i coord -> totcoord[i]); numv[i] = allocint (this_proj -> coord -> totcoord[i]); if (i < 2) { numg[i] = allocint (this_proj -> nspec); for (j=1; j nspec; j++) { numg[i][j] = this_proj -> coord -> ntg[i][j-1] + numg[i][j-1]; } } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (l=0; l<2; l++) if (this_proj -> atoms[i][j].show[l]) num[l][this_proj -> atoms[i][j].sp] ++; for (l=0; l atoms[i][j].coord[l]; if (l < 2 && this_proj -> atoms[i][j].sp > 0) m += numg[l][this_proj -> atoms[i][j].sp]; numc[l][m] ++; if (this_proj -> atoms[i][j].show[0]) numv[l][m] ++; } } } #ifdef GTK4 gboolean update_bar = FALSE; #endif for (i=0; i<2; i++) { for (j=0; j nspec; j++) { if (num[i][j] > 0) { if (num[i][j] == this_proj -> chemistry -> nsps[j]*this_proj -> steps) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j]) update_bar = TRUE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], TRUE); #endif this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j] = TRUE; } } else if (this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j]) { #ifdef GTK4 update_bar = TRUE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], FALSE); #endif this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j] = FALSE; } } } l = 0; for (i=0; i coord -> totcoord[i]; j++) { if (numv[i][j] > 0) { if (numc[i][j] == numv[i][j]) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) update_bar = TRUE; #else // GTK3 Menu Action To Check for (l=0; l<2; l++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[l][i][j], TRUE); #endif } this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = TRUE; } else if (this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) { #ifdef GTK4 update_bar = TRUE; #else // GTK3 Menu Action To Check for (l=0; l<2; l++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[l][i][j], FALSE); #endif this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = FALSE; } } } else { for (j=0; j coord -> totcoord[i]; j++) { if (numv[i][j] > 0) { this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = TRUE; } else if (this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) { this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = FALSE; } } } } for (i=0; i<2; i++) g_free (num[i]); g_free (num); for (i=0; i modelgl); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) \brief show / hide this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) #endif { int i; int id = GPOINTER_TO_INT (data); for (i=0; i steps; i++) { opengl_project -> atoms[i][id].show[0] = ! opengl_project -> atoms[i][id].show[0]; } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } /*! \fn int check_label_numbers (project * this_proj, int types) \brief check how many atom label(s) are visible \param this_proj the target project \param types 0 = atoms, 1 = clones, 2 = all */ int check_label_numbers (project * this_proj, int types) { int h, i, j, k, l; int start, end; int * naid = allocint (this_proj -> nspec); int * nlid = allocint (this_proj -> nspec); start = (types == 0 || types == 2) ? 0 : 1; end = (types == 1 || types == 2) ? 2 : 1; l = 0; #ifdef GTK4 gboolean update_bar = FALSE; #endif for (h=start; h nspec; i++) naid[i] = nlid[i] = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { k = this_proj -> atoms[i][j].sp; naid[k] ++; if (this_proj -> atoms[i][j].label[h]) nlid[k] ++; } } if (h==types || (h == 0 && types == 2)) l = 0; for (i=0; i nspec; i++) { // g_debug ("h= %d, i= %d, nlid[%d]= %d, naid[%d]= %d", h, i+1, i+1, nlid[i], i+1, naid[i]); if (nlid[i] == naid[i]) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_label[h][i]) update_bar = TRUE; #else if (! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i], 1); } #endif this_proj -> modelgl -> anim -> last -> img -> show_label[h][i] = TRUE; } else { if (nlid[i] == 0) { #ifdef GTK4 if (this_proj -> modelgl -> anim -> last -> img -> show_label[h][i]) update_bar = TRUE; #else if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i], 0); } #endif } this_proj -> modelgl -> anim -> last -> img -> show_label[h][i] = FALSE; } if (h==types || (h == 0 && types == 2)) l += nlid[i]; } } g_free (naid); g_free (nlid); check_all_trees (this_proj); #ifdef GTK4 if (update_bar) update_menu_bar (this_proj -> modelgl); #endif return l; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) \brief label / unlabel this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) #endif { int i, j, k, l, m; int id = GPOINTER_TO_INT (data); i = opengl_project -> modelgl -> anim -> last -> img -> step; j = opengl_project -> atoms[i][id].label[0]; for (k=0; k steps; k++) { opengl_project -> atoms[k][id].label[0] = ! j; opengl_project -> atoms[k][id].label[1] = ! j; if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[k][id].numv; l++) { m = opengl_project -> atoms[k][id].vois[l]; opengl_project -> atoms[k][m].label[0] = ! j; opengl_project -> atoms[k][m].label[1] = ! j; } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) \brief select / unselect this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) #endif { int h, i, j, k, l, m; int id = GPOINTER_TO_INT (data); h = get_to_be_selected (opengl_project -> modelgl); j = opengl_project -> modelgl -> anim -> last -> img -> step; save_all_selections (opengl_project -> modelgl, h); k = opengl_project -> atoms[j][id].pick[h]; for (i=0; i steps; i++) { if (i == j) { if (! opengl_project -> modelgl -> selection_mode || opengl_project -> atoms[i][id].pick[h] != selected_status) { process_selected_atom (opengl_project, opengl_project -> modelgl, id, 0, 0, h); } if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[j][id].numv; l++) { m = opengl_project -> atoms[i][id].vois[l]; if (opengl_project -> atoms[i][m].pick[h] != opengl_project -> atoms[i][id].pick[h]) { process_selected_atom (opengl_project, opengl_project -> modelgl, m, 0, 0, h); } } } } else { if (! opengl_project -> modelgl -> selection_mode || opengl_project -> atoms[i][id].pick[h] != selected_status) { opengl_project -> atoms[i][id].pick[h] = ! k; } if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[j][id].numv; l++) { m = opengl_project -> atoms[j][id].vois[l]; opengl_project -> atoms[i][m].pick[h] = opengl_project -> atoms[i][id].pick[h]; } } } } update_all_selections (opengl_project -> modelgl, h); int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, opengl_project); opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } gboolean wait_for_style = FALSE; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change OpenGL rendering style for this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) \brief change OpenGL rendering style for this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) #endif { int i, j; int id = GPOINTER_TO_INT (data); #ifdef GTK4 j = get_style ((gchar *)g_action_get_name (G_ACTION(action))); #else j = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { opengl_project -> atoms[i][id].style = j; } if (! wait_for_style) { init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove selected atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) \brief remove selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (2, data); remove_object (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace selected atom(s) callback GTK3 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (2, action, data); #else /*! \fn G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) \brief replace selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) { to_replace_this_object (2, widg, data); #endif to_remove_this_object (2, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy selected atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) \brief copy selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); h = 0; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) { pasted_todo[j] = 1; h = 1; } } } } if (h) { copied_object = create_object_from_selection (opengl_project); } else { g_free (pasted_todo); pasted_todo = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show all hidden / hide all visible atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) \brief show all hidden / hide all visible atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (k=0; k<2; k++) { if (opengl_project -> atoms[i][j].show[k] == sel -> c) { opengl_project -> atoms[i][j].show[k] = ! sel -> c; } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) \brief show / hide a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { if (sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) \brief label / unlabel a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) \brief select / unselect a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); save_all_selections (opengl_project -> modelgl, h); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> b || opengl_project -> atoms[i][j].label[0] == is_labelled) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) { process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } } else { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } } } } update_all_selections (opengl_project -> modelgl, h); int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, opengl_project); opengl_project -> modelgl -> create_shaders[MEASU] = TRUE; opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change the OpenGL rendering style of a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) \brief change the OpenGL rendering style of a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) #endif { int h, i, j, k; tint * sel = (tint *)data; h = get_to_be_selected (opengl_project -> modelgl); #ifdef GTK4 k = get_style ((gchar *)g_action_get_name(G_ACTION(action))); #else k = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { if (sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { opengl_project -> atoms[i][j].style = k; } } } } } init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) \brief remove a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (1, data); remove_object (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace a coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (1, action, data); #else /*! \fn G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) \brief replace a coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) { to_replace_this_object (1, widg, data); #endif to_remove_this_object (1, data); insert_object (1, data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy a coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) \brief copy a coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); h = 0; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { pasted_todo[j] = 1; h = 1; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { pasted_todo[j] = 1; h = 1; } } } if (h) { copied_object = create_object_from_selection (opengl_project); } else { g_free (pasted_todo); pasted_todo = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) \brief show / hide a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) \brief label / unlabel a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k, l, m; if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[i][j].numv; l++) { m = opengl_project -> atoms[i][j].vois[l]; opengl_project -> atoms[i][m].label[0] = sel -> c; opengl_project -> atoms[i][m].label[1] = sel -> c; } } } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) \brief select / unselect a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j, k; h = get_to_be_selected (opengl_project -> modelgl); save_all_selections (opengl_project -> modelgl, h); if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } } } } update_all_selections (opengl_project -> modelgl, h); int shader[1] = {SELEC}; re_create_md_shaders (1, shader, opengl_project); opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; opengl_project -> modelgl -> create_shaders[MEASU] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change OpenGL rendering style for a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) \brief change OpenGL rendering style for a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k, l; if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; #ifdef GTK4 l = get_style ((gchar *)g_action_get_name(G_ACTION(action))); #else l = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].style = l; } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].style = l; } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { opengl_project -> atoms[i][j].style = l; } } } } } init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } /*! \fn void create_new_project_using_data (atom_selection * selection) \brief create new project using an atom selection \param selection the atom selection to use */ void create_new_project_using_data (atom_selection * selection) { int i, j, k, l; int nspec = 0; int * pos_sp, * specs; atom_in_selection * tmp; pos_sp = allocint (opengl_project -> nspec); specs = allocint (opengl_project -> nspec); for (i=0; i nspec; i++) { specs[i] = 0; pos_sp[i] = -1; } tmp = selection -> first; j = -1; for (i=0; i selected; i++) { specs[tmp -> sp] ++; if (pos_sp[tmp -> sp] < 0) { j ++; pos_sp[tmp -> sp] = j; } if (tmp -> next != NULL) tmp = tmp -> next; } for (i=0; i nspec; i++) if (specs[i] > 0) nspec ++; init_project (TRUE); active_project -> nspec = nspec; active_project -> natomes = selection -> selected; active_project -> steps = 1; alloc_proj_data (active_project, 1); active_chem = active_project -> chemistry; if (active_project -> natomes == opengl_project -> natomes) { active_cell -> ltype = opengl_project -> cell.ltype; active_cell -> pbc = opengl_project -> cell.pbc; active_cell -> has_a_box = opengl_project -> cell.has_a_box; k = (active_cell -> npt) ? opengl_project -> modelgl -> anim -> last -> img -> step : 0; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) active_box -> param[i][j] = opengl_project -> cell.box[k].param[i][j]; active_box -> vect[i][j] = opengl_project -> cell.box[k].vect[i][j]; } } } for (i=0; i nspec; i++) { if (pos_sp[i] > -1) { k = pos_sp[i]; active_chem -> label[k] = g_strdup_printf ("%s", opengl_project -> chemistry -> label[i]); active_chem -> element[k] = g_strdup_printf ("%s", opengl_project -> chemistry -> element[i]); active_chem -> nsps[k] = specs[i]; for (j=0; j chem_prop[j][k] = opengl_project -> chemistry -> chem_prop[j][i]; for (j=0; j nspec; j++) { if (pos_sp[j] > -1) { l = pos_sp[j]; active_chem -> cutoffs[k][l] = opengl_project -> chemistry -> cutoffs[i][j]; } } } } active_chem -> grtotcutoff = opengl_project -> chemistry -> grtotcutoff; tmp = selection -> first; for (i=0; i steps; i++) { tmp = selection -> first; for (j=0; j natomes; j++) { k = tmp -> id; active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].sp = pos_sp[tmp -> sp]; active_project -> atoms[i][j].x = opengl_project -> atoms[i][k].x; active_project -> atoms[i][j].y = opengl_project -> atoms[i][k].y; active_project -> atoms[i][j].z = opengl_project -> atoms[i][k].z; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; active_project -> atoms[i][j].pick[0] = FALSE; active_project -> atoms[i][j].cloned = FALSE; // Next line for style, to initialize style use: NONE active_project -> atoms[i][j].style = opengl_project -> atoms[i][k].style; if (tmp -> next != NULL) tmp = tmp -> next; } } update_analysis_availability (active_project); active_project_changed (activep); add_project_to_workspace (); i = opengl_project -> modelgl -> anim -> last -> img -> style; apply_project (FALSE); active_image -> style = i; update_all_menus (active_glwin, active_project -> natomes); g_free (pos_sp); g_free (specs); // Duplicate lightning and material duplicate_material_and_lightning (active_image, opengl_project -> modelgl -> anim -> last -> img); update (active_glwin); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using selection callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) \brief create new project using selection callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; atom_selection * selected; atom_in_selection * tmp_a; selected = g_malloc0(sizeof*selected); h = get_to_be_selected (opengl_project -> modelgl); if (! sel -> b) { if (sel -> c) { selected = opengl_project -> modelgl -> anim -> last -> img -> selected[h]; } else { selected -> selected = opengl_project -> natomes - opengl_project -> modelgl -> anim -> last -> img -> selected[h] -> selected; j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (! opengl_project -> atoms[j][i].pick[h]) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } } } } } else { selected -> selected = (is_labelled) ? opengl_project -> modelgl -> labelled : opengl_project -> natomes - opengl_project -> modelgl -> labelled; j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (opengl_project -> atoms[j][i].label[0] == is_labelled) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } } } } if (selected -> selected > 0) create_new_project_using_data (selected); selected = NULL; g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using coordination type and id callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) \brief create new project using coordination type and id callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j; atom_selection * selected; atom_in_selection * tmp_a; gboolean save_it; selected = g_malloc0(sizeof*selected); j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { save_it = FALSE; if (sel -> a < 2) { if (opengl_project -> atoms[j][i].sp == selected_aspec && opengl_project -> atoms[j][i].coord[sel -> a] == sel -> b) { save_it = TRUE; } } else { if (opengl_project -> atoms[j][i].coord[sel -> a] == sel -> b) { save_it = TRUE; } } if (save_it) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } selected -> selected ++; } } if (selected -> selected > 0) create_new_project_using_data (selected); g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using atomic species callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) \brief create new project using atomic species callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) #endif { int i, j; atom_selection * selected; atom_in_selection * tmp_a; selected = g_malloc0(sizeof*selected); j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (opengl_project -> atoms[j][i].sp == selected_aspec || selected_aspec == -1) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } selected -> selected ++; } } if (selected -> selected > 0) create_new_project_using_data (selected); g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select action for all object(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) \brief select action for all object(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) #endif { int i = GPOINTER_TO_INT(data); selected_aspec = -1; #ifdef DEBUG g_debug ("Action for All= %d", i); #endif // DEBUG #ifdef GTK4 switch (i) { case 0: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 1: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 2: label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 3: label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 4: show_hide_the_atoms (NULL, NULL, & atoid[0][0]); break; case 5: show_hide_the_atoms (NULL, NULL, & atoid[1][1]); break; case 6: style_the_atoms (action, NULL, & atoid[0][1]); break; // No case 7 = color case 8: edit_in_new_project (NULL, NULL, & opengl_project -> modelgl -> colorp[0][is_selected]); break; case 9: remove_the_atoms (action, NULL, & cut_sel); break; case 10: replace_the_atoms (action, NULL, & cut_sel); break; case 11: copy_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+1: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[1][0]); break; case CONTEXTACT+2: is_selected = -1; label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); // label_unlabel_atoms (NULL, NULL, & atoid[0][0]); break; case CONTEXTACT+3: is_selected = -1; label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); // label_unlabel_atoms (NULL, NULL, & atoid[1][0]); break; case CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[0][0]); break; case CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[1][0]); break; case CONTEXTACT+6: is_selected = -1; style_the_atoms (action, NULL, & atoid[0][0]); break; case CONTEXTACT+8: is_selected = -1; edit_in_new_project (NULL, NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+9: is_selected = -1; remove_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT+10: is_selected = -1; replace_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT+11: is_selected = -1; copy_the_atoms (action, NULL, & cut_sel); break; case 2*CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[0][1]); break; case 2*CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[1][1]); break; } #else switch (i) { case 0: select_unselect_atoms (widg, & opengl_project -> modelgl -> colorp[0][1]); break; case 1: select_unselect_atoms (widg, & opengl_project -> modelgl -> colorp[0][0]); break; case 2: label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); // label_unlabel_atoms (NULL, & atoid[0][0]); break; case 3: label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); // label_unlabel_atoms (NULL, & atoid[1][1]); break; case 4: show_hide_the_atoms (NULL, & atoid[0][0]); break; case 5: show_hide_the_atoms (NULL, & atoid[1][1]); break; case 6: style_the_atoms (widg, & atoid[0][1]); break; // No case 7 = color case 8: edit_in_new_project (NULL, & opengl_project -> modelgl -> colorp[0][is_selected]); break; case 9: remove_the_atoms (widg, & cut_sel); break; case 10: replace_the_atoms (widg, & cut_sel); break; case 11: copy_the_atoms (widg, & cut_sel); break; case CONTEXTACT: select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+1: select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[1][0]); break; case CONTEXTACT+2: is_selected = -1; // label_unlabel_atoms (NULL, & atoid[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case CONTEXTACT+3: is_selected = -1; // label_unlabel_atoms (NULL, & atoid[1][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, & atoid[0][0]); break; case CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, & atoid[1][0]); break; case CONTEXTACT+6: is_selected = -1; style_the_atoms (widg, & atoid[0][0]); break; case CONTEXTACT+8: is_selected = -1; edit_in_new_project (NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+9: is_selected = -1; remove_the_atoms (widg, & cut_sel); break; case CONTEXTACT+10: is_selected = -1; replace_the_atoms (widg, & cut_sel); break; case CONTEXTACT+11: is_selected = -1; copy_the_atoms (widg, & cut_sel); break; case 2*CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, & atoid[0][1]); break; case 2*CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, & atoid[1][1]); break; } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) \brief selection action for this bond callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) \brief selection action for this bond callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) #endif { int i, s; i = GPOINTER_TO_INT(data); #ifdef GTK4 switch (i) { case 0: select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 1: select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 2: label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 3: label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 4: show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 5: show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 6: style_this_atom (action, NULL, GINT_TO_POINTER(selected_atom)); style_this_atom (action, NULL, GINT_TO_POINTER(selected_btom)); break; default: // 8 = create project // 9 = remove // 10 = replace // 11 = copy bond_selection = g_malloc0(sizeof*bond_selection); s = opengl_project -> modelgl -> anim -> last -> img -> step; bond_selection -> first = new_atom_in_selection (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_atom_in_selection (selected_btom, opengl_project -> atoms[s][selected_btom].sp); bond_selection -> selected ++; switch (i) { case 8: create_new_project_using_data (bond_selection); break; case 9: to_remove_this_object (3, NULL); remove_object (); break; case 10: to_replace_this_object (3, action, data); to_remove_this_object (3, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); break; case 11: copy_bond_selection (); break; } break; g_free (bond_selection); bond_selection = NULL; } #else switch (i) { case 0: select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 1: select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 2: label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 3: label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 4: show_hide_this_atom (NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 5: show_hide_this_atom (NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 6: style_this_atom (widg, GINT_TO_POINTER(selected_atom)); style_this_atom (widg, GINT_TO_POINTER(selected_btom)); break; default: // 8 = create project // 9 = remove // 10 = replace // 11 = copy bond_selection = g_malloc0(sizeof*bond_selection); s = opengl_project -> modelgl -> anim -> last -> img -> step; bond_selection -> first = new_atom_in_selection (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_atom_in_selection (selected_btom, opengl_project -> atoms[s][selected_btom].sp); bond_selection -> selected ++; switch (i) { case 8: create_new_project_using_data (bond_selection); break; case 9: to_remove_this_object (3, NULL); remove_object (); break; case 10: to_replace_this_object (3, widg, data); to_remove_this_object (3, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); break; case 11: copy_bond_selection (); break; } break; g_free (bond_selection); bond_selection = NULL; } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select action for all bonds based on menu item id callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) \brief select action for all bonds based on menu item id callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) #endif { int g, h, i, j, k, l, m, n, o; int mid = GPOINTER_TO_INT(data); int s = opengl_project -> modelgl -> anim -> last -> img -> step; g = get_to_be_selected (opengl_project -> modelgl); gboolean doit; gboolean eqtc, eqpc; bond_selection = NULL; atom_in_selection * tmp_a; if (mid == 6 || mid == 6+CONTEXTACT || mid == 6+2*CONTEXTACT) wait_for_style = TRUE; for (h=0; h<2; h++) { for (i=0; i modelgl -> bonds[s][h]; i++) { doit = FALSE; k = opengl_project -> modelgl -> bondid[s][h][i][0]; j = opengl_project -> modelgl -> bondid[s][h][i][1]; l = opengl_project -> atoms[s][k].coord[0]; m = opengl_project -> atoms[s][j].coord[0]; n = opengl_project -> atoms[s][k].coord[1]; o = opengl_project -> atoms[s][j].coord[1]; if ((opengl_project -> atoms[s][j].sp == selected_aspec && opengl_project -> atoms[s][k].sp == selected_bspec) || (opengl_project -> atoms[s][k].sp == selected_aspec && opengl_project -> atoms[s][j].sp == selected_bspec)) doit = TRUE; if (doit) { if (opengl_project -> atoms[s][j].sp == selected_aspec && opengl_project -> atoms[s][k].sp == selected_bspec) { eqtc = ((l == atoid[0][0].b && m == btoid.a) || (l == btoid.a && m == atoid[0][0].b)) ? TRUE : FALSE; eqpc = ((n == atoid[0][1].b && o == btoid.b) || (n == btoid.b && o == atoid[0][1].b)) ? TRUE : FALSE; } else { eqtc = ((l == atoid[0][0].b && m == btoid.a) || (l == btoid.a && m == atoid[0][0].b)) ? TRUE : FALSE; eqpc = ((n == atoid[0][1].b && o == btoid.b) || (n == btoid.b && o == atoid[0][1].b)) ? TRUE : FALSE; } #ifdef GTK4 if (mid == 0 || (mid == CONTEXTACT && eqtc) || (mid == 2*CONTEXTACT && eqpc)) { if (! opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 1 || (mid == CONTEXTACT+1 && eqtc) || (mid == 2*CONTEXTACT+1 && eqpc)) { if (opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 2 || (mid == CONTEXTACT+2 && eqtc) || (mid == 2*CONTEXTACT+2 && eqpc)) { if (! opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 3 || (mid == CONTEXTACT+3 && eqtc) || (mid == 2*CONTEXTACT+3 && eqpc)) { if (opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 4 || (mid == CONTEXTACT+4 && eqtc) || (mid == 2*CONTEXTACT+4 && eqpc)) { if (! opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 5 || (mid == CONTEXTACT+5 && eqtc) || (mid == 2*CONTEXTACT+5 && eqpc)) { if (opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 6 || (mid == CONTEXTACT+6 && eqtc) || (mid == 2*CONTEXTACT+6 && eqpc)) { style_this_atom (action, NULL, GINT_TO_POINTER(j)); style_this_atom (action, NULL, GINT_TO_POINTER(k)); } #else if (mid == 0 || (mid == CONTEXTACT && eqtc) || (mid == 2*CONTEXTACT && eqpc)) { if (! opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 1 || (mid == CONTEXTACT+1 && eqtc) || (mid == 2*CONTEXTACT+1 && eqpc)) { if (opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 2 || (mid == CONTEXTACT+2 && eqtc) || (mid == 2*CONTEXTACT+2 && eqpc)) { if (! opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 3 || (mid == CONTEXTACT+3 && eqtc) || (mid == 2*CONTEXTACT+3 && eqpc)) { if (opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 4 || (mid == CONTEXTACT+4 && eqtc) || (mid == 2*CONTEXTACT+4 && eqpc)) { if (! opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 5 || (mid == CONTEXTACT+5 && eqtc) || (mid == 2*CONTEXTACT+5 && eqpc)) { if (opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 6 || (mid == CONTEXTACT+6 && eqtc) || (mid == 2*CONTEXTACT+6 && eqpc)) { style_this_atom (widg, GINT_TO_POINTER(j)); style_this_atom (widg, GINT_TO_POINTER(k)); } #endif else if ((mid == 8 || (mid == CONTEXTACT+8 && eqtc) || (mid == 2*CONTEXTACT+8 && eqpc)) || (mid == 9 || (mid == CONTEXTACT+9 && eqtc) || (mid == 2*CONTEXTACT+9 && eqpc)) || (mid == 10 || (mid == CONTEXTACT+10 && eqtc) || (mid == 2*CONTEXTACT+10 && eqpc)) || (mid == 11 || (mid == CONTEXTACT+11 && eqtc) || (mid == 2*CONTEXTACT+11 && eqpc))) { if (! bond_selection) { bond_selection = g_malloc0(sizeof*bond_selection); bond_selection -> first = new_atom_in_selection (j, opengl_project -> atoms[s][j].sp); tmp_a = bond_selection -> first; } else { tmp_a -> next = new_atom_in_selection (j, opengl_project -> atoms[s][j].sp); tmp_a = tmp_a -> next; } bond_selection -> selected ++; tmp_a -> next = new_atom_in_selection (k, opengl_project -> atoms[s][k].sp); tmp_a = tmp_a -> next; bond_selection -> selected ++; } } } } if (mid == 6 || mid == CONTEXTACT+6 || mid == 2*CONTEXTACT+6) { init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); wait_for_style = FALSE; } else if (mid == 8 || mid == CONTEXTACT+8 || mid == 2*CONTEXTACT+8) { if (bond_selection -> selected > 0) create_new_project_using_data (bond_selection); g_free (bond_selection); bond_selection = NULL; } else if (mid == 9 || mid == CONTEXTACT+9 || mid == 2*CONTEXTACT+9) { if (bond_selection) { to_remove_this_object (3, data); remove_object (); g_free (bond_selection); bond_selection = NULL; } } else if (mid == 10 || mid == CONTEXTACT+10 || mid == 2*CONTEXTACT+10) { if (bond_selection) { #ifdef GTK4 to_replace_this_object (3, action, data); #else to_replace_this_object (3, widg, data); #endif to_remove_this_object (3, data); insert_object (1, data); g_free (bond_selection); bond_selection = NULL; } } else if (mid == 11 || mid == CONTEXTACT+11 || mid == 2*CONTEXTACT+11) { if (bond_selection) { copy_bond_selection (); g_free (bond_selection); bond_selection = NULL; } } } #ifdef GTK4 /*! \fn GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) \brief add edition submenu to the popup menu GTK4 \param view the target glwin \param act the action name \param aid the action id \param handler the associated callback \param data the associated data pointer */ GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); GMenu * menus; gchar * word, * name, * str; gchar * eact = g_strdup_printf ("mol-ins-%s-%d", act, aid); int i, j; for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].type) { menus = g_menu_new (); append_submenu (menu, _(mol[i].type), menus); } if (mol[i].object) { if (i == 9 || i == 13 || i == 16 || i == 17) { append_opengl_item (view, menus, _(mol[i].object), eact, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); } else { append_opengl_item (view, menus, mol[i].object, eact, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); } } } g_free (eact); gboolean doit = FALSE; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { GMenu * menup = g_menu_new (); GMenu * menups; eact = g_strdup_printf ("ifp-%s-%d", act, aid); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); menups = g_menu_new (); for (j=0; j<3; j++) { word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); str = g_strdup_printf ("%s-%d", eact, j); append_opengl_item (view, menups, word, str, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); g_free (word); g_free (str); } append_submenu (menup, name, menups); g_object_unref (menups); g_free (name); } } g_free (eact); append_submenu (menu, _("Import From Project"), menup); g_object_unref (menup); } eact = g_strdup_printf ("cp-%s-%d", act, aid); append_opengl_item (view, menu, _("Copied Data"), eact, 1, 0, "V", IMG_NONE, NULL, FALSE, G_CALLBACK(add_object), data, FALSE, FALSE, FALSE, (copied_object) ? TRUE : FALSE); g_free (eact); return menu; } /*! \fn GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) \brief create style submenu and insert to menu item GTK4 \param view the target glwin \param act the action name \param aid the action id \param handler the associated callback \param data the associated data pointer */ GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); gchar * actc = g_strdup_printf ("%s-%d", act, aid); int i, j; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { titem = create_menu_item (TRUE, _("Import From Project")); gtk_menu_shell_append ((GtkMenuShell *)menu, titem); smenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)titem, smenu); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); sitem = create_menu_item_from_widget (markup_label(name, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); //child = gtk_bin_get_child (GTK_BIN (sitem)); //gtk_label_set_use_markup (GTK_LABEL(child), 1); //g_signal_connect (G_OBJECT (sitem), "activate", handler, data); gtk_menu_shell_append ((GtkMenuShell *)smenu, sitem); pmenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)sitem, pmenu); for (j=0; j<3; j++) { word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); gtk3_menu_item (pmenu, word, IMG_NONE, NULL, handler, data, FALSE, 0, 0, FALSE, FALSE, FALSE); g_free (word); } g_free (name); } } } GtkWidget * pastem = gtk3_menu_item (menu, _("Copied Data"), IMG_NONE, NULL, G_CALLBACK(add_object), data, TRUE, GDK_KEY_v, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); if (! copied_object) widget_set_sensitive (pastem, 0); } #endif #ifdef GTK4 /*! \fn void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) \brief append new menu item to popup menu GTK4 \param menu the menu to append the new menu item to \param view the target glwin \param str the new menu item label \param act the new menu item action \param aid the action id \param mid menu item id \param gid coordination type \param cid coordination id \param aoc atom (0) or clone (1) \param handler the associated callback \param data the associated data pointer */ void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) { gchar * actc = g_strdup_printf ("%s-%d", act, aid); #else /*! \fn GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) \brief create new menu item for the popup menu GTK3 \param view the target glwin \param str the new menu item label \param mid menu item id \param gid coordination type \param cid coordination id \param aoc atom (0) or clone (1) \param handler the associated callback \param data the associated data pointer */ GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) { GtkWidget * sel_item = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); #endif int i, j; if (mid == 6) { #ifdef GTK4 append_submenu (menu, str, add_style_sub_menu (view, act, aid, handler, data)); #else add_style_sub_menu (sel_item, handler, data); #endif } else if (mid == 7) { if (cid < 0) { i = get_project_by_id (view -> proj) -> nspec; #ifdef GTK4 append_submenu (menu, str, color_item(view, actc, mid, G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][selected_aspec+aoc*i])); #else gtk_menu_item_set_submenu ((GtkMenuItem *)sel_item, color_box(view, selected_aspec+aoc*i, 0, 0)); #endif } else { #ifdef GTK4 i = cid; if (gid < 2) { for (j=0; j coord -> ntg[gid][j]; } append_submenu (menu, str, color_item(view, actc, mid, G_CALLBACK(window_color_coord), & view -> gcid[gid][i][gid])); #else int k; j = 2*opengl_project -> nspec; for (i=0; i < gid; i++) { j += opengl_project -> coord -> totcoord[i]; } if (gid < 2) { for (i=0; i coord -> ntg[gid][i]; } k = selected_aspec; } else { k = gid; } gtk_menu_item_set_submenu ((GtkMenuItem *)sel_item, color_box(view, j+cid, k, cid)); #endif } } else if (mid == 10) { #ifdef GTK4 append_submenu (menu, str, add_edition_sub_menu (view, act, aid, handler, data)); #else add_edition_sub_menu (sel_item, handler, data); #endif } else { #ifdef GTK4 append_opengl_item (view, menu, str, actc, 1, 0, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); #else g_signal_connect (G_OBJECT (sel_item), "activate", handler, data); #endif } #ifdef GTK4 g_free (actc); #else return sel_item; #endif } gchar * snsab[2][2]={{i18n("All Non-Selected Atom(s)/Bond(s)"), i18n("All Selected Atom(s)/Bond(s)")}, {i18n("All Non-Labelled Atom(s)/Bond(s)"), i18n("All Labelled Atom(s)/Bond(s)")}}; #ifdef GTK4 /*! \fn GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) \brief create popup submenu GTK4 \param aid action id \param view the target glwin \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) \param mid menu id \param handler_a 1st callback - this object \param handler_b 2nd callback - coordination(s) \param handler_c 3rd callback - atom(s) */ GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) #else /*! \fn GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) \brief create popup submenu GTK3 \param view the target glwin \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) \param mid menu id \param handler_a 1st callback - this object \param handler_b 2nd callback - coordination(s) \param handler_c 3rd callback - atom(s) */ GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) #endif { int p = view -> proj; int s = view -> anim -> last -> img -> step; int spa, spb; int i, j, k; gchar * str; #ifdef GTK4 gchar * strb; GMenu * menu = g_menu_new (); #else GtkWidget * sel; GtkWidget * menu = gtk_menu_new (); #endif project * this_proj = get_project_by_id(p); spa = this_proj -> atoms[s][ati].sp; if (bti > -1) spb = this_proj -> atoms[s][bti].sp; if (bti < 0 && (((mid == 5 || mid == 6) && this_proj -> atoms[s][ati].show[aoc]) || (mid == 0 && ! is_selected) || (mid == 1 && is_selected) || (mid == 2 && ! is_labelled) || (mid == 3 && is_labelled) || (mid > 8 && mid < 11))) { str = g_strdup_printf (_("This Atom: %s%d"), exact_name(this_proj -> chemistry -> label[spa]), ati+1); #ifdef GTK4 if (mid == 6) { append_submenu (menu, str, add_style_sub_menu (view, "tas", aid, handler_a, GINT_TO_POINTER(ati))); } else if (mid == 10) { append_submenu (menu, str, add_edition_sub_menu (view, "tae", aid, handler_a, GINT_TO_POINTER(ati))); } else { strb = g_strdup_printf ("act-%d-%d", aid, mid); append_opengl_item (view, menu, str, strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, handler_a, GINT_TO_POINTER(ati), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); if (mid == 6) { add_style_sub_menu (sel, handler_a, GINT_TO_POINTER(ati)); } else if (mid == 10) { add_edition_sub_menu (sel, handler_a, GINT_TO_POINTER(ati)); } else { g_signal_connect (G_OBJECT (sel), "activate", handler_a, GINT_TO_POINTER(ati)); } #endif } else if (bti > -1 && mid != 4 && mid != 7) { str = g_strdup_printf (_("This Bond: %s%d - %s%d"), exact_name(this_proj -> chemistry -> label[spa]), ati+1, exact_name(this_proj -> chemistry -> label[spb]), bti+1); #ifdef GTK4 if (mid == 6) { append_submenu (menu, str, add_style_sub_menu (view, "tb-s", aid, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid))); } else if (mid == 10) { append_submenu (menu, str, add_edition_sub_menu (view, "tb-e", aid, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid))); } else { strb = g_strdup_printf ("act-%d-%d", aid, mid); append_opengl_item (view, menu, str, strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); if (mid == 6) { add_style_sub_menu (sel, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } else if (mid == 10) { add_edition_sub_menu (sel, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } else { g_signal_connect (G_OBJECT (sel), "activate", G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } if (mid != 7) { k = 0; for (j=0; j<2; j++) { if (mid<2 && j==0) { i = mid; } else if ((mid > 1 && mid < 4) && j==1) { i = mid - 2; } else { i = (j) ? is_labelled : is_selected; } #ifdef GTK4 if (mid == 6) { append_submenu (menu, _(snsab[j][i]), add_style_sub_menu (view, "all-s", aid, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k))); } else if (mid == 10) { append_submenu (menu, _(snsab[j][i]), add_edition_sub_menu (view, "all-e", aid, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k))); } else { strb = g_strdup_printf ("act-all-%d-%d", aid, mid+k); append_opengl_item (view, menu, _(snsab[j][i]), strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (_(snsab[j][i]), -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); if (mid == 6) { add_style_sub_menu (sel, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } else if (mid == 10) { add_edition_sub_menu (sel, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } else { g_signal_connect (G_OBJECT (sel), "activate", G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif k = CONTEXTACT; } } for (i=0; i<2; i++) { if (this_proj -> modelgl -> adv_bonding[i]) { j = this_proj -> atoms[s][ati].coord[2+i]; str = (! i) ? g_strdup_printf (_("Fragment N°:\t%d"), j+1) : g_strdup_printf (_("Molecule N°:\t%d"), j+1); #ifdef GTK4 create_selection_item (menu, view, str, (! i) ? "afm" : "amo", aid, mid, 2+i, j, aoc, handler_b, & atoid[mid][2+i]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item (view, str, mid, 2+i, j, aoc, handler_b, & atoid[mid][2+i])); #endif g_free (str); } } if (bti < 0) { if (this_proj -> atoms[s][ati].coord[0] > -1) { i = this_proj -> atoms[s][ati].coord[0]; str = g_strdup_printf (_("All %s Atoms %d Fold"), exact_name(this_proj -> chemistry -> label[spa]), this_proj -> coord -> geolist[0][spa][i]); #ifdef GTK4 create_selection_item (menu, view, str, "atc", aid, mid, 0, i, aoc, handler_b, & atoid[mid][0]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 0, i, aoc, handler_b, & atoid[mid][0])); #endif g_free (str); } if (this_proj -> atoms[s][ati].coord[1] > -1) { i = this_proj -> atoms[s][ati].coord[1]; str = g_strdup_printf (_("All %s Coordinations"), env_name (this_proj, i, spa, 1, NULL)); #ifdef GTK4 create_selection_item (menu, view, str, "apc", aid, mid, 1, i, aoc, handler_b, & atoid[mid][1]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 1, i, aoc, handler_b, & atoid[mid][1])); #endif g_free (str); } if (! aoc) { str = g_strdup_printf (_("All %s Atoms"), exact_name(this_proj -> chemistry -> label[spa])); } else { str = g_strdup_printf (_("All %s* Clones"), exact_name(this_proj -> chemistry -> label[spa])); } #ifdef GTK4 create_selection_item (menu, view, str, "asp", aid, mid, 0, -1, aoc, handler_c, & atoid[mid][2]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 0, -1, aoc, handler_c, & atoid[mid][2])); #endif g_free (str); } else { if (this_proj -> atoms[s][ati].coord[0] > -1 && this_proj -> atoms[s][bti].coord[0] > -1) { i = this_proj -> atoms[s][ati].coord[0]; j = this_proj -> atoms[s][bti].coord[0]; str = g_strdup_printf (_("All %s %d - %s %d Bonds"), exact_name(this_proj -> chemistry -> label[spa]), this_proj -> coord -> geolist[0][spa][i], exact_name(this_proj -> chemistry -> label[spb]), this_proj -> coord -> geolist[0][spb][j]); #ifdef GTK4 create_selection_item (menu, view, str, "atcb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+CONTEXTACT)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+CONTEXTACT))); #endif g_free (str); } if (this_proj -> atoms[s][ati].coord[1] > -1 && this_proj -> atoms[s][bti].coord[1] > -1) { i = this_proj -> atoms[s][ati].coord[1]; j = this_proj -> atoms[s][bti].coord[1]; str = g_strdup_printf (_("All %s - %s Bonds"), env_name (this_proj, i, spa, 1, NULL), env_name (this_proj, j, spb, 1, NULL)); #ifdef GTK4 create_selection_item (menu, view, str, "apcb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+2*CONTEXTACT)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+2*CONTEXTACT))); #endif g_free (str); } str = g_strdup_printf (_("All %s - %s Bonds"), exact_name(this_proj -> chemistry -> label[spa]), exact_name(this_proj -> chemistry -> label[spb])); #ifdef GTK4 create_selection_item (menu, view, str, "acb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid))); #endif g_free (str); } if (mid > 3 && mid < 6) { gchar * mat[2]={i18n("All Hidden Atom(s)/Bond(s)"), i18n("All Visible Atom(s)/Bond(s)")}; #ifdef GTK4 strb = g_strdup_printf ("all-hv-%d-%d", aid, mid); append_opengl_item (view, menu, _(mat[mid%2]), strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+2*CONTEXTACT), FALSE, FALSE, FALSE, TRUE); g_free (strb); #else gtk3_menu_item (menu, _(mat[mid%2]), IMG_NONE, NULL, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+2*CONTEXTACT), FALSE, 0, 0, FALSE, FALSE, FALSE); #endif } return menu; } #ifdef GTK4 /*! \fn void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) \brief contextual popup menu attach color palettes GTK4 \param view the target glwin \param menu the GtkWidget sending the signal \param ato the picked atom \param spc the picked chemical species \param totc the total coordination of ato \param parc the partial coordination of ato \param frag the fragment of ato \param mol the molecule of ato */ void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) { /* Here we need to attached color palettes for: - The chemical species of the atom in selection - The total coordination of the atom in selection - The partial coordination of the atom in selection - The fragment of the atom in selection - The molecule of the atom in selection This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j; project * this_proj = get_project_by_id (view -> proj); // The chemical species of the atom in selection if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, ato*this_proj -> nspec+spc, -1, -1), "set-asp-7.7")) { g_debug ("Color palette error: species in selection - custom= set-asp-7.7"); } // The total coordination i = 0; for (j=0; j coord -> ntg[0][j]; } if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+i, -1, -1), "set-atc-7.7")) { g_debug ("Color palette error: total coordination in selection - custom= set-atc-7.7"); } // The partial coordination i = this_proj -> coord -> totcoord[0]; for (j=0; j coord -> ntg[1][j]; } if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+i, -1, -1), "set-apc-7.7")) { g_debug ("Color palette error: partial coordination in selection - custom= set-apc-7.7"); } if (view -> adv_bonding[0]) { // The fragment of the atom in selection i = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + frag; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i, 2, 0), "set-afm-7.7")) { g_debug ("Color palette error: fragment in selection - custom= set-afm-7.7"); } } if (view -> adv_bonding[1]) { // The molecule of the atom in selection i = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + this_proj -> coord -> totcoord[2] + mol; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i, 3, 0), "set-amo-7.7")) { g_debug ("Color palette error: fragment in selection - custom= set-amo-7.7"); } } } #endif /*! \fn void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) \brief create the contextual popup menu, right click on atom or bond \param view the target glwin \param ptx x position \param pty y position \param spe the picked chemical \param mmod mouse mode: 0 = analysis, 1 = edition \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) */ void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) { int p = view -> proj; int s = view -> anim -> last -> img -> step; int i, j; gchar * str, * strp; gchar * menu_names[CONTEXTACT] = {i18n("Select"), i18n("Unselect"), i18n("Label"), i18n("Unlabel"), i18n("Show"), i18n("Hide"), i18n("Style"), i18n("Color"), i18n("Edit as New Project"), i18n("Remove"), i18n("Replace"), i18n("Copy")}; GCallback handlers[CONTEXTACT][3] = {{G_CALLBACK(select_unselect_this_atom), G_CALLBACK(select_unselect_coord), G_CALLBACK(select_unselect_atoms)}, {G_CALLBACK(select_unselect_this_atom), G_CALLBACK(select_unselect_coord), G_CALLBACK(select_unselect_atoms)}, {G_CALLBACK(label_unlabel_this_atom), G_CALLBACK(label_unlabel_coord), G_CALLBACK(label_unlabel_atoms)}, {G_CALLBACK(label_unlabel_this_atom), G_CALLBACK(label_unlabel_coord), G_CALLBACK(label_unlabel_atoms)}, {G_CALLBACK(show_hide_this_atom), G_CALLBACK(show_hide_the_coord), G_CALLBACK(show_hide_the_atoms)}, {G_CALLBACK(show_hide_this_atom), G_CALLBACK(show_hide_the_coord), G_CALLBACK(show_hide_the_atoms)}, {G_CALLBACK(style_this_atom), G_CALLBACK(style_the_coord), G_CALLBACK(style_the_atoms)}, {NULL, NULL, NULL}, {NULL, G_CALLBACK(edit_coord), G_CALLBACK(edit_atoms)}, {G_CALLBACK(remove_this_atom), G_CALLBACK(remove_the_coord), G_CALLBACK(remove_the_atoms)}, {G_CALLBACK(replace_this_atom), G_CALLBACK(replace_the_coord), G_CALLBACK(replace_the_atoms)}, {G_CALLBACK(copy_this_atom), G_CALLBACK(copy_the_coord), G_CALLBACK(copy_the_atoms)}}; #ifdef GTK4 if (view_pop_actions) g_object_unref (view_pop_actions); view_pop_actions = g_simple_action_group_new (); GMenu * gmenu = g_menu_new (); #else GtkWidget * menu = gtk_menu_new (); GtkWidget * sel; #endif #ifdef DEBUG g_debug ("POP_SEL:: spe= %d, ati= %d, bti= %d, aoc= %d", spe, ati, bti, aoc); #endif // DEBUG opengl_project_changed (p); selected_atom = ati; selected_btom = bti; selected_aspec = opengl_project -> atoms[s][ati].sp; selected_bspec = -1; selected_status = ! opengl_project -> atoms[s][ati].pick[get_to_be_selected (view)]; is_selected = opengl_project -> atoms[s][ati].pick[mmod]; is_labelled = opengl_project -> atoms[s][ati].label[aoc]; #ifdef DEBUG if (is_selected != spe) g_debug ("Something is wrong in popup"); #endif // DEBUG for (i=0; i atoms[s][ati].coord[j]; atoid[i][j].c = ((i-2*(i/2)) == 0 ? 1 : 0); /*#ifdef DEBUG g_debug ("atoid[%d][%d].a= %d, atoid[%d][%d].b= %d, atoid[%d][%d].c= %d", i, j, atoid[i][j].a, i, j, atoid[i][j].b, i, j, atoid[i][j].c); #endif*/ } } if (bti > -1) { btoid.a = opengl_project -> atoms[s][bti].coord[0]; btoid.b = opengl_project -> atoms[s][bti].coord[1]; selected_bspec = opengl_project -> atoms[s][bti].sp; distance dist = distance_3d (& opengl_project -> cell, (opengl_project -> cell.npt) ? s : 0, & opengl_project -> atoms[s][ati], & opengl_project -> atoms[s][bti]); if (aoc == 0) { str = g_strdup_printf ("%s%d - %s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1, exact_name(opengl_project -> chemistry -> label[selected_bspec]), bti+1); } else { str = g_strdup_printf ("%s%d - %s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1, exact_name(opengl_project -> chemistry -> label[selected_bspec]), bti+1); } if (dist.pbc) { strp = g_strdup_printf ("%s \t d= %.3f Ã… (%s)", str, dist.length, _("PBC")); } else { strp = g_strdup_printf ("%s \t d= %.3f Ã…", str, dist.length); } #ifdef GTK4 append_opengl_item (view, gmenu, strp, "w-dist", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (strp, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (strp); for (i=0; i<2; i++) { if (view -> adv_bonding[i]) { j = opengl_project -> atoms[s][ati].coord[2+i] + 1; str = (! i) ? g_strdup_printf (_("Fragment N°:\t%d"), j) : g_strdup_printf (_("Molecule N°:\t%d"), j); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-dist-fm", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } } } else { if (aoc == 0) { str = g_strdup_printf ("%s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1); } else { str = g_strdup_printf ("%s%d*", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1); } #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-ac", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); str = g_strdup_printf ("\tx : %f\n\ty : %f\n\tz : %f", opengl_project -> atoms[s][ati].x, opengl_project -> atoms[s][ati].y, opengl_project -> atoms[s][ati].z); #ifdef GTK4 append_opengl_item (view, gmenu, str, "xyz", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); if (opengl_project -> atoms[s][ati].coord[0] > -1) { i = opengl_project -> atoms[s][ati].coord[0]; str = g_strdup_printf (_("Total Coordination: %d"), opengl_project -> coord -> geolist[0][selected_aspec][i]); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-tc", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); i = opengl_project -> atoms[s][ati].coord[1]; str = g_strdup_printf (_("Partial Coordination: %s"), env_name (opengl_project, i, selected_aspec, 1, NULL)); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-pc", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } for (i=0; i<2; i++) { if (view -> adv_bonding[i]) { j = opengl_project -> atoms[s][ati].coord[2+i] + 1; str = (! i) ? g_strdup_printf (_("Fragment N°:\t%d"), j) : g_strdup_printf (_("Molecule N°:\t%d"), j); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-fm", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } } } //if (fc) //{ // gtk_menu_shell_append ((GtkMenuShell *)menu, sel); // add_menu_separator (menu); // atoms menu //gtk_menu_shell_append ((GtkMenuShell *)menu, field_atom_menu(p, s, ati, fc-2)); // bonds menu, if ati involved in bonding, or bti > -1 //gtk_menu_shell_append ((GtkMenuShell *)menu, field_bond_menu(p, s, ati, bti)); // angles menu, if ati involved in bonding with more than 2 neighbors //gtk_menu_shell_append ((GtkMenuShell *)menu, field_angle_menu(p, s, ati, bti)); //} #ifdef GTK4 GMenu * menua = g_menu_new (); g_menu_append_section (gmenu, NULL, (GMenuModel *)menua); #else add_menu_separator (menu); #endif gboolean go; /* 0 = Select 1 = Unselect 2 = Label 3 = Unlabel 4 = Show 5 = Hide 6 = Style 7 = Color 8 = Edit as New Project" 9 = Remove 10 = Replace 11 = Copy */ for (i=0; i<12; i++) { go = TRUE; if (i < 9 && view -> mode == EDITION) go = FALSE; if ((i > 8 && i < 11) && view -> mode == ANALYZE) go = FALSE; if (i == 0 && view -> anim -> last -> img -> selected[mmod] -> selected == opengl_project -> natomes) go = FALSE; if (i == 1 && view -> anim -> last -> img -> selected[mmod] -> selected == 0) go = FALSE; if (i == 2 && view -> labelled == opengl_project -> natomes*opengl_project -> steps) go = FALSE; if (i == 3 && view -> labelled == 0) go = FALSE; if (bti > -1 && i == 7) go = FALSE; j = (i == 8 && view -> mode == ANALYZE) ? 11 : (i == 11 && view -> mode == ANALYZE) ? 8 : i; if (go) { #ifdef GTK4 append_submenu (menua, _(menu_names[j]), selection_menu (i, view, ati, bti, aoc, j, handlers[j][0], handlers[j][1], handlers[j][2])); #else gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu(_(menu_names[j]), TRUE, selection_menu (view, ati, bti, aoc, j, handlers[j][0], handlers[j][1], handlers[j][2]))); #endif } } #ifdef GTK4 GtkWidget * menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)gmenu, GTK_POPOVER_MENU_NESTED); // Color palettes here if (view -> mode == ANALYZE) analyze_popup_attach_color_palettes (view, menu, aoc, selected_aspec, atoid[0][0].b, atoid[0][1].b, atoid[0][2].b, atoid[0][3].b); gtk_widget_set_parent (menu, view -> win); str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(view_pop_actions)); g_free (str); i = (view -> mode == ANALYZE) ? (is_selected) ? 385 : 355 : 230; i += (view -> adv_bonding[0] && bti < 0) ? 30 : 0; i += (view -> adv_bonding[1] && bti < 0) ? 30 : 0; if (bti > -1) i -= (view -> mode == ANALYZE) ? 70 : 50; gtk_widget_set_size_request (menu, -1, i); pop_menu_at_pointer (menu, ptx, pty); #else pop_menu_at_pointer (menu, NULL); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) \brief reset coordinates menu item callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) \brief reset coordinates menu item callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; reset_coordinates (get_project_by_id(view -> proj), 2); int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, get_project_by_id(view -> proj)); view -> create_shaders[MEASU] = TRUE; view -> create_shaders[PICKS] = TRUE; init_coordinates (get_project_by_id(view -> proj), 1, FALSE, TRUE); update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) \brief rebuild menu items callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) \brief rebuild menu items callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) #endif { tint * dat =(tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; #ifdef GTK4 view -> rebuild[dat -> b][0] = ! view -> rebuild[dat -> b][0]; view -> rebuild[dat -> b][1] = view -> rebuild[dat -> b][0]; update_menu_bar (view); #else view -> rebuild[dat -> b][0] = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); view -> rebuild[dat -> b][1] = view -> rebuild[dat -> b][0]; if (widg != view -> rbuild[dat -> b]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> rbuild[dat -> b], view -> rebuild[dat -> b][0]); } #endif } /*! \fn G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) \brief center this molecule menu item callback GTK4 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gboolean center = ! get_project_by_id(view -> proj) -> cell.crystal ? TRUE : ask_yes_no (_("Center crystal atom(s)"), _("Are you sure, this can affect the visual representation of the unit cell ?"), GTK_MESSAGE_QUESTION, view -> win); if (center) center_this_molecule (view); } #ifdef GTK4 /*! \fn GMenu * tools_section (glwin * view) \brief insert the 'Tools' section to the popmenu GTK4 \param view the target glwin */ GMenu * tools_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Tools"), menu_tools(view, 1)); return menu; } /*! \fn GMenu * anim_section (glwin * view) \brief insert the 'Animate' section to the popmenu GTK4 \param view the target glwin */ GMenu * anim_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Animate"), menu_anim(view, 1)); return menu; } /*! \fn void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) \brief attach the color palettes to the corresponding custom menu items GTK4 \param view the target glwin \param menu the GtkWidget sending the signal */ void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) { /* Here we need to attached color palettes for: - Box - Atoms - Clones - Total coordination(s) - Partial coordination(s) - Fragment(s) and molecule(s) - Ring(s) - Background This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j, k, l, m; gchar * str, * env; project * this_proj = get_project_by_id (view -> proj); // Box if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -1, -1, -1), "set-box-color.0")) { g_debug ("Color palette error: box - custom= set-box-color.0"); } // Atom(s) and clone(s) for (i=0; i<2; i++) { for (j=0; j nspec; j++) { str = g_strdup_printf ("set-%s.%d", (! i) ? "atom-color" : "clone-color", j); if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i*this_proj -> nspec+j, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - %d - custom= %s", (! i) ? "atom-color" : "clone-color", j+1, str); } g_free (str); } } // Coordinations for (i=0; i<2; i++) { if (this_proj -> coord -> ntg[i]) { for (j=0; j nspec; j++) { for (k=0; k coord -> ntg[i][j]; k++) { m = 0; for (l=0; l coord -> ntg[i][l]; } if (i) { env = env_name (this_proj, k, j, 1, NULL); str = g_strdup_printf ("set-%s-c.%d", exact_name (env), m); g_free (env); } else { str = g_strdup_printf ("set-%d-c.%d", this_proj -> coord -> geolist[i][j][k], m); } m += (i) ? this_proj -> coord -> totcoord[0] : 0; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+m, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - spec= %d - coord= %d, custom= %s", (! i) ? "total-coord" : "partial-coord", j+1, k+1, str); } g_free (str); } } } } // Fragment(s) and molecule(s) for (i=2; i<4; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-%s-%d", (i == 2) ? "fcol" : "mcol", j); k = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + j; if (i == 3) k += this_proj -> coord -> totcoord[2]; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, k, i, 0), (const gchar *)str)) { g_debug ("Color palette error: %s - %d, custom= %s", (i == 2) ? "fragment" : "molecule", j+1, str); } g_free (str); } } // Rings for (i=4; i<9; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-rcol-%d-%d", i, j); if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -3, i-4, 0), (const gchar *)str)) { g_debug ("Color palette error: rings - %d - %d, custom= %s", i, j+1, str); } g_free (str); } } // Background if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -2, -1, -1), "set-back-color.0")) { g_debug ("Color palette error: background - custom= set-back-color.0"); } } #endif /*! \fn void popup_main_menu (glwin * view, double ptx, double pty) \brief create the OpenGL window popup menu \param view the target glwin \param ptx x position \param pty y position */ void popup_main_menu (glwin * view, double ptx, double pty) { GtkWidget * menu; opengl_project_changed (view -> proj); #ifdef GTK4 if (view_pop_actions) g_object_unref (view_pop_actions); view_pop_actions = g_simple_action_group_new (); GMenu * gmenu = g_menu_new (); if (view -> mode == ANALYZE) { g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_opengl_menu(view, 1)); if (get_project_by_id(view -> proj) -> natomes) { g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_model_menu(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_coord_menu(view, 1)); } g_menu_append_section (gmenu, NULL, (GMenuModel *)tools_section(view)); g_menu_append_section (gmenu, NULL, (GMenuModel *)menu_view(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel *)anim_section(view)); } else { g_menu_append_section (gmenu, NULL, (GMenuModel *)tools_section(view)); append_submenu (gmenu, _("Insert"), add_edition_sub_menu (view, "ins", 0, G_CALLBACK(to_add_object), & view -> colorp[0][0])); if (opengl_project -> steps == 1) g_menu_append_section (gmenu, NULL, (GMenuModel *)extract_section(view, 1)); append_opengl_item (view, gmenu, _("Reset Motion"), "res-mot", 1, 0, NULL, IMG_STOCK, MEDIA_LOOP, FALSE, G_CALLBACK(reset_coords), view, FALSE, FALSE, FALSE, TRUE); } g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_reset(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_fullscreen(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_shortcuts(view, 1)); menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)gmenu, GTK_POPOVER_MENU_NESTED); if (view -> mode == ANALYZE) analyze_menu_attach_color_palettes (view, menu); gtk_popover_present ((GtkPopover *)menu); gchar * str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(view_pop_actions)); g_free (str); gtk_widget_set_parent (menu, view -> win); gtk_widget_set_size_request (menu, -1, (view -> mode == ANALYZE) ? 742 : 242); pop_menu_at_pointer (menu, ptx, pty); #else menu = gtk_menu_new (); GtkWidget * item; if (view -> mode == ANALYZE) { menu_items_opengl (menu, view, 1); add_menu_separator (menu); if (get_project_by_id(view -> proj) -> nspec) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Atom(s)"), TRUE, menu_atoms (view, 1, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Bond(s)"), TRUE, menu_bonds (view, 1, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Clone(s)"), TRUE, menu_clones (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, 1, 0)); add_menu_separator (menu); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_coord (view, 1)); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Polyhedra"), TRUE, menu_poly (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Rings"), view -> rings, menu_rings (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Chain(s)"), view -> chains, add_menu_coord (view, 1, 9))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Fragment(s)"), opengl_project -> coord -> totcoord[2], add_menu_coord (view, 1, 2))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Molecule(s)"), opengl_project -> coord -> totcoord[3], add_menu_coord (view, 1, 3))); gtk3_menu_item (menu, _("Advanced"), IMG_NONE, NULL, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); // add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); add_menu_separator (menu); } gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Tools"), TRUE, menu_tools(view, 1))); add_menu_separator (menu); menu_items_view (menu, view, 1); add_menu_separator (menu); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_anim (view, 1)); } else { item = create_menu_item (TRUE, _("Tools")); gtk_menu_item_set_submenu ((GtkMenuItem *)item, menu_tools(view, 1)); gtk_menu_shell_append ((GtkMenuShell *)menu, item); add_menu_separator (menu); item = create_menu_item (TRUE, _("Insert")); add_edition_sub_menu (item, G_CALLBACK(to_add_object), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, item); add_menu_separator (menu); if (opengl_project -> steps == 1) { gtk3_menu_item (menu, _("Extract/Rebuild on Motion"), IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[0][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[0][0]); gtk3_menu_item (menu, _("Extract/Rebuild on Copy"), IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[1][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[1][0]); } gtk3_menu_item (menu, _("Reset Motion"), IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(reset_coords), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, _("Reset View"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Center Molecule"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); if (! view -> fullscreen) { gtk3_menu_item (menu, _("Fullscreen"), IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menu, _("Exit Fullscreen"), IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_Escape, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, _("Shortcuts"), IMG_NONE, NULL, G_CALLBACK(view_shortcuts), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); pop_menu_at_pointer (menu, NULL); #endif } atomes_1.3.1/src/opengl/win/initchain.c0000664000175000017500000000602215212624223017467 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initchain.c * @short Functions collecting chain(s) data from Fortran90 \n Functions allocating chain(s) data from Fortran90 * @author Sébastien Le Roux */ /* * This file: 'initchain.c' * * Contains: * - The functions collecting chain(s) data from Fortran90 - The functions allocating chain(s) data from Fortran90 * * List of functions: void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]); void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]); void allocate_all_chains_ (int * st, int * ta, int * nring); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" /*! \fn void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) \brief getting the chain data elemnts from Fortran90 \param st the MD step \param ta the chain size \param ri the chain id \param nchain the chain element(s) */ void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) { int i; for (i=0; i< * ta; i++) { active_glwin -> all_chains[* st][* ta - 1][* ri][i] = nchain[i] - 1; } } /*! \fn void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[*num]) \brief allocate atom chains data from Fortran90 information \param st the MD step \param at the atom id \param ta the chain size \param num the number of chain(s) \param nchain the chain id(s) */ void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]) { if (nchain != NULL) { int i; active_project -> atoms[* st][* at].chain[* ta - 1] = allocint (* num + 1); active_project -> atoms[* st][* at].chain[* ta - 1][0] = * num; for (i=0; i < * num; i++) { active_project -> atoms[* st][* at].chain[* ta - 1][i+1] = nchain[i] - 1; } } } /*! \fn void allocate_all_chains_ (int * st, int * ta, int * nring) \brief allocate chains data from Fortran90 information \param st the MD step \param ta the number of chain size(s) \param nring the number of chain(s) of that size */ void allocate_all_chains_ (int * st, int * ta, int * nring) { active_glwin -> all_chains[* st][* ta - 1] = allocdint (* nring, * ta); active_glwin -> num_chains[* st][* ta - 1] = * nring; } atomes_1.3.1/src/opengl/win/m_coord.c0000664000175000017500000005307715212624223017157 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_coord.c * @short Functions to create the 'Chemistry -> Coordination' submenu * @author Sébastien Le Roux */ /* * This file: 'm_coord.c' * * Contains: * - The functions to create the 'Chemistry -> Coordination' submenu * * List of functions: gboolean is_coord_in_menu (int id, project * this_proj); void detach_frag_mol_menu (glwin * view, int id, int jd); G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * add_menu_coord (glwin * view, int id, int jd); GtkWidget * menu_coord (glwin * view, int id); GtkWidget * menu_rings (glwin * view, int id); GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data); GMenu * menu_show_coord (glwin * view, int popm, int id, int mid); GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid); GMenu * menu_show_rings (glwin * view, int popm, int id, int mid); GMenu * add_menu_coord (glwin * view, int popm, int id); GMenu * menu_coord (glwin * view, int popm); GMenu * menu_rings (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); #endif /*! \fn gboolean is_coord_in_menu (int id, project * this_proj) \brief is this coordination in a menu ? \param id the coordination type \param this_proj the target project */ gboolean is_coord_in_menu (int id, project * this_proj) { if (((id == 2 || id == 3) && this_proj -> coord -> totcoord[id] <= COORD_MAX_MENU) || id < 2 || id > 3) { return TRUE; } else { return FALSE; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show/hide coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) \brief show/hide coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) #endif { qint * cid = (qint *)data; int i, j, k; int c, g, s; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; j = 0; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } j += c; #ifdef GTK3 show = (widg) ? gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg) : this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]; #else GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * coord = g_action_get_name ((GAction *)action); int lgt = strlen (coord); gchar * name = g_strdup_printf ("%c%c", coord[lgt-2], coord[lgt-1]); if (g_strcmp0(name, ".1") == 0) { name = g_strdup_printf ("%.*s.0", lgt-2, coord); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]; } #endif #ifdef DEBUG g_debug ("SHOW_HIDE_COORD:: p= %d, s= %d, c= %d, g= %d, show= %d", this_proj -> id, s, c, g, show); #endif #ifdef GTK3 // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { for (i=0; i<2; i++) { if (widg != this_proj -> modelgl -> ogl_geom[i][g][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[i][g][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[i][g][j]) != show) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[i][g][j], show); } } } } } #endif if (doit) { this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j] = show; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (g < 2) { if (this_proj -> atoms[i][j].sp == s && this_proj -> atoms[i][j].coord[g] == c) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } else if (g < 4) { if (this_proj -> atoms[i][j].coord[g] == c) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } else if (g < 9) { k = this_proj -> coord -> geolist[g][0][c] - 1; if (this_proj -> atoms[i][j].rings[s][k] != NULL) { if (this_proj -> atoms[i][j].rings[s][k][0]) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } } else { k = this_proj -> coord -> geolist[g][0][c] - 1; if (this_proj -> atoms[i][j].chain[k] != NULL) { if (this_proj -> atoms[i][j].chain[k][0]) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } } } } init_default_shaders (this_proj -> modelgl); #ifdef GTK4 if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } #endif } } #ifdef GTK3 /*! \fn void detach_frag_mol_menu (glwin * view, int id, int jd) \brief create a fragment/molecule type submenu \param view the target glwin \param id main app (0) or popup (1) \param jd coordination type */ void detach_frag_mol_menu (glwin * view, int id, int jd) { GtkWidget * widg; if (view -> oglmc[id][jd] != NULL) { if (view -> oglmc[id][jd][0] != NULL) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmc[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmc[id][jd][0])); } } } } if (view -> oglmv[id][jd] != NULL) { if (view -> oglmv[id][jd][0] != NULL) { if (GTK_IS_WIDGET(view -> oglmv[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmv[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmv[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmv[id][jd][0])); } } } } } /*! \fn GtkWidget * add_menu_coord (glwin * view, int id, int jd) \brief create a coordination type submenu \param view the target glwin \param id main app (0) or popup (1) \param jd coordination type */ GtkWidget * add_menu_coord (glwin * view, int id, int jd) { int i, j; GtkWidget * widg; GtkWidget * menucts; project * this_proj = get_project_by_id (view -> proj); GtkWidget * menuct = gtk_menu_new (); if (is_coord_in_menu(jd, this_proj)) { if (jd == 2 || jd == 3) detach_frag_mol_menu(view, id, jd); GtkWidget * colt = create_menu_item (TRUE, _("Show/Hide")); gtk_menu_shell_append ((GtkMenuShell *)menuct, colt); if (jd < 2 || jd > 3) { menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); if (jd > 3) { if (jd == 9) { colt = create_menu_item (FALSE, _("Atoms in Chain(s) of Size")); } else { colt = create_menu_item (FALSE, _("Atoms in Ring(s) of Size")); } gtk_menu_shell_append ((GtkMenuShell *)menucts, colt); menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); } j = (jd < 2) ? this_proj -> nspec : this_proj -> coord -> totcoord[jd]; for (i=0; i oglmv[id][jd]) { if (GTK_IS_WIDGET(view -> oglmv[id][jd][i])) { widg = gtk_widget_get_parent (view -> oglmv[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmv[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmv[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> oglmv[id][jd][i]); } } } else { if (view -> ogl_geom[id][jd]) { if (GTK_IS_WIDGET(view -> ogl_geom[id][jd][i])) { widg = gtk_widget_get_parent (view -> ogl_geom[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_geom[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> ogl_geom[id][jd][i]); } } } } } else if ((jd == 2 && view -> adv_bonding[0]) || (jd == 3 && view -> adv_bonding[1])) { if (view -> oglmv[id][jd]) { gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmv[id][jd][0]); } } if (jd != 9) { colt = create_menu_item (FALSE, _("Color(s)")); gtk_menu_shell_append ((GtkMenuShell *)menuct, colt); } if (jd < 2) { menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); if (view -> oglmc[id][jd]) { for (i=0; i nspec; i++) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][i])) { widg = gtk_widget_get_parent (view -> oglmc[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmc[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> oglmc[id][jd][i]); } } } } else if ((jd == 2 && view -> adv_bonding[0]) || (jd == 3 && view -> adv_bonding[1])) { if (view -> oglmc[id][jd]) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmc[id][jd][0]); } } } else if ((jd > 3 && jd < 9) && view -> rings) { if (view -> oglmc[id][jd]) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmc[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmc[id][jd][0])); } gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmc[id][jd][0]); } } } } add_advanced_item (menuct, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[jd][1], FALSE, 0, 0); return menuct; } /*! \fn GtkWidget * menu_coord (glwin * view, int id) \brief create the 'Coordination' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_coord (glwin * view, int id) { GtkWidget * menuco = create_menu_item (FALSE, _("Coordination")); GtkWidget * menuc = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)menuco, menuc); gtk_menu_shell_append ((GtkMenuShell *)menuc, menu_item_new_with_submenu (_("Total(s)"), TRUE, add_menu_coord(view, id, 0))); gtk_menu_shell_append ((GtkMenuShell *)menuc, menu_item_new_with_submenu (_("Partial(s)"), TRUE, add_menu_coord(view, id, 1))); return menuco; } /*! \fn GtkWidget * menu_rings (glwin * view, int id) \brief create the 'Ring(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_rings (glwin * view, int id) { GtkWidget * menuco = gtk_menu_new (); if (view -> rings) { int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (id == 0) { view -> ogl_rings[i+1] = menu_item_new_with_submenu (_(rings_type[i]), TRUE, add_menu_coord (view, id, 4+i)); gtk_menu_shell_append ((GtkMenuShell *)menuco, view -> ogl_rings[i+1]); } else { gtk_menu_shell_append ((GtkMenuShell *)menuco, menu_item_new_with_submenu (_(rings_type[i]), TRUE, add_menu_coord (view, id, 4+i))); } } } } return menuco; } #else /*! \fn GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) \brief create a submenu to attach a color palette \param view the target glwin \param act the custom attribute to attach a widget \param popm main app (0) or popup (1) \param id id number \param handler the associated callback \param data the associated data pointer */ GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, act, act, popm, id, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menu, _("More Colors ..."), act, popm, id, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) \brief create the coordination 'Show' or 'Color' submenus \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i, j, k; for (i=0; i nspec; i++) { menus = g_menu_new (); if (this_proj -> coord) { if (this_proj -> coord -> ntg[id]) { j = 0; for (k=0; k coord -> ntg[id][k]; } for (k=0; k < this_proj -> coord -> ntg[id][i]; k++) { if (id) { stra = exact_name (env_name (this_proj, k, i, 1, NULL)); } else { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][i][k]); } if (! mid) { strb = g_strdup_printf ("%s-s", stra); append_opengl_item (view, menus, stra, strb, popm, k+j, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][k+j][id], TRUE, view -> anim -> last -> img -> show_coord[id][k+j], FALSE, TRUE); } else { strb = g_strdup_printf ("%s-c", stra); append_submenu (menus, stra, color_item(view, strb, popm, k+j, G_CALLBACK(window_color_coord), & view -> gcid[id][k+j][id])); } g_free (stra); g_free (strb); } } } append_submenu (menu, this_proj -> chemistry -> label[i], menus); g_object_unref (menus); } return menu; } /*! \fn G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open advancedd coordination properties GTK4 callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) { coord_properties (NULL, data); } /*! \fn GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) \brief create a fragment/molecule coordination submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); if (active_coord -> totcoord[id] <= COORD_MAX_MENU) { gchar * stra, * strb; int i; for (i=0; i < this_proj -> coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%s N°%d", (id == 2) ? _("Fragment") : _("Molecule"), i+1); strb = g_strdup_printf ("%s-%d", (id == 2) ? "frag" : "mol", i+1); if (! mid) { append_opengl_item (view, menu, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_coord[id][i], FALSE, TRUE); } else { append_submenu (menu, stra, color_item(view, (id == 2) ? "fcol": "mcol", popm, i, G_CALLBACK(window_color_coord), & view -> gcid[id][i][id])); } g_free (stra); g_free (strb); } } // append_opengl_item (view, menu, _("All"), "all-fm", popm, id, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[id][1], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) \brief create a ring coordination submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; if (! mid) { menus = g_menu_new (); append_submenu (menu, (id < 9) ? _("Atoms in Ring(s) of Size") : _("Atoms in Chain(s) of Size"), menus); } project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i; for (i=0; i < this_proj -> coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][0][i]); strb = g_strdup_printf ("%d-%s-%s", id, stra, (mid) ? "color" : "coord"); if (! mid) { append_opengl_item (view, menus, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_coord[id][i], FALSE, TRUE); } else { append_submenu (menu, stra, color_item(view, "color", popm, i, G_CALLBACK(window_color_coord), & view -> gcid[id][i][id])); } g_free (stra); g_free (strb); } if (! mid) g_object_unref (menus); return menu; } /*! \fn GMenu * add_menu_coord (glwin * view, int popm, int id) \brief create a coordination type submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type */ GMenu * add_menu_coord (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * menu_name[2] = {i18n("Show/Hide"), i18n("Color")}; if (is_coord_in_menu(id, this_proj)) { int i; for (i=0; i<2; i++) { if (id < 2) { append_submenu (menu, _(menu_name[i]), menu_show_coord(view, popm, id, i)); } else if (id < 4) { append_submenu (menu, _(menu_name[i]), menu_show_frag_mol(view, popm, id, i)); } else if (id < 10) { append_submenu (menu, _(menu_name[i]), menu_show_rings(view, popm, id, i)); } } append_opengl_item (view, menu, _("Advanced"), "adv-c", popm, id, NULL, IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[id][1], FALSE, FALSE, FALSE, TRUE); } return menu; } /*! \fn GMenu * menu_coord (glwin * view, int popm) \brief create the 'Coordination' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_coord (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Total(s)"), add_menu_coord(view, popm, 0)); append_submenu (menu, _("Partial(s)"), add_menu_coord(view, popm, 1)); return menu; } /*! \fn GMenu * menu_rings (glwin * view, int popm) \brief create the 'Ring(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_rings (glwin * view, int popm) { GMenu * menu = g_menu_new (); if (view -> rings) { int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { append_submenu (menu, _(rings_type[i]), add_menu_coord (view, popm, 4+i)); } } } return menu; } #endif atomes_1.3.1/src/opengl/win/w_coord.c0000664000175000017500000014455115212624223017167 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_coord.c * @short Functions to create the 'Environments configuration' window * @author Sébastien Le Roux */ /* * This file: 'w_coord.c' * * Contains: * - The functions to create the 'Environments configuration' window * * List of functions: int get_page_from_geo_coord (glwin * view, int geo, int coord); gboolean add_geo (int poly, project * this_proj, int g, int i, int j); G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data); void poly_alpha_has_changed (gpointer data, GLfloat v); void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col); void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid); void set_this_frag_mol_color (gpointer data, GtkTreePath * path); G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data); G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data); G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data); G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); GtkWidget * coord_tab (glwin * view, int geo, int poly); GtkWidget * create_frag_mol_tree (project * this_proj, int geo); GtkWidget * create_frag_mol_search (project * this_proj, int geo); GtkWidget * fragmol_tab (glwin * view, int geo); GtkWidget * param_tab (glwin * view); GtkWidget * advanced_coord_properties (glwin * view, int page); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "bind.h" extern cairo_surface_t * col_surface (double r, double g, double b, int x, int y); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data); extern int selected_aspec; extern GtkWidget * rings_tab (glwin * view, int g); extern GtkWidget * chains_tab (glwin * view); char * text_maps[ATOM_MAPS] = {i18n("Atomic Species"), i18n("Total"), i18n("Partial"), i18n("Fragment(s)"), i18n("Molecule(s)")}; int frag_mol_status; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) \brief toggle show / hide coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) \brief toggle show / hide coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; int i, j, k; int s, g, c; project * this_proj = get_project_by_id (the_data -> a); s = the_data -> b; g = the_data -> d; c = the_data -> c; #ifdef DEBUG g_debug ("Toggle show/hide coord:: s= %d, g= %d, c= %d", s, g, c); #endif j = 0; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } j += c; k = (widg) ? button_get_status ((GtkWidget *)widg) : frag_mol_status; if (k != this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]) { if (is_coord_in_menu(g, this_proj)) { #ifdef GTK4 gchar * name; gchar * str, * env; if (g < 2) { if (g) { env = env_name (this_proj, c, s, 1, NULL); str = exact_name (env); g_free (env); } else { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[g][s][c]); } name = g_strdup_printf ("set-%s-s.%d.0", str, j); g_free (str); } else if (g > 1 && g < 4) { name = g_strdup_printf ("set-%s-%d.%d.0", (g == 2) ? "frag" : "mol", c+1, c); } else if (g > 3 && g < 9) { name = g_strdup_printf ("set-%d-%d-coord.%d.0", g, this_proj -> coord -> geolist[g][0][j], j); } g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); #else gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][g][j], k); #endif } else { tint pointer; pointer.a = g; pointer.b = c; pointer.c = k; opengl_project_changed (the_data -> a); #ifdef GTK4 show_hide_the_coord (NULL, NULL, & pointer); #else show_hide_the_coord (NULL, & pointer); #endif // GTK4 } } init_default_shaders (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) \brief toggle label / unlabel coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) \brief toggle label / unlabel coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; tint pointer; pointer.a = the_data -> d; pointer.b = the_data -> c; pointer.c = (widg) ? button_get_status ((GtkWidget *)widg) : frag_mol_status; selected_aspec = the_data -> b; #ifdef DEBUG g_debug ("Toggle label/unlabel coord:: s= %d, g= %d, c= %d, selec_sp= %d", pointer.a, pointer.b, pointer.c, selected_aspec); #endif opengl_project_changed (the_data -> a); #ifdef GTK4 label_unlabel_coord (NULL, NULL, & pointer); #else label_unlabel_coord (NULL, & pointer); #endif // GTK4 } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) \brief toggle select / unselect coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) \brief toggle select / unselect coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; tint pointer; pointer.a = the_data -> d; pointer.b = the_data -> c; pointer.c = (widg) ? button_get_status ((GtkWidget *)widg) : frag_mol_status; selected_aspec = the_data -> b; #ifdef DEBUG g_debug ("Toggle select/unselect coord:: s= %d, g= %d, c= %d, selec_sp= %d", pointer.a, pointer.b, pointer.c, selected_aspec); #endif opengl_project_changed (the_data -> a); #ifdef GTK4 select_unselect_coord (NULL, NULL, & pointer); #else select_unselect_coord (NULL, & pointer); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) \brief toggle show / hide polyhedra callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) \brief toggle show / hide polyhedra callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; int i, j, k; int s, g, c; project * this_proj = get_project_by_id(the_data -> a); s = the_data -> b; g = the_data -> d; c = the_data -> c; j = c; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } k = button_get_status ((GtkWidget *)widg); #ifdef GTK4 if (k != this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j]) { gchar * str, * env; gchar * name; if (g < 2) { if (g) { env = env_name (this_proj, c, s, 1, NULL); str = exact_name (env); g_free (env); } else { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[g][s][c]); } name = g_strdup_printf ("set-%s-%d-p.%d.0", str, g, j); g_free (str); } else if (g > 3 && g < 9) { name = g_strdup_printf ("set-%d-%d-p.%d.0", g, this_proj -> coord -> geolist[g][0][j], j); } g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); } #else // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][g][j], k); } this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j] = k; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); #endif } /*! \fn G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) \brief set fragment or molecule color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g; project * this_proj = get_project_by_id(cid -> a); g = cid -> b; c = cid -> c; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][0][c] = get_button_color (colob); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) \brief set coordination color \param colob the GtkColorChosser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (g > 3) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c] = get_button_color (colob); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn void poly_alpha_has_changed (gpointer data, GLfloat v) \brief change polyhedra opacity \param data the associated data pointer \param v the new opacity value */ void poly_alpha_has_changed (gpointer data, GLfloat v) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (g > 1) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c].alpha = v; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set polyhedra opacity - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { poly_alpha_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) \brief set polyhedra opacity - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) { poly_alpha_has_changed (data, (GLfloat) gtk_range_get_value (range)); } /*! \fn gboolean add_geo (int poly, project * this_proj, int g, int i, int j) \brief test add this geometry data to the tree store or not ? \param poly polyhedra (1 / 0) \param this_proj the target project \param g the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) \param i target chemical species or 0 \param j geometry id number */ gboolean add_geo (int poly, project * this_proj, int g, int i, int j) { if (! poly) { if (g == 0) { if (this_proj -> coord -> geolist[g][i][j] != -1) { return TRUE; } else { return FALSE; } } else if (g == 1) { return TRUE; } else { if (this_proj -> coord -> geolist[g][i][j]) { return TRUE; } else { return FALSE; } } } else { if (g == 0 || g > 3) { if (this_proj -> coord -> geolist[g][i][j] > 2) { return TRUE; } else { return FALSE; } } else { int l, m; m = 0; for (l=0; l nspec; l++) { m += this_proj -> coord -> partial_geo[i][j][l]; } if (m > 2) { return TRUE; } else { return FALSE; } } } } /*! \fn GtkWidget * coord_tab (glwin * view, int geo, int poly) \brief create coordination(s) and polyhedra tab \param view the target glwin \param geo the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) \param poly polyhedra (1 / 0) */ GtkWidget * coord_tab (glwin * view, int geo, int poly) { int i, j, k, l, m, n; int p = view -> proj; gchar * str, * env; GtkWidget * wb; GtkWidget * but; gchar * coln[15] = {" ", i18n("Color"), i18n("Show"), i18n("Label"), i18n("Pick"), i18n("Alpha"), i18n("Color *"), i18n("Show **"), i18n("Label **"), i18n("Pick **"), i18n("Ring(s) size"), i18n("Chain(s) size"), i18n("Show *"), i18n("Label *"), i18n("Pick *")}; int scol[15] = {100, 70, 65, 40, 40, 150, 70, 75, 55, 55, 100, 100, 60, 50, 55}; GtkWidget * box = create_vbox (BSEP); GtkWidget * coord = create_scroll (box, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (coord, TRUE); gtk_widget_set_vexpand (coord, TRUE); n = 0; if (geo > 3 && ! poly) { n = (geo == 9) ? 11 : 10; gtk_widget_set_size_request (coord, -1, 475); if (geo < 9) { add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_(" * for the polyhedra only"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_("** affect all atoms that belong to ring(s) of this size"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_("* affect all atoms that belong to chain(s) of this size"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } } GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, coord, vbox); l = 0; if (poly) { l = 1; } wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, FALSE, 0); for (i=0; i<5-2*l-geo/9; i++) { if (geo == 9) { j = 11 + i; } else if (i == 0 && geo > 3) { j = 10; } else if (i > 0 && geo > 3 && ! poly) { j = i+5; } else if (i == 1 && poly) { j = 5; } else { j = i; } str = g_strdup_printf ("%s", _(coln[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[j], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); } k = 0; project * this_proj = get_project_by_id(p); m = (geo < 2) ? this_proj -> nspec : 1; if ((geo < 2 || (geo == 9 && view -> chain_max) || (geo > 3 && geo < 9 && view -> ring_max[geo-4])) && this_proj -> coord -> totcoord[geo] > 0) { for (i=0; i < m; i++) { if (geo == 0) { for (j=0 ; j < this_proj -> coord -> ntg[geo][i]; j++) { if (add_geo(poly, this_proj, geo, i, j)) { str = g_strdup_printf (" %s", this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); break; } } } for (j=0 ; j < this_proj -> coord -> ntg[geo][i]; j++, k++) { if (add_geo(poly, this_proj, geo, i, j)) { wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, FALSE, 0); if (geo == 0) { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[geo][i][j]); } else if (geo == 1) { env = env_name (this_proj, j, i, 1, NULL); str = exact_name(env); g_free (env); } else { str = g_strdup_printf (_("%d atoms"), this_proj -> coord -> geolist[geo][i][j]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[0], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); if (poly) { but = create_hscale (0.0, 1.0, 0.01, view -> anim -> last -> img -> spcolor[geo][i][j].alpha, GTK_POS_LEFT, 3, 160, G_CALLBACK(set_poly_alpha), G_CALLBACK(scroll_set_poly_alpha), & view -> gcid[geo][k][geo]); } else if (geo != 9) { ColRGBA col = view -> anim -> last -> img -> spcolor[geo][i][j]; col.alpha = 1.0; but = color_button (col, TRUE, 80, -1, G_CALLBACK(set_color_coord), & view -> gcid[geo][k][geo]); } if (poly || geo != 9) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 5); if (poly) { but = check_button (NULL, -1, -1, view -> anim -> last -> img -> show_poly[geo][k], G_CALLBACK(toggled_show_hide_poly), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 20); } else { but = check_button (NULL, -1, -1, view -> anim -> last -> img -> show_coord[geo][k], G_CALLBACK(toggled_show_hide_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 20); but = check_button (NULL, -1, -1, FALSE, G_CALLBACK(toggled_label_unlabel_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 15+n); but = check_button (NULL, -1, -1, FALSE, G_CALLBACK(toggled_select_unselect_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 15+n/2); } } } } } return box; } /*! \fn G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief tree store action on cell selection \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, g, v, act; tint * dat = (tint * )data; GtkTreeIter iter; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); g = (dat -> b < 30) ? 2 : 3; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, path); act = dat -> b - 10*g; gtk_list_store_set (coord -> frag_mol_model[g-2], & iter, act, v, -1); gtk_tree_model_get (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, 0, & i, -1); frag_mol_status = v; switch (act) { case 1: // Viz toggled_show_hide_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; case 3: // Label toggled_label_unlabel_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; case 4: // Pick toggled_select_unselect_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; } } /*! \fn void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) \brief set tree store cell background color \param store the GtkListStore \param iter the GtkTreeIter target to update \param col the background color to set */ void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) { cairo_surface_t * surface; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 70, 50); cairo_t * cr = cairo_create (surface); cairo_set_source_rgba (cr, col.red, col.green, col.blue, 1.0); cairo_paint (cr); GdkPixbuf * pix = convert_to_pixbuf (surface); cairo_surface_destroy (surface); cairo_destroy(cr); gtk_list_store_set (store, & iter, 2, pix, -1); } /*! \fn void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid) \brief add fragment or molecule in the search tree \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) \param gid fragment or molecule id number to add */ void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid) { GtkTreeIter id_level; GtkTreeIter new_level; gboolean valid; int i; int prepend = 0; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkListStore * store = (GtkListStore *) coord -> frag_mol_model[geo-2]; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> frag_mol_model[geo-2]); valid = gtk_tree_model_get_iter_first(mod, & id_level); while (valid) { gtk_tree_model_get (mod, & id_level, 0, & i, -1); if (i > gid) { prepend = 1; valid = FALSE; } else if (i == gid) { prepend = 2; valid = FALSE; } else { valid = gtk_tree_model_iter_next(mod, & id_level); } } if (prepend < 2) { switch (prepend) { case 0: gtk_list_store_append (store, & id_level); gtk_list_store_set (store, & id_level, 0, gid, 1, this_proj -> modelgl -> anim -> last -> img -> show_coord[geo][gid-1], 3, FALSE, 4, FALSE, -1); set_frag_mol_cell_background (store, id_level, this_proj -> modelgl -> anim -> last -> img -> spcolor[geo][0][gid-1]); break; case 1: gtk_list_store_insert_before (store, & new_level, & id_level); gtk_list_store_set (store, & new_level, 0, gid, 1, this_proj -> modelgl -> anim -> last -> img -> show_coord[geo][gid-1], 3, FALSE, 4, FALSE, -1); set_frag_mol_cell_background (store, new_level, this_proj -> modelgl -> anim -> last -> img -> spcolor[geo][0][gid-1]); break; } } } /*! \fn G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) \brief set fragment / molecule color - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) { tint * dat = (tint * )data; int i, g; if (response_id == GTK_RESPONSE_OK) { g = (dat -> b < 30) ? 2 : 3; GtkTreeIter fm_iter; gtk_tree_model_get (GTK_TREE_MODEL(opengl_project -> modelgl -> coord_win -> frag_mol_model[g-2]), & fm_iter, 0, & i, -1); opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1] = get_window_color (GTK_WIDGET(win)); int shaders[3] = {ATOMS, BONDS, LABEL}; re_create_md_shaders (3, shaders, opengl_project); update (opengl_project -> modelgl); } destroy_this_dialog (win); } /*! \fn void set_this_frag_mol_color (gpointer data, GtkTreePath * path) \brief set fragment / molecule color - creating the dialog \param data the associated data pointer \param path the path in the tree view */ void set_this_frag_mol_color (gpointer data, GtkTreePath * path) { int i, g; tint * dat = (tint * )data; opengl_project_changed(dat -> a); g = (dat -> b < 30) ? 2 : 3; GtkTreeIter iter; gtk_tree_model_get_iter (GTK_TREE_MODEL(opengl_project -> modelgl -> coord_win -> frag_mol_model[g-2]), & iter, path); coord_edition * coord = opengl_project -> modelgl -> coord_win; gtk_tree_model_get (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, 0, & i, -1); gchar * ctitle[2] = {i18n("Fragment"), i18n("Molecule")}; gchar * str = g_strdup_printf (_("%s N°%d color"), _(ctitle[g-2]), i); GtkWidget * widg = gtk_color_chooser_dialog_new (str, GTK_WINDOW(coord -> win)); g_free (str); set_color_chooser_color (widg, opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1]); run_this_gtk_dialog (widg, G_CALLBACK(run_set_this_frag_mol_color), data); set_frag_mol_cell_background ((GtkListStore *) coord -> frag_mol_model[g-2], iter, opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1]); } /*! \fn G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) \brief set fragment/molecule color tree view callback \param tree_view the GtkTreeView sending the signal \param path the path in the tree view \param column the tree view column \param data the associated data pointer */ G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) { gchar * title; g_object_get (column, "title", & title, NULL, NULL); if (g_strcmp0(title, _("Color")) == 0) { set_this_frag_mol_color (data, path); } } /*! \fn GtkWidget * create_frag_mol_tree (project * this_proj, int geo) \brief create the fragment(s) / molecule(s) search tree store \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_tree (project * this_proj, int geo) { int i; GtkTreeViewColumn * frag_mol_col[7]; GtkCellRenderer * frag_mol_cell[7]; gchar * ctitle[5]={i18n("Id."), i18n("Show"), i18n("Color"), i18n("Label"), i18n("Pick")}; gchar * ctype[5]={"text", "active", "pixbuf", "active", "active"}; GType col_type[5]={G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> frag_mol_model[geo-2] = gtk_list_store_newv (5, col_type); GtkWidget * frag_mol_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> frag_mol_model[geo-2])); for (i=0; i<5; i++) { if (! i) { frag_mol_cell[i] = gtk_cell_renderer_text_new (); } else if (i == 2) { frag_mol_cell[i] = gtk_cell_renderer_pixbuf_new (); } else { frag_mol_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(frag_mol_cell[i]), "toggled", G_CALLBACK(on_select_frag_mol), & this_proj -> modelgl -> colorp[geo*10+i][0]); } gtk_cell_renderer_set_fixed_size (frag_mol_cell[i], 70, 25); frag_mol_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i]), frag_mol_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(frag_mol_tree), frag_mol_col[i]); gtk_tree_view_column_set_alignment (frag_mol_col[i], 0.5); } g_object_set (frag_mol_tree, "activate-on-single-click", TRUE, NULL, NULL); g_signal_connect (G_OBJECT(frag_mol_tree), "row-activated", G_CALLBACK(to_set_this_frag_mol_color), & this_proj -> modelgl -> colorp[geo*10+i][0]); return frag_mol_tree; } /*! \fn G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) \brief update the fragment(s) / molecule(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; const gchar * m = entry_get_text (res); int v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); int g = dat -> b; if (v > 0 && v <= this_proj -> coord -> totcoord[g]) { add_this_frag_mol_to_search_tree (this_proj, g, v); } else { update_entry_text (res, ""); } } /*! \fn GtkWidget * create_frag_mol_search (project * this_proj, int geo) \brief create the frgament(s)/molecule(s) search widget \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_search (project * this_proj, int geo) { GtkWidget * frag_mol_search = create_vbox (BSEP); gchar * obj[2] = {i18n("fragment"), i18n("molecule")}; gchar * str = g_strdup_printf (_("Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n"), _(obj[geo-2]), _(obj[geo-2])); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[2]={i18n("Fragment Id.:"), i18n("Molecule Id.:")}; GtkWidget * hbox; GtkWidget * entry; GtkWidget * label; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[geo-2]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_frag_mol_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[geo][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); str = g_strdup_printf ("∈ [%d - %d]", 1, this_proj -> coord -> totcoord[geo]); label = markup_label (str, 50, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, label, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(_("Search result(s)"), 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, create_frag_mol_tree (this_proj, geo), FALSE, FALSE, 0); return frag_mol_search; } /*! \fn GtkWidget * fragmol_tab (glwin * view, int geo) \brief create fragment(s) or molecule(s) tab \param view the target glwin \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * fragmol_tab (glwin * view, int geo) { int i, j; GtkWidget * wb; gchar * str; int scol[5] = {70, 70, 65, 40, 40}; gchar * coln[5] = {i18n("Id."), i18n("Color"), i18n("Show"), i18n("Label"), i18n("Pick")}; GtkWidget * box = create_vbox (BSEP); GtkWidget * fragmol = create_scroll (box, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragmol, TRUE); gtk_widget_set_vexpand (fragmol, TRUE); project * this_proj = get_project_by_id(view -> proj); i = this_proj -> coord -> totcoord[geo]; if (i >= GTK_LIMIT) { add_container_child (CONTAINER_SCR, fragmol, create_frag_mol_search(this_proj, geo)); } else { GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragmol, vbox); wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, TRUE, 0); for (j=0; j<5; j++) { str = g_strdup_printf ("%s", _(coln[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[j], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); } for (j=0; j anim -> last -> img -> spcolor[geo][0][j]; col.alpha = 1.0; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, color_button (col, TRUE, 80, -1, G_CALLBACK(set_color_frag_mol), & view -> gcid[geo][j][geo]), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, view -> anim -> last -> img -> show_coord[geo][j], G_CALLBACK(toggled_show_hide_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, FALSE, G_CALLBACK(toggled_label_unlabel_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, FALSE, G_CALLBACK(toggled_select_unselect_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 15); } } return box; } /*! \fn G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) \brief change atom color map \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = combo_get_active ((GtkWidget *)box); int j = view -> cmap[i]; #ifdef GTK4 gchar * variant = g_strdup_printf ("set-amap.%d.0", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-amap", g_variant_new_string((const gchar *)variant)); g_free (variant); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); #endif } /*! \fn G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) \brief change polyhedra color map \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = combo_get_active ((GtkWidget *)box); int j = view -> cmap[i] + ATOM_MAPS; #ifdef GTK4 gchar * variant = g_strdup_printf ("set-pmap.%d.0", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-pmap", g_variant_new_string((const gchar *)variant)); g_free (variant); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) \brief toggle show / hide cloned polyhedra callback GTK4 \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) \brief toggle show / hide cloned polyhedra callback GTK3 \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) #endif { glwin * view = (glwin *)data; #ifdef GTK4 view -> anim -> last -> img -> cloned_poly = button_get_status ((GtkWidget *)Button); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-cloned-poly.0.0", NULL); /* int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, get_project_by_id(view -> proj)); update (view); */ #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], gtk_toggle_button_get_active (Button)); #endif } /*! \fn GtkWidget * param_tab (glwin * view) \brief environments configuration window parameters tab \param view the target glwin */ GtkWidget * param_tab (glwin * view) { int i, j, k, l; GtkWidget * vbox = create_vbox (BSEP); /*gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(fragmol), vbox); */ GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 25); GtkWidget * lab = markup_label (_("Atom(s) and bond(s) color map:"), -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * color_box = create_combo (); j = 0; for (i=0; i cmap[j] = i; combo_text_append (color_box, g_strdup_printf (_("%s coordination(s)"), _(text_maps[i]))); j ++; } else if (i == 5 && get_project_by_id(view -> proj) -> force_field[0]) { view -> cmap[j] = i; combo_text_append (color_box, _("Force field (DL_POLY)")); j ++; } else if (i == 6 && view -> custom_map != NULL) { view -> cmap[j] = i; combo_text_append (color_box, _("Custom")); j ++; } else if (i == 0 || (i == 3 && view -> adv_bonding[0]) || (i == 4 && view -> adv_bonding[1])) { view -> cmap[j] = i; combo_text_append (color_box, _(text_maps[i])); j ++; } } l = 0; for (k=0; k anim -> last -> img -> color_map[0] == view -> cmap[k]) { l = k; break; } } combo_set_active (color_box, l); g_signal_connect (G_OBJECT (color_box), "changed", G_CALLBACK(set_atom_color_map_box), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_box, FALSE, FALSE, 100); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 25); lab = markup_label (_("Polyhedra color map:"), -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); color_box = create_combo (); for (i=0; i adv_bonding[0]) || (i == 4 && view -> adv_bonding[1])) { combo_text_append (color_box, _(text_maps[i])); } else if (i == 5 && get_project_by_id(view -> proj) -> force_field[0]) { combo_text_append (color_box, _("Force field (DL_POLY)")); } else if (i == 6 && view -> custom_map != NULL) { combo_text_append (color_box, _("Use atom(s) custom map")); } } l = 0; for (k=0; k anim -> last -> img -> color_map[1] == view -> cmap[k]) { l = k; // + ATOM_MAPS; break; } } combo_set_active (color_box, l); g_signal_connect (G_OBJECT (color_box), "changed", G_CALLBACK(set_poly_color_map_box), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_box, FALSE, FALSE, 100); widget_set_sensitive (color_box, view -> bonding); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:"), -1, -1, 0.5, 0.5), FALSE, FALSE, 15); GtkWidget * cloned_p = check_button (_("Cloned polyhedra"), -1, 40, view -> anim -> last -> img -> cloned_poly, G_CALLBACK(on_cloned_poly_toggled), view); widget_set_sensitive ((cloned_p), get_project_by_id(view -> proj) -> cell.pbc); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cloned_p, FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC."), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) \brief environments configuration window close button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; view -> coord_win -> win = destroy_this_widget (view -> coord_win -> win); g_free (view -> coord_win); view -> coord_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) \brief environments configuration window close event callback GTK4 \param widg the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) \brief environments configuration window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_coord (NULL, data); return FALSE; } /*! \fn GtkWidget * advanced_coord_properties (glwin * view, int page) \brief create the environments configuration window \param view the target glwin \param page the page of the notebook to display */ GtkWidget * advanced_coord_properties (glwin * view, int page) { gchar * str = g_strdup_printf (_("Environments configuration - %s"), get_project_by_id(view -> proj)->name); GtkWidget * win = create_win (str, view -> win, FALSE, FALSE); g_free (str); char * rings_short[5] = {"AR", "KR", "GR", "PR", "SR"}; GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, vbox); gtk_widget_set_size_request (win, 625, 600); view -> coord_win -> notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(view -> coord_win -> notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(view -> coord_win -> notebook), GTK_POS_LEFT); show_the_widgets (view -> coord_win -> notebook); gtk_widget_set_size_request (view -> coord_win -> notebook, 600, 550); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> coord_win -> notebook, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), param_tab (view), gtk_label_new (_("Parameters"))); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 0, 0), markup_label(_("Total coordination(s) [TC]"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 1, 0), markup_label(_("Partial coordination(s) [PC]"), -1, -1, 0.0, 0.5)); int i; if (view -> rings) { for (i=1; i<5; i++) { if (view -> ring_max[i]) { str = (i) ? g_strdup_printf (_("%s ring(s) [%s]"), _(rings_type[i]), rings_short[i]) : g_strdup_printf (_("All ring(s) (no rule) [%s]"), rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, i+4, 0), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> chains && view -> chain_max) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 9, 0), markup_label(_("Chain(s)"), -1, -1, 0.0, 0.5)); } gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 0, 1), markup_label(_("Polyhedra from TC"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 1, 1), markup_label(_("Polyhedra from PC"), -1, -1, 0.0, 0.5)); if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { str = g_strdup_printf (_("Polyhedra from %s"), rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, i+4, 1), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> adv_bonding[0]) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), fragmol_tab (view, 2), markup_label (_("Fragment(s)"), -1, -1, 0.0, 0.5)); } if (view -> adv_bonding[1]) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), fragmol_tab (view, 3), markup_label (_("Molecule(s)"), -1, -1, 0.0, 0.5)); } if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { str = g_strdup_printf (_("Isolated ring(s) from %s"), rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), rings_tab (view, i), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> chains && view -> chain_max) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), chains_tab (view), markup_label(_("Isolated chain(s)"), -1, -1, 0.0, 0.5)); } GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_coord), view); add_box_child_end (hbox, but, FALSE, FALSE, 0); add_gtk_close_event (win, G_CALLBACK(close_event_coord), view); show_the_widgets (win); gtk_notebook_set_current_page (GTK_NOTEBOOK (view -> coord_win -> notebook), page); return win; } /*! \fn int get_page_from_geo_coord (glwin * view, int geo, int coord) \brief find the proper page to display in the notebook \param view the target glwin \param geo the type of environment \param coord coordination (1) or polyhedra (0) */ int get_page_from_geo_coord (glwin * view, int geo, int coord) { int i, j; if (geo == 30) return 0; if (! coord) { i = (geo < 2) ? 3 : 0; if (view -> rings) { for (j=0; j<5; j++) { if (view -> ring_max[j]) i ++; } } i = (geo < 2) ? i + geo : 4 + 2*i; } else { if (geo > 1) { i = 0; if (view -> rings) { for (j=0; j<5; j++) { if (view -> ring_max[j]) i ++; } } if (geo < 4) { i = 2*(i+2) + geo - 1; } else { i = 0; for (j=0; j<5; j++) { if (view -> ring_max[j]) { if (geo == 4 + j) break; i ++; } } i = 3 + i; } } else { i = geo + 1; } } return i; } /*! \fn G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) \brief create the environments configuration window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) { tint * id = (tint *) data; glwin * view = get_project_by_id(id -> a) -> modelgl; int page = get_page_from_geo_coord(view, id -> b, id -> c); if (view -> coord_win == NULL) { view -> coord_win = g_malloc0(sizeof*view -> coord_win); view -> coord_win -> win = advanced_coord_properties (view, page); } else if (GTK_IS_WIDGET(view -> coord_win -> win)) { show_the_widgets (view -> coord_win -> win); gtk_notebook_set_current_page (GTK_NOTEBOOK (view -> coord_win -> notebook), page); } else { show_warning (_("Error impossible to display the environments window !"), view -> win); } } atomes_1.3.1/src/opengl/win/w_chains.c0000664000175000017500000011045615212624223017323 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_chains.c * @short Functions to create the chain(s) tab for the advanced environments window * @author Sébastien Le Roux */ /* * This file: 'w_chains.c' * * Contains: * - The functions to create the chain(s) tab for the advanced environments window * * List of functions: gchar * chain_atoms (project * this_proj, int step, int size, int cid, gboolean to_file); int get_cmin (project * this_proj, int step); int get_cmax (project * this_proj, int step); void fill_chains_model (GtkTreeStore * store, project * this_proj); void chains_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void add_this_chain_to_search_tree (project * this_proj); G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_save_chains_to_file (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_chains_to_file (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void save_chains_to_file (GtkButton * but, gpointer data); GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this); GtkWidget * create_chains_search (project * this_proj); GtkWidget * chains_tab (glwin * view); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern const gchar * dfi[2]; extern void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); /*! \fn G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select chain toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { tint * dat = (tint * )data; gboolean saved_label[2]; int i, j, c, s, v, u, a, b; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; b = (opengl_project -> steps > 1) ? 1: 0; c = dat -> b; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> chains_model), & iter, path); gtk_tree_store_set (coord -> chains_model, & iter, c, v, -1); if (b) { gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, 0, & s, -1); s = - s - 1; } else { s = 0; } gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, b, & i, -1); i = -i; gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, b+1, & j, -1); switch (c-b) { case 2: // Viz for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; #ifdef GTK4 if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 } break; case 3: // Label for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; opengl_project -> atoms[s][a].label[0] = opengl_project -> atoms[s][a].label[1] = v; } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; break; case 4: // Pick for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; saved_label[0] = opengl_project -> atoms[s][a].label[0]; saved_label[1] = opengl_project -> atoms[s][a].label[1]; #ifdef GTK4 if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 opengl_project -> atoms[s][a].label[0] = saved_label[0]; opengl_project -> atoms[s][a].label[1] = saved_label[1]; } break; } update (opengl_project -> modelgl); } /*! \fn gchar * chain_atoms (project * this_proj, int step, int size, int cid, gboolean to_file) \brief create a string containing the list of atoms in a chain \param this_proj the target project \param step the configuration \param size the size of the ring \param cid the id number of the ring \param to_file output */ gchar * chain_atoms (project * this_proj, int step, int size, int cid, gboolean to_file) { gchar * str; int aid, sid; aid = this_proj -> modelgl -> all_chains[step][size][cid][0]; sid = this_proj -> atoms[step][aid].sp; int i; if (to_file) { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_chains[step][size][cid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s - %s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } else { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_chains[step][size][cid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s-%s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } return str; } /*! \fn void fill_chains_model (GtkTreeStore * store, project * this_proj) \brief fill the entire chain(s) tree store \param store the GtkTreeStore to fill \param this_proj the target project */ void fill_chains_model (GtkTreeStore * store, project * this_proj) { GtkTreeIter step_level, size_level, chain_level; int h, i, j, k, l; gchar * str; if (this_proj -> coord -> totcoord[9]) { for (h=0; h < this_proj -> steps; h++) { if (this_proj -> steps > 1) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); } for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; k = this_proj -> modelgl -> num_chains[h][j-1]; if (this_proj -> steps > 1 && k > 0) { gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, j, 2, 0, 3, 0, 4, 0, 5, 0, -1); } else if (this_proj -> steps == 1) { gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, j, 1, 0, 2, 0, 3, 0, 4, 0, -1); } for (l=0; l steps > 1) { gtk_tree_store_set (store, & chain_level, 0, -(h+1), 1, -j, 2, l+1, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); } else { gtk_tree_store_set (store, & chain_level, 0, -j, 1, l+1, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); } g_free (str); } } } } } /*! \fn void chains_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Chains tree view set color and Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void chains_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int steps = GPOINTER_TO_INT(data); set_renderer_markup (mod, iter, renderer, (steps) ? 6 : 5); } /*! \fn GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this) \brief create the chain(s) search tree store \param this_proj the target project \param fill_this 1 = yes, 0 = no */ GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this) { int i, j, k; GtkTreeViewColumn * chains_col[7]; GtkCellRenderer * chains_cell[7]; gchar * ctitle[7]={i18n("MD step"), i18n("Chain(s) size"), i18n("Id."), i18n("Show"), i18n("Label"), i18n("Pick"), i18n("Atoms")}; gchar * ctype[7]={"text", "text", "text", "active", "active", "active", "text"}; GType col_type_ms[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; GType col_type_ss[6]={G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; coord_edition * coord = this_proj -> modelgl -> coord_win; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; coord -> chains_model = gtk_tree_store_newv (6+j, (j) ? col_type_ms : col_type_ss); if (fill_this) fill_chains_model (coord -> chains_model, this_proj); GtkWidget * chains_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> chains_model)); for (i=0; i<6+j; i++) { if (i < 2+j || i > 4+j) { chains_cell[i] = gtk_cell_renderer_text_new (); } else { chains_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(chains_cell[i]), "toggled", G_CALLBACK(on_select_chains), & this_proj -> modelgl -> colorp[i][0]); } gtk_cell_renderer_set_fixed_size (chains_cell[i], -1, 25); chains_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i+k]), chains_cell[i], ctype[i+k], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(chains_tree), chains_col[i]); gtk_tree_view_column_set_alignment (chains_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i], rings_set_visible, & this_proj -> modelgl -> colorp[i][0], NULL); if (i > 4+j) gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i], chains_set_markup, GINT_TO_POINTER(j), NULL); } return chains_tree; } /*! \fn void add_this_chain_to_search_tree (project * this_proj) \brief add chain in the search tree based on chain length and id \param this_proj the target project */ void add_this_chain_to_search_tree (project * this_proj) { GtkTreeIter step_level, size_level, chain_level; GtkTreeIter new_level; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkTreeStore * store = (GtkTreeStore *) coord -> chains_model; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> chains_model); gboolean valid; gboolean insert = TRUE; int g, h, i, j, k, l, m; gchar * str; int prepend = 0; if (this_proj -> steps > 1) { valid = gtk_tree_model_get_iter_first(mod, & step_level); while (valid) { gtk_tree_model_get (mod, & step_level, 0, & g, -1); if (g > coord -> cst) { prepend = 1; valid = FALSE; } else if (g == coord -> cst) { if (gtk_tree_model_iter_has_child (mod, &step_level)) { h = gtk_tree_model_iter_n_children (mod, &step_level); for (i=0; i coord -> csz) { prepend = 3; valid = FALSE; break; } else if (j == coord -> csz) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { k = gtk_tree_model_iter_n_children (mod, &size_level); for (l=0; l coord -> ch) { prepend = 5; valid = FALSE; break; } else if (m == coord -> ch) { insert = valid = FALSE; break; } } } if (valid) { prepend = 4; valid = FALSE; break; } } } } } if (valid) { prepend = 2; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = chain_atoms (this_proj, coord -> cst-1, coord -> csz-1, coord -> ch-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, coord -> cst, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & step_level); gtk_tree_store_set (store, & new_level, 0, coord -> cst, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & size_level, & new_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 2: gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 3: gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 4: gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 5: gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; } g_free (str); } } else { valid = gtk_tree_model_get_iter_first(mod, & size_level); while (valid) { gtk_tree_model_get (mod, & size_level, 0, & i, -1); if (i > coord -> csz) { prepend = 1; valid = FALSE; } else if (i == coord -> csz) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { j = gtk_tree_model_iter_n_children (mod, &size_level); for (k=0; k coord -> ch) { prepend = 2; valid = FALSE; break; } else if (l == coord -> ch) { insert = valid = FALSE; break; } } } if (valid) { prepend = 3; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = chain_atoms (this_proj, coord -> cst-1, coord -> csz-1, coord -> ch-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, coord -> csz, 1, 0, 2, 0, 3, 0, 4, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & size_level); gtk_tree_store_set (store, & new_level, 0, coord -> csz, 1, 0, 2, 0, 3, 0, 4, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; case 2: gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; case 3: gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; } g_free (str); } } } /*! \fn int get_cmin (project * this_proj, int step) \brief get chain(s) min size for the MD step \param this_proj the target project \param step the MD step */ int get_cmin (project * this_proj, int step) { int i, j; for (i=0; i coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; if (this_proj -> modelgl -> num_chains[step-1][j-1]) break; } return j; } /*! \fn int get_cmax (project * this_proj, int step) \brief get chain(s) max size for the MD step \param this_proj the target project \param step the MD step */ int get_cmax (project * this_proj, int step) { int i, j; for (i=this_proj -> coord -> totcoord[9]-1; i>-1; i--) { j = this_proj -> coord -> geolist[9][0][i]; if (this_proj -> modelgl -> num_chains[step-1][j-1]) break; } return j; } /*! \fn int get_chain_size_index (project * this_proj, int s, int r) \brief NOT USED ! \param this_proj the target project \param s \param r * int get_chain_size_index (project * this_proj, int s, int r) { int i, j; for (i=0; i coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; if (j == r) break; } return i; } */ /*! \fn G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) \brief update the chain(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; gchar * str; const gchar * m = entry_get_text (res); int i, j; int v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); coord_edition * coord = this_proj -> modelgl -> coord_win; switch (dat -> b) { case 0: if (v > 0 && v < this_proj -> steps+1) { if (v != coord -> cst) { coord -> cst = v; coord -> csz = coord -> ch = -1; for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]), ""); } } else { coord -> cst = coord -> csz = coord -> ch = -1; } if (coord -> cst > 0) { update_entry_int(res, coord -> cst); str = g_strdup_printf ("∈ [%d - %d]", get_cmin(this_proj, coord -> cst), get_cmax(this_proj, coord -> cst)); gtk_label_set_text (GTK_LABEL(coord -> chlab[1]), str); g_free (str); } else { update_entry_text (res, ""); for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]), ""); } break; case 1: if (coord -> cst > -1) { i = get_cmin(this_proj, coord -> cst); j = get_cmax(this_proj, coord -> cst); if (v >= i && v <= j) { if (v != coord -> csz) { if (this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]) { coord -> csz = v; coord -> ch = -1; gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), ""); } else { coord -> csz = coord -> ch = -1; } } } } else { coord -> csz = coord -> ch = -1; } if (coord -> csz > 0) { update_entry_int(res, coord -> csz); str = g_strdup_printf ("∈ [1 - %d]", this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]); gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), str); g_free (str); } else { update_entry_text (res, ""); gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), ""); } break; case 2: if (coord -> cst > -1 && coord -> csz > -1) { if (v > 0 && v < this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]+1) { coord -> ch = v; } else { coord -> ch = -1; } } else { coord -> ch = -1; } if (coord -> ch > 0) { update_entry_int(res, coord -> ch); } else { update_entry_text (res, ""); } break; } if (coord -> cst > 0 && coord -> csz > 0 && coord -> ch > 0) { add_this_chain_to_search_tree (this_proj); } } /*! \fn GtkWidget * create_chains_search (project * this_proj) \brief create the chain(s) search widget \param this_proj the target project */ GtkWidget * create_chains_search (project * this_proj) { GtkWidget * chains_search = create_vbox (BSEP); gchar * str = g_strdup_printf (_("Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n")); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[3]={i18n("MD step:"), i18n("Chain size:"), i18n("Chain Id.:")}; int i, j; GtkWidget * hbox; GtkWidget * entry; j = (this_proj -> steps) > 1 ? 0 : 1; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> cst = 1; for (i=j; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[i]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_chains_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); if (i==0) { str = g_strdup_printf ("∈ [1 - %d]", this_proj -> steps); coord -> chlab[i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else if (i == 1) { str = g_strdup_printf ("∈ [%d - %d]", get_cmin(this_proj, coord -> cst), get_cmax(this_proj, coord -> cst)); coord -> chlab[i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else { coord -> chlab[i] = markup_label("", 50, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, coord -> chlab[i], FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, markup_label(_("Search result(s)"), 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, create_chains_tree (this_proj, FALSE), FALSE, FALSE, 0); return chains_search; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_chains_to_file (GtkNativeDialog * info, gint response_id, gpointer data) \brief save chains data to file: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_chains_to_file (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_chains_to_file (GtkDialog * info, gint response_id, gpointer data) \brief save chains data to file: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_chains_to_file (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * chains_file = file_chooser_get_file_name (chooser); // Save data to file here ! if (chains_file) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); if (this_proj -> coord -> totcoord[9]) { FILE * fp = fopen (chains_file, dfi[1]); gchar * str; if (fp) { fprintf (fp, _("# This file contains the list of all chains in the %s model\n\n"), prepare_for_title(this_proj -> name)); int h, i, j, k, l; for (h=0; h < this_proj -> steps; h++) { i = h+1; if (this_proj -> steps > 1) fprintf (fp, _("Step N°%d\n"), i); for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; fprintf (fp, (this_proj -> steps > 1) ? _("\n\tChain(s) of size %d atoms\n") : _("\nChain(s) of size %d atoms\n"), j); k = this_proj -> modelgl -> num_chains[h][j-1]; // ring size for (l=0; l steps > 1) ? "\t\tN°%d\t:\t%s\n" : "\tN°%d\t:\t%s\n", l+1, str); g_free (str); } } } fclose (fp); } else { str = g_strdup_printf (_("Impossible to open file: %s"), chains_file); show_error (str, 0, this_proj -> modelgl -> coord_win -> win); g_free (str); } } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn G_MODULE_EXPORT void save_chains_to_file (GtkButton * but, gpointer data) \brief save chains data to file \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void save_chains_to_file (GtkButton * but, gpointer data) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Save atoms in chains to file"), GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, "chains.dat"); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_chains_to_file), data); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_chains_to_file), data); #endif } /*! \fn GtkWidget * chains_tab (glwin * view) \brief create the chain(s) tab for the advanced environments window \param view the target glwin */ GtkWidget * chains_tab (glwin * view) { GtkWidget * chains = create_vbox (0); GtkWidget * scroll = create_scroll (chains, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (chains, TRUE); gtk_widget_set_vexpand (chains, TRUE); int h, i, j, k; project * this_proj = get_project_by_id(view -> proj); k = 0; for (h=0; h < this_proj -> steps; h++) { for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; k += this_proj -> modelgl -> num_chains[h][j-1]; } } if (k < GTK_LIMIT) { add_container_child (CONTAINER_SCR, scroll, create_chains_tree (this_proj, TRUE)); } else { add_container_child (CONTAINER_SCR, scroll, create_chains_search (this_proj)); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button(_("Save to file"), IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(save_chains_to_file), & view -> colorp[0][0]), TRUE, TRUE, 40); return chains; } atomes_1.3.1/src/opengl/win/w_axis.c0000664000175000017500000010214315212624223017014 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_axis.c * @short Functions to create the axis parameters edition window * @author Sébastien Le Roux */ /* * This file: 'w_axis.c' * * Contains: * - The functions to create the axis parameters edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void activate_pos_box (glwin * view, gboolean val); void init_axis_colors (ColRGBA axcol[3], axis_edition * axis_win); void axis_position_has_changed (gpointer data, double v); G_MODULE_EXPORT void update_axis_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_axis_length (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT gboolean on_axis_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_axis_delete (GtkWidget * widg, GdkEvent * event, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" #define AXIS_TEMPLATES 5 double axis_init_color[3][3] = {{0.0, 0.0, 1.0},{0.0, 1.0, 0.0},{1.0, 0.0, 0.0}}; double axis_range[3][2] = {{0.0,100.0}, {0.0, 100.0}, {0.0, 100.0}}; extern gboolean from_box_or_axis; extern G_MODULE_EXPORT void set_labels_render (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data); #else extern G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data); #endif /*! \fn G_MODULE_EXPORT void update_axis_parameter (GtkEntry * res, gpointer data) \brief update axis parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis_parameter (GtkEntry * res, gpointer data) { glwin * view; int axis_type; double * axis_line; double * axis_rad; #ifdef GTK3 gchar * str; #endif // GTK3 const gchar * n = entry_get_text (res); double v = string_to_double ((gpointer)n); if (preferences) { axis_type = tmp_axis -> axis; axis_line = & tmp_axis -> line; axis_rad = & tmp_axis -> rad; } else { view = (glwin *)data; axis_type = view -> anim -> last -> img -> xyz -> axis; axis_line = & view -> anim -> last -> img -> xyz -> line; axis_rad = & view -> anim -> last -> img -> xyz -> rad; } if (axis_type == CYLINDERS) { if (v > 0.0) * axis_rad = v; v = * axis_rad; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[1][6]), str); g_free (str); #endif } } else { if (v > 0.0) * axis_line = v; v = * axis_line; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[1][4]), str); g_free (str); #endif } } update_entry_double (res, v); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } /*! \fn G_MODULE_EXPORT void update_axis_length (GtkEntry * res, gpointer data) \brief update axis length callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis_length (GtkEntry * res, gpointer data) { glwin * view; double * axis_length; #ifdef GTK3 gchar * str; #endif // GTK3 const gchar * n = entry_get_text (res); double v = string_to_double ((gpointer)n); if (preferences) { axis_length = & tmp_axis -> length; } else { view = (glwin *)data; axis_length = & view -> anim -> last -> img -> xyz -> length; } if (v > 0.0) * axis_length = v; v = * axis_length; update_entry_double (res, v); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("_Radius [ %f Ã… ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[1][7]), str); g_free (str); #endif view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } /*! \fn void activate_pos_box (glwin * view, gboolean val) \brief update axis position data \param view the target glwin \param val template widget sensitivity */ void activate_pos_box (glwin * view, gboolean val) { int i; if (val) { i = (preferences) ? tmp_axis -> t_pos : view -> anim -> last -> img -> xyz -> t_pos; } else { i = NONE; } combo_set_active ((preferences) ? pref_axis_win -> templates : view -> axis_win -> templates, i); widget_set_sensitive ((preferences) ? pref_axis_win -> templates : view -> axis_win -> templates, val); } /*! \fn G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) \brief set axis position callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) { int i = combo_get_active ((GtkWidget *)box); // The next line is mandatory for GTK4 if (i < 0) return; glwin * view; if (preferences) { tmp_axis -> t_pos = i; } else { view = (glwin *)data; #ifdef GTK4 view -> anim -> last -> img -> xyz -> t_pos = i; #endif } if (! preferences) { #ifdef GTK4 view -> create_shaders[MAXIS] = TRUE; update (view); update_menu_bar (view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], TRUE); #endif } } /*! \fn G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) \brief set axis style callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) { glwin * view; axis_edition * the_axis; int * axis; if (preferences) { the_axis = pref_axis_win; axis = & tmp_axis -> axis; } else { view = (glwin *)data; the_axis = view -> axis_win; axis = & view -> anim -> last -> img -> xyz -> axis; } switch (combo_get_active ((GtkWidget *)box)) { case 0: * axis = WIREFRAME; hide_the_widgets (the_axis -> radius_box); show_the_widgets (the_axis -> width_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check from_box_or_axis = TRUE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][1], TRUE); from_box_or_axis = FALSE; #endif } break; case 1: * axis = CYLINDERS; hide_the_widgets (the_axis -> width_box); show_the_widgets (the_axis -> radius_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check from_box_or_axis = TRUE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][2], TRUE); from_box_or_axis = FALSE; #endif } break; } if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) \brief show / hide axis callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) \brief show / hide axis callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view; axis_edition * the_axis; int * axis_type; if (preferences) { the_axis = pref_axis_win; axis_type = & tmp_axis -> axis; } else { view = (glwin *)data; the_axis = view -> axis_win; #ifdef GTK4 axis_type = & view -> anim -> last -> img -> xyz -> axis; #endif // GTK4 } val = button_get_status ((GtkWidget *)but); #ifdef GTK3 from_box_or_axis = TRUE; #endif // GTK3 if (val) { if (! preferences) { #ifdef GTK4 * axis_type = WIREFRAME; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], TRUE); #endif } else { * axis_type = WIREFRAME; } if (the_axis -> styles && GTK_IS_WIDGET(the_axis -> styles)) combo_set_active (the_axis -> styles, WIREFRAME-1); } else { if (! preferences) { #ifdef GTK4 * axis_type = NONE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], FALSE); #endif } else { * axis_type = NONE; } if (the_axis -> styles && GTK_IS_WIDGET(the_axis -> styles)) combo_set_active (the_axis -> styles, NONE); } #ifdef GTK3 from_box_or_axis = FALSE; #endif // GTK3 widget_set_sensitive (the_axis -> axis_data, val); #ifdef GTK4 if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); update_menu_bar (view); } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) \brief use axis default colors callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) \brief use axis default colors callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view = NULL; axis_edition * the_axis; int * pos; if (preferences) { the_axis = pref_axis_win; pos = & tmp_axis -> t_pos; } else { view = (glwin *)data; the_axis = view -> axis_win; pos = & view -> anim -> last -> img -> xyz -> t_pos; } val = button_get_status ((GtkWidget *)but); widget_set_sensitive (the_axis -> axis_position_box, ! val); if (val) { #ifdef GTK4 * pos = 2; #else // GTK3 Menu Action To Check if (! preferences) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][10], TRUE); #endif } else { * pos = CUSTOM; #ifdef GTK3 int i; if (! preferences) { for (i=8; i ogl_box_axis[1][i], FALSE); } } #endif } activate_pos_box (view, val); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } /*! \fn void init_axis_colors (ColRGBA axcol[3], axis_edition * axis_win) \brief initialize axis colors \param axcol the target axis colors \param view the target axis_edition data structure */ void init_axis_colors (ColRGBA axcol[3], axis_edition * axis_win) { int i; for (i = 0; i < 3; i++) { axcol[i].red = axis_init_color[i][0]; axcol[i].green = axis_init_color[i][1]; axcol[i].blue = axis_init_color[i][2]; axcol[i].alpha = 1.0; GdkRGBA col = colrgba_togtkrgba (axcol[i]); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(axis_win -> axis_color_title[i]), & col); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) \brief use axis default color callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) \brief use axis default color callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) #endif { int i; gboolean val; glwin * view = NULL; axis_edition * the_axis; ColRGBA * col; if (preferences) { the_axis = pref_axis_win; col = tmp_axis -> color; } else { view = (glwin *)data; the_axis = view -> axis_win; col = view -> anim -> last -> img -> xyz -> color; } val = button_get_status ((GtkWidget *)but); if (val) { if (col != NULL) { init_axis_colors ((preferences) ? tmp_axis -> color : view -> anim -> last -> img -> xyz -> color, the_axis); if (! preferences) { g_free (view -> anim -> last -> img -> xyz -> color); view -> anim -> last -> img -> xyz -> color = NULL; } else { g_free (tmp_axis -> color); tmp_axis -> color = NULL; } } } else { if (! preferences) { view -> anim -> last -> img -> xyz -> color = g_malloc0(3*sizeof*view -> anim -> last -> img -> xyz -> color); init_axis_colors (view -> anim -> last -> img -> xyz -> color, the_axis); } else { tmp_axis -> color = g_malloc0(3*sizeof*tmp_axis -> color); init_axis_colors (tmp_axis -> color, the_axis); } } for (i=0; i<3; i++) widget_set_sensitive (the_axis -> axis_color_title[i], ! val); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) \brief change axis color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) { tint * dat = (tint *)data; if (! preferences) { glwin * view = get_project_by_id(dat -> a) -> modelgl; view -> anim -> last -> img -> xyz -> color[dat -> b] = get_button_color (colob); view -> create_shaders[MAXIS] = TRUE; update (view); } else { tmp_axis -> color[dat -> b] = get_button_color (colob); } } /*! \fn void axis_position_has_changed (gpointer data, double v) \brief change axis position \param data the associated data pointer \param v the new value */ void axis_position_has_changed (gpointer data, double v) { tint * dat = (tint *)data; if (! preferences) { glwin * view = get_project_by_id(dat -> a) -> modelgl; if (v >= 0.0 && v <= 100.0) view -> anim -> last -> img -> xyz -> c_pos[dat -> b] = v; view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } else { if (v >= 0.0 && v <= 100.0) tmp_axis -> c_pos[dat -> b] = v; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change axis position - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { axis_position_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) \brief change axis position - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) { axis_position_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) \brief set axis labels callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) \brief set axis labels callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view = NULL; axis_edition * the_axis; int * axis_labels; if (preferences) { the_axis = pref_axis_win; axis_labels = & tmp_axis -> labels; } else { view = (glwin *)data; the_axis = view -> axis_win; axis_labels = & view -> anim -> last -> img -> xyz -> labels; } val = button_get_status ((GtkWidget *)but); * axis_labels = val; int i; for (i=0; i<2; i++) widget_set_sensitive (the_axis -> axis_label_box[i], val); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) \brief set axis title callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) { tint * dat = (tint *)data; glwin * view = NULL; const gchar * m = entry_get_text (entry); if (preferences) { if (tmp_axis -> title[dat -> b]) g_free (tmp_axis -> title[dat -> b]); tmp_axis -> title[dat -> b] = g_strdup_printf ("%s", m); } else { view = get_project_by_id (dat ->a) -> modelgl; if (view -> anim -> last -> img -> xyz -> title[dat -> b]) g_free (view -> anim -> last -> img -> xyz -> title[dat -> b]); view -> anim -> last -> img -> xyz -> title[dat -> b] = g_strdup_printf ("%s", m); view -> create_shaders[MAXIS] = TRUE; update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_axis_delete (GtkWindow * widg, gpointer data) \brief axis window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_axis_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_axis_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief axis window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_axis_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; view -> axis_win -> win = destroy_this_widget (view -> axis_win -> win); g_free (view -> axis_win); view -> axis_win = NULL; return TRUE; } /*! \fn G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) \brief create the axis advanced parameters window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) { glwin * view; axis_edition * the_axis; int axis_type; double axis_line; double axis_rad; double axis_length; int axis_labels; int axis_tpos; GLfloat * axis_cpos; ColRGBA * axis_color = NULL; screen_label * axis_label; gboolean build_win = TRUE; int i; if (preferences) { the_axis = pref_axis_win; axis_type = tmp_axis -> axis; axis_line = tmp_axis -> line; axis_rad = tmp_axis -> rad; axis_tpos = tmp_axis -> t_pos; axis_length = tmp_axis -> length; axis_labels = tmp_axis -> labels; axis_color = tmp_axis -> color; axis_cpos = tmp_axis -> c_pos; axis_label = tmp_label[2]; } else { view = (glwin *)data; if (view -> axis_win) { if (view -> axis_win -> win && GTK_IS_WIDGET(view -> axis_win -> win)) { build_win = FALSE; show_the_widgets (view -> axis_win -> win); } } if (build_win) { view -> axis_win = g_malloc0(sizeof*view -> axis_win); the_axis = view -> axis_win; axis_type = view -> anim -> last -> img -> xyz -> axis; axis_line = view -> anim -> last -> img -> xyz -> line; axis_rad = view -> anim -> last -> img -> xyz -> rad; axis_tpos = view -> anim -> last -> img -> xyz -> t_pos; axis_length = view -> anim -> last -> img -> xyz -> length; axis_labels = view -> anim -> last -> img -> xyz -> labels; axis_color = view -> anim -> last -> img -> xyz -> color; axis_cpos = view -> anim -> last -> img -> xyz -> c_pos; axis_label = & view -> anim -> last -> img -> labels[2]; } } if (build_win) { GtkWidget * vbox = create_vbox (BSEP); if (preferences) { the_axis -> win = create_vbox (BSEP); adv_box (the_axis -> win, _("Axis settings"), 10, 120, 0.0); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> win, hbox, FALSE, FALSE, 10); } else { the_axis -> win = create_vbox (BSEP); gchar * str = g_strdup_printf (_("%s - axis settings"), get_project_by_id(view -> proj)->name); the_axis -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_axis -> win, vbox); } GtkWidget * box; gboolean ac; if (axis_type != NONE) { ac = TRUE; } else { ac = FALSE; } the_axis -> show_hide = check_button (_("Show/Hide axis"), 100, 20, ac, G_CALLBACK(set_show_axis_toggle), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_axis -> show_hide, FALSE, FALSE, 5); the_axis -> axis_data = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_axis -> axis_data, TRUE, TRUE, 0); widget_set_sensitive (the_axis -> axis_data, ac); GtkWidget * pos_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_data, pos_box, FALSE, FALSE, 5); if (axis_tpos != CUSTOM) { ac = TRUE; } else { ac = FALSE; } gchar * axis_template[AXIS_TEMPLATES] = {i18n("Top Right Corner *"), i18n("Top Left Corner *"), i18n("Bottom Right Corner *"), i18n("Bottom Left Corner *"), i18n("Center **")}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pos_box, check_button (_("Use template positions"), 120, 30, ac, G_CALLBACK(use_axis_default_positions), data), FALSE, FALSE, 0); the_axis -> templates = create_combo (); for (i=0; i < AXIS_TEMPLATES; i++) { combo_text_append (the_axis -> templates, _(axis_template[i])); } combo_set_markup (the_axis -> templates); activate_pos_box (view, ac); gtk_widget_set_size_request (the_axis -> templates, 150, -1); g_signal_connect (G_OBJECT (the_axis -> templates), "changed", G_CALLBACK(set_axis_template), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pos_box, the_axis -> templates, FALSE, FALSE, 10); GtkWidget * chbox; GtkWidget * ax_name; the_axis -> axis_position_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_data, the_axis -> axis_position_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_position_box, markup_label(_("Please choose axis position:"), -1, -1, 0.0, 0.5), FALSE, TRUE, 5); // use custom position gchar * al[3] = {i18n("% of the window width"), i18n("% of the window height"), i18n("% of the window depth")}; gchar * axis_symbols[3] = {"X", "Y", "Z"}; for (i=0; i<2; i++) { chbox = create_hbox (0); ax_name = gtk_label_new (axis_symbols[i]); gtk_widget_set_size_request (ax_name, 20, -1); gtk_label_align (ax_name, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_name, FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, create_hscale (axis_range[i][0], axis_range[i][1], 1.0, axis_cpos[i], GTK_POS_LEFT, 0, 170, G_CALLBACK(set_axis_position), G_CALLBACK(scroll_set_axis_position), (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]), FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_position_box, chbox, FALSE, TRUE, 5); ax_name = gtk_label_new (_(al[i])); gtk_label_align (ax_name, -1, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_name, FALSE, TRUE, 0); } widget_set_sensitive (the_axis -> axis_position_box, ! ac); box = abox (the_axis -> axis_data, _("Length [Å] "), 0); the_axis -> length = create_entry (G_CALLBACK(update_axis_length), 150, 10, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, the_axis -> length, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(the_axis -> length), axis_length); box = abox (the_axis -> axis_data, _("Style "), 0); the_axis -> styles = create_combo (); combo_text_append (the_axis -> styles, _("Wireframes")); combo_text_append (the_axis -> styles, _("Cylinders")); if (axis_type == NONE) i = NONE; if (axis_type == WIREFRAME) i = 0; if (axis_type == CYLINDERS) i = 1; combo_set_active (the_axis -> styles, i); gtk_widget_set_size_request (the_axis -> styles, 150, -1); g_signal_connect (G_OBJECT (the_axis -> styles), "changed", G_CALLBACK(set_axis_combo_style), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, the_axis -> styles, FALSE, FALSE, 0); the_axis -> width_box = abox (the_axis -> axis_data, _("Line width [pts] "), 0); the_axis -> width = create_entry (G_CALLBACK(update_axis_parameter), 150, 10, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_axis -> width_box, the_axis -> width, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(the_axis -> width), axis_line); the_axis -> radius_box = abox (the_axis -> axis_data, _("Cylinder radius [Å] "), 0); the_axis -> radius = create_entry (G_CALLBACK(update_axis_parameter), 150, 10, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_axis -> radius_box, the_axis -> radius, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(the_axis -> radius), axis_rad); // Labels GtkWidget * lab_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_data, lab_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, check_button (_("Label axis"), 100, 40, axis_labels, G_CALLBACK(set_axis_labels), data), FALSE, FALSE, 0); the_axis -> axis_label_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, the_axis -> axis_label_box[0], FALSE, FALSE, 0); box = abox (the_axis -> axis_label_box[0], _("Rendering "), 0); GtkWidget * config = create_combo (); combo_text_append (config, _("Basic Text")); combo_text_append (config, _("Highlighted")); combo_set_active (config, axis_label -> render); gtk_widget_set_size_request (config, 150, -1); g_signal_connect (G_OBJECT (config), "changed", G_CALLBACK(set_labels_render), (preferences) ? & pref_pointer[2] : & view -> colorp[2][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, config, FALSE, FALSE, 0); box = abox (the_axis -> axis_label_box[0], _("Font"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, font_button(axis_label -> font, 150, 30, G_CALLBACK(set_labels_font), (preferences) ? & pref_pointer[2] : & view -> colorp[2][0]), FALSE, FALSE, 0); // Size / scale box = abox (the_axis -> axis_label_box[0], _("Size"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button (_("Scale with zoom in/out"), 150, -1, axis_label -> scale, G_CALLBACK(set_labels_scale), (preferences) ? & pref_pointer[2] : & view -> colorp[2][0]), FALSE, FALSE, 10); GtkWidget * lab_h_box = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, lab_h_box, FALSE, FALSE, 0); the_axis -> axis_label_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lab_h_box, the_axis -> axis_label_box[1], FALSE, FALSE, 0); box = abox (the_axis -> axis_label_box[1], _("Legends"), 0); GtkWidget * ax_title[3]; for (i=0; i<3; i++) { chbox = create_hbox (0); ax_title[i] = create_entry (G_CALLBACK(set_axis_title), 80, 10, FALSE, (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); update_entry_text (GTK_ENTRY(ax_title[i]), (preferences) ? tmp_axis -> title[i] : view -> anim -> last -> img -> xyz -> title[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_title[i], FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_label_box[1], chbox, FALSE, FALSE, 2); } // Colors GtkWidget * col_v_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lab_h_box, col_v_box, FALSE, FALSE, 0); box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_v_box, box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(".", 5, -1, 0.0, 0.25), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(_("Colors"), 50, 30, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button (_("Use base colors"), -1, -1, ac, G_CALLBACK(use_axis_default_colors), data), FALSE, FALSE, 10); if (axis_color == NULL) { ac = TRUE; } else { ac = FALSE; } for (i=0; i<3; i++) { chbox = create_hbox (0); if (axis_color != NULL) { the_axis -> axis_color_title[i] = color_button (axis_color[i], TRUE, 100, -1, G_CALLBACK(set_axis_color), (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); } else { ColRGBA col; col.red = axis_init_color[i][0]; col.green = axis_init_color[i][1]; col.blue = axis_init_color[i][2]; col.alpha = 1.0; the_axis -> axis_color_title[i] = color_button (col, TRUE, 100, -1, G_CALLBACK(set_axis_color), (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, the_axis -> axis_color_title[i], FALSE, FALSE, 40); widget_set_sensitive (the_axis -> axis_color_title[i], ! ac); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_v_box, chbox, FALSE, FALSE, 0); } append_comments (the_axis -> axis_data, "*", _("In front of the atomic model")); append_comments (the_axis -> axis_data, "**", _("Inside the atomic model")); if (! preferences) { add_global_option (vbox, & view -> colorp[2][0]); add_gtk_close_event (the_axis -> win, G_CALLBACK(on_axis_delete), view); show_the_widgets (the_axis -> win); if (axis_type == CYLINDERS) { hide_the_widgets (the_axis -> width_box); } else { hide_the_widgets (the_axis -> radius_box); } } } } atomes_1.3.1/src/opengl/win/m_style.c0000664000175000017500000003730015212624223017200 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_style.c * @short Functions to create the 'OpenGL -> Style' submenu * @author Sébastien Le Roux */ /* * This file: 'm_style.c' * * Contains: * - The functions to create the 'OpenGL -> Style' submenu * * List of functions: int get_filled_id (int sid); int get_style_id (int sid); void clean_atom_style (project * this_proj); void update_menus (glwin * view); void set_this_style (glwin * view, int style); G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data); GtkWidget * menu_style (glwin * view, int id); GMenu * menu_style (glwin * view, int popm); */ #include "global.h" #include "bind.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" extern gchar * label_atpts (project * this_proj, glwin * view, int id); char * text_styles[OGL_STYLES] = {i18n("Balls and Sticks"), i18n("Wireframes"), i18n("Spacefilled"), i18n("Spheres"), i18n("Cylinders"), i18n("Dots")}; char * text_filled[FILLED_STYLES] = {i18n("Covalent Radii"), i18n("Ionic Radii"), i18n("van der Waals Radii"), i18n("In Crystal Radii")}; /*! \fn void clean_atom_style (project * this_proj) \brief clean all atom(s) possible alternative rendering styles \param this_proj the target project */ void clean_atom_style (project * this_proj) { int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { this_proj -> atoms[i][j].style = NONE; } } } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn void update_menus (glwin * view) \brief update GTK3 menus of style has changed \param view the target glwin */ void update_menus (glwin * view) { int i, j; int s = view -> anim -> last -> img -> style; gchar * str; for (i=0; i<2; i++) { for (j=0; j<6; j+=2) { hide_the_widgets (view -> ogl_bonds[j+8*i]); if (j<4) { hide_the_widgets (view -> ogl_atoms[4*i+j]); } } } switch (s) { case CYLINDERS: for (i=0; i<2; i++) show_the_widgets (view -> ogl_bonds[8*i]); break; case WIREFRAME: for (i=0; i<2; i++) { show_the_widgets (view -> ogl_bonds[4+8*i]); str = label_atpts (get_project_by_id(view -> proj), view, 1+2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i+2]); } break; case SPACEFILL: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 4); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i]); } break; case PUNT: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i+1); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i+2]); } break; case SPHERES: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i]); } break; default: for (i=0; i<2; i++) { show_the_widgets (view -> ogl_bonds[2+8*i]); if (view -> ogl_atoms[4*i+1]) { if (GTK_IS_WIDGET(view -> ogl_atoms[4*i+1])) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i]); } } } break; } } #endif /*! \fn int get_filled_id (int sid) \brief retrieve filled ID number in FILLED_STYLES based on style ID \param sid the style id */ int get_filled_id (int sid) { return (sid >= OGL_STYLES) ? sid - OGL_STYLES : NONE; } /*! \fn int get_style_id (int sid) \brief retrieve style ID number in OGL_STYLES based on style ID \param sid the style id */ int get_style_id (int sid) { return (sid >= OGL_STYLES) ? SPACEFILL : sid; } /*! \fn G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) \brief set style callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int s = the_data -> b; int st = get_style_id (s); int ft = get_filled_id (s); int old_style = this_proj -> modelgl -> anim -> last -> img -> style; int old_filled = this_proj -> modelgl -> anim -> last -> img -> filled_type; int i, j, k, l, m; #ifdef GTK3 if ((old_style != st || old_filled != ft) && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (old_style != st || old_filled != ft) #endif { i = old_style; j = old_filled; this_proj -> modelgl -> anim -> last -> img -> style = NONE; this_proj -> modelgl -> anim -> last -> img -> filled_type = NONE; #ifdef GTK3 if (old_style == SPACEFILL) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[j], FALSE); } else { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[i], FALSE); } #endif if (s >= OGL_STYLES) { j = this_proj -> nspec; k = (ft) ? 9 + ft : 2; l = (ft) ? 12 + ft : 7; for (i=0; i chemistry -> chem_prop[CHEM_Z][i]; this_proj -> modelgl -> anim -> last -> img -> atomicrad[i] = (default_o_at_rs[2]) ? default_at_rs[2] : get_radius (2, ft, m, default_atomic_rad[k]); this_proj -> modelgl -> anim -> last -> img -> atomicrad[i+j] = (default_o_at_rs[7]) ? default_at_rs[7] : get_radius (7, ft, m, default_atomic_rad[l]); } #ifdef GTK3 if (widg != this_proj -> modelgl -> filled_styles[ft]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[ft], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> filled_type = ft; this_proj -> modelgl -> anim -> last -> img -> style = SPACEFILL; } else { #ifdef GTK3 if (widg != this_proj -> modelgl -> ogl_styles[st]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[st], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> style = st; } clean_atom_style (this_proj); if (st == WIREFRAME || st == PUNT) { j = 0; } else { j = 1; } #ifdef GTK3 update_menus (this_proj -> modelgl); #endif init_default_shaders (this_proj -> modelgl); } } /*! \fn void set_this_style (glwin * view, int style) \brief set general style for atom(s) and bond(s) \param view the target glwin \param style the general style to apply */ void set_this_style (glwin * view, int style) { if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 gchar * str = g_strdup_printf ("set-style.%d.0", style); activate_glwin_action (str, "set-style", view); g_free (str); #else // GTK3 Menu Action To Check if (style < OGL_STYLES) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[style], TRUE); set_style (view -> ogl_styles[style], & view -> colorp[style][0]); } else { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[style-OGL_STYLES], TRUE); set_style (view -> filled_styles[style-OGL_STYLES], & view -> colorp[style][0]); } #endif } } #ifdef GTK3 /*! \fn GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data) \brief create style menu item GTK3 \param name the menu item label \param val active style \param style style value for this menu item \param vbl active filled style if any \param filled filled value for this menu item \param accel keyboard accelerator \param menu the menu to attach the new menu item to \param data the associated data pointer */ GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data) { GtkWidget * style_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_style), data, (accel != -1) ? TRUE : FALSE, accel, 0, TRUE, TRUE, (style == val && filled == vbl) ? TRUE : FALSE); return style_widget; } /*! \fn GtkWidget * menu_style (glwin * view, int id) \brief create the 'OpenGL -> Style' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_style (glwin * view, int id) { int i, j; GtkWidget * widg; GtkWidget * menus = gtk_menu_new (); guint accels[OGL_STYLES-1]={GDK_KEY_b, GDK_KEY_w, GDK_KEY_s, GDK_KEY_c, GDK_KEY_d}; guint accelf[FILLED_STYLES]={GDK_KEY_o, GDK_KEY_i, GDK_KEY_v, GDK_KEY_r}; if (id == 0) { for (i=0; i ogl_styles[i] = create_style_menu (_(text_styles[i]), i, view -> anim -> last -> img -> style, i, i, accels[(i < SPACEFILL) ? i : i-1], menus, & view -> colorp[i][0]); } else { widg = create_menu_item (FALSE, _("Spacefilled")); gtk_menu_shell_append ((GtkMenuShell *)menus, widg); GtkWidget * menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); for (j=0; j < FILLED_STYLES; j++) { view -> filled_styles[j] = create_style_menu (_(text_filled[j]), SPACEFILL, view -> anim -> last -> img -> style, j, view -> anim -> last -> img -> filled_type, accelf[j], menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } else { for (i=0; i anim -> last -> img -> style, i, i, accels[(i < SPACEFILL) ? i : i-1], menus, & view -> colorp[i][0]); } else { widg = create_menu_item (FALSE, _("Spacefilled")); gtk_menu_shell_append ((GtkMenuShell *)menus, widg); GtkWidget * menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); for (j=0; j < FILLED_STYLES; j++) { widg = create_style_menu (_(text_filled[j]), SPACEFILL, view -> anim -> last -> img -> style, j, view -> anim -> last -> img -> filled_type, accelf[j], menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } return menus; } #else /*! \fn G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change style callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * style = g_variant_get_string (parameter, NULL); int lgt = strlen (style); gchar * name = g_strdup_printf ("%c%c", style[lgt-2], style[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, style); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-style", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * style_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (style_name); style_name = NULL; break; } g_free (style_name); style_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menu_style (glwin * view, int popm) \brief create the 'OpenGL -> Style' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_style (glwin * view, int popm) { int i, j, k; GMenu * menu = g_menu_new (); gchar * accels[OGL_STYLES-1]={"b", "w", "s", "c", "d"}; gchar * accelf[FILLED_STYLES]={"o", "i", "v", "r"}; for (i=0; i anim -> last -> img -> style == i) ? TRUE : FALSE, TRUE, TRUE); } else { GMenu * menus = g_menu_new (); for (j=0; j < FILLED_STYLES; j++) { append_opengl_item (view, menus, _(text_filled[j]), "style", popm, j+OGL_STYLES, accelf[j], IMG_NONE, NULL, FALSE, G_CALLBACK(change_style_radio), (gpointer)view, FALSE, (view -> anim -> last -> img -> style == SPACEFILL && view -> anim -> last -> img -> filled_type == j) ? TRUE : FALSE, TRUE, TRUE); } append_submenu (menu, _("Spacefilled"), menus); } } return menu; } #endif atomes_1.3.1/src/opengl/win/initmol.c0000664000175000017500000004603215212624223017201 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initmol.c * @short Functions to retrieve fragments data from Fortran90 \n Functions to retrieve molecules data from Fortran90 \n Functions to analyze molecule topology * @author Sébastien Le Roux */ /* * This file: 'initmol.c' * * Contains: * - The functions to retrieve fragments data from Fortran90 - The functions to retrieve molecules data from Fortran90 - The functions to analyze molecule topology * * List of functions: int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]); gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b); void duplicate_molecule (molecule * new_mol, search_molecule * old_mol); void allocate_mol_for_step_ (int * sid, int * mol_in_step); void allocate_mol_data_ (); void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]); void update_mol_details (search_molecule * mol, int sp, int cp); void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]); void free_search_molecule_data (search_molecule * smol); void setup_molecules_ (int * stepid); void setup_menu_molecules_ (); void setup_fragments_ (int * sid, int coord[active_project -> natomes]); search_molecule * duplicate_search_molecule (search_molecule * old_mol); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "initcoord.h" typedef struct search_molecule search_molecule; struct search_molecule { int id; // Molecule id number int md; // MD step int multiplicity; // Multiplicity int * fragments; // Fragments list int natoms; // Number of atoms int * atoms; // Temporary atom list int nspec; // Number of chemical species int * species; // Number of atom by species int nbonds; // Number of chemical bonds int ** pbonds; // Number of chemical bonds by geometries int nangles; // Number of bond angles int *** pangles; // Number of bond angles by geometries int ** lgeo; // list of coordination spheres (by species) search_molecule * next; search_molecule * prev; }; int * pgeo; search_molecule * tmp_search = NULL; search_molecule ** in_calc_mol = NULL; extern molecule * tmp_mol; /*! \fn void duplicate_molecule (molecule * new_mol, search_molecule * old_mol) \brief create a copy of a molecule data structure \param new_mol the new molecule \param old_mol the molecule to copy */ void duplicate_molecule (molecule * new_mol, search_molecule * old_mol) { new_mol -> id = old_mol -> id; new_mol -> md = old_mol -> md; new_mol -> multiplicity = old_mol -> multiplicity; new_mol -> fragments = duplicate_int (old_mol -> multiplicity, old_mol -> fragments); new_mol -> natoms = old_mol -> natoms; new_mol -> nspec = old_mol -> nspec; new_mol -> species = duplicate_int (active_project -> nspec, old_mol -> species); } /*! \fn search_molecule * duplicate_search_molecule (search_molecule * old_mol) \brief create a copy of a search molecule data structure \param old_mol the search molecule data structure to copy */ search_molecule * duplicate_search_molecule (search_molecule * old_mol) { search_molecule * new_mol = g_malloc0(sizeof*new_mol); new_mol -> id = old_mol -> id; new_mol -> md = old_mol -> md; new_mol -> multiplicity = old_mol -> multiplicity; new_mol -> fragments = duplicate_int (old_mol -> multiplicity, old_mol -> fragments); new_mol -> natoms = old_mol -> natoms; new_mol -> nspec = old_mol -> nspec; new_mol -> species = duplicate_int (active_project -> nspec, old_mol -> species); int j, k; if (old_mol -> natoms > 1) { new_mol -> pbonds = g_malloc0(active_project -> coord -> totcoord[1]*sizeof*new_mol -> pbonds); if (old_mol -> natoms > 2) { new_mol -> pangles = g_malloc0(active_project -> coord -> totcoord[1]*sizeof*new_mol -> pangles); } } if (old_mol -> atoms) { new_mol -> atoms = duplicate_int (old_mol -> natoms*old_mol -> multiplicity, old_mol -> atoms); } new_mol -> nbonds = old_mol -> nbonds; if (new_mol -> nbonds) { for (j=0; j coord -> totcoord[1]; j++) { new_mol -> pbonds[j] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> pbonds[j]); } new_mol -> nangles = old_mol -> nangles; if (new_mol -> nangles) { for (j=0; j coord -> totcoord[1]; j++) { new_mol -> pangles[j] = g_malloc0(active_project -> coord -> totcoord[1]*sizeof*new_mol -> pangles[j]); for (k=0; k coord -> totcoord[1]; k++) { new_mol -> pangles[j][k] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> pangles[j][k]); } } } } new_mol -> lgeo = g_malloc0(active_project -> nspec*sizeof*new_mol -> lgeo); for (j=0; j nspec; j++) { new_mol -> lgeo[j] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> lgeo[j]); } return new_mol; } /*! \fn void allocate_mol_for_step_ (int * sid, int * mol_in_step) \brief allocate the data to store molecule information for a MD step \param sid the MD step \param mol_in_step the number of molecule(s) for this MD step */ void allocate_mol_for_step_ (int * sid, int * mol_in_step) { in_calc_mol[* sid -1] = g_malloc0(* mol_in_step*sizeof*in_calc_mol[* sid -1]); active_project -> modelfc -> mol_by_step[* sid - 1] = * mol_in_step; } /*! \fn void allocate_mol_data_ () \brief allocate data to store molecule information */ void allocate_mol_data_ () { int i; if (active_project -> modelfc != NULL) { if (active_project -> modelfc -> mols != NULL) { g_free (active_project -> modelfc -> mols); active_project -> modelfc -> mols = NULL; } active_project -> modelfc = NULL; } in_calc_mol = g_malloc0(active_project -> steps*sizeof*in_calc_mol); active_project -> modelfc = g_malloc0(sizeof*active_project -> modelfc); active_project -> modelfc -> mols = g_malloc0(active_project -> steps*sizeof*active_project -> modelfc -> mols); active_project -> modelfc -> mol_by_step = allocint (active_project -> steps); for (i=0; i<2; i++) { if (active_project -> force_field[i]) g_free (active_project -> force_field[i]); active_project -> force_field[i] = NULL; } pgeo = g_malloc0((active_project -> nspec+1)*sizeof*pgeo); for (i=1; i nspec+1; i++) { pgeo[i] = pgeo[i-1] + active_coord -> ntg[1][i-1]; } } /*! \fn void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[*nvs]) \brief update molecule typology information from Fortran90 \param stp the MD step \param mol the molecule id \param aid the atom id \param nvs the number of neighbor(s) for this atom \param neigh the list of neighbor(s) for this atom */ void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]) { int i, j, k, l, m, n, o, p, q, r, s, t, u; search_molecule * tmp_mol = & in_calc_mol[* stp - 1][* mol - 1]; i = active_project -> atoms[* stp - 1][* aid - 1].sp; j = active_project -> atoms[* stp - 1][* aid - 1].coord[1]; k = pgeo[i] + j; for (l=0; l < * nvs; l++) { m = neigh[l]-1; n = active_project -> atoms[tmp_mol -> md][m].sp; o = active_project -> atoms[tmp_mol -> md][m].coord[1]; p = pgeo[n] + o; tmp_mol -> pbonds[k][p] ++; } if (* nvs > 1) { for (l=0; l<*nvs-1; l++) { m = neigh[l]-1; n = active_project -> atoms[tmp_mol -> md][m].sp; o = active_project -> atoms[tmp_mol -> md][m].coord[1]; p = pgeo[n] + o; for (q= l+1; q<*nvs; q++) { r = neigh[q]-1; s = active_project -> atoms[tmp_mol -> md][r].sp; t = active_project -> atoms[tmp_mol -> md][r].coord[1]; u = pgeo[s] + t; tmp_mol -> pangles[p][k][u] ++; tmp_mol -> pangles[u][k][p] ++; } } } } /*! \fn void update_mol_details (search_molecule * mol, int sp, int cp) \brief update molecule information \param mol the molecule to update \param sp the chemical species \param cp the partial coordination id */ void update_mol_details (search_molecule * mol, int sp, int cp) { int i, j, k, l, m; for (i=0; i nspec; i++) { j = active_coord -> partial_geo[sp][cp][i]; mol -> nbonds += j; if (j && mol -> natoms > 2) { for (k=0; k nspec; k++) { l = active_coord -> partial_geo[sp][cp][k]; if (k != i || l > 1) { m = (j+l)*((j+l)-1)/2; mol -> nangles += m; } } } } } /*! \fn void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[*sps], int atom_in_mol[*ats]) \brief overall molecule information from Fortran90 \param stp the MD step \param mol the molecule id \param ats the number of atom(s) in the molecule \param sps the number of chemical species in the molecule \param spec_in_mol the number of atom(s) by chemical species in the molecule \param atom_in_mol the list of atom(s) in the molecule */ void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]) { int i, j, k, l; search_molecule * tmp_mol = & in_calc_mol[* stp - 1][* mol - 1]; tmp_mol -> id = * mol - 1; tmp_mol -> md = * stp - 1; tmp_mol -> multiplicity = 1; tmp_mol -> fragments = allocint (1); tmp_mol -> fragments[0] = * mol - 1; tmp_mol -> natoms = * ats; tmp_mol -> lgeo = allocdint (active_project -> nspec, active_coord -> totcoord[1]); if (tmp_mol -> natoms > 1) { tmp_mol -> pbonds = allocdint (active_coord -> totcoord[1], active_coord -> totcoord[1]); if (tmp_mol -> natoms > 2) { tmp_mol -> pangles = alloctint (active_coord -> totcoord[1], active_coord -> totcoord[1], active_coord -> totcoord[1]); } } tmp_mol -> atoms = duplicate_int (* ats, atom_in_mol); for (i=0; i< * ats; i++) { j = atom_in_mol[i]-1; k = active_project -> atoms[0][j].sp; l = active_project -> atoms[* stp - 1][j].coord[1]; tmp_mol -> lgeo[k][pgeo[k]+l] ++; update_mol_details (tmp_mol, k, l); } j = 0; for (i=0; i nspec; i++) { if (spec_in_mol[i] > 0) j++; } tmp_mol -> nspec = j; tmp_mol -> species = duplicate_int (active_project -> nspec, spec_in_mol); tmp_mol -> nbonds /= 2; tmp_mol -> nangles /= 2; } /*! \fn gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b) \brief test if 2 molecules are identicals \param mol_a the 1st molecule \param mol_b the 2nd molecule */ gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b) { int i, j, k; /*#ifdef DEBUG g_debug ("AID:: mol_a -> id= %d, mol_b-> id= %d", mol_a -> id, mol_b -> id); g_debug ("AID:: mol_a -> natoms= %d, mol_b-> natoms= %d", mol_a -> natoms, mol_b -> natoms); g_debug ("AID:: mol_a -> nspec= %d, mol_b-> nspec= %d", mol_a -> nspec, mol_b -> nspec); g_debug ("AID:: mol_a -> nbonds= %d, mol_b-> nbonds= %d", mol_a -> nbonds, mol_b -> nbonds); g_debug ("AID:: mol_a -> nangles= %d, mol_b-> nangles= %d", mol_a -> nangles, mol_b -> nangles); #endif*/ if (mol_a -> md != mol_b -> md) return FALSE; if (mol_a -> natoms != mol_b -> natoms) return FALSE; if (mol_a -> nspec != mol_b -> nspec) return FALSE; for (i=0; i < active_project -> nspec; i++) { if (mol_a -> species[i] != mol_b -> species[i]) return FALSE; } if (mol_a -> nbonds != mol_b -> nbonds) return FALSE; if (mol_a -> nangles != mol_b -> nangles) return FALSE; for (i=0; i < active_project -> nspec; i++) { for (j=0; j< active_coord -> totcoord[1]; j++) { if (mol_a -> lgeo[i][j] != mol_b -> lgeo[i][j]) return FALSE; } } if (mol_a -> nbonds > 1) { for (i=0; i < active_coord -> totcoord[1]; i++) { for (j=0; j < active_coord -> totcoord[1]; j++) { if (mol_a -> pbonds[i][j] != mol_b -> pbonds[i][j]) return FALSE; } } if (mol_a -> nangles > 1) { for (i=0; i < active_coord -> totcoord[1]; i++) { for (j=0; j < active_coord -> totcoord[1]; j++) { for (k=0; k < active_coord -> totcoord[1]; k++) { if (mol_a -> pangles[i][j][k] != mol_b -> pangles[i][j][k]) return FALSE; } } } } } return TRUE; } /*! \fn int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) \brief merge molecule a and molecule b data \param val_a multiplicity, or multiplicity x atoms, for molecule a \param val_b multiplicity, or multiplicity x atoms, for molecule b \param table_a the list of molecular fragment(s) or atoms for molecule a \param table_b the list of molecular fragment(s) or atoms for molecule b */ int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) { int * p_data; int i; p_data = allocint (val_a + val_b); for (i=0; i atoms) { g_free (smol -> atoms); smol -> atoms = NULL; } if (smol -> pbonds) { for (i=0; i totcoord[1]; i++) { if (smol -> pbonds[i]) { g_free (smol -> pbonds[i]); smol -> pbonds[i] = NULL; } } g_free (smol -> pbonds); smol -> pbonds = NULL; } if (smol -> pangles) { for (i=0; i totcoord[1]; i++) { if (smol -> pangles[i]) { for (j=0; j totcoord[1]; j++) { if (smol -> pangles[i][j]) { g_free (smol -> pangles[i][j]); smol -> pangles[i][j] = NULL; } } g_free (smol -> pangles[i]); smol -> pangles[i] = NULL; } } g_free (smol -> pangles); smol -> pangles = NULL; } if (smol -> lgeo) { for (i=0; i nspec; i++) { if (smol -> lgeo[i]) { g_free (smol -> lgeo[i]); smol -> lgeo[i] = NULL; } } g_free (smol -> lgeo); smol -> lgeo = NULL; } g_free (smol -> species); smol -> species = NULL; g_free (smol -> fragments); smol -> fragments = NULL; } /*! \fn void setup_molecules_ (int * stepid) \brief setup molecule data \param stepid the MD step */ void setup_molecules_ (int * stepid) { int i, j, k, l, m, n; search_molecule * mtmp_at, * mtmp_bt; search_molecule * first_mol = NULL; search_molecule * tmp_mol; gboolean add_it; int * tmp_data; i = * stepid -1; j = 0; for (k=0; k modelfc -> mol_by_step[i]; k++) { mtmp_bt = & in_calc_mol[i][k]; add_it = TRUE; mtmp_at = (first_mol) ? first_mol : NULL; while (mtmp_at) { if (are_identical_molecules (mtmp_at, mtmp_bt)) { tmp_data = merge_mol_data (mtmp_at -> multiplicity, mtmp_bt -> multiplicity, mtmp_at -> fragments, mtmp_bt -> fragments); g_free (mtmp_at -> fragments); mtmp_at -> fragments = NULL; mtmp_at -> fragments = duplicate_int (mtmp_at -> multiplicity+mtmp_bt -> multiplicity, tmp_data); g_free (tmp_data); tmp_data = merge_mol_data (mtmp_at -> natoms*mtmp_at -> multiplicity, mtmp_bt -> natoms*mtmp_bt -> multiplicity, mtmp_at -> atoms, mtmp_bt -> atoms); g_free (mtmp_at -> atoms); mtmp_at -> atoms = NULL; mtmp_at -> atoms = duplicate_int (mtmp_at -> natoms*mtmp_at -> multiplicity+mtmp_bt -> natoms*mtmp_bt -> multiplicity, tmp_data); g_free (tmp_data); mtmp_at -> multiplicity ++; add_it = FALSE; break; } mtmp_at = mtmp_at -> next; } if (add_it) { if (first_mol) { mtmp_at = first_mol; while (mtmp_at -> next) mtmp_at = mtmp_at -> next; mtmp_at -> next = duplicate_search_molecule (mtmp_bt); mtmp_at -> next -> prev = mtmp_at; } else { first_mol = duplicate_search_molecule (mtmp_bt); mtmp_at = first_mol; } j ++; } } for (k=0; k modelfc -> mol_by_step[i]; k++) { free_search_molecule_data (& in_calc_mol[i][k]); } g_free (in_calc_mol[i]); in_calc_mol[i] = NULL; active_project -> modelfc -> mol_by_step[i] = j; active_project -> modelfc -> mols[i] = g_malloc0(j*sizeof*active_project -> modelfc -> mols[i]); tmp_mol = first_mol; for (k=0; k natoms*tmp_mol -> multiplicity; for (m=0; m atoms[m] - 1; active_project -> atoms[i][n].coord[3] = k; } duplicate_molecule (& active_project -> modelfc -> mols[i][k], tmp_mol); active_project -> modelfc -> mols[i][k].id = k; if (k < j-1) tmp_mol = tmp_mol -> next; } tmp_mol = first_mol; while (tmp_mol) { free_search_molecule_data (tmp_mol); if (tmp_mol -> next) { tmp_mol = tmp_mol -> next; g_free (tmp_mol -> prev); } else { g_free (tmp_mol); tmp_mol = NULL; } } } /*! \fn void setup_menu_molecules_ () \brief prepare the menu elements related to molecule(s) */ void setup_menu_molecules_ () { int i, j; g_free (in_calc_mol); in_calc_mol = NULL; g_free (pgeo); pgeo = NULL; i = 0; for (j=0; j steps; j++) { i = max (i, active_project -> modelfc -> mol_by_step[j]); } active_coord -> totcoord[3] = i; i = 3; init_menu_fragmol_ (& i); } /*! \fn void setup_fragments_ (int * sid, int coord[active_project->natomes]) \brief atom(s) fragment(s) information from Fortran90 \param sid the MD step \param coord the fragment(s) information */ void setup_fragments_ (int * sid, int coord[active_project -> natomes]) { int i; for (i=0; i < active_project -> natomes; i++) { active_project -> atoms[* sid-1][i].coord[2] = coord[i] - 1; } } atomes_1.3.1/src/opengl/win/w_sequencer.c0000664000175000017500000003703615212624223020052 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_sequencer.c * @short Functions to create the MD sequencer window * @author Sébastien Le Roux */ /* * This file: 'w_sequencer.c' * * Contains: * - The functions to create the MD sequencer window * * List of functions: static gboolean animate (gpointer data); static gboolean seq_wait_for_stop (gpointer data); void set_player_title (glwin * view); void update_selection (glwin * view, int o_step); void update_step_button (glwin * view); void sequence (glwin * view, int o_step, int n_step); G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data); G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "callbacks.h" #include "glview.h" #include "glwindow.h" /*! \fn void set_player_title (glwin * view) \brief set sequencer window title \param view the target glwin */ void set_player_title (glwin * view) { int step = view -> anim -> last -> img -> step + 1; gchar * str = g_strdup_printf (_("%s - player - step %d"), prepare_for_title (get_project_by_id(view -> proj) -> name), step); gtk_window_set_title (GTK_WINDOW(view -> player -> win), str); g_free (str); } /*! \fn void update_selection (glwin * view, int o_step) \brief match and udpate selected atom()s from o_step to the active step \param view the target glwin \param o_step the step to match selection with */ void update_selection (glwin * view, int o_step) { int i, j, k; i = view -> anim -> last -> img -> step; project * this_proj = get_project_by_id(view -> proj); for (k=0; k<2; k++) { view -> anim -> last -> img -> selected[k] -> selected = 0; view -> anim -> last -> img -> selected[k] -> first = NULL; view -> anim -> last -> img -> selected[k] -> last = NULL; for (j=0; j natomes; j++) { if (this_proj -> atoms[o_step][j].pick[k]) { this_proj -> atoms[i][j].pick[k] = FALSE; process_selected_atom (this_proj, view, j, 0, 0, k); } if (this_proj -> atoms[o_step][j].label[k]) { this_proj -> atoms[i][j].label[k] = TRUE; } } update_all_selections (view, k); } } /*! \fn void update_step_button (glwin * view) \brief correct widget buttons sensitivity based on MD step \param view the target glwin */ void update_step_button (glwin * view) { if (view -> anim -> last -> img -> step == get_project_by_id(view -> proj) -> steps - 1) { widget_set_sensitive (view -> player -> first, 1); widget_set_sensitive (view -> player -> prev, 1); widget_set_sensitive (view -> player -> last, 0); widget_set_sensitive (view -> player -> next, 0); } else if (view -> anim -> last -> img -> step == 0) { widget_set_sensitive (view -> player -> first, 0); widget_set_sensitive (view -> player -> prev, 0); widget_set_sensitive (view -> player -> last, 1); widget_set_sensitive (view -> player -> next, 1); } else { widget_set_sensitive (view -> player -> first, 1); widget_set_sensitive (view -> player -> prev, 1); widget_set_sensitive (view -> player -> last, 1); widget_set_sensitive (view -> player -> next, 1); } } /*! \fn void sequence (glwin * view, int o_step, int n_step) \brief sequence to next step \param view the target glwin \param o_step actual step \param n_step next step */ void sequence (glwin * view, int o_step, int n_step) { int i; for (i=0; i<2; i++) save_all_selections (view, i); view -> anim -> last -> img -> step = n_step; update_selection (view, o_step); for (i=0; i proj), i)) view -> n_shaders[i][n_step] = -1; } recreate_all_shaders (view); set_player_title (view); update_step_button (view); update (view); } /*! \fn G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) \brief go to previous frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (view -> anim -> last -> img -> step > 0) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step - 1); } } /*! \fn G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) \brief go to next frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; project * this_proj = get_project_by_id(view -> proj); if (view -> anim -> last -> img -> step < this_proj -> steps-1) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step + 1); } } /*! \fn G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) \brief go to first frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; sequence (view, view -> anim -> last -> img -> step, 0); } /*! \fn G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) \brief got to last frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; sequence (view, view -> anim -> last -> img -> step, get_project_by_id(view -> proj) -> steps - 1); } /*! \fn G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) \brief jump to frame \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) { glwin * view = (glwin *) data; const gchar * m = entry_get_text (res); int s = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(view -> proj); if (s > 0 && s <= this_proj -> steps) { sequence (view, view -> anim -> last -> img -> step, s-1); } update_entry_int (res, this_proj -> modelgl -> anim -> last -> img -> step+1); } /*! \fn G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) \brief jump to frame dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; GtkWidget * win = dialogmodal (_("Enter a step number"), GTK_WINDOW(view -> player -> win)); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); gchar * str = g_strdup_printf (_("Step number [%d-%d]: "), 1, get_project_by_id(view -> proj) -> steps); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (str), TRUE, TRUE, 0); g_free (str); GtkWidget * step = create_entry (G_CALLBACK(seq_go_to), 100, 15, TRUE, (gpointer)view); update_entry_int (GTK_ENTRY(step), view -> anim -> last -> img -> step+1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, step, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn static gboolean animate (gpointer data) \brief animate \param data the associated data pointer */ static gboolean animate (gpointer data) { glwin * view = (glwin *) data; if (view -> play) { if (view -> anim -> last -> img -> step < get_project_by_id(view -> proj) -> steps-1) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step+1); } else if (view -> loop) { sequence (view, view -> anim -> last -> img -> step, 0); } else { view -> play = FALSE; view -> stop = TRUE; } } else { view -> play = FALSE; view -> stop = TRUE; } return view -> play; } /*! \fn G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) \brief play \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (! view -> play) { view -> play = TRUE; view -> stop = FALSE; g_timeout_add (view -> speed, (GSourceFunc) animate, view); } } /*! \fn G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) \brief stop \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> play = FALSE; } /*! \fn G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) \brief loop the animation \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (view -> loop) { view -> loop = FALSE; button_set_image (but, NULL, IMG_STOCK, MEDIA_LOOP); } else { view -> loop = TRUE; button_set_image (but, NULL, IMG_STOCK, MEDIA_ULOOP); } show_the_widgets (GTK_WIDGET(but)); } /*! \fn static gboolean seq_wait_for_stop (gpointer data) \brief pause / restart if on pause \param data the associated data pointer */ static gboolean seq_wait_for_stop (gpointer data) { glwin * view = (glwin *) data; if (view -> stop) { seq_play (NULL, data); return FALSE; } else { return TRUE; } } /*! \fn G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) \brief go faster \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int oldspeed; if (view -> play && view -> speed > 4) { oldspeed = view -> speed; if (view -> speed == 5) { view -> speed -= 1; } else { view -> speed -= 5; } view -> play = FALSE; g_timeout_add (oldspeed, (GSourceFunc) seq_wait_for_stop, view); } } /*! \fn G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) \brief go slower \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int oldspeed; if (view -> play && view -> speed < 10000) { oldspeed = view -> speed; if (view -> speed == 1) { view -> speed = 5; } else { view -> speed += 5; } view -> play = FALSE; g_timeout_add (oldspeed, (GSourceFunc) seq_wait_for_stop, view); } } /*! \fn G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) \brief create the sequencer window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) { //int p; glwin * view = (glwin *) data; if (view -> player == NULL) { //p = view -> proj; view -> player = g_malloc0(sizeof*view -> player); view -> player -> win = create_win (" ", view -> win, FALSE, FALSE); set_player_title (view); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> player -> win, vbox); // First line GtkWidget * hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxa, TRUE, TRUE, 0); // First view -> player -> first = create_button (_("First"), IMG_STOCK, MEDIA_FIRST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_first), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> first, TRUE, TRUE, 0); // Previous view -> player -> prev = create_button (_("Previous"), IMG_STOCK, MEDIA_PREV, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_previous), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> prev, TRUE, TRUE, 0); // Next view -> player -> next = create_button (_("Next"), IMG_STOCK, MEDIA_NEXT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_next), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> next, TRUE, TRUE, 0); // Last view -> player -> last = create_button (_("Last"), IMG_STOCK, MEDIA_LAST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_last), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> last, TRUE, TRUE, 0); // JumpTo view -> player -> jump = create_button (_("Go to"), IMG_STOCK, MEDIA_GOTO, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_jump), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> jump, TRUE, TRUE, 0); // Second line GtkWidget * hboxb = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxb, TRUE, TRUE, 0); // Play view -> player -> play = create_button (_("Play"), IMG_STOCK, MEDIA_PLAY, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_play), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> play, TRUE, TRUE, 0); // Stop view -> player -> stop = create_button (_("Stop"), IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_stop), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> stop, TRUE, TRUE, 0); // Loop view -> player -> loop = create_button (_("Loop"), IMG_STOCK, MEDIA_LOOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_loop), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> loop, TRUE, TRUE, 0); // Faster view -> player -> fast = create_button (_("Faster"), IMG_STOCK, MEDIA_FAST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_faster), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> fast, TRUE, TRUE, 0); // Slower view -> player -> slow = create_button (_("Slower"), IMG_STOCK, MEDIA_SLOW, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_slower), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> slow, TRUE, TRUE, 0); add_gtk_close_event (view -> player -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> player -> win); update_step_button (view); } else { show_the_widgets (view -> player -> win); } } atomes_1.3.1/src/opengl/win/menu_bar.c0000664000175000017500000003705615212624223017324 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file menu_bar.c * @short Functions to create the menu bar of the OpenGL window \n Functions to create the menu items for the menu bar and the pop up menu * @author Sébastien Le Roux */ /* * This file: 'menu_bar.c' * * Contains: * - The functions to create the menu bar of the OpenGL window - The functions to create the menu items for the menu bar and the pop up menu * * List of functions: void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar); void update_menu_bar (glwin * view); G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * opengl_window_create_menu_bar (glwin * view); GMenu * prepare_opengl_menu (glwin * view, int popm); GMenu * prepare_model_menu (glwin * view, int popm); GMenu * prepare_coord_menu (glwin * view, int popm); GMenu * opengl_menu_bar (glwin * view); */ #include "global.h" #include "interface.h" #include "project.h" #include "calc.h" #include "glview.h" #include "initcoord.h" #include "submenus.h" #include "color_box.h" #ifdef GTK4 extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data); GSimpleActionGroup * view_pop_actions; /*! \fn G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open OpenGL advanced configuration window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { opengl_advanced (NULL, data); } /*! \fn G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) \brief render image from OpenGL window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) { render_gl_image (NULL, data); } /*! \fn void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive) \brief generic function to create menu item for the OpenGL menu bar / pop up menu \param view the target glwin \param menu the menu to attach the new menu item to \param name the new menu item label, if any \param key the new menu item action key \param mpop main app (0) or popup (1) \param item_id the new menu item action id \param accel keyboard accelerator for the new menu item, if any (NULL otherwise) \param image_format the image format (in enum ImageFormats) \param icon the image data if any (or NULL) \param custom custom menu item (1= yes, 0 = no), to insert a widget later on \param handler the new menu item callback (or NULL) \param data the associated data pointer (or NULL) \param check is the new menu item a check menu item ? \param status is 'check' then what is the status of the new check menu item ? \param radio is the new menu item a radio menu item ? \param sensitive new menu item sensitivity */ void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive) { gchar * str_a, * str_b, * str_c; str_a = g_strdup_printf ("set-%s", key); str_b = g_strdup_printf ("%s.%d.%d", str_a, item_id, mpop); str_c = (sensitive) ? g_strdup_printf ("gl-%d.%s", view -> action_id, (radio) ? str_a : str_b) : g_strdup_printf ("None"); append_menu_item (menu, name, (const gchar *) str_c, accel, (custom) ? (const gchar *) str_b : NULL, image_format, icon, check, status, radio, (radio) ? (const gchar *)str_b : NULL); if (handler) { if (! radio || (radio && status)) { if (! opengl_project) { widget_add_action (view -> action_group, (radio) ? (const gchar *)str_a : (const gchar *)str_b, handler, data, check, status, radio, (const gchar *)str_b); } else { widget_add_action (view_pop_actions, (radio) ? (const gchar *)str_a : (const gchar *)str_b, handler, data, check, status, radio, (const gchar *)str_b); } } } g_free (str_a); g_free (str_b); g_free (str_c); } /*! \fn GMenu * prepare_opengl_menu (glwin * view, int popm) \brief create the 'OpenGL' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_opengl_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Style"), menu_style(view, popm)); GMenuItem * item = g_menu_item_new (_("Color Maps"), (get_project_by_id(view -> proj) -> nspec) ? NULL : "None"); g_menu_item_set_submenu (item, (GMenuModel*)menu_map(view, popm)); g_menu_append_item (menu, item); append_opengl_item (view, menu, _("Material and Light(s)"), "material", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_opengl_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Render Image"), "image", popm, popm, "I", IMG_FILE, PACKAGE_IMG, FALSE, G_CALLBACK(to_render_gl_image), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * prepare_model_menu (glwin * view, int popm) \brief create the 'Model' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_model_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Atom(s)"), menu_atoms(view, popm, 0)); append_submenu (menu, _("Bond(s)"), menu_bonds(view, popm, 0)); append_submenu (menu, _("Clone(s)"), menu_clones(view, popm)); g_menu_append_item (menu, menu_box_axis (view, popm, 0)); return menu; } /*! \fn GMenu * prepare_coord_menu (glwin * view, int popm) \brief create the 'Chemistry' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_coord_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Coordination"), menu_coord (view, popm)); append_submenu (menu, _("Polyhedra"), menu_poly (view, popm)); if (view -> rings) { append_submenu (menu, _("Ring(s)"), menu_rings (view, popm)); } else { append_menu_item (menu, _("Ring(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> chains) { append_submenu (menu, _("Chain(s)"), add_menu_coord (view, popm, 9)); } else { append_menu_item (menu, _("Chain(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> adv_bonding[0]) { append_submenu (menu, _("Fragment(s)"), add_menu_coord (view, popm, 2)); } else { append_menu_item (menu, _("Fragment(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> adv_bonding[1]) { append_submenu (menu, _("Molecule(s)"), add_menu_coord (view, popm, 3)); } else { append_menu_item (menu, _("Molecule(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_opengl_item (view, menu, _("Advanced"), "adv-all", popm, popm, "E", IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[30][0], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_shortcuts (glwin * view, int popm) \brief create shortcuts menu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_shortcuts (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Shortcuts"), "shortcuts", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(view_shortcuts), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * opengl_menu_bar (glwin * view) \brief create OpenGL window menu GTK4 \param view the target glwin */ GMenu * opengl_menu_bar (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "OpenGL", prepare_opengl_menu(view, 0)); if (get_project_by_id(view -> proj) -> natomes) { append_submenu (menu, _("Model"), prepare_model_menu(view, 0)); append_submenu (menu, _("Chemistry"), prepare_coord_menu(view, 0)); } else { append_menu_item (menu, _("Model"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Chemistry"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_submenu (menu, _("Tools"), menu_tools(view, 0)); append_submenu (menu, _("View"), menu_view(view, 0)); append_submenu (menu, _("Animate"), menu_anim(view, 0)); append_submenu (menu, _("Help"), menu_shortcuts(view, 0)); return menu; } /*! \fn void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) \brief menu bar attach color palettes GTK4 \param view the target glwin \param menu_bar the GtkWidget sending the signal */ void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) { /* Here we need to attached color palettes for: - Box - Atoms - Clones - Total coordination(s) - Partial coordination(s) - Fragment(s) and molecule(s) - Ring(s) - Background This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j, k, l, m; gchar * str, * env; project * this_proj = get_project_by_id (view -> proj); // Box if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -1, -1, -1), "set-box-color.0")) { g_debug ("Color palette error: box - custom= set-box-color.0"); } // Atom(s) and clone(s) for (i=0; i<2; i++) { for (j=0; j nspec; j++) { str = g_strdup_printf ("set-%s.%d", (! i) ? "atom-color" : "clone-color", j); if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, i*this_proj -> nspec+j, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - %d - custom= %s", (! i) ? "atom-color" : "clone-color", j+1, str); } g_free (str); } } // Coordinations for (i=0; i<2; i++) { if (this_proj -> coord -> ntg[i]) { for (j=0; j nspec; j++) { for (k=0; k coord -> ntg[i][j]; k++) { m = 0; for (l=0; l coord -> ntg[i][l]; } if (i) { env = env_name (this_proj, k, j, 1, NULL); str = g_strdup_printf ("set-%s-c.%d", exact_name (env), m); g_free (env); } else { str = g_strdup_printf ("set-%d-c.%d", this_proj -> coord -> geolist[i][j][k], m); } m += (i) ? this_proj -> coord -> totcoord[0] : 0; if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, 2*this_proj -> nspec+m, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - spec= %d - coord= %d, custom= %s", (! i) ? "total-coord" : "partial-coord", j+1, k+1, str); } g_free (str); } } } } // Fragment(s) and molecule(s) for (i=2; i<4; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-%s-%d", (i == 2) ? "fcol" : "mcol", j); k = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + j; if (i == 3) k += this_proj -> coord -> totcoord[2]; if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, k, i, 0), (const gchar *)str)) { g_debug ("Color palette error: %s - %d, custom= %s", (i == 2) ? "fragment" : "molecule", j+1, str); } g_free (str); } } // Rings for (i=4; i<9; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-rcol-%d-%d", i, j); if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -3, i-4, 0), (const gchar *)str)) { g_debug ("Color palette error: rings - %d - %d, custom= %s", i, j+1, str); } g_free (str); } } // Background if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -2, -1, -1), "set-back-color.0")) { g_debug ("Color palette error: background - custom= set-back-color.0"); } } /*! \fn GtkWidget * opengl_window_create_menu_bar (glwin * view) \brief create the OpenGL window menu bar widget GTK4 \param view the target glwin */ GtkWidget * opengl_window_create_menu_bar (glwin * view) { view -> menu_bar = destroy_this_widget (view -> menu_bar); if (view -> action_group) g_object_unref (view -> action_group); view -> action_group = g_simple_action_group_new (); opengl_project = NULL; GtkWidget * menu_bar = gtk_popover_menu_bar_new_from_model ((GMenuModel *)opengl_menu_bar(view)); menu_bar_attach_color_palettes (view, menu_bar); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, menu_bar, FALSE, FALSE, 0); opengl_project_changed (activev); gchar * str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (view -> menu_box, str, G_ACTION_GROUP(view -> action_group)); g_free (str); show_the_widgets (menu_bar); return menu_bar; } /*! \fn void update_menu_bar (glwin * view) \brief update the OpenGL window menu bar GTK4 \param view the target glwin */ void update_menu_bar (glwin * view) { view -> menu_bar = opengl_window_create_menu_bar (view); } #endif atomes_1.3.1/src/opengl/win/w_encode.c0000664000175000017500000004335215212624223017313 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_encode.c * @short Functions to create the encoding (image/video) window * @author Sébastien Le Roux */ /* * This file: 'w_encode.c' * * Contains: * - The functions to create the encoding (image/video) window * * List of functions: image * clean_image (project * to_clean, image * to_cli); void clean_animation (glwin * view); void set_encoding_widget_sensitivity (gboolean video, int sensitivity); void window_encode (glwin * view, gboolean video); G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk); G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void run_window_encode (GtkDialog * win ,gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "movie.h" int video_res[2]; int framesec; int extraframes; int codec; int oglquality; int bitrate; extern char * codec_name[VIDEO_CODECS]; extern char * image_name[IMAGE_FORMATS]; extern gboolean spin (gpointer data); /*! \fn G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) \brief set number of frames \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) { const gchar * n; int frs; n = entry_get_text (res); frs = string_to_double ((gpointer)n); if (frs > 0) { framesec = frs; } update_entry_int (res, framesec); } /*! \fn G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) \brief set video extra frames \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) { const gchar * n; int exf; n = entry_get_text (res); exf = string_to_double ((gpointer)n); if (exf >= 0) { extraframes = exf; } update_entry_int (res, extraframes); } /*! \fn G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) \brief set video / image resolution \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) { const gchar * n; int vres; int id = GPOINTER_TO_INT(data); n = entry_get_text (res); vres = string_to_double ((gpointer)n); if (vres > 0) { video_res[id] = vres; } update_entry_int (res, video_res[id]); } /*! \fn G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) \brief change video codec \param *ComboBoxGtk the GtkComboBox sending the signal */ G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) { codec = combo_get_active ((GtkWidget *)ComboBoxGtk); } /*! \fn G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) \brief set encoding OpenGL quality callback - spin \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) { qual = gtk_spin_button_get_value_as_int(res); if (qual == 0 || (qual > 1 && qual <= 1000)) { oglquality = qual; } update_entry_int (GTK_ENTRY(res), oglquality); } /*! \fn G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) \brief set video bitrate entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) { const gchar * n; int bit; n = entry_get_text (res); bit = string_to_double ((gpointer)n); if (bit > 0) { bitrate = bit; } update_entry_int (res, bitrate); } /*! \fn image * clean_image (project * to_clean, image * to_cli) \brief free all memory related to an image data structure \param to_clean the target project \param to_cli the target image to free */ image * clean_image (project * to_clean, image * to_cli) { int i, j; if (to_cli -> l_ghtning.spot) { for (i=0; i l_ghtning.lights; i++) { g_free (to_cli -> l_ghtning.spot[i]); } g_free (to_cli -> l_ghtning.spot); } if (to_cli -> xyz) { for (i=0; i<3; i++) { if (to_cli -> xyz -> title[i]) g_free (to_cli -> xyz -> title[i]); } g_free (to_cli -> xyz); to_cli -> xyz = NULL; } if (to_cli -> abc) { g_free (to_cli -> abc); to_cli -> abc = NULL; } for (i=0; i<2; i++) { if (to_cli -> show_atom[i]) { g_free (to_cli -> show_atom[i]); to_cli -> show_atom[i] = NULL; } if (to_cli -> show_label[i]) { g_free (to_cli -> show_label[i]); to_cli -> show_label[i] = NULL; } } for (i=0; i<9; i++) { if (to_cli -> show_poly[i]) { g_free (to_cli -> show_poly[i]); to_cli -> show_poly[i] = NULL; } } for (i=0; i<10; i++) { if (to_cli -> show_coord[i]) { g_free (to_cli -> show_coord[i]); to_cli -> show_coord[i] = NULL; } if (to_cli -> spcolor[i]) { for (j=0; j<((i < 2) ? to_clean -> nspec : 1); j++) { if (to_cli -> spcolor[i][j]) { g_free (to_cli -> spcolor[i][j]); to_cli -> spcolor[i][j] = NULL; } } g_free (to_cli -> spcolor[i]); to_cli -> spcolor[i] = NULL; } } if (to_cli -> at_color) { g_free (to_cli -> at_color); to_cli -> at_color = NULL; } if (to_cli -> sphererad) { g_free (to_cli -> sphererad); to_cli -> sphererad =NULL; } if (to_cli -> pointrad) { g_free (to_cli -> pointrad); to_cli -> pointrad = NULL; } if (to_cli -> atomicrad) { g_free (to_cli -> atomicrad); to_cli -> atomicrad = NULL; } for (i=0; i<2; i++) { for (j=0; j fm_show_vol[i][j]) { g_free (to_cli -> fm_show_vol[i][j]); } if (to_cli -> fm_vol_col[i][j]) { g_free (to_cli -> fm_vol_col[i][j]); } } } for (i=0; i<5; i++) { if (to_cli -> i_rings[i] != NULL) { for (j=0; j i_rings[i][0][0]; j++) { if (to_cli -> i_rings[i][j]) { g_free (to_cli -> i_rings[i][j]); to_cli -> i_rings[i][j] = NULL; } } g_free (to_cli -> i_rings[i]); to_cli -> i_rings[i] = NULL; } } if (to_cli -> at_data) { g_free (to_cli -> at_data); to_cli -> at_data = NULL; } g_free (to_cli); return NULL; } /*! \fn void clean_animation (project * proj, glwin * view) \brief clean saved animation data \param proj the target project \param view the target glwin */ void clean_animation (project * proj, glwin * view) { int i; snapshot * shot = view -> anim -> first; shot = view -> anim -> first; for (i=0; i < view -> anim -> frames-1; i++) { shot -> img = clean_image (proj, shot -> img); shot = shot -> next; g_free (shot -> prev); } view -> anim -> first = view -> anim -> last = shot; view -> anim -> frames = 0; } GtkWidget * resf; GtkWidget * rese; GtkWidget * resb; GtkWidget * res[2]; GtkWidget * cod; /*! \fn void set_encoding_widget_sensitivity (gboolean video, int sensitivity) \brief Adjust the sensitivity for the widgets of the encoding window \param video encoding video (yes / no) \param sensitivity sensitivity */ void set_encoding_widget_sensitivity (gboolean video, int sensitivity) { if (video) { widget_set_sensitive (resf, sensitivity); widget_set_sensitive (rese, sensitivity); widget_set_sensitive (resb, sensitivity); } widget_set_sensitive (res[0], sensitivity); widget_set_sensitive (res[1], sensitivity); widget_set_sensitive (cod, sensitivity); } GtkWidget * form; /*! \fn G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) \brief selecting the image format \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) { codec = combo_get_active ((GtkWidget *)box); switch (codec) { case 0: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_PNG); break; case 1: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_JPG); break; case 2: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_TIFF); break; case 3: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_BMP); break; } } GtkWidget * encoding_pb; gboolean encode_video; /*! \fn G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) \brief encoding a movie - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) { glwin * view = (glwin *)data; if (response_id == GTK_RESPONSE_APPLY) { set_encoding_widget_sensitivity (encode_video, 0); video_options * vopts = g_malloc0(sizeof*vopts); vopts -> proj = view -> proj; vopts -> oglquality = oglquality; vopts -> video_res = duplicate_int (2, video_res); vopts -> codec = codec; if (encode_video) { vopts -> framesec = framesec; vopts -> extraframes = extraframes; vopts -> bitrate = bitrate; save_movie (view, vopts); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), 0.0); } else { render_image (view, vopts); } g_free (vopts -> video_res); g_free (vopts); set_encoding_widget_sensitivity (encode_video, 1); } else { destroy_this_dialog (win); } } /*! \fn void window_encode (glwin * view, gboolean video) \brief encoding a movie - creating the dialog \param view the target glwin \param video video (1) or image (0) */ void window_encode (glwin * view, gboolean video) { gchar * str; int i; if (video) { str = g_strdup_printf (_("%s - movie encoding"), prepare_for_title(get_project_by_id(view -> proj) -> name)); } else { str = g_strdup_printf (_("%s - image rendering"), prepare_for_title(get_project_by_id(view -> proj) -> name)); } GtkWidget * win = dialog_cancel_apply (str, view -> win, FALSE); g_free (str); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox; if (video) { gtk_widget_set_size_request (vbox, -1, 420); // Frames hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Frames recorded:"), 350, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%d", view -> anim -> frames); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); // Frames per second hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Frames per seconds:"), 350, -1, 0.0, 0.5), FALSE, FALSE, 0); resf = create_entry (G_CALLBACK(set_video_frames), 100, 10, FALSE, NULL); framesec = 24; update_entry_int (GTK_ENTRY(resf), framesec); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, resf, FALSE, FALSE, 0); // Extra frames hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Extra frames every (frames):"), 350, -1, 0.0, 0.5), FALSE, FALSE, 0); rese = create_entry (G_CALLBACK(set_video_extra_frames), 100, 10, FALSE, NULL); extraframes = 10; update_entry_int (GTK_ENTRY(rese), extraframes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rese, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Movie resolution (in pixels):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { gtk_widget_set_size_request (vbox, -1, 230); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Image resolution (in pixels):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, (video) ? 10 : 0); gchar * ax[2]={"x: ", "y: "}; for (i=0; i<2; i++) { video_res[i] = view -> pixels[i]; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(ax[i], 100, -1, 0.5, 0.5), FALSE, FALSE, 0); res[i] = create_entry (G_CALLBACK(set_video_res), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(res[i]), video_res[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, res[i], FALSE, FALSE, 0); } cod = create_combo (); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, video ? 0 : 10); gtk_widget_set_size_request (hbox, 300, -1); if (video) { // Codec add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Video codec:"), 300, -1, 0.0, 0.5), FALSE, FALSE, 0); for (i=0; i anim -> last -> img -> ray_tracing) { if (video) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("OpenGL quality [0-1000] (0= recorded quality):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("OpenGL quality [0-1000] (0= on-screen quality):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin_button (G_CALLBACK(set_video_opengl_spin), 0, 0, 1000, 1, 0, 100, NULL), FALSE, FALSE, 20); } oglquality = 0; if (video) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Progress: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); encoding_pb = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), 0.0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, encoding_pb, FALSE, FALSE, 0); } show_the_widgets (win); if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } gboolean old_play, old_stop; old_play = view -> play; old_stop = view -> stop; view -> play = FALSE; view -> stop = TRUE; encode_video = video; run_this_gtk_dialog (win, G_CALLBACK(run_window_encode), view); clean_animation (get_project_by_id(view -> proj), view); update (view); if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } view -> play = old_play; view -> stop = old_stop; } atomes_1.3.1/src/opengl/win/w_advance.c0000664000175000017500000017265015212624223017463 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_advance.c * @short Functions to create the OpenGL parameters edition window * @author Sébastien Le Roux */ /* * This file: 'w_advance.c' * * Contains: * - The functions to create the OpenGL parameters edition window * * List of functions: int * light_source_to_be_removed (int val, Lightning * ogl_lightning, opengl_edition * ogl_edit); G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data); G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data); void print_light_source (Light source, int i); void show_active_light_data (opengl_edition * ogl_win, int lid, int tid); void update_light_data (int li, opengl_edition * ogl_win); void create_lights_combo (int num_lights, opengl_edition * ogl_win); void add_remove_lights (int val, gpointer data); void set_data_pos (vec3_t * vect, int pos, double v); void param_has_changed (gpointer data, double val); void fog_param_changed (gpointer data, GLfloat u, GtkRange * range); void setup_fog_dialogs (opengl_edition * ogl_edit, int fid); void close_advanced_opengl (gpointer data); G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_r_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_f_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data); G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign); GtkWidget * bdv_box (GtkWidget * box, char * lab, int size, float xalign); GtkWidget * GtkWidget * create_setting_pos (gchar * lab, int size, float xalign, int pid, int lid, float * values, opengl_edition * ogl_win); GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * the_light); GtkWidget * rendering_fix (glwin * view); GtkWidget * lightning_fix (glwin * view); GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat); GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog); Light * init_light_source (int type, float size); Light * copy_light_source (Light * old_sp); Light ** copy_light_sources (int dima, int dimb, Light ** old_sp); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "glview.h" #include "glwindow.h" extern void set_quality (int q, glwin * view); GLfloat template_parameters[TEMPLATES][5] ={{0.50, 0.50, 0.99, 1.00, 1.00}, // Ok {0.90, 0.60, 0.99, 1.50, 1.00}, // Ok {0.80, 0.40, 0.99, 1.00, 1.00}, // Ok {0.35, 0.15, 0.99, 1.50, 1.00}, // Ok {0.50, 0.50, 0.99, 1.00, 0.50}, // {0.50, 0.50, 0.99, 1.00, 0.75}, // {0.35, 0.80, 0.99, 1.50, 1.00}}; // Ok float mat_min_max[5][2] = {{0.0, 1.0}, {0.0, 1.0}, {0.0, 1.0}, {0.0, 10.0}, {0.0, 1.0}}; gchar * ogl_settings[3][10] = {{i18n("Albedo"), i18n("Metallic"), i18n("Roughness"), i18n("Ambient occlusion"), i18n("Gamma correction"), i18n("Opacity")}, {i18n("Position"), i18n("Direction"), i18n("Intensity"), i18n("Constant attenuation"), i18n("Linear attenuation"), i18n("Quadratic attenuation"), i18n("Cone angle"), i18n("Inner cutoff"), i18n("Outer cutoff"), i18n("Type")}, {i18n("Fog color")}}; gchar * lpos[3] = {"x", "y", "z"}; gchar * cpos[3] = {"r", "g", "b"}; /*! \fn GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign) \brief create a box with markup label \param box the box to insert the widget in \param lab label \param vspace vertical space \param size size \param xalign x alignement */ GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign) { GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, size, -1, xalign, 0.5), FALSE, FALSE, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, vspace); return hbox; } /*! \fn GtkWidget * bdv_box (GtkWidget * box, char * lab, int size, float xalign) \brief create a box with markup label \param box the GtkWidget sending the signal \param lab label \param size size \param xalign x alignement */ GtkWidget * bdv_box (GtkWidget * box, char * lab, int size, float xalign) { GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (lab, size, -1, xalign, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); return hbox; } GtkWidget * d_close; int status; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) \brief toggle delete light callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) \brief toggle delete light callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) #endif { if (button_get_status ((GtkWidget *)but)) { status --; } else { status ++; } if (status == 0) { widget_set_sensitive (d_close, 1); } else { widget_set_sensitive (d_close, 0); } } int * light_list; GtkWidget ** light_but; /*! \fn G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) \brief remove light source(s) - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) { if (! status) { Lightning * ogl_lightning = (Lightning *)data; int i; for (i=0; i lights; i++) { if (button_get_status ((GtkWidget *)light_but[i])) { light_list[i] = i+1; } } destroy_this_dialog (win); } else { gchar * str = g_strdup_printf (_("You must select %d light source(s) to be removed !"), status); show_warning (str, GTK_WIDGET(win)); g_free (str); } } /*! \fn int * light_source_to_be_removed (int val, Lightning * ogl_lightning, opengl_edition * ogl_edit) \brief remove light source(s) - creating the dialog \param val number of light(s) to remove \param ogl_lightning the target lightning data structure \param ogl_edit the target OpenGL edition window */ int * light_source_to_be_removed (int val, Lightning * ogl_lightning, opengl_edition * ogl_edit) { int i; gchar * str; status = val; if (val > 1) { str = g_strdup_printf (_("Please select the %d light sources to be removed: "), val); } else { str = g_strdup_printf (_("Please select the light source to be removed: ")); } GtkWidget * win = message_dialogmodal (str, _("Remove light source(s)"), GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, ogl_edit -> win); GtkWidget * vbox = dialog_get_content_area (win); d_close = gtk_dialog_get_widget_for_response (GTK_DIALOG (win), GTK_RESPONSE_CLOSE); widget_set_sensitive (d_close, 0); g_free (str); light_but = g_malloc0(ogl_lightning -> lights * sizeof*light_but); for (i=0; i lights; i++) { str = g_strdup_printf (_("Light N°%d"), i+1); light_but[i] = check_button (str, -1, 25, FALSE, G_CALLBACK(toggled_delete_ligth), (gpointer)GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, light_but[i], TRUE, TRUE, 0); g_free (str); } light_list = allocint (ogl_lightning -> lights); run_this_gtk_dialog (win, G_CALLBACK(run_light_source_to_be_removed), ogl_lightning); return light_list; } /*! \fn void print_light_source (Light source, int i) \brief print light source data \param source the light source \param i the light source id */ void print_light_source (Light source, int i) { g_debug ("\n"); g_debug ("Light N°%d", i); g_debug ("Type= %d", source.type); g_debug ("Pos_x= %f, Pos_y= %f, Pos_z= %f", source.position.x, source.position.y, source.position.z); g_debug ("Dir_x= %f, Dir_y= %f, Dir_z= %f", source.direction.x, source.direction.y, source.direction.z); g_debug ("Int_r= %f, Int_g= %f, Int_b= %f", source.intensity.x, source.intensity.y, source.intensity.z); g_debug ("Att_c= %f, Att_l= %f, Att_q= %f", source.attenuation.x, source.attenuation.y, source.attenuation.z); g_debug ("Spo_a= %f, Spo_i= %f, Spo_o= %f", source.spot_data.x, source.spot_data.y, source.spot_data.z); g_debug ("\n"); } /* Light attenuation table (from Ogre3D): Distance(to object) Constant Linear Quadratic 7 1.0 0.7 1.8 13 1.0 0.35 0.44 20 1.0 0.22 0.20 32 1.0 0.14 0.07 50 1.0 0.09 0.032 65 1.0 0.07 0.017 100 1.0 0.045 0.0075 160 1.0 0.027 0.0028 200 1.0 0.022 0.0019 325 1.0 0.014 0.0007 600 1.0 0.007 0.0002 3250 1.0 0.0014 0.000007 */ /*! \fn Light * init_light_source (int type, float size) \brief initialize a light source \param type the type of light \param size system size */ Light * init_light_source (int type, float size) { Light * new_light = g_malloc0(sizeof*new_light); new_light -> type = type; new_light -> fix = (type != 1) ? 0 : 1; new_light -> show = 0; new_light -> intensity = vec3(0.0, 0.0, 0.0); new_light -> direction = vec3(0.0, 0.0, 0.0); new_light -> position = vec3(0.0, 0.0, 0.0); new_light -> attenuation = vec3(0.0, 0.0, 0.0); if (type == 0) { new_light -> intensity = vec3 (DEFAULT_INTENSITY, DEFAULT_INTENSITY, DEFAULT_INTENSITY); new_light -> position = vec3 (0.0, 0.0, 0.0); new_light -> direction = vec3 (0.5, 1.0, 0.7); new_light -> attenuation = vec3 (1.0, 0.0, 0.0); } else if (type == 1) { new_light -> intensity = vec3 (1.2, 1.1, 1.0); new_light -> position = vec3 (0.0, 0.0, size * 0.8); new_light -> attenuation = vec3 (1.0, 0.01 / size, 0.001 / (size * size)); } else { new_light -> intensity = vec3 (1.5, 1.4, 1.3); new_light -> position = vec3 (0.0, 0.0, size * 0.5); // Au centre new_light -> direction = vec3 (0.0, 0.0, -1.0); // Vers le bas new_light -> attenuation = vec3 (1.0, 0.01 / size, 0.001 / (size * size)); new_light -> spot_data = vec3 (45.0, 5.0, 8.0); } return new_light; } /*! \fn Light * copy_light_source (Light * old_sp) \brief create a copy of a light source \param old_sp the light source to copy */ Light * copy_light_source (Light * old_sp) { Light * new_sp = g_malloc0(sizeof*new_sp); new_sp -> type = old_sp -> type; new_sp -> fix = old_sp -> fix; new_sp -> show = old_sp -> show; new_sp -> position = old_sp -> position; new_sp -> direction = old_sp -> direction; new_sp -> intensity = old_sp -> intensity; new_sp -> attenuation = old_sp -> attenuation; new_sp -> spot_data = old_sp -> spot_data; return new_sp; } /*! \fn Light ** copy_light_sources (int dima, int dimb, Light ** old_sp) \brief create a copy of a list of light sources \param dima new list size \param dimb old list size to duplicate \param old_sp old light sources */ Light ** copy_light_sources (int dima, int dimb, Light ** old_sp) { int j; Light ** new_sp = g_malloc0(dima*sizeof * new_sp); for (j=0; j proj) -> modelgl -> anim -> last -> img -> l_ghtning.spot[lid]; this_light -> type = tid; hide_the_widgets (ogl_win -> advanced_light_box); widget_set_sensitive (ogl_win -> light_type, lid); if (this_light -> type) show_the_widgets (ogl_win -> advanced_light_box); int i; for (i=0; i<2; i++) { hide_the_widgets (ogl_win -> light_b_coord[i]); hide_the_widgets (ogl_win -> light_b_entry[i]); } if (this_light -> type) { show_the_widgets (ogl_win -> light_b_coord[0]); show_the_widgets (ogl_win -> light_b_entry[0]); } if (this_light -> type == 0 || this_light -> type == 2) { show_the_widgets (ogl_win -> light_b_coord[1]); } if (this_light -> type == 2) { show_the_widgets (ogl_win -> light_b_entry[1]); } if (! preferences) { hide_the_widgets (ogl_win -> light_show); if (this_light -> type) show_the_widgets (ogl_win -> light_show); } } /*! \fn void update_light_data (int li, opengl_edition * ogl_win) \brief update light data \param li the light id \param ogl_win the target OpenGL edition window */ void update_light_data (int li, opengl_edition * ogl_win) { Light * this_light = (preferences) ? tmp_lightning.spot[li] : get_project_by_id(ogl_win -> proj) -> modelgl -> anim -> last -> img -> l_ghtning.spot[li]; combo_set_active (ogl_win -> light_type, this_light -> type); combo_set_active (ogl_win -> light_fix, this_light -> fix); show_active_light_data (ogl_win, li, this_light -> type); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[0]), this_light -> attenuation.x); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[1]), this_light -> attenuation.y); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[2]), this_light -> attenuation.z); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[3]), this_light -> spot_data.x); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[4]), this_light -> spot_data.y); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[5]), this_light -> spot_data.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][0]), this_light -> position.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][1]), this_light -> position.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][2]), this_light -> position.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][0]), this_light -> direction.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][1]), this_light -> direction.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][2]), this_light -> direction.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][0]), this_light -> intensity.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][1]), this_light -> intensity.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][2]), this_light -> intensity.z); if (! preferences) { button_set_status (ogl_win -> light_show, this_light -> show); } } /*! \fn G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) \brief update light parameters based on light id in combo box \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) { int li = combo_get_active ((GtkWidget *)box); update_light_data (li, (opengl_edition *)data); } /*! \fn void create_lights_combo (int num_lights, opengl_edition * ogl_win) \brief create light combo box \param num_lights the target number of lights \param ogl_win the target OpenGL edition window */ void create_lights_combo (int num_lights, opengl_edition * ogl_win) { ogl_win -> lights = create_combo (); int i; gchar * str; for (i=0; i lights, str); g_free (str); } gtk_widget_set_size_request (ogl_win -> lights, 100, -1); g_signal_connect (G_OBJECT (ogl_win -> lights), "changed", G_CALLBACK(show_light_param), ogl_win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ogl_win -> lights_box, ogl_win -> lights, FALSE, FALSE, 10); } /*! \fn void add_remove_lights (int val, gpointer data) \brief add or remove lights \param val total number of light(s) to keep \param data the associated data pointer */ void add_remove_lights (int val, gpointer data) { int i, j, k; project * this_proj; glwin * view; Lightning * this_lightning; opengl_edition * ogl_edit; if (! preferences) { view = (glwin *)data; this_proj = get_project_by_id (view -> proj); this_lightning = & view -> anim -> last -> img -> l_ghtning; ogl_edit = view -> opengl_win; } else { this_lightning = & tmp_lightning; ogl_edit = pref_ogl_edit; } i = this_lightning -> lights; Light ** old_spots; if (val > i) { #ifdef DEBUG g_debug ("ADDING_LIGHT_SOURCE:: val= %d, i= %d", val, i); #endif // Adding light source(s) old_spots = copy_light_sources (i, i, this_lightning -> spot); g_free (this_lightning -> spot); this_lightning -> spot = copy_light_sources (val, i, old_spots); this_lightning -> lights = val; for (j=i; j spot[j] = init_light_source (0, (! preferences) ? this_proj -> modelgl -> p_moy : 1.0); // Init directional by default } g_free (old_spots); } else if (val < i) { // We need to remove a light #ifdef DEBUG g_debug ("REMOVING_LIGHT_SOURCE:: val= %d, i= %d", val, i); #endif int * ltr = light_source_to_be_removed (i-val, this_lightning, ogl_edit); if (ltr != NULL) { old_spots = copy_light_sources (i, i, this_lightning -> spot); g_free (this_lightning -> spot); this_lightning -> spot = g_malloc0(val*sizeof*this_lightning -> spot); k = -1; for (j=0; j spot[k] = copy_light_source (old_spots[j]); } #ifdef DEBUG else { g_debug ("REMOVING_LIGHT_SOURCES:: j= %d, ltr[%d]= %d", j, j, ltr[j]); } #endif // DEBUG } g_free (old_spots); this_lightning -> lights = val; #ifdef DEBUG g_debug ("LIGHT(s) HAVE BEEN REMOVED:: NEW_LIGHTS_NUM= %d", val); #endif } } ogl_edit -> lights = destroy_this_widget (ogl_edit -> lights); create_lights_combo (this_lightning -> lights, ogl_edit); show_the_widgets (ogl_edit -> lights); combo_set_active (ogl_edit -> lights, 0); update_light_data (0, ogl_edit); if (! preferences) { init_shaders (view); update (view); } } /*! \fn G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) \brief change the number of light(s) - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) { add_remove_lights (gtk_spin_button_get_value_as_int(res), data); } /*! \fn G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) \brief update light parameter \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) { dint * lid = (dint *)data; glwin * view = (preferences) ? NULL : get_project_by_id(lid -> a) -> modelgl; opengl_edition * ogl_edit = (preferences) ? pref_ogl_edit : (view) ? view -> opengl_win : NULL; if (ogl_edit) { int li = combo_get_active (ogl_edit-> lights); Light * this_light = (preferences) ? tmp_lightning.spot[li] : view -> anim -> last -> img -> l_ghtning.spot[li]; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); switch (lid -> b) { case 0: this_light -> attenuation.x = v; break; case 1: this_light -> attenuation.y = v; break; case 2: this_light -> attenuation.z = v; break; case 3: this_light -> spot_data.x = v; break; case 4: this_light -> spot_data.y = v; break; case 5: this_light -> spot_data.z = v; break; } update_entry_double (res, v); if (this_light -> show) view -> create_shaders[LIGHT] = TRUE; } if (! preferences) update (view); } /*! \fn void set_data_pos (vec3_t * vect, int pos, double v) \brief modify a vector component \param vect vector to adjust \param pos position to adjust \param v new value */ void set_data_pos (vec3_t * vect, int pos, double v) { switch (pos) { case 0: vect -> x = v; break; case 1: vect -> y = v; break; case 2: vect -> z = v; break; } } /*! \fn G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) \brief set object position \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) { tint * id = (tint *)data; glwin * view; opengl_edition * edit_ogl; Material * the_mat; Lightning * the_lightning; Fog * the_fog; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (! preferences) { view = get_project_by_id(id -> a) -> modelgl; the_mat = & view -> anim -> last -> img -> m_terial; the_lightning = & view -> anim -> last -> img -> l_ghtning; the_fog = & view -> anim -> last -> img -> f_g; edit_ogl = view -> opengl_win; } else { the_mat = & tmp_material; the_lightning = & tmp_lightning; the_fog = & tmp_fog; edit_ogl = pref_ogl_edit; } if (id -> b == 0) { set_data_pos (& the_mat -> albedo, id -> c, v); } else if (id -> b == 4) { set_data_pos (& the_fog -> color, id -> c, v); } else if (id -> b > 0 && edit_ogl) { int li = combo_get_active (edit_ogl -> lights); switch (id -> b) { case 1: set_data_pos (& the_lightning -> spot[li] -> position, id -> c, v); break; case 2: set_data_pos (& the_lightning -> spot[li] -> direction, id -> c, v); break; case 3: set_data_pos (& the_lightning -> spot[li] -> intensity, id -> c, v); break; } if (the_lightning -> spot[li] -> show && ! preferences) view -> create_shaders[LIGHT] = TRUE; } if (edit_ogl) update_entry_double (res, v); if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) \brief set light type callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) { opengl_edition * ogl_win = (opengl_edition *)data; int li = combo_get_active (ogl_win -> lights); int ti = combo_get_active ((GtkWidget *)box); show_active_light_data (ogl_win, li, ti); } /*! \fn G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) \brief set light fix callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) { opengl_edition * ogl_win = (opengl_edition *)data; glwin * view; Lightning * ogl_ligthning; if (! preferences) { view = get_project_by_id(ogl_win -> proj) -> modelgl; ogl_ligthning = & view -> anim -> last -> img -> l_ghtning; } else { ogl_ligthning = & tmp_lightning; } int li = combo_get_active (ogl_win -> lights); ogl_ligthning -> spot[li] -> fix = combo_get_active ((GtkWidget *)box); if (! preferences) { view -> create_shaders[LIGHT] = TRUE; update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) \brief show / hide this light callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) \brief show / hide this light callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) #endif { opengl_edition * ogl_win = (opengl_edition *)data; glwin * view = get_project_by_id(ogl_win -> proj) -> modelgl; int li = combo_get_active (ogl_win -> lights); view -> anim -> last -> img -> l_ghtning.spot[li] -> show = button_get_status ((GtkWidget *)but); view -> create_shaders[LIGHT] = TRUE; update (view); } /*! \fn GtkWidget * create_setting_pos (gchar * lab, int size, float xalign, int pid, int lid, float * values, opengl_edition * ogl_win) \brief create OpenGL setting entries table \param lab label to display \param size size of the label \param xalign x alignement \param pid parameter id (0 = material, 1 = light direction, 2 = light position, 3 = light intensity, 4 = fog) \param lid parameter label id \param values target parameter values \param ogl_win the target OpenGL edition window */ GtkWidget * create_setting_pos (gchar * lab, int size, float xalign, int pid, int lid, float * values, opengl_edition * ogl_win) { int i; GtkWidget * setting_pos = create_vbox (BSEP); adv_box (setting_pos, lab, 5, size, xalign); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, setting_pos, hbox, FALSE, FALSE, 0); GtkWidget * sbox = create_hbox (0); gtk_widget_set_size_request (sbox, 500, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sbox, FALSE, FALSE, 70); GtkWidget * label; for (i=0; i<3; i++) { ogl_win -> pos_pointer[pid][i].a = ogl_win -> proj; ogl_win -> pos_pointer[pid][i].b = pid; ogl_win -> pos_pointer[pid][i].c = i; label = markup_label ((pid > 0 && pid < 3) ? lpos[i] : cpos[i], 20, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sbox, label, FALSE, FALSE, 5); ogl_win -> entogl[pid][i] = create_entry (G_CALLBACK(set_object_pos), 80, 10, FALSE, & ogl_win -> pos_pointer[pid][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sbox, ogl_win -> entogl[pid][i], FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(ogl_win -> entogl[pid][i]), values[i]); } if (pid == 1 && ! preferences) { ogl_win -> light_show = check_button (_("Show light"), -1, -1, FALSE, G_CALLBACK(show_this_light), ogl_win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sbox, ogl_win -> light_show, FALSE, FALSE, 10); } return setting_pos; } /*! \fn GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * the_lightning) \brief OpenGL light(s) parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window \param ogl_lightning the target lightning data structure */ GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * ogl_lightning) { int i, j, k; GtkWidget * vbox; GtkWidget * hbox, * lhbox; GtkWidget * layout = create_layout (-1, 600); vbox = add_vbox_to_layout (layout, 480, -1); hbox = bdv_box (vbox, _("Number of light sources\n(add or remove lights - up to 10 sources)"), 250, 0.0); gtk_widget_set_size_request (hbox, -1, 65); GtkWidget * nlights = spin_button (G_CALLBACK(set_nlights_spin), ogl_lightning -> lights, 1.0, 10.0, 1.0, 0, 100, view); gtk_widget_set_size_request (nlights, 25, -1); GtkWidget * fix = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fix, FALSE, FALSE, 20); gtk_fixed_put (GTK_FIXED (fix), nlights, 0, 20); hbox = bdv_box (vbox, _("Configure light source *"), 250, 0.0); ogl_edit -> lights_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> lights_box, FALSE, FALSE, 10); create_lights_combo (ogl_lightning -> lights, ogl_edit); bdv_box (vbox, _("Light configuration"), 250, 0.0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); ogl_edit -> light_type = create_combo (); combo_text_append (ogl_edit -> light_type, _("Directional")); combo_text_append (ogl_edit -> light_type, _("Point")); combo_text_append (ogl_edit -> light_type, _("Spot")); g_signal_connect (G_OBJECT (ogl_edit -> light_type), "changed", G_CALLBACK(set_light_type), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_type, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("Fixed by respect to: ")), FALSE, FALSE, 10); ogl_edit -> light_fix = create_combo(); combo_text_append (ogl_edit -> light_fix, _("The viewer")); combo_text_append (ogl_edit -> light_fix, _("The model")); g_signal_connect (G_OBJECT (ogl_edit -> light_fix), "changed", G_CALLBACK(set_light_fix), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_fix, FALSE, FALSE, 10); float values[3] = {0.0, 0.0, 0.0}; // Position gchar * str = (preferences) ? g_strdup_printf ("%s: **", _(ogl_settings[1][0])) : g_strdup_printf ("%s:", _(ogl_settings[1][0])); ogl_edit -> light_b_coord[0] = create_setting_pos (str, 130, 0.0, 1, 0, values, ogl_edit); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> light_b_coord[0], FALSE, FALSE, 0); // Direction str = g_strdup_printf ("%s:", _(ogl_settings[1][1])); ogl_edit -> light_b_coord[1] = create_setting_pos (str, 130, 0.0, 2, 1, values, ogl_edit); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> light_b_coord[1], FALSE, FALSE, 0); // Intensity str = (preferences) ? g_strdup_printf ("%s: **", _(ogl_settings[1][2])) : g_strdup_printf ("%s:", _(ogl_settings[1][2])); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_setting_pos (str, 130, 0.0, 3, 2, values, ogl_edit), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); ogl_edit -> advanced_light_box = create_vbox (BSEP); add_box_child_start ( GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> advanced_light_box, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> advanced_light_box, markup_label(_("Advanced parameters"), -1, -1, 0.1, 0.5), FALSE, FALSE, 10); GtkWidget * lbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> advanced_light_box, lbox, FALSE, FALSE, 0); GtkWidget * lvbox = create_vbox (BSEP); add_box_child_start ( GTK_ORIENTATION_HORIZONTAL, lbox, lvbox, FALSE, FALSE, 20); k = 0; for (i=0; i<2; i++) { ogl_edit -> light_b_entry[i] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lvbox, ogl_edit -> light_b_entry[i], FALSE, FALSE, 0); for (j=0; j<3; j++) { ogl_edit -> light_entry[k] = create_entry (G_CALLBACK(update_light_param), 100, 15, FALSE, & ogl_edit -> pointer[k]); str = g_strdup_printf ("%s:", _(ogl_settings[1][k+3])); lhbox = adv_box (ogl_edit -> light_b_entry[i], str, 0, 170, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lhbox, ogl_edit -> light_entry[k], FALSE, FALSE, 10); if (i == 1) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lhbox, gtk_label_new("°"), FALSE, FALSE, 0); k ++; } } show_the_widgets (layout); combo_set_active (ogl_edit -> lights, 0); update_light_data (0, ogl_edit); append_comments (vbox, "*", _("Note that light N°1 must be a directional light")); if (preferences) { append_comments (vbox, "**", _("Position and attenuation will be corrected based on model depth")); } return layout; } // ***************** MATERIAL ******************* // #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) \brief use or not OpenGL material template callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) \brief use or not OpenGL material template callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) #endif { int i, j, k; Material * the_mat; opengl_edition * ogl_edit; glwin * view; if (! preferences) { view = (glwin *)data; ogl_edit = view -> opengl_win; the_mat = & view -> anim -> last -> img -> m_terial; i = combo_get_active (view -> opengl_win -> templates); } else { ogl_edit = pref_ogl_edit; the_mat = & tmp_material; i = combo_get_active (pref_ogl_edit -> templates); } j = button_get_status ((GtkWidget *)but); if (j) { if (i == -1) i = 3; the_mat -> albedo = vec3(0.5, 0.5, 0.5); for (k=0; k<5; k++) { the_mat -> param[k+1] = template_parameters[i][k]; if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> m_entry[k]), the_mat -> param[k+1]); gtk_range_set_value (GTK_RANGE(ogl_edit -> m_scale[k]), the_mat -> param[k+1]); } } combo_set_active (ogl_edit -> templates, i); if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][0]), the_mat -> albedo.x); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][1]), the_mat -> albedo.y); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][2]), the_mat -> albedo.z); } k = i+1; } else { k = 0; } the_mat -> predefine = k; widget_set_sensitive (ogl_edit -> templates, the_mat -> predefine); widget_set_sensitive (ogl_edit -> param_mat, ! the_mat -> predefine); if (! preferences) { update (view); } } /*! \fn G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) \brief change the OpenGL material template \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) { int i, j; Material * the_mat; glwin * view; opengl_edition * ogl_edit; if (preferences) { the_mat = & tmp_material; ogl_edit = pref_ogl_edit; } else { view = (glwin *)data; the_mat = & view -> anim -> last -> img -> m_terial; ogl_edit = view -> opengl_win; } i = combo_get_active ((GtkWidget *)box); the_mat -> predefine = i + 1; for (j=0; j<5; j++) { the_mat -> param[j+1] = template_parameters[i][j]; #ifdef DEBUG g_debug ("SET_TEMPLATES:: j= %d, val= %f", j, template_parameters[i][j]); #endif if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> m_entry[j]), the_mat -> param[j+1]); gtk_range_set_value (GTK_RANGE(ogl_edit -> m_scale[j]), the_mat -> param[j+1]); } } if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][0]), the_mat -> albedo.x); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][1]), the_mat -> albedo.y); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][2]), the_mat -> albedo.z); } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void set_r_model (GtkComboBox * box, gpointer data) \brief change OpenGL rendering model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_r_model (GtkComboBox * box, gpointer data) { if (preferences) { tmp_opengl[4] = combo_get_active ((GtkWidget *)box); widget_set_sensitive (pref_ogl_edit -> render_fix, ! tmp_opengl[4]); } else { glwin * view = (glwin *)data; view -> anim -> last -> img -> ray_tracing = combo_get_active ((GtkWidget *)box); view -> anim -> last -> img -> render = 0; widget_set_sensitive (view -> opengl_win -> render_fix, ! view -> anim -> last -> img -> ray_tracing); init_default_shaders (view); update (view); } } /*! \fn G_MODULE_EXPORT void set_f_model (GtkComboBox * box, gpointer data) \brief change OpenGL filling model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_f_model (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; view -> anim -> last -> img -> render = combo_get_active ((GtkWidget *)box); init_default_shaders (view); update (view); } /*! \fn G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) \brief change OpenGL lightning model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) { if (preferences) { tmp_material.param[0] = combo_get_active ((GtkWidget *)box); } else { glwin * view = (glwin *)data; view -> anim -> last -> img -> m_terial.param[0] = combo_get_active ((GtkWidget *)box); update (view); } } /*! \fn void param_has_changed (gpointer data, double val) \brief update OpenGL material parameter \param data the associated data pointer \param val the new value */ void param_has_changed (gpointer data, double val) { dint * mid = (dint *)data; opengl_edition * edit_ogl; Material * the_mat; glwin * view; if (preferences) { edit_ogl = pref_ogl_edit; the_mat = & tmp_material; } else { view = get_project_by_id(mid -> a) -> modelgl; edit_ogl = view -> opengl_win; the_mat = & view -> anim -> last -> img -> m_terial; } if (mat_min_max[mid -> b][0] >= 0.0 && val <= mat_min_max[mid -> b][1]) the_mat -> param[mid -> b + 1] = val; if (edit_ogl) { update_entry_double (GTK_ENTRY(edit_ogl -> m_entry[mid -> b]), the_mat -> param[mid -> b + 1]); gtk_range_set_value (GTK_RANGE(edit_ogl -> m_scale[mid -> b]), the_mat -> param[mid -> b + 1]); } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) \brief update OpenGL material parameter - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); param_has_changed (data, v); } /*! \fn G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL material parameter - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { param_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) \brief update OpenGL material parameter - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) { param_has_changed (data, gtk_range_get_value (range)); } /*! \fn G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL quality - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { set_quality ((int)value, data); #ifdef GTK4 if (! preferences) update_menu_bar ((glwin *)data); #endif return FALSE; } /*! \fn G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) \brief update OpenGL quality - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) { set_quality ((int)gtk_range_get_value (range), data); #ifdef GTK4 if (! preferences) update_menu_bar ((glwin *)data); #endif } /*! \fn GtkWidget * rendering_fix (glwin * view) \brief create rendering parameters \param view the target glwin, if any \param ogl_edit the target OpenGL edition window */ GtkWidget * rendering_fix (glwin * view, opengl_edition * ogl_edit) { GtkWidget * fix = gtk_fixed_new (); GtkWidget * rmodel = create_combo (); gtk_fixed_put (GTK_FIXED (fix), rmodel, 0, 10); combo_text_append (rmodel, _("3D Objects")); combo_text_append (rmodel, _("Ray Tracing")); g_signal_connect (G_OBJECT (rmodel), "changed", G_CALLBACK(set_r_model), view); gtk_widget_set_size_request (rmodel, 110, -1); combo_set_active (rmodel, (view) ? view -> anim -> last -> img -> ray_tracing : tmp_opengl[4]); ogl_edit -> render_fix = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED (fix), ogl_edit -> render_fix, 130, 0); GtkWidget * quality_scale = create_hscale (3, 500, 1, (view) ? view -> anim -> last -> img -> quality : tmp_opengl[3], GTK_POS_TOP, 1, 100, G_CALLBACK(scale_quality), G_CALLBACK(scroll_scale_quality), view); gtk_fixed_put (GTK_FIXED (ogl_edit -> render_fix), quality_scale, 20, 0); if (! preferences) { GtkWidget * fmodel = create_combo (); gtk_fixed_put (GTK_FIXED (ogl_edit -> render_fix), fmodel, 120, 10); combo_text_append (fmodel, _("Filled")); combo_text_append (fmodel, _("Lines")); combo_text_append (fmodel, _("Points")); g_signal_connect (G_OBJECT (fmodel), "changed", G_CALLBACK(set_f_model), view); gtk_widget_set_size_request (fmodel, 100, -1); combo_set_active (fmodel, view -> anim -> last -> img -> render); } widget_set_sensitive (ogl_edit -> render_fix, (view) ? ! view -> anim -> last -> img -> ray_tracing : ! tmp_opengl[4]); return fix; } /*! \fn GtkWidget * lightning_fix (glwin * view, Material this_material) \brief create lightning model combo box \param view the target glwin, if any \param this_material the target material, if any */ GtkWidget * lightning_fix (glwin * view, Material * this_material) { GtkWidget * fix = gtk_fixed_new (); GtkWidget * lmodel = create_combo (); gtk_fixed_put (GTK_FIXED (fix), lmodel, 0, 10); char * l_model[6] = {i18n("None"), "Phong", "Blinn", "Cook-Torrance-Blinn", "Cook-Torrance-Beckmann", "Cook-Torrance-GCX"}; int i; for (i=0; i<6; i++) { combo_text_append (lmodel, l_model[i]); } g_signal_connect (G_OBJECT (lmodel), "changed", G_CALLBACK(set_l_model), view); gtk_widget_set_size_request (lmodel, 200, -1); combo_set_active (lmodel, this_material -> param[0]); return fix; } /*! \fn GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat) \brief OpenGL material parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window \param the_mat the target material data structure */ GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat) { GtkWidget * layout = create_layout (-1, 300); GtkWidget * vbox = add_vbox_to_layout (layout, 650, -1); int i; GtkWidget * box, * hbox; gchar * str = g_strdup_printf ("%s ", _("Quality")); box = adv_box (vbox, str, 5, 150, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, rendering_fix (view, ogl_edit), FALSE, FALSE, 0); str = g_strdup_printf ("%s ", _("Lightning model")); box = adv_box (vbox, str, 5, 150, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, lightning_fix (view, the_mat), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Use template"), 100, 40, the_mat -> predefine, G_CALLBACK(set_use_template_toggle), view), FALSE, FALSE, 0); hbox = create_hbox (BSEP); str = g_strdup_printf ("%s ", _("Templates")); add_box_child_start (GTK_ORIENTATION_VERTICAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 50); g_free (str); gchar * material_template[TEMPLATES] = {i18n("Opaque"), i18n("Brushed Metal"), i18n("Shiny Metal"), i18n("Plastic"), i18n("Transparent"), i18n("Translucent"), i18n("Diffuse")}; ogl_edit -> templates = create_combo (); for (i=0; i templates, _(material_template[i])); } combo_set_active (ogl_edit -> templates, the_mat -> predefine-1); g_signal_connect (G_OBJECT (ogl_edit -> templates), "changed", G_CALLBACK(set_template), view); gtk_widget_set_size_request (ogl_edit -> templates, 100, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> templates, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); ogl_edit -> param_mat = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> param_mat, FALSE, FALSE, 50); ogl_edit -> param_mat = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> param_mat, FALSE, FALSE, 0); bdv_box (ogl_edit -> param_mat, _("Material properties"), 250, -1); GtkWidget * m_fixed; for (i=0; i<5; i++) { str = g_strdup_printf ("%s:", _(ogl_settings[0][i+1])); box = adv_box (ogl_edit -> param_mat, str, 0, 130, 0.0); g_free (str); ogl_edit -> m_scale[i] = create_hscale (mat_min_max[i][0], mat_min_max[i][1], 0.001, the_mat -> param[i+1], GTK_POS_TOP, 3, 200, G_CALLBACK(scale_param), G_CALLBACK(scroll_scale_param), & ogl_edit -> pointer[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> m_scale[i], FALSE, FALSE, 10); ogl_edit -> m_entry[i] = create_entry (G_CALLBACK(update_mat_param), 100, 15, FALSE, & ogl_edit -> pointer[i]); update_entry_double(GTK_ENTRY(ogl_edit -> m_entry[i]), the_mat -> param[i+1]); m_fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(m_fixed), ogl_edit -> m_entry[i], 0, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, m_fixed, FALSE, FALSE, 15); } float values[] = {the_mat -> albedo.x, the_mat -> albedo.y, the_mat -> albedo.z}; str = g_strdup_printf ("%s:", _(ogl_settings[0][0])); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_mat, create_setting_pos (str, 130, -1, 0, 0, values, ogl_edit), FALSE, FALSE, 10); g_free (str); show_the_widgets (layout); widget_set_sensitive (ogl_edit -> templates, the_mat -> predefine); widget_set_sensitive (ogl_edit -> param_mat, ! the_mat -> predefine); return layout; } // ***************** FOG ******************* // GtkWidget * fogtype; /*! \fn void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) \brief update OpenGL fog parameter \param data the associated data pointer \param u the new value \param range the GtkRange to udapte if needed */ void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) { dint * fid = (dint *)data; Fog * this_fog; opengl_edition * ogl_edit; glwin * view; if (! preferences) { view = get_project_by_id (fid -> a) -> modelgl; this_fog = & view -> anim -> last -> img -> f_g; ogl_edit = view -> opengl_win; } else { this_fog = & tmp_fog; ogl_edit = pref_ogl_edit; } GLfloat v, w; if (fid -> b > 0) { v = this_fog -> depth[0]; w = this_fog -> depth[1]; if (fid -> b == 1 && u < w) { this_fog -> depth[0] = u; } else if (fid -> b == 2 && u > v) { this_fog -> depth[1] = u; } else if (ogl_edit) { if (fid -> b == 1) { gtk_range_set_value (range, (gdouble) (w-0.1)); } else { gtk_range_set_value (range, (gdouble) (v+0.1)); } } } else { this_fog -> density = u; } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL fog parameter - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { fog_param_changed (data, (GLfloat) value, range); return FALSE; } /*! \fn G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) \brief update OpenGL fog parameter - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) { fog_param_changed (data, (GLfloat) gtk_range_get_value (range), range); } /*! \fn G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) \brief set OpenGL fog type \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) { opengl_edition * ogl_edit = (opengl_edition *)data; Fog * this_fog; glwin * view; if (! preferences) { view = get_project_by_id (ogl_edit -> proj) -> modelgl; this_fog = & view -> anim -> last -> img -> f_g; } else { this_fog = & tmp_fog; } this_fog -> based = combo_get_active (widg); if (! preferences) update (view); } /*! \fn void setup_fog_dialogs (opengl_edition * ogl_edit, int fid) \brief update OpenGL fog tab based of fog type \param ogl_edit the target opengl_edition \param fid the fog mode */ void setup_fog_dialogs (opengl_edition * ogl_edit, int fid) { Fog * this_fog; glwin * view; if (! preferences) { view = get_project_by_id (ogl_edit -> proj) -> modelgl; this_fog = & view -> anim -> last -> img -> f_g; } else { this_fog = & tmp_fog; } this_fog -> mode = fid; widget_set_sensitive (fogtype, (this_fog -> mode == 1) ? TRUE : FALSE); if (this_fog -> mode) combo_set_active (fogtype, 0); if (this_fog -> mode) { show_the_widgets (ogl_edit -> param_fog); if (this_fog -> mode == 1) { show_the_widgets (ogl_edit -> depth_box); hide_the_widgets (ogl_edit -> dens_box); } else { hide_the_widgets (ogl_edit -> depth_box); show_the_widgets (ogl_edit -> dens_box); } } else { hide_the_widgets (ogl_edit -> param_fog); } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) \brief set fog mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) { setup_fog_dialogs ((opengl_edition *)data, combo_get_active (widg)); } /*! \fn GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog) \brief OpenGL fog parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window \param the_fog the target fog data structure */ GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog) { GtkWidget * layout = create_layout (480, -1); GtkWidget * vbox = add_vbox_to_layout (layout, 480, -1); GtkWidget * box = adv_box (vbox, _("Fog mode "), 10, 150, 0.0); GtkWidget * fogmod = create_combo (); combo_text_append (fogmod, _("None")); combo_text_append (fogmod, _("Linear")); combo_text_append (fogmod, _("Exponential")); combo_text_append (fogmod, _("Exponential Squared")); gtk_widget_set_size_request (fogmod, 200, -1); combo_set_active (fogmod, the_fog -> mode); g_signal_connect (G_OBJECT (fogmod), "changed", G_CALLBACK(set_fog_mode), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fogmod, FALSE, FALSE, 0); ogl_edit -> param_fog = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> param_fog, FALSE, FALSE, 0); box = adv_box (ogl_edit -> param_fog, _("Fog type "), 5, 150, 0.0); fogtype = create_combo (); combo_text_append (fogtype, _("Plane Based")); combo_text_append (fogtype, _("Range Based")); gtk_widget_set_size_request (fogtype, 200, -1); combo_set_active (fogtype, the_fog -> mode); g_signal_connect (G_OBJECT (fogtype), "changed", G_CALLBACK(set_fog_type), ogl_edit); widget_set_sensitive (fogtype, (the_fog -> mode == 1) ? TRUE : FALSE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fogtype, FALSE, FALSE, 0); ogl_edit -> dens_box = adv_box (ogl_edit -> param_fog, _("Fog density"), 10, 150.0, 0.0); ogl_edit -> fog_range[0] = create_hscale (0.0, 1.0, 0.01, the_fog -> density, GTK_POS_TOP, 3, 250, G_CALLBACK(set_fog_param), G_CALLBACK(scroll_set_fog_param), & ogl_edit -> pointer[0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ogl_edit -> dens_box, ogl_edit -> fog_range[0], FALSE, FALSE, 0); gchar * depthfog[2] = {_("\t depth* start: "), _("\t depth* end: ")}; ogl_edit -> depth_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_fog, ogl_edit -> depth_box, FALSE, FALSE, 0); box = adv_box (ogl_edit -> depth_box, _("Fog depth"), 10, 150.0, 0.0); int i; for (i=0; i<2; i++) { box = adv_box (ogl_edit -> depth_box, depthfog[i], 5, 170, 0.0); ogl_edit -> fog_range[i+1] = create_hscale (0.0, 100.0, 0.1, the_fog -> depth[i], GTK_POS_TOP, 2, 250, G_CALLBACK(set_fog_param), G_CALLBACK(scroll_set_fog_param), & ogl_edit -> pointer[i+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> fog_range[i+1], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> depth_box, markup_label(_("* % of the OpenGL model depth."), -1, -1, 0.5, 0.5) , FALSE, FALSE, 5); float values[] = {the_fog -> color.x, the_fog -> color.y, the_fog -> color.z}; add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_fog, create_setting_pos (_(ogl_settings[2][0]), 130, 0.0, 4, 0, values, ogl_edit), FALSE, FALSE, 5); show_the_widgets (layout); return layout; } /*! \fn void close_advanced_opengl (gpointer data) \brief close OpenGL rendering window free data \param data the associated data pointer */ void close_advanced_opengl (gpointer data) { glwin * view = (glwin *)data; view -> opengl_win -> win = destroy_this_widget (view -> opengl_win -> win); g_free (view -> opengl_win); view -> opengl_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) \brief close OpenGL rendering advanced window callback GTK4 \param window the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) \brief close OpenGL rendering advanced window callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_advanced_opengl (data); return FALSE; } /*! \fn G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) \brief create OpenGL rendering advanced window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; if (view -> opengl_win == NULL) { view -> opengl_win = g_malloc0(sizeof*view -> opengl_win); view -> opengl_win -> proj = view -> proj; int i; for (i=0; i<6; i++) { view -> opengl_win -> pointer[i].a = view -> proj; view -> opengl_win -> pointer[i].b = i; } gchar * str = g_strdup_printf (_("OpenGL material aspect and light settings - %s"), get_project_by_id(view -> proj) -> name); view -> opengl_win -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); #ifdef DEBUG gtk_window_set_resizable (GTK_WINDOW (view -> opengl_win -> win), TRUE); #endif GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, view -> opengl_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); #ifdef GTK4 gtk_widget_set_size_request (notebook, 580, 670); #else gtk_widget_set_size_request (notebook, 580, 670); #endif show_the_widgets (notebook); #ifdef GTK4 gtk_widget_set_vexpand (notebook, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), materials_tab (view, view -> opengl_win, & view -> anim -> last -> img -> m_terial), markup_label(_("Material aspect"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), lights_tab (view, view -> opengl_win, & view -> anim -> last -> img -> l_ghtning), markup_label(_("Configure light sources"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), fog_tab (view, view -> opengl_win, & view -> anim -> last -> img -> f_g), markup_label(_("Configure fog"), -1, -1, 0.0, 0.5)); add_global_option (vbox, & view -> colorp[0][0]); add_gtk_close_event (view -> opengl_win -> win, G_CALLBACK(close_advanced), view); } show_the_widgets (view -> opengl_win -> win); update_light_data (0, view -> opengl_win); setup_fog_dialogs (view -> opengl_win, view -> anim -> last -> img -> f_g.mode); } atomes_1.3.1/src/opengl/win/w_record.c0000664000175000017500000001325315212624223017331 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_record.c * @short Functions to create the recording window * @author Sébastien Le Roux */ /* * This file: 'w_record.c' * * Contains: * - The functions to create the recording window * * List of functions: void prepare_edition_windows (glwin * view, int status); G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data); G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); */ #include "global.h" #include "glview.h" extern void window_encode (glwin * view, gboolean video); /*! \fn void prepare_edition_windows (glwin * view, int status) \brief update the sensitivity of the edition window(s) if any are opened \param view the target glwin \param status sensitivity */ void prepare_edition_windows (glwin * view, int status) { GtkWidget * widg; int i; if (view -> atom_win != NULL) { if (view -> atom_win -> notebook != NULL) { if (GTK_IS_WIDGET(view -> atom_win -> notebook)) { for (i=0; i<5; i++) { widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> atom_win -> notebook), i); widget_set_sensitive (widg, status); } } } } if (view -> cell_win != NULL) { if (view -> cell_win -> notebook != NULL) { if (GTK_IS_WIDGET(view -> cell_win -> notebook)) { widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 0); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 1); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 3); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 4); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 5); widget_set_sensitive (widg, status); } } } } /*! \fn G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) \brief start recording \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (! view -> record) { button_set_image (GTK_BUTTON(view -> rec -> rec), NULL, IMG_STOCK, RECORD); show_the_widgets (view -> rec -> rec); widget_set_sensitive (view -> rec -> stop, 1); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (view -> ogl_mode[1], 0); #endif //gtk_widget_set_size_request (view -> plot, view -> pixels[0], view -> pixels[1]); //gtk_window_set_resizable (GTK_WINDOW (view -> win), FALSE); prepare_edition_windows (view, 0); view -> record = TRUE; } } /*! \fn G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) \brief stop recording \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> record = FALSE; button_set_image (GTK_BUTTON(view -> rec -> rec), NULL, IMG_STOCK, YES); show_the_widgets (view -> rec -> rec); window_encode (view, TRUE); widget_set_sensitive (view -> rec -> stop, 0); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (view -> ogl_mode[1], 1); #endif gtk_window_set_resizable (GTK_WINDOW (view -> win), TRUE); prepare_edition_windows (view, 1); } /*! \fn G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) \brief create video recorder window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> rec == NULL) { view -> rec = g_malloc0(sizeof*view -> rec); gchar * str = g_strdup_printf (_("%s - record"), get_project_by_id(view -> proj) -> name); view -> rec -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * hbox = create_hbox (0); add_container_child (CONTAINER_WIN, view -> rec -> win, hbox); // Record view -> rec -> rec = create_button (_("Record"), IMG_STOCK, YES, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(rec_start), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> rec -> rec, TRUE, TRUE, 0); // Stop view -> rec -> stop = create_button (_("Stop"), IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(rec_stop), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> rec -> stop, TRUE, TRUE, 0); widget_set_sensitive (view -> rec -> stop, view -> record); add_gtk_close_event (view -> rec -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> rec -> win); } else { show_the_widgets (view -> rec -> win); } } atomes_1.3.1/src/opengl/win/m_render.c0000664000175000017500000000325015212624223017314 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_render.c * @short Functions to create the 'OpenGL -> Render' submenu * @author Sébastien Le Roux */ /* * This file: 'm_render.c' * * Contains: * - The functions to create the 'OpenGL -> Render' submenu * * List of functions: void set_render (gpointer data); */ #include "global.h" #include "glview.h" #include "glwindow.h" /*! \fn void set_render (gpointer data) \brief set OpenGL rendering mode callback \param data the associated data pointer */ void set_render (gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> anim -> last -> img -> render; int j = the_data -> b; if (i != j) { this_proj -> modelgl -> anim -> last -> img -> render = NONE; this_proj -> modelgl -> anim -> last -> img -> render = j; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } } atomes_1.3.1/src/opengl/win/initring.c0000664000175000017500000000624015212624223017346 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initring.c * @short Functions to retrieve rings data from Fortran90 * @author Sébastien Le Roux */ /* * This file: 'initring.c' * * Contains: * - The functions to retrieve rings data from Fortran90 * * List of functions: void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]); void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]); void allocate_all_rings_ (int * id, int * st, int * ta, int * nring); */ #include "global.h" #include "glwindow.h" /*! \fn void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[*ta+1]) \brief get single ring data for the glwin from Fortran90 \param id type of ring \param st the MD step \param ta size of the ring \param ri ring size id \param nring ring's atom list */ void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]) { int i; active_glwin -> show_rpoly[* id][* st][* ta][* ri] = FALSE; for (i=0; i< * ta+1; i++) { active_glwin -> all_rings[* id][* st][* ta][* ri][i] = nring[i] - 1; } } /*! \fn void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[*num]) \brief get rings data for an atom from Fortran90 \param st the MD step \param at atom id \param id type of ring \param ta size of the ring \param num number of ring(s) of that size \param ring the list(s) of atoms of the(these) ring(s) */ void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]) { if (ring != NULL) { int i; active_project -> atoms[* st][* at].rings[* id][* ta] = allocint (* num + 1); active_project -> atoms[* st][* at].rings[* id][* ta][0] = * num; for (i=0; i < * num; i++) { active_project -> atoms[* st][* at].rings[* id][* ta][i+1] = ring[i] - 1; } } } /*! \fn void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) \brief allocate data to store ring statistics results for the glwin \param id the type of ring \param st the MD step \param ta the size of the ring \param nring the number of ring(s) of that size */ void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) { active_glwin -> all_rings[* id][* st][* ta - 1] = allocdint (* nring, * ta); active_glwin -> show_rpoly[* id][* st][* ta - 1] = allocint (* nring); active_glwin -> num_rings[* id][* st][* ta - 1] = * nring; } atomes_1.3.1/src/opengl/arcball.c0000664000175000017500000000443015212624223016325 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file arcball.c * @short Mouse trackball rotation functions * @author Sébastien Le Roux */ /* * This file: 'arcball.c' * * Contains: * - The mouse trackball rotation functions * * List of functions: void arc_ball_rotation (glwin * view, int x, int y); */ #include "global.h" #include "glview.h" extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); vec3_t arc_ball_init; vec3_t arc_ball_new; vec4_t old_rotation_quaternion; vec3_t get_arc_ball_vector (glwin * view, int x, int y) { vec3_t vect; vect.x = 2.0*x/view -> pixels[0] - 1.0; y = view -> pixels[1] - y; vect.y = 2.0*y/view -> pixels[1] - 1.0; float norm_arc = vect.x*vect.x + vect.y*vect.y; if (norm_arc > 1.0) { vect.z = 0.0; } else { vect.z = sqrt(1.0 - norm_arc); } return v3_norm (vect); } /*! \fn void arc_ball_rotation (glwin * view, int x, int y) \brief Perform arcball rotation \param view the target glwin \param x x position \param y y position */ void arc_ball_rotation (glwin * view, int x, int y) { arc_ball_new = get_arc_ball_vector (view, x, y); vec3_t rot_axis = v3_cross (arc_ball_init, arc_ball_new); if (v3_length(rot_axis) > 0.0) { double rot_angle = - acos(v3_dot (arc_ball_init, arc_ball_new)); vec4_t quat = axis_to_quat (rot_axis, rot_angle); if (view -> mode != EDITION) { view -> anim -> last -> img -> rotation_quaternion = q4_mul (old_rotation_quaternion, quat); } else { rotate_quat (get_project_by_id(view -> proj), quat, 1, 1); } } } atomes_1.3.1/src/opengl/ogl_draw.c0000664000175000017500000004650515212624223016534 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_draw.c * @short OpenGL window drawing funcions * @author Sébastien Le Roux */ /* * This file: 'ogl_draw.c' * * Contains: * - The OpenGL window drawing funcions * * List of functions: void print_matrices (); void setup_camera (); void unrotate_camera (); void duplicate_fog (Fog * new_fog, Fog * old_fog); void duplicate_material (Material * new_mat, Material * old_mat); void duplicate_material_and_lightning (image * new_img, image * old_img); void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab); void add_image (); void at_shift (atom * at, float * shift); void at_unshift (atom * at, float * shift); void draw (glwin * view); screen_string * duplicate_screen_string (screen_string * old_s); atom * duplicate_atom (atom * at); atom * free_atom (atom * at); image * duplicate_image (image * old_img); */ #include "global.h" #include "glview.h" #include "dlp_field.h" #include "preferences.h" #include extern ColRGBA init_color (int id, int numid); extern Light ** copy_light_sources (int dima, int dimb, Light ** old_sp); extern atom_selection * duplicate_ogl_selection (atom_selection * old_sel); double x, y, z; GLUquadricObj * quadric; glwin * wingl; project * proj_gl; int proj_sp; int proj_at; coord_info * coord_gl; box_info * box_gl; cell_info * cell_gl; image * plot; int qual; int acolorm; int pcolorm; int step; extern int nbs, nbl; extern void create_atom_lists (gboolean to_pick); extern int create_bond_lists (gboolean to_pick); extern int create_selection_lists (); extern void create_poly_lists (); extern void create_ring_lists (); extern int create_box_lists (int b_step); extern int create_axis_lists (); extern int create_pick_lists (); extern int create_label_lists (); extern void create_measures_lists (); extern void create_light_lists (); extern void create_slab_lists (project * this_proj); extern void create_volumes_lists (); extern void create_background_lists (); /*! \fn void print_matrices () \brief print OpenGL matrices */ void print_matrices () { g_debug ("*** Print Matrices ***"); g_debug ("\n"); g_debug (":: MODEL_MATRIX"); m4_print (wingl -> model_matrix); g_debug ("\n"); g_debug (":: VIEW_MATRIX"); m4_print (wingl -> view_matrix); g_debug ("\n"); g_debug (":: MODEL_VIEW_MATRIX"); m4_print (wingl -> model_view_matrix); g_debug ("\n"); g_debug (":: NORMAL_MATRIX"); m4_print (wingl -> normal_matrix); g_debug ("\n"); g_debug (":: PROJECTION_MATRIX"); m4_print (wingl -> projection_matrix); g_debug ("\n"); g_debug (":: PROJECTION_MODEL_VIEW_MATRIX"); m4_print (wingl -> proj_model_view_matrix); } /*! \fn void setup_camera () \brief setup OpenGL camera */ void setup_camera () { wingl -> model_position = vec3 (0.0, 0.0, -plot -> p_depth); wingl -> model_matrix = m4_translation (wingl -> model_position); wingl -> proj_model_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_matrix); wingl -> view_matrix = m4_quat_rotation (plot -> rotation_quaternion); vec4_t quat; quat = plot -> rotation_quaternion; quat.z = - quat.z; wingl -> un_view_matrix = m4_quat_rotation (quat); wingl -> model_view_matrix = m4_mul (wingl -> model_matrix, wingl -> view_matrix); wingl -> normal_matrix = m4_transpose (m4_invert_affine(wingl -> model_matrix)); wingl -> proj_model_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_view_matrix); wingl -> proj_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> view_matrix); wingl -> view_model_matrix = m4_mul (wingl -> view_matrix, wingl -> model_matrix); // print_matrices(); } /*! \fn void unrotate_camera () \brief unrotate OpenGL camera */ void unrotate_camera () { vec4_t quat; quat = plot -> rotation_quaternion; quat.z = - quat.z; wingl -> model_view_matrix = m4_mul (wingl -> model_view_matrix, m4_quat_rotation (quat)); } /*! \fn screen_string * duplicate_screen_string (screen_string * old_s) \brief create a copy a screen_string data structure \param old_s the data structure to be copied */ screen_string * duplicate_screen_string (screen_string * old_s) { screen_string * new_s = g_malloc0(sizeof*new_s); new_s -> word = g_strdup_printf ("%s", old_s -> word); new_s -> col = old_s -> col; int i; for (i=0; i<3; i++) new_s -> shift[i] = old_s -> shift[i]; new_s -> num_instances = old_s -> num_instances; new_s -> instances = duplicate_float (old_s -> num_instances, old_s -> instances); new_s -> prev = NULL; new_s -> last = NULL; return new_s; } /*! \fn void duplicate_material (Material * new_mat, Material * old_mat) \brief duplicate material data \param new_mat the new material data \param old_mat the old material data to be copied */ void duplicate_material (Material * new_mat, Material * old_mat) { new_mat -> predefine = old_mat -> predefine; new_mat -> albedo = old_mat -> albedo; int i; for (i=0; i<6; i++) new_mat -> param[i] = old_mat -> param[i]; } /*! \fn void duplicate_fog (Fog * new_fog, Fog * old_fog); \brief duplicate fog data \param new_fog the new fog data \param old_fog the old fog data to be copied */ void duplicate_fog (Fog * new_fog, Fog * old_fog) { new_fog -> mode = old_fog -> mode; new_fog -> based = old_fog -> based; new_fog -> density = old_fog -> density; int i; for (i=0; i<2; i++) new_fog -> depth[i] = old_fog -> depth[i]; new_fog -> color = old_fog -> color; } /*! \fn void duplicate_material_and_lightning (image * new_img, image * old_img) \brief copy the material and lightning parameters of an image data structure \param new_img the new image \param old_img the old image with the data to be copied */ void duplicate_material_and_lightning (image * new_img, image * old_img) { new_img -> quality = old_img -> quality; new_img -> render = old_img -> render; duplicate_material (& new_img -> m_terial, & old_img -> m_terial); new_img -> l_ghtning.lights = old_img -> l_ghtning.lights; new_img -> l_ghtning.spot = copy_light_sources (old_img -> l_ghtning.lights, old_img -> l_ghtning.lights, old_img -> l_ghtning.spot); duplicate_fog (& new_img -> f_g, & old_img -> f_g); } /*! \fn void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab) \brief copy screen_label data structure \param new_lab the new screen_label structure \param old_lab the old screen_label structure to be copied */ void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab) { screen_string * stmp_a, * stmp_b; new_lab -> position = old_lab -> position; new_lab -> render = old_lab -> render; new_lab -> scale = old_lab -> scale; new_lab -> font = g_strdup_printf ("%s", old_lab -> font); new_lab -> color = NULL; int i; for (i=0; i<3; i++) new_lab -> shift[i] = old_lab -> shift[i]; new_lab -> n_colors = old_lab -> n_colors; if (old_lab -> color != NULL) { new_lab -> color = duplicate_color (new_lab -> n_colors, old_lab -> color); } new_lab -> list = NULL; if (old_lab -> list != NULL) { new_lab -> list = duplicate_screen_string (old_lab -> list); new_lab -> list -> last = duplicate_screen_string (old_lab -> list -> last); stmp_a = old_lab -> list -> last; stmp_b = new_lab -> list -> last; while (stmp_a -> prev != NULL) { stmp_b -> prev = duplicate_screen_string (stmp_a -> prev); stmp_b -> prev -> last = stmp_b -> last; stmp_a = stmp_a -> prev; stmp_b = stmp_b -> prev; } } } /*! \fn image * duplicate_image (image * old_img) \brief create a copy of an image data structure \param old_img the image to copy */ image * duplicate_image (image * old_img) { int i, j, k, l, m; image * new_img = g_malloc0(sizeof*new_img); // This line will copy all the stuff that is not dynamically allocated * new_img = * old_img; new_img -> back = g_malloc0(sizeof*new_img -> back); duplicate_background_data (new_img -> back, old_img -> back); new_img -> xyz = g_malloc0(sizeof*new_img -> xyz); duplicate_axis_data (new_img -> xyz, old_img -> xyz); new_img -> abc = g_malloc0(sizeof*new_img -> abc); duplicate_box_data (new_img -> abc, old_img -> abc); j = proj_gl -> nspec; for (i=0; i<2; i++) { new_img -> color_map[i] = old_img -> color_map[i]; new_img -> show_atom[i] = duplicate_bool(j, old_img -> show_atom[i]); new_img -> show_label[i] = duplicate_bool(j, old_img -> show_label[i]); } new_img -> sphererad = duplicate_double(2*j, old_img -> sphererad); new_img -> pointrad = duplicate_double(2*j, old_img -> pointrad); new_img -> atomicrad = duplicate_double(2*j, old_img -> atomicrad); new_img -> bondrad = g_malloc0(2*j*sizeof*new_img -> bondrad); new_img -> linerad = g_malloc0(2*j*sizeof*new_img -> linerad); new_img -> at_color = duplicate_color (2*j, old_img -> at_color); for (i=0; i<2*j; i++) { new_img -> bondrad[i] = duplicate_double(2*j, old_img -> bondrad[i]); new_img -> linerad[i] = duplicate_double(2*j, old_img -> linerad[i]); } for (i=0; i<10; i++) { if (old_img -> show_coord[i]) { new_img -> show_coord[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_coord[i]); } if (i < 2 || (i > 3 && i < 9)) { if (old_img -> show_poly[i]) { new_img -> show_poly[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_poly[i]); } } k = (i < 2) ? proj_gl -> nspec : 1; if (old_img -> spcolor[i]) { new_img -> spcolor[i] = g_malloc0(k*sizeof*new_img -> spcolor[i]); for (j=0; j spcolor[i][j] = duplicate_color (coord_gl -> totcoord[i], old_img -> spcolor[i][j]); } } } new_img -> at_data = g_malloc0(proj_gl -> natomes*sizeof*new_img -> at_data); for (i=0; i natomes; i++) { new_img -> at_data[i].show[0] = proj_gl -> atoms[step][i].show[0]; new_img -> at_data[i].show[1] = proj_gl -> atoms[step][i].show[1]; new_img -> at_data[i].label[0] = proj_gl -> atoms[step][i].label[0]; new_img -> at_data[i].label[1] = proj_gl -> atoms[step][i].label[1]; new_img -> at_data[i].pick[0] = proj_gl -> atoms[step][i].pick[0]; new_img -> at_data[i].cloned = proj_gl -> atoms[step][i].cloned; new_img -> at_data[i].style = proj_gl -> atoms[step][i].style; } for (i=0; i<5; i++) duplicate_screen_label (& new_img -> labels[i], & old_img -> labels[i]); duplicate_material_and_lightning (new_img, old_img); // Atom selection for (i=0; i<2; i++) new_img -> selected[i] = duplicate_ogl_selection (old_img -> selected[i]); // Rings poly if any 'isolated' if (wingl -> rings) { for (i=0; i<5; i++) { if (wingl -> ring_max[i]) { m = 0; for (j=0; j< coord_gl -> totcoord[i+4]; j++) { k = coord_gl -> geolist[i+4][0][j]; for (l=0; l num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) m++; } } if (m) { new_img -> i_rings[i] = allocdint (m+1, 2); new_img -> i_rings[i][0][0] = m; m = 1; for (j=0; j totcoord[i+4]; j++) { k = coord_gl -> geolist[i+4][0][j]; for (l=0; l num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) { new_img -> i_rings[i][m][0] = j; new_img -> i_rings[i][m][1] = l; m ++; } } } } } } } // Volumes if (wingl -> volumes) { for (i=0; i<2; i++) { for (j=0; j fm_show_vol[i][j] = duplicate_bool (coord_gl -> totcoord[2+i], old_img -> fm_show_vol[i][j]); for (k=0; k totcoord[2+i]; k++) { new_img -> fm_vol_col[i][j][k] = old_img -> fm_vol_col[i][j][k]; } } } } return new_img; } /*! \fn void add_image () \brief add an image to the animation */ void add_image () { snapshot * nextsnap = g_malloc0(sizeof*nextsnap); nextsnap -> img = duplicate_image (plot); // Now the pointers if (wingl -> anim -> frames == 0) { wingl -> anim -> first -> prev = NULL; wingl -> anim -> last = nextsnap; wingl -> anim -> last -> prev = NULL; wingl -> anim -> first = nextsnap; } else { wingl -> anim -> last -> next = nextsnap; nextsnap -> prev = wingl -> anim -> last; wingl -> anim -> last = wingl -> anim -> last -> next; wingl -> anim -> last -> img -> id = wingl -> anim -> frames; } wingl -> anim -> frames ++; } extern void update_gl_pick_colors (); /*! \fn atom * duplicate_atom (atom * at) \brief copy (partially) an atom data structure \param at the atom to copy */ atom * duplicate_atom (atom * at) { atom * bt = g_malloc0(sizeof*bt); bt -> x = at -> x; bt -> y = at -> y; bt -> z = at -> z; bt -> sp = at -> sp; bt -> id = at -> id; bt -> style = at -> style; bt -> cloned = at -> cloned; int i; for (i=0; i<2; i++) { bt -> show[i] = at -> show[i]; bt -> pick[i] = at -> pick[i]; bt -> label[i] = at -> label[i]; } for (i=0; i<5; i++) { bt -> coord[i] = at -> coord[i]; } bt -> numv = at -> numv; bt -> fid = at -> fid; bt -> faid = at -> faid; if (bt -> numv) bt -> vois = duplicate_int (bt -> numv, at -> vois); return bt; } /*! \fn atom * free_atom (atom * at) \brief free an atom data structure \param at the target atom data structure to free */ atom * free_atom (atom * at) { if (at -> vois) g_free (at -> vois); g_free (at); return NULL; } /*! \fn void at_shift (atom * at, float * shift) \brief modify atomic coordinates to display image in cell replica \param at the atom \param shift the shift to apply */ void at_shift (atom * at, float * shift) { at -> x += shift[0]; at -> y += shift[1]; at -> z += shift[2]; } /*! \fn void at_unshift (atom * at, float * shift) \brief correct atomic coordinates modified to display image in cell replica \param at the atom \param shift the shift to correct */ void at_unshift (atom * at, float * shift) { at -> x -= shift[0]; at -> y -= shift[1]; at -> z -= shift[2]; } /*! \fn void draw (glwin * view) \brief main drawing subroutine for the OpenGL window \param view the target glwin */ void draw (glwin * view) { wingl = view; proj_gl = get_project_by_id(view -> proj); proj_sp = proj_gl -> nspec; proj_at = proj_gl -> natomes; coord_gl = proj_gl -> coord; cell_gl = & proj_gl -> cell; plot = wingl -> anim -> last -> img; qual = plot -> quality-1; acolorm = plot -> color_map[0]; pcolorm = plot -> color_map[1]; step = plot -> step; int box_step = (cell_gl -> npt) ? step : 0; box_gl = & cell_gl -> box[box_step]; /* #ifdef DEBUG clock_gettime (CLOCK_MONOTONIC, & start_time); GLuint GPU_time; glGenQueries (1, & GPU_time); glBeginQuery (GL_TIME_ELAPSED, GPU_time); // #endif */ // First, if needed, we prepare the display lists if (proj_at) { if (wingl -> create_shaders[ATOMS] && wingl -> n_shaders[ATOMS][step] < 0) create_atom_lists (FALSE); if (wingl -> create_shaders[BONDS] && wingl -> n_shaders[BONDS][step] < 0) wingl -> n_shaders[BONDS][step] = create_bond_lists (FALSE); if (wingl -> create_shaders[SELEC] && wingl -> n_shaders[SELEC][step] < 0) wingl -> n_shaders[SELEC][step] = create_selection_lists (); if (wingl -> create_shaders[POLYS] && wingl -> n_shaders[POLYS][step] < 0) create_poly_lists (); if (wingl -> create_shaders[RINGS] && wingl -> n_shaders[RINGS][step] < 0) create_ring_lists (); if (wingl -> create_shaders[PICKS] && ! atomes_render_image) wingl -> n_shaders[PICKS][0] = create_pick_lists (); if (wingl -> create_shaders[SLABS]) create_slab_lists (proj_gl); if (wingl -> create_shaders[VOLMS] && wingl -> n_shaders[VOLMS][step] < 0) create_volumes_lists (); if (wingl -> create_shaders[LABEL]) wingl -> n_shaders[LABEL][0] = create_label_lists (); if (wingl -> create_shaders[MEASU]) create_measures_lists (); } else { int i; for (i=0; i back -> gradient) wingl -> create_shaders[BACKG] = TRUE; } if (plot -> back -> gradient && wingl -> create_shaders[BACKG]) create_background_lists (); if (wingl -> create_shaders[MDBOX]) wingl -> n_shaders[MDBOX][box_step] = create_box_lists (box_step); if (wingl -> create_shaders[MAXIS]) wingl -> n_shaders[MAXIS][0] = create_axis_lists (); if (wingl -> create_shaders[LIGHT]) create_light_lists (); setup_camera (); // We draw normal scene or picking mode scene (only atoms or selection) if (wingl -> to_pick) { // Picking mode scene glDisable (GL_LIGHTING); glClearColor (plot -> back -> color.red, plot -> back -> color.green, plot -> back -> color.blue, 1.0); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); draw_vertices (PICKS); glEnable (GL_LIGHTING); } else { // Normal mode scene glClearColor (plot -> back -> color.red, plot -> back -> color.green, plot -> back -> color.blue, plot -> back -> color.alpha); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Gradient background draw_vertices (BACKG); // Box draw_vertices (MDBOX); // Now the atoms draw_vertices (ATOMS); // The bonds draw_vertices (BONDS); // The selected atoms/bonds draw_vertices (SELEC); int i = plot -> render; plot -> render = FILL; // Atom labels draw_vertices (LABEL); // Axis if centered if (view -> anim -> last -> img -> xyz -> t_pos == 4) draw_vertices (MAXIS); // Last the coordination polyhedra draw_vertices (POLYS); draw_vertices (RINGS); // Measures draw_vertices (MEASU); // Slab draw_vertices (SLABS); // Volumes draw_vertices (VOLMS); // Axis if not centered if (view -> anim -> last -> img -> xyz -> t_pos != 4) draw_vertices (MAXIS); // Lights draw_vertices (LIGHT); plot -> render = i; //draw_labels (); if (wingl -> record) add_image (); } /* #ifdef DEBUG glEndQuery (GL_TIME_ELAPSED); GLint done = 0; while (! done) { glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT_AVAILABLE, & done); } GLint GPU_res; glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT, & GPU_res); g_print (":: TIME TO RENDER (GPU) = %f s\n", (double)GPU_res/CLOCKS_PER_SEC); clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print (":: TIME TO RENDER (CPU) = %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); // #endif */ } atomes_1.3.1/src/opengl/selection.c0000664000175000017500000005172115212624223016717 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file selection.c * @short Functions handling the atom and bond selection process in the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'selection.c' * * Contains: * - The functions handling the atom and bond selection process in the OpenGL window * * List of functions: int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id); int find_selected_bond (project * this_proj, int id); int find_selected_atom (project * this_proj, int id); int num_bonds (int i); int num_angles (int i); int num_dihedrals (int i); void save_dihedral_selection (glwin * view, int pi); void update_dihedral_selection (glwin * view, int pi); void save_angle_selection (glwin * view, int pi); void update_angle_selection (glwin * view, int pi); void save_bond_selection (glwin * view, int pi); void update_bond_selection (glwin * view, int pi); void save_all_selections (glwin * view, int pi); void update_all_selections (glwin * view, int pi); void update_selection_list (atom_selection * at_list, atom * at, gboolean add); void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); void process_selection (project * this_proj, glwin * view, int id, int ac, int pi); void process_the_hits (glwin * view, gint event_button, double ptx, double pty); atom_in_selection * new_atom_in_selection (int id, int sp); */ #include "global.h" #include "interface.h" #include "glview.h" #include "atom_edit.h" extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void update_label_selection (glwin * view, int pi); extern int selected_aspec; extern int get_to_be_selected (glwin * view); /*! \fn int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id) \brief Find for a bond ID in the bond list using the atoms in the bond \param this_proj the target project \param i id tracker \param j the MD step \param b 0 = normal, 1 = clones \param id the id-th visible bond to find */ int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id) { int k, l, m; for (k=0; k < this_proj -> modelgl -> bonds[j][b]; k++) { l = this_proj -> modelgl -> bondid[j][b][k][0]; m = this_proj -> modelgl -> bondid[j][b][k][1]; if (this_proj -> atoms[j][l].show[b]) i ++; if (i == id) return k; if (b) { if (this_proj -> atoms[j][l].show[b]) i ++; if (i == id) return k; } if (this_proj -> atoms[j][m].show[b]) i ++; if (i == id) return k; if (b) { if (this_proj -> atoms[j][m].show[b]) i ++; if (i == id) return k; } } return -i; } /*! \fn int find_selected_bond (project * this_proj, int id) \brief find the selected bond based of the picked color id \param this_proj the target project \param id the id-th visible bond to find */ int find_selected_bond (project * this_proj, int id) { int i, j, k; i = this_proj -> modelgl -> clones_to_be_picked - 1; j = this_proj -> modelgl -> anim -> last -> img -> step; k = find_bond_in_bonds (this_proj, i, j, 0, id); if (k < 0 && this_proj -> modelgl -> anim -> last -> img -> draw_clones) { k = find_bond_in_bonds (this_proj, -k, j, 1, id); if (k < 0) { return -1; } else { return k; } } else if (k < 0) { return -1; } else { return k; } } /*! \fn int find_selected_atom (project * this_proj, int id) \brief find the selected atom based of the picked color id \param this_proj the target project \param id the id-th visible atom or clone to find */ int find_selected_atom (project * this_proj, int id) { int i, j, k, l, m; i = -1; j = this_proj -> modelgl -> anim -> last -> img -> step; for (k=0; k natomes; k++) { if (this_proj -> atoms[j][k].show[0]) i++; if (i == id) return k; } if (this_proj -> modelgl -> anim -> last -> img -> draw_clones) { for (k=0; k < this_proj -> modelgl -> bonds[j][1]; k++) { l = this_proj -> modelgl -> bondid[step][1][k][0]; m = this_proj -> modelgl -> bondid[step][1][k][1]; if (this_proj -> atoms[j][l].show[1]) i++; if (i == id) return l; if (this_proj -> atoms[j][m].show[1]) i++; if (i == id) return m; } } return -1; } /*! \fn int num_bonds (int i) \brief number of distinct pair(s) of atoms in selection \param i the number of atom(s) in selection */ int num_bonds (int i) { return i*(i-1)/2; } /*! \fn int num_angles (int i) \brief number of distinct triplet(s) of atoms in selection \param i the number of atom(s) in selection */ int num_angles (int i) { return i*(i-1)*(i-2)/2; } /*! \fn int num_dihedrals (int i) \brief number of distinct quadruplet(s) of atoms in selection \param i the number of atom(s) in selection */ int num_dihedrals (int i) { return i*(i-1)*(i-2)*(i-3)/2; } int objects[3] = {0, 0, 0}; int * object_was_selected[3] = {NULL, NULL, NULL}; int ** tmp_object_id[3] = {NULL, NULL, NULL}; /*! \fn void save_dihedral_selection (glwin * view, int pi) \brief save the dihedral selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_dihedral_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 3 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) { objects[2] = i = num_dihedrals (img -> selected[pi] -> selected); tmp_object_id[2] = allocdint (i, 4); object_was_selected[2] = allocint (i); for (j=0; j selected[pi] -> selected_dihedrals[j]; dihedrals_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_dihedrals); } else { objects[2] = 0; } } /*! \fn void update_dihedral_selection (glwin * view, int pi) \brief update the dihedral selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_dihedral_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 3 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) { i = num_dihedrals (img -> selected[pi] -> selected); img -> selected[pi] -> selected_dihedrals = allocint (i); dihedrals_loop (view, -1, pi, NULL); } } /*! \fn void save_angle_selection (glwin * view, int pi) \brief save the angle selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_angle_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { objects[1] = i = num_angles (img -> selected[pi] -> selected); tmp_object_id[1] = allocdint (i, 3); object_was_selected[1] = allocint (i); for (j=0; j selected[pi] -> selected_angles[j]; angles_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_angles); } else { objects[1] = 0; } } /*! \fn void update_angle_selection (glwin * view, int pi) \brief update the angle selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_angle_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { i = num_angles (img -> selected[pi] -> selected); img -> selected[pi] -> selected_angles = allocint (i); angles_loop (view, -1, pi, NULL); } } /*! \fn void save_bond_selection (glwin * view, int pi) \brief save the bond selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_bond_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 1 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { objects[0] = i = num_bonds (img -> selected[pi] -> selected); tmp_object_id[0] = allocdint (i, 2); object_was_selected[0] = allocint (i); for (j=0; j selected[pi] -> selected_bonds[j]; bonds_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_bonds); } else { objects[0] = 0; } } /*! \fn void update_bond_selection (glwin * view, int pi) \brief update the bond selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_bond_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 1 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { i = num_bonds (img -> selected[pi] -> selected); img -> selected[pi] -> selected_bonds = allocint (i); bonds_loop (view, -1, pi, NULL); } if (view -> measure_win != NULL) { if (view -> measure_win -> selection_tree[0] != NULL) { update_selection_tree (view, pi, 0); } } } /*! \fn void save_all_selections (glwin * view, int pi) \brief save all selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_all_selections (glwin * view, int pi) { save_bond_selection (view, pi); save_angle_selection (view, pi); save_dihedral_selection (view, pi); } /*! \fn void update_all_selections (glwin * view, int pi) \brief update the selection data: bonds, angles and dihedrals \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_all_selections (glwin * view, int pi) { update_bond_selection (view, pi); update_angle_selection (view, pi); update_dihedral_selection (view, pi); if (view -> measure_win != NULL) update_label_selection (view, pi); int i; for (i=0; i<3; i++) { if (objects[i] > 0) { if (object_was_selected[i]) { g_free (object_was_selected[i]); object_was_selected[i] = NULL; } if (tmp_object_id[i]) { g_free (tmp_object_id[i]); tmp_object_id[i] = NULL; } } objects[i] = 0; if (view -> measure_win != NULL) { if (view -> measure_win -> selection_tree[i] != NULL) { update_selection_tree (view, pi, i); } } } } /*! \fn atom_in_selection * new_atom_in_selection (int id, int sp) \brief create a selected atom \param id atom id \param sp atom species */ atom_in_selection * new_atom_in_selection (int id, int sp) { atom_in_selection * new_sel = g_malloc0(sizeof*new_sel); new_sel -> id = id; new_sel -> sp = sp; return new_sel; } /*! \fn void update_selection_list (atom_selection * at_list, atom * at, gboolean add) \brief update the selection list adding or removing an atom \param at_list target atom selection \param at atom \param add add or remove (1/0) */ void update_selection_list (atom_selection * at_list, atom * at, gboolean add) { int i; atom_in_selection * selection = at_list -> first; if (add) { selection = at_list -> last; if (at_list -> selected == 0) { at_list -> first = new_atom_in_selection (at -> id, at -> sp); at_list -> last = at_list -> first; } else { selection -> next = new_atom_in_selection (at -> id, at -> sp); selection -> next -> prev = selection; at_list -> last = selection -> next; } } else { selection = at_list -> first; for (i=0; i selected; i++) { if (selection -> id == at -> id) { if (i == 0 && at_list -> selected == 1) { at_list -> last = NULL; at_list -> first = NULL; } else if (i == 0) { at_list -> first = at_list -> first -> next; at_list -> first -> prev = NULL; } else { if (i == at_list -> selected-1) { at_list -> last = selection -> prev; at_list -> last -> next = NULL; } else { selection -> next -> prev = selection -> prev; selection -> prev -> next = selection -> next; } } break; } if (selection -> next != NULL) selection = selection -> next; } } } /*! \fn void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi) \brief process selected atom \param this_proj the target project \param view the target glwin \param id the atom id \param ac atom or clone (0/1) \param se set to 0 to ensure to remove a selected atom from the list and not to add label \param pi selection mode (0 = normal mode, 1 = edition mode) */ void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi) { int i; i = view -> anim -> last -> img -> step; if (this_proj -> atoms[i][id].pick[pi]) { if (! se) { this_proj -> atoms[i][id].pick[pi] = FALSE; update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], FALSE); view -> anim -> last -> img -> selected[pi] -> selected --; view -> prepare_motion = TRUE; } else if (this_proj -> atoms[i][id].label[ac]) { this_proj -> atoms[i][id].pick[pi] = FALSE; this_proj -> atoms[i][id].label[ac] = FALSE; view -> labelled = check_label_numbers (this_proj, 2); update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], FALSE); view -> anim -> last -> img -> selected[pi] -> selected --; view -> prepare_motion = TRUE; } else { this_proj -> atoms[i][id].label[ac] = TRUE; view -> labelled = check_label_numbers (this_proj, 2); } } else { this_proj -> atoms[i][id].pick[pi] = TRUE; update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], TRUE); view -> anim -> last -> img -> selected[pi] -> selected ++; view -> prepare_motion = TRUE; } } /*! \fn void process_selection (project * this_proj, glwin * view, int id, int ac, int pi) \brief process selection \param this_proj the target project \param view the target glwin \param id the atom id \param ac atom or clone (0/1) \param pi selection mode (0 = normal mode, 1 = edition mode) */ void process_selection (project * this_proj, glwin * view, int id, int ac, int pi) { int i, j, k; j = view -> anim -> last -> img -> step; k = this_proj -> atoms[j][id].pick[pi]; for (i=0; i steps; i++) { if (i == j) { process_selected_atom (this_proj, view, id, ac, 1, pi); } else { this_proj -> atoms[i][id].pick[pi] = ! k; } } } /*! \fn void process_the_hits (glwin * view, gint event_button, double ptx, double pty) \brief process a mouse click \param view the target glwin \param event_button the event button \param ptx x position \param pty y position */ void process_the_hits (glwin * view, gint event_button, double ptx, double pty) { int i, j, k, l, m, n, o, p, q; view -> picked = FALSE; GLubyte pixel[4]; GLint viewport[4]; int scale = gtk_widget_get_scale_factor (view -> win); glGetIntegerv (GL_VIEWPORT, viewport); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glReadPixels (scale * view -> mouseX, viewport[3] - scale * view -> mouseY, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel); int picked_id = pixel[0] + 256*pixel[1] + 256*256*pixel[2]; for (i=0; i to_be_picked; i++) { if (picked_id == view -> color_to_pick[i]) { j = i; view -> picked = TRUE; break; } } to_pop.action = 0; to_pop.x = 0.0; to_pop.y = 0.0; to_pop.pts[0] = to_pop.pts[1] = to_pop.pts[2] = to_pop.pts[3] = to_pop.pts[4] = -1; if (view -> picked) { project * this_proj = get_project_by_id(view -> proj); k = (is_atom_win_active(view) || (view -> mode == EDITION && view -> selection_mode == NSELECTION-1)) ? 1 : 0; l = view -> anim -> last -> img -> step; if (j < view -> clones_to_be_picked) { m = find_selected_atom (this_proj, j); n = (j < view -> atoms_to_be_picked) ? 0 : 1; o = m; p = -1; q = this_proj -> atoms[l][m].pick[k]; } else { m = find_selected_bond (this_proj, j); n = (j < view -> bonds_to_be_picked) ? 0 : 1; o = view -> bondid[l][n][m][0]; p = view -> bondid[l][n][m][1]; q = 0; if (this_proj -> atoms[l][o].pick[k] || this_proj -> atoms[l][p].pick[k]) q = 1; } if (m != -1) { if (event_button == 1) { if (view -> selection_mode == ATOMS || view -> selection_mode == NSELECTION-1 || is_atom_win_active(view)) { save_all_selections (view, k); if (j < view -> clones_to_be_picked) { process_selection (this_proj, view, m, n, k); } else { if (this_proj -> atoms[l][o].show[n]) process_selection (this_proj, view, o, n, k); if (this_proj -> atoms[l][p].show[n]) process_selection (this_proj, view, p, n, k); } update_all_selections (view, k); } else if (view -> selection_mode == 1) { opengl_project_changed (view -> proj); if (j < view -> clones_to_be_picked) { selected_status = ! this_proj -> atoms[l][m].pick[get_to_be_selected (view)]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(m)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(m)); #endif } else { selected_status = ! this_proj -> atoms[l][o].pick[get_to_be_selected (view)]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(o)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(p)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(o)); select_unselect_this_atom (NULL, GINT_TO_POINTER(p)); #endif } } else { opengl_project_changed (view -> proj); if (view -> selection_mode > 3) { p = view -> selection_mode-2; } else { p = view -> selection_mode; } if (j < view -> clones_to_be_picked) { n = this_proj -> atoms[l][m].coord[p]; o = this_proj -> atoms[l][m].pick[0]; } else { n = this_proj -> atoms[l][o].coord[p]; o = this_proj -> atoms[l][o].pick[0]; } if (view -> selection_mode > 3) { selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][0]); #else select_unselect_atoms (NULL, & view -> colorp[0][0]); #endif } tint pointer; pointer.a = p; pointer.b = n; pointer.c = ! o; #ifdef GTK4 select_unselect_coord (NULL, NULL, & pointer); #else select_unselect_coord (NULL, & pointer); #endif } if (view -> mode == EDITION) { init_coordinates (this_proj, 1, FALSE, TRUE); view -> baryc[1] = get_bary (this_proj, 1); } int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); // if (view -> anim -> last -> img -> m_is_pressed && gtk_accelerator_get_default_mod_mask() == GDK_CONTROL_MASK) window_measures (NULL, view); } else if (event_button == 3) { to_pop.action = 2; to_pop.x = ptx; to_pop.y = pty; to_pop.pts[0] = q; to_pop.pts[1] = k; to_pop.pts[2] = o; to_pop.pts[3] = p; to_pop.pts[4] = n; // popup_selection (view, ptx, pty, q, k, o, p, n); } } } else if (event_button == 3) { to_pop.action = 1; to_pop.x = ptx; to_pop.y = pty; // popup_main_menu (view, ptx, pty); } } atomes_1.3.1/src/opengl/draw/0000775000175000017500000000000015212624223015515 5ustar lerouxlerouxatomes_1.3.1/src/opengl/draw/d_box.c0000664000175000017500000011250615212624223016761 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_box.c * @short Functions to prepare the OpenGL rendering for the box(es) \n Functions to prepare the OpenGL rendering for the slab(s) \n Functions to prepare the OpenGL rendering for the volume(s) * @author Sébastien Le Roux */ /* * This file: 'd_box.c' * * Contains: * - The functions to prepare the OpenGL rendering for the box(es) - The functions to prepare the OpenGL rendering for the slab(s) - The functions to prepare the OpenGL rendering for the volume(s) * * List of functions: int create_box_lists (int b_step); double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha); gboolean are_identical_vec3 (vec3_t va, vec3_t vb); gboolean not_in_already (vec3_t a, vec3_t b, float * vertices); gboolean not_in_corners (vec3_t a, float * vertices); void setup_extra_box_vertices (vec3_t a, vec3_t b, int id, float * c_vert, float * s_vert); void setup_box_vertices (vec3_t ax, vec3_t bx, int id, float * c_vert, float * s_vert); void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, int, float *, float *), float * verts, float * serts, int id); void prepare_cuboid (vec3_t position, int id); void create_light_lists (); void cuboid_slab (mat4_t rot); void cylinder_slab (mat4_t rot); void spherical_slab (); void create_slab_lists (project * this_proj); void create_volumes_lists (); */ #include "global.h" #include "glview.h" extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern object_3d * draw_billboard_quad (void); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b); extern void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel); extern void create_slab_info (project * this_proj); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern ColRGBA pcol; int BOX_BUFF_SIZE; /*! \fn gboolean are_identical_vec3 (vec3_t va, vec3_t vb) \brief are these 2 vectors indentical \param va 1st vector \param vb 2nd vector */ gboolean are_identical_vec3 (vec3_t va, vec3_t vb) { if (va.x == vb.x && va.y == vb.y && va.z == vb.z) { return TRUE; } else { return FALSE; } } /*! \fn gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) \brief is this box edge vector already saved ? \param a 1st set of coordinates \param b 2nd set of coordinates \param vertices the data buffer to check */ gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) { int i, j, k; vec3_t tma, tmb; for (i=0; i abc -> extra_cell[0]+1; p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { if (p > 0 || q > 0 || r > 0) { shift.x = p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift.y = p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift.z = p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; t_a = v3_add (v3_muls (a, j), shift); t_b = v3_add (v3_muls (b, j), shift); if (not_in_already (t_a, t_b, c_vert)) { if (plot -> abc -> box == WIREFRAME) { setup_line_vertice (c_vert, t_a, pcol, 0.5); setup_line_vertice (c_vert, t_b, pcol, 0.5); } else { if (not_in_corners(t_a, s_vert)) setup_sphere_vertice (s_vert, t_a, pcol, plot -> abc -> rad, pcol.alpha*0.5); if (not_in_corners(t_b, s_vert)) setup_sphere_vertice (s_vert, t_b, pcol, plot -> abc -> rad, pcol.alpha*0.5); setup_cylinder_vertice (c_vert, t_a, t_b, pcol, plot -> abc -> rad, 0.5, 0.0, plot -> abc -> rad, 0.0); } } } } } } } } /*! \fn void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) \brief prepare the unit cell OpenGL rendering \param ax 1st point coordinates \param bx 2nd point coordinates \param c_vert OpenGL cylinder/line data buffer to fill \param s_vert OpenGL sphere data buffer to fill, or NULL */ void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) { float j; vec3_t a, b; /*vec3_t cell[3]; int i; for (i=0; i<3; i++) { cell[i] = vec3(box_gl -> vect[i][0], box_gl -> vect[i][1], box_gl -> vect[i][2]); cell[i] = v3_divs (cell[i], 2.0); } vec3_t lattice = v3_add(v3_add(cell[0], cell[1]), cell[2]);*/ for (j=-1.0; j<2.0; j=j+2.0) { /*a = v3_sub (v3_muls (ax, j), lattice); b = v3_sub (v3_muls (bx, j), lattice);*/ a = v3_muls (ax, j); b = v3_muls (bx, j); if (plot -> abc -> box == WIREFRAME) { setup_line_vertice (c_vert, a, pcol, 1.0); setup_line_vertice (c_vert, b, pcol, 1.0); } else { if (not_in_corners(a, s_vert)) setup_sphere_vertice (s_vert, a, pcol, plot -> abc -> rad, pcol.alpha*1.0); if (not_in_corners(b, s_vert)) setup_sphere_vertice (s_vert, b, pcol, plot -> abc -> rad, pcol.alpha*1.0); setup_cylinder_vertice (c_vert, a, b, pcol, plot -> abc -> rad, 1.0, 0.0, plot -> abc -> rad, 0.0); } } } /*! \fn void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) \brief prepare a box OpenGL rendering \param c_func the function to use a render \param verts OpenGL cylinder/line data buffer to fill \param serts OpenGL sphere data buffer to fill, or NULL */ void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) { int i; vec3_t pa, pb; for (i=-1; i<2; i=i+2) { pa.x = (- box_gl -> vect[0][0] - box_gl -> vect[1][0] + i * box_gl -> vect[2][0]) / 2.0; pa.y = (- box_gl -> vect[0][1] - box_gl -> vect[1][1] + i * box_gl -> vect[2][1]) / 2.0; pa.z = (- box_gl -> vect[0][2] - box_gl -> vect[1][2] + i * box_gl -> vect[2][2]) / 2.0; pb.x = (box_gl -> vect[0][0] - box_gl -> vect[1][0] + i * box_gl -> vect[2][0]) / 2.0; pb.y = (box_gl -> vect[0][1] - box_gl -> vect[1][1] + i * box_gl -> vect[2][1]) / 2.0; pb.z = (box_gl -> vect[0][2] - box_gl -> vect[1][2] + i * box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); pa.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pa.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pa.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; pb.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] - box_gl -> vect[2][0]) / 2.0; pb.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] - box_gl -> vect[2][1]) / 2.0; pb.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] - box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); pa.x = (i * box_gl -> vect[0][0] + box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pa.y = (i * box_gl -> vect[0][1] + box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pa.z = (i * box_gl -> vect[0][2] + box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; pb.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pb.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pb.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); } } /*! \fn int create_box_lists (int b_step) \brief prepare box OpenGL rendering \param b_step the step number if NPT, 0 otherwise */ int create_box_lists (int b_step) { int vertex = 8; object_3d * box_a, * box_b; cleaning_shaders (wingl, MDBOX); wingl -> create_shaders[MDBOX] = FALSE; if (plot -> abc -> box == NONE) return 0; int saved_tracing = plot -> ray_tracing; plot -> ray_tracing = FALSE; int shaders; vertex *= (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); if (plot -> abc -> box == WIREFRAME) { shaders = 1; BOX_BUFF_SIZE = LINE_BUFF_SIZE; box_b = g_malloc0(sizeof*box_b); box_b -> vert_buffer_size = LINE_BUFF_SIZE; box_b -> num_vertices = vertex*3; box_b -> vertices = allocfloat (box_b -> vert_buffer_size*box_b -> num_vertices); } else { shaders = 2; BOX_BUFF_SIZE = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; // Spheres at corners box_a = (plot -> ray_tracing) ? draw_billboard_quad () : draw_sphere (plot -> quality); box_a -> num_instances = 3*vertex*3/2; box_a -> inst_buffer_size = ATOM_BUFF_SIZE; allocate_instances (box_a); // Cylinders box_b = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); box_b -> num_instances = 3*vertex; box_b -> inst_buffer_size = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (box_b); } wingl -> ogl_glsl[MDBOX][b_step] = g_malloc0(shaders*sizeof*wingl -> ogl_glsl[MDBOX][b_step]); nbs = nbl = 0; pcol = plot -> abc -> color; prepare_box_vertices (setup_box_vertices, (plot -> abc -> box == WIREFRAME) ? box_b -> vertices: box_b -> instances, (plot -> abc -> box == WIREFRAME) ? NULL : box_a -> instances); if (plot -> abc -> extra_cell[0] > 0 || plot -> abc -> extra_cell[1] > 0 || plot -> abc -> extra_cell[2] > 0) { prepare_box_vertices (setup_extra_box_vertices, (plot -> abc -> box == WIREFRAME) ? box_b -> vertices: box_b -> instances, (plot -> abc -> box == WIREFRAME) ? NULL : box_a -> instances); } if (plot -> abc -> box == WIREFRAME) { wingl -> ogl_glsl[MDBOX][b_step][0] = init_shader_program (MDBOX, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, box_b); wingl -> ogl_glsl[MDBOX][b_step][0] -> line_width = plot -> abc -> line; } else { // Sphere at corners const GLchar * vs_sph = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_box = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[MDBOX][b_step][0] = init_shader_program (MDBOX, GLSL_SPHERES, vs_sph, NULL, fs_box, GL_TRIANGLE_STRIP, 4, 1, TRUE, box_a); // Cylinders const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; int narray_cyl = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[MDBOX][b_step][1] = init_shader_program (MDBOX, GLSL_CYLINDERS, vs_cyl, NULL, fs_box, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, box_b); } plot -> ray_tracing = saved_tracing; return shaders; } /*vec3_t center; / * * void setup_cuboid_vertices (vec3_t a, vec3_t b, int id) \brief NOT USED ! \param a \param b \param id * / void setup_cuboid_vertices (vec3_t a, vec3_t b, int id) { float j; for (j=-1.0; j<2.0; j=j+2.0) { box_axis_vertices (wingl -> d_vertices[LIGHT][id], -1, 0.0, v3_muls (v3_add(a,center), j)); box_axis_vertices (wingl -> d_vertices[LIGHT][id], -1, 0.0, v3_muls (v3_add(b,center), j)); } }*/ GLfloat cuboid_vertices[] = { // Positions // Normals -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, }; /*! \fn void prepare_cuboid (vec3_t position, int id) \brief OpenGL 3D light object rendering \param position light position \param id shader number */ void prepare_cuboid (vec3_t position, int id) { float lgt = 1.0; object_3d * light = g_malloc0(sizeof*light); light -> vert_buffer_size = POLY_BUFF_SIZE; light -> num_vertices = 36; light -> vertices = allocfloat (light -> vert_buffer_size*light -> num_vertices); int i, j, k, l; l = 0; for (i=0; i<36; i++) { j = 10*l; k = 6*l; light -> vertices[j] = lgt*cuboid_vertices[k]*0.5 + position.x; light -> vertices[j+1] = lgt*cuboid_vertices[k+1]*0.5 + position.y; light -> vertices[j+2] = lgt*cuboid_vertices[k+2]*0.5 + position.z; light -> vertices[j+3] = cuboid_vertices[k+3]; light -> vertices[j+4] = cuboid_vertices[k+4]; light -> vertices[j+5] = cuboid_vertices[k+5]; light -> vertices[j+6] = 1.0; light -> vertices[j+7] = 1.0; light -> vertices[j+8] = 1.0; light -> vertices[j+9] = 1.0; l ++; } wingl -> ogl_glsl[LIGHT][0][id] = init_shader_program (LIGHT, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, FALSE, light); } /*! \fn void create_light_lists () \brief prepare light(s) OpenGL rendering */ void create_light_lists () { int i, j; j = 0; cleaning_shaders (wingl, LIGHT); for (i=0; i l_ghtning.lights; i++) { if (plot -> l_ghtning.spot[i] -> show) j++; } wingl -> n_shaders[LIGHT][0] = j; if (plot -> light_loc != NULL) { g_free (plot -> light_loc); plot -> light_loc = NULL; } if (j > 0) { wingl -> ogl_glsl[LIGHT][0] = g_malloc0(wingl -> n_shaders[LIGHT][0]*sizeof*wingl -> ogl_glsl[LIGHT][0]); plot -> light_loc = allocint (j); j = 0; for (i=0; i l_ghtning.lights; i++) { if (plot -> l_ghtning.spot[i] -> show) { prepare_cuboid (plot -> l_ghtning.spot[i] -> position, j); if (plot -> l_ghtning.spot[i] -> type > 0 && plot -> l_ghtning.spot[i] -> fix == 0) plot -> light_loc[j] = 1; j ++; } } } wingl -> create_shaders[LIGHT] = FALSE; } vec3_t get_normal (vec3_t v1, vec3_t v2, vec3_t v3) { vec3_t edge_a = v3_sub(v3, v1); vec3_t edge_b = v3_sub(v2, v1); return v3_norm (v3_cross(edge_a, edge_b)); } /*! \fn double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) \brief draw cuboid vertices \param draw draw or not (1/0) \param SHADID shader id \param shadnum shader number \param rot rotation matrix \param cpos position of center of slab \param paral cell parameters \param col slab color \param slab_alpha slab opacity */ double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) { int i, j, k, l, m, n, o; vec3_t pos; double cvol; double shift[3]; cvol = (paral[0][1]*paral[1][2]-paral[0][2]*paral[1][1])*paral[2][0]; cvol += (paral[0][2]*paral[1][0]-paral[0][0]*paral[1][2])*paral[2][1]; cvol += (paral[0][0]*paral[1][1]-paral[0][1]*paral[1][0])*paral[2][2]; cvol = fabs(cvol); if (draw) { object_3d * slab = g_malloc0(sizeof*slab); slab -> vert_buffer_size = POLY_BUFF_SIZE; slab -> num_vertices = 36*(plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); slab -> vertices = allocfloat (slab -> vert_buffer_size*slab -> num_vertices); for (i=0; i<36; i++) { j = i*POLY_BUFF_SIZE; k = 6*i; for (l=0; l<3; l++) { slab -> vertices[j+l] += 0.5*(cuboid_vertices[k]*paral[0][l] + cuboid_vertices[k+1]*paral[1][l] + cuboid_vertices[k+2]*paral[2][l]); } pos = vec3 (slab -> vertices[j], slab -> vertices[j+1], slab -> vertices[j+2]); pos = m4_mul_pos (rot, pos); slab -> vertices[j] = pos.x + cpos.x; slab -> vertices[j+1] = pos.y + cpos.y; slab -> vertices[j+2] = pos.z + cpos.z; } n = 0; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { for (l=0; l<3; l++) shift[l] = i*box_gl -> vect[0][l] + j*box_gl -> vect[1][l] + k*box_gl -> vect[2][l]; for (l=0; l<36; l++) { m = POLY_BUFF_SIZE*n; for (o=0; o<3; o++) { slab -> vertices[m+o] = slab -> vertices[l*POLY_BUFF_SIZE+o] + shift[o]; if (SHADID == SLABS) { slab -> vertices[m+6+o] = (o) ? 1.0 : 0.0; } else { if (! o) slab -> vertices[m+6+o] = col.red; if (o == 1) slab -> vertices[m+6+o] = col.green; if (o == 2) slab -> vertices[m+6+o] = col.blue; } } pos = vec3 (cuboid_vertices[6*l+3], cuboid_vertices[6*l+4], cuboid_vertices[6*l+5]); pos = m4_mul_pos (rot, pos); slab -> vertices[m+3] = pos.x; slab -> vertices[m+4] = pos.y; slab -> vertices[m+5] = pos.z; slab -> vertices[m+9] = slab_alpha; n ++; } } } } wingl -> ogl_glsl[SHADID][(SHADID == SLABS) ? 0 : step][shadnum] = init_shader_program (SHADID, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, slab); } return cvol; } /*! \fn void cuboid_slab (mat4_t rot) \brief prepare cuboid slab OpenGL rendering \param rot rotation matrix */ void cuboid_slab (mat4_t rot) { int i, j, k, l, m; double ang[3], cang[3], sang[3]; double paral[3][3]; double tmp; for (i=0; i<3; i++) { if (wingl -> cell_win -> cparam[i+15] == 90.0) { ang[i] = pi/2.0; sang[i] = 1.0; cang[i] = 0.0; } else { ang[i] = wingl -> cell_win -> cparam[i+15]*pi/180.0; sang[i] = sin(ang[i]); cang[i] = cos(ang[i]); } } paral[0][0] = wingl -> cell_win -> cparam[9]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = wingl -> cell_win -> cparam[10] * cang[2]; paral[1][1] = wingl -> cell_win -> cparam[10] * sang[2]; paral[1][2] = 0.0; paral[2][0] = wingl -> cell_win -> cparam[11] * cang[1]; tmp = (cang[0] - cang[1]*cang[2]) / sang[2]; paral[2][1] = wingl -> cell_win -> cparam[11] * tmp; paral[2][2] = wingl -> cell_win -> cparam[11] * sqrt(sang[1]*sang[1] - tmp*tmp); ColRGBA null; // Not used wingl -> cell_win -> slab_vol = draw_cuboid (! wingl -> cell_win -> cut_this_slab, SLABS, 0, rot, vec3(wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]), paral, null, wingl -> cell_win -> slab_alpha); vec3_t at, atc; vec3_t ps[8]; vec3_t pn[6]; vec3_t cat = vec3(wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); l = 0; float pmax[3]; for (i=-1; i<2; i+=2) { for (j=-1; j<2; j+=2) { for (k=-1; k<2; k+=2) { ps[l].x = 0.5*(i*paral[0][0] + j*paral[1][0] + k*paral[2][0]); ps[l].y = 0.5*(i*paral[0][1] + j*paral[1][1] + k*paral[2][1]); ps[l].z = 0.5*(i*paral[0][2] + j*paral[1][2] + k*paral[2][2]); ps[l] = m4_mul_pos (rot, ps[l]); ps[l]= v3_add (ps[l], cat); if (l == 0) { pmax[0] = ps[l].x; pmax[1] = ps[l].y; pmax[2] = ps[l].z; } else { pmax[0] = max(pmax[0],ps[l].x); pmax[1] = max(pmax[1],ps[l].y); pmax[2] = max(pmax[2],ps[l].z); } l ++; } } } pn[0] = get_normal (ps[1], ps[0], ps[2]); pn[1] = get_normal (ps[1], ps[0], ps[4]); pn[2] = get_normal (ps[2], ps[0], ps[4]); pn[3] = get_normal (ps[3], ps[7], ps[5]); pn[4] = get_normal (ps[3], ps[7], ps[6]); pn[5] = get_normal (ps[5], ps[7], ps[6]); ps[0] = v3_sub (ps[0], cat); ps[7] = v3_sub (ps[7], cat); for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; float val, vbl; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); at = vec3(slab_center.x+at_slab.x, slab_center.y+at_slab.y, slab_center.z+at_slab.z); if (at.x <= pmax[0] && at.y <= pmax[1] && at.z <= pmax[2]) { m = 0; atc = v3_sub (at, cat); for (j=0; j<6; j++) { k = (j < 3) ? 0 : 7; val = v3_dot (ps[k], pn[j]); vbl = v3_dot (atc, pn[j]); if (fabs(vbl) < fabs(val)) { m ++; } else { break; } } if (m == 6 && (! at_slab.pbc || wingl -> cell_win -> slab_pbc)) { wingl -> cell_win -> slab_atoms ++; l = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[l] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void cylinder_slab (mat4_t rot) \brief prepare cylinder slab OpenGL rendering \param rot rotation matrix */ void cylinder_slab (mat4_t rot) { int i, j, k; vec3_t pos_a = vec3(-wingl -> cell_win -> cparam[12]/2.0, 0.0, 0.0); vec3_t pos_b = vec3( wingl -> cell_win -> cparam[12]/2.0, 0.0, 0.0); pos_a = m4_mul_pos (rot, pos_a); pos_b = m4_mul_pos (rot, pos_b); vec3_t cat = vec3 (wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); pos_a = v3_add (pos_a, cat); pos_b = v3_add (pos_b, cat); vec3_t axis = v3_sub (pos_b, pos_a); if (! wingl -> cell_win -> cut_this_slab) { object_3d * slab = g_malloc0(sizeof*slab); object_3d * slab_cap = g_malloc0(sizeof*slab_cap); slab = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (30, 1.0, 1.0); slab -> num_instances = (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); slab -> inst_buffer_size = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (slab); slab_cap = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder_cap (50, 1.0, FALSE); slab_cap -> num_instances = 2 * slab -> num_instances; slab_cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (slab_cap); ColRGBA col; col.red = 0.0; col.blue = 1.0; col.green = 1.0; col.alpha = wingl -> cell_win -> slab_alpha; vec3_t shift; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { shift.x = i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift.y = i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift.z = i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; pos_a = v3_add (pos_a, shift); pos_b = v3_add (pos_b, shift); setup_cylinder_vertice (slab -> instances, pos_a, pos_b, col, wingl -> cell_win -> cparam[13], 1.0, 0.0, 0.0, 0.0); pos_a = v3_sub (pos_a, shift); pos_b = v3_sub (pos_b, shift); } } } const GLchar * vs_slc = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_slc = (plot -> ray_tracing) ? full_color_ray : full_color; int narray_cyl = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[SLABS][0][0] = init_shader_program (SLABS, GLSL_CYLINDERS, vs_slc, NULL, fs_slc, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, slab); nbs = 0; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { shift.x = i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift.y = i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift.z = i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; pos_a = v3_add (pos_a, shift); pos_b = v3_add (pos_b, shift); setup_cap_vertice (slab_cap -> instances, pos_a, pos_b, col, wingl -> cell_win -> cparam[13], 1.0, FALSE); setup_cap_vertice (slab_cap -> instances, pos_b, pos_a, col, wingl -> cell_win -> cparam[13], 1.0, FALSE); pos_a = v3_sub (pos_a, shift); pos_b = v3_sub (pos_b, shift); } } } const GLchar * vs_slcp = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_slcp = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[SLABS][0][1] = init_shader_program (SLABS, GLSL_CAPS, vs_slcp, NULL, fs_slc, prim_slcp, 5, 1, TRUE, slab_cap); } wingl -> cell_win -> slab_vol = pi*pow(wingl -> cell_win -> cparam[13], 2)*wingl -> cell_win -> cparam[12]; for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; vec3_t atc, patc; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { atc = vec3(proj_gl -> atoms[0][i].x, proj_gl -> atoms[0][i].y, proj_gl -> atoms[0][i].z); at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); if (wingl -> cell_win -> slab_pbc || ! at_slab.pbc) { atc = vec3(at_slab.x, at_slab.y, at_slab.z); patc = v3_proj (atc, axis); if (v3_length(patc) <= wingl -> cell_win -> cparam[12]/2.0 && v3_length(v3_sub(patc,atc)) <= wingl -> cell_win -> cparam[13]) { wingl -> cell_win -> slab_atoms ++; j = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[j] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void spherical_slab () \brief prepare spherical slab OpenGL rendering */ void spherical_slab () { int i, j, k, l; vec3_t pos; if (! wingl -> cell_win -> cut_this_slab) { object_3d * slab = g_malloc0(sizeof*slab); slab = (plot -> ray_tracing) ? draw_billboard_quad () : draw_sphere (50); slab -> inst_buffer_size = ATOM_BUFF_SIZE; slab -> num_instances = (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); allocate_instances (slab); ColRGBA col; col.red = 0.0; col.blue = 1.0; col.green = 1.0; col.alpha = wingl -> cell_win -> slab_alpha; double shift[3]; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { for (l=0; l<3; l++) shift[l] = i*box_gl -> vect[0][l] + j*box_gl -> vect[1][l] + k*box_gl -> vect[2][l] + wingl -> cell_win -> cparam[l+6]; pos = vec3(shift[0], shift[1], shift[2]); setup_sphere_vertice (slab -> instances, pos, col, wingl -> cell_win -> cparam[14], 1.0); } } } const GLchar * vs_sls = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_sls = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[SLABS][0][0] = init_shader_program (SLABS, GLSL_SPHERES, vs_sls, NULL, fs_sls, GL_TRIANGLE_STRIP, 4, 1, TRUE, slab); } wingl -> cell_win -> slab_vol = (4.0*pi/3.0)*(pow(wingl -> cell_win -> cparam[14], 3)); vec3_t cat = vec3 (wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); if (wingl -> cell_win -> slab_pbc || ! at_slab.pbc) { if (at_slab.length <= wingl -> cell_win -> cparam[14]) { wingl -> cell_win -> slab_atoms ++; j = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[j] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void create_slab_lists (project * this_proj) \brief prepare slab(s) OpenGL rendering \param this_proj the target project */ void create_slab_lists (project * this_proj) { wingl = this_proj -> modelgl; proj_gl = this_proj; cell_gl = & proj_gl -> cell; plot = wingl -> anim -> last -> img; step = plot -> step; box_gl = (cell_gl -> npt) ? & cell_gl -> box[step] : & cell_gl -> box[0]; cleaning_shaders (wingl, SLABS); if (wingl -> cell_win && (wingl -> cell_win -> slab_show || wingl -> cell_win -> cut_this_slab)) { if (! wingl -> cell_win -> cut_this_slab) { wingl -> n_shaders[SLABS][0] = 1; if (wingl -> cell_win -> slab_type == 1) wingl -> n_shaders[SLABS][0] ++; wingl -> ogl_glsl[SLABS][0] = g_malloc0(wingl -> n_shaders[SLABS][0]*sizeof*wingl -> ogl_glsl[SLABS][0]); nbs = nbl = 0; } mat4_t rot = m4_rotation_xyz (wingl -> cell_win -> cparam[18], wingl -> cell_win -> cparam[19], wingl -> cell_win -> cparam[20]); switch (wingl -> cell_win -> slab_type) { case 0: cuboid_slab (rot); break; case 1: cylinder_slab (rot); break; case 2: spherical_slab (); break; } if (! wingl -> cell_win -> cut_this_slab) create_slab_info (proj_gl); } wingl -> create_shaders[SLABS] = FALSE; } /*! \fn void create_volumes_lists () \brief prepare volume(s) OpenGL rendering */ void create_volumes_lists () { cleaning_shaders (wingl, VOLMS); int i, j, k, l, m; wingl -> n_shaders[VOLMS][step] = 0; for (i=0; i show_vol[i]) wingl -> n_shaders[VOLMS][step] ++; if (wingl -> adv_bonding[0]) { for (i=0; i fm_show_vol[0][i]) { for (j=0; j coord -> totcoord[2]; j++) if (plot -> fm_show_vol[0][i][j]) wingl -> n_shaders[VOLMS][step] ++; } if (plot -> fm_show_vol[1][i]) { for (j=0; j coord -> totcoord[3]; j++) if (plot -> fm_show_vol[1][i][j]) wingl -> n_shaders[VOLMS][step] += proj_gl -> modelfc -> mols[step][j].multiplicity; } } } if (wingl -> n_shaders[VOLMS][step]) { wingl -> ogl_glsl[VOLMS][step] = g_malloc0(wingl -> n_shaders[VOLMS][step]*sizeof*wingl -> ogl_glsl[VOLMS][step]); mat4_t rot; vec3_t bx; double paral[3][3]; m = 0; if (wingl -> adv_bonding[1]) { for (i=0; i fm_show_vol[1][i]) { for (j=0; j coord -> totcoord[3]; j++) { if (plot -> fm_show_vol[1][i][j]) { for (k=0; k modelfc -> mols[step][j].multiplicity; k++) { l = proj_gl -> modelfc -> mols[step][j].fragments[k]; rot = m4_rotation_anti_xyz (wingl -> frag_box[i][step][l][3], wingl -> frag_box[i][step][l][4], wingl -> frag_box[i][step][l][5]); paral[0][0] = wingl -> frag_box[i][step][l][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> frag_box[i][step][l][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> frag_box[i][step][l][2]; bx = m4_mul_coord (rot, vec3(wingl -> frag_box[i][step][l][6], wingl -> frag_box[i][step][l][7], wingl -> frag_box[i][step][l][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> fm_vol_col[1][i][j], plot -> fm_vol_col[1][i][j].alpha); m ++; } } } } } } if (wingl -> adv_bonding[0]) { for (i=0; i fm_show_vol[0][i]) { for (j=0; j coord -> totcoord[2]; j++) { if (plot -> fm_show_vol[0][i][j]) { rot = m4_rotation_anti_xyz (wingl -> frag_box[i][step][j][3], wingl -> frag_box[i][step][j][4], wingl -> frag_box[i][step][j][5]); paral[0][0] = wingl -> frag_box[i][step][j][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> frag_box[i][step][j][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> frag_box[i][step][j][2]; bx = m4_mul_coord (rot, vec3(wingl -> frag_box[i][step][j][6], wingl -> frag_box[i][step][j][7], wingl -> frag_box[i][step][j][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> fm_vol_col[0][i][j], plot -> fm_vol_col[0][i][j].alpha); m ++; } } } } } for (i=0; i show_vol[i]) { rot = m4_rotation_anti_xyz (wingl -> volume_box[i][step][3], wingl -> volume_box[i][step][4], wingl -> volume_box[i][step][5]); paral[0][0] = wingl -> volume_box[i][step][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> volume_box[i][step][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> volume_box[i][step][2]; bx = m4_mul_coord (rot, vec3(wingl -> volume_box[i][step][6], wingl -> volume_box[i][step][7], wingl -> volume_box[i][step][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> vol_col[i], plot -> vol_col[i].alpha); m ++; } } } wingl -> create_shaders[VOLMS] = FALSE; } atomes_1.3.1/src/opengl/draw/movie.c0000664000175000017500000013207215212624223017005 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file movie.c * @short Functions to encode a movie / render an image from the OpenGL rendering * @author Sébastien Le Roux */ /* * This file: 'movie.c' * * Contains: * - The functions to encode a movie / render an image from the OpenGL rendering * * List of functions: gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q); gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile); void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h); void fill_image (VideoStream * vs, int width, int height, glwin * view); void set_old_cmap (image * img, int stp, int id); void init_frame_buffer (int x, int y); void close_frame_buffer (); void save_movie (glwin * view, video_options * vopts); static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs); static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view); static void close_stream (AVFormatContext * fc, VideoStream * vs); G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data); static GLubyte * capture_opengl_image (unsigned int width, unsigned int height); AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts); static AVFrame * alloc_video_frame (AVCodecContext * cc); VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "movie.h" #if LIBAVCODEC_VERSION_MAJOR < 56 # define PIXEL_FORMAT PIX_FMT_YUV420P #else # define PIXEL_FORMAT AV_PIX_FMT_YUV420P #endif #define AVS_FRAME_ALIGN 16 #define RGB_TO_Y(pixels, loc) (0.29900 * pixels[loc] + 0.58700 * pixels[loc+1] + 0.11400 * pixels[loc+2]) #define RGB_TO_U(pixels, loc)(-0.16874 * pixels[loc] - 0.33126 * pixels[loc+1] + 0.50000 * pixels[loc+2]+128.0) #define RGB_TO_V(pixels, loc) (0.50000 * pixels[loc] - 0.41869 * pixels[loc+1] - 0.08131 * pixels[loc+2]+128.0) #define AVIO_FLAG_READ 1 #define AVIO_FLAG_WRITE 2 #define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) #ifndef AV_ROUND_PASS_MINMAX #define AV_ROUND_PASS_MINMAX 8192 #endif #ifndef URL_WRONLY # define URL_WRONLY 1 #endif char * codec_name[VIDEO_CODECS] = {"MPEG-1/2", "MPEG-4", "H264", "Theora", "Flash"}; char * codec_list[VIDEO_CODECS] = {"mpeg", "avi", "mkv", "ogv", "flv"}; #if LIBAVCODEC_VERSION_MAJOR > 54 int codec_id[VIDEO_CODECS] = {AV_CODEC_ID_MPEG2VIDEO, AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264, AV_CODEC_ID_THEORA, AV_CODEC_ID_FLV1}; #else int codec_id[VIDEO_CODECS] = {CODEC_ID_MPEG2VIDEO, CODEC_ID_MPEG4, CODEC_ID_H264, CODEC_ID_THEORA, CODEC_ID_FLV1}; #endif /*#else GdkGLDrawable * gldrawable; GdkGLContext * glcontext; GdkPixmap * pixmap; GdkGLPixmap * glpixmap; #endif*/ GdkPixbuf * pixbuf; uint8_t * video_outbuf; int video_outbuf_size; int num_frames; int frame_start; /*! \fn void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) \brief convert an RGB pixbuf to an YUV picture frame \param pixbuf the Gdk RGB pixbuf to convert \param picture the AVFrame to store the data \param w image width \param h image height */ void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) { gint x, y, location, location2; gint inner_x, inner_y, half_location; gfloat cr, cb; gint pixbuf_xsize, pixbuf_ysize; guchar * pixels; gint row_stride; gboolean x_odd, y_odd; pixbuf_xsize = gdk_pixbuf_get_width (pixbuf); pixbuf_ysize = gdk_pixbuf_get_height (pixbuf); pixels = gdk_pixbuf_get_pixels (pixbuf); row_stride = gdk_pixbuf_get_rowstride (pixbuf); y_odd = (pixbuf_ysize & 0x1); x_odd = (pixbuf_xsize & 0x1); /* note, the Cr and Cb info is subsampled by 2x2 */ for (y=0; y data[0][inner_x+inner_y*w] = RGB_TO_Y (pixels, location); cb += RGB_TO_U (pixels, location); cr += RGB_TO_V (pixels, location); } half_location = x/2 + y*w/4; picture -> data[1][half_location] = cb/4.0; picture -> data[2][half_location] = cr/4.0; } if (x_odd) { location = y*row_stride+3*x; location2 = (y+1)*row_stride+3*x; picture -> data[0][x+y*w] = RGB_TO_Y (pixels, location); picture -> data[0][x+1+y*w] = 0; picture -> data[0][x+(y+1)*w] = RGB_TO_Y (pixels, location2); picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location) + RGB_TO_U(pixels, location2)+256)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location) + RGB_TO_V(pixels, location2)+256)/4.0; } } if (y_odd) { for (x=0; x data[0][x+y*w] = RGB_TO_Y(pixels, location); picture -> data[0][x+1+y*w] = RGB_TO_Y(pixels, location2); picture -> data[0][x+(y+1)*w] = 0; picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location)+RGB_TO_U(pixels, location2)+256)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location)+RGB_TO_V(pixels, location2)+256)/4.0; } if (x_odd) { location = y*row_stride+3*x; picture -> data[0][x+y*w] = RGB_TO_Y(pixels, location); picture -> data[0][x+1+y*w] = 0; picture -> data[0][x+(y+1)*w] = 0; picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location)+384)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location)+384)/4.0; } } } /*! \fn static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) \brief set an encoder YUV frame from an RGB image \param rgb the RGB data to convert \param vs the video stream to encode the data */ static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) { const int in_linesize = 4 * vs -> cc -> width; vs -> sws_ctx = sws_getCachedContext (vs -> sws_ctx, vs -> cc -> width, vs -> cc -> height, AV_PIX_FMT_BGRA, vs -> cc -> width, vs -> cc -> height, PIXEL_FORMAT, 0, NULL, NULL, NULL); sws_scale (vs -> sws_ctx, (const uint8_t * const *)&rgb, & in_linesize, 0, vs -> cc -> height, vs -> frame -> data, vs -> frame -> linesize); } /*! \fn static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) \brief capture an OpenGL image from an OpenGL rendering */ static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) { size_t i, nvals; nvals = width * height * 4; GLubyte * pixels = g_malloc0(nvals * sizeof(GLubyte)); GLubyte * rgb = g_malloc0(nvals * sizeof(GLubyte)); // On macOS, OpenGL runs over Metal with asynchronous command submission. // glFinish() ensures all GPU rendering commands from draw() have completed // before we read the framebuffer, preventing partial image captures. // This is harmless on Linux and Windows where the driver synchronizes implicitly. glFinish (); glReadPixels (0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, pixels); // Flip data vertically for (i = 0; i < height; i++) { memcpy (rgb + 4 * width * i, pixels + 4 * width * (height - i - 1), 4 * width); } g_free (pixels); return rgb; } //#endif /*! \fn void fill_image (VideoStream * vs, int width, int height, glwin * view) \brief render an image from an OpenGL rendering \param vs the video stream \param width image width \param height image height \param view the target glwin */ void fill_image (VideoStream * vs, int width, int height, glwin * view) { // opengl call is here !!! reshape (view, width, height, FALSE); draw (view); // Might need some correction(s) here for HiDPI screens GLubyte * image = capture_opengl_image (width, height); if (vs != NULL) { //if (movie) convert_rgb_pixbuf_to_yuv (pixbuf, frame, width, height); ffmpeg_encoder_set_frame_yuv_from_rgb (image, vs); } else { cairo_surface_t * surf = cairo_image_surface_create_for_data ((guchar *)image, CAIRO_FORMAT_ARGB32, width, height, cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width)); pixbuf = convert_to_pixbuf (surf); cairo_surface_destroy (surf); } g_free (image); } /*! \fn static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) \brief write a video frame from an OpenGL render \param f_context the format context to use \param vs the video stream \param frame_id the frame id number \param view the target glwin */ static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) { int out_size = 0; fill_image (vs, vs -> cc -> width, vs -> cc -> height, view); AVPacket packet; #if LIBAVCODEC_VERSION_MAJOR > 57 out_size = av_new_packet (& packet, 0); if (out_size != 0) { // "Error while encoding video frame" g_warning (_("Error in movie encoding : video frame - error : %s"), av_err2str(out_size)); } // get_packet_defaults (& packet); #else av_init_packet (& packet); #endif if (! out_size) { packet.dts = packet.pts = AV_NOPTS_VALUE; packet.data = NULL; packet.size = 0; vs -> frame -> pts = frame_id + 1; out_size = avcodec_send_frame (vs -> cc, vs -> frame); if (out_size < 0) { // "Error while encoding video frame" g_warning (_("Error in movie encoding : video frame - error : %s"), av_err2str (out_size)); } else { if (avcodec_receive_packet (vs -> cc, & packet) < 0) { // "Error while encoding video frame" if (frame_id + 1 > frame_start) g_warning (_("Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d"), frame_id); } else { av_packet_rescale_ts (& packet, vs -> cc -> time_base, vs -> st -> time_base); packet.stream_index = vs -> st -> index; packet.flags |= AV_PKT_FLAG_KEY; out_size = av_interleaved_write_frame (f_context, & packet); if (out_size != 0) { // "Error while encoding video frame" g_warning (_("Error in movie encoding : video frame - error : %s"), av_err2str(out_size)); } av_packet_unref(& packet); } } } } /*! \fn static AVFrame * alloc_video_frame (AVCodecContext * cc) \brief allocate a video frame using a codec context \param cc the codec context */ static AVFrame * alloc_video_frame (AVCodecContext * cc) { AVFrame * frame; frame = av_frame_alloc (); if (! frame) { return NULL; } frame -> format = cc -> pix_fmt; frame -> width = cc -> width; frame -> height = cc -> height; if (av_frame_get_buffer (frame, 32) < 0) { return NULL; } return frame; } /*! \fn AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) \brief create a video codec context \param fc the format context \param vc the codec \param vopts the video encoding options */ AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) { AVCodecContext * cc; if (! (vc = avcodec_find_encoder (codec_id[vopts -> codec]))) { // Codec not found g_warning (_("Error in movie encoding : impossible to find codec %s"), codec_name[vopts -> codec]); return NULL; } if (! (cc = avcodec_alloc_context3(vc))) { g_warning (_("Error in movie encoding : impossible to allocate encoding context")); return NULL; } //g_debug ("Codec_id= %d", cc -> codec_id); cc -> codec_id = codec_id[vopts -> codec]; //g_debug ("Codec_id= %d", cc -> codec_id); /* put sample parameters */ cc -> bit_rate_tolerance = vopts -> bitrate*1000; cc -> bit_rate = vopts -> bitrate*1000; /* resolution must be a multiple of two */ cc -> width = vopts -> video_res[0]; cc -> height = vopts -> video_res[1]; cc -> time_base = (AVRational){1, vopts -> framesec}; cc -> framerate = (AVRational){vopts -> framesec, 1}; if (vopts -> codec != 1 && vopts -> codec != 4) cc -> max_b_frames = 1; cc -> gop_size = vopts -> extraframes; /* emit one intra frame every n frames */ cc -> pix_fmt = PIXEL_FORMAT; if (vopts -> codec == 2) av_opt_set (cc -> priv_data, "preset", "slow", 0); /* Some container formats (like MP4) require global headers to be present Mark the encoder so that it behaves accordingly. */ #if LIBAVCODEC_VERSION_MAJOR > 57 if (fc -> oformat -> flags & AVFMT_GLOBALHEADER) cc -> flags |= AV_CODEC_FLAG_GLOBAL_HEADER; #else if (fc -> oformat -> flags & AVFMT_GLOBALHEADER) cc -> flags |= CODEC_FLAG_GLOBAL_HEADER; #endif return cc; } /*! \fn VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) \brief create video stream and the associated data buffers \param fc the format context \param vc the codec \param vopts the video encoding options */ VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) { VideoStream * stream = g_malloc0(sizeof*stream); stream -> cc = add_codec_context (fc, vc, vopts); if (stream -> cc == NULL) return NULL; #if LIBAVCODEC_VERSION_MAJOR > 53 stream -> st = avformat_new_stream (fc, vc); #else st = av_new_stream (fc, vc); #endif if (! stream -> st) { g_warning (_("Error in movie encoding : impossible to allocate video stream")); return NULL; } stream -> st -> time_base = stream -> cc -> time_base; stream -> frame = alloc_video_frame (stream -> cc); if (stream -> frame == NULL) { g_warning (_("Error in movie encoding : impossible to allocate raw frame buffer")); return NULL; } return stream; } /*! \fn static void close_stream (AVFormatContext * fc, VideoStream * vs) \brief close the video stream and free associated data buffers \param fc the format context to free \param vs the video stream to close */ static void close_stream (AVFormatContext * fc, VideoStream * vs) { avcodec_free_context (& vs -> cc); av_frame_free (& vs -> frame); sws_freeContext (vs -> sws_ctx); avformat_free_context (fc); } int * old_cmap[2]; /*! \fn void set_old_cmap (image * img, int stp, int id) \brief preserve color map information \param img the target image \param stp MD step \param id color map id (0 = atom(s), 1 = polyhedra) */ void set_old_cmap (image * img, int stp, int id) { old_cmap[id][stp] = img -> color_map[id]; } /*! \fn gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) \brief test if it is required to update the OpenGL shaders, and which one(s) \param view the target glwin \param img_a the previous image \param img_b the next image \param ogl_q OpenGL quality */ gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) { gboolean shaders = FALSE; int i, j, k; int stp = img_b -> step; if ((img_a -> ray_tracing != img_b -> ray_tracing) || (ogl_q == 0 && img_a -> quality != img_b -> quality)) { view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[VOLMS][stp] = -1; view -> create_shaders[VOLMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; for (i=0; i<2; i++) set_old_cmap (img_b, stp, i); return TRUE; } for (i=0; i<3; i++) { if (img_a -> abc -> extra_cell[i] != img_b -> abc -> extra_cell[i]) { view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[VOLMS][stp] = -1; view -> create_shaders[VOLMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; for (i=0; i<2; i++) set_old_cmap (img_b, stp, i); return TRUE; } } project * tmp_proj = get_project_by_id(view -> proj); coord_info * this_coord = tmp_proj -> coord; for (i=0; i<9; i++) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_coord[i][j] != img_b -> show_coord[i][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } } if (i < 2) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_poly[i][j] != img_b -> show_poly[i][j]) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; } } } else if (i > 3) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_poly[i][j] != img_b -> show_poly[i][j]) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; } } } } for (j=0; j totcoord[9]; j++) { if (img_a -> show_coord[9][j] != img_b -> show_coord[9][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } } if (img_a -> draw_clones != img_b -> draw_clones) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } if (img_a -> color_map[0] != img_b -> color_map[0] || img_b -> color_map[0] != old_cmap[0][stp]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> create_shaders[LABEL] = TRUE; set_old_cmap (img_b, stp, 0); shaders = TRUE; } if (img_a -> color_map[1] != img_b -> color_map[1] || img_b -> color_map[1] != old_cmap[1][stp]) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; set_old_cmap (img_b, stp, 1); shaders = TRUE; } if (img_a -> step != img_b -> step) { if (view -> n_shaders[ATOMS][stp] < 0) view -> create_shaders[ATOMS] = TRUE; if (view -> n_shaders[BONDS][stp] < 0) view -> create_shaders[BONDS] = TRUE; if (view -> n_shaders[POLYS][stp] < 0) view -> create_shaders[POLYS] = TRUE; if (view -> n_shaders[RINGS][stp] < 0) view -> create_shaders[RINGS] = TRUE; if (view -> n_shaders[VOLMS][stp] < 0) view -> create_shaders[VOLMS] = TRUE; if (view -> n_shaders[SELEC][stp] < 0) view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; } gboolean do_volms = FALSE; for (i=0; i show_vol[i] != img_b -> show_vol[i]) do_volms = TRUE; if (img_a -> vol_col[i].red != img_b -> vol_col[i].red) do_volms = TRUE; if (img_a -> vol_col[i].green != img_b -> vol_col[i].green) do_volms = TRUE; if (img_a -> vol_col[i].blue != img_b -> vol_col[i].blue) do_volms = TRUE; for (j=0; j<2; j++) { if (img_a -> fm_show_vol[j][i] == NULL && img_b -> fm_show_vol[j][i] != NULL) { do_volms = TRUE; } else if (img_a -> fm_show_vol[j][i] != NULL && img_b -> fm_show_vol[j][i] == NULL) { do_volms = TRUE; } else if (img_a -> fm_show_vol[j][i] != NULL && img_b -> fm_show_vol[j][i] != NULL) { for (k=0; k totcoord[j+2]; k++) { if (img_a -> fm_show_vol[j][i][k] != img_b -> fm_show_vol[j][i][k]) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].red != img_b -> fm_vol_col[j][i][k].red) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].green != img_b -> fm_vol_col[j][i][k].green) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].blue != img_b -> fm_vol_col[j][i][k].blue) do_volms = TRUE; } } } } if (do_volms) { view -> create_shaders[VOLMS] = shaders = TRUE; view -> n_shaders[VOLMS][stp] = -1; } if (img_a -> abc -> box != img_b -> abc -> box) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> rad != img_b -> abc -> rad) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> line != img_b -> abc -> line) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> color.red != img_b -> abc -> color.red) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> color.green != img_b -> abc -> color.green) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> color.blue != img_b -> abc -> color.blue) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> xyz -> axis != img_b -> xyz -> axis) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> rad != img_b -> xyz -> rad) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> line != img_b -> xyz -> line) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> length != img_b -> xyz -> length) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> t_pos != img_b -> xyz -> t_pos) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> color == NULL && img_b -> xyz -> color != NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> xyz -> color != NULL && img_b -> xyz -> color == NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> xyz -> color != NULL && img_b -> xyz -> color != NULL) { for (i=0; i<3; i++) { if (img_a -> xyz -> color[i].red != img_b -> xyz -> color[i].red) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> color[i].green != img_b -> xyz -> color[i].green) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> color[i].blue != img_b -> xyz -> color[i].blue) view -> create_shaders[MAXIS] = shaders = TRUE; } } if (img_a -> xyz -> labels != img_b -> xyz -> labels) view -> create_shaders[MAXIS] = shaders = TRUE; for (i=0; i<3; i++) { if (g_strcmp0 (img_a -> xyz -> title[i], img_b -> xyz -> title[i]) != 0) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> c_pos[i] != img_b -> xyz -> c_pos[i]) view -> create_shaders[MAXIS] = shaders = TRUE; } if (g_strcmp0 (img_a -> labels[2].font, img_b -> labels[2].font) != 0) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].position != img_b -> labels[2].position) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].scale != img_b -> labels[2].scale) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].render != img_b -> labels[2].render) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].color == NULL && img_b -> labels[2].color != NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> labels[2].color != NULL && img_b -> labels[2].color == NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> labels[2].color != NULL && img_b -> labels[2].color != NULL) { for (i=0; i<3; i++) { if (img_a -> labels[2].color[i].red != img_b -> labels[2].color[i].red) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].color[i].green != img_b -> labels[2].color[i].green) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].color[i].blue != img_b -> labels[2].color[i].blue) view -> create_shaders[MAXIS] = shaders = TRUE; } } if (img_a -> cloned_poly != img_b -> cloned_poly) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; shaders = TRUE; } gboolean dorings = FALSE; for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (img_a -> i_rings[i] && img_b -> i_rings[i]) { if (img_a -> i_rings[i][0][0] != img_b -> i_rings[i][0][0]) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; dorings = shaders = TRUE; break; } else { for (j=0; j i_rings[i][0][0]; j++) { if ((img_a -> i_rings[i][j+1][0] != img_b -> i_rings[i][j+1][0]) || (img_a -> i_rings[i][j+1][1] != img_b -> i_rings[i][j+1][1])) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; dorings = shaders = TRUE; break; } } } } else if (img_b -> i_rings[i]) { dorings = TRUE; } if (dorings) break; } } for (i=0; i<2; i++) { for (j=0; j nspec; j++) { if (img_a -> show_label[i][j] != img_b -> show_label[i][j]) { view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> show_atom[i][j] != img_b -> show_atom[i][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; break; } } for (j=0; j natomes; j++) { if (img_a -> at_data[j].show[i] != img_b -> at_data[j].show[i] || img_a -> at_data[j].style != img_b -> at_data[j].style) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; break; } if (img_a -> at_data[j].label[i] != img_b -> at_data[j].label[i]) { view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> at_data[j].pick[0] != img_b -> at_data[j].pick[0]) { view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = shaders = TRUE; } if (img_a -> at_data[j].pick[1] != img_b -> at_data[j].pick[1]) { view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = shaders = TRUE; } } } for (i=0; i<2*tmp_proj -> nspec; i++) { if ((img_a -> sphererad[i] != img_b -> sphererad[i]) || (img_a -> pointrad[i] != img_b -> pointrad[i]) || (img_a -> atomicrad[i] != img_b -> atomicrad[i])) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } for (j=0; j<2*tmp_proj -> nspec; j++) { if ((img_a -> bondrad[i][j] != img_b -> bondrad[i][j]) || (img_a -> linerad[i][j] != img_b -> linerad[i][j])) { view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } } } for (i=0; i<2; i++) { if (img_a -> acl_format[i] != img_b -> acl_format[i]) view -> create_shaders[LABEL] = shaders = TRUE; if (g_strcmp0 (img_a -> labels[i].font, img_b -> labels[i].font) != 0) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].position != img_b -> labels[i].position) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].scale != img_b -> labels[i].scale) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].render != img_b -> labels[i].render) view -> create_shaders[LABEL] = shaders = TRUE; for (j=0; j<3; j++) { if (img_a -> labels[i].shift[j] != img_b -> labels[i].shift[j]) view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> labels[i].color == NULL && img_b -> labels[i].color != NULL) { view -> create_shaders[LABEL] = shaders = TRUE; } else if (img_a -> labels[i].color != NULL && img_b -> labels[i].color == NULL) { view -> create_shaders[LABEL] = shaders = TRUE; } else if (img_a -> labels[i].color != NULL && img_b -> labels[i].color != NULL) { for (j=0; j nspec; j++) { if (img_a -> labels[i].color[j].red != img_b -> labels[i].color[j].red) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].color[j].green != img_b -> labels[i].color[j].green) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].color[j].blue != img_b -> labels[i].color[j].blue) view -> create_shaders[LABEL] = shaders = TRUE; } } if (img_a -> radall[i] != img_b -> radall[i]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } } if (img_a -> render != img_b -> render) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; shaders = TRUE; } if (img_a -> style != img_b -> style) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } if (img_a -> m_is_pressed != img_b -> m_is_pressed) view -> create_shaders[MEASU] = shaders = TRUE; for (i=0; i<2; i++) { if (img_a -> mtilt[i] != img_b -> mtilt[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mpattern[i] != img_b -> mpattern[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mfactor[i] != img_b -> mfactor[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mwidth[i] != img_b -> mwidth[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (g_strcmp0 (img_a -> labels[3+i].font, img_b -> labels[3+i].font) != 0) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].position != img_b -> labels[3+i].position) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].scale != img_b -> labels[3+i].scale) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].render != img_b -> labels[3+i].render) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].color[0].red != img_b -> labels[3+i].color[0].red) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].color[0].green != img_b -> labels[3+i].color[0].green) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].color[0].blue != img_b -> labels[3+i].color[0].blue) view -> create_shaders[MEASU] = shaders = TRUE; for (j=0; j<3; j++) { if (img_a -> labels[3+i].shift[j] != img_b -> labels[3+i].shift[j]) view -> create_shaders[MEASU] = shaders = TRUE; } } return shaders; } extern GtkWidget * encoding_pb; /* typedef struct{ int framesec; // frame(s) per second int extraframes; // extra frame(s) per second int codec; // video codec int oglquality; // OpenGL quality int bitrate; // bitrate int video_res[2]; // video resolution (x, y) } video_options; */ /*! \fn gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) \brief render a movie from the saved animation parameters \param view the target glwin \param vopts the video encoding options \param videofile video file name */ gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) { int q; const AVOutputFormat * output_format = NULL; AVFormatContext * format_context = NULL; VideoStream * video_stream = NULL; const AVCodec * video_codec = NULL; int error; #ifdef DEBUG g_debug ("VIDEO ENCODING:: frames per seconds:: %d", vopts -> framesec); g_debug ("VIDEO ENCODING:: extra frames every:: %d frame(s)", vopts -> extraframes); g_debug ("VIDEO ENCODING:: bitrate:: %d", vopts -> bitrate); g_debug ("VIDEO ENCODING:: video_x = %d , video_y = %d", vopts -> video_res[0], vopts -> video_res[1]); g_debug ("VIDEO ENCODING:: codec:: %d, name= %s, ext= %s", vopts -> codec, codec_name[vopts -> codec], codec_list[vopts -> codec]); #endif // DEBUG num_frames = view -> anim -> frames; #if LIBAVCODEC_VERSION_MAJOR < 57 av_register_all (); avcodec_register_all (); #endif if (! (format_context = avformat_alloc_context())) { g_warning (_("Error in movie encoding : impossible to allocate AV format context")); return FALSE; } // Guess the desired container format based on file extension if (! (format_context -> oformat = av_guess_format (NULL, videofile, NULL))) { g_warning (_("Error in movie encoding : impossible to guess container format : change file name")); return FALSE; } output_format = format_context -> oformat; video_stream = add_video_stream (format_context, video_codec, vopts); if (video_stream == NULL) { g_warning (_("Error in movie encoding : impossible to create video stream")); return FALSE; } /* open the codec */ if ((error = avcodec_open2 (video_stream -> cc, video_codec, NULL)) < 0) { // Can not open codec g_warning (_("Error in movie encoding : impossible to open codec, error= %s"), av_err2str(error)); return FALSE; } avcodec_parameters_from_context (video_stream -> st -> codecpar, video_stream -> cc); #if LIBAVCODEC_VERSION_MAJOR > 52 av_dump_format (format_context, 0, videofile, 1); #else dump_format (av_format_context, 0, videofile, 1); #endif #if LIBAVCODEC_VERSION_MAJOR > 52 if (avio_open (& format_context -> pb, videofile, AVIO_FLAG_WRITE) < 0) #else if (url_fopen (& av_format_context -> pb, videofile, URL_WRONLY) < 0) #endif { // error impossible to open output file g_warning (_("Error in movie encoding : impossible to open video file '%s'"), videofile); return FALSE; } #if LIBAVCODEC_VERSION_MAJOR > 52 if (avformat_write_header (format_context, NULL) < 0) #else if (av_set_parameters (av_format_context, NULL) < 0) #endif { g_warning (_("Error in movie encoding : impossible to write the AV format header")); return FALSE; } view -> anim -> last = view -> anim -> first; if (vopts -> oglquality != 0) { q = view -> anim -> last -> img -> quality; view -> anim -> last -> img -> quality = vopts -> oglquality; } int frame_id; frame_start = 0; if (vopts -> codec == 0) { frame_start = 1; write_video_frame (format_context, video_stream, 0, view); } else if (vopts -> codec == 2) { frame_start = 24; for (frame_id = 0; frame_id < frame_start; frame_id ++) { write_video_frame (format_context, video_stream, frame_id, view); } } re_create_all_md_shaders (view); recreate_all_shaders (view); for (frame_id=0; frame_id<2; frame_id++) { old_cmap[frame_id] = allocint (get_project_by_id(view -> proj) -> steps); set_old_cmap (view -> anim -> last -> img, 0, frame_id); } double fraction; #ifdef GTK4 // GMainContext * context = g_main_loop_get_context (Event_loop[dialog_id]); #endif // GTK4 for (frame_id = frame_start; frame_id < num_frames+frame_start; frame_id ++) { //g_debug ("Rendering frame: %d, id= %d", frame_id-frame_start, view -> anim -> last -> img -> id); if (vopts -> oglquality != 0) { view -> anim -> last -> img -> quality = vopts -> oglquality; } write_video_frame (format_context, video_stream, frame_id, view); if (frame_id-frame_start > 0 && frame_id-frame_start - 10*((frame_id-frame_start)/10) == 0) { fraction = (double)(frame_id-frame_start+1)/num_frames; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), fraction); #ifdef GTK3 while (gtk_events_pending()) gtk_main_iteration(); #else // while (g_main_context_pending (context)) g_main_context_iteration (context, TRUE); #endif } if (frame_id-frame_start < num_frames-1) { check_to_update_shaders (view, view -> anim -> last -> img, view -> anim -> last -> next -> img, vopts -> oglquality); view -> anim -> last = view -> anim -> last -> next; } } if (vopts -> oglquality != 0) { view -> anim -> last -> img -> quality = q; } av_write_trailer (format_context); if (!(output_format -> flags & AVFMT_NOFILE)) { /* close the output file */ #if LIBAVCODEC_VERSION_MAJOR > 52 avio_closep (& format_context -> pb); #else url_fclose (av_format_context -> pb); #endif } close_stream (format_context, video_stream); return TRUE; } static GLuint fbo; static GLuint rbo_color; static GLuint rbo_depth; /*! \fn void init_frame_buffer (int x, int y) \brief init a frame buffer \param x x size - image width \param y y size - image height */ void init_frame_buffer (int x, int y) { glGenFramebuffers (1, & fbo); glBindFramebuffer (GL_FRAMEBUFFER, fbo); /* Color renderbuffer. */ glGenRenderbuffers (1, & rbo_color); glBindRenderbuffer (GL_RENDERBUFFER, rbo_color); /* Storage */ // glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB32F, x, y); // glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, x, y); glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB, x, y); glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo_color); /* Depth renderbuffer. */ glGenRenderbuffers (1, & rbo_depth); glBindRenderbuffer (GL_RENDERBUFFER, rbo_depth); glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, x, y); glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo_depth); glReadBuffer (GL_COLOR_ATTACHMENT0); } /*! \fn void close_frame_buffer () \brief close the frame buffer */ void close_frame_buffer () { glDeleteFramebuffers (1, &fbo); glDeleteRenderbuffers (1, &rbo_color); glDeleteRenderbuffers (1, &rbo_depth); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) \brief saving a movie - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) \brief saving a movie - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * videofile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif video_options * vopts = (video_options *)data; glwin * view = get_project_by_id (vopts -> proj) -> modelgl; int x = view -> pixels[0]; int y = view -> pixels[1]; int i; for (i=0; i<2; i++) tmp_pixels[i] = view -> pixels[i]; view -> pixels[0] = vopts -> video_res[0]; view -> pixels[1] = vopts -> video_res[1]; // On macOS, the CoreAnimation layer may invalidate the current GL context // between the file dialog callback and our OpenGL calls. gtk_gl_area_make_current ((GtkGLArea *)view -> plot); init_frame_buffer (vopts -> video_res[0], vopts -> video_res[1]); init_opengl (); re_create_all_md_shaders (view); recreate_all_shaders (view); in_movie_encoding = TRUE; gboolean res = create_movie (view, vopts, videofile); if (! res) { show_warning (_("An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble"), view -> win); } close_frame_buffer (); in_movie_encoding = FALSE; re_create_all_md_shaders (view); recreate_all_shaders (view); reshape (view, x, y, TRUE); update (view); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn void save_movie (glwin * view, video_options * vopts) \brief saving a movie - prepare the dialog \param view the target glwin \param vopts the video encoding options */ void save_movie (glwin * view, video_options * vopts) { GtkFileFilter * filter; gchar * str; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Render Movie"), GTK_WINDOW(view -> win), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); str = g_strdup_printf ("%s.%s", prepare_for_title(get_project_by_id(view -> proj) -> name), codec_list[vopts -> codec]); gtk_file_chooser_set_current_name (chooser, str); g_free (str); filter = gtk_file_filter_new (); str = g_strdup_printf (_("%s file (*.%s)"), codec_name[vopts -> codec], codec_list[vopts -> codec]); gtk_file_filter_set_name (GTK_FILE_FILTER(filter), str); g_free (str); str = g_strdup_printf ("*.%s", codec_list[vopts -> codec]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), str); g_free (str); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_movie), vopts); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_movie), vopts); #endif } atomes_1.3.1/src/opengl/draw/d_measures.c0000664000175000017500000005646115212624223020024 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_measures.c * @short Functions to prepare the OpenGL rendering of the measure(s) * @author Sébastien Le Roux */ /* * This file: 'd_measures.c' * * Contains: * - The functions to prepare the OpenGL rendering of the measure(s) * * List of functions: int prepare_measure_shaders (int type, int shaders); void draw_angle_label (atom * at, atom * bt, atom * ct, int pi); void set_measure_color (int selected, int id, int num); void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi); void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); void draw_bond_label (atom * at, atom * bt, int pi); void setup_this_measured_bond (int s, int sa, int sb, int pi); void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); void create_measures_lists (); */ #include "global.h" #include "glview.h" extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void unrotate_camera (); extern double arc_cos (double val); extern ColRGBA init_color (int id, int numid); extern void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store); extern void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store); extern void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store); extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); extern void clean_labels (int id); extern int objects[3]; extern int * object_was_selected[3]; extern int ** tmp_object_id[3]; int type_of_measure; int measures_drawing; atom_in_selection * tmp_a, * tmp_b, * tmp_c, * tmp_d; atom * ta, * tb, * tc, * td, * te, * tf; distance dist_ba, dist_bc; int * shift; double dist; object_3d * measure; ColRGBA col; ColRGBA col_gdk; /*! \fn void draw_angle_label (atom * at, atom * bt, atom * ct, int pi) \brief prepare an measured angle label OpenGL rendering \param at 1st atom \param bt 2nd atom \param ct 3rd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_angle_label (atom * at, atom * bt, atom * ct, int pi) { angle real_theta = angle_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt, ct); gchar * str; if (real_theta.pbc) { str = g_strdup_printf("%.1lf° (%s)", real_theta.angle, _("PBC")); } else { str = g_strdup_printf("%.1lf°", real_theta.angle); } float ls[3] = {15.0, 15.0, 0.0}; vec3_t pos = vec3(bt -> x, bt -> y, bt -> z); prepare_string (str, 3+pi, plot -> labels[3+pi].color[0], pos, ls, at, bt, ct); g_free (str); } /*! \fn void set_measure_color (int selected, int id, int num) \brief set measure color \param selected total number of selected atom(s) \param id measured element id number \param num total number of measured element(s) in the list */ void set_measure_color (int selected, int id, int num) { if (selected) { col = init_color (id, num); } else { col.red = 1.0 - plot -> back -> color.red; col.green = 1.0 - plot -> back -> color.green; col.blue = 1.0 - plot -> back -> color.blue; col.alpha = 1.0; } } /*! \fn void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) \brief prepare measured angle to render \param s measured line (0) or label (1) \param sa 1st atom \param sb 2nd atom \param sc 3rd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) { float alpha = 1.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b, pos_c; atom * at, * bt, * ct; at = & proj_gl -> atoms[step][sa]; bt = & proj_gl -> atoms[step][sb]; ct = & proj_gl -> atoms[step][sc]; for (p=0; p abc -> extra_cell[0]+1;p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); at_shift (ct, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3(bt -> x, bt -> y, bt -> z); pos_c = vec3(ct -> x, ct -> y, ct -> z); if (s == 0) { setup_line_vertice (measure -> vertices, pos_a, col, alpha); setup_line_vertice (measure -> vertices, pos_b, col, alpha); setup_line_vertice (measure -> vertices, pos_c, col, alpha); } else { // Text location for the instances ! draw_angle_label (at, bt, ct, pi); } at_unshift (at, shift); at_unshift (bt, shift); at_unshift (ct, shift); alpha = 0.5; } } } } /*! \fn void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured angles selection \param view the target glwin \param id action to perform: \n -2 = save angles selection, \n -1 = clean angles selection, \n 0 = prepare OpenGL buffer data analysis mode selection measure, \n 1 = prepare OpenGL buffer data edition mode selection measure, \n 2 = fill angles tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j, k, l, m; int ** did_it; int aid; gboolean do_it; //gboolean colored; image * img = view -> anim -> last -> img; // Total number of angles: int n_angl = num_angles (img -> selected[pi] -> selected); did_it = allocdint (n_angl, 3); aid = 0; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected; i++) { tmp_b = img -> selected[pi] -> first; for (j=0; j < img -> selected[pi] -> selected; j++) { if (tmp_b -> id != tmp_a -> id) { tmp_c = img -> selected[pi] -> first; for (k=0; k < img -> selected[pi] -> selected; k++) { if (tmp_c -> id != tmp_a -> id && tmp_c -> id != tmp_b -> id) { do_it = TRUE; for (l=0; l id && ((did_it[l][0] == tmp_a -> id && did_it[l][2] == tmp_c -> id) || (did_it[l][2] == tmp_a -> id && did_it[l][0] == tmp_c -> id))) { do_it = FALSE; break; } } if (do_it) { did_it[aid][0] = tmp_a -> id; did_it[aid][1] = tmp_b -> id; did_it[aid][2] = tmp_c -> id; switch (id) { case -2: for (m=0; m<3; m++) tmp_object_id[1][aid][m] = did_it[aid][m]; break; case -1: img -> selected[pi] -> selected_angles[aid] = 0; break; default: if (img -> selected[pi] -> selected_angles[aid] || img -> m_is_pressed == 2 || id == 2) { //colored = FALSE; if (id < 2) { set_measure_color (img -> selected[pi] -> selected_angles[aid], aid, n_angl); //colored = TRUE; } switch (id) { case 2: fill_angle_model_row (view -> proj, tmp_a -> id, tmp_b -> id, tmp_c -> id, store); break; default: setup_this_measured_angle (id, tmp_a -> id, tmp_b -> id, tmp_c -> id, pi); break; } } break; } aid ++; } } if (tmp_c -> next != NULL) tmp_c = tmp_c -> next; } } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == -1) { for (i=0; i selected[pi] -> selected_angles[i] = object_was_selected[1][j]; } } } } g_free (did_it); } /*! \fn void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured dihedrals selection \param view the target glwin \param id action to perform: \n -2 = save dihedrals selection \n -1 = clean dihedrals selection \n 0 = prepare OpenGL buffer data analysis mode selection measure \n 1 = prepare OpenGL buffer data edition mode selection measure \n 2 = fill dihedrals tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j, k, l, m; int ** did_it; int did; gboolean do_it; image * img = view -> anim -> last -> img; // gboolean colored; // Total number of dihedral angles: int n_dihedral = num_dihedrals (img -> selected[pi] -> selected); did_it = allocdint (n_dihedral, 4); did = 0; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected; i++) { tmp_b = img -> selected[pi] -> first; for (j=0; j < img -> selected[pi] -> selected; j++) { if (tmp_b -> id != tmp_a -> id) { tmp_c = img -> selected[pi] -> first; for (k=0; k < img -> selected[pi] -> selected; k++) { if (tmp_c -> id != tmp_a -> id && tmp_c -> id != tmp_b -> id) { tmp_d = img -> selected[pi] -> first; for (l=0; l < img -> selected[pi] -> selected; l++) { if (tmp_d -> id != tmp_a -> id && tmp_d -> id != tmp_b -> id && tmp_d -> id != tmp_c -> id) { do_it = TRUE; for (m=0; m id && did_it[m][1] == tmp_b -> id && did_it[m][2] == tmp_c -> id && did_it[m][3] == tmp_d -> id) ||(did_it[m][0] == tmp_d -> id && did_it[m][1] == tmp_c -> id && did_it[m][2] == tmp_b -> id && did_it[m][3] == tmp_a -> id)) { do_it = FALSE; break; } } if (do_it) { did_it[did][0] = tmp_a -> id; did_it[did][1] = tmp_b -> id; did_it[did][2] = tmp_c -> id; did_it[did][3] = tmp_d -> id; switch (id) { case -2: for (m=0; m<4; m++) tmp_object_id[2][did][m] = did_it[did][m]; break; case -1: img -> selected[pi] -> selected_dihedrals[did] = 0; break; default: if (img -> selected[pi] -> selected_dihedrals[did] || img -> m_is_pressed == 3 || id == 2) { //colored = FALSE; if (id < 2) { set_measure_color (img -> selected[pi] -> selected_dihedrals[did], did, n_dihedral); //colored = TRUE; } switch (id) { case 0: //draw_angle_arc (colored); break; case 1: //draw_angle_label (); break; case 2: fill_dihedral_model_row (view -> proj, tmp_a -> id, tmp_b -> id, tmp_c -> id, tmp_d -> id, store); break; } } break; } did ++; } } if (tmp_d -> next != NULL) tmp_d = tmp_d -> next; } } if (tmp_c -> next != NULL) tmp_c = tmp_c -> next; } } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == -1) { for (i=0; i selected[pi] -> selected_dihedrals[i] = object_was_selected[2][j]; } } } } g_free (did_it); } /*! \fn void draw_bond_label (atom * at, atom * bt, int pi) \brief prepare a measured distance OpenGL rendering \param at 1st atom \param bt 2nd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_bond_label (atom * at, atom * bt, int pi) { distance dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt); vec3_t pos; if (dist.pbc) { pos = vec3 (at -> x - (at -> x - bt -> x)/2.0, at -> y - (at -> y - bt -> y)/2.0, at -> z - (at -> z - bt -> z)/2.0); } else { pos = vec3 (at -> x-dist.x/2.0, at -> y-dist.y/2.0, at -> z-dist.z/2.0); } gchar * str; if (dist.pbc) { str = g_strdup_printf("%.3lf Ã… (%s)", dist.length, _("PBC")); } else { str = g_strdup_printf("%.3lf Ã…", dist.length); } float ls[3] = {-15.0, 15.0, 0.0}; prepare_string (str, 3+pi, plot -> labels[3+pi].color[0], pos, ls, at, bt, NULL); g_free (str); } /*! \fn void setup_this_measured_bond (int s, int sa, int sb, int pi) \brief prepare measured distance to render \param s measured line (0) or label (1) \param sa 1st atom \param sb 2nd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void setup_this_measured_bond (int s, int sa, int sb, int pi) { float alpha = 1.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b; atom * at, * bt; at = & proj_gl -> atoms[step][sa]; bt = & proj_gl -> atoms[step][sb]; for (p=0; p abc -> extra_cell[0]+1;p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3(bt -> x, bt -> y, bt -> z); if (s == 0) { setup_line_vertice (measure -> vertices, pos_a, col, alpha); setup_line_vertice (measure -> vertices, pos_b, col, alpha); } else { // Text location for the instances ! draw_bond_label (at, bt, pi); } at_unshift (at, shift); at_unshift (bt, shift); alpha = 0.5; } } } } /*! \fn void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured distances selection \param view the target glwin \param id action to perform: \n -2 = save bonds selection \n -1 = clean bonds selection \n 0 = prepare OpenGL buffer data analysis mode selection measure \n 1 = prepare OpenGL buffer data edition mode selection measure \n 2 = fill bonds distances tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j; int ** did_it; int bid; image * img = view -> anim -> last -> img; int n_dist = num_bonds (img -> selected[pi] -> selected); if (id == 1) shift = allocint (2); did_it = allocdint (n_dist, 2); bid = -1; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected-1; i++) { tmp_b = tmp_a -> next; for (j=i+1; j < img -> selected[pi] -> selected; j++) { bid ++; did_it[bid][0] = tmp_a -> id; did_it[bid][1] = tmp_b -> id; switch (id) { case -2: tmp_object_id[0][bid][0] = tmp_a -> id; tmp_object_id[0][bid][1] = tmp_b -> id; break; case -1: img -> selected[pi] -> selected_bonds[bid] = 0; break; default: if (img -> selected[pi] -> selected_bonds[bid] || img -> m_is_pressed == 1 || id == 2) { if (id < 2) { set_measure_color (img -> selected[pi] -> selected_bonds[bid], bid, n_dist); } switch (id) { case 2: fill_bond_model_row (view -> proj, tmp_a -> id, tmp_b -> id, store); break; default: setup_this_measured_bond (id, tmp_a -> id, tmp_b -> id, pi); break; } } break; } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == 1) g_free (shift); if (id == -1) { for (i=0; i selected[pi] -> selected_bonds[i] = object_was_selected[0][j]; } } } } g_free (did_it); } /*! \fn void prepare_measure_shaders (int mode) \brief prepare measure OpenGL rendering \param mode (0 = analysis mode, 1 = edition mode) */ void prepare_measure_shaders (int mode) { int nshaders = 0; if (plot -> selected[mode] -> selected > 1 && plot -> selected[mode] -> selected < MAX_IN_SELECTION) { if (plot -> mpattern[mode] > -1) { // First the bond distances measure = g_malloc0(sizeof*measure); measure -> vert_buffer_size = LINE_BUFF_SIZE; measure -> num_vertices = 2 * num_bonds (plot -> selected[mode] -> selected) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); measure -> vertices = allocfloat (measure -> vert_buffer_size*measure -> num_vertices); nbs = 0; bonds_loop (wingl, 0, mode, NULL); if (plot -> mpattern[mode] != 2) { wingl -> ogl_glsl[MEASU][mode][0] = init_shader_program (MEASU, GLSL_LINES, line_vertex, line_stipple, line_stipple_color, GL_LINES, 2, 7, FALSE, measure); } else { wingl -> ogl_glsl[MEASU][mode][0] = init_shader_program (MEASU, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 7, FALSE, measure); } wingl -> ogl_glsl[MEASU][mode][0] -> line_width = plot -> mwidth[mode]; nshaders ++; // The angles if (plot -> selected[mode] -> selected > 2) { measure = g_malloc0(sizeof*measure); measure -> vert_buffer_size = LINE_BUFF_SIZE; measure -> num_vertices = 3 * num_angles (plot -> selected[mode] -> selected) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); measure -> vertices = allocfloat (measure -> vert_buffer_size*measure -> num_vertices); nbs = 0; angles_loop (wingl, 0, mode, NULL); if (plot -> mpattern[mode] != 2) { wingl -> ogl_glsl[MEASU][mode][1] = init_shader_program (MEASU, GLSL_LINES, angle_vertex, angle_stipple, line_stipple_color, GL_TRIANGLES, 2, 7, FALSE, measure); } else { wingl -> ogl_glsl[MEASU][mode][1] = init_shader_program (MEASU, GLSL_LINES, angle_vertex, angle_stipple, angle_color, GL_TRIANGLES, 2, 7, FALSE, measure); } wingl -> ogl_glsl[MEASU][mode][1] -> line_width = plot -> mwidth[mode]; nshaders ++; } } // When all labels are found we render the text if any if (plot -> labels[3+mode].list != NULL) { measures_drawing = nshaders; render_all_strings (MEASU, 3+mode); } } } /*! \fn void create_measures_lists () \brief prepare measure(s) OpenGL rendering */ void create_measures_lists () { // First we draw all lines/angles displayed on screen #ifdef DEBUG g_debug ("Measure LIST"); #endif cleaning_shaders (wingl, MEASU); clean_labels (3); clean_labels (4); wingl -> create_shaders[MEASU] = FALSE; wingl -> n_shaders[MEASU][0] = wingl -> n_shaders[MEASU][1] = 0; int i, j, k; i = (is_atom_win_active(wingl) || (wingl -> mode == EDITION && wingl -> selection_mode == NSELECTION-1)) ? 1 : 0; for (j=i; j<2; j++) { if (plot -> selected[j] -> selected > 1 && plot -> selected[j] -> selected < MAX_IN_SELECTION) { if (plot -> mpattern[j] > -1) { wingl -> n_shaders[MEASU][j] ++; if (plot -> selected[j] -> selected > 2) wingl -> n_shaders[MEASU][j] ++; } // First we need to prepare the labels type_of_measure = 6; bonds_loop (wingl, 1, j, NULL); if (plot -> selected[j] -> selected >= 3) { type_of_measure = 9; angles_loop (wingl, 1, j, NULL); } if (plot -> labels[3+j].list != NULL) { // shaders for the labels if any wingl -> n_shaders[MEASU][j] += (plot -> labels[3+j].render+1) * (plot -> labels[3+j].list -> last -> id + 1); } } } if (wingl -> n_shaders[MEASU][0] || wingl -> n_shaders[MEASU][1]) { measures_drawing = 0; for (k=i; k<2; k++) { wingl -> ogl_glsl[MEASU][k] = g_malloc0(wingl -> n_shaders[MEASU][k]*sizeof*wingl -> ogl_glsl[MEASU][k]); prepare_measure_shaders (k); } } } atomes_1.3.1/src/opengl/draw/d_rings.c0000664000175000017500000002053515212624223017313 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_rings.c * @short Functions to prepare the OpenGL rendering of rings polyhedra * @author Sébastien Le Roux */ /* * This file: 'd_rings.c' * * Contains: * - The functions to prepare the OpenGL rendering of rings polyhedra * * List of functions: int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go); void create_ring_lists (); */ #include "global.h" #include "glview.h" #include "color_box.h" extern ColRGBA pcol; extern int nbs, nbl, nba; extern void setup_tetrahedron (float * vertices, GLfloat ** xyz); extern void setup_polyhedron (float * vertices, GLfloat ** xyz, int s); extern void get_centroid (GLfloat ** xyz, int id); extern void check_triangles (int s, GLfloat ** xyz); /*! \fn int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) \brief prepare a ring polyhedra OpenGL rendering \param vertices the ring atomic positions buffer to fill, if any \param se type of ring \param ge the coord id for this size of ring \param ta the size of the ring \param id the ring id number \param go render the ring or not (1/0) */ int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) { int i, j, k, l, m; gboolean clones; gboolean add_poly; gboolean old_pbc; GLfloat *** xyz; distance d; atom at, bt; xyz = alloctfloat (ta, ta, 3); j = -1; clones = FALSE; j = wingl -> all_rings[se][step][ta-1][id][0]; l = 0; xyz[0][l][0] = proj_gl -> atoms[step][j].x; xyz[0][l][1] = proj_gl -> atoms[step][j].y; xyz[0][l][2] = proj_gl -> atoms[step][j].z; for (i=1; i < ta; i++) { j = wingl -> all_rings[se][step][ta-1][id][i]; at = proj_gl -> atoms[step][j]; bt.x = xyz[0][i-1][0]; bt.y = xyz[0][i-1][1]; bt.z = xyz[0][i-1][2]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & at, & bt); if (d.pbc) clones = TRUE; xyz[0][i][0] = xyz[0][i-1][0] + d.x; xyz[0][i][1] = xyz[0][i-1][1] + d.y; xyz[0][i][2] = xyz[0][i-1][2] + d.z; } l = ta; m = 0; if (clones) { old_pbc = cell_gl -> pbc; cell_gl -> pbc = FALSE; add_poly = TRUE; while (add_poly) { for (i=0; i all_rings[se][step][ta-1][id][i]; at = proj_gl -> atoms[step][j]; add_poly = TRUE; for (k=0; k npt) ? step : 0, & at, & bt); if (d.length < 0.01) { add_poly = FALSE; break; } } if (add_poly) break; } if (add_poly) { m ++; bt.x = xyz[0][i][0]; bt.y = xyz[0][i][1]; bt.z = xyz[0][i][2]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & at, & bt); for (j=0; j pbc = old_pbc; } if (! go) return m+1; if (plot -> draw_clones || ! clones || plot -> cloned_poly) { for (i=0; i spcolor[4+se][0][ge]; get_centroid (xyz[i], l); if (l == 4) { setup_tetrahedron (vertices, xyz[i]); } else { check_triangles (l, xyz[i]); setup_polyhedron (vertices, xyz[i], l); } } } g_free (xyz); xyz = NULL; return 0; } /*! \fn void create_ring_lists () \brief prepare ring(s) polyhedra OpenGL rendering */ void create_ring_lists () { // The order to draw the polyhedra could be based on the alpha channel // from the most transparent to the less transparent // However a better way is to used the neighbor list, if 3 atoms are linked thru bonds // and that all 3 of them are involved in polyhedra then the one at // the center is to be drawn first ... yet to be implemented int i, j, k, l, m, n; #ifdef DEBUG g_debug ("Ring LIST"); #endif cleaning_shaders (wingl, RINGS); if (wingl -> rings) { int rtot = 0; int * nrings[5]; for (i=0; i < 5; i++) { nrings[i] = g_malloc0(coord_gl -> totcoord[i+4]*sizeof*nrings[i]); for (j=0; j < coord_gl -> totcoord[i+4]; j++) { // k is the size of the ring in total number of atoms: k = coord_gl -> geolist[i+4][0][j]; l = 0; if (plot -> show_poly[i+4][j]) { // Show all rings for (m = 0; m < wingl -> num_rings[i][step][k-1]; m++) { l += prepare_rings_gl (NULL, i, j, k, m, FALSE); } } else if (! in_movie_encoding || plot -> i_rings[i] == NULL) { // Show selected rings for (m=0; m < wingl -> num_rings[i][step][k-1]; m++) { if (wingl -> show_rpoly[i][step][k-1][m]) { l += prepare_rings_gl (NULL, i, j, k, m, FALSE); } } } // m is the number of summit of the polyhedra // +1 if only a 3 atom size ring to include a centroid m = (k == 3) ? k+1: k; // Then we need the max number of triangles for all these polyedron nrings[i][j] = l*(m*(m-1)*(m-2)/6); rtot += nrings[i][j]*3; } if (in_movie_encoding && plot -> i_rings[i] != NULL) { for (l=0; l i_rings[i][0][0]; l++) { j = plot -> i_rings[i][l+1][0]; k = coord_gl -> geolist[i+4][0][j]; m = prepare_rings_gl (NULL, i, j, k, plot -> i_rings[i][l+1][1], FALSE); if (m) { n = (k == 3) ? k+1: k; nrings[i][j] += (n*(n-1)*(n-2)/6); rtot += (n*(n-1)*(n-2)/6)*3; } } } } if (rtot > 0) { wingl -> ogl_glsl[RINGS][step] = g_malloc0(sizeof*wingl -> ogl_glsl[RINGS][step]); wingl -> n_shaders[RINGS][step] = 1; object_3d * rings = g_malloc0(sizeof*rings); rings -> vert_buffer_size = POLY_BUFF_SIZE; rings -> num_vertices = rtot * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); rings -> vertices = allocfloat (rings -> vert_buffer_size*rings -> num_vertices); nba = 0; for (i=0; i < 5; i++) { for (j=0; j < coord_gl -> totcoord[i+4]; j++) { if (nrings[i][j]) { k = coord_gl -> geolist[i+4][0][j]; if (plot -> show_poly[i+4][j]) { for (l=0; l < wingl -> num_rings[i][step][k-1]; l++) { prepare_rings_gl (rings -> vertices, i, j, k, l, TRUE); } } else if (! in_movie_encoding || plot -> i_rings[i] == NULL) { for (l=0; l < wingl -> num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) { prepare_rings_gl (rings -> vertices, i, j, k, l, TRUE); } } } } } if (in_movie_encoding && plot -> i_rings[i] != NULL) { for (l=0; l i_rings[i][0][0]; l++) { j = plot -> i_rings[i][l+1][0]; k = coord_gl -> geolist[i+4][0][j]; prepare_rings_gl (rings -> vertices, i, j, k, plot -> i_rings[i][l+1][1], TRUE); } } } wingl -> ogl_glsl[RINGS][step][0] = init_shader_program (RINGS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, rings); } } wingl -> create_shaders[RINGS] = FALSE; } atomes_1.3.1/src/opengl/draw/image.c0000664000175000017500000002501515212624223016746 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file image.c * @short Functions to render an image from the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'image.c' * * Contains: * - The functions to render an image from the OpenGL window * * List of functions: void render_image (glwin * view, video_options * iopts); void simple_image_render (); G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "movie.h" #include "preferences.h" #include #ifndef GTKGLAREA extern GdkWindow * xwin; extern GLXContext glcontext; extern Pixmap pixmap; extern GLXPixmap glpixmap; #endif extern GdkPixbuf * pixbuf; extern void fill_image (VideoStream * vs, int width, int height, glwin * view); extern void init_frame_buffer (int x, int y); extern void close_frame_buffer (); char * image_name[IMAGE_FORMATS] = {"PNG", "JPG/JPEG", "TIFF", "Bitmap"}; char * image_list[IMAGE_FORMATS] = {"png", "jpeg", "tiff", "bmp"}; int render_image_format = NONE; int render_image_style = NONE; int render_image_axis = NONE; int render_image_box = NONE; int render_image_rep = NONE; int render_image_acolor = NONE; int render_image_pcolor = NONE; gboolean trigger_fragment_analysis = FALSE; gboolean trigger_molecule_analysis = FALSE; ColRGBA * render_image_back_color = NULL; int render_image_back_grad = NONE; int render_image_back_dir = NONE; float render_image_back_pos = NONE; ColRGBA * render_image_grad_color[2]; ColRGBA * render_image_box_color = NULL; int * render_image_pixels = NULL; gchar * render_image_output = NULL; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) \brief render an image from the OpenGL window - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) \brief render an image from the OpenGL window - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { video_options * iopts = (video_options *)data; gchar * videofile; if (atomes_render_image) { videofile = g_strdup_printf ("%s", render_image_output); } else { videofile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } project * this_proj = get_project_by_id (iopts -> proj); glwin * view = this_proj -> modelgl; // On macOS, the CoreAnimation layer may invalidate the current GL context // between the file dialog callback and the OpenGL calls. Without explicitly // making the context current, FBO creation and rendering silently fail or // operate on the wrong context, causing partial or missing image captures. gtk_gl_area_make_current ((GtkGLArea *)view -> plot); init_frame_buffer (iopts -> video_res[0], iopts -> video_res[1]); init_opengl (); int i, x, y, q; for (i=0; i n_shaders[i][step] = -1; } recreate_all_shaders (view); in_movie_encoding = TRUE; if (iopts -> oglquality != 0) { q = view -> anim -> last -> img -> quality; view -> anim -> last -> img -> quality = iopts -> oglquality; } for (i=0; i<2; i++) tmp_pixels[i] = view -> pixels[i]; x = view -> pixels[0]; y = view -> pixels[1] - 100; view -> pixels[0] = iopts -> video_res[0]; view -> pixels[1] = iopts -> video_res[1]; fill_image (NULL, iopts -> video_res[0], iopts -> video_res[1], view); GError * error = NULL; gboolean res = gdk_pixbuf_savev (pixbuf, videofile, image_list[iopts -> codec], NULL, NULL, & error); if (! res && ! atomes_from_libreoffice) { show_warning (_("An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble"), view -> win); } close_frame_buffer (); in_movie_encoding = FALSE; if (! atomes_render_image) { if (iopts -> oglquality != 0) view -> anim -> last -> img -> quality = q; for (i=0; i n_shaders[i][step] = -1; } recreate_all_shaders (view); reshape (view, x, y, TRUE); update (view); } } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn void render_image (glwin * view, video_options * iopts) \brief render an image from the OpenGL window - prepare the dialog \param view the target glwin \param iopts the rendering options */ void render_image (glwin * view, video_options * iopts) { GtkFileFilter * filter; gchar * str; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Render Image"), GTK_WINDOW(view -> win), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); str = g_strdup_printf ("%s.%s", prepare_for_title(get_project_by_id(view -> proj) -> name), image_list[iopts -> codec]); gtk_file_chooser_set_current_name (chooser, str); g_free (str); filter = gtk_file_filter_new (); str = g_strdup_printf (_("%s file (*.%s)"), image_name[iopts -> codec], image_list[iopts -> codec]); gtk_file_filter_set_name (GTK_FILE_FILTER(filter), str); g_free (str); str = g_strdup_printf ("*.%s", image_list[iopts -> codec]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), str); g_free (str); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_render_image), iopts); #else run_this_gtk_dialog (info, G_CALLBACK(run_render_image), iopts); #endif } /*! \fn void simple_image_render () \brief simple direct rendering from command line */ void simple_image_render () { video_options * vopts = g_malloc0(sizeof*vopts); vopts -> proj = activep; vopts -> oglquality = 0; vopts -> video_res = duplicate_int (2, (atomes_from_libreoffice) ? active_glwin -> pixels : render_image_pixels); int h, i, j, k, l, m; for (i=0; i<2; i++) active_glwin -> pixels[i] = vopts -> video_res[i]; vopts -> codec = render_image_format; if (render_image_style != NONE) { if (render_image_style < OGL_STYLES) { active_image -> style = render_image_style; } else { active_image -> style = SPACEFILL; h = render_image_style - OGL_STYLES; active_image -> filled_type = h; j = active_project -> nspec; k = (h) ? 9 + h : 2; l = (h) ? 12 + h : 7; for (i=0; i chemistry -> chem_prop[CHEM_Z][i]; active_image -> atomicrad[i] = (default_o_at_rs[2]) ? default_at_rs[2] : get_radius (2, h, m, default_atomic_rad[k]); active_image -> atomicrad[i+j] = (default_o_at_rs[7]) ? default_at_rs[7] : get_radius (7, h, m, default_atomic_rad[l]); } } } if (render_image_rep != NONE) active_image -> rep = render_image_rep; if (render_image_box != NONE) { if (active_image -> abc) { active_image -> abc -> box = render_image_box; } if (render_image_box_color) { active_image -> abc -> color = * render_image_box_color; } } if (render_image_axis != NONE) { if (active_image -> xyz) { active_image -> xyz -> axis = render_image_axis; } } if (render_image_acolor != NONE) { active_image -> color_map[0] = render_image_acolor; } if (render_image_pcolor != NONE) { // This also trigger to render polyhedra active_image -> color_map[1] = render_image_pcolor; i = (render_image_pcolor == 2) ? 1 : 0; for (j=0; j totcoord[i]; j++) { active_image -> show_poly[i][j] = TRUE; } } if (render_image_back_grad != NONE) { active_image -> back -> gradient = render_image_back_grad; } if (render_image_back_color) { active_image -> back -> gradient = 0; active_image -> back -> color = * render_image_back_color; } if (render_image_back_dir != NONE) { if ((active_image -> back -> gradient == 1 && render_image_back_dir < 5) || (active_image -> back -> gradient == 2 && render_image_back_dir < 8)) { active_image -> back -> direction = render_image_back_dir; } } if (render_image_back_pos != NONE) { active_image -> back -> position = render_image_back_pos; } for (i=0; i<2; i++) { if (render_image_grad_color[i]) { active_image -> back -> gradient_color[i] = * render_image_grad_color[i]; } } run_render_image (NULL, GTK_RESPONSE_ACCEPT, vopts); g_free (vopts); if (! atomes_from_libreoffice) to_close_this_project (0, active_project); } atomes_1.3.1/src/opengl/draw/ogl_text.c0000664000175000017500000005602015212624223017511 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_text.c * @short Functions to prepare OpenGL rendering for text * @author Sébastien Le Roux */ /* * This file: 'ogl_text.c' * * Contains: * - The functions to prepare OpenGL rendering for text * * List of functions: int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff); void render_string (int glsl, int id, screen_string * this_string); void debug_string (screen_string * this_string); void render_all_strings (int glsl, int id); void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); static void normalize_text_size (GLenum texture, int * width, int * height); screen_string * was_not_rendered_already (char * word, screen_string * list); ColRGBA * opposite_color (ColRGBA col); object_3d * create_string_texture (int cwidth, int cheight, int * pixels); object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string); */ #include "global.h" #include "glview.h" #define PANGO_TEXT_SIZE 500 #define OUTLINE_WIDTH 3 #ifndef GL_CLAMP_TO_EDGE # define GL_CLAMP_TO_EDGE 0x812F #endif #ifndef GL_TEXTURE_WRAP_R # define GL_TEXTURE_WRAP_R 0x8072 #endif extern int measures_drawing; extern int type_of_measure; extern void update_string_instances (glsl_program * glsl, object_3d * obj); GLuint textures_id[2]; const int OUTLINE_BRUSH[2*OUTLINE_WIDTH+1][2*OUTLINE_WIDTH+1] = {{ 10, 30, 45, 50, 45, 30, 10 }, { 30, 65, 85, 100, 85, 65, 30 }, { 45, 85, 200, 256, 200, 85, 45 }, { 50, 100, 256, 256, 256, 100, 50 }, { 45, 85, 200, 256, 200, 85, 45 }, { 30, 65, 85, 100, 85, 65, 30 }, { 10, 30, 45, 50, 45, 30, 10 }}; /*! \fn static void normalize_text_size (GLenum texture, int * width, int * height) \brief normalize the text size \param texture the texture type \param width image width \param height image height */ static void normalize_text_size (GLenum texture, int * width, int * height) { // if the texture target is GL_TEXTURE_2D, that means that // the texture_rectangle OpenGL extension is unsupported and we must // use only square, power-of-two textures. if (texture == GL_TEXTURE_2D) { int x = max (* width, * height); // find next power of two int n; for (n = 1; n < x; n = n << 1); // the texture must be square, and its size must be a power of two. * width = * height = n; } } /*! \fn int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) \brief paint bitmap data using color \param color the color \param a opacity \param cw width \param ch height \param buff the data to paint */ int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) { int i; guint8 * row, * row_end; guint32 rgb; guint32 * p; int * bitmap; #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN rgb = ((guint32) (color.x* 255.0)) | (((guint32) (color.y * 255.0)) << 8) | (((guint32) (color.z * 255.0)) << 16); #else rgb = (((guint32) (color.x * 255.0)) << 24) | (((guint32) (color.y * 255.0)) << 16) | (((guint32) (color.z * 255.0)) << 8); #endif bitmap = allocint (cw * ch * 4); p = (guint32 *) bitmap; row = buff + cw*ch; /* past-the-end */ row_end = buff; /* beginning */ if (a == 1.0) { while (row != row_end) { row -= cw; for (i = 0; i < cw; i++) { #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN * p++ = rgb | (((guint32) row[i]) << 24); #else * p++ = rgb | ((guint32) row[i]); #endif } } } else { while (row != row_end) { row -= cw; for (i = 0; i < cw; i++) { #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN * p++ = rgb | (((guint32) (a * row[i])) << 24); #else * p++ = rgb | ((guint32) (a * row[i])); #endif } } } return bitmap; } gboolean render_format; /*! \fn object_3d * create_string_texture (int cwidth, int cheight, int * pixels) \brief OpenGL 3D string object rendering \param cwidth width \param cheight height \param pixels the data to render */ object_3d * create_string_texture (int cwidth, int cheight, int * pixels) { int i, j, n; int di, dj; int fi, fj, fn; double x, y; object_3d * new_string; new_string = g_malloc0(sizeof*new_string); if (! new_string) return NULL; int csize = cwidth * cheight; int * rawbitmap; rawbitmap = allocint (csize); if (! rawbitmap) return NULL; n = 0; for (j = 0; j < cheight; j++) { for (i = 0; i < cwidth; i++) { x = (GLubyte)(pixels [n])/255.0; y = pow(x, 0.75); rawbitmap[n] = (int)(255.0 * y); n++; } } int * neighborhood; neighborhood = allocint (csize); if (! neighborhood) return NULL; for (i = 0; i < cheight; i++) { for (j = 0; j < cwidth; j++) { n = j + i * cwidth; for (di = -OUTLINE_WIDTH; di <= OUTLINE_WIDTH; di++) { for (dj = -OUTLINE_WIDTH; dj <= OUTLINE_WIDTH; dj++) { fi = i + di; fj = j + dj; if (fi >= 0 && fi < cheight && fj >= 0 && fj < cwidth) { fn = fj + fi * cwidth; neighborhood[fn] = max (neighborhood[fn], rawbitmap[n] * OUTLINE_BRUSH[OUTLINE_WIDTH + di] [OUTLINE_WIDTH + dj]); } } } } } // Two channels, for the outline and the glyph GLubyte * channels[2]; for (i=0; i<2; i++) { channels[i] = g_malloc0(csize*sizeof*channels[i]); if (! channels[i]) return NULL; } for (n = 0; n < csize; n++) { channels[1][n] = (GLubyte)rawbitmap[n]; i = (neighborhood[n] >> 8) + rawbitmap[n]; if (i > 255) { i = 255; } channels[0][n] = (GLubyte)i; } g_free (neighborhood); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); for (i=0; i<2; i++) { glGenTextures (1, & textures_id[i]); if (! textures_id[i]) return NULL; glBindTexture (ogl_texture, textures_id[i]); glTexImage2D (ogl_texture, 0, GL_RED, cwidth, cheight, 0, GL_RED, GL_UNSIGNED_BYTE, channels[i]); glTexParameteri (ogl_texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (ogl_texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glBindTexture (ogl_texture, 0); } for (i=0; i<2; i++) g_free (channels[i]); g_free (rawbitmap); return new_string; } /*! \fn object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string) \brief OpenGL 3D pango layout object rendering \param layout the Pango layout \param texture the OpenGL texture type \param id the label id \param this_string the screen string */ object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string) { FT_Bitmap bitmap; PangoRectangle prect; object_3d * new_string; int * pixels; int cwidth, cheight; int csize; pango_layout_get_extents (layout, NULL, & prect); if (prect.width == 0 || prect.height == 0) return NULL; cheight = bitmap.rows = PANGO_PIXELS (prect.height) + 2*OUTLINE_WIDTH; cwidth = bitmap.width = PANGO_PIXELS (prect.width) + 2*OUTLINE_WIDTH; normalize_text_size (ogl_texture, & cwidth, & cheight); bitmap.pitch = cwidth; csize = cheight*cwidth; bitmap.buffer = g_malloc0(csize); memset (bitmap.buffer, 0, csize); bitmap.num_grays = 256; bitmap.pixel_mode = ft_pixel_mode_grays; pango_ft2_render_layout (& bitmap, layout, PANGO_PIXELS (-prect.x)+OUTLINE_WIDTH, OUTLINE_WIDTH); pixels = paint_bitmap (vec4(1.0,0.0,0.0,0.0), 1.0, cwidth, cheight, bitmap.buffer); g_free (bitmap.buffer); if (! plot -> labels[id].render) { new_string = g_malloc0(sizeof*new_string); new_string -> texture = -1; glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glGenTextures (1, & new_string -> texture); if (! new_string -> texture) return NULL; glBindTexture (ogl_texture, new_string -> texture); glTexImage2D (ogl_texture, 0, GL_RGBA, cwidth, cheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); glTexParameteri (ogl_texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glBindTexture (ogl_texture, 0); } else { new_string = create_string_texture (cwidth, cheight, pixels); } g_free (pixels); new_string -> num_vertices = 4; new_string -> vert_buffer_size = CHAR_BUFF_SIZE; new_string -> vertices = allocfloat (new_string -> num_vertices*CHAR_BUFF_SIZE); float x = (float) cwidth; float y = (float) cheight; float twidth = (ogl_texture == GL_TEXTURE_2D) ? 1.0 : x; float theight = (ogl_texture == GL_TEXTURE_2D) ? 1.0 : y; // 0 new_string -> vertices[0] = -x; new_string -> vertices[1] = y; new_string -> vertices[2] = 0.0; new_string -> vertices[3] = theight; // 1 new_string -> vertices[4] = -x; new_string -> vertices[5] = -y; new_string -> vertices[6] = 0.0; new_string -> vertices[7] = 0.0; // 2 new_string -> vertices[8] = x; new_string -> vertices[9] = y; new_string -> vertices[10] = twidth; new_string -> vertices[11] = theight; // 3 new_string -> vertices[12] = x; new_string -> vertices[13] = -y; new_string -> vertices[14] = twidth; new_string -> vertices[15] = 0.0; new_string -> num_instances = this_string -> num_instances; int i = (this_string -> type == 3) ? 1 : (this_string -> type == 4) ? 3 : 4; new_string -> inst_buffer_size = 3*i; new_string -> instances = duplicate_float (this_string -> num_instances*3*i, this_string -> instances); return new_string; } /*! \fn ColRGBA * opposite_color (ColRGBA col) \brief compute the opposite color \param col input color */ ColRGBA * opposite_color (ColRGBA col) { ColRGBA * ocol = g_malloc0(sizeof*ocol); ocol -> red = (1.0-col.red)/2.5; ocol -> green = (1.0-col.green)/2.5; ocol -> blue = (1.0-col.blue)/2.5; ocol -> alpha = 1.0; return ocol; } /*! \fn void render_string (int glsl, int id, screen_string * this_string) \brief render a screen string \param glsl the shader id \param id the label id \param this_string the screen string to render */ void render_string (int glsl, int id, screen_string * this_string) { int j, k, l; double font_size; // Pango elements for labels PangoContext * pcontext; PangoLayout * playout; PangoFontDescription * pfont; object_3d * string_to_render = NULL; int arr_size = (this_string -> type == 4) ? 5 : (this_string -> type == 5) ? 6 : this_string -> type; int shid = (id == 4) ? 1 : 0; //pcontext = pango_ft2_get_context (PANGO_TEXT_SIZE, PANGO_TEXT_SIZE); pcontext = pango_font_map_create_context (pango_ft2_font_map_new ()); playout = pango_layout_new (pcontext); pango_layout_set_alignment (playout, PANGO_ALIGN_CENTER); pfont = pango_font_description_from_string (plot -> labels[id].font); j = pango_font_description_get_size (pfont); font_size = j / PANGO_SCALE; if (plot -> labels[id].scale) font_size *= ((ZOOM/plot -> zoom)*(plot -> gnear/6.0)*(wingl -> p_moy/plot -> p_depth)); if (in_movie_encoding) { l = (wingl -> pixels[0] > wingl -> pixels[1]) ? 1 : 0; font_size *= ((float)wingl -> pixels[l]/(float)tmp_pixels[l]); } pango_font_description_set_absolute_size (pfont, font_size*PANGO_SCALE); pango_layout_set_font_description (playout, pfont); pango_layout_set_markup (playout, this_string -> word, strlen(this_string -> word)); string_to_render = gl_pango_render_layout (playout, ogl_texture, id, this_string); if (string_to_render == NULL) { g_warning (_("Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s"), this_string -> word, plot -> labels[id].font); } else { for (k=0; k<3; k++) string_to_render -> shift[k] = this_string -> shift[k]; string_to_render -> shift[3] = (float) plot -> labels[id].position; string_to_render -> quality = this_string -> type; j = this_string -> id; j *= (plot -> labels[id].render + 1); if (id == 1 && plot -> labels[0].list != NULL) { j += (plot -> labels[0].render + 1) * (plot -> labels[0].list -> last -> id + 1); } if (id == 2) { j += (plot -> xyz -> axis == WIREFRAME) ? 2 : 4; } else if (id == 3 || id == 4) { j += measures_drawing; } if (! plot -> labels[id].render) { if (ogl_texture == GL_TEXTURE_RECTANGLE_ARB) { wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); } else { wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); } wingl -> ogl_glsl[glsl][shid][j] -> col = duplicate_color(1, & (this_string -> col)); } else { if (ogl_texture == GL_TEXTURE_RECTANGLE_ARB) { string_to_render -> texture = textures_id[0]; wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j] -> col = opposite_color(this_string -> col); string_to_render -> texture = textures_id[1]; wingl -> ogl_glsl[glsl][shid][j+1] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j+1] -> col = duplicate_color(1, & (this_string -> col)); } else { string_to_render -> texture = textures_id[0]; wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j] -> col = opposite_color(this_string -> col); string_to_render -> texture = textures_id[1]; wingl -> ogl_glsl[glsl][shid][j+1] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j+1] -> col = duplicate_color(1, & (this_string -> col)); } } free_object_3d (string_to_render); } pango_font_description_free (pfont); // g_object_unref (pcontext); g_clear_object (& pcontext); // g_object_unref (playout); g_clear_object (& playout); } /*! \fn void debug_string (screen_string * this_string) \brief debug screen string data \param this_string */ void debug_string (screen_string * this_string) { g_debug ("STRING:: id= %d, text:: %s", this_string -> id, this_string -> word); g_debug ("STRING:: color:: r= %f, g= %f, b= %f, a= %f", this_string -> col.red, this_string -> col.green, this_string -> col.blue, this_string -> col.alpha); int i, j; j = 0; for (i=0; i num_instances; i++, j+=3) { g_debug ("STRING:: %d-th :: pos[%d][x]= %f, pos[%d][y]= %f, pos[%d][z]= %f, theta[%d]= %f", i, i, this_string -> instances[j], i, this_string -> instances[j+1], i, this_string -> instances[j+2], i, this_string -> instances[j+2]); } g_debug ("STRING:: shift:: x= %f, y= %f, z= %f", this_string -> shift[0], this_string -> shift[1], this_string -> shift[2]); g_debug ("STRING:: show :: %f", this_string -> shift[3]); } /*! \fn void render_all_strings (int glsl, int id) \brief render all string to be rendered for a label list \param glsl shader id \param id label id */ void render_all_strings (int glsl, int id) { if (plot -> labels[id].list != NULL) { screen_string * this_string = plot -> labels[id].list -> last; while (this_string != NULL) { //if (glsl == MEASU) debug_string (this_string); render_string (glsl, id, this_string); this_string = this_string -> prev; } } } /*! \fn screen_string * was_not_rendered_already (char * word, screen_string * list) \brief check if a string was not already rendered and the corresponding screen string created \param word the string to render \param list the screen string list */ screen_string * was_not_rendered_already (char * word, screen_string * list) { if (list != NULL) { screen_string * tmp_string = list -> last; while (tmp_string != NULL) { if (g_strcmp0 (tmp_string -> word, word) == 0) { return tmp_string; } tmp_string = tmp_string -> prev; } tmp_string = NULL; g_free (tmp_string); } return NULL; } /*! \fn void add_string_instance (screen_string * string, vec3_t pos, atom * at, atom * bt, atom * ct) \brief add an instance to a screen string \param string the screen string to increase \param pos the position \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void add_string_instance (screen_string * string, vec3_t pos, atom * at, atom * bt, atom * ct) { int i, j; i = 0; j = (string -> type == 3) ? 1 : (type_of_measure == 6) ? 3 : 4; if (string -> num_instances > 0) { float * instances = duplicate_float (3*j*string -> num_instances, string -> instances); g_free (string -> instances); string -> instances = allocfloat (3*j*(string -> num_instances+1)); for (i=0; i<3*j*string -> num_instances; i++) { string -> instances[i] = instances[i]; } } else { string -> instances = allocfloat (3*j); } string -> num_instances ++; string -> instances[i] = pos.x; string -> instances[i+1] = pos.y; string -> instances[i+2] = pos.z; if (j > 1) { string -> instances[i+3] = at -> x; string -> instances[i+4] = at -> y; string -> instances[i+5] = at -> z; string -> instances[i+6] = bt -> x; string -> instances[i+7] = bt -> y; string -> instances[i+8] = bt -> z; if (j == 4) { string -> instances[i+9] = ct -> x; string -> instances[i+10] = ct -> y; string -> instances[i+11] = ct -> z; } } } /*! \fn void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) \brief Add a screen string to the list of screen string to render \param text the text to render \param id the label id \param col the color \param pos the position \param lshift label position shift on x, y and z, if any \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) { if (plot -> labels[id].list == NULL) { plot -> labels[id].list = g_malloc0(sizeof*plot -> labels[id].list); plot -> labels[id].list -> last = plot -> labels[id].list; } else { screen_string * s_tring = g_malloc0(sizeof*s_tring); s_tring -> prev = plot -> labels[id].list -> last; s_tring -> id = plot -> labels[id].list -> last -> id + 1; plot -> labels[id].list -> last = s_tring; } plot -> labels[id].list -> last -> word = g_strdup_printf ("%s", text); plot -> labels[id].list -> last -> col = col; plot -> labels[id].list -> last -> type = (id < 3) ? 3 : (type_of_measure == 6) ? 4 : 5; int i; for (i=0; i<3; i++) plot -> labels[id].list -> last -> shift[i] = lshift[i]; add_string_instance (plot -> labels[id].list -> last, pos, at, bt, ct); } /*! \fn void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) \brief prepare a screen string to be rendered \param text the text to render \param id the label id \param col the color \param pos the position \param lshift label position shift on x, y and z, if any \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) { screen_string * this_string = was_not_rendered_already (text, plot -> labels[id].list); if (this_string == NULL) { add_string (text, id, col, pos, lshift, at, bt, ct); } else { add_string_instance (this_string, pos, at, bt, ct); } } atomes_1.3.1/src/opengl/draw/d_selection.c0000664000175000017500000010057115212624223020155 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_selection.c * @short Functions to prepare the OpenGL rendering of the selected: atom(s), clone(s), bond(s) and clone bond(s) \n Functions to prepare the unique color rendering for picking the atom(s) and bond(s) * @author Sébastien Le Roux */ /* * This file: 'd_selection.c' * * Contains: * - The functions to prepare the OpenGL rendering of the selected: atom(s), clone(s), bond(s) and clone bond(s) - The functions to prepare the unique color rendering for picking the atom(s) and bond(s) * * List of functions: int find_selected_clone_vertices (int style, int at); int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap); int get_clone_id (int at, int bt); int render_selected (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader); int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader); int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds); int check_selection (int style, int type); int create_selection_lists (); int create_pick_lists (); void setup_selected_clone_vertices (int style, int at, int pi, float * vertices); void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices); void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices); void prepare_selected (int style, gboolean cylinder, int clone, int type); void prepare_picked (int style, gboolean cylinder, int clone, int type); */ #include "global.h" #include "glview.h" #include "dlp_field.h" extern void create_atom_lists (gboolean to_pick); extern int create_bond_lists (gboolean to_pick); extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern float get_bond_radius (int sty, int ac, int at, int b, int sel); extern void setup_this_atom (int style, gboolean to_pick, int picked, atom * at, int ac, float * vert, float al); extern void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices); extern void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices); extern object_3d * draw_billboard_quad (void); extern float get_sphere_radius (int style, int sp, int ac, int sel); /*! \fn void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) \brief fill the OpenGL data buffer for a selected atom clone bonds to render \param style rendering style \param at the atom id \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param vertices the OpenGL buffer data to fill */ void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) { int i, j; gboolean doit; distance d; for (i=0; i < proj_gl -> atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if (d.pbc) { if (in_movie_encoding && plot -> at_data != NULL) { doit = (plot -> at_data[at].pick[pi] && plot -> at_data[at].style == style) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[0][at].pick[pi] && proj_gl -> atoms[0][at].style == style) ? TRUE : FALSE; } if (doit) { prepare_clone (style, FALSE, pi+1, proj_gl -> atoms[step][at], proj_gl -> atoms[step][j], d.x, d.y, d.z, vertices); } } } } /*! \fn int find_selected_clone_vertices (int style, int at) \brief find the number of selected atom(s) to render \param style rendering style \param at the atom id */ int find_selected_clone_vertices (int style, int at) { int i, j, k; gboolean doit = FALSE; distance d; if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[at].show[1] && plot -> at_data[at].style == style) doit = TRUE; } else { if (proj_gl -> atoms[step][at].show[1] && proj_gl -> atoms[step][at].style == style) doit = TRUE; } k = 0; if (doit) { for (i=0; i < proj_gl -> atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if (d.pbc) k ++; } } return k; } /*! \fn int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) \brief find the number of selected bond(s) to render \param sty rendering style \param at the atom id \param sp the chemical species \param bi atom (0) or clone (1) \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param cap render cylinder caps (1/0) */ int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) { int i, j, k, l, m, n; distance dist; gboolean show_a, show_b, show_c, show_d; l = 0; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[at].show[bi]; show_c = plot -> at_data[at].pick[pi]; m = plot -> at_data[at].style; } else { show_a = proj_gl -> atoms[step][at].show[bi]; show_c = proj_gl -> atoms[step][at].pick[pi]; m = proj_gl -> atoms[step][at].style; } if (show_a && show_c && m == sty) { for (i=0; i atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; if (in_movie_encoding && plot -> at_data != NULL) { show_b = plot -> at_data[j].show[bi]; show_d = plot -> at_data[j].pick[pi]; n = plot -> at_data[j].style; k = proj_gl -> atoms[0][j].sp; } else { show_b = proj_gl -> atoms[step][j].show[bi]; show_d = proj_gl -> atoms[step][j].pick[pi]; n = proj_gl -> atoms[step][j].style; k = proj_gl -> atoms[step][j].sp; } if (sp == -1 || k == sp) { dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if ((bi && dist.pbc) ||(! bi && ! dist.pbc)) { if (cap) { if ((! show_b || ! show_d) || (m != n)) l += 1 + bi; } else { l += 1 + bi; } } } } } return 2*l; } /*! \fn int get_clone_id (int at, int bt) \brief get the bond id of cloned bond \param at 1st atom \param bt 2nd atom */ int get_clone_id (int at, int bt) { int i, j, k; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; if ((j == at && k == bt) || (j == bt && k == at)) return i; } return -1; } /*! \fn void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices) \brief prepare the rendering of a selected bond \param sty rendering style \param cap render cylinder caps (1/0) \param bi atom (0) or clone (1) \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param at 1st atom \param bt 2nd atom \param vertices the OpenGL buffer data to fill */ void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, at, bt, 1.0, vertices); } else { atom * tmp_a, * tmp_b; distance d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt); tmp_a = duplicate_atom (at); tmp_b = duplicate_atom (at); tmp_a -> pick[pi] = bt -> pick[pi]; tmp_a -> style = bt -> style; tmp_a -> sp = bt -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> x -= d.x; tmp_a -> y -= d.y; tmp_a -> z -= d.z; setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, tmp_b, tmp_a, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); tmp_a = duplicate_atom (bt); tmp_b = duplicate_atom (bt); tmp_a -> pick[pi] = at -> pick[pi]; tmp_a -> style = at -> style; tmp_a -> sp = at -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> id = at -> id; tmp_a -> x += d.x; tmp_a -> y += d.y; tmp_a -> z += d.z; setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, tmp_a, tmp_b, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); } } /*! \fn void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) \brief prepare the rendering of all selected bond(s) \param sty rendering style \param cap render cylinder caps (1/0) \param bi atom (0) or clone (1) \param at atom id \param sb target chemical species \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param vertices the OpenGL buffer data to fill */ void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) { int i, j, k, l, m; distance dist; gboolean show_a, show_b, show_c, show_d; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[at].show[bi]; show_c = plot -> at_data[at].pick[pi]; l = plot -> at_data[at].style; } else { show_a = proj_gl -> atoms[step][at].show[bi]; show_c = proj_gl -> atoms[step][at].pick[pi]; l = proj_gl -> atoms[step][at].style; } if (show_a && show_c && l == sty) { for (i=0; i atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; if (in_movie_encoding && plot -> at_data != NULL) { show_b = plot -> at_data[j].show[bi]; show_d = plot -> at_data[j].pick[pi]; m = plot -> at_data[j].style; k = proj_gl -> atoms[0][j].sp; } else { show_b = proj_gl -> atoms[step][j].show[bi]; show_d = proj_gl -> atoms[step][j].pick[pi]; m = proj_gl -> atoms[step][j].style; k = proj_gl -> atoms[step][j].sp; } if (sb == -1 || k == sb) { dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if ((bi && dist.pbc) ||(! bi && ! dist.pbc)) { if (cap) { if ((! show_b || ! show_d) || (l != m)) { prepare_selected_bond (sty, cap, bi, pi, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j], vertices); } } else { prepare_selected_bond (sty, cap, bi, pi, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j], vertices); } } } } } } int atoms[NUM_STYLES][2]; int bonds[NUM_STYLES][2], caps[NUM_STYLES][2]; int npbds[NUM_STYLES][2], npcps[NUM_STYLES][2]; int *** sbonds[NUM_STYLES][2]; /*! \fn void prepare_selected (int style, gboolean cylinder, int clone, int type) \brief prepare the list of selected bond(s) to render \param style rendering style \param cylinder cylinder (1) or line (1) \param clone atom (0) or clone (1) \param type 0 = mouse analysis mode, 1 = mouse edition mode */ void prepare_selected (int style, gboolean cylinder, int clone, int type) { int h, i, j; atom_in_selection * sel; npbds[style][type] = npcps[style][type] = 0; if (cylinder) { sel = plot -> selected[type] -> first; while (sel) { for (i=0; i id, -1, i, type, 0); npcps[style][type] += find_selected_bond_vertices (style-1, sel -> id, -1, i, type, 1); } sel = sel -> next; } bonds[style][type] = (npbds[style][type]) ? 1 : 0; caps[style][type] = (npcps[style][type]) ? 1 : 0; } else { sel = plot -> selected[type] -> first; while (sel) { for (i=0; i sp][j] += find_selected_bond_vertices (style-1, sel -> id, j, i, type, 0); } } sel = sel -> next; } for (h=0; h atoms[0][i].pick[type]) { for (h=0; h atoms[0][i].pick[type]) { for (h=0; h atoms[0][i].sp][j] += find_selected_bond_vertices (style-1, i, j, h, type, 0); } } } } for (h=0; h ray_tracing ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (bonds/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> inst_buffer_size = plot -> ray_tracing ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (cyl); if (caps) { cap = plot -> ray_tracing ? draw_billboard_quad () : draw_cylinder_cap (plot -> quality, 1.0, TRUE); cap -> num_instances = (ncaps/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (cap); } for (h=0; h selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { for (k=0; k id, k, type, (h == 0) ? cyl -> instances: cap -> instances); } if (sel -> next != NULL) sel = sel -> next; } } } l = 1; const GLchar * vs_sel_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_sel = (plot -> ray_tracing) ? full_color_ray : full_color; int narray_sel = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[SELEC][step][shader] = init_shader_program (SELEC, GLSL_CYLINDERS, vs_sel_cyl, NULL, fs_sel, GL_TRIANGLE_STRIP, narray_sel, 1, cylinder, cyl); if (caps) { l ++; const GLchar * vs_sel_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_sel_cap = plot -> ray_tracing ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[SELEC][step][shader+1] = init_shader_program (SELEC, GLSL_CAPS, vs_sel_cap, NULL, fs_sel, prim_sel_cap, 5, 1, cylinder, cap); } } else { l = 0; for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = sbonds[style][type][h][i][j] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; sel = plot -> selected[type] -> first; for (k=0; k< plot -> selected[type] -> selected; k++) { if (sel -> sp == i) { setup_all_selected_bond_vertices (style-1, 0, h, sel -> id, j, type, cyl -> vertices); } if (sel -> next != NULL) sel = sel -> next; } wingl -> ogl_glsl[SELEC][step][shader+l] = init_shader_program (SELEC, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, cylinder, cyl); wingl -> ogl_glsl[SELEC][step][shader+l] -> line_width = get_bond_radius (style, h, i+proj_sp*h, j+proj_sp*h, TRUE); l++; } } } } } return l; } /*! \fn int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) \brief prepare the OpenGL rendering data of to be picked bond / clone bond \param style rendering style \param cylinder cylinders (1) or lines (0) \param caps cylinder caps (1/0) \param bonds number of selected bonds \param ncaps number of cylinder caps \param type 0 = mouse analysis mode, 1 = mouse edition mode \param clone atom (0) or clone (1) \param shader shader id number */ int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) { int h, i, j, k, l; object_3d * cyl, * cap; if (cylinder) { cyl = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (bonds/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> inst_buffer_size = plot -> ray_tracing ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (cyl); if (caps) { cap = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder_cap (plot -> quality, 1.0, TRUE); cap -> num_instances = (ncaps/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (cap); } for (h=0; h atoms[0][j].pick[type]) { for (k=0; k instances: cap -> instances); } } } } } l = 1; const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_cyl = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[SELEC][step][shader] = init_shader_program (SELEC, GLSL_CYLINDERS, vs_cyl, NULL, fs_cyl, GL_TRIANGLE_STRIP, 6, 1, cylinder, cyl); if (caps) { l ++; const GLchar * vs_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_cap = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[SELEC][step][shader+1] = init_shader_program (SELEC, GLSL_CAPS, vs_cap, NULL, fs_cyl, prim_cap, 5, 1, cylinder, cap); } } else { l = 0; for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = sbonds[style][type][h][i][j] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; for (k=0; k atoms[0][k].pick[type] && proj_gl -> atoms[0][k].sp == i) { setup_all_selected_bond_vertices (style-1, 0, h, k, j, type, cyl -> vertices); } } wingl -> ogl_glsl[SELEC][step][shader+l] = init_shader_program (SELEC, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, cylinder, cyl); wingl -> ogl_glsl[SELEC][step][shader+l] -> line_width = get_bond_radius (style, h, i+proj_sp*h, j+proj_sp*h, TRUE); l++; } } } } } return l; } /*! \fn int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) \brief prepare selection shaders \param style rendering style \param shaders shader id number \param clone atoms (0) or clones (1) \param type 0 = mouse analysis mode, 1 = mouse edition mode \param do_bonds render bonds (1/0) */ int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) { int i,j; int nshaders = 0; atom_in_selection * sel; gboolean doit; gboolean sphere = TRUE; gboolean cylinder = FALSE; object_3d * atos; // Atoms if ((style-1 == NONE && (plot -> style == WIREFRAME || plot -> style == PUNT)) || style-1 == WIREFRAME || style-1 == PUNT) sphere = FALSE; if (sphere) { atos = (plot -> ray_tracing) ? draw_billboard_quad () : draw_sphere (plot -> quality); } else { atos = g_malloc0(sizeof*atos); atos -> vert_buffer_size = 3; atos -> num_vertices = 1; atos -> vertices = allocfloat (3); atos -> vertices[0] = atos -> vertices[1] = atos -> vertices[2] = 0.0; } atos -> num_instances = atoms[style][type] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); atos -> inst_buffer_size = ATOM_BUFF_SIZE; allocate_instances (atos); nbl = 0; if (plot -> selected[type] -> selected) { sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (in_movie_encoding && plot -> at_data != NULL) { doit = (plot -> at_data[sel -> id].show[0] && plot -> at_data[sel -> id].style == style-1) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[step][sel -> id].show[0] && proj_gl -> atoms[step][sel -> id].style == style-1) ? TRUE : FALSE; } if (doit) { setup_this_atom (style-1, FALSE, type+1, & proj_gl -> atoms[step][sel -> id], 0, atos -> instances, 1.0);//0.75); } if (sel -> next != NULL) sel = sel -> next; } if (plot -> draw_clones) { // Clones instances sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (proj_gl -> atoms[step][sel -> id].cloned) { setup_selected_clone_vertices (style-1, sel -> id, type, atos -> instances); } if (sel -> next != NULL) sel = sel -> next; } } } else { for (j=0; j at_data != NULL) { doit = (plot -> at_data[j].pick[type] && plot -> at_data[j].show[0] && plot -> at_data[j].style == style-1) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[step][j].pick[type] && proj_gl -> atoms[step][j].show[0] && proj_gl -> atoms[step][j].style == style-1) ? TRUE : FALSE; } if (doit) { setup_this_atom (style-1, FALSE, type+1, & proj_gl -> atoms[step][j], 0, atos -> instances, 0.75); } } if (plot -> draw_clones) { // Clones instances for (j=0; j atoms[step][j].cloned) setup_selected_clone_vertices (style-1, j, type, atos -> instances); } } } if (sphere) { const GLchar * vs_sel_sph = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_sel_sph = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[SELEC][step][shaders+nshaders] = init_shader_program (SELEC, GLSL_SPHERES, vs_sel_sph, NULL, fs_sel_sph, GL_TRIANGLE_STRIP, 4, 1, TRUE, atos); } else { wingl -> ogl_glsl[SELEC][step][shaders+nshaders] = init_shader_program (SELEC, GLSL_POINTS, point_vertex, NULL, point_color, GL_POINTS, 4, 1, FALSE, atos); } nshaders ++; // Bonds if (do_bonds) { if (bonds[style][type]) { if ((style-1 == NONE && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || style-1 == BALL_AND_STICK || style-1 == CYLINDERS) cylinder = TRUE; if (plot -> selected[type] -> selected > 0) { nshaders += render_selected (style, cylinder, caps[style][type], npbds[style][type], npcps[style][type], type, clone, shaders+nshaders); } else { nshaders += render_picked (style, cylinder, caps[style][type], npbds[style][type], npcps[style][type], type, clone, shaders+nshaders); } for (i=0; i<((plot -> draw_clones) ? 2 : 1); i++) { if (sbonds[style][type][i]) { for (j=0; j selected[type] -> selected) { sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[sel -> id].show[0] && plot -> at_data[sel -> id].style == style) k ++; } else { if (proj_gl -> atoms[step][sel -> id].show[0] && proj_gl -> atoms[step][sel -> id].style == style) k ++; } if (sel -> next != NULL) sel = sel -> next; } if (plot -> draw_clones) { // Clones instances sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { k += find_selected_clone_vertices (style, sel -> id); if (sel -> next != NULL) sel = sel -> next; } } } else { for (j=0; j atoms[0][j].pick[type] && proj_gl -> atoms[0][j].show[0] && proj_gl -> atoms[0][j].style == style) k ++; } if (plot -> draw_clones) { // Clones instances for (j=0; j atoms[0][j].pick[type]) k += find_selected_clone_vertices (style, j); } } } return k; } /*! \fn int create_selection_lists () \brief prepare the selected atom(s) and bond(s) OpenGL rendering */ int create_selection_lists () { int h, i, j, k, l; #ifdef DEBUG g_debug ("Selected LIST"); #endif gboolean do_bonds; gboolean cylinder = FALSE; cleaning_shaders (wingl, SELEC); wingl -> create_shaders[SELEC] = FALSE; i = (plot -> draw_clones) ? 2 : 1; j = 2; int nshaders = 0; for (k=0; k selected[k] -> selected > 0 || (! k && wingl -> picked > 0)) { for (h=0; h style == PUNT || plot -> style == SPHERES)) || h-1 == PUNT || h-1 == SPHERES) do_bonds = FALSE; atoms[h][k] = check_selection (h-1, k); nshaders += (atoms[h][k]) ? 1 : 0; if (do_bonds) { sbonds[h][k] = alloctint (i, proj_sp, proj_sp); if ((! h && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || h-1 == BALL_AND_STICK || h-1 == CYLINDERS) cylinder = TRUE; if (plot -> selected[k] -> selected > 0) { prepare_selected (h, cylinder, i, k); } else { prepare_picked (h, cylinder, i, k); } nshaders += bonds[h][k] + caps[h][k]; } else { sbonds[h][k] = NULL; } } } } if (! nshaders) return 0; wingl -> ogl_glsl[SELEC][step] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[SELEC][step]); h = 0; for (k=0; k style == PUNT || plot -> style == SPHERES)) || l-1 == PUNT || l-1 == SPHERES) do_bonds = FALSE; if (plot -> selected[k] -> selected > 0 || (! k && wingl -> picked > 0)) { h += prepare_selection_shaders (l, h, i, k, do_bonds); } } } } return nshaders; } /*! \fn int create_pick_lists () \brief prepare the picking list OpenGL rendering */ int create_pick_lists () { int i, j, k, l; #ifdef DEBUG g_debug ("Pick LIST"); #endif cleaning_shaders (wingl, PICKS); wingl -> create_shaders[PICKS] = FALSE; i = (plot -> draw_clones) ? 2:1; j = 0; for (k=0; k show_atom[k][l]; } } if (j == 0) return 0; k = 0; for (i=0; i at_data != NULL) { k += plot -> at_data[i].show[0]; k += plot -> at_data[i].show[1]; } else { k += proj_gl -> atoms[step][i].show[0]; k += proj_gl -> atoms[step][i].show[1]; } } if (k == 0) return 0; int nshaders = 1; gboolean bonds = FALSE; i = proj_at; if (plot -> draw_clones) i += 2 * wingl -> bonds[step][1]; j = wingl -> bonds[step][0] + wingl -> bonds[step][1]; if (plot -> style != SPHERES && plot -> style != PUNT && j > 0) { bonds = TRUE; nshaders ++; i += 2 * wingl -> bonds[step][0]; if (plot -> draw_clones) i += 4 * wingl -> bonds[step][1]; } int tmp_style = plot -> style; plot -> style = BALL_AND_STICK; if (wingl -> color_to_pick != NULL) { g_free (wingl -> color_to_pick); wingl -> color_to_pick = NULL; } wingl -> to_be_picked = 0; wingl -> color_to_pick = allocint (i); wingl -> n_shaders[PICKS][0] = nshaders; wingl -> ogl_glsl[PICKS][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[PICKS][0]); gboolean saved_ray = plot -> ray_tracing; plot -> ray_tracing = FALSE; gColorID[0] = gColorID[1] = gColorID[2] = 0; create_atom_lists (TRUE); wingl -> bonds_to_be_picked = 0; if (bonds) create_bond_lists (TRUE); plot -> ray_tracing = saved_ray; plot -> style = tmp_style; return nshaders; } atomes_1.3.1/src/opengl/draw/d_bonds.c0000664000175000017500000006533015212624223017300 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_bonds.c * @short Functions to prepare the OpenGL rendering of bond(s) and clone bond(s) * @author Sébastien Le Roux */ /* * This file: 'd_bonds.c' * * Contains: * - The functions to prepare the OpenGL rendering of bond(s) and clone bond(s) * * List of functions: int cylinder_vertices (int qual); int cylinder_indices (int qual); int cap_vertices (int qual); int cap_indices (int qual); int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap); int create_bond_lists (gboolean to_pick); float get_bond_radius (int sty, int ac, int at, int bt, int sel); void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b); void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel); void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices); void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices); void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices); void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices); vec4_t rotate_bond (vec3_t a, vec3_t b); object_3d * draw_cylinder (int quality, float ra, float rb); object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); */ #include "global.h" #include "glview.h" #include "dlp_field.h" extern object_3d * draw_billboard_quad (void); /* Sphere radius function (declared in d_atoms.c) — needed to fill clip radii */ extern float get_sphere_radius (int style, int sp, int ac, int sel); extern ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_picked); extern vec3_t model_position; extern int nbs; /*! \fn int cylinder_vertices (int qual) \brief return the number of OpenGL vertices to render a cylinder \param qual OpenGL quality */ int cylinder_vertices (int qual) { return 2*qual; } /*! \fn int cylinder_indices (int qual) \brief return the number of OpenGL indices to render a cylinder \param qual OpenGL quality */ int cylinder_indices (int qual) { return 2*(qual + 1); } /*! \fn object_3d * draw_cylinder (int quality, float ra, float rb) \brief OpenGL 3D cylinder object rendering \param quality OpenGL quality \param ra cylinder radius at 1st side point \param rb cylinder radius at 2nd side point */ object_3d * draw_cylinder (int quality, float ra, float rb) { int i, j; object_3d * new_cylinder = g_malloc0(sizeof*new_cylinder); new_cylinder -> quality = quality; new_cylinder -> num_vertices = cylinder_vertices (quality); new_cylinder -> vert_buffer_size = 3; new_cylinder -> vertices = allocfloat (3*new_cylinder -> num_vertices); new_cylinder -> num_indices = cylinder_indices (quality); new_cylinder -> ind_buffer_size = 1; new_cylinder -> indices = allocint (cylinder_indices (quality)); float step = 2.0 * pi / (quality-1); float x, y; j = 0; // Vertex for(i = 0; i < quality; i++) { x = cos (i*step); y = sin (i*step); new_cylinder -> vertices[j] = ra*x; new_cylinder -> vertices[j+1] = ra*y; new_cylinder -> vertices[j+2] = 0.5; j += 3; new_cylinder -> vertices[j] = rb*x; new_cylinder -> vertices[j+1] = rb*y; new_cylinder -> vertices[j+2] = -0.5; j += 3; } for (i = 0; i < 2*quality; i++) { new_cylinder -> indices[i] = i % (2*quality-2); } return new_cylinder; } /*! \fn int cap_vertices (int qual) \brief return the number of OpenGL vertices to render a cylinder cap \param qual OpenGL quality */ int cap_vertices (int qual) { return qual + 1; } /*! \fn int cap_indices (int qual) \brief return the number of OpenGL indices to render a cylinder cap \param qual OpenGL quality */ int cap_indices (int qual) { return qual + 2; } /*! \fn object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) \brief OpenGL 3D cylinder cap object rendering \param quality OpenGL quality \param rad cylinder radius \param picked is the bond selected (1) or not (0) */ object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) { int i, j; object_3d * new_cap = g_malloc0(sizeof*new_cap); new_cap -> quality = quality; new_cap -> num_vertices = cap_vertices(quality); new_cap -> vert_buffer_size = 3; new_cap -> vertices = allocfloat (3*new_cap -> num_vertices); new_cap -> num_indices = cap_indices(quality); new_cap -> ind_buffer_size = 1; new_cap -> indices = allocint (new_cap -> num_indices); float delta = (picked) ? 0.05 : 0.0; float step = 2.0 * pi / (quality - 1); float x, y; j = 0; // Center new_cap -> vertices[j] = 0.0; new_cap -> vertices[j+1] = 0.0; new_cap -> vertices[j+2] = - delta; j += 3; for(i = 0; i < quality; i++) { x = cos (i*step); y = sin (i*step); new_cap -> vertices[j] = rad*x; new_cap -> vertices[j+1] = rad*y; new_cap -> vertices[j+2] = 0.0 - delta; j += 3; } for (i=0; i <= quality; i++) { new_cap -> indices[i] = i % (quality + 1); } return new_cap; } /*! \fn vec4_t rotate_bond (vec3_t a, vec3_t b) \brief rotate a bond based on the proper orientation \param a 1st atom position \param b 2nd atom position */ vec4_t rotate_bond (vec3_t a, vec3_t b) { vec3_t c, f, raxis; c = v3_sub (vec3(b.x, b.y, b.z), vec3(a.x, a.y, a.z)); f = vec3 (0.0, 0.0, 1.0); double rangle; raxis = v3_cross (f, c); //rangle = 180.0 / pi * acos(v3_dot(f, c) / v3_length(c)); rangle = acos(v3_dot(f, c) / v3_length(c)); return axis_to_quat (raxis, rangle); } /*! \fn float get_bond_radius (int sty, int ac, int at, int bt, int sel) \brief get bond (clone bond) radius \param sty the rendering style \param ac atom (0) or clone (1) \param at 1st chemical species \param bt 2nd chemical species \param sel is the bond selected (1) or not (0) */ float get_bond_radius (int sty, int ac, int at, int bt, int sel) { if (sty == BALL_AND_STICK) { return plot -> bondrad[at][bt] + 0.05*sel; } else if (sty == CYLINDERS) { return plot -> radall[ac] + 0.05*sel; } else { return plot -> linerad[at][bt] + 4.0*sel; } } /*! \fn void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) \brief fill the OpenGL data buffer for a line bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos the position vector \param col the color \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) { int s = nbs*LINE_BUFF_SIZE; vertices[s] = pos.x; vertices[s+1] = pos.y; vertices[s+2] = pos.z; vertices[s+3] = col.red; vertices[s+4] = col.green; vertices[s+5] = col.blue; vertices[s+6] = col.alpha * alpha; nbs ++; } /*! \fn void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b) \brief fill the OpenGL data buffer for a cylinder bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos_a 1st atom position \param pos_b 2nd atom position \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) \param delta length correction if atom(s) are shown \param r_sph_a sphere radius at the atom side (for in-sphere clipping in the frag shader) \param r_sph_b sphere radius at the midpoint side (0.0 for a bond half, > 0 for axis cylinders) */ void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b) { int cbs = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; int s = nbs*cbs; vertices[s] = (pos_a.x + pos_b.x)/2.0; vertices[s+1] = (pos_a.y + pos_b.y)/2.0; vertices[s+2] = (pos_a.z + pos_b.z)/2.0; vertices[s+3] = v3_length(v3_sub(pos_a, pos_b)) + delta; vertices[s+4] = rad; vec4_t quat = rotate_bond (pos_b, pos_a); vertices[s+5] = quat.w; vertices[s+6] = quat.x; vertices[s+7] = quat.y; vertices[s+8] = quat.z; vertices[s+9] = col.red; vertices[s+10] = col.green; vertices[s+11] = col.blue; vertices[s+12] = col.alpha * alpha; if (r_sph_a > 0.0) { vertices[s+13] = r_sph_a; /* sphere clip radius at pos_a endpoint */ vertices[s+14] = r_sph_b; /* sphere clip radius at pos_b endpoint (0.0 for half-bonds) */ } nbs ++; } /*! \fn void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel) \brief fill the OpenGL data buffer for a cylinder cap bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos_a initial atom position vector \param pos_b cap center position vector \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) \param sel selected half bond (1/0) */ void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel) { int s = nbs*CAPS_BUFF_SIZE; vec3_t dir = (sel) ? v3_norm (v3_sub(pos_a, pos_b)) : vec3(0.0, 0.0, 0.0); vertices[s] = pos_b.x - 0.05*dir.x; vertices[s+1] = pos_b.y - 0.05*dir.y; vertices[s+2] = pos_b.z - 0.05*dir.z; vertices[s+3] = rad; vec4_t quat = rotate_bond (pos_b, pos_a); vertices[s+4] = quat.w; vertices[s+5] = quat.x; vertices[s+6] = quat.y; vertices[s+7] = quat.z; vertices[s+8] = col.red; vertices[s+9] = col.green; vertices[s+10] = col.blue; vertices[s+11] = col.alpha * alpha; nbs ++; } int vs_bid; /*! \fn void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices) \brief prepare the OpenGL rendering data of a bond / clone bond \param sty rendering style \param to_pick to pick (1) or to draw (0) \param picked is the bond selected (1) or not (0) \param cap draw cylinder cap (1/0) \param bi atom (0) or clone (1) visible \param pi atom (0) or clone (1) picked \param at 1st atom \param bt 2nd atom \param al the opacity (bond: 1.0, clone bond: 0.5) \param vertices the OpenGL buffer data to fill */ void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices) { float alpha = 1.0; float delta = 0.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b; ColRGBA col = get_atom_color (at -> sp, at -> id, 1.0, (picked) ? pi + 1 : 0, to_pick); float rad = get_bond_radius ((to_pick) ? BALL_AND_STICK : (sty == NONE) ? plot -> style : sty, bi, at -> sp, bt -> sp, (picked) ? 1.0 : 0.0); if (picked) { gboolean show_a, show_b; int sta, stb; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[bt -> id].show[bi]; show_b = plot -> at_data[bt -> id].pick[pi]; sta = plot -> at_data[at -> id].style; stb = plot -> at_data[bt -> id].style; } else { show_a = bt -> show[bi]; show_b = bt -> pick[pi]; sta = at -> style; stb = bt -> style; } delta = ((show_a && show_b) && (sta == stb)) ? 0.0 : 0.1; } for (p=0; p abc -> extra_cell[0]+1;p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3((at -> x + bt -> x)/2.0, (at -> y + bt -> y)/2.0, (at -> z + bt -> z)/2.0); if (to_pick || ((sty == NONE && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || sty == BALL_AND_STICK || sty == CYLINDERS)) { if (cap) { setup_cap_vertice (vertices, pos_a, pos_b, col, rad, alpha*al, (plot -> ray_tracing && delta > 0.0) ? TRUE : FALSE); } else { float r_sph = (plot -> ray_tracing) ? get_sphere_radius ((sty == NONE) ? plot -> style : sty, at -> sp, bi, 0) : 0.0f; setup_cylinder_vertice (vertices, pos_a, pos_b, col, rad, (to_pick) ? 1.0 : alpha*al, delta, r_sph, 0.0f); } } else { setup_line_vertice (vertices, pos_a, col, alpha*al); setup_line_vertice (vertices, pos_b, col, alpha*al); } at_unshift (at, shift); at_unshift (bt, shift); alpha = 0.5; } } } } /*! \fn void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices) \brief prepare a bond OpenGL rendering \param sty rendering style \param to_pick to pick (1) or to draw (0) \param picked is the atom selected (1) or not (0) \param cap draw cylinder cap \param bi atom (0) or clone (1) visible \param pi atom (0) or clone (1) picked \param bid bond id \param at 1st atom \param bt 2nd atom \param vertices the OpenGL buffer data to fill */ void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, to_pick, picked, cap, bi, pi, at, bt, 1.0, vertices); } else { atom * tmp_a, * tmp_b; float x, y, z; int sign; sign = 1; if (wingl -> bondid[step][1][bid][0] == at -> id) sign = -1; x = wingl -> clones[step][bid].x; y = wingl -> clones[step][bid].y; z = wingl -> clones[step][bid].z; tmp_a = duplicate_atom (at); tmp_b = duplicate_atom (at); tmp_a -> pick[pi] = bt -> pick[pi]; tmp_a -> style = bt -> style; tmp_a -> sp = bt -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> x += sign * x; tmp_a -> y += sign * y; tmp_a -> z += sign * z; setup_this_bond (sty, to_pick, picked, cap, bi, pi, tmp_b, tmp_a, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); tmp_a = duplicate_atom (bt); tmp_b = duplicate_atom (bt); tmp_a -> pick[pi] = at -> pick[pi]; tmp_a -> style = at -> style; tmp_a -> sp = at -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> id = at -> id; tmp_a -> x -= sign * x; tmp_a -> y -= sign * y; tmp_a -> z -= sign * z; setup_this_bond (sty, to_pick, picked, cap, bi, pi, tmp_a, tmp_b, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); } } /*! \fn int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) \brief find bond(s) and clone bond(s) to render \param to_pick to pick (1) or to draw (0) \param sty rendering style \param sa 1st chemical species \param sb 2nd chemical species \param bi bond (0) or clone bond (1) \param cap draw cylinder cap (1/0) */ int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) { int i, j, k, l, m, n; gboolean show_a, show_b; l = 0; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; m = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; n = plot -> at_data[k].style; } else { show_a = proj_gl -> atoms[step][j].show[bi]; m = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; n = proj_gl -> atoms[step][k].style; } if (proj_gl -> atoms[step][j].sp == sa && proj_gl -> atoms[step][k].sp == sb) { if (show_a && (m == sty || to_pick)) { if (cap) { if (! show_b || n != sty) l += 1 + bi; } else { l += 1 + bi; } } } if (proj_gl -> atoms[step][j].sp == sb && proj_gl -> atoms[step][k].sp == sa) { if (show_b && (n == sty || to_pick)) { if (cap) { if (! show_a || m != sty) l += 1 + bi; } else { l += 1 + bi; } } } } return 2*l; } /*! \fn void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) \brief prepare cylinder bond(s) and clone bond(s) to render \param style rendering style \param to_pick to pick (1) or to draw (0) \param cap draw cylinder cap (1/0) \param bi bond (0) or clone bond (1) \param vertices the OpenGL data buffer to fill */ void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) { int i, j, k, l, m; gboolean show_a, show_b; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; l = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; m = plot -> at_data[k].style;; } else { show_a = proj_gl -> atoms[step][j].show[bi]; l = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; m = proj_gl -> atoms[step][k].style; } if (show_a && (l == style || to_pick)) { if (cap) { if (! show_b || m != style) prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } else { prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } } if (show_b && (m == style || to_pick)) { if (cap) { if (! show_a || l != style) prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } else { prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } } } } /*! \fn void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) \brief prepare line bond(s) and clone bond(s) to render \param style rendering style \param cap draw cylinder cap (1/0) \param bi bond (0) or clone bond (1) \param sa 1st chemical species \param sb 2nd chemical species \param vertices the OpenGL buffer to fill */ void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) { int i, j, k, l, m; gboolean show_a, show_b; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; l = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; m = plot -> at_data[k].style; } else { show_a = proj_gl -> atoms[step][j].show[bi]; l = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; m = proj_gl -> atoms[step][k].style; } if (proj_gl -> atoms[step][j].sp == sa && proj_gl -> atoms[step][k].sp == sb) { if (show_a && l == style) { prepare_bond (style, FALSE, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } } if (proj_gl -> atoms[step][j].sp == sb && proj_gl -> atoms[step][k].sp == sa) { if (show_b && m == style) { prepare_bond (style, FALSE, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } } } } /*! \fn int create_bond_lists (gboolean to_pick) \brief prepare bond(s) and clone bond(s) OpenGL rendering \param to_pick to pick (1) or to draw (0) */ int create_bond_lists (gboolean to_pick) { int nshaders = 0; int **** nbonds; int **** ncaps; int nbds[NUM_STYLES]; int ncap[NUM_STYLES]; object_3d * cyl, * cap; int f, g, h, i, j, k, l, m; if (! to_pick) { cleaning_shaders (wingl, BONDS); wingl -> create_shaders[BONDS] = FALSE; } g = (plot -> draw_clones) ? 2 : 1; nbonds = allocqint (NUM_STYLES, g, proj_sp, proj_sp); if (! to_pick) ncaps = allocqint (NUM_STYLES, g, proj_sp, proj_sp); for (f=0; f style != SPHERES && plot -> style != PUNT)) || (f && f-1 != SPHERES && f-1 != PUNT)) { for (h=0; h 0) l ++; if (! to_pick && ((! f && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS)))) { ncaps[f][h][i][j] = find_bond_vertices (to_pick, f-1, i, j, h, 1); m += ncaps[f][h][i][j]; } } } } nbds[f] = k; ncap[f] = m; if (to_pick || (((! f && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS))))) { if (k > 0) { nshaders ++; if (m > 0 && ! to_pick) nshaders ++; } } else { nshaders += l; } } if (to_pick) break; } #ifdef DEBUG g_debug ("Bond LIST:: to_pick= %s, shaders= %d", (to_pick) ? "true" : "false", nshaders); #endif if (nshaders == 0) return nshaders; if (! to_pick) wingl -> ogl_glsl[BONDS][step] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[BONDS][step]); l = 0; for (f=0; f style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS))) { cyl = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (nbds[f]/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); /* Unreal mode: extend instance buffer by 2 floats per instance for sphere clip radii */ cyl -> inst_buffer_size = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (cyl); nbs = 0; for (h=0; h instances); if (to_pick && h==0) wingl -> bonds_to_be_picked = wingl -> to_be_picked; } if (! to_pick) { const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_cyl = (plot -> ray_tracing) ? full_color_ray : full_color; /* narray=8 in ray_tracing mode to allocate slots for r_sphere_a/b attributes */ int narray_cyl = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_CYLINDERS, vs_cyl, NULL, fs_cyl, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, cyl); l ++; if (ncap[f] > 0) { cap = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder_cap (plot -> quality, 1.0, FALSE); cap -> num_instances = (ncap[f]/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (cap); nbs = 0; for (h=0; h instances); } const GLchar * vs_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_cap = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_CAPS, vs_cap, NULL, fs_cyl, prim_cap, 5, 1, TRUE, cap); l ++; } } else { wingl -> ogl_glsl[PICKS][0][1] = init_shader_program (PICKS, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, FALSE, cyl); } } else if ((! f && (plot -> style != SPHERES && plot -> style != PUNT)) || (f && f-1 != SPHERES && f-1 != PUNT)) { for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = nbonds[f][h][i][j] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; setup_line_vertices (f-1, 0, h, i, j, cyl -> vertices); wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, cyl); wingl -> ogl_glsl[BONDS][step][l] -> line_width = get_bond_radius (WIREFRAME, h, i+proj_sp*h, j+proj_sp*h, FALSE); l++; } } } } } } if (to_pick) break; } for (f=0; f Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_label.c * @short Functions to prepare the OpenGL rendering of the atomic label(s) * @author Sébastien Le Roux */ /* * This file: 'd_label.c' * * Contains: * - The functions to prepare the OpenGL rendering of the atomic label(s) * * List of functions: int create_label_lists (); void prepare_label (atom at, int id, double al); void clean_labels (int id); mat4_t create_label_matrices (); */ #include "global.h" #include "glview.h" #include "interface.h" #include "dlp_field.h" extern ColRGBA init_color (int id, int numid); extern ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick); extern float get_sphere_radius (int style, int sp, int ac, int sel); /*! \fn mat4_t create_label_matrices () \brief create label projection matrices */ mat4_t create_label_matrices () { return m4_ortho (0.0, wingl -> view_port.y, 0.0, wingl -> view_port.z, 1.0, 0.0); } /*! \fn void prepare_label (atom at, int id, double al) \brief prepare an atomic label OpenGL rendering \param at the atom to label \param id the label id \param al opacity */ void prepare_label (atom at, int id, double al) { int k, l; char * str = NULL; char * tmp = NULL; float shift[3]; ColRGBA lcol; k = at.sp; double rad = get_sphere_radius ((at.style == NONE) ? plot -> style : at.style, k, id, (at.pick[0] || at.pick[1])); if (at.style == CYLINDERS || (plot -> style == CYLINDERS && at.style == NONE)) rad += (at.pick[0] || at.pick[1]) ? 0.9 : 1.0; for (l=0; l<3; l++) shift[l] = plot -> labels[id].shift[l]; shift[2] += rad; if (field_color && (field_object < 7 || field_object > 14)) { lcol = init_color (at.coord[4], num_field_objects); lcol.alpha = al*0.75; } else if (plot -> labels[id].color == NULL) { lcol = get_atom_color (k+id*proj_sp, at.id, al, 0, FALSE); } else { lcol = (plot -> labels[id].n_colors) ? plot -> labels[id].color[0] : plot -> labels[id].color[k]; lcol.alpha = al; } switch (plot -> acl_format[id]) { case ELEMENT_NAME: str = g_strdup_printf ("%s", exact_name(proj_gl -> chemistry -> element[k])); break; case SYMBOL: str = g_strdup_printf ("%s", exact_name(proj_gl -> chemistry -> label[k])); break; case SYMBOL_AND_NUM: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; case SYMBOL_AND_IND: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; case NUM: str = g_strdup_printf ("%d", at.id+1); break; case ID_IN_MOLECULE: if (field_object == 0) { str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); } else { str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.coord[4]+1); } break; default: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; } if (id) { tmp = g_strdup_printf ("%s*", str); g_free (str); str = g_strdup_printf ("%s", tmp); g_free (tmp); } prepare_string (str, id, lcol, vec3(at.x, at.y, at.z), shift, NULL, NULL, NULL); g_free (str); } /*! \fn void clean_labels (int id) \brief clean atomic label shaders \param id label id */ void clean_labels (int id) { if (plot -> labels[id].list != NULL) { g_free (plot -> labels[id].list); plot -> labels[id].list = NULL; } } /*! \fn int create_label_lists () \brief prepare atomic label(s) OpenGL rendering */ int create_label_lists () { int nshaders = 0; int i, j, k; float x, y, z; atom ato; #ifdef DEBUG g_debug ("Label LIST"); #endif cleaning_shaders (wingl, LABEL); wingl -> create_shaders[LABEL] = FALSE; clean_labels (0); clean_labels (1); if (in_movie_encoding && plot -> at_data != NULL) { for (i=0; i at_data[i].show[0] && plot -> at_data[i].label[0]) { prepare_label (proj_gl -> atoms[step][i], 0, 1.0); } } if (plot -> draw_clones) { for (i=0; i < wingl -> bonds[step][1]; i++) { x = wingl -> clones[step][i].x; y = wingl -> clones[step][i].y; z = wingl -> clones[step][i].z; j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; ato.x = proj_gl -> atoms[step][j].x - x; ato.y = proj_gl -> atoms[step][j].y - y; ato.z = proj_gl -> atoms[step][j].z - z; ato.sp = proj_gl -> atoms[step][j].sp; ato.id = k; ato.pick[0] = plot -> at_data[k].pick[0]; ato.pick[1] = plot -> at_data[k].pick[1]; ato.style = plot -> at_data[k].style; if (plot -> at_data[k].show[1] && plot -> at_data[k].label[1]) prepare_label (ato, 1, 0.75); ato.x = proj_gl -> atoms[step][k].x + x; ato.y = proj_gl -> atoms[step][k].y + y; ato.z = proj_gl -> atoms[step][k].z + z; ato.sp = proj_gl -> atoms[step][k].sp; ato.id = j; ato.pick[0] = plot -> at_data[j].pick[0]; ato.pick[1] = plot -> at_data[j].pick[1]; ato.style = plot -> at_data[j].style; if (plot -> at_data[j].show[1] && plot -> at_data[j].label[1]) prepare_label (ato, 1, 0.75); } } } else { for (i=0; i atoms[step][i].show[0] && proj_gl -> atoms[step][i].label[0]) { prepare_label (proj_gl -> atoms[step][i], 0, 1.0); } } if (plot -> draw_clones) { for (i=0; i < wingl -> bonds[step][1]; i++) { x = wingl -> clones[step][i].x; y = wingl -> clones[step][i].y; z = wingl -> clones[step][i].z; j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; ato.x = proj_gl -> atoms[step][j].x - x; ato.y = proj_gl -> atoms[step][j].y - y; ato.z = proj_gl -> atoms[step][j].z - z; ato.sp = proj_gl -> atoms[step][k].sp; ato.id = k; ato.pick[0] = proj_gl -> atoms[step][k].pick[0]; ato.pick[1] = proj_gl -> atoms[step][k].pick[1]; ato.style = proj_gl -> atoms[step][k].style; if (proj_gl -> atoms[step][k].show[1] && proj_gl -> atoms[step][k].label[1]) prepare_label (ato, 1, 0.75); ato.x = proj_gl -> atoms[step][k].x + x; ato.y = proj_gl -> atoms[step][k].y + y; ato.z = proj_gl -> atoms[step][k].z + z; ato.sp = proj_gl -> atoms[step][j].sp; ato.id = j; ato.pick[0] = proj_gl -> atoms[step][j].pick[0]; ato.pick[1] = proj_gl -> atoms[step][j].pick[1]; ato.style = proj_gl -> atoms[step][j].style; if (proj_gl -> atoms[step][j].show[1] && proj_gl -> atoms[step][j].label[1]) prepare_label (ato, 1, 0.75); } } } if (plot -> labels[0].list != NULL || plot -> labels[1].list != NULL) { nshaders = 0; if (plot -> labels[0].list != NULL) nshaders += (plot -> labels[0].render + 1) * (plot -> labels[0].list -> last -> id + 1); if (plot -> draw_clones && plot -> labels[1].list != NULL) { nshaders += (plot -> labels[1].render + 1) * (plot -> labels[1].list -> last -> id + 1); } wingl -> ogl_glsl[LABEL][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[LABEL][0]); for (i=0; i<2; i++) render_all_strings (LABEL, i); } return nshaders; } atomes_1.3.1/src/opengl/draw/d_poly.c0000664000175000017500000004773115212624223017163 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_poly.c * @short Functions to prepare the OpenGL rendering of coordination polyhedra * @author Sébastien Le Roux */ /* * This file: 'd_poly.c' * * Contains: * - The functions to prepare the OpenGL rendering of coordination polyhedra * * List of functions: int is_atom_cloned (int at); gboolean is_inside (vec3_t p, float * mi, float * ma); gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c); gboolean check_it (int i, int j, int k, int l); void setup_summit (float * vertices, vec3_t s, vec3_t n); void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); void setup_polyhedron (float * vertices, GLfloat ** xyz, int s); void setup_tetra (float * vertices, vec3_t a, vec3_t b, vec3_t c, vec3_t d); void setup_tetrahedron (float * vertices, GLfloat ** xyz); void get_centroid (GLfloat ** xyz, int id); void check_triangles (int s, GLfloat ** xyz); void prepare_poly_gl (float * vertices, atom at, int c); void create_poly_lists (); vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3); */ #include "global.h" #include "glview.h" #include "color_box.h" #include "dlp_field.h" gboolean * do_gl; vec3_t centroid; ColRGBA pcol; extern int nbs, nbl, nba; float the_sign; float poly_alpha; /*! \fn void setup_summit (float * vertices, vec3_t s, vec3_t n) \brief prepare the polygon summit to render \param vertices the OpenGL data buffer to fill \param s position vector \param n normal vector */ void setup_summit (float * vertices, vec3_t s, vec3_t n) { int val = nba*POLY_BUFF_SIZE; vertices[val] = s.x; vertices[val+1] = s.y; vertices[val+2] = s.z; vertices[val+3] = n.x; vertices[val+4] = n.y; vertices[val+5] = n.z; vertices[val+6] = pcol.red; vertices[val+7] = pcol.green; vertices[val+8] = pcol.blue; vertices[val+9] = pcol.alpha * poly_alpha; nba ++; } /*! \fn vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) \brief compute triangle normal vector \param v1 1st summit \param v2 2nd summit \param v3 3rd summit */ vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) { vec3_t edge_a = v3_sub(v3, v1); vec3_t edge_b = v3_sub(v2, v1); vec3_t normal = v3_norm (v3_cross(edge_a, edge_b)); vec3_t plane = v3_add (v1, v3_add(v2, v3)); plane = v3_divs (plane, 3.0); float sign = 1.0; if (v3_dot (v3_sub(plane,centroid), normal) < 0) { sign = -1.0; } return v3_muls (normal, sign); } /*! \fn void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) \brief setup triangle vertices \param vertices \param sa 1st summit \param sb 2nd summit \param sc 3rd summit */ void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) { vec3_t normal = get_triangle_normal (sa, sb, sc); setup_summit (vertices, sa, normal); setup_summit (vertices, sb, normal); setup_summit (vertices, sc, normal); } /*vec3_t get_summit_normal (vec3_t va, vec3_t vb, vec3_t vc, vec3_t vd) { vec3_t ta, tb, tc; ta = get_triangle_normal (va, vb, vc); tb = get_triangle_normal (va, vb, vd); tc = get_triangle_normal (va, vc, vd); return v3_norm(v3_add(ta, v3_add(tb, tc))); }*/ /*! \fn void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) \brief fill the OpenGL data buffer for a polyhedron to render \param vertices the OpenGL buffer data to fill \param xyz the summits coordinates \param s the number of summits */ void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) { int i, j, k, l, n, o, p, q, r; vec3_t a, b, c; float shift[3]; poly_alpha = 1.0; for (n=0; n abc -> extra_cell[0]+1;n++) { for (o=0; o abc -> extra_cell[1]+1; o++) { for (p=0; p abc -> extra_cell[2]+1; p++) { shift[0]=n*box_gl -> vect[0][0]+o*box_gl -> vect[1][0]+p*box_gl -> vect[2][0]; shift[1]=n*box_gl -> vect[0][1]+o*box_gl -> vect[1][1]+p*box_gl -> vect[2][1]; shift[2]=n*box_gl -> vect[0][2]+o*box_gl -> vect[1][2]+p*box_gl -> vect[2][2]; for (q=0; q abc -> extra_cell[0]+1;n++) { for (o=0; o abc -> extra_cell[1]+1; o++) { for (p=0; p abc -> extra_cell[2]+1; p++) { shift[0]=n*box_gl -> vect[0][0]+o*box_gl -> vect[1][0]+p*box_gl -> vect[2][0]; shift[1]=n*box_gl -> vect[0][1]+o*box_gl -> vect[1][1]+p*box_gl -> vect[2][1]; shift[2]=n*box_gl -> vect[0][2]+o*box_gl -> vect[1][2]+p*box_gl -> vect[2][2]; for (q=0; q<4; q++) { for (r=0; r<3; r++) xyz[q][r] += shift[r]; } setup_tetra (vertices, vec3(xyz[0][0], xyz[0][1], xyz[0][2]), vec3(xyz[1][0], xyz[1][1], xyz[1][2]), vec3(xyz[2][0], xyz[2][1], xyz[2][2]), vec3(xyz[3][0], xyz[3][1], xyz[3][2])); poly_alpha = 0.5; for (q=0; q<4; q++) { for (r=0; r<3; r++) xyz[q][r] -= shift[r]; } } } } } /*! \fn void get_centroid (GLfloat ** xyz, int id) \brief find the barycenter of a polyhedron \param xyz the OpenGL buffer data to fill \param id the number of summits */ void get_centroid (GLfloat ** xyz, int id) { int i; centroid.x = centroid.y = centroid.z = 0.0; for (i=0; i mi[0] && p.x < ma[0]) { if (p.y > mi[1] && p.y < ma[1]) { if (p.z > mi[2] && p.z < ma[2]) { return TRUE; } } } return FALSE; } /*! \fn gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) \brief is this point inside a triangle ? \param p the position to test \param a 1st summit of the triangle \param b 2nd summit of the triangle \param c 3rd summit of the triangle */ gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) { float area = 0.5 * v3_length(v3_cross(v3_sub(a, b), v3_sub(a, c))); float alpha = v3_length(v3_cross(v3_sub(p, b), v3_sub(p, c))) / (2.0*area); float beta = v3_length(v3_cross(v3_sub(p, c), v3_sub(p, a))) / (2.0*area); float gamma = 1 - alpha - beta; if ((alpha >= 0.0 && alpha <= 1.0) && (beta >= 0.0 && beta <= 1.0) && (gamma >= 0.0 && gamma <= 1.0)) { return TRUE; } else { return FALSE; } } /*! \fn gboolean check_it (int i, int j, int k, int l) \brief test this atom id ? \param i 1st summit atom id \param j 2nd summit atom id \param k 3rd summit atom id \param l atom id to test */ gboolean check_it (int i, int j, int k, int l) { if (l != i && l != j && l != k) { return TRUE; } else { return FALSE; } } /*! \fn void check_triangles (int s, GLfloat ** xyz) \brief check triangle intersection \param s number of summits for the polygon \param xyz the coordinates of the summits */ void check_triangles (int s, GLfloat ** xyz) { int h, i, j, k, l, m, n; float d, r; float vd, v0; vec3_t vi, vj, vk, vl, vm; vec3_t u, v, w; vec3_t p, pt; float min_c[3], min_p[3]; float max_c[3], max_p[3]; i = s*(s-1)*(s-2)/6; do_gl = allocbool (i); for (i=0; i<3; i++) { min_c[i] = max_c[i] = xyz[0][i]; } for (i=1; i 1 && k-j > 1) { // check the plane defined by the 3 points i, j and k vi = vec3(xyz[i][0], xyz[i][1], xyz[i][2]); vj = vec3(xyz[j][0], xyz[j][1], xyz[j][2]); vk = vec3(xyz[k][0], xyz[k][1], xyz[k][2]); u = v3_sub (vi, vj); v = v3_sub (vi, vk); p = v3_norm(v3_cross (u, v)); for (l=0; l npt) ? step : 0, & at, & proj_gl -> atoms[step][j]); xyz[l][0] = at.x - d.x; xyz[l][1] = at.y - d.y; xyz[l][2] = at.z - d.z; if (d.pbc) clones = TRUE; } j = at.numv; if (j > 1) { if (j == 3) { xyz[j][0] = at.x; xyz[j][1] = at.y; xyz[j][2] = at.z; } if (plot -> draw_clones || ! clones || plot -> cloned_poly) { k = at.sp; // Set color if (pcolorm == 0) { pcol = plot -> at_color[k]; l = at.coord[c]; pcol.alpha = plot -> spcolor[c][k][l].alpha; } else if (pcolorm < 5) { l = at.coord[pcolorm - 1]; if (pcolorm > 2) { k = 0; } pcol = plot -> spcolor[pcolorm - 1][k][l]; } else if (pcolorm == 5) { field_molecule * fmol = get_active_field_molecule_from_model_id (proj_gl, at.id); if (fmol) { l = proj_gl -> atoms[0][at.id].fid; k = fmol -> mol -> natoms; } else { l = 0; k = 1; } pcol = init_color (l, k); pcol.alpha = 0.5; } else { pcol = wingl -> custom_map -> colors[step][at.id]; l = at.coord[1]; pcol.alpha = plot -> spcolor[1][k][l].alpha; } /*color[0] = pcol.red; color[1] = pcol.green; color[2] = pcol.blue; color[3] = pcol.alpha;*/ switch (j) { case 3: // Tetrahedral unit // Tétraèdre, assemblage de triangles get_centroid (xyz, 4); setup_tetrahedron (vertices, xyz); break; default: get_centroid (xyz, j); check_triangles (j, xyz); setup_polyhedron (vertices, xyz, j); break; } } } g_free (xyz); xyz = NULL; } /*! \fn int is_atom_cloned (int at) \brief does this atom have clone(s) ? \param at the atom id to test */ int is_atom_cloned (int at) { int i, j, k; i=0; for (j=0; j atoms[step][at].numv; j++) { k = proj_gl -> atoms[step][at].vois[j]; if (distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][k]).pbc) i ++; } return i; } /*! \fn void create_poly_lists () \brief prepare coordination polyhedra(s) OpenGL rendering */ void create_poly_lists () { // The order to draw the polyhedra could be based on the alpha channel // from the most transparent to the less transparent // However a better way is to used the neighbor list, if 3 atoms are linked thru bonds // and that all 3 of them are involved in polyhedra then the one at // the center is to be drawn first ... yet to be implemented int h, i, j, k, l, m, n, o, p, q; #ifdef DEBUG g_debug ("Poly LIST"); #endif cleaning_shaders (wingl, POLYS); if (wingl -> init) { h = 0; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { if (plot -> show_poly[i]) { if (plot -> show_poly[i][j]) { h++; } } } } if (h) { int * npoly[2]; int ptot = 0; for (i=0; i<2; i++) { npoly[i] = allocint (coord_gl -> totcoord[i]); for (j=0; j totcoord[i]; j++) { for (k=0; k < proj_at; k++) { l = 0; for (m=0; m atoms[step][k].sp; m++) { l += coord_gl -> ntg[i][m]; } n = l + proj_gl -> atoms[step][k].coord[i]; if (n == j && plot -> show_poly[i] && plot -> show_poly[i][n]) { m = proj_gl -> atoms[step][k].coord[1]; n = proj_gl -> atoms[step][k].sp; o = 0; for (p=0; p partial_geo[n][m][p]; } p = (plot -> draw_clones) ? 1 + is_atom_cloned (k) : 1; // q is the number of summit of the polyhedra // +1 if only a coord 3 to include the central atom q = (o == 3) ? o+1: o; // Then we need the max number of triangle for this polyedron npoly[i][j] += p*(q*(q-1)*(q-2)/6); } } ptot += npoly[i][j]*3; } } if (ptot > 0) { wingl -> ogl_glsl[POLYS][step] = g_malloc0(sizeof*wingl -> ogl_glsl[POLYS][step]); wingl -> n_shaders[POLYS][step] = 1; object_3d * poly = g_malloc0(sizeof*poly); poly -> vert_buffer_size = POLY_BUFF_SIZE; poly -> num_vertices = ptot * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); poly -> vertices = allocfloat (poly -> vert_buffer_size*poly -> num_vertices); nba = 0; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { if (npoly[i][j] > 0) { for (m=0; m < proj_at; m++) { n = 0; for (o=0; o atoms[step][m].sp; o++) { n += coord_gl -> ntg[i][o]; } o = n + proj_gl -> atoms[step][m].coord[i]; if (o == j && plot -> show_poly[i] && plot -> show_poly[i][o] && proj_gl -> atoms[step][m].numv > 1) { prepare_poly_gl (poly -> vertices, proj_gl -> atoms[step][m], i); } } } } g_free (npoly[i]); } wingl -> ogl_glsl[POLYS][step][0] = init_shader_program (POLYS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, poly); } } } wingl -> create_shaders[POLYS] = FALSE; } atomes_1.3.1/src/opengl/draw/d_atoms.c0000664000175000017500000005012115212624223017306 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_atoms.c * @short nctions to prepare the OpenGL rendering atom(s) and clone(s) * @author Sébastien Le Roux */ /* * This file: 'd_atoms.c' * * Contains: * - The functions to prepare the OpenGL rendering atom(s) and clone(s) * * List of functions: int sphere_vertices (int qual); int sphere_indices (int qual); int find_atom_vertices (gboolean to_pick); int find_clone_vertices (gboolean to_pick); float get_sphere_radius (int style, int sp, int ac, int sel); void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al); void setup_atom_vertices (int style, gboolean to_pick, float * vertices); void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices); void setup_clone_vertices (int style, gboolean to_pick, float * vertices); void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances); void create_atom_lists (gboolean to_pick); ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick); object_3d * draw_sphere (int quality); */ #include "global.h" #include "glview.h" #include "ogl_shading.h" #include "dlp_field.h" #include "preferences.h" int atom_id; int gColorID[3]; int all_styles[NUM_STYLES]; /*! \fn ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) \brief get atom (or clone) color \param i chemical species \param j the atom id \param al opacity (atom: 1.0, clone: 0.5) \param picked is the atom (clone) selected (1) or not (0) \param to_pick to pick (1) or to draw (0) */ ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) { // i = atom spec, j = atom id (for coordination maps), al = alpha int s = i; int m; ColRGBA colo; if (to_pick) { gColorID[0]++; if(gColorID[0] > 255) { gColorID[0] = 0; gColorID[1]++; if(gColorID[1] > 255) { gColorID[1] = 0; gColorID[2]++; } } wingl -> color_to_pick[wingl -> to_be_picked] = gColorID[0] + 256*gColorID[1] + 256*256*gColorID[2]; colo.red = gColorID[0]/255.0; colo.green = gColorID[1]/255.0; colo.blue = gColorID[2]/255.0; colo.alpha = 1.0; wingl -> to_be_picked ++; } else if (picked) { if (field_color) { colo = init_color (proj_gl -> atoms[step][j].coord[4], num_field_objects); colo.alpha = DEFAULT_OPACITY*0.75; } else { colo = plot -> sel_color[(picked == 1) ? 0 : 1]; } } else { if (acolorm == 0) { colo.red = plot -> at_color[s].red; colo.green = plot -> at_color[s].green; colo.blue = plot -> at_color[s].blue; colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm < 5) { if (acolorm < 3) { s -= proj_sp*(s/proj_sp); } else { s = 0; } int k = proj_gl -> atoms[step][j].coord[acolorm -1]; colo.red = plot -> spcolor[acolorm - 1][s][k].red; colo.green = plot -> spcolor[acolorm - 1][s][k].green; colo.blue = plot -> spcolor[acolorm - 1][s][k].blue; colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm == 5) { field_molecule * fmol = get_active_field_molecule_from_model_id (proj_gl, j); if (fmol) { s = proj_gl -> atoms[0][j].fid; m = fmol -> mol -> natoms; } else { s = 0; m = 1; } colo = init_color (s, m); colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm == 6) { colo.red = wingl -> custom_map -> colors[step][j].red; colo.blue = wingl -> custom_map -> colors[step][j].blue; colo.green = wingl -> custom_map -> colors[step][j].green; colo.alpha = wingl -> custom_map -> colors[step][j].alpha; } } return colo; } int nbs, nbl, nba; /*! \fn int sphere_vertices (int qual) \brief return the number of OpenGL vertices to render a sphere \param qual OpenGL quality */ int sphere_vertices (int qual) { return qual * qual; } /*! \fn int sphere_indices (int qual) \brief return the number of OpenGL indices to render a sphere \param qual OpenGL quality */ int sphere_indices (int qual) { return 2 * qual * (qual - 1); } /*! \fn object_3d * draw_sphere (int quality) \brief OpenGL 3D sphere object rendering \param quality OpenGL quality */ object_3d * draw_sphere (int quality) { float theta, phi; float cos_phi, sin_phi; float xPos, yPos, zPos; int stack, slice; int x, y, z; object_3d * new_sphere = g_malloc0(sizeof*new_sphere); new_sphere -> quality = quality; new_sphere -> num_vertices = sphere_vertices (quality); new_sphere -> vert_buffer_size = 3; new_sphere -> vertices = allocfloat (3*new_sphere -> num_vertices); new_sphere -> num_indices = sphere_indices (quality); new_sphere -> ind_buffer_size = 1; new_sphere -> indices = allocint (new_sphere -> num_indices); x = 0; for (stack=0; stack <= quality-1; stack++) { phi = pi * stack / (quality-1); cos_phi = cos(phi); sin_phi = sin(phi); for (slice=0; slice <= quality-1; slice++) { theta = 2.0 * pi * slice / (quality-1); xPos = cos(theta) * sin_phi; yPos = cos_phi; zPos = sin(theta) * sin_phi; new_sphere -> vertices[3*x] = xPos; new_sphere -> vertices[3*x+1] = yPos; new_sphere -> vertices[3*x+2] = zPos; x ++; } } gboolean oddRow = FALSE; z = 0; for (y = 0; y < quality-1; y++) { if (!oddRow) // even rows: y == 0, y == 2; and so on { for (x = 0; x <= quality-1; x++) { new_sphere -> indices[z] = (y * quality + x); new_sphere -> indices[z+1]= ((y + 1) * quality + x); z += 2; } } else { for (x = quality-1; x >= 0; x--) { new_sphere -> indices[z] = ((y + 1) * quality + x); new_sphere -> indices[z+1] = (y * quality + x); z += 2; } } oddRow = !oddRow; } return new_sphere; } /*! \fn object_3d * draw_billboard_quad () \brief create a camera-aligned billboard quad proxy for perfect impostors. The quad has 4 vertices at unit corners (±1, ±1, 0). Each vertex shader for perfect impostors uses the sign of vert.x / vert.y to select the corresponding edge of the tight axis-aligned bounding box in view space. Draw primitive: GL_TRIANGLE_STRIP with indices [0,1,2,3]. tri 0 → vertices 0,1,2 tri 1 → vertices 1,2,3 */ object_3d * draw_billboard_quad () { object_3d * quad = g_malloc0(sizeof*quad); quad -> quality = 1; quad -> num_vertices = 4; quad -> vert_buffer_size = 3; quad -> vertices = allocfloat (3 * 4); /* corners: (-1,-1,0), (-1,+1,0), (+1,-1,0), (+1,+1,0) */ quad -> vertices[0] = -1.0f; quad -> vertices[1] = -1.0f; quad -> vertices[2] = 0.0f; quad -> vertices[3] = -1.0f; quad -> vertices[4] = 1.0f; quad -> vertices[5] = 0.0f; quad -> vertices[6] = 1.0f; quad -> vertices[7] = -1.0f; quad -> vertices[8] = 0.0f; quad -> vertices[9] = 1.0f; quad -> vertices[10] = 1.0f; quad -> vertices[11] = 0.0f; quad -> num_indices = 4; quad -> ind_buffer_size = 1; quad -> indices = allocint (4); quad -> indices[0] = 0; quad -> indices[1] = 1; quad -> indices[2] = 2; quad -> indices[3] = 3; return quad; } /*! \fn float get_sphere_radius (int style, int sp, int ac, int sel) \brief get an atom sphere radius \param style rendering style \param sp chemical species \param ac atom (0) or clone (1) \param sel is the atom selected (1) or not (0) */ float get_sphere_radius (int style, int sp, int ac, int sel) { int spec = (sp > proj_sp-1) ? sp - proj_sp : sp; if (style >= OGL_STYLES) { int fid = get_filled_id(style); int k = (fid) ? 9 + fid : 2; int l = (fid) ? 12 + fid : 7; int m = (int)proj_gl -> chemistry -> chem_prop[CHEM_Z][spec]; return (default_o_at_rs[2+5*ac]) ? default_at_rs[2+5*ac] + sel*0.05 : get_radius (2+5*ac, fid, m, default_atomic_rad[(ac) ? l : k]) + sel*0.05; } else if (style == WIREFRAME || style == PUNT) { return plot -> pointrad[spec + ac*proj_sp] + sel*4.0; } else if (style == SPACEFILL) { return plot -> atomicrad[spec + ac*proj_sp] + sel*0.05; } else if (style == CYLINDERS) { return plot -> radall[ac] + sel*0.05; } else { return plot -> sphererad[spec + ac*proj_sp] + sel*0.05; } } /*! \fn void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) \brief fill the OpenGL data buffer for a atom (or clone) to render \param vertices the OpenGL buffer data to fill \param pos the position vector \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) { int l; l = nbl*ATOM_BUFF_SIZE; vertices[l] = pos.x; vertices[l+1] = pos.y; vertices[l+2] = pos.z; vertices[l+3] = rad; vertices[l+4] = col.red; vertices[l+5] = col.green; vertices[l+6] = col.blue; vertices[l+7] = col.alpha * alpha; nbl ++; } /*! \fn void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al) \brief prepare the OpenGL rendering data of an atom / clone \param style rendering style \param to_pick to pick (1) or to draw (0) \param picked is the atom selected (1) or not (0) \param at the atom to render \param ac atom (0) or clone (1) \param vert the OpenGL buffer data to fill \param al the opacity (atom: 1.0, clone: 0.5) */ void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al) { int i, j, k; float alpha = 1.0; float shift[3]; ColRGBA col = get_atom_color (at -> sp, at -> id, 1.0, picked, to_pick); if (at -> sp > proj_sp - 1) at -> sp -= proj_sp; float rad = get_sphere_radius ((style == NONE) ? plot -> style : style, at -> sp, ac, (picked) ? 1 : 0); for (i=0; i abc -> extra_cell[0]+1;i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { shift[0]=i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift[1]=i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift[2]=i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; at_shift (at, shift); setup_sphere_vertice (vert, vec3(at -> x, at -> y, at -> z), col, rad, (to_pick) ? 1.0 : alpha*al); at_unshift (at, shift); alpha = 0.5; } } } } /*! \fn int find_atom_vertices (gboolean to_pick) \brief find the number of atom(s) to render \param to_pick to pick (1) or to draw (0) */ int find_atom_vertices (gboolean to_pick) { int i, j; j = 0; for (i=0; i at_data != NULL) { if (plot -> at_data[i].show[0]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[i].style + 1] ++; } j ++; } } else { if (proj_gl -> atoms[step][i].show[0]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][i].style + 1] ++; } j ++; } } } return j; } /*! \fn void setup_atom_vertices (int style, gboolean to_pick, float * vertices) \brief prepare an atom OpenGL rendering \param style the rendering style \param to_pick to pick (1) or to draw (0) \param vertices the OpenGL buffer data to fill */ void setup_atom_vertices (int style, gboolean to_pick, float * vertices) { int i; atom * tmp_a; for (i=0; i atoms[step][i]); if (in_movie_encoding && plot -> at_data != NULL) { tmp_a -> show[0] = plot -> at_data[i].show[0]; tmp_a -> style = plot -> at_data[i].style; } if (tmp_a -> show[0] && (tmp_a -> style == style || to_pick)) { setup_this_atom (style, to_pick, 0, tmp_a, 0, vertices, 1.0); } tmp_a = free_atom (tmp_a); } } /*! \fn void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices) \brief prepare the rendering data of a clone \param style the rendering style \param to_pick to pick (1) or to draw (0) \param picked is the clone selected (1) or not (0) \param at 1st atom of the cloned chemical bond \param bt 2nd atom of the cloned chemical bond \param x x position \param y y position \param z z position \param vertices the OpenGL buffer data to fill */ void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices) { atom * tmp_a = duplicate_atom (& bt); tmp_a -> x += x; tmp_a -> y += y; tmp_a -> z += z; tmp_a -> id = at.id; tmp_a -> sp = at.sp + proj_sp; int sty = at.style; if (in_movie_encoding && plot -> at_data != NULL) { tmp_a -> show[1] = plot -> at_data[at.id].show[1]; sty = plot -> at_data[at.id].style; } if (at.show[1] && (sty == style || to_pick)) { setup_this_atom (style, to_pick, picked, tmp_a, 1, vertices, 0.5); } tmp_a = free_atom (tmp_a); } /*! \fn int find_clone_vertices (gboolean to_pick) \brief find the number of clones to render \param to_pick to pick (1) or to draw (0) */ int find_clone_vertices (gboolean to_pick) { int i, j, k, l; l = 0; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[j].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[j].style + 1] ++; } l++; } if (plot -> at_data[k].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[k].style + 1] ++; } l++; } } else { if (proj_gl -> atoms[step][j].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][j].style + 1] ++; } l ++; } if (proj_gl -> atoms[step][k].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][k].style + 1] ++; } l ++; } } } return l; } /*! \fn void setup_clone_vertices (int style, gboolean to_pick, float * vertices) \brief find clone(s) position(s), color(s) and prepare the data for the OpenGL rendering \param style rendering style \param to_pick to pick (1) or to draw (0) \param vertices the OpenGL data buffer to fill */ void setup_clone_vertices (int style, gboolean to_pick, float * vertices) { int i, j, k; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; prepare_clone (style, to_pick, 0, proj_gl -> atoms[step][j], proj_gl -> atoms[step][k], wingl -> clones[step][i].x, wingl -> clones[step][i].y, wingl -> clones[step][i].z, vertices); prepare_clone (style, to_pick, 0, proj_gl -> atoms[step][k], proj_gl -> atoms[step][j], -wingl -> clones[step][i].x, -wingl -> clones[step][i].y, -wingl -> clones[step][i].z, vertices); } } /*! \fn void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) \brief find atom(s) position(s), color(s) and prepare the data for the OpenGL rendering \param style rendering style \param to_pick to pick (1) or to draw (0) \param instances the OpenGL data buffer to fill */ void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) { setup_atom_vertices (style, to_pick, instances); if (to_pick) wingl -> atoms_to_be_picked = wingl -> clones_to_be_picked = wingl -> to_be_picked; if (plot -> draw_clones) { setup_clone_vertices (style, to_pick, instances); if (to_pick) wingl -> clones_to_be_picked = wingl -> to_be_picked; } } /*! \fn void create_atom_lists (gboolean to_pick) \brief prepare atom(s) and clone(s) OpenGL rendering \param to_pick to pick (1) or to draw (0) */ void create_atom_lists (gboolean to_pick) { int i, j, k; object_3d * atos; gboolean sphere = TRUE; if (! to_pick) { cleaning_shaders (wingl, ATOMS); wingl -> create_shaders[ATOMS] = FALSE; } for (i=0; i draw_clones) j += find_clone_vertices (to_pick); #ifdef DEBUG g_debug ("Atom LIST:: to_pick= %s, Atom(s) to render= %d", (to_pick) ? "true" : "false", j); #endif if (j > 0) { // Render atom(s) j = (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); if (! to_pick) { wingl -> n_shaders[ATOMS][step] = 0; for (i=0; i n_shaders[ATOMS][step] ++; wingl -> ogl_glsl[ATOMS][step] = g_malloc0(wingl -> n_shaders[ATOMS][step]*sizeof*wingl -> ogl_glsl[ATOMS][step]); } k = 0; for (i=0; i style == WIREFRAME || plot -> style == PUNT) sphere = FALSE; } else { if (i-1 == WIREFRAME || i-1 == PUNT) sphere = FALSE; } if (sphere) { /* Ray: billboard quad proxy; classic: tessellated sphere */ atos = plot -> ray_tracing ? draw_billboard_quad () : draw_sphere (plot -> quality); } else { atos = g_malloc0(sizeof*atos); atos -> vert_buffer_size = 3; atos -> num_vertices = 1; atos -> vertices = allocfloat (3); atos -> vertices[0] = atos -> vertices[1] = atos -> vertices[2] = 0.0; } atos -> num_instances = j*all_styles[i]; atos -> inst_buffer_size = ATOM_BUFF_SIZE; allocate_instances (atos); nbl = 0; atom_positions_colors_and_sizes (i-1, to_pick, atos -> instances); if (! to_pick) { if (sphere) { const GLchar * vs_atom = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_atom = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[ATOMS][step][k] = init_shader_program (ATOMS, GLSL_SPHERES, vs_atom, NULL, fs_atom, GL_TRIANGLE_STRIP, 4, 1, TRUE, atos); } else { wingl -> ogl_glsl[ATOMS][step][k] = init_shader_program (ATOMS, GLSL_POINTS, point_vertex, NULL, point_color, GL_POINTS, 4, 1, FALSE, atos); } } else { wingl -> ogl_glsl[PICKS][0][0] = init_shader_program (PICKS, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, FALSE, atos); } k ++; } if (to_pick) break; } } } atomes_1.3.1/src/opengl/draw/d_background.c0000664000175000017500000000426715212624223020314 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_background.c * @short Functions to prepare the OpenGL rendering for the gradient background * @author Sébastien Le Roux */ /* * This file: 'd_background.c' * * Contains: * - The functions to prepare the OpenGL gradient background * * List of functions: void create_background_lists (); */ #include "global.h" #include "glview.h" /*! \fn void create_background_lists () \brief prepare background OpenGL rendering */ void create_background_lists () { cleaning_shaders (wingl, BACKG); wingl -> create_shaders[BACKG] = FALSE; wingl -> n_shaders[BACKG][0] = 1; object_3d * back = g_malloc0(sizeof*back); back -> vert_buffer_size = 2; back -> num_vertices = 4; back -> vertices = allocfloat (back -> vert_buffer_size*back -> num_vertices); back -> vertices[0] = back -> vertices[1] = back -> vertices[3] = back -> vertices[4] = -1.0; back -> vertices[2] = back -> vertices[5] = back -> vertices[6] = back -> vertices[7] = 1.0; wingl -> ogl_glsl[BACKG][0] = g_malloc0(sizeof*wingl -> ogl_glsl[BACKG][0]); switch (plot -> back -> gradient) { case 1: wingl -> ogl_glsl[BACKG][0][0] = init_shader_program (BACKG, GLSL_BACK, background_vertex, NULL, background_linear, GL_TRIANGLE_STRIP, 1, 5, FALSE, back); break; case 2: wingl -> ogl_glsl[BACKG][0][0] = init_shader_program (BACKG, GLSL_BACK, background_vertex, NULL, background_circular, GL_TRIANGLE_STRIP, 1, 5, FALSE, back); break; } } atomes_1.3.1/src/opengl/draw/movie.h0000664000175000017500000000510215212624223017003 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file movie.h * @short Data structure declarations for movie encoding \n Function declarations for movie encoding * @author Sébastien Le Roux */ /* * This header file: 'movie.h' * * Contains: - Data structure declarations for movie encoding - Function declarations for movie encoding */ #ifndef MOVIE_H_ #define MOVIE_H_ #define VIDEO_CODECS 5 #define IMAGE_FORMATS 4 #include #include #include #if LIBAVCODEC_VERSION_MAJOR > 54 #include #include #endif #include #include #include // a wrapper around a single output AVStream typedef struct VideoStream VideoStream; struct VideoStream { AVStream * st; AVCodecContext * cc; AVFrame * frame; struct SwsContext * sws_ctx; }; typedef struct video_options video_options; struct video_options { int proj; int framesec; int extraframes; int codec; int oglquality; int bitrate; int * video_res; }; extern void render_image (glwin * view, video_options * iopts); extern void save_movie (glwin * view, video_options * vopts); // Image rendering options from the command line extern int render_image_format; extern int render_image_style; extern int render_image_axis; extern int render_image_box; extern int render_image_rep; extern int render_image_acolor; extern int render_image_pcolor; extern gboolean trigger_fragment_analysis; extern gboolean trigger_molecule_analysis; extern ColRGBA * render_image_back_color; extern int render_image_back_grad; extern int render_image_back_dir; extern float render_image_back_pos; extern ColRGBA * render_image_grad_color[2]; extern ColRGBA * render_image_box_color; extern int * render_image_pixels; extern gchar * render_image_output; #endif atomes_1.3.1/src/opengl/draw/d_axis.c0000664000175000017500000003135215212624223017134 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_axis.c * @short Functions to prepare the OpenGL rendering for the axis * @author Sébastien Le Roux */ /* * This file: 'd_axis.c' * * Contains: * - The functions to prepare the OpenGL rendering for the axis * * List of functions: int create_axis_lists (); void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e); void init_axis_param (); void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c); ColRGBA color_axis (int id); mat4_t create_axis_matrices (int type); */ #include "global.h" #include "glview.h" extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern object_3d * draw_billboard_quad (void); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b); extern void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel); extern void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); extern float poly_alpha; extern vec3_t centroid; extern void clean_labels (int id); extern ColRGBA pcol; float arrow_length; float axis_size; float axis_radius; float arrow_base; float label_pos; /*! \fn ColRGBA color_axis (int id) \brief get axis color \param id axis x (0), y(1) or z(2) */ ColRGBA color_axis (int id) { if (plot -> xyz -> color != NULL) { return plot -> xyz -> color[id]; } else { ColRGBA col; col.red = (id == 2) ? 1.0: 0.0; col.green = (id == 1) ? 1.0: 0.0; col.blue = (id == 0) ? 1.0: 0.0; col.alpha = 1.0; return col; } } /*! \fn mat4_t create_axis_matrices (int type) \brief create axis OpenGL rendering matrices \param type axis type (standard: 0, atom edition viewer axis: 1) */ mat4_t create_axis_matrices (int type) { GLfloat x, y, z; x = y = z = 0.0; float from_edge = 50.0; vec3_t win_coord; GLfloat sx = (GLfloat)wingl -> pixels[0]; GLfloat sy = (GLfloat)wingl -> pixels[1]; mat4_t axis_projection_matrix; mat4_t axis_model_matrix; mat4_t axis_view_matrix; mat4_t axis_model_view_matrix; if (plot -> xyz -> t_pos == CENTER) { if (plot -> rep == ORTHOGRAPHIC) { x = 0.5 * sx; y = 0.5 * sy; } axis_projection_matrix = wingl -> proj_model_matrix; } else { axis_projection_matrix = m4_ortho (plot -> gleft, plot -> gright, plot -> gbottom, plot -> gtop, -plot -> gfar, plot -> gfar); if (plot -> xyz -> t_pos == TOP_RIGHT) { x = sx - from_edge; y = from_edge; } else if (plot -> xyz -> t_pos == TOP_LEFT) { x = from_edge; y = from_edge; } else if (plot -> xyz -> t_pos == BOTTOM_RIGHT) { x = sx - from_edge; y = sy - from_edge; } else if (plot -> xyz -> t_pos == BOTTOM_LEFT) { x = from_edge; y = sy - from_edge; } else if (plot -> xyz -> t_pos == CUSTOM) { // Custom position x = plot -> xyz -> c_pos[0] * sx / 100.0; y = plot -> xyz -> c_pos[1] * sy / 100.0; } } win_coord = v3_un_project (vec3(x, y, z), wingl -> view_port, axis_projection_matrix); win_coord.z = 1.0; //print_axis_matrices (win_coord); if (type == 0) { axis_view_matrix = wingl -> view_matrix; } else { axis_view_matrix = wingl -> model_matrix; } axis_model_matrix = m4_translation (win_coord); axis_model_view_matrix = m4_mul (axis_model_matrix, axis_view_matrix); return m4_mul (axis_projection_matrix, axis_model_view_matrix); } /*! \fn void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) \brief setup axis 3D arrow rendering data \param vert the OpenGL buffer data to fill \param a position vector a \param b position vector b \param c position vector c \param d position vector d \param e position vector e */ void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) { setup_triangles (vert, a, b, c); setup_triangles (vert, a, c, d); setup_triangles (vert, a, d, e); setup_triangles (vert, a, e, b); setup_triangles (vert, b, c, d); setup_triangles (vert, b, d, e); } /*! \fn void init_axis_param () \brief initialize axis rendering parameters */ void init_axis_param () { arrow_length = 0.5; axis_size = plot -> xyz -> length; axis_radius = plot -> xyz -> rad; arrow_base = 0.1; label_pos = 0.2; if (plot -> rep == PERSPECTIVE && plot -> xyz -> t_pos != CENTER) { arrow_base /= (plot -> p_depth / plot -> gnear); arrow_length /= (plot -> p_depth / plot -> gnear); axis_radius /= (plot -> p_depth / plot -> gnear); axis_size /= (plot -> p_depth / plot -> gnear); label_pos /= (plot -> p_depth / plot -> gnear); } } /*! \fn void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) \brief prepare axis OpenGL rendering data buffer \param vert_a OpenGL buffer data to fill \param vert_b OpenGL buffer data to fill \param vert_c OpenGL buffer data to fill */ void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) { init_axis_param (); poly_alpha = 1.0; vec3_t a, b, c, d, e; float sa; nbs = nbl = nba = 0; int i; for (i=0; i<3; i++) { pcol = color_axis (i); a = vec3(0.0, 0.0, 0.0); b = vec3((i==0)? axis_size-arrow_length : 0.0, (i==1)? axis_size-arrow_length : 0.0, (i==2)? axis_size-arrow_length : 0.0); if (plot -> xyz -> axis == WIREFRAME) { setup_line_vertice (vert_a, a, pcol, 1.0); setup_line_vertice (vert_a, b, pcol, 1.0); a = vec3((i==0)? axis_size : 0.0, (i==1)? axis_size : 0.0, (i==2)? axis_size : 0.0); sa = (i == 2) ? -1.0 : 1.0; b = vec3((i==0)? axis_size-arrow_length : -arrow_base, (i==1)? axis_size-arrow_length : -sa*arrow_base, (i==2)? axis_size-arrow_length : arrow_base); c = vec3((i==0)? axis_size-arrow_length : -arrow_base, (i==1)? axis_size-arrow_length : -arrow_base, (i==2)? axis_size-arrow_length : -arrow_base); d = vec3((i==0)? axis_size-arrow_length : arrow_base, (i==1)? axis_size-arrow_length : sa*arrow_base, (i==2)? axis_size-arrow_length : -arrow_base); e = vec3((i==0)? axis_size-arrow_length : arrow_base, (i==1)? axis_size-arrow_length : arrow_base, (i==2)? axis_size-arrow_length : arrow_base); centroid = v3_add (a, v3_add(b, v3_add(c, v3_add(d, e)))); centroid = v3_divs (centroid, 5.0); setup_arrow (vert_b, a, b, c, d, e); } else { setup_cylinder_vertice (vert_a, a, b, pcol, axis_radius, 1.0, 0.0, (plot -> ray_tracing) ? axis_radius : 0.0, 0.0); c = vec3((i==0)? axis_size : 0.0, (i==1)? axis_size : 0.0, (i==2)? axis_size : 0.0); nbs --; setup_cylinder_vertice (vert_b, c, b, pcol, axis_radius+arrow_base, 1.0, 0.0, (plot -> ray_tracing) ? axis_radius : 0.0, 0.0); nbs --; setup_cap_vertice (vert_c, c, b, pcol, axis_radius+arrow_base, 1.0, FALSE); } } } /*! \fn int create_axis_lists () \brief prepare axis OpenGL rendering */ int create_axis_lists () { vec3_t pos; float shift[3]={0.0, 0.0, 0.0}; int nshaders = 0; object_3d * axis_a, * axis_b, * axis_c, * axis_d; cleaning_shaders (wingl, MAXIS); wingl -> create_shaders[MAXIS] = FALSE; if (plot -> xyz -> axis == NONE) return nshaders; int saved_tracing = plot -> ray_tracing; plot -> ray_tracing = FALSE; if (plot -> xyz -> axis == WIREFRAME) { axis_a = g_malloc0(sizeof*axis_a); axis_a -> vert_buffer_size = LINE_BUFF_SIZE; axis_a -> num_vertices = 3*2; axis_a -> vertices = allocfloat (axis_a -> vert_buffer_size*axis_a -> num_vertices); axis_b = g_malloc0(sizeof*axis_b); axis_b -> vert_buffer_size = POLY_BUFF_SIZE; axis_b -> num_vertices = 3*6*9; axis_b -> vertices = allocfloat (axis_b -> vert_buffer_size*axis_b -> num_vertices); } else { if (plot -> ray_tracing) { axis_a = draw_billboard_quad (); axis_a -> inst_buffer_size = CYLI_BUFF_SIZE + 2; axis_b = draw_billboard_quad (); axis_b -> inst_buffer_size = CYLI_BUFF_SIZE + 2; axis_c = draw_billboard_quad (); axis_c -> inst_buffer_size = CAPS_BUFF_SIZE + 2; axis_d = draw_billboard_quad (); axis_d -> inst_buffer_size = ATOM_BUFF_SIZE; } else { int axis_quality = 50; axis_a = draw_cylinder (axis_quality, 1.0, 1.0); axis_a -> inst_buffer_size = CYLI_BUFF_SIZE; axis_b = draw_cylinder (axis_quality, 0.0, 1.0); axis_b -> inst_buffer_size = CYLI_BUFF_SIZE; axis_c = draw_cylinder_cap (axis_quality, 1.0, FALSE); axis_c -> inst_buffer_size = CAPS_BUFF_SIZE; axis_d = draw_sphere (axis_quality); axis_d -> inst_buffer_size = ATOM_BUFF_SIZE; } axis_a -> num_instances = axis_b -> num_instances = axis_c -> num_instances = 3; allocate_instances (axis_a); allocate_instances (axis_b); allocate_instances (axis_c); axis_d -> num_instances = 1; allocate_instances (axis_d); } nshaders = (plot -> xyz -> axis == WIREFRAME) ? 2 : 4; prepare_axis_data ((plot -> xyz -> axis == WIREFRAME) ? axis_a -> vertices : axis_a -> instances, (plot -> xyz -> axis == WIREFRAME) ? axis_b -> vertices : axis_b -> instances, (plot -> xyz -> axis == WIREFRAME) ? NULL : axis_c -> instances); clean_labels (2); if (plot -> xyz -> labels) { int i; for (i=0; i<3; i++) { pos = vec3 ((i==0) ? axis_size+label_pos : 0.0, (i==1) ? axis_size+label_pos : 0.0, (i==2) ? axis_size+label_pos : 0.0); prepare_string (plot -> xyz -> title[i], 2, color_axis (i), pos, shift, NULL, NULL, NULL); } nshaders += (plot -> labels[2].render+1) * (plot -> labels[2].list -> last -> id + 1); wingl -> ogl_glsl[MAXIS][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[MAXIS][0]); render_all_strings (MAXIS, 2); } else { wingl -> ogl_glsl[MAXIS][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[MAXIS][0]); } if (plot -> xyz -> axis == WIREFRAME) { // Lines wingl -> ogl_glsl[MAXIS][0][0] = init_shader_program (MAXIS, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, axis_a); wingl -> ogl_glsl[MAXIS][0][0] -> line_width = plot -> xyz -> line; // Arrows wingl -> ogl_glsl[MAXIS][0][1] = init_shader_program (MAXIS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, axis_b); } else { // Yellow sphere at (0.0, 0.0, 0.0) pcol.red = pcol.green = 1.0; pcol.blue = 0.0; pcol.alpha = 1.0; setup_sphere_vertice (axis_d -> instances, vec3(0.0,0.0,0.0), pcol, axis_radius, 1.0); const GLchar * vs_sph = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * vs_cone = (plot -> ray_tracing) ? cone_vertex_ray : cone_vertex; const GLchar * vs_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; const GLchar * fs_all = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[MAXIS][0][0] = init_shader_program (MAXIS, GLSL_SPHERES, vs_sph, NULL, fs_all, GL_TRIANGLE_STRIP, 4, 1, TRUE, axis_d); // Cylinders int narray_cyl = (plot -> ray_tracing) ? 8 : 6; wingl -> ogl_glsl[MAXIS][0][1] = init_shader_program (MAXIS, GLSL_CYLINDERS, vs_cyl, NULL, fs_all, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, axis_a); // Cones wingl -> ogl_glsl[MAXIS][0][2] = init_shader_program (MAXIS, GLSL_CYLINDERS, vs_cone, NULL, fs_all, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, axis_b); // Cones Caps GLenum prim_cap = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[MAXIS][0][3] = init_shader_program (MAXIS, GLSL_CAPS, vs_cap, NULL, fs_all, prim_cap, 5, 1, TRUE, axis_c); } plot -> ray_tracing = saved_tracing; return nshaders; } atomes_1.3.1/src/opengl/ogl_shading.c0000664000175000017500000013134315212624223017207 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_shading.c * @short Functions to create GLSL programs \n Functions to manage GLSL programs * @author Sébastien Le Roux */ /* * This file: 'ogl_shading.c' * * Contains: * - The functions to create GLSL programs - The functions to manage GLSL programs * * * List of functions: GLuint create_shader (int type, const GLchar * src); GLuint * alloc_shader_pointer (GLuint * pointer, int shaders); GLuint * glsl_add_lights (glsl_program * glsl); gboolean in_md_shaders (project * this_proj, int id); gboolean glsl_disable_cull_face (glsl_program * glsl); void allocate_instances (object_3d * object); void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string); void glsl_bind_points (glsl_program * glsl, object_3d * obj); void glsl_bind_spheres (glsl_program * glsl, object_3d * obj); void glsl_bind_lines (glsl_program * glsl, object_3d * obj); void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj); void glsl_bind_caps (glsl_program * glsl, object_3d * obj); void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj); void glsl_bind_background (glsl_program * glsl, object_3d * obj); void update_string_instances (glsl_program * glsl, object_3d * obj); void glsl_bind_string (glsl_program * glsl, object_3d * obj); void re_create_all_md_shaders (glwin * view); void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj); void cleaning_shaders (glwin * view, int shader); void recreate_all_shaders (glwin * view); void init_default_shaders (glwin * view); void init_shaders (glwin * view); void set_lights_data (glsl_program * glsl); void shading_glsl_text (glsl_program * glsl); void update_ray_instances (glsl_program * glsl); void render_this_shader (glsl_program * glsl, int ids); void draw_vertices (int id); glsl_program * free_this_glsl_program (glsl_program * glsl); glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj); object_3d * duplicate_object_3d (object_3d * old_obj); * * Notes: * */ #include "global.h" #include "interface.h" #include "glview.h" #include "ogl_shading.h" /* Create and compile a shader */ /*! \fn GLuint create_shader (int type, const GLchar * src) \brief create an OpenGL GLSL shader \param type type of the shader \param src name of the shader */ GLuint create_shader (int type, const GLchar * src) { GLuint shader; int status; shader = glCreateShader (type); glShaderSource (shader, 1, & src, NULL); glCompileShader (shader); glGetShaderiv (shader, GL_COMPILE_STATUS, & status); if (status == GL_FALSE) { int log_len; char *buffer; glGetShaderiv (shader, GL_INFO_LOG_LENGTH, & log_len); buffer = g_malloc0(log_len + 1); glGetShaderInfoLog (shader, log_len, NULL, buffer); g_warning (_("Compilation failure in %s shader:\n%s"), type == GL_VERTEX_SHADER ? "vertex" : "fragment", buffer); g_free (buffer); glDeleteShader (shader); return 0; } return shader; } /*! \fn GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) \brief allocate GLuint data pointer, ensure that it is clean \param pointer the data pointer to allocate \param shaders the data size to allocate */ GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) { if (pointer != NULL) { g_free (pointer); pointer = NULL; } return allocgluint(shaders); } #define LIGHT_INFO 3 #define MATERIAL_DATA 8 #define FOG_DATA 5 #define LIGHT_DATA 10 /*! \fn void allocate_instances (object_3d * object) \brief allocate the instances buffer of a 3D object \param object the target object_3d */ void allocate_instances (object_3d * object) { object -> instances = allocfloat (object -> num_instances * object -> inst_buffer_size); } /*! \fn void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) \brief set lightning uniform location \param lightning \param id shader id \param j light id \param k uniform id \param string uniform string */ void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) { gchar * light_string = g_strdup_printf ("AllLights[%d].%s", j, string); lightning[LIGHT_INFO+MATERIAL_DATA+FOG_DATA+LIGHT_DATA*j+k] = glGetUniformLocation (id, light_string); g_free (light_string); } /*! \fn GLuint * glsl_add_lights (glsl_program * glsl) \brief add lightning to an OpenGL shader program \param glsl the target glsl */ GLuint * glsl_add_lights (glsl_program * glsl) { int tot = MATERIAL_DATA + plot -> l_ghtning.lights * LIGHT_DATA + LIGHT_INFO + FOG_DATA; GLuint * lightning = allocgluint(tot); lightning[0] = glGetUniformLocation (glsl -> id, "m_view"); lightning[1] = glGetUniformLocation (glsl -> id, "m_proj"); lightning[2] = glGetUniformLocation (glsl -> id, "view_is_ortho"); lightning[3] = glGetUniformLocation (glsl -> id, "lights_on"); lightning[4] = glGetUniformLocation (glsl -> id, "mat.albedo"); lightning[5] = glGetUniformLocation (glsl -> id, "mat.metallic"); lightning[6] = glGetUniformLocation (glsl -> id, "mat.roughness"); lightning[7] = glGetUniformLocation (glsl -> id, "mat.ambient_occlusion"); lightning[8] = glGetUniformLocation (glsl -> id, "mat.gamma"); lightning[9] = glGetUniformLocation (glsl -> id, "mat.alpha"); lightning[10] = glGetUniformLocation (glsl -> id, "fog.mode"); lightning[11] = glGetUniformLocation (glsl -> id, "fog.based"); lightning[12] = glGetUniformLocation (glsl -> id, "fog.density"); lightning[13] = glGetUniformLocation (glsl -> id, "fog.depth"); lightning[14] = glGetUniformLocation (glsl -> id, "fog.color"); lightning[15] = glGetUniformLocation (glsl -> id, "numLights"); int j; for (j=0; j l_ghtning.lights; j++) { set_light_uniform_location (lightning, glsl -> id, j, 0, "type"); set_light_uniform_location (lightning, glsl -> id, j, 1, "position"); set_light_uniform_location (lightning, glsl -> id, j, 2, "direction"); set_light_uniform_location (lightning, glsl -> id, j, 3, "intensity"); set_light_uniform_location (lightning, glsl -> id, j, 4, "constant"); set_light_uniform_location (lightning, glsl -> id, j, 5, "linear"); set_light_uniform_location (lightning, glsl -> id, j, 6, "quadratic"); set_light_uniform_location (lightning, glsl -> id, j, 7, "cone_angle"); set_light_uniform_location (lightning, glsl -> id, j, 8, "spot_inner"); set_light_uniform_location (lightning, glsl -> id, j, 9, "spot_outer"); } return lightning; } /*! \fn void glsl_bind_points (glsl_program * glsl, object_3d * obj) \brief bind a 3D object point to an OpenGL shader program \param glsl the target glsl \param obj the 3D object point to bind */ void glsl_bind_points (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "size"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "vertColor"); // The points vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The instances (pos + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); } /*! \fn void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) \brief bind a 3D object sphere to an OpenGL shader program \param glsl the target glsl \param obj the 3D object sphere to bind */ void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "vertColor"); // The sphere vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The sphere indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); } /*! \fn void glsl_bind_lines (glsl_program * glsl, object_3d * obj) \brief bind a 3D object line to an OpenGL shader program \param glsl the target glsl \param obj the 3D object line to bind */ void glsl_bind_lines (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "vertColor"); // The line vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size *sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 4, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size *sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); if (glsl -> object == MEASU) { glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "factor"); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "pattern"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "text_proj"); glsl -> uniform_loc[4] = glGetUniformLocation (glsl -> id, "un_view"); glsl -> uniform_loc[5] = glGetUniformLocation (glsl -> id, "viewp"); glsl -> uniform_loc[6] = glGetUniformLocation (glsl -> id, "depth"); } } /*! \fn void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) \brief bind a 3D object cylinder to an OpenGL shader program \param glsl the target glsl \param obj the 3D object, cylinder to bind */ void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "height"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "quat"); glsl -> array_pointer[5] = glGetAttribLocation (glsl -> id, "vertColor"); // The cylinder vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The cylinder indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + lenght, + rad + rot + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (5*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); glEnableVertexAttribArray (glsl -> array_pointer[5]); glVertexAttribPointer (glsl -> array_pointer[5], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (9*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[5], 1); if (obj -> inst_buffer_size == CYLI_BUFF_SIZE + 2) { glsl -> array_pointer[6] = glGetAttribLocation (glsl -> id, "r_sphere_a"); glsl -> array_pointer[7] = glGetAttribLocation (glsl -> id, "r_sphere_b"); glEnableVertexAttribArray (glsl -> array_pointer[6]); glVertexAttribPointer (glsl -> array_pointer[6], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (13*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[6], 1); glEnableVertexAttribArray (glsl -> array_pointer[7]); glVertexAttribPointer (glsl -> array_pointer[7], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (14*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[7], 1); } } /*! \fn void glsl_bind_caps (glsl_program * glsl, object_3d * obj) \brief bind a 3D object cylinder cap to an OpenGL shader program \param glsl the target glsl \param obj the 3D object, cylinder cap to bind */ void glsl_bind_caps (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "quat"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "vertColor"); // The cylinder vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The cylinder indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + length, + rad + rot + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (8*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); } /*! \fn void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj) \brief bind a 3D object polyhedra to an OpenGL shader program \param glsl the target glsl \param obj the 3D object polyhedra to bind */ void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "vertNormal"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "vertColor"); // The polyhedra vertices (triangles + normal orientation) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glEnableVertexAttribArray(glsl -> array_pointer[2]); glVertexAttribPointer(glsl -> array_pointer[2], 4, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (6*sizeof(GLfloat))); } /*! \fn void glsl_bind_background (glsl_program * glsl, object_3d * obj) \brief bind background data to an OpenGL shader program \param glsl the target glsl \param obj the 3D object to bind */ void glsl_bind_background (glsl_program * glsl, object_3d * obj) { glsl -> uniform_loc[0] = glGetUniformLocation (glsl -> id, "first_color"); glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "second_color"); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "gradient"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "position"); glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); } /*! \fn void update_string_instances (glsl_program * glsl, object_3d * obj) \brief Update OpenGL string texture instances \param glsl the target glsl \param obj */ void update_string_instances (glsl_program * glsl, object_3d * obj) { // The instances (pos) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[2], 1); if (glsl -> object == MEASU) { glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (6*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); if (obj -> inst_buffer_size == 12) { glEnableVertexAttribArray (glsl -> array_pointer[5]); glVertexAttribPointer (glsl -> array_pointer[5], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (9*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[5], 1); } } } /*! \fn void glsl_bind_string (glsl_program * glsl, object_3d * obj) \brief bind a 3D object text string to an OpenGL shader program \param glsl the target glsl \param obj the 3D object text string to bind */ void glsl_bind_string (glsl_program * glsl, object_3d * obj) { glActiveTexture (GL_TEXTURE0); glBindTexture (ogl_texture, obj -> texture); glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "tex"); glUniform1i (glsl -> uniform_loc[1], 0); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "text_proj"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "un_view"); glsl -> uniform_loc[4] = glGetUniformLocation (glsl -> id, "viewp"); glsl -> uniform_loc[5] = glGetUniformLocation (glsl -> id, "pos_shift"); glsl -> uniform_loc[6] = glGetUniformLocation (glsl -> id, "vert_color"); glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "tcoord"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "offset"); if (glsl -> object == MEASU) { glsl -> uniform_loc[7] = glGetUniformLocation (glsl -> id, "tilted"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "at_a"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "at_b"); if (obj -> inst_buffer_size == 12) glsl -> array_pointer[5] = glGetAttribLocation (glsl -> id, "at_c"); } // The string (rendered using triangles and textures + colors) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (2*sizeof(GLfloat))); update_string_instances (glsl, obj); } /*! \fn object_3d * duplicate_object_3d (object_3d * old_obj) \brief create a copy of an object_3d data structure \param old_obj the data structure to copy */ object_3d * duplicate_object_3d (object_3d * old_obj) { object_3d * new_obj = g_malloc0(sizeof*new_obj); new_obj -> quality = old_obj -> quality; // Vertices new_obj -> num_vertices = old_obj -> num_vertices; new_obj -> vert_buffer_size = old_obj -> vert_buffer_size; new_obj -> vertices = duplicate_float (new_obj -> num_vertices*old_obj -> vert_buffer_size, old_obj -> vertices); // Indices new_obj -> num_indices = old_obj -> num_indices; new_obj -> ind_buffer_size = old_obj -> ind_buffer_size; if (old_obj -> indices != NULL) { new_obj -> indices = duplicate_int (new_obj -> num_indices*old_obj -> ind_buffer_size, old_obj -> indices); } // Instances new_obj -> num_instances = old_obj -> num_instances; new_obj -> inst_buffer_size = old_obj -> inst_buffer_size; if (old_obj -> instances != NULL) { new_obj -> instances = duplicate_float (new_obj -> num_instances*old_obj -> inst_buffer_size, old_obj -> instances); } new_obj -> texture = old_obj -> texture; int i; for (i=0; i<5; i++) new_obj -> shift[i] = old_obj -> shift[i]; return new_obj; } /*! \fn object_3d * free_object_3d (object_3d * obj) \brief free the memory allocated to create an object_3d data structure \param obj the target object_3d data structure to free */ object_3d * free_object_3d (object_3d * obj) { if (obj -> vertices) g_free (obj -> vertices); if (obj -> indices) g_free (obj -> indices); if (obj -> instances) g_free (obj -> instances); g_free (obj); return NULL; } /*! \fn glsl_program * free_this_glsl_program (glsl_program * glsl) \brief free memory allocated to create a glsl program \param glsl the target glsl program */ glsl_program * free_this_glsl_program (glsl_program * glsl) { if (glsl -> array_pointer) g_free (glsl -> array_pointer); if (glsl -> uniform_loc) g_free (glsl -> uniform_loc); if (glsl -> light_uniform) g_free (glsl -> light_uniform); if (glsl -> vbo) g_free (glsl -> vbo); glsl -> obj = free_object_3d (glsl -> obj); g_free (glsl); return NULL; } /*! \fn glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj) \brief create an OpenGL shader program \param object shader id (in enum shaders) \param object_id shader type in: GLSL_SPHERES, GLSL_POINTS, GLSL_LINES, GLSL_CYLINDERS, GLSL_CAPS, GLSL_POLYEDRA, GLSL_STRING, GLSL_BACK \param vertex general shader: in the shaders defined in 'ogl_shaders.c' \param geometry geometry shader, if any: in the shaders defined in 'ogl_shaders.c' \param fragment color shader, if any: in the shaders defined in 'ogl_shaders.c' \param type_of_vertices type of vertices in: GL_POINTS, GL_LINES, GL_TRIANGLE GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP \param narray number of vertices to allocate \param nunif number of uniform location(s) to allocate \param lightning use lightning (1/0) \param obj the object 3D to bind to the shader */ glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj) { glsl_program * glsl = g_malloc0(sizeof * glsl); glsl -> id = glCreateProgram (); glsl -> object = object; glsl -> draw_type = object_id; glsl -> vertex_shader = create_shader (GL_VERTEX_SHADER, vertex); glAttachShader (glsl -> id, glsl -> vertex_shader); if (geometry != NULL) { glsl -> geometry_shader = create_shader (GL_GEOMETRY_SHADER, geometry); glAttachShader (glsl -> id, glsl -> geometry_shader); } glsl -> fragment_shader = create_shader (GL_FRAGMENT_SHADER, fragment); glAttachShader (glsl -> id, glsl -> fragment_shader); glBindFragDataLocation (glsl -> id, 0, "fragment_color"); glLinkProgram(glsl -> id); glsl -> vert_type = type_of_vertices; glGenVertexArrays (1, & glsl -> vao); glBindVertexArray (glsl -> vao); glsl -> array_pointer = alloc_shader_pointer (glsl -> array_pointer, narray); glsl -> uniform_loc = alloc_shader_pointer (glsl -> uniform_loc, nunif); // For other than background always the MVP matrix as uniform 0 if (object_id != GLSL_BACK) glsl -> uniform_loc[0] = glGetUniformLocation (glsl -> id, "mvp"); // and always the vertices as array 0 glsl -> array_pointer[0] = glGetAttribLocation (glsl -> id, "vert"); glsl -> light_uniform = NULL; if (lightning) glsl -> light_uniform = glsl_add_lights (glsl); glsl -> obj = duplicate_object_3d (obj); if (glsl -> draw_type != GLSL_STRING) obj = free_object_3d (obj); glsl -> draw_instanced = FALSE; int nvbo = 1; if (glsl -> obj -> num_indices > 0) nvbo ++; if (glsl -> obj -> num_instances > 0) { nvbo ++; if (glsl -> obj -> num_instances > 1) glsl -> draw_instanced = TRUE; } glsl -> vbo = allocgluint (nvbo); glGenBuffers (nvbo, glsl -> vbo); switch (object_id) { case GLSL_SPHERES: // narray = 4 glsl_bind_spheres (glsl, glsl -> obj); break; case GLSL_POINTS: // narray = 4 glsl_bind_points (glsl, glsl -> obj); break; case GLSL_LINES: // narray = 3 glsl_bind_lines (glsl, glsl -> obj); break; case GLSL_CYLINDERS: // narray = 6 glsl_bind_cylinders (glsl, glsl -> obj); break; case GLSL_CAPS: // narray = 5 glsl_bind_caps (glsl, glsl -> obj); break; case GLSL_POLYEDRA: glsl_bind_polyhedra (glsl, glsl -> obj); break; case GLSL_STRING: glsl_bind_string (glsl, glsl -> obj); break; case GLSL_BACK: glsl_bind_background (glsl, glsl -> obj); break; } glDetachShader (glsl -> id,glsl -> vertex_shader); if (geometry != NULL) glDetachShader (glsl -> id, glsl -> geometry_shader); glDetachShader (glsl -> id, glsl -> fragment_shader); return glsl; } /*! \fn gboolean in_md_shaders (project * this_proj, int id) \brief is this shader MD dependent ? \param this_proj the target project \param id the shader id */ gboolean in_md_shaders (project * this_proj, int id) { if (id == ATOMS) return TRUE; if (id == BONDS) return TRUE; if (id == POLYS) return TRUE; if (id == RINGS) return TRUE; if (id == SELEC) return TRUE; if (id == MDBOX) return this_proj -> cell.npt; if (id == VOLMS) return TRUE; return FALSE; } /*! \fn void re_create_all_md_shaders (glwin * view) \brief re-initialize all MD dependent OpenGL shaders \param view the target glwin */ void re_create_all_md_shaders (glwin * view) { int i, j; project * this_proj = get_project_by_id(view -> proj); for (i=0; i steps; j++) view -> n_shaders[i][j] = -1; } } } /*! \fn void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj) \brief re-initialize some MD dependent OpenGL shaders \param nshaders the number of shader(s) to initialize \param shaders the list of shaders \param this_proj the target project */ void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj) { int i, j, k; for (i=0; i modelgl -> create_shaders[k] = TRUE; for (j=0; j steps; j++) { this_proj -> modelgl -> n_shaders[k][j] = -1; } } } /*! \fn void cleaning_shaders (glwin * view, int shader) \brief re-initialize an OpenGL shader \param view the target glwin \param shader the shader to initialize */ void cleaning_shaders (glwin * view, int shader) { int i, j, k; i = (in_md_shaders(get_project_by_id(view -> proj), shader)) ? step : 0; if (view -> ogl_glsl[shader][i] != NULL) { j = view -> n_shaders[shader][i]; for (k=0; k ogl_glsl[shader][i][k] = free_this_glsl_program (view -> ogl_glsl[shader][i][k]); } view -> n_shaders[shader][i] = (in_md_shaders(get_project_by_id(view -> proj), shader)) ? -1 : 0; } /*! \fn void recreate_all_shaders (glwin * view) \brief re-initialize all OpenGL shaders \param view the target glwin */ void recreate_all_shaders (glwin * view) { int i; for (i=0; i create_shaders[i] = TRUE; } } /*! \fn void init_default_shaders (glwin * view) \brief re-initialize the default OpenGL shaders \param view the target glwin */ void init_default_shaders (glwin * view) { int shaders[6] = {ATOMS, BONDS, SELEC, POLYS, RINGS, VOLMS}; re_create_md_shaders (6, shaders, get_project_by_id (view -> proj)); view -> create_shaders[LABEL] = TRUE; view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); int i; if (is_atom_win_active(view) || (view -> mode == EDITION && (view -> anim -> last -> img -> selected[1] -> selected || view -> selection_mode == 5))) { if (view -> measure_win != NULL) { for (i=0; i<3; i++) { if (view -> measure_win -> selection_tree[i] != NULL) update_selection_tree (view, 1, i); } } } } /*! \fn void init_shaders (glwin * view) \brief initialize all the OpenGL shaders \param view the target glwin */ void init_shaders (glwin * view) { int i, j; project * this_proj = get_project_by_id (view -> proj); for (i=0; i ogl_glsl[i] = NULL; if (in_md_shaders (this_proj, i)) { view -> ogl_glsl[i] = g_malloc0(this_proj -> steps*sizeof*view -> ogl_glsl[i]); view -> n_shaders[i] = allocint (this_proj -> steps); for (j=0; j steps; j++) { view -> n_shaders[i][j] = -1; } } else { j = (i == MEASU) ? 2 : 1; view -> ogl_glsl[i] = g_malloc0(j*sizeof*view -> ogl_glsl[i]); view -> ogl_glsl[i][0] = NULL; view -> n_shaders[i] = allocint (j); } view -> create_shaders[i] = TRUE; } } /*! \fn gboolean glsl_disable_cull_face (glsl_program * glsl) \brief Disable or enable cull face for OpenGL rendering \param glsl the target glsl */ gboolean glsl_disable_cull_face (glsl_program * glsl) { if (glsl -> draw_type == GLSL_POINTS) { return FALSE; } else if (glsl -> draw_type == GLSL_LINES) { return FALSE; } else if (glsl -> draw_type == GLSL_LIGHT) { return FALSE; } else { return TRUE; } } /*! \fn void set_lights_data (glsl_program * glsl) \brief set lightning data for an OpenGL progam \param glsl the target glsl */ void set_lights_data (glsl_program * glsl) { int j, k; vec3_t l_pos, l_dir; glUniformMatrix4fv (glsl -> light_uniform[0], 1, GL_FALSE, & wingl -> model_view_matrix.m00); glUniformMatrix4fv (glsl -> light_uniform[1], 1, GL_FALSE, & wingl -> projection_matrix.m00); glUniform1i (glsl -> light_uniform[2], plot -> rep); glUniform1i (glsl -> light_uniform[3], (glsl -> draw_type == GLSL_LIGHT) ? 0 : plot -> m_terial.param[0]); glUniform3f (glsl -> light_uniform[4], plot -> m_terial.albedo.x, plot -> m_terial.albedo.y, plot -> m_terial.albedo.z); for (j=0; j<5; j++) glUniform1f (glsl -> light_uniform[5+j], plot -> m_terial.param[j+1]); glUniform1i (glsl -> light_uniform[10], plot -> f_g.mode); glUniform1i (glsl -> light_uniform[11], plot -> f_g.based); glUniform1f (glsl -> light_uniform[12], plot -> f_g.density/plot -> p_depth); glUniform2f (glsl -> light_uniform[13], plot -> f_g.depth[0]*plot -> p_depth/100.0 + plot -> p_depth, plot -> f_g.depth[1]*plot -> p_depth/100.0+ plot -> p_depth); glUniform3f (glsl -> light_uniform[14], plot -> f_g.color.x, plot -> f_g.color.y, plot -> f_g.color.z); glUniform1i (glsl -> light_uniform[15], plot -> l_ghtning.lights); for (j=0; j l_ghtning.lights; j++) { k = j*LIGHT_DATA + LIGHT_INFO + MATERIAL_DATA + FOG_DATA; glUniform1i (glsl -> light_uniform[k], plot -> l_ghtning.spot[j] -> type); if (plot -> l_ghtning.spot[j] -> fix == 0) { l_pos = m4_mul_pos (wingl -> model_matrix, plot -> l_ghtning.spot[j] -> position); } else { l_pos = m4_mul_pos (wingl -> model_view_matrix, plot -> l_ghtning.spot[j] -> position); } glUniform3f (glsl -> light_uniform[k+1], l_pos.x, l_pos.y, l_pos.z); if (plot -> l_ghtning.spot[j] -> fix == 0) { l_dir = m4_mul_pos (wingl -> model_matrix, plot -> l_ghtning.spot[j] -> direction); } else { l_dir = m4_mul_pos (wingl -> model_view_matrix, plot -> l_ghtning.spot[j] -> direction); } glUniform3f (glsl -> light_uniform[k+2], l_dir.x, l_dir.y, l_dir.z); glUniform3f (glsl -> light_uniform[k+3], plot -> l_ghtning.spot[j] -> intensity.x, plot -> l_ghtning.spot[j] -> intensity.y, plot -> l_ghtning.spot[j] -> intensity.z); glUniform1f (glsl -> light_uniform[k+4], plot -> l_ghtning.spot[j] -> attenuation.x); glUniform1f (glsl -> light_uniform[k+5], plot -> l_ghtning.spot[j] -> attenuation.y); glUniform1f (glsl -> light_uniform[k+6], plot -> l_ghtning.spot[j] -> attenuation.z); glUniform1f (glsl -> light_uniform[k+7], cos(plot -> l_ghtning.spot[j] -> spot_data.x*pi/180.0)); glUniform1f (glsl -> light_uniform[k+8], cos(plot -> l_ghtning.spot[j] -> spot_data.y*pi/180.0)); glUniform1f (glsl -> light_uniform[k+9], cos(plot -> l_ghtning.spot[j] -> spot_data.z*pi/180.0)); } } uint16_t stipple_pattern[NDOTS]={ 0xAAAA, 0x1111, 0x0000, 0x55FF, 0x24FF, 0x3F3F, 0x33FF, 0x27FF}; int this_tilt; int this_pattern; int this_factor; /*! \fn void shading_glsl_text (glsl_program * glsl) \brief Render text in OpenGL \param glsl the target glsl */ void shading_glsl_text (glsl_program * glsl) { wingl -> label_projection_matrix = create_label_matrices (); glUniformMatrix4fv (glsl -> uniform_loc[2], 1, GL_FALSE, & wingl -> label_projection_matrix.m00); glUniformMatrix4fv (glsl -> uniform_loc[3], 1, GL_FALSE, & wingl -> un_view_matrix.m00); glUniform4f (glsl -> uniform_loc[4], wingl -> view_port.w, wingl -> view_port.x, wingl -> view_port.y, wingl -> view_port.z); glUniform4f (glsl -> uniform_loc[5], glsl -> obj -> shift[0], glsl -> obj -> shift[1], glsl -> obj -> shift[2], glsl -> obj -> shift[3]); glUniform4f (glsl -> uniform_loc[6], glsl -> col -> red, glsl -> col -> green, glsl -> col -> blue, glsl -> col -> alpha); if (glsl -> object == MEASU) glUniform1i (glsl -> uniform_loc[7], this_tilt); } /*! \fn void render_this_shader (glsl_program * glsl, int ids) \brief render an OpenGL shader \param glsl the target glsl \param ids */ void render_this_shader (glsl_program * glsl, int ids) { int j, k; if (glsl -> object == MAXIS) { j = 0; if (is_atom_win_active(wingl)) { k = wingl -> atom_win -> active; if (wingl -> atom_win -> show_axis[k]) { j = wingl -> atom_win -> axis[k]; } } wingl -> axis_proj_model_view_matrix = create_axis_matrices (j); glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> axis_proj_model_view_matrix.m00); j = (plot -> xyz -> axis == WIREFRAME) ? 1 : 3; if (ids > j) shading_glsl_text (glsl); } else if (glsl -> object == LABEL) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); shading_glsl_text (glsl); } else if (glsl -> object == BACKG) { for (j=0; j<2; j++) { glUniform4f (glsl -> uniform_loc[j], plot -> back -> gradient_color[j].red, plot -> back -> gradient_color[j].green, plot -> back -> gradient_color[j].blue, plot -> back -> gradient_color[j].alpha); } glUniform1i (glsl -> uniform_loc[2], plot -> back -> direction); glUniform1f (glsl -> uniform_loc[3], plot -> back -> position); } else if (glsl -> object == MEASU) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); if (glsl -> vert_type == GL_TRIANGLE_STRIP) { shading_glsl_text (glsl); } else { glUniform1i (glsl -> uniform_loc[1], this_factor); glUniform1ui (glsl -> uniform_loc[2], stipple_pattern[this_pattern]); if (glsl -> vert_type == GL_TRIANGLES) { wingl -> label_projection_matrix = create_label_matrices (); glUniformMatrix4fv (glsl -> uniform_loc[3], 1, GL_FALSE, & wingl -> label_projection_matrix.m00); } glUniformMatrix4fv (glsl -> uniform_loc[4], 1, GL_FALSE, & wingl -> un_view_matrix.m00); glUniform4f (glsl -> uniform_loc[5], wingl -> view_port.w, wingl -> view_port.x, wingl -> view_port.y, wingl -> view_port.z); if (plot -> rep == PERSPECTIVE) { glUniform1f (glsl -> uniform_loc[6], 1.0); } else { glUniform1f (glsl -> uniform_loc[6], plot -> p_depth); } } } else if (glsl -> object == LIGHT) { if (plot -> light_loc[ids]) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_matrix.m00); } else { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); } } else { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); } if (glsl -> line_width != 0.0) glLineWidth (glsl -> line_width); if (glsl -> light_uniform != NULL) set_lights_data (glsl); glBindVertexArray (glsl -> vao); if (glsl_disable_cull_face (glsl)) glDisable (GL_CULL_FACE); if (plot -> render == LINE) { glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); glLineWidth (1.0); } else if (plot -> render == PTS) { glPolygonMode (GL_FRONT_AND_BACK, GL_POINT); } else { glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); } if (glsl -> draw_type == GLSL_SPHERES || glsl -> draw_type == GLSL_CYLINDERS || glsl -> draw_type == GLSL_CAPS) { gboolean poly_offset = (! plot -> ray_tracing && (glsl -> draw_type == GLSL_CYLINDERS || glsl -> draw_type == GLSL_CAPS)); if (poly_offset) { glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } if (glsl -> draw_instanced) { glDrawElementsInstanced (glsl -> vert_type, glsl -> obj -> num_indices, GL_UNSIGNED_INT, 0, glsl -> obj -> num_instances); } else { glDrawElements (glsl -> vert_type, glsl -> obj -> num_indices, GL_UNSIGNED_INT, 0); } if (poly_offset) { glDisable (GL_POLYGON_OFFSET_FILL); } } else if (glsl -> draw_type == GLSL_POINTS || glsl -> draw_type == GLSL_LINES || glsl -> draw_type == GLSL_STRING) { if (glsl -> draw_type == GLSL_STRING) { glEnable (ogl_texture); glActiveTexture (GL_TEXTURE0); glBindTexture (ogl_texture, glsl -> obj -> texture); } #ifdef GTK4 else { glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } #endif if (glsl -> draw_instanced) { j = (glsl -> draw_type == GLSL_STRING) ? 4 : 3*(glsl -> draw_type+1); glDrawArraysInstanced (glsl -> vert_type, 0, j, glsl -> obj -> num_instances); } else { glDrawArrays (glsl -> vert_type, 0, glsl -> obj -> num_vertices); } #ifdef GTK4 if (glsl -> draw_type == GLSL_POINTS || glsl -> draw_type == GLSL_LINES) { glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); } #endif } else { if (glsl -> draw_type == GLSL_BACK) glDisable (GL_DEPTH_TEST); glDrawArrays (glsl -> vert_type, 0, glsl -> obj -> num_vertices); if (glsl -> draw_type == GLSL_BACK) glEnable (GL_DEPTH_TEST); } if (glsl_disable_cull_face (glsl)) glEnable (GL_CULL_FACE); glBindVertexArray (0); } /*! \fn void draw_vertices (int id) \brief Draw OpenGL shader program \param id the ID of the program to render */ void draw_vertices (int id) { int i, j; glsl_program * glsl; if (id != MEASU) { i = (in_md_shaders(proj_gl, id)) ? step : 0; for (j=0; j n_shaders[id][i]; j++) { if (wingl -> ogl_glsl[id][i][j]) { glsl = wingl -> ogl_glsl[id][i][j]; glUseProgram (glsl -> id); render_this_shader (glsl, j); } } } else { for (i=0; i<2; i++) { this_pattern = plot -> mpattern[i]; this_tilt = plot -> mtilt[i]; this_factor = plot -> mfactor[i]; for (j=0; j n_shaders[id][i]; j++) { if (wingl -> ogl_glsl[id][i][j]) { glsl = wingl -> ogl_glsl[id][i][j]; glUseProgram (glsl -> id); render_this_shader (glsl, j); } } } } } atomes_1.3.1/src/opengl/edit/0000775000175000017500000000000015212624223015505 5ustar lerouxlerouxatomes_1.3.1/src/opengl/edit/atom_species.c0000664000175000017500000001124215212624223020324 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_species.c * @short Functions to look for new chemical species and modify the chemical information accordingly * @author Sébastien Le Roux */ /* * This file: 'atom_species.c' * * Contains: * - The functions to look for new chemical species and modify the chemical information accordingly * * List of functions: int find_spec_id (int s, int z, double * list_z); int search_for_new_spec (atom_edition * edit, atomic_object * object); chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); */ #include "atom_edit.h" /*! \fn chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) \brief duplicate chemical data information \param spec the number of chemical species \param chem the chemical data to duplicate */ chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) { chemical_data * newchem = g_malloc0(sizeof*chem); newchem -> label = g_malloc0(spec*sizeof*newchem -> label); newchem -> element = g_malloc0(spec*sizeof*newchem -> element); int i, j; for (i=0; i label[i] = g_strdup_printf ("%s", chem -> label[i]); newchem -> element[i] = g_strdup_printf ("%s", chem -> element[i]); } newchem -> nsps = duplicate_int (spec, chem -> nsps); newchem -> formula = duplicate_int (spec, chem -> formula); newchem -> cutoffs = allocddouble (spec, spec); newchem -> grtotcutoff = chem -> grtotcutoff; newchem -> chem_prop = allocddouble (CHEM_PARAMS, spec); for (i=0; i cutoffs[i][j] = chem -> cutoffs[i][j]; for (j=0; j chem_prop[j][i] = chem -> chem_prop[j][i]; } return newchem; } /*! \fn int find_spec_id (int s, int z, double * list_z) \brief find species id based on Z \param s the number of chemical species \param z the target Z \param list_z the list of Z values */ int find_spec_id (int s, int z, double * list_z) { int i; if (list_z) { for (i=0; i coord; int i, j, k, l, m; i = 0; for (j=0; j species; j++) { if (object -> old_z[j] > 0) { k = find_spec_id (coord -> species, object -> old_z[j], edit -> new_z); if (k < 0) { i ++; edit -> new_z = g_realloc (edit -> new_z, (coord -> species+i)*sizeof*edit -> new_z); edit -> new_z[coord -> species+i-1] = (double)object -> old_z[j]; } } } if (i) { coord_info * tmp = duplicate_coord_info (edit -> coord); for (j=0; j<2; j++) { if (coord -> species) { g_free (coord -> ntg[j]); g_free (coord -> geolist[j]); } coord -> ntg[j] = allocint (coord -> species + i); coord -> geolist[j] = g_malloc0((coord -> species + i)*sizeof* coord -> geolist[j]); if (j) { if (coord -> species) g_free (coord -> partial_geo); coord -> partial_geo = g_malloc0((coord -> species + i)*sizeof*coord -> partial_geo); } for (k=0; k species; k++) { coord -> ntg[j][k] = tmp -> ntg[j][k]; coord -> geolist[j][k] = duplicate_int (tmp -> ntg[j][k], tmp -> geolist[j][k]); if (j) { coord -> partial_geo[k] = allocdint (coord -> ntg[j][k], coord -> species + i); for (l=0; l ntg[j][k]; l++) { for (m=0; m species; m++) { coord -> partial_geo[k][l][m] = tmp -> partial_geo[k][l][m]; } } } } } coord -> species += i; g_free (tmp); } return i; } atomes_1.3.1/src/opengl/edit/cell_density.c0000664000175000017500000001262715212624223020337 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_density.c * @short Functions to create the 'density adjustment' tab in the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_density.c' * * Contains: * - The functions to create the 'density adjustment' tab in the cell edition window * * List of functions: void display_density (cell_edition * cell, double vol, double dens, double adens); G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data); GtkWidget * adjust_density_tab (project * this_proj); */ #include "cell_edit.h" /*! \fn void display_density (cell_edition * cell, double vol, double dens, double adens) \brief create density information widgets \param cell the target cell edition \param vol the volume \param dens the density \param adens the atomic density */ void display_density (cell_edition * cell, double vol, double dens, double adens) { cell -> density = destroy_this_widget (cell -> density); cell -> density = create_vbox (BSEP); GtkWidget * hbox; gchar * pname[3]= {i18n("Volume:"), i18n("Mass density:"), i18n("Number density:")}; gchar * punit[3]= {"Å3", "g/cm3", i18n("atom/Å3")}; double val[3]; val[0] = vol; val[1] = dens; val[2] = adens; int i; gchar * str; for (i=0; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cell -> density, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(pname[i]), 120, -1, 0.0, 0.5), FALSE, FALSE, 100); str = g_strdup_printf ("%f", val[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((i==2) ? _(punit[i]) : punit[i], 20, -1, 0.5, 0.5), FALSE, FALSE, 10); } add_box_child_start (GTK_ORIENTATION_VERTICAL, cell -> density_box, cell -> density, FALSE, FALSE, 10); show_the_widgets (cell -> density); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) \brief homogeneous rescaling toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) \brief homogeneous rescaling toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) #endif { glwin * view = (glwin *)data; view -> cell_win -> homo_density = button_get_status ((GtkWidget *)but); widget_set_sensitive (view -> cell_win -> shift_box[1], view -> cell_win -> homo_density); } /*! \fn GtkWidget * adjust_density_tab (project * this_proj) \brief create the density tab \param this_proj the target project */ GtkWidget * adjust_density_tab (project * this_proj) { GtkWidget * layout = create_layout (350, 400); GtkWidget * vbox = create_vbox (BSEP); layout_add_widget (layout, vbox, 100, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Modify the density of the simulation box *: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Homogeneous rescaling **"), -1, -1, this_proj -> modelgl -> cell_win -> homo_density, G_CALLBACK(set_rescaling), this_proj -> modelgl), FALSE, FALSE, 5); int i; for (i=3; i<6; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> density_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> modelgl -> cell_win -> density_box, FALSE, FALSE, 5); display_density (this_proj -> modelgl -> cell_win, this_proj -> cell.volume, this_proj -> cell.density, this_proj -> natomes/this_proj -> cell.volume); gchar * info[2] = {i18n(" * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated."), i18n("** Keep the ratios between the lattice vectors A, B and C like in the initial cell.")}; for (i=0; i<2; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(info[i]), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/cbuild_info.c0000664000175000017500000004577615212624223020151 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_info.c * @short Functions to create the space group information dialog * @author Sébastien Le Roux */ /* * This file: 'cbuild_info.c' * * Contains: * - The functions to create the space group information dialog * * List of functions: gchar * get_bravais (int spg); gchar * get_frac (float val); void get_wyck_char (float val, int ax, int bx); void get_extra_val (float val, int ax); void get_wyck_names (space_group * spg, int i, int j); void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg); G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data); GtkWidget * create_wyckoff_tree (space_group * spg); GtkWidget * create_setting_info (space_group * spg, int sid); GtkWidget * create_wyck_pts_info (space_group * spg, int sid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "cbuild_edit.h" extern int get_crystal_id (int spg); extern int get_bravais_img_id (int spg); extern gchar * frac_string (gchar * init); extern gchar * get_num_string (gchar * str); extern gchar * get_so_string (space_group * spg, int id); extern GtkTreeModel * so_combo_tree (space_group * spg); extern gchar * tmp_pos; extern gchar * latt_info[7]; GtkWidget * info_hsbox; GtkWidget * info_vs; GtkWidget * wypts_vbox; GtkWidget * info_wyck_pts; GtkWidget * info_wyck_scroll; GtkWidget * info_wyck_tree; gchar * wnpos[3] = {NULL, NULL, NULL}; /*! \fn gchar * get_bravais (int spg) \brief retrieve the space group bravais lattice \param spg the target space group id */ gchar * get_bravais (int spg) { if (groups[spg-1][0] == 'A' || groups[spg-1][0] == 'C') { return _("Base-centered"); } else if (groups[spg-1][0] == 'F') { return _("Face-centered"); } else if (groups[spg-1][0] == 'I') { return _("Body-centered"); } else if (groups[spg-1][0] == 'P') { return _("Primitive "); } else if (groups[spg-1][0] == 'R') { return _("Rhombohedral"); } else { return NULL; } } /*! \fn gchar * get_frac (float val) \brief get string for value \param val the target value */ gchar * get_frac (float val) { float vallist[12] = {1.0, 1.0/2.0, 1.0/4.0, 3.0/4.0, 1.0/8.0, 3.0/8.0, 5.0/8.0, 7.0/8.0, 1.0/3.0, 2.0/3.0, 1.0/6.0, 5.0/6.0}; gchar * charlist[12] = {"1", "1/2", "1/4", "3/4", "1/8", "3/8", "5/8", "7/8", "1/3", "2/3", "1/6", "5/6"}; int i; for (i=0; i<12; i++) { if (fabs(val) - vallist[i] == 0.0) return g_strdup_printf ("%s", charlist[i]); } return NULL; } /*! \fn void get_wyck_char (float val, int ax, int bx) \brief convert wyckoff value to string \param val the target value \param ax axis id, x = 0, y = 1, z = 2 \param bx axis label 0 = "x", 1 = "y", 2 = "z" */ void get_wyck_char (float val, int ax, int bx) { if (wnpos[ax]) { if (fabs(val) == 1.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s", wnpos[ax], vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("%s-%s", wnpos[ax], vect_comp[bx]); } } else if (val != 0.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s%s", wnpos[ax], get_frac(val), vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("%s-%s%s", wnpos[ax], get_frac(val), vect_comp[bx]); } } } else { if (fabs(val) == 1.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s", vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("-%s", vect_comp[bx]); } } else if (val != 0.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s%s", get_frac(val), vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("-%s%s", get_frac(val), vect_comp[bx]); } } } } /*! \fn void get_extra_val (float val, int ax) \brief convert wyckoff extra value to string \param val the target value \param ax axis id, x = 0, y = 1, z = 2 */ void get_extra_val (float val, int ax) { if (val) { if (wnpos[ax]) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s", wnpos[ax], get_frac(val)); } else { wnpos[ax] = g_strdup_printf ("%s-%s", wnpos[ax], get_frac(val)); } } else { float v = (val > 0.0) ? val : 1.0 + val; v = (v == 1.0) ? 0.0 : v; if (v != 0.0) wnpos[ax] = g_strdup_printf ("%s", get_frac(v)); } } } /*! \fn void get_wyck_names (space_group * spg, int i, int j) \brief get the name of this wyckoff position \param spg the target space group \param i the wyckoff position id \param j the multiplicity for this wyckoff position */ void get_wyck_names (space_group * spg, int i, int j) { int k, l; double spgpos[3][4]; mat4_t wpos; for (k=0; k<3; k++) { tmp_pos = g_strdup_printf ("%s", spg -> wyckoff[i].pos[j][k]); for (l=0; l<3; l++) { spgpos[k][l] = get_val_from_wyckoff (vect_comp[l], spg -> wyckoff[i].pos[j][k]); } if (tmp_pos) { spgpos[k][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[k][3] = 0.0; } } wpos = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); if (i == spg -> numw - 1) m4_print (wpos); wpos = m43_mul(spg -> wyck_origin, wpos); for (k=0; k<3; k++) { if (wnpos[k]) { g_free (wnpos[k]); wnpos[k] = NULL; } } get_wyck_char (wpos.m00, 0, 0); get_wyck_char (wpos.m10, 0, 1); get_wyck_char (wpos.m20, 0, 2); get_extra_val (wpos.m30, 0); get_wyck_char (wpos.m01, 1, 0); get_wyck_char (wpos.m11, 1, 1); get_wyck_char (wpos.m21, 1, 2); get_extra_val (wpos.m31, 1); get_wyck_char (wpos.m02, 2, 0); get_wyck_char (wpos.m12, 2, 1); get_wyck_char (wpos.m22, 2, 2); get_extra_val (wpos.m32, 2); for (k=0; k<3; k++) if (! wnpos[k]) wnpos[k] = g_strdup_printf ("0"); } /*! \fn static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) \brief fill wyckoff position tree store \param store the tree store to fill \param spg the target space group */ static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) { GtkTreeIter wlevel; GtkTreeIter mlevel; int i, j, k; gchar * str; gchar * strw[3]; if (spg) { for (i=0; i numw; i++) { gtk_tree_store_append (store, & wlevel, NULL); str = g_strdup_printf ("%d", spg -> wyckoff[i].multi); gtk_tree_store_set (store, & wlevel, 0, 1, 1, i+1, 2, str, 3, spg -> wyckoff[i].let, 4, spg -> wyckoff[i].site, -1); g_free (str); for (j=0; j wyckoff[i].multi; j++) { get_wyck_names (spg, i, j); gtk_tree_store_append (store, & mlevel, & wlevel); for (k= 0; k<3; k++) strw[k] = frac_string (wnpos[k]); str = g_strdup_printf ("(%s,%s,%s)", strw[0], strw[1], strw[2]); for (k= 0; k<3; k++) g_free (strw[k]); gtk_tree_store_set (store, & mlevel, 0, 0, 5, str, -1); g_free (str); } } } } /*! \fn void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer, if visible then add or not pango markup \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if ((j && (i > 1 && i < 5)) || (!j && i==5)) { set_renderer_markup (mod, iter, renderer, i); } gtk_cell_renderer_set_visible (renderer, (i<5) ? j : ! j); } /*! \fn GtkWidget * create_wyckoff_tree (space_group * spg) \brief create wyckoff position tree \param spg the target space group */ GtkWidget * create_wyckoff_tree (space_group * spg) { int i; GtkTreeViewColumn * wcol[6]; GtkCellRenderer * wcell[6]; gchar * wtitle[6] = {" ", i18n("Id."), i18n("Multiplicity"), i18n("Letter"), i18n("Symmetry"), i18n("Coordinates")}; gchar * wtype[6] = {"text", "text", "text", "text", "text", "text"}; GType w_type[6] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING}; GtkTreeStore * wmodel = gtk_tree_store_newv (6, w_type); GtkWidget * wtree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(wmodel)); for (i=0; i<6; i++) { wcell[i] = gtk_cell_renderer_text_new(); wcol[i] = gtk_tree_view_column_new_with_attributes((i) ? _(wtitle[i]) : wtitle[i], wcell[i], wtype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(wtree), wcol[i]); gtk_tree_view_column_set_cell_data_func (wcol[i], wcell[i], set_wisible, GINT_TO_POINTER(i), NULL); if (!i) gtk_tree_view_column_set_visible (wcol[i], FALSE); } fill_wyckoff_model (wmodel, spg); g_object_unref (wmodel); return wtree; } /*! \fn GtkWidget * create_setting_info (space_group * spg, int sid) \brief create setting information label \param spg the target space group \param sid the setting id */ GtkWidget * create_setting_info (space_group * spg, int sid) { gchar * sxyz[3]; int i; for (i=0; i<3; i++) { sxyz[i] = g_strdup_printf ("%s", spg -> settings[sid].pos[i]); sxyz[i] = frac_string (sxyz[i]); } gchar * str = g_strdup_printf ("(%s,%s,%s)", sxyz[0], sxyz[1], sxyz[2]); for (i=0; i<3; i++) g_free (sxyz[i]); GtkWidget * label = markup_label(str, 90, -1, 0.0, 0.5); g_free (str); return label; } /*! \fn GtkWidget * create_wyck_pts_info (space_group * spg, int sid) \brief create wyckoff label \param spg the target space group \param sid the setting id */ GtkWidget * create_wyck_pts_info (space_group * spg, int sid) { int i, j; gchar * str; gchar * sxyz[3]; if (spg -> settings[sid].nump > 1) { for (i=0; i settings[sid].nump; i++) { for (j=0; j<3; j++) { sxyz[j] = g_strdup_printf ("%s", spg -> settings[sid].points[i][j]); sxyz[j] = frac_string (sxyz[j]); } if (! i) { str = g_strdup_printf ("+(%s,%s,%s)", sxyz[0], sxyz[1], sxyz[2]); } else { str = g_strdup_printf ("%s\t+(%s,%s,%s)", str, sxyz[0], sxyz[1], sxyz[2]); } for (j=0; j<3; j++) g_free (sxyz[j]); } return markup_label(str, -1, -1, 0.5, 0.5); } else { return NULL; } } /*! \fn G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) \brief change space group origin \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i = combo_get_active ((GtkWidget *)box); combo_set_active (cbuilder -> so_combo, i); if (i > -1) { info_vs = destroy_this_widget (info_vs); info_vs = create_setting_info (cbuilder -> cell.sp_group, i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, info_vs, FALSE, FALSE, 5); show_the_widgets (info_vs); info_wyck_pts = destroy_this_widget(info_wyck_pts); info_wyck_pts = create_wyck_pts_info (cbuilder -> cell.sp_group, i); if (info_wyck_pts) { add_box_child_start (GTK_ORIENTATION_VERTICAL, wypts_vbox, info_wyck_pts, FALSE, FALSE, 0); show_the_widgets (wypts_vbox); } if (info_wyck_scroll) { info_wyck_tree = destroy_this_widget (info_wyck_tree); info_wyck_tree = create_wyckoff_tree (cbuilder -> cell.sp_group); add_container_child (CONTAINER_SCR, info_wyck_scroll, info_wyck_tree); show_the_widgets (info_wyck_scroll); } } } /*! \fn G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) \brief show space group information dialog callback \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) { tint * id = (tint *) data; space_group * spg = get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.sp_group; gchar * str = g_strdup_printf (_("%s info"), groups[spg -> id-1]); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); GtkWidget * info = dialogmodal (str, GTK_WINDOW(get_project_by_id(id -> a) -> modelgl -> builder_win -> win)); GtkWidget * vbox, * hbox; vbox = dialog_get_content_area (info); GtkWidget * ivbox[2]; GtkWidget * ihbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ihbox, FALSE, FALSE, 0); int xsize = 150; int i; for (i=0; i<2; i++) { ivbox[i] = create_vbox(i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ihbox, ivbox[i], FALSE, FALSE, 0); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Space group: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", groups[spg -> id-1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Number: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%d", spg -> id); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Hermman-Mauguin: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", spg -> hms); str = g_strdup_printf ("%s", get_num_string(str)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Crystal system: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", spg -> bravais); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); str = get_bravais(spg -> id); if (str) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Bravais lattice: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Lattice constraints: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", latt_info[get_crystal_id (spg -> id)]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); GtkWidget * bvimg = gtk_image_new_from_file (bravais_img[get_bravais_img_id(spg -> id)]); #ifdef GTK4 gtk_widget_set_size_request (bvimg, 200, 200); gtk_widget_set_hexpand (bvimg, TRUE); gtk_widget_set_vexpand (bvimg, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[1], bvimg, FALSE, FALSE, 5); info_hsbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_hsbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, markup_label(_("Setting(s): "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); if (spg -> nums > 1) { GtkTreeModel * model = so_combo_tree (spg); GtkWidget * sbox = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (sbox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (sbox), renderer, "text", 0, NULL); gtk_widget_set_size_request (sbox, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, sbox, FALSE, FALSE, 5); combo_set_active (sbox, 0); g_signal_connect (G_OBJECT(sbox), "changed", G_CALLBACK(set_so_info), get_project_by_id(id -> a) -> modelgl -> builder_win); combo_set_markup (sbox); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, markup_label(get_so_string (spg, 0), 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } info_vs = create_setting_info (spg, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, info_vs, FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Wyckoff position(s): "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); wypts_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wypts_vbox, FALSE, FALSE, 5); info_wyck_pts = create_wyck_pts_info (spg, 0); if (info_wyck_pts) add_box_child_start (GTK_ORIENTATION_VERTICAL, wypts_vbox, info_wyck_pts, FALSE, FALSE, 0); info_wyck_scroll = create_scroll (NULL, 400, 200, GTK_SHADOW_NONE); info_wyck_tree = create_wyckoff_tree (spg); add_container_child (CONTAINER_SCR, info_wyck_scroll, info_wyck_tree); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_wyck_scroll, FALSE, FALSE, 5); show_the_widgets (info); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); } atomes_1.3.1/src/opengl/edit/cbuild_sg.c0000664000175000017500000006703515212624223017617 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_sg.c * @short Functions to read space group data from XML files * @author Sébastien Le Roux */ /* * This file: 'cbuild_sg.c' * * Contains: * - The functions to read space group data from XML files * * List of functions: int get_this_group_data (space_group * spg, xmlNodePtr racine); space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader); space_group * read_sg_xml_file (const char * filetoread); */ #include "global.h" #include "cbuild_edit.h" gchar * groups[230] = {"P1", "P-1", "P2", "P21", "C2", "Pm", "Pc", "Cm", "Cc", "P2/m", "P21/m", "C2/m", "P2/c", "P21/c", "C2/c", "P222", "P2221", "P21212", "P212121", "C2221", "C222", "F222", "I222", "I212121", "Pmm2", "Pmc21", "Pcc2", "Pma2", "Pca21", "Pnc2", "Pmn21", "Pba2", "Pna21", "Pnn2", "Cmm2", "Cmc21", "Ccc2", "Amm2", "Aem2", "Ama2", "Aea2", "Fmm2", "Fdd2", "Imm2", "Iba2", "Ima2", "Pmmm", "Pnnn", "Pccm", "Pban", "Pmma", "Pnna", "Pmna", "Pcca", "Pbam", "Pccn", "Pbcm", "Pnnm", "Pmmn", "Pbcn", "Pbca", "Pnma", "Cmcm", "Cmce", "Cmmm", "Cccm", "Cmme", "Ccce", "Fmmm", "Fddd", "Immm", "Ibam", "Ibca", "Imma", "P4", "P41", "P42", "P43", "I4", "I41", "P-4", "I-4", "P4/m", "P42/m", "P4/n", "P42/n", "I4/m", "I41/a", "P422", "P4212", "P4122", "P41212", "P4222", "P42212", "P4322", "P43212", "I422", "I4122", "P4mm", "P4bm", "P42cm", "P42nm", "P4cc", "P4nc", "P42mc", "P42bc", "I4mm", "I4cm", "I41md", "I41cd", "P-42m", "P-42c", "P-421m", "P-421c", "P-4m2", "P-4c2", "P-4b2", "P-4n2", "I-4m2", "I-4c2", "I-42m", "I-42d", "P4/mmm", "P4/mcc", "P4/nbm", "P4/nnc", "P4/mbm", "P4/mnc", "P4/nmm", "P4/ncc", "P42/mmc", "P42/mcm", "P42/nbc", "P42/nnm", "P42/mbc", "P42/mnm", "P42/nmc", "P42/ncm", "I4/mmm", "I4/mcm", "I41/amd", "I41/acd", "P3", "P31", "P32", "R3", "P-3", "R-3", "P312", "P321", "P3112", "P3121", "P3212", "P3221", "R32", "P3m1", "P31m", "P3c1", "P31c", "R3m", "R3c", "P-31m", "P-31c", "P-3m1", "P-3c1", "R-3m", "R-3c", "P6", "P61", "P65", "P62", "P64", "P63", "P-6", "P6/m", "P63/m", "P622", "P6122", "P6522", "P6222", "P6422", "P6322", "P6mm", "P6cc", "P63cm", "P63mc", "P-6m2", "P-6c2", "P-62m", "P-62c", "P6/mmm", "P6/mcc", "P63/mcm", "P63/mmc", "P23", "F23", "I23", "P213", "I213", "Pm-3", "Pn-3", "Fm-3", "Fd-3", "Im-3", "Pa-3", "Ia-3", "P432", "P4232", "F432", "F4132", "I432", "P4332", "P4132", "I4132", "P-43m", "F-43m", "I-43m", "P-43n", "F-43c", "I-43d", "Pm-3m", "Pn-3n", "Pm-3n", "Pn-3m", "Fm-3m", "Fm-3c", "Fd-3m", "Fd-3c", "Im-3m", "Ia-3d"}; gchar * hmsymbols[230] = {"P 1", "P -1", "P 1 2 1", "P 1 21 1", "C 1 2 1", "P 1 m 1", "P 1 c 1", "C 1 m 1", "C 1 c 1", "P 1 2/m 1", "P 1 21/m 1", "C 1 2/m 1", "P 1 2/c 1", "P 1 21/c 1", "C 1 2/c 1", "P 2 2 2", "P 2 2 21", "P 21 21 2", "P 21 21 21", "C 2 2 21", "C 2 2 2", "F 2 2 2", "I 2 2 2", "I 21 21 21", "P m m 2", "P m c 21", "P c c 2", "P m a 2", "P c a 21", "P n c 2", "P m n 21", "P b a 2", "P n a 21", "P n n 2", "C m m 2", "C m c 21", "C c c 2", "A m m 2", "A e m 2", "A m a 2", "A e a 2", "F m m 2", "F d d 2", "I m m 2", "I b a 2", "I ma 2", "P 2/m 2/m 2/m", "P 2/n 2/n 2/n", "P 2/c 2/c 2/m", "P 2/b 2/a 2/n", "P 21 /m 2/m 2/a", "P 2/n 21/n 2/a", "P 2/m 2/n 21/a", "P 21/c 2/c 2/a", "P 21/b 21/a 2/m", "P 21/c 21/c 2/n", "P 2/b 21/c 21/m", "P 21/n 21/n 2/m", "P 21/m 21/m 2/n", "P 21/b 2/c 21/n", "P 21/b 21/c 21/a", "P 21/n 21/m 21/a", "C 2/m 2/c 21/m", "C 2/m 2/c 21/e", "C 2/m 2/m 2/m", "C 2/c 2/c 2/m", "C 2/m 2/m 2/e", "C 2/c 2/c 2/e", "F 2/m 2/m 2/m", "F 2/d 2/d 2/d", "I 2/m 2/m 2/m", "I 2/b 2/a 2/m", "I 21/b 21/c 21/a", "I 21/m 21/m 21/a", "P 4", "P 41", "P 42", "P 43", "I 4", "I 41", "P -4", "I -4", "P 4/m", "P 42/m", "P 4/n", "P 42/n", "I 4/m", "I 41/a", "P 4 2 2", "P 4 21 2", "P 41 2 2", "P 41 21 2", "P 42 2 2", "P 42 21 2", "P 43 2 2", "P 43 21 2", "I 4 2 2", "I 41 2 2", "P 4 m m", "P 4 b m", "P 42 c m", "P 42 n m", "P 4 c c", "P 4 n c", "P 42 m c", "P 42 b c", "I 4 m m", "I 4 c m", "I 41 m d", "I 41 c d", "P -4 2 m", "P -4 2 c", "P -4 21 m", "P -4 21 c", "P -4 m 2", "P -4 c 2", "P -4 b 2", "P -4 n 2", "I -4 m 2", "I -4 c 2", "I -4 2 m", "I -4 2 d", "P 4/m 2/m 2/m", "P 4/m 2/c 2/c", "P 4/n 2/b 2/m", "P 4/n 2/n 2/c", "P 4/m 21/b 2/m", "P 4/m 21/b 2/m", "P 4/n 21/m 2/m", "P 4/n 21/c 2/c", "P 42/m 2/m 2/c", "P 42/m 2/c 2/m", "P 42/n 2/b 2/c", "P 42/n 2/n 2/m", "P 42/m 21/b 2/c", "P 42/m 21/n 2/m", "P 42/n 21/m 2/c", "P 42/n 21/c 2/m", "I 4/m 2/m 2/m", "I 4/m 2/c 2/m", "I 41/a 2/m 2/d", "I 41/a 2/c 2/d", "P 3", "P 31", "P 32", "R 3", "P -3", "R -3", "P 3 1 2", "P 3 2 1", "P 31 1 2", "P 31 2 1", "P 32 1 2", "P 32 2 1", "R 3 2", "P 3 m 1", "P 3 1 m", "P 3 c 1", "P 3 1 c", "R 3 m", "R 3 c", "P -3 1 2/m", "P -3 1 2/c", "P -3 2/m 1", "P -3 2/c 1", "R -3 2/m", "R -3 2/c", "P 6", "P 61", "P 65", "P 62", "P 64", "P 63", "P -6", "P 6/m", "P 63/m", "P 6 2 2", "P 61 2 2", "P 65 2 2", "P 62 2 2", "P 64 2 2", "P 63 2 2", "P 6 m m", "P 6 c c", "P 63 c m", "P 63 m c", "P -6 m 2", "P -6 c 2", "P -6 2 m", "P -6 2 c", "P 6/m 2/m 2/m", "P 6/m 2/c 2/c", "P 63/m 2/c 2/m", "P 63/m 2/m 2/c", "P 2 3", "F 2 3", "I 2 3", "P 21 3", "I 21 3", "P 2/m -3", "P 2/n -3", "F 2/m -3", "F 2/d -3", "I 2/m -3", "P 21/a -3", "I 21/a -3", "P 4 3 2", "P 42 3 2", "F 4 3 2", "F 41 3 2", "I 4 3 2", "P 43 3 2", "P 41 3 2", "I 41 3 2", "P -4 3 m", "F -4 3 m", "I -4 3 m", "P -4 3 n", "F -4 3 c", "I -4 3 d", "P 4/m -3 2/m", "P 4/n -3 2/n", "P 42/m -3 2/n", "P 42/n -3 2/m", "F 4/m -3 2/m", "F 4/m -3 2/c", "F 41/d -3 2/m", "F 41/d -3 2/c", "I 4/m -3 2/m", "I 41/a -3 2/d"}; /*! \fn space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief clean space group and corresponding XML data \param doc the XML doc pointer to free \param reader the XML reader to free */ space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return NULL; } /*! \fn int get_this_group_data (space_group * spg, xmlNodePtr racine) \brief retrieve space group data \param spg the space group pointer to fill \param racine the XML node root */ int get_this_group_data (space_group * spg, xmlNodePtr racine) { xmlNodePtr node, num_node; xmlNodePtr the_setting, the_point; xmlNodePtr sp_node, ps_node, pp_node; xmlAttrPtr s_node, p_node; xmlChar * content; int val; int j, k; node = findnode (racine -> children, "settings"); if (node == NULL) return 0; s_node = node -> properties; if (s_node == NULL) return 0; while (s_node) { num_node = s_node -> children; if (num_node == NULL) return 0; if (g_strcmp0 ("num",(char *)s_node -> name) == 0) { content = xmlNodeGetContent(num_node); val = (int) string_to_double ((gpointer)content); xmlFree (content); } s_node = s_node -> next; } if (! val) return 0; spg -> nums = val; spg -> settings = g_malloc0(spg -> nums*sizeof*spg -> settings); node = node -> children; if (node == NULL) return 0; j = 0; for (sp_node = node; sp_node; sp_node = sp_node -> next) { if (sp_node -> type == XML_ELEMENT_NODE) { s_node = sp_node -> properties; if (s_node == NULL) return 0; while (s_node) { the_setting = s_node -> children; if (the_setting == NULL) return 0; content = xmlNodeGetContent(the_setting); if (g_strcmp0 ("name",(char *)s_node -> name) == 0) { spg -> settings[j].name = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("origin",(char *)s_node -> name) == 0) { spg -> settings[j].origin = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("x",(char *)s_node -> name) == 0) { spg -> settings[j].pos[0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("y",(char *)s_node -> name) == 0) { spg -> settings[j].pos[1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("z",(char *)s_node -> name) == 0) { spg -> settings[j].pos[2] = g_strdup_printf ("%s", content); } xmlFree (content); s_node = s_node -> next; } ps_node = findnode (sp_node -> children, "points"); if (ps_node) { p_node = ps_node -> properties; if (p_node == NULL) return 0; while (p_node) { num_node = p_node -> children; if (num_node == NULL) return 0; if (g_strcmp0 ("num",(char *)p_node -> name) == 0) { content = xmlNodeGetContent(num_node); val = (int) string_to_double ((gpointer)content); xmlFree (content); } p_node = p_node -> next; } if (! val) return 0; spg -> settings[j].nump = val; spg -> settings[j].points = g_malloc0(val*sizeof*spg -> settings[j].points); ps_node = ps_node -> children; if (ps_node == NULL) return 0; k = 0; for (pp_node = ps_node; pp_node; pp_node = pp_node->next) { if (pp_node -> type == XML_ELEMENT_NODE) { s_node = pp_node -> properties; if (s_node == NULL) return 0; spg -> settings[j].points[k] = g_malloc0(3*sizeof*spg -> settings[j].points[k]); while (s_node) { the_point = s_node -> children; if (the_point == NULL) return 0; content = xmlNodeGetContent(the_point); if (g_strcmp0 ("x",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("y",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("z",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][2] = g_strdup_printf ("%s", content); } xmlFree (content); s_node = s_node -> next; } k ++; } } } j ++; } } return 1; } /*! \fn space_group * read_sg_xml_file (const char * filetoread) \brief read space group data from XML file \param filetoread the file to read */ space_group * read_sg_xml_file (const char * filetoread) { int i, j; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, node, num_node; xmlNodePtr cp_node, wp_node, wc_node; xmlNodePtr the_wyck, the_pos; xmlAttrPtr c_node, w_node, p_node; xmlChar * content; space_group * spg = g_malloc0(sizeof*spg); reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine -> name), "sg-xml") != 0) return clean_sgl_data (doc, reader); spg = g_malloc0(sizeof*spg); node = findnode (racine -> children, "space-group"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> name = g_strdup_printf ("%s", content); xmlFree (content); node = findnode (racine -> children, "sg-num"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> id = (int) string_to_double ((gpointer)content); xmlFree (content); node = findnode (racine -> children, "hm-symbol"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> hms = g_strdup_printf ("%s", content); xmlFree (content); node = findnode (racine -> children, "bravais"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> bravais = g_strdup_printf ("%s", content); xmlFree (content); // Settings if (!get_this_group_data (spg, racine)) return clean_sgl_data (doc, reader); node = findnode(racine -> children, "wyckoff"); if (node == NULL) return clean_sgl_data (doc, reader); c_node = node -> properties; if (c_node == NULL) return clean_sgl_data (doc, reader); while (c_node) { num_node = c_node -> children; if (num_node == NULL) return clean_sgl_data (doc, reader); if (g_strcmp0 ("num",(char *)c_node -> name) == 0) { content = xmlNodeGetContent(num_node); spg -> numw = (int) string_to_double ((gpointer)content); xmlFree (content); } c_node = c_node -> next; } if (! spg -> numw) return clean_sgl_data (doc, reader); spg -> wyckoff = g_malloc0(spg -> numw*sizeof*spg -> wyckoff); i = 0; node = node -> children; if (node == NULL) return clean_sgl_data (doc, reader); for (cp_node = node; cp_node; cp_node = cp_node->next) { if (cp_node -> type == XML_ELEMENT_NODE) { w_node = cp_node -> properties; if (w_node == NULL) return clean_sgl_data (doc, reader); while (w_node) { the_wyck = w_node -> children; if (the_wyck == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(the_wyck); if (g_strcmp0 ("mul",(char *)w_node -> name) == 0) { spg -> wyckoff[i].multi = (int)string_to_double ((gpointer)content); } else if (g_strcmp0 ("let",(char *)w_node -> name) == 0) { spg -> wyckoff[i].let = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("site",(char *)w_node -> name) == 0) { spg -> wyckoff[i].site = g_strdup_printf ("%s", content); } xmlFree (content); w_node = w_node -> next; } spg -> wyckoff[i].pos = g_malloc0(spg -> wyckoff[i].multi*sizeof*spg -> wyckoff[i].pos); wp_node = cp_node -> children; if (wp_node == NULL) return clean_sgl_data (doc, reader); j = 0; for (wc_node = wp_node; wc_node; wc_node = wc_node->next) { if (wc_node -> type == XML_ELEMENT_NODE) { p_node = wc_node -> properties; if (p_node == NULL) return clean_sgl_data (doc, reader); spg -> wyckoff[i].pos[j] = g_malloc0(3*sizeof*spg -> wyckoff[i].pos[j]); while (p_node) { the_pos = p_node -> children; if (the_pos == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(the_pos); if (g_strcmp0 ("x",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("y",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("z",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][2] = g_strdup_printf ("%s", content); } xmlFree (content); p_node = p_node -> next; } j ++; } } i ++; } } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return spg; } } atomes_1.3.1/src/opengl/edit/atom_geo.c0000664000175000017500000003475315212624223017457 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_geo.c * @short Functions to check for the appropriate atomic coordinations * @author Sébastien Le Roux */ /* * This file: 'atom_geo.c' * * Contains: * - The functions to check for the appropriate atomic coordinations * * List of functions: int is_this_a_new_geo (int id, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z); gboolean is_in_atom_list (int aid, atom * new_list); void sort_partial_geo (int ** geom, int num_a); void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating); */ #include "atom_edit.h" /*! \fn void sort_partial_geo (int ** geom, int num_a) \brief sort partial geometries \param geom the data to sort \param num_a the number of data point */ void sort_partial_geo (int ** geom, int num_a) { int i, j, k, l; for(i=0;i geom[j][0]) { for (k=0; k<2; k++) { l = geom[i][k]; geom[i][k] = geom[j][k]; geom[j][k] = l; } } } } } /*! \fn int is_this_a_new_geo (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) \brief if required create a new geometry, stored in coord, for coordination type 'gid' and chemical species 'new_sp', return geometry id \param gid the new coordination type (0 = total, 1 = partial) \param obj the new coordination info to update \param old_z old Z list \param old_geo the old coordination id \param old_sp the old chemical species id \param new_sp the new chemical species id \param coord the old coordination info \param new_z new Z list */ int is_this_a_new_geo (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) { int i, j, k, l, m, n, o; int ** n_part, ** o_part; // Number of coord of type id for spec new_sp i = coord -> ntg[gid][new_sp]; // Using j to store the total number of neighbor(s) for the coordination to test // Using k to store the number of type(s) of neighbor(s) for the coordination to test j = k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) { k ++; j += obj -> partial_geo[old_sp][old_geo][l]; } } // Then comparing with already stored data in coord for (l=0; l geolist[gid][new_sp][l] == obj -> geolist[gid][old_sp][old_geo]) return l; break; case 1: m = 0; n = 0; for (o=0; o species; o++) { if (coord -> partial_geo[new_sp][l][o]) { m ++; n += coord -> partial_geo[new_sp][l][o]; } } if (j == n && k == m) { // Same number of atoms in the coordination for the spec // 2 structures of size l: [0]= Z, [1] = nato // Sort by Z, then comparing n_part = allocdint (m, 2); o_part = allocdint (m, 2); m = 0; for (n=0; n species; n++) { if (coord -> partial_geo[new_sp][l][n]) { n_part[m][0] = (int)new_z[n]; n_part[m][1] = coord -> partial_geo[new_sp][l][n]; m ++; } } if (m > 1) sort_partial_geo (n_part, m); m = 0; for (n=0; n species; n++) { if (obj -> partial_geo[old_sp][old_geo][n]) { o_part[m][0] = old_z[n]; o_part[m][1] = obj -> partial_geo[old_sp][old_geo][n]; m ++; } } if (m > 1) sort_partial_geo (o_part, m); n = 1; for (o=0; o ntg[gid][new_sp]; if (! gid) { coord -> geolist[gid][new_sp] = g_realloc (coord -> geolist[gid][new_sp], (j+1)*sizeof*coord -> geolist[gid][new_sp]); coord -> geolist[gid][new_sp][coord -> ntg[gid][new_sp]] = obj -> geolist[gid][old_sp][old_geo]; } else { coord -> partial_geo[new_sp] = g_realloc (coord -> partial_geo[new_sp], (j+1)*sizeof*coord -> partial_geo[new_sp]); coord -> partial_geo[new_sp][j] = allocint (coord -> species); for (k=0; k species; k++) { if (old_z[k]) { l = find_spec_id (coord -> species, old_z[k], new_z); coord -> partial_geo[new_sp][j][l] = obj -> partial_geo[old_sp][old_geo][k]; } } } coord -> ntg[gid][new_sp] ++; coord -> totcoord[gid] ++; return i; } /*! \fn int find_this_geo_id (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) \brief if required create a new geometry, stored in coord, for coordination type 'gid' and chemical species 'new_sp', return geometry id \param gid the new coordination type (0 = total, 1 = partial) \param obj the new coordination info to update \param old_z old Z list \param old_geo the old coordination id for this coordination type \param old_sp the old chemical species id \param new_sp the new chemical species id \param coord the old coordination info \param new_z new Z list */ int find_this_geo_id (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) { int i, j, k, l, m, n, o; int ** n_part, ** o_part; // Number of coord of type id for spec new_sp i = coord -> ntg[gid][new_sp]; if (gid) { // Using j to store the total number of neighbor(s) for the coordination to test // Using k to store the number of type(s) of neighbor(s) for the coordination to test j = k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) { k ++; j += obj -> partial_geo[old_sp][old_geo][l]; } } } // Then comparing with already stored data in coord for (l=0; l ntg[gid][new_sp]; l++) { switch (gid) { case 0: if (coord -> geolist[0][new_sp][l] == obj -> geolist[0][old_sp][old_geo]) return l; break; case 1: m = 0; n = 0; for (o=0; o species; o++) { if (coord -> partial_geo[new_sp][l][o]) { m ++; n += coord -> partial_geo[new_sp][l][o]; } } if (j == n && k == m) { // Same number of atoms in the coordination for the spec // 2 structures of size l: [0]= Z, [1] = nato // Sort by Z, then comparing n_part = allocdint (m, 2); o_part = allocdint (m, 2); m = 0; for (n=0; n species; n++) { if (coord -> partial_geo[new_sp][l][n]) { n_part[m][0] = (int)new_z[n]; n_part[m][1] = coord -> partial_geo[new_sp][l][n]; m ++; } } if (m > 1) sort_partial_geo (n_part, m); m = 0; for (n=0; n species; n++) { if (obj -> partial_geo[old_sp][old_geo][n]) { o_part[m][0] = old_z[n]; o_part[m][1] = obj -> partial_geo[old_sp][old_geo][n]; m ++; } } if (m > 1) sort_partial_geo (o_part, m); n = 1; for (o=0; o ntg[gid][new_sp]; coord -> geolist[gid][new_sp] = g_realloc (coord -> geolist[gid][new_sp], (j+1)*sizeof*coord -> geolist[gid][new_sp]); coord -> geolist[gid][new_sp][j] = obj -> geolist[gid][old_sp][old_geo]; if (gid) { coord -> partial_geo[new_sp] = g_realloc (coord -> partial_geo[new_sp], (j+1)*sizeof*coord -> partial_geo[new_sp]); coord -> partial_geo[new_sp][j] = allocint (coord -> species); for (k=0; k species; k++) { if (old_z[k]) { l = find_spec_id (coord -> species, old_z[k], new_z); coord -> partial_geo[new_sp][j][l] = obj -> partial_geo[old_sp][old_geo][k]; } } } coord -> ntg[gid][new_sp] ++; coord -> totcoord[gid] ++; return i; } /*! \fn void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating) \brief check atom coordination modification on edition \param this_proj the target project \param old_id the old atom id list, if any \param new_list the new atom(s) list \param this_object the object to insert, if any \param movtion motion (1) or removal (2) \param passivating passivate */ void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating) { atom * tmp_new; int g, h, i, j, k, l, m, n; gboolean correct_it; int * new_z = allocint (this_proj -> nspec); double * old_z; if (this_object) old_z = duplicate_double (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_old_id; int * nvois = allocint (this_proj -> nspec); if (passivating) new_old_id = duplicate_int (this_proj -> natomes, old_id); for (i=0; i nspec; i++) { new_z[i] = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; } // first create a dummy coord structure to store an atom individual data coord_info * new_coord = g_malloc0(sizeof*new_coord); for (i=0; i<2; i++) { new_coord -> totcoord[i] = 1; new_coord -> ntg[i] = allocint (this_proj -> nspec); for (j=0; j nspec; j++) new_coord -> ntg[i][j] = 1; new_coord -> geolist[i] = allocdint (this_proj -> nspec, 1); } new_coord -> species = this_proj -> nspec; new_coord -> partial_geo = alloctint (this_proj -> nspec, 1, this_proj -> nspec); g = (passivating) ? 2 : 1; for (h=0; h sp; // Fill the dummy coord with the new atom information for (j=0; j<2; j++) new_coord -> geolist[j][i][0] = tmp_new -> numv; k = tmp_new -> coord[1]; for (j=0; j nspec; j++) { new_coord -> partial_geo[i][0][j] = this_proj -> coord -> partial_geo[i][k][j]; } j = tmp_new -> id; correct_it = FALSE; if (movtion) { for (k=0; k numv; k++) { l = tmp_new -> vois[k]; if ((old_id[j] > 0 && old_id[l] < 0) || (old_id[j] < 0 && old_id[l] > 0)) { correct_it = TRUE; // This neighbor will be moved / removed if (! passivating || h) { m = this_proj -> atoms[0][l].sp; // For the atom studied reduce the number of neighbors of that species: new_coord -> partial_geo[i][0][m] --; for (n=0; n<2; n++) new_coord -> geolist[n][i][0] --; } } } } else { for (k=0; k nspec; k++) nvois[k]=0; for (k=0; k numv; k++) { l = tmp_new -> vois[k]; m = this_object -> at_list[l].sp; nvois[m] ++; } l = 0; for (k=0; k nspec; k++) { if (nvois[k] != new_coord -> partial_geo[i][0][k]) { correct_it = TRUE; new_coord -> partial_geo[i][0][k] = nvois[k]; } l += nvois[k]; } for (k=0; k<2; k++) new_coord -> geolist[k][i][0] = l; } if (correct_it) { if (passivating && ! h) { if (old_id[j]) { switch (this_proj -> modelgl -> search_widg[8] -> filter) { case 0: l = i; break; case 1: l = tmp_new -> numv; break; case 2: l = tmp_new -> coord[1]; for (m=0; m coord -> ntg[1][m]; break; default: l = tmp_new -> coord[this_proj -> modelgl -> search_widg[8] -> filter-1]; break; } if (get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[3], l, 0)) new_old_id[j] = abs(old_id[j]); } } else { for (j=0; j<2; j++) { if (this_object) { tmp_new -> coord[j] = find_this_geo_id (j, new_coord, new_z, 0, i, i, this_object -> coord, old_z); } else { tmp_new -> coord[j] = find_this_geo_id (j, new_coord, new_z, 0, i, i, this_proj -> modelgl -> atom_win -> coord, this_proj -> modelgl -> atom_win -> new_z); } } } correct_it = FALSE; } tmp_new = tmp_new -> next; } if (passivating && ! h) { for (i=0; i natomes; i++) old_id[i] = new_old_id[i]; g_free (new_old_id); } } if (this_object) g_free (old_z); g_free (new_coord); g_free (nvois); } atomes_1.3.1/src/opengl/edit/cell_edit.h0000664000175000017500000000610515212624223017604 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_edit.h * @short Function declarations for the cell edition window * @author Sébastien Le Roux */ /* * This header file: 'cell_edit.h' * * Contains: - Function declarations for the cell edition window */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "glwindow.h" #ifndef CELL_EDIT_H_ #define CELL_EDIT_H_ extern char * box_prop[2][3]; extern void allocatoms (project * this_proj); extern void center_molecule (project * this_proj); extern gchar * edit_names[7]; extern gchar * mot[2][2]; extern GtkWidget * advanced_coord_properties (glwin * view, int page); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern void preserve_ogl_selection (glwin * view); extern void restore_ogl_selection (glwin * view); extern void create_slab_lists (project * this_proj); extern int is_selected; extern int selected_aspec; GtkWidget * create_cell_entries (project * this_proj, int i); GtkWidget * create_shift_box (project * this_proj); void display_density (cell_edition * cell, double vol, double dens, double adens); void shift_it (vec3_t shift, int refresh, int proj); void sens_superbut (project * this_proj); void invert_selection (project * this_proj); GtkWidget * shift_center_tab (project * this_proj); GtkWidget * add_extra_cell_tab (glwin * view); GtkWidget * supercell_tab (glwin * view); GtkWidget * adjust_density_tab (project * this_proj); GtkWidget * cut_in_model (project * this_proj); GtkWidget * pixels_tab (project * this_proj); extern void wrapping (glwin * view); extern G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data); #endif extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); #endif atomes_1.3.1/src/opengl/edit/cbuild_edit.c0000664000175000017500000014747715212624223020144 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_edit.c * @short Functions to create the crystal builder window * @author Sébastien Le Roux */ /* * This file: 'cbuild_edit.c' * * Contains: * - The functions to create the crystal builder window * * List of functions: int get_crystal_id (int spg); int get_bravais_img_id (int spg); int get_sg_num (GtkComboBox * box); int read_space_group (builder_edition * cbuilder, int spg); int get_group_id_from_name (gchar * sg_name); G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data); gchar * frac_string (gchar * init); gchar * get_num_string (gchar * str); gchar * get_so_string (space_group * spg, int id); void adjust_lattice_parameters (builder_edition * cbuilder); void adjust_so_combo (builder_edition * cbuilder); void adjust_bv_img (builder_edition * cbuilder); void adjust_lattice_constraints (builder_edition * cbuilder); void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl); void prepare_crystal_builder (gpointer data); G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data); G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data); G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void on_rounding_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data); G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data); GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview); GtkWidget * sg_info (int sg, gpointer data); GtkWidget * create_bl_combo (int cs, gpointer data); GtkWidget * builder_win (project * this_proj, gpointer data); GtkTreeModel * so_combo_tree (space_group * spg); GtkTreeModel * sg_combo_tree (int csid, int bvid); GtkTreeModel * la_combo_tree (); */ #include "global.h" #include "interface.h" #include "glview.h" #include "cbuild_edit.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "readers.h" extern G_MODULE_EXPORT void show_sg_info (GtkButton * but, gpointer data); extern void get_origin (space_group * spg); extern int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); extern int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); gchar * latt_info[7]={"a ≠ b ≠ c\nα ≠ β ≠ ɣ", // Triclinic i18n("a ≠ b ≠ c\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β"), // Monoclinic "a ≠ b ≠ c\nα = β = ɣ = 90°", // Orthorhombic "a = b ≠ c\nα = β = ɣ = 90°", // Tetragonal "a = b = c\nα = β = γ ≠ 90°", // Trigonal R i18n("a = b ≠ c\nα = β = 90° and ɣ = 120°"), // Hexagonal "a = b = c\nα = β = ɣ = 90°"}; // Cubic int nsg_bv[7]={2, 13, 59, 68, 25, 27, 36}; int min_bv[7]={0, 2, 15, 74, 142, 167, 194}; /*! \fn int get_crystal_id (int spg) \brief get the bravais lattice id from space group id \param spg the target space group id */ int get_crystal_id (int spg) { if (spg < 3) { return 0; } else if (spg < 16) { return 1; } else if (spg < 75) { return 2; } else if (spg < 143) { return 3; } else if (spg < 168) { if (groups[spg-1][0] == 'R') { return 4; } else { return 5; } } else if (spg < 195) { return 5; } else { return 6; } } /*! \fn int get_bravais_img_id (int spg) \brief get bravais image from space group id \param spg the target space group id */ int get_bravais_img_id (int spg) { if (spg < 3) { return 0; } else if (spg < 16) { if (groups[spg-1][0] == 'P') { return 1; } else { return 2; } } else if (spg < 75) { if (groups[spg-1][0] == 'P') { return 3; } else if (groups[spg-1][0] == 'I') { return 4; } else if (groups[spg-1][0] == 'A' || groups[spg-1][0] == 'C') { return 5; } else { return 6; } } else if (spg < 143) { if (groups[spg-1][0] == 'P') { return 7; } else { return 8; } } else if (spg < 168) { if (groups[spg-1][0] == 'R') { return 9; } else { return 10; } } else if (spg < 195) { return 10; } else { if (groups[spg-1][0] == 'P') { return 11; } else if (groups[spg-1][0] == 'I') { return 12; } else { return 13; } } } /*! \fn gchar * frac_string (gchar * init) \brief get pango string for fraction string \param init the target fraction string */ gchar * frac_string (gchar * init) { gchar * end = substitute_string (init, "1/2", "½"); end = substitute_string (end, "1/4", "¼"); end = substitute_string (end, "3/4", "¾"); end = substitute_string (end, "1/3", "⅓"); end = substitute_string (end, "2/3", "⅔"); end = substitute_string (end, "1/6", "⅙"); end = substitute_string (end, "5/6", "⅚"); end = substitute_string (end, "1/8", "⅛"); end = substitute_string (end, "3/8", "⅜"); end = substitute_string (end, "5/8", "⅝"); end = substitute_string (end, "7/8", "⅞"); return g_strdup_printf ("%s", end); } /*! \fn gchar * get_num_string (gchar * str) \brief get description string for entry string \param str the target string */ gchar * get_num_string (gchar * str) { str = replace_markup (str, "65", "65"); str = replace_markup (str, "64", "64"); str = replace_markup (str, "63", "63"); str = replace_markup (str, "62", "62"); str = replace_markup (str, "61", "61"); str = replace_markup (str, "43", "43"); str = replace_markup (str, "42", "42"); str = replace_markup (str, "41", "41"); str = replace_markup (str, "32", "32"); str = replace_markup (str, "31", "31"); return substitute_string (str, "21", "21"); } /*! \fn gchar * get_so_string (space_group * spg, int id) \brief get space group setting descrption string \param spg the target space group \param id the space grop setting */ gchar * get_so_string (space_group * spg, int id) { gchar * str = replace_markup (spg -> settings[id].name, "s", "/"); str = get_num_string (str); str = substitute_string (str, "_", NULL); if (spg -> settings[id].origin) { str = g_strdup_printf ("%s (%d)", str, spg -> settings[id].origin); } return str; } /*! \fn GtkTreeModel * so_combo_tree (space_group * spg) \brief create the space group setting combo box tree model \param spg the target space group */ GtkTreeModel * so_combo_tree (space_group * spg) { GtkTreeIter iter; GtkTreeStore * store; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); if (! spg) return GTK_TREE_MODEL (store); if (spg -> nums > 1) { for (i=0; i nums; i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, get_so_string (spg, i), -1); } } else { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, groups[spg -> id-1], -1); } return GTK_TREE_MODEL (store); } /*! \fn GtkTreeModel * sg_combo_tree (int csid, int bvid) \brief create the space group combo box tree model \param csid the crystal system \param bvid the bravais lattice */ GtkTreeModel * sg_combo_tree (int csid, int bvid) { GtkTreeIter iter; GtkTreeStore * store; int i; gboolean doit; gchar * str; store = gtk_tree_store_new (1, G_TYPE_STRING); for (i=min_bv[csid]; ia, b, c, α β ɣ", i18n("Vectors")}; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); for (i=0; i<2; i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, (i) ? _(lat[i]) : lat[i], -1); } return GTK_TREE_MODEL (store); } /*! \fn int get_sg_num (GtkComboBox * box) \brief get space group number from active iter in tree model of combo box \param box the target GtkComboBox */ int get_sg_num (GtkComboBox * box) { GValue val = {0, }; GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; gchar * str = NULL; gchar * num = NULL; int i = 0; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); if (str) { num = g_strdup_printf ("%c%c%c", str[0], str[1], str[2]); i = (int) string_to_double ((gpointer)num); g_free (str); g_free (num); } } return i; } /*! \fn void adjust_lattice_parameters (builder_edition * cbuilder) \brief adjust lattice parameters depending on space group \param cbuilder the target build edition */ void adjust_lattice_parameters (builder_edition * cbuilder) { int i, j, k; j = get_sg_num (GTK_COMBO_BOX(cbuilder -> sg_combo)); k = get_crystal_id (j); box_info * box = & cbuilder -> cell.box[0]; switch (k) { case 1: box -> param[1][0] = 90.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; case 2: box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; case 3: box -> param[0][1] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; break; case 4: box -> param[0][1] = box -> param[0][0]; if (cbuilder -> cell.sp_group -> name[0] == 'R') { box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 0.0; } else { box -> param[1][0] = box -> param[1][1] = 90.0; box -> param[1][2] = 120.0; } box -> vect[1][1] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; break; case 5: box -> param[0][1] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = 90.0; box -> param[1][2] = 120.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; break; case 6: box -> param[0][1] = box -> param[0][2] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; box -> vect[1][1] = box -> vect[2][2] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; default: break; } if (cbuilder -> cell.ltype) { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (cbuilder -> ventry[i][j]) { if (GTK_IS_WIDGET(cbuilder -> ventry[i][j])) { update_entry_double (GTK_ENTRY(cbuilder -> ventry[i][j]), box -> vect[i][j]); } } } } } else { for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (cbuilder -> bentry[i][j]) { if (GTK_IS_WIDGET(cbuilder -> bentry[i][j])) { update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), box -> param[i][j]); } } } } if (cbuilder -> bentry[0][1]) { if (GTK_IS_WIDGET(cbuilder -> bentry[0][1])) { widget_set_sensitive (cbuilder -> bentry[0][1], (k > 2) ? 0 : 1); if (k > 2) update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][1]), ""); } } if (cbuilder -> bentry[0][2]) { if (GTK_IS_WIDGET(cbuilder -> bentry[0][2])) { widget_set_sensitive (cbuilder -> bentry[0][2], (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R')) ? 0 : 1); if (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R')) update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][2]), ""); } } for (i=0; i<3; i++) { if (cbuilder -> bentry[1][i]) { if (GTK_IS_WIDGET(cbuilder -> bentry[1][i])) { widget_set_sensitive (cbuilder -> bentry[1][i], (k > 1) || (k == 1 && ! i) ? 0 : 1); if (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R') { if (! i) { widget_set_sensitive (cbuilder -> bentry[1][i], 1); } else { update_entry_text (GTK_ENTRY(cbuilder -> bentry[1][i]), ""); } } } } } } } /*! \fn G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) \brief update lattice vector callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.box[0].vect[id -> b][id -> c] = v; update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) \brief update lattice box parameter callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v >= 0.0) { get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.box[0].param[id -> b][id -> c] = v; } update_entry_double (entry, v); } /*! \fn GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) \brief prepare the lattice parameters grid widget \param type the type of lattice system \param cbuilder the target builder edition \param glview the target glwin */ GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) { GtkWidget * table = gtk_grid_new (); int i, j, k; k = 0; for (i=0; i<3; i++) { for (j=0; j<3; j++, k++) { if (i < 2) cbuilder -> cell.box[0].param[i][j] = 0.0; cbuilder -> cell.box[0].vect[i][j] = 0.0; t_box[k].a = i; t_box[k].b = j; } } cbuilder -> cell.ltype = type; if (cbuilder -> cell.ltype) { k = 0; for (i=0; i<4; i++) { if (i > 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_name[i-1], 20, -1, 0.0, 0.5), 0, i, 1, 1); } for (j=0; j<4; j++) { if (j > 0) { if (i == 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_comp[j-1], -1, 20, 0.5, 0.5), j, 0, 1, 1); } else { cbuilder -> ventry[i-1][j-1] = create_entry (G_CALLBACK(update_cb_vect), 100, 15, FALSE, & cbuilder -> pointers[i][j]); update_entry_double (GTK_ENTRY(cbuilder -> ventry[i-1][j-1]), cbuilder -> cell.box[0].vect[i-1][j-1]); gtk_grid_attach (GTK_GRID (table), cbuilder -> ventry[i-1][j-1], j, i, 1, 1); k ++; } } } } } else { k = 0; for (i=0; i<2; i++) { //gtk_grid_attach (GTK_GRID (table), markup_label(box_p[i], -1, 50, 0.5, 0.5), 1, i+2*i, 1, 1); gtk_grid_attach (GTK_GRID (table), markup_label(" ", 20, -1, 0.5, 0.5), 0, i, 1, 1); for (j=0; j<3; j++, k++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_prop[i][j], -1, -1, 0.5, 0.5), j+1, i+2*i, 1, 1); cbuilder -> bentry[i][j] = create_entry (G_CALLBACK(update_cb_box), 100, 15, FALSE, & cbuilder -> pointers[i][j]); update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), cbuilder -> cell.box[0].param[i][j]); gtk_grid_attach (GTK_GRID (table), cbuilder -> bentry[i][j], j+1, i+2*i+1, 1, 1); } } adjust_lattice_parameters (cbuilder); } return table; } /*! \fn G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) \brief change the lattice system \param box the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; glwin * view = get_project_by_id(id -> a) -> modelgl; builder_edition * cbuilder = view -> builder_win; cbuilder -> lattice_grid = destroy_this_widget (cbuilder -> lattice_grid); cbuilder -> lattice_grid = prepare_lattice_grid (combo_get_active ((GtkWidget *)box), cbuilder, view); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> lattice_box, cbuilder -> lattice_grid, FALSE, FALSE, 5); show_the_widgets (cbuilder -> lattice_grid); } /*! \fn G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) \brief set space group setting \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; builder_edition * cbuilder = get_project_by_id(id -> a) -> modelgl -> builder_win; int i = combo_get_active ((GtkWidget *)box); gchar * str = g_strdup_printf ("(%s,%s,%s)", cbuilder -> cell.sp_group -> settings[i].pos[0], cbuilder -> cell.sp_group -> settings[i].pos[1], cbuilder -> cell.sp_group -> settings[i].pos[2]); cbuilder -> so_info = destroy_this_widget(cbuilder -> so_info); cbuilder -> so_info = markup_label(frac_string(str), -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_info, FALSE, FALSE, 10); show_the_widgets (cbuilder -> so_info); cbuilder -> cell.sp_group -> sid = i; get_origin (cbuilder -> cell.sp_group); } /*! \fn GtkWidget * sg_info (int sg, gpointer data) \brief create the space group information button \param sg space group id \param data the associated data pointer */ GtkWidget * sg_info (int sg, gpointer data) { gchar * str = g_strdup_printf (_("%s group info"), groups[sg]); GtkWidget * mlab = markup_label(str, -1, -1, 0.5, 0.5); GtkWidget * mbut = create_button (NULL, IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_sg_info), data); add_container_child (CONTAINER_BUT, mbut, mlab); show_the_widgets (mbut); return mbut; } /*! \fn int read_space_group (builder_edition * cbuilder, int spg) \brief read space group N°spg data from file \param cbuilder the target builder edition \param spg the space group id */ int read_space_group (builder_edition * cbuilder, int spg) { // Read file gchar * sgfile = substitute_string(groups[spg], "", NULL); sgfile = substitute_string(sgfile, "", NULL); sgfile = substitute_string(sgfile, "/", "s"); #ifdef G_OS_WIN32 sgfile = g_strdup_printf ("%s\\space_groups\\%d-%s.sgl", PACKAGE_LIB_DIR, spg+1, sgfile); #else sgfile = g_strdup_printf ("%s/space_groups/%d-%s.sgl", PACKAGE_LIB_DIR, spg+1, sgfile); #endif int res; if (cbuilder) { cbuilder -> cell.sp_group = read_sg_xml_file (sgfile); res = (cbuilder -> cell.sp_group) ? 1 : 0; } else if (this_reader) { this_reader -> lattice.sp_group = read_sg_xml_file (sgfile); res = (this_reader -> lattice.sp_group) ? 1 : 0; } g_free (sgfile); return res; } /*! \fn int get_group_id_from_name (gchar * sg_name) \brief get space group id from name \param sg_name the space group string */ int get_group_id_from_name (gchar * sg_name) { int i; for (i=0; i<230; i++) { if (g_strcmp0(groups[i], sg_name) == 0) return i+1; } return 0; } /*! \fn void adjust_so_combo (builder_edition * cbuilder) \brief adjust the space group setting combo box to use pango markup \param cbuilder the target builder edition */ void adjust_so_combo (builder_edition * cbuilder) { GtkTreeModel * model = so_combo_tree (cbuilder -> cell.sp_group); gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> so_combo), model); g_object_unref (model); combo_set_active (cbuilder -> so_combo, 0); combo_set_markup (cbuilder -> so_combo); widget_set_sensitive (cbuilder -> so_combo, cbuilder -> cell.sp_group -> nums-1); if (cbuilder -> cell.sp_group) get_origin (cbuilder -> cell.sp_group); } /*! \fn void adjust_bv_img (builder_edition * cbuilder) \brief adjust the bravais lattice image \param cbuilder the target builder edition */ void adjust_bv_img (builder_edition * cbuilder) { if (cbuilder -> bv_img) cbuilder -> bv_img = destroy_this_widget(cbuilder -> bv_img); cbuilder -> bv_img = gtk_image_new_from_file (bravais_img[get_bravais_img_id(cbuilder -> cell.sp_group -> id)]); #ifdef GTK4 gtk_widget_set_size_request (cbuilder -> bv_img, 200, 200); gtk_widget_set_hexpand (cbuilder -> bv_img, TRUE); gtk_widget_set_vexpand (cbuilder -> bv_img, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5); } /*! \fn void adjust_lattice_constraints (builder_edition * cbuilder) \brief adjust lattice constraints \param cbuilder the target builder edition */ void adjust_lattice_constraints (builder_edition * cbuilder) { if (cbuilder -> ltc_cons) cbuilder -> ltc_cons = destroy_this_widget(cbuilder -> ltc_cons); int i = get_crystal_id (cbuilder -> cell.sp_group -> id); gchar * str = g_strdup_printf ("%s", (i == 1 || i == 5) ? _(latt_info[i]) : latt_info[i]); cbuilder -> ltc_cons = markup_label(str, 150, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5); } /*! \fn G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) \brief change space group \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; builder_edition * cbuilder = get_project_by_id(id -> a) -> modelgl -> builder_win; int i = get_sg_num(box); if (i) { cbuilder -> sg_but = destroy_this_widget(cbuilder -> sg_but); if (read_space_group (cbuilder, i-1)) { cbuilder -> sg_but = sg_info (i-1, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_but, FALSE, FALSE, 10); if (cbuilder -> bv_box[0]) adjust_lattice_constraints (cbuilder); if (cbuilder -> bv_box[1]) adjust_bv_img (cbuilder); show_the_widgets (cbuilder -> bh_box); if (cbuilder -> so_combo) adjust_so_combo (cbuilder); if (cbuilder -> lattice_grid) adjust_lattice_parameters (cbuilder); } else { // Error reading file show_error (_("Cannot read space group *.sgl file ?!\nPlease check the program library !"), 0, cbuilder -> win); } } } /*! \fn void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) \brief adjust the space group combo box to use pango markup \param cbuilder the target builder edition \param cs the crystal system \param bl the bravais lattice */ void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) { GtkTreeModel * model = sg_combo_tree (cs, bl); gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> sg_combo), model); g_object_unref (model); combo_set_active (cbuilder -> sg_combo, 0); combo_set_markup (cbuilder -> sg_combo); adjust_lattice_parameters (cbuilder); } /*! \fn G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) \brief change bravais lattice \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i, j; i = combo_get_active (cbuilder -> cs_combo); j = combo_get_active ((GtkWidget *)box); adjust_sg_combo (cbuilder, i, j); } /*! \fn GtkWidget * create_bl_combo (int cs, gpointer data) \brief create the bravais lattice combo box \param cs the associated crystal system \param data the associated data pointer */ GtkWidget * create_bl_combo (int cs, gpointer data) { gchar * bravais_keys[7][4] = {{i18n("Primitive "), NULL, NULL, NULL}, {i18n("Primitive "), i18n("Base-centered"), NULL, NULL}, {i18n("Primitive "), i18n("Base-centered"), i18n("Body-centered"), i18n("Face-centered")}, {i18n("Primitive "), i18n("Body-centered"), NULL, NULL}, {i18n("Hexagonal Axes"), i18n("Rhombohedral Axes"), NULL, NULL}, {i18n("Hexagonal"), NULL, NULL, NULL}, {i18n("Primitive"), i18n("Body-centered"), i18n("Face-centered"), NULL}}; GtkWidget * cbox = create_combo(); int i; combo_text_append (cbox, _("All")); for (i=0; i<4; i++) { if (bravais_keys[cs][i]) combo_text_append (cbox, _(bravais_keys[cs][i])); } i = (cs == 0 || cs == 5) ? 0 : 1; widget_set_sensitive (cbox, i); combo_set_active (cbox, ! i); g_signal_connect (G_OBJECT(cbox), "changed", G_CALLBACK(set_bl), data); gtk_widget_set_size_request (cbox, 150, 25); return cbox; } /*! \fn G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) \brief change the crystal system \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i = combo_get_active ((GtkWidget *)box); cbuilder -> bl_combo = destroy_this_widget(cbuilder -> bl_combo); cbuilder -> bl_combo = create_bl_combo (i, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0); adjust_sg_combo (cbuilder, i, 0); show_the_widgets (cbuilder -> bl_combo); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) \brief wrap or not atomic coordinates after crystal building toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) \brief wrap or not atomic coordinates after crystal building toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; cbuilder -> wrap = button_get_status ((GtkWidget *)but); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) \brief show / hide clones after crystal building toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) \brief show / hide clones after crystal building toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; cbuilder -> clones = button_get_status ((GtkWidget *)but); } /*! \fn G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) \brief add cell callback spin \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) { tint * bid = (tint *)data; builder_edition * cbuilder = get_project_by_id(bid -> a) -> modelgl -> builder_win; cbuilder -> cell.cextra[bid -> b] = gtk_spin_button_get_value_as_int(res); } /*! \fn G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) \brief build crystall callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); if (test_lattice(this_proj -> modelgl -> builder_win, NULL)) { crystal_dist_chk = TRUE; crystal_crowded = FALSE; crystal_low_warning = TRUE; build_crystal (TRUE, this_proj, 0, this_proj -> modelgl -> builder_win -> wrap, this_proj -> modelgl -> builder_win -> clones, & this_proj -> modelgl -> builder_win -> cell, this_proj -> modelgl -> builder_win -> win); } } /*! \fn G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) \brief close crystal builder and free associated data pointers \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); this_proj -> modelgl -> builder_win -> win = destroy_this_widget(this_proj -> modelgl -> builder_win -> win); g_free (this_proj -> modelgl -> builder_win); this_proj -> modelgl -> builder_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) \brief crystal builder delete event callback GTK4 \param widg the target GtkWindow \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) \brief crystal builder delete event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_build (NULL, data); return TRUE; } dint occp[5]; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) \brief occupancy toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) \brief occupancy toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) #endif { dint * cid = (dint *)data; get_project_by_id(cid -> a) -> modelgl -> builder_win -> occupancy = cid -> b; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) \brief adjust overlapping toggle callback GTK4 \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) \brief adjust overlapping toggle callback GTK3 \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; cbuilder -> overlapping = button_get_status ((GtkWidget *)Button); } /*! \fn G_MODULE_EXPORT void on_rounding_changed (GtkComboBox * box, gpointer data) \brief changed rounding method for occupancy \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_rounding_changed (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; cbuilder -> rounding = combo_get_active ((GtkWidget *)box); } /*! \fn G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) \brief adjust occupancy create dialog callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) { project * this_proj = (project *)data; builder_edition * cbuilder = this_proj -> modelgl -> builder_win; GtkWidget * info = dialogmodal ("Occupancy set-up", GTK_WINDOW(cbuilder -> win)); GtkWidget * vbox, * hbox; vbox = dialog_get_content_area (info); gchar * boccup[5] = {i18n("Random for the initial cell only"), i18n("Random cell by cell"), i18n("Completely random"), i18n("Successively"), i18n("Alternatively")}; gchar * occup[5] = {i18n("Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated."), i18n("Sites are filled randomly for each cell, cell by cell separately."), i18n("Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole."), i18n("Sites are filled successively: all object(s) A, then all object(s) B ... "), i18n("Sites are filled alternatively: object A, object B, object A ...")}; GtkWidget * occ_but[5]; int i; for (i=0; i<5; i++) { hbox = create_hbox(0); occp[i].a = this_proj -> id; occp[i].b = i; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); #ifdef GTK4 occ_but[i] = check_button (_(boccup[i]), -1, 25, FALSE, G_CALLBACK(toggle_occ), & occp[i]); if (i) { gtk_check_button_set_group ((GtkCheckButton *)occ_but[i], (GtkCheckButton *)occ_but[0]); } #else if (! i) { occ_but[i] = radio_button (_(boccup[i]), -1, 25, FALSE, G_CALLBACK(toggle_occ), & occp[i]); } else { occ_but[i] = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON(occ_but[0])); add_container_child (CONTAINER_BUT, occ_but[i], markup_label(_(boccup[i]), -1, 25, 0.0, 0.5)); } #endif if (i) g_signal_connect (G_OBJECT(occ_but[i]), "toggled", G_CALLBACK(toggle_occ), & occp[i]); #ifdef GTK4 gtk_button_set_has_frame (GTK_BUTTON(occ_but[i]), FALSE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, occ_but[i], FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(occup[i]), 200, -1, 0.5, 0.5), FALSE, FALSE, 50); } i = cbuilder -> occupancy; button_set_status (occ_but[i], TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Allow overlapping"), -1, 25, cbuilder -> overlapping, G_CALLBACK(toggle_overlap), (gpointer)cbuilder), FALSE, FALSE, 0); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gchar * overlap = _("Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (overlap, 200, -1, 0.5, 0.5), FALSE, FALSE, 50); // Rounding occupancy here hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Occupancy rounding:"), 200, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * rounding = create_combo (); gtk_widget_set_size_request (rounding, -1, 30); for (i=0; i<3; i++) combo_text_append (rounding, _(cif_occupancies[i])); combo_set_active (rounding, cbuilder -> rounding); g_signal_connect(G_OBJECT(rounding), "changed", G_CALLBACK(on_rounding_changed), & cbuilder); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rounding, FALSE, FALSE, 10); gchar * str = g_strdup_printf (_("\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n"), _(cif_occ[0]), _(cif_occ[1]), _(cif_occ[2]), _(cif_sites[0])); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (str, 450, -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); show_the_widgets (info); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn GtkWidget * builder_win (project * this_proj, gpointer data) \brief create crystal builder window \param this_proj the target project \param data the associated data pointer */ GtkWidget * builder_win (project * this_proj, gpointer data) { int i, j; gchar * crystal_systems[7] = {i18n("Triclinic"), i18n("Monoclinic"), i18n("Othorhombic"), i18n("Tetragonal"), i18n("Trigonal"), i18n("Hexagonal"), i18n("Cubic")}; gchar * str = (! this_proj -> natomes) ? g_strdup_printf (_("Crystal builder - %s"), this_proj -> name) : g_strdup_printf (_("Crystal builder")); builder_edition * cbuilder = this_proj -> modelgl -> builder_win; GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, win, vbox); cbuilder -> bh_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> bh_box, FALSE, FALSE, 0); for (i=0; i<2; i++) { cbuilder -> bv_box[i] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bh_box, cbuilder -> bv_box[i], FALSE, FALSE, 0); } // Crystal system GtkWidget * hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Crystal system:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> cs_combo = create_combo(); for (i=0; i<7;i++) combo_text_append (cbuilder -> cs_combo, _(crystal_systems[i])); combo_set_active (cbuilder -> cs_combo, 0); gtk_widget_set_size_request (cbuilder -> cs_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> cs_combo, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(cbuilder -> cs_combo), "changed", G_CALLBACK(set_cs), (gpointer)cbuilder); // Bravais lattice cbuilder -> bl_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> bl_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, markup_label(_("Bravais lattice:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> bl_combo = create_bl_combo (0, (gpointer)cbuilder); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0); cbuilder -> ltc_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, markup_label(_("Lattice constraints: "), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); i = get_crystal_id (1); str = g_strdup_printf ("%s", (i == 1 || i == 5) ? _(latt_info[i]) : latt_info[i]); cbuilder -> ltc_cons = markup_label(str, 150, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> ltc_box, FALSE, FALSE, 5); // cbuilder -> bv_img = gtk_image_new_from_file (bravais_img[get_bravais_img_id(1)]); // add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5); // Space group cbuilder -> sg_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> sg_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, markup_label(_("Space group:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkTreeModel * model = sg_combo_tree (0, 0); cbuilder -> sg_combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, "text", 0, NULL); g_signal_connect (G_OBJECT(cbuilder -> sg_combo), "changed", G_CALLBACK(set_sg), data); gtk_widget_set_size_request (cbuilder -> sg_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_combo, FALSE, FALSE, 0); combo_set_active (cbuilder -> sg_combo, 0); combo_set_markup (cbuilder -> sg_combo); // Space group option cbuilder -> so_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> so_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, markup_label(_("Settings:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); model = so_combo_tree (cbuilder -> cell.sp_group); cbuilder -> so_combo = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, "text", 0, NULL); gtk_widget_set_size_request (cbuilder -> so_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_combo, FALSE, FALSE, 0); combo_set_active (cbuilder -> so_combo, 0); widget_set_sensitive (cbuilder -> so_combo, 0); g_signal_connect (G_OBJECT(cbuilder -> so_combo), "changed", G_CALLBACK(set_so), data); combo_set_markup (cbuilder -> so_combo); for (i=0; i<3; i++) { cbuilder -> cell.cextra[i] = 1; for (j=0; j<3; j++) { cbuilder -> pointers[i][j].a = this_proj -> id; cbuilder -> pointers[i][j].b = i; cbuilder -> pointers[i][j].c = j; } } if (cbuilder -> cell.sp_group) get_origin (cbuilder -> cell.sp_group); // Lattice parameters hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Lattice parameters:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> lattice_box = create_vbox (BSEP); GtkTreeModel * lmodel = la_combo_tree (); cbuilder -> la_combo = gtk_combo_box_new_with_model (lmodel); g_object_unref (lmodel); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, "text", 0, NULL); gtk_widget_set_size_request (cbuilder -> la_combo, 150, 25); g_signal_connect (G_OBJECT(cbuilder -> la_combo), "changed", G_CALLBACK(set_lattice), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> la_combo, FALSE, FALSE, 0); combo_set_active (cbuilder -> la_combo, 0); combo_set_markup (cbuilder -> la_combo); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> lattice_box, FALSE, FALSE, 50); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Cell(s):"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * ax_cell[3]; for (i=0; i<3; i++) { ax_cell[i] = spin_button (G_CALLBACK(add_cryst_cell), cbuilder -> cell.cextra[i], 1, 1000, 1, 0, 100, & cbuilder -> pointers[i][0]); str = g_strdup_printf ("%s x ", box_prop[0][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ax_cell[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_(" Wrap all atoms in the unit cell after building"), -1, -1, FALSE, G_CALLBACK(set_wr), (gpointer)cbuilder), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_(" Show/Hide clones after building"), -1, -1, FALSE, G_CALLBACK(set_shc), (gpointer)cbuilder), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); this_proj -> modelgl -> search_widg[7] = allocate_atom_search (this_proj -> id, INSERT, 7, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Add object(s):"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> add_combo = create_action_combo (5, this_proj); gtk_widget_set_size_request (cbuilder -> add_combo, 110, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> add_combo, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Occupancy"), IMG_STOCK, DPROPERTIES, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(adjust_occupancy), this_proj), FALSE, FALSE, 5); GtkWidget * cbscroll = create_scroll (vbox, 400, 200, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, cbscroll, create_atoms_tree (this_proj -> modelgl -> search_widg[7], this_proj, 0)); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 5); cbuilder -> pbut = create_button ((this_proj -> natomes) ? _("Build (new project)") : _("Build"), IMG_STOCK, APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(apply_build), GINT_TO_POINTER(this_proj -> id)); add_box_child_end (hbox, cbuilder -> pbut, FALSE, FALSE, 5); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_build), GINT_TO_POINTER(this_proj -> id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); add_gtk_close_event (win, G_CALLBACK(delete_build), GINT_TO_POINTER(this_proj -> id)); return win; } /*! \fn void prepare_crystal_builder (gpointer data) \brief create the crystal builder \param data the associated data pointer */ void prepare_crystal_builder (gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); if (this_proj -> modelgl -> builder_win == NULL) { // close_edit (NULL, GINT_TO_POINTER(this_proj -> id)); prepare_atom_edition (data, FALSE); this_proj -> modelgl -> builder_win = g_malloc0(sizeof*this_proj -> modelgl -> builder_win); this_proj -> modelgl -> builder_win -> cell.box = g_malloc0(sizeof*this_proj -> modelgl -> builder_win -> cell.box); this_proj -> modelgl -> builder_win -> win = builder_win (this_proj, data); this_proj -> modelgl -> builder_win -> rounding = 2; } show_the_widgets (this_proj -> modelgl -> builder_win -> win); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the crystal build window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) \brief create the crystal build window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) #endif { prepare_crystal_builder (data); } atomes_1.3.1/src/opengl/edit/atom_search.c0000664000175000017500000003176315212624223020150 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_search.c * @short Functions to prepare the model edition 'search' tabs and the associated widgets * @author Sébastien Le Roux */ /* * This file: 'atom_search.c' * * Contains: * - The functions to prepare the model edition 'search' tabs and the associated widgets * * List of functions: G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data); GtkWidget * create_search_box (int aid, project * this_proj); GtkWidget * create_action_combo (int id, project * this_proj); GtkWidget * action_tab (int aid, project * this_proj); */ #include "atom_edit.h" #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) \brief rebuild toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) \brief rebuild toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *) data; int i = button_get_status ((GtkWidget *)but); get_project_by_id(dat -> a) -> modelgl -> rebuild[0][dat -> c] = i; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)get_project_by_id(dat -> a) -> modelgl -> rbuild[i], i); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) \brief update bonding toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) \brief update bonding toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) #endif { atom_search * asearch = (atom_search *) data; asearch -> recompute_bonding = button_get_status ((GtkWidget *)but); } /*! \fn GtkWidget * create_search_box (int aid, project * this_proj) \brief create the action search widget \param aid the action id \param this_proj the target project */ GtkWidget * create_search_box (int aid, project * this_proj) { gchar * appl[5] = {i18n(" Move atom(s)"), i18n(" Replace atom(s)"), i18n(" Remove atom(s)"), i18n(" Insert atom(s)"), i18n(" Move atom(s)")}; gchar * img[4]= {EDITA, LIST_REM, LIST_ADD, MEDIA_PLAY}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; int i; if (aid == 4) { i = (this_proj -> modelgl -> search_widg[aid+1] != NULL) ? this_proj -> modelgl -> search_widg[aid+1] -> in_selection : 0; } else if (aid == 8) { i = this_proj -> nspec; } else { i = this_proj -> modelgl -> search_widg[aid+1] -> todo_size; } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, selection_tab (this_proj -> modelgl -> search_widg[aid+1], i), FALSE, FALSE, 0); if (aid == 1 || aid == 5) { int j = (aid == 1) ? 0 : 1; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); this_proj -> modelgl -> atom_win -> edition_but[j] = check_button(_("Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)"), -1, 25, this_proj -> modelgl -> rebuild[0][j], G_CALLBACK(turn_rebuild_on), & this_proj -> modelgl -> colorp[0][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> edition_but[j], FALSE, FALSE, 50); } if (aid == 1 || aid == 3 || aid == 5) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); widg = check_button(_("Recompute bonding information using bond cutoffs"), -1, 25, this_proj -> modelgl -> search_widg[aid+1] -> recompute_bonding, G_CALLBACK(turn_bonding_on), this_proj -> modelgl -> search_widg[aid+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 50); } if (aid > 1 && aid < 6) { GtkWidget * lay = create_layout (-1, 100); GtkWidget * but; if (aid == 5) { layout_add_widget (lay, markup_label(_("Repeat n times, n= "), 100, -1, 0.0, 0.5), 125, 25); layout_add_widget (lay, spin_button (G_CALLBACK(repeat_move), 1, 1, 1000, 1, 0, 100, this_proj), 275, 20); } but = create_button (_(appl[aid-1]), IMG_STOCK, img[aid-2], 100, 35, GTK_RELIEF_NORMAL, G_CALLBACK(take_action), & this_proj -> modelgl -> search_widg[aid+1] -> pointer[0]); layout_add_widget (lay, but, 500, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lay, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) \brief change selection status \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j, k; i = combo_get_active ((GtkWidget *)box); this_proj -> modelgl -> search_widg[id -> c] -> status = i; if (id -> c == 2) { for (j=0; j<2; j++) { combo_set_active (this_proj -> modelgl -> atom_win -> axis_combo[j], this_proj -> modelgl -> atom_win -> axis[j]); for (k=0; k<6; k++) { gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); update_range_and_entry (this_proj, i, this_proj -> modelgl -> atom_win -> axis[j], k); } } } clean_picked_and_labelled (this_proj -> modelgl -> search_widg[id -> c], TRUE); update_search_tree (this_proj -> modelgl -> search_widg[id -> c]); } /*! \fn GtkWidget * create_action_combo (int id, project * this_proj) \brief create action combo box \param id the action id \param this_proj the target project */ GtkWidget * create_action_combo (int id, project * this_proj) { GtkWidget * combo; if (id == 3 || id == 5) { GtkTreeModel * model = replace_combo_tree (TRUE, this_proj -> id); combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(set_atoms_to_insert), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); combo_set_active (combo, 0); combo_set_markup (combo); set_atoms_to_insert (GTK_COMBO_BOX(combo), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); } else { combo = create_combo (); int i; for (i=0; i<3; i++) combo_text_append (combo, _(action_atoms[i])); combo_set_active (combo, this_proj -> modelgl -> search_widg[id+2] -> status); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_atoms_for_action), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); } return combo; } /*! \fn G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) \brief expanding motion callback \param exp the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int i; for (i=0; i<3; i++) { if (i != dat -> c - 1) { if (gtk_expander_get_expanded (GTK_EXPANDER (this_proj -> modelgl -> atom_win -> at_expand[i]))) { gtk_expander_set_expanded (GTK_EXPANDER (this_proj -> modelgl -> atom_win -> at_expand[i]), FALSE); } } } } /*! \fn GtkWidget * action_tab (int aid, project * this_proj) \brief create model edtion action tab \param aid the action id \param this_proj the target project */ GtkWidget * action_tab (int aid, project * this_proj) { gchar * action[7] = {i18n("moved"), i18n("replaced"), i18n("removed"), i18n("inserted"), i18n("moved randomly"), " ", i18n("passivated")}; GtkWidget * vbox = create_vbox (BSEP); atom_search * asearch = this_proj -> modelgl -> search_widg[aid+2]; GtkWidget * hbox; if (aid < 5) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); gchar * str = g_strdup_printf (_("Select the object(s) to be %s in: "), _(action[aid])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); this_proj -> modelgl -> atom_win -> atom_combo[aid] = create_action_combo (aid, this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> atom_combo[aid], FALSE, FALSE, 20); } GtkWidget * sbox = create_vbox (BSEP); GtkWidget * tbox = create_search_box (aid+1, this_proj); if (! aid) { gchar * exp_name[3] = {i18n("Atom selection:"), i18n("Translate:"), i18n("Rotate:")}; int i; for (i=0; i<3; i++) { this_proj -> modelgl -> atom_win -> at_expand[i] = create_expander (_(exp_name[i]), NULL); add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, this_proj -> modelgl -> atom_win -> at_expand[i], TRUE, TRUE, 10); if (! i) { add_container_child (CONTAINER_EXP, this_proj -> modelgl -> atom_win -> at_expand[i], tbox); gtk_expander_set_expanded (GTK_EXPANDER(this_proj -> modelgl -> atom_win -> at_expand[i]), TRUE); } else { add_container_child (CONTAINER_EXP, this_proj -> modelgl -> atom_win -> at_expand[i], add_motion_interaction (asearch, i-1, this_proj)); gtk_expander_set_expanded (GTK_EXPANDER(this_proj -> modelgl -> atom_win -> at_expand[i]), FALSE); if (i == 2) widget_set_sensitive (this_proj -> modelgl -> atom_win -> at_expand[2], asearch -> object); } g_signal_connect (G_OBJECT(this_proj -> modelgl -> atom_win -> at_expand[i]), "activate", G_CALLBACK(expanding_atoms), & asearch -> pointer[0]); } } else { if (aid < 3) { asearch -> mode_box = create_combo (); combo_text_append (asearch -> mode_box, _("Normally")); combo_text_append (asearch -> mode_box, _("Randomly")); combo_set_active (asearch -> mode_box, 0); g_signal_connect (G_OBJECT (asearch -> mode_box), "changed", G_CALLBACK(set_search_mode), asearch); GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, box, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); gchar * type_of[2]={i18n("Replace: "), i18n("Remove: ")}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(_(type_of[aid-1]), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> mode_box, FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, tbox, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, sbox, FALSE, FALSE, 5); if (! aid || aid == 4) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Reset transformation(s)"), -1, 35, FALSE, G_CALLBACK(set_reset_transformation), & asearch -> pointer[0]), FALSE, FALSE, 10); } show_the_widgets (vbox); if (aid != 3) widget_set_sensitive (vbox, this_proj -> nspec); return vbox; } atomes_1.3.1/src/opengl/edit/atom_remove.c0000664000175000017500000005012215212624223020166 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_remove.c * @short Functions to remove bond(s) from a project \n Function to prepare the passivation (removal followed by insertion) * @author Sébastien Le Roux */ /* * This file: 'atom_remove.c' * * Contains: * - The functions to remove bond(s) from a project - The function to prepare the passivation (removal followed by insertion) * * List of functions: int test_this_fragment (int natomes, int fcoord, int fid, atom * atom_list, int * old_id, gboolean remove); gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate); void set_mol_data (int the_atom, int the_mol); void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch); void to_passivate_using_the_objects (project * this_proj, atom_search * asearch); */ #include "atom_edit.h" int tmbs; int molcounter; int atoms_in_frag; int * tigl; int * migl; int * togl; int * ats_in_frag; int * ats_id; int * contacts; int ** neighbors; extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); /*! \fn void set_mol_data_list (int the_atom, atom ** mol_list, int the_mol) \brief set molecule id for atom \param the_atom the atom id \param mol_list the list of atom(s) to look up \param the_mol the molecule id */ void set_mol_data_list (int aid, atom ** mol_list, int the_mol) { int ab, ac, ad; molcounter ++; int the_atom = tigl[aid]; togl[the_atom] = the_mol; tmbs ++; if (molcounter == 10000) goto end; if (tmbs == atoms_in_frag) goto end; int mid = migl[aid]; for (ab=0; ab < mol_list[mid] -> numv; ab++) { ac = mol_list[mid] -> vois[ab]; ad = tigl[ac]; if (! togl[ad] && molcounter < 100000) set_mol_data_list (ac, mol_list, the_mol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto end; } molcounter --; end:; } /*! \fn int test_this_fragment (int natomes, int fcoord, int fid, atom * atom_list, int * old_id, gboolean remove) \brief verify that all atom(s) in the fragment are connected somehow, otherwise create new fragment \param natomes number of atom(s) \param fcoord the number of fragment(s) \param fid the fragment id \param atom_list the atom(s) list \param old_id the atom(s) old id list \param remove remove (1) or motion (0) action */ int test_this_fragment (int natomes, int fcoord, int fid, atom ** atom_list, int * old_id, gboolean remove) { int i, j, k, l, m, n; gboolean modif; tigl = allocint (natomes); migl = allocint (natomes); i = 0; for (j=0; j id] > 0) modif = TRUE; } } if (modif) { if (atom_list[j] -> coord[2] == fid) { tigl[atom_list[j] -> id] = i; migl[atom_list[j] -> id] = j; i ++; } } } if (i) { togl = allocint (i); atoms_in_frag = i; // Check each atoms (recursive testing) int totmol = 0; tmbs = molcounter = 0; start:; i = 0; for (j=0; j coord[2] == fid) { k = tigl[atom_list[j] -> id]; if (! molcounter && ! togl[k]) { totmol ++; set_mol_data_list (atom_list[j] -> id, atom_list, totmol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto start; molcounter = 0; } else if (molcounter > 0 && togl[k] == totmol) { for (l=0; l numv; l++) { m = atom_list[j] -> vois[l]; n = tigl[m]; if (! togl[n]) { molcounter = 0; i = 1; set_mol_data_list (m, atom_list, totmol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto start; molcounter = 1; } } } } } } if (tmbs < atoms_in_frag) { molcounter = 0; goto start; } if (molcounter) goto start; end:; i = 0; for (j=0; j id; l = tigl[k]; if (togl[l] > 1) { atom_list[j] -> coord[2] = fcoord + togl[l] - 2; // g_debug ("togl[l] = %d, j= %d, atom_list[j] -> coord[2]= %d", togl[l], j, atom_list[j] -> coord[2]); } i = max (i, togl[l]); } } g_free (togl); } g_free (tigl); g_free (migl); return i-1; } /*! \fn gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate) \brief remove bond(s) from project \param this_proj the target project \param this_object the target insert object, if any \param old_id the atom(s) id list \param new_list the new atom list \param remove remove (1) or motion (0) action \param passivate passivate (1) or not (0) */ gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate) { int h, i, j, k, l, m; int tmpbond[2]; int ** tmpbondid[2]; atom * tmp_list; gboolean * frag_to_test; gboolean * frag_to_remove; gboolean * show_frag = NULL; int * per_frag; int * in_frag; int * tmp_vois = NULL; int * id_mod = NULL; /* tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if ((remove && old_id[i] > 0) || ! remove) { g_debug ("Keeping atom: %d", i+1); g_debug (" atom: %d has: %d neighbor(s):", i+1, tmp_list -> numv); for (j=0; j numv; j++) { g_debug (" n: %d, atom= %d", j+1, tmp_list -> vois[j]+1); } } tmp_list = tmp_list -> next; }*/ int tcf = (this_proj) ? this_proj -> coord -> totcoord[2] : this_object -> coord -> totcoord[2]; if (this_proj) { if (tcf) { show_frag = duplicate_bool (tcf, this_proj -> modelgl -> anim -> last -> img -> show_coord[2]); } else { show_frag = allocbool (1); show_frag[0] = TRUE; tcf = 1; } } int nat = (this_proj) ? this_proj -> natomes : this_object -> atoms; per_frag = allocint (tcf); in_frag = allocint (tcf); id_mod = allocint (nat); tmp_vois = allocint (20); h = -1; tmp_list = new_list; for (i=0; i atoms[0][i].coord[2] : tmp_list -> coord[2]; per_frag[j] ++; if (old_id[i] < 0) { in_frag[j] ++; if (! remove && ! passivate) { h ++; id_mod[tmp_list -> id] = h; } } else { h ++; id_mod[tmp_list -> id] = h; } if (old_id[i] > 0 || ! remove) { if (tmp_list -> numv > 0) { k = 0; // Save the neighbors list for this atom for (l=0; l numv; l++) { m = tmp_list -> vois[l]; if ((remove && old_id[m] > 0) || (! remove && old_id[i] > 0 && old_id[m] > 0) || (! remove && old_id[i] < 0 && old_id[m] < 0)) { tmp_vois[k] = m; k ++; } } g_free (tmp_list -> vois); tmp_list -> vois = NULL; tmp_list -> numv = k; if (k) { // Correct the neighbor list for this atom tmp_list -> vois = allocint (k); for (l=0; l vois[l] = tmp_vois[l]; } } } if ( old_id[i] > 0 || ! remove || passivate) tmp_list = tmp_list -> next; } g_free (tmp_vois); // Taking care of the isolated atom(s) tmp_list = new_list; while (tmp_list) { i = tmp_list -> coord[2]; if (! tmp_list -> numv && per_frag[i] > 1 && old_id[tmp_list -> id] > 0) { // If the atom has no neighbors, and if it is not the last one in the fragment show_frag = g_realloc (show_frag, (tcf+1)*sizeof*show_frag); per_frag = g_realloc (per_frag, (tcf+1)*sizeof*per_frag); in_frag = g_realloc (in_frag, (tcf+1)*sizeof*in_frag); show_frag[tcf] = show_frag[i]; per_frag[tcf] = 1; per_frag[i] --; tmp_list -> coord[2] = tcf; tcf ++; } tmp_list = tmp_list -> next; } frag_to_test = allocbool (tcf); frag_to_remove = allocbool (tcf); for (i=0; i 1 && in_frag[i]) { frag_to_test[i] = TRUE; } // g_debug ("i= %d, frag_to_test[%d]= %d, frag_to_remove[%d]= %d, in_frag[%d]= %d, per_frag[%d]= %d", i, i, frag_to_test[i], i, frag_to_remove[i], i, in_frag[i], i, per_frag[i]); } g_free (in_frag); g_free (per_frag); atom ** atom_list = g_malloc0(nat*sizeof*atom_list); tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { atom_list[i] = duplicate_atom (tmp_list); } tmp_list = tmp_list -> next; } if (remove && this_proj) { i = 0; // Removing fragment(s) if needed int * new_fid = allocint (tcf); for (j=0; j coord[2] = new_fid[atom_list[j] -> coord[2]]; } g_free (new_fid); tcf -= i; if (i) { show_frag = g_realloc (show_frag, tcf*sizeof*show_frag); } } i = tcf; for (j=0; j 0) { show_frag = g_realloc (show_frag, (tcf+k)*sizeof*show_frag); for (l=tcf; l coord -> totcoord[2] = tcf; } else { this_object -> coord -> totcoord[2] = tcf; } tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { tmp_list -> coord[2] = atom_list[i] -> coord[2]; g_free (atom_list[i]); // g_debug ("End:: id= %d, coord[2]= %d", tmp_list -> id, tmp_list -> coord[2]); } tmp_list = tmp_list -> next; } g_free (atom_list); if (this_proj) { for (i=0; i<2; i++) { tmpbondid[i] = NULL; tmpbond[i] = 0; } for (i=0; i<2; i++) { if (this_proj -> modelgl -> bonds[0][i]) { tmpbondid[i] = allocdint (this_proj -> modelgl -> bonds[0][i], 2); j = 0; for (k=0; k modelgl -> bonds[0][i]; k++) { l = this_proj -> modelgl -> bondid[0][i][k][0]; m = this_proj -> modelgl -> bondid[0][i][k][1]; if (old_id[l] > 0 && old_id[m] > 0) { tmpbondid[i][j][0] = l; tmpbondid[i][j][1] = m; j ++; } else if (! remove && (old_id[l] < 0 && old_id[m] < 0)) { tmpbondid[i][j][0] = l; tmpbondid[i][j][1] = m; j ++; } } tmpbond[i] = j; // g_debug ("i= %d, tmpbond[%d]= %d", i, i, tmpbond[i]); } } distance clo; for (i=0; i<2; i++) { if (this_proj -> modelgl -> bonds[0][i]) { g_free (this_proj -> modelgl -> bondid[0][i]); this_proj -> modelgl -> bondid[0][i] = NULL; if (i) { g_free (this_proj -> modelgl -> clones[0]); this_proj -> modelgl -> clones[0] = NULL; } if (tmpbond[i]) { if (i) this_proj -> modelgl -> clones[0] = g_malloc0(tmpbond[i]*sizeof*this_proj -> modelgl -> clones[0]); this_proj -> modelgl -> bondid[0][i] = allocdint (tmpbond[i], 2); for (k=0; k modelgl -> bondid[0][i][k][0] = id_mod[tmpbondid[i][k][0]]; this_proj -> modelgl -> bondid[0][i][k][1] = id_mod[tmpbondid[i][k][1]]; //g_debug ("bc:: i= %d, j= %d, a= %d, b= %d", i, k, tmpbondid[i][k][0], tmpbondid[i][k][1]); if (i) { l = this_proj -> modelgl -> bondid[0][i][k][0]; m = this_proj -> modelgl -> bondid[0][i][k][1]; clo = distance_3d (& this_proj -> cell, 0, & this_proj -> atoms[0][l], & this_proj -> atoms[0][m]); this_proj -> modelgl -> clones[0][k].x = clo.x; this_proj -> modelgl -> clones[0][k].y = clo.y; this_proj -> modelgl -> clones[0][k].z = clo.z; } } } this_proj -> modelgl -> bonds[0][i] = tmpbond[i]; this_proj -> modelgl -> allbonds[i] = tmpbond[i]; } if (tmpbondid[i]) { g_free (tmpbondid[i]); tmpbondid[i] = NULL; } } } if (this_proj) { tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { if (tmp_list -> numv > 0) { for (j=0; j numv; j++) { k = tmp_list -> vois[j]; tmp_list -> vois[j] = id_mod[k]; } } } tmp_list = tmp_list -> next; } } if (id_mod) { g_free (id_mod); id_mod = NULL; } /*tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if ((remove && old_id[i] > 0) || ! remove) { g_debug ("Correct atom: %d", i+1); g_debug (" atom: %d has: %d neighbor(s):", i+1, tmp_list -> numv); for (j=0; j numv; j++) { g_debug (" n: %d, atom= %d", j+1, tmp_list -> vois[j]+1); } } tmp_list = tmp_list -> next; }*/ return show_frag; } /*! \fn void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch) \brief prepaer to remove a list of object(s) from a project, one object after another. \param this_proj the target project \param asearch the target atom search */ void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch) { int i, j; atomic_object * tmp_object; atomic_object * tmp_replace; if (asearch -> action == REPLACE) { if (asearch -> pointer[0].c == 3) { tmp_replace = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_replace = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } } int filter = get_asearch_filter (asearch); int object = get_asearch_object (asearch); remove_search = allocate_atom_search (this_proj -> id, REMOVE, REMOVE, this_proj -> natomes); for (i=0; i todo_size; i++) { if (asearch -> todo[i]) { tmp_object = NULL; if (filter > 0 && filter < 3 && ((object && ! asearch -> passivating) || (object == 2 && asearch -> passivating))) { tmp_object = create_object_from_atom_coordination (this_proj, filter-1, i, remove_search); } else if (filter > 2 && ((object && ! asearch -> passivating) || (object == 2 && asearch -> passivating))) { j = (asearch -> mode && filter == 4) ? filter - 1 : filter; tmp_object = create_object_from_frag_mol (this_proj, j-1, i, remove_search); } else { remove_search -> todo[i] = 1; if (asearch -> action == REPLACE) { tmp_object = g_malloc0(sizeof*tmp_object); tmp_object -> baryc = allocdouble (3); tmp_object -> baryc[0] = this_proj -> atoms[0][i].x; tmp_object -> baryc[1] = this_proj -> atoms[0][i].y; tmp_object -> baryc[2] = this_proj -> atoms[0][i].z; } } if (asearch -> action == REPLACE) { for (j=0; j<3; j++) tmp_replace -> baryc[j] += tmp_object -> baryc[j]; tmp_replace = tmp_replace -> next; } if (tmp_object) g_free (tmp_object); } } i = 0; for (j=0; j natomes; j++) { if (remove_search -> todo[j]) i++; } remove_search -> in_selection = i; } /*! \fn void to_passivate_using_the_objects (project * this_proj, atom_search * asearch) \brief prepare passivation (delete of an object, then insert of another one at the same location) \param this_proj the target project \param asearch the target atom search */ void to_passivate_using_the_objects (project * this_proj, atom_search * asearch) { int i, j, k, l, m; atomic_object * object = NULL; atomic_object * tmp_oba, * tmp_obb; int filter = get_asearch_filter (asearch); int num_elem = asearch -> todo_size; int * passivate_todo = duplicate_int (num_elem, asearch -> todo); g_free (asearch -> todo); allocate_todo (asearch, this_proj -> natomes); if (this_proj -> modelgl -> atom_win -> to_be_inserted[3]) { tmp_oba = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; object = duplicate_atomic_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb = tmp_obb -> next; } g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); this_proj -> modelgl -> atom_win -> to_be_inserted[3] = NULL; } gboolean doit; asearch -> in_selection = 0; tmp_oba = object; for (i=0; i natomes; j++) { doit = FALSE; if (this_proj -> atoms[0][j].pick[0]) { k = this_proj -> atoms[0][j].sp; switch (filter) { case 0: if (k == i) doit = TRUE; break; case 1: if (this_proj -> atoms[0][j].numv == i) doit = TRUE; break; case 2: l = this_proj -> atoms[0][j].coord[1]; for (m=0;m coord -> ntg[1][m]; if (l == i) doit = TRUE; break; default: if (this_proj -> atoms[0][j].coord[filter-1] == i) doit = TRUE; break; } if (doit) { asearch -> todo[j] = 1; if (this_proj -> modelgl -> atom_win -> to_be_inserted[3] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[3] = duplicate_atomic_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } else { tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb -> next -> prev = tmp_obb; tmp_obb = tmp_obb -> next; } tmp_obb -> id = j; asearch -> in_selection ++; } } } if (tmp_oba -> next != NULL) tmp_oba = tmp_oba -> next; } } if (passivate_todo) g_free (passivate_todo); apply_action (this_proj, asearch); } atomes_1.3.1/src/opengl/edit/cell_extra.c0000664000175000017500000001003115212624223017766 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_extra.c * @short Functions to create the 'add cell(s)' tab in the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_extra.c' * * Contains: * - The functions to create the 'add cell(s)' tab in the cell edition window * * List of functions: G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data); GtkWidget * add_extra_cell_tab (glwin * view); */ #include "cell_edit.h" /*! \fn G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) \brief add cell callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) { tint * dat = (tint *)data; int i; project * this_proj = get_project_by_id (dat -> a); image * last = this_proj -> modelgl -> anim -> last -> img; i = max(last -> abc -> extra_cell[0], last -> abc -> extra_cell[1]); i = max(i, last -> abc -> extra_cell[2]); last -> p_depth /= (i+1); last -> abc -> extra_cell[dat -> b] = gtk_spin_button_get_value_as_int(res) - 1; i = max(last -> abc -> extra_cell[0], last -> abc -> extra_cell[1]); i = max(i, last -> abc -> extra_cell[2]); last -> p_depth *= (i+1); double fact = last -> p_depth*2.0 / last -> gfar; last -> gfar = last -> p_depth*2.0; last -> gnear *= fact; last -> zoom *= fact; init_default_shaders (this_proj -> modelgl); this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; if (this_proj -> modelgl -> n_shaders[SLABS][0]) this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); sens_superbut (this_proj); } /*! \fn GtkWidget * add_extra_cell_tab (glwin * view) \brief create the add cell(s) tab \param view the target glwin */ GtkWidget * add_extra_cell_tab (glwin * view) { GtkWidget * layout = create_layout (350, 150); GtkWidget * hbox = create_hbox (50); GtkWidget * vbox = create_vbox (BSEP); layout_add_widget (layout, hbox, 50, 50); int i; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("\tAdd extra cell(s):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * hhbox; gchar * str; for (i=0; i<3; i++) { hhbox = create_hbox (0); view -> cell_win -> ax_cell[i] = spin_button (G_CALLBACK(add_cell), view -> anim -> last -> img -> abc -> extra_cell[i]+1, 1, 1000, 1, 0, 100, & view -> colorp[i][0]); str = g_strdup_printf ("%s x ", box_prop[0][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> cell_win -> ax_cell[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hhbox, FALSE, FALSE, 5); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 50); view -> cell_win -> superbut = create_button (_("Create super-cell"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(super_cell_but), view); sens_superbut (get_project_by_id(view -> proj)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> cell_win -> superbut, FALSE, FALSE, 90); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/atom_edit.h0000664000175000017500000002272215212624223017630 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_edit.h * @short Function declarations for the mode edition window * @author Sébastien Le Roux */ /* * This header file: 'atom_edit.h' * * Contains: - Function declarations for the mode edition window */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "initcoord.h" #include "glview.h" #include "glwindow.h" #include "project.h" #include "workspace.h" #ifndef ATOM_EDIT_H_ #define ATOM_EDIT_H_ #define IDCOL 0 #define TOLAB 3 #define TOPIC 4 extern GtkWidget * selection_tab (atom_search * asearch, int nats); extern G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data); extern void save_rotation_quaternion (glwin * view); extern void center_molecule (project * this_proj); extern vec3_t get_arc_ball_vector (glwin * view, int x, int y); extern void update_search_tree (atom_search * asearch); extern int selected_aspec; extern int is_selected; extern chemical_data * alloc_chem_data (int spec); extern void setup_image_spec_data (project * this_proj, image * img); extern void free_glwin_spec_data (project * this_proj, int spec); extern void glwin_init_spec_data (project * this_proj, int nspec); extern void prepare_opengl_menu_bar (glwin * view); extern gboolean test_vol (double box[2][3], double vect[3][3]); extern GtkTreeModel * replace_combo_tree (gboolean insert, int proj); extern int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch); extern int get_atom_id_from_periodic_table (atom_search * asearch); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern insertion_menu mol[]; extern atom_search * remove_search; extern GtkWidget * coord_menu (glwin * view); extern GtkWidget * advanced_coord_properties (glwin * view, int page); extern GtkWidget * create_cell_edition_window (project * this_proj, gpointer data); extern G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); extern gchar * mot[2][2]; extern gboolean in_bond (int at, int bd[2]); extern int being_copied; extern atomic_object * lib_object; extern float limit[2]; extern gchar * action_name[5]; extern gchar * action_atoms[3]; extern void check_all_trees (project * this_proj); extern atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid); extern void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id); extern void motion_to_zero (atom_search * asearch); extern int get_asearch_num_objects (atom_search * asearch); extern int get_asearch_object (atom_search * asearch); extern int get_asearch_filter (atom_search * asearch); extern int get_todo_size (atom_search * asearch); extern void allocate_todo (atom_search * asearch, int tsize); extern void clean_todo (atom_search * asearch); extern void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd); extern void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status); extern void re_populate_tree_search (atom_search * asearch); extern G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); extern void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object); extern void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list); extern gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate); #ifdef GTK4 extern G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data); #else extern G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data); #endif extern void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch); extern void to_passivate_using_the_objects (project * this_proj, atom_search * asearch); extern tint ulam_coord (glwin * view); extern void correct_pos_and_get_dim (atomic_object * object, gboolean adjust); extern atomic_object * duplicate_atomic_object (atomic_object * old_obj); extern atomic_object * create_object_from_species (project * this_proj, int sid, atom_search * remove); extern void reconstruct_bonds (project * this_proj, int ifcl, int * bcid); extern void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); extern atomic_object * create_object_from_selection (project * this_proj); extern atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove); extern atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove); extern atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); extern void create_object_from_library (int p); extern int create_object_from_open_project (project * this_proj, int p); extern void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); extern G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); extern void clean_other_window_after_edit (project * this_proj); extern void clean_coord_window (project * this_proj); extern GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox); extern double ** save_coordinates (project * this_proj, int status); extern void reset_coordinates (project * this_proj, int status); extern vec3_t get_bary (project * this_proj, int status); extern void init_coordinates (project * this_proj, int status, gboolean win, gboolean init); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); extern void rotate (project * this_proj, int i, int j, int k, float param); extern void random_move (project * this_proj, atom_search * asearch); extern void update_coordinates (project * this_proj, int status, int axis, int action); extern G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void to_set_move (GtkEditable * widg, gpointer data); #else extern G_MODULE_EXPORT gboolean to_set_move (GtkWidget * widg, GdkEventFocus * event, gpointer data); #endif extern G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data); extern void range_has_changed (gpointer data, double v); extern void update_range_and_entry (project * this_proj, int i, int j, int k); extern G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); extern G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data); extern void check_motion_interactors (project * this_proj, atom_search * asearch); extern GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj); extern void apply_action (project * this_proj, atom_search * asearch); extern void clean_all_trees (atom_search * asearch, project * this_proj); extern gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing); extern G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data); extern GtkWidget * action_tab (int aid, project * this_proj); extern int find_this_geo_id (int id, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z); extern void check_coord_modification (project * this_proj, int old_id[], atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating); extern void print_coord_info (project * this_proj, coord_info * coord); extern coord_info * duplicate_coord_info (coord_info * old_coord); extern void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag); extern chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); extern int find_spec_id (int s, int z, double * list_z); extern int search_for_new_spec (atom_edition * edit, atomic_object * object); extern void prepare_atom_edition (gpointer data, gboolean visible); #ifdef GTK4 G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data); #else G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data); #endif G_MODULE_EXPORT void close_build (GtkWidget * widg, gpointer data); #endif atomes_1.3.1/src/opengl/edit/atom_move.c0000664000175000017500000012066715212624223017653 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_move.c * @short Functions to move atom(s) and group of atom(s) \n Functions to move randomly atom(s) and group of atom(s) \n Functions to create the motion widgets of the model edition window * @author Sébastien Le Roux */ /* * This file: 'atom_move.c' * * Contains: * - The functions to move atom(s) and group of atom(s) - The functions to move randomly atom(s) and group of atom(s) - The functions to create the motion widgets of the model edition window * * List of functions: float get_limit (int mot, glwin * view); double ** save_coordinates (project * this_proj, int status); gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter); gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj); gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang); G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void reset_coordinates (project * this_proj, int status); void init_coordinates (project * this_proj, int status, gboolean win, gboolean init); void translate (project * this_proj, int status, int axis, vec3_t trans); void rotate_quat (project * this_proj, vec4_t q, int status, int axis); void rotate (project * this_proj, int status, int axis, int raxis, float param); void random_move_this_atom (project * this_proj, int aid); void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd); void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd); void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd); void trigger_refresh (project * this_proj, atom_search * asearch); void random_move (project * this_proj, atom_search * asearch); void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans); void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans); void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang); void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang); void update_coordinates (project * this_proj, int status, int axis, int action); void update_range_and_entry (project * this_proj, int i, int j, int k); void range_has_changed (gpointer data, double v); void check_motion_interactors (project * this_proj, atom_search * asearch); G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data); G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data); GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd); GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj); */ #include "atom_edit.h" gboolean * was_moved_atom; /*! \fn double ** save_coordinates (project * this_proj, int status) \brief save atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ double ** save_coordinates (project * this_proj, int status) { int i, j; i = 0; if (status > 1) { i = this_proj -> natomes; } else { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) i++; } } if (i == 0) return NULL; double ** coords = allocddouble (i, 3); i = 0; if (status > 1) { for (i=0; i natomes; i++) { coords[i][0] = this_proj -> atoms[0][i].x; coords[i][1] = this_proj -> atoms[0][i].y; coords[i][2] = this_proj -> atoms[0][i].z; } } else { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) { coords[i][0] = this_proj -> atoms[0][j].x; coords[i][1] = this_proj -> atoms[0][j].y; coords[i][2] = this_proj -> atoms[0][j].z; i ++; } } } return coords; } /*! \fn void reset_coordinates (project * this_proj, int status) \brief reset transformation and restore saved atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ void reset_coordinates (project * this_proj, int status) { int i, j; i = 0; if (this_proj -> modelgl -> saved_coord[status] != NULL) { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status || status > 1) { this_proj -> atoms[0][j].x = this_proj -> modelgl -> saved_coord[status][i][0]; this_proj -> atoms[0][j].y = this_proj -> modelgl -> saved_coord[status][i][1]; this_proj -> atoms[0][j].z = this_proj -> modelgl -> saved_coord[status][i][2]; i ++; } } } } /*! \fn vec3_t get_bary (project * this_proj, int status) \brief get barycenter of atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ vec3_t get_bary (project * this_proj, int status) { vec3_t bar = vec3(0.0,0.0,0.0); int j; float i = 0.0; for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status || status == 2) { i += 1.0; bar = v3_add (bar, vec3(this_proj -> atoms[0][j].x, this_proj -> atoms[0][j].y, this_proj -> atoms[0][j].z)); } } if (i > 0.0) bar = v3_divs (bar, i); return bar; } /*! \fn void init_coordinates (project * this_proj, int status, gboolean win, gboolean init) \brief preserve atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param win is the model edition window opened ? \param init preserve atomic coordinates */ void init_coordinates (project * this_proj, int status, gboolean win, gboolean init) { if (win) { int i, j; for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> new_param[status][i][j] = this_proj -> modelgl -> edition_param[status][i][j]; this_proj -> modelgl -> atom_win -> old_param[status][i][j] = this_proj -> modelgl -> edition_param[status][i][j]; } } this_proj -> modelgl -> atom_win -> axis[status] = 1; this_proj -> modelgl -> atom_win -> show_axis[status] = FALSE; } this_proj -> modelgl -> baryc[status] = get_bary (this_proj, status); if (init) { this_proj -> modelgl -> saved_coord[status] = save_coordinates (this_proj, status); } } /*! \fn void translate (project * this_proj, int status, int axis, vec3_t trans) \brief translate \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye \param trans translation vector */ void translate (project * this_proj, int status, int axis, vec3_t trans) { int i, j; vec3_t c_old, c_new; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].pick[0] == status || status < 0) { c_old = vec3(this_proj -> atoms[i][j].x, this_proj -> atoms[i][j].y, this_proj -> atoms[i][j].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } this_proj -> atoms[i][j].x = c_new.x; this_proj -> atoms[i][j].y = c_new.y; this_proj -> atoms[i][j].z = c_new.z; } } } } /*! \fn void rotate_quat (project * this_proj, vec4_t q, int status, int axis) \brief rotate using quaternion \param this_proj the target project \param q rotation quaternion \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye */ void rotate_quat (project * this_proj, vec4_t q, int status, int axis) { int j; mat4_t rot = m4_quat_rotation (q); vec3_t c_old, c_new; for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) { c_old = vec3(this_proj -> atoms[0][j].x, this_proj -> atoms[0][j].y, this_proj -> atoms[0][j].z); c_new = v3_sub(c_old, this_proj -> modelgl -> baryc[status]); if (axis) { c_old = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_new); c_new = m4_mul_pos (rot, c_old); c_old = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_new); } else { c_old = m4_mul_pos (rot, c_new); } c_new = v3_add (c_old, this_proj -> modelgl -> baryc[status]); this_proj -> atoms[0][j].x = c_new.x; this_proj -> atoms[0][j].y = c_new.y; this_proj -> atoms[0][j].z = c_new.z; } } } /*! \fn void rotate (project * this_proj, int status, int axis, int raxis, float param) \brief rotate \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye \param raxis rotation axis 0 = x, 1 = y, 2 = z \param param rotation angle */ void rotate (project * this_proj, int status, int axis, int raxis, float param) { vec4_t qr; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat(ax[raxis-3], param*pi/90.0); rotate_quat (this_proj, qr, status, axis); } /*! \fn void random_move_this_atom (project * this_proj, int aid) \brief random move atom \param this_proj the target project \param aid the atom id */ void random_move_this_atom (project * this_proj, int aid) { int i, j, k, l; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*aid*(3*(this_proj -> id+27)); prob= random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = random3_(& k); switch (j) { case 0: this_proj -> atoms[0][aid].x += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; case 1: this_proj -> atoms[0][aid].y += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; case 2: this_proj -> atoms[0][aid].z += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; } } } /*! \fn void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) \brief random rotate an object \param this_proj the target project \param object the object to rotate \param ratio ratio translation / rotation \param msd the MSD */ void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) { int i, j, k, l, m, n; vec3_t c_new, c_old; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); vec3_t baryc = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); vec4_t qr; mat4_t rot; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*(3*(this_proj -> id+27)); prob=random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = random3_(& k); qr = axis_to_quat(ax[j], l*prob*sqrt(ratio*msd/3.0)*pi/90.0); rot = m4_quat_rotation (qr); for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) { c_old = vec3(object -> at_list[m].x, object -> at_list[m].y, object -> at_list[m].z); c_new = m4_mul_pos (rot, c_old); object -> at_list[m].x = c_new.x; object -> at_list[m].y = c_new.y; object -> at_list[m].z = c_new.z; c_old = v3_add (c_new, baryc); this_proj -> atoms[0][n].x = c_old.x; this_proj -> atoms[0][n].y = c_old.y; this_proj -> atoms[0][n].z = c_old.z; } } } } /*! \fn void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) \brief random translate an object \param this_proj the target project \param object the object to translate \param ratio ratio translation / rotation \param msd the MSD */ void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) { int i, j, k, l, m, n; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*(3*(this_proj -> id+27)); prob=random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = l*random3_(& k)*sqrt(ratio*msd/3.0); switch (j) { case 0: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].x += prob; } break; case 1: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].y += prob; } break; case 2: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].z += prob; } break; } object -> baryc[j] += prob; } } /*! \fn void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd) \brief random move object \param this_proj the target project \param object the object to move \param move the number of times to repeat the motion \param msd the MSD */ void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd) { int i, j; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; switch (move) { case 1: random_translate_this_object (this_proj, object, 1.0, msd); break; case 2: random_rotate_this_object (this_proj, object, 1.0, msd); break; case 3: j = object -> species*i*object -> atoms*(3*(this_proj -> id+27)); prob = random3_(& j); random_translate_this_object (this_proj, object, prob, msd); random_rotate_this_object (this_proj, object, 1.0-prob, msd); break; } } /*! \fn void trigger_refresh (project * this_proj, atom_search * asearch) \brief refresh search tree model \param this_proj the target project \param asearch the target atom search */ void trigger_refresh (project * this_proj, atom_search * asearch) { clean_all_trees (asearch, this_proj); this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == DISPL) ? 0 : 1] = TRUE; update_search_tree (this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2]); check_all_trees (this_proj); } /*! \fn gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter) \brief rebuild selection (split fragments linked thru PBC) \param this_proj the target project \param asearch the target atom search \param filter the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) */ gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter) { int i, j, k, l; gboolean was_frag = this_proj -> modelgl -> adv_bonding[0]; gboolean was_mol = this_proj -> modelgl -> adv_bonding[1]; gboolean recons = FALSE; int old_frag = this_proj -> coord -> totcoord[2]; i = (asearch -> action == DISPL) ? 0 : 1; if (asearch -> object && this_proj -> modelgl -> rebuild[0][i]) { int * saved_todo = duplicate_int (asearch -> todo_size, asearch -> todo); int old_tds = asearch -> todo_size; g_free (asearch -> todo); allocate_todo (asearch, this_proj -> natomes); j = 0; int * oifcl = NULL; atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; while (object) { j += object -> ifcl; object = object -> next; } if (j) { object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; oifcl = allocint (j); l = 0; while (object) { for (k=0; k ifcl; k++) { oifcl[l] = object -> bcid[k]; l ++; } object = object -> next; } } if (j) { reconstruct_bonds (this_proj, j, oifcl); g_free (oifcl); oifcl = NULL; } object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; while (object) { if (object -> ifcl) reconstruct_coordinates_for_object (this_proj, object, TRUE); if (filter < 3) { recons = TRUE; for (j=0; j atoms; j++) { k = object -> at_list[j].id; asearch -> todo[k] = 1; } } object = object -> next; } if (recons) { apply_action (this_proj, asearch); trigger_refresh (this_proj, asearch); } g_free (asearch -> todo); asearch -> todo = duplicate_int (old_tds, saved_todo); asearch -> todo_size = old_tds; g_free (saved_todo); } if ((was_frag && ! this_proj -> modelgl -> adv_bonding[0]) || (was_mol && ! this_proj -> modelgl -> adv_bonding[1])) { return TRUE; } else if (old_frag != this_proj -> coord -> totcoord[2]) { return TRUE; } else { return FALSE; } } /*! \fn gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj) \brief random move object(s) \param this_proj the target project \param asearch the target atom search \param numo the number of object(s) to move \param filter the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) \param obj the object (0 = atom(s), 1 = group of atoms) */ gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[1]; float v; int i, j, k; gboolean recons = FALSE; if (! this_proj -> modelgl -> atom_win -> rebuilt[1]) { recons = rebuild_selection (this_proj, asearch, filter); } was_moved_atom = allocbool (this_proj -> natomes); for (i=0; i todo[i] && object) { v = (obj && filter > 2) ? this_proj -> modelgl -> atom_win -> msd_all[i] : this_proj -> modelgl -> atom_win -> msd[i]; if (v > 0.0) { for (j=0; j modelgl -> atom_win -> repeat_move; j++) { random_move_this_object (this_proj, object, asearch -> todo[i], v); } for (j=0; j atoms; j++) { k = object -> at_list[j].id; was_moved_atom[k] = TRUE; } } object = object -> next; } } g_free (was_moved_atom); return recons; } /*! \fn void random_move (project * this_proj, atom_search * asearch) \brief random move \param this_proj the target project \param asearch the target atom search */ void random_move (project * this_proj, atom_search * asearch) { int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int i, j; gboolean recons = FALSE; if (this_proj -> modelgl -> atom_win -> to_be_moved[1]) { recons = random_move_objects (this_proj, asearch, asearch -> todo_size, filter, obj); } else { if (this_proj -> modelgl -> rebuild[0][1] && ! this_proj -> modelgl -> atom_win -> rebuilt[1]) { apply_action (this_proj, asearch); recons = TRUE; } for (i=0; i todo_size; i++) { if (asearch -> todo[i] && this_proj -> modelgl -> atom_win -> msd[i] > 0.0) { for (j=0; j modelgl -> atom_win -> repeat_move; j++) random_move_this_atom (this_proj, i); } } } if (asearch -> recompute_bonding) { i = activep; active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); recons = TRUE; } this_proj -> modelgl -> was_moved = TRUE; init_default_shaders (this_proj -> modelgl); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif if (recons) trigger_refresh (this_proj, asearch); } /*! \fn void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans) \brief translate atom \param this_proj the target project \param aid atom id \param axis 0 = model, 1 = eye \param trans translation vector */ void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans) { vec3_t c_old, c_new; c_old = vec3(this_proj -> atoms[0][aid].x, this_proj -> atoms[0][aid].y, this_proj -> atoms[0][aid].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } this_proj -> atoms[0][aid].x = c_new.x; this_proj -> atoms[0][aid].y = c_new.y; this_proj -> atoms[0][aid].z = c_new.z; } /*! \fn void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans) \brief translate object \param this_proj the target project \param object the object to translate \param axis 0 = model, 1 = eye \param trans the translation vector */ void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans) { int i, j; vec3_t c_old, c_new; c_old = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } object -> baryc[0] = c_new.x; object -> baryc[1] = c_new.y; object -> baryc[2] = c_new.z; for (i=0; i atoms; i++) { j = object -> at_list[i].id; if (! was_moved_atom[j]) { was_moved_atom[j] = TRUE; this_proj -> atoms[0][j].x = object -> baryc[0] + object -> at_list[i].x; this_proj -> atoms[0][j].y = object -> baryc[1] + object -> at_list[i].y; this_proj -> atoms[0][j].z = object -> baryc[2] + object -> at_list[i].z; } } } /*! \fn void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang) \brief rotate object \param this_proj the target project \param object the object to rotate \param axis 0 = model, 1 = eye \param rax the rotation axis \param ang the rotation angle */ void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang) { int i, j; vec3_t c_new, c_old; vec3_t baryc = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); vec4_t qr; mat4_t rot; qr = axis_to_quat(ax[rax], ang*pi/180.0); rot = m4_quat_rotation (qr); for (i=0; i atoms; i++) { j = object -> at_list[i].id; if (! was_moved_atom[j]) { c_old = vec3(object -> at_list[i].x, object -> at_list[i].y, object -> at_list[i].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = m4_mul_pos (rot, c_new); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = m4_mul_pos (rot, c_old); } object -> at_list[i].x = c_new.x; object -> at_list[i].y = c_new.y; object -> at_list[i].z = c_new.z; c_old = v3_add (c_new, baryc); this_proj -> atoms[0][j].x = c_old.x; this_proj -> atoms[0][j].y = c_old.y; this_proj -> atoms[0][j].z = c_old.z; was_moved_atom[j] = TRUE; } } } /*! \fn gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) \brief move objects, return reconstruction status \param this_proj the target project \param asearch the target atom search \param action 0 = translation, 1 = rotation \param axis 0 = model, 1 = eye \param trans the translation vector, if any \param ang the rotation angle, if any */ gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) { gboolean recons = FALSE; if (this_proj -> modelgl -> rebuild[0][0] && ! this_proj -> modelgl -> atom_win -> rebuilt[0]) { recons = rebuild_selection (this_proj, asearch, get_asearch_filter(asearch)); } atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[0]; was_moved_atom = allocbool (this_proj -> natomes); int i, j; while (object) { if (action < 3) { translate_this_object (this_proj, object, axis, trans); } else { rotate_this_object (this_proj, object, axis, action-3, ang); } for (i=0; i atoms; i++) { j = object -> at_list[i].id; was_moved_atom[j] = TRUE; } object = object -> next; } g_free (was_moved_atom); return recons; } extern atom_search * duplicate_atom_search (atom_search * asearch); /*! \fn void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang) \brief move atom selection \param this_proj the target project \param action 0 = translation, 1 = rotation \param axis 0 = model, 1 = eye \param trans the translation vector, if any \param ang the rotation angle, if any */ void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang) { atom_search * asearch = duplicate_atom_search (this_proj -> modelgl -> search_widg[2]); gboolean recons = FALSE; gboolean move_it = do_we_have_objects_in_selection (this_proj, asearch, TRUE); if (move_it) { int i; if (this_proj -> modelgl -> atom_win -> to_be_moved[0]) { recons = move_objects (this_proj, asearch, action, axis, trans, ang); } else { if (this_proj -> modelgl -> rebuild[0][0] && ! this_proj -> modelgl -> atom_win -> rebuilt[0]) { apply_action (this_proj, asearch); recons = TRUE; } for (i=0; i todo_size; i++) { if (asearch -> todo[i]) { translate_this_atom (this_proj, i, axis, trans); } } } if (asearch -> recompute_bonding) { i = activep; active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); recons = TRUE; } init_default_shaders (this_proj -> modelgl); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif if (recons) trigger_refresh (this_proj, asearch); } } /*! \fn void update_coordinates (project * this_proj, int status, int axis, int action) \brief update atomic coordinates on motion \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis axis, 0 = model, 1 = eye \param action 0 = translation, 1 = rotation */ void update_coordinates (project * this_proj, int status, int axis, int action) { vec3_t trans = vec3(this_proj -> modelgl -> atom_win -> new_param[status][axis][0]-this_proj -> modelgl -> atom_win -> old_param[status][axis][0], this_proj -> modelgl -> atom_win -> new_param[status][axis][1]-this_proj -> modelgl -> atom_win -> old_param[status][axis][1], this_proj -> modelgl -> atom_win -> new_param[status][axis][2]-this_proj -> modelgl -> atom_win -> old_param[status][axis][2]); float r = this_proj -> modelgl -> atom_win -> new_param[status][axis][action] - this_proj -> modelgl -> atom_win -> old_param[status][axis][action]; if (v3_length(trans) != 0.0 || r != 0.0) { move_selection (this_proj, action, axis, trans, r); this_proj -> modelgl -> was_moved = TRUE; this_proj -> modelgl -> atom_win -> old_param[status][axis][action] = this_proj -> modelgl -> atom_win -> new_param[status][axis][action]; init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); } } /*! \fn G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) \brief repeat motion callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) { project * this_proj = (project *)data; this_proj -> modelgl -> atom_win -> repeat_move = gtk_spin_button_get_value_as_int(res); } /*! \fn void update_range_and_entry (project * this_proj, int i, int j, int k) \brief update motion range \param this_proj the target project \param i selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param j axis, 0 = model, 1 = eye \param k parameter to update: x, y, z or alpha, beta, gamma */ void update_range_and_entry (project * this_proj, int i, int j, int k) { update_entry_double (GTK_ENTRY(this_proj -> modelgl -> atom_win -> edit_entry[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); } /*! \fn float get_limit (int mot, glwin * view) \brief get motion limit \param mot translation (0) or rotation (1) \param view the target glwin */ float get_limit (int mot, glwin * view) { if (! mot) { int plimit = (int)(view -> anim -> last -> img -> p_depth/limit[mot]); return limit[mot] + 2.0*plimit*limit[mot]; } else { return limit[mot]; } } /*! \fn void range_has_changed (gpointer data, double v) \brief motion \param data the associated data pointer \param v the value for motion */ void range_has_changed (gpointer data, double v) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); int h, i, j, k; h = id -> b - TOLAB; i = (h < 3) ? 0 : 1; j = this_proj -> modelgl -> atom_win -> axis[i]; k = this_proj -> modelgl -> search_widg[id -> c] -> status; if (v != this_proj -> modelgl -> atom_win -> new_param[k][j][h]) { float plim = get_limit (i, this_proj -> modelgl); if (v >= -plim && v <= plim) { this_proj -> modelgl -> atom_win -> new_param[k][j][h] = v; this_proj -> modelgl -> atom_win -> active = i; update_coordinates (this_proj, k, j, h); } update_range_and_entry (this_proj, k, j, h); } } /*! \fn G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) \brief motion callback - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); range_has_changed (data, v); } /*! \fn G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) \brief motion callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) { range_has_changed (data, gtk_range_get_value (range)); } /*! \fn G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief motion callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { range_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) \brief set motion axis (eye or model) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j; j = id -> b - TOLAB; this_proj -> modelgl -> atom_win -> axis[j] = combo_get_active ((GtkWidget *)box); for (i=3*j; i<(j + 1)*3; i++) { update_range_and_entry (this_proj, this_proj -> modelgl -> search_widg[id -> c] -> status, this_proj -> modelgl -> atom_win -> axis[j], i); } this_proj -> modelgl -> atom_win -> active = j; update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) \brief set show / hide motion axis toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) \brief set show / hide motion axis toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j; j = id -> b - TOLAB; i = button_get_status ((GtkWidget *)but); button_set_status (this_proj -> modelgl -> atom_win -> axis_but[! j], i); this_proj -> modelgl -> atom_win -> active = j; this_proj -> modelgl -> atom_win -> show_axis[j] = i; if (i) { this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = CYLINDERS; } else { this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = this_proj -> modelgl -> atom_win -> old_axis; } this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } /*! \fn void check_motion_interactors (project * this_proj, atom_search * asearch) \brief add motion check button \param this_proj the target project \param asearch the target atom search */ void check_motion_interactors (project * this_proj, atom_search * asearch) { gboolean activate = do_we_have_objects_in_selection (this_proj, asearch, FALSE); int i; if (this_proj -> modelgl -> atom_win) { for (i=0; i<6; i++) { if (this_proj -> modelgl -> atom_win -> edit_entry[i]) { widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_entry[i], (((asearch -> object && ! asearch -> passivating ) || (asearch -> object > 1 && asearch -> passivating)) || i < 3) ? activate : 0); } if (this_proj -> modelgl -> atom_win -> edit_scale[i]) { widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_scale[i], (((asearch -> object && ! asearch -> passivating ) || (asearch -> object > 1 && asearch -> passivating)) || i < 3) ? activate : 0); } } } } /*! \fn GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd) \brief create axis entries \param asearch the target atom search \param this_proj the target project \param mot translation (0) or rotation (1) \param axd axis (0 = x, 1 = y, 2 = z) */ GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd) { gchar * str; GtkWidget * lab; GtkWidget * hbox; gchar * axis[3]={"x", "y", "z"}; gchar * unit[2]={"Å", "°"}; GtkWidget * vbox = create_vbox (5); int j = mot*3 + axd; float plim = get_limit (mot, this_proj -> modelgl); this_proj -> modelgl -> atom_win -> edit_entry[j] = create_entry (G_CALLBACK(set_move), 100, 15, FALSE, & asearch -> pointer[j]); this_proj -> modelgl -> atom_win -> edit_scale[j] = create_hscale (-plim, plim, 0.001, this_proj -> modelgl -> atom_win -> new_param[asearch -> status][1][j], GTK_POS_TOP, 4, 250, G_CALLBACK(range_move), G_CALLBACK(scroll_range_move), & asearch -> pointer[j]); widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_entry[j], 0); widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_scale[j], 0); str = g_strdup_printf (_("On %s axis:"), axis[axd]); lab = markup_label(unit[mot], 20, -1, 0.0, 0.5); update_entry_double (GTK_ENTRY(this_proj -> modelgl -> atom_win -> edit_entry[j]), this_proj -> modelgl -> atom_win -> new_param[asearch -> status][1][j]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 70, -1, 0.0, 0.5), FALSE, FALSE, 50); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> edit_scale[j], FALSE, FALSE, 0); GtkWidget * fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), this_proj -> modelgl -> atom_win -> edit_entry[j], 0, 15); gtk_fixed_put (GTK_FIXED(fixed), lab, 120, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj) \brief add motion interaction widgets \param asearch the target atom search \param axd translation (0) or rotation (1) \param this_proj the target project */ GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Select the axis to be used: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 20); this_proj -> modelgl -> atom_win -> axis_combo[axd] = create_combo (); combo_text_append (this_proj -> modelgl -> atom_win -> axis_combo[axd], _("Model axis")); combo_text_append (this_proj -> modelgl -> atom_win -> axis_combo[axd], _("Eye (viewer) axis")); combo_set_active (this_proj -> modelgl -> atom_win -> axis_combo[axd], this_proj -> modelgl -> atom_win -> axis[axd]); g_signal_connect (G_OBJECT (this_proj -> modelgl -> atom_win -> axis_combo[axd]), "changed", G_CALLBACK(set_axis_for_motion), & asearch -> pointer[axd]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> axis_combo[axd], FALSE, FALSE, 20); this_proj -> modelgl -> atom_win -> axis_but[axd] = check_button (_("Show"), 100, 35, FALSE, G_CALLBACK(set_show_motion_axis), & asearch -> pointer[axd]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> axis_but[axd], FALSE, FALSE, 20); int i; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_axis_entries (asearch, this_proj, axd, i), FALSE, FALSE, 0); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); //add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, // check_button (_("Reset transformation(s)"), -1, 35, FALSE, G_CALLBACK(set_reset_transformation), & asearch -> pointer[0]), // FALSE, FALSE, 10); return vbox; } atomes_1.3.1/src/opengl/edit/cell_super.c0000664000175000017500000002641115212624223020012 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_super.c * @short Functions to create a super-cell using the extra cell(s) * @author Sébastien Le Roux */ /* * This file: 'cell_super.c' * * Contains: * - The functions to create a super-cell using the extra cell(s) * * List of functions: gboolean ** duplicate_geom_info (project * this_proj); gboolean ** duplicate_poly_info (project * this_proj); void restore_coord_and_poly_info (project * proj, coord_info * ocoord, gboolean ** cshow, gboolean ** pshow); void sens_superbut (project * this_proj); void super_celling (glwin * view); G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data); */ #include "cell_edit.h" #include "atom_edit.h" extern void clean_coord_window (project * this_proj); extern GtkWidget * cell_tab (int i, project * this_proj); /*! \fn gboolean ** duplicate_geom_info (project * this_proj) \brief duplicate coordinations show status \param this_proj the target project */ gboolean ** duplicate_geom_info (project * this_proj) { int i, j; gboolean ** show = g_malloc0(2*sizeof*show); for (i=0; i<2; i++) { show[i] = allocbool(this_proj -> coord -> totcoord[i]); for (j=0; j coord -> totcoord[i]; j++) { show[i][j] = this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]; } } return show; } /*! \fn gboolean ** duplicate_poly_info (project * this_proj) \brief duplicate polyhedra show status \param this_proj the target project */ gboolean ** duplicate_poly_info (project * this_proj) { int i, j; gboolean ** show = g_malloc0(2*sizeof*show); for (i=0; i<2; i++) { show[i] = allocbool(this_proj -> coord -> totcoord[i]); for (j=0; j coord -> totcoord[i]; j++) { show[i][j] = this_proj -> modelgl -> anim -> last -> img -> show_poly[i][j]; } } return show; } /*! \fn void restore_coord_and_poly_info (project * proj, coord_info * ocoord, gboolean ** cshow, gboolean ** pshow) \brief restore show status after \param proj the target project \param ocoord the old coordination \param cshow the saved coordination show status \param pshow the saved polyhedra show status */ void restore_coord_and_poly_info (project * proj, coord_info * ocoord, gboolean ** cshow, gboolean ** pshow) { int i, j; gboolean restore = TRUE; for (i=0; i<2; i++) { if (ocoord -> totcoord[i] != active_coord -> totcoord[i]) { restore = FALSE; break; } for (j=0; j< ocoord -> species; j++) { if (ocoord -> ntg[i][j] != active_coord -> ntg[i][j]) { restore = FALSE; break; } } if (! restore) break; } if (restore) { for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { #ifdef GTK3 if (active_glwin -> ogl_geom[0][i][j] != NULL) { if (GTK_IS_WIDGET(active_glwin -> ogl_geom[0][i][j])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_geom[0][i][j], cshow[i][j]); show_hide_coord (active_glwin -> ogl_geom[0][i][j], & active_glwin -> gcid[i][j][i]); } } if (active_glwin -> ogl_poly[0][i][j] != NULL) { if (GTK_IS_WIDGET(active_glwin -> ogl_poly[0][i][j])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_poly[0][i][j], pshow[i][j]); show_hide_poly (active_glwin -> ogl_poly[0][i][j], & active_glwin -> gcid[i][j][i]); } } #else active_glwin -> anim -> last -> img -> show_coord[i][j] = cshow[i][j]; if (! cshow[i][j]) { show_hide_coord (NULL, NULL, & active_glwin -> gcid[i][j][i]); } active_glwin -> anim -> last -> img -> show_poly[i][j] = pshow[i][j]; if (pshow[i][j]) { show_hide_poly (NULL, NULL, & active_glwin -> gcid[i][j][i]); } #endif } } } } /*! \fn void sens_superbut (project * this_proj) \brief adjust 'Create super-cell' button sensitivity \param this_proj the target project */ void sens_superbut (project * this_proj) { int i, j; if (this_proj -> modelgl -> record) { i = 0; } else { i = 0; for (j=0; j<3; j++) i += this_proj -> modelgl -> anim -> last -> img -> abc -> extra_cell[j]; } if (this_proj -> modelgl -> cell_win) { widget_set_sensitive (this_proj -> modelgl -> cell_win -> superbut, i); } #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (this_proj -> modelgl -> ogl_box[5], i); #endif } /*! \fn void super_celling (glwin * view) \brief create super cell \param view the target glwin */ void super_celling (glwin * view) { gchar * txta = i18n("You are about to change the periodicity of the 3D model,"); gchar * txtb = i18n("this will affect the entire molecular dynamics trajectory,"); gchar * txtc = i18n("\tand the action is irreversible, proceed anyway ?"); gchar * str; if (get_project_by_id(view -> proj) -> steps > 1) { str = g_strdup_printf ("%s\n%s\n%s", _(txta), _(txtb), _(txtc)); } else { str = g_strdup_printf ("%s\n%s", _(txta), _(txtc)); } if (ask_yes_no (_("Create a super-cell ?"), str, GTK_MESSAGE_WARNING, view -> win)) { int i, j, k, l; k = activep; image * last = view -> anim -> last -> img; if (k != view -> proj) active_project_changed (view -> proj); preserve_ogl_selection (view); if (add_cells_ (& active_project -> natomes, & active_project -> steps, last -> abc -> extra_cell)) { if (active_cell -> crystal) { vec3_t shift; shift.x = active_box -> vect[0][0] + active_box -> vect[1][0] + active_box -> vect[2][0]; shift.y = active_box -> vect[0][1] + active_box -> vect[1][1] + active_box -> vect[2][1]; shift.z = active_box -> vect[0][2] + active_box -> vect[1][2] + active_box -> vect[2][2]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].x += shift.x; active_project -> atoms[i][j].y += shift.y; active_project -> atoms[i][j].z += shift.z; } } } l = 1; for (i=0; i<3; i++) { for (j=0; j<3; j++) { active_box -> vect[i][j] *= (last -> abc -> extra_cell[i] + 1); } l *= (last -> abc -> extra_cell[i] + 1); active_box -> param[0][i] *= (last -> abc -> extra_cell[i] + 1); last -> abc -> extra_cell[i] = 0; if (active_glwin -> cell_win) { if (active_glwin -> cell_win -> ax_cell[i]) { gtk_spin_button_set_value (GTK_SPIN_BUTTON(active_glwin -> cell_win -> ax_cell[i]), 1.0); } } } if (active_cell -> crystal) { vec3_t shift; shift.x = active_box -> vect[0][0] + active_box -> vect[1][0] + active_box -> vect[2][0]; shift.y = active_box -> vect[0][1] + active_box -> vect[1][1] + active_box -> vect[2][1]; shift.z = active_box -> vect[0][2] + active_box -> vect[1][2] + active_box -> vect[2][2]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].x -= shift.x/2.0; active_project -> atoms[i][j].y -= shift.y/2.0; active_project -> atoms[i][j].z -= shift.z/2.0; } } } for (i=0; i nspec; i++) { active_chem -> nsps[i] *= l; } init_curves_and_calc (active_project); if (! active_project -> cell.crystal) center_molecule (active_project); active_project_changed (view -> proj); active_project -> dmtx = FALSE; bonds_update = 1; active_project -> runc[0] = FALSE; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; gboolean ** cshow = duplicate_geom_info (active_project); gboolean ** pshow = duplicate_poly_info (active_project); coord_info * ocoord = duplicate_coord_info (active_coord); if (view -> rings) { view -> rings = FALSE; for (i=0; i<5; i++) { clean_rings_data (i, view); #ifdef GTK3 update_rings_menus (view); #endif } } if (view -> chains) { clean_chains_data (view); #ifdef GTK3 update_chains_menus (view); #endif } on_calc_bonds_released (NULL, NULL); restore_coord_and_poly_info (active_project, ocoord, cshow, pshow); g_free (cshow); g_free (pshow); g_free (ocoord); int shaders[1] = {POLYS}; re_create_md_shaders (1, shaders, active_project); view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } else { show_warning (_("Something went wrong, the 3D model was not updated"), view -> win); } restore_ogl_selection (view); fill_tool_model (); clean_other_window_after_edit (active_project); if (k != view -> proj) active_project_changed (k); } update (view); #ifdef GTK4 update_menu_bar (view); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create super cell menu callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) \brief create super cell menu callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; super_celling (view); sens_superbut (get_project_by_id(view -> proj)); } /*! \fn G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) \brief create super cell callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; super_celling (view); sens_superbut (get_project_by_id(view -> proj)); } atomes_1.3.1/src/opengl/edit/cell_edit.c0000664000175000017500000002050715212624223017601 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_edit.c * @short Functions to create the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_edit.c' * * Contains: * - The functions to create the cell edition window * * List of functions: G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data); GtkWidget * cell_tab (int i, project * this_proj); GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox); GtkWidget * create_cell_edition_window (project * this_proj, gpointer data); */ #include "cell_edit.h" gchar * edit_names[7] = {i18n("Wrap All Atoms in"), i18n("Shift Center"), i18n("Add Extra(s)"), i18n("Create Super-Cell"), i18n("Adjust Density"), i18n("Cut Slab"), i18n("PBC Pixels Debug")}; /*! \fn G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) \brief close cell edition window and free the associated data pointers \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) { project * this_proj = (project *)data; int i; for (i=0; i<3; i++) this_proj -> modelgl -> cshift[i] = this_proj -> modelgl -> cell_win -> cparam[i]; this_proj -> modelgl -> cell_win -> win = destroy_this_widget (this_proj -> modelgl -> cell_win -> win); g_free (this_proj -> modelgl -> cell_win); this_proj -> modelgl -> cell_win = NULL; cleaning_shaders (this_proj -> modelgl, SLABS); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) \brief cell edition window close event callback GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) \brief cell edition window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_cell_edit (NULL, data); return FALSE; } /*! \fn GtkWidget * cell_tab (int i, project * this_proj) \brief create the 'i'th cell tab \param i the cell tab id \param this_proj the target project */ GtkWidget * cell_tab (int i, project * this_proj) { switch (i) { case 0: return shift_center_tab (this_proj); break; case 1: return add_extra_cell_tab (this_proj -> modelgl); break; case 2: return adjust_density_tab (this_proj); break; case 3: return cut_in_model (this_proj); break; #ifdef DEBUG default: return pixels_tab (this_proj); break; #else default: return NULL; break; #endif } } /*! \fn GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox) \brief create the cell edition notebook \param this_proj the target project \param vbox the GtkWidget sending the signal */ GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox) { GtkWidget * notebook = gtk_notebook_new (); gchar * str; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); int i, j; gboolean doit; #ifdef DEBUG for (i=0; i<5; i ++) #else for (i=0; i<4; i ++) #endif { #ifdef DEBUG doit = (i == 4 && ! this_proj -> pix[0]) ? FALSE : TRUE; #else doit = TRUE; #endif if (doit) { j = (i < 2) ? i+1 : i+2; str = g_strdup_printf ("%s", _(edit_names[j])); gtk_notebook_insert_page (GTK_NOTEBOOK(notebook), cell_tab (i, this_proj), markup_label(str, -1, -1, 0.0, 0.5), i); if (i > 1) widget_set_sensitive (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), i), (this_proj -> steps) > 1 ? 0 : 1); g_free (str); } } show_the_widgets (notebook); return notebook; } /*! \fn GtkWidget * create_cell_edition_window (project * this_proj, gpointer data) \brief create the cell editon window \param this_proj the target project \param data the associated data pointer */ GtkWidget * create_cell_edition_window (project * this_proj, gpointer data) { gchar * str = g_strdup_printf (_("Cell edition - %s"), this_proj -> name); GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, vbox); gtk_widget_set_size_request (vbox, 700 , -1); int i; for (i=0; i<3; i++) this_proj -> modelgl -> cell_win -> cparam[i] = this_proj -> modelgl -> cshift[i]; this_proj -> modelgl -> cell_win -> notebook = create_cell_notebook (this_proj, vbox); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_cell_edit), this_proj); add_box_child_end (hbox, but, FALSE, FALSE, 5); add_gtk_close_event (win, G_CALLBACK(close_cell), this_proj); return win; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the cell edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) \brief create the cell edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; int i; project * this_proj = get_project_by_id(id -> a); if (this_proj -> modelgl -> cell_win == NULL) { this_proj -> modelgl -> cell_win = g_malloc0(sizeof*this_proj -> modelgl -> cell_win); this_proj -> modelgl -> cell_win -> homo_density = TRUE; this_proj -> modelgl -> cell_win -> slab_alpha = 0.75; this_proj -> modelgl -> cell_win -> slab_lot = allocint (this_proj -> nspec); this_proj -> modelgl -> cell_win -> slab_pbc = this_proj -> cell.pbc; for (i=0; i<5; i++) { this_proj -> modelgl -> cell_win -> slab_pointer[i].a = id -> a; this_proj -> modelgl -> cell_win -> slab_pointer[i].b = i; } for (i=9; i<13; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 5.0; for (i=13; i<15; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 2.5; for (i=15; i<18; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 90.0; this_proj -> modelgl -> cell_win -> win = create_cell_edition_window (this_proj, data); } show_the_widgets (this_proj -> modelgl -> cell_win -> win); for (i=1; i<6; i++) { if (i < 3) hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_hbox[i]); hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[i]); } int page = id -> b; gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook), page); } atomes_1.3.1/src/opengl/edit/cell_cut.c0000664000175000017500000007705515212624223017461 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_cut.c * @short Functions to create the 'slab cutting' tab of the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_cut.c' * * Contains: * - The functions to create the 'slab cutting' tab of the cell edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void create_slab_info (project * this_proj); void slab_alpha_has_changed (gpointer data, GLfloat v); void invert_selection (project * this_proj); G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_slab_type (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data); G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data); G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data); GtkWidget * prepare_slab_box (int sid, project * this_proj); GtkWidget * create_slab_param_combo (int sid, project * this_proj); GtkWidget * cut_in_model (project * this_proj); */ #include "cell_edit.h" #include "atom_edit.h" extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /*! \fn G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) \brief passivate button callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) { project * this_proj = (project *)data; gchar * str = g_strdup_printf (_("Cell edition - %s: surface passivation"), this_proj -> name); GtkWidget * dial = dialogmodal (prepare_for_title(str), GTK_WINDOW(this_proj -> modelgl -> cell_win -> win)); g_free (str); this_proj -> modelgl -> search_widg[8] -> passivating = TRUE; GtkWidget * vbox = dialog_get_content_area (dial); GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, scrollsets, action_tab (6, this_proj)); widget_set_sensitive (this_proj -> modelgl -> search_widg[8] -> object_box, 0); gtk_widget_set_size_request (scrollsets, 760, 350); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, scrollsets, FALSE, FALSE, 10); GtkWidget * info = markup_label (_("Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B"), -1, -1, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info, FALSE, FALSE, 20); show_the_widgets (dial); if (! this_proj -> modelgl -> search_widg[8] -> in_selection) { combo_set_active (this_proj -> modelgl -> search_widg[8] -> atom_box, 0); set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), this_proj -> modelgl -> search_widg[8]); } else { combo_set_active (this_proj -> modelgl -> search_widg[8] -> atom_box, 0); set_spec_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), this_proj -> modelgl -> search_widg[8]); } g_signal_connect (G_OBJECT(dial), "response", G_CALLBACK(destroy_this_dialog), NULL); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); this_proj -> modelgl -> search_widg[8] -> passivating = FALSE; } /*! \fn void create_slab_info (project * this_proj) \brief create slab information widget \param this_proj the target project */ void create_slab_info (project * this_proj) { this_proj -> modelgl -> cell_win -> slab_info = destroy_this_widget (this_proj -> modelgl -> cell_win -> slab_info); this_proj -> modelgl -> cell_win -> slab_info = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 5); gchar * str; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("- Volume: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%f", this_proj -> modelgl -> cell_win -> slab_vol); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 90, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å3", 20, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("- Atom(s) in slab: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%d", this_proj -> modelgl -> cell_win -> slab_atoms); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); int i; for (i=0; i nspec; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 0); str = g_strdup_printf (_("\t - %s atom(s) in slab: "), this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("%d", this_proj -> modelgl -> cell_win -> slab_lot[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); } add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info_box, this_proj -> modelgl -> cell_win -> slab_info, FALSE, FALSE, 0); show_the_widgets (this_proj -> modelgl -> cell_win -> slab_info); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) \brief set slab property toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) \brief set slab property toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) #endif { dint * dat = (dint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; gboolean status = button_get_status ((GtkWidget *)but); switch (dat -> b) { case 0: view -> cell_win -> slab_show = status; break; case 1: view -> cell_win -> slab_pbc = status; break; case 2: view -> cell_win -> slab_act = status; break; case 3: view -> cell_win -> slab_out = status; break; case 4: view -> cell_win -> slab_passivate = status; widget_set_sensitive (view -> cell_win -> passivate, view -> cell_win -> slab_passivate); if (view -> cell_win -> slab_passivate) { prepare_atom_edition (& view -> colorp[0][0], FALSE); view -> search_widg[8] = allocate_atom_search (dat -> a, REPLACE, 8, get_project_by_id(dat -> a) -> nspec); view -> search_widg[8] -> status = 2; setup_passivate (NULL, get_project_by_id(dat -> a)); } else { g_free (view -> search_widg[8]); view -> search_widg[8] = NULL; if (! view -> atom_win -> visible) { g_free (view -> atom_win); view -> atom_win = NULL; } } break; } if (view -> cell_win -> slab_show) { view -> create_shaders[SLABS] = TRUE; } else { cleaning_shaders (view, SLABS); } update (view); } /*! \fn GtkWidget * prepare_slab_box (int sid, project * this_proj) \brief create slab parameters widget box \param sid the type of slab \param this_proj the target project */ GtkWidget * prepare_slab_box (int sid, project * this_proj) { gchar * option[6]={i18n("- Position the center of the slab: "), // 6, 7, 8 i18n("- Size of the slab: "), // 9, 10, 11 i18n("- Size of the slab: "), // 12, 13 i18n("- Size of the slab: "), // 14 i18n("- Parallelepiped angles: "), // 15, 16, 17 i18n("- Slab rotation: ")}; // 18, 19, 20 GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(option[sid]), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); int i; switch (sid) { case 0: for (i=6; i<9; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 1: for (i=9; i<12; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 2: for (i=12; i<14; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 3: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, 14), FALSE, FALSE, 0); break; case 4: for (i=15; i<18; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 5: for (i=18; i<21; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; } return vbox; } /*! \fn G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) \brief change slab option combo \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) { project * this_proj = (project *)data; int i, j; i = combo_get_active ((GtkWidget *)box); for (j=0; j<6; j++) { hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[j]); } switch (i) { case 0: show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[0]); break; case 1: show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[1+this_proj -> modelgl -> cell_win -> slab_type]); break; default: if (this_proj -> modelgl -> cell_win -> slab_type) { show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[5]); } else { show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[i+2]); } break; } } /*! \fn GtkWidget * create_slab_param_combo (int sid, project * this_proj) \brief create slab parameters combo widget \param sid the slab type \param this_proj the target project */ GtkWidget * create_slab_param_combo (int sid, project * this_proj) { GtkWidget * combo = create_combo (); gchar * options[4] = {i18n("Position"), i18n("Size"), i18n("Angles"), i18n("Rotation")}; int i, j, k; i = 4 - sid; for (j=0; j modelgl -> cell_win -> slab_hbox[i]); this_proj -> modelgl -> cell_win -> slab_type = i = combo_get_active ((GtkWidget *)box); show_the_widgets (this_proj -> modelgl -> cell_win -> slab_hbox[i]); combo_set_active (this_proj -> modelgl -> cell_win -> slab_param[i], 0); set_slab_option (GTK_COMBO_BOX(this_proj -> modelgl -> cell_win -> slab_param[i]), this_proj); if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } /*! \fn void slab_alpha_has_changed (gpointer data, GLfloat v) \brief change slab opacity \param data the associated data pointer \param v the new opacity value */ void slab_alpha_has_changed (gpointer data, GLfloat v) { glwin * view = (glwin *)data; view -> cell_win -> slab_alpha = v; if (view -> n_shaders[SLABS][0]) { view -> create_shaders[SLABS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change slab opactiy callback - scoll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { slab_alpha_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) \brief change slab opactiy callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) { slab_alpha_has_changed (data, (GLfloat) gtk_range_get_value (range)); } /*! \fn void invert_selection (project * this_proj) \brief invert atom(s) selection \param this_proj the target project */ void invert_selection (project * this_proj) { save_all_selections (this_proj -> modelgl, 0); int i, j, k; if (this_proj -> modelgl -> mode == EDITION) { // Invert the saved coordinates as well double ** saved_c = NULL; i = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; if (i < this_proj -> natomes) { saved_c = g_malloc0((this_proj -> natomes - i)*sizeof*saved_c); k = 0; for (j=0; j natomes; j++) { if (! this_proj -> atoms[0][j].pick[0]) { saved_c[k] = allocdouble (3); saved_c[k][0] = this_proj -> atoms[0][j].x; saved_c[k][1] = this_proj -> atoms[0][j].y; saved_c[k][2] = this_proj -> atoms[0][j].z; k ++; } } } g_free (this_proj -> modelgl -> saved_coord[1]); this_proj -> modelgl -> saved_coord[1] = NULL; if (saved_c) { this_proj -> modelgl -> saved_coord[1] = g_malloc0((this_proj -> natomes - i)*sizeof*this_proj -> modelgl -> saved_coord[1]); for (j=0; j natomes - i; j++) { this_proj -> modelgl -> saved_coord[1][j] = duplicate_double(3, saved_c[j]); } g_free (saved_c); } } for (i=0; i natomes; i++) { process_selected_atom (this_proj, this_proj -> modelgl, i, 0, 0, 0); } update_all_selections (this_proj -> modelgl, 0); if (this_proj -> modelgl -> mode == EDITION) { this_proj -> modelgl -> baryc[1] = get_bary (this_proj, 1); } int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); } /*! \fn G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) \brief select / unselect atom(s) in slab callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) { project * this_proj = (project *)data; this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; opengl_project_changed (this_proj -> id); selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); if (this_proj -> modelgl -> cell_win -> slab_act) invert_selection (this_proj); this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) \brief cut this slab callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) { project * this_proj = (project *)data; int is_out, i; if (this_proj -> modelgl-> cell_win -> slab_atoms) { if (! this_proj -> modelgl -> cell_win -> slab_passivate || do_we_have_objects_in_selection(this_proj, this_proj -> modelgl -> search_widg[8], FALSE)) { is_out = this_proj -> modelgl -> cell_win -> slab_out; if (this_proj -> modelgl -> search_widg[8]) this_proj -> modelgl -> search_widg[8] -> passivating = FALSE; gchar * infom[2] = {i18n("Cut and modify model ?\n This is irreversible !"), i18n("Cut and create new project ?")}; if (ask_yes_no(_("Cut"), _(infom[is_out]), GTK_MESSAGE_WARNING, this_proj -> modelgl -> cell_win -> win)) { this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; if (is_out) preserve_ogl_selection (this_proj -> modelgl); opengl_project_changed (this_proj -> id); selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); is_selected = 1; if (this_proj -> modelgl -> cell_win -> slab_act) invert_selection (this_proj); switch (is_out) { case 0: // Modify project if (this_proj -> modelgl -> cell_win -> slab_passivate) { if (this_proj -> modelgl -> atom_win) { #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif this_proj -> modelgl -> cell_win -> slab_passivate = FALSE; to_passivate_using_the_objects (this_proj, this_proj -> modelgl -> search_widg[8]); this_proj -> modelgl -> cell_win -> slab_passivate = TRUE; } } else { #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif } break; case 1: // Create new project if (this_proj -> modelgl -> cell_win -> slab_passivate) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif } #ifdef GTK4 edit_in_new_project (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else edit_in_new_project (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif if (this_proj -> modelgl -> cell_win -> slab_passivate) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); active_project_changed (nprojects-1); active_glwin -> cell_win = g_malloc0(sizeof*active_glwin -> cell_win); active_glwin -> cell_win -> slab_lot = allocint (active_project -> nspec); active_glwin -> cell_win -> slab_type = this_proj -> modelgl -> cell_win ->slab_type; active_glwin -> cell_win -> slab_pbc = this_proj -> modelgl -> cell_win ->slab_pbc; active_glwin -> cell_win -> slab_act = this_proj -> modelgl -> cell_win -> slab_act; active_glwin -> cell_win -> slab_passivate = TRUE; for (i=0; i<21; i++) active_glwin -> cell_win -> cparam[i] = this_proj -> modelgl -> cell_win -> cparam[i]; prepare_atom_edition (& active_glwin -> colorp[0][0], FALSE); active_glwin -> search_widg[8] = allocate_atom_search (activep, REPLACE, 8, this_proj -> modelgl -> search_widg[8] -> todo_size); active_glwin -> search_widg[8] -> status = 2; active_glwin -> search_widg[8] -> object = this_proj -> modelgl -> search_widg[8] -> object; active_glwin -> search_widg[8] -> filter = this_proj -> modelgl -> search_widg[8] -> filter; active_glwin -> search_widg[8] -> in_selection = this_proj -> modelgl -> search_widg[8] -> in_selection; active_glwin -> search_widg[8] -> todo_size = this_proj -> modelgl -> search_widg[8] -> todo_size; active_glwin -> search_widg[8] -> todo = duplicate_int (active_glwin -> search_widg[8] -> todo_size, this_proj -> modelgl -> search_widg[8] -> todo); active_glwin -> atom_win -> to_be_inserted[3] = duplicate_atomic_object (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); atomic_object * tmp_a, * tmp_b; tmp_a = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; tmp_b = active_glwin -> atom_win -> to_be_inserted[3]; while (tmp_a -> next) { tmp_b -> next = duplicate_atomic_object (tmp_a -> next); tmp_b -> next -> prev = tmp_b; tmp_b = tmp_b -> next; tmp_a = tmp_a -> next; } opengl_project_changed (active_project -> id); #ifdef GTK4 select_unselect_atoms (NULL, NULL, & active_glwin -> colorp[0][0]); #else select_unselect_atoms (NULL, & active_glwin -> colorp[0][0]); #endif save_all_selections (active_glwin, 0); active_glwin -> cell_win -> cut_this_slab = TRUE; create_slab_lists (active_project); update_all_selections (active_glwin, 0); if (active_glwin -> cell_win -> slab_act) invert_selection (active_project); #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif active_glwin -> cell_win -> slab_passivate = FALSE; to_passivate_using_the_objects (active_project, active_glwin -> search_widg[8]); active_glwin -> cell_win -> slab_passivate = TRUE; g_free (active_glwin -> search_widg[8]); active_glwin -> search_widg[8] = NULL; if (! active_glwin -> atom_win -> visible) { g_free (active_glwin -> atom_win); active_glwin -> atom_win = NULL; } g_free (active_glwin -> cell_win); active_glwin -> cell_win = NULL; } break; } #ifdef GTK4 // select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else // select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif if (is_out) restore_ogl_selection (this_proj -> modelgl); this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } else { show_info (_("Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !"), 0, this_proj -> modelgl -> cell_win -> win); } } else { show_info (_("The slab is empty, nothing to do !"), 0, this_proj -> modelgl -> cell_win -> win); } } /*! \fn GtkWidget * cut_in_model (project * this_proj) \brief create the cut slab tab \param this_proj the target project */ GtkWidget * cut_in_model (project * this_proj) { int i; GtkWidget * layout; i = (this_proj -> nspec > 3) ? 15 * (this_proj -> nspec - 3) : 0; #ifdef G_OS_WIN32 layout = create_layout (800, 510+i); #else layout = create_layout (800, 420+i); #endif GtkWidget * box = create_vbox (BSEP); layout_add_widget (layout, box, 10, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_("Cut slab in the simulation box: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Show/Hide slab"), 25, -1, this_proj -> modelgl -> cell_win -> slab_show, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[0]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Use PBC to select atoms"), 25, -1, this_proj -> modelgl -> cell_win -> slab_pbc, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[1]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Invert cutting (all but the slab)"), 25, -1, this_proj -> modelgl -> cell_win -> slab_act, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[2]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Export in new project"), 25, -1, this_proj -> modelgl -> cell_win -> slab_out, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[3]), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 10); GtkWidget * hox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hox, FALSE, FALSE, 0); GtkWidget * combo = create_combo (); gchar * type[3] = {i18n("Parallelepiped"), i18n("Cylinder"), i18n("Sphere")}; for (i=0; i<3; i++) combo_text_append (combo, _(type[i])); combo_set_active (combo, this_proj -> modelgl -> cell_win -> slab_type); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_slab_type), this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, markup_label(_("- Shape of the slab: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, combo, FALSE, FALSE, 5); // Passivation hox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hox, FALSE, FALSE, 100); GtkWidget * but = check_button (_("Passivate surface"), -1, -1, this_proj -> modelgl -> cell_win -> slab_passivate, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[4]); // widget_set_sensitive (but, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, but, FALSE, FALSE, 20); this_proj -> modelgl -> cell_win -> passivate = create_button (_("Options"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(setup_passivate), this_proj); widget_set_sensitive (this_proj -> modelgl -> cell_win -> passivate, this_proj -> modelgl -> cell_win -> slab_passivate); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, this_proj -> modelgl -> cell_win -> passivate, FALSE, FALSE, 0); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hhbox, FALSE, FALSE, 5); GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> slab_opts = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> modelgl -> cell_win -> slab_opts, FALSE, FALSE, 5); for (i=0; i<3; i++) { this_proj -> modelgl -> cell_win -> slab_hbox[i] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_opts, this_proj -> modelgl -> cell_win -> slab_hbox[i], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> cell_win -> slab_hbox[i], markup_label(_("- Select option to tweak: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> slab_param[i] = create_slab_param_combo (i, this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> cell_win -> slab_hbox[i], this_proj -> modelgl -> cell_win -> slab_param[i], FALSE, FALSE, 5); } for (i=0; i<6; i++) { this_proj -> modelgl -> cell_win -> slab_box[i] = prepare_slab_box (i, this_proj); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_opts, this_proj -> modelgl -> cell_win -> slab_box[i], FALSE, FALSE, 5); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 40); GtkWidget * vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_("Slab information:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("- Opacity: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_hscale (0.0, 1.0, 0.01, this_proj -> modelgl -> cell_win -> slab_alpha, GTK_POS_LEFT, 2, 150, G_CALLBACK(set_slab_alpha), G_CALLBACK(scroll_set_slab_alpha), this_proj -> modelgl), FALSE, FALSE, 10); this_proj -> modelgl -> cell_win -> slab_info_box = create_vbox (BSEP); create_slab_info (this_proj); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, this_proj -> modelgl -> cell_win -> slab_info_box, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Select atom(s) in this slab !"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_this_slab), this_proj), FALSE, FALSE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("or"), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Cut this slab now !"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cut_this_slab), this_proj), FALSE, FALSE, 30); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/atom_object.c0000664000175000017500000012603015212624223020141 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_object.c * @short Functions to create atomic objects * @author Sébastien Le Roux */ /* * This file: 'atom_object.c' * * Contains: * - The functions to create atomic objects * * List of functions: int in_object_bond_list (atomic_object * object, int aid, int bid); int create_object_from_open_project (project * this_proj, int p); int * duplicate_z (int species, double * old_z); double get_object_dim (atomic_object * object); gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at); void correct_pos_and_get_dim (atomic_object * object, gboolean adjust); void reconstruct_bonds (project * this_proj, int ifcl, int * bcid); void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); void create_object_from_library (int p); void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion); void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion); void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove); void adjust_object_frag_coord (atomic_object * object); void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch); void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); atomic_object * duplicate_atomic_object (atomic_object * old_obj); atomic_object * create_object_from_species (project * this_proj, int sid, atom_search * remove); atomic_object * create_object_from_selection (project * this_proj); atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove); atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove); atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); tint ulam_coord (glwin * view); */ #include "atom_edit.h" extern atomic_object * cif_object; /*! \fn double get_object_dim (atomic_object * object) \brief get estimate of an object dimension \param object */ double get_object_dim (atomic_object * object) { double dmax = 0.0; vec3_t at, bt; vec3_t dist; int i, j; for (i=0; i atoms-1; i++) { at = vec3 (object -> at_list[i].x, object -> at_list[i].y, object -> at_list[i].z); for (j=i+1; j atoms; j++) { bt = vec3 (object -> at_list[j].x, object -> at_list[j].y, object -> at_list[j].z); dist = v3_sub(at, bt); dmax = max (dmax, v3_length(dist)); } } return dmax+1.0; } /*! \fn void correct_pos_and_get_dim (atomic_object * object, gboolean adjust) \brief get the barycenter of the atomic coordinates of an object \param object the target insert object \param adjust center object coordinates or not */ void correct_pos_and_get_dim (atomic_object * object, gboolean adjust) { int i; if (object -> baryc) g_free(object -> baryc); object -> baryc = allocdouble (3); for (i=0; i atoms; i++) { object -> baryc[0] += object -> at_list[i].x; object -> baryc[1] += object -> at_list[i].y; object -> baryc[2] += object -> at_list[i].z; } for (i=0; i<3; i++) object -> baryc[i] /= object -> atoms; if (adjust) { for (i=0; i atoms; i++) { object -> at_list[i].x -= object -> baryc[0]; object -> at_list[i].y -= object -> baryc[1]; object -> at_list[i].z -= object -> baryc[2]; } } object -> dim = get_object_dim (object); } /*! \fn gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at) \brief rebuild target atom id coordinates using PBC \param this_proj the target project \param step the MD step \param object the target insert object \param target the target atom id to correct \param aid the atom id \param at the target atom \param checked_at the list of already checked/corrected atom coordinates id */ gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at) { int i, j; distance dist; for (i=0; i numv; i++) { j = at -> vois[i]; dist = distance_3d (& this_proj -> cell, step, at, & object -> at_list[j]); if (dist.pbc && ! checked_at[j]) { object -> at_list[j].x = at -> x - dist.x; object -> at_list[j].y = at -> y - dist.y; object -> at_list[j].z = at -> z - dist.z; } } checked_at[aid] = TRUE; i = 0; for (j=0; j atoms; j++) if (checked_at[j]) i ++; if (i == target) return TRUE; for (i=0; i numv; i++) { j = at -> vois[i]; if (! checked_at[j]) { if (rebuild_atom_neighbors (this_proj, step, object, target, j, & object -> at_list[j], checked_at)) return TRUE; } } return FALSE; } /*! \fn void reconstruct_bonds (project * this_proj, int ifcl, int * bcid) \brief reconstruct the project bond(s)/clone(s) lists after reconstruction using PBC \param this_proj the target project \param ifcl number of clone bond(s) removed \param bcid the removed clone bond(s) atoms id */ void reconstruct_bonds (project * this_proj, int ifcl, int * bcid) { int i, j, k, l; int o_step = this_proj -> modelgl -> anim -> last -> img -> step; int ** old_bid = NULL; old_bid = allocdint (this_proj -> modelgl -> bonds[o_step][0], 2); for (i=0; i modelgl -> bonds[o_step][0]; i++) { for (j=0; j<2; j++) old_bid[i][j] = this_proj -> modelgl -> bondid[o_step][0][i][j]; } g_free (this_proj -> modelgl -> bondid[o_step][0]); this_proj -> modelgl -> bondid[o_step][0] = allocdint (this_proj -> modelgl -> bonds[o_step][0]+ ifcl, 2); for (i=0; i modelgl -> bonds[o_step][0]; i++) { for (j=0; j<2; j++) this_proj -> modelgl -> bondid[o_step][0][i][j] = old_bid[i][j]; } if (old_bid) g_free (old_bid); old_bid = NULL; for (i=0; i modelgl -> bonds[o_step][0]; for (l=0; l<2; l++) { this_proj -> modelgl -> bondid[o_step][0][k][l] = this_proj -> modelgl -> bondid[o_step][1][j][l]; } this_proj -> modelgl -> bonds[o_step][0] ++; this_proj -> modelgl -> allbonds[0] ++; this_proj -> modelgl -> bondid[o_step][1][j][0] = -1; } vec3_t * old_clo = NULL; i = this_proj -> modelgl -> bonds[o_step][1] - ifcl; l = 0; if (i) { old_clo = g_malloc0(i*sizeof*old_clo); old_bid = allocdint (i, 2); for (i=0; i modelgl -> bonds[o_step][1]; i++) { if (this_proj -> modelgl -> bondid[o_step][1][i][0] > -1) { for (k=0; k<2; k++) old_bid[l][k] = this_proj -> modelgl -> bondid[o_step][1][i][k]; old_clo[l].x = this_proj -> modelgl -> clones[o_step][i].x; old_clo[l].y = this_proj -> modelgl -> clones[o_step][i].y; old_clo[l].z = this_proj -> modelgl -> clones[o_step][i].z; l ++; } } } g_free (this_proj -> modelgl -> bondid[o_step][1]); this_proj -> modelgl -> bondid[o_step][1] = NULL; g_free (this_proj -> modelgl -> clones[o_step]); this_proj -> modelgl -> clones[o_step] = NULL; this_proj -> modelgl -> bonds[o_step][1] = this_proj -> modelgl -> allbonds[1] = l; if (l) { this_proj -> modelgl -> bondid[o_step][1] = allocdint (l, 2); this_proj -> modelgl -> clones[o_step] = g_malloc0(l*sizeof*this_proj -> modelgl -> clones[o_step]); for (i=0; i modelgl -> bondid[o_step][1][i][j] = old_bid[i][j]; this_proj -> modelgl -> clones[o_step][i].x = old_clo[i].x; this_proj -> modelgl -> clones[o_step][i].y = old_clo[i].y; this_proj -> modelgl -> clones[o_step][i].z = old_clo[i].z; } if (old_clo) g_free (old_clo); old_clo = NULL; if (old_bid) g_free (old_bid); old_bid = NULL; } } /*! \fn void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) \brief reconstruct object atomic coordinates using PBC \param this_object the target project \param this_proj the target insert object \param upcoord reconstruction of atomic coordinates using PBC ? */ void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) { int h, i, j, k; if (this_proj -> coord -> totcoord[2]) { int * tmp_multi = allocint (this_proj -> coord -> totcoord[2]); for (i=0; i atoms; i++) { j = this_object -> at_list[i].coord[2]; tmp_multi[j] = 1; } gboolean * checked_at = allocbool (this_object -> atoms); h = (this_proj -> cell.npt) ? this_proj -> modelgl -> anim -> last -> img -> step : 0; for (i=0; i coord -> totcoord[2]; i++) { if (tmp_multi[i]) { k = 0; for (j=0; j atoms; j++) { checked_at[j] = FALSE; if (this_object -> at_list[j].coord[2] == i) { k ++; } } for (j=0; j atoms; j++) { if (this_object -> at_list[j].coord[2] == i) { rebuild_atom_neighbors (this_proj, h, this_object, k, j, & this_object -> at_list[j], checked_at); } } } } g_free (checked_at); } correct_pos_and_get_dim (this_object, TRUE); if (upcoord) { reconstruct_bonds (this_proj, this_object -> ifcl, this_object -> bcid); for (i=0; i atoms; i++) { j = this_object -> at_list[i].id; this_proj -> atoms[0][j].x = this_object -> at_list[i].x + this_object -> baryc[0]; this_proj -> atoms[0][j].y = this_object -> at_list[i].y + this_object -> baryc[1]; this_proj -> atoms[0][j].z = this_object -> at_list[i].z + this_object -> baryc[2]; this_proj -> atoms[0][j].cloned = FALSE; } for (i=0; i<3; i++) this_proj -> modelgl -> saved_coord[i] = save_coordinates (this_proj, i); } } /*! \fn void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) \brief correct the atomic coordinates for 'this_object' \param this_proj the target project \param this_object the target insert object \param upcoord reconstruction of atomic coordinates using PBC ? */ void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) { if (this_object -> ifcl) { if (upcoord) { reconstruct_coordinates_for_object (this_proj, this_object, upcoord); this_object -> ifcl = 0; g_free (this_object -> bcid); this_object -> bcid = NULL; } else { correct_pos_and_get_dim (this_object, FALSE); } } else { correct_pos_and_get_dim (this_object, TRUE); } } /*! \fn tint ulam_coord (glwin * view) \brief shift insertion position for object not to have overlapping objects for multiple/repeated insertions \param view the target glwin */ tint ulam_coord (glwin * view) { tint pos; int m; pos.a = pos.b = pos.c = 0; if (view -> builder_win) return pos; int p = view -> nth_copy; if (p > 0) { pos.c = p/9; m = p - pos.c*9; pos.b = m/3; pos.a = p - pos.c*9 - pos.b*3; } return pos; } int being_copied; atomic_object * lib_object; /*! \fn atomic_object * duplicate_atomic_object (atomic_object * old_obj) \brief duplicate an insert object \param old_obj the insert object to duplicate */ atomic_object * duplicate_atomic_object (atomic_object * old_obj) { atomic_object * new_obj = g_malloc0(sizeof*new_obj); new_obj -> origin = old_obj -> origin; new_obj -> type = old_obj -> type; new_obj -> dim = old_obj -> dim; new_obj -> name = g_strdup_printf ("%s", old_obj -> name); new_obj -> atoms = old_obj -> atoms; new_obj -> at_list = g_malloc0(new_obj -> atoms*sizeof*new_obj -> at_list); int i; for (i=0; i atoms; i++) { new_obj -> at_list[i] = * duplicate_atom (& old_obj -> at_list[i]); } new_obj -> old_z = duplicate_int (old_obj -> species, old_obj -> old_z); new_obj -> coord = duplicate_coord_info (old_obj -> coord); new_obj -> baryc = duplicate_double (3, old_obj -> baryc); new_obj -> occ = old_obj -> occ; new_obj -> species = old_obj -> species; if (old_obj -> bonds) { new_obj -> ibonds = g_malloc0(old_obj -> bonds*sizeof*new_obj -> ibonds); int i; for (i=0; i bonds; i++) { new_obj -> ibonds[i] = duplicate_int (2, old_obj -> ibonds[i]); } } new_obj -> bonds = old_obj -> bonds; return new_obj; } /*! \fn void create_object_from_library (int p) \brief create object using the molecular library \param p the project id of the library molecule in the workspace */ void create_object_from_library (int p) { int i, j; lib_object = g_malloc0(sizeof*lib_object); project * other_proj = get_project_by_id (p); i = other_proj -> natomes; lib_object -> type = FROM_LIBRARY; lib_object -> origin = p; lib_object -> name = g_strdup_printf ("%s", other_proj -> name); lib_object -> coord = duplicate_coord_info (other_proj -> coord); lib_object -> atoms = i; lib_object -> at_list = g_malloc0(lib_object -> atoms*sizeof*lib_object -> at_list); lib_object -> occ = 1.0; lib_object -> species = other_proj -> nspec; lib_object -> old_z = allocint (other_proj -> nspec); for (j=0; j nspec; j++) lib_object -> old_z[j] = (int) other_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (j=0; j at_list[j] = * duplicate_atom (& other_proj -> atoms[0][j]); } correct_pos_and_get_dim (lib_object, TRUE); if (other_proj -> modelgl -> bonds[0][0]) { i = other_proj -> modelgl -> bonds[0][0]; lib_object -> ibonds = allocdint (i, 2); for (j=0; j ibonds[j][0] = other_proj -> modelgl -> bondid[0][0][j][0]; lib_object -> ibonds[j][1] = other_proj -> modelgl -> bondid[0][0][j][1]; } lib_object -> bonds = i; } // Always one frag from library lib_object -> coord -> totcoord[2] = 1; } /*! \fn int in_object_bond_list (atomic_object * object, int aid, int bid) \brief is there a bond between atom aid and atom bid ? \param object the target insert object \param aid 1st atom id \param bid 2nd atom id */ int in_object_bond_list (atomic_object * object, int aid, int bid) { int i; for (i=0; i bonds; i++) { if (object -> ibonds[i][0] == aid && object -> ibonds[i][1] == bid) return 1; if (object -> ibonds[i][1] == aid && object -> ibonds[i][0] == bid) return 1; } return 0; } /*! \fn void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion) \brief clean the object neigbours list \param this_proj the target project \param object the target insert object \param new_id list of atom's old id in the project 'this_proj' \param movtion reconstruction of atomic coordinates using PBC ? */ void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion) { int i, j, k, l; int * tmpv; for (i=0; i atoms; i++) { if (object -> at_list[i].numv) { tmpv = duplicate_int (object -> at_list[i].numv, object -> at_list[i].vois); g_free (object -> at_list[i].vois); object -> at_list[i].vois = NULL; j = 0; for (k=0; k at_list[i].numv; k++) { l = tmpv[k]; if (new_id[l]) { j += (! movtion) ? in_object_bond_list(object, i, new_id[l]-1) : 1; } } if (j) { object -> at_list[i].vois = allocint (j); j = 0; for (k=0; k at_list[i].numv; k++) { l = tmpv[k]; if (new_id[l]) { if (! movtion || in_object_bond_list(object, i, new_id[l]-1)) { object -> at_list[i].vois[j] = new_id[l]-1; j ++; } } } } object -> at_list[i].numv = j; g_free (tmpv); } } } /*! \fn void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion) \brief create the object bond list, and adjust the bond's atom id \param proj the target project \param o_step the MD step \param object the target insert object \param new_id list of atom's old id in the project 'this_proj' \param movtion reconstruction of atomic coordinates using PBC ? */ void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion) { int h, i, j, k, l, m; gboolean doit; int ** tmpibonds = allocdint (proj -> modelgl -> bonds[o_step][0]+proj -> modelgl -> bonds[o_step][1], 2); if (proj -> modelgl -> bonds[o_step][1]) { h = (movtion) ? 2 : 1; } else { h = 1; } i = 0; if (new_id) object -> bcid = allocint (proj -> modelgl -> bonds[o_step][1]); for (j=0; j modelgl -> bonds[o_step][j]; k++) { l = proj -> modelgl -> bondid[o_step][j][k][0]; m = proj -> modelgl -> bondid[o_step][j][k][1]; doit = FALSE; if (new_id) { if (new_id[l] && new_id[m]) doit = TRUE; } else { doit = TRUE; } if (doit) { if (new_id) { tmpibonds[i][0] = new_id[l] - 1; tmpibonds[i][1] = new_id[m] - 1; } else { tmpibonds[i][0] = l; tmpibonds[i][1] = m; } i ++; if (j && new_id) { object -> bcid[object -> ifcl] = k; object -> ifcl ++; } } } } if (i) { object -> ibonds = allocdint (i, 2); for (j=0; j ibonds[j][0] = tmpibonds[j][0]; object -> ibonds[j][1] = tmpibonds[j][1]; } } g_free (tmpibonds); object -> bonds = i; if (new_id) clean_object_vois (proj, object, new_id, movtion); } /*! \fn void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove) \brief add atom list to insert object \param this_object the target insert object \param this_proj the target project \param o_step the MD step \param numa number of atom(s) \param old_id list of atom's old id in the project 'this_proj' \param alloc_new_id check_bonding check bonding ? (partial copy or not) \param remove remove search, if any */ void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean check_bonding, atom_search * remove) { int i, j; this_object -> atoms = numa; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); int * new_id = allocint (this_proj -> natomes); for (i=0; i atoms; i++) { j = old_id[i]-1; new_id[j] = i+1; if (remove) remove -> todo[j] = 1; this_object -> at_list[i] = * duplicate_atom (& this_proj -> atoms[o_step][j]); if (i) { this_object -> at_list[i].prev = & this_object -> at_list[i-1]; this_object -> at_list[i-1].next = & this_object -> at_list[i]; } } gboolean movtion = ((object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0])); if (check_bonding) { clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); } correct_coordinates_for_object (this_proj, this_object, movtion); if (check_bonding) { check_coord_modification (this_proj, NULL, & this_object -> at_list[0], this_object, FALSE, FALSE); } g_free (old_id); g_free (new_id); } /*! \fn int * duplicate_z (int species, double * old_z) \brief duplicate z table when creating an object, integer is preferred to avoid comparison errors during action \param species the number of chemical species \param old_z the old z table to duplicate * */ int * duplicate_z (int species, double * old_z) { int i; int * new_z = allocint (species); for (i=0; i modelgl -> anim -> last -> img -> step; this_object -> name = g_strdup_printf ("%s", this_proj -> chemistry -> label[sid]); i = this_proj -> chemistry -> nsps[sid]; this_object -> type = FROM_SPEC; this_object -> origin = this_proj -> id; this_object -> atoms = i; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; i = 0; for (j=0; j natomes; j++) { if (this_proj -> atoms[o_step][j].sp == sid) { if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; new_id[i] = j+1; i ++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, remove); return this_object; } /*! \fn atomic_object * create_object_from_selection (project * this_proj) \brief create object from atom selection \param this_proj the target project */ atomic_object * create_object_from_selection (project * this_proj) { int i, j; atomic_object * this_object = g_malloc0(sizeof*this_object); int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> name = g_strdup_printf (_("From selection")); i = 0; for (j=0; jnatomes; j++) { if (pasted_todo[j]) i++; } this_object -> type = FROM_DATA; this_object -> origin = this_proj -> id; this_object -> atoms = i; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); i = 0; int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; for (j=0; j natomes; j++) { if (pasted_todo[j]) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; i ++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, NULL); if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } return this_object; } /*! \fn atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove) \brief create object from an atom and its nearest neighbors \param this_proj the target project \param coord 0 = total coordination, 1 = partial coordination \param aid the atom id \param remove remove search, if any */ atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k; atomic_object * this_object = g_malloc0(sizeof*this_object); gchar * str; int o_step = this_proj -> modelgl -> anim -> last -> img -> step; i = this_proj -> atoms[o_step][aid].numv; k = this_proj -> atoms[o_step][aid].coord[coord]; j = this_proj -> atoms[o_step][aid].sp; switch (coord) { case 0: if (i > 0) { str = g_strdup_printf (_("%d-fold"), i); } else { str = g_strdup_printf (_("Isolated")); } break; case 1: str = g_strdup_printf ("%s", env_name(this_proj, k, j, 1, NULL)); break; } this_object -> name = g_strdup_printf ("%s - %s%d", str, this_proj -> chemistry -> label[j], aid+1); g_free (str); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> atoms = i+1; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_int (this_proj -> nspec, (int *)this_proj -> chemistry -> chem_prop[CHEM_Z]); this_object -> at_list[0] = * duplicate_atom (& this_proj -> atoms[o_step][aid]); if (remove) remove_search -> todo[aid] = 1; gboolean movtion = (object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0]); if (this_proj -> atoms[o_step][aid].numv) { int * new_id = NULL; new_id = allocint (this_proj -> natomes); new_id[aid] = 1; for (i=0; i atoms[o_step][aid].numv; i++) { j = this_proj -> atoms[o_step][aid].vois[i]; if (remove) remove_search -> todo[j] = 1; new_id[j] = i+2; this_object -> at_list[i+1] = * duplicate_atom (& this_proj -> atoms[o_step][j]); } clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); if (new_id) { g_free (new_id); new_id = NULL; } correct_coordinates_for_object (this_proj, this_object, movtion); } return this_object; } /*! \fn atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove) \brief create object from all the atom(s) that have the same exact coordination than the target atom \param this_proj the target project \param coord 0 = total coordination, 1 = partial coordination \param aid target atom id \param remove remove search, if any */ atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k, l, m, n; atomic_object * this_object = g_malloc0(sizeof*this_object); int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; int * new_id = NULL; new_id = allocint (this_proj -> natomes); gchar * str; gboolean check_bonding = FALSE; gboolean bonding = FALSE; switch (coord) { case 0: for (k=0; k natomes; k++) { if (this_proj -> atoms[o_step][k].coord[0] == aid) { i = this_proj -> atoms[o_step][k].numv; break; } } if (i) { bonding = TRUE; str = g_strdup_printf (_("%d-fold"), i); } else { str = g_strdup_printf (_("Isolated")); } j = 0; for (k=0; k natomes; k++) { if (this_proj -> atoms[o_step][k].numv == aid) { new_id[j] = k+1; j ++; } } break; case 1: j = 0; for (k=0; k natomes; k++) { l = this_proj -> atoms[o_step][k].sp; m = this_proj -> atoms[o_step][k].coord[coord-1]; for (n=0; n coord -> ntg[1][n]; if (m == aid) { new_id[j] = k+1; if (this_proj -> atoms[o_step][k].numv) bonding = TRUE; j ++; } } str = g_strdup_printf ("%s", env_name(this_proj, l, aid, 1, NULL)); break; } this_object -> name = g_strdup_printf (_("All %s - atom(s)"), str); g_free (str); check_bonding = (j != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, j, new_id, check_bonding, remove); return this_object; } /*! \fn atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove) \brief create object from a fragment or a molecule \param this_proj the target project \param coord 2 = fragment, 3 = molecule \param geo fragment or molecule id \param remove remove search, if any */ atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove) { int i, j; atomic_object * this_object = g_malloc0(sizeof*this_object); if (coord == 2) { this_object -> name = g_strdup_printf (_("Fragment N°%d"), geo+1); } else { this_object -> name = g_strdup_printf (_("Molecule N°%d"), geo+1); } int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; i = 0; for (j=0; jnatomes; j++) { if (this_proj -> atoms[o_step][j].coord[coord] == geo) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; i++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, remove); return this_object; } /*! \fn void adjust_object_frag_coord (atomic_object * object) \brief adjust object number of fragment(s) \param object the target insert object */ void adjust_object_frag_coord (atomic_object * object) { int i, j, k; int * corf = allocint (object -> coord -> totcoord[2]); int * rorf = allocint (object -> coord -> totcoord[2]); for (i=0; i atoms; i++) { j = object -> at_list[i].coord[2]; rorf[j] ++; } j = k = 0; for (i=0; i coord -> totcoord[2]; i++) { corf[i] = k; if (rorf[i]) { j++; } else { k++; } } object -> coord -> totcoord[2] = j; for (i=0; i atoms; i++) { j = corf[object -> at_list[i].coord[2]]; object -> at_list[i].coord[2] -= j; object -> at_list[i].id = i; } remove_bonds_from_project (NULL, object, NULL, & object -> at_list[0], FALSE, FALSE); } /*! \fn int create_object_from_open_project (project * this_proj, int p) \brief create object from atom(s) of a project opened in the workspace \param this_proj the target project \param p the project id of the project that contains the atom(s) to copy */ int create_object_from_open_project (project * this_proj, int p) { int i, j; lib_object = g_malloc0(sizeof*lib_object); project * other_proj; other_proj = get_project_by_id (p); int o_step = other_proj -> modelgl -> anim -> last -> img -> step; switch (this_proj -> modelgl -> other_status) { case 0: i = other_proj -> natomes - other_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; lib_object -> name = g_strdup_printf (_("All non-selected atom(s) from: %s"), get_project_by_id(p) -> name); break; case 1: i = other_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; lib_object -> name = g_strdup_printf (_("All selected atom(s) from: %s"), get_project_by_id(p) -> name); break; case 2: i = other_proj -> natomes; lib_object -> name = g_strdup_printf (_("All atom(s) from: %s"), get_project_by_id(p) -> name); break; } lib_object -> type = FROM_PROJECT; lib_object -> origin = p; lib_object -> atoms = i; lib_object -> at_list = g_malloc0(lib_object -> atoms*sizeof*lib_object -> at_list); lib_object -> occ = 1.0; lib_object -> coord = duplicate_coord_info (other_proj -> coord); lib_object -> species = other_proj -> nspec; lib_object -> old_z = duplicate_z (other_proj -> nspec, other_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; gboolean check_bonding = FALSE; new_id = allocint (other_proj -> natomes); if (this_proj -> modelgl -> other_status == 2) { for (j=0; j at_list[j] = * duplicate_atom (& other_proj -> atoms[o_step][j]); new_id[j] = j+1; if (j) { lib_object -> at_list[j].prev = & lib_object -> at_list[j-1]; lib_object -> at_list[j-1].next = & lib_object -> at_list[j]; } } } else { i = 0; for (j=0; j natomes; j++) { if (other_proj -> atoms[o_step][j].pick[0] == this_proj -> modelgl -> other_status) { lib_object -> at_list[i] = * duplicate_atom (& other_proj -> atoms[o_step][j]); new_id[j] = i+1; if (i) { lib_object -> at_list[i].prev = & lib_object -> at_list[i-1]; lib_object -> at_list[i-1].next = & lib_object -> at_list[i]; } i ++; } } } check_bonding = (i != other_proj -> natomes && (other_proj -> modelgl -> bonds[o_step][0] || other_proj -> modelgl -> bonds[o_step][1])) ? TRUE : FALSE; clean_object_bonds (other_proj, o_step, lib_object, new_id, check_bonding); if (i < other_proj -> natomes) { for (j=0; j atoms; j++) lib_object -> at_list[j].id = new_id[lib_object -> at_list[j].id]-1; if (check_bonding) check_coord_modification (other_proj, NULL, & lib_object -> at_list[0], lib_object, FALSE, FALSE); } correct_coordinates_for_object (other_proj, lib_object, TRUE); if (i < other_proj -> natomes && check_bonding) adjust_object_frag_coord (lib_object); return FROM_PROJECT; } /*! \fn void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch) \brief clean object data \param orig - (fragmol id/species id +1), -1, or, orgin atom id \param act action in enum 'actions' \param this_proj the target project \param asearch the target atom search */ void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch) { atomic_object * tmp_object = NULL; atomic_object * object; switch (asearch -> action) { case REPLACE: object = (this_proj -> modelgl) ? this_proj -> modelgl -> atom_win -> to_be_inserted[act] : cif_object; break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act]; break; } while (object) { if ((object -> origin > -1 || object -> origin < -2) && object -> origin == orig) { if (object -> ibonds) g_free (object -> ibonds); if (object -> baryc) g_free (object -> baryc); if (object -> at_list) g_free (object -> at_list); if (object -> coord) g_free (object -> coord); object -> atoms = object -> bonds = 0; asearch -> in_selection --; if (object -> prev != NULL) { if (object -> next != NULL) { object -> next -> prev = object -> prev; object -> prev -> next = object -> next; tmp_object = object -> next; g_free (object); object = tmp_object; } else { object = object -> prev; g_free (object -> next); object -> next = NULL; break; } } else { if (object -> next != NULL) { object = object -> next; if (this_proj -> modelgl) { g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[act]); } else { g_free (cif_object); } object -> prev = NULL; switch (asearch -> action) { case REPLACE: if (this_proj -> modelgl) { this_proj -> modelgl -> atom_win -> to_be_inserted[act] = object; } else { cif_object = object; } break; default: this_proj -> modelgl -> atom_win -> to_be_moved[act] = object; break; } } else { g_free (object); switch (asearch -> action) { case REPLACE: if (this_proj -> modelgl) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[act] = NULL; } else { object = cif_object = NULL; } break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act] = NULL; break; } } } } else { object = object -> next; } } } /*! \fn void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible) \brief to insert object in project \param stat in enum object_types \param orig - (fragmol id/species id +1), -1, or, orgin atom id \param this_proj the target project \param asearch the target atom search \param visible is the model edition window visible ? */ void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible) { int i, j; atomic_object * tmp_object = NULL; atomic_object * object; int act; if (asearch -> pointer[0].c == 3) { act = 0; } else if (asearch -> pointer[0].c == 5) { act = 1; } else { act = asearch -> pointer[0].c - 5; } if (! this_proj -> modelgl || ((! act || act == 3) && this_proj -> modelgl -> atom_win -> to_be_inserted[act])) { clean_this_object (orig, act, this_proj, asearch); } if (stat == FROM_DATA) lib_object = duplicate_atomic_object (copied_object); tint ulam; tmp_object = NULL; vec3_t coor_ins = vec3 (0.0,0.0,0.0); if (! visible) { if (act > 0) { if (this_proj -> modelgl) { if (this_proj -> modelgl -> anim && ! this_proj -> modelgl -> builder_win) { this_proj -> modelgl -> insert_coords = get_insertion_coordinates (this_proj -> modelgl); coor_ins = this_proj -> modelgl -> insert_coords; } } } else if (! act) { if (orig < -2 && asearch -> object && ! asearch -> mode) { int filter = get_asearch_filter (asearch); if (! filter) { tmp_object = create_object_from_species (this_proj, -orig-3, NULL); } else if (filter < 3) { tmp_object = create_object_from_atom_coordination (this_proj, filter-1, -orig-3, NULL); } else { tmp_object = create_object_from_frag_mol (this_proj, filter-1, -orig-3, NULL); } coor_ins = vec3 (tmp_object -> baryc[0], tmp_object -> baryc[1], tmp_object -> baryc[2]); if (tmp_object) g_free (tmp_object); } else if (orig > -1) { coor_ins = vec3 (this_proj -> atoms[0][orig].x, this_proj -> atoms[0][orig].y, this_proj -> atoms[0][orig].z); } } } if (stat > 0) { lib_object = g_malloc0(sizeof*lib_object); lib_object -> type = stat; lib_object -> old_z = allocint (1); lib_object -> old_z[0] = (stat < 119) ? stat : 0.0; lib_object -> at_list = g_malloc0(sizeof*lib_object -> at_list); lib_object -> coord = g_malloc0(sizeof*lib_object -> coord); lib_object -> coord -> species = 1; for (j=0; j<2; j++) { lib_object -> coord -> totcoord[j] = 1; lib_object -> coord -> ntg[j] = allocint (1); lib_object -> coord -> ntg[j][0] = 1; lib_object -> coord -> geolist[j] = allocdint (1, 1); if (j) lib_object -> coord -> partial_geo = alloctint (1, 1, 1); } lib_object -> coord -> totcoord[j] = 1; lib_object -> baryc = allocdouble (3); lib_object -> atoms = 1; lib_object -> occ = 1.0; lib_object -> species = 1; lib_object -> dim = get_object_dim (lib_object); if (stat > 119) { lib_object -> name = g_strdup_printf (_("Empty position")); } else { lib_object -> name = g_strdup_printf (_("%s atom"), periodic_table_info[stat].lab); } } if (this_proj -> modelgl) { ulam = ulam_coord (this_proj -> modelgl); if (this_proj -> modelgl -> atom_win -> to_be_inserted[act] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[act] = duplicate_atomic_object (lib_object); object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; } else { object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; while (object -> next) object = object -> next; object -> next = duplicate_atomic_object (lib_object); object -> next -> prev = object; object = object -> next; } } else { ulam.a = ulam.b = ulam.c = 0.0; if (cif_object == NULL) { cif_object = duplicate_atomic_object (lib_object); object = cif_object; } else { object = cif_object; while (object -> next) object = object -> next; object -> next = duplicate_atomic_object (lib_object); object -> next -> prev = object; object = object -> next; } } if (act) { object -> id = (object -> prev) ? object -> prev -> id + 1 : 0; } else { object -> id = (orig > -1) ? orig : (orig < -2) ? abs(orig) - 3 : abs(orig) - 1; } object -> origin = orig; for (i=0; i atoms; i++) { object -> at_list[i].x += coor_ins.x + object -> dim*ulam.a; object -> at_list[i].y += coor_ins.y + object -> dim*ulam.b; object -> at_list[i].z += coor_ins.z + object -> dim*ulam.c; } asearch -> in_selection ++; if (visible) { int * atid; if (act == 1 || act == 2) { if (object -> id > 0) { atid = duplicate_int (object -> id, asearch -> todo); g_free (asearch -> todo); } allocate_todo (asearch, object -> id+1); for (i=0; i id; i++) { asearch -> todo[i] = atid[i]; } asearch -> todo[i] = 0; update_search_tree (asearch); } } } atomes_1.3.1/src/opengl/edit/atom_coord.c0000664000175000017500000006061615212624223020010 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_coord.c * @short Functions to correct the coordination menus and the corresponding data pointers after edition * @author Sébastien Le Roux */ /* * This file: 'atom_coord.c' * * Contains: * - The functions to correct the coordination menus and the corresponding data pointers after edition * * List of functions: int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc); void print_coord_info (project * this_proj, coord_info * coord); void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]); void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol); void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag); coord_info * duplicate_coord_info (coord_info * old_coord); */ #include "atom_edit.h" /*! \fn int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc) \brief Look for a type of coordination sphere in a model \param this_proj the target project \param spec the number of chemical species \param gid the coordination type \param cid the coordination id \param minc min value for coordination id \param maxc max value for coordination id */ int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc) { int i, j, k, l; l = 0; for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[gid]; if (j == spec && (k > maxc && k < minc)) return -1; if (j == spec && k == cid) { l ++; } } return l; } /*! \fn void print_coord_info (project * this_proj, coord_info * coord) \brief print coordination info \param this_proj the target project \param coord the target coordination info */ void print_coord_info (project * this_proj, coord_info * coord) { int * min_bs, * max_bs; int i, j, k, l, m; gchar * str; int test; if (coord -> species) { min_bs = allocint (coord -> species); max_bs = allocint (coord -> species); g_debug (" "); g_debug ("coord -> species = %d", coord -> species); g_debug (" "); for (i=0; i<4; i++) { g_debug (" --- start geo[%d] ---", i); g_debug ("geo i = %d, totcoord[%d] = %d", i, i, coord -> totcoord[i]); if ((i < 2 || i > 3) && coord -> totcoord[i]) { j = (i < 2) ? coord -> species : 1; g_debug (" spec i = %d, jmax= %d", i, j); g_debug (" "); for (k=0; k partial_geo[k][0][0]; for (m=0; m species; m++) { min_bs[k] = min (min_bs[k], coord -> partial_geo[k][0][m]); max_bs[k] = max (max_bs[k], coord -> partial_geo[k][0][m]); } for (l=1; l ntg[i][k]; l++) { for (m=0; m species; m++) { min_bs[k] = min (min_bs[k], coord -> partial_geo[k][l][m]); max_bs[k] = max (max_bs[k], coord -> partial_geo[k][l][m]); } } } for (k=0; k ntg[%d][%d] = %d", i, k, i, k, coord -> ntg[i][k]); test = (this_proj) ? test_this_coord (this_proj, k, i, 0, min_bs[k], max_bs[k]) : 0; str = g_strdup_printf (" l = %d, coord -> geolist[%d][%d][%d]= %d, num[at,%d]= %d", 0, i, k, 0, coord -> geolist[i][k][0], 0, test); if (coord -> ntg[i][k] > 1) { for (l=1; l ntg[i][k]; l++) { test = (this_proj) ? test_this_coord (this_proj, k, i, l, min_bs[k], max_bs[k]) : 0; str = g_strdup_printf ("%s\n l = %d, coord -> geolist[%d][%d][%d]= %d, num[at,%d]= %d", str, l, i, k, l, coord -> geolist[i][k][l], l, test); } } g_debug ("%s", str); g_free (str); } if (i == 1) { g_debug (" "); for (k=0; k partial_geo[%d][%d][%d]= %d", k, k, 0, 0, coord -> partial_geo[k][0][0]); for (l=1; l partial_geo[%d][%d][%d]= %d", str, k, k, 0, l, coord -> partial_geo[k][0][l]); } if (coord -> ntg[i][k] > 1) { for (l=1; l ntg[i][k]; l++) { str = g_strdup_printf ("%s\n\n k = %d, coord -> partial_geo[%d][%d][%d]= %d", str, k, k, l, 0, coord -> partial_geo[k][l][0]); for (m=1; m partial_geo[%d][%d][%d]= %d", str, k, k, l, m, coord -> partial_geo[k][l][m]); } } } g_debug ("%s", str); g_free (str); } } g_debug (" "); } g_debug (" --- end geo[%d] ---", i); g_debug (" "); } g_free (min_bs); g_free (max_bs); } else { g_debug (" "); g_debug ("Coord is empty no species !"); g_debug (" "); } } /*! \fn coord_info * duplicate_coord_info (coord_info * old_coord) \brief duplicate coordination information data structure \param old_coord the coordination info to duplicate */ coord_info * duplicate_coord_info (coord_info * old_coord) { coord_info * new_coord = g_malloc0(sizeof*new_coord); int i, j, k, l; if (! old_coord -> species) return new_coord; new_coord -> species = old_coord -> species; new_coord -> cmax = old_coord -> cmax; new_coord -> cmin = old_coord -> cmin; for (i=0; i<10; i++) { new_coord -> totcoord[i] = old_coord -> totcoord[i]; if ((i < 2 || i > 3) && old_coord -> totcoord[i]) { j = (i < 2) ? new_coord -> species : 1; new_coord -> ntg[i] = duplicate_int (j, old_coord -> ntg[i]); new_coord -> geolist[i] = g_malloc0(j*sizeof*new_coord -> geolist[i]); if (i == 1) new_coord -> partial_geo = g_malloc0(j*sizeof*new_coord -> partial_geo); for (k=0; k geolist[i][k] = duplicate_int (new_coord -> ntg[i][k], old_coord -> geolist[i][k]); if (i == 1) { new_coord -> partial_geo[k] = g_malloc0(new_coord -> ntg[i][k]*sizeof*new_coord -> partial_geo[k]); for (l=0; l ntg[i][k]; l++) { new_coord -> partial_geo[k][l] = duplicate_int (new_coord -> species, old_coord -> partial_geo[k][l]); } } } } } return new_coord; } /*! \fn void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]) \brief clean coordination data and atomic coordination id data \param this_proj the target project \param edit \param new_spec the number of chemical species \param rem the number of chemical species to remove \param adds the number of new chemical species \param spid the number of atom(s) by chemical species \param tmpgeo the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' \param showcoord the coordination show status \param showpoly the polyhedra show status */ void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]) { int i, j, k, l, m, n, o, p, q, r, s; int * tntg; coord_info * old_coord = duplicate_coord_info (edit -> coord); g_free (edit -> coord); edit -> coord = g_malloc0(sizeof*edit -> coord); coord_info * tmp_coord = edit -> coord; this_proj -> coord -> cmin = 20; this_proj -> coord -> cmax = 0; for (i=0; i<2; i++) { tmp_coord -> totcoord[i] = 0; tmp_coord -> geolist[i] = g_malloc0(new_spec*sizeof*tmp_coord -> geolist[i]); tmp_coord -> ntg[i] = allocint (new_spec); if (i) tmp_coord -> partial_geo = g_malloc0(new_spec*sizeof*tmp_coord -> partial_geo); showcoord[i] = allocbool(old_coord -> totcoord[i]); showpoly[i] = allocbool(old_coord -> totcoord[i]); // g_debug ("i= %d, allocating showcoord/poly of %d", i, old_coord -> totcoord[i]); tmp_coord -> totcoord[i] = 0; j = s = 0; // g_debug ("i= %d, new_spec= %d, rem= %d", i, new_spec, rem); for (k=0; k ntg[i][k]); tntg = allocint (old_coord -> ntg[i][k]); // if (i == 0) g_debug (" checking geom:: i= %d, SP= %d, ntg[%d][%d]= %d", i, k, i, k, old_coord -> ntg[i][k]); for (m=0; m ntg[i][k]; m++) { // if (i == 0) g_debug (" :: m = %d, tmpgeo[%d][%d][%d]= %d", m, i, k, m, tmpgeo[i][k][m]); if (tmpgeo[i][k][m]) { p = 1; if (i) { //g_debug ("checking partial, m= %d, l= %d", m, l); if (l) { p = 0; for (o=0; o partial_geo[k][m][q] != old_coord -> partial_geo[k][o][q]) { p = 1; break; } } if (! p) break; } } } else { for (o=0; o geolist[i][k][m] == old_coord -> geolist[i][k][o]) { // g_debug (" WAS HERE:: k= %d, m= %d, o= %d, geolist = %d", k, m, o, old_coord -> geolist[i][k][m]); p = 0; break; } } } if (p) { // g_debug (" i= %d, tntg[m]= 1, m= %d", i, m); tntg[m] = 1; o = l; l ++; } // if (i == 0) g_debug (" geo= %d, old_sp= %d, new_sp= %d, old_geo= %d, new_geo= %d", i, k, s, m, o); for (p=0; p natomes; p++) { if (this_proj -> atoms[0][p].sp == s) { if (this_proj -> atoms[0][p].coord[i] == m) { this_proj -> atoms[0][p].coord[i] = o; } } } } } if (l) { tmp_coord -> geolist[i][j] = allocint (l); if (i) { // g_debug ("allocating partial[%d] of %d and %d", j, l, new_spec); tmp_coord -> partial_geo[j] = allocdint (l, new_spec); } // if (! i) g_debug (" ntg[0][%d]= %d", j, l); tmp_coord -> ntg[i][j] = l; tmp_coord -> totcoord[i] += l; p = (k < new_spec+rem-adds) ? k : new_spec+rem-adds; q = 0; for (r=0; r coord -> ntg[i][r]; p = 0; for (r=0; r ntg[i][r]; m = 0; for (n=0; n ntg[i][k]; n++) { // g_debug ("n= %d, tntg[%d]= %d", n, n, tntg[n]); if (tntg[n]) { tmp_coord -> geolist[i][j][m] = old_coord -> geolist[i][k][n]; this_proj -> coord -> cmax = max (tmp_coord -> geolist[i][j][m], this_proj -> coord -> cmax); this_proj -> coord -> cmin = min (tmp_coord -> geolist[i][j][m], this_proj -> coord -> cmin); if (k < new_spec-adds+rem) { if (n < this_proj -> coord -> ntg[i][k]) { //g_debug ("p= %d, m= %d, p+m= %d, q= %d, n= %d, q+n= %d", p, m, p+m, q, n, q+n); showcoord[i][p+m] = this_proj -> modelgl -> anim -> last -> img -> show_coord[i][q+n]; showpoly[i][p+m] = this_proj -> modelgl -> anim -> last -> img -> show_poly[i][q+n]; } else { showcoord[i][p+m] = TRUE; showpoly[i][p+m] = FALSE; } } else { //g_debug ("p= %d, m= %d, p+m= %d", p, m, p+m); showcoord[i][p+m] = TRUE; showpoly[i][p+m] = FALSE; } if (i) { o = 0; for (r=0; r partial_geo[j][m][o] = old_coord -> partial_geo[k][n][r]; //g_debug ("j= %d, m= %d, o= %d, partial= %d, %d", j, m, o, tmp_coord -> partial_geo[j][m][o], old_coord -> partial_geo[k][n][r]); o ++; } } } m ++; } } } g_free (tntg); j ++; } s += (spid[k]) ? 1 : 0; } } } /*! \fn void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_frag, gboolean update_mol) \brief update coordination(s), fragment(s) and molecule(s) OpenGL menus and associated data pointers \param this_proj the target project \param coord the target coordination info data structure \param new_spec the number of chemical species \param nmols the number of fragment(s) to add \param showcoord the coordination show status \param showpoly the polyhedra show status \param showfrag the fragment show status \param update_it update atoms data (and GTK3 menus) \param update_mol update molecule(s) data */ void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol) { int i, j, k; for (i=0; i<4; i++) { g_free (this_proj -> modelgl -> gcid[i]); this_proj -> modelgl -> gcid[i] = NULL; } for (i=0; i<2; i++) init_opengl_coords (i, coord -> totcoord[i], 0); i = 0; for (j=0; j ntg[0][j], coord -> geolist[0][j]); } i ++; for (j=0; j ntg[1][j]); for (k=0; k ntg[1][j]; k++) partial_geo_out_ (& j, & k, & new_spec, coord -> partial_geo[j][k]); init_menu_coordinations_ (& i, & j, & coord -> ntg[1][j], coord -> geolist[1][j]); } i = 2; this_proj -> coord -> totcoord[i] += nmols; if (this_proj -> coord -> totcoord[i]) { this_proj -> modelgl -> adv_bonding[i-2] = TRUE; init_opengl_coords (i, this_proj -> coord -> totcoord[i], 0); init_menu_fragmol_ (& i); } else { this_proj -> modelgl -> adv_bonding[i-2] = FALSE; } if (update_mol) { i = 3; if (this_proj -> coord -> totcoord[i]) { this_proj -> modelgl -> adv_bonding[i-2] = TRUE; init_opengl_coords (i, this_proj -> coord -> totcoord[i], 0); init_menu_fragmol_ (& i); } } else { this_proj -> modelgl -> adv_bonding[1] = FALSE; this_proj -> coord -> totcoord[3] = 0; } #ifdef GTK3 prep_all_coord_menus (this_proj -> modelgl); #endif if (update_it) { gboolean * viz[2]; for (i=0; i<2; i++) viz[i] = allocbool (this_proj -> natomes); for (i=0; i natomes; i++) { for (j=0; j<2; j++) viz[j][i] = this_proj -> atoms[0][i].show[j]; } #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { for (j=0; j coord -> totcoord[i]; j++) { if (this_proj -> modelgl -> ogl_geom[0][i][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j]) != showcoord[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j], showcoord[i][j]); } } } if (this_proj -> modelgl -> ogl_poly[0][i][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j]) != showpoly[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j], showpoly[i][j]); } } } } g_free (showcoord[i]); g_free (showpoly[i]); } for (i=0; i coord -> totcoord[2]; i++) { if (this_proj -> modelgl -> ogl_geom[0][2][i]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][2][i])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][2][i]) != showfrag[i]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][2][i], showfrag[i]); } } } } #endif for (i=0; i natomes; i++) { for (j=0; j<2; j++) this_proj -> atoms[0][i].show[j] = viz[j][i]; } for (i=0; i<2; i++) g_free (viz[i]); } } /*! \fn void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag) \brief recover image pointer data and OpenGL window menu structure \param this_proj the target project \param nmols the number of molecules \param add the number of new chemical species \param rem the number of chemical species to remove \param num the number of atom(s) by chemical species \param rec the lsit of removed chemical species, if any \param tmpgeo the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' \param showfrag the saved fragment(s) show information */ void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag) { // Now OpenGL data int old_spec = this_proj -> nspec; //g_debug ("recover opengl:: old_spec= %d, add= %d, rem= %d", old_spec, add, rem); int new_spec = old_spec + add - rem; gboolean * showcoord[2]; gboolean * showpoly[2]; gboolean update_it = FALSE; clean_coords_and_geoms (this_proj, this_proj -> modelgl -> atom_win, new_spec, rem, add, num, tmpgeo, showcoord, showpoly); if (add || rem) { if (old_spec) free_glwin_spec_data (this_proj, old_spec); glwin_init_spec_data (this_proj, new_spec); } this_proj -> nspec = new_spec; active_project_changed (this_proj -> id); if ((add && old_spec) || rem) { int h, i, j, k, l, m, n, o, p, q; image * new_img = g_malloc0(sizeof*new_img); setup_image_spec_data (this_proj, new_img); image * old_img = this_proj -> modelgl -> anim -> last -> img; // copy info in new data, then clean old data and copy it back for (i=0; i<2; i++) { for (j=0; j show_atom[i][j-k] = old_img -> show_atom[i][j]; new_img -> show_label[i][j-k] = old_img -> show_label[i][j]; } } } for (h=0; h<2*old_spec; h++) { i = (h < old_spec) ? h : h - old_spec; if (num[i]) { j = rec[i]; k = (h < old_spec) ? 0 : 1; l = h - k*old_spec - j + k*new_spec; new_img -> sphererad[l] = old_img -> sphererad[h]; new_img -> atomicrad[l] = old_img -> atomicrad[h]; new_img -> pointrad[l] = old_img -> pointrad[h]; new_img -> at_color[l].red = old_img -> at_color[h].red; new_img -> at_color[l].green = old_img -> at_color[h].green; new_img -> at_color[l].blue = old_img -> at_color[h].blue; new_img -> at_color[l].alpha = old_img -> at_color[h].alpha; for (m=0; m<2*old_spec; m++) { n = (m < old_spec) ? m : m - old_spec; if (num[n]) { o = rec[n]; p = (m < old_spec) ? 0 : 1; q = m - p*old_spec - o + p*new_spec; new_img -> linerad[l][q] = old_img -> linerad[h][m]; new_img -> bondrad[l][q] = old_img -> bondrad[h][m]; } } } } for (i=0; i<2; i++) { if (old_img -> show_atom[i] != NULL) { g_free (old_img -> show_atom[i]); old_img -> show_atom[i] = NULL; } if (old_img -> show_label[i] != NULL) { g_free (old_img -> show_label[i]); old_img -> show_label[i] = NULL; } } for (i=0; i<9; i++) { g_free (old_img -> spcolor[i]); old_img -> spcolor[i] = NULL; } g_free (old_img -> sphererad); g_free (old_img -> atomicrad); g_free (old_img -> pointrad); g_free (old_img -> at_color); g_free (old_img -> linerad); g_free (old_img -> bondrad); for (i=0; i<2; i++) { old_img -> show_atom[i] = duplicate_bool (new_spec, new_img -> show_atom[i]); old_img -> show_label[i] = duplicate_bool (new_spec, new_img -> show_label[i]); } old_img -> sphererad = duplicate_double (2*new_spec, new_img -> sphererad); old_img -> atomicrad = duplicate_double (2*new_spec, new_img -> atomicrad); old_img -> pointrad = duplicate_double (2*new_spec, new_img -> pointrad); old_img -> at_color = duplicate_color (2*new_spec, new_img -> at_color); old_img -> linerad = g_malloc0(2*new_spec*sizeof*old_img -> linerad); old_img -> bondrad = g_malloc0(2*new_spec*sizeof*old_img -> bondrad); for (i=0; i<2*new_spec; i++) { old_img -> linerad[i] = duplicate_double (2*new_spec, new_img -> linerad[i]); old_img -> bondrad[i] = duplicate_double (2*new_spec, new_img -> bondrad[i]); } for (i=0; i<9; i++) { old_img -> spcolor[i] = NULL; if (i < 2) { old_img -> spcolor[i] = g_malloc0(new_spec*sizeof*old_img -> spcolor[i]); } else { old_img -> spcolor[i] = g_malloc0(1*sizeof*old_img -> spcolor[i]); old_img -> spcolor[i][0] = NULL; } } g_free (new_img); update_it = TRUE; } else if (add) { setup_image_spec_data (this_proj, this_proj -> modelgl -> anim -> last -> img); } if (add || rem) { #ifdef GTK3 // GTK3 Menu Action To Check int i; for (i=1; i modelgl -> ogl_coord[i] = NULL; for (i=0; i modelgl -> ogl_rings[i] = NULL; this_proj -> modelgl -> ogl_chains[0] = NULL; prepare_opengl_menu_bar (this_proj -> modelgl); // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif } new_coord_menus (this_proj, this_proj -> modelgl -> atom_win -> coord, new_spec, nmols, showcoord, showpoly, showfrag, update_it, (add || rem) ? FALSE : (! nmols) ? TRUE : FALSE); } atomes_1.3.1/src/opengl/edit/cell_shift.c0000664000175000017500000005046315212624223017775 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_shift.c * @short Functions to create the 'shift cell center' tab for the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_shift.c' * * Contains: * - The functions to create the 'shift cell center' tab for the cell edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density); void shift_it (vec3_t shift, int refresh, int proj); void adjust_it (int refresh, int proj); void shift_has_changed (gpointer data, double val); void wrapping (glwin * view); G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data); G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data); G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data); GtkWidget * create_cell_entries (project * this_proj, int i); GtkWidget * create_shift_box (project * this_proj); GtkWidget * shift_center_tab (project * this_proj); */ #include "cell_edit.h" /*! \fn void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) \brief modify atomic coordinates in lattice \param this_proj the target project \param dlat lattice vectors matrix \param drec reciprocal vectors matrix \param refresh refresh rendering data \param density 0= shift, 1 = density modification */ void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) { vec3_t pos; vec3_t res; int i, j; box_info * box; mat4_t lat, rec; if (! density) { box = & this_proj -> cell.box[0]; lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { pos = vec3(this_proj -> atoms[i][j].x, this_proj -> atoms[i][j].y, this_proj -> atoms[i][j].z); if (density) { res = m4_mul_pos(*drec, pos); pos = m4_mul_pos(*dlat, res); } else { if (this_proj -> cell.npt && i) { box = & this_proj -> cell.box[i]; lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); } res = m4_mul_pos(rec, pos); res.x -= (int)res.x; res.x -= (int)(res.x/0.5); res.y -= (int)res.y; res.y -= (int)(res.y/0.5); res.z -= (int)res.z; res.z -= (int)(res.z/0.5); pos = m4_mul_pos(lat, res); } this_proj -> atoms[i][j].x = pos.x; this_proj -> atoms[i][j].y = pos.y; this_proj -> atoms[i][j].z = pos.z; } if (density) { for (j=0; j modelgl -> bonds[i][1]; j++) { pos = vec3(this_proj -> modelgl -> clones[i][j].x, this_proj -> modelgl -> clones[i][j].y, this_proj -> modelgl -> clones[i][j].z); res = m4_mul_pos(*drec, pos); pos = m4_mul_pos(*dlat, res); this_proj -> modelgl -> clones[i][j].x = pos.x; this_proj -> modelgl -> clones[i][j].y = pos.y; this_proj -> modelgl -> clones[i][j].z = pos.z; } } } if (refresh) { i = activep; active_project_changed (this_proj -> id); if (! density) { this_proj -> dmtx = run_distance_matrix (NULL, 0, 1); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); #endif } else { /*if (this_proj -> modelgl -> adv_bonding[1]) { for (j=0; j<2; j++) { if (this_proj -> modelgl -> anim -> last -> img -> color_map[j] == 4 || this_proj -> modelgl -> anim -> last -> img -> color_map[j] == 5) { if (this_proj -> modelgl -> color_styles[j*ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j*ATOM_MAPS], TRUE); set_color_map (this_proj -> modelgl -> color_styles[j*ATOM_MAPS], & this_proj -> modelgl -> colorp[j*ATOM_MAPS][0]); } } } }*/ /*this_proj -> modelgl -> bonding = FALSE; this_proj -> modelgl -> adv_bonding[0] = this_proj -> modelgl -> adv_bonding[1] = FALSE; if (this_proj -> force_field[0]) { g_free (this_proj -> force_field[0]); this_proj -> force_field[0] = NULL; }*/ /*int j; if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif }*/ } init_default_shaders (this_proj -> modelgl); if (density) this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; if (this_proj -> modelgl -> n_shaders[SLABS][0]) this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); if (i != this_proj -> id) active_project_changed (i); } } /*! \fn void shift_it (vec3_t shift, int refresh, int proj) \brief shift atomic coordinates \param shift the shift vector \param refresh refresh rendering data \param proj the target project id */ void shift_it (vec3_t shift, int refresh, int proj) { project * this_proj = get_project_by_id (proj); translate (this_proj, -1, 0, shift); modify_coordinates_in_lattice (this_proj, NULL, NULL, refresh, 0); } /*! \fn void adjust_it (int refresh, int proj) \brief adjust atomic coordinates \param refresh refresh rendering data \param proj the project id */ void adjust_it (int refresh, int proj) { int i, j; project * this_proj = get_project_by_id (proj); box_info * box = & this_proj -> cell.box[0]; mat4_t rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); for (i=0; i<3; i++) box -> param[0][i] = this_proj -> modelgl -> cell_win -> cparam[i+3]; i = this_proj -> cell.ltype; this_proj -> cell.ltype = 1; j = activep; active_project_changed (this_proj -> id); this_proj -> cell.ltype = i; active_project_changed (j); mat4_t lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); modify_coordinates_in_lattice (this_proj, & lat, & rec, refresh, 1); double m = 0.0; for (i=0; i nspec; i++) m += this_proj -> chemistry -> nsps[i] * this_proj -> chemistry -> chem_prop[CHEM_M][i]; this_proj -> cell.density = 10.0*m/(this_proj -> cell.volume*6.02214179); display_density (this_proj -> modelgl -> cell_win, this_proj -> cell.volume, this_proj -> cell.density, this_proj -> natomes/this_proj -> cell.volume); } /*! \fn void shift_has_changed (gpointer data, double val) \brief shift atomic coordinates \param data the associated data pointer \param val the shift value */ void shift_has_changed (gpointer data, double val) { tint * dat = (tint *)data; int i, j, k, l; project * this_proj = get_project_by_id (dat -> a); cell_edition * cedit = this_proj -> modelgl -> cell_win; l = (this_proj -> cell.npt) ? this_proj -> modelgl -> anim -> last -> img -> step : 0; if (dat -> b < 3) { if (val >= - this_proj -> cell.box[l].param[0][dat -> b]/2.0 && val <= this_proj -> cell.box[l].param[0][dat -> b]/2.0) { if (val != cedit -> cparam[dat -> b]) { double cparam[3]; for (i=0; i<3; i++) cparam[i] = - cedit -> cparam[i]; shift_it (vec3(cparam[0], cparam[1], cparam[2]), 0, dat -> a); cedit -> cparam[dat -> b] = val; for (i=0; i<3; i++) cparam[i] = cedit -> cparam[i]; shift_it (vec3(cparam[0], cparam[1], cparam[2]), 1, dat -> a); } } } else if (dat -> b < 6) { if (val > 0.0 && val <= cedit -> initbox[dat -> b-3]*100.0) { if (val != cedit -> cparam[dat -> b]) { adjust_it (0, dat -> a); if (cedit -> homo_density) { double v = val / cedit -> initbox[dat -> b - 3]; for (i=0; i<3; i++) cedit -> cparam[i+3] = v * cedit -> initbox[i]; } else { cedit -> cparam[dat -> b] = val; } adjust_it (1, dat -> a); } } } else if (dat -> b > 5 && dat -> b < 15) { i = (dat -> b < 9) ? 6 : (dat -> b < 12) ? 9 : dat -> b; j = (dat -> b < 9) ? 1 : (dat -> b < 12) ? 2 : 10; k = (dat -> b < 9) ? 1 : 0; if (val > -k * cedit -> initbox[dat -> b - i] && val <= j * cedit -> initbox[dat -> b - i]) { if (val != cedit -> cparam[dat -> b]) { cedit -> cparam[dat -> b] = val; if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } } } else if (dat -> b > 14) { i = (dat -> b < 18) ? 0 : 1; if (val >= -i * 180.0 && val <= 180.0) { if (val != cedit -> cparam[dat -> b]) { cedit -> cparam[dat -> b] = val; if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } } } if ((dat -> b > 2 && dat -> b < 6) && cedit -> homo_density) { for (i=3; i<6; i++) { update_entry_double (GTK_ENTRY(cedit -> edit_entry[i]), cedit -> cparam[i]); gtk_range_set_value (GTK_RANGE(cedit -> edit_scale[i]), cedit -> cparam[i]); } } else { update_entry_double (GTK_ENTRY(cedit -> edit_entry[dat -> b]), cedit -> cparam[dat -> b]); gtk_range_set_value (GTK_RANGE(cedit -> edit_scale[dat -> b]), cedit -> cparam[dat -> b]); } } /*! \fn G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) \brief set atomic coordinates shift \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); shift_has_changed (data, v); } /*! \fn G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief shift coordinates callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { shift_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) \brief shift coordinates callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) { shift_has_changed (data, gtk_range_get_value (range)); } /*! \fn GtkWidget * create_cell_entries (project * this_proj, int i) \brief create the cell entry widgets \param this_proj the target project \param i target parameter/action id (shift, cut, density) */ GtkWidget * create_cell_entries (project * this_proj, int i) { int j, k, l, m; gchar * str; GtkWidget * lab; GtkWidget * hbox; gchar * axis[3]={"x", "y", "z"}; gchar * angl[3]={"α", "β", "ɣ"}; gchar * unit[2]={"Å", "°"}; GtkWidget * vbox = create_vbox (5); cell_edition * cedit = this_proj -> modelgl -> cell_win; cedit -> edit_entry[i] = create_entry (G_CALLBACK(set_shift), 100, 15, FALSE, & this_proj -> modelgl -> colorp[i][0]); if (i < 3 || (i > 5 && i < 12)) { j = (i < 3) ? i : (i < 9) ? i - 6 : i - 9; k = (i < 3) ? 2 : 1; l = (i < 9) ? 1 : 0; m = (i < 9) ? 1 : 2; cedit -> edit_scale[i] = create_hscale (-l*this_proj -> cell.box[0].param[0][j]/k, m*this_proj -> cell.box[0].param[0][j]/k, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("on %s axis [+/- Å]"), axis[j]); } else if (i < 6) { cedit -> initbox[i-3] = cedit -> cparam[i] = this_proj -> cell.box[0].param[0][i-3]; cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][i-3]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Lattice %s [+/- Å]"), box_prop[0][i-3]); } else if (i == 12) { cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][0]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Length [+/- Å]")); } else if (i > 14 && i < 18) { cedit -> edit_scale[i] = create_hscale (0.0, 180.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Angle %s [+/- °]"), angl[i-15]); } else if (i > 17) { cedit -> edit_scale[i] = create_hscale (-180, 180.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("on %s axis [+/- °]"), axis[i-18]); } else { cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][0]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Radius [+/- Å]")); } update_entry_double (GTK_ENTRY(cedit -> edit_entry[i]), cedit -> cparam[i]); lab = markup_label(unit[(i > 14 && i < 18) ? 1 : 0], 20, -1, 0.0, 0.5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 110, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cedit -> edit_scale[i], FALSE, FALSE, 20); GtkWidget * fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), cedit -> edit_entry[i], 0, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 5); gtk_fixed_put (GTK_FIXED(fixed), lab, (i<3) ? 0 : -50, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * create_shift_box (project * this_proj) \brief create shift box widgets \param this_proj the target project */ GtkWidget * create_shift_box (project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); int i; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Shift the position of the cell center *: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); for (i=0; i<3; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("* requires all atoms to be wrapped in the unit cell"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); widget_set_sensitive (vbox, this_proj -> modelgl -> wrapped); show_the_widgets (vbox); return vbox; } /*! \fn void wrapping (glwin * view) \brief wrapping atomic coordinates \param view the target glwin */ void wrapping (glwin * view) { gchar * text = _("You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?"); if (ask_yes_no (_("Wrap atomic coordinates in unit cell ?"), text, GTK_MESSAGE_WARNING, view -> win)) { shift_it (vec3 (0.0, 0.0, 0.0), 1, view -> proj); view -> wrapped = TRUE; } if (view -> cell_win) { if (view -> cell_win -> shift_box[0]) { if (GTK_IS_WIDGET(view -> cell_win -> shift_box[0])) { widget_set_sensitive (view -> cell_win -> shift_box[0], view -> wrapped); } } } #ifdef GTK3 // GTK3 Menu Action To Check if (GTK_IS_WIDGET(view -> ogl_box[2])) { widget_set_sensitive (view -> ogl_box[2], ! view -> wrapped); } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) \brief wrap atomic coordinates callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) \brief wrap atomic coordinates callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); widget_set_sensitive (GTK_WIDGET(but), ! view -> wrapped); } /*! \fn GtkWidget * shift_center_tab (project * this_proj) \brief create the shift cell center tab \param this_proj the target project */ GtkWidget * shift_center_tab (project * this_proj) { GtkWidget * layout = create_layout (350, 250); glwin * view = this_proj -> modelgl; view -> cell_win -> shift_box[0] = create_shift_box (this_proj); view -> cell_win -> put_in_box = check_button (_("Wrap atomic coordinates in unit cell"), -1, -1, FALSE, G_CALLBACK(wrap_coord), view); widget_set_sensitive (view -> cell_win -> put_in_box, ! view -> wrapped); if (view -> record) widget_set_sensitive (view -> cell_win -> put_in_box, FALSE); layout_add_widget (layout, view -> cell_win -> put_in_box, 20, 20); layout_add_widget (layout, view -> cell_win -> shift_box[0], 100, 100); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/cbuild_action.c0000664000175000017500000015447415212624223020467 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_action.c * @short Functions to build a crystal using space group, crystallographic position(s) and object(s) to insert * @author Sébastien Le Roux */ /* * This file: 'cbuild_action.c' * * Contains: * - The functions to build a crystal using space group, crystallographic position(s) and object(s) to insert * * List of functions: int occupancy (double occ); int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos); int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); double get_val_from_setting (gchar * pos, gchar * sval); double get_value_from_pos (gchar * pos); double get_val_from_wyckoff (gchar * pos, gchar * wval); gboolean same_coords (float a, float b); gboolean are_equal_vectors (vec3_t u, vec3_t v); gboolean pos_not_taken (int pos, int dim, int * tab); gboolean adjust_object_occupancy (crystal_data * cryst, int occupying, int rouding, int tot_cell); void get_origin (space_group * spg); void compute_lattice_properties (cell_info * cell, int box_id); void clean_this_proj (project * this_proj, gboolean newp); space_group * duplicate_space_group (space_group * spg); crystal_data * allocate_crystal_data (int objects, int species); crystal_data * free_crystal_data (crystal_data * cryst); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "glview.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "atom_edit.h" #include "cbuild_edit.h" #include "readers.h" #include extern int get_crystal_id (int spg); extern atomic_object * cif_object; gchar * tmp_pos = NULL; /*! \fn double get_val_from_setting (gchar * pos, gchar * sval) \brief get value from space group setting \param pos the position "a", "b" or "c" \param sval the space group setting */ double get_val_from_setting (gchar * pos, gchar * sval) { if (! strstr(sval, pos)) { return 0.0; } else { if (! g_strcmp0(sval, pos)) { g_free (tmp_pos); tmp_pos = NULL; return 1.0; } gchar * sym[8]={"-1/3", "+1/3", "1/3", "-2/3", "+2/3", "2/3", "-", "+"}; double vals[8]={-1.0/3.0, 1.0/3.0, 1.0/3.0, -2.0/3.0, 2.0/3.0, 2.0/3.0, -1.0, 1.0}; gchar * ksym = NULL; int i; for (i=0; i<8; i++) { ksym = g_strdup_printf ("%s%s", sym[i], pos); if (strstr(sval, ksym)) { tmp_pos = replace_markup (tmp_pos, ksym, NULL); g_free (ksym); ksym = NULL; if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return vals[i]; } g_free (ksym); ksym = NULL; } tmp_pos = replace_markup (tmp_pos, pos, NULL); if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return 1.0; } } /*! \fn double get_value_from_pos (gchar * pos) \brief get position double value from string description \param pos the string description */ double get_value_from_pos (gchar * pos) { if (strstr(pos, "/")) { char * p = NULL; double u, v; p = strtok(pos, "/"); u = string_to_double ((gpointer)p); p = strtok(NULL, "/"); v = string_to_double ((gpointer)p); return u/v; } else { return string_to_double ((gpointer)pos); } } /*! \fn void get_origin (space_group * spg) \brief get space group origin matrices \param spg the target space group */ void get_origin (space_group * spg) { char * vinit[3]={"a", "b", "c"}; double spinit[3][4]; int i, j, k; i = spg -> sid; for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", spg -> settings[i].pos[j]); for (k=0; k<3; k++) { spinit[j][k] = get_val_from_setting (vinit[k], spg -> settings[i].pos[j]); } if (tmp_pos) { spinit[j][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spinit[j][3] = 0.0; } } spg -> coord_origin = mat4 (spinit[0][0], spinit[1][0], spinit[2][0], 0.0, spinit[0][1], spinit[1][1], spinit[2][1], 0.0, spinit[0][2], spinit[1][2], spinit[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); spg -> wyck_origin = m4_invert_affine (spg -> coord_origin); spg -> coord_origin.m30 = spg -> wyck_origin.m30 = spinit[0][3]; spg -> coord_origin.m31 = spg -> wyck_origin.m31 = spinit[1][3]; spg -> coord_origin.m32 = spg -> wyck_origin.m32 = spinit[2][3]; #ifdef DEBUG g_debug ("Coord origin:"); m4_print (spg -> coord_origin); g_debug ("Wyck origin:"); m4_print (spg -> wyck_origin); #endif } /*! \fn void compute_lattice_properties (cell_info * cell, int box_id) \brief compute lattice parameters following cell description \param cell the target cell description \param box_id the target box description to fill */ void compute_lattice_properties (cell_info * cell, int box_id) { int i; box_info * box = & cell -> box[box_id]; double ltemp; double angle[3]; double sangle[3], cangle[3]; if (! cell -> ltype) { for (i=0; i<3; i++) { if (box -> param[1][i] == 90.0) { angle[i] = pi/2.0; sangle[i] = 1.0; cangle[i] = 0.0; } else { angle[i] = box -> param[1][i]*pi/180.0; sangle[i] = sin(angle[i]); cangle[i] = cos(angle[i]); } } box -> vect[0][0] = box -> param[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> param[0][1] * cangle[2]; box -> vect[1][1] = box -> param[0][1] * sangle[2]; box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> param[0][2] * cangle[1]; ltemp = (cangle[0] - cangle[1]*cangle[2]) / sangle[2]; box -> vect[2][1] = box -> param[0][2] * ltemp; box -> vect[2][2] = box -> param[0][2] * sqrt(sangle[1]*sangle[1] - ltemp*ltemp); } else { for (i=0; i<3; i++) box -> param[0][i] = v3_length(vec3(box -> vect[i][0], box -> vect[i][1], box -> vect[i][2])); box -> param[1][0] = (box -> vect[2][0]*box -> vect[1][0] + box -> vect[2][1]*box -> vect[1][1] + box -> vect[2][2]*box -> vect[1][2]); box -> param[1][0] /= (box -> param[0][1] * box -> param[0][2]); box -> param[1][1] = (box -> vect[0][0]*box -> vect[2][0] + box -> vect[0][1]*box -> vect[2][1] + box -> vect[0][2]*box -> vect[2][2]); box -> param[1][1] /= (box -> param[0][0] * box -> param[0][2]); box -> param[1][2] = (box -> vect[0][0]*box -> vect[1][0] + box -> vect[0][1]*box -> vect[1][1] + box -> vect[0][2]*box -> vect[1][2]); box -> param[1][2] /= (box -> param[0][0] * box -> param[0][1]); for (i=0; i<3; i++) { if (box -> param[1][i] == 0.0) { box -> param[1][i] = 90.0; sangle[i] = 1.0; cangle[i] = 0.0; } else { angle[i] = acos(box -> param[1][i]); sangle[i] = sin(angle[i]); cangle[i] = cos(angle[i]); box -> param[1][i] = angle[i]*180.0/pi; } } } #ifdef DEBUG g_debug (" a= %f, b= %f, c= %f", box -> param[0][0], box -> param[0][1], box -> param[0][2]); g_debug (" alpha= %f, beta= %f, gamma= %f", box -> param[1][0], box -> param[1][1], box -> param[1][2]); g_debug (" a.x= %f, a.y= %f, a.z= %f", box -> vect[0][0], box -> vect[0][1], box -> vect[0][2]); g_debug (" b.x= %f, b.y= %f, b.z= %f", box -> vect[1][0], box -> vect[1][1], box -> vect[1][2]); g_debug (" c.x= %f, c.y= %f, c.z= %f", box -> vect[2][0], box -> vect[2][1], box -> vect[2][2]); #endif box -> vol = (box -> vect[0][1]*box -> vect[1][2] - box -> vect[0][2]*box -> vect[1][1])*box -> vect[2][0]; box -> vol += (box -> vect[0][2]*box -> vect[1][0] - box -> vect[0][0]*box -> vect[1][2])*box -> vect[2][1]; box -> vol += (box -> vect[0][0]*box -> vect[1][1] - box -> vect[0][1]*box -> vect[1][0])*box -> vect[2][2]; box -> vol = fabs(box -> vol); cell -> volume = box -> vol; #ifdef DEBUG g_debug ("Lattice volume= %f", box -> vol); #endif double z = sqrt(fabs(1 - cangle[0]*cangle[0]-cangle[1]*cangle[1]-cangle[2]*cangle[2] + 2*cangle[0]*cangle[1]*cangle[2])); float ** ftc; ftc = allocdfloat (4,4); ftc[0][0]=box -> param[0][0]; ftc[0][1]=box -> param[0][1]*cangle[2]; ftc[0][2]=box -> param[0][2]*cangle[1]; ftc[1][1]=box -> param[0][1]*sangle[2]; ftc[1][2]=box -> param[0][2]*((cangle[0]-cangle[1]*cangle[2])/sangle[2]); ftc[2][2]=box -> param[0][2]*z/sangle[2]; box -> frac_to_cart = mat4(ftc[0][0], ftc[0][1], ftc[0][2], ftc[0][3], ftc[1][0], ftc[1][1], ftc[1][2], ftc[1][3], ftc[2][0], ftc[2][1], ftc[2][2], ftc[2][3], ftc[3][0], ftc[3][1], ftc[3][2], ftc[3][3]); ftc[0][0]=1.0/box -> frac_to_cart.m00; ftc[0][1]=-cangle[2]/(sangle[2]*box -> param[0][0]); ftc[0][2]=box -> param[0][1]*box -> param[0][2]/box -> vol; ftc[0][2]=ftc[0][2]*(cangle[0]*cangle[2] - cangle[1])/sangle[0]; ftc[1][1]=1.0/box -> frac_to_cart.m11; ftc[1][2]=(box -> param[0][0]*box -> param[0][2])/box -> vol; ftc[1][2]=ftc[1][2]*(cangle[1]*cangle[2] - cangle[0])/sangle[2]; ftc[2][2]=1.0/box -> frac_to_cart.m22; box -> cart_to_frac = mat4 (ftc[0][0], ftc[0][1], ftc[0][2], ftc[0][3], ftc[1][0], ftc[1][1], ftc[1][2], ftc[1][3], ftc[2][0], ftc[2][1], ftc[2][2], ftc[2][3], ftc[3][0], ftc[3][1], ftc[3][2], ftc[3][3]); g_free (ftc); #ifdef DEBUG m4_print (box -> frac_to_cart); m4_print (box -> cart_to_frac); #endif } /*! \fn int test_lattice (builder_edition * cbuilder, cell_info * cif_cell) \brief test lattice parameters \param cbuilder the builder edition with the lattice parameters \param cif_cell the cell information when testing CIF file */ int test_lattice (builder_edition * cbuilder, cell_info * cif_cell) { int i, j; cell_info * cell = (cbuilder) ? & cbuilder -> cell : cif_cell; box_info * box = & cell -> box[0]; i = cell -> sp_group -> id; j = get_crystal_id (i); if (cbuilder) { if (! cell -> ltype) { // Adjust a,b,c,alpha,beta,gamma and compute vectors if (j == 3 || j == 4 || j == 6) { box -> param[1][1] = box -> param[1][2] = box -> param[1][0]; } if (j == 3 || (j == 4 && cell -> sp_group -> name[0] == 'P') || j == 5) { box -> param[0][1] = box -> param[0][0]; } else if ((j == 4 && cell -> sp_group -> name[0] == 'R') || j == 6) { box -> param[0][1] = box -> param[0][2] = box -> param[0][0]; } } if (! test_vol(box -> param, box -> vect)) { show_warning (_("Please describe properly the lattice parameters"), cbuilder -> win); return 0; } compute_lattice_properties (cell, 0); } // Strictly different or possibly different ? /*if (j < 3) { if (box -> param[0][0] == box -> param[0][1] || box -> param[0][0] == box -> param[0][2] || box -> param[0][1] == box -> param[0][2]) { // Box error: a, b, c not all different return 0; } }*/ if (j == 3 || j == 4 || j == 5) { if (box -> param[0][0] != box -> param[0][1]) { // Box error: a and b must be equal return 0; } } if (j == 2 || j == 3 || j == 6) { if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 90.0) { // Angle error: alpha, beta and gamma must be = 90 return 0; } } switch (j) { // Strictly different or possibly different ? /* case 0: if (! (box -> param[1][0] != box -> param[1][1] && box -> param[1][0] != box -> param[1][2] && box -> param[1][1] != box -> param[1][2])) { // Angle error: alpha, beta, gamma not all different return 0; } break; */ case 1: if (box -> param[1][0] != 90.0) { // Angle error: alpha must be = 90 return 0; } else if (box -> param[1][1] != 90.0 && box -> param[1][2] != 90.0) { // Angle error: beta or gamma must be = 90 return 0; } break; case 4: if (cell -> sp_group -> name[0] != 'R') { if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 120.0) { // Angle error: alpha and beta must be equal= 90, gamma must be = 120 return 0; } } else { if (box -> param[1][0] != box -> param[1][1] || box -> param[1][0] != box -> param[1][2] || box -> param[1][1] != box -> param[1][2]) { // Angle error: alpha, beta, gamma must all be equal return 0; } else if (box -> param[0][0] != box -> param[0][2]) { // Box error: a, b and c must all be equal return 0; } } break; case 5: if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 120.0) { // Angle error: alpha and beta must be = 90, gamma must be = 120 return 0; } break; case 6: if (box -> param[0][0] != box -> param[0][1] || box -> param[0][0] != box -> param[0][2] || box -> param[0][1] != box -> param[0][2]) { // Box error: a, b, c not all equal return 0; } break; } return 1; } /*! \fn double get_val_from_wyckoff (gchar * pos, gchar * wval) \brief get point value from wyckoff position \param pos "x", "y" or "z" \param wval wyckoff position vector */ double get_val_from_wyckoff (gchar * pos, gchar * wval) { if (! strstr(wval, pos)) { return 0.0; } else { if (! g_strcmp0(wval, pos)) { g_free (tmp_pos); tmp_pos = NULL; return 1.0; } gchar * sym[4]={"-2", "2", "-", "+"}; double sval[4]={-2.0, 2.0, -1.0, 1.0}; gchar * ksym = NULL; int i; for (i=0; i<4; i++) { ksym = g_strdup_printf ("%s%s", sym[i], pos); if (strstr(wval, ksym)) { tmp_pos = replace_markup (tmp_pos, ksym, NULL); g_free (ksym); ksym = NULL; if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return sval[i]; } g_free (ksym); ksym = NULL; } tmp_pos = replace_markup (tmp_pos, pos, NULL); if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return 1.0; } } /*! \fn void clean_this_proj (project * this_proj, gboolean newp) \brief clean project and/or associated cell parameters \param this_proj the target project \param newp is this a new project ? */ void clean_this_proj (project * this_proj, gboolean newp) { int i, j; if (newp) { close_project(this_proj); } else { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) this_proj -> cell.box[0].param[i][j] = 0.0; this_proj -> cell.box[0].vect[i][j] = 0.0; } } this_proj -> cell.ltype = 0; this_proj -> cell.pbc = FALSE; } } /*! \fn gboolean same_coords (float a, float b) \brief test if values are similar, allowing a 0.0001 difference \param a 1st value \param b 2nd value */ gboolean same_coords (float a, float b) { int i; for (i=0; i<10; i++) if (fabs(fabs(a-b) - i) < 0.0001) return TRUE; return FALSE; } /*! \fn gboolean are_equal_vectors (vec3_t u, vec3_t v) \brief comparing atomic coordinates vectors \param u 1st vector \param v 2nd vector */ gboolean are_equal_vectors (vec3_t u, vec3_t v) { if (same_coords(u.x, v.x) && same_coords(u.y, v.y) && same_coords(u.z, v.z)) { return TRUE; } return FALSE; } /*! \fn int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) \brief was this position already saved ? \param all_pos the list of saved atomic coordinates \param num_pos the number of saved atomic coordinates \param pos the vector to test */ int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) { int i; for (i=0; i id = spg -> id; new_spg -> hms = g_strdup_printf ("%s", spg -> hms); new_spg -> bravais = g_strdup_printf ("%s", spg -> bravais); if (spg -> settings[spg -> sid].origin) { new_spg -> setting = g_strdup_printf ("%s:%d", spg -> settings[spg -> sid].name, spg -> settings[spg -> sid].origin); } else { new_spg -> setting = g_strdup_printf ("%s", spg -> settings[spg -> sid].name); } return new_spg; } /*! \fn crystal_data * allocate_crystal_data (int objects, int species) \brief allocate crystal data pointer \param objects the number of object(s) \param species the number of chemical species */ crystal_data * allocate_crystal_data (int objects, int species) { crystal_data * cryst = g_malloc0(sizeof*cryst); cryst -> objects = objects; cryst -> spec = species; cryst -> at_by_object = allocint (cryst -> objects); cryst -> pos_by_object = allocint (cryst -> objects); cryst -> occupancy = allocdouble (cryst -> objects); cryst -> sites = g_malloc0(cryst -> objects*sizeof*cryst -> sites); cryst -> insert = g_malloc0(cryst -> objects*sizeof*cryst -> insert); cryst -> position = g_malloc0(cryst -> objects*sizeof*cryst -> position); cryst -> coord = g_malloc0(cryst -> objects*sizeof*cryst -> coord); cryst -> lot = g_malloc0(cryst -> objects*sizeof*cryst -> lot); cryst -> at_type = g_malloc0(cryst -> objects*sizeof*cryst -> at_type); cryst -> z = allocdouble (species); cryst -> nsps = allocint (species); cryst -> holes = allocbool (cryst -> objects); return cryst; } /*! \fn crystal_data * free_crystal_data (crystal_data * cryst) \brief free crystal data pointer \param cryst the data pointer to free */ crystal_data * free_crystal_data (crystal_data * cryst) { if (cryst -> at_by_object) g_free (cryst -> at_by_object); if (cryst -> pos_by_object) g_free (cryst -> pos_by_object); if (cryst -> occupancy) g_free (cryst -> occupancy); if (cryst -> sites) g_free (cryst -> sites); if (cryst -> insert) g_free (cryst -> insert); if (cryst -> position) g_free (cryst -> position); if (cryst -> coord) g_free (cryst -> coord); if (cryst -> lot) g_free (cryst -> lot); if (cryst -> at_type) g_free (cryst -> at_type); if (cryst -> z) g_free (cryst -> z); if (cryst -> nsps) g_free (cryst -> nsps); if (cryst -> holes) g_free (cryst -> holes); g_free (cryst); return NULL; } /*! \fn gboolean pos_not_taken (int pos, int dim, int * tab) \brief is this position already taken ? \param pos position id \param dim number of position(s) \param tab the list of position(s) */ gboolean pos_not_taken (int pos, int dim, int * tab) { int i; for (i=0; i 2) ? TRUE : FALSE; // position ordering must be used to ensure proper overlapping with holes pos_order = allocint (cryst -> objects); i = j = 0; for (k=0; k objects; k++) { if (cryst -> holes[k]) { pos_order[i] = k; j = max (j, cryst -> pos_by_object[i]); i ++; } } if (i) { with_holes = TRUE; holes_pos = allocdbool (cryst -> objects, j); } for (j=0; j objects; j++) { if (! cryst -> holes[j]) { pos_order[i] = j; i ++; } } for (h=0; h objects; h++) { i = pos_order[h]; #ifdef DEBUG g_debug ("i= %d, occ[%d]= %f, pbo[%d]= %d", i+1, i+1, cryst -> occupancy[i], i+1, cryst -> pos_by_object[i]); #endif if (cryst -> sites[i][0] > 0 && cryst -> occupancy[i]*cryst -> pos_by_object[i] < 1.0 && ! cryst -> holes[i]) low_occ = TRUE; if (cryst -> sites[i][0] > 0 && cryst -> occupancy[i] < 1.0 && cryst -> pos_by_object[i] > 1) { v = 0.0; pos_bs = cryst -> pos_by_object[i]; site_bs = (cryst -> holes[i]) ? 1 : cryst -> sites[i][0]; num_bs = cryst -> sites[i][0]; taken_pos = allocbool (pos_bs); #ifdef DEBUG g_debug ("i= %d, site[%d][0]= %d, pos_bs= %d, num_bs= %d", i+1, i+1, cryst -> sites[i][0], pos_bs, num_bs); #endif for (j=0; j sites[i][0]; j++) { k = cryst -> sites[i][j+1]; v += cryst -> occupancy[k]; } l = 0; if (with_holes) { for (j=0; j sites[i][j+1]; #ifdef DEBUG g_debug ("\tj= %d, k= %d, sites[%d][0]= %d, occ[%d]= %f, pos_by_objects[%d]= %d", j+1, k+1, k+1, cryst -> sites[k][0], k+1, cryst -> occupancy[k], k+1, cryst -> pos_by_object[k]); #endif if (cryst -> sites[k][0] > -1) { // Warning for occupancy closest integer value to: // - (int) ? // - nearbyint : closest integer value ? num_to_save = occupancy (pos_bs*cryst -> occupancy[k], rounding); l += num_to_save; #ifdef DEBUG g_debug ("\tnum_to_save= %d, l= %d", num_to_save, l); #endif if (j == num_bs-1) { if ((v == 1.0 && l != pos_bs) || l > pos_bs) num_to_save += (pos_bs-l); } site_pos = allocint (num_to_save); m = 0; while (m < num_to_save) { pick_it = TRUE; if (occupying < 3) { CPU_time = clock(); n = (CPU_time - (k+17)*pos_bs) + (3*cryst -> at_by_object[i]); prob = random3_(& n); p = round (prob * (pos_bs-1)); if (with_holes) { pick_it = (taken_pos[p] || holes_pos[i][p]) ? FALSE : TRUE; } else { pick_it = ! taken_pos[p]; } } else if (occupying == 3) { p = 0; if (with_holes) { while (taken_pos[p] || holes_pos[i][p]) p ++; } else { while (taken_pos[p]) p ++; } } else { #ifdef DEBUG g_debug ("\t\tp= %d, m= %d, sites[i][0]= %d", p, m, cryst -> sites[k][0]); #endif p = j + m*cryst -> sites[k][0]; if (p > cryst -> pos_by_object[k]-1) { p -= (cryst -> pos_by_object[k]-1); } #ifdef DEBUG g_debug ("\t\tp= %d", p); #endif for (n=0; n pos_by_object[k]) n = 0; pick_it = FALSE; while (! pick_it) { pick_it = TRUE; for (o=0; o coord[k][m] = cryst -> coord[k][n]; if (occ_sym && tot_cell > 1) { for (o=1; o objects/tot_cell); cryst -> coord[p][m] = cryst -> coord[p][n]; } } } cryst -> pos_by_object[k] = num_to_save; cryst -> sites[k][0] = -1; if (occ_sym && tot_cell > 1) { for (o=1; o objects/tot_cell); cryst -> pos_by_object[p] = num_to_save; cryst -> sites[p][0] = -1; } } if (cryst -> holes[i]) { for (o=0; o sites[i][o+1]; for (q=0; q 1) { for (s=1; s objects/tot_cell); holes_pos[t][r] = TRUE; } } } } } g_free (site_pos); } } g_free (taken_pos); } } if (holes_pos) g_free (holes_pos); return low_occ; } gboolean crystal_low_warning; gboolean crystal_crowded; gboolean crystal_dist_chk; /*! \fn int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) \brief build crystal \param visible is the crystal builder window visible ? \param this_proj the target project \param c_step the MD step if multiple CIF configurations \param to_wrap wrap or not atomic coordinates in the unit cell \param show_clones show / hide clone(s) \param cell the cell info that contains the crystal description \param widg the GtkWidget sending the signal */ int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) { int h, i, j, k, l, m, n, o, p, q; int build_res = 1; space_group * sp_group = cell -> sp_group; box_info * box = & cell -> box[c_step]; gchar * str; mat4_t ** wyckpos = g_malloc0(sp_group -> numw*sizeof*wyckpos); double spgpos[3][4]; for (i=0; i<1; i++)//sp_group -> numw; i++) { wyckpos[i] = g_malloc0(sp_group -> wyckoff[i].multi*sizeof*wyckpos[i]); for (j=0; j wyckoff[i].multi; j++) { for (k=0; k<3; k++) { tmp_pos = g_strdup_printf ("%s", sp_group -> wyckoff[i].pos[j][k]); for (l=0; l<3; l++) { spgpos[k][l] = get_val_from_wyckoff (vect_comp[l], sp_group -> wyckoff[i].pos[j][k]); } if (tmp_pos) { spgpos[k][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[k][3] = 0.0; } } wyckpos[i][j] = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); wyckpos[i][j] = m43_mul(sp_group -> wyck_origin, wyckpos[i][j]); #ifdef DEBUG // g_debug ("w_id= %d, w_mul= %d", i+1, j+1); // m4_print (wyckpos[i][j]); #endif } } double copos[3]; int npoints; vec3_t * points; h = sp_group -> sid; if (sp_group -> settings[h].nump) { points = g_malloc0(sp_group -> settings[h].nump*sizeof*points); for (i=0; i settings[h].nump; i++) { for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", sp_group -> settings[h].points[i][j]); copos[j] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } points[i] = vec3(copos[0], copos[1], copos[2]); //m4_mul_coord (sp_group -> coord_origin, vec3(copos[0], copos[1], copos[2])); #ifdef DEBUG // g_debug ("point=%d, p.x= %f, p.y= %f, p.z= %f", i+1, points[i].x, points[i].y ,points[i].z); #endif } npoints = sp_group -> settings[h].nump; } else { points = g_malloc0(1*sizeof*points); points[0] = vec3(0.0, 0.0, 0.0); npoints = 1; } vec3_t pos; atomic_object * object = NULL; gboolean done; crystal_data * cdata = NULL; int occupying; int rounding; double amin = box -> param[0][0]; for (i=1; i<3; i++) amin = min(amin, box -> param[0][i]);; if (! visible) { tint point; point.a = this_proj -> id; point.b = point.c = 0; if (! this_proj -> modelgl) this_proj -> modelgl = g_malloc0(sizeof*this_proj -> modelgl); prepare_atom_edition (& point, FALSE); this_proj -> modelgl -> search_widg[7] = allocate_atom_search (this_proj -> id, INSERT, 7, this_reader -> natomes); gboolean do_obj; for (i=0; i natomes; i++) { do_obj = FALSE; for (j=0; j atom_unlabelled; j++) { if (this_reader -> u_atom_list[j] == i) { do_obj = TRUE; break; } } if (do_obj) { if (! object) { this_proj -> modelgl -> atom_win -> to_be_inserted[2] = duplicate_atomic_object (get_atomic_object_by_origin (cif_object, this_reader -> object_list[j], 0)); object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { object -> next = duplicate_atomic_object (get_atomic_object_by_origin (cif_object, this_reader -> object_list[j], 0)); } } else { j = this_reader -> lot[i]; to_insert_in_project ((int)this_reader -> z[j], -1, this_proj, this_proj -> modelgl -> search_widg[7], FALSE); } this_proj -> modelgl -> search_widg[7] -> todo[i] = 1; if (! object) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { object = object -> next; } object -> occ = this_reader -> occupancy[i]; for (j=0; j<3; j++) object -> baryc[j] = this_reader -> coord[i][j]; } occupying = 0; rounding = this_reader -> rounding; } else { occupying = this_proj -> modelgl -> builder_win -> occupancy; rounding = this_proj -> modelgl -> builder_win -> rounding; } for (h=0; h<2; h++) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; i = j = k = 0; while (object) { l = object -> id; if (this_proj -> modelgl -> search_widg[7] -> todo[l]) { if (h) { for (m=0; m species; m++) { done = FALSE; for (l=0; l old_z[m] == cdata -> z[l]) { done = TRUE; break; } } if (! done && object -> old_z[m] > 0.0) { cdata -> z[k] = object -> old_z[m]; k ++; } if (object -> old_z[m] == 0.0) { cdata -> holes[i] = TRUE; cdata -> with_holes = TRUE; } } n = sp_group -> wyckoff[0].multi*npoints; cdata -> at_type[i] = allocint (n); cdata -> coord[i] = g_malloc0(n*sizeof*cdata -> coord[i]); cdata -> insert[i] = m4_mul_coord (sp_group -> coord_origin, vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2])); #ifdef DEBUG // g_debug ("at_orig= %d, pos.x= %f, pos.y= %f, pos.z= %f", i+1, object -> baryc[0], object -> baryc[1], object -> baryc[2]); // g_debug ("at_calc= %d, pos.x= %f, pos.y= %f, pos.z= %f", i+1, cdata -> insert[i].x, cdata -> insert[i].y, cdata -> insert[i].z); #endif n = 0; for (o=0; o wyckoff[0].multi; p++) { pos = v3_add (m4_mul_coord (wyckpos[0][p], cdata -> insert[i]), points[o]); q = pos_not_saved (cdata -> coord[i], n, pos); if (q > 0) { cdata -> coord[i][n].x = pos.x; cdata -> coord[i][n].y = pos.y; cdata -> coord[i][n].z = pos.z; #ifdef DEBUG // g_debug (" c.x= %f, c.y= %f, c.z= %f", cdata -> coord[i][n].x, cdata -> coord[i][n].y, cdata -> coord[i][n].z); #endif cdata -> at_type[i][n] = 1; n ++; } else if (q < 0) { cdata -> at_type[i][-(q+1)] ++; } } } cdata -> pos_by_object[i] = n; cdata -> occupancy[i] = object -> occ; if (! cdata -> holes[i]) cdata -> lot[i] = allocint (object -> atoms); cdata -> position[i] = g_malloc0(object -> atoms*sizeof*cdata -> position[i]); for (l=0; l atoms; l++) { n = object -> at_list[l].sp; cdata -> position[i][l].x = object -> at_list[l].x; cdata -> position[i][l].y = object -> at_list[l].y; cdata -> position[i][l].z = object -> at_list[l].z; if (! cdata -> holes[i]) { for (o=0; o z[o] == object -> old_z[n]) { cdata -> lot[i][l] = o; break; } } } } cdata -> at_by_object[i] = object -> atoms; i ++; } else { if (object -> dim > amin) { if (! crystal_crowded) { str = g_strdup_printf (_("%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?"), object -> name, object -> dim); build_res = 2; crystal_crowded = ask_yes_no(_("This object might be too big !") , str, GTK_MESSAGE_WARNING, widg); if (! crystal_crowded) { g_free (str); if (points) g_free (points); if (wyckpos) g_free (wyckpos); if (cdata) cdata = free_crystal_data (cdata); if (! visible) { this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; active_glwin = NULL; } return 0; } g_free (str); } } i ++; j += object -> species; k += object -> atoms; } } object = object -> next; } if (! h) { if (k) { cdata = allocate_crystal_data (i, j); cdata -> overlapping = (visible) ? this_proj -> modelgl -> builder_win -> overlapping : FALSE; } else { if (points) g_free (points); if (wyckpos) g_free (wyckpos); if (cdata) cdata = free_crystal_data (cdata); if (! visible) { this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; active_glwin = NULL; } return 0; } } } if (points) g_free (points); if (wyckpos) g_free (wyckpos); cdata -> spec = k; double u, v; m = 0; for (i=0; i objects; i++) { m += (cdata -> holes[i]) ? 1 : 0; u = v = 0.0; for (j=0; j<2; j++) { k = 1; if (! cdata -> overlapping || cdata -> holes[i]) { u = cdata -> occupancy[i]; } else { v = cdata -> occupancy[i]; } if (u+v > 1.0 || u+v < 0.0) { if (cdata) cdata = free_crystal_data (cdata); show_warning (_("Impossible to build crystal: check occupancy !"), widg); return 0; } else if (cdata -> overlapping && ! cdata -> with_holes) { if (j) cdata -> sites[i][k] = i; } else { for (l=0; l objects; l++) { if (l != i) { if (cdata -> insert[i].x == cdata -> insert[l].x && cdata -> insert[i].y == cdata -> insert[l].y && cdata -> insert[i].z == cdata -> insert[l].z) { if (j) { if (! cdata -> overlapping || cdata -> holes[i]) { k ++; cdata -> sites[i][k] = l; } } else { if (! cdata -> overlapping || cdata -> holes[i]) k ++; if (! cdata -> overlapping || cdata -> holes[l]) { u += cdata -> occupancy[l]; } else { v = max(v, cdata -> occupancy[l]); } if (u+v > 1.00001) { show_warning (_("Impossible to build crystal: site total occupancy > 1.0"), widg); if (cdata) cdata = free_crystal_data (cdata); return 0; } } } } } } if (! j) { cdata -> sites[i] = allocint (k+1); cdata -> sites[i][0] = k; cdata -> sites[i][1] = i; if (k > 1) cdata -> shared_sites = TRUE; } } } #ifdef DEBUG /*for (i=0; i objects; i++) { g_debug ("i= %d, site[%d]= %d", i+1, i+1, cdata -> sites[i][0]); for (j=0; j sites[i][0]; j++) { g_debug ("\t j= %d, co-site[%d][%d]= %d", j+1, i+1, j+1, cdata -> sites[i][j+1]+1); } }*/ #endif // DEBUG if (m == cdata -> objects) { if (cdata) cdata = free_crystal_data (cdata); show_warning (_("Impossible to build crystal: empty site(s) only !"), widg); return 0; } gboolean new_proj = (this_proj -> natomes && visible) ? TRUE : FALSE; if (new_proj) { init_project (TRUE); } else if (visible) { active_project_changed (this_proj -> id); } active_box = & active_cell -> box[c_step]; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) { active_box -> param[i][j] = box -> param[i][j]; if (! i) active_box -> param[i][j] *= cell -> cextra[j]; } active_box -> vect[i][j] *= cell -> cextra[i]; } } compute_lattice_properties (active_cell, c_step); active_cell -> ltype = 1; active_cell -> pbc = TRUE; int tot_cell = 1; for (i=0; i<3; i++) { tot_cell *= cell -> cextra[i]; } vec3_t vx, vy, vz, shift; h = 0; i = (occupying == 2) ? 0 : 1; j = (occupying == 2) ? 1 : tot_cell; crystal_data * cryst = allocate_crystal_data (j*cdata -> objects, cdata -> spec); g_free (cryst -> z); cryst -> z = duplicate_double (cdata -> spec, cdata -> z); cryst -> shared_sites = cdata -> shared_sites; cryst -> overlapping = cdata -> overlapping; cryst -> with_holes = cdata -> with_holes; if (occupying == 2) { for (k=0; k objects; k++) { cryst -> pos_by_object[k] = tot_cell*cdata -> pos_by_object[k]; cryst -> at_by_object[k] = cdata -> at_by_object[k]; cryst -> at_type[k] = duplicate_int (sp_group -> wyckoff[0].multi*npoints, cdata -> at_type[k]); cryst -> holes = duplicate_bool (cdata -> objects, cdata -> holes); if (! cdata -> holes[k]) cryst -> lot[k] = duplicate_int (cdata -> at_by_object[k], cdata -> lot[k]); cryst -> occupancy[k] = cdata -> occupancy[k]; cryst -> sites[k] = duplicate_int (cdata -> sites[k][0]+1, cdata -> sites[k]); cryst -> position[k] = g_malloc0(cdata -> at_by_object[k]*sizeof*cryst -> position[k]); for (l=0; l at_by_object[k]; l++) cryst -> position[k][l] = cdata -> position[k][l]; cryst -> coord[k] = g_malloc0(cryst -> pos_by_object[k]*sizeof*cryst -> coord[k]); } } for (k=0; k cextra[0]; k++) { vx = v3_muls(vec3(box -> vect[0][0], box -> vect[0][1], box -> vect[0][2]), k); for (l=0; l cextra[1]; l++) { vy = v3_muls(vec3(box -> vect[1][0], box -> vect[1][1], box -> vect[1][2]), l); for (m=0; m cextra[2]; m++) { vz = v3_muls(vec3(box -> vect[2][0], box -> vect[2][1], box -> vect[2][2]), m); shift = v3_add (vx, v3_add(vy, vz)); for (n=0; n objects; n++) { if (occupying != 2) { cryst -> coord[n+h] = g_malloc0(cdata -> pos_by_object[n]*sizeof*cryst -> coord[n+h]); cryst -> pos_by_object[n+h] = cdata -> pos_by_object[n]; cryst -> at_by_object[n+h] = cdata -> at_by_object[n]; cryst -> holes[n+h] = cdata -> holes[n]; cryst -> at_type[n+h] = duplicate_int (sp_group -> wyckoff[0].multi*npoints, cdata -> at_type[n]); if (! cdata -> holes[n]) cryst -> lot[n+h] = duplicate_int (cdata -> at_by_object[n], cdata -> lot[n]); cryst -> occupancy[n+h] = cdata -> occupancy[n]; cryst -> sites[n+h] = duplicate_int (cdata -> sites[n][0]+1, cdata -> sites[n]); for (o=0; o sites[n+h][0]; o++) cryst -> sites[n+h][o+1] += h; cryst -> position[n+h] = g_malloc0(cdata -> at_by_object[n]*sizeof*cryst -> position[n+h]); for (o=0; o at_by_object[n]; o++) cryst -> position[n+h][o] = cdata -> position[n][o]; } o = cdata -> pos_by_object[n]; for (p=0; p coord[n+i*h][p+(!i)*h*o] = v3_add(m4_mul_coord (box -> frac_to_cart, cdata -> coord[n][p]), shift); } } h += (occupying != 2) ? cdata -> objects : 1; } } } cdata = free_crystal_data (cdata); gboolean low_occ = adjust_object_occupancy (cryst, occupying, rounding, tot_cell); atom at, bt; distance dist; if (! cryst -> overlapping) { for (i=0; i objects; i++) { if (! cryst -> holes[i]) { for (j=0; j pos_by_object[i]; j++) { at.x = cryst -> coord[i][j].x; at.y = cryst -> coord[i][j].y; at.z = cryst -> coord[i][j].z; for (k=i; k objects; k++) { if (! cryst -> holes[k]) { if (k != i || j < cryst -> pos_by_object[i]-1) { l = (k == i) ? j+1 : 0; for (m=l; m pos_by_object[k]; m++) { bt.x = cryst -> coord[k][m].x; bt.y = cryst -> coord[k][m].y; bt.z = cryst -> coord[k][m].z; dist = distance_3d (active_cell, 0, & at, & bt); if (dist.length < 0.5) { // g_print ("i= %d, j= %d, k= %d, m= %d, d= %f\n", i, j, k, m, dist.length); if (crystal_dist_chk) { build_res = 3; if (ask_yes_no (_("Inter-object distance(s) < 0.5 Ang. !"), _("Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?"), GTK_MESSAGE_WARNING, widg)) { crystal_dist_chk = FALSE; } else { clean_this_proj (active_project, new_proj); cryst = free_crystal_data (cryst); return 0; } } if (! crystal_dist_chk) { if (dist.length < 0.1) { cryst -> at_type[i][j] += cryst -> at_type[k][m]; for (n=m; n pos_by_object[k]-1; n++) { cryst -> coord[k][n].x = cryst -> coord[k][n+1].x; cryst -> coord[k][n].y = cryst -> coord[k][n+1].y; cryst -> coord[k][n].z = cryst -> coord[k][n+1].z; cryst -> at_type[k][n] += cryst -> at_type[k][n+1]; } cryst -> pos_by_object[k] --; m --; } } } } } } } } } } } int tot_new_at = 0; for (i=0; i objects; i++) { if (! cryst -> holes[i]) tot_new_at += cryst -> pos_by_object[i]*cryst -> at_by_object[i]; } int * tot_new_lot = allocint (tot_new_at); vec3_t * ncc = g_malloc0(tot_new_at*sizeof*ncc); i = 0; for (j=0; j objects; j++) { if (! cryst -> holes[j]) { for (k=0; k at_by_object[j]; k++) { for (l=0; l pos_by_object[j]; l++) { ncc[i] = v3_add (cryst -> coord[j][l], cryst -> position[j][k]); m = tot_new_lot[i] = cryst -> lot[j][k]; cryst -> nsps[m] ++; i ++; } } } } if (low_occ) { i = 0; for (j=0; j spec; j++) { if (cryst -> nsps[j]) i ++; } } else { i = cryst -> spec; } if (! c_step) { active_project -> natomes = tot_new_at; active_project -> nspec = i; alloc_proj_data (active_project, 1); } else { if (active_project -> natomes != tot_new_at) { #ifdef DEBUG g_debug ("CRYSTAL:: number of atoms changes between configurations"); #endif return -1; } if (active_project -> nspec != i) { #ifdef DEBUG g_debug ("CRYSTAL:: number of chemical species changes between configurations"); #endif return -1; } } active_project_changed (activep); k = l = 0; for (i=0; i spec; i++) { if (! cryst -> nsps[i]) { if (! low_occ) { if (ncc) g_free (ncc); if (tot_new_lot) g_free (tot_new_lot); #ifdef DEBUG g_debug ("CRYSTAL:: spec= %d, label= %s, nsps= %d", i+1, periodic_table_info[j].lab, 0); #endif return 0; } } else { j = (int)cryst -> z[i]; if (! c_step) { active_chem -> label[k] = g_strdup_printf ("%s", periodic_table_info[j].lab); active_chem -> element[k] = g_strdup_printf ("%s", periodic_table_info[j].name); active_chem -> nsps[k] = cryst -> nsps[i]; active_chem -> chem_prop[CHEM_Z][k] = cryst -> z[i]; active_chem -> chem_prop[CHEM_M][k] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][k] = set_radius_ (& j, & l); active_chem -> chem_prop[CHEM_N][k] = set_neutron_ (& j); active_chem -> chem_prop[CHEM_X][k] = active_chem -> chem_prop[CHEM_Z][k]; #ifdef DEBUG g_debug ("CRYSTAL:: spec= %d, label= %s, nsps= %d", k+1, active_chem -> label[k], active_chem -> nsps[k]); #endif } else { if (active_chem -> nsps[k] != cryst -> nsps[i]) { #ifdef DEBUG g_debug ("CRYSTAL:: number of atoms for chemical species %d changes between configurations", k+1); #endif return -1; } if (active_chem -> chem_prop[CHEM_Z][k] != cryst -> z[i]) { #ifdef DEBUG g_debug ("CRYSTAL:: atomic number for chemical species %d changes between configurations", k+1); #endif return -1; } } for (m=0; m vect[j][i]/2.0; } } for (i=0; i atoms[c_step][i].id = i; j = tot_new_lot[i]; active_project -> atoms[c_step][i].sp = j; active_project -> atoms[c_step][i].x = ncc[i].x + copos[0]; active_project -> atoms[c_step][i].y = ncc[i].y + copos[1]; active_project -> atoms[c_step][i].z = ncc[i].z + copos[2]; active_project -> atoms[c_step][i].show[0] = TRUE; active_project -> atoms[c_step][i].show[1] = TRUE; active_project -> atoms[c_step][i].label[0] = FALSE; active_project -> atoms[c_step][i].label[1] = FALSE; active_project -> atoms[c_step][i].pick[0] = FALSE; active_project -> atoms[c_step][i].cloned = FALSE; #ifdef DEBUG // g_debug ("sp= %d, %s %f %f %f", j+1, active_chem -> label[j], ncc[i].x, ncc[i].y, ncc[i].z); #endif } if (ncc) g_free (ncc); if (tot_new_lot) g_free (tot_new_lot); active_cell -> has_a_box = TRUE; active_cell -> crystal = TRUE; if (visible) { update_analysis_availability (active_project); active_project_changed (activep); if (new_proj) { add_project_to_workspace (); apply_project (TRUE); } else { active_project -> run = TRUE; active_image -> style = (active_project -> natomes <= 10000) ? BALL_AND_STICK : DEFAULT_STYLE; initcutoffs (active_chem, active_project -> nspec); init_curves_and_calc (active_project); init_atomes_analysis (active_project, TRUE); active_project_changed (activep); init_camera (active_project); setup_default_lights (active_project, active_image); setup_image_spec_data (active_project, active_image); glwin_init_spec_data (active_project, active_project -> nspec); #ifdef GTK3 // GTK3 Menu Action To Check for (j=1; j ogl_coord[j] = NULL; for (j=0; j ogl_rings[j] = NULL; for (j=0; j<2; j++) active_glwin -> ogl_mode[2+j+NINPUTS] = NULL; active_glwin -> ogl_chains[0] = NULL; #endif prepare_opengl_menu_bar (active_glwin); active_glwin -> labelled = check_label_numbers (active_project, 0); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; bonds_update = 1; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); if (active_glwin -> mode == EDITION) { #ifdef GTK4 set_mode (NULL, & active_glwin -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_mode[0], TRUE); set_mode (active_glwin -> ogl_mode[0], & active_glwin -> colorp[0][0]); #endif } show_the_widgets (active_glwin -> win); gtk_button_set_label (GTK_BUTTON(active_glwin -> builder_win -> pbut), _("Build (new project)")); if (active_glwin -> atom_win) { if (active_glwin -> atom_win -> win) { clean_all_trees (active_glwin -> search_widg[7], active_project); } } } init_camera (active_project); active_image -> abc -> box = 1; if (to_wrap) { shift_it (vec3(0.0,0.0,0.0), 1, activep); active_glwin -> wrapped = TRUE; } active_image -> draw_clones = (active_glwin -> allbonds[1]) ? show_clones : FALSE; update_all_menus (active_glwin, active_project -> natomes); #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { if (active_glwin -> ogl_box[i] != NULL) { widget_set_sensitive (active_glwin -> ogl_box[i], active_cell -> ltype); } } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_rep[0], TRUE); set_rep (active_glwin -> ogl_rep[0], & active_glwin -> colorp[0][0]); #endif init_shaders (active_glwin); update (active_glwin); chemistry_ (); } else { active_project -> modelgl -> search_widg[7] = free_this_search_data (active_project -> modelgl -> search_widg[7]); g_free (active_project -> modelgl); active_project -> modelgl = NULL; active_glwin = NULL; } update_insert_combos (); active_cell -> sp_group = duplicate_space_group (sp_group); if (low_occ && crystal_low_warning) { gchar * low_warning = _("The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message."); show_warning (low_warning, widg); crystal_low_warning = FALSE; } return build_res; } atomes_1.3.1/src/opengl/edit/atom_insert.c0000664000175000017500000001071715212624223020203 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_insert.c * @short Functions to insert bond(s) in a project * @author Sébastien Le Roux */ /* * This file: 'atom_insert.c' * * Contains: * - The functions to insert bond(s) in a project * * List of functions: void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list); void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object); void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible); G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); */ #include "atom_edit.h" /*! \fn void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list) \brief add bond list to project bond list \param this_proj the target project \param removed the number of atom(s) removed \param nbd the number of bond(s) to add \param new_bond_list the bond list to add */ void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list) { int i, j; if (nbd) { i = this_proj -> modelgl -> bonds[0][0]; this_proj -> modelgl -> bondid[0][0] = g_realloc (this_proj -> modelgl -> bondid[0][0], (i+nbd)*sizeof*this_proj -> modelgl -> bondid[0][0]); for (j=0; j modelgl -> bondid[0][0][j+i] = allocint (2); this_proj -> modelgl -> bondid[0][0][j+i][0] = new_bond_list[j][0] + this_proj -> natomes - removed; this_proj -> modelgl -> bondid[0][0][j+i][1] = new_bond_list[j][1] + this_proj -> natomes - removed; } this_proj -> modelgl -> bonds[0][0] += nbd; this_proj -> modelgl -> allbonds[0] += nbd; } } /*! \fn void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object) \brief add object bond(s) list to overall bond(s) list \param new_bond_list the bond list in the model \param nat the number of atom(s) in the model \param nbd the number of bond(s) in the model \param object the target insert object */ void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object) { int i; if (object -> bonds) { for (i=0; i bonds; i++) { new_bond_list[i+nbd][0] = object -> ibonds[i][0] + nat; new_bond_list[i+nbd][1] = object -> ibonds[i][1] + nat; } } } /*! \fn void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible) \brief prepare to insert something \param key the string describing the object to insert \param this_proj the target project \param asearch the target atom search \param visible is the model edition window visible */ void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible) { int i = get_selected_object_id (visible, this_proj -> id, key, asearch); if (i == FROM_PROJECT || i == FROM_DATA || i > 0) to_insert_in_project (i, -1, this_proj, asearch, visible); } /*! \fn G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) \brief change the object to insert \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) { GValue val = {0, }; GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); tint * dat = (tint *)data; gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); project * this_proj = get_project_by_id (dat -> a); prepare_to_instert (str, this_proj, this_proj -> modelgl -> search_widg[dat -> c], TRUE); g_free (str); } combo_set_active ((GtkWidget *)box, 0); } atomes_1.3.1/src/opengl/edit/atom_edit.c0000664000175000017500000004501015212624223017616 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_edit.c * @short Functions to create the model edition window * @author Sébastien Le Roux */ /* * This file: 'atom_edit.c' * * Contains: * - The functions to create the model edition window * * List of functions: gboolean is_atom_win_active (glwin * view); G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data); void clean_coord_window (project * this_proj); void clean_other_window_after_edit (project * this_proj); void clean_atom_win (project * this_proj); void prepare_atom_edition (gpointer data, gboolean visible); G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data); GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox); GtkWidget * create_edition_window (project * this_proj); atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); */ #include "atom_edit.h" float limit[2] = {100.0, 180.0}; gchar * action_name[5] = {i18n("Move"), i18n("Replace"), i18n("Remove"), i18n("Insert"), i18n("Random Move")}; gchar * action_atoms[3] = {i18n("All Non-selected Atoms"), i18n("All Selected Atoms"), i18n("All Atoms")}; gboolean was_moved; /*! \fn gboolean is_atom_win_active (glwin * view) \brief is the model edition window visible ? \param view the target glwin */ gboolean is_atom_win_active (glwin * view) { if (view -> atom_win) { return view -> atom_win -> visible; } return FALSE; } /*! \fn void clean_coord_window (project * this_proj) \brief update the environment configuration window after edtion \param this_proj the target project */ void clean_coord_window (project * this_proj) { if (this_proj -> modelgl -> coord_win) { #ifdef GTK3 int x, y; gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> coord_win -> win), & x, & y); #endif this_proj -> modelgl -> coord_win -> win = destroy_this_widget (this_proj -> modelgl -> coord_win -> win); this_proj -> modelgl -> coord_win -> win = advanced_coord_properties (this_proj -> modelgl, 0); #ifdef GTK3 gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> coord_win -> win), x ,y); #endif } } /*! \fn void clean_other_window_after_edit (project * this_proj) \brief update other windows after model edition if required \param this_proj the target project */ void clean_other_window_after_edit (project * this_proj) { int i; clean_coord_window (this_proj); if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> win && ! this_proj -> modelgl -> cell_win -> slab_passivate) { i = gtk_notebook_get_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook)); #ifdef GTK3 int x, y; gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> cell_win -> win), & x, & y); #endif this_proj -> modelgl -> cell_win -> win = destroy_this_widget (this_proj -> modelgl -> cell_win -> win); this_proj -> modelgl -> cell_win -> density = NULL; if (this_proj -> modelgl -> cell_win -> slab_lot) g_free (this_proj -> modelgl -> cell_win -> slab_lot); this_proj -> modelgl -> cell_win -> slab_lot = allocint (this_proj -> nspec); this_proj -> modelgl -> cell_win -> slab_info = NULL; if (this_proj -> natomes) { this_proj -> modelgl -> cell_win -> win = create_cell_edition_window (this_proj, & this_proj -> modelgl -> colorp[0][0]); gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook), i); #ifdef GTK3 gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> cell_win -> win), x ,y); #endif show_the_widgets (this_proj -> modelgl -> cell_win -> win); for (i=1; i<6; i++) { if (i < 3) hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_hbox[i]); hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[i]); } } } } /*if (this_proj -> modelgl -> spiner) { gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> spiner -> win), & x, & y); this_proj -> modelgl -> spiner -> win = destroy_this_widget (this_proj -> modelgl -> spiner -> win); g_free (this_proj -> modelgl -> spiner); this_proj -> modelgl -> spiner = NULL; if (this_proj -> natomes) window_spinner (NULL, this_proj -> modelgl); gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> spiner -> win), x ,y); }*/ } /*! \fn void clean_atom_win (project * this_proj) \brief clean model edition data \param this_proj the target project */ void clean_atom_win (project * this_proj) { this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = this_proj -> modelgl -> atom_win -> old_axis; this_proj -> modelgl -> atom_win -> win = destroy_this_widget (this_proj -> modelgl -> atom_win -> win); if (! this_proj -> modelgl -> builder_win) { g_free (this_proj -> modelgl -> atom_win); this_proj -> modelgl -> atom_win = NULL; } else { this_proj -> modelgl -> atom_win -> visible = FALSE; } int shaders[6] = {ATOMS, BONDS, POLYS, RINGS, SELEC, VOLMS}; re_create_md_shaders (6, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; this_proj -> modelgl -> create_shaders[PICKS] = TRUE; int i; for (i=0; i<2; i++) { if (this_proj -> modelgl -> saved_coord[i] != NULL) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; } } clean_other_window_after_edit (this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) \brief close model edition window \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); gboolean leave = (this_proj -> modelgl -> was_moved) ? ask_yes_no(_("Leaving without saving ?"), _("To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?") , GTK_MESSAGE_QUESTION, this_proj -> modelgl -> atom_win -> win) : TRUE; if (leave && this_proj -> modelgl -> atom_win) { int h; for (h=0; h<2; h++) { reset_coordinates (this_proj, h); init_coordinates (this_proj, h, TRUE, FALSE); } for (h=2; h<7; h++) { g_free (this_proj -> modelgl -> search_widg[h]); this_proj -> modelgl -> search_widg[h]= NULL; } this_proj -> modelgl -> was_moved = FALSE; clean_atom_win (this_proj); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) \brief model edition window close event callback GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) \brief model edition window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_edit (NULL, data); return TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) \brief reset model transformation toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) \brief reset model transformation toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) #endif { if (button_get_status((GtkWidget *)but)) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); if (ask_yes_no(_("Reset"), _("Reset and get back to initial coordinates ?\n This will affect all atoms !"), GTK_MESSAGE_WARNING, this_proj -> modelgl -> atom_win -> win)) { int h, i, j; for (h=0; h<3; h++) { for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> new_param[h][i][j] = this_proj -> modelgl -> edition_param[h][i][j]; gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[j]), this_proj -> modelgl -> atom_win -> new_param[h][i][j]); update_range_and_entry (this_proj, h, i, j); // update_coordinates (this_proj, h, i, j); } } } for (h=0; h<2; h++) { reset_coordinates (this_proj, h); init_coordinates (this_proj, h, TRUE, FALSE); } init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); } button_set_status ((GtkWidget *)but, FALSE); } } /*! \fn G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) \brief apply edition action callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); int h, i, j; i = this_proj -> modelgl -> mode; this_proj -> modelgl -> mode = ANALYZE; image * last = this_proj -> modelgl -> anim -> last -> img; vec4_t q = last -> rotation_quaternion; j = -1; if (id != active_project) { i = activep; active_project_changed (id); } init_camera (this_proj); if (j != -1) active_project_changed (j); last -> rotation_quaternion = q; this_proj -> modelgl -> mode = i; for (h=0; h<3; h++) { for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> edition_param[h][i][j] = this_proj -> modelgl -> atom_win -> new_param[h][i][j]; this_proj -> modelgl -> atom_win -> old_param[h][i][j] = this_proj -> modelgl -> atom_win -> new_param[h][i][j]; } } } for (h=0; h<2; h++) { g_free (this_proj -> modelgl -> saved_coord[h]); this_proj -> modelgl -> saved_coord[h] = save_coordinates (this_proj, h); } this_proj -> modelgl -> was_moved = FALSE; //clean_atom_win (this_proj); } /*! \fn GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox) \brief create the model edition notebook \param this_proj the target project \param vbox the GtkWidget sending the signal */ GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox) { GtkWidget * notebook = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, FALSE, FALSE, 0); gchar * str; int i; for (i=0; i<5; i++) { str = g_strdup_printf ("%s", _(action_name[i])); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), action_tab(i, this_proj), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } show_the_widgets (notebook); return notebook; } /*! \fn atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) \brief allocate atom search data structure \param proj the target project id \param action the edition action \param searchid the atom search id \param tsize the atom search object list size */ atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) { atom_search * asearch = g_malloc0(sizeof*asearch); asearch -> search_digit = -1; asearch -> proj = proj; asearch -> action = action; int i; for (i=0; i<6; i++) { asearch -> pointer[i].a = proj; asearch -> pointer[i].b = TOLAB+i; asearch -> pointer[i].c = searchid; } asearch -> recompute_bonding = FALSE; if (searchid != 5) allocate_todo (asearch, tsize); if (get_project_by_id(proj) -> modelgl) clean_picked_and_labelled (asearch, TRUE); return asearch; } /*! \fn GtkWidget * create_edition_window (project * this_proj) \brief create the model edition window \param this_proj the target project */ GtkWidget * create_edition_window (project * this_proj) { gchar * str = g_strdup_printf (_("Model edition - %s"), this_proj -> name); this_proj -> modelgl -> was_moved = FALSE; GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); int i, j; for (i=2; i<7; i++) { if (this_proj -> modelgl -> search_widg[i] == NULL) { this_proj -> modelgl -> search_widg[i] = allocate_atom_search (this_proj -> id, i, i, this_proj -> natomes); this_proj -> modelgl -> search_widg[i] -> status = (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) ? 1 : 2; } } this_proj -> modelgl -> atom_win -> vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, this_proj -> modelgl -> atom_win -> vbox); gtk_widget_set_size_request (this_proj -> modelgl -> atom_win -> vbox, 760, -1); add_gtk_close_event (win, G_CALLBACK(delete_action), GINT_TO_POINTER(this_proj -> id)); for (i=0; i<2; i++) { for (j=0; j<2; j++) this_proj -> modelgl -> rebuild[i][j] = TRUE; } this_proj -> modelgl -> atom_win -> notebook = create_atom_notebook (this_proj, this_proj -> modelgl -> atom_win -> vbox); GtkWidget * hbox = create_hbox (5); add_box_child_end (this_proj -> modelgl -> atom_win -> vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Apply"), IMG_STOCK, APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(apply_edit), GINT_TO_POINTER(this_proj -> id)); add_box_child_end (hbox, but, FALSE, FALSE, 5); but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_edit), GINT_TO_POINTER(this_proj -> id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); return win; } /*! \fn void prepare_atom_edition (gpointer data, gboolean visible) \brief prepare atom edition \param data the associated data pointer \param visible is the window visible (1/0) */ void prepare_atom_edition (gpointer data, gboolean visible) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); int i; if (this_proj -> modelgl -> atom_win == NULL) { this_proj -> modelgl -> atom_win = g_malloc0(sizeof*this_proj -> modelgl -> atom_win); for (i=0; i<2; i++) this_proj -> modelgl -> atom_win -> adv_bonding[i] = this_proj -> modelgl -> adv_bonding[i]; if (this_proj -> modelgl -> anim) { this_proj -> modelgl -> atom_win -> old_axis = this_proj -> modelgl -> anim -> last -> img -> xyz -> axis; } for (i=0; i<2; i++) { init_coordinates (this_proj, i, visible, TRUE); } this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (this_proj -> nspec); this_proj -> modelgl -> atom_win -> repeat_move = 1; } this_proj -> modelgl -> atom_win -> visible = visible; if (visible) { this_proj -> modelgl -> atom_win -> win = create_edition_window (this_proj); show_the_widgets (this_proj -> modelgl -> atom_win -> win); gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), id -> b); for (i=0; i<5; i++) { if (i != 3) { if (this_proj -> modelgl -> search_widg[i+2] -> todo_size < GTK_LIMIT) { hide_the_widgets (this_proj -> modelgl -> search_widg[i+2] -> info[1]); } else { hide_the_widgets (this_proj -> modelgl -> search_widg[i+2] -> id_box); } } widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), i), this_proj -> natomes); } widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), 3), 1); if (this_proj -> modelgl -> mode == EDITION) { #ifdef GTK4 set_mode (NULL, & this_proj -> modelgl -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[0], TRUE); set_mode (this_proj -> modelgl -> ogl_mode[0], & this_proj -> modelgl -> colorp[0][0]); #endif } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open model edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) \brief open model edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) #endif { prepare_atom_edition (data, TRUE); } atomes_1.3.1/src/opengl/edit/cell_pixel.c0000664000175000017500000001702015212624223017771 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_pixel.c * @short Functions to create the pixel debugging tab for the cell edition window \n This is only used when DEBUG option is activated at build time * @author Sébastien Le Roux */ /* * This file: 'cell_pixel.c' * * Contains: * - The functions to create the pixel debugging tab for the cell edition window This is only used when DEBUG option is activated at build time * * List of functions: void pix_info_ (int * na, int * nb, int * nc); void send_pix_info_ (int * p, int listp[27], int * ngb); void update_pix_table (project * this_proj); G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data); GtkWidget * create_css_label (gchar * str, int id); GtkWidget * attach_grid (project * this_proj, int init); GtkWidget * pixels_tab (project * this_proj); */ #ifdef DEBUG #include "cell_edit.h" /*! \fn void pix_info_ (int * na, int * nb, int * nc) \brief allocate pixel data pointer from Fortran90 \param na x size \param nb y size \param nc z size */ void pix_info_ (int * na, int * nb, int * nc) { active_project -> pix[0] = *na; active_project -> pix[1] = *nb; active_project -> pix[2] = *nc; active_project -> pixels = allocdint (active_project -> pix[0]*active_project -> pix[1]*active_project -> pix[2],27); } /*! \fn void send_pix_info_ (int * p, int listp[27], int * ngb) \brief retrieve pixel information from Fortran90 \param p the pixel id \param listp the neighbor list for pixel id \param ngb the number of neighbor for pixel id */ void send_pix_info_ (int * p, int listp[27], int * ngb) { int i; for (i=0; i<* ngb; i++) { active_project -> pixels[* p][i] = listp[i]; } } /*! \fn GtkWidget * create_css_label (gchar * str, int id) \brief create CSS label \param str the string \param id 0 = white, 1 = yellow */ GtkWidget * create_css_label (gchar * str, int id) { gchar * colo[2] = {"white", "yellow"}; gchar * backcol; if (id) { backcol = g_strdup_printf ("label#icolor {\n" " background-color: red;\n" " color: %s;\n}", colo[id]); } else { backcol = g_strdup_printf ("label#color {\n" " background-color: blue;\n" " color: %s;\n}", colo[id]); } provide_gtk_css (backcol); g_free (backcol); GtkWidget * lab = markup_label(str, 50, 50, 0.5, 0.5); gtk_widget_set_name (lab, (id) ? "icolor" : "color"); show_the_widgets (lab); return lab; } /*! \fn GtkWidget * attach_grid (project * this_proj, int init) \brief create pixel grid \param this_proj the target project \param init the target pixel */ GtkWidget * attach_grid (project * this_proj, int init) { GtkWidget * table = gtk_grid_new (); gchar * str; gboolean actif; int i, j, k, l, m; l = init+1; for (i=0; i pix[1]; i++) { for (j=0; j pix[0]; j++) { actif = FALSE; for (k=0; k<27; k++) { if (l == this_proj -> pixels[this_proj -> actif_pix-1][k]) { actif = TRUE; } } if (l == this_proj -> actif_pix) { str = g_strdup_printf ("%d", l); m = 1; } else { str = g_strdup_printf ("%d", l); m = 0; } l ++; if (actif) { gtk_grid_attach (GTK_GRID (table), create_css_label(str, m), j, i, 1, 1); } else { gtk_grid_attach (GTK_GRID (table), markup_label(str, 50, 50, 0.5, 0.5), j, i, 1, 1); } g_free (str); } } gtk_widget_set_size_request (table, this_proj -> pix[0]*50, this_proj -> pix[1]*50); return table; } /*! \fn void update_pix_table (project * this_proj) \brief prepare pixel table widget \param this_proj the target project */ void update_pix_table (project * this_proj) { int i; int pix[3]; for (i=0; i<3; i++) { this_proj -> pix_tab[i] = destroy_this_widget (this_proj -> pix_tab[i]); } // Seed for bottom grid if (this_proj -> actif_pix <= this_proj -> pix[0]*this_proj -> pix[1]) { pix[0] = this_proj -> pix[0]*this_proj -> pix[1]*(this_proj -> pix[2]-1); } else { pix[0] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[0] -= 1; pix[0] *= (this_proj -> pix[0]*this_proj -> pix[1]); } // Seed for pixel grid pix[1] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[1] *= (this_proj -> pix[0]*this_proj -> pix[1]); // Seed for top grid if (this_proj -> actif_pix > this_proj -> pix[0]*this_proj -> pix[1]*(this_proj -> pix[2]-1)) { pix[2] = 0; } else { pix[2] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[2] += 1; pix[2] *= (this_proj -> pix[0]*this_proj -> pix[1]); } for (i=0; i<3; i++) { this_proj -> pix_tab[i] = attach_grid (this_proj, pix[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> pix_box, this_proj -> pix_tab[i], FALSE, FALSE, 20); } show_the_widgets (this_proj -> pix_box); } /*! \fn G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) \brief set pixel id callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (id); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int p = (int)v; int n = this_proj-> pix[0] * this_proj -> pix[1] * this_proj -> pix[2]; if (p > 0 && p <= n) { this_proj -> actif_pix = p; } update_entry_int (res, this_proj -> actif_pix); update_pix_table (this_proj); } /*! \fn GtkWidget * pixels_tab (project * this_proj) \brief create the PBC pixels checking tab \param this_proj the target project */ GtkWidget * pixels_tab (project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); gchar * str = g_strdup_printf (_("\tSelect pixel to check, from 1 to %d:"), this_proj -> pix[0]*this_proj -> pix[1]*this_proj->pix[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_entry(G_CALLBACK(set_pix), 100, 15, FALSE, GINT_TO_POINTER(this_proj -> id)), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * scroll = create_scroll (vbox, 700, 350, GTK_SHADOW_ETCHED_IN); this_proj -> actif_pix = 1; this_proj -> pix_box = create_vbox (0); this_proj -> pix_tab[0] = this_proj -> pix_tab[1] = this_proj -> pix_tab[2] = NULL; update_pix_table (this_proj); add_container_child (CONTAINER_SCR, scroll, this_proj -> pix_box); return vbox; } #endif // DEBUG atomes_1.3.1/src/opengl/edit/cbuild_edit.h0000664000175000017500000001047215212624223020131 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_edit.h * @short Function declarations for the crystal builder * @author Sébastien Le Roux */ /* * This header file: 'cbuild_edit.h' * * Contains: - Function declarations for the crystal builder */ #ifndef CBUILD_EDIT_H_ #define CBUILD_EDIT_H_ #include "global.h" #include typedef struct crystal_data crystal_data; struct crystal_data { int objects; int spec; double * z; int ** lot; int ** at_type; int * nsps; int * at_by_object; int * pos_by_object; double * occupancy; int rounding; gboolean overlapping; int ** sites; gboolean shared_sites; gboolean with_holes; gboolean * holes; vec3_t * insert; vec3_t ** coord; vec3_t ** position; }; extern int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern gchar * groups[230]; extern gchar * hmsymbols[230]; extern dint t_box[9]; extern double tmp_box[2][3]; extern double tmp_vect[3][3]; extern char * vect_name[3]; extern char * vect_comp[3]; extern char * box_p[2]; extern char * box_prop[2][3]; extern gchar * cif_occupancies[3]; extern gchar * cif_occ[3]; extern gchar * cif_sites[2]; extern atom_search * insert_search; extern gboolean crystal_low_warning; extern gboolean crystal_crowded; extern gboolean crystal_dist_chk; extern gboolean test_vol (double box[2][3], double vect[3][3]); extern G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data); extern G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data); extern double get_value_from_pos (gchar * pos); extern double get_val_from_wyckoff (gchar * pos, gchar * wval); extern crystal_data * allocate_crystal_data (int objects, int species); extern crystal_data * free_crystal_data (crystal_data * cryst); #ifdef GTK4 extern G_MODULE_EXPORT void to_update_box (GtkEditable * widg, gpointer data); extern G_MODULE_EXPORT void to_update_vect (GtkEditable * widg, gpointer data); #else extern G_MODULE_EXPORT gboolean to_update_box (GtkWidget * widg, GdkEventFocus * event, gpointer data); extern G_MODULE_EXPORT gboolean to_update_vect (GtkWidget * widg, GdkEventFocus * event, gpointer data); #endif extern int occupancy (double occ, int cif_occ); extern gchar * replace_markup (char * init, char * key, char * rep); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern space_group * read_sg_xml_file (const char * filetoread); extern GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int na); extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern GtkWidget * create_action_combo (int id, project * this_proj); extern void prepare_atom_edition (gpointer data, gboolean visible); extern void clean_all_trees (atom_search * asearch, project * this_proj); extern void prepare_opengl_menu_bar (glwin * view); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern void setup_default_lights (project * this_proj, image * img); extern void setup_image_spec_data (project * this_proj, image * img); extern void glwin_init_spec_data (project * this_proj, int nspec); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern void shift_it (vec3_t shift, int refresh, int proj); extern G_MODULE_EXPORT void close_edit (GtkWidget * widg, gpointer data); extern int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); #endif atomes_1.3.1/src/opengl/edit/atom_action.c0000664000175000017500000020731215212624223020153 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_action.c * @short Functions to apply the edition actions to the model * @author Sébastien Le Roux */ /* * This file: 'atom_action.c' * * Contains: * - The functions to apply the edition actions to the model * * List of functions: int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing); void free_dummies (dummy_atom * tmp_pick); void clean_this_project (project * this_proj); void clean_motion_search (project * this_proj, atom_search * asearch, int sid); void clean_all_trees (atom_search * asearch, project * this_proj); void apply_action (project * this_proj, atom_search * asearch); void prepare_random_action (project * this_proj, atom_search * asearch); G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data); atom_search * duplicate_atom_search (atom_search * asearch); */ #include "atom_edit.h" #include "curve.h" #include "preferences.h" #include "bind.h" extern GLdouble get_max_depth (GLdouble depth); extern void setup_default_lights (project * this_proj, image * img); /*! \fn void free_dummies (dummy_atom * tmp_pick) \brief free atom dummy list \param tmp_pick the atom dummy list to free */ void free_dummies (dummy_atom * tmp_pick) { while (tmp_pick) { if (tmp_pick -> next) { tmp_pick = tmp_pick -> next; g_free (tmp_pick -> prev); tmp_pick -> prev = NULL; } else { g_free (tmp_pick); tmp_pick = NULL; } } } /*! \fn void clean_this_project (project * this_proj) \brief clean project data for the edition process \param this_proj the target project */ void clean_this_project (project * this_proj) { int i, j; opengl_project_changed (this_proj -> id); selected_aspec = -1; is_selected = -1; for (i=0; i natomes; i++) { opengl_project -> atoms[0][i].show[0] = opengl_project -> atoms[0][i].show[1] = FALSE; } gboolean vis_stat = opengl_project -> modelgl -> atom_win -> visible; opengl_project -> modelgl -> atom_win -> visible = FALSE; i = opengl_project -> modelgl -> selection_mode; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = NSELECTION-1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = i; opengl_project -> modelgl -> atom_win -> visible = vis_stat; #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> create_shaders[RINGS] = TRUE; opengl_project -> modelgl -> n_shaders[RINGS][0] = -1; for (i=0; i<2; i++) { for (j=0; j coord -> totcoord[i]; j++) { opengl_project -> modelgl -> anim -> last -> img -> show_poly[i][j] = FALSE; } } opengl_project -> modelgl -> create_shaders[POLYS] = TRUE; opengl_project -> modelgl -> n_shaders[POLYS][0] = -1; opengl_project -> natomes = 0; g_free (this_proj -> atoms[0]); for (i=0; i<2; i++) { if (opengl_project -> modelgl -> bonds[0][i]) { if (opengl_project -> modelgl -> bondid[0][i]) { g_free (opengl_project -> modelgl -> bondid[0][i]); opengl_project -> modelgl -> bondid[0][i] = NULL; } } opengl_project -> modelgl -> bonds[0][i] = 0; opengl_project -> modelgl -> allbonds[i] = 0; } g_free (opengl_project -> chemistry); opengl_project -> chemistry = NULL; init_curves_and_calc (opengl_project); frag_update = mol_update = 0; prep_calc_actions (); free_glwin_spec_data (opengl_project, opengl_project -> nspec); glwin_init_spec_data (opengl_project, 1); opengl_project -> nspec = 0; for (i=0; i<10; i++) opengl_project -> coord -> totcoord[i] = 0; #ifdef GTK3 // GTK3 Menu Action To Check for (i=1; i modelgl -> ogl_coord[i] = NULL; for (i=0; i modelgl -> ogl_rings[i] = NULL; opengl_project -> modelgl -> ogl_chains[0] = NULL; #endif prepare_opengl_menu_bar (opengl_project -> modelgl); } /*! \fn void clean_motion_search (project * this_proj, atom_search * asearch, int sid) \brief clean atom search motion data \param this_proj the target project \param asearch the target atom search \param sid motion id */ void clean_motion_search (project * this_proj, atom_search * asearch, int sid) { int i; if (asearch -> in_selection) { for (i=0; i todo_size; i++) asearch -> todo[i] = 0; asearch -> in_selection = 0; if (this_proj -> modelgl -> atom_win -> to_be_moved[sid]) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[sid]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[sid] = NULL; } } this_proj -> modelgl -> atom_win -> rebuilt[! sid] = TRUE; this_proj -> modelgl -> atom_win -> rebuilt[sid] = FALSE; } /*! \fn int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible) \brief apply atom edition action to project (motion, remove, replace, insert, random move) \param this_proj the target project \param asearch the target atom search \param visible is the 'model edition' window visible (1/0) */ int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible) { int i, j, k, l, m, n, o, p; dummy_atom * to_rem, * to_add; dummy_atom * tmp_rem, * tmp_add; atomic_object * object_list = NULL; atomic_object * tmp_list; atomic_object * object, * tmp_obj; int remove, extra, nmols; int act = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; to_rem = tmp_rem = NULL; to_add = tmp_add = NULL; remove = extra = nmols = 0; atom_edition * edit = this_proj -> modelgl -> atom_win; edit -> add_spec = 0; if (this_proj -> nspec) { edit -> new_z = duplicate_double (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); edit -> coord = duplicate_coord_info (this_proj -> coord); } else if (! this_proj -> natomes) { edit -> coord = NULL; this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = default_axis.axis; } gboolean passivate = FALSE; if (asearch -> action == REMOVE) { if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> slab_passivate) passivate = TRUE; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { for (i=0; i natomes; i++) { if (asearch -> todo[i]) { if (to_rem != NULL) { tmp_rem -> next = g_malloc0(sizeof*tmp_rem); tmp_rem -> next -> prev = tmp_rem; tmp_rem = tmp_rem -> next; } else { to_rem = g_malloc0(sizeof*to_rem); tmp_rem = to_rem; } tmp_rem -> id = i; remove ++; } } } else { object = edit -> to_be_inserted[act]; i = o = p = 0; while (object) { j = object -> id; /* #ifdef DEBUG g_debug ("object -> id= %d, name= %s, todo[%d]= %d", j+1, object -> name, j+1, asearch -> todo[j]); #endif */ if (asearch -> todo[j]) { if (edit -> coord) { o += search_for_new_spec (edit, object); } else { edit -> coord = duplicate_coord_info (object -> coord); edit -> new_z = allocdouble (edit -> coord -> species); for (k=0; k coord -> species; k++) edit -> new_z[k] = (double)object -> old_z[k]; o += object -> species; } asearch -> in_selection --; if (! object_list) { object_list = duplicate_atomic_object (object); tmp_list = object_list; } else { tmp_list -> next = duplicate_atomic_object (object); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } for (k=0; k atoms; k++) { if (to_add) { tmp_add -> next = g_malloc0(sizeof*tmp_add); tmp_add -> next -> prev = tmp_add; tmp_add = tmp_add -> next; } else { to_add = g_malloc0(sizeof*to_add); tmp_add = to_add; } tmp_add -> id = this_proj -> natomes + extra - remove; l = object -> at_list[k].sp; tmp_add -> type = find_spec_id (edit -> coord -> species, object -> old_z[l], edit -> new_z); tmp_add -> xyz[0] = object -> at_list[k].x + object -> baryc[0]; tmp_add -> xyz[1] = object -> at_list[k].y + object -> baryc[1]; tmp_add -> xyz[2] = object -> at_list[k].z + object -> baryc[2]; for (m=0; m<2; m++) { tmp_add -> coord[m] = find_this_geo_id (m, object -> coord, object -> old_z, object -> at_list[k].coord[m], l, tmp_add -> type, edit -> coord, edit -> new_z); } for (m=2; m<4; m++) tmp_add -> coord[m] = object -> at_list[k].coord[2] + i; if (this_proj -> coord) { for (m=2; m<4; m++) tmp_add -> coord[m] += this_proj -> coord -> totcoord[m]; } tmp_add -> numv = object -> at_list[k].numv; if (tmp_add -> numv) { tmp_add -> vois = duplicate_int (object -> at_list[k].numv, object -> at_list[k].vois); for (m=0; m numv; m++) tmp_add -> vois[m] += p + this_proj -> natomes; sort (tmp_add ->numv, tmp_add -> vois); } extra ++; } i += object -> coord -> totcoord[2]; p += object -> atoms; if (object -> prev) { if (object -> next) { object -> prev -> next = object -> next; object -> next -> prev = object -> prev; tmp_obj = object; object = object -> next; g_free (tmp_obj); } else { object -> prev -> next = NULL; g_free (object); object = NULL; } } else { if (object -> next) { edit -> to_be_inserted[act] = object -> next; object = object -> next; g_free (object -> prev); object -> prev = NULL; } else { g_free (edit -> to_be_inserted[act]); edit -> to_be_inserted[act] = NULL; object = NULL; } } } else { object = object -> next; } } nmols += i; edit -> coord -> totcoord[2] += i; edit -> add_spec = o; } #ifdef DEBUG if (asearch -> action == INSERT && extra) { g_debug ("Project coord before insert:"); if (this_proj -> natomes) { print_coord_info (this_proj, this_proj -> coord); } else { g_debug (" *** None *** "); } g_debug ("Coord info after object insert:"); print_coord_info (NULL, edit -> coord); } #endif if (asearch -> action == DISPL && remove == 0) return -1; if (asearch -> action == RANMOVE && remove == 0) return -1; if (asearch -> action == REMOVE && remove == 0) return -1; if ((asearch -> action == INSERT || asearch -> action == REPLACE) && extra == 0) return extra; if (asearch -> action == REMOVE && remove > this_proj -> natomes) return -1; if ((asearch -> action != DISPL && asearch -> action != RANMOVE) || (asearch -> passivating && asearch -> filter < 3) || (asearch -> action == RANMOVE && asearch -> passivating && asearch -> object < 2) || (asearch -> action == RANMOVE && ! asearch -> passivating && ! asearch -> object)) { this_proj -> modelgl -> bonding = FALSE; this_proj -> coord -> totcoord[3] = 0; if (this_proj -> modelgl -> adv_bonding[1]) { for (i=0; i<2; i++) { if (this_proj -> modelgl -> anim -> last -> img -> color_map[i] == 4 || this_proj -> modelgl -> anim -> last -> img -> color_map[i] == 5) { #ifdef GTK3 // GTK3 Menu Action To Check if (this_proj -> modelgl -> color_styles[i*ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[i*ATOM_MAPS], TRUE); set_color_map (this_proj -> modelgl -> color_styles[i*ATOM_MAPS], & this_proj -> modelgl -> colorp[i*ATOM_MAPS][0]); } #endif } } } this_proj -> modelgl -> adv_bonding[1] = FALSE; if (this_proj -> force_field[0]) { g_free (this_proj -> force_field[0]); this_proj -> force_field[0] = NULL; } if (asearch -> action != DISPL && asearch -> action != RANMOVE) { if (this_proj -> modelgl -> custom_map) { g_free (this_proj -> modelgl -> custom_map); this_proj -> modelgl -> custom_map = NULL; for (i=0; i<2; i++) { j = i*ATOM_MAPS; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); set_color_map (this_proj -> modelgl -> color_styles[j], & this_proj -> modelgl -> colorp[j][0]); if (i) widget_set_sensitive (this_proj -> modelgl -> color_styles[j+6], 0); #endif } } } } // Clean curves data if (this_proj -> analysis) { for (i=0 ; i analysis[i]) { this_proj -> analysis[i] -> calc_ok = FALSE; hide_curves (this_proj, i); erase_curves (this_proj, i); } } } if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (i=0; i<5; i++) { clean_rings_data (i, this_proj -> modelgl); } #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } clean_volumes_data (this_proj -> modelgl); if (asearch -> action == REMOVE && remove == this_proj -> natomes) { clean_this_project (this_proj); return remove; } atom * new_list = NULL; atom * tmp_new = NULL; gboolean * showfrag; int ** tmpgeo[2]; int new_atoms = 0; int * old_id = NULL; if (this_proj -> natomes) { old_id = allocint (this_proj -> natomes); tmp_rem = to_rem; for (i=0; i natomes; i++) { if (tmp_rem && tmp_rem -> id == i) { old_id[i] = -(i+1); if (asearch -> action == DISPL || asearch -> action == RANMOVE || passivate) { if (new_list) { tmp_new -> next = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new = new_list; } new_atoms ++; } if (tmp_rem -> next != NULL) tmp_rem = tmp_rem -> next; } else { old_id[i] = i+1; if (new_list) { tmp_new -> next = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new = new_list; } new_atoms ++; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { check_coord_modification (this_proj, old_id, new_list, NULL, TRUE, passivate); // old_id for atoms to be passivated (removed then replaced) have been corrected to be > 0, // accordingly the total number of atoms to save must be updated if (passivate) { i = 0; tmp_new = new_list; while (tmp_new) { if (old_id[tmp_new -> id] > 0) i++; tmp_new = tmp_new -> next; } new_atoms = i; } } // Preserving coordination information for (i=0; i<2; i++) { j= this_proj -> nspec + edit -> add_spec; tmpgeo[i] = g_malloc0(j*sizeof*tmpgeo[i]); for (k=0; k coord -> ntg[i][k]); } } tmp_new = new_list; while (tmp_new) { j = tmp_new -> id; k = tmp_new -> sp; // g_debug (" id= %d, c[0]= %d, c[1]= %d", j, tmp_new -> coord[0], tmp_new -> coord[1]); if (! passivate || old_id[j] > 0) { for (l=0; l<2; l++) { m = tmp_new -> coord[l]; if (m >= edit -> coord -> ntg[l][k]) { g_warning (_("Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d"), j+1, k, l, m, l, k, edit -> coord -> ntg[l][k]); } tmpgeo[l][k][m] ++; } } tmp_new = tmp_new -> next; } if (asearch -> action != INSERT && asearch -> action != REPLACE) { showfrag = remove_bonds_from_project (this_proj, NULL, old_id, new_list, (asearch -> action == DISPL || asearch -> action == RANMOVE) ? FALSE : TRUE, passivate); } else { i = edit -> coord -> totcoord[2]; j = this_proj -> coord -> totcoord[2]; showfrag = allocbool (i); for (k=0; k modelgl -> anim -> last -> img -> show_coord[2][k]; } for (k=j; k coord -> species*sizeof*tmpgeo[i]); for (j=0; j coord -> species; j++) { tmpgeo[i][j] = allocint (edit -> coord -> ntg[i][j]); } } showfrag = allocbool(edit -> coord -> totcoord[2]); for (j=0; j coord -> totcoord[2]; j++) { showfrag[j] = TRUE; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { free_dummies (to_rem); to_rem = NULL; to_add = NULL; tmp_new = new_list; i = k = 0; while (tmp_new) { if (old_id[tmp_new -> id] > 0 || asearch -> action != REMOVE) { if (tmp_new -> pick[0] || tmp_new -> pick[1]) { if (to_add != NULL) { tmp_add -> next = g_malloc0(sizeof*tmp_add); tmp_add -> next -> prev = tmp_add; tmp_add = tmp_add -> next; } else { to_add = g_malloc0(sizeof*to_add); tmp_add = to_add; } for (j=0; j<2; j++) tmp_add -> pick[j] = tmp_new -> pick[j]; tmp_add -> id = i; k ++; } i ++; } tmp_new = tmp_new -> next; } } else { tmp_add = to_add; if (new_list) { tmp_new = new_list; while (tmp_new -> next) tmp_new = tmp_new -> next; } while (tmp_add) { if (new_list) { tmp_new -> next = g_malloc0(sizeof*tmp_new -> next); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = g_malloc0(sizeof*new_list); tmp_new = new_list; } tmp_new -> sp = tmp_add -> type; tmp_new -> show[0] = tmp_new -> show[1] = TRUE; tmp_new -> x = tmp_add -> xyz[0]; tmp_new -> y = tmp_add -> xyz[1]; tmp_new -> z = tmp_add -> xyz[2]; for (i=0; i<4; i++) tmp_new -> coord[i] = tmp_add -> coord[i]; i = tmp_new -> sp; for (j=0; j<2; j++) { k = tmp_add -> coord[j]; tmpgeo[j][i][k] ++; } // Neighbors tmp_new -> numv = tmp_add -> numv; if (tmp_new -> numv) tmp_new -> vois = duplicate_int (tmp_new -> numv, tmp_add -> vois); new_atoms ++; tmp_add -> pick[0] = TRUE; tmp_add = tmp_add -> next; } atomic_object * object = object_list; i = 0; while (object) { i += object -> bonds; object = object -> next; } int ** new_bond_list = allocdint (i, 2); i = j = 0; object = object_list; while (object) { add_bonds_to_list (new_bond_list, i, j, object); i += object -> atoms; j += object -> bonds; if (object -> next) { object = object -> next; g_free (object -> prev); } else { g_free (object); object = NULL; } } add_bonds_to_project (this_proj, remove, j, new_bond_list); } if (this_proj -> natomes) { opengl_project_changed (this_proj -> id); is_selected = selected_aspec = -1; gboolean vis_stat = opengl_project -> modelgl -> atom_win -> visible; opengl_project -> modelgl -> atom_win -> visible = FALSE; i = opengl_project -> modelgl -> selection_mode; opengl_project -> modelgl -> selection_mode = ATOMS; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = NSELECTION-1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = i; opengl_project -> modelgl -> atom_win -> visible = vis_stat; } if (this_proj -> nspec) { g_free (this_proj -> atoms[0]); } else { this_proj -> atoms = g_malloc0(sizeof*this_proj -> atoms); } int rem_spec; int * spid, * spdel; spid = allocint (this_proj -> nspec + edit -> add_spec); spdel = allocint (this_proj -> nspec + edit -> add_spec); int * atid = allocint (new_atoms); this_proj -> atoms[0] = g_malloc0(new_atoms*sizeof*this_proj -> atoms[0]); tmp_new = new_list; i = 0; while (tmp_new) { if (asearch -> action != REMOVE || old_id[tmp_new -> id] > 0) { this_proj -> atoms[0][i] = * duplicate_atom (tmp_new); this_proj -> atoms[0][i].id = i; spid[this_proj -> atoms[0][i].sp] ++; atid[i] = this_proj -> atoms[0][i].sp; this_proj -> atoms[0][i].pick[0] = this_proj -> atoms[0][i].pick[1] = FALSE; i ++; } if (tmp_new -> next) { tmp_new = tmp_new -> next; g_free (tmp_new -> prev); } else { g_free (tmp_new); tmp_new = NULL; } } if (old_id) g_free (old_id); old_id = NULL; rem_spec = 0; for (i=0; i nspec + edit -> add_spec; i++) { if (spid[i] == 0) { // A chem spec is being removed ... shit that's more work rem_spec ++; } else { spdel[i] = rem_spec; } } if (rem_spec || edit -> add_spec) { int new_spec = this_proj -> nspec - rem_spec + edit -> add_spec; chemical_data * newchem = alloc_chem_data (new_spec); i = 0; for (j=0; j nspec; j++) { if (spid[j] != 0) { newchem -> nsps[i] = this_proj -> chemistry -> nsps[j]; newchem -> formula[i] = this_proj -> chemistry -> formula[j]; newchem -> label[i] = g_strdup_printf ("%s", this_proj -> chemistry -> label[j]); newchem -> element[i] = g_strdup_printf ("%s", this_proj -> chemistry -> element[j]); for (k=0; k chem_prop[k][i] = this_proj -> chemistry -> chem_prop[k][j]; } if (j < this_proj -> nspec-1) { k = i; for (l=j; l nspec; l++) { if (spid[l] != 0) { newchem -> cutoffs[i][k] = newchem -> cutoffs[k][i] = this_proj -> chemistry -> cutoffs[j][l]; k ++; } } } newchem -> nsps[i] = spid[j]; i ++; } } j = (this_proj -> nspec) ? 1 : 0; for (k=0; k add_spec - j*rem_spec; k++) { l = this_proj -> nspec + k; if ( spid[l]) { newchem -> nsps[i] = spid[l]; newchem -> formula[i] = 0; newchem -> chem_prop[CHEM_Z][i] = newchem -> chem_prop[CHEM_X][i] = edit -> new_z[l]; m = (int)newchem -> chem_prop[CHEM_Z][i]; newchem -> label[i] = g_strdup_printf ("%s", periodic_table_info[m].lab); newchem -> element[i] = g_strdup_printf ("%s", periodic_table_info[m].name); n = 0; newchem -> chem_prop[CHEM_M][i] = set_mass_ (& m); newchem -> chem_prop[CHEM_R][i] = set_radius_ (& m, & n); newchem -> chem_prop[CHEM_N][i] = set_neutron_ (& m); newchem -> chem_prop[CHEM_X][i] = newchem -> chem_prop[CHEM_Z][i]; i ++; } } initcutoffs (newchem, new_spec); for (i=0; i atoms[0][i].sp = atid[i]; } if (this_proj -> chemistry) g_free (this_proj -> chemistry); this_proj -> chemistry = NULL; this_proj -> chemistry = duplicate_chemical_data (new_spec, newchem); g_free (newchem); } else { g_free (this_proj -> chemistry -> nsps); this_proj -> chemistry -> nsps = duplicate_int (this_proj -> nspec, spid); } g_free (atid); i = activep; if (! this_proj -> natomes) { this_proj -> natomes = new_atoms; if (! this_proj -> cell.crystal) center_molecule (this_proj); } else { this_proj -> natomes = new_atoms; } // Active project changes in the next call recover_opengl_data (this_proj, nmols, edit -> add_spec, rem_spec, spid, spdel, tmpgeo, showfrag); if (showfrag) { g_free (showfrag); showfrag = NULL; } #ifdef DEBUG if (this_proj -> natomes) { print_coord_info (this_proj, this_proj -> coord); } else { g_debug (" *** None *** "); } #endif g_free (spdel); g_free (edit -> new_z); g_free (spid); for (j=0; j<2; j++) { g_free (tmpgeo[j]); } init_curves_and_calc (active_project); if (active_box) { if (test_vol(active_box -> param, active_box -> vect)) { if (active_project -> analysis) { if (active_project -> analysis[GDR]) { active_project -> analysis[GDR] -> avail_ok = TRUE; active_project -> analysis[GDK] -> avail_ok = TRUE; } } } } init_atomes_analysis (active_project, TRUE); active_project -> dmtx = FALSE; active_project -> run = (active_project -> natomes) ? TRUE : FALSE; chemistry_ () ; if (asearch -> recompute_bonding) { active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } // Then back to the previous active project active_project_changed (i); int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; tmp_add = to_add; for (i=0; i<2; i++) save_all_selections (this_proj -> modelgl, i); while (tmp_add != NULL) { for (i=0; i<2; i++) { if (tmp_add -> pick[i]) { process_selected_atom (this_proj, this_proj -> modelgl, tmp_add -> id, 0, 0, i); } } tmp_add = tmp_add -> next; } for (i=0; i<2; i++) update_all_selections (this_proj -> modelgl, i); if (to_add != NULL) free_dummies (to_add); if (visible && (asearch -> action != DISPL && asearch -> action != RANMOVE)) { for (i=0; i<3; i++) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; init_coordinates (this_proj, i, FALSE, TRUE); } this_proj -> modelgl -> was_moved = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[0] = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[1] = FALSE; if (this_proj -> modelgl -> atom_win -> msd) g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); if (this_proj -> modelgl -> atom_win -> msd_all) g_free (this_proj -> modelgl -> atom_win -> msd_all); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (this_proj -> nspec); for (i=0; i<2; i++) clean_motion_search (this_proj, this_proj -> modelgl -> search_widg[2+4*i], i); motion_to_zero (this_proj -> modelgl -> search_widg[2]); } else if (visible && (asearch -> action == DISPL || asearch -> action == RANMOVE)) { this_proj -> modelgl -> was_moved = TRUE; clean_motion_search (this_proj, this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2], (asearch -> action == DISPL) ? 1 : 0); if (asearch -> action == RANMOVE) motion_to_zero (this_proj -> modelgl -> search_widg[2]); } else if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { g_free (this_proj -> modelgl -> saved_coord[1]); this_proj -> modelgl -> saved_coord[1] = save_coordinates (this_proj, 1); this_proj -> modelgl -> baryc[1] = get_bary (this_proj, 1); } update (this_proj -> modelgl); #ifdef GTK4 update_menu_bar (this_proj -> modelgl); #endif clean_coord_window (this_proj); switch (asearch -> action) { case REPLACE: return extra; break; case INSERT: return extra; break; case REMOVE: return remove; break; default: return 0; break; } } /*! \fn void clean_all_trees (atom_search * asearch, project * this_proj) \brief clean all tree models in the 'model edition' window \param asearch the target atom search \param this_proj the target project */ void clean_all_trees (atom_search * asearch, project * this_proj) { int i, j; for (i=0; i<5; i++) { if (i == 3) { clean_picked_and_labelled (this_proj -> modelgl -> search_widg[i+2], TRUE); if (this_proj -> modelgl -> search_widg[INSERT] -> in_selection) { allocate_todo (this_proj -> modelgl -> search_widg[i+2], this_proj -> modelgl -> search_widg[INSERT] -> in_selection); atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_inserted[1]; j = 0; while (object) { object -> id = j; j ++; object = object -> next; } update_search_tree (this_proj -> modelgl -> search_widg[i+2]); } } else if (this_proj -> modelgl -> search_widg[i+2] -> atom_tree) { j = get_asearch_filter (this_proj -> modelgl -> search_widg[i+2]); if ((j == 3 && ! this_proj -> modelgl -> adv_bonding[0]) || (j == 4 && ! this_proj -> modelgl -> adv_bonding[1])) { combo_set_active (this_proj -> modelgl -> search_widg[i+2] -> filter_box, 0); set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), this_proj -> modelgl -> search_widg[i+2]); } else if (asearch -> action != DISPL && asearch -> action != RANMOVE) { set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), this_proj -> modelgl -> search_widg[i+2]); } update_search_tree (this_proj -> modelgl -> search_widg[i+2]); } if ((i == 0 || i == 4) && this_proj -> modelgl -> search_widg[i+2] -> todo_size >= GTK_LIMIT) { re_populate_tree_search (this_proj -> modelgl -> search_widg[i+2]); } } if ((this_proj -> modelgl -> atom_win -> adv_bonding[0] && ! this_proj -> modelgl -> adv_bonding[0]) || (this_proj -> modelgl -> atom_win -> adv_bonding[1] && ! this_proj -> modelgl -> adv_bonding[1])) { int j; for (i=0; i<5; i++) { if (i != 3) { if (this_proj -> modelgl -> search_widg[i+2] -> passivating) { j = (this_proj -> modelgl -> search_widg[i+2] -> object < 2) ? 3 : 2; } else { j = (! this_proj -> modelgl -> search_widg[i+2] -> object) ? 3 : 2; } if (GTK_IS_WIDGET(this_proj -> modelgl -> search_widg[i+2] -> filter_box)) { if (this_proj -> modelgl -> atom_win -> adv_bonding[1] && ! this_proj -> modelgl -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *) this_proj -> modelgl -> search_widg[i+2] -> filter_box, j+1); } if (this_proj -> modelgl -> atom_win -> adv_bonding[0] && ! this_proj -> modelgl -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *) this_proj -> modelgl -> search_widg[i+2] -> filter_box, j); } } } } } for (i=0 ;i<2; i++) this_proj -> modelgl -> atom_win -> adv_bonding[i] = this_proj -> modelgl -> adv_bonding[i]; } /*! \fn void apply_action (project * this_proj, atom_search * asearch) \brief apply edition action \param this_proj the target project \param asearch the target atom search */ void apply_action (project * this_proj, atom_search * asearch) { gchar * str; gchar * appl[3] = {i18n("replaced"), i18n("removed"), i18n("inserted")}; int k, l; l = 0; gboolean visible = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; if (asearch -> action == REPLACE || asearch -> action == REMOVE) { to_remove_this_list_of_objects (this_proj, asearch); l = action_atoms_from_project (this_proj, remove_search, visible); g_free (remove_search); remove_search = NULL; } k = (asearch -> action == REMOVE) ? l : action_atoms_from_project (this_proj, asearch, visible); if (asearch -> action != DISPL && asearch -> action != RANMOVE) { switch (k) { case 0: str = g_strdup_printf (_("No atoms to be %s !"), _(appl[asearch -> action-3])); break; default: if (asearch -> action == REPLACE && l) { if (asearch -> pointer[0].c == 8) l += asearch -> int_b - k; str = g_strdup_printf (_("%d atom(s) removed !\n%d atom(s) inserted !"), l, k); } else { str = g_strdup_printf (_("%d atom(s) %s !"), k, _(appl[asearch -> action-3])); } break; } if (this_proj -> modelgl -> atom_win -> win) { show_info (str, 0, this_proj -> modelgl -> atom_win -> win); } else { show_info (str, 0, this_proj -> modelgl -> win); } g_free (str); } if (visible) { if (k || l) { if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> visible) clean_all_trees (asearch, this_proj); if (this_proj -> modelgl -> atom_win -> msd) { g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = NULL; } this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); } } } clean_other_window_after_edit (this_proj); } /*! \fn void prepare_random_action (project * this_proj, atom_search * asearch) \brief prepare random action \param this_proj the target project \param asearch the target atom search */ void prepare_random_action (project * this_proj, atom_search * asearch) { int i, j, k, l, m, n, o, p, q; double test, prob; atomic_object * object = NULL; atomic_object * tmp_oba, * tmp_obb; molecule * molfc; int max_num, total_num; gboolean lets_do_this = (asearch -> action == REMOVE || (asearch -> action == REPLACE && this_proj -> modelgl -> atom_win -> to_be_inserted[0])) ? TRUE : FALSE; if (lets_do_this) { int filter = get_asearch_filter (asearch); int obj = get_asearch_object (asearch); int num_elem = asearch -> todo_size; int * random_todo = duplicate_int (num_elem, asearch -> todo); total_num = (asearch -> mode && filter > 2 && obj) ? this_proj -> coord -> totcoord[2] : this_proj -> natomes; g_free (asearch -> todo); allocate_todo (asearch, total_num); if (asearch -> action == REPLACE && this_proj -> modelgl -> atom_win -> to_be_inserted[0]) { tmp_oba = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; object = duplicate_atomic_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb = tmp_obb -> next; } g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[0]); this_proj -> modelgl -> atom_win -> to_be_inserted[0] = NULL; } gboolean doit; asearch -> in_selection = 0; tmp_oba = object; for (i=0; i chemistry -> nsps[i]; break; case 1: for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].numv == i) max_num ++; } break; case 2: j = 0; for (k=0; k nspec; k++) { j += this_proj -> coord -> ntg[1][k]; if (j > i) break; } l = 0; for (m=0; m coord -> ntg[1][m]; p = i - l; for (l=0; l natomes; l++) { if (this_proj -> atoms[0][l].sp == k && this_proj -> atoms[0][l].coord[1] == p) max_num ++; } break; case 3: if (obj) { max_num = this_proj -> coord -> totcoord[2]; } else { for (l=0; l natomes; l++) { if (this_proj -> atoms[0][l].coord[2] == i) max_num ++; } } break; case 4: molfc = & this_proj -> modelfc -> mols[0][i]; if (obj) { max_num = molfc -> multiplicity; } else { max_num = molfc -> natoms*molfc -> multiplicity; } break; } test = 1.0 / max_num; j = 0; // Using CPU time to randomize clock_t begin = clock(); k = (int)begin; while (j < random_todo[i]) { l = 0; for (m=0; m todo[m]) { doit = FALSE; if (filter < 3 || ! obj) { n = this_proj -> atoms[0][m].sp; if (this_proj -> atoms[0][m].pick[0] == asearch -> status || asearch -> status == 2) { switch (filter) { case 0: if (n == i) doit = TRUE; break; case 1: if (this_proj -> atoms[0][m].numv == i) doit = TRUE; break; case 2: o = this_proj -> atoms[0][m].coord[1]; for (q=0;q coord -> ntg[1][q]; if (o == i) doit = TRUE; break; default: if (this_proj -> atoms[0][m].coord[filter-1] == i) doit = TRUE; break; } } } else if (filter == 3) { doit = TRUE; } else { for (n=0; n multiplicity; n++) { if (molfc -> fragments[n] == m) { doit = TRUE; break; } } } if (doit) { l ++; o = (o+1)*max_num*m; prob = random3_(& n); if (prob >= (l-1)*test && prob < l*test) { j ++; asearch -> todo[m] = 1; if (asearch -> action == REPLACE) { if (this_proj -> modelgl -> atom_win -> to_be_inserted[0] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[0] = duplicate_atomic_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb -> next -> prev = tmp_obb; tmp_obb = tmp_obb -> next; } tmp_obb -> id = m; } asearch -> in_selection ++; if (j == random_todo[i]) break; } } } } } if (asearch -> action == REPLACE) { if (tmp_oba -> next != NULL) tmp_oba = tmp_oba -> next; } } } if (asearch -> action == REPLACE) g_free (object); if (random_todo) g_free (random_todo); int old_filter = asearch -> filter; // if (asearch -> mode && obj && asearch -> filter == 3) asearch -> filter = 2; apply_action (this_proj, asearch); asearch -> filter = old_filter; } } /*! \fn gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing) \brief check for object(s) in selection to apply action \param this_proj the target project \param asearch the target atom search \param editing actually going for action (1) or simply counting elements (0) */ gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing) { int i, j, k, l, m, n, o, p, q; gboolean taking_action = FALSE; if (asearch -> action == INSERT) { taking_action = TRUE; } else { i = j = 0; if (asearch -> mode) { for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i++; if (asearch -> action == REPLACE) { if (get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[0], -(l+3), 0)) { if (asearch -> todo[l]) j ++; } } else { if (asearch -> pick[l] && asearch -> todo[l]) j ++; } } if (asearch -> action == REMOVE && i == j) { taking_action = TRUE; } else if (asearch -> action == REPLACE && i == j && i == asearch -> in_selection) { taking_action = TRUE; } } else { m = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; int filter = get_asearch_filter (asearch); int object = get_asearch_object (asearch); int pass_size; int * pass_todo = NULL; atomic_object * passivating_object = NULL; atomic_object * pao = NULL; atomic_object * pio = NULL; float * tmp_msd = NULL; if (asearch -> passivating) { if (object > 1 && filter > 2) { pass_size = this_proj -> coord -> totcoord[filter - 1]; } else { pass_size = this_proj -> natomes; } pass_todo = allocint (pass_size); if (asearch -> action == RANMOVE) tmp_msd = allocfloat (this_proj -> natomes); } switch (asearch -> action) { case DISPL: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i ++; if (editing) { if (asearch -> todo[l]) { if (asearch -> passivating) { if (object < 2) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; default: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; } } else { switch (filter) { case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; default: for (n=0; n coord -> totcoord[filter -1]; n++) { if (n == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; } } } } } } break; case REPLACE: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i ++; pio = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[m], l, 0); if (pio) { if (asearch -> todo[l]) { j ++; if (asearch -> passivating) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } default: if (object < 2) { for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } } else { pass_todo[l] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = l; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = l; pao -> next -> prev = pao; pao = pao -> next; } k ++; } break; } } } } } break; case REMOVE: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) { i ++; if (asearch -> passivating) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = 1; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = 1; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = 1; k ++; } } default: if (object < 2) { for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = 1; k ++; } } } else { pass_todo[l] = 1; k ++; } break; } } } } break; case RANMOVE: for (l=0; l todo_size; l++) { if (asearch -> passivating) { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd_all[l] > 0.0) { i ++; if (object < 2) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; default: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; } } else { switch (filter) { case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; default: for (n=0; n coord -> totcoord[filter -1]; n++) { if (n == l) { pass_todo[n] = asearch -> todo[l]; k ++; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; } } } } else if (object && filter > 2) { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd_all[l] > 0.0) i ++; } else { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd[l] > 0.0) i ++; } } break; } if (asearch -> action == REMOVE && i) { taking_action = TRUE; } else if (asearch -> action == REPLACE) { if (asearch -> in_selection == i && i == j) taking_action = TRUE; } else { asearch -> in_selection = i; if (i) taking_action = TRUE; } if (asearch -> passivating && taking_action && editing) { g_free (asearch -> todo); asearch -> todo = duplicate_int (pass_size, pass_todo); g_free (pass_todo); asearch -> todo_size = pass_size; asearch -> in_selection = k; switch (asearch -> action) { case DISPL: this_proj -> modelgl -> atom_win -> to_be_moved[0] = passivating_object; break; case REPLACE: this_proj -> modelgl -> atom_win -> to_be_inserted[m] = passivating_object; break; case RANMOVE: if (this_proj -> modelgl -> atom_win -> msd) g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = duplicate_float (this_proj -> natomes, tmp_msd); g_free (tmp_msd); this_proj -> modelgl -> atom_win -> to_be_moved[1] = passivating_object; break; } } } } return taking_action; } /*! \fn atom_search * duplicate_atom_search (atom_search * asearch) \brief duplicate atom search data structure \param asearch */ atom_search * duplicate_atom_search (atom_search * asearch) { atom_search * bsearch = g_malloc0(sizeof*bsearch); bsearch -> search_digit = asearch -> search_digit; bsearch -> proj = asearch -> proj; bsearch -> action = asearch -> action; bsearch -> status = asearch -> status; bsearch -> mode = asearch -> mode; bsearch -> object = asearch -> object; bsearch -> filter = asearch -> filter; bsearch -> search_digit = asearch -> search_digit; bsearch -> spec_to_add = asearch -> spec_to_add; bsearch -> num_to_add = asearch -> num_to_add; bsearch -> in_selection = asearch -> in_selection; bsearch -> passivating = asearch -> passivating; bsearch -> was_selected = asearch -> was_selected; bsearch -> recompute_bonding = asearch -> recompute_bonding; bsearch -> set_for_all = asearch -> set_for_all; bsearch -> int_b = asearch -> int_b; int i = get_asearch_num_objects (asearch); bsearch -> lab = duplicate_int (i, asearch -> lab); bsearch -> pick = duplicate_int (i, asearch -> lab); bsearch -> todo_size = asearch -> todo_size; bsearch -> todo = duplicate_int (bsearch -> todo_size, asearch -> todo); for (i=0; i<6; i++) { bsearch -> pointer[i].a = asearch -> pointer[i].a; bsearch -> pointer[i].b = asearch -> pointer[i].b; bsearch -> pointer[i].c = asearch -> pointer[i].c; } return bsearch; } /*! \fn G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) \brief take edition action \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i; i = id -> c; atom_search * this_search = duplicate_atom_search (this_proj -> modelgl -> search_widg[i]); if (do_we_have_objects_in_selection(this_proj, this_search, TRUE)) { if (i != RANMOVE) { if (this_search -> mode) { prepare_random_action (this_proj, this_search); } else { apply_action (this_proj, this_search); } } else { random_move (this_proj, this_search); clean_all_trees (this_search, this_proj); } if (this_proj -> modelgl -> atom_win -> visible) { for (i=0; i<5; i++) widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), i), this_proj -> natomes); widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), 3), 1); } } else { if (i < RANMOVE) { show_info (_("Nothing to be done, check selection !"), 0, this_proj -> modelgl -> atom_win -> win); } else { show_info (_("Nothing to be done, check selection and/or MSD !"), 0, this_proj -> modelgl -> atom_win -> win); } } } atomes_1.3.1/src/opengl/math_3d.h0000664000175000017500000010066715212624223016262 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file math_3d.h * @short Functions for OpenGL math * @author Sébastien Le Roux * @author Stephan Soller * @author Tobias Malmsheimer */ /* * This header file: 'math_3d.h' * * Contains: - Functions for OpenGL math */ /* The following was adapted from the file Math 3D v1.0 By Stephan Soller and Tobias Malmsheimer The original file was modified and completed to match 'atomes' needs. */ /* Math 3D is a compact C99 library meant to be used with OpenGL. It provides basic 3D vector and 4x4 matrix operations as well as functions to create transformation and projection matrices. The OpenGL binary layout is used so you can just upload vectors and matrices into shaders and work with them without any conversions. It's an stb style single header file library. Define MATH_3D_IMPLEMENTATION before you include this file in *one* C file to create the implementation. QUICK NOTES - If not explicitly stated by a parameter name all angles are in radians. - The matrices use column-major indices. This is the same as in OpenGL and GLSL. The matrix documentation below for details. - Matrices are passed by value. This is probably a bit inefficient but simplifies code quite a bit. Most operations will be inlined by the compiler anyway so the difference shouldn't matter that much. A matrix fits into 4 of the 16 SSE2 registers anyway. If profiling shows significant slowdowns the matrix type might change but ease of use is more important than every last percent of performance. - When combining matrices with multiplication the effects apply right to left. This is the convention used in mathematics and OpenGL. Source: https://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations Direct3D does it differently. - The `m4_mul_pos()` and `m4_mul_dir()` functions do a correct perspective divide (division by w) when necessary. This is a bit slower but ensures that the functions will properly work with projection matrices. If profiling shows this is a bottleneck special functions without perspective division can be added. But the normal multiplications should avoid any surprises. - The library consistently uses a right-handed coordinate system. The old `glOrtho()` broke that rule and `m4_ortho()` has be slightly modified so you can always think of right-handed cubes that are projected into OpenGLs normalized device coordinates. - Special care has been taken to document all complex operations and important sources. Most code is covered by test cases that have been manually calculated and checked on the whiteboard. Since indices and math code is prone to be confusing we used pair programming to avoid mistakes. FURTHER IDEAS These are ideas for future work on the library. They're implemented as soon as there is a proper use case and we can find good names for them. - bool v3_is_null(vec3_t v, float epsilon) To check if the length of a vector is smaller than `epsilon`. - vec3_t v3_length_default(vec3_t v, float default_length, float epsilon) Returns `default_length` if the length of `v` is smaller than `epsilon`. Otherwise same as `v3_length()`. - vec3_t v3_norm_default(vec3_t v, vec3_t default_vector, float epsilon) Returns `default_vector` if the length of `v` is smaller than `epsilon`. Otherwise the same as `v3_norm()`. - mat4_t m4_invert(mat4_t matrix) Matrix inversion that works with arbitrary matrices. `m4_invert_affine()` can already invert translation, rotation, scaling, mirroring, reflection and shearing matrices. So a general inversion might only be useful to invert projection matrices for picking. But with orthographic and perspective projection it's probably simpler to calculate the ray into the scene directly based on the screen coordinates. VERSION HISTORY v1.0 2016-02-15 Initial release **/ #ifndef MATH_3D_H_ #define MATH_3D_H_ #include #include // Define PI directly because we would need to define the _BSD_SOURCE or // _XOPEN_SOURCE feature test macros to get it from math.h. That would be a // rather harsh dependency. So we define it directly if necessary. #ifndef M_PI #define M_PI 3.14159265358979323846 #endif // // 3D vectors // // Use the `vec3()` function to create vectors. All other vector functions start // with the `v3_` prefix. // // The binary layout is the same as in GLSL and everything else (just 3 floats). // So you can just upload the vectors into shaders as they are. // typedef struct { float x, y, z; } vec3_t; static inline vec3_t vec3(float x, float y, float z) { return (vec3_t){ x, y, z }; } static inline vec3_t v3_add (vec3_t a, vec3_t b) { return (vec3_t){ a.x + b.x, a.y + b.y, a.z + b.z }; } static inline vec3_t v3_adds (vec3_t a, float s) { return (vec3_t){ a.x + s, a.y + s, a.z + s }; } static inline vec3_t v3_sub (vec3_t a, vec3_t b) { return (vec3_t){ a.x - b.x, a.y - b.y, a.z - b.z }; } static inline vec3_t v3_subs (vec3_t a, float s) { return (vec3_t){ a.x - s, a.y - s, a.z - s }; } static inline vec3_t v3_mul (vec3_t a, vec3_t b) { return (vec3_t){ a.x * b.x, a.y * b.y, a.z * b.z }; } static inline vec3_t v3_muls (vec3_t a, float s) { return (vec3_t){ a.x * s, a.y * s, a.z * s }; } static inline vec3_t v3_div (vec3_t a, vec3_t b) { return (vec3_t){ a.x / b.x, a.y / b.y, a.z / b.z }; } static inline vec3_t v3_divs (vec3_t a, float s) { return (vec3_t){ a.x / s, a.y / s, a.z / s }; } static inline float v3_length(vec3_t v) { return sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); } static inline vec3_t v3_norm (vec3_t v); static inline float v3_dot (vec3_t a, vec3_t b) { return a.x*b.x + a.y*b.y + a.z*b.z; } static inline vec3_t v3_proj (vec3_t v, vec3_t onto); static inline vec3_t v3_cross (vec3_t a, vec3_t b); static inline float v3_angle_between(vec3_t a, vec3_t b); /* Sébastien Le Roux - quaternions - 6/02/2017 */ typedef struct { float w, x, y, z; } vec4_t; static inline vec4_t vec4(float w, float x, float y, float z) { return (vec4_t){ w, x, y, z }; } static inline vec4_t v4_add (vec4_t a, vec4_t b) { return (vec4_t){ a.w + b.w, a.x + b.x, a.y + b.y, a.z + b.z }; } static inline vec4_t v4_adds (vec4_t a, float s) { return (vec4_t){ a.w + s, a.x + s, a.y + s, a.z + s }; } static inline vec4_t v4_sub (vec4_t a, vec4_t b) { return (vec4_t){ a.w - b.w, a.x - b.x, a.y - b.y, a.z - b.z }; } static inline vec4_t v4_subs (vec4_t a, float s) { return (vec4_t){ a.w - s, a.x - s, a.y - s, a.z - s }; } static inline vec4_t v4_mul (vec4_t a, vec4_t b) { return (vec4_t){ a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z }; } static inline vec4_t v4_muls (vec4_t a, float s) { return (vec4_t){ a.w * s, a.x * s, a.y * s, a.z * s }; } static inline vec4_t v4_div (vec4_t a, vec4_t b) { return (vec4_t){ a.w / b.w, a.x / b.x, a.y / b.y, a.z / b.z }; } static inline vec4_t v4_divs (vec4_t a, float s) { return (vec4_t){ a.w / s, a.x / s, a.y / s, a.z / s }; } static inline float v4_length(vec4_t v) { return sqrtf(v.w*v.w + v.x*v.x + v.y*v.y + v.z*v.z); } static inline vec4_t v4_norm (vec4_t v); static inline vec4_t v4_mul (vec4_t a, vec4_t b); // // 4x4 matrices // // Use the `mat4()` function to create a matrix. You can write the matrix // members in the same way as you would write them on paper or on a whiteboard: // // mat4_t m = mat4( // 1, 0, 0, 7, // 0, 1, 0, 5, // 0, 0, 1, 3, // 0, 0, 0, 1 // ) // // This creates a matrix that translates points by vec3(7, 5, 3). All other // matrix functions start with the `m4_` prefix. Among them functions to create // identity, translation, rotation, scaling and projection matrices. // // The matrix is stored in column-major order, just as OpenGL expects. Members // can be accessed by indices or member names. When you write a matrix on paper // or on the whiteboard the indices and named members correspond to these // positions: // // | m[0][0] m[1][0] m[2][0] m[3][0] | // | m[0][1] m[1][1] m[2][1] m[3][1] | // | m[0][2] m[1][2] m[2][2] m[3][2] | // | m[0][3] m[1][3] m[2][3] m[3][3] | // // | m00 m10 m20 m30 | // | m01 m11 m21 m31 | // | m02 m12 m22 m32 | // | m03 m13 m23 m33 | // // The first index or number in a name denotes the column, the second the row. // So m[i][j] denotes the member in the ith column and the jth row. This is the // same as in GLSL (source: GLSL v1.3 specification, 5.6 Matrix Components). // typedef union { // The first index is the column index, the second the row index. The memory // layout of nested arrays in C matches the memory layout expected by OpenGL. float m[4][4]; // OpenGL expects the first 4 floats to be the first column of the matrix. // So we need to define the named members column by column for the names to // match the memory locations of the array elements. struct { float m00, m01, m02, m03; float m10, m11, m12, m13; float m20, m21, m22, m23; float m30, m31, m32, m33; }; } mat4_t; static inline mat4_t mat4( float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33 ); static inline mat4_t m4_identity (); static inline mat4_t m4_translation (vec3_t offset); static inline mat4_t m4_scaling (vec3_t scale); static inline mat4_t m4_rotation_x (float angle_in_rad); static inline mat4_t m4_rotation_y (float angle_in_rad); static inline mat4_t m4_rotation_z (float angle_in_rad); static inline mat4_t m4_rotation (float angle_in_rad, vec3_t axis); // // Sébastien Le Roux - Quaternions - 6/02/2017 // static inline vec4_t axis_to_quat (vec3_t axis, float angle_in_rad); static inline mat4_t m4_quat_rotation (vec4_t q); static inline mat4_t m4_ortho (float left, float right, float bottom, float top, float back, float front); static inline mat4_t m4_perspective (float vertical_field_of_view_in_deg, float aspect_ratio, float near_view_distance, float far_view_distance); static inline mat4_t m4_frustum (float left, float right, float bottom, float top, float front, float back); static inline mat4_t m4_look_at (vec3_t from, vec3_t to, vec3_t up); static inline mat4_t m4_transpose (mat4_t matrix); static inline mat4_t m4_mul (mat4_t a, mat4_t b); static inline mat4_t m43_mul (mat4_t a, mat4_t b); static inline mat4_t m4_invert_affine(mat4_t matrix); static inline mat4_t m4_translate (mat4_t matrix, vec3_t translation); static inline vec3_t m4_mul_pos (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_coord (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_abc (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_dir (mat4_t matrix, vec3_t direction); static inline void m4_print (mat4_t matrix); static inline void m4_printp (mat4_t matrix, int width, int precision); static inline void m4_fprint (FILE* stream, mat4_t matrix); static inline void m4_fprintp (FILE* stream, mat4_t matrix, int width, int precision); // // 3D vector functions header implementation // static inline vec3_t v3_norm(vec3_t v) { float len = v3_length(v); if (len > 0.0) return (vec3_t){ v.x / len, v.y / len, v.z / len }; else return (vec3_t){ 0, 0, 0}; } static inline vec3_t v3_proj(vec3_t v, vec3_t onto) { return v3_muls(onto, v3_dot(v, onto) / v3_dot(onto, onto)); } static inline vec3_t v3_cross(vec3_t a, vec3_t b) { return (vec3_t){ a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x }; } static inline float v3_angle_between(vec3_t a, vec3_t b) { return acosf( v3_dot(a, b) / (v3_length(a) * v3_length(b)) ); } // // Sébastien Le Roux - Quaternions - 6/02/2017 // static inline vec4_t v4_norm(vec4_t v) { float len = v4_length(v); if (len > 0.0) return (vec4_t){ v.w / len, v.x / len, v.y / len , v.z / len}; else return (vec4_t){ 0, 0, 0, 0}; } static inline vec4_t q4_mul(vec4_t a, vec4_t b) { return (vec4_t){ a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x, a.z * b.x + a.x * b.z + a.y * b.w - a.w * b.y, a.z * b.y + a.y * b.z + a.w * b.x - a.x * b.w, a.z * b.z - (a.w * b.w + a.x * b.x + a.y * b.y)}; } // // Matrix functions header implementation // static inline mat4_t mat4( float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33 ) { return (mat4_t){ .m[0][0] = m00, .m[1][0] = m10, .m[2][0] = m20, .m[3][0] = m30, .m[0][1] = m01, .m[1][1] = m11, .m[2][1] = m21, .m[3][1] = m31, .m[0][2] = m02, .m[1][2] = m12, .m[2][2] = m22, .m[3][2] = m32, .m[0][3] = m03, .m[1][3] = m13, .m[2][3] = m23, .m[3][3] = m33 }; } static inline mat4_t m4_identity() { return mat4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_translation(vec3_t offset) { return mat4( 1, 0, 0, offset.x, 0, 1, 0, offset.y, 0, 0, 1, offset.z, 0, 0, 0, 1 ); } static inline mat4_t m4_scaling(vec3_t scale) { float x = scale.x, y = scale.y, z = scale.z; return mat4( x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_x(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( 1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_y(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_z(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_transpose(mat4_t matrix) { return mat4( matrix.m00, matrix.m01, matrix.m02, matrix.m03, matrix.m10, matrix.m11, matrix.m12, matrix.m13, matrix.m20, matrix.m21, matrix.m22, matrix.m23, matrix.m30, matrix.m31, matrix.m32, matrix.m33 ); } /** * Multiplication of two 4x4 matrices. * * Implemented by following the row times column rule and illustrating it on a * whiteboard with the proper indices in mind. * * Further reading: https://en.wikipedia.org/wiki/Matrix_multiplication * But note that the article use the first index for rows and the second for * columns. */ static inline mat4_t m4_mul(mat4_t a, mat4_t b) { mat4_t result; int i, j, k; for(i = 0; i < 4; i++) { for(j = 0; j < 4; j++) { float sum = 0; for(k = 0; k < 4; k++) { sum += a.m[k][j] * b.m[i][k]; } result.m[i][j] = sum; } } return result; } static inline mat4_t m43_mul(mat4_t a, mat4_t b) { mat4_t result; int i, j, k; for(i = 0; i < 4; i++) { for(j = 0; j < 3; j++) { float sum = 0; for(k = 0; k < 4; k++) { sum += a.m[k][j] * b.m[i][k]; } result.m[i][j] = sum; //if (i < 3 && result.m[i][j] != 0.0) result.m[i][j] /= fabs(sum); } } result.m03 = result.m13 = result.m23 = result.m33 = 0.0; return result; } #endif // MATH_3D_HEADER #ifndef MATH_3D_IMPLEMENTATION #define MATH_3D_IMPLEMENTATION /** * Creates a matrix to rotate around an axis by a given angle. The axis doesn't * need to be normalized. * * Sources: * * https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle */ static inline mat4_t m4_rotation (float angle_in_rad, vec3_t axis) { vec3_t normalized_axis = v3_norm(axis); float x = normalized_axis.x, y = normalized_axis.y, z = normalized_axis.z; float c = cosf(angle_in_rad), s = sinf(angle_in_rad); return mat4( c + x*x*(1-c), x*y*(1-c) - z*s, x*z*(1-c) + y*s, 0, y*x*(1-c) + z*s, c + y*y*(1-c), y*z*(1-c) - x*s, 0, z*x*(1-c) - y*s, z*y*(1-c) + x*s, c + z*z*(1-c), 0, 0, 0, 0, 1 ); } /* Sébastien Le Roux 08/07/2022 Rotation 3D, on x, y and z, providing angles in degrees [ 0 - 90 ] */ static inline mat4_t m4_rotation_anti_xyz (float alpha, float beta, float gamma) { mat4_t rot = m4_identity (); vec4_t qr; double pi = 3.141592653589793238462643383279502884197; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat (ax[2], - gamma*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[1], - beta*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[0], - alpha*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); return rot; } static inline mat4_t m4_rotation_xyz (float alpha, float beta, float gamma) { mat4_t rot = m4_identity (); vec4_t qr; double pi = 3.141592653589793238462643383279502884197; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat (ax[0], alpha*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[1], beta*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[2], gamma*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); return rot; } /* Sébastien Le Roux 06/02/2017 Quaternion rotation */ static inline vec4_t axis_to_quat (vec3_t axis, float angle_in_rad) { vec4_t qr; float half_angle = angle_in_rad/2.0; float n = sinf(half_angle)/v3_length(axis); qr.w = axis.x * n; qr.x = axis.y * n; qr.y = axis.z * n; qr.z = cosf(half_angle); return v4_norm (qr); } static inline vec4_t m4_mul_v4 (mat4_t mat, vec4_t vec) { int i; float out[4]; float in[4] = {vec.w, vec.x, vec.y, vec.z}; for (i=0; i<4; i++) { out[i] = in[0] * mat.m[0][i] + in[1] * mat.m[1][i] + in[2] * mat.m[2][i] + in[3] * mat.m[3][i]; } return vec4(out[0], out[1], out[2], out[3]); } static inline mat4_t m4_quat_rotation (vec4_t q) { // I consider that the quaternion is already normalized // vec4_t n_quat = v4_norm(q); return mat4( 1.0 - 2.0 * (q.x * q.x + q.y * q.y), 2.0 * (q.w * q.x + q.y * q.z), 2.0 * (q.y * q.w - q.x * q.z), 0, 2.0 * (q.w * q.x - q.y * q.z), 1.0 - 2.0 * (q.y * q.y + q.w * q.w), 2.0 * (q.x * q.y + q.w * q.z), 0, 2.0 * (q.y * q.w + q.x * q.z), 2.0 * (q.x * q.y - q.w * q.z), 1.0 - 2.0 * (q.x * q.x + q.w * q.w), 0, 0, 0, 0, 1 ); } static inline vec3_t v3_project (vec3_t worldpos, vec4_t viewport, mat4_t projection) { mat4_t mod = m4_mul(projection, m4_translation(worldpos)); vec4_t out = m4_mul_v4 (mod, vec4(0.0, 0.0, 0.0, 1.0)); if (out.z != 0.0) { out.z = 1.0 / out.z; out.w = out.z * out.w + 1.0; out.x = out.z * out.x + 1.0; out.y = out.z * out.y + 1.0; return vec3(out.w*viewport.y + viewport.w, out.x*viewport.z + viewport.x, out.y); } else { return vec3 (0.0, 0.0, -1.0); } } static inline vec3_t v3_un_project (vec3_t winpos, vec4_t viewport, mat4_t projection) { vec3_t in = vec3 (2.0*(winpos.x-viewport.w)/viewport.y - 1.0, 2.0*((viewport.z-winpos.y)-viewport.x)/viewport.z - 1.0, 2.0*winpos.z-1.0); return m4_mul_pos (m4_invert_affine(projection), in); } /** * Creates an orthographic projection matrix. It maps the right handed cube * defined by left, right, bottom, top, back and front onto the screen and * z-buffer. You can think of it as a cube you move through world or camera * space and everything inside is visible. * * This is slightly different from the traditional glOrtho() and from the linked * sources. These functions require the user to negate the last two arguments * (creating a left-handed coordinate system). We avoid that here so you can * think of this function as moving a right-handed cube through world space. * * The arguments are ordered in a way that for each axis you specify the minimum * followed by the maximum. Thats why it's bottom to top and back to front. * * Implementation details: * * To be more exact the right-handed cube is mapped into normalized device * coordinates, a left-handed cube where (-1 -1) is the lower left corner, * (1, 1) the upper right corner and a z-value of -1 is the nearest point and * 1 the furthest point. OpenGL takes it from there and puts it on the screen * and into the z-buffer. * * Sources: * * https://msdn.microsoft.com/en-us/library/windows/desktop/dd373965(v=vs.85).aspx * https://unspecified.wordpress.com/2012/06/21/calculating-the-gluperspective-matrix-and-other-opengl-matrix-maths/ */ static inline mat4_t m4_ortho(float left, float right, float bottom, float top, float back, float front) { float l = left, r = right, b = bottom, t = top, n = front, f = back; float tx = -(r + l) / (r - l); float ty = -(t + b) / (t - b); float tz = -(f + n) / (f - n); return mat4( 2 / (r - l), 0, 0, tx, 0, 2 / (t - b), 0, ty, 0, 0, 2 / (f - n), tz, 0, 0, 0, 1 ); } /** * Creates a perspective projection matrix for a camera. * * The camera is at the origin and looks in the direction of the negative Z axis. * `near_view_distance` and `far_view_distance` have to be positive and > 0. * They are distances from the camera eye, not values on an axis. * * `near_view_distance` can be small but not 0. 0 breaks the projection and * everything ends up at the max value (far end) of the z-buffer. Making the * z-buffer useless. * * The matrix is the same as `gluPerspective()` builds. The view distance is * mapped to the z-buffer with a reciprocal function (1/x). Therefore the z-buffer * resolution for near objects is very good while resolution for far objects is * limited. * * Sources: * * https://unspecified.wordpress.com/2012/06/21/calculating-the-gluperspective-matrix-and-other-opengl-matrix-maths/ */ static inline mat4_t m4_perspective(float vertical_field_of_view_in_deg, float aspect_ratio, float near_view_distance, float far_view_distance) { float fovy_in_rad = vertical_field_of_view_in_deg / 180 * M_PI; float f = 1.0f / tanf(fovy_in_rad / 2.0f); float ar = aspect_ratio; float nd = near_view_distance, fd = far_view_distance; return mat4( f / ar, 0, 0, 0, 0, f, 0, 0, 0, 0, (fd+nd)/(nd-fd), (2*fd*nd)/(nd-fd), 0, 0, -1, 0 ); } /** * Sébastien Le Roux 6/02/2017 Follwing glFrustum man page */ static inline mat4_t m4_frustum (float left, float right, float bottom, float top, float front, float back) { float n = 2.0f * front; float l = right - left; float p = top - bottom; float a = (right + left) / l; float b = (top + bottom) / p; float c = -(back + front) / (back - front); float d = - back * n / (back - front); return mat4( n / l, 0, a, 0, 0, n / p, b, 0, 0, 0, c, d, 0, 0, -1, 0 ); } /** * Builds a transformation matrix for a camera that looks from `from` towards * `to`. `up` defines the direction that's upwards for the camera. All three * vectors are given in world space and `up` doesn't need to be normalized. * * Sources: Derived on whiteboard. * * Implementation details: * * x, y and z are the right-handed base vectors of the cameras subspace. * x has to be normalized because the cross product only produces a normalized * output vector if both input vectors are orthogonal to each other. And up * probably isn't orthogonal to z. * * These vectors are then used to build a 3x3 rotation matrix. This matrix * rotates a vector by the same amount the camera is rotated. But instead we * need to rotate all incoming vertices backwards by that amount. That's what a * camera matrix is for: To move the world so that the camera is in the origin. * So we take the inverse of that rotation matrix and in case of an rotation * matrix this is just the transposed matrix. That's why the 3x3 part of the * matrix are the x, y and z vectors but written horizontally instead of * vertically. * * The translation is derived by creating a translation matrix to move the world * into the origin (thats translate by minus `from`). The complete lookat matrix * is then this translation followed by the rotation. Written as matrix * multiplication: * * lookat = rotation * translation * * Since we're right-handed this equals to first doing the translation and after * that doing the rotation. During that multiplication the rotation 3x3 part * doesn't change but the translation vector is multiplied with each rotation * axis. The dot product is just a more compact way to write the actual * multiplications. */ static inline mat4_t m4_look_at(vec3_t from, vec3_t to, vec3_t up) { vec3_t z = v3_muls(v3_norm(v3_sub(to, from)), -1); vec3_t x = v3_norm(v3_cross(up, z)); vec3_t y = v3_cross(z, x); return mat4( x.x, x.y, x.z, -v3_dot(from, x), y.x, y.y, y.z, -v3_dot(from, y), z.x, z.y, z.z, -v3_dot(from, z), 0, 0, 0, 1 ); } /** * Inverts an affine transformation matrix. That are translation, scaling, * mirroring, reflection, rotation and shearing matrices or any combination of * them. * * Implementation details: * * - Invert the 3x3 part of the 4x4 matrix to handle rotation, scaling, etc. * correctly (see source). * - Invert the translation part of the 4x4 matrix by multiplying it with the * inverted rotation matrix and negating it. * * When a 3D point is multiplied with a transformation matrix it is first * rotated and then translated. The inverted transformation matrix is the * inverse translation followed by the inverse rotation. Written as a matrix * multiplication (remember, the effect applies right to left): * * inv(matrix) = inv(rotation) * inv(translation) * * The inverse translation is a translation into the opposite direction, just * the negative translation. The rotation part isn't changed by that * multiplication but the translation part is multiplied by the inverse rotation * matrix. It's the same situation as with `m4_look_at()`. But since we don't * store the rotation matrix as 3D vectors we can't use the dot product and have * to write the matrix multiplication operations by hand. * * Sources for 3x3 matrix inversion: * * https://www.khanacademy.org/math/precalculus/precalc-matrices/determinants-and-inverses-of-large-matrices/v/inverting-3x3-part-2-determinant-and-adjugate-of-a-matrix */ static inline mat4_t m4_invert_affine(mat4_t matrix) { // Create shorthands to access matrix members float m00 = matrix.m00, m10 = matrix.m10, m20 = matrix.m20, m30 = matrix.m30; float m01 = matrix.m01, m11 = matrix.m11, m21 = matrix.m21, m31 = matrix.m31; float m02 = matrix.m02, m12 = matrix.m12, m22 = matrix.m22, m32 = matrix.m32; // Invert 3x3 part of the 4x4 matrix that contains the rotation, etc. // That part is called R from here on. // Calculate cofactor matrix of R float c00 = m11*m22 - m12*m21, c10 = -(m01*m22 - m02*m21), c20 = m01*m12 - m02*m11; float c01 = -(m10*m22 - m12*m20), c11 = m00*m22 - m02*m20, c21 = -(m00*m12 - m02*m10); float c02 = m10*m21 - m11*m20, c12 = -(m00*m21 - m01*m20), c22 = m00*m11 - m01*m10; // Calculate the determinant by using the already calculated determinants // in the cofactor matrix. // Second sign is already minus from the cofactor matrix. float det = m00*c00 + m10*c10 + m20 * c20; if (fabsf(det) == 0.0000) return m4_identity(); // Calculate inverse of R by dividing the transposed cofactor matrix by the // determinant. float i00 = c00 / det, i10 = c01 / det, i20 = c02 / det; float i01 = c10 / det, i11 = c11 / det, i21 = c12 / det; float i02 = c20 / det, i12 = c21 / det, i22 = c22 / det; // Combine the inverted R with the inverted translation return mat4( i00, i10, i20, -(i00*m30 + i10*m31 + i20*m32), i01, i11, i21, -(i01*m30 + i11*m31 + i21*m32), i02, i12, i22, -(i02*m30 + i12*m31 + i22*m32), 0, 0, 0, 1 ); } static inline mat4_t m4_translate (mat4_t matrix, vec3_t translation) { return mat4( matrix.m00, matrix.m10, matrix.m20, matrix.m30 + translation.x, matrix.m01, matrix.m11, matrix.m21, matrix.m31 + translation.y, matrix.m02, matrix.m12, matrix.m22, matrix.m32 + translation.z, matrix.m03, matrix.m13, matrix.m23, matrix.m33 ); } /** * Multiplies a 4x4 matrix with a 3D vector representing a point in 3D space. * * Before the matrix multiplication the vector is first expanded to a 4D vector * (x, y, z, 1). After the multiplication the vector is reduced to 3D again by * dividing through the 4th component (if it's not 0 or 1). */ static inline vec3_t m4_mul_pos(mat4_t matrix, vec3_t position) { vec3_t result = vec3( matrix.m00 * position.x + matrix.m10 * position.y + matrix.m20 * position.z + matrix.m30, matrix.m01 * position.x + matrix.m11 * position.y + matrix.m21 * position.z + matrix.m31, matrix.m02 * position.x + matrix.m12 * position.y + matrix.m22 * position.z + matrix.m32 ); float w = matrix.m03 * position.x + matrix.m13 * position.y + matrix.m23 * position.z + matrix.m33; if (w != 0.0) return vec3(result.x / w, result.y / w, result.z / w); return result; } static inline vec3_t m4_mul_coord(mat4_t matrix, vec3_t position) { vec3_t result = vec3( matrix.m00 * position.x + matrix.m10 * position.y + matrix.m20 * position.z + matrix.m30, matrix.m01 * position.x + matrix.m11 * position.y + matrix.m21 * position.z + matrix.m31, matrix.m02 * position.x + matrix.m12 * position.y + matrix.m22 * position.z + matrix.m32 ); return result; } static inline vec3_t m4_mul_abc(mat4_t matrix, vec3_t direction) { vec3_t result = vec3( matrix.m00 * direction.x + matrix.m10 * direction.y + matrix.m20 * direction.z, matrix.m01 * direction.x + matrix.m11 * direction.y + matrix.m21 * direction.z, matrix.m02 * direction.x + matrix.m12 * direction.y + matrix.m22 * direction.z ); return result; } /** * Multiplies a 4x4 matrix with a 3D vector representing a direction in 3D space. * * Before the matrix multiplication the vector is first expanded to a 4D vector * (x, y, z, 0). For directions the 4th component is set to 0 because directions * are only rotated, not translated. After the multiplication the vector is * reduced to 3D again by dividing through the 4th component (if it's not 0 or * 1). This is necessary because the matrix might contains something other than * (0, 0, 0, 1) in the bottom row which might set w to something other than 0 * or 1. */ static inline vec3_t m4_mul_dir(mat4_t matrix, vec3_t direction) { vec3_t result = vec3( matrix.m00 * direction.x + matrix.m10 * direction.y + matrix.m20 * direction.z, matrix.m01 * direction.x + matrix.m11 * direction.y + matrix.m21 * direction.z, matrix.m02 * direction.x + matrix.m12 * direction.y + matrix.m22 * direction.z ); float w = matrix.m03 * direction.x + matrix.m13 * direction.y + matrix.m23 * direction.z; if (w != 0.0) return vec3(result.x / w, result.y / w, result.z / w); return result; } static inline void m4_print(mat4_t matrix) { m4_fprintp(stdout, matrix, 6, 4); } static inline void m4_printp(mat4_t matrix, int width, int precision) { m4_fprintp(stdout, matrix, width, precision); } static inline void m4_fprint(FILE* stream, mat4_t matrix) { m4_fprintp(stream, matrix, 6, 2); } static inline void m4_fprintp(FILE* stream, mat4_t matrix, int width, int precision) { mat4_t m = matrix; int w = width, p = precision; int r; for(r = 0; r < 4; r++) { fprintf(stream, "| %*.*f %*.*f %*.*f %*.*f |\n", w, p, m.m[0][r], w, p, m.m[1][r], w, p, m.m[2][r], w, p, m.m[3][r] ); } } #endif // MATH_3D_IMPLEMENTATION atomes_1.3.1/src/opengl/glview.c0000664000175000017500000017034215212624223016230 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glview.c * @short Callbacks of the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'glview.c' * * Contains: * - The callbacks of the OpenGL window * * List of functions: GLuint * allocgluint (int val); GLuint ** allocdgluint (int xal, int yal); GLfloat ** allocdGLfloat (int xal, int yal); GLdouble get_max_depth (GLdouble depth); gboolean is_GLExtension_Supported (const char * extension); G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data); void update_bonds_ (int * bd, int * stp, int * bdim, int bda[* bdim], int bdb[* bdim], double * x, double * y, double * z); void sort (int dim, int * tab); void update_atom_neighbors_ (int * stp, int * at, int * nv); void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv); void update (glwin * view); void transform (glwin * view, double aspect); void reshape (glwin * view, int width, int height, gboolean use_ratio); void save_rotation_quaternion (glwin * view); void edit_for_motion (glwin * view); void motion (glwin * view, gint x, gint y, GdkModifierType state); void render_this_gl_window (glwin * view, GtkGLArea * area); void render_this_gl_window (glwin * view, GtkWidget * widg, gint button); void glwin_lib_pressed (double x, double y, guint event_type, int event_button, gpointer data); void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void zoom (glwin * view, int delta); void rotate_x_y (glwin * view, double angle_x, double angle_y); void init_camera (project * this_proj); void setup_default_species_parameters_for_image (project * this_proj, image * img); void setup_image_spec_data (project * this_proj, image * img); void setup_default_lights (project * this_proj, image * img); void setup_default_image (project * this_proj, image * img); void init_img (project * this_proj); void init_opengl (); void center_molecule (project * this_proj); void center_this_molecule (glwin * view); void free_glwin_spec_data (project * this_proj, int spec); void glwin_init_spec_data (project * this_proj, int nspec); void init_glwin (glwin * view); void gtk_window_change_gdk_visual (GtkWidget * win); G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data); GError * init_gtk_gl_area (GtkGLArea * area); ColRGBA set_default_color (int z); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "initcoord.h" #include "bind.h" #include "project.h" #include "glview.h" extern vec3_t arc_ball_init; extern vec4_t old_rotation_quaternion; extern void process_the_hits (glwin * view, gint event_button, double ptx, double pty); extern void arc_ball_rotation (glwin * view, int x, int y); extern vec3_t get_arc_ball_vector (glwin * view, int x, int y); extern Light * init_light_source (int type, float size); extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern vec3_t get_bary (project * this_proj, int status); extern void update_labels (glwin * view); extern void prepare_atom_edition (gpointer data, gboolean visible); extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); extern void duplicate_material (Material * new_mat, Material * old_mat); extern void duplicate_fog (Fog * new_fog, Fog * old_fog); extern void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab); GLenum ogl_texture; /*! \fn GLuint * allocgluint (int val) \brief allocate a GLuint * pointer \param val size of the pointer to allocate */ GLuint * allocgluint (int val) { GLuint * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn GLuint ** allocdgluint (int xal, int yal) \brief allocate a GLuint ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ GLuint ** allocdgluint (int xal, int yal) { GLuint ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocgluint(yal); } return var; } /*! \fn GLfloat ** allocdGLfloat (int xal, int yal) \brief allocate a GLfloat ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ GLfloat ** allocdGLfloat (int xal, int yal) { GLfloat ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = g_malloc0(yal*sizeof*var[i]); } return var; } const float light_pos[MAX_LIGHTS][4] = {{-0.1f, 0.1f, 1.0f, 0.0f}, { 1.0f, 2.0f, 0.5f, 0.0f}, {-1.0f, 2.0f, -1.0f, 0.0f}, {-1.0f, -1.0f, 0.0f, 0.0f}}; /*! \fn ColRGBA set_default_color (int z) \brief pick the default color for an atom \param z atomic number */ ColRGBA set_default_color (int z) { ColRGBA col; double colors[118][3]={{1.00, 1.00, 1.00}, {0.85, 1.00, 1.00}, {0.80, 0.50, 1.00}, {0.76, 1.00, 0.00}, {1.00, 0.71, 0.71}, {0.56, 0.56, 0.56}, {0.18, 0.31, 0.97}, {1.00, 0.05, 0.05}, {0.56, 0.87, 0.31}, {0.70, 0.89, 0.96}, {0.67, 0.36, 0.95}, {0.54, 1.00, 0.00}, {0.75, 0.65, 0.65}, {0.94, 0.78, 0.62}, {1.00, 0.50, 0.00}, {1.00, 1.00, 0.19}, {0.12, 0.94, 0.12}, {0.50, 0.82, 0.89}, {0.56, 0.25, 0.83}, {0.24, 1.00, 0.00}, {0.90, 0.90, 0.90}, {0.75, 0.76, 0.78}, {0.65, 0.65, 0.67}, {0.54, 0.60, 0.78}, {0.61, 0.48, 0.78}, {0.87, 0.40, 0.20}, {0.94, 0.56, 0.62}, {0.31, 0.81, 0.31}, {0.78, 0.50, 0.20}, {0.49, 0.50, 0.69}, {0.76, 0.56, 0.56}, {0.40, 0.56, 0.56}, {0.74, 0.50, 0.89}, {1.00, 0.63, 0.00}, {0.65, 0.16, 0.16}, {0.36, 0.72, 0.82}, {0.44, 0.18, 0.69}, {0.00, 1.00, 0.00}, {0.58, 1.00, 1.00}, {0.58, 0.88, 0.88}, {0.45, 0.76, 0.79}, {0.33, 0.71, 0.71}, {0.23, 0.62, 0.62}, {0.14, 0.56, 0.56}, {0.04, 0.49, 0.55}, {0.00, 0.41, 0.52}, {0.75, 0.75, 0.75}, {1.00, 0.85, 0.56}, {0.65, 0.46, 0.45}, {0.40, 0.50, 0.50}, {0.62, 0.39, 0.71}, {0.83, 0.48, 0.00}, {0.58, 0.00, 0.58}, {0.26, 0.62, 0.69}, {0.34, 0.09, 0.56}, {0.00, 0.79, 0.00}, {0.44, 0.83, 1.00}, {1.00, 1.00, 0.78}, {0.85, 1.00, 0.78}, {0.78, 1.00, 0.78}, {0.64, 1.00, 0.78}, {0.56, 1.00, 0.78}, {0.38, 1.00, 0.78}, {0.27, 1.00, 0.78}, {0.19, 1.00, 0.78}, {0.12, 1.00, 0.78}, {0.00, 1.00, 0.61}, {0.00, 0.90, 0.46}, {0.00, 0.83, 0.32}, {0.00, 0.75, 0.22}, {0.00, 0.67, 0.14}, {0.30, 0.76, 1.00}, {0.30, 0.65, 1.00}, {0.13, 0.58, 0.84}, {0.15, 0.49, 0.67}, {0.15, 0.40, 0.59}, {0.09, 0.33, 0.53}, {0.81, 0.81, 0.87}, {1.00, 0.81, 0.13}, {0.72, 0.72, 0.81}, {0.65, 0.33, 0.30}, {0.34, 0.35, 0.38}, {0.62, 0.31, 0.71}, {0.67, 0.36, 0.00}, {0.46, 0.31, 0.27}, {0.26, 0.51, 0.59}, {0.26, 0.00, 0.40}, {0.00, 0.49, 0.00}, {0.44, 0.67, 0.98}, {0.00, 0.73, 1.00}, {0.00, 0.63, 1.00}, {0.00, 0.56, 1.00}, {0.00, 0.50, 1.00}, {0.00, 0.42, 1.00}, {0.33, 0.36, 0.95}, {0.54, 0.31, 0.89}, {0.63, 0.21, 0.83}, {0.70, 0.12, 0.83}, {0.70, 0.12, 0.73}, {0.70, 0.05, 0.65}, {0.74, 0.05, 0.53}, {0.78, 0.00, 0.40}, {0.80, 0.00, 0.35}, {0.82, 0.00, 0.31}, {0.85, 0.00, 0.27}, {0.88, 0.00, 0.22}, {0.90, 0.00, 0.18}, {0.92, 0.00, 0.15}, {0.93, 0.00, 0.14}, {0.94, 0.00, 0.13}, {0.95, 0.00, 0.12}, {0.96, 0.00, 0.10}, {0.97, 0.00, 0.10}, {0.98, 0.00, 0.10}, {0.99, 0.00, 0.10}, {1.00, 0.00, 0.10}, {1.00, 0.00, 0.15}, {1.00, 0.00, 0.20}}; // Dumy atoms have z < 1 int Z = (z < 1) ? 1 : z; col.red = colors[Z-1][0]; col.green = colors[Z-1][1]; col.blue = colors[Z-1][2]; col.alpha = 1.0; return col; } /*! \fn void update_bonds_ (int * bd, int * stp, int * bdim, int bda[*bdim], int bdb[*bdim], double * x, double * y, double * z) \brief update bonding information from Fortran90 \param bd bonds (0) or clones (1) \param stp the MD step \param bdim number of bonds (or clone bonds) \param bda bond "ab" list atom a \param bdb bond "ab" list atom b \param x clone(s) x coordinates \param y clone(s) y coordinates \param z clone(s) z coordinates */ void update_bonds_ (int * bd, int * stp, int * bdim, int bda[* bdim], int bdb[* bdim], double * x, double * y, double * z) { int i, j, k; active_glwin -> allbonds[* bd] += * bdim; if (active_glwin -> bonds[* stp][* bd]) { for (i=0; i bonds[* stp][* bd]; i++) { if (active_glwin -> bondid[* stp][* bd][i]) { g_free (active_glwin -> bondid[* stp][* bd][i]); } } g_free (active_glwin -> bondid[* stp][* bd]); active_glwin -> bondid[* stp][* bd] = NULL; } active_glwin -> bonds[* stp][* bd] = * bdim; if (* bdim > 0) { active_glwin -> bondid[* stp][* bd] = allocdint (* bdim, 2); for (i=0; i< * bdim; i++) { j = bda[i] - 1; k = bdb[i] - 1; active_glwin -> bondid[* stp][* bd][i][0] = j; active_glwin -> bondid[* stp][* bd][i][1] = k; } if (* bd) { if (active_glwin -> clones[* stp] != NULL) { g_free (active_glwin -> clones[* stp]); active_glwin -> clones[* stp] = NULL; } active_glwin -> clones[* stp] = g_malloc0(*bdim*sizeof*active_glwin -> clones[* stp]); for (i=0; i< * bdim; i++) { active_glwin -> clones[* stp][i].x = x[i]; active_glwin -> clones[* stp][i].y = y[i]; active_glwin -> clones[* stp][i].z = z[i]; j = bda[i] - 1; k = bdb[i] - 1; active_project -> atoms[* stp][j].cloned = TRUE; active_project -> atoms[* stp][k].cloned = TRUE; } } } } /*! \fn void sort (int dim, int * tab) \brief sort, nim to max, a table by integer value \param dim the number of value \param tab the table to sort */ void sort (int dim, int * tab) { int i, j, val; for (i=1; i-1; j--) { if (tab[j] <= val) break; tab[j+1] = tab[j]; } tab[j+1] = val; } } /*! \fn void update_atom_neighbors_ (int * stp, int * at, int * nv) \brief update an atom number of neighbors from Fortran90 \param stp the MD step \param at atom id \param nv number of neighbor atom(s) */ void update_atom_neighbors_ (int * stp, int * at, int * nv) { active_project -> atoms[* stp][* at].numv = * nv; if (* nv) { active_project -> atoms[* stp][* at].vois = allocint (* nv); } } /*! \fn void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) \brief update atom neighbor list from Fortran90 \param stp the MD step \param at atom id \param iv neighbor index \param nv neighbor id */ void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) { active_project -> atoms[* stp][* at].vois[* iv] = * nv - 1; if (* iv == active_project -> atoms[* stp][* at].numv - 1) { sort (active_project -> atoms[* stp][* at].numv, active_project -> atoms[* stp][* at].vois); } } /*! \fn void update (glwin * view) \brief update the rendering of the OpenGL window \param view the target glwin */ void update (glwin * view) { gtk_gl_area_queue_render ((GtkGLArea *)view -> plot); #ifdef G_OS_WIN32 #ifdef GTK3 hide_the_widgets (view -> plot); show_the_widgets (view -> plot); #endif #endif } /*! \fn void transform (glwin * view, double aspect) \brief transform the OpenGL window \param view the target glwin \param aspect new aspect ratio */ void transform (glwin * view, double aspect) { GLdouble w, h; GLdouble dw, dh; double zoom = view -> anim -> last -> img -> zoom; view -> zoom_factor = zoom * 0.1 * view -> anim -> last -> img -> p_depth / (2.0 * view -> anim -> last -> img -> gfar); if (view -> anim -> last -> img -> rep == ORTHOGRAPHIC) { zoom *= (view -> anim -> last -> img -> p_depth / view -> anim -> last -> img -> gnear); } dw = view -> anim -> last -> img -> c_shift[0]*2.0*zoom; dh = view -> anim -> last -> img -> c_shift[1]*2.0*zoom; if (aspect > 1.0) { w = zoom * aspect; h = zoom; } else { w = zoom; h = zoom / aspect; } view -> anim -> last -> img -> gleft = -w + dw; view -> anim -> last -> img -> gright = w + dw; view -> anim -> last -> img -> gbottom = -h + dh; view -> anim -> last -> img -> gtop = h + dh; if (view -> anim -> last -> img -> rep == PERSPECTIVE) { view -> projection_matrix = m4_frustum (view -> anim -> last -> img -> gleft, view -> anim -> last -> img -> gright, view -> anim -> last -> img -> gbottom, view -> anim -> last -> img -> gtop, view -> anim -> last -> img -> gnear, view -> anim -> last -> img -> gfar); } else { view -> projection_matrix = m4_ortho (view -> anim -> last -> img -> gleft, view -> anim -> last -> img -> gright, view -> anim -> last -> img -> gbottom, view -> anim -> last -> img -> gtop, -view -> anim -> last -> img -> gfar, view -> anim -> last -> img -> gfar); } } /*! \fn void reshape (glwin * view, int width, int height, gboolean use_ratio) \brief reshape (resize) the OpenGL window \param view the target glwin \param width new with \param height new height \param use_ratio use widget rendering ratio */ void reshape (glwin * view, int width, int height, gboolean use_ratio) { double aspect; int scale = 1.0; if (use_ratio) { if (view -> win) { if (GTK_IS_WIDGET(view -> win)) { scale = gtk_widget_get_scale_factor (view -> win); } } } glViewport (0, 0, (GLsizei) scale * width, (GLsizei) scale * height); view -> view_port = vec4 (0.0, 0.0, width, height); aspect = (double) width / (double) height; transform (view, aspect); } /*! \fn void save_rotation_quaternion (glwin * view) \brief save the rotation quaternion of the last image \param view the target glwin */ void save_rotation_quaternion (glwin * view) { //int i; //for (i=0; i<4; i++) old_rotation_quaternion[i] = view -> anim -> last -> img -> rotation_quaternion[i]; old_rotation_quaternion.w = view -> anim -> last -> img -> rotation_quaternion.w; old_rotation_quaternion.x = view -> anim -> last -> img -> rotation_quaternion.x; old_rotation_quaternion.y = view -> anim -> last -> img -> rotation_quaternion.y; old_rotation_quaternion.z = view -> anim -> last -> img -> rotation_quaternion.z; } /*! \fn void edit_for_motion (glwin * view) \brief if edition mode is one some steps are required \param view the target glwin */ void edit_for_motion (glwin * view) { gboolean check_edit = FALSE; project * this_proj = get_project_by_id(view -> proj); prepare_atom_edition (& view -> colorp[0][0], FALSE); atom_search * move_search = allocate_atom_search (this_proj -> id, DISPL, DISPL, this_proj -> natomes); int ** frag = allocdint (this_proj -> coord -> totcoord[2], 2); int i, j, k; j = 0; for (i=0; i natomes; i++) { k = this_proj -> atoms[0][i].coord[2]; frag[k][0] ++; if (this_proj -> atoms[0][i].pick[0]) { move_search -> todo[i] = 1; frag[k][1] ++; j ++; } } if (j) { for (i=0; i coord -> totcoord[2]; i++) { if (frag[i][1] && frag[i][1] < frag[i][0]) { check_edit = TRUE; break; } } if (check_edit) { action_atoms_from_project (this_proj, move_search, (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE); } else { atomic_object * object; for (i=0; i coord -> totcoord[2]; i++) { if (frag[i][1]) { object_motion = TRUE; object = create_object_from_frag_mol (this_proj, 2, i, NULL); object_motion = FALSE; g_free (object); } } } g_free (frag); } view -> baryc[1] = get_bary (this_proj, 1); move_search = free_this_search_data (move_search); view -> prepare_motion = FALSE; } /*! \fn void motion (glwin * view, gint x, gint y, GdkModifierType state) \brief mouse motion in the OpenGL window \param view the target glwin \param x x position \param y y position \param state The keyboard modifier (Ctrl, Alt ...) */ void motion (glwin * view, gint x, gint y, GdkModifierType state) { view -> mouseAction = MOTION; int i; if (view -> mode == EDITION && view -> prepare_motion && view -> rebuild[0][0]) edit_for_motion (view); if (state & GDK_BUTTON1_MASK) { arc_ball_rotation (view, x, y); } else if (state & GDK_BUTTON2_MASK) { if (view -> mode != EDITION) { view -> anim -> last -> img -> c_shift[0] -= (double) (x - view -> mouseX) / view -> pixels[0]; view -> anim -> last -> img -> c_shift[1] += (double) (y - view -> mouseY) / view -> pixels[1]; for (i=0; i<2; i++) { if (view -> rep_win) { if (view -> rep_win -> camera_widg[i+5] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[i+5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[i+5], - view -> anim -> last -> img -> c_shift[i]); } } } } else { vec3_t pos_a = vec3(x, - y, 0.75); vec3_t pos_b = vec3(view -> mouseX, - view -> mouseY, 0.75); vec3_t trans_a = v3_un_project (pos_a, view -> view_port, view -> projection_matrix); vec3_t trans_b = v3_un_project (pos_b, view -> view_port, view -> projection_matrix); vec3_t trans; trans.x = (trans_a.x - trans_b.x); trans.y = (trans_b.y - trans_a.y); if (view -> anim -> last -> img -> rep == PERSPECTIVE) { trans.x *= view -> anim -> last -> img -> p_depth; trans.y *= view -> anim -> last -> img -> p_depth; } trans.z = 0.0; translate (get_project_by_id(view -> proj), 1, 1, trans); } } if (view -> mode == EDITION) { init_default_shaders (view); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (view); #endif } view -> mouseX = x; view -> mouseY = y; update (view); } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse motion event in the OpenGL window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) { glwin * view = (glwin *) data; if (view -> mouseStatus != RELEASED) { GdkEventMotion * mevent = (GdkEventMotion *)event; gint x, y; GdkModifierType state; if (mevent -> is_hint) { gdk_window_get_device_position (mevent -> window, mevent -> device, & x, & y, & state); } else { x = (gint) mevent -> x; y = (gint) mevent -> y; state = (GdkModifierType) mevent -> state; } motion (view, x, y, state); } return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) \brief handle mouse motion event in the OpenGL window GTK4 \param motc The GtkEvenController sending the signal \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) { glwin * view = (glwin *) data; if (view -> mouseStatus != RELEASED) { motion (view, (gint)x, (gint)y, gtk_event_controller_get_current_event_state((GtkEventController*)motc)); } } #endif #ifdef GTKGLAREA /*! \fn void render_this_gl_window (glwin * view, GtkGLArea * area) \brief render the OpenGL window \param view the target glwin \param area the target GtkGLArea */ void render_this_gl_window (glwin * view, GtkGLArea * area) #else /*! \fn void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) \brief render the OpenGL window \param view the target glwin \param widg the GtkWidget sending the signal \param button the button id */ void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) #endif { #ifdef GTKGLAREA view -> pixels[0] = get_widget_width (GTK_WIDGET(area)); view -> pixels[1] = get_widget_height (GTK_WIDGET(area)); gtk_gl_area_make_current (area); if (gtk_gl_area_get_error (area) == NULL) #else view -> pixels[0] = get_widget_width (widg); view -> pixels[1] = get_widget_height (widg); GdkWindow * win = gtk_widget_get_window (widg); if (glXMakeCurrent (GDK_WINDOW_XDISPLAY (win), GDK_WINDOW_XID (win), view -> glcontext)) #endif { reshape (view, view -> pixels[0], view -> pixels[1], TRUE); draw (view); if (view -> to_pick) { if (view -> mouseButton) process_the_hits (view, view -> mouseButton, view -> mouseX, view -> mouseY); view -> to_pick = FALSE; reshape (view, view -> pixels[0], view -> pixels[1], TRUE); draw (view); } #ifdef GTKGLAREA glFlush (); #else glXSwapBuffers (GDK_WINDOW_XDISPLAY (win), GDK_WINDOW_XID (win)); #endif } } /*! \fn void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) \brief handle mouse button event on the molecular library OpenGL window \param x x position \param y y position \param event_type event type \param event_button event button \param data the associated data pointer */ void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) { glwin * view = (glwin *) data; switch (event_type) { case GDK_BUTTON_PRESS: view -> mouseStatus = CLICKED; view -> mouseX = x; view -> mouseY = y; view -> mouseButton = event_button; if (event_button == 1) { save_rotation_quaternion (view); arc_ball_init = get_arc_ball_vector (view, view -> mouseX, view -> mouseY); view -> to_pick = FALSE; update (view); } break; case GDK_BUTTON_RELEASE: view -> mouseStatus = RELEASED; break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse button event on the molecular library OpenGL window (limited interaction) \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; glwin_lib_pressed (bevent -> x, bevent -> y, bevent -> type, bevent -> button, data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief handle mouse button press event on the molecular library OpenGL window (limited interaction) \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_lib_pressed (x, y, GDK_BUTTON_PRESS, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } /*! \fn G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief handle mouse button release event on the molecular library OpenGL window (limited interaction) \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_lib_pressed (x, y, GDK_BUTTON_RELEASE, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #endif // GTK3 gl_pop_info to_pop; /*! \fn void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the OpenGL window \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) { glwin * view = (glwin *) data; switch (event_type) { case GDK_BUTTON_PRESS: view -> mouseStatus = CLICKED; view -> mouseX = event_x; view -> mouseY = event_y; view -> mouseButton = event_button; clock_gettime (CLOCK_MONOTONIC, & start_time); if (event_button == 1 || event_button == 3) { save_rotation_quaternion (view); arc_ball_init = get_arc_ball_vector (view, view -> mouseX, view -> mouseY); view -> nth_copy = 0; view -> insert_coords = get_insertion_coordinates (view); #ifdef GTKGLAREA view -> to_pick = TRUE; update (view); #else render_this_gl_window (view, plot, event_button); #endif } break; case GDK_BUTTON_RELEASE: view -> mouseStatus = RELEASED; view -> mouseButton = 0; clock_gettime (CLOCK_MONOTONIC, & stop_time); if (get_calc_time (start_time, stop_time) < 0.4) { #ifdef GTKGLAREA update (view); #else render_this_gl_window (view, plot, event_button); #endif } if (view -> mode == EDITION && view -> mouseAction == MOTION) { view -> baryc[1] = get_bary (get_project_by_id(view -> proj), 1); view -> mouseAction = ANALYZE; } if (event_button == 3) { switch (to_pop.action) { case 1: popup_main_menu (view, to_pop.x, to_pop.y); break; case 2: popup_selection (view, to_pop.x, to_pop.y, to_pop.pts[0], to_pop.pts[1], to_pop.pts[2], to_pop.pts[3], to_pop.pts[4]); break; } to_pop.action = 0; } break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) \brief mouse button event on the OpenGL window \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; glwin_button_event (bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the OpenGL window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the OpenGL window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #endif // GTK3 // Zoom in or out /*! \fn void zoom (glwin * view, int delta) \brief zoom in or zoom out in the OpenGL window \param view the target glwin \param delta the zoom modification */ void zoom (glwin * view, int delta) { view -> anim -> last -> img -> zoom += delta * view -> zoom_factor; if (view -> rep_win) { if (view -> rep_win -> camera_widg[0] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[0], 1.0-0.5*view -> anim -> last -> img -> zoom); } } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse scroll event on the OpenGL window \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) { glwin * view = (glwin *) data; GdkEventScroll * sevent = (GdkEventScroll *)event; if (sevent -> direction == GDK_SCROLL_UP) { zoom (view, 1); } else if (sevent -> direction == GDK_SCROLL_DOWN && view -> anim -> last -> img -> zoom > ZOOM_MAX) { zoom (view, -1); } update_labels (view); update (view); return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) \brief handle mouse scroll event on the OpenGL window \param event the GtkEventControllerScroll sending the signal \param dx x position \param dy y position \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) { glwin * view = (glwin *) data; if (dy < 0) { zoom (view, 1); } else if (dy > 0 && view -> anim -> last -> img -> zoom > ZOOM_MAX) { zoom (view, -1); } update_labels (view); update (view); return TRUE; } #endif /*! \fn void rotate_x_y (glwin * view, double angle_x, double angle_y) \brief rotate the OpenGL camera \param view the target glwin \param angle_x camera angle on x axis \param angle_y camera angle on y axis */ void rotate_x_y (glwin * view, double angle_x, double angle_y) { vec3_t axis; vec4_t q_a, q_b, q_c; axis.x = 0.0; axis.y = 1.0; axis.z = 0.0; q_a = axis_to_quat (axis, -pi*angle_y/180.0); axis.x = 1.0; axis.y = 0.0; axis.z = 0.0; q_b = axis_to_quat (axis, -pi*angle_x/180.0); q_c = q4_mul (q_a, q_b); view -> anim -> last -> img -> c_angle[0] -= angle_x; view -> anim -> last -> img -> c_angle[1] -= angle_y; int i; for (i=0; i<2; i++) { if (fabs(view -> anim -> last -> img -> c_angle[i]) > 180.0) view -> anim -> last -> img -> c_angle[i] = 0.0; if (view -> rep_win) { if (view -> rep_win -> camera_widg[i+3] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[i+3], view -> anim -> last -> img -> c_angle[i]); } } } if (view -> mode != EDITION) { view -> anim -> last -> img -> rotation_quaternion = q4_mul (old_rotation_quaternion, q_c); } else { rotate_quat (get_project_by_id(view -> proj), q_c, 1, 1); init_default_shaders (view); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (view); #endif } } /*! \fn GLdouble get_max_depth (GLdouble depth) \brief guess a reasonable maximum OpenGL window depth \param depth the calculated model depth */ GLdouble get_max_depth (GLdouble depth) { if (depth < 10.0) { return 10.0; } else if (depth < 100.0) { return 100.0; } else if (depth < 1000.0) { return 1000.0; } else { return 10000.0; } } /*! \fn void init_camera (project * this_proj) \brief initialize the OpenGL camera settings \param this_proj the target project */ void init_camera (project * this_proj) { glwin * view = this_proj -> modelgl; // the call to ogl_max_() requires this_proj to be the active project ! view -> anim -> last -> img -> p_depth = (this_proj -> natomes) ? oglmax_ () : 50.0; view -> anim -> last -> img -> m_depth = get_max_depth (view -> anim -> last -> img -> p_depth); view -> anim -> last -> img -> gnear = default_rep.gnear; view -> anim -> last -> img -> gfar = view -> anim -> last -> img -> p_depth*2.0; view -> anim -> last -> img -> rotation_quaternion.w = 0.0; view -> anim -> last -> img -> rotation_quaternion.x = 0.0; view -> anim -> last -> img -> rotation_quaternion.y = 0.0; view -> anim -> last -> img -> rotation_quaternion.z = 1.0; int i; for (i=0; i<2; i++) { view -> anim -> last -> img -> c_angle[i] = 0.0; view -> anim -> last -> img -> c_shift[i] = default_rep.c_shift[i]; } save_rotation_quaternion (view); rotate_x_y (view, default_rep.c_angle[0], default_rep.c_angle[1]); view -> anim -> last -> img -> zoom = default_rep.zoom; if (view -> rep_win) { if (view -> rep_win -> camera_widg[0] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[0], 1.0 - 0.5*view -> anim -> last -> img -> zoom); } if (view -> rep_win -> camera_widg[1] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[1])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[1], view -> anim -> last -> img -> p_depth); } if (view -> rep_win -> camera_widg[2] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[2])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[2], view -> anim -> last -> img -> gnear); } } } /*! \fn void setup_default_species_parameters_for_image (project * this_proj, image * img) \brief setup default chemical species related parameters for image \param this_proj the target project \param img the target image */ void setup_default_species_parameters_for_image (project * this_proj, image * img) { int i, j; int nsp = this_proj -> nspec; img -> radall[0] = default_bd_rw[2]; img -> radall[1] = default_bd_rw[5]; for (i = 0; i < nsp; i++) { j = this_proj -> chemistry -> chem_prop[CHEM_Z][i]; // B & S img -> sphererad[i] = (default_o_at_rs[0]) ? default_at_rs[0] : get_radius (2, 0, j, default_atomic_rad[0]); img -> sphererad[i+nsp] = (default_o_at_rs[5]) ? default_at_rs[5] : get_radius (7, 0, j, default_atomic_rad[5]); img -> bondrad[i][i] = (default_o_bd_rw[0]) ? default_bd_rw[0] : get_radius (-2, 0, j, default_bond_rad[0]); img -> bondrad[i+nsp][i+nsp] = (default_o_bd_rw[3]) ? default_bd_rw[3] : get_radius (-5, 0, j, default_bond_rad[3]);; // Filled img -> atomicrad[i] = (default_o_at_rs[3]) ? default_at_rs[3] : get_radius (5, 0, j, default_atomic_rad[3]); img -> atomicrad[i+nsp] = (default_o_at_rs[8]) ? default_at_rs[8] : get_radius (10, 0, j, default_atomic_rad[8]); // Wireframe & Dots img -> pointrad[i] = (default_o_at_rs[1]) ? default_at_rs[1] : get_radius (3, 0, j, default_atomic_rad[1]); img -> pointrad[i+nsp] = (default_o_at_rs[6]) ? default_at_rs[6] : get_radius (8, 0, j, default_atomic_rad[6]); img -> linerad[i][i] = (default_o_bd_rw[1]) ? default_bd_rw[1] : get_radius (-3, 0, j, default_bond_rad[1]); img -> linerad[i+nsp][i+nsp] = (default_o_bd_rw[4]) ? default_bd_rw[4] : get_radius (-6, 0, j, default_bond_rad[4]); img -> at_color[i] = get_spec_color (j, default_atom_color[0]); img -> at_color[i+nsp] = get_spec_color (j, default_atom_color[1]); } for (i=0; i < nsp-1; i++) { for (j=i+1; j < nsp; j++) { img -> linerad[i][j] = img -> linerad[j][i] = min (img -> linerad[i][i], img -> linerad[j][j]); img -> linerad[i+nsp][j+nsp] = img -> linerad[j+nsp][i+nsp] = min (img -> linerad[i+nsp][i+nsp], img -> linerad[j+nsp][j+nsp]); img -> bondrad[i][j] = img -> bondrad[j][i] = min(img -> bondrad[i][i], img -> bondrad[j][j]); img -> bondrad[i+nsp][j+nsp] = img -> bondrad[j+nsp][i+nsp] = min(img -> bondrad[i+nsp][i+nsp], img -> bondrad[j+nsp][j+nsp]); } } } /*! \fn void setup_image_spec_data (project * this_proj, image * img) \brief initialize the chemical species related pointers in an image data structure \param this_proj the target project \param img the target image */ void setup_image_spec_data (project * this_proj, image * img) { int i, j; int nsp = this_proj -> nspec; // Chemical species related for (i = 0; i<2; i++) { img -> show_label[i] = allocbool(nsp); img -> show_atom[i] = allocbool(nsp); for (j=0; j show_atom[i][j] = TRUE; } img -> at_color = g_malloc0(2*nsp*sizeof*img -> at_color); img -> sphererad = allocdouble (2*nsp); img -> pointrad = allocdouble (2*nsp); img -> atomicrad = allocdouble (2*nsp); img -> bondrad = allocddouble (2*nsp, 2*nsp); img -> linerad = allocddouble (2*nsp, 2*nsp); setup_default_species_parameters_for_image (this_proj, img); for (i=0; i<10; i++) { img -> spcolor[i] = NULL; if (i < 2) { img -> spcolor[i] = g_malloc0(nsp*sizeof*img -> spcolor[i]); } else { img -> spcolor[i] = g_malloc0(1*sizeof*img -> spcolor[i]); img -> spcolor[i][0] = NULL; } } } /*! \fn void setup_default_lights (project * this_proj, image * img) \brief initialize lightning for an image data structure \param this_proj the target project \param img the target image */ void setup_default_lights (project * this_proj, image * img) { img -> l_ghtning.lights = default_lightning.lights; if (img -> l_ghtning.spot) g_free (img -> l_ghtning.spot); img -> l_ghtning.spot = g_malloc0(img -> l_ghtning.lights*sizeof*img -> l_ghtning.spot); int i; for (i=0; i l_ghtning.lights; i++) { img -> l_ghtning.spot[i] = init_light_source (default_lightning.spot[i] -> type, img -> p_depth); img -> l_ghtning.spot[i] -> fix = default_lightning.spot[i] -> fix; img -> l_ghtning.spot[i] -> intensity = default_lightning.spot[i] -> intensity; img -> l_ghtning.spot[i] -> attenuation = default_lightning.spot[i] -> attenuation; img -> l_ghtning.spot[i] -> direction = default_lightning.spot[i] -> direction; img -> l_ghtning.spot[i] -> position = default_lightning.spot[i] -> position; if (img -> l_ghtning.spot[i] -> type) { img -> l_ghtning.spot[i] -> position = v3_muls (img -> l_ghtning.spot[i] -> position, img -> p_depth); img -> l_ghtning.spot[i] -> attenuation.y /= img -> p_depth; img -> l_ghtning.spot[i] -> attenuation.z /= (img -> p_depth*img -> p_depth); } } } /*! \fn void setup_default_image (project * this_proj, image * img) \brief setup default image parameters \param this_proj the target project \param img the target image */ void setup_default_image (project * this_proj, image * img) { int i; duplicate_background_data (img -> back, & default_background); duplicate_box_data (img -> abc, & default_box); duplicate_axis_data (img -> xyz, & default_axis); for (i=0; i<2; i++) { img -> color_map[i] = default_opengl[i+1]; img -> sel_color[i] = default_sel_color[i]; } img -> quality = default_opengl[3]; img -> rep = default_rep.rep; img -> filled_type = NONE; img -> ray_tracing = default_opengl[4]; // Visual styles if (! default_opengl[0]) { img -> style = (this_proj -> natomes <= 10000) ? BALL_AND_STICK : DEFAULT_STYLE; } else if (default_opengl[0] > 0) { img -> style = (default_opengl[0] < 2) ? default_opengl[0] - 1 : default_opengl[0]; } else { img -> style = SPACEFILL; img -> filled_type = - default_opengl[0] - 1; } img -> xyz -> axis = (this_proj -> natomes) ? default_axis.axis : NONE; img -> abc -> box = (this_proj -> cell.ltype) ? default_box.box : NONE; for (i=0; i<5; i++) { duplicate_screen_label (& img -> labels[i], & default_label[i]); } for (i=0; i<2; i++) { img -> mtilt[i] = default_mtilt[i]; img -> mfactor[i] = default_mfactor[i]; img -> mpattern[i] = default_mpattern[i]; img -> mwidth[i] = default_mwidth[i]; img -> acl_format[i] = default_acl_format[i]; } setup_default_lights (this_proj, img); duplicate_material (& img -> m_terial, & default_material); duplicate_fog (& img -> f_g, & default_fog); } /*! \fn void init_img (project * this_proj) \brief initialize an image data structure \param this_proj the target project */ void init_img (project * this_proj) { this_proj -> modelgl -> anim -> last -> img = g_malloc0(sizeof*this_proj -> modelgl -> anim -> last -> img); image * img = this_proj -> modelgl -> anim -> last -> img; if (! img -> back) img -> back = g_malloc0(sizeof*img -> back); if (! img -> abc) img -> abc = g_malloc0(sizeof*img -> abc); if (! img -> xyz) img -> xyz = g_malloc0(sizeof*img -> xyz); img -> render = FILL; this_proj -> modelgl -> p_moy = img -> p_depth = (this_proj -> natomes) ? oglmax_ () : 50.0; img -> m_depth = get_max_depth (img -> p_depth); setup_default_image (this_proj, img); int i; for (i=0; i<2; i++) img -> selected[i] = g_malloc0(sizeof*img -> selected[i]); if (this_proj -> nspec) setup_image_spec_data (this_proj, img); } /*! \fn gboolean is_GLExtension_Supported (const char * extension) \brief test if this GLExtension is support \param extension the target GLExtension */ gboolean is_GLExtension_Supported (const char * extension) { int i, j; i = j = 0; glGetIntegerv (GL_NUM_EXTENSIONS, & i); for (j=0; j steps; l++) { x = 0.0; y = 0.0; z = 0.0; for (i = 0; i < this_proj -> natomes; i++) { x += this_proj -> atoms[l][i].x; y += this_proj -> atoms[l][i].y; z += this_proj -> atoms[l][i].z; } x /= this_proj -> natomes; y /= this_proj -> natomes; z /= this_proj -> natomes; for (i = 0; i < this_proj -> natomes; i++) { this_proj -> atoms[l][i].x -= x; this_proj -> atoms[l][i].y -= y; this_proj -> atoms[l][i].z -= z; } for (i=0; i modelgl -> volume_box[i]) { if (this_proj -> modelgl -> volume_box[i][l]) { this_proj -> modelgl -> volume_box[i][l][6] -= x; this_proj -> modelgl -> volume_box[i][l][7] -= y; this_proj -> modelgl -> volume_box[i][l][8] -= z; rot = m4_rotation_anti_xyz (this_proj -> modelgl -> volume_box[i][l][3], this_proj -> modelgl -> volume_box[i][l][4], this_proj -> modelgl -> volume_box[i][l][5]); bini = m4_mul_coord (rot, vec3(this_proj -> modelgl -> volume_box[i][l][6], this_proj -> modelgl -> volume_box[i][l][7], this_proj -> modelgl -> volume_box[i][l][8])); bini.x -= x; bini.y -= y; bini.z -= z; rot = m4_rotation_xyz (this_proj -> modelgl -> volume_box[i][l][3], this_proj -> modelgl -> volume_box[i][l][4], this_proj -> modelgl -> volume_box[i][l][5]); bend = m4_mul_coord (rot, bini); this_proj -> modelgl -> volume_box[i][l][6] = bend.x; this_proj -> modelgl -> volume_box[i][l][7] = bend.y; this_proj -> modelgl -> volume_box[i][l][8] = bend.z; } } if (this_proj -> modelgl -> frag_box[i]) { if (this_proj -> modelgl -> frag_box[i][l]) { for (j=0; j coord -> totcoord[2]; j++) { rot = m4_rotation_anti_xyz (this_proj -> modelgl -> frag_box[i][l][j][3], this_proj -> modelgl -> frag_box[i][l][j][4], this_proj -> modelgl -> frag_box[i][l][j][5]); bini = m4_mul_coord (rot, vec3(this_proj -> modelgl -> frag_box[i][l][j][6], this_proj -> modelgl -> frag_box[i][l][j][7], this_proj -> modelgl -> frag_box[i][l][j][8])); bini.x -= x; bini.y -= y; bini.z -= z; rot = m4_rotation_xyz (this_proj -> modelgl -> frag_box[i][l][j][3], this_proj -> modelgl -> frag_box[i][l][j][4], this_proj -> modelgl -> frag_box[i][l][j][5]); bend = m4_mul_coord (rot, bini); this_proj -> modelgl -> frag_box[i][l][j][6] = bend.x; this_proj -> modelgl -> frag_box[i][l][j][7] = bend.y; this_proj -> modelgl -> frag_box[i][l][j][8] = bend.z; } } } } } this_proj -> cell.crystal = FALSE; } /*! \fn void center_this_molecule (glwin * view) \brief center atomic coordinates around (0,0,0) and refresh shaders \param view the target glwin */ void center_this_molecule (glwin * view) { center_molecule (get_project_by_id(view -> proj)); view -> insert_coords = vec3(0.0, 0.0, 0.0); int shaders[6] = {ATOMS, BONDS, POLYS, RINGS, SELEC, VOLMS}; re_create_md_shaders (6, shaders, get_project_by_id(view -> proj)); view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); } /*! \fn void free_glwin_spec_data (project * this_proj, int spec) \brief free the memory used by the chemical species related data in a glwin data structure \param this_proj the target project \param spec the number of chemical species */ void free_glwin_spec_data (project * this_proj, int spec) { int i, j, k; for (i=0; i modelgl -> colorp[i] != NULL) { g_free (this_proj -> modelgl -> colorp[i]); this_proj -> modelgl -> colorp[i] = NULL; } } for (i=0; i<10; i++) { k = (i > 2) ? 1 : spec; if (i < 2 || i > 3) { for (j=0; j coord -> geolist[i][j] != NULL) { g_free (this_proj -> coord -> geolist[i][j]); this_proj -> coord -> geolist[i][j] = NULL; } } this_proj -> coord -> geolist[i]=NULL; } } for (i=0; i coord -> partial_geo[i] != NULL) g_free (this_proj -> coord -> partial_geo[i]); this_proj -> coord -> partial_geo[i] = NULL; } g_free (this_proj -> coord -> partial_geo); this_proj -> coord -> partial_geo = NULL; } /*! \fn void glwin_init_spec_data (project * this_proj, int nspec) \brief initialize the glwin chemical species related pointers \param this_proj the target project \param nspec the number of chemical species */ void glwin_init_spec_data (project * this_proj, int nspec) { int i, j, k; for (i=0; i modelgl -> colorp[i] = NULL; this_proj -> modelgl -> colorp[i] = g_malloc0(nspec*2*sizeof*this_proj -> modelgl -> colorp[i]); for (j=0; j modelgl -> colorp[i][j].a = this_proj -> id; this_proj -> modelgl -> colorp[i][j].b = i; this_proj -> modelgl -> colorp[i][j].c = j; } } #ifdef GTK3 // GTK3 Menu Action To Check int l; #endif for (i=0; i<10; i++) { k = (i > 2) ? 1 : nspec; #ifdef GTK3 // GTK3 Menu Action To Check for (j = 0; j < 2; j++) { this_proj -> modelgl -> oglmv[j][i] = NULL; this_proj -> modelgl -> oglmv[j][i] = g_malloc0(k*sizeof*this_proj -> modelgl -> oglmv[j][i]); if (i < 9) { this_proj -> modelgl -> oglmc[j][i] = NULL; this_proj -> modelgl -> oglmc[j][i] = g_malloc0(k*sizeof*this_proj -> modelgl -> oglmc[j][i]); } if (i < 2 || (i > 3 && i < 9)) { this_proj -> modelgl -> oglmpv[j][i] = NULL; this_proj -> modelgl -> oglmpv[j][i] = g_malloc0(k*sizeof*this_proj -> modelgl -> oglmpv[j][i]); } for (l=0; l modelgl -> oglmv[j][i][l] = NULL; if (i < 9) this_proj -> modelgl -> oglmc[j][i][l] = NULL; if (i < 2 || (i > 3 && i < 9)) this_proj -> modelgl -> oglmpv[j][i][l] = NULL; } } #endif if (i < 2 || i > 3) { this_proj -> coord -> geolist[i] = g_malloc0(k*sizeof*this_proj -> coord -> geolist[i]); for (j=0; j coord -> geolist[i][j] = NULL; } } } this_proj -> coord -> partial_geo = g_malloc0(nspec*sizeof*this_proj -> coord -> partial_geo); for (i=0; i coord -> partial_geo[i] = NULL; } /*! \fn void init_glwin (glwin * view) \brief initialize a glwin pointer \param view the target glwin */ void init_glwin (glwin * view) { project * this_proj = get_project_by_id(view -> proj); // Have to be the active project view -> anim = g_malloc0(sizeof*view -> anim); snapshot * snap = g_malloc0(sizeof*snap); view -> anim -> first = snap; view -> anim -> last = snap; init_img (this_proj); init_camera (this_proj); view -> mouseStatus = RELEASED; view -> mouseAction = ANALYZE; // Warning, if not centered at start-up, dmtx could fail if (! this_proj -> cell.crystal) center_molecule (this_proj); view -> bonds = allocdint (this_proj -> steps, 2); view -> bondid = g_malloc0(this_proj -> steps*sizeof*view -> bondid); view -> clones = g_malloc0(this_proj -> steps*sizeof*view -> clones); int i; for (i=0; i < this_proj -> steps; i++) { view -> bondid[i] = g_malloc0(2*sizeof*view -> bondid[i]); view -> clones[i] = NULL; } // Data that depends on the number of chemical species glwin_init_spec_data (this_proj, (this_proj -> nspec) ? this_proj -> nspec : 1); view -> stop = TRUE; view -> speed = 100; view -> zoom_factor = ZOOM_FACTOR; view -> mode = ANALYZE; view -> selection_mode = ATOMS; // On normal motion and copy rebuild: view -> rebuild[0][0] = view -> rebuild[1][0] = (this_proj -> steps > 1) ? FALSE : TRUE; view -> init = TRUE; init_opengl (); init_shaders (view); this_proj -> initgl = TRUE; #ifdef GTK4 if (view -> win) update_menu_bar (view); #endif } /*! \fn GError * init_gtk_gl_area (GtkGLArea * area) \brief initialize a GtkGLArea, return error if any \param area the GtkGLArea point to initialize */ GError * init_gtk_gl_area (GtkGLArea * area) { if (area == NULL) { area = (GtkGLArea *)gtk_gl_area_new (); } else { gtk_gl_area_make_current (area); } gtk_gl_area_set_has_depth_buffer (area, TRUE); gtk_gl_area_set_has_stencil_buffer (area, TRUE); return gtk_gl_area_get_error (area); } #ifdef GTKGLAREA /*! \fn G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) \brief realize event for a GtkGLArea \param area the GtkGLArea sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) \brief realize event for the OpenGL widget \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; GError * err; #ifdef GTKGLAREA err = init_gtk_gl_area (area); if (err == NULL) { #else GdkWindow * xwin = gtk_widget_get_window (view -> plot); GLint attr_list[] = {GLX_DOUBLEBUFFER, GLX_RGBA, GLX_DEPTH_SIZE, 1, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None}; XVisualInfo * visualinfo = glXChooseVisual (GDK_WINDOW_XDISPLAY (xwin), gdk_screen_get_number (gdk_window_get_screen (xwin)), attr_list); view -> glcontext = glXCreateContext (GDK_WINDOW_XDISPLAY (xwin), visualinfo, NULL, TRUE); g_free (visualinfo); if (glXMakeCurrent (GDK_WINDOW_XDISPLAY (xwin), GDK_WINDOW_XID (xwin), view -> glcontext)) { #endif init_glwin (view); } else { gchar * errm = g_strdup_printf (_("Impossible to initialize the OpenGL 3D rendering ! \n %s\n"), err -> message); g_error_free (err); show_error (errm, 0, MainWindow); g_free (errm); } } #ifdef GTKGLAREA /*! \fn G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) \brief OpenGL rendering widget expose event callback GTK4 \param area the GtkGLArea sending the signal \param context the associated GdkGLContext \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) \brief OpenGL rendering widget expose event callback GTK3 \param widg the GtkWidget sending the signal \param cr the cairo drawing context to use for the draw \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) #endif { glwin * view = (glwin *) data; #ifdef GTK3 GdkEvent * event = gtk_get_current_event (); if (event && event -> type == GDK_EXPOSE && ((GdkEventExpose *)event) -> count > 0) return TRUE; #endif #ifdef GTKGLAREA render_this_gl_window (view, area); #else render_this_gl_window (view, widg, 0); #endif return TRUE; } atomes_1.3.1/src/fortran/0000775000175000017500000000000015212624223014747 5ustar lerouxlerouxatomes_1.3.1/src/fortran/allocmsd.F900000664000175000017500000000644715212624223017040 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file allocmsd.F90 !! @short Memory allocation for MSD analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCMSD() USE PARAMETERS if (allocated(D2i)) deallocate(D2i) allocate(D2i(NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2i"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2iNAC)) deallocate(D2iNAC) allocate(D2iNAC(NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2iNAC"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2dir)) deallocate(D2dir) allocate(D2dir(NSP,6,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2dir"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2dirNAC)) deallocate(D2dirNAC) allocate(D2dirNAC(NSP,6,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2dir"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(Dcte)) deallocate(Dcte) allocate(Dcte(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: Dcte"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(COR)) deallocate(COR) allocate(COR(3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: COR"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(DRIFT)) deallocate(DRIFT) allocate(DRIFT(3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: DRIFT"//CHAR(0)) ALLOCMSD = .false. goto 001 endif D2i(:,:)=0.0d0 D2iNAC(:,:)=0.0d0 D2dir(:,:,:) =0.0d0 D2dirNAC(:,:,:) =0.0d0 Dcte(:)=0.0d0 COR(:,:)=0.0d0 DRIFT(:,:)=0.0d0 ALLOCMSD=.true. 001 continue END FUNCTION SUBROUTINE DEALLOCMSD ! ! Memory allocation for bond properties ! USE PARAMETERS if (allocated(D2i)) deallocate(D2i) if (allocated(D2iNAC)) deallocate(D2iNAC) if (allocated(D2dir)) deallocate(D2dir) if (allocated(D2dirNAC)) deallocate(D2dirNAC) if (allocated(Dcte)) deallocate(Dcte) if (allocated(COR)) deallocate(COR) if (allocated(DRIFT)) deallocate(DRIFT) END SUBROUTINE atomes_1.3.1/src/fortran/utils.F900000664000175000017500000004553315212624223016401 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file utils.F90 !! @short Global function declarations !! @author Sébastien Le Roux ! ! This file contains various tools ! !******************************************************************** ! ! Transformer un entier en chaine de charactères ! Transform an integer into character ! SUBROUTINE CHARINT(Word, Num) IMPLICIT NONE INTEGER :: lc INTEGER, INTENT(IN) :: Num CHARACTER (LEN=16) :: Pseudo CHARACTER (LEN=15), INTENT(INOUT) :: Word Word=' ' write (Word, *) Num lc=1 do while (Word(1:lc) .eq. ' ') lc= lc+1 enddo Pseudo=Word Word=' ' write (Word, *) Pseudo(lc:LEN_TRIM(Pseudo)) END SUBROUTINE SUBROUTINE CREAT_RING (RING_INIT, ELEM_CR) USE PARAMETERS IMPLICIT NONE TYPE (RING), INTENT(INOUT) :: RING_INIT INTEGER, INTENT(IN) :: ELEM_CR RING_INIT%SPEC = 0 RING_INIT%ATOM = ELEM_CR nullify(RING_INIT%PAST) nullify(RING_INIT%NEXT) END SUBROUTINE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS IMPLICIT NONE TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING !INTEGER, DIMENSION(NA), INTENT(INOUT) :: RPT INTEGER, INTENT(IN) :: ELEM_DO TYPE (RING), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: DO_RING"//CHAR(0), "Pointer: NEW"//CHAR(0)) ALC=.true. goto 001 endif nullify(NEW%NEXT) nullify(NEW%PAST) THE_RING%NEXT => NEW NEW%PAST => THE_RING NEW%ATOM = ELEM_DO NEW%SPEC = THE_RING%SPEC+1 THE_RING => NEW !if (RPT(THE_RING%ATOM) .eq. 0) then ! RPT(THE_RING%ATOM) = 1 !endif 001 continue END SUBROUTINE !******************************************************************** ! ! Calculer une distance ! Compute a distance including PBC ! SUBROUTINE CALCRIJ(AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID INTEGER :: R1 DOUBLE PRECISION, DIMENSION(3) :: COORDA, COORDB DOUBLE PRECISION, DIMENSION(3) :: Aij, Bij, Nij if (STEP_1 .eq. -2) then do R1=1, 3 COORDA(R1) = NFULLPOS(AT1,R1,STEP_2) COORDB(R1) = NFULLPOS(AT2,R1,STEP_2) enddo elseif (STEP_1 .eq. -1) then ! Prepos for MSD do R1=1, 3 COORDA(R1) = POB(AT2,R1) COORDB(R1) = POA(AT1,R1) enddo else ! Standard inter-atomic distance do R1=1, 3 COORDA(R1) = FULLPOS(AT1,R1,STEP_1) COORDB(R1) = FULLPOS(AT2,R1,STEP_2) enddo endif do R1=1, 3 Rij(R1) = COORDA(R1) - COORDB(R1) enddo if (.not.PBC) goto 001 ! Test if the simulation box is cubic-like symmetric ! For that we check the lattice angles if (THE_BOX(SID)%GLASS) then do R1=1, 3 Rij(R1)=Rij(R1) - ANint(Rij(R1)/(THE_BOX(SID)%modv(R1)))*(THE_BOX(SID)%modv(R1)) enddo else Aij = MATMUL(COORDA,THE_BOX(SID)%carttofrac) Bij = MATMUL(COORDB,THE_BOX(SID)%carttofrac) do R1=1,3 Nij(R1) = Aij(R1) - Bij(R1) Nij(R1) = Nij(R1) - AnINT(Nij(R1)) enddo Rij = MATMUL(Nij,THE_BOX(SID)%fractocart) endif 001 continue Dij=0.0d0 do R1=1, 3 Dij=Dij+Rij(R1)**2 enddo END SUBROUTINE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID INTEGER :: R1 DOUBLE PRECISION, DIMENSION(3) :: COORDA, COORDB DOUBLE PRECISION, DIMENSION(3) :: Aij, Bij, Nij if (STEP_1 .eq. -2) then do R1=1, 3 COORDA(R1) = NFULLPOS(AT1,R1,STEP_2) COORDB(R1) = NFULLPOS(AT2,R1,STEP_2) enddo elseif (STEP_1 .eq. -1) then ! Prepos for MSD do R1=1, 3 COORDA(R1) = POB(AT2,R1) COORDB(R1) = POA(AT1,R1) enddo else ! Standard inter-atomic distance do R1=1, 3 COORDA(R1) = FULLPOS(AT1,R1,STEP_1) COORDB(R1) = FULLPOS(AT2,R1,STEP_2) enddo endif do R1=1, 3 R12(R1) = COORDA(R1) - COORDB(R1) enddo if (.not.PBC) goto 001 ! Test if the simulation box is cubic-like symetric ! For that we check the lattice angles if (THE_BOX(SID)%GLASS) then do R1=1, 3 R12(R1)=R12(R1) - ANint(R12(R1)/(THE_BOX(SID)%modv(R1)))*(THE_BOX(SID)%modv(R1)) enddo else Aij = MATMUL(COORDA,THE_BOX(SID)%carttofrac) Bij = MATMUL(COORDB,THE_BOX(SID)%carttofrac) do R1=1,3 Nij(R1) = Aij(R1) - Bij(R1) Nij(R1) = Nij(R1) - AnINT(Nij(R1)) enddo R12 = MATMUL(Nij,THE_BOX(SID)%fractocart) endif 001 continue CALCDIJ = 0.0d0 do R1=1, 3 CALCDIJ = CALCDIJ + R12(R1)**2 enddo END FUNCTION !******************************************************************** ! ! Home made arcosine calculation ! DOUBLE PRECISION FUNCTION SACOS (ANG) USE PARAMETERS DOUBLE PRECISION, INTENT(IN) :: ANG DOUBLE PRECISION :: SCOS if (ANG .lt. -1.0d0) then SCOS = -2.0d0 - ANG else if (ANG .gt. 1.0d0) then SCOS = 2.0d0 - ANG else SCOS = ANG endif SACOS = DACOS(SCOS)*180.d0/PI END FUNCTION !******************************************************************** ! ! Calculer un angle direct ! Compute a direct angle ! DOUBLE PRECISION FUNCTION ANGIJK(ATG1, ATG2, ATG3, ASTEP) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ATG1, ATG2, ATG3, ASTEP INTEGER :: AG1, AG2 DOUBLE PRECISION :: DAA, DBB, VANG DOUBLE PRECISION, DIMENSION(3) :: RAA, RBB INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SACOS (ANG) DOUBLE PRECISION, INTENT(IN) :: ANG END FUNCTION END INTERFACE if (NCELLS .gt. 1) then AG2 = ASTEP else AG2 = 1 endif DAA = CALCDIJ(RAA, ATG2,ATG1,ASTEP,ASTEP,AG2) DAA=sqrt(DAA) DBB = CALCDIJ(RBB, ATG2,ATG3,ASTEP,ASTEP,AG2) VANG=0.0d0 do AG1=1, 3 VANG=VANG+RAA(AG1)*RBB(AG1) enddo DBB=sqrt(DBB) ANGIJK = SACOS(VANG/(DAA*DBB)) END FUNCTION !******************************************************************** ! ! Calculer un angle dièdre ! Compute a dihedral angle ! DOUBLE PRECISION FUNCTION DIEDRE(DG1, DG2, DG3, DG4, DSTEP) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: DG1, DG2, DG3, DG4, DSTEP INTEGER :: AG, AH DOUBLE PRECISION :: DH1, DH2, DH3, VDI DOUBLE PRECISION, DIMENSION(3) :: D12, D23, D34 DOUBLE PRECISION, DIMENSION(3) :: VH1, VH2 INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SACOS (ANG) DOUBLE PRECISION, INTENT(IN) :: ANG END FUNCTION END INTERFACE if (NCELLS .gt. 1) then AH = DSTEP else AH = 1 endif DH1 = CALCDIJ(D12,DG1,DG2,DSTEP,DSTEP,AH) DH2 = CALCDIJ(D23,DG2,DG3,DSTEP,DSTEP,AH) DH3 = CALCDIJ(D34,DG3,DG4,DSTEP,DSTEP,AH) VH1(1) = D12(2)*D23(3) - D12(3)*D23(2) VH1(2) = D12(3)*D23(1) - D12(1)*D23(3) VH1(3) = D12(1)*D23(2) - D12(2)*D23(1) VH2(1) = D23(2)*D34(3) - D23(3)*D34(2) VH2(2) = D23(3)*D34(1) - D23(1)*D34(3) VH2(3) = D23(1)*D34(2) - D23(2)*D34(1) DH1=0.0d0 DH2=0.0d0 do AG=1, 3 DH1 = DH1 + VH1(AG)*VH1(AG) DH2 = DH2 + VH2(AG)*VH2(AG) enddo DH1=sqrt(DH1) DH2=sqrt(DH2) if (DH1.eq.0.0d0 .or. DH2.eq.0.0d0) then DIEDRE = 0.0d0 else VDI = 0.0d0 do AG=1, 3 VDI=VDI+VH1(AG)*VH2(AG) enddo VDI = VDI/(DH1*DH2) DIEDRE = SACOS (VDI) endif END FUNCTION ! Cas particulier lors des statistiques d'anneaux SUBROUTINE ECT_TYPE_RINGS(MOYENNE, TABLEAU, LONGTE, LREPRES, EC_TYPE) INTEGER :: pose INTEGER, INTENT(IN) :: LONGTE, LREPRES DOUBLE PRECISION, INTENT(IN) :: MOYENNE DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTE) :: TABLEAU DOUBLE PRECISION, INTENT(INOUT) :: EC_TYPE EC_TYPE=0.0d0 do pose=1, LONGTE if (TABLEAU(pose) .ne. 0.0) EC_TYPE= EC_TYPE + (TABLEAU(pose) - MOYENNE)**2 enddo EC_TYPE=sqrt(EC_TYPE/dble(LREPRES-1)) END SUBROUTINE !******************************************************************** ! ! Générateur de nombre aléatoire ! Numerical recipes random number generator 3 ! DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum INTEGER :: idum INTEGER :: MBIG,MSEED,MZ INTEGER :: iii,iff,ii,inext,inextp,k INTEGER :: mj,mk,ma(55) DOUBLE PRECISION :: FAC PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG) SAVE iff,inext,inextp,ma DATA iff /0/ idum = idnum if(idum.lt.0 .or. iff.eq.0)then iff=1 mj=MSEED-iabs(idum) mj=mod(mj,MBIG) ma(55)=mj mk=1 do 11 iii=1,54 ii=mod(21*iii,55) ma(ii)=mk mk=mj-mk if(mk.lt.MZ)mk=mk+MBIG mj=ma(ii) 11 continue do 13 k=1,4 do 12 iii=1,55 ma(iii)=ma(iii)-ma(1+mod(iii+30,55)) if(ma(iii).lt.MZ)ma(iii)=ma(iii)+MBIG 12 continue 13 continue inext=0 inextp=31 idum=1 endif inext=inext+1 if(inext.eq.56)inext=1 inextp=inextp+1 if(inextp.eq.56)inextp=1 mj=ma(inext)-ma(inextp) if(mj.lt.MZ)mj=mj+MBIG ma(inext)=mj RAN3=mj*FAC END FUNCTION REAL (KIND=c_double) FUNCTION random3(seed) BIND (C,NAME='random3_') USE, INTRINSIC :: iso_c_binding INTEGER (KIND=c_int), INTENT(IN) :: seed INTERFACE DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum END FUNCTION END INTERFACE random3 = RAN3(seed) END FUNCTION !******************************************************************** ! ! Calculer la somme d'une série de valeurs ! Compute sum of a list of values ! SUBROUTINE SOMME(TABS, LONGTS, SOMTAB) INTEGER :: posm INTEGER, INTENT(IN) :: LONGTS DOUBLE PRECISION, INTENT(INOUT) :: SOMTAB DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTS) :: TABS SOMTAB=0.0d0 do posm=1, LONGTS SOMTAB=SOMTAB+TABS(posm) enddo END SUBROUTINE !******************************************************************** ! ! Calculer la moyenne d'une série de valeurs ! Compute the average of list of values ! SUBROUTINE MOYENNE(TABLEAU, LONGTM, MOYTAB) INTEGER :: posm INTEGER, INTENT(IN) :: LONGTM DOUBLE PRECISION, INTENT(INOUT) :: MOYTAB DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTM) :: TABLEAU MOYTAB=0.0d0 do posm=1, LONGTM MOYTAB=MOYTAB+TABLEAU(posm) enddo MOYTAB=MOYTAB/dble(LONGTM) END SUBROUTINE !******************************************************************** ! ! Calculer l'écart type sur une série de valeurs ! Compute the standard error on a list of values ! SUBROUTINE ECT_TYPE(MOYENNE, TABLEAU, LONGTE, EC_TYPE) INTEGER :: pose INTEGER, INTENT(IN) :: LONGTE DOUBLE PRECISION, INTENT(IN) :: MOYENNE DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTE) :: TABLEAU DOUBLE PRECISION, INTENT(INOUT) :: EC_TYPE EC_TYPE=0.0d0 do pose=1, LONGTE EC_TYPE= EC_TYPE + (TABLEAU(pose) - MOYENNE)**2 enddo EC_TYPE=sqrt(EC_TYPE/dble(LONGTE-1)) END SUBROUTINE !******************************************************************** ! ! Trier une liste d'entiers ! Sort a list of integers ! This is the most simple sort ! For an improved routine (huge data to sort) see SORT3 in this file ! SUBROUTINE TRI(TAB, DIMTAB) IMPLICIT NONE INTEGER, INTENT(IN) :: DIMTAB INTEGER, DIMENSION(DIMTAB), INTENT(INOUT) :: TAB INTEGER :: SORTX, SORTY, VALUE do SORTX=2, DIMTAB VALUE=TAB(SORTX) do SORTY=SORTX-1, 1, -1 if (TAB(SORTY) .le. VALUE) exit TAB(SORTY+1)=TAB(SORTY) enddo TAB(SORTY+1)=VALUE enddo END SUBROUTINE !******************************************************************** ! ! Lisser une courbe / To smooth a curve ! LOGICAL FUNCTION SMOOTH (TABTOLISS, GTOLISS, DIMTOLISS, SIGMALISS) ! Lissage selon une gaussienne ! Gaussian smoothing - zero based curve IMPLICIT NONE INTEGER, INTENT(IN) :: DIMTOLISS DOUBLE PRECISION, INTENT(IN) :: SIGMALISS DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMTOLISS) :: GTOLISS DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMTOLISS) :: TABTOLISS INTEGER :: INDA, INDB, ERR DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) DOUBLE PRECISION :: DQ, DQ2 DOUBLE PRECISION :: FACTLISS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: NEWTAB allocate(NEWTAB(DIMTOLISS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SMOOTH"//CHAR(0), "Table: NEWTAB"//CHAR(0)) SMOOTH=.false. goto 001 endif do INDA=1, DIMTOLISS NEWTAB(INDA)=0.0d0 enddo FACTLISS=1.0d0/(SIGMALISS*sqrt(2.0d0*PI)) do INDA=1, DIMTOLISS do INDB=1, DIMTOLISS if(INDB .eq. 1)then DQ= GTOLISS(2)-GTOLISS(1) elseif (INDB .eq. DIMTOLISS) then DQ = GTOLISS(DIMTOLISS)- GTOLISS(DIMTOLISS-1) else DQ = (GTOLISS(INDB+1)- GTOLISS(INDB-1))*0.5 endif DQ2=(GTOLISS(INDA)-GTOLISS(INDB))*(GTOLISS(INDA)-GTOLISS(INDB)) NEWTAB(INDA) = NEWTAB(INDA) + exp(-DQ2/(2.0d0*SIGMALISS*SIGMALISS))*TABTOLISS(INDB)*DQ enddo NEWTAB(INDA)=FACTLISS*NEWTAB(INDA) enddo do INDA=1, DIMTOLISS TABTOLISS(INDA)=NEWTAB(INDA) enddo SMOOTH=.true. 001 continue if (allocated(NEWTAB)) deallocate(NEWTAB) END FUNCTION !******************************************************************** ! ! Sort routine adapted from: ! Numerical sort array 3 - Quicksort INTEGER ! SUBROUTINE SORT3(arr, ndum) INTEGER, INTENT(IN) :: ndum INTEGER, DIMENSION(ndum) :: index INTEGER, DIMENSION(ndum), INTENT(INOUT) :: arr call indexx_i(arr, index, ndum) arr=arr(index) END SUBROUTINE SUBROUTINE indexx_i(arr, index, n) IMPLICIT NONE INTEGER, PARAMETER :: NPAR_ARTH=16,NPAR2_ARTH=8 INTEGER, DIMENSION(n), INTENT(INOUT) :: index INTEGER, PARAMETER :: NN=15, NSTACK=50 INTEGER, INTENT(IN) :: n INTEGER :: k,i,j,indext,jstack,l,r INTEGER, DIMENSION(NSTACK) :: istack INTEGER :: a INTEGER, DIMENSION(n), INTENT(IN) :: arr call arth(1,1,n,index) jstack=0 l=1 r=n do if (r-l < NN) then do j=l+1,r indext=index(j) a=arr(indext) do i=j-1,l,-1 if (arr(index(i)) <= a) exit index(i+1)=index(i) end do index(i+1)=indext end do if (jstack .eq. 0) RETURN r=istack(jstack) l=istack(jstack-1) jstack=jstack-2 else k=(l+r)/2 call swap(index(k),index(l+1)) call icomp_xchg(index(l),index(r)) call icomp_xchg(index(l+1),index(r)) call icomp_xchg(index(l),index(l+1)) i=l+1 j=r indext=index(l+1) a=arr(indext) do do i=i+1 if (arr(index(i)) >= a) exit end do do j=j-1 if (arr(index(j)) <= a) exit end do if (j < i) exit call swap(index(i),index(j)) end do index(l+1)=index(j) index(j)=indext jstack=jstack+2 if (jstack > NSTACK) write (6, *) 'Sort3 error: indexx: NSTACK too small' if (r-i+1 >= j-l) then istack(jstack)=r istack(jstack-1)=i r=j-1 else istack(jstack)=j-1 istack(jstack-1)=l l=i end if end if end do CONTAINS !BL SUBROUTINE icomp_xchg(i, j) INTEGER, INTENT(INOUT) :: i,j INTEGER :: swp if (arr(j) < arr(i)) then swp=i i=j j=swp end if END SUBROUTINE icomp_xchg SUBROUTINE arth(first, increment, m, arth_i) INTEGER, INTENT(IN) :: first,increment,m INTEGER, DIMENSION(m) :: arth_i INTEGER :: k,k2,temp if (m > 0) arth_i(1)=first if (m <= NPAR_ARTH) then do k=2,m arth_i(k)=arth_i(k-1)+increment end do else do k=2,NPAR2_ARTH arth_i(k)=arth_i(k-1)+increment end do temp=increment*NPAR2_ARTH k=NPAR2_ARTH do if (k >= m) exit k2=k+k arth_i(k+1:min(k2,m))=temp+arth_i(1:min(k,m-k)) temp=temp+temp k=k2 end do end if END SUBROUTINE SUBROUTINE swap(a,b) INTEGER, INTENT(INOUT) :: a,b INTEGER :: dum dum=a a=b b=dum END SUBROUTINE swap END SUBROUTINE indexx_i !******************************************************************** !******************************************************************** ! ! Sort routine adapted from: ! Numerical sort array 3 - Quicksort DOUBLE PRECISION ! SUBROUTINE SORT3_DP (arr, ndum) INTEGER, INTENT(IN) :: ndum INTEGER, DIMENSION(ndum) :: index DOUBLE PRECISION, DIMENSION(ndum), INTENT(INOUT) :: arr call indexx_dp (arr, index, ndum) arr=arr(index) END SUBROUTINE SUBROUTINE indexx_dp (arr, index, n) IMPLICIT NONE INTEGER, PARAMETER :: NPAR_ARTH=16,NPAR2_ARTH=8 INTEGER, DIMENSION(n), INTENT(INOUT) :: index INTEGER, PARAMETER :: NN=15, NSTACK=50 INTEGER, INTENT(IN) :: n INTEGER :: k,i,j,indext,jstack,l,r INTEGER, DIMENSION(NSTACK) :: istack DOUBLE PRECISION :: a DOUBLE PRECISION, DIMENSION(n), INTENT(IN) :: arr call arth(1,1,n,index) jstack=0 l=1 r=n do if (r-l < NN) then do j=l+1,r indext=index(j) a=arr(indext) do i=j-1,l,-1 if (arr(index(i)) <= a) exit index(i+1)=index(i) end do index(i+1)=indext end do if (jstack .eq. 0) RETURN r=istack(jstack) l=istack(jstack-1) jstack=jstack-2 else k=(l+r)/2 call swap(index(k),index(l+1)) call icomp_xchg(index(l),index(r)) call icomp_xchg(index(l+1),index(r)) call icomp_xchg(index(l),index(l+1)) i=l+1 j=r indext=index(l+1) a=arr(indext) do do i=i+1 if (arr(index(i)) >= a) exit end do do j=j-1 if (arr(index(j)) <= a) exit end do if (j < i) exit call swap(index(i),index(j)) end do index(l+1)=index(j) index(j)=indext jstack=jstack+2 if (jstack > NSTACK) write (6, *) 'Sort3 error: indexx: NSTACK too small' if (r-i+1 >= j-l) then istack(jstack)=r istack(jstack-1)=i r=j-1 else istack(jstack)=j-1 istack(jstack-1)=l l=i end if end if end do CONTAINS !BL SUBROUTINE icomp_xchg(i, j) INTEGER, INTENT(INOUT) :: i,j INTEGER :: swp if (arr(j) < arr(i)) then swp=i i=j j=swp end if END SUBROUTINE icomp_xchg SUBROUTINE arth(first, increment, m, arth_i) INTEGER, INTENT(IN) :: first,increment,m INTEGER, DIMENSION(m) :: arth_i INTEGER :: k,k2,temp if (m > 0) arth_i(1)=first if (m <= NPAR_ARTH) then do k=2,m arth_i(k)=arth_i(k-1)+increment end do else do k=2,NPAR2_ARTH arth_i(k)=arth_i(k-1)+increment end do temp=increment*NPAR2_ARTH k=NPAR2_ARTH do if (k >= m) exit k2=k+k arth_i(k+1:min(k2,m))=temp+arth_i(1:min(k,m-k)) temp=temp+temp k=k2 end do end if END SUBROUTINE SUBROUTINE swap(a,b) INTEGER, INTENT(INOUT) :: a,b INTEGER :: dum dum=a a=b b=dum END SUBROUTINE swap END SUBROUTINE indexx_dp !******************************************************************** atomes_1.3.1/src/fortran/spherical.F900000664000175000017500000002354215212624223017207 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file spherical.F90 !! @short Spherical harmonics analysis !! @author Sébastien Le Roux ! Bond order parameter from spherical harmonics INTEGER (KIND=c_int) FUNCTION sphericals (MAXL, SPC, GEO, IDC, COOSPH) USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: MAXL, SPC, GEO, IDC INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: COOSPH INTEGER :: NSPSH INTEGER, DIMENSION(:), ALLOCATABLE :: NEIGH LOGICAL :: SPHRUN DOUBLE PRECISION :: XC, YC, ZC DOUBLE PRECISION :: SR, ST, SP DOUBLE PRECISION, DIMENSION(0:MAXL,-MAXL:MAXL) :: HSP ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: THSP DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ATHSP DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: SPTSHP DOUBLE PRECISION, DIMENSION(0:MAXL) :: SPHA #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION PLEGENDRE (l, m, x) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION END INTERFACE if (allocated(NEIGH)) deallocate(NEIGH) allocate(NEIGH(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: NEIGH"//CHAR(0)) sphericals=0 goto 001 endif ! if (allocated(THSP)) deallocate(THSP) ! allocate(THSP(NBONDS,0:MAXL,-MAXL:MAXL), STAT=ERR) ! if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: sphericals"//CHAR(0), "Table: THSP"//CHAR(0)) ! sphericals=0 ! goto 001 ! endif if (allocated(ATHSP)) deallocate(ATHSP) allocate(ATHSP(0:MAXL,-MAXL:MAXL), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: ATHSP"//CHAR(0)) sphericals=0 goto 001 endif if (allocated(SPTSHP)) deallocate(SPTSHP) allocate(SPTSHP(0:MAXL,-MAXL:MAXL), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: SPTSHP"//CHAR(0)) sphericals=0 goto 001 endif ATHSP(:,:)=0.0d0 SPTSHP(:,:)=0.0d0 ANBONDS=0 NSPSH=0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif ! OpemMP on atoms do i=1, NS !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(SPHRUN, NEIGH, Dij, Rij, j, k, l, m, XC, YC, ZC, SR, ST, SP, HSP) & !$OMP& SHARED(NUMTH, i, NA, NSP, NCELLS, LOT, SPC, CONTJ, VOISJ, NSPSH, ATHSP, SPTSHP, ANBONDS, COOSPH, MAXL) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (LOT(j) .eq. SPC+1) then SPHRUN=.true. NEIGH(:)=0 do k=1, CONTJ(j,i) NEIGH(LOT(VOISJ(k,j,i)))=NEIGH(LOT(VOISJ(k,j,i)))+1 enddo !$OMP ATOMIC NSPSH=NSPSH+CONTJ(j,i) do k=1, NSP if (NEIGH(k) .ne. COOSPH(k)) then SPHRUN=.false. exit endif enddo if (SPHRUN) then !$OMP ATOMIC ANBONDS=ANBONDS+CONTJ(j,i) endif do k=1, CONTJ(j,i) if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, i) else Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, 1) endif XC=Rij(1) YC=Rij(2) ZC=Rij(3) ! NBONDS=NBONDS+1 call CART2SPHER(XC, YC, ZC, SR, ST, SP) do l=0, MAXL do m=0, l HSP(l,m) = 0.0d0 HSP(l,m) = PLEGENDRE (l, m, ST) * cos(SP * m) if (m .ne. 0) HSP(l,-m) = (-1)**m*HSP(l,m) enddo do m=-l, l ! THSP(NBONDS,l,m)=HSP(l,m) !$OMP ATOMIC SPTSHP(l,m)=SPTSHP(l,m)+HSP(l,m) if (SPHRUN) then !$OMP ATOMIC ATHSP(l,m)=ATHSP(l,m)+HSP(l,m) endif enddo enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(SPHRUN, NEIGH, Dij, Rij, i, j, k, l, m, XC, YC, ZC, SR, ST, SP, HSP) & !$OMP& SHARED(NUMTH, NS, NA, NSP, NCELLS, LOT, SPC, CONTJ, VOISJ, NSPSH, ATHSP, SPTSHP, ANBONDS, COOSPH, MAXL) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA if (LOT(j) .eq. SPC+1) then SPHRUN=.true. NEIGH(:)=0 do k=1, CONTJ(j,i) NEIGH(LOT(VOISJ(k,j,i)))=NEIGH(LOT(VOISJ(k,j,i)))+1 enddo #ifdef OPENMP !$OMP ATOMIC #endif NSPSH=NSPSH+CONTJ(j,i) do k=1, NSP if (NEIGH(k) .ne. COOSPH(k)) then SPHRUN=.false. exit endif enddo if (SPHRUN) then #ifdef OPENMP !$OMP ATOMIC #endif ANBONDS=ANBONDS+CONTJ(j,i) endif do k=1, CONTJ(j,i) if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, i) else Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, 1) endif XC=Rij(1) YC=Rij(2) ZC=Rij(3) ! NBONDS=NBONDS+1 call CART2SPHER(XC, YC, ZC, SR, ST, SP) do l=0, MAXL do m=0, l HSP(l,m) = 0.0d0 HSP(l,m) = PLEGENDRE (l, m, ST) * cos(SP * m) if (m .ne. 0) HSP(l,-m) = (-1)**m*HSP(l,m) enddo do m=-l, l ! THSP(NBONDS,l,m)=HSP(l,m) #ifdef OPENMP !$OMP ATOMIC #endif SPTSHP(l,m)=SPTSHP(l,m)+HSP(l,m) if (SPHRUN) then #ifdef OPENMP !$OMP ATOMIC #endif ATHSP(l,m)=ATHSP(l,m)+HSP(l,m) endif enddo enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (GEO .eq. 0) then SPHA(:)=0.0d0 if (NSPSH .gt. 0) then do l=0, MAXL do m=-l, l SPHA(l)=SPHA(l)+(SPTSHP(l,m)/NSPSH)**2 enddo SPHA(l)=sqrt(4*PI*SPHA(l)/(2*l+1)) enddo endif call save_curve (MAXL+1, SPHA, IDC-1, IDSP) endif SPHA(:)=0.0d0 if (ANBONDS .gt. 0) then do l=0, MAXL do m=-l, l SPHA(l)=SPHA(l)+(ATHSP(l,m)/ANBONDS)**2 enddo SPHA(l)=sqrt(4*PI*SPHA(l)/(2*l+1)) enddo endif call save_curve (MAXL+1, SPHA, IDC, IDSP) sphericals = 1 001 continue ! if (allocated(THSP)) deallocate(THSP) if (allocated(ATHSP)) deallocate(ATHSP) if (allocated(SPTSHP)) deallocate(SPTSHP) if (allocated(NEIGH)) deallocate(NEIGH) END FUNCTION SUBROUTINE CART2SPHER(XC, YC, ZC, RS, TS, PS) DOUBLE PRECISION, INTENT(IN) :: XC, YC, ZC DOUBLE PRECISION, INTENT(OUT) :: RS, TS, PS RS=0.0d0 TS=0.0d0 PS=0.0d0 RS= sqrt(XC**2 + YC**2 + ZC**2) TS= acos(ZC/RS) PS= atan2(XC, YC) END SUBROUTINE ! Adapted from Numercial Recipies ! DOUBLE PRECISION FUNCTION PLEGENDRE (l, m, x) DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION :: y INTEGER :: i, ll DOUBLE PRECISION :: fact, oldfact, pll, pmm, pmmp1, omx2 y=cos(x) pmm=1.0 if (m > 0) then omx2=(1.0-y)*(1.0+y) fact=1.0 i = 1 do while (i.le.m) pmm = pmm * (omx2*fact/(fact+1.0)) fact = fact + 2.0 i = i+1 enddo endif pmm=sqrt((2*m+1)*pmm/(4.0*PI)) if (mod(m,2) .eq. 1) pmm=-pmm if (l .eq. m) then PLEGENDRE=pmm else pmmp1=y*sqrt(2.0*m+3.0)*pmm if (l .eq. (m+1)) then PLEGENDRE=pmmp1 else oldfact=sqrt(2.0*m+3.0) ll=m+2 do while (ll.le.l) fact=sqrt((4.0*ll*ll-1.0)/(ll*ll-m*m)) pll=(y*pmmp1-pmm/oldfact)*fact oldfact=fact pmm=pmmp1 pmmp1=pll ll=ll+1 enddo PLEGENDRE=pll endif endif END FUNCTION DOUBLE PRECISION FUNCTION PLGNDR(l, m, x) DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) INTEGER :: j INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION :: prod INTERFACE DOUBLE PRECISION FUNCTION PLEGENDRE(l, m, x) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION END INTERFACE prod=1.0d0 j=l-m+1 do while (j.le.l+m) prod = prod*j j=j+1 enddo PLGNDR=sqrt(4.0*PI*prod/(2*l+1))*PLEGENDRE(l,m,x) END FUNCTION atomes_1.3.1/src/fortran/cqvf.F900000664000175000017500000001644515212624223016200 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file cqvf.F90 !! @short q vectors selection for the reciprocal calculation of the S(k) !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION cqvf (QMAX, QMIN, NQ, PROBA, LIMQ) BIND (C,NAME='cqvf_') ! ! Determines the q-vectors for which the q-dependent ! correlation functions are computed - general cell ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ REAL (KIND=c_double), INTENT(IN) :: PROBA, LIMQ REAL (KIND=c_double), INTENT(IN) :: QMAX, QMIN LOGICAL :: KPTS, KEEPKPTS INTEGER :: hkl, q_index, seed INTEGER :: klow, llow INTEGER, DIMENSION(3) :: NKPTS DOUBLE PRECISION, DIMENSION(3) :: qmrecip DOUBLE PRECISION :: QMAX2, QMIN2, LIMQ2 DOUBLE PRECISION :: kpx, kpy, kpz, keep INTERFACE DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum END FUNCTION END INTERFACE qmrecip(:) = 0.0d0 do i=1, NCELLS do j=1, 3 qmrecip(j) = qmrecip(j)+THE_BOX(i)%modr(j) enddo enddo qmrecip(:) = qmrecip(:)/NCELLS do i=1, 3 NKPTS(i) = AnINT(QMAX/qmrecip(i))+1 enddo hkl=0 ! To simplify the case of the calculation in the case of a simple cubic box if (OVERALL_CUBIC) then QMAX2=(QMAX/QMIN)**2 QMIN2=1.0d0 LIMQ2=(LIMQ/QMIN)**2 else QMAX2=QMAX**2 ! mod(q_max)**2 LIMQ2=LIMQ**2 QMIN2=QMIN**2 ! min module of the reciprocal lattice vectors - lattice.f90 endif q_index=0 qvmax=0.0d0 qvmin=50.0d0 do i=1, 2 ! The first iteration to evaluate the number of k-points ! to be saved for the analysis, and the second to store them. if (i .eq. 2) then NUMBER_OF_QMOD=q_index if (allocated(qvectx)) deallocate(qvectx) allocate(qvectx(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvectx"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(qvecty)) deallocate(qvecty) allocate(qvecty(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvecty"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(qvectz)) deallocate(qvectz) allocate(qvectz(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvectz"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(modq)) deallocate(modq) allocate(modq(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: modq"//CHAR(0)) CQVF=0 goto 001 endif q_index=0 endif do h=0, NKPTS(1) if (h .eq. 0) then klow=0 else klow=-NKPTS(2) endif do k=klow, NKPTS(2) if (k.eq.0 .and. h.eq.0) then llow=0 else llow=-NKPTS(3) endif do l=llow, NKPTS(3) if (OVERALL_CUBIC) then kpx= h kpy= k kpz= l else ! Note : because we only consider the first step this is an approximation in the case of NPT trajectory kpx= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,1) + k*THE_BOX(1)%lrecp(2,1) + l*THE_BOX(1)%lrecp(3,1)) kpy= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,2) + k*THE_BOX(1)%lrecp(2,2) + l*THE_BOX(1)%lrecp(3,2)) kpz= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,3) + k*THE_BOX(1)%lrecp(2,3) + l*THE_BOX(1)%lrecp(3,3)) endif qvmod= kpx**2 + kpy**2 + kpz**2 ! we want the maximum number of k-points in the FSDP part of the spectra ! therefore we choose to keep all qvectors with qmod in: ! minr < qmod < limq ! where 'minr' is minimum q modulus accessible considering the analyzed ! lattice ie. the minimum modulus of the reciprocal cell vectors, ! 'limq' is the limit to be fixed for the FSDP part of the spectra ! Thereafter: QMIN=minr**2 and LIMQ2=limq**2. ! The qvectors with a 'qmod > limq' are accepted with a probability of 'PROBA' if (qvmod .le. QMAX2 .and. qvmod .ge. QMIN2) then KPTS=.true. else KPTS=.false. endif if (i .eq. 1 .and. KPTS) then q_index=q_index+2 elseif (i .eq. 2 .and. KPTS) then if (qvmod .le. LIMQ2) then KEEPKPTS=.true. else seed=173932 keep = RAN3(seed+h**3+k**2+l**5) if (keep .le. PROBA) then KEEPKPTS=.true. else KEEPKPTS=.false. endif endif if (KEEPKPTS) then q_index=q_index+1 qvectx(q_index)=kpx qvecty(q_index)=kpy qvectz(q_index)=kpz modq(q_index)=sqrt(qvmod) qvmax=max(qvmax,modq(q_index)) qvmin=min(qvmin,modq(q_index)) if (h.ne.0 .or. k.ne.0 .or. l.ne.0) then q_index=q_index+1 qvectx(q_index)=-kpx qvecty(q_index)=-kpy qvectz(q_index)=-kpz modq(q_index)=sqrt(qvmod) endif endif endif enddo ! l enddo ! k enddo ! h enddo NUMBER_OF_QVECT=q_index ! NQ is given in input ! the value of each K_POINT is found in the ! interval |qvmax - qvmin| and then we compute ! the degeneracy of each K_POINT in q modulus. if (allocated(degeneracy)) deallocate(degeneracy) allocate(degeneracy(NQ+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: degeneracy"//CHAR(0)) CQVF=0 goto 001 endif degeneracy(:)=0 DELTA_Q=(qvmax-qvmin)/NQ do i=1, NUMBER_OF_QVECT hkl=AnINT((modq(i)-qvmin)/DELTA_Q)+1 degeneracy(hkl)=degeneracy(hkl)+1 enddo if (allocated(K_POINT)) deallocate(K_POINT) allocate(K_POINT(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: K_POINT"//CHAR(0)) CQVF=0 goto 001 endif do i=1, NQ K_POINT(i)=(i-1.0)*DELTA_Q+qvmin enddo if (OVERALL_CUBIC) then do i=1, NUMBER_OF_QVECT qvectx(i)=qvectx(i)*QMIN qvecty(i)=qvecty(i)*QMIN qvectz(i)=qvectz(i)*QMIN enddo do i=1, NQ K_POINT(i)=K_POINT(i)*QMIN enddo endif !do i=1, NQ ! write (6, *) "i= ",i,", K_POINT(i)= ",K_POINT(i) !enddo CQVF=1 001 continue END FUNCTION atomes_1.3.1/src/fortran/allochem.F900000664000175000017500000000706415212624223017022 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file allochem.F90 !! @short Memory allocation for chemistry buffers !! @author Sébastien Le Roux INTEGER FUNCTION ALLOCHEM () USE PARAMETERS IMPLICIT NONE GRNUM=16+5*NSP*NSP SQNUM=8+4*NSP*NSP SKNUM=8+4*NSP*NSP GQNUM=GRNUM BDNUM=NSP*NSP ANNUM=NSP*NSP*NSP+NSP*NSP*NSP*NSP if (NSP .eq. 2) then GRNUM=GRNUM+6 SQNUM=SQNUM+8 SKNUM=SKNUM+8 GQNUM=GQNUM+6 endif RINUM=20*(NSP+1) CHNUM=NSP+1 SHNUM=NSP+1 MSNUM=0 if (NS .gt. 1) MSNUM=14*NSP+6 if (allocated(NBSPBS)) deallocate(NBSPBS) allocate(NBSPBS(NSP+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: NBSPBS"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(TL)) deallocate(TL) allocate(TL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: TL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(MASS)) deallocate(MASS) allocate(MASS(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: MASS"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(RVDW)) deallocate(RVDW) allocate(RVDW(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: RVDW"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(ATOMID)) deallocate(ATOMID) allocate(ATOMID(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: ATOMID"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(Gr_CUT)) deallocate(Gr_CUT) allocate(Gr_CUT(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: Gr_CUT"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(Xi)) deallocate(Xi) allocate(Xi(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: Xi"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(NSCATTL)) deallocate(NSCATTL) allocate(NSCATTL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: NSCATTL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(XSCATTL)) deallocate(XSCATTL) allocate(XSCATTL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: XSCATTL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif ALLOCHEM = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/chains_ogl.F900000664000175000017500000001071415212624223017340 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file chains_ogl.F90 !! @short Send chain statistics data to C for OpenGL rendering !! @author Sébastien Le Roux INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED INTEGER, DIMENSION(NUMA) :: CHAIN_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: CHAIN_ID INTEGER :: RAA, RAB, RAC, RAD, RAE RAB=0 do RAA=2, TAILLC if (NRI(RAA,STEP) > 0) then RAB=RAB+1 call allocate_all_chains (STEP-1, RAA, NRI(RAA,STEP)) endif enddo if (RAB.eq.0) write (6, *) "Chains RAB=0" do RAA=1, NA do RAB=2, TAILLC RAC = 0 do RAD=1, NUMA CHAIN_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB,STEP) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 CHAIN_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL"//CHAR(0), "Table: CHAIN_ID (1)"//CHAR(0)) CHAINS_TO_OGL = 0 goto 002 endif do RAD=1, RAC CHAIN_ID(RAD) = CHAIN_LIST(RAD) enddo if (RAC > 0) call send_atom_chains_id_opengl (STEP-1, RAA-1, RAB, RAC, CHAIN_ID) enddo enddo do RAA=2, TAILLC if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL"//CHAR(0), "Table: CHAIN_ID (2)"//CHAR(0)) CHAINS_TO_OGL = 0 goto 002 endif if (NRI(RAA,STEP) > 0) then do RAB=1, NRI(RAA,STEP) do RAC=1, RAA CHAIN_ID(RAC) = RSAVED(RAA,RAB,RAC) enddo call send_chains_opengl (STEP-1, RAA, RAB-1, CHAIN_ID) enddo endif enddo CHAINS_TO_OGL = 1 if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) 002 continue END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS IMPLICIT NONE INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(:), ALLOCATABLE :: CHAIN_ID, CHAIN_JD, CHAIN_KD if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(TAILLC-1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_ID "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=2, TAILLC CHAIN_ID(i-1) = 0 do j=1, NS CHAIN_ID(i-1) = CHAIN_ID(i-1) + NRI(i,j) enddo if (CHAIN_ID(i-1) > 0) then k = k + 1 endif enddo if (allocated(CHAIN_JD)) deallocate(CHAIN_JD) allocate(CHAIN_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_JD "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif if (allocated(CHAIN_KD)) deallocate(CHAIN_KD) allocate(CHAIN_KD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_KD "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=2, TAILLC if (CHAIN_ID(i-1) > 0) then k = k + 1 CHAIN_JD(k) = i CHAIN_KD(k) = CHAIN_ID(i-1) endif enddo if (k > 0) then call send_coord_opengl (9, 1, 0, 0, k, k) call init_menurings (9, 5, k, CHAIN_JD, CHAIN_KD) endif if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) if (allocated(CHAIN_JD)) deallocate(CHAIN_JD) if (allocated(CHAIN_KD)) deallocate(CHAIN_KD) CHAINS_TO_OGL_MENU = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/fzbt.F900000664000175000017500000000733715212624223016206 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file fzbt.F90 !! @short Partial structure factors: Faber-Ziman and Bathia-Thornton analysis !! @author Sébastien Le Roux LOGICAL FUNCTION FZBT (NDQ, SQIJ) ! ! Compute Faber-Ziman and Bathia-Thornton S(q) from Ashcroft S(q) ! USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ if (NSP .eq. 2) then if (allocated(BTij)) deallocate(BTij) allocate(BTij(NDQ,4), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: BTij"//CHAR(0)) FZBT=.false. goto 001 endif BTij(:,:)=0.0d0 endif if (allocated(FZSij)) deallocate(FZSij) allocate(FZSij(NDQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: FZSij"//CHAR(0)) FZBT=.false. goto 001 endif FZSij(:,:,:)=0.0d0 do m=1, NDQ do n=1, NSP do o=1, NSP if (o .eq. n) then FZSij(m,n,o) = 1.0d0 + (SQIJ(m,n,o)-1.0d0)/Xi(n) if (NSP .eq. 2) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(o)*FZSij(m,n,o) BTij(m,3) = BTij(m,3) + FZSij(m,n,o) endif else FZSij(m,n,o) = 1.0d0 + SQIJ(m,n,o)/sqrt(Xi(n)*Xi(o)) if (NSP .eq. 2) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(n)*FZSij(m,n,o) BTij(m,3) = BTij(m,3) - FZSij(m,n,o) endif endif enddo enddo if (NSP .eq. 2) then if (NBSPBS(1) .le. NBSPBS(2)) then o=1 n=2 else o=2 n=1 endif BTij(m,2) = Xi(o)*FZSij(m,o,o) - Xi(n)*FZSij(m,n,n) BTij(m,2) = BTij(m,2)+FZSij(m,o,n)*(Xi(n)-Xi(o)) BTij(m,2) = BTij(m,2)*Xi(n)*Xi(o) BTij(m,3) = (BTij(m,3)*Xi(1)*Xi(2) +1)*Xi(1)*Xi(2) BTij(m,4) = BTij(m,3)/(Xi(1)*Xi(2)) endif enddo FZBT=.true. 001 continue END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) ! ! Compute Bathia-Thornton g(r) ! USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT if (allocated(BTij)) deallocate(BTij) allocate(BTij(NDTR,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: GRBT"//CHAR(0), "Table: BTij"//CHAR(0)) GRBT=.false. goto 001 endif BTij(:,:)=0.0d0 do m=1, NDTR do n=1, NSP do o=1, NSP if (o .eq. n) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(o)*GrToBT(m,n,o) BTij(m,3) = BTij(m,3) + GrToBT(m,n,o) else BTij(m,1) = BTij(m,1) + Xi(o)*Xi(n)*GrToBT(m,n,o) BTij(m,3) = BTij(m,3) - GrToBT(m,n,o) endif enddo enddo if (NBSPBS(1) .le. NBSPBS(2)) then o=1 n=2 else o=2 n=1 endif BTij(m,2) = Xi(o)*GrToBT(m,o,o) - Xi(n)*GrToBT(m,n,n) BTij(m,2) = BTij(m,2)+GrToBT(m,o,n)*(Xi(n)-Xi(o)) BTij(m,3) = BTij(m,3)*Xi(1)*Xi(2) ! BTij(m,4) = BTij(m,3)/(Xi(1)*Xi(2)) ! BTij(m,5) = BTij(m,2)/(Xi(n)/ ) enddo GRBT=.true. 001 continue END FUNCTION atomes_1.3.1/src/fortran/msd.F900000664000175000017500000001664115212624223016022 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file msd.F90 !! @short MSD analysis !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION MSD (DLT, NDTS) BIND (C,NAME='msd_') ! ! Mean Square Displacement ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDTS REAL (KIND=c_double), INTENT(IN) :: DLT DOUBLE PRECISION :: MASSTOT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MSDTAB #ifdef OPENMP INTEGER :: NUMTH #endif INTERFACE LOGICAL FUNCTION ALLOCMSD() END FUNCTION END INTERFACE ! Calcul du déplacement carré moyen if(.not.TRANSPO()) then MSD=0 goto 001 endif if (.not. ALLOCMSD()) then MSD=0 goto 001 endif MASSTOT=0.0d0 do j=1, NSP MASSTOT=MASSTOT+NBSPBS(j)*MASS(j) enddo #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () if (NS.lt.NUMTH) NUMTH=NS ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(RCm, RCm2, R2Cor, Dij, Rij, i, j, k, l, m, n, o, p, Vij) & !$OMP& SHARED(NUMTH, NS, NA, D2i, D2dir, DRIFT, LOT, MASS, MASSTOT, NDTS, DLT, NFULLPOS) !$OMP DO SCHEDULE(STATIC,NS-1/NUMTH) #endif do j=1, NS-1 do m=1, 3 RCm(m)=0.0d0 enddo do i=1, NA k=LOT(i) do m=1, 3 RCm(m)=RCm(m)+MASS(k)*NFULLPOS(i,m,j) enddo enddo do m=1, 3 RCm(m)=RCm(m)/MASSTOT enddo do k=j+1, NS do m=1, 3 RCm2(m)=0.0d0 enddo do i=1, NA n=LOT(i) do m=1, 3 RCm2(m)=RCm2(m)+MASS(n)*NFULLPOS(i,m,k) enddo enddo do m=1, 3 RCm2(m)=RCm2(m)/MASSTOT enddo do i=1, NA o=LOT(i) Dij=0.0d0 do m=1,3 Rij(m)=NFULLPOS(i,m,k)-NFULLPOS(i,m,j) R2Cor(m) = RCm2(m) - RCm(m) Vij = (Rij(m)-R2Cor(m))**2 #ifdef OPENMP !$OMP ATOMIC #endif D2dir(o,m,k-j)=D2dir(o,m,k-j)+Vij Dij=Dij+Vij enddo #ifdef OPENMP !$OMP ATOMIC #endif D2i(o,k-j)=D2i(o,k-j)+Dij #ifdef OPENMP !$OMP CRITICAL #endif p=4 do m=1, 2 do n=m+1, 3 D2dir(o,p,k-j)=D2dir(o,m,k-j)+D2dir(o,n,k-j) p=p+1 enddo enddo #ifdef OPENMP !$OMP END CRITICAL #endif enddo if (k .eq. j+1) then do i=1, NA o=LOT(i) do m=1,3 DRIFT(m,k)=DRIFT(m,k)+1e5*(NFULLPOS(i,m,k)-NFULLPOS(i,m,j))*MASS(o)/(NDTS*DLT) enddo enddo do m=1,3 DRIFT(m,k)=DRIFT(m,k)/MASSTOT enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL #endif do k=1, NS-1 l=k+1 do m=1,3 RCm(m)=0.0d0 RCm2(m)=0.0d0 enddo do i=1, NA o=LOT(i) do m=1, 3 RCm(m)=RCm(m)+ MASS(o)*NFULLPOS(i,m,k) RCm2(m)=RCm2(m)+ MASS(o)*NFULLPOS(i,m,l) enddo enddo do m=1, 3 RCm(m)=RCm(m)/MASSTOT RCm2(m)=RCm2(m)/MASSTOT enddo do i=1, NA o=LOT(i) Dij=0.0d0 do m=1,3 R2Cor(m) = RCm2(m) - RCm(m) Rij(m)=NFULLPOS(i,m,l)-NFULLPOS(i,m,k) D2dirNAC(o,m,k)=(Rij(m)-R2Cor(m))**2 Dij=Dij+(Rij(m)-R2Cor(m))**2 COR(m,k)=COR(m,k)+R2Cor(m) enddo p=4 do m=1, 2 do n=m+1, 3 D2dirNAC(o,p,k)=D2dirNAC(o,m,k)+D2dirNAC(o,n,k) p=p+1 enddo enddo D2iNAC(o,k)=D2iNAC(o,k)+Dij enddo enddo do k=1, NS-1 do i=1, 6 do l=1, NSP D2dir(l,i,k)=D2dir(l,i,k)/(NS-k)/NBSPBS(l) D2dirNAC(l,i,k)=D2dirNAC(l,i,k)/NBSPBS(l) enddo enddo enddo do k=1, NS-1 do i=1, NSP D2i(i,k)=D2i(i,k)/(NS-k)/NBSPBS(i) D2iNAC(i,k)=D2iNAC(i,k)/NBSPBS(i) enddo enddo ! Evaluation of the diffusion constant D ! A minimum of dynamic time is needed for a 'physical' meaning of D ! so if the simulation time is big enough we compute D ! Here arbitrary we choose 30ps as time limit (30000 fs) ! We also decide to evaluate only if there is more than 1000 MD steps if (NS*NDTS*DLT .gt. 30000 .and. NS.gt.1000) then ! then take car to cut the first 1 ps of the simulation ! not to be anymore in the ballistic regime ! afterwards take care to cut the last 1 ps of the calculation ! usually the correlations are unclear in this zone of the MSD z=NS*NDTS*DLT z=z-1.0 k=INT(z/(NDTS*DLT)) l=INT(1.0/(NDTS*DLT)) do i=1, NSP Dcte(i)=(D2i(i,k)-D2i(i,l))/((k-l)*NDTS*DLT) enddo else do i=1, NSP Dcte(i)=0.d0 enddo endif allocate(MSDTAB(NS-1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: MSD"//CHAR(0), "Table: MSDTAB"//CHAR(0)) MSD=0 goto 001 endif k=0 do i=1, NSP do j=1, NS-1 MSDTAB(j)=D2i(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 do j=1, NS-1 MSDTAB(j)=D2iNAC(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo do i=1, NSP do l=1, 6 do j=1, NS-1 MSDTAB(j)=D2dir(i,l,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo enddo do i=1, NSP do l=1, 6 do j=1, NS-1 MSDTAB(j)=D2dirNAC(i,l,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo enddo do i=1, 3 do j=1, NS-1 MSDTAB(j)=COR(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo do i=1, 3 do j=1, NS-1 MSDTAB(j)=DRIFT(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo MSD=1 001 continue if (allocated(NFULLPOS)) deallocate(NFULLPOS) call DEALLOCMSD CONTAINS LOGICAL FUNCTION TRANSPO() USE PARAMETERS if (allocated(NFULLPOS)) deallocate(NFULLPOS) allocate(NFULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: NFULLPOS"//CHAR(0)) TRANSPO=.false. goto 001 endif if (allocated(POA)) deallocate(POA) allocate(POA(NA,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: POA"//CHAR(0)) TRANSPO=.false. goto 001 endif if (allocated(POB)) deallocate(POB) allocate(POB(NA,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: POB"//CHAR(0)) TRANSPO=.false. goto 001 endif do NOA=1, NS do NOB=1, NA do NOC=1, 3 NFULLPOS(NOB,NOC,NOA) = FULLPOS(NOB,NOC,NOA) enddo enddo enddo do NOA=1, NA do NOB=1, 3 POA(NOA,NOB)=NFULLPOS(NOA,NOB,1) enddo enddo do NOC=2, NS do NOA=1, NA do NOB=1, 3 POB(NOA,NOB)=NFULLPOS(NOA,NOB,NOC) enddo if (NCELLS .gt. 1) then call CALCRIJ(NOA, NOA, -1, -1, NOC-1) else call CALCRIJ(NOA, NOA, -1, -1, 1) endif do NOB=1, 3 POA(NOA,NOB)=POA(NOA,NOB)+Rij(NOB) NFULLPOS(NOA,NOB,NOC)=POA(NOA,NOB) enddo enddo enddo TRANSPO = .true. 001 continue if (allocated(POA)) deallocate(POA) if (allocated(POB)) deallocate(POB) END FUNCTION END FUNCTION atomes_1.3.1/src/fortran/sk.F900000664000175000017500000002562515212624223015656 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file sk.F90 !! @short S(k) analysis: direct reciprocal space calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION s_of_k (NQ, XA) BIND (C,NAME='s_of_k_') ! Total structure factor ! Partial structure factors from k-points USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ, XA DOUBLE PRECISION :: factor, xfactor INTERFACE DOUBLE PRECISION FUNCTION FQX(TA, Q) INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q END FUNCTION END INTERFACE if(allocated(Sij)) deallocate(Sij) allocate(Sij(NQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: Sij"//CHAR(0)) s_of_k = 0 goto 001 endif Sij(:,:,:)=0.0d0 if(allocated(cij)) deallocate(cij) allocate(cij(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: cij"//CHAR(0)) s_of_k = 0 goto 001 endif if(allocated(sik)) deallocate(sik) allocate(sik(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: sik"//CHAR(0)) s_of_k = 0 goto 001 endif #ifdef OPENMP !t0 = OMP_GET_WTIME () call FOURIER_TRANS_QVECT () ! Default Q-vector parallelization !t1 = OMP_GET_WTIME () !write (*,*) "temps d’excecution QVT 2:", t1-t0 #else call FOURIER_TRANS_STEPS () #endif if (allocated(cij)) deallocate(cij) if (allocated(sik)) deallocate(sik) if (allocated(qvectx)) deallocate(qvectx) if (allocated(qvecty))deallocate(qvecty) if (allocated(qvectz)) deallocate(qvectz) if (allocated(modq)) deallocate(modq) if(allocated(S)) deallocate(S) allocate(S(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: S"//CHAR(0)) s_of_k = 0 goto 001 endif if(allocated(XS)) deallocate(XS) allocate(XS(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: XS"//CHAR(0)) s_of_k = 0 goto 001 endif factor=0.0d0 do i=1, NSP factor=factor + NBSPBS(i)*NSCATTL(i)**2 enddo factor=factor*NS if (XA .eq. 1) then xfactor=0.0d0 do i=1, NSP xfactor=xfactor + NBSPBS(i)*XSCATTL(i)**2 enddo xfactor=xfactor*NS endif S(:)=0.0d0 XS(:)=0.0d0 do i=1, NQ if (degeneracy(i) .gt. 0) then do k=1, NSP do j=1, NSP S(i)=S(i)+Sij(i,k,j)*NSCATTL(k)*NSCATTL(j) if (XA .eq. 1) then XS(i)=XS(i)+Sij(i,k,j)*XSCATTL(k)*XSCATTL(j) else XS(i)=XS(i)+Sij(i,k,j)*FQX(INT(XSCATTL(k)),K_POINT(i))*FQX(INT(XSCATTL(j)),K_POINT(i)) endif enddo enddo S(i)=S(i)/(factor*degeneracy(i)) if (XA .eq. 1) then XS(i)=XS(i)/(xfactor*degeneracy(i)) else xfactor=0.0d0 do k=1, NSP xfactor=xfactor + NBSPBS(k)*FQX(INT(XSCATTL(k)),K_POINT(i))**2 enddo XS(i)=XS(i)/(xfactor*degeneracy(i)*NS) endif do j=1, NSP do k=1, NSP Sij(i,j,k)=Sij(i,j,k)/(degeneracy(i)*sqrt(dble(NBSPBS(k)*NBSPBS(j)))*NS) enddo enddo endif enddo s_of_k = SK_SAVE () 001 continue if (allocated(degeneracy)) deallocate(degeneracy) if (allocated(K_POINT)) deallocate(K_POINT) if (allocated(Sij)) deallocate(Sij) if (allocated(S)) deallocate(S) if (allocated(XS)) deallocate(XS) CONTAINS !************************************************************ ! ! this subroutine computes the sine and cosine sums from the ! configuration for all q-vectors needed ! SUBROUTINE FOURIER_TRANS_STEPS () USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: qx, qy, qz, qtr, sini, cosi INTEGER :: sp do k=1, NS do j=1, NUMBER_OF_QVECT l=AnINT((modq(j)-qvmin)/DELTA_Q)+1 if (l .le. NQ) then qx=qvectx(j) qy=qvecty(j) qz=qvectz(j) do i=1, NSP cij(i)=0.d0 sik(i)=0.d0 enddo do i=1, NA qtr = qx*FULLPOS(i,1,k)+qy*FULLPOS(i,2,k)+qz*FULLPOS(i,3,k) sini = sin(qtr) cosi = cos(qtr) sp = LOT(i) sik(sp) = sik(sp) + sini cij(sp) = cij(sp) + cosi enddo do i=1, NSP do m=1, NSP Sij(l,i,m) = Sij(l,i,m) + cij(i)*cij(m) + sik(i)*sik(m) enddo enddo endif enddo enddo END SUBROUTINE #ifdef OPENMP !************************************************************ ! ! This subroutine computes the sine and cosine sums from the ! configuration for all q-vectors needed ! OpenMP // on Qvect ! SUBROUTINE FOURIER_TRANS_QVECT () USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER :: NUMTH, sp DOUBLE PRECISION :: qx, qy, qz, qtr, sini, cosi NUMTH = OMP_GET_MAX_THREADS () if (NUMBER_OF_QVECT.lt.NUMTH) NUMTH=NUMBER_OF_QVECT ! OpemMP on Qvect !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(qx, qy, qz, cij, sik, qtr, sini, cosi, i, j, k, l, m, sp) & !$OMP& SHARED(NUMTH, qvectx, qvecty, qvectz, & !$OMP& FULLPOS, NS, NSP, NA, LOT, DELTA_Q, NUMBER_OF_QVECT, NQ, modq, qvmin, Sij) !$OMP DO SCHEDULE(STATIC,NUMBER_OF_QVECT/NUMTH) do j=1, NUMBER_OF_QVECT l=AnINT((modq(j)-qvmin)/DELTA_Q)+1 if (l .le. NQ) then qx=qvectx(j) qy=qvecty(j) qz=qvectz(j) do k=1, NS do i=1, NSP cij(i)=0.d0 sik(i)=0.d0 enddo do i=1, NA qtr = qx*FULLPOS(i,1,k)+qy*FULLPOS(i,2,k)+qz*FULLPOS(i,3,k) sini = sin(qtr) cosi = cos(qtr) sp = LOT(i) sik(sp) = sik(sp) + sini cij(sp) = cij(sp) + cosi enddo do i=1, NSP do m=1, NSP !$OMP ATOMIC Sij(l,i,m) = Sij(l,i,m) + cij(i)*cij(m) + sik(i)*sik(m) enddo enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL END SUBROUTINE #endif INTEGER FUNCTION SK_SAVE() USE PARAMETERS INTEGER :: NSQ DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION FZBT (NDQ, SQIJ) USE PARAMETERS INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ END FUNCTION END INTERFACE i=0 do j=1, NQ if (degeneracy(j) .gt. 0) i=i+1 enddo NSQ=i if (NSQ .gt. 0) then ! If wave vectors exist if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NSQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SK_SAVE"//CHAR(0), "Table: SQTAB"//CHAR(0)) SK_SAVE = 0 goto 001 endif i = 0; do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= K_POINT(k) endif enddo call save_xsk (NSQ, SQTAB) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= S(k) endif enddo call save_curve (NSQ, SQTAB, 0, IDSK) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= (S(k)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, 2, IDSK) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= XS(k) endif enddo call save_curve (NSQ, SQTAB, 4, IDSK) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= (XS(k)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, 6, IDSK) l = 8 do i=1, NSP do j=1, NSP m=0 do k=1, NQ if (degeneracy(k).gt.0) then m=m+1 SQTAB(m)=Sij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo enddo ! To compute FZ and BT partials if (.not.FZBT (NQ, Sij)) then SK_SAVE = 0 goto 001 endif do i=1, NSP do j=1, NSP m=0 do k=1, NQ if (degeneracy(k).gt.0) then m=m+1 SQTAB(m)= FZSij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 k=0 do j=1, NQ if (degeneracy(j).gt.0) then k=k+1 SQTAB(k)= BTij(j,i) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo endif SK_SAVE=1 endif ! If wave vectors exist 001 continue if (allocated(FZSij)) deallocate(FZSij) if (NSP.eq.2 .and. allocated(BTij)) deallocate(BTij) if (allocated(SQTAB)) deallocate(SQTAB) END FUNCTION END FUNCTION s_of_k INTEGER (KIND=c_int) FUNCTION smooth_and_save (DPOINT, CTS, SFC, IDC, NQPTS, DATS) BIND (C,NAME='smooth_and_save_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: IDC, NQPTS, DATS REAL (KIND=c_double), DIMENSION(NQPTS), INTENT(IN) :: DPOINT, CTS REAL (KIND=c_double), INTENT(IN) :: SFC DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION SMOOTH (TABTOLISS, GTOLISS, DIMTOLISS, SIGMALISS) INTEGER, INTENT(IN) :: DIMTOLISS DOUBLE PRECISION, INTENT(IN) :: SIGMALISS DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMTOLISS) :: GTOLISS DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMTOLISS) :: TABTOLISS END FUNCTION END INTERFACE if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQPTS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: smooth_and_save"//CHAR(0), "Table: SQTAB"//CHAR(0)) smooth_and_save=0 goto 001 endif do k=1, NQPTS SQTAB(k)=CTS(k) enddo if (.not.SMOOTH (SQTAB, DPOINT, NQPTS, SFC)) then smooth_and_save=0 goto 001 endif call save_curve (NQPTS, SQTAB, IDC, DATS) smooth_and_save=1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) END FUNCTION DOUBLE PRECISION FUNCTION FQX(TA, Q) USE MENDELEIEV INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q DOUBLE PRECISION :: SINLA DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) ! ! Acta Cryst. (1968). A24, 321 ! ! SINLA = ((sin(THETA)/LAMBDA)**2 ! and 2 d Sin(THETA) = LAMBDA ! so 2 d = LAMBDA / Sin(THETA) ! with d = 2 PI / Q we get: ! 4.0 PI / Q = LAMBDA / Sin(THETA) SINLA=(Q/(4.0*PI))**2 FQX = a1(TA)*exp(-b1(TA)*SINLA) & + a2(TA)*exp(-b2(TA)*SINLA) & + a3(TA)*exp(-b3(TA)*SINLA) & + a4(TA)*exp(-b4(TA)*SINLA) + c(TA) END FUNCTION atomes_1.3.1/src/fortran/dvtb.F900000664000175000017500000000363715212624223016177 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file dvtb.F90 !! @short Model expansion for algorithmic purposes !! @author Sébastien Le Roux LOGICAL FUNCTION dvtbox(ST, NAS, NAT, NPOS) ! ! Create a superlattice ! Size of the superlattice will be NBX*NBX*NBX with NBX >= 3 ! NBX is set in dmtx.f90 ! USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ST, NAS, NAT DOUBLE PRECISION, DIMENSION(NAT,3), INTENT(INOUT) :: NPOS DOUBLE PRECISION, DIMENSION(3) :: DVT INTEGER :: iid, jid, kid, lid, mid, nid iid=0 do jid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 do kid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 do lid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 if (NCELLS .gt. 1) then mid = ST else mid = 1 endif DVT(1)=jid*THE_BOX(mid)%lvect(1,1)+kid*THE_BOX(mid)%lvect(2,1)+lid*THE_BOX(mid)%lvect(3,1) DVT(2)=jid*THE_BOX(mid)%lvect(1,2)+kid*THE_BOX(mid)%lvect(2,2)+lid*THE_BOX(mid)%lvect(3,2) DVT(3)=jid*THE_BOX(mid)%lvect(1,3)+kid*THE_BOX(mid)%lvect(2,3)+lid*THE_BOX(mid)%lvect(3,3) do mid=1, NAS iid = iid + 1 do nid=1, 3 NPOS(iid,nid)=FULLPOS(mid,nid,ST)+DVT(nid) enddo enddo enddo enddo enddo dvtbox=.true. END FUNCTION atomes_1.3.1/src/fortran/resrings.F900000664000175000017500000002424515212624223017072 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file resrings.F90 !! @short Export results of ring and chain statistics to C !! @author Sébastien Le Roux INTEGER FUNCTION RECRINGS(VID) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: VID DOUBLE PRECISION :: MAMP, EAMP DOUBLE PRECISION :: TAMP, ETAMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: AMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RINGSPNA, ECTRPNA DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EMIN, EMAX DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MPNA DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RTAB if (TBR) then RECRINGS=2 goto 001 else if (ALC) then RECRINGS=0 goto 001 endif if (allocated(RTAB)) deallocate(RTAB) allocate(RTAB(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RTAB"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(MOYRED)) deallocate(MOYRED) allocate(MOYRED(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MOYRED"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RED)) deallocate(RED) allocate(RED(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RED"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(ECTYPE)) deallocate(ECTYPE) allocate(ECTYPE(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: ECTYPE"//CHAR(0)) RECRINGS=0 goto 001 endif !if (allocated(MOYPUR)) deallocate(MOYPUR) !allocate(MOYPUR(TAILLR), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: MOYPUR"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif !if (allocated(IRRED)) deallocate(IRRED) !allocate(IRRED(NS), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: IRRED"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif !if (allocated(ECTYP)) deallocate(ECTYP) !allocate(ECTYP(TAILLR), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: ECTYP"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif ECTYPE(:)=0.0d0 !ECTYP(:)=0.0d0 do l=3, TAILLR do i=1, NS RED(i)=dble(NRING(l,i))/NTLT ! IRRED(i)=dble(NIRR(l,i))/NTLT enddo if (NS .gt. 1) then MOYRED(l)=0.0d0 ! MOYPUR(l)=0.0d0 ECTYPE(l)=0.0d0 ! ECTYP(l)=0.0d0 call MOYENNE(RED, NS, MOYRED(l)) ! call MOYENNE(IRRED, NS, MOYPUR(l)) call ECT_TYPE(MOYRED(l), RED, NS, ECTYPE(l)) ! call ECT_TYPE(MOYPUR(l), IRRED, NS, ECTYP(l)) else MOYRED(l)=RED(1) ! MOYPUR(l)=IRRED(1) endif enddo TAMP=0.0 do i=3, TAILLR RTAB(i)=MOYRED(i) TAMP = TAMP + RTAB(i) enddo if (TAMP .eq. 0.0) then RECRINGS=1 goto 001 endif l=(NSP+1)*4*VID if (TLT .ne. NSP+1) l = l + 4*TLT call save_curve (TAILLR, RTAB, l, IDRI) if (allocated(MPNA)) deallocate(MPNA) allocate(MPNA(TAILLR,TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EPNA)) deallocate(EPNA) allocate(EPNA(TAILLR,TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RINGSPNA)) deallocate(RINGSPNA) allocate(RINGSPNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RINGSPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(ECTRPNA)) deallocate(ECTRPNA) allocate(ECTRPNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: ECTPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RNAMAX)) deallocate(RNAMAX) allocate(RNAMAX(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RNAMAX"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RNAMIN)) deallocate(RNAMIN) allocate(RNAMIN(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RNAMIN"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EMAX)) deallocate(EMAX) allocate(EMAX(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EMAX"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EMIN)) deallocate(EMIN) allocate(EMIN(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EMIN"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(MTABL)) deallocate(MTABL) allocate(MTABL(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MTABL"//CHAR(0)) RECRINGS=0 goto 001 endif RINGSPNA(:)=0.0d0 ECTRPNA(:)=0.0d0 RNAMAX(:)=0.0d0 RNAMIN(:)=0.0d0 EMAX(:)=0.0d0 EMIN(:)=0.0d0 MPNA(:,:)=0.0d0 EPNA(:,:)=0.0d0 do i=3, TAILLR do j=3, TAILLR if (NS .gt. 1) then do k=1, NS MTABL(k)=PNA(i,j,k) enddo call MOYENNE(MTABL, NS, MPNA(i,j)) call ECT_TYPE(MPNA(i,j), MTABL, NS, EPNA(i,j)) if (i.eq.j) then RINGSPNA(i)=MPNA(i,j)/NTLT ECTRPNA(i)=EPNA(i,j)/NTLT endif else MPNA(i,j)=dble(PNA(i,j,1))/NTLT if (i.eq.j) RINGSPNA(i)=MPNA(i,j) endif enddo enddo do i=1, TAILLR RTAB(i)=RINGSPNA(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) do i=1, TAILLR if (NS .gt. 1) then m=0 do j=1, NS if (PNA(i,i,j) .eq. 0) then MTABL(j)=0.0d0 else m=m+1 MTABL(j)=dble(MAXPNA(i,j))/dble(PNA(i,i,j)) endif enddo if (m.gt.1) then call MOYENNE(MTABL, NS, RNAMAX(i)) RNAMAX(i)=RNAMAX(i)*NS/m call ECT_TYPE_RINGS(RNAMAX(i), MTABL, NS, m, EMAX(i)) elseif (m.eq.1) then RNAMAX(i)=RNAMAX(i)*NS EMAX(i)=0.0d0 else RNAMAX(i)=0.0d0 EMAX(i)=0.0d0 endif m=0 do j=1, NS if (PNA(i,i,j) .eq. 0) then MTABL(j)=0.0d0 else m=m+1 MTABL(j)=dble(MINPNA(i,j))/dble(PNA(i,i,j)) endif enddo if (m.gt.1) then call MOYENNE(MTABL, NS, RNAMIN(i)) RNAMIN(i)=RNAMIN(i)*NS/m call ECT_TYPE_RINGS(RNAMIN(i), MTABL, NS, m, EMIN(i)) elseif (m.eq.1) then RNAMIN(i)=RNAMIN(i)*NS EMIN(i)=0.0d0 else RNAMIN(i)=0.0d0 EMIN(i)=0.0d0 endif else if (PNA(i,i,1).eq.0.0) then RNAMAX(i)=0.0d0 EMAX(i)=0.0d0 RNAMIN(i)=0.0d0 EMIN(i)=0.0d0 else RNAMAX(i)=dble(MAXPNA(i,1))/PNA(i,i,1) EMAX(i)=0.0d0 RNAMIN(i)=dble(MINPNA(i,1))/PNA(i,i,1) EMIN(i)=0.0d0 endif endif enddo do i=1, TAILLR RTAB(i)=RNAMAX(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) do i=1, TAILLR RTAB(i)=RNAMIN(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) if (allocated(AMP)) deallocate(AMP) allocate(AMP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: AMP"//CHAR(0)) RECRINGS=0 goto 001 endif do i=1, NS AMP(i)=0.0d0 if (DOAMPAT) then do j=1, NTLT AMP(i)=AMP(i)+dble(AMPAT(j,i)) enddo endif enddo MAMP=0.0d0 EAMP=0.0d0 if (DOAMPAT) then if (NS .gt. 1) then call MOYENNE(AMP, NS, MAMP) call ECT_TYPE(MAMP, AMP, NS, EAMP) else MAMP=AMP(1) endif endif if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) allocate(TOTPSTEP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: TOTPSTEP"//CHAR(0)) RECRINGS=0 goto 001 endif do i=1, NS TOTPSTEP(i)=0 do j=3, TAILLR TOTPSTEP(i)=TOTPSTEP(i)+dble(NRING(j,i)) enddo enddo TAMP=0.0d0 ETAMP=0.0d0 call MOYENNE(TOTPSTEP, NS, TAMP) call ECT_TYPE(TAMP, TOTPSTEP, NS, ETAMP) call save_rings_data (TAILLR, ECTYPE, ECTRPNA, EMAX, EMIN, TAMP, ETAMP, MAMP, EAMP) RECRINGS=1 001 continue if (allocated(RTAB)) deallocate(RTAB) if (allocated(AMPAT)) deallocate(AMPAT) if (allocated(AMP)) deallocate(AMP) if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) if (allocated(MOYRED)) deallocate(MOYRED) if (allocated(RED)) deallocate(RED) if (allocated(ECTYPE)) deallocate(ECTYPE) !if (allocated(MOYPUR)) deallocate(MOYPUR) !if (allocated(IRRED)) deallocate(IRRED) !if (allocated(ECTYP)) deallocate(ECTYP) if (allocated(MPNA)) deallocate(MPNA) if (allocated(EPNA)) deallocate(EPNA) if (allocated(RINGSPNA)) deallocate(RINGSPNA) if (allocated(ECTRPNA)) deallocate(ECTRPNA) if (allocated(RNAMAX)) deallocate(RNAMAX) if (allocated(RNAMIN)) deallocate(RNAMIN) if (allocated(EMAX)) deallocate(EMAX) if (allocated(EMIN)) deallocate(EMIN) if (allocated(MTABL)) deallocate(MTABL) if (allocated(NRING)) deallocate(NRING) END FUNCTION atomes_1.3.1/src/fortran/chains.F900000664000175000017500000005547415212624223016513 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file chains.F90 !! @short Chain statistics !! @author Sébastien Le Roux SUBROUTINE SETUP_CPAT_VPAT_CHAIN (CONT, VOIS, STR, CPT, VPT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STR INTEGER, DIMENSION(NA,NS), INTENT(IN):: CONT INTEGER, DIMENSION(MAXN,NA,NS), INTENT(IN) :: VOIS INTEGER, DIMENSION(NA), INTENT(INOUT):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(INOUT) :: VPT INTEGER :: RAB, RAC !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo CPT(:) = 0 VPT(:,:) = 0 do RAB=1, NA CPT(RAB) = CONT(RAB,STR) do RAC=1, CONT(RAB,STR) VPT(RAB,RAC) = VOIS(RAC,RAB,STR) enddo enddo END SUBROUTINE INTEGER FUNCTION CHAINS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECHAINS () END FUNCTION END INTERFACE CHAINS = 0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call CHAINS_SEARCH_ATOMS (NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call CHAINS_SEARCH_STEPS (NUMTH) endif #else call CHAINS_SEARCH_STEPS () #endif CHAINS = RECHAINS() END FUNCTION #ifdef OPENMP SUBROUTINE CHAINS_SEARCH_ATOMS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_CHAIN INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR INTEGER :: LORA, LORB, RES, ch INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI END FUNCTION END INTERFACE ch = 0 if (allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLC,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NRING" ALC=.true. goto 001 endif NRING(:,:) = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS SAVRING(:,:,:)=0 call SETUP_CPAT_VPAT_CHAIN (CONTJ, VOISJ, i, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THE_CHAIN, RPAT, RUNSEARCH, ERR, SAVR, TRING, INDTE, & !$OMP& j, k, l, m, n, o, LORA, LORB, RES, RES_LIST, TAILLE, SAUT) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, ISOLATED, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, MAXN, ACAC, AAAA, NOHP, TAILLC, TBR, ALC, ALC_TAB, NCELLS, PBC, SAVRING, NRING, ch) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RAPT" ALC=.true. goto 003 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 003 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 003 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 003 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 003 endif if(allocated(THE_CHAIN)) deallocate(THE_CHAIN) allocate(THE_CHAIN(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_CHAIN" ALC=.true. goto 003 endif TRING(:)=0 SAVR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 002 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then if ((ISOLATED .and. CPAT(j).eq.1) .or. (.not.ISOLATED .and. (CPAT(j).gt.0 .and. CPAT(j).ne.2))) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (AAAA) then if (LORA .ne. LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif else if (ACAC) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else if (NOHP .and. LORA.eq.LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif if (RUNSEARCH) then RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(j)=1 THE_CHAIN(1)%ATOM=j THE_CHAIN(1)%SPEC=LORA THE_CHAIN(1)%NEIGHBOR=1 THE_CHAIN(2)%ATOM=VPAT(j,l) THE_CHAIN(2)%SPEC=LORB THE_CHAIN(2)%NEIGHBOR=CPAT(VPAT(j,l)) RES_LIST(:) = 0 INDTE(:) = 0 TAILLE=0 RES = CHECK_CHAIN (THE_CHAIN, 2, TAILLE, SAVR, TRING, INDTE, RES_LIST) if (ALC) ALC_TAB="CHECK_CHAIN" if (TBR .or. ALC) goto 002 if (CPAT(VPAT(j,l)) .eq. 2) then call INSIDE_CHAIN (THE_CHAIN, 2, TAILLE, LORA, LORB, RPAT, SAVR, TRING, INDTE, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_CHAIN" endif if (TBR .or. ALC) goto 002 endif enddo endif endif 002 continue enddo !$OMP END DO NOWAIT if (TBR .or. ALC) goto 003 !$OMP CRITICAL do k=2, TAILLC if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (.not.SAUT) then SAUT=.true. do n=1, k if (SAVRING(k,m,k-n+1) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo endif if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 003 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(THE_CHAIN)) deallocate (THE_CHAIN) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=2, TAILLC ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",SAVRING(j,k,1:j) ! enddo ! endif !enddo ch = ch + CHAINS_TO_OGL (i, NRING, SAVRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: CHAINS_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (ch .eq. NS) ch = CHAINS_TO_OGL_MENU (NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE CHAINS_SEARCH_STEPS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE CHAINS_SEARCH_STEPS () USE PARAMETERS IMPLICIT NONE #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_CHAIN INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING INTEGER :: RES, LORA, LORB, ch INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI END FUNCTION END INTERFACE ch = 0 if (allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLC,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NRING" ALC=.true. goto 001 endif NRING(:,:) = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THE_CHAIN, RPAT, RUNSEARCH, ERR, SAVRING, TRING, INDTE, & !$OMP& j, k, l, m, n, o, LORA, LORB, RES, RES_LIST, CPAT, VPAT, TAILLE) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, ISOLATED, CONTJ, VOISJ, & !$OMP& NUMA, MAXN, ACAC, AAAA, NOHP, TAILLC, TBR, ALC, ALC_TAB, NCELLS, PBC, NRING, ch) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 002 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 002 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 002 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="REST_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_CHAIN)) deallocate(THE_CHAIN) allocate(THE_CHAIN(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_CHAIN" ALC=.true. goto 002 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 003 SAVRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_CHAIN (CONTJ, VOISJ, i, CPAT, VPAT) do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then if ((ISOLATED .and. CPAT(j).eq.1) .or. (.not.ISOLATED .and. (CPAT(j).gt.0 .and. CPAT(j).ne.2))) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (AAAA) then if (LORA .ne. LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif else if (ACAC) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else if (NOHP .and. LORA.eq.LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif if (RUNSEARCH) then RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(j)=1 THE_CHAIN(1)%ATOM=j THE_CHAIN(1)%SPEC=LORA THE_CHAIN(1)%NEIGHBOR=1 THE_CHAIN(2)%ATOM=VPAT(j,l) THE_CHAIN(2)%SPEC=LORB THE_CHAIN(2)%NEIGHBOR=CPAT(VPAT(j,l)) RES_LIST(:) = 0 INDTE(:) = 0 TAILLE = 0 RES = CHECK_CHAIN (THE_CHAIN, 2, TAILLE, SAVRING, TRING, INDTE, RES_LIST) if (ALC) ALC_TAB="CHECK_CHAIN" if (TBR .or. ALC) goto 003 if (CPAT(VPAT(j,l)) .eq. 2) then call INSIDE_CHAIN (THE_CHAIN, 2, TAILLE, LORA, LORB, RPAT, SAVRING, TRING, INDTE, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_CHAIN" endif if (TBR .or. ALC) goto 003 endif enddo endif endif enddo do j=1, TAILLC NRING(j,i) = TRING(j) enddo !do j=2, TAILLC ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",SAVRING(j,k,1:j) ! enddo ! endif !enddo j = CHAINS_TO_OGL (i, NRING, SAVRING) #ifdef OPENMP !$OMP ATOMIC #endif ch = ch + j 003 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 002 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: CHAINS_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_CHAIN)) deallocate (THE_CHAIN) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) #ifdef OPENMP !$OMP END PARALLEL #endif if (ch .eq. NS) ch = CHAINS_TO_OGL_MENU (NRING) 001 continue END SUBROUTINE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTERFACE SUBROUTINE SAVE_THIS_CHAIN (THE_CHAIN, TLES, RSAVED, TRING, INDT, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING END SUBROUTINE SUBROUTINE DEL_THIS_CHAIN (TLED, RSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING END END INTERFACE CHECK_CHAIN = 0 if (CHAINE .ge. TAE .and. CHAINE .le. TAILLC) then if (TAE .gt. 0) call DEL_THIS_CHAIN (TAE, RSAVED, TRING, RESL, INDE) TAE=CHAINE call SAVE_THIS_CHAIN (THE_CHAIN, TAE, RSAVED, TRING, INDE, RESL) if (TBR .or. ALC) CHECK_CHAIN = 1 endif END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, & NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER :: IND, RES LOGICAL :: ADDSP INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION END INTERFACE if (CID .lt. TAILLC) then do while (THE_CHAIN(CID)%NEIGHBOR .ge. 1) IND = VPT(THE_CHAIN(CID)%ATOM, THE_CHAIN(CID)%NEIGHBOR) if (NRPAT(IND).eq.0 .and. CPT(IND).ge.1) then if (AAAA) then if (THE_CHAIN(CID)%SPEC .eq. LOT(IND)) then ADDSP=.true. else ADDSP=.false. endif else if (ACAC) then if (mod(CID,2).ne.0 .and. LOT(IND).eq.LRB) then ADDSP=.true. else if (mod(CID,2).eq.0 .and. LOT(IND).eq.LRA) then ADDSP=.true. else ADDSP=.false. endif else if (NOHP .and. THE_CHAIN(CID)%SPEC.eq.LOT(IND)) then ADDSP=.false. else ADDSP=.true. endif if (ADDSP .and. ((ISOLATED .and. CPT(IND).le.2) .or. .not.ISOLATED)) then THE_CHAIN(CID+1)%ATOM = IND THE_CHAIN(CID+1)%SPEC = LOT(IND) THE_CHAIN(CID+1)%NEIGHBOR = CPT(IND) NRPAT(IND)=1 RES = CHECK_CHAIN (THE_CHAIN, CID+1, TAE, RSAVED, TRING, INDE, RESL) if (TBR .or. ALC) goto 001 if (RES.eq.0 .and. CPT(IND).eq.2) then call INSIDE_CHAIN(THE_CHAIN, CID+1, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) if (TBR .or. ALC) goto 001 endif NRPAT(IND) = 0 endif endif THE_CHAIN(CID)%NEIGHBOR = THE_CHAIN(CID)%NEIGHBOR - 1 enddo endif 001 continue END SUBROUTINE INSIDE_CHAIN SUBROUTINE SAVE_THIS_CHAIN (THE_CHAIN, TLES, RSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWCHAIN INTEGER, DIMENSION(TLES) :: TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOSAV(idx)=THE_CHAIN(idx)%ATOM enddo if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWCHAIN=.false. do idy=1, TLES if (TOSAV(idy) .ne. RSAVED(TLES,idx,idy)) then NEWCHAIN=.true. exit endif enddo if (NEWCHAIN) then NEWCHAIN=.false. do idy=1, TLES if (TOSAV(TLES-idy+1) .ne. RSAVED(TLES,idx,idy)) then NEWCHAIN=.true. exit endif enddo endif if (.not.NEWCHAIN) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWCHAIN=.true. endif if (NEWCHAIN) then RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE SUBROUTINE DEL_THIS_CHAIN (TLED, RSAVED, TRING, RESL, INDT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING INTEGER :: xdel, did ! The max size of the ring possible for the triplet N1-At-N2 has down ! We have to delete the bigger rings already found for this triplet if (RESL(TLED) .ge. 1) then do xdel=0, RESL(TLED)-1 do did=1, TAILLC RSAVED(TLED,TRING(TLED)-xdel,did)=0 enddo INDT(:) = 0 enddo TRING(TLED)=TRING(TLED)-RESL(TLED) RESL(TLED)=0 endif END SUBROUTINE atomes_1.3.1/src/fortran/parameters.F900000664000175000017500000006244515212624223017405 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file parameters.F90 !! @short Global variable declarations !! @author Sébastien Le Roux !################################################################ ! This is the atomes code main include file which contains: ! - Variables ! - Structures ! used all along the code and classified as follow: ! ! - LOGICAL type variables ! - LOGICAL (:) type variables ! - LOGICAL (:,:) type variables ! ! - INTEGER type variables ! - INTEGER(:) type variables ! - INTEGER(:,:) type variables ! - INTEGER(:,:,:) type variables ! - INTEGER(:,:,:,:) type variables ! - INTEGER(:,:,:,:,:) type variables ! ! - CHARACTER type variables ! - CHARACTER(:) type variables ! - CHARACTER(:,:) type variables ! - CHARACTER(:,:,:) type variables ! ! - DOUBLE PRECISION type variables ! ! - DOUBLE PRECISION type variables ! - DOUBLE PRECISION(:) type variables ! - DOUBLE PRECISION(:,:) type variables ! - DOUBLE PRECISION(:,:,:) type variables ! - DOUBLE PRECISION(:,:,:,:) type variables ! ! - STRUCTURES definitions ! ! - MPI // Only variables ! ! furthermore inside this first selection variables ! have been sorted by routines when necessary/possible !################################################################ MODULE PARAMETERS USE, INTRINSIC :: iso_c_binding IMPLICIT NONE !#################################### LOGICAL VARIABLES ####################################! LOGICAL :: PBC=.false. ! 1/0 Enable or disable periodic boundary conditions LOGICAL :: FRAC=.false. ! 1/0 Lattice relatives or DOUBLE PRECISIONs positions for atoms LOGICAL :: NOHP=.false. ! 1/0 Enable/disable homopolar bonds in connectivty LOGICAL :: ABAB=.false. ! 1/0 Enable or disable only ABAB rings if more than 3 chemical species LOGICAL :: AAAA=.false. ! 1/0 Enable or disable only AAAA chains LOGICAL :: ACAC=.false. ! 1/0 Enable or disable only ABAB chains LOGICAL :: ISOLATED=.false. ! 1/0 1-2-2-1 chains or N-2-2-N N=1,3 ... chains LOGICAL :: TOMO=.false. ! 1/0 Homopolar or no homopolar bonds in the rings LOGICAL :: CALC_RINGS=.false. ! 1/0 Compute ring statistics LOGICAL :: CALC_R0=.false. ! 1/0 Find all existing rings in the box LOGICAL :: CALC_R1=.false. ! 1/0 Shortest Path analysis LOGICAL :: CALC_R2=.false. ! 1/0 King's analysis LOGICAL :: CALC_R3=.false. ! 1/0 SP + Homo LOGICAL :: CALC_R4=.false. ! 1/0 King's + Homo LOGICAL :: CALC_PRINGS=.false. ! 1/0 Compute primitive ring statistics LOGICAL :: CALC_STRINGS=.false. ! 1/0 Compute strongs ring statistics LOGICAL :: RING_P1=.false. ! 1/0 Compute first part of detailed ring properties LOGICAL :: RING_P2=.false. ! 1/0 Compute second part of detailed ring properties LOGICAL :: RING_P3=.false. ! 1/0 Compute third part of detailed ring properties LOGICAL :: RING_P4=.false. ! 1/0 Compute fourth part of detailed ring properties LOGICAL :: RING_P5=.false. ! 1/0 Compute fifth part of detailed ring properties LOGICAL :: OVERALL_CUBIC=.false. ! 1/0 Cubic a=b=c, 90.0, 90.0, 90.0 #ifdef OPENMP LOGICAL :: ALL_ATOMS=.false. ! 1/0 Force OpenMP on ATOMS #endif ! *rings*.f90 ! LOGICAL :: FACTATRING=.false. ! 1/0 Calculate atomic ring factor using the RN variable (thesis S. LE ROUX) LOGICAL :: FACTATPNA=.false. ! 1/0 Calculate atomic ring factor using the PN variable (thesis S. LE ROUX) LOGICAL :: FACTATRMAX=.false. ! 1/0 Calculate atomic ring factor using the Pmax var (thesis S. LE ROUX) LOGICAL :: FACTATRMIN=.false. ! 1/0 Calculate atomic ring factor using the Pmin var (thesis S. LE ROUX) LOGICAL :: RUNSEARCH ! 1/0 Run ring statistics in the case of 3 or more species LOGICAL :: ADDSPEC ! 1/0 Add to chain in the ring case of 3 or more species LOGICAL :: DOAMPAT=.false. ! 1/0 if CALC_R1,R2,R3 or R4 to known if there are paths > TAILLD LOGICAL :: SAUT, SSAUT LOGICAL :: FOUND LOGICAL :: PATHOUT LOGICAL :: FIRR, PIRR LOGICAL :: HOMO LOGICAL :: DOSEARCH LOGICAL :: TBR=.false. LOGICAL :: ALC=.false. LOGICAL :: NO_HOMO=.false. LOGICAL :: ALLRINGS=.false. !##########################################################################################! !###################################### INTEGER VARIABLES #####################################! !***************************************** Misc *******************************************! INTEGER :: h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0, r=0, t=0, u=0, v=0 INTEGER :: NOA, NOB, NOC, NOD, NOE INTEGER :: COUNTER, RATE_COUNT, MAX_COUNT INTEGER :: NSUB, NTSUB, TSUB, ERR INTEGER :: NL, NC, NSI, NSJ INTEGER :: NUMBER_OF_I INTEGER :: DTV INTEGER :: NBONDS, ANBONDS INTEGER :: NDX, NBX, IDR INTEGER :: GR_INDEX INTEGER :: SUM_INDEX INTEGER :: ANG_I INTEGER :: FINISH, INDEXMSF INTEGER :: Id1, Id2, Id, GtBsize INTEGER :: SPIRR INTEGER :: L_TOT, LA_TOT INTEGER :: NUMA, SC INTEGER :: PATH, NNP, NNA INTEGER :: LOA, LOB, LOC INTEGER :: MAXAT, MINAT INTEGER :: MAXST, MINST INTEGER :: GRNUM, SQNUM, SKNUM, GQNUM, BDNUM, ANNUM, RINUM, CHNUM, SHNUM, MSNUM INTEGER :: ab, abc !*************************************** Defined ******************************************! INTEGER :: NA, NUMBER_OF_A ! Number of atom in the box INTEGER :: NSP, NSP_BY_STEP ! Number of species INTEGER :: NS, NOS, NSTP ! Number of DM steps = Number of configurations INTEGER :: NSBG ! Number of step between each geomerty INTEGER :: TAILLR, TAILLD ! Depth for rings hunt INTEGER :: TAILLE, TAILLH, TAILLT ! Depth for rings hunt INTEGER :: TAILLC ! Depth for chains hunt INTEGER :: TLT, NTLT INTEGER :: NUMBER_OF_QMOD ! Number of Qvect modulus INTEGER :: NUMBER_OF_QVECT ! Number of Qvectors INTEGER :: LTLT ! Ring's hunt species INTEGER :: NCELLS ! Number of lattice 1 or MD steps if NPT calculation INTEGER :: IDGR=0 INTEGER :: IDSQ=1 INTEGER :: IDSK=2 INTEGER :: IDGRFFT=3 INTEGER :: IDBD=4 INTEGER :: IDAN=5 INTEGER :: IDRI=6 INTEGER :: IDCH=7 INTEGER :: IDSP=8 INTEGER :: IDMSD=9 INTEGER :: IDSKT=10 INTEGER :: MAXN=20 ! The maximun number of neighbors an atom can have ! *rings*.f90 ! INTEGER :: MOLATS INTEGER :: MOLSTEP INTEGER :: MOLCOUNTER INTEGER :: TMBS !##########################################################################################! !#################################### INTEGER(:) VARIABLES #####################################! !************************************* defined ********************************************! INTEGER, DIMENSION(:), ALLOCATABLE :: LOT INTEGER, DIMENSION(:), ALLOCATABLE :: NBSPBS ! Number of atom of species=index_1 ! prepdata.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: ATOMID ! dmtx.f90 ! INTEGER, DIMENSION(3) :: isize ! sk.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: degeneracy ! molecuels.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: MIBS ! bonds.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: TOT_GSA INTEGER, DIMENSION(:), ALLOCATABLE :: NTETRA INTEGER, DIMENSION(:), ALLOCATABLE :: LP_GEOM INTEGER, DIMENSION(:), ALLOCATABLE :: TOGL, TIGL INTEGER, DIMENSION(:), ALLOCATABLE :: LGSA, NGSA ! *rings*.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: RPAT, CPAT INTEGER, DIMENSION(:), ALLOCATABLE :: MOL_ATOMS ! alloc*rings.F90 - rings.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: RES_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: APNA, SPNA INTEGER, DIMENSION(:), ALLOCATABLE :: VALID ! primrings.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: QUEUE, RINGSTAT INTEGER, DIMENSION(:), ALLOCATABLE :: NPRING, MATDIST !#################################### INTEGER (:,:) VARIABLES ###################################! ! bonds.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: LT_GEOM INTEGER, DIMENSION(:,:), ALLOCATABLE :: GEOM_LA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TOT_GEOMSA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TETRA ! molecules.f90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: TIIDA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TISP ! dmtx.f90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: CONTJ ! escs.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: CORT INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGET INTEGER, DIMENSION(:,:), ALLOCATABLE :: DEFT INTEGER, DIMENSION(:,:), ALLOCATABLE :: CORTA INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGETA INTEGER, DIMENSION(:,:), ALLOCATABLE :: DEFTA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TDA ! alloc*rings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: INDR INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: NRING INTEGER, DIMENSION(:,:), ALLOCATABLE :: VPAT INTEGER, DIMENSION(:,:), ALLOCATABLE :: INDRAT, NIRRAT, NIRR INTEGER, DIMENSION(:,:), ALLOCATABLE :: ATRMSX, ATRMSN INTEGER, DIMENSION(:,:), ALLOCATABLE :: AMPAT, ATRMAX, ATRMIN INTEGER, DIMENSION(:,:), ALLOCATABLE :: MAXPNA, MINPNA ! primrings.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: PRING INTEGER, DIMENSION(:,:), ALLOCATABLE :: QUERNG, VREF INTEGER, DIMENSION(:,:), ALLOCATABLE :: PRINGORD !##########################################################################################! !#################################### INTEGER VARIABLES #################################! ! bonds.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: LA_COUNT ! escs.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: CORNER INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: EDGE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: DEF INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: CORNERA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: EDGEA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: DEFA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: TDSA ! dmtx.f90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: VOISJ ! bonds.f90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: STATBD ! allocrings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: INDRING, INDSRING, LIRR INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: ATRING, ATPNA, MATPNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: STPNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: PNA, SNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: RINGSAVED ! primrings.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: SRINGSAVED !##########################################################################################! !################################## INTEGER(:,:,:,:) VARIABLES #################################! ! angles.f90 ! ! allocrings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: RINGORD ! allocprims.f90 - primrings.F90 ! INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: SRINGORD !##########################################################################################! !###################################### CHARACTER VARIABLES ####################################! ! Misc ! CHARACTER (LEN=15) :: sdate, stime, szone ! Starting date and time CHARACTER (LEN=15) :: edate, etime, ezone ! Ending date and time CHARACTER (LEN=9) :: PROGNAME="ATOMES" ! misc ! CHARACTER (LEN=2) :: CHOOSE CHARACTER (LEN=2) :: A1, A2 CHARACTER (LEN=2) :: ATOT CHARACTER (LEN=20) :: NOM_TMP CHARACTER (LEN=15) :: NTMP, NTMP2, NTMP3, Nstep, Nomx, Nomy CHARACTER (LEN=15) :: Nom, Nom1, Nom2, Nom3, Nom4 CHARACTER (LEN=40) :: NomSys, NomS CHARACTER (LEN=16) :: SPIND CHARACTER (LEN=20) :: ALC_TAB !##########################################################################################! !##################################### CHARACTER (:) VARIABLES ###################################! ! Misc ! CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: TL, FTAB ! Label of species=index_1 CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: TAB_OF_TYPE ! List of atom by name(species)=indx_1, by DM step=indx_2 CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: LABEL ! Label of species=index in input ! prepdata.F90 ! CHARACTER (LEN=15), DIMENSION(:), ALLOCATABLE :: ELEMID !##########################################################################################! !#################################### CHARACTER (:,:) VARIABLES ##################################! CHARACTER (LEN=12), DIMENSION(:,:), ALLOCATABLE :: LISTE_GEOMS !##########################################################################################! !################################### CHARACTER (:,:,:) VARIABLES #################################! ! CHARACTER (LEN=12), DIMENSION(:,:,:), ALLOCATABLE :: LGEO CHARACTER (LEN=12), DIMENSION(:,:,:), ALLOCATABLE :: LGEO !##########################################################################################! !###################################### DOUBLE PRECISION VARIABLES ####################################! DOUBLE PRECISION :: LTEMP !##########################################################################################! !###################################### DOUBLE PRECISION VARIABLES ##################################! ! Misc ! DOUBLE PRECISION :: w=0.0d0, x=0.0d0, y=0.0d0, z=0.0d0 DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) DOUBLE PRECISION, PARAMETER :: AVOGADRO=6.02214179d0 DOUBLE PRECISION, PARAMETER :: ANGTOBOHR=0.52917721 DOUBLE PRECISION :: p1, p2, p3 DOUBLE PRECISION :: TIME_TOT, tstat DOUBLE PRECISION :: MBOX DOUBLE PRECISION :: BOXS2 DOUBLE PRECISION :: BASE DOUBLE PRECISION :: TETA DOUBLE PRECISION :: DC DOUBLE PRECISION :: DELTA_ANG DOUBLE PRECISION :: MEANVOL DOUBLE PRECISION :: TOTAL_DENSITY, REAL_DENSITY DOUBLE PRECISION :: FREEVOL, ECFREEV DOUBLE PRECISION :: Dij, Dil, Vij DOUBLE PRECISION :: Gr_cutoff DOUBLE PRECISION :: CUTF !DOUBLE PRECISION :: A2A, B2B, C2C, AAA, BBB, CCC ! sq.f90 ! DOUBLE PRECISION :: Phi, Sinus_phi ! sk.f90 ! DOUBLE PRECISION :: NORM_TOT, DELTA_Q DOUBLE PRECISION :: Rmax, Sinus_Fact_Rmax, Fact_Rmax DOUBLE PRECISION :: SIGMA_LISS DOUBLE PRECISION :: qvmod, qvmax, qvmin !##########################################################################################! !#################################### DOUBLE PRECISION (:) VARIABLES ##################################! ! Misc ! DOUBLE PRECISION, DIMENSION(3) :: Rij, Ril, Rim, Dab, VAR ! Position vector DOUBLE PRECISION, DIMENSION(3) :: R2ij, R2Cor, RCm, RCm2 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: S_LENGTH DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MASS, M_SS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RVDW, R_DW DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Dcte ! Diffusion Cte DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: DIST_IJ, DIST_JI DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CMOY, Xi DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MTABL ! dmtx.f90 ! DOUBLE PRECISION, DIMENSION(3) :: CUTFV DOUBLE PRECISION, DIMENSION(3) :: pmin, pmax ! bonds.F90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MAC DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SA_COUNT ! escs.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EABL, CABL, DABL DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ETABL, CTABL, DTABL DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ECTABL, TDTABL ! gr.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: R_POINT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GRTAB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GrTOT, GgrTOT ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Drn, Trn ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XGrTOT, XGgrTOT ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Drx, Trx ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SHELL_VOL ! Shell volume as a function of d=(index-0.5)DELTA ! sq.f90 ! DOUBLE PRECISION, DIMENSION(2) :: Gd, Gn, Go, C_Box DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: NSCATTL ! Neutron Scattering Length of species=index DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XSCATTL ! X-ray Scattering Length of species=index DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: S, XS ! Total structure factor \\ Go=f(G(r)) DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Gr_T DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Q_POINT, K_POINT ! sk.f90 - utils.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: FNBSPBS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: modq DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: qvectx, qvecty, qvectz DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: cij, sik ! grfft.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GFFT, DFFT, R_PFFT, TDFFT ! resrings.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MOYPUR, MOYRED DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MOYPAT, MOYRAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ECTYPE, ECTYP, ECTYPAT, ECTAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: IRRED, RED DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: REDAT, IRRAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: TOTPSTEP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RNAMAX, RNAMIN DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EVMAX, EVMIN !##########################################################################################! !################################## DOUBLE PRECISION (:,:) VARIABLES ##################################! ! Misc ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: EPNA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: POA, POB ! Atm=indx_1, coord=indx_2(1=x, 2=y, 3=z) ! bonds.F90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MA_COUNT DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: NUM_GSA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: Gr_CUT, Gr_TMP ! fzbt.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: BTij ! Bathia-Thornton Partial g(r)/s(q) ! escs.F90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: CTYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DETYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: CTYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DETYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETDA ! sk.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: qvect ! msd.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DRIFT, COR DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: D2i, D2iNAC !##########################################################################################! !################################# DOUBLE PRECISION (:,:,:) VARIABLES #################################! ! Misc ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FULLPOS DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FULLVEL DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: NFULLPOS, NFPOS DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: ECART_TYPE ! gr.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Gr_ij ! Average of the RDF on all the MD run DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Ggr_ij ! Average of the RDF on all the MD run DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Dn_ij ! Average of the Dn on all the MD run ! grfft.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: GQBT ! sq.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Sij, Spij ! Partial structure factor DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Ss_ij ! Partial structure factor ! fzbt.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FZSij ! msd.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: D2ij, D2ijNAC, D2dir, D2dirNAC DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: CORNAC !##########################################################################################! !################################ DOUBLE PRECISION (:,:,:,:) VARIABLES ################################! ! gr.F90 ! DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: Gij ! RDF distance=index_1, atom_a=index_2, atom_b=index_3, step=index_4 DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: Dn ! Dn distance=index_1, atom_a=index_2, atom_b=index_3, step=index_4 !##########################################################################################! !################################ STRUCTURES VARIABLES Definition ###############################! !TYPE ATOM ! ! INTEGER :: INDICE ! ! INTEGER :: ELEMENT ! ! INTEGER :: NEIGHBOR ! Atom structure definition ! DOUBLE PRECISION :: X, Y, Z ! ! TYPE (ATOM), POINTER :: PAST ! ! TYPE (ATOM), POINTER :: NEXT ! !END TYPE ATOM ! !TYPE MOLECULE ! ! INTEGER :: INDICE ! ! INTEGER :: ATOMS ! ! TYPE (ATOM), POINTER :: FIRST_ATOM ! ! TYPE (ATOM), POINTER :: LAST_ATOM ! Molecule structure definition ! TYPE (MOLECULE), POINTER :: NEXT_MOL ! ! TYPE (MOLECULE), POINTER :: PAST_MOL ! !END TYPE MOLECULE !TYPE MODEL ! ! INTEGER :: ATOMS ! ! INTEGER :: MOLECULES ! Model structure definition ! TYPE (MOLECULE), POINTER :: FIRST_MOL ! ! TYPE (MOLECULE), POINTER :: LAST_MOL ! !END TYPE MODEL ! !TYPE (ATOM), POINTER :: AT ! !TYPE (MOLECULE), POINTER :: MOL ! !TYPE (MODEL), POINTER :: MODL ! TYPE AT INTEGER :: IND TYPE (AT), POINTER :: NEXT TYPE (AT), POINTER :: PREV END TYPE AT TYPE MOL INTEGER :: MID INTEGER :: STEP INTEGER :: ATOMES INTEGER, DIMENSION(:), ALLOCATABLE :: BSP TYPE (AT), POINTER :: FIRST_AT TYPE (AT), POINTER :: ATOM TYPE (MOL), POINTER :: NEXT TYPE (MOL), POINTER :: PREV END TYPE MOL TYPE RING ! INTEGER :: ATOM ! INTEGER :: NEIGHBOR ! Ring structure definition INTEGER :: SPEC ! TYPE (RING), POINTER :: PAST ! used in the ring search subroutines TYPE (RING), POINTER :: NEXT ! END TYPE RING ! TYPE PIXEL ! INTEGER :: NEIGHBOR ! Pixel structure definition INTEGER :: ATOMS ! INTEGER, DIMENSION(:), ALLOCATABLE :: ATOM_ID ! LOGICAL :: TOCHECK ! LOGICAL :: CHECKED ! INTEGER, DIMENSION(27) :: IDNEIGH ! END TYPE PIXEL TYPE (PIXEL), DIMENSION(:), ALLOCATABLE :: THEPIX, TESTPIX TYPE LATTICE LOGICAL :: GLASS=.false. ! 1/0 if the structure is 'cubic like' (90/90/90) LOGICAL :: CUBIC=.false. ! 1/0 if the structure is 'cubic' (90/90/90, a=b=c) DOUBLE PRECISION :: VOLUME DOUBLE PRECISION, DIMENSION(3) :: modv ! Lattice parameters DOUBLE PRECISION :: minv, maxv ! Min, max a,b, c DOUBLE PRECISION, DIMENSION(3) :: modr ! Reciprocal lattice parameters DOUBLE PRECISION :: minr, maxr ! Min, max, ra, rb, rc DOUBLE PRECISION, DIMENSION(3,3) :: lvect ! Lattice vectors DOUBLE PRECISION, DIMENSION(3,3) :: lrecp ! Reciprocal lattice vectors DOUBLE PRECISION, DIMENSION(3,3) :: fractocart, carttofrac ! Conversion matrix END TYPE LATTICE TYPE (LATTICE), DIMENSION(:), ALLOCATABLE, TARGET :: THE_BOX TYPE (LATTICE), POINTER :: NBOX !##########################################################################################! !##########################################################################################! END MODULE PARAMETERS ! ######################################## EOF ###########################################! atomes_1.3.1/src/fortran/vas.F900000664000175000017500000000621515212624223016024 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file vas.F90 !! @short Unused: read atomic coordinates in VASP trajectory format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_vas(vas_f, lvas, navas, nbsvas, is_npt) BIND (C,NAME='read_vas_') ! ! Lecture of atom types and coordinates - VASP trajectory ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER :: NVAS INTEGER (KIND=c_int), INTENT(IN) :: lvas, navas, is_npt INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nbsvas CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: vas_f CHARACTER (LEN=lvas) :: vas_file do i=1, lvas vas_file(i:i) = vas_f(i) enddo read_vas=1 inquire (file=vas_file, exist=isok) if (isok) then open (unit=20, file=vas_file, action='read', status='old', err=001) NS=0 NA=navas NVAS=TEST_VAS(20, NA) if (NVAS.ge.1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_vas"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_vas"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NVAS read (20, *, err=002) enddo do i=1, NS ! Read the 'Konfig' line read (20, *, err=002) l=1 do j=1, NSP do k=1, nbsvas(j) read (20, *, err=002) FULLPOS(l,1,i), FULLPOS(l,2,i), FULLPOS(l,3,i) TAB_OF_TYPE(l)= LABEL(j) l=l+1 enddo enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_vas=0 else read_vas=2 endif 002 continue close (20) 001 continue endif CONTAINS INTEGER FUNCTION TEST_VAS(UNITFILE, NATL) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: UNITFILE, NATL INTEGER :: LENF INTEGER :: EOF rewind(UNITFILE) EOF=0 LENF=0 do while (EOF .eq. 0) read (UNITFILE, *, iostat=EOF) LENF=LENF+1 enddo LENF=LENF-1 if (mod(LENF-7,NATL+1) .eq. 0) then NS=(LENF-7)/(NATL+1) TEST_VAS=7 else if (mod(LENF-6,NATL+1) .eq. 0) then NS=(LENF-6)/(NATL+1) TEST_VAS=6 else if (mod(LENF-5,NATL+1) .eq. 0) then NS=(LENF-5)/(NATL+1) TEST_VAS=5 else TEST_VAS=0 endif END FUNCTION END FUNCTION atomes_1.3.1/src/fortran/gr.F900000664000175000017500000003617715212624223015655 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file gr.F90 !! @short g(r) analysis: direct real space calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION g_of_r (NDR, DTR, FCR) BIND (C,NAME='g_of_r_') ! Radial Pair Distribution function ! ! -2 V ! g(r)= rho < Sum Sum d(ri)d(rj-r) > = -- < Sum Sum d(r-rij) > ! i j!i N² i j!i ! ! ! ! ! 1 rho(b) rho(b) ! g (r)= ------------ Sum Sum ---------- = Sum Sum ------------------ ! ab 4*PI*Delat(r) a b!a d(ab)²*N(a) a b!a Vshell(d(ab))*N(a) ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDR, FCR REAL (KIND=c_double), INTENT(IN) :: DTR DOUBLE PRECISION :: Hcap1, Hcap2, Vcap, Dgr DOUBLE PRECISION :: NORM_FACT, GRLIM DOUBLE PRECISION :: SUML, XSUML LOGICAL :: IS_CRYSTAL=.false. #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE LOGICAL FUNCTION ALLOCGR(NDR) INTEGER, INTENT(IN) :: NDR END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION END INTERFACE if (.not. allocgr(NDR)) then g_of_r = 0 goto 001 endif do i=1, NDR+1 SHELL_VOL(i) = 0.0d0 SHELL_VOL(i) = 4.0d0*PI*(((i-1)*DTR+DTR)**3 - ((i-1)*DTR)**3)/3 ! To take into account the atoms between a/2 and a srqt(3)/2 ! We need the small volume they can be found in. if (OVERALL_CUBIC .and. i*DTR.gt.MBOX) then Hcap1=i*DTR-MBOX if ((i-1)*DTR .le. MBOX) then Hcap2=0.0d0 else Hcap2=(i-1)*DTR-MBOX endif Vcap=Hcap1**2*(3*i*DTR - Hcap1) - Hcap2**2*(3*(i-1)*DTR - Hcap2) Vcap=Vcap*PI*2 SHELL_VOL(i)=SHELL_VOL(i)-Vcap endif enddo GRLIM = NDR*DTR GRLIM = GRLIM*GRLIM #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. #endif if (IS_CRYSTAL) then ! To write the case of highly distoreded crystal else #ifdef OPENMP if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA ! OpemMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(Dgr, Dij, Rij, GR_INDEX, NORM_FACT, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, NBSPBS, SHELL_VOL, DTR, MEANVOL, GRLIM, Gij, Dn, NSP, NDR) !$OMP DO SCHEDULE(STATIC,NA-1/NUMTH) do i=1, NA-1 do k=1, NS do j=i+1, NA if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,i,j,k,k,k) else Dij = CALCDIJ (Rij,i,j,k,k,1) endif if (Dij <= GRLIM) then l=LOT(i) m=LOT(j) Dgr = sqrt(Dij) if (l .eq. m) then n = NBSPBS(l)-1 else n = NBSPBS(l) endif GR_INDEX = int(Dgr/DTR)+1 NORM_FACT = 1.0d0/(SHELL_VOL(GR_INDEX)*dble(n)) !$OMP ATOMIC Gij(GR_INDEX,l,m,k) = Gij(GR_INDEX,l,m,k) + NORM_FACT/(dble(NBSPBS(m))/MEANVOL) !$OMP ATOMIC Dn(GR_INDEX,l,m,k) = Dn(GR_INDEX,l,m,k) + 1.0d0 endif enddo enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(Dgr, Dij, Rij, GR_INDEX, NORM_FACT, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, NBSPBS, SHELL_VOL, DTR, MEANVOL, GRLIM, Gij, Dn, NSP, NDR) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do k=1, NS do i=1, NA-1 do j=i+1, NA if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,i,j,k,k,k) else Dij = CALCDIJ (Rij,i,j,k,k,1) endif if (Dij <= GRLIM) then l=LOT(i) m=LOT(j) Dgr = sqrt(Dij) if (l .eq. m) then n = NBSPBS(l)-1 else n = NBSPBS(l) endif GR_INDEX = int(Dgr/DTR)+1 NORM_FACT = 1.0d0/(SHELL_VOL(GR_INDEX)*dble(n)) #ifdef OPENMP !$OMP ATOMIC #endif Gij(GR_INDEX,l,m,k) = Gij(GR_INDEX,l,m,k) + NORM_FACT/(dble(NBSPBS(m))/MEANVOL) #ifdef OPENMP !$OMP ATOMIC #endif Dn(GR_INDEX,l,m,k) = Dn(GR_INDEX,l,m,k) + 1.0d0 endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif endif do i=1, NDR do l=1, NS do j=1, NSP Dn(i,j,j,l) = 2.0d0*Dn(i,j,j,l)/dble(NBSPBS(j)-1) enddo do j=1, NSP-1 do k=j+1, NSP Dn(i,j,k,l) = Dn(i,j,k,l)+Dn(i,k,j,l) Dn(i,k,j,l) = Dn(i,j,k,l) Dn(i,j,k,l) = Dn(i,j,k,l)/dble(NBSPBS(j)) Dn(i,k,j,l) = Dn(i,k,j,l)/dble(NBSPBS(k)) enddo enddo enddo enddo do i=2, NDR do l=1, NS do j=1, NSP do k=1, NSP Dn(i,j,k,l) = Dn(i-1,j,k,l) + Dn(i,j,k,l) enddo enddo enddo enddo do i=1, NSP do j=1, NSP do k=1, NDR do l=1, NS Dn_ij(k,i,j) = Dn_ij(k,i,j) + Dn(k,i,j,l) Gr_ij(k,i,j) = Gr_ij(k,i,j) + Gij(k,i,j,l) enddo Gr_ij(k,i,j) = Gr_ij(k,i,j)/dble(NS) Dn_ij(k,i,j) = Dn_ij(k,i,j)/dble(NS) enddo enddo enddo do k=1, NDR do l=1, NSP Gr_ij(k,l,l) = 2.0d0*Gr_ij(k,l,l) enddo do j=1, NSP-1 do i=j+1, NSP Gr_ij(k,i,j) = Gr_ij(k,i,j) + Gr_ij(k,j,i) Gr_ij(k,j,i) = Gr_ij(k,i,j) enddo enddo enddo if (allocated(Dn)) deallocate(Dn) if (allocated(Gij)) deallocate(Gij) l = 16 do i=1, NSP do j=1, NSP do k=1, NDR GRTAB(k)=Gr_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR Ggr_ij(k,i,j) = (Gr_ij(k,i,j)-1.0)*4.0*PI*(NA/MEANVOL)*(k-0.5)*DTR GRTAB(k) = Ggr_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=Dn_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+1 enddo enddo if (NSP .eq. 2) then if (GRBT(Gr_ij, NDR)) then do k=1, NDR GRTAB(k)=BTij(k,1) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=BTij(k,2) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=BTij(k,3) enddo call save_curve (NDR, GRTAB, l, IDGR) endif if (allocated(BTij)) deallocate(BTij) endif SUML=0.0d0 XSUML=0.0d0 do k=1, NSP SUML=SUML+NSCATTL(k)*Xi(k) XSUML=XSUML+XSCATTL(k)*Xi(k) enddo SUML=SUML*SUML XSUML=XSUML*XSUML ! Attention bi(NSCATTL(i) dans le code) en fm et bi² en barn = fm*fm*1e-2 = 1e-24cm² do i=1, NDR do j=1, NSP do k=1, NSP GrTOT(i) = GrTOT(i) + Xi(j)*Xi(k)*NSCATTL(j)*NSCATTL(k)*Gr_ij(i,j,k) GgrTOT(i) = GgrTOT(i) + Xi(j)*Xi(k)*NSCATTL(j)*NSCATTL(k)*Ggr_ij(i,j,k) XGrTOT(i) = XGrTOT(i) + Xi(j)*Xi(k)*XSCATTL(j)*XSCATTL(k)*Gr_ij(i,j,k) XGgrTOT(i) = XGgrTOT(i) + Xi(j)*Xi(k)*XSCATTL(j)*XSCATTL(k)*Ggr_ij(i,j,k) enddo enddo GrTOT(i) = GrTOT(i)/SUML Drn(i) = GgrTOT(i) Trn(i) = Drn(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*SUML GgrTOT(i) = GgrTOT(i)/SUML XGrTOT(i) = XGrTOT(i)/XSUML Drx(i) = XGgrTOT(i) Trx(i) = Drx(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*XSUML XGgrTOT(i) = XGgrTOT(i)/XSUML enddo do i=1, NDR GRTAB(i) = GrTOT(i) enddo call save_curve (NDR, GRTAB, 0, IDGR) do i=1, NDR GRTAB(i) = GgrTOT(i) enddo call save_curve (NDR, GRTAB, 2, IDGR) do i=1, NDR GRTAB(i) = Drn(i) enddo call save_curve (NDR, GRTAB, 4, IDGR) do i=1, NDR GRTAB(i) = Trn(i) enddo call save_curve (NDR, GRTAB, 6, IDGR) do i=1, NDR GRTAB(i) = XGrTOT(i) enddo call save_curve (NDR, GRTAB, 8, IDGR) do i=1, NDR GRTAB(i) = XGgrTOT(i) enddo call save_curve (NDR, GRTAB, 10, IDGR) do i=1, NDR GRTAB(i) = Drx(i) enddo call save_curve (NDR, GRTAB, 12, IDGR) do i=1, NDR GRTAB(i) = Trx(i) enddo call save_curve (NDR, GRTAB, 14, IDGR) if (FCR .eq. 1) call FITCUTOFFS g_of_r=1 001 continue if (allocated(Dn)) deallocate (Dn) if (allocated(Gij)) deallocate (Gij) if (allocated(Dn_ij)) deallocate (Dn_ij) if (allocated(GRTAB)) deallocate (GRTAB) if (allocated(GgrTOT)) deallocate (GgrTOT) if (allocated(XGgrTOT)) deallocate (XGgrTOT) if (allocated(Trn)) deallocate (Trn) if (allocated(Trx)) deallocate (Trx) if (allocated(Drn)) deallocate (Drn) if (allocated(Drx)) deallocate (Drx) if (allocated(Ggr_ij)) deallocate (Ggr_ij) if (allocated(Gr_ij)) deallocate (Gr_ij) if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) CONTAINS SUBROUTINE FITCUTOFFS INTERFACE INTEGER FUNCTION CUTFIT (TABTOFIT, NPOINTS) INTEGER, INTENT(IN) :: NPOINTS DOUBLE PRECISION, DIMENSION(NPOINTS), INTENT(IN) :: TABTOFIT END FUNCTION END INTERFACE if (allocated(GFFT)) deallocate(GFFT) allocate(GFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: FITCUTOFFS"//CHAR(0), "Table: GFFT"//CHAR(0)) endif do l=1, NSP do j=1, NSP do k=1, NDR GFFT(k)=Gr_ij(k,l,j) enddo Gr_CUT(l,j) = (CUTFIT(GFFT, NDR) - 0.5) * DTR enddo enddo Gr_cutoff = (CUTFIT(GrTOT, NDR) - 0.5) * DTR call sendcutoffs(NSP, Gr_cutoff, Gr_CUT) if (allocated(GFFT)) deallocate(GFFT) END SUBROUTINE END FUNCTION INTEGER FUNCTION CUTFIT (TABTOFIT, NPOINTS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NPOINTS DOUBLE PRECISION, DIMENSION(NPOINTS), INTENT(IN) :: TABTOFIT o = 1 p = 0 do while (p .eq. 0) r=INT(o+1+ANint(5.0*dble(NPOINTS)/dble(100*NS))) if (o.eq.NPOINTS .or. r.gt.NPOINTS) exit if (TABTOFIT(o) .le. TABTOFIT(o+1)) then o=o+1 else if (TABTOFIT(o) .le. TABTOFIT(r)) then o=o+1 else if (TABTOFIT(o) .le. 0.05) then o=o+1 else p=1 endif enddo p = 0 do while (p .eq. 0) r=INT(o+1+ANint(5.0*dble(NPOINTS)/dble(100*NS))) if (o.eq.NPOINTS .or. r.gt.NPOINTS) exit if (TABTOFIT(o) .le. TABTOFIT(o+1)) then o=o+1 else if (TABTOFIT(o) .le. TABTOFIT(r)) then o=o+1 else p=1 endif enddo CUTFIT = o END FUNCTION LOGICAL FUNCTION ALLOCGR (NDR) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NDR ALLOCGR=.true. if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) allocate(SHELL_VOL(NDR+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: SHELL_VOL"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Gij)) deallocate(Gij) allocate(Gij(NDR+1,NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Gij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Dn)) deallocate(Dn) allocate(Dn(NDR+1,NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Dn"//CHAR(0)) ALLOCGR=.false. goto 001 endif Gij(:,:,:,:)=0.0d0 Dn(:,:,:,:)=0.0d0 if (allocated(XGrTOT)) deallocate(XGrTOT) allocate(XGrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: XGrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GrTOT)) deallocate(GrTOT) allocate(GrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Gr_ij)) deallocate(Gr_ij) allocate(Gr_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Gr_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Dn_ij)) deallocate(Dn_ij) allocate(Dn_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Dn_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GRTAB)) deallocate(GRTAB) allocate(GRTAB(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GRTAB"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Ggr_ij)) deallocate(Ggr_ij) allocate(Ggr_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Ggr_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GgrTOT)) deallocate(GrTOT) allocate(GgrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GgrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(XGgrTOT)) deallocate(XGgrTOT) allocate(XGgrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: XGgrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Trn)) deallocate(Trn) allocate(Trn(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Trn"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Drn)) deallocate(Drn) allocate(Drn(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Drn"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Trx)) deallocate(Trx) allocate(Trx(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Trx"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Drx)) deallocate(Drx) allocate(Drx(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Drx"//CHAR(0)) ALLOCGR=.false. goto 001 endif GrTOT(:)=0.0d0 XGrTOT(:)=0.0d0 GRTAB(:)=0.0d0 GgrTOT(:)=0.0d0 XGgrTOT(:)=0.0d0 Trn(:)=0.0d0 Trx(:)=0.0d0 Drn(:)=0.0d0 Drx(:)=0.0d0 Gr_ij(:,:,:)=0.0d0 Dn_ij(:,:,:)=0.0d0 Ggr_ij(:,:,:)=0.0d0 001 continue END FUNCTION atomes_1.3.1/src/fortran/initrings.F900000664000175000017500000001151715212624223017242 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file initrings.F90 !! @short Initialize ring statistics !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCRINGS() ! ! Memory allocation for ring statistics ! USE PARAMETERS IMPLICIT NONE if(allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: NRING"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(PNA)) deallocate(PNA) allocate(PNA(TAILLR,TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: PNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(MAXPNA)) deallocate(MAXPNA) allocate(MAXPNA(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: MAXPNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(MINPNA)) deallocate(MINPNA) allocate(MINPNA(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: MINPNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif !if (FACTATRING) then ! if (allocated(ATRING)) deallocate(ATRING) ! allocate(ATRING(TAILLD,NTLT,NS), STAT=ERR) ! if (ERR .ne. 0) then ! ! endif ! ATRING(:,:,:)=0 !endif if (DOAMPAT) then if (allocated(AMPAT)) deallocate(AMPAT) allocate(AMPAT(NTLT,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: AMPAT"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif AMPAT(:,:)=0 endif !if (FACTATPNA) then ! if (allocated(ATPNA)) deallocate(ATPNA) ! allocate(ATPNA(TAILLD,NTLT,NS), STAT=ERR) ! if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ALLOCRINGS"//CHAR(0), "Table: ATPNA"//CHAR(0)) ! ALLOCRINGS=.false. ! goto 001 ! endif ! ATPNA(:,:,:)=0 !endif ! End of allocation / Initialisation MAXPNA(:,:)=0 MINPNA(:,:)=0 PNA(:,:,:)=0 NRING(:,:)=0 ALLOCRINGS=.true. 001 continue END FUNCTION INTEGER (KIND=c_int) FUNCTION initrings (VRINGS, VTAILLD, VTLT, VNUMA, VABAB, VHOMO) BIND (C,NAME='initrings_') ! ! Initialization of the ring statistics ! The key variable is NUMA see in the following lines ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: VRINGS, VTAILLD, VTLT, VNUMA, VABAB, VHOMO INTERFACE LOGICAL FUNCTION ALLOCRINGS() END FUNCTION INTEGER FUNCTION KING_RINGS() END FUNCTION INTEGER FUNCTION GUTTMAN_RINGS() END FUNCTION INTEGER FUNCTION PRIMITIVE_RINGS() END FUNCTION END INTERFACE if (VTLT .eq. 0) then TLT=NSP+1 else TLT=VTLT endif NUMA=VNUMA NTLT=NBSPBS(TLT) TAILLR=VTAILLD TAILLD=VTAILLD+1 ABAB=.false. NO_HOMO=.false. if (NSP .gt. 1) then if (VABAB .eq. 1) ABAB=.true. if (VHOMO .eq. 1) NO_HOMO=.true. endif #ifdef DEBUG write (6, '("RINGS:: ABAB= ",l1,", NO_HOMO= ",l1,", NUMA= ",i5,", TAILLR= ",i2)') ABAB, NO_HOMO, NUMA, TAILLR #endif TBR=.false. ALC=.false. ALLRINGS=.false. CALC_STRINGS=.false. ! In the following lines the NUMA variable ! gives the 'average' number of rings per size and per step ! this variable depends on the type of rings, of the system studied as well ! as of the search depth. ! NUMA is used as a reference to allocate almost all tabs during rings ! search and analysis. NUMA is a key variable - tweak with caution ! if (VRINGS.eq.1 .or. VRINGS.eq.2) then DOAMPAT=.true. else DOAMPAT=.false. endif if (.not.ALLOCRINGS()) then initrings=0 goto 001 endif if (VRINGS .eq. 0) ALLRINGS=.true. if (VRINGS .le. 1) then initrings=KING_RINGS() endif if (VRINGS .eq. 2) then initrings=GUTTMAN_RINGS() endif if (VRINGS > 2) then CALC_PRINGS=.true. if (.not.PBC) then NNA=NA NNP=0 else NNP=NA*(NBX**3 - 1)/2 endif if (VRINGS .eq. 4) CALC_STRINGS=.true. initrings=PRIMITIVE_RINGS() endif 001 continue END FUNCTION atomes_1.3.1/src/fortran/grfft.F900000664000175000017500000001325015212624223016340 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file grfft.F90 !! @short g(r) analysis: Fourier transform calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION g_of_r_fft (NDR, DTR, MMX) BIND (c,name='g_of_r_fft_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDR REAL (KIND=c_double), INTENT(IN) :: DTR, MMX INTERFACE INTEGER FUNCTION recup_data (i, j) INTEGER, INTENT(IN) :: i, j END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT END FUNCTION END INTERFACE qvmax = MMX NUMBER_OF_I = NDR if (allocated(GFFT)) deallocate(GFFT) allocate(GFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: GFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(DFFT)) deallocate(DFFT) allocate(DFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: DFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(TDFFT)) deallocate(TDFFT) allocate(TDFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: TDFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(R_PFFT)) deallocate(R_PFFT) allocate(R_PFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: R_PFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif do i=1, NDR R_PFFT(i)= 0.0d0 R_PFFT(i)= 1.0 / (2.0*PI*PI*NA/MEANVOL*(i-0.5)*DTR) enddo j=0 l=0 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif j=4 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif if (NSP .eq. 2) then if (allocated(GQBT)) deallocate(GQBT) allocate(GQBT(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: GQBT"//CHAR(0)) g_of_r_fft=0 goto 001 endif endif j=j+NSP*NSP*2+2 do n=1, NSP do m=1, NSP j=j+2 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif enddo enddo if (NSP .eq. 2) then if (GRBT (GQBT, NDR)) then do k=1, NDR GFFT(k)=BTij(k,1) enddo call save_curve (NDR, GFFT, l, IDGRFFT) l = l+2 do k=1, NDR GFFT(k)=BTij(k,2) enddo call save_curve (NDR, GFFT, l, IDGRFFT) l = l+2 do k=1, NDR GFFT(k)=BTij(k,3) enddo call save_curve (NDR, GFFT, l, IDGRFFT) endif if (allocated(BTij)) deallocate(BTij) endif g_of_r_fft=1 001 continue if (allocated(GFFT)) deallocate(GFFT) if (allocated(DFFT)) deallocate(DFFT) if (allocated(TDFFT)) deallocate(TDFFT) if (allocated(R_PFFT)) deallocate(R_PFFT) if (allocated(GQBT)) deallocate(GQBT) END FUNCTION INTEGER FUNCTION send_sq (IC, VAL, DTR, KDATA, SDATA) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: IC, VAL DOUBLE PRECISION, INTENT(IN) :: DTR DOUBLE PRECISION, DIMENSION(VAL), INTENT(IN) :: KDATA, SDATA DOUBLE PRECISION :: SUML j = IC call FFT_TO_GR (VAL, KDATA, SDATA, GFFT) call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 if (j.gt.4) then if (nsp .eq. 2) then do i=1, NUMBER_OF_I GQBT(i,n,m) = GFFT(i) enddo endif do i=1, NUMBER_OF_I DFFT(i)= 4.0*PI*(((i-0.5)*DTR)**2)*DTR*GFFT(i)/MEANVOL if (i .gt. 1) DFFT(i)= DFFT(i) + DFFT(i-1) enddo if (n .eq. m) then k = (NBSPBS(n)-1) else k = NBSPBS(m) endif do i=1, NUMBER_OF_I DFFT(i)= DFFT(i)*k enddo do i=1, NUMBER_OF_I GFFT(i)=(GFFT(i)-1.0)*4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR enddo call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 call save_curve (NUMBER_OF_I, DFFT, l, IDGRFFT) l=l+1 else SUML=0.0d0 do k=1, NSP if (j .eq. 0) then SUML=SUML+NSCATTL(k)*Xi(k) else SUML=SUML+XSCATTL(k)*Xi(k) endif enddo SUML=SUML*SUML do i=1, NUMBER_OF_I GFFT(i)=(GFFT(i)-1.0)*4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR enddo call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 do i=1, NUMBER_OF_I TDFFT(i) = GFFT(i)*SUML enddo call save_curve (NUMBER_OF_I, TDFFT, l, IDGRFFT) l=l+2 do i=1, NUMBER_OF_I TDFFT(i) = TDFFT(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*SUML enddo call save_curve (NUMBER_OF_I, TDFFT, l, IDGRFFT) l=l+2 endif send_sq = 1 CONTAINS SUBROUTINE FFT_TO_GR (LTAB, KTAB, TAB, RTAB) USE PARAMETERS INTEGER, INTENT(IN) :: LTAB DOUBLE PRECISION, DIMENSION(LTAB), INTENT(IN) :: KTAB, TAB DOUBLE PRECISION, DIMENSION(NUMBER_OF_I), INTENT(INOUT) :: RTAB do i=1, NUMBER_OF_I RTAB(i)= 0.0d0 do k=1, LTAB-1 Phi = KTAB(k)*(i-0.5)*DTR RTAB(i) = RTAB(i) + KTAB(k)*(TAB(k) - 1.0)*sin(Phi)*(KTAB(k+1) - KTAB(k)) enddo RTAB(i) = 1.0 + R_PFFT(i) * RTAB(i) enddo END SUBROUTINE END FUNCTION atomes_1.3.1/src/fortran/trj.F900000664000175000017500000000547615212624223016042 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file trj.F90 !! @short Unused: read atomic coordinates in CPMD trajectory format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_trj (trj_f, ltrj, natrj, nbstrj, is_npt) BIND (C,NAME='read_trj_') ! ! Lecture of atom types and coordinates - CPMD trajectory ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: ltrj, natrj, is_npt INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nbstrj CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: trj_f CHARACTER (LEN=ltrj) :: trj_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, ltrj trj_file(i:i) = trj_f(i) enddo read_trj = 1 inquire (file=trj_file, exist=isok) if (isok) then open (unit=20, file=trj_file, action='read', status='old', err=001) NS=0 NA=natrj NS=TEST_LENGTH(20, NA) if (NS .ge. 1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_trj"//CHAR(0), "Table: FULLPOS"//CHAR(0)) read_trj=3 goto 001 endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_trj"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) read_trj=3 goto 001 endif do i=1, NS l=1 do j=1, NSP do k=1, nbstrj(j) read (20, *, err=002) z, FULLPOS(l,1,i), FULLPOS(l,2,i), FULLPOS(l,3,i) ! CPMD trajectory is in atomic units do m=1, 3 FULLPOS(l,m,i)=ANGTOBOHR*FULLPOS(l,m,i) enddo TAB_OF_TYPE(l)= LABEL(j) l=l+1 enddo enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_trj=0 else read_trj=2 endif 002 continue close (20) 001 continue endif END FUNCTION atomes_1.3.1/src/fortran/rings-king.F900000664000175000017500000007527615212624223017320 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings-king.F90 !! @short King ring statistics !! @author Sébastien Le Roux SUBROUTINE SETUP_CPAT_VPAT_RING (NAT, STR, CONT, VOIS, CPT, VPT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NAT, STR INTEGER, DIMENSION(NAT,NS), INTENT(IN):: CONT INTEGER, DIMENSION(MAXN,NAT,NS), INTENT(IN) :: VOIS INTEGER, DIMENSION(NAT), INTENT(INOUT):: CPT INTEGER, DIMENSION(NAT,MAXN), INTENT(INOUT) :: VPT INTEGER :: RAB, RAC, RAD !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo CPT(:) = 0 VPT(:,:) = 0 do RAB=1, NAT if (CONT(RAB,STR) .gt. 1) then RAC = 0 do RAD=1, CONT(RAB,STR) if (CONT(VOIS(RAD,RAB,STR),STR) .gt. 1) then RAC=RAC+1 VPT(RAB,RAC) = VOIS(RAD,RAB,STR) endif enddo if (RAC .ge. 2) then CPT(RAB) = RAC endif endif enddo END SUBROUTINE SUBROUTINE SETUP_CPAT_VPAT (STR, NAT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STR, NAT INTEGER :: RAB, RAC, RAD !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo do RAB=1, NAT CPAT(RAB) = 0 if (CONTJ(RAB,STR) .gt. 1) then RAC = 0 do RAD=1, CONTJ(RAB,STR) if (CONTJ(VOISJ(RAD,RAB,STR),STR) .gt. 1) then RAC=RAC+1 VPAT(RAB,RAC) = VOISJ(RAD,RAB,STR) endif enddo if (RAC .ge. 2) then CPAT(RAB) = RAC endif endif enddo END SUBROUTINE INTEGER FUNCTION KING_RINGS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER :: ar #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE KING_RINGS = 0 ar = 0 if (.not.ALLRINGS) ar=1 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call KING_RING_SEARCH_ATOMS (ar, NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call KING_RING_SEARCH_STEPS (ar, NUMTH) endif #else call KING_RING_SEARCH_STEPS (ar) #endif KING_RINGS = RECRINGS(ar) END FUNCTION #ifdef OPENMP SUBROUTINE KING_RING_SEARCH_ATOMS (ARI, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: ARI, NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NA), INTENT(IN):: CPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS p=0 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(MAXAT, MINAT, RPAT, APNA, SAUT, RUNSEARCH, & !$OMP& j, k, l, m, n, o, LORA, LORB, LORC, TAILLE, TAILLH, THE_RING, RES_LIST, & !$OMP& FOUND, ERR, SAVR, ORDR, TRING, INDTE, INDTH) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, DOAMPAT, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, PBC, MAXN, SAVRING, ORDRING, NRING, INDRING, PNA, ri) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 002 endif TRING(:)=0 SAVR(:,:,:)=0 ORDR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then !$OMP CRITICAL p = p+1 o = p !$OMP END CRITICAL APNA(:) = 0 MINAT=TAILLD MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j)-1 do m=l+1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) LORC=LOT(VPAT(j,m)) if (ABAB) then if ((LORB .ne. LORA) .and. (LORC .ne. LORA) .and. (LORB .eq. LORC)) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(VPAT(j,l)) = 0 THE_RING(1)%ATOM=VPAT(j,l) THE_RING(1)%SPEC=LORB THE_RING(1)%NEIGHBOR=1 THE_RING(2)%ATOM=j THE_RING(2)%SPEC=LORA THE_RING(2)%NEIGHBOR=1 RPAT(j)=1 TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 THE_RING(3)%ATOM=VPAT(j,m) THE_RING(3)%SPEC=LORC THE_RING(3)%NEIGHBOR=CPAT(VPAT(j,m)) call INSIDE_RING (THE_RING, FOUND, i, VPAT(j,m), 3, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVR, ORDR, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 003 if (ALLRINGS) then do k=3, TAILLR do n=1, TRING(k) if (INDTE(n).ne.0 .and. APNA(k).eq.0) then APNA(k)=1 MINAT=min(MINAT,k) MAXAT=max(MAXAT,k) ! if (FACTATPNA) ATPNA(k,o,i)=1 SAUT=.false. endif enddo enddo else if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif else if (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVR, ORDR, TRING, RES_LIST, INDTH) else if (DOAMPAT) then if (CONTJ(VPAT(j,l),i) .ge. 2 .and. CONTJ(VPAT(j,m),i) .ge. 2) then !$OMP ATOMIC AMPAT(o,i)=AMPAT(o,i)+1 endif endif endif enddo enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif 003 continue enddo !$OMP END DO NOWAIT if (TBR .or. ALC) goto 002 !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 002 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(THE_RING)) deallocate (THE_RING) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo ri = ri + RINGS_TO_OGL (i, ARI, NRING, SAVRING, ORDRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: KING_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (ARI, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE KING_RING_SEARCH_STEPS (ARI, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: ARI, NUMTH #else SUBROUTINE KING_RING_SEARCH_STEPS (ARI) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ARI #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(TAILLE, TAILLH, MAXAT, MINAT, SAUT, RUNSEARCH, & !$OMP& i, j, k, l, m, n, o, p, LORA, LORB, LORC, THE_RING, RES_LIST, INDTE, INDTH, APNA, & !$OMP& FOUND, ERR, TRING, SAVRING, ORDRING, RPAT, CPAT, VPAT) & !$OMP& SHARED(ARI, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, DOAMPAT, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 001 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) o=0 do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then o=o+1 APNA(:) = 0 MINAT=TAILLR MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j)-1 do m=l+1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) LORC=LOT(VPAT(j,m)) if (ABAB) then if ((LORB .ne. LORA) .and. (LORC .ne. LORA) .and. (LORB .eq. LORC)) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo p = VPAT(j,l) RPAT(p) = 0 RPAT(j)=1 THE_RING(1)%ATOM=p THE_RING(1)%SPEC=LORB THE_RING(1)%NEIGHBOR=1 THE_RING(2)%ATOM=j THE_RING(2)%SPEC=LORA THE_RING(2)%NEIGHBOR=1 THE_RING(3)%ATOM=VPAT(j,m) THE_RING(3)%SPEC=LORC THE_RING(3)%NEIGHBOR=CPAT(VPAT(j,m)) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, VPAT(j,m), 3, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVRING, ORDRING, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 002 if (ALLRINGS) then do k=3, TAILLR do n=1, TRING(k) if (INDTE(n).ne.0 .and. APNA(k).eq.0) then APNA(k)=1 MINAT=min(MINAT,k) MAXAT=max(MAXAT,k) ! if (FACTATPNA) ATPNA(k,o,i)=1 SAUT=.false. endif enddo enddo else if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif else if (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVRING, ORDRING, TRING, RES_LIST, INDTH) else if (DOAMPAT) then if (CONTJ(VPAT(j,l),i) .ge. 2 .and. CONTJ(VPAT(j,m),i) .ge. 2) AMPAT(o,i)=AMPAT(o,i)+1 endif endif enddo enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo do j=3, TAILLR NRING(j,i) = TRING(j) enddo !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i3)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo j = RINGS_TO_OGL (i, ARI, NRING, SAVRING, ORDRING) #ifdef OPENMP !$OMP ATOMIC #endif ri = ri + j 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: KING_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_RING)) deallocate (THE_RING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (ARI, NRING) END SUBROUTINE INTEGER FUNCTION CHECK_RING (THE_RING, FND, S_CR, RID, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(IN) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_CR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER :: ix, iy, CHAINE LOGICAL :: IS_RING LOGICAL :: HOMOP DOUBLE PRECISION :: DUV DOUBLE PRECISION, DIMENSION(3) :: RAB, VAB INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION SUBROUTINE SAVE_THIS_RING (THE_RING, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLR), INTENT(IN) :: THE_RING INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE IS_RING=.true. HOMOP=.false. if (THE_RING(RID)%ATOM.eq.THE_RING(1)%ATOM .and. RID.ge.4) then IS_RING=.true. HOMOP=.false. if (NSP .gt. 1) then do ix=1, RID-1 if (THE_RING(ix)%SPEC .eq. THE_RING(ix+1)%SPEC) then HOMOP=.true. exit endif enddo endif if (PBC) then VAB(:)=0.0d0 do ix=1, RID-1 if (NCELLS .gt. 1) then DUV = CALCDIJ (RAB,THE_RING(ix)%ATOM,THE_RING(ix+1)%ATOM,S_CR,S_CR,S_CR) else DUV = CALCDIJ (RAB,THE_RING(ix)%ATOM,THE_RING(ix+1)%ATOM,S_CR,S_CR,1) endif do iy=1,3 VAB(iy)=VAB(iy)+RAB(iy) enddo enddo if (abs(VAB(1)) .ge. 0.01 .or. abs(VAB(2)) .ge. 0.01 .or. abs(VAB(3)) .ge. 0.01) then IS_RING=.false. endif endif if (IS_RING) then CHAINE = RID-1 if (ALLRINGS) then if (.not.NO_HOMO .or. .not.HOMOP) then FND=.true. call SAVE_THIS_RING (THE_RING, CHAINE, RSAVED, OSAVED, TRING, INDE, RESL) endif else if (NO_HOMO) then if (CHAINE .le. TAH) then if (CHAINE.lt.TAH .or. .not.HOMOP) call DEL_THIS_RING (TAH, RSAVED, OSAVED, TRING, RESL, INDH) if (CHAINE.lt.TAE) call DEL_THIS_RING (TAE, RSAVED, OSAVED, TRING, RESL, INDE) if (.not.HOMOP .and. CHAINE.le.TAE) then FND=.true. TAE=CHAINE call SAVE_THIS_RING (THE_RING, TAE, RSAVED, OSAVED, TRING, INDE, RESL) else if (HOMOP) then if (CHAINE .lt. TAE) then FND=.false. TAH=CHAINE call SAVE_THIS_RING (THE_RING, TAH, RSAVED, OSAVED, TRING, INDH, RESL) endif endif endif else if (CHAINE .le. TAE) then if (CHAINE.lt.TAE) call DEL_THIS_RING (TAE, RSAVED, OSAVED, TRING, RESL, INDE) FND=.true. TAE=CHAINE call SAVE_THIS_RING (THE_RING, TAE, RSAVED, OSAVED, TRING, INDE, RESL) endif endif endif CHECK_RING = 1 else CHECK_RING = 2 endif else CHECK_RING = 0 endif END FUNCTION RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER :: IND, RES LOGICAL :: ADDSP INTERFACE INTEGER FUNCTION CHECK_RING (THE_RING, FND, S_CR, RID, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLR), INTENT(IN) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_CR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL END FUNCTION END INTERFACE if (RID-1 .lt. TAE) then do while (THE_RING(RID)%NEIGHBOR .ge. 1) IND = VPT(AI_IR, THE_RING(RID)%NEIGHBOR) if (NRPAT(IND).eq.0) then if (ABAB) then if (mod(RID,2).eq.0 .and. LOT(IND).eq.LRB) then ADDSP=.true. elseif (mod(RID,2).ne.0 .and. LOT(IND).eq.LRA) then ADDSP=.true. else ADDSP=.false. endif else ADDSP=.true. endif if (ADDSP) then THE_RING(RID+1)%ATOM = IND THE_RING(RID+1)%SPEC = LOT(IND) THE_RING(RID+1)%NEIGHBOR = CPT(IND) NRPAT(IND)=1 RES = CHECK_RING (THE_RING, FND, S_IR, RID+1, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) if (TBR .or. ALC) goto 001 if (RES .eq. 0) then call INSIDE_RING (THE_RING, FND, S_IR, IND, RID+1, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) if (TBR .or. ALC) goto 001 endif NRPAT(IND) = 0 endif endif THE_RING(RID)%NEIGHBOR = THE_RING(RID)%NEIGHBOR - 1 enddo endif 001 continue END SUBROUTINE INSIDE_RING SUBROUTINE SAVE_THIS_RING (THE_RING, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(IN) :: THE_RING INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWRING INTEGER, DIMENSION(TLES) :: TOTRI, TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOTRI(idx)=THE_RING(idx)%ATOM TOSAV(idx)=THE_RING(idx)%ATOM enddo call TRI(TOTRI, TLES) if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWRING=.false. do idy=1, TLES if (TOTRI(idy) .ne. RSAVED(TLES,idx,idy)) then NEWRING=.true. exit endif enddo if (.not.NEWRING) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWRING=.true. endif if (NEWRING) then ! A new ring has been found ! We save the data RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOTRI(idx) OSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: xdel, did ! The max size of the ring possible for the triplet N1-At-N2 has down ! We have to delete the bigger rings already found for this triplet if (RESL(TLED) .ge. 1) then do xdel=0, RESL(TLED)-1 do did=1, TAILLR RSAVED(TLED,TRING(TLED)-xdel,did)=0 OSAVED(TLED,TRING(TLED)-xdel,did)=0 enddo do did=1, NUMA INDT(did)=0 enddo enddo TRING(TLED)=TRING(TLED)-RESL(TLED) RESL(TLED)=0 endif END SUBROUTINE atomes_1.3.1/src/fortran/writedata.F900000664000175000017500000007046715212624223017231 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file writedata.F90 !! @short Export curve data using data received from C !! @author Sébastien Le Roux CHARACTER (LEN=36) FUNCTION ylegend (job, nleg, idl, snp) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: job, nleg, idl, snp INTEGER :: DAL, DBL, DCL, DDL, DEL LOGICAL :: done ylegend = '' ! Y axis legend if not spherical harmonics, if (job.eq.IDGR .or. job.eq.IDGRFFT) then if (nleg .eq. 0) then if (idl .eq. 0) then ylegend = """g(r) Neutrons""" else ylegend = "g(r) Neutrons" endif elseif (nleg .eq. 1) then if (idl .eq. 0) then ylegend = """g(r) Neutrons - smoothed""" else ylegend = "g(r) Neutrons - smoothed" endif elseif (nleg .eq. 2) then if (idl .eq. 0) then ylegend = """G(r) Neutrons""" else ylegend = "G(r) Neutrons" endif elseif (nleg .eq. 3) then if (idl .eq. 0) then ylegend = """G(r) Neutrons - smoothed""" else ylegend = "G(r) Neutrons - smoothed" endif elseif (nleg .eq. 4) then if (idl .eq. 0) then ylegend = """g(r) X-rays""" else ylegend = "g(r) X-rays" endif elseif (nleg .eq. 5) then if (idl .eq. 0) then ylegend = """g(r) X-rays - smoothed""" else ylegend = "g(r) X-rays - smoothed" endif elseif (nleg .eq. 6) then if (idl .eq. 0) then ylegend = """G(r) X-rays""" else ylegend = "G(r) X-rays" endif elseif (nleg .eq. 7) then if (idl .eq. 0) then ylegend = """G(r) X-rays - smoothed""" else ylegend = "G(r) X-rays - smoothed" endif elseif (nleg .ge. 8) then DCL=8 done=.false. do DAL=1, snp do DBL=1, snp if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""g\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="g(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""g\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="g(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""G\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="G(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""G\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="G(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""dn\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="dn(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 enddo if(done) exit enddo if (snp .eq. 2) then if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(r)""" else ylegend="BT[NN](r)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(r) - smoothed""" else ylegend="BT[NN](r) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(r)""" else ylegend="BT[NC](r)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(r) - smoothed""" else ylegend="BT[NC](r) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(r)""" else ylegend="BT[CC](r)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(r) - smoothed""" else ylegend="BT[CC](r) - smoothed" endif endif DCL=DCL+1 endif endif else if (job.eq.IDSQ .or. job.eq.IDSK) then if (nleg .eq. 0) then if (idl .eq. 0) then ylegend = """S(q)[total] Neutrons""" else ylegend = "S(q)[total] Neutrons" endif elseif (nleg .eq. 1) then if (idl .eq. 0) then ylegend = """S(q) Neutrons - smoothed""" else ylegend = "S(q) Neutrons - smoothed" endif elseif (nleg .eq. 2) then if (idl .eq. 0) then ylegend = """Q(q)[total] Neutrons""" else ylegend = "Q(q)[total] Neutrons" endif elseif (nleg .eq. 3) then if (idl .eq. 0) then ylegend = """Q(q)[total] Neutrons - smoothed""" else ylegend = "Q(q)[total] Neutrons - smoothed" endif elseif (nleg .eq. 4) then if (idl .eq. 0) then ylegend = """S(q)[total] X-rays""" else ylegend = "S(q)[total] X-rays" endif elseif (nleg .eq. 5) then if (idl .eq. 0) then ylegend = """S(q) X-rays - smoothed""" else ylegend = "S(q) X-rays - smoothed" endif elseif (nleg .eq. 6) then if (idl .eq. 0) then ylegend = """Q(q)[total] X-rays""" else ylegend = "Q(q)[total] X-rays" endif elseif (nleg .eq. 7) then if (idl .eq. 0) then ylegend = """Q(q)[total] X-rays - smoothed""" else ylegend = "Q(q)[total] X-rays - smoothed" endif elseif (nleg .ge. 8) then DCL=8 done=.false. do DAL=1, snp do DBL=1, snp if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""AL\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="AL (q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""AL\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="AL (q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 enddo if(done) exit enddo do DAL=1, snp do DBL=1, snp if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""FZ\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="FZ N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""FZ\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="FZ N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 enddo if(done) exit enddo if (snp .eq. 2) then if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(q)""" else ylegend="BT[NN](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(q) - smoothed""" else ylegend="BT[NN](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(q)""" else ylegend="BT[NC](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(q) - smoothed""" else ylegend="BT[NC](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(q)""" else ylegend="BT[CC](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(q) - smoothed""" else ylegend="BT[CC](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sZZ\N(q)""" else ylegend="BT[ZZ](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sZZ\N(q) - smoothed""" else ylegend="BT[ZZ](q) - smoothed" endif endif DCL=DCL+1 endif endif else if (job .eq. IDBD) then DCL = 0 do DAL=1, snp do DBL=1, snp if (nleg .eq. DCL) then if (idl .eq. 0) then ylegend = """% Dij ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" done=.true. exit else ylegend = "% Dij ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" done=.true. exit endif endif DCL=DCL+1 enddo enddo else if (job .eq. IDAN) then DDL = 0 do DAL=1, snp do DBL=1, snp do DCL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Angle ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"]""" else ylegend = "% Angle ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"]" endif endif DDL=DDL+1 enddo enddo enddo do DAL=1, snp do DBL=1, snp do DCL=1, snp do DEL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Dihedral ["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-"//TL(DBL)(1:LEN_TRIM(TL(DBL)))// & "-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"-"//TL(DEL)(1:LEN_TRIM(TL(DEL)))//"]""" else ylegend = "% Dihedral ["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-"//TL(DBL)(1:LEN_TRIM(TL(DBL)))// & "-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"-"//TL(DEL)(1:LEN_TRIM(TL(DEL)))//"]" endif endif DDL=DDL+1 enddo enddo enddo enddo else if (job .eq. IDRI) then if (nleg.eq.0 .or. nleg.eq.4 .or. nleg.eq.8 .or. nleg.eq.12 .or. nleg.eq.16) then if (idl .eq. 0) then ylegend= """R\sc\N(\f{Times-Italic}n\f{})""" else ylegend= "Rc(n)" endif elseif (nleg.eq.1 .or. nleg.eq.5 .or. nleg.eq.9 .or. nleg.eq.13 .or. nleg.eq.17) then if (idl .eq. 0) then ylegend= """P\sn\N(\f{Times-Italic}n\f{})""" else ylegend= "Pn(n)" endif elseif (nleg.eq.2 .or. nleg.eq.6 .or. nleg.eq.10 .or. nleg.eq.14 .or. nleg.eq.18) then if (idl .eq. 0) then ylegend= """P\smax\N(\f{Times-Italic}n\f{})""" else ylegend= "Pmax(n)" endif elseif (nleg.eq.3 .or. nleg.eq.7 .or. nleg.eq.11 .or. nleg.eq.15 .or. nleg.eq.19) then if (idl .eq. 0) then ylegend= """P\smin\N(\f{Times-Italic}n\f{})""" else ylegend= "Pmin(n)" endif endif elseif (job .eq. IDCH) then if (nleg.eq.0) then if (idl .eq. 0) then ylegend= """C\sc\N(\f{Times-Italic}n\f{})[All]""" else ylegend= "Cc(n)[All]" endif else DDL = 1 do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """C\sc\N(\f{Times-Italic}n\f{})["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"]""" else ylegend= "Cc(n)["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"]" endif endif DDL=DDL+1 enddo endif elseif (job .eq. IDSP) then ! Nothing to be done here else DDL = 0 do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD nac ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD nac ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [x]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [x]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [y]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [y]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [z]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [z]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xy]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xy]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [yz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [yz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [x/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [x/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [y/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [y/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [z/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [z/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xy/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xy/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [yz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [yz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (x) [\cE\C\S2\N]""" else ylegend= "Correction (x) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (y) [\cE\C\S2\N]""" else ylegend= "Correction (y) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (z) [\cE\C\S2\N]""" else ylegend= "Correction (z) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (x) [ms\S-1\N]""" else ylegend= "Drift (x) m/s" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (y) [ms\S-1\N]""" else ylegend= "Drift (y) (m/s)" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (z) [ms\S-1\N]""" else ylegend= "Drift (z) (m/s)" endif endif endif END FUNCTION CHARACTER (LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc INTEGER :: il CHARACTER (LEN=6), DIMENSION(5) :: tpsunit = (/'t [fs]', 't [ps]', 't [ns]', 't [us]', 't [ms]' /) INTERFACE CHARACTER (LEN=7) FUNCTION getunit() END FUNCTION END INTERFACE xlegend = '' if (idl .eq. 0) then if (job.eq.IDGR .or. job.eq.IDGRFFT) then xlegend = "r[\cE\C]""" elseif (job.eq.IDSQ .or. job.eq.IDSK .or. job.eq.IDSKT) then xlegend = "q[\cE\C\S-1\N]""" elseif (job .eq. IDBD) then xlegend = "Dij[\cE\C\]""" elseif (job .eq. IDAN) then if (nleg .lt. snp*snp*snp) then xlegend = "Angles[\c:\C]""" else xlegend = "Dihedrals[\c:\C]""" endif elseif (job .eq. IDRI) then xlegend = "Size \f{Times-Italic}n\f{} of the ring [total number of nodes]""" elseif (job .eq. IDCH) then xlegend = "Size \f{Times-Italic}n\f{} of the chain [total number of nodes]""" elseif (job .eq. IDSP) then xlegend = "Q\sl\N""" else il = AnINT(cdc) if (il .eq. 4) then xlegend = "\f{12}m\f{}""" else xlegend = tpsunit(il)//"""" endif endif else if (job.eq.IDGR .or. job.eq.IDGRFFT) then xlegend = "r[Ã…]" elseif (job.eq.IDSQ .or. job.eq.IDSK .or. job.eq.IDSKT) then xlegend = "q[Ã…-1]" elseif (job .eq. IDBD) then xlegend = "Dij[Ã…]" elseif (job .eq. IDAN) then if (nleg .lt. snp*snp*snp) then xlegend = "Angles[°]" else xlegend = "Dihedrals[°]" endif elseif (job .eq. IDRI) then xlegend = "Size n of the ring [total number of nodes]" elseif (job .eq. IDCH) then xlegend = "Size n of the chain [total number of nodes]" elseif (job .eq. IDSP) then xlegend = "Ql" else il = AnINT(cdc) xlegend = tpsunit(il) endif endif END FUNCTION SUBROUTINE prep_file (scf, sfi, snp, tfile, & scalex, scaley, mdc, rdc, idc) BIND (C,NAME='prep_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, rdc, snp, tfile, idc INTEGER (KIND=c_int), INTENT(IN) :: scalex, scaley CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfi CHARACTER (LEN=scf) :: sfile REAL (KIND=c_double), INTENT(IN) :: mdc CHARACTER (LEN=5) :: xaxis="xaxis", yaxis="yaxis" CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION END INTERFACE xlabel = xlegend(rdc, idc, tfile, mdc, snp) do i=1, scf sfile(i:i) = sfi(i) enddo open(unit=200, file=sfile, action="write", status='unknown') if (tfile .eq. 0) then write (200, 001) write (200, 002) xaxis, xlabel write (200, 003) xaxis if (scalex .eq. 1) write (200, 016) write (200, 004) xaxis, 1.0 write (200, 005) xaxis, 0.5 write (200, 007) xaxis write (200, 008) xaxis write (200, 003) yaxis if (scaley .eq. 1) write (200, 017) write (200, 004) yaxis, 1.0 write (200, 005) yaxis, 0.5 write (200, 007) yaxis write (200, 008) yaxis write (200, 009) write (200, 010) endif 001 FORMAT ("@with g0") 002 FORMAT ("@ ",A5," label """,A65) 003 FORMAT ("@ ",A5," tick on") 004 FORMAT ("@ ",A5," tick major size ",f8.6) 005 FORMAT ("@ ",A5," tick minor size ",f8.6) 007 FORMAT ("@ ",A5," ticklabel on") 008 FORMAT ("@ ",A5," ticklabel char size 0.800000") 009 FORMAT ("@ legend on") 010 FORMAT ("@ legend box linestyle 0") 016 FORMAT ("@ xaxes scale Logarithmic") 017 FORMAT ("@ yaxes scale Logarithmic") END SUBROUTINE SUBROUTINE append_to_file (ndata, xdata, ydata, & mdc, tdata, rdc, idc, snp, & tfile, nfile, afile, lcname, cstring) BIND (C,NAME='append_to_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: rdc, idc, snp INTEGER (KIND=c_int), INTENT(IN) :: ndata INTEGER (KIND=c_int), INTENT(IN) :: tfile, tdata INTEGER (KIND=c_int), INTENT(IN) :: nfile, afile, lcname CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: cstring CHARACTER (LEN=lcname) :: cname INTEGER :: WA INTEGER :: start, step REAL (KIND=c_double), INTENT(IN) :: mdc REAL (KIND=c_double), DIMENSION(ndata), INTENT(IN) :: xdata, ydata CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION END INTERFACE do i=1, lcname cname(i:i) = cstring(i) enddo xlabel = xlegend(rdc, idc, tfile, mdc, snp) step=1 start=1 if (rdc .eq. IDRI) start=3 if (rdc .eq. IDCH) start=2 if (rdc .eq. IDSP) then start=2 step=1 endif if (tfile .eq. 0) then call CHARINT(Nom, nfile) write (200, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (200, *) "@s",Nom(2:LEN_TRIM(Nom))," legend """, cname, """" if (tdata .eq. 1) then write (200, *) "@s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (200, 019) else write (200, 013) endif else write (200, 015) xlabel, cname endif do WA=start, ndata, step write (200, 014) xdata(WA), ydata(WA) enddo write (200, *) if (nfile .eq. afile-1) close(200) 013 FORMAT ("@type xy") 014 FORMAT (f20.10,3x,f20.10) 015 FORMAT ("# ",A65," ",A36) 019 FORMAT ("@type bar") END SUBROUTINE SUBROUTINE save_to_file (scf, sfi, & ndata, xdata, ydata, & scalex, scaley, tdata, & mdc, rdc, idc, snp, tfile, lcname, cstring) BIND (C,NAME='save_to_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, rdc, idc, snp, tfile INTEGER (KIND=c_int), INTENT(IN) :: ndata, scalex, scaley, tdata, lcname CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: cstring CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfi CHARACTER (LEN=scf) :: sfile CHARACTER (LEN=lcname) :: cname INTEGER :: step, start REAL (KIND=c_double), INTENT(IN) :: mdc REAL (KIND=c_double), DIMENSION(ndata), INTENT(IN) :: xdata, ydata INTEGER :: WA, WB CHARACTER (LEN=5) :: xaxis="xaxis", yaxis="yaxis" CHARACTER (LEN=65) :: xlabel CHARACTER (LEN=36) :: ylabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION CHARACTER (LEN=36) FUNCTION ylegend (job, nleg, idl, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp END FUNCTION END INTERFACE ylabel = ylegend(rdc, idc, tfile, snp) do i=1, lcname cname(i:i) = cstring(i) enddo xlabel = xlegend(rdc, idc, tfile, mdc, snp) start=1 step=1 if (rdc .eq. IDRI) start=3 if (rdc .eq. IDCH) start=2 if (rdc .eq. IDSP) then start=2 step=1 endif do i=1, scf sfile(i:i) = sfi(i) enddo open(unit=100, file=sfile, action="write", status='unknown') if (tfile .eq. 0) then write (100, 001) write (100, 002) xaxis, xlabel write (100, 003) xaxis if (scalex .eq. 1) write (100, 016) write (100, 004) xaxis, 1.0 write (100, 005) xaxis, 0.5 write (100, 007) xaxis write (100, 008) xaxis write (100, 002) yaxis, ylabel write (100, 006) yaxis, cname write (100, 003) yaxis if (scaley .eq. 1) write (100, 017) write (100, 004) yaxis, 1.0 write (100, 005) yaxis, 0.5 write (100, 007) yaxis write (100, 008) yaxis write (100, 009) write (100, 010) if (rdc.eq.IDRI .or. rdc.eq.IDCH) then if (tdata .eq. 1) then WB=0 do WA=start, ndata if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) call CHARINT(Nom2, WA) write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," legend ""t",Nom2(2:LEN_TRIM(Nom2)),"""" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," symbol fill pattern 14" WB=WB+1 endif enddo WB=0 do WA=start, ndata if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) write (100, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (100, 019) write (100, 018) WA, ydata(WA) WB=WB+1 endif enddo else write (100, 011) cname write (100, 012) write (100, 013) do WA=start, ndata if (ydata(WA) .ne. 0.0) write (100, 018) WA, ydata(WA) enddo endif elseif (rdc .eq. IDSP) then if (tdata .eq. 1) then WB=0 do WA=start, ndata, step if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) call CHARINT(Nom2, WA-1) write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," legend ""t",Nom2(2:LEN_TRIM(Nom2)),"""" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," symbol fill pattern 14" WB=WB+1 endif enddo WB=0 do WA=start, ndata, step if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) write (100, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (100, 019) write (100, 018) WA, ydata(WA) WB=WB+1 endif enddo else write (100, 011) cname write (100, 012) write (100, 013) ! Check this do WA=start, ndata, 2 write (100, 018) WA, ydata(WA) enddo endif elseif (rdc.eq.IDSQ .or. rdc.eq.IDSK) then write (100, 011) cname write (100, 012) write (100, 013) do WA=start, ndata write (100, 014) xdata(WA), ydata(WA) enddo else if (tdata .eq. 0) then write (100, 011) cname write (100, 012) write (100, 013) else write (100, 011) cname write (100, 012) write (100, 019) endif do WA=start, ndata write (100, 014) xdata(WA), ydata(WA) enddo endif else write (100, 015) xlabel, cname do WA=start, ndata, step write (100, 014) xdata(WA), ydata(WA) enddo endif close(100) 001 FORMAT ("@with g0") 002 FORMAT ("@ ",A5," label """,A65) 003 FORMAT ("@ ",A5," tick on") 004 FORMAT ("@ ",A5," tick major size ",f8.6) 005 FORMAT ("@ ",A5," tick minor size ",f8.6) 006 FORMAT ("@ ",A5," label ",A36) 007 FORMAT ("@ ",A5," ticklabel on") 008 FORMAT ("@ ",A5," ticklabel char size 0.800000") 009 FORMAT ("@ legend on") 010 FORMAT ("@ legend box linestyle 0") 011 FORMAT ("@ s0 legend """,A50,"""") 012 FORMAT ("@target G0.S0") 013 FORMAT ("@type xy") 014 FORMAT (f20.10,3x,f20.10) 015 FORMAT ("# ",A65," ",A36) 016 FORMAT ("@ xaxes scale Logarithmic") 017 FORMAT ("@ yaxes scale Logarithmic") 018 FORMAT (i4,5x,f20.10) 019 FORMAT ("@type bar") END SUBROUTINE atomes_1.3.1/src/fortran/chemistry.F900000664000175000017500000000620515212624223017241 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file chemistry.F90 !! @short Basic chemistry analysis !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION chemistry () BIND (C,NAME='chemistry_') ! ! Density, number density, concentrations, empirical formula ! USE PARAMETERS IMPLICIT NONE INTEGER :: REF1, REF2, REF3 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX_FORM ! Formula index INTEGER, DIMENSION(:), ALLOCATABLE :: REFP LOGICAL :: UNCLEAR, UNFRAC ! ! Determination of the empirical formula ! Détermination de la formule brute ! if (allocated(INDEX_FORM)) deallocate(INDEX_FORM) allocate(INDEX_FORM(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: chemistry"//CHAR(0), "Table: INDEX_FORM"//CHAR(0)) chemistry = 0 goto 001 endif if (allocated(REFP)) deallocate(REFP) allocate(REFP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: chemistry"//CHAR(0), "Table: REFP"//CHAR(0)) chemistry = 0 goto 001 endif do i=1, NSP REFP(i)= NBSPBS(i) enddo do i=1, NSP if (i .eq. 1)then REF1=NBSPBS(i) REF2=i else REF3=REF1 REF1=min(NBSPBS(i),REF1) if (REF3 .ne. REF1) REF2=i endif enddo UNCLEAR=.true. UNFRAC=.false. l=1 do while (UNCLEAR) UNCLEAR=.false. do i=1, NSP if (i .ne. REF2) then if (.not.UNFRAC) then m=1 do while (mod(m*REFP(i),REF1).ne.0 .and. m.lt.REF1) m=m+1 enddo if (mod(m*REFP(i),REF1) .eq. 0) then INDEX_FORM(i)=m*REFP(i)/REF1 UNCLEAR=.true. else INDEX_FORM(i)=NBSPBS(i) UNCLEAR=.true. UNFRAC=.true. endif else INDEX_FORM(i)=NBSPBS(i) endif endif enddo if (UNFRAC) then INDEX_FORM(REF2)=NBSPBS(REF2) else INDEX_FORM(REF2)=REFP(REF2)/NBSPBS(REF2) endif if (UNCLEAR) then UNCLEAR=.false. do i=1, NSP-1 do j=i+1, NSP y=dble(INDEX_FORM(i))/dble(INDEX_FORM(j)) z=dble(NBSPBS(i))/dble(NBSPBS(j)) if (y .ne. z) UNCLEAR=.true. enddo enddo if (UNCLEAR) then REFP=REFP/l l=l+1 REFP=REFP*l endif endif enddo ! To send_chem_info_ call send_chem_info (INDEX_FORM) chemistry = 1 001 continue if (allocated(INDEX_FORM)) deallocate(INDEX_FORM) if (allocated(REFP)) deallocate(REFP) END FUNCTION atomes_1.3.1/src/fortran/c3d.F900000664000175000017500000000701515212624223015703 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file c3d.F90 !! @short Write Chem3D atomic coordinates !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_c3d (c3d_f, lc3d) BIND (C,NAME='read_c3d_') ! ! Lecture of atom types and coordinates - C3D files ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lc3d CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: c3d_f CHARACTER (LEN=lc3d) :: c3d_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lc3d c3d_file(i:i) = c3d_f(i) enddo read_c3d=1 inquire (file=c3d_file, exist=isok) if (isok) then open (unit=20, file=c3d_file, action='read', status='old', err=001) NS=0 read (20, *, err=002) NA NS = TEST_LENGTH(20, NA+1) if (NS .eq. 1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_c3d"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_c3d"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS read (20, *, err=002) do j=1, NA read (20, *, err=002) TAB_OF_TYPE(j), k, FULLPOS(j,1,i), FULLPOS(j,2,i), FULLPOS(j,3,i) enddo enddo read_c3d=0 else read_c3d=2 endif 002 continue close (20) 001 continue endif END FUNCTION INTEGER (KIND=c_int) FUNCTION write_c3d (c3d_f, lc3d, fc3d, tc3d) BIND (C,NAME='write_c3d_') ! ! output of atom types and coordinates - Chem3D files ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: lc3d, fc3d, tc3d CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: c3d_f DOUBLE PRECISION, DIMENSION(3) :: savep CHARACTER (LEN=lc3d) :: c3d_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lc3d c3d_file(i:i) = c3d_f(i) enddo write_c3d=1 open (unit=20, file=c3d_file, action='write', status='unknown', err=001) do i=1, NS write (20, '(i10)') NA write (20, *) do j=1, NA if (fc3d .eq. 1) then if (NCELLS .gt. 1) then NBOX => THE_BOX(i) else NBOX => THE_BOX(1) endif savep = MATMUL(FULLPOS(j,:,i),NBOX%carttofrac) else savep = FULLPOS(j,:,i) if (tc3d .eq. 1) then savep(:) = savep(:)/ANGTOBOHR endif endif write (20, '(a2,3x,i2,3(3x,f15.10))', err=002) TL(LOT(j)), 0, savep enddo enddo write_c3d=0 002 continue close (20) 001 continue END FUNCTION atomes_1.3.1/src/fortran/lattice.F900000664000175000017500000003371515212624223016665 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file lattice.F90 !! @short Lattice properties !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION add_cells (NP, NPS, sizec) BIND (C,NAME='add_cells_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NP, NPS INTEGER (KIND=c_int), INTENT(IN), DIMENSION(3) :: sizec INTEGER :: PIA, PIB, PIC, PID, PIE, PIF DOUBLE PRECISION, DIMENSION(3) :: lshift INTEGER, DIMENSION(:), ALLOCATABLE :: NEWLOT DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: NEWPOS INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE PIA = (sizec(1)+1)*(sizec(2)+1)*(sizec(3)+1) PIB = NP * PIA if (allocated(NEWPOS)) deallocate(NEWPOS) allocate(NEWPOS(PIB,3,NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: add_cells"//CHAR(0), "Table: NEWPOS"//CHAR(0)) add_cells=0 goto 001 endif if (allocated(NEWLOT)) deallocate(NEWLOT) allocate(NEWLOT(PIB), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: add_cells"//CHAR(0), "Table: NEWLOT"//CHAR(0)) add_cells=0 goto 001 endif do PIA=1, NPS PIB=0 do PID=1, sizec(1)+1 do PIE=1, sizec(2)+1 do PIF=1, sizec(3)+1 lshift(1)=(PID-1)*THE_BOX(1)%lvect(1,1) + (PIE-1)*THE_BOX(1)%lvect(2,1) + (PIF-1)*THE_BOX(1)%lvect(3,1) lshift(2)=(PID-1)*THE_BOX(1)%lvect(1,2) + (PIE-1)*THE_BOX(1)%lvect(2,2) + (PIF-1)*THE_BOX(1)%lvect(3,2) lshift(3)=(PID-1)*THE_BOX(1)%lvect(1,3) + (PIE-1)*THE_BOX(1)%lvect(2,3) + (PIF-1)*THE_BOX(1)%lvect(3,3) do PIC=1, NP PIB=PIB+1 NEWPOS(PIB,:,PIA) = FULLPOS(PIC,:,PIA) + lshift(:) NEWLOT(PIB) = LOT(PIC) enddo enddo enddo enddo enddo add_cells=0 call init_data (PIB, NSP, NPS, 0) if (SEND_POS(PIB, NPS, NEWLOT, NEWPOS) .eq. 1) add_cells=1 001 continue if (allocated(NEWPOS)) deallocate(NEWPOS) if (allocated(NEWLOT)) deallocate(NEWLOT) END FUNCTION INTEGER (KIND=c_int) FUNCTION shift_box_center (NP, NPS, cshift, REF) BIND (C,NAME='shift_box_center_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NP, NPS, REF REAL (KIND=c_double), INTENT(IN), DIMENSION(3) :: cshift INTEGER :: PIB, PIC, PID DOUBLE PRECISION, DIMENSION(3,3) :: h_mat DOUBLE PRECISION, DIMENSION(3) :: TPO INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE h_mat(:,1) = THE_BOX(1)%lvect(1,:) h_mat(:,2) = THE_BOX(1)%lvect(2,:) h_mat(:,3) = THE_BOX(1)%lvect(3,:) do PIC=1, NPS do PIB=1, NP do PID=1, 3 FULLPOS(PIB,PID,PIC) = FULLPOS(PIB,PID,PIC) + cshift(PID) enddo TPO=MATMUL(THE_BOX(1)%lrecp, FULLPOS(PIB,:,PIC)) TPO=TPO-NINT(TPO/0.5) FULLPOS(PIB,:,PIC) = MATMUL(h_mat,TPO) !FULLPOS(PIB,:,PIC) = FULLPOS(PIB,:,PIC) + cshift(2) !FULLPOS(PIB,:,PIC) = FULLPOS(PIB,:,PIC) + cshift(3) enddo enddo if (REF .eq. 1) then shift_box_center = SEND_POS (NP, NPS, LOT, FULLPOS) else shift_box_center = 1 endif END FUNCTION DOUBLE PRECISION FUNCTION f_dot_product (a, b) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b INTEGER :: DIM f_dot_product = 0.0d0 do DIM=1, 3 f_dot_product = f_dot_product + a(DIM)*b(DIM) enddo END FUNCTION SUBROUTINE f_cross_product (a, b, c) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: c c(:)=0.0d0 c(1) = a(2)*b(3) - a(3)*b(2) c(2) = a(3)*b(1) - a(1)*b(3) c(3) = a(1)*b(2) - a(2)*b(1) END SUBROUTINE INTEGER (KIND=c_int) FUNCTION lattice (totl, lid, vectors, vmod, angles, lat, cfrac, apbc) BIND (C,NAME='lattice_') ! ! Compute lattice angles from lattice vectors ! Lattice vector modules ! Lattice volume ! Reciprocal lattice parameters ! USE PARAMETERS IMPLICIT NONE REAL (KIND=c_double), INTENT(IN), DIMENSION(3,3) :: vectors REAL (KIND=c_double), INTENT(IN), DIMENSION(3) :: vmod REAL (KIND=c_double), INTENT(INOUT), DIMENSION(3) :: angles INTEGER (KIND=c_int), INTENT(IN) :: totl, lid, lat, cfrac, apbc DOUBLE PRECISION :: ALPHA, BETA, GAMA ! Lattice Angles DOUBLE PRECISION :: CALPHA, SALPHA, CBETA, SBETA, CGAMA, SGAMA ! Cosinus and Sinus DOUBLE PRECISION, DIMENSION(3) :: TMPLA INTERFACE DOUBLE PRECISION FUNCTION f_dot_product (a, b) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b END FUNCTION SUBROUTINE f_cross_product (a, b, c) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: c END SUBROUTINE END INTERFACE ! Transition from C/Gtk to Fortran90 ! lattice = 0 if (lid .eq. 0) then if (allocated(THE_BOX)) deallocate(THE_BOX) allocate(THE_BOX(totl), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: lattice_"//CHAR(0), "Type: THE_BOX"//CHAR(0)) goto 001 endif NCELLS = totl endif NBOX => THE_BOX(lid+1) NBOX%GLASS=.false. NBOX%CUBIC=.false. if (lat .gt. 0) then do i=1, 3 do j=1, 3 NBOX%lvect(j,i) = vectors(i,j) enddo enddo NBOX%modv(1) = vmod(1) NBOX%modv(2) = vmod(2) NBOX%modv(3) = vmod(3) ALPHA = angles(1) BETA = angles(2) GAMA = angles(3) if (lat .eq. 1) then if (ALPHA.eq.90.0 .and. BETA.eq.90.0 .and. GAMA.eq.90.0) then NBOX%GLASS=.true. if (NBOX%modv(1).eq.NBOX%modv(2) .and. NBOX%modv(2).eq.NBOX%modv(3)) NBOX%CUBIC=.true. endif if (ALPHA.eq.90.0) then ALPHA = PI/2.0d0 SALPHA = 1.0d0 CALPHA = 0.0d0 else ALPHA = ALPHA*PI/180.0d0 SALPHA = sin(ALPHA) CALPHA = cos(ALPHA) endif if (BETA.eq.90.0) then BETA = PI/2.0d0 SBETA = 1.0d0 CBETA = 0.0d0 else BETA = BETA*PI/180.0d0 SBETA = sin(BETA) CBETA = cos(BETA) endif if (GAMA.eq.90.0) then GAMA = PI/2.0d0 SGAMA = 1.0d0 CGAMA = 0.0d0 else GAMA = GAMA*PI/180.0d0 SGAMA = sin(GAMA) CGAMA = cos(GAMA) endif NBOX%lvect(1,1) = NBOX%modv(1) NBOX%lvect(1,2) = 0.0d0 NBOX%lvect(1,3) = 0.0d0 NBOX%lvect(2,1) = NBOX%modv(2)*CGAMA NBOX%lvect(2,2) = NBOX%modv(2)*SGAMA NBOX%lvect(2,3) = 0.d0 NBOX%lvect(3,1) = NBOX%modv(3)*CBETA LTEMP = (CALPHA - CBETA*CGAMA)/SGAMA NBOX%lvect(3,2) = NBOX%modv(3)*LTEMP NBOX%lvect(3,3) = NBOX%modv(3)*sqrt(SBETA*SBETA - LTEMP*LTEMP) else NBOX%modv(1)=sqrt(NBOX%lvect(1,1)**2+NBOX%lvect(1,2)**2+NBOX%lvect(1,3)**2) NBOX%modv(2)=sqrt(NBOX%lvect(2,1)**2+NBOX%lvect(2,2)**2+NBOX%lvect(2,3)**2) NBOX%modv(3)=sqrt(NBOX%lvect(3,1)**2+NBOX%lvect(3,2)**2+NBOX%lvect(3,3)**2) ALPHA= (NBOX%lvect(3,1)*NBOX%lvect(2,1)+ & NBOX%lvect(3,2)*NBOX%lvect(2,2)+ & NBOX%lvect(3,3)*NBOX%lvect(2,3))/(NBOX%modv(2)*NBOX%modv(3)) BETA = (NBOX%lvect(1,1)*NBOX%lvect(3,1)+ & NBOX%lvect(1,2)*NBOX%lvect(3,2)+ & NBOX%lvect(1,3)*NBOX%lvect(3,3))/(NBOX%modv(1)*NBOX%modv(3)) GAMA = (NBOX%lvect(1,1)*NBOX%lvect(2,1)+ & NBOX%lvect(1,2)*NBOX%lvect(2,2)+ & NBOX%lvect(1,3)*NBOX%lvect(2,3))/(NBOX%modv(1)*NBOX%modv(2)) if (ALPHA.eq.0.0d0 .and. BETA.eq.0.0d0 .and. GAMA.eq.0.0d0) then NBOX%GLASS=.true. if (NBOX%modv(1).eq.NBOX%modv(2) .and. NBOX%modv(2).eq.NBOX%modv(3)) NBOX%CUBIC=.true. endif if (ALPHA.eq.0.0d0) then angles(1) = 90.0d0 ALPHA = PI/2.0d0 SALPHA = 1.0d0 CALPHA = 0.0d0 else ALPHA = acos(ALPHA) angles(1) = ALPHA*180.0d0/PI SALPHA = sin(ALPHA) CALPHA = cos(ALPHA) endif if (BETA.eq.0.0d0) then angles(2) = 90.0d0 BETA = PI/2.0d0 SBETA = 1.0d0 CBETA = 0.0d0 else BETA = acos(BETA) angles(2) = BETA*180.0d0/PI SBETA = sin(BETA) CBETA = cos(BETA) endif if (GAMA.eq.0.0d0) then angles(3) = 90.0d0 GAMA = PI/2.0d0 SGAMA = 1.0d0 CGAMA = 0.0d0 else GAMA = acos(GAMA) angles(3) = GAMA*180.0d0/PI SGAMA = sin(GAMA) CGAMA = cos(GAMA) endif endif if (ALPHA.eq.0.0d0 .and. BETA.eq.0.0d0 .and. GAMA.eq.0.0d0) then ! If some problems display a GTK error message. call show_error ("Problem with the simulation box parameters"//CHAR(0), & "Computed angles are equal to 0.0d0"//CHAR(0), "Function: lattice"//CHAR(0)) goto 001 endif ! write (*,*) NBOX%lvect(1,1), NBOX%lvect(1,2), NBOX%lvect(1,3) ! write (*,*) NBOX%lvect(2,1), NBOX%lvect(2,2), NBOX%lvect(2,3) ! write (*,*) NBOX%lvect(3,1), NBOX%lvect(3,2), NBOX%lvect(3,3) ! write (*,*) NBOX%modv(1), NBOX%modv(2), NBOX%modv(3) ! write (*,*) ALPHA*180/PI, BETA*180/PI, GAMA*180/PI NBOX%minv=min(NBOX%modv(1),NBOX%modv(2)) NBOX%minv=min(NBOX%minv,NBOX%modv(3)) NBOX%maxv=max(NBOX%modv(1),NBOX%modv(2)) NBOX%maxv=max(NBOX%maxv,NBOX%modv(3)) NBOX%VOLUME=(NBOX%lvect(1,2)*NBOX%lvect(2,3)-NBOX%lvect(1,3)*NBOX%lvect(2,2))*NBOX%lvect(3,1) & +(NBOX%lvect(1,3)*NBOX%lvect(2,1)-NBOX%lvect(1,1)*NBOX%lvect(2,3))*NBOX%lvect(3,2) & +(NBOX%lvect(1,1)*NBOX%lvect(2,2)-NBOX%lvect(1,2)*NBOX%lvect(2,1))*NBOX%lvect(3,3) NBOX%VOLUME = abs(NBOX%VOLUME) ! Reciprocal lattice parameters ! call f_cross_product (NBOX%lvect(2,:), NBOX%lvect(3,:), TMPLA) NBOX%lrecp(1,:) = TMPLA / f_dot_product(NBOX%lvect(1,:), TMPLA) call f_cross_product (NBOX%lvect(3,:), NBOX%lvect(1,:), TMPLA) NBOX%lrecp(2,:) = TMPLA / f_dot_product(NBOX%lvect(2,:), TMPLA) call f_cross_product (NBOX%lvect(1,:), NBOX%lvect(2,:), TMPLA) NBOX%lrecp(3,:) = TMPLA / f_dot_product(NBOX%lvect(3,:), TMPLA) ! modules of the reciprocal lattice vectors NBOX%modr(1)=sqrt(NBOX%lrecp(1,1)**2+NBOX%lrecp(1,2)**2+NBOX%lrecp(1,3)**2) NBOX%modr(2)=sqrt(NBOX%lrecp(2,1)**2+NBOX%lrecp(2,2)**2+NBOX%lrecp(2,3)**2) NBOX%modr(3)=sqrt(NBOX%lrecp(3,1)**2+NBOX%lrecp(3,2)**2+NBOX%lrecp(3,3)**2) NBOX%modr(:) = 2.0d0*PI*NBOX%modr(:) NBOX%minr=min(NBOX%modr(1),NBOX%modr(2)) NBOX%minr=min(NBOX%minr,NBOX%modr(3)) NBOX%maxr=max(NBOX%modr(1),NBOX%modr(2)) NBOX%maxr=max(NBOX%maxr,NBOX%modr(3)) ! Creation of the matrix to convert fractional to cartesian coordinates z=sqrt(abs(1 - CALPHA*CALPHA & - CBETA*CBETA & - CGAMA*CGAMA & + 2*CALPHA*CBETA*CGAMA)) z=z/SGAMA i = 0 if (cfrac > 0) i = cfrac - 1 NBOX%fractocart(1,1)=NBOX%modv(1)/(2.0**(i)) NBOX%fractocart(1,2)=0.0d0 NBOX%fractocart(1,3)=0.0d0 NBOX%fractocart(2,1)=NBOX%modv(2)*CGAMA/(2.0**(i)) NBOX%fractocart(2,2)=NBOX%modv(2)*SGAMA/(2.0**(i)) NBOX%fractocart(2,3)=0.0d0 NBOX%fractocart(3,1)=NBOX%modv(3)*CBETA/(2.0**(i)) NBOX%fractocart(3,2)=NBOX%modv(3)*((CALPHA-CBETA*CGAMA)/SGAMA)/(2.0**(i)) NBOX%fractocart(3,3)=NBOX%modv(3)*z/(2.0**(i)) !write (6, *) !write (6, '("Frac to cart matrix in lattice:")') !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(1,1), NBOX%fractocart(1,2), NBOX%fractocart(1,3) !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(2,1), NBOX%fractocart(2,2), NBOX%fractocart(2,3) !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(3,1), NBOX%fractocart(3,2), NBOX%fractocart(3,3) !write (6, *) ! Creation of the matrix to convert cartesian to fractional coordinates NBOX%carttofrac(1,1)=1.0d0/NBOX%fractocart(1,1) NBOX%carttofrac(1,2)=0.0d0 NBOX%carttofrac(1,3)=0.0d0 NBOX%carttofrac(2,1)=-CGAMA/(SGAMA*(NBOX%modv(1)/(2.0**(i)))) NBOX%carttofrac(2,2)=1.0d0/NBOX%fractocart(2,2) NBOX%carttofrac(2,3)=0.0d0 NBOX%carttofrac(3,1)=((NBOX%modv(2)/(2.0**(i)))*(NBOX%modv(3)/(2.0**(i))))/NBOX%VOLUME NBOX%carttofrac(3,1)=NBOX%carttofrac(3,1) * (CALPHA*CGAMA - CBETA)/SALPHA NBOX%carttofrac(3,2)=((NBOX%modv(1)/(2.0**(i)))*(NBOX%modv(3)/(2.0**(i))))/NBOX%VOLUME NBOX%carttofrac(3,2)=NBOX%carttofrac(3,2) * (CBETA*CGAMA - CALPHA)/SGAMA NBOX%carttofrac(3,3)=1.0d0/NBOX%fractocart(3,3) if (apbc .eq. 1) then PBC=.true. else PBC=.false. NBOX%GLASS=.false. NBOX%CUBIC=.false. endif else NBOX%VOLUME=0.0d0 NBOX%minr=0.0d0 NBOX%modv(:)=0.0d0 NBOX%modr(:)=0.0d0 NBOX%lvect(:,:)=0.0d0 NBOX%lrecp(:,:)=0.0d0 NBOX%fractocart(:,:)=0.0d0 NBOX%GLASS=.false. NBOX%CUBIC=.false. PBC=.false. endif REAL_DENSITY=0.0d0 TOTAL_DENSITY=0.0d0 if (NBOX%VOLUME.ne.0.0) then do i=1, NSP REAL_DENSITY=REAL_DENSITY+NBSPBS(i)*MASS(i) enddo TOTAL_DENSITY = dble(NA)/NBOX%VOLUME REAL_DENSITY=REAL_DENSITY/AVOGADRO REAL_DENSITY=REAL_DENSITY/NBOX%VOLUME REAL_DENSITY=REAL_DENSITY*10.0d0 endif ! To lattice_info_ call lattice_info (lid, NBOX%VOLUME, REAL_DENSITY, & NBOX%lvect, NBOX%lrecp, NBOX%modv, angles, & NBOX%fractocart, NBOX%carttofrac) if (lid .eq. totl-1) then MBOX = 0.0d0 MEANVOL = 0.0d0 OVERALL_CUBIC = .true. do i=1, NCELLS MBOX = MBOX + THE_BOX(i)%minv MEANVOL = MEANVOL + THE_BOX(i)%VOLUME if (OVERALL_CUBIC .and. THE_BOX(i)%CUBIC) then OVERALL_CUBIC = .true. else OVERALL_CUBIC = .false. endif enddo MEANVOL = MEANVOL / NCELLS MBOX = MBOX / (2.0d0*NCELLS) endif lattice = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/molecules.F900000664000175000017500000002562715212624223017233 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file molecules.F90 !! @short Fragment(s) and molecule(s) analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ADD_MOL(this_mol, MOL_ID, STEP_ID) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: MOL_ID, STEP_ID INTEGER :: AAA TYPE (MOL), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_MOL"//CHAR(0), "Pointer: NEW"//CHAR(0)) ADD_MOL = .false. goto 001 endif NEW%MID = MOL_ID NEW%STEP = STEP_ID NEW%ATOMES = 0 allocate(NEW%BSP(NSP), STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_MOL"//CHAR(0), "TABLE: NEW%BSP"//CHAR(0)) ADD_MOL = .false. goto 001 endif nullify(NEW%FIRST_AT) do AAA=1, NSP NEW%BSP(AAA) = 0 enddo nullify(NEW%NEXT) NEW%PREV => this_mol this_mol%NEXT => NEW this_mol => NEW ADD_MOL = .true. 001 continue END FUNCTION LOGICAL FUNCTION ADD_ATO(this_mol, ATOM_ID) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: ATOM_ID TYPE (AT), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_ATO"//CHAR(0), "POINTER: NEW"//CHAR(0)) ADD_ATO = .false. goto 001 endif NEW%IND = ATOM_ID NEW%PREV => this_mol%ATOM this_mol%ATOM%NEXT => NEW this_mol%ATOM => NEW ADD_ATO=.true. 001 continue END FUNCTION RECURSIVE SUBROUTINE SETMOL (this_mol, toglin, stmb, molcount, the_step, the_atom, the_id) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(INOUT) :: molcount, stmb INTEGER, INTENT(IN) :: the_step, the_atom, the_id INTEGER, DIMENSION(NA), INTENT(INOUT) :: toglin INTEGER :: MC, MD INTERFACE LOGICAL FUNCTION ADD_ATO(this_mol, ATOM_ID) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: ATOM_ID END FUNCTION END INTERFACE molcount=molcount+1 toglin(the_atom) = the_id this_mol%ATOMES = this_mol%ATOMES + 1 this_mol%BSP(LOT(the_atom)) = this_mol%BSP(LOT(the_atom)) + 1 stmb = stmb + 1 if (this_mol%ATOMES > 1) then if (.not. ADD_ATO (this_mol, the_atom)) then molcount=-1 goto 001 endif else allocate(this_mol%FIRST_AT, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: SETMOL"//CHAR(0), "POINTER: this_mol%FIRST_AT"//CHAR(0)) molcount=-1 goto 001 endif !write (6, '("Adding first atom:: Mol= ",i4,", At= ",i4)') this_mol%MID, the_atom this_mol%FIRST_AT%IND = the_atom this_mol%ATOM => this_mol%FIRST_AT endif if (stmb .eq. NA) goto 002 if (molcount.eq.10000) goto 001 if (molcount.eq.-1) goto 001 do MC=1, CONTJ(the_atom, the_step) MD = VOISJ(MC,the_atom,the_step) if (toglin(MD).eq.0 .and. molcount.lt.10000) then call SETMOL (this_mol, toglin, stmb, molcount, the_step, VOISJ(MC,the_atom,the_step), the_id) endif if (stmb .eq. NA) goto 002 if (molcount.eq.10000) goto 001 if (molcount.eq.-1) goto 001 enddo 002 continue molcount=molcount-1 001 continue END SUBROUTINE SETMOL INTEGER (KIND=c_int) FUNCTION molecules (frag_and_mol, allbonds) BIND (C,NAME='molecules_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: frag_and_mol, allbonds INTEGER :: TOTMOL, MOLPS, MAXMOL INTEGER, DIMENSION(:), ALLOCATABLE :: ATMOL INTEGER, DIMENSION(:), ALLOCATABLE :: ATVS, MTMBS #ifdef OPENMP INTEGER :: NUMTH #endif INTERFACE LOGICAL FUNCTION ADD_MOL(this_mol, MOL_ID, STEP_ID) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: MOL_ID, STEP_ID END FUNCTION RECURSIVE SUBROUTINE SETMOL (this_mol, toglin, stmb, molcount, the_step, the_atom, the_id) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(INOUT) :: molcount, stmb INTEGER, INTENT(IN) :: the_step, the_atom, the_id INTEGER, DIMENSION(NA), INTENT(INOUT) :: toglin END SUBROUTINE END INTERFACE TYPE (AT), POINTER :: TMPAT TYPE (MOL), ALLOCATABLE, TARGET :: THEMOL TYPE (MOL), POINTER :: TMPMOL if (allocated(FULLPOS)) deallocate(FULLPOS) k = 0 do i=1, NS do j=1, NA if (CONTJ(j,i) .eq. 0) k = k + 1 enddo enddo MAXMOL = k + allbonds/2; if (allocated(THEMOL)) deallocate(THEMOL) allocate(THEMOL, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEMOL" ALC=.true. molecules = 0 goto 001 endif if (allocated(MTMBS)) deallocate(MTMBS) allocate(MTMBS(NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MTMBS" ALC=.true. molecules = 0 goto 001 endif if (frag_and_mol .eq. 1) then call allocate_mol_data () endif molecules = 1 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () if (NS.lt.NUMTH) NUMTH=NS !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, ERR, TOGL, THEMOL, TMPMOL, & !$OMP& TOTMOL, MOLCOUNTER, TMBS, ATMOL, TMPAT, ATVS) & !$OMP& SHARED(NUMTH, frag_and_mol, NS, NA, NSP, LOT, MTMBS, CONTJ, VOISJ, ALC, ALC_TAB) #endif if (allocated(TOGL)) deallocate(TOGL) allocate(TOGL(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TOGL" ALC=.true. molecules = 0 #ifdef OPENMP goto 005 #else goto 001 #endif endif nullify(TMPAT) #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS #ifdef OPENMP if (molecules .eq.0) goto 004 #endif allocate(TMPMOL, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TMPMOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif TOGL(:)=0 THEMOL%MID = 1 THEMOL%STEP = i THEMOL%ATOMES = 0 nullify(THEMOL%FIRST_AT) allocate(THEMOL%BSP(NSP), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEMOL%BSP" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif do j=1, NSP THEMOL%BSP(j) = 0 enddo nullify(THEMOL%NEXT) nullify(THEMOL%PREV) TMBS=0 TOTMOL = 0 MTMBS(i)=0 MOLCOUNTER=0 TMPMOL => THEMOL n = 1 002 continue do j=n, NA if (MOLCOUNTER.eq.0 .and. TOGL(j).eq.0) then TOTMOL = TOTMOL + 1 if (TOTMOL > 1) then if (.not.ADD_MOL(TMPMOL, MTMBS(i)+1, i)) then ALC_TAB="ADD_MOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif endif MTMBS(i) = MTMBS(i) + 1 call SETMOL (TMPMOL, TOGL, TMBS, MOLCOUNTER, i, j, TOTMOL) if (MOLCOUNTER .lt. 0) then ALC_TAB="SETMOL" ALC=.true. #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMBS.eq.NA) goto 003 ! The 10000 iterations break required because of F90 limitations if (MOLCOUNTER.eq.10000) goto 002 MOLCOUNTER = 0 n = j goto 002 else if (MOLCOUNTER.gt.0 .and.TOGL(j).eq.TOTMOL) then do l=1, CONTJ(j,i) m = VOISJ(l,j,i) if (TOGL(m).eq.0) then MOLCOUNTER = 0 call SETMOL (TMPMOL, TOGL, TMBS, MOLCOUNTER, i, VOISJ(l,j,i), TOTMOL) if (MOLCOUNTER .lt. 0) then ALC_TAB="SETMOL" ALC=.true. #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMBS.eq.NA) goto 003 if (MOLCOUNTER.eq.10000) goto 002 MOLCOUNTER = 1 endif enddo endif enddo if (TMBS .lt. NA) then MOLCOUNTER = 0 goto 002 endif 003 continue if (frag_and_mol .eq. 1) then TMPMOL => THEMOL call allocate_mol_for_step (i, MTMBS(i)) do j=1, MTMBS(i) allocate(ATMOL(TMPMOL%ATOMES), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATMOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMPMOL%ATOMES .gt. 1) then allocate(TMPAT, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TMPAT" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif TMPAT = TMPMOL%FIRST_AT do k=1, TMPMOL%ATOMES ATMOL(k) = TMPAT%IND if (k < TMPMOL%ATOMES) then TMPAT => TMPAT%NEXT deallocate (TMPAT%PREV) endif enddo deallocate (TMPAT) else ATMOL(1) = TMPMOL%FIRST_AT%IND deallocate (TMPMOL%FIRST_AT) endif call send_mol_details (TMPMOL%STEP, TMPMOL%MID, TMPMOL%ATOMES, NSP, TMPMOL%BSP, ATMOL) if (TMPMOL%ATOMES .gt. 1) then do l=1, TMPMOL%ATOMES m = ATMOL(l) n = CONTJ(m,TMPMOL%STEP) allocate(ATVS(n), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATVS" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif do o=1, n ATVS(o)= VOISJ(o,m,TMPMOL%STEP) enddo call send_mol_neighbors (TMPMOL%STEP, TMPMOL%MID, m, n, ATVS) deallocate(ATVS) enddo endif deallocate(ATMOL) if (j .lt. MTMBS(i)) TMPMOL => TMPMOL%NEXT enddo call setup_molecules (i) endif do while (TMPMOL%MID .gt. 1) TMPMOL => TMPMOL%PREV deallocate (TMPMOL%NEXT%BSP) deallocate (TMPMOL%NEXT) enddo deallocate (TMPMOL%BSP) call setup_fragments (i, TOGL) #ifdef OPENMP 004 continue #endif enddo #ifdef OPENMP !$OMP END DO NOWAIT 005 continue if (allocated(TOGL)) deallocate (TOGL) if (allocated(THEMOL)) deallocate(THEMOL) if (allocated(ATMOL)) deallocate(ATMOL) if (allocated(ATVS)) deallocate(ATVS) !$OMP END PARALLEL #else if (allocated(TOGL)) deallocate (TOGL) if (allocated(THEMOL)) deallocate(THEMOL) if (allocated(ATVS)) deallocate(ATVS) if (allocated(ATMOL)) deallocate(ATMOL) #endif MOLPS = 0 j = 0 do i=1, NS MOLPS = MOLPS + MTMBS(i) j = max(MTMBS(i), j) enddo call send_coord_opengl (2, 1, 0, 0, j, 1) call init_menu_fragmol (2) if (frag_and_mol .eq. 1) then call setup_menu_molecules () endif molecules=1 001 continue if (ALC) then call show_error ("Impossible to allocate memory !"//CHAR(0), & "Function: molecules"//CHAR(0), CHAR(9)//"Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(MTMBS)) deallocate(MTMBS) END FUNCTION MOLECULES atomes_1.3.1/src/fortran/angles.F900000664000175000017500000002477315212624223016515 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file angles.F90 !! @short Distribution of bond angles and dihedrals !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION bond_angles(nda) BIND (C,NAME='bond_angles_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: nda INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE :: ANGLEA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SUM_ANGA DOUBLE PRECISION :: ANG DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ANGTAB #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION ANGIJK (ATG1, ATG2, ATG3, ASTEP) INTEGER, INTENT(IN) :: ATG1, ATG2, ATG3, ASTEP END FUNCTION END INTERFACE if (allocated(ANGLEA)) deallocate(ANGLEA) allocate(ANGLEA(NSP,NSP,NSP,nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGLEA"//CHAR(0)) bond_angles=0 goto 001 endif ANGLEA(:,:,:,:)=0 DELTA_ANG=180.0/dble(nda) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, k, l, m, n, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLEA, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (CONTJ(j,i) .gt. 1) then do k=1, CONTJ(j,i)-1 do l=k+1, CONTJ(j,i) m=VOISJ(k,j,i) n=VOISJ(l,j,i) ANG = ANGIJK (m, j, n, i) ANG_I=AnINT (ANG/DELTA_ANG) if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda !$OMP ATOMIC ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)=ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)+1 if (LOT(m) .ne. LOT(n)) then !$OMP ATOMIC ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)=ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)+1 endif enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLEA, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA if (CONTJ(j,i) .gt. 1) then do k=1, CONTJ(j,i)-1 do l=k+1, CONTJ(j,i) m=VOISJ(k,j,i) n=VOISJ(l,j,i) ANG = ANGIJK (m, j, n, i) ANG_I=AnINT (ANG/DELTA_ANG) if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda #ifdef OPENMP !$OMP ATOMIC #endif ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)=ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)+1 if (LOT(m) .ne. LOT(n)) then #ifdef OPENMP !$OMP ATOMIC #endif ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)=ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)+1 endif enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (allocated(SUM_ANGA)) deallocate(SUM_ANGA) allocate (SUM_ANGA(NSP,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: SUM_ANGA"//CHAR(0)) bond_angles=0 goto 001 endif do i=1, NSP do j=1, NSP do k=1, NSP SUM_ANGA(i,j,k) = 0 do l=1, nda SUM_ANGA(i,j,k) = SUM_ANGA(i,j,k) + ANGLEA(i,j,k,l) enddo enddo enddo enddo if (allocated(ANGTAB)) deallocate(ANGTAB) allocate(ANGTAB(nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGTAB"//CHAR(0)) bond_angles=0 goto 001 endif ANGTAB(:)=0.0 m=0 do i=1, NSP do j=1, NSP do k=1, NSP if (SUM_ANGA(i,j,k) .ne. 0) then do l=1, nda ANGTAB(l)=100.0*dble(ANGLEA(i,j,k,l))/dble(SUM_ANGA(i,j,k)) enddo call save_curve (nda, ANGTAB, m, IDAN) else call save_curve (0, ANGTAB, m, IDAN) endif m=m+1 enddo enddo enddo bond_angles=1 001 continue if (allocated(ANGLEA)) deallocate(ANGLEA) if (allocated(SUM_ANGA)) deallocate(SUM_ANGA) if (allocated(ANGTAB)) deallocate(ANGTAB) END FUNCTION bond_angles INTEGER (KIND=c_int) FUNCTION bond_diedrals(nda) BIND (C,NAME='bond_diedrals_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: nda INTEGER, DIMENSION(:,:,:,:,:), ALLOCATABLE :: ANGLED INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE :: SUM_ANGD DOUBLE PRECISION :: ANG DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ANGTAB #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION DIEDRE (DG1, DG2, DG3, DG4, DSTEP) INTEGER, INTENT(IN) :: DG1, DG2, DG3, DG4, DSTEP END FUNCTION END INTERFACE if (allocated(ANGLED)) deallocate(ANGLED) allocate(ANGLED(NSP,NSP,NSP,NSP,nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGLED"//CHAR(0)) bond_diedrals=0 goto 001 endif ANGLED(:,:,:,:,:)=0 DELTA_ANG=180.0/dble(nda) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, k, l, m, n, o, p, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLED, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA do k=1, CONTJ(j,i) m=VOISJ(k,j,i) if (CONTJ(m,i) .ge. 2) then do l=1, CONTJ(m,i) n=VOISJ(l,m,i) if (n .ne. j) then if (CONTJ(n,i) .ge. 2) then do o=1, CONTJ(n,i) p = VOISJ(o,n,i) if (p.ne.j .and. p.ne.m) then ANG=DIEDRE (j, m, n, p, i) ANG_I=AnINT (ANG/DELTA_ANG)+1 if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda !$OMP ATOMIC ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)=ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)+1 if (LOT(j).ne.LOT(m) .or. LOT(j).ne.LOT(n) .or. LOT(j).ne.LOT(p)) then !$OMP ATOMIC ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)=ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)+1 endif endif enddo endif endif enddo endif enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, p, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLED, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA do k=1, CONTJ(j,i) m=VOISJ(k,j,i) if (CONTJ(m,i) .ge. 2) then do l=1, CONTJ(m,i) n=VOISJ(l,m,i) if (n .ne. j) then if (CONTJ(n,i) .ge. 2) then do o=1, CONTJ(n,i) p = VOISJ(o,n,i) if (p.ne.j .and. p.ne.m) then ANG=DIEDRE (j, m, n, p, i) ANG_I=AnINT (ANG/DELTA_ANG)+1 if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda #ifdef OPENMP !$OMP ATOMIC #endif ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)=ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)+1 if (LOT(j).ne.LOT(m) .or. LOT(j).ne.LOT(n) .or. LOT(j).ne.LOT(p)) then #ifdef OPENMP !$OMP ATOMIC #endif ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)=ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)+1 endif endif enddo endif endif enddo endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (allocated(SUM_ANGD)) deallocate(SUM_ANGD) allocate (SUM_ANGD(NSP,NSP,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: SUM_ANGD"//CHAR(0)) bond_diedrals=0 goto 001 endif SUM_ANGD(:,:,:,:) = 0 do i=1, NSP do j=1, NSP do k=1, NSP do l=1, NSP do m=1, nda SUM_ANGD(i,j,k,l) = SUM_ANGD(i,j,k,l) + ANGLED(i,j,k,l,m) enddo enddo enddo enddo enddo if (allocated(ANGTAB)) deallocate(ANGTAB) allocate(ANGTAB(nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGTAB"//CHAR(0)) bond_diedrals=0 goto 001 endif ANGTAB(:)=0.0 n=NSP*NSP*NSP do i=1, NSP do j=1, NSP do k=1, NSP do l=1, NSP if (SUM_ANGD(i,j,k,l) .ne. 0) then o=1 do m=1, nda ANGTAB(m)=100.0*dble(ANGLED(i,j,k,l,m))/dble(SUM_ANGD(i,j,k,l)) enddo call save_curve (nda, ANGTAB, n, IDAN) else call save_curve (0, ANGTAB, n, IDAN) endif n=n+1 enddo enddo enddo enddo bond_diedrals=1 001 continue if (allocated(ANGLED)) deallocate(ANGLED) if (allocated(SUM_ANGD)) deallocate(SUM_ANGD) if (allocated(ANGTAB)) deallocate(ANGTAB) END FUNCTION bond_diedrals atomes_1.3.1/src/fortran/escs.F900000664000175000017500000000453415212624223016172 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file escs.F90 !! @short Edge and Corner sharing tetrahedra analysis !! @author Sébastien Le Roux LOGICAL FUNCTION EESCS () USE PARAMETERS IMPLICIT NONE LOGICAL :: DMTXOK INTERFACE LOGICAL FUNCTION ALLOCEDCO (alloc) LOGICAL, INTENT(IN) :: alloc END FUNCTION LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB, MOLVOL) INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB, MOLVOL END FUNCTION END INTERFACE if (.not. ALLOCEDCO (.true.)) then EESCS=.false. goto 001 endif CALC_PRINGS=.false. NOHP=.false. ! Modify DISTMX to evaluate ES/CS DMTXOK = DISTMTX(NA, LOT, .false., .false., .false.) if (.not. DMTXOK) then EESCS=.false. goto 001 endif do i=1, NS do j=1, NA do o=1, NSP if (CONTJ(j,i).eq.4 .and. (LA_COUNT(j,o,i) .eq. 4)) then if(NS .gt. 1) TDSA(LOT(j),o,i)=TDSA(LOT(j),o,i)+1 TDA(LOT(j),o) = TDA(LOT(j),o)+1 endif enddo enddo enddo do j=1, NSP do o=1, NSP do i=1, NS MTABL(i)=EDGEA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, ETYPEA(j,o)) do i=1, NS MTABL(i)=CORNERA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, CTYPEA(j,o)) do i=1, NS MTABL(i)=DEFA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, DETYPEA(j,o)) do i=1, NS MTABL(i)=TDSA(j,o,i) enddo call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, ETDA(j,o)) enddo enddo 001 continue EESCS=.true. END FUNCTION atomes_1.3.1/src/fortran/rings-guttman.F900000664000175000017500000004562715212624223020044 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings-guttman.F90 !! @short Guttman ring statistics !! @author Sébastien Le Roux INTEGER FUNCTION GUTTMAN_RINGS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE GUTTMAN_RINGS = 0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call GUTTMAN_RING_SEARCH_ATOMS (NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call GUTTMAN_RING_SEARCH_STEPS (NUMTH) endif #else call GUTTMAN_RING_SEARCH_STEPS () #endif GUTTMAN_RINGS = RECRINGS(2) END FUNCTION #ifdef OPENMP SUBROUTINE GUTTMAN_RING_SEARCH_ATOMS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS p=0 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(MAXAT, MINAT, RPAT, APNA, SAUT, RUNSEARCH, & !$OMP& j, k, l, m, n, o, LORA, LORB, LORC, TAILLE, TAILLH, THE_RING, RES_LIST, & !$OMP& FOUND, ERR, SAVR, ORDR, TRING, INDTE, INDTH) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, PBC, MAXN, SAVRING, ORDRING, NRING, INDRING, PNA, ri) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 002 endif TRING(:)=0 SAVR(:,:,:)=0 ORDR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then !$OMP CRITICAL p = p+1 o = p !$OMP END CRITICAL APNA(:) = 0 MINAT=TAILLD MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (ABAB) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 THE_RING(1)%ATOM=j THE_RING(1)%SPEC=LORA THE_RING(1)%NEIGHBOR=1 m = VPAT(j,l) RPAT(m)=1 THE_RING(2)%ATOM=m THE_RING(2)%SPEC=LORB THE_RING(2)%NEIGHBOR=CPAT(m) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, m, 2, TAILLE, TAILLH, LORB, LORA, & RPAT, SAVR, ORDR, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 003 if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif elseif (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVR, ORDR, TRING, RES_LIST, INDTH) else if (CONTJ(j,i) .ge. 2 .and. CONTJ(m,i) .ge. 2) then !$OMP ATOMIC AMPAT(o,i)=AMPAT(o,i)+1 endif endif endif enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 003 continue enddo !$OMP END DO NOWAIT 002 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(THE_RING)) deallocate (THE_RING) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo ri = ri + RINGS_TO_OGL (i, 2, NRING, SAVRING, ORDRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: GUTTMAN_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (2, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE GUTTMAN_RING_SEARCH_STEPS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE GUTTMAN_RING_SEARCH_STEPS () USE PARAMETERS IMPLICIT NONE #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: LORA, LORB, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(TAILLE, TAILLH, MAXAT, MINAT, SAUT, RUNSEARCH, & !$OMP& i, j, k, l, m, n, o, LORA, LORB, THE_RING, RES_LIST, INDTE, INDTH, APNA, & !$OMP& FOUND, ERR, TRING, SAVRING, ORDRING, RPAT, CPAT, VPAT) & !$OMP& SHARED(p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 001 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) o=0 do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then o=o+1 APNA(:) = 0 MINAT=TAILLR MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (ABAB) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 THE_RING(1)%ATOM=j THE_RING(1)%SPEC=LORA THE_RING(1)%NEIGHBOR=1 m = VPAT(j,l) RPAT(m)=1 THE_RING(2)%ATOM=m THE_RING(2)%SPEC=LORB THE_RING(2)%NEIGHBOR=CPAT(m) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, m, 2, TAILLE, TAILLH, LORB, LORA, & RPAT, SAVRING, ORDRING, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 002 if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif elseif (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVRING, ORDRING, TRING, RES_LIST, INDTH) else if (CONTJ(j,i) .ge. 2 .and. CONTJ(m,i) .ge. 2) AMPAT(o,i)=AMPAT(o,i)+1 endif endif enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo do j=3, TAILLR NRING(j,i) = TRING(j) enddo !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo j = RINGS_TO_OGL (i, 2, NRING, SAVRING, ORDRING) #ifdef OPENMP !$OMP ATOMIC #endif ri = ri + j 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: GUTTMAN_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_RING)) deallocate (THE_RING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (2, NRING) END SUBROUTINE atomes_1.3.1/src/fortran/mendeleiev.F900000664000175000017500000005733515212624223017361 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file mendeleiev.F90 !! @short Periodic table and diffraction data !! @author Sébastien Le Roux MODULE MENDELEIEV INTEGER :: MAXE=118 CHARACTER (LEN=2), DIMENSION(118), PARAMETER :: ATSYM=(/ & 'H ', 'He', 'Li', 'Be', 'B ', 'C ', 'N ', 'O ', 'F ', & 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P ', 'S ', 'Cl', 'Ar', & 'K ', 'Ca', 'Sc', 'Ti', 'V ', 'Cr', 'Mn', 'Fe', 'Co', & 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', & 'Rb', 'Sr', 'Y ', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', & 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I ', 'Xe', & 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', & 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', & 'Ta', 'W ', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', & 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', & 'Pa', 'U ', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', & 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', & 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og' /) CHARACTER (LEN=14), DIMENSION(118), PARAMETER :: ELEMENT=(/ & 'Hydrogen ', 'Helium ', 'Lithium ', 'Beryllium ', & 'Boron ', 'Carbon ', 'Nitrogen ', 'Oxygen ', & 'Fluorine ', 'Neon ', 'Sodium ', 'Magnesium ', & 'Aluminum ', 'Silicon ', 'Phosphorus ', 'Sulfur ', & 'Chlorine ', 'Argon ', 'Potassium ', 'Calcium ', & 'Scandium ', 'Titanium ', 'Vanadium ', 'Chromium ', & 'Manganese ', 'Iron ', 'Cobalt ', 'Nickel ', & 'Copper ', 'Zinc ', 'Gallium ', 'Germanium ', & 'Arsenic ', 'Selenium ', 'Bromine ', 'Krypton ', & 'Rubidium ', 'Strontium ', 'Yttrium ', 'Zirconium ', & 'Niobium ', 'Molybdenum ', 'Technetium ', 'Ruthenium ', & 'Rhodium ', 'Palladium ', 'Silver ', 'Cadmium ', & 'Indium ', 'Tin ', 'Antimony ', 'Tellurium ', & 'Iodine ', 'Xenon ', 'Caesium ', 'Barium ', & 'Lanthanum ', 'Cerium ', 'Praseodymium ', 'Neodymium ', & 'Promethium ', 'Samarium ', 'Europium ', 'Gadolinium ', & 'Terbium ', 'Dysprosium ', 'Holmium ', 'Erbium ', & 'Thulium ', 'Ytterbium ', 'Lutetium ', 'Hafnium ', & 'Tantalum ', 'Tungsten ', 'Rhenium ', 'Osmium ', & 'Iridium ', 'Platinum ', 'Gold ', 'Mercury ', & 'Thallium ', 'Lead ', 'Bismuth ', 'Polonium ', & 'Astatine ', 'Radon ', 'Francium ', 'Radium ', & 'Actinium ', 'Thorium ', 'Protactinium ', 'Uranium ', & 'Neptunium ', 'Plutonium ', 'Americium ', 'Curium ', & 'Berkelium ', 'Californium ', 'Einsteinium ', 'Fermium ', & 'Mendelevium ', 'Nobelium ', 'Lawrencium ', 'Rutherfordium ', & 'Dubnium ', 'Seaborgium ', 'Bohrium ', 'Hassium ', & 'Meitnerium ', 'Darmstadtium ', 'Roentgenium ', 'Copernicium ', & 'Nihonium ', 'Flerovium ', 'Moscovium ', 'Livermorium ', & 'Tennessine ', 'Oganesson ' /) DOUBLE PRECISION, DIMENSION(118), PARAMETER :: AMASS=(/ & 1.008, 4.003, 6.94, 9.012, 10.81, 12.011, 14.007, 15.99, & 18.998, 20.18, 22.99, 24.305, 26.982, 28.085, 30.974, & 32.06, 35.45, 39.948, 39.098, 40.078, 44.956, 47.867, & 50.942, 51.996, 54.938, 55.845, 58.933, 58.693, 63.546, & 65.38, 69.723, 72.63, 74.922, 78.971, 79.904, 83.798, & 85.468, 87.62, 88.906, 91.224, 92.906, 95.95, 98.00, & 101.07, 102.906, 106.42, 107.868, 112.414, 114.818, & 118.71, 121.76, 127.60, 126.904, 131.293, 132.905, & 137.327, 138.905, 140.116, 140.908, 144.242, 145.00, & 150.36, 151.964, 157.25, 158.925, 162.50, 164.93, & 167.259, 168.934, 173.045, 174.967, 178.49, 180.948, & 183.84, 186.207, 190.23, 192.217, 195.084, 196.967, & 200.592, 204.38, 207.20, 208.98, 209.00, 210.00, & 222.00, 223.00, 226.00, 227.00, 232.038, 231.036, & 238.029, 237.00, 244.00, 243.00, 247.00, 247.00, & 251.00, 252.00, 257.00, 258.00, 258.00, 262.00, 267.00, & 268.00, 269.00, 270.00, 271.00, 278.00, 281.00, 282.00, & 285.00, 286.00, 289.00, 289.00, 293.00, 294.00, 294.00 /) ! Source: Beatriz Cordero and al. ! in "Covalent radii revisited", ! Dalton Trans., 2008, [DOI: 10.1039/b801115j]. DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARCOV=(/ & 0.31, 0.28, 1.28, 0.96, 0.84, 0.76, 0.71, 0.66, 0.57, & 0.58, 1.66, 1.41, 1.21, 1.11, 1.07, 1.05, 1.02, 1.06, & 2.03, 1.76, 1.70, 1.60, 1.53, 1.39, 1.39, 1.32, 1.26, & 1.24, 1.32, 1.22, 1.22, 1.20, 1.19, 1.20, 1.20, 1.16, & 2.20, 1.95, 1.90, 1.75, 1.64, 1.54, 1.47, 1.46, 1.42, & 1.39, 1.45, 1.44, 1.42, 1.39, 1.39, 1.38, 1.39, 1.40, & 2.44, 2.15, 2.07, 2.04, 2.03, 2.01, 1.99, 1.98, 1.98, & 1.96, 1.94, 1.92, 1.92, 1.89, 1.90, 1.87, 1.87, 1.75, & 1.70, 1.62, 1.51, 1.44, 1.41, 1.36, 1.36, 1.32, 1.45, & 1.46, 1.48, 1.40, 1.50, 1.50, 2.60, 2.21, 2.15, 2.06, & 2.00, 1.96, 1.90, 1.87, 1.80, 1.69, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: Slater, Journal of Chemical Physics, 41, 3199 (1964). DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARION=(/ & -0.24, 0.000, 0.900, 0.590, 0.250, 0.300, 1.320, 1.260, & 1.190, 0.000, 1.160, 0.860, 0.675, 0.400, 0.310, 1.700, & 1.670, 0.000, 1.520, 1.140, 0.885, 0.745, 0.680, 0.755, & 0.670, 0.690, 0.790, 0.830, 0.870, 0.880, 0.760, 0.670, & 0.720, 1.840, 1.820, 0.000, 1.660, 1.320, 1.040, 0.860, & 0.780, 0.730, 0.700, 0.705, 0.690, 0.755, 1.290, 1.090, & 0.940, 0.830, 0.740, 2.070, 2.060, 0.000, 1.810, 1.490, & 1.172, 1.010, 1.130, 1.123, 1.110, 1.098, 1.087, 1.078, & 1.063, 1.052, 1.041, 1.030, 1.020, 1.008, 1.001, 0.850, & 0.780, 0.650, 0.670, 0.530, 0.710, 0.710, 0.710, 1.160, & 1.025, 1.330, 1.170, 0.810, 0.760, 0.000, 1.940, 1.620, & 1.260, 0.000, 0.920, 1.030, 0.850, 0.850, 1.350, 0.990, & 0.970, 0.961, 0.000, 0.000, 0.000, 1.240, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 /) ! Source: A. Bondi, J. Phys. Chem., 68, 441 (1964). DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARVDW=(/ & 1.20, 1.40, 1.82, 0.00, 0.00, 1.70, 1.55, 1.52, 1.47, & 1.54, 2.27, 1.73, 0.00, 2.10, 1.80, 1.80, 1.75, 1.88, & 2.75, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 1.63, 1.40, 1.39, 1.87, 0.00, 1.85, 1.90, 1.85, 2.02, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 1.63, 1.72, 1.58, 1.93, 2.17, 0.00, 2.06, 1.98, 2.16, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 1.75, 1.66, 1.55, 1.96, & 2.02, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 1.86, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: ! R D Shannon and C T Prewitt (1969) Acta Cryst. B25:925-946 ! R D Shannon (1976) Acta Cryst. A23:751-767. DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARCRY=(/ & 0.10, 0.00, 0.90, 0.41, 0.25, 0.29, 0.30, 1.21, 1.19, & 0.00, 1.16, 0.86, 0.53, 0.40, 0.31, 0.43, 1.67, 0.00, & 1.52, 1.14, 0.89, 0.75, 0.68, 0.76, 0.81, 0.69, 0.54, & 0.70, 0.71, 0.74, 0.76, 0.53, 0.72, 0.56, 1.82, 0.00, & 1.66, 1.32, 1.04, 0.86, 0.78, 0.79, 0.79, 0.82, 0.81, & 0.78, 1.29, 0.92, 0.94, 0.69, 0.90, 1.11, 2.06, 0.62, & 1.81, 1.49, 1.36, 1.15, 1.32, 1.30, 1.28, 1.10, 1.31, & 1.08, 1.18, 1.05, 1.04, 1.03, 1.02, 1.13, 1.00, 0.85, & 0.78, 0.74, 0.77, 0.77, 0.77, 0.74, 1.51, 0.83, 1.03, & 1.49, 1.17, 1.08, 0.76, 0.00, 1.94, 1.62, 1.26, 1.19, & 1.09, 0.87, 0.00, 1.00, 1.12, 1.11, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: http://www.ncnr.nist.gov/resources/n-lengths/ ! Neutron News - Sears, Varley F. ! "Neutron scattering lengths and cross sections" ! 1992 - Vol 3, Issue 3, p26-37 ! http://www.informaworld.com/10.1080/10448639208218770 DOUBLE PRECISION, DIMENSION(105), PARAMETER :: COHEB=(/ & -3.739, 3.26, -1.90, 7.79, 5.304, 6.646, 9.36, & 5.803, 5.654, 4.566, 3.580, 5.375, 3.349, 4.1491, & 5.131, 2.847, 9.577, 1.909, 3.67, 4.70, 12.29, & -3.438, -0.3824, 3.635, -3.73, 9.45, 2.49, 10.3, & 7.718, 5.680, 7.288, 8.185, 6.58, 7.970, 6.795, & 7.81, 7.09, 7.02, 7.75, 7.16, 7.054, 6.715, 6.8, & 7.03, 5.88, 5.91, 5.922, 4.87, 4.065, 6.225, 5.57, & 5.80, 5.28, 4.92, 5.42, 5.07, 8.24, 4.84, 4.58, & 7.69, 12.6, 0.80, 7.22, 6.5, 7.38, 16.9, 8.01, & 7.79, 7.07 , 12.43, 7.21, 7.7, 6.91, 4.86, 9.2, & 10.7, 10.6, 9.6, 7.63, 12.692, 8.776, 9.405, 8.532, & 0.00, 0.00, 0.00, 0.00, 10.0, 0.00, 10.31, 9.1, & 8.417, 10.55, 0.00, 8.3, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: Acta Cryst. (1968). A24, 321 ! X-ray scattering factors computed from numerical Hartree-Fock wave functions ! By DON T. CROMER and JOSEPH B. MANN, University of California DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a1 = (/ & 0.413048, 0.732354, 0.974637, 1.533712, 2.085185, & 2.657506, 11.893780, 2.960427, 3.511943, 4.183749, 4.910127, & 4.708971, 4.730796, 5.275329, 1.950541, 6.372157, 1.446071, & 7.188004, 8.163991, 8.593655, 1.476566, 9.818524, 10.473575, & 11.007069, 11.709542, 12.311098, 12.914510, 13.521865, 14.014192, & 14.741002, 15.758946, 16.540613, 17.025642, 17.354071, 17.550570, & 17.655279, 8.123134, 17.730219, 17.792040, 17.859772, 17.958399, & 6.236218, 17.840963, 6.271624, 6.216648, 6.121511, 6.073874, & 6.080986, 6.196477, 19.325171, 5.394956, 6.660302, 19.884502, & 19.978920, 17.418674, 19.747343, 19.966019, 17.355122, 21.551311, & 17.331244, 17.286388, 23.700363, 17.186195, 24.898117, 25.910013, & 26.671785, 27.150190, 28.174887, 28.925894, 29.676760, 30.122866, & 30.617033, 31.066359, 31.507900, 31.888456, 32.210297, 32.004436, & 31.273891, 16.777390, 16.839890, 16.630795, 16.419567, 16.282274, & 16.289164, 16.011461, 16.070229, 16.007385, 32.563690, 15.914053, & 15.784024, 32.740208, 15.679275, 32.999901, 33.281178, 33.435162, & 15.804837, 15.889072, 33.7 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b1 = (/ & 15.569946, 11.553918, 4.334946, 42.662079, 23.494068, & 14.780758, 0.000158, 14.182259, 10.687859, 8.175457, 3.281434, & 4.875207, 3.628931, 2.631338, 0.908139, 1.514347, 0.052357, & 0.956221, 12.816323, 10.460644, 53.131023, 8.001879, 7.081940, & 6.366281, 5.597120, 5.009415, 4.507138, 4.077277, 3.738280, & 3.388232, 3.121754, 2.866618, 2.597739, 2.349787, 2.119226, & 1.908231, 15.142385, 1.563060, 1.429691, 1.310692, 1.211590, & 0.090780, 1.005729, 0.077040, 0.070789, 0.062549, 0.055333, & 0.048990, 0.042072, 6.118104, 33.326523, 33.031654, 4.628591, & 4.143356, 0.399828, 3.481823, 3.197408, 0.328369, 2.995675, & 0.300269, 0.286620, 2.689539, 0.261678, 2.435028, 2.373912, & 2.282593, 2.169660, 2.120995, 2.046203, 1.977630, 1.883090, & 1.795613, 1.708732, 1.629485, 1.549238, 1.473531, 1.353767, & 1.316992, 0.122737, 0.115905, 0.110704, 0.105499, 0.101180, & 0.098121, 0.092639, 0.090437, 0.087031, 0.801980, 0.080511, & 0.077067, 0.709545, 0.071206, 0.657086, 0.634999, 0.612785, & 0.058619, 0.055503, 0.550447 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a2 = (/ & 0.294953, 0.753896, 0.158472, 0.638283, 1.064580, & 1.078079, 3.277479, 2.508818, 2.772244, 2.905726, 3.081783, & 1.194814, 2.313951, 3.191038, 4.146930, 5.154568, 6.870609, & 6.638454, 7.146945, 1.477324, 1.487278, 1.522646, 1.547881, & 1.555477, 1.733414, 1.876623, 2.481908, 6.947285, 4.784577, & 6.907748, 6.841123, 1.567900, 4.503441, 4.653248, 5.411882, & 6.848105, 2.138042, 9.795867, 10.253252, 10.911038, 12.063054, & 17.987711, 3.428236, 17.906738, 17.919739, 4.784063, 17.155437, & 18.019468, 18.816183, 6.281571, 6.549570, 6.940756, 6.736593, & 11.774945, 8.314444, 17.368477, 27.329655, 43.988499, 17.161730, & 62.783924, 51.560162, 23.072214, 37.156837, 17.104952, 32.344139, & 88.687576, 16.999819, 82.493271, 76.173798, 65.624069, 15.099346, & 15.145351, 15.341823, 15.682498, 16.117104, 16.678440, 1.975454, & 18.445440, 19.317156, 20.023823, 19.386616, 32.738590, 32.725136, & 32.807171, 32.615547, 32.641106, 32.663830, 21.396671, 32.535042, & 32.454899, 21.973675, 32.824306, 22.638077, 23.148544, 23.657259, & 33.480801, 33.625286, 25.467693 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b2 = (/ & 32.398468, 4.595831, 0.342451, 0.595420, 1.137894, & 0.776775, 10.232723, 5.936858, 4.380466, 3.252536, 9.119178, & 108.506081, 43.051167, 33.730728, 27.044952, 22.092527, 1.193165, & 15.339877, 0.808945, 0.041891, 0.035325, 0.029763, 0.026040, & 0.023987, 0.017800, 0.014461, 0.009126, 0.286763, 0.003744, & 0.243315, 0.226057, 0.012198, 0.003012, 0.002550, 16.557184, & 16.606236, 33.542667, 14.310868, 13.132816, 12.319285, 12.246687, & 1.108310, 41.901382, 0.928222, 0.856121, 0.784031, 7.896512, & 7.273646, 6.695665, 0.036915, 0.030974, 0.025750, 0.027754, & 0.010142, 0.016872, 0.371224, 0.003446, 0.002047, 0.312491, & 0.001320, 0.001550, 0.003491, 0.001995, 0.246961, 0.002034, & 0.000665, 0.215414, 0.000640, 0.000656, 0.000720, 10.342764, & 9.934469, 9.618455, 9.446448, 9.233474, 9.049695, 81.014175, & 8.797154, 8.621570, 8.256927, 7.181401, 1.055049, 1.002287, & 0.966265, 0.904416, 0.876409, 0.840187, 4.590666, 0.770669, & 0.735137, 4.050881, 0.681177, 3.854918, 3.856168, 3.792942, & 0.590160, 0.569571, 3.581973 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a3 = (/ & 0.187491, 0.283819, 0.811855, 0.601052, 1.062788, & 1.490909, 1.858092, 0.637853, 0.678385, 0.520513, 1.262067, & 1.558157, 1.541980, 1.511514, 1.494560, 1.473732, 6.151801, & 0.454180, 1.070140, 1.436254, 1.600187, 1.703101, 1.986381, & 2.985293, 2.673141, 3.066177, 3.466894, 3.866028, 5.056806, & 4.642337, 4.121016, 3.727829, 3.715904, 4.259489, 3.937180, & 4.171004, 6.761702, 6.099763, 5.714949, 5.821115, 5.007015, & 12.973127, 1.373012, 14.123269, 3.854252, 16.631683, 4.173344, & 4.018197, 4.050479, 4.498866, 19.650681, 19.847015, 8.110516, & 9.332182, 10.323193, 10.465718, 11.018425, 20.546650, 11.903859, & 12.160097, 12.478557, 12.777782, 13.103387, 13.222581, 13.765117, & 14.065445, 14.059334, 14.624002, 14.904704, 15.160854, 56.314899, & 54.933548, 49.278297, 37.960129, 42.390297, 48.559906, 17.070105, & 17.063745, 32.979683, 28.428564, 32.808571, 6.530247, 6.678302, & 21.095163, 8.113899, 21.489658, 21.594351, 11.298093, 21.553976, & 21.849222, 12.957398, 13.660459, 14.219973, 15.153755, 15.576339, & 24.150198, 24.710381, 16.048487 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b3 = (/ & 5.711404, 1.546299, 97.102966, 99.106499, 61.238976, & 42.086842, 30.344690, 0.112726, 0.093982, 0.063295, 0.102763, & 0.111516, 0.095960, 0.081119, 0.071280, 0.061373, 18.343416, & 15.339862, 210.327011, 81.390381, 137.319489, 39.885422, 31.909672, & 23.244839, 21.788420, 18.743040, 16.438129, 14.622634, 13.034982, & 11.903689, 12.482196, 13.432163, 14.272119, 15.579460, 0.002481, & 0.001598, 0.129372, 0.120574, 0.112173, 0.104353, 0.098615, & 11.468720, 119.320541, 9.555345, 33.889484, 8.751391, 28.443739, & 29.119284, 31.009790, 32.529045, 5.564929, 5.065547, 31.849096, & 28.796200, 25.605827, 21.226641, 19.955492, 3.088196, 17.716705, & 17.026001, 16.223755, 15.495437, 14.787360, 13.996325, 13.481969, & 12.920230, 12.213148, 11.915256, 11.465375, 11.044622, 0.000780, & 0.000739, 0.000760, 0.000898, 0.000689, 0.000519, 0.128093, & 0.124741, 1.256902, 1.195250, 1.119730, 25.025890, 25.714146, & 6.046622, 26.543257, 5.239687, 4.954467, 22.758972, 4.352206, & 4.097976, 19.231543, 18.236156, 17.435474, 16.849735, 16.195778, & 3.674720, 3.615472, 14.357388 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a4 = (/ & 0.080701, 0.190003, 0.262416, 0.106139, 0.140515, & -4.241070, 0.858927, 0.722838, 0.915159, 1.135641, 1.098938, & 1.170413, 1.117564, 1.356849, 1.522042, 1.635073, 1.750347, & 1.929593, 0.877316, 1.182839, 9.177463, 1.768774, 1.865616, & 1.347855, 2.023368, 2.070451, 2.106351, 2.135900, 1.457971, & 2.191766, 2.714681, 3.345098, 3.937200, 4.136455, 3.880645, & 3.446760, 1.156051, 2.620025, 3.170516, 3.512513, 3.287667, & 3.451426, 12.947364, 3.746008, 0.840326, 4.318258, 0.852238, & 1.303510, 1.638929, 1.856934, 1.827820, 1.557175, 1.170953, & 1.244749, 1.383834, 2.592602, 3.086696, 3.130670, 2.679103, & 2.663483, 2.675515, 2.684217, 2.707246, 3.266152, 2.751404, & 2.768497, 3.386979, 2.802756, 2.814812, 2.830288, 3.540980, & 4.096253, 4.577665, 4.885509, 5.211669, 5.455839, 15.939454, & 5.555933, 5.595453, 5.881564, 1.747191, 2.342742, 2.694750, & 2.505901, 2.884082, 2.299218, 1.598497, 2.834688, 11.433394, & 4.239077, 3.683832, 3.687261, 3.672950, 3.031492, 3.027023, & 3.655563, 3.707139, 3.657525 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b4 = (/ & 61.889874, 26.463964, 201.363831, 0.151340, 0.114886, & -0.000294, 0.656065, 34.958481, 27.255203, 21.813910, 132.013947, & 48.292408, 108.932388, 86.288643, 67.520187, 55.445175, 46.398396, & 39.043823, 39.597652, 169.847839, 9.098031, 120.157997, 108.022842, & 105.774498, 89.517914, 82.767876, 76.987320, 71.966080, 72.554794, & 63.312130, 66.203621, 58.866047, 50.437996, 45.181202, 42.164009, & 39.917473, 224.132507, 135.771317, 108.197029, 91.777542, 75.011948, & 66.684151, 9.781542, 35.860680, 121.686691, 34.489983, 110.376106, & 95.831207, 103.284348, 95.037186, 87.130966, 84.101616, 84.406387, & 75.280685, 233.339676, 173.834274, 141.381973, 134.907654, 152.192825, & 148.748993, 143.984512, 139.862473, 134.816299, 110.863091, 125.836510, & 121.937187, 100.506783, 114.529938, 111.411980, 108.139153, 89.559250, & 76.189705, 66.346199, 59.980675, 54.516373, 50.210201, 7.661196, & 40.177994, 38.008820, 39.247227, 90.660263, 80.906593, 77.057549, & 76.598068, 68.372963, 69.188477, 199.805801, 160.404388, 21.381622, & 109.464111, 117.255005, 112.500038, 109.464485, 121.292038, 117.757004, & 100.736191, 97.694786, 96.064972 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a5 = (/ & 0.023736, 0.039139, 0.790108, 1.118414, 0.641784, & 0.713791, 0.912985, 1.142756, 1.089261, 1.228065, 0.560991, & 3.239403, 3.154754, 2.519114, 5.729711, 1.209372, 0.634168, & 1.523654, 1.486434, 7.113258, 7.099750, 7.082555, 7.056250, & 7.034779, 7.003180, 6.975185, 6.960892, 4.284731, 6.932996, & 38.424042, 2.395246, 6.785079, 6.790175, 6.749163, 6.707793, & 6.685200, 17.679546, 0.600053, 0.918251, 0.746965, 1.531019, & 0.210899, 6.335469, 0.908235, 15.173498, 13.246773, 17.988686, & 17.974669, 17.962912, 17.917318, 17.867832, 17.802427, 17.548716, & 17.737501, 19.876251, 11.003653, 17.335455, 11.353665, 9.564197, & 22.239950, 22.960947, 17.204367, 24.419271, 48.995213, 17.064405, & 17.067781, 46.546471, 17.018515, 16.998117, 16.997850, 16.943729, & 16.896156, 16.828321, 16.792112, 16.767591, 16.735533, 5.990003, & 1.575270, 10.576854, 4.714706, 6.356862, 19.916475, 20.576559, & 7.254589, 21.377867, 9.480184, 11.121192, 15.914965, 3.612409, & 11.736191, 15.744058, 22.279434, 15.683245, 15.704215, 15.746100, & 15.499866, 15.839268, 16.008982 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b5 = (/ & 1.334118, 0.377523, 1.409234, 1.843093, 0.399036, & 0.239535, 0.217287, 0.390240, 0.313066, 0.224952, 0.405878, & 1.928171, 1.555918, 1.170087, 1.981173, 0.646925, 0.401005, & 0.062409, 0.052821, 0.688098, 0.602102, 0.532405, 0.474882, & 0.429369, 0.383054, 0.346506, 0.314418, 0.004437, 0.265666, & 0.000397, 0.007238, 0.210974, 0.193015, 0.177432, 0.162121, & 0.146896, 1.713368, 0.120574, 0.112173, 0.104353, 0.098615, & 0.090780, 0.083391, 123.552246, 9.029517, 0.784031, 0.716809, & 0.661231, 0.610714, 0.565651, 0.523992, 0.487660, 0.463550, & 0.413616, 3.826915, 0.010719, 0.341817, 18.832960, 0.010468, & 2.910268, 2.796480, 0.274536, 2.581883, 0.001383, 0.236916, & 0.225531, 0.001211, 0.207519, 0.199376, 0.192110, 0.183849, & 0.175914, 0.168002, 0.160798, 0.152815, 0.145771, 26.659403, & 1.316997, 0.000601, 1.195250, 26.014978, 6.664449, 6.291882, & 28.096128, 5.499512, 27.632641, 26.905106, 0.083544, 130.500748, & 20.512138, 0.074040, 3.930325, 0.068033, 0.064857, 0.061755, & 15.408296, 14.754303, 0.052450 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: c = (/ & 0.000049, 0.000487, 0.002542, 0.002511, 0.003823, & 4.297983, -11.804902, 0.027014, 0.032557, 0.025576, 0.079712, & 0.126842, 0.139509, 0.145073, 0.155233, 0.154722, 0.146773, & 0.265954, 0.253614, 0.196255, 0.157765, 0.102473, 0.067744, & 0.065510, -0.147293, -0.304931, -0.936572, -2.762697, -3.254477, & -36.915829, -0.847395, 0.018726, -2.984117, -3.160982, -2.492088, & -2.810592, 1.139548, 1.140251, 1.131787, 1.124859, 1.123452, & 1.108770, 1.074784, 1.043992, 0.995452, 0.883099, 0.756603, & 0.603504, 0.333097, 0.119024, -0.290506, -0.806668, -0.448811, & -6.065902, -2.322802, -5.183497, -21.745489, -38.386017, -3.871068, & -57.189842, -45.973682, -17.452166, -31.586687, -43.505684, -26.851971, & -83.279831, -41.165253, -77.135223, -70.839813, -60.313812, -51.049416, & -49.719837, -44.119026, -32.864574, -37.412682, -43.677956, 4.018893, & 4.050394, -6.279078, 4.076478, 4.066939, 4.049824, 4.040914, & 4.046556, 3.995684, 4.020977, 4.003472, 3.981773, 3.939212, & 3.922533, 3.886066, 3.854444, 3.769391, 3.664200, 3.541160, & 3.390840, 3.213169, 3.005326 /) END MODULE atomes_1.3.1/src/fortran/skt.F900000664000175000017500000004376115212624223016043 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file skt.F90 !! @short S(k,t) analysis: dynamic structure factor calculation !! @author Sébastien Le Roux !! @author Noël Jakse ! ! Notes: ! ! LLM tool (Gemini via Antigravity) was used at few occasions to prepare some sections of this file, including: ! - To write a first draft version of the 's_of_k_t' function based on my work in the file 'sk.F90' ! - To write parts of the 'FOURIER_TRANS_QVECT_SKT' routine ! - To write parts of the 'COMPUTE_SQW' routine ! Overall the inputs provided by the LLM in these occasions were bad, ! But because I used them to get the first raw version of the code, ! I feel compelled to declare it here. ! INTEGER (KIND=c_int) FUNCTION s_of_k_t (NQ_IN, XA_IN, MIN_IN, N_SETS, SETS_T, & DELTA_T, Q_NUM, Q_LIST, N_FREQ) BIND (C,NAME='s_of_k_t_') ! Total and Partial Dynamic Structure Factor Calculation ! ! S(q,t) = (1/N) * < \sum_{i} \sum_{j} exp( -i * q * ( r_i(t0+t) - r_j(t0) ) ) > ! ! Partial: ! ! S_ab(q,t) ~ < \rho_a(q, t0+t) * conjg(\rho_b(q, t0)) > ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ_IN ! Number of delta q INTEGER (KIND=c_int), INTENT(IN) :: XA_IN ! How to compute X rays INTEGER (KIND=c_int), INTENT(IN) :: MIN_IN ! Minimum value of correlations INTEGER (KIND=c_int), INTENT(IN) :: N_SETS ! Number of t steps to save, or -1 for all INTEGER (KIND=c_int), DIMENSION(N_SETS), INTENT(IN) :: SETS_T INTEGER (KIND=c_int), INTENT(IN) :: Q_NUM ! Number q compute (q,w) data INTEGER (KIND=c_int), INTENT(IN) :: N_FREQ ! Number of frequency points REAL (KIND=c_double) :: DELTA_T REAL (KIND=c_double), DIMENSION(Q_NUM), INTENT(IN) :: Q_LIST INTEGER :: NSQ, PID INTEGER, DIMENSION(:), ALLOCATABLE :: QID INTEGER, DIMENSION(:), ALLOCATABLE :: SQW_QLIST DOUBLE PRECISION :: factor, xfactor DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB, SQW_TAB, SQW_QVAL DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: SKT_TAB DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: RHO_C, RHO_S DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: NSQT, XSQT DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: LocalCorr DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: SQT INTERFACE DOUBLE PRECISION FUNCTION FQX(TA, Q) INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q END FUNCTION END INTERFACE allocate(SQT(NQ_IN, NS-MIN_IN, NSP, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQT"//CHAR(0)) s_of_k_t = 0 goto 001 endif SQT(:,:,:,:) = 0.0d0 allocate(NSQT(NQ_IN, NS-MIN_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: NSQT"//CHAR(0)) s_of_k_t = 0 goto 001 endif NSQT(:,:) = 0.0d0 allocate(XSQT(NQ_IN, NS-MIN_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: XSQT"//CHAR(0)) s_of_k_t = 0 goto 001 endif XSQT(:,:) = 0.0d0 ! Allocate density arrays RHO_C and RHO_S ALLOCATE(RHO_C(NS, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: RHO_C"//CHAR(0)) s_of_k_t = 0 goto 001 endif ALLOCATE(RHO_S(NS, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: RHO_S"//CHAR(0)) s_of_k_t = 0 goto 001 endif ALLOCATE(LocalCorr(NS-MIN_IN, NSP, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: LocalCorr"//CHAR(0)) s_of_k_t = 0 goto 001 endif !t0 = OMP_GET_WTIME () call FOURIER_TRANS_QVECT_SKT (MIN_IN) ! Default Q-vector parallelization !t1 = OMP_GET_WTIME () !write (*,*) "temps d’excecution QVT 2:", t1-t0 if (allocated(qvectx)) deallocate(qvectx) if (allocated(qvecty))deallocate(qvecty) if (allocated(qvectz)) deallocate(qvectz) if (allocated(modq)) deallocate(modq) ! Normalization and weighting (Neutron/X-ray) factor=0.0d0 do i=1, NSP factor=factor + NBSPBS(i)*NSCATTL(i)**2 enddo if (XA_IN .eq. 1) then xfactor=0.0d0 do i=1, NSP xfactor=xfactor + NBSPBS(i)*XSCATTL(i)**2 enddo endif do t=1, NS-MIN_IN do i=1, NQ_IN if (degeneracy(i) .gt. 0) then do j=1, NSP do k=1, NSP ! Neutrons NSQT(i,t) = NSQT(i,t) + SQT(i,t,j,k) * NSCATTL(j) * NSCATTL(k) ! X-rays if (XA_IN .eq. 1) then XSQT(i,t) = XSQT(i,t) + SQT(i,t,j,k) * XSCATTL(j) * XSCATTL(k) else ! Use form factors FQX XSQT(i,t) = XSQT(i,t) + SQT(i,t,j,k) * FQX(INT(XSCATTL(j)), K_POINT(i)) * FQX(INT(XSCATTL(k)), K_POINT(i)) endif enddo enddo ! Normalization NSQT(i,t) = NSQT(i,t) / (factor * degeneracy(i)) if (XA_IN .eq. 1) then XSQT(i,t) = XSQT(i,t) / (xfactor * degeneracy(i)) else ! Function FQX appears in sk.F90 xfactor = 0.0d0 do k=1, NSP xfactor = xfactor + NBSPBS(k) * FQX(INT(XSCATTL(k)), K_POINT(i))**2 enddo XSQT(i,t) = XSQT(i,t) / (xfactor * degeneracy(i)) endif ! Normalize Partials do j=1, NSP do k=1, NSP SQT(i,t,j,k) = SQT(i,t,j,k) / (degeneracy(i) * SQRT(DBLE(NBSPBS(j)*NBSPBS(k)))) enddo enddo endif enddo enddo if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQTAB"//CHAR(0)) s_of_k_t = 0 goto 001 endif if (allocated(QID)) deallocate(QID) allocate(QID(NQ_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: QID"//CHAR(0)) s_of_k_t = 0 goto 001 endif SQTAB(:)=0.0d0 NSQ = 0; do i=1, NQ_IN if (degeneracy(i) .gt. 0) then NSQ=NSQ+1 SQTAB(NSQ)= K_POINT(i) QID(NSQ) = i endif enddo ! Saving k-points call save_xsk (NSQ, SQTAB) if (SKT_SAVE(NSQ) .eq. 0) then s_of_k_t = 0 goto 001 endif PID = 8+4*NSP*NSP if (NSP .eq. 2) PID=PID+8 if (N_SETS .eq. 1 .and. SETS_T(1) .eq. -1) then PID = PID*(NS-MIN_IN) else PID = PID*N_SETS endif if (Q_NUM .gt. 0) then allocate(SQW_TAB(N_FREQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQW_TAB"//CHAR(0)) s_of_k_t = 0 goto 001 endif allocate(SQW_QLIST(Q_NUM), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQW_QLIST"//CHAR(0)) s_of_k_t = 0 goto 001 endif allocate(SQW_QVAL(Q_NUM), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQW_QVAL"//CHAR(0)) s_of_k_t = 0 goto 001 endif ! First select all k id for the analysis, as close as possible as the user selection ! write (6, *) "Q_NUM= ",Q_NUM do i=1, Q_NUM j=1 do while (SQTAB(j).lt.Q_LIST(i)) j=j+1 enddo if (j .gt. 1) then if ((SQTAB(j) - Q_LIST(i)) .gt. (Q_LIST(i) - SQTAB(j-1))) then j = j - 1 endif endif SQW_QLIST(i) = QID(j) SQW_QVAL(i) = K_POINT(QID(j)) ! write (6, *) "i= ",i,", Q_LIST(i)= ",Q_LIST(i)," j= ",j,", QID(j)= ",QID(j)," K_POINT(QID(j))= ",K_POINT(QID(j)) enddo call recup_sqw_list (Q_NUM, SQW_QVAL) if (allocated(SQW_QVAL)) deallocate(SQW_QVAL) call COMPUTE_SQW (NSQT, Q_NUM, SQW_QLIST, PID, 0, 0) do i=1, NQ_IN do j=1, NS-MIN_IN NSQT(i,j) = (NSQT(i,j)-1.0)*K_POINT(i) enddo enddo call COMPUTE_SQW (NSQT, Q_NUM, SQW_QLIST, PID+2, 0, 0) call COMPUTE_SQW (XSQT, Q_NUM, SQW_QLIST, PID+4, 0, 0) do i=1, NQ_IN do j=1, NS-MIN_IN XSQT(i,j) = (XSQT(i,j)-1.0)*K_POINT(i) enddo enddo call COMPUTE_SQW (XSQT, Q_NUM, SQW_QLIST, PID+6, 0, 0) allocate(SKT_TAB(NQ_IN, NS-MIN_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SKT_TAB"//CHAR(0)) s_of_k_t = 0 goto 001 endif PID = PID+8 do j=1, NSP do k=1, NSP do l=1, NS-MIN_IN do m=1, NQ_IN SKT_TAB(m,l) = SQT(m,l,j,k) enddo enddo call COMPUTE_SQW (SKT_TAB, Q_NUM, SQW_QLIST, PID, j, k) PID = PID + 2 enddo enddo endif s_of_k_t = 1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) if (allocated(SKT_TAB)) deallocate(SKT_TAB) if (allocated(SQW_TAB)) deallocate(SQW_TAB) if (allocated(SQW_QLIST)) deallocate(SQW_QLIST) if (allocated(SQT)) deallocate(SQT) if (allocated(NSQT)) deallocate(NSQT) if (allocated(XSQT)) deallocate(XSQT) if (allocated(RHO_C)) deallocate(RHO_C) if (allocated(RHO_S)) deallocate(RHO_S) if (allocated(LocalCorr)) deallocate(LocalCorr) CONTAINS !************************************************************ ! ! Compute S(q,t) loops over Q-vectors ! OpenMP // on Qvect ! SUBROUTINE FOURIER_TRANS_QVECT_SKT (MIN_IN) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: MIN_IN INTEGER :: q, NumCorr, t_n DOUBLE PRECISION :: qx, qy, qz, qtr DOUBLE PRECISION :: Corr #ifdef OPENMP INTEGER :: NUMTH NUMTH = OMP_GET_MAX_THREADS () if (NUMBER_OF_QVECT.lt.NUMTH) NUMTH=NUMBER_OF_QVECT ! OpemMP on Qvect !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(qx, qy, qz, qtr, i, j, k, l, m, n, q, t) & !$OMP& PRIVATE (t_n, NumCorr, RHO_C, RHO_S, LocalCorr, Corr) & !$OMP& SHARED(NUMTH, NUMBER_OF_QVECT, SQT, NQ_IN, modq, qvmin, DELTA_Q) & !$OMP& SHARED(qvectx, qvecty, qvectz, FULLPOS, NS, NSP, NA, LOT, MIN_IN) !$OMP DO SCHEDULE(STATIC,NUMBER_OF_QVECT/NUMTH) #endif do q=1, NUMBER_OF_QVECT l=AnINT((modq(q)-qvmin)/DELTA_Q)+1 if (l .le. NQ_IN) then RHO_C(:,:) = 0.0d0 RHO_S(:,:) = 0.0d0 LocalCorr(:,:,:) = 0.0d0 qx=qvectx(q) qy=qvecty(q) qz=qvectz(q) do t=1, NS ! Compute density history for this Q vector do i=1, NA j = LOT(i) qtr = qx*FULLPOS(i,1,t) + qy*FULLPOS(i,2,t) + qz*FULLPOS(i,3,t) RHO_C(t, j) = RHO_C(t, j) + cos(qtr) RHO_S(t, j) = RHO_S(t, j) + sin(qtr) enddo enddo ! If 'MIN_IN = 0' and 't = 0', then S(t=0) is the static structure factor do t=0, NS-1-MIN_IN NumCorr = NS-t-MIN_IN do t_n=1, NumCorr do m=1, NSP do n=1, NSP Corr = RHO_C(t+t_n, m) * RHO_C(t_n, n) + RHO_S(t+t_n, m) * RHO_S(t_n, n) LocalCorr(t+1, m, n) = LocalCorr(t+1, m, n) + Corr enddo enddo enddo ! Normalize by NumCorr here LocalCorr(t+1, :, :) = LocalCorr(t+1, :, :) / DBLE(NumCorr) enddo #ifdef OPENMP !$OMP CRITICAL #endif SQT(l, :, :, :) = SQT(l, :, :, :) + LocalCorr(:, :, :) #ifdef OPENMP !$OMP END CRITICAL #endif endif enddo #ifdef OPENMP !$OMP END DO !$OMP END PARALLEL #endif END SUBROUTINE !************************************************************ ! ! Compute S(q,w) loops over frequencies ! SUBROUTINE COMPUTE_SQW (SKT_TAB, Q_NUM, Q_LIST, PIC, SPA, SPB) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: Q_NUM, PIC, SPA, SPB INTEGER, DIMENSION(Q_NUM), INTENT(IN) :: Q_LIST DOUBLE PRECISION, DIMENSION (NQ_IN,NS-MIN_IN), INTENT(IN) :: SKT_TAB INTEGER :: qid, id_q_num, freq INTEGER :: SHIFT, CID DOUBLE PRECISION :: omega, max_omega, delta_omega, time_val, sqw_val max_omega = PI / DELTA_T ! delta_omega = max_omega / DBLE(N_FREQ) delta_omega = max_omega / DBLE(N_FREQ-1) SHIFT = 8+4*NSP*NSP if (NSP .eq. 2) SHIFT=SHIFT+8 CID = PIC do qid = 1, Q_NUM ! For all selected q points id_q_num = Q_LIST(qid) ! Select the q point ID number as referenced previously do freq = 1, N_FREQ omega = DBLE(freq-1) * delta_omega sqw_val = 0.5d0 * SKT_TAB(id_q_num, 1) do t = 2, NS-MIN_IN-1 time_val = DBLE(t-1) * DELTA_T sqw_val = sqw_val + SKT_TAB(id_q_num, t) * cos(omega * time_val) enddo time_val = DBLE(NS-MIN_IN-1) * DELTA_T sqw_val = sqw_val + 0.5d0 * SKT_TAB(id_q_num, NS-MIN_IN) * cos(omega * time_val) sqw_val = 2.0d0 * sqw_val * DELTA_T / PI SQW_TAB(freq) = sqw_val enddo ! Save SQW_TAB here ! call save_curve (N_FREQ, SQW_TAB, CID, IDSKT) if (SPA .gt. 0 .and. SPB .gt. 0) then ! For partials only evaluates Faber-Ziman formalism sqw_val = 0.0d0 do freq = 1, N_FREQ omega = DBLE(freq-1) * delta_omega if (SPA .eq. SPB) then sqw_val = 0.5d0 * (1.0d0 + (SKT_TAB(id_q_num, 1) - 1.0d0)/Xi(SPA)) else sqw_val = 0.5d0 * (1.0d0 + SKT_TAB(id_q_num, 1)/sqrt(Xi(SPA)*Xi(SPB))) endif do t = 2, NS-MIN_IN-1 time_val = DBLE(t-1) * DELTA_T if (SPA .eq. SPB) then sqw_val = sqw_val + (1.0d0 + (SKT_TAB(id_q_num, t) - 1.0d0)/Xi(SPA)) * cos(omega * time_val) else sqw_val = sqw_val + (1.0d0 + SKT_TAB(id_q_num, t)/sqrt(Xi(SPA)*Xi(SPB))) * cos(omega * time_val) endif enddo time_val = DBLE(NS-MIN_IN-1) * DELTA_T if (SPA .eq. SPB) then sqw_val = sqw_val + 0.5d0 * (1.0d0 + (SKT_TAB(id_q_num, t) - 1.0d0)/Xi(SPA)) * cos(omega * time_val) else sqw_val = sqw_val + 0.5d0 * (1.0d0 + SKT_TAB(id_q_num, t)/sqrt(Xi(SPA)*Xi(SPB))) * cos(omega * time_val) endif sqw_val = 2.0d0 * sqw_val * DELTA_T / PI SQW_TAB(freq) = sqw_val enddo ! Save SQW_TAB here ! call save_curve (N_FREQ, SQW_TAB, CID+2*NSP*NSP, IDSKT) endif CID = CID + SHIFT enddo END SUBROUTINE INTEGER FUNCTION SKT_SAVE (NSQ) USE PARAMETERS USE MENDELEIEV INTEGER, INTENT(IN) :: NSQ INTEGER :: NDT, tps, cid DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION FZBT (NDQ, SQIJ) USE PARAMETERS INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ END FUNCTION END INTERFACE h = 8+4*NSP*NSP if (NSP .eq. 2) h=h+8 if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SKT_SAVE"//CHAR(0), "Table: SQTAB"//CHAR(0)) SKT_SAVE = 0 goto 001 endif if(allocated(Sij)) deallocate(Sij) allocate(Sij(NQ_IN,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SKT_SAVE"//CHAR(0), "Table: Sij"//CHAR(0)) SKT_SAVE = 0 goto 001 endif if (NSQ .gt. 0) then ! If wave vectors exist SQTAB(:)=0.0d0 if (N_SETS .eq. 1 .and. SETS_T(1) .eq. -1) then NDT = NS-MIN_IN else NDT = N_SETS endif do t=1, NDT cid = (t-1)*SKNUM if (NDT .eq. NS-MIN_IN) then tps = t else tps = SETS_T(t) endif i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= NSQT(k,tps) endif enddo call save_curve (NSQ, SQTAB, cid, IDSKT) i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= (NSQT(k,tps)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, cid + 2, IDSKT) i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= XSQT(k,tps) endif enddo call save_curve (NSQ, SQTAB, cid + 4, IDSKT) i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= (XSQT(k,tps)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, cid + 6, IDSKT) SQTAB(:)=0.0d0 Sij(:,:,:)=0.0d0 l = 8 do i=1, NSP do j=1, NSP m=0 do k=1, NQ_IN Sij(k,i,j) = SQT(k,tps,i,j) if (degeneracy(k) .gt. 0) then m=m+1 SQTAB(m)=Sij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, cid + l, IDSKT) l=l+2 enddo enddo ! To compute FZ and BT partials if (.not.FZBT (NQ_IN, Sij)) then SKT_SAVE = 0 goto 001 endif do i=1, NSP do j=1, NSP m=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then m=m+1 SQTAB(m)= FZSij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, cid + l, IDSKT) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 k=0 do j=1, NQ_IN if (degeneracy(j) .gt. 0) then k=k+1 SQTAB(k)= BTij(j,i) endif enddo call save_curve (NSQ, SQTAB, cid + l, IDSKT) l=l+2 enddo endif enddo endif ! If wave vectors exist SKT_SAVE=1 001 continue if (allocated(FZSij)) deallocate(FZSij) if (NSP.eq.2 .and. allocated(BTij)) deallocate(BTij) if (allocated(SQTAB)) deallocate(SQTAB) if(allocated(Sij)) deallocate(Sij) if(allocated(FZSij)) deallocate(FZSij) if(allocated(BTij)) deallocate(BTij) END FUNCTION END FUNCTION s_of_k_t atomes_1.3.1/src/fortran/pdb.F900000664000175000017500000002041015212624223015771 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file pdb.F90 !! @short Unused: read atomic coordinates in PDB format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_pdb (pdb_f, lpdb) BIND (C,NAME='read_pdb_') ! ! Lecture of atom types and coordinates - pdb files ! USE PARAMETERS USE MENDELEIEV IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lpdb INTEGER, DIMENSION(:), ALLOCATABLE :: LINEA LOGICAL :: with_cell = .false. CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: pdb_f CHARACTER (LEN=lpdb) :: pdb_file CHARACTER (LEN=4) :: ANAME CHARACTER (LEN=6) :: RID INTEGER :: ASI CHARACTER (LEN=1) :: ALB CHARACTER (LEN=3) :: ACC CHARACTER (LEN=1) :: CIC INTEGER :: RSN CHARACTER (LEN=1) :: IC DOUBLE PRECISION :: OCA DOUBLE PRECISION THF CHARACTER (LEN=2) :: SYM CHARACTER (LEN=2) :: CHA REAL, DIMENSION(6) :: CELL CHARACTER (LEN=11) :: SPG INTEGER :: ZVAL do i=1, lpdb pdb_file(i:i) = pdb_f(i) enddo CELL(:) = 0.0 inquire (file=pdb_file, exist=isok) if (isok) then open (unit=20, file=pdb_file, action='read', status='old') NS=1 NA=0 l = 0 do while (.true.) read (20, '(A6)', end=999) RID l = l+1 if (RID.eq.'HETATM' .or. RID.eq.'ATOM ') NA=NA+1 if (RID.eq. 'CRYST1') with_cell = .true. enddo 999 continue if (NA .ne. 0) then rewind(20) if (allocated(LINEA)) deallocate(LINEA) allocate (LINEA(l), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: LINEA"//CHAR(0)) endif l=0 do while (.true.) read (20, '(A6)', end=888) RID l = l+1 LINEA(l)=0 if (RID.eq.'HETATM' .or. RID.eq.'ATOM ') LINEA(l) = 1 if (RID.eq.'CRYST1') LINEA(l) = 2 enddo 888 continue rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS m = 0 do j=1, l-1 if (LINEA(j) .eq. 1) then m = m+1 read (20, 001) RID, & ASI, & ANAME, & ALB, & ACC, & CIC, & RSN, & IC, & FULLPOS(m,1,i), & FULLPOS(m,2,i), & FULLPOS(m,3,i), & OCA, & THF, & SYM, & CHA ! write (6, '("m= ",i4," x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') m, FULLPOS(m,1,i),FULLPOS(m,2,i),FULLPOS(m,3,i) TAB_OF_TYPE(m)=ATOMPDB(j, SYM) else if (LINEA(j) .eq. 2) then read (20, 002) RID, & CELL(1), & CELL(2), & CELL(3), & CELL(4), & CELL(5), & CELL(6), & SPG, & ZVAL else read (20, *) endif enddo enddo if (allocated(LINEA)) deallocate(LINEA) if (with_cell) then call cell_data_from_pdb (CELL(1), CELL(2), CELL(3), CELL(4), CELL(5), CELL(6)) endif read_pdb=0 else read_pdb=2 endif close(20) else read_pdb=1 endif 001 FORMAT (A6,I5,1X,A4,A1,A3,1X,A1,I4,A1,3X,F8.3,F8.3,F8.3,F6.2,F6.2,10X,A2,A2) 002 FORMAT (A6,F9.3,F9.3,F9.3,F7.2,F7.2,F7.2,1X,A11,I4) ! ! PDB format v3.30 ! ! HETATM / ATOM keyword ! !--------------------------------------------------------------------------- !Field | Column | FORTRAN | ! No. | range | format | Description !--------------------------------------------------------------------------- ! 1. | 1 - 6 | A6 | "ATOM " or "HETATM" ! 2. | 7 - 11 | I5 | Atom serial number ! - | 12 - 12 | 1X | Blank ! 3. | 13 - 16 | A4 | Atom name ! 4. | 17 - 17 | A1 | Alternative location code (if any) ! 5. | 18 - 20 | A3 | Standard 3-letter amino acid code for residue ! - | 21 - 21 | 1X | Blank ! 6. | 22 - 22 | A1 | Chain identifier code ! 7. | 23 - 26 | I4 | Residue sequence number ! 8. | 27 - 27 | A1 | Insertion code (if any) ! - | 28 - 30 | 3X | Blank ! 9. | 31 - 38 | F8.3 | Atom's x-coordinate ! 10. | 39 - 46 | F8.3 | Atom's y-coordinate ! 11. | 47 - 54 | F8.3 | Atom's z-coordinate ! 12. | 55 - 60 | F6.2 | Occupancy value for atom ! 13. | 61 - 66 | F6.2 | B-value (thermal factor) ! - | 67 - 76 | 10X | Blank ! 14. | 77 - 78 | A2 | Element symbol ! 15. | 79 - 80 | A2 | Charge !--------------------------------------------------------------------------- ! CRYST1 keyword ! !--------------------------------------------------------------------------- !Field | Column | FORTRAN | ! No. | range | format | Description !--------------------------------------------------------------------------- ! 1. | 1 - 6 | A6 | "CRYST1" ! 2. | 7 - 15 | F9.3 | a ! 3. | 16 - 24 | F9.3 | b ! 4. | 25 - 33 | F9.3 | c ! 5. | 34 - 40 | F7.2 | alpha ! 6. | 41 - 47 | F7.2 | beta ! 7. | 48 - 54 | F7.2 | gamma ! - | 55 - 55 | 1X | Blank ! 8. | 56 - 66 | A11 | Space group ! 9. | 67 - 70 | I4 | z !--------------------------------------------------------------------------- CONTAINS CHARACTER (LEN=2) FUNCTION ATOMPDB(LIN, PDBSTR) INTEGER :: PA, PB CHARACTER (LEN=2), INTENT(IN) :: PDBSTR INTEGER, INTENT(IN) :: LIN ATOMPDB=' ' PB=0 do PA=1, 2 if (PDBSTR(PA:PA) .ne. ' ') then PB= PB+1 ATOMPDB(PB:PB)=PDBSTR(PA:PA) endif enddo if (PB .eq. 2) then if (ATOMPDB(2:2).eq.'A') ATOMPDB(2:2)='a' if (ATOMPDB(2:2).eq.'B') ATOMPDB(2:2)='b' if (ATOMPDB(2:2).eq.'C') ATOMPDB(2:2)='c' if (ATOMPDB(2:2).eq.'D') ATOMPDB(2:2)='d' if (ATOMPDB(2:2).eq.'E') ATOMPDB(2:2)='e' if (ATOMPDB(2:2).eq.'F') ATOMPDB(2:2)='f' if (ATOMPDB(2:2).eq.'G') ATOMPDB(2:2)='g' if (ATOMPDB(2:2).eq.'H') ATOMPDB(2:2)='h' if (ATOMPDB(2:2).eq.'I') ATOMPDB(2:2)='i' if (ATOMPDB(2:2).eq.'J') ATOMPDB(2:2)='j' if (ATOMPDB(2:2).eq.'K') ATOMPDB(2:2)='k' if (ATOMPDB(2:2).eq.'L') ATOMPDB(2:2)='l' if (ATOMPDB(2:2).eq.'M') ATOMPDB(2:2)='m' if (ATOMPDB(2:2).eq.'N') ATOMPDB(2:2)='n' if (ATOMPDB(2:2).eq.'O') ATOMPDB(2:2)='o' if (ATOMPDB(2:2).eq.'P') ATOMPDB(2:2)='p' if (ATOMPDB(2:2).eq.'Q') ATOMPDB(2:2)='q' if (ATOMPDB(2:2).eq.'R') ATOMPDB(2:2)='r' if (ATOMPDB(2:2).eq.'S') ATOMPDB(2:2)='s' if (ATOMPDB(2:2).eq.'T') ATOMPDB(2:2)='t' if (ATOMPDB(2:2).eq.'U') ATOMPDB(2:2)='u' if (ATOMPDB(2:2).eq.'V') ATOMPDB(2:2)='v' if (ATOMPDB(2:2).eq.'W') ATOMPDB(2:2)='w' if (ATOMPDB(2:2).eq.'X') ATOMPDB(2:2)='x' if (ATOMPDB(2:2).eq.'Y') ATOMPDB(2:2)='y' if (ATOMPDB(2:2).eq.'Z') ATOMPDB(2:2)='z' endif PB=0 do PA=1, MAXE if (ATSYM(PA) .eq. ATOMPDB) then PB=1 endif enddo if (PB .eq. 0) then write (6, '("Warning reading PDB file: atom symbol not found line: ",i10)') LIN endif END FUNCTION END FUNCTION atomes_1.3.1/src/fortran/rings-primitive.F900000664000175000017500000012574715212624223020377 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings-primitive.F90 !! @short Primitive and strong ring statistics !! @author Sébastien Le Roux INTEGER FUNCTION PRIMITIVE_RINGS () ! ! Primitive and strong ring statistics ! #ifdef OPENMP !$ USE OMP_LIB #endif USE PARAMETERS IMPLICIT NONE INTEGER :: RID #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS=.false. #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE PRIMITIVE_RINGS=0 ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine RID = 3 if (CALC_STRINGS) RID = 4 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call PRIMITIVE_RING_SEARCH_ATOMS (RID, NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call PRIMITIVE_RING_SEARCH_STEPS (RID, NUMTH) endif #else call PRIMITIVE_RING_SEARCH_STEPS (RID) #endif PRIMITIVE_RINGS = RECRINGS(RID) END FUNCTION #ifdef OPENMP SUBROUTINE PRIMITIVE_RING_SEARCH_ATOMS (RID, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH INTEGER, INTENT(IN) :: RID INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: ri LOGICAL, DIMENSION(2) :: FNDTAB INTERFACE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NNA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NNA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(FNDTAB, MAXAT, MINAT, SAUT, PATH, PATHOUT, & !$OMP& h, j, k, l, m, n, o, p, INDTE, APNA, RES_LIST, & !$OMP& ERR, TRING, SAVR, ORDR, PRINGORD, NPRING, MATDIST, QUEUE, QUERNG) & !$OMP& SHARED(NUMTH, i, RID, CALC_STRINGS, NS, NA, NNA, NNP, TLT, NSP, LOT, TAILLR, CONTJ, VOISJ, & !$OMP& NUMA, MAXPNA, MINPNA, ABAB, NO_HOMO, TBR, ALC, ALC_TAB, SAVRING, ORDRING, CPAT, VPAT, & !$OMP& NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) if(allocated(MATDIST)) deallocate(MATDIST) allocate(MATDIST(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MATDIST" ALC=.true. goto 002 endif if(allocated(QUEUE)) deallocate(QUEUE) allocate(QUEUE(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUEUE" ALC=.true. goto 002 endif if (allocated(PRINGORD)) deallocate(PRINGORD) allocate(PRINGORD(NUMA*10,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="PRINGORD" ALC=.false. goto 002 endif if (allocated(NPRING)) deallocate(NPRING) allocate(NPRING(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NPRING" ALC=.false. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if (allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif SAVR(:,:,:)=0 ORDR(:,:,:)=0 TRING(:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=NNP+1, NNP+NA ! atoms-loop if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j-NNP) .eq. TLT) then APNA(:)=0 MINAT=TAILLR MAXAT=1 SAUT=.true. call DIJKSTRA (j, CPAT, VPAT, QUEUE, MATDIST) if (TBR .or. ALC) goto 003 do k=1, TAILLR/2 + mod(TAILLR,2) ! ring-sizes-loop INDTE(:)=0 RES_LIST(:)=0 PATH=0 do l=1, NNA if (MATDIST(l) .eq. k) then call SPATH_REC (PATH,l,k,k,MATDIST,CPAT,VPAT,NPRING,PRINGORD) endif enddo h = PATH*(PATH-1)/2 if (allocated(QUERNG)) deallocate(QUERNG) allocate(QUERNG(h,2), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUERNG" ALC=.true. goto 003 endif l=0 do m=1, PATH-1 do n=m+1, PATH l=l+1 QUERNG(l,1)=m QUERNG(l,2)=n ! Paths which share atoms ... so with overlap ... are deleted PATHOUT=.false. do o=1, k-1 do p=1, k-1 if (PRINGORD(m,o) .eq. PRINGORD(n,p)) then PATHOUT=.true. exit endif enddo if (PATHOUT) exit enddo if (PATHOUT) then QUERNG(l,1)=0 QUERNG(l,2)=0 l=l-1 endif enddo enddo FNDTAB(:)=.false. call PRIM_RING (FNDTAB, j, l, k, h, CPAT, VPAT, QUERNG, PRINGORD, MATDIST, & SAVR, ORDR, TRING, INDTE, RES_LIST) if (TBR .or. ALC) goto 003 m = 2*k if (FNDTAB(1)) then if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (FNDTAB(2)) then m = m + 1 if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (allocated(QUERNG)) deallocate(QUERNG) enddo ! end ring-sizes-loop if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif 003 continue enddo ! end atoms-loop !$OMP END DO NOWAIT if (TBR .or. ALC) goto 002 !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 002 continue if (allocated(INDTE)) deallocate (INDTE) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(MATDIST)) deallocate(MATDIST) if (allocated(QUEUE)) deallocate(QUEUE) if (allocated(PRINGORD)) deallocate(PRINGORD) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 ri = ri + RINGS_TO_OGL (i, RID, NRING, SAVRING, ORDRING) do k=3, TAILLR if (NRING(k,i) .ne. 0) then ! do j=1, NRING(k,i) !! The algorithm implies that you may have a problem for !! the biggest size of ring therefore lets put this size out of the proof checking. !! Furthermore we check results only if all atoms are used to initiate the search. ! if (mod(INDRING(k,j,i), k).ne.0 .and. k.lt.TAILLR .and. LTLT.eq.0) then ! write (6, 003) i, k, j, INDRING(k,j,i) ! write (6, 007) ! do l=1, k ! write (6, '(i4,2x)', advance='no') RINGORD(k,j,l,i) ! enddo ! write (6, *) ! write (6, 004) ! if (ABAB) then ! write (6, 008) ! else ! write (6, 005) ! endif ! write (6, *) ! endif ! enddo endif enddo enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: PRIMITIVE_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (RID, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE PRIMITIVE_RING_SEARCH_STEPS (RID, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE PRIMITIVE_RING_SEARCH_STEPS (RID) USE PARAMETERS IMPLICIT NONE #endif INTEGER, INTENT(IN) :: RID INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: ri LOGICAL, DIMENSION(2) :: FNDTAB INTERFACE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(FNDTAB, MAXAT, MINAT, SAUT, PATH, PATHOUT, & !$OMP& h, i, j, k, l, m, n, o, p, INDTE, APNA, RES_LIST, & !$OMP& ERR, TRING, SAVRING, ORDRING, CPAT, VPAT, & !$OMP& PRINGORD, NPRING, MATDIST, QUEUE, QUERNG) & !$OMP& SHARED(NUMTH, RID, CALC_STRINGS, NS, NA, NNA, NNP, TLT, NSP, LOT, TAILLR, CONTJ, VOISJ, & !$OMP& NUMA, MAXPNA, MINPNA, ABAB, NO_HOMO, TBR, ALC, ALC_TAB, & !$OMP& NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(MATDIST)) deallocate(MATDIST) allocate(MATDIST(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MATDIST" ALC=.true. goto 001 endif if(allocated(QUEUE)) deallocate(QUEUE) allocate(QUEUE(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUEUE" ALC=.true. goto 001 endif if (allocated(PRINGORD)) deallocate(PRINGORD) allocate(PRINGORD(NUMA*10,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="PRINGORD" ALC=.false. goto 001 endif if (allocated(NPRING)) deallocate(NPRING) allocate(NPRING(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NPRING" ALC=.false. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NNA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if (allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif !$OMP DO SCHEDULE(STATIC,NS/NUMTH) do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NNA, i, CONTJ, VOISJ, CPAT, VPAT) do j=NNP+1, NNP+NA ! atoms-loop if (TLT .eq. NSP+1 .or. LOT(j-NNP) .eq. TLT) then APNA(:)=0 MINAT=TAILLR MAXAT=1 SAUT=.true. call DIJKSTRA(j, CPAT, VPAT, QUEUE, MATDIST) if (TBR .or. ALC) goto 002 do k=1, TAILLR/2 + mod(TAILLR,2) ! ring-sizes-loop INDTE(:)=0 RES_LIST(:)=0 PATH=0 do l=1, NNA if (MATDIST(l) .eq. k) then call SPATH_REC (PATH,l,k,k,MATDIST,CPAT,VPAT,NPRING,PRINGORD) endif enddo h = PATH*(PATH-1)/2 if (allocated(QUERNG)) deallocate(QUERNG) allocate(QUERNG(h,2), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUERNG" ALC=.true. goto 002 endif l=0 do m=1, PATH-1 do n=m+1, PATH l=l+1 QUERNG(l,1)=m QUERNG(l,2)=n ! Paths which share atoms ... so with overlap ... are deleted PATHOUT=.false. do o=1, k-1 do p=1, k-1 if (PRINGORD(m,o) .eq. PRINGORD(n,p)) then PATHOUT=.true. exit endif enddo if (PATHOUT) exit enddo if (PATHOUT) then QUERNG(l,1)=0 QUERNG(l,2)=0 l=l-1 endif enddo enddo FNDTAB(:)=.false. call PRIM_RING (FNDTAB, j, l, k, h, CPAT, VPAT, QUERNG, PRINGORD, MATDIST, & SAVRING, ORDRING, TRING, INDTE, RES_LIST) if (TBR .or. ALC) goto 002 m = 2*k if (FNDTAB(1)) then if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (FNDTAB(2)) then m = m + 1 if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (allocated(QUERNG)) deallocate(QUERNG) enddo ! end ring-sizes-loop if (.not. SAUT) then do k=3, TAILLR do m=3, TAILLR if (APNA(k).eq.1 .and. APNA(m).eq.1) then PNA(k,m,i)=PNA(k,m,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo ! end atoms-loop do j=3, TAILLR NRING(j,i) = TRING(j) enddo k = RINGS_TO_OGL (i, RID, NRING, SAVRING, ORDRING) !$OMP ATOMIC ri = ri + k do k=3, TAILLR if (NRING(k,i) .ne. 0) then ! do j=1, NRING(k,i) !! The algorithm implies that you may have a problem for !! the biggest size of ring therefore lets put this size out of the proof checking. !! Furthermore we check results only if all atoms are used to initiate the search. ! if (mod(INDRING(k,j,i), k).ne.0 .and. k.lt.TAILLR .and. LTLT.eq.0) then ! write (6, 003) i, k, j, INDRING(k,j,i) ! write (6, 007) ! do l=1, k ! write (6, '(i4,2x)', advance='no') RINGORD(k,j,l,i) ! enddo ! write (6, *) ! write (6, 004) ! if (ABAB) then ! write (6, 008) ! else ! write (6, 005) ! endif ! write (6, *) ! endif ! enddo endif enddo 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: PRIMITIVE_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(INDTE)) deallocate (INDTE) if (allocated(APNA)) deallocate (APNA) if(allocated(MATDIST)) deallocate(MATDIST) if(allocated(QUEUE)) deallocate(QUEUE) if (allocated(PRINGORD)) deallocate(PRINGORD) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (RID, NRING) END SUBROUTINE SUBROUTINE DIJKSTRA(NODE, CPT, VPT, QUE, MATDIS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NODE INTEGER, DIMENSION(NNA), INTENT(INOUT) :: QUE, MATDIS INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER :: QBEGIN, QEND, QID, AT1, AT2, DAT1 QUE(:)=0 MATDIS(:)=NNA+2 QUE(1)=NODE MATDIS(NODE)=0 QBEGIN=0 QEND=1 ! Trouver les plus cours chemin reliant un atome aux autres ! Find the shortest paths between atoms do while (QBEGIN < QEND) QBEGIN=QBEGIN+1 AT1=QUE(QBEGIN) DAT1=MATDIS(AT1)+1 do QID=1, CPT(AT1) AT2=VPT(AT1,QID) if (MATDIS(AT2) .gt. DAT1) then MATDIS(AT2) = DAT1 if (DAT1 < NNA) then QEND=QEND+1 QUE(QEND)= AT2 endif endif enddo enddo END SUBROUTINE RECURSIVE SUBROUTINE SPATH_REC (PTH, NODE, LENGTH, LNGTH, MATDIS, CPT, VPT, NPRI, PORDR) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(INOUT) :: PTH INTEGER, INTENT(IN) :: NODE, LENGTH, LNGTH INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT, MATDIS INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NNA), INTENT(INOUT) :: NPRI INTEGER, DIMENSION(NUMA*10,TAILLR), INTENT(INOUT) :: PORDR INTEGER :: DISTNN, IDV, VDI, IDT NPRI(LENGTH) = NODE do IDV=1, CPT(NODE) ! Boucle sur tous les voisins du noeud "NODE" ! Loop on all the neighbors of node "NODE" VDI=VPT(NODE,IDV) ! Selection du voisin - neighbor selection DISTNN=MATDIS(VDI) ! Distance to starting atom = VDI in the node distance table if (DISTNN .eq. 0) then PTH=PTH+1 do IDT=1, LNGTH PORDR(PTH,IDT)=NPRI(IDT) enddo elseif (DISTNN .eq. LENGTH-1) then call SPATH_REC (PTH, VDI, DISTNN, LNGTH, MATDIS, CPT, VPT, NPRI, PORDR) endif enddo END SUBROUTINE INTEGER FUNCTION REAL_ATOM_ID (IND, NATS) IMPLICIT NONE INTEGER, INTENT(IN) :: IND, NATS REAL_ATOM_ID= IND - (IND/NATS)*NATS if (REAL_ATOM_ID .eq. 0) REAL_ATOM_ID=NATS END FUNCTION SUBROUTINE PRIM_RING (FNDTAB, NODE, PTH, LGTH, NPT, CPT, VPT, QRNG, PORD, MATDIS, & RSAVED, OSAVED, TRIN, INDP, RESLP) USE PARAMETERS IMPLICIT NONE LOGICAL, DIMENSION(2), INTENT(INOUT) :: FNDTAB INTEGER, INTENT(IN) :: NODE, PTH, LGTH, NPT INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT, MATDIS INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRIN INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NPT,2), INTENT(IN) :: QRNG INTEGER, DIMENSION(NUMA*10,TAILLR), INTENT(INOUT) :: PORD INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDP INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESLP INTEGER :: RM, RN, PR, PTH1, PTH2, IRS, IRX INTEGER :: ATB, ATA, ATC, ATD, ATE, MAXD, MIND INTEGER :: PROBE INTEGER, DIMENSION(TAILLR) :: TOPRIM, PRIMTO LOGICAL:: GOAL, TOSAVE LOGICAL, DIMENSION(NNA) :: CHK INTERFACE INTEGER FUNCTION REAL_ATOM_ID (IND, NATS) INTEGER, INTENT(IN) :: IND, NATS END FUNCTION END INTERFACE GOAL=.false. do PR=1, PTH ! Premier chemin i->j - First path i->j PTH1= QRNG(PR,1) ! Second chemin i->k - second path i->k PTH2= QRNG(PR,2) PROBE=0 ATA= PORD(PTH1,LGTH) ATB= PORD(PTH2,LGTH) do RM=1, CPT(ATA) ATE=VPT(ATA,RM) if (ATE .eq. ATB) PROBE=1 enddo if (ATA .eq. ATB .or. PROBE .eq. 1) then do RM=1, LGTH-1 do RN=RM, LGTH-1+PROBE ATC= PORD(PTH1,RM) ATD= PORD(PTH2,RN) MAXD=MATDIS(ATC)+MATDIS(ATD) MIND=2*LGTH+PROBE-MAXD CHK(:)=.false. call PAIR_SEARCH (GOAL, ATC, ATD, 1, MAXD, MIND, CPT, VPT, CHK) if (GOAL) then GOAL= .false. goto 001 endif enddo enddo do RN=1, LGTH-1 do RM=RN, LGTH-1+PROBE ATC= PORD(PTH1,RM) ATD= PORD(PTH2,RN) MAXD=MATDIS(ATC)+MATDIS(ATD) MIND=2*LGTH+PROBE-MAXD CHK(:)=.false. call PAIR_SEARCH (GOAL, ATC, ATD, 1, MAXD, MIND, CPT, VPT, CHK) if (GOAL) then GOAL= .false. goto 001 endif enddo enddo if ((PROBE.eq.0 .and. 2*LGTH.le.TAILLR) .or. (PROBE.eq.1 .and. 2*LGTH.lt.TAILLR)) then TOPRIM(:)=0 PRIMTO(:)=0 do IRX=1, LGTH TOPRIM(IRX)=PORD(PTH1,IRX) enddo if (PROBE .eq. 1) TOPRIM(LGTH+1)=PORD(PTH2,LGTH) IRS=LGTH+PROBE do IRX=LGTH-1, 1, -1 IRS=IRS+1 TOPRIM(IRS)=PORD(PTH2,IRX) enddo TOPRIM(IRS+1)=NODE ! To find atom id in the primitive unit cell do IRX=1, 2*LGTH+PROBE PRIMTO(IRX)=REAL_ATOM_ID(TOPRIM(IRX),NA) enddo TOSAVE=.true. if (ABAB) then if (PROBE .eq. 0) then call TESTABAB (TOSAVE,LGTH,PRIMTO) else TOSAVE=.false. endif endif if (NO_HOMO) then call TESTHOMO(TOSAVE,LGTH,PRIMTO) endif if (TOSAVE .and. LGTH*2+PROBE.le.TAILLR) then if (CALC_STRINGS) then call STRONG_RINGS (FNDTAB, LGTH, PROBE, TOPRIM, PRIMTO, RSAVED, OSAVED, TRIN, INDP, RESLP, CPT, VPT) else call SAVE_DIJKSTRA_RING (PRIMTO, LGTH*2+PROBE, RSAVED, OSAVED, TRIN, INDP, RESLP) FNDTAB(1+PROBE)=.true. endif if (TBR .or. ALC) goto 002 endif endif endif 001 continue enddo 002 continue END RECURSIVE SUBROUTINE PAIR_SEARCH (GOAL, AT1, AT2, LG, MAXM, MINM, CPT, VPT, CHK) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: GOAL INTEGER, INTENT(IN) :: AT1, AT2, LG, MAXM, MINM INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK INTEGER :: PSC, AT3 CHK(AT1)=.true. if (AT1 .eq. AT2) then GOAL=.true. else do PSC=1, CPT(AT1) AT3=VPT(AT1,PSC) if (.not.CHK(AT3)) then if (AT3.eq.AT2) then GOAL=.true. goto 001 elseif (LG.lt.MAXM-1 .and. LG.lt.MINM-1) then call PAIR_SEARCH (GOAL, AT3, AT2, LG+1, MAXM, MINM, CPT, VPT, CHK) if (GOAL) then goto 001 endif endif endif enddo endif 001 continue CHK(AT1)=.false. END SUBROUTINE SUBROUTINE STRONG_RINGS (FNDTAB, RLGTH, RPROBE, TOPRIM, PRIMTO, ASRING, OSRING, TRNG, INDT, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE LOGICAL, DIMENSION(2), INTENT(INOUT) :: FNDTAB INTEGER, INTENT(IN) :: RLGTH, RPROBE INTEGER, DIMENSION(TAILLR), INTENT(IN) :: TOPRIM, PRIMTO INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: ASRING, OSRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRNG, RESL INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER :: RM, RN, STLGT LOGICAL, DIMENSION(NNA) :: CHKS LOGICAL :: DVSTR LOGICAL :: SGOAL=.false. LOGICAL :: FGOAL=.false. STLGT=2*RLGTH+RPROBE CHKS(:)=.false. do RM=1, STLGT-1 do RN=RM+1, STLGT DVSTR=.false. call SEARCH_STRONG_RINGS (DVSTR, RM, RN, STLGT, STLGT, SGOAL, FGOAL, TOPRIM, CPT, VPT, CHKS) if (TBR .or. ALC) goto 002 if (FGOAL) goto 001 if (SGOAL) goto 002 enddo enddo 001 continue call SAVE_DIJKSTRA_RING (PRIMTO, RLGTH*2+RPROBE, ASRING, OSRING, TRNG, INDT, RESL) FNDTAB(1+RPROBE)=.true. if (TBR .or. ALC) goto 002 002 continue END SUBROUTINE RECURSIVE SUBROUTINE SEARCH_STRONG_RINGS (DLOW, IDX, IDY, DLGTR, LGTR, SRGOAL, FRGOAL, TOTER, CPT, VPT, CHKS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: DLGTR, LGTR, IDX, IDY LOGICAL, INTENT(INOUT) :: DLOW, SRGOAL, FRGOAL INTEGER, DIMENSION(DLGTR), INTENT(IN) :: TOTER INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHKS INTEGER :: DXY, DYX, DTEST, DMIN INTEGER :: RG, RF, RH, RJ, RL, RO, RP, RQ, RR INTEGER :: NBPATH, IDZ INTEGER, DIMENSION(:), ALLOCATABLE :: STRST, NEWTER INTEGER, DIMENSION(:,:), ALLOCATABLE :: TOTPATH LOGICAL, DIMENSION(:), ALLOCATABLE :: CUTRING LOGICAL, DIMENSION(NNA) :: CHK TYPE(RING), TARGET :: ST_RING TYPE(RING), POINTER :: SRING, TMP_RI INTERFACE RECURSIVE SUBROUTINE PATH_SEARCH (AT0,AT1,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) USE PARAMETERS INTEGER, INTENT(IN) :: AT0, AT1, AT2, IDT1, IDT2, DMAX, DMED, DARING INTEGER, INTENT(INOUT) :: NPATH LOGICAL, INTENT(INOUT) :: DLPATH INTEGER, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: STPATH INTEGER, DIMENSION(DMAX*DMAX,DMAX), INTENT(INOUT) :: TPATH INTEGER, DIMENSION(DMED), INTENT(IN) :: ACRING INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: CUTPATH LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK, CHKS TYPE (RING), POINTER, INTENT(INOUT) :: SRING END SUBROUTINE SHORTCUT_RING (IDA, IDB, IDC, DLT, TABAB, SRING) USE PARAMETERS INTEGER, INTENT(IN) :: IDA, IDB, IDC, DLT INTEGER, DIMENSION(DLT), INTENT(IN) :: TABAB TYPE(RING), POINTER, INTENT(INOUT) :: SRING END SUBROUTINE CREAT_RING (RING_INIT, ELEM_CR) USE PARAMETERS TYPE (RING), INTENT(INOUT) :: RING_INIT INTEGER, INTENT(IN) :: ELEM_CR END SUBROUTINE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE do RG=1, DLGTR CHKS(TOTER(RG))=.true. enddo DXY=abs(IDY-IDX) DYX=DLGTR-DXY DMIN=min(DXY,DYX) DTEST=LGTR-1-DMIN ! First we find find a ring starting from an atom i and enclosing ! all tested atoms, then this ring will be tested and so on ! if the size of the enclosing ring became smaller than ! DLGTR then the initial ring is not strong if (DTEST.ge.2) then do RJ=2, DTEST if (allocated(TOTPATH)) deallocate(TOTPATH) allocate(TOTPATH(RJ*RJ,RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TOTPATH" ALC=.true. goto 001 endif if (allocated(CUTRING)) deallocate(CUTRING) allocate(CUTRING(RJ*RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CUTRING" ALC=.true. goto 001 endif if (allocated(STRST)) deallocate(STRST) allocate(STRST(RJ*RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="STRST" ALC=.true. goto 001 endif NBPATH=0 STRST(:)=0 CUTRING(:)=.false. TOTPATH(:,:)=0 CHK(:)=.false. RR=1 call CREAT_RING (ST_RING, TOTER(IDX)) SRING => ST_RING ! On recherche tous les chemins de taille RJ entre les atomes TOTER(IDX) et TOTER(IDY) ! On stock ces NBPATH chemins dans le tableau TOTPATH ! We are looking for all path of size RJ between atoms TOTER(IDX) and TOTER(IDY) ! Then these NBPATH are saved in the tab TOTPATH call PATH_SEARCH (TOTER(IDX),TOTER(IDX),TOTER(IDY),IDX,IDY,RJ,DLGTR,LGTR,NBPATH,DLOW, & STRST,TOTER,TOTPATH,CUTRING,CPT,VPT,CHK,CHKS,SRING) if (ALC) goto 001 if (NBPATH .ne. 0) then do RH=1, NBPATH IDZ=0 if (CUTRING(RH)) then do RG=1, DLGTR if (TOTER(RG) .eq. STRST(RH)) then IDZ=RG exit endif enddo endif if(IDZ.eq.0)then if (.not.CUTRING(RH)) then call CREAT_RING (ST_RING, TOTER(IDX)) SRING => ST_RING do RG=1, RJ RR=RR+1 call DO_RING (SRING, TOTPATH(RH,RG)) if (ALC) goto 001 enddo if (DXY .le. DYX) then do RG=IDY+1, DLGTR call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo do RG=1, IDX call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo else do RG=IDY-1, IDX, -1 call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo endif else call CREAT_RING (ST_RING, TOTER(1)) SRING => ST_RING do RG=2, DLGTR call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo CHKS(TOTPATH(RH,1))=.true. endif else call CREAT_RING (ST_RING, TOTPATH(RH,1)) SRING => ST_RING call SHORTCUT_RING (IDX, IDY, IDZ, DLGTR, TOTER, SRING) if (ALC) goto 001 endif ! A new path as been found, so a new rings as been built according ! to the new list of atoms. ! The size of this new ring has to be tested if (SRING%SPEC+1 .lt. LGTR) then TMP_RI => SRING do RF=1, SRING%SPEC TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) enddo SRGOAL=.true. goto 001 else ! If all the atoms are CHK and ring is bigger than the initial ring ! the initial ring is strong .. we have to check this RF=0 do RG=1, NNA if (CHKS(RG)) RF=RF+1 enddo if (RF .eq. NNA) then TMP_RI => SRING do RG=1, SRING%SPEC TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) enddo FRGOAL=.true. goto 001 else ! Else the new ring has to be tested RR = SRING%SPEC+1 if (allocated(NEWTER)) deallocate(NEWTER) allocate(NEWTER(RR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NEWTER" ALC=.true. goto 001 endif SRGOAL=.false. TMP_RI => SRING do RG=1, RR NEWTER(RR-RG+1)=TMP_RI%ATOM if (RG .lt. RR) then TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) endif enddo DLOW=.false. SRING => ST_RING if (IDZ.eq.0) then if (DMIN .eq. 1) then RO=2 RP=RJ DLOW=.true. else RO=1 RP=RR-1 endif else RO=1 RP=RR-1 endif do RG=RO, RP if (IDZ.eq.0) then if (DMIN .eq. 1) then DLOW=.true. RQ=RJ+2 else RQ=RG+1 endif else RQ=RG+1 endif do RF=RQ, RR call SEARCH_STRONG_RINGS (DLOW, RG, RF, RR, LGTR, SRGOAL, FRGOAL, NEWTER, CPT, VPT, CHKS) if (TBR .or. ALC) goto 001 if (SRGOAL .or. FRGOAL) goto 001 do RL=1, DLGTR CHKS(TOTER(RL))=.true. enddo if (IDZ.eq.0 .and. CUTRING(RH)) CHKS(TOTPATH(RH,1))=.true. enddo enddo if (allocated(NEWTER)) deallocate(NEWTER) endif endif if (IDZ.eq.0 .and. CUTRING(RH)) CHKS(TOTPATH(RH,1))=.false. enddo else SRGOAL=.false. endif if (allocated(TOTPATH)) deallocate(TOTPATH) if (allocated(CUTRING)) deallocate(CUTRING) if (allocated(STRST)) deallocate(STRST) enddo endif 001 continue if (allocated(TOTPATH)) deallocate(TOTPATH) if (allocated(CUTRING)) deallocate(CUTRING) if (allocated(STRST)) deallocate(STRST) if (allocated(NEWTER)) deallocate(NEWTER) do RG=1, DLGTR CHKS(TOTER(RG))=.false. enddo END SUBROUTINE RECURSIVE SUBROUTINE PATH_SEARCH (AT0,AT1,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: AT0, AT1, AT2, IDT1, IDT2, DMAX, DMED, DARING INTEGER, INTENT(INOUT) :: NPATH LOGICAL, INTENT(INOUT) :: DLPATH INTEGER, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: STPATH INTEGER, DIMENSION(DMAX*DMAX,DMAX), INTENT(INOUT) :: TPATH INTEGER, DIMENSION(DMED), INTENT(IN) :: ACRING INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: CUTPATH LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK, CHKS TYPE (RING), POINTER, INTENT(INOUT) :: SRING INTEGER :: AT3, AT4, AT5, AT6, AT7 INTEGER :: DUV, DUW, DVW LOGICAL :: VAL1, VAL2 LOGICAL :: TOUCH TYPE (RING), POINTER :: TMPR INTERFACE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE CHK(AT1)=.true. if (AT1.eq.AT2 .and. SRING%SPEC.eq.DMAX) then NPATH=NPATH+1 TMPR => SRING do AT3=1, DMAX TPATH(NPATH,DMAX-AT3+1)=TMPR%ATOM if (AT3 .lt. DMAX) TMPR => TMPR%PAST enddo else do AT4=1, CPT(AT1) AT3=VPT(AT1,AT4) if (.not.CHK(AT3)) then call DO_RING (SRING, AT3) if (ALC) goto 001 if (AT3 .eq. AT2 .and. SRING%SPEC.eq.DMAX) then NPATH=NPATH+1 TMPR => SRING do AT5=1, DMAX TPATH(NPATH,DMAX-AT5+1)=TMPR%ATOM if (AT5 .lt. DMAX) TMPR => TMPR%PAST enddo elseif (SRING%SPEC.lt.DMAX .and. .not.CHKS(AT3)) then TOUCH=.false. AT7=0 VAL1=.false. VAL2=.false. do AT5=1, CPT(AT3) AT6=VPT(AT3,AT5) if (AT6 .eq. AT0) VAL1=.true. if (AT6 .eq. AT2) VAL2=.true. if (CHKS(AT6)) then AT7=AT7+1 if (AT6.ne.AT0 .and. AT6.ne.AT2) STPATH(NPATH+1)=AT6 endif enddo AT6=0 do AT5=1, DMED if (ACRING(AT5) .eq. STPATH(NPATH+1)) then AT6=AT5 exit endif enddo if (AT7 .eq. 0) then TOUCH=.false. elseif (AT7.eq.1 .and. VAL1 .and. .not.VAL2) then TOUCH=.false. elseif (AT7.eq.1 .and. VAL2 .and. .not.VAL1) then TOUCH=.false. elseif (AT7.eq.1 .and. .not.VAL1 .and. .not.VAL2) then TOUCH=.true. elseif (AT7.eq.2 .and. VAL1 .and. VAL2 .and. DMAX.eq.2) then TOUCH=.false. elseif (AT7.gt.2 .and. VAL1 .and. VAL2 .and. DMAX.eq.2) then if (DLPATH) then TOUCH=.true. else if (AT6 .ne. 0) then if (AT6 .lt. IDT1) then DUV=IDT1-AT6 DVW=IDT2-IDT1 DUW=DMED-(IDT2-AT6) elseif(AT6 .lt. IDT2) then DUV=AT6-IDT1 DVW=DMED-(AT2-AT1) DUW=IDT2-AT6 elseif(AT6 .gt. IDT2) then DUV=DMED-(AT6-IDT1) DVW=IDT2-IDT1 DUW=AT6-IDT2 endif if (DUV.lt.DARING-1 .and. DUW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. elseif (DVW.lt.DARING-1 .and. DUW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. elseif (DUV.lt.DARING-1 .and. DVW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. else TOUCH=.true. endif else CUTPATH(NPATH+1)=.true. TOUCH=.false. endif endif else TOUCH=.true. endif if (.not.TOUCH) then call PATH_SEARCH (AT0,AT3,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) if (ALC) goto 001 endif endif SRING => SRING%PAST deallocate (SRING%NEXT) endif enddo endif CHK(AT1)=.false. 001 continue END SUBROUTINE SUBROUTINE SHORTCUT_RING (IDA, IDB, IDC, DLT, TABAB, SRING) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: IDA, IDB, IDC, DLT INTEGER, DIMENSION(DLT), INTENT(IN) :: TABAB TYPE(RING), POINTER, INTENT(INOUT) :: SRING INTEGER :: IDD INTEGER :: LXY, LXZ, LYZ INTERFACE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE if (IDA .gt. IDC) then ! IDB > IDA > IDC LXZ=IDA-IDC LXY=IDB-IDA LYZ=DLT-(IDB-IDC) if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDC, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LXZ .gt. LYZ) then do IDD=IDC, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDB, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif else ! IDB > IDA .and. IDC .gt. IDA if (IDC .gt. IDB) then ! IDB > IDA .and. IDC .gt. IDA .and. IDC .gt. IDB ! => IDC > IDB > IDA LXY=IDB-IDA LYZ=IDC-IDB LXZ=DLT-(IDC-IDA) if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDC, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LYZ .ge. LXZ) then do IDD=IDB, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif else ! IDB > IDA .and. IDC .gt. IDA .and. IDB .gt. IDC ! => IDB > IDC > IDA LXY=DLT-(IDB-IDA) LYZ=IDB-IDC LXZ=IDC-IDA if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDB, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LYZ .gt. LXZ) then do IDD=IDC, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif endif endif 001 continue END SUBROUTINE SUBROUTINE TESTABAB(VALTEST, LGTEST, PRIMT) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: VALTEST INTEGER, INTENT(IN) :: LGTEST INTEGER, DIMENSION(TAILLR), INTENT(IN) :: PRIMT INTEGER :: LTA, LTB, LTC, LTD LTA=LOT(PRIMT(1)) LTB=LOT(PRIMT(2)) VALTEST=.true. if (LTA .ne. LTB) then do LTD=3, 2*LGTEST LTC=LOT(PRIMT(LTD)) if (mod(LTD,2).eq.0 .and. LTC.ne.LTB) then VALTEST=.false. exit elseif (mod(LTD,2).ne.0 .and. LTC.ne.LTA) then VALTEST=.false. exit endif enddo else VALTEST=.false. endif END SUBROUTINE SUBROUTINE TESTHOMO(VALTEST, LGTEST, PRIMT) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: VALTEST INTEGER, INTENT(IN) :: LGTEST INTEGER, DIMENSION(TAILLR), INTENT(IN) :: PRIMT INTEGER :: LTA, LTB VALTEST=.true. do LTA=1, 2*LGTEST LTB=LTA+1 if (LTA .eq. 2*LGTEST) LTB=1 if (LOT(PRIMT(LTA)) .eq. LOT(PRIMT(LTB))) then VALTEST=.false. exit endif enddo END SUBROUTINE SUBROUTINE SAVE_DIJKSTRA_RING (TAB, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE INTEGER, DIMENSION(TAILLR), INTENT(IN) :: TAB INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWRING INTEGER, DIMENSION(TLES) :: TOTRI, TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOTRI(idx)= TAB(idx) TOSAV(idx)= TAB(idx) enddo call TRI(TOTRI, TLES) if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWRING=.false. do idy=1, TLES if (TOTRI(idy) .ne. RSAVED(TLES,idx,idy)) then NEWRING=.true. exit endif enddo if (.not.NEWRING) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWRING=.true. endif if (NEWRING) then ! A new ring has been found ! We save the data RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOTRI(idx) OSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE atomes_1.3.1/src/fortran/sq.F900000664000175000017500000001674215212624223015664 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file sq.F90 !! @short S(q) analysis: Fourier transform calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION s_of_q (QMAX, QMIN, NQ) BIND (C,NAME='s_of_q_') ! Total structure factor ! Partials structure factors ! Total structure factor: ! ! 00 sin (q*r) ! S(q)= 1 + 4*PI*rho* / dr r² ------------ (g(r) - 1) ! 0 (q*r) ! ! or: ! 1 Rmax sin (q*r) sin (PI*r/Rmax) ! S(q)= 1 + 4*PI*rho* / dr r² (g(r) -1) ----------- * --------------- ! 0 (q*r) PI*r/Rmax ! ! Partials structure factors: ! ! Rmax ! S (q)= delta(a,b) + sqrt(x * x ) *4*PI*rho* / dr r² (g (r) - 1) ! ab a b 0 ab ! ! ! or: ! Rmax sin (q*r) sin (PI*r/Rmax) ! S (q)= delta(a,b) + sqrt(x * x ) *4*PI*rho* / dr r² (g (r) - go ) ----------- * --------------- ! ab a b 0 ab ab (q*r) PI*r/Rmax ! ! with x = Nbre(a)/Nbre(tot) ! a USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ REAL (KIND=c_double), INTENT(IN) :: QMAX , QMIN DOUBLE PRECISION :: DQ DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE INTEGER FUNCTION recup_data (i, j) INTEGER, INTENT(IN) :: i, j END FUNCTION LOGICAL FUNCTION FZBT (NDQ, SQIJ) USE PARAMETERS INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ END FUNCTION END INTERFACE NUMBER_OF_QMOD = NQ TOTAL_DENSITY = dble(NA)/MEANVOL if (allocated(Q_POINT)) deallocate(Q_POINT) allocate(Q_POINT(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: Q_POINT"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(S)) deallocate(S) allocate(S(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: S"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(XS)) deallocate(XS) allocate(XS(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: XS"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(Sij)) deallocate(Sij) allocate(Sij(NQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: Sij"//CHAR(0)) s_of_q = 0 goto 001 endif ! 'QMIN' is minimum q modulus accessible considering the analysed ! lattice ie. the minimum modulus of the reciprocal cell vectors, DQ=((QMAX-QMIN)/dble(NQ)) S(:)=0.0d0 XS(:)=0.0d0 Q_POINT(:)=0.0d0 do i=1, NQ Q_POINT(i)= dble(i-1)*DQ+QMIN enddo Sij(:,:,:)=0.0d0 j=0 if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+8 if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+8 do o=1, NSP do p=1, NSP if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+5 enddo enddo if (.not. FZBT (NQ, Sij)) then s_of_q = 0 goto 001 endif if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: SQTAB"//CHAR(0)) s_of_q = 0 goto 001 endif l=0 do k=1, NQ SQTAB(k)= S(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= (S(k)-1.0)*Q_POINT(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= XS(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= (XS(k)-1.0)*Q_POINT(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do i=1, NSP do j=1, NSP do k=1, NQ SQTAB(k)= Sij(k,i,j) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo enddo do i=1, NSP do j=1, NSP do k=1, NQ SQTAB(k)= FZSij(k,i,j) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 do j=1, NQ SQTAB(j)= BTij(j,i) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo endif s_of_q = 1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) if (allocated(Q_POINT)) deallocate(Q_POINT) if (allocated(Sij)) deallocate(Sij) if (allocated(S)) deallocate(S) if (allocated(XS)) deallocate(XS) if (allocated(FZSij)) deallocate(FZSij) if (allocated(BTij)) deallocate(BTij) END FUNCTION INTEGER (KIND=c_int) FUNCTION send_gr (IC, VAL, DR, RDATA, GDATA) BIND (C,NAME='send_gr_') USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: IC, VAL REAL (KIND=c_double), INTENT(IN) :: DR REAL (KIND=c_double), DIMENSION(VAL), INTENT(IN) :: RDATA, GDATA DOUBLE PRECISION :: Hcap1, Hcap2, Vcap INTEGER :: rinit if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) allocate(SHELL_VOL(VAL+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: send_gr"//CHAR(0), "Table: SHELL_VOL"//CHAR(0)) send_gr = 0 goto 001 endif do i=1, VAL SHELL_VOL(i) = 0.0d0 SHELL_VOL(i) = 4.0d0*PI*((RDATA(i)+DR)**3 - (RDATA(i)**3))/3 ! To take into account the atoms between a/2 and a srqt(3)/2 ! We need the small volume they can be found in. if (OVERALL_CUBIC .and. RDATA(i)+DR.gt.MBOX) then Hcap1=RDATA(i)+DR-MBOX if (RDATA(i) .le. MBOX) then Hcap2=0.0d0 else Hcap2=RDATA(i)-MBOX endif Vcap=Hcap1**2*(3*RDATA(i) - Hcap1) - Hcap2**2*(3*RDATA(i) - Hcap2) Vcap=Vcap*PI*2 SHELL_VOL(i)=SHELL_VOL(i)-Vcap endif enddo j=IC if (j > 8) then m=j-16 m=m/5 k=m/NSP+1 l=m-(k-1)*NSP+1 endif rinit = 1 if (RDATA(1) .eq. 0.0) rinit = 2 Rmax = RDATA(VAL) do i=1, NUMBER_OF_QMOD do n=rinit, VAL Phi = Q_POINT(i)*RDATA(n) Fact_Rmax = PI*RDATA(n)/Rmax ! Sinus_Fact_Rmax = sin(Fact_Rmax)/Fact_Rmax Sinus_phi = sin(Phi)/Phi if (j .eq. 0) then S(i) = S(i) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi!*Sinus_Fact_Rmax else if (j .eq. 8) then XS(i) = XS(i) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi else Sij(i,k,l) = Sij(i,k,l) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi!*Sinus_Fact_Rmax endif enddo if (j .eq. 0) then S(i) = 1.0d0 + S(i)*TOTAL_DENSITY else if (j .eq. 8) then XS(i) = 1.0d0 + XS(i)*TOTAL_DENSITY else if (l .eq. k) then Sij(i,k,l) = 1.0d0 + Xi(l)*Sij(i,k,l)*TOTAL_DENSITY else Sij(i,k,l) = sqrt(Xi(k)*Xi(l))*Sij(i,k,l)*TOTAL_DENSITY endif endif enddo send_gr = 1 001 continue if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) END FUNCTION atomes_1.3.1/src/fortran/rings_ogl.F900000664000175000017500000001647115212624223017223 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings_ogl.F90 !! @short Send ring statistics data to C for OpenGL rendering !! @author Sébastien Le Roux INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA) :: RING_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID INTEGER :: RAA, RAB, RAC, RAD, RAE RAB=0 do RAA=3, TAILLR if (NRI(RAA,STEP) > 0) then RAB=RAB+1 call allocate_all_rings (IDSEARCH, STEP-1, RAA, NRI(RAA,STEP)) endif enddo do RAA=1, NA do RAB=3, TAILLR RAC = 0 do RAD=1, NUMA RING_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB,STEP) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 RING_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL"//CHAR(0), "Table: RING_ID (1)"//CHAR(0)) RINGS_TO_OGL = 0 goto 002 endif do RAD=1, RAC RING_ID(RAD) = RING_LIST(RAD) enddo !write (6, '("Sending atom/rings data:: step= ",i1,", at= ",i4," ring= ",i2,", size= ",i2,", num= ",i4)') STEP-1, RAA-1, IDSEARCH, RAB, RAC if (RAC > 0) call send_atom_rings_id_opengl (STEP-1, RAA-1, IDSEARCH, RAB-1, RAC, RING_ID) enddo enddo do RAA=3, TAILLR if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL"//CHAR(0), "Table: RING_ID (2)"//CHAR(0)) RINGS_TO_OGL = 0 goto 002 endif do RAB=1, NRI(RAA,STEP) do RAC=1, RAA RING_ID(RAC) = OSAVED(RAA,RAB,RAC) enddo call send_rings_opengl (IDSEARCH, STEP-1, RAA-1, RAB-1, RING_ID) enddo enddo RINGS_TO_OGL = 1 if (allocated(RING_ID)) deallocate(RING_ID) 002 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_BIS (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA) :: RING_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID INTEGER :: RAA, RAB, RAC, RAD, RAE do RAA=3, TAILLR if (NRI(RAA) > 0) call allocate_all_rings (IDSEARCH, STEP-1, RAA, NRI(RAA)) enddo do RAA=1, NA do RAB=3, TAILLR RAC = 0 do RAD=1, NUMA RING_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 RING_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_BIS"//CHAR(0), "Table: RING_ID (1)"//CHAR(0)) RINGS_TO_OGL_BIS = 0 goto 002 endif do RAD=1, RAC RING_ID(RAD) = RING_LIST(RAD) enddo !write (6, '("Sending atom/rings data:: step= ",i1,", at= ",i4," ring= ",i2,", size= ",i2,", num= ",i4)') STEP-1, RAA-1, IDSEARCH, RAB, RAC if (RAC > 0) call send_atom_rings_id_opengl (STEP-1, RAA-1, IDSEARCH, RAB, RAC, RING_ID) enddo enddo do RAA=3, TAILLR if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_BIS"//CHAR(0), "Table: RING_ID (2)"//CHAR(0)) RINGS_TO_OGL_BIS = 0 goto 002 endif do RAB=1, NRI(RAA) do RAC=1, RAA RING_ID(RAC) = OSAVED(RAA,RAB,RAC) enddo call send_rings_opengl (IDSEARCH, STEP-1, RAA, RAB-1, RING_ID) enddo enddo RINGS_TO_OGL_BIS = 1 if (allocated(RING_ID)) deallocate(RING_ID) 002 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID, RING_JD if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_ID "//CHAR(0)) RINGS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=1, TAILLR RING_ID(i) = 0 do j=1, NS RING_ID(i) = RING_ID(i) + NRI(i,j) enddo if (RING_ID(i) > 0) then k = k + 1 endif enddo if (allocated(RING_JD)) deallocate(RING_JD) allocate(RING_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_JD "//CHAR(0)) RINGS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=1, TAILLR if (RING_ID(i) > 0) then k = k + 1 RING_JD(k) = i endif enddo call send_coord_opengl (4+IDSEARCH, 1, 0, 0, k, k) call init_menurings (4+IDSEARCH, IDSEARCH, k, RING_JD, 1) if (allocated(RING_ID)) deallocate(RING_ID) if (allocated(RING_JD)) deallocate(RING_JD) RINGS_TO_OGL_MENU = 1 001 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_M (IDSEARCH) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID, RING_JD if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_ID "//CHAR(0)) RINGS_TO_OGL_M = 0 goto 001 endif k = 0 do i=1, TAILLR RING_ID(i) = 0 do j=1, NS RING_ID(i) = RING_ID(i) + NRING(i,j) enddo if (RING_ID(i) > 0) then k = k + 1 endif enddo write (6, *) "k= ",k if (allocated(RING_JD)) deallocate(RING_JD) allocate(RING_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_JD "//CHAR(0)) RINGS_TO_OGL_M = 0 goto 001 endif k = 0 do i=1, TAILLR if (RING_ID(i) > 0) then k = k + 1 RING_JD(k) = i endif enddo call send_coord_opengl (4+IDSEARCH, 1, 0, 0, k, k) call init_menurings (4+IDSEARCH, IDSEARCH, k, RING_JD, 1) if (allocated(RING_ID)) deallocate(RING_ID) if (allocated(RING_JD)) deallocate(RING_JD) RINGS_TO_OGL_M = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/dmtx.F900000664000175000017500000013722415212624223016214 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file dmtx.F90 !! @short Distance matrix calculation !! @author Sébastien Le Roux SUBROUTINE PRINT_THIS_PIXEL (TPS, TPIX, PIXL, pix, atoms) USE PARAMETERS IMPLICIT NONE TYPE (PIXEL), DIMENSION(TPS), INTENT(IN) :: TPIX TYPE (PIXEL), INTENT(IN) :: PIXL LOGICAL, INTENT(IN) :: atoms INTEGER, INTENT(IN) :: TPS, pix INTEGER :: PA, PB write (6, '("Pixel= ",i4)') pix do PA=1, PIXL%NEIGHBOR PB = PIXL%IDNEIGH(PA) if (atoms) then write (6, '(" N(",i4,")= ",i10," contains: ",i4," atom(s)")') PA, PIXL%IDNEIGH(PA), TPIX(PB)%ATOMS else write (6, '(" N(",i4,")= ",i10)') PA, PIXL%IDNEIGH(PA) endif enddo write (6, *) if (atoms) then do PA=1, PIXL%ATOMS write (6, '(" At(",i4,")= ",i10)') PA, PIXL%ATOM_ID(PA) enddo write (6, *) endif END SUBROUTINE SUBROUTINE SET_SHIFT (shift, ai, bi, ci, npa, npb, npc, nab, abc) IMPLICIT NONE INTEGER, DIMENSION(3,3,3), INTENT(INOUT) :: shift INTEGER, INTENT(IN) :: ai, bi, ci INTEGER, INTENT(IN) :: npa, npb, npc INTEGER, INTENT(IN) :: nab, abc ! Standard pixel positions: ! Lower level !shift(1,1,1) = nab+npa+1 !shift(1,1,2) = nab+npa !shift(1,1,3) = nab+npa-1 !shift(1,2,1) = nab+1 !shift(1,2,2) = nab !shift(1,2,3) = nab-1 !shift(1,3,1) = nab-npa+1 !shift(1,3,2) = nab-npa !shift(1,3,3) = nab-npa-1 ! Same level !shift(2,1,1) = npa+1 !shift(2,1,2) = npa !shift(2,1,3) = npa-1 !shift(2,2,1) = 1 !shift(2,2,2) = 0 !shift(2,2,3) = -1 !shift(2,3,1) = -npa+1 !shift(2,3,2) = -npa !shift(2,3,3) = -npa-1 ! Higher level !shift(3,1,1) = npa+1-nab !shift(3,1,2) = npa-nab !shift(3,1,3) = npa-1-nab !shift(3,2,1) = 1-nab !shift(3,2,2) = -nab !shift(3,2,3) = -1-nab !shift(3,3,1) = -npa+1-nab !shift(3,3,2) = -npa-nab !shift(3,3,3) = -npa-1-nab ! The shift is to compensate PBC if (ai .eq. 1) then shift (1,:,:) = npa else if (ai .eq. npa) then shift (3,:,:) = - npa endif if (bi .eq. 1) then shift (:,1,:) = shift (:,1,:) + nab else if (bi .eq. npb) then shift (:,3,:) = shift (:,3,:) - nab endif if (ci .eq. 1) then shift (:,:,1) = shift (:,:,1) + abc else if (ci .eq. npc) then shift (:,:,3) = shift (:,:,3) - abc endif END SUBROUTINE INTEGER FUNCTION GETNBX(NP, NPS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NP, NPS INTEGER :: PIA, PIB, PIC, PID INTEGER :: TPIXD, ADAPT_CUT DOUBLE PRECISION :: ICUT, INID DOUBLE PRECISION :: MPSIZE DOUBLE PRECISION :: NEW_MPSIZE DOUBLE PRECISION :: TARGETDP DOUBLE PRECISION :: RHONUM INTEGER :: MEMOID if (.not.PBC) then do PIA=1, 3 pmin(PIA)=FULLPOS(1,PIA,1) pmax(PIA)=pmin(PIA) enddo do PIA=1, NPS if (PIA.eq.1) then PID=2 else PID=1 endif do PIB=PID, NP do PIC=1, 3 pmin(PIC) = min(FULLPOS(PIB,PIC,PIA),pmin(PIC)) pmax(PIC) = max(FULLPOS(PIB,PIC,PIA),pmax(PIC)) enddo enddo enddo do PIA=1, 3 pmax(PIA) = pmax(PIA) - pmin(PIA) enddo else pmax(:) = 0.0d0 do PIB=1, NCELLS do PIA=1, 3 pmax(PIA) = max(pmax(PIA), THE_BOX(PIB)%modv(PIA)) enddo enddo do PIA=1, 3 pmin(PIA) = - pmax(PIA)/2.0 enddo endif #ifdef DEBUG write (6, '("pmin:: x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') pmin(1), pmin(2), pmin(3) write (6, '("pmax:: x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') pmax(1), pmax(2), pmax(3) #endif ICUT=0.0 do PIA=1, NSP do PIB=1, NSP ICUT=max(ICUT,Gr_TMP(PIA,PIB)) enddo enddo ICUT = sqrt(ICUT) ICUT = ICUT + 1.0d0 ! The pixel size must be larger than the cutoff ! If the system is large with a low density the pixel box can be too big in number of pixels, ! and it is not possible to allocate the required memory. ! Therefore it is required to increase the cutoff slightly to reduce the number of pixels. ! We need to look into the density of atoms per pixel, good target values range between 1.5 and 2.0. ! With PBC this works providing that you do not have a large box that contains an isolated molecule, ! That is an extremely low number density, thus we need to check that as well. TARGETDP=1.85d0 MPSIZE=1.0d0 ! Always adjust cutoff if periodicity is not applied ADAPT_CUT=2 ! Number density RHONUM=NP do PIA=1, 3 RHONUM=RHONUM/pmax(PIA) enddo if (RHONUM.gt.0.01) ADAPT_CUT=1 do TPIXD=1, ADAPT_CUT ! MPSIZE is the modifier CUTF=ICUT*MPSIZE CUTF=1.0d0/CUTF do PIA=1, 3 isize(PIA) = INT(abs(pmax(PIA))*CUTF) if (isize(PIA) .lt. 3) isize(PIA) = 1 enddo GETNBX = 1 if (CALC_PRINGS .and. PBC) then GETNBX = 5 do PIA=1, 3 pmin(PIA) = GETNBX*pmin(PIA) pmax(PIA) = GETNBX*pmax(PIA) enddo do PIA=1, 3 isize(PIA) = INT(abs(pmax(PIA))*CUTF) if (isize(PIA) .lt. 3) isize(PIA) = 1 enddo endif if (TPIXD .eq. 1) then PIA = isize(1)*isize(2)*isize(3) INID = NP INID = INID/PIA NEW_MPSIZE = (TARGETDP/INID)**(1.0/3.0) if (NEW_MPSIZE .gt. MPSIZE) then ! Adaptation only if the cutoff increases ! Otherwise we would increase the number of pixels MPSIZE = NEW_MPSIZE endif endif enddo #ifdef DEBUG write (6, '("NBX= ",i10)') GETNBX write (6, '("isize:: x= ",I4,", y= ",I4,", z= ",I4)') isize(1), isize(2), isize(3) MEMOID = GUESS_GRID_MEMORY_SIZE(isize(1)*isize(2)*isize(3)) write (6, '("Estimated memory required to store the entire pixel grid in Mb : ",f15.10)') MEMOID/1000000.0d0 write (6, '("Estimated memory required to store the entire pixel grid in Mo : ",f15.10)') MEMOID/8000000.0d0 CONTAINS INTEGER FUNCTION GUESS_GRID_MEMORY_SIZE (abc) INTEGER, INTENT(IN) :: abc allocate(THEPIX(1)) allocate(THEPIX(1)%ATOM_ID(50)) GUESS_GRID_MEMORY_SIZE = storage_size(THEPIX)*abc deallocate(THEPIX(1)%ATOM_ID) deallocate(THEPIX) END FUNCTION #endif END FUNCTION #ifdef DEBUG SUBROUTINE PRINT_PIXEL_GRID () USE PARAMETERS IMPLICIT NONE INTEGER :: pix, pid, cid, did, eid, ai, bi, ci INTEGER :: init_a, end_a INTEGER :: init_b, end_b INTEGER :: init_c, end_c INTEGER, DIMENSION(3) :: dim INTEGER, DIMENSION(3,3,3) :: shift LOGICAL :: boundary, keep_it dim(1) = -1 dim(2) = 0 dim(3) = 1 call pix_info (isize(1), isize(2), isize(3)) allocate(THEPIX(abc)) pix=1 do ci=1, isize(3) do bi=1, isize(2) do ai=1, isize(1) shift(:,:,:) = 0 if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3), ab, abc) boundary=.false. else if (ai.eq.1 .or. ai.eq.isize(1)) boundary=.true. if (bi.eq.1 .or. bi.eq.isize(2)) boundary=.true. if (ci.eq.1 .or. ci.eq.isize(3)) boundary=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif pid = 0 do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c keep_it=.true. if (boundary) then if (ai.eq.1 .and. cid.eq.1) then keep_it=.false. else if (ai.eq.isize(1) .and. cid.eq.3) then keep_it=.false. else if (bi.eq.1 .and. did.eq.1) then keep_it=.false. else if (bi.eq.isize(2) .and. did.eq.3) then keep_it=.false. else if (ci.eq.1 .and. eid.eq.1) then keep_it=.false. else if (ci.eq.isize(3) .and. eid.eq.3) then keep_it=.false. endif endif if (keep_it) then pid = pid + 1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * ab THEPIX(pix)%IDNEIGH(pid) = THEPIX(pix)%IDNEIGH(pid) + shift (cid,did,eid) endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid call send_pix_info (pix-1, THEPIX(pix)%IDNEIGH, pid) ! call PRINT_THIS_PIXEL (abc, THEPIX, THEPIX(pix), pix, .false.) pix = pix + 1 enddo enddo enddo END SUBROUTINE #endif LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB) ! ! Compute the distance matrix - neighbors table ! USE PARAMETERS USE MENDELEIEV #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB INTEGER :: SAT INTEGER :: RA, RB, RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM INTEGER :: RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ INTEGER :: A_START, A_END INTEGER :: pix DOUBLE PRECISION :: Dik DOUBLE PRECISION :: MAXBD, MINBD INTEGER, DIMENSION(:), ALLOCATABLE :: BA, BB INTEGER, DIMENSION(:), ALLOCATABLE :: CA, CB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XC, YC, ZC LOGICAL :: CALCMAT=.false. ! Error message info ! LOGICAL :: TOOM=.false. INTEGER :: TOOI LOGICAL :: PIXR=.false. INTEGER :: POUT ! LOGICAL :: IS_CLONE, boundary, keep_it INTEGER, DIMENSION(3) :: pixpos DOUBLE PRECISION, DIMENSION(3) :: XYZ, UVW INTEGER :: pid, cid, did, eid, fid, ai, bi, ci INTEGER :: init_a, end_a INTEGER :: init_b, end_b INTEGER :: init_c, end_c INTEGER, DIMENSION(3) :: dim = (/-1, 0, 1/) INTEGER, DIMENSION(3,3,3) :: shift #ifdef OPENMP INTEGER :: NUMTH INTEGER :: THREAD_NUM INTEGER :: ATOM_START, ATOM_END INTEGER, DIMENSION(:), ALLOCATABLE :: ATPIX LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION GETNBX (NP, NPS) INTEGER, INTENT(IN) :: NP, NPS END FUNCTION LOGICAL FUNCTION dvtbox (ST, NAS, NAT, NPOS) INTEGER, INTENT(IN) :: ST, NAS, NAT DOUBLE PRECISION, DIMENSION(NAT,3), INTENT(INOUT) :: NPOS END FUNCTION #ifdef OPENMP INTEGER FUNCTION GET_THREAD_START (NOBJ, NTHREADS, THREAD_ID) INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID END FUNCTION INTEGER FUNCTION GET_THREAD_END (NOBJ, NTHREADS, THREAD_ID) INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID END FUNCTION #endif DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SPHERES_CAPS_VOLUMES (DAB, RAP, RBP) DOUBLE PRECISION, INTENT(IN) :: DAB, RAP, RBP END FUNCTION END INTERFACE #ifdef DEBUG write (6, '("In DMTX:: LOOKNGB= ",L1, ", NOHOM= ",L1," PBC= ",L1,", CUBIC= ",L1)') LOOKNGB, NOHP, PBC, OVERALL_CUBIC #endif if (allocated(Gr_TMP)) deallocate(Gr_TMP) allocate(Gr_TMP(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VOISJ" ALC=.true. DISTMTX=.false. goto 001 endif do i=1, NSP do j=1, NSP if (Gr_CUT(i,j) .gt. Gr_cutoff) then Gr_TMP(i,j)=Gr_cutoff else Gr_TMP(i,j)=Gr_CUT(i,j) endif if (.not.LOOKNGB) Gr_TMP(i,j) = Gr_TMP(i,j) + 50.0 enddo enddo NBX = GETNBX (NAN, NS) if (PBC) then NNA = NBX**3*NAN else NNA = NAN endif if (LOOKNGB) then if (allocated(VOISJ)) deallocate(VOISJ) allocate(VOISJ(MAXN,NNA,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VOISJ" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(CONTJ)) deallocate(CONTJ) allocate(CONTJ(NNA,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CONTJ" ALC=.true. DISTMTX=.false. goto 001 endif CONTJ(:,:)=0 VOISJ(:,:,:)=0 endif if (LOOKNGB) then MAXBD=0.0d0 MINBD=10.0d0 endif if (CALC_PRINGS) then A_START = 1 A_END = NNA else A_START = NAN *(NBX**3 - 1)/2 + 1 A_END = A_START + NAN - 1 endif ab = isize(1)*isize(2) abc = ab*isize(3) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. TOOM=.false. #ifdef DEBUG call PRINT_PIXEL_GRID () #endif if (DOATOMS) then ! OpemMP on Atoms if (NAN.lt.NUMTH) NUMTH=NAN DISTMTX=.true. if (NBX.gt.1) then allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 001 endif endif do SAT=1, NS if (NBX.gt.1) then if (.not.dvtbox(SAT, NA, NNA, POA)) then DISTMTX=.false. goto 001 endif endif if (allocated(THEPIX)) deallocate(THEPIX) allocate(THEPIX(abc), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX" ALC=.true. DISTMTX = .false. goto 001 endif if (allocated(ATPIX)) deallocate(ATPIX) allocate(ATPIX(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATPIX" ALC=.true. DISTMTX = .false. goto 001 endif RA = INT(MAXN*2.5) ! 1) LOOKNGB: "RA" is the number of atom(s) in one pixel ! with MAXN = 20, the '50' value seems high enough ! to ensure to catch every atom in the pixel ! this is ok providing that no funny cutoff is used ! 2) .not.LOOKNGB: looking for tetrahedra, requires larger value: if (.not.LOOKNGB) RA = MAXN*10 if (.not.LOOKNGB .or. abc .le. 5) RA = min(RA*5, NNA) do RB=1, abc THEPIX(RB)%ATOMS=0 THEPIX(RB)%TOCHECK=.false. THEPIX(RB)%CHECKED=.false. allocate(THEPIX(RB)%ATOM_ID(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX%ATOM_ID" ALC=.true. DISTMTX = .false. goto 001 endif THEPIX(RB)%IDNEIGH(:) = 0 THEPIX(RB)%ATOM_ID(:) = 0 enddo do RA=1, NNA if (.not. PBC) then do RB=1, 3 if (isize(RB) .eq. 1) then pixpos(RB) = 0 else pixpos(RB) = INT((FULLPOS(RA,RB,SAT) - pmin(RB))*CUTF) if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 endif enddo else if (NBX .gt. 1) then if (NCELLS.gt.1) then XYZ = MATMUL(POA(RA,:), THE_BOX(SAT)%carttofrac/NBX) else XYZ = MATMUL(POA(RA,:), THE_BOX(1)%carttofrac/NBX) endif else if (NCELLS.gt.1) then XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(SAT)%carttofrac) else XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(1)%carttofrac) endif endif do RB=1, 3 UVW(RB) = XYZ(RB) - floor(XYZ(RB)) pixpos(RB) = INT(UVW(RB)*isize(RB)) ! if (pixpos(RD) .eq. isize(RD)) pixpos(RD) = pixpos(RD)-1 enddo endif pix = pixpos(1) + pixpos(2)*isize(1) + pixpos(3)*ab + 1 if (pix.gt.abc .or. pix.le.0) then write (6, '("Thread(id)= ",i4,", MD step= ",i8)') THREAD_NUM, SAT if (NBX .gt. 1) then write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, POA(RA,:) else write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, FULLPOS(RA,:,SAT) endif if (PBC) then write (6, '("at= ",i7,", fra(x)= ",f15.10,", fra(y)= ",f15.10,", fra(z)= ",f15.10)') RA, XYZ write (6, '("at= ",i7,", cor(x)= ",f15.10,", cor(y)= ",f15.10,", cor(z)= ",f15.10)') RA, UVW endif write (6, '("at= ",i7,", pixpos(x)= ",i4,", pixpos(y)= ",i4,", pixpos(z)= ",i4)') RA, pixpos write (6, '("at= ",i7,", pixpos= ",i10)') RA, pix PIXR=.true. POUT=pix DISTMTX=.false. goto 001 else if ((PBC .and. RA.ge.A_START .and. RA.le.A_END) .or. .not.PBC) then if (.not.THEPIX(pix)%TOCHECK) then ai = pixpos(1) + 1 bi = pixpos(2) + 1 ci = pixpos(3) + 1 pid = 0 shift(:,:,:) = 0 boundary=.false. if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3), ab, abc) else if (ai.eq.1 .or. ai.eq.isize(1)) boundary=.true. if (bi.eq.1 .or. bi.eq.isize(2)) boundary=.true. if (ci.eq.1 .or. ci.eq.isize(3)) boundary=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c keep_it=.true. if (boundary) then if (ai.eq.1 .and. cid.eq.1) then keep_it=.false. else if (ai.eq.isize(1) .and. cid.eq.3) then keep_it=.false. else if (bi.eq.1 .and. did.eq.1) then keep_it=.false. else if (bi.eq.isize(2) .and. did.eq.3) then keep_it=.false. else if (ci.eq.1 .and. eid.eq.1) then keep_it=.false. else if (ci.eq.isize(3) .and. eid.eq.3) then keep_it=.false. endif endif if (keep_it) then pid = pid+1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * ab + shift (cid,did,eid) endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid endif THEPIX(pix)%TOCHECK=.true. endif THEPIX(pix)%ATOMS = THEPIX(pix)%ATOMS + 1 THEPIX(pix)%ATOM_ID(THEPIX(pix)%ATOMS) = RA endif ATPIX(RA) = pix enddo RA = 0 RB = 0 !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THREAD_NUM, ATOM_START, ATOM_END, & !$OMP& RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM, & !$OMP& RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ, ERR, ai, bi, ci, & !$OMP& IS_CLONE, CALCMAT, Dij, Rij, Dik, BA, BB, CA, CB, XC, YC, ZC) & !$OMP& SHARED(NUMTH, SAT, NS, NA, NNA, NAN, LAN, NSP, LOOKNGB, UPNGB, DISTMTX, & !$OMP& NBX, PBC, THE_BOX, NCELLS, A_START, A_END, NOHP, MAXN, CUTF, & !$OMP& POA, FULLPOS, Gr_TMP, CALC_PRINGS, MAXBD, MINBD, CONTJ, VOISJ, RA, RB, & !$OMP& LA_COUNT, CORTA, CORNERA, EDGETA, EDGEA, DEFTA, DEFA, & !$OMP& ALC, ALC_TAB, TOOM, TOOI, THEPIX, ATPIX) THREAD_NUM = OMP_GET_THREAD_NUM () ATOM_START = GET_THREAD_START (NNA, NUMTH, THREAD_NUM) ATOM_END = GET_THREAD_END (NNA, NUMTH, THREAD_NUM) do RC=ATOM_START, ATOM_END RD = ATPIX(RC) RF = RC - (RC/NAN)*NAN if (RF .eq. 0) RF=NAN RG = LAN(RF) do RH=1, THEPIX(RD)%NEIGHBOR RI = THEPIX(RD)%IDNEIGH(RH) RJ = THEPIX(RI)%ATOMS do RK=1, RJ RL = THEPIX(RI)%ATOM_ID(RK) if (RL .ne. RC) then if ((RC.ge.A_START .and. RC.le.A_END) .or. (RL.ge.A_START .and. RL.le.A_END)) then RM = RL - (RL/NAN)*NAN if (RM .eq. 0) RM=NAN RN = LAN(RM) if (LOOKNGB) then if (.not.PBC .or. NBX.gt.1) then if (((RC.ge.A_START .and. RC.le.A_END) .and. (RL.ge.A_START .and. RL.le.A_END)) .or. .not.PBC) then IS_CLONE=.false. else IS_CLONE=.true. endif else IS_CLONE=.false. endif if (RG.ne.RN .or. .not.NOHP) then CALCMAT=.true. else CALCMAT=.false. endif if (CALCMAT) then Dij=0.0d0 if (NBX.gt.1) then do RP=1,3 Rij(RP) = POA(RC,RP) - POA(RL,RP) Dij=Dij+Rij(RP)**2 enddo else Dik=0.0d0 do RP=1,3 Rij(RP) = FULLPOS(RF,RP,SAT) - FULLPOS(RM,RP,SAT) Dik=Dik+Rij(RP)**2 enddo if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RF,RM,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RF,RM,SAT,SAT,1) endif if (Dik-Dij .gt.0.01d0) then IS_CLONE=.true. endif endif if (Dij .le. Gr_TMP(RG,RN)) then !$OMP ATOMIC MAXBD=max(Dij,MAXBD) !$OMP ATOMIC MINBD=min(Dij,MINBD) if (CALC_PRINGS) then RP = RC RQ = RL else RP = RF RQ = RM endif CONTJ(RP,SAT)=CONTJ(RP,SAT)+1 if (CONTJ(RP,SAT) .gt. MAXN) then TOOM=.true. TOOI=RP DISTMTX=.false. goto 002 endif VOISJ(CONTJ(RP,SAT),RP,SAT)=RQ if (.not.CALC_PRINGS .and. UPNGB) then if (IS_CLONE) then VOISJ(CONTJ(RP,SAT),RP,SAT)=-RQ !$OMP ATOMIC RB = RB + 1 else !$OMP ATOMIC RA = RA + 1 endif endif endif endif else if (RG .eq. RN) then do RO=1, NSP if (LA_COUNT(RF,RO,SAT).eq.4 .and. CONTJ(RF,SAT).eq.4) then if (LA_COUNT(RM,RO,SAT).eq.4 .and. CONTJ(RM,SAT).eq.4) then RP=0 do RQ=1, 4 RS = VOISJ(RQ,RF,SAT) do RT=1, CONTJ(RS,SAT) if (VOISJ(RT,RS,SAT) .eq. RM) RP=RP+1 enddo enddo if (RP.eq.1) then !$OMP ATOMIC CORTA(RG,RO)=CORTA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC CORNERA(RG,RO,SAT)=CORNERA(RG,RO,SAT)+1 endif elseif (RP.eq.2) then !$OMP ATOMIC EDGETA(RG,RO)=EDGETA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC EDGEA(RG,RO,SAT)=EDGEA(RG,RO,SAT)+1 endif elseif (RP.ge.3) then !$OMP ATOMIC CORTA(RG,RO)=CORTA(RG,RO)+1 !$OMP ATOMIC EDGETA(RG,RO)=EDGETA(RG,RO)+1 !$OMP ATOMIC DEFTA(RG,RO)=DEFTA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC CORNERA(RG,RO,SAT)=CORNERA(RG,RO,SAT)+1 !$OMP ATOMIC EDGEA(RG,RO,SAT)=EDGEA(RG,RO,SAT)+1 !$OMP ATOMIC DEFA(RG,RO,SAT)=DEFA(RG,RO,SAT)+1 endif endif endif endif enddo endif endif endif endif enddo enddo enddo 002 continue !$OMP END PARALLEL if (allocated(THEPIX)) then do RC=1, abc if (allocated(THEPIX(RC)%ATOM_ID)) deallocate(THEPIX(RC)%ATOM_ID) enddo deallocate(THEPIX) endif if (allocated(ATPIX)) deallocate(ATPIX) if (.not.DISTMTX) then goto 001 endif if (.not.LOOKNGB) then do RC=1, NSP do RD=1, NSP CORTA(RC,RD)=CORTA(RC,RD)/2 EDGETA(RC,RD)=EDGETA(RC,RD)/2 DEFTA(RC,RD)=DEFTA(RC,RD)/2 if (NS .gt. 1) then CORNERA(RC,RD,SAT)=CORNERA(RC,RD,SAT)/2 EDGEA(RC,RD,SAT)=EDGEA(RC,RD,SAT)/2 DEFA(RC,RD,SAT)=DEFA(RC,RD,SAT)/2 endif enddo enddo endif if (.not.CALC_PRINGS .and.UPNGB) then if (RA .gt. 0) then if (allocated(BA)) deallocate(BA) allocate(BA(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BA" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(BB)) deallocate(BB) allocate(BB(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BB" ALC=.true. DISTMTX=.false. goto 001 endif endif if (RB .gt. 0) then if (allocated(CA)) deallocate(CA) allocate(CA(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CA" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(CB)) deallocate(CB) allocate(CB(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CB" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(XC)) deallocate(XC) allocate(XC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="XC" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(YC)) deallocate(YC) allocate(YC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="YC" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(ZC)) deallocate(ZC) allocate(ZC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ZC" ALC=.true. DISTMTX=.false. goto 001 endif endif if (RA.gt.0 .or. RB.gt.0) then RA=0 RB=0 do RC=1, NNA do RD=1, CONTJ(RC,SAT) RF = VOISJ(RD,RC,SAT) if (RF .gt. 0) then if (RF.gt.RC) then RA=RA+1 BA(RA) = RC BB(RA) = RF endif else VOISJ(RD,RC,SAT) = -RF RF=-RF if (RF.gt.RC) then RB=RB+1 CA(RB) = RC CB(RB) = RF if (NCELLS .gt. 1) then call CALCRIJ (RC,RF,SAT,SAT,SAT) else call CALCRIJ (RC,RF,SAT,SAT,1) endif XC(RB) = Rij(1) YC(RB) = Rij(2) ZC(RB) = Rij(3) endif endif enddo enddo endif call update_bonds (0, SAT-1, RA, BA, BB, XC, YC, ZC) call update_bonds (1, SAT-1, RB, CA, CB, XC, YC, ZC) do RC=1, NNA call update_atom_neighbors (SAT-1, RC-1, CONTJ(RC,SAT)) do RD=1, CONTJ(RC,SAT) call update_this_neighbor (SAT-1, RC-1, RD-1, VOISJ(RD,RC,SAT)) enddo enddo endif enddo ! En MD steps loop else ! OpemMP on MD steps DISTMTX=.true. !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THEPIX, SAT, pix, pixpos, XYZ, UVW, shift, ai, bi, ci, & !$OMP& RA, RB, RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM, & !$OMP& RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ, ERR, & !$OMP& IS_CLONE, CALCMAT, Dij, Rij, Dik, BA, BB, CA, CB, XC, YC, ZC, POA, & !$OMP& pid, cid, did, eid, fid, init_a, end_a, init_b, end_b, init_c, end_c, boundary, keep_it) & !$OMP& SHARED(NUMTH, NS, NA, NNA, NAN, LAN, NSP, LOOKNGB, UPNGB, DISTMTX, & !$OMP& NBX, PBC, THE_BOX, NCELLS, isize, pmin, pmax, abc, ab, A_START, A_END, NOHP, MAXN, CUTF, & !$OMP& FULLPOS, CONTJ, VOISJ, Gr_TMP, CALC_PRINGS, MAXBD, MINBD, & !$OMP& LA_COUNT, CORTA, CORNERA, EDGETA, EDGEA, DEFTA, DEFA, & !$OMP& ALC, ALC_TAB, TOOM, TOOI, PIXR, POUT, dim) #endif if (allocated(THEPIX)) deallocate(THEPIX) allocate(THEPIX(abc), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX" ALC=.true. DISTMTX = .false. #ifdef OPENMP goto 006 #else goto 001 #endif endif RA = INT(MAXN*2.5) ! 1) LOOKNGB: "RA" is the number of atom(s) in one pixel ! with MAXN = 20, the '50' value seems high enough ! to ensure to catch every atom in the pixel ! this is ok providing that no funny cutoff is used ! 2) .not.LOOKNGB: looking for tetrahedra, requires larger value: if (.not.LOOKNGB) RA = MAXN*10 if (.not.LOOKNGB .or. abc .le. 5) RA = min(RA*5, NNA) do RB=1, abc THEPIX(RB)%ATOMS=0 THEPIX(RB)%TOCHECK=.false. THEPIX(RB)%CHECKED=.false. allocate(THEPIX(RB)%ATOM_ID(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX%ATOM_ID" ALC=.true. DISTMTX = .false. #ifdef OPENMP goto 006 #else goto 001 #endif endif THEPIX(RB)%IDNEIGH(:) = 0 THEPIX(RB)%ATOM_ID(:) = 0 enddo #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) do SAT=1, NS if (.not.DISTMTX) goto 007 #else if (allocated(POA)) deallocate (POA) allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 001 endif do SAT=1, NS #endif if (NBX.gt.1) then #ifdef OPENMP if (allocated(POA)) deallocate (POA) allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 007 endif #endif if (.not.dvtbox(SAT, NA, NNA, POA)) then DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif ! Clean THEPIX for each and every MD step do RA=1, abc THEPIX(RA)%ATOMS=0 THEPIX(RA)%TOCHECK=.false. THEPIX(RA)%CHECKED=.false. THEPIX(RA)%IDNEIGH(:) = 0 THEPIX(RA)%ATOM_ID(:) = 0 enddo do RA=1, NNA if (.not. PBC) then do RB=1, 3 if (isize(RB) .eq. 1) then pixpos(RB) = 0 else pixpos(RB) = INT((FULLPOS(RA,RB,SAT) - pmin(RB))*CUTF) if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 endif enddo else if (NBX .gt. 1) then if (NCELLS.gt.1) then XYZ = MATMUL(POA(RA,:), THE_BOX(SAT)%carttofrac/NBX) else XYZ = MATMUL(POA(RA,:), THE_BOX(1)%carttofrac/NBX) endif else if (NCELLS.gt.1) then XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(SAT)%carttofrac) else XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(1)%carttofrac) endif endif do RB=1, 3 UVW(RB) = XYZ(RB) - floor(XYZ(RB)) pixpos(RB) = INT(UVW(RB)*isize(RB)) ! if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 enddo endif pix = pixpos(1) + pixpos(2)*isize(1) + pixpos(3)*ab + 1 if (pix.gt.abc .or. pix.le.0) then #ifdef OPENMP write (6, '("Thread(id)= ",i4,", MD step= ",i8)') OMP_GET_THREAD_NUM(), SAT #else write (6, '("MD step= ",i8)') SAT #endif if (NBX.gt.1) then write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, POA(RA,:) else write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, FULLPOS(RA,:,SAT) endif if (PBC) then write (6, '("at= ",i7,", fra(x)= ",f15.10,", fra(y)= ",f15.10,", fra(z)= ",f15.10)') RA, XYZ write (6, '("at= ",i7,", cor(x)= ",f15.10,", cor(y)= ",f15.10,", cor(z)= ",f15.10)') RA, UVW endif write (6, '("at= ",i7,", pixpos(x)= ",i4,", pixpos(y)= ",i4,", pixpos(z)= ",i4)') RA, pixpos write (6, '("at= ",i7,", pixpos= ",i10)') RA, pix PIXR=.true. POUT=pix DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif else if ((PBC .and. RA.ge.A_START .and. RA.le.A_END) .or. .not.PBC) then if (.not.THEPIX(pix)%TOCHECK) then dim(1) = -1 dim(2) = 0 dim(3) = 1 ai = pixpos(1) + 1 bi = pixpos(2) + 1 ci = pixpos(3) + 1 pid = 0 shift(:,:,:) = 0 boundary=.false. if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3), ab, abc) else if (ai.eq.1 .or. ai.eq.isize(1)) boundary=.true. if (bi.eq.1 .or. bi.eq.isize(2)) boundary=.true. if (ci.eq.1 .or. ci.eq.isize(3)) boundary=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c keep_it=.true. if (boundary) then if (ai.eq.1 .and. cid.eq.1) then keep_it=.false. else if (ai.eq.isize(1) .and. cid.eq.3) then keep_it=.false. else if (bi.eq.1 .and. did.eq.1) then keep_it=.false. else if (bi.eq.isize(2) .and. did.eq.3) then keep_it=.false. else if (ci.eq.1 .and. eid.eq.1) then keep_it=.false. else if (ci.eq.isize(3) .and. eid.eq.3) then keep_it=.false. endif endif if (keep_it) then pid = pid+1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * ab + shift (cid,did,eid) endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid endif THEPIX(pix)%TOCHECK=.true. endif THEPIX(pix)%ATOMS = THEPIX(pix)%ATOMS + 1 THEPIX(pix)%ATOM_ID(THEPIX(pix)%ATOMS) = RA endif enddo RA = 0 RB = 0 do RC=1, abc if (THEPIX(RC)%TOCHECK) then RD = THEPIX(RC)%ATOMS if (RD .gt. 0) then do RF=1, THEPIX(RC)%NEIGHBOR RG = THEPIX(RC)%IDNEIGH(RF) if (.not.THEPIX(RG)%CHECKED) then RH = THEPIX(RG)%ATOMS if (RH .gt. 0) then if (RC .eq. RG) then RI=1 else RI=0 endif do RJ=1, RD-RI RK = THEPIX(RC)%ATOM_ID(RJ) do RM=RI*RJ+1, RH RN = THEPIX(RG)%ATOM_ID(RM) if ((RK.ge.A_START .and. RK.le.A_END) .or. (RN.ge.A_START .and. RN.le.A_END)) then RP=RK - (RK/NAN)*NAN RQ=RN - (RN/NAN)*NAN if (RP .eq. 0) RP=NAN if (RQ .eq. 0) RQ=NAN if (RP .ne. RQ) then RL=LAN(RP) RO=LAN(RQ) if (LOOKNGB) then if (.not.PBC .or. NBX.gt.1) then if (((RK.ge.A_START .and. RK.le.A_END) .and. (RN.ge.A_START .and. RN.le.A_END)) .or. .not.PBC) then IS_CLONE=.false. else IS_CLONE=.true. endif else IS_CLONE=.false. endif if (RL.ne.RO .or. .not.NOHP) then CALCMAT=.true. else CALCMAT=.false. endif if (CALCMAT) then Dij=0.0d0 if (NBX.gt.1) then do RS=1,3 Rij(RS) = POA(RK,RS) - POA(RN,RS) Dij=Dij+Rij(RS)**2 enddo else Dik=0.0d0 do RS=1,3 Rij(RS) = FULLPOS(RP,RS,SAT) - FULLPOS(RQ,RS,SAT) Dik=Dik+Rij(RS)**2 enddo if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RP,RQ,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RP,RQ,SAT,SAT,1) endif if (Dik-Dij .gt.0.01d0) then IS_CLONE=.true. endif endif if (Dij .le. Gr_TMP(RL,RO)) then #ifdef OPENMP !$OMP ATOMIC #endif MAXBD=max(Dij,MAXBD) #ifdef OPENMP !$OMP ATOMIC #endif MINBD=min(Dij,MINBD) if (CALC_PRINGS) then RT = RK RU = RN else RT = RP RU = RQ endif CONTJ(RT,SAT)=CONTJ(RT,SAT)+1 if (CONTJ(RT,SAT) .gt. MAXN) then TOOM=.true. TOOI=RT DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif VOISJ(CONTJ(RT,SAT),RT,SAT)=RU CONTJ(RU,SAT)=CONTJ(RU,SAT)+1 if (CONTJ(RU,SAT) .gt. MAXN) then TOOM=.true. TOOI=RU DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif VOISJ(CONTJ(RU,SAT),RU,SAT)=RT if (.not.CALC_PRINGS .and. UPNGB) then if (IS_CLONE) then RB = RB + 1 VOISJ(CONTJ(RT,SAT),RT,SAT)=-RU VOISJ(CONTJ(RU,SAT),RU,SAT)=-RT else RA = RA + 1 endif endif endif endif else if (RL .eq. RO) then do RV=1, NSP if (LA_COUNT(RP,RV,SAT).eq.4 .and. CONTJ(RP,SAT).eq.4) then if (LA_COUNT(RQ,RV,SAT).eq.4 .and. CONTJ(RQ,SAT).eq.4) then RW=0 do RX=1, 4 RY = VOISJ(RX,RP,SAT) do RZ=1, CONTJ(RY,SAT) if (VOISJ(RZ,RY,SAT) .eq. RQ) RW=RW+1 enddo enddo if (RW.eq.1) then #ifdef OPENMP !$OMP ATOMIC #endif CORTA(RL,RV)=CORTA(RL,RV)+1 if (NS .gt. 1) CORNERA(RL,RV,SAT)=CORNERA(RL,RV,SAT)+1 elseif (RW.eq.2) then #ifdef OPENMP !$OMP ATOMIC #endif EDGETA(RL,RV)=EDGETA(RL,RV)+1 if (NS .gt. 1) EDGEA(RL,RV,SAT)=EDGEA(RL,RV,SAT)+1 elseif (RW.ge.3) then #ifdef OPENMP !$OMP ATOMIC #endif CORTA(RL,RV)=CORTA(RL,RV)+1 #ifdef OPENMP !$OMP ATOMIC #endif EDGETA(RL,RV)=EDGETA(RL,RV)+1 #ifdef OPENMP !$OMP ATOMIC #endif DEFTA(RL,RV)=DEFTA(RL,RV)+1 if (NS .gt. 1) then CORNERA(RL,RV,SAT)=CORNERA(RL,RV,SAT)+1 EDGEA(RL,RV,SAT)=EDGEA(RL,RV,SAT)+1 DEFA(RL,RV,SAT)=DEFA(RL,RV,SAT)+1 endif endif endif endif enddo endif endif endif endif enddo enddo endif endif enddo THEPIX(RC)%CHECKED=.true. endif endif enddo if (.not.CALC_PRINGS .and.UPNGB) then if (RA .gt. 0) then if (allocated(BA)) deallocate(BA) allocate(BA(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BA" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(BB)) deallocate(BB) allocate(BB(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BB" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif if (RB .gt. 0) then if (allocated(CA)) deallocate(CA) allocate(CA(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CA" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(CB)) deallocate(CB) allocate(CB(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CB" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(XC)) deallocate(XC) allocate(XC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="XC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(YC)) deallocate(YC) allocate(YC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="YC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(ZC)) deallocate(ZC) allocate(ZC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ZC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif if (RA.gt.0 .or. RB.gt.0) then RA=0 RB=0 do RC=1, NNA do RD=1, CONTJ(RC,SAT) RF = VOISJ(RD,RC,SAT) if (RF .gt. 0) then if (RF.gt.RC) then RA=RA+1 BA(RA) = RC BB(RA) = RF endif else VOISJ(RD,RC,SAT) = -RF RF=-RF if (RF.gt.RC) then RB=RB+1 CA(RB) = RC CB(RB) = RF if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RC,RF,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RC,RF,SAT,SAT,1) endif XC(RB) = Rij(1) YC(RB) = Rij(2) ZC(RB) = Rij(3) endif endif enddo enddo endif call update_bonds (0, SAT-1, RA, BA, BB, XC, YC, ZC) call update_bonds (1, SAT-1, RB, CA, CB, XC, YC, ZC) do RC=1, NNA call update_atom_neighbors (SAT-1, RC-1, CONTJ(RC,SAT)) do RD=1, CONTJ(RC,SAT) call update_this_neighbor (SAT-1, RC-1, RD-1, VOISJ(RD,RC,SAT)) enddo enddo endif #ifdef OPENMP 007 continue #endif enddo ! En MD steps loop #ifdef OPENMP !$OMP END DO NOWAIT 006 continue if (allocated(THEPIX)) then do RC=1, abc if (allocated(THEPIX(RC)%ATOM_ID)) deallocate(THEPIX(RC)%ATOM_ID) enddo deallocate(THEPIX) endif !$OMP END PARALLEL if (.not.DISTMTX) goto 001 endif #endif if (UPNGB) then MAXBD = sqrt(MAXBD) MINBD = sqrt(MINBD) if (MAXBD-MINBD .lt. 0.1) then MINBD = MINBD - 0.5; MAXBD = MAXBD + 0.5; endif call recup_dmin_dmax (MINBD, MAXBD) endif DISTMTX=.true. 001 continue if (TOOM) call TOOMUCH(TOOI) if (ALC) then call show_error ("Impossible to allocate memory !"//CHAR(0), & "Function: DMTX"//CHAR(0), CHAR(9)//"Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (PIXR) call PIXOUT (POUT) if (allocated(THEPIX)) then do RC=1, abc if (allocated(THEPIX(RC)%ATOM_ID)) deallocate(THEPIX(RC)%ATOM_ID) enddo deallocate(THEPIX) endif if (allocated(POA)) deallocate(POA) if (allocated(BA)) deallocate(BA) if (allocated(BB)) deallocate(BB) if (allocated(CA)) deallocate(CA) if (allocated(CB)) deallocate(CB) if (allocated(XC)) deallocate(XC) if (allocated(YC)) deallocate(YC) if (allocated(ZC)) deallocate(ZC) CONTAINS END FUNCTION SUBROUTINE PIXOUT (PIX) IMPLICIT NONE INTEGER, INTENT(IN) :: PIX CHARACTER (LEN=15) :: IDPIX call CHARINT(IDPIX, PIX) call show_error ("Pixel size error !"//CHAR(0), & CHAR(9)//"Pixel out of bound(s): "//IDPIX(2:LEN_TRIM(IDPIX))//CHAR(0), & "Function: DMTX"//CHAR(0)) END SUBROUTINE SUBROUTINE TOOMUCH(ATI) IMPLICIT NONE INTEGER, INTENT(IN) :: ATI CHARACTER (LEN=15) :: IDATI call CHARINT(IDATI, ATI) call show_error ("Too much neighbors for atom "//IDATI(2:LEN_TRIM(IDATI))//" (>20)"//CHAR(0), & "Please check:"//ACHAR(10)//CHAR(9)//" - The lattice parameters"//ACHAR(10) & //CHAR(9)//" - The bond cutoff(s)"//ACHAR(10)//CHAR(9)//" - The atomic coordinates"//CHAR(0), & "Function: DMTX"//CHAR(0)) END SUBROUTINE INTEGER (KIND=c_int) FUNCTION rundmtx (PRINGS, VNOHP, VUP) BIND (C,NAME='rundmtx_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: PRINGS, VNOHP, VUP LOGICAL :: DMTXOK=.false. LOGICAL :: UPNG INTERFACE LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB) INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB END FUNCTION END INTERFACE CALC_PRINGS=.false. if (PRINGS .eq. 1) CALC_PRINGS=.true. NOHP=.false. if (VNOHP .eq. 1) NOHP=.true. UPNG=.false. if (VUP .eq. 1) UPNG=.true. DMTXOK = DISTMTX(NA, LOT, .true., UPNG) CALC_PRINGS=.false. if (.not. DMTXOK) then if (allocated(VOISJ)) deallocate(VOISJ) if (allocated(CONTJ)) deallocate(CONTJ) rundmtx=0 goto 001 endif rundmtx=1 001 continue END FUNCTION atomes_1.3.1/src/fortran/clean.F900000664000175000017500000000305015212624223016307 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file clean.F90 !! @short Clean up Fortran90 data !! @author Sébastien Le Roux #if defined (HAVE_CONFIG_H) # include #endif #include "version.h" SUBROUTINE profree () BIND (C,NAME='profree_') USE PARAMETERS IMPLICIT NONE ! deallocation of possibly remaining data if (allocated(FULLPOS)) deallocate(FULLPOS) if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) if (allocated(LOT)) deallocate(LOT) if (allocated(NBSPBS)) deallocate(NBSPBS) if (allocated(TL)) deallocate(TL) if (allocated(ATOMID)) deallocate(ATOMID) if (allocated(MASS)) deallocate(MASS) if (allocated(RVDW)) deallocate(RVDW) if (allocated(Xi)) deallocate(Xi) if (allocated(Gr_CUT)) deallocate(Gr_CUT) if (allocated(NSCATTL)) deallocate(NSCATTL) if (allocated(XSCATTL)) deallocate(XSCATTL) END SUBROUTINE atomes_1.3.1/src/fortran/bonds.F900000664000175000017500000003736415212624223016351 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file bonds.F90 !! @short Bonding properties !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION bonding (scf, sbf, adv, bdist, bmin, delt_ij, sfil) BIND (C,NAME='bonding_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, sbf, adv, bdist REAL (KIND=c_double), INTENT(IN) :: bmin, delt_ij CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfil INTEGER, DIMENSION(:), ALLOCATABLE :: GESP CHARACTER (LEN=scf) :: sfile DOUBLE PRECISION :: DBD DOUBLE PRECISION, DIMENSION(3) :: RBD #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif TYPE GEOMETRY INTEGER :: INDICE INTEGER :: COORD INTEGER :: NCOORD INTEGER, DIMENSION(:), ALLOCATABLE :: GEO TYPE (GEOMETRY), POINTER :: FIRST TYPE (GEOMETRY), POINTER :: LAST TYPE (GEOMETRY), POINTER :: NEXT TYPE (GEOMETRY), POINTER :: PREV END TYPE GEOMETRY TYPE(GEOMETRY), DIMENSION(:), POINTER :: GEOT, GEOP TYPE(GEOMETRY), POINTER :: GA INTERFACE LOGICAL FUNCTION ALLOCBONDS (alloc) !INTEGER, INTENT(IN) :: adv LOGICAL, INTENT(IN) :: alloc END FUNCTION LOGICAL FUNCTION ALLOCEDCO (alloc) LOGICAL, INTENT(IN) :: alloc END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION LOGICAL FUNCTION EESCS () END FUNCTION INTEGER FUNCTION MOLECULES() END FUNCTION END INTERFACE if (adv .eq. 1) then if (allocated(STATBD)) deallocate(STATBD) allocate(STATBD(NSP,NSP,0:bdist), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: STATBD"//CHAR(0)) bonding=0 goto 001 endif STATBD(:,:,:)=0 endif if (.not. ALLOCBONDS(.true.)) then bonding=0 goto 001 endif if (allocated(GESP)) deallocate(GESP) allocate(GESP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: GESP"//CHAR(0)) bonding=0 goto 001 endif if (allocated(LT_GEOM)) deallocate(LT_GEOM) allocate(LT_GEOM(NSP,NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LT_GEOM"//CHAR(0)) bonding=0 goto 001 endif LT_GEOM(:,:) = 0 allocate(GEOT(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GEOT"//CHAR(0)) bonding=0 goto 001 endif allocate(GEOP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GEOP"//CHAR(0)) bonding=0 goto 001 endif allocate(GA, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GA"//CHAR(0)) bonding=0 goto 001 endif do i=1, NSP GEOT(i)%INDICE = 0 nullify(GEOT(i)%NEXT) nullify(GEOT(i)%PREV) nullify(GEOT(i)%FIRST) nullify(GEOT(i)%LAST) GEOP(i)%INDICE = 0 nullify(GEOP(i)%NEXT) nullify(GEOP(i)%PREV) nullify(GEOP(i)%FIRST) nullify(GEOP(i)%LAST) enddo ! Décompte des nombres de coordination ! Evaluation of the coordination numbers #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, l, k, m, n, o, p, DBD, RBD, GESP, GA) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA k = LOT(j) l = CONTJ(j,i) do m=1, l n = VOISJ(m,j,i) o = LOT(n) LA_COUNT(j,o,i)=LA_COUNT(j,o,i)+1 if (adv .eq. 1) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, n, i, i, i) else DBD = CALCDIJ (RBD, j, n, i, i, 1) endif DBD = sqrt(DBD) p =INT((DBD-bmin)/delt_ij) !$OMP ATOMIC STATBD(k,o,p)=STATBD(k,o,p) + 1 endif enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, p, DBD, RBD, GESP, GA) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA k = LOT(j) l = CONTJ(j,i) do m=1, l n = VOISJ(m,j,i) o = LOT(n) LA_COUNT(j,o,i)=LA_COUNT(j,o,i)+1 if (adv .eq. 1) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, n, i, i, i) else DBD = CALCDIJ (RBD, j, n, i, i, 1) endif DBD = sqrt(DBD) p =INT((DBD-bmin)/delt_ij) !$OMP ATOMIC STATBD(k,o,p)=STATBD(k,o,p) + 1 endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (sbf .eq. 1 .and. scf.gt.0) then do i=1, scf sfile(i:i) = sfil(i) enddo open(unit=100, file=sfile, action="write", status='unknown') do i=1, NS write (100, '("Configuration N°",i6)') i write (100, *) do j=1, NA write (100, '(A2,i6)') TL(LOT(j)), j write (100, '(4x,"Nc[tot]= ",i2)') CONTJ(j,i) do k=1, NSP write (100, '(5x,"Nc[",A2,"]= ",i2)') TL(k), LA_COUNT(j,k,i) do l=1, CONTJ(j,i) if (LOT(VOISJ(l,j,i)) .eq. l) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, VOISJ(l,j,i), i, i, i) else DBD = CALCDIJ (RBD, j, VOISJ(l,j,i), i, i, 1) endif write (100, '(10x,A2,1x,i6,1x,"at",1x,f7.5,1x,"Ã…")') TL(k), VOISJ(l,j,i), sqrt(DBD) endif enddo enddo enddo enddo close(100) endif do i=1, NS do j=1, NA k = LOT(j) l = 0 do m=1, NSP n = LA_COUNT(j,m,i) l = l + n GESP(m) = n MA_COUNT(k,m)=MA_COUNT(k,m)+n SA_COUNT(k)=SA_COUNT(k)+n enddo GA => GEOP(k) m = NEWCOORD(1, l, GA, NSP, GESP) GA => GEOT(k) n = NEWCOORD(0, l, GA, NSP, GESP) if (m > 0 .and. n > 0) then LT_GEOM(k,n) = 1 TOGL((i-1)*NA+j) = m TIGL((i-1)*NA+j) = n else bonding=0 goto 001 endif enddo enddo n=0 m=0 do i=1, NSP j = GEOP(i)%LAST%INDICE n = n + j GA => GEOP(i)%FIRST do k=1, j m = max(m, GA%COORD) if (k < j) GA => GA%NEXT enddo enddo call send_coord_opengl (1, NS*NA, 0, 0, n, TOGL) if (allocated(TOGL)) deallocate(TOGL) o = 0 n = 0 m = 20 do i=1, NSP j = GEOT(i)%LAST%INDICE o = o + j GA => GEOT(i)%FIRST do k=1, j n = max(n, GA%COORD) m = min(m, GA%COORD) if (k < j) GA => GA%NEXT enddo enddo call send_coord_opengl (0, NS*NA, m, n, o, TIGL) do i=1, NSP j = GEOT(i)%LAST%INDICE if (allocated(LGSA)) deallocate(LGSA) allocate(LGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LGSA"//CHAR(0)) bonding=0 goto 001 endif GA => GEOT(i)%FIRST do k=1, j LGSA(k) = GA%COORD if (k < j) GA => GA%NEXT enddo call init_menu_coordinations (0, i-1, j, LGSA) enddo if (allocated(LGSA)) deallocate(LGSA) if (allocated(TIGL)) deallocate(TIGL) do i=1, NSP SA_COUNT(i)=SA_COUNT(i)/NS/NBSPBS(i) do j=1, NSP MA_COUNT(i,j)=MA_COUNT(i,j)/NS/NBSPBS(i) enddo enddo do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call coordout (i-1, SA_COUNT(i), MAC, GEOP(i)%LAST%INDICE) enddo do i=1, NSP j = GEOP(i)%LAST%INDICE if (allocated(NGSA)) deallocate(NGSA) allocate(NGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: NGSA"//CHAR(0)) bonding=0 goto 001 endif if (allocated(LGSA)) deallocate(LGSA) allocate(LGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LGSA"//CHAR(0)) bonding=0 goto 001 endif GA => GEOP(i)%FIRST call allocate_partial_geo (i-1, j) do k=1, j LGSA(k)=GA%COORD NGSA(k)=GA%NCOORD do l=1, NSP GESP(l) = GA%GEO(l) enddo call partial_geo_out (i-1, k-1, NSP, GESP) if (k .lt. j) GA => GA%NEXT enddo call envout (i-1, j, NGSA) call init_menu_coordinations (1, i-1, j, LGSA) if (allocated(NGSA)) deallocate(NGSA) if (allocated(LGSA)) deallocate(LGSA) enddo call CLEAN_GEOM () if (allocated(GESP)) deallocate(GESP) if (NSP .eq. 2) then do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call warren_cowley_out (i-1, MAC) enddo do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call cargill_spaepen_out (i-1, MAC) enddo endif if (adv .eq. 1) then if (.not.EESCS()) then bonding=0 goto 001 endif do i=1, NSP do j=1, NSP EABL(j)=EDGETA(i,j) CABL(j)=CORTA(i,j) DABL(j)=DEFTA(i,j) ETABL(j)=ETYPEA(i,j) CTABL(j)=CTYPEA(i,j) DTABL(j)=DETYPEA(i,j) TDTABL(j)=TDA(i,j) ECTABL(j)=ETDA(i,j) enddo call tetraout (i-1, EABL, CABL, DABL, ETABL, CTABL, DTABL, TDTABL, ECTABL) enddo endif if (.not.ALLOCEDCO(.false.)) then bonding=0 goto 001 endif if (adv .eq. 1) then if (allocated(EABL)) deallocate(EABL) allocate(EABL(0:bdist), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: EABL"//CHAR(0)) bonding=0 goto 001 endif do k=0, bdist EABL(k) = 0.0 enddo l=0 do i=1, NSP do j=1, NSP m=0 do k=0, bdist m = m + STATBD(i,j,k) enddo if (m .ne. 0) then do k=0, bdist EABL(k) = 100.0*STATBD(i,j,k)/m enddo call save_curve (bdist+1, EABL, l, IDBD) else call save_curve (0, EABL, l, IDBD) endif l=l+1 enddo enddo if (allocated(STATBD)) deallocate(STATBD) endif if (.not.ALLOCBONDS(.false.)) then bonding=0 goto 001 endif bonding=1 001 continue CONTAINS INTEGER FUNCTION NEWCOORD (ID, GEO, GP, NP, GSP) INTEGER, INTENT(IN) :: ID, GEO, NP INTEGER, DIMENSION(NP), INTENT(IN) :: GSP TYPE(GEOMETRY), INTENT(INOUT), POINTER :: GP INTEGER :: AB, AC, AD LOGICAL :: NEWGEO=.false. TYPE(GEOMETRY), POINTER :: GM if (GP%INDICE .eq. 0) then GP%INDICE = 1 GP%COORD = GEO GP%NCOORD = 1 GP%LAST => GP GP%FIRST => GP NEWCOORD=GP%INDICE if (ID .eq. 1) then allocate(GP%GEO(NP)) do AB=1, NP GP%GEO(AB) = GSP(AB) enddo endif else GP => GP%FIRST AC = GP%LAST%INDICE NEWGEO=.true. if (ID .eq. 0) then do AB=1, AC if (GP%COORD .eq. GEO) then NEWGEO=.false. NEWCOORD = GP%INDICE exit endif if (AB .lt. AC) GP => GP%NEXT enddo else do AB=1, AC if (GP%COORD .eq. GEO) then NEWGEO=.false. do AD=1, NP if (GP%GEO(AD) .ne. GSP(AD)) then NEWGEO=.true. exit endif enddo if (.not.NEWGEO) exit endif if (AB .lt. AC) GP => GP%NEXT enddo endif if (NEWGEO) then allocate(GM, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: NEWCOORD"//CHAR(0), "Pointer: GM"//CHAR(0)) NEWCOORD=0 goto 001 endif nullify(GM%FIRST) nullify(GM%NEXT) nullify(GM%LAST) nullify(GM%PREV) GM%FIRST => GP%FIRST GP%NEXT => GM GP%FIRST%LAST => GM GP%LAST => GM GM%LAST => GM GM%PREV => GP GM%INDICE = GP%INDICE+1 GM%COORD = GEO GM%NCOORD = 1 NEWCOORD = GM%INDICE if (ID .eq. 1) then allocate(GM%GEO(NP)) do AB=1, NP GM%GEO(AB) = GSP(AB) enddo endif GP => GM else NEWCOORD = GP%INDICE GP%NCOORD = GP%NCOORD+1 endif endif 001 continue END FUNCTION SUBROUTINE CLEAN_GEOM () INTEGER :: AB, AC, AD do AB=1, NSP GA => GEOT(AB)%LAST AC=GA%INDICE do AD=1, AC-1 GA => GA%PREV deallocate (GA%NEXT) enddo enddo deallocate(GEOT) do AB=1, NSP GA => GEOP(AB)%LAST AC=GA%INDICE do AD=1, AC-1 GA => GA%PREV deallocate (GA%NEXT) enddo enddo deallocate(GEOP) END SUBROUTINE END FUNCTION SUBROUTINE sendcuts (cspa, cspb, cutab) BIND (C,NAME='sendcuts_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: cspa, cspb REAL (KIND=c_double), INTENT(IN) :: cutab if (cspa .eq. NSP) then Gr_cutoff=cutab**2 else Gr_CUT(cspa+1,cspb+1) = cutab**2 endif END SUBROUTINE REAL (KIND=c_double) FUNCTION fdmax(use_pbc) BIND (C,NAME='fdmax_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: use_pbc if (use_pbc .eq. 0) then do l=1,3 pmin(l) = FULLPOS(1,l,1) pmax(l) = pmin(l) enddo do i=1, NS if (i .eq. 1) then k = 2 else k = 1 endif do j=k, NA do l=1,3 pmin(l) = min(pmin(l), FULLPOS(j,l,i)) pmax(l) = max(pmax(l), FULLPOS(j,l,i)) enddo enddo enddo fdmax = 0.0d0 do l=1,3 fdmax = fdmax + (pmax(l)-pmin(l))**2 enddo fdmax = sqrt(fdmax) else if (THE_BOX(1)%CUBIC) then fdmax = sqrt(2.0)*THE_BOX(1)%minv/2.0 else fdmax = THE_BOX(1)%minv/2.0 endif if (NCELLS .gt. 1) then do l=2, NCELLS if (THE_BOX(l)%CUBIC) then fdmax = min(fdmax,sqrt(2.0)*THE_BOX(l)%minv/2.0) else fdmax = min(fdmax, THE_BOX(l)%minv/2.0) endif enddo endif endif END FUNCTION REAL (KIND=c_double) FUNCTION fkmin(use_pbc) BIND (C,NAME='fkmin_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: use_pbc if (use_pbc .eq. 0) then fkmin = 0.0 else fkmin = 0.0 do l=1, NCELLS fkmin = fkmin + THE_BOX(l)%minr enddo fkmin = fkmin / NCELLS endif END FUNCTION REAL (KIND=c_double) FUNCTION oglmax() BIND (C,NAME='oglmax_') USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: maxd DOUBLE PRECISION, DIMENSION(3) :: dmax do l=1,3 pmin(l) = FULLPOS(1,l,1) pmax(l) = pmin(l) enddo do i=1, NS if (i .eq. 1) then k = 2 else k = 1 endif do j=k, NA do l=1,3 pmin(l) = min(pmin(l), FULLPOS(j,l,i)) pmax(l) = max(pmax(l), FULLPOS(j,l,i)) enddo enddo enddo allocate (NFULLPOS(2,3,1)) do l=1, 3 NFULLPOS(1,l,1) = pmin(l) NFULLPOS(2,l,1) = pmax(l) enddo call CALCRIJ (1, 2, -2, 1, 1) deallocate (NFULLPOS) if (PBC) then oglmax = sqrt(Dij) dmax(:) = 0.0d0 maxd = 0.0d0 do l=1, NCELLS do m=1, 3 dmax(m) = max(dmax(m), THE_BOX(l)%modv(m)*THE_BOX(l)%modv(m)) enddo enddo maxd = sqrt(dmax(1)+dmax(2)+dmax(3)) if (oglmax < maxd) oglmax = maxd; else oglmax=sqrt(Dij) endif oglmax = 2.0*oglmax if (oglmax .lt. 10.0) oglmax = 10.0 END FUNCTION atomes_1.3.1/src/fortran/prepdata.F900000664000175000017500000002777215212624223017046 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file prepdata.F90 !! @short First level analysis of atomic coordinates !! @author Sébastien Le Roux #if defined (HAVE_CONFIG_H) # include #endif SUBROUTINE free_contj_voisj () BIND (C,NAME='free_contj_voisj_') USE PARAMETERS IMPLICIT NONE if (allocated(VOISJ)) deallocate(VOISJ) if (allocated(CONTJ)) deallocate(CONTJ) END SUBROUTINE SUBROUTINE read_contj (ATO, STP, CON) BIND (C,NAME='read_contj_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: ATO, STP, CON CONTJ(ATO+1,STP+1) = CON END SUBROUTINE SUBROUTINE read_voisj (ATO, STP, CID, VID) BIND (C,NAME='read_voisj_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: ATO, STP, CID, VID VOISJ(CID+1,ATO+1,STP+1) = VID+1 END SUBROUTINE INTEGER (KIND=c_int) FUNCTION alloc_contj_voisj (N1, N2) BIND (C,NAME='alloc_contj_voisj_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: N1, N2 ! N1 = atomes, N2 = steps if (allocated(VOISJ)) deallocate(VOISJ) allocate(VOISJ(MAXN,N1,N2), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_cont_vois"//CHAR(0), "Table: VOISJ"//CHAR(0)) alloc_contj_voisj = 0 goto 001 endif if (allocated(CONTJ)) deallocate(CONTJ) allocate(CONTJ(N1,N2), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_cont_vois"//CHAR(0), "Table: CONTJ"//CHAR(0)) alloc_contj_voisj = 0 endif alloc_contj_voisj = 1 001 continue END FUNCTION INTEGER (KIND=c_int) FUNCTION alloc_data (N1, N2, N3) BIND (C,NAME='alloc_data_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: N1, N2, N3 INTERFACE INTEGER FUNCTION ALLOCHEM() END FUNCTION END INTERFACE NA=N1 NSP=N2 NS=N3 if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_data"//CHAR(0), "Table: FULLPOS"//CHAR(0)) alloc_data = 0 goto 001 endif if (allocated(LOT)) deallocate(LOT) allocate(LOT(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_data"//CHAR(0), "Table: LOT"//CHAR(0)) alloc_data = 0 goto 001 endif alloc_data = ALLOCHEM () 001 continue END FUNCTION SUBROUTINE prep_spec (idatoms, nsps, open_apf) BIND (C,NAME='prep_spec_') USE PARAMETERS USE MENDELEIEV IMPLICIT NONE INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nsps REAL (KIND=c_double), DIMENSION(NSP), INTENT(IN) :: idatoms INTEGER (KIND=c_int), INTENT(IN) :: open_apf CHARACTER (LEN=14) :: ELEM ! Now we are calling the GTK+ routines do i=1, NSP NBSPBS(i) = nsps(i) j = int(idatoms(i)) ATOMID(i) = j if (open_apf .eq. 1) then if (j .gt. 0) then TL(i) = ATSYM(j) ELEM = ELEMENT(j) else TL(i) = "X " ELEM = "Unknown" endif ! In C all string must be terminated by a CHAR(0) ! To spec_data_ call spec_data (0, i-1, ATOMID(i), NBSPBS(i), & TL(i)//CHAR(0), ELEM//CHAR(0), & 0.0d0, 0.0d0, 0.0d0, 0.0d0) endif enddo NBSPBS(NSP+1) = NA END SUBROUTINE SUBROUTINE read_chem (PMASS, PRAD, PNSCATT, PXSCATT) BIND (C,NAME='read_chem_') USE PARAMETERS IMPLICIT NONE REAL (KIND=c_double), DIMENSION(NSP) :: PMASS, PRAD, PNSCATT, PXSCATT do i=1, NSP MASS(i) = PMASS(i) RVDW(i) = PRAD(i) NSCATTL(i) = PNSCATT(i) XSCATTL(i) = PXSCATT(i) enddo END SUBROUTINE SUBROUTINE read_data (PLOT, PBS) BIND (C,NAME='read_data_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), DIMENSION(NA), INTENT(IN) :: PLOT INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: PBS do i=1, NA LOT(i)=PLOT(i)+1 enddo do i=1, NSP NBSPBS(i) = PBS(i) Xi(i) = dble(NBSPBS(i)) / dble(NA) enddo NBSPBS(NSP+1) = NA END SUBROUTINE SUBROUTINE read_pos (PCX, PCY, PCZ) BIND (C,NAME='read_pos_') USE PARAMETERS REAL (KIND=c_double), DIMENSION(NA*NS), INTENT(IN) :: PCX, PCY, PCZ k=0 do i=1, NS do j=1, NA k=k+1 FULLPOS(j,1,i)=PCX(k) FULLPOS(j,2,i)=PCY(k) FULLPOS(j,3,i)=PCZ(k) enddo enddo END SUBROUTINE INTEGER FUNCTION SEND_POS (NPA, NPS, NLOT, POSTAB) INTEGER :: i, j, k, ERR INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XPOS, YPOS, ZPOS if (allocated(XPOS)) deallocate(XPOS) allocate(XPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: XPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif if (allocated(YPOS)) deallocate(YPOS) allocate(YPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: YPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif if (allocated(ZPOS)) deallocate(ZPOS) allocate(ZPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: ZPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif k=0 do i=1, NPS do j=1, NPA k=k+1 XPOS(k)=POSTAB(j,1,i) YPOS(k)=POSTAB(j,2,i) ZPOS(k)=POSTAB(j,3,i) enddo enddo ! To 'save_pos_' call save_pos (NPA, NLOT, k, XPOS, YPOS, ZPOS) SEND_POS = 1 001 continue if (allocated(XPOS)) deallocate (XPOS) if (allocated(YPOS)) deallocate (YPOS) if (allocated(ZPOS)) deallocate (ZPOS) END FUNCTION INTEGER (KIND=c_int) FUNCTION prep_data () BIND (C,NAME='prep_data_') ! ! Data initialization ! USE PARAMETERS USE MENDELEIEV IMPLICIT NONE CHARACTER (LEN=2), DIMENSION(MAXE) :: TTYPE INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION INTEGER FUNCTION ALLOCHEM() END FUNCTION INTEGER FUNCTION FINDID(NAMEAT) CHARACTER (LEN=2), INTENT(IN) :: NAMEAT END FUNCTION INTEGER FUNCTION chemistry () END FUNCTION END INTERFACE prep_data = 0 if (allocated(LOT)) deallocate(LOT) allocate(LOT(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: prep_data"//CHAR(0), "Table: LOT"//CHAR(0)) goto 001 endif LOT(:)=0 ! Initialisation du tableau NOC=1 do NOA=1, NA if (NOA .eq. 1) then LOT(NOA)=NOC TTYPE(NOC)=TAB_OF_TYPE(NOA) else if (LOT(NOA) .eq. 0) then do NOB=1, NOC if (TAB_OF_TYPE(NOA) .eq. TTYPE(NOB)) then LOT(NOA)= NOB endif enddo if (LOT(NOA) .eq. 0) then NOC=NOC+1 LOT(NOA)=NOC TTYPE(NOC)=TAB_OF_TYPE(NOA) endif endif enddo NSP=NOC if (ALLOCHEM () == 0) then prep_data = 0 goto 001 endif if (allocated(ELEMID)) deallocate(ELEMID) allocate(ELEMID(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: prep_data"//CHAR(0), "Table: ELEMID"//CHAR(0)) goto 001 endif NBSPBS(:) = 0 do NOA=1, NA NOB=LOT(NOA) NBSPBS(NOB)=NBSPBS(NOB)+1 enddo NBSPBS(NSP+1)=NA ! ! Link between index and label ! Correspondance entre indice de type et label ! do NOB=1, NSP TL(NOB)=TTYPE(NOB) enddo do NOA=1, NSP ATOMID(NOA) = FINDID(TL(NOA)) select case (ATOMID(NOA)) case (-1) prep_data = 0 goto 001 case (0) ELEMID(NOA) = "Dummy "//TL(NOA) MASS(NOA) = 1.0 RVDW(NOA) = 0.5 NSCATTL(NOA) = 0.0 XSCATTL(NOA) = 0.0 case default ELEMID(NOA) = ELEMENT(ATOMID(NOA)) MASS(NOA) = AMASS(ATOMID(NOA)) XSCATTL(NOA) = ATOMID(NOA) if(ATOMID(NOA) < 105) then NSCATTL(NOA) = COHEB(ATOMID(NOA)) ! Covalent radius are the defaut values RVDW(NOA) = ARCOV(ATOMID(NOA)) ! To use ionic radius uncomment the following line ! RVDW(NOA) = ARION(ATOMID(NOA)) ! To use Wander Waals radius uncomment the following line ! RVDW(NOA) = ARVDW(ATOMID(NOA)) else NSCATTL(NOA) = 0.0d0 RVDW(NOA) = 0.0d0 endif end select if (NSCATTL(NOA) .eq. 0.00) then call show_warning ("Element "//TL(NOA)//" does not have neutron scattering length "//CHAR(0), & "If this is a bug please report it to"//CHAR(0), PACKAGE_BUGREPORT//CHAR(0)) endif enddo ! Now we are calling the GTK+ routines ! To init_data_ call init_data (NA, NSP, NS, 1) do i=1, NSP ! In C all string must be terminated by a CHAR(0) ! To spec_data_ call spec_data (1, i-1, ATOMID(i), NBSPBS(i), & TL(i)//CHAR(0), ELEMID(i)//CHAR(0), & MASS(i), RVDW(i), NSCATTL(i), XSCATTL(i)) enddo if (chemistry () .eq. 1) then prep_data = SEND_POS (NA, NS, LOT, FULLPOS) endif 001 continue if (allocated(ELEMID)) deallocate(ELEMID) END FUNCTION INTEGER FUNCTION FINDID(NAMEAT) USE PARAMETERS USE MENDELEIEV INTEGER (KIND=c_int), EXTERNAL :: dummy_ask INTEGER :: ELEMT CHARACTER (LEN=2), INTENT(IN) :: NAMEAT FINDID=0 do ELEMT=1, MAXE if (ATSYM(ELEMT) .eq. NAMEAT) then FINDID=ELEMT exit endif enddo if (FINDID .eq. 0) then call show_warning ("Problem with the atomic coordinates"//CHAR(0), & "Element "//NAMEAT//" does not exist "//CHAR(0), " "//CHAR(0)) FINDID = dummy_ask ("Do you want to use dummy atom(s) for unknown species "//NAMEAT//" ?"//CHAR(0)); endif END FUNCTION REAL (KIND=c_double) FUNCTION set_mass (SW) BIND (C,NAME='set_mass_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW set_mass = AMASS(SW) END FUNCTION REAL (KIND=c_double) FUNCTION set_radius (SW, RD) BIND (C,NAME='set_radius_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW, RD DOUBLE PRECISION :: RAD if (SW .lt. 108) then if (RD .eq. 0) then RAD = ARCOV(SW) else if (RD .eq. 1) then RAD = ARION(SW) else if (RD .eq. 2) then RAD = ARVDW(SW) else if (RD .eq. 3) then RAD = ARCRY(SW) endif else RAD = 0.0 endif set_radius = RAD END FUNCTION REAL (KIND=c_double) FUNCTION set_neutron (SW) BIND (C,NAME='set_neutron_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW if (SW .lt. 105) then set_neutron = COHEB(SW) else set_neutron = 0.0 endif END FUNCTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Reconstruction des trajectoires réelles !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE prep_pos (PINFO, FINFO) BIND (C,NAME='prep_pos_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: PINFO, FINFO INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE PBC=.false. if (PINFO .eq. 1) then PBC=.true. endif FRAC=.false. if (FINFO > 0) FRAC=.true. if (FRAC) then do NOC=1, NS do NOA=1, NA if (NCELLS .gt. 1) then FULLPOS(NOA,:,NOC) = MATMUL(FULLPOS(NOA,:,NOC),THE_BOX(NOC)%fractocart) else FULLPOS(NOA,:,NOC) = MATMUL(FULLPOS(NOA,:,NOC),THE_BOX(1)%fractocart) endif enddo enddo endif NOA = SEND_POS (NA, NS, LOT, FULLPOS) END SUBROUTINE atomes_1.3.1/src/fortran/threads.F900000664000175000017500000000271715212624223016670 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file threads.F90 !! @short OpenMP utility functions !! @author Sébastien Le Roux INTEGER FUNCTION GET_THREAD_START (NOBJ, NTHREADS, THREAD_ID) IMPLICIT NONE INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID INTEGER :: TMP REAL :: VA, VB VA = NOBJ VB = NTHREADS TMP = INT (VA/VB) GET_THREAD_START = TMP * THREAD_ID + 1 END FUNCTION INTEGER FUNCTION GET_THREAD_END (NOBJ, NTHREADS, THREAD_ID) IMPLICIT NONE INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID INTEGER :: TMP REAL :: VA, VB VA = NOBJ VB = NTHREADS TMP = INT (VA/VB) if (THREAD_ID .eq. NTHREADS-1) then GET_THREAD_END = NOBJ else GET_THREAD_END = TMP * (THREAD_ID+1) endif END FUNCTION atomes_1.3.1/src/fortran/xyz.F900000664000175000017500000001046615212624223016070 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file xyz -> F90 !! @short Write XYZ atomic coordinates !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_xyz (xyz_f, lxyz, is_npt) BIND (C,NAME='read_xyz_') !INTEGER FUNCTION read_xyz (xyz_file, lxyz) ! ! Lecture of atom types and coordinates - XYZ files ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lxyz, is_npt CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: xyz_f CHARACTER (LEN=lxyz) :: xyz_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lxyz xyz_file(i:i) = xyz_f(i) enddo read_xyz=1 inquire (file=xyz_file, exist=isok) if (isok) then open (unit=20, file=xyz_file, action='read', status='old', err=001) NS=0 read (20, *, err=002) NA NS = TEST_LENGTH(20, NA+2) if (NS .gt. 0) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_xyz"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_xyz"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS read (20, *, err=002) read (20, *, err=002) do j=1, NA read (20, *, err=002) TAB_OF_TYPE(j), FULLPOS(j,1,i), FULLPOS(j,2,i), FULLPOS(j,3,i) enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_xyz=0 else read_xyz=2 endif 002 continue close (20) 001 continue endif END FUNCTION INTEGER FUNCTION TEST_LENGTH (UNITFILE, NATL) IMPLICIT NONE INTEGER, INTENT(IN) :: UNITFILE, NATL INTEGER :: LENF INTEGER :: EOF rewind(UNITFILE) EOF=0 LENF=0 do while (EOF .eq. 0) read (UNITFILE, *, iostat=EOF) LENF=LENF+1 enddo LENF=LENF-1 TEST_LENGTH=mod(LENF,NATL) if (TEST_LENGTH .eq. 0) then TEST_LENGTH=LENF/NATL else TEST_LENGTH=0 endif END FUNCTION SUBROUTINE send_label (sp_id, sp_ln, spec_label) BIND (C,NAME='send_label_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: sp_id, sp_ln CHARACTER (KIND=c_char), DIMENSION(sp_ln), INTENT(IN) :: spec_label TL(sp_id)=" " do i=1, sp_ln TL(sp_id)(i:i) = spec_label(i) enddo END SUBROUTINE INTEGER (KIND=c_int) FUNCTION write_xyz (xyz_f, lxyz, fxyz, txyz) BIND (C,NAME='write_xyz_') ! ! output of atom types and coordinates - Multiple XYZ files ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: lxyz, fxyz, txyz CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: xyz_f DOUBLE PRECISION, DIMENSION(3) :: savep CHARACTER (LEN=lxyz) :: xyz_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lxyz xyz_file(i:i) = xyz_f(i) enddo write_xyz=1 open (unit=20, file=xyz_file, action='write', status='unknown', err=001) do i=1, NS write (20, '(i10)') NA write (20, *) do j=1, NA if (fxyz .eq. 1) then if (NCELLS .gt. 1) then NBOX => THE_BOX(i) else NBOX => THE_BOX(1) endif savep = MATMUL(FULLPOS(j,:,i),NBOX%carttofrac) else savep = FULLPOS(j,:,i) if (txyz .eq. 1) then savep(:) = savep(:)/ANGTOBOHR endif endif write (20, '(a2,3(3x,f15.10))', err=002) TL(LOT(j)), savep enddo enddo write_xyz=0 002 continue close (20) 001 continue END FUNCTION atomes_1.3.1/src/fortran/initchains.F900000664000175000017500000001012715212624223017361 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file initchains.F90 !! @short Initialize chain statistics !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION initchains (VTLT, VAAA, VACA, VHOMO, V121, VTAILLC, VNUMA) BIND (C,NAME='initchains_') ! ! Initialization of the chain statistics ! The key variable is NUMA see in the following lines ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: VTLT, VAAA, VACA, VHOMO, V121, VTAILLC, VNUMA INTERFACE INTEGER FUNCTION CHAINS() END FUNCTION END INTERFACE if (VTLT .eq. 0) then TLT=NSP+1 else TLT=VTLT endif NUMA=VNUMA NTLT=NBSPBS(TLT) TAILLC=VTAILLC AAAA=.false. ACAC=.false. NO_HOMO=.false. if (NSP.gt. 1) then if (VAAA == 1) AAAA=.true. if (VACA == 1) ACAC=.true. if (VHOMO == 1) NO_HOMO=.true. endif ISOLATED=.false. if (V121 == 1) ISOLATED=.true. #ifdef DEBUG write (6, '("CHAINS:: AAAA= ",l1,", ACAC= ",l1,", NO_HOMO= ",l1,", ISOLATED= ",l1)') AAAA, ACAC, NO_HOMO, ISOLATED #endif TBR=.false. ALC=.false. initchains = CHAINS() END FUNCTION INTEGER FUNCTION RECHAINS() USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: TAMP, ETAMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CTAB allocate(CTAB(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: CTAB"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(RED)) deallocate(RED) allocate(RED(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: RED"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(MOYRED)) deallocate(MOYRED) allocate(MOYRED(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: MOYRED"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(ECTYPE)) deallocate(ECTYPE) allocate(ECTYPE(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: ECTYPE"//CHAR(0)) RECHAINS=0 goto 001 endif RED(:)=0.0d0 do l=1, TAILLC do i=1, NS RED(i)=dble(NRING(l,i))/NTLT enddo if (NS .gt. 1) then MOYRED(l)=0.0d0 ECTYPE(l)=0.0d0 call MOYENNE(RED, NS, MOYRED(l)) call ECT_TYPE(MOYRED(l), RED, NS, ECTYPE(l)) else MOYRED(l)=RED(1) endif enddo TAMP=0.0 do i=1, TAILLC CTAB(i)=MOYRED(i) TAMP = TAMP + CTAB(i) enddo if (TAMP .eq. 0.0) then RECHAINS=1 goto 001 endif l=TLT if (TLT .eq. NSP+1) l = 0 call save_curve (TAILLC, CTAB, l, IDCH) if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) allocate(TOTPSTEP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: TOTPSTEP"//CHAR(0)) RECHAINS=0 goto 001 endif do i=1, NS TOTPSTEP(i)=0 do j=1, TAILLC TOTPSTEP(i)=TOTPSTEP(i)+dble(NRING(j,i)) enddo enddo TAMP=0.0d0 ETAMP=0.0d0 call MOYENNE(TOTPSTEP, NS, TAMP) call ECT_TYPE(TAMP, TOTPSTEP, NS, ETAMP) call save_chains_data (TAILLC, ECTYPE, TAMP, ETAMP) RECHAINS=1 001 continue if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) if (allocated(MOYRED)) deallocate(MOYRED) if (allocated(RED)) deallocate(RED) if (allocated(CTAB)) deallocate(CTAB) END FUNCTION atomes_1.3.1/src/fortran/allocbonds.F900000664000175000017500000002450315212624223017353 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file allocbonds.F90 !! @short Memory allocation for bonding properties analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCEDCO (alloc) ! ! Memory allocation for Edge and Corner sharing analysis ! USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(IN) :: alloc if (allocated(EDGETA)) deallocate(EDGETA) if (allocated(CORTA)) deallocate(CORTA) if (allocated(DEFTA)) deallocate(DEFTA) if (allocated(TDA)) deallocate(TDA) if (allocated(CORNERA)) deallocate(CORNERA) if (allocated(EDGEA)) deallocate(EDGEA) if (allocated(DEFA)) deallocate(DEFA) if (allocated(TDSA)) deallocate(TDSA) if (allocated(EABL)) deallocate(EABL) if (allocated(CABL)) deallocate(CABL) if (allocated(DABL)) deallocate(DABL) if (allocated(ETABL)) deallocate(ETABL) if (allocated(CTABL)) deallocate(CTABL) if (allocated(DTABL)) deallocate(DTABL) if (allocated(ECTABL)) deallocate(ECTABL) if (allocated(TDTABL)) deallocate(TDTABL) if (allocated(ETYPEA)) deallocate(ETYPEA) if (allocated(CTYPEA)) deallocate(CTYPEA) if (allocated(DETYPEA)) deallocate(DETYPEA) if (allocated(ETDA)) deallocate(ETDA) if (allocated(MTABL)) deallocate(MTABL) if (alloc) then allocate(EDGETA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDGETA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CORTA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CORTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DEFTA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DEFTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do m=1, NSP do n=1, NSP EDGETA(n,m)=0 CORTA(n,m)=0 DEFTA(n,m)=0 TDA(n,m)=0 enddo enddo allocate(CORNERA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CORNERA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(EDGEA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDGEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DEFA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DEFA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDSA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDSA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do m=1, NSP do n=1, NSP do o=1, NS CORNERA(m,n,o)=0 EDGEA(m,n,o)=0 DEFA(m,n,o)=0 TDSA(m,n,o)=0 enddo enddo enddo allocate(EABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(ETABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ETABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(ECTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ECTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (ETYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ETYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (CTYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CTYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (DETYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DETYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (ETDA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(MTABL(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: MTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do i=1, NSP do j=1,NSP ETYPEA(j,i)=0.0d0 CTYPEA(j,i)=0.0d0 DETYPEA(j,i)=0.0d0 ETDA(j,i)=0.0d0 enddo enddo endif ALLOCEDCO=.true. 001 continue END FUNCTION LOGICAL FUNCTION ALLOCBONDS (alloc) ! ! Memory allocation for bond properties ! USE PARAMETERS !INTEGER, INTENT(IN) :: adv LOGICAL, INTENT(IN) :: alloc ! For neighbors and environments if (allocated(LA_COUNT)) deallocate(LA_COUNT) if (allocated(SA_COUNT)) deallocate(SA_COUNT) if (allocated(MA_COUNT)) deallocate(MA_COUNT) if (allocated(TOGL)) deallocate(TOGL) if (allocated(TIGL)) deallocate(TIGL) if (allocated(NUM_GSA)) deallocate(NUM_GSA) if (allocated(TOT_GSA)) deallocate(TOT_GSA) if (allocated(CABL)) deallocate(CABL) if (allocated(DABL)) deallocate(DABL) if (allocated(EABL)) deallocate(EABL) if (allocated(LGSA)) deallocate(LGSA) if (allocated(NGSA)) deallocate(NGSA) if (allocated(LP_GEOM)) deallocate(LP_GEOM) if (allocated(LT_GEOM)) deallocate(LT_GEOM) if (allocated(CMOY)) deallocate(CMOY) if (allocated(MAC)) deallocate(MAC) if (alloc) then allocate(LA_COUNT(NA,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: LA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(SA_COUNT(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: SA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(MA_COUNT(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: MA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif SA_COUNT(:)=0 MA_COUNT(:,:)=0 LA_COUNT(:,:,:)=0 allocate(TOGL(NS*NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TOGL"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(TIGL(NS*NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TIGL"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(NUM_GSA(NSP,NA*10), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: NUM_GSA"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(TOT_GSA(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TOT_GSA"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(MAC(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: MAC"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif endif !if (adv .eq. 1) then ! ALLOCBONDS = ALLOCEDCO () !else ALLOCBONDS=.true. !endif 001 continue END FUNCTION atomes_1.3.1/src/Makefile.am0000664000175000017500000002244015212624223015332 0ustar lerouxleroux # To prepare the OpenGL testing utility: SUBDIRS = startup-testing # Setup the name of the program to be generated, using: bin_PROGRAMS = atomes atomes_LDADD = $(LGTK_LIBS) $(LIBXML2_LIBS) $(PANGOFT2_LIBS) $(FFMPEG_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) if WINDOWS atomes_LDADD += win_atomes.o win_atomes.o: ../misc/win/atomes.rc $(WINDRES) $< $@ endif # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(LIBXML2_CFLAGS) $(PANGOFT2_CFLAGS) $(FFMPEG_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) # To turn OpenMP on/off if OPENMP OpenMP_FLAGS = -DOPENMP $(OPENMP_CFLAGS) else OpenMP_FLAGS = endif # Use AM_LDFLAGS to define additional linker flags: AM_LDFLAGS = $(OpenMP_FLAGS) if GTK3 GTK_VERSION=-DGTK3 else GTK_VERSION=-DGTK4 endif atomes_locale = $(DESTDIR)$(localedir) # Use AM_CPPFLAGS to define additional preprocessor flags: if WINDOWS AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" else PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" -DPACKAGE_LIBEXEC=\""$(libexecdir)"\" -DPACKAGE_LOCALE=\""$(atomes_locale)"\" if LINUX AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" else AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" endif endif # Use AM_FFLAGS to define additional Fortran 90 flags: AM_FFLAGS = $(OpenMP_FLAGS) for = fortran/ gui = gui/ work = workspace/ proj = project/ read = project/readers/ calc = calc/ dlpoly = calc/dl_poly/ lammps = calc/lammps/ fields = calc/force_fields/ cpmd = calc/cpmd/ cp2k = calc/cp2k/ curve = curve/ ogl = opengl/ glwin = opengl/win/ gldraw = opengl/draw/ gledit = opengl/edit/ inc = -I$(gui) -I$(work) -I$(proj) -I$(read) -I$(calc) -I$(dlpoly) -I$(lammps) -I$(fields) -I$(cpmd) -I$(cp2k) -I$(curve) -I$(glwin) -I$(gledit) -I$(gldraw) -I$(ogl) -I. includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(OpenMP_FLAGS) $(LIBS_CFLAGS) -std=gnu99 atomes_fortran_modules = $(for)parameters.F90 \ $(for)mendeleiev.F90 atomes_fortran_files = $(for)allocbonds.F90 \ $(for)allochem.F90 \ $(for)allocmsd.F90 \ $(for)angles.F90 \ $(for)bonds.F90 \ $(for)c3d.F90 \ $(for)chains.F90 \ $(for)chains_ogl.F90 \ $(for)chemistry.F90 \ $(for)clean.F90 \ $(for)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)initrings.F90 \ $(for)lattice.F90 \ $(for)molecules.F90 \ $(for)msd.F90 \ $(for)pdb.F90 \ $(for)prepdata.F90 \ $(for)resrings.F90 \ $(for)rings-guttman.F90 \ $(for)rings-king.F90 \ $(for)rings_ogl.F90 \ $(for)rings-primitive.F90 \ $(for)sk.F90 \ $(for)skt.F90 \ $(for)spherical.F90 \ $(for)sq.F90 \ $(for)threads.F90 \ $(for)trj.F90 \ $(for)utils.F90 \ $(for)vas.F90 \ $(for)writedata.F90 \ $(for)xyz.F90 # Rules to ensure that Fortran modules are compiled before Fortran files atomes_fortran = $(atomes_fortran_modules) $(atomes_fortran_files) $(patsubst %.F90,%.o,$(atomes_fortran_files)): $(patsubst %.F90,%.o,$(atomes_fortran_modules)) atomes_gui = $(gui)bdcall.c \ $(gui)calc_menu.c \ $(gui)callbacks.c \ $(gui)chainscall.c \ $(gui)edit_menu.c \ $(gui)grcall.c \ $(gui)gtk-misc.c \ $(gui)gui.c \ $(gui)initc.c \ $(gui)preferences.c \ $(gui)interface.c \ $(gui)main.c \ $(gui)msdcall.c \ $(gui)ringscall.c \ $(gui)spcall.c \ $(gui)sqcall.c \ $(gui)sktcall.c \ $(gui)tools.c \ $(gui)work_menu.c atomes_workspace = $(work)modelinfo.c \ $(work)workinfo.c \ $(work)workspace.c atomes_readers = $(read)read_c3d.c \ $(read)read_cif.c \ $(read)read_coord.c \ $(read)read_hist.c \ $(read)read_isaacs.c \ $(read)read_npt.c \ $(read)read_pdb.c \ $(read)read_trj.c \ $(read)read_vas.c \ $(read)read_xyz.c atomes_project = $(atomes_readers) \ $(proj)close_p.c \ $(proj)debugio.c \ $(proj)init_p.c \ $(proj)open_p.c \ $(proj)project.c \ $(proj)read_bond.c \ $(proj)read_curve.c \ $(proj)read_field.c \ $(proj)read_mol.c \ $(proj)read_opengl.c \ $(proj)read_qm.c \ $(proj)save_bond.c \ $(proj)save_curve.c \ $(proj)save_field.c \ $(proj)save_mol.c \ $(proj)save_opengl.c \ $(proj)save_p.c \ $(proj)save_qm.c \ $(proj)update_p.c atomes_cp2k = $(cp2k)cp2k_basis.c \ $(cp2k)cp2k_files.c \ $(cp2k)cp2k_gth-basis.c \ $(cp2k)cp2k_init.c \ $(cp2k)cp2k_mol.c \ $(cp2k)cp2k_molopt-basis.c \ $(cp2k)cp2k_pot.c \ $(cp2k)cp2k_print.c atomes_cpmd = $(cpmd)cpmd_atoms.c \ $(cpmd)cpmd_init.c \ $(cpmd)cpmd_nose.c \ $(cpmd)cpmd_print.c \ $(cpmd)cpmd_restart.c atomes_dlpoly = $(dlpoly)dlp_active.c \ $(dlpoly)dlp_atom.c \ $(dlpoly)dlp_comp.c \ $(dlpoly)dlp_control.c \ $(dlpoly)dlp_copy.c \ $(dlpoly)dlp_edit.c \ $(dlpoly)dlp_ff_match.c \ $(dlpoly)dlp_field.c \ $(dlpoly)dlp_init.c \ $(dlpoly)dlp_mol.c \ $(dlpoly)dlp_print.c \ $(dlpoly)dlp_viz.c atomes_lammps = $(lammps)la_print.c atomes_calc = $(calc)calc.c $(atomes_cp2k) $(atomes_cpmd) $(atomes_dlpoly) $(atomes_lammps) $(fields)force_fields.c atomes_curve = $(curve)cedit.c \ $(curve)curve.c \ $(curve)cwidget.c \ $(curve)datab.c \ $(curve)draw.c \ $(curve)frame.c \ $(curve)glyph.c \ $(curve)labels.c \ $(curve)legend.c \ $(curve)m_curve.c \ $(curve)show.c \ $(curve)tab-1.c \ $(curve)tab-2.c \ $(curve)tab-3.c \ $(curve)tab-4.c \ $(curve)title.c \ $(curve)w_curve.c \ $(curve)w_data.c \ $(curve)w_img.c \ $(curve)xaxis.c \ $(curve)yaxis.c atomes_glwin = $(glwin)color_box.c \ $(glwin)glwindow.c \ $(glwin)initchain.c \ $(glwin)initcoord.c \ $(glwin)initmol.c \ $(glwin)initring.c \ $(glwin)m_anim.c \ $(glwin)m_atoms.c \ $(glwin)m_axis.c \ $(glwin)m_back.c \ $(glwin)m_bonds.c \ $(glwin)m_box.c \ $(glwin)m_clones.c \ $(glwin)m_coord.c \ $(glwin)m_edit.c \ $(glwin)menu_bar.c \ $(glwin)m_map.c \ $(glwin)m_poly.c \ $(glwin)m_proj.c \ $(glwin)m_quality.c \ $(glwin)m_render.c \ $(glwin)m_rep.c \ $(glwin)m_style.c \ $(glwin)m_tools.c \ $(glwin)popup.c \ $(glwin)w_advance.c \ $(glwin)w_atoms.c \ $(glwin)w_axis.c \ $(glwin)w_bonds.c \ $(glwin)w_box.c \ $(glwin)w_chains.c \ $(glwin)w_colors.c \ $(glwin)w_coord.c \ $(glwin)w_cutoffs.c \ $(glwin)w_encode.c \ $(glwin)w_labels.c \ $(glwin)w_library.c \ $(glwin)w_measures.c \ $(glwin)w_periodic.c \ $(glwin)w_record.c \ $(glwin)w_rings.c \ $(glwin)w_search.c \ $(glwin)w_sequencer.c \ $(glwin)w_spiner.c \ $(glwin)w_volumes.c atomes_gldraw = $(gldraw)d_atoms.c \ $(gldraw)d_axis.c \ $(gldraw)d_bonds.c \ $(gldraw)d_box.c \ $(gldraw)d_label.c \ $(gldraw)d_measures.c \ $(gldraw)d_poly.c \ $(gldraw)d_rings.c \ $(gldraw)d_selection.c \ $(gldraw)d_background.c \ $(gldraw)image.c \ $(gldraw)movie.c \ $(gldraw)ogl_text.c atomes_gledit = $(gledit)atom_action.c \ $(gledit)atom_coord.c \ $(gledit)atom_edit.c \ $(gledit)atom_geo.c \ $(gledit)atom_insert.c \ $(gledit)atom_move.c \ $(gledit)atom_object.c \ $(gledit)atom_remove.c \ $(gledit)atom_search.c \ $(gledit)atom_species.c \ $(gledit)cbuild_action.c \ $(gledit)cbuild_edit.c \ $(gledit)cbuild_info.c \ $(gledit)cbuild_sg.c \ $(gledit)cell_cut.c \ $(gledit)cell_density.c \ $(gledit)cell_edit.c \ $(gledit)cell_extra.c \ $(gledit)cell_pixel.c \ $(gledit)cell_shift.c \ $(gledit)cell_super.c atomes_opengl = $(atomes_glwin) \ $(atomes_gldraw) \ $(atomes_gledit) \ $(ogl)arcball.c \ $(ogl)glview.c \ $(ogl)ogl_draw.c \ $(ogl)ogl_shaders.c \ $(ogl)ogl_shading.c \ $(ogl)ogl_utils.c \ $(ogl)selection.c atomes_includes = config.h \ version.h \ global.h \ bind.h \ affero.h \ $(gui)callbacks.h \ $(gui)gui.h \ $(gui)interface.h \ $(gui)xmlrw.h \ $(gui)preferences.h \ $(work)workspace.h \ $(proj)project.h \ $(read)readers.h \ $(calc)calc.h \ $(cpmd)cpmd.h \ $(cp2k)cp2k.h \ $(dl_poly)dlp_field.h \ $(field)force_fields.h \ $(curve)cedit.h \ $(curve)curve.h \ $(curve)datab.h \ $(glwin)color_box.h \ $(glwin)glwindow.h \ $(glwin)initcoord.h \ $(glwin)submenus.h \ $(glraw)movie.h \ $(gledit)atom_edit.h \ $(gledit)cbuild_edit.h \ $(gledit)cell_edit.h \ $(ogl)glview.h \ $(ogl)glwin.h \ $(ogl)math_3d.h \ $(ogl)ogl_shading.h clean: -rm -f *.mod -rm -f */*.o -rm -f */*/*.o # List the files required to build the program atomes_SOURCES = \ $(atomes_fortran) \ $(atomes_includes) \ global.c \ $(atomes_gui) \ $(atomes_workspace) \ $(atomes_project) \ $(atomes_calc) \ $(atomes_curve) \ $(atomes_opengl) atomes_1.3.1/src/gui/0000775000175000017500000000000015212624223014060 5ustar lerouxlerouxatomes_1.3.1/src/gui/preferences.c0000664000175000017500000053422115212624223016534 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file preferences.c * @short Functions to create the 'User preferences' window * @author Sébastien Le Roux */ /* * This file: 'configuration.c' * * Contains: * - The GUI for the general configuration window - The associated controllers * * List of functions: int xml_save_color_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, ColRGBA col); int xml_save_xyz_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, vec3_t data); int xml_save_parameter_to_file (xmlTextWriterPtr writer, gchar * xml_leg, gchar * xml_key, gboolean doid, int xml_id, gchar * value); int save_preferences_to_xml_file (); ColRGBA get_spec_color (int z, , element_color * clist); gboolean are_identical_colors (ColRGBA col_a, ColRGBA col_b); gboolean not_in_cutoffs (int z_a, int z_b); float get_radius (int object, int col, int z, element_radius * rad_list); double xml_string_to_double (xmlChar * content); G_MODULE_EXPORT gboolean pref_color_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data); bond_cutoff * duplicate_cutoffs (bond_cutoff * old_cutoff); element_radius * duplicate_element_radius (element_radius * old_list); element_color * duplicate_element_color (element_color * old_list); void set_parameter (gchar * content, gchar * key, int vid, dint * bond, vec3_t * vect, float start, float end, ColRGBA * col); void read_parameter (xmlNodePtr parameter_node); void read_light (xmlNodePtr light_node); void read_preferences (xmlNodePtr preference_node); void read_style_from_xml_file (xmlNodePtr style_node, int style); void read_preferences_from_xml_file (); void set_atomes_defaults (); void set_atomes_preferences (); void color_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void radius_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void color_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data); void add_cut_box (); void dyna_parameters (GtkWidget * vbox, int cid); void clean_all_tmp (); void duplicate_rep_data (rep_data * new_rep, rep_data * old_rep); void duplicate_background_data (background * new_back, background * old_back); void duplicate_box_data (box * new_box, box * old_box); void duplicate_axis_data (axis * new_axis, axis * old_axis); void prepare_tmp_default (); void save_preferences (); void adjust_preferences_window (); void create_configuration_dialog (); void add_global_option (GtkWidget * vbox, tint * oid); G_MODULE_EXPORT void set_measures (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_selection_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void toggled_default_stuff (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_default_stuff (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_default_stuff (GtkEntry * res, gpointer data); G_MODULE_EXPORT void edit_pref (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data); G_MODULE_EXPORT void edit_chem_preferences (GtkDialog * edit_chem, gint response_id, gpointer data); G_MODULE_EXPORT void run_ac_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void pref_color_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void set_stuff_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void edit_species_parameters (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_default_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_default_map (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_default_num_delta (GtkEntry * res, gpointer data); G_MODULE_EXPORT void tunit_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void edit_pc_value (GtkEntry * res, gpointer data); G_MODULE_EXPORT void toggle_use_cutoff (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_use_cutoff (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void totcut_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void cut_spec_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_cutoffs_default (GtkButton * but, gpointer data); G_MODULE_EXPORT void update_projects (GtkDialog * proj_sel, gint response_id, gpointer data); G_MODULE_EXPORT void toggle_select_project (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_select_project (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void restore_all_defaults (GtkButton * but, gpointer data); G_MODULE_EXPORT void edit_preferences (GtkDialog * edit_prefs, gint response_id, gpointer data); G_MODULE_EXPORT void set_default_options (GtkButton * but, gpointer data); GtkWidget * pref_list (gchar * mess[2], int nelem, gchar * mlist[nelem][2], gchar * end); GtkWidget * view_preferences (); GtkWidget * over_param (int object, int style); GtkWidget * style_tab (int style); GtkWidget * model_preferences (); GtkWidget * combo_map (int obj); GtkWidget * opengl_preferences (); GtkWidget * calc_preferences (); GtkTreeModel * style_combo_tree (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "glwin.h" #include "bind.h" #include "preferences.h" #include #include #include #include #include #include #ifndef G_OS_WIN32 #include #else #include #endif extern void apply_default_parameters_to_project (project * this_proj, gboolean with_analysis); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int search_type; extern void edit_bonds (GtkWidget * vbox); extern void update_omega_max (); extern void calc_rings (GtkWidget * vbox); extern void calc_sk_t (GtkWidget * vbox); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); extern GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat); extern GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * the_light); extern GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog); extern GtkWidget * labels_tab (glwin * view, int lid); extern void update_light_data (int li, opengl_edition * ogl_win); extern void setup_fog_dialogs (opengl_edition * ogl_edit, int fid); extern G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); extern void update_gradient_widgets (gradient_edition * gradient_win, background * back); extern G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data); extern void duplicate_fog (Fog * new_fog, Fog * old_fog); extern void duplicate_material (Material * new_mat, Material * old_mat); extern void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab); extern Light * init_light_source (int type, float size); extern Light ** copy_light_sources (int dima, int dimb, Light ** old_sp); extern GtkWidget * lightning_fix (glwin * view, Material * this_material); extern GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign); extern float mat_min_max[5][2]; extern GtkWidget * omega_max_hbox; extern GtkWidget * omega_max_info; extern GtkWidget * skt_all_info; GtkWidget * dyna_entry[2][2]; GtkWidget * dyna_combo[2]; GtkWidget * atom_entry_over[8]; GtkWidget * bond_entry_over[6]; GtkWidget * meas_combo; GtkWidget * meas_box[2]; GtkWidget * sel_combo; GtkWidget * sel_box[2]; GtkWidget * preference_notebook = NULL; double default_totcut; double tmp_totcut; bond_cutoff * default_bond_cutoff; bond_cutoff * tmp_bond_cutoff; // Generic parameters for all calculations #define NUM_DELTA 9 int * default_num_delta = NULL; /*!< Number of x points: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = sp \n 7 = msd \n 8 = S(q,w) */ int * tmp_num_delta = NULL; // Dynamical calculations double * default_delta_t = NULL; /*!< 0 = time step, \n 1 = time unit , in: fs, ps, ns, µs, ms */ double * tmp_delta_t = NULL; // Ring statistics int * default_rsparam = NULL; /*!< Ring statistics parameters: \n 0 = Default search, \n 1 = Initial node(s) for the search: selected chemical species or all atoms, \n 2 = Maximum size of ring for the search Rmax, \n 3 = Maximum number of ring(s) per MD step NUMA, \n 4 = Search only for ABAB rings or not, \n 5 = Include Homopolar bond(s) in the analysis or not, \n 6 = Include homopolar bond(s) when calculating the distance matrix */ int * tmp_rsparam = NULL; // Chain statistics int * default_csparam = NULL; /*!< Chain statistics parameters: \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Maximum size for a chain Cmax, \n 2 = Maximum number of chain(s) per MD step CNUMA, \n 3 = Search only for AAAA chains or not, \n 4 = Search only for ABAB chains or not, \n 5 = Include Homopolar bond(s) in the analysis or not, \n 6 = Search only for 1-(2)n-1 chains */ int * tmp_csparam = NULL; // F(k,t) and S(q,w) gboolean default_skt_sets; /*!< Output calculation results for all t steps */ int default_skt_n_sets; /*!< Number of configuration(s) to save when computing S(k,t) */ int default_sqw_n_sets; /*!< Number of q vector(s) to compute S(q,w) */ int default_sqw_freq; /*!< Frequency intervals */ gboolean tmp_skt_sets; int tmp_skt_n_sets; int tmp_sqw_n_sets; int tmp_sqw_freq; // 5+3 styles + 5+3 cloned styles element_radius * default_atomic_rad[16]; element_radius * tmp_atomic_rad[16]; // 3 styles + 3 cloned styles element_radius * default_bond_rad[6]; element_radius * tmp_bond_rad[6]; // atoms + clones element_color * default_atom_color[2]; element_color * tmp_atom_color[2]; element_color * default_label_color[2]; element_color * tmp_label_color[2]; int radius_id; int * default_opengl = NULL; int * tmp_opengl = NULL; Material default_material; Material tmp_material; Lightning default_lightning; Lightning tmp_lightning; Fog default_fog; Fog tmp_fog; // Model gboolean default_clones; gboolean tmp_clones; gboolean default_cell; gboolean tmp_cell; gboolean * default_o_at_rs; gboolean * tmp_o_at_rs; double * default_at_rs; double * tmp_at_rs; gboolean * default_o_bd_rw; gboolean * tmp_o_bd_rw; double * default_bd_rw; double * tmp_bd_rw; screen_label default_label[5]; screen_label * tmp_label[5]; int default_acl_format[2]; int tmp_acl_format[2]; gboolean default_mtilt[2]; gboolean tmp_mtilt[2]; int default_mpattern[2]; int tmp_mpattern[2]; int default_mfactor[2]; int tmp_mfactor[2]; double default_mwidth[2]; double tmp_mwidth[2]; rep_data default_rep; rep_data * tmp_rep = NULL; rep_edition * pref_rep_win = NULL; background default_background; background * tmp_background = NULL; gradient_edition * pref_gradient_win = NULL; box default_box; box * tmp_box = NULL; box_edition * pref_box_win = NULL; axis default_axis; axis * tmp_axis = NULL; axis_edition * pref_axis_win = NULL; ColRGBA default_sel_color[2]; ColRGBA tmp_sel_color[2]; gboolean preferences = FALSE; opengl_edition * pref_ogl_edit = NULL; gchar * pref_error = NULL; tint * pref_pointer = NULL; gchar * xml_style_leg[6] = {"ball_and_stick", "wireframes", "spacefilled", "spheres", "cylinders", "dots"}; gchar * xml_filled_leg[4] = {"covalent", "ionic", "van-der-waals", "crystal"}; gchar * xml_atom_leg[3] = {"atoms_radius", "dot_size", "sphere_radius"}; gchar * xml_bond_leg[3] = {"bond_radius", "wireframe_width", "cylinder_radius"}; /*! \fn int xml_save_color_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, ColRGBA col) \brief save color data (red, green, blue, alpha) to XML file \param writer the XML writer to update \param did id, if any \param legend the corresponding legend \param data the data to save */ int xml_save_color_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, ColRGBA col) { int rc; gchar * str; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"info", BAD_CAST legend); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST key); if (rc < 0) return 0; if (did > -1) { str = g_strdup_printf ("%d", did); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST str); g_free (str); if (rc < 0) return 0; } str = g_strdup_printf ("%f", col.red); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"red", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", col.green); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"green", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", col.blue); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"blue", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", col.alpha); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"alpha", BAD_CAST str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; return 1; } /*! \fn int xml_save_xyz_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, vec3_t data) \brief save vector data (x,y,z) to XML file \param writer the XML writer to update \param did id, if any \param legend the corresponding legend \param data the data to save */ int xml_save_xyz_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, vec3_t data) { int rc; gchar * str; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"info", BAD_CAST legend); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST key); if (rc < 0) return 0; if (did > -1) { str = g_strdup_printf ("%d", did); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST str); g_free (str); if (rc < 0) return 0; } str = g_strdup_printf ("%f", data.x); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"x", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", data.y); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"y", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", data.z); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"z", BAD_CAST str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; return 1; } /*! \fn int xml_save_parameter_to_file (xmlTextWriterPtr writer, gchar * xml_leg, gchar * xml_key, gboolean doid, int xml_id, gchar * value) \brief save single parameter to XML file \param writer the XML writer to update \param xml_leg information \param xml_key key \param doid add id attribute to parameter (1/0) \param xml_id value for id \param value parameter to write */ int xml_save_parameter_to_file (xmlTextWriterPtr writer, gchar * xml_leg, gchar * xml_key, gboolean doid, int xml_id, gchar * value) { int rc; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"info", BAD_CAST xml_leg); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST xml_key); if (rc < 0) return 0; if (doid) { gchar * str; str = g_strdup_printf ("%d", xml_id); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST (const xmlChar *)str); g_free (str); if (rc < 0) return 0; } rc = xmlTextWriterWriteFormatString (writer, "%s", value); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; return 1; } /*! \fn int save_preferences_to_xml_file () \brief save software preferences to XML file */ int save_preferences_to_xml_file () { int rc; pref_error = NULL; if (ATOMES_CONFIG_DIR) { #ifdef G_OS_WIN32 if (! CreateDirectory(ATOMES_CONFIG_DIR, NULL) && GetLastError() != ERROR_ALREADY_EXISTS) { pref_error = g_strdup_printf (_("Error: impossible to create %s (code: %lu)\n"), ATOMES_CONFIG_DIR, GetLastError()); return 0; } #else if (mkdir(ATOMES_CONFIG_DIR, S_IRWXU | S_IRWXG | S_IRWXO) && errno != EEXIST) { pref_error = g_strdup_printf (_("Error: impossible to create %s (code: %s)\n"), ATOMES_CONFIG_DIR, strerror(errno)); return 0; } #endif } xmlTextWriterPtr writer; gchar * xml_delta_num_leg[NUM_DELTA] = {i18n("g(r): number of δr"), i18n("s(q): number of δq"), i18n("s(k): number of δk"), i18n("g(r) FFT: number of δr"), i18n("Dij: number of δr [min(Dij)-max(Dij)]"), i18n("Angles distribution: number of δθ [0-180°]"), i18n("Spherical harmonics: l(max) in [2-40]"), i18n("MSD: steps between configurations"), i18n("F(k,t): number of δk")}; gchar * xml_delta_t_leg[2] = {i18n("MSD: time steps δt"), i18n("MSD: time unit")}; gchar * xml_rings_leg[7] = {i18n("Default search"), i18n("Atom(s) to initiate the search from"), i18n("Maximum size for a ring"), i18n("Maximum number of rings of size n per MD step"), i18n("Only search for ABAB rings"), i18n("No homopolar bonds in the rings (A-A, B-B ...)"), i18n("No homopolar bonds in the connectivity matrix")}; gchar * xml_chain_leg[7] = {i18n("Atom(s) to initiate the search from"), i18n("Maximum size for a ring"), i18n("Maximum number of rings of size n per MD step"), i18n("Only search for AAAA chains"), i18n("Only search for ABAB chains"), i18n("No homopolar bonds in the chains (A-A, B-B ...)"), i18n("Only search for 1-(2)n-1 chains")}; gchar * xml_skt_leg[4] = {i18n("Analyze all correlated δt steps"), i18n("Number of analyzed δt steps"), i18n("Number of analyzed q points"), i18n("Number of frequency points")}; gchar * xml_opengl_leg[5] = {i18n("Default style"), i18n("Atom(s) color map"), i18n("Polyhedra color map"), i18n("Quality"), i18n("Ray Tracing")}; gchar * xml_material_leg[8] = {i18n("Predefine material"), i18n("Lightning model"), i18n("Metallic"), i18n("Roughness"), i18n("Back lightning"), "Gamma", i18n("Opacity"), i18n("Albedo")}; gchar * xml_lightning_leg[7] = {i18n("Type"), i18n("Fix"), i18n("Position"), i18n("Direction"), i18n("Intensity"), i18n("Attenuation"), i18n("Spot specifics")}; gchar * xml_fog_leg[5] = {i18n("Mode"), i18n("Type"), i18n("Density"), i18n("Depth"), i18n("Color")}; gchar * xml_model_leg[2] = {i18n("Show clones"), i18n("Show box")}; gchar * xml_label_leg[6] = {i18n("Position"), i18n("Rendering") , i18n("Scaling"), i18n("Font"), i18n("Shift"), i18n("Colors")}; gchar * xml_axis_leg[3] = {i18n("Legend on x"), i18n("Legend on y"), i18n("Legend on z")}; /* Create a new XmlWriter for ATOMES_CONFIG, with no compression. */ writer = xmlNewTextWriterFilename (ATOMES_CONFIG, 0); if (writer == NULL) return 0; rc = xmlTextWriterSetIndent(writer, 1); if (rc < 0) return 0; /* Start the document with the xml default for the version, * encoding MY_ENCODING and the default for the standalone * declaration. */ rc = xmlTextWriterStartDocument (writer, NULL, MY_ENCODING, NULL); if (rc < 0) return 0; rc = xmlTextWriterWriteComment (writer, (const xmlChar *)_("atomes preferences XML file")); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"atomes_preferences-xml"); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"analysis"); if (rc < 0) return 0; int i, j, k, l, m, n, o; gchar * str; if (default_totcut > 0.0 || default_bond_cutoff) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"cutoffs"); if (rc < 0) return 0; if (default_totcut > 0.0) { str = g_strdup_printf ("%lf", default_totcut); rc = xml_save_parameter_to_file (writer, _("Total cutoff"), "default_totcut", TRUE, 0, str); g_free (str); if (! rc) return 0; } if (default_bond_cutoff) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"partials"); if (rc < 0) return 0; bond_cutoff * tmp_cut = default_bond_cutoff; while (tmp_cut) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; str = g_strdup_printf (_("cutoff %s-%s"), periodic_table_info[tmp_cut -> Z[0]].lab, periodic_table_info[tmp_cut -> Z[1]].lab); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"info", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%d", tmp_cut -> Z[0]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"α", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%d", tmp_cut -> Z[1]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"β", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%lf", tmp_cut -> cutoff); rc = xmlTextWriterWriteFormatString (writer, "%s", str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; tmp_cut = tmp_cut -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } for (i=0; i type); rc = xml_save_parameter_to_file (writer, _(xml_lightning_leg[0]), "light.type", FALSE, 0, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_lightning.spot[i] -> fix); rc = xml_save_parameter_to_file (writer, _(xml_lightning_leg[1]), "light.fix", FALSE, 0, str); g_free (str); if (! rc) return 0; if (default_lightning.spot[i] -> type) { rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[2]), "light.position", default_lightning.spot[i] -> position); if (! rc) return rc; } if (default_lightning.spot[i] -> type != 1) { rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[3]), "light.direction", default_lightning.spot[i] -> direction); if (! rc) return rc; } rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[4]), "light.intensity", default_lightning.spot[i] -> intensity); if (! rc) return rc; if (default_lightning.spot[i] -> type) { rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[5]), "light.attenuation", default_lightning.spot[i] -> attenuation); if (! rc) return rc; rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[6]), "light.spot", default_lightning.spot[i] -> spot_data); if (! rc) return rc; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } // End lightning rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"fog"); if (rc < 0) return 0; // Mode str = g_strdup_printf ("%d", default_fog.mode); rc = xml_save_parameter_to_file (writer, _(xml_fog_leg[0]), "fog.mode", TRUE, 0, str); g_free (str); if (! rc) return 0; // Type str = g_strdup_printf ("%d", default_fog.based); rc = xml_save_parameter_to_file (writer, _(xml_fog_leg[1]), "fog.type", TRUE, 1, str); g_free (str); if (! rc) return 0; // Density str = g_strdup_printf ("%f", default_fog.density); rc = xml_save_parameter_to_file (writer, _(xml_fog_leg[2]), "fog.density", TRUE, 2, str); g_free (str); if (! rc) return 0; // Depth rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"info", BAD_CAST xml_fog_leg[3]); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST "fog.depth"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST "3"); if (rc < 0) return 0; str = g_strdup_printf ("%f", default_fog.depth[0]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"start", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", default_fog.depth[1]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"end", BAD_CAST str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // Color rc = xml_save_xyz_to_file (writer, 4, xml_fog_leg[4], "fog.color", default_fog.color); if (! rc) return rc; // End fog rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // End opengl rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // Model rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"model"); if (rc < 0) return 0; if (default_clones) { str = g_strdup_printf ("%d", default_clones); rc = xml_save_parameter_to_file (writer, _(xml_model_leg[0]), "default_clones", FALSE, 0, str); g_free (str); if (! rc) return 0; } if (! default_cell) { str = g_strdup_printf ("%d", default_cell); rc = xml_save_parameter_to_file (writer, _(xml_model_leg[1]), "default_cell", FALSE, 0, str); g_free (str); if (! rc) return 0; } rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"atoms_and_bonds"); if (rc < 0) return 0; element_radius * tmp_rad; gboolean do_atoms; gboolean do_bonds; gchar * str_a, * str_b; for (i=0; i rad); rc = xml_save_parameter_to_file (writer, periodic_table_info[tmp_rad -> Z].lab, "default_atomic_rad", TRUE, tmp_rad -> Z, str); g_free (str); if (! rc) return 0; tmp_rad = tmp_rad -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } } } if (do_bonds) { j = (i < 2) ? i : 2; for (k=0; k<2; k++) { if (default_o_bd_rw[j+k*3]) { str_a = (k) ? g_strdup_printf ("clone-%s", _(xml_bond_leg[j])) : g_strdup_printf ("%s", _(xml_bond_leg[j])); str_b = g_strdup_printf ("%f", default_bd_rw[j+k*3]); rc = xml_save_parameter_to_file (writer, str_a, "default_bd_rw", TRUE, j+k*3, str_b); g_free (str_a); g_free (str_b); if (! rc) return 0; } if (default_bond_rad[j+k*3]) { str_a = (k) ? g_strdup_printf ("clone-%s", _(xml_bond_leg[j])) : g_strdup_printf ("%s", _(xml_bond_leg[j])); rc = xmlTextWriterStartElement (writer, BAD_CAST str_a); g_free (str_a); if (rc < 0) return 0; tmp_rad = default_bond_rad[j+k*3]; while (tmp_rad) { str = g_strdup_printf ("%f", tmp_rad -> rad); rc = xml_save_parameter_to_file (writer, periodic_table_info[tmp_rad -> Z].lab, "default_bond_rad", TRUE, tmp_rad -> Z, str); g_free (str); if (! rc) return 0; tmp_rad = tmp_rad -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } // End atoms_and_bonds rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; element_color * tmp_col; // atoms and clones labels rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"labels"); if (rc < 0) return 0; gchar * obj[2]={"atoms", "clones"}; for (i=0; i<2; i++) { rc = xmlTextWriterStartElement (writer, BAD_CAST obj[i]); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_label[i].position); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[0]), "default_label", TRUE, 0, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i].render); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[1]), "default_label", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i].scale); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[2]), "default_label", TRUE, 2, str); g_free (str); if (! rc) return 0; rc = xml_save_parameter_to_file (writer, _(xml_label_leg[3]), "default_label", TRUE, 3, default_label[i].font); if (! rc) return 0; rc = xml_save_xyz_to_file (writer, 4, _(xml_label_leg[4]), "default_label", vec3(default_label[i].shift[0], default_label[i].shift[1], default_label[i].shift[2])); if (! rc) return 0; str = g_strdup_printf ("%d", default_acl_format[i]); rc = xml_save_parameter_to_file (writer, _("Format"), "default_label", TRUE, 5, str); g_free (str); if (! rc) return 0; if (default_label[i].n_colors || default_label_color[i]) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"colors"); if (rc < 0) return 0; if (default_label[i].n_colors) { xml_save_color_to_file (writer, i, _("Only label color"), "only_label_color", default_label[i].color[0]); } else { tmp_col = default_label_color[i]; while (tmp_col) { rc = xml_save_color_to_file (writer, tmp_col -> Z, periodic_table_info[tmp_col -> Z].lab, "default_label_color", tmp_col -> col); if (! rc) return 0; tmp_col = tmp_col -> next; } } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } // End atoms and clones colors rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; do_atoms = (default_atom_color[0] || default_atom_color[1]) ? TRUE : FALSE; if (do_atoms) { // atoms and clones colors rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"colors"); if (rc < 0) return 0; for (i=0; i<2; i++) { if (default_atom_color[i]) { rc = xmlTextWriterStartElement (writer, BAD_CAST obj[i]); if (rc < 0) return 0; tmp_col = default_atom_color[i]; while (tmp_col) { rc = xml_save_color_to_file (writer, tmp_col -> Z, periodic_table_info[tmp_col -> Z].lab, "default_atom_color", tmp_col -> col); if (! rc) return 0; tmp_col = tmp_col -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } } if (default_box.box != NONE) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"box"); if (rc < 0) return 0; str = g_strdup_printf ("%f", (default_box.box == WIREFRAME) ? default_box.line : default_box.rad); rc = xml_save_parameter_to_file (writer, (default_box.box == WIREFRAME) ? _("Wireframe width") : _("Cylinder radius"), "default_box", TRUE, default_box.box, str); g_free (str); if (! rc) return 0; rc = xml_save_color_to_file (writer, -1, _("Color"), "default_box", default_box.color); if (! rc) return 0; // End box rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } // End model rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // View rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"view"); if (rc < 0) return 0; // Background rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"background"); str = g_strdup_printf ("%d", default_background.gradient); rc = xml_save_parameter_to_file (writer, _("Gradient"), "default_background", TRUE, 0, str); g_free (str); if (! rc) return 0; if (default_background.gradient) { str = g_strdup_printf ("%d", default_background.direction); rc = xml_save_parameter_to_file (writer, _("Direction"), "default_background", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%f", default_background.position); rc = xml_save_parameter_to_file (writer, _("Mixed position"), "default_background", TRUE, 2, str); g_free (str); if (! rc) return 0; for (i=0; i<2; i++) { rc = xml_save_color_to_file (writer, i+3, _("Color"), "default_background", default_background.gradient_color[i]); if (! rc) return 0; } } else { rc = xml_save_color_to_file (writer, -1, _("Color"), "default_background", default_background.color); if (! rc) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // Representation rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"representation"); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_rep.rep); rc = xml_save_parameter_to_file (writer, _("Representation type"), "default_rep", TRUE, 0, str); g_free (str); if (! rc) return 0; if (default_rep.rep) { str = g_strdup_printf ("%lf", default_rep.gnear); rc = xml_save_parameter_to_file (writer, _("Camera depth"), "default_rep", TRUE, 1, str); g_free (str); if (! rc) return 0; } str = g_strdup_printf ("%lf", 1.0 - 0.5*default_rep.zoom); rc = xml_save_parameter_to_file (writer, _("Zoom"), "default_rep", TRUE, 2, str); g_free (str) ; if (! rc) return 0; for (i=0; i<2; i++) { str = g_strdup_printf ("%lf", - default_rep.c_angle[i]); rc = xml_save_parameter_to_file (writer, (i) ? _("Camera pitch") : _("Camera heading"), "default_rep", TRUE, 3+i, str); g_free (str) ; if (! rc) return 0; } for (i=0; i<2; i++) { str = g_strdup_printf ("%lf", default_rep.c_shift[i]); rc = xml_save_parameter_to_file (writer, (i) ? _("Camera x") : _("Camera y"), "default_rep", TRUE, 5+i, str); g_free (str) ; if (! rc) return 0; } // End representation rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; if (default_axis.axis != NONE) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"axis"); if (rc < 0) return 0; if (default_axis.t_pos != NONE) { str = g_strdup_printf ("%d", default_axis.t_pos); rc = xml_save_parameter_to_file (writer, _("Template position"), "default_axis", TRUE, 0, str); g_free (str); if (! rc) return 0; } else { rc = xml_save_xyz_to_file (writer, 0, _("Custom position"), "default_axis", vec3(default_axis.c_pos[0], default_axis.c_pos[1], default_axis.c_pos[2])); if (! rc) return 0; } str = g_strdup_printf ("%f", (default_axis.axis == WIREFRAME) ? default_axis.line : default_axis.rad); rc = xml_save_parameter_to_file (writer, (default_axis.axis == WIREFRAME) ? _("Wireframe width") : _("Cylinder radius"), "default_axis", TRUE, default_axis.axis, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%f", default_axis.length); rc = xml_save_parameter_to_file (writer, _("Length"), "default_axis", TRUE, 2, str); g_free (str); if (! rc) return 0; if (default_axis.labels) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"labels"); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_label[2].render); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[1]), "default_label", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[2].scale); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[2]), "default_label", TRUE, 2, str); g_free (str); if (! rc) return 0; rc = xml_save_parameter_to_file (writer, _(xml_label_leg[3]), "default_label", TRUE, 3, default_label[2].font); if (! rc) return 0; for (i=0; i<3; i++) { rc = xml_save_parameter_to_file (writer, _(xml_axis_leg[i]), "axis_legend", TRUE, i, default_axis.title[i]); if (! rc) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } if (default_axis.color) { for (i=0; i<3; i++) { rc = xml_save_color_to_file (writer, i, _("Color"), "default_axis", default_axis.color[i]); if (! rc) return 0; } } // End axis rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"measures"); if (rc < 0) return 0; gchar * m_key[2]={"standard", "selection"}; for (i=0; i<2; i++) { rc = xmlTextWriterStartElement (writer, BAD_CAST m_key[i]); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"labels"); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_label[i+3].position); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[0]), "default_label", TRUE, 0, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i+3].render); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[1]), "default_label", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i+3].scale); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[2]), "default_label", TRUE, 2, str); g_free (str); if (! rc) return 0; rc = xml_save_parameter_to_file (writer, _(xml_label_leg[3]), "default_label", TRUE, 3, default_label[i+3].font); if (! rc) return 0; xml_save_color_to_file (writer, i+3, _("Font color"), "default_font_color", default_label[i+3].color[0]); if (! rc) return 0; rc = xmlTextWriterEndElement (writer); // End label if (rc < 0) return 0; // mtilt str = g_strdup_printf ("%d", default_mtilt[i]); rc = xml_save_parameter_to_file (writer, _("Tilt along"), "default_mtilt", TRUE, i, str); g_free (str); if (! rc) return 0; // mtilt str = g_strdup_printf ("%d", default_mpattern[i]); rc = xml_save_parameter_to_file (writer, _("Pattern"), "default_mpattern", TRUE, i, str); g_free (str); if (! rc) return 0; // mfactor str = g_strdup_printf ("%d", default_mfactor[i]); rc = xml_save_parameter_to_file (writer, _("Factor"), "default_mfactor", TRUE, i, str); g_free (str); if (! rc) return 0; // mfactor str = g_strdup_printf ("%lf", default_mwidth[i]); rc = xml_save_parameter_to_file (writer, _("Width"), "default_mwidth", TRUE, i, str); g_free (str); if (! rc) return 0; rc = xmlTextWriterEndElement (writer); // End measures type if (rc < 0) return 0; } rc = xmlTextWriterEndElement (writer); // End measures if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"atom-selections"); if (rc < 0) return 0; for (i=0; i<2; i++) { xml_save_color_to_file (writer, i, _("Selection color"), "default_sel_color", default_sel_color[i]); if (! rc) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // End view rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; rc = xmlTextWriterEndDocument (writer); if (rc < 0) return 0; xmlFreeTextWriter (writer); return 1; } int label_id; /*! \fn double xml_string_to_double (xmlChar * content) \brief convert XML string to double \param content the string to convert */ double xml_string_to_double (xmlChar * content) { return (g_strcmp0((const char *)content, "") == 0) ? 0.0 : string_to_double ((gpointer)content); } /*! \fn void set_parameter (xmlChar * content, gchar * key, int vid, dint * bond, vec3_t * vect, float start, float end, ColRGBA * col) \brief set default parameter \param content the string content \param key the name of variable to set \param vid the id number to set \param bond atoms, if any \param vect vector to set, if any \param start initial value, if any, -1.0 otherwise \param end final value, if any, -1.0 otherwise \param col color to set, if any */ void set_parameter (xmlChar * content, gchar * key, int vid, dint * bond, vec3_t * vect, float start, float end, ColRGBA * col) { element_radius * tmp_rad; element_color * tmp_col; if (bond) { bond_cutoff * cut; if (default_bond_cutoff) { cut = default_bond_cutoff; while (cut -> next) { cut = cut -> next; } cut -> next = g_malloc0(sizeof*cut); cut = cut -> next; } else { default_bond_cutoff = g_malloc0(sizeof*default_bond_cutoff); cut = default_bond_cutoff; } cut -> Z[0] = bond -> a; cut -> Z[1] = bond -> b; cut -> use = TRUE; cut -> cutoff = xml_string_to_double(content); } else if (g_strcmp0(key, "default_totcut") == 0) { default_totcut = xml_string_to_double(content); } else if (g_strcmp0(key, "default_num_delta") == 0) { default_num_delta[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_delta_t") == 0) { default_delta_t[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_rsparam") == 0) { default_rsparam[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_csparam") == 0) { default_csparam[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_skt_sets") == 0) { default_skt_sets = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_skt_n_sets") == 0) { default_skt_n_sets = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_sqw_n_sets") == 0) { default_sqw_n_sets = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_sqw_freq") == 0) { default_sqw_freq = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_opengl") == 0) { default_opengl[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_material") == 0) { if (vid < 0) { default_material.predefine = (int)xml_string_to_double(content); } else if (vid == 6 && vect) { default_material.albedo = * vect; } else { default_material.param[vid] = xml_string_to_double(content); } } else if (g_strcmp0(key, "default_lightning") == 0) { int lights = (int)xml_string_to_double(content); if (default_lightning.lights != lights) { int i; for (i=0; i type = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "light.fix") == 0) { default_lightning.spot[vid] -> fix = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "light.direction") == 0 && vect) { default_lightning.spot[vid] -> direction = * vect; } else if (g_strcmp0(key, "light.position") == 0 && vect) { default_lightning.spot[vid] -> position = * vect; } else if (g_strcmp0(key, "light.intensity") == 0 && vect) { default_lightning.spot[vid] -> intensity = * vect; } else if (g_strcmp0(key, "light.attenuation") == 0 && vect) { default_lightning.spot[vid] -> attenuation = * vect; } else if (g_strcmp0(key, "light.spot") == 0 && vect) { default_lightning.spot[vid] -> spot_data = * vect; } else if (g_strcmp0(key, "fog.mode") == 0) { default_fog.mode = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "fog.type") == 0) { default_fog.based = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "fog.density") == 0) { default_fog.density = xml_string_to_double(content); } else if (g_strcmp0(key, "fog.depth") == 0) { if (start != -1.0) default_fog.depth[0] = start; if (end != -1.0) default_fog.depth[1] = end; } else if (g_strcmp0(key, "fog.color") == 0 && vect) { default_fog.color = * vect; } else if (g_strcmp0(key, "default_cell") == 0) { default_cell = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_clones") == 0) { default_clones = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_at_rs") == 0) { default_o_at_rs[vid] = TRUE; default_at_rs[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_bd_rw") == 0) { default_o_bd_rw[vid] = TRUE; default_bd_rw[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_atomic_rad") == 0) { if (default_atomic_rad[radius_id]) { tmp_rad = default_atomic_rad[radius_id]; while (tmp_rad -> next) { tmp_rad = tmp_rad -> next; } tmp_rad -> next = g_malloc0(sizeof*tmp_rad); tmp_rad = tmp_rad -> next; } else { default_atomic_rad[radius_id] = g_malloc0(sizeof*default_atomic_rad[radius_id]); tmp_rad = default_atomic_rad[radius_id]; } tmp_rad -> Z = vid; tmp_rad -> rad = xml_string_to_double(content); } else if (g_strcmp0(key, "default_bond_rad") == 0) { if (default_bond_rad[radius_id]) { tmp_rad = default_bond_rad[radius_id]; while (tmp_rad -> next) { tmp_rad = tmp_rad -> next; } tmp_rad -> next = g_malloc0(sizeof*tmp_rad); tmp_rad = tmp_rad -> next; } else { default_bond_rad[radius_id] = g_malloc0(sizeof*default_bond_rad[radius_id]); tmp_rad = default_bond_rad[radius_id]; } tmp_rad -> Z = vid; tmp_rad -> rad = xml_string_to_double(content); } else if (g_strcmp0(key, "default_label") == 0) { switch (vid) { case 0: default_label[label_id].position = (int)xml_string_to_double(content); break; case 1: default_label[label_id].render = (int)xml_string_to_double(content); break; case 2: default_label[label_id].scale = (int)xml_string_to_double(content); break; case 3: default_label[label_id].font = g_strdup_printf ("%s", content); break; case 4: default_label[label_id].shift[0] = vect -> x; default_label[label_id].shift[1] = vect -> y; default_label[label_id].shift[2] = vect -> z; break; case 5: default_acl_format[label_id] = (int)xml_string_to_double(content); break; } } else if (g_strcmp0(key, "default_label_color") == 0) { if (! vid) { default_label[label_id].color = g_malloc0(sizeof*default_label[label_id].color); default_label[label_id].color[0] = * col; } else { if (default_label_color[label_id]) { tmp_col = default_label_color[label_id]; while (tmp_col -> next) { tmp_col = tmp_col -> next; } tmp_col -> next = g_malloc0(sizeof*tmp_col); tmp_col = tmp_col -> next; } else { default_label_color[label_id] = g_malloc0(sizeof*default_label_color[label_id]); tmp_col = default_label_color[label_id]; } tmp_col -> Z = vid; tmp_col -> col = * col; } } else if (g_strcmp0(key, "default_font_color") == 0) { default_label[label_id].color = g_malloc0(sizeof*default_label[label_id].color); default_label[label_id].color[0] = * col; } else if (g_strcmp0(key, "default_atom_color") == 0) { if (default_atom_color[label_id]) { tmp_col = default_atom_color[label_id]; while (tmp_col -> next) { tmp_col = tmp_col -> next; } tmp_col -> next = g_malloc0(sizeof*tmp_col); tmp_col = tmp_col -> next; } else { default_atom_color[label_id] = g_malloc0(sizeof*default_atom_color[label_id]); tmp_col = default_atom_color[label_id]; } tmp_col -> Z = vid; tmp_col -> col = * col; } else if (g_strcmp0(key, "only_label_color") == 0) { default_label[label_id].n_colors = 1; default_label[label_id].color = g_malloc0(sizeof*default_label[label_id].color); default_label[label_id].color[0] = * col; } else if (g_strcmp0(key, "default_box") == 0) { if (col) { default_box.color = * col; } else { default_box.box = vid; if (default_box.box == WIREFRAME) { default_box.line = xml_string_to_double(content); } else { default_box.rad = xml_string_to_double(content); } } } else if (g_strcmp0(key, "default_background") == 0) { switch (vid) { case -1: if (col) default_background.color = * col; break; case 0: default_background.gradient = (int) xml_string_to_double(content); break; case 1: default_background.direction = (int) xml_string_to_double(content); break; case 2: default_background.position = xml_string_to_double(content); break; default: if (col) default_background.gradient_color[vid-3] = * col; break; } } else if (g_strcmp0(key, "default_rep") == 0) { switch (vid) { case 0: default_rep.rep = (int) xml_string_to_double(content); break; case 1: default_rep.gnear = xml_string_to_double(content); break; case 2: default_rep.zoom = 2.0*(1.0 - xml_string_to_double(content)); break; default: if (vid < 5) { default_rep.c_angle[vid-3] = - xml_string_to_double(content); } else { default_rep.c_shift[vid-5] = xml_string_to_double(content); } break; } } else if (g_strcmp0(key, "default_axis") == 0) { if (vect) { default_axis.c_pos[0] = vect -> x; default_axis.c_pos[1] = vect -> y; default_axis.c_pos[2] = vect -> z; } else if (col) { if (! default_axis.color) default_axis.color = g_malloc0(3*sizeof*default_axis.color); default_axis.color[vid] = * col; } else { if (vid == 1 || vid == 4) { default_axis.axis = vid; if (vid == 1) default_axis.line = xml_string_to_double(content); if (vid == 4) default_axis.rad = xml_string_to_double(content); } else if (vid == 2) { default_axis.length = xml_string_to_double(content); } else if (! vid) { default_axis.t_pos = (int) xml_string_to_double(content); } } } else if (g_strcmp0(key, "axis_legend") == 0) { default_axis.title[vid] = g_strdup_printf ("%s", content); } else if (g_strcmp0(key, "default_mtilt") == 0) { default_mtilt[vid] = (int) xml_string_to_double(content); } else if (g_strcmp0(key, "default_mpattern") == 0) { default_mpattern[vid] = (int) xml_string_to_double(content); } else if (g_strcmp0(key, "default_mfactor") == 0) { default_mfactor[vid] = (int) xml_string_to_double(content); } else if (g_strcmp0(key, "default_mwidth") == 0) { default_mwidth[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_sel_color") == 0) { if (col) { default_sel_color[vid] = * col; } } } /*! \fn void read_parameter (xmlNodePtr parameter_node) \brief read preferences from XML configuration \param parameter_node node the XML node that point to parameter */ void read_parameter (xmlNodePtr parameter_node) { xmlNodePtr p_node; xmlAttrPtr p_details; gboolean set_codevar, set_id; gboolean set_x, set_y, set_z; gboolean set_r, set_g, set_b, set_a; gboolean set_alpha, set_beta; ColRGBA col; gchar * key = NULL; xmlChar * content, * p_cont; int id; dint bond; float start, end; vec3_t vec; while (parameter_node) { content = xmlNodeGetContent(parameter_node); p_details = parameter_node -> properties; set_codevar = set_id = FALSE; set_x = set_y = set_z = FALSE; set_r = set_g = set_b = set_a = FALSE; set_alpha = set_beta = FALSE; start = end = -1.0; id = -1; while (p_details) { p_node = p_details -> children; if (p_node) { p_cont = xmlNodeGetContent(p_node); if (g_strcmp0("key",(char *)p_details -> name) == 0) { key = g_strdup_printf ("%s", p_cont); set_codevar = TRUE; } else if (g_strcmp0("id",(char *)p_details -> name) == 0) { id = (int) string_to_double ((gpointer)p_cont); set_id = TRUE; } else if (g_strcmp0("α",(char *)p_details -> name) == 0) { bond.a = (int) string_to_double ((gpointer)p_cont); set_alpha = TRUE; } else if (g_strcmp0("β",(char *)p_details -> name) == 0) { bond.b = (int) string_to_double ((gpointer)p_cont); set_beta = TRUE; } else if (g_strcmp0("x",(char *)p_details -> name) == 0) { vec.x = string_to_double ((gpointer)p_cont); set_x = TRUE; } else if (g_strcmp0("y",(char *)p_details -> name) == 0) { vec.y = string_to_double ((gpointer)p_cont); set_y = TRUE; } else if (g_strcmp0("z",(char *)p_details -> name) == 0) { vec.z = string_to_double ((gpointer)p_cont); set_z = TRUE; } else if (g_strcmp0("start",(char *)p_details -> name) == 0) { start = string_to_double ((gpointer)p_cont); } else if (g_strcmp0("end",(char *)p_details -> name) == 0) { end = string_to_double ((gpointer)p_cont); } else if (g_strcmp0("red",(char *)p_details -> name) == 0) { col.red = string_to_double ((gpointer)p_cont); set_r = TRUE; } else if (g_strcmp0("green",(char *)p_details -> name) == 0) { col.green = string_to_double ((gpointer)p_cont); set_g = TRUE; } else if (g_strcmp0("blue",(char *)p_details -> name) == 0) { col.blue = string_to_double ((gpointer)p_cont); set_b = TRUE; } else if (g_strcmp0("alpha",(char *)p_details -> name) == 0) { col.alpha = string_to_double ((gpointer)p_cont); set_a = TRUE; } xmlFree (p_cont); } p_details = p_details -> next; } if ((set_codevar && (set_id || (set_r && set_g && set_b && set_a))) || (set_alpha && set_beta)) { // g_print ("key= %s, id= %d, content= %s\n", key, id, content); set_parameter (content, key, id, (set_alpha && set_beta) ? & bond : NULL, (set_x && set_y && set_z) ? & vec : NULL, start, end, (set_r && set_g && set_b && set_a) ? & col : NULL); } if (key) g_free (key); xmlFree (content); parameter_node = parameter_node -> next; parameter_node = findnode (parameter_node, "parameter"); } } /*! \fn void read_light (xmlNodePtr light_node) \brief read light preferences from XML configuration \param light_node */ void read_light (xmlNodePtr light_node) { xmlNodePtr l_node, p_node; xmlNodePtr parameter_node; xmlAttrPtr l_details, p_details; gchar * key = NULL; int lid; gboolean set_codevar; gboolean set_lid = FALSE; gboolean set_x, set_y, set_z; xmlChar * content, * p_cont; vec3_t vec; l_details = light_node -> properties; while (l_details) { l_node = l_details -> children; if (l_node) { if (g_strcmp0("id",(char *)l_details -> name) == 0) { content = xmlNodeGetContent(l_node); lid = (int) string_to_double ((gpointer)content); xmlFree (content); set_lid = TRUE; } } l_details = l_details -> next; } if (set_lid) { parameter_node = findnode (light_node -> children, "parameter"); set_codevar = FALSE; set_x = set_y = set_z = FALSE; while (parameter_node) { content = xmlNodeGetContent(parameter_node); p_details = parameter_node -> properties; while (p_details) { p_node = p_details -> children; if (p_node) { p_cont = xmlNodeGetContent(p_node); if (g_strcmp0("key",(char *)p_details -> name) == 0) { key = g_strdup_printf ("%s", p_cont); set_codevar = TRUE; } else if (g_strcmp0("x",(char *)p_details -> name) == 0) { vec.x = string_to_double ((gpointer)p_cont); set_x = TRUE; } else if (g_strcmp0("y",(char *)p_details -> name) == 0) { vec.y = string_to_double ((gpointer)p_cont); set_y = TRUE; } else if (g_strcmp0("z",(char *)p_details -> name) == 0) { vec.z = string_to_double ((gpointer)p_cont); set_z = TRUE; } xmlFree (p_cont); } p_details = p_details -> next; } if (set_codevar) { set_parameter (content, key, lid, NULL, (set_x && set_y && set_z) ? & vec : NULL, -1.0, -1.0, NULL); } if (key) g_free (key); xmlFree (content); parameter_node = parameter_node -> next; parameter_node = findnode (parameter_node, "parameter"); } } } /*! \fn void read_preferences (xmlNodePtr preference_node) \brief read preferences from XML configuration \param preference_node node the XML node that point to preferences */ void read_preferences (xmlNodePtr preference_node) { xmlNodePtr node; node = findnode (preference_node -> children, "parameter"); read_parameter (node); } /*! \fn void read_style_from_xml_file (xmlNodePtr style_node, int style) \brief read style preferences from XML file \param style_node the XML node that point to style data \param style the target style */ void read_style_from_xml_file (xmlNodePtr style_node, int style) { xmlNodePtr node; gchar * str; int i, j, k, l; i = (style == 0 || style == 2) ? 0 : (style == 1 || style == 4) ? 1 : 2; for (j=0; j<2; j++) { k = (style == 2) ? 4 : 1; for (l=0; l name), "atomes_preferences-xml") == 0) { node = findnode(racine -> children, "analysis"); if (node) { p_node = findnode (node -> children, "cutoffs"); if (p_node) { read_preferences (p_node); l_node = findnode(p_node -> children, "partials"); if (l_node) { read_preferences (l_node); } } read_preferences (node); } node = findnode(racine -> children, "opengl"); if (node) { p_node = findnode (node -> children, "material"); if (p_node) { read_preferences (p_node); } p_node = findnode (node -> children, "lightning"); if (p_node) { read_preferences (p_node); l_node = findnode (p_node -> children, "light"); while (l_node) { read_light (l_node); l_node = l_node -> next; l_node = findnode (l_node, "light"); } } p_node = findnode (node -> children, "fog"); if (p_node) { read_preferences(p_node); } read_preferences (node); } node = findnode(racine -> children, "model"); if (node) { read_preferences (node); p_node = findnode(node -> children, "atoms_and_bonds"); if (p_node) { for (i=0; i children, xml_style_leg[i]); if (l_node) { read_style_from_xml_file (l_node -> children, i); } } } p_node = findnode(node -> children, "labels"); if (p_node) { for (i=0; i<2; i++) { l_node = findnode (p_node -> children, (i) ? "clones" : "atoms"); if (l_node) { label_id = i; read_preferences (l_node); c_node = findnode(l_node -> children, "colors"); if (c_node) { read_preferences (c_node); } } } } c_node = findnode(node -> children, "colors"); if (c_node) { for (i=0; i<2; i++) { l_node = findnode (c_node -> children, (i) ? "clones" : "atoms"); if (l_node) { label_id = i; read_preferences (l_node); } } } p_node = findnode(node -> children, "box"); if (p_node) { read_preferences (p_node); } } node = findnode(racine -> children, "view"); if (node) { read_preferences (node); p_node = findnode(node -> children, "background"); if (p_node) { read_preferences (p_node); } p_node = findnode(node -> children, "representation"); if (p_node) { read_preferences (p_node); } p_node = findnode(node -> children, "axis"); if (p_node) { read_preferences (p_node); l_node = findnode(p_node -> children, "labels"); if (l_node) { label_id = 2; default_axis.labels = TRUE; read_preferences (l_node); } c_node = findnode(p_node -> children, "colors"); if (c_node) { read_preferences (c_node); } } p_node = findnode(node -> children, "measures"); if (p_node) { l_node = findnode(p_node -> children, "standard"); if (l_node) { c_node = findnode(l_node -> children, "labels"); if (c_node) { label_id = 3; read_preferences (c_node); } read_preferences (l_node); } l_node = findnode(p_node -> children, "selection"); if (l_node) { c_node = findnode(l_node -> children, "labels"); if (c_node) { label_id = 4; read_preferences (c_node); } read_preferences (l_node); } } p_node = findnode(node -> children, "atom-selections"); if (p_node) { read_preferences (p_node); } } } } xmlFreeDoc(doc); } xmlFreeTextReader(reader); } xmlCleanupParser(); } /*! \fn void set_atomes_defaults () \brief set atomes default parameters */ void set_atomes_defaults () { int i, j; // Analysis preferences default_totcut = 2.0; if (default_bond_cutoff) g_free (default_bond_cutoff); default_bond_cutoff = NULL; default_num_delta[GDR] = 1000; default_num_delta[SQD] = 1000; default_num_delta[SKD] = 1000; default_num_delta[GDK] = 1000; default_num_delta[BND] = 100; default_num_delta[ANG] = 90; default_num_delta[CHA-1] = 20; default_num_delta[MSD-2] = 0; default_num_delta[SKT-2] = 1000; // Dynamical calculations default_delta_t[0] = 0.0; default_delta_t[1] = -1.0; // Ring statistics default_rsparam[0] = -1; default_rsparam[1] = 0; default_rsparam[2] = 10; default_rsparam[3] = 500; default_rsparam[4] = 0; default_rsparam[5] = 0; default_rsparam[6] = 0; // Chain statistics default_csparam[0] = 0; default_csparam[1] = 10; default_csparam[2] = 500; default_csparam[3] = 0; default_csparam[4] = 0; default_csparam[5] = 0; // F(k,t) and S(q,w) default_skt_sets = FALSE; default_skt_n_sets = 5; default_sqw_n_sets = 5; default_sqw_freq = 1000; for (i=0; i<3; i++) default_opengl[i] = 0; default_opengl[3] = QUALITY; default_opengl[4] = TRUE; // Material default_material.predefine = 4; // Plastic default_material.albedo = vec3(0.5, 0.5, 0.5); default_material.param[0] = DEFAULT_LIGHTNING; default_material.param[1] = DEFAULT_METALLIC; default_material.param[2] = DEFAULT_ROUGHNESS; default_material.param[3] = DEFAULT_AMBIANT_OCCLUSION; default_material.param[4] = DEFAULT_GAMMA_CORRECTION; default_material.param[5] = DEFAULT_OPACITY; // Lights default_lightning.lights = 3; if (default_lightning.spot) { for (i=0; i 2) ? 1 : 0; if (default_label[i].n_colors) { default_label[i].color = g_malloc0(sizeof*default_label[i].color); default_label[i].color[0].red = 1.0; default_label[i].color[0].green = 1.0; default_label[i].color[0].blue = 1.0; default_label[i].color[0].alpha = 1.0; } default_label[i].font = (i > 2) ? g_strdup_printf ("FreeMono Bold 18") : g_strdup_printf ("Sans Bold 12"); default_label[i].list = NULL; } for (i=0; i<2; i++) { default_acl_format[i] = SYMBOL_AND_NUM; default_mtilt[i] = TRUE; default_mpattern[i] = 0; default_mfactor[i] = 1; default_mwidth[i] = 1.0; } default_box.box = WIREFRAME; default_box.color.red = 0.0; default_box.color.green = 1.0; default_box.color.blue = 0.0; default_box.color.alpha = 1.0; default_box.line = DEFAULT_SIZE; default_box.rad = 0.05; // Representation // Background color default_background.color.red = 0.0; default_background.color.green = 0.0; default_background.color.blue = 0.0; default_background.color.alpha = 1.0; default_background.gradient = 2; default_background.direction = 8; default_background.position = 0.5; default_background.gradient_color[0].red = 0.0; default_background.gradient_color[0].green = 0.01; default_background.gradient_color[0].blue = 0.21; default_background.gradient_color[0].alpha = 1.0; default_background.gradient_color[1].red = 0.0; default_background.gradient_color[1].green = 0.0; default_background.gradient_color[1].blue = 0.0; default_background.gradient_color[1].alpha = 1.0; default_rep.rep = PERSPECTIVE; default_rep.proj = -1; default_rep.zoom = ZOOM; default_rep.c_angle[0] = - CAMERA_ANGLE_X; default_rep.c_angle[1] = - CAMERA_ANGLE_Y; for (i=0; i<2; i++) default_rep.c_shift[i] = 0.0; default_rep.gnear = 6.0; // Axis default_axis.axis = NONE; default_axis.line = DEFAULT_SIZE; default_axis.rad = 0.1; default_axis.t_pos = BOTTOM_RIGHT; default_axis.length = 2.0*DEFAULT_SIZE; default_axis.c_pos[0] = default_axis.c_pos[1] = 50.0; default_axis.c_pos[2] = 0.0; default_axis.title[0] = "x"; default_axis.title[1] = "y"; default_axis.title[2] = "z"; if (default_axis.color) g_free (default_axis.color); default_axis.color = NULL; // Selection color default_sel_color[0].red = 0.0; default_sel_color[0].green = 1.0; default_sel_color[0].blue = 1.0; default_sel_color[0].alpha = DEFAULT_OPACITY*0.75; // Selection color - edition mode default_sel_color[1].red = 1.0; default_sel_color[1].green = 0.00; default_sel_color[1].blue = 0.84; default_sel_color[1].alpha = DEFAULT_OPACITY*0.75; } /*! \fn void set_atomes_preferences () \brief set software default parameters */ void set_atomes_preferences () { default_num_delta = allocint (NUM_DELTA); default_delta_t = allocdouble (2); default_rsparam = allocint (7); default_csparam = allocint (7); default_opengl = allocint (5); default_at_rs = allocdouble (10); default_o_at_rs = allocbool (10); default_bd_rw = allocdouble (6); default_o_bd_rw = allocbool (6); preferences = TRUE; set_atomes_defaults(); preferences = FALSE; if (ATOMES_CONFIG) read_preferences_from_xml_file (); } /*! \fn GtkWidget * pref_list (gchar * mess[2], int nelem, gchar * mlist[nelem][2], gchar * end) \brief print information message with item list of elements \param mess main information message \param nelem number of elements in the list \param mlsit item list \param end end message, if any */ GtkWidget * pref_list (gchar * mess[2], int nelem, gchar * mlist[nelem][2], gchar * end) { gchar * str; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * vvbox = create_vbox (BSEP); GtkWidget * hbox; add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_(mess[0]), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_(mess[1]), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); int i; for (i=0; i%s", _(mlist[i][0])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 120, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(":", -1, -1, 1.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(mlist[i][1]), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (end) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(end), -1, -1, 0.5, 0.5), FALSE, FALSE, 20); } return vbox; } /*! \fn G_MODULE_EXPORT void set_measures (GtkComboBox * box, gpointer data) \brief change measure type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measures (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT (data); j = combo_get_active ((GtkWidget *)box); if (i) { hide_the_widgets (sel_box[! j]); show_the_widgets (sel_box[j]); } else { hide_the_widgets (meas_box[! j]); show_the_widgets (meas_box[j]); } } /*! \fn G_MODULE_EXPORT void set_selection_color (GtkColorChooser * colob, gpointer data) \brief change selection color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_selection_color (GtkColorChooser * colob, gpointer data) { int i = GPOINTER_TO_INT (data); tmp_sel_color[i] = get_button_color (colob); } /*! \fn GtkWidget * view_preferences () \brief view preferences */ GtkWidget * view_preferences () { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP); GtkWidget * vbox = create_vbox (BSEP); gchar * info[2] = {i18n("The View tab regroups representation options"), i18n("which effect apply to the general aspect of the model:")}; gchar * m_list[3][2] = {{i18n("Representation"), i18n("scene set-up and orientation")}, {i18n("Axis"), i18n("axis options")}, {i18n("Tools"), i18n("measures and selections option")}}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 30, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 3, m_list, NULL), FALSE, FALSE, 30); pref_gradient_win = g_malloc0(sizeof*pref_gradient_win); gradient_advanced (NULL, NULL); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_gradient_win -> win, FALSE, FALSE, 5); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); // Tab for representation pref_rep_win = g_malloc0(sizeof*pref_rep_win); representation_advanced (NULL, NULL); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), pref_rep_win -> win, gtk_label_new (_("Representation"))); // Axis pref_axis_win = g_malloc0(sizeof*pref_axis_win); axis_advanced (NULL, NULL); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), pref_axis_win -> win, gtk_label_new (_("Axis"))); // Measures vbox = create_vbox (BSEP); GtkWidget * hbox; hbox = adv_box (vbox, _("Select measure type"), 5, 120, 0.0); meas_combo = create_combo (); combo_text_append (meas_combo, _("Standard")); combo_text_append (meas_combo, _("Edition mode")); combo_set_active (meas_combo, 0); g_signal_connect (G_OBJECT(meas_combo), "changed", G_CALLBACK(set_measures), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, meas_combo , FALSE, FALSE, 40); int i; for (i=0; i<2; i++) { meas_box[i] = create_vbox (BSEP); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, labels_tab(NULL, i+3), FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, meas_box[i], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, meas_box[i], FALSE, FALSE, 0); } hbox = adv_box (vbox, _("Select selection type"), 15, 120, 0.0); sel_combo = create_combo (); combo_text_append (sel_combo, _("Standard")); combo_text_append (sel_combo, _("Edition mode")); combo_set_active (sel_combo, 0); g_signal_connect (G_OBJECT(sel_combo), "changed", G_CALLBACK(set_measures), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_combo , FALSE, FALSE, 40); GtkWidget * hhbox, * vvbox; for (i=0; i<2; i++) { sel_box[i] = create_vbox (BSEP); hbox = create_hbox (BSEP); vvbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 60); hhbox = abox (vvbox, _("Color"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, color_button(tmp_sel_color[i], TRUE, 100, -1, G_CALLBACK(set_selection_color), GINT_TO_POINTER(i)), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sel_box[i], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, sel_box[i], FALSE, FALSE, 0); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("Tools"))); show_the_widgets (notebook); return notebook; } int the_object; element_radius ** edit_list; element_color * color_list; GtkWidget * pref_tree; gboolean user_defined; GtkWidget * edit_scrol; GtkWidget * edit_colob; ColRGBA * tmp_color; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_default_stuff (GtkCheckButton * but, gpointer data) \brief toggle set / unset default callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_default_stuff (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_default_stuff (GtkToggleButton * but, gpointer data) \brief toggle set / unset default callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_default_stuff (GtkToggleButton * but, gpointer data) #endif { int status = button_get_status ((GtkWidget *)but); int object = GPOINTER_TO_INT(data); switch (object) { case 0: tmp_clones = status; break; case 1: tmp_cell = status; break; default: if (object < 0) { // Bonds tmp_o_bd_rw[-object-2] = status; widget_set_sensitive(bond_entry_over[-object-2], status); } else if (object < 100) { tmp_o_at_rs[object-2] = status; widget_set_sensitive(atom_entry_over[object-2], status); } else { widget_set_sensitive (edit_scrol, ! status); widget_set_sensitive (edit_colob, status); ColRGBA col; col.red = col.green = col.blue = col.alpha = 1.0; if (status) { tmp_color = g_malloc0(sizeof*tmp_color); tmp_color -> red = tmp_color -> green = tmp_color -> blue = tmp_color -> alpha = 1.0; } else { if (tmp_color) g_free (tmp_color); tmp_color = NULL; } GdkRGBA rgb_col = colrgba_togtkrgba(col); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(edit_colob), & rgb_col); } break; } } /*! \fn G_MODULE_EXPORT void set_default_stuff (GtkEntry * res, gpointer data) \brief update default number of delta preferences \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void set_default_stuff (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double value = string_to_double ((gpointer)m); if (i < 0) { // Bonds tmp_bd_rw[-i-2] = value; } else { tmp_at_rs[i-2] = value; } update_entry_double (res, value); } /*! \fn element_radius * duplicate_element_radius (element_radius * old_list) \brief duplicate an element radius data structure \param old_list the data structure to duplicate */ element_radius * duplicate_element_radius (element_radius * old_list) { if (! old_list) return NULL; element_radius * new_list = g_malloc0(sizeof*new_list); element_radius * tmp_rad, * tmp_rbd; tmp_rad = old_list; tmp_rbd = new_list; while (tmp_rad) { tmp_rbd -> Z = tmp_rad -> Z; tmp_rbd -> rad = tmp_rad -> rad; if (tmp_rad -> next) { tmp_rbd -> next = g_malloc0(sizeof*tmp_rbd -> next); tmp_rbd -> next -> prev = tmp_rbd; tmp_rbd = tmp_rbd -> next; } tmp_rad = tmp_rad -> next; } return new_list; } /*! \fn float get_radius (int object, int col, int z, element_radius * rad_list) \brief retrieve the radius/width of a species depending on style \param object the object to look at \param col modifier for tabulated radii \param z atomic number \param rad_list pre allocated data, if any */ float get_radius (int object, int col, int z, element_radius * rad_list) { element_radius * tmp_rad = rad_list; int ft; while (tmp_rad) { if (tmp_rad -> Z == z) { user_defined = TRUE; return tmp_rad -> rad; } tmp_rad = tmp_rad -> next; } if (object < 0) { object = - object - 2; // Bonds if (object == 0 || object == 3) { if (z < 119) { ft = 0; return set_radius_ (& z, & ft) / 4.0; } } else { return DEFAULT_SIZE; } } else { object -= 2; if (object == 2 || object == 7 || col) { ft = col; if (z < 119) { return set_radius_ (& z, & ft); } } else if (object == 1 || object == 4 || object == 6 || object == 9) { // Dots return DEFAULT_SIZE; } else if (object == 0 || object == 3 || object == 5 || object == 8) { ft = 0; return set_radius_ (& z, & ft) / 2.0; } } return 0.0; } /*! \fn element_color * duplicate_element_color (element_color * old_list) \brief duplicate an element color data structure \param old_list the data structure to duplicate */ element_color * duplicate_element_color (element_color * old_list) { if (! old_list) return NULL; element_color * new_list = g_malloc0(sizeof*new_list); element_color * tmp_rad, * tmp_rbd; tmp_rad = old_list; tmp_rbd = new_list; while (tmp_rad) { tmp_rbd -> Z = tmp_rad -> Z; tmp_rbd -> col = tmp_rad -> col; if (tmp_rad -> next) { tmp_rbd -> next = g_malloc0(sizeof*tmp_rbd -> next); tmp_rbd -> next -> prev = tmp_rbd; tmp_rbd = tmp_rbd -> next; } tmp_rad = tmp_rad -> next; } return new_list; } /*! \fn ColRGBA get_spec_color (int z, , element_color * clist) \brief retrieve the color of a chemical species \param z atomic number \param clist the target color list, if any */ ColRGBA get_spec_color (int z, element_color * clist) { element_color * tmp_col = clist; while (tmp_col) { if (tmp_col -> Z == z) { user_defined = TRUE; return tmp_col -> col; } tmp_col = tmp_col -> next; } return set_default_color (z); } /*! \fn G_MODULE_EXPORT void edit_pref (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) \brief edit cell in the preferences tree model \param cell the GtkCellRendererText sending the signal \param path_string the path in the tree model \param new_text the string describing the new value \param user_data the associated data pointer */ G_MODULE_EXPORT void edit_pref (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) { int col = GPOINTER_TO_INT(user_data); GtkTreeModel * pref_model = gtk_tree_view_get_model(GTK_TREE_VIEW(pref_tree)); GtkTreeIter row; gtk_tree_model_get_iter_from_string (pref_model, & row, path_string); int z; float val = string_to_double ((gpointer)new_text); gtk_tree_model_get (pref_model, & row, 3, & z, -1); gtk_list_store_set (GTK_LIST_STORE(pref_model), & row, col+4, val, -1); gboolean add_elem = FALSE; gboolean remove_elem = FALSE; element_radius * tmp_list; int col_val[4] = {1, 3, 5, 10}; float v = get_radius (the_object, col, z, NULL); if (edit_list[col]) { tmp_list = edit_list[col]; add_elem = TRUE; while (tmp_list) { if (tmp_list -> Z == z) { tmp_list -> rad = val; if (val == v) { remove_elem = TRUE; if (tmp_list -> next) { if (tmp_list -> prev) { tmp_list -> prev -> next = tmp_list -> next; tmp_list -> next -> prev = tmp_list -> prev; } else { edit_list[col] = tmp_list -> next; edit_list[col] -> prev = NULL; } } else if (tmp_list -> prev) { edit_list[col] -> rad = tmp_list -> rad; edit_list[col] -> Z = tmp_list -> Z; edit_list[col] -> prev = NULL; } else { g_free (edit_list[col]); edit_list[col] = NULL; } add_elem = FALSE; } else { add_elem = FALSE; } } tmp_list = tmp_list -> next; } } else if (val != v) { add_elem = TRUE; } if (add_elem) { if (edit_list[col]) { tmp_list = edit_list[col]; while (tmp_list) { if (! tmp_list -> next) break; tmp_list = tmp_list -> next; } tmp_list -> next = g_malloc0(sizeof*tmp_list -> next); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } else { edit_list[col] = g_malloc0(sizeof*edit_list[col]); tmp_list = edit_list[col]; } tmp_list -> Z = z; tmp_list -> rad = val; gtk_tree_model_get (pref_model, & row, 0, & z, -1); if (! z) { z = col_val[col]; } else { int a, b, c, d; a = z / 10; b = (z - a * 10) / 5; c = (z - a * 10 - b * 5) / 3; d = z - a * 10 - b * 5 - c * 3; z = 0; if (a || col == 3) z += 10; if (b || col == 2) z += 5; if (c || col == 1) z += 3; if (d || col == 0) z += 1; } gtk_list_store_set (GTK_LIST_STORE(pref_model), & row, 0, z, -1); } else if (remove_elem) { gtk_tree_model_get (pref_model, & row, 0, & z, -1); z -= col_val[col]; gtk_list_store_set (GTK_LIST_STORE(pref_model), & row, 0, z, -1); } } /*! \fn G_MODULE_EXPORT void edit_chem_preferences (GtkDialog * edit_chem, gint response_id, gpointer data) \brief edit chem preferences - running the dialog \param edit_prefs the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void edit_chem_preferences (GtkDialog * edit_chem, gint response_id, gpointer data) { int i, j, k, l; int object = GPOINTER_TO_INT (data); gboolean do_style = (object < 100) ? TRUE : FALSE; gboolean do_label = (object == 1000 || object == 1001) ? TRUE : FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (do_style) { if (object < 0) { object = - object - 2; if (tmp_bond_rad[object]) g_free (tmp_bond_rad[object]); tmp_bond_rad[object] = duplicate_element_radius (edit_list[0]); } else { j = (object == 4 || object == 9) ? 4 : 1; k = (object < 5) ? 7 : 5; object = object - 2; for (i=0; i color) tmp_label[object] -> color = g_malloc0(sizeof*tmp_label[object] -> color); tmp_label[object] -> color[0] = * tmp_color; tmp_label[object] -> n_colors = 1; } } else { object -= 100; if (tmp_atom_color[object]) g_free (tmp_atom_color[object]); tmp_atom_color[object] = duplicate_element_color (color_list); } break; default: if (do_style) { j = (object < 0) ? 1 : (object == 4 || object == 9) ? 4 : 1; for (i=0; i Z == i) { tmp_list -> col = colo; if (are_identical_colors(colo, orig)) { if (tmp_list -> next) { if (tmp_list -> prev) { tmp_list -> prev -> next = tmp_list -> next; tmp_list -> next -> prev = tmp_list -> prev; } else { color_list = tmp_list -> next; color_list -> prev = NULL; } } else if (tmp_list -> prev) { color_list -> col = tmp_list -> col; color_list -> Z = tmp_list -> Z; color_list -> prev = NULL; } else { g_free (color_list); color_list = NULL; } add_elem = FALSE; } else { add_elem = FALSE; } } tmp_list = tmp_list -> next; } } else if (! are_identical_colors(colo, orig)) { add_elem = TRUE; } if (add_elem) { if (color_list) { tmp_list = color_list; while (tmp_list) { if (! tmp_list -> next) break; tmp_list = tmp_list -> next; } tmp_list -> next = g_malloc0(sizeof*tmp_list -> next); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } else { color_list = g_malloc0(sizeof*color_list); tmp_list = color_list; } tmp_list -> Z = i; tmp_list -> col = colo; } } destroy_this_dialog (win); } /*! \fn void color_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) \brief species color selection mouse button event \param widget the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event buttton \param data the associated data pointer */ void color_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) { if (event_button == 1) { GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(widget), event_x, event_y, & e_x, & e_y); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), e_x, e_y, & path, & column, & i, & j)) #else if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), event_x, event_y, & path, & column, & i, & j)) #endif { if (g_strcmp0(_("Color"), gtk_tree_view_column_get_title (column)) == 0) { GtkTreeIter row; if (gtk_tree_model_get_iter (model, & row, path)) { i = GPOINTER_TO_INT(data); gchar * obj[2]={_("atom"), _("clone")}; int z; gtk_tree_model_get (model, & row, 3, & z, -1); gchar * str = g_strdup_printf (_("%s %s color"), periodic_table_info[z].lab, obj[i]); GdkRGBA col = colrgba_togtkrgba (get_spec_color (z, color_list)); GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(MainWindow)); gtk_window_set_modal (GTK_WINDOW(win), TRUE); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(win), & col); g_free (str); run_this_gtk_dialog (win, G_CALLBACK(run_ac_color), GINT_TO_POINTER(z)); } } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void pref_color_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void pref_color_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { color_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean pref_color_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief on button event in species color edition \param widget the GtkWidget sending the signal \param event the GtkEventButton triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean pref_color_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS) { GdkEventButton * bevent = (GdkEventButton*)event; color_button_event (widget, bevent -> x, bevent -> y, bevent -> button, data); } return FALSE; } #endif /*! \fn G_MODULE_EXPORT void set_stuff_color (GtkColorChooser * colob, gpointer data) \brief change stuff color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_stuff_color (GtkColorChooser * colob, gpointer data) { * tmp_color = get_button_color (colob); } /*! \fn G_MODULE_EXPORT void edit_species_parameters (GtkButton * but, gpointer data) \brief edit atoms and bonds species related parameters \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_species_parameters (GtkButton * but, gpointer data) { gchar * ats[3]={_("atom(s)"), _("dot(s)"), _("sphere(s)")}; gchar * dim[3]={_("radius"), _("size"), _("width")}; gchar * bts[3]={_("bond(s)"), _("wireframe(s)"), _("cylinder(s)")}; the_object = GPOINTER_TO_INT(data); int i, j, k, l, n, m; int aid, bid; int num_col; gchar * str; gboolean do_style = (the_object < 100) ? TRUE : FALSE; gboolean do_label = FALSE; if (do_style) { if (the_object < 0) { // Going for bonds aid = - the_object - 2; aid = (aid) > 2 ? aid - 3 : aid; bid = (the_object == -3 || the_object == -6) ? 2 : 0; str = (the_object < -4) ? g_strdup_printf (_("Edit cloned %s %s"), bts[aid], dim[bid]) : g_strdup_printf (_("Edit %s %s"), bts[aid], dim[bid]); num_col = 5; } else { // Going for atoms aid = the_object - 2; aid = (aid == 0 || aid == 2 || aid == 5 || aid == 7) ? 0 : (aid == 1 || aid == 4 || aid == 6 || aid == 9) ? 1 : 2; bid = (the_object == 1 || the_object == 6) ? 1 : 0; str = (the_object - 2 > 4) ? g_strdup_printf (_("Edit cloned %s %s"), ats[aid], dim[bid]) : g_strdup_printf (_("Edit %s %s"), ats[aid], dim[bid]); num_col = (the_object == 4 || the_object == 9) ? 8 : 5; } } else { // Going for colors if (the_object < 1000) { aid = the_object - 100; str = g_strdup_printf (_("Select %s color"), (aid) ? _("clone") : _("atom")); } else { aid = the_object - 1000; str = g_strdup_printf (_("Select %s label color"), (aid) ? _("clone") : _("atom")); do_label = TRUE; } num_col = 5; } edit_list = NULL; color_list = NULL; tmp_color = NULL; GtkWidget * win = dialog_cancel_apply (str, MainWindow, TRUE); g_free (str); gtk_window_set_default_size (GTK_WINDOW(win), (num_col == 8) ? 600 : 300, 600); GtkWidget * vbox = dialog_get_content_area (win); GType s_type[8] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE}; GType c_type[5] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING}; GtkTreeViewColumn * pref_col[num_col]; GtkCellRenderer * pref_cel[num_col]; GtkTreeSelection * pref_select; GtkListStore * pref_model; GtkTreeIter elem; if (do_style) { pref_model = gtk_list_store_newv (num_col, s_type); i = (the_object < 0) ? - the_object - 2 : the_object - 2; j = (num_col == 8) ? 4 : 1; k = ((the_object < 0 && i > 2) || (the_object > 0 && i > 4)) ? 1 : 0; edit_list = g_malloc0(j*sizeof*edit_list); for (l=0; l 3) { if (do_style) { g_object_set (pref_cel[i], "editable", TRUE, NULL); gtk_cell_renderer_set_alignment (pref_cel[i], 0.5, 0.5); g_signal_connect (G_OBJECT(pref_cel[i]), "edited", G_CALLBACK(edit_pref), GINT_TO_POINTER(i-4)); pref_col[i] = gtk_tree_view_column_new_with_attributes((num_col) == 8 ? f_name[i-4] : g_name[bid], pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_cell_data_func (pref_col[i], pref_cel[i], radius_set_color_and_markup, GINT_TO_POINTER(i-4), NULL); } else { gtk_cell_renderer_set_alignment (pref_cel[i], 0.5, 0.5); pref_col[i] = gtk_tree_view_column_new_with_attributes(_("Color"), pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_cell_data_func (pref_col[i], pref_cel[i], color_set_color, NULL, NULL); } } else if (i) { pref_col[i] = gtk_tree_view_column_new_with_attributes(name[i-1], pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_alignment (pref_col[i], 0.5); gtk_tree_view_column_set_resizable (pref_col[i], TRUE); gtk_tree_view_column_set_min_width (pref_col[i], 50); } else { pref_col[i] = gtk_tree_view_column_new_with_attributes("", pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_visible (pref_col[i], FALSE); } gtk_tree_view_append_column(GTK_TREE_VIEW(pref_tree), pref_col[i]); } g_object_unref (pref_model); pref_select = gtk_tree_view_get_selection (GTK_TREE_VIEW(pref_tree)); gtk_tree_selection_set_mode (pref_select, GTK_SELECTION_SINGLE); gtk_tree_view_expand_all (GTK_TREE_VIEW(pref_tree)); #ifdef GTK3 g_signal_connect (G_OBJECT(pref_tree), "button_press_event", G_CALLBACK(pref_color_button_event), GINT_TO_POINTER(aid)); #else add_widget_gesture_and_key_action (pref_tree, "pref-context-click", G_CALLBACK(pref_color_button_pressed), GINT_TO_POINTER(aid), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif edit_scrol = create_scroll (vbox, -1, 570, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, edit_scrol, pref_tree); if (! do_label) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("User defined values appear in colored bold font."), -1, 40, 0.5, 0.5), FALSE, FALSE, 0); if (num_col == 8) { gchar * legend={_("\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976).")}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(legend, -1, 25, 0.0, 0.5), FALSE, FALSE, 0); } } else if (do_label) { gtk_widget_set_sensitive (edit_scrol, ! tmp_label[aid] -> n_colors); GtkWidget * vvbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (BSEP); gchar * info[3] = {_("By default label and species colors are similar,"), _("you can modify that using this dialog window."), _("You can also use a single color for all labels:")}; for (i=0; i<2; i++) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(info[i], 300, -1, 0.5, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 10); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(info[i], 300, -1, 0.5, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Use single color"), -1, -1, tmp_label[aid] -> n_colors, G_CALLBACK(toggled_default_stuff), data), FALSE, FALSE, 30); ColRGBA active_col; if (tmp_label[aid] -> n_colors) { tmp_color = g_malloc0(sizeof*tmp_color); * tmp_color = tmp_label[aid] -> color[0]; active_col = tmp_label[aid] -> color[0]; } active_col.red = active_col.green = active_col.blue = active_col.alpha = 1.0; edit_colob = color_button (active_col, TRUE, 100, -1, G_CALLBACK(set_stuff_color), tmp_color); widget_set_sensitive (edit_colob, tmp_label[aid] -> n_colors); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, edit_colob, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); } run_this_gtk_dialog (win, G_CALLBACK(edit_chem_preferences), data); } /*! \fn GtkWidget * over_param (int object, int style) \brief create override check button and entry \param object 0 = atoms, 1 = bonds \param style style id number */ GtkWidget * over_param (int object, int style) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (BSEP); int clone = ((object && style > 2) || (! object && style > 4)) ? 20 : 0; int mod = (object) ? -1 : 1; gboolean over = (! object) ? TRUE : (object && (style != 2 && style != 5)) ? TRUE : FALSE; gchar * leg; if (over) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 60+clone, -1, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Edit species related parameters"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(edit_species_parameters), GINT_TO_POINTER(mod*(style+2))), FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 60+clone, -1, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Override species based parameters"), -1, -1, (object) ? tmp_o_bd_rw[style] : tmp_o_at_rs[style], G_CALLBACK(toggled_default_stuff), GINT_TO_POINTER(mod*(style+2))), FALSE, FALSE, 10); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 60+clone, -1, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Set default value"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } if (object) { bond_entry_over[style] = create_entry(G_CALLBACK(set_default_stuff), 100, 10, FALSE, GINT_TO_POINTER(mod*(style+2))); update_entry_double (GTK_ENTRY(bond_entry_over[style]), tmp_bd_rw[style]); if (over) widget_set_sensitive (bond_entry_over[style], tmp_o_bd_rw[style]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, bond_entry_over[style], FALSE, FALSE, 0); leg = g_strdup_printf ("%s", (style == 1 || style == 4) ? "pts" : "Å"); } else { atom_entry_over[style] = create_entry(G_CALLBACK(set_default_stuff), 100, 10, FALSE, GINT_TO_POINTER(mod*(style+2))); update_entry_double (GTK_ENTRY(atom_entry_over[style]), tmp_at_rs[style]); if (over) widget_set_sensitive (atom_entry_over[style], tmp_o_at_rs[style]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, atom_entry_over[style], FALSE, FALSE, 0); leg = g_strdup_printf ("%s", (style == 1 || style == 6 || style == 4 || style == 9) ? "pts" : "Å"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(leg, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (leg); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); return vbox; } /*! \fn GtkWidget * style_tab (int style) \brief create preferences tab for a style \param style the style for this tab */ GtkWidget * style_tab (int style) { GtkWidget * vbox = create_vbox (BSEP); gchar * object[3]={i18n("Atom(s)"), i18n("Bond(s)"), i18n("\tClone(s)")}; gchar * dim[3]={i18n("Radius"), i18n("Size"), i18n("Width")}; int i; int bsid; int lid; gchar * str; gboolean do_atoms = FALSE; gboolean do_bonds = FALSE; if (style == 0 || style == 1 || style == 2 || style == 3 || style == 5) { do_atoms = TRUE; } if (style == 0 || style == 1 || style == 4) { do_bonds = TRUE; bsid = (style == 4) ? 2 : style; } if (do_atoms) { lid = (style == 3) ? 2 : (style == 1 || style == 5) ? 1 : 0; for (i=0; i<2; i++) { adv_box (vbox, object[i*2], 10-5*i, 120, 0.0); str = g_strdup_printf ("\t%s", _(dim[(lid != 1) ? 0 : 1])); adv_box (vbox, str, 10, 120, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, over_param (0, (style < 5) ? style+5*i : 4 + 5*i), FALSE, FALSE, 0); } } if (do_bonds) { // Bond(s) parameters for (i=0; i<2; i++) { adv_box (vbox, object[i+1], 10-5*i, 120, 0.0); str = g_strdup_printf ("\t%s", _(dim[(bsid != 1) ? 0 : 2])); adv_box (vbox, str, 10, 120, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, over_param (1, bsid+3*i), FALSE, FALSE, 0); } } return vbox; } /*! \fn GtkWidget * model_preferences () \brief model preferences */ GtkWidget * model_preferences () { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP); GtkWidget * vbox = create_vbox (BSEP); //GtkWidget * hbox; //GtkWidget * combo; gchar * info[2] = {i18n("The Model tab regroups atom(s), bond(s) and clone(s) options"), i18n("which effect apply when the corresponding OpenGL style is used:")}; gchar * m_list[4][2] = {{i18n("Balls and Sticks"), i18n("atoms* and bonds radii")}, {i18n("Wireframes"), i18n("dots** size and wireframes width")}, {i18n("Spacefilled"), i18n("tabulated parameters")}, {i18n("Cylinders"), i18n("bonds radii")}}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 30, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 4, m_list, NULL), FALSE, FALSE, 0); gchar * other_info[2] = {i18n("It also provides options to customize atomic label(s),"), i18n("and, the model box, if any:")}; gchar * o_list[2][2] = {{i18n("Labels"), i18n("atom labels")}, {i18n("Box"), i18n("model box details")}}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (other_info, 2, o_list, NULL), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 20, 0.0, 0.0), FALSE, FALSE, 0); GtkWidget * hbox; gchar * obj[2] = {i18n("Atoms"), i18n("Clones")}; int i; for (i=0; i<2; i++) { hbox = adv_box (vbox, _(obj[i]), 5, 150, 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Edit species colors"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(edit_species_parameters), GINT_TO_POINTER(100+i)), FALSE, FALSE, 30); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 5, 0.0, 0.0), FALSE, FALSE, 0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Always show clone(s), if any."), 250, -1, tmp_clones, G_CALLBACK(toggled_default_stuff), GINT_TO_POINTER(0)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Always show box, if any."), 250, -1, tmp_clones, G_CALLBACK(toggled_default_stuff), GINT_TO_POINTER(1)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 5, 0.0, 0.0), FALSE, FALSE, 0); append_comments (vbox, "*", _("the same parameters are also used for the spheres style")); append_comments (vbox, "**", _("the same parameters are also used for the dots style")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); for (i=0; i.", 5, -1, 0.0, 0.25), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(_("Colors"), 150, 30, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button (_("Adjust color(s)"), IMG_NONE, NULL, 220, -1, GTK_RELIEF_NORMAL, G_CALLBACK(edit_species_parameters), GINT_TO_POINTER(1000+i)), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("Labels"))); pref_box_win = g_malloc0(sizeof*pref_box_win); box_advanced (NULL, NULL); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), pref_box_win -> win, gtk_label_new (_("Box"))); show_the_widgets (notebook); return notebook; } /*! \fn G_MODULE_EXPORT void set_default_style (GtkComboBox * box, gpointer data) \brief change default atom(s) and bond(s) style \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_default_style (GtkComboBox * box, gpointer data) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter (box, & iter)) { GtkTreeModel * model = gtk_combo_box_get_model (box); int i; gtk_tree_model_get (model, & iter, 1, & i, -1); tmp_opengl[0] = (! i) ? 0 : i; } } /*! \fn GtkTreeModel * style_combo_tree () \brief create opengl style combo model */ GtkTreeModel * style_combo_tree () { GtkTreeIter iter, iter2; GtkTreeStore * store; int i, j; store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_INT); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("f(atoms) *"), 1, 0, -1); for (i=0; i pointer[i].a = -1; pref_ogl_edit -> pointer[i].b = i; } gchar * info[2] = {i18n("The OpenGL tab regroups rendering options"), i18n("use it to configure the OpenGL 3D scene:")}; gchar * m_list[3][2] = {{i18n("Material"), i18n("aspect for atom(s) and bond(s)")}, {i18n("Lights"), i18n("lightning of the scene")}, {i18n("Fog"), i18n("atmosphere effects")}}; gchar * end = i18n("It also offers to adjust the main visualization style and the color maps"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 3, m_list, end), FALSE, FALSE, 30); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Style"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); GtkTreeModel * model = style_combo_tree (); combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL); combo_set_active (combo, tmp_opengl[0]); combo_set_markup (combo); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(set_default_style), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); append_comments (vbox, "*", _("if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks")); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Color maps"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 15); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("\tatom(s) and bond(s)"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_map(0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("\tpolyhedra"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_map(1), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); show_the_widgets (vbox); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), materials_tab (NULL, pref_ogl_edit, & tmp_material), gtk_label_new (_("Material"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), lights_tab (NULL, pref_ogl_edit, & tmp_lightning), gtk_label_new (_("Lights"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), fog_tab (NULL, pref_ogl_edit, & tmp_fog), gtk_label_new (_("Fog"))); gtk_notebook_set_current_page (GTK_NOTEBOOK(notebook), 0); return notebook; } /*! \fn G_MODULE_EXPORT void set_default_num_delta (GtkEntry * res, gpointer data) \brief update default number of delta preferences \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void set_default_num_delta (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double value = string_to_double ((gpointer)m); if (i == -1) { if (value > 0.0) { tmp_totcut = value; } update_entry_double (res, tmp_totcut); } else if (i < 9) { if (value > 0) tmp_num_delta[i] = (int) value; update_entry_int (res, tmp_num_delta[i]); if (i == 7 || i == 8) { update_entry_int (GTK_ENTRY(dyna_entry[(i == 7) ? 1 : 0][0]), tmp_num_delta[i]); update_omega_max (); } } else // delta_t { if (value > 0.0) tmp_delta_t[0] = value; update_entry_double (res, tmp_delta_t[0]); update_entry_double (GTK_ENTRY(dyna_entry[(i == 9) ? 1 : 0][1]), tmp_delta_t[0]); update_omega_max (); } } /*! \fn G_MODULE_EXPORT void tunit_changed (GtkComboBox * box, gpointer data) \brief change default time units \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void tunit_changed (GtkComboBox * box, gpointer data) { tmp_delta_t[1] = (double) combo_get_active ((GtkWidget *)box); int i = GPOINTER_TO_INT(data); combo_set_active (dyna_combo[(i == 7) ? 1 : 0], (int)tmp_delta_t[1]); update_omega_max (); } GtkWidget * all_cut_box = NULL; GtkWidget * cut_combo[2]; GtkWidget * pcut_box[2]; GtkWidget * tcut_entry = NULL; GtkWidget * tcut_box = NULL; GtkWidget * cut_comments = NULL; bond_cutoff * cut_list; /*! \fn G_MODULE_EXPORT void totcut_changed (GtkComboBox * box, gpointer data) \brief change method to evaluate the total cutoff \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void totcut_changed (GtkComboBox * box, gpointer data) { if (combo_get_active((GtkWidget *)box)) { tmp_totcut = 2.0; show_the_widgets (tcut_box); } else { tmp_totcut = 0.0; hide_the_widgets (tcut_box); } update_entry_double((GtkEntry *)tcut_entry, tmp_totcut); } /*! \fn G_MODULE_EXPORT void edit_pc_value (GtkEntry * res, gpointer data) \brief update partial cutoff value \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void edit_pc_value (GtkEntry * res, gpointer data) { bond_cutoff * cut = (bond_cutoff *)data; const gchar * m = entry_get_text (res); double value = string_to_double ((gpointer)m); if (value > 0.0) { cut -> cutoff = value; } update_entry_double (res, cut -> cutoff); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_use_cutoff (GtkCheckButton * but, gpointer data) \brief toggle select / unselect this cutoff callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_use_cutoff (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_use_cutoff (GtkToggleButton * but, gpointer data) \brief toggle select / unselect this cutoff callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_use_cutoff (GtkToggleButton * but, gpointer data) #endif { bond_cutoff * cut = (bond_cutoff *)data; cut -> use = button_get_status ((GtkWidget *)but); } /*! \fn void add_cut_box () \brief update partial cutoffs widgets */ void add_cut_box () { GtkWidget * hbox; GtkWidget * entry; int i; for (i=0; i<2; i++) pcut_box[i] = NULL; pcut_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, pcut_box[0], FALSE, FALSE, 10); if (cut_list) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, pcut_box[0], hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. α"), 60, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. β"), 60, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Rcut (α, β)"), 100, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Use *"), 20, -1, 0.5, 0.5), FALSE, FALSE, 10); } pcut_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, pcut_box[1], FALSE, FALSE, 10); bond_cutoff * tmp_cut = cut_list; while (tmp_cut) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, pcut_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(periodic_table_info[tmp_cut -> Z[0]].lab, 60, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(periodic_table_info[tmp_cut -> Z[1]].lab, 60, -1, 0.5, 0.5), FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(edit_pc_value), 100, 10, FALSE, (gpointer)tmp_cut); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); update_entry_double ((GtkEntry *)entry, tmp_cut -> cutoff); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, 20, -1, tmp_cut -> use, G_CALLBACK(toggled_use_cutoff), (gpointer)tmp_cut), FALSE, FALSE, 10); tmp_cut = tmp_cut -> next; } cut_comments = destroy_this_widget (cut_comments); cut_comments = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, cut_comments, FALSE, FALSE, 10); if (cut_list) append_comments (cut_comments, "*", _("Unused values will not be saved !")); for (i=0; i<2; i++) combo_set_active (cut_combo[i], -1); show_the_widgets (all_cut_box); } /*! \fn gboolean not_in_cutoffs (int z_a, int z_b) \brief look in bond cutoff between species a and b is already defined */ gboolean not_in_cutoffs (int z_a, int z_b) { bond_cutoff * tmp_cut = cut_list; while (tmp_cut) { if (tmp_cut -> Z[0] == z_a && tmp_cut -> Z[1] == z_b) return FALSE; tmp_cut = tmp_cut -> next; } return TRUE; } /*! \fn G_MODULE_EXPORT void cut_spec_changed (GtkComboBox * box, gpointer data) \brief partial cutoff chemical species \param box the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cut_spec_changed (GtkComboBox * box, gpointer data) { int i, j, k, l; i = combo_get_active (cut_combo[0]); j = combo_get_active (cut_combo[1]); k = min (i+1, j+1); l = max (i+1, j+1); if (k && l) { if (not_in_cutoffs(k, l)) { bond_cutoff * tmp_cut; if (! cut_list) { cut_list = g_malloc0(sizeof*cut_list); tmp_cut = cut_list; } else { tmp_cut = cut_list; while (tmp_cut -> next) { tmp_cut = tmp_cut -> next; } tmp_cut -> next = g_malloc0(sizeof*tmp_cut -> next); tmp_cut -> next -> prev = tmp_cut; tmp_cut = tmp_cut -> next; } tmp_cut -> Z[0] = min(k, l); tmp_cut -> Z[1] = max(k, l); tmp_cut -> use = FALSE; tmp_cut -> cutoff = 1.0; add_cut_box (); } } } /*! \fn bond_cutoff * duplicate_cutoffs (bond_cutoff * old_cutoff) \brief duplicate bond cutoff data structure \param old_cutoff the cutoff data structure to duplicate */ bond_cutoff * duplicate_cutoffs (bond_cutoff * old_cutoff) { bond_cutoff * new_cutoff = NULL; bond_cutoff * cut_a, * cut_b; cut_a = old_cutoff; while (cut_a) { if (cut_a -> use) { if (! new_cutoff) { new_cutoff = g_malloc0(sizeof*new_cutoff); cut_b = new_cutoff; } else { cut_b -> next = g_malloc0(sizeof*cut_b -> next); cut_b -> next -> prev = cut_b; cut_b = cut_b -> next; } cut_b -> Z[0] = cut_a -> Z[0]; cut_b -> Z[1] = cut_a -> Z[1]; cut_b -> use = cut_a -> use; cut_b -> cutoff = cut_a -> cutoff; } cut_a = cut_a -> next; } return new_cutoff; } /*! \fn G_MODULE_EXPORT void edit_cutoffs (GtkDialog * edit_cuts, gint response_id, gpointer data) \brief edit partial cutoffs - running the dialog \param edit_cuts the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void edit_cutoffs (GtkDialog * edit_cuts, gint response_id, gpointer data) { switch (response_id) { case GTK_RESPONSE_APPLY: tmp_bond_cutoff = duplicate_cutoffs (cut_list); break; } if (cut_list) { g_free (cut_list); cut_list = NULL; } int i; for (i=0; i<2; i++) { cut_combo[i] = destroy_this_widget (cut_combo[i]); pcut_box[i] = destroy_this_widget (pcut_box[i]); } cut_comments = destroy_this_widget (cut_comments); all_cut_box = destroy_this_widget (all_cut_box); destroy_this_widget ((GtkWidget *)edit_cuts); } /*! \fn G_MODULE_EXPORT void set_cutoffs_default (GtkButton * but, gpointer data) \brief set default cutoff radii \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cutoffs_default (GtkButton * but, gpointer data) { GtkWidget * win = dialog_cancel_apply (_("Select partial cutoffs(s)"), MainWindow, TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); all_cut_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, all_cut_box, FALSE, FALSE, 50); cut_list = duplicate_cutoffs (tmp_bond_cutoff); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. α"), 60, -1, 0.0, 0.5), FALSE, FALSE, 0); int i, j; for (i=0; i<2; i++) { cut_combo[i] = NULL; cut_combo[i] = create_combo (); for (j=1; j<119; j++) { combo_text_append (cut_combo[i], periodic_table_info[j].lab); } g_signal_connect(G_OBJECT(cut_combo[i]), "changed", G_CALLBACK(cut_spec_changed), NULL); show_the_widgets (cut_combo[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cut_combo[0], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 20, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. β"), 60, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cut_combo[1], FALSE, FALSE, 5); add_cut_box (); run_this_gtk_dialog (win, G_CALLBACK(edit_cutoffs), NULL); } /*! \fn void dyna_parameters (GtkWidget * vbox, int cid) \brief create time related configuration widgets \param vbox the target box to insert the new widgets \param cid the calculation ID (7 = MSD, 8 = S(q,w) */ void dyna_parameters (GtkWidget * vbox, int cid) { gchar * default_leg[2] = {i18n("Step(s) between configurations"), i18n("Step(s) between conf.")}; int wid = (cid == 7) ? 0 : 1; GtkWidget * hbox; hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(default_leg[(cid == 7) ? 0 : 1]), (cid == 7) ? 285 : 150, -1, 0.0, 0.5), FALSE, FALSE, (cid == 7) ? 30 : 5); dyna_entry[wid][0] = create_entry (G_CALLBACK(set_default_num_delta), (cid == 7) ? 110 : 100, (cid == 7) ? 10 : 15, FALSE, GINT_TO_POINTER(cid)); update_entry_int ((GtkEntry *)dyna_entry[wid][0], tmp_num_delta[cid]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, dyna_entry[wid][0], FALSE, FALSE, (cid == 7) ? 0 : 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Time step δt"), (cid == 7) ? 285 : 150, -1, 0.0, 0.5), FALSE, FALSE, (cid == 7) ? 30 : 5); dyna_entry[wid][1] = create_entry (G_CALLBACK(set_default_num_delta), (cid == 7) ? 110 : 100, (cid == 7) ? 10 : 15, FALSE, GINT_TO_POINTER(cid+2)); update_entry_double ((GtkEntry *)dyna_entry[wid][1], tmp_delta_t[0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, dyna_entry[wid][1], FALSE, FALSE, (cid == 7) ? 0 : 10); dyna_combo[wid] = create_combo (); int i; for (i=0; i<5 ; i++) combo_text_append (dyna_combo[wid], untime[i]); combo_set_active (dyna_combo[wid], (int)tmp_delta_t[1]); g_signal_connect(G_OBJECT(dyna_combo[wid]), "changed", G_CALLBACK(tunit_changed), GINT_TO_POINTER(cid)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, dyna_combo[wid], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } /*! \fn GtkWidget * calc_preferences () \brief analysis preferences */ GtkWidget * calc_preferences () { GtkWidget * notebook = gtk_notebook_new (); GtkWidget * vbox; GtkWidget * hbox; gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP); gchar * default_delta_num_leg[NUM_DELTA] = {i18n("g(r): number of δr"), i18n("s(q): number of δq"), i18n("s(k): number of δk"), i18n("g(r) FFT: number of δr"), i18n("Dij: number of δr [Dijmin-Dijmax]"), i18n("Angles distribution: number of δθ [0-180°]"), i18n("Spherical harmonics: lmax ∈ [2-40]"), i18n("Step(s) between configurations"), i18n("F(k,δt): number of δk")}; gchar * info[2] = {i18n("The Analysis tab regroups calculation options"), i18n("use it to setup your own default parameters:")}; gchar * m_list[4][2] = {{i18n("Calculations"), i18n("most analysis options")}, {i18n("Rings"), i18n("ring statistics options")}, {i18n("Chains"), i18n("chain statistics options")}, {"S(q,ω)", i18n("dynamic structure factor options")}}; vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 3, m_list, NULL), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("To determine the existence, or the absence, of a chemical bond"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("between 2 atoms is a key feature in the atomes software"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_("It is used for analysis purposes, and, to draw bonds in the OpenGL window."), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); edit_bonds (vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("You can adapt below the distance cutoffs:"), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(_("Total cutoff"), 120, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); combo_text_append (combo, _("Evaluated by atomes")); combo_text_append (combo, _("User Defined *")); combo_set_markup (combo); gtk_widget_set_size_request (combo, 180, -1); combo_set_active (combo, (tmp_totcut == 0.0) ? 0 : 1); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(totcut_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, combo, FALSE, FALSE, 10); tcut_box = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, tcut_box, FALSE, FALSE, 10); tcut_entry = create_entry (G_CALLBACK(set_default_num_delta), 100, 10, FALSE, GINT_TO_POINTER(-1)); update_entry_double ((GtkEntry *)tcut_entry, tmp_totcut); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, tcut_box, tcut_entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, tcut_box, markup_label ("Å", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(_("Partial cutoff(s)"), 120, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button (_("Set default cutoff(s)"), IMG_NONE, NULL, 180, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_cutoffs_default), NULL), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 20, 0.0, 0.0), FALSE, FALSE, 0); append_comments (vbox, "*", _("The highest this value is, the highest the number of neighbors around an atom.")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); GtkWidget * entry; vbox = create_vbox (BSEP); int i; for (i=0; iDynamical analysis: MSD, S(q,ω)"), 310, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); dyna_parameters (vbox, i); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("Calculations"))); for (i=0; i<2; i++) { vbox = create_vbox (BSEP); search_type = i; calc_rings (vbox); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new ((i) ? _("Chains") : _("Rings"))); } /*vbox = create_vbox (BSEP); calc_sk_t (vbox); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, markup_label("S(q,ω)", -1, -1, 0.0, 0.5));*/ show_the_widgets (notebook); return notebook; } /*! \fn void clean_all_tmp () \brief free all temporary buffers */ void clean_all_tmp () { int i; if (tmp_num_delta) { g_free (tmp_num_delta); tmp_num_delta = NULL; } if (tmp_delta_t) { g_free (tmp_delta_t); tmp_delta_t = NULL; } if (tmp_rsparam) { g_free (tmp_rsparam); tmp_rsparam = NULL; } if (tmp_csparam) { g_free (tmp_csparam); tmp_csparam = NULL; } if (tmp_opengl) { g_free (tmp_opengl); tmp_opengl = NULL; } if (tmp_lightning.spot) { for (i=0; i rep = old_rep -> rep; new_rep -> proj = old_rep -> proj; new_rep -> zoom = old_rep -> zoom; new_rep -> gnear = old_rep -> gnear; int i; for (i=0; i<2; i++) { new_rep -> c_angle[i] = old_rep -> c_angle[i]; new_rep -> c_shift[i] = old_rep -> c_shift[i]; } } /*! \fn void duplicate_background_data (background * new_back, background * old_back) \brief duplicate background data structure \param new_back the new background structure \param old_back the background structure to copy */ void duplicate_background_data (background * new_back, background * old_back) { new_back -> gradient = old_back -> gradient; new_back -> direction = old_back -> direction; new_back -> position = old_back -> position; new_back -> color = old_back -> color; int i; for (i=0; i<2; i++) { new_back -> gradient_color[i] = old_back -> gradient_color[i]; } } /*! \fn void duplicate_box_data (box * new_box, box * old_box) \brief duplicate box_data data structure \param new_box the new box structure \param old_box the box structure to copy */ void duplicate_box_data (box * new_box, box * old_box) { new_box -> box = old_box -> box; new_box -> color = old_box -> color; new_box -> line = old_box -> line; new_box -> rad = old_box -> rad; } /*! \fn void duplicate_axis_data (axis * new_axis, axis * old_axis) \brief duplicate axis_data data structure \param new_axis the new axis_data structure \param old_axis the axis_data structure to copy */ void duplicate_axis_data (axis * new_axis, axis * old_axis) { new_axis -> axis = old_axis -> axis; new_axis -> length = old_axis -> length; new_axis -> color = old_axis -> color; new_axis -> line = old_axis -> line; new_axis -> rad = old_axis -> rad; new_axis -> t_pos = old_axis -> t_pos; new_axis -> labels = old_axis -> labels; int i; for (i=0; i<3; i++) { new_axis -> c_pos[i] = old_axis -> c_pos[i]; if (old_axis -> title[i]) new_axis -> title[i] = g_strdup_printf ("%s", old_axis -> title[i]); } if (old_axis -> color) { new_axis -> color = duplicate_color (3, old_axis -> color); } } /*! \fn void prepare_tmp_default () \brief prepare temporary parameters */ void prepare_tmp_default () { clean_all_tmp (); tmp_totcut = default_totcut; tmp_bond_cutoff = duplicate_cutoffs (default_bond_cutoff); tmp_num_delta = duplicate_int (NUM_DELTA, default_num_delta); tmp_delta_t = duplicate_double (2, default_delta_t); // Ring statistics tmp_rsparam = duplicate_int (7, default_rsparam); // Chain statistics tmp_csparam = duplicate_int (7, default_csparam); // F(k,t) and S(q,w) tmp_skt_sets = default_skt_sets; tmp_skt_n_sets = default_skt_n_sets; tmp_sqw_n_sets = default_sqw_n_sets; tmp_sqw_freq = default_sqw_freq; tmp_opengl = duplicate_int (5, default_opengl); duplicate_material (& tmp_material, & default_material); tmp_lightning.lights = default_lightning.lights; tmp_lightning.spot = copy_light_sources (tmp_lightning.lights, tmp_lightning.lights, default_lightning.spot); duplicate_fog (& tmp_fog, & default_fog); tmp_clones = default_clones; tmp_cell = default_cell; tmp_o_at_rs = duplicate_bool (10, default_o_at_rs); tmp_at_rs = duplicate_double (10, default_at_rs); tmp_o_bd_rw = duplicate_bool (6, default_o_bd_rw); tmp_bd_rw = duplicate_double (6, default_bd_rw); int i; for (i=0; i<16; i++)tmp_atomic_rad[i] = duplicate_element_radius (default_atomic_rad[i]); for (i=0; i<6; i++) tmp_bond_rad[i] = duplicate_element_radius (default_bond_rad[i]); for (i=0; i<2; i++) { tmp_atom_color[i] = duplicate_element_color (default_atom_color[i]); tmp_label_color[i] = duplicate_element_color (default_label_color[i]); } for (i=0; i<5; i++) { tmp_label[i] = g_malloc0(sizeof*tmp_label[i]); duplicate_screen_label (tmp_label[i], & default_label[i]); } for (i=0; i<2; i++) { tmp_acl_format[i] = default_acl_format[i]; tmp_mtilt[i] = default_mtilt[i]; tmp_mpattern[i] = default_mpattern[i]; tmp_mfactor[i] = default_mfactor[i]; tmp_mwidth[i] = default_mwidth[i]; } tmp_box = g_malloc0(sizeof*tmp_box); duplicate_box_data (tmp_box, & default_box); tmp_background = g_malloc0(sizeof*tmp_background); duplicate_background_data (tmp_background, & default_background); tmp_rep = g_malloc0(sizeof*tmp_rep); duplicate_rep_data (tmp_rep, & default_rep); tmp_axis = g_malloc0(sizeof*tmp_axis); duplicate_axis_data (tmp_axis, & default_axis); for (i=0; i<2; i++) tmp_sel_color[i] = default_sel_color[i]; } gboolean * up_project; /*! \fn G_MODULE_EXPORT void update_projects (GtkDialog * proj_sel, gint response_id, gpointer data) \brief update projects in the workspace using new preferences \param proj_sel the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void update_projects (GtkDialog * proj_sel, gint response_id, gpointer data) { int i, j, k, l; float * tmpcut; gboolean update_bonds; switch (response_id) { case GTK_RESPONSE_OK: // To write apply to opened projects for (i=0; i nspec * this_proj -> nspec; tmpcut = allocfloat(l); l = 0; for (j=0; j nspec; j++) { for (k=0; k nspec; k++, l++) { tmpcut[l] = this_proj -> chemistry -> cutoffs[j][k]; } } if (this_proj -> chemistry -> grtotcutoff != default_totcut) update_bonds = TRUE; } apply_default_parameters_to_project (this_proj, up_project[i+nprojects]); if (up_project[i+nprojects]) { if (! update_bonds) { l = 0; for (j=0; j nspec; j++) { for (k=0; k nspec; k++, l++) { if (this_proj -> chemistry -> cutoffs[j][k] != tmpcut[l]) update_bonds = TRUE; } } } if (update_bonds) { if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } bonds_update = 1; frag_update = (this_proj -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((this_proj -> steps > STEP_LIMIT) ? 0 : 1) : 0; this_proj -> runc[0] = FALSE; this_proj -> dmtx = FALSE; if (this_proj -> id != activep) { k = activep; active_project_changed (this_proj -> id); on_calc_bonds_released (NULL, NULL); active_project_changed (k); } else { update_project (); on_calc_bonds_released (NULL, NULL); } } } } } break; default: break; } g_free (up_project); up_project = NULL; destroy_this_dialog (proj_sel); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_select_project (GtkCheckButton * but, gpointer data) \brief toggle select / unselect project to update callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_project (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_select_project (GtkToggleButton * but, gpointer data) \brief toggle select / unselect project to update callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_project (GtkToggleButton * but, gpointer data) #endif { up_project[GPOINTER_TO_INT(data)] = button_get_status ((GtkWidget *)but); } /*! \fn void save_preferences () \brief save user preferences */ void save_preferences () { default_totcut = tmp_totcut; if (default_bond_cutoff) { g_free (default_bond_cutoff); default_bond_cutoff = NULL; } default_bond_cutoff = duplicate_cutoffs (tmp_bond_cutoff); if (default_num_delta) { g_free (default_num_delta); default_num_delta = NULL; } default_num_delta = duplicate_int (NUM_DELTA, tmp_num_delta); default_delta_t = duplicate_double (2, tmp_delta_t); if (default_rsparam) { g_free (default_rsparam); default_rsparam = NULL; } default_rsparam = duplicate_int (7, tmp_rsparam); if (default_csparam) { g_free (default_csparam); default_csparam = NULL; } default_csparam = duplicate_int (7, tmp_csparam); if (default_opengl) { g_free (default_opengl); default_opengl = NULL; } default_skt_sets = tmp_skt_sets; default_skt_n_sets = tmp_skt_n_sets; default_sqw_n_sets = tmp_sqw_n_sets; default_sqw_freq = tmp_sqw_freq; default_opengl = duplicate_int (5, tmp_opengl); duplicate_material (& default_material, & tmp_material); default_lightning.lights = tmp_lightning.lights; default_lightning.spot = copy_light_sources (tmp_lightning.lights, tmp_lightning.lights, tmp_lightning.spot); duplicate_fog (& default_fog, & tmp_fog); // Model default_clones = tmp_clones; default_cell = tmp_cell; if (default_o_at_rs) { g_free (default_o_at_rs); default_o_at_rs = NULL; } default_o_at_rs = duplicate_bool (10, tmp_o_at_rs); if (default_at_rs) { g_free (default_at_rs); default_at_rs = NULL; } default_at_rs = duplicate_double (10, tmp_at_rs); if (default_o_bd_rw) { g_free (default_o_bd_rw); default_o_bd_rw = NULL; } default_o_bd_rw = duplicate_bool (6, tmp_o_bd_rw); if (default_bd_rw) { g_free (default_bd_rw); default_bd_rw = NULL; } default_bd_rw = duplicate_double (6, tmp_bd_rw); int i; for (i=0; i<16; i++) { if (default_atomic_rad[i]) g_free (default_atomic_rad[i]); default_atomic_rad[i] = duplicate_element_radius (tmp_atomic_rad[i]); } for (i=0; i<6; i++) { if (default_bond_rad[i]) g_free (default_bond_rad[i]); default_bond_rad[i] = duplicate_element_radius (tmp_bond_rad[i]); } for (i=0; i<2; i++) { if (default_atom_color[i]) g_free (default_atom_color[i]); default_atom_color[i] = duplicate_element_color (tmp_atom_color[i]); if (default_label_color[i]) g_free (default_label_color[i]); default_label_color[i] = duplicate_element_color (tmp_label_color[i]); } for (i=0; i<5; i++) { duplicate_screen_label (& default_label[i], tmp_label[i]); } for (i=0; i<2; i++) { default_acl_format[i] = tmp_acl_format[i]; default_mtilt[i] = tmp_mtilt[i]; default_mpattern[i] = tmp_mpattern[i]; default_mfactor[i] = tmp_mfactor[i]; default_mwidth[i] = tmp_mwidth[i]; } duplicate_rep_data (& default_rep, tmp_rep); duplicate_background_data (& default_background, tmp_background); duplicate_box_data (& default_box, tmp_box); duplicate_axis_data (& default_axis, tmp_axis); for (i=0; i<2; i++) default_sel_color[i] = tmp_sel_color[i]; if (nprojects) { if (ask_yes_no(_("Apply to project(s) in workspace ?"), _("Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?"), GTK_MESSAGE_QUESTION, pref_ogl_edit -> win)) { // Select project here GtkWidget * proj_sel = message_dialogmodal (_("Project selection"), _("Select to apply preferences"), GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK, MainWindow); GtkWidget * vbox = dialog_get_content_area (proj_sel); GtkWidget * hbox; up_project = allocbool (nprojects*2); for (i=0; i name, 200, -1, FALSE, G_CALLBACK(toggled_select_project), GINT_TO_POINTER(i)), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Including analysis parameters and cutoffs ..."), -1, -1, FALSE, G_CALLBACK(toggled_select_project), GINT_TO_POINTER(i+nprojects)), FALSE, FALSE, 20); } run_this_gtk_dialog (proj_sel, G_CALLBACK(update_projects), NULL); } } } /*! \fn void adjust_preferences_window () \brief adjust the widgets of the preferences window */ void adjust_preferences_window () { int i; if (tmp_totcut == 0.0) { hide_the_widgets (tcut_box); } else { show_the_widgets (tcut_box); } update_entry_double ((GtkEntry *)tcut_entry, tmp_totcut); update_light_data (0, pref_ogl_edit); setup_fog_dialogs (pref_ogl_edit, tmp_fog.mode); if (tmp_box -> box > NONE) { hide_the_widgets ((tmp_box -> box == WIREFRAME) ? pref_box_win -> radius_box : pref_box_win -> width_box); } hide_the_widgets ((tmp_axis -> axis == WIREFRAME) ? pref_axis_win -> radius_box : pref_axis_win -> width_box); for (i=0; i<2; i++) widget_set_sensitive (pref_axis_win -> axis_label_box[i], tmp_axis -> labels); update_gradient_widgets (pref_gradient_win, tmp_background); i = combo_get_active (meas_combo); i = (i < 0) ? 0 : i; hide_the_widgets (meas_box[! i]); show_the_widgets (meas_box[i]); i = combo_get_active (sel_combo); i = (i < 0) ? 0 : i; hide_the_widgets (sel_box[! i]); show_the_widgets (sel_box[i]); } /*! \fn G_MODULE_EXPORT void restore_all_defaults (GtkButton * but, gpointer data) \brief restore all default parameters \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void restore_defaults_parameters (GtkButton * but, gpointer data) { if (ask_yes_no(_("Restore default parameters"), _("Are you sure ?"), GTK_MESSAGE_QUESTION, MainWindow)) { set_atomes_defaults (); prepare_tmp_default (); int i; for (i=4; i>0; i--) { destroy_this_widget (gtk_notebook_get_nth_page (GTK_NOTEBOOK (preference_notebook), i)); } gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), calc_preferences(), gtk_label_new (_("Analysis "))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), opengl_preferences(), gtk_label_new ("OpenGL")); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), model_preferences(), gtk_label_new (_("Model"))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), view_preferences(), gtk_label_new (_("View"))); gtk_notebook_set_current_page (GTK_NOTEBOOK(preference_notebook), 0); show_the_widgets (preference_notebook); adjust_preferences_window (); } } /*! \fn G_MODULE_EXPORT void edit_preferences (GtkDialog * edit_prefs, gint response_id, gpointer data) \brief edit preferences - running the dialog \param edit_prefs the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void edit_preferences (GtkDialog * edit_prefs, gint response_id, gpointer data) { switch (response_id) { case GTK_RESPONSE_APPLY: if (ask_yes_no(_("Save parameters"), _("Are you sure ?"), GTK_MESSAGE_QUESTION, MainWindow)) { save_preferences (); gchar * str = g_strdup_printf (_("Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?"), ATOMES_CONFIG); if (ask_yes_no(_("Save atomes preferences to file ?"), str, GTK_MESSAGE_QUESTION, (GtkWidget *)edit_prefs)) { if (! save_preferences_to_xml_file ()) { show_error ((pref_error) ? pref_error : _("Error while trying to save preferences to file"), 0, MainWindow); g_free (pref_error); pref_error = NULL; } } g_free (str); } break; default: omega_max_info = destroy_this_widget (omega_max_info); omega_max_hbox = destroy_this_widget (omega_max_hbox); skt_all_info = destroy_this_widget (skt_all_info); preferences = FALSE; clean_all_tmp (); g_free (pref_pointer); pref_pointer = NULL; if (pref_box_win) g_free (pref_box_win); pref_box_win = NULL; if (pref_rep_win) g_free (pref_rep_win); pref_rep_win = NULL; if (pref_axis_win) g_free (pref_axis_win); pref_axis_win = NULL; if (pref_gradient_win) g_free (pref_gradient_win); pref_gradient_win = NULL; preference_notebook = destroy_this_widget (preference_notebook); destroy_this_dialog ((GtkDialog *)edit_prefs); edit_prefs = NULL; break; } } /*! \fn void create_configuration_dialog () \brief create the configuration window */ void create_user_preferences_dialog () { GtkWidget * win = dialog_cancel_apply (_("User preferences"), MainWindow, TRUE); preferences = TRUE; prepare_tmp_default (); GtkWidget * vbox = dialog_get_content_area (win); gtk_widget_set_size_request (win, 625, 645); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); preference_notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(preference_notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(preference_notebook), GTK_POS_LEFT); gtk_widget_set_size_request (preference_notebook, 600, 635); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, preference_notebook, FALSE, FALSE, 0); GtkWidget * gbox = create_vbox (BSEP); gchar * mess[2] = {i18n("Browse the following to modify the default configuration of atomes"), i18n("by replacing internal parameters by user defined preferences.")}; gchar * mlist[4][2]= {{i18n("Analysis "), i18n("calculation preferences")}, {"OpenGL", i18n("rendering preferences")}, {i18n("Model"), i18n("atom(s), bond(s) and box preferences")}, {i18n("View"), i18n("representation and projection preferences")}}; gchar * end = i18n("Default parameters are used for any new project added to the workspace\n"); pref_pointer = g_malloc0(NUM_COLORS*sizeof*pref_pointer); int i; for (i=0; iatomes default parameters"), -1, -1, 0.5, 0.5); add_container_child (CONTAINER_BUT, but, but_lab); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, gbox, hbox, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), gbox, gtk_label_new (_("General"))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), calc_preferences(), gtk_label_new (_("Analysis "))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), opengl_preferences(), gtk_label_new ("OpenGL")); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), model_preferences(), gtk_label_new (_("Model"))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), view_preferences(), gtk_label_new ("View")); show_the_widgets (preference_notebook); gtk_notebook_set_current_page (GTK_NOTEBOOK(preference_notebook), 0); run_this_gtk_dialog (win, G_CALLBACK(edit_preferences), NULL); } /*! \fn G_MODULE_EXPORT void set_default_options (GtkButton * but, gpointer data) \brief set options as default options \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_default_options (GtkButton * but, gpointer data) { tint * oid = (tint *)data; gchar * pstring[5]={i18n("rendering"), i18n("box"), i18n("axis"), i18n("background"), i18n("representation")}; gchar * str = g_strdup_printf (_("Set %s preferences as default preferences ?"), _(pstring[oid -> b])); project * this_proj = get_project_by_id(oid -> a); if (ask_yes_no(_("Set model preferences as default ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win)) { g_free (str); image * img = this_proj -> modelgl -> anim -> last -> img; switch (oid -> b) { case 0: // OpenGL preferences, style and color mpas not included : rendering only default_opengl[3] = img -> quality; default_opengl[4] = img -> ray_tracing; duplicate_material (& default_material, & img -> m_terial); default_lightning.lights = img -> l_ghtning.lights; default_lightning.spot = copy_light_sources (img -> l_ghtning.lights, img -> l_ghtning.lights, img -> l_ghtning.spot); duplicate_fog (& default_fog, & img -> f_g); break; case 1: // Box duplicate_box_data (& default_box, img -> abc); break; case 2: // Axis duplicate_axis_data (& default_axis, img -> xyz); break; case 3: // Background duplicate_background_data (& default_background, img -> back); break; case 4: // Representation default_rep.rep = img -> rep; default_rep.zoom = img -> zoom; default_rep.gnear = img -> gnear; int i; for (i=0; i<2; i++) { default_rep.c_angle[i] = img -> c_angle[i]; default_rep.c_shift[i] = img -> c_shift[i]; } break; } str = g_strdup_printf (_("Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?"), ATOMES_CONFIG); if (ask_yes_no(_("Save atomes preferences to file ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win)) { if (! save_preferences_to_xml_file ()) { show_error ((pref_error) ? pref_error : _("Error while trying to save preferences to file"), 0, MainWindow); g_free (pref_error); pref_error = NULL; } } g_free (str); } else { g_free (str); } } /*! \fn void add_global_option (GtkWidget * vbox, tint * oid) \brief add a button to update global user preferences \param the widget to insert the button in \param oid the option id pointer */ void add_global_option (GtkWidget * vbox, tint * oid) { GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Set default"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_default_options), oid); add_box_child_end (hbox, but, FALSE, FALSE, 0); } atomes_1.3.1/src/gui/callbacks.h0000664000175000017500000000430115212624223016146 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file callbacks.h * @short Callback declarations for main window * @author Sébastien Le Roux */ /* * This header file: 'callbacks.h' * * Contains: - Callback declarations for main window */ #ifndef CALLBACKS_H_ #define CALLBACKS_H_ extern void fill_tool_model (); void free_data (); void quit_gtk (); void show_Help (); G_MODULE_EXPORT int open_save_workspace (FILE * fp, int act); G_MODULE_EXPORT int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile); G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data); extern void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible); G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data); extern void open_this_coordinate_file (int format, gchar * proj_name); G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data); void to_read_pos (); void display_distances (); void run_project (); void apply_project (gboolean showtools); G_MODULE_EXPORT void on_Bonds_activate (); G_MODULE_EXPORT void on_Help_released (GtkButton * but, gpointer data); G_MODULE_EXPORT void on_check_toggled (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void expanding (GtkExpander * expander, gpointer data); G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data); #endif atomes_1.3.1/src/gui/main.c0000664000175000017500000012651015212624223015155 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file main.c * @short Initialization of the atomes program \n Functions required to read data from the command line * @author Sébastien Le Roux */ /* * This file: 'main.c' * * Contains: * - The initialization of the atomes program - The functions required to read data from the command line * * List of functions: int test_this_ext (int len, gchar * arg); int test_this_arg (gchar * arg); int get_style_from_string (gchar * style_string); int get_rep_from_string (gchar * rep_string); int get_box_axis_from_string (gchar * box_axis_string); int get_color_map_from_string (gchar * col_string); int get_gradient_from_string (gchar * grad_string); int check_for_atomes_file_options (int start, int end, char *argv[]); int parse_command_line (int argc, char *argv[]) int main (int argc, char *argv[]); ColRGBA * get_color_from_hexa_string (gchar * color_string); gboolean destroy_func (gpointer user_data); G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data); void printhelp(); void printversion (); void read_this_file (int file_type, gchar * this_file); void open_this_data_file (int file_type, gchar * file_name); G_MODULE_EXPORT void run_program (GApplication * app, gpointer data); GtkWidget * create_splash_window (); * * Notes: * LLM tools (Le Chat) were used at few occasions to prepare some sections of this file, including: - To write of the function to convert hexadecimal chain to color */ #include #include #include "version.h" #include "global.h" #include "bind.h" #include "callbacks.h" #include "preferences.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "movie.h" #ifdef G_OS_WIN32 #define APP_EXTENSION ".exe" #include #else #include #define APP_EXTENSION #endif extern GtkWidget * create_main_window (GApplication * app); const gchar * dfi[2]; struct file_list { gchar * file_name; int file_type; struct file_list * next; }; struct file_list * flist = NULL; struct file_list * ftmp = NULL; gboolean with_workspace = FALSE; gchar * bs_styles[] = {"ball&stick", "balls&sticks", "balls&stick", "ball&sticks", "ball_&_stick", "balls_&_sticks", "balls_&_stick", "ball_&_sticks", "ball_and_sticks", "balls_and_sticks", "balls_and_stick", "ball_and_stick", "ballsandsticks", "ballsandstick", "ballanddsticks", "ballandstick", "b&s", "b_and_s", "bs", "b", NULL}; gchar * wi_styles[] = {"wireframe", "wireframes", "wires", "wire", "wi", "w", NULL}; gchar * co_styles[] = {"covalent_radius", "covalent", "cov_rad", "cov", "co", "cr", NULL}; gchar * io_styles[] = {"ionic_radius", "ionic_rad", "ionic", "ion", "ir", NULL}; gchar * vw_styles[] = {"vdw_radius", "van_der_waals_radius", "van_der_waals", "vdw_radius", "vdw_rad", "vdw", "vr", NULL}; gchar * cr_styles[] = {"crystal", "crystal_radius", "in_crystal", "in_crystal_radius", "cryst", "crystal_rad", "cr", NULL}; gchar * sp_styles[] = {"sphere", "spheres", "sph", "sp", "S", NULL}; gchar * cy_styles[] = {"cylinder", "cylinders", "cyl", "cy", "c", NULL}; gchar * do_styles[] = {"dot", "dots", "d", NULL}; /*! \fn void print_help() \brief print basic help */ void print_help() { printf (_("\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n")); printf ("%s", _("\nReport a bug to <")); printf ("%s>\n\n", PACKAGE_BUGREPORT); } /*! \fn void print_version () \brief print version information */ void print_version () { printf ("%s", _("\n3D atomic scale model analysis, creation/edition and post-processing tool\n")); printf ("\n%s version : %s\n", PACKAGE, VERSION); printf ("\nGTK+ version : %1d.%1d.%1d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf ("Libavutil version : %2d.%2d.%3d\n", LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO); printf ("Libavformat version : %2d.%2d.%3d\n", LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO); printf ("Libavcodec version : %2d.%2d.%3d\n", LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, LIBAVCODEC_VERSION_MICRO); printf ("Libswscale version : %2d.%2d.%3d\n", LIBSWSCALE_VERSION_MAJOR, LIBSWSCALE_VERSION_MINOR, LIBSWSCALE_VERSION_MICRO); #ifdef OPENMP float v = 0.0; char * v_string; switch (_OPENMP) { case 200505: v = 2.5; v_string = "2005-05"; break; case 200805: v = 3.0; v_string = "2008-05"; break; case 201107: v = 3.1; v_string = "2011-07"; break; case 201307: v = 4.0; v_string = "2013-07"; break; case 201511: v = 4.5; v_string = "2015-11"; break; case 201811: v = 5.0; v_string = "2018-11"; break; case 202011: v = 5.1; v_string = "2020-11"; break; case 202111: v = 5.2; v_string = "2021-11"; break; default: v_string = "unknown"; break; } printf ("OpenMP version : %1.1f (%s)\n", v, v_string); #endif printf ("FC Compiler : %s\n", FC); printf ("FC Compiler flags : %s\n", FCFLAGS); printf ("C Compiler : %s\n", CC); printf ("C Compiler flags : %s\n", CFLAGS); printf ("%s", _("\nReport a bug to <")); printf ("%s>\n\n", PACKAGE_BUGREPORT); } /*! \fn int test_this_ext (int len, gchar * arg) \brief test extension of an argument from the command line \param len argument string length \param arg the argument to test */ int test_this_ext (int len, gchar * arg) { int i; gchar * aext = g_strdup_printf ("%c%c%c%c", arg[len-4], arg[len-3], arg[len-2], arg[len-1]); char * eext[15]={".awf", ".apf", ".xyz", "NULL", ".c3d", ".trj", "NULL", "tcar", "NULL", ".pdb", ".ent", ".cif", "NULL", "hist", ".ipf"}; for (i=0; i<15; i++) if (g_strcmp0 (aext, eext[i]) == 0) { g_free (aext); return -(i+1); } g_free (aext); return 0; } /*! \fn int test_this_arg (gchar * arg) \brief test an argument from the command line \param arg the argument to test */ int test_this_arg (gchar * arg) { char * fext[15]={"-awf", "-apf", " -xyz", "NULL", "-c3d", "-trj", "NULL", "-xdatcar", "NULL", "-pdb", "-ent", "-cif", "NULL", "-hist", "-ipf"}; int i, j; i = strlen(arg); gchar * str = g_ascii_strdown (arg, i); for (j=0; j<15; j++) { if (g_strcmp0 (str, fext[j]) == 0) { g_free (str); return j+1; } } j = test_this_ext (i, str); g_free (str); return (j) ? j : 0; } /*! \fn gboolean is_string_in_string_list (gchar * string, gchar ** list) \brief check if a string is in a list of strings \param string the string to search for \param list the string list */ gboolean is_string_in_string_list (gchar * string, gchar ** list) { if (string != NULL) { while (* list != NULL) { if (g_strcmp0(* list, string) == 0) { return TRUE; } list ++; } } return FALSE; } /*! \fn int get_style_from_string (gchar * style_string) \brief retrieve style from command line string \param style_string the style keyword from command line */ int get_style_from_string (gchar * style_string) { if (is_string_in_string_list(style_string, bs_styles)) return BALL_AND_STICK; if (is_string_in_string_list(style_string, wi_styles)) return WIREFRAME; if (is_string_in_string_list(style_string, co_styles)) return OGL_STYLES; if (is_string_in_string_list(style_string, io_styles)) return OGL_STYLES+1; if (is_string_in_string_list(style_string, vw_styles)) return OGL_STYLES+2; if (is_string_in_string_list(style_string, cr_styles)) return OGL_STYLES+3; if (is_string_in_string_list(style_string, sp_styles)) return SPHERES; if (is_string_in_string_list(style_string, cy_styles)) return CYLINDERS; if (is_string_in_string_list(style_string, do_styles)) return PUNT; return NONE; } /*! \fn int get_rep_from_string (gchar * rep_string) \brief retrieve representation style from command line string \param rep_string the representation keyword from command line */ int get_rep_from_string (gchar * rep_string) { gchar * ortho_keys[] = {"orthographic", "ortho", "o", "0", NULL}; gchar * persp_keys[] = {"perspective", "persp", "p", "1", NULL}; if (is_string_in_string_list(rep_string, ortho_keys)) return ORTHOGRAPHIC; if (is_string_in_string_list(rep_string, persp_keys)) return PERSPECTIVE; return NONE; } /*! \fn int get_box_axis_from_string (gchar * box_axis_string) \brief retrieve box or axis style from command line string \param box_axis_string the axis keyword from command line */ int get_box_axis_from_string (gchar * box_axis_string) { if (is_string_in_string_list(box_axis_string, wi_styles)) return WIREFRAME; if (is_string_in_string_list(box_axis_string, cy_styles)) return CYLINDERS; return NONE; } /*! \fn int get_color_map_from_string (gchar * col_string) \brief retrieve color map from command line string \param col_string the color map keyword from command line */ int get_color_map_from_string (gchar * col_string) { gchar * sp_keys[] = {"species", "spec", "sp", "0", NULL}; gchar * pt_keys[] = {"total_coordinations", "total_coordination", "total_coord", "total", "tc", "t", "1", NULL}; gchar * pc_keys[] = {"partial_coordinations", "partial_coordination", "partial_coord", "partial", "pc", "p", "2", NULL}; gchar * fg_keys[] = {"fragments", "fragment", "frag", "fg", "f", "3", NULL}; gchar * mo_keys[] = {"molecules", "molecule", "mol", "mo", "m", "4", NULL}; if (is_string_in_string_list(col_string, sp_keys)) return 0; if (is_string_in_string_list(col_string, pt_keys)) return 1; if (is_string_in_string_list(col_string, pc_keys)) return 2; if (is_string_in_string_list(col_string, fg_keys)) return 3; if (is_string_in_string_list(col_string, mo_keys)) return 4; return NONE; } /*! \fn ColRGBA * get_color_from_hexa_string (gchar * color_string) \brief convert Hexadecimal string to ColRGBA \param color_string the color keyword from command line (formats: #RGB, RGB, #RGBA, RGBA, #RRGGBB, RRGGBB, #RRGGBBAA, RRGGBBAA). */ ColRGBA * get_color_from_hexa_string (gchar * color_string) { ColRGBA * col = NULL; const char * color = color_string; // Ignorer le '#' si présent au début if (color[0] == '#') color ++; size_t len = strlen(color); if (len != 3 && len != 4 && len != 6 && len != 8) { // longueur de chaîne incompatible return NULL; } // Format long ? int is_long = (len == 6 || len == 8) ? TRUE : FALSE; float ratio = (is_long) ? 255.0 : 15.0; int incr = (is_long) ? 2 : 1; col = g_malloc0(sizeof*col); col -> alpha = 1.0; char buf[3] = {0}; // pour les caractères à examiner // Format court (#RGB ou #RGBA) buf[incr] = '\0'; buf[0] = color[0]; if (is_long) buf[1] = color[1]; col->red = strtol(buf, NULL, 16) / ratio; buf[0] = color[incr]; if (is_long) buf[1] = color[incr+1]; col->green = strtol(buf, NULL, 16) / ratio; buf[0] = color[2*incr]; if (is_long) buf[1] = color[2*incr+1]; col->blue = strtol(buf, NULL, 16) / ratio; if (len == 4 || len == 8) { buf[0] = color[3*incr]; if (is_long) buf[1] = color[3*incr+1]; col->alpha = strtol(buf, NULL, 16) / ratio; } // Safety net if (col -> red < 0.0 || col -> red > 1.0 || col -> green < 0.0 || col -> green > 1.0 || col -> blue < 0.0 || col -> blue > 1.0 || col -> alpha < 0.0 || col -> alpha > 1.0) { g_free(col); return NULL; } return col; } /*! \fn int get_gradient_from_string (gchar * grad_string) \brief retrieve background gradient from command line string \param grad_string the color map keyword from command line */ int get_gradient_from_string (gchar * grad_string) { gchar * no_keys[] = {"none", "no", "n", "0", NULL}; gchar * li_keys[] = {"linear", "lin", "li", "l", "1", NULL}; gchar * ci_keys[] = {"circular", "circ", "ci", "c", "2", NULL}; if (is_string_in_string_list(grad_string, no_keys)) return 0; if (is_string_in_string_list(grad_string, li_keys)) return 1; if (is_string_in_string_list(grad_string, ci_keys)) return 2; return NONE; } /*! \fn int check_for_atomes_file_options (int start, int end, char *argv[]) \brief retrieve the list of files to read from the command line leave out all other options \param start starting position on the command line \param end ending position on the command line \param *argv[] list of argument(s) on the command line */ int check_for_atomes_file_options (int start, int end, char *argv[]) { int i, j, k; i=0; for (j=start; j 0 && j < end-1) { if (! (k == 1 && with_workspace)) { if (! flist) { flist = g_malloc0(sizeof*flist); ftmp = flist; } else { ftmp -> next = g_malloc0(sizeof*ftmp -> next); ftmp = ftmp -> next; } ftmp -> file_name = g_strdup_printf ("%s", argv[j+1]); ftmp -> file_type = k; argv[j] = argv[j+1] = g_strdup_printf (" "); j ++; i ++; if (k == 1) with_workspace = TRUE; } } } return i; } /*! \fn int parse_command_line (int argc, char *argv[]) \brief test command line arguments \param argc number of argument(s) on the command line \param *argv[] list of argument(s) on the command line */ int parse_command_line (int argc, char *argv[]) { struct option atomes_options[] = {{"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {"libreoffice", no_argument, 0, 'l'}, {"render-png", no_argument, 0, 'p'}, {"png", no_argument, 0, 'p'}, {"render-jpg", no_argument, 0, 'j'}, {"jpg", no_argument, 0, 'j'}, {"width", required_argument, 0, 'W'}, {"height", required_argument, 0, 'H'}, {"output", required_argument, 0, 'o'}, {"style", required_argument, 0, 's'}, {"atoms", required_argument, 0, 'e'}, {"poly", required_argument, 0, 't'}, {"axis", required_argument, 0, 'a'}, {"box", required_argument, 0, 'b'}, {"box_color", required_argument, 0, 'C'}, {"back_color", required_argument, 0, 'B'}, {"back_grad", required_argument, 0, 'G'}, {"back_dir", required_argument, 0, 'D'}, {"back_pos", required_argument, 0, 'P'}, {"grad_col_a", required_argument, 0, 'U'}, {"grad_col_b", required_argument, 0, 'V'}, {"rep", required_argument, 0, 'r'}, // {"debug", no_argument, 0, 'd'}, {0, 0, 0, 0}}; int opt; int index = -1; int i, j; double v; gchar * image_x = NULL; gchar * image_y = NULL; int img_opt = 0; for (i=0; i<2; i++) render_image_grad_color[i] = NULL; /* We want to parse the command line using GNU getopt, but then some options that are atomes specific and not GNU getopt compatible might disappear, to prevent that it is mandatory to prepare the information to be given to GNU getopt */ int files_to_read = check_for_atomes_file_options (1, argc, argv); /* Letter follow by : means that the command requires an argument No letter if the option is only in long format, ex : --width If the long name is empty the command is only in short format */ while ((opt = getopt_long(argc, argv, "hvlpjdW:H:o:s:a:b:r:e:t:B:C:G:D:P:U:V:", atomes_options, & index)) != -1) { switch (opt) { case 'h': print_help(); return FALSE; break; case 'v': print_version(); return FALSE; break; case 'e': render_image_acolor = get_color_map_from_string (g_ascii_strdown(optarg,strlen(optarg))); trigger_fragment_analysis = (render_image_acolor > 2) ? TRUE : FALSE; trigger_molecule_analysis = (render_image_acolor > 3) ? TRUE : FALSE; img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 't': render_image_pcolor = get_color_map_from_string (g_ascii_strdown(optarg,strlen(optarg))); trigger_fragment_analysis = (render_image_pcolor > 2) ? TRUE : FALSE; trigger_molecule_analysis = (render_image_pcolor > 3) ? TRUE : FALSE; img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'l': atomes_from_libreoffice = TRUE; render_image_format = 0; break; case 'p': atomes_render_image = TRUE; render_image_format = 0; img_opt ++; break; case 'j': atomes_render_image = TRUE; render_image_format = 1; img_opt ++; break; case 'o': render_image_output = g_strdup_printf ("%s", optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'W': image_x = g_strdup_printf ("%s", optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'H': image_y = g_strdup_printf ("%s", optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 's': render_image_style = get_style_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'a': render_image_axis = get_box_axis_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'b': render_image_box = get_box_axis_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'r': render_image_rep = get_rep_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'C': render_image_box_color = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'B': render_image_back_color = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'G': render_image_back_grad = get_gradient_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'D': if (isdigit(optarg[0])) { render_image_back_dir = ((optarg[0] - '0') < 9) ? optarg[0] - '0' : NONE; } img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'P': v = string_to_double(optarg); render_image_back_pos = (v >= 0.0 && v <= 1.0) ? v : NONE; img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'U': render_image_grad_color[0] = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'V': render_image_grad_color[1] = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; } index = -1; } if (atomes_from_libreoffice) atomes_render_image = FALSE; if (atomes_render_image) { if (! render_image_output) render_image_output = g_strdup_printf ("%s", (render_image_format) ? "image.jpg" : "image.png"); if (argc == img_opt + 2) { if (image_x || image_y) { render_image_pixels = allocint(2); int pix; if (image_x) { pix = (int) string_to_double(image_x); if (pix > 0) render_image_pixels[0] = pix; } if (image_y) { pix = (int) string_to_double(image_y); if (pix > 0) render_image_pixels[1] = pix; } } } else { return FALSE; } } for (i=optind; i next = g_malloc0(sizeof*ftmp -> next); ftmp = ftmp -> next; } ftmp -> file_name = g_strdup_printf ("%s", argv[i]); ftmp -> file_type = -j; files_to_read ++; if (atomes_from_libreoffice) projfile = g_strdup_printf ("%s", argv[i]); if (j == -1) with_workspace = TRUE; } } } return (atomes_render_image && files_to_read == 1) ? TRUE : (atomes_render_image) ? FALSE : TRUE; } /*! \fn gboolean destroy_func (gpointer user_data) \brief destroy splash screen \param user_data the splash screen to destroy */ gboolean destroy_func (gpointer user_data) { GtkWidget * splashi = (GtkWidget*) user_data; destroy_this_widget (splashi); return FALSE; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) \brief draw splash screen \param widget the GtkWidget sending the signal \param cr the cairo drawing context \param data the associated data pointer */ G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) { cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); /* transparent */ cairo_paint (cr); return FALSE; } #endif /*! \fn GtkWidget * create_splash_window () \brief create splash screen window */ GtkWidget * create_splash_window () { GtkWidget * splash_window = new_gtk_window (); gtk_window_set_decorated (GTK_WINDOW (splash_window), FALSE); GtkWidget * image; #ifdef GTK4 image = gtk_picture_new_for_filename (PACKAGE_LOGO); gchar * backcol = g_strdup_printf ("window#splash {\n" " background: none;" " background-color: rgba(255, 255, 255, 0);}"); provide_gtk_css (backcol); gtk_widget_set_name (splash_window, "splash"); g_free (backcol); #else gtk_window_set_type_hint (GTK_WINDOW (splash_window), GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); gtk_window_set_position (GTK_WINDOW (splash_window), GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_set_app_paintable (splash_window, TRUE); GdkScreen * screen = gtk_widget_get_screen (splash_window); GdkVisual * visual = gdk_screen_get_rgba_visual (screen); gtk_widget_set_visual (splash_window, visual); // Next line might be optional for total transparency g_signal_connect(G_OBJECT(splash_window), "draw", G_CALLBACK(splashdraw), NULL); image = gtk_image_new_from_file (PACKAGE_LOGO); #endif add_container_child (CONTAINER_WIN, splash_window, image); gtk_window_set_transient_for ((GtkWindow *)splash_window, (GtkWindow *)MainWindow); show_the_widgets (splash_window); return splash_window; } /*! \fn void read_this_file (int file_type, gchar * this_file) \brief read file from the command line \param file_type File type \param this_file File name */ void read_this_file (int file_type, gchar * this_file) { FILE * fp = fopen (this_file, dfi[0]); if (file_type == 1) { int i = open_save_workspace (fp, 0); if (i != 0) { gchar * err = g_strdup_printf (_("Error while reading workspace file\n%s\n"), this_file); show_error (err, 0, MainWindow); g_free (err); } } else { init_project (FALSE); reading_project = TRUE; open_save (fp, 0, 0, activep, activep, this_file); reading_project = FALSE; } fclose (fp); } /*! \fn void open_this_data_file (int file_type, gchar * file_name) \brief open data file from the command line \param file_type File type \param file_name File name */ void open_this_data_file (int file_type, gchar * file_name) { gchar * end; gchar * str; gchar * filedir; int i; #ifdef G_OS_WIN32 WIN32_FIND_DATA ffd; HANDLE hFind; #else DIR * d; struct dirent * dir; #endif switch (file_type) { case 1: read_this_file (1, file_name); break; case 2: end = g_strdup_printf ("%c", file_name[strlen(file_name)-1]); if (g_strcmp0 (file_name, "*") == 0 || g_strcmp0 (end, "*") == 0) { if (g_strcmp0 (file_name, "*") == 0) { filedir = g_strdup_printf ("./"); } else { filedir = g_strdup_printf ("%c", file_name[0]); for (i=1; i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", filedir, dir -> d_name); read_this_file (2, str); g_free (str); } } closedir(d); } #endif g_free (filedir); } else { read_this_file (2, file_name); } break; case 15: init_project (TRUE); open_this_isaacs_xml_file (g_strdup_printf ("%s", file_name), activep, FALSE); break; default: end = g_strdup_printf ("%c", file_name[strlen(file_name)-1]); if (g_strcmp0 (file_name, "*") == 0 || g_strcmp0 (end, "*") == 0) { if (g_strcmp0 (file_name, "*") == 0) { filedir = g_strdup_printf ("./"); } else { filedir = g_strdup_printf ("%c", file_name[0]); for (i=1; i coordfile = g_strdup_printf ("%s\\%s", filedir, (gchar *)ffd.cFileName); open_this_coordinate_file (file_type-3, NULL); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes & ! FILE_ATTRIBUTE_DIRECTORY) { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s\\%s", filedir, (gchar *)ffd.cFileName); open_this_coordinate_file (file_type-3, NULL); } } } FindClose(hFind); #else d = opendir (filedir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s/%s", filedir, dir -> d_name); open_this_coordinate_file (file_type-3, NULL); } } closedir(d); } #endif g_free (filedir); } else { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s", file_name); open_this_coordinate_file (file_type-3, NULL); } break; } } /*! \fn G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) \brief run the program \param app the application to run \param data the associated data pointer */ G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) { /* GTK re-initializes the locale during startup (gtk_init calls setlocale(LC_ALL, "")), which overrides the LC_NUMERIC = "C" set in main(). We must enforce it again here to ensure floating-point parsing/formatting always uses the English (dot) convention. */ setlocale (LC_NUMERIC, "C"); GtkSettings * default_settings = gtk_settings_get_default (); /* #ifndef G_OS_WIN32 g_object_set (default_settings, "gtk-application-prefer-dark-theme", TRUE, NULL); #endif */ #ifdef GTK3 g_object_set (default_settings, "gtk-button-images", TRUE, NULL); #endif #ifdef G_OS_WIN32 #ifdef GTK3 g_object_set (default_settings, "gtk-key-theme-name", "win32", NULL); #endif dfi[0]="rb"; dfi[1]="wb"; #else dfi[0]="r"; dfi[1]="w"; #endif #ifdef MAC_INTEGRATION GtkosxApplication * ProgOSX; ProgOSX = g_object_new (GTKOSX_TYPE_APPLICATION, NULL); gtkosx_application_set_use_quartz_accelerators (ProgOSX, FALSE); gtkosx_application_ready (ProgOSX); #endif #ifdef DEBUG print_version (); #endif // DEBUG if (! atomes_render_image) { MainWindow = create_main_window (app); GtkWidget * isplash = create_splash_window (); if (isplash == NULL) { g_warning (_("Impossible to load the splash screen\n")); } else { g_timeout_add_seconds (1, destroy_func, isplash); } } if (flist) { ftmp = flist; silent_input = TRUE; if (with_workspace) { while (ftmp) { if (ftmp -> file_type == 1) { // Open the workspace open_this_data_file (ftmp -> file_type, ftmp -> file_name); } ftmp = ftmp -> next; } } ftmp = flist; while (ftmp) { if (ftmp -> file_type != 1) { // Add project(s) to workspace open_this_data_file (ftmp -> file_type, ftmp -> file_name); } ftmp = ftmp -> next; } g_free (flist); flist = NULL; silent_input = FALSE; } #ifdef MAC_INTEGRATION g_object_unref (ProgOSX); #endif } /*! \fn int check_opengl_rendering () \brief check the initialization parameters for an OpenGL context */ int check_opengl_rendering () { GError * error = NULL; gchar * proc_dir = NULL; gchar * proc_path = NULL; const char * proc_name; #ifdef G_OS_WIN32 proc_dir = g_build_filename (PACKAGE_PREFIX, "bin", NULL); proc_name = "atomes_startup_testing.exe"; proc_path = g_build_filename (proc_dir, proc_name, NULL); #else proc_dir = g_build_filename (PACKAGE_LIBEXEC, NULL); proc_name = "atomes_startup_testing"; proc_path = g_build_filename (PACKAGE_LIBEXEC, proc_name, NULL); #endif #ifdef DEBUG g_print ("proc_dir= %s\n", proc_dir); g_print ("proc_name= %s\n", proc_name); g_print ("proc_path= %s\n", proc_path); #endif #ifdef CODEBLOCKS GSubprocess * proc = g_subprocess_new (G_SUBPROCESS_FLAGS_NONE, & error, proc_path, NULL); #else #ifndef OSX GSubprocessLauncher * proc_launch = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE); g_subprocess_launcher_set_cwd (proc_launch, proc_dir); GSubprocess * proc = g_subprocess_launcher_spawn (proc_launch, & error, proc_path, NULL); #else GSubprocess * proc = g_subprocess_new (G_SUBPROCESS_FLAGS_NONE, & error, proc_path, NULL); #endif #endif if (error) { g_print ("error: %s\n", error -> message); g_clear_error (& error); } g_subprocess_wait (proc, NULL, & error); int res = g_subprocess_get_exit_status (proc); #ifdef DEBUG g_debug ("Exit status of atomes_startup_testing = %d", res); #endif g_object_unref (proc); #ifndef CODEBLOCKS #ifndef OSX g_object_unref (proc_launch); #endif #endif g_free (proc_path); g_free (proc_dir); gchar * ogl_info = NULL; switch (res) { case 1: ogl_info = g_strdup_printf (_("Fatal error on OpenGL initialization: trying to adjust environment !")); break; case -2: ogl_info = g_strdup_printf (_("Impossible to initialize the OpenGL 3D rendering !")); break; case -1: ogl_info = g_strdup_printf (_("GDK visual must be modified to initialize the OpenGL context !")); break; default: break; } if (ogl_info) { g_print ("%s\n", ogl_info); g_free (ogl_info); ogl_info = NULL; } return res; } /*! \fn int main (int argc, char *argv[]) \brief initialization of the atomes program \param argc number of argument(s) on the command line \param *argv[] list of argument(s) on the command line */ int main (int argc, char *argv[]) { gboolean RUNC = FALSE; #ifdef G_OS_WIN32 PACKAGE_PREFIX = g_win32_get_package_installation_directory_of_module (NULL); PACKAGE_LOCALE = g_build_filename (PACKAGE_PREFIX, "locale", NULL); // g_win32_get_package_installation_directory (NULL, NULL); #endif PACKAGE_LIB_DIR = g_build_filename (PACKAGE_PREFIX, "library", NULL); PACKAGE_IMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/import.png", NULL); PACKAGE_IMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/import.png", NULL); PACKAGE_CON = g_build_filename (PACKAGE_PREFIX, "pixmaps/convert.png", NULL); PACKAGE_IMG = g_build_filename (PACKAGE_PREFIX, "pixmaps/image.png", NULL); PACKAGE_PDF = g_build_filename (PACKAGE_PREFIX, "pixmaps/pdf.png", NULL); PACKAGE_SVG = g_build_filename (PACKAGE_PREFIX, "pixmaps/svg.png", NULL); PACKAGE_EPS = g_build_filename (PACKAGE_PREFIX, "pixmaps/eps.png", NULL); PACKAGE_PNG = g_build_filename (PACKAGE_PREFIX, "pixmaps/png.png", NULL); PACKAGE_JPG = g_build_filename (PACKAGE_PREFIX, "pixmaps/jpg.png", NULL); PACKAGE_BMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bmp.png", NULL); PACKAGE_TIFF = g_build_filename (PACKAGE_PREFIX, "pixmaps/tiff.png", NULL); PACKAGE_VOID = g_build_filename (PACKAGE_PREFIX, "pixmaps/void.png", NULL); PACKAGE_TD = g_build_filename (PACKAGE_PREFIX, "pixmaps/td.png", NULL); PACKAGE_MOL = g_build_filename (PACKAGE_PREFIX, "pixmaps/molecule.png", NULL); PACKAGE_OGL = g_build_filename (PACKAGE_PREFIX, "pixmaps/opengl.png", NULL); PACKAGE_OGLM = g_build_filename (PACKAGE_PREFIX, "pixmaps/mol.png", NULL); PACKAGE_OGLC = g_build_filename (PACKAGE_PREFIX, "pixmaps/mol.png", NULL); PACKAGE_PRO = g_build_filename (PACKAGE_PREFIX, "pixmaps/prop.png", NULL); PACKAGE_SET = g_build_filename (PACKAGE_PREFIX, "pixmaps/settings.png", NULL); PACKAGE_LOGO = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo.png", NULL); PACKAGE_LAGPL = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo-agpl.png", NULL); PACKAGE_LABOUT = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo-about.png", NULL); PACKAGE_DOTA = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-a.png", NULL); PACKAGE_DOTB = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-b.png", NULL); PACKAGE_DOTC = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-c.png", NULL); PACKAGE_DOTD = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-d.png", NULL); PACKAGE_DOTE = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-e.png", NULL); PACKAGE_DOTF = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-f.png", NULL); PACKAGE_DOTG = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-g.png", NULL); PACKAGE_DOTH = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-h.png", NULL); PACKAGE_DFBD = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/bd.png", NULL); PACKAGE_DFAN = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/an.png", NULL); PACKAGE_DFDI = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/di.png", NULL); PACKAGE_DFTD = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/td.png", NULL); PACKAGE_DFIN = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/in.png", NULL); PACKAGE_SGCP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-P.png", NULL); PACKAGE_SGCI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-I.png", NULL); PACKAGE_SGCF = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-F.png", NULL); PACKAGE_SGHP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Hexagonal.png", NULL); PACKAGE_SGTR = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Trigonal-R.png", NULL); PACKAGE_SGTI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Tetragonal-I.png", NULL); PACKAGE_SGTP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Tetragonal-P.png", NULL); PACKAGE_SGOP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-P.png", NULL); PACKAGE_SGOI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-I.png", NULL); PACKAGE_SGOC = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-C.png", NULL); PACKAGE_SGOF = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-F.png", NULL); PACKAGE_SGMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Monoclinic-P.png", NULL); PACKAGE_SGMI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Monoclinic-I.png", NULL); PACKAGE_SGTC = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Triclinic.png", NULL); switch (argc) { case 1: RUNC = TRUE; break; default: RUNC = parse_command_line (argc, argv); break; } if (RUNC) { #ifdef G_OS_WIN32 #ifndef DEBUG FreeConsole (); #endif #endif atomes_visual = check_opengl_rendering (); if (atomes_visual == 1) { // OpenGL initialization error, try adapting environment g_setenv ("GSK_RENDERER", "gl", TRUE); g_setenv ("GDK_DEBUG", "gl-prefer-gl", TRUE); atomes_visual = check_opengl_rendering (); if (atomes_visual == 1) { // OpenGL initialization error, again try adapting environment g_setenv ("GDK_RENDERER", "ngl", TRUE); atomes_visual = check_opengl_rendering (); } } if (atomes_visual > 0 || atomes_visual == -2) { // No way to initialize an OpenGL context: must quit return 1; } #ifdef OSX g_setenv ("GSK_RENDERER", "gl", TRUE); #endif atomes_visual = ! (abs(atomes_visual)); #ifdef G_OS_WIN32 PWSTR localPath = NULL; HRESULT hr = SHGetKnownFolderPath (& FOLDERID_LocalAppData, 0, NULL, & localPath); if (FAILED(hr)) { fprintf (stderr, _("Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s"), hr); ATOMES_CONFIG_DIR = NULL; ATOMES_CONFIG = NULL; } else { char appdata[MAX_PATH]; wcstombs (appdata, localPath, MAX_PATH); CoTaskMemFree (localPath); // libérer mémoire retournée par SHGetKnownFolderPath // Build the folder path for atomes ATOMES_CONFIG_DIR = g_strdup_printf ("%s\\atomes", appdata); ATOMES_CONFIG = g_strdup_printf ("%s\\atomes.pml", ATOMES_CONFIG_DIR); } #else struct passwd * pw = getpwuid(getuid()); ATOMES_CONFIG_DIR = g_strdup_printf ("%s/.config/atomes", pw -> pw_dir); ATOMES_CONFIG = g_strdup_printf ("%s/atomes.pml", ATOMES_CONFIG_DIR); #endif bindtextdomain (PACKAGE, PACKAGE_LOCALE); textdomain (PACKAGE); bind_textdomain_codeset(PACKAGE, "UTF-8"); // Forcer UTF-8 pour gettext set_atomes_preferences (); #if GLIB_MINOR_VERSION < 74 AtomesApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.prog-%d", (int)clock()), G_APPLICATION_FLAGS_NONE); #else AtomesApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.prog-%d", (int)clock()), G_APPLICATION_DEFAULT_FLAGS); #endif GError * error = NULL; g_application_register (G_APPLICATION(AtomesApp), NULL, & error); g_signal_connect (G_OBJECT(AtomesApp), "activate", G_CALLBACK(run_program), NULL); int status = g_application_run (G_APPLICATION (AtomesApp), 0, NULL); g_object_unref (AtomesApp); return status; } return 0; } atomes_1.3.1/src/gui/bdcall.c0000664000175000017500000013165615212624223015461 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file bdcall.c * @short Callbacks for the bond properties calculation dialog * @author Sébastien Le Roux */ /* * This file: 'bdcall.c' * * Contains: * - The callbacks for the bond properties calculation dialog * * List of functions: int * save_color_map (glwin * view); gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); double get_cutoff (double s_a, double s_b); void restore_color_map (glwin * view, int * colm); void recup_dmin_dmax_ (double * min, double * max); void init_bond (project * this_proj); void init_ang (project * this_proj); void initcutoffs (chemical_data * chem, int species); void cutoffsend (); void prep_ogl_bonds (); void update_ang_view (project * this_proj); void update_glwin_after_bonds (int bonding, int * colm); void coordination_info (int sp, double sac, double ssac[active_project -> nspec]); void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa); void warren_cowley_out_ (int * spa, double ssac[active_project -> nspec]); void cargill_spaepen_out_ (int * spa, double ssac[active_project -> nspec]); void env_info (int sp, int totgsa, int numgsa[totgsa]); void update_angle_view (project * this_proj); void envout_ (int * sid, int * totgsa, int numgsa[* totgsa]); G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "dlp_field.h" #include "glview.h" #include "initcoord.h" #include "preferences.h" extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern void clean_coord_window (project * this_proj); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /*! \fn int * save_color_map (glwin * view) \brief save atoms and polyhedra color maps \param view the target glwin */ int * save_color_map (glwin * view) { int i; int * colm = allocint (2); for (i=0; i<2; i++) colm[i] = view -> anim -> last -> img -> color_map[i]; return colm; } /*! \fn void restore_color_map (glwin * view, int * colm) \brief restore saved color maps \param view the target glwin \param colm the saved color map values */ void restore_color_map (glwin * view, int * colm) { #ifdef GTK3 // GTK3 Menu Action To Check int i, j; gboolean was_input = reading_input; reading_input = TRUE; for (i=0; i<2; i++) { if ((i == 3 || i == 4) && ! view -> adv_bonding[i-3]) { j = i*ATOM_MAPS; } else { j = i*ATOM_MAPS + colm[i]; } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); set_color_map (view -> color_styles[j], & view -> colorp[j][0]); } reading_input = was_input; #endif } /*! \fn void recup_dmin_dmax_ (double * min, double * max) \brief retrieve min and max inter-atomic distances from Fortran \param min the smallest inter-atomic distance \param max the highest inter-atomic distance */ void recup_dmin_dmax_ (double * min, double * max) { if (active_project -> analysis) { active_project -> analysis[BND] -> min = * min; active_project -> analysis[BND] -> max = * max; } } /*! \fn void init_bond (project * this_proj) \brief initialize the curve widgets for the bond distribution \param this_proj the target project */ void init_bond (project * this_proj) { int i, j, k; k = 0; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[BND] -> curves[k] -> name = g_strdup_printf("Dij [%s-%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } add_curve_widgets (this_proj, BND); this_proj -> analysis[BND] -> init_ok = TRUE; } /*! \fn void init_ang (project * this_proj) \brief initialize the curve widgets for the angle distribution \param this_proj the target project */ void init_ang (project * this_proj) { int h, i, j, k, l; h=0; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { for ( k = 0 ; k < this_proj -> nspec ; k++ ) { this_proj -> analysis[ANG] -> curves[h] -> name = g_strdup_printf(_("Angles [%s-%s-%s]"), active_chem -> label[i], active_chem -> label[j], active_chem -> label[k]); h=h+1; } } } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { for ( k = 0 ; k < this_proj -> nspec ; k++ ) { for ( l = 0 ; l < this_proj -> nspec ; l++ ) { this_proj -> analysis[ANG] -> curves[h] -> name = g_strdup_printf(_("Dihedrals [%s-%s-%s-%s]"), active_chem -> label[i], active_chem -> label[j], active_chem -> label[k], active_chem -> label[l]); h=h+1; } } } } add_curve_widgets (this_proj, ANG); this_proj -> analysis[ANG] -> init_ok = TRUE; } /*! \fn double get_cutoff (double s_a, double s_b) \param retrieve cutoff radius between spec a and spec b \param s_a species a \param s_b species b */ double get_cutoff (double s_a, double s_b) { if (default_bond_cutoff) { bond_cutoff * cut = default_bond_cutoff; int z_a = min (s_a, s_b); int z_b = max (s_a, s_b); while (cut) { if (cut -> Z[0] == z_a && cut -> Z[1] == z_b) return cut -> cutoff; cut = cut -> next; } return 0.0; } else { return 0.0; } } /*! \fn void initcutoffs (chemical_data * chem, int species) \brief initialize bond cutoffs \param chem the target chemical data \param species the number of chemical species */ void initcutoffs (chemical_data * chem, int species) { int i, j; for (i = 0; i < species; i++) { chem -> cutoffs[i][i] = (chem -> cutoffs[i][i] != 0.0) ? chem -> cutoffs[i][i] : get_cutoff (chem -> chem_prop[CHEM_Z][i], chem -> chem_prop[CHEM_Z][i]); if (chem -> cutoffs[i][i] == 0.0) { chem -> cutoffs[i][i] = 2.0*chem -> chem_prop[CHEM_R][i]; chem -> cutoffs[i][i] = max(MINCUT, chem -> cutoffs[i][i]); if (chem -> chem_prop[CHEM_Z][i] == 1.0) chem -> cutoffs[i][i] = 0.5; } } for (i = 0; i < species-1; i++) { for (j = i+1; j < species; j++) { chem -> cutoffs[i][j] = (chem -> cutoffs[i][j] != 0.0) ? chem -> cutoffs[i][j] : get_cutoff (chem -> chem_prop[CHEM_Z][i], chem -> chem_prop[CHEM_Z][j]); if (chem -> cutoffs[i][j] == 0.0) { chem -> cutoffs[i][j] = chem -> chem_prop[CHEM_R][i] + chem -> chem_prop[CHEM_R][j]; chem -> cutoffs[i][j] = max(MINCUT, chem -> cutoffs[i][j]); if (chem -> chem_prop[CHEM_Z][i] == 1.0 && chem -> chem_prop[CHEM_Z][j] == 6.0) chem -> cutoffs[i][j] = 1.2; if (chem -> chem_prop[CHEM_Z][j] == 1.0 && chem -> chem_prop[CHEM_Z][i] == 6.0) chem -> cutoffs[j][i] = 1.2; if (chem -> chem_prop[CHEM_Z][i] == 1.0 && chem -> chem_prop[CHEM_Z][j] == 8.0) chem -> cutoffs[i][j] = 1.2; if (chem -> chem_prop[CHEM_Z][j] == 1.0 && chem -> chem_prop[CHEM_Z][i] == 8.0) chem -> cutoffs[j][i] = 1.2; } chem -> cutoffs[j][i] = chem -> cutoffs[i][j]; } } chem -> grtotcutoff = (chem -> grtotcutoff != 0.0) ? chem -> grtotcutoff : default_totcut; if (chem -> grtotcutoff == 0.0) { for (i = 0; i < species; i++) { chem -> grtotcutoff += chem -> chem_prop[CHEM_R][i]; } chem -> grtotcutoff *= 2.0; chem -> grtotcutoff /= species; chem -> grtotcutoff = max(MINCUT, chem -> grtotcutoff); } } /*! \fn void cutoffsend () \brief send cutoffs to Fortran90 */ void cutoffsend () { int i, j; if (active_chem -> cutoffs == NULL) { active_chem -> cutoffs = allocddouble (active_project -> nspec, active_project -> nspec); } for ( i=0; i < active_project -> nspec; i++) { for (j=0; j < active_project -> nspec; j++) { // g_debug ("cut[%d,%d]= %f", i+1, j+1, active_chem -> cutoffs[i][j]); sendcuts_ (& i, & j, & active_chem -> cutoffs[i][j]); } } i = active_project -> nspec; // g_debug ("totcut= %f", active_chem -> grtotcutoff); sendcuts_ (& i, & i, & active_chem -> grtotcutoff); } /*! \fn void prep_ogl_bonds () \brief initialize bond pointers */ void prep_ogl_bonds () { int i; active_glwin -> bonding = FALSE; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i color_styles[i], 0); } for (i=1; i ogl_coord[i], 0); } #endif active_image -> color_map[0] = 0; active_image -> color_map[1] = 0; for (i=0; i<2; i++) { if (active_glwin -> gcid[i]) g_free (active_glwin -> gcid[i]); active_glwin -> gcid[i] = NULL; active_coord -> totcoord[i] = 0; } if (! active_project -> dmtx) { active_glwin -> allbonds[0] = 0; active_glwin -> allbonds[1] = 0; } if (frag_update) { if (active_glwin -> gcid[2]) g_free (active_glwin -> gcid[2]); active_glwin -> gcid[2] = NULL; active_coord -> totcoord[2] = 0; active_glwin -> adv_bonding[0] = FALSE; } if (mol_update) { if (active_glwin -> gcid[3]) g_free (active_glwin -> gcid[3]); active_glwin -> gcid[3] = NULL; active_coord -> totcoord[3] = 0; active_glwin -> adv_bonding[1] = FALSE; } } /*! \fn gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) \brief compute distance matrix \param widg the GtkWidget sending the signal, if any \param calc the calculation that requires the analysis \param up_ngb update neighbors information (0 = no, 1 = yes) */ gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) { int i, j, k; gboolean res; if (up_ngb) { for (i=0; i < active_project -> steps; i++) { for (j=0; j < active_project -> natomes; j++) { active_project -> atoms[i][j].cloned = FALSE; if (active_project -> atoms[i][j].numv) { active_project -> atoms[i][j].numv = 0; if (active_project -> atoms[i][j].vois) { g_free (active_project -> atoms[i][j].vois); active_project -> atoms[i][j].vois = NULL; } } } } } i = j = 0; k = up_ngb;; if (calc > 3 && calc < 6) i = 1; if (calc > 0 && calc < 6) { j = active_project -> rsparam[calc-1][4]; } else if (calc == 6) { j = active_project -> csparam[3]; } #ifdef DEBUG g_debug ("Run dmtx Prim= %d, NOHP= %d, UPDATE= %d", i, j, k); #endif clock_gettime (CLOCK_MONOTONIC, & start_time); res = rundmtx_ (& i, & j, & k); clock_gettime (CLOCK_MONOTONIC, & stop_time); // #ifdef DEBUG g_print ("Time to calculate distance matrix: %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); // #endif return res; } /*! \fn void update_ang_view (project * this_proj) \brief update angle calculation text buffer \param this_proj the target project */ void update_ang_view (project * this_proj) { gchar * str; if (this_proj -> analysis[ANG] -> calc_buffer == NULL) this_proj -> analysis[ANG] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\n\nAngles and diherdrals distribution(s)\n\n"), "heading", this_proj -> analysis[ANG] -> calc_buffer); print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\tAngular space discretization:\n\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\t - Number of δ° steps: "), "bold", this_proj -> analysis[ANG] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[ANG] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[ANG] -> calc_buffer); g_free (str); print_info (_("\n\n\t between 0.0 and 180.0"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (" °\n\n\t - δ° = ", "bold", this_proj -> analysis[ANG] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[ANG] -> delta); print_info (str, "bold_blue", this_proj -> analysis[ANG] -> calc_buffer); g_free (str); print_info (" °\n", "bold", this_proj -> analysis[ANG] -> calc_buffer); print_info (calculation_time(TRUE, this_proj -> analysis[ANG] -> calc_time), NULL, this_proj -> analysis[ANG] -> calc_buffer); } /*! \fn void update_glwin_after_bonds (int bonding, int * colm) \brief update glwin menus after bond calculation \param bonding calculation result (0 = failure, 1 = success) \param colm saved color map to restore */ void update_glwin_after_bonds (int bonding, int * colm) { active_glwin -> bonding = bonding; #ifdef GTK3 // GTK3 Menu Action To Check if (active_glwin -> init) { prep_all_coord_menus (active_glwin); set_advanced_bonding_menus (active_glwin); widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); } #endif int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, active_project); active_glwin -> create_shaders[MEASU] = TRUE; active_glwin -> create_shaders[PICKS] = TRUE; clean_coord_window (active_project); if (active_glwin -> init) { restore_color_map (active_glwin, colm); g_free (colm); } int i, j; for (i=2; i<7; i++) { if (i != 5) { if (active_glwin -> search_widg[i]) { if (active_glwin -> search_widg[i] -> filter_box) { if (GTK_IS_WIDGET(active_glwin -> search_widg[i] -> filter_box)) { if (active_glwin -> atom_win -> adv_bonding[1] && ! active_glwin -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *) active_glwin -> search_widg[i] -> filter_box, 4); } else if (! active_glwin -> atom_win -> adv_bonding[0] && active_glwin -> adv_bonding[0]) { combo_text_append (active_glwin -> search_widg[i] -> filter_box, _("Fragment")); } if (active_glwin -> atom_win -> adv_bonding[0] && ! active_glwin -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *) active_glwin -> search_widg[i] -> filter_box, 3); } else if (! active_glwin -> atom_win -> adv_bonding[1] && active_glwin -> adv_bonding[1]) { combo_text_append (active_glwin -> search_widg[i] -> filter_box, _("Molecule")); } j = active_glwin -> search_widg[i] -> object + active_glwin -> search_widg[i] -> filter; if (j == 4) { set_filter_changed (GTK_COMBO_BOX(active_glwin -> search_widg[i] -> filter_box), active_glwin -> search_widg[i]); } } } } } } if (active_glwin -> atom_win) { for (i=0; i<2; i++) active_glwin -> atom_win -> adv_bonding[i] = active_glwin -> adv_bonding[i]; } clean_volumes_data (active_glwin); #ifdef GTK4 update_menu_bar (active_glwin); #endif update (active_glwin); } /*! \fn int update_voisj_and_contj () \brief update FORTRAN CONTJ and VOISJ for the active project */ int update_voisj_and_contj () { int i, j, k; if (! alloc_contj_voisj_ (& active_project -> natomes, & active_project -> steps)) return 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { read_contj_ (& j, & i, & active_project -> atoms[i][j].numv); for (k=0; k atoms[i][j].numv; k++) { read_voisj_ (& j, & i, & k, & active_project -> atoms[i][j].vois[k]); } } } return 1; } /*! \fn G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) \brief compute bonding properties \param widg the GtkWidget sending the signal, if any \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) { int j, k, l, m; int statusb = 0; int bonding = 0; int err_update = 1; int * colm = NULL; // intitialize_this_analysis (active_project, BND); gboolean vis_bd = active_project -> analysis[BND] -> calc_ok; if (widg) bonds_update = 1; bonding = (active_project -> runc[0]) ? 1 : 0; if (! bonds_update && active_project -> runc[0]) bonding = 0; if (active_glwin) { if (active_glwin -> init) colm = save_color_map (active_glwin); prep_ogl_bonds (); } cutoffsend (); if (! active_project -> dmtx) { active_project -> dmtx = run_distance_matrix (widg, 0, 1); } else { err_update = update_voisj_and_contj (); } if (! active_project -> dmtx) { show_error (_("The nearest neighbors table calculation has failed"), 0, (widg) ? widg : MainWindow); bonding = 0; active_glwin -> adv_bonding[0] = 0; active_glwin -> adv_bonding[1] = 0; } else if (! err_update) { show_error (_("Impossible to update FORTRAN data"), 0, (widg) ? widg : MainWindow); bonding = 0; active_glwin -> adv_bonding[0] = 0; active_glwin -> adv_bonding[1] = 0; } else { //if (bonding && active_project -> steps > 1) statusb = 1; if (bonds_update || active_project -> runc[0] || active_project -> runc[2]) { if (! active_project -> analysis[BND] -> init_ok && bonding) init_bond (active_project); if (active_project -> runc[0]) clean_curves_data (BND, 0, active_project -> analysis[BND] -> numc); prepostcalc (widg, FALSE, BND, statusb, opac); l = 0; m = 1; if (active_project -> bondfile != NULL) { l = 1; m = strlen (active_project -> bondfile); } // debug_chemical_information (active_project); active_project -> analysis[BND] -> delta = (active_project -> analysis[BND] -> max-active_project -> analysis[BND] -> min) / active_project -> analysis[BND] -> num_delta; j = bonding_ (& m, & l, & bonding, & active_project -> analysis[BND] -> num_delta, & active_project -> analysis[BND] -> min, & active_project -> analysis[BND] -> delta, active_project -> bondfile); prepostcalc (widg, bonding, BND, (bonding) ? j : vis_bd, 1.0); active_project -> analysis[SPH] -> avail_ok = j; if (! j) { show_error (_("Unexpected error when calculating bond properties"), 0, (widg) ? widg : MainWindow); } else { if (active_glwin -> init && ! atomes_render_image) print_info (calculation_time(TRUE, active_project -> analysis[BND] -> calc_time), NULL, active_project -> analysis[BND] -> calc_buffer); bonding = 1; if (frag_update) { k = active_glwin -> allbonds[0] + active_glwin -> allbonds[1]; clock_gettime (CLOCK_MONOTONIC, & start_time); if (! molecules_ (& mol_update, & k)) { show_error (_("Unexpected error when looking for isolated fragment(s) and molecule(s)"), 0, (widg) ? widg : MainWindow); if (active_glwin) { for (k=0; k<2; k++) { active_glwin -> adv_bonding[k] = FALSE; if (k) { for (l=0; l<2; l++) { if (active_project -> force_field[l]) { g_free (active_project -> force_field[l]); active_project -> force_field[l] = NULL; } } } active_coord -> totcoord[k+2] = 0; } } } else { if (active_glwin) { active_glwin -> adv_bonding[0] = frag_update; active_glwin -> adv_bonding[1] = mol_update; } } clock_gettime (CLOCK_MONOTONIC, & stop_time); // Using the unused RI calc_time slot to store Frag-mol calc time. active_project -> analysis[RIN] -> calc_time = get_calc_time (start_time, stop_time); active_project_changed (activep); if (widg != NULL && ! atomes_render_image) show_the_widgets (curvetoolbox); } } } if (active_project -> runc[1]) { if (! active_project -> analysis[ANG] -> init_ok) init_ang (active_project); clean_curves_data (ANG, 0, active_project -> analysis[ANG] -> numc); active_project ->analysis[ANG] -> delta = 180.0 / active_project -> analysis[ANG] -> num_delta; j = bond_angles_ (& active_project -> analysis[ANG] -> num_delta); if (! j) { prepostcalc (widg, TRUE, ANG, j, 1.0); show_error (_("Unexpected error when calculating the bond angles distribution"), 0, (widg) ? widg : MainWindow); } else { j = bond_diedrals_ (& active_project -> analysis[ANG] -> num_delta); prepostcalc (widg, TRUE, ANG, j, 1.0); if (! j) { show_error (_("Unexpected error when calculating the dihedral angles distribution"), 0, (widg) ? widg : MainWindow); } else { if (widg != NULL && ! atomes_render_image) show_the_widgets (curvetoolbox); if (! active_project -> runc[0]) update_ang_view (active_project); } } } } if (active_glwin && bonds_update) update_glwin_after_bonds (bonding, colm); if (! atomes_render_image) { fill_tool_model (); if (widg) show_the_widgets (curvetoolbox); } if (! widg) { for (j=0; j<3; j++) active_project -> runc[j] = FALSE; } free_contj_voisj_ (); bonds_update = frag_update = mol_update = 0; } double bdtc; /*! \fn void coordination_info (int sp, double sac, double ssac[active_project->nspec]) \brief print out coordination information \param sp the target chemical species \param sac total coordination number for the target species \param ssac partial coordination number(s) for the target species */ void coordination_info (int sp, double sac, double ssac[active_project -> nspec]) { int j; gchar * str; gchar * spr; if (active_project -> analysis[BND] -> calc_buffer == NULL) active_project -> analysis[BND] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (active_project -> analysis[BND] -> calc_buffer); if (sp == 0) { print_info (_("\n\nBond properties\n\n"), "heading", active_project -> analysis[BND] -> calc_buffer); print_info (_("Existence of a bond between 2 atoms i (α) and j (β)\n"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (_("if the 2 following conditions are verified:\n\n\t1) D"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("ij", "sub_italic", active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf (_(" < first minimum of the total g(r) (%9.5f Ã… )\n\t2) D"), active_chem -> grtotcutoff); print_info (str, "italic", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("ij", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info (" < r", "italic", active_project -> analysis[BND] -> calc_buffer); print_info (_("cut"), "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info ("(α,β)\n", "italic", active_project -> analysis[BND] -> calc_buffer); bdtc = sac * active_chem -> nsps[sp]; } else { bdtc += sac * active_chem -> nsps[sp]; } print_info (_("\nCoordination numbers: "), "italic", active_project -> analysis[BND] -> calc_buffer); spr = g_strdup_printf("%s", textcolor(sp)); print_info (active_chem -> element[sp], spr, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("\n\n\t%s", exact_name(active_chem -> label[sp])); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (_(" (total)=\t"), "italic", active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%9.5lf\n", sac); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); for ( j=0 ; j < active_project -> nspec ; j++ ) { str = g_strdup_printf ("\t%s(", active_chem -> label[sp]); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (str); str = g_strdup_printf("%s", textcolor(j)); print_info (active_chem -> label[j], str, active_project -> analysis[BND] -> calc_buffer); print_info (")", spr, active_project -> analysis[BND] -> calc_buffer); print_info ("[r", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (_("cut"), "sub", active_project -> analysis[BND] -> calc_buffer); print_info ("(", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (active_chem -> label[sp], spr, active_project -> analysis[BND] -> calc_buffer); print_info (",", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (active_chem -> label[j], str, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (")= ", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%9.5lf Ã…", active_chem -> cutoffs[sp][j]); print_info (str, NULL, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("] = ", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%9.5lf", ssac[j]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); if (sac != 0.0) { str = g_strdup_printf ("%7.3lf", ssac[j]*100.0/(sac)); } else { str = g_strdup_printf ("%7.3lf", 0.0); } print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (" %\n", NULL, active_project -> analysis[BND] -> calc_buffer); } g_free (spr); if (sp == active_project -> nspec-1) { print_info (_("\nAverage coordination number: "), "italic", active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%9.5lf\n", bdtc / active_project -> natomes); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } } /*! \fn void coordout_ (int * sid, double * sac, double ssac[active_project->nspec], int * totgsa) \brief retrieve partial geometry information from Fortran90 \param sid the target chemical species \param sac total coordination number for the target species \param ssac partial coordination number(s) for the target species \param totgsa the total number of partial coordination for the target chemical species */ void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa) { active_coord -> ntg[1][* sid] = * totgsa; if (bonds_update && ! atomes_render_image) coordination_info (* sid, * sac, ssac); } /*! \fn void warren_cowley_out_ (int * spa, double ssac[active_project -> nspec]) \brief compute Warren-Cowley and Cargill-Spaepen chemical order parameters for binary systems \param spa the target species \param ssac partial coordination number(s) for the target species */ void warren_cowley_out_ (int * spa, double ssac[active_project -> nspec]) { gchar * str; int id_a = * spa; int id_b = ! id_a; double x_b = ((double)active_chem -> nsps[id_b]) / active_project -> natomes; double p_ab = ssac[id_b] / (ssac[0] + ssac[1]); // Warren-Cowley for binary A x B 1-x systems if (! id_a) { print_info (_("\nWarren-Cowley chemical order parameters for A"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info ("B", "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("1-x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info (_(" binary systems:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); } print_info ("\tα", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("l", "sub", active_project -> analysis[BND] -> calc_buffer); print_info ("[", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%s", textcolor(id_a)); print_info (active_chem -> label[id_a], str, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("]=\t", NULL, active_project -> analysis[BND] -> calc_buffer); double wc_ab = 1.0 - p_ab / x_b; str = g_strdup_printf ("%f\n", wc_ab); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } /*! \fn void cargill_spaepen_out_ (int * spa, double ssac[active_project -> nspec]) \brief compute Cargill-Spaepen chemical order parameters for binary systems \param spa the target species \param ssac partial coordination number(s) for the target species */ void cargill_spaepen_out_ (int * spa, double ssac[active_project -> nspec]) { gchar * str; int id_a = * spa; int id_b = ! id_a; double x_a = ((double)active_chem -> nsps[id_a]) / active_project -> natomes; double x_b = ((double)active_chem -> nsps[id_b]) / active_project -> natomes; double p_ab = ssac[id_b] / (ssac[0] + ssac[1]); // Cargill-Spaepen for metal alloys, also A x B 1-x systems if (! id_a) { print_info (_("\nCargill-Spaepen chemical order parameters for A"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info ("B", "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("1-x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info (_(" binary systems:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); } print_info ("\tη", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("[", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%s", textcolor(id_a)); print_info (active_chem -> label[id_a], str, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("]=\t", NULL, active_project -> analysis[BND] -> calc_buffer); double cs_ab = (p_ab - x_b) / x_a; str = g_strdup_printf ("%f\n", cs_ab); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } /*! \fn void env_info (int sp, int totgsa, int numgsa[totgsa]) \brief output environment information for target chemical species in text buffer \param sp the target chemcial species \param totgsa the total number of partial coordination(s) \param numgsa the number of coordination(s) by coordination type */ void env_info (int sp, int totgsa, int numgsa[totgsa]) { int i, j, k; int natpg[totgsa]; gchar * env; gchar * str, * spr, * snr; int tgsa; print_info (_("\nEnvironments for "), "italic", active_project -> analysis[BND] -> calc_buffer); spr = g_strdup_printf ("%s", textcolor(sp)); str = g_strdup_printf ("%s", exact_name(active_chem -> label[sp])); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (spr); g_free (str); print_info (_(" atoms:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (_("\t \tN(tot)"), NULL, active_project -> analysis[BND] -> calc_buffer); for ( j=0 ; j < active_project -> nspec ; j++ ) { snr = g_strdup_printf ("%s", exact_name(active_chem -> label[j])); i = 6 - strlen (snr); for (k=0; k analysis[BND] -> calc_buffer); str = g_strdup_printf ("N(%s)", snr); spr = g_strdup_printf ("%s", textcolor(j)); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (spr); g_free (str); g_free (snr); } print_info (_("\tNumber\t\t or \tPercent\n\n"), NULL, active_project -> analysis[BND] -> calc_buffer); tgsa = 0; for ( i=0 ; i < totgsa; i++ ) { tgsa += numgsa[i]; } for ( i=0 ; i < totgsa; i++ ) { natpg[i] = 0; for ( j=0 ; j < active_project -> nspec ; j++ ) { k = active_coord -> partial_geo[sp][i][j]; natpg[i] += k; } print_info ("\t", NULL, active_project -> analysis[BND] -> calc_buffer); spr = env_name (active_project, i, sp, 1, active_project -> analysis[BND] -> calc_buffer); g_free (spr); env = env_name (active_project, i, sp, 0, NULL); spr = g_strdup_printf ("%s", exact_name(env)); g_free (env); k = 12 - strlen (spr); g_free (spr); for (j=0; j analysis[BND] -> calc_buffer); print_info ("\t", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%3d ", natpg[i]); print_info (str, NULL, active_project -> analysis[BND] -> calc_buffer); for ( j=0 ; j < active_project -> nspec ; j++ ) { k = active_coord -> partial_geo[sp][i][j]; str = g_strdup_printf(" %7d", k); spr = g_strdup_printf ("%s", textcolor(j)); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (str); g_free (spr); } str = g_strdup_printf(" %16.5lf", (1.0*numgsa[i])/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%7.3lf ", 100.0*numgsa[i]/tgsa); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("%\n", "bold", active_project -> analysis[BND] -> calc_buffer); } } /*! \fn void update_angle_view (project * this_proj) \brief update angle calculation information text buffer \param this_proj the target project */ void update_angle_view (project * this_proj) { gchar * str; if (this_proj -> analysis[ANG] -> calc_buffer == NULL) this_proj -> analysis[ANG] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\n\nAngle distribution function(s)\n\n"), "heading", this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\tAngle space discretization:\n\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\t - Number of δ° steps: "), "bold", this_proj -> analysis[ANG] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[ANG] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[ANG] -> calc_buffer); g_free (str); print_info (_("\n\n\t between 0.0 and 180.0°\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); } /*! \fn void envout_ (int * sid, int * totgsa, int numgsa[*totgsa]) \brief retrieve environment information for target chemical species from Fortran \param sid the target chemical speceis \param totgsa the total number of partial coordination(s) \param numgsa the number of coordination(s) by coordination type */ void envout_ (int * sid, int * totgsa, int numgsa[* totgsa]) { /* Send info for OpenGL */ if (bonds_update && ! atomes_render_image) env_info (* sid, * totgsa, numgsa); } void tetraout_ (int * sid, double eda[active_project -> nspec], double cda[active_project -> nspec], double dda[active_project -> nspec], double tepa[active_project -> nspec], double tcpa[active_project -> nspec], double tdda[active_project -> nspec], double atd[active_project -> nspec], double etd[active_project -> nspec]) { int i; gboolean print; gchar * str; print=FALSE; for ( i=0 ; i < active_project -> nspec ; i++) { if (eda[i] != 0.0 || cda[i] != 0.0) print=TRUE; } if (print && bonds_update && ! atomes_render_image) { print_info (_("\nNumber and proportion of tetrahedra links for "), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info (_(" atoms:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); for ( i=0 ; i < active_project -> nspec ; i++ ) { if (eda[i] != 0.0 || cda[i] != 0.0) { print_info ("\t- ", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info ("(", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[i]), textcolor(i), active_project -> analysis[BND] -> calc_buffer); print_info (")", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("4", "sub", active_project -> analysis[BND] -> calc_buffer); print_info (_(" tetrahedra:\n"), NULL, active_project -> analysis[BND] -> calc_buffer); if (eda[i] != 0.0) { print_info (_("\t\t Edge-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", eda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tepa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100*eda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tepa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } if (cda[i] != 0.0) { print_info (_("\t\t Corner-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", cda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tcpa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100*cda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tcpa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } if (dda[i] != 0.0) { print_info (_("\t\t with the following bond defects: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", dda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tdda[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100*dda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tdda[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } } } print_info (_("\nNumber and proportion of tetrahedra units for "), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info (_(" atoms:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); for ( i=0 ; i < active_project -> nspec ; i++ ) { if (atd[i] != 0.0) { print_info ("\t- ", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info ("(", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[i]), textcolor(i), active_project -> analysis[BND] -> calc_buffer); print_info (")", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("4", "sub", active_project -> analysis[BND] -> calc_buffer); print_info (_(" tetrahedra:\n"), NULL, active_project -> analysis[BND] -> calc_buffer); print_info (_("\t\t Total number of tetrahedra:"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", atd[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", etd[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info ("\n", "bold", active_project -> analysis[BND] -> calc_buffer); if (eda[i] != 0.0 ) { print_info (_("\t\t Edge-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", 2.0*eda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", 2.0*tepa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 2.0*100*eda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 2.0*100*tepa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } if (cda[i] != 0.0 ) { print_info (_("\t\t Corner-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", (atd[i]-2*eda[i])/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", 2.0*tepa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100.0*(atd[i]-2.0*eda[i])/atd[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 2.0*100.0*tepa[i]*active_project -> steps/atd[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } } } } } atomes_1.3.1/src/gui/initc.c0000664000175000017500000003154415212624223015341 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initc.c * @short Curve data buffer initialization * @author Sébastien Le Roux */ /* * This file: 'initc.c' * * Contains: * - Curve data buffer initialization * * List of functions: void clean_curves_data (int calc, int start, int end); void alloc_curves (int rid); void initcwidgets (); void prepostcalc (GtkWidget * widg, gboolean status, int run, int adv, double opc); void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); void init_atomes_analysis (project * this_proj, gboolean apply_defaults); void initialize_this_analysis (project * this_proj, int ana); atomes_analysis * setup_analysis (gchar * name, int analysis, gboolean req_md, gboolean graph, int num_curves, int n_compat, int * compat, gchar * x_title); */ #include "global.h" #include "callbacks.h" #include "project.h" extern void clean_this_curve_window (int cid, int rid); extern void apply_analysis_default_parameters_to_project (project * this_proj); /*! \fn void clean_curves_data (int calc, int start, int end) \brief clean curve data on a range of curve id \param calc the calculation \param start the starting value \param end the ending value */ void clean_curves_data (int calc, int start, int end) { int i; if (active_project -> analysis[calc]) { if (active_project -> analysis[calc] -> curves) { for (i=start; i -1) active_project -> analysis[run] -> calc_ok = adv; if (! status) { clock_gettime (CLOCK_MONOTONIC, & start_time); #ifdef GTK3 if (widg != NULL) gdk_window_set_opacity (gtk_widget_get_window(widg), opc); #endif /* if (adv) { // bar[run] mess = g_strdup_printf (_("Please wait calculation in progress")); pop = show_popup (mess, widg); g_free (mess); mess = g_strdup_printf (_("Computing")); //statusval = gtk_statusbar_push (statusbar, run, mess); g_free (mess); show_the_widgets (pop); }*/ } else { if (adv && run > -1) { //gtk_statusbar_remove (statusbar, run, statusval); //destroy_this_widget(pop); } if (run > -1) { clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> analysis[run] -> calc_time = get_calc_time (start_time, stop_time); } #ifdef GTK3 if (widg != NULL) gdk_window_set_opacity (gtk_widget_get_window(widg), opc); #endif } } /*! \fn void alloc_analysis_curves (int pid, atomes_analysis * this_analysis) \brief allocating analysis curve data \param pid the project id \param this_analysis the target atomes_analysis pointer */ void alloc_analysis_curves (int pid, atomes_analysis * this_analysis) { int i; if (this_analysis -> idcc != NULL) { g_free (this_analysis -> idcc); this_analysis -> idcc = NULL; } this_analysis -> idcc = g_malloc0(this_analysis -> numc*sizeof*this_analysis -> idcc); for (i = 0; i < this_analysis -> numc; i++) { this_analysis -> idcc[i].a = pid; this_analysis -> idcc[i].b = this_analysis -> aid; this_analysis -> idcc[i].c = i; } if (this_analysis -> curves != NULL) { g_free (this_analysis -> curves); this_analysis -> curves = NULL; } this_analysis -> curves = g_malloc0(this_analysis -> numc*sizeof*this_analysis -> curves); for (i = 0; i < this_analysis -> numc; i++) { this_analysis -> curves[i] = g_malloc0(sizeof*this_analysis -> curves[i]); } } /*! \fn atomes_analysis * setup_analysis (int pid, gchar * name, int analysis, gboolean req_md, gboolean graph, int num_curves, int n_compat, int * compat, gchar * x_title) \brief allocate atomes_analysis data structure \param pid the project id \param name analysis name \param analysis analysis ID \param req_md requires MD trajectory (1/0) \param graph curves as output or not (1/0) \param num_curves number of curves to be produced for this analysis \param n_compat number of compatible analysis \param compat list of compatible analysis \param x_title default title for x axis for graphs */ atomes_analysis * setup_analysis (int pid, gchar * name, int analysis, gboolean req_md, gboolean graph, int num_curves, int n_compat, int * compat, gchar * x_title) { atomes_analysis * new_analysis = g_malloc0(sizeof*new_analysis); new_analysis -> name = g_strdup_printf ("%s", name); new_analysis -> aid = analysis; new_analysis -> requires_md = req_md; new_analysis -> graph_res = graph; if (graph) { new_analysis -> c_sets = n_compat; new_analysis -> compat_id = duplicate_int (n_compat, compat); if (num_curves) { new_analysis -> numc = num_curves; alloc_analysis_curves (pid, new_analysis); } if (x_title) new_analysis -> x_title = g_strdup_printf ("%s", x_title); } return new_analysis; } /* From global.h: #define NCALCS 11 -> but 10 #define GDR 0 #define SQD 1 #define SKD 2 #define GDK 3 #define BND 4 #define ANG 5 #define RIN 6 #define CHA 7 #define SPH 8 #define MSD 9 #define SKT 10 */ /*! \fn void init_atomes_analysis (project * this_proj, gboolean apply_defaults) \brief initialize analysis data structures for atomes \param this_proj the target project \param apply_defaults apply default parameters (1/0) */ void init_atomes_analysis (project * this_proj, gboolean apply_defaults) { int i = this_proj -> nspec; int pid = this_proj -> id; /* Compatible analysis: - always include self first, and others if required - x axis must be similar or allow comparison (ex: distance) */ int * comp_list; this_proj -> analysis = g_malloc0(NCALCS*sizeof*this_proj -> analysis); // g(r) comp_list = allocint (2); comp_list[0] = GDR; comp_list[1] = GDK; this_proj -> analysis[GDR] = setup_analysis (pid, "g(r)/G(r)", GDR, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Ã…]"); // g(r) FFT - same compatibility list this_proj -> analysis[GDK] = setup_analysis (pid, _("g(r)/G(r) from FFT[S(q)]"), GDK, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Ã…]"); // s(q) comp_list[0] = SQD; comp_list[1] = SKD; this_proj -> analysis[SQD] = setup_analysis (pid, _("S(q) from FFT[g(r)]"), SQD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Ã…-1]"); // s(k) - same compatibility list this_proj -> analysis[SKD] = setup_analysis (pid, _("S(q) from Debye Equation"), SKD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Ã…-1]"); g_free (comp_list); comp_list = allocint (1); // Bond length distribution(s) comp_list[0] = BND; this_proj -> analysis[BND] = setup_analysis (pid, _("Bond Properties"), BND, FALSE, TRUE, i*i, 1, comp_list, "Dij [Ã…]"); // Angle distribution(s) comp_list[0] = ANG; this_proj -> analysis[ANG] = setup_analysis (pid, _("Angle Distributions"), ANG, FALSE, TRUE, i*i*i + i*i*i*i, 1, comp_list, "θ [°]"); // Ring statistic(s) comp_list[0] = RIN; this_proj -> analysis[RIN] = setup_analysis (pid, _("Ring Statistics"), RIN, FALSE, TRUE, 20*(i+1), 1, comp_list, _("Size n of the ring [total number of nodes]")); // Chain statistic(s) comp_list[0] = CHA; this_proj -> analysis[CHA] = setup_analysis (pid, _("Chain Statistics"), CHA, FALSE, TRUE, i+1, 1, comp_list, _("Size n of the chain [total number of nodes]")); // Spherical harmonic(s) comp_list[0] = SPH; this_proj -> analysis[SPH] = setup_analysis (pid, _("Spherical Harmonics"), SPH, FALSE, TRUE, 0, 1, comp_list, "Ql"); if (this_proj -> steps > 1) { // Mean square displacement comp_list[0] = MSD; this_proj -> analysis[MSD] = setup_analysis (pid, _("Mean Squared Displacement"), MSD, TRUE, TRUE, 14*i+6, 1, comp_list, NULL); // Dynamic structure factor // Number of graphs depends on the number of correlation states, not appearing here comp_list[0] = SKT; // this_proj -> analysis[SKT] = setup_analysis (pid, _("Dynamic Structure Factor"), SKT, TRUE, TRUE, 0, 1, comp_list, NULL); } g_free (comp_list); if (apply_defaults) apply_analysis_default_parameters_to_project (this_proj); } /*! \fn void initialize_this_analysis (project * this_proj, int ana) \brief initialize an analysis data structure for atomes \param this_proj the target project data structure \param ana the target analysis */ void initialize_this_analysis (project * this_proj, int ana) { int i = this_proj -> nspec; int * comp_list; if (! this_proj -> analysis) { this_proj -> analysis = g_malloc0(NCALCS*sizeof*this_proj -> analysis); } switch (ana) { case GDR: // g(r) comp_list = allocint (2); comp_list[0] = GDR; comp_list[1] = GDK; this_proj -> analysis[GDR] = setup_analysis (this_proj -> id, "g(r)/G(r)", GDR, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Ã…]"); break; case SQD: // S(q) comp_list = allocint (2); comp_list[0] = SQD; comp_list[1] = SKD; this_proj -> analysis[SQD] = setup_analysis (this_proj -> id, _("S(q) from FFT[g(r)]"), SQD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Ã…-1]"); break; case SKD: // S(k) comp_list = allocint (2); comp_list[0] = SQD; comp_list[1] = SKD; this_proj -> analysis[SKD] = setup_analysis (this_proj -> id, _("S(q) from Debye Equation"), SKD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Ã…-1]"); break; case GDK: // g(r) FFT S(q) comp_list = allocint (2); comp_list[0] = GDR; comp_list[1] = GDK; this_proj -> analysis[GDK] = setup_analysis (this_proj -> id, _("g(r)/G(r) from FFT[S(q)]"), GDK, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Ã…]"); break; case BND: // Bond length distribution(s) comp_list = allocint (1); comp_list[0] = BND; this_proj -> analysis[BND] = setup_analysis (this_proj -> id, _("Bond Properties"), BND, FALSE, TRUE, i*i, 1, comp_list, "Dij [Ã…]"); break; case ANG: // Angle distribution(s) comp_list = allocint (1); comp_list[0] = ANG; this_proj -> analysis[ANG] = setup_analysis (this_proj -> id, _("Angle Distributions"), ANG, FALSE, TRUE, i*i*i + i*i*i*i, 1, comp_list, "θ [°]"); break; case RIN: // Ring statistics comp_list = allocint (1); comp_list[0] = RIN; this_proj -> analysis[RIN] = setup_analysis (this_proj -> id, _("Ring Statistics"), RIN, FALSE, TRUE, 20*(i+1), 1, comp_list, _("Size n of the ring [total number of nodes]")); break; case CHA: // Chain statistics comp_list = allocint (1); comp_list[0] = CHA; this_proj -> analysis[CHA] = setup_analysis (this_proj -> id, _("Chain Statistics"), CHA, FALSE, TRUE, i+1, 1, comp_list, _("Size n of the chain [total number of nodes]")); break; case SPH: // Spherical harmonics as order parameters comp_list = allocint (1); comp_list[0] = SPH; this_proj -> analysis[SPH] = setup_analysis (this_proj -> id, _("Spherical Harmonics"), SPH, FALSE, TRUE, 0, 1, comp_list, "Ql"); break; case MSD: // Mean square displacement comp_list = allocint (1); comp_list[0] = MSD; if (this_proj -> steps > 1) this_proj -> analysis[MSD] = setup_analysis (this_proj -> id, _("Mean Squared Displacement"), MSD, TRUE, TRUE, 14*i+6, 1, comp_list, NULL); break; case SKT: comp_list = allocint (1); comp_list[0] = SKT; // Total number of graphs depends on the number of correlation states, not appearing here // if (this_proj -> steps > 1) this_proj -> analysis[SKT] = setup_analysis (this_proj -> id, _("Dynamic Structure Factor"), SKT, TRUE, TRUE, 0, 2, comp_list, NULL); break; } g_free (comp_list); } atomes_1.3.1/src/gui/edit_menu.c0000664000175000017500000006620415212624223016205 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file edit_menu.c * @short Creation of the edition dialogs * @author Sébastien Le Roux */ /* * This file: 'edit_menu.c' * * Contains: * - The creation of the edition dialogs * * List of functions: gboolean test_vol (double box[2][3], double vect[3][3]); gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]); gboolean has_box_changed (); gboolean have_vectors_changed (); gboolean test_cutoffs (); void edit_box (GtkWidget * vbox); void edit_chem (GtkWidget * vbox); void init_box_calc (); void prep_box (int id); void test_chem (); void edit_bonds (GtkWidget * vbox); G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data); G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data); G_MODULE_EXPORT void on_rad_changed (GtkComboBox * combo, gpointer data); G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glwindow.h" #include "preferences.h" char * box_p[2]={i18n("Edges [Å]"), i18n("Angles [°]")}; char * box_prop[2][3]={{"a", "b", "c"}, {"alpha - α", "beta - β", "gamma - ɣ"}}; char * edit_prop[4]={i18n("Chemistry and physics"), i18n("Box and periodicity"), i18n("Bond cutoffs"), i18n("Lattice vectors")}; char * vect_name[3]={"a", "b", "c"}; char * vect_comp[3]={"x", "y", "z"}; GtkWidget * frac_box; GtkWidget * spec_box; GtkWidget * rad_box; GtkWidget * chem_spec[2]; GtkWidget * chem_entry[CHEM_PARAMS-1]; GtkWidget * vect_entry[9]; double * tmp_chem[CHEM_PARAMS]; double tmp_lattice[2][3]; double tmp_vect[3][3]; int tmp_pbc, tmp_frac; int tmp_xcor, tmp_lat; dint t_box[9]; extern double * tmpcut; extern void update_cutoffs (project * this_proj); extern void cut_box (project * this_proj, GtkWidget * vbox); /*! \fn G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) \brief update lattice parameters \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) { dint * id = (dint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v >= 0.0) { tmp_lattice[id -> a][id -> b] = v; } update_entry_double (entry, v); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) \brief use PBC ? \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) \brief use PBC ? \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) #endif { tmp_pbc = button_get_status ((GtkWidget *)Button); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) \brief use fractional coordinates \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) \brief use fractional coordinates \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) #endif { tmp_frac = button_get_status ((GtkWidget *)Button); /*if (gtk_toggle_button_get_active (Button)) { widget_set_sensitive (frac_box, 1); combo_set_active (frac_box, 0); } else { combo_set_active (frac_box, -1); widget_set_sensitive (frac_box, 0); }*/ } /*! \fn G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) \brief update lattice vector component \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) { const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) \brief lattice vectors: run the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { int i, j, k; const gchar * m; double v; i = 0; for (j=0; j<3; j++) { for (k=0; k<3; k++) { m = entry_get_text (GTK_ENTRY(vect_entry[i])); v = string_to_double ((gpointer)m); tmp_vect[j][k] = v; i ++; } } } destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) \brief lattice vectors - prepare the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) { int i, j, k; GtkWidget * win = dialog_cancel_apply (_(edit_prop[3]), MainWindow, FALSE); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (win), table, FALSE, FALSE, 5); k = 0; for (i=0; i<4; i++) { if (i > 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_name[i-1], 30, -1, 0.5, 0.5), 0, i, 1, 1); } for (j=0; j<4; j++) { if (j > 0) { if (i == 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_comp[j-1], -1, 30, 0.5, 0.5), j, 0, 1, 1); } else { vect_entry[k] = create_entry (G_CALLBACK(update_vect), 100, 15, FALSE, NULL); update_entry_double (GTK_ENTRY(vect_entry[k]), tmp_vect[i-1][j-1]); gtk_grid_attach (GTK_GRID (table), vect_entry[k], j, i, 1, 1); k ++; } } } } run_this_gtk_dialog (win, G_CALLBACK(run_vectors), NULL); } /*! \fn void edit_box (GtkWidget * vbox) \brief creation of the edit cell widgets \param vbox GtkWidget that will receive the data */ void edit_box (GtkWidget * vbox) { int i, j, k; GtkWidget * entry; GtkWidget * hbox; tmp_pbc = active_cell -> pbc; tmp_frac = active_cell -> frac; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Apply Periodic Boundary Conditions"), -1, 40, tmp_pbc, G_CALLBACK(toggle_pbc), NULL), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Fractional coordinates"), -1, 40, tmp_frac, G_CALLBACK(toggle_frac), NULL), FALSE, FALSE, 0); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, table, FALSE, FALSE, 0); k = 0; for (i=0; i<3; i++) { for (j=0; j<3; j++, k++) { if (i < 2) tmp_lattice[i][j] = active_box -> param[i][j]; tmp_vect[i][j] = active_box -> vect[i][j]; t_box[k].a = i; t_box[k].b = j; } } tmp_lat = active_cell -> ltype; k = 0; for (i=0; i<2; i++) { gtk_grid_attach (GTK_GRID (table), markup_label(_(box_p[i]), -1, 50, 0.5, 0.5), 1, i+2*i, 1, 1); for (j=0; j<3; j++, k++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_prop[i][j], -1, -1, 0.5, 0.5), j, i+2*i+1, 1, 1); entry = create_entry (G_CALLBACK(update_box), 100, 15, FALSE, (gpointer)& t_box[k]); update_entry_double (GTK_ENTRY(entry), tmp_lattice[i][j]); gtk_grid_attach (GTK_GRID (table), entry, j, i+2*i+2, 1, 1); } } GtkWidget * but = create_button (_("Lattice vectors"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(on_vectors_clicked), NULL); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 145); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 15); } /*! \fn G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) \brief update chemical property \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) { int i = combo_get_active (spec_box); int j = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); tmp_chem[j][i] = v; update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) \brief change the chemical species \param combo the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) { int i, j; i = combo_get_active ((GtkWidget *)combo); gtk_label_set_text (GTK_LABEL(chem_spec[0]), active_chem -> element[i]); gtk_label_set_text (GTK_LABEL(chem_spec[1]), g_strdup_printf("%d", (int)active_chem -> chem_prop[CHEM_Z][i])); for (j=0; j chem_prop[CHEM_Z][j]; tmp_chem[1][j] = set_radius_ (& k, & i); update_entry_double (GTK_ENTRY(chem_entry[1]), tmp_chem[1][j]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) \brief use X ray diffraction q coorection \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) \brief use X ray diffraction q coorection \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) #endif { tmp_xcor = button_get_status ((GtkWidget *)but); widget_set_sensitive (chem_entry[CHEM_PARAMS-2], ! tmp_xcor); } /*! \fn void edit_chem (GtkWidget * vbox) \brief creation of the edit chemical properties widgets \param vbox GtkWidget that will receive the data */ void edit_chem (GtkWidget * vbox) { char * chem_lab[CHEM_PARAMS+2]={i18n("Atom:"), i18n("Element:"), i18n("Atomic number:"), i18n("Atomic mass:"), i18n("Radius:"), i18n("Neutrons scattering length:"), i18n("X-rays scattering length:")}; char * chem_rad[4]={i18n("Covalent"), i18n("Ionic"), "van der Waals", i18n("In Crystal")}; char * chem_unit[4]={" g/mol", " Å", " fm", " e.u"}; int i, j; spec_box = create_combo(); widget_set_sensitive(spec_box, 1); g_signal_connect(G_OBJECT(spec_box), "changed", G_CALLBACK(on_spec_changed), NULL); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, table, FALSE, FALSE, 5); GtkWidget * chem_fixed = gtk_fixed_new (); gtk_grid_attach (GTK_GRID (table), chem_fixed, 1, 0, 1, 1); for (i=0; i nspec; j++) { combo_text_append (spec_box, active_chem -> label[j]); } } else { if (i > 0 && i < 3) { chem_spec[i-1] = markup_label ("", -1, -1, 0.5, 0.5); gtk_grid_attach (GTK_GRID (table), chem_spec[i-1], 1, i+2, 1, 1); } else { if (i==5) { rad_box = create_combo (); gtk_widget_set_size_request (rad_box, -1, 30); for (j=0; j<4; j++) { combo_text_append (rad_box, _(chem_rad[j])); } combo_set_active (rad_box, -1); g_signal_connect(G_OBJECT(rad_box), "changed", G_CALLBACK(on_rad_changed), NULL); gtk_grid_attach (GTK_GRID (table), rad_box, 1, i+1, 1, 1); } tmp_chem[i-3] = g_malloc0(active_project -> nspec*sizeof*tmp_chem[i-3]); for (j=0; j nspec; j++) { tmp_chem[i-3][j] = active_chem -> chem_prop[i-2][j]; } chem_entry[i-3] = create_entry (G_CALLBACK(update_chemistry), 120, 15, FALSE, GINT_TO_POINTER(i-3)); update_entry_double (GTK_ENTRY(chem_entry[i-3]), tmp_chem[i-3][0]); gtk_grid_attach (GTK_GRID (table), chem_entry[i-3], 2, i+2, 1, 1); if (i==CHEM_PARAMS+1) { tmp_xcor = active_project -> xcor; GtkWidget * chem_xcor = check_button ("= f(Q)", -1, 30, tmp_xcor, G_CALLBACK(toggle_xcor), NULL); widget_set_sensitive (chem_entry[i-3], ! tmp_xcor); gtk_grid_attach (GTK_GRID (table), chem_xcor, 1, i+2, 1, 1); } gtk_grid_attach (GTK_GRID (table), markup_label(chem_unit[i-3], -1, -1, 0.0, 0.5), 3, i+2, 1, 1); } } } combo_set_active (spec_box, 0); gtk_fixed_put (GTK_FIXED (chem_fixed), spec_box, -1, -1); } /*! \fn gboolean test_vol (double box[2][3], double vect[3][3]) \brief is the cell properly described to use PBC ? \param box lattice parameters \param vect lattice vectors */ gboolean test_vol (double box[2][3], double vect[3][3]) { int i, j; gboolean val = TRUE; tmp_lat = 0; for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (box[i][j] == 0.0) val = FALSE; } } if (val) tmp_lat = 1; val = TRUE; for (i=0; i<3; i++) { if (vect[i][0] == 0.0 && vect[i][1] == 0.0 && vect[i][2] == 0.0) { val = FALSE; } } if (val) tmp_lat = 2; return (tmp_lat) ? TRUE : FALSE; } /*! \fn gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) \brief is the cell properly described ? \param pbc \param frac fractional coordinates \param box lattice parameters \param vect lattice vectors */ gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) { if (! pbc && ! frac) { if (! test_vol (box, vect)) tmp_lat = active_cell -> ltype; return TRUE; } else { return test_vol (box, vect); } } /*! \fn void init_box_calc () \brief initialize calculation possibilities based the periodicity */ void init_box_calc () { active_cell -> has_a_box = test_vol (active_box -> param, active_box -> vect); if (! active_cell -> has_a_box) { if (active_project -> analysis) { active_project -> analysis[GDR] -> avail_ok = FALSE; active_project -> analysis[SQD] -> avail_ok = FALSE; active_project -> analysis[SKD] -> avail_ok = FALSE; active_project -> analysis[GDK] -> avail_ok = FALSE; } } else { if (active_project -> analysis) { active_project -> analysis[GDR] -> avail_ok = TRUE; active_project -> analysis[SQD] -> avail_ok = active_project -> analysis[GDR] -> calc_ok; active_project -> analysis[SKD] -> avail_ok = TRUE; active_project -> analysis[GDK] -> avail_ok = active_project -> analysis[SKD] -> calc_ok; } } prep_calc_actions (); } gboolean has_box_changed () { int i, j; gboolean changed = FALSE; for (i=0; i<2; i++) { for (j=0; j<3; j++) { g_debug ("i= %d, j= %d, tmp_lattice[%d][%d]= %f, active_box -> param[%d][%d]= %f", i, j, i, j, tmp_lattice[i][j], i, j, active_box -> param[i][j]); if (tmp_lattice[i][j] != active_box -> param[i][j]) { active_box -> param[i][j] = tmp_lattice[i][j]; changed = TRUE; } } } return changed; } gboolean have_vectors_changed () { int i, j; gboolean changed = FALSE; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (tmp_vect[i][j] != active_box -> vect[i][j]) { active_box -> vect[i][j] = tmp_vect[i][j]; changed = TRUE; } } } return changed; } /*! \fn void prep_box (int id) \brief prepare the project depending on the changes to the MD box \param id */ void prep_box (int id) { int i; // active_project -> run = 1; if (tmp_pbc != active_cell -> pbc) active_project -> run = 0; active_cell -> pbc = tmp_pbc; if (tmp_lat < 2 && tmp_lat != active_cell -> ltype) active_project -> run = 0; if (tmp_lat > 0) { if (has_box_changed()) { tmp_lat = 1; active_project -> run = 0; } else if (have_vectors_changed()) { tmp_lat = 2; active_project -> run = 0; } } active_cell -> ltype = tmp_lat; init_box_calc (); if (tmp_frac != active_cell -> frac) active_project -> run = 0; active_cell -> frac = tmp_frac; if (id > 1) active_project -> run = 0; if (! active_project -> run) { if (active_project -> modelgl) { for (i=0; i<3; i++) active_project -> modelgl -> cshift[i] = 0.0; } } } /*! \fn void test_chem () \brief were chemical properties modified ? */ void test_chem () { int i, j; gboolean upchem = FALSE; for (i=1; i nspec; j++) { if (tmp_chem[i-1][j] != active_chem -> chem_prop[i][j]) { active_chem -> chem_prop[i][j] = tmp_chem[i-1][j]; upchem = TRUE; } } g_free (tmp_chem[i-1]); tmp_chem[i-1] = NULL; } if (tmp_xcor != active_project -> xcor) { active_project -> xcor = tmp_xcor; upchem = TRUE; } if (upchem) { read_chem_ (active_chem -> chem_prop[CHEM_M], active_chem -> chem_prop[CHEM_R], active_chem -> chem_prop[CHEM_N], active_chem -> chem_prop[CHEM_X]); } } /*! \fn gboolean test_cutoffs () \brief are all cutoffs described ? */ gboolean test_cutoffs () { int i, j, k; k = 0; for (i=0; i nspec; i++, k++) { if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> analysis[GDR] -> max)) return FALSE; } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> analysis[GDR] -> max)) return FALSE; } } if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> analysis[GDR] -> max)) return FALSE; return TRUE; } /*! \fn void edit_bonds (GtkWidget * vbox) \brief creation of the edit bond cutoff widgets \param vbox the GtkWidget to store the data */ void edit_bonds (GtkWidget * vbox) { gchar * mess[2] = {i18n("To define the existence of a bond between 2 atoms i (α) and j (β), "), i18n("a bond exits if the 2 following conditions are verified:")}; gchar * cond[2] = {i18n("1) Dij < first minimum of the total g(r) - rcut (Tot.)"), i18n("2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)")}; gchar * m_end= i18n("0.0 < rcut ≤ Dmax"); gchar * fin = i18n("Dmax is the maximum inter-atomic distance in the model\n"); gchar * str; if (! preferences) { if (active_project -> analysis) { if (active_project -> analysis[GDR] -> max != 0.0) { str = g_strdup_printf (_("%s\twith\tDmax = %f Å"), _(m_end), active_project -> analysis[GDR] -> max); } else { str = g_strdup_printf (_("With %s"), _(m_end)); } } else { str = g_strdup_printf (_("With %s"), _(m_end)); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(mess[0]), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(mess[1]), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); GtkWidget * vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cond[0]), -1, -1, 0.0, 0.5), FALSE, FALSE, 50); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cond[1]), -1, -1, 0.0, 0.5), FALSE, FALSE, 50); if (! preferences) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vbox, markup_label(_(fin), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * boxv = create_vbox (BSEP); cut_box (active_project, boxv); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, boxv, FALSE, FALSE, 50); } } /*! \fn G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) \brief create an edition dialog: run the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) { int id = GPOINTER_TO_INT(data); int i = (id < 2) ? id : (id > 2 && id < 5) ? 1 : 2; gboolean done = FALSE; char * errpbc = i18n("To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters"); switch (response_id) { case GTK_RESPONSE_APPLY: if (i== 0) { test_chem (); done = TRUE; } else if (i == 1) { done = test_pbc (tmp_pbc, tmp_frac, tmp_lattice, tmp_vect); if (done) { prep_box (i); if (id == 1) { if (! active_project -> run) { run_project (); if (active_glwin) active_glwin -> create_shaders[MDBOX] = TRUE; bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } } } else { show_warning (_(errpbc), GTK_WIDGET(win)); } } else { gboolean upc; if (active_project -> modelgl) { if (active_project -> modelgl -> rings || active_project -> modelgl -> chains) { upc = ask_yes_no (_("Data can be lost !"), _("You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?"), GTK_MESSAGE_WARNING, GTK_WIDGET(win)); } else { upc = TRUE; } } else { upc = TRUE; } if (upc) update_cutoffs (active_project); done = TRUE; } break; default: if (i == 0) { test_chem (); done = TRUE; } else if (i == 1) { done = test_pbc (active_cell -> pbc, active_cell -> frac, active_box -> param, active_box -> vect); } else { done = TRUE; } break; } if (done) destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) \brief create an edition dialog - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) { int i; gboolean skip = FALSE; int id = GPOINTER_TO_INT(data); i = (id < 2) ? id : (id > 2 && id < 5) ? 1 : 2; GtkWidget * win = dialog_cancel_apply (_(edit_prop[i]), MainWindow, FALSE); GtkWidget * box = dialog_get_content_area (win); gtk_box_set_homogeneous (GTK_BOX(box), FALSE); if (i == 0) { edit_chem(box); } else if (i == 1) { edit_box (box); if (id == 3) { skip = test_pbc (tmp_pbc, tmp_frac, tmp_lattice, tmp_vect); if (skip) { active_cell -> ltype = tmp_lat; init_box_calc (); } active_project -> run = 0; } } else { opengl_project_changed (activep); edit_bonds (box); if (id == 5) skip = test_cutoffs (); } if (! skip && ! silent_input) { run_this_gtk_dialog (win, G_CALLBACK(run_on_edit_activate), data); } #ifdef GTK3 // GTK3 Menu Action To Check int j, k; if (active_glwin != NULL) { if (active_glwin -> init) { for (i=0; i<2; i++) { if (active_glwin -> ogl_box[i] != NULL) { widget_set_sensitive (active_glwin -> ogl_box[i], active_cell -> ltype); if (i) { j = (active_cell -> ltype && active_project -> steps == 1) ? 1 : 0; for (k=5; k<8; k++) widget_set_sensitive (active_glwin -> ogl_box[k], j); } } } } } #endif if (tmpcut) { g_free (tmpcut); tmpcut = NULL; } } atomes_1.3.1/src/gui/ringscall.c0000664000175000017500000005067315212624223016215 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ringscall.c * @short Callbacks for the ring statistics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'ringscall.c' * * Contains: * - The callbacks for the ring statistics calculation dialog * * List of functions: void init_ring (project * this_proj); void update_rings_menus (glwin * view); void update_rings_view (project * this_proj, int c); void clean_rings_data (int rid, glwin * view); void save_rings_data_ (int * taille, double ectrc[* taille], double ectpna[* taille], double ectmax[* taille], double ectmin[* taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat); G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "glview.h" #include "curve.h" #include "initcoord.h" extern GtkWidget * prep_rings_menu (glwin * view, int id); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern int update_voisj_and_contj (); extern void clean_coord_window (project * this_proj); #ifdef GTK3 extern G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); #else extern G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); #endif /*! \fn void init_ring (project * this_proj) \brief initialize the curve widgets for the ring statistics \param this_proj the target project */ void init_ring (project * this_proj) { int i, j, k, l; char * cp[4] = {"Rc(n)[", "Pn(n)[", "Pmax(n)[", "Pmin(n)["}; l = 0; for ( i = 0 ; i < 5 ; i++ ) { for ( j = 0 ; j < 4 ; j++ ) { this_proj -> analysis[RIN] -> curves[l] -> name = g_strdup_printf (_("%s - %sAll]"), _(rings_type[i]), cp[j]); l=l+1; } for ( j = 0 ; j < this_proj -> nspec ; j++ ) { for ( k = 0 ; k < 4 ; k++ ) { this_proj -> analysis[RIN] -> curves[l] -> name = g_strdup_printf ("%s - %s%s]", _(rings_type[i]), cp[k], active_chem -> label[j]); l=l+1; } } } add_curve_widgets (this_proj, RIN); this_proj -> analysis[RIN] -> init_ok = TRUE; } #ifdef GTK3 /*! \fn void update_rings_menus (glwin * view) \brief update the ring(s) menu for the glview \param view the glview */ void update_rings_menus (glwin * view) { int i, j; GtkWidget * menu; for (i=0; i<2; i++) { menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM(view -> ogl_rings[i*6])); if (GTK_IS_WIDGET(menu)) { for (j=1; j ogl_rings[i*6+j])) { g_object_ref (view -> ogl_rings[i*6+j]); gtk_container_remove (GTK_CONTAINER(menu), view -> ogl_rings[i*6+j]); } } } gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_rings[i*6], prep_rings_menu (view, i*6)); show_the_widgets (view -> ogl_rings[i*6]); widget_set_sensitive (view -> ogl_rings[i*6], view -> rings); } } #endif /*! \fn void update_rings_view (project * this_proj, int c) \brief update the text view for ring statistics \param this_proj the target project \param c the ring type */ void update_rings_view (project * this_proj, int c) { int i, j, k; gchar * nelt; gchar * col; gchar * tab; gchar * cid; gchar * str; if (this_proj -> analysis[RIN] -> calc_buffer == NULL) this_proj -> analysis[RIN] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[RIN] -> calc_buffer); j = this_proj -> rsparam[c][0]; if (j == 0) { nelt = g_strdup_printf (_("All")); col = NULL; } else { nelt = g_strdup_printf ("%s", this_proj -> chemistry -> label[j-1]); col = g_strdup_printf("%s", textcolor(j-1)); } print_info (_("\n\nRing statistics\n\n"), "heading", this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf (_("\n%s rings analysis details:\n"), rings_type[c]); print_info (str, "italic", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> rsparam[c][2]) { print_info (_(" * only ABAB rings have been considered\n"), "italic", this_proj -> analysis[RIN] -> calc_buffer); } if (this_proj -> rsparam[c][3]) { print_info (_(" * no homopolar bonds in the rings (A-A, B-B ...)\n"), "italic", this_proj -> analysis[RIN] -> calc_buffer); } if (this_proj -> rsparam[c][4]) { print_info (_(" * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n"), "italic", this_proj -> analysis[RIN] -> calc_buffer); } print_info (_("\n Atom(s) used to start the search: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); if (j != 0) print_info (_(" atom(s) only"), NULL, this_proj -> analysis[RIN] -> calc_buffer); if (this_proj -> steps > 1) { print_info (_("\n Average number of rings per configuration: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> rsdata[c][0]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); str = g_strdup_printf (" +/- %f\n", this_proj -> rsdata[c][1]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } else { print_info (_("\n Total number of rings: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf ("%f\n", this_proj -> rsdata[c][0]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } if (c == 1 || c == 2) { if (this_proj -> steps > 1) { print_info (_(" Average number of ring(s) with n > "), NULL, this_proj -> analysis[RIN] -> calc_buffer); } else { print_info (_(" Number of ring(s) with n > "), NULL, this_proj -> analysis[RIN] -> calc_buffer); } str = g_strdup_printf ("%d", this_proj -> rsparam[c][1]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); print_info (_(" nodes that potentially exist: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> rsdata[c][2]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf (" +/- %f", this_proj -> rsdata[c][3]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[RIN] -> calc_buffer); } print_info ("\n\t n\tR", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("c", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); if (this_proj -> steps > 1) { print_info ("]\t +/- \tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("n", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\t +/- \tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\t +/- \tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\t +/-\n", "bold", this_proj -> analysis[RIN] -> calc_buffer); } else { print_info ("]\tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("n", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\n", "bold", this_proj -> analysis[RIN] -> calc_buffer); } tab = NULL; cid = NULL; k = 4*(c*(this_proj -> nspec+1) + this_proj -> rsparam[c][0]); j = 1; for ( i=2 ; i < this_proj -> rsparam[c][1] ; i++ ) { if (this_proj -> analysis[RIN] -> curves[k] -> data[1][i] != 0.0) { j ++; if (j - 2*(j/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> analysis[RIN] -> calc_buffer); if (i < 9) { print_info (" ",cid, this_proj -> analysis[RIN] -> calc_buffer); } str = g_strdup_printf("%d", i+1); print_info (str, cid, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); str = g_strdup_printf("\t%f\t", this_proj -> analysis[RIN] -> curves[k] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+1] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+1] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+2] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+2] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } str = g_strdup_printf("%f", this_proj -> analysis[RIN] -> curves[k+3] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("\t%f", this_proj -> analysis[RIN] -> curves[k+3] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[RIN] -> calc_buffer); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } } print_info (calculation_time(TRUE, this_proj -> rsdata[c][4]), NULL, this_proj -> analysis[RIN] -> calc_buffer); g_free (nelt); if (col != NULL) { g_free (col); } } /*! \fn void clean_rings_data (int rid, glwin * view) \brief clean a ring type data for a glview \param rid Rings type \param view the glview */ void clean_rings_data (int rid, glwin * view) { project * this_proj = get_project_by_id(view -> proj); view -> ring_max[rid] = 0; int i, j; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i coord -> totcoord[4+rid]; i++) { if (view -> ogl_poly[0][4+rid][i] != NULL) { if (GTK_IS_WIDGET(view -> ogl_poly[0][4+rid][i])) { if (view -> anim -> last -> img -> show_poly[4+rid][i]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_poly[0][4+rid][i], FALSE); show_hide_poly (view -> ogl_poly[0][4+rid][i], & view -> gcid[4+rid][i][4+rid]); } } } } #endif if (this_proj -> coord -> totcoord[4+rid]) { if (this_proj -> coord -> ntg[4+rid]) g_free (this_proj -> coord -> ntg[4+rid]); this_proj -> coord -> ntg[4+rid] = NULL; if (this_proj -> coord -> geolist[4+rid][0]) g_free (this_proj -> coord -> geolist[4+rid][0]); this_proj -> coord -> geolist[4+rid][0] = NULL; this_proj -> coord -> totcoord[4+rid] = 0; } if (view -> all_rings[rid]) g_free (view -> all_rings[rid]); view -> all_rings[rid] = NULL; if (view -> num_rings[rid]) g_free (view -> num_rings[rid]); view -> num_rings[rid] = NULL; if (view -> show_rpoly[rid]) g_free (view -> show_rpoly[rid]); view -> show_rpoly[rid] = NULL; if (view -> gcid[4+rid]) g_free (view -> gcid[4+rid]); view -> gcid[4+rid] = NULL; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].rings[rid]) { g_free (this_proj -> atoms[i][j].rings[rid]); this_proj -> atoms[i][j].rings[rid] = NULL; } } } int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, this_proj); update (view); #ifdef GTK4 update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) \brief compute ring statistics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) { int search = active_project -> rsearch[0]; int i, j, k; #ifdef DEBUG g_debug ("Calc rings !"); g_debug (" - rings definition: %d", search); if (active_project -> rsparam[search][2]) g_debug (" - only ABAB rings !"); if (active_project -> rsparam[search][3]) g_debug (" - no homopolar bonds in rings !"); if (active_project -> rsparam[search][4]) g_debug (" - no homopolar bonds at all !"); #endif cutoffsend (); //if (active_project -> steps > 1) statusb = 1; if (! active_project -> analysis[RIN] -> init_ok) init_ring (active_project); active_project -> rsparam[search][5] = 0; if (! run_distance_matrix (widg, search+1, 0)) { show_error (_("The nearest neighbors table calculation has failed"), 0, widg); } else { i = search; j = 4*(active_project -> nspec + 1) * i; clean_curves_data (RIN, j+4*active_project -> rsparam[i][0], j+4*(active_project -> rsparam[i][0]+1)); clean_rings_data (i, active_glwin); active_glwin -> all_rings[i] = g_malloc0(active_project -> steps*sizeof*active_glwin -> all_rings[i]); active_glwin -> num_rings[i] = g_malloc0(active_project -> steps*sizeof*active_glwin -> num_rings[i]); active_glwin -> show_rpoly[i] = g_malloc0(active_project -> steps*sizeof*active_glwin -> show_rpoly[i]); active_glwin -> ring_max[i] = active_project -> rsparam[i][1]; active_glwin -> rings = TRUE; for (j=0; j steps; j++) { active_glwin -> all_rings[i][j] = g_malloc0(active_project -> rsparam[i][1]*sizeof*active_glwin -> all_rings[i][j]); active_glwin -> num_rings[i][j] = allocint (active_project -> rsparam[i][1]); active_glwin -> show_rpoly[i][j] = g_malloc0(active_project -> rsparam[i][1]*sizeof*active_glwin -> show_rpoly[i][j]); for (k=0; k < active_project -> natomes; k++) { active_project -> atoms[j][k].rings[i] = g_malloc0(active_project -> rsparam[i][1]*sizeof*active_project -> atoms[j][k].rings[i]); } } prepostcalc (widg, FALSE, RIN, 0, opac); j = initrings_ (& search, & active_project -> rsparam[i][1], & active_project -> rsparam[i][0], & active_project -> rsearch[1], & active_project -> rsparam[i][2], & active_project -> rsparam[i][3]); prepostcalc (widg, TRUE, RIN, (j == 0 || j == 2) ? 0 : 1, 1.0); active_project -> rsdata[i][4] = get_calc_time (start_time, stop_time); if (j == 0) { show_error (_("The ring statistics calculation has failed"), 0, widg); active_glwin -> ring_max[i] = 0; active_project -> rsdata[i][4] = 0.0; } else if (j == 2) { gchar * str = g_strdup_printf (_("\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !"), active_project -> rsearch[1]); show_error (str, 0, widg); g_free (str); active_glwin -> ring_max[i] = 0; active_project -> rsdata[i][4] = 0.0; j = 0; } else { if (active_coord -> totcoord[4+search]) { active_project -> rsparam[search][5] = 1; update_rings_view (active_project, search); } else { active_glwin -> ring_max[i] = 0; } } } active_glwin -> rings = FALSE; for (i=0; i<5; i++) { if (active_coord -> totcoord[4+i]) { active_glwin -> rings = TRUE; break; } } show_the_widgets (curvetoolbox); clean_coord_window (active_project); #ifdef GTK3 update_rings_menus (active_glwin); #else update_menu_bar (active_glwin); #endif fill_tool_model (); free_contj_voisj_ (); } /*! \fn void save_rings_data_ (int * taille, double ectrc[*taille], double ectpna[*taille], double ectmax[*taille], double ectmin[*taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat) \brief get rings statistics results form Fortran90 \param taille number of data points \param ectrc Rc (RINGS method) \param ectpna Pn (RINGS method) \param ectmax Pmax (RINGS method) \param ectmin Pmin (RINGS method) \param rpstep ring(s) per MD step \param ectrpst Standard deviation \param nampat rings not found \param ectampat standard deviation */ void save_rings_data_ (int * taille, double ectrc[* taille], double ectpna[* taille], double ectmax[* taille], double ectmin[* taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat) { int i, j; i = active_project -> rsearch[0]; active_project -> rsdata[i][0] = * rpstep; active_project -> rsdata[i][1] = * ectrpst; active_project -> rsdata[i][2] = * nampat; active_project -> rsdata[i][3] = * ectampat; j = 4*(i*(active_project -> nspec+1) + active_project -> rsparam[i][0]); active_project -> analysis[RIN] -> curves[j] -> err = duplicate_double (* taille, ectrc); active_project -> analysis[RIN] -> curves[j+1] -> err = duplicate_double (* taille, ectpna); active_project -> analysis[RIN] -> curves[j+2] -> err = duplicate_double (* taille, ectmax); active_project -> analysis[RIN] -> curves[j+3] -> err = duplicate_double (* taille, ectmin); } atomes_1.3.1/src/gui/msdcall.c0000664000175000017500000001651015212624223015646 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file msdcall.c * @short Callbacks for the MSD calculation dialog * @author Sébastien Le Roux */ /* * This file: 'msdcall.c' * * Contains: * - The callbacks for the MSD calculation dialog * * List of functions: void init_msd (project * this_proj); void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer); void update_msd_view (project * this_proj); G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "curve.h" #include "project.h" /*! \fn void init_msd (project * this_proj) \brief initialize the curve widgets for the MSD \param this_proj the target project */ void init_msd (project * this_proj) { int i, j; j = 0; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(x)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(y)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(z)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xy)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xz)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(yz)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(x/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(y/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(z/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xy/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xz/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(yz/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; } this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[x]", _("Correction")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[y]", _("Correction")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[z]", _("Correction")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[x]", _("Drift")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[y]", _("Drift")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[z]", _("Drift")); add_curve_widgets (this_proj, MSD); this_proj -> analysis[MSD] -> init_ok = TRUE; } /*! \fn void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer) \brief print molecular dynamics information \param this_proj the target project \param calc_buffer the GtkTextBuffer to print into */ void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer) { gchar * str; print_info (_("\t - Number of configurations: "), "bold", calc_buffer); str = g_strdup_printf ("%d", this_proj -> steps); print_info (str, "bold_blue", calc_buffer); g_free (str); print_info (_("\n\n\t - Number of time steps between each configuration: "), "bold", calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[MSD] -> num_delta); print_info (str, "bold_blue", calc_buffer); g_free (str); print_info (_("\n\n\t - Time step δt used to integrate Newton's equations of motion: "), "bold", calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[MSD] -> delta); print_info (str, "bold_blue", calc_buffer); g_free (str); print_info (" ", "bold", calc_buffer); print_info (untime[this_proj -> tunit], "bold_red", calc_buffer); } /*! \fn void update_msd_view (project * this_proj) \brief update the project text view for the MSD calculation \param this_proj the target project */ void update_msd_view (project * this_proj) { if (this_proj -> analysis[MSD] -> calc_buffer == NULL) this_proj -> analysis[MSD] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[MSD] -> calc_buffer); print_info (_("\n\nMean Square Displacement\n\n"), "heading", this_proj -> analysis[MSD] -> calc_buffer); print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[MSD] -> calc_buffer); update_dynamic_view (this_proj, this_proj -> analysis[MSD] -> calc_buffer); print_info ("\n", NULL, this_proj -> analysis[MSD] -> calc_buffer); print_info (calculation_time(TRUE, this_proj -> analysis[MSD] -> calc_time), NULL, this_proj -> analysis[MSD] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) \brief compute MSD \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[MSD] -> init_ok) init_msd (active_project); clean_curves_data (MSD, 0, active_project -> analysis[MSD] -> numc); prepostcalc (widg, FALSE, MSD, 0, opac); active_project -> analysis[MSD] -> min = active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta; active_project -> analysis[MSD] -> max = (active_project -> steps - 1)*active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta; i = msd_ (& active_project -> analysis[MSD] -> delta, & active_project -> analysis[MSD] -> num_delta); prepostcalc (widg, TRUE, MSD, i, 1.0); if (! i) { show_error (_("The MSD calculation has failed"), 0, widg); } else { update_msd_view (active_project); show_the_widgets (curvetoolbox); } fill_tool_model (); } atomes_1.3.1/src/gui/grcall.c0000664000175000017500000003257115212624223015500 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file grcall.c * @short Callbacks for the g(r)/g(k) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'grcall.c' * * Contains: * - The callbacks for the g(r)/g(k) calculation dialog * * List of functions: int recup_data_ (int * cd, int * rd); void init_gr (project * this_proj, int rdf); void update_rdf_view (project * this_proj, int rdf); void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]); G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button); G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "curve.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" int fitc = 0; /*! \fn void init_gr (project * this_proj, int rdf) \brief initialize the curve widgets for the g(r)/g(k) \param this_proj the target project \param rdf GR = real space, GK = FFT */ void init_gr (project * this_proj, int rdf) { int i, j, k; this_proj -> analysis[rdf] -> curves[0] -> name = g_strdup_printf ("g(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[1] -> name = g_strdup_printf ("g(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[2] -> name = g_strdup_printf ("G(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[3] -> name = g_strdup_printf ("G(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[4] -> name = g_strdup_printf ("D(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[5] -> name = g_strdup_printf ("D(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[6] -> name = g_strdup_printf ("T(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[7] -> name = g_strdup_printf ("T(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[8] -> name = g_strdup_printf ("g(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[9] -> name = g_strdup_printf ("g(r) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[rdf] -> curves[10] -> name = g_strdup_printf ("G(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[11] -> name = g_strdup_printf ("G(r) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[rdf] -> curves[12] -> name = g_strdup_printf ("D(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[13] -> name = g_strdup_printf ("D(r) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[rdf] -> curves[14] -> name = g_strdup_printf ("T(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[15] -> name = g_strdup_printf ("T(r) %s - %s", _("X-rays"), _("smoothed")); k = 16; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("g(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("g(r)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("G(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("G(r)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("dn(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NN]"); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NN] - %s", _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NC]"); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NC] - %s", _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[CC]"); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[CC] - %s", _("smoothed")); } add_curve_widgets (this_proj, rdf); this_proj -> analysis[rdf] -> init_ok = TRUE; } /*! \fn void update_rdf_view (project * this_proj, int rdf) \brief update the project text view for the g(r)/g(k) calculation \param this_proj the target project \param rdf the calculation GR / GK */ void update_rdf_view (project * this_proj, int rdf) { gchar * str; if (this_proj -> analysis[rdf] -> calc_buffer == NULL) this_proj -> analysis[rdf] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\n\nRadial distribution function(s)"), "heading", this_proj -> analysis[rdf] -> calc_buffer); if (rdf == GDR) { print_info (_(" - real space calculation\n\n"), "heading", this_proj -> analysis[rdf] -> calc_buffer); } else { print_info (_(" - FFT[S(q)]\n\n"), "heading", this_proj -> analysis[rdf] -> calc_buffer); } print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[rdf] -> calc_buffer); if (rdf == GDK) { print_info (_("\tReciprocal space data:\n\n"), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\t - Minimum vector Q"), "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (": ", "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[SKD] -> min); print_info (str, "bold_red", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Ã…", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\n\t - Maximum vector Q"), "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_(" for the FFT: "), "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[rdf] -> max); print_info (str, "bold_red", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Ã…", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("\n\n", NULL, this_proj -> analysis[rdf] -> calc_buffer); } print_info (_("\tReal space discretization:\n\n"), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\t - Number of δr steps: "), "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[rdf] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (_("\n\n\t between 0.0 and "), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info ("D", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\n\t where "), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info ("D", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_(" is the maximum distance in real space, "), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info ("D", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (" = ", NULL, this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[rdf] -> max); print_info (str, "bold_blue", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Ã…\n\n\t - δr = ", "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[rdf] -> delta); print_info (str, "bold_blue", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Ã…\n", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (calculation_time(TRUE, this_proj -> analysis[rdf] -> calc_time), NULL, this_proj -> analysis[rdf] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) \brief compute g(r) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[GDR] -> init_ok) init_gr (active_project, GDR); clean_curves_data (GDR, 0, active_project -> analysis[GDR] -> numc); active_project -> analysis[GDR] -> delta = active_project -> analysis[GDR] -> max / active_project -> analysis[GDR] -> num_delta; prepostcalc (widg, FALSE, GDR, 0, opac); i = g_of_r_ (& active_project -> analysis[GDR] -> num_delta, & active_project -> analysis[GDR] -> delta, & fitc); prepostcalc (widg, TRUE, GDR, i, 1.0); if (! i) { remove_action ("analyze.1"); show_error (_("The g(r) calculation has failed"), 0, widg); } else { add_analysis_action (1); update_rdf_view (active_project, GDR); show_the_widgets (curvetoolbox); } fill_tool_model (); for (i=0; i<4; i=i+3) update_after_calc (i); } /*! \fn void sendcutoffs_ (int * nc, double * totc, double partc[*nc][*nc]) \brief bond cutoff from Fortran90 \param nc number of species \param totc total cutoff \param partc partials cutoff */ void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]) { int i, j; active_chem -> grtotcutoff = * totc; for ( i=0; i< active_project -> nspec; i++) { for (j=0; j nspec; j++) { active_chem -> cutoffs[i][j]=partc[j][i]; } } active_project -> dmtx = FALSE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) \brief Fitting bond cutoff or data ? \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button) \brief Fitting bond cutoff or data ? \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * but, gpointer data) #endif { gboolean status = button_get_status ((GtkWidget *)but); if (status) { fitc = 1; } else { fitc = 0; } } /*! \fn int recup_data_ (int * cd, int * rd) \brief Sending data back to Fortran90 \param cd the curve id \param rd the analysis id */ int recup_data_ (int * cd, int * rd) { if (* rd == 0) { return send_gr_ (cd, & active_project -> analysis[GDR] -> curves[* cd] -> ndata, & active_project -> analysis[GDR] -> delta, active_project -> analysis[GDR] -> curves[* cd] -> data[0], active_project -> analysis[GDR] -> curves[* cd] -> data[1]); } else { return send_sq_ (cd, & active_project -> analysis[SKD] -> curves[* cd] -> ndata, & active_project -> analysis[GDK] -> delta, active_project -> analysis[SKD] -> curves[* cd] -> data[0], active_project -> analysis[SKD] -> curves[* cd] -> data[1]); } } /*! \fn G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) \brief compute g(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[GDK] -> init_ok) init_gr (active_project, GDK); clean_curves_data (GDK, 0, active_project -> analysis[GDK] -> numc); active_project -> analysis[GDK] -> delta = active_project -> analysis[GDK] -> max / active_project -> analysis[GDK] -> num_delta; prepostcalc (widg, FALSE, GDK, 0, opac); i = g_of_r_fft_ (& active_project -> analysis[GDK] -> num_delta, & active_project -> analysis[GDK] -> delta, & active_project -> analysis[GDK] -> max); prepostcalc (widg, TRUE, GDK, i, 1.0); if (! i) { show_error (_("The g(r) from FFT[S(k)] calculation has failed"), 0, widg); } else { update_rdf_view (active_project, GDK); show_the_widgets (curvetoolbox); } fill_tool_model (); for (i=0; i<4; i=i+3) update_after_calc (i); } atomes_1.3.1/src/gui/tools.c0000664000175000017500000002630615212624223015373 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tools.c * @short Callbacks for the toolbox dialog * @author Sébastien Le Roux */ /* * This file: 'tools.c' * * Contains: * - The callbacks for the toolbox dialog * * List of functions: gchar * prepare_for_title (gchar * init); void fill_tool_model (); void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void adjust_tool_model (int calc, int curve, gchar * string_path); G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); GtkWidget * create_tool_tree (); GtkWidget * create_curve_tool_box (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" extern GtkWidget * create_curve (tint * data); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); GtkTreeStore * tool_model = NULL; GtkWidget * tool_tree = NULL; GtkWidget * tool_scroll = NULL; /*! \fn gchar * prepare_for_title (gchar * init) \brief prepare a string for a window title, getting rid of all markup \param init the initial string */ gchar * prepare_for_title (gchar * init) { gchar * str = substitute_string (init, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); return str; } /*! \fn void fill_tool_model () \brief fill the tool window tree model */ void fill_tool_model () { GtkTreeIter calc_level, curve_level; int i, j; gboolean status, append; gchar * str; GtkImage * img; if (active_project) { i = (active_project -> steps > 1) ? 45 : 0; gtk_window_set_resizable (GTK_WINDOW (curvetoolbox), TRUE); #ifdef GTK4 gtk_window_set_default_size (GTK_WINDOW (curvetoolbox), 300, 250+i); #else gtk_widget_set_size_request (curvetoolbox, 300, 320+i); #endif gtk_window_set_resizable (GTK_WINDOW (curvetoolbox), FALSE); } gtk_tree_store_clear (tool_model); for (i=0; i steps > 1) ? TRUE : FALSE; } else { append = FALSE; } } if (append) { gtk_tree_store_append (tool_model, & calc_level, NULL); img = GTK_IMAGE(gtk_image_new_from_file(graph_img[i])); #ifdef GTK4 gtk_tree_store_set (tool_model, & calc_level, 0, -1, 1, -1, 2, img, 3, _(graph_name[i]), -1); #else GdkPixbuf * pix = gtk_image_get_pixbuf(img); gtk_tree_store_set (tool_model, & calc_level, 0, -1, 1, -1, 2, pix, 3, _(graph_name[i]), -1); #endif gtk_image_clear (img); if (active_project) { if (active_project -> analysis) { if (active_project -> analysis[i]) { if (active_project -> analysis[i] -> numc > 0 && active_project -> analysis[i] -> calc_ok) { for (j=0; j analysis[i] -> numc; j++) { if (active_project -> analysis[i] -> curves[j] -> name && active_project -> analysis[i] -> curves[j] -> ndata) { gtk_tree_store_append (tool_model, & curve_level, & calc_level); status = FALSE; str = g_strdup_printf ("%s", active_project -> analysis[i] -> curves[j] -> name); if (active_project -> analysis[i] -> curves[j] -> window != NULL) { if (GTK_IS_WIDGET(active_project -> analysis[i] -> curves[j] -> window)) { if (gtk_widget_get_visible(active_project -> analysis[i] -> curves[j] -> window)) status = TRUE; } } gtk_tree_store_set (tool_model, & curve_level, 0, i, 1, j, 3, str, 4, status, -1); g_free (str); } } } } } } } } } /* void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show/hide and sensitive/not a GtkCellRenderer \param col the column \param renderer the cell renderer \param mod the model \param iter the iter \param data the associated data pointer */ void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); gboolean vis = ((j < 0 && i == 2) || (j > -1 && i == 0)) ? FALSE : TRUE; gtk_cell_renderer_set_visible (renderer, vis); if (! active_project) { gtk_cell_renderer_set_sensitive (renderer, FALSE); } else if (j > -1 && active_project -> analysis) { if (active_project -> analysis[j]) { if (active_project -> analysis[j] -> numc) { gtk_tree_model_get (mod, iter, 1, & k, -1); if (active_project) gtk_cell_renderer_set_sensitive (renderer, active_project -> analysis[j] -> curves[k] -> ndata); if (i == 1) { set_renderer_markup (mod, iter, renderer, 3); } } } } else { gtk_cell_renderer_set_sensitive (renderer, TRUE); } } /*! \fn void adjust_tool_model (int calc, int curve, gchar * string_path) \brief adjust the content of the tool box tree model \param calc the calculation \param curve the curve \param string_path the path in the tree view */ void adjust_tool_model (int calc, int curve, gchar * string_path) { GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(tool_model), & iter, path); if (calc == SPH || calc == MSD) { int i, j; gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 1, & j, -1); if (i == calc && j == curve) gtk_tree_store_set (tool_model, & iter, 4, 0, -1); } else { gtk_tree_store_set (tool_model, & iter, 4, 0, -1); } } /*! \fn G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief To show/hide a curve by clicking in the tree view \param cell_renderer the renderer toggled \param string_path the path in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(tool_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 1, & j, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 4, & k, -1); #ifdef DEBUG // g_debug ("Show curve:: i= %d, j= %d, k= %d", i, j, k); #endif // DEBUG if (! k) { if (active_project -> analysis[i] -> curves[j] -> window == NULL) { active_project -> analysis[i] -> curves[j] -> window = create_curve (& active_project -> analysis[i] -> idcc[j]); active_project -> analysis[i] -> curves[j] -> path = g_strdup_printf ("%s", string_path); } show_the_widgets (active_project -> analysis[i] -> curves[j] -> window); } else { if (active_project -> analysis[i] -> curves[j] -> window != NULL) { hide_the_widgets (active_project -> analysis[i] -> curves[j] -> window); } } gtk_tree_store_set (tool_model, & iter, 4, ! k, -1); } /*! \fn GtkWidget * create_tool_tree () \brief create the toolbox tree view */ GtkWidget * create_tool_tree () { GtkTreeViewColumn * tool_col[3]; GtkCellRenderer * tool_cell[3]; gchar * ctitle[3]={i18n("Logo"), i18n("Name"), i18n("Button")}; gchar * ctype[3]={"pixbuf", "text", "active"}; GType coltype[5]= {G_TYPE_INT, G_TYPE_INT, G_TYPE_OBJECT, G_TYPE_STRING, G_TYPE_BOOLEAN}; tool_model = gtk_tree_store_newv (5, coltype); int i; fill_tool_model (); tool_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tool_model)); for (i=0; i<3; i++) { switch (i) { case 0: tool_cell[i] = gtk_cell_renderer_pixbuf_new (); break; case 1: tool_cell[i] = gtk_cell_renderer_text_new (); break; case 2: tool_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(tool_cell[i]), "toggled", G_CALLBACK(toggle_show_hide_curve), NULL); break; } tool_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i]), tool_cell[i], ctype[i], i+2, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tool_tree), tool_col[i]); gtk_tree_view_column_set_alignment (tool_col[i], 0.5); // if (i == 1) gtk_tree_view_column_set_attributes (tool_col[i], tool_cell[i], "markup", 3, NULL); gtk_tree_view_column_set_cell_data_func (tool_col[i], tool_cell[i], tool_set_visible, GINT_TO_POINTER(i), NULL); } gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tool_tree), FALSE); return tool_tree; } /*! \fn GtkWidget * create_curve_tool_box () \brief create the curve tool box window */ GtkWidget * create_curve_tool_box () { GtkWidget * ctbox; ctbox = create_win (_("Toolboxes"), MainWindow, FALSE, FALSE); #ifdef GTK4 gtk_widget_set_size_request (ctbox, 300, 250); #else gtk_widget_set_size_request (ctbox, 300, 320); #endif // New calculation icon to be added here tool_scroll = create_scroll (NULL, -1, -1, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, tool_scroll, create_tool_tree ()); add_container_child (CONTAINER_WIN, ctbox, tool_scroll); show_the_widgets (tool_scroll); add_gtk_close_event (ctbox, G_CALLBACK(hide_this_window), NULL); return (ctbox); } atomes_1.3.1/src/gui/spcall.c0000664000175000017500000001774515212624223015520 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file spcall.c * @short Callbacks for the spherical harmonics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'spcall.c' * * Contains: * - The callbacks for the spherical harmonics calculation dialog * * List of functions: void init_sph (project * this_proj, int opening); void update_spherical_view (project * this_proj); G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern int update_voisj_and_contj (); /*! \fn void init_sph (project * this_proj, int opening) \brief initialize the curve widgets for the spherical harmonics \param this_proj the target project \param opening opening project file 1, otherwise 0 */ void init_sph (project * this_proj, int opening) { int i, j, k; gchar * env; if (! opening) { this_proj -> analysis[SPH] -> numc = this_proj -> nspec; for (i=0; i nspec; i++) { this_proj -> analysis[SPH] -> numc += this_proj -> coord -> ntg[1][i]; } } alloc_analysis_curves (this_proj -> id, this_proj -> analysis[SPH]); if (! opening) { j = 0; for (i = 0 ; i < this_proj -> nspec ; i++) { this_proj -> analysis[SPH] -> curves[i+j] -> name = g_strdup_printf("Q(l) [%s] (l=0 -> %d)", this_proj -> chemistry -> label[i], this_proj -> analysis[SPH] -> num_delta); j += this_proj -> coord -> ntg[1][i]; } k = 1; for (i=0 ; i < this_proj -> nspec; i++) { for (j=0 ; j < this_proj -> coord -> ntg[1][i]; j++) { env = env_name (this_proj, j, i, 1, NULL); this_proj -> analysis[SPH] -> curves[j+k] -> name = g_strdup_printf("Q(l) %s (l=0 -> %d)", exact_name(env), this_proj -> analysis[SPH] -> num_delta); g_free (env); } k += this_proj -> coord -> ntg[1][i]+1; } } add_curve_widgets (this_proj, SPH); this_proj -> analysis[SPH] -> init_ok = (opening) ? FALSE : TRUE; } /*! \fn void update_spherical_view (project * this_proj) \brief update the text view for spherical harmonics \param this_proj the target project */ void update_spherical_view (project * this_proj) { int i, j, k, l, m; gchar * str; gchar * tab; gchar * cid; if (this_proj -> analysis[SPH] -> calc_buffer == NULL) this_proj -> analysis[SPH] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[SPH] -> calc_buffer); print_info (_("\n\nSpherical harmonics\n\n"), "heading", this_proj -> analysis[SPH] -> calc_buffer); m = 0; for (i=0; i nspec; i++) { print_info (_("\nResults for the "), NULL, this_proj -> analysis[SPH] -> calc_buffer); print_info (exact_name(active_chem -> label[i]), textcolor(i), this_proj -> analysis[SPH] -> calc_buffer); print_info (_(" atoms: \n\n"), NULL, this_proj -> analysis[SPH] -> calc_buffer); // Here print average spec info print_info ("\tl\t", "bold_italic", this_proj -> analysis[SPH] -> calc_buffer); print_info ("Q(","bold", this_proj -> analysis[SPH] -> calc_buffer); print_info ("l", "bold_italic", this_proj -> analysis[SPH] -> calc_buffer); print_info (")","bold", this_proj -> analysis[SPH] -> calc_buffer); print_info (active_chem -> label[i], textcolor(i), this_proj -> analysis[SPH] -> calc_buffer); print_info (_("[All]"), "bold", this_proj -> analysis[SPH] -> calc_buffer); for (j=0 ; j < active_coord -> ntg[1][i]; j++) { print_info ("\tQ(","bold", this_proj -> analysis[SPH] -> calc_buffer); print_info ("l", "bold_italic", this_proj -> analysis[SPH] -> calc_buffer); print_info (")","bold", this_proj -> analysis[SPH] -> calc_buffer); env_name (this_proj, j, i, 1, this_proj -> analysis[SPH] -> calc_buffer); } print_info ("\n", NULL, this_proj -> analysis[SPH] -> calc_buffer); k = 1; tab = NULL; cid = NULL; for (j=0; j analysis[SPH] -> num_delta/2+1 ; j++) { k ++; if (k - 2*(k/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> analysis[SPH] -> calc_buffer); if (j < 5) { print_info (" ",cid, this_proj -> analysis[SPH] -> calc_buffer); } str = g_strdup_printf("%d", 2*j); print_info (str, cid, this_proj -> analysis[SPH] -> calc_buffer); g_free (str); for (l=0; l ntg[1][i]+1; l++) { str = g_strdup_printf("\t%f", this_proj -> analysis[SPH] -> curves[l+m] -> data[1][j]); print_info (str, tab, this_proj -> analysis[SPH] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[SPH] -> calc_buffer); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } m += active_coord -> ntg[1][i]+1; } print_info (calculation_time(TRUE, this_proj -> analysis[SPH] -> calc_time), NULL, this_proj -> analysis[SPH] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) \brief compute spherical harmonics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) { int i, j, k, l, m; int err_update = 1; if (! active_project -> analysis[SPH] -> init_ok) init_sph (active_project, 0); if (! active_project -> dmtx) { active_project -> dmtx = run_distance_matrix (widg, 0, 0); } else { err_update = update_voisj_and_contj (); } if (! err_update) { show_error (_("Impossible to update FORTRAN data"), 0, (widg) ? widg : MainWindow); } else if (! active_project -> dmtx) { show_error (_("The nearest neighbors table calculation has failed"), 0, widg); } else { clean_curves_data (SPH, 0, active_project -> analysis[SPH] -> numc); prepostcalc (widg, FALSE, SPH, 0, opac); k = 0; l = active_project -> nspec; m = active_project -> analysis[SPH] -> num_delta; for (i=0; i nspec; i++) { for (j=0; j< active_coord -> ntg[1][i]; j++) { if (j==0) k ++; l += sphericals_ (& m, & i, & j, & k, active_coord -> partial_geo[i][j]); k ++; } } if (l != active_project -> analysis[SPH] -> numc) { i = 0; } else { i = 1; } prepostcalc (widg, TRUE, SPH, i, 1.0); if (! i) { show_error (_("Unexpected error when analyzing the spherical harmonics"), 0, widg); } else { update_spherical_view (active_project); show_the_widgets (curvetoolbox); } } free_contj_voisj_ (); fill_tool_model (); } atomes_1.3.1/src/gui/chainscall.c0000664000175000017500000003217315212624223016333 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file chainscall.c * @short Callbacks for the chains statistics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'chainscall.c' * * Contains: * - The callbacks for the chains statistics calculation dialog * * List of functions: void init_chain (project * this_proj); void update_chains_menus (glwin * view); void update_chains_view (project * this_proj); void clean_chains_data (glwin * view); G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "initcoord.h" #include "submenus.h" extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern int update_voisj_and_contj (); extern void clean_coord_window (project * this_proj); /*! \fn void init_chain (project * this_proj) \brief initialize the curve widgets for the chains statistics calculation \param this_proj the target project */ void init_chain (project * this_proj) { int i; this_proj -> analysis[CHA] -> curves[0] -> name = g_strdup_printf (_("Chains - Cc(n)[All]")); for (i=0 ; i nspec ; i++) { this_proj -> analysis[CHA] -> curves[i+1] -> name = g_strdup_printf (_("Chains - Cc(n)[%s]"), active_chem -> label[i]); } add_curve_widgets (this_proj, CHA); this_proj -> analysis[CHA] -> init_ok = TRUE; } #ifdef GTK3 /*! \fn void update_chains_menus (glwin * view) \brief update the chains statistics menus \param view the gliwn to update the menu from */ void update_chains_menus (glwin * view) { GtkWidget * menu; view -> ogl_chains[0] = destroy_this_widget (view -> ogl_chains[0]); view -> ogl_chains[0] = menu_item_new_with_submenu (_("Chain(s)"), view -> chains, add_menu_coord (view, 0, 9)); menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view -> ogl_coord[0])); if (GTK_IS_WIDGET(menu)) { gtk_menu_shell_insert (GTK_MENU_SHELL(menu), view -> ogl_chains[0], 3); show_the_widgets (view -> ogl_chains[0]); } } #endif /*! \fn void update_chains_view (project * this_proj) \brief update the chains statistics text view after the calculation \param this_proj the target project */ void update_chains_view (project * this_proj) { int i, j, k, l; gchar * nelt; gchar * col; gchar * tab; gchar * cid; gchar * str; if (this_proj -> analysis[CHA] -> calc_buffer == NULL) this_proj -> analysis[CHA] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[CHA] -> calc_buffer); j = this_proj -> csparam[0]; if (! j) { nelt = g_strdup_printf (_("All")); col = NULL; } else { nelt = g_strdup_printf ("%s", this_proj -> chemistry -> label[j-1]); col = g_strdup_printf("%s", textcolor(j-1)); } print_info (_("\n\nChain statistics\n\n"), "heading", this_proj -> analysis[CHA] -> calc_buffer); if (this_proj -> csparam[1]) { print_info (_(" * only AAAA chains have been considered\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } if (this_proj -> csparam[2]) { print_info (_(" * only ABAB chains have been considered\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } if (this_proj -> csparam[3]) { print_info (_(" * homopolar bonds can not shorten the chains\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } if (this_proj -> csparam[4]) { print_info (_(" * only 1-(2)"), "italic", this_proj -> analysis[CHA] -> calc_buffer); print_info ("n", "sub_italic", this_proj -> analysis[CHA] -> calc_buffer); print_info (_("-1 chains have been considered, ie. isolated chains\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } print_info (_("\n Atom(s) used to start the search: "), NULL, this_proj -> analysis[CHA] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[CHA] -> calc_buffer); if (j != 0) print_info (_(" atom(s) only"), NULL, this_proj -> analysis[CHA] -> calc_buffer); if (this_proj -> steps > 1) { print_info (_("\n Average number of chains per configuration: "), NULL, this_proj -> analysis[CHA] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> csdata[0]); print_info (str, "bold", this_proj -> analysis[CHA] -> calc_buffer); g_free (str); str = g_strdup_printf (" +/- %f\n", this_proj -> csdata[1]); print_info (str, "bold", this_proj -> analysis[CHA] -> calc_buffer); g_free (str); } else { print_info (_("\n Total number of chains: "), NULL, this_proj -> analysis[CHA] -> calc_buffer); str = g_strdup_printf ("%f\n", this_proj -> csdata[0]); print_info (str, "bold", this_proj -> analysis[CHA] -> calc_buffer); g_free (str); } if (this_proj -> steps > 1) { print_info (_("\n\t n Av. by step \tC"), "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("c", "sub_bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[CHA] -> calc_buffer); if (j == this_proj -> nspec) { print_info ("]\t +/-\n", "bold", this_proj -> analysis[CHA] -> calc_buffer); } else { print_info ("]\t +/-\n", "bold", this_proj -> analysis[CHA] -> calc_buffer); } } else { print_info (_("\n\t n\tNumber\t\tC"), "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("c", "sub_bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[CHA] -> calc_buffer); print_info ("]\n", NULL, this_proj -> analysis[CHA] -> calc_buffer); } tab = NULL; cid = NULL; k = this_proj -> csparam[0]; l = (! k) ? this_proj -> natomes : this_proj -> chemistry -> nsps[k-1]; j = 1; for ( i=1 ; i < this_proj -> csparam[5] ; i++ ) { if (this_proj -> analysis[CHA] -> curves[k] -> data[1][i] != 0.0) { j ++; if (j - 2*(j/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> analysis[CHA] -> calc_buffer); if (i < 9) { print_info (" ",cid, this_proj -> analysis[CHA] -> calc_buffer); } str = g_strdup_printf("%d", i+1); print_info (str, cid, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); str = g_strdup_printf("\t%f\t", l*this_proj -> analysis[CHA] -> curves[k] -> data[1][i]); print_info (str, tab, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); str = g_strdup_printf("%f\t", this_proj -> analysis[CHA] -> curves[k] -> data[1][i]); print_info (str, tab, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[CHA] -> curves[k] -> err[i]); print_info (str, tab, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[CHA] -> calc_buffer); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } } print_info (calculation_time(TRUE, this_proj -> analysis[CHA] -> calc_time), NULL, this_proj -> analysis[CHA] -> calc_buffer); g_free (nelt); if (col != NULL) { g_free (col); } } /*! \fn void clean_chains_data (glwin * view) \brief cleaning the OpenGL data related to chain statistics \param view the gliwn to clean the data from */ void clean_chains_data (glwin * view) { project * this_proj = get_project_by_id(view -> proj); if (this_proj -> coord -> totcoord[9]) { if (this_proj -> coord -> ntg[9]) g_free (this_proj -> coord -> ntg[9]); this_proj -> coord -> ntg[9] = NULL; if (this_proj -> coord -> geolist[9][0]) g_free (this_proj -> coord -> geolist[9][0]); this_proj -> coord -> geolist[9][0] = NULL; this_proj -> coord -> totcoord[9] = 0; } if (view -> all_chains) g_free (view -> all_chains); view -> all_chains = NULL; if (view -> num_chains) g_free (view -> num_chains); view -> num_chains = NULL; if (view -> gcid[9]) g_free (view -> gcid[9]); view -> gcid[9] = NULL; view -> chains = FALSE; view -> chain_max = 0; int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].chain) { g_free (this_proj -> atoms[i][j].chain); this_proj -> atoms[i][j].chain = NULL; } } } } /*! \fn G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) \brief compute chains statistics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) { int j, k; cutoffsend (); //if (active_project -> steps > 1) statusb = 1; if (! active_project -> analysis[CHA] -> init_ok) init_chain (active_project); active_project -> csparam[6] = 0; if (! run_distance_matrix (widg, 6, 0)) { show_error (_("The nearest neighbors table calculation has failed"), 0, widg); } else { clean_curves_data (CHA, active_project -> csparam[0], active_project -> csparam[0]+1); clean_chains_data (active_glwin); active_glwin -> all_chains = g_malloc0(active_project -> steps*sizeof*active_glwin -> all_chains); active_glwin -> num_chains = g_malloc0(active_project -> steps*sizeof*active_glwin -> num_chains); for (j=0; j steps; j++) { active_glwin -> all_chains[j] = g_malloc0(active_project -> csparam[5]*sizeof*active_glwin -> all_chains[j]); active_glwin -> num_chains[j] = allocint (active_project -> csparam[5]); for (k=0; k < active_project -> natomes; k++) { if (active_project -> atoms[j][k].chain) g_free (active_project -> atoms[j][k].chain); active_project -> atoms[j][k].chain = NULL; active_project -> atoms[j][k].chain = g_malloc0(active_project -> csparam[5]*sizeof*active_project -> atoms[j][k].chain); } } k = 1; prepostcalc (widg, FALSE, CHA, 0, opac); j = initchains_ (& active_project -> csparam[0], & active_project -> csparam[1], & active_project -> csparam[2], & active_project -> csparam[3], & active_project -> csparam[4], & active_project -> csparam[5], & active_project -> csearch); prepostcalc (widg, TRUE, CHA, (j == 1) ? 1 : 0, 1.0); if (j == 0) { show_error (_("The chain statistics calculation has failed"), 0, widg); } else if (j == 2) { gchar * str = g_strdup_printf (_("\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !"), active_project -> csearch); show_error (str, 0, widg); g_free (str); j = 0; } } if (j == 1) { active_project -> csparam[6] = 1; active_glwin -> chains = TRUE; active_glwin -> chain_max = active_project -> csparam[5]; update_chains_view (active_project); } show_the_widgets (curvetoolbox); clean_coord_window (active_project); fill_tool_model (); free_contj_voisj_ (); #ifdef GTK3 update_chains_menus (active_glwin); #endif } /*! \fn void save_chains_data_ (int * taille, double ectrc[*taille], double * rpstep, double * ectrpst) \brief get chains statistics results form Fortran90 \param taille number of data points \param ectrc standard deviation per MD step \param rpstep chains per MD step \param ectrpst standard deviation */ void save_chains_data_ (int * taille, double ectrc[* taille], double * rpstep, double * ectrpst) { int i; active_project -> csdata[0] = * rpstep; active_project -> csdata[1] = * ectrpst; i = active_project -> csparam[0]; active_project -> analysis[CHA] -> curves[i] -> err = duplicate_double (* taille, ectrc); } atomes_1.3.1/src/gui/interface.c0000664000175000017500000011202115212624223016161 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file interface.c * @short General messaging functions * @author Sébastien Le Roux */ /* * This file: 'interface.c' * * Contains: * - General messaging functions * * List of functions: int dummy_ask_ (char * question); int iask (char * question, char * lab, int id, GtkWidget * win); gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg); G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data); G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * exact_name (gchar * name); gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win); gchar * textcolor (int i); gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer); void show_web (GtkWidget * dialog, int id); void show_info (char * information, int val, GtkWidget * win); void show_warning (char * warning, GtkWidget * win); void show_warning_ (char * warning, char * sub, char * tab); void show_error (char * error, int val, GtkWidget * win); void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win); void show_error_ (char * error, char * sub, char * tab); void init_data_ (int * nats, int * nspc, int * stps, int * cid); void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer); void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]); void send_chem_info_ (int prop[active_project -> nspec]); void update_after_calc (int calc); G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data); G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data); GtkWidget * addweb (int id); GtkWidget * show_pop (char * pop, GtkWidget * pwin); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "affero.h" extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); GtkWidget * answer; /* Old version to make url/email in about dialog clickable */ /* void about_dialog_handle_url (GtkAboutDialog * dialog, const gchar * link, gpointer data) { GtkWidget * error_dialog; gchar * url, * escaped; g_return_if_fail (GTK_IS_ABOUT_DIALOG (dialog)); g_return_if_fail (link != NULL); / * simple check if this is an email address * / if (! g_str_has_prefix (link, "mailto:") && strchr (link, '@') != NULL) { escaped = g_uri_escape_string (link, NULL, FALSE); url = g_strdup_printf ("mailto:%s", escaped); g_free (escaped); } else { url = g_strdup_printf ("%s", link); } #ifdef G_OS_WIN32 HINSTANCE h; h = ShellExecute (NULL, "open", url, NULL, NULL, SW_SHOWNORMAL); if ((int)h <= 32) #else #ifdef GTK4 // gtk_show_uri (GTK_WINDOW (dialog), url, gtk_event_controller_get_current_event_time ( , )); #else GError * error = NULL; gtk_show_uri_on_window (GTK_WINDOW (dialog), url, gtk_get_current_event_time (), & error); if (error != NULL) #endif #endif { gchar * uri = g_strdup_printf (_("Failed to open link:\n%s"), url); error_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Impossible to open link: ")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", uri); run_this_gtk_dialog (error_dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (uri); } g_free (url); } */ /*! \fn GtkWidget * addweb (int id) \brief create a widget to present \param id Add contact info (1) or not (0) */ GtkWidget * addweb (int id) { GtkWidget * web; const gchar * contact = i18n(" Please contact me at:\n"); const gchar * seb = " Dr. Sébastien Le Roux "; GtkWidget * eseb; GtkWidget * vbox; GtkWidget * hbox; const gchar * or = i18n("\n Or check the website for information\n"); if (id) { web = gtk_link_button_new_with_label (ATOMES_URL, _("Visit the project's website")); } gchar * mailto = g_strdup_printf ("mailo:%s", PACKAGE_BUGREPORT); gchar * mailsh = g_strdup_printf ("<%s>",PACKAGE_BUGREPORT); eseb = gtk_link_button_new_with_label (mailto, mailsh); g_free (mailto); g_free (mailsh); vbox = create_vbox (BSEP); if (id) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (_(contact)), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (seb), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, eseb, FALSE, FALSE, 0); if (id) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (_(or)), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, web, FALSE, FALSE, 0); } return (vbox); } /*! \fn G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) \brief create the about dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) { GtkWidget * aboutdialog; #ifdef GTK4 GdkPaintable * atomes_logo = gtk_image_get_paintable (GTK_IMAGE(gtk_image_new_from_file(PACKAGE_LAGPL))); #else GdkPixbuf * atomes_logo = gdk_pixbuf_new_from_file (PACKAGE_LAGPL, NULL); #endif gchar * str; const gchar * authors[] = {"Dr. Sébastien Le Roux ", "", NULL}; /*"Collaborations:", "", "Dr. Noël Jakse : dynamic structure factor", NULL}; */ const gchar * weblabel = "https://atomes.ipcms.fr"; const gchar * comments = i18n("Visualization, analyzis, creation/edition and post-processing of atomic scale models !"); const gchar * copyrights = "Copyright © 2026 \nDr. Sébastien Le Roux"; // gtk_about_dialog_set_url_hook (about_dialog_handle_url, NULL, NULL); // gtk_about_dialog_set_email_hook (about_dialog_handle_url, NULL, NULL); aboutdialog = gtk_about_dialog_new (); gtk_about_dialog_set_logo (GTK_ABOUT_DIALOG(aboutdialog), atomes_logo); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(aboutdialog), VERSION); str = g_strdup_printf ("%s", PACKAGE); gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG(aboutdialog), str); g_free (str); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG(aboutdialog), _(comments)); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(aboutdialog), g_strdup_printf("%s", ATOMES_URL)); gtk_about_dialog_set_website_label (GTK_ABOUT_DIALOG(aboutdialog), weblabel); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(aboutdialog), authors); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG(aboutdialog), copyrights); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG(aboutdialog), affero_license); gtk_about_dialog_set_license_type (GTK_ABOUT_DIALOG(aboutdialog), GTK_LICENSE_CUSTOM); gtk_about_dialog_set_wrap_license (GTK_ABOUT_DIALOG(aboutdialog), FALSE); run_this_gtk_dialog (aboutdialog, G_CALLBACK(destroy_this_dialog), NULL); } /*! \fn void show_web (GtkWidget * dialog, int id) \brief add / show web information to widget \param dialog the GtkWidget to modify \param id Add contact info (1) or not (0) */ void show_web (GtkWidget * dialog, int id) { GtkWidget * box = dialog_get_content_area (dialog); GtkWidget * theweb = addweb (id); show_the_widgets (theweb); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, theweb, FALSE, FALSE, 0); show_the_widgets (box); } /*! \fn void show_info (char * information, int val, GtkWidget * win) \brief add / show information message to widget \param information Message \param val Add contact info (1) or not (0) \param win the GtkWidget to modify */ void show_info (char * information, int val, GtkWidget * win) { gchar * info=NULL; if (val < 0) { info = g_strdup_printf ("%s\n%s", information, ifbug); } else { info = g_strdup_printf ("%s", information); } GtkWidget * dialog = message_dialogmodal (info, _("Information"), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); if (val != 0) show_web (dialog, (val < 0) ? 0 : val); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (info); } /*! \fn void show_warning (char * warning, GtkWidget * win) \brief show warning \param warning Message \param win Parent GtkWidget, if any */ void show_warning (char * warning, GtkWidget * win) { GtkWidget * dialog = message_dialogmodal (warning, _("Warning"), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, win); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn void show_warning_ (char * warning, char * sub, char * tab) \brief show warning from Fortran90 \param warning Message \param sub Fortan90 subroutine \param tab Fortran90 pointer */ void show_warning_ (char * warning, char * sub, char * tab) { /* This function is called from fortran 90 */ gchar * wtot=NULL; wtot = g_strdup_printf ("%s\n%s\n%s", warning, sub, tab); show_warning (wtot, MainWindow); g_free (wtot); } /*! \fn void show_error (char * error, int val, GtkWidget * win) \brief show error message \param error the error message \param val Add contact info (1) or not (0) \param win Parent GtkWidget, if any */ void show_error (char * error, int val, GtkWidget * win) { gchar * etot=NULL; if (val) { etot = g_strdup_printf ("%s", error); } else { etot = g_strdup_printf ("%s\n%s", error, ifbug); } GtkWidget * dialog = message_dialogmodal (etot, _("Error"), GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, win); show_web (dialog, val); g_warning ("%s", etot); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (etot); } /*! \fn void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win) \brief show error message \param error the error message \param back_trace Backtrace of the error \param act runtime action \param val Add contact info (1) or not (0) \param win Parent GtkWidget, if any */ void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win) { GtkWidget * dialog = message_dialogmodal (error, _("Error"), GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, win); GtkWidget * exp_trace = create_expander (_("Details"), NULL); gchar * trace; if (this_error -> error_trace) { trace = g_strdup_printf (_("\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n"), (! act) ? _("reading") : _("saving"), _(this_error -> error_signal.message), this_error -> error_file, this_error -> error_func, this_error -> error_line, this_error -> error_trace, this_error -> error_func); } else { trace = g_strdup_printf (_("\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n"), (! act) ? _("reading") : _("saving"), _(this_error -> error_signal.message), this_error -> error_file, this_error -> error_func, this_error -> error_line); } GtkWidget * trace_label = markup_label (trace, -1, -1, 0.0, 0.5); gtk_label_set_selectable(GTK_LABEL(trace_label), TRUE); g_free (trace); add_container_child (CONTAINER_EXP, exp_trace, trace_label); GtkWidget * content_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog)); add_box_child_start (GTK_ORIENTATION_VERTICAL, content_area, exp_trace, FALSE, FALSE, 0); if (! val) { add_box_child_start (GTK_ORIENTATION_VERTICAL, content_area, markup_label (_(ifbug), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } show_web (dialog, val); g_warning ("%s", error); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn void show_error_ (char * error, char * sub, char * tab) \brief show error from Fortran90 \param error Message \param sub Fortan90 subroutine \param tab Fortran90 pointer */ void show_error_ (char * error, char * sub, char * tab) { /* This function is called from fortran 90 */ gchar * etot=NULL; etot = g_strdup_printf ("%s\n\t%s\n\t%s", error, sub, tab); show_error (etot, 0, MainWindow); g_free (etot); } gboolean res_yes_no; /*! \fn G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) \brief ask yes or no for something: running dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) { res_yes_no = (response_id == GTK_RESPONSE_YES) ? TRUE : FALSE; destroy_this_dialog (dial); } /*! \fn gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) \brief ask yes or no for something: prepare dialog \param title Title \param text Message \param type the type of message window \param widg the parent GtkWidget, if any */ gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) { GtkWidget * dialog = message_dialogmodal (text, title, type, GTK_BUTTONS_YES_NO, widg); run_this_gtk_dialog (dialog, G_CALLBACK(run_yes_no), NULL); return res_yes_no; } /*! \fn gchar * exact_name (gchar * name) \brief short cut to print string without spaces \param name the initial string */ gchar * exact_name (gchar * name) { return g_strdup_printf("%s", substitute_string (name, " ", NULL)); } /*! \fn GtkWidget * show_pop (char * pop, GtkWidget * pwin) \brief display pop information window \param pop Message \param pwin Parent widget, if any */ GtkWidget * show_pop (char * pop, GtkWidget * pwin) { GtkWidget * wpop = create_win (_("Information"), pwin, TRUE, FALSE); gtk_widget_set_size_request (wpop, 600, 80); #ifdef GTK3 gtk_window_set_position (GTK_WINDOW (wpop), GTK_WIN_POS_CENTER); #endif GtkWidget * hpop = create_hbox (0); add_container_child (CONTAINER_WIN, wpop, hpop); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hpop, stock_image(EXECUTE), TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hpop, gtk_label_new (pop), TRUE, TRUE, 0); show_the_widgets (wpop); return (wpop); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) \brief Leaving atomes ? \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) \brief Leaving atomes ? \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) #endif { if (ask_yes_no (_("Leaving ?!"), _("Are you sure you want to quit ?"), GTK_MESSAGE_QUESTION, MainWindow)) { quit_gtk (); } else { show_the_widgets (MainWindow); } return TRUE; } /*! \fn int dummy_ask_ (char * question) \brief Ask to use dummy atoms or not from Fortran90 \param question Message */ int dummy_ask_ (char * question) { GtkWidget * dask = message_dialogmodal (question, _("Parameter required"), GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, MainWindow); run_this_gtk_dialog (dask, G_CALLBACK(run_yes_no), NULL); return (res_yes_no) ? 0 : -1; } extern gchar * field_init[3]; gchar * coord_type[3]={i18n("Cartesian"), i18n("Atomic units"), i18n("Fractional")}; gchar * npt_type[4]={"A\tB\tC\tα\tβ\tɣ", "A\tB\tC\nα\tβ\tɣ", "ax\tay\taz\tbx\tby\tbz\tcx\tcy\tcz", "ax\tay\taz\nbx\tby\tbz\ncx\tcy\tcz"}; gchar * npt_info[3]={i18n("1 line by step, as many lines as MD steps"), i18n("2 lines by step, twice as many lines as MD steps"), i18n("3 lines by step, three times as many lines as MD steps")}; gchar * cif_configurations[3]={i18n("Single step chemical reaction"), i18n("MD trajectory"), i18n("Single configuration")}; gchar * cif_occupancies[3]={i18n("Round up to lowest integer"), i18n("Round up to highest integer"), i18n("Round up to nearest integer")}; gchar * cif_config_legends={i18n("\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file")}; gchar * cif_config_leg={i18n("\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file")}; gchar * cif_occ[3]={i18n("to lowest integer: ⌊nsites x occupancy⌋"), i18n("to highest integer: ⌈nsites x occupancy⌉"), i18n("to nearest integer: ⌊nsites x occupancy⌉")}; gchar * cif_sites[2]={i18n("with nsites = f(space group, crystalline positions)"), i18n("with nsites = f(symmetry positions, crystalline positions)")}; GtkWidget * answer_info; /*! \fn G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) \brief Handling the GtkComboBox in 'int iask' \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) { int i, j; i = combo_get_active (widg); j = (! i || i == 2) ? 0 : (i == 1) ? 1 : 2; gtk_label_set_text (GTK_LABEL(answer_info), _(npt_info[j])); } int res_int; /*! \fn G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) \brief enter an integer value - running the dialog \param iask the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) { int i = GPOINTER_TO_INT(data); gboolean done = FALSE; const gchar * riask; if (response_id == GTK_RESPONSE_OK) { if (i == 0 || i > 5) { riask = entry_get_text (GTK_ENTRY(answer)); res_int = string_to_double ((gpointer)riask); if (i > 5) { if (res_int > 0 && res_int < i+1) { done = TRUE; res_int --; } } else if (res_int > 0) { done = TRUE; } } else { done = TRUE; res_int = combo_get_active (answer); } } if (done) destroy_this_dialog (iask); } /*! \fn int iask (char * question, char * lab, int id, GtkWidget * win) \brief enter an integer value - prepare the dialog \param question Message \param lab Text to use for label \param id the required parameter id \param win the parent GtkWidget, if any */ int iask (char * question, char * lab, int id, GtkWidget * win) { GtkWidget * iask; GtkWidget * vbox; GtkWidget * hboxa; GtkWidget * quest; int i; iask = message_dialogmodal (question, _("Parameter Required"), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); vbox = dialog_get_content_area (iask); gtk_box_set_spacing (GTK_BOX(vbox), 15); hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxa, TRUE, TRUE, 0); quest = markup_label(lab, -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, quest, TRUE, TRUE, 0); if (id == 0 || id > 6) { answer = gtk_entry_new (); gtk_widget_set_size_request (answer, 100, -1); gtk_entry_set_alignment (GTK_ENTRY(answer), 1.0); } else { if (id < 6) { answer = create_combo (); gtk_widget_set_size_request (answer, -1, 30); switch (id) { case 1: for (i=0; i<3; i++) combo_text_append (answer, _(coord_type[i])); break; case 2: for (i=0; iLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n"), _(cif_occ[0]), _(cif_occ[1]), _(cif_occ[2]), _(cif_sites[cif_use_symmetry_positions])); answer_info = markup_label (str, 450, -1, 0.5, 0.5); g_free (str); } if (id == 6) { answer_info = markup_label (_(npt_info[0]), -1, -1, 0.5, 0.5); g_signal_connect(G_OBJECT(answer), "changed", G_CALLBACK(on_answer_changed), NULL); } if (id > 2 && id < 7) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, answer_info, FALSE, FALSE, 5); run_this_gtk_dialog (iask, G_CALLBACK(run_iask), GINT_TO_POINTER(id)); return res_int; } gchar * res_char; /*! \fn G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) \brief enter a string - running the dialog \param cask the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) { int i = GPOINTER_TO_INT(data); gboolean done = FALSE; if (i < 0) { while (! done) { if (response_id == GTK_RESPONSE_OK) { res_char = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(answer))); done = TRUE; } } } else { if (response_id == GTK_RESPONSE_OK) { res_char = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(answer))); } else { res_char = NULL; } done = TRUE; } if (done) destroy_this_dialog (cask); } /*! \fn gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) \brief enter a string - prepare the dialog \param question Message \param lab Text to use for label \param id the required parameter id \param old the initial value for the string \param win the parent GtkWidget, if any */ gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) { GtkWidget * cask; GtkWidget * dialog_ask; GtkWidget * hboxa; GtkWidget * quest; res_char = NULL; cask = message_dialogmodal (question, _("Parameter required"), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); dialog_ask = dialog_get_content_area (cask); gtk_box_set_spacing (GTK_BOX(dialog_ask), 15); hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_ask, hboxa, TRUE, TRUE, 0); show_the_widgets (hboxa); quest = gtk_label_new (lab); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, quest, TRUE, TRUE, 0); show_the_widgets (quest); answer = gtk_entry_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, answer, TRUE, TRUE, 0); gtk_widget_set_size_request (answer, 50, -1); gtk_entry_set_alignment (GTK_ENTRY(answer), 1.0); update_entry_text (GTK_ENTRY(answer), old); run_this_gtk_dialog (cask, G_CALLBACK(run_cask), GINT_TO_POINTER(id)); return (res_char); } /*! \fn void init_data_ (int * nats, int * nspc, int * stps, int * cid) \brief update project data using information from Fortran90 \param nats number of atoms \param nspc number of species \param stps number of steps \param cid allocate chemistry data (1) or not (0) */ void init_data_ (int * nats, int * nspc, int * stps, int * cid) { active_project -> natomes = * nats; active_project -> nspec = * nspc; active_project -> steps = * stps; if (active_project -> steps > 1) { active_project -> skt_corr_threshold = (active_project -> steps < 20) ? 1 : 10; active_project -> skt_n_data_sets = min (5, active_project -> steps); active_project -> sqw_n_data_sets = 5; } alloc_proj_data (active_project, * cid); if (* cid) active_chem = active_project -> chemistry; } /*! \fn void spec_data_ (int * status, int * ind, int * atd, int * nsp, char * lbel, char * el_nme, double * amss, double * rdus, double * nscatt, double * xscatt) \brief update project data using information from Fortran90 \param status Update data (1) or not (0) \param ind the chemical species \param atd Z \param nsp Number of atoms of this species \param lbel Symbol \param el_nme Element \param amss M \param rdus Radius \param nscatt Neutron scattering length \param xscatt X scattering length */ void spec_data_ (int * status, int * ind, int * atd, int * nsp, char * lbel, char * el_nme, double * amss, double * rdus, double * nscatt, double * xscatt) { int id = * ind; active_chem -> label[id]= g_strdup_printf("%s", lbel); active_chem -> element[id]= g_strdup_printf("%s", el_nme); if (* status) { active_chem -> nsps[id] = * nsp; active_chem -> chem_prop[CHEM_Z][id] = (double) * atd; active_chem -> chem_prop[CHEM_M][id] = * amss; active_chem -> chem_prop[CHEM_R][id] = * rdus; active_chem -> chem_prop[CHEM_N][id] = * nscatt; active_chem -> chem_prop[CHEM_X][id] = * xscatt; } } /*! \fn void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) \brief print information in GtkTextBuffer \param str the text \param stag the tags \param buffer the GtkTextBuffer to print into */ void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) { GtkTextIter bEnd; GtkTextTag * tag; gtk_text_buffer_get_end_iter (buffer, &bEnd); if (stag != NULL) { tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table(buffer), stag); gtk_text_buffer_insert_with_tags (buffer, &bEnd, str, -1, tag, NULL); } else { tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table(buffer), "default-size"); gtk_text_buffer_insert_with_tags (buffer, &bEnd, str, -1, tag, NULL); } } /*! \fn gchar * textcolor (int i) \brief setup text color keyword \param i color id */ gchar * textcolor (int i) { switch (i - i * (i / 9)) { case 0: return "red"; break; case 1: return "blue"; break; case 2: return "cyan"; break; case 3: return "green"; break; case 4: return "light_green"; break; case 5: return "yellow"; break; case 6: return "orange"; break; case 7: return "violet"; break; case 8: return "pink"; break; } return NULL; } /*! \fn void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]) \brief lattice data from Fortran90 \param bid 0 or MD step if NPT \param volume volume \param density density \param dvects direct space lattice vectors \param rvects reciprocal lattice vectors \param mod modulus of lattice vectors (a,b,c) \param ang lattice angles (alpha, beta, gamma) \param f_to_c fractional to cartesian matrix \param c_to_f cartesian to fractional matrix */ void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]) { int i, j; for ( i=0; i<3; i++) { for (j=0; j<3; j++) { active_cell -> box[* bid].vect[i][j] = dvects[j][i]; active_cell -> box[* bid].rvect[i][j] = rvects[j][i]; } active_cell -> box[* bid].param[0][i] = mod[i]; active_cell -> box[* bid].param[1][i] = ang[i]; } active_cell -> box[* bid].frac_to_cart = mat4(f_to_c[0][0], f_to_c[0][1], f_to_c[0][2], 0.0, f_to_c[1][0], f_to_c[1][1], f_to_c[1][2], 0.0, f_to_c[2][0], f_to_c[2][1], f_to_c[2][2], 0.0, 0.0, 0.0, 0.0, 0.0); active_cell -> box[* bid].cart_to_frac = mat4(c_to_f[0][0], c_to_f[0][1], c_to_f[0][2], 0.0, c_to_f[1][0], c_to_f[1][1], c_to_f[1][2], 0.0, c_to_f[2][0], c_to_f[2][1], c_to_f[2][2], 0.0, 0.0, 0.0, 0.0, 0.0); #ifdef DEBUG // m4_print (active_cell -> box[* bid].frac_to_cart); // m4_print (active_cell -> box[* bid].cart_to_frac); #endif active_cell -> box[* bid].vol = * volume; active_cell -> box[* bid].dens = * density; if ((active_cell -> npt && * bid == active_project -> steps-1) || ! active_cell -> npt) { if (active_project -> analysis) { active_project -> analysis[GDR] -> max = fdmax_ (& active_cell -> pbc); active_project -> analysis[SQD] -> min = active_project -> analysis[SKD] -> min = fkmin_ (& active_cell -> pbc); // if (active_project -> analysis[SKT]) active_project -> analysis[SKT] -> min = active_project -> analysis[SKD] -> min; } int i, j; active_cell -> volume = active_cell -> density = 0.0; i = (active_cell -> npt) ? active_project -> steps : 1; for (j=0; j volume += active_cell -> box[j].vol; active_cell -> density += active_cell -> box[j].dens; } active_cell -> volume /= i; active_cell -> density /= i; } } /*! \fn void send_chem_info_ (int prop[active_project->nspec]) \brief getting chemistry formula information from Fortran90 \param prop the formula */ void send_chem_info_ (int prop[active_project -> nspec]) { int i; for (i=0; i nspec; i++) { active_chem -> formula[i] = prop[i]; } } /*! \fn gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) \brief output the name of a coordination sphere \param this_proj the target project \param g the coordination (0 = total, 1 = partial) \param s the chemical species \param f With markup or not \param buffer Output in a GtkTextBuffer, or not if NULL */ gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) { int l, m; gchar * spec = g_strdup_printf ("%s", exact_name(this_proj -> chemistry -> label[s])); gchar * stra; gchar * strb; m = 0; for (l=0; l nspec; l++) { m += this_proj -> coord -> partial_geo[s][g][l]; } if (m > 0) { stra = g_strdup_printf ("%s [", spec); if (buffer != NULL) { print_info (spec, textcolor(s), buffer); print_info ("[", "bold", buffer); } for (l=0; l nspec; l++) { m = this_proj -> coord -> partial_geo[s][g][l]; if (m > 1) { if (f == 1) { strb = g_strdup_printf ("%s%s%d", stra, exact_name(this_proj -> chemistry -> label[l]), m); } else { strb = g_strdup_printf ("%s%s%d", stra, exact_name(this_proj -> chemistry -> label[l]), m); } if (buffer != NULL) { print_info (exact_name(this_proj -> chemistry -> label[l]), "bold", buffer); g_free (strb); strb = g_strdup_printf ("%d", m); print_info (strb, "sub", buffer); } } else if (m > 0) { strb = g_strdup_printf ("%s%s", stra, exact_name(this_proj -> chemistry -> label[l])); if (buffer != NULL) { print_info (exact_name(this_proj -> chemistry -> label[l]), "bold", buffer); } } else { strb = g_strdup_printf ("%s", stra); } g_free (stra); stra = g_strdup_printf ("%s", strb); g_free (strb); } strb = g_strdup_printf ("%s]", stra); if (buffer != NULL) { print_info ("]", "bold", buffer); } g_free (stra); } else { strb = g_strdup_printf (_("%s - isolated"), spec); if (buffer != NULL) { print_info (spec, textcolor(s), buffer); print_info (_(" - isolated"), "bold", buffer); } } if (buffer != NULL) { strb = NULL; } g_free (spec); return strb; } /*! \fn void update_after_calc (int calc) \brief update all curve plots in the workspace after a calculation \param calc analysis id */ void update_after_calc (int calc) { int i, j; tint cd; project * this_proj; for (i=0; i analysis[calc] -> init_ok) { for (j= 0; j < this_proj -> analysis[calc] -> numc; j++) { if (this_proj -> analysis[calc] -> curves[j] -> plot != NULL) { cd.a = i; cd.b = calc; cd.c = j; update_curve ((gpointer)& cd); } } } } } atomes_1.3.1/src/gui/sktcall.c0000664000175000017500000004125315212624223015666 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file sktcall.c * @short Callbacks for the dynamic structure factor S(k,t) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'sktcall.c' * * Contains: * - The callbacks for the dynamic structure factor calculation dialog * * List of functions: void init_sqw (project * this_proj); void recup_sqw_list_ (int nq, double qval[nq]); void init_skt (project * this_proj, int opening); void update_skt_view (project * this_proj); G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "curve.h" #include "project.h" extern void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); extern void update_sq_view (project * this_proj, int sqk); extern void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer); extern gboolean skt_all_sets; /*! \fn void init_sqw (project * this_proj) \brief initialize the curve widgets for the s(k,t) and s(q,w) calculations \param this_proj the target project */ void init_sqw (project * this_proj) { int g, h, i, k, l, m; g = 8+4*this_proj -> nspec*this_proj -> nspec; if (this_proj -> nspec == 2) g += 8; for (h=0; h < this_proj -> sqw_n_data_sets; h++) { i = this_proj -> skt_sets + h*g; this_proj -> analysis[SKT] -> curves[0+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f", _("Neutrons"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[1+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f - %s", _("Neutrons"), this_proj -> sqw_q_id[h], _("smoothed")); this_proj -> analysis[SKT] -> curves[2+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f", _("Neutrons"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[3+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f - %s", _("Neutrons"), this_proj -> sqw_q_id[h], _("smoothed")); this_proj -> analysis[SKT] -> curves[4+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f", _("X-rays"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[5+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f - %s", _("X-rays"), this_proj -> sqw_q_id[h], _("smoothed")); this_proj -> analysis[SKT] -> curves[6+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f", _("X-rays"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[7+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f - %s", _("X-rays"), this_proj -> sqw_q_id[h], _("smoothed")); k = i + 8; for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ω)[%s,%s] - q= %f", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ω)[%s,%s] - q= %f - %s", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h], _("smoothed")); k ++; } } for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ω)[%s,%s] - q= %f", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ω)[%s,%s] - q= %f - %s", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h], _("smoothed")); k ++; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NN] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NN] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NC] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NC] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[CC] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[CC] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[ZZ] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[ZZ] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); } } for (h=this_proj -> skt_sets; h < this_proj -> analysis[SKT] -> numc; h++) { init_curve_title (this_proj, SKT, h); } } /*! \fn void recup_sqw_list_ (int nq, double qval[nq]) \brief retrieve exact q vector values from Fortran \param nq the number of q vectors \param qval the list of q vectors */ void recup_sqw_list_ (int nq, double qval[nq]) { if (nq != active_project -> sqw_n_data_sets) { // This should happen, error ? } int i; for (i=0; i<* qval; i++) { active_project -> sqw_q_id[i] = qval[i]; } init_sqw (active_project); // Update calculation dialog ? } /*! \fn void init_skt (project * this_proj, int opening) \brief initialize the curve widgets for the s(k,t) and s(q,w) calculations \param this_proj the target project \param opening opening project file 1, otherwise 0 */ void init_skt (project * this_proj, int opening) { int g, h, i, j, k, l, m; if (this_proj -> analysis[SKT] -> curves) { for (i=0; i analysis[SKT] -> numc; i++) { hide_the_widgets(this_proj -> analysis[SKT] -> curves[i] -> window); } } this_proj -> skt_sets = 8+4*this_proj -> nspec*this_proj -> nspec; if (this_proj -> nspec == 2) this_proj -> skt_sets += 8; this_proj -> sqw_sets = this_proj -> skt_sets; g = this_proj -> skt_sets; if (this_proj -> skt_all_sets) { this_proj -> skt_sets *= (this_proj -> steps - this_proj -> skt_corr_threshold); } else { this_proj -> skt_sets *= this_proj -> skt_n_data_sets; } this_proj -> sqw_sets *= this_proj -> sqw_n_data_sets; this_proj -> analysis[SKT] -> numc = this_proj -> skt_sets + this_proj -> sqw_sets; alloc_analysis_curves (this_proj -> id, this_proj -> analysis[SKT]); for (h=0; h < ((this_proj -> skt_all_sets) ? this_proj -> steps - this_proj -> skt_corr_threshold : this_proj -> skt_n_data_sets); h++) { i = h*g; j = (this_proj -> skt_all_sets) ? h+1 : active_project -> skt_step_id[h]; this_proj -> analysis[SKT] -> curves[0+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d", _("Neutrons"), j); this_proj -> analysis[SKT] -> curves[1+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d - %s", _("Neutrons"), j, _("smoothed")); this_proj -> analysis[SKT] -> curves[2+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d", _("Neutrons"), j); this_proj -> analysis[SKT] -> curves[3+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d - %s", _("Neutrons"), j, _("smoothed")); this_proj -> analysis[SKT] -> curves[4+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d", _("X-rays"), j); this_proj -> analysis[SKT] -> curves[5+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d - %s", _("X-rays"), j, _("smoothed")); this_proj -> analysis[SKT] -> curves[6+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d", _("X-rays"), j); this_proj -> analysis[SKT] -> curves[7+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d - %s", _("X-rays"), j, _("smoothed")); k = 8+i; for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ẟt)[%s,%s] - ẟt= %d", active_chem -> label[l], active_chem -> label[m], j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ẟt)[%s,%s] - ẟt= %d - %s", active_chem -> label[l], active_chem -> label[m], j, _("smoothed")); k ++; } } for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ẟt)[%s,%s] - ẟt= %d", active_chem -> label[l], active_chem -> label[m], j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ẟt)[%s,%s] - ẟt= %d - %s", active_chem -> label[l], active_chem -> label[m], j, _("smoothed")); k ++; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NN] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NN] - ẟt= %d - %s", j, _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NC] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NC] - ẟt= %d - %s", j,_("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[CC] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[CC] - ẟt= %d - %s", j, _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[ZZ] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[ZZ] - t= %d - %s", j, _("smoothed")); } } if (opening) init_sqw (this_proj); add_curve_widgets (this_proj, SKT); this_proj -> analysis[SKT] -> init_ok = TRUE; } /*! \fn void update_skt_view (project * this_proj) \brief update the text view for s(k,t) and s(q,w) calculation \param this_proj the target project */ void update_skt_view (project * this_proj) { int i; gchar * str; update_sq_view (this_proj, SKT); print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\tMolecular dynamics information:\n\n"), NULL, this_proj -> analysis[SKT] -> calc_buffer); update_dynamic_view (this_proj, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\n\n\tIntermediate scattering - F(q,δt)\n\n"), NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\t - Correlation threshold δt"), "bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("min", "sup_bold", this_proj -> analysis[SKT] -> calc_buffer); print_info (" = ", "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> skt_corr_threshold); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); if (this_proj -> skt_all_sets) { print_info (_("\t - All "), "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> skt_sets); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (_(" correlated calculations saved"), "bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); } else { print_info (_("\t - Results saved for "), "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> skt_n_data_sets); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (_(" correlated calculations:\n\n"), "bold", this_proj -> analysis[SKT] -> calc_buffer); for (i=0; i skt_n_data_sets; i++) { print_info (" \t\t ", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", i); print_info (str, NULL, this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (") δt\t=\t", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d\n", this_proj -> skt_step_id[i]); print_info (str, "bold_green", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); } } print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\tDynamic structure factor - S(q,ω)\n\n"), NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info ("\t - ", "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> sqw_n_data_sets); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (_(" q vectors were analyzed:\n\n"), "bold", this_proj -> analysis[SKT] -> calc_buffer); for (i=0; i sqw_n_data_sets; i++) { print_info (" \t\t ", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", i); print_info (str, NULL, this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (") q\t=\t", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> sqw_q_id[i]); print_info (str, "bold_red", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (" Ã…", "bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("\n", "bold", this_proj -> analysis[SKT] -> calc_buffer); } print_info (calculation_time(TRUE, this_proj -> analysis[SKT] -> calc_time), NULL, this_proj -> analysis[SKT] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data) \brief callback to compute the dynamic structure factor analysis \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data) { // Initializing the graph for this calculation, if not done already init_skt (active_project, 0); // Cleaning previous results, if any clean_curves_data (SKT, 0, active_project -> analysis[SKT] -> numc); active_project -> analysis[SKT] -> delta = (active_project -> analysis[SKT] -> max - active_project -> analysis[SKT] -> min) / active_project -> analysis[SKT] -> num_delta; // Calculation time for dynamic structure factor analysis starts here ! prepostcalc (widg, FALSE, SKT, 0, opac); int i; i = cqvf_ (& active_project -> analysis[SKT] -> max, & active_project -> analysis[SKT] -> min, & active_project -> analysis[SKT] -> num_delta, & active_project -> sk_advanced[1][0], & active_project -> sk_advanced[1][1]); if (i == 1) { for (i=0; i analysis[SKT] -> numc; i++) { active_project -> analysis[SKT] -> curves[i] -> ndata = 0; } double detla_t = active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta; int res_skt = s_of_k_t_ (& active_project -> analysis[SKT] -> num_delta, & active_project -> xcor, & active_project -> skt_corr_threshold, & active_project -> skt_n_data_sets, active_project -> skt_step_id, & detla_t, & active_project -> sqw_n_data_sets, active_project -> sqw_q_id, & active_project -> sqw_freq); g_free (xsk); xsk = NULL; prepostcalc (widg, TRUE, SKT, res_skt, 1.0); if (! res_skt) { show_error (_("The dynamic structure factor calculation has failed"), 0, widg); } else { update_skt_view (active_project); show_the_widgets (curvetoolbox); } } else { prepostcalc (widg, TRUE, SKT, i, 1.0); show_error (_("Problem during the selection of the k-points\nused to sample the reciprocal lattice"), 0, widg); } fill_tool_model (); } atomes_1.3.1/src/gui/gui.c0000664000175000017500000013063415212624223015017 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file gui.c * @short GUI of the main window \n Menu elements of the workspace menu \n Creation of menu items, actions, used in the entire atomes software * @author Sébastien Le Roux */ /* * This file: 'gui.c' * * Contains: * - The GUI of the main window - The menu elements of the workspace menu - Creation of menu items, actions, of menu items, actions, used in the entire atomes software * * List of functions: G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data); void clean_view (); void view_buffer (GtkTextBuffer * buffer); void atomes_key_pressed (guint keyval, GdkModifierType state); void add_analysis_action (int act); void remove_action (gchar * action_name); void remove_edition_actions (); void remove_edition_and_analyze_actions (); void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat); void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu); void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data); GtkWidget * create_main_window (GApplication * atomes); GIcon * get_gicon_from_data (int format, const gchar * icon); GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); GMenu * workspace_section (gchar * act, int pop); GMenu * port_section (gchar * act, int pop, int port); GMenu * project_section (gchar * act, int pop_up, int proj, int calc); GMenu * import_section (gchar * act); GMenu * quit_section (gchar * act); GMenu * workspace_title (); GMenu * project_title (int pop_up, int proj); GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc); GMenu * create_edit_menu (); GMenu * tool_box_section (); GMenu * create_analyze_menu (); GMenu * create_help_menu (); GMenu * atomes_menu_bar (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" extern int objects[3]; extern int * object_was_selected[3]; extern int ** tmp_object_id[3]; extern GtkWidget * create_curve_tool_box (); extern GtkWidget * work_menu (int p, int c); extern G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); extern int get_atom_id_from_periodic_table (atom_search * asearch); extern G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); extern void create_user_preferences_dialog (); #ifdef GTK3 GtkWidget * MainEvent; #endif gchar * dots[NDOTS]; gchar * graph_img[NCALCS]; atomes_action edition_acts[] = {{"edit.chemistry", GINT_TO_POINTER(0)}, {"edit.periodicity", GINT_TO_POINTER(1)}, {"edit.cutoffs", GINT_TO_POINTER(2)}}; gchar * calc_name[] = {"g(r)/G(r)", i18n("S(q) from FFT[g(r)]"), i18n("S(q) from Debye Equation"), i18n("g(r)/G(r) from FFT[S(q)]"), i18n("Bonds and Angles"), i18n("Ring Statistics"), i18n("Chain Statistics"), i18n("Spherical Harmonics"), i18n("Mean Squared Displacement"), i18n("Dynamic Structure Factor")}; gchar * graph_name[] = {"g(r)/G(r)", i18n("S(q) from FFT[g(r)]"), i18n("S(q) from Debye Equation"), i18n("g(r)/G(r) from FFT[S(q)]"), i18n("Bond Properties"), i18n("Angle Distributions"), i18n("Ring Statistics"), i18n("Chain Statistics"), i18n("Spherical Harmonics"), i18n("Mean Squared Displacement"), i18n("Dynamic Structure Factor")}; gchar * graph_icon[] = {"pixmaps/gr.png", "pixmaps/sq.png", "pixmaps/sq.png", "pixmaps/gr.png", "pixmaps/bd.png", "pixmaps/an.png", "pixmaps/ri.png", "pixmaps/ch.png", "pixmaps/sp.png", "pixmaps/ms.png", "pixmaps/sq.png"}; tint cut_sel; dint davect[9]; ColRGBA std[6]; shortcuts main_shortcuts[] = { { i18n("About"), i18n("open about dialog"), GDK_KEY_a, "a" }, { i18n("Periodic table"), i18n("open periodic table"), GDK_KEY_p, "p" }, { i18n("Quit"), i18n("quit atomes"), GDK_KEY_q, "q" }, //}; //{ { i18n("Open workspace"), i18n("open atomes workspace"), GDK_KEY_w, "w" }, { i18n("Save workspace"), i18n("save atomes workspace"), GDK_KEY_s, "s" }, { i18n("Close workspace"), i18n("close atomes workspace"), GDK_KEY_c, "c" }, //}; //{ { i18n("New project"), i18n("create new atomes project"), GDK_KEY_n, "n" }, { i18n("Open project"), i18n("open atomes project"), GDK_KEY_o, "o" } }; gchar * main_section_names[] = { "Main" }; int main_group_by_section[] = { 3 }; gchar * main_group_names[] = { i18n("General"), i18n("Workspace"), i18n("Projects") }; int main_shortcut_by_group[] = { 3, 3, 2 }; /*! \fn GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]) \brief Create the shortcuts information window \param sections number of shortcut sections \param group_by_section number of group by section \param groups number of groups \param shortcut_by_group number of shortcuts by group \param shortcs shortcuts information */ GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]) { GtkShortcutsWindow * win = NULL; #ifdef G_OS_WIN32 win = g_object_new (GTK_TYPE_SHORTCUTS_WINDOW, "modal", FALSE, "resizable", TRUE, "deletable", TRUE, NULL); #else win = g_object_new (GTK_TYPE_SHORTCUTS_WINDOW, "modal", FALSE, "resizable", TRUE, NULL); #endif GtkShortcutsSection * shortcut_section[sections]; GtkShortcutsGroup * shortcut_group[groups]; GtkShortcutsShortcut * shortcut; #ifdef GTK4 #if GTK_MINOR_VERSION < 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION < 4) GtkWidget * sections_book = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(sections_book), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(sections_book), GTK_POS_TOP); #endif #endif // GTK4 int i, j, k, l, m; l = m = 0; for (i=0; i 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION >= 4) gtk_shortcuts_group_add_shortcut (shortcut_group[l], shortcut); #else add_box_child_start (GTK_ORIENTATION_VERTICAL, (GtkWidget *)shortcut_group[l], (GtkWidget *)shortcut, FALSE, FALSE, 0); #endif #else gtk_container_add (GTK_CONTAINER((GtkWidget *)shortcut_group[l]), (GtkWidget *)shortcut); #endif } #ifdef GTK4 #if GTK_MINOR_VERSION > 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION >= 4) gtk_shortcuts_section_add_group (shortcut_section[i], shortcut_group[l]); #else add_box_child_start (GTK_ORIENTATION_HORIZONTAL, (GtkWidget *)shortcut_section[i], (GtkWidget *)shortcut_group[l], FALSE, FALSE, 0); #endif #else gtk_container_add (GTK_CONTAINER((GtkWidget *)shortcut_section[i]), (GtkWidget *)shortcut_group[l]); #endif } #ifdef GTK4 #if GTK_MINOR_VERSION > 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION >= 4) gtk_shortcuts_window_add_section (GTK_SHORTCUTS_WINDOW(win), shortcut_section[i]); #else gtk_notebook_append_page (GTK_NOTEBOOK(sections_book), (GtkWidget *)shortcut_section[i], gtk_label_new (_(section_names[i]))); #endif #else gtk_container_add (GTK_CONTAINER((GtkWidget *)win), (GtkWidget *)shortcut_section[i]); #endif } #ifdef GTK4 #if GTK_MINOR_VERSION < 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION < 4) gtk_window_set_child ((GtkWindow*) win, sections_book); #endif #endif add_gtk_close_event ((GtkWidget *)win, G_CALLBACK(destroy_this_window), NULL); show_the_widgets ((GtkWidget *)win); return (GtkWidget *)win; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief popup a menu at an event position \param widget the GtkWidget sending the signal \param event the associated event \param data the associated pointer data */ G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> button == 3) { pop_menu_at_pointer (work_menu (-1, -1), (GdkEvent *)event); } return FALSE; } #endif /*! \fn void clean_view () \brief clean the main window */ void clean_view () { MainView = destroy_this_widget (MainView); atomes_logo = destroy_this_widget (atomes_logo); #ifdef GTK4 atomes_logo = gtk_picture_new_for_filename (PACKAGE_LOGO); gtk_widget_set_size_request (atomes_logo, 550, -1); add_container_child (CONTAINER_SCR, MainScrol[1], atomes_logo); #else atomes_logo = gtk_image_new_from_file (PACKAGE_LOGO); MainScrol[1] = destroy_this_widget (MainScrol[1]); gtk_container_add (GTK_CONTAINER(MainEvent), atomes_logo); show_the_widgets (MainEvent); #endif } /*! \fn void view_buffer (GtkTextBuffer * buffer) \brief set a text buffer in the main window or an image \param buffer the GtkTextBuffer to display */ void view_buffer (GtkTextBuffer * buffer) { if (atomes_logo) { atomes_logo = destroy_this_widget (atomes_logo); #ifdef GTK4 gtk_scrolled_window_set_child ((GtkScrolledWindow *)MainScrol[1], NULL); #endif } gboolean add = FALSE; if (! MainView) { MainView = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW(MainView), 0); text_view_set_monospace (MainView); add = TRUE; } gtk_text_view_set_buffer (GTK_TEXT_VIEW(MainView), buffer); #ifdef GTK3 if (! MainScrol[1]) { MainScrol[1] = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); gtk_container_add (GTK_CONTAINER(MainEvent), MainScrol[1]); add = TRUE; } if (add) gtk_container_add (GTK_CONTAINER(MainScrol[1]), MainView); #else if (add) { add_container_child (CONTAINER_SCR, MainScrol[1], MainView); } #endif show_the_widgets (MainScrol[1]); } /*! \fn void atomes_key_pressed (guint keyval, GdkModifierType state) \brief main window key actions callbacks \param keyval key id \param state modifier (Ctrl, Alt ...) */ void atomes_key_pressed (guint keyval, GdkModifierType state) { if (state & GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_a: create_about_dialog (NULL, NULL); break; case GDK_KEY_c: on_close_workspace (NULL, GINT_TO_POINTER(1)); break; case GDK_KEY_n: on_create_new_project (NULL, NULL); break; case GDK_KEY_o: on_open_save_activate (NULL, GINT_TO_POINTER(0)); break; case GDK_KEY_p: get_atom_id_from_periodic_table (NULL); break; case GDK_KEY_q: #ifdef GTK4 leaving_question (NULL, NULL); #else leaving_question (NULL, NULL, NULL); #endif break; case GDK_KEY_s: on_save_as_activate (NULL, GINT_TO_POINTER(3)); break; case GDK_KEY_t: on_show_curve_toolbox (NULL, NULL); break; case GDK_KEY_w: on_open_save_activate (NULL, GINT_TO_POINTER(2)); break; } } } /*! \fn G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) \brief show the periodic table of the elements \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) { get_atom_id_from_periodic_table (NULL); } /*! \fn G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief atomes menu bar actions \param action the GAction sending the signal the GSimpleAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "workspace.open") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.save") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.save-as") == 0) { on_save_as_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.close") == 0) { on_close_workspace (NULL, data); } else if (g_strcmp0 (name, "project.new") == 0) { on_create_new_project (NULL, data); } else if (g_strcmp0 (name, "project.edit") == 0) { change_project_name (NULL, data); } else if (g_strcmp0 (name, "project.active") == 0) { activate_project (NULL, data); } else if (g_strcmp0 (name, "project.compute") == 0) { compute_this_prop (NULL, data); } else if (g_strcmp0 (name, "project.open") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "project.save") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "project.save-as") == 0) { on_save_as_activate (NULL, data); } else if (g_strcmp0 (name, "project.close") == 0) { on_close_activate (NULL, data); } else if (g_strcmp0 (name, "export.isaacs") == 0) { on_isaacs_port (NULL, data); } else if (g_strcmp0 (name, "export.coordinates") == 0) { on_coord_port (NULL, data); } else if (g_strcmp0 (name, "import.isaacs") == 0) { on_isaacs_port (NULL, data); } else if (g_strcmp0 (name, "import.coordinates") == 0) { on_coord_port (NULL, data); } else if (g_strcmp0 (name, "program.quit") == 0) { leaving_from_menu (NULL, data); } else if (g_strcmp0 (name, "edit.chemistry") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "edit.periodicity") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "edit.cutoffs") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.tool-box") == 0) { on_show_curve_toolbox (NULL, data); } else if (g_strcmp0 (name, "help.periodic") == 0) { show_periodic_table (NULL, data); } else if (g_strcmp0 (name, "help.about") == 0) { create_about_dialog (NULL, data); } else if (g_strcmp0 (name, "help.shortcuts") == 0) { atomes_shortcuts = destroy_this_widget (atomes_shortcuts); atomes_shortcuts = shortcuts_window (G_N_ELEMENTS(main_group_by_section), main_group_by_section, G_N_ELEMENTS(main_shortcut_by_group), main_shortcut_by_group, main_section_names, main_group_names, main_shortcuts); } else if (g_strcmp0 (name, "help.preferences") == 0) { create_user_preferences_dialog (); } else { // Only remains analysis actions on_calc_activate (NULL, data); } g_free (name); } /*! \fn void add_analysis_action (int act) \brief add action to the main window action map \param the action the GAction sending the signal the action to add */ void add_analysis_action (int act) { gchar * str = g_strdup_printf ("analyze.%d", act); GSimpleAction * this_action = g_simple_action_new (str, NULL); g_free (str); g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(this_action)); g_signal_connect (this_action, "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(act)); } /*! \fn void remove_action (gchar * action_name) \brief add action from the main window action map \param action_name the action to remove */ void remove_action (gchar * action_name) { g_action_map_remove_action (G_ACTION_MAP(AtomesApp), (const gchar *)action_name); } /*! \fn void remove_edition_actions () \brief remove all edition actions */ void remove_edition_actions () { int i; for (i=0; iW", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL); g_free (str); if (! pop || nprojects) { str = g_strdup_printf ("%s.workspace.save", act); append_menu_item (menu, _("Save"), (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.workspace.save-as", act); append_menu_item (menu, _("Save As"), (const gchar *)str, "S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.workspace.close", act); append_menu_item (menu, _("Close"), (const gchar *)str, "C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (str); } return menu; } /*! \fn GMenu * port_section (gchar * act, int pop, int port) \brief create the import/export menu items \param act "app" or "pop" key for the GAction \param pop from main app (0) or contextual (1) \param port Import (1) or Export (0) */ GMenu * port_section (gchar * act, int pop, int port) { gchar * port_action[2]={"export", "import"}; GMenu * menu = g_menu_new (); gchar * str; str = g_strdup_printf ("%s.%s.isaacs", act, port_action[port]); append_menu_item (menu, _("ISAACS Project File (*.ipf)"), (const gchar *)str, NULL, NULL, IMG_FILE, PACKAGE_MOL, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.%s.coordinates", act, port_action[port]); append_menu_item (menu, _("Atomic Coordinates"), (const gchar *)str, NULL, NULL, IMG_FILE, (port) ? PACKAGE_IMP : PACKAGE_CON, FALSE, FALSE, FALSE, NULL); g_free (str); return menu; } /*! \fn GMenu * project_section (gchar * act, int pop_up, int proj, int calc) \brief create the project section \param act "app" or "pop" key for the GAction \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) \param calc calculation id, if any (or -1) */ GMenu * project_section (gchar * act, int pop_up, int proj, int calc) { GMenu * menu = g_menu_new (); gchar * str, * str_n; if (pop_up && nprojects && proj > -1) { if (activep != proj) { str = g_strdup_printf ("%s.project.active", act); append_menu_item (menu, _("Make Active"), (const gchar *)str, NULL, NULL, IMG_STOCK, YES, FALSE, FALSE, FALSE, NULL); g_free (str); } if (calc > -1) { str = g_strdup_printf ("%s.project.compute", act); str_n = g_strdup_printf (_("Analyze: %s"), _(graph_name[calc])); append_menu_item (menu, str_n, (get_project_by_id(proj) -> analysis[calc] -> avail_ok) ? (const gchar *)str : "None", NULL, NULL, IMG_FILE, graph_img[calc], FALSE, FALSE, FALSE, NULL); g_free (str); g_free (str_n); } str = g_strdup_printf ("%s.project.edit", act); append_menu_item (menu, _("Edit Name"), (const gchar *)str, NULL, NULL, IMG_STOCK, EDITA, FALSE, FALSE, FALSE, NULL); g_free (str); } if (! atomes_from_libreoffice) { str = g_strdup_printf ("%s.project.new", act); append_menu_item (menu, _("New"), (const gchar *)str, "N", NULL, IMG_STOCK, FNEW, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.open", act); append_menu_item (menu, _("Open"), (const gchar *)str, "O", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL); g_free (str); } if (! pop_up || proj > -1) { str = g_strdup_printf ("%s.project.save", act); append_menu_item (menu, _("Save"), (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.save-as", act); append_menu_item (menu, _("Save As"), (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (str); if (! atomes_from_libreoffice) { str = g_strdup_printf ("%s.project.close", act); append_menu_item (menu, _("Close"), (const gchar *)str, NULL, NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (str); } append_submenu (menu, _("Export"), port_section(act, pop_up, 0)); } return menu; } /*! \fn GMenu * import_section (gchar * act) \brief create the 'Import' submenu \param act "app" or "pop" key for the GAction */ GMenu * import_section (gchar * act) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Import"), port_section(act, 0, 1)); return menu; } /*! \fn GMenu * quit_section (gchar * act) \brief create the 'Quit' menu item \param act "app" or "pop" key for the GAction */ GMenu * quit_section (gchar * act) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("%s.program.quit", act); append_menu_item (menu, _("Quit"), (const gchar *)str, "Q", NULL, IMG_STOCK, FEXIT, FALSE, FALSE, FALSE, NULL); g_free (str); return menu; } /*! \fn GMenu * workspace_title () \brief create the 'Workspace' menu item */ GMenu * workspace_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Workspace"), "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * project_title (int pop_up, int proj) \brief create project title menu item \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) */ GMenu * project_title (int pop_up, int proj) { GMenu * menu = g_menu_new (); if (pop_up && nprojects && proj > -1) { gchar * str = g_strdup_printf ("%s", get_project_by_id(proj) -> name); append_menu_item (menu, str, "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); g_free (str); } else { append_menu_item (menu, _("Project(s)"), "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); } return menu; } /*! \fn GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) \brief create atomes 'workspace' menu \param act "app" or "pop" key for the GAction \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) \param calc calculation id, if any (or -1) */ GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) { GMenu * menu = g_menu_new (); if (! atomes_from_libreoffice) { g_menu_append_section (menu, NULL, (GMenuModel*)workspace_title()); g_menu_append_section (menu, NULL, (GMenuModel*)workspace_section(act, pop_up)); } g_menu_append_section (menu, NULL, (GMenuModel*)project_title(pop_up, proj)); g_menu_append_section (menu, NULL, (GMenuModel*)project_section(act, pop_up, proj, calc)); if (! atomes_from_libreoffice) { g_menu_append_section (menu, NULL, (GMenuModel*)import_section(act)); } g_menu_append_section (menu, NULL, (GMenuModel*)quit_section(act)); return menu; } /*! \fn GMenu * create_edit_menu () \brief create atomes 'edit' menu */ GMenu * create_edit_menu () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Chemistry and Physics"), "app.edit.chemistry", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Box and Periodicity"), "app.edit.periodicity", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Bond Cutoffs"), "app.edit.cutoffs", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * tool_box_section () \brief create toolboxes menu item */ GMenu * tool_box_section () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Toolboxes"), "app.analyze.tool-box", "T", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * create_analyze_menu () \brief create atomes 'analyze' menu */ GMenu * create_analyze_menu () { GMenu * menu = g_menu_new (); gchar * str; int i; for (i=0; iP", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); if (! atomes_from_libreoffice) append_menu_item (menu, _("Preferences"), "app.help.preferences", NULL, NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Shortcuts"), "app.help.shortcuts", NULL, NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("About"), "app.help.about", "A", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * atomes_menu_bar () \brief create atomes menu bar */ GMenu * atomes_menu_bar () { GMenu * menu = g_menu_new (); append_submenu (menu, _("Workspace"), create_workspace_menu("app", 0, -1, -1)); append_submenu (menu, _("Edit"), create_edit_menu()); append_submenu (menu, _("Analyze"), create_analyze_menu()); append_submenu (menu, _("Help"), create_help_menu()); return menu; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse right event to popup the main application 'workspace' menu \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY) { GtkWidget * popover = work_menu (-1, -1); gtk_widget_set_parent (popover, MainWindow); pop_menu_at_pointer (popover, x, y); } } /*! \fn G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief the GtkEventController for the keyboard button press event \param self the GtkEventController sending the signal \param keyval the \param keycode the key pressed \param state the keyboard modifier (Ctrl, Alt ... if any) \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { atomes_key_pressed (keyval, state); return TRUE; } #endif /*! \fn GtkWidget * create_main_window (GApplication * atomes) \brief create the main application window \param atomes the initial GtkApplication */ GtkWidget * create_main_window (GApplication * atomes) { int i; THETD = gdk_pixbuf_new_from_file (PACKAGE_TD, NULL); #ifdef GTK3 gtk_window_set_default_icon (THETD); #endif THEMO = gdk_pixbuf_new_from_file (PACKAGE_MOL, NULL); THEBD = gdk_pixbuf_new_from_file (g_build_filename (PACKAGE_PREFIX, "pixmaps/bd.png", NULL), NULL); SETTING = gdk_pixbuf_new_from_file (PACKAGE_PRO, NULL); SETTINGS = gdk_pixbuf_new_from_file (PACKAGE_SET, NULL); OGL = gdk_pixbuf_new_from_file (PACKAGE_OGL, NULL); OGLM = gdk_pixbuf_new_from_file (PACKAGE_OGLM, NULL); OGLC = gdk_pixbuf_new_from_file (PACKAGE_OGLC, NULL); GtkWidget * window = gtk_application_window_new (GTK_APPLICATION(atomes)); gtk_window_set_title (GTK_WINDOW(window), PACKAGE); gtk_window_set_resizable (GTK_WINDOW(window), TRUE); gtk_widget_set_size_request (window, 900, 450); for (i=0; i Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file callbacks.c * @short General callbacks \n Functions to open and close files * @author Sébastien Le Roux */ /* * This file: 'callbacks.c' * * Contains: * - General callbacks - The functions to open and close files * * List of functions: int signal_error (gchar * file, gchar * func, int error_line, int error_id); int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile); int open_save_workspace (FILE * fp, int act); int prep_chem_data (); int to_read_trj_or_vas (int ff); int read_npt_data (); int open_coordinate_file (int id); void quit_gtk (); void update_error_trace (gchar * file, gchar * func, int trace_line); void open_this_proj (gpointer data, gpointer user_data); void run_project (); void apply_project (gboolean showtools); void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible); void to_read_pos (); void check_read_sa (); void update_sa_info (int sid); void prepare_sp_box (); void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam); void open_this_coordinate_file (int format, gchar * proj_name); G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "callbacks.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "glwindow.h" #include "glview.h" #include "atom_edit.h" #include "cell_edit.h" #include "readers.h" char * coord_files[NCFORMATS+1] = {i18n("XYZ file"), i18n("XYZ file - NPT"), i18n("Chem3D file"), i18n("CPMD trajectory"), i18n("CPMD trajectory - NPT"), i18n("VASP trajectory"), i18n("VASP trajectory - NPT"), i18n("PDB file"), i18n("PDB file"), i18n("Cryst. information (crystal build) - single configuration"), i18n("Cryst. information (crystal build) - multiple configurations"), i18n("Cryst. information (symmetry positions) - single configuration"), i18n("DL-POLY HISTORY file"), i18n("ISAACS Project File")}; char * coord_files_ext[NCFORMATS+1]={"xyz", "xyz", "c3d", "trj", "trj", "xdatcar", "xdatcar", "pdb", "ent", "cif", "cif", "cif", "hist", "ipf"}; char ** las; extern void simple_image_render(); extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern const gchar * dfi[2]; extern int open_cif_file (gchar * filename); extern int open_coord_file (gchar * filename, int fti); extern int open_history_file (gchar * filename); extern int open_cell_file (int format, gchar * filename); extern double get_z_from_periodic_table (gchar * lab); /*! \fn G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) \brief close the active workspace \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) { int i, j; gboolean close = FALSE; j = GPOINTER_TO_INT (data); if (j == 1) { close = ask_yes_no (_("Close workspace ?"), _("Are you sure ?"), GTK_MESSAGE_QUESTION, MainWindow); } else { close = TRUE; } if (close) { j = nprojects-1; for (i=j; i>-1; i--) { #ifdef DEBUG g_debug ("CLOSING:: %d", i); #endif on_close_activate (NULL, GINT_TO_POINTER(i)); } } } gboolean save = TRUE; atomes_error * project_error = NULL; atomes_error_signal errors_messages[] = {{ ERROR_RW, i18n("I/O error")}, { ERROR_PROJECT, i18n("project information")}, { ERROR_CURVE, i18n("curve(s) information")}, { ERROR_IMAGE, i18n("OpenGL information")}, { ERROR_ATOM_A, i18n("atom's data - A")}, { ERROR_ATOM_B, i18n("atom's data - B")}, { ERROR_UPDATE, i18n("updating project")}, { ERROR_NO_WAY, i18n("this should not happen")}, { ERROR_COORD, i18n("coordination data")}, { ERROR_RINGS, i18n("ring(s) data")}, { ERROR_CHAINS, i18n("chain(s) data")}, { ERROR_MOL, i18n("molecule(s) data")}, { ERROR_ANA, i18n("analysis data")}, { ERROR_QM, i18n("ab-initio data")}, { ERROR_FIELD, i18n("classical data")}}; /*! \fn int signal_error (gchar * file, gchar * func, int error_line, int error_id) \brief store atomes files I/O error information \param file the file where the error occured \param func the function where the error occured \param error_line the line at witch the error occured \param error_id the error ID */ int signal_error (const char * file, const char * func, int error_line, int error_id) { project_error -> error_file = g_strdup_printf("%s", file); project_error -> error_func = g_strdup_printf("%s", func); project_error -> error_line = error_line; project_error -> error_signal = errors_messages[error_id-1]; return error_line; } /*! \fn void update_error_trace (gchar * file, gchar * func, int trace_line) \brief update atomes files I/O error traceback \param file the file where the call was made \param func the function the call was made to \param error_line the line at witch the call was made */ void update_error_trace (const char * file, const char * func, int trace_line) { gchar * intro = "\n"; gchar * file_part; gchar * func_part; gchar * line_part; gchar * tab_part = NULL; gchar * tmp_trace; int i; if (project_error -> trace_id) { tmp_trace = g_strdup_printf ("%s\n%s", project_error -> error_trace, intro); g_free (project_error -> error_trace); } else { tmp_trace = g_strdup_printf ("%s", intro); } for (i=0; i trace_id+1; i++) { tab_part = (tab_part) ? g_strdup_printf ("%s\t\t", tab_part) : g_strdup_printf ("\t\t"); } file_part = g_strdup_printf (_("File : %s\n"), file); func_part = g_strdup_printf (_("Function: %s()\n"), func); line_part = g_strdup_printf (_("Line : %d"), trace_line); project_error -> error_trace = g_strdup_printf ("%s%s%s%s%s%s%s", tmp_trace, tab_part, file_part, tab_part, func_part, tab_part, line_part); g_free (tmp_trace); g_free (tab_part); g_free (file_part); g_free (func_part); g_free (line_part); project_error -> trace_id ++; } /*! \fn int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile) \brief open or save project file \param fp the file pointer \param act 0 = read, 1 = write \param wid read or save workspace (1/0) \param pid the project id \param aid the active project id \param pfile the file name */ int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile) { int j; project_error = g_malloc0(sizeof*project_error); gchar * tmp_err; if (act == 0) { reading_input = TRUE; j = open_project (fp, wid); reading_input = FALSE; if (j != OK) { tmp_err = g_strdup_printf ("%s", get_project_by_id (pid) -> name); to_close_this_project (aid, active_project); } else { get_project_by_id (pid) -> projfile = g_strdup_printf ("%s", pfile); if (! atomes_render_image) { add_project_to_workspace (); prep_calc_actions (); } else { simple_image_render (); } } } else { j = save_project (fp, get_project_by_id(pid), wid); if (j == OK) { if (pfile != NULL) get_project_by_id(pid) -> projfile = g_strdup_printf ("%s", pfile); } else { tmp_err = g_strdup_printf ("%s", get_project_by_id(pid) -> name); } } if (j != OK) { gchar * err; if (pfile != NULL && ! wid) { err = g_strdup_printf (_("Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n"), (! act) ? _("open") : _("save"), pfile, (! act) ? _("reading") : _("saving"), _(project_error -> error_signal.message), project_file_version); } else if (wid) { err = g_strdup_printf (_("Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n"), (! act) ? _("open") : _("save"), tmp_err, (! act) ? _("reading") : _("saving"), _(project_error -> error_signal.message), project_file_version); } show_error_with_trace (err, project_error, act, 0, MainWindow); g_free (tmp_err); g_free (err); } g_free (project_error); project_error = NULL; return j; } /*! \fn void quit_gtk () \brief Leave the application */ void quit_gtk () { if (atomes_from_libreoffice) { // Update image for LibreOffice document atomes_render_image = TRUE; simple_image_render (); atomes_render_image = FALSE; // Mandatory saving of the project file FILE * fp = fopen (projfile, dfi[1]); open_save (fp, 1, 1, 0, 0, NULL); fclose (fp); to_close_this_project (0, active_project); } else { int i; for (i=nprojects-1; i>=0; i--) to_close_this_project (i, get_project_by_id(i)); } profree_ (); g_application_quit (G_APPLICATION(AtomesApp)); } /*! \fn int open_save_workspace (FILE * fp, int act) \brief open or save the active workspace \param fp the file to read or write \param act the action (0 = read, 1 = write) */ int open_save_workspace (FILE * fp, int act) { int i, j, k, l; gchar * ver; /*PangoFontDescription * font_desc; GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd;*/ // First 2 lines for compatibility issues if (act == 0) { if (fread (& i, sizeof(int), 1, fp) != 1) return 1; ver = g_malloc0(i*sizeof*ver); if (fread (ver, sizeof(char), i, fp) != i) return 1; // test on ver for version ? g_free (ver); if (fread (& i, sizeof(int), 1, fp) != 1) return 1; } else { i = 1; ver = g_strdup_printf ("%%\n%% Workspace file v-%1d.0\n%%\n", i); i = strlen (ver); if (fwrite (& i, sizeof(int), 1, fp) != 1) return 1; if (fwrite (ver, sizeof(char), i, fp) != i) return 1; g_free (ver); i = 0; for (j=0; j natomes) i++; if (fwrite (& i, sizeof(int), 1, fp) != 1) return 1; } if (i > 0) { for (j=0; j natomes) { l = open_save (fp, act, 1, j, k, NULL); if (l != 0) return l; } } return 0; } else { return -1; } } /*! \fn void open_this_proj (gpointer data, gpointer user_data) \brief Open many projects, one at a time \param data \param user_data */ void open_this_proj (gpointer data, gpointer user_data) { FILE * fp = fopen (data, dfi[0]); int pactive = activep; init_project (FALSE); reading_project = TRUE; open_save (fp, 0, 0, activew, pactive, data); reading_project = FALSE; fclose (fp); activew = activep; } tint osp; gboolean run_os; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) \brief open or save an atomes file - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) { GListModel * projlist; GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) \brief open or save an atomes file - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) { GSList * projlist = NULL; GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif FILE * fp = NULL; gchar * err; gboolean io = FALSE; const gchar * mess[2]={i18n("reading"),i18n("saving")}; if (response_id == GTK_RESPONSE_ACCEPT) { if (osp.a == 0) { projlist = file_chooser_get_file_names (chooser); } else { projfile = file_chooser_get_file_name (chooser); } if (osp.a > 1) { workspacefile = g_strdup_printf ("%s", projfile); } io = TRUE; } if (run_os) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } if (io) { if (osp.a > 0) { fp = fopen (projfile, dfi[osp.b]); } if (osp.a == 0) { #ifdef GTK3 g_slist_foreach (projlist, open_this_proj, NULL); g_slist_free (projlist); #else int i; for (i=0; i 0) { fclose (fp); g_free (projfile); } } } /*! \fn G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) \brief open or save an atomes file - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) { int i, j, k; gint action; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; GtkFileFilter * filter1, * filter2; const gchar * str[4]={i18n("Open Project File(s)"), i18n("Save Project File"), i18n("Open Workspace"), i18n("Save Workspace")}; const gchar * res[2]={i18n("Open"), i18n("Save")}; const gchar * file_name[2]={i18n("Project file (*.apf)"), i18n("Workspace file (*.awf)")}; const gchar * file_ext[2]={"*.apf", "*.awf"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; project * this_proj = get_project_by_id (activew); int pactive = activep; i = GPOINTER_TO_INT (data); run_os = FALSE; if (i == 1 || i == 3) { j = 1; } else { j = 0; } action = 0; if (i == 2 && ! newspace) { show_info (_("A workspace is already open !"), 0, MainWindow); } else if (i == 3 && newspace) { show_warning (_("Empty workspace ... nothing to be saved\n"), MainWindow); } else if (i == 3) { for (k=0; k natomes) action = 1; if (! action) { show_warning (_("Workspace contains only empty projects ... nothing to be saved\n"), MainWindow); } } else if (i == 1 && nprojects == 0) { show_warning (_("No project open ... nothing to be saved\n"), MainWindow); } else if (i == 1 && ! this_proj -> natomes) { show_warning (_("Empty project ... nothing to be saved\n"), MainWindow); } else { action = 1; } if (action) { if (nprojects == 0) { run_os = TRUE; } else { if (i == 1) { if (g_strcmp0(this_proj -> projfile, "(null)") == 0) this_proj -> projfile = NULL; if (save && this_proj -> projfile != NULL) { run_os = FALSE; projfile = g_strdup_printf ("%s", this_proj -> projfile); } else { run_os = TRUE; projfile = NULL; } } else if (i == 3) { if (g_strcmp0(workspacefile, "(null)") == 0) workspacefile = NULL; if (save && workspacefile != NULL) { run_os = FALSE; projfile = g_strdup_printf ("%s", workspacefile); } else { run_os = TRUE; } } else { run_os = TRUE; } } gchar * tmp_str; if (i == 0) { tmp_str = g_strdup_printf (_("%s - New project"), _(str[i])); } else if (i == 1) { tmp_str = g_strdup_printf ("%s - %s", _(str[i]), prepare_for_title(this_proj -> name)); } else { tmp_str = g_strdup_printf ("%s", _(str[i])); } info = create_file_chooser (tmp_str, GTK_WINDOW(MainWindow), act[j], _(res[j])); chooser = GTK_FILE_CHOOSER (info); g_free (tmp_str); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif if (i == 1 || i == 3) gtk_file_chooser_set_create_folders (chooser, TRUE); if (nprojects == 0 || i == 0) { file_chooser_set_current_folder (chooser); if (i == 0) { gtk_file_chooser_set_select_multiple (chooser, TRUE); } } else { if (i == 1) { if (projfile != NULL) { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, projfile); } else { if (! file_chooser_set_file_name (chooser, g_strdup_printf ("%s.apf", prepare_for_title(this_proj -> name)))) goto end; } } else if (i == 3) { if (workspacefile != NULL) { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, g_strdup_printf ("%s", workspacefile)); } else { if (! file_chooser_set_file_name (chooser, "New-Workspace.awf")) goto end; } } } filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _(file_name[i/2])); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), file_ext[i/2]); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); osp.a = i; osp.b = j; osp.c = pactive; if (run_os) { #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_open_save_active), this_proj); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_open_save_active), this_proj); #endif } else { #ifdef GTK4 run_on_open_save_active ((GtkNativeDialog *)info, GTK_RESPONSE_ACCEPT, this_proj); #else run_on_open_save_active ((GtkDialog *)info, GTK_RESPONSE_ACCEPT, this_proj); #endif } } activew = activep; update_insert_combos (); end:; } /*! \fn G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) \brief open or save, choosing a file name \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) { save = FALSE; on_open_save_activate (widg, data); save = TRUE; } /*! \fn void run_project () \brief send project data to Fortran90 */ void run_project () { if (! active_project -> run) { if (! active_project -> analysis) { init_atomes_analysis (active_project, TRUE); } int i, j; j = (active_cell -> npt) ? active_project -> steps : 1; for (i=0; i box[i].vect, active_cell -> box[i].param[0], active_cell -> box[i].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } to_read_pos (); prep_pos_ (& active_cell -> pbc, & active_cell -> frac); active_project -> dmtx = FALSE; active_project -> run = 1; } if (active_cell -> frac) active_cell -> frac = 0; } /*! \fn void apply_project (gboolean showtools) \brief get project ready for calculation and initialize the OpenGL window \param showtools */ void apply_project (gboolean showtools) { if (active_project -> natomes) { run_project (); initcutoffs (active_chem, active_project -> nspec); } prep_model (active_project -> id); if (showtools && ! atomes_render_image) show_the_widgets (curvetoolbox); } /*! \fn void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) \brief open an ISAACS XML file \param profile the XML file name \param ptoc the previous active project \param visible read from the command line (FALSE), from the gui (TRUE) */ void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) { if (! open_xml (profile)) { active_project -> name = substitute_string (g_path_get_basename (profile), ".ipf", NULL); on_edit_activate (NULL, GINT_TO_POINTER(3)); on_edit_activate (NULL, GINT_TO_POINTER(5)); active_project_changed (activep); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; apply_project (TRUE); active_project_changed (activep); add_project_to_workspace (); if (visible) show_info (_("ISAACS project file (XML) successfully opened"), 0, MainWindow); } else { to_close_this_project (ptoc, active_project); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) \brief open or write ISAACS XML file - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) \brief open or write ISAACS XML file - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { if (osp.a == 0 || nprojects == 0) init_project (TRUE); projfile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif if (osp.a == 0) { open_this_isaacs_xml_file (projfile, osp.b, TRUE); } else if (osp.a == 1) { active_project_changed (activew); if (write_xml (projfile) == 0) { show_error (_("Impossible to write the IPF file\n"), 0, MainWindow); } active_project_changed (osp.b); } g_free (projfile); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) \brief open or write ISAACS XML file - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer (int *) open = 0, save = 1 */ G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) { int i, j; gboolean action; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; GtkFileFilter * filter[2]; const gchar * file_ext[2]={"*.ipf", "*"}; const gchar * file_type[2]={i18n("IPF file (*.ipf)"), i18n("All files (*)")}; const gchar * str[2]={i18n("Import ISAACS Project File"), i18n("Export ISAACS Project File")}; const gchar * res[2]={i18n("Open"), i18n("Save")}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; int pactive = activep; i = GPOINTER_TO_INT (data); action = (i && ! nprojects) ? ask_yes_no (_("Save an empty project ?"), _("Do you want to save an empty project ?"), GTK_MESSAGE_QUESTION, MainWindow) : TRUE; if (action) { info = create_file_chooser (_(str[i]), GTK_WINDOW(MainWindow), act[i], _(res[i])); chooser = GTK_FILE_CHOOSER (info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif if (i) gtk_file_chooser_set_create_folders (chooser, TRUE); for (j=0; j<2; j++) { filter[j] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[j]), _(file_type[j])); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[j]), file_ext[j]); gtk_file_chooser_add_filter (chooser, filter[j]); } file_chooser_set_current_folder (chooser); osp.a = i; osp.b = pactive; #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_isaacs_port), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_isaacs_port), NULL); #endif } activew = activep; update_insert_combos (); } /*! \fn void to_read_pos () \brief send atomic coordinates to Fortran90 */ void to_read_pos () { int i, j, k; double * x, * y, * z; double lat[3]; x = allocdouble (active_project -> steps*active_project -> natomes); y = allocdouble (active_project -> steps*active_project -> natomes); z = allocdouble (active_project -> steps*active_project -> natomes); k = 0; lat[0] = lat[1] = lat[2] = 0.0; if (active_cell -> crystal) { for (i=0; i<3; i++) { for (j=0; j<3; j++) lat[i] -= active_box -> vect[j][i]/2.0; } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { x[k] = active_project -> atoms[i][j].x + lat[0]; y[k] = active_project -> atoms[i][j].y + lat[1]; z[k] = active_project -> atoms[i][j].z + lat[2]; k ++; } } read_pos_ (x, y, z); g_free (x); x = NULL; g_free (y); y = NULL; g_free (z); z = NULL; } GtkWidget * read_box; GtkWidget * all_sp_box = NULL; GtkWidget * sa_lab[2]; GtkWidget * sa_entry[2]; GtkWidget * read_this; int read_spec; /*! \fn void check_read_sa () \brief reading CPMD/VASP trajectory, testing parameters to active the read capabilty */ void check_read_sa () { int i, j, k; i = j = 0; for (k=0; k nspec; k++) { i += this_reader -> nsps[k]; j += (this_reader -> label[k]) ? 1: 0; } if (i == this_reader -> natomes && j == this_reader -> nspec) { widget_set_sensitive (read_this, 1); } else { widget_set_sensitive (read_this, 0); } } /*! \fn void update_sa_info (int sid) \brief reading CPMD/VASP trajectory, update chemical species info \param sid the species id */ void update_sa_info (int sid) { gchar * str = g_strdup_printf (_("Label of atomic spec. N° %d:"), sid+1); gtk_label_set_text (GTK_LABEL(sa_lab[0]), str); g_free (str); if (this_reader -> label[sid]) { update_entry_text (GTK_ENTRY(sa_entry[0]), this_reader -> label[sid]); str = g_strdup_printf (_("Number of %s atom(s):"), this_reader -> label[sid]); } else { update_entry_text (GTK_ENTRY(sa_entry[0]), ""); str = g_strdup_printf (_("Number of atom(s) for spec. N° %d:"), sid+1); } gtk_label_set_text (GTK_LABEL(sa_lab[1]), str); g_free (str); if (this_reader -> nsps[sid]) { update_entry_int (GTK_ENTRY(sa_entry[1]), this_reader -> nsps[sid]); } else { update_entry_text (GTK_ENTRY(sa_entry[1]), ""); } read_spec = sid; } /*! \fn G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) \brief reading CPMD/VASP trajectory, set the number of chemical species \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) { int i, v; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); if (i == 0) { if (this_reader -> label[read_spec]) g_free (this_reader -> label[read_spec]); this_reader -> label[read_spec] = NULL; this_reader -> label[read_spec] = g_strdup_printf ("%s", m); update_sa_info (read_spec); } else { v= (int)string_to_double ((gpointer)m); if (v > 0) { this_reader -> nsps[read_spec] = v; } update_entry_int (res, this_reader -> nsps[read_spec]); } check_read_sa (); } /*! \fn G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) \brief reading CPMD/VASP trajectory, change the active species \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) { update_sa_info (combo_get_active ((GtkWidget *)box)); } /*! \fn void prepare_sp_box () \brief eading CPMD/VASP trajectory, prepare the species combo box */ void prepare_sp_box () { int i; if (all_sp_box) { for (i=0; i<2; i++) { sa_lab[i] = destroy_this_widget(sa_lab[i]); sa_entry[i] = destroy_this_widget(sa_entry[i]); } all_sp_box = destroy_this_widget(all_sp_box); } widget_set_sensitive (read_this, 0); all_sp_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, read_box, all_sp_box, FALSE, FALSE, 20); GtkWidget * hbox; add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, markup_label(_("Chemical species info:"), 200, -1, 0.5, 0.5), FALSE, FALSE, 0); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Species: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * combo; combo = create_combo (); gchar * str; for (i=0; i nspec; i++) { str = g_strdup_printf ("N°%d", i+1); gtk_combo_box_text_append_text ((GtkComboBoxText *)combo, str); g_free (str); } combo_set_active (combo, 0); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(changed_spec_combo), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); for (i=0; i<2; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, hbox, FALSE, FALSE, 5); sa_lab[i] = markup_label("", 250, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sa_lab[i], FALSE, FALSE, 5); sa_entry[i] = create_entry (G_CALLBACK(update_sa), 100, 15, FALSE, GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sa_entry[i], FALSE, FALSE, 0); } show_the_widgets (read_box); update_sa_info (0); } /*! \fn G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) \brief reading CPMD/VASP trajectory, changing number of atomes or species \param res the GtkEntry sending the signal \param data the associated data pointer (int *) 0 = atomes, 1 = species */ G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) { int i, v; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); gboolean up = FALSE; v = (int)string_to_double ((gpointer)m); if (i == 0) { this_reader -> natomes = (v > 0) ? v : 0; update_entry_int (res, this_reader -> natomes); } else { if (v != this_reader -> nspec) { this_reader -> nspec = (v > 0) ? v : 0; if (this_reader -> nspec) { if (this_reader -> nsps) g_free (this_reader -> nsps); this_reader -> nsps = allocint (v); if (this_reader -> z) g_free (this_reader -> z); this_reader -> z = allocdouble (v); if (this_reader -> label) g_free (this_reader -> label); this_reader -> label = g_malloc0(v*sizeof*this_reader -> label); } up = TRUE; } update_entry_int (res, this_reader -> nspec); } if (up) prepare_sp_box(); } int reading_vas_trj; /*! \fn int prep_chem_data () \brief prepare chemical data to read CPMD/VASP file */ int prep_chem_data () { int i; double z; for (i=0; i nspec; i++) { z = get_z_from_periodic_table (this_reader -> label[i]); if (! z) return 0; this_reader -> z[i] = z; } return 1; } /*! \fn G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) \brief reading CPMD/VASP trajectory: run the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) { int id = GPOINTER_TO_INT(data); switch (response_id) { case GTK_RESPONSE_APPLY: if (prep_chem_data()) { reading_vas_trj = open_coord_file (active_project -> coordfile, id); } else { reading_vas_trj = 3; } break; default: reading_vas_trj = 3; break; } if (all_sp_box) { int i; for (i=0; i<2; i++) { sa_lab[i] = destroy_this_widget(sa_lab[i]); sa_entry[i] = destroy_this_widget(sa_entry[i]); } all_sp_box = destroy_this_widget(all_sp_box); } destroy_this_dialog (dialog); } /*! \fn int to_read_trj_or_vas (int ff) \brief reading CPMD/VASP trajectory - prepare the dialog \param ff file type */ int to_read_trj_or_vas (int ff) { int i; gchar * rlabel[2]={i18n("Total number of atom(s):"), i18n("Number of chemical species:")}; GtkWidget * dialog = dialogmodal (_("Reading CPMD / VASP trajectory"), GTK_WINDOW(MainWindow)); read_this = gtk_dialog_add_button (GTK_DIALOG (dialog), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (dialog); widget_set_sensitive (read_this, 0); GtkWidget * rentry; GtkWidget * hbox; for (i=0; i<2; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(rlabel[i]), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); rentry = create_entry (G_CALLBACK(update_at_sp), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_text (GTK_ENTRY(rentry), ""); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rentry, FALSE, FALSE, 5); } read_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, read_box, FALSE, FALSE, 5); run_this_gtk_dialog (dialog, G_CALLBACK(run_to_read_trj_or_vas), GINT_TO_POINTER(ff)); return reading_vas_trj; } /*! \fn void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) \brief update cell parameters from the data in the PDB file \param a a \param b b \param c c \param alp alpha \param bet beta \param gam gamma */ void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) { active_box -> param[0][0] = * a; active_box -> param[0][1] = * b; active_box -> param[0][2] = * c; active_box -> param[1][0] = * alp; active_box -> param[1][1] = * bet; active_box -> param[1][2] = * gam; // In a PDB file it is required to turn off PBC // The box usually barely encompass the molecule active_cell -> pbc = 0; active_cell -> ltype = 1; } int npt_selection; gchar * npt_file; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) \brief read NPT data associated with atomic coordinates: run the dialog GTK4 callback \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) \brief read NPT data associated with atomic coordinates: run the dialog GTK3 callback \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { npt_file = file_chooser_get_file_name (chooser); npt_selection = iask (_("Please select the file format of the NPT cell data"), _("Select format:"), 6, MainWindow); } else { npt_selection = -1; } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn int read_npt_data () \brief read NPT data associated with atomic coordinates: setup the dialog */ int read_npt_data () { GtkFileFilter * filter[2]; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Read cell data for NPT molecular dynamics"), GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_OPEN, _("Open")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); filter[0] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[0]), _("DAT files (*.dat)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[0]), "*.dat"); gtk_file_chooser_add_filter (chooser, filter[0]); filter[1] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[1]), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[1]), "*"); gtk_file_chooser_add_filter (chooser, filter[1]); npt_file = NULL; #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_read_npt_data), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_read_npt_data), NULL); #endif return (npt_selection < 0) ? 0 : open_cell_file (npt_selection, npt_file); } /*! \fn int open_coordinate_file (int id) \brief try to open coordinate file, type is based of id \param id file type to open */ int open_coordinate_file (int id) { struct timespec sta_time; struct timespec sto_time; int result; int length = strlen(active_project -> coordfile); clock_gettime (CLOCK_MONOTONIC, & sta_time); this_reader = g_malloc0(sizeof*this_reader); // Set default message type to warning this_reader -> mid = 1; switch (id) { case 0: // XYZ file result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); break; case 1: // XYZ file NPT result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); if (! result) result = read_npt_data (); break; case 2: // Chem3D file result = open_coord_file (active_project -> coordfile, id); // result = read_c3d_ (active_project -> coordfile, & length); break; case 3: // CPMD TRJ file result = to_read_trj_or_vas (id); break; case 4: // CPMD TRJ file NPT result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 5: // VASP XDATCAR file result = to_read_trj_or_vas (id); break; case 6: // VASP XDATCAR file NPT result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 7: // PDB file // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 8: // PDB file // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 9: // CIF file building the crystal result = open_coord_file (active_project -> coordfile, 9); break; case 10: // CIF file using symmetry positions result = open_coord_file (active_project -> coordfile, 10); break; case 11: // CIF file using symmetry positions result = open_coord_file (active_project -> coordfile, 11); break; case 12: // DL-POLY file result = open_coord_file (active_project -> coordfile, 12); break; default: result = 2; break; } clock_gettime (CLOCK_MONOTONIC, & sto_time); g_print ("Time to read atomic coordinates: %s\n", calculation_time(FALSE, get_calc_time (sta_time, sto_time))); if (this_reader) { if (this_reader -> msg && (! silent_input || cif_use_symmetry_positions)) { gchar * info = g_strdup_printf ("%s", this_reader -> info[0]); int i; for (i=1; i msg; i++) { info = g_strdup_printf ("%s\n%s", info, this_reader -> info[i]); } switch (this_reader -> mid) { case 0: show_error (info, 0, MainWindow); break; case 1: show_warning (info, MainWindow); break; } g_free (info); } if (this_reader) { if (this_reader -> info) g_free (this_reader -> info); if (this_reader -> z) g_free (this_reader -> z); if (this_reader -> nsps) g_free (this_reader -> nsps); if (this_reader -> dummy) g_free (this_reader -> dummy); if (this_reader -> label) g_free (this_reader -> label); if (this_reader -> object_list) g_free (this_reader -> object_list); if (this_reader -> u_atom_list) g_free (this_reader -> u_atom_list); if (this_reader -> coord) g_free (this_reader -> coord); if (this_reader -> lot) g_free (this_reader -> lot); if (this_reader -> sym_pos) g_free (this_reader -> sym_pos); if (this_reader -> wyckoff) g_free (this_reader -> wyckoff); if (this_reader -> occupancy) g_free (this_reader -> occupancy); if (this_reader -> disorder) g_free (this_reader -> disorder); if (this_reader -> multi) g_free (this_reader -> multi); if (this_reader -> lattice.sp_group) g_free (this_reader -> lattice.sp_group); if (this_reader -> lattice.box) g_free (this_reader -> lattice.box); g_free (this_reader); this_reader = NULL; } } switch (result) { case 1: show_error (_("Error loading atomic coordinates:\nfile does not exist"), 0, MainWindow); break; case 2: show_error (_("Error loading coordinates file: format not supported"), 0, MainWindow); break; case 3: show_error (_("Error at input: impossible to process input file data"), 0, MainWindow); break; default: if (id > 6 && id < 9) { clock_gettime (CLOCK_MONOTONIC, & sta_time); if (! prep_data_ ()) { show_error (_("Error while parsing the chemical information\n" "please check carefully the coordinates file"), 0, MainWindow); result = 4; } clock_gettime (CLOCK_MONOTONIC, & sto_time); g_print ("Time to prepare data: %s\n", calculation_time(FALSE, get_calc_time (sta_time, sto_time))); } break; } return result; } GtkFileFilter * filter[NCFORMATS+1]; int pactive; /*! \fn void open_this_coordinate_file (int format, gchar * proj_name) \brief open coordinate file format, if successful add to workspace \param format the format of the file that contains the atomic coordinates \param proj_name the project name to use, if any */ void open_this_coordinate_file (int format, gchar * proj_name) { active_project -> newproj = FALSE; clock_gettime (CLOCK_MONOTONIC, & start_time); if (open_coordinate_file (format) == 0) { clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print ("Time to open coordinate file: %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); active_project -> tfile = format; if (proj_name) { active_project -> name = g_strdup_printf ("%s", proj_name); } else { gchar * str = g_path_get_basename (active_project -> coordfile); active_project -> name = g_strdup_printf ("%s", substitute_string (str, g_strdup_printf (".%s", coord_files_ext[format]), NULL)); g_free (str); } on_edit_activate (NULL, GINT_TO_POINTER(0)); if (format != 1 && format != 4 && format != 6 && format != 9 && format != 10 && format != 11 && format != 12) on_edit_activate (NULL, GINT_TO_POINTER(4)); initcutoffs (active_chem, active_project -> nspec); on_edit_activate (NULL, GINT_TO_POINTER(2)); active_project_changed (activep); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; chemistry_ (); apply_project (TRUE); active_project_changed (activep); if (atomes_render_image) { simple_image_render(); } else { if ((format == 9 || format == 10 || format == 11) && active_cell -> has_a_box) { #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_rep[0], TRUE); set_rep (active_glwin -> ogl_rep[0], & active_glwin -> colorp[0][0]); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_clones[0], TRUE); widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); show_hide_clones (active_glwin -> ogl_clones[0], active_glwin); #endif shift_it (vec3 (0.0, 0.0, 0.0), 1, activep); active_glwin -> wrapped = TRUE; } add_project_to_workspace (); if ((format == 9 || format == 10) && cif_use_symmetry_positions) { gchar * file_name = g_strdup_printf ("%s", active_project -> coordfile); gchar * proj_name = g_strdup_printf (_("%s - symmetry position(s)"), active_project -> name); init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s", file_name); g_free (file_name); open_this_coordinate_file (11, proj_name); g_free (proj_name); } } } else { to_close_this_project (pactive, active_project); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) \brief export or import atomic coordinates: run dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) \brief export or import atomic coordinates: run dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i, j, k, l, m; GtkFileFilter * tmp; int format; int car_to_au; i = GPOINTER_TO_INT(data); gchar * tmp_str; switch (response_id) { case GTK_RESPONSE_ACCEPT: tmp = gtk_file_chooser_get_filter (chooser); active_project -> coordfile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif j = 0; while (tmp != filter[j]) j++; if (i == 0) { #ifdef OSX j = NCFORMATS; #endif if (j == NCFORMATS) { j = iask (_("Please select the file format of the atomic coordinates"), _("Select format:"), 2, MainWindow); } open_this_coordinate_file (j, NULL); } else { if (j < 2) { format = iask (_("Please select the format of the atomic coordinates"), _("Select format:"), 1, MainWindow); } else { format = 0; } active_cell -> frac = (format < 2) ? 0 : format - 1; car_to_au = (format == 1) ? 1 : 0; if (j < 2) { m = (active_cell -> npt) ? active_project -> steps : 1; for (l=0; l box[l].vect, active_cell -> box[l].param[0], active_cell -> box[l].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } to_read_pos (); } int length = strlen (active_project -> coordfile); for (l=1; l nspec+1; l++) { m = strlen(active_chem -> label[l-1]); send_label_ (& l, & m, active_chem -> label[l-1]); } switch (j) { case 0: k = write_xyz_ (active_project -> coordfile, & length, & active_cell -> frac, & car_to_au); break; case 1: k = write_c3d_ (active_project -> coordfile, & length, & active_cell -> frac, & car_to_au); break; } if (k) { tmp_str = g_strdup_printf (_("Impossible to export the atomic coordinates\nError code: %d"), k); show_error (tmp_str, 0, MainWindow); g_free (tmp_str); } active_project_changed (pactive); } break; default: if (i == 0) { to_close_this_project (pactive, active_project); } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif break; } } /*! \fn G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) \brief export or import atomic coordinates: prepare dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) { int i, j; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; gchar * tmp_str; int num_files[2]={NCFORMATS, 2}; const gchar * str[2]= {i18n("Import atomic coordinates"), i18n("Export atomic coordinates")}; const gchar * res[2]= {i18n("Open"), i18n("Save")}; char * out_files[2] = {i18n("XYZ file"), i18n("Chem3D file")}; char * out_ext[2]={"xyz", "c3d"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; pactive = activep; i = GPOINTER_TO_INT (data); if ((nprojects > 0 && get_project_by_id(activew) -> natomes) || i == 0) { if (i == 0) { init_project (TRUE); } else { active_project_changed (activew); } tmp_str = g_strdup_printf ("%s - %s", prepare_for_title(active_project -> name), _(str[i])); info = create_file_chooser (tmp_str, GTK_WINDOW(MainWindow), act[i], _(res[i])); g_free (tmp_str); chooser = GTK_FILE_CHOOSER(info); if (i) gtk_file_chooser_set_create_folders (chooser, TRUE); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif for (j=0; j%s is empty ... nothing to be saved\n"), get_project_by_id(activew) -> name); show_warning (tmp_str, MainWindow); g_free (tmp_str); } } activew = activep; update_insert_combos (); } atomes_1.3.1/src/gui/interface.h0000664000175000017500000000476015212624223016200 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file interface.h * @short Messaging function declarations * @author Sébastien Le Roux */ /* * This header file: 'interface.h' * * Contains: - Messaging function declarations */ #ifndef INTERFACE_H_ #define INTERFACE_H_ G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data); void show_info (char * information, int val, GtkWidget * win); void show_info_ (double * valdij); void show_warning (char * warning, GtkWidget * win); void show_warning_ (char * warning, char * sub, char * tab); void show_error (char * error, int val, GtkWidget * win); void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win); void show_error_ (char * error, char * sub, char * tab); gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg); gchar * exact_name (gchar * name); GtkWidget * show_pop (char * pop, GtkWidget * pwin); #ifdef GTK4 G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data); #else G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data); #endif int dummy_ask_ (char * question); int iask (char * question, char * lab, int id, GtkWidget * win); gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win); void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer); gchar * textcolor (int i); gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer); void init_data_ (int * nats, int * nspc, int * stps, int * cid); void update_after_calc (int calc); // In init.c: void prepostcalc (GtkWidget * widg, gboolean status, int run, int adv, double opc); void prep_calc_actions (); void init_atomes_analysis (project * this_proj, gboolean apply_defaults); #endif atomes_1.3.1/src/gui/preferences.h0000664000175000017500000001203415212624223016532 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file preferences.h * @short Preference variable declarations * @author Sébastien Le Roux */ /* * This header file: 'preferences.h' * * Contains: - Preference variable declarations */ #ifndef PREFERENCES_H_ #define PREFERENCES_H_ /*! \typedef bond_cutoff \brief bond cutoff data structure */ typedef struct bond_cutoff bond_cutoff; struct bond_cutoff { int Z[2]; /*!< Atomic numbers */ double cutoff; /*!< Associated radius */ gboolean use; /*!< Use or not */ bond_cutoff * next; bond_cutoff * prev; }; /*! \typedef element_radius \brief element radius data structure */ typedef struct element_radius element_radius; struct element_radius { int Z; /*!< Atomic number */ double rad; /*!< Associated radius */ element_radius * next; element_radius * prev; }; /*! \typedef element_color \brief element color data structure */ typedef struct element_color element_color; struct element_color { int Z; /*!< Atomic number */ ColRGBA col; /*!< Associated color */ element_color * next; element_color * prev; }; /*! \typedef rep_data \brief representation data structure */ typedef struct rep_data rep_data; struct rep_data { int rep; int proj; GLdouble c_angle[2]; /*!< Camera angle: pitch and heading */ GLdouble c_shift[2]; /*!< Camera position: x and y */ GLdouble gnear; /*!< Camera depth position */ GLdouble zoom; /*!< Zoom factor */ }; extern float get_radius (int object, int col, int z, element_radius * rad_list); extern ColRGBA get_spec_color (int z, element_color * clist); extern GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign); extern void duplicate_background_data (background * new_back, background * old_back); extern void duplicate_box_data (box * new_box, box * old_box); extern void duplicate_axis_data (axis * new_axis, axis * old_axis); // Analysis parameters extern gboolean preferences; extern double default_totcut; extern double tmp_totcut; extern bond_cutoff * default_bond_cutoff; extern bond_cutoff * tmp_bond_cutoff; extern int * default_num_delta; extern int * tmp_num_delta; // Ring statistics extern gchar * default_ring_param[7] ; extern int * default_rsparam; extern int * tmp_rsparam; // Chain statistics extern gchar * default_chain_param[7]; extern int * default_csparam; extern int * tmp_csparam; // Dynamic extern double * default_delta_t; extern double * tmp_delta_t; // F(k,t) and S(q,w) extern gboolean default_skt_sets; extern int default_skt_n_sets; extern int default_sqw_n_sets; extern int default_sqw_freq; extern gboolean tmp_skt_sets; extern int tmp_skt_n_sets; extern int tmp_sqw_n_sets; extern int tmp_sqw_freq; // OpenGL extern int * default_opengl; extern int * tmp_opengl; extern Material default_material; extern Material tmp_material; extern Lightning default_lightning; extern Lightning tmp_lightning; extern Fog default_fog; extern Fog tmp_fog; // Model extern element_radius * default_atomic_rad[16]; extern element_radius * tmp_atomic_rad[16]; // 3 styles + 3 cloned styles extern element_radius * default_bond_rad[6]; extern element_radius * tmp_bond_rad[6]; extern gboolean default_clones; extern gboolean * default_o_at_rs; extern double * default_at_rs; extern gboolean * default_o_bd_rw; extern double * default_bd_rw; extern screen_label default_label[5]; extern screen_label * tmp_label[5]; extern int default_acl_format[2]; extern int tmp_acl_format[2]; extern gboolean default_mtilt[2]; extern gboolean tmp_mtilt[2]; extern int default_mpattern[2]; extern int tmp_mpattern[2]; extern int default_mfactor[2]; extern int tmp_mfactor[2]; extern double default_mwidth[2]; extern double tmp_mwidth[2]; extern rep_data default_rep; extern rep_data * tmp_rep; extern rep_edition * pref_rep_win; extern background default_background; extern background * tmp_background; extern box default_box; extern box * tmp_box; extern box_edition * pref_box_win; extern axis default_axis; extern axis * tmp_axis; extern axis_edition * pref_axis_win; extern ColRGBA default_sel_color[2]; extern gradient_edition * pref_gradient_win; extern element_color * default_label_color[2]; extern element_color * default_atom_color[2]; extern tint * pref_pointer; extern opengl_edition * pref_ogl_edit; extern void set_atomes_preferences (); #endif // PREFERENCES_H_ atomes_1.3.1/src/gui/calc_menu.c0000664000175000017500000022140615212624223016157 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file calc_menu.c * @short Creation of the calculation dialogs * @author Sébastien Le Roux */ /* * This file: 'calc_menu.c' * * Contains: * - The creation of the calculation dialogs * * List of functions: gboolean test_gr (int rdf); gboolean test_sq (int fdq); gboolean test_bonds (); gboolean test_rings (); gboolean test_sph (); gboolean test_msd (); gboolean test_skt (); void update_omega_max (); void calc_sph (GtkWidget * vbox); void calc_msd (GtkWidget * vbox, int cid); void calc_rings (GtkWidget * vbox); void calc_bonds (GtkWidget * vbox); void add_advanced_options (int skq, dint skadv[2], GtkWidget * vbox); void add_smoothing_options (int grsqk, GtkWidget * vbox); void calc_gr_sq (GtkWidget * box, int id); void add_remove_t_steps_q_vectors (int val, int calc); void add_correlations_options (int cid); void calc_sk_t (GtkWidget * box); G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void combox_rings_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data); G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data); G_MODULE_EXPORT void set_skt_step_id (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_sqw_q_id (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_t_q_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_correlations (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void toggle_skt_all (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_skt_all (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); GtkWidget * calc_window (int i); GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id); GtkWidget * hbox_note (int i, double val); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "preferences.h" #include "bind.h" #include "project.h" #include "workspace.h" extern G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data); extern void dyna_parameters (GtkWidget * vbox, int cid); GtkWidget * calc_win = NULL; GtkWidget * ba_entry[2]; int search_type; /*! \fn GtkWidget * calc_window (int i) \brief create a calculation window \param i the calculation id */ GtkWidget * calc_window (int i) { calc_dialog = dialog_cancel_apply (calc_name[i], MainWindow, FALSE); return calc_dialog; } void add_remove_t_steps_q_vectors (int val, int calc); /*! \fn G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) \brief set a maximum value \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v > 0.0 && v > active_project -> analysis[c] -> min) { if (active_project -> analysis[c] -> max != v) { active_project -> analysis[c] -> max = v; if (c == SKT) { add_remove_t_steps_q_vectors (active_project -> sqw_n_data_sets, 1); } // Max has changed do something !? } } update_entry_double (entry, active_project -> analysis[c] -> max); } GtkWidget * rings_box[2]; GtkWidget * omega_max_hbox = NULL; GtkWidget * omega_max_info = NULL; /*! \fn void update_omega_max () \brief update omega max information string */ void update_omega_max () { gchar * freq_unit[5]={" THz", " THz", " MHz", " KHz", " Hz"}; gchar * str; omega_max_info = destroy_this_widget (omega_max_info); double delt = (preferences) ? tmp_delta_t[0]: active_project -> analysis[MSD] -> delta; int num_delt = (preferences) ? tmp_num_delta[MSD-2] : active_project -> analysis[MSD] -> num_delta; int t_unit = (preferences) ? (int)tmp_delta_t[1] : active_project -> tunit; if ( delt > 0.0 && num_delt && t_unit > -1) { omega_max_info = create_hbox(0); double omega_max = pi/(delt * num_delt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_info, markup_label (_("ωmax ="), 50, -1, 0.0, 0.5), FALSE, FALSE, 2); str = g_strdup_printf ("%f", (t_unit == 1) ? omega_max : omega_max * 1000.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_info, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_info, markup_label (freq_unit[t_unit], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { str = g_strdup_printf (_("Update step(s) between conf. and δt to evaluate ωmax")); omega_max_info = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_hbox, omega_max_info, FALSE, FALSE, 5); show_the_widgets (omega_max_hbox); } /*! \fn G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) \brief set the number of delta between data points \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); int i, j, k; i = (int)v; if (c == RIN) { if (preferences) { k = tmp_rsparam[2]; } else { j = combo_get_active (rings_box[0]); k = active_project -> rsparam[j][1]; } } else if (c == CHA) { k = (preferences) ? tmp_csparam[1] : active_project -> csparam[5]; } else if (c > -1 && ! preferences) { k = active_project -> analysis[c] -> num_delta; } if (c < 0 && ! preferences) { if (v > 0.0) { if (active_project -> analysis[-c] -> delta != v) { active_project -> analysis[-c] -> delta = v; } } } else if (i > 0 && ! preferences) { if (c == RIN) { if (active_project -> rsparam[j][1] != i) { active_project -> rsparam[j][1] = i; } k = active_project -> rsparam[j][1] = i; } else if (c == CHA) { if (active_project -> csparam[5] != i) { active_project -> csparam[5] = i; } k = active_project -> csparam[5] = i; } else { if (active_project -> analysis[c] -> num_delta != i) { active_project -> analysis[c] -> num_delta = i; } k = active_project -> analysis[c] -> num_delta; } } if (c < 0) { update_entry_double (entry, active_project -> analysis[-c] -> delta); } else { update_entry_int (entry, k); } if (omega_max_hbox) update_omega_max (); } /*! \fn G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) \brief change time units \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) { active_project -> tunit = combo_get_active ((GtkWidget *)box); if (omega_max_hbox) update_omega_max (); } /*! \fn void calc_sph (GtkWidget * vbox) \brief creation of the spherical harmonics calculation widgets \param vbox GtkWidget that will receive the data */ void calc_sph (GtkWidget * vbox) { GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ( _("Maximum l, lmax ∈ [2-40]"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(SPH)); update_entry_int (GTK_ENTRY(entry), active_project -> analysis[SPH] -> num_delta); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); } /*! \fn void calc_msd (GtkWidget * vbox, int cid) \brief creation of the MSD calculation widgets \param vbox GtkWidget that will receive the data \param cid calculation id, MSD or SKT */ void calc_msd (GtkWidget * vbox, int cid) { int i, j, k, l, m; gchar * val_b[3]={i18n("Number of configurations:"), i18n("\tTime step δt used during the dynamics:"), i18n("\tNumber of step(s) between each configuration:")}; gchar * val_c[3]={i18n("Number of configurations:"), i18n("Time step δt"), i18n("Step(s) between conf.")}; GtkWidget * hbox; GtkWidget * entry; k = (cid == MSD) ? 15 : 0; l = (cid == MSD) ? 350 : 150; m = (cid == MSD) ? 0 : 5; hbox = create_hbox (k); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (_(val_b[0])), FALSE, FALSE, m); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf ("%d",active_project -> steps), -1, 50, 0.5, 0.5), FALSE, FALSE, 10); for (i=1; i<3; i++) { hbox = create_hbox (k); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ((cid == MSD) ? _(val_b[i]) : _(val_c[i]), l, -1, 0.0, 0.5), FALSE, FALSE, m); if (i == 1) { entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(-MSD)); update_entry_double (GTK_ENTRY(entry), active_project -> analysis[MSD] -> delta); } else { entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(MSD)); update_entry_int (GTK_ENTRY(entry), active_project -> analysis[MSD] -> num_delta); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 2*m); if (i == 1) { GtkWidget * tcombo = create_combo (); for (j=0; j<5 ; j++) combo_text_append (tcombo, untime[j]); combo_set_active (tcombo, active_project -> tunit); g_signal_connect(G_OBJECT(tcombo), "changed", G_CALLBACK(combox_tunit_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, tcombo, FALSE, FALSE, 0); } } } /*! \fn G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) \brief set the rings/chains statistics parameter NUMA \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) { const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); int i, j; i = (int)v; if (i > 0) { if (! search_type) { if (preferences) { tmp_rsparam[3] = i; } else { if (active_project -> rsearch[1] != i) active_project -> rsearch[1] = i; j = active_project -> rsearch[1]; } } else { if (preferences) { tmp_csparam[2] = i; } else { if (active_project -> csearch != i) active_project -> csearch = i; j = active_project -> csearch; } } } else { if (preferences) { j = (search_type) ? tmp_csparam[2] : tmp_rsparam[3]; } else { j = (search_type) ? active_project -> csearch : active_project -> rsearch[1]; } } update_entry_int (entry, j); } /*! \fn GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) \brief create a combo box for the ring statistics calculation \param str label of the combo box \param num number of values to insert in the combo box \param list_item text data to insert in the combo boc \param id id of the box to create */ GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) { int i; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); // GtkWidget * fixed = gtk_fixed_new (); rings_box[id] = create_combo (); gtk_widget_set_size_request (rings_box[id], 180, -1); for (i=0; i rsearch[0] = combo_get_active ((GtkWidget *)box); widget_set_sensitive (rings_box[1], (active_project -> rsearch[0]<0) ? 0 : 1); combo_set_active (rings_box[1], active_project -> rsparam[active_project -> rsearch[0]][0]); for (i=0; i<2; i++) widget_set_sensitive (rings_entry[i], (active_project -> rsearch[0]<0) ? 0 : 1); for (i=0; i<3; i++) widget_set_sensitive (rings_check[i], (active_project -> rsearch[0]<0) ? 0 : 1); update_entry_int (GTK_ENTRY(rings_entry[0]), active_project -> rsparam[active_project -> rsearch[0]][1]); i = combo_get_active (rings_box[0]); for (j=0; j<3; j++) { button_set_status (rings_check[j], active_project -> rsparam[i][j+2]); } } } else { if (search_type) { if (preferences) { tmp_csparam[0] = combo_get_active ((GtkWidget *)box); } else { active_project -> csparam[0] = combo_get_active ((GtkWidget *)box); } } else { if (preferences) { tmp_rsparam[1] = combo_get_active ((GtkWidget *)box); } else { i = combo_get_active (rings_box[0]); active_project -> rsparam[i][0] = combo_get_active ((GtkWidget *)box); } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) \brief toggle a rings statistics calculation parameter \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) \brief toggle a rings statistics calculation parameter \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) #endif { int oid = GPOINTER_TO_INT(data); int i; gboolean status; status = button_get_status ((GtkWidget *)but); switch (search_type) { case 0: i = combo_get_active (rings_box[0]); if (preferences) { tmp_rsparam[oid+4] = status; } else { active_project -> rsparam[i][oid+2] = status; } break; case 1: if (preferences) { tmp_csparam[oid+3] = status; } else { active_project -> csparam[oid+1] = status; } if (oid == 0 && status) { for (i=1; i<4; i++) { button_set_status(rings_check[i], ! status); active_project -> csparam[i+1] = ! status; } } else if (oid == 1 && status) { button_set_status(rings_check[0], ! status); active_project -> csparam[1] = ! status; } else if (oid == 2 && status) { button_set_status(rings_check[1], ! status); active_project -> csparam[2] = ! status; } break; } } /*! \fn void calc_rings (GtkWidget * vbox) \brief creation of the rings statistics calculation widgets \param vbox GtkWidget that will receive the data */ void calc_rings (GtkWidget * vbox) { gchar * defs[6]={i18n("All Rings (No Rule)"), i18n("King's [1, 3]"), i18n("Guttman's [2]"), i18n("Primitives [4, 5, 6]"), i18n("Strongs [4, 5]")}; gchar * val_a[2]={i18n("Definition of ring to be used: "), i18n("Atom(s) to initiate the search from: ")}; gchar * val_b[2][2]={{i18n("nmax = maximum size for a ring *"), i18n("Maximum number of rings of size n per MD step **")}, {i18n("nmax = maximum size for a chain *"), i18n("Maximum number of chains of size n per MD step **")}}; gchar * val_c[2][4]={{i18n("Only search for ABAB rings"), i18n("No homopolar bonds in the rings (A-A, B-B ...) ***"), i18n("No homopolar bonds in the connectivity matrix"), " "}, {i18n("Only search for AAAA chains"), i18n("Only search for ABAB chains"), i18n("No homopolar bonds in the chains (A-A, B-B ...) ***"), i18n("Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains.")}}; gchar * start[3]={"*", "**", "***"}; gchar * val_d[3]={i18n("in total number of nodes (or atoms)"), i18n("value used for memory allocation = f(nmax, system studied)"), i18n("but homopolar bonds can shorten the rings")}; gchar * val_e={i18n("[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002).")}; gchar * list_node[(preferences) ? 2 : active_project -> nspec+1]; int i, j, k; if (! search_type) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, combox_rings (_(val_a[0]), 5, defs, 0), FALSE, FALSE, 5); list_node[0] = g_strdup_printf (_("All")); if (preferences) { list_node[1] = g_strdup_printf (_("Chemical Species")); } else { for (i=0; i nspec; i++) list_node[i+1] = g_strdup_printf ("%s", active_chem -> label[i]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, combox_rings (_(val_a[1]), (preferences) ? 2 : active_project -> nspec+1, list_node, 1), FALSE, FALSE, 5); j = (preferences) ? tmp_rsparam[0] : active_project -> rsearch[0]; k = RIN + search_type; GtkWidget * hbox; for (i=0; i<2; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_b[search_type][i]), 400, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i == 0) { rings_entry[i] = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(k)); if (preferences) { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? tmp_csparam[1] : tmp_rsparam[2]); } else { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? active_project -> csparam[5] : active_project -> rsparam[j][1]); } } else { rings_entry[i] = create_entry (G_CALLBACK(set_numa), 100, 15, FALSE, NULL); if (preferences) { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? tmp_csparam[2] : tmp_rsparam[3]); } else { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? active_project -> csearch : active_project -> rsearch[1]); } } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rings_entry[i], FALSE, FALSE, 0); if (! search_type && j < 0 && ! preferences) widget_set_sensitive (rings_entry[i], 0); } gboolean status; for (i=0; i<3+search_type; i++) { if (preferences) { status = (search_type) ? tmp_csparam[i+3] : tmp_rsparam[i+4]; } else { status = (search_type) ? active_project -> csparam[i+1] : active_project -> rsparam[j][i+2]; } rings_check[i] = check_button (_(val_c[search_type][i]), -1, 40, status, G_CALLBACK(toggle_rings), GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, rings_check[i], FALSE, FALSE, 0); if (! preferences) { if (active_project -> nspec == 1) widget_set_sensitive (rings_check[i], 0); if (! search_type && j < 0) widget_set_sensitive (rings_check[i], 0); } } for (i=0; i<3; i++) { append_comments (vbox, start[i], _(val_d[i])); } if (! search_type) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_(val_e), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); i = 0; g_signal_connect(G_OBJECT(rings_box[0]), "changed", G_CALLBACK(combox_rings_changed), GINT_TO_POINTER(0)); combo_set_active (rings_box[0], (preferences) ? tmp_rsparam[0] : active_project -> rsearch[0]); widget_set_sensitive (rings_box[1], (preferences) ? 1 : (active_project -> rsearch[0]<0) ? 0 : 1); } i = 1; g_signal_connect(G_OBJECT(rings_box[1]), "changed", G_CALLBACK(combox_rings_changed), GINT_TO_POINTER(i)); if (preferences) { combo_set_active (rings_box[1], (search_type) ? tmp_csparam[0] : tmp_rsparam[1]); } else { combo_set_active (rings_box[1], (search_type) ? active_project -> csparam[0] : active_project -> rsparam[j][0]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) \brief bond properties detailed saving: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) \brief bond properties detailed saving: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { active_project -> bondfile = file_chooser_get_file_name (chooser); } else { button_set_status (data, FALSE); } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) \brief bond properties detailed saving and prepare the dialog \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) \brief activate bond properties detailed saving and prepare the dialog \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) #endif { int i = GPOINTER_TO_INT (data); gboolean status = button_get_status ((GtkWidget *)Button); if (i < 3) { active_project -> runc[i] = status; if (i < 2) widget_set_sensitive (ba_entry[i], status); if (i == 2) frag_update = mol_update = status; } else { if (status) { // To add = do not annoy me with that again ! show_info (_("The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n"), 0, MainWindow); #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Save neighbors analysis in file"), GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, "neighbors.dat"); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_toggle_bond), Button); #else run_this_gtk_dialog (info, G_CALLBACK(run_toggle_bond), Button); #endif } else { active_project -> bondfile = NULL; } } } /*! \fn gboolean test_gr (int gr) \brief is it safe to compute g(r) ? \param rdf type of g(r): real space (GR) or FFT (GK) */ gboolean test_gr (int rdf) { if (active_project -> analysis[rdf] -> num_delta < 2) { show_warning (_("You must specify a number of δr intevals >= 2\n" "to discretize the real space between 0.0 and Dmax\n"), calc_win); return FALSE; } else if (rdf == GDK && (active_project -> analysis[rdf] -> max > active_project -> analysis[SKD] -> max || active_project -> analysis[rdf] -> max <= active_project -> analysis[SKD] -> min)) { show_warning (_("You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax"), calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_sq (int fdq) \brief is it safe to compute s(q) ? \param fdq type of s(q): 0 = FFT g(r), 1 = Debye, 2 = Dynamic */ gboolean test_sq (int fdq) { if (active_project -> analysis[fdq] -> max <= active_project -> analysis[fdq] -> min) { show_warning (_("You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin"), calc_win); return FALSE; } else if (active_project -> analysis[fdq] -> num_delta < 2) { show_warning (_("You must specify a number of δq intervals >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n"), calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_bonds () \brief is it safe to compute bond properties ? */ gboolean test_bonds () { if (active_project -> runc[0] && active_project -> analysis[BND] -> num_delta < 2) { show_warning (_("You must specify a number of δr intervals >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances"), calc_win); return FALSE; } if (active_project -> runc[1] && active_project -> analysis[ANG] -> num_delta < 2) { show_warning (_("You must specify a number of δθ intervals >= 2\n" "to discretize the angular space between 0 and 180°"), calc_win); return FALSE; } return TRUE; } /*! \fn gboolean test_rings () \brief is it safe to compute ring statistics ? */ gboolean test_rings () { int i, j; i = (search_type) ? active_project -> csparam[5] : active_project -> rsparam[active_project -> rsearch[0]][1]; j = (search_type) ? active_project -> csearch : active_project -> rsearch[1]; gchar * sobj[2]={i18n("ring"), i18n("chain")}; gchar * str; if (i == 0) { str = g_strdup_printf (_("You must specify a maximum %s size > 1 for the search"), _(sobj[search_type])); show_warning (str, calc_win); g_free (str); return FALSE; } if (j == 0) { str = g_strdup_printf (_("You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value"), sobj[search_type], sobj[search_type], sobj[search_type]); show_warning (str, calc_win); g_free (str); return FALSE; } return TRUE; } /*! \fn gboolean test_sph () \brief is it safe to compute spherical harmonics ? */ gboolean test_sph () { if (active_project -> analysis[SPH] -> num_delta < 2 || active_project -> analysis[SPH] -> num_delta > 40) { show_warning (_("You must specify a number lmax ∈ [2-40]"), calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_msd () \brief is it safe to compute MSD ? */ gboolean test_msd () { if(active_project -> steps > 1) { if (active_project -> analysis[MSD] -> delta < 1) { show_warning (_("You must specify the time step δt\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n"), calc_win); return FALSE; } if (active_project -> tunit < 0) { show_warning (_("You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n"), calc_win); return FALSE; } else { return TRUE; } } else { if (active_project -> analysis[MSD] -> num_delta < 1) { show_warning (_("You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n"), calc_win); return FALSE; } else { return TRUE; } } } /*! \fn gboolean test_skt () \brief is it safe to compute dynamic structure factors ? */ gboolean test_skt () { if (! test_sq(SKT)) return FALSE; if (! test_msd()) return FALSE; if (active_project -> sqw_freq > 0) { return TRUE; } else { show_warning (_("You must specify the number of frequency points\n"), calc_win); return FALSE; } } /*! \fn void calc_bonds (GtkWidget * vbox) \brief creation of the bond calculation widgets \param vbox GtkWidget that will receive the data */ void calc_bonds (GtkWidget * vbox) { gchar * val_a[2]={i18n("Number of δr [Dijmin-Dijmax]"), i18n("Number of δθ [0-180°]")}; gchar * val_b[4]={i18n("First coordination sphere properties"), i18n("Bond and dihedral angles distribution"), i18n("Search for molecules and isolated fragments"), i18n("Output detailed results in text file")}; GtkWidget * hbox; int i; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_(val_b[i]), -1, 40, active_project -> runc[i], G_CALLBACK(toggle_bond), (gpointer)GINT_TO_POINTER(i)), FALSE, FALSE, 0); if (i < 2) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_a[i]), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); ba_entry[i] = create_entry (G_CALLBACK(set_delta), 150, 15, FALSE, (gpointer)GINT_TO_POINTER(BND+i)); update_entry_int (GTK_ENTRY(ba_entry[i]), active_project -> analysis[BND+i] -> num_delta); widget_set_sensitive (ba_entry[i], active_project -> runc[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ba_entry[i], FALSE, FALSE, 0); } } GtkWidget * checkbd = check_button (val_b[i], -1, 40, FALSE, G_CALLBACK(toggle_bond), (gpointer)GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, checkbd, FALSE, FALSE, 0); widget_set_sensitive (checkbd, 1); } /*! \fn GtkWidget * hbox_note (int i, double val) \brief foot note message box with some parameters \param i message id \param val value to display */ GtkWidget * hbox_note (int i, double val) { gchar * note[3] = {"Dmax = ", "Qmin = ", "Qmax = "}; gchar * unit[3] = {" Å", " Å-1", " Å-1"}; gchar * str; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (note[i], 50, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%f", val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (unit[i], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } GtkWidget * avbox = NULL; GtkWidget * smbox = NULL; dint skadv[2]; int avsize; /*! \fn G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) \brief open expander actions \param exp the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) { int i; i = GPOINTER_TO_INT(data); GtkExpander * expander = GTK_EXPANDER (exp); GtkWidget * wind = get_top_level (exp); gtk_window_set_resizable (GTK_WINDOW (wind), TRUE); if (gtk_expander_get_expanded (expander)) { if (i == 1) { hide_the_widgets (avbox); } else { hide_the_widgets (smbox); } } else { if (i == 1) { show_the_widgets (avbox); } else { show_the_widgets (smbox); } } gtk_widget_set_size_request (exp, -1, -1); gtk_window_set_resizable (GTK_WINDOW (wind), FALSE); } /*! \fn G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) \brief set a s(k) calculation parameter \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) { dint * idc = (dint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); double qmin = active_project -> analysis[idc -> a] -> min; double qmax = active_project -> analysis[idc -> a] -> max; int idk = (idc -> a == SKD) ? 0 : 1; if (v != active_project -> sk_advanced[idk][idc -> b]) { if (idc -> b == 0 && (v < 0.0 || v > 1.0)) { show_warning (_("You must specify a probability between 0.0 and 1.0"), calc_win); } else if (idc -> b == 1 && (v < qmin || v > qmax)) { show_warning (_("Qlim must be ≥ Qmin and ≤ Qmax"), calc_win); } else { active_project -> sk_advanced[idk][idc -> b] = v; } } update_entry_double (entry, active_project -> sk_advanced[idk][idc -> b]); } /*! \fn G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) \brief set the Gaussian smoothing factor \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) { const gchar * m; int i = GPOINTER_TO_INT(data); m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v <= 0.0 || v >= 1.0) { show_warning (_("The smoothing factor must be between 0.0 and 1.0"), calc_win); } else { active_project -> analysis[i] -> fact = v; } update_entry_double (entry, active_project -> analysis[i] -> fact); } /*! \fn G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) \brief show the curve toolboxes \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) { if (! is_the_widget_visible (curvetoolbox)) { show_the_widgets (curvetoolbox); } else { hide_the_widgets (curvetoolbox); } } /*! \fn G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) \brief smooth g(r), s(q), s(k) or g(k) \param button the button sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) { int g, h, i, j, k, l, m; l = GPOINTER_TO_INT(data); if (active_project -> analysis[l] -> calc_ok) { if (l == SKD || l == SKT) { xsk = duplicate_double(active_project -> analysis[l] -> curves[0] -> ndata, active_project -> analysis[l] -> curves[0] -> data[0]); } g = (l == SKT) ? (active_project -> skt_all_sets) ? active_project -> steps - active_project -> skt_corr_threshold : active_project -> skt_n_data_sets : 1; h = (l == SKT) ? active_project -> analysis[SKD] -> numc : 1; for (j=0; j analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); if (l ==GDR || l == GDK) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); } for (k=0 ; k nspec ; k++) { for (m=0 ; m nspec ; m++) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); if (l == GDR || l == GDK) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+1; } } } if (l == SQD || l == SKD || l == SKT) { for (k=0 ; k nspec ; k++) { for (m=0 ; m nspec ; m++) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); } } } if (active_project -> nspec == 2) { m = 3; if (l == SQD || l == SKD || l == SKT) m = m+1; for (k=0 ; k analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); } } } if (l == SKD || l == SKT) { g_free (xsk); xsk = NULL; } fill_tool_model (); show_the_widgets (curvetoolbox); if (l == GDR || l == GDK) { for (i=0; i<4; i=i+3) update_after_calc (i); } else if (l == SQD || l == SKD) { for (i=1; i<3; i++) update_after_calc (i); } else { update_after_calc (l); } } else { show_error (_("No data set(s) to be smoothed\n"), 0, calc_win); } } /*! \fn void add_advanced_options (int skq, dint skadv[2], GtkWidget * vbox) \brief add k-point selection advanced options \param skq calculation ID (SKD or SKT) \param skadv associated pointers \param vbox target box widget */ void add_advanced_options (int skq, dint skadv[2], GtkWidget * vbox) { gchar * adv_name[2]={i18n("Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]"), i18n("Qlim [Å-1] ∈ [Qmin-Qmax]")}; GtkWidget * advanced_options = create_expander (_(" Advanced options"), NULL); gtk_widget_set_size_request (advanced_options, -1, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, advanced_options, FALSE, TRUE, 10); avbox = create_vbox (5); GtkWidget * ahbox; GtkWidget * fixed; GtkWidget * aentry; int i, j; i = (skq == SKT) ? 1 : 0; for (j=0; j<2; j++) { ahbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, avbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label (_(adv_name[j]), 175, -1, 0.0, 0.5), FALSE, FALSE, 5); aentry = create_entry (G_CALLBACK(set_advanced_sq), 100, 15, FALSE, & skadv[j]); update_entry_double (GTK_ENTRY(aentry), active_project -> sk_advanced[i][j]); fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), aentry, 0.0, 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, fixed, FALSE, FALSE, 10); } g_signal_connect (G_OBJECT(advanced_options), "activate", G_CALLBACK(expand_opt), GINT_TO_POINTER(i)); add_container_child (CONTAINER_EXP, advanced_options, avbox); show_the_widgets (advanced_options); widget_set_sensitive (advanced_options, 1); } /*! \fn void add_smoothing_options (int grsqk, GtkWidget * vbox) \brief add gaussian smoothing options \param calculation ID (GDR, SQD, SKD, GDK or SKT) \param vbox target box widget */ void add_smoothing_options (int grsqk, GtkWidget * vbox) { GtkWidget * smooth_options = create_expander (_(" Gaussian data smoothing"), NULL); gtk_widget_set_size_request (smooth_options, -1, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, smooth_options, FALSE, TRUE, 10); GtkWidget * avbox = create_vbox (5); GtkWidget * smbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, gtk_label_new(_("Factor [0.0-1.0]")), FALSE, FALSE, 0); GtkWidget * sentry = create_entry (G_CALLBACK(set_sfact), 100, 15, FALSE, GINT_TO_POINTER(grsqk)); update_entry_double (GTK_ENTRY(sentry), active_project -> analysis[grsqk] -> fact); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, sentry, FALSE, TRUE, 10); GtkWidget * smooth = create_button (_("Smooth"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(on_smoother_released), GINT_TO_POINTER(grsqk)); g_signal_connect (G_OBJECT(smooth_options), "activate", G_CALLBACK(expand_opt), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, smooth, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, avbox, smbox, FALSE, FALSE, 5); add_container_child (CONTAINER_EXP, smooth_options, avbox); show_the_widgets (smooth_options); widget_set_sensitive (smooth_options, 1); } /*! \fn void calc_gr_sq (GtkWidget * box, int id) \brief creation of the g(r) / s(q) / s(k) / g(k) calculation widgets \param box GtkWidget that will receive the data \param id the calculation id */ void calc_gr_sq (GtkWidget * box, int id) { gchar * val_a[4]={i18n("Number of δr steps"), i18n("Number of δq steps"), i18n("Number of δq steps"), i18n("Number of δr steps")}; gchar * val_b[3]={i18n("Qmax [Å-1]"), i18n("Qmax [Å-1]"), i18n("Qmax for the FFT [Å-1]")}; if (id == SKD) { skadv[0].a = skadv[1].a = SKD; skadv[0].b = 0; skadv[1].b = 1; } GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_a[id]), 150, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * entry= create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_int (GTK_ENTRY(entry), active_project -> analysis[id] -> num_delta); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (id > GDR) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_b[id-1]), 150, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * entry= create_entry (G_CALLBACK(set_max), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_double (GTK_ENTRY(entry), active_project -> analysis[id] -> max); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); } if (id == GDR || id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (0, active_project -> analysis[GDR] -> max), FALSE, FALSE, 0); } if (id == SQD) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (1, active_project -> analysis[SQD] -> min), FALSE, FALSE, 0); } if (id == SKD|| id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (1, active_project -> analysis[SKD] -> min), FALSE, FALSE, 0); } if (id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (2, active_project -> analysis[SKD] -> max), FALSE, FALSE, 0); } if (id == GDR || id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_("Dmax is the maximum inter-atomic distance in the model"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (id > 0) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_("Qmin is the minimum wave vector for the model"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_("Qmax is the maximum wave vector to compute S(q)"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); if (id == SKD) add_advanced_options (SKD, skadv, vbox); add_smoothing_options (id, vbox); } GtkWidget * skt_all_info = NULL; GtkWidget * sktqw_vbox[2]; GtkWidget * sktqw_delta[2]; GtkWidget * t_q_vbox[2]; GtkWidget * skt_res_info; /*! \fn G_MODULE_EXPORT void set_skt_step_id (GtkEntry * res, gpointer data) \brief set "to be saved" step id \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_skt_step_id (GtkEntry * res, gpointer data) { int sid = GPOINTER_TO_INT (data); const gchar * m = entry_get_text (res); int v = (int) string_to_double ((gpointer)m); if (sid && sid < active_project -> skt_n_data_sets - 1) { if (v > active_project -> skt_step_id[sid-1] && v < active_project -> skt_step_id[sid+1]) active_project -> skt_step_id[sid] = v; } else if (sid) { if (v > active_project -> skt_step_id[sid-1]) active_project -> skt_step_id[sid] = v; } else if (! sid && active_project -> skt_n_data_sets > 1) { if (v < active_project -> skt_step_id[sid+1]) active_project -> skt_step_id[sid] = v; } update_entry_int (res, active_project -> skt_step_id[sid]); } /*! \fn G_MODULE_EXPORT void set_sqw_q_id (GtkEntry * res, gpointer data) \brief set "to be saved" q vector \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sqw_q_id (GtkEntry * res, gpointer data) { int sid = GPOINTER_TO_INT (data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (sid && sid < active_project -> sqw_n_data_sets - 1) { if (v > active_project -> sqw_q_id[sid-1] && v < active_project -> sqw_q_id[sid+1]) active_project -> sqw_q_id[sid] = v; } else if (sid) { if (v > active_project -> sqw_q_id[sid-1] && v <= active_project -> analysis[SKT] -> max) active_project -> sqw_q_id[sid] = v; } else if (! sid && active_project -> sqw_n_data_sets > 1) { if (v < active_project -> sqw_q_id[sid+1] && v >= active_project -> analysis[SKT] -> min) active_project -> sqw_q_id[sid] = v; } update_entry_double (res, active_project -> sqw_q_id[sid]); } /*! \fn void add_remove_t_steps_q_vectors (int val, int calc) \brief add or remove t steps results to save \param val total number of t steps \param calc 0 = S(k,t), 1 = S(q,w) */ void add_remove_t_steps_q_vectors (int val, int calc) { t_q_vbox[calc] = destroy_this_widget (t_q_vbox[calc]); switch (calc) { case 0: if (active_project -> skt_step_id) g_free (active_project -> skt_step_id); active_project -> skt_step_id = NULL; break; case 1: if (active_project -> sqw_q_id) g_free (active_project -> sqw_q_id); active_project -> sqw_q_id = NULL; break; } if (val) { t_q_vbox[calc] = create_vbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sktqw_delta[calc], t_q_vbox[calc], FALSE, FALSE, 0); int delta_t; double delta_q; if (! calc) { active_project -> skt_n_data_sets = min (val, active_project -> steps - active_project -> skt_corr_threshold); delta_t = (active_project -> steps - active_project -> skt_corr_threshold) / active_project -> skt_n_data_sets; active_project -> skt_step_id = allocint (active_project -> skt_n_data_sets); } else { active_project -> sqw_n_data_sets = val; active_project -> sqw_q_id = allocdouble (active_project -> sqw_n_data_sets); delta_q = (active_project -> analysis[SKT] -> max - active_project -> analysis[SKT] -> min)/active_project -> sqw_n_data_sets; } int i, j; GtkWidget * hbox; GtkWidget * entry; j = (! calc) ? active_project -> skt_n_data_sets : active_project -> sqw_n_data_sets; for (i=0; i skt_step_id[i] = 1 + i*delta_t; } else { active_project -> sqw_q_id[i] = active_project -> analysis[SKT] -> min + i*delta_q; } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, t_q_vbox[calc], hbox, FALSE, FALSE, 0); if (! calc) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf("%d)\tδt= ", i+1), 150, -1, 0.75, 0.5), FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(set_skt_step_id), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(entry), active_project -> skt_step_id[i]); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf("%d)\tq= ", i+1), 150, -1, 0.75, 0.5), FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(set_sqw_q_id), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), active_project -> sqw_q_id[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); } show_the_widgets (sktqw_delta[calc]); } } /*! \fn G_MODULE_EXPORT void set_t_q_spin (GtkSpinButton * res, gpointer data) \brief set the number of t steps results to save - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_t_q_spin (GtkSpinButton * res, gpointer data) { if (! preferences) add_remove_t_steps_q_vectors (gtk_spin_button_get_value_as_int(res), GPOINTER_TO_INT(data)); } /*! \fn void add_correlations_options (int cid) \brief add correlation(s) options to the S(k,t) calculation dialog \param cid calculation ID: 0 = S(k,t), 1 = S(q,w) */ void add_correlations_options (int cid) { sktqw_delta[cid] = create_vbox(0); t_q_vbox[cid] = NULL; add_box_child_start (GTK_ORIENTATION_VERTICAL, sktqw_vbox[cid], sktqw_delta[cid], FALSE, FALSE, 0); gchar * aco_info = g_strdup_printf ("%s", (! cid) ? _("Number of δt results to save") : _("Number of q vectors to analyze")); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sktqw_delta[cid], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (aco_info, 150, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (aco_info); int val, vbl; if (! cid) { val = (preferences) ? tmp_skt_n_sets : active_project -> skt_n_data_sets; vbl = (preferences) ? 100 : active_project -> steps-active_project -> skt_corr_threshold; } else { val = (preferences) ? tmp_sqw_n_sets : active_project -> sqw_n_data_sets; vbl = 100; } GtkWidget * spin = spin_button (G_CALLBACK(set_t_q_spin), val, 1.0, vbl, 1.0, 0, 100, GINT_TO_POINTER(cid)); gtk_widget_set_size_request (spin, 25, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin, FALSE, FALSE, 10); show_the_widgets (sktqw_vbox[cid]); } /*! \fn G_MODULE_EXPORT void set_correlations (GtkEntry * entry, gpointer data) \brief set the minimum number of correlated configuration to compute S(k,t) \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_correlations (GtkEntry * entry, gpointer data) { const gchar * m; m = entry_get_text (entry); int v = (int) string_to_double ((gpointer)m); int pid = GPOINTER_TO_INT(data); switch (pid) { case 0: if (v <= 0 || v >= active_project -> steps-1) { show_warning (_("This value must be > 0 and < number of steps"), calc_win); } else { active_project -> skt_corr_threshold = v; gchar * str = g_strdup_printf (_("%d calculation results in total !"), active_project -> analysis[SKD] -> numc * (active_project -> steps - active_project -> skt_corr_threshold)); skt_all_info = destroy_this_widget (skt_all_info); skt_all_info = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, skt_res_info, skt_all_info, FALSE, FALSE, 5); widget_set_sensitive (skt_all_info, active_project -> skt_all_sets); add_remove_t_steps_q_vectors (active_project -> skt_n_data_sets, 0); show_the_widgets (skt_res_info); } update_entry_int (entry, active_project -> skt_corr_threshold); break; case 1: if (v <= 0) { show_warning (_("This value must be > 0"), calc_win); } else { if (preferences) { tmp_sqw_freq = v; } else { active_project -> sqw_freq = v; } } update_entry_int (entry, (preferences) ? tmp_sqw_freq : active_project -> sqw_freq); break; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_skt_all (GtkCheckButton * but, gpointer data) \brief toggle the output of all s(k,t) data sets \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_skt_all (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_skt_all (GtkToggleButton * but, gpointer data) \brief toggle the output of all s(k,t) data sets \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_skt_all (GtkToggleButton * but, gpointer data) #endif { gboolean status = button_get_status ((GtkWidget *)but); if (! preferences) { active_project -> skt_all_sets = status; } else { tmp_skt_sets = status; } widget_set_sensitive (sktqw_delta[0], ! status); if (! preferences) { widget_set_sensitive (skt_all_info, status); if (status) { hide_the_widgets (sktqw_delta[0]); if (active_project -> skt_step_id) g_free (active_project -> skt_step_id); active_project -> skt_step_id = NULL; active_project -> skt_n_data_sets = 1; active_project -> skt_step_id = allocint (1); active_project -> skt_step_id[0] = -1; } else { active_project -> skt_corr_threshold = (active_project -> steps < 20) ? 1 : 10; active_project -> skt_n_data_sets = min (5, active_project -> steps); add_remove_t_steps_q_vectors (active_project -> skt_n_data_sets, 0); show_the_widgets (sktqw_delta[0]); } } } /*! \fn void calc_sk_t (GtkWidget * box) \brief creation of the s(k,t) calculation widgets \param box GtkWidget that will receive the data */ void calc_sk_t (GtkWidget * box) { skadv[0].a = skadv[1].a = SKT; skadv[0].b = 0; skadv[1].b = 1; GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); GtkWidget * hbox_skt = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_skt, FALSE, FALSE, 5); GtkWidget * vbox_skt[2]; int i, j; j = (preferences) ? 1 : 2; for (i=0; i skt_step_id) { active_project -> skt_n_data_sets = default_skt_n_sets; } if (! active_project -> sqw_q_id) { active_project -> sqw_n_data_sets = default_sqw_n_sets; } } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 0); gchar * str = g_strdup_printf ("%s", _("Number of δq steps")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); GtkWidget * entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(SKT)); update_entry_int (GTK_ENTRY(entry), (preferences) ? tmp_num_delta[SKT-2] : active_project -> analysis[SKT] -> num_delta); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (! preferences) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 5); str = g_strdup_printf ("%s", _("Qmax [Å-1]")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); entry= create_entry (G_CALLBACK(set_max), 100, 15, FALSE, GINT_TO_POINTER(SKT)); update_entry_double (GTK_ENTRY(entry), active_project -> analysis[SKT] -> max); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox_note (1, active_project -> analysis[SKT] -> min), FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Qmin is the minimum wave vector for the model"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("δtmin", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_correlations), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_int (GTK_ENTRY(entry), active_project -> skt_corr_threshold); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("δtmin is the correlation threshold"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); } if (! preferences) { calc_msd (vbox_skt[0], SKT); } else { dyna_parameters (vbox_skt[0], SKT-2); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 5); str = g_strdup_printf ("%s", _("ω points in [0.0, ωmax]")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_correlations), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(entry), (preferences) ? tmp_sqw_freq : active_project -> sqw_freq); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); omega_max_hbox = destroy_this_widget(omega_max_hbox); omega_max_hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], omega_max_hbox, FALSE, FALSE, 5); update_omega_max (); if (! preferences) { add_advanced_options (SKT, skadv, vbox_skt[0]); add_smoothing_options (SKT, vbox_skt[0]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[(preferences) ? 0 : 1], markup_label (_("Results"), -1, -1, 0.0, 0.5), FALSE, FALSE, (preferences) ? 10 : 0); GtkWidget * tbox = create_vbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[(preferences) ? 0 : 1], tbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("atomes cannot yet display 3D results,"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("but we are working to add this feature !"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("For the time being you need to select"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("what to display using the 2D graph system:"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * notebook = gtk_notebook_new (); #ifdef GTK4 gtk_widget_set_vexpand (notebook, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[(preferences) ? 0 : 1], notebook, TRUE, TRUE, (preferences) ? 10 : 5); GtkWidget * nbox; GtkWidget * scroll; for (i=0; i<2; i++) { scroll = create_scroll (NULL, 200, (preferences) ? 100 : 350, GTK_SHADOW_NONE); nbox = create_vbox(BSEP); add_container_child (CONTAINER_SCR, scroll, nbox); if (! i) { add_box_child_start (GTK_ORIENTATION_VERTICAL, nbox, check_button(_("All δt correlated calculations"), -1, -1, FALSE, G_CALLBACK(toggle_skt_all), NULL), FALSE, FALSE, 5); if (! preferences) { str = g_strdup_printf (_("%d calculation results in total !"), active_project -> analysis[SKD] -> numc * (active_project -> steps - active_project -> skt_corr_threshold)); skt_all_info = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); skt_res_info = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, nbox, skt_res_info, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, skt_res_info, skt_all_info, FALSE, FALSE, 5); } } sktqw_vbox[i] = create_vbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, nbox, sktqw_vbox[i], FALSE, FALSE, 0); if (! i) widget_set_sensitive (sktqw_vbox[i], (preferences) ? ! tmp_skt_sets : ! active_project -> skt_all_sets); add_correlations_options (i); if (! preferences) { if (! i && ! active_project -> skt_all_sets) { add_remove_t_steps_q_vectors (active_project -> skt_n_data_sets, 0); } else if (i) { add_remove_t_steps_q_vectors (active_project -> sqw_n_data_sets, 1); } } if (! i) widget_set_sensitive(skt_all_info, (preferences) ? tmp_skt_sets : active_project -> skt_all_sets); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scroll, markup_label((! i) ? _("Intermediate scattering: F(q,δt)") : _("Dynamic calculations: S(q,ω)"), -1, -1, 0.0, 0.5)); } } /*! \fn G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) \brief create a calculation dialog: run the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) { int i; int id = GPOINTER_TO_INT(data); switch (response_id) { case GTK_RESPONSE_APPLY: switch (id) { case GDR: if (test_gr (GDR)) on_calc_gr_released (calc_win, NULL); break; case SQD: if (test_sq (SQD)) on_calc_sq_released (calc_win, NULL); break; case SKD: if (test_sq (SKD)) on_calc_sk_released (calc_win, NULL); break; case GDK: if (test_gr (GDK)) on_calc_gq_released (calc_win, NULL); break; case BND: if (test_bonds ()) on_calc_bonds_released (calc_win, NULL); break; case RIN-1: if (test_rings ()) { //show_the_widgets (spinner); //gtk_spinner_start (GTK_SPINNER(spinner)); on_calc_rings_released (calc_win, NULL); //gtk_spinner_stop (GTK_SPINNER(spinner)); //hide_the_widgets (spinner); } break; case CHA-1: if (test_rings ()) { //show_the_widgets (spinner); //gtk_spinner_start (GTK_SPINNER(spinner)); on_calc_chains_released (calc_win, NULL); //gtk_spinner_stop (GTK_SPINNER(spinner)); //hide_the_widgets (spinner); } break; case SPH-1: if (test_sph ()) on_calc_sph_released (calc_win, NULL); break; case MSD-1: if (test_msd ()) on_calc_msd_released (calc_win, NULL); break; case SKT-1: if (test_skt ()) on_calc_skt_released (calc_win, NULL); default: break; } break; default: frag_update = mol_update = 0; for (i=0; i<3; i++) active_project -> runc[i] = FALSE; if (id == SKT-1) { omega_max_info = destroy_this_widget (omega_max_info); omega_max_hbox = destroy_this_widget (omega_max_hbox); skt_all_info = destroy_this_widget (skt_all_info); } avbox = destroy_this_widget (avbox); destroy_this_dialog (dial); calc_win = destroy_this_widget (calc_win); break; } } /*! \fn G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) \brief create a calculation dialog - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) { int id = GPOINTER_TO_INT(data); calc_win = calc_window(id); GtkWidget * box = dialog_get_content_area (calc_win); gtk_box_set_homogeneous (GTK_BOX(box), FALSE); switch (id) { case BND: calc_bonds (box); break; case RIN-1: search_type = 0; calc_rings (box); break; case CHA-1: search_type = 1; calc_rings (box); break; case SPH-1: calc_sph (box); break; case MSD-1: calc_msd (box, MSD); break; case SKT-1: calc_sk_t (box); break; default: calc_gr_sq (box, id); break; } #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (calc_win), gdk_pixbuf_new_from_file(graph_img[(id < ANG) ? id : id+1], NULL)); #endif GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, -1, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); run_this_gtk_dialog (calc_win, G_CALLBACK(run_on_calc_activate), data); } atomes_1.3.1/src/gui/sqcall.c0000664000175000017500000003005015212624223015501 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file sqcall.c * @short Callbacks for the s(q) / s(k) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'sqcall.c' * * Contains: * - The callbacks for the s(q) / s(k) calculation dialog * * List of functions: void init_sq (project * this_proj, int sqk); void update_sq_view (project * this_proj, int sqk); void save_xsk_ (int * interv, double datacurve[* interv]); G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn void init_sq (project * this_proj, int sqk) \brief initialize the curve widgets for the s(q) / s(k) calculation \param this_proj the target project \param sqk s(q) (SQ) or s(k) (SK) */ void init_sq (project * this_proj, int sqk) { int i, j, k; this_proj -> analysis[sqk] -> curves[0] -> name = g_strdup_printf ("S(q) %s", _("Neutrons")); this_proj -> analysis[sqk] -> curves[1] -> name = g_strdup_printf ("S(q) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[sqk] -> curves[2] -> name = g_strdup_printf ("Q(q) %s", _("Neutrons")); this_proj -> analysis[sqk] -> curves[3] -> name = g_strdup_printf ("Q(q) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[sqk] -> curves[4] -> name = g_strdup_printf ("S(q) %s", _("X-rays")); this_proj -> analysis[sqk] -> curves[5] -> name = g_strdup_printf ("S(q) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[sqk] -> curves[6] -> name = g_strdup_printf ("Q(q) %s", _("X-rays")); this_proj -> analysis[sqk] -> curves[7] -> name = g_strdup_printf ("Q(q) %s - %s", _("X-rays"), _("smoothed")); k = 8; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("AL(q)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("AL(q)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; } } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("FZ(q)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("FZ(q)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NN]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NN] - %s", _("smoothed")); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NC]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NC] - %s", _("smoothed")); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[CC]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[CC] - %s", _("smoothed")); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[ZZ]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[ZZ] - %s", _("smoothed")); } add_curve_widgets (this_proj, sqk); this_proj -> analysis[sqk] -> init_ok = TRUE; } /*! \fn void update_sq_view (project * this_proj, int sqk) \brief update the text view for s(q) / s(k) calculation \param this_proj the target project \param sqk s(q) (SQ) or s(k) (SK) */ void update_sq_view (project * this_proj, int sqk) { gchar * str; if (this_proj -> analysis[sqk] -> calc_buffer == NULL) this_proj -> analysis[sqk] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[sqk] -> calc_buffer); if (sqk == SKD || sqk == SQD) { print_info (_("\n\nStructure factor(s)"), "heading", this_proj -> analysis[sqk] -> calc_buffer); } else { print_info (_("\n\nDynamic structure factor(s)"), "heading", this_proj -> analysis[sqk] -> calc_buffer); } if (sqk == SKD || sqk == SKT) { print_info (_(" - reciprocal space calculation\n\n"), "heading", this_proj -> analysis[sqk] -> calc_buffer); } else { print_info (" - FFT[g(r)]\n\n", "heading", this_proj -> analysis[sqk] -> calc_buffer); } print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("\tReciprocal space discretization:\n\n"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("\t - Number of δq steps: "), "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[sqk] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (_("\n\n\t between "), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (" ", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("and"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (" ", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (_("\n\t where "), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (_(" is the minimum wave vector, and "), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (_(" is the maximum wave vector:\n\n"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("\t\tQ", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (" = ", "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[sqk] -> min); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (" Ã…", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("\t", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("and"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("\t", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (" = ", "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[sqk] -> max); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (" Ã…", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("\n\n\t - δq = ", "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[sqk] -> delta); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (" Ã…", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("\n", "bold", this_proj -> analysis[sqk] -> calc_buffer); if (sqk != SKT) { print_info (calculation_time(TRUE, this_proj -> analysis[sqk] -> calc_time), NULL, this_proj -> analysis[sqk] -> calc_buffer); } } /*! \fn G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) \brief compute s(q) / s(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[SQD] -> init_ok) init_sq (active_project, SQD); clean_curves_data (SQD, 0, active_project -> analysis[SQD] -> numc); active_project -> analysis[SQD] -> delta = (active_project -> analysis[SQD] -> max - active_project -> analysis[SQD] -> min) / active_project -> analysis[SQD] -> num_delta; prepostcalc (widg, FALSE, SQD, 0, opac); i = s_of_q_ (& active_project -> analysis[SQD] -> max, & active_project -> analysis[SQD] -> min, & active_project -> analysis[SQD] -> num_delta); prepostcalc (widg, TRUE, SQD, i, 1.0); if (! i) { show_error (_("The S(q) calculation has failed"), 0, widg); } else { update_sq_view (active_project, SQD); show_the_widgets (curvetoolbox); } fill_tool_model (); for (i=1; i<3; i++) update_after_calc (i); } /*! \fn void save_xsk_ (int * interv, double datacurve[*interv]) \brief get s(k) calculation results form Fortran90 \param interv number of data point (delta r/q) \param datacurve calculation result */ void save_xsk_ (int * interv, double datacurve[* interv]) { if (* interv != 0) { xsk = duplicate_double (* interv, datacurve); } } /*! \fn G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) \brief compute s(q) / s(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) { int i, j; if (! active_project -> analysis[SKD] -> init_ok) init_sq (active_project, SKD); clean_curves_data (SKD, 0, active_project -> analysis[SKD] -> numc); active_project -> analysis[SKD] -> delta = (active_project -> analysis[SKD] -> max - active_project -> analysis[SKD] -> min) / active_project -> analysis[SKD] -> num_delta; prepostcalc (widg, FALSE, SKD, 0, opac); i = cqvf_ (& active_project -> analysis[SKD] -> max, & active_project -> analysis[SKD] -> min, & active_project -> analysis[SKD] -> num_delta, & active_project -> sk_advanced[0][0], & active_project -> sk_advanced[0][1]); if (i == 1) { for (i=0; i analysis[SKD] -> numc; i++) { active_project -> analysis[SKD] -> curves[i] -> ndata = 0; } j = s_of_k_ (& active_project -> analysis[SKD] -> num_delta, & active_project -> xcor); g_free (xsk); xsk = NULL; prepostcalc (widg, TRUE, SKD, j, 1.0); active_project -> analysis[GDK] -> avail_ok = j; if (! j) { remove_action ("analyze.3"); show_error (_("The S(q) calculation has failed"), 0, widg); } else { add_analysis_action (GDK); update_sq_view (active_project, SKD); show_the_widgets (curvetoolbox); } } else { prepostcalc (widg, TRUE, SKD, i, 1.0); show_error (_("Problem during the selection of the k-points\nused to sample the reciprocal lattice"), 0, widg); } fill_tool_model (); for (i=1; i<3; i++) update_after_calc (i); } atomes_1.3.1/src/gui/work_menu.c0000664000175000017500000003237515212624223016244 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file work_menu.c * @short Workspace menu GTK3 version \n Callbacks for the workspace menu * @author Sébastien Le Roux */ /* * This file: 'work_menu.c' * * Contains: * - The workspace menu GTK3 version - Callbacks for the workspace menu * * List of functions: G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data); GtkWidget * this_work_menu (int p, int c); GtkWidget * work_menu (int p, int c); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); /*! \fn G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) \brief create a new project \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) { init_project (TRUE); add_project_to_workspace (); frag_update = mol_update = 0; apply_project (FALSE); #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_project -> modelgl -> ogl_mode[1], TRUE); set_mode (active_project -> modelgl -> ogl_mode[1], & active_project -> modelgl -> colorp[1][0]); #else set_mode (NULL, & active_project -> modelgl -> colorp[1][0]); #endif prep_calc_actions (); } /*! \fn G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) \brief leaving atomes ? \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) { #ifdef GTK4 leaving_question (NULL, NULL); #else leaving_question (NULL, NULL, NULL); #endif } int calc_to_compute; /*! \fn G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) \brief to compute the 'calc_to_compute' \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) { activate_project (NULL, data); on_calc_activate (NULL, GINT_TO_POINTER(calc_to_compute)); } #ifdef GTK3 /*! \fn GtkWidget * this_work_menu (int p, int c) \brief create the workspace menu GTK3 version with icons \param p project id, or -1 \param c calculation id, or -1 */ GtkWidget * this_work_menu (int p, int c) { GtkWidget * menu; GtkWidget * port; GtkWidget * dmenu; menu = gtk_menu_new (); GtkAccelGroup * accel_group = gtk_accel_group_new (); gtk_window_add_accel_group (GTK_WINDOW (MainWindow), accel_group); if (! atomes_from_libreoffice) { widget_set_sensitive (gtk3_menu_item (menu, _("Workspace"), IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), 0); add_menu_separator (menu); gtk3_menu_item (menu, _("Open"), IMG_STOCK, (gpointer)FOPEN, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(2), TRUE, GDK_KEY_w, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(3), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save As"), IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(3), TRUE, GDK_KEY_s, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Close"), IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_workspace), GINT_TO_POINTER(1), TRUE, GDK_KEY_c, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); add_menu_separator (menu); } if (p == -1) { widget_set_sensitive (gtk3_menu_item (menu, _("Project(s)"), IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), FALSE); add_menu_separator (menu); if (! atomes_from_libreoffice) { gtk3_menu_item (menu, _("New"), IMG_STOCK, (gpointer)FNEW, G_CALLBACK(on_create_new_project), NULL, TRUE, GDK_KEY_n, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Open"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(0), TRUE, GDK_KEY_o, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } gtk3_menu_item (menu, _("Save"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save As"), IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); if (! atomes_from_libreoffice) { gtk3_menu_item (menu, _("Close"), IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_activate), GINT_TO_POINTER(activep), FALSE, 0, 0, FALSE, FALSE, FALSE); } port = gtk3_menu_item (menu, _("Export"), IMG_FILE, (gpointer)PACKAGE_CON, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk3_menu_item (dmenu, _("ISAACS Project File '*.ipf'"), IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, _("Atomic Coordinates"), IMG_FILE, (gpointer)PACKAGE_CON, G_CALLBACK(on_coord_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); } else { gchar * pname = g_strdup_printf ("%s", get_project_by_id(p) -> name); widget_set_sensitive (gtk3_menu_item (menu, pname, IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), 0); g_free (pname); add_menu_separator (menu); if (p != activep) { gtk3_menu_item (menu, _("Make Active"), IMG_STOCK, (gpointer)YES, G_CALLBACK(activate_project), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); } if (c > -1) { gchar * str = g_strdup_printf (_("Analyze: %s"), graph_name[c]); widget_set_sensitive (gtk3_menu_item (menu, str, IMG_FILE, (gpointer)graph_img[c], G_CALLBACK(compute_this_prop), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE), get_project_by_id(p) -> analysis[c] -> avail_ok); g_free (str); } gtk3_menu_item (menu, _("Edit Name"), IMG_STOCK, (gpointer)EDITA, G_CALLBACK(change_project_name), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save As"), IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); if (! atomes_from_libreoffice) { gtk3_menu_item (menu, _("Close"), IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_activate), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); } port = gtk3_menu_item (menu, _("Export"), IMG_FILE, (gpointer)PACKAGE_CON, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk3_menu_item (dmenu, _("ISAACS Project File '*.ipf'"), IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, _("Atomic Coordinates"), IMG_FILE, (gpointer)PACKAGE_CON, G_CALLBACK(on_coord_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); } if (! atomes_from_libreoffice) { add_menu_separator (menu); port = gtk3_menu_item (menu, _("Import"), IMG_FILE, (gpointer)PACKAGE_IMP, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); gtk3_menu_item (dmenu, _("ISAACS Project File '*.ipf'"), IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(0), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, _("Atomic Coordinates"), IMG_FILE, (gpointer)PACKAGE_IMP, G_CALLBACK(on_coord_port), GINT_TO_POINTER(0), FALSE, 0, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, _("Quit"), IMG_STOCK, (gpointer)FEXIT, G_CALLBACK(leaving_from_menu), NULL, TRUE, GDK_KEY_q, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); show_the_widgets (menu); return menu; } #endif extern void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); extern GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc); extern GSimpleAction * pop_act[7]; /*! \fn GtkWidget * work_menu (int p, int c) \brief create the workspace popup menu \param p project id, or -1 \param c calculation id, or -1 */ GtkWidget * work_menu (int p, int c) { GtkWidget * menu; GSimpleActionGroup * action_popup = g_simple_action_group_new (); GSimpleAction * pop_act[17]; pop_act[0] = g_simple_action_new ("workspace.open", NULL); pop_act[1] = g_simple_action_new ("workspace.save", NULL); pop_act[2] = g_simple_action_new ("workspace.save-as", NULL); pop_act[3] = g_simple_action_new ("workspace.close", NULL); pop_act[4] = g_simple_action_new ("project.active", NULL); pop_act[5] = g_simple_action_new ("project.compute", NULL); pop_act[6] = g_simple_action_new ("project.edit", NULL); pop_act[7] = g_simple_action_new ("project.new", NULL); pop_act[8] = g_simple_action_new ("project.open", NULL); pop_act[9] = g_simple_action_new ("project.save", NULL); pop_act[10] = g_simple_action_new ("project.save-as", NULL); pop_act[11] = g_simple_action_new ("project.close", NULL); pop_act[12] = g_simple_action_new ("export.isaacs", NULL); pop_act[13] = g_simple_action_new ("export.coordinates", NULL); pop_act[14] = g_simple_action_new ("import.isaacs", NULL); pop_act[15] = g_simple_action_new ("import.coordinates", NULL); pop_act[16] = g_simple_action_new ("program.quit", NULL); int i; for (i=0; i<17; i++) g_action_map_add_action (G_ACTION_MAP(action_popup), G_ACTION(pop_act[i])); g_signal_connect (pop_act[0], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(2)); g_signal_connect (pop_act[1], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (pop_act[2], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (pop_act[3], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[4], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[5], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[6], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[7], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); g_signal_connect (pop_act[8], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[9], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[10], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[11], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[12], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[13], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[14], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[15], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[16], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); calc_to_compute = (c < ANG) ? c : c - 1; #ifdef GTK3 menu = this_work_menu (p, c); // GMenu * popup = create_workspace_menu ("pop", 1, p, c); // gtk_menu_new_from_model (G_MENU_MODEL(popup)); #else GMenu * popup = create_workspace_menu ("pop", 1, p, c); menu = gtk_popover_menu_new_from_model_full (G_MENU_MODEL(popup), GTK_POPOVER_MENU_NESTED); i = (nprojects) ? ((p > -1) ? 250 : 95) : 0; gtk_widget_set_size_request (menu, -1, 310 + i); /* I need to use the ' gtk_popover_menu_new_from_model_full' command here, the menu created using the 'gtk_popover_menu_new_from_model' does not behave properly, that might be a bug, some items of the menu having the same name, It is not possible to navigate the menu properly and some elements remains inaccessible, this was solved with this '_full' command. menu = gtk_popover_menu_new_from_model (G_MENU_MODEL(popup)); */ #endif gtk_widget_insert_action_group (menu, "pop", G_ACTION_GROUP(action_popup)); return menu; } atomes_1.3.1/src/gui/gtk-misc.c0000664000175000017500000024352715212624223015757 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file gtk-misc.c * @short GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code. \n Whenever I need to use a GTK function that changed between v3 and v4, \n I created an home made function declared in this file, and deal then here with the potential GTK versions issues. * @author Sébastien Le Roux */ /* * This file: 'gtk-misc.c' * * Contains: * - GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code Whenever I need to use a GTK function that changed between v3 and v4, I created an home made function declared in this file, and deal then here with the potential GTK versions issues. * * List of functions: gboolean is_the_widget_visible (GtkWidget * widg); gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename); G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data); G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data); gchar * file_chooser_get_file_name (GtkFileChooser * chooser); gchar * file_chooser_get_current_folder (GtkFileChooser * chooser); const gchar * entry_get_text (GtkEntry * entry); void show_the_widgets (GtkWidget * widg); void hide_the_widgets (GtkWidget * widg); void widget_set_sensitive (GtkWidget * widg, gboolean sensitive); void add_container_child (int type, GtkWidget * widg, GtkWidget * child); void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data); void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data); void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data); void resize_this_window (GtkWidget * window, int x, int y); void button_set_status (GtkWidget * button, int status); void update_entry_int (GtkEntry * entry, int intval); void update_entry_double (GtkEntry * entry, double doubleval); void update_entry_long_double (GtkEntry * entry, double doubleval); void update_entry_text (GtkEntry * entry, gchar * text); void text_view_set_monospace (GtkWidget * view); void gtk_label_align (GtkWidget * lab, float ax, float ay); void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos); void combo_set_markup (GtkWidget * combo); void combo_set_active (GtkWidget * combo, int pos); void combo_text_append (GtkWidget * combo, gchar * text); void combo_text_prepend (GtkWidget * combo, gchar * text); void setup_text_tags (GtkTextBuffer * buffer); void add_menu_separator (GtkWidget * menu); void set_renderer_color (int tocol, GtkCellRenderer * renderer, ColRGBA col); void set_renderer_markup (GtkTreeModel * mod, GtkTreeIter * iter, GtkCellRenderer * renderer, int col); void button_set_image (GtkButton * but, gchar * text, int format, gpointer image); void adjust_label (GtkWidget * lab, int dimx, int dimy, float ax, float ay); void set_image_from_icon_name (GtkWidget * widg, gchar * icon); void append_comments (GtkWidget * vbox, gchar * symbol, gchar * legend); void provide_gtk_css (gchar * css); void destroy_this_dialog (GtkDialog * dialog); void destroy_this_native_dialog (GtkNativeDialog * dialog); void file_chooser_set_current_folder (GtkFileChooser * chooser); void set_color_chooser_color (GtkWidget * color_win, ColRGBA col); void pop_menu_at_pointer (GtkWidget * pop, double x, double y); void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event); void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data); static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height); G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data); G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data); GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu); GtkWidget * new_gtk_window (); GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz); GtkWidget * dialogmodal (gchar * str, GtkWindow * parent); GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent); GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz); GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); GtkWidget * create_vbox (int spacing); GtkWidget * create_hbox (int spacing); GtkWidget * dialog_get_content_area (GtkWidget * widg); GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y); GtkWidget * create_layout (int x, int y); GtkWidget * create_combo (); GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text); GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data); GtkWidget * stock_image (const gchar * stock_id); GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name); GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status); GtkWidget * create_image_from_data (int format, gpointer item_image); GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status); GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod); GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay); GtkWidget * color_button (ColRGBA col, gboolean alpha, int dimx, int dimy, GCallback handler, gpointer data); GtkWidget * font_button (gchar * font, int dimx, int dimy, GCallback handler, gpointer data); GtkWidget * spin_button (GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data); GtkWidget * check_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); GtkWidget * radio_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); GtkWidget * create_button (gchar * text, int image_format, gchar * image, int dimx, int dimy, int relief, GCallback handler, gpointer data); GtkWidget * abox (GtkWidget * box, char * lab, int vspace); GtkWidget * bbox (GtkWidget * box, char * lab); GtkWidget * cbox (GtkWidget * box, char * lab); GtkWidget * fbox (GtkWidget * box, char * lab); GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow); GtkWidget * create_expander (gchar * name, gchar * file_img); GtkWidget * destroy_this_widget (GtkWidget * widg); GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); GtkWidget * get_top_level (GtkWidget * widg); GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text); GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf); GMenuItem * create_menu_item (gboolean add_mnemo, gchar * name, gchar * action); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); ColRGBA * duplicate_color (int num, ColRGBA * col); ColRGBA gdkrgba_to_rgba (GdkRGBA colgdk); ColRGBA get_button_color (GtkColorChooser * colob); ColRGBA get_window_color (GtkWidget * color_win); GdkRGBA colrgba_togtkrgba (ColRGBA col); int get_widget_width (GtkWidget * widg); int get_widget_height (GtkWidget * widg); int button_get_status (GtkWidget * button); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "glview.h" extern void adjust_preferences_window (); /*! \fn gboolean is_the_widget_visible (GtkWidget * widg) \brief test if a GtkWidget exist, then return if it is visible or not \param widg the GtkWidget */ gboolean is_the_widget_visible (GtkWidget * widg) { if (GTK_IS_WIDGET(widg)) { return gtk_widget_is_visible (widg); } else { return FALSE; } } /*! \fn void show_the_widgets (GtkWidget * widg) \brief show GtkWidget \param widg the GtkWidget to show */ void show_the_widgets (GtkWidget * widg) { if (widg) { if (GTK_IS_WIDGET(widg)) { #ifdef GTK4 gtk_widget_set_visible (widg, TRUE); #else gtk_widget_show_all (widg); #endif } } } /*! \fn void hide_the_widgets (GtkWidget * widg) \brief hide GtkWidget \param widg the GtkWidget to show */ void hide_the_widgets (GtkWidget * widg) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { #ifdef GTK4 gtk_widget_set_visible (widg, FALSE); #else gtk_widget_hide (widg); #endif } } } /*! \fn void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) \brief Set sensitivity for a GtkWidget, ensuring it is a GtkWidget \param widg the GtkWidget \param sensitive Sensitivity */ void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { gtk_widget_set_sensitive (widg, sensitive); } } } /*! \fn void add_container_child (int type, GtkWidget * widg, GtkWidget * child) \brief Add a GtkWidget into another GtkWidget \param type GTK4 only: the type of container \param widg the container Gtkwidget \param child the child GtkWidget */ void add_container_child (int type, GtkWidget * widg, GtkWidget * child) { #ifdef GTK3 gtk_container_add (GTK_CONTAINER(widg), child); #else switch (type) { case CONTAINER_WIN: // gtk_window_set_child ((GtkWindow *)widg, NULL); gtk_window_set_child ((GtkWindow *)widg, child); break; case CONTAINER_SCR: // Bug in the management of scrolled window child /* Frequently getting warning messages at this point with GTK4 (atomes:?????): GLib-GObject-CRITICAL **: ??:??:??.???: g_object_set: assertion 'G_IS_OBJECT (object)' failed (atomes:?????): Gtk-CRITICAL **: ??:??:??.???: gtk_widget_unparent: assertion 'GTK_IS_WIDGET (widget)' failed */ gtk_scrolled_window_set_child ((GtkScrolledWindow *)widg, NULL); gtk_scrolled_window_set_child ((GtkScrolledWindow *)widg, child); break; case CONTAINER_VIE: // gtk_viewport_set_child ((GtkViewport *)widg, NULL); gtk_viewport_set_child ((GtkViewport *)widg, child); break; case CONTAINER_BUT: // gtk_button_set_child ((GtkButton *)widg, NULL); gtk_button_set_child ((GtkButton *)widg, child); break; case CONTAINER_FRA: // gtk_frame_set_child ((GtkFrame *)widg, NULL); gtk_frame_set_child ((GtkFrame *)widg, child); break; case CONTAINER_EXP: // gtk_expander_set_child ((GtkExpander *)widg, NULL); gtk_expander_set_child ((GtkExpander *)widg, child); break; } #endif } /*! \fn void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) \brief Add a GtkWidget in a GtkBox at the end position \param widg the GtkBox \param child the GtkWidget to add \param expand GTK3 only: expandable \param fill GTK3 only: fill \param padding GTK3 only: box padding */ void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) { #ifdef GTK4 // gtk_widget_set_hexpand (child, TRUE); gtk_box_append (GTK_BOX(widg), child); #else gtk_box_pack_end (GTK_BOX(widg), child, expand, fill, padding); #endif } /*! \fn void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) \brief Add a GtkWidget in a GtkBox at the initial position \param orientation horizontal or vertical \param widg the GtkBox \param child the GtkWidget to add \param expand GTK3 only: expandable \param fill GTK3 only: fill \param padding GTK3 only: box padding */ void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) { #ifdef GTK4 if (orientation == GTK_ORIENTATION_HORIZONTAL && padding) { gtk_box_append (GTK_BOX(widg), markup_label (" ", padding, -1, 0.0, 0.0)); } else if (orientation == GTK_ORIENTATION_VERTICAL && padding > 10) { gtk_box_append (GTK_BOX(widg), markup_label (" ", -1, padding/2, 0.0, 0.0)); } gtk_box_append (GTK_BOX(widg), child); if (orientation == GTK_ORIENTATION_HORIZONTAL && padding) { gtk_box_append (GTK_BOX(widg), markup_label (" ", padding, -1, 0.0, 0.0)); } else if (orientation == GTK_ORIENTATION_VERTICAL && padding > 10) { gtk_box_append (GTK_BOX(widg), markup_label (" ", -1, padding/2, 0.0, 0.0)); } #else gtk_box_pack_start (GTK_BOX(widg), child, expand, fill, padding); #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) \brief Adding a GtkMenuItem with a submenu and setting the sensitivity \param name Name of the menu item \param active Sensitivity \param sub_menu the GtkWidget submenu */ GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) { GtkWidget * item = create_menu_item (FALSE, name); gtk_menu_item_set_submenu ((GtkMenuItem *)item, sub_menu); widget_set_sensitive (item, active); return item; } #endif /*! \fn GtkWidget * new_gtk_window () \brief create a new GtkWindow */ GtkWidget * new_gtk_window () { #ifdef GTK4 return gtk_window_new (); #else return gtk_window_new (GTK_WINDOW_TOPLEVEL); #endif } #ifdef GTK4 /*! \fn void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data) \brief Adding GTK4 mouse, and keyboard events to a GtkWidget \param widget the GtkWidget \param cp_name Name of the click pressed event \param cp_handler Click pressed callback \param cp_data Click pressed data pointer \param cr_name Name of the click released event \param cr_handler Click released callback \param cr_data Click released data pointer \param kp_name Name of the key pressed event \param kp_handler Key pressed callback \param kp_data Key pressed data pointer \param mo_name Name of the mouse motion event \param mo_handler Mouse motion callback \param mo_data Mouse motion data pointer \param sc_name Name of the mouse scroll event \param sc_handler Mouse scroll callback \param sc_data Mouse scroll data pointer */ void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data) { GtkGesture * gesture; GtkEventController * key; GtkEventController * motion; if (cp_name) { gesture = gtk_gesture_click_new (); gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), cp_name); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0); if (cp_handler) g_signal_connect (gesture, "pressed", cp_handler, cp_data); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture)); } if (cr_name) { gesture = gtk_gesture_click_new (); gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), cr_name); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0); if (cr_handler) g_signal_connect (gesture, "released", cr_handler, cr_data); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture)); } if (kp_name) { key = gtk_event_controller_key_new (); gtk_event_controller_set_name (key, kp_name); if (kp_handler) g_signal_connect (key, "key-pressed", kp_handler, kp_data); gtk_widget_add_controller (widget, key); } if (mo_name) { motion = gtk_event_controller_motion_new (); gtk_event_controller_set_name (motion, mo_name); if (mo_handler) g_signal_connect (motion, "motion", mo_handler, mo_data); gtk_widget_add_controller (widget, motion); } if (sc_name) { motion = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); gtk_event_controller_set_name (motion, sc_name); if (sc_handler) g_signal_connect (motion, "scroll", sc_handler, sc_data); gtk_widget_add_controller (widget, motion); } } #endif /*! \fn GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) \brief create a new GtkWindow \param str Title \param parent Parent GtkWidget (if any) \param modal Modal (TRUE/FALSE) \param resiz Can be re-sized (TRUE/FALSE) */ GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) { GtkWidget * win; win = new_gtk_window (); if (str) gtk_window_set_title (GTK_WINDOW(win), prepare_for_title(str)); gtk_window_set_resizable (GTK_WINDOW (win), TRUE); #ifdef GTK3 gtk_window_set_attached_to (GTK_WINDOW (win), parent); gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif // gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent)); gtk_window_set_modal (GTK_WINDOW(win), modal); gtk_window_set_resizable (GTK_WINDOW(win), resiz); gtk_window_set_destroy_with_parent (GTK_WINDOW (win), TRUE); return win; } #ifdef GTK4 /*! \fn void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) \brief run a GTK4 GtkNativeDialog (used to read files) \param dial the GtkNativeDialog \param handler the callback \param data the associated data pointer */ void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) { gtk_native_dialog_set_modal (dial, TRUE); if (handler) g_signal_connect (G_OBJECT(dial), "response", handler, data); gtk_native_dialog_show (dial); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } #endif /*! \fn void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) \brief run a GTK (3 and 4) basic GtkDialog \param dial the GtkDialog \param handler the callback \param data the associated data pointer */ void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) { gtk_window_set_modal (GTK_WINDOW(dial), TRUE); if (handler) g_signal_connect (G_OBJECT(dial), "response", handler, data); show_the_widgets (dial); if (preferences) adjust_preferences_window (); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } /*! \fn GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) \brief Create a new dialog modal window \param str Title \param parent Parent GtkWindow, if any */ GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) { GtkWidget * win = gtk_dialog_new_with_buttons (str, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("_Close"), GTK_RESPONSE_CLOSE, NULL); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif return win; } /*! \fn GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) \brief create a modal (cannot be ignored) message window \param message the message \param title the title \param mtype the message type \param buttons the type of closing button to add \param parent the parent window, if any */ GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) { GtkWidget * win; if (parent) { win = gtk_message_dialog_new (GTK_WINDOW(parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, mtype, buttons, NULL); } else { win = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, mtype, buttons, NULL); } gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (win), message); GtkWidget * content_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(win)); GtkWidget * label; #ifdef GTK4 label = gtk_widget_get_first_child(content_area); #else GList * children = gtk_container_get_children(GTK_CONTAINER(content_area)); label = GTK_WIDGET(children -> data); g_list_free(children); #endif gtk_label_set_use_markup (GTK_LABEL(label), TRUE); gtk_label_set_selectable(GTK_LABEL(label), TRUE); gtk_window_set_title (GTK_WINDOW(win), title); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif show_the_widgets (win); return win; } /*! \fn GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) \brief create a dialog modal offering a choice to apply something or not \param title the message \param parent the parent window, if any \param resiz Is the new window re-sizable ? */ GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) { GtkWidget * dca = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("Cancel"), GTK_RESPONSE_CANCEL, _("Apply"), GTK_RESPONSE_APPLY, NULL); gtk_window_set_resizable (GTK_WINDOW(dca), resiz); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (dca), THETD); #endif return dca; } /*! \fn void resize_this_window (GtkWidget * window, int x, int y) \brief resize this GtkWindow \param window the GtkWidget to resize \param x the x size \param y the y size */ void resize_this_window (GtkWidget * window, int x, int y) { #ifdef GTK3 gtk_window_resize (GTK_WINDOW(window), x, y); #else gtk_window_set_default_size (GTK_WINDOW(window), x, y); #endif } /*! \fn const gchar * entry_get_text (GtkEntry * entry) \brief get the text in a GtkEntry \param entry the GtkEntry */ const gchar * entry_get_text (GtkEntry * entry) { #ifdef GTK4 return gtk_editable_get_text (GTK_EDITABLE(entry)); #else return gtk_entry_get_text (entry); #endif } /*! \fn void update_entry_int (GtkEntry * entry, int intval) \brief update the content of a GtkEntry as int \param entry the GtkEntry \param intval the new int value to display */ void update_entry_int (GtkEntry * entry, int intval) { gchar * value = g_strdup_printf("%d", intval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); #endif g_free (value); } /*! \fn void update_entry_double (GtkEntry * entry, double doubleval) \brief update the content of a GtkEntry as double \param entry the GtkEntry \param doubleval the new double value to display */ void update_entry_double (GtkEntry * entry, double doubleval) { gchar * value = g_strdup_printf("%f", doubleval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); #endif g_free (value); } /*! \fn void update_entry_long_double (GtkEntry * entry, double doubleval) \brief update the content of a GtkEntry as long double \param entry the GtkEntry \param doubleval the new long double value to display */ void update_entry_long_double (GtkEntry * entry, double doubleval) { gchar * value = g_strdup_printf("%15.10lf", doubleval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); g_free (value); #endif } /*! \fn void update_entry_text (GtkEntry * entry, gchar * text) \brief update the content of a GtkEntry as string \param entry the GtkEntry \param text the new string to display */ void update_entry_text (GtkEntry * entry, gchar * text) { #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)text); #else gtk_entry_set_text (entry, (const gchar *)text); #endif } /*! \fn void text_view_set_monospace (GtkWidget * view) \brief set the font of a GtkTextView as monospace \param view the GtkTextView */ void text_view_set_monospace (GtkWidget * view) { gtk_text_view_set_monospace (GTK_TEXT_VIEW(view), TRUE); } /*! \fn void gtk_label_align (GtkWidget * lab, float ax, float ay) \brief set text alignment in a GtkLabel \param lab the GtkLabel \param ax the x alignment \param ay the Y alignment */ void gtk_label_align (GtkWidget * lab, float ax, float ay) { gtk_label_set_xalign (GTK_LABEL (lab), ax); gtk_label_set_yalign (GTK_LABEL (lab), ay); } /*! \fn GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) \brief create an horizontal scale GtkWidget \param min Min value for the h scale \param max Max value for the h scale \param delta the step on the h scale \param val the value to position to set on the h scale \param pos the location where the value is on display \param round the rounding digit for the value on display \param size the x size of the GtkWdiget \param handler the callback to move the h scale \param scroll_handler the callback on mouse scroll \param data the associated data pointer */ GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) { GtkWidget * hscale; hscale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, min, max, delta); gtk_scale_set_draw_value (GTK_SCALE(hscale), TRUE); gtk_widget_set_size_request (hscale, size, -1); gtk_scale_set_value_pos (GTK_SCALE(hscale), pos); gtk_range_set_value (GTK_RANGE(hscale), val); gtk_range_set_round_digits (GTK_RANGE(hscale), round); if (handler != NULL) g_signal_connect (G_OBJECT(hscale), "value-changed", handler, data); if (scroll_handler != NULL) g_signal_connect (G_OBJECT(hscale), "change-value", scroll_handler, data); return hscale; } /*! \fn GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) \brief create an vertical scale GtkWidget \param min Min value for the v scale \param max Max value for the v scale \param delta the step on the v scale \param val the value to position to set on the h scale \param pos the location where the value is on display \param round the rounding digit for the value on display \param size the x size of the GtkWdiget \param handler the callback to move the v scale \param scroll_handler the callback on mouse scroll \param data the associated data pointer */ GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) { GtkWidget * vscale; vscale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, min, max, delta); gtk_scale_set_draw_value (GTK_SCALE(vscale), TRUE); gtk_scale_set_value_pos (GTK_SCALE(vscale), pos); gtk_widget_set_size_request (vscale, size, size); gtk_range_set_value (GTK_RANGE(vscale), val); gtk_range_set_round_digits (GTK_RANGE(vscale), round); if (handler != NULL) g_signal_connect (G_OBJECT(vscale), "value-changed", handler, data); if (scroll_handler != NULL) g_signal_connect (G_OBJECT(vscale), "change-value", scroll_handler, data); return vscale; } /*! \fn GtkWidget * create_vbox (int spacing) \brief create a GtkBox with vertical orientation \param spacing spacing between elements */ GtkWidget * create_vbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_VERTICAL, spacing); } /*! \fn GtkWidget * create_hbox (int spacing) \brief create a GtkBox with horizontal orientation \param spacing spacing between elements */ GtkWidget * create_hbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_HORIZONTAL, spacing); } /*! \fn GtkWidget * dialog_get_content_area (GtkWidget * widg) \brief prepare GtkWidget to insert content in a GtkDialog window \param widg the GtkDialog window */ GtkWidget * dialog_get_content_area (GtkWidget * widg) { #ifdef GTK3 return gtk_dialog_get_content_area (GTK_DIALOG(widg)); #else GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, gtk_dialog_get_content_area (GTK_DIALOG(widg)), vbox, TRUE, TRUE, 0); return vbox; #endif } /*! \fn void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) \brief Add a GtkWidget in a GtkLayout \param layout the GtkLayout \param child the GtkWidget to insert \param x_pos the x position to insert at \param y_pos the y position to insert at */ void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) { #ifdef GTK3 gtk_layout_put (GTK_LAYOUT(layout), child, x_pos, y_pos); #else gtk_fixed_put (GTK_FIXED(layout), child, x_pos, y_pos); #endif } /*! \fn GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) \brief Insert a vertical GtkBox in a GtkLatout then send back the GtkBox \param layout the GtkLayout \param size_x the x size of the box \param size_y the y size of the box */ GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) { GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, size_x, size_y); layout_add_widget (layout, vbox, 0, 5); return vbox; } /*! \fn GtkWidget * create_layout (int x, int y) \brief create a GtkLayout / GtkFixed widget \param x the x size of the widget \param y the y size of the widget */ GtkWidget * create_layout (int x, int y) { GtkWidget * layout; #ifdef GTK3 layout = gtk_layout_new (NULL, NULL); #else layout = gtk_fixed_new (); #endif gtk_widget_set_size_request (layout, x, y); return layout; } /*! \fn int combo_get_active (GtkWidget * combo) \brief retrieve the active item's position \param combo the target GtkWidget */ int combo_get_active (GtkWidget * combo) { return gtk_combo_box_get_active ((GtkComboBox *)combo); } /* #ifdef GTK4 #if GTK_MINOR_VERSION > 9 return gtk_drop_down_get_selected (GtkDropDown *)combo); #else return gtk_combo_box_get_active ((GtkComboBox *)combo); #endif #else return gtk_combo_box_get_active ((GtkComboBox *)combo); #endif // GTK4 } */ /*! \fn void combo_set_active (GtkWidget * combo, int pos) \brief set the active item's position \param combo the target GtkWidget \param pos the position to set */ void combo_set_active (GtkWidget * combo, int pos) { gtk_combo_box_set_active ((GtkComboBox *)combo, pos); } /*! \fn void combo_set_markup (GtkWidget * combo) \brief use pango markup in combo widget \param combo to the target widget */ void combo_set_markup (GtkWidget * combo) { GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell_list -> data, "markup", 0, NULL); } } /*! \fn void combo_text_append (GtkWidget * combo, gchar * text) \brief append text in GtkComboBox widget \param combo the GtkWidget \param text the text to append */ void combo_text_append (GtkWidget * combo, gchar * text) { gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo), text); } /*! \fn void combo_text_prepend (GtkWidget * combo, gchar * text) \brief prepend text in GtkComboBox widget \param combo the GtkWidget \param text the text to prepend */ void combo_text_prepend (GtkWidget * combo, gchar * text) { gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT(combo), text); } /*! \fn GtkWidget * create_combo () \brief create a GtkCombox widget, note deprecated in GTK4 */ GtkWidget * create_combo () { return gtk_combo_box_text_new (); } /*! \fn void setup_text_tags (GtkTextBuffer * buffer) \brief prepare the available text tags for the GtkTextBuffer \param buffer the GtkTextBuffer */ void setup_text_tags (GtkTextBuffer * buffer) { GtkTextTagTable * textags = gtk_text_buffer_get_tag_table(buffer); /* Sans font */ tag = gtk_text_tag_new ("sans"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "family", "sans", NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* Monospace font */ tag = gtk_text_tag_new ("monospace"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "family", "monospace", NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* Default Font size */ tag = gtk_text_tag_new ("default-size"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* */ tag = gtk_text_tag_new ("underline"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "underline", PANGO_UNDERLINE_SINGLE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* */ tag = gtk_text_tag_new ("underline_double"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* italic */ tag = gtk_text_tag_new ("italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold */ tag = gtk_text_tag_new ("bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold italic */ tag = gtk_text_tag_new ("bold_italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* superscript */ tag = gtk_text_tag_new ("sup"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "scale", .6, "rise", 6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript */ tag = gtk_text_tag_new ("sub"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* justify-left */ tag = gtk_text_tag_new("justify-left"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "justification", GTK_JUSTIFY_LEFT, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref(tag); /* justify-center */ tag = gtk_text_tag_new("justify-center"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "justification", GTK_JUSTIFY_CENTER, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref(tag); /* justify-right */ tag = gtk_text_tag_new("justify-right"); g_object_set(tag, "justification", GTK_JUSTIFY_RIGHT, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* heading */ tag = gtk_text_tag_new("heading"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", 1.5, "justification", GTK_JUSTIFY_CENTER, "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* red font */ tag = gtk_text_tag_new("red"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "red", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* orange font */ tag = gtk_text_tag_new("orange"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "orange", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* yellow font */ tag = gtk_text_tag_new("yellow"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "yellow2", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* green font */ tag = gtk_text_tag_new("green"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "green", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* light green font */ tag = gtk_text_tag_new("light_green"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "light green", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* cyan font */ tag = gtk_text_tag_new("cyan"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "cyan", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* blue font */ tag = gtk_text_tag_new("blue"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "blue", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* pink font */ tag = gtk_text_tag_new("pink"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "pink", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* violet font */ tag = gtk_text_tag_new("violet"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "dark violet", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* grey background */ tag = gtk_text_tag_new("grey_back"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "background", "lightgrey", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* bold grey background */ tag = gtk_text_tag_new("bold_grey_back"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "background", "lightgrey", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* bold red font */ tag = gtk_text_tag_new ("bold_red"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "red", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold blue font */ tag = gtk_text_tag_new ("bold_blue"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "blue", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold green font */ tag = gtk_text_tag_new ("bold_green"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "green", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold orange font */ tag = gtk_text_tag_new ("bold_orange"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "orange", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold pink font */ tag = gtk_text_tag_new ("bold_pink"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "pink", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript italic*/ tag = gtk_text_tag_new ("sub_italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript bold */ tag = gtk_text_tag_new ("sub_bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* superscript bold */ tag = gtk_text_tag_new ("sup_bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", .6, "rise", 6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); } /*! \fn GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) \brief create a GtkTextBuffer \param handler the callback on buffer changed \param data the associated data pointer \param text the text to display */ GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) { GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd; buffer = gtk_text_buffer_new (NULL); setup_text_tags (buffer); gtk_text_buffer_get_start_iter (buffer, &bStart); gtk_text_buffer_get_end_iter (buffer, &bEnd); gtk_text_buffer_delete (buffer, &bStart, &bEnd); if (text != NULL) gtk_text_buffer_set_text (buffer, text, -1); if (handler != NULL) g_signal_connect (G_OBJECT (buffer), "changed", handler, data); return buffer; } /*! \fn GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) \brief create a GtkTextView and display some text \param dimx the x size of the GtkTextView \param dimy the y size of the GtkTextView \param edit Is the text view editable (1/0) \param mono Use monospace font (1/0) \param handler the callback on buffer changed \param data the associated data pointer \param text the text to display */ GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) { GtkWidget * tview = gtk_text_view_new (); gtk_text_view_set_buffer (GTK_TEXT_VIEW(tview), add_buffer(handler, data, text)); gtk_widget_set_size_request (tview, dimx, dimy); gtk_text_view_set_editable (GTK_TEXT_VIEW(tview), edit); if (mono) text_view_set_monospace (tview); return tview; } /*! \fn static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) \brief convert a cairo surface to pixbuf \param surf the cairo surface to convert \param pix the resulting GdkPixBuf \param src_x Shift on x, if any \param src_y Shift on y, if any \param width Image width \param height Image height */ static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) { int x, y; guchar * src_data = cairo_image_surface_get_data (surf); int src_stride = cairo_image_surface_get_stride (surf); guchar * dest_data = gdk_pixbuf_get_pixels (pix); int dest_stride = gdk_pixbuf_get_rowstride (pix); src_data += src_stride * src_y + src_x * 4; for (y = 0; y < height; y++) { guint32 *src = (guint32 *) src_data; for (x = 0; x < width; x++) { guint alpha = src[x] >> 24; if (alpha == 0) { dest_data[x * 4 + 0] = 0; dest_data[x * 4 + 1] = 0; dest_data[x * 4 + 2] = 0; } else { dest_data[x * 4 + 0] = (((src[x] & 0xff0000) >> 16) * 255 + alpha / 2) / alpha; dest_data[x * 4 + 1] = (((src[x] & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha; dest_data[x * 4 + 2] = (((src[x] & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha; } dest_data[x * 4 + 3] = alpha; } src_data += src_stride; dest_data += dest_stride; } } /*! \fn GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) \brief convert cairo surface to GdkPixbuf \param surf the cairo sufrace to convert */ GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) { int width = cairo_image_surface_get_width (surf); int height = cairo_image_surface_get_height (surf); GdkPixbuf * pix = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width , height); convert_alpha (surf, pix, 0, 0, width, height); return pix; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) \brief GtkEntry activate signal managment \param widg the GtkWidget sending the signal \param event the associated focus event \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) { g_signal_emit_by_name (G_OBJECT(widg), "activate", data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) \brief GtkEntry activate signal managment \param focus Focus event controller \param data the associated data pointer */ G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) { g_signal_emit_by_name (G_OBJECT(gtk_event_controller_get_widget((GtkEventController *)focus)), "activate", data); } #endif /*! \fn GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) \brief Create a GtkEntry \param handler the callback \param dim the x size \param cdim the maximum number of character to display \param key_release Use release event (1/0) \param data the data pointer for the callback */ GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) { GtkWidget * entry = gtk_entry_new (); gtk_widget_set_size_request (entry, dim, -1); #ifdef GTK4 gtk_editable_set_width_chars (GTK_EDITABLE(entry), 0); gtk_editable_set_max_width_chars (GTK_EDITABLE(entry), cdim); #else gtk_entry_set_width_chars (GTK_ENTRY(entry), 0); gtk_entry_set_max_width_chars (GTK_ENTRY(entry), cdim); #endif gtk_entry_set_alignment (GTK_ENTRY(entry), 1.0); if (handler != NULL) { g_signal_connect (G_OBJECT (entry), "activate", handler, data); #ifdef GTK3 g_signal_connect (G_OBJECT (entry), "focus-out-event", G_CALLBACK(to_activate_entry), data); #else /* Pour ajouter une icone dans l'entry: gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, "edit-find-symbolic"); // Set up the search icon gtk_entry_set_icon_activatable (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, TRUE); gtk_entry_set_icon_sensitive (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, TRUE); // Then the press can have action see gtk4 demo g_signal_connect (entry, "icon-press", G_CALLBACK(icon_press_cb), NULL); */ GtkEventController * focus = gtk_event_controller_focus_new (); gtk_event_controller_set_name (focus, "focus-out"); g_signal_connect (G_OBJECT(focus), "leave", G_CALLBACK(to_activate_entry), data); gtk_widget_add_controller (entry, focus); #endif } if (key_release) { #ifdef GTK3 g_signal_connect (G_OBJECT (entry), "key-release-event", G_CALLBACK(to_activate_entry), data); #else // Key press controler #endif } return entry; } /*! \fn GtkWidget * stock_image (const gchar * stock_id) \brief create a GtkImage for the Gtk database \param stock_id */ GtkWidget * stock_image (const gchar * stock_id) { #ifdef GTK4 return gtk_image_new_from_icon_name (stock_id); #else return gtk_image_new_from_icon_name (stock_id, GTK_ICON_SIZE_MENU); #endif } #ifdef GTK3 /*! \fn GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) \brief create a GtkMenuItem and set mnemonic \param add_mnemo Use mnemonic (1/0) \param name the name of the menu item */ GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) { return (add_mnemo) ? gtk_menu_item_new_with_mnemonic (name) : gtk_menu_item_new_with_label (name); } /*! \fn GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) \brief create a GtkMenuItem using a GtkWidget as label \param widg the GtkWidget to use \param check Create a check menu item (1/0) \param radio Create a radio menu item (1/0) \param status If check or radio status (1/0) */ GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) { GtkWidget * item; if (check) { item = gtk_check_menu_item_new (); if (radio) gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM(item), TRUE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), status); } else { item = gtk_menu_item_new (); } gtk_container_add (GTK_CONTAINER(item), widg); return item; } #endif /* GIcon* g_icon_new_for_string ( const gchar* str, GError** error ) void g_menu_item_set_icon ( GMenuItem* menu_item, GIcon* icon ) void g_menu_item_set_attribute ( GMenuItem* menu_item, const gchar* attribute, const gchar* format_string, ... ) */ /*! \fn GtkWidget * create_image_from_data (int format, gpointer item_image) \brief create Gtk image for data \param format Image format \param item_image the data to create the image */ GtkWidget * create_image_from_data (int format, gpointer item_image) { GtkWidget * icon = NULL; switch (format) { case IMG_PIXBUF: icon = gtk_image_new_from_pixbuf ((GdkPixbuf*)item_image); break; case IMG_SURFACE: #ifdef GTK4 icon = gtk_image_new_from_pixbuf (convert_to_pixbuf ((cairo_surface_t *)item_image)); #else icon = gtk_image_new_from_surface ((cairo_surface_t *)item_image); #endif break; case IMG_FILE: icon = gtk_image_new_from_file ((const gchar *)item_image); break; case IMG_STOCK: icon = stock_image ((const gchar *)item_image); break; } return icon; } #ifdef GTK3 /*! \fn GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status) \brief create a GT3 menu item, and insert it in a menu, if any \param menu the menu to insert the menu item in \param name the name of the menu item \param icon_format the image format of the icon for the menu item \param item_icon the data for the image of the icon \param handler the callback for the menu item \param data the associated data pointer \param accel Keyboard short cut -1/0) \param key the key to press \param mod the modifier in any (Ctrl, Alt ...) \param check Create a check menu item (1/0) \param radio Create a radio menu item (1/0) \param status If check or radio status (1/0) */ GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status) { GtkWidget * item = NULL; GtkWidget * icon = NULL; GtkWidget * lab = NULL; if (name) { if (accel) { lab = gtk_accel_label_new (name); gtk_label_align (lab, 0.0, 0.5); gtk_widget_set_size_request (lab, -1, -1); gtk_label_set_use_markup (GTK_LABEL(lab), TRUE); gtk_accel_label_set_accel ((GtkAccelLabel *)lab, key, mod); } else { lab = markup_label(name, -1, -1, 0.0, 0.5); } } if (icon_format != IMG_NONE) icon = create_image_from_data (icon_format, item_icon); if (name) { #ifdef MENU_ICONS if (icon) { GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, icon, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, lab, FALSE, FALSE, (icon_format == IMG_SURFACE) ? 0 : 6); item = create_menu_item_from_widget (box, check, radio, status); } else { item = create_menu_item_from_widget (lab, check, radio, status); } #else item = create_menu_item_from_widget (lab, check, radio, status); #endif } else if (icon) { item = create_menu_item_from_widget (icon, check, radio, status); } if (handler != NULL) g_signal_connect (G_OBJECT(item), "activate", handler, data); if (menu != NULL) gtk_menu_shell_append ((GtkMenuShell *)menu, item); return item; } /*! \fn GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) \brief short cut to create and insert a menu item with the "Advanced" text and a stock icon \param menu the menu to insert the menu item \param handler the callback for the menu item \param data the associated data pointer \param accel Keyboard short cut -1/0) \param key the key to press \param mod the modifier in any (Ctrl, Alt ...) */ GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) { return gtk3_menu_item (menu, _("Advanced"), IMG_STOCK, (gpointer)DPROPERTIES, handler, data, accel, key, mod, FALSE, FALSE, FALSE); } /*! \fn void add_menu_separator (GtkWidget * menu) \brief add sepator in a menu \param menu the GtkMenu */ void add_menu_separator (GtkWidget * menu) { gtk_menu_shell_append ((GtkMenuShell *)menu, gtk_separator_menu_item_new ()); } #endif /*! \fn GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay) \brief create a GtkLabel with pango markup \param text Message to display \param dimx y size for the widget \param dimy y size for the widget \param ax x alignment \param ay y alignment */ GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay) { GtkWidget * lab = gtk_label_new (text); gtk_label_align (lab, ax, ay); gtk_widget_set_size_request (lab, dimx, dimy); gtk_label_set_use_markup (GTK_LABEL(lab), TRUE); return lab; } /*! \fn ColRGBA * duplicate_color (int num, ColRGBA * col) \brief duplicate a ColRGBA pointer \param num Size of the pointer \param col ColRGBA pointer to duplicate */ ColRGBA * duplicate_color (int num, ColRGBA * col) { ColRGBA * new_col = g_malloc0(num*sizeof*new_col); int i; for (i=0; i%s", legend); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(symbol, 15, -1, 1.0, 0.5) , FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5) , FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } /*! \fn GtkWidget * abox (GtkWidget * box, char * lab, int vspace) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display \param vspace vertical space */ GtkWidget * abox (GtkWidget * box, char * lab, int vspace) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, vspace); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.25), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, 150, 30, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } /*! \fn GtkWidget * bbox (GtkWidget * box, char * lab) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display */ GtkWidget * bbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(lab, 150, 30, 0.0, 0.5), FALSE, FALSE, 0); return hhbox; } /*! \fn GtkWidget * cbox (GtkWidget * box, char * lab) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display */ GtkWidget * cbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(lab, -1, 30, 0.0, 0.5), TRUE, TRUE, 40); return hhbox; } /*! \fn GtkWidget * fbox (GtkWidget * box, char * lab) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display */ GtkWidget * fbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, 350, 30, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } /*! \fn GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) \brief create a scroll window \param box the box to insert the scroll window in, if any \param dimx the x size of the widget \param dimy the x size of the widget \param shadow Add shadow (1/0) */ GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) { GtkWidget * scroll; #ifdef GTK4 scroll = gtk_scrolled_window_new (); #else scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scroll), shadow); #endif gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (scroll, dimx, dimy); // To check all create_scroll ! if (box != NULL) add_box_child_start (GTK_ORIENTATION_VERTICAL, box, scroll, TRUE, TRUE, 0); return scroll; } /*! \fn GtkWidget * create_expander (gchar * name, gchar * file_img) \brief create GtkExpander \param name Name of the expander tab \param file_img image file to add if required */ GtkWidget * create_expander (gchar * name, gchar * file_img) { GtkWidget * expand = gtk_expander_new (name); GtkWidget * hbox = create_hbox (0); if (file_img != NULL) { GtkWidget * img = gtk_image_new_from_file (file_img); gtk_widget_set_size_request (img, 20, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img, TRUE, TRUE, 10); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(name, 200, 20, 0.0, 0.5), FALSE, TRUE, 0); gtk_expander_set_label_widget (GTK_EXPANDER(expand), hbox); return expand; } /*! \fn void provide_gtk_css (gchar * css) \brief create a css provider based on the css data \param css the css data, use the name of the variable to use the css */ void provide_gtk_css (gchar * css) { GtkCssProvider * provider = gtk_css_provider_new (); #ifdef GTK4 #if GTK_MINOR_VERSION < 12 gtk_css_provider_load_from_data (provider, css, -1); #else gtk_css_provider_load_from_string (provider, css); #endif gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #else gtk_css_provider_load_from_data (provider, css, -1, NULL); gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #endif g_object_unref (provider); } /*! \fn GtkWidget * destroy_this_widget (GtkWidget * widg) \brief destroy a GtkWidget \param widg the GtkWidget to destroy */ GtkWidget * destroy_this_widget (GtkWidget * widg) { hide_the_widgets (widg); #ifdef GTK3 if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { gtk_widget_destroy (widg); } } #endif return NULL; } /*! \fn void destroy_this_dialog (GtkDialog * dialog) \brief destroy a GtkDialog \param dialog the GtkDialog to destroy */ void destroy_this_dialog (GtkDialog * dialog) { #ifdef GTK4 gtk_window_destroy (GTK_WINDOW(dialog)); #else destroy_this_widget (GTK_WIDGET(dialog)); #endif g_main_loop_quit (Event_loop[dialog_id]); g_main_loop_unref (Event_loop[dialog_id]); dialog_id --; } /*! \fn void destroy_this_native_dialog (GtkNativeDialog * dialog) \brief destroy a GtkNativeDialog \param dialog the GtkNativeDialog to destroy */ void destroy_this_native_dialog (GtkNativeDialog * dialog) { gtk_native_dialog_destroy (dialog); g_object_unref (dialog); g_main_loop_quit (Event_loop[dialog_id]); g_main_loop_unref (Event_loop[dialog_id]); dialog_id --; } /*! \fn G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) \brief to destroy a GtkDialog when the dialog emit the closing signal \param dialog the GtkDialog to destroy \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) { destroy_this_dialog (dialog); } #ifdef GTK4 /*! \fn GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) \brief create a file list from files selected using a GtkFileChooser */ GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) { return gtk_file_chooser_get_files (chooser); } #else /*! \fn GList * file_chooser_get_file_names (GtkFileChooser * chooser) \brief create a file list from files selected using a GtkFileChooser */ GSList * file_chooser_get_file_names (GtkFileChooser * chooser) { return gtk_file_chooser_get_filenames (chooser); } #endif /*! \fn gchar * file_chooser_get_file_name (GtkFileChooser * chooser) \brief get a file name from a GtkFileChooser (single file selected) \param chooser the GtkFilechooser */ gchar * file_chooser_get_file_name (GtkFileChooser * chooser) { #ifdef GTK4 return g_file_get_parse_name (gtk_file_chooser_get_file (chooser)); #else return gtk_file_chooser_get_filename (chooser); #endif } /*! \fn gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) \brief get the current folder for a GtkFileChooser \param chooser the GtkFilechooser */ gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) { #ifdef GTK4 return g_file_get_parse_name (gtk_file_chooser_get_current_folder (chooser)); #else return gtk_file_chooser_get_current_folder (chooser); #endif } /*! \fn gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) \brief set file name in a GtkFilechooser \param chooser the GtkFilechooser \param filename the file name to appear in the GtkFilechooser */ gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) { GFile * default_file_for_saving = g_file_new_for_path (filename); gboolean res = gtk_file_chooser_set_file (chooser, default_file_for_saving, NULL); if (! res) { gchar * str = g_strdup_printf (_("Impossible to locate file: %s"), filename); show_error (str, 0, (GtkWidget *)chooser); } return res; } /*! \fn void file_chooser_set_current_folder (GtkFileChooser * chooser) \brief set current folder in a GtkFilechooser \param chooser the GtkFilechooser */ void file_chooser_set_current_folder (GtkFileChooser * chooser) { #ifdef GTK4 gtk_file_chooser_set_current_folder (chooser, g_file_new_for_path ("./"), NULL); #else gtk_file_chooser_set_current_folder (chooser, ""); #endif } #ifdef GTK4 /*! \fn GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) \brief create a GtkFileChooser, utility to select file(s) \param title the title of the window \param parent the parent window, if any \param act the action to perform (read or write) \param act_name the action name to display */ GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) { return gtk_file_chooser_native_new (title, parent, act, act_name, _("Cancel")); } #else /*! \fn GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) \brief create a GtkFileChooser, utility to select file(s) \param title the title of the window \param parent the parent window, if any \param act the action to perform (read or write) \param act_name the action name to display */ GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) { return gtk_file_chooser_dialog_new (title, parent, act, _("Cancel"), GTK_RESPONSE_CANCEL, act_name, GTK_RESPONSE_ACCEPT, NULL); } #endif /*! \fn ColRGBA get_button_color (GtkColorChooser * colob) \brief get the ColRGBA color from a GtkColorChooser button \param colob the GtkColorChooser button */ ColRGBA get_button_color (GtkColorChooser * colob) { GdkRGBA col; gtk_color_chooser_get_rgba (colob, & col); return gdkrgba_to_rgba (col); } /*! \fn ColRGBA get_window_color (GtkWidget * color_win) \brief get the ColRGBA color from a color selection window \param color_win the color selection window */ ColRGBA get_window_color (GtkWidget * color_win) { GdkRGBA col; gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(color_win), & col); return gdkrgba_to_rgba (col); } /*! \fn void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) \brief set the color of a color selection window \param color_win the color selection window \param col the color to use */ void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) { GdkRGBA colo = colrgba_togtkrgba(col); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_win), & colo); } #ifdef GTK4 /*! \fn void pop_menu_at_pointer (GtkWidget * pop, double x, double y) \brief popup a popover menu at pointer location \param pop the menu to popup \param x x position \param y y position */ void pop_menu_at_pointer (GtkWidget * pop, double x, double y) { GdkRectangle rect; rect.x = x; rect.y = y; rect.width = 1; rect.height = 1; gtk_popover_set_has_arrow (GTK_POPOVER(pop), FALSE); gtk_popover_set_pointing_to (GTK_POPOVER(pop), & rect); gtk_popover_popup (GTK_POPOVER(pop)); } #else /*! \fn void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) \brief popup a menu at pointer location \param widg the menu to popup \param event the GdkEvent triggering the signal */ void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) { show_the_widgets (widg); gtk_menu_popup_at_pointer (GTK_MENU (widg), event); } #endif /*! \fn GtkWidget * get_top_level (GtkWidget * widg) \brief get the top level container, window, of a widget \param widg the GtkWidget */ GtkWidget * get_top_level (GtkWidget * widg) { #ifdef GTK4 return (GtkWidget *)gtk_widget_get_root (widg); #else return gtk_widget_get_toplevel (widg); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) \brief destroy a GtkWindow \param win the GtkWindow to destroy \param data the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) \brief destroy a GtkWindow \param win the GtkWindow to destroy \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) #endif { destroy_this_widget (GTK_WIDGET(win)); return TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) \brief hide a GtkWindow \param win the GtkWindow to hide \param data the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) \brief hide a GtkWindow \param win the GtkWindow to hide \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) #endif { hide_the_widgets (GTK_WIDGET(win)); return TRUE; } /*! \fn void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) \brief add a close event signal and callback to a GtkWidget \param widg the GtkWidget \param handler the callback for the close event \param data the associated data pointer */ void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) { #ifdef GTK4 g_signal_connect (G_OBJECT (widg), "close-request", handler, data); #else g_signal_connect (G_OBJECT (widg), "delete-event", handler, data); #endif } /*! \fn int get_widget_width (GtkWidget * widg) \brief retrive GtkWidget width \param widg the GtkWidget */ int get_widget_width (GtkWidget * widg) { #ifdef GTK3 return gtk_widget_get_allocated_width (widg); #else return gtk_widget_get_width (widg); #endif } /*! \fn int get_widget_height (GtkWidget * widg) \brief retrive GtkWidget height \param widg the GtkWidget */ int get_widget_height (GtkWidget * widg) { #ifdef GTK3 return gtk_widget_get_allocated_height (widg); #else return gtk_widget_get_height (widg); #endif } atomes_1.3.1/src/global.h0000664000175000017500000015002415212624223014707 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file global.h * @short Global variable declarations \n Global convenience function declarations \n Global data structure definitions * @author Sébastien Le Roux */ /* * This header file: 'global.h' * * Contains: - Global variable declarations - Global convenience function declarations - Global data structure definitions */ #ifdef HAVE_CONFIG_H # include #endif #define GDK_SYNCHRONIZE #ifndef GLOBAL_H_ #define GLOBAL_H_ #define i18n(String) String #include #include #ifdef OSX #include #endif #include #include #include #include #include #include #include #include #include #include #ifndef GTK4 # include #endif #include #include #include /*! \def GTK_LIMIT \brief maximum number of elements in GTK widgets like GtkTreeView, GtkTreeStore or similar rendering widgets can be an issue if the number of items to display is too high if the number of element to display is < GTK_LIMIT then the widget is rendered, otherwise a search engine is (or should be) used */ #define GTK_LIMIT 10000 #include #ifdef MAC_INTEGRATION # include #endif #ifdef G_OS_WIN32 # include # include # define WIN32_LEAN_AND_MEAN 1 # include # include #else # define max(a,b) (a>=b?a:b) # define min(a,b) (a<=b?a:b) # include # include # ifdef OSX # include # else # include # endif #endif #define MY_ENCODING "UTF-8" #include "math_3d.h" // dint, tint and qint structures are used for pointer purposes. // dint, tint, qint, ColRGBA and coord_info structures must be defined before including 'glwin.h' typedef struct dint dint; struct dint { int a; int b; }; typedef struct tint tint; struct tint { int a; int b; int c; }; typedef struct qint qint; struct qint { int a; int b; int c; int d; }; typedef struct ColRGBA ColRGBA; struct ColRGBA { float red; float green; float blue; float alpha; }; #include "cedit.h" /*! \typedef shortcuts \brief keyboard shortcuts information */ typedef struct shortcuts shortcuts; struct shortcuts { gchar * description; /*!< Shortcut description */ gchar * subtitle; /*!< Shortcut subtitle */ gint key; /*!< Shortcut key */ gchar * accelerator; /*!< Shortcut accelerator */ }; /*! \typedef atomes_action \brief action information data structure */ typedef struct atomes_action atomes_action; struct atomes_action { gchar * action_name; /*!< The name of the action */ gpointer action_data; /*!< The associated data pointer */ }; /*! \typedef coord_info \brief coordination information data structure */ typedef struct coord_info coord_info; struct coord_info { int species; /*!< The number of chemical species */ // 0 = tot // 1 = partial // 2 = fragments // 3 = molecules // > 3 = rings // 9 = chains int totcoord[10]; /*!< The total number of objects: \n 0 = total coordination(s), \n 1 = partial coordination(s), \n 2 = fragment(s), \n 3 = molecule(s), \n 4 to 8 = ring statistics, \n 9 = chain statistics */ int * ntg[10]; /*!< The number of objects by chemical species */ int ** geolist[10]; /*!< The corresponding list of geometries */ int *** partial_geo; /*!< The list of partial geometries */ int cmin; /*!< The minimum coordination number */ int cmax; /*!< The Maximum coordination number */ }; #include "glwin.h" #define MEDIA_NEXT "media-skip-forward" #define MEDIA_PREV "media-skip-backward" #define MEDIA_LAST "go-last" #define MEDIA_FIRST "go-first" #define MEDIA_GOTO "go-jump" #define MEDIA_PLAY "media-playback-start" #define MEDIA_STOP "media-playback-stop" #define MEDIA_LOOP "view-refresh" #define MEDIA_ULOOP "edit-cut" #define MEDIA_SLOW "view-sort-ascending" #define MEDIA_FAST "view-sort-descending" #define GO_RIGHT "go-next" #define GO_LEFT "go-previous" #define GO_UP "go-up" #define GO_DOWN "go-down" #define PAGE_SETUP "document-page-setup" #define FULLSCREEN "view-fullscreen" #define FITBEST "zoom-fit-best" #define RECORD "media-record" #define YES "gtk-yes" #define EDITA "edit-find-replace" #define EDITC "edit-copy" #define EDITF "edit-find" #define ECUT "edit-cut" #define DPROPERTIES "document-properties" #define FNEW "document-new" #define FOPEN "document-open" #define FSAVE "document-save" #define FSAVEAS "document-save-as" #define FCLOSE "window-close" #define FEXIT "application-exit" #define LIST_ADD "list-add" #define LIST_REM "list-remove" #define CANCEL "process-stop" #define EXECUTE "system-run" #ifdef GTK4 #define APPLY "emblem-default" #else #define APPLY "gtk-apply" #endif #define DELETEB "edit-delete" #define DIAL_ERROR "dialog-error" #define AFILE "text-x-generic" #define ABOUT "help-about" #ifdef GTK4 /*! \enum ReliefStyle */ enum ReliefStyle { GTK_RELIEF_NORMAL = 0, /*!< 0 */ GTK_RELIEF_HALF = 1, /*!< 1 */ GTK_RELIEF_NONE = 2 /*!< 2 */ }; /*! \enum ShadowStyle */ enum ShadowStyle { GTK_SHADOW_NONE = 0, /*!< 0 */ GTK_SHADOW_IN = 1, /*!< 1 */ GTK_SHADOW_OUT = 2, /*!< 2 */ GTK_SHADOW_ETCHED_IN = 3, /*!< 3 */ GTK_SHADOW_ETCHED_OUT = 4 /*!< 4 */ }; #define BSEP 3 #else #define BSEP 0 #endif /*! \enum ContainerType */ enum ContainerType { CONTAINER_WIN = 0, /*!< 0 */ CONTAINER_SCR = 1, /*!< 1 */ CONTAINER_VIE = 2, /*!< 2 */ CONTAINER_BUT = 3, /*!< 3 */ CONTAINER_FRA = 4, /*!< 4 */ CONTAINER_EXP = 5 /*!< 5 */ }; /*! \enum ImageFormats */ enum ImageFormats { IMG_NONE = 0, /*!< 0 */ IMG_PIXBUF = 1, /*!< 1 */ IMG_SURFACE = 2, /*!< 2 */ IMG_FILE = 3, /*!< 3 */ IMG_STOCK = 4 /*!< 4 */ }; #define IODEBUG FALSE /*! \def ATOM_LIMIT \brief atom number limit to compute fragment(s) and molecule(s) analysis automatically */ #define ATOM_LIMIT 100000 /*!< \def STEP_LIMIT \brief MD step number limit to compute fragment(s) and molecule(s) analysis automatically */ #define STEP_LIMIT 1000 #define OK 0 #define ERROR_RW 1 #define ERROR_PROJECT 2 #define ERROR_CURVE 3 #define ERROR_IMAGE 4 #define ERROR_ATOM_A 5 #define ERROR_ATOM_B 6 #define ERROR_UPDATE 7 #define ERROR_NO_WAY 8 #define ERROR_COORD 9 #define ERROR_RINGS 10 #define ERROR_CHAINS 11 #define ERROR_MOL 12 #define ERROR_ANA 13 #define ERROR_QM 14 #define ERROR_FIELD 15 /*!< \def CHEM_PARAMS \brief number of chemical parameters */ #define CHEM_PARAMS 5 #define CHEM_Z 0 #define CHEM_M 1 #define CHEM_R 2 #define CHEM_N 3 #define CHEM_X 4 #define NDOTS 8 /*!< \def NCALCS \brief number of analysis */ #define NCALCS 10 /*!< \def NCFORMATS \brief number atomic coordinates file formats */ #define NCFORMATS 13 #define NITEMS 4 #define OT 4 #define GDR 0 #define SQD 1 #define SKD 2 #define GDK 3 #define BND 4 #define ANG 5 #define RIN 6 #define CHA 7 #define SPH 8 #define MSD 9 #define SKT 10 // #define FF 12 #define DEFAULT_FONT_SIZE 8 #define DEFAULT_ALPHA 0.75 #define MINCUT 1.85 #ifdef G_OS_WIN32 extern gchar * PACKAGE_PREFIX; extern gchar * PACKAGE_LIBEXEC; extern gchar * PACKAGE_LOCALE; #endif extern gchar * PACKAGE_LIB_DIR; extern gchar * PACKAGE_IMP; extern gchar * PACKAGE_CON; extern gchar * PACKAGE_IMG; extern gchar * PACKAGE_PDF; extern gchar * PACKAGE_SVG; extern gchar * PACKAGE_EPS; extern gchar * PACKAGE_PNG; extern gchar * PACKAGE_JPG; extern gchar * PACKAGE_BMP; extern gchar * PACKAGE_TIFF; extern gchar * PACKAGE_VOID; extern gchar * PACKAGE_TD; extern gchar * PACKAGE_MOL; extern gchar * PACKAGE_OGL; extern gchar * PACKAGE_OGLM; extern gchar * PACKAGE_OGLC; extern gchar * PACKAGE_PRO; extern gchar * PACKAGE_SET; extern gchar * PACKAGE_LOGO; extern gchar * PACKAGE_LAGPL; extern gchar * PACKAGE_LABOUT; extern gchar * PACKAGE_DOTA; extern gchar * PACKAGE_DOTB; extern gchar * PACKAGE_DOTC; extern gchar * PACKAGE_DOTD; extern gchar * PACKAGE_DOTE; extern gchar * PACKAGE_DOTF; extern gchar * PACKAGE_DOTG; extern gchar * PACKAGE_DOTH; extern gchar * PACKAGE_DFBD; extern gchar * PACKAGE_DFAN; extern gchar * PACKAGE_DFDI; extern gchar * PACKAGE_DFTD; extern gchar * PACKAGE_DFIN; extern gchar * PACKAGE_SGCP; extern gchar * PACKAGE_SGCI; extern gchar * PACKAGE_SGCF; extern gchar * PACKAGE_SGHP; extern gchar * PACKAGE_SGTR; extern gchar * PACKAGE_SGTI; extern gchar * PACKAGE_SGTP; extern gchar * PACKAGE_SGOP; extern gchar * PACKAGE_SGOI; extern gchar * PACKAGE_SGOC; extern gchar * PACKAGE_SGOF; extern gchar * PACKAGE_SGMP; extern gchar * PACKAGE_SGMI; extern gchar * PACKAGE_SGTC; extern gchar * ATOMES_CONFIG_DIR; extern gchar * ATOMES_CONFIG; extern gchar * ATOMES_URL; extern gchar * mode_name[2]; extern gchar * graph_img[NCALCS]; extern gchar * dots[NDOTS]; extern gchar * bravais_img[14]; extern gchar * ifield[8]; extern gchar * projfile; extern char * ifbug; extern char * coord_files[NCFORMATS+1]; extern char * coord_files_ext[NCFORMATS+1]; extern char * calc_name[]; extern char * graph_name[]; extern char * rings_type[5]; extern char * untime[5]; extern gchar * workspacefile; extern int nprojects; extern int activep; extern int activev; extern int activef; extern int inactep; extern int activew; extern int statusval; extern int atomes_visual; extern int dialog_id; extern int reading_step_limit; extern int bonds_update; extern int frag_update; extern int mol_update; extern int tmp_pixels[2]; extern int * pasted_todo; extern atomic_object * copied_object; extern GMainLoop * Event_loop[5]; extern gboolean in_movie_encoding; extern gboolean newspace; extern gboolean reading_input; extern gboolean tmp_adv_bonding[2]; extern gboolean column_label; extern gboolean check_label; extern gboolean object_motion; extern gboolean selected_status; extern gboolean silent_input; extern gboolean cif_use_symmetry_positions; extern gboolean atomes_from_libreoffice; extern gboolean atomes_render_image; extern struct timespec start_time; extern struct timespec stop_time; extern double opac; extern double pi; extern GtkWidget * MainWindow; extern GtkWidget * MainView; extern GtkWidget * MainFrame[2]; extern GtkWidget * pop; extern GtkWidget * curvetoolbox; extern GtkWidget * progressbar; extern GtkWidget * MainScrol[2]; extern GtkWidget * atomes_logo; extern GtkWidget * atomes_shortcuts; extern GtkWidget * calc_dialog; extern GtkWidget * register_button; extern GtkTextTag * tag; extern GtkStatusbar * statusbar; extern ColRGBA std[6]; extern GdkPixbuf * THETD; extern GdkPixbuf * THEMO; extern GdkPixbuf * THEBD; extern GdkPixbuf * SETTING; extern GdkPixbuf * SETTINGS; extern GdkPixbuf * OGL; extern GdkPixbuf * OGLM; extern GdkPixbuf * OGLC; extern GdkPixbuf * RUN; extern tint cut_sel; #define LINE_SIZE 160 // Data structures /*! \typedef atomes_error_signal \brief atomes_error_signal data structure */ typedef struct atomes_error_signal atomes_error_signal; struct atomes_error_signal { int id; gchar * message; }; /*! \typedef atomes_error \brief atomes_error information data structure */ typedef struct atomes_error atomes_error; struct atomes_error { atomes_error_signal error_signal; gchar * error_file; gchar * error_func; int error_line; int trace_id; gchar * error_trace; }; /*! \typedef line_node */ typedef struct line_node line_node; struct line_node { gchar * line; /*!< Size max = LINE_SIZE */ struct line_node * next; struct line_node * prev; }; /*! \typedef coord_file \brief atomic coordinates file, data container */ typedef struct coord_file coord_file; struct coord_file { int natomes; /*!< Number of atom(s) */ int steps; /*!< Number of MD step(s) */ int nspec; /*!< Number of chemical species */ double * z; /*!< List of atomic numbers */ int * nsps; /*!< Number of atoms by species */ double ** coord; /*!< Atomic coordinates */ gboolean cartesian; /*!< Cartesian (1) or Fractional coordinates (0) */ gboolean chemical; /*!< CIF file describing chemical reaction */ int * lot; /*!< Chemical species by atom */ int ndummy; /*!< Number of dummy atom(s), if any */ gchar ** dummy; /*!< List of dummy atom(s), if any */ cell_info lattice; /*!< Description of the periodicity */ int mid; /*!< Message type (0 = error, 1 = warning), if any */ int msg; /*!< Number of message(s) */ gchar ** info; /*!< Information message(s), if required */ gchar ** label; /*!< VAS or TRJ: list of chemical labels, \n CIF: Label list of mis-labelled object(s) */ // The following line is only used for DL_POLY history files: int traj; /*!< */ // The following lines are only used for CIF files: int num_sym_pos; /*!< Number of symmetry positions, if any */ gchar *** sym_pos; /*!< The symmetry positions, if any */ int setting; /*!< Space group setting */ int * wyckoff; /*!< Wyckoff positions */ int rounding; /*!< Occupancy rounding */ double * occupancy; /*!< Site(s) occupancy */ int * multi; /*!< Multiplicity */ int dis; /*!< Number of disorder group */ int * disorder; /*!< Site disorder group */ int atom_unlabelled; /*!< Number of atom(s) unlabelled */ int * u_atom_list; /*!< List of unlabelled atom(s) */ int object_to_insert; /*!< Number of object(s) to label */ int * object_list; /*!< List of object to insert by atom(s) */ }; /*! \typedef MouseState \brief data structure to store mouse information on curve widget */ typedef struct MouseState MouseState; struct MouseState { gint start_x; /*!< Initial x position */ gint start_y; /*!< Initial y position */ gint time; /*!< Time */ gboolean MouseIsDown; /*!< Is the mouse button up (0) or down (1) */ }; /*! \typedef CurveState \brief data structure used for zoom in / out on curve widget */ typedef struct CurveState CurveState; struct CurveState { MouseState mouseState; /*!< Mouse status information */ tint * id; /*!< Curve data pointer */ }; /*! \typedef DataLayout \brief curve layout information */ typedef struct DataLayout DataLayout; struct DataLayout { ColRGBA datacolor; /*!< Data color */ double thickness; /*!< Data line thickness */ int dash; /*!< Data line style */ int glyph; /*!< Data glyph type */ double gsize; /*!< Data glyph size */ int gfreq; /*!< Data glyph frequency */ int aspect; /*!< X/Y or histogram */ double hwidth; /*!< Histogram width */ double hopac; /*!< Histogram color opacity */ int hpos; /*!< Histogram is transparent ? */ }; /*! \typedef CurveExtra \brief extra curve(s) data information */ typedef struct CurveExtra CurveExtra; struct CurveExtra { tint id; /*!< Curve data pointer */ DataLayout * layout; /*!< Curve layout information */ CurveExtra * prev; CurveExtra * next; }; /*! \typedef ExtraSets \brief list of extra data sets for a curve */ typedef struct ExtraSets ExtraSets; struct ExtraSets { int extras; /*!< Number of extra data sets, if any */ CurveExtra * first; /*!< First data set of the list, if any */ CurveExtra * last; /*!< Last data set of the list, if any */ }; /*! \typedef Curve \brief curve data structure */ typedef struct Curve Curve; struct Curve { int cid; /*!< Curve id */ int ndata; /*!< number of data points */ double * data[2]; /*!< X and Y data */ double * err; /*!< Error bar on Y if any. */ double cmin[2]; /*!< Min of the data on X and Y */ double cmax[2]; /*!< Max of the data on X and Y */ GtkWidget * plot; /*!< Drawing area */ GtkWidget * button; /*!< Interaction button for 'Toolboxes' */ GtkWidget * curve_vbox; /*!< Curve top boxes for the menu bar */ GtkWidget * curve_hbox; GtkWidget * window; /*!< Widget for the window */ GtkWidget * pos; /*!< Mouse cursor position in graph */ GtkWidget * shortcuts; /*!< Shortcuts window */ int wsize[2]; /*!< Curve window size */ GtkWidget * datatree; /*!< Widget for the selection tree */ qint idcol[2]; /*!< For navigation in the list view */ ColRGBA backcolor; /*!< Background color */ int format; /*!< Format of output (screen, png, pdf, ...) */ char * name; /*!< Name of the curve */ // Axis double axmin[2]; /*!< Min for the axis X and Y */ double axmax[2]; /*!< Max for the axis X and Y */ gboolean axis_defaut_title[2]; /*!< Use axis default title */ char * axis_title[2]; /*!< Title of axis */ int axis_title_x[2]; /*!< Position of the x axis title */ int axis_title_y[2]; /*!< Position of the y axis title */ gchar * axis_title_font[2]; /*!< Axis title font */ int scale[2]; /*!< Axis scale (linear or log) */ gboolean autoscale[2]; /*!< Autoscale */ gboolean show_grid[2]; /*!< Show/Hide axis grid */ gboolean show_axis[2]; /*!< Show/Hide axis bar */ double majt[2]; /*!< Value for major ticks */ int mint[2]; /*!< Number of minor ticks */ int ticks_io[2]; /*!< Ticks in or out / axis bar */ int ticks_pos[2]; /*!< Ticks position: normal, opposite, both */ int majt_size[2]; /*!< Majors ticks size (pixels) */ int mint_size[2]; /*!< Minors ticks size (pixels) */ int labels_pos[2]; /*!< Ticks label position: normal, opposite, both */ int labels_digit[2]; /*!< Significant digits for tick labels */ gchar * labels_font[2]; /*!< Ticks label font */ double labels_angle[2]; /*!< Ticks label angle */ int labels_shift_x[2]; /*!< Ticks position shift from x axis */ int labels_shift_y[2]; /*!< Ticks position shift from y axis */ // Legend gboolean show_legend; /*!< Show (1) /Hide (0) legend */ double legend_pos[2]; /*!< Position of the legend */ gchar * legend_font; /*!< Legend font */ ColRGBA legend_color; /*!< Legend color */ gboolean show_legend_box; /*!< Display legend box */ int legend_box_dash; /*!< Legend box line style */ ColRGBA legend_box_color; /*!< Legend box color */ double legend_box_thickness; /*!< Legend box line thickness */ // Title char * title; /*!< Title to display */ gboolean show_title; /*!< Show/Hide title */ gboolean default_title; /*!< Use default title */ double title_pos[2]; /*!< Position of the title */ gchar * title_font; /*!< Title font */ ColRGBA title_color; /*!< Title color */ // Frame gboolean show_frame; /*!< Show/Hide frame */ int frame_type; /*!< Frame type */ int frame_dash; /*!< Frame line style */ double frame_thickness; /*!< Frame line thickness */ ColRGBA frame_color; /*!< Frame color */ double frame_pos[2][2]; /*!< Frame 0 = x, 1 = y, 0 = min and 1 = max */ DataLayout * layout; /*!< The curve layout */ ExtraSets * extrac; /*!< Extra data set(s) added to graph */ cairo_surface_t * surface; /*!< The rendering surface */ int draw_id; /*!< Curve drawing order */ int bshift; /*!< Curve x shift for bar diagram */ gboolean displayed; char * cfile; gchar * path; /*!< Path for the toolbox tree */ int action_id; /*!< Unique Id to identify actions */ CurveState state; /*!< Curve state */ curve_edition * curve_edit; /*!< curve edition data structure - cedit.h */ GSimpleActionGroup * action_group; }; /*! \typedef atomes_analysis \brief analysis data structure */ typedef struct atomes_analysis atomes_analysis; struct atomes_analysis { /* Analysis default structure and parameters */ int aid; /*!< Analysis type: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd, \n 10 = s(k,t) */ gchar * name; /*!< Analysis name for menu item */ gboolean avail_ok; /*!< Analysis calculation availability */ gboolean init_ok; /*!< Curves initialization */ gboolean calc_ok; /*!< Analysis calculation confirmation */ gboolean requires_md; /*!< Analysis requires multiple configurations */ gchar * x_title; /*!< x axis default title, ex: "r [Ã…] */ double calc_time; /*!< Calculation time */ int num_delta; /*!< Number of intervals */ double delta; /*!< Size of an interval */ double min; /*!< Minimum x value */ double max; /*!< Maximum x value */ double fact; /*!< Gaussian smoothing factor, if available */ int other_params; /*!< Number of other parameters for this analysis */ double * o_params; /*!< List of other parameters */ GtkTextBuffer * calc_buffer; /*!< The text buffer for the calculation */ gboolean graph_res; /*!< Results to be displayed using graphs ? */ int numc; /*!< Number of curves, if any */ int c_sets; /*!< Number of compatible sets */ int * compat_id; /*!< List of compatible sets */ Curve ** curves; /*!< The curves, graph for the results of the calculations, if any */ tint * idcc; /*!< Pointers for the curves */ }; /*! \def MAXDATC \brief Number of tabs for the description of the classical calculation */ #define MAXDATC 8 /*! \def MAXDATA \brief Number of tabs for the description of the classical force field */ #define MAXDATA 21 typedef struct classical_field classical_field; struct classical_field { gboolean prepare_file[2]; // Field and Config files gboolean afp[MAXDATC+MAXDATA]; int type; int energy_unit; int atom_init; int molecules; struct field_molecule * first_molecule; int nbody[5]; struct field_nth_body * first_body[5]; // Tersoff potential cross terms double *** cross; /*!< Tersoff potential cross terms */ int extern_fields; struct field_external * first_external; // Control file double * sys_opts; double * io_opts; double * ana_opts; double * elec_opts; double * vdw_opts; double * met_opts; double * equi_opts; int ensemble; int thermostat; double * thermo_opts; double * md_opts; double * out_opts; }; typedef struct thermostat thermostat; struct thermostat { int id; // For CPMD: 0 = none, 2 = controlled, 3 = nose // For CP2K: 0 = none, 2 = langevin, 3 = csvr, 4 = gle, 5 = nose int type; // For CPMD: 0 = global, 1 = local // For CP2K: 0 = global, 1 = local, 2 = molecule int sys; gboolean show; double params[4]; int natoms; int * list; thermostat * next; thermostat * prev; }; typedef struct dummy_atom dummy_atom; struct dummy_atom { // 0 = type1, 1 = type2, ... int id; int type; int pick[2]; gboolean show; double xyz[3]; int coord[4]; int natoms; int * list; int numv; int * vois; dummy_atom * next; dummy_atom * prev; }; typedef struct cpmd cpmd; struct cpmd { int calc_type; int restart[10]; int thermostats; thermostat * ions_thermostat; thermostat * elec_thermostat; int fixat; int * fixlist; int ** fixcoord; int dummies; dummy_atom * dummy; double default_opts[17]; double calc_opts[24]; int ** pp; gchar * info; }; typedef struct cp2k cp2k; struct cp2k { int input_type; double opts[42]; double extra_opts[3][4]; int thermostats; thermostat * ions_thermostat; int fixat[2]; int * fixlist[2]; int ** fixcoord[2]; gchar * files[5]; gchar *** spec_files; int ** spec_data; gchar * info; }; /*! \typedef molecule \brief the molecule data structure */ typedef struct molecule molecule; struct molecule { int id; /*!< Molecule id number */ int md; /*!< MD step */ int multiplicity; /*!< Multiplicity */ int * fragments; /*!< Fragments list */ int natoms; /*!< Number of atoms */ int nspec; /*!< Number of chemical species */ int * species; /*!< Number of atom by species */ }; /*! \typedef model \brief data structure to describe the topology */ typedef struct model model; struct model { int * mol_by_step; /*!< Num of mol by steps */ molecule ** mols; /*!< List of molecules by steps */ }; /*! \typedef element_data \brief element description used for the periodic table defined in 'w_periodic.c' */ typedef struct element_data element_data; struct element_data { gchar * lab; /*!< Label */ gchar * name; /*!< Name */ int Z; /*!< Atomic number */ float M; /*!< Atomic mass */ }; /*! \typedef chemical_data \brief a structure to store some chemical information */ typedef struct chemical_data chemical_data; struct chemical_data { // 0 = Z, 1 = Mass, 2 = Radius, 3 = Neutrons, 4 = X-rays double ** chem_prop; /*!< chemical properties: \n 0 = Z, \n 1 = Mass, \n 2 = Radius, \n 3 = Neutrons, \n 4 = X-rays */ int * nsps; /*!< Number of atom(s) by chemical species */ int * formula; /*!< Chemical formula */ char ** label; /*!< Element label(s) */ char ** element; /*!< Element name(s) */ double ** cutoffs; /*!< partial cutoff(s) */ double grtotcutoff; /*!< Total cutoff */ }; /*! \typedef insertion_menu \brief data structure for the insertion pop-up menu */ typedef struct insertion_menu insertion_menu; struct insertion_menu { gchar * type; gchar * object; double Z; int ats; }; /*! \typedef atom \brief atom data structure */ typedef struct atom atom; struct atom { int id; /*!< The atom's id in the model */ // The id in the model int sp; /*!< The chemical species */ // The chemical species // The coordinates double x; /*!< x coordinate */ double y; /*!< y coordinate */ double z; /*!< z coordinate */ int numv; /*!< The number of neighbors */ // The number of neighbors int * vois; /*!< The list of neighbors */ // The list of neighbors // 0 = Total coordination // 1 = Partial coordination // 2 = Fragment // 3 = Molecule // 4 = Field object id int coord[5]; /*!< Coordination information: \n 0 = Total coordination, \n 1 = Partial coordination, \n 2 = Fragment, \n 3 = Molecule, \n 4 = Field object id */ // Coordination information // 0 = All // 1 = King's // 2 = Guttman's // 3 = Primitive // 4 = Strong int ** rings[5]; /*!< Ring statistics information: \n 0 = All, \n 1 = King's, \n 2 = Guttman's, \n 3 = Primitive, \n 4 = Strong */ // Rings statistics information int ** chain; /*!< Chain statistics information */ int fid; /*!< Force field id */ int faid; /*!< Force field id in fragment */ gboolean show[2]; /*!< Show / Hide (0 = atom, 1 = clone) */ gboolean label[2]; /*!< Label / Unlabel (0 = atom, 1 = clone) */ gboolean pick[2]; /*!< Selected / Unselected (0 = atom, 1 = clone) */ gboolean cloned; /*!< Clone(s) ? (0 = no, 1 = yes) */ int style; /*!< Rendering style if not global */ atom * prev; atom * next; }; /*! \typedef project \brief data structure for the 'atomes' project */ typedef struct project project; struct project { /* General parameters */ int id; /*!< Project ID */ char * name; /*!< Project name */ char * projfile; /*!< Name of the project file, if any */ char * coordfile; /*!< Name of atomic coordinates file, if any */ char * bondfile; /*!< Name of the file to output bonding information, if any */ gboolean newproj; /*!< New project ? yes / no */ gboolean run; /*!< Run this project ? yes / no */ gboolean dmtx; /*!< Trigger the calculation of the distance matrix ? yes / no */ int tfile; /*!< File format for the atomic coordinates, when imported */ int nspec; /*!< Number of chemical species */ int natomes; /*!< Number of atoms */ int dummies; /*!< Number of atoms including extra cells */ int steps; /*!< Number of MD steps */ int tunit; /*!< Time unit between steps, if MD */ chemical_data * chemistry; /*!< Chemical data */ coord_info * coord; /*!< Coordination(s) data */ cell_info cell; /*!< Periodicity data */ atom ** atoms; /*!< Atom list: atoms[steps][natomes] */ /* Analysis related parameters */ /*!< Analysis: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd \n 10 = skt */ atomes_analysis ** analysis; /*!< The analysis data and results */ // Some parameters cannot be easily stored in a generic data structure gboolean runc[3]; /*!< Trigger to run bonds, angles and molecules analysis */ int xcor; /*!< S(q) X-rays type of calculation: f(q) (1) or approximated (0) */ // Ring statistics parameters // 0 = Search type, 1 = NUMA int rsearch[2]; /*!< Ring statistics parameters: 0 = Search type, 1 = Ring's allocation parameter NUMA */ // First col : search type (up to chains stat). Second col: search info // 0 = Initnode, 1 = RMAX, 2 = ABAB, 3 = Homo, 4 = Homo in DMTX, 5 = Done + Rings int rsparam[5][6]; /*!< Ring statistics parameters (first column the type of rings): \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Maximum size of ring for the search Rmax, \n 2 = Search only for ABAB rings or not, \n 3 = Include Homopolar bond(s) in the analysis or not, \n 4 = Include homopolar bond(s) when calculating the distance matrix, \n 5 = Analysis completed and rings were found (yes / no) */ double rsdata[5][5]; /*!< Results for the ring statistics (first column the type of rings): \n 0 = Total number of ring(s) per MD step: RpS, \n 1 = Standard deviation for RpS, \n 2 = Number of ring(s) with size > Rmax that potentially exist per MD step: RpE, \n 3 = Standard deviation for RpE, \n 4 = calculation time for the analysis */ // Chain statistics parameters int csearch; /*!< Chain statistics allocation parameter: CNUMA */ // 0 = Initnode, 1 = AAAA, 2 = ABAB, 3 = Homo, 4 = 1221, 5 = RMAX, 6 = Done + Chains int csparam[7]; /*!< Chain statistics parameters: \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Search only for AAAA chains or not, \n 2 = Search only for ABAB chains or not, \n 3 = Include Homopolar bond(s) in the analysis or not, \n 4 = Search only for 1-(2)n-1 chains, \n 5 = Maximum size of chain for the search Rmax 6 = Analysis completed and chains were found (yes / no) */ double csdata[2]; /*!< Results for the chain statistics: \n 0 = Total number of chains) per MD step: CpS, \n 1 = Standard deviation for CpS */ // F(k,t) and S(q,w) parameters double sk_advanced[2][2]; /*!< Probability triggered k sampling, 0 = SKD, 1 = SKT */ int skt_sets; /*!< Total number of S(k,t) curves */ int skt_corr_threshold; /*!< Minium number of correlated configurations to compute S(k,t) */ gboolean skt_all_sets; /*!< Output calculation results for all t steps */ int skt_n_data_sets; /*!< Number of configuration(s) to save when computing S(k,t) */ int * skt_step_id; /*!< List of t step(s) to save when computing S(k,t) */ int sqw_sets; /*!< Total number of S(q,w) curves */ int sqw_n_data_sets; /*!< Number of q vector(s) to compute S(q,w) */ double * sqw_q_id; /*!< List of q vector(s) to compute S(q,w) */ int sqw_freq; /*!< Frequency intervals */ GtkTextBuffer * text_buffer[NITEMS]; /*!< The text buffer for general information */ /* OpenGL related parameters */ gboolean initgl; /*!< Was OpenGL rendering initialized ? yes / no */ int tmp_pixels[2]; /*!< Saved size of the OpenGL window */ glwin * modelgl; /*!< The OpenGL widget */ /* Molecular dynamics related parameters */ model * modelfc; /*!< Description of the topology */ // MD input files classical_field * force_field[2]; /*!< Classical MD input files: \n 0 = DL_POLY, \n 1 = LAMMPS */ cpmd * cpmd_input[2]; /*!< CPMD input files: \n 0 = Ab-initio, \n 1= QM-MM */ cp2k * cp2k_input[2]; /*!< CP2K input files: \n 0 = Ab-initio, \n 1= QM-MM */ #ifdef DEBUG GtkWidget * pix_tab[3]; /*!< Not used anymore see 'cell_pixel.c' */ GtkWidget * pix_box; /*!< Not used anymore see 'cell_pixel.c' */ int pix[3]; /*!< Not used anymore see 'cell_pixel.c' */ int ** pixels; /*!< Not used anymore see 'cell_pixel.c' */ int actif_pix; /*!< Not used anymore see 'cell_pixel.c' */ #endif project * next; project * prev; }; /*! \typedef workspace \brief data structure for the 'atomes' workspace */ typedef struct workspace workspace; struct workspace { project * first; project * last; }; extern atomes_action edition_acts[]; extern atomes_action analyze_acts[]; extern GSimpleAction * edition_actions[]; extern void add_analysis_action (int act); extern void remove_action (gchar * action_name); extern void remove_edition_actions (); extern void remove_edition_and_analyze_actions (); extern GtkApplication * AtomesApp; extern workspace workzone; extern project * proj; extern chemical_data * active_chem; extern coord_info * active_coord; extern cell_info * active_cell; extern box_info * active_box; extern image * active_image; extern glwin * active_glwin; extern project * active_project; extern project * opengl_project; extern element_data periodic_table_info[]; extern project * get_project_by_id (int p); extern void opengl_project_changed (int id); extern gboolean in_md_shaders (project * this_proj, int id); extern void recreate_all_shaders (glwin * view); extern gboolean is_atom_win_active (glwin * view); // extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); extern void update_rings_menus (glwin * view); extern void clean_rings_data (int rid, glwin * view); extern void clean_chains_data (glwin * view); extern void clean_volumes_data (glwin * view); extern void initcutoffs (chemical_data * chem, int species); extern void cutoffsend (); extern void update_entry_int (GtkEntry * entry, int intval); extern void update_entry_double (GtkEntry * entry, double doubleval); extern void update_entry_long_double (GtkEntry * entry, double doubleval); extern void update_entry_text (GtkEntry * entry, gchar * text); extern double * xsk; extern gboolean * allocbool (int val); extern gboolean ** allocdbool (int xal, int yal); extern gboolean *** alloctbool (int xal, int yal, int zal); extern int * allocint (int val); extern int ** allocdint (int xal, int yal); extern int *** alloctint (int xal, int yal, int zal); extern int **** allocqint (int wal, int xal, int yal, int zal); extern float * allocfloat (int val); extern float ** allocdfloat (int xal, int yal); extern float *** alloctfloat (int xal, int yal, int zal); extern double * allocdouble (int val); extern double ** allocddouble (int xal, int yal); extern double *** alloctdouble (int xal, int yal, int zal); extern double **** allocqdouble (int wal, int xal, int yal, int zal); extern GLuint * allocgluint (int val); extern GLuint ** allocdgluint (int xal, int yal); extern GLfloat ** allocdGLfloat (int xal, int yal); extern gchar ** duplicate_strings (int num, gchar ** old_val); extern int * duplicate_int (int num, int * old_val); extern gboolean * duplicate_bool (int num, gboolean * old_val); extern float * duplicate_float (int num, float * old_val); extern double * duplicate_double (int num, double * old_val); extern ColRGBA * duplicate_color (int num, ColRGBA * col); extern void combo_set_markup (GtkWidget * combo); extern void combo_set_active (GtkWidget * combo, int pos); extern int combo_get_active (GtkWidget * combo); extern void combo_text_append (GtkWidget * combo, gchar * text); extern void combo_text_prepend (GtkWidget * combo, gchar * text); extern GtkWidget * create_combo (); extern GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text); extern GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text); extern GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf); extern void text_view_set_monospace (GtkWidget * view); extern void gtk_label_align (GtkWidget * lab, float ax, float ay); extern gchar * prepare_for_title (gchar * init); extern void show_the_widgets (GtkWidget * widg); extern void hide_the_widgets (GtkWidget * widg); extern gboolean is_the_widget_visible (GtkWidget * widg); extern void widget_set_sensitive (GtkWidget * widg, gboolean sensitive); extern GtkWidget * new_gtk_window (); extern GtkWidget * dialogmodal (gchar * str, GtkWindow * parent); extern GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent); extern GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz); extern void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data); extern void resize_this_window (GtkWidget * window, int x, int y); extern GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); extern GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); extern void append_comments (GtkWidget * vbox, gchar * symbol, gchar * legend); extern void add_container_child (int type, GtkWidget * widg, GtkWidget * child); extern void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); extern void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); extern GtkWidget * create_vbox (int spacing); extern GtkWidget * create_hbox (int spacing); extern GtkWidget * dialog_get_content_area (GtkWidget * widg); extern void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos); extern GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y); extern GtkWidget * create_layout (int x, int y); extern void add_global_option (GtkWidget * vbox, tint * oid); #ifdef GTK4 extern void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data); extern G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); extern void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data); extern G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data); extern G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data); extern GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); extern void pop_menu_at_pointer (GtkWidget * pop, double x, double y); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); extern void update_menu_bar (glwin * view); #else extern void update_chains_menus (glwin * view); extern G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); extern GtkWidget * create_menu_item (gboolean add_mnemo, gchar * action); extern GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status); extern GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu); extern void add_menu_separator (GtkWidget * menu); extern G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data); extern G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data); extern GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); extern void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event); GSList * file_chooser_get_file_names (GtkFileChooser * chooser); #endif extern const gchar * entry_get_text (GtkEntry * entry); extern GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data); extern GtkWidget * stock_image (const gchar * stock_id); extern void set_image_from_icon_name (GtkWidget * widg, gchar * icon); extern GtkWidget * create_image_from_data (int format, gpointer item_image); extern GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status); extern GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod); extern GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay); extern GtkWidget * color_button (ColRGBA col, gboolean alpha, int dimx, int dimy, GCallback handler, gpointer data); extern GtkWidget * font_button (gchar * font, int dimx, int dimy, GCallback handler, gpointer data); extern GtkWidget * spin_button (GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data); extern int button_get_status (GtkWidget * button); extern void button_set_status (GtkWidget * button, int status); extern GtkWidget * check_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); extern GtkWidget * radio_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); extern GtkWidget * create_button (gchar * text, int image_format, gchar * image, int dimx, int dimy, int relief, GCallback handler, gpointer data); extern ColRGBA gdkrgba_to_rgba (GdkRGBA colgdk); extern GdkRGBA colrgba_togtkrgba (ColRGBA col); extern ColRGBA get_button_color (GtkColorChooser * colob); extern ColRGBA get_window_color (GtkWidget * color_win); extern void set_color_chooser_color (GtkWidget * color_win, ColRGBA col); extern void set_renderer_color (int tocol, GtkCellRenderer * renderer, ColRGBA col); extern void set_renderer_markup (GtkTreeModel * mod, GtkTreeIter * iter, GtkCellRenderer * renderer, int col); extern void button_set_image (GtkButton * but, gchar * text, int format, gpointer image); extern GtkWidget * abox (GtkWidget * box, char * lab, int vspace); extern GtkWidget * bbox (GtkWidget * box, char * lab); extern GtkWidget * cbox (GtkWidget * box, char * lab); extern GtkWidget * fbox (GtkWidget * box, char * lab); extern GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow); extern GtkWidget * create_expander (gchar * name, gchar * file_img); extern GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz); extern void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat); extern void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); extern void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu); extern GtkWidget * destroy_this_widget (GtkWidget * widg); extern void destroy_this_dialog (GtkDialog * dialog); extern void destroy_this_native_dialog (GtkNativeDialog * dialog); extern G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data); extern void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data); extern gchar * file_chooser_get_file_name (GtkFileChooser * chooser); extern gchar * file_chooser_get_current_folder (GtkFileChooser * chooser); extern gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename); extern void file_chooser_set_current_folder (GtkFileChooser * chooser); extern GtkWidget * get_top_level (GtkWidget * widg); extern void provide_gtk_css (gchar * css); extern double string_to_double (gpointer string); extern double get_calc_time (struct timespec start, struct timespec stop); extern gchar * calculation_time (gboolean modelv, double ctime); extern int get_widget_width (GtkWidget * widg); extern int get_widget_height (GtkWidget * widg); extern int signal_error (const char * file, const char * func, int error_line, int error_id); extern void update_error_trace (const char * file, const char * func, int trace_line); typedef struct { GCallback handler; gpointer data; } focus_data; #endif // GLOBAL_H_ atomes_1.3.1/src/global.c0000664000175000017500000003735315212624223014713 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file global.c * @short Global variables declaration \n Global convenience function implementations * @author Sébastien Le Roux */ /* * This file: 'global.c' * * Contains: * - global variables declarations - global convenience functions implementation * * List of functions: int * allocint (int val); int ** allocdint (int xal, int yal); int *** alloctint (int xal, int yal, int zal); int **** allocqint (int wal, int xal, int yal, int zal); int * duplicate_int (int num, int * old_val); float * allocfloat (int val); float ** allocdfloat (int xal, int yal); float *** alloctfloat (int xal, int yal, int zal); float * duplicate_float (int num, float * old_val); double * allocdouble (int val); double ** allocddouble (int xal, int yal); double *** alloctdouble (int xal, int yal, int zal); double **** allocqdouble (int wal, int xal, int yal, int zal); double * duplicate_double (int num, double * old_val); double string_to_double (gpointer string); double get_calc_time (struct timespec start, struct timespec stop); gboolean * allocbool (int val); gboolean ** allocdbool (int xal, int yal); gboolean *** alloctbool (int xal, int yal, int zal); gboolean * duplicate_bool (int num, gboolean * old_val); gchar ** duplicate_strings (int num, gchar ** old_val); gchar * calculation_time (gboolean modelv, double ctime); */ #include #include #ifdef OSX #include #endif #include #include #include #include #include #include #include #include #define i18n(String) String #define BILLION 1000000000L; #ifdef G_OS_WIN32 gchar * PACKAGE_PREFIX = NULL; gchar * PACKAGE_LIBEXEC = NULL; gchar * PACKAGE_LOCALE = NULL; #endif gchar * PACKAGE_LIB_DIR = NULL; gchar * PACKAGE_IMP = NULL; gchar * PACKAGE_CON = NULL; gchar * PACKAGE_IMG = NULL; gchar * PACKAGE_PDF = NULL; gchar * PACKAGE_SVG = NULL; gchar * PACKAGE_EPS = NULL; gchar * PACKAGE_PNG = NULL; gchar * PACKAGE_JPG = NULL; gchar * PACKAGE_BMP = NULL; gchar * PACKAGE_TIFF = NULL; gchar * PACKAGE_VOID = NULL; gchar * PACKAGE_TD = NULL; gchar * PACKAGE_MOL = NULL; gchar * PACKAGE_OGL = NULL; gchar * PACKAGE_OGLM = NULL; gchar * PACKAGE_OGLC = NULL; gchar * PACKAGE_PRO = NULL; gchar * PACKAGE_SET = NULL; gchar * PACKAGE_LOGO = NULL; gchar * PACKAGE_LAGPL = NULL; gchar * PACKAGE_LABOUT = NULL; gchar * PACKAGE_DOTA = NULL; gchar * PACKAGE_DOTB = NULL; gchar * PACKAGE_DOTC = NULL; gchar * PACKAGE_DOTD = NULL; gchar * PACKAGE_DOTE = NULL; gchar * PACKAGE_DOTF = NULL; gchar * PACKAGE_DOTG = NULL; gchar * PACKAGE_DOTH = NULL; gchar * PACKAGE_DFBD = NULL; gchar * PACKAGE_DFAN = NULL; gchar * PACKAGE_DFDI = NULL; gchar * PACKAGE_DFTD = NULL; gchar * PACKAGE_DFIN = NULL; gchar * PACKAGE_SGCP = NULL; gchar * PACKAGE_SGCI = NULL; gchar * PACKAGE_SGCF = NULL; gchar * PACKAGE_SGHP = NULL; gchar * PACKAGE_SGTR = NULL; gchar * PACKAGE_SGTI = NULL; gchar * PACKAGE_SGTP = NULL; gchar * PACKAGE_SGOP = NULL; gchar * PACKAGE_SGOI = NULL; gchar * PACKAGE_SGOC = NULL; gchar * PACKAGE_SGOF = NULL; gchar * PACKAGE_SGMP = NULL; gchar * PACKAGE_SGMI = NULL; gchar * PACKAGE_SGTC = NULL; gchar * ATOMES_CONFIG_DIR = NULL; gchar * ATOMES_CONFIG = NULL; gchar * ATOMES_URL = "https://atomes.ipcms.fr"; gchar * mode_name[2] = {i18n("Analysis"), i18n("Edition")}; gchar * bravais_img[14]; gchar * ifield[8]; gchar * projfile = NULL; char * ifbug = i18n("\nIf this is a bug please report it to:"); char * rings_type[5] = {i18n("All (No Rule)"), i18n("King's"), i18n("Guttman's"), i18n("Primitive"), i18n("Strong")}; char * untime[5] = {"fs", "ps", "ns", "µs", "ms"}; gchar * workspacefile = NULL; int nprojects = 0; int activep = 0; int activev = 0; int activef = 0; int inactep = 0; int activew = 0; int statusval; int atomes_visual = 1; // OpenGL visual: 1 = GTK default, 0 = X11 default (GTK3 + GtkGLArea only), Else = no OpenGL // Loop Id for the dialogs int dialog_id = -1; int reading_step_limit; int bonds_update = 0; int frag_update = 0; int mol_update = 0; int tmp_pixels[2]; int * pasted_todo = NULL; double * xsk = NULL; GMainLoop * Event_loop[5]; gboolean in_movie_encoding = FALSE; gboolean newspace = TRUE; gboolean reading_input; gboolean tmp_adv_bonding[2]; gboolean column_label = FALSE; gboolean check_label = TRUE; gboolean object_motion = FALSE; gboolean selected_status = FALSE; gboolean silent_input = FALSE; gboolean cif_use_symmetry_positions = FALSE; gboolean atomes_from_libreoffice = FALSE; gboolean atomes_render_image = FALSE; struct timespec start_time; struct timespec stop_time; double opac = 0.75; double pi = 3.141592653589793238462643383279502884197; GSimpleAction * edition_actions[3]; GtkApplication * AtomesApp = NULL; GtkWidget * MainWindow = NULL; GtkWidget * MainView = NULL; GtkWidget * MainFrame[2]; GtkWidget * pop = NULL; GtkWidget * curvetoolbox = NULL; GtkWidget * progressbar = NULL; GtkWidget * MainScrol[2]; GtkWidget * atomes_logo = NULL; GtkWidget * atomes_shortcuts = NULL; GtkWidget * calc_dialog = NULL; GtkWidget * register_button = NULL; GtkTextTag * tag = NULL; GtkStatusbar * statusbar; GdkPixbuf * THETD = NULL; GdkPixbuf * THEMO = NULL; GdkPixbuf * THEBD = NULL; GdkPixbuf * SETTING = NULL; GdkPixbuf * SETTINGS = NULL; GdkPixbuf * OGL = NULL; GdkPixbuf * OGLM = NULL; GdkPixbuf * OGLC = NULL; GdkPixbuf * RUN = NULL; // Basic utility functions /*! \fn gboolean * allocbool (int val) \brief allocate a gboolean * pointer \param val size of the pointer to allocate */ gboolean * allocbool (int val) { gboolean * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn gboolean ** allocdbool (int xal, int yal) \brief allocate a gboolean ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ gboolean ** allocdbool (int xal, int yal) { gboolean ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocbool(yal); } return var; } /*! \fn gboolean *** alloctbool (int xal, int yal, int zal) \brief allocate a gboolean *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ gboolean *** alloctbool (int xal, int yal, int zal) { gboolean *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdbool(yal, zal); } return var; } /*! \fn int * allocint (int val) \brief allocate an int * pointer \param val size of the pointer to allocate */ int * allocint (int val) { int * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn int ** allocdint (int xal, int yal) \brief allocate an int ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ int ** allocdint (int xal, int yal) { int ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocint (yal); } return var; } /*! \fn int *** alloctint (int xal, int yal, int zal) \brief allocate an int *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ int *** alloctint (int xal, int yal, int zal) { int *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdint (yal, zal); } return var; } /*! \fn int **** allocqint (int wal, int xal, int yal, int zal) \brief allocate an int **** pointer \param wal 1st dimension size of the pointer to allocate \param xal 2nd dimension size of the pointer to allocate \param yal 3rd dimension size of the pointer to allocate \param zal 4th dimension size of the pointer to allocate */ int **** allocqint (int wal, int xal, int yal, int zal) { int **** var = NULL; int i; var = g_malloc0(wal*sizeof*var); for ( i = 0 ; i < wal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = alloctint (xal, yal, zal); } return var; } /*! \fn float * allocfloat (int val) \brief allocate a float * pointer \param val size of the pointer to allocate */ float * allocfloat (int val) { float * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn float ** allocdfloat (int xal, int yal) \brief allocate a float ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ float ** allocdfloat (int xal, int yal) { float ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocfloat (yal); } return var; } /*! \fn float *** alloctfloat (int xal, int yal, int zal) \brief allocate a float *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ float *** alloctfloat (int xal, int yal, int zal) { float *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdfloat (yal, zal); } return var; } /*! \fn double * allocdouble (int val) \brief allocate a double * pointer \param val size of the pointer to allocate */ double * allocdouble (int val) { double * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn double ** allocddouble (int xal, int yal) \brief allocate a double ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ double ** allocddouble (int xal, int yal) { double ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdouble (yal); } return var; } /*! \fn double *** alloctdouble (int xal, int yal, int zal) \brief allocate a double *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ double *** alloctdouble (int xal, int yal, int zal) { double *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocddouble (yal, zal); } return var; } /*! \fn double **** allocqdouble (int wal, int xal, int yal, int zal) \brief allocate a double **** pointer \param wal 1st dimension size of the pointer to allocate \param xal 2nd dimension size of the pointer to allocate \param yal 3rd dimension size of the pointer to allocate \param zal 4th dimension size of the pointer to allocate */ double **** allocqdouble (int wal, int xal, int yal, int zal) { double **** var = NULL; int i; var = g_malloc0(wal*sizeof*var); for ( i = 0 ; i < wal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = alloctdouble (xal, yal, zal); } return var; } /*! \fn gchar ** duplicate_strings (int num, gchar ** old_val) \brief copy a list of strings \param num number of elements in the list \param old_val the list to copy */ gchar ** duplicate_strings (int num, gchar ** old_val) { gchar ** new_val = g_malloc0(num*sizeof*new_val); int i; for (i=0; i Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file workspace.h * @short Function declarations for workspace managment * @author Sébastien Le Roux */ /* * This header file: 'workspace.h' * * Contains: - Function declarations for workspace managment */ #ifndef WORKSPACE_H_ #define WORKSPACE_H_ void correct_this_window_title (GtkWidget * win, gchar * str); G_MODULE_EXPORT void activate_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata); void add_project_to_workspace (); void remove_project_from_workspace (int id); #endif atomes_1.3.1/src/workspace/workinfo.c0000664000175000017500000001177015212624223017302 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file workinfo.c * @short Functions to display project information in GtkTextBuffer * @author Sébastien Le Roux */ /* * This file: 'workinfo.c' * * Contains: * - Functions to display project information in GtkTextBuffer * * List of functions: void workinfo (project * this_proj, int i); */ #include "global.h" #include "interface.h" #include "project.h" extern void update_rdf_view (project * this_proj, int rdf); extern void update_sq_view (project * this_proj, int sqk); extern void update_angle_view (project * this_proj); extern void update_rings_view (project * this_proj, int c); extern void update_chains_view (project * this_proj); extern void update_spherical_view (project * this_proj); extern void update_msd_view (project * this_proj); extern void update_skt_view (project * this_proj); extern void model_info (project * this_proj, GtkTextBuffer * buf); extern void opengl_info (project * this_proj, GtkTextBuffer * buf); /*! \fn void workinfo (project * this_proj, int i) \brief display information about a workspace menu item for a project \param this_proj the target project \param i the properties to display from the menu */ void workinfo (project * this_proj, int i) { gchar * str; int j; project * tmp_proj; switch (i) { case -4: this_proj -> text_buffer[0] = add_buffer (NULL, NULL, NULL); print_info (_("\n\nWorkspace information\n\n\n"), "heading", this_proj -> text_buffer[0]); if (g_strcmp0(workspacefile, "(null)") == 0) workspacefile = NULL; if (workspacefile != NULL) { print_info (_("\tWorkspace file: "), "italic", this_proj -> text_buffer[0]); print_info (workspacefile, NULL, this_proj -> text_buffer[0]); } str = g_strdup_printf ("\n\n\t%d", nprojects); print_info (str, "bold_red", this_proj -> text_buffer[0]); g_free (str); print_info (_(" project(s) in workspace: "), NULL, this_proj -> text_buffer[0]); tmp_proj = workzone.first; for (j=0; j text_buffer[0]); print_info (prepare_for_title(tmp_proj -> name), "italic", this_proj -> text_buffer[0]); if (tmp_proj -> next != NULL) tmp_proj = tmp_proj -> next; } print_info (_("\n\n\tActive project: "), NULL, this_proj -> text_buffer[0]); print_info (prepare_for_title(active_project -> name), "bold_green", this_proj -> text_buffer[0]); break; case -3: this_proj -> text_buffer[1] = add_buffer (NULL, NULL, NULL); model_info (this_proj, this_proj -> text_buffer[1]); break; case -2: this_proj -> text_buffer[2] = add_buffer (NULL, NULL, NULL); opengl_info (this_proj, this_proj -> text_buffer[2]); break; default: if (i > -1) { if (this_proj -> analysis[i] -> calc_buffer == NULL && this_proj -> analysis[i] -> calc_ok) { switch (i) { case GDR: update_rdf_view (this_proj, GDR); break; case SQD: update_sq_view (this_proj, SQD); break; case SKD: update_sq_view (this_proj, SKD); break; case GDK: update_rdf_view (this_proj, GDK); break; case ANG: update_angle_view (this_proj); break; case RIN: for (j=0; j<5; j++) if (this_proj -> rsparam[j][5]) update_rings_view (this_proj, j); break; case CHA: update_chains_view (this_proj); break; case SPH: update_spherical_view (this_proj); break; case MSD: update_msd_view (this_proj); break; case SKT: update_skt_view (this_proj); break; } } } break; } if (i < 0) { j = i + 4; if (this_proj -> text_buffer[j] == NULL) this_proj -> text_buffer[j] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[j]); } else { if (this_proj -> analysis[i] -> calc_buffer == NULL) this_proj -> analysis[i] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[i] -> calc_buffer); } } atomes_1.3.1/src/workspace/modelinfo.c0000664000175000017500000003304615212624223017420 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file modelinfo.c * @short Functions to display model information in GtkTextBuffer * @author Sébastien Le Roux */ /* * This file: 'modelinfo.c' * * Contains: * - Functions to display model information in GtkTextBuffer * * List of functions: void print_spg_name (gchar * str , GtkTextBuffer * buffer); void print_spg_setting (gchar * init, GtkTextBuffer * buffer); void model_info (project * this_proj, GtkTextBuffer * buffer); void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf); void opengl_info (project * this_proj, GtkTextBuffer * buf); */ #include "global.h" #include "interface.h" extern gchar * groups[230] ; extern char * vect_comp[3]; extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern gchar * get_num_string (gchar * str); /*! \fn void print_spg_name (gchar * str , GtkTextBuffer * buffer) \brief print space group name in a GtkTextBuffer \param str the space group string \param buffer the GtkTextBuffer */ void print_spg_name (gchar * str , GtkTextBuffer * buffer) { str = substitute_string (str, "", "x"); if (strstr(str, "wsubx")) { gchar * sta = g_strdup_printf ("%s", str); sta = strtok (sta, "wsubx"); print_info (sta, "bold", buffer); while (sta) { sta = strtok (NULL, "ysubx"); if (sta) { print_info (sta, "sub_bold", buffer); sta = strtok (NULL, "wsubx"); if (sta) print_info (sta, "bold", buffer); } } } else { print_info (str, "bold", buffer); } g_free (str); } /*! \fn void print_spg_setting (gchar * init, GtkTextBuffer * buffer) \brief print space group name in a GtkTextBuffer \param init the space group setting \param buffer the GtkTextBuffer */ void print_spg_setting (gchar * init, GtkTextBuffer * buffer) { gchar * str = g_strdup_printf ("%s", init); str = substitute_string (str, "_", " "); str = get_num_string (str); str = substitute_string (str, " ", NULL); print_spg_name (str, buffer); } /*! \fn void model_info (project * this_proj, GtkTextBuffer * buffer) \brief display model information in GtkTexBuffer \param this_proj the target project \param buffer the GtkTextBuffer */ void model_info (project * this_proj, GtkTextBuffer * buffer) { int i, j, k; double v; gchar * str; if (g_strcmp0(this_proj -> projfile, "(null)") == 0) this_proj -> projfile = NULL; if (this_proj -> projfile != NULL) { print_info (_("\n\tProject file: "), "italic", buffer); print_info (this_proj -> projfile, NULL, buffer); } if (this_proj -> tfile > -1 && this_proj -> coordfile != NULL) { print_info (_("\n\tCoordinates file: "), "italic", buffer); print_info (this_proj -> coordfile, NULL, buffer); print_info (_("\n\tFile type: "), "italic", buffer); print_info (coord_files[this_proj -> tfile], NULL, buffer); this_proj -> tfile = 0; } print_info (_("\n\nModel properties\n\n\n"), "heading", buffer); if (this_proj -> steps > 1) { print_info (_("\tNumber of MD steps = "), "italic", buffer); str = g_strdup_printf ("%d\n", this_proj -> steps); print_info (str, "bold", buffer); g_free (str); } print_info (_("\tNumber of atoms = "), "italic", buffer); str = g_strdup_printf ("%d\n", this_proj -> natomes); print_info (str, "bold", buffer); g_free (str); print_info (_("\tNumber of species = "), "italic", buffer); str = g_strdup_printf ("%d\n\n", this_proj -> nspec); print_info (str, "bold", buffer); g_free (str); if (this_proj -> cell.volume > 0.0) { gchar * latv[2][3]={{"a", "b", "c"}, {"α", "β", "γ"}}; if (this_proj -> cell.npt) { print_info (_("\tAv. lattice parameters:\n\n"), NULL, buffer); } else { print_info (_("\tLattice parameters:\n\n"), NULL, buffer); } for (i=0; i<2; i++) { print_info ("\t", NULL, buffer); for (j=0; j<3; j++) { str = g_strdup_printf ("\t %s=", latv[i][j]); print_info (str, "bold_italic", buffer); g_free (str); if (this_proj -> cell.npt) { v = 0.0; for (k=0; k steps; k++) v += this_proj -> cell.box[k].param[i][j]; v /= this_proj -> steps; } else { v = this_proj -> cell.box[0].param[i][j]; } str = g_strdup_printf ("%10.5lf", v); print_info (str, "bold_green", buffer); g_free (str); } print_info ("\n", NULL, buffer); } print_info ("\n", NULL, buffer); if (this_proj -> cell.npt) { print_info (_("\tAv. lattice vectors:\n\n\t\t"), NULL, buffer); } else { print_info (_("\tLattice vectors:\n\n\t\t"), NULL, buffer); } for (i=0; i<3; i++) { str = g_strdup_printf (" %s ", vect_comp[i]); print_info (str, NULL, buffer); g_free (str); } print_info ("\n", NULL, buffer); for (i=0; i<3; i++) { str = g_strdup_printf ("\t\t%s", latv[0][i]); print_info (str, NULL, buffer); g_free (str); for (j=0; j<3; j++) { if (this_proj -> cell.npt) { v = 0.0; for (k=0; k steps; k++) v += this_proj -> cell.box[k].vect[i][j]; v /= this_proj -> steps; } else { v = this_proj -> cell.box[0].vect[i][j]; } str = g_strdup_printf ("%10.5lf", v); print_info (str, "bold_orange", buffer); g_free (str); } print_info ("\n", NULL, buffer); } if (this_proj -> cell.sp_group) { print_info ("\n", NULL, buffer); print_info (_("\tCrystal information:\n\n"), "italic", buffer); str = g_strdup_printf ("%d", this_proj -> cell.sp_group -> id); print_info (_("\t\tSpace group N°: "),"italic", buffer); print_info (str, "bold", buffer); g_free (str); print_info ("\n", NULL, buffer); print_info (_("\t\tSpace group: "),"italic", buffer); print_spg_name (g_strdup_printf ("%s", groups[this_proj -> cell.sp_group -> id-1]), buffer); print_info ("\n", NULL, buffer); print_info (_("\t\tSpace group setting: "),"italic", buffer); print_spg_setting (this_proj -> cell.sp_group -> setting, buffer); print_info ("\n", NULL, buffer); print_info ("\t\tHermman-Mauguin: ","italic", buffer); print_spg_setting (this_proj -> cell.sp_group -> hms, buffer); print_info ("\n", NULL, buffer); print_info (_("\t\tBravais lattice: "),"italic", buffer); print_info (this_proj -> cell.sp_group -> bravais, "bold", buffer); print_info ("\n", NULL, buffer); } print_info ("\n", NULL, buffer); if (this_proj -> cell.npt) { print_info (_("\tAv. volume = "), "italic", buffer); } else { print_info (_("\tVolume = "), "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> cell.volume); print_info (str, "bold", buffer); g_free (str); print_info (" Ã…", NULL, buffer); print_info ("3", "sup", buffer); if (this_proj -> cell.npt) { print_info (_("\n\tAv. density = "), "italic", buffer); } else { print_info (_("\n\tDensity = "), "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> cell.density); print_info (str, "bold", buffer); g_free (str); print_info (" g / cm", NULL, buffer); print_info ("3", "sup", buffer); if (this_proj -> cell.npt) { print_info (_("\n\tAv. number density = "), "italic", buffer); } else { print_info (_("\n\tNumber density = "), "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> natomes / this_proj -> cell.volume); print_info (str, "bold", buffer); g_free (str); print_info (_(" atoms / Ã…"), NULL, buffer); print_info ("3", "sup", buffer); } print_info (_("\n\n\tEmpirical formula:\t"), "italic", buffer); for (i=0; i nspec; i++) { print_info (this_proj -> chemistry -> label[i], "bold", buffer); if (this_proj -> chemistry -> formula[i] != 1) { str = g_strdup_printf ("%d", this_proj -> chemistry -> formula[i]); print_info (str, "sub", buffer); g_free (str); } print_info (" ", NULL, buffer); } if (this_proj -> cell.volume != 0.0) { print_info (_("\n\n\tAtom\t Number Fraction\tNumber density (atoms / Ã…"), "italic", buffer); print_info ("3", "sup", buffer); print_info (")\n", "italic", buffer); } else { print_info (_("\n\n\tAtom\t Number Fraction"), "italic", buffer); } for (i=0; i nspec; i++) { str = g_strdup_printf ("\n\t%s\t%7d\t%11.6lf", this_proj -> chemistry -> label[i], this_proj -> chemistry -> nsps[i], (double)this_proj -> chemistry -> nsps[i]/this_proj -> natomes); print_info (str, textcolor(i), buffer); g_free (str); if (this_proj -> cell.volume != 0.0) { str = g_strdup_printf ("\t%11.6lf", this_proj -> chemistry -> nsps[i]/this_proj -> cell.volume); print_info (str, textcolor(i), buffer); g_free (str); } } } /*! \fn void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) \brief print OpenGL stuff in a GtkTextBuffer \param text Message \param name OpenGL id to retreive \param buf the GtkTextBuffer */ void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) { int i; gchar * str; print_info (text, NULL, buf); glGetIntegerv (name, & i); str = g_strdup_printf ("%d\n", i); print_info (str, "bold_blue", buf); g_free (str); } /*! \fn void opengl_info (project * this_proj, GtkTextBuffer * buf) \brief display OpenGL information in a GtkTextBuffer \param this_proj the target project \param buf the GtkTextBuffer */ void opengl_info (project * this_proj, GtkTextBuffer * buf) { int i, j, k, l; i = j = k = l = -1; gtk_gl_area_make_current ((GtkGLArea *)this_proj -> modelgl -> plot); gchar * str; print_info ("\n\nOpenGL driver information\n\n", "heading", buf); print_info ("\tOpenGL Version \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_VERSION)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Driver\t\t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_VENDOR)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Hardware \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_RENDERER)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Shading Version \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n\n", (const char*)glGetString (GL_SHADING_LANGUAGE_VERSION)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Window information:\n\n", NULL, buf); print_info ("\t\tColor Bits (R,G,B,A)\t\t: ", NULL, buf); glGetIntegerv (GL_RED_BITS, & i); glGetIntegerv (GL_GREEN_BITS, & j); glGetIntegerv (GL_BLUE_BITS, & k); glGetIntegerv (GL_ALPHA_BITS, & l); str = g_strdup_printf ("%d, %d, %d, %d\n", i, j, k, l); print_info (str, "bold_blue", buf); g_free (str); print_this_ogl_stuff ("\t\tDepth Bits \t\t\t: ", GL_DEPTH_BITS, buf); print_this_ogl_stuff ("\t\tStencil Bits \t\t\t: ", GL_STENCIL_BITS, buf); print_this_ogl_stuff ("\t\tMax. Lights Allowed \t\t: ", GL_MAX_LIGHTS, buf); print_this_ogl_stuff ("\t\tMax. Texture Size \t\t: ", GL_MAX_TEXTURE_SIZE, buf); print_this_ogl_stuff ("\t\tMax. Clipping Planes \t\t: ", GL_MAX_CLIP_PLANES, buf); print_this_ogl_stuff ("\t\tMax. Modelview Matrix Stacks \t: ", GL_MAX_MODELVIEW_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Projection Matrix Stacks \t: ", GL_MAX_PROJECTION_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Attribute Stacks \t\t: ", GL_MAX_ATTRIB_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Texture Stacks \t\t: ", GL_MAX_TEXTURE_STACK_DEPTH, buf); print_info ("\n\tGeometry Shader information:\n\n", NULL, buf); print_this_ogl_stuff ("\t\tMax. output vertices \t\t: ", GL_MAX_GEOMETRY_OUTPUT_VERTICES, buf); print_this_ogl_stuff ("\t\tMax. output components \t\t: ", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, buf); print_this_ogl_stuff ("\t\tMax. total output components \t: ", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, buf); print_info ("\n\tTotal number of OpenGL Extensions\t: ", NULL, buf); glGetIntegerv (GL_NUM_EXTENSIONS, & i); str = g_strdup_printf ("%d\n", i); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tExtensions list:\n", NULL, buf); for (j=0; j Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file workspace.c * @short Implementation of the workspace tree view \n Associated callbacks * @author Sébastien Le Roux */ /* * This file: 'workspace.c' * * Contains: * - Implementation of the workspace tree view - Associated callbacks * * List of functions: int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path); int find_proj_by_path (GtkTreePath * path); G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data); void add_project (GtkTreeStore * store, int i); void correct_this_window_title (GtkWidget * win, gchar * str); void workspace_menu (GtkWidget * tree, gpointer event, double x, double y); void create_workspace (); void add_project_to_workspace (); void remove_project_from_workspace (int id); static void fill_workspace (GtkTreeStore * store); G_MODULE_EXPORT void activate_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void workspace_ondc (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata); G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data); GtkWidget * create_workspace_tree (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" extern void workinfo (project * this_proj, int i); extern GtkWidget * work_menu (int p, int c); GdkPixbuf * pix = NULL; GtkWidget * img = NULL; GtkWidget * hbox = NULL; GtkWidget * vbox = NULL; GtkWidget * lab = NULL; GtkWidget * lap = NULL; GtkWidget * eap = NULL; gchar * labtmp = NULL; gchar * laptmp = NULL; GtkWidget * worktree = NULL; GtkTreeStore * workstore = NULL; GtkTreeIter worklevel; GtkTreeIter * piter = NULL; GtkTreeIter * witer = NULL; GtkTreePath ** prpath = NULL; GtkTreePath * wpath = NULL; GdkPixbuf * wpix = NULL; gchar * wchar = NULL; int projects_in_workspace = 0; char * work_menu_items[NITEMS] = {i18n("Workspace "), i18n("Settings "), //i18n("OpenGL - 3D "), i18n("Visualization "), //i18n("Calc. visualization "), i18n("Analysis ")}; /*! \fn void add_project (GtkTreeStore * store, int i) \brief add project to the GtkTreeStore of the workspace \param store the GtkTreeStore \param i the id of the project to add */ void add_project (GtkTreeStore * store, int i) { int j; gchar * tmp; GtkTreeIter steplevel; GtkTreeIter optslevel; gtk_tree_store_append (store, & piter[i], & worklevel); project * this_proj = get_project_by_id(i); if (i == activep) { tmp = g_strdup_printf ("%s", this_proj -> name); } else { tmp = g_strdup_printf ("%s", this_proj -> name); } gtk_tree_store_set (store, & piter[i], 0, THETD, 1, tmp, 2, -1, -1); prpath[i] = gtk_tree_model_get_path (GTK_TREE_MODEL(store), & piter[i]); g_free (tmp); gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, SETTING, 1, _(work_menu_items[1]), 2, -3, -1); // OpenGL gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, OGLM, 1, _(work_menu_items[2]), 2, -2, -1); // Calculations gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, RUN, 1, _(work_menu_items[3]), 2, -1, -1); for (j=0; j steps > 1) { gtk_tree_store_append (store, & optslevel, & steplevel); gtk_tree_store_set (store, & optslevel, 0, gdk_pixbuf_new_from_file(graph_img[j], NULL), 1, _(graph_name[j]), 2, j, -1); } } gtk_tree_view_expand_to_path (GTK_TREE_VIEW(worktree), gtk_tree_model_get_path(GTK_TREE_MODEL(store), & worklevel)); projects_in_workspace ++; } /*! \fn static void fill_workspace (GtkTreeStore * store) \brief fill the workspace tree store \param store the GtkTreeStore */ static void fill_workspace (GtkTreeStore * store) { int i; gtk_tree_store_append (store, & worklevel, NULL); gtk_tree_store_set (store, & worklevel, 0, THETD, 1, _(work_menu_items[0]), 2, -4, -1); if (piter != NULL) g_free (piter); if (prpath != NULL) g_free (prpath); if (nprojects > 0) { piter = g_malloc0(nprojects*sizeof*piter); prpath = g_malloc0(nprojects*sizeof*prpath); } for (i=0; i name, -1); } active_project_changed (id); gchar * tmp = g_strdup_printf ("%s", active_project -> name); gtk_tree_store_set (workstore, & piter[id], 1, tmp, -1); g_free (tmp); } /*! \fn int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) \brief find the calculation using the GtkTreePath in the GtkTreeView \param treeview the GtkTreeView \param path the GtkTreePath */ int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) { int i; GtkTreeIter iter; GtkTreeModel * model = gtk_tree_view_get_model (treeview); if (gtk_tree_model_get_iter (model, & iter, path)) { gtk_tree_model_get (model, & iter, 2, & i, -1); return i; } return -1; } /*! \fn int find_proj_by_path (GtkTreePath * path) \brief find the project id using the GtkTreePath \param path the GtkTreePath */ int find_proj_by_path (GtkTreePath * path) { int i, j; i = -1; for (j=0; j%s", wchar); gtk_tree_store_set (GTK_TREE_STORE(model), & iter, 1, tmp, -1); g_free (tmp); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: cleaning view"); g_debug ("WORKSPACE_ONDC: wchar = %s", wchar); #endif gtk_tree_model_get (model, & iter, 2, & i, -1); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: creating view id= %d", i); #endif j = find_proj_by_path (path); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: for project= %d", j); #endif if (j < 0) j = activep; if (i == -2) prep_model (j); workinfo (get_project_by_id(j), i); } } } /*! \fn void correct_this_window_title (GtkWidget * win, gchar * str) \brief use new title for GtkWindow, providing it exists \param win the GtkWindow \param str the new title */ void correct_this_window_title (GtkWidget * win, gchar * str) { if (win) { if (GTK_IS_WIDGET(win)) { gtk_window_set_title (GTK_WINDOW (win), str); } } if (str) g_free (str); } /*! \fn G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) \brief change project name \param wid the GtkWidgent sending the signal \param edata the associated data pointer */ G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) { int i, j, k; gchar * tmp; i = GPOINTER_TO_INT (edata); tmp = g_strdup_printf (_("Please enter a new name for project N°%d"), i); project * this_proj = get_project_by_id(i); tmp = cask(tmp, _("Project name"), i, this_proj -> name, MainWindow); if (tmp != NULL) { this_proj -> name = g_strdup_printf ("%s", tmp); if (i == activep) { g_free (tmp); tmp = g_strdup_printf ("%s", this_proj -> name); } gtk_tree_store_set (workstore, & piter[i], 1, tmp, -1); g_free (tmp); // Need to update other project windows names !!! gchar * tmp_title = prepare_for_title (this_proj -> name); if (this_proj -> modelgl != NULL) { if (this_proj -> modelgl -> win != NULL) { correct_this_window_title (this_proj -> modelgl -> win, g_strdup_printf (_("%s - 3D view - [%s mode]"), tmp_title, _(mode_name[this_proj -> modelgl -> mode]))); } gchar * win_title[2]={i18n("Atom(s) configuration"), i18n("Clone(s) configuration")}; for (j=0; j<2; j++) { if (this_proj -> modelgl -> model_win[j] != NULL) { correct_this_window_title (this_proj -> modelgl -> model_win[j] -> win, g_strdup_printf ("%s - %s", _(win_title[j]), tmp_title)); } } if (this_proj -> modelgl -> coord_win != NULL) { correct_this_window_title (this_proj -> modelgl -> coord_win -> win, g_strdup_printf (_("Environments configuration - %s"), tmp_title)); } if (this_proj -> modelgl -> atom_win != NULL) { correct_this_window_title (this_proj -> modelgl -> atom_win -> win, g_strdup_printf (_("Model edition - %s"), tmp_title)); } if (this_proj -> modelgl -> cell_win != NULL) { correct_this_window_title (this_proj -> modelgl -> cell_win -> win, g_strdup_printf (_("Cell edition - %s"), tmp_title)); } if (this_proj -> modelgl -> opengl_win != NULL) { correct_this_window_title (this_proj -> modelgl -> opengl_win -> win, g_strdup_printf (_("OpenGL material aspect and light settings - %s"), tmp_title)); } if (this_proj -> modelgl -> spiner != NULL) { correct_this_window_title (this_proj -> modelgl -> spiner -> win, g_strdup_printf (_("%s - spin"), tmp_title)); } if (this_proj -> modelgl -> player != NULL) { j = this_proj -> modelgl -> anim -> last -> img -> step; correct_this_window_title (this_proj -> modelgl -> player -> win, g_strdup_printf (_("%s - player - step %d"), tmp_title, j)); } if (this_proj -> modelgl -> measure_win != NULL) { correct_this_window_title (this_proj -> modelgl -> measure_win -> win, g_strdup_printf (_("%s - measures"), tmp_title)); } if (this_proj -> modelgl -> gradient_win != NULL) { correct_this_window_title (this_proj -> modelgl -> gradient_win -> win, g_strdup_printf (_("%s - background settings"), tmp_title)); } if (this_proj -> modelgl -> box_win != NULL) { correct_this_window_title (this_proj -> modelgl -> box_win -> win, g_strdup_printf (_("%s - box settings"), tmp_title)); } if (this_proj -> modelgl -> axis_win != NULL) { correct_this_window_title (this_proj -> modelgl -> axis_win -> win, g_strdup_printf (_("%s - axis settings"), tmp_title)); } if (this_proj -> modelgl -> rep_win != NULL) { correct_this_window_title (this_proj -> modelgl -> rep_win -> win, g_strdup_printf ("%s - OpenGL camera set-up", tmp_title)); } } g_free (tmp_title); for (j=0; j analysis[j] -> init_ok) { for (k=0; k analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> window != NULL) { correct_this_window_title (this_proj -> analysis[j] -> curves[k] -> window, g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> analysis[j] -> curves[k] -> name)); } } } } if (activep == i) { correct_this_window_title (MainWindow, g_strdup_printf ("%s - %s", PACKAGE, prepare_for_title(active_project -> name))); correct_this_window_title (curvetoolbox, g_strdup_printf (_("Toolboxes - %s"), prepare_for_title(active_project -> name))); } } } /*! \fn void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) \brief popup the workspace contextual menu in workspace tree view \param tree the GtkTreeView \param event the event \param x x position \param y y position */ void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) { GtkWidget * menu; GtkTreePath * mpath; int this_calc = -1; gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(tree), (gint)x, (gint)y, & mpath, NULL, NULL, NULL); if (mpath != NULL) { activew = find_proj_by_path (mpath); this_calc = find_calc_by_path (GTK_TREE_VIEW(tree), mpath); } else { activew = activep; } menu = work_menu (activew, this_calc); #ifdef GTK3 pop_menu_at_pointer (menu, (GdkEvent *)event); #else gtk_widget_set_parent (menu, tree); pop_menu_at_pointer (menu, x, y); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief GTK4 popover workspace menu at current location \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY) { workspace_menu ((GtkWidget *)data, NULL, x, y); } } #else /*! \fn G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief GTK3 button event on workspace to display contextual menu \param widget the GtkWidget sending the signal \param event the associated GtkButton \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS && event -> button == 3) { workspace_menu (widget, (gpointer)event, event -> x, event -> y); } return FALSE; } #endif void workspace_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { gtk_cell_renderer_set_visible (renderer, FALSE); } /*! \fn GtkWidget * create_workspace_tree () \brief create the workspace tree store */ GtkWidget * create_workspace_tree () { GtkTreeViewColumn * col; GtkCellRenderer * renderer; GtkTreeSelection * workselect; worktree = destroy_this_widget (worktree); workstore = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); worktree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(workstore)); fill_workspace (workstore); g_object_unref (workstore); col = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_set_attributes (col, renderer, "pixbuf", 0, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", 1, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", 2, NULL); gtk_tree_view_column_set_cell_data_func (col, renderer, workspace_set_visible, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(worktree), col); workselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(worktree)); gtk_tree_selection_set_mode (workselect, GTK_SELECTION_SINGLE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(worktree), FALSE); //g_signal_connect (G_OBJECT(workselect), "changed", G_CALLBACK(selework), (gpointer)worktree); g_signal_connect (G_OBJECT(worktree), "row-activated", G_CALLBACK(workspace_ondc), NULL); #ifdef GTK3 g_signal_connect (G_OBJECT(worktree), "button-press-event", G_CALLBACK(on_workspace_button_event), NULL); #else add_widget_gesture_and_key_action (worktree, "workspace-context-click", G_CALLBACK(workspace_popup), (gpointer)worktree, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif gtk_tree_view_expand_all (GTK_TREE_VIEW(worktree)); return worktree; } /*! \fn void create_workspace () \brief create the workspace */ void create_workspace () { add_container_child (CONTAINER_SCR, MainScrol[0], create_workspace_tree ()); lab = NULL; witer = NULL; wpath = NULL; show_the_widgets (MainScrol[0]); } /*! \fn void add_project_to_workspace () \brief add project(s) to the workspace tree */ void add_project_to_workspace () { if (worktree != NULL && workstore != NULL && nprojects > 0) { int i; if (projects_in_workspace > 0) { GtkTreeIter ** tmpiter; tmpiter = g_malloc0(projects_in_workspace*sizeof*tmpiter); for (i=0; i name, -1); } if (tmpiter != NULL) g_free (tmpiter); } else { if (prpath != NULL) g_free (prpath); if (piter != NULL) g_free (piter); piter = g_malloc0((projects_in_workspace+1)*sizeof*piter); prpath = g_malloc0((projects_in_workspace+1)*sizeof*prpath); } add_project (workstore, activep); newspace = FALSE; } else { create_workspace (); } if (nprojects == 0) { widget_set_sensitive (worktree, 0); } else { widget_set_sensitive (worktree, 1); } } /*! \fn void remove_project_from_workspace (int id) \brief remove project from workspace \param id the id of the project to be remove */ void remove_project_from_workspace (int id) { int i, j; GtkTreeIter ** tmpiter; if (worktree != NULL && workstore != NULL && nprojects > 0) { if (wpath != NULL) { i = find_proj_by_path (wpath); if (i == id) { wpath = NULL; wchar = NULL; } } if (projects_in_workspace > 1) { tmpiter = g_malloc0((projects_in_workspace-1)*sizeof*tmpiter); j = -1; for (i=0; i name, -1); } } g_free (tmpiter); } else { gtk_tree_store_remove (workstore, & piter[id]); if (prpath != NULL) g_free (prpath); prpath = NULL; if (piter != NULL) g_free (piter); piter = NULL; projects_in_workspace --; widget_set_sensitive (worktree, 0); witer = NULL; wchar = NULL; } } } atomes_1.3.1/src/Makefile.in0000664000175000017500000023407315212624223015352 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = atomes$(EXEEXT) @WINDOWS_TRUE@am__append_1 = win_atomes.o subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = $(for)parameters.$(OBJEXT) $(for)mendeleiev.$(OBJEXT) am__objects_2 = $(for)allocbonds.$(OBJEXT) $(for)allochem.$(OBJEXT) \ $(for)allocmsd.$(OBJEXT) $(for)angles.$(OBJEXT) \ $(for)bonds.$(OBJEXT) $(for)c3d.$(OBJEXT) \ $(for)chains.$(OBJEXT) $(for)chains_ogl.$(OBJEXT) \ $(for)chemistry.$(OBJEXT) $(for)clean.$(OBJEXT) \ $(for)cqvf.$(OBJEXT) $(for)dmtx.$(OBJEXT) $(for)dvtb.$(OBJEXT) \ $(for)escs.$(OBJEXT) $(for)fzbt.$(OBJEXT) $(for)gr.$(OBJEXT) \ $(for)grfft.$(OBJEXT) $(for)initchains.$(OBJEXT) \ $(for)initrings.$(OBJEXT) $(for)lattice.$(OBJEXT) \ $(for)molecules.$(OBJEXT) $(for)msd.$(OBJEXT) \ $(for)pdb.$(OBJEXT) $(for)prepdata.$(OBJEXT) \ $(for)resrings.$(OBJEXT) $(for)rings-guttman.$(OBJEXT) \ $(for)rings-king.$(OBJEXT) $(for)rings_ogl.$(OBJEXT) \ $(for)rings-primitive.$(OBJEXT) $(for)sk.$(OBJEXT) \ $(for)skt.$(OBJEXT) $(for)spherical.$(OBJEXT) \ $(for)sq.$(OBJEXT) $(for)threads.$(OBJEXT) $(for)trj.$(OBJEXT) \ $(for)utils.$(OBJEXT) $(for)vas.$(OBJEXT) \ $(for)writedata.$(OBJEXT) $(for)xyz.$(OBJEXT) am__objects_3 = $(am__objects_1) $(am__objects_2) am__objects_4 = am__objects_5 = $(gui)bdcall.$(OBJEXT) $(gui)calc_menu.$(OBJEXT) \ $(gui)callbacks.$(OBJEXT) $(gui)chainscall.$(OBJEXT) \ $(gui)edit_menu.$(OBJEXT) $(gui)grcall.$(OBJEXT) \ $(gui)gtk-misc.$(OBJEXT) $(gui)gui.$(OBJEXT) \ $(gui)initc.$(OBJEXT) $(gui)preferences.$(OBJEXT) \ $(gui)interface.$(OBJEXT) $(gui)main.$(OBJEXT) \ $(gui)msdcall.$(OBJEXT) $(gui)ringscall.$(OBJEXT) \ $(gui)spcall.$(OBJEXT) $(gui)sqcall.$(OBJEXT) \ $(gui)sktcall.$(OBJEXT) $(gui)tools.$(OBJEXT) \ $(gui)work_menu.$(OBJEXT) am__objects_6 = $(work)modelinfo.$(OBJEXT) $(work)workinfo.$(OBJEXT) \ $(work)workspace.$(OBJEXT) am__objects_7 = $(read)read_c3d.$(OBJEXT) $(read)read_cif.$(OBJEXT) \ $(read)read_coord.$(OBJEXT) $(read)read_hist.$(OBJEXT) \ $(read)read_isaacs.$(OBJEXT) $(read)read_npt.$(OBJEXT) \ $(read)read_pdb.$(OBJEXT) $(read)read_trj.$(OBJEXT) \ $(read)read_vas.$(OBJEXT) $(read)read_xyz.$(OBJEXT) am__objects_8 = $(am__objects_7) $(proj)close_p.$(OBJEXT) \ $(proj)debugio.$(OBJEXT) $(proj)init_p.$(OBJEXT) \ $(proj)open_p.$(OBJEXT) $(proj)project.$(OBJEXT) \ $(proj)read_bond.$(OBJEXT) $(proj)read_curve.$(OBJEXT) \ $(proj)read_field.$(OBJEXT) $(proj)read_mol.$(OBJEXT) \ $(proj)read_opengl.$(OBJEXT) $(proj)read_qm.$(OBJEXT) \ $(proj)save_bond.$(OBJEXT) $(proj)save_curve.$(OBJEXT) \ $(proj)save_field.$(OBJEXT) $(proj)save_mol.$(OBJEXT) \ $(proj)save_opengl.$(OBJEXT) $(proj)save_p.$(OBJEXT) \ $(proj)save_qm.$(OBJEXT) $(proj)update_p.$(OBJEXT) am__objects_9 = $(cp2k)cp2k_basis.$(OBJEXT) \ $(cp2k)cp2k_files.$(OBJEXT) $(cp2k)cp2k_gth-basis.$(OBJEXT) \ $(cp2k)cp2k_init.$(OBJEXT) $(cp2k)cp2k_mol.$(OBJEXT) \ $(cp2k)cp2k_molopt-basis.$(OBJEXT) $(cp2k)cp2k_pot.$(OBJEXT) \ $(cp2k)cp2k_print.$(OBJEXT) am__objects_10 = $(cpmd)cpmd_atoms.$(OBJEXT) \ $(cpmd)cpmd_init.$(OBJEXT) $(cpmd)cpmd_nose.$(OBJEXT) \ $(cpmd)cpmd_print.$(OBJEXT) $(cpmd)cpmd_restart.$(OBJEXT) am__objects_11 = $(dlpoly)dlp_active.$(OBJEXT) \ $(dlpoly)dlp_atom.$(OBJEXT) $(dlpoly)dlp_comp.$(OBJEXT) \ $(dlpoly)dlp_control.$(OBJEXT) $(dlpoly)dlp_copy.$(OBJEXT) \ $(dlpoly)dlp_edit.$(OBJEXT) $(dlpoly)dlp_ff_match.$(OBJEXT) \ $(dlpoly)dlp_field.$(OBJEXT) $(dlpoly)dlp_init.$(OBJEXT) \ $(dlpoly)dlp_mol.$(OBJEXT) $(dlpoly)dlp_print.$(OBJEXT) \ $(dlpoly)dlp_viz.$(OBJEXT) am__objects_12 = $(lammps)la_print.$(OBJEXT) am__objects_13 = $(calc)calc.$(OBJEXT) $(am__objects_9) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(fields)force_fields.$(OBJEXT) am__objects_14 = $(curve)cedit.$(OBJEXT) $(curve)curve.$(OBJEXT) \ $(curve)cwidget.$(OBJEXT) $(curve)datab.$(OBJEXT) \ $(curve)draw.$(OBJEXT) $(curve)frame.$(OBJEXT) \ $(curve)glyph.$(OBJEXT) $(curve)labels.$(OBJEXT) \ $(curve)legend.$(OBJEXT) $(curve)m_curve.$(OBJEXT) \ $(curve)show.$(OBJEXT) $(curve)tab-1.$(OBJEXT) \ $(curve)tab-2.$(OBJEXT) $(curve)tab-3.$(OBJEXT) \ $(curve)tab-4.$(OBJEXT) $(curve)title.$(OBJEXT) \ $(curve)w_curve.$(OBJEXT) $(curve)w_data.$(OBJEXT) \ $(curve)w_img.$(OBJEXT) $(curve)xaxis.$(OBJEXT) \ $(curve)yaxis.$(OBJEXT) am__objects_15 = $(glwin)color_box.$(OBJEXT) \ $(glwin)glwindow.$(OBJEXT) $(glwin)initchain.$(OBJEXT) \ $(glwin)initcoord.$(OBJEXT) $(glwin)initmol.$(OBJEXT) \ $(glwin)initring.$(OBJEXT) $(glwin)m_anim.$(OBJEXT) \ $(glwin)m_atoms.$(OBJEXT) $(glwin)m_axis.$(OBJEXT) \ $(glwin)m_back.$(OBJEXT) $(glwin)m_bonds.$(OBJEXT) \ $(glwin)m_box.$(OBJEXT) $(glwin)m_clones.$(OBJEXT) \ $(glwin)m_coord.$(OBJEXT) $(glwin)m_edit.$(OBJEXT) \ $(glwin)menu_bar.$(OBJEXT) $(glwin)m_map.$(OBJEXT) \ $(glwin)m_poly.$(OBJEXT) $(glwin)m_proj.$(OBJEXT) \ $(glwin)m_quality.$(OBJEXT) $(glwin)m_render.$(OBJEXT) \ $(glwin)m_rep.$(OBJEXT) $(glwin)m_style.$(OBJEXT) \ $(glwin)m_tools.$(OBJEXT) $(glwin)popup.$(OBJEXT) \ $(glwin)w_advance.$(OBJEXT) $(glwin)w_atoms.$(OBJEXT) \ $(glwin)w_axis.$(OBJEXT) $(glwin)w_bonds.$(OBJEXT) \ $(glwin)w_box.$(OBJEXT) $(glwin)w_chains.$(OBJEXT) \ $(glwin)w_colors.$(OBJEXT) $(glwin)w_coord.$(OBJEXT) \ $(glwin)w_cutoffs.$(OBJEXT) $(glwin)w_encode.$(OBJEXT) \ $(glwin)w_labels.$(OBJEXT) $(glwin)w_library.$(OBJEXT) \ $(glwin)w_measures.$(OBJEXT) $(glwin)w_periodic.$(OBJEXT) \ $(glwin)w_record.$(OBJEXT) $(glwin)w_rings.$(OBJEXT) \ $(glwin)w_search.$(OBJEXT) $(glwin)w_sequencer.$(OBJEXT) \ $(glwin)w_spiner.$(OBJEXT) $(glwin)w_volumes.$(OBJEXT) am__objects_16 = $(gldraw)d_atoms.$(OBJEXT) $(gldraw)d_axis.$(OBJEXT) \ $(gldraw)d_bonds.$(OBJEXT) $(gldraw)d_box.$(OBJEXT) \ $(gldraw)d_label.$(OBJEXT) $(gldraw)d_measures.$(OBJEXT) \ $(gldraw)d_poly.$(OBJEXT) $(gldraw)d_rings.$(OBJEXT) \ $(gldraw)d_selection.$(OBJEXT) $(gldraw)d_background.$(OBJEXT) \ $(gldraw)image.$(OBJEXT) $(gldraw)movie.$(OBJEXT) \ $(gldraw)ogl_text.$(OBJEXT) am__objects_17 = $(gledit)atom_action.$(OBJEXT) \ $(gledit)atom_coord.$(OBJEXT) $(gledit)atom_edit.$(OBJEXT) \ $(gledit)atom_geo.$(OBJEXT) $(gledit)atom_insert.$(OBJEXT) \ $(gledit)atom_move.$(OBJEXT) $(gledit)atom_object.$(OBJEXT) \ $(gledit)atom_remove.$(OBJEXT) $(gledit)atom_search.$(OBJEXT) \ $(gledit)atom_species.$(OBJEXT) \ $(gledit)cbuild_action.$(OBJEXT) \ $(gledit)cbuild_edit.$(OBJEXT) $(gledit)cbuild_info.$(OBJEXT) \ $(gledit)cbuild_sg.$(OBJEXT) $(gledit)cell_cut.$(OBJEXT) \ $(gledit)cell_density.$(OBJEXT) $(gledit)cell_edit.$(OBJEXT) \ $(gledit)cell_extra.$(OBJEXT) $(gledit)cell_pixel.$(OBJEXT) \ $(gledit)cell_shift.$(OBJEXT) $(gledit)cell_super.$(OBJEXT) am__objects_18 = $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(ogl)arcball.$(OBJEXT) $(ogl)glview.$(OBJEXT) \ $(ogl)ogl_draw.$(OBJEXT) $(ogl)ogl_shaders.$(OBJEXT) \ $(ogl)ogl_shading.$(OBJEXT) $(ogl)ogl_utils.$(OBJEXT) \ $(ogl)selection.$(OBJEXT) am_atomes_OBJECTS = $(am__objects_3) $(am__objects_4) global.$(OBJEXT) \ $(am__objects_5) $(am__objects_6) $(am__objects_8) \ $(am__objects_13) $(am__objects_14) $(am__objects_18) atomes_OBJECTS = $(am_atomes_OBJECTS) am__DEPENDENCIES_1 = atomes_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/$(calc)calc.Po \ ./$(DEPDIR)/$(cp2k)cp2k_basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_files.Po \ ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_init.Po ./$(DEPDIR)/$(cp2k)cp2k_mol.Po \ ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_pot.Po \ ./$(DEPDIR)/$(cp2k)cp2k_print.Po \ ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po \ ./$(DEPDIR)/$(cpmd)cpmd_init.Po \ ./$(DEPDIR)/$(cpmd)cpmd_nose.Po \ ./$(DEPDIR)/$(cpmd)cpmd_print.Po \ ./$(DEPDIR)/$(cpmd)cpmd_restart.Po \ ./$(DEPDIR)/$(curve)cedit.Po ./$(DEPDIR)/$(curve)curve.Po \ ./$(DEPDIR)/$(curve)cwidget.Po ./$(DEPDIR)/$(curve)datab.Po \ ./$(DEPDIR)/$(curve)draw.Po ./$(DEPDIR)/$(curve)frame.Po \ ./$(DEPDIR)/$(curve)glyph.Po ./$(DEPDIR)/$(curve)labels.Po \ ./$(DEPDIR)/$(curve)legend.Po ./$(DEPDIR)/$(curve)m_curve.Po \ ./$(DEPDIR)/$(curve)show.Po ./$(DEPDIR)/$(curve)tab-1.Po \ ./$(DEPDIR)/$(curve)tab-2.Po ./$(DEPDIR)/$(curve)tab-3.Po \ ./$(DEPDIR)/$(curve)tab-4.Po ./$(DEPDIR)/$(curve)title.Po \ ./$(DEPDIR)/$(curve)w_curve.Po ./$(DEPDIR)/$(curve)w_data.Po \ ./$(DEPDIR)/$(curve)w_img.Po ./$(DEPDIR)/$(curve)xaxis.Po \ ./$(DEPDIR)/$(curve)yaxis.Po \ ./$(DEPDIR)/$(dlpoly)dlp_active.Po \ ./$(DEPDIR)/$(dlpoly)dlp_atom.Po \ ./$(DEPDIR)/$(dlpoly)dlp_comp.Po \ ./$(DEPDIR)/$(dlpoly)dlp_control.Po \ ./$(DEPDIR)/$(dlpoly)dlp_copy.Po \ ./$(DEPDIR)/$(dlpoly)dlp_edit.Po \ ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po \ ./$(DEPDIR)/$(dlpoly)dlp_field.Po \ ./$(DEPDIR)/$(dlpoly)dlp_init.Po \ ./$(DEPDIR)/$(dlpoly)dlp_mol.Po \ ./$(DEPDIR)/$(dlpoly)dlp_print.Po \ ./$(DEPDIR)/$(dlpoly)dlp_viz.Po \ ./$(DEPDIR)/$(fields)force_fields.Po \ ./$(DEPDIR)/$(gldraw)d_atoms.Po ./$(DEPDIR)/$(gldraw)d_axis.Po \ ./$(DEPDIR)/$(gldraw)d_background.Po \ ./$(DEPDIR)/$(gldraw)d_bonds.Po ./$(DEPDIR)/$(gldraw)d_box.Po \ ./$(DEPDIR)/$(gldraw)d_label.Po \ ./$(DEPDIR)/$(gldraw)d_measures.Po \ ./$(DEPDIR)/$(gldraw)d_poly.Po ./$(DEPDIR)/$(gldraw)d_rings.Po \ ./$(DEPDIR)/$(gldraw)d_selection.Po \ ./$(DEPDIR)/$(gldraw)image.Po ./$(DEPDIR)/$(gldraw)movie.Po \ ./$(DEPDIR)/$(gldraw)ogl_text.Po \ ./$(DEPDIR)/$(gledit)atom_action.Po \ ./$(DEPDIR)/$(gledit)atom_coord.Po \ ./$(DEPDIR)/$(gledit)atom_edit.Po \ ./$(DEPDIR)/$(gledit)atom_geo.Po \ ./$(DEPDIR)/$(gledit)atom_insert.Po \ ./$(DEPDIR)/$(gledit)atom_move.Po \ ./$(DEPDIR)/$(gledit)atom_object.Po \ ./$(DEPDIR)/$(gledit)atom_remove.Po \ ./$(DEPDIR)/$(gledit)atom_search.Po \ ./$(DEPDIR)/$(gledit)atom_species.Po \ ./$(DEPDIR)/$(gledit)cbuild_action.Po \ ./$(DEPDIR)/$(gledit)cbuild_edit.Po \ ./$(DEPDIR)/$(gledit)cbuild_info.Po \ ./$(DEPDIR)/$(gledit)cbuild_sg.Po \ ./$(DEPDIR)/$(gledit)cell_cut.Po \ ./$(DEPDIR)/$(gledit)cell_density.Po \ ./$(DEPDIR)/$(gledit)cell_edit.Po \ ./$(DEPDIR)/$(gledit)cell_extra.Po \ ./$(DEPDIR)/$(gledit)cell_pixel.Po \ ./$(DEPDIR)/$(gledit)cell_shift.Po \ ./$(DEPDIR)/$(gledit)cell_super.Po \ ./$(DEPDIR)/$(glwin)color_box.Po \ ./$(DEPDIR)/$(glwin)glwindow.Po \ ./$(DEPDIR)/$(glwin)initchain.Po \ ./$(DEPDIR)/$(glwin)initcoord.Po \ ./$(DEPDIR)/$(glwin)initmol.Po ./$(DEPDIR)/$(glwin)initring.Po \ ./$(DEPDIR)/$(glwin)m_anim.Po ./$(DEPDIR)/$(glwin)m_atoms.Po \ ./$(DEPDIR)/$(glwin)m_axis.Po ./$(DEPDIR)/$(glwin)m_back.Po \ ./$(DEPDIR)/$(glwin)m_bonds.Po ./$(DEPDIR)/$(glwin)m_box.Po \ ./$(DEPDIR)/$(glwin)m_clones.Po ./$(DEPDIR)/$(glwin)m_coord.Po \ ./$(DEPDIR)/$(glwin)m_edit.Po ./$(DEPDIR)/$(glwin)m_map.Po \ ./$(DEPDIR)/$(glwin)m_poly.Po ./$(DEPDIR)/$(glwin)m_proj.Po \ ./$(DEPDIR)/$(glwin)m_quality.Po \ ./$(DEPDIR)/$(glwin)m_render.Po ./$(DEPDIR)/$(glwin)m_rep.Po \ ./$(DEPDIR)/$(glwin)m_style.Po ./$(DEPDIR)/$(glwin)m_tools.Po \ ./$(DEPDIR)/$(glwin)menu_bar.Po ./$(DEPDIR)/$(glwin)popup.Po \ ./$(DEPDIR)/$(glwin)w_advance.Po \ ./$(DEPDIR)/$(glwin)w_atoms.Po ./$(DEPDIR)/$(glwin)w_axis.Po \ ./$(DEPDIR)/$(glwin)w_bonds.Po ./$(DEPDIR)/$(glwin)w_box.Po \ ./$(DEPDIR)/$(glwin)w_chains.Po \ ./$(DEPDIR)/$(glwin)w_colors.Po ./$(DEPDIR)/$(glwin)w_coord.Po \ ./$(DEPDIR)/$(glwin)w_cutoffs.Po \ ./$(DEPDIR)/$(glwin)w_encode.Po \ ./$(DEPDIR)/$(glwin)w_labels.Po \ ./$(DEPDIR)/$(glwin)w_library.Po \ ./$(DEPDIR)/$(glwin)w_measures.Po \ ./$(DEPDIR)/$(glwin)w_periodic.Po \ ./$(DEPDIR)/$(glwin)w_record.Po ./$(DEPDIR)/$(glwin)w_rings.Po \ ./$(DEPDIR)/$(glwin)w_search.Po \ ./$(DEPDIR)/$(glwin)w_sequencer.Po \ ./$(DEPDIR)/$(glwin)w_spiner.Po \ ./$(DEPDIR)/$(glwin)w_volumes.Po ./$(DEPDIR)/$(gui)bdcall.Po \ ./$(DEPDIR)/$(gui)calc_menu.Po ./$(DEPDIR)/$(gui)callbacks.Po \ ./$(DEPDIR)/$(gui)chainscall.Po ./$(DEPDIR)/$(gui)edit_menu.Po \ ./$(DEPDIR)/$(gui)grcall.Po ./$(DEPDIR)/$(gui)gtk-misc.Po \ ./$(DEPDIR)/$(gui)gui.Po ./$(DEPDIR)/$(gui)initc.Po \ ./$(DEPDIR)/$(gui)interface.Po ./$(DEPDIR)/$(gui)main.Po \ ./$(DEPDIR)/$(gui)msdcall.Po ./$(DEPDIR)/$(gui)preferences.Po \ ./$(DEPDIR)/$(gui)ringscall.Po ./$(DEPDIR)/$(gui)sktcall.Po \ ./$(DEPDIR)/$(gui)spcall.Po ./$(DEPDIR)/$(gui)sqcall.Po \ ./$(DEPDIR)/$(gui)tools.Po ./$(DEPDIR)/$(gui)work_menu.Po \ ./$(DEPDIR)/$(lammps)la_print.Po ./$(DEPDIR)/$(ogl)arcball.Po \ ./$(DEPDIR)/$(ogl)glview.Po ./$(DEPDIR)/$(ogl)ogl_draw.Po \ ./$(DEPDIR)/$(ogl)ogl_shaders.Po \ ./$(DEPDIR)/$(ogl)ogl_shading.Po \ ./$(DEPDIR)/$(ogl)ogl_utils.Po ./$(DEPDIR)/$(ogl)selection.Po \ ./$(DEPDIR)/$(proj)close_p.Po ./$(DEPDIR)/$(proj)debugio.Po \ ./$(DEPDIR)/$(proj)init_p.Po ./$(DEPDIR)/$(proj)open_p.Po \ ./$(DEPDIR)/$(proj)project.Po ./$(DEPDIR)/$(proj)read_bond.Po \ ./$(DEPDIR)/$(proj)read_curve.Po \ ./$(DEPDIR)/$(proj)read_field.Po \ ./$(DEPDIR)/$(proj)read_mol.Po \ ./$(DEPDIR)/$(proj)read_opengl.Po \ ./$(DEPDIR)/$(proj)read_qm.Po ./$(DEPDIR)/$(proj)save_bond.Po \ ./$(DEPDIR)/$(proj)save_curve.Po \ ./$(DEPDIR)/$(proj)save_field.Po \ ./$(DEPDIR)/$(proj)save_mol.Po \ ./$(DEPDIR)/$(proj)save_opengl.Po ./$(DEPDIR)/$(proj)save_p.Po \ ./$(DEPDIR)/$(proj)save_qm.Po ./$(DEPDIR)/$(proj)update_p.Po \ ./$(DEPDIR)/$(read)read_c3d.Po ./$(DEPDIR)/$(read)read_cif.Po \ ./$(DEPDIR)/$(read)read_coord.Po \ ./$(DEPDIR)/$(read)read_hist.Po \ ./$(DEPDIR)/$(read)read_isaacs.Po \ ./$(DEPDIR)/$(read)read_npt.Po ./$(DEPDIR)/$(read)read_pdb.Po \ ./$(DEPDIR)/$(read)read_trj.Po ./$(DEPDIR)/$(read)read_vas.Po \ ./$(DEPDIR)/$(read)read_xyz.Po ./$(DEPDIR)/$(work)modelinfo.Po \ ./$(DEPDIR)/$(work)workinfo.Po ./$(DEPDIR)/$(work)workspace.Po \ ./$(DEPDIR)/global.Po am__mv = mv -f PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) AM_V_PPFC = $(am__v_PPFC_@AM_V@) am__v_PPFC_ = $(am__v_PPFC_@AM_DEFAULT_V@) am__v_PPFC_0 = @echo " PPFC " $@; am__v_PPFC_1 = FCLD = $(FC) FCLINK = $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ AM_V_FCLD = $(am__v_FCLD_@AM_V@) am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) am__v_FCLD_0 = @echo " FCLD " $@; am__v_FCLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(atomes_SOURCES) DIST_SOURCES = $(atomes_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # To prepare the OpenGL testing utility: SUBDIRS = startup-testing atomes_LDADD = $(LGTK_LIBS) $(LIBXML2_LIBS) $(PANGOFT2_LIBS) \ $(FFMPEG_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) $(am__append_1) # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(LIBXML2_CFLAGS) $(PANGOFT2_CFLAGS) $(FFMPEG_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) @OPENMP_FALSE@OpenMP_FLAGS = # To turn OpenMP on/off @OPENMP_TRUE@OpenMP_FLAGS = -DOPENMP $(OPENMP_CFLAGS) # Use AM_LDFLAGS to define additional linker flags: AM_LDFLAGS = $(OpenMP_FLAGS) @GTK3_FALSE@GTK_VERSION = -DGTK4 @GTK3_TRUE@GTK_VERSION = -DGTK3 atomes_locale = $(DESTDIR)$(localedir) @LINUX_FALSE@@WINDOWS_FALSE@AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" @LINUX_TRUE@@WINDOWS_FALSE@AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" # Use AM_CPPFLAGS to define additional preprocessor flags: @WINDOWS_TRUE@AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" @WINDOWS_FALSE@PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" -DPACKAGE_LIBEXEC=\""$(libexecdir)"\" -DPACKAGE_LOCALE=\""$(atomes_locale)"\" # Use AM_FFLAGS to define additional Fortran 90 flags: AM_FFLAGS = $(OpenMP_FLAGS) for = fortran/ gui = gui/ work = workspace/ proj = project/ read = project/readers/ calc = calc/ dlpoly = calc/dl_poly/ lammps = calc/lammps/ fields = calc/force_fields/ cpmd = calc/cpmd/ cp2k = calc/cp2k/ curve = curve/ ogl = opengl/ glwin = opengl/win/ gldraw = opengl/draw/ gledit = opengl/edit/ inc = -I$(gui) -I$(work) -I$(proj) -I$(read) -I$(calc) -I$(dlpoly) -I$(lammps) -I$(fields) -I$(cpmd) -I$(cp2k) -I$(curve) -I$(glwin) -I$(gledit) -I$(gldraw) -I$(ogl) -I. includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(OpenMP_FLAGS) $(LIBS_CFLAGS) -std=gnu99 atomes_fortran_modules = $(for)parameters.F90 \ $(for)mendeleiev.F90 atomes_fortran_files = $(for)allocbonds.F90 \ $(for)allochem.F90 \ $(for)allocmsd.F90 \ $(for)angles.F90 \ $(for)bonds.F90 \ $(for)c3d.F90 \ $(for)chains.F90 \ $(for)chains_ogl.F90 \ $(for)chemistry.F90 \ $(for)clean.F90 \ $(for)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)initrings.F90 \ $(for)lattice.F90 \ $(for)molecules.F90 \ $(for)msd.F90 \ $(for)pdb.F90 \ $(for)prepdata.F90 \ $(for)resrings.F90 \ $(for)rings-guttman.F90 \ $(for)rings-king.F90 \ $(for)rings_ogl.F90 \ $(for)rings-primitive.F90 \ $(for)sk.F90 \ $(for)skt.F90 \ $(for)spherical.F90 \ $(for)sq.F90 \ $(for)threads.F90 \ $(for)trj.F90 \ $(for)utils.F90 \ $(for)vas.F90 \ $(for)writedata.F90 \ $(for)xyz.F90 # Rules to ensure that Fortran modules are compiled before Fortran files atomes_fortran = $(atomes_fortran_modules) $(atomes_fortran_files) atomes_gui = $(gui)bdcall.c \ $(gui)calc_menu.c \ $(gui)callbacks.c \ $(gui)chainscall.c \ $(gui)edit_menu.c \ $(gui)grcall.c \ $(gui)gtk-misc.c \ $(gui)gui.c \ $(gui)initc.c \ $(gui)preferences.c \ $(gui)interface.c \ $(gui)main.c \ $(gui)msdcall.c \ $(gui)ringscall.c \ $(gui)spcall.c \ $(gui)sqcall.c \ $(gui)sktcall.c \ $(gui)tools.c \ $(gui)work_menu.c atomes_workspace = $(work)modelinfo.c \ $(work)workinfo.c \ $(work)workspace.c atomes_readers = $(read)read_c3d.c \ $(read)read_cif.c \ $(read)read_coord.c \ $(read)read_hist.c \ $(read)read_isaacs.c \ $(read)read_npt.c \ $(read)read_pdb.c \ $(read)read_trj.c \ $(read)read_vas.c \ $(read)read_xyz.c atomes_project = $(atomes_readers) \ $(proj)close_p.c \ $(proj)debugio.c \ $(proj)init_p.c \ $(proj)open_p.c \ $(proj)project.c \ $(proj)read_bond.c \ $(proj)read_curve.c \ $(proj)read_field.c \ $(proj)read_mol.c \ $(proj)read_opengl.c \ $(proj)read_qm.c \ $(proj)save_bond.c \ $(proj)save_curve.c \ $(proj)save_field.c \ $(proj)save_mol.c \ $(proj)save_opengl.c \ $(proj)save_p.c \ $(proj)save_qm.c \ $(proj)update_p.c atomes_cp2k = $(cp2k)cp2k_basis.c \ $(cp2k)cp2k_files.c \ $(cp2k)cp2k_gth-basis.c \ $(cp2k)cp2k_init.c \ $(cp2k)cp2k_mol.c \ $(cp2k)cp2k_molopt-basis.c \ $(cp2k)cp2k_pot.c \ $(cp2k)cp2k_print.c atomes_cpmd = $(cpmd)cpmd_atoms.c \ $(cpmd)cpmd_init.c \ $(cpmd)cpmd_nose.c \ $(cpmd)cpmd_print.c \ $(cpmd)cpmd_restart.c atomes_dlpoly = $(dlpoly)dlp_active.c \ $(dlpoly)dlp_atom.c \ $(dlpoly)dlp_comp.c \ $(dlpoly)dlp_control.c \ $(dlpoly)dlp_copy.c \ $(dlpoly)dlp_edit.c \ $(dlpoly)dlp_ff_match.c \ $(dlpoly)dlp_field.c \ $(dlpoly)dlp_init.c \ $(dlpoly)dlp_mol.c \ $(dlpoly)dlp_print.c \ $(dlpoly)dlp_viz.c atomes_lammps = $(lammps)la_print.c atomes_calc = $(calc)calc.c $(atomes_cp2k) $(atomes_cpmd) $(atomes_dlpoly) $(atomes_lammps) $(fields)force_fields.c atomes_curve = $(curve)cedit.c \ $(curve)curve.c \ $(curve)cwidget.c \ $(curve)datab.c \ $(curve)draw.c \ $(curve)frame.c \ $(curve)glyph.c \ $(curve)labels.c \ $(curve)legend.c \ $(curve)m_curve.c \ $(curve)show.c \ $(curve)tab-1.c \ $(curve)tab-2.c \ $(curve)tab-3.c \ $(curve)tab-4.c \ $(curve)title.c \ $(curve)w_curve.c \ $(curve)w_data.c \ $(curve)w_img.c \ $(curve)xaxis.c \ $(curve)yaxis.c atomes_glwin = $(glwin)color_box.c \ $(glwin)glwindow.c \ $(glwin)initchain.c \ $(glwin)initcoord.c \ $(glwin)initmol.c \ $(glwin)initring.c \ $(glwin)m_anim.c \ $(glwin)m_atoms.c \ $(glwin)m_axis.c \ $(glwin)m_back.c \ $(glwin)m_bonds.c \ $(glwin)m_box.c \ $(glwin)m_clones.c \ $(glwin)m_coord.c \ $(glwin)m_edit.c \ $(glwin)menu_bar.c \ $(glwin)m_map.c \ $(glwin)m_poly.c \ $(glwin)m_proj.c \ $(glwin)m_quality.c \ $(glwin)m_render.c \ $(glwin)m_rep.c \ $(glwin)m_style.c \ $(glwin)m_tools.c \ $(glwin)popup.c \ $(glwin)w_advance.c \ $(glwin)w_atoms.c \ $(glwin)w_axis.c \ $(glwin)w_bonds.c \ $(glwin)w_box.c \ $(glwin)w_chains.c \ $(glwin)w_colors.c \ $(glwin)w_coord.c \ $(glwin)w_cutoffs.c \ $(glwin)w_encode.c \ $(glwin)w_labels.c \ $(glwin)w_library.c \ $(glwin)w_measures.c \ $(glwin)w_periodic.c \ $(glwin)w_record.c \ $(glwin)w_rings.c \ $(glwin)w_search.c \ $(glwin)w_sequencer.c \ $(glwin)w_spiner.c \ $(glwin)w_volumes.c atomes_gldraw = $(gldraw)d_atoms.c \ $(gldraw)d_axis.c \ $(gldraw)d_bonds.c \ $(gldraw)d_box.c \ $(gldraw)d_label.c \ $(gldraw)d_measures.c \ $(gldraw)d_poly.c \ $(gldraw)d_rings.c \ $(gldraw)d_selection.c \ $(gldraw)d_background.c \ $(gldraw)image.c \ $(gldraw)movie.c \ $(gldraw)ogl_text.c atomes_gledit = $(gledit)atom_action.c \ $(gledit)atom_coord.c \ $(gledit)atom_edit.c \ $(gledit)atom_geo.c \ $(gledit)atom_insert.c \ $(gledit)atom_move.c \ $(gledit)atom_object.c \ $(gledit)atom_remove.c \ $(gledit)atom_search.c \ $(gledit)atom_species.c \ $(gledit)cbuild_action.c \ $(gledit)cbuild_edit.c \ $(gledit)cbuild_info.c \ $(gledit)cbuild_sg.c \ $(gledit)cell_cut.c \ $(gledit)cell_density.c \ $(gledit)cell_edit.c \ $(gledit)cell_extra.c \ $(gledit)cell_pixel.c \ $(gledit)cell_shift.c \ $(gledit)cell_super.c atomes_opengl = $(atomes_glwin) \ $(atomes_gldraw) \ $(atomes_gledit) \ $(ogl)arcball.c \ $(ogl)glview.c \ $(ogl)ogl_draw.c \ $(ogl)ogl_shaders.c \ $(ogl)ogl_shading.c \ $(ogl)ogl_utils.c \ $(ogl)selection.c atomes_includes = config.h \ version.h \ global.h \ bind.h \ affero.h \ $(gui)callbacks.h \ $(gui)gui.h \ $(gui)interface.h \ $(gui)xmlrw.h \ $(gui)preferences.h \ $(work)workspace.h \ $(proj)project.h \ $(read)readers.h \ $(calc)calc.h \ $(cpmd)cpmd.h \ $(cp2k)cp2k.h \ $(dl_poly)dlp_field.h \ $(field)force_fields.h \ $(curve)cedit.h \ $(curve)curve.h \ $(curve)datab.h \ $(glwin)color_box.h \ $(glwin)glwindow.h \ $(glwin)initcoord.h \ $(glwin)submenus.h \ $(glraw)movie.h \ $(gledit)atom_edit.h \ $(gledit)cbuild_edit.h \ $(gledit)cell_edit.h \ $(ogl)glview.h \ $(ogl)glwin.h \ $(ogl)math_3d.h \ $(ogl)ogl_shading.h # List the files required to build the program atomes_SOURCES = \ $(atomes_fortran) \ $(atomes_includes) \ global.c \ $(atomes_gui) \ $(atomes_workspace) \ $(atomes_project) \ $(atomes_calc) \ $(atomes_curve) \ $(atomes_opengl) all: all-recursive .SUFFIXES: .SUFFIXES: .F90 .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && $(am__rm_f) $$files clean-binPROGRAMS: -$(am__rm_f) $(bin_PROGRAMS) atomes$(EXEEXT): $(atomes_OBJECTS) $(atomes_DEPENDENCIES) $(EXTRA_atomes_DEPENDENCIES) @rm -f atomes$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(atomes_OBJECTS) $(atomes_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(calc)calc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_files.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_pot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_nose.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_restart.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)cedit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)cwidget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)datab.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)draw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)frame.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)glyph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)labels.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)legend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)m_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)show.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-4.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)title.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_img.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)xaxis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)yaxis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_active.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_atom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_comp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_control.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_copy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_viz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(fields)force_fields.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_background.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_label.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_measures.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_poly.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_rings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_selection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)image.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)movie.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)ogl_text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_geo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_insert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_move.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_object.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_remove.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_search.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_species.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_sg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_cut.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_density.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_extra.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_pixel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_shift.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_super.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)color_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)glwindow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initchain.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initcoord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initmol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initring.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_anim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_back.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_clones.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_poly.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_proj.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_quality.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_render.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_rep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_style.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)menu_bar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_advance.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_chains.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_colors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_cutoffs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_encode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_labels.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_measures.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_periodic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_record.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_rings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_search.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_sequencer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_spiner.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_volumes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)bdcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)calc_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)callbacks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)chainscall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)edit_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)grcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)gtk-misc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)gui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)initc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)msdcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)preferences.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)ringscall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)sktcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)spcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)sqcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)work_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(lammps)la_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)arcball.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)glview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_draw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_shaders.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_shading.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)selection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)close_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)debugio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)init_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)open_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)project.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_bond.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_opengl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_qm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_bond.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_opengl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_qm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)update_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_c3d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_cif.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_hist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_isaacs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_npt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_pdb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_trj.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_vas.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_xyz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)modelinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)workinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)workspace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/global.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @: >>$@ am--depfiles: $(am__depfiles_remade) .F90.o: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $< .F90.obj: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/$(calc)calc.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_files.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_init.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_mol.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_pot.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_init.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_nose.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_restart.Po -rm -f ./$(DEPDIR)/$(curve)cedit.Po -rm -f ./$(DEPDIR)/$(curve)curve.Po -rm -f ./$(DEPDIR)/$(curve)cwidget.Po -rm -f ./$(DEPDIR)/$(curve)datab.Po -rm -f ./$(DEPDIR)/$(curve)draw.Po -rm -f ./$(DEPDIR)/$(curve)frame.Po -rm -f ./$(DEPDIR)/$(curve)glyph.Po -rm -f ./$(DEPDIR)/$(curve)labels.Po -rm -f ./$(DEPDIR)/$(curve)legend.Po -rm -f ./$(DEPDIR)/$(curve)m_curve.Po -rm -f ./$(DEPDIR)/$(curve)show.Po -rm -f ./$(DEPDIR)/$(curve)tab-1.Po -rm -f ./$(DEPDIR)/$(curve)tab-2.Po -rm -f ./$(DEPDIR)/$(curve)tab-3.Po -rm -f ./$(DEPDIR)/$(curve)tab-4.Po -rm -f ./$(DEPDIR)/$(curve)title.Po -rm -f ./$(DEPDIR)/$(curve)w_curve.Po -rm -f ./$(DEPDIR)/$(curve)w_data.Po -rm -f ./$(DEPDIR)/$(curve)w_img.Po -rm -f ./$(DEPDIR)/$(curve)xaxis.Po -rm -f ./$(DEPDIR)/$(curve)yaxis.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_active.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_atom.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_comp.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_control.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_copy.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_edit.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_field.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_init.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_mol.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_print.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_viz.Po -rm -f ./$(DEPDIR)/$(fields)force_fields.Po -rm -f ./$(DEPDIR)/$(gldraw)d_atoms.Po -rm -f ./$(DEPDIR)/$(gldraw)d_axis.Po -rm -f ./$(DEPDIR)/$(gldraw)d_background.Po -rm -f ./$(DEPDIR)/$(gldraw)d_bonds.Po -rm -f ./$(DEPDIR)/$(gldraw)d_box.Po -rm -f ./$(DEPDIR)/$(gldraw)d_label.Po -rm -f ./$(DEPDIR)/$(gldraw)d_measures.Po -rm -f ./$(DEPDIR)/$(gldraw)d_poly.Po -rm -f ./$(DEPDIR)/$(gldraw)d_rings.Po -rm -f ./$(DEPDIR)/$(gldraw)d_selection.Po -rm -f ./$(DEPDIR)/$(gldraw)image.Po -rm -f ./$(DEPDIR)/$(gldraw)movie.Po -rm -f ./$(DEPDIR)/$(gldraw)ogl_text.Po -rm -f ./$(DEPDIR)/$(gledit)atom_action.Po -rm -f ./$(DEPDIR)/$(gledit)atom_coord.Po -rm -f ./$(DEPDIR)/$(gledit)atom_edit.Po -rm -f ./$(DEPDIR)/$(gledit)atom_geo.Po -rm -f ./$(DEPDIR)/$(gledit)atom_insert.Po -rm -f ./$(DEPDIR)/$(gledit)atom_move.Po -rm -f ./$(DEPDIR)/$(gledit)atom_object.Po -rm -f ./$(DEPDIR)/$(gledit)atom_remove.Po -rm -f ./$(DEPDIR)/$(gledit)atom_search.Po -rm -f ./$(DEPDIR)/$(gledit)atom_species.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_action.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_info.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_sg.Po -rm -f ./$(DEPDIR)/$(gledit)cell_cut.Po -rm -f ./$(DEPDIR)/$(gledit)cell_density.Po -rm -f ./$(DEPDIR)/$(gledit)cell_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cell_extra.Po -rm -f ./$(DEPDIR)/$(gledit)cell_pixel.Po -rm -f ./$(DEPDIR)/$(gledit)cell_shift.Po -rm -f ./$(DEPDIR)/$(gledit)cell_super.Po -rm -f ./$(DEPDIR)/$(glwin)color_box.Po -rm -f ./$(DEPDIR)/$(glwin)glwindow.Po -rm -f ./$(DEPDIR)/$(glwin)initchain.Po -rm -f ./$(DEPDIR)/$(glwin)initcoord.Po -rm -f ./$(DEPDIR)/$(glwin)initmol.Po -rm -f ./$(DEPDIR)/$(glwin)initring.Po -rm -f ./$(DEPDIR)/$(glwin)m_anim.Po -rm -f ./$(DEPDIR)/$(glwin)m_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)m_axis.Po -rm -f ./$(DEPDIR)/$(glwin)m_back.Po -rm -f ./$(DEPDIR)/$(glwin)m_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)m_box.Po -rm -f ./$(DEPDIR)/$(glwin)m_clones.Po -rm -f ./$(DEPDIR)/$(glwin)m_coord.Po -rm -f ./$(DEPDIR)/$(glwin)m_edit.Po -rm -f ./$(DEPDIR)/$(glwin)m_map.Po -rm -f ./$(DEPDIR)/$(glwin)m_poly.Po -rm -f ./$(DEPDIR)/$(glwin)m_proj.Po -rm -f ./$(DEPDIR)/$(glwin)m_quality.Po -rm -f ./$(DEPDIR)/$(glwin)m_render.Po -rm -f ./$(DEPDIR)/$(glwin)m_rep.Po -rm -f ./$(DEPDIR)/$(glwin)m_style.Po -rm -f ./$(DEPDIR)/$(glwin)m_tools.Po -rm -f ./$(DEPDIR)/$(glwin)menu_bar.Po -rm -f ./$(DEPDIR)/$(glwin)popup.Po -rm -f ./$(DEPDIR)/$(glwin)w_advance.Po -rm -f ./$(DEPDIR)/$(glwin)w_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)w_axis.Po -rm -f ./$(DEPDIR)/$(glwin)w_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)w_box.Po -rm -f ./$(DEPDIR)/$(glwin)w_chains.Po -rm -f ./$(DEPDIR)/$(glwin)w_colors.Po -rm -f ./$(DEPDIR)/$(glwin)w_coord.Po -rm -f ./$(DEPDIR)/$(glwin)w_cutoffs.Po -rm -f ./$(DEPDIR)/$(glwin)w_encode.Po -rm -f ./$(DEPDIR)/$(glwin)w_labels.Po -rm -f ./$(DEPDIR)/$(glwin)w_library.Po -rm -f ./$(DEPDIR)/$(glwin)w_measures.Po -rm -f ./$(DEPDIR)/$(glwin)w_periodic.Po -rm -f ./$(DEPDIR)/$(glwin)w_record.Po -rm -f ./$(DEPDIR)/$(glwin)w_rings.Po -rm -f ./$(DEPDIR)/$(glwin)w_search.Po -rm -f ./$(DEPDIR)/$(glwin)w_sequencer.Po -rm -f ./$(DEPDIR)/$(glwin)w_spiner.Po -rm -f ./$(DEPDIR)/$(glwin)w_volumes.Po -rm -f ./$(DEPDIR)/$(gui)bdcall.Po -rm -f ./$(DEPDIR)/$(gui)calc_menu.Po -rm -f ./$(DEPDIR)/$(gui)callbacks.Po -rm -f ./$(DEPDIR)/$(gui)chainscall.Po -rm -f ./$(DEPDIR)/$(gui)edit_menu.Po -rm -f ./$(DEPDIR)/$(gui)grcall.Po -rm -f ./$(DEPDIR)/$(gui)gtk-misc.Po -rm -f ./$(DEPDIR)/$(gui)gui.Po -rm -f ./$(DEPDIR)/$(gui)initc.Po -rm -f ./$(DEPDIR)/$(gui)interface.Po -rm -f ./$(DEPDIR)/$(gui)main.Po -rm -f ./$(DEPDIR)/$(gui)msdcall.Po -rm -f ./$(DEPDIR)/$(gui)preferences.Po -rm -f ./$(DEPDIR)/$(gui)ringscall.Po -rm -f ./$(DEPDIR)/$(gui)sktcall.Po -rm -f ./$(DEPDIR)/$(gui)spcall.Po -rm -f ./$(DEPDIR)/$(gui)sqcall.Po -rm -f ./$(DEPDIR)/$(gui)tools.Po -rm -f ./$(DEPDIR)/$(gui)work_menu.Po -rm -f ./$(DEPDIR)/$(lammps)la_print.Po -rm -f ./$(DEPDIR)/$(ogl)arcball.Po -rm -f ./$(DEPDIR)/$(ogl)glview.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_draw.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shaders.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shading.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_utils.Po -rm -f ./$(DEPDIR)/$(ogl)selection.Po -rm -f ./$(DEPDIR)/$(proj)close_p.Po -rm -f ./$(DEPDIR)/$(proj)debugio.Po -rm -f ./$(DEPDIR)/$(proj)init_p.Po -rm -f ./$(DEPDIR)/$(proj)open_p.Po -rm -f ./$(DEPDIR)/$(proj)project.Po -rm -f ./$(DEPDIR)/$(proj)read_bond.Po -rm -f ./$(DEPDIR)/$(proj)read_curve.Po -rm -f ./$(DEPDIR)/$(proj)read_field.Po -rm -f ./$(DEPDIR)/$(proj)read_mol.Po -rm -f ./$(DEPDIR)/$(proj)read_opengl.Po -rm -f ./$(DEPDIR)/$(proj)read_qm.Po -rm -f ./$(DEPDIR)/$(proj)save_bond.Po -rm -f ./$(DEPDIR)/$(proj)save_curve.Po -rm -f ./$(DEPDIR)/$(proj)save_field.Po -rm -f ./$(DEPDIR)/$(proj)save_mol.Po -rm -f ./$(DEPDIR)/$(proj)save_opengl.Po -rm -f ./$(DEPDIR)/$(proj)save_p.Po -rm -f ./$(DEPDIR)/$(proj)save_qm.Po -rm -f ./$(DEPDIR)/$(proj)update_p.Po -rm -f ./$(DEPDIR)/$(read)read_c3d.Po -rm -f ./$(DEPDIR)/$(read)read_cif.Po -rm -f ./$(DEPDIR)/$(read)read_coord.Po -rm -f ./$(DEPDIR)/$(read)read_hist.Po -rm -f ./$(DEPDIR)/$(read)read_isaacs.Po -rm -f ./$(DEPDIR)/$(read)read_npt.Po -rm -f ./$(DEPDIR)/$(read)read_pdb.Po -rm -f ./$(DEPDIR)/$(read)read_trj.Po -rm -f ./$(DEPDIR)/$(read)read_vas.Po -rm -f ./$(DEPDIR)/$(read)read_xyz.Po -rm -f ./$(DEPDIR)/$(work)modelinfo.Po -rm -f ./$(DEPDIR)/$(work)workinfo.Po -rm -f ./$(DEPDIR)/$(work)workspace.Po -rm -f ./$(DEPDIR)/global.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/$(calc)calc.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_files.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_init.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_mol.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_pot.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_init.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_nose.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_restart.Po -rm -f ./$(DEPDIR)/$(curve)cedit.Po -rm -f ./$(DEPDIR)/$(curve)curve.Po -rm -f ./$(DEPDIR)/$(curve)cwidget.Po -rm -f ./$(DEPDIR)/$(curve)datab.Po -rm -f ./$(DEPDIR)/$(curve)draw.Po -rm -f ./$(DEPDIR)/$(curve)frame.Po -rm -f ./$(DEPDIR)/$(curve)glyph.Po -rm -f ./$(DEPDIR)/$(curve)labels.Po -rm -f ./$(DEPDIR)/$(curve)legend.Po -rm -f ./$(DEPDIR)/$(curve)m_curve.Po -rm -f ./$(DEPDIR)/$(curve)show.Po -rm -f ./$(DEPDIR)/$(curve)tab-1.Po -rm -f ./$(DEPDIR)/$(curve)tab-2.Po -rm -f ./$(DEPDIR)/$(curve)tab-3.Po -rm -f ./$(DEPDIR)/$(curve)tab-4.Po -rm -f ./$(DEPDIR)/$(curve)title.Po -rm -f ./$(DEPDIR)/$(curve)w_curve.Po -rm -f ./$(DEPDIR)/$(curve)w_data.Po -rm -f ./$(DEPDIR)/$(curve)w_img.Po -rm -f ./$(DEPDIR)/$(curve)xaxis.Po -rm -f ./$(DEPDIR)/$(curve)yaxis.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_active.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_atom.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_comp.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_control.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_copy.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_edit.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_field.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_init.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_mol.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_print.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_viz.Po -rm -f ./$(DEPDIR)/$(fields)force_fields.Po -rm -f ./$(DEPDIR)/$(gldraw)d_atoms.Po -rm -f ./$(DEPDIR)/$(gldraw)d_axis.Po -rm -f ./$(DEPDIR)/$(gldraw)d_background.Po -rm -f ./$(DEPDIR)/$(gldraw)d_bonds.Po -rm -f ./$(DEPDIR)/$(gldraw)d_box.Po -rm -f ./$(DEPDIR)/$(gldraw)d_label.Po -rm -f ./$(DEPDIR)/$(gldraw)d_measures.Po -rm -f ./$(DEPDIR)/$(gldraw)d_poly.Po -rm -f ./$(DEPDIR)/$(gldraw)d_rings.Po -rm -f ./$(DEPDIR)/$(gldraw)d_selection.Po -rm -f ./$(DEPDIR)/$(gldraw)image.Po -rm -f ./$(DEPDIR)/$(gldraw)movie.Po -rm -f ./$(DEPDIR)/$(gldraw)ogl_text.Po -rm -f ./$(DEPDIR)/$(gledit)atom_action.Po -rm -f ./$(DEPDIR)/$(gledit)atom_coord.Po -rm -f ./$(DEPDIR)/$(gledit)atom_edit.Po -rm -f ./$(DEPDIR)/$(gledit)atom_geo.Po -rm -f ./$(DEPDIR)/$(gledit)atom_insert.Po -rm -f ./$(DEPDIR)/$(gledit)atom_move.Po -rm -f ./$(DEPDIR)/$(gledit)atom_object.Po -rm -f ./$(DEPDIR)/$(gledit)atom_remove.Po -rm -f ./$(DEPDIR)/$(gledit)atom_search.Po -rm -f ./$(DEPDIR)/$(gledit)atom_species.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_action.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_info.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_sg.Po -rm -f ./$(DEPDIR)/$(gledit)cell_cut.Po -rm -f ./$(DEPDIR)/$(gledit)cell_density.Po -rm -f ./$(DEPDIR)/$(gledit)cell_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cell_extra.Po -rm -f ./$(DEPDIR)/$(gledit)cell_pixel.Po -rm -f ./$(DEPDIR)/$(gledit)cell_shift.Po -rm -f ./$(DEPDIR)/$(gledit)cell_super.Po -rm -f ./$(DEPDIR)/$(glwin)color_box.Po -rm -f ./$(DEPDIR)/$(glwin)glwindow.Po -rm -f ./$(DEPDIR)/$(glwin)initchain.Po -rm -f ./$(DEPDIR)/$(glwin)initcoord.Po -rm -f ./$(DEPDIR)/$(glwin)initmol.Po -rm -f ./$(DEPDIR)/$(glwin)initring.Po -rm -f ./$(DEPDIR)/$(glwin)m_anim.Po -rm -f ./$(DEPDIR)/$(glwin)m_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)m_axis.Po -rm -f ./$(DEPDIR)/$(glwin)m_back.Po -rm -f ./$(DEPDIR)/$(glwin)m_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)m_box.Po -rm -f ./$(DEPDIR)/$(glwin)m_clones.Po -rm -f ./$(DEPDIR)/$(glwin)m_coord.Po -rm -f ./$(DEPDIR)/$(glwin)m_edit.Po -rm -f ./$(DEPDIR)/$(glwin)m_map.Po -rm -f ./$(DEPDIR)/$(glwin)m_poly.Po -rm -f ./$(DEPDIR)/$(glwin)m_proj.Po -rm -f ./$(DEPDIR)/$(glwin)m_quality.Po -rm -f ./$(DEPDIR)/$(glwin)m_render.Po -rm -f ./$(DEPDIR)/$(glwin)m_rep.Po -rm -f ./$(DEPDIR)/$(glwin)m_style.Po -rm -f ./$(DEPDIR)/$(glwin)m_tools.Po -rm -f ./$(DEPDIR)/$(glwin)menu_bar.Po -rm -f ./$(DEPDIR)/$(glwin)popup.Po -rm -f ./$(DEPDIR)/$(glwin)w_advance.Po -rm -f ./$(DEPDIR)/$(glwin)w_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)w_axis.Po -rm -f ./$(DEPDIR)/$(glwin)w_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)w_box.Po -rm -f ./$(DEPDIR)/$(glwin)w_chains.Po -rm -f ./$(DEPDIR)/$(glwin)w_colors.Po -rm -f ./$(DEPDIR)/$(glwin)w_coord.Po -rm -f ./$(DEPDIR)/$(glwin)w_cutoffs.Po -rm -f ./$(DEPDIR)/$(glwin)w_encode.Po -rm -f ./$(DEPDIR)/$(glwin)w_labels.Po -rm -f ./$(DEPDIR)/$(glwin)w_library.Po -rm -f ./$(DEPDIR)/$(glwin)w_measures.Po -rm -f ./$(DEPDIR)/$(glwin)w_periodic.Po -rm -f ./$(DEPDIR)/$(glwin)w_record.Po -rm -f ./$(DEPDIR)/$(glwin)w_rings.Po -rm -f ./$(DEPDIR)/$(glwin)w_search.Po -rm -f ./$(DEPDIR)/$(glwin)w_sequencer.Po -rm -f ./$(DEPDIR)/$(glwin)w_spiner.Po -rm -f ./$(DEPDIR)/$(glwin)w_volumes.Po -rm -f ./$(DEPDIR)/$(gui)bdcall.Po -rm -f ./$(DEPDIR)/$(gui)calc_menu.Po -rm -f ./$(DEPDIR)/$(gui)callbacks.Po -rm -f ./$(DEPDIR)/$(gui)chainscall.Po -rm -f ./$(DEPDIR)/$(gui)edit_menu.Po -rm -f ./$(DEPDIR)/$(gui)grcall.Po -rm -f ./$(DEPDIR)/$(gui)gtk-misc.Po -rm -f ./$(DEPDIR)/$(gui)gui.Po -rm -f ./$(DEPDIR)/$(gui)initc.Po -rm -f ./$(DEPDIR)/$(gui)interface.Po -rm -f ./$(DEPDIR)/$(gui)main.Po -rm -f ./$(DEPDIR)/$(gui)msdcall.Po -rm -f ./$(DEPDIR)/$(gui)preferences.Po -rm -f ./$(DEPDIR)/$(gui)ringscall.Po -rm -f ./$(DEPDIR)/$(gui)sktcall.Po -rm -f ./$(DEPDIR)/$(gui)spcall.Po -rm -f ./$(DEPDIR)/$(gui)sqcall.Po -rm -f ./$(DEPDIR)/$(gui)tools.Po -rm -f ./$(DEPDIR)/$(gui)work_menu.Po -rm -f ./$(DEPDIR)/$(lammps)la_print.Po -rm -f ./$(DEPDIR)/$(ogl)arcball.Po -rm -f ./$(DEPDIR)/$(ogl)glview.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_draw.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shaders.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shading.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_utils.Po -rm -f ./$(DEPDIR)/$(ogl)selection.Po -rm -f ./$(DEPDIR)/$(proj)close_p.Po -rm -f ./$(DEPDIR)/$(proj)debugio.Po -rm -f ./$(DEPDIR)/$(proj)init_p.Po -rm -f ./$(DEPDIR)/$(proj)open_p.Po -rm -f ./$(DEPDIR)/$(proj)project.Po -rm -f ./$(DEPDIR)/$(proj)read_bond.Po -rm -f ./$(DEPDIR)/$(proj)read_curve.Po -rm -f ./$(DEPDIR)/$(proj)read_field.Po -rm -f ./$(DEPDIR)/$(proj)read_mol.Po -rm -f ./$(DEPDIR)/$(proj)read_opengl.Po -rm -f ./$(DEPDIR)/$(proj)read_qm.Po -rm -f ./$(DEPDIR)/$(proj)save_bond.Po -rm -f ./$(DEPDIR)/$(proj)save_curve.Po -rm -f ./$(DEPDIR)/$(proj)save_field.Po -rm -f ./$(DEPDIR)/$(proj)save_mol.Po -rm -f ./$(DEPDIR)/$(proj)save_opengl.Po -rm -f ./$(DEPDIR)/$(proj)save_p.Po -rm -f ./$(DEPDIR)/$(proj)save_qm.Po -rm -f ./$(DEPDIR)/$(proj)update_p.Po -rm -f ./$(DEPDIR)/$(read)read_c3d.Po -rm -f ./$(DEPDIR)/$(read)read_cif.Po -rm -f ./$(DEPDIR)/$(read)read_coord.Po -rm -f ./$(DEPDIR)/$(read)read_hist.Po -rm -f ./$(DEPDIR)/$(read)read_isaacs.Po -rm -f ./$(DEPDIR)/$(read)read_npt.Po -rm -f ./$(DEPDIR)/$(read)read_pdb.Po -rm -f ./$(DEPDIR)/$(read)read_trj.Po -rm -f ./$(DEPDIR)/$(read)read_vas.Po -rm -f ./$(DEPDIR)/$(read)read_xyz.Po -rm -f ./$(DEPDIR)/$(work)modelinfo.Po -rm -f ./$(DEPDIR)/$(work)workinfo.Po -rm -f ./$(DEPDIR)/$(work)workspace.Po -rm -f ./$(DEPDIR)/global.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-binPROGRAMS \ clean-generic cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile @WINDOWS_TRUE@win_atomes.o: ../misc/win/atomes.rc @WINDOWS_TRUE@ $(WINDRES) $< $@ $(patsubst %.F90,%.o,$(atomes_fortran_files)): $(patsubst %.F90,%.o,$(atomes_fortran_modules)) clean: -rm -f *.mod -rm -f */*.o -rm -f */*/*.o # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/src/calc/0000775000175000017500000000000015212624223014176 5ustar lerouxlerouxatomes_1.3.1/src/calc/force_fields/0000775000175000017500000000000015212624223016622 5ustar lerouxlerouxatomes_1.3.1/src/calc/force_fields/charmm36_prot.c0000664000175000017500000047415715212624223021474 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_prot.c * @short CHARMM-charmm36_prot force field, from 'charmm36_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm36_prot.c' * * Contains: * CHARMM-charmm36_prot force field, data from taken from: - the file: 'charmm36_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_prot_atoms[53][5] Bonds : charmm36_prot_bonds[132][5] Angles : charmm36_prot_angles[364][8] Dihedrals : charmm36_prot_dihedrals[705][8] Impropers : charmm36_prot_impropers[35][8] Non bonded : charmm36_prot_vdw[53][6] */ #include "global.h" int charmm36_prot_objects[14] = {53, 0, 0, 132, 0, 0, 364, 0, 705, 0 , 0, 35, 53, 0}; int charmm36_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_prot info */ char * charmm36_prot_atoms[53][5]= {{"H", "1.00800", "H", "polar H", "31"}, {"H", "1.00800", "HC", "N-ter H", "32"}, {"H", "1.00800", "HA", "nonpolar H", "33"}, {"H", "1.00800", "HP", "aromatic H", "34"}, {"H", "1.00800", "HB1", "backbone H", "35"}, {"H", "1.00800", "HB2", "aliphatic backbone H, to CT2", "36"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "37"}, {"H", "1.00800", "HR2", "(+) his HE1", "38"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "39"}, {"H", "1.00800", "HS", "thiol hydrogen", "40"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "41"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "42"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "46"}, {"C", "12.01100", "CA", "aromatic C", "47"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens, see retinol stream file for parameters", "48"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "49"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "50"}, {"C", "12.01100", "CT2A", "from CT2 (GLU, HSP chi1/chi2 fitting) 05282010, zhu", "51"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "52"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "53"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "54"}, {"C", "12.01100", "CPT", "trp C between rings", "55"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "56"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "57"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "58"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "59"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "60"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "61"}, {"C", "12.01100", "CS", "thiolate carbon", "62"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "63"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "64"}, {"C", "12.01100", "CAI", "aromatic C next to CPT in trp", "65"}, {"N", "14.00700", "N", "proline N", "66"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "67"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "68"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "69"}, {"N", "14.00700", "NH1", "peptide nitrogen", "70"}, {"N", "14.00700", "NH2", "amide nitrogen", "71"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "72"}, {"N", "14.00700", "NC2", "guanidinium nitrogen", "73"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "74"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "75"}, {"O", "15.99900", "O", "carbonyl oxygen", "76"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "77"}, {"O", "15.99900", "OC", "carboxylate oxygen", "78"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "79"}, {"O", "15.99940", "OS", "ester oxygen", "80"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_prot info V(R) = Kb x (R - R0)^2 */ char * charmm36_prot_bonds[132][5]= {{"NH2", "CT1", "240.000", "1.4550", " "}, {"CA", "CAI", "305.000", "1.3750", "from CA CA"}, {"CAI", "CAI", "305.000", "1.3750", "atm, methylindole, fit CCDSS"}, {"CPT", "CA", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CAI", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CPT", "360.000", "1.3850", "atm, methylindole, fit CCDSS"}, {"CY", "CA", "350.000", "1.3650", "trj, adm jr., 5/08/91, indole CCDB structure search"}, {"CY", "CAI", "350.000", "1.3650", "from CY CA"}, {"CY", "CPT", "350.000", "1.4300", "atm, methylindole, fit CDS data"}, {"CY", "CT3", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"CY", "CT2", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"HP", "CAI", "340.000", "1.0800", "from HP CA"}, {"HP", "CY", "350.000", "1.0800", "trp, adm jr., 12/30/91"}, {"NY", "CA", "270.000", "1.3700", "trp, adm jr., 12/30/91"}, {"NY", "CPT", "270.000", "1.3700", "atm, methylindole, from CCDS 1/17/04"}, {"NY", "H", "537.500", "0.9760", "atm, methylindole, 1/17/04"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA2", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB1", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "450.000", "1.3650", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT2", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT3", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", "acetaldehyde, benzaldehyde, 3ALP"}, {"O", "CD", "720.000", "1.2050", "acetaldehyde, benzaldehyde, 3ALP. from stream/toppar_all27_na_bkb_modifications.str"}, {"CT2A", "CT1", "222.500", "1.5380", "from CT2 CT1, Zhu"}, {"CT2", "CT2A", "222.500", "1.5300", "from CT2 CT2, Zhu"}, {"CT2A", "HA2", "309.000", "1.1110", "from HA2 CT2, Zhu"}, {"CT2A", "CPH1", "229.630", "1.5000", "from CT2 CPH1, Zhu"}, {"CT2A", "CC", "200.000", "1.5220", "RESI CYSM and PRES CYSD"}, {"CT1", "CS", "190.000", "1.5380", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_prot info V(S) = Kub x (S - S0)^2 */ char * charmm36_prot_angles[364][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"H", "NH2", "CT2", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2, Neutral Gly Nterminus"}, {"NH2", "CT1", "CT1", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB1", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"NH2", "CT2", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C, Neutral Gly Nterminus"}, {"CAI", "CAI", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CAI", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CPT", "CA", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CA", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CAI", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CY", "CA", "85.000", "106.40", "25.00", "2.26100", "atm, methylindole, 1/17/04"}, {"CPT", "NY", "CA", "85.000", "112.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CT2", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT2", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT3", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "85.000", "108.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CT2", "CT1", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"H", "NY", "CA", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CAI", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CPT", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"HA2", "CT2", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CAI", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CAI", "CA", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "trp, adm jr., 12/30/91"}, {"HP", "CAI", "CPT", "30.000", "122.00", "22.00", "2.14600", "from HP CA CPT"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "trp, adm jr., 12/30/91"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "CY", "85.000", "110.50", "25.00", "2.24000", "trp, adm jr., 12/30/91"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CPT", "95.000", "107.40", " ", " ", "atm, methylindole, 1/17/04"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2A", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2A", "CT2", "CD", "52.000", "108.0000", " ", " ", "for GLUP, ZHU"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA2", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA2", "CS", "HA2", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "HA3", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA1", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "HA1", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA2", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA2", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA2", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA2", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA2", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA2", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA2", "CT2", "CT1", "26.500", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA2", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "HA2", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA3", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA3", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA3", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA3", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA3", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA3", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA3", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "HA3", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB1", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB1", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB1", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB2", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB2", "CT2", "HB2", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB1", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA2", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "40.000", "120.00", "70.00", "2.31", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA2", "56.500", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT3", "HA3", "56.5000", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB1", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA2", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB2", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA3", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA1", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HB2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT2", "HA2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT3", "HA3", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB1", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "methylammonium"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "ethylammonium"}, {"NH3", "CT2", "HA2", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB2", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA3", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB1", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA2", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA1", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA2", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA3", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA1", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA2", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA3", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA2", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA3", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA2", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA3", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "diethyldisulfide, as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA2", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA3", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA2", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA3", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", "acetaldehyde, benzaldehyde, 3ALP, retinal"}, {"NH1", "CT1", "CT2A", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2"}, {"HB1", "CT1", "CT2A", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2"}, {"CT2A", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C"}, {"CT1", "CT2A", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT1"}, {"CT1", "CT2A", "CT2", "58.350", "113.5000", "11.16", "2.56100", "from CT2 CT2 CT1"}, {"HA2", "CT2A", "HA2", "35.500", "109.0000", "5.40", "1.80200", "from HA2 CT2 HA2"}, {"HA2", "CT2A", "CT2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT2 CC"}, {"CT1", "CT2A", "CPH1", "58.350", "113.0000", " ", " ", "from CT1 CT2 CPH1"}, {"HA2", "CT2A", "CPH1", "33.430", "109.5000", " ", " ", "from HA2 CT2 CPH1"}, {"CT2A", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "from CT2 CPH1 CPH1"}, {"CT2A", "CPH1", "NR3", "45.800", "122.0000", " ", " ", "from NR3 CPH1 CT2"}, {"CT1", "CT2A", "CC", "52.000", "108.0000", " ", " ", "from CT1 CT2 CC"}, {"HA2", "CT2A", "CC", "33.000", "109.5000", "30.00", "2.16300", "from HA2 CT2 CC"}, {"OC", "CC", "CT2A", "40.000", "118.0000", "50.00", "2.38800", "from OC CC CT2"}, {"NH3", "CT1", "CT2A", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2"}, {"CT2A", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD"}, {"NH2", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C , kevo"}, {"CS", "CT1", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT1 CC , kevo"}, {"CS", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD , kevo"}, {"HB1", "CT1", "CS", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2 , kevo"}, {"NH1", "CT1", "CS", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2 , kevo"}, {"NH3", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2 , kevo"}, {"SS", "CS", "CT1", "55.000", "118.0000", " ", " ", "from SS CS CT3 , kevo"}, {"HA2", "CS", "CT1", "34.600", "110.10", "22.53", "2.17900", "from HA2 CS CT3 to be consistent with SS CS CT1, kevo"}, {"OC", "CT2", "CT1", "65.000", "122.0000", " ", " ", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_prot_dihedrals[705][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "O", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "NH1", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT2", "C", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "HB1", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA, Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"CAI", "CA", "CA", "CAI", "3.1000", "2", "180.00", "from CA CA CA CA"}, {"CA", "CPT", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CAI", "CPT", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CA", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "NY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "NY", "CA", "6.5000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CT2", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CY", "CA", "NY", "CPT", "6.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CA", "CY", "0.0500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CA", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CAI", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CPT", "0.8500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CAI", "CA", "CA", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CA", "CAI", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CAI", "CPT", "3.0000", "2", "180.00", "from HP CA CA CPT"}, {"HP", "CAI", "CA", "HP", "2.4000", "2", "180.00", "from HP CA CA HP"}, {"HP", "CAI", "CPT", "CPT", "3.0000", "2", "180.00", "from HP CA CPT CPT"}, {"HP", "CAI", "CPT", "CY", "4.0000", "2", "180.00", "from HP CA CPT CY, r6r5"}, {"HP", "CA", "CY", "CPT", "2.8000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "NY", "CPT", "2.6000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CAI", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.6000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CPT", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CA", "CY", "CT3", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "CT2", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04, r6r5"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CPT", "CY", "6.5000", "2", "180.00", "JWK 05/14/91 fit to indole, r5 t1"}, {"CT3", "CT2", "CY", "CA", "0.3800", "2", "0.00", "trp, from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "atm 1/14/04 3-ethylindole"}, {"CT3", "CT2", "CY", "CPT", "0.3000", "3", "0.00", "atm 1/14/04 3-ethylindole"}, {"HA3", "CT3", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CE1", "CE1", "CT3", "HA3", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA2", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA3", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA1", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA1", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA2", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA2", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA3", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA3", "CT3", "CS", "HA2", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CS", "HA3", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA3", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB1", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA2", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA3", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA2", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA3", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "1.0000", "1", "0.00", "RB 1/07/11, based on graf et al Gly 3 N-ter J-couplings for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA3", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB1", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT3", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA2", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA3", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA3", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"NH1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "CT3", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"NH1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "OH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "OH1", "H", "0.1400", "3", "0.00", "From X CT2 OH1 X"}, {"CT1", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2", "S", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"CT2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "NC2", "C", "NC2", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HA2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"NC2", "C", "NC2", "HC", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HB1", "CT1", "CT2", "CC", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CY", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CC", "OC", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2", "CPH1", "0.2000", "3", "0.00", " "}, {"CT1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT1", "CT2", "0.2000", "3", "0.00", " "}, {"CT1", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", " "}, {"HA1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", " "}, {"HA3", "CT3", "CT1", "CT2", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", " "}, {"CT1", "CT2", "CT1", "HA1", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CT1", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", " "}, {"CT2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", " "}, {"HA2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", " "}, {"HA2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CA", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CA", "CA", "0.0000", "6", "0.00", " "}, {"HB1", "CT1", "CT1", "OH1", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "OH1", "H", "0.1400", "3", "0.00", " "}, {"OH1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT2", "CT2", "CC", "O", "0.0500", "6", "180.00", " "}, {"CT2", "CT2", "CC", "NH2", "0.0500", "6", "180.00", " "}, {"CT2", "CT2", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", " "}, {"CT1", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "C", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "CC", "0.1900", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "CPH1", "0.2000", "3", "0.00", " "}, {"C", "NH1", "CT1", "CT2A", "1.8000", "1", "0.00", " "}, {"H", "NH1", "CT1", "CT2A", "0.0000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "O", "1.4000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "N", "0.0000", "1", "0.00", "Glup"}, {"CT1", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", " "}, {"CT2A", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", " "}, {"CT2A", "CPH1", "CPH1", "NR3", "2.5000", "2", "180.00", " "}, {"CT2A", "CPH1", "NR3", "H", "3.0000", "2", "180.00", " "}, {"CT2A", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", " "}, {"HA2", "CT2A", "CPH1", "CPH1", "0.0000", "3", "0.00", " "}, {"HA2", "CT2A", "CPH1", "NR3", "0.1900", "3", "0.00", "Fit dihedrals"}, {"C", "CT1", "CT2", "CT2", "0.3500", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "0.4200", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "1.9100", "3", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.8800", "1", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "1.9000", "3", "0.00", " "}, {"CC", "CT2", "CT2", "CT1", "1.8400", "1", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.8400", "2", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.6300", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.0100", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.1500", "3", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.1400", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "S", "0.5400", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.6900", "3", "0.00", "Fitted Asn"}, {"C", "CT1", "CT2", "CC", "1.4100", "1", "180.00", " "}, {"C", "CT1", "CT2", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.2800", "1", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.5000", "2", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6600", "2", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.4200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.1500", "2", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.9500", "3", "180.00", "Fitted Asp"}, {"C", "CT1", "CT2A", "CC", "1.6100", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.6800", "1", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.1000", "2", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.8400", "1", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.9800", "2", "180.00", " "}, {"CT1", "CT2A", "CC", "OC", "1.4600", "3", "0.00", "Fitted Cys"}, {"CT1", "CT2", "S", "HS", "0.2000", "1", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.6500", "2", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.2200", "3", "0.00", " "}, {"C", "CT1", "CT2", "S", "0.2400", "1", "180.00", " "}, {"C", "CT1", "CT2", "S", "0.7500", "2", "180.00", " "}, {"C", "CT1", "CT2", "S", "1.3500", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "0.3400", "1", "0.00", " "}, {"NH1", "CT1", "CT2", "S", "0.5000", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "1.4300", "3", "0.00", "Fitted Glu"}, {"CC", "CT2", "CT2A", "CT1", "0.0000", "1", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.3800", "2", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.5900", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.1100", "1", "0.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.9800", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CC", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3000", "1", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3500", "2", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "1.7600", "3", "0.00", "Group-fitted for Hsd/Hse"}, {"CPH1", "CPH1", "CT2", "CT1", "1.7400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.1500", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.7700", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "1.4900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.0900", "2", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.7900", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "1.0900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.0900", "2", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.6700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.1800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.6400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.8700", "3", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "1", "0.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.9000", "3", "0.00", "Fitted Hsp"}, {"CPH1", "CPH1", "CT2A", "CT1", "2.0400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.4400", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.1300", "3", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.5300", "1", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.4200", "2", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.3000", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.7500", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "0.1300", "2", "0.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.8600", "3", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "1.0900", "1", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "0.2200", "2", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "2.3200", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "CT2", "CT3", "0.3800", "1", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.1300", "2", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.2900", "3", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.1000", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.5200", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.2900", "3", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.1200", "1", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.3600", "2", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.4100", "3", "0.00", "Fitted Leu"}, {"CT1", "CT2", "CT1", "CT3", "0.0500", "1", "0.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.1000", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.0100", "3", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.3200", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.6100", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4800", "1", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4200", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.6500", "3", "0.00", "Group-fitted for Phe/Tyr"}, {"CA", "CA", "CT2", "CT1", "1.0700", "1", "0.00", " "}, {"CA", "CA", "CT2", "CT1", "0.2400", "2", "180.00", " "}, {"CA", "CA", "CT2", "CT1", "0.1700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.2800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CA", "0.9400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.5700", "3", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.5200", "1", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.6200", "2", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "1.5800", "3", "0.00", "Fitted Ser"}, {"CT1", "CT2", "OH1", "H", "0.0200", "1", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.5600", "2", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.4900", "3", "0.00", " "}, {"C", "CT1", "CT2", "OH1", "0.6500", "1", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "0.2500", "2", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "1.1700", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1800", "1", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "1.4600", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "OH1", "H", "0.1800", "1", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.0600", "2", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.2500", "3", "0.00", " "}, {"C", "CT1", "CT1", "OH1", "0.7900", "1", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.3900", "2", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.9900", "3", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.0900", "1", "0.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1700", "3", "0.00", "Fitted Trp"}, {"CA", "CY", "CT2", "CT1", "0.0300", "1", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.5500", "2", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.3600", "1", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.0500", "2", "0.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.1900", "3", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.0900", "1", "180.00", " "}, {"C", "CT1", "CT2", "CY", "0.5000", "2", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.1700", "3", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.2900", "1", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.6600", "2", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "1.1700", "3", "0.00", "Fitted Val"}, {"C", "CT1", "CT1", "CT3", "0.1400", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.2600", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.3300", "3", "180.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.1800", "1", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.0600", "2", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.5900", "3", "0.00", "CT2->CT2A, jshim"}, {"H", "NH1", "CT2A", "CC", "0.0000", "1", "0.00", " "}, {"X", "CT2A", "CC", "X", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH3", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"CC", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "specific terms"}, {"CPH1", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "NH3", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"CT2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", "RESI CYSM and PRES CYSD"}, {"H", "NH2", "CT1", "CS", "0.1100", "3", "0.00", "from H NH2 CT1 CT2 or H NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C or CT2A CT1 NH1 C , kevo"}, {"H", "NH1", "CT1", "CS", "0.0000", "1", "0.00", "from H NH1 CT1 CT2 or H NH1 CT1 CT2 , kevo"}, {"N", "C", "CT1", "CS", "0.0000", "1", "0.00", "from N C CT1 CT2 or N C CT1 CT2 , kevo"}, {"NH1", "C", "CT1", "CS", "0.0000", "1", "0.00", "from NH1 C CT1 CT2 or NH1 C CT1 CT2 , kevo"}, {"O", "C", "CT1", "CS", "1.4000", "1", "0.00", "from O C CT1 CT2 or O C CT1 CT2 , kevo"}, {"HA2", "CS", "CT1", "C", "0.2000", "3", "0.00", "from HA2 CT2 CT1 C or HA2 CT2A CT1 C , kevo"}, {"NH1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from NH1 CT1 CT2 HA2 or NH1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from HB1 CT1 CT2 HA2 or HB1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from HB1 CT1 CT2 S or HB1 CT1 CT2A S , kevo"}, {"C", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"C", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"HB1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_prot_impropers[35][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "45.0000", "0", "0.0000", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"C", "HC", "HC", "NC2", "0.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NC2", "X", "X", "HC", "-2.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA1", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_prot_vdw[53][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CPT", "-0.099000", "1.860000", " ", " ", " "}, {"CY", "-0.073000", "1.990000", " ", " ", " "}, {"CAI", "-0.073000", "1.990000", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1", "-0.0320", "2.000", "-0.01", "1.9", " "}, {"CT2", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT2A", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HB1", "-0.022000", "1.320000", " ", " ", " "}, {"HB2", "-0.028000", "1.340000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HA1", "-0.045", "1.3400", " ", " ", " "}, {"HA2", "-0.034", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/charmm36_lipid.c0000664000175000017500000013506315212624223021577 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_lipid.c * @short CHARMM-charmm36_lipid force field, from 'charmm36_lipid' * @author Sébastien Le Roux */ /* * This file: 'charmm36_lipid.c' * * Contains: * CHARMM-charmm36_lipid force field, data from taken from: - the file: 'charmm36_lipid' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_lipid_atoms[29][5] Bonds : charmm36_lipid_bonds[50][5] Angles : charmm36_lipid_angles[131][8] Dihedrals : charmm36_lipid_dihedrals[180][8] Impropers : charmm36_lipid_impropers[4][8] Non bonded : charmm36_lipid_vdw[29][6] */ #include "global.h" int charmm36_lipid_objects[14] = {29, 0, 0, 50, 0, 0, 131, 0, 180, 0 , 0, 4, 29, 0}; int charmm36_lipid_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_lipid info */ char * charmm36_lipid_atoms[29][5]= {{"H", "1.008000", "HL", "polar H (equivalent to protein H)", "136"}, {"H", "1.008000", "HCL", "charged H for PE (equivalent to protein HC)", "137"}, {"H", "1.008000", "HOL", "Nucleic acid phosphate hydroxyl proton", "138"}, {"H", "1.008000", "HAL1", "alphatic proton", "139"}, {"H", "1.008000", "HAL2", "alphatic proton", "140"}, {"H", "1.008000", "HAL3", "alphatic proton", "141"}, {"H", "1.008000", "HEL1", "for alkene; RHC=CR", "142"}, {"H", "1.008000", "HEL2", "for alkene; H2C=CR", "143"}, {"H", "1.008000", "HBL", "POPS SER backbone H", "144"}, {"C", "12.011000", "CL", "carbonyl C (acetic acid/methyl acetate)", "145"}, {"C", "12.011000", "CTL1", "sp3 carbon with 1 H (-CH1-)", "146"}, {"C", "12.011000", "CTL2", "carbon of methylene group (-CH2-)", "147"}, {"C", "12.011000", "CTL3", "carbon of methyl group (-CH3)", "148"}, {"C", "12.011000", "CTL5", "carbon of methyl group (-CH3) for tetramethylammonium", "149"}, {"C", "12.011000", "CEL1", "for alkene; RHC=CR", "150"}, {"C", "12.011000", "CEL2", "for alkene; H2C=CR", "151"}, {"C", "12.011000", "CCL", "for POPS", "152"}, {"N", "14.007000", "NTL", "ammonium nitrogen", "153"}, {"N", "14.007000", "NH3L", "nitrogen phosphatidylethanolamine", "154"}, {"O", "15.999400", "OBL", "acetic acid carboxyl oxygen (e. to protein OB)", "155"}, {"O", "15.999400", "OCL", "acetate oxygen", "156"}, {"O", "15.999400", "OSL", "ester oxygen", "157"}, {"O", "15.999400", "O2L", "Nucleic acid =O in phosphate or sulfate", "158"}, {"O", "15.999400", "OHL", "Nucleic acid phosphate hydroxyl oxygen", "159"}, {"O", "15.999400", "OSLP", "Phosphate oxygen, to avoid conflict with methylacetate type O", "160"}, {"P", "30.974000", "PL", "phosphorus", "161"}, {"S", "32.060000", "SL", "Sulfate sulfur", "162"}, {"C", "12.011000", "CRL1", "sp3 carbon with 1 H on a ring (-CH1-) for sterols", "163"}, {"C", "12.011000", "CRL2", "carbon of methylene group on a ring (-CH2-) for sterols", "164"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_lipid info V(R) = Kb x (R - R0)^2 */ char * charmm36_lipid_bonds[50][5]= {{"CTL3", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL2", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL1", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL1", "CCL", "200.0", "1.522", "for POPS"}, {"OBL", "CL", "750.0", "1.220", "methyl acetate"}, {"OCL", "CL", "525.0", "1.260", "acetate, protein"}, {"OCL", "CCL", "525.0", "1.260", "for POPS"}, {"OSL", "CL", "150.0", "1.334", "methyl acetate"}, {"OSLP", "CL", "150.0", "1.334", "methyl acetate"}, {"OHL", "CL", "230.0", "1.40", "methyl acetate"}, {"HOL", "OHL", "545.0", "0.960", "acetic acid"}, {"CTL1", "HAL1", "309.00", "1.111", "alkanes, 3/92"}, {"CTL1", "HBL", "330.00", "1.080", "for POPS"}, {"CTL2", "HAL2", "309.00", "1.111", "alkanes, 4/98"}, {"CTL3", "HAL3", "322.00", "1.111", "alkanes, 4/98"}, {"CTL3", "OSL", "340.0", "1.43", "phosphate"}, {"CTL2", "OSL", "340.0", "1.43", "phosphate"}, {"CTL1", "OSL", "340.0", "1.43", "phosphate"}, {"CTL3", "OSLP", "340.0", "1.43", " "}, {"CTL2", "OSLP", "340.0", "1.43", " "}, {"CTL1", "OSLP", "340.0", "1.43", " "}, {"OSL", "PL", "270.0", "1.60", "phosphate"}, {"OSLP", "PL", "270.0", "1.60", " "}, {"O2L", "PL", "580.0", "1.48", "phosphate"}, {"OHL", "PL", "237.0", "1.59", "phosphate"}, {"NH3L", "HCL", "410.0", "1.04", "ethanolamine"}, {"NH3L", "CTL1", "200.0", "1.48", "for POPS"}, {"NH3L", "CTL2", "261.0", "1.51", "ethanolamine"}, {"NTL", "CTL2", "215.00", "1.51", "tetramethylammonium"}, {"NTL", "CTL5", "215.00", "1.51", "tetramethylammonium"}, {"CTL5", "HL", "300.00", "1.08", "tetramethylammonium"}, {"CTL2", "HL", "300.00", "1.08", "tetramethylammonium"}, {"CTL1", "CTL1", "222.500", "1.500", "alkanes, 3/92"}, {"CTL1", "CTL2", "222.500", "1.538", "alkanes, 3/92"}, {"CTL1", "CTL3", "222.500", "1.538", "alkanes, 3/92"}, {"CTL2", "CTL2", "222.500", "1.530", "alkanes, 3/92"}, {"CTL2", "CTL3", "222.500", "1.528", "alkanes, 3/92"}, {"CTL3", "CTL3", "222.500", "1.530", "alkanes, 3/92"}, {"OHL", "CTL1", "428.0", "1.420", "glycerol"}, {"OHL", "CTL2", "428.0", "1.420", "glycerol"}, {"OHL", "CTL3", "428.0", "1.420", "glycerol"}, {"SL", "O2L", "540.0", "1.448", "methylsulfate"}, {"SL", "OSL", "250.0", "1.575", "methylsulfate"}, {"CEL2", "CEL2", "510.000", "1.330", "ethene yin,adm jr., 12/95"}, {"HEL2", "CEL2", "365.000", "1.100", "propene; from ethene, yin,adm jr., 12/95"}, {"CEL1", "CTL3", "383.000", "1.504", "butene, yin,adm jr., 12/95"}, {"CEL1", "CEL2", "500.000", "1.342", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "360.500", "1.100", "propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "365.000", "1.502", "butene; from propene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "440.000", "1.340", "butene, yin,adm jr., 12/95"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_lipid info V(S) = Kub x (S - S0)^2 */ char * charmm36_lipid_angles[131][8]= {{"OBL", "CL", "CTL3", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OBL", "CL", "CTL2", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OBL", "CL", "CTL1", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OSL", "CL", "OBL", "90.0", "125.9", "160.0", "2.2576", "acetic acid"}, {"CL", "OSL", "CTL1", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"CL", "OSL", "CTL2", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"CL", "OSL", "CTL3", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"HAL2", "CTL2", "CL", "33.00", "109.50", "30.00", "2.163", "methyl acetate"}, {"HAL3", "CTL3", "CL", "33.00", "109.50", "30.00", "2.163", "methyl acetate"}, {"CTL2", "CTL2", "CL", "52.0", "108.00", " ", " ", "alkane"}, {"CTL2", "CTL1", "CCL", "52.0", "108.00", " ", " ", "for POPS"}, {"CTL3", "CTL2", "CL", "52.0", "108.00", " ", " ", "alkane"}, {"OSL", "CL", "CTL3", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OSL", "CL", "CTL2", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OSL", "CL", "CTL1", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OHL", "CL", "OBL", "50.0", "123.0", "210.0", "2.2620", "acetic acid"}, {"OCL", "CL", "CTL2", "40.0", "118.0", "50.0", "2.3880", "acetate"}, {"OCL", "CL", "CTL3", "40.0", "118.0", "50.0", "2.3880", "acetate"}, {"OCL", "CL", "OCL", "100.0", "124.0", "70.0", "2.2250", "acetate"}, {"OCL", "CCL", "OCL", "100.0", "124.0", "70.0", "2.2250", "for POPS"}, {"OCL", "CCL", "CTL1", "40.0", "118.0", "50.0", "2.3880", "for POPS"}, {"OHL", "CL", "CTL3", "55.0", "110.50", " ", " ", "acetic acid"}, {"OHL", "CL", "CTL2", "55.0", "110.50", " ", " ", "acetic acid"}, {"HOL", "OHL", "CL", "55.0", "115.0", " ", " ", "acetic acid"}, {"OSL", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "acetic acid, PIP"}, {"OSL", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL1", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "acetic acid, PIP"}, {"OSLP", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL1", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"HAL2", "CTL2", "HAL2", "35.500", "109.00", "5.40", "1.80200", "alkane, 3/92"}, {"HAL3", "CTL3", "HAL3", "35.500", "108.40", "5.40", "1.80200", "alkane, 3/92"}, {"HAL1", "CTL1", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL2", "CTL2", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL3", "CTL3", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL1", "CTL1", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL2", "CTL2", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL3", "CTL3", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"CTL1", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate, PIP"}, {"CTL2", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL3", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL1", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate, PIP"}, {"CTL2", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL3", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"HOL", "OHL", "PL", "30.0", "115.0", "40.0", "2.30", "phosphate"}, {"OSL", "PL", "OSL", "80.0", "104.3", " ", " ", "phosphate"}, {"OSL", "PL", "O2L", "98.9", "111.6", " ", " ", "phosphate"}, {"OSL", "PL", "OHL", "48.1", "108.0", " ", " ", "phosphate"}, {"OSLP", "PL", "OSLP", "80.0", "104.3", " ", " ", "phosphate"}, {"OSLP", "PL", "O2L", "98.9", "111.6", " ", " ", "phosphate"}, {"OSLP", "PL", "OHL", "48.1", "108.0", " ", " ", "phosphate"}, {"O2L", "PL", "O2L", "120.0", "120.0", " ", " ", "phosphate"}, {"O2L", "PL", "OHL", "98.9", "108.23", " ", " ", "phosphate"}, {"NTL", "CTL2", "HL", "40.0", "109.5", "27.", "2.13", "tetramethylammonium"}, {"NTL", "CTL5", "HL", "40.0", "109.5", "27.", "2.13", "tetramethylammonium"}, {"HL", "CTL2", "HL", "24.0", "109.50", "28.", "1.767", "tetramethylammonium"}, {"HL", "CTL5", "HL", "24.0", "109.50", "28.", "1.767", "tetramethylammonium"}, {"CTL2", "NTL", "CTL2", "60.0", "109.5", "26.", "2.466", "tetraethylammonium, from CTL5 NTL CTL2"}, {"CTL5", "NTL", "CTL2", "60.0", "109.5", "26.", "2.466", "tetramethylammonium"}, {"CTL5", "NTL", "CTL5", "60.0", "109.5", "26.", "2.466", "tetramethylammonium"}, {"HL", "CTL2", "CTL2", "33.430", "110.10", "22.53", "2.179", "alkane"}, {"HL", "CTL2", "CTL3", "33.430", "110.10", "22.53", "2.179", "alkane"}, {"HAL1", "CTL1", "CTL1", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL1", "CTL1", "CTL2", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL1", "CTL1", "CTL3", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL2", "CTL2", "CTL1", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL2", "CTL2", "CTL2", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL2", "CTL2", "CTL3", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL1", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL2", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL3", "37.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HBL", "CTL1", "CCL", "50.000", "109.50", " ", " ", "for POPS"}, {"HBL", "CTL1", "CTL2", "35.000", "111.00", " ", " ", "for POPS"}, {"NTL", "CTL2", "CTL2", "67.7", "115.00", " ", " ", "tetramethylammonium"}, {"NTL", "CTL2", "CTL3", "67.7", "115.00", " ", " ", "tetramethylammonium"}, {"HCL", "NH3L", "CTL2", "33.0", "109.50", "4.00", "2.056", "ethanolamine"}, {"HCL", "NH3L", "CTL1", "30.0", "109.50", "20.00", "2.074", "for POPS"}, {"HCL", "NH3L", "HCL", "41.0", "109.50", " ", " ", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "67.7", "110.00", " ", " ", "ethanolamine"}, {"NH3L", "CTL2", "HAL2", "45.0", "107.50", "35.00", "2.0836", "ethanolamine"}, {"CTL1", "CTL1", "CTL1", "53.350", "111.00", "8.00", "2.561", "alkane, 3/92"}, {"NH3L", "CTL1", "CCL", "43.7", "110.00", " ", " ", "for POPS"}, {"NH3L", "CTL1", "CTL2", "67.7", "110.00", " ", " ", "for POPS"}, {"NH3L", "CTL1", "HBL", "51.5", "107.50", " ", " ", "for POPS"}, {"CTL1", "CTL1", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL1", "CTL3", "53.350", "108.50", "8.00", "2.561", "alkane, 3/92"}, {"CTL1", "CTL2", "CTL1", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL2", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL2", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL1", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL1", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL2", "CTL2", "58.350", "113.60", "11.16", "2.561", "alkane, 3/92"}, {"CTL2", "CTL2", "CTL3", "58.000", "115.00", "8.00", "2.561", "alkane, 3/92"}, {"CTL3", "CTL1", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"HOL", "OHL", "CTL1", "57.500", "106.00", " ", " ", "glycerol"}, {"HOL", "OHL", "CTL2", "57.500", "106.00", " ", " ", "glycerol"}, {"HOL", "OHL", "CTL3", "57.500", "106.00", " ", " ", "glycerol"}, {"OHL", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "glycerol, PIP"}, {"OHL", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL1", "HAL1", "45.900", "108.89", " ", " ", "glycerol"}, {"OHL", "CTL2", "HAL2", "45.900", "108.89", " ", " ", "glycerol"}, {"OHL", "CTL3", "HAL3", "45.900", "108.89", " ", " ", "glycerol"}, {"O2L", "SL", "O2L", "130.0", "109.47", "35.0", "2.45", "methylsulfate"}, {"O2L", "SL", "OSL", "85.0", "98.0", " ", " ", "methylsulfate"}, {"CTL2", "OSL", "SL", "15.0", "109.0", "27.00", "1.90", "methylsulfate"}, {"CTL3", "OSL", "SL", "15.0", "109.0", "27.00", "1.90", "methylsulfate"}, {"CEL1", "CEL1", "CTL2", "48.00", "123.50", " ", " ", "from 2-butene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "CTL3", "48.00", "123.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL2", "48.00", "126.00", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL3", "47.00", "125.20", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL1", "52.00", "119.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL2", "42.00", "118.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "40.00", "116.00", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL3", "22.00", "117.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "CEL1", "45.00", "120.50", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "CEL2", "55.50", "120.50", " ", " ", "ethene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "HEL2", "19.00", "119.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CTL2", "32.00", "112.20", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CTL3", "32.00", "112.20", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HAL2", "CTL2", "CEL1", "45.00", "111.50", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HAL3", "CTL3", "CEL1", "42.00", "111.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CEL1", "30.0", "114.0", " ", " ", "1,4-dipentene, adm jr., 2/00"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_lipid info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_lipid_dihedrals[180][8]= {{"X", "CTL1", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"X", "CTL2", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"X", "CTL3", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"OCL", "CCL", "CTL1", "NH3L", "3.20", "2", "180.00", "for POPS"}, {"OBL", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OBL", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OSL", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OSL", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OSLP", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OSLP", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OBL", "CL", "OSL", "CTL1", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL1", "3.85", "2", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL2", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL2", "3.85", "2", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL3", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL3", "3.85", "2", "180.00", "methyl acetate"}, {"X", "CL", "OSL", "X", "2.05", "2", "180.00", "methyl acetate"}, {"X", "CTL2", "CL", "X", "0.05", "6", "180.00", "methyl acetate"}, {"X", "CTL3", "CL", "X", "0.05", "6", "180.00", "methyl acetate"}, {"X", "CL", "OHL", "X", "2.05", "2", "180.00", "acetic acid"}, {"X", "CTL1", "CCL", "X", "0.05", "6", "180.00", "for POPS"}, {"HAL2", "CTL2", "CL", "OHL", "0.00", "6", "180.00", " "}, {"HAL3", "CTL3", "CL", "OHL", "0.00", "6", "180.00", " "}, {"PL", "OSLP", "CTL2", "CTL1", "0.407", "2", "0.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL1", "0.241", "1", "180.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL2", "0.407", "2", "0.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL2", "0.241", "1", "180.00", "Phos-gly, 8/05"}, {"OSL", "PL", "OSL", "CTL1", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSL", "PL", "OSL", "CTL1", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSL", "PL", "OSL", "CTL1", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL2", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL2", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL2", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSLP", "CTL2", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSL", "CTL2", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSLP", "CTL1", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"O2L", "PL", "OSL", "CTL1", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"O2L", "PL", "OSLP", "CTL3", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSL", "CTL3", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"OHL", "PL", "OSL", "CTL1", "0.95", "2", "0.00", "terminal phosphate, PIP"}, {"OHL", "PL", "OSL", "CTL1", "0.50", "3", "0.00", "terminal phosphate, PIP"}, {"OHL", "PL", "OSL", "CTL2", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL2", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL3", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL3", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL2", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL2", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL3", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL3", "0.50", "3", "0.00", "terminal phosphate"}, {"X", "OHL", "PL", "X", "0.30", "3", "0.00", "terminal phosphate"}, {"X", "CTL1", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL2", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL3", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL1", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL2", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL3", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"CTL1", "CTL2", "CL", "OSL", "-0.15", "1", "180.00", "methyl propionate, 12/92"}, {"CTL1", "CTL2", "CL", "OSL", "0.53", "2", "180.00", "methyl propionate, 12/92"}, {"CTL2", "CTL2", "CL", "OSL", "0.000", "6", "0.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.030", "3", "180.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.432", "2", "180.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.332", "1", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.000", "6", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.030", "3", "180.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.432", "2", "180.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.332", "1", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.000", "5", "180.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.317", "3", "180.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.557", "2", "0.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.753", "1", "0.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.000", "5", "180.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.317", "3", "180.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.557", "2", "0.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.753", "1", "0.00", "propyl ester, 6/07"}, {"OSL", "CTL2", "CTL1", "OSL", "-0.429", "4", "60.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "0.614", "3", "0.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "-0.115", "2", "60.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "0.703", "1", "180.00", "glycerol, 8/08"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.000", "4", "0.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.607", "3", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.254", "2", "60.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "2.016", "1", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.000", "4", "0.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.607", "3", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.254", "2", "60.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "2.016", "1", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"CTL3", "CTL1", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL2", "CTL1", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL3", "CTL2", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL2", "CTL2", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CL", "OSL", "CTL1", "CTL2", "0.000", "4", "0.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "0.150", "3", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "1.453", "2", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "0.837", "1", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.000", "4", "0.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.150", "3", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "1.453", "2", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.837", "1", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.267", "3", "180.00", "glycerol, gamma1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.173", "2", "0.00", "glycerol, gamma1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.781", "1", "180.00", "glycerol, gamma1 6/07"}, {"X", "CTL2", "NTL", "X", "0.26", "3", "0.00", "tetramethylammonium"}, {"X", "CTL5", "NTL", "X", "0.23", "3", "0.00", "tetramethylammonium"}, {"X", "CTL1", "NH3L", "X", "0.10", "3", "0.00", "for POPS"}, {"X", "CTL2", "NH3L", "X", "0.10", "3", "0.00", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "OHL", "0.7", "1", "180.00", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "OSLP", "0.7", "1", "180.00", "ethanolamine"}, {"NTL", "CTL2", "CTL2", "OHL", "4.3", "1", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OHL", "-0.4", "3", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OSLP", "3.3", "1", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OSLP", "-0.4", "3", "180.00", "choline, 12/92"}, {"X", "CTL1", "CTL1", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL1", "CTL2", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL1", "CTL3", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL2", "CTL2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CTL2", "CTL3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CTL3", "CTL3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CTL3", "CTL2", "CTL2", "CTL3", "0.060", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL3", "CTL2", "CTL2", "CTL3", "0.035", "5", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.162", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.047", "3", "180.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.105", "4", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.177", "5", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.101", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.142", "3", "180.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.074", "4", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.097", "5", "0.00", "alkane, 7/08, jbk"}, {"HAL3", "CTL3", "OSL", "SL", "0.00", "3", "0.00", "methylsulfate"}, {"CTL2", "OSL", "SL", "O2L", "0.00", "3", "0.00", "methylsulfate"}, {"CTL3", "OSL", "SL", "O2L", "0.00", "3", "0.00", "methylsulfate"}, {"HEL1", "CEL1", "CEL1", "HEL1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CTL3", "CEL1", "CEL1", "HEL1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"X", "CEL1", "CEL1", "X", "0.4500", "1", "180.00", "2-butene, adm jr., 4/04"}, {"X", "CEL1", "CEL1", "X", "8.5000", "2", "180.00", " "}, {"X", "CEL2", "CEL2", "X", "4.9000", "2", "180.00", "ethene, yin,adm jr., 12/95"}, {"CTL2", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"CTL3", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "CTL2", "HAL2", "0.3000", "3", "180.00", "adm jr., 4/04"}, {"CEL1", "CEL1", "CTL3", "HAL3", "0.3000", "3", "180.00", "adm jr., 4/04"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.9100", "1", "180.0", "adm jr., 11/09, end fix jbk"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.1800", "2", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.1700", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.9100", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.1800", "2", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.1700", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CL", "0.1400", "1", "180.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CL", "0.1700", "2", "0.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CL", "0.0500", "3", "180.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.1400", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.1700", "2", "0.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.0500", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.1400", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.1700", "2", "0.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.0500", "3", "180.0", "adm jr., 11/09"}, {"CEL2", "CEL1", "CTL2", "CTL2", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL2", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "HAL2", "0.1200", "3", "0.00", "1-butene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL3", "HAL3", "0.0500", "3", "180.00", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "CTL2", "0.1200", "3", "0.00", "butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "CTL3", "0.1200", "3", "0.00", "butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "HAL2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HEL1", "CEL1", "CTL3", "HAL3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CEL1", "1.200", "1", "180.00", " "}, {"CEL2", "CEL1", "CTL2", "CEL1", "0.400", "2", "180.00", " "}, {"CEL2", "CEL1", "CTL2", "CEL1", "1.300", "3", "180.00", " "}, {"CEL1", "CTL2", "CEL1", "HEL1", "0.000", "2", "0.00", " "}, {"CEL1", "CTL2", "CEL1", "HEL1", "0.000", "3", "0.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.850", "1", "180.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.300", "2", "180.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.260", "3", "0.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.096", "4", "0.00", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_lipid info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_lipid_impropers[4][8]= {{"OBL", "X", "X", "CL", "100.00", "0", "0.00", "acetic acid"}, {"HEL2", "HEL2", "CEL2", "CEL2", "3.00", "0", "0.00", "ethene, yin,adm jr., 12/95"}, {"OCL", "X", "X", "CL", "96.00", "0", "0.00", "acetate"}, {"OCL", "X", "X", "CCL", "96.00", "0", "0.00", "for POPS"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_lipid info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_lipid_vdw[29][6]= {{"HOL", "-0.046", "0.2245", " ", " ", " "}, {"HAL1", "-0.022", "1.3200", " ", " ", "3/92"}, {"HAL2", "-0.028", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HAL3", "-0.024", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HBL", "-0.022", "1.3200", " ", " ", "POPS"}, {"HCL", "-0.046", "0.2245", " ", " ", " "}, {"HL", "-0.046", "0.7", " ", " ", "H on NC4+"}, {"HEL1", "-0.031", "1.25", " ", " ", "yin,adm jr., 12/95"}, {"HEL2", "-0.026", "1.26", " ", " ", "yin,adm jr., 12/95"}, {"CL", "-0.0700", "2.00", " ", " ", "acetate update"}, {"CCL", "-0.0700", "2.00", " ", " ", "POPS"}, {"CTL1", "-0.0200", "2.275", "-0.01", "1.9", "alkane, 3/92"}, {"CTL2", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CTL3", "-0.0780", "2.040", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CTL5", "-0.0800", "2.06", "-0.01", "1.9", "old CTL3"}, {"CEL1", "-0.068", "2.09", " ", " ", "yin,adm jr., 12/95"}, {"CEL2", "-0.064", "2.08", " ", " ", "yin,adm jr., 12/95"}, {"CRL1", "-0.0360", "2.010", "-0.01", "1.9", "CGAFF, jbk add for cholesterol"}, {"CRL2", "-0.0600", "2.020", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv (jbk add)"}, {"OBL", "-0.12", "1.70", "-0.12", "1.4", " "}, {"OCL", "-0.12", "1.70", " ", " ", " "}, {"O2L", "-0.12", "1.70", " ", " ", " "}, {"OHL", "-0.1521", "1.77", " ", " ", " "}, {"OSL", "-0.1000", "1.6500", " ", " ", "ether parameter"}, {"OSLP", "-0.1000", "1.6500", " ", " ", "ether parameter"}, {"NH3L", "-0.20", "1.85", " ", " ", " "}, {"NTL", "-0.20", "1.85", " ", " ", "all other nitogens"}, {"SL", "-0.47", "2.1", " ", " ", " "}, {"PL", "-0.585", "2.15", " ", " ", "Jr."}}; atomes_1.3.1/src/calc/force_fields/charmm35_ethers.c0000664000175000017500000006451415212624223021771 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm35_ethers.c * @short CHARMM-charmm35_ethers force field, from 'charmm35_ethers' * @author Sébastien Le Roux */ /* * This file: 'charmm35_ethers.c' * * Contains: * CHARMM-charmm35_ethers force field, data from taken from: - the file: 'charmm35_ethers' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm35_ethers_atoms[13][5] Bonds : charmm35_ethers_bonds[22][5] Angles : charmm35_ethers_angles[55][8] Dihedrals : charmm35_ethers_dihedrals[106][8] Non bonded : charmm35_ethers_vdw[13][6] */ #include "global.h" int charmm35_ethers_objects[14] = {13, 0, 0, 22, 0, 0, 55, 0, 106, 0 , 0, 0, 13, 0}; int charmm35_ethers_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 0, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm35_ethers info */ char * charmm35_ethers_atoms[13][5]= {{"H", "1.00800", "HCA1A", "Alkane H attached to C(sp3)H (eq. HA1)", "241"}, {"H", "1.00800", "HCA2A", "Alkane H attached to C(sp3)H2 (eq. HA2)", "242"}, {"H", "1.00800", "HCA3A", "Alkane H attached to C(sp3)H3 (eq. HA3)", "243"}, {"H", "1.00800", "HCA25A", "Alkane H attached to C(sp3)H2 in 5-membered ring", "244"}, {"C", "12.01100", "CC30A", "-C(sp3) Carbon (eq. CT)", "245"}, {"C", "12.01100", "CC31A", "-C(sp3)H Carbon (eq. CT1)", "246"}, {"C", "12.01100", "CC32A", "-C(sp3)H2 Carbon (eq. CT2)", "247"}, {"C", "12.01100", "CC33A", "-C(sp3)H3 Carbon (eq. CT3)", "248"}, {"C", "12.01100", "CC325A", "-C(sp3)H2 Carbon in 5-membered ring", "249"}, {"C", "12.01100", "CC325B", "-C(sp3)H2 Carbon in THF (tetrahydrofuran)", "250"}, {"C", "12.01100", "CC326A", "-C(sp3)H2 Carbon in THP (tetrahydropyran)", "251"}, {"O", "15.99940", "OC30A", "Ether Oxygen", "252"}, {"O", "15.99940", "OC305A", "Ether Oxygen in THF", "253"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm35_ethers info V(R) = Kb x (R - R0)^2 */ char * charmm35_ethers_bonds[22][5]= {{"CC31A", "HCA1A", "309.00", "1.111", "alkanes, 4/98"}, {"CC32A", "HCA2A", "309.00", "1.111", "alkanes, 4/98"}, {"CC33A", "HCA3A", "322.00", "1.111", "alkanes, 4/98"}, {"CC30A", "CC32A", "222.50", "1.538", "10/98"}, {"CC30A", "CC33A", "222.50", "1.538", "10/98"}, {"CC31A", "CC31A", "222.50", "1.500", "alkanes, 3/92"}, {"CC31A", "CC32A", "222.50", "1.538", "alkanes, 3/92"}, {"CC31A", "CC33A", "222.50", "1.538", "alkanes, 3/92"}, {"CC32A", "CC32A", "222.50", "1.530", "alkanes, 3/92"}, {"CC32A", "CC33A", "222.50", "1.528", "alkanes, 3/92"}, {"CC33A", "CC33A", "222.50", "1.530", "alkanes, 3/92"}, {"CC325A", "CC325A", "195.00", "1.548", "cyclopentane CPEN 10/17/05 viv"}, {"CC325A", "HCA25A", "307.00", "1.116", "cyclopentane CPEN 10/17/05 viv"}, {"CC325B", "OC305A", "350.00", "1.425", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CC325B", "CC325B", "195.00", "1.518", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CC325B", "HCA25A", "307.00", "1.100", "THF, THF neutron diffr., 5/30/06, viv"}, {"CC325B", "CC33A", "222.50", "1.528", "TF2M, viv"}, {"CC32A", "OC30A", "360.00", "1.415", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "360.00", "1.415", "DEET, diethylether, alex"}, {"CC326A", "HCA2A", "309.00", "1.111", "THP, viv"}, {"CC326A", "CC326A", "222.50", "1.530", "THP, viv"}, {"CC326A", "OC30A", "360.00", "1.415", "DEET, diethylether, viv"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm35_ethers info V(S) = Kub x (S - S0)^2 */ char * charmm35_ethers_angles[55][8]= {{"HCA1A", "CC31A", "CC31A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC33A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA2A", "CC32A", "CC30A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC31A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC32A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC33A", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC30A", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC31A", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC32A", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC33A", "37.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "HCA2A", "35.50", "109.00", "5.40", "1.802", "alkane, 3/92"}, {"HCA3A", "CC33A", "HCA3A", "35.50", "108.40", "5.40", "1.802", "alkane, 3/92"}, {"CC30A", "CC32A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC30A", "CC32A", "CC33A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC31A", "CC31A", "53.350", "111.00", "8.00", "2.561", "alkane, 3/92"}, {"CC31A", "CC31A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC31A", "CC33A", "53.350", "108.50", "8.00", "2.561", "alkane, 3/92"}, {"CC31A", "CC32A", "CC31A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC32A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC32A", "CC33A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC30A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC31A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC32A", "CC32A", "58.350", "113.60", "11.16", "2.561", "alkane, 3/92"}, {"CC32A", "CC32A", "CC33A", "58.000", "115.00", "8.00", "2.561", "alkane, 3/92"}, {"CC33A", "CC30A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC31A", "CC32A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC31A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC32A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC325A", "CC325A", "CC325A", "58.00", "106.00", "11.16", "2.561", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325A", "CC325A", "35.00", "111.40", "22.53", "2.179", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325A", "HCA25A", "38.50", "106.80", "5.40", "1.802", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325B", "CC325B", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"HCA25A", "CC325B", "HCA25A", "38.50", "106.80", "5.40", "1.802", "THF, 10/17/05 viv"}, {"CC325B", "CC325B", "CC325B", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"OC305A", "CC325B", "CC325B", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CC325B", "OC305A", "CC325B", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"HCA25A", "CC325B", "OC305A", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"HCA3A", "CC33A", "CC325B", "34.600", "110.10", "22.53", "2.179", "TF2M viv"}, {"CC325B", "CC325B", "CC33A", "58.000", "115.00", "8.00", "2.561", "TF2M viv"}, {"HCA25A", "CC325B", "CC33A", "34.600", "110.10", "22.53", "2.179", "TF2M viv"}, {"OC305A", "CC325B", "CC33A", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CC32A", "OC30A", "CC32A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "CC32A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "CC33A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"OC30A", "CC32A", "CC32A", "45.00", "111.50", " ", " ", "DEET, diethylether, alex"}, {"OC30A", "CC32A", "CC33A", "45.00", "111.50", " ", " ", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "60.00", "109.50", " ", " ", "phosphate, alex"}, {"HCA2A", "CC32A", "OC30A", "60.00", "109.50", " ", " ", "phosphate, alex"}, {"HCA2A", "CC326A", "CC326A", "34.500", "110.10", "22.53", "2.179", "THP, sng cyclohexane 12/05"}, {"HCA2A", "CC326A", "HCA2A", "35.50", "109.00", "5.40", "1.80200!", "viv"}, {"CC326A", "CC326A", "CC326A", "58.350", "112.00", "11.16", "2.561", "THP, sng cyclohexane 12/05"}, {"OC30A", "CC326A", "CC326A", "45.00", "111.50", " ", " ", "THP, viv"}, {"CC326A", "OC30A", "CC326A", "95.00", "109.70", " ", " ", "THP, viv"}, {"HCA2A", "CC326A", "OC30A", "45.00", "109.50", " ", " ", "THP, sng 02/06"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm35_ethers info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm35_ethers_dihedrals[106][8]= {{"CC31A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC30A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC30A", "CC32A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC30A", "CC32A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC31A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC32A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC33A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA2A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC30A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC31A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC32A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"HCA2A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC30A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC31A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC32A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC32A", "CC33A", "0.03179", "6", "180.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC33A", "0.03819", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.20391", "5", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.10824", "4", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.08133", "3", "180.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.15051", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.11251", "5", "0.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.09458", "4", "0.0", "alkane, c27r klauda et al.2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.14975", "3", "180.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.06450", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC325A", "CC325A", "CC33A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC33A", "CC325A", "CC325A", "CC325A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC33A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"HCA25A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC325A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC325A", "CC325A", "CC325A", "CC325A", "0.41000", "3", "180.0", "cpen, cyclopentane, viv 10/4/05"}, {"CC33A", "CC325B", "CC325B", "CC33A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC33A", "CC325B", "CC325B", "CC325B", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC33A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"HCA25A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC325B", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"OC305A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell, thf viv"}, {"HCA25A", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CC325B", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"OC305A", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CC325B", "CC325B", "CC325B", "CC325B", "0.41000", "3", "180.0", "CPEN viv 10/4/05"}, {"HCA25A", "CC325B", "OC305A", "CC325B", "0.3000", "3", "0.0", "THF, 05/30/06, viv"}, {"OC305A", "CC325B", "CC325B", "CC325B", "0.0000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC325B", "CC325B", "OC305A", "CC325B", "0.5000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC33A", "CC325B", "OC305A", "CC325B", "0.3000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC33A", "CC326A", "CC326A", "CC33A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"CC33A", "CC326A", "CC326A", "CC326A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"CC33A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"HCA2A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"HCA2A", "CC326A", "CC326A", "CC326A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"OC30A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp viv"}, {"HCA2A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"CC326A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"OC30A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "0.49829", "2", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "-0.59844", "3", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "0.41746", "4", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "-0.24829", "5", "0.0", "THP, viv"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-0.19225", "1", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-1.00000", "2", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "0.59457", "3", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-0.07862", "4", "0.0", "THP, sng 1/06"}, {"HCA3A", "CC33A", "CC33A", "HCA3A", "0.15250", "3", "0.00", "ETHA, ethane, 4/98, yin and mackerell"}, {"CC326A", "OC30A", "CC326A", "CC326A", "-0.52702", "1", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "0.68297", "2", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "-0.20977", "3", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "0.15037", "4", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "HCA2A", "0.28400", "3", "0.0", "DMET, viv"}, {"HCA2A", "CC32A", "CC32A", "OC30A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"OC30A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"HCA2A", "CC32A", "OC30A", "CC32A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "CC32A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA2A", "CC32A", "OC30A", "CC33A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "CC33A", "0.28400", "3", "0.0", "DME, viv"}, {"CC33A", "CC32A", "OC30A", "CC32A", "0.40", "1", "0.0", "diethylether, 2/12/05, ATM"}, {"CC33A", "CC32A", "OC30A", "CC32A", "0.49", "3", "0.0", "diethylether"}, {"CC33A", "CC32A", "OC30A", "CC33A", "0.40", "1", "0.0", "diethylether, 2/12/05, ATM, MEE viv"}, {"CC33A", "CC32A", "OC30A", "CC33A", "0.49", "3", "0.0", "diethylether, MEE viv"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.57", "1", "0.0", "1,2 dimethoxyethane (DME), 2/12/05, ATM"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.29", "2", "0.0", "1,2 dimethoxyethane (DME)"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.43", "3", "0.0", "1,2 dimethoxyethane (DME)"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.57", "1", "0.0", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.29", "2", "0.0", "1,2 dimethoxyethane"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.43", "3", "0.0", "1,2 dimethoxyethane"}, {"OC30A", "CC32A", "CC32A", "OC30A", "0.59", "1", "180.0", "1,2 dimethoxyethane, Aug 2007, HK Lee"}, {"OC30A", "CC32A", "CC32A", "OC30A", "1.16", "2", "0.0", "1,2 dimethoxyethane"}, {"OC30A", "CC32A", "CC32A", "CC33A", "0.16", "1", "180.0", "methylpropylether, 2/12/05, ATM"}, {"OC30A", "CC32A", "CC32A", "CC33A", "0.39", "2", "0.0", "methylpropylether"}, {"OC30A", "CC32A", "CC32A", "CC32A", "0.16", "1", "180.0", "methylpropylether, 2/12/05, ATM"}, {"OC30A", "CC32A", "CC32A", "CC32A", "0.39", "2", "0.0", "methylpropylether"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm35_ethers info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm35_ethers_vdw[13][6]= {{"HCA1A", "-0.0450", "1.3400", " ", " ", "1/5/05 viv"}, {"HCA2A", "-0.0350", "1.3400", " ", " ", "11/16/04 viv"}, {"HCA3A", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"CC30A", "-0.0320", "2.0000", "-0.01", "1.9", "from CC31A"}, {"CC31A", "-0.0320", "2.0000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC32A", "-0.0560", "2.0100", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC33A", "-0.0780", "2.0400", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC326A", "-0.0560", "2.0100", "-0.01", "1.9", "THP, tetrahyropyran, viv"}, {"HCA25A", "-0.0350", "1.3000", " ", " ", "cyclopentane, 8/06 viv"}, {"CC325A", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"CC325B", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"OC305A", "-0.1000", "1.6500", " ", " ", "tetrahydropyran sng 1/06"}, {"OC30A", "-0.1000", "1.6500", " ", " ", "tetrahydropyran sng 1/06"}}; atomes_1.3.1/src/calc/force_fields/charmm36_cgenff.c0000664000175000017500000323444715212624223021737 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_cgenff.c * @short CHARMM-charmm36_cgenff force field, from 'charmm36_cgenff' * @author Sébastien Le Roux */ /* * This file: 'charmm36_cgenff.c' * * Contains: * CHARMM-charmm36_cgenff force field, data from taken from: - the file: 'charmm36_cgenff' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_cgenff_atoms[163][5] Bonds : charmm36_cgenff_bonds[506][5] Angles : charmm36_cgenff_angles[1561][8] Dihedrals : charmm36_cgenff_dihedrals[3937][8] Impropers : charmm36_cgenff_impropers[125][8] Non bonded : charmm36_cgenff_vdw[156][6] */ #include "global.h" int charmm36_cgenff_objects[14] = {163, 0, 0, 506, 0, 0, 1561, 0, 3937, 0 , 0, 125, 156, 0}; int charmm36_cgenff_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_cgenff info */ char * charmm36_cgenff_atoms[163][5]= {{"H", "1.00800", "HGA1", "alphatic proton, CH", "256"}, {"H", "1.00800", "HGA2", "alphatic proton, CH2", "257"}, {"H", "1.00800", "HGA3", "alphatic proton, CH3", "258"}, {"H", "1.00800", "HGA4", "alkene proton; RHC=", "259"}, {"H", "1.00800", "HGA5", "alkene proton; H2C=CR", "260"}, {"H", "1.00800", "HGA6", "aliphatic H on fluorinated C, monofluoro", "261"}, {"H", "1.00800", "HGA7", "aliphatic H on fluorinated C, difluoro", "262"}, {"H", "1.00800", "HGAAM0", "aliphatic H, NEUTRAL trimethylamine (#)", "263"}, {"H", "1.00800", "HGAAM1", "aliphatic H, NEUTRAL dimethylamine (#)", "264"}, {"H", "1.00800", "HGAAM2", "aliphatic H, NEUTRAL methylamine (#)", "265"}, {"H", "1.00800", "HGP1", "polar H", "266"}, {"H", "1.00800", "HGP2", "polar H, +ve charge", "267"}, {"H", "1.00800", "HGP3", "polar H, thiol", "268"}, {"H", "1.00800", "HGP4", "polar H, neutral conjugated -NH2 group (NA bases)", "269"}, {"H", "1.00800", "HGP5", "polar H on quarternary ammonium salt (choline)", "270"}, {"H", "1.00800", "HGPAM1", "polar H, NEUTRAL dimethylamine (#), terminal alkyne H", "271"}, {"H", "1.00800", "HGPAM2", "polar H, NEUTRAL methylamine (#)", "272"}, {"H", "1.00800", "HGPAM3", "polar H, NEUTRAL ammonia (#)", "273"}, {"H", "1.00800", "HGR51", "nonpolar H, neutral 5-mem planar ring C, LJ based on benzene", "274"}, {"H", "1.00800", "HGR52", "Aldehyde H, formamide H (RCOH); nonpolar H, neutral 5-mem planar ring C adjacent to heteroatom or + charge", "275"}, {"H", "1.00800", "HGR53", "nonpolar H, +ve charge HIS he1(+1)", "276"}, {"H", "1.00800", "HGR61", "aromatic H", "277"}, {"H", "1.00800", "HGR62", "nonpolar H, neutral 6-mem planar ring C adjacent to heteroatom", "278"}, {"H", "1.00800", "HGR63", "nonpolar H, NAD+ nicotineamide all ring CH hydrogens", "279"}, {"H", "1.00800", "HGR71", "nonpolar H, neutral 7-mem arom ring, AZUL, azulene, kevo", "280"}, {"C", "12.01100", "CG1T1", "internal alkyne R-C#C", "281"}, {"C", "12.01100", "CG1T2", "terminal alkyne H-C#C", "282"}, {"C", "12.01100", "CG1N1", "C for cyano group", "283"}, {"C", "12.01100", "CG2D1", "alkene; RHC= ; imine C", "284"}, {"C", "12.01100", "CG2D2", "alkene; H2C=", "285"}, {"C", "12.01100", "CG2D1O", "double bond carbon adjacent to heteroatom. In conjugated systems, the atom to which it is double bonded must be CG2DC1.", "286"}, {"C", "12.01100", "CG2D2O", "double bond carbon adjacent to heteroatom. In conjugated systems, the atom to which it is double bonded must be CG2DC2.", "287"}, {"C", "12.01100", "CG2DC1", "conjugated alkenes, R2C=CR2", "288"}, {"C", "12.01100", "CG2DC2", "conjugated alkenes, R2C=CR2", "289"}, {"C", "12.01100", "CG2DC3", "conjugated alkenes, H2C=", "290"}, {"C", "12.01100", "CG2N1", "conjugated C in guanidine/guanidinium", "291"}, {"C", "12.01100", "CG2N2", "conjugated C in amidinium cation", "292"}, {"C", "12.01100", "CG2O1", "carbonyl C: amides", "293"}, {"C", "12.01100", "CG2O2", "carbonyl C: esters, [neutral] carboxylic acids", "294"}, {"C", "12.01100", "CG2O3", "carbonyl C: [negative] carboxylates", "295"}, {"C", "12.01100", "CG2O4", "carbonyl C: aldehydes", "296"}, {"C", "12.01100", "CG2O5", "carbonyl C: ketones", "297"}, {"C", "12.01100", "CG2O6", "carbonyl C: urea, carbonate", "298"}, {"C", "12.01100", "CG2O7", "CO2 carbon", "299"}, {"C", "12.01100", "CG2R51", "5-mem ring, his CG, CD2(0), trp", "300"}, {"C", "12.01100", "CG2R52", "5-mem ring, double bound to N, PYRZ, pyrazole", "301"}, {"C", "12.01100", "CG2R53", "5-mem ring, double bound to N and adjacent to another heteroatom, purine C8, his CE1 (0,+1), 2PDO, kevo", "302"}, {"C", "12.01100", "CG2R57", "5-mem ring, bipyrroles", "303"}, {"C", "12.01100", "CG25C1", "same as CG2DC1 but in 5-membered ring with exocyclic double bond", "304"}, {"C", "12.01100", "CG25C2", "same as CG2DC2 but in 5-membered ring with exocyclic double bond", "305"}, {"C", "12.01100", "CG251O", "same as CG2D1O but in 5-membered ring with exocyclic double bond", "306"}, {"C", "12.01100", "CG252O", "same as CG2D2O but in 5-membered ring with exocyclic double bond", "307"}, {"C", "12.01100", "CG2R61", "6-mem aromatic C", "308"}, {"C", "12.01100", "CG2R62", "6-mem aromatic C for protonated pyridine (NIC) and rings containing carbonyls (see CG2R63) (NA)", "309"}, {"C", "12.01100", "CG2R63", "6-mem aromatic amide carbon (NA) (and other 6-mem aromatic carbonyls?)", "310"}, {"C", "12.01100", "CG2R64", "6-mem aromatic amidine and guanidine carbon (between 2 or 3 Ns and double-bound to one of them), NA, PYRM", "311"}, {"C", "12.01100", "CG2R66", "6-mem aromatic carbon bound to F", "312"}, {"C", "12.01100", "CG2R67", "6-mem aromatic carbon of biphenyl", "313"}, {"C", "12.01100", "CG2RC0", "6/5-mem ring bridging C, guanine C4,C5, trp", "314"}, {"C", "12.01100", "CG2R71", "7-mem ring arom C, AZUL, azulene, kevo", "315"}, {"C", "12.01100", "CG2RC7", "sp2 ring connection with single bond(!), AZUL, azulene, kevo", "316"}, {"C", "12.01100", "CG301", "aliphatic C, no hydrogens, neopentane", "317"}, {"C", "12.01100", "CG302", "aliphatic C, no hydrogens, trifluoromethyl", "318"}, {"C", "12.01100", "CG311", "aliphatic C with 1 H, CH", "319"}, {"C", "12.01100", "CG312", "aliphatic C with 1 H, difluoromethyl", "320"}, {"C", "12.01100", "CG314", "aliphatic C with 1 H, adjacent to positive N (PROT NTER) (+)", "321"}, {"C", "12.01100", "CG321", "aliphatic C for CH2", "322"}, {"C", "12.01100", "CG322", "aliphatic C for CH2, monofluoromethyl", "323"}, {"C", "12.01100", "CG323", "aliphatic C for CH2, thiolate carbon", "324"}, {"C", "12.01100", "CG324", "aliphatic C for CH2, adjacent to positive N (piperidine) (+)", "325"}, {"C", "12.01100", "CG331", "aliphatic C for methyl group (-CH3)", "326"}, {"C", "12.01100", "CG334", "aliphatic C for methyl group (-CH3), adjacent to positive N (PROT NTER) (+)", "327"}, {"C", "12.01100", "CG3AM0", "aliphatic C for CH3, NEUTRAL trimethylamine methyl carbon (#)", "328"}, {"C", "12.01100", "CG3AM1", "aliphatic C for CH3, NEUTRAL dimethylamine methyl carbon (#)", "329"}, {"C", "12.01100", "CG3AM2", "aliphatic C for CH3, NEUTRAL methylamine methyl carbon (#)", "330"}, {"C", "12.01100", "CG3C31", "cyclopropyl carbon", "331"}, {"C", "12.01100", "CG3C41", "cyclobutyl carbon", "332"}, {"C", "12.01100", "CG3C50", "5-mem ring aliphatic quaternary C (cholesterol, bile acids)", "333"}, {"C", "12.01100", "CG3C51", "5-mem ring aliphatic CH (proline CA, furanoses)", "334"}, {"C", "12.01100", "CG3C52", "5-mem ring aliphatic CH2 (proline CB/CG/CD, THF, deoxyribose)", "335"}, {"C", "12.01100", "CG3C53", "5-mem ring aliphatic CH adjacent to positive N (proline.H+ CA) (+)", "336"}, {"C", "12.01100", "CG3C54", "5-mem ring aliphatic CH2 adjacent to positive N (proline.H+ CD) (+)", "337"}, {"C", "12.01100", "CG3RC1", "bridgehead in bicyclic systems containing at least one 5-membered or smaller ring", "338"}, {"N", "14.00700", "NG1T1", "N for cyano group", "339"}, {"N", "14.00700", "NG1D1", "terminal N in azides, lsk", "340"}, {"N", "14.00700", "NG2D1", "N for neutral imine/Schiff's base (C=N-R, acyclic amidine, gunaidine)", "341"}, {"N", "14.00700", "NG2S0", "N,N-disubstituted amide, proline N (CO=NRR')", "342"}, {"N", "14.00700", "NG2S1", "peptide nitrogen (CO=NHR)", "343"}, {"N", "14.00700", "NG2S2", "terminal amide nitrogen (CO=NH2)", "344"}, {"N", "14.00700", "NG2S3", "external amine ring nitrogen (planar/aniline), phosphoramidate", "345"}, {"N", "14.00700", "NG2S4", "neutral hydroxamic acid", "346"}, {"N", "14.00700", "NG2O1", "NITB, nitrobenzene", "347"}, {"N", "14.00700", "NG2P1", "N for protonated imine/Schiff's base (C=N(+)H-R, acyclic amidinium, guanidinium)", "348"}, {"N", "14.00700", "NG2R43", "amide in 4-memebered ring (planar), AZDO, lsk", "349"}, {"N", "14.00700", "NG2R50", "double bound neutral 5-mem planar ring, purine N7", "350"}, {"N", "14.00700", "NG2R51", "single bound neutral 5-mem planar (all atom types sp2) ring, his, trp pyrrole (fused)", "351"}, {"N", "14.00700", "NG2R52", "protonated schiff base, amidinium, guanidinium in 5-membered ring, HIS, 2HPP, kevo", "352"}, {"N", "14.00700", "NG2R53", "amide in 5-memebered NON-SP2 ring (slightly pyramidized), 2PDO, kevo", "353"}, {"N", "14.00700", "NG2R57", "5-mem ring, bipyrroles", "354"}, {"N", "14.00700", "NG2R60", "double bound neutral 6-mem planar ring, pyr1, pyzn", "355"}, {"N", "14.00700", "NG2R61", "single bound neutral 6-mem planar ring imino nitrogen; glycosyl linkage", "356"}, {"N", "14.00700", "NG2R62", "double bound 6-mem planar ring with heteroatoms in o or m, pyrd, pyrm", "357"}, {"N", "14.00700", "NG2R67", "6-mem planar ring substituted with 6-mem planar ring (N-phenyl pyridinones etc.)", "358"}, {"N", "14.00700", "NG2RC0", "6/5-mem ring bridging N, indolizine, INDZ, kevo", "359"}, {"N", "14.00700", "NG301", "neutral trimethylamine nitrogen", "360"}, {"N", "14.00700", "NG311", "neutral dimethylamine nitrogen", "361"}, {"N", "14.00700", "NG321", "neutral methylamine nitrogen", "362"}, {"N", "14.00700", "NG331", "neutral ammonia nitrogen", "363"}, {"N", "14.00700", "NG3C51", "secondary sp3 amine in 5-membered ring", "364"}, {"N", "14.00700", "NG3N1", "N in hydrazine, HDZN", "365"}, {"N", "14.00700", "NG3P0", "quarternary N+, choline", "366"}, {"N", "14.00700", "NG3P1", "tertiary NH+ (PIP)", "367"}, {"N", "14.00700", "NG3P2", "secondary NH2+ (proline)", "368"}, {"N", "14.00700", "NG3P3", "primary NH3+, phosphatidylethanolamine", "369"}, {"O", "15.99940", "OG2D1", "carbonyl O: amides, esters, [neutral] carboxylic acids, aldehydes, uera", "370"}, {"O", "15.99940", "OG2D2", "carbonyl O: negative groups: carboxylates, carbonate", "371"}, {"O", "15.99940", "OG2D3", "carbonyl O: ketones", "372"}, {"O", "15.99940", "OG2D4", "6-mem aromatic carbonyl oxygen (nucleic bases)", "373"}, {"O", "15.99940", "OG2D5", "CO2 oxygen", "374"}, {"O", "15.99940", "OG2N1", "NITB, nitrobenzene", "375"}, {"O", "15.99940", "OG2P1", "=O in phosphate or sulfate", "376"}, {"O", "15.99940", "OG2R50", "FURA, furan", "377"}, {"O", "15.99940", "OG3R60", "O in 6-mem cyclic enol ether (PY01, PY02) or ester", "378"}, {"O", "15.99940", "OG301", "ether -O- !SHOULD WE HAVE A SEPARATE ENOL ETHER??? IF YES, SHOULD WE MERGE IT WITH OG3R60???", "379"}, {"O", "15.99940", "OG302", "ester -O-", "380"}, {"O", "15.99940", "OG303", "phosphate/sulfate ester oxygen", "381"}, {"O", "15.99940", "OG304", "linkage oxygen in pyrophosphate/pyrosulphate", "382"}, {"O", "15.99940", "OG311", "hydroxyl oxygen", "383"}, {"O", "15.99940", "OG312", "ionized alcohol oxygen", "384"}, {"O", "15.99940", "OG3C31", "epoxide oxygen, 1EOX, 1BOX, sc", "385"}, {"O", "15.99940", "OG3C51", "5-mem furanose ring oxygen (ether)", "386"}, {"O", "15.99940", "OG3C61", "DIOX, dioxane, ether in 6-membered ring !SHOULD WE MERGE THIS WITH OG3R60???", "387"}, {"S", "32.06000", "SG2D1", "thiocarbonyl S", "388"}, {"S", "32.06000", "SG2R50", "THIP, thiophene", "389"}, {"S", "32.06000", "SG311", "sulphur, SH, -S-", "390"}, {"S", "32.06000", "SG301", "sulfur C-S-S-C type", "391"}, {"S", "32.06000", "SG302", "thiolate sulfur (-1)", "392"}, {"S", "32.06000", "SG3O1", "sulfate -1 sulfur", "393"}, {"S", "32.06000", "SG3O2", "neutral sulfone/sulfonamide sulfur", "394"}, {"S", "32.06000", "SG3O3", "neutral sulfoxide sulfur", "395"}, {"C", "35.45300", "CLGA1", "CLET, DCLE, chloroethane, 1,1-dichloroethane", "396"}, {"C", "35.45300", "CLGA3", "TCLE, 1,1,1-trichloroethane", "397"}, {"C", "35.45300", "CLGR1", "CHLB, chlorobenzene", "398"}, {"Br", "79.90400", "BRGA1", "BRET, bromoethane", "399"}, {"Br", "79.90400", "BRGA2", "DBRE, 1,1-dibromoethane", "400"}, {"Br", "79.90400", "BRGA3", "TBRE, 1,1,1-dibromoethane", "401"}, {"Br", "79.90400", "BRGR1", "BROB, bromobenzene", "402"}, {"I", "126.90447", "IGR1", "IODB, iodobenzene", "403"}, {"F", "18.99800", "FGA1", "aliphatic fluorine, monofluoro", "404"}, {"F", "18.99800", "FGA2", "aliphatic fluorine, difluoro", "405"}, {"F", "18.99800", "FGA3", "aliphatic fluorine, trifluoro", "406"}, {"F", "18.99800", "FGP1", "anionic F, for ALF4 AlF4-", "407"}, {"F", "18.99800", "FGR1", "aromatic flourine", "408"}, {"P", "30.97380", "PG0", "neutral phosphate", "409"}, {"P", "30.97380", "PG1", "phosphate -1", "410"}, {"P", "30.97380", "PG2", "phosphate -2", "411"}, {"Al", "26.98154", "ALG1", "Aluminum, for ALF4, AlF4-", "412"}, {"H", "1.00800", "HGTIP3", "polar H, TIPS3P WATER HYDROGEN", "414"}, {"O", "15.99940", "OGTIP3", "TIPS3P WATER OXYGEN", "415"}, {"D", "0.00000", "DUM", "dummy atom", "416"}, {"He", "4.00260", "HE", "helium", "417"}, {"Ne", "20.17970", "NE", "neon", "418"}, {"LP", "0.00000", "LPH", "Lone pair for halogens", "457"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_cgenff info V(R) = Kb x (R - R0)^2 */ char * charmm36_cgenff_bonds[506][5]= {{"LPH", "CLGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"LPH", "BRGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"LPH", "IGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"CG1N1", "CG2R61", "345.00", "1.4350", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) (MP2 by kevo)"}, {"CG1N1", "CG331", "400.00", "1.4700", "ACN, acetonitrile, kevo"}, {"CG1N1", "NG1T1", "1053.00", "1.1800", "ACN, acetonitrile; 3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) (MP2 by kevo)"}, {"CG1T1", "CG1T1", "960.00", "1.2200", "2BTY, 2-butyne, kevo"}, {"CG1T1", "CG1T2", "980.00", "1.2200", "PRPY, propyne, kevo"}, {"CG1T1", "CG331", "410.00", "1.4650", "2BTY, 2-butyne, kevo"}, {"CG1T2", "HGPAM1", "426.00", "1.0700", "PRPY, propyne, xxwy and kevo"}, {"CG251O", "CG25C1", "440.00", "1.3400", "OIRD, oxindol-3-ylidene rhodanine; from PY02, 2h-pyran (re-optimize); kevo"}, {"CG251O", "CG2DC3", "570.00", "1.3400", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "255.00", "1.4800", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "NG2R53", "200.00", "1.4100", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG251O", "SG311", "200.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "440.00", "1.3400", "OIRD, oxindol-3-ylidene rhodanine; from PY02, 2h-pyran (re-optimize); kevo"}, {"CG252O", "CG2DC3", "570.00", "1.3400", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "255.00", "1.4800", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "NG2R53", "200.00", "1.4100", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "SG311", "200.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2DC3", "500.00", "1.3420", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C1", "CG2R53", "247.00", "1.4900", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "290.00", "1.4800", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2DC3", "500.00", "1.3420", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C2", "CG2R53", "247.00", "1.4900", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "290.00", "1.4800", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2D1", "CG2D1", "440.00", "1.3400", "LIPID butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1O", "440.00", "1.3180", "PY01, 4h-pyran"}, {"CG2D1", "CG2D2", "500.00", "1.3420", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D2O", "440.00", "1.3180", "PY01, 4h-pyran"}, {"CG2D1", "CG301", "240.00", "1.5020", "CHOLEST cholesterol"}, {"CG2D1", "CG321", "365.00", "1.5020", "LIPID butene; from propene, yin,adm jr., 12/95"}, {"CG2D1", "CG331", "383.00", "1.5040", "LIPID butene, yin,adm jr., 12/95"}, {"CG2D1", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2D1", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1", "HGA4", "360.50", "1.1000", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1O", "CG2D2", "600.00", "1.3400", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "CG2DC1", "440.00", "1.3400", "PY02, 2h-pyran"}, {"CG2D1O", "NG301", "420.00", "1.3550", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG311", "420.00", "1.3550", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG321", "420.00", "1.4000", "AMET, ethenamine; mp2-geom, checked molvib; pram"}, {"CG2D1O", "OG301", "385.00", "1.3600", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "OG3R60", "500.00", "1.3470", "PY01, 4h-pyran"}, {"CG2D1O", "HGA4", "360.50", "1.1000", "PY01, 4h-pyran"}, {"CG2D2", "CG2D2", "510.00", "1.3300", "LIPID ethene yin,adm jr., 12/95"}, {"CG2D2", "CG2D2O", "600.00", "1.3400", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "HGA5", "365.00", "1.1000", "LIPID propene; from ethene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2DC2", "440.00", "1.3400", "PY02, 2h-pyran"}, {"CG2D2O", "NG301", "420.00", "1.3550", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "420.00", "1.3550", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG321", "420.00", "1.4000", "AMET, ethenamine; mp2-geom, checked molvib; pram"}, {"CG2D2O", "OG301", "385.00", "1.3600", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "OG3R60", "500.00", "1.3470", "PY01, 4h-pyran"}, {"CG2D2O", "HGA4", "360.50", "1.1000", "PY01, 4h-pyran"}, {"CG2DC1", "CG2DC1", "440.00", "1.3400", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC2", "300.00", "1.4500", "RETINOL 13DB, Butadiene @@@@@ Kenno: 1.47 --> 1.45 @@@@@"}, {"CG2DC1", "CG2DC3", "500.00", "1.3420", "RETINOL 13DB, Butadiene"}, {"CG2DC1", "CG2O1", "440.00", "1.4890", "RETINOL CROT"}, {"CG2DC1", "CG2O3", "440.00", "1.4890", "RETINOL PRAC"}, {"CG2DC1", "CG2O4", "300.00", "1.4798", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2O5", "300.00", "1.4800", "BEON, butenone, kevo"}, {"CG2DC1", "CG2R61", "365.00", "1.4500", "compromise between HDZ1B and STYR by kevo"}, {"CG2DC1", "CG301", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC1", "CG321", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC1", "CG331", "383.00", "1.5040", "RETINOL 13DP, 1,3-pentadiene"}, {"CG2DC1", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2DC1", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "HGA4", "360.50", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "CG2DC2", "440.00", "1.3400", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC3", "500.00", "1.3420", "RETINOL 13DB, Butadiene"}, {"CG2DC2", "CG2O1", "440.00", "1.4890", "RETINOL CROT"}, {"CG2DC2", "CG2O3", "440.00", "1.4890", "RETINOL PRAC"}, {"CG2DC2", "CG2O4", "300.00", "1.4798", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2O5", "300.00", "1.4800", "BEON, butenone, kevo"}, {"CG2DC2", "CG2R61", "365.00", "1.4500", "compromise between HDZ1B and STYR by kevo"}, {"CG2DC2", "CG301", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC2", "CG321", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC2", "CG331", "383.00", "1.5040", "RETINOL 13DP, 1,3-pentadiene"}, {"CG2DC2", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2DC2", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "HGA4", "360.50", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC3", "HGA5", "365.00", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2N1", "NG2D1", "500.00", "1.3100", "MGU1, methylguanidine"}, {"CG2N1", "NG2P1", "463.00", "1.3650", "PROT 403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"CG2N1", "NG311", "500.00", "1.4400", "MGU2, methylguanidine2"}, {"CG2N1", "NG321", "450.00", "1.4400", "MGU1, methylguanidine"}, {"CG2N2", "CG2R61", "300.00", "1.4400", "BAMI, benzamidinium, mp2 geom and molvib, pram"}, {"CG2N2", "CG331", "280.00", "1.5000", "AMDN, amidinium, sz (verified by pram)"}, {"CG2N2", "NG2D1", "621.00", "1.2900", "MT2A, DH3T, fylin"}, {"CG2N2", "NG2P1", "475.00", "1.3200", "AMDN, amidinium; BAMI, benzamidinium; mp2 geom and molvib; pram"}, {"CG2N2", "NG321", "365.00", "1.4200", "MT2A, DH3T, fylin"}, {"CG2N2", "SG311", "187.00", "1.7900", "MT2R(+), HH3R, MT2A, DH3T, fylin"}, {"CG2O1", "CG2R61", "300.00", "1.4750", "3NAP, nicotamide. kevo: 1.45 -> 1.475"}, {"CG2O1", "CG2R62", "302.00", "1.4800", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG311", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG314", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG321", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG324", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG331", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG3C51", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S0", "430.00", "1.3500", "DMA, Dimethylacetamide, xxwy"}, {"CG2O1", "NG2S1", "370.00", "1.3450", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "NG2S2", "430.00", "1.3600", "PROT from NG2S2 CT3, neutral glycine, adm jr."}, {"CG2O1", "OG2D1", "620.00", "1.2300", "PROT Peptide geometry, condensed phase (LK)"}, {"CG2O1", "HGR52", "317.13", "1.1000", "FORM, formamide reverted to value from par_all22_prot.inp and par_cgenff_1d.inp"}, {"CG2O2", "CG2R61", "254.00", "1.4800", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2O2", "CG311", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG331", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "OG2D1", "750.00", "1.2200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG2O2", "OG302", "150.00", "1.3340", "LIPID methyl acetate"}, {"CG2O2", "OG311", "230.00", "1.4000", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "HGR52", "348.00", "1.0960", "FORH, formic acid, xxwy"}, {"CG2O3", "CG2O5", "250.00", "1.5200", "COMPDS peml unmodified"}, {"CG2O3", "CG2R61", "200.00", "1.5000", "3CPY, pyridine-3-carboxylate (PYRIDINE nicotinic acid), yin"}, {"CG2O3", "CG301", "200.00", "1.5220", "AMOL, alpha-methoxy-lactic acid, og par22 CT1 CC"}, {"CG2O3", "CG311", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG324", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG331", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG3C51", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "OG2D2", "525.00", "1.2600", "PROT adm jr. 7/23/91, acetic acid"}, {"CG2O3", "HGR52", "238.00", "1.1422", "FORA, formate, kevo"}, {"CG2O4", "CG2R61", "300.00", "1.4798", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O4", "CG321", "250.00", "1.5000", "PALD, propionaldehyde from AALD adm 11/08"}, {"CG2O4", "CG331", "250.00", "1.5000", "AALD, acetaldehyde adm 11/08"}, {"CG2O4", "OG2D1", "700.00", "1.2150", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2O4", "HGR52", "330.00", "1.1100", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2O5", "CG2R61", "254.00", "1.4600", "3ACP, 3-acetylpyridine; BF6 BF7 C36 C37; PHMK, phenyl methyl ketone, mcs"}, {"CG2O5", "CG311", "330.00", "1.5000", "COMPDS peml re-initialized by kevo from ACO adm 11/08"}, {"CG2O5", "CG321", "330.00", "1.5000", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2O5", "CG331", "330.00", "1.5000", "ACO, acetone adm 11/08"}, {"CG2O5", "OG2D3", "700.00", "1.2300", "ACO, acetone adm 11/08"}, {"CG2O6", "NG2S1", "510.00", "1.3700", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"CG2O6", "NG2S2", "430.00", "1.3600", "UREA, Urea. Uses a slack parameter from PROT from NG2S2 CT3, neutral glycine, adm jr. ==> re-optimize"}, {"CG2O6", "OG2D1", "650.00", "1.2300", "UREA, Urea. Uses a slack parameter from PROT adm jr. 4/10/91, acetamide ==> re-optimize"}, {"CG2O6", "OG2D2", "314.50", "1.2940", "PROTMOD carbonate"}, {"CG2O6", "OG302", "350.00", "1.3500", "DMCB and DECB and DMCA, dimethyl and diehtyl carbamate and dimethyl carbonate, cacha and kevo and xxwy"}, {"CG2O6", "OG311", "185.00", "1.4800", "CO31, bicarbonate, xxwy"}, {"CG2O6", "SG2D1", "300.00", "1.6300", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2O6", "SG311", "190.00", "1.7500", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2O7", "NG2D1", "920.00", "1.1900", "MICY, EICY: isocyanates, xxwy (QM: 1.216; Crystal survey: 1.183)"}, {"CG2O7", "OG2D5", "986.00", "1.1700", "PROT CO2, JES; re-optimized by kevo (1.160); compromised with isocyanate, both crystal survey and QM data, kevo and xxwy"}, {"CG2R51", "CG2R51", "410.00", "1.3600", "PROT histidine, adm jr., 6/27/90"}, {"CG2R51", "CG2R52", "360.00", "1.4000", "PYRZ, pyrazole"}, {"CG2R51", "CG2R53", "264.00", "1.5080", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R57", "410.00", "1.3600", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51; lf"}, {"CG2R51", "CG2RC0", "350.00", "1.4300", "INDO/TRP"}, {"CG2R51", "CG2RC7", "340.00", "1.4050", "AZUL, Azulene, kevo"}, {"CG2R51", "CG321", "229.63", "1.5000", "PROT his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CG2R51", "CG331", "229.63", "1.5000", "PROT his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CG2R51", "CG3C52", "350.00", "1.5100", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline; 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C54", "325.00", "1.4960", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "NG2R50", "400.00", "1.3800", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R51", "400.00", "1.3800", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R52", "380.00", "1.3700", "PROT his, adm jr., 6/28/90"}, {"CG2R51", "NG2R57", "400.00", "1.3800", "13BPO, 1,3-bipyrrole; from CG2R51 NG2R51; lf"}, {"CG2R51", "NG2RC0", "400.00", "1.3710", "INDZ, indolizine, kevo"}, {"CG2R51", "NG3C51", "360.00", "1.4120", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "NG3P2", "330.00", "1.4800", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "OG2R50", "450.00", "1.3710", "FURA, furan"}, {"CG2R51", "OG3C51", "360.00", "1.3700", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "SG2R50", "300.00", "1.7300", "THIP, thiophene"}, {"CG2R51", "HGR51", "350.00", "1.0800", "INDO/TRP"}, {"CG2R51", "HGR52", "375.00", "1.0830", "PROT his, adm jr., 6/27/90"}, {"CG2R52", "CG2R52", "400.00", "1.3800", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "CG2RC0", "360.00", "1.4200", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG3C52", "350.00", "1.5050", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "400.00", "1.3150", "PYRZ, pyrazole; 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R52", "490.00", "1.3000", "2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R52", "HGR52", "375.00", "1.0830", "PYRZ, pyrazole"}, {"CG2R53", "CG3C41", "200.00", "1.5600", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C52", "300.00", "1.5300", "350 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG2R43", "370.00", "1.3800", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "NG2R50", "400.00", "1.3200", "PROT his, ADM JR., 7/20/89"}, {"CG2R53", "NG2R51", "320.00", "1.3740", "NA A, adm jr. 11/97"}, {"CG2R53", "NG2R52", "380.00", "1.3200", "PROT his, adm jr., 6/27/90"}, {"CG2R53", "NG2R53", "460.00", "1.3800", "370 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG3C51", "380.00", "1.4000", "1.395 2IMI, 2-imidazoline, kevo"}, {"CG2R53", "OG2D1", "570.00", "1.2350", "620 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "OG2R50", "450.00", "1.3710", "OXAZ, oxazole"}, {"CG2R53", "OG3C51", "295.50", "1.3570", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"CG2R53", "SG2D1", "400.00", "1.6300", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "SG2R50", "300.00", "1.7300", "THAZ, thiazole"}, {"CG2R53", "SG311", "170.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "HGR52", "340.00", "1.0900", "PROT his, adm jr., 6/28/29"}, {"CG2R53", "HGR53", "333.00", "1.0700", "PROT his, adm jr., 6/27/90"}, {"CG2R57", "CG2R57", "413.00", "1.4500", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R57", "NG2R57", "390.00", "1.3950", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R61", "CG2R61", "305.00", "1.3750", "PROT benzene, JES 8/25/89"}, {"CG2R61", "CG2R62", "394.00", "1.3750", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R63", "265.00", "1.4270", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R64", "250.00", "1.3550", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R66", "305.00", "1.3700", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R67", "305.00", "1.3750", "COMPDS peml"}, {"CG2R61", "CG2RC0", "300.00", "1.3600", "INDO/TRP"}, {"CG2R61", "CG311", "230.00", "1.4900", "NAMODEL difluorotoluene"}, {"CG2R61", "CG312", "198.00", "1.4500", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG321", "230.00", "1.4900", "PROT phe,tyr, JES 8/25/89"}, {"CG2R61", "CG324", "230.00", "1.4900", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG331", "230.00", "1.4900", "PROT toluene, adm jr. 3/7/92"}, {"CG2R61", "NG2O1", "230.00", "1.4020", "NITB, nitrobenzene"}, {"CG2R61", "NG2R60", "450.00", "1.3050", "PYR1, pyridine"}, {"CG2R61", "NG2R61", "380.00", "1.3790", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "NG2R62", "450.00", "1.3050", "PYRD, pyridazine"}, {"CG2R61", "NG2RC0", "370.00", "1.3790", "INDZ, indolizine, kevo"}, {"CG2R61", "NG2S1", "305.00", "1.4140", "RETINOL PACP"}, {"CG2R61", "NG2S3", "400.00", "1.3900", "PYRIDINE aminopyridine, adm jr., 7/94"}, {"CG2R61", "NG301", "325.00", "1.4100", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "NG311", "330.00", "1.4000", "FEOZ, phenoxazine; PMSM N-phenylmethanesulfonamide; xxwy"}, {"CG2R61", "NG3N1", "680.00", "1.4100", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "OG301", "230.00", "1.3820", "COMPDS peml"}, {"CG2R61", "OG303", "340.00", "1.3800", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG311", "334.30", "1.4110", "PROT MeOH, EMB 10/10/89,"}, {"CG2R61", "OG312", "525.00", "1.2600", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "OG3R60", "280.00", "1.3500", "FEOZ, phenoxazine, erh based on PY02, 2h-pyran"}, {"CG2R61", "SG311", "280.00", "1.7500", "FETZ, phenothiazine, erh based on PY02, 2h-pyran"}, {"CG2R61", "SG3O1", "230.00", "1.7800", "benzene sulfonate anion, og"}, {"CG2R61", "SG3O2", "190.00", "1.7300", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2R61", "CLGR1", "350.00", "1.7400", "CHLB, chlorobenzene"}, {"CG2R61", "BRGR1", "230.00", "1.9030", "BROB, bromobenzene"}, {"CG2R61", "IGR1", "190.00", "2.1150", "IODB, iodobenzene"}, {"CG2R61", "HGR61", "340.00", "1.0800", "PROT phe,tyr JES 8/25/89"}, {"CG2R61", "HGR62", "340.00", "1.0800", "NA, DFT"}, {"CG2R62", "CG2R62", "420.00", "1.3500", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R63", "302.00", "1.4030", "NA T, adm jr. 11/97"}, {"CG2R62", "CG2R64", "320.00", "1.4060", "NA C, adm jr. 11/97"}, {"CG2R62", "CG2R67", "305.00", "1.3800", "PYO2B, fylin"}, {"CG2R62", "CG331", "230.00", "1.4780", "NA T, adm jr. 11/97"}, {"CG2R62", "NG2R61", "302.00", "1.3430", "NA C, adm jr. 11/97"}, {"CG2R62", "NG2R62", "340.00", "1.3650", "TC243C, 4(3H)-quinazolinone; from CG2R61 NG2R62; isg"}, {"CG2R62", "NG2R67", "302.00", "1.3430", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R61; isg"}, {"CG2R62", "OG3R60", "330.00", "1.3700", "RIN, coumarin, isg"}, {"CG2R62", "HGR62", "350.00", "1.0900", "NA C,U, JWK"}, {"CG2R62", "HGR63", "350.00", "1.0900", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "CG2RC0", "302.00", "1.3600", "NA G, adm jr. 11/97"}, {"CG2R63", "NG2R61", "340.00", "1.3830", "NA U,T adm jr. 11/97"}, {"CG2R63", "NG2R62", "350.00", "1.3350", "NA C, adm jr. 11/97"}, {"CG2R63", "NG2R67", "302.00", "1.3430", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R67 CG2R62, 1PH4PO; isg"}, {"CG2R63", "OG2D4", "660.00", "1.2340", "NA U,A,G par_a4 adm jr. 10/2/91"}, {"CG2R63", "OG3R60", "235.00", "1.4000", "RIN, coumarin, isg"}, {"CG2R63", "SG2D1", "373.00", "1.6550", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R64", "CG2RC0", "360.00", "1.3580", "NA A, adm jr. 11/97"}, {"CG2R64", "NG2R60", "450.00", "1.3050", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R64", "NG2R61", "400.00", "1.3920", "NA G"}, {"CG2R64", "NG2R62", "400.00", "1.3420", "NA A, adm jr. 11/97"}, {"CG2R64", "NG2R67", "400.00", "1.3920", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R64 NG2R61, NA; isg"}, {"CG2R64", "NG2S1", "305.00", "1.4140", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG2R64", "NG2S3", "360.00", "1.3660", "NA C,A,G JWK, adm jr. 10/2/91"}, {"CG2R64", "NG301", "390.00", "1.3550", "TMC, yxu"}, {"CG2R64", "SG311", "262.00", "1.7410", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2R61 SG311, 4O2SM; isg"}, {"CG2R64", "HGR62", "380.00", "1.0900", "NA G,A, JWK par_a7 9/30/91"}, {"CG2R66", "CG2R67", "305.00", "1.3800", "PYO2F, fylin"}, {"CG2R66", "FGR1", "400.00", "1.3580", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R67", "300.00", "1.4900", "COMPDS peml"}, {"CG2R67", "CG2RC0", "300.00", "1.4200", "CRBZ, carbazole, erh"}, {"CG2R67", "NG2R60", "450.00", "1.3100", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R67", "NG2R67", "403.00", "1.4110", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R61; isg"}, {"CG2R71", "CG2R71", "360.00", "1.3850", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "400.00", "1.3800", "AZUL, Azulene, kevo"}, {"CG2R71", "HGR71", "355.00", "1.0900", "AZUL, Azulene, kevo"}, {"CG2RC0", "CG2RC0", "360.00", "1.3850", "INDO/TRP"}, {"CG2RC0", "CG3C52", "305.00", "1.5200", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "NG2R50", "310.00", "1.3650", "NA G, adm jr. 11/97"}, {"CG2RC0", "NG2R51", "300.00", "1.3750", "NA A, adm jr. 11/97"}, {"CG2RC0", "NG2R62", "350.00", "1.3150", "NA G, adm jr. 11/97"}, {"CG2RC0", "NG2RC0", "245.00", "1.4170", "INDZ, indolizine, kevo"}, {"CG2RC0", "NG3C51", "330.00", "1.4000", "INDI, indoline, kevo"}, {"CG2RC0", "OG2R50", "450.00", "1.3700", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "OG3C51", "330.00", "1.3890", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2RC0", "SG2R50", "300.00", "1.7600", "ZTHP, benzothiophene, kevo"}, {"CG2RC7", "CG2RC7", "230.00", "1.5200", "AZUL, Azulene, kevo"}, {"CG301", "CG311", "222.50", "1.5000", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG321", "222.50", "1.5380", "RETINOL TMCH/MECH"}, {"CG301", "CG331", "222.50", "1.5380", "RETINOL TMCH/MECH"}, {"CG301", "OG301", "360.00", "1.4150", "AMOL, alpha-methoxy-lactic acid, og all34_ethers_1a CG32A OG30A"}, {"CG301", "OG302", "340.00", "1.4300", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide"}, {"CG301", "OG311", "428.00", "1.4200", "AMOL, alpha-methoxy-lactic acid, og par22 OH1 CT1"}, {"CG301", "CLGA3", "190.00", "1.7700", "TCLE"}, {"CG301", "BRGA3", "120.00", "1.9540", "TBRE"}, {"CG302", "CG321", "250.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG302", "CG331", "250.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG302", "FGA3", "265.00", "1.3400", "FLUROALK fluoroalkanes"}, {"CG311", "CG311", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG314", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG324", "222.50", "1.5300", "FLAVOP PIP1,2,3"}, {"CG311", "CG331", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG311", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG311", "NG2R53", "320.00", "1.4300", "drug design project, xxwy"}, {"CG311", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG311", "OG301", "360.00", "1.4150", "all34_ethers_1a CG32A OG30A, gk or og"}, {"CG311", "OG302", "340.00", "1.4300", "LIPID phosphate"}, {"CG311", "OG303", "340.00", "1.4300", "LIPID phosphate"}, {"CG311", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG311", "OG312", "358.00", "1.3130", "COMPDS peml original OG311 CG311 428.000 1.4200"}, {"CG311", "CLGA1", "190.00", "1.7768", "DCLE"}, {"CG311", "BRGA2", "140.00", "1.9560", "DBRE"}, {"CG311", "HGA1", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG312", "CG331", "198.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG312", "PG1", "270.00", "1.8800", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG312", "PG2", "270.00", "1.8800", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG312", "FGA2", "349.00", "1.3530", "FLUROALK fluoroalkanes"}, {"CG312", "HGA7", "346.00", "1.0828", "FLUROALK fluoroalkanes"}, {"CG314", "CG321", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG331", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "NG3P2", "200.00", "1.4900", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG314", "NG3P3", "200.00", "1.4800", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG314", "HGA1", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "222.50", "1.5300", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG324", "222.50", "1.5300", "FLAVOP PIP1,2,3"}, {"CG321", "CG331", "222.50", "1.5280", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG3C31", "275.00", "1.5000", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG321", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG321", "NG2D1", "293.00", "1.4400", "EEPI, fylin"}, {"CG321", "NG2R51", "400.00", "1.4580", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG331 NG2R51, kevo"}, {"CG321", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG321", "NG2S3", "322.00", "1.4400", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG321", "NG311", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG321", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG321", "OG301", "360.00", "1.4150", "diethylether, alex"}, {"CG321", "OG302", "320.00", "1.4400", "PROTNA serine/threonine phosphate"}, {"CG321", "OG303", "320.00", "1.4400", "PROTNA serine/threonine phosphate"}, {"CG321", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG321", "OG312", "450.00", "1.3300", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG321", "OG3C61", "360.00", "1.4150", "DIOX, dioxane"}, {"CG321", "OG3R60", "280.00", "1.4000", "PY02, 2h-pyran"}, {"CG321", "PG1", "270.00", "1.8900", "BDFP, Benzylphosphonate, Sasha re-optimize?"}, {"CG321", "PG2", "270.00", "1.8900", "BDFD, Benzylphosphonate, Sasha / re-optimize?"}, {"CG321", "SG301", "214.00", "1.8160", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"CG321", "SG311", "198.00", "1.8180", "PROT fitted to C-S s 9/26/92 (FL)"}, {"CG321", "SG3O1", "185.00", "1.8070", "ESNA, ethyl sulfonate, xhe"}, {"CG321", "SG3O2", "185.00", "1.7900", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG321", "SG3O3", "185.00", "1.8100", "MESO, methylethylsulfoxide, kevo"}, {"CG321", "CLGA1", "220.00", "1.7880", "CLET, chloroethane"}, {"CG321", "BRGA1", "160.00", "1.9660", "BRET"}, {"CG321", "HGA2", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG322", "CG331", "170.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG322", "FGA1", "420.00", "1.3740", "FLUROALK fluoroalkanes"}, {"CG322", "HGA6", "342.00", "1.0828", "FLUROALK fluoroalkanes"}, {"CG323", "CG331", "190.00", "1.5310", "PROT ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG323", "SG302", "205.00", "1.8360", "PROT methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG323", "HGA2", "300.00", "1.1110", "PROT ethylthiolate"}, {"CG323", "HGA3", "300.00", "1.1110", "PROT methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG324", "CG331", "222.50", "1.5280", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG3C31", "222.50", "1.5280", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"CG324", "NG2O1", "226.00", "1.4900", "NIPR, nitropropane, abar"}, {"CG324", "NG2P1", "300.00", "1.4530", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"CG324", "NG3P0", "215.00", "1.5100", "LIPID tetramethylammonium"}, {"CG324", "NG3P1", "200.00", "1.4800", "FLAVOP PIP1,2,3"}, {"CG324", "NG3P2", "200.00", "1.4900", "PIP, piperidine"}, {"CG324", "NG3P3", "200.00", "1.4900", "MAMM, methylammonium 1.48 -> 1.49 based on CCSDT calc (kevo) and xtal survey (pram)"}, {"CG324", "HGA2", "284.50", "1.1000", "FLAVOP PIP1,2,3"}, {"CG324", "HGP5", "300.00", "1.0800", "LIPID tetramethylammonium"}, {"CG331", "CG331", "222.50", "1.5300", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG331", "CG3RC1", "222.50", "1.5380", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "NG2D1", "310.00", "1.4400", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG331", "NG2R51", "400.00", "1.4580", "NA 9-M-G/T/U, adm jr."}, {"CG331", "NG2R61", "400.00", "1.4560", "NA 9-M-A/C, adm jr."}, {"CG331", "NG2S0", "315.00", "1.4340", "DMA, Dimethylacetamide, xxwy"}, {"CG331", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG331", "NG2S3", "266.00", "1.4600", "NMSM, N-methyl-sulfamate; PHA, phosphoramidate; my"}, {"CG331", "NG301", "315.00", "1.4420", "TMC, yxu"}, {"CG331", "NG311", "255.00", "1.4630", "MGU2, methylguanidine2"}, {"CG331", "OG301", "360.00", "1.4150", "diethylether, alex"}, {"CG331", "OG302", "340.00", "1.4300", "PROT adm jr., 4/05/91, for PRES CG311 from methylacetate"}, {"CG331", "OG303", "340.00", "1.4300", "NA DMP, ADM Jr."}, {"CG331", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG331", "OG312", "450.00", "1.3300", "PROT methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG331", "SG301", "214.00", "1.8160", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"CG331", "SG311", "240.00", "1.8160", "PROT fitted to C-S s 9/26/92 (FL)"}, {"CG331", "SG3O1", "195.00", "1.8370", "MSNA, methyl sulfonate, xhe"}, {"CG331", "SG3O2", "210.00", "1.7900", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; compromise between crystal and mp2; xxwy and xhe"}, {"CG331", "SG3O3", "240.00", "1.8000", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"CG331", "HGA3", "322.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG334", "NG2O1", "250.00", "1.4800", "NIME, nitromethane, abar"}, {"CG334", "NG2P1", "300.00", "1.4530", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"CG334", "NG3P0", "215.00", "1.5100", "LIPID tetramethylammonium"}, {"CG334", "NG3P1", "200.00", "1.4800", "FLAVOP PIP1,2,3"}, {"CG334", "NG3P3", "200.00", "1.4800", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG334", "HGA3", "322.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG334", "HGP5", "300.00", "1.0800", "LIPID tetramethylammonium"}, {"CG3AM0", "NG301", "235.00", "1.4540", "AMINE aliphatic amines"}, {"CG3AM0", "HGAAM0", "311.00", "1.1110", "AMINE aliphatic amines"}, {"CG3AM1", "NG311", "255.00", "1.4630", "AMINE aliphatic amines"}, {"CG3AM1", "HGAAM1", "313.80", "1.0980", "AMINE aliphatic amines"}, {"CG3AM2", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG3AM2", "HGAAM2", "314.50", "1.0856", "AMINE aliphatic amines"}, {"CG3C31", "CG3C31", "240.00", "1.5010", "PROTMOD cyclopropane"}, {"CG3C31", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C31", "OG3C31", "220.00", "1.4500", "1EOX, 1-ethylene oxide, sc and kevo"}, {"CG3C31", "HGA1", "340.00", "1.0830", "PROTMOD cyclopropane"}, {"CG3C31", "HGA2", "340.00", "1.0830", "PROTMOD cyclopropane"}, {"CG3C41", "CG3C41", "270.00", "1.5400", "CBU, cyclobutane, AZDO, 2-azetidinone, lsk"}, {"CG3C41", "NG2R43", "245.00", "1.4500", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "OG3C51", "350.00", "1.4223", "OXTN, oxetane, gmu"}, {"CG3C41", "HGA2", "348.00", "1.0930", "CBU, cyclobutane, AZDO, 2-azetidinone, lsk"}, {"CG3C51", "CG3C51", "195.00", "1.5180", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "CG3C52", "195.00", "1.5180", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "CG3C53", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C51", "NG2R51", "220.00", "1.4580", "NA G/T/U"}, {"CG3C51", "NG2R61", "220.00", "1.4560", "NA A/C"}, {"CG3C51", "NG2S0", "320.00", "1.4340", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "NG2S3", "360.00", "1.4620", "NABAKB phosphoramidates"}, {"CG3C51", "NG301", "220.00", "1.4560", "NADH, NDPH; Kenno: reverted to A/C from par_all27_na.prm"}, {"CG3C51", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG3C51", "OG301", "334.30", "1.4110", "THF2, THF-2'OMe, from Nucl. Acids, ed"}, {"CG3C51", "OG303", "340.00", "1.4300", "LIPID phosphate"}, {"CG3C51", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG3C51", "OG3C51", "350.00", "1.4250", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "FGA1", "420.00", "1.3740", "FLUROALK fluoroalkanes"}, {"CG3C51", "HGA1", "307.00", "1.1000", "THF, THF neutron diffr., 5/30/06, viv"}, {"CG3C51", "HGA6", "342.00", "1.0828", "T2FU, copied from FLUROALK fluoroalkanes by kevo"}, {"CG3C52", "CG3C52", "195.00", "1.5300", "THF, nucleotide CSD/NDB survey, 5/30/06,viv; increased to 1.53 by kevo"}, {"CG3C52", "CG3C53", "222.50", "1.5270", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "222.50", "1.5370", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C52", "NG2R50", "400.00", "1.4700", "2IMI, 2-imidazoline; 2HPR, 2H-pyrrole, kevo"}, {"CG3C52", "NG2R53", "370.00", "1.4500", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "NG2S0", "320.00", "1.4550", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "NG3C51", "400.00", "1.4780", "PRLD, pyrrolidine; 2PRL, 2-pyrroline, kevo"}, {"CG3C52", "OG3C51", "350.00", "1.4250", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C52", "HGA2", "307.00", "1.1000", "THF, THF neutron diffr., 5/30/06, viv"}, {"CG3C53", "NG2R61", "220.00", "1.4560", "NA A/C"}, {"CG3C53", "NG3P2", "320.00", "1.4850", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "OG3C51", "240.00", "1.4460", "NA NA"}, {"CG3C53", "HGA1", "330.00", "1.0800", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C54", "210.00", "1.5600", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"CG3C54", "NG2R52", "320.00", "1.4600", "2IMP, 2-imidazoline.H+, kevo"}, {"CG3C54", "NG3C51", "235.00", "1.4300", "IMDP, imidazolidine ! partial dbl bond ==> RE-OPTIMIZE?, erh and kevo"}, {"CG3C54", "NG3P2", "320.00", "1.5150", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93 kenno: 1.502 --> 1.515 (CGenFF is not for peptides!)"}, {"CG3C54", "HGA2", "309.00", "1.1110", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3RC1", "222.50", "1.5230", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "NG2R51", "220.00", "1.4580", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "NG2R53", "370.00", "1.4500", "CBHH, glycoluril, (CG3C52 NG2R53), jing"}, {"CG3RC1", "NG2R61", "220.00", "1.4560", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "OG3C51", "260.00", "1.4200", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3RC1", "HGA1", "309.00", "1.1110", "CARBOCY carbocyclic sugars"}, {"NG2D1", "NG2S1", "550.00", "1.3600", "HDZ1, hydrazone model cmpd"}, {"NG2D1", "HGP1", "455.00", "1.0000", "MGU2, methylguanidine2"}, {"NG2O1", "OG2N1", "580.00", "1.2250", "NITB, nitrobenzene"}, {"NG2P1", "HGP2", "455.00", "1.0000", "RETINOL SCH2, Schiff's base, protonated"}, {"NG2R43", "HGP1", "403.00", "1.0150", "AZDO, 2-azetidinone, kevo"}, {"NG2R50", "NG2R50", "340.00", "1.2900", "OXAD, oxadiazole123"}, {"NG2R50", "NG2R51", "360.00", "1.3550", "PYRZ, pyrazole"}, {"NG2R50", "NG3C51", "420.00", "1.4110", "2PRZ, 2-pyrazoline, kevo"}, {"NG2R50", "OG2R50", "280.00", "1.3950", "ISOX, isoxazole"}, {"NG2R50", "SG2R50", "270.00", "1.7000", "ISOT, isothiazole"}, {"NG2R51", "HGP1", "474.00", "1.0100", "NA G, adm jr. 11/97"}, {"NG2R52", "HGP2", "453.00", "1.0000", "PROT his, adm jr., 6/27/90"}, {"NG2R53", "HGP1", "470.00", "1.0150", "440 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"NG2R57", "NG2R57", "450.00", "1.3650", "11BPO, 1,1-bipyrrole, lf"}, {"NG2R61", "HGP1", "474.00", "1.0100", "NA C,U, JWK"}, {"NG2R61", "HGP2", "474.00", "1.0100", "NA C,U, JWK"}, {"NG2R62", "NG2R62", "420.00", "1.3200", "PYRD, pyridazine"}, {"NG2S1", "HGP1", "440.00", "0.9970", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "HGP1", "480.00", "1.0000", "PROT adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NG2S3", "PG1", "180.00", "1.7920", "NABAKB phosphoramidates"}, {"NG2S3", "SG3O1", "224.00", "1.7000", "NMSM, N-methyl-sulfamate, my (QM: 1.74; Crystal: 1.637 1.665 1.656 1.672, aver: 1.658)"}, {"NG2S3", "HGP1", "432.50", "1.0250", "NABAKB phosphoramidates"}, {"NG2S3", "HGP4", "488.00", "1.0000", "NA A,C,G, JWK, adm jr. 7/24/91"}, {"NG311", "SG3O2", "235.00", "1.6500", "MMSM, N-methylmethanesulfonamide and other sulfonamides,(org 1.6950) compromise between crystal and mp2, xxwy"}, {"NG311", "HGP1", "442.00", "1.0210", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"NG311", "HGPAM1", "447.80", "1.0190", "AMINE aliphatic amines"}, {"NG321", "SG3O2", "240.00", "1.6800", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; (org 1.730) compromise between crystal and mp2, xxwy"}, {"NG321", "HGP1", "454.00", "1.0200", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"NG321", "HGPAM2", "453.10", "1.0140", "AMINE aliphatic amines"}, {"NG331", "HGPAM3", "455.50", "1.0140", "AMINE aliphatic amines"}, {"NG3C51", "NG3P2", "270.00", "1.4400", "PRZP, Pyrazolidine.H+, kevo"}, {"NG3C51", "HGP1", "450.00", "1.0180", "PRLD, pyrrolidine; 2PRL, 2-pyrroline, kevo"}, {"NG3N1", "NG3N1", "355.00", "1.4000", "HDZN, hydrazine, ed"}, {"NG3N1", "HGP1", "437.00", "1.0100", "HDZN, hydrazine, ed"}, {"NG3P0", "OG311", "245.00", "1.4000", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"NG3P0", "OG312", "310.00", "1.4000", "TMAO, trimethylamine N-oxide, xxwy and ejd"}, {"NG3P1", "HGP2", "403.00", "1.0400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"NG3P2", "HGP2", "460.00", "1.0060", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3P3", "HGP2", "403.00", "1.0400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"OG2P1", "PG0", "580.00", "1.4800", "MP_0 reorganization, kevo"}, {"OG2P1", "PG1", "500.00", "1.5100", "MP_1 reorganization, kevo"}, {"OG2P1", "PG2", "400.00", "1.5200", "MP_2 reorganization, kevo"}, {"OG2P1", "SG3O1", "540.00", "1.4480", "LIPID methylsulfate"}, {"OG2P1", "SG3O2", "630.00", "1.4400", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; compromise between crystal and mp2; xxwy and xhe"}, {"OG2P1", "SG3O3", "540.00", "1.5300", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"OG303", "PG0", "230.00", "1.6100", "MP_0 reorganization, kevo"}, {"OG303", "PG1", "190.00", "1.6500", "MP_1 reorganization, kevo"}, {"OG303", "PG2", "150.00", "1.6550", "MP_2 reorganization, kevo"}, {"OG303", "SG3O1", "250.00", "1.5750", "LIPID methylsulfate"}, {"OG303", "SG3O2", "235.00", "1.6000", "MMST, methyl methanesulfonate, (org 1.640) compromise between crystal and mp2, xxwy"}, {"OG304", "PG1", "330.00", "1.6750", "PPI1, PPI2, METP reorganization, kevo ! pulls against attraction"}, {"OG304", "PG2", "300.00", "1.7150", "PPI1, METP reorganization, kevo ! pulls against very strong attraction"}, {"OG311", "PG0", "237.00", "1.5800", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG311", "PG1", "237.00", "1.6100", "MP_1 reorganization, kevo"}, {"OG311", "HGP1", "545.00", "0.9600", "PROT EMB 11/21/89 methanol vib fit; og tested on MeOH EtOH,..."}, {"SG301", "SG301", "173.00", "2.0290", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"SG311", "HGP3", "275.00", "1.3250", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"FGP1", "ALG1", "205.00", "1.7260", "aluminum tetrafluoride, ALF4, w/UB"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_cgenff info V(S) = Kub x (S - S0)^2 */ char * charmm36_cgenff_angles[1561][8]= {{"CG2R61", "CG1N1", "NG1T1", "40.00", "180.00", " ", " ", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG331", "CG1N1", "NG1T1", "21.20", "180.00", " ", " ", "ACN, acetonitrile, kevo"}, {"CG1T1", "CG1T1", "CG331", "19.00", "180.00", " ", " ", "2BTY, 2-butyne, kevo"}, {"CG1T2", "CG1T1", "CG331", "11.00", "180.00", " ", " ", "PRPY, propyne, kevo"}, {"CG1T1", "CG1T2", "HGPAM1", "8.00", "180.00", " ", " ", "PRPY, propyne, xxwy and kevo"}, {"CG25C1", "CG251O", "CG2R53", "40.00", "125.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "NG2R53", "40.00", "124.00", " ", " ", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C1", "CG251O", "SG311", "40.00", "124.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "40.00", "119.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "40.00", "130.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG251O", "SG311", "40.00", "130.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "NG2R53", "116.00", "111.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "SG311", "110.00", "111.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "40.00", "125.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "NG2R53", "40.00", "124.00", " ", " ", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C2", "CG252O", "SG311", "40.00", "124.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "40.00", "119.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "40.00", "130.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG252O", "SG311", "40.00", "130.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "NG2R53", "116.00", "111.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "SG311", "110.00", "111.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "33.00", "113.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "33.00", "131.50", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "33.00", "115.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "33.00", "130.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "45.00", "114.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "33.00", "113.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "33.00", "131.50", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "33.00", "115.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "33.00", "130.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "45.00", "114.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2D1", "CG2D1", "CG301", "48.00", "123.50", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "48.00", "123.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1O", "CG2D1", "CG321", "40.00", "127.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1", "CG321", "48.00", "126.00", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D2", "CG2D1", "CG331", "47.00", "125.20", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D2", "CG2D1", "HGA4", "42.00", "118.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D1", "CG321", "40.00", "127.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "PY01, 4h-pyran"}, {"CG301", "CG2D1", "CG321", "50.00", "113.00", " ", " ", "CHOLEST cholesterol"}, {"CG301", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "RETINOL TMCH"}, {"CG321", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "RETINOL TMCH"}, {"CG321", "CG2D1", "HGA4", "40.00", "116.00", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "NG2D1", "80.00", "123.00", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated, adjusted for improper, xxwy"}, {"CG331", "CG2D1", "NG2P1", "47.00", "125.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated, adjusted for improper, xxwy"}, {"CG331", "CG2D1", "HGA4", "22.00", "117.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"NG2D1", "CG2D1", "HGA4", "49.00", "119.50", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated, adjusted for improper, xxwy"}, {"NG2P1", "CG2D1", "HGR52", "39.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated, adjusted for improper, xxwy"}, {"CG2D1", "CG2D1O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "OG3R60", "40.00", "126.00", " ", " ", "PY01, 4h-pyran, maintain 360 around apex angle"}, {"CG2D1", "CG2D1O", "HGA4", "52.00", "122.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1O", "NG321", "80.00", "128.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"CG2D2", "CG2D1O", "OG301", "65.00", "123.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "HGA4", "44.00", "121.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "OG301", "56.00", "124.50", " ", " ", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC1", "CG2D1O", "OG3R60", "40.00", "128.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2D1O", "HGA4", "42.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"NG301", "CG2D1O", "HGA4", "42.00", "119.00", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D1O", "HGA4", "42.00", "119.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG321", "CG2D1O", "HGA4", "30.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"OG301", "CG2D1O", "HGA4", "30.00", "115.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"OG3R60", "CG2D1O", "HGA4", "30.00", "112.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D1", "CG2D2", "HGA5", "45.00", "120.50", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1O", "CG2D2", "HGA5", "35.00", "120.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2", "HGA5", "55.50", "120.50", " ", " ", "LIPID ethene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D2", "HGA5", "35.00", "120.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"HGA5", "CG2D2", "HGA5", "19.00", "119.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D2O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "OG3R60", "40.00", "126.00", " ", " ", "PY01, 4h-pyran, maintain 360 around apex angle"}, {"CG2D1", "CG2D2O", "HGA4", "52.00", "122.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D2O", "NG321", "80.00", "128.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"CG2D2", "CG2D2O", "OG301", "65.00", "123.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "HGA4", "44.00", "121.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "OG301", "56.00", "124.50", " ", " ", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC2", "CG2D2O", "OG3R60", "40.00", "128.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC2", "CG2D2O", "HGA4", "42.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"NG301", "CG2D2O", "HGA4", "42.00", "119.00", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D2O", "HGA4", "42.00", "119.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG321", "CG2D2O", "HGA4", "30.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"OG301", "CG2D2O", "HGA4", "30.00", "115.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"OG3R60", "CG2D2O", "HGA4", "30.00", "112.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D1O", "CG2DC1", "CG2DC2", "48.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D1O", "CG2DC1", "CG2O1", "65.00", "113.00", " ", " ", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 5.0 107.8 but that's too unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "CG321", "43.50", "126.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 43.50 128.00 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "HGA4", "42.00", "122.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC1", "CG2DC2", "48.00", "123.00", " ", " ", "RETINOL 13DP, Pentadiene @@@@@ Kenno: 123.5-->123.0 @@@@@"}, {"CG2DC1", "CG2DC1", "CG2O1", "48.00", "123.50", " ", " ", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O3", "48.00", "123.50", " ", " ", "RETINOL PRAC"}, {"CG2DC1", "CG2DC1", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC1", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG321", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC1", "HGA4", "42.00", "119.00", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC1", "CG2DC3", "48.00", "123.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC1", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG331", "48.00", "113.00", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC2", "CG2DC1", "NG2P1", "40.00", "125.60", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC1", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2O3", "40.00", "119.00", "35.00", "2.5267", "RETINOL PRAC"}, {"CG2DC3", "CG2DC1", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O5", "35.00", "118.60", " ", " ", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC1", "CG2R61", "29.00", "122.00", " ", " ", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC1", "CG321", "65.00", "123.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 125.0 124.2 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC1", "HGA4", "52.00", "119.50", " ", " ", "RETINOL CROT"}, {"CG2O3", "CG2DC1", "HGA4", "52.00", "119.50", " ", " ", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "HGA4", "32.00", "122.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2O5", "CG2DC1", "HGA4", "32.00", "123.40", " ", " ", "BEON, butenone, kevo"}, {"CG2R61", "CG2DC1", "NG2D1", "56.00", "117.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2R61", "CG2DC1", "HGA4", "32.00", "120.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b; STYR, styrene; kevo, xxwy, oashi"}, {"CG321", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG321", "CG2DC1", "HGA4", "40.00", "116.00", " ", " ", "RETINOL PROL"}, {"CG331", "CG2DC1", "CG331", "47.00", "113.00", " ", " ", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "HGA4", "42.00", "117.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"NG2D1", "CG2DC1", "HGA4", "38.00", "123.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"NG2P1", "CG2DC1", "HGR52", "38.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D2O", "CG2DC2", "CG2DC1", "48.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D2O", "CG2DC2", "CG2O1", "65.00", "113.00", " ", " ", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 5.0 107.8 but that's too unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "CG321", "43.50", "126.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 43.50 128.00 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "HGA4", "42.00", "122.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC2", "CG2DC2", "48.00", "123.00", " ", " ", "RETINOL 13DP, Pentadiene @@@@@ Kenno: 123.5-->123.0 @@@@@"}, {"CG2DC1", "CG2DC2", "CG2DC3", "48.00", "123.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC1", "CG2DC2", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG331", "48.00", "113.00", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC1", "CG2DC2", "NG2P1", "40.00", "125.60", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC1", "CG2DC2", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC2", "CG2O1", "48.00", "123.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O3", "48.00", "123.50", " ", " ", "RETINOL PRAC"}, {"CG2DC2", "CG2DC2", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC2", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG321", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC2", "HGA4", "42.00", "119.00", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC3", "CG2DC2", "CG2O3", "40.00", "119.00", "35.00", "2.5267", "RETINOL PRAC"}, {"CG2DC3", "CG2DC2", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O5", "35.00", "118.60", " ", " ", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC2", "CG2R61", "29.00", "122.00", " ", " ", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC2", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC2", "CG321", "65.00", "123.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 125.0 124.2 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC2", "HGA4", "52.00", "119.50", " ", " ", "RETINOL CROT"}, {"CG2O3", "CG2DC2", "HGA4", "52.00", "119.50", " ", " ", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "HGA4", "32.00", "122.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2O5", "CG2DC2", "HGA4", "32.00", "123.40", " ", " ", "BEON, butenone, kevo"}, {"CG2R61", "CG2DC2", "NG2D1", "56.00", "117.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2R61", "CG2DC2", "HGA4", "32.00", "120.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b; STYR, styrene; kevo, xxwy, oashi"}, {"CG321", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG321", "CG2DC2", "HGA4", "40.00", "116.00", " ", " ", "RETINOL PROL"}, {"CG331", "CG2DC2", "CG331", "47.00", "113.00", " ", " ", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"CG331", "CG2DC2", "HGA4", "42.00", "117.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"NG2D1", "CG2DC2", "HGA4", "38.00", "123.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"NG2P1", "CG2DC2", "HGR52", "38.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG251O", "CG2DC3", "HGA5", "35.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2DC3", "HGA5", "35.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C2", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG2DC1", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA5", "CG2DC3", "HGA5", "19.00", "119.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"NG2D1", "CG2N1", "NG311", "50.00", "125.00", " ", " ", "MGU2, methylguanidine2"}, {"NG2D1", "CG2N1", "NG321", "100.00", "125.00", " ", " ", "MGU1, methylguanidine; MGU2, methylguanidine2"}, {"NG2P1", "CG2N1", "NG2P1", "52.00", "120.00", "90.00", "2.36420", "PROT changed from 60.0/120.3 for guanidinium (KK)"}, {"NG311", "CG2N1", "NG321", "50.00", "113.00", " ", " ", "MGU2, methylguanidine2 kevo: sum=363 (deliberate)"}, {"NG321", "CG2N1", "NG321", "75.00", "113.00", " ", " ", "MGU1, methylguanidine kevo: sum=363 (deliberate)"}, {"CG2R61", "CG2N2", "NG2P1", "80.00", "118.50", " ", " ", "BAMI, benzamidinium, mp2 geom and movib, pram"}, {"CG331", "CG2N2", "NG2P1", "52.00", "118.50", " ", " ", "AMDN, amidinium, mp2 geom, pram"}, {"NG2D1", "CG2N2", "NG321", "85.00", "127.00", " ", " ", "MT2A, fylin"}, {"NG2D1", "CG2N2", "SG311", "37.00", "116.40", " ", " ", "MT2A, fylin"}, {"NG2P1", "CG2N2", "NG2P1", "52.00", "123.00", "90.00", "2.36420", "AMDN, amidinium, mp2 geom and movib, pram"}, {"NG321", "CG2N2", "SG311", "56.00", "116.60", " ", " ", "MT2A, fylin"}, {"CG2DC1", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "RETINOL CROT"}, {"CG2R61", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S2", "50.00", "110.23", " ", " ", "3NAP, nicotamide (PYRIDINE pyr-CONH2), yin"}, {"CG2R61", "CG2O1", "OG2D1", "30.00", "121.00", " ", " ", "reverted to 3NAP, nicotamide. Kenno: compromise with NMA and HDZ2 ==> 124.5 --> 121.00"}, {"CG2R62", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2O1", "OG2D1", "85.00", "118.50", "20.0", "2.43", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG311", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG311", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG311", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG314", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG314", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG314", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG321", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG321", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG324", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG324", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG324", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG331", "CG2O1", "NG2S0", "40.00", "115.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG331", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG331", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG331", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG3C51", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S2", "80.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "OG2D1", "80.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S2", "80.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "OG2D1", "80.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "OG2D1", "80.00", "124.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S0", "CG2O1", "HGR52", "43.00", "115.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S1", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"NG2S2", "CG2O1", "OG2D1", "75.00", "122.50", "50.00", "2.37000", "PROT adm jr. 4/10/91, acetamide update"}, {"NG2S2", "CG2O1", "HGR52", "44.00", "111.00", "50.00", "1.98000", "PROT, formamide"}, {"OG2D1", "CG2O1", "HGR52", "44.00", "122.00", " ", " ", "kevo reverted to adm jr., 5/13/91, formamide geometry and vibrations"}, {"CG2R61", "CG2O2", "OG2D1", "70.00", "123.10", "20.00", "2.4420", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "50.00", "111.00", "20.00", "2.3600", "MBOA, methylbenzoate (UB term has been adjusted), jal"}, {"CG2R61", "CG2O2", "OG311", "40.00", "113.90", "30.00", "2.3700", "ZOIC, benzoic acid (UB term has been adjusted), jal"}, {"CG311", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG311", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "AMGA, Alpha Methyl Glut Acid CDCA Amide"}, {"CG311", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "drug design project, xxwy"}, {"CG321", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG321", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "LIPID methyl acetate"}, {"CG321", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"CG331", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"OG2D1", "CG2O2", "OG302", "90.00", "125.90", "160.0", "2.2576", "LIPID acetic acid"}, {"OG2D1", "CG2O2", "OG311", "50.00", "123.00", "210.00", "2.26200", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"OG2D1", "CG2O2", "HGR52", "39.00", "119.00", " ", " ", "FORH, formic acid, xxwy"}, {"OG311", "CG2O2", "HGR52", "47.00", "105.00", " ", " ", "FORH, formic acid, xxwy"}, {"CG2DC1", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "RETINOL PRAC"}, {"CG2DC2", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "RETINOL PRAC"}, {"CG2O5", "CG2O3", "OG2D2", "95.00", "116.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "3CPY, pyridine-3-carboxylate (PYRIDINE nicotinic acid), yin"}, {"CG301", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.353", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG314", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG321", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG324", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG331", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG3C51", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "OG2D2", "100.00", "128.00", "70.00", "2.25870", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OG2D2", "CG2O3", "HGR52", "45.00", "116.00", " ", " ", "FORA, formate, kevo (sum=360)"}, {"CG2DC1", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC1", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC2", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC2", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2R61", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "ALDEHYDE benzaldehyde only angle unmodified"}, {"CG2R61", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "ALDEHYDE benzaldehyde only angle unmodified"}, {"CG321", "CG2O4", "OG2D1", "45.00", "126.00", " ", " ", "ALDEHYDE propionaldehyde adm 11/08"}, {"CG321", "CG2O4", "HGR52", "65.00", "116.00", " ", " ", "ALDEHYDE propionaldehyde adm 11/08"}, {"CG331", "CG2O4", "OG2D1", "45.00", "126.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG331", "CG2O4", "HGR52", "65.00", "116.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"OG2D1", "CG2O4", "HGR52", "65.00", "118.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2DC1", "CG2O5", "CG331", "35.00", "116.00", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC1", "CG2O5", "OG2D3", "70.00", "121.80", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC2", "CG2O5", "CG331", "35.00", "116.00", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC2", "CG2O5", "OG2D3", "70.00", "121.80", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2O3", "CG2O5", "CG2R61", "40.00", "117.20", " ", " ", "BIPHENYLS BF7 C37, sum of equilibrium angles, kevo"}, {"CG2O3", "CG2O5", "OG2D3", "95.00", "121.50", " ", " ", "BIPHENYLS BF7, C37 new init guess by Kenno based on ACO adm 11/08 ==> re-optimize"}, {"CG2R61", "CG2O5", "CG311", "40.00", "117.20", " ", " ", "BIPHENYLS BF6 C36, sum of equilibrium angles, kevo"}, {"CG2R61", "CG2O5", "CG321", "20.00", "116.50", " ", " ", "PHEK, phenyl ethyl ketone; from 3ACP, 3-acetylpyridine; mcs"}, {"CG2R61", "CG2O5", "CG331", "60.00", "116.50", " ", " ", "PHMK, phenyl methyl ketone, mcs"}, {"CG2R61", "CG2O5", "OG2D3", "70.00", "121.30", " ", " ", "3ACP, 3-acetylpyridine; BF6 BF7 C36 C37; PHMK, phenyl methyl ketone; verified by mcs"}, {"CG311", "CG2O5", "OG2D3", "95.00", "121.50", " ", " ", "BIPHENYLS BF6, C36 new init guess by Kenno based on ACO adm 11/08 ==> re-optimize"}, {"CG321", "CG2O5", "CG321", "35.00", "115.60", " ", " ", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG321", "CG2O5", "CG331", "35.00", "115.60", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG321", "CG2O5", "OG2D3", "75.00", "122.20", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG331", "35.00", "115.60", " ", " ", "ACO, acetone adm 11/08"}, {"CG331", "CG2O5", "OG2D3", "75.00", "122.20", " ", " ", "ACO, acetone adm 11/08"}, {"NG2S1", "CG2O6", "OG2D1", "60.00", "125.70", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S1", "CG2O6", "OG302", "90.00", "110.30", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S2", "CG2O6", "NG2S2", "70.00", "115.00", " ", " ", "UREA, Urea"}, {"NG2S2", "CG2O6", "OG2D1", "75.00", "122.50", "50.00", "2.37000", "UREA, Urea. Uses a slack parameter from PROT adm jr. 4/10/91, acetamide update ==> re-optimize"}, {"OG2D1", "CG2O6", "OG302", "70.00", "123.50", " ", " ", "DMCB and DECB and DMCA, dimethyl and diehtyl carbamate and dimethyl carbonate, cacha and kevo"}, {"OG2D2", "CG2O6", "OG2D2", "40.00", "120.00", "99.5", "2.24127", "PROTMOD carbonate"}, {"OG2D2", "CG2O6", "OG311", "79.00", "120.00", " ", " ", "CO31, bicarbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "85.00", "105.00", " ", " ", "DMCA, dimethyl carbonate, xxwy"}, {"SG2D1", "CG2O6", "SG311", "70.00", "124.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "40.00", "112.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"NG2D1", "CG2O7", "OG2D5", "42.00", "172.00", " ", " ", "MICY, EICY: isocyanates, xxwy"}, {"OG2D5", "CG2O7", "OG2D5", "45.00", "180.00", " ", " ", "PROT CO2, JES; re-optimized by kevo"}, {"CG2R51", "CG2R51", "CG2R51", "90.00", "107.20", " ", " ", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R52", "90.00", "106.00", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "CG2R53", "100.00", "116.50", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG2R57", "90.00", "107.20", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "CG2RC0", "85.00", "105.70", "25.00", "2.26100", "INDO/TRP"}, {"CG2R51", "CG2R51", "CG2RC7", "70.00", "106.90", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG321", "45.80", "130.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CG2R51", "CG2R51", "CG331", "45.80", "130.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CG2R51", "CG2R51", "CG3C52", "115.00", "109.00", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "115.00", "109.00", " ", " ", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "130.00", "110.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R51", "130.00", "106.00", " ", " ", "110.6, PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R52", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R57", "130.00", "106.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51; lf"}, {"CG2R51", "CG2R51", "NG2RC0", "130.00", "108.20", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "105.00", "111.80", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "120.00", "111.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "130.00", "111.70", " ", " ", "FURA, furan @@@@@ Kenno: 108-->112 @@@@@"}, {"CG2R51", "CG2R51", "OG3C51", "135.00", "113.20", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "105.00", "109.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.17300", "INDO/TRP"}, {"CG2R51", "CG2R51", "HGR52", "22.00", "130.00", "15.00", "2.21500", "PROT adm jr., 6/27/90, his"}, {"CG2R52", "CG2R51", "HGR51", "15.00", "127.60", " ", " ", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R53", "CG2R51", "HGR51", "10.00", "117.10", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R57", "CG2R51", "NG2R51", "130.00", "106.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51; lf"}, {"CG2R57", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.17300", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 HGR51; lf"}, {"CG2R57", "CG2R51", "HGR52", "22.00", "130.00", "15.00", "2.21500", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 HGR52; lf"}, {"CG2RC0", "CG2R51", "CG321", "30.00", "126.70", " ", " ", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG331", "30.00", "126.70", " ", " ", "INDO/TRP"}, {"CG2RC0", "CG2R51", "NG2R51", "100.00", "107.50", " ", " ", "ISOI, isoindole, kevo"}, {"CG2RC0", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.25500", "INDO/TRP"}, {"CG2RC0", "CG2R51", "HGR52", "31.00", "128.50", " ", " ", "ISOI, isoindole, kevo"}, {"CG2RC7", "CG2R51", "HGR51", "32.00", "126.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG321", "CG2R51", "NG2R50", "45.80", "120.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG321", "CG2R51", "NG2R51", "45.80", "124.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG321", "CG2R51", "NG2R52", "45.80", "122.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG331", "CG2R51", "NG2R51", "45.80", "124.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG3C52", "CG2R51", "HGR51", "29.00", "124.60", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG3C54", "CG2R51", "HGR51", "13.00", "124.60", " ", " ", "124.6 3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R50", "CG2R51", "HGR52", "25.00", "120.00", "20.00", "2.14000", "PROT adm jr., 3/24/92"}, {"NG2R51", "CG2R51", "HGR52", "25.00", "124.00", "20.00", "2.14000", "PROT adm jr., 3/24/92"}, {"NG2R52", "CG2R51", "HGR52", "22.00", "122.00", "15.00", "2.18000", "PROT his, adm jr., 6/27/90"}, {"NG2R57", "CG2R51", "HGR52", "25.00", "124.00", "20.00", "2.14000", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 HGR52; lf"}, {"NG2RC0", "CG2R51", "HGR52", "31.00", "121.80", " ", " ", "INDZ, indolizine, kevo"}, {"NG3C51", "CG2R51", "HGR52", "35.00", "118.20", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"NG3P2", "CG2R51", "HGR52", "35.00", "119.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"OG2R50", "CG2R51", "HGR52", "50.00", "118.30", " ", " ", "FURA, furan @@@@@ Kenno: 122 --> 118 @@@@@"}, {"OG3C51", "CG2R51", "HGR52", "39.00", "116.80", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"SG2R50", "CG2R51", "HGR52", "45.00", "121.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "CG2R52", "NG2R50", "110.00", "110.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "CG2R52", "NG2R52", "121.00", "110.00", " ", " ", "2HPP, 2H-pyrrole.H+ C4-C5-N1, kevo"}, {"CG2R51", "CG2R52", "HGR52", "32.00", "126.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R52", "CG2R52", "NG2R50", "70.00", "106.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "CG2R52", "HGR52", "30.00", "131.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2RC0", "CG2R52", "NG2R50", "150.00", "110.40", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "CG2R52", "HGR52", "32.00", "126.60", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "170.00", "112.00", " ", " ", "2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole N2-C3-C4, kevo"}, {"CG3C52", "CG2R52", "HGR52", "47.00", "125.00", " ", " ", "2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole H3-C3-C4, kevo"}, {"NG2R50", "CG2R52", "HGR52", "32.00", "123.00", " ", " ", "PYRZ, pyrazole"}, {"NG2R52", "CG2R52", "HGR52", "35.00", "123.50", " ", " ", "2HPP, 2H-pyrrole.H+ N1-C5-H5, kevo"}, {"CG251O", "CG2R53", "NG2R53", "55.00", "108.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "OG2D1", "55.00", "124.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "55.00", "108.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "OG2D1", "55.00", "124.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "50.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2R53", "OG2D1", "55.00", "125.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "50.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "OG2D1", "55.00", "125.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2R53", "OG2D1", "60.80", "127.50", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R53", "OG3C51", "65.50", "105.00", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C41", "CG2R53", "NG2R43", "120.00", "104.50", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG2R53", "OG2D1", "60.00", "135.70", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C52", "CG2R53", "NG2R53", "120.00", "105.50", " ", " ", "2PDO, 2-pyrrolidinone N1-C2-C3 v, kevo"}, {"CG3C52", "CG2R53", "OG2D1", "65.00", "126.70", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG2R53", "OG3C51", "90.00", "105.80", " ", " ", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"NG2R43", "CG2R53", "OG2D1", "60.00", "134.30", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"NG2R50", "CG2R53", "NG2R50", "100.00", "111.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "100.00", "113.00", " ", " ", "NA Gua 5R)"}, {"NG2R50", "CG2R53", "NG3C51", "160.00", "117.40", " ", " ", "2IMI, 2-imidazoline N1-C2-N3 d1a,d1, kevo"}, {"NG2R50", "CG2R53", "OG2R50", "120.00", "115.70", " ", " ", "OXAZ, oxazole @@@@@ Kenno: 108 --> 115.7 @@@@@"}, {"NG2R50", "CG2R53", "SG2R50", "110.00", "117.20", " ", " ", "THAZ, thiazole @@@@@ Kenno: 112 --> 117.2 @@@@@"}, {"NG2R50", "CG2R53", "HGR52", "39.00", "124.80", " ", " ", "NA Ade h8, G,A"}, {"NG2R51", "CG2R53", "OG2D1", "70.00", "127.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"NG2R51", "CG2R53", "HGR52", "40.00", "122.20", " ", " ", "NA Gua h8 (NN4 CG2R53HN3 124.8)"}, {"NG2R52", "CG2R53", "NG2R52", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"NG2R52", "CG2R53", "HGR53", "32.00", "126.00", "25.00", "2.14000", "PROT his, adm jr., 6/27/90"}, {"NG2R53", "CG2R53", "NG2R53", "75.00", "104.40", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "OG2D1", "65.00", "127.80", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "SG2D1", "45.00", "127.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "70.00", "109.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG3C51", "CG2R53", "HGR52", "32.00", "117.80", " ", " ", "2IMI, 2-imidazoline N1-C2-H2, kevo"}, {"OG2D1", "CG2R53", "OG3C51", "64.00", "127.50", " ", " ", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"OG2D1", "CG2R53", "SG311", "55.00", "125.00", " ", " ", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2R50", "CG2R53", "HGR52", "25.00", "119.50", "20.00", "2.14000", "OXAZ, oxazole @@@@@ Kenno: 120 -->119.5 @@@@@"}, {"SG2D1", "CG2R53", "SG311", "45.00", "124.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2R50", "CG2R53", "HGR52", "30.00", "118.00", " ", " ", "THAZ, thiazole"}, {"CG2R51", "CG2R57", "CG2R51", "90.00", "107.20", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R57", "CG2R57", "33.00", "126.40", " ", " ", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "42.50", "126.40", " ", " ", "13BPO, 1,3-bipyrrole, lf"}, {"CG1N1", "CG2R61", "CG2R61", "35.00", "120.00", " ", " ", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: 119 --> 120"}, {"CG2DC1", "CG2R61", "CG2R61", "36.00", "120.00", " ", " ", "STYR, styrene and HDZ2, hydrazone model cmpd 2; xxwy and oashi; verified by kevo"}, {"CG2DC2", "CG2R61", "CG2R61", "36.00", "120.00", " ", " ", "STYR, styrene and HDZ2, hydrazone model cmpd 2; xxwy and oashi; verified by kevo"}, {"CG2N2", "CG2R61", "CG2R61", "25.00", "120.00", " ", " ", "BAMI, benzamidinium, mp2 molvib, pram"}, {"CG2O1", "CG2R61", "CG2R61", "45.00", "119.00", " ", " ", "reverted to 3NAP, nicotinamide"}, {"CG2O1", "CG2R61", "CG2RC0", "60.00", "120.00", " ", " ", "HDZ2, hydrazone model cmpd 2"}, {"CG2O2", "CG2R61", "CG2R61", "45.00", "120.00", " ", " ", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2O3", "CG2R61", "CG2R61", "45.00", "119.00", " ", " ", "3CB, Benzoate. Based on a slack parameter from 3ACP, 3-acetylpyridine ==> re-optimize"}, {"CG2O4", "CG2R61", "CG2R61", "45.00", "119.80", " ", " ", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "45.00", "120.00", " ", " ", "PHMK, PHEK, sum of equilibrium angles, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "40.00", "120.00", "35.00", "2.41620", "PROT JES 8/25/89"}, {"CG2R61", "CG2R61", "CG2R62", "40.00", "119.00", "35.00", "2.41620", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R63", "40.00", "120.00", "35.00", "2.41620", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R64", "40.00", "115.50", "35.00", "2.41620", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R61", "CG2R66", "40.00", "119.00", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R67", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2RC0", "50.00", "120.00", " ", " ", "113.20 ! INDO/TRP"}, {"CG2R61", "CG2R61", "CG311", "45.80", "120.00", " ", " ", "modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG312", "45.80", "120.00", " ", " ", "BDFP, BDFD, Difuorobenzylphosphonate, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG321", "45.80", "120.00", " ", " ", "EBEN, ethylbenzene, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG324", "45.80", "120.00", " ", " ", "BPIP, N-Benzyl PIP, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG331", "45.80", "120.00", " ", " ", "TOLU, toluene, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "NG2O1", "20.00", "120.00", " ", " ", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R61", "CG2R61", "NG2R61", "125.00", "120.00", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "NG2R62", "20.00", "124.00", " ", " ", "PYRD, pyridazine"}, {"CG2R61", "CG2R61", "NG2RC0", "100.00", "121.40", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "RESI PACP, FRET AND OTHERS"}, {"CG2R61", "CG2R61", "NG2S3", "60.00", "121.00", " ", " ", "PYRIDINE aminopyridine, adm jr., 7/94"}, {"CG2R61", "CG2R61", "NG301", "42.00", "120.00", " ", " ", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG311", "40.00", "120.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "CG2R61", "NG3N1", "48.00", "122.00", " ", " ", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "OG301", "110.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "OG303", "75.00", "120.00", " ", " ", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "OG311", "45.20", "120.00", " ", " ", "PYRIDINE phenol, yin"}, {"CG2R61", "CG2R61", "OG312", "40.00", "120.00", " ", " ", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "CG2R61", "OG3R60", "40.00", "120.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "CG2R61", "SG311", "40.00", "120.00", " ", " ", "FETZ, phenothiazine, erh"}, {"CG2R61", "CG2R61", "SG3O1", "10.00", "122.30", " ", " ", "benzene sulfonic acid anion, og"}, {"CG2R61", "CG2R61", "SG3O2", "35.00", "119.00", " ", " ", "BSAM, benzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "CLGR1", "60.00", "120.00", " ", " ", "CHLB, chlorobenzene"}, {"CG2R61", "CG2R61", "BRGR1", "45.00", "120.00", " ", " ", "BROB, bromobenzene"}, {"CG2R61", "CG2R61", "IGR1", "45.00", "120.00", " ", " ", "IODB, iodobenzene"}, {"CG2R61", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.15250", "PROT JES 8/25/89 benzene"}, {"CG2R61", "CG2R61", "HGR62", "30.00", "120.00", "22.00", "2.15250", "BROB, bromobenzene"}, {"CG2R62", "CG2R61", "HGR61", "20.00", "121.00", "22.00", "2.15250", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R63", "CG2R61", "HGR62", "18.00", "120.00", "22.00", "2.15250", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from CG2R64 CG2R61 HGR61; isg"}, {"CG2R64", "CG2R61", "NG2R60", "20.00", "123.40", " ", " ", "PTID, pteridine, erh"}, {"CG2R64", "CG2R61", "OG311", "45.20", "120.00", " ", " ", "2A3HPD, from PYRIDINE phenol, cacha"}, {"CG2R64", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.15250", "2AMP, 2-amino pyridine, from PROT benzene, kevo"}, {"CG2R66", "CG2R61", "CG2R66", "40.00", "117.00", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG331", "45.80", "120.00", " ", " ", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL TMCH/MECH while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "HGR62", "30.00", "121.50", "22.00", "2.15250", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R67", "CG2R61", "HGR61", "30.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R67", "CG2R61", "HGR62", "30.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2RC0", "CG2R61", "NG2R62", "20.00", "119.00", " ", " ", "PUR9, purine(N9H); PUR7, purine(N7H), kevo"}, {"CG2RC0", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.14600", "122 INDO/TRP"}, {"CG2RC0", "CG2R61", "HGR62", "30.00", "121.50", " ", " ", "22.00 2.16830 ! PUR7, purine(N7H); PUR9, purine(N9H), kevo"}, {"CG321", "CG2R61", "NG2R60", "45.80", "122.30", " ", " ", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "45.80", "122.30", " ", " ", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"NG2R60", "CG2R61", "BRGR1", "45.00", "120.00", " ", " ", "3A6BPD, Gamma-3-Amino-6-bromo Pyridine GA CDCA Amide, cacha"}, {"NG2R60", "CG2R61", "HGR62", "30.00", "116.00", "35.00", "2.10000", "PYR1, pyridine %% Kenno: 112->116"}, {"NG2R61", "CG2R61", "HGR62", "33.00", "115.00", " ", " ", "URA24S, 2,4(1H,3H)-pyrimidinedithione, isg"}, {"NG2R62", "CG2R61", "HGR62", "30.00", "116.00", "35.00", "2.10000", "PYRD, pyridazine %% Kenno: 112->116"}, {"NG2RC0", "CG2R61", "HGR62", "30.00", "118.60", " ", " ", "INDZ, indolizine, kevo"}, {"CG2O1", "CG2R62", "CG2R62", "10.00", "131.80", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R62", "40.00", "121.00", " ", " ", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R63", "120.00", "122.30", " ", " ", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R61", "23.00", "116.10", " ", " ", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R62", "30.00", "118.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R62", "OG3R60", "40.00", "119.70", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "40.00", "118.00", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R63", "120.00", "116.70", " ", " ", "NA T"}, {"CG2R62", "CG2R62", "CG2R64", "85.00", "117.80", " ", " ", "NA C"}, {"CG2R62", "CG2R62", "CG2R67", "40.00", "121.00", " ", " ", "pyo3b, from CG2R61 CG2R62 CG2R62, fylin"}, {"CG2R62", "CG2R62", "CG331", "40.00", "124.20", " ", " ", "NA 5mc, adm jr. 9/9/93"}, {"CG2R62", "CG2R62", "NG2R61", "85.00", "122.90", " ", " ", "NA C"}, {"CG2R62", "CG2R62", "NG2R62", "20.00", "121.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R62", "NG2R67", "85.00", "122.90", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61; isg"}, {"CG2R62", "CG2R62", "OG3R60", "10.00", "119.30", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "HGR62", "42.00", "119.00", " ", " ", "NA nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "HGR63", "80.00", "120.50", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "CG2R62", "CG2R67", "120.00", "122.30", " ", " ", "pyo2b, from CG2R61 CG2R62 CG2R63, fylin"}, {"CG2R63", "CG2R62", "CG331", "38.00", "118.70", " ", " ", "NA T, c5 methyl"}, {"CG2R63", "CG2R62", "HGR62", "30.00", "120.30", " ", " ", "NA U, h5"}, {"CG2R64", "CG2R62", "HGR62", "38.00", "120.10", " ", " ", "NA C h5"}, {"CG2R67", "CG2R62", "NG2R61", "23.00", "116.10", " ", " ", "pyo3b, from CG2R61 CG2R62 NG2R61, fylin"}, {"CG2R67", "CG2R62", "NG2R62", "30.00", "118.00", " ", " ", "PYRF, from CG2R61 CG2R62 NG2R62, fylin"}, {"CG2R67", "CG2R62", "HGR62", "42.00", "119.00", " ", " ", "pyo3b, from CG2R62 CG2R62 HGR62, fylin"}, {"CG2R67", "CG2R62", "HGR63", "80.00", "120.50", " ", " ", "PIUB, from CG2R62 CG2R62 HGR63, fylin"}, {"NG2R61", "CG2R62", "NG2R62", "50.00", "124.00", " ", " ", "PYRH, from NG2R61 CG2R64 NG2R62, fylin"}, {"NG2R61", "CG2R62", "HGR62", "44.00", "115.00", " ", " ", "NA C, h6"}, {"NG2R61", "CG2R62", "HGR63", "80.00", "117.50", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2R62", "CG2R62", "HGR62", "23.50", "120.00", "35.00", "2.10000", "43HPY, 4(3H)-pyrimidinone, isg. Adjusting angle without UB (from NG2R62 CG2R61 HGR62) is problematic ==> RE-OPTIMIZE!"}, {"NG2R62", "CG2R62", "HGR63", "50.50", "118.50", " ", " ", "PYRH, fylin"}, {"NG2R67", "CG2R62", "HGR62", "44.00", "118.10", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R63", "NG2R61", "59.00", "111.90", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R63", "NG2R67", "59.00", "113.40", " ", " ", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from YTS2; isg"}, {"CG2R61", "CG2R63", "SG2D1", "38.00", "125.10", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "CG2R63", "CG2R62", "10.00", "120.80", " ", " ", "4PYO, 4(1H)-pyridinone; from CG2R62 CG2R62 CG2R62; isg"}, {"CG2R62", "CG2R63", "NG2R61", "70.00", "113.50", " ", " ", "NA T, adm jr. 11/97"}, {"CG2R62", "CG2R63", "NG2R67", "70.00", "115.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R62 NG2R61; isg"}, {"CG2R62", "CG2R63", "OG2D4", "100.00", "124.60", " ", " ", "NA T, o4"}, {"CG2R62", "CG2R63", "OG3R60", "10.00", "121.50", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R63", "SG2D1", "52.00", "123.50", " ", " ", "YT2S, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2RC0", "CG2R63", "NG2R61", "70.00", "107.80", " ", " ", "NA Gua 6R)"}, {"CG2RC0", "CG2R63", "OG2D4", "50.00", "124.70", " ", " ", "NA Gua"}, {"NG2R61", "CG2R63", "NG2R61", "50.00", "114.00", " ", " ", "NA U"}, {"NG2R61", "CG2R63", "NG2R62", "50.00", "116.80", " ", " ", "NA C"}, {"NG2R61", "CG2R63", "NG2R67", "50.00", "114.00", " ", " ", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61, NA; isg"}, {"NG2R61", "CG2R63", "OG2D4", "130.00", "119.40", " ", " ", "NA C, o2"}, {"NG2R61", "CG2R63", "SG2D1", "56.00", "123.00", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R62", "CG2R63", "OG2D4", "130.00", "123.80", " ", " ", "NA C"}, {"NG2R67", "CG2R63", "OG2D4", "130.00", "119.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R61 CG2R63 OG2D4; isg"}, {"NG2R67", "CG2R63", "SG2D1", "56.00", "123.00", " ", " ", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from YTS2; isg"}, {"OG2D4", "CG2R63", "OG3R60", "20.00", "113.90", " ", " ", "RIN, coumarin, isg"}, {"CG2R61", "CG2R64", "NG2R60", "20.00", "124.00", " ", " ", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R64", "NG2R62", "20.00", "128.00", " ", " ", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R64", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2AMP, 2-Amino pyridine, from PACP, p-acetamide-phenol, kevo"}, {"CG2R62", "CG2R64", "NG2R62", "85.00", "119.30", " ", " ", "NA C"}, {"CG2R62", "CG2R64", "NG2S3", "81.00", "118.40", " ", " ", "NA C"}, {"CG2R62", "CG2R64", "NG301", "67.00", "120.70", " ", " ", "TMC, yxu"}, {"CG2RC0", "CG2R64", "NG2R62", "60.00", "110.70", " ", " ", "NA Ade 6R)"}, {"CG2RC0", "CG2R64", "NG2S3", "50.00", "118.60", " ", " ", "NA Ade"}, {"CG2RC0", "CG2R64", "NG301", "40.00", "120.00", " ", " ", "M6A, yxu"}, {"NG2R60", "CG2R64", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2AMP, 2-Amino pyridine, from PACP, p-acetamide-phenol, cacha (verified by kevo)"}, {"NG2R61", "CG2R64", "NG2R62", "70.00", "122.20", " ", " ", "NA Gua 6R)"}, {"NG2R61", "CG2R64", "NG2S3", "95.00", "115.40", " ", " ", "NA Gua n2"}, {"NG2R61", "CG2R64", "SG311", "20.00", "121.80", " ", " ", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from CG2R61 CG2R61 SG311; isg"}, {"NG2R61", "CG2R64", "HGR62", "80.00", "119.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"NG2R62", "CG2R64", "NG2R62", "60.00", "128.00", " ", " ", "NA Ade 6R) %% TEST 133.0 -> 122.2 %%"}, {"NG2R62", "CG2R64", "NG2R67", "70.00", "125.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 NG2R62; isg"}, {"NG2R62", "CG2R64", "NG2S3", "95.00", "122.40", " ", " ", "NA Gua"}, {"NG2R62", "CG2R64", "NG301", "78.00", "120.00", " ", " ", "TMC, yxu"}, {"NG2R62", "CG2R64", "SG311", "54.00", "116.00", " ", " ", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2R61 CG2R61 SG311; isg"}, {"NG2R62", "CG2R64", "HGR62", "38.00", "116.00", " ", " ", "NA Ade h2 %% TEST 113.5 -> 118.9 %%"}, {"NG2R67", "CG2R64", "HGR62", "80.00", "119.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 HGR62, TC243C; isg"}, {"CG2R61", "CG2R66", "CG2R61", "40.00", "122.50", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R66", "CG2R67", "40.00", "122.50", "35.00", "2.41620", "PYO2F, from CG2R61 CG2R66 CG2R61, fylin"}, {"CG2R61", "CG2R66", "FGR1", "60.00", "118.75", " ", " ", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R66", "FGR1", "60.00", "118.75", " ", " ", "PYO2F, from CG2R61 CG2R66 FGR1, fylin"}, {"CG2R61", "CG2R67", "CG2R61", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2R66", "40.00", "120.00", " ", " ", "PYO2F, from CG2R61 CG2R67 CG2R61, fylin"}, {"CG2R61", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2RC0", "50.00", "120.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "NG2R60", "58.00", "126.80", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "NG2R67", "50.00", "120.00", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R62", "CG2R67", "CG2R62", "40.00", "120.00", " ", " ", "pyo3b, from CG2R61 CG2R67 CG2R61, fylin"}, {"CG2R62", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "pyo3b, from CG2R61 CG2R67 CG2R67, fylin"}, {"CG2R66", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "PYO2F, from CG2R61 CG2R67 CG2R67, fylin"}, {"CG2R67", "CG2R67", "CG2RC0", "55.00", "110.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "NG2R60", "44.00", "113.20", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "30.00", "128.60", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "90.00", "129.30", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "HGR71", "37.00", "115.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG2RC7", "CG2R71", "HGR71", "32.00", "115.00", " ", " ", "AZUL, Azulene, kevo"}, {"CG25C1", "CG2RC0", "CG2R61", "40.00", "125.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "CG2RC0", "20.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2R61", "40.00", "125.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "20.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2RC0", "CG2R61", "130.00", "132.00", " ", " ", "133.50 ! INDO/TRP"}, {"CG2R51", "CG2RC0", "CG2RC0", "85.00", "108.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG2RC0", "NG2RC0", "90.00", "109.20", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R52", "CG2RC0", "CG2R61", "60.00", "134.10", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "90.00", "105.90", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "CG2R67", "50.00", "120.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2RC0", "CG2RC0", "50.00", "120.00", " ", " ", "110.00 ! INDO/TRP"}, {"CG2R61", "CG2RC0", "CG3C52", "60.00", "130.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "130.00", "130.00", " ", " ", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "130.00", "132.60", " ", " ", "129.50 ! INDO/TRP"}, {"CG2R61", "CG2RC0", "NG2RC0", "80.00", "118.80", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "35.00", "130.70", " ", " ", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "OG2R50", "100.00", "129.40", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "OG3C51", "50.00", "125.30", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "45.00", "123.70", " ", " ", "ZTHP, benzothiophene, kevo"}, {"CG2R63", "CG2RC0", "CG2RC0", "70.00", "119.60", " ", " ", "NA Gua 6R) bridgeC5"}, {"CG2R63", "CG2RC0", "NG2R50", "125.00", "129.00", " ", " ", "NA Gua bridgeC5"}, {"CG2R64", "CG2RC0", "CG2RC0", "60.00", "121.00", " ", " ", "NA Ade 6R) bridgeC5"}, {"CG2R64", "CG2RC0", "NG2R50", "100.00", "129.00", " ", " ", "NA Ade bridgeC5"}, {"CG2R67", "CG2RC0", "CG3C52", "110.00", "110.00", " ", " ", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2RC0", "NG2R51", "100.00", "105.70", " ", " ", "CRBZ, carbazole, erh"}, {"CG2RC0", "CG2RC0", "CG3C52", "110.00", "110.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R50", "100.00", "110.00", " ", " ", "NA Ade 5R) bridgeC5"}, {"CG2RC0", "CG2RC0", "NG2R51", "100.00", "105.70", " ", " ", "NA Ade 5R) bridgeC4"}, {"CG2RC0", "CG2RC0", "NG2R62", "60.00", "127.40", " ", " ", "NA Ade 6R) bridgeC4"}, {"CG2RC0", "CG2RC0", "NG3C51", "100.00", "109.30", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "OG2R50", "110.00", "110.60", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2RC0", "OG3C51", "80.00", "114.70", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "70.00", "116.30", " ", " ", "ZTHP, benzothiophene, kevo"}, {"NG2R50", "CG2RC0", "NG2R62", "20.00", "122.60", " ", " ", "PUR7, purine(N7H), kevo"}, {"NG2R51", "CG2RC0", "NG2R62", "100.00", "126.90", " ", " ", "NA Ade bridgeC4"}, {"CG2R51", "CG2RC7", "CG2R71", "30.00", "122.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "110.00", "109.50", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "CG2RC7", "30.00", "127.80", " ", " ", "AZUL, Azulene, kevo"}, {"CG2D1", "CG301", "CG311", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG301", "CG321", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG301", "CG331", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2DC1", "CG301", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG301", "CG331", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG301", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG301", "CG331", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2O3", "CG301", "CG331", "52.00", "108.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG2O3", "CG301", "OG301", "45.00", "109.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG2O3", "CG301", "OG311", "75.70", "110.10", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG301", "CG311", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG301", "CG321", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG321", "CG301", "CG321", "58.35", "113.50", "11.16", "2.561", "CHOLEST cholesterol"}, {"CG321", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG321", "CG301", "OG301", "45.50", "114.50", " ", " ", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG331", "CG301", "OG301", "45.00", "111.50", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG302", "75.70", "110.10", " ", " ", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG331", "CG301", "OG311", "75.70", "110.10", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "CLGA3", "97.00", "111.20", " ", " ", "TCLE"}, {"CG331", "CG301", "BRGA3", "98.00", "111.20", " ", " ", "TBRE"}, {"OG301", "CG301", "OG301", "70.49", "107.00", " ", " ", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG311", "45.00", "116.50", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CLGA3", "CG301", "CLGA3", "95.00", "109.00", " ", " ", "TCLE"}, {"BRGA3", "CG301", "BRGA3", "90.00", "110.50", " ", " ", "TBRE"}, {"CG321", "CG302", "FGA3", "42.00", "112.00", "30.00", "2.357", "TFE, trifluoroethanol"}, {"CG331", "CG302", "FGA3", "42.00", "112.00", "30.00", "2.357", "FLUROALK fluoroalkanes"}, {"FGA3", "CG302", "FGA3", "118.00", "107.00", "30.00", "2.155", "FLUROALK fluoroalkanes"}, {"CG2O1", "CG311", "CG311", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "CG331", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG311", "NG2R53", "50.00", "107.00", " ", " ", "drug design project, xxwy"}, {"CG2O2", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG311", "CG2R61", "51.80", "107.50", " ", " ", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG2O3", "CG311", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/09/92, for ALA cter"}, {"CG2O3", "CG311", "NG2R53", "50.00", "107.00", " ", " ", "drug design project, xxwy"}, {"CG2O3", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "OG301", "45.00", "109.00", " ", " ", "CC321 CC3163 OC3C61 optimize on PROA, gk (not affected by mistake)"}, {"CG2O3", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O5", "CG311", "OG311", "112.00", "111.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml ! reset by kevo to value from CG2O5 CG311 OG312 ==> RE-OPTIMIZE !!!"}, {"CG2O5", "CG311", "OG312", "130.00", "111.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2O5", "CG311", "HGA1", "50.00", "109.50", " ", " ", "BIPHENYL ANALOGS from PROT Alanine Dipeptide ab initio calc's (LK) consistent with adm 11/08"}, {"CG2R61", "CG311", "CG321", "51.80", "107.50", " ", " ", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG2R61", "CG311", "CG331", "51.80", "107.50", " ", " ", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2R61", "CG311", "HGA1", "43.00", "111.00", " ", " ", "NAMODEL difluorotoluene"}, {"CG301", "CG311", "CG311", "52.00", "108.00", " ", " ", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG311", "CG321", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG311", "HGA1", "34.60", "110.10", "22.53", "2.179", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG311", "CG311", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG321", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG331", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG311", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG311", "CG311", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG311", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG321", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG331", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "58.35", "113.50", "11.16", "2.561", "LIPID glycerol"}, {"CG321", "CG311", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG321", "CG311", "CG331", "53.35", "114.00", "8.00", "2.561", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG3C51", "53.35", "111.00", "8.00", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "NG2R53", "70.00", "113.50", " ", " ", "drug design project, xxwy"}, {"CG321", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG311", "OG302", "115.00", "109.70", " ", " ", "NA"}, {"CG321", "CG311", "OG311", "75.70", "110.00", " ", " ", "NA"}, {"CG321", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "G3P(R/S), 01OH04"}, {"CG324", "CG311", "OG311", "75.70", "112.10", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "CG311", "HGA1", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG331", "CG311", "CG331", "53.35", "114.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG3C51", "53.35", "108.50", "8.00", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG331", "CG311", "OG301", "45.00", "111.50", " ", " ", "all34_ethers_1a OC30A CC32A CC33A, gk or og (not affected by mistake)"}, {"CG331", "CG311", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG331", "CG311", "OG303", "115.00", "109.70", " ", " ", "PROTNA Ser-Phos"}, {"CG331", "CG311", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG331", "CG311", "CLGA1", "88.00", "111.20", " ", " ", "DCLE"}, {"CG331", "CG311", "BRGA2", "75.00", "111.00", " ", " ", "DBRE"}, {"CG331", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG311", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG311", "OG311", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG311", "HGA1", "48.00", "108.00", " ", " ", "drug design project, xxwy"}, {"NG2S1", "CG311", "HGA1", "48.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG301", "CG311", "HGA1", "60.00", "109.50", " ", " ", "all34_ethers_1a HCA2 CC32A OC30A, gk or og (not affected by mistake)"}, {"OG302", "CG311", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG303", "CG311", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG311", "CG311", "OG312", "111.90", "111.00", "100.00", "2.35000", "BIPHENYL ANALOGS, peml"}, {"OG311", "CG311", "HGA1", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG311", "HGA1", "65.90", "117.80", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CLGA1", "CG311", "CLGA1", "95.00", "109.00", " ", " ", "DCLE"}, {"CLGA1", "CG311", "HGA1", "44.00", "108.50", " ", " ", "DCLE"}, {"BRGA2", "CG311", "BRGA2", "95.00", "110.00", " ", " ", "DBRE"}, {"BRGA2", "CG311", "HGA1", "36.00", "107.00", " ", " ", "DBRE"}, {"CG2R61", "CG312", "PG1", "90.00", "117.00", "20.0", "2.30", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG312", "PG2", "90.00", "117.00", "20.0", "2.30", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2R61", "CG312", "FGA2", "50.00", "115.00", "30.0", "2.357", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG331", "CG312", "FGA2", "50.00", "112.00", "30.00", "2.357", "FLUROALK fluoroalkanes"}, {"CG331", "CG312", "HGA7", "32.00", "112.00", "3.00", "2.168", "FLUROALK fluoroalkanes"}, {"PG1", "CG312", "FGA2", "50.00", "122.00", "30.0", "2.357", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"PG2", "CG312", "FGA2", "50.00", "122.00", "30.0", "2.357", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"FGA2", "CG312", "FGA2", "150.00", "107.00", "10.00", "2.170", "FLUROALK fluoroalkanes"}, {"FGA2", "CG312", "HGA7", "41.90", "108.89", "5.00", "1.980", "FLUROALK fluoroalkanes"}, {"CG2O1", "CG314", "CG311", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "CG321", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "CG331", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "NG3P3", "43.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG2O1", "CG314", "HGA1", "50.00", "109.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O3", "CG314", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/09/92, for ALA cter"}, {"CG2O3", "CG314", "NG3P3", "43.70", "110.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG311", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG311", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG314", "CG321", "58.35", "113.50", "11.16", "2.561", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG321", "CG314", "NG3P2", "40.00", "110.00", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG321", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG321", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG331", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P2", "CG314", "HGA1", "45.00", "102.30", "35.00", "2.10100", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"NG3P3", "CG314", "HGA1", "51.50", "107.50", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG2D1", "CG321", "CG2D1", "30.00", "114.00", " ", " ", "LIPID 1,4-dipentene, adm jr., 2/00"}, {"CG2D1", "CG321", "CG2DC1", "125.00", "108.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95 ! force constant is unlikely high"}, {"CG2D1", "CG321", "CG2DC2", "125.00", "108.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95 ! force constant is unlikely high"}, {"CG2D1", "CG321", "CG311", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG321", "CG321", "32.00", "112.20", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D1", "CG321", "CG331", "32.00", "112.20", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D1", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2D1", "CG321", "HGA2", "45.00", "111.50", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2DC1", "CG321", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG3R60", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG321", "HGA2", "45.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG321", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG3R60", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC2", "CG321", "HGA2", "45.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2O1", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O1", "CG321", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O2", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "CG321", "52.00", "108.00", " ", " ", "LIPID alkane"}, {"CG2O2", "CG321", "CG331", "52.00", "108.00", " ", " ", "LIPID alkane"}, {"CG2O2", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "NG321", "43.70", "110.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O4", "CG321", "CG331", "60.00", "113.80", " ", " ", "ALDEHYDE propionaldehyde unmodified"}, {"CG2O4", "CG321", "CLGA1", "65.00", "111.82", " ", " ", "ALDEHYDE chloroacetaldehyde unmodified"}, {"CG2O4", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PALD, propionaldehyde from PROT adm jr. 5/02/91, acetic acid pure solvent. Consistent with adm 11/08"}, {"CG2O5", "CG321", "CG321", "60.00", "113.80", " ", " ", "CHON, cyclohexanone; from PALD, propionaldehyde; yapol"}, {"CG2O5", "CG321", "CG331", "60.00", "111.50", " ", " ", "PHEK, phenyl ethyl ketone; from BTON, butanone; mcs"}, {"CG2O5", "CG321", "HGA2", "50.00", "109.50", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2R51", "CG321", "CG311", "58.35", "114.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG321", "CG314", "58.35", "114.00", " ", " ", "PROT N-terminal AA - standard parameter collided with INDO/TRP"}, {"CG2R51", "CG321", "CG331", "58.35", "114.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG321", "HGA2", "55.00", "109.50", " ", " ", "INDO/TRP"}, {"CG2R61", "CG321", "CG2R61", "51.80", "107.50", " ", " ", "PYRIDINE pyr_CH2C6H5, yin"}, {"CG2R61", "CG321", "CG311", "51.80", "107.50", " ", " ", "PROT PARALLH19 (JES)"}, {"CG2R61", "CG321", "CG314", "51.80", "107.50", " ", " ", "PROT PARALLH19 (JES)"}, {"CG2R61", "CG321", "CG321", "51.80", "107.50", " ", " ", "PYRIDINE butylpyridine, yin"}, {"CG2R61", "CG321", "CG331", "51.80", "107.50", " ", " ", "PROT ethylbenzene, adm jr., 3/7/92"}, {"CG2R61", "CG321", "NG2S1", "53.00", "115.20", " ", " ", "NZAD, N-benzylacetamide; from CG2O2 CG321 NG2S1; isg"}, {"CG2R61", "CG321", "OG302", "75.70", "110.10", " ", " ", "ABGA, Alpha Benzyl Glu Acid CDCA Amide, corrected by kevo"}, {"CG2R61", "CG321", "OG311", "75.70", "110.10", " ", " ", "toppar_all22_prot_pyridines.str has 115.1 but that appears to be a copy-paste error! - kevo"}, {"CG2R61", "CG321", "PG1", "90.00", "111.00", "20.0", "2.300", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG321", "PG2", "90.00", "111.00", "20.0", "2.300", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG2R61", "CG321", "HGA2", "49.30", "107.50", " ", " ", "PYRIDINE pyridines, yin"}, {"CG301", "CG321", "CG321", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG301", "CG321", "CG331", "65.35", "113.50", " ", " ", "DMBU, dimethoxybutane, sna"}, {"CG301", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.179", "RETINOL TMCH/MECH"}, {"CG302", "CG321", "OG311", "75.70", "110.10", " ", " ", "TFE, triflouroethanol"}, {"CG302", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.179", "TFE, trifluoroethanol"}, {"CG311", "CG321", "CG311", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG314", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG321", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG311", "CG321", "CG331", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "G3P(R/S), 01OH04, cacha from CG311 CG311 NG2S1 ==> non-ideal analogy ==> re-optimize???"}, {"CG311", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG311", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG311", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG311", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG311", "CG321", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG314", "CG321", "CG321", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG314", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha from CG311 CG311 NG2S1 ==> non-ideal analogy ==> re-optimize???"}, {"CG314", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG314", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG314", "CG321", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG321", "CG321", "CG321", "58.35", "113.60", "11.16", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG331", "58.00", "115.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "NG2D1", "103.00", "112.00", " ", " ", "EEPI, from CG321 CG321 NG2S1, fylin"}, {"CG321", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "slack parameter picked up by 3CPD ==> re-optimize?"}, {"CG321", "CG321", "NG311", "43.70", "110.00", " ", " ", "K2Cn, cgenff_compromise, kevo"}, {"CG321", "CG321", "OG301", "45.00", "111.50", " ", " ", "diethylether, alex"}, {"CG321", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG321", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG321", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG321", "CG321", "OG3C61", "45.00", "111.50", " ", " ", "DIOX, dioxane"}, {"CG321", "CG321", "SG311", "58.00", "114.50", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG3O1", "43.00", "105.50", " ", " ", "PSNA, propyl sulfonate, xhe"}, {"CG321", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG321", "CG331", "58.35", "110.50", "11.16", "2.56100", "NIPR, nitropropane, abar"}, {"CG324", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG324", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG324", "CG321", "OG311", "75.70", "112.10", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "CG321", "OG3C61", "50.00", "106.50", " ", " ", "MORP, morpholine"}, {"CG324", "CG321", "SG311", "70.00", "110.00", " ", " ", "TMOR, thiomorpholine"}, {"CG324", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG331", "53.35", "114.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG321", "CG3C31", "53.35", "111.00", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG331", "CG321", "NG2D1", "62.00", "114.00", " ", " ", "EICY, ethyl isocyanate, xxwy"}, {"CG331", "CG321", "NG2R51", "70.00", "120.00", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG331 CG321 NG2S1, kevo"}, {"CG331", "CG321", "NG2S1", "70.00", "120.00", " ", " ", "DECB, diethyl carbamate, cacha and xxwy ! 120, really??? DBLCHECK WITH WENBO!!!"}, {"CG331", "CG321", "NG2S3", "27.30", "109.70", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG311", "43.70", "112.20", " ", " ", "PEI polymers, kevo"}, {"CG331", "CG321", "OG301", "45.00", "111.50", " ", " ", "diethylether, alex"}, {"CG331", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG331", "CG321", "OG303", "70.00", "108.40", " ", " ", "PROTNA Thr-Phos"}, {"CG331", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG331", "CG321", "OG312", "65.00", "122.00", " ", " ", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG331", "CG321", "SG301", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG331", "CG321", "SG311", "58.00", "114.50", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG331", "CG321", "SG3O1", "50.00", "105.50", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O2", "45.00", "105.00", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "CG321", "SG3O3", "45.00", "105.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG331", "CG321", "CLGA1", "71.00", "112.20", " ", " ", "CLET"}, {"CG331", "CG321", "BRGA1", "71.00", "111.00", " ", " ", "BRET"}, {"CG331", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C31", "CG321", "HGA2", "42.00", "109.00", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG3C51", "CG321", "OG301", "75.70", "110.10", " ", " ", "3POMP, 3-phenoxymethylpyrrolidine; standard parameter; kevo"}, {"CG3C51", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG3C51", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C51", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG3C51", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG321", "OG303", "75.70", "110.10", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG321", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2D1", "CG321", "HGA2", "45.00", "107.50", " ", " ", "EEPI, from NG2D1 CG331 HGA3, fylin"}, {"NG2R51", "CG321", "HGA2", "33.43", "110.10", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2R51 CG331 HGA3, kevo"}, {"NG2S1", "CG321", "HGA2", "51.50", "109.50", " ", " ", "PROT from NG2S1 CG331 HA, for lactams, adm jr."}, {"NG2S3", "CG321", "HGA2", "38.30", "105.20", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"NG311", "CG321", "NG311", "90.00", "113.00", " ", " ", "OBTZ, 1,1-dioxo-3,4-dihydro-2H-1,2,4-benzothiadiazine, xxwy"}, {"NG311", "CG321", "HGA2", "32.40", "109.50", "50.00", "2.1300", "PEI polymers, kevo"}, {"NG321", "CG321", "HGA2", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"OG301", "CG321", "HGA2", "45.90", "108.89", " ", " ", "ETOB, Ethoxybenzene, cacha"}, {"OG302", "CG321", "HGA2", "60.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, methyl acetate"}, {"OG303", "CG321", "HGA2", "60.00", "109.50", " ", " ", "PROTNA Thr-Phos"}, {"OG311", "CG321", "HGA2", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG321", "HGA2", "65.00", "118.30", " ", " ", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OG3C61", "CG321", "OG3C61", "45.00", "110.50", " ", " ", "DIXB, dioxane"}, {"OG3C61", "CG321", "HGA2", "45.00", "109.50", " ", " ", "DIOX, dioxane"}, {"OG3R60", "CG321", "HGA2", "55.00", "111.50", " ", " ", "PY02, 2h-pyran"}, {"PG1", "CG321", "HGA2", "90.00", "110.00", "5.40", "1.802", "BDFP, Benzylphosphonate re-optimize?"}, {"PG2", "CG321", "HGA2", "90.00", "110.00", "5.40", "1.802", "BDFD, Benzylphosphonate / re-optimize?"}, {"SG301", "CG321", "HGA2", "38.00", "111.00", " ", " ", "PROT new S-S atom type 8/24/90"}, {"SG311", "CG321", "SG311", "100.00", "117.00", " ", " ", "THIT, trithiazine"}, {"SG311", "CG321", "HGA2", "46.10", "111.30", " ", " ", "PROT vib. freq. and HF/geo. (DTN) 8/24/90"}, {"SG3O1", "CG321", "HGA2", "49.00", "109.00", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"SG3O2", "CG321", "HGA2", "45.00", "107.00", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"SG3O3", "CG321", "HGA2", "45.00", "107.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CLGA1", "CG321", "HGA2", "42.00", "107.00", " ", " ", "CLET, chloroethane"}, {"BRGA1", "CG321", "HGA2", "36.00", "106.00", " ", " ", "BRET"}, {"HGA2", "CG321", "HGA2", "35.50", "109.00", "5.40", "1.802", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG322", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG331", "CG322", "HGA6", "31.00", "112.00", "3.00", "2.168", "FLUROALK fluoroalkanes"}, {"FGA1", "CG322", "HGA6", "57.50", "108.89", "5.00", "1.997", "FLUROALK fluoroalkanes"}, {"HGA6", "CG322", "HGA6", "35.50", "108.40", "10.40", "1.746", "FLUROALK fluoroalkanes"}, {"CG331", "CG323", "SG302", "55.00", "118.00", " ", " ", "PROT ethylthiolate, adm jr., 6/1/92"}, {"CG331", "CG323", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT ethylthiolate, adm jr., 6/1/92"}, {"SG302", "CG323", "HGA2", "40.00", "112.30", " ", " ", "PROT methylthiolate, adm jr., 6/1/92"}, {"SG302", "CG323", "HGA3", "40.00", "112.30", " ", " ", "PROT methylthiolate, adm jr., 6/1/92"}, {"HGA2", "CG323", "HGA2", "35.50", "108.40", "14.00", "1.77500", "PROT methylthiolate, adm jr., 6/1/92"}, {"HGA3", "CG323", "HGA3", "35.50", "108.40", "14.00", "1.77500", "PROT methylthiolate, adm jr., 6/1/92"}, {"CG2O1", "CG324", "NG3P3", "43.70", "110.00", " ", " ", "PROT alanine (JCS)"}, {"CG2O1", "CG324", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O3", "CG324", "NG3P3", "43.70", "110.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG324", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2R61", "CG324", "NG3P1", "45.00", "102.30", "35.00", "2.10100", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "HGA2", "49.30", "107.50", " ", " ", "BPIP, N-Benzyl PIP, cacha"}, {"CG311", "CG324", "NG3P1", "100.00", "110.00", " ", " ", "FLAVOP PIP1,2,3"}, {"CG311", "CG324", "NG3P2", "40.00", "110.00", " ", " ", "G3P(R/S), 01OH04"}, {"CG311", "CG324", "HGA2", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG2O1", "56.80", "109.00", " ", " ", "NIPR, nitropropane, abar"}, {"CG321", "CG324", "NG2P1", "67.70", "110.00", " ", " ", "RETINOL SCK1, protonated Schiff's base #eq#"}, {"CG321", "CG324", "NG3P0", "67.70", "115.00", " ", " ", "LIPID tetramethylammonium"}, {"CG321", "CG324", "NG3P1", "100.00", "110.00", " ", " ", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG3P2", "40.00", "110.00", " ", " ", "PIP, piperidine"}, {"CG321", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "LIPID ethanolamine"}, {"CG321", "CG324", "HGA2", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "HGP5", "33.43", "110.10", "22.53", "2.17900", "LIPID alkane"}, {"CG331", "CG324", "NG3P0", "67.70", "115.00", " ", " ", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG331", "CG324", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG324", "HGP5", "33.43", "110.10", "22.53", "2.17900", "LIPID alkane"}, {"CG3C31", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT new aliphatics, adm jr., 2/3/92m; jhs"}, {"CG3C31", "CG324", "HGA2", "34.60", "110.10", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs, UB term deleted"}, {"NG2O1", "CG324", "HGA2", "60.00", "106.30", " ", " ", "NIPR, nitropropane, abar"}, {"NG2P1", "CG324", "HGA2", "42.00", "110.10", " ", " ", "RETINOL SCK1, deprotonated Schiff's base #eq#"}, {"NG3P0", "CG324", "HGP5", "40.00", "109.50", "27.00", "2.130", "LIPID tetramethylammonium"}, {"NG3P1", "CG324", "HGA2", "45.00", "102.30", "35.00", "2.10100", "FLAVOP PIP1,2,3"}, {"NG3P2", "CG324", "HGA2", "45.00", "102.30", "35.00", "2.10100", "PIP, piperidine"}, {"NG3P3", "CG324", "HGA2", "45.00", "107.50", "35.00", "2.101", "NA methylammonium"}, {"HGA2", "CG324", "HGA2", "35.50", "109.00", "5.40", "1.80200", "PIP1,2,3"}, {"HGP5", "CG324", "HGP5", "24.00", "109.50", "28.00", "1.767", "LIPID tetramethylammonium"}, {"CG1N1", "CG331", "HGA3", "50.00", "110.50", " ", " ", "ACN, acetonitrile, kevo"}, {"CG1T1", "CG331", "HGA3", "47.00", "111.50", " ", " ", "2BTY, 2-butyne, kevo"}, {"CG2D1", "CG331", "HGA3", "42.00", "111.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2DC1", "CG331", "HGA3", "42.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG331", "HGA3", "42.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2N2", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.13000", "AMDN, amidinium, mp2 geom, pram"}, {"CG2O1", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O2", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O4", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "AALD, acetaldehyde from PROT adm jr. 5/02/91, acetic acid pure solvent consistent with adm 11/08"}, {"CG2O5", "CG331", "HGA3", "50.00", "109.50", " ", " ", "methylketones 3ACP, ACO; from PROT Alanine Dipeptide ab initio calc's (LK) consistent with adm 11/08"}, {"CG2R51", "CG331", "HGA3", "55.00", "109.50", " ", " ", "INDO/TRP"}, {"CG2R61", "CG331", "HGA3", "49.30", "107.50", " ", " ", "PROT toluene, adm jr. 3/7/92"}, {"CG2R62", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "NA Alkanes, sacred"}, {"CG301", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "RETINOL TMCH/MECH"}, {"CG302", "CG331", "HGA3", "33.00", "110.50", "39.00", "2.15500", "FLUROALK fluoroalkanes"}, {"CG311", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG312", "CG331", "HGA3", "33.00", "110.50", "37.00", "2.16800", "FLUROALK fluoroalkanes"}, {"CG314", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG321", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG322", "CG331", "HGA3", "33.00", "110.50", "38.00", "2.18100", "FLUROALK fluoroalkanes"}, {"CG323", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT ethylthiolate, adm jr., 6/1/92"}, {"CG324", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG331", "HGA3", "37.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.179", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"NG2D1", "CG331", "HGA3", "42.00", "113.50", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated"}, {"NG2R51", "CG331", "HGA3", "33.43", "110.10", " ", " ", "NA FOR 9-M-G(C), adm jr."}, {"NG2R61", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.179", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"NG2S0", "CG331", "HGA3", "50.00", "105.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S1", "CG331", "HGA3", "51.50", "109.50", " ", " ", "PROT NMA crystal (JCS)"}, {"NG2S3", "CG331", "HGA3", "51.50", "107.50", " ", " ", "Was introduced for 'PROT methylguanidiniumi (MGU1, MGU2)', then (questionably) transferred to 'Phosphoramidate (PHA)'. In 2008, the atom types were split ==> RE-OPTIMIZE!!!"}, {"NG301", "CG331", "HGA3", "30.50", "109.70", "50.00", "2.1400", "TMC, from NG311 CG331 HGA3, yxu"}, {"NG311", "CG331", "HGA3", "30.50", "109.70", "50.00", "2.1400", "MGU2, methylguanidine2"}, {"OG301", "CG331", "HGA3", "45.90", "108.89", " ", " ", "MEOB, Methoxybenzene, cacha"}, {"OG302", "CG331", "HGA3", "60.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, methyl acetate"}, {"OG303", "CG331", "HGA3", "60.00", "109.50", " ", " ", "NA DMP, ADM Jr."}, {"OG311", "CG331", "HGA3", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG331", "HGA3", "65.00", "118.30", " ", " ", "PROT methoxide, adm jr., 6/1/92"}, {"SG301", "CG331", "HGA3", "38.00", "111.00", " ", " ", "PROT new S-S atom type 8/24/90"}, {"SG311", "CG331", "HGA3", "46.10", "111.30", " ", " ", "PROT vib. freq. and HF/geo. (DTN) 8/24/90"}, {"SG3O1", "CG331", "HGA3", "42.00", "110.60", " ", " ", "MSNA, methyl sulfonate, xhe"}, {"SG3O2", "CG331", "HGA3", "45.00", "108.50", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"SG3O3", "CG331", "HGA3", "46.10", "111.30", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG331", "HGA3", "35.50", "108.40", "5.40", "1.80200", "PROT alkane update, adm jr., 3/2/92"}, {"NG2O1", "CG334", "HGA3", "47.80", "108.00", " ", " ", "NIME, nitromethane, abar"}, {"NG2P1", "CG334", "HGA3", "42.00", "110.10", " ", " ", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"NG3P0", "CG334", "HGP5", "40.00", "109.50", "27.00", "2.13000", "LIPID tetramethylammonium"}, {"NG3P1", "CG334", "HGA3", "45.00", "102.30", "35.00", "2.10100", "FLAVOP PIP1,2,3"}, {"NG3P3", "CG334", "HGA3", "45.00", "107.50", "35.00", "2.10100", "PROT methylammonium (KK 03/10/92)"}, {"HGA3", "CG334", "HGA3", "35.50", "108.40", "5.40", "1.80200", "PROT alkane update, adm jr., 3/2/92"}, {"HGP5", "CG334", "HGP5", "24.00", "109.50", "28.00", "1.76700", "LIPID tetramethylammonium"}, {"NG301", "CG3AM0", "HGAAM0", "35.00", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM0", "CG3AM0", "HGAAM0", "35.50", "108.40", "5.40", "1.8020", "AMINE aliphatic amines"}, {"NG311", "CG3AM1", "HGAAM1", "30.50", "109.70", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "HGAAM1", "35.80", "109.00", "5.40", "1.8020", "AMINE aliphatic amines"}, {"NG321", "CG3AM2", "HGAAM2", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM2", "CG3AM2", "HGAAM2", "35.00", "109.47", "5.40", "1.8020", "AMINE aliphatic amines"}, {"CG321", "CG3C31", "CG3C31", "67.35", "116.70", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C31", "OG3C31", "60.35", "115.50", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C31", "HGA1", "30.00", "115.40", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG324", "CG3C31", "CG3C31", "58.35", "120.00", " ", " ", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs ! Kenno: outside angle of a 3-membered ring; the QM value is ~119 and the MM ~115."}, {"CG324", "CG3C31", "HGA1", "34.60", "110.10", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs, UB term deleted"}, {"CG3C31", "CG3C31", "CG3C31", "77.35", "111.00", "8.00", "2.56100", "PROTMOD cyclopropane"}, {"CG3C31", "CG3C31", "OG3C31", "30.00", "103.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"CG3C31", "CG3C31", "HGA1", "23.00", "117.10", "22.53", "2.17900", "PROTMOD cyclopropane"}, {"CG3C31", "CG3C31", "HGA2", "23.00", "117.10", "22.53", "2.17900", "PROTMOD cyclopropane"}, {"CG3RC1", "CG3C31", "CG3RC1", "53.35", "58.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"OG3C31", "CG3C31", "HGA1", "64.00", "118.50", " ", " ", "1BOX, 1-butene oxide, sc"}, {"OG3C31", "CG3C31", "HGA2", "68.50", "115.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"HGA2", "CG3C31", "HGA2", "23.00", "117.00", "5.40", "1.80200", "PROTMOD cyclopropane"}, {"CG2R53", "CG3C41", "CG3C41", "90.00", "106.00", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG2R53", "CG3C41", "HGA2", "46.00", "112.30", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "CG3C41", "70.00", "106.00", " ", " ", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"CG3C41", "CG3C41", "NG2R43", "90.00", "104.50", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "OG3C51", "89.00", "99.49", " ", " ", "OXTN, oxetane, gmu"}, {"CG3C41", "CG3C41", "HGA2", "46.00", "110.50", " ", " ", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"NG2R43", "CG3C41", "HGA2", "51.00", "110.80", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"OG3C51", "CG3C41", "HGA2", "55.00", "112.00", " ", " ", "OXTN, oxetane, gmu"}, {"HGA2", "CG3C41", "HGA2", "28.00", "105.00", "5.40", "1.8067", "CBU, cyclobutane; AZDO, 2-azetidinone; QM by Nikolay Simakov; lsk and kevo"}, {"CG2O1", "CG3C51", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "NG2S0", "50.00", "108.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "50.00", "108.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG311", "CG3C51", "CG3RC1", "52.00", "108.00", " ", " ", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG321", "CG3C51", "CG3C51", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG321", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG321", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "OG3C51", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CG321", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG331", "CG3C51", "CG3C51", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG331", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG331", "CG3C51", "CG3RC1", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "OG3C51", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CG331", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3C51", "CG3C51", "CG3C51", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C53", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "NG2R51", "110.00", "111.00", " ", " ", "NA T/U/G, Arabinose (NF)"}, {"CG3C51", "CG3C51", "NG2R61", "110.00", "111.00", " ", " ", "NA C/A, RNA"}, {"CG3C51", "CG3C51", "NG2S3", "43.70", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C51", "CG3C51", "NG301", "110.00", "111.00", " ", " ", "NADH, NDPH; Kenno: reverted to C/A, RNA from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG321", "67.70", "107.50", " ", " ", "PROT arg, (DS)"}, {"CG3C51", "CG3C51", "OG303", "115.00", "109.70", " ", " ", "PROTNA Ser-Phos"}, {"CG3C51", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C51", "CG3C51", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "CG3C51", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG3C51", "CG3C51", "HGA1", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C51", "CG3C51", "HGA6", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C51", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "NG2R51", "140.00", "113.70", " ", " ", "NA"}, {"CG3C52", "CG3C51", "NG2R61", "110.00", "113.70", " ", " ", "NA C/A"}, {"CG3C52", "CG3C51", "NG2S0", "70.00", "110.80", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S3", "43.70", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C52", "CG3C51", "NG321", "67.70", "107.50", " ", " ", "PROT arg, (DS)"}, {"CG3C52", "CG3C51", "OG301", "58.00", "106.50", "8.00", "2.561", "THF2, THF-2'OMe c3'-c2'-om, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG303", "115.00", "109.70", " ", " ", "NA"}, {"CG3C52", "CG3C51", "OG311", "75.70", "110.00", " ", " ", "NA"}, {"CG3C52", "CG3C51", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "CG3C51", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG3C52", "CG3C51", "HGA1", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C51", "HGA6", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C53", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C53", "CG3C51", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3RC1", "CG3C51", "NG2R51", "110.00", "108.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R61", "110.00", "108.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG3C51", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "OG3C51", "140.00", "108.00", " ", " ", "NA"}, {"NG2R51", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NA From HGA1 CG3C51 NN2"}, {"NG2R61", "CG3C51", "OG3C51", "110.00", "108.00", " ", " ", "NA C/A DNA"}, {"NG2R61", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NA"}, {"NG2S0", "CG3C51", "HGA1", "48.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S3", "CG3C51", "HGA1", "48.00", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"NG301", "CG3C51", "OG3C51", "110.00", "112.00", " ", " ", "NADH, NDPH; Kenno: reverted to C/A RNA from par_all27_na.prm"}, {"NG301", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"NG321", "CG3C51", "HGA1", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"OG301", "CG3C51", "HGA1", "45.90", "108.50", " ", " ", "THF2, THF-2'OMe h2''-c2'-om, from Nucl. Acids, ed"}, {"OG303", "CG3C51", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG311", "CG3C51", "HGA1", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG3C51", "CG3C51", "HGA1", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"FGA1", "CG3C51", "HGA6", "57.50", "108.89", "5.00", "1.997", "FLUROALK fluoroalkanes"}, {"CG2R51", "CG3C52", "CG2R51", "76.00", "107.60", " ", " ", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG3C52", "CG2R52", "84.00", "106.00", " ", " ", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG3C52", "CG2R53", "45.00", "108.00", " ", " ", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "CG2RC0", "40.00", "107.30", " ", " ", "INDE, indene, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "52.00", "106.00", " ", " ", "105 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "CG3C54", "52.00", "103.30", " ", " ", "106 2PRL, 2-pyrroline RE-OPTIMIZE!, kevo"}, {"CG2R51", "CG3C52", "NG2R50", "105.00", "111.60", " ", " ", "115.00 111.60 2HPR, 2H-pyrrole 1, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "70.00", "105.10", " ", " ", "3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "OG3C51", "75.00", "102.40", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "HGA2", "52.00", "112.60", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R52", "CG3C52", "CG2RC0", "70.00", "105.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "80.00", "99.00", " ", " ", "99.5 99 2PRZ, 2-pyrazoline C3-C4-C5, kevo"}, {"CG2R52", "CG3C52", "HGA2", "58.00", "112.20", " ", " ", "112.2 2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole C3-C4-H4x, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "70.00", "106.50", " ", " ", "2PDO, 2-pyrrolidinone C2-C3-C4, kevo"}, {"CG2R53", "CG3C52", "HGA2", "58.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2RC0", "CG3C52", "CG2RC0", "40.00", "95.00", " ", " ", "FLRN, Fluorene, erh"}, {"CG2RC0", "CG3C52", "CG3C52", "65.00", "108.20", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "CG3C52", "HGA2", "38.00", "114.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG3C51", "CG3C52", "CG3C51", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3RC1", "80.00", "105.50", "8.00", "2.56100", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "NG3C51", "84.00", "107.60", " ", " ", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "CG3C52", "HGA2", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C52", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C52", "CG3C52", "CG3C53", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C54", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "NG2R50", "40.00", "107.10", " ", " ", "104.2 ! 105.80 2IMI, 2-imidazoline N3-C4-C5 d1,d1a, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "90.00", "104.50", " ", " ", "2PDO, 2-pyrrolidinone C4-C5-N1, kevo"}, {"CG3C52", "CG3C52", "NG2S0", "70.00", "110.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "NG3C51", "84.00", "107.60", " ", " ", "107 PRLD, pyrrolidine; 103.3 2PRL, 2-pyrroline; 100.4 2IMI, 2-imidazoline; 2PRZ, 2-pyrazoline, kevo"}, {"CG3C52", "CG3C52", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "CG3C52", "HGA2", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C53", "CG3C52", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C52", "NG3C51", "87.00", "110.40", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"CG3C54", "CG3C52", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3C52", "CG3RC1", "58.00", "105.30", " ", " ", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R50", "CG3C52", "HGA2", "44.00", "109.80", " ", " ", "2IMI, 2-imidazoline; 2HPR, 2H-pyrrole, kevo"}, {"NG2R53", "CG3C52", "HGA2", "59.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2S0", "CG3C52", "HGA2", "48.00", "108.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "HGA2", "54.00", "109.00", " ", " ", "107.7 PRLD, pyrrolidine; 110.8 2PRL, 2-pyrroline; 110.4 3PRL, 3-pyrroline; 111.4 2IMI, 2-imidazoline; 111.7 2PRZ, 2-pyrazoline, kevo"}, {"OG3C51", "CG3C52", "OG3C51", "85.00", "108.10", " ", " ", "DIOL, 1,3-Dioxolane, erh"}, {"OG3C51", "CG3C52", "HGA2", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"HGA2", "CG3C52", "HGA2", "38.50", "106.80", "5.40", "1.802", "THF, 10/17/05 viv"}, {"CG2O1", "CG3C53", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "NG3P2", "50.00", "106.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "50.00", "106.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C53", "NG2R61", "110.00", "111.00", " ", " ", "NA C/A, RNA"}, {"CG3C51", "CG3C53", "OG3C51", "120.00", "106.25", " ", " ", "NA"}, {"CG3C51", "CG3C53", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C52", "CG3C53", "NG3P2", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "HGA1", "35.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2R61", "CG3C53", "OG3C51", "110.00", "108.00", " ", " ", "NA C/A DNA"}, {"NG2R61", "CG3C53", "HGA1", "43.00", "111.00", " ", " ", "NA"}, {"NG3P2", "CG3C53", "HGA1", "51.50", "107.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG3C51", "CG3C53", "HGA1", "45.20", "107.24", " ", " ", "NA"}, {"CG2R51", "CG3C54", "NG2R52", "138.00", "103.10", " ", " ", "2HPP, 2H-pyrrole.H+ N1-C2-C3, kevo"}, {"CG2R51", "CG3C54", "NG3P2", "62.00", "103.00", " ", " ", "3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG3C54", "HGA2", "41.00", "114.80", " ", " ", "109.8 3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C54", "NG2R52", "68.00", "106.00", " ", " ", "2IMP, 2-imidazoline.H+ 1a,1, kevo"}, {"CG3C54", "CG3C54", "HGA2", "26.50", "110.10", "22.53", "2.17900", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"NG2R52", "CG3C54", "HGA2", "54.00", "107.00", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG3C51", "CG3C54", "NG3P2", "86.00", "119.00", " ", " ", "IMDP, imidazolidine ! questionable - RE-OPTIMIZE?, erh and kevo"}, {"NG3C51", "CG3C54", "HGA2", "53.00", "114.60", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"NG3P2", "CG3C54", "HGA2", "51.50", "109.15", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C54", "HGA2", "35.50", "109.00", "5.40", "1.80200", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3RC1", "CG331", "58.35", "113.50", "11.16", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3C51", "58.35", "113.50", "11.16", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3C52", "53.35", "111.00", "8.00", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "53.35", "108.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG331", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3C31", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3C51", "53.35", "111.00", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3C52", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3RC1", "CG3C51", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG3RC1", "CG3RC1", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C31", "CG3RC1", "CG3C51", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3C52", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "53.35", "62.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3C52", "70.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3C51", "CG3RC1", "CG3RC1", "53.35", "108.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3C52", "56.00", "109.40", " ", " ", "NORB, Norbornane, kevo"}, {"CG3C52", "CG3RC1", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R53", "70.00", "113.70", " ", " ", "CBHH, glycoluril, (CG3RC1 CG3RC1 NG2R51), jing"}, {"CG3RC1", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "OG3C51", "50.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3RC1", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG3RC1", "NG2R53", "70.00", "117.00", " ", " ", "CBHH, glycoluril, jing"}, {"NG2R53", "CG3RC1", "HGA1", "59.00", "111.00", " ", " ", "CBHH, glycoluril, (NG2R53 CG3C52 HGA2), jing"}, {"OG3C51", "CG3RC1", "OG3C51", "70.00", "105.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"OG3C51", "CG3RC1", "HGA1", "55.00", "106.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG2D1", "NG2D1", "CG321", "74.50", "111.00", " ", " ", "EEPI, from CG2D1 NG2D1 CG331, fylin"}, {"CG2D1", "NG2D1", "CG331", "67.00", "111.00", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2D1", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2DC1", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ2, hydrazone model cmpd"}, {"CG2DC2", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ2, hydrazone model cmpd"}, {"CG2N1", "NG2D1", "CG331", "50.00", "108.00", " ", " ", "MGU1, methylguanidine"}, {"CG2N1", "NG2D1", "HGP1", "49.00", "113.00", " ", " ", "MGU2, methylguanidine2"}, {"CG2N2", "NG2D1", "CG321", "45.00", "103.80", " ", " ", "MT2A, fylin, re-opt"}, {"CG2O7", "NG2D1", "CG331", "9.00", "136.00", " ", " ", "MICY, methyl isocyanate, xxwy"}, {"CG2R61", "NG2O1", "OG2N1", "65.00", "116.00", " ", " ", "NITB, nitrobenzene"}, {"CG324", "NG2O1", "OG2N1", "56.00", "117.00", " ", " ", "NIPR, nitropropane, abar"}, {"CG334", "NG2O1", "OG2N1", "60.00", "120.00", " ", " ", "NIME, nitromethane, abar ! we'll tolerate the angle strain in this specific case - Kenno"}, {"OG2N1", "NG2O1", "OG2N1", "105.00", "128.00", " ", " ", "NITB, nitrobenzene"}, {"CG2D1", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2N1", "NG2P1", "CG324", "62.30", "120.00", " ", " ", "PROT 107.5->120.0 to make planar Arg (KK)"}, {"CG2N1", "NG2P1", "CG334", "62.30", "120.00", " ", " ", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG2N1", "NG2P1", "HGP2", "49.00", "120.00", " ", " ", "PROT 35.3->49.0 GUANIDINIUM (KK)"}, {"CG2N2", "NG2P1", "HGP2", "40.00", "120.00", " ", " ", "AMDN, amidinium; BAMI, benzamidinium; mp2 molvib; pram"}, {"CG324", "NG2P1", "HGP2", "40.40", "120.00", " ", " ", "PROT 107.5->120.0 to make planar Arg (KK)"}, {"CG334", "NG2P1", "HGP2", "40.40", "120.00", " ", " ", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGP2", "NG2P1", "HGP2", "25.00", "120.00", " ", " ", "PROT 40.0->25.0 GUANIDINIUM (KK)"}, {"CG2R53", "NG2R43", "CG3C41", "85.00", "111.50", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "NG2R43", "HGP1", "34.00", "129.70", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "NG2R43", "HGP1", "34.00", "125.30", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG2R51", "NG2R50", "CG2R52", "58.00", "103.00", " ", " ", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "NG2R50", "CG2R53", "130.00", "103.50", " ", " ", "PROT his, adm jr., 6/27/90 @@@@@ Kenno: 104 --> 103.5 @@@@@"}, {"CG2R51", "NG2R50", "NG2R50", "110.00", "106.80", " ", " ", "OXAD, oxadiazole123 @@@@@ Kenno: 107.1 --> 106.8 @@@@@"}, {"CG2R52", "NG2R50", "CG2RC0", "60.00", "103.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R52", "NG2R50", "CG3C52", "115.00", "102.90", " ", " ", "105.00 102.90 2HPR, 2H-pyrrole 1,1a, kevo"}, {"CG2R52", "NG2R50", "NG2R51", "160.00", "103.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R52", "NG2R50", "NG3C51", "160.00", "105.50", " ", " ", "107.5 2PRZ, 2-pyrazoline N1-N2-C3, kevo"}, {"CG2R52", "NG2R50", "OG2R50", "150.00", "103.30", " ", " ", "ISOX, isoxazole @@@@@ Kenno: 105.6 --> 103.3 @@@@@"}, {"CG2R52", "NG2R50", "SG2R50", "150.00", "111.00", " ", " ", "ISOT, isothiazole"}, {"CG2R53", "NG2R50", "CG2R53", "100.00", "101.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "CG2RC0", "120.00", "103.80", " ", " ", "NA Gua 5R)"}, {"CG2R53", "NG2R50", "CG3C52", "160.00", "101.90", " ", " ", "101.0 ! 104.50 2IMI, 2-imidazoline C2-N3-C4 d1a, kevo"}, {"CG2R53", "NG2R50", "NG2R51", "100.00", "101.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "OG2R50", "50.00", "103.00", " ", " ", "OXD4, oxadiazole124, xxwy"}, {"NG2R50", "NG2R50", "NG2R51", "160.00", "102.20", " ", " ", "TRZ3, triazole123 @@@@@ Kenno: 101.9 --> 102.2 @@@@@"}, {"NG2R50", "NG2R50", "OG2R50", "110.00", "103.00", " ", " ", "OXAD, oxadiazole123 @@@@@ Kenno: 105.5 --> 103.0 @@@@@"}, {"CG2R51", "NG2R51", "CG2R51", "100.00", "109.00", " ", " ", "PYRL, pyrrole"}, {"CG2R51", "NG2R51", "CG2R53", "130.00", "107.50", " ", " ", "PROT his, adm jr., 6/27/90"}, {"CG2R51", "NG2R51", "CG2RC0", "85.00", "110.00", " ", " ", "adm,dec06(112.0)INDO/TRP"}, {"CG2R51", "NG2R51", "CG321", "70.00", "127.10", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG2R51", "NG2R51", "CG3C51", "130.00", "126.00", " ", " ", "NA"}, {"CG2R51", "NG2R51", "NG2R50", "160.00", "115.00", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "NG2R51", "HGP1", "30.00", "125.50", "20.00", "2.15000", "PROT his, adm jr., 6/27/90"}, {"CG2R53", "NG2R51", "CG2RC0", "100.00", "107.20", " ", " ", "NA Gua 5R)"}, {"CG2R53", "NG2R51", "CG331", "70.00", "127.80", " ", " ", "NA 9-M-A, adm jr."}, {"CG2R53", "NG2R51", "CG3C51", "45.00", "126.30", " ", " ", "NA G"}, {"CG2R53", "NG2R51", "CG3RC1", "45.00", "127.60", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R53", "NG2R51", "NG2R50", "130.00", "114.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R51", "HGP1", "30.00", "127.00", "20.00", "2.14000", "PROT his, adm jr., 6/27/90"}, {"CG2RC0", "NG2R51", "CG2RC0", "85.00", "110.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2RC0", "NG2R51", "CG331", "70.00", "125.90", " ", " ", "NA 9-M-G, adm jr."}, {"CG2RC0", "NG2R51", "CG3C51", "45.00", "126.50", " ", " ", "NA G"}, {"CG2RC0", "NG2R51", "CG3RC1", "45.00", "126.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2RC0", "NG2R51", "NG2R50", "190.00", "114.50", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "NG2R51", "HGP1", "28.00", "126.00", " ", " ", "INDO/TRP"}, {"CG321", "NG2R51", "NG2R50", "70.00", "117.90", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"NG2R50", "NG2R51", "NG2R50", "90.00", "121.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "NG2R51", "HGP1", "32.00", "119.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "NG2R52", "CG2R53", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R52", "HGP2", "25.00", "124.90", "15.00", "2.13000", "PROT his, adm jr., 6/27/90"}, {"CG2R52", "NG2R52", "CG3C54", "101.00", "111.90", " ", " ", "2HPP, 2H-pyrrole.H+ C5-N1-C2, kevo"}, {"CG2R52", "NG2R52", "HGP2", "29.00", "123.20", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R53", "NG2R52", "CG3C54", "140.00", "108.00", " ", " ", "2IMP, 2-imidazoline.H+ 1,1a, kevo"}, {"CG2R53", "NG2R52", "HGP2", "25.00", "127.10", "15.00", "2.09000", "PROT his, adm jr., 6/27/90"}, {"CG3C54", "NG2R52", "HGP2", "29.00", "124.90", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG251O", "NG2R53", "CG2R53", "116.00", "117.50", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG251O", "NG2R53", "HGP1", "38.00", "123.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "NG2R53", "CG2R53", "116.00", "117.50", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "NG2R53", "HGP1", "38.00", "123.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "NG2R53", "CG2R53", "55.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "NG2R53", "CG311", "50.00", "120.00", " ", " ", "drug design project, xxwy"}, {"CG2R53", "NG2R53", "CG3C52", "75.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone C5-N1-C2 v, kevo"}, {"CG2R53", "NG2R53", "CG3RC1", "75.00", "112.00", " ", " ", "CBHH, glycoluril, jing"}, {"CG2R53", "NG2R53", "HGP1", "38.00", "119.50", " ", " ", "2PDO, 2-pyrrolidinone (H1-N1-C2), kevo"}, {"CG3C52", "NG2R53", "HGP1", "38.00", "116.00", " ", " ", "2PDO, 2-pyrrolidinone (C5-N1-H1), kevo"}, {"CG3RC1", "NG2R53", "HGP1", "38.00", "116.00", " ", " ", "CBHH, glycoluril, (CG3C52 NG2R53 HGP1), jing"}, {"CG2R51", "NG2R57", "CG2R51", "100.00", "109.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 NG2R51 CG2R51; lf"}, {"CG2R51", "NG2R57", "CG2R57", "42.00", "125.50", " ", " ", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "NG2R57", "NG2R57", "54.00", "125.50", " ", " ", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R61", "NG2R60", "CG2R61", "20.00", "112.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R61", "NG2R60", "CG2R64", "20.00", "112.00", " ", " ", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "NG2R60", "CG2R67", "20.00", "109.20", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "NG2R61", "CG2R63", "10.00", "123.90", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "NG2R61", "HGP1", "33.00", "120.70", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "NG2R61", "CG2R62", "30.00", "120.00", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "NG2R61", "CG2R63", "70.00", "122.00", " ", " ", "NA U, adm jr. 11/97"}, {"CG2R62", "NG2R61", "CG331", "70.00", "120.50", " ", " ", "NA 1-M-C, adm jr. 7/24/91"}, {"CG2R62", "NG2R61", "CG3C51", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "CG3C53", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "CG3RC1", "45.00", "115.90", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "HGP1", "32.00", "117.40", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "NG2R61", "HGP2", "32.00", "117.40", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "NG2R61", "CG2R63", "50.00", "130.20", " ", " ", "NA U"}, {"CG2R63", "NG2R61", "CG2R64", "70.00", "131.10", " ", " ", "NA Gua 6R)G, adm jr. 11/97"}, {"CG2R63", "NG2R61", "CG331", "70.00", "115.40", " ", " ", "NA 1-M-C, adm jr."}, {"CG2R63", "NG2R61", "CG3C51", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R63", "NG2R61", "CG3RC1", "45.00", "120.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R63", "NG2R61", "HGP1", "40.50", "115.40", " ", " ", "NA U"}, {"CG2R64", "NG2R61", "HGP1", "45.00", "115.60", " ", " ", "NA Gua"}, {"CG2R61", "NG2R62", "CG2R64", "40.00", "110.50", " ", " ", "PYRM, pyrimidine %% TEST 108.0 -> 113.4 %%"}, {"CG2R61", "NG2R62", "NG2R62", "10.00", "120.00", " ", " ", "PYRD, pyridazine"}, {"CG2R62", "NG2R62", "CG2R62", "25.00", "114.10", " ", " ", "PYRH , from CG2R62 NG2R62 CG2R64, fylin"}, {"CG2R62", "NG2R62", "CG2R64", "70.00", "115.50", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R63", "NG2R62", "CG2R64", "85.00", "119.10", " ", " ", "NA C"}, {"CG2R64", "NG2R62", "CG2R64", "90.00", "117.80", " ", " ", "NA Ade 6R) adm jr. 11/97"}, {"CG2R64", "NG2R62", "CG2RC0", "90.00", "115.10", " ", " ", "NA Ade 6R) %% TEST 110.1 -> 120.9 %%"}, {"CG2R64", "NG2R62", "NG2R62", "65.00", "121.00", " ", " ", "TRIB, triazine124"}, {"CG2R62", "NG2R67", "CG2R62", "30.00", "120.00", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 NG2R61 CG2R62; isg"}, {"CG2R62", "NG2R67", "CG2R63", "70.00", "128.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 NG2R61 CG2R63; isg"}, {"CG2R62", "NG2R67", "CG2R67", "52.00", "120.0", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R63", "NG2R67", "CG2R63", "50.00", "128.70", " ", " ", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R63", "NG2R67", "CG2R64", "70.00", "126.10", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R63 NG2R61 CG2R64; isg"}, {"CG2R63", "NG2R67", "CG2R67", "33.00", "111.30", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 NG2R61 CG2R63; isg"}, {"CG2R64", "NG2R67", "CG2R67", "55.00", "121.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R63 NG2R61 CG2R64; isg"}, {"CG2R51", "NG2RC0", "CG2R61", "15.00", "130.50", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R51", "NG2RC0", "CG2RC0", "100.00", "109.70", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "NG2RC0", "CG2RC0", "15.00", "119.80", " ", " ", "INDZ, indolizine, kevo"}, {"CG2O1", "NG2S0", "CG331", "42.00", "119.50", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG2O1", "NG2S0", "CG3C51", "60.00", "117.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S0", "CG3C52", "60.00", "117.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "NG2S0", "CG331", "45.00", "121.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG3C51", "NG2S0", "CG3C52", "100.00", "114.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S1", "CG2R61", "50.00", "120.00", " ", " ", "RESI PACP, FRET AND OTHERS"}, {"CG2O1", "NG2S1", "CG2R64", "50.00", "120.00", " ", " ", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG2O1", "NG2S1", "CG311", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "CG321", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "CG331", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "NG2D1", "50.00", "115.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2O1", "NG2S1", "HGP1", "34.00", "123.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O6", "NG2S1", "CG321", "60.00", "120.00", " ", " ", "DECB, diehtyl carbamate, from DMCB, cacha and kevo and xxwy"}, {"CG2O6", "NG2S1", "CG331", "60.00", "120.00", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo and xxwy"}, {"CG2O6", "NG2S1", "HGP1", "40.00", "121.50", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo and xxwy"}, {"CG2R61", "NG2S1", "HGP1", "34.00", "117.00", " ", " ", "RESI PACP, FRET AND OTHERS"}, {"CG2R64", "NG2S1", "HGP1", "34.00", "117.00", " ", " ", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG311", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"CG321", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"CG331", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"NG2D1", "NG2S1", "HGP1", "34.00", "122.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2O1", "NG2S2", "HGP1", "50.00", "120.00", " ", " ", "PROT his, adm jr. 8/13/90 geometry and vibrations"}, {"CG2O6", "NG2S2", "HGP1", "50.00", "120.00", " ", " ", "PROT his, adm jr. 8/13/90 geometry and vibrations NOW UREA ==> re-optimize???"}, {"HGP1", "NG2S2", "HGP1", "23.00", "120.00", " ", " ", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG2R61", "NG2S3", "HGP4", "60.00", "111.60", " ", " ", "PYRIDINE aminopyridine, adm jr., 7/94 kevo: 120 --> 111.6"}, {"CG2R64", "NG2S3", "HGP4", "40.00", "121.50", " ", " ", "NA Ade h61,h62, C,A,G"}, {"CG321", "NG2S3", "SG3O1", "58.70", "104.90", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG321", "NG2S3", "HGP1", "51.80", "109.50", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "NG2S3", "PG1", "110.00", "118.30", "35.0", "2.33", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "SG3O1", "39.50", "103.10", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"CG331", "NG2S3", "HGP1", "35.00", "109.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "110.00", "118.30", "35.0", "2.33", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "HGP1", "35.00", "109.00", " ", " ", "NABAKB phosphoramidates"}, {"PG1", "NG2S3", "HGP1", "30.00", "123.60", "40.0", "2.35", "NABAKB phosphoramidates"}, {"SG3O1", "NG2S3", "HGP1", "47.00", "113.10", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"HGP4", "NG2S3", "HGP4", "31.00", "117.00", " ", " ", "NA Ade C,A,G"}, {"CG2D1O", "NG301", "CG2D1O", "20.00", "114.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG301", "CG3C51", "70.00", "121.70", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG301", "CG2D2O", "20.00", "114.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG301", "CG3C51", "70.00", "121.70", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "NG301", "CG331", "48.00", "113.50", " ", " ", "TMC, trimethylcytosine, yxu; DMAN, N,N-dimethylaniline, kevo"}, {"CG2R64", "NG301", "CG331", "48.00", "113.50", " ", " ", "TMC, trimethylcytosine, yxu"}, {"CG331", "NG301", "CG331", "42.50", "116.00", " ", " ", "TMC, trimethylcytosine, yxu; DMAN, N,N-dimethylaniline, kevo"}, {"CG3AM0", "NG301", "CG3AM0", "53.00", "110.90", " ", " ", "AMINE aliphatic amines"}, {"CG2D1O", "NG311", "CG2D1O", "20.00", "114.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG311", "HGPAM1", "39.00", "123.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "CG2D2O", "20.00", "114.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "HGPAM1", "39.00", "123.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2N1", "NG311", "CG331", "43.00", "106.00", " ", " ", "MGU2, methylguanidine2"}, {"CG2N1", "NG311", "HGPAM1", "45.00", "106.00", " ", " ", "MGU2, methylguanidine2 Kenno: 104 -> 106"}, {"CG2R61", "NG311", "CG2R61", "40.00", "109.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "NG311", "CG321", "55.00", "113.00", " ", " ", "OBTZ, 1,1-dioxo-3,4-dihydro-2H-1,2,4-benzothiadiazine, xxwy"}, {"CG2R61", "NG311", "SG3O2", "35.00", "115.00", " ", " ", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "NG311", "HGP1", "40.00", "114.00", " ", " ", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "NG311", "HGPAM1", "45.00", "115.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG321", "NG311", "CG321", "40.50", "109.60", " ", " ", "5UHG, from nmgn, cgenff_compromise, kevo"}, {"CG321", "NG311", "SG3O2", "60.00", "115.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "HGP1", "46.00", "111.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "HGPAM1", "35.00", "111.00", " ", " ", "compromise between PEI0 on the one hand and OBTZ AOBT on the other hand, kevo and xxwy"}, {"CG331", "NG311", "SG3O2", "68.00", "114.00", " ", " ", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"CG331", "NG311", "HGP1", "42.30", "111.50", " ", " ", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"CG331", "NG311", "HGPAM1", "45.00", "104.00", " ", " ", "MGU2, methylguanidine2"}, {"CG3AM1", "NG311", "CG3AM1", "40.50", "112.20", "5.00", "2.4217", "AMINE aliphatic amines"}, {"CG3AM1", "NG311", "HGPAM1", "42.10", "108.90", "5.00", "2.0292", "AMINE aliphatic amines"}, {"SG3O2", "NG311", "HGP1", "42.30", "113.20", " ", " ", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"CG2D1O", "NG321", "HGPAM2", "55.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram and kevo"}, {"CG2D2O", "NG321", "HGPAM2", "55.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram and kevo"}, {"CG2N1", "NG321", "HGPAM2", "55.00", "108.00", " ", " ", "MGU1, methylguanidine"}, {"CG2N2", "NG321", "HGPAM2", "50.00", "115.80", " ", " ", "MT2A, fylin"}, {"CG321", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"CG3AM2", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"CG3C51", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"SG3O2", "NG321", "HGP1", "49.00", "115.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGP1", "NG321", "HGP1", "38.00", "110.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGPAM2", "NG321", "HGPAM2", "42.00", "105.85", " ", " ", "AMINE aliphatic amines kevo: 29.50 -> 42.00 based on MAM1 molvib and AMET scans"}, {"HGPAM3", "NG331", "HGPAM3", "41.50", "107.10", " ", " ", "AMINE aliphatic amines kevo: 29.00 -> 41.50 based on MAM1 molvib and AMET scans"}, {"CG2R51", "NG3C51", "CG3C52", "45.00", "104.80", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "NG3C51", "HGP1", "43.00", "113.90", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R53", "NG3C51", "CG3C52", "40.00", "107.00", " ", " ", "104.60 77 2IMI, 2-imidazoline C5-N1-C2 d1, kevo"}, {"CG2R53", "NG3C51", "HGP1", "43.00", "115.60", " ", " ", "117.7 ! 112.5 ! 30 116.5 2IMI, 2-imidazoline H1-N1-C2, kevo"}, {"CG2RC0", "NG3C51", "CG3C52", "60.00", "106.90", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "NG3C51", "HGP1", "41.00", "114.50", " ", " ", "INDI, indoline, kevo"}, {"CG3C52", "NG3C51", "CG3C52", "140.00", "103.70", " ", " ", "102.9 PRLD, pyrrolidine; 105.4 3PRL, 3-pyrroline, kevo"}, {"CG3C52", "NG3C51", "CG3C54", "67.00", "104.10", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"CG3C52", "NG3C51", "NG2R50", "47.00", "109.00", " ", " ", "107.5 2PRZ, 2-pyrazoline C5-N1-N2, kevo"}, {"CG3C52", "NG3C51", "NG3P2", "47.00", "103.90", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG3C52", "NG3C51", "HGP1", "43.00", "112.00", " ", " ", "108 PRLD, pyrrolidine; 113 2PRL, 2-pyrroline; 106(v) 3PRL, 3-pyrroline; 117 2IMI, 2-imidazoline; 2PRZ, 2-pyrazoline, kevo"}, {"CG3C54", "NG3C51", "HGP1", "50.00", "109.25", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"NG2R50", "NG3C51", "HGP1", "50.00", "103.60", " ", " ", "104.9 2PRZ, 2-pyrazoline, kevo"}, {"NG3P2", "NG3C51", "HGP1", "56.00", "100.60", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG2R61", "NG3N1", "NG3N1", "60.00", "112.00", " ", " ", "PHHZ, phenylhydrazine, decrease angle to make HN become out of plane, ed"}, {"CG2R61", "NG3N1", "HGP1", "52.00", "115.00", " ", " ", "PHHZ, phenylhydrazine, decrease angle to make HN become out of plane, ed"}, {"NG3N1", "NG3N1", "HGP1", "55.00", "102.00", " ", " ", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "HGP1", "50.00", "102.00", " ", " ", "HDZN, hydrazine, ed"}, {"CG324", "NG3P0", "CG324", "60.00", "109.50", "26.", "2.466", "LIPID tetraethylammonium, from CG334 NG3P0 CG324"}, {"CG324", "NG3P0", "CG334", "60.00", "109.50", "26.", "2.466", "LIPID tetramethylammonium"}, {"CG334", "NG3P0", "CG334", "60.00", "109.50", "26.", "2.466", "LIPID tetramethylammonium"}, {"CG334", "NG3P0", "OG311", "69.00", "100.00", " ", " ", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"CG334", "NG3P0", "OG312", "80.00", "112.00", " ", " ", "TMAO, trimethylamine N-oxide, xxwy and ejd"}, {"CG324", "NG3P1", "CG324", "45.00", "115.20", " ", " ", "FLAVOP PIP1,2,3 ! tweaked 115.50 --> 115.20 by kevo"}, {"CG324", "NG3P1", "CG334", "45.00", "109.50", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "NG3P1", "HGP2", "30.00", "110.80", "27.00", "2.07400", "FLAVOP PIP1,2,3"}, {"CG334", "NG3P1", "HGP2", "30.00", "110.80", "27.00", "2.07400", "FLAVOP PIP1,2,3"}, {"CG2R51", "NG3P2", "CG3C54", "85.00", "107.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "NG3P2", "HGP2", "38.00", "112.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG314", "NG3P2", "CG324", "45.00", "115.20", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha ! tweaked 115.50 --> 115.20 by kevo"}, {"CG314", "NG3P2", "HGP2", "30.00", "110.80", "27.00", "2.07400", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG324", "NG3P2", "CG324", "40.00", "115.20", " ", " ", "PIP, piperidine ! tweaked 115.50 --> 115.20 by kevo"}, {"CG324", "NG3P2", "HGP2", "30.00", "110.80", "27.00", "2.07400", "PIP, piperidine"}, {"CG3C53", "NG3P2", "CG3C54", "100.00", "111.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "NG3P2", "HGP2", "33.00", "109.50", "4.00", "2.05600", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "NG3P2", "CG3C54", "104.00", "113.00", " ", " ", "PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "NG3P2", "NG3C51", "135.00", "114.20", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG3C54", "NG3P2", "HGP2", "33.00", "109.50", "4.00", "2.05600", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "NG3P2", "HGP2", "42.00", "106.30", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"HGP2", "NG3P2", "HGP2", "51.00", "107.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG324", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG334", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"HGP2", "NG3P3", "HGP2", "44.00", "109.50", " ", " ", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG2R51", "OG2R50", "CG2R51", "100.00", "106.00", " ", " ", "FURA, furan"}, {"CG2R51", "OG2R50", "CG2R53", "140.00", "104.00", " ", " ", "OXAZ, oxazole"}, {"CG2R51", "OG2R50", "CG2RC0", "50.00", "104.00", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2R51", "OG2R50", "NG2R50", "150.00", "108.50", " ", " ", "ISOX, isoxazole @@@@@ Kenno: 109.9 --> 108.5 @@@@@"}, {"CG2R53", "OG2R50", "NG2R50", "165.00", "109.30", " ", " ", "OXD4, oxadiazole124, xxwy"}, {"CG2D1O", "OG301", "CG331", "53.00", "109.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "OG301", "CG331", "53.00", "109.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2R61", "OG301", "CG2R61", "185.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "OG301", "CG321", "65.00", "108.00", " ", " ", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "OG301", "CG331", "65.00", "108.00", " ", " ", "MEOB, Methoxybenzene, cacha"}, {"CG301", "OG301", "CG331", "95.00", "109.70", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "OG301", "CG331", "95.00", "109.70", " ", " ", "all34_ethers_1a CC33A OC30A CC32A, gk or og (not affected by mistake)"}, {"CG321", "OG301", "CG321", "95.00", "109.70", " ", " ", "diethylether, alex"}, {"CG321", "OG301", "CG331", "95.00", "109.70", " ", " ", "diethylether, alex"}, {"CG331", "OG301", "CG331", "95.00", "109.70", " ", " ", "diethylether, alex!from CG321 OG301 CCT2, DME viv"}, {"CG331", "OG301", "CG3C51", "65.00", "107.00", " ", " ", "THF2, THF-2'OMe c2'-om-cm, from Nucl. Acids, ed"}, {"CG2O2", "OG302", "CG301", "40.00", "109.60", "30.00", "2.2651", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG2O2", "OG302", "CG311", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O2", "OG302", "CG321", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O2", "OG302", "CG331", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O6", "OG302", "CG321", "40.00", "111.00", " ", " ", "DECB, diehtyl carbamate, from DMCB, cacha and kevo and xxwy"}, {"CG2O6", "OG302", "CG331", "40.00", "111.00", " ", " ", "DMCB and DMCA, dimethyl carbamate and carbonate, cacha and kevo and xxwy"}, {"CG2R61", "OG303", "PG1", "90.00", "120.00", "20.00", "2.30", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "SG3O2", "33.00", "108.00", " ", " ", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG311", "OG303", "PG2", "20.00", "120.00", "35.00", "2.33", "NA IP_2"}, {"CG321", "OG303", "PG1", "20.00", "120.00", "35.00", "2.33", "NA !Reorganization: PC and others"}, {"CG321", "OG303", "PG2", "20.00", "120.00", "35.00", "2.33", "NA !Reorganization: TH5P and others"}, {"CG321", "OG303", "SG3O1", "15.00", "109.00", "27.00", "1.90", "LIPID methylsulfate"}, {"CG331", "OG303", "PG0", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_0"}, {"CG331", "OG303", "PG1", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_1"}, {"CG331", "OG303", "PG2", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_2"}, {"CG331", "OG303", "SG3O1", "15.00", "109.00", "27.00", "1.90", "LIPID methylsulfate"}, {"CG331", "OG303", "SG3O2", "48.00", "113.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"CG3C51", "OG303", "PG1", "20.00", "120.00", "35.0", "2.33", "BPNP and others"}, {"CG3C51", "OG303", "PG2", "20.00", "120.00", "35.0", "2.33", "TH3P and others"}, {"PG1", "OG304", "PG1", "45.00", "143.00", "40.0", "3.25", "PPI2, METP reorganization, kevo"}, {"PG1", "OG304", "PG2", "45.00", "139.50", "40.0", "3.05", "PPI1, METP reorganization, kevo"}, {"CG2O2", "OG311", "HGP1", "55.00", "115.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O6", "OG311", "HGP1", "61.00", "116.00", " ", " ", "CO31, bicarbonate, xxwy"}, {"CG2R61", "OG311", "HGP1", "65.00", "108.00", " ", " ", "PROT JES 8/25/89 phenol"}, {"CG301", "OG311", "HGP1", "50.00", "106.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "OG311", "HGP1", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit; was 57.5 106"}, {"CG321", "OG311", "HGP1", "50.00", "106.00", " ", " ", "sng mod (qm and crystal data); was 57.5 106"}, {"CG331", "OG311", "HGP1", "57.50", "106.00", " ", " ", "Team Sugar, HCP1M OC311M CC331M; unchanged"}, {"CG3C51", "OG311", "HGP1", "50.00", "109.00", " ", " ", "par_Sugars, CC315x OC311 HCP1; was 57.5 106"}, {"NG3P0", "OG311", "HGP1", "60.00", "101.50", " ", " ", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"PG0", "OG311", "HGP1", "30.00", "115.00", "40.00", "2.3500", "NA MP_1, ADM Jr. !Reorganization:MP_0"}, {"PG1", "OG311", "HGP1", "30.00", "115.00", "40.00", "2.3500", "NA MP_1, ADM Jr. !Reorganization:MP_1"}, {"CG3C31", "OG3C31", "CG3C31", "50.35", "97.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"CG2R51", "OG3C51", "CG2R53", "85.00", "104.00", " ", " ", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "OG3C51", "CG3C52", "125.00", "104.40", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R53", "OG3C51", "CG3C52", "90.00", "107.10", " ", " ", "GBL, Gamma-butyrolactone, ctsai"}, {"CG2RC0", "OG3C51", "CG3C52", "76.00", "108.05", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG3C41", "OG3C51", "CG3C41", "55.00", "89.12", " ", " ", "OXTN, oxetane, gmu (CG3C52 OG3C51 CG3C52)"}, {"CG3C51", "OG3C51", "CG3C51", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "OG3C51", "CG3C52", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "OG3C51", "CG3C53", "110.00", "108.00", " ", " ", "NA"}, {"CG3C52", "OG3C51", "CG3C52", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "OG3C51", "CG3RC1", "170.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG321", "OG3C61", "CG321", "95.00", "109.70", " ", " ", "DIOX, dioxane"}, {"CG2D1O", "OG3R60", "CG2D1O", "40.00", "99.00", " ", " ", "PY01, 4h-pyran, maintain 720 in ring"}, {"CG2D1O", "OG3R60", "CG321", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D2O", "OG3R60", "CG2D2O", "40.00", "99.00", " ", " ", "PY01, 4h-pyran, maintain 720 in ring"}, {"CG2D2O", "OG3R60", "CG321", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2R61", "OG3R60", "CG2R61", "40.00", "115.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R62", "OG3R60", "CG2R63", "102.00", "126.50", " ", " ", "RIN, coumarin, isg"}, {"OG2P1", "PG0", "OG303", "98.90", "111.60", " ", " ", "LIPID phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG2P1", "PG0", "OG311", "98.90", "108.23", " ", " ", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG303", "PG0", "OG311", "48.10", "108.00", " ", " ", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG311", "PG0", "OG311", "98.90", "104.00", " ", " ", "NA MP_0, ADM Jr."}, {"CG312", "PG1", "OG2P1", "98.90", "94.00", " ", " ", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG312", "PG1", "OG311", "90.10", "90.00", " ", " ", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG321", "PG1", "OG2P1", "98.90", "103.00", " ", " ", "BDFP, Benzylphosphonate re-optimize?"}, {"CG321", "PG1", "OG311", "90.10", "94.00", " ", " ", "BDFP, BDFD, Benzylphosphonate"}, {"NG2S3", "PG1", "OG2P1", "140.00", "110.60", " ", " ", "NABAKB phosphoramidates"}, {"NG2S3", "PG1", "OG303", "60.00", "103.20", " ", " ", "NABAKB phosphoramidates"}, {"OG2P1", "PG1", "OG2P1", "104.00", "120.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG2P1", "PG1", "OG303", "98.90", "107.50", " ", " ", "MP_1 reorganization, kevo"}, {"OG2P1", "PG1", "OG304", "88.90", "111.60", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1, PPI2"}, {"OG2P1", "PG1", "OG311", "98.90", "111.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG303", "PG1", "OG303", "80.00", "104.30", " ", " ", "NA DMP, ADM Jr. !Reorganization: PC and others"}, {"OG303", "PG1", "OG304", "48.10", "105.00", " ", " ", "PPI1, PPI2, METP reorganization, kevo"}, {"OG303", "PG1", "OG311", "48.10", "108.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG304", "PG1", "OG304", "48.10", "107.50", " ", " ", "METP reorganization, kevo"}, {"OG304", "PG1", "OG311", "48.10", "111.00", " ", " ", "PPI2 reorganization, kevo"}, {"CG312", "PG2", "OG2P1", "98.90", "94.00", " ", " ", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG321", "PG2", "OG2P1", "98.90", "103.00", " ", " ", "BDFD, Benzylphosphonate / re-optimize?"}, {"OG2P1", "PG2", "OG2P1", "104.00", "121.00", " ", " ", "MP_2 reorganization, kevo"}, {"OG2P1", "PG2", "OG303", "88.90", "111.00", " ", " ", "MP_2 reorganization, kevo"}, {"OG2P1", "PG2", "OG304", "88.90", "111.60", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1, PPI2"}, {"CG2R51", "SG2R50", "CG2R51", "105.00", "95.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "SG2R50", "CG2R53", "110.00", "97.00", " ", " ", "THAZ, thiazole @@@@@ Kenno: 95 --> 97 @@@@@"}, {"CG2R51", "SG2R50", "CG2RC0", "70.00", "99.50", " ", " ", "ZTHP, benzothiophene, kevo"}, {"CG2R51", "SG2R50", "NG2R50", "150.00", "103.00", " ", " ", "ISOT, isothiazole"}, {"CG2R53", "SG2R50", "CG2RC0", "110.00", "97.00", " ", " ", "ZTHZ, benzothiazole, kevo"}, {"CG321", "SG301", "SG301", "72.50", "103.30", " ", " ", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG331", "SG301", "SG301", "72.50", "103.30", " ", " ", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG251O", "SG311", "CG2R53", "75.00", "92.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "SG311", "CG2R53", "75.00", "92.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2N2", "SG311", "CG321", "59.00", "94.70", " ", " ", "DH3T, transferred from MT2A , fylin"}, {"CG2N2", "SG311", "CG331", "59.00", "94.70", " ", " ", "MT2A, fylin"}, {"CG2O6", "SG311", "CG331", "60.00", "96.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2R61", "SG311", "CG2R61", "50.00", "109.00", " ", " ", "FETZ, phenothiazine, erh"}, {"CG2R64", "SG311", "CG331", "66.00", "91.00", " ", " ", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2O6 SG311 CG331; isg (may need to be re-evaluated because yxu got a QM value of 100.8 for RESI 2MSA)"}, {"CG321", "SG311", "CG321", "34.00", "95.00", " ", " ", "PROTNA sahc"}, {"CG321", "SG311", "CG331", "34.00", "95.00", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "SG311", "HGP3", "38.80", "95.00", " ", " ", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG331", "SG311", "HGP3", "43.00", "95.00", " ", " ", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG2R61", "SG3O1", "OG2P1", "85.0", "98.0", " ", " ", "benzene sulfonic acid anion, og"}, {"CG321", "SG3O1", "OG2P1", "80.00", "99.00", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "SG3O1", "OG2P1", "85.00", "100.00", " ", " ", "MSNA, methyl sulfonate, xhe"}, {"NG2S3", "SG3O1", "OG2P1", "33.20", "94.20", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"OG2P1", "SG3O1", "OG2P1", "130.00", "109.47", "35.0", "2.45", "LIPID methylsulfate"}, {"OG2P1", "SG3O1", "OG303", "85.00", "98.00", " ", " ", "LIPID methylsulfate"}, {"CG2R61", "SG3O2", "NG311", "70.00", "97.00", " ", " ", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "SG3O2", "NG321", "60.00", "98.00", " ", " ", "BSAM, benzenesulfonamide, xxwy"}, {"CG2R61", "SG3O2", "OG2P1", "60.00", "101.00", " ", " ", "BSAM, benzenesulfonamide, xxwy"}, {"CG321", "SG3O2", "CG331", "80.00", "102.00", " ", " ", "MESN, methyl ethyl sulfone, xhe"}, {"CG321", "SG3O2", "NG311", "62.00", "101.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "SG3O2", "OG2P1", "75.00", "107.50", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "SG3O2", "CG331", "80.00", "102.00", " ", " ", "DMSN, dimethyl sulfone, xhe"}, {"CG331", "SG3O2", "NG311", "73.00", "103.00", " ", " ", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"CG331", "SG3O2", "NG321", "83.00", "101.00", " ", " ", "MSAM, methanesulfonamide, xxwy"}, {"CG331", "SG3O2", "OG2P1", "79.00", "108.50", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"CG331", "SG3O2", "OG303", "93.00", "96.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"NG311", "SG3O2", "NG311", "83.10", "102.30", " ", " ", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"NG311", "SG3O2", "OG2P1", "75.00", "110.50", " ", " ", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"NG321", "SG3O2", "OG2P1", "80.00", "111.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"NG321", "SG3O2", "OG303", "100.00", "102.00", " ", " ", "MSMT, methyl sulfamate, and PSMT, xxwy"}, {"OG2P1", "SG3O2", "OG2P1", "85.00", "121.00", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"OG2P1", "SG3O2", "OG303", "90.00", "109.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"CG321", "SG3O3", "CG331", "85.00", "95.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG321", "SG3O3", "OG2P1", "65.00", "106.50", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG331", "SG3O3", "CG331", "34.00", "95.00", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"CG331", "SG3O3", "OG2P1", "79.00", "106.75", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"FGP1", "ALG1", "FGP1", "23.00", "109.47", "15.0", "2.81855", "aluminum tetrafluoride, ALF4, tetrahedral"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_cgenff info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_cgenff_dihedrals[3937][8]= {{"CG2R53", "CG251O", "CG25C1", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "CG25C1", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG25C1", "CG2R53", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"NG2R53", "CG251O", "CG25C1", "CG2RC0", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"SG311", "CG251O", "CG25C1", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"SG311", "CG251O", "CG25C1", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "CG2DC3", "HGA5", "3.9000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG2DC3", "HGA5", "4.6000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG251O", "CG2DC3", "HGA5", "5.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "CG2R53", "NG2R53", "5.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG251O", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG251O", "CG2R53", "NG2R53", "1.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG251O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "NG2R53", "CG2R53", "4.0000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C1", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "CG2R53", "1.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG25C1", "CG251O", "SG311", "CG2R53", "4.0000", "3", "0.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "SG311", "CG2R53", "0.2000", "3", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "SG311", "CG2R53", "1.2000", "3", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG25C2", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG25C2", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG25C2", "CG2R53", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"NG2R53", "CG252O", "CG25C2", "CG2RC0", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"SG311", "CG252O", "CG25C2", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"SG311", "CG252O", "CG25C2", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG2DC3", "HGA5", "3.9000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG2DC3", "HGA5", "4.6000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG252O", "CG2DC3", "HGA5", "5.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "NG2R53", "5.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG252O", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG252O", "CG2R53", "NG2R53", "1.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG252O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "NG2R53", "CG2R53", "4.0000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C2", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "CG2R53", "1.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG25C2", "CG252O", "SG311", "CG2R53", "4.0000", "3", "0.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "SG311", "CG2R53", "0.2000", "3", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "SG311", "CG2R53", "1.2000", "3", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "NG2R51", "3.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "NG2R51", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "OG2D1", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2R53", "NG2R51", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "CG2R61", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "CG2R61", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "CG2RC0", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "CG2RC0", "3.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "NG2R51", "3.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "NG2R51", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "OG2D1", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2R53", "NG2R51", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "CG2R61", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "CG2R61", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "CG2RC0", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "CG2RC0", "3.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG301", "CG2D1", "CG2D1", "CG321", "0.4500", "1", "180.00", "CHL1, cholesterol"}, {"CG301", "CG2D1", "CG2D1", "CG321", "8.5000", "2", "180.00", "CHL1, cholesterol"}, {"CG301", "CG2D1", "CG2D1", "CG331", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG321", "CG2D1", "CG2D1", "CG321", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG321", "CG2D1", "CG2D1", "CG321", "8.5000", "2", "180.00", "LIPID"}, {"CG321", "CG2D1", "CG2D1", "CG331", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG321", "CG2D1", "CG2D1", "CG331", "8.5000", "2", "180.00", "LIPID"}, {"CG321", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG331", "CG2D1", "CG2D1", "CG331", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG331", "CG2D1", "CG2D1", "CG331", "8.5000", "2", "180.00", "LIPID"}, {"CG331", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"HGA4", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG321", "CG2D1", "CG2D1O", "NG301", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D1O", "NG311", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D1O", "OG3R60", "3.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D1O", "HGA4", "6.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D1O", "NG301", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D1O", "NG311", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D1O", "OG3R60", "8.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D1O", "HGA4", "1.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG321", "CG2D1", "CG2D2O", "NG301", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D2O", "NG311", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D2O", "OG3R60", "3.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D2O", "HGA4", "6.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D2O", "NG301", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D2O", "NG311", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D2O", "OG3R60", "8.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D2O", "HGA4", "1.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG2D1", "CG2D1", "CG301", "CG311", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG311", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG321", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG321", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG331", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG331", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG311", "0.0000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG321", "0.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG331", "0.0000", "3", "180.00", "CHOLEST cholesterol"}, {"CG331", "CG2D1", "CG301", "CG321", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2D1", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "1.0000", "1", "180.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.1000", "2", "0.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.3000", "3", "180.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.2000", "4", "0.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG311", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "CG311", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "CG321", "0.6000", "1", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "CG331", "0.9000", "1", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "CG331", "0.2000", "2", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "HGA2", "0.3000", "3", "180.00", "LIPID alkenes"}, {"CG2D1O", "CG2D1", "CG321", "CG2D1", "0.5000", "2", "0.00", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "CG321", "CG2D1", "0.4500", "4", "0.00", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "CG321", "CG2DC1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2D1", "CG321", "HGA2", "0.1000", "3", "0.00", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "1.2000", "1", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "0.4000", "2", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "1.3000", "3", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG331", "0.5000", "1", "180.00", "LIPID 1-butene, adm jr., 2/00 update"}, {"CG2D2", "CG2D1", "CG321", "CG331", "1.3000", "3", "180.00", "LIPID 1-butene, adm jr., 2/00 update"}, {"CG2D2", "CG2D1", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "HGA2", "0.1200", "3", "0.00", "LIPID 1-butene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D1", "CG321", "CG2D1", "0.5000", "2", "0.00", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "CG321", "CG2D1", "0.4500", "4", "0.00", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "CG321", "CG2DC2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2D1", "CG321", "HGA2", "0.1000", "3", "0.00", "PY01, 4h-pyran"}, {"CG301", "CG2D1", "CG321", "CG311", "0.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG301", "CG2D1", "CG321", "HGA2", "0.0300", "3", "0.00", "CHOLEST cholesterol"}, {"CG331", "CG2D1", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2D1", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2D1", "CG321", "CG2D1", "0.0000", "3", "0.00", "LIPID 1,4-dipentene"}, {"HGA4", "CG2D1", "CG321", "CG2DC1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG321", "CG2DC2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG321", "CG311", "0.0000", "3", "0.00", "CHOLEST cholesterol"}, {"HGA4", "CG2D1", "CG321", "CG321", "0.1200", "3", "0.00", "LIPID butene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG321", "CG331", "0.1200", "3", "0.00", "LIPID butene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2D1", "CG321", "HGA2", "0.0000", "3", "0.00", "LIPID butene, adm jr., 2/00 update"}, {"CG2D1", "CG2D1", "CG331", "HGA3", "0.3000", "3", "180.00", "LIPID alkenes"}, {"CG2D2", "CG2D1", "CG331", "HGA3", "0.0500", "3", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG301", "CG2D1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG321", "CG2D1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"NG2D1", "CG2D1", "CG331", "HGA3", "0.1000", "3", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"NG2P1", "CG2D1", "CG331", "HGA3", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA4", "CG2D1", "CG331", "HGA3", "0.0000", "3", "0.00", "LIPID butene, adm jr., 2/00 update"}, {"HGR52", "CG2D1", "CG331", "HGA3", "0.1500", "3", "0.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG331", "CG2D1", "NG2D1", "CG321", "12.0000", "2", "180.00", "EEPI, from CG331 CG2D1 NG2D1 CG331, fylin"}, {"CG331", "CG2D1", "NG2D1", "CG331", "12.0000", "2", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG331", "CG2D1", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"HGA4", "CG2D1", "NG2D1", "CG321", "8.5000", "2", "180.00", "EEPI, from HGA4 CG2D1 NG2D1 CG331, fylin"}, {"HGA4", "CG2D1", "NG2D1", "CG331", "8.5000", "2", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"HGA4", "CG2D1", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2D1", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG331", "CG2D1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2D1", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2D1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"NG321", "CG2D1O", "CG2D2", "HGA5", "2.0000", "2", "180.00", "AMET, ethenamine, 1.0->2.0 to improve molvib; pram"}, {"OG301", "CG2D1O", "CG2D2", "HGA5", "9.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D1O", "CG2D2", "HGA5", "2.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"NG301", "CG2D1O", "CG2DC1", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG301", "CG2D1O", "CG2DC1", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"NG311", "CG2D1O", "CG2DC1", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D1O", "CG2DC1", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"OG301", "CG2D1O", "CG2DC1", "CG2DC2", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D1O", "CG2DC1", "CG2DC2", "15.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D1O", "CG2DC1", "HGA4", "3.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG3R60", "CG2D1O", "CG2DC1", "CG2DC2", "2.0000", "2", "180.00", "PY02, 2h-pyran"}, {"OG3R60", "CG2D1O", "CG2DC1", "HGA4", "7.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D1O", "CG2DC1", "CG2DC2", "6.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D1O", "CG2DC1", "CG2O1", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1O", "CG2DC1", "CG321", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1O", "CG2DC1", "HGA4", "2.5000", "2", "180.00", "PY02, 2h-pyran"}, {"CG2D1", "CG2D1O", "NG301", "CG2D1O", "0.1000", "2", "180.00", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG301", "CG2D1O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG301", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG311", "CG2D1O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG311", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "1.7000", "1", "0.00", "1.66 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "3.0600", "2", "180.00", "3.02 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "0.2300", "3", "180.00", "0.24 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "0.1200", "4", "0.00", "needed for OOP but poorly transferable; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"HGA4", "CG2D1O", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMET, ethenamine; from MAM1, methylamine; kevo"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "0.9000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "3.1000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "1.2000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "0.8000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "3.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "1.1000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D1O", "OG301", "CG331", "0.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1", "CG2D1O", "OG3R60", "CG2D1O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2D1", "CG2D1O", "OG3R60", "CG2D2O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2DC1", "CG2D1O", "OG3R60", "CG321", "2.0000", "2", "0.00", "PY02, 2h-pyran seems reasonable - kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG2D1O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG2D2O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG321", "0.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA5", "CG2D2", "CG2D2", "HGA5", "4.9000", "2", "180.00", "LIPID ethene, yin,adm jr., 12/95"}, {"HGA5", "CG2D2", "CG2D2O", "NG321", "2.0000", "2", "180.00", "AMET, ethenamine, 1.0->2.0 to improve molvib; pram"}, {"HGA5", "CG2D2", "CG2D2O", "OG301", "9.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA5", "CG2D2", "CG2D2O", "HGA4", "2.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"NG301", "CG2D2O", "CG2DC2", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG301", "CG2D2O", "CG2DC2", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"NG311", "CG2D2O", "CG2DC2", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D2O", "CG2DC2", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"OG301", "CG2D2O", "CG2DC2", "CG2DC1", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D2O", "CG2DC2", "CG2DC1", "15.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D2O", "CG2DC2", "HGA4", "3.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG3R60", "CG2D2O", "CG2DC2", "CG2DC1", "2.0000", "2", "180.00", "PY02, 2h-pyran"}, {"OG3R60", "CG2D2O", "CG2DC2", "HGA4", "7.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D2O", "CG2DC2", "CG2DC1", "6.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D2O", "CG2DC2", "CG2O1", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D2O", "CG2DC2", "CG321", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D2O", "CG2DC2", "HGA4", "2.5000", "2", "180.00", "PY02, 2h-pyran"}, {"CG2D1", "CG2D2O", "NG301", "CG2D2O", "0.1000", "2", "180.00", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG301", "CG2D2O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG301", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG311", "CG2D2O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG311", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "1.7000", "1", "0.00", "1.66 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "3.0600", "2", "180.00", "3.02 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "0.2300", "3", "180.00", "0.24 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "0.1200", "4", "0.00", "needed for OOP but poorly transferable; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"HGA4", "CG2D2O", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMET, ethenamine; from MAM1, methylamine; kevo"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "0.9000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "3.1000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "1.2000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "0.8000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "3.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "1.1000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D2O", "OG301", "CG331", "0.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1", "CG2D2O", "OG3R60", "CG2D1O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2D1", "CG2D2O", "OG3R60", "CG2D2O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2DC2", "CG2D2O", "OG3R60", "CG321", "2.0000", "2", "0.00", "PY02, 2h-pyran seems reasonable - kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG2D1O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG2D2O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG321", "0.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2DC2", "0.5600", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2DC2", "7.0000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O1", "0.5600", "1", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O1", "7.0000", "2", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O3", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O3", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O4", "0.5600", "1", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O4", "7.0000", "2", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG321", "0.5600", "1", "180.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG321", "7.0000", "2", "180.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL CROT"}, {"CG2O1", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL CROT"}, {"CG2O3", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2O3", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL RTAL"}, {"CG2O4", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL RTAL Kenno: 0.5 -> 7.0 for the sake of transferability"}, {"CG301", "CG2DC1", "CG2DC1", "CG321", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2DC1", "CG2DC1", "CG331", "10.0000", "2", "180.00", "RETINOL MECH"}, {"CG321", "CG2DC1", "CG2DC1", "CG331", "10.0000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG321", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "PY02, 2h-pyran; re-initialized from BTE2, 2-butene; kevo"}, {"CG331", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"HGA4", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.5000", "1", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.5000", "3", "0.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.5000", "3", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "1", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "3", "0.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG331", "1.1000", "1", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG331", "0.7000", "2", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "3", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "0.4000", "1", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "0.4000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "1.3000", "3", "0.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG331", "1.1000", "1", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG331", "0.7000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "0.5000", "1", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "2.2000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "1.1000", "3", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "0.6000", "4", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "HGR52", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL MECH"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC2", "1.1000", "1", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC2", "0.7000", "2", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC3", "1.1000", "1", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC3", "0.7000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG331", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "0.5000", "1", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "2.2000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "1.1000", "3", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "0.6000", "4", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "CG301", "1.0000", "2", "180.00", "RETINOL MECH"}, {"HGA4", "CG2DC1", "CG2DC2", "CG331", "1.0000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "NG2P1", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGA4", "CG2DC1", "CG2DC2", "HGA4", "0.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "HGR52", "0.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "CG2DC2", "HGA4", "0.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "CG2DC3", "HGA5", "5.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O3", "CG2DC1", "CG2DC3", "HGA5", "4.2000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2O5", "CG2DC1", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "BEON, butenone; from PRAL, acrolein; mcs"}, {"CG2R61", "CG2DC1", "CG2DC3", "HGA5", "3.5000", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG331", "CG2DC1", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC1", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2D1O", "CG2DC1", "CG2O1", "NG2S2", "1.1000", "1", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "NG2S2", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "OG2D1", "0.3000", "1", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "OG2D1", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.7000", "1", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.1000", "3", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.1500", "4", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.7000", "1", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.1000", "3", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.2000", "4", "0.00", "RETINOL CROT"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.5000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.3500", "3", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "1.0000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "1.0000", "3", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"HGA4", "CG2DC1", "CG2O1", "NG2S1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"HGA4", "CG2DC1", "CG2O1", "OG2D1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC3", "CG2DC1", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"HGA4", "CG2DC1", "CG2O3", "OG2D2", "0.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC1", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC1", "CG2DC1", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC1", "CG2O4", "OG2D1", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC1", "CG2O4", "HGR52", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O5", "CG331", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC1", "CG2O5", "OG2D3", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"HGA4", "CG2DC1", "CG2O5", "CG331", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"HGA4", "CG2DC1", "CG2O5", "OG2D3", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"CG2DC3", "CG2DC1", "CG2R61", "CG2R61", "0.7500", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC1", "CG2R61", "CG2R61", "0.1900", "4", "0.00", "STYR, styrene, xxwy and oashi"}, {"NG2D1", "CG2DC1", "CG2R61", "CG2R61", "1.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"HGA4", "CG2DC1", "CG2R61", "CG2R61", "0.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2DC1", "CG2DC1", "CG301", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG331", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC1", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG301", "CG331", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2D1O", "CG2DC1", "CG321", "CG2D1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "CG321", "HGA2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2DC1", "CG321", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG321", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG3R60", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC1", "CG321", "HGA2", "0.0300", "3", "0.00", "RETINOL PROL"}, {"CG2O1", "CG2DC1", "CG321", "CG2D1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC1", "CG321", "HGA2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG331", "CG2DC1", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2DC1", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2DC1", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2DC1", "CG321", "OG3R60", "0.2000", "3", "0.00", "PY02, 2h-pyran; re-initialized from PROL, 3-propenol; kevo"}, {"HGA4", "CG2DC1", "CG321", "HGA2", "0.2000", "3", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0 --> 180 to fix minimum @@@@@"}, {"CG2DC2", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG321", "CG2DC1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL MECH"}, {"CG331", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"HGA4", "CG2DC1", "CG331", "HGA3", "0.0000", "3", "0.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0.3 --> 0.0 to fix planarity around CG2DCx @@@@@"}, {"CG2R61", "CG2DC1", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"HGA4", "CG2DC1", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "CG2DC1", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2DC1", "0.5600", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2DC1", "7.0000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O1", "0.5600", "1", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O1", "7.0000", "2", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O3", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O3", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O4", "0.5600", "1", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O4", "7.0000", "2", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG321", "0.5600", "1", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG321", "7.0000", "2", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL CROT"}, {"CG2O1", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL CROT"}, {"CG2O3", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2O3", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL RTAL"}, {"CG2O4", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL RTAL Kenno: 0.5 -> 7.0 for the sake of transferability"}, {"CG301", "CG2DC2", "CG2DC2", "CG321", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2DC2", "CG2DC2", "CG331", "10.0000", "2", "180.00", "RETINOL MECH"}, {"CG321", "CG2DC2", "CG2DC2", "CG331", "10.0000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG321", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "PY02, 2h-pyran; re-initialized from BTE2, 2-butene; kevo"}, {"CG331", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"HGA4", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC2", "CG2DC3", "HGA5", "5.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O3", "CG2DC2", "CG2DC3", "HGA5", "4.2000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2O5", "CG2DC2", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "BEON, butenone; from PRAL, acrolein; mcs"}, {"CG2R61", "CG2DC2", "CG2DC3", "HGA5", "3.5000", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG331", "CG2DC2", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC2", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2D2O", "CG2DC2", "CG2O1", "NG2S2", "1.1000", "1", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "NG2S2", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "OG2D1", "0.3000", "1", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "OG2D1", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.7000", "1", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.1000", "3", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.1500", "4", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.7000", "1", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.1000", "3", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.2000", "4", "0.00", "RETINOL CROT"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.5000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.3500", "3", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "1.0000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "1.0000", "3", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"HGA4", "CG2DC2", "CG2O1", "NG2S1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"HGA4", "CG2DC2", "CG2O1", "OG2D1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC3", "CG2DC2", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"HGA4", "CG2DC2", "CG2O3", "OG2D2", "0.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC2", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC2", "CG2DC2", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC2", "CG2O4", "OG2D1", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC2", "CG2O4", "HGR52", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O5", "CG331", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC2", "CG2O5", "OG2D3", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"HGA4", "CG2DC2", "CG2O5", "CG331", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"HGA4", "CG2DC2", "CG2O5", "OG2D3", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"CG2DC3", "CG2DC2", "CG2R61", "CG2R61", "0.7500", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC2", "CG2R61", "CG2R61", "0.1900", "4", "0.00", "STYR, styrene, xxwy and oashi"}, {"NG2D1", "CG2DC2", "CG2R61", "CG2R61", "1.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"HGA4", "CG2DC2", "CG2R61", "CG2R61", "0.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2DC1", "CG2DC2", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG301", "CG331", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG301", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG331", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2D2O", "CG2DC2", "CG321", "CG2D1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "CG321", "HGA2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2DC2", "CG321", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG321", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG3R60", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC2", "CG2DC2", "CG321", "HGA2", "0.0300", "3", "0.00", "RETINOL PROL"}, {"CG2O1", "CG2DC2", "CG321", "CG2D1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC2", "CG321", "HGA2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG331", "CG2DC2", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2DC2", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2DC2", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2DC2", "CG321", "OG3R60", "0.2000", "3", "0.00", "PY02, 2h-pyran; re-initialized from PROL, 3-propenol; kevo"}, {"HGA4", "CG2DC2", "CG321", "HGA2", "0.2000", "3", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC2", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0 --> 180 to fix minimum @@@@@"}, {"CG2DC3", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG321", "CG2DC2", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL MECH"}, {"CG331", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"HGA4", "CG2DC2", "CG331", "HGA3", "0.0000", "3", "0.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0.3 --> 0.0 to fix planarity around CG2DCx @@@@@"}, {"CG2R61", "CG2DC2", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"HGA4", "CG2DC2", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "CG2DC2", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC2", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2DC2", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"NG311", "CG2N1", "NG2D1", "HGP1", "5.2000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG321", "CG2N1", "NG2D1", "CG331", "6.5000", "2", "180.00", "MGU1, methylguanidine"}, {"NG321", "CG2N1", "NG2D1", "HGP1", "5.2000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG2P1", "CG2N1", "NG2P1", "CG324", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2P1", "CG2N1", "NG2P1", "CG334", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2P1", "CG2N1", "NG2P1", "HGP2", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2D1", "CG2N1", "NG311", "CG331", "0.5000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG2D1", "CG2N1", "NG311", "HGPAM1", "2.8000", "2", "180.00", "MGU2, methylguanidine2 kevo: 3 --> 2 (counteracting forces). May benefit optimization."}, {"NG321", "CG2N1", "NG311", "CG331", "0.5000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG321", "CG2N1", "NG311", "HGPAM1", "2.8000", "2", "180.00", "MGU2, methylguanidine2 kevo: 3 --> 2 (counteracting forces). May benefit optimization."}, {"NG2D1", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU1, methylguanidine; MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG2D1", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU1, methylguanidine; MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG311", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG311", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG321", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU1, methylguanidine kevo: new. Needs to be further optimized."}, {"NG321", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU1, methylguanidine kevo: new. Needs to be further optimized."}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.8200", "2", "180.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.2900", "4", "0.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.0900", "6", "0.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG331", "HGA3", "0.2500", "3", "0.00", "AMDN, amidinium amidinium, mp2 scan, pram"}, {"NG321", "CG2N2", "NG2D1", "CG321", "6.5000", "2", "180.00", "MT2A , from NG321 CG2N1 NG2D1 CG331, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "2.3600", "1", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "2.0800", "2", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "0.0600", "3", "0.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "1.0700", "4", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "0.2800", "6", "0.00", "MT2A, fylin"}, {"CG2R61", "CG2N2", "NG2P1", "HGP2", "2.0000", "2", "180.00", "BAMI, benzamidinium, mp2 scan, pram"}, {"CG331", "CG2N2", "NG2P1", "HGP2", "3.5000", "2", "180.00", "AMDN, amidinium, mp2 scan, pram"}, {"NG2P1", "CG2N2", "NG2P1", "HGP2", "3.5000", "2", "180.00", "AMDN, amidinium, mp2 scan, pram"}, {"NG2D1", "CG2N2", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MT2A , from NG2D1 CG2N1 NG321 HGPAM2, fylin"}, {"NG2D1", "CG2N2", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MT2A , from NG2D1 CG2N1 NG321 HGPAM2, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.0200", "1", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "2.8700", "2", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.1200", "3", "0.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.2000", "4", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.2000", "6", "180.00", "MT2A, fylin"}, {"NG2D1", "CG2N2", "SG311", "CG321", "1.1200", "2", "180.00", "DH3T, fylin"}, {"NG2D1", "CG2N2", "SG311", "CG331", "1.1200", "2", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "0.6400", "1", "180.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "1.1200", "2", "180.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "0.3300", "4", "0.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "0.6400", "1", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "1.1200", "2", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "0.3300", "4", "0.00", "MT2A, fylin"}, {"NG2S1", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S1", "CG2O1", "CG2R61", "CG2RC0", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S2", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "3NAP, nicotinamide (PYRIDINE pyr-CONH2), yin"}, {"OG2D1", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "3NAP, nicotinamide (PYRIDINE pyr-CONH2), yin"}, {"OG2D1", "CG2O1", "CG2R61", "CG2RC0", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S2", "CG2O1", "CG2R62", "CG2R62", "0.3500", "1", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2S2", "CG2O1", "CG2R62", "CG2R62", "0.6200", "2", "0.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"OG2D1", "CG2O1", "CG2R62", "CG2R62", "2.3800", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2S0", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "NG2S1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG311", "CG311", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG321", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG323", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG331", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S0", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "NG3P3", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "NOT OPTIMIZED! PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "NG3P3", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "NG3P3", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG314", "CG311", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG321", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG323", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG331", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "NG3P3", "0.0000", "1", "0.00", "PROT Backbone parameter set made complete RLD 8/8/90"}, {"OG2D1", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S0", "CG2O1", "CG321", "CG331", "1.5000", "1", "0.00", "DMPR, dimethylpropanamide, mnoon"}, {"NG2S0", "CG2O1", "CG321", "NG2S1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG321", "HGA2", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG321", "CG321", "0.0000", "1", "0.00", "PROT from NG2S1 CG2O1 CG311 CT2, for lactams, adm jr."}, {"NG2S1", "CG2O1", "CG321", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG321", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S1", "CG2O1", "CG321", "HGA2", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG321", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"OG2D1", "CG2O1", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG321", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG324", "HGA2", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT adm jr. 3/24/92, for PRES GLYP"}, {"NG2S1", "CG2O1", "CG324", "HGA2", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT adm jr. 3/24/92, for PRES GLYP"}, {"NG2S2", "CG2O1", "CG324", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"OG2D1", "CG2O1", "CG324", "NG3P3", "0.0000", "1", "0.00", "PROT Backbone parameter set made complete RLD 8/8/90"}, {"OG2D1", "CG2O1", "CG324", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"OG2D1", "CG2O1", "CG331", "HGA3", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMPR, dimethylpropanamide; from DMF, Dimethylformamide; kevo"}, {"CG321", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"CG331", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGR52", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"CG2DC1", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL FRET"}, {"CG2DC1", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL FRET"}, {"CG2DC2", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2R61", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "3CPD, Gamma-3-Amide Pyridine Lysine CDCA Amide; from HDZ2, hydrazone model cmpd 2; cacha"}, {"CG2R61", "CG2O1", "NG2S1", "CG321", "4.0000", "2", "180.00", "3CPD, Gamma-3-Amide Pyridine Lysine CDCA Amide; from HDZ2, hydrazone model cmpd 2; cacha"}, {"CG2R61", "CG2O1", "NG2S1", "NG2D1", "1.6000", "1", "0.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S1", "NG2D1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG311", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "3APP, Alpha-Benzyl Gamma-3-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "3APP, Alpha-Benzyl Gamma-3-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R64", "1.6000", "1", "0.00", "2APP, Alpha-Benzyl Gamma-2-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2APP, Alpha-Benzyl Gamma-2-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG321", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG321", "CG2O1", "NG2S1", "NG2D1", "0.9000", "1", "0.00", "PMHA, hydrazone-containing model compound:, sz"}, {"CG321", "CG2O1", "NG2S1", "NG2D1", "3.5000", "2", "180.00", "PMHA, hydrazone-containing model compound: HDZ1, hydrazone model cmpd, sz"}, {"CG321", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG324", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG324", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL PACP 1-fold added by kevo"}, {"CG331", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL PACP"}, {"CG331", "CG2O1", "NG2S1", "CG2R64", "1.6000", "1", "0.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG331", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG331", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT for acetylated GLY N-terminus, adm jr."}, {"CG331", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT for acetylated GLY N-terminus, adm jr."}, {"CG331", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "NG2D1", "0.9000", "1", "0.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2O1", "NG2S1", "NG2D1", "3.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG3C51", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL PACP"}, {"OG2D1", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"OG2D1", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "NG2D1", "2.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"OG2D1", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG2DC1", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2O1", "NG2S2", "HGP1", "1.0000", "2", "180.00", "3NAP, nicotamide (PYRIDINE pyr-CONH2), yin"}, {"CG2R62", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG311", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG324", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG331", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG3C51", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"HGR52", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT, formamide"}, {"OG2D1", "CG2O2", "CG2R61", "CG2R61", "1.0250", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"OG302", "CG2O2", "CG2R61", "CG2R61", "0.8500", "2", "180.00", "MBOA, methylbenzoate, jal"}, {"OG311", "CG2O2", "CG2R61", "CG2R61", "1.0250", "2", "180.00", "ZOIC, benzoic acid, jal"}, {"OG2D1", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "AMGA, Alpha Methyl Tert Butyl Glu Acid, cacha, 05/06 ! corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG2D1", "CG2O2", "CG311", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O2", "CG311", "HGA1", "0.0000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha, 03/06"}, {"OG302", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"OG302", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "B5HE, B5H6 ethyl ester, xxwy"}, {"OG302", "CG2O2", "CG311", "NG2S1", "0.0000", "1", "0.00", "AMGA, Alpha Methyl Glut Acid CDCA Amide, cacha, 05/06"}, {"OG302", "CG2O2", "CG311", "HGA1", "0.0000", "1", "0.00", "AMGA, Alpha Methyl Glut Acid CDCA Amide, cacha, 05/06"}, {"OG311", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "drug design project, xxwy"}, {"OG311", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG311", "CG2O2", "CG311", "HGA1", "0.0500", "6", "180.00", "drug design project, xxwy"}, {"OG2D1", "CG2O2", "CG321", "CG311", "0.0000", "6", "180.00", "576P, standard param [0.05 also acceptable]"}, {"OG2D1", "CG2O2", "CG321", "CG321", "0.0500", "6", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "CG331", "0.0500", "6", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "NG321", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "HGA2", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate; LIPID acetic Acid"}, {"OG302", "CG2O2", "CG321", "CG321", "0.5300", "2", "180.00", "LIPID methyl propionate, 12/92"}, {"OG302", "CG2O2", "CG321", "CG331", "-0.1500", "1", "180.00", "LIPID methyl propionate, 12/92"}, {"OG302", "CG2O2", "CG321", "HGA2", "0.0000", "3", "0.00", "LIPID acetic Acid"}, {"OG311", "CG2O2", "CG321", "CG311", "0.0000", "6", "180.00", "576P, standard param [0.05 also acceptable]"}, {"OG311", "CG2O2", "CG321", "NG321", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG311", "CG2O2", "CG321", "HGA2", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG2D1", "CG2O2", "CG331", "HGA3", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate; LIPID acetic Acid"}, {"OG302", "CG2O2", "CG331", "HGA3", "0.0000", "3", "0.00", "LIPID acetic Acid"}, {"OG311", "CG2O2", "CG331", "HGA3", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"CG2R61", "CG2O2", "OG302", "CG331", "1.2500", "1", "180.00", "MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "CG331", "1.5000", "2", "180.00", "MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "CG331", "0.0500", "6", "180.00", "MBOA, methylbenzoate, jal"}, {"CG311", "CG2O2", "OG302", "CG301", "2.0500", "2", "180.00", "ATGM, GAMMA METHYL ALPHA TERT BUTYL GLU ACID CDCA AMIDE, cacha"}, {"CG311", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE, cacha"}, {"CG311", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG321", "CG2O2", "OG302", "CG301", "2.0500", "2", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG321", "CG2O2", "OG302", "CG311", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG321", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG321", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG331", "CG2O2", "OG302", "CG311", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG301", "0.9650", "1", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide !cacha,corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG301", "3.8500", "2", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide !cacha,corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG311", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG311", "3.8500", "2", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG321", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG321", "3.8500", "2", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG331", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG331", "3.8500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.9750", "1", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "2.7000", "2", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.0500", "3", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.2500", "6", "180.00", "ZOIC, benzoic acid, jal"}, {"CG311", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "drug design project, xxwy"}, {"CG321", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"CG331", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"OG2D1", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"HGR52", "CG2O2", "OG311", "HGP1", "3.4500", "2", "180.00", "FORH, formic acid, xxwy"}, {"OG2D2", "CG2O3", "CG2O5", "CG2R61", "0.3000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D2", "CG2O3", "CG2O5", "OG2D3", "0.3000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D2", "CG2O3", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"OG2D2", "CG2O3", "CG301", "CG331", "0.0500", "6", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG301", "OG301", "0.5500", "2", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG301", "OG311", "1.1100", "2", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG311", "CG2R61", "0.0000", "1", "0.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha. Was 3.1 2 180 ==> reset by kevo. re-optimize!!!"}, {"OG2D2", "CG2O3", "CG311", "CG311", "0.0500", "6", "180.00", "PROT C-terminal AA - standard parameter"}, {"OG2D2", "CG2O3", "CG311", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG311", "CG331", "0.0500", "6", "180.00", "deleteme DELETEME (we want to use wildcarting)"}, {"OG2D2", "CG2O3", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG2D2", "CG2O3", "CG311", "NG2S1", "0.0000", "6", "180.00", "GA, Glut Acid CDCA Amide, cacha"}, {"OG2D2", "CG2O3", "CG311", "OG301", "0.5500", "2", "180.00", "og amop mp2/ccpvtz"}, {"OG2D2", "CG2O3", "CG311", "HGA1", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "NG3P3", "3.2000", "2", "180.00", "PROT adm jr. 4/17/94, zwitterionic glycine"}, {"OG2D2", "CG2O3", "CG314", "HGA1", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "NG2S1", "0.0500", "6", "180.00", "GCA, Glycocholic Acid, cacha, 03/06"}, {"OG2D2", "CG2O3", "CG321", "HGA2", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG324", "NG3P3", "3.2000", "2", "180.00", "PROT adm jr. 4/17/94, zwitterionic glycine"}, {"OG2D2", "CG2O3", "CG324", "HGA2", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG331", "HGA3", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C51", "NG2S0", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C51", "HGA1", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "CG3C52", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "NG3P2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "HGA1", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O4", "CG2R61", "CG2R61", "1.0800", "2", "180.00", "ALDEHYDE benzaldehyde unmodified"}, {"HGR52", "CG2O4", "CG2R61", "CG2R61", "1.0800", "2", "180.00", "ALDEHYDE benzaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "1.0500", "1", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.4000", "2", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.6000", "3", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.1000", "4", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "0.1000", "1", "0.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "1.0000", "2", "180.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "0.5500", "3", "180.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "HGA2", "0.0000", "3", "180.00", "PALD, Propionaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate (unmodified because this may not be analogous to AALD)"}, {"HGR52", "CG2O4", "CG321", "CG331", "0.0000", "3", "180.00", "PALD, Propionaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate unmodified"}, {"HGR52", "CG2O4", "CG321", "CLGA1", "0.0000", "3", "180.00", "CALD, Chloroacetaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate unmodified"}, {"HGR52", "CG2O4", "CG321", "HGA2", "0.0000", "3", "180.00", "acetaldehyde, adm 11/08"}, {"OG2D1", "CG2O4", "CG331", "HGA3", "0.2000", "3", "180.00", "AALD, acetaldehyde, adm 11/08"}, {"HGR52", "CG2O4", "CG331", "HGA3", "0.0000", "3", "180.00", "acetaldehyde, adm 11/08"}, {"CG2O3", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml; verified by mcs"}, {"CG311", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG321", "CG2O5", "CG2R61", "CG2R61", "0.2700", "2", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG331", "CG2O5", "CG2R61", "CG2R61", "0.2500", "2", "180.00", "PHMK, phenyl methyl ketone, mcs"}, {"OG2D3", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml; verified by mcs"}, {"CG2R61", "CG2O5", "CG311", "OG311", "0.0000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O5", "CG311", "OG312", "0.0000", "2", "0.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O5", "CG311", "HGA1", "0.0000", "1", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "OG311", "0.0000", "2", "0.00", "reverted to BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "OG312", "0.0000", "2", "180.00", "reverted to BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK) unmodified"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.4000", "1", "0.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1700", "2", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1300", "3", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1000", "6", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "PHEK, phenyl ethyl ketone; from 3ACP, 3-acetylpyridine; mcs"}, {"CG321", "CG2O5", "CG321", "CG321", "0.7500", "1", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.1800", "2", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.0650", "3", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.0300", "6", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.7500", "1", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.1800", "2", "180.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.0650", "3", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.0300", "6", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.7500", "1", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.1800", "2", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.0650", "3", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.0300", "6", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.7500", "1", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.1800", "2", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.0650", "3", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.0300", "6", "0.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "HGA2", "0.0000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2DC1", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BEON, butenone; from ACO, acetone; mcs"}, {"CG2DC2", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BEON, butenone; from ACO, acetone; mcs"}, {"CG2R61", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "3ACP, 3-acetylpyridine; reset by kevo to ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"CG321", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"OG2D3", "CG2O5", "CG331", "HGA3", "0.0000", "3", "0.00", "3ACP, ACO; ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"NG2S1", "CG2O6", "NG2S1", "CG331", "1.6000", "1", "0.00", "S132R, from NMTU, pram"}, {"NG2S1", "CG2O6", "NG2S1", "CG331", "2.5000", "2", "180.00", "S132R, from NMTU, pram"}, {"OG2D1", "CG2O6", "NG2S1", "CG321", "4.0000", "2", "180.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG321", "0.9500", "4", "0.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG331", "4.0000", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG331", "0.9500", "4", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "HGP1", "0.0000", "2", "180.00", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"OG302", "CG2O6", "NG2S1", "CG321", "4.0000", "2", "180.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG321", "0.9500", "4", "0.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG331", "4.0000", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG331", "0.9500", "4", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "HGP1", "0.0000", "2", "180.00", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S2", "CG2O6", "NG2S2", "HGP1", "1.5000", "2", "180.00", "UREA, Urea"}, {"OG2D1", "CG2O6", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update NOW UREA ==> re-optimize???"}, {"NG2S1", "CG2O6", "OG302", "CG321", "0.1500", "1", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG321", "2.2000", "2", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG321", "0.1000", "3", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "0.2500", "1", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "1.8500", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "0.1200", "3", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "0.1500", "1", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "2.2000", "2", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "0.1000", "3", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "0.2500", "1", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "1.8500", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "0.1200", "3", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "OG302", "CG321", "0.1000", "1", "180.00", "DECA, diethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG321", "3.1000", "2", "180.00", "DECA, diethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG331", "0.5500", "1", "180.00", "DMCA, dimethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG331", "2.9500", "2", "180.00", "DMCA, dimethyl carbonate, xxwy"}, {"OG2D2", "CG2O6", "OG311", "HGP1", "2.0000", "2", "180.00", "CO31, bicarbonate, MP2/6-31G* dihedral scan, xxwy"}, {"SG2D1", "CG2O6", "SG311", "CG331", "0.1000", "1", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG2D1", "CG2O6", "SG311", "CG331", "2.1300", "2", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "CG331", "0.1000", "1", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "CG331", "2.1300", "2", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"OG2D5", "CG2O7", "NG2D1", "CG331", "0.4000", "2", "180.00", "MICY, methyl isocyanate, xxwy"}, {"CG2R51", "CG2R51", "CG2R51", "CG2R51", "15.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "CG2RC0", "2.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "CG2RC7", "9.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "CG3C52", "4.0000", "2", "180.00", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "NG2R57", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"CG2R51", "CG2R51", "CG2R51", "NG2RC0", "16.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "OG2R50", "8.5000", "2", "180.00", "FURA, furan"}, {"CG2R51", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "THIP, thiophene"}, {"CG2R51", "CG2R51", "CG2R51", "HGR51", "1.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R52", "CG2R51", "CG2R51", "CG3C52", "6.6000", "2", "180.00", "2HPR, 2H-pyrrole !1,(1a), kevo"}, {"CG2R52", "CG2R51", "CG2R51", "CG3C54", "7.5000", "2", "180.00", "2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R52", "CG2R51", "CG2R51", "NG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R52", "CG2R51", "CG2R51", "OG2R50", "9.5000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R52", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R52", "CG2R51", "CG2R51", "HGR51", "2.6000", "2", "180.00", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R52", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R53", "CG2R51", "CG2R51", "CG3C52", "6.6000", "2", "180.00", "B2FO, from CG2R52 CG2R51 CG2R51 CG3C52, ctsai"}, {"CG2R53", "CG2R51", "CG2R51", "HGR51", "2.6000", "2", "180.00", "B2FO, from CG2R52 CG2R51 CG2R51 HGR51, ctsai"}, {"CG2R57", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"CG2R57", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR52; lf"}, {"CG2RC0", "CG2R51", "CG2R51", "CG3C52", "6.9000", "2", "180.00", "INDE, indene, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2RC0", "CG2R51", "CG2R51", "OG2R50", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "HGR51", "2.8000", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG2R51", "HGR52", "2.8000", "2", "180.00", "INDO/TRP"}, {"CG2RC7", "CG2R51", "CG2R51", "HGR51", "2.7000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG321", "CG2R51", "CG2R51", "NG2R50", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG321", "CG2R51", "CG2R51", "NG2R51", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG321", "CG2R51", "CG2R51", "NG2R52", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG331", "CG2R51", "CG2R51", "NG2R50", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG331", "CG2R51", "CG2R51", "NG2R51", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG331", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG3C52", "CG2R51", "CG2R51", "CG3C52", "12.0000", "2", "180.00", "3PRL, 3-pyrroline, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG2R50", "7.5000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG3C51", "11.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG3P2", "10.5000", "2", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "OG3C51", "8.8900", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "HGR51", "2.9000", "2", "180.00", "2HPR, 2H-pyrrole, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "HGR52", "5.8000", "2", "180.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG3C54", "CG2R51", "CG2R51", "CG3C54", "11.5000", "2", "180.00", "3PRP, 3-pyrroline.H+, kevo"}, {"CG3C54", "CG2R51", "CG2R51", "HGR51", "4.2500", "2", "180.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R50", "CG2R51", "CG2R51", "NG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R50", "CG2R51", "CG2R51", "OG2R50", "14.0000", "2", "180.00", "OXAZ, oxazole"}, {"NG2R50", "CG2R51", "CG2R51", "SG2R50", "7.0000", "2", "180.00", "THAZ, thiazole"}, {"NG2R50", "CG2R51", "CG2R51", "HGR51", "2.7000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"NG2R50", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"NG2R51", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"NG2R52", "CG2R51", "CG2R51", "NG2R52", "12.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R52", "CG2R51", "CG2R51", "HGR52", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R57", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"NG2RC0", "CG2R51", "CG2R51", "HGR51", "3.7000", "2", "180.00", "INDZ, indolizine, kevo"}, {"NG3C51", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"NG3P2", "CG2R51", "CG2R51", "HGR51", "7.0000", "2", "180.00", "7.0 2PRP, 2-pyrroline.H+, kevo"}, {"OG2R50", "CG2R51", "CG2R51", "HGR51", "4.5000", "2", "180.00", "FURA, furan"}, {"OG2R50", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "OXAZ, oxazole"}, {"OG3C51", "CG2R51", "CG2R51", "HGR51", "3.7000", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"SG2R50", "CG2R51", "CG2R51", "HGR51", "4.0000", "2", "180.00", "THIP, thiophene"}, {"SG2R50", "CG2R51", "CG2R51", "HGR52", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR51", "CG2R51", "CG2R51", "HGR51", "1.0000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PYRL, pyrrole"}, {"HGR52", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90, his"}, {"CG2R51", "CG2R51", "CG2R52", "NG2R50", "8.5000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "CG2R52", "NG2R52", "4.1500", "2", "180.00", "4.1 2HPP, 2H-pyrrole.H+ 1, kevo"}, {"CG2R51", "CG2R51", "CG2R52", "HGR52", "3.8000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR51", "CG2R51", "CG2R52", "NG2R50", "4.5000", "2", "180.00", "4.25 2HPR, 2H-pyrrole !wC4H !coupled with pyrz, pyrazole, kevo"}, {"HGR51", "CG2R51", "CG2R52", "NG2R52", "4.5000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG2R52", "HGR52", "0.1000", "2", "180.00", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "B2FO, from CG2RC0 CG25C1 CG2R53 OG2D1, ctsai"}, {"CG2R51", "CG2R51", "CG2R53", "OG3C51", "0.4100", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"HGR51", "CG2R51", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "B2FO, from OG2R50 CG2R51 CG2R51 HGR51, ctsai"}, {"HGR51", "CG2R51", "CG2R53", "OG3C51", "3.7000", "2", "180.00", "B2FO, from OG3C51 CG2R51 CG2R51 HGR51, ctsai"}, {"CG2R51", "CG2R51", "CG2R57", "CG2R51", "15.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "CG2R57", "CG2R57", "2.1000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R51", "CG2R57", "NG2R57", "1.9000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"NG2R51", "CG2R51", "CG2R57", "CG2R51", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"NG2R51", "CG2R51", "CG2R57", "CG2R57", "2.1000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"NG2R51", "CG2R51", "CG2R57", "NG2R57", "1.9000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"HGR51", "CG2R51", "CG2R57", "CG2R51", "1.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR51", "CG2R51", "CG2R57", "CG2R57", "3.5000", "2", "180.00", "33BPO, 3,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR51", "CG2R51", "CG2R57", "NG2R57", "3.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR52", "CG2R51", "CG2R57", "CG2R51", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR52; lf"}, {"HGR52", "CG2R51", "CG2R57", "CG2R57", "3.0000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"HGR52", "CG2R51", "CG2R57", "NG2R57", "3.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR52; lf"}, {"CG2R51", "CG2R51", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "PROT JWK 09/05/89"}, {"CG2R51", "CG2R51", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2R51", "CG2R51", "CG2RC0", "NG2RC0", "12.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG321", "CG2R51", "CG2RC0", "CG2R61", "2.5000", "2", "180.00", "INDO/TRP"}, {"CG321", "CG2R51", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG331", "CG2R51", "CG2RC0", "CG2R61", "2.5000", "2", "180.00", "INDO/TRP"}, {"CG331", "CG2R51", "CG2RC0", "CG2RC0", "2.5000", "2", "180.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "ISOI, isoindole, kevo"}, {"NG2R51", "CG2R51", "CG2RC0", "CG2RC0", "9.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"HGR51", "CG2R51", "CG2RC0", "CG2R61", "2.8000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2RC0", "CG2RC0", "2.6000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2RC0", "NG2RC0", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "CG2RC0", "CG2R61", "0.2500", "2", "180.00", "ISOI, isoindole, kevo"}, {"HGR52", "CG2R51", "CG2RC0", "CG2RC0", "0.2500", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2R51", "CG2R51", "CG2RC7", "CG2R71", "2.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG2RC7", "CG2RC7", "4.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR51", "CG2R51", "CG2RC7", "CG2R71", "2.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR51", "CG2R51", "CG2RC7", "CG2RC7", "2.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "HGA2", "0.0000", "3", "0.00", "PROT 4-methylimidazole 4-21G//rot bar. adm jr., 9/4/89"}, {"CG2RC0", "CG2R51", "CG321", "CG311", "0.0900", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG311", "0.5700", "3", "0.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG314", "0.0900", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG314", "0.5700", "3", "0.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG331", "0.2500", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "HGA2", "0.2000", "3", "0.00", "INDO/TRP"}, {"NG2R50", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT HIS CB-CG TORSION,"}, {"NG2R50", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT HIS CB-CG TORSION,"}, {"NG2R50", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG331", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG331", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"CG2R51", "CG2R51", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT 4-methylimidazole 4-21G//rot bar. adm jr., 9/4/89"}, {"CG2RC0", "CG2R51", "CG331", "HGA3", "0.2000", "3", "0.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG331", "HGA3", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R51", "2.0500", "3", "180.00", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R52", "3.5000", "3", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R53", "3.5000", "3", "180.00", "A2FO, from CG2R51 CG2R51 CG3C52 CG2R52, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "CG2RC0", "1.5000", "3", "180.00", "INDE, indene, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG3C52", "0.0500", "3", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG3C54", "0.5000", "3", "180.00", "0.05 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "NG2R50", "3.6000", "2", "180.00", "2HPR, 2H-pyrrole !1a, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "NG3C51", "0.7000", "3", "180.00", "0.70 0.50 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "0.2800", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "0.9800", "2", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "1.7500", "3", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R51", "2.0500", "3", "0.00", "CPDE, cyclopentadiene, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R52", "1.5000", "3", "0.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R53", "1.5000", "3", "0.00", "A2FO, from HGR51 CG2R51 CG3C52 CG2R52, ctsai"}, {"HGR51", "CG2R51", "CG3C52", "CG2RC0", "1.9000", "3", "0.00", "INDE, indene, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG3C52", "2.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG3C54", "1.5000", "2", "180.00", "2.00 2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "NG2R50", "4.3000", "2", "180.00", "2.6 2HPR, 2H-pyrrole !wC3H, kevo"}, {"HGR51", "CG2R51", "CG3C52", "NG3C51", "3.1000", "2", "180.00", "3PRL, 3-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "OG3C51", "3.1000", "2", "180.00", "B2FO, from HGR51 CG2R51 CG3C52 NG3C51, ctsai"}, {"HGR51", "CG2R51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "NG2R52", "2.8000", "2", "180.00", "2.7 2.4 2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "NG3P2", "0.9000", "3", "180.00", "0.9 3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "HGA2", "0.0000", "3", "0.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "NG2R52", "5.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "NG3P2", "1.7000", "2", "180.00", "3PRP, 3-pyrroline.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "HGA2", "0.0000", "3", "0.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "CG2R52", "5.4000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "CG2R53", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R50", "NG2R50", "8.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG321", "CG2R51", "NG2R50", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R50CPH2"}, {"HGR52", "CG2R51", "NG2R50", "CG2R52", "2.0000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R51", "NG2R50", "CG2R53", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"HGR52", "CG2R51", "NG2R50", "NG2R50", "5.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R51", "CG2R51", "NG2R51", "CG2R51", "10.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "NG2R51", "CG2R53", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R51", "CG2RC0", "5.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2R51", "CG2R51", "NG2R51", "CG321", "0.0000", "1", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG2R51 CG2R51 NG2R51 CG3C51, kevo"}, {"CG2R51", "CG2R51", "NG2R51", "CG3C51", "0.0000", "1", "0.00", "NA, glycosyl linkage"}, {"CG2R51", "CG2R51", "NG2R51", "NG2R50", "10.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/20/89"}, {"CG2R57", "CG2R51", "NG2R51", "CG2R51", "10.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 CG2R51; lf"}, {"CG2R57", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 HGP1; lf"}, {"CG2RC0", "CG2R51", "NG2R51", "CG2R51", "6.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2RC0", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG321", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R51CPH2"}, {"CG321", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HGR52 CG2R51 NG2R51H"}, {"CG331", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R51CPH2"}, {"CG331", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HGR52 CG2R51 NG2R51H"}, {"HGR52", "CG2R51", "NG2R51", "CG2R51", "2.6000", "2", "180.00", "PYRL, pyrrole"}, {"HGR52", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"HGR52", "CG2R51", "NG2R51", "CG2RC0", "2.6000", "2", "180.00", "INDO/TRP"}, {"HGR52", "CG2R51", "NG2R51", "CG321", "0.0000", "2", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGR52 CG2R53 NG2R51 CG331, kevo"}, {"HGR52", "CG2R51", "NG2R51", "CG3C51", "0.0000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR52", "CG2R51", "NG2R51", "NG2R50", "3.0000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR52", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"CG2R51", "CG2R51", "NG2R52", "CG2R53", "12.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R52", "HGP2", "1.4000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "NG2R52", "CG2R53", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "NG2R52", "HGP2", "3.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HC NG2R52CPH1 HA"}, {"HGR52", "CG2R51", "NG2R52", "CG2R53", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR52", "CG2R51", "NG2R52", "HGP2", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG2R51", "CG2R51", "NG2R57", "CG2R51", "10.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "NG2R57", "CG2R57", "0.2000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R51", "NG2R57", "NG2R57", "0.2000", "2", "180.00", "11BPO, 1,1-bipyrrole, lf"}, {"HGR52", "CG2R51", "NG2R57", "CG2R51", "2.6000", "2", "180.00", "13BPO, 1,3-bipyrrole; from HGR52 CG2R51 NG2R51 CG2R51; lf"}, {"HGR52", "CG2R51", "NG2R57", "CG2R57", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"HGR52", "CG2R51", "NG2R57", "NG2R57", "1.1000", "2", "180.00", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R51", "CG2R51", "NG2RC0", "CG2R61", "3.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG2RC0", "CG2RC0", "9.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "NG2RC0", "CG2R61", "1.4000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "NG2RC0", "CG2RC0", "1.4000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "CG3C52", "8.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"HGR52", "CG2R51", "NG3C51", "CG3C52", "3.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"HGR52", "CG2R51", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "CG3C54", "0.3000", "3", "0.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "HGP2", "0.3000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGR52", "CG2R51", "NG3P2", "CG3C54", "0.0000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGR52", "CG2R51", "NG3P2", "HGP2", "0.0000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "CG2R51", "7.5000", "2", "180.00", "FURA, furan @@@@@ Kenno: 8.5 --> 7.5 @@@@@"}, {"CG2R51", "CG2R51", "OG2R50", "CG2R53", "8.5000", "2", "180.00", "OXAZ, oxazole"}, {"CG2R51", "CG2R51", "OG2R50", "CG2RC0", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "NG2R50", "8.5000", "2", "180.00", "ISOX, isoxazole"}, {"HGR52", "CG2R51", "OG2R50", "CG2R51", "3.8000", "2", "180.00", "FURA, furan"}, {"HGR52", "CG2R51", "OG2R50", "CG2R53", "3.8000", "2", "180.00", "OXAZ, oxazole"}, {"HGR52", "CG2R51", "OG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"HGR52", "CG2R51", "OG2R50", "NG2R50", "5.5000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R51", "CG2R51", "OG3C51", "CG2R53", "1.2310", "2", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "OG3C51", "CG2R53", "2.2940", "3", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "OG3C51", "CG3C52", "4.3400", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"HGR52", "CG2R51", "OG3C51", "CG2R53", "2.1000", "2", "180.00", "A2FO, from HGR52 CG2R51 OG3C51 CG3C52, ctsai"}, {"HGR52", "CG2R51", "OG3C51", "CG3C52", "2.1000", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "THIP, thiophene"}, {"CG2R51", "CG2R51", "SG2R50", "CG2R53", "8.5000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 8.0 --> 8.5 @@@@@"}, {"CG2R51", "CG2R51", "SG2R50", "CG2RC0", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "NG2R50", "9.0000", "2", "180.00", "ISOT, isothiazole"}, {"HGR52", "CG2R51", "SG2R50", "CG2R51", "4.0000", "2", "180.00", "THIP, thiophene"}, {"HGR52", "CG2R51", "SG2R50", "CG2R53", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR52", "CG2R51", "SG2R50", "CG2RC0", "3.9000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"HGR52", "CG2R51", "SG2R50", "NG2R50", "4.5000", "2", "180.00", "ISOT, isothiazole"}, {"NG2R50", "CG2R52", "CG2R52", "NG2R50", "9.5000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "CG2R52", "CG2R52", "HGR52", "3.9000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"HGR52", "CG2R52", "CG2R52", "HGR52", "0.1700", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "CG2R52", "CG2RC0", "CG2R61", "2.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"NG2R50", "CG2R52", "CG2RC0", "CG2RC0", "8.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR52", "CG2R52", "CG2RC0", "CG2R61", "2.4000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR52", "CG2R52", "CG2RC0", "CG2RC0", "2.4000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG2R51", "3.5000", "3", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG2RC0", "3.5000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG3C52", "2.8000", "3", "180.00", "2.85 2PRZ, 2-pyrazoline, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "HGA2", "1.4000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG2R51", "1.3000", "3", "0.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG2RC0", "2.0000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG3C52", "4.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R51", "CG2R52", "NG2R50", "CG3C52", "5.5000", "2", "180.00", "2HPR, 2H-pyrrole !1,1a, kevo"}, {"CG2R51", "CG2R52", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R52", "NG2R50", "OG2R50", "12.0000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R51", "CG2R52", "NG2R50", "SG2R50", "8.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R52", "CG2R52", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2RC0", "CG2R52", "NG2R50", "NG2R51", "13.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "CG2R51", "6.5000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "CG2RC0", "13.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "NG3C51", "17.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG2R51", "5.0000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG2RC0", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG3C52", "7.6000", "2", "180.00", "7.1 2HPR, 2H-pyrrole !wC5H, kevo"}, {"HGR52", "CG2R52", "NG2R50", "NG2R51", "3.8000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR52", "CG2R52", "NG2R50", "NG3C51", "5.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "NG2R50", "OG2R50", "5.5000", "2", "180.00", "ISOX, isoxazole"}, {"HGR52", "CG2R52", "NG2R50", "SG2R50", "4.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R51", "CG2R52", "NG2R52", "CG3C54", "6.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG2R52", "NG2R52", "HGP2", "2.7000", "2", "180.00", "2.5 2HPP, 2H-pyrrole.H+, kevo"}, {"HGR52", "CG2R52", "NG2R52", "CG3C54", "9.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR52", "CG2R52", "NG2R52", "HGP2", "0.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R43", "CG2R53", "CG3C41", "CG3C41", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R43", "CG2R53", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"OG2D1", "CG2R53", "CG3C41", "CG3C41", "0.5700", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R53", "CG2R53", "CG3C52", "CG3C52", "1.0500", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C52", "CG2R51", "0.0800", "3", "0.00", "A2FO, from OG2D1 CG2R53 CG3C52 CG3C52, ctsai"}, {"OG2D1", "CG2R53", "CG3C52", "CG3C52", "0.0800", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG3C51", "CG2R53", "CG3C52", "CG2R51", "0.2190", "3", "0.00", "A2FO, 3H-furan-2-one, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "CG2R51", "0.2890", "4", "0.00", "A2FO, 3H-furan-2-one, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "CG3C52", "2.3700", "2", "0.00", "GBL, Gamma-batyrolactone, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "180.00", "GBL, from NG2R53 CG2R53 CG3C52 HGA2, ctsai"}, {"CG3C41", "CG2R53", "NG2R43", "CG3C41", "1.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG2R53", "NG2R43", "HGP1", "0.0000", "1", "0.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R43", "CG3C41", "2.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R43", "HGP1", "2.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R50", "CG2R53", "NG2R50", "CG2R53", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R50", "OG2R50", "12.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"NG2R51", "CG2R53", "NG2R50", "CG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R51", "CG2R53", "NG2R50", "CG2R53", "12.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R51", "CG2R53", "NG2R50", "CG2RC0", "14.0000", "2", "180.00", "NA A"}, {"NG3C51", "CG2R53", "NG2R50", "CG3C52", "18.0000", "2", "180.00", "14 ! 13 2IMI, 2-imidazoline 1, kevo"}, {"OG2R50", "CG2R53", "NG2R50", "CG2R51", "14.0000", "2", "180.00", "OXAZ, oxazole"}, {"OG2R50", "CG2R53", "NG2R50", "CG2R53", "12.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"SG2R50", "CG2R53", "NG2R50", "CG2R51", "6.0000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 7.0 --> 6.0 @@@@@"}, {"SG2R50", "CG2R53", "NG2R50", "CG2RC0", "12.5000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"HGR52", "CG2R53", "NG2R50", "CG2R51", "2.0000", "2", "180.00", "NA bases"}, {"HGR52", "CG2R53", "NG2R50", "CG2R53", "5.5000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R50", "CG2RC0", "5.2000", "2", "180.00", "NA A"}, {"HGR52", "CG2R53", "NG2R50", "CG3C52", "11.4000", "2", "180.00", "2IMI, 2-imidazoline, kevo"}, {"HGR52", "CG2R53", "NG2R50", "NG2R51", "3.3000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R50", "OG2R50", "3.8000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "CG2RC0", "2.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "HGP1", "0.3000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "CG2RC0", "2.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "HGP1", "0.3000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "CG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R50", "CG2R53", "NG2R51", "CG2RC0", "6.0000", "2", "180.00", "NA A"}, {"NG2R50", "CG2R53", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"NG2R50", "CG2R53", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R50", "CG2R53", "NG2R51", "CG3RC1", "1.5000", "2", "180.00", "NA bases"}, {"NG2R50", "CG2R53", "NG2R51", "NG2R50", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"OG2D1", "CG2R53", "NG2R51", "CG2RC0", "2.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"OG2D1", "CG2R53", "NG2R51", "HGP1", "0.8600", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR52", "CG2R53", "NG2R51", "CG2R51", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR52", "CG2R53", "NG2R51", "CG2RC0", "5.6000", "2", "180.00", "NA G"}, {"HGR52", "CG2R53", "NG2R51", "CG331", "0.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"HGR52", "CG2R53", "NG2R51", "CG3C51", "0.0000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR52", "CG2R53", "NG2R51", "CG3RC1", "1.5000", "2", "180.00", "NA bases"}, {"HGR52", "CG2R53", "NG2R51", "NG2R50", "1.7000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R52", "CG2R53", "NG2R52", "CG2R51", "12.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R52", "CG2R53", "NG2R52", "CG3C54", "7.7000", "2", "180.00", "7.7 2IMP, 2-imidazoline.H+, kevo"}, {"NG2R52", "CG2R53", "NG2R52", "HGP2", "1.4000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR53", "CG2R53", "NG2R52", "CG2R51", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR53", "CG2R53", "NG2R52", "CG3C54", "6.3000", "2", "180.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGR53", "CG2R53", "NG2R52", "HGP2", "0.0000", "2", "180.00", "PROT his, adm jr., 6/27/90, YES, 0.0"}, {"CG251O", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "NG2R53", "CG311", "1.6000", "1", "0.00", "drug design project, xxwy"}, {"CG251O", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"CG251O", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG311", "1.6000", "1", "0.00", "drug design project, xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"CG252O", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG3C52", "CG2R53", "NG2R53", "CG3C52", "0.4000", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG2R53", "NG2R53", "HGP1", "1.2700", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "NG2R53", "CG251O", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG252O", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG311", "0.5000", "2", "180.00", "drug design project, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG3RC1", "0.5000", "2", "180.00", "CBHH, glycoluril, (NG2R53 CG2R53 NG2R53 CG311), jing"}, {"NG2R53", "CG2R53", "NG2R53", "HGP1", "0.8000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG251O", "6.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG252O", "6.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG2R53", "1.1000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG3C52", "2.5900", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R53", "CG3RC1", "2.5900", "2", "180.00", "CBHH, glycoluril, (OG2D1 CG2R53 NG2R53 CG3C52), jing"}, {"OG2D1", "CG2R53", "NG2R53", "HGP1", "0.8600", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"SG2D1", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "NG2R53", "CG311", "1.5000", "2", "180.00", "drug design project, xxwy"}, {"SG2D1", "CG2R53", "NG2R53", "HGP1", "1.0000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG2R53", "NG2R53", "CG311", "1.5000", "2", "180.00", "drug design project, xxwy"}, {"SG311", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R50", "CG2R53", "NG3C51", "CG3C52", "4.0000", "2", "180.00", "4 2IMI, 2-imidazoline x, kevo"}, {"NG2R50", "CG2R53", "NG3C51", "HGP1", "1.2000", "3", "0.00", ".85 ! 0 ! 0.6 3 0 2IMI, 2-imidazoline -wN1H, kevo"}, {"HGR52", "CG2R53", "NG3C51", "CG3C52", "0.0000", "2", "180.00", "4.6 2IMI, 2-imidazoline, kevo"}, {"HGR52", "CG2R53", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"NG2R50", "CG2R53", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "OXAZ, oxazole"}, {"NG2R50", "CG2R53", "OG2R50", "NG2R50", "9.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"HGR52", "CG2R53", "OG2R50", "CG2R51", "3.8000", "2", "180.00", "OXAZ, oxazole"}, {"HGR52", "CG2R53", "OG2R50", "NG2R50", "4.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"CG2R51", "CG2R53", "OG3C51", "CG3C52", "1.2400", "2", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R53", "OG3C51", "CG3C52", "2.2700", "3", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG2R51", "0.2960", "2", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG2R51", "0.5120", "3", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG3C52", "3.8000", "2", "180.00", "GBL, Gamma-butyrolactone, ctsai"}, {"OG2D1", "CG2R53", "OG3C51", "CG2R51", "4.3400", "2", "180.00", "A2FO, from CG2R51 CG2R51 OG3C51 CG3C52, ctsai"}, {"OG2D1", "CG2R53", "OG3C51", "CG3C52", "4.3400", "2", "180.00", "GBL, from CG2R51 CG2R51 OG3C51 CG3C52, ctsai"}, {"NG2R50", "CG2R53", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 8.0 --> 8.5 @@@@@"}, {"NG2R50", "CG2R53", "SG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"HGR52", "CG2R53", "SG2R50", "CG2R51", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR52", "CG2R53", "SG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"NG2R53", "CG2R53", "SG311", "CG251O", "0.2500", "1", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG251O", "1.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG252O", "0.2500", "1", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG252O", "1.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"OG2D1", "CG2R53", "SG311", "CG251O", "0.2500", "1", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG251O", "1.3000", "2", "180.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG252O", "0.2500", "1", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG252O", "1.3000", "2", "180.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"SG2D1", "CG2R53", "SG311", "CG251O", "0.2500", "1", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG251O", "0.6000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG252O", "0.2500", "1", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG252O", "0.6000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R51", "CG2R57", "CG2R57", "CG2R51", "0.4500", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "CG2R57", "CG2R51", "0.0800", "4", "0.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.3200", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.1200", "4", "0.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.0150", "6", "0.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG1N1", "CG2R61", "CG2R61", "CG2R61", "2.0000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG1N1", "CG2R61", "CG2R61", "CG2RC0", "1.3000", "2", "180.00", "CYIN, 5-cyanoindole; from 3CYP, 3-Cyanopyridine; alr"}, {"CG1N1", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG1N1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: was 5.0 1 0.0 (sic!) ==> reset to default."}, {"CG1N1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: was 5.0 1 0.0 (sic!) ==> reset to default."}, {"CG2DC1", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "HDZ2, hydrazone model cmpd 2 Kenno: 4.2 -> 2.4"}, {"CG2DC2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "HDZ2, hydrazone model cmpd 2 Kenno: 4.2 -> 2.4"}, {"CG2N2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BAMI, benzamidinium; default parameter; sz"}, {"CG2N2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BAMI, benzamidinium; default parameter; sz"}, {"CG2O1", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "3NAP, nicotinamide Kenno: 1.0 -> 3.1"}, {"CG2O1", "CG2R61", "CG2R61", "NG2R60", "5.0000", "2", "180.00", "3NAP, nicotinamide"}, {"CG2O1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3NAP, nicotinamide Kenno: 4.2 -> 2.4"}, {"CG2O1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3NAP, nicotinamide Kenno: 4.2 -> 2.4"}, {"CG2O2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate; default parameter; kevo and jal"}, {"CG2O2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate; default parameter; kevo and jal"}, {"CG2O3", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2O3", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2O3", "CG2R61", "CG2R61", "NG2S1", "2.4000", "2", "180.00", "2XBD, Gamma 2-carboxy phenyl GA CDCA amide, corrected by kevo"}, {"CG2O3", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"CG2O3", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"CG2O4", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) unmodified, yin"}, {"CG2O4", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) unmodified, yin"}, {"CG2O4", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) Kenno: 4.2 -> 2.4 unmodified"}, {"CG2O4", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) Kenno: 4.2 -> 2.4 unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2O5", "CG2R61", "CG2R61", "NG2R60", "5.0000", "2", "180.00", "3ACP, 3-acetylpyridine unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3ACP, 3-acetylpyridine reset to default by kevo; verified by mcs"}, {"CG2O5", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3ACP, 3-acetylpyridine reset to default by kevo; verified by mcs"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "PROT JES 8/25/89"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R62", "0.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R63", "3.2000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R64", "3.1000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R66", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R67", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R61", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2R61", "CG311", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R61", "CG312", "3.1000", "2", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG2R61", "CG2R61", "CG321", "3.1000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene"}, {"CG2R61", "CG2R61", "CG2R61", "CG324", "3.1000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG2R61", "CG331", "3.1000", "2", "180.00", "PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "NG2O1", "2.0000", "2", "180.00", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R60", "1.2000", "2", "180.00", "PYR1, pyridine, yin"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R61", "3.7000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "PYRD, pyridazine (also applies to PYRM, pyrimidine); from PYR1, pyridine, yin; adm"}, {"CG2R61", "CG2R61", "CG2R61", "NG2RC0", "1.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "NG2S1", "3.1000", "2", "180.00", "RETINOL PACP"}, {"CG2R61", "CG2R61", "CG2R61", "NG2S3", "5.0000", "2", "180.00", "PYRIDINE aminopyridine, yin"}, {"CG2R61", "CG2R61", "CG2R61", "NG301", "1.4000", "2", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "NG311", "3.1000", "2", "180.00", "FEOZ, phenoxazine, erh based on PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "NG3N1", "3.1000", "2", "180.00", "PHHZ, phenylhydrazine, ed; reset to default param by kevo"}, {"CG2R61", "CG2R61", "CG2R61", "OG301", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R61", "OG303", "3.1000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "CG2R61", "OG311", "3.1000", "2", "180.00", "PYRIDINE phenol, yin"}, {"CG2R61", "CG2R61", "CG2R61", "OG312", "3.1000", "2", "180.00", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "CG2R61", "CG2R61", "OG3R60", "3.1000", "2", "180.00", "FEOZ, phenoxazine, erh based on PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG311", "4.5000", "2", "180.00", "FETZ, phenothiazine, erh based on toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG3O1", "3.1000", "2", "180.00", "based on toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG3O2", "3.0000", "2", "180.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2R61", "CG2R61", "CG2R61", "CLGR1", "3.0000", "2", "180.00", "CHLB, chlorobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "BRGR1", "3.0000", "2", "180.00", "BROB, bromobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "IGR1", "2.1000", "2", "180.00", "IODB, iodobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "PROT JES 8/25/89 benzene"}, {"CG2R61", "CG2R61", "CG2R61", "HGR62", "4.2000", "2", "180.00", "BROB, bromobenzene"}, {"CG2R62", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R63", "CG2R61", "CG2R61", "NG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from CG2R64 CG2R61 CG2R61 NG2R62; isg"}, {"CG2R63", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "CG2R61", "HGR62", "0.5000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from CG2R64 CG2R61 CG2R61 HGR62; isg"}, {"CG2R64", "CG2R61", "CG2R61", "CG331", "3.1000", "2", "180.00", "2A46PD, 2-Amino-4,6-dimethyl-pyridine CDCA conjugate, cacha"}, {"CG2R64", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R64", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R64", "CG2R61", "CG2R61", "HGR62", "0.5000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R66", "CG2R61", "CG2R61", "NG2S1", "3.1000", "2", "180.00", "3FBD, 3-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2RC0", "CG2R61", "CG2R61", "BRGR1", "3.1000", "2", "180.00", "drug design project, xxwy"}, {"CG2RC0", "CG2R61", "CG2R61", "HGR61", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"CG311", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "FBIB, Fatty Binding Inhibitior B, cacha Kenno: 4.2 -> 2.4"}, {"CG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "NAMODEL difluorotoluene Kenno: 4.2 -> 2.4"}, {"CG312", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate Kenno: 4.2 -> 2.4"}, {"CG321", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE 3-ethylpyridine, yin"}, {"CG321", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene Kenno: 4.2 -> 2.4"}, {"CG321", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene Kenno: 4.2 -> 2.4"}, {"CG324", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "CG331", "2.4000", "2", "180.00", "OXYL, o-xylene, kevo for gsk/ibm"}, {"CG331", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE 3-methylpyridine, yin"}, {"CG331", "CG2R61", "CG2R61", "NG2S1", "2.4000", "2", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, corrected by kevo"}, {"CG331", "CG2R61", "CG2R61", "OG301", "2.4000", "2", "180.00", "FBID, Fatty acid Binding protein Inhibitor D, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "FBIA, Fatty Binding Inhibitior B, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"NG2O1", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "NITB, nitrobenzene"}, {"NG2R60", "CG2R61", "CG2R61", "NG2R60", "0.9000", "2", "180.00", "PYZN, pyrazine"}, {"NG2R60", "CG2R61", "CG2R61", "NG2R62", "3.0000", "2", "180.00", "PTID, pteridine, erh"}, {"NG2R60", "CG2R61", "CG2R61", "NG2S1", "5.0000", "2", "180.00", "3AMP, 3-Amino pyridine, cacha"}, {"NG2R60", "CG2R61", "CG2R61", "NG2S3", "5.0000", "2", "180.00", "PYRIDINE aminopyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "OG311", "1.0000", "2", "180.00", "PYRIDINE 3-hydroxypyridine Kenno: 0.0 (unlikely) -> 1.0 from 3-methylpyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "BRGR1", "3.0000", "2", "180.00", "3A5BPD, Gamma-3-Amino-5-bromo Pyridine GA CDCA Amide, cacha"}, {"NG2R60", "CG2R61", "CG2R61", "HGR61", "2.8000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "HGR62", "6.0000", "2", "180.00", "PYZN, pyrazine"}, {"NG2R61", "CG2R61", "CG2R61", "HGR61", "0.8000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg (may need to be re-evaluated; ideally re-check INDZ with molvib_energy script and also look at URA2S molvib)"}, {"NG2R61", "CG2R61", "CG2R61", "HGR62", "0.8000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from NG2RC0 CG2R61 CG2R61 HGR61; isg (may need to be re-evaluated; ideally re-check INDZ with molvib_energy script and also look at URA2S molvib)"}, {"NG2R62", "CG2R61", "CG2R61", "NG2R62", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"NG2R62", "CG2R61", "CG2R61", "HGR61", "2.8000", "2", "180.00", "PYRD, pyridazine"}, {"NG2R62", "CG2R61", "CG2R61", "HGR62", "6.0000", "2", "180.00", "TRIB, triazine124"}, {"NG2RC0", "CG2R61", "CG2R61", "HGR61", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"NG2S1", "CG2R61", "CG2R61", "OG301", "2.4000", "2", "180.00", "2AMFD, Gamma 2-amino phenyl methyl ether, corrected by kevo"}, {"NG2S1", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "2AMF, 2-acetamide phenol, cacha Kenno: 4.2 -> 2.4"}, {"NG2S1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "RETINOL PACP Kenno: 4.2 -> 2.4"}, {"NG2S1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3AMP, 3-Amino pyridine, cacha Kenno: 4.2 -> 2.4"}, {"NG2S3", "CG2R61", "CG2R61", "NG2S3", "3.1000", "2", "180.00", "PYRIDINE diaminopyridine. Kenno: Change to 2.4 ???"}, {"NG2S3", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"NG2S3", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"NG301", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "DMAN, N,N-dimethylaniline; from NG311 CG2R61 CG2R61 HGR61; sc"}, {"NG311", "CG2R61", "CG2R61", "OG3R60", "2.5800", "2", "180.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"NG311", "CG2R61", "CG2R61", "SG311", "3.5700", "2", "180.00", "FETZ, phenothiazine fit_dihedral, erh"}, {"NG311", "CG2R61", "CG2R61", "SG3O2", "2.4000", "2", "180.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"NG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FEOZ, phenoxazine, erh"}, {"NG3N1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PHHZ, phenylhydrazine, ed; reset to default param by kevo"}, {"OG301", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BIPHENYL ANALOGS, peml. Kenno: 4.2 -> 2.4"}, {"OG303", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr. Kenno: 4.2 -> 2.4"}, {"OG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 phenol Kenno: 4.2 -> 2.4"}, {"OG311", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT JES 8/25/89 phenol Kenno: 4.2 -> 2.4"}, {"OG312", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT adm jr. 8/27/91, phenoxide Kenno: 4.2 -> 2.4"}, {"OG3R60", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FEOZ, phenoxazine, erh"}, {"SG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FETZ, phenothiazine, erh based on toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"SG3O1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "based on toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"SG3O2", "CG2R61", "CG2R61", "HGR61", "2.1000", "2", "180.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CLGR1", "CG2R61", "CG2R61", "CLGR1", "2.4000", "2", "180.00", "12DCB, 1,2,dichlorobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"CLGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "CHLB, chlorobenzene"}, {"BRGR1", "CG2R61", "CG2R61", "BRGR1", "2.4000", "2", "180.00", "12DBB, 1,2,dibromobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"BRGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "BROB, bromobenzene"}, {"IGR1", "CG2R61", "CG2R61", "IGR1", "2.4000", "2", "180.00", "12DIB, 1,2,diiodobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"IGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "IODB, iodobenzene"}, {"HGR61", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 benzene"}, {"HGR61", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "BROB, bromobenzene"}, {"HGR62", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "TRIB, triazine124"}, {"CG2R61", "CG2R61", "CG2R62", "CG2R62", "0.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R62", "CG2R63", "3.1000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R62", "NG2R61", "7.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R62", "NG2R62", "1.2000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R61", "CG2R62", "OG3R60", "3.1000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR61", "CG2R61", "CG2R62", "CG2R62", "3.1000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR61", "CG2R61", "CG2R62", "CG2R63", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"HGR61", "CG2R61", "CG2R62", "NG2R61", "0.4000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"HGR61", "CG2R61", "CG2R62", "NG2R62", "2.8000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR61", "CG2R61", "CG2R62", "OG3R60", "2.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R63", "NG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R63", "NG2R67", "0.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R61 CG2R61 CG2R63 NG2R61, YTS2; isg"}, {"CG2R61", "CG2R61", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"HGR62", "CG2R61", "CG2R63", "NG2R61", "1.0000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 CG2R63 NG2R61; isg"}, {"HGR62", "CG2R61", "CG2R63", "NG2R67", "1.0000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from HGR62 CG2R62 CG2R63 NG2R61, NA; isg"}, {"HGR62", "CG2R61", "CG2R63", "SG2D1", "2.4000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from SG311 CG2R61 CG2R61 HGR61; isg"}, {"CG2R61", "CG2R61", "CG2R64", "NG2R60", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R61", "CG2R64", "NG2R62", "1.2000", "2", "180.00", "18NFD, 1,8-naphthyridine, from PYR1, pyridine, erh"}, {"CG2R61", "CG2R61", "CG2R64", "NG2S1", "3.1000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"NG2R60", "CG2R61", "CG2R64", "NG2R62", "1.5000", "2", "0.00", "PTID, pteridine, erh"}, {"OG311", "CG2R61", "CG2R64", "NG2R60", "3.1000", "2", "180.00", "2A3HPD, cacha"}, {"OG311", "CG2R61", "CG2R64", "NG2S1", "2.4000", "2", "180.00", "2A3HPD, cacha"}, {"HGR61", "CG2R61", "CG2R64", "NG2R60", "2.8000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"HGR61", "CG2R61", "CG2R64", "NG2S1", "2.4000", "2", "180.00", "2AMP, 2-amino pyridine, default parameter by analogy to PACP, kevo"}, {"CG2R61", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R66", "CG2R67", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R66 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG331", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG331", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"NG2R60", "CG2R61", "CG2R66", "CG2R61", "1.2000", "2", "180.00", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"NG2R60", "CG2R61", "CG2R66", "FGR1", "3.1000", "2", "180.00", "PYRIDINE fluoropyridine, yin"}, {"NG2S1", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"NG2S1", "CG2R61", "CG2R66", "FGR1", "2.4000", "2", "180.00", "2FBD, Gamma 2-Fluoro amino benzene glutamic acid CDCA amide, cacha Kenno: 3.1 -> 2.4"}, {"HGR62", "CG2R61", "CG2R66", "CG2R61", "4.2000", "2", "180.00", "NAMODEL difluorotoluene"}, {"HGR62", "CG2R61", "CG2R66", "CG2R67", "4.2000", "2", "180.00", "PYO2F , from HGR62 CG2R61 CG2R66 CG2R61, penalty= 0.5"}, {"HGR62", "CG2R61", "CG2R66", "FGR1", "2.4000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R66", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 1.5"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R67", "CG2RC0", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R61", "CG2R67", "NG2R60", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 CG2R61 NG2R60, kevo"}, {"CG2R61", "CG2R61", "CG2R67", "NG2R67", "3.1000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R61 CG2R61 CG2R61 CG2R61; isg"}, {"NG2R60", "CG2R61", "CG2R67", "CG2R61", "1.2000", "2", "180.00", "3PHP, 3-phenyl-pyridine; Kenno: 3.1 -> 1.2 from PYRIDINE pyridine, yin"}, {"NG2R60", "CG2R61", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "3PHP, 3-phenyl-pyridine, Kenno: 3.1 -> 1.0 from 3-methylpyridine, yin"}, {"HGR61", "CG2R61", "CG2R67", "CG2R61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR61", "CG2R61", "CG2R67", "CG2R66", "4.2000", "2", "180.00", "PYO2F , from HGR61 CG2R61 CG2R67 CG2R61, penalty= 1.5"}, {"HGR61", "CG2R61", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR61", "CG2R61", "CG2R67", "CG2RC0", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"HGR61", "CG2R61", "CG2R67", "NG2R60", "2.8000", "2", "180.00", "22BPY, 2,2'-bipyridine, from NG2R60 CG2R61 CG2R61 HGR61, kevo"}, {"HGR61", "CG2R61", "CG2R67", "NG2R67", "2.8000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R60 CG2R61 CG2R61 HGR61; isg"}, {"HGR62", "CG2R61", "CG2R67", "CG2R61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR62", "CG2R61", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2O1", "CG2R61", "CG2RC0", "CG2RC0", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2O1", "CG2R61", "CG2RC0", "NG2R51", "2.8000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2R61", "CG2RC0", "CG25C1", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R61", "CG2R61", "CG2RC0", "CG25C2", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R51", "4.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R52", "1.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R67", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "CG3C52", "0.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2R50", "1.5000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2RC0", "3.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "OG3C51", "2.0000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2R61", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "CG2RC0", "2.2000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "NG2R51", "0.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"HGR61", "CG2R61", "CG2RC0", "CG25C1", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR61", "CG2R61", "CG2RC0", "CG25C2", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R51", "4.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R52", "0.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R67", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"HGR61", "CG2R61", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "CG3C52", "0.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG2R50", "0.8000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "NG2RC0", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG3C51", "0.0000", "2", "180.00", "INDI, indoline, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "OG3C51", "2.4000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"HGR61", "CG2R61", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"HGR62", "CG2R61", "CG2RC0", "CG25C1", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"HGR62", "CG2R61", "CG2RC0", "CG25C2", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"HGR62", "CG2R61", "CG2RC0", "CG2RC0", "4.2000", "2", "180.00", "PUR7, purine(N7H); PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "CG2RC0", "NG2R50", "1.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "CG2RC0", "NG2R51", "0.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"CG2R61", "CG2R61", "CG311", "CG2O3", "0.2300", "2", "180.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG2R61", "CG2R61", "CG311", "CG321", "0.2300", "2", "180.00", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG2R61", "CG2R61", "CG311", "CG331", "0.2300", "2", "180.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2R61", "CG2R61", "CG311", "HGA1", "0.1000", "6", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG312", "PG1", "0.1500", "2", "180.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG2R61", "CG312", "PG2", "0.1500", "2", "180.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2R61", "CG2R61", "CG312", "FGA2", "0.3000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG2R61", "CG321", "CG2R61", "0.2300", "2", "180.00", "PYRIDINE pyr-CH2C6H5, yin"}, {"CG2R61", "CG2R61", "CG321", "CG311", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG314", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG321", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG331", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.1190", "2", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.1320", "4", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.0130", "6", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "OG302", "0.0000", "2", "0.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE, cacha"}, {"CG2R61", "CG2R61", "CG321", "OG311", "0.0000", "2", "0.00", "3CAP, carbinol-pyridine (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG2R61", "CG321", "PG1", "0.2000", "2", "180.00", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG2R61", "CG321", "PG2", "0.2000", "2", "180.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG2R61", "CG2R61", "CG321", "HGA2", "0.0020", "6", "0.00", "PROT toluene, adm jr., 3/7/92"}, {"NG2R60", "CG2R61", "CG321", "CG321", "0.2300", "2", "180.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"NG2R60", "CG2R61", "CG321", "HGA2", "0.0020", "6", "0.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"CG2R61", "CG2R61", "CG324", "NG3P1", "0.1500", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG324", "NG3P3", "0.3300", "2", "0.00", "4FBA, optimized using CCCN mp2 scan, pram"}, {"CG2R61", "CG2R61", "CG324", "HGA2", "0.0000", "2", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG331", "HGA3", "0.0020", "6", "0.00", "PYRIDINE toluene Kenno: 180 -> 0"}, {"CG2R66", "CG2R61", "CG331", "HGA3", "0.0020", "6", "0.00", "PYRIDINE toluene Kenno: 180 -> 0"}, {"NG2R60", "CG2R61", "CG331", "HGA3", "0.0030", "6", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"CG2R61", "CG2R61", "NG2O1", "OG2N1", "0.9000", "2", "180.00", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R64", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R67", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 NG2R60 CG2R61, kevo"}, {"CG2R64", "CG2R61", "NG2R60", "CG2R61", "2.2000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R66", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"CG2R67", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "3PHP, 3-phenyl-pyridine, yin"}, {"CG321", "CG2R61", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "CG2R64", "3.1000", "2", "180.00", "2A46PD, 2-Amino-4,6-dimethyl-pyridine CDCA conjugate, cacha"}, {"BRGR1", "CG2R61", "NG2R60", "CG2R61", "3.0000", "2", "180.00", "3A6BPD, Gamma-3-Amino-6-bromo Pyridine GA CDCA Amide, cacha"}, {"HGR62", "CG2R61", "NG2R60", "CG2R61", "5.8000", "2", "180.00", "PYR1 pyridine, yin ! got overwritten with slack parameter during big renaming operation (par_cgenff_1e_unsorted). Restored to original from toppar_all22_prot_pyridines."}, {"HGR62", "CG2R61", "NG2R60", "CG2R64", "5.8000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"HGR62", "CG2R61", "NG2R60", "CG2R67", "5.2500", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R61", "NG2R61", "CG2R63", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "NG2R61", "HGP1", "1.0000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"HGR62", "CG2R61", "NG2R61", "CG2R63", "4.6000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 NG2R61 CG2R63; isg"}, {"HGR62", "CG2R61", "NG2R61", "HGP1", "1.2000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 NG2R61 HGP1; isg"}, {"CG2R61", "CG2R61", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "PYRM, pyrimidine"}, {"CG2R61", "CG2R61", "NG2R62", "NG2R62", "0.8000", "2", "180.00", "PYRD, pyridazine"}, {"CG2RC0", "CG2R61", "NG2R62", "CG2R64", "2.2000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "NG2R62", "CG2R64", "7.3000", "2", "180.00", "PYRM, pyrimidine"}, {"HGR62", "CG2R61", "NG2R62", "NG2R62", "2.8000", "2", "180.00", "PYRD, pyridazine"}, {"CG2R61", "CG2R61", "NG2RC0", "CG2R51", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2RC0", "CG2RC0", "0.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR62", "CG2R61", "NG2RC0", "CG2R51", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR62", "CG2R61", "NG2RC0", "CG2RC0", "1.9000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "RETINOL PACP"}, {"CG2R61", "CG2R61", "NG2S1", "HGP1", "0.5000", "2", "180.00", "RETINOL PACP"}, {"CG2R66", "CG2R61", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "CG2O1", "1.0000", "3", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R61", "CG2R61", "NG2S3", "HGP4", "1.3500", "2", "180.00", "PYRIDINE aminopyridine. kevo: 1.80 --> 1.35"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.9600", "2", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.1050", "4", "0.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.0350", "6", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG311", "CG2R61", "0.4400", "2", "0.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "NG311", "CG321", "1.2000", "2", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG2R61", "CG2R61", "NG311", "CG321", "0.3000", "4", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG2R61", "CG2R61", "NG311", "SG3O2", "0.2000", "2", "180.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "NG311", "HGP1", "0.5000", "2", "180.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "NG311", "HGPAM1", "0.3200", "2", "180.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "NG3N1", "NG3N1", "2.3700", "2", "180.00", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "NG3N1", "HGP1", "0.0000", "2", "0.00", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "OG301", "CG2R61", "1.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "OG301", "CG321", "1.6200", "2", "180.00", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "CG2R61", "OG301", "CG321", "0.1900", "4", "180.00", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "CG2R61", "OG301", "CG331", "1.5800", "2", "180.00", "MEOB, Methoxybenzene update, yxu"}, {"CG2R61", "CG2R61", "OG301", "CG331", "0.2000", "4", "180.00", "MEOB, Methoxybenzene update, yxu"}, {"CG2R61", "CG2R61", "OG303", "PG1", "1.4000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "OG303", "SG3O2", "0.5100", "2", "180.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "CG2R61", "OG303", "SG3O2", "0.1500", "4", "0.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "CG2R61", "OG311", "HGP1", "0.9900", "2", "180.00", "PROT phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"CG2R64", "CG2R61", "OG311", "HGP1", "0.9900", "2", "180.00", "2A3HPD, from PROT phenol, cacha"}, {"CG2R61", "CG2R61", "OG3R60", "CG2R61", "0.7600", "2", "0.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "SG311", "CG2R61", "1.7500", "2", "0.00", "FETZ, phenothiazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "SG3O1", "OG2P1", "0.0040", "6", "0.00", "benzene sulfonic acid anion, og"}, {"CG2R61", "CG2R61", "SG3O2", "NG311", "0.2200", "2", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "SG3O2", "NG321", "0.3500", "2", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"CG2R61", "CG2R61", "SG3O2", "OG2P1", "0.0000", "6", "0.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2O1", "CG2R62", "CG2R62", "CG2R62", "3.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG2R62", "CG2R62", "NG2R61", "2.5000", "2", "180.00", "NA ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R61", "2.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R62", "2.0000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R63", "3.7000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R62", "NG2R61", "3.5000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R62", "NG2R62", "3.1000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R62", "CG2R62", "OG3R60", "3.9000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "CG2R62", "6.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R62", "CG2R63", "3.0000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R61", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R62", "1.2000", "2", "180.00", "5FOP, PYRH; from CG2R61 CG2R61 CG2R61 NG2R62, PYRD, PYRM and CG2R61 CG2R61 CG2R61 NG2R60, PYR1; yxu"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R67", "3.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 CG2R62 CG2R62 NG2R61, YTHY; isg"}, {"CG2R62", "CG2R62", "CG2R62", "OG3R60", "0.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "NA bases"}, {"CG2R63", "CG2R62", "CG2R62", "CG2R67", "3.7000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 CG2R62 CG2R63, penalty= 0.5"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R61", "3.0000", "2", "180.00", "NA T"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R62", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R67", "3.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R63 CG2R62 CG2R62 NG2R61; isg"}, {"CG2R63", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "NA bases"}, {"CG2R64", "CG2R62", "CG2R62", "NG2R61", "6.0000", "2", "180.00", "NA C"}, {"CG2R64", "CG2R62", "CG2R62", "HGR62", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG2R67", "CG2R62", "CG2R62", "NG2R61", "3.5000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R62 NG2R61, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R62 HGR62, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "PIUB , from CG2R61 CG2R62 CG2R62 HGR62, penalty= 1.5"}, {"CG331", "CG2R62", "CG2R62", "NG2R61", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG331", "CG2R62", "CG2R62", "HGR62", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"NG2R61", "CG2R62", "CG2R62", "HGR62", "3.4000", "2", "180.00", "NA C"}, {"NG2R61", "CG2R62", "CG2R62", "HGR63", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2R62", "CG2R62", "CG2R62", "HGR62", "6.0000", "2", "180.00", "43HPY, 4(3H)-pyrimidinone; from NG2R62 CG2R61 CG2R61 HGR62; isg"}, {"NG2R62", "CG2R62", "CG2R62", "HGR63", "1.1000", "2", "180.00", "PYRH ,6.0000 2 180.00 ! from NG2R62 CG2R62 CG2R62 HGR62, penalty= 1"}, {"NG2R67", "CG2R62", "CG2R62", "HGR62", "3.4000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R62 CG2R62 HGR62; isg"}, {"HGR62", "CG2R62", "CG2R62", "HGR62", "3.0000", "2", "180.00", "NA U"}, {"HGR63", "CG2R62", "CG2R62", "HGR63", "2.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone; from CG2R61 CG2R61 CG2R61 SG311, FETZ; isg"}, {"CG2R62", "CG2R62", "CG2R63", "CG2R62", "1.6000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"CG2R62", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "NA T"}, {"CG2R62", "CG2R62", "CG2R63", "NG2R67", "1.8000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 CG2R62 CG2R63 NG2R61, YTHY; isg"}, {"CG2R62", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "NA bases"}, {"CG2R62", "CG2R62", "CG2R63", "OG3R60", "0.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone; from CG2R61 CG2R61 CG2R61 SG311, FETZ; isg"}, {"CG2R67", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R63 NG2R61, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R63 OG2D4, penalty= 0.5"}, {"CG331", "CG2R62", "CG2R63", "NG2R61", "5.6000", "2", "180.00", "NA T"}, {"CG331", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "CG2R63", "CG2R62", "0.5000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"HGR62", "CG2R62", "CG2R63", "NG2R61", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "CG2R63", "NG2R67", "0.8000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R61 CG2R61 CG2R61 HGR61 , YTS2; isg"}, {"HGR62", "CG2R62", "CG2R63", "OG2D4", "6.0000", "2", "180.00", "NA U"}, {"HGR62", "CG2R62", "CG2R63", "OG3R60", "2.4000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR62", "CG2R62", "CG2R63", "SG2D1", "2.4000", "2", "180.00", "URA4S, 3,4-dihydro-4-thioxo-2(1H)-pyrimidinone; from SG311 CG2R61 CG2R61 HGR61; isg"}, {"CG2R62", "CG2R62", "CG2R64", "NG2R62", "0.6000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "CG2R64", "NG2S3", "2.0000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "CG2R64", "NG301", "3.1000", "2", "180.00", "TMC, from 4MC, yxu"}, {"HGR62", "CG2R62", "CG2R64", "NG2R62", "3.4000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "CG2R64", "NG2S3", "2.0000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "CG2R64", "NG301", "0.0000", "2", "180.00", "TMC, from 4MC, yxu"}, {"CG2R62", "CG2R62", "CG2R67", "CG2R62", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 6"}, {"CG2R62", "CG2R62", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 5.5"}, {"CG2R63", "CG2R62", "CG2R67", "CG2R62", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 8.5"}, {"CG2R63", "CG2R62", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 8"}, {"NG2R61", "CG2R62", "CG2R67", "CG2R62", "1.2000", "2", "180.00", "pyo3b , from NG2R60 CG2R61 CG2R67 CG2R61, penalty= 27.5"}, {"NG2R61", "CG2R62", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "pyo3b , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 27"}, {"NG2R62", "CG2R62", "CG2R67", "CG2R62", "1.2000", "2", "180.00", "PYRF , from NG2R60 CG2R61 CG2R67 CG2R61, penalty= 6.5"}, {"NG2R62", "CG2R62", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "PYRF , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 6"}, {"HGR62", "CG2R62", "CG2R67", "CG2R62", "4.2000", "2", "180.00", "pyo2b , from HGR62 CG2R61 CG2R67 CG2R61, penalty= 5.5"}, {"HGR62", "CG2R62", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "pyo2b , from HGR62 CG2R61 CG2R67 CG2R67, penalty= 5"}, {"HGR63", "CG2R62", "CG2R67", "CG2R62", "4.2000", "2", "180.00", "PIUB , from HGR62 CG2R61 CG2R67 CG2R61, penalty= 6.5"}, {"HGR63", "CG2R62", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "PIUB , from HGR62 CG2R61 CG2R67 CG2R67, penalty= 6"}, {"CG2R62", "CG2R62", "CG331", "HGA3", "0.4600", "3", "0.00", "NA T"}, {"CG2R63", "CG2R62", "CG331", "HGA3", "0.4600", "3", "0.00", "NA T"}, {"CG2R61", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R62", "CG2R62", "NG2R61", "CG2R62", "4.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"CG2R62", "CG2R62", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2R62", "CG2R62", "NG2R61", "CG3C53", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2R62", "CG2R62", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA bases"}, {"CG2R62", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "NA base"}, {"CG2R62", "CG2R62", "NG2R61", "HGP2", "1.0000", "2", "180.00", "NA base"}, {"CG2R67", "CG2R62", "NG2R61", "CG2R62", "4.0000", "2", "180.00", "PYRF , from CG2R62 CG2R62 NG2R61 CG2R62, penalty= 1.5"}, {"CG2R67", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 NG2R61 CG2R63, penalty= 0.5"}, {"CG2R67", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 NG2R61 HGP1, penalty= 0.5"}, {"CG2R67", "CG2R62", "NG2R61", "HGP2", "1.0000", "2", "180.00", "PYRF , from CG2R62 CG2R62 NG2R61 HGP2, penalty= 1.5"}, {"NG2R62", "CG2R62", "NG2R61", "CG2R62", "0.1500", "2", "180.00", "PYRH ,0.2000 2 180.00 ! from NG2R62 CG2R64 NG2R61 CG2R63, penalty= 17"}, {"NG2R62", "CG2R62", "NG2R61", "HGP2", "3.2000", "2", "180.00", "PYRH ,3.6000 2 180.00 ! from NG2R62 CG2R64 NG2R61 HGP1, penalty= 18"}, {"HGR62", "CG2R62", "NG2R61", "CG2R62", "5.6000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"HGR62", "CG2R62", "NG2R61", "CG2R63", "4.6000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "NG2R61", "CG331", "0.3000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"HGR62", "CG2R62", "NG2R61", "CG3C51", "0.3000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR62", "CG2R62", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "NG2R61", "HGP1", "1.2000", "2", "180.00", "adjusted for 2PYO,URAC,4PYO, kevo,isg,xxwy 8/13"}, {"HGR63", "CG2R62", "NG2R61", "CG2R62", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"HGR63", "CG2R62", "NG2R61", "CG3C53", "1.0000", "2", "180.00", "NA base"}, {"HGR63", "CG2R62", "NG2R61", "HGP2", "3.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R62", "NG2R62", "CG2R62", "2.7000", "2", "180.00", "PYRH ,0.5000 2 180.00 ! from CG2R62 CG2R62 NG2R62 CG2R64, penalty= 2.5"}, {"CG2R62", "CG2R62", "NG2R62", "CG2R64", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R67", "CG2R62", "NG2R62", "CG2R62", "2.0000", "2", "180.00", "PYRF , from CG2R61 CG2R62 NG2R62 CG2R64, penalty= 3"}, {"NG2R61", "CG2R62", "NG2R62", "CG2R62", "3.0000", "2", "180.00", "PYRH ,4.0000 2 180.00 ! from NG2R61 CG2R64 NG2R62 CG2R62, penalty= 15"}, {"HGR62", "CG2R62", "NG2R62", "CG2R64", "7.3000", "2", "180.00", "43HPY, 4(3H)-pyrimidinone; from HGR62 CG2R61 NG2R62 CG2R64; isg"}, {"HGR63", "CG2R62", "NG2R62", "CG2R62", "7.4000", "2", "180.00", "PYRH ,7.3000 2 180.00 ! from HGR62 CG2R62 NG2R62 CG2R64, penalty= 3.5"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R62", "4.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R62; isg"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R63", "0.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R63, NA; isg"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R67", "4.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R62; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R62", "2.8000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R60 CG2R61 CG2R61 HGR61; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R63", "4.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from HGR62 CG2R62 NG2R61 CG2R63, NA; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R67", "1.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 CG2R62 HGR62; isg"}, {"CG2R61", "CG2R62", "OG3R60", "CG2R63", "0.7600", "2", "0.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "OG3R60", "CG2R63", "0.9400", "2", "0.00", "RIN, coumarin, isg"}, {"NG2R61", "CG2R63", "CG2RC0", "CG2RC0", "0.2000", "2", "180.00", "NA G"}, {"NG2R61", "CG2R63", "CG2RC0", "NG2R50", "2.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "CG2RC0", "CG2RC0", "14.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "NA G"}, {"CG2R61", "CG2R63", "NG2R61", "CG2R63", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R63", "NG2R61", "CG2R64", "1.5000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from CG2R62 CG2R63 NG2R61 CG2R63; isg"}, {"CG2R61", "CG2R63", "NG2R61", "HGP1", "4.8000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R63", "1.5000", "2", "180.00", "NA U"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R64", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R63", "NG2R61", "HGP1", "4.8000", "2", "180.00", "NA T"}, {"CG2RC0", "CG2R63", "NG2R61", "CG2R64", "0.2000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2R63", "NG2R61", "HGP1", "3.6000", "2", "180.00", "NA G"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "NA U"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R63", "3.0000", "2", "180.00", "NA T"}, {"NG2R61", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"NG2R61", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R61", "CG2R63", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA base"}, {"NG2R61", "CG2R63", "NG2R61", "HGP1", "3.3000", "2", "180.00", "NAMODEL cytosine tautomer"}, {"NG2R62", "CG2R63", "NG2R61", "CG2R62", "0.6000", "2", "180.00", "NA C"}, {"NG2R62", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "CYT, BTMC,...; not optimized; yxu"}, {"NG2R62", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R62", "CG2R63", "NG2R61", "CG3RC1", "0.9000", "2", "180.00", "NA bases"}, {"NG2R67", "CG2R63", "NG2R61", "CG2R61", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from NG2R61 CG2R63 NG2R61 CG2R62, NA; isg"}, {"NG2R67", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG2R62, NA; isg"}, {"NG2R67", "CG2R63", "NG2R61", "HGP1", "3.3000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 HGP1, NA; isg"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R62", "1.6000", "2", "180.00", "NA C"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R63", "0.9000", "2", "180.00", "NA bases"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R64", "14.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"OG2D4", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"OG2D4", "CG2R63", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA base"}, {"OG2D4", "CG2R63", "NG2R61", "HGP1", "0.0000", "2", "180.00", "NA G"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R61", "1.6000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R62", "1.6000", "2", "180.00", "YT4S, 2,3-dihydro-2-thioxo-4(1H)-quinazolinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R63", "0.9000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R64", "14.0000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from OG2D4 CG2R63 NG2R61 CG2R64; isg"}, {"SG2D1", "CG2R63", "NG2R61", "HGP1", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R61", "CG2R63", "NG2R62", "CG2R64", "0.6000", "2", "180.00", "NA C"}, {"OG2D4", "CG2R63", "NG2R62", "CG2R64", "1.6000", "2", "180.00", "NA C"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R63", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R62 CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R64", "1.5000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from 43HSPY; isg"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R67", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R62 CG2R63 NG2R67 CG2R67; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R62", "1.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R63 NG2R61 CG2R62, 2PYO; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R63", "1.5000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R62 CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R64", "0.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R62 CG2R63 NG2R61 CG2R64, TC243C; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R67", "1.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R63 NG2R61 CG2R62, 2PYO; isg"}, {"NG2R61", "CG2R63", "NG2R67", "CG2R63", "3.0000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG2R63, NA; isg"}, {"NG2R61", "CG2R63", "NG2R67", "CG2R67", "11.0000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG3C51, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R62", "1.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R63", "0.9000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from OG2D4 CG2R63 NG2R61 CG2R63, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R64", "14.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from OG2D4 CG2R63 NG2R61 CG2R64, TC243C; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R67", "1.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R63", "0.9000", "2", "180.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from CG2R63 NG2R61 CG2R63 SG2D1, YTS2; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R64", "0.9000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from SG2D1 CG2R63 NG2R61 CG2R63, YTS2; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R67", "1.6000", "2", "180.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"CG2R62", "CG2R63", "OG3R60", "CG2R62", "0.6000", "2", "0.00", "RIN, coumarin, isg"}, {"OG2D4", "CG2R63", "OG3R60", "CG2R62", "0.7600", "2", "0.00", "RIN, coumarin, isg"}, {"NG2R62", "CG2R64", "CG2RC0", "CG2RC0", "1.8000", "2", "180.00", "NA A"}, {"NG2R62", "CG2R64", "CG2RC0", "NG2R50", "2.0000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "NA A"}, {"NG301", "CG2R64", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "M6A, yxu"}, {"NG301", "CG2R64", "CG2RC0", "NG2R50", "4.7000", "2", "180.00", "M6A, yxu"}, {"CG2R61", "CG2R64", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"NG2S1", "CG2R64", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "2AMP, 2-Amino pyridine, cacha (verified by kevo)"}, {"NG2R62", "CG2R64", "NG2R61", "CG2R63", "0.2000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2R61", "HGP1", "3.6000", "2", "180.00", "NA G"}, {"NG2S3", "CG2R64", "NG2R61", "CG2R63", "4.0000", "2", "180.00", "NA G"}, {"NG2S3", "CG2R64", "NG2R61", "HGP1", "0.0000", "2", "180.00", "NA G"}, {"SG311", "CG2R64", "NG2R61", "CG2R63", "4.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R61 CG2R63; isg"}, {"SG311", "CG2R64", "NG2R61", "HGP1", "0.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R61 HGP1; isg"}, {"HGR62", "CG2R64", "NG2R61", "CG2R63", "5.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR62", "CG2R64", "NG2R61", "HGP1", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R64", "NG2R62", "CG2R64", "2.0000", "2", "0.00", "PTID, pteridine, erh"}, {"CG2R62", "CG2R64", "NG2R62", "CG2R63", "6.0000", "2", "180.00", "NA C"}, {"CG2RC0", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2R61", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from NG2R61 CG2R64 NG2R62 CG2RC0; isg"}, {"NG2R61", "CG2R64", "NG2R62", "CG2R62", "4.0000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"NG2R61", "CG2R64", "NG2R62", "CG2RC0", "2.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "PYRM, pyrimidine"}, {"NG2R62", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2R62", "CG2R64", "NG2R62", "CG2RC0", "2.0000", "2", "180.00", "NAMODEL guanine tautomer"}, {"NG2R62", "CG2R64", "NG2R62", "NG2R62", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"NG2R67", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from NG2R62 CG2R64 NG2R62 CG2R61, PYRM; isg"}, {"NG2R67", "CG2R64", "NG2R62", "CG2R62", "4.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 NG2R62 CG2R62, TC243C; isg"}, {"NG2S3", "CG2R64", "NG2R62", "CG2R63", "2.0000", "2", "180.00", "NA C"}, {"NG2S3", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "NG2R62", "CG2RC0", "4.0000", "2", "180.00", "NA G"}, {"NG301", "CG2R64", "NG2R62", "CG2R63", "3.1000", "2", "180.00", "TMC, from 4MC, yxu"}, {"NG301", "CG2R64", "NG2R62", "CG2R64", "3.8000", "2", "180.00", "M6A, yxu"}, {"SG311", "CG2R64", "NG2R62", "CG2R61", "10.2000", "2", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine; from NG2S1 CG2R64 NG2R60 CG2R61; isg"}, {"SG311", "CG2R64", "NG2R62", "CG2R62", "2.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R62 CG2R63; isg"}, {"HGR62", "CG2R64", "NG2R62", "CG2R61", "7.3000", "2", "180.00", "PYRM, pyrimidine"}, {"HGR62", "CG2R64", "NG2R62", "CG2R62", "7.3000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR62", "CG2R64", "NG2R62", "CG2R64", "8.5000", "2", "180.00", "NA A"}, {"HGR62", "CG2R64", "NG2R62", "CG2RC0", "8.5000", "2", "180.00", "NA A"}, {"HGR62", "CG2R64", "NG2R62", "NG2R62", "6.0000", "2", "180.00", "TRIB, triazine124"}, {"NG2R62", "CG2R64", "NG2R67", "CG2R63", "0.2000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"NG2R62", "CG2R64", "NG2R67", "CG2R67", "0.2000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"HGR62", "CG2R64", "NG2R67", "CG2R63", "5.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from HGR62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"HGR62", "CG2R64", "NG2R67", "CG2R67", "1.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from HGR62 CG2R62 NG2R67 CG2R67, TC243C; isg"}, {"CG2R61", "CG2R64", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, cacha ! not fitted because cacha's original atom typing didn't allow it ==> re-optimize"}, {"CG2R61", "CG2R64", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, cacha ! this one does not require re-optimization"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "1.5000", "1", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "2.6000", "2", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "0.1800", "3", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"CG2R62", "CG2R64", "NG2S3", "HGP4", "2.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG2RC0", "CG2R64", "NG2S3", "HGP4", "0.5000", "2", "180.00", "NA A"}, {"NG2R61", "CG2R64", "NG2S3", "HGP4", "1.2000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2S3", "HGP4", "1.0000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R64", "NG301", "CG331", "1.9800", "2", "180.00", "TMC, yxu, pyramid can be increased by adding term of 4-fold and 0.0-phase"}, {"CG2RC0", "CG2R64", "NG301", "CG331", "2.8500", "2", "180.00", "M6A, yxu"}, {"CG2RC0", "CG2R64", "NG301", "CG331", "0.9000", "4", "0.00", "M6A, yxu, pyramid can be increased by increasing this term"}, {"NG2R62", "CG2R64", "NG301", "CG331", "1.9800", "2", "180.00", "TMC, yxu"}, {"NG2R61", "CG2R64", "SG311", "CG331", "1.4500", "1", "0.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone, isg"}, {"NG2R62", "CG2R64", "SG311", "CG331", "2.1200", "2", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine, isg"}, {"NG2R62", "CG2R64", "SG311", "CG331", "0.1900", "4", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine, isg"}, {"CG2R61", "CG2R66", "CG2R67", "CG2R61", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 5"}, {"CG2R61", "CG2R66", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 5"}, {"FGR1", "CG2R66", "CG2R67", "CG2R61", "4.5000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R66 FGR1, penalty= 30"}, {"FGR1", "CG2R66", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "PYO2F , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 89"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R61", "0.8900", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R62", "0.4600", "2", "180.00", "pyo2b ,tune the middle 180 from CG2R61 CG2R67 CG2R67 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R62", "0.2300", "4", "0.00", "low will down the two peaks;phs 4, 0 pyo2b , from CG2R61 CG2R67 CG2R67 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R67", "CG2R67", "CG2RC0", "2.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.3750", "1", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.9400", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.1900", "3", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.1600", "4", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.4300", "2", "180.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.1200", "4", "0.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.0200", "6", "180.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2RC0", "CG2R67", "CG2R67", "CG2RC0", "1.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.3750", "1", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.9400", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.1900", "3", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.1600", "4", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2RC0", "CG2R61", "0.0500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "CG2RC0", "CG3C52", "6.7500", "2", "180.00", "FLRN, Fluorene, erh"}, {"CG2R61", "CG2R67", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "CG2R61", "3.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "CG3C52", "5.0000", "3", "180.00", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "NG2R51", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 NG2R60 CG2R61, kevo"}, {"CG2R67", "CG2R67", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.3700", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.2700", "4", "0.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.0200", "6", "0.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R63", "1.4500", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from 1PH4PO; isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R63", "0.1400", "4", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from 1PH4PO; isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R64", "0.3700", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R64", "0.2600", "4", "0.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone, isg"}, {"CG2R71", "CG2R71", "CG2R71", "CG2R71", "1.6000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "CG2RC7", "1.6000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "HGR71", "3.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2RC7", "CG2R71", "CG2R71", "HGR71", "4.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2R71", "HGR71", "2.4000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "CG2R51", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "CG2RC7", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2RC7", "CG2R51", "3.1000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2RC7", "CG2RC7", "3.1000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG25C1", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "CG2RC0", "NG2R51", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "NG2R51", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG2R51", "0.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "INDO/TRP (Kenno: 4.0 --> 1.5)"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG3C52", "5.0000", "2", "180.00", "INDE, indene, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "NG2R51", "6.5000", "2", "180.00", "INDO/TRP"}, {"CG2R51", "CG2RC0", "CG2RC0", "OG2R50", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "SG2R50", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "NG2R51", "12.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2RC0", "CG2RC0", "CG3C52", "6.5000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R50", "1.5000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R51", "1.5000", "2", "180.00", "INDO/TRP (Kenno: 4.0 --> 1.5)"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R62", "0.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "OG3C51", "4.0000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2RC0", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R63", "CG2RC0", "CG2RC0", "NG2R51", "10.0000", "2", "180.00", "NA G"}, {"CG2R63", "CG2RC0", "CG2RC0", "NG2R62", "2.0000", "2", "180.00", "NA G"}, {"CG2R64", "CG2RC0", "CG2RC0", "NG2R51", "7.0000", "2", "180.00", "NA A"}, {"CG2R64", "CG2RC0", "CG2RC0", "NG2R62", "2.0000", "2", "180.00", "NA A"}, {"CG3C52", "CG2RC0", "CG2RC0", "NG2R50", "6.5000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG3C52", "CG2RC0", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"NG2R50", "CG2RC0", "CG2RC0", "NG2R51", "10.0000", "2", "180.00", "NA G"}, {"NG2R50", "CG2RC0", "CG2RC0", "NG2R62", "7.0000", "2", "180.00", "NA A"}, {"NG2R50", "CG2RC0", "CG2RC0", "SG2R50", "4.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"NG2R51", "CG2RC0", "CG2RC0", "NG2R62", "8.5000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"OG3C51", "CG2RC0", "CG2RC0", "OG3C51", "7.7000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2R51", "0.9000", "3", "0.00", "INDE, indene, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2R52", "3.5000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2RC0", "0.9000", "3", "0.00", "FLRN, Fluorene, erh"}, {"CG2R61", "CG2RC0", "CG3C52", "CG3C52", "3.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R67", "CG2RC0", "CG3C52", "CG2RC0", "0.7500", "3", "180.00", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "0.00", "FLRN, Fluorene, erh"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG2R51", "1.0000", "3", "180.00", "INDE, indene, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG2R52", "2.0000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG3C52", "1.0300", "3", "180.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "CG2R52", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "CG2R53", "15.0000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R63", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "NA G"}, {"CG2R64", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "NA A"}, {"CG2RC0", "CG2RC0", "NG2R50", "CG2R52", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R50", "CG2R53", "6.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2R51", "1.5000", "2", "180.00", "NA bases"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2R53", "19.0000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2RC0", "0.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2RC0", "NG2R51", "NG2R50", "3.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "HGP1", "0.2000", "2", "180.00", "INDO/TRP"}, {"CG2R67", "CG2RC0", "NG2R51", "CG2RC0", "0.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2RC0", "NG2R51", "HGP1", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG2R51", "1.5000", "2", "180.00", "NA bases"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG2R53", "6.0000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG3RC1", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2RC0", "CG2RC0", "NG2R51", "NG2R50", "6.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R51", "HGP1", "0.8500", "2", "180.00", "INDO/TRP"}, {"NG2R62", "CG2RC0", "NG2R51", "CG2R53", "2.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2RC0", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"NG2R62", "CG2RC0", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R62", "CG2RC0", "NG2R51", "CG3RC1", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"NG2R62", "CG2RC0", "NG2R51", "HGP1", "1.2000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2RC0", "NG2R62", "CG2R64", "0.2000", "2", "180.00", "NA G"}, {"NG2R50", "CG2RC0", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"NG2R51", "CG2RC0", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "NA G"}, {"CG2R51", "CG2RC0", "NG2RC0", "CG2R51", "8.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2RC0", "NG2RC0", "CG2R61", "1.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG2RC0", "CG2R51", "1.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG2RC0", "CG2R61", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "CG3C52", "4.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "HGP1", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "NG3C51", "CG3C52", "1.9600", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "NG3C51", "HGP1", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2RC0", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "OG3C51", "CG3C52", "0.3000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2RC0", "CG2RC0", "OG3C51", "CG3C52", "0.3000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi and kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "CG2R53", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "CG2R53", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "CG2R51", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "CG2R71", "0.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "CG2RC7", "CG2R71", "0.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2D1", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CHL1, Cholesterol from X CTL1 CTL1 X; also consistent with RETINOL TMCH"}, {"CG2D1", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG311", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG2D1", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "CHL1, Cholesterol from X CTL1 CTL2 X; also consistent with RETINOL TMCH"}, {"CG2D1", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2DC1", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG301", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG311", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG311", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "CHOLEST cholesterol reset to default by kevo"}, {"CG331", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG301", "CG321", "CG331", "0.4400", "1", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "CG331", "0.0200", "2", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "CG331", "0.7300", "3", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "RETINOL TMCH kevo: reset to default"}, {"OG301", "CG301", "CG321", "CG331", "0.8000", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"OG301", "CG301", "CG321", "HGA2", "0.1600", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG2D1", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "CHL1, Cholesterol from RETINOL TMCH (X CTL1 CTL3 X seems woefully inaccurate)"}, {"CG2DC1", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG2O3", "CG301", "CG331", "HGA3", "0.2000", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"OG301", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG302", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha reset to default by kevo"}, {"OG311", "CG301", "CG331", "HGA3", "0.1400", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CLGA3", "CG301", "CG331", "HGA3", "0.2700", "3", "0.00", "TCLE"}, {"BRGA3", "CG301", "CG331", "HGA3", "0.2600", "3", "0.00", "TBRE"}, {"CG2O3", "CG301", "OG301", "CG331", "0.2000", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG321", "CG301", "OG301", "CG331", "1.1500", "1", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG321", "CG301", "OG301", "CG331", "0.2300", "2", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG321", "CG301", "OG301", "CG331", "0.4900", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "OG301", "CG331", "0.4000", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG301", "CG331", "0.4900", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG301", "CG331", "0.5100", "1", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG301", "CG331", "0.6700", "2", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG301", "CG331", "0.2600", "3", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG311", "CG301", "OG301", "CG331", "0.4100", "1", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG311", "CG301", "OG301", "CG331", "0.8900", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG311", "CG301", "OG301", "CG331", "0.0500", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG302", "CG2O2", "0.0000", "3", "0.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG2O3", "CG301", "OG311", "HGP1", "0.8200", "3", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "1.1300", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "0.1400", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "0.2400", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.5500", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.1700", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.0700", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"FGA3", "CG302", "CG321", "OG311", "0.2500", "3", "0.00", "TFE, Trifluoroethanol"}, {"FGA3", "CG302", "CG321", "HGA2", "0.1580", "3", "0.00", "TFE, Trifluoroethanol"}, {"FGA3", "CG302", "CG331", "HGA3", "0.1580", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"CG2O1", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "CG331", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG301", "CG311", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "DCA, Deoxycholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG311", "CG3RC1", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG301", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG311", "CG311", "CG321", "0.5000", "4", "180.00", "NA bkb"}, {"CG311", "CG311", "CG311", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG311", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG311", "CG321", "0.5000", "4", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG311", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG311", "NG2S1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG331", "CG311", "CG311", "NG2S1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG3RC1", "CG311", "CG311", "OG311", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG311", "OG311", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG311", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugar"}, {"NG2S1", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"CG331", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "NPROT N-terminal AA - standard parameter collided with A, sugar"}, {"CG2O1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O1", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "SG301", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O2", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "576P, standard param"}, {"CG2O2", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG2O2", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG2O3", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"CG2O3", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O3", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "SG301", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2R61", "CG311", "CG321", "CG2O3", "0.0400", "3", "0.00", "FBIC(R/S), Fatty Binding Inhibitior C, cacha"}, {"CG2R61", "CG311", "CG321", "HGA2", "0.0000", "3", "0.00", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG301", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "DCA, Deoxycholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "CHL1, Cholesterol"}, {"CG311", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "CHL1, Cholesterol reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG314", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"CG321", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG324", "0.2000", "3", "0.00", "G4MP, Gamma-4-Methyl piperidine Glu Acid CDCA Amide, cacha reset to default by kevo"}, {"CG321", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "G4MP, Gamma-4-Methyl piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG311", "CG321", "OG302", "0.2000", "3", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG321", "OG303", "0.2000", "3", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG321", "OG311", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG321", "HGA2", "0.1950", "1", "0.00", "NA, sugar"}, {"CG324", "CG311", "CG321", "CG321", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG324", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MSB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG324", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "FBIC(R/S), Fatty Binding Inhibitior C"}, {"CG331", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG331", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG314", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "OG302", "0.2000", "3", "0.00", "LIPID methyl acetate"}, {"CG331", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08 reset to default by kevo"}, {"CG3C51", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3RC1", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "CHL1, Cholesterol"}, {"CG3RC1", "CG311", "CG321", "CG311", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG321", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG321", "HGA2", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2R53", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2R53", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2S1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2R61", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG324", "0.2000", "3", "0.00", "G4P, 01OH02"}, {"NG2S1", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "OG302", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "OG303", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "CG311", "2.0000", "3", "180.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG311", "0.4000", "5", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG311", "0.8000", "6", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG321", "0.5000", "1", "180.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG311", "CG321", "CG321", "0.7000", "2", "0.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG311", "CG321", "CG321", "0.4000", "3", "0.00", "NA abasic nucleoside"}, {"OG311", "CG311", "CG321", "CG321", "0.4000", "5", "0.00", "NA abasic nucleoside"}, {"OG311", "CG311", "CG321", "CG331", "0.1400", "3", "0.00", "2BOH, 2-butanol, kevo for gsk/ibm"}, {"OG311", "CG311", "CG321", "OG303", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "HGA2", "0.1950", "3", "180.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "576P, standard param"}, {"HGA1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HGA1", "CG311", "CG321", "CG311", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG311", "CG321", "CG321", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"HGA1", "CG311", "CG321", "CG324", "0.1950", "3", "0.00", "G4MP, 01OH03, cacha"}, {"HGA1", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "G4MP, 01OH03, cacha"}, {"HGA1", "CG311", "CG321", "OG302", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "OG303", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "OG311", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "SG311", "0.1950", "3", "0.00", "PROTNA sahc"}, {"HGA1", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"NG2S1", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"NG2S1", "CG311", "CG324", "HGA2", "0.2000", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"OG311", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"OG311", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA1", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA1", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"HGA1", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG2O1", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2R61", "CG311", "CG331", "HGA3", "0.0400", "3", "0.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG311", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "PROTNA alkanes phospho-ser/thr"}, {"CG3C51", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"NG2S1", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG301", "CG311", "CG331", "HGA3", "0.1600", "3", "0.00", "all34_ethers_1a"}, {"OG302", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "LIPID methyl acetate"}, {"OG303", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "PROTNA phospho-ser/thr phospho-ser/thr"}, {"OG311", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CLGA1", "CG311", "CG331", "HGA3", "0.2500", "3", "0.00", "DCLE"}, {"BRGA2", "CG311", "CG331", "HGA3", "0.2600", "3", "0.00", "DBRE"}, {"HGA1", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG3C51", "CG3C52", "0.5000", "4", "180.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3C51", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.2500", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.2500", "2", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.4500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3RC1", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "HGA1", "0.1950", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG311", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA1", "CG311", "CG3C51", "CG3RC1", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG311", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CG311", "CG311", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG3RC1", "CG331", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3C52", "0.5000", "4", "180.00", "DCA, Deoxycholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG311", "CG3RC1", "CG331", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"OG311", "CG311", "CG3RC1", "CG3C51", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"OG311", "CG311", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG311", "CG3RC1", "CG331", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3C52", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG2O2", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "180.00", "drug design project, xxwy"}, {"CG2O3", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "180.00", "drug design project, xxwy"}, {"CG321", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"HGA1", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"CG2O1", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O1", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O2", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 5/02/91, acetic Acid pure solvent"}, {"CG2O3", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O3", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG311", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG311", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG321", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG324", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG324", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG331", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG331", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG311", "NG2S1", "CG2O1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O3", "CG311", "OG301", "CG331", "0.2000", "3", "0.00", "og/sng thp CG321C CG321C OG3C6M CG321C"}, {"CG331", "CG311", "OG301", "CG331", "0.4000", "1", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"CG331", "CG311", "OG301", "CG331", "0.4900", "3", "0.00", "CC33A CC32A OC30A CC33A og/gk (not affected by mistake)"}, {"HGA1", "CG311", "OG301", "CG331", "0.2840", "3", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"CG321", "CG311", "OG302", "CG2O2", "0.7000", "1", "180.00", "LIPID ethyl acetate, 12/92"}, {"CG331", "CG311", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID methyl acetate"}, {"HGA1", "CG311", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG311", "OG303", "PG2", "0.4000", "1", "180.00", "IP_2 phospho-ser/thr"}, {"CG331", "CG311", "OG303", "PG2", "0.3000", "2", "0.00", "IP_2 phospho-ser/thr"}, {"CG331", "CG311", "OG303", "PG2", "0.1000", "3", "0.00", "IP_2 phospho-ser/thr"}, {"HGA1", "CG311", "OG303", "PG2", "0.0000", "3", "0.00", "IP_2 phospho-ser/thr"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.3500", "1", "0.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.3700", "2", "0.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.0100", "3", "180.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol with compensation for HCA1 CC311 OC311M HCP1 0.18 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-evaluate?"}, {"CG311", "CG311", "OG311", "HGP1", "1.3300", "1", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG311", "CG311", "OG311", "HGP1", "0.1800", "2", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG311", "CG311", "OG311", "HGP1", "0.4600", "3", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93 ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"CG321", "CG311", "OG311", "HGP1", "0.3000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "OG311", "HGP1", "0.3000", "3", "0.00", "CHOLEST cholesterol"}, {"CG324", "CG311", "OG311", "HGP1", "0.5000", "1", "0.00", "FLAVOP PIP3"}, {"CG324", "CG311", "OG311", "HGP1", "0.7000", "2", "0.00", "FLAVOP PIP3"}, {"CG331", "CG311", "OG311", "HGP1", "1.3300", "1", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG331", "CG311", "OG311", "HGP1", "0.1800", "2", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG331", "CG311", "OG311", "HGP1", "0.4600", "3", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93 ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"CG3RC1", "CG311", "OG311", "HGP1", "1.5000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "OG311", "HGP1", "0.3000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "OG311", "HGP1", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG312", "CG311", "OG311", "HGP1", "0.2800", "3", "0.00", "PROT EMB 11/21/89 methanol vib fit ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"HGA1", "CG311", "OG311", "HGP1", "0.0000", "3", "0.00", "NA backbone. PRO2 not properly optimized in new carbohydrate FF ==> unmodified."}, {"FGA2", "CG312", "CG331", "HGA3", "0.1780", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA7", "CG312", "CG331", "HGA3", "0.1780", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"CG2R61", "CG312", "PG1", "OG2P1", "0.0000", "3", "0.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG312", "PG1", "OG311", "0.1000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG312", "PG1", "OG311", "0.4000", "3", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"FGA2", "CG312", "PG1", "OG2P1", "0.0000", "3", "0.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"FGA2", "CG312", "PG1", "OG311", "0.1000", "3", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG312", "PG2", "OG2P1", "0.0000", "3", "0.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"FGA2", "CG312", "PG2", "OG2P1", "0.0000", "3", "0.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2O1", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O1", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "SG301", "0.2000", "3", "0.00", "deleteme DELETEME (we want to use wildcarting)"}, {"CG2O1", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O1", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O3", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "3MRB,Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "3MRB,Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha reset to default by kevo"}, {"NG3P2", "CG314", "CG321", "CG321", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P2", "CG314", "CG321", "NG2S1", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P2", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P3", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2R61", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"NG3P3", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HGA1", "CG314", "CG321", "CG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG314", "CG321", "CG321", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"HGA1", "CG314", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "CG321", "OG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG314", "CG321", "SG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with PROTNA sahc"}, {"HGA1", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2O1", "CG314", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG314", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"HGA1", "CG314", "CG331", "HGA3", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG321", "CG314", "NG3P2", "CG324", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "NG3P2", "HGP2", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "NG3P2", "CG324", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "NG3P2", "HGP2", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG2O1", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O3", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG311", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG321", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG331", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"HGA1", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG2D1", "CG321", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG321", "CG321", "CG321", "0.1400", "1", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG321", "0.1700", "2", "0.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG321", "0.0500", "3", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.1400", "1", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.1700", "2", "0.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.0500", "3", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2DC1", "CG321", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG321", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2O1", "CG321", "CG321", "CG2O1", "0.2000", "3", "0.00", "PMHA, hydrazone-containing model compound: PROT alkane update, adm jr., 3/2/92, sz"}, {"CG2O1", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG321", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O2", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "GMGA, cacha"}, {"CG2O2", "CG321", "CG321", "CG321", "0.2100", "1", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.3900", "2", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.3500", "3", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.1100", "4", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.0900", "6", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.2100", "1", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.3900", "2", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.3500", "3", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.1100", "4", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.0900", "6", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "deleteme DELETEME (we want to use wildcarting)"}, {"CG2O3", "CG321", "CG321", "CG2R61", "0.0400", "3", "0.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2O3", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG321", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O3", "CG321", "CG321", "CG321", "0.06450", "2", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.14975", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.09458", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.11251", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O5", "CG321", "CG321", "CG321", "0.2100", "1", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.3900", "2", "0.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.3500", "3", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.1100", "4", "0.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.0900", "6", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "CHON, cyclohexanone; from CG2O2 CG321 CG321 HGA2; yapol"}, {"CG2R61", "CG321", "CG321", "CG321", "0.0400", "3", "0.00", "PROT ethylbenzene"}, {"CG2R61", "CG321", "CG321", "NG2S1", "0.1900", "3", "0.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"CG2R61", "CG321", "CG321", "HGA2", "0.0400", "3", "0.00", "PROT ethylbenzene"}, {"CG301", "CG321", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG321", "CG321", "CG321", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG301", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "CG321", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "CG321", "0.5000", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG311", "CG321", "CG321", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"CG314", "CG321", "CG321", "CG321", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG314", "CG321", "CG321", "CG321", "0.5000", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG314", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with FLAVOP PIP1,2,3"}, {"CG314", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"CG321", "CG321", "CG321", "CG321", "0.06450", "2", "0.00", "LIPID alkane, 4/04, jbk (Jeff Klauda)"}, {"CG321", "CG321", "CG321", "CG321", "0.14975", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG321", "0.09458", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG321", "0.11251", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG321", "CG331", "0.15051", "2", "0.00", "LIPID alkane, 4/04, jbk (Jeff Klauda)"}, {"CG321", "CG321", "CG321", "CG331", "0.08133", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG331", "0.10824", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG331", "0.20391", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "CG321", "NG2D1", "0.7900", "1", "180.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.2000", "2", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.1200", "3", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.1500", "4", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.0500", "6", "180.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2S1", "0.2000", "3", "0.00", "ALBE, Alpha Lysine Benzyl Ester CDCA Amide, cacha"}, {"CG321", "CG321", "CG321", "OG301", "0.1600", "1", "180.00", "methylpropylether, 2/12/05, ATM"}, {"CG321", "CG321", "CG321", "OG301", "0.3900", "2", "0.00", "methylpropylether"}, {"CG321", "CG321", "CG321", "OG302", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG303", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG3C61", "0.1900", "1", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "1.0000", "2", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "0.6000", "3", "0.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "0.0800", "4", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "THPS, thiopyran"}, {"CG321", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"CG324", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG321", "CG331", "0.03819", "2", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG331", "CG321", "CG321", "CG331", "0.03178", "6", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG331", "CG321", "CG321", "NG2D1", "0.7900", "1", "180.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.2000", "2", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.1200", "3", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.1500", "4", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.0500", "6", "180.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "OG301", "0.1600", "1", "180.00", "methylpropylether, 2/12/05, ATM"}, {"CG331", "CG321", "CG321", "OG301", "0.3900", "2", "0.00", "methylpropylether"}, {"CG331", "CG321", "CG321", "OG311", "0.1950", "3", "0.00", "PROH, n-propanol, kevo for gsk/ibm"}, {"CG331", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG331", "CG321", "CG321", "SG3O1", "0.9400", "1", "180.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "SG3O1", "0.3800", "2", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "SG3O1", "0.1100", "3", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "HGA2", "0.1800", "3", "0.00", "LIPID alkane"}, {"CG3RC1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"NG2D1", "CG321", "CG321", "HGA2", "0.2000", "3", "0.00", "EEPI, from NG2S1 CG321 CG321 HGA2, fylin"}, {"NG2S1", "CG321", "CG321", "SG3O1", "0.9500", "1", "180.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "SG3O1", "1.3300", "2", "0.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "SG3O1", "0.0800", "3", "180.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "TCA, Taurocholic Acid, cacha, 03/06 OK"}, {"NG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "K2Cn, cgenff_compromise, kevo"}, {"OG301", "CG321", "CG321", "OG301", "0.2500", "1", "180.00", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"OG301", "CG321", "CG321", "OG301", "1.2400", "2", "0.00", "1,2 dimethoxyethane"}, {"OG301", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"OG302", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG321", "OG303", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG3C61", "CG321", "CG321", "OG3C61", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"OG3C61", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"SG311", "CG321", "CG321", "SG311", "0.1000", "3", "0.00", "DITH, dithiane"}, {"SG311", "CG321", "CG321", "HGA2", "0.0100", "3", "0.00", "PROT DTN 8/24/90"}, {"SG3O1", "CG321", "CG321", "HGA2", "0.0100", "1", "0.00", "PSNA, propyl sulfonate, xhe"}, {"HGA2", "CG321", "CG321", "HGA2", "0.2200", "3", "0.00", "LIPID alkanes"}, {"CG311", "CG321", "CG324", "NG3P1", "1.0000", "3", "0.00", "BPAB, Gamma N-benzyl piperidine alpha benzyl CDCA amide, cacha ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG311", "CG321", "CG324", "NG3P2", "1.0000", "3", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG324", "NG2P1", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "NG3P1", "1.0000", "3", "0.00", "FLAVOP PIP1,2,3 ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG321", "CG321", "CG324", "NG3P2", "1.0000", "3", "0.00", "PIP, piperidine ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG321", "CG321", "CG324", "NG3P3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG324", "NG2O1", "0.8773", "1", "180.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "NG2O1", "0.2382", "2", "0.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "NG2O1", "0.1465", "3", "180.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "NIPR, nitropropane; from CG321 CG321 CG324 HGA2; abar"}, {"OG302", "CG321", "CG324", "NG3P0", "3.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG302", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG302", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG324", "NG3P0", "3.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG303", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG303", "CG321", "CG324", "NG3P3", "0.7000", "1", "180.00", "LIPID ethanolamine"}, {"OG303", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG324", "NG3P0", "4.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG311", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG311", "CG321", "CG324", "NG3P3", "0.7000", "1", "180.00", "LIPID ethanolamine"}, {"OG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG3C61", "CG321", "CG324", "NG3P2", "0.8000", "3", "0.00", "MORP, morpholine"}, {"OG3C61", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "MORP, morpholine"}, {"SG311", "CG321", "CG324", "NG3P2", "0.8000", "3", "0.00", "TMOR, thiomorpholine"}, {"SG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "TMOR, thiomorpholine"}, {"HGA2", "CG321", "CG324", "NG2O1", "0.1950", "3", "0.00", "NIPR, nitropropane; from NG2S1 CG321 CG321 HGA2; abar"}, {"HGA2", "CG321", "CG324", "NG2P1", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "NG3P0", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG321", "CG324", "NG3P2", "0.1950", "3", "0.00", "PIP, piperidine"}, {"HGA2", "CG321", "CG324", "NG3P3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O1", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O2", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O3", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O4", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PALD, propionaldehyde from PROT rotation barrier in Ethane (SF) unmodified"}, {"CG2O5", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "Methyl group torsion, kevo"}, {"CG2R51", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2R61", "CG321", "CG331", "HGA3", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG301", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG321", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG324", "CG321", "CG331", "HGA3", "0.2000", "3", "0.00", "NIPR, nitropropane; from CG314 CG311 CG331 HGA3; abar"}, {"CG331", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG3C31", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "1BOX, 1-butene oxide; default from CG321 CG321 CG331 HGA3; sc"}, {"NG2D1", "CG321", "CG331", "HGA3", "0.1500", "3", "0.00", "EICY, ethyl isocyanate, xxwy"}, {"NG2R51", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2S1 CG321 CG331 HGA3, kevo"}, {"NG2S1", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "DECB, diethyl carbamate, cacha"}, {"NG2S3", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "NESM, N-ethyl-sulfamate; from NG2S1 CG321 CG331 HGA3; my"}, {"NG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PEI polymers, default parameter, kevo"}, {"OG301", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"OG302", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"OG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"OG312", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"SG301", "CG321", "CG331", "HGA3", "0.0100", "3", "0.00", "PROT DTN 8/24/90"}, {"SG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"SG3O1", "CG321", "CG331", "HGA3", "0.1100", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"SG3O2", "CG321", "CG331", "HGA3", "0.0770", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"SG3O3", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "MESO, methylethylsulfoxide; default parameter; kevo"}, {"CLGA1", "CG321", "CG331", "HGA3", "0.3000", "3", "0.00", "CLET"}, {"BRGA1", "CG321", "CG331", "HGA3", "0.3000", "3", "0.00", "BRET"}, {"HGA2", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG331", "CG321", "CG3C31", "CG3C31", "0.0000", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "OG3C31", "0.4700", "1", "180.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "OG3C31", "0.1300", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "HGA1", "0.1800", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "HGA1", "1.0700", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "CG3C31", "0.0100", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "CG3C31", "0.0200", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "OG3C31", "0.5000", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "OG3C31", "0.2700", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "HGA1", "0.0000", "3", "0.00", "1BOX, 1-butene oxide; kept at 0; sc"}, {"OG301", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "3POMP, 3-phenoxymethylpyrrolidine; from NA, sugar; kevo"}, {"OG301", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from NA, sugar; kevo"}, {"OG303", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"SG311", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "PROTNA sahc"}, {"HGA2", "CG321", "CG3C51", "CG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3C51", "OG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CG321", "CG321", "CG3RC1", "CG331", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3C51", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3C52", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3C31", "0.1500", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3C51", "0.5000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG331", "0.1900", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG321", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG3C51", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG3C52", "0.1950", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG321", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6100", "1", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6200", "2", "180.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.2500", "3", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6000", "4", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.2500", "6", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1900", "1", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.3400", "2", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.5600", "3", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1200", "4", "0.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1200", "6", "180.00", "DH3T, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1900", "1", "0.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.3400", "2", "180.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.5600", "3", "180.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1200", "4", "0.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1200", "6", "180.00", "MT2A, fylin"}, {"HGA2", "CG321", "NG2D1", "CG2D1", "0.1000", "3", "0.00", "EEPI, from HGA3 CG331 NG2D1 CG2D1, fylin"}, {"HGA2", "CG321", "NG2D1", "CG2N2", "0.1100", "3", "180.00", "MT2A, from HGA3 CG331 NG2D1 CG2N1, fylin"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.3850", "1", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.4200", "2", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.0800", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.0550", "4", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.3850", "1", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.4200", "2", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.0800", "3", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.0550", "4", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"HGA2", "CG321", "NG2R51", "CG2R51", "0.0000", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGA3 CG331 NG2R51 CG2R53, kevo"}, {"HGA2", "CG321", "NG2R51", "NG2R50", "0.0000", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGA3 CG331 NG2R51 CG2R53, kevo"}, {"CG2O1", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O1", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CG2O2", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 5/02/91, acetic Acid pure solvent"}, {"CG2O3", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CG2O3", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.0150", "1", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.2980", "2", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.0760", "3", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.6190", "4", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.1480", "6", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "NZAD, N-benzylacetamide; from CG2O2 CG321 NG2S1 HGP1; isg"}, {"CG311", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha"}, {"CG311", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha"}, {"CG314", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG314", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "slack parameter picked up by 3CPD ==> re-optimize?"}, {"CG321", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT from HGP1 NG2S1 CG321 CT3, for lactams, adm jr."}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.3500", "1", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.7500", "2", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.1500", "4", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG321", "NG2S1", "CG2O1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA2", "CG321", "NG2S1", "CG2O1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA2", "CG321", "NG2S1", "CG2O6", "0.0000", "3", "0.00", "DECB, diethyl carbamate, from DMCB, kevo"}, {"HGA2", "CG321", "NG2S1", "HGP1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.7550", "1", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.8660", "2", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.6280", "3", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.1510", "4", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.1130", "6", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.7410", "1", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.3210", "2", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.2350", "3", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"HGA2", "CG321", "NG2S3", "SG3O1", "0.1500", "3", "0.00", "NESM, N-ethyl-sulfamate; from HGA3 CG331 NG2S3 PG1; my"}, {"HGA2", "CG321", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NESM, N-ethyl-sulfamate; from HGA3 CG331 NG2S3 HGP1; my"}, {"CG321", "CG321", "NG311", "HGPAM1", "0.3000", "3", "0.00", "K2Cn, cgenff_compromise, kevo"}, {"CG331", "CG321", "NG311", "SG3O2", "0.1000", "1", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "SG3O2", "0.7000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "HGP1", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "2.5000", "1", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "1.5000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "0.5000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "1.4000", "1", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "0.5000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGP1", "0.1000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGPAM1", "1.7000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGPAM1", "0.3000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"HGA2", "CG321", "NG311", "CG2R61", "0.0000", "3", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"HGA2", "CG321", "NG311", "CG321", "0.0000", "3", "0.00", "5UHG, cgenff_compromise, kevo"}, {"HGA2", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "NG311", "HGP1", "0.0500", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "NG311", "HGPAM1", "0.0500", "3", "0.00", "PEI0, OBTZ, AOBT, kevo and xxwy"}, {"CG2O2", "CG321", "NG321", "HGPAM2", "0.1600", "3", "0.00", "GLYN, Glycine neutral from AMINE aliphatic amines"}, {"HGA2", "CG321", "NG321", "HGPAM2", "0.0100", "3", "0.00", "amines"}, {"CG321", "CG321", "OG301", "CG2R61", "0.2400", "1", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG2R61", "0.2900", "2", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG2R61", "0.0200", "3", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG321", "0.5700", "1", "0.00", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"CG321", "CG321", "OG301", "CG321", "0.2900", "2", "0.00", "1,2 dimethoxyethane"}, {"CG321", "CG321", "OG301", "CG321", "0.4300", "3", "0.00", "1,2 dimethoxyethane"}, {"CG321", "CG321", "OG301", "CG331", "0.5700", "1", "0.00", "1,2 dimethoxyethane (DME), 2/12/05, ATM"}, {"CG321", "CG321", "OG301", "CG331", "0.2900", "2", "0.00", "1,2 dimethoxyethane (DME)"}, {"CG321", "CG321", "OG301", "CG331", "0.4300", "3", "0.00", "1,2 dimethoxyethane (DME)"}, {"CG331", "CG321", "OG301", "CG2R61", "0.2400", "1", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG2R61", "0.2900", "2", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG2R61", "0.0200", "3", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG321", "0.4000", "1", "0.00", "diethylether, 2/12/05, ATM"}, {"CG331", "CG321", "OG301", "CG321", "0.4900", "3", "0.00", "diethylether"}, {"CG331", "CG321", "OG301", "CG331", "0.4000", "1", "0.00", "diethylether, 2/12/05, ATM!from CCT3-CCT2-OCE-CG321 MEE viv"}, {"CG331", "CG321", "OG301", "CG331", "0.4900", "3", "0.00", "diethylether !from CCT3-CCT2-OCE-CG321 MEE viv"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.2000", "1", "180.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.1000", "2", "0.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.1000", "3", "180.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"HGA2", "CG321", "OG301", "CG2R61", "0.0950", "3", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"HGA2", "CG321", "OG301", "CG321", "0.2840", "3", "0.00", "diethylether, alex"}, {"HGA2", "CG321", "OG301", "CG331", "0.2840", "3", "0.00", "diethylether, alex"}, {"CG2R61", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE"}, {"CG311", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG321", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG324", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG321", "OG302", "CG2O6", "0.1000", "1", "180.00", "DECB and DECA, diethyl carbamate and carbonate, cacha and xxwy"}, {"CG331", "CG321", "OG302", "CG2O6", "0.6000", "2", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "OG302", "CG2O6", "0.1000", "3", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"HGA2", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"HGA2", "CG321", "OG302", "CG2O6", "0.0000", "3", "0.00", "DECB, diethyl carbamate, from DMCB, kevo"}, {"CG311", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG311", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG311", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG321", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG324", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG324", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG324", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG331", "CG321", "OG303", "PG2", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr"}, {"CG331", "CG321", "OG303", "PG2", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr"}, {"CG331", "CG321", "OG303", "PG2", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.6000", "1", "180.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.6500", "2", "0.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.0500", "3", "0.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"HGA2", "CG321", "OG303", "PG1", "0.0000", "3", "0.00", "NA dmp !Reorganization: PC and others"}, {"HGA2", "CG321", "OG303", "PG2", "0.0000", "3", "0.00", "NA dmp !Reorganization: TH5P and others"}, {"HGA2", "CG321", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG2D1", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2D1", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2D1", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2DC1", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2DC2", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2R61", "CG321", "OG311", "HGP1", "2.1000", "1", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG321", "OG311", "HGP1", "1.4000", "2", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG321", "OG311", "HGP1", "0.7400", "3", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG302", "CG321", "OG311", "HGP1", "0.4000", "1", "0.00", "TFE, Trifluoroethanol"}, {"CG302", "CG321", "OG311", "HGP1", "0.9000", "2", "0.00", "TFE, Trifluoroethanol"}, {"CG302", "CG321", "OG311", "HGP1", "0.3400", "3", "0.00", "TFE, Trifluoroethanol; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG302", "CG321", "OG311", "HGP1", "0.1200", "4", "0.00", "TFE, Trifluoroethanol"}, {"CG311", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG311", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG311", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG324", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG324", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG324", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG331", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG331", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG331", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"HGA2", "CG321", "OG311", "HGP1", "0.1800", "3", "0.00", "og methanol"}, {"CG321", "CG321", "OG3C61", "CG321", "0.5300", "1", "180.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.6800", "2", "0.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.2100", "3", "180.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.1500", "4", "0.00", "DIOX, dioxane"}, {"CG324", "CG321", "OG3C61", "CG321", "0.5000", "3", "0.00", "MORP, morpholine"}, {"OG3C61", "CG321", "OG3C61", "CG321", "1.0000", "3", "0.00", "DIXB, 13dioxane"}, {"HGA2", "CG321", "OG3C61", "CG321", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"CG2DC1", "CG321", "OG3R60", "CG2D2O", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC2", "CG321", "OG3R60", "CG2D1O", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"HGA2", "CG321", "OG3R60", "CG2D1O", "0.9000", "3", "0.00", "PY02, 2h-pyran"}, {"HGA2", "CG321", "OG3R60", "CG2D2O", "0.9000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2R61", "CG321", "PG1", "OG2P1", "0.0500", "3", "0.00", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG321", "PG1", "OG311", "1.6500", "1", "180.00", "BDFP, BDFD, Benzylphosphonate"}, {"CG2R61", "CG321", "PG1", "OG311", "0.5000", "2", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGA2", "CG321", "PG1", "OG2P1", "0.1000", "3", "0.00", "BDFP, Benzylphosphonate re-optimize?"}, {"HGA2", "CG321", "PG1", "OG311", "0.1000", "3", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"CG2R61", "CG321", "PG2", "OG2P1", "0.0500", "3", "0.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"HGA2", "CG321", "PG2", "OG2P1", "0.1000", "3", "0.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG331", "CG321", "SG301", "SG301", "0.3100", "3", "0.00", "PROT S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"HGA2", "CG321", "SG301", "SG301", "0.1580", "3", "0.00", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG311", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG311", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG311", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG321", "CG321", "SG311", "CG2N2", "0.2400", "1", "180.00", "DH3T , from CG321 CG321 SG311 CG321, penalty= 69 no opt."}, {"CG321", "CG321", "SG311", "CG2N2", "0.3700", "3", "0.00", "DH3T , from CG321 CG321 SG311 CG321, penalty= 69 no opt."}, {"CG321", "CG321", "SG311", "CG321", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG321", "0.3700", "3", "0.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG331", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG331", "0.3700", "3", "0.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG321", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG321", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG324", "CG321", "SG311", "CG321", "0.1950", "3", "0.00", "TMOR, thiomorpholine"}, {"CG331", "CG321", "SG311", "CG331", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG331", "CG321", "SG311", "CG331", "0.3700", "3", "0.00", "PROT DTN 8/24/90"}, {"CG331", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG331", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG331", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG3C51", "CG321", "SG311", "CG321", "0.2400", "1", "180.00", "PROT MeEtS reset by kevo"}, {"CG3C51", "CG321", "SG311", "CG321", "0.3700", "3", "0.00", "PROT MeEtS reset by kevo"}, {"SG311", "CG321", "SG311", "CG321", "1.3000", "3", "0.00", "TRIT, trithiane"}, {"HGA2", "CG321", "SG311", "CG2N2", "0.3600", "3", "0.00", "DH3T , from HGA3 CG331 SG311 CG2O6, penalty= 19.5 no opt."}, {"HGA2", "CG321", "SG311", "CG321", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA2", "CG321", "SG311", "CG331", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA2", "CG321", "SG311", "HGP3", "0.2000", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG321", "CG321", "SG3O1", "OG2P1", "0.2300", "3", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O1", "OG2P1", "0.2600", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"HGA2", "CG321", "SG3O1", "OG2P1", "0.1900", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O2", "CG331", "0.9000", "1", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "CG331", "0.3500", "2", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "CG331", "0.1250", "3", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "NG311", "0.1000", "1", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "NG311", "0.4000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "NG311", "0.3600", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "OG2P1", "0.1800", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"HGA2", "CG321", "SG3O2", "CG331", "0.1250", "3", "0.00", "MESN, methyl ethyl sulfone, xhe"}, {"HGA2", "CG321", "SG3O2", "NG311", "0.1600", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "SG3O2", "OG2P1", "0.1600", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "CG321", "SG3O3", "CG331", "0.1800", "1", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "CG331", "0.5700", "3", "0.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "1.6000", "1", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "0.2400", "2", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "0.0300", "3", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"HGA2", "CG321", "SG3O3", "CG331", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"HGA2", "CG321", "SG3O3", "OG2P1", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"FGA1", "CG322", "CG331", "HGA3", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA6", "CG322", "CG331", "HGA3", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"SG302", "CG323", "CG331", "HGA3", "0.1500", "3", "0.00", "PROT ethylthiolate, adm jr., 6/1/92"}, {"HGA2", "CG323", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT ethylthiolate, adm jr., 6/1/92"}, {"NG3P0", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG324", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"HGP5", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG324", "CG3C31", "CG3C31", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"NG3P3", "CG324", "CG3C31", "HGA1", "0.2000", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"HGA2", "CG324", "CG3C31", "CG3C31", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs"}, {"HGA2", "CG324", "CG3C31", "HGA1", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0840", "2", "180.00", "NIPR, nitropropane, kevo and abar"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0330", "4", "0.00", "NIPR, nitropropane, kevo and abar"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0242", "6", "0.00", "NIPR, nitropropane, kevo and abar ! we'll tolerate the slight dihedral strain for the sake of transferability - Kenno"}, {"HGA2", "CG324", "NG2O1", "OG2N1", "0.0150", "6", "180.00", "NIPR, nitropropane, abar"}, {"CG321", "CG324", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG321", "CG324", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA2", "CG324", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA2", "CG324", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG321", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG324", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG2R61", "CG324", "NG3P1", "CG324", "1.7000", "1", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "CG324", "0.8000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "CG324", "0.5800", "3", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "HGP2", "0.0400", "3", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG311", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG311", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG311", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG321", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG321", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG311", "CG324", "NG3P2", "CG324", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "CG324", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "CG324", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "G3P(R/S), Gamma-3-Piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG324", "NG3P2", "CG314", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG314", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG314", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "PIP, piperidine"}, {"HGA2", "CG324", "NG3P2", "CG314", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P2", "CG324", "0.1000", "3", "0.00", "PIP, piperidine; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "PIP, piperidine"}, {"CG2O1", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG2O3", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG321", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG331", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG3C31", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT 0.715->0.10 METHYLAMMONIUM (KK); jhs"}, {"HGA2", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"HGA3", "CG331", "CG331", "HGA3", "0.1550", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA3", "CG331", "CG3C51", "CG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "CG3RC1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "OG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3RC1", "CG311", "0.1500", "3", "180.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG321", "0.1600", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG3C51", "0.1500", "3", "180.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG3RC1", "0.1500", "3", "180.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "NG2D1", "CG2D1", "0.1000", "3", "0.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"HGA3", "CG331", "NG2D1", "CG2N1", "0.1100", "3", "180.00", "MGU1, methylguanidine"}, {"HGA3", "CG331", "NG2D1", "CG2O7", "0.0300", "3", "0.00", "MICY, methyl isocyanate, xxwy"}, {"HGA3", "CG331", "NG2R51", "CG2R53", "0.0000", "3", "0.00", "NA 9-M-A"}, {"HGA3", "CG331", "NG2R51", "CG2RC0", "0.1900", "3", "0.00", "NA 9-M-G"}, {"HGA3", "CG331", "NG2R61", "CG2R62", "0.0000", "3", "0.00", "NA 1-M-C"}, {"HGA3", "CG331", "NG2R61", "CG2R63", "0.1900", "3", "0.00", "NA 1-M-C"}, {"HGA3", "CG331", "NG2S0", "CG2O1", "0.0000", "3", "0.00", "DMA, dimethylacetamide; from PROT, sp2-methyl, no torsion potential; xxwy and jhs"}, {"HGA3", "CG331", "NG2S0", "CG331", "0.4200", "3", "0.00", "DMF, Dimethylformamide, xxwy"}, {"HGA3", "CG331", "NG2S1", "CG2O1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA3", "CG331", "NG2S1", "CG2O6", "0.0000", "3", "0.00", "DMCB, diethyl carbamate, kevo"}, {"HGA3", "CG331", "NG2S1", "HGP1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA3", "CG331", "NG2S3", "PG1", "0.1500", "3", "0.00", "NABAKB phosphoramidates"}, {"HGA3", "CG331", "NG2S3", "SG3O1", "0.1500", "3", "0.00", "NMSM, N-methyl-sulfamate; from HGA3 CG331 NG2S3 PG1; my"}, {"HGA3", "CG331", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NABAKB phosphoramidates"}, {"HGA3", "CG331", "NG301", "CG2R61", "0.4300", "3", "0.00", "DMAN, N,N-dimethylaniline, kevo"}, {"HGA3", "CG331", "NG301", "CG2R64", "0.0000", "3", "180.00", "TMC, from HGA3 CG331 NG311 CG2N1, yxu"}, {"HGA3", "CG331", "NG301", "CG331", "0.0000", "3", "180.00", "TMC, from HGA3 CG331 NG311 CG2N1, yxu"}, {"HGA3", "CG331", "NG311", "CG2N1", "0.0000", "3", "180.00", "MGU2, methylguanidine2 Taken together, these two params don't make much sense"}, {"HGA3", "CG331", "NG311", "SG3O2", "0.1000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGA3", "CG331", "NG311", "HGP1", "0.0500", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGA3", "CG331", "NG311", "HGPAM1", "0.4200", "3", "0.00", "MGU2, methylguanidine2 / Taken together, these two params don't make much sense"}, {"HGA3", "CG331", "OG301", "CG2D1O", "0.0650", "3", "0.00", "MOET, Methoxyethene, xxwy"}, {"HGA3", "CG331", "OG301", "CG2D2O", "0.0650", "3", "0.00", "MOET, Methoxyethene, xxwy"}, {"HGA3", "CG331", "OG301", "CG2R61", "0.0850", "3", "0.00", "MEOB, Methoxybenzene, cacha"}, {"HGA3", "CG331", "OG301", "CG301", "0.2840", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"HGA3", "CG331", "OG301", "CG311", "0.2840", "3", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"HGA3", "CG331", "OG301", "CG321", "0.2840", "3", "0.00", "diethylether, alex"}, {"HGA3", "CG331", "OG301", "CG331", "0.2840", "3", "0.00", "diethylether, alex !from HCT2-CCT2-OCE-CG321 DME, viv"}, {"HGA3", "CG331", "OG301", "CG3C51", "0.2000", "1", "180.00", "THF2, THF-2'OMe C2'-OM-CM-H, from Nucl. Acids, ed"}, {"HGA3", "CG331", "OG301", "CG3C51", "1.2000", "2", "180.00", "THF2, THF-2'OMe C2'-OM-CM-H, from Nucl. Acids, ed"}, {"HGA3", "CG331", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"HGA3", "CG331", "OG302", "CG2O6", "0.0000", "3", "0.00", "DMCB and DMCA, dimethyl carbamate and carbonate, kevo"}, {"HGA3", "CG331", "OG303", "PG0", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGA3", "CG331", "OG303", "PG1", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_1"}, {"HGA3", "CG331", "OG303", "PG2", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_2"}, {"HGA3", "CG331", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"HGA3", "CG331", "OG303", "SG3O2", "0.0000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"HGA3", "CG331", "OG311", "HGP1", "0.1800", "3", "0.00", "og methanol"}, {"HGA3", "CG331", "SG301", "SG301", "0.1580", "3", "0.00", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"HGA3", "CG331", "SG311", "CG2N2", "0.3600", "3", "0.00", "MT2A , from HGA3 CG331 SG311 CG2O6"}, {"HGA3", "CG331", "SG311", "CG2O6", "0.3600", "3", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"HGA3", "CG331", "SG311", "CG2R64", "0.1500", "3", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine; from HGA3 CG331 SG311 CG2O6; isg"}, {"HGA3", "CG331", "SG311", "CG321", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA3", "CG331", "SG311", "HGP3", "0.2000", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"HGA3", "CG331", "SG3O1", "OG2P1", "0.2300", "3", "0.00", "MSNA, methyl sulfonate, xhe"}, {"HGA3", "CG331", "SG3O2", "CG321", "0.0850", "3", "0.00", "MESN, methyl ethyl sulfone, xhe"}, {"HGA3", "CG331", "SG3O2", "CG331", "0.1150", "3", "0.00", "DMSN, dimethyl sulfone, xhe"}, {"HGA3", "CG331", "SG3O2", "NG311", "0.1000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGA3", "CG331", "SG3O2", "NG321", "0.1900", "3", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGA3", "CG331", "SG3O2", "OG2P1", "0.1800", "3", "0.00", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"HGA3", "CG331", "SG3O2", "OG303", "0.0000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"HGA3", "CG331", "SG3O3", "CG321", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"HGA3", "CG331", "SG3O3", "CG331", "0.2000", "3", "0.00", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG331", "SG3O3", "OG2P1", "0.2000", "3", "0.00", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG334", "NG2O1", "OG2N1", "0.0010", "6", "0.00", "NIME, nitromethane, abar"}, {"HGA3", "CG334", "NG2P1", "CG2D1", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2DC1", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2DC2", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA3", "CG334", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGP5", "CG334", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG334", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG334", "NG3P0", "OG311", "0.1000", "3", "0.00", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"HGP5", "CG334", "NG3P0", "OG312", "0.3500", "3", "0.00", "TMAO, xxwy and ejd"}, {"HGA3", "CG334", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA3", "CG334", "NG3P1", "HGP2", "0.9000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA3", "CG334", "NG3P3", "HGP2", "0.0900", "3", "0.00", "PROT fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"HGAAM0", "CG3AM0", "NG301", "CG3AM0", "0.3150", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "NG311", "CG3AM1", "0.0800", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "NG311", "HGPAM1", "0.4200", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM2", "CG3AM2", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMINE aliphatic amines"}, {"CG321", "CG3C31", "CG3C31", "OG3C31", "0.1100", "6", "180.00", "1BOX, 1-butene oxide; from OG3C31 CG3C31 CG3C31 HGA2 from 1EOX, 1-ethylene oxide; kevo"}, {"CG321", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "1BOX, 1-butene oxide; from CG324 CG3C31 CG3C31 HGA2 from PROTMOD hf/cyclopropane; sc"}, {"CG324", "CG3C31", "CG3C31", "CG3C31", "0.1000", "6", "0.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG324", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG3C31", "CG3C31", "CG3C31", "HGA1", "0.1000", "6", "0.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG3C31", "CG3C31", "CG3C31", "HGA2", "0.1000", "6", "0.00", "PROTMOD hf/cyclopropane"}, {"OG3C31", "CG3C31", "CG3C31", "HGA1", "0.1100", "6", "180.00", "1BOX, 1-butene oxide; from OG3C31 CG3C31 CG3C31 HGA2 from 1EOX, 1-ethylene oxide; kevo"}, {"OG3C31", "CG3C31", "CG3C31", "HGA2", "0.1100", "6", "180.00", "1EOX, 1-ethylene oxide, kevo"}, {"HGA1", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"HGA2", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "PROTMOD hf/cyclopropane"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG3C51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "NG2R61", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG321", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3C51", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3C52", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"CG321", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA1", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA1", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA2", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1EOX, 1-ethylene oxide, kevo"}, {"HGA2", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1EOX, 1-ethylene oxide, kevo"}, {"CG2R53", "CG3C41", "CG3C41", "NG2R43", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"CG3C41", "CG3C41", "CG3C41", "CG3C41", "1.4300", "3", "0.00", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"CG3C41", "CG3C41", "CG3C41", "OG3C51", "0.0000", "3", "0.00", "OXTN, oxetane, gmu"}, {"CG3C41", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"NG2R43", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"OG3C51", "CG3C41", "CG3C41", "HGA2", "0.1900", "3", "0.00", "OXTN, oxetane, gmu"}, {"HGA2", "CG3C41", "CG3C41", "HGA2", "0.0000", "3", "0.00", "CBU, cyclobutane, kevo"}, {"CG3C41", "CG3C41", "NG2R43", "CG2R53", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG3C41", "NG2R43", "HGP1", "0.2000", "3", "180.00", "AZDO, 2-azetidinone, kevo"}, {"HGA2", "CG3C41", "NG2R43", "CG2R53", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"HGA2", "CG3C41", "NG2R43", "HGP1", "0.0000", "3", "0.00", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "OG3C51", "CG3C41", "0.5000", "3", "0.00", "OXTN, oxetane, gmu (CG3C52 CG3C52 OG3C51 CG3C52)"}, {"HGA2", "CG3C41", "OG3C51", "CG3C41", "0.3000", "3", "0.00", "OXTN, oxetane, gmu"}, {"CG321", "CG3C51", "CG3C51", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C51", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C51", "NG2S3", "0.5000", "2", "180.00", "NABAKB phosphoramidates"}, {"CG321", "CG3C51", "CG3C51", "NG321", "0.3000", "3", "180.00", "amines"}, {"CG321", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG321", "CG3C51", "CG3C51", "OG303", "0.2000", "4", "0.00", "NA, sugar"}, {"CG321", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG321", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG331", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG331", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C53", "0.4000", "6", "0.00", "NA bkb"}, {"CG3C51", "CG3C51", "CG3C51", "NG2R51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C51", "NG2R61", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C51", "NG301", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "2.0000", "3", "180.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "0.4000", "5", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "0.8000", "6", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG311", "0.2000", "3", "0.00", "par22, X CT1 CT2 X; erh 3/08"}, {"CG3C51", "CG3C51", "CG3C51", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C51", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C51", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3C51", "NG2R51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG3C52", "CG3C51", "CG3C51", "OG303", "0.2000", "4", "0.00", "NA, sugar"}, {"CG3C52", "CG3C51", "CG3C51", "OG311", "0.2000", "3", "0.00", "par22, X CT1 CT2 X; erh 3/08"}, {"CG3C52", "CG3C51", "CG3C51", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C52", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C53", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG3C53", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG3RC1", "CG3C51", "CG3C51", "OG311", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C51", "OG311", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C51", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugar"}, {"NG2R51", "CG3C51", "CG3C51", "OG303", "0.0000", "3", "0.00", "NA nadp/nadph"}, {"NG2R51", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA Guanine and uracil"}, {"NG2R51", "CG3C51", "CG3C51", "HGA1", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA Adenine and cytosine"}, {"NG2R61", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA nadp/nadph"}, {"NG2S3", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG301", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to Adenine and cytosine from par_all27_na.prm"}, {"NG301", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"NG321", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG321", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"OG303", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.6000", "4", "180.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.3000", "5", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.5000", "6", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C51", "HGA6", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA bkb"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG3C51", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"FGA1", "CG3C51", "CG3C51", "HGA1", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA1", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG2O1", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG311", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG321", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C52", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C52", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3RC1", "CG3C51", "CG3C52", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3RC1", "CG3C51", "CG3C52", "HGA2", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R51", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R51", "CG3C51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2S0", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "1.3500", "1", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "1.0000", "2", "0.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "0.2000", "3", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "1.3500", "1", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "1.0000", "2", "0.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "0.2000", "3", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG321", "CG3C51", "CG3C52", "CG3C51", "0.3000", "3", "180.00", "amines"}, {"NG321", "CG3C51", "CG3C52", "HGA2", "0.1500", "3", "180.00", "amines"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "2.0000", "3", "180.00", "THF2, THF-2'OMe from NA, sugar, ed Kenno: was 1.0 - reset to 2.0"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "THF2, THF-2'OMe from NA, sugar, ed"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "0.8000", "6", "0.00", "THF2, THF-2'OMe from NA, sugar, ed"}, {"OG301", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "THF2, THF-2'OMe, standard parameter, ed"}, {"OG301", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "180.00", "THF2, THF-2'OMe from NA, sugar, ed. Kenno: was 1.395 - problematic when substituting away hydrogens."}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "2.0000", "3", "180.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "0.4000", "5", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "0.8000", "6", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.5000", "1", "180.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.7000", "2", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.4000", "3", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3RC1", "1.9000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "2.0000", "3", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "0.4000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "0.8000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.5000", "1", "180.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.7000", "2", "0.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.4000", "3", "0.00", "NA abasic nucleoside"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "NA abasic nucleoside"}, {"OG311", "CG3C51", "CG3C52", "CG3RC1", "1.9000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "180.00", "NA, sugar"}, {"OG3C51", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"OG3C51", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"OG3C51", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"FGA1", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"FGA1", "CG3C51", "CG3C52", "HGA2", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA1", "CG3C51", "CG3C52", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"HGA1", "CG3C51", "CG3C52", "OG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA1", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA6", "CG3C51", "CG3C52", "OG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA6", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C53", "NG2R61", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C53", "OG3C51", "0.6000", "6", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "NG2R61", "0.0000", "3", "0.00", "NA Adenine and cytosine"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG3C51", "CG3C53", "NG2R61", "0.1950", "3", "0.00", "NA nadp/nadph"}, {"HGA1", "CG3C51", "CG3C53", "OG3C51", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG311", "CG3C51", "CG3RC1", "CG311", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG321", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG331", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG3RC1", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3C51", "CG3RC1", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "CG3RC1", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "CG3RC1", "CG3RC1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG311", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3RC1", "0.9000", "6", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C52", "0.4500", "2", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"OG311", "CG3C51", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3C51", "CG3RC1", "CG311", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG3C51", "CG3RC1", "CG321", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG3C51", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "NG2R51", "CG2R51", "0.2000", "4", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R51", "CG2R53", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R51", "CG2RC0", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2R51", "0.2000", "4", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2R53", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2RC0", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3RC1", "CG3C51", "NG2R51", "CG2R53", "0.5000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R51", "0.6000", "1", "180.00", "NA, glycosyl linkage 0.5 2 -70 removed by kevo"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R51", "0.2000", "3", "0.00", "NA, glycosyl linkage 0.5 2 -70 removed by kevo"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R53", "1.1000", "1", "0.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R51", "CG2RC0", "0.2000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R51", "CG2R51", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"HGA1", "CG3C51", "NG2R51", "CG2R53", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"HGA1", "CG3C51", "NG2R51", "CG2R53", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R51", "CG2RC0", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"CG3C51", "CG3C51", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3RC1", "CG3C51", "NG2R61", "CG2R62", "0.4000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3C51", "NG2R61", "CG2R62", "1.0000", "1", "0.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R61", "CG2R63", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R61", "CG2R62", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R61", "CG2R63", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"CG2O1", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "1.5000", "1", "180.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "0.6500", "2", "180.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "1.0000", "3", "0.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "HGP1", "0.3000", "1", "0.00", "NABAKB TPHC phosphoramidates"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "1.5000", "1", "180.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "0.6500", "2", "180.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "1.0000", "3", "0.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "HGP1", "0.3000", "1", "0.00", "NABAKB TPHC phosphoramidates"}, {"HGA1", "CG3C51", "NG2S3", "PG1", "0.1500", "3", "0.00", "NABAKB TPHC phosphoramidates"}, {"HGA1", "CG3C51", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NABAKB TPHC phosphoramidates"}, {"CG3C51", "CG3C51", "NG301", "CG2D1O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG301", "CG2D2O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"OG3C51", "CG3C51", "NG301", "CG2D1O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to for NADPH from par_all27_na.prm"}, {"OG3C51", "CG3C51", "NG301", "CG2D2O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to for NADPH from par_all27_na.prm"}, {"HGA1", "CG3C51", "NG301", "CG2D1O", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"HGA1", "CG3C51", "NG301", "CG2D2O", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG321", "HGPAM2", "0.3000", "3", "180.00", "amines"}, {"CG3C52", "CG3C51", "NG321", "HGPAM2", "0.3000", "3", "180.00", "amines"}, {"HGA1", "CG3C51", "NG321", "HGPAM2", "0.0100", "3", "0.00", "amines"}, {"CG3C52", "CG3C51", "OG301", "CG331", "0.1000", "1", "180.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG301", "CG331", "1.6500", "2", "180.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG301", "CG331", "0.4500", "3", "0.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "0.6000", "1", "0.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "1.8000", "2", "180.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "0.4800", "3", "0.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C51", "CG3C51", "OG303", "PG1", "2.5000", "1", "180.00", "reverted to NA, sugar by kevo"}, {"CG3C51", "CG3C51", "OG303", "PG2", "2.5000", "1", "180.00", "reverted to NA, sugar by kevo"}, {"CG3C52", "CG3C51", "OG303", "PG1", "2.5000", "1", "180.00", "NA, sugar ! verified by kevo"}, {"CG3C52", "CG3C51", "OG303", "PG2", "2.5000", "1", "180.00", "NA, sugar ! verified by kevo"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "2.4000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "0.4000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "1.5000", "3", "180.00", "CARBOCY carbocyclic sugars ! phase adjusted for CGenFF by kevo"}, {"HGA1", "CG3C51", "OG303", "PG1", "0.0000", "3", "0.00", "NA, sugar ! verified by kevo"}, {"HGA1", "CG3C51", "OG303", "PG2", "0.0000", "3", "0.00", "NA, sugar ! verified by kevo"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "1.5000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "0.3000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "0.3200", "3", "0.00", "CARBOCY carbocyclic sugars; Kenno: empirically corrected for HGA1 CG3C51 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"HGA1", "CG3C51", "OG311", "HGP1", "0.1800", "3", "0.00", "Team sugar, HCP1 OC311 CC3151 HCA1"}, {"CG321", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG321", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG321", "CG3C51", "OG3C51", "CG3C53", "0.8000", "3", "0.00", "NA, sugar"}, {"CG331", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG331", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C53", "0.0000", "6", "0.00", "NA, sugar"}, {"CG3C52", "CG3C51", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"NG2R51", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, sugar"}, {"NG2R51", "CG3C51", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG301", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"HGA1", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA1", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA1", "CG3C51", "OG3C51", "CG3C53", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "3.7000", "3", "180.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "2.2500", "4", "0.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "0.2300", "6", "180.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "NG3C51", "1.7000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "OG3C51", "0.2500", "3", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "HGA2", "0.1400", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "0 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "HGA2", "1.0000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "CG3C52", "0.3400", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2RC0", "CG3C52", "CG3C52", "NG3C51", "2.4800", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG3C51", "CG3C52", "CG3C52", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C52", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C52", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C52", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C52", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3C52", "NG2R53", "2.1300", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "CG3C52", "NG2S0", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C53", "CG3C52", "CG3C52", "CG3C54", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG3C52", "CG3C52", "HGA2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C52", "CG3C52", "CG3C54", "0.3700", "3", "180.00", "0.8 3 180 ! 0.15 3 0 PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "CG3C54", "0.0300", "6", "180.00", "0.31 6 0 ! 0.10 6 0 PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "NG3C51", "0.0400", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "HGA2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3C52", "CG3C52", "CG3RC1", "0.2100", "3", "180.00", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3RC1", "CG3C52", "CG3C52", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"NG2R50", "CG3C52", "CG3C52", "NG3C51", "1.0000", "3", "0.00", "0 2IMI, 2-imidazoline ! 1a,1,NCCN+, kevo"}, {"NG2R50", "CG3C52", "CG3C52", "HGA2", "0.3000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"NG2R53", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2S0", "CG3C52", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRL, 2-pyrroline; 2IMI, 2-imidazoline, kevo"}, {"OG3C51", "CG3C52", "CG3C52", "OG3C51", "0.2600", "3", "0.0", "DIOL, 1,3-Dioxolane fit_dihedral, erh"}, {"OG3C51", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA2", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C52", "CG3C53", "CG2O1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "CG2O3", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "HGA1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "CG2O1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "CG2O3", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "HGA1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2R51", "CG3C52", "CG3C54", "NG3P2", "0.6000", "3", "180.00", "0.5 0.4 2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG3C52", "CG3C54", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "CG3C54", "NG3P2", "0.4900", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3C51", "CG3C52", "CG3C54", "HGA2", "0.3700", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "CG3C54", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C52", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3RC1", "CG3RC1", "1.7500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG311", "0.1000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG311", "0.5000", "4", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG321", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from NORB; xxwy"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "CG3RC1", "HGA1", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"HGA2", "CG3C52", "CG3RC1", "CG311", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA2", "CG3C52", "CG3RC1", "CG321", "0.1950", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from NORB; xxwy"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"HGA2", "CG3C52", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG2R51", "CG3C52", "NG2R50", "CG2R52", "2.0000", "2", "180.00", "2HPR, 2H-pyrrole !???, kevo"}, {"CG3C52", "CG3C52", "NG2R50", "CG2R53", "1.9000", "3", "180.00", "2.0 2IMI, 2-imidazoline -1a, kevo"}, {"HGA2", "CG3C52", "NG2R50", "CG2R52", "0.0000", "3", "0.00", "2HPR, 2H-pyrrole !x, kevo"}, {"HGA2", "CG3C52", "NG2R50", "CG2R53", "0.6000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "CG2R53", "2.3100", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "HGP1", "0.7600", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"HGA2", "CG3C52", "NG2R53", "CG2R53", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"HGA2", "CG3C52", "NG2R53", "HGP1", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "NG2S0", "CG2O1", "0.0000", "3", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "NG2S0", "CG3C51", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "NG2S0", "CG2O1", "0.0000", "3", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "NG2S0", "CG3C51", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2R51", "CG3C52", "NG3C51", "CG3C52", "2.0500", "3", "180.00", "2.05 2.02 2.05 1.4 1.38 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "HGP1", "1.7700", "1", "180.00", "1.77 1.60 1.0 *new* 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "HGP1", "0.7000", "3", "0.00", "0.70 0.75 0.5 1.10 3PRL, 3-pyrroline, kevo"}, {"CG3C51", "CG3C52", "NG3C51", "CG3C52", "0.1800", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "NG3C51", "HGP1", "0.5500", "1", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "NG3C51", "HGP1", "0.8500", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2R51", "0.0500", "3", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2R53", "1.9000", "3", "180.00", "1.6 ! 2.5 1.5 2IMI, 2-imidazoline -1a, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2RC0", "1.4500", "3", "180.00", "INDI, indoline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG3C52", "0.1800", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "NG2R50", "2.8000", "3", "180.00", "2.9 2PRZ, 2-pyrazoline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "NG3P2", "0.9000", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "HGP1", "0.5500", "1", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "HGP1", "0.8500", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C54", "CG3C52", "NG3C51", "CG3C54", "1.5800", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"CG3C54", "CG3C52", "NG3C51", "HGP1", "1.6500", "1", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"CG3C54", "CG3C52", "NG3C51", "HGP1", "0.7400", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "NG3C51", "CG2R51", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG2R53", "0.1000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG2RC0", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG3C52", "0.0000", "3", "0.00", "3PRL, 3-pyrroline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG3C54", "0.4800", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "NG3C51", "NG2R50", "0.3000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "NG3P2", "0.0000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGA2", "CG3C52", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "OG3C51", "CG2R53", "0.3100", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "OG3C51", "CG2R53", "0.2800", "6", "0.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C51", "CG3C52", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "OG3C51", "CG3RC1", "0.5000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3C52", "CG3C52", "OG3C51", "CG2R51", "0.7300", "3", "0.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG3C52", "CG3C52", "OG3C51", "CG2R53", "2.2200", "2", "0.00", "GBL, Gamma-butyrolactone, ctsai"}, {"CG3C52", "CG3C52", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "OG3C51", "CG3RC1", "0.5000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"OG3C51", "CG3C52", "OG3C51", "CG2RC0", "0.5000", "3", "0.00", "ZDOL, 1,3-benzodioxole; from THF, tetrahydofuran; kevo"}, {"OG3C51", "CG3C52", "OG3C51", "CG3C52", "1.6500", "3", "180.00", "DIOL, 1,3-Dioxolane fit_dihedral, erh"}, {"HGA2", "CG3C52", "OG3C51", "CG2R51", "0.0000", "3", "0.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"HGA2", "CG3C52", "OG3C51", "CG2R53", "0.0000", "3", "0.00", "GBL, from HGA2 CG3C52 OG3C51 CG2R51, ctsai"}, {"HGA2", "CG3C52", "OG3C51", "CG2RC0", "0.3000", "3", "0.00", "ZDOL, 1,3-benzodioxole; from THF, tetrahydofuran; kevo"}, {"HGA2", "CG3C52", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA2", "CG3C52", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA2", "CG3C52", "OG3C51", "CG3RC1", "0.3000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3C51", "CG3C53", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C53", "NG2R61", "CG2R62", "1.0000", "1", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C53", "NG2R61", "CG2R62", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"CG2O1", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C53", "OG3C51", "CG3C51", "0.0000", "6", "0.00", "NA, sugar"}, {"NG2R61", "CG3C53", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C53", "OG3C51", "CG3C51", "0.1950", "3", "0.00", "NA, sugar"}, {"NG2R52", "CG3C54", "CG3C54", "NG2R52", "0.0700", "3", "0.00", "0 2IMP, 2-imidazoline.H+, kevo"}, {"NG2R52", "CG3C54", "CG3C54", "HGA2", "0.3000", "3", "0.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "CG3C54", "HGA2", "0.1400", "3", "0.00", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"CG2R51", "CG3C54", "NG2R52", "CG2R52", "2.8000", "2", "180.00", "2.7 2.3 2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG3C54", "NG2R52", "HGP2", "2.7000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"CG3C54", "CG3C54", "NG2R52", "CG2R53", "0.2500", "3", "180.00", "0.21 2IMP, 2-imidazoline.H+, kevo"}, {"CG3C54", "CG3C54", "NG2R52", "HGP2", "0.6000", "3", "0.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "CG2R52", "0.0000", "3", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "CG2R53", "0.0000", "3", "180.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "HGP2", "0.0000", "3", "0.00", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG3P2", "CG3C54", "NG3C51", "CG3C52", "1.7700", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3P2", "CG3C54", "NG3C51", "HGP1", "1.8400", "1", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3P2", "CG3C54", "NG3C51", "HGP1", "0.9600", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3C51", "CG3C52", "0.4800", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3C51", "HGP1", "0.0000", "3", "0.00", "IMDP, imidazolidine, erh and kevo"}, {"CG2R51", "CG3C54", "NG3P2", "CG3C54", "1.8800", "3", "180.00", "1.9 1.5 3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG3C54", "NG3P2", "HGP2", "0.3000", "3", "0.00", "3PRP, 3-pyrroline.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "CG2R51", "0.7000", "3", "180.00", "0.7 2PRP, 2-pyrroline.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "CG3C53", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "NG3P2", "CG3C54", "0.1000", "3", "0.00", "PRLP, pyrrolidine.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "NG3C51", "0.0400", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C54", "NG3P2", "CG3C54", "2.7400", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3C51", "CG3C54", "NG3P2", "HGP2", "0.1600", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3P2", "CG2R51", "0.2000", "3", "0.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "CG3C53", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C54", "NG3P2", "CG3C54", "0.1000", "3", "0.00", "PRLP, pyrrolidine.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "NG3C51", "0.1000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3RC1", "CG3RC1", "CG311", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "CG3RC1", "CG321", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "CG3RC1", "CG331", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "CG3C51", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08 corrected by kevo"}, {"CG311", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3RC1", "CG3RC1", "CG3C52", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG3RC1", "CG3RC1", "HGA1", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C31", "CG3RC1", "CG3RC1", "CG3C51", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3RC1", "CG3C52", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3RC1", "OG3C51", "1.2000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "OG3C51", "1.2000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C52", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG3RC1", "CG3RC1", "NG2R53", "0.1500", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3RC1 CG3RC1 NG2R51), jing"}, {"NG2R53", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CBHH, glycoluril, (NG2R51 CG3RC1 CG3RC1 HGA1), jing"}, {"NG2R61", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "CG2R53", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "CG2RC0", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "CG2R53", "0.1000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "CG2RC0", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "CG2R53", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R53", "CG2R53", "1.1000", "1", "180.00", "CBHH, glycoluril, (CG3RC1 CG3RC1 NG2R51 CG2R53), jing"}, {"CG3RC1", "CG3RC1", "NG2R53", "HGP1", "0.7600", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 HGP1), jing"}, {"NG2R53", "CG3RC1", "NG2R53", "CG2R53", "2.3100", "3", "180.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 CG2R53), jing"}, {"NG2R53", "CG3RC1", "NG2R53", "HGP1", "0.7600", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 HGP1), jing"}, {"HGA1", "CG3RC1", "NG2R53", "CG2R53", "0.0000", "3", "0.00", "CBHH, glycoluril, (HGA2 CG3C52 NG2R53 CG2R53), jing"}, {"HGA1", "CG3RC1", "NG2R53", "HGP1", "0.0000", "3", "180.00", "CBHH, glycoluril, (HGA2 CG3C52 NG2R53 HGP1), jing"}, {"CG3C31", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R61", "CG2R63", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "CG2R63", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R61", "CG2R63", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"OG3C51", "CG3RC1", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"HGA1", "CG3RC1", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG2D1", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2D1", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2D1", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2DC1", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R51", "NG2R50", "NG2R50", "NG2R51", "14.0000", "2", "180.00", "TRZ3, triazole123"}, {"CG2R51", "NG2R50", "NG2R50", "OG2R50", "14.0000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R52", "NG2R50", "NG2R51", "CG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R52", "NG2R50", "NG2R51", "CG2RC0", "8.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R52", "NG2R50", "NG2R51", "NG2R50", "9.5000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "NG2R50", "NG2R51", "HGP1", "1.4000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R53", "NG2R50", "NG2R51", "CG2R53", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "NG2R51", "HGP1", "2.3000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "NG2R50", "NG2R51", "CG2R51", "8.5000", "2", "180.00", "TRZ3, triazole123"}, {"NG2R50", "NG2R50", "NG2R51", "CG321", "2.5000", "2", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2R50 NG2R50 NG2R51 HGP1, kevo"}, {"NG2R50", "NG2R50", "NG2R51", "HGP1", "2.5000", "2", "180.00", "TRZ3, triazole123"}, {"CG2R52", "NG2R50", "NG3C51", "CG3C52", "0.5000", "2", "180.00", "9 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "NG3C51", "HGP1", "0.2500", "3", "0.00", "0.7 1.3 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "OG2R50", "CG2R51", "12.0000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R53", "NG2R50", "OG2R50", "CG2R53", "9.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"NG2R50", "NG2R50", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R52", "NG2R50", "SG2R50", "CG2R51", "9.0000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R51", "NG2R57", "NG2R57", "CG2R51", "0.3000", "2", "000.00", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R61", "NG2R62", "NG2R62", "CG2R61", "1.2000", "2", "180.00", "PYRD, pyridazine"}, {"CG2R61", "NG2R62", "NG2R62", "CG2R64", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"CG331", "NG2S3", "PG1", "OG2P1", "0.4000", "3", "0.00", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "PG1", "OG2P1", "0.5000", "4", "0.00", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "PG1", "OG303", "1.9000", "2", "0.00", "NABAKB phosphoramidates ! eliminated 0.8 2 120 for OG2P1 and compensated 1.5 -> 1.9 here"}, {"CG3C51", "NG2S3", "PG1", "OG2P1", "0.4000", "3", "0.00", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "OG2P1", "0.5000", "4", "0.00", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "OG303", "1.9000", "2", "0.00", "NABAKB phosphoramidates ! eliminated 0.8 2 120 for OG2P1 and compensated 1.5 -> 1.9 here"}, {"HGP1", "NG2S3", "PG1", "OG2P1", "0.0500", "3", "0.00", "NABAKB phosphoramidates"}, {"HGP1", "NG2S3", "PG1", "OG303", "0.0500", "3", "0.00", "NABAKB phosphoramidates"}, {"CG321", "NG2S3", "SG3O1", "OG2P1", "0.5520", "3", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "NG2S3", "SG3O1", "OG2P1", "0.5370", "3", "0.00", "NMSM, N-methyl-sulfamate, my"}, {"HGP1", "NG2S3", "SG3O1", "OG2P1", "0.0500", "3", "0.00", "NMSM, N-methyl-sulfamate; from HGP1 NG2S3 PG1 OG2P1; my"}, {"CG2R61", "NG311", "SG3O2", "CG2R61", "1.2000", "1", "180.00", "PBSM, N-phenylbenzenesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG2R61", "1.4000", "2", "0.00", "PBSM, N-phenylbenzenesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG331", "2.2000", "2", "0.00", "PMSM, N-phenylmethanesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "PMSM, N-phenylmethanesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG321", "NG311", "SG3O2", "CG2R61", "1.5000", "2", "0.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"CG321", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"CG321", "NG311", "SG3O2", "CG321", "2.0000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "SG3O2", "CG321", "0.3000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "SG3O2", "CG331", "2.0000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG321", "NG311", "SG3O2", "CG331", "0.3000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG321", "NG311", "SG3O2", "NG311", "0.9020", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "0.6350", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "1.4440", "3", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "0.3320", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG2R61", "1.5000", "2", "0.00", "MBSM, N-methylbenzenesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "MBSM, N-methylbenzenesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG331", "2.0000", "2", "0.00", "MMSM, N-methylmethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "NG311", "1.2560", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.6240", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "1.8260", "3", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.2140", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.2630", "6", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "1.2000", "1", "180.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "1.1000", "2", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "1.3000", "1", "180.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "1.2000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "0.2000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "1.0000", "1", "180.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "1.1000", "2", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.5750", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "1.0830", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.9590", "3", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.1990", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.2380", "6", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "1.5000", "1", "180.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "1.2000", "2", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "0.1000", "3", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "0.9000", "1", "180.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "1.6000", "2", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "0.1000", "3", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGP1", "NG321", "SG3O2", "OG303", "0.4000", "3", "0.00", "MSMT, methyl sulfamate, PSMT, phenyl sulfamate, xxwy"}, {"CG3C52", "NG3C51", "NG3P2", "CG3C54", "1.0200", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "NG3C51", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGP1", "NG3C51", "NG3P2", "CG3C54", "2.4500", "1", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"HGP1", "NG3C51", "NG3P2", "CG3C54", "0.0200", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"HGP1", "NG3C51", "NG3P2", "HGP2", "0.0000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"CG2R61", "NG3N1", "NG3N1", "HGP1", "1.6000", "2", "180.00", "PHHZ, phenylhydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "1.1000", "1", "180.00", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "4.5000", "2", "0.00", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "0.0500", "3", "0.00", "HDZN, hydrazine, ed"}, {"CG334", "NG3P0", "OG311", "HGP1", "0.2770", "3", "0.00", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"CG331", "OG303", "PG0", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG331", "OG303", "PG0", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG331", "OG303", "PG0", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG2R61", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG321", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG304", "1.2000", "1", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG304", "0.1000", "2", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG304", "0.1000", "3", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr."}, {"CG321", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr."}, {"CG331", "OG303", "PG1", "NG2S3", "0.4000", "1", "0.00", "NABAKB phosphoramidates"}, {"CG331", "OG303", "PG1", "NG2S3", "0.2600", "2", "0.00", "NABAKB phosphoramidates ! changed 0.4 2 50 into 0.4cos(50)=0.26 2 0"}, {"CG331", "OG303", "PG1", "NG2S3", "0.3500", "3", "0.00", "NABAKB phosphoramidates"}, {"CG331", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_1"}, {"CG331", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG304", "1.2000", "1", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG304", "0.1000", "2", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG304", "0.1000", "3", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"CG331", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"CG3C51", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "BPNP and others dmp,eps, O1P-P-O3'-C3'"}, {"CG3C51", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA T3PH, adm jr."}, {"CG3C51", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA T3PH, adm jr."}, {"CG311", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "IP_2 NA dmp,eps, O1P-P-O3'-C3'"}, {"CG321", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization: TH5P and others"}, {"CG331", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_2"}, {"CG3C51", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "TH3P and others dmp,eps, O1P-P-O3'-C3'"}, {"CG321", "OG303", "SG3O1", "OG2P1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"CG331", "OG303", "SG3O1", "OG2P1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"CG2R61", "OG303", "SG3O2", "CG331", "1.6000", "1", "180.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "CG331", "0.8000", "2", "0.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "CG331", "0.1000", "3", "0.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "3.2000", "1", "180.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "0.2000", "2", "0.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "0.2000", "3", "0.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "OG2P1", "0.3000", "3", "0.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "1.1000", "1", "180.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "0.7000", "2", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "0.3000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "1.8000", "1", "180.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "0.5000", "2", "0.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "0.4000", "3", "0.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "OG2P1", "0.3000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"PG1", "OG304", "PG1", "OG2P1", "0.1000", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG2P1", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG303", "0.0300", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG303", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG304", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG1", "OG304", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG1", "OG311", "0.1000", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG311", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG2", "OG304", "PG1", "OG2P1", "0.1000", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG2P1", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG303", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG303", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG304", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG2", "OG304", "PG1", "OG304", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG2", "OG2P1", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"HGP1", "OG311", "PG0", "OG2P1", "0.3000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG303", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG303", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG311", "0.3000", "3", "0.00", "NA MP_0, adm jr."}, {"HGP1", "OG311", "PG1", "CG312", "0.2000", "1", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG312", "1.6000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG321", "0.6000", "1", "180.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG321", "1.1000", "2", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGP1", "OG311", "PG1", "OG2P1", "0.3000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG303", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG303", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG304", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:PPI2"}, {"HGP1", "OG311", "PG1", "OG304", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:PPI2"}, {"CG321", "SG301", "SG301", "CG321", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG321", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG321", "SG301", "SG301", "CG321", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_cgenff info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_cgenff_impropers[125][8]= {{"CG2D1", "CG331", "NG2D1", "HGA4", "25.0000", "0", "0.00", "SCH1, xxwy"}, {"CG2D1", "CG331", "NG2P1", "HGR52", "18.0000", "0", "0.00", "SCH2, xxwy"}, {"CG2D1O", "CG2D1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2D1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2D2", "NG321", "HGA4", "53.0000", "0", "0.00", "AMET, ethenamine, from NA NICH WILDCARD; pram"}, {"CG2D1O", "CG2D2", "OG301", "HGA4", "23.0000", "0", "0.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "CG2DC1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2DC1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2DC1", "OG301", "HGA4", "10.0000", "0", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D2O", "CG2D1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2D1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2D2", "NG321", "HGA4", "53.0000", "0", "0.00", "AMET, ethenamine, from NA NICH WILDCARD; pram"}, {"CG2D2O", "CG2D2", "OG301", "HGA4", "23.0000", "0", "0.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "CG2DC2", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2DC2", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2DC2", "OG301", "HGA4", "10.0000", "0", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC1", "CG2R61", "NG2D1", "HGA4", "30.0000", "0", "0.00", "HDZ1B, xxwy"}, {"CG2DC1", "CG2DC2", "NG2P1", "HGR52", "13.0000", "0", "0.00", "SCH3, xxwy"}, {"CG2DC2", "CG2R61", "NG2D1", "HGA4", "30.0000", "0", "0.00", "HDZ1B, xxwy"}, {"CG2DC2", "CG2DC1", "NG2P1", "HGR52", "13.0000", "0", "0.00", "SCH3, xxwy"}, {"CG2N1", "NG321", "NG321", "NG2D1", "85.0000", "0", "0.00", "MGU1, methylguanidine"}, {"CG2N1", "NG2P1", "NG2P1", "NG2P1", "40.0000", "0", "0.00", "PROT 5.75->40.0 GUANIDINIUM (KK)"}, {"CG2N1", "NG2D1", "NG311", "NG321", "85.0000", "0", "0.00", "MGU2, methylguanidine2"}, {"CG2N2", "NG2P1", "NG2P1", "CG2R61", "30.0000", "0", "0.00", "BAMI, benzamidinium; from AMDN, amidinium; pram"}, {"CG2N2", "NG2P1", "NG2P1", "CG331", "30.0000", "0", "0.00", "AMDN, amidinium, sz (verified by pram)"}, {"CG2N2", "NG2D1", "NG321", "SG311", "32.0000", "0", "0.00", "MT2A, fylin"}, {"CG2O1", "CG2DC1", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC1", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC2", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC2", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R61", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R61", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R62", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG311", "OG2D1", "120.0000", "0", "0.00", "AMS1, xxwy, from PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG331", "NG2S0", "OG2D1", "71.0000", "0", "0.00", "DMA, Dimethylacetamide, xxwy"}, {"CG2O1", "CG331", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG331", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "NG2S0", "OG2D1", "HGR52", "50.0000", "0", "0.00", "DMF, Dimethylformamide, xxwy"}, {"CG2O1", "NG2S2", "OG2D1", "HGR52", "66.0000", "0", "0.00", "FORM, formamide, xxwy"}, {"CG2O2", "CG2R61", "OG2D1", "OG302", "72.0000", "0", "0.00", "MBOA, methyl benzoate; MOLVIB looks good; jal"}, {"CG2O2", "CG311", "OG2D1", "OG302", "62.0000", "0", "0.00", "PROT and LIPID WILDCARD; from MAS, methyl acetate; xxwy"}, {"CG2O2", "CG321", "OG2D1", "OG302", "62.0000", "0", "0.00", "PROT and LIPID WILDCARD; from MAS, methyl acetate; xxwy"}, {"CG2O2", "CG331", "OG2D1", "OG302", "62.0000", "0", "0.00", "MAS, methyl acetate, xxwy"}, {"CG2O2", "CG2R61", "OG2D1", "OG311", "53.0000", "0", "0.00", "ZOIC, benzoic acid; MOLVIB 1% low (55 would be spot on); jal"}, {"CG2O2", "CG311", "OG2D1", "OG311", "65.0000", "0", "0.00", "PROT and LIPID WILDCARD; ACEH, acetic acid; xxwy"}, {"CG2O2", "CG321", "OG2D1", "OG311", "65.0000", "0", "0.00", "PROT and LIPID WILDCARD; ACEH, acetic acid; xxwy"}, {"CG2O2", "CG331", "OG2D1", "OG311", "65.0000", "0", "0.00", "ACEH, acetic acid, xxwy"}, {"CG2O2", "OG2D1", "OG311", "HGR52", "75.0000", "0", "0.00", "FORH, formic acid, xxwy"}, {"CG2O3", "OG2D2", "OG2D2", "CG2DC1", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2DC2", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2O5", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2R61", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG301", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG311", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT1 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "CG314", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG321", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT2 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "CG331", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT3 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "HGR52", "67.0000", "0", "0.00", "FORA, formate, sz"}, {"CG2O4", "CG2DC1", "OG2D1", "HGR52", "14.0000", "0", "0.00", "RETINOL RTAL unmodified"}, {"CG2O4", "CG2DC2", "OG2D1", "HGR52", "14.0000", "0", "0.00", "RETINOL RTAL unmodified"}, {"CG2O4", "CG2R61", "OG2D1", "HGR52", "53.0000", "0", "0.00", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O4", "CG321", "OG2D1", "HGR52", "50.0000", "0", "0.00", "PALD from acetaldehyde adm 11/08"}, {"CG2O4", "CG331", "OG2D1", "HGR52", "50.0000", "0", "0.00", "AALD acetaldehyde adm 11/08"}, {"CG2O5", "CG2DC1", "CG331", "OG2D3", "88.0000", "0", "0.00", "BEON, butenone, kevo"}, {"CG2O5", "CG2DC2", "CG331", "OG2D3", "88.0000", "0", "0.00", "BEON, butenone, kevo"}, {"CG2O5", "CG2O3", "CG2R61", "OG2D3", "72.0000", "0", "0.00", "BIPHENYL re-initialized by kevo from PHEK, phenyl ethyl ketone, mcs"}, {"CG2O5", "CG2R61", "CG311", "OG2D3", "72.0000", "0", "0.00", "BIPHENYL re-initialized by kevo from PHEK, phenyl ethyl ketone; mcs"}, {"CG2O5", "CG2R61", "CG321", "OG2D3", "72.0000", "0", "0.00", "PHEK, phenyl ethyl ketone; mcs"}, {"CG2O5", "CG2R61", "CG331", "OG2D3", "60.0000", "0", "0.00", "3ACP, 3-acetylpyridine; PHMK, phenyl methyl ketone; mcs"}, {"CG2O5", "CG321", "CG321", "OG2D3", "70.0000", "0", "0.00", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG2O5", "CG321", "CG331", "OG2D3", "70.0000", "0", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2O5", "CG331", "CG331", "OG2D3", "70.0000", "0", "0.00", "ketone, acetone adm 11/08"}, {"CG2O6", "NG2S2", "NG2S2", "OG2D1", "80.0000", "0", "0.00", "UREA, Urea"}, {"CG2O6", "OG302", "OG302", "OG2D1", "145.0000", "0", "0.00", "DMCA, dimethyl carbonate, xxwy"}, {"CG2O6", "OG2D2", "OG2D2", "OG2D2", "107.0000", "0", "0.00", "PROTMOD carbonate"}, {"CG2O6", "NG2S1", "OG2D1", "OG302", "62.0000", "0", "0.00", "DMCB, dimehtyl carbamate, xxwy"}, {"CG2O6", "OG2D2", "OG2D2", "OG311", "85.0000", "0", "0.00", "CO31, bicarbonate, xxwy"}, {"CG2O6", "SG311", "SG311", "SG2D1", "80.0000", "0", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2R53", "CG251O", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG252O", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG25C1", "NG2R51", "OG2D1", "90.0000", "0", "0.00", "MEOI, methyleneoxindole, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG25C2", "NG2R51", "OG2D1", "90.0000", "0", "0.00", "MEOI, methyleneoxindole, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG3C41", "NG2R43", "OG2D1", "120.0000", "0", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C52", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "120 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG2R53", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MHYO, 5-methylenehydantoin, xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG2R51", "OG2D1", "OG3C51", "28.6000", "0", "0.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R53", "CG3C52", "OG2D1", "OG3C51", "45.0000", "0", "0.00", "GBL, Gamma-butyrolactone, ctsai"}, {"CG2R53", "NG2R53", "OG2D1", "SG311", "43.0000", "0", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy"}, {"CG2R53", "NG2R53", "SG2D1", "SG311", "43.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R63", "CG2R62", "CG2R62", "OG2D4", "15.0000", "0", "0.00", "4PYO, 4(1H)-pyridinone, isg"}, {"CG2R63", "CG2R62", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "NA T/O4, adm jr. 11/97 correct conversion"}, {"CG2R63", "CG2R62", "NG2R67", "OG2D4", "90.0000", "0", "0.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R63 CG2R62 NG2R61 OG2D4, NA; isg"}, {"CG2R63", "CG2RC0", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "NA G correct conversion"}, {"CG2R63", "NG2R61", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "RESI URAC, uracil, xxwy, from NA U WILDCARD"}, {"CG2R63", "NG2R61", "NG2R62", "OG2D4", "90.0000", "0", "0.00", "RESI CYT, cytosine, NA U WILDCARD"}, {"CG2R63", "NG2R61", "NG2R67", "OG2D4", "90.0000", "0", "0.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R63 NG2R61 NG2R61 OG2D4, URAC from NA; isg"}, {"CG2R63", "CG2R62", "OG2D4", "OG3R60", "51.0000", "0", "0.00", "RIN, coumarin, isg"}, {"CG2R63", "CG2R61", "NG2R61", "SG2D1", "31.0000", "0", "0.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "NG2R67", "SG2D1", "39.0000", "0", "0.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R63 CG2R62 NG2R61 SG2D1, YTS2; isg"}, {"CG2R63", "CG2R62", "NG2R61", "SG2D1", "39.0000", "0", "0.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone, isg"}, {"CG2R63", "CG2R62", "NG2R67", "SG2D1", "39.0000", "0", "0.00", "3PH4SR, 2,3-dihydro-3-phenyl-2-oxo-4(1H)pyrimidinethione; from CG2R63 CG2R62 NG2R61 SG2D1, YTS2; isg"}, {"CG2R63", "NG2R61", "NG2R61", "SG2D1", "84.0000", "0", "0.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "NG2R61", "NG2R67", "SG2D1", "84.0000", "0", "0.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from CG2R63 NG2R61 NG2R61 SG2D1, YTS2; isg"}, {"CG2R64", "CG2R61", "NG2R60", "NG2S1", "19.0000", "0", "0.00", "2AMP, 2-acetamide pyridine,xxwy"}, {"CG2R64", "CG2R62", "NG2R62", "NG2S3", "60.0000", "0", "0.00", "NA C"}, {"CG2R64", "CG2RC0", "NG2R62", "NG2S3", "40.0000", "0", "0.00", "NA A"}, {"CG2R64", "NG2R61", "NG2R62", "NG2S3", "40.0000", "0", "0.00", "NA G"}, {"CG2R64", "CG2R62", "NG2R62", "NG301", "40.0000", "0", "0.00", "TMC, yxu"}, {"CG2R64", "CG2RC0", "NG2R62", "NG301", "40.0000", "0", "0.00", "M6A, yxu"}, {"NG2O1", "OG2N1", "OG2N1", "CG324", "53.6000", "0", "0.00", "NIPR, nitropropane, abar"}, {"NG2O1", "OG2N1", "OG2N1", "CG334", "50.8000", "0", "0.00", "NIME, nitromethane, abar"}, {"NG2S3", "HGP4", "HGP4", "CG2R61", "-2.5000", "0", "0.00", "-2.0 PYRIDINE aminopyridine 11/10 kevo: sic! Compensates for in-plane force from CG2R61 CG2R61 NG2S3 HGP4"}, {"NG2S3", "HGP4", "HGP4", "CG2R64", "9.0000", "0", "0.00", "NA GUA ADE CYT; from artificially planar 2APY, 2-aminopyridine parameter set (12/2010); xxwy and kevo"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_cgenff info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_cgenff_vdw[156][6]= {{"HGA1", "-0.0450", "1.3400", " ", " ", "igor, 6/05"}, {"HGA2", "-0.0350", "1.3400", " ", " ", "igor, 6/05"}, {"HGA3", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HGA4", "-0.0310", "1.2500", " ", " ", "yin,adm jr., 12/95"}, {"HGA5", "-0.0260", "1.2600", " ", " ", "yin,adm jr., 12/95"}, {"HGA6", "-0.0280", "1.3200", " ", " ", " "}, {"HGA7", "-0.0300", "1.3000", " ", " ", " "}, {"HGAAM0", "-0.0280", "1.2800", " ", " ", "amines"}, {"HGAAM1", "-0.0280", "1.2800", " ", " ", "amines"}, {"HGAAM2", "-0.0400", "1.2600", " ", " ", "amines"}, {"HGP1", "-0.0460", "0.2245", " ", " ", "H"}, {"HGP2", "-0.0460", "0.2245", " ", " ", "polar Hydrogen, charged systems"}, {"HGP3", "-0.1000", "0.4500", " ", " ", "pure solvent, adm jr., 6/22/92"}, {"HGP4", "-0.0460", "0.2245", " ", " ", "H, conjugated amines (NA bases)"}, {"HGP5", "-0.0460", "0.7000", " ", " ", "H on quarternary amine (choline)"}, {"HGPAM1", "-0.0090", "0.8750", " ", " ", "amines"}, {"HGPAM2", "-0.0100", "0.8750", " ", " ", "amines"}, {"HGPAM3", "-0.0120", "0.8700", " ", " ", "amines"}, {"HGR51", "-0.0300", "1.3582", " ", " ", " "}, {"HGR52", "-0.0460", "0.9000", " ", " ", "jr., 6/27/90, his"}, {"HGR53", "-0.0460", "0.7000", " ", " ", "jr., 6/27/90, his"}, {"HGR61", "-0.0300", "1.3582", " ", " ", " "}, {"HGR62", "-0.0460", "1.1000", " ", " ", "aromatic Hvdw"}, {"HGR63", "-0.0460", "0.9000", " ", " ", "jjp1/adm jr."}, {"HGR71", "-0.0300", "1.3582", " ", " ", " "}, {"CG1T1", "-0.1670", "1.8400", " ", " ", "2-butyne, kevo and rima"}, {"CG1T2", "-0.1032", "1.9925", " ", " ", "propyne, rima and kevo"}, {"CG1N1", "-0.1800", "1.8700", " ", " ", "acetonitrile; 3CYP, 3-cyanopyridine, kevo"}, {"CG2D1", "-0.0680", "2.0900", " ", " ", "yin,adm jr., 12/95"}, {"CG2D2", "-0.0640", "2.0800", " ", " ", "yin,adm jr., 12/95"}, {"CG2D1O", "-0.0680", "2.0900", " ", " ", "bond carbon adjacent to O (pyran)"}, {"CG2D2O", "-0.0680", "2.0900", " ", " ", "bond carbon adjacent to O (pyran)"}, {"CG2DC1", "-0.0680", "2.0900", " ", " ", " "}, {"CG2DC2", "-0.0680", "2.0900", " ", " ", " "}, {"CG2DC3", "-0.0640", "2.0800", " ", " ", " "}, {"CG2N1", "-0.1100", "2.0000", " ", " ", "pure solvent, adm jr., 3/3/93"}, {"CG2N2", "-0.1100", "2.0000", " ", " ", "as CG2N1 of NMA pure solvent, adm jr., 3/3/93"}, {"CG2O1", "-0.1100", "2.0000", " ", " ", "pure solvent, adm jr., 3/3/93"}, {"CG2O2", "-0.0980", "1.7000", " ", " ", "acetate update viv 12/29/06"}, {"CG2O3", "-0.0700", "2.0000", " ", " ", "heat of solvation"}, {"CG2O4", "-0.0600", "1.8000", " ", " ", "acetaldehyde, 11/08"}, {"CG2O5", "-0.0900", "2.0000", " ", " ", "acetone, 11/08"}, {"CG2O6", "-0.0700", "2.0000", " ", " ", "CO3 (carbonate) from acetate heat of solvation"}, {"CG2O7", "-0.0580", "1.5630", " ", " ", "dioxide, JES"}, {"CG2R51", "-0.0500", "2.1000", " ", " ", "bulk solvent of 10 maybridge cmpds (kevo)"}, {"CG2R52", "-0.0200", "2.2000", " ", " ", "pyrazole; bulk solvent of 3 maybridge cmpds (kevo); consistent with CG2R64"}, {"CG2R53", "-0.0200", "2.2000", " ", " ", "imidazole; bulk solvent of 5 maybridge cmpds (kevo); consistent with CG2R64"}, {"CG2R57", "-0.0500", "2.1000", " ", " ", "from CG2R51; lf"}, {"CG25C1", "-0.0680", "2.0900", " ", " ", "as CG2DC1 but in 5-membered ring with exocyclic double bond"}, {"CG25C2", "-0.0680", "2.0900", " ", " ", "as CG2DC2 but in 5-membered ring with exocyclic double bond"}, {"CG251O", "-0.0680", "2.0900", " ", " ", "as CG2D1O but in 5-membered ring with exocyclic double bond"}, {"CG252O", "-0.0680", "2.0900", " ", " ", "as CG2D2O but in 5-membered ring with exocyclic double bond"}, {"CG2R61", "-0.0700", "1.9924", " ", " ", " "}, {"CG2R62", "-0.0900", "1.9000", " ", " ", " "}, {"CG2R63", "-0.1000", "1.9000", " ", " ", " "}, {"CG2R64", "-0.0400", "2.1000", " ", " ", "pyrimidine"}, {"CG2R66", "-0.0700", "1.9000", " ", " ", "dft"}, {"CG2R67", "-0.0700", "1.9924", " ", " ", " "}, {"CG2RC0", "-0.0990", "1.8600", " ", " ", " "}, {"CG2R71", "-0.0670", "1.9948", " ", " ", "extrapolation. TO BE REFINED!"}, {"CG2RC7", "-0.0990", "1.8600", " ", " ", "from INDO/TRP, ignoring single bond character ==> TO BE REFINED!"}, {"CG301", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT0), neopentane, from CT1, viv"}, {"CG302", "-0.0200", "2.3000", " ", " ", " "}, {"CG311", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT1), isobutane, 6/05 viv"}, {"CG312", "-0.0420", "2.0500", " ", " ", " "}, {"CG314", "-0.0310", "2.1650", "-0.01", "1.9", "extrapolation based on CG311, CG321 and CG324, kevo"}, {"CG321", "-0.0560", "2.0100", "-0.01", "1.9", "alkane (CT2), 4/98, yin, adm jr, also used by viv"}, {"CG322", "-0.0600", "1.9000", " ", " ", " "}, {"CG323", "-0.1100", "2.2000", " ", " ", "to water and F.E. of solvation, adm jr. 6/1/92"}, {"CG324", "-0.0550", "2.1750", "-0.01", "1.9", "PIP1,2,3"}, {"CG331", "-0.0780", "2.0500", "-0.01", "1.9", "alkane (CT3), 4/98, yin, adm jr; Rmin/2 modified from 2.04 to 2.05"}, {"CG334", "-0.0770", "2.2150", "-0.01", "1.9", "extrapolation based on CG331, CG321 and CG324, kevo"}, {"CG3C50", "-0.0360", "2.0100", "-0.01", "1.9", "extrapolation based on CG301, CG321 and CG3C52, kevo"}, {"CG3C51", "-0.0360", "2.0100", "-0.01", "1.9", "extrapolation based on CG311, CG321 and CG3C52, kevo"}, {"CG3C52", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"CG3C53", "-0.0350", "2.1750", "-0.01", "1.9", "extrapolation based on (CG324, CG321 and CG3C51(ex)) or (CG311, CG321 and CG3C54(ex)), kevo"}, {"CG3C54", "-0.0590", "2.1850", "-0.01", "1.9", "extrapolation based on CG324, CG321 and CG3C52, kevo"}, {"CG3C31", "-0.0560", "2.0100", "-0.01", "1.9", "cyclopropane JMW (CT2), viv"}, {"CG3C41", "-0.0650", "2.0200", "-0.01", "1.9", "CBU, cyclobutane, lsk"}, {"CG3RC1", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT1), viv"}, {"CG3AM0", "-0.0700", "1.9700", " ", " ", "amines"}, {"CG3AM1", "-0.0780", "1.9800", " ", " ", "amines"}, {"CG3AM2", "-0.0800", "1.9900", " ", " ", "amines"}, {"NG1T1", "-0.1800", "1.7900", " ", " ", "acetonitrile; 3CYP, 3-cyanopyridine, kevo"}, {"NG2D1", "-0.2000", "1.8500", " ", " ", "Schiff's base"}, {"NG2S0", "-0.2000", "1.8500", "-0.0001", "1.85", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD"}, {"NG2S1", "-0.2000", "1.8500", "-0.20", "1.55", "1,4 vdW allows the C5 dipeptide minimum to exist"}, {"NG2S2", "-0.2000", "1.8500", " ", " ", " "}, {"NG2S3", "-0.2000", "1.8500", " ", " ", " "}, {"NG2O1", "-0.2000", "1.8500", " ", " ", "nitrobenzene"}, {"NG2P1", "-0.2000", "1.8500", " ", " ", "Schiff's base"}, {"NG2R43", "-0.2000", "1.8500", " ", " ", "2-azetidinone; from 2PDO; lsk"}, {"NG2R50", "-0.2000", "1.8500", " ", " ", "Imidazole from IMIA/HS[DE]; originally from prot backbone - probably not ideal"}, {"NG2R51", "-0.2000", "1.8500", " ", " ", "Pyrrole; IMIA, Imidazole from IMIA/HS[DE] and INDO/TRP; originally from prot backbone - probably not ideal"}, {"NG2R52", "-0.2000", "1.8500", " ", " ", "imidazolium from IMIM/HSP; originally from prot backbone - probably not ideal"}, {"NG2R53", "-0.2000", "1.8500", " ", " ", "in 5-memebered ring (slightly pyramidized), 2PDO, kevo"}, {"NG2R57", "-0.2000", "1.8500", " ", " ", "from NG2R51; lf"}, {"NG2R60", "-0.0600", "1.8900", " ", " ", "pyridine"}, {"NG2R61", "-0.2000", "1.8500", " ", " ", " "}, {"NG2R62", "-0.0500", "2.0600", " ", " ", "pyrimidine"}, {"NG2R67", "-0.2000", "1.8500", " ", " ", "pyridinones etc.; from NG2R61; isg"}, {"NG2RC0", "-0.2000", "1.8500", " ", " ", "ring bridging N, indolizine, INDZ, kevo"}, {"NG301", "-0.0350", "2.0000", " ", " ", "amines"}, {"NG311", "-0.0450", "2.0000", " ", " ", "amines"}, {"NG321", "-0.0600", "1.9900", " ", " ", "amines"}, {"NG331", "-0.0700", "1.9800", " ", " ", "amines"}, {"NG3C51", "-0.2000", "1.8500", " ", " ", "2-pyrroline, kevo"}, {"NG3N1", "-0.0600", "2.0500", " ", " ", "hydrazine, ed"}, {"NG3P0", "-0.2000", "1.8500", " ", " ", "quarternary amine"}, {"NG3P1", "-0.2000", "1.8500", " ", " ", "tertiary amine"}, {"NG3P2", "-0.2000", "1.8500", " ", " ", "proline; from +ProNH2 RLD 9/28/90"}, {"NG3P3", "-0.2000", "1.8500", " ", " ", " "}, {"OG2D1", "-0.1200", "1.7000", "-0.12", "1.40", "carbonyl. Also consistent with adm, acetaldehyde, 11/08"}, {"OG2D2", "-0.1200", "1.7000", " ", " ", " "}, {"OG2D3", "-0.0500", "1.7000", "-0.12", "1.40", "adm, acetone, 11/08"}, {"OG2D4", "-0.1200", "1.7000", " ", " ", " "}, {"OG2D5", "-0.1650", "1.6920", " ", " ", "dioxide, JES"}, {"OG2N1", "-0.1200", "1.7000", " ", " ", "nitrobenzene"}, {"OG2P1", "-0.1200", "1.7000", " ", " ", " "}, {"OG2R50", "-0.1200", "1.7000", " ", " ", "furan"}, {"OG3R60", "-0.1000", "1.6500", " ", " ", "PY02, pyran; LJ from THP, sng 1/06"}, {"OG301", "-0.1000", "1.6500", " ", " ", "LJ from THP, sng 1/06 !SHOULD WE HAVE A SEPARATE ENOL ETHER??? IF YES, SHOULD WE MERGE IT WITH OG3R60???"}, {"OG302", "-0.1000", "1.6500", " ", " ", "LJ from THP, sng 1/06"}, {"OG303", "-0.1000", "1.6500", " ", " ", "ester; LJ from THP, sng 1/06"}, {"OG304", "-0.1000", "1.6500", " ", " ", "oxygen in pyrophosphate/pyrosulphate"}, {"OG311", "-0.1921", "1.7650", " ", " ", "MeOH and EtOH 1/06 (was -0.1521 1.7682)"}, {"OG312", "-0.1200", "1.7500", " ", " ", "anionic alcohol oxygen"}, {"OG3C31", "-0.1000", "1.6500", " ", " ", "from ethers; sc"}, {"OG3C51", "-0.1000", "1.6500", " ", " ", "LJ from THP, tetrahydropyran sng 1/06"}, {"OG3C61", "-0.1000", "1.6500", " ", " ", "dioxane; THP, tetrahydropyran sng 1/06 !SHOULD WE MERGE THIS WITH OG3R60???"}, {"SG2D1", "-0.5650", "2.0500", " ", " ", "dimethyl trithiocarbonate, kevo"}, {"SG2R50", "-0.4500", "2.0000", " ", " ", "thiophene"}, {"SG311", "-0.4500", "2.0000", " ", " ", "pure solvent"}, {"SG301", "-0.3800", "1.9750", " ", " ", "pure solvent"}, {"SG302", "-0.4700", "2.2000", " ", " ", "to water and F.E. of solvation, adm jr. 6/1/92"}, {"SG3O1", "-0.4700", "2.1000", " ", " ", " "}, {"SG3O2", "-0.3500", "2.0000", " ", " ", "SG3O3 (ML Strader, SE Feller, JPC-A106(6),1074(2002)), xxwy"}, {"SG3O3", "-0.3500", "2.0000", " ", " ", "Strader, SE Feller, JPC-A106(6),1074(2002), sz"}, {"FGA1", "-0.1350", "1.6300", " ", " ", " "}, {"FGA2", "-0.1050", "1.6300", " ", " ", " "}, {"FGA3", "-0.0970", "1.6000", " ", " ", " "}, {"FGP1", "-0.0970", "1.6000", " ", " ", "tetraflouride, ALF4"}, {"FGR1", "-0.1200", "1.7000", " ", " ", "F, 1,3-difluorobenzene pure solvent"}, {"CLGA1", "-0.3430", "1.9100", " ", " ", "DCLE, chloroethane, 1,1-dichloroethane"}, {"CLGA3", "-0.3100", "1.9100", " ", " ", " "}, {"BRGA1", "-0.4800", "1.9700", " ", " ", " "}, {"BRGA2", "-0.5300", "2.0500", " ", " ", " "}, {"BRGA3", "-0.5400", "2.0000", " ", " ", " "}, {"PG0", "-0.5850", "2.1500", " ", " ", "phosphate"}, {"PG1", "-0.5850", "2.1500", " ", " ", "-1"}, {"PG2", "-0.5850", "2.1500", " ", " ", "-2"}, {"ALG1", "-0.6500", "2.0000", " ", " ", "tetraflouride, ALF4"}, {"LPH", "0.0000", "0.0000", " ", " ", "on halogens attached to an aromatic group"}, {"CLGR1", "-0.2300", "1.8600", " ", " ", "chlorobenzene, adjusted for lone-pair, fylin"}, {"BRGR1", "-0.3200", "1.9800", " ", " ", "bromobenzene, adjusted for lone-pair, fylin"}, {"IGR1", "-0.5200", "2.2400", " ", " ", "iodobenzene, adjusted for lone-pair, fylin"}}; atomes_1.3.1/src/calc/force_fields/compass.c0000664000175000017500000014477315212624223020453 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file compass.c * @short Compass force field, from 'Compass.frc' * @author Sébastien Le Roux */ /* * This file: 'compass.c' * * Contains: * Compass force field, data from taken from: - the file: 'Compass.frc' This file contains several tables: Atoms : Compass_atoms[45][5] Equivalence : Compass_equivalence[46][7] Quartic bonds : Compass_bonds[54][7] Quartic angles : Compass_angles[94][8] Torsions : Compass_torsions[95][11] Inversions : Compass_inversions[22][7] Non bonded : Compass_vdw[46][4] Bond increments : Compass_bond_increments[55][5] */ #include "global.h" int Compass_objects[14] = {45, 0, 46, 0, 54, 0, 0, 94, 0, 95, 22, 0, 46, 55}; int Compass_dim[14] = {5, 0, 7, 0, 7, 0, 0, 8, 0, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Compass info */ char * Compass_atoms[45][5]= {{"Ar", "39.94400", "ar", " ", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c3a", "carbon ", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c1o", "in CO", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c2=", "in CO2 and CS2", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c3'", "carbon [one polar substituent]", "Ver. 1.0, Ref. 7"}, {"C", "12.01115", "c4", "sp3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c41o", "sp3, in methanol", "Ver. 1.0, Ref. 8"}, {"C", "12.01115", "c43o", "sp3 in secondary alcohols", "Ver. 1.0, Ref. 8"}, {"C", "12.01115", "c43", "carbon with three heavy atoms attached", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c44", "carbon with four heavy atoms attached", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4o", "carbon ", "Ver. 1.0, Ref. 3"}, {"C", "12.01115", "c4z", "sp3, bonded to -N3", "Ver. 1.0, Ref. 9"}, {"H", "1.00797", "h1", "hydrogen ", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h1h", "in H2", "Ver. 1.0, Ref. 5"}, {"H", "1.00797", "h1o", "polar hydrogen, bonded to O,F", "Ver. 1.0, Ref. 3"}, {"He", "4.00300", "he", " ", "Ver. 1.0, Ref. 5"}, {"Kr", "83.80000", "kr", " ", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1n", "in N2", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1o", "in NO", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1z", "terminal atom in -N3", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n2=", " ", "Ver. 1.0, Ref. 4"}, {"N", "14.00670", "n2o", "in NO2", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n2t", "central atom in -N3", "Ver. 1.0, Ref. 9"}, {"N", "14.00670", "n2z", "first atom in -N3", "Ver. 1.0, Ref. 9"}, {"N", "14.00670", "n3m", "nitrogen in amides without hydrogen", "Ver. 1.0, Ref. 7"}, {"N", "14.00670", "n3o", "in nitro group", "Ver. 1.0, Ref. 6"}, {"Ne", "20.18300", "ne", " ", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1=", "in NO2 and SO2 [and carbonyl]", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1=*", "in CO2", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o12", "in nitro group (-NO2)", "Ver. 1.0, Ref. 6"}, {"O", "15.99940", "o1c", "in CO", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1n", "in NO", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1o", "in O2", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o2", "oxygen with two bonds attached", "Ver. 1.0, Ref. 2"}, {"O", "15.99940", "o2e", "oxygen ", "Ver. 1.0, Ref. 3"}, {"O", "15.99940", "o2h", "oxygen ", "Ver. 1.0, Ref. 3"}, {"O", "15.99940", "o2n", "in nitrates", "Ver. 1.0, Ref. 6"}, {"O", "15.99940", "o2s", "oxygen ", "Ver. 1.0, Ref. 7"}, {"O", "15.99940", "o2z", "in siloxanes and zeolites", "Ver. 1.0, Ref. 2"}, {"P", "30.97380", "p4=", " ", "Ver. 1.0, Ref. 4"}, {"S", "32.06400", "s1=", "in CS2", "Ver. 1.0, Ref. 5"}, {"S", "32.06400", "s2=", "in SO2", "Ver. 1.0, Ref. 5"}, {"Si", "28.08600", "si4", "silicon with four bonds attached", "Ver. 1.0, Ref. 2"}, {"Si", "28.08600", "si4c", "subset of si4, non-hydrogen atom attached [siloxanes]", "Ver. 1.0, Ref. 2"}, {"Xe", "131.30000", "xe", " ", "Ver. 1.0, Ref. 5"}}; /* Equivalence table for key symbols Compass with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = Compass info */ char * Compass_equivalence[46][7]= {{"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.0, Ref. 5"}, {"c1o", "c1o", "c1o", "c1o", "c1o", "c1o", "Ver. 1.0, Ref. 5"}, {"c2=", "c2=", "c2=", "c2=", "c2=", "c2=", "Ver. 1.0, Ref. 5"}, {"c3a", "c3a", "c3a", "c3a", "c3a", "c3a", "Ver. 1.0, Ref. 1"}, {"c3'", "c3'", "c3'", "c3'", "c3'", "c3'", "Ver. 1.0, Ref. 7"}, {"c4", "c4", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c41o", "c41o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 8"}, {"c43o", "c43o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 8"}, {"c43", "c43", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c44", "c44", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c4o", "c4o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 3"}, {"c4z", "c4z", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 9"}, {"h1", "h1", "h1", "h1", "h1", "h1", "Ver. 1.0, Ref. 1"}, {"h1h", "h1h", "h1h", "h1", "h1", "h1", "Ver. 1.0, Ref. 5"}, {"h1o", "h1o", "h1", "h1", "h1", "h1", "Ver. 1.0, Ref. 3"}, {"he", "he", "he", "he", "he", "he", "Ver. 1.0, Ref. 5"}, {"kr", "kr", "kr", "kr", "kr", "kr", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "n1n", "n1n", "n1n", "n1n", "Ver. 1.0, Ref. 5"}, {"n1o", "n1o", "n1o", "n1o", "n1o", "n1o", "Ver. 1.0, Ref. 5"}, {"n1t", "n1t", "n1t", "n1t", "n1t", "n1t", "Ver. 1.2, Ref. 1"}, {"n1z", "n1z", "n1t", "n1t", "n1t", "n1t", "Ver. 1.0, Ref. 9"}, {"n2=", "n2=", "n2=", "n2=", "n2=", "n2=", "Ver. 1.0, Ref. 4"}, {"n2o", "n2o", "n2o", "n2o", "n2o", "n2o", "Ver. 1.0, Ref. 5"}, {"n2t", "n2t", "n2t", "n2t", "n2t", "n2t", "Ver. 1.0, Ref. 9"}, {"n2z", "n2z", "n2z", "n2z", "n2z", "n2z", "Ver. 1.0, Ref. 9"}, {"n3m", "n3m", "n3m", "n3m", "n3m", "n3m", "Ver. 1.0, Ref. 7"}, {"n3o", "n3o", "n3o", "n3o", "n3o", "n3o", "Ver. 1.0, Ref. 6"}, {"ne", "ne", "ne", "ne", "ne", "ne", "Ver. 1.0, Ref. 5"}, {"o1=", "o1=", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 5"}, {"o1=*", "o1=*", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 5"}, {"o12", "o12", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 6"}, {"o1c", "o1c", "o1c", "o1c", "o1c", "o1c", "Ver. 1.0, Ref. 5"}, {"o1n", "o1n", "o1n", "o1n", "o1n", "o1n", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "o1o", "o1o", "o1o", "o1o", "Ver. 1.0, Ref. 5"}, {"o2", "o2", "o2", "o2", "o2", "o2", "Ver. 1.0, Ref. 2"}, {"o2h", "o2h", "o2h", "o2", "o2", "o2", "Ver. 1.0, Ref. 3"}, {"o2e", "o2e", "o2e", "o2", "o2", "o2", "Ver. 1.0, Ref. 3"}, {"o2n", "o2n", "o2n", "o2n", "o2", "o2", "Ver. 1.0, Ref. 6"}, {"o2s", "o2s", "o2e", "o2", "o2", "o2", "Ver. 1.0, Ref. 7"}, {"o2z", "o2z", "o2z", "o2z", "o2z", "o2z", "Ver. 1.0, Ref. 2"}, {"p4=", "p4=", "p4=", "p4=", "p4=", "p4=", "Ver. 1.0, Ref. 4"}, {"s1=", "s1=", "s1=", "s1=", "s1=", "s1=", "Ver. 1.0, Ref. 5"}, {"s2=", "s2=", "s2=", "s2=", "s2=", "s2=", "Ver. 1.0, Ref. 5"}, {"si4", "si4", "si4", "si4", "si4", "si4", "Ver. 1.0, Ref. 2"}, {"si4c", "si4c", "si4", "si4", "si4", "si4", "Ver. 1.0, Ref. 2"}, {"xe", "xe", "xe", "xe", "xe", "xe", "Ver. 1.0, Ref. 5"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= Compass info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * Compass_bonds[54][7]= {{"c3a", "c3a", "1.4170", "470.8361", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"c3a", "h1", "1.0982", "372.8251", "-803.4526", "894.3173", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c4", "h1", "1.1010", "345.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"o2z", "si4", "1.6400", "350.1232", "-517.3424", "673.7067", "Ver. 1.0, Ref. 2"}, {"c3a", "o2", "1.3768", "428.8798", "-738.2350", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c3a", "o2e", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c3a", "o2h", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c4", "o2e", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 3"}, {"c4", "o2h", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 3"}, {"h1", "o2h", "0.9494", "540.3633", "-1311.8663", "2132.4446", "Ver. 1.0, Ref. 3"}, {"c3a", "n2=", "1.4000", "350.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "1.7890", "197.7020", "-332.2510", "325.7160", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "1.4740", "337.0600", "-147.3700", "213.6330", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "1.8000", "218.1400", "-329.5110", "290.3490", "Ver. 1.0, Ref. 4"}, {"cl1p", "p4=", "2.0000", "158.7770", "-239.1290", "210.0840", "Ver. 1.0, Ref. 4"}, {"f1p", "p4=", "1.5650", "340.0000", "-882.3840", "1197.9190", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "1.0310", "540.1120", "-1500.2952", "2431.0080", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "1.4300", "285.2040", "-575.6850", "677.8460", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "1.5980", "393.0060", "-751.4050", "767.4310", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "1.6780", "329.0000", "-713.7950", "902.9190", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "1.6000", "333.0980", "-726.6230", "924.6200", "Ver. 1.0, Ref. 4"}, {"h1h", "h1h", "0.7412", "414.2185", "-805.6549", "914.1296", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "1.0977", "1651.3730", "-4069.3178", "5984.9629", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "1.2074", "846.7150", "-2247.1760", "3478.9900", "Ver. 1.0, Ref. 5"}, {"c1o", "o1c", "1.1283", "1368.7676", "-3157.0007", "4247.5298", "Ver. 1.0, Ref. 5"}, {"n1o", "o1n", "1.1506", "1147.8362", "-3167.7349", "5099.5811", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "1.4308", "730.8387", "-1531.7910", "1859.7753", "Ver. 1.0, Ref. 5"}, {"c2=", "o1=", "1.1600", "1161.3421", "-2564.5706", "3932.8735", "Ver. 1.0, Ref. 5"}, {"n2o", "o1=", "1.1930", "620.0000", "-1808.6018", "3077.5918", "Ver. 1.0, Ref. 5"}, {"c2=", "s1=", "1.5540", "559.0065", "-1348.6633", "1248.8604", "Ver. 1.0, Ref. 5"}, {"c3a", "n3o", "1.4300", "313.8329", "-568.6087", "600.9597", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "1.4740", "301.6051", "-535.7028", "555.0420", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "1.4350", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "1.0400", "439.9346", "-943.7307", "1180.9318", "Ver. 1.0, Ref. 6"}, {"n3o", "o1=", "1.2100", "765.0664", "-2070.2830", "2793.3218", "Ver. 1.0, Ref. 6"}, {"n3o", "o2n", "1.4020", "300.0000", "-1000.0000", "2000.0000", "Ver. 1.0, Ref. 6"}, {"c3'", "o2e", "1.3750", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 1.0, Ref. 7"}, {"c3'", "o1=", "1.2160", "823.7948", "-1878.7939", "2303.5310", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "1.3850", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "1.3950", "344.0452", "-652.1208", "1022.2242", "Ver. 1.0, Ref. 7"}, {"n1z", "n1z", "1.1354", "1337.7450", "-2675.4900", "3121.4049", "Ver. 1.0, Ref. 9"}, {"n2z", "n2t", "1.2343", "720.3345", "-1542.6689", "1799.7804", "Ver. 1.0, Ref. 9"}, {"n2t", "n1z", "1.1354", "1198.7450", "-2675.4900", "3121.4049", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "1.4814", "324.4578", "-648.9156", "757.0681", "Ver. 1.0, Ref. 9"}, {"n2z", "h1", "1.0221", "440.1623", "-960.3246", "1120.3787", "Ver. 1.0, Ref. 9"}, {"c3a", "si4", "1.8634", "233.2433", "-276.8692", "161.6659", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "1.8995", "189.6536", "-279.4210", "307.5135", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "1.4783", "202.7798", "-305.3603", "280.2685", "Ver. 1.0, Ref. 10"}, {"si4", "si4", "2.3384", "114.2164", "-140.4212", "80.7084", "Ver. 1.0, Ref. 10"}, {"c4", "n3m", "1.4000", "350.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 10"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= Compass info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * Compass_angles[94][8]= {{"c3a", "c3a", "c3a", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "h1", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c3a", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c4", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "h1", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "h1", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"h1", "c4", "h1", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"h1", "o2z", "si4", "122.8000", "23.7764", "-19.8152", "9.6331", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "159.0000", "8.5000", "-13.4188", "-4.1785", "Ver. 1.0, Ref. 2"}, {"c3a", "si4", "o2z", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 2"}, {"c4", "si4", "o2z", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 2"}, {"h1", "si4", "o2z", "107.4000", "57.6643", "-10.6506", "4.6274", "Ver. 1.0, Ref. 2"}, {"o2z", "si4", "o2z", "110.7000", "70.3069", "-6.9375", "0.0000", "Ver. 1.0, Ref. 2"}, {"c3a", "c3a", "o2", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 3"}, {"c3a", "o2", "c4", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 3"}, {"c3a", "o2", "h1", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 3"}, {"c4", "o2", "c4", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 3"}, {"c4", "o2", "h1", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "n2=", "120.0000", "60.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "120.0010", "47.8410", "-15.2290", "-10.9070", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "n2=", "117.3170", "55.2420", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "n2=", "107.4990", "62.7310", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "110.8860", "33.8300", "-7.0430", "-7.2460", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "h1", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "h1", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "120.0000", "26.0680", "-8.2980", "-5.9430", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "135.0000", "23.8680", "-8.7360", "0.0000", "Ver. 1.0, Ref. 4"}, {"c4", "n3m", "p4=", "120.0830", "25.0010", "-6.1170", "-5.4570", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "120.0830", "25.0010", "-6.1170", "-5.4570", "Ver. 1.0, Ref. 4"}, {"c4", "o2", "p4=", "118.2830", "35.0010", "-10.3600", "-7.8700", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "117.0000", "26.0310", "-5.8280", "-5.6200", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "c3a", "110.2310", "56.1850", "-17.3160", "-12.7280", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "h1", "108.2310", "36.1850", "-6.4880", "-7.6460", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "n2=", "109.6000", "63.0620", "-19.7400", "-14.3290", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "n3m", "108.1650", "70.9770", "-11.5480", "-15.1090", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "o2", "107.3650", "71.9770", "-10.9430", "-15.2900", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "c4", "102.5000", "48.2320", "-5.7980", "-9.9660", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "h1", "102.9000", "52.0710", "-6.4680", "-10.7730", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "n2=", "119.3000", "47.3660", "-14.6410", "-10.7360", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "h1", "101.4080", "39.6950", "-5.1340", "-8.2270", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "n2=", "110.0330", "45.9780", "-14.0520", "-10.3990", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "n3m", "103.9780", "68.2570", "-9.2210", "-14.1740", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "o2", "103.9780", "73.2570", "-9.8970", "-15.2120", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "n2=", "125.0000", "90.5230", "-20.8010", "-19.6020", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "n3m", "123.2150", "89.9230", "-32.6120", "-21.0960", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "o2", "112.2150", "99.9230", "-32.0930", "-22.8210", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "n3m", "107.1000", "85.7690", "-5.7790", "-17.4890", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "o2", "108.3000", "86.7690", "-5.1750", "-17.6710", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "o2", "107.5000", "86.7690", "-4.5700", "-17.8520", "Ver. 1.0, Ref. 4"}, {"o1=", "c2=", "o1=", "180.0000", "57.1000", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"s1=", "c2=", "s1=", "180.0000", "48.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"o1=", "n2o", "o1=", "134.1000", "150.0000", "-82.1013", "-40.0005", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "o1=", "119.3000", "115.2627", "-35.6278", "-26.1261", "Ver. 1.0, Ref. 5"}, {"c3a", "c3a", "n3o", "118.8000", "29.2436", "-8.8495", "-6.6020", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "n3o", "107.0000", "54.9318", "-9.1333", "-11.5434", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "o2n", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 6"}, {"c3a", "n3o", "o1=", "117.7000", "63.9404", "-18.4524", "-14.3129", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "o1=", "117.5000", "64.5228", "-18.4582", "-14.4215", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "o1=", "115.7000", "53.8034", "-14.1991", "-11.8708", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o1=", "128.0000", "95.1035", "-47.4240", "-27.9164", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "n3o", "108.5000", "55.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "o2n", "105.0000", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 6"}, {"o2n", "n3o", "o1=", "112.8000", "85.5228", "-18.4582", "-14.4215", "Ver. 1.0, Ref. 6"}, {"c3'", "o2", "c4", "109.0000", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "h1", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "116.0640", "71.2598", "-15.8273", "2.0506", "Ver. 1.0, Ref. 7"}, {"c3a", "c3'", "n3m", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 1.0, Ref. 7"}, {"c3a", "c3'", "o1=", "125.5320", "72.3167", "-16.0650", "2.0818", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "n3m", "120.7640", "73.2738", "-27.4033", "13.3920", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "c3'", "120.0700", "47.1131", "-32.5592", "13.1257", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "o2", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "c4", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 7"}, {"o2", "c3'", "c4", "100.3182", "88.8631", "-3.8323", "-7.9802", "Ver. 1.0, Ref. 7"}, {"n3m", "c3'", "o1=", "121.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 7"}, {"n2z", "n2t", "n1z", "171.6211", "47.7899", "0.0000", "0.0000", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "h1", "110.0345", "55.7635", "0.6618", "0.0022", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "113.5017", "82.6294", "0.9845", "0.0033", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "h1", "107.9744", "52.7803", "0.6615", "0.0023", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "c4", "110.9900", "77.9387", "0.9499", "0.0033", "Ver. 1.0, Ref. 9"}, {"c3a", "c3a", "si4", "120.0000", "30.4689", "-23.5439", "0.0000", "Ver. 1.0, Ref. 10"}, {"c4", "c4", "si4", "112.6700", "39.5160", "-7.4430", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "c4", "si4", "112.0355", "28.7721", "-13.9523", "0.0000", "Ver. 1.0, Ref. 10"}, {"c3a", "si4", "h1", "109.5932", "41.9497", "-42.3639", "48.1442", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "c4", "113.1855", "36.2069", "-20.3939", "20.0172", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "h1", "112.0977", "36.4832", "-12.8094", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "h1", "108.6051", "32.5415", "-8.3164", "0.0000", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "si4", "113.0000", "19.4692", "-34.3471", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "si4", "112.0893", "22.5062", "-11.5926", "0.0000", "Ver. 1.0, Ref. 10"}, {"si4", "si4", "si4", "114.2676", "24.9501", "-19.5949", "0.0000", "Ver. 1.0, Ref. 10"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= Compass info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * Compass_torsions[95][11]= {{"c3a", "c3a", "c3a", "c3a", "8.3667", "0.0", "1.2000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "c4", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "h1", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c3a", "c3a", "h1", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "c3a", "c3a", "h1", "0.0000", "0.0", "2.3500", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "c3a", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "c4", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "h1", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c4", "h1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "c4", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "h1", "0.0000", "0.0", "0.0316", "0.0", "-0.1681", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "c4", "c4", "h1", "-0.1432", "0.0", "0.0617", "0.0", "-0.1530", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c3a", "c3a", "*", "0.0000", "0.0", "4.5000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c4", "c4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.1530", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "o2z", "si4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"h1", "o2z", "si4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"h1", "o2z", "si4", "o2z", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "o2z", "-0.2250", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"*", "o2z", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"c3a", "c3a", "c3a", "o2", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c3a", "c3a", "o2", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "o2", "c4", "0.0000", "0.0", "1.5000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "o2", "h1", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "c4", "o2", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "c4", "o2", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 3"}, {"o2", "c4", "c4", "o2", "1.1000", "0.0", "-0.0500", "0.0", "-0.1441", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "c4", "-0.4000", "0.0", "-0.4028", "0.0", "-0.2450", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "h1", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "c3a", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "c4", "0.5302", "0.0", "0.0000", "0.0", "-0.3966", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "h1", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "c3a", "p4=", "0.0000", "0.0", "5.4770", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c3a", "c3a", "p4=", "0.0000", "0.0", "2.2700", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "h1", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "n2=", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "c4", "n2=", "0.0970", "0.0", "0.0720", "0.0", "-0.2580", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "c4", "n2=", "-0.1510", "0.0", "0.0100", "0.0", "-0.1860", "0.0", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "n2=", "h1", "-5.0720", "0.0", "-0.4980", "0.0", "-0.4380", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "n2=", "h1", "1.2660", "0.0", "-0.7740", "0.0", "0.0380", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "n2=", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "c3a", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.3690", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "o2", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "n2=", "1.8000", "0.0", "0.5000", "0.0", "2.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "n2=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "o2", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "h1", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "n2=", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "o2", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "o2", "p4=", "*", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c3a", "n2=", "*", "0.0000", "0.0", "1.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c3a", "p4=", "*", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c4", "n2=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0200", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c4", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "n2=", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "n3m", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "n3o", "0.0000", "0.0", "7.2124", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "c3a", "c3a", "n3o", "0.0000", "0.0", "2.9126", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3a", "c3a", "n3o", "o1=", "0.0000", "0.0", "1.1600", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "n3o", "o1=", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "n3o", "o1=", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "o2", "n3o", "0.0000", "0.0", "-0.4000", "0.0", "-0.2000", "0.0", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o2", "c4", "0.0000", "0.0", "2.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3'", "c3a", "c3a", "c3a", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "c3a", "h1", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3a", "c3a", "0.0000", "0.0", "0.6500", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "o1c", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "o2", "c4", "c4", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "o2", "c4", "h1", "0.9513", "0.0", "0.1155", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "o1=", "0.0000", "0.0", "0.7800", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3a", "n3m", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "c3'", "o1=", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "o2", "c3'", "c4", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "o2", "c3'", "o1=", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"o2", "c3'", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"n3m", "c3a", "c3a", "h1", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"h1", "n2z", "n2t", "n1z", "0.0000", "0.0", "0.0000", "0.0", "-0.2637", "0.0", "Ver. 1.0, Ref. 9"}, {"c4", "n2z", "n2t", "n1z", "0.0000", "0.0", "0.0000", "0.0", "-0.1823", "0.0", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.2181", "0.0", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.2021", "0.0", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.2259", "0.0", "Ver. 1.0, Ref. 9"}, {"c3a", "c3a", "c3a", "si4", "0.0000", "0.0", "4.3270", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 10"}, {"h1", "c3a", "c3a", "si4", "0.0000", "0.0", "1.5093", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 10"}, {"c3a", "c3a", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 1.0, Ref. 10"}, {"c4", "c4", "si4", "si4", "-0.3500", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}, {"*", "c4", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}, {"*", "si4", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= Compass info E = K * (Chi - Chi0)^2 */ char * Compass_inversions[22][7]= {{"c3a", "c3a", "c3a", "c3a", "7.1794", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "c4", "7.8153", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "h1", "4.8912", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "o2", "13.0421", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "c3a", "n2=", "8.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "p4=", "6.7090", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "n3o", "0.9194", "0.0", "Ver. 1.0, Ref. 6"}, {"c3a", "n3o", "o1=", "o1=", "36.2612", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "o1=", "o1=", "44.3062", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "o1=", "o1=", "38.5581", "0.0", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o1=", "o2", "45.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3'", "c3'", "n3m", "c3a", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "c3a", "c3a", "17.0526", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "c3a", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "n3m", "c3a", "17.0526", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3a", "n3m", "17.0526", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "c3'", "n3m", "o1=", "30.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "c3a", "17.0526", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "c3'", "o1=", "n3m", "30.0000", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "o1=", "c3'", "n3m", "30.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "c3'", "o2", "o1=", "46.9264", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "si4", "c3a", "5.3654", "0.0", "Ver. 1.0, Ref. 10"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= Compass info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * Compass_vdw[46][4]= {{"c3a", "3.9150", "0.0680", "Ver. 1.0, Ref. 1"}, {"c4", "3.8540", "0.0620", "Ver. 1.0, Ref. 1"}, {"c43", "3.8540", "0.0400", "Ver. 1.0, Ref. 1"}, {"c44", "3.8540", "0.0200", "Ver. 1.0, Ref. 1"}, {"h1", "2.8780", "0.0230", "Ver. 1.0, Ref. 1"}, {"o2z", "3.3000", "0.0800", "Ver. 1.0, Ref. 2"}, {"si4", "4.4050", "0.1980", "Ver. 1.0, Ref. 2"}, {"si4c", "4.2900", "0.1310", "Ver. 1.0, Ref. 2"}, {"c4o", "3.8150", "0.0680", "Ver. 1.0, Ref. 3"}, {"h1o", "1.0870", "0.0080", "Ver. 1.0, Ref. 3"}, {"o2", "3.3000", "0.0800", "Ver. 1.0, Ref. 3"}, {"o2e", "3.3000", "0.1200", "Ver. 1.0, Ref. 3"}, {"o2h", "3.5800", "0.0960", "Ver. 1.0, Ref. 3"}, {"n2=", "3.8300", "0.0960", "Ver. 1.0, Ref. 4"}, {"p4=", "4.2950", "0.0650", "Ver. 1.0, Ref. 4"}, {"he", "2.9000", "0.0050", "Ver. 1.0, Ref. 5"}, {"ne", "3.2000", "0.0550", "Ver. 1.0, Ref. 5"}, {"ar", "3.8800", "0.2000", "Ver. 1.0, Ref. 5"}, {"kr", "4.3000", "0.2800", "Ver. 1.0, Ref. 5"}, {"xe", "4.2600", "0.3900", "Ver. 1.0, Ref. 5"}, {"h1h", "1.4210", "0.0216", "Ver. 1.0, Ref. 5"}, {"n1n", "3.8008", "0.0598", "Ver. 1.0, Ref. 5"}, {"c1o", "4.0120", "0.0530", "Ver. 1.0, Ref. 5"}, {"o1o", "3.4758", "0.0780", "Ver. 1.0, Ref. 5"}, {"o1c", "3.6020", "0.0850", "Ver. 1.0, Ref. 5"}, {"n1o", "3.4600", "0.1280", "Ver. 1.0, Ref. 5"}, {"o1n", "3.3000", "0.1560", "Ver. 1.0, Ref. 5"}, {"c2=", "3.9150", "0.0680", "Ver. 1.0, Ref. 5"}, {"s2=", "4.0470", "0.1250", "Ver. 1.0, Ref. 5"}, {"n2o", "3.5290", "0.3330", "Ver. 1.0, Ref. 5"}, {"o1=", "3.4300", "0.1920", "Ver. 1.0, Ref. 5"}, {"o1=*", "3.3600", "0.0670", "Ver. 1.0, Ref. 5"}, {"s1=", "4.0070", "0.3130", "Ver. 1.0, Ref. 5"}, {"n3o", "3.7600", "0.0480", "Ver. 1.0, Ref. 6"}, {"o12", "3.4000", "0.0480", "Ver. 1.0, Ref. 6"}, {"o2n", "3.6500", "0.2000", "Ver. 1.0, Ref. 6"}, {"c3'", "3.9000", "0.0640", "Ver. 1.0, Ref. 7"}, {"n3m", "3.7200", "0.1500", "Ver. 1.0, Ref. 7"}, {"o2s", "3.3000", "0.0960", "Ver. 1.0, Ref. 7"}, {"c4o", "3.8700", "0.0748", "Ver. 1.1, Ref. 8"}, {"c41o", "3.8700", "0.1080", "Ver. 1.1, Ref. 8"}, {"c43o", "3.8150", "0.0680", "Ver. 1.2, Ref. 10"}, {"c4z", "3.6500", "0.0800", "Ver. 1.0, Ref. 9"}, {"n1z", "3.5200", "0.0850", "Ver. 1.0, Ref. 9"}, {"n2t", "3.3000", "0.0500", "Ver. 1.0, Ref. 9"}, {"n2z", "3.4000", "0.1200", "Ver. 1.0, Ref. 9"}}; /* Bond increments To implement atomic charges */ char * Compass_bond_increments[55][5]= {{"c3a", "c3a", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "h1", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c4", "h1", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"o2z", "si4", "-0.2225", "0.2225", "Ver. 1.0, Ref. 2"}, {"c3a", "o2e", "0.0420", "-0.0420", "Ver. 1.0, Ref. 3"}, {"c3a", "o2h", "0.0420", "-0.0420", "Ver. 1.0, Ref. 3"}, {"c4", "o2e", "0.1600", "-0.1600", "Ver. 1.0, Ref. 3"}, {"c4", "o2h", "0.1600", "-0.1600", "Ver. 1.0, Ref. 3"}, {"h1", "o2", "0.4200", "-0.4200", "Ver. 1.0, Ref. 3"}, {"h1", "o2h", "0.4200", "-0.4200", "Ver. 1.0, Ref. 3"}, {"c3a", "n2=", "0.1990", "-0.1990", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "-0.0600", "0.0600", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "0.3450", "-0.3450", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "-0.0500", "0.0500", "Ver. 1.0, Ref. 4"}, {"cl1p", "p4=", "-0.1200", "0.1200", "Ver. 1.0, Ref. 4"}, {"f1p", "p4=", "-0.1800", "0.1800", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "0.3280", "-0.3280", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "-0.0500", "0.0500", "Ver. 1.0, Ref. 4"}, {"n2=", "n2=", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"n2=", "n3", "0.0250", "-0.0250", "Ver. 1.0, Ref. 4"}, {"n2=", "o2", "-0.0430", "0.0430", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "-0.3500", "0.3500", "Ver. 1.0, Ref. 4"}, {"n3", "p4=", "-0.1200", "0.1200", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "-0.1400", "0.1400", "Ver. 1.0, Ref. 4"}, {"c1o", "o1c", "-0.0203", "0.0203", "Ver. 1.0, Ref. 5"}, {"c2=", "o1=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 5"}, {"c2=", "s1=", "0.0258", "-0.0258", "Ver. 1.0, Ref. 5"}, {"n2o", "o1=", "0.0730", "-0.0730", "Ver. 1.0, Ref. 5"}, {"h1h", "h1h", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"n1o", "o1n", "0.0288", "-0.0288", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "-0.2351", "0.2351", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"c3a", "n3o", "0.2390", "-0.2390", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "0.2100", "-0.2100", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "0.3170", "-0.3170", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "0.1880", "-0.1880", "Ver. 1.0, Ref. 6"}, {"n3o", "o1=", "0.4280", "-0.4280", "Ver. 1.0, Ref. 6"}, {"n3o", "o2n", "0.0010", "-0.0010", "Ver. 1.0, Ref. 6"}, {"c3'", "o2e", "0.1120", "-0.1120", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3'", "o1=", "0.4500", "-0.4500", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "0.0350", "-0.0350", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "0.0000", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "0.0950", "-0.0950", "Ver. 1.0, Ref. 7"}, {"h1", "o2h", "0.4100", "-0.4100", "Ver. 1.1, Ref. 8"}, {"n2z", "c4", "-0.3110", "0.3110", "Ver. 1.0, Ref. 9"}, {"n2z", "h1", "-0.3350", "0.3350", "Ver. 1.0, Ref. 9"}, {"n2t", "n1t", "0.3860", "-0.3860", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "0.2470", "-0.2470", "Ver. 1.0, Ref. 9"}, {"c3a", "si4", "-0.1170", "0.1170", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "-0.1350", "0.1350", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "-0.1260", "0.1260", "Ver. 1.0, Ref. 10"}}; atomes_1.3.1/src/calc/force_fields/oplsaap.c0000664000175000017500000062147115212624223020440 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file oplsaap.c * @short OPLSAAM force field * @author Sébastien Le Roux */ /* * This file: 'oplsaap.c' * * Contains: * OPLSAAM force field This file contains several tables: Atoms : OPLSAAM_atoms[78][4] Bonds : OPLSAAM_bonds[159][4] Angles : OPLSAAM_angles[437][5] Dihedrals : OPLSAAM_dihedrals[1446][7] Impropers : OPLSAAM_impropers[105][[7] Non bonded : OPLSAAM_vdw[78][7] */ #include "global.h" /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= OPLSAAM info */ int OPLSAAM_objects[14] = {78, 0, 0, 159, 0, 0, 437, 0, 1446, 0 , 0, 105, 78, 0}; int OPLSAAM_dim[14] = {4, 0, 0, 4, 0, 0, 5, 0, 7, 0, 0, 7, 7, 0}; /* Atoms */ char * OPLSAAM_atoms[78][4]= {{"C", "12.01100", "C135", "CH3 all-atom C: alkanes ALL-ATOM "}, {"C", "12.01100", "C136", "CH2 all-atom C: alkanes PARAMETERS"}, {"C", "12.01100", "C137", "CH all-atom C: alkanes FROM HERE ON"}, {"C", "12.01100", "C145", "Benzene C - 12 site JACS,112,4768-90"}, {"C", "12.01100", "C149", "all-atom C: CH2, ethyl benzene"}, {"C", "12.01100", "C157", "all-atom C: CH3 and CH2, alcohols"}, {"C", "12.01100", "C158", "all-atom C: CH, alcohols"}, {"C", "12.01100", "C166", "C(OH) phenol Use with all"}, {"C", "12.01100", "C206", "all-atom C: CH2, thiols"}, {"C", "12.01100", "C209", "all-atom C: CH3, sulfides"}, {"C", "12.01100", "C210", "all-atom C: CH2, sulfides"}, {"C", "12.01100", "C214", "all-atom C: CH2, disulfides"}, {"C", "12.01100", "C223", "C in RCH2NH2 and Gly CA (See 900 for amines)"}, {"C", "12.01100", "C224", "C in R2CHNH2 and Ala CA"}, {"C", "12.01100", "C235", "C: C=O in amide. Acyl R in amides"}, {"C", "12.01100", "C242", "C on N: secondary N-Me amide"}, {"C", "12.01100", "C245", "C on N: tertiary N-CH2R amide (Pro Cdelta)"}, {"C", "12.01100", "C246", "C on N: tertiary N-CHR2 amide (Pro Calpha)"}, {"C", "12.01100", "C267", "Co in CCOOH carboxylic acid"}, {"C", "12.01100", "C271", "C in COO- carboxylate"}, {"C", "12.01100", "C274", "C: CH2, carboxylate ion"}, {"C", "12.01100", "C283", "AA C-alpha on C-terminal ALA"}, {"C", "12.01100", "C284", "AA C-alpha on C-terminal GLY"}, {"C", "12.01100", "C285", "AA C-alpha on C-terminal PRO"}, {"C", "12.01100", "C292", "C in RCH2NH3+ and CA in N-term Gly"}, {"C", "12.01100", "C293", "C in R2CHNH3+ and CA in N-term Ala, etc."}, {"C", "12.01100", "C295", "AA:C-alpha in N-term PRO"}, {"C", "12.01100", "C296", "AA:C-delta in N-term PRO"}, {"C", "12.01100", "C302", "C: guanidinium C+"}, {"C", "12.01100", "C307", "C: CH2(D), ARG, ethylguanidinium"}, {"C", "12.01100", "C308", "C: CH2(G), ARG"}, {"C", "12.01100", "C500", "CG in TRP"}, {"C", "12.01100", "C501", "CD C in TRP"}, {"C", "12.01100", "C502", "CE C in TRP"}, {"C", "12.01100", "C505", "CB in HIS"}, {"C", "12.01100", "C506", "CE1 in HID, HIE"}, {"C", "12.01100", "C507", "CD2 in HID, CG in HIE"}, {"C", "12.01100", "C508", "CG in HID, CD2 in HIE"}, {"C", "12.01100", "C509", "CE1 in HIP"}, {"C", "12.01100", "C510", "CG, CD2 in HIP"}, {"C", "12.01100", "C514", "CD1 in TRP"}, {"H", "1.00800", "H140", "H all-atom H: alkanes"}, {"H", "1.00800", "H146", "Benzene H - 12 site"}, {"H", "1.00800", "H155", "all-atom H(O): mono alcohols"}, {"H", "1.00800", "H168", "H phenol 145 and 146"}, {"H", "1.00800", "H204", "all-atom H(S): thiols (mod 11/99)"}, {"H", "1.00800", "H240", "H on N: primary amide"}, {"H", "1.00800", "H241", "H on N: secondary amide"}, {"H", "1.00800", "H270", "H in CCOOH"}, {"H", "1.00800", "H290", "H (RNH3+)"}, {"H", "1.00800", "H301", "H: guanidinium NH2"}, {"H", "1.00800", "H304", "H: guanidinium NHR"}, {"H", "1.00800", "H310", "H (R2NH2+)"}, {"H", "1.00800", "H504", "H on NE in TRP"}, {"H", "1.00800", "H513", "H on N in HIP"}, {"N", "14.00700", "N237", "N: primary amide. alkane parameters."}, {"N", "14.00700", "N238", "N: secondary amide 279 for formyl H."}, {"N", "14.00700", "N239", "N: tertiary amide"}, {"N", "14.00700", "N287", "N (RNH3+)"}, {"N", "14.00700", "N300", "N: guanidinium NH2"}, {"N", "14.00700", "N303", "N: guanidinium NHR"}, {"N", "14.00700", "N309", "N (R2NH2+)"}, {"N", "14.00700", "N503", "NE in TRP"}, {"N", "14.00700", "N511", "NE in HID, ND in HIE"}, {"N", "14.00700", "N512", "N in HIP"}, {"O", "15.99940", "O154", "all-atom O: mono alcohols"}, {"O", "15.99940", "O167", "O phenol atom C, H"}, {"O", "15.99940", "O236", "O: C=O in amide. is neutral - use"}, {"O", "15.99940", "O268", "Oh in CCOOH R in RCOOH is"}, {"O", "15.99940", "O269", "Oc in CCOOH neutral; use 135-140"}, {"O", "15.99940", "O272", "O: O in COO- carboxylate"}, {"S", "32.06000", "S200", "all-atom S: thiols (mod 11/99)"}, {"S", "32.06000", "S202", "all-atom S: sulfides"}, {"S", "32.06000", "S203", "all-atom S: disulfides"}, {"O", "15.99940", "OT", " "}, {"H", "1.00800", "HT", " "}, {"Na", "22.98977", "SOD", "Sodium Ion, adm jr."}, {"Cl", "35.45000", "CLA", "Chloride Ion, adm jr."}}; /* Bonds */ char * OPLSAAM_bonds[159][4]= {{"OT", "HT", "450.0", "0.9572"}, {"HT", "HT", "0.0", "1.5139"}, {"S203", "S203", "166.0", "2.038"}, {"C135", "C136", "268.00", "1.529"}, {"C135", "C137", "268.00", "1.529"}, {"C135", "C158", "268.00", "1.529"}, {"C135", "C224", "268.00", "1.529"}, {"C135", "C235", "317.00", "1.522"}, {"C135", "C283", "268.00", "1.529"}, {"C135", "C293", "268.00", "1.529"}, {"C135", "H140", "340.00", "1.090"}, {"C136", "C136", "268.00", "1.529"}, {"C136", "C137", "268.00", "1.529"}, {"C136", "C210", "268.00", "1.529"}, {"C136", "C224", "268.00", "1.529"}, {"C136", "C235", "317.00", "1.522"}, {"C136", "C245", "268.00", "1.529"}, {"C136", "C246", "268.00", "1.529"}, {"C136", "C267", "317.00", "1.522"}, {"C136", "C274", "268.00", "1.529"}, {"C136", "C283", "268.00", "1.529"}, {"C136", "C285", "268.00", "1.529"}, {"C136", "C292", "268.00", "1.529"}, {"C136", "C293", "268.00", "1.529"}, {"C136", "C295", "268.00", "1.529"}, {"C136", "C296", "268.00", "1.529"}, {"C136", "C308", "268.00", "1.529"}, {"C136", "C500", "317.00", "1.495"}, {"C136", "H140", "340.00", "1.090"}, {"C137", "C224", "268.00", "1.529"}, {"C137", "C283", "268.00", "1.529"}, {"C137", "C293", "268.00", "1.529"}, {"C137", "H140", "340.00", "1.090"}, {"C145", "C145", "469.00", "1.400"}, {"C145", "C149", "317.00", "1.510"}, {"C145", "C166", "469.00", "1.400"}, {"C145", "C501", "469.00", "1.404"}, {"C145", "C502", "469.00", "1.400"}, {"C145", "H146", "367.00", "1.080"}, {"C149", "C224", "268.00", "1.529"}, {"C149", "C283", "268.00", "1.529"}, {"C149", "C293", "268.00", "1.529"}, {"C149", "H140", "340.00", "1.090"}, {"C157", "C224", "268.00", "1.529"}, {"C157", "C283", "268.00", "1.529"}, {"C157", "C293", "268.00", "1.529"}, {"C157", "H140", "340.00", "1.090"}, {"C157", "O154", "320.00", "1.410"}, {"C158", "C224", "268.00", "1.529"}, {"C158", "C283", "268.00", "1.529"}, {"C158", "C293", "268.00", "1.529"}, {"C158", "H140", "340.00", "1.090"}, {"C158", "O154", "320.00", "1.410"}, {"C166", "O167", "450.00", "1.364"}, {"C206", "C224", "268.00", "1.529"}, {"C206", "C283", "268.00", "1.529"}, {"C206", "C293", "268.00", "1.529"}, {"C206", "H140", "340.00", "1.090"}, {"C206", "S200", "222.00", "1.810"}, {"C209", "H140", "340.00", "1.090"}, {"C209", "S202", "222.00", "1.810"}, {"C210", "H140", "340.00", "1.090"}, {"C210", "S202", "222.00", "1.810"}, {"C214", "C224", "268.00", "1.529"}, {"C214", "C283", "268.00", "1.529"}, {"C214", "C293", "268.00", "1.529"}, {"C214", "H140", "340.00", "1.090"}, {"C214", "S203", "222.00", "1.810"}, {"C223", "C235", "317.00", "1.522"}, {"C223", "H140", "340.00", "1.090"}, {"C223", "N238", "337.00", "1.449"}, {"C223", "C267", "317.00", "1.522"}, {"C224", "C235", "317.00", "1.522"}, {"C224", "C267", "317.00", "1.522"}, {"C224", "C274", "268.00", "1.529"}, {"C224", "C505", "268.00", "1.529"}, {"C224", "H140", "340.00", "1.090"}, {"C224", "N238", "337.00", "1.449"}, {"C235", "C246", "317.00", "1.522"}, {"C235", "C292", "317.00", "1.522"}, {"C235", "C293", "317.00", "1.522"}, {"C235", "C295", "317.00", "1.522"}, {"C235", "N237", "490.00", "1.335"}, {"C235", "N238", "490.00", "1.335"}, {"C235", "N239", "490.00", "1.335"}, {"C235", "O236", "570.00", "1.229"}, {"C242", "H140", "340.00", "1.090"}, {"C242", "N238", "337.00", "1.449"}, {"C245", "H140", "340.00", "1.090"}, {"C245", "N239", "337.00", "1.449"}, {"C246", "H140", "340.00", "1.090"}, {"C246", "N239", "337.00", "1.449"}, {"C267", "O268", "450.00", "1.364"}, {"C267", "O269", "570.00", "1.229"}, {"C271", "C274", "317.00", "1.522"}, {"C271", "C283", "317.00", "1.522"}, {"C271", "C284", "317.00", "1.522"}, {"C271", "C285", "317.00", "1.522"}, {"C271", "O272", "656.00", "1.250"}, {"C274", "C283", "268.00", "1.529"}, {"C274", "C293", "268.00", "1.529"}, {"C274", "H140", "340.00", "1.090"}, {"C283", "C505", "268.00", "1.529"}, {"C283", "H140", "340.00", "1.090"}, {"C283", "N238", "337.00", "1.449"}, {"C284", "H140", "340.00", "1.090"}, {"C284", "N238", "337.00", "1.449"}, {"C285", "H140", "340.00", "1.090"}, {"C285", "N239", "337.00", "1.449"}, {"C292", "H140", "340.00", "1.090"}, {"C292", "N287", "367.00", "1.471"}, {"C293", "C505", "268.00", "1.529"}, {"C293", "H140", "340.00", "1.090"}, {"C293", "N287", "367.00", "1.471"}, {"C295", "H140", "340.00", "1.090"}, {"C295", "N309", "367.00", "1.471"}, {"C296", "H140", "340.00", "1.090"}, {"C296", "N309", "367.00", "1.471"}, {"C302", "N300", "481.00", "1.340"}, {"C302", "N303", "481.00", "1.340"}, {"C307", "C308", "268.00", "1.529"}, {"C307", "H140", "340.00", "1.090"}, {"C307", "N303", "337.00", "1.463"}, {"C308", "H140", "340.00", "1.090"}, {"C500", "C501", "388.00", "1.459"}, {"C500", "C514", "546.00", "1.352"}, {"C501", "C502", "447.00", "1.419"}, {"C502", "N503", "428.00", "1.380"}, {"C505", "C507", "317.00", "1.504"}, {"C505", "C508", "317.00", "1.504"}, {"C505", "C510", "317.00", "1.504"}, {"C505", "H140", "340.00", "1.090"}, {"C506", "H146", "367.00", "1.080"}, {"C506", "N503", "477.00", "1.343"}, {"C506", "N511", "488.00", "1.335"}, {"C507", "C508", "520.00", "1.370"}, {"C507", "H146", "367.00", "1.080"}, {"C507", "N511", "410.00", "1.394"}, {"C508", "H146", "367.00", "1.080"}, {"C508", "N503", "427.00", "1.381"}, {"C509", "H146", "367.00", "1.080"}, {"C509", "N512", "477.00", "1.343"}, {"C510", "C510", "520.00", "1.370"}, {"C510", "H146", "367.00", "1.080"}, {"C510", "N512", "427.00", "1.381"}, {"C514", "H146", "367.00", "1.080"}, {"C514", "N503", "427.00", "1.381"}, {"H155", "O154", "553.00", "0.945"}, {"H168", "O167", "553.00", "0.945"}, {"H204", "S200", "274.00", "1.336"}, {"H240", "N237", "434.00", "1.010"}, {"H241", "N238", "434.00", "1.010"}, {"H270", "O268", "553.00", "0.945"}, {"H290", "N287", "434.00", "1.010"}, {"H301", "N300", "434.00", "1.010"}, {"H304", "N303", "434.00", "1.010"}, {"H310", "N309", "434.00", "1.010"}, {"H504", "N503", "434.00", "1.010"}, {"H513", "N512", "434.00", "1.010"}}; /* Angles */ char * OPLSAAM_angles[437][5]= {{"HT", "OT", "HT", "55.0", "104.52"}, {"H140", "C135", "H140", "33.0", "107.8"}, {"H140", "C136", "H140", "33.0", "107.8"}, {"H140", "C149", "H140", "33.0", "107.8"}, {"H140", "C157", "H140", "33.0", "107.8"}, {"H140", "C206", "H140", "33.0", "107.8"}, {"H140", "C209", "H140", "33.0", "107.8"}, {"H140", "C210", "H140", "33.0", "107.8"}, {"H140", "C214", "H140", "33.0", "107.8"}, {"H140", "C223", "H140", "33.0", "107.8"}, {"H140", "C224", "H140", "33.0", "107.8"}, {"H140", "C242", "H140", "33.0", "107.8"}, {"H140", "C245", "H140", "33.0", "107.8"}, {"H140", "C274", "H140", "33.0", "107.8"}, {"H140", "C284", "H140", "33.0", "107.8"}, {"H140", "C292", "H140", "33.0", "107.8"}, {"H140", "C296", "H140", "33.0", "107.8"}, {"H140", "C307", "H140", "33.0", "107.8"}, {"H140", "C308", "H140", "33.0", "107.8"}, {"H140", "C505", "H140", "33.0", "107.8"}, {"H290", "N287", "H290", "35.0", "109.5"}, {"H310", "N309", "H310", "35.0", "109.5"}, {"C135", "C136", "C137", "58.35", "112.70"}, {"C135", "C136", "H140", "37.50", "110.70"}, {"C135", "C137", "C135", "58.35", "112.70"}, {"C135", "C137", "C136", "58.35", "112.70"}, {"C135", "C137", "C224", "58.35", "112.70"}, {"C135", "C137", "C283", "58.35", "112.70"}, {"C135", "C137", "C293", "58.35", "112.70"}, {"C135", "C137", "H140", "37.50", "110.70"}, {"C135", "C158", "C224", "58.35", "112.70"}, {"C135", "C158", "C283", "58.35", "112.70"}, {"C135", "C158", "C293", "58.35", "112.70"}, {"C135", "C158", "H140", "37.50", "110.70"}, {"C135", "C158", "O154", "50.00", "109.50"}, {"C135", "C224", "C235", "63.00", "111.10"}, {"C135", "C224", "C267", "63.00", "111.10"}, {"C135", "C224", "H140", "37.50", "110.70"}, {"C135", "C224", "N238", "80.00", "109.70"}, {"C135", "C235", "N238", "70.00", "116.60"}, {"C135", "C235", "N239", "70.00", "116.60"}, {"C135", "C235", "O236", "80.00", "120.40"}, {"C135", "C283", "C271", "63.00", "111.10"}, {"C135", "C283", "H140", "37.50", "110.70"}, {"C135", "C283", "N238", "80.00", "109.70"}, {"C135", "C293", "C235", "63.00", "111.10"}, {"C135", "C293", "H140", "37.50", "110.70"}, {"C135", "C293", "N287", "80.00", "111.20"}, {"C136", "C135", "H140", "37.50", "110.70"}, {"C136", "C136", "C136", "58.35", "112.70"}, {"C136", "C136", "C224", "58.35", "112.70"}, {"C136", "C136", "C235", "63.00", "111.10"}, {"C136", "C136", "C245", "58.35", "112.70"}, {"C136", "C136", "C246", "58.35", "112.70"}, {"C136", "C136", "C267", "63.00", "111.10"}, {"C136", "C136", "C283", "58.35", "112.70"}, {"C136", "C136", "C285", "58.35", "112.70"}, {"C136", "C136", "C292", "58.35", "112.70"}, {"C136", "C136", "C293", "58.35", "112.70"}, {"C136", "C136", "C295", "58.35", "112.70"}, {"C136", "C136", "C296", "58.35", "112.70"}, {"C136", "C136", "H140", "37.50", "110.70"}, {"C136", "C137", "C224", "58.35", "112.70"}, {"C136", "C137", "C283", "58.35", "112.70"}, {"C136", "C137", "C293", "58.35", "112.70"}, {"C136", "C137", "H140", "37.50", "110.70"}, {"C136", "C210", "H140", "37.50", "110.70"}, {"C136", "C210", "S202", "50.00", "114.70"}, {"C136", "C224", "C235", "63.00", "111.10"}, {"C136", "C224", "H140", "37.50", "110.70"}, {"C136", "C224", "N238", "80.00", "109.70"}, {"C136", "C235", "N237", "70.00", "116.60"}, {"C136", "C235", "O236", "80.00", "120.40"}, {"C136", "C245", "H140", "37.50", "110.70"}, {"C136", "C245", "N239", "80.00", "109.70"}, {"C136", "C246", "C235", "63.00", "111.10"}, {"C136", "C246", "H140", "37.50", "110.70"}, {"C136", "C246", "N239", "80.00", "109.70"}, {"C136", "C267", "O268", "70.00", "108.00"}, {"C136", "C267", "O269", "80.00", "120.40"}, {"C136", "C274", "C271", "63.00", "111.10"}, {"C136", "C274", "H140", "37.50", "110.70"}, {"C136", "C283", "C271", "63.00", "111.10"}, {"C136", "C283", "H140", "37.50", "110.70"}, {"C136", "C283", "N238", "80.00", "109.70"}, {"C136", "C285", "C271", "63.00", "111.10"}, {"C136", "C285", "H140", "37.50", "110.70"}, {"C136", "C285", "N239", "80.00", "109.70"}, {"C136", "C292", "H140", "37.50", "110.70"}, {"C136", "C292", "N287", "80.00", "111.20"}, {"C136", "C293", "C235", "63.00", "111.10"}, {"C136", "C293", "H140", "37.50", "110.70"}, {"C136", "C293", "N287", "80.00", "111.20"}, {"C136", "C295", "C235", "63.00", "111.10"}, {"C136", "C295", "H140", "37.50", "110.70"}, {"C136", "C295", "N309", "80.00", "111.20"}, {"C136", "C296", "H140", "37.50", "110.70"}, {"C136", "C296", "N309", "80.00", "111.20"}, {"C136", "C308", "C307", "58.35", "112.70"}, {"C136", "C308", "H140", "37.50", "110.70"}, {"C136", "C500", "C501", "70.00", "128.60"}, {"C136", "C500", "C514", "70.00", "125.00"}, {"C137", "C135", "H140", "37.50", "110.70"}, {"C137", "C136", "C224", "58.35", "112.70"}, {"C137", "C136", "C283", "58.35", "112.70"}, {"C137", "C136", "C293", "58.35", "112.70"}, {"C137", "C136", "H140", "37.50", "110.70"}, {"C137", "C224", "C235", "63.00", "111.10"}, {"C137", "C224", "H140", "37.50", "110.70"}, {"C137", "C224", "N238", "80.00", "109.70"}, {"C137", "C283", "C271", "63.00", "111.10"}, {"C137", "C283", "H140", "37.50", "110.70"}, {"C137", "C283", "N238", "80.00", "109.70"}, {"C137", "C293", "C235", "63.00", "111.10"}, {"C137", "C293", "H140", "37.50", "110.70"}, {"C137", "C293", "N287", "80.00", "111.20"}, {"C145", "C145", "C145", "63.00", "120.00"}, {"C145", "C145", "C149", "70.00", "120.00"}, {"C145", "C145", "C166", "63.00", "120.00"}, {"C145", "C145", "C501", "63.00", "120.00"}, {"C145", "C145", "C502", "85.00", "120.00"}, {"C145", "C145", "H146", "35.00", "120.00"}, {"C145", "C149", "C224", "63.00", "114.00"}, {"C145", "C149", "C283", "63.00", "114.00"}, {"C145", "C149", "C293", "63.00", "114.00"}, {"C145", "C149", "H140", "35.00", "109.50"}, {"C145", "C166", "C145", "63.00", "120.00"}, {"C145", "C166", "O167", "70.00", "120.00"}, {"C145", "C501", "C500", "85.00", "134.90"}, {"C145", "C501", "C502", "85.00", "116.20"}, {"C145", "C502", "C501", "85.00", "122.70"}, {"C145", "C502", "N503", "70.00", "132.80"}, {"C149", "C224", "C235", "63.00", "111.10"}, {"C149", "C224", "H140", "37.50", "110.70"}, {"C149", "C224", "N238", "80.00", "109.70"}, {"C149", "C283", "C271", "63.00", "111.10"}, {"C149", "C283", "H140", "37.50", "110.70"}, {"C149", "C283", "N238", "80.00", "109.70"}, {"C149", "C293", "C235", "63.00", "111.10"}, {"C149", "C293", "H140", "37.50", "110.70"}, {"C149", "C293", "N287", "80.00", "111.20"}, {"C157", "C224", "C235", "63.00", "111.10"}, {"C157", "C224", "H140", "37.50", "110.70"}, {"C157", "C224", "N238", "80.00", "109.70"}, {"C157", "C283", "C271", "63.00", "111.10"}, {"C157", "C283", "H140", "37.50", "110.70"}, {"C157", "C283", "N238", "80.00", "109.70"}, {"C157", "C293", "C235", "63.00", "111.10"}, {"C157", "C293", "H140", "37.50", "110.70"}, {"C157", "C293", "N287", "80.00", "111.20"}, {"C157", "O154", "H155", "55.00", "108.50"}, {"C158", "C135", "H140", "37.50", "110.70"}, {"C158", "C224", "C235", "63.00", "111.10"}, {"C158", "C224", "H140", "37.50", "110.70"}, {"C158", "C224", "N238", "80.00", "109.70"}, {"C158", "C283", "C271", "63.00", "111.10"}, {"C158", "C283", "H140", "37.50", "110.70"}, {"C158", "C283", "N238", "80.00", "109.70"}, {"C158", "C293", "C235", "63.00", "111.10"}, {"C158", "C293", "H140", "37.50", "110.70"}, {"C158", "C293", "N287", "80.00", "111.20"}, {"C158", "O154", "H155", "55.00", "108.50"}, {"C166", "C145", "H146", "35.00", "120.00"}, {"C166", "O167", "H168", "35.00", "113.00"}, {"C206", "C224", "C235", "63.00", "111.10"}, {"C206", "C224", "H140", "37.50", "110.70"}, {"C206", "C224", "N238", "80.00", "109.70"}, {"C206", "C283", "C271", "63.00", "111.10"}, {"C206", "C283", "H140", "37.50", "110.70"}, {"C206", "C283", "N238", "80.00", "109.70"}, {"C206", "C293", "C235", "63.00", "111.10"}, {"C206", "C293", "H140", "37.50", "110.70"}, {"C206", "C293", "N287", "80.00", "111.20"}, {"C206", "S200", "H204", "44.00", "96.00"}, {"C209", "S202", "C210", "62.00", "98.90"}, {"C210", "C136", "C224", "58.35", "112.70"}, {"C210", "C136", "C283", "58.35", "112.70"}, {"C210", "C136", "C293", "58.35", "112.70"}, {"C210", "C136", "H140", "37.50", "110.70"}, {"C214", "C224", "C235", "63.00", "111.10"}, {"C214", "C224", "H140", "37.50", "110.70"}, {"C214", "C224", "N238", "80.00", "109.70"}, {"C214", "C283", "C271", "63.00", "111.10"}, {"C214", "C283", "H140", "37.50", "110.70"}, {"C214", "C283", "N238", "80.00", "109.70"}, {"C214", "C293", "C235", "63.00", "111.10"}, {"C214", "C293", "H140", "37.50", "110.70"}, {"C214", "C293", "N287", "80.00", "111.20"}, {"C214", "S203", "S203", "68.00", "103.70"}, {"C223", "C235", "N238", "70.00", "116.60"}, {"C223", "C235", "N239", "70.00", "116.60"}, {"C223", "C235", "O236", "80.00", "120.40"}, {"C223", "N238", "C235", "50.00", "121.90"}, {"C223", "N238", "H241", "38.00", "118.40"}, {"C224", "C135", "H140", "37.50", "110.70"}, {"C224", "C136", "C235", "63.00", "111.10"}, {"C224", "C136", "C267", "63.00", "111.10"}, {"C224", "C136", "C274", "58.35", "112.70"}, {"C224", "C136", "C308", "58.35", "112.70"}, {"C224", "C136", "C500", "63.00", "115.60"}, {"C224", "C136", "H140", "37.50", "110.70"}, {"C224", "C137", "H140", "37.50", "110.70"}, {"C224", "C149", "H140", "37.50", "110.70"}, {"C224", "C157", "H140", "37.50", "110.70"}, {"C224", "C157", "O154", "50.00", "109.50"}, {"C224", "C158", "H140", "37.50", "110.70"}, {"C224", "C158", "O154", "50.00", "109.50"}, {"C224", "C206", "H140", "37.50", "110.70"}, {"C224", "C206", "S200", "50.00", "108.60"}, {"C224", "C214", "H140", "37.50", "110.70"}, {"C224", "C214", "S203", "50.00", "114.70"}, {"C224", "C235", "N238", "70.00", "116.60"}, {"C224", "C235", "N239", "70.00", "116.60"}, {"C224", "C235", "O236", "80.00", "120.40"}, {"C223", "C267", "O268", "70.00", "108.00"}, {"C224", "C267", "O268", "70.00", "108.00"}, {"C223", "C267", "O269", "80.00", "120.40"}, {"C224", "C267", "O269", "80.00", "120.40"}, {"C224", "C274", "C271", "63.00", "111.10"}, {"C224", "C274", "H140", "37.50", "110.70"}, {"C224", "C505", "C507", "63.00", "114.00"}, {"C224", "C505", "C508", "63.00", "114.00"}, {"C224", "C505", "C510", "63.00", "114.00"}, {"C224", "C505", "H140", "37.50", "110.70"}, {"C224", "N238", "C235", "50.00", "121.90"}, {"C224", "N238", "H241", "38.00", "118.40"}, {"C235", "C135", "H140", "35.00", "109.50"}, {"C235", "C136", "C283", "63.00", "111.10"}, {"C235", "C136", "C293", "63.00", "111.10"}, {"C235", "C136", "H140", "35.00", "109.50"}, {"C235", "C223", "H140", "35.00", "109.50"}, {"C235", "C223", "N238", "63.00", "110.10"}, {"C235", "C224", "C274", "63.00", "111.10"}, {"C235", "C224", "C505", "63.00", "111.10"}, {"C235", "C224", "H140", "35.00", "109.50"}, {"C235", "C224", "N238", "63.00", "110.10"}, {"C235", "C246", "H140", "35.00", "109.50"}, {"C235", "C246", "N239", "63.00", "110.10"}, {"C235", "C292", "H140", "35.00", "109.50"}, {"C235", "C292", "N287", "80.00", "111.20"}, {"C235", "C293", "C274", "63.00", "111.10"}, {"C235", "C293", "C505", "63.00", "111.10"}, {"C235", "C293", "H140", "35.00", "109.50"}, {"C235", "C293", "N287", "80.00", "111.20"}, {"C235", "C295", "H140", "35.00", "109.50"}, {"C235", "C295", "N309", "80.00", "111.20"}, {"C235", "N237", "H240", "35.00", "119.80"}, {"C235", "N238", "C242", "50.00", "121.90"}, {"C235", "N238", "C283", "50.00", "121.90"}, {"C235", "N238", "C284", "50.00", "121.90"}, {"C235", "N238", "H241", "35.00", "119.80"}, {"C235", "N239", "C245", "50.00", "121.90"}, {"C235", "N239", "C246", "50.00", "121.90"}, {"C235", "N239", "C285", "50.00", "121.90"}, {"C242", "N238", "H241", "38.00", "118.40"}, {"C245", "C136", "H140", "37.50", "110.70"}, {"C245", "N238", "C285", "50.00", "118.00"}, {"C245", "N239", "C246", "50.00", "118.00"}, {"C245", "N239", "C285", "50.00", "118.00"}, {"C246", "C136", "H140", "37.50", "110.70"}, {"C246", "C235", "N238", "70.00", "116.60"}, {"C246", "C235", "N239", "70.00", "116.60"}, {"C246", "C235", "O236", "80.00", "120.40"}, {"C267", "C136", "C283", "63.00", "111.10"}, {"C267", "C136", "C293", "63.00", "111.10"}, {"C267", "C136", "H140", "35.00", "109.50"}, {"C267", "C223", "H140", "35.00", "109.50"}, {"C267", "C224", "H140", "35.00", "109.50"}, {"C267", "C223", "N238", "63.00", "110.10"}, {"C267", "C224", "N238", "63.00", "110.10"}, {"C267", "O268", "H270", "35.00", "113.00"}, {"C271", "C274", "C283", "63.00", "111.10"}, {"C271", "C274", "C293", "63.00", "111.10"}, {"C271", "C274", "H140", "35.00", "109.50"}, {"C271", "C283", "C274", "63.00", "111.10"}, {"C271", "C283", "C505", "63.00", "111.10"}, {"C271", "C283", "H140", "35.00", "109.50"}, {"C271", "C283", "N238", "63.00", "110.10"}, {"C271", "C284", "H140", "35.00", "109.50"}, {"C271", "C284", "N238", "63.00", "110.10"}, {"C271", "C285", "H140", "35.00", "109.50"}, {"C271", "C285", "N239", "63.00", "110.10"}, {"C274", "C136", "C283", "58.35", "112.70"}, {"C274", "C136", "C293", "58.35", "112.70"}, {"C274", "C136", "H140", "37.50", "110.70"}, {"C274", "C224", "H140", "37.50", "110.70"}, {"C274", "C224", "N238", "80.00", "109.70"}, {"C274", "C271", "O272", "70.00", "117.00"}, {"C274", "C283", "H140", "37.50", "110.70"}, {"C274", "C283", "N238", "80.00", "109.70"}, {"C274", "C293", "H140", "37.50", "110.70"}, {"C274", "C293", "N287", "80.00", "111.20"}, {"C283", "C135", "H140", "37.50", "110.70"}, {"C283", "C136", "C308", "58.35", "112.70"}, {"C283", "C136", "C500", "63.00", "115.60"}, {"C283", "C136", "H140", "37.50", "110.70"}, {"C283", "C137", "H140", "37.50", "110.70"}, {"C283", "C149", "H140", "37.50", "110.70"}, {"C283", "C157", "H140", "37.50", "110.70"}, {"C283", "C157", "O154", "50.00", "109.50"}, {"C283", "C158", "H140", "37.50", "110.70"}, {"C283", "C158", "O154", "50.00", "109.50"}, {"C283", "C206", "H140", "37.50", "110.70"}, {"C283", "C206", "S200", "50.00", "108.60"}, {"C283", "C214", "H140", "37.50", "110.70"}, {"C283", "C214", "S203", "50.00", "114.70"}, {"C283", "C271", "O272", "70.00", "117.00"}, {"C283", "C274", "H140", "37.50", "110.70"}, {"C283", "C505", "C507", "63.00", "114.00"}, {"C283", "C505", "C508", "63.00", "114.00"}, {"C283", "C505", "C510", "63.00", "114.00"}, {"C283", "C505", "H140", "37.50", "110.70"}, {"C283", "N238", "H241", "38.00", "118.40"}, {"C284", "C271", "O272", "70.00", "117.00"}, {"C284", "N238", "H241", "38.00", "118.40"}, {"C285", "C136", "H140", "37.50", "110.70"}, {"C285", "C271", "O272", "70.00", "117.00"}, {"C292", "C136", "H140", "37.50", "110.70"}, {"C292", "C235", "N238", "70.00", "116.60"}, {"C292", "C235", "N239", "70.00", "116.60"}, {"C292", "C235", "O236", "80.00", "120.40"}, {"C292", "N287", "H290", "35.00", "109.50"}, {"C293", "C135", "H140", "37.50", "110.70"}, {"C293", "C136", "C308", "58.35", "112.70"}, {"C293", "C136", "C500", "63.00", "115.60"}, {"C293", "C136", "H140", "37.50", "110.70"}, {"C293", "C137", "H140", "37.50", "110.70"}, {"C293", "C149", "H140", "37.50", "110.70"}, {"C293", "C157", "H140", "37.50", "110.70"}, {"C293", "C157", "O154", "50.00", "109.50"}, {"C293", "C158", "H140", "37.50", "110.70"}, {"C293", "C158", "O154", "50.00", "109.50"}, {"C293", "C206", "H140", "37.50", "110.70"}, {"C293", "C206", "S200", "50.00", "108.60"}, {"C293", "C214", "H140", "37.50", "110.70"}, {"C293", "C214", "S203", "50.00", "114.70"}, {"C293", "C235", "N238", "70.00", "116.60"}, {"C293", "C235", "N239", "70.00", "116.60"}, {"C293", "C235", "O236", "80.00", "120.40"}, {"C293", "C274", "H140", "37.50", "110.70"}, {"C293", "C505", "C507", "63.00", "114.00"}, {"C293", "C505", "C508", "63.00", "114.00"}, {"C293", "C505", "C510", "63.00", "114.00"}, {"C293", "C505", "H140", "37.50", "110.70"}, {"C293", "N287", "H290", "35.00", "109.50"}, {"C295", "C136", "H140", "37.50", "110.70"}, {"C295", "C235", "N238", "70.00", "116.60"}, {"C295", "C235", "N239", "70.00", "116.60"}, {"C295", "C235", "O236", "80.00", "120.40"}, {"C295", "N309", "C296", "50.00", "113.00"}, {"C295", "N309", "H310", "35.00", "109.50"}, {"C296", "C136", "H140", "37.50", "110.70"}, {"C296", "N309", "H310", "35.00", "109.50"}, {"C302", "N300", "H301", "35.00", "120.00"}, {"C302", "N303", "C307", "50.00", "123.20"}, {"C302", "N303", "H304", "35.00", "120.00"}, {"C307", "C308", "H140", "37.50", "110.70"}, {"C307", "N303", "H304", "35.00", "118.40"}, {"C308", "C136", "H140", "37.50", "110.70"}, {"C308", "C307", "H140", "37.50", "110.70"}, {"C308", "C307", "N303", "80.00", "111.20"}, {"C500", "C136", "H140", "35.00", "109.50"}, {"C500", "C501", "C502", "85.00", "108.80"}, {"C500", "C514", "H146", "35.00", "120.00"}, {"C500", "C514", "N503", "70.00", "108.70"}, {"C501", "C145", "H146", "35.00", "120.00"}, {"C501", "C500", "C514", "85.00", "106.40"}, {"C501", "C502", "N503", "70.00", "104.40"}, {"C502", "C145", "H146", "35.00", "120.00"}, {"C502", "N503", "C514", "70.00", "111.60"}, {"C502", "N503", "H504", "35.00", "123.10"}, {"C505", "C224", "H140", "37.50", "110.70"}, {"C505", "C224", "N238", "80.00", "109.70"}, {"C505", "C283", "H140", "37.50", "110.70"}, {"C505", "C283", "N238", "80.00", "109.70"}, {"C505", "C293", "H140", "37.50", "110.70"}, {"C505", "C293", "N287", "80.00", "111.20"}, {"C505", "C507", "C508", "70.00", "130.70"}, {"C505", "C507", "N511", "70.00", "124.50"}, {"C505", "C508", "C507", "70.00", "130.70"}, {"C505", "C508", "N503", "70.00", "121.60"}, {"C505", "C510", "C510", "70.00", "130.70"}, {"C505", "C510", "N512", "70.00", "121.60"}, {"C506", "N503", "C508", "70.00", "109.80"}, {"C506", "N503", "H504", "35.00", "124.00"}, {"C506", "N511", "C507", "70.00", "110.00"}, {"C507", "C505", "H140", "35.00", "109.50"}, {"C507", "C508", "H146", "35.00", "130.70"}, {"C507", "C508", "N503", "70.00", "106.30"}, {"C508", "C505", "H140", "35.00", "109.50"}, {"C508", "C507", "H146", "35.00", "128.20"}, {"C508", "C507", "N511", "70.00", "111.00"}, {"C508", "N503", "H504", "35.00", "124.00"}, {"C509", "N512", "C510", "70.00", "109.80"}, {"C509", "N512", "H513", "35.00", "124.00"}, {"C510", "C505", "H140", "35.00", "109.50"}, {"C510", "C510", "H146", "35.00", "130.70"}, {"C510", "C510", "N512", "70.00", "106.30"}, {"C510", "N512", "H513", "35.00", "124.00"}, {"C514", "N503", "H504", "35.00", "124.00"}, {"H140", "C157", "O154", "35.00", "109.50"}, {"H140", "C158", "O154", "35.00", "109.50"}, {"H140", "C206", "S200", "35.00", "109.50"}, {"H140", "C209", "S202", "35.00", "109.50"}, {"H140", "C210", "S202", "35.00", "109.50"}, {"H140", "C214", "S203", "35.00", "109.50"}, {"H140", "C223", "N238", "35.00", "109.50"}, {"H140", "C224", "N238", "35.00", "109.50"}, {"H140", "C242", "N238", "35.00", "109.50"}, {"H140", "C245", "N239", "35.00", "109.50"}, {"H140", "C246", "N239", "35.00", "109.50"}, {"H140", "C283", "N238", "35.00", "109.50"}, {"H140", "C284", "N238", "35.00", "109.50"}, {"H140", "C285", "N239", "35.00", "109.50"}, {"H140", "C292", "N287", "35.00", "109.50"}, {"H140", "C293", "N287", "35.00", "109.50"}, {"H140", "C295", "N309", "35.00", "109.50"}, {"H140", "C296", "N309", "35.00", "109.50"}, {"H140", "C307", "N303", "35.00", "109.50"}, {"H146", "C506", "N503", "35.00", "120.00"}, {"H146", "C506", "N511", "35.00", "120.00"}, {"H146", "C507", "N511", "35.00", "120.00"}, {"H146", "C508", "N503", "35.00", "121.60"}, {"H146", "C509", "N512", "35.00", "120.00"}, {"H146", "C510", "N512", "35.00", "120.00"}, {"H146", "C514", "N503", "35.00", "121.60"}, {"H240", "N237", "H240", "35.00", "120.00"}, {"H301", "N300", "H301", "35.00", "120.00"}, {"N237", "C235", "O236", "80.00", "122.90"}, {"N238", "C235", "O236", "80.00", "122.90"}, {"N239", "C235", "O236", "80.00", "122.90"}, {"N300", "C302", "N300", "70.00", "120.00"}, {"N300", "C302", "N303", "70.00", "120.00"}, {"N503", "C506", "N511", "70.00", "120.00"}, {"N512", "C509", "N512", "70.00", "120.00"}, {"O268", "C267", "O269", "80.00", "121.00"}, {"O272", "C271", "O272", "80.00", "126.00"}}; /* Dihedrals */ char * OPLSAAM_dihedrals[1446][7]= {{"X", "C145", "C145", "X", "3.6250", "2", "180.0"}, {"X", "C145", "C166", "X", "3.6250", "2", "180.0"}, {"X", "C145", "C501", "X", "3.5000", "2", "180.0"}, {"X", "C145", "C502", "X", "3.6250", "2", "180.0"}, {"X", "C302", "N300", "X", "1.9500", "2", "180.0"}, {"X", "C500", "C501", "X", "1.6750", "2", "180.0"}, {"X", "C500", "C514", "X", "6.5250", "2", "180.0"}, {"X", "C501", "C502", "X", "3.0000", "2", "180.0"}, {"X", "C502", "N503", "X", "1.5250", "2", "180.0"}, {"X", "C506", "N503", "X", "2.3250", "2", "180.0"}, {"X", "C506", "N511", "X", "5.0000", "2", "180.0"}, {"X", "C507", "C508", "X", "5.3750", "2", "180.0"}, {"X", "C507", "N511", "X", "2.4000", "2", "180.0"}, {"X", "C509", "N512", "X", "2.3250", "2", "180.0"}, {"X", "C510", "C510", "X", "5.3750", "2", "180.0"}, {"X", "C514", "N503", "X", "1.5000", "2", "180.0"}, {"C135", "C136", "C137", "C135", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C135", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C135", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C224", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C224", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C224", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C283", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C283", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C283", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C293", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C293", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C293", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C136", "C224", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C224", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C224", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "C283", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C283", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C283", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "C293", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C293", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C293", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C224", "C235", "-0.7110", "1", "0.0"}, {"C135", "C137", "C224", "C235", "0.5340", "2", "180.0"}, {"C135", "C137", "C224", "C235", "0.0000", "3", "0.0"}, {"C135", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C224", "N238", "1.4970", "1", "0.0"}, {"C135", "C137", "C224", "N238", "0.1260", "2", "180.0"}, {"C135", "C137", "C224", "N238", "0.1500", "3", "0.0"}, {"C135", "C137", "C283", "C271", "-0.7110", "1", "0.0"}, {"C135", "C137", "C283", "C271", "0.5340", "2", "180.0"}, {"C135", "C137", "C283", "C271", "0.0000", "3", "0.0"}, {"C135", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C283", "N238", "1.4970", "1", "0.0"}, {"C135", "C137", "C283", "N238", "0.1260", "2", "180.0"}, {"C135", "C137", "C283", "N238", "0.1500", "3", "0.0"}, {"C135", "C137", "C293", "C235", "-0.7110", "1", "0.0"}, {"C135", "C137", "C293", "C235", "0.5340", "2", "180.0"}, {"C135", "C137", "C293", "C235", "0.0000", "3", "0.0"}, {"C135", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C293", "N287", "1.4970", "1", "0.0"}, {"C135", "C137", "C293", "N287", "0.1260", "2", "180.0"}, {"C135", "C137", "C293", "N287", "0.1500", "3", "0.0"}, {"C135", "C158", "C224", "C235", "-0.7110", "1", "0.0"}, {"C135", "C158", "C224", "C235", "0.5340", "2", "180.0"}, {"C135", "C158", "C224", "C235", "0.0000", "3", "0.0"}, {"C135", "C158", "C224", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C224", "N238", "1.4970", "1", "0.0"}, {"C135", "C158", "C224", "N238", "0.1260", "2", "180.0"}, {"C135", "C158", "C224", "N238", "0.1500", "3", "0.0"}, {"C135", "C158", "C283", "C271", "-0.7110", "1", "0.0"}, {"C135", "C158", "C283", "C271", "0.5340", "2", "180.0"}, {"C135", "C158", "C283", "C271", "0.0000", "3", "0.0"}, {"C135", "C158", "C283", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C283", "N238", "1.4970", "1", "0.0"}, {"C135", "C158", "C283", "N238", "0.1260", "2", "180.0"}, {"C135", "C158", "C283", "N238", "0.1500", "3", "0.0"}, {"C135", "C158", "C293", "C235", "-0.7110", "1", "0.0"}, {"C135", "C158", "C293", "C235", "0.5340", "2", "180.0"}, {"C135", "C158", "C293", "C235", "0.0000", "3", "0.0"}, {"C135", "C158", "C293", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C293", "N287", "1.4970", "1", "0.0"}, {"C135", "C158", "C293", "N287", "0.1260", "2", "180.0"}, {"C135", "C158", "C293", "N287", "0.1500", "3", "0.0"}, {"C135", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C135", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C135", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C135", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C135", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C135", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C135", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C135", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C135", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C135", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C135", "C224", "C267", "O268", "0.5000", "1", "0.0"}, {"C135", "C224", "C267", "O268", "0.2730", "2", "180.0"}, {"C135", "C224", "C267", "O268", "0.2250", "3", "0.0"}, {"C135", "C224", "C267", "O269", "0.2730", "2", "180.0"}, {"C135", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C135", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C135", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C135", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C135", "C235", "N238", "C223", "1.1500", "1", "0.0"}, {"C135", "C235", "N238", "C223", "3.0445", "2", "180.0"}, {"C135", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C135", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C135", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C135", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C135", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C135", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C135", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C135", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C135", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C135", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C135", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C135", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C135", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C135", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C135", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C135", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C135", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C135", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C135", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C135", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C136", "C136", "C224", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C224", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C224", "0.1000", "3", "0.0"}, {"C267", "C136", "C136", "C224", "0.6500", "1", "0.0"}, {"C267", "C136", "C136", "C224", "-0.1000", "2", "180.0"}, {"C267", "C136", "C136", "C224", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C283", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C283", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C283", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C292", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C292", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C292", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C293", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C293", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C293", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C267", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C224", "C235", "-1.1790", "1", "0.0"}, {"C136", "C136", "C224", "C235", "0.4555", "2", "180.0"}, {"C136", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C224", "N238", "0.4420", "1", "0.0"}, {"C136", "C136", "C224", "N238", "0.4485", "2", "180.0"}, {"C136", "C136", "C224", "N238", "0.4400", "3", "0.0"}, {"C136", "C136", "C235", "N237", "1.4220", "1", "0.0"}, {"C136", "C136", "C235", "N237", "-0.1805", "2", "180.0"}, {"C136", "C136", "C235", "N237", "-0.1625", "3", "0.0"}, {"C136", "C136", "C235", "O236", "0.2030", "1", "0.0"}, {"C136", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C136", "C136", "C235", "O236", "0.0695", "3", "0.0"}, {"C136", "C136", "C245", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C245", "N239", "0.4225", "1", "0.0"}, {"C136", "C136", "C245", "N239", "-0.4810", "2", "180.0"}, {"C136", "C136", "C245", "N239", "0.3565", "3", "0.0"}, {"C136", "C136", "C246", "C235", "-0.8755", "1", "0.0"}, {"C136", "C136", "C246", "C235", "0.8030", "2", "180.0"}, {"C136", "C136", "C246", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C246", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C246", "N239", "0.7860", "1", "0.0"}, {"C136", "C136", "C246", "N239", "0.0795", "2", "180.0"}, {"C136", "C136", "C246", "N239", "0.1000", "3", "0.0"}, {"C136", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C136", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C136", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C136", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C136", "C136", "C283", "C271", "-1.1790", "1", "0.0"}, {"C136", "C136", "C283", "C271", "0.4555", "2", "180.0"}, {"C136", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C136", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C283", "N238", "0.4420", "1", "0.0"}, {"C136", "C136", "C283", "N238", "0.4485", "2", "180.0"}, {"C136", "C136", "C283", "N238", "0.4400", "3", "0.0"}, {"C136", "C136", "C285", "C271", "-0.8755", "1", "0.0"}, {"C136", "C136", "C285", "C271", "0.8030", "2", "180.0"}, {"C136", "C136", "C285", "C271", "0.0000", "3", "0.0"}, {"C136", "C136", "C285", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C285", "N239", "0.7860", "1", "0.0"}, {"C136", "C136", "C285", "N239", "0.0795", "2", "180.0"}, {"C136", "C136", "C285", "N239", "0.1000", "3", "0.0"}, {"C136", "C136", "C292", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C292", "N287", "1.3660", "1", "0.0"}, {"C136", "C136", "C292", "N287", "-0.1145", "2", "180.0"}, {"C136", "C136", "C292", "N287", "0.2425", "3", "0.0"}, {"C136", "C136", "C293", "C235", "-1.1790", "1", "0.0"}, {"C136", "C136", "C293", "C235", "0.4555", "2", "180.0"}, {"C136", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C293", "N287", "0.4420", "1", "0.0"}, {"C136", "C136", "C293", "N287", "0.4485", "2", "180.0"}, {"C136", "C136", "C293", "N287", "0.4400", "3", "0.0"}, {"C136", "C136", "C295", "C235", "-0.8755", "1", "0.0"}, {"C136", "C136", "C295", "C235", "0.8030", "2", "180.0"}, {"C136", "C136", "C295", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C295", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C295", "N309", "1.3660", "1", "0.0"}, {"C136", "C136", "C295", "N309", "-0.1145", "2", "180.0"}, {"C136", "C136", "C295", "N309", "0.2425", "3", "0.0"}, {"C136", "C136", "C296", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C296", "N309", "1.3660", "1", "0.0"}, {"C136", "C136", "C296", "N309", "-0.1145", "2", "180.0"}, {"C136", "C136", "C296", "N309", "0.2425", "3", "0.0"}, {"C136", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C224", "C235", "-0.7110", "1", "0.0"}, {"C136", "C137", "C224", "C235", "0.5340", "2", "180.0"}, {"C136", "C137", "C224", "C235", "0.0000", "3", "0.0"}, {"C136", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C224", "N238", "1.4970", "1", "0.0"}, {"C136", "C137", "C224", "N238", "0.1260", "2", "180.0"}, {"C136", "C137", "C224", "N238", "0.1500", "3", "0.0"}, {"C136", "C137", "C283", "C271", "-0.7110", "1", "0.0"}, {"C136", "C137", "C283", "C271", "0.5340", "2", "180.0"}, {"C136", "C137", "C283", "C271", "0.0000", "3", "0.0"}, {"C136", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C283", "N238", "1.4970", "1", "0.0"}, {"C136", "C137", "C283", "N238", "0.1260", "2", "180.0"}, {"C136", "C137", "C283", "N238", "0.1500", "3", "0.0"}, {"C136", "C137", "C293", "C235", "-0.7110", "1", "0.0"}, {"C136", "C137", "C293", "C235", "0.5340", "2", "180.0"}, {"C136", "C137", "C293", "C235", "0.0000", "3", "0.0"}, {"C136", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C293", "N287", "1.4970", "1", "0.0"}, {"C136", "C137", "C293", "N287", "0.1260", "2", "180.0"}, {"C136", "C137", "C293", "N287", "0.1500", "3", "0.0"}, {"C136", "C210", "S202", "C209", "0.4625", "1", "0.0"}, {"C136", "C210", "S202", "C209", "-0.2880", "2", "180.0"}, {"C136", "C210", "S202", "C209", "0.3385", "3", "0.0"}, {"C136", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C136", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C136", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C136", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C136", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C136", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C136", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C136", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C136", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C136", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C136", "C235", "N237", "H240", "2.4500", "2", "180.0"}, {"C136", "C245", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C245", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C245", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C245", "N239", "C246", "1.4295", "1", "0.0"}, {"C136", "C245", "N239", "C246", "1.0290", "2", "180.0"}, {"C136", "C245", "N239", "C246", "-5.6330", "3", "0.0"}, {"C136", "C245", "N239", "C285", "1.4295", "1", "0.0"}, {"C136", "C245", "N239", "C285", "1.0290", "2", "180.0"}, {"C136", "C245", "N239", "C285", "-5.6330", "3", "0.0"}, {"C136", "C246", "C235", "N238", "2.5145", "1", "0.0"}, {"C136", "C246", "C235", "N238", "0.3595", "2", "180.0"}, {"C136", "C246", "C235", "N238", "1.1200", "3", "0.0"}, {"C136", "C246", "C235", "N239", "2.5145", "1", "0.0"}, {"C136", "C246", "C235", "N239", "0.3595", "2", "180.0"}, {"C136", "C246", "C235", "N239", "1.1200", "3", "0.0"}, {"C136", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C246", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C246", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C246", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C246", "N239", "C245", "2.3765", "1", "0.0"}, {"C136", "C246", "N239", "C245", "-0.3670", "2", "180.0"}, {"C136", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C136", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C136", "C274", "C271", "O272", "0.2730", "2", "180.0"}, {"C136", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C136", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C136", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C136", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C136", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C136", "C285", "C271", "O272", "0.4100", "2", "180.0"}, {"C136", "C285", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C285", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C285", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C285", "N239", "C245", "2.3765", "1", "0.0"}, {"C136", "C285", "N239", "C245", "-0.3670", "2", "180.0"}, {"C136", "C292", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C136", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C136", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C136", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C136", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C136", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C136", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C295", "C235", "N238", "2.5145", "1", "0.0"}, {"C136", "C295", "C235", "N238", "0.3595", "2", "180.0"}, {"C136", "C295", "C235", "N238", "1.1200", "3", "0.0"}, {"C136", "C295", "C235", "N239", "2.5145", "1", "0.0"}, {"C136", "C295", "C235", "N239", "0.3595", "2", "180.0"}, {"C136", "C295", "C235", "N239", "1.1200", "3", "0.0"}, {"C136", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C295", "N309", "C296", "0.71895", "1", "0.0"}, {"C136", "C295", "N309", "C296", "-0.0619", "2", "180.0"}, {"C136", "C295", "N309", "C296", "0.13195", "3", "0.0"}, {"C136", "C295", "N309", "H310", "0.1735", "3", "0.0"}, {"C136", "C296", "N309", "C295", "0.71895", "1", "0.0"}, {"C136", "C296", "N309", "C295", "-0.0619", "2", "180.0"}, {"C136", "C296", "N309", "C295", "0.13195", "3", "0.0"}, {"C136", "C296", "N309", "H310", "0.1735", "3", "0.0"}, {"C136", "C308", "C307", "H140", "0.1500", "3", "0.0"}, {"C136", "C308", "C307", "N303", "1.3660", "1", "0.0"}, {"C136", "C308", "C307", "N303", "-0.1145", "2", "180.0"}, {"C136", "C308", "C307", "N303", "0.2425", "3", "0.0"}, {"C137", "C136", "C135", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C224", "C235", "-0.8755", "1", "0.0"}, {"C137", "C136", "C224", "C235", "0.8030", "2", "180.0"}, {"C137", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C137", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C224", "N238", "0.7860", "1", "0.0"}, {"C137", "C136", "C224", "N238", "0.0795", "2", "180.0"}, {"C137", "C136", "C224", "N238", "0.1000", "3", "0.0"}, {"C137", "C136", "C283", "C271", "-0.8755", "1", "0.0"}, {"C137", "C136", "C283", "C271", "0.8030", "2", "180.0"}, {"C137", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C137", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C283", "N238", "0.7860", "1", "0.0"}, {"C137", "C136", "C283", "N238", "0.0795", "2", "180.0"}, {"C137", "C136", "C283", "N238", "0.1000", "3", "0.0"}, {"C137", "C136", "C293", "C235", "-0.8755", "1", "0.0"}, {"C137", "C136", "C293", "C235", "0.8030", "2", "180.0"}, {"C137", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C137", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C293", "N287", "0.7860", "1", "0.0"}, {"C137", "C136", "C293", "N287", "0.0795", "2", "180.0"}, {"C137", "C136", "C293", "N287", "0.1000", "3", "0.0"}, {"C137", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C137", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C137", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C137", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C137", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C137", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C137", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C137", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C137", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C137", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C137", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C137", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C137", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C137", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C137", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C137", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C137", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C137", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C137", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C137", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C137", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C137", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C137", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C137", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C145", "C145", "C149", "C224", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "C283", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "C293", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "H140", "0.0000", "1", "0.0"}, {"C145", "C149", "C224", "C235", "-0.7030", "1", "0.0"}, {"C145", "C149", "C224", "C235", "0.8885", "2", "180.0"}, {"C145", "C149", "C224", "C235", "0.0000", "3", "0.0"}, {"C145", "C149", "C224", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C224", "N238", "0.8560", "1", "0.0"}, {"C145", "C149", "C224", "N238", "0.3625", "2", "180.0"}, {"C145", "C149", "C224", "N238", "0.1830", "3", "0.0"}, {"C145", "C149", "C283", "C271", "-0.7030", "1", "0.0"}, {"C145", "C149", "C283", "C271", "0.8885", "2", "180.0"}, {"C145", "C149", "C283", "C271", "0.0000", "3", "0.0"}, {"C145", "C149", "C283", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C283", "N238", "0.8560", "1", "0.0"}, {"C145", "C149", "C283", "N238", "0.3625", "2", "180.0"}, {"C145", "C149", "C283", "N238", "0.1830", "3", "0.0"}, {"C145", "C149", "C293", "C235", "-0.7030", "1", "0.0"}, {"C145", "C149", "C293", "C235", "0.8885", "2", "180.0"}, {"C145", "C149", "C293", "C235", "0.0000", "3", "0.0"}, {"C145", "C149", "C293", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C293", "N287", "0.8560", "1", "0.0"}, {"C145", "C149", "C293", "N287", "0.3625", "2", "180.0"}, {"C145", "C149", "C293", "N287", "0.1830", "3", "0.0"}, {"C145", "C166", "C145", "H146", "3.6250", "2", "180.0"}, {"C145", "C166", "O167", "H168", "0.8410", "2", "180.0"}, {"C145", "C501", "C500", "C514", "1.6750", "2", "180.0"}, {"C145", "C502", "C501", "C500", "3.0000", "2", "180.0"}, {"C149", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C149", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C149", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C149", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C149", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C149", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C149", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C149", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C149", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C149", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C149", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C149", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C149", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C149", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C149", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C149", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C149", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C149", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C149", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C149", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C149", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C149", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C149", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C149", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C157", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C157", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C157", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C157", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C157", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C157", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C157", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C157", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C157", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C157", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C157", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C157", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C157", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C157", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C157", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C157", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C157", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C157", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C157", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C157", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C157", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C158", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C158", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C158", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C158", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C158", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C158", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C158", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C158", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C158", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C158", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C158", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C158", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C158", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C158", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C158", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C158", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C158", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C158", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C158", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C158", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C158", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C158", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C158", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C158", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C206", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C206", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C206", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C206", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C206", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C206", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C206", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C206", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C206", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C206", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C206", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C206", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C206", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C206", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C206", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C206", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C206", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C206", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C206", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C206", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C206", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C206", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C206", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C206", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C209", "S202", "C210", "H140", "0.3235", "3", "0.0"}, {"C210", "C136", "C224", "C235", "-0.4555", "1", "0.0"}, {"C210", "C136", "C224", "C235", "0.3495", "2", "180.0"}, {"C210", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C210", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C224", "N238", "0.1070", "1", "0.0"}, {"C210", "C136", "C224", "N238", "0.2705", "2", "180.0"}, {"C210", "C136", "C224", "N238", "0.1960", "3", "0.0"}, {"C210", "C136", "C283", "C271", "-0.4555", "1", "0.0"}, {"C210", "C136", "C283", "C271", "0.3495", "2", "180.0"}, {"C210", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C210", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C283", "N238", "0.1070", "1", "0.0"}, {"C210", "C136", "C283", "N238", "0.2705", "2", "180.0"}, {"C210", "C136", "C283", "N238", "0.1960", "3", "0.0"}, {"C210", "C136", "C293", "C235", "-0.4555", "1", "0.0"}, {"C210", "C136", "C293", "C235", "0.3495", "2", "180.0"}, {"C210", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C210", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C293", "N287", "0.1070", "1", "0.0"}, {"C210", "C136", "C293", "N287", "0.2705", "2", "180.0"}, {"C210", "C136", "C293", "N287", "0.1960", "3", "0.0"}, {"C210", "S202", "C209", "H140", "0.3235", "3", "0.0"}, {"C214", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C214", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C214", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C214", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C214", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C214", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C214", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C214", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C214", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C214", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C214", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C214", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C214", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C214", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C214", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C214", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C214", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C214", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C214", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C214", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C214", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C214", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C214", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C214", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C214", "S203", "S203", "C214", "-3.7070", "2", "180.0"}, {"C214", "S203", "S203", "C214", "0.8525", "3", "0.0"}, {"C223", "C235", "N238", "C223", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C223", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C242", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C242", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C295", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C295", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C223", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C223", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C223", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C224", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C224", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C292", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C292", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C293", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C293", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C295", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C295", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C224", "C136", "C136", "C235", "-0.6335", "1", "0.0"}, {"C224", "C136", "C136", "C235", "0.2395", "2", "180.0"}, {"C224", "C136", "C136", "C235", "-0.2430", "3", "0.0"}, {"C224", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C224", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C224", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C224", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C224", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C224", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C224", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C224", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C224", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C224", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C224", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C224", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C224", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C224", "C136", "C274", "C271", "-0.4425", "1", "0.0"}, {"C224", "C136", "C274", "C271", "0.5125", "2", "180.0"}, {"C224", "C136", "C274", "C271", "-0.6465", "3", "0.0"}, {"C224", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C224", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C224", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C224", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C224", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C224", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C224", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C224", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C224", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C224", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C224", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C224", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C224", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C224", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C224", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C224", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C224", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C224", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C224", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C224", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C224", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C242", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C242", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C224", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C224", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C224", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C223", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C223", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C224", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C224", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C224", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C224", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C224", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C224", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C224", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C224", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C224", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C224", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C224", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C224", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C224", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C224", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C224", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C224", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C224", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C224", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C292", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C292", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C293", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C293", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C295", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C295", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C235", "C136", "C136", "C283", "-0.6335", "1", "0.0"}, {"C235", "C136", "C136", "C283", "0.2395", "2", "180.0"}, {"C235", "C136", "C136", "C283", "-0.2430", "3", "0.0"}, {"C235", "C136", "C136", "C293", "-0.6335", "1", "0.0"}, {"C235", "C136", "C136", "C293", "0.2395", "2", "180.0"}, {"C235", "C136", "C136", "C293", "-0.2430", "3", "0.0"}, {"C235", "C136", "C136", "H140", "-0.0500", "3", "0.0"}, {"C235", "C136", "C224", "C235", "0.2990", "1", "0.0"}, {"C235", "C136", "C224", "C235", "0.7790", "2", "180.0"}, {"C235", "C136", "C224", "C235", "0.1275", "3", "0.0"}, {"C235", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C224", "N238", "-2.7505", "1", "0.0"}, {"C235", "C136", "C224", "N238", "0.7635", "2", "180.0"}, {"C235", "C136", "C224", "N238", "0.0000", "3", "0.0"}, {"C235", "C136", "C283", "C271", "0.2990", "1", "0.0"}, {"C235", "C136", "C283", "C271", "0.7790", "2", "180.0"}, {"C235", "C136", "C283", "C271", "0.1275", "3", "0.0"}, {"C235", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C283", "N238", "-2.7505", "1", "0.0"}, {"C235", "C136", "C283", "N238", "0.7635", "2", "180.0"}, {"C235", "C136", "C283", "N238", "0.0000", "3", "0.0"}, {"C235", "C136", "C293", "C235", "0.2990", "1", "0.0"}, {"C235", "C136", "C293", "C235", "0.7790", "2", "180.0"}, {"C235", "C136", "C293", "C235", "0.1275", "3", "0.0"}, {"C235", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C293", "N287", "-2.7505", "1", "0.0"}, {"C235", "C136", "C293", "N287", "0.7635", "2", "180.0"}, {"C235", "C136", "C293", "N287", "0.0000", "3", "0.0"}, {"C235", "C223", "N238", "C235", "-1.2555", "1", "0.0"}, {"C235", "C223", "N238", "C235", "0.1050", "2", "180.0"}, {"C235", "C223", "N238", "C235", "-0.1000", "3", "0.0"}, {"C235", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"C235", "C224", "C135", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C136", "C267", "0.2990", "1", "0.0"}, {"C235", "C224", "C136", "C267", "0.7790", "2", "180.0"}, {"C235", "C224", "C136", "C267", "0.1275", "3", "0.0"}, {"C235", "C224", "C136", "C274", "-0.8820", "1", "0.0"}, {"C235", "C224", "C136", "C274", "0.3500", "2", "180.0"}, {"C235", "C224", "C136", "C274", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "C308", "-0.9855", "1", "0.0"}, {"C235", "C224", "C136", "C308", "0.3850", "2", "180.0"}, {"C235", "C224", "C136", "C308", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "C500", "-0.2530", "1", "0.0"}, {"C235", "C224", "C136", "C500", "0.4875", "2", "180.0"}, {"C235", "C224", "C136", "C500", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C137", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C149", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C157", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C157", "O154", "-2.8965", "1", "0.0"}, {"C235", "C224", "C157", "O154", "0.2025", "2", "180.0"}, {"C235", "C224", "C157", "O154", "0.0000", "3", "0.0"}, {"C235", "C224", "C158", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C158", "O154", "-2.8965", "1", "0.0"}, {"C235", "C224", "C158", "O154", "0.2025", "2", "180.0"}, {"C235", "C224", "C158", "O154", "0.0000", "3", "0.0"}, {"C235", "C224", "C206", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C206", "S200", "-1.6615", "1", "0.0"}, {"C235", "C224", "C206", "S200", "0.2645", "2", "180.0"}, {"C235", "C224", "C206", "S200", "0.0000", "3", "0.0"}, {"C235", "C224", "C214", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C214", "S203", "-1.6615", "1", "0.0"}, {"C235", "C224", "C214", "S203", "0.2645", "2", "180.0"}, {"C235", "C224", "C214", "S203", "0.0000", "3", "0.0"}, {"C235", "C224", "C274", "C271", "0.7715", "1", "0.0"}, {"C235", "C224", "C274", "C271", "0.3480", "2", "180.0"}, {"C235", "C224", "C274", "C271", "0.0000", "3", "0.0"}, {"C235", "C224", "C274", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C505", "C507", "-0.6410", "1", "0.0"}, {"C235", "C224", "C505", "C507", "0.8225", "2", "180.0"}, {"C235", "C224", "C505", "C507", "-0.0085", "3", "0.0"}, {"C235", "C224", "C505", "C508", "-0.6410", "1", "0.0"}, {"C235", "C224", "C505", "C508", "0.8225", "2", "180.0"}, {"C235", "C224", "C505", "C508", "-0.0085", "3", "0.0"}, {"C235", "C224", "C505", "C510", "-0.8540", "1", "0.0"}, {"C235", "C224", "C505", "C510", "0.7580", "2", "180.0"}, {"C235", "C224", "C505", "C510", "-0.2510", "3", "0.0"}, {"C235", "C224", "C505", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "N238", "C235", "-1.2555", "1", "0.0"}, {"C235", "C224", "N238", "C235", "0.1050", "2", "180.0"}, {"C235", "C224", "N238", "C235", "-0.1000", "3", "0.0"}, {"C235", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C235", "N238", "C223", "C267", "-1.2555", "1", "0.0"}, {"C235", "N238", "C223", "C267", "0.1050", "2", "180.0"}, {"C235", "N238", "C223", "C267", "-0.1000", "3", "0.0"}, {"C235", "N238", "C224", "C267", "-1.2555", "1", "0.0"}, {"C235", "N238", "C224", "C267", "0.1050", "2", "180.0"}, {"C235", "N238", "C224", "C267", "-0.1000", "3", "0.0"}, {"C235", "C246", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C246", "N239", "C235", "-1.2555", "1", "0.0"}, {"C235", "C246", "N239", "C235", "0.1050", "2", "180.0"}, {"C235", "C246", "N239", "C235", "-0.1000", "3", "0.0"}, {"C235", "C246", "N239", "C245", "-0.8685", "1", "0.0"}, {"C235", "C246", "N239", "C245", "0.6255", "2", "180.0"}, {"C235", "C246", "N239", "C245", "-1.7505", "3", "0.0"}, {"C235", "C292", "N287", "H290", "0.1735", "3", "0.0"}, {"C235", "C293", "C135", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C136", "C274", "-0.8820", "1", "0.0"}, {"C235", "C293", "C136", "C274", "0.3500", "2", "180.0"}, {"C235", "C293", "C136", "C274", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C308", "-0.9855", "1", "0.0"}, {"C235", "C293", "C136", "C308", "0.3850", "2", "180.0"}, {"C235", "C293", "C136", "C308", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C500", "-0.2530", "1", "0.0"}, {"C235", "C293", "C136", "C500", "0.4875", "2", "180.0"}, {"C235", "C293", "C136", "C500", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C137", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C149", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C157", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C157", "O154", "-2.8965", "1", "0.0"}, {"C235", "C293", "C157", "O154", "0.2025", "2", "180.0"}, {"C235", "C293", "C157", "O154", "0.0000", "3", "0.0"}, {"C235", "C293", "C158", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C158", "O154", "-2.8965", "1", "0.0"}, {"C235", "C293", "C158", "O154", "0.2025", "2", "180.0"}, {"C235", "C293", "C158", "O154", "0.0000", "3", "0.0"}, {"C235", "C293", "C206", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C206", "S200", "-1.6615", "1", "0.0"}, {"C235", "C293", "C206", "S200", "0.2645", "2", "180.0"}, {"C235", "C293", "C206", "S200", "0.0000", "3", "0.0"}, {"C235", "C293", "C214", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C214", "S203", "-1.6615", "1", "0.0"}, {"C235", "C293", "C214", "S203", "0.2645", "2", "180.0"}, {"C235", "C293", "C214", "S203", "0.0000", "3", "0.0"}, {"C235", "C293", "C274", "C271", "0.7715", "1", "0.0"}, {"C235", "C293", "C274", "C271", "0.3480", "2", "180.0"}, {"C235", "C293", "C274", "C271", "0.0000", "3", "0.0"}, {"C235", "C293", "C274", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C505", "C507", "-0.6410", "1", "0.0"}, {"C235", "C293", "C505", "C507", "0.8225", "2", "180.0"}, {"C235", "C293", "C505", "C507", "-0.0085", "3", "0.0"}, {"C235", "C293", "C505", "C508", "-0.6410", "1", "0.0"}, {"C235", "C293", "C505", "C508", "0.8225", "2", "180.0"}, {"C235", "C293", "C505", "C508", "-0.0085", "3", "0.0"}, {"C235", "C293", "C505", "C510", "-0.8540", "1", "0.0"}, {"C235", "C293", "C505", "C510", "0.7580", "2", "180.0"}, {"C235", "C293", "C505", "C510", "-0.2510", "3", "0.0"}, {"C235", "C293", "C505", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C235", "C295", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C295", "N309", "C296", "0.71895", "1", "0.0"}, {"C235", "C295", "N309", "C296", "-0.0619", "2", "180.0"}, {"C235", "C295", "N309", "C296", "0.13195", "3", "0.0"}, {"C235", "C295", "N309", "H310", "0.1735", "3", "0.0"}, {"C235", "N238", "C223", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C224", "C274", "-0.3410", "1", "0.0"}, {"C235", "N238", "C224", "C274", "0.0650", "2", "180.0"}, {"C235", "N238", "C224", "C274", "0.1690", "3", "0.0"}, {"C235", "N238", "C224", "C505", "-0.3410", "1", "0.0"}, {"C235", "N238", "C224", "C505", "0.0650", "2", "180.0"}, {"C235", "N238", "C224", "C505", "0.1690", "3", "0.0"}, {"C235", "N238", "C224", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C242", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C283", "C271", "-1.2555", "1", "0.0"}, {"C235", "N238", "C283", "C271", "0.1050", "2", "180.0"}, {"C235", "N238", "C283", "C271", "-0.1000", "3", "0.0"}, {"C235", "N238", "C283", "C274", "-0.3410", "1", "0.0"}, {"C235", "N238", "C283", "C274", "0.0650", "2", "180.0"}, {"C235", "N238", "C283", "C274", "0.1690", "3", "0.0"}, {"C235", "N238", "C283", "C505", "-0.3410", "1", "0.0"}, {"C235", "N238", "C283", "C505", "0.0650", "2", "180.0"}, {"C235", "N238", "C283", "C505", "0.1690", "3", "0.0"}, {"C235", "N238", "C283", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C284", "C271", "-1.2555", "1", "0.0"}, {"C235", "N238", "C284", "C271", "0.1050", "2", "180.0"}, {"C235", "N238", "C284", "C271", "-0.1000", "3", "0.0"}, {"C235", "N238", "C284", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C246", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C285", "C271", "-1.2555", "1", "0.0"}, {"C235", "N239", "C285", "C271", "0.1050", "2", "180.0"}, {"C235", "N239", "C285", "C271", "-0.1000", "3", "0.0"}, {"C235", "N239", "C285", "H140", "0.0000", "1", "0.0"}, {"C242", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C242", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C242", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C245", "C136", "C136", "C246", "0.6500", "1", "0.0"}, {"C245", "C136", "C136", "C246", "-0.1000", "2", "180.0"}, {"C245", "C136", "C136", "C246", "0.1000", "3", "0.0"}, {"C245", "C136", "C136", "C285", "0.6500", "1", "0.0"}, {"C245", "C136", "C136", "C285", "-0.1000", "2", "180.0"}, {"C245", "C136", "C136", "C285", "0.1000", "3", "0.0"}, {"C245", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C245", "N239", "C235", "C246", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C246", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C292", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C292", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C293", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C293", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C295", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C295", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C245", "N239", "C246", "H140", "0.0000", "1", "0.0"}, {"C245", "N239", "C285", "C271", "-0.8685", "1", "0.0"}, {"C245", "N239", "C285", "C271", "0.6255", "2", "180.0"}, {"C245", "N239", "C285", "C271", "-1.7505", "3", "0.0"}, {"C245", "N239", "C285", "H140", "0.0000", "1", "0.0"}, {"C246", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C246", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C246", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C246", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C246", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C246", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C246", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C246", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C246", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C246", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C292", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C292", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C293", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C293", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C295", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C295", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C246", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C267", "C136", "C224", "H140", "-0.0380", "3", "0.0"}, {"C267", "C136", "C224", "N238", "-2.7505", "1", "0.0"}, {"C267", "C136", "C224", "N238", "0.7635", "2", "180.0"}, {"C267", "C136", "C224", "N238", "0.0000", "3", "0.0"}, {"C267", "C224", "C135", "H140", "0.0370", "3", "0.0"}, {"C267", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"C267", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C274", "C136", "C283", "-0.4425", "1", "0.0"}, {"C271", "C274", "C136", "C283", "0.5125", "2", "180.0"}, {"C271", "C274", "C136", "C283", "-0.6465", "3", "0.0"}, {"C271", "C274", "C136", "C293", "-0.4425", "1", "0.0"}, {"C271", "C274", "C136", "C293", "0.5125", "2", "180.0"}, {"C271", "C274", "C136", "C293", "-0.6465", "3", "0.0"}, {"C271", "C274", "C136", "H140", "-0.1125", "3", "0.0"}, {"C271", "C274", "C224", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C224", "N238", "-3.9450", "1", "0.0"}, {"C271", "C274", "C224", "N238", "0.3310", "2", "180.0"}, {"C271", "C274", "C224", "N238", "0.4985", "3", "0.0"}, {"C271", "C274", "C283", "C271", "0.7715", "1", "0.0"}, {"C271", "C274", "C283", "C271", "0.3480", "2", "180.0"}, {"C271", "C274", "C283", "C271", "0.0000", "3", "0.0"}, {"C271", "C274", "C283", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C283", "N238", "-3.9450", "1", "0.0"}, {"C271", "C274", "C283", "N238", "0.3310", "2", "180.0"}, {"C271", "C274", "C283", "N238", "0.4985", "3", "0.0"}, {"C271", "C274", "C293", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C293", "N287", "-3.9450", "1", "0.0"}, {"C271", "C274", "C293", "N287", "0.3310", "2", "180.0"}, {"C271", "C274", "C293", "N287", "0.4985", "3", "0.0"}, {"C271", "C283", "C135", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C136", "C274", "-0.8820", "1", "0.0"}, {"C271", "C283", "C136", "C274", "0.3500", "2", "180.0"}, {"C271", "C283", "C136", "C274", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "C308", "-0.9855", "1", "0.0"}, {"C271", "C283", "C136", "C308", "0.3850", "2", "180.0"}, {"C271", "C283", "C136", "C308", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "C500", "-0.2530", "1", "0.0"}, {"C271", "C283", "C136", "C500", "0.4875", "2", "180.0"}, {"C271", "C283", "C136", "C500", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C137", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C149", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C157", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C157", "O154", "-2.8965", "1", "0.0"}, {"C271", "C283", "C157", "O154", "0.2025", "2", "180.0"}, {"C271", "C283", "C157", "O154", "0.0000", "3", "0.0"}, {"C271", "C283", "C158", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C158", "O154", "-2.8965", "1", "0.0"}, {"C271", "C283", "C158", "O154", "0.2025", "2", "180.0"}, {"C271", "C283", "C158", "O154", "0.0000", "3", "0.0"}, {"C271", "C283", "C206", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C206", "S200", "-1.6615", "1", "0.0"}, {"C271", "C283", "C206", "S200", "0.2645", "2", "180.0"}, {"C271", "C283", "C206", "S200", "0.0000", "3", "0.0"}, {"C271", "C283", "C214", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C214", "S203", "-1.6615", "1", "0.0"}, {"C271", "C283", "C214", "S203", "0.2645", "2", "180.0"}, {"C271", "C283", "C214", "S203", "0.0000", "3", "0.0"}, {"C271", "C283", "C274", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C505", "C507", "-0.6410", "1", "0.0"}, {"C271", "C283", "C505", "C507", "0.8225", "2", "180.0"}, {"C271", "C283", "C505", "C507", "-0.0085", "3", "0.0"}, {"C271", "C283", "C505", "C508", "-0.6410", "1", "0.0"}, {"C271", "C283", "C505", "C508", "0.8225", "2", "180.0"}, {"C271", "C283", "C505", "C508", "-0.0085", "3", "0.0"}, {"C271", "C283", "C505", "C510", "-0.8540", "1", "0.0"}, {"C271", "C283", "C505", "C510", "0.7580", "2", "180.0"}, {"C271", "C283", "C505", "C510", "-0.2510", "3", "0.0"}, {"C271", "C283", "C505", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C284", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C285", "C136", "H140", "-0.0380", "3", "0.0"}, {"C274", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C224", "N238", "0.9935", "1", "0.0"}, {"C274", "C136", "C224", "N238", "0.2285", "2", "180.0"}, {"C274", "C136", "C224", "N238", "0.4100", "3", "0.0"}, {"C274", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C283", "N238", "0.9935", "1", "0.0"}, {"C274", "C136", "C283", "N238", "0.2285", "2", "180.0"}, {"C274", "C136", "C283", "N238", "0.4100", "3", "0.0"}, {"C274", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C293", "N287", "0.9935", "1", "0.0"}, {"C274", "C136", "C293", "N287", "0.2285", "2", "180.0"}, {"C274", "C136", "C293", "N287", "0.4100", "3", "0.0"}, {"C274", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C274", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C274", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C274", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C274", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C274", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C274", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C274", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C274", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C274", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C274", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C274", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C274", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C274", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C274", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C274", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C274", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C274", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C283", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C283", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C283", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C283", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C283", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C283", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C283", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C283", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C283", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C283", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C283", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C283", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C283", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C283", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C283", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C283", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C283", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C283", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C283", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C283", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C283", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C283", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C283", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C283", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C283", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C283", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C283", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C283", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C283", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C283", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C283", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C283", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C283", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C283", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C283", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C283", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C283", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C283", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C283", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C283", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C283", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C283", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C283", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C283", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C283", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C283", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C283", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C283", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C283", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C284", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C285", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C285", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C285", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C292", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C292", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C293", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C293", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C293", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C293", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C293", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C293", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C293", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C293", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C293", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C293", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C293", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C293", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C293", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C293", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C293", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C293", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C293", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C293", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C293", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C293", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C293", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C293", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C293", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C293", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C293", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C293", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C293", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C293", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C293", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C293", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C293", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C293", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C293", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C293", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C293", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C293", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C293", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C293", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C293", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C293", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C293", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C293", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C293", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C293", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C293", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C293", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C293", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C293", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C293", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C295", "C136", "C136", "C296", "0.6500", "1", "0.0"}, {"C295", "C136", "C136", "C296", "-0.1000", "2", "180.0"}, {"C295", "C136", "C136", "C296", "0.1000", "3", "0.0"}, {"C295", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C295", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C295", "N309", "C296", "H140", "0.15085", "3", "0.0"}, {"C296", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C296", "N309", "C295", "H140", "0.15085", "3", "0.0"}, {"C302", "N303", "C307", "C308", "0.9145", "1", "0.0"}, {"C302", "N303", "C307", "C308", "0.1215", "2", "180.0"}, {"C302", "N303", "C307", "C308", "-0.2490", "3", "0.0"}, {"C302", "N303", "C307", "H140", "0.0885", "3", "0.0"}, {"C307", "C308", "C136", "H140", "0.1500", "3", "0.0"}, {"C307", "N303", "C302", "N300", "3.9680", "2", "180.0"}, {"C308", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C224", "N238", "0.0515", "1", "0.0"}, {"C308", "C136", "C224", "N238", "0.3265", "2", "180.0"}, {"C308", "C136", "C224", "N238", "0.2815", "3", "0.0"}, {"C308", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C283", "N238", "0.0515", "1", "0.0"}, {"C308", "C136", "C283", "N238", "0.3265", "2", "180.0"}, {"C308", "C136", "C283", "N238", "0.2815", "3", "0.0"}, {"C308", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C293", "N287", "0.0515", "1", "0.0"}, {"C308", "C136", "C293", "N287", "0.3265", "2", "180.0"}, {"C308", "C136", "C293", "N287", "0.2815", "3", "0.0"}, {"C308", "C307", "N303", "H304", "-0.0950", "1", "0.0"}, {"C308", "C307", "N303", "H304", "-0.2085", "2", "180.0"}, {"C308", "C307", "N303", "H304", "0.2090", "3", "0.0"}, {"C500", "C136", "C224", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C224", "N238", "-0.2940", "1", "0.0"}, {"C500", "C136", "C224", "N238", "0.5100", "2", "180.0"}, {"C500", "C136", "C224", "N238", "0.3325", "3", "0.0"}, {"C500", "C136", "C283", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C283", "N238", "-0.2940", "1", "0.0"}, {"C500", "C136", "C283", "N238", "0.5100", "2", "180.0"}, {"C500", "C136", "C283", "N238", "0.3325", "3", "0.0"}, {"C500", "C136", "C293", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C293", "N287", "-0.2940", "1", "0.0"}, {"C500", "C136", "C293", "N287", "0.5100", "2", "180.0"}, {"C500", "C136", "C293", "N287", "0.3325", "3", "0.0"}, {"C500", "C501", "C145", "H146", "3.5000", "2", "180.0"}, {"C501", "C500", "C136", "H140", "0.0000", "1", "0.0"}, {"C501", "C502", "C145", "H146", "3.6250", "2", "180.0"}, {"C502", "C501", "C145", "H146", "3.5000", "2", "180.0"}, {"C502", "C501", "C500", "C514", "1.6750", "2", "180.0"}, {"C502", "N503", "C514", "H146", "1.5000", "2", "180.0"}, {"C505", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C505", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C505", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C505", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C505", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C505", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C505", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C505", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C505", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C505", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C505", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C505", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C505", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C505", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C505", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C505", "C508", "C507", "H146", "5.3750", "2", "180.0"}, {"C505", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"C505", "C508", "N503", "C506", "1.4000", "2", "180.0"}, {"C505", "C508", "N503", "H504", "1.4000", "2", "180.0"}, {"C505", "C510", "N512", "C509", "1.4000", "2", "180.0"}, {"C505", "C510", "N512", "H513", "1.4000", "2", "180.0"}, {"C506", "N503", "C508", "C507", "1.4000", "2", "180.0"}, {"C506", "N503", "C508", "H146", "2.5000", "2", "180.0"}, {"C506", "N511", "C507", "C508", "2.4000", "2", "180.0"}, {"C506", "N511", "C507", "H146", "2.4000", "2", "180.0"}, {"C507", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C224", "N238", "-0.2710", "1", "0.0"}, {"C507", "C505", "C224", "N238", "0.2175", "2", "180.0"}, {"C507", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C507", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C283", "N238", "-0.2710", "1", "0.0"}, {"C507", "C505", "C283", "N238", "0.2175", "2", "180.0"}, {"C507", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C507", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C293", "N287", "-0.2710", "1", "0.0"}, {"C507", "C505", "C293", "N287", "0.2175", "2", "180.0"}, {"C507", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C507", "C508", "C505", "H140", "0.0000", "1", "0.0"}, {"C507", "C508", "N503", "H504", "1.4000", "2", "180.0"}, {"C507", "N511", "C506", "H146", "5.0000", "2", "180.0"}, {"C507", "N511", "C506", "N503", "5.0000", "2", "180.0"}, {"C508", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C224", "N238", "-0.2710", "1", "0.0"}, {"C508", "C505", "C224", "N238", "0.2175", "2", "180.0"}, {"C508", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C508", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C283", "N238", "-0.2710", "1", "0.0"}, {"C508", "C505", "C283", "N238", "0.2175", "2", "180.0"}, {"C508", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C508", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C293", "N287", "-0.2710", "1", "0.0"}, {"C508", "C505", "C293", "N287", "0.2175", "2", "180.0"}, {"C508", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C508", "C507", "C505", "H140", "0.0000", "1", "0.0"}, {"C508", "N503", "C506", "H146", "2.3250", "2", "180.0"}, {"C508", "N503", "C506", "N511", "2.3250", "2", "180.0"}, {"C509", "N512", "C510", "C510", "1.4000", "2", "180.0"}, {"C509", "N512", "C510", "H146", "2.5000", "2", "180.0"}, {"C510", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C224", "N238", "-1.5190", "1", "0.0"}, {"C510", "C505", "C224", "N238", "0.2095", "2", "180.0"}, {"C510", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C510", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C283", "N238", "-1.5190", "1", "0.0"}, {"C510", "C505", "C283", "N238", "0.2095", "2", "180.0"}, {"C510", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C510", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C293", "N287", "-1.5190", "1", "0.0"}, {"C510", "C505", "C293", "N287", "0.2095", "2", "180.0"}, {"C510", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C510", "C510", "C505", "H140", "0.0000", "1", "0.0"}, {"C510", "C510", "N512", "H513", "1.4000", "2", "180.0"}, {"C510", "N512", "C509", "H146", "2.3250", "2", "180.0"}, {"C510", "N512", "C509", "N512", "2.3250", "2", "180.0"}, {"C514", "C500", "C136", "H140", "-0.2400", "3", "0.0"}, {"H140", "C135", "C136", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C137", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C158", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C135", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C135", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C135", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C135", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C135", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C135", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C210", "S202", "0.2260", "3", "0.0"}, {"H140", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C136", "C235", "N237", "0.0000", "1", "0.0"}, {"H140", "C136", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C136", "C245", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C245", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C246", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C246", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C136", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C136", "C285", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C285", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C292", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C292", "N287", "0.1920", "3", "0.0"}, {"H140", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C136", "C295", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C295", "N309", "0.1920", "3", "0.0"}, {"H140", "C136", "C296", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C296", "N309", "0.1920", "3", "0.0"}, {"H140", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C149", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C149", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C149", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C157", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C157", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C157", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C157", "O154", "H155", "0.1762", "3", "0.0"}, {"H140", "C158", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C158", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C158", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C158", "O154", "H155", "0.1762", "3", "0.0"}, {"H140", "C206", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C206", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C206", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C206", "S200", "H204", "0.2400", "3", "0.0"}, {"H140", "C214", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C214", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C214", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C214", "S203", "S203", "0.2790", "3", "0.0"}, {"H140", "C223", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C223", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C223", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C224", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C224", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C224", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C224", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C224", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C224", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C223", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C223", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C224", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C224", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C224", "C274", "H140", "0.1500", "3", "0.0"}, {"H140", "C224", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C242", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C274", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C274", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C274", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C274", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C274", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C274", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C283", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C283", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C283", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C283", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C283", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C283", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C284", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C284", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C285", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C292", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C292", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C292", "N287", "H290", "0.1305", "3", "0.0"}, {"H140", "C293", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C293", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C293", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C293", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C293", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C293", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C293", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C293", "N287", "H290", "0.1305", "3", "0.0"}, {"H140", "C295", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C295", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C295", "N309", "H310", "0.1305", "3", "0.0"}, {"H140", "C296", "N309", "H310", "0.1920", "3", "0.0"}, {"H140", "C307", "C308", "H140", "0.1500", "3", "0.0"}, {"H140", "C307", "N303", "H304", "0.0000", "1", "0.0"}, {"H140", "C308", "C307", "N303", "-0.2910", "3", "0.0"}, {"H140", "C505", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C505", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C505", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C505", "C507", "N511", "0.2095", "3", "0.0"}, {"H140", "C505", "C508", "N503", "0.2095", "3", "0.0"}, {"H140", "C505", "C510", "N512", "0.2095", "3", "0.0"}, {"H146", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"H146", "C508", "N503", "H504", "2.5000", "2", "180.0"}, {"H146", "C510", "N512", "H513", "2.5000", "2", "180.0"}, {"H240", "N237", "C235", "O236", "2.4500", "2", "180.0"}, {"H241", "N238", "C235", "O236", "2.4500", "2", "180.0"}, {"H270", "O268", "C267", "O269", "2.7500", "2", "180.0"}, {"H301", "N300", "C302", "N300", "1.9500", "2", "180.0"}, {"H301", "N300", "C302", "N303", "1.9500", "2", "180.0"}, {"H304", "N303", "C302", "N300", "1.9500", "2", "180.0"}, {"H504", "N503", "C506", "N511", "2.3250", "2", "180.0"}, {"H513", "N512", "C509", "N512", "2.3250", "2", "180.0"}, {"N238", "C223", "C235", "N238", "0.9050", "1", "0.0"}, {"N238", "C223", "C235", "N238", "1.0775", "2", "180.0"}, {"N238", "C223", "C235", "N238", "-0.2350", "3", "0.0"}, {"N238", "C223", "C235", "N239", "0.9050", "1", "0.0"}, {"N238", "C223", "C235", "N239", "1.0775", "2", "180.0"}, {"N238", "C223", "C235", "N239", "-0.2350", "3", "0.0"}, {"N238", "C223", "C235", "O236", "0.0000", "1", "0.0"}, {"N238", "C224", "C157", "O154", "3.1290", "1", "0.0"}, {"N238", "C224", "C157", "O154", "-0.5185", "2", "180.0"}, {"N238", "C224", "C157", "O154", "0.6835", "3", "0.0"}, {"N238", "C224", "C158", "O154", "3.1290", "1", "0.0"}, {"N238", "C224", "C158", "O154", "-0.5185", "2", "180.0"}, {"N238", "C224", "C158", "O154", "0.6835", "3", "0.0"}, {"N238", "C224", "C206", "S200", "1.0275", "1", "0.0"}, {"N238", "C224", "C206", "S200", "0.2645", "2", "180.0"}, {"N238", "C224", "C206", "S200", "0.2720", "3", "0.0"}, {"N238", "C224", "C214", "S203", "1.0275", "1", "0.0"}, {"N238", "C224", "C214", "S203", "0.2645", "2", "180.0"}, {"N238", "C224", "C214", "S203", "0.2720", "3", "0.0"}, {"N238", "C224", "C235", "N238", "0.9050", "1", "0.0"}, {"N238", "C224", "C235", "N238", "1.0775", "2", "180.0"}, {"N238", "C224", "C235", "N238", "-0.2350", "3", "0.0"}, {"N238", "C224", "C235", "N239", "0.9050", "1", "0.0"}, {"N238", "C224", "C235", "N239", "1.0775", "2", "180.0"}, {"N238", "C224", "C235", "N239", "-0.2350", "3", "0.0"}, {"N238", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"N238", "C223", "C267", "O268", "2.6300", "1", "0.0"}, {"N238", "C223", "C267", "O268", "0.4100", "2", "180.0"}, {"N238", "C223", "C267", "O268", "0.0000", "3", "0.0"}, {"N238", "C224", "C267", "O268", "2.6300", "1", "0.0"}, {"N238", "C224", "C267", "O268", "0.4100", "2", "180.0"}, {"N238", "C224", "C267", "O268", "0.0000", "3", "0.0"}, {"N238", "C223", "C267", "O269", "0.0000", "1", "0.0"}, {"N238", "C224", "C267", "O269", "0.0000", "1", "0.0"}, {"N238", "C235", "C246", "N239", "-0.4700", "1", "0.0"}, {"N238", "C235", "C246", "N239", "1.3775", "2", "180.0"}, {"N238", "C235", "C246", "N239", "-1.3350", "3", "0.0"}, {"N238", "C235", "C292", "N287", "0.9050", "1", "0.0"}, {"N238", "C235", "C292", "N287", "1.0775", "2", "180.0"}, {"N238", "C235", "C292", "N287", "-0.2350", "3", "0.0"}, {"N238", "C235", "C293", "N287", "0.9050", "1", "0.0"}, {"N238", "C235", "C293", "N287", "1.0775", "2", "180.0"}, {"N238", "C235", "C293", "N287", "-0.2350", "3", "0.0"}, {"N238", "C235", "C295", "N309", "-0.4700", "1", "0.0"}, {"N238", "C235", "C295", "N309", "1.3775", "2", "180.0"}, {"N238", "C235", "C295", "N309", "-1.3350", "3", "0.0"}, {"N238", "C283", "C157", "O154", "3.1290", "1", "0.0"}, {"N238", "C283", "C157", "O154", "-0.5185", "2", "180.0"}, {"N238", "C283", "C157", "O154", "0.6835", "3", "0.0"}, {"N238", "C283", "C158", "O154", "3.1290", "1", "0.0"}, {"N238", "C283", "C158", "O154", "-0.5185", "2", "180.0"}, {"N238", "C283", "C158", "O154", "0.6835", "3", "0.0"}, {"N238", "C283", "C206", "S200", "1.0275", "1", "0.0"}, {"N238", "C283", "C206", "S200", "0.2645", "2", "180.0"}, {"N238", "C283", "C206", "S200", "0.2720", "3", "0.0"}, {"N238", "C283", "C214", "S203", "1.0275", "1", "0.0"}, {"N238", "C283", "C214", "S203", "0.2645", "2", "180.0"}, {"N238", "C283", "C214", "S203", "0.2720", "3", "0.0"}, {"N238", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"N238", "C284", "C271", "O272", "0.4100", "2", "180.0"}, {"N239", "C235", "C246", "N239", "-0.4700", "1", "0.0"}, {"N239", "C235", "C246", "N239", "1.3775", "2", "180.0"}, {"N239", "C235", "C246", "N239", "-1.3350", "3", "0.0"}, {"N239", "C235", "C293", "N287", "0.9050", "1", "0.0"}, {"N239", "C235", "C293", "N287", "1.0775", "2", "180.0"}, {"N239", "C235", "C293", "N287", "-0.2350", "3", "0.0"}, {"N239", "C235", "C295", "N309", "-0.4700", "1", "0.0"}, {"N239", "C235", "C295", "N309", "1.3775", "2", "180.0"}, {"N239", "C235", "C295", "N309", "-1.3350", "3", "0.0"}, {"N239", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"N239", "C285", "C271", "O272", "0.4100", "2", "180.0"}, {"N287", "C292", "C235", "O236", "0.0000", "1", "0.0"}, {"N287", "C293", "C157", "O154", "3.1290", "1", "0.0"}, {"N287", "C293", "C157", "O154", "-0.5185", "2", "180.0"}, {"N287", "C293", "C157", "O154", "0.6835", "3", "0.0"}, {"N287", "C293", "C158", "O154", "3.1290", "1", "0.0"}, {"N287", "C293", "C158", "O154", "-0.5185", "2", "180.0"}, {"N287", "C293", "C158", "O154", "0.6835", "3", "0.0"}, {"N287", "C293", "C206", "S200", "1.0275", "1", "0.0"}, {"N287", "C293", "C206", "S200", "0.2645", "2", "180.0"}, {"N287", "C293", "C206", "S200", "0.2720", "3", "0.0"}, {"N287", "C293", "C214", "S203", "1.0275", "1", "0.0"}, {"N287", "C293", "C214", "S203", "0.2645", "2", "180.0"}, {"N287", "C293", "C214", "S203", "0.2720", "3", "0.0"}, {"N287", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"N309", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"N503", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"C267", "C136", "C293", "N287", "-2.7505", "1", "0.0"}, {"C267", "C136", "C293", "N287", "0.7635", "2", "180.0"}, {"C267", "C136", "C293", "N287", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C267", "0.2990", "1", "0.0"}, {"C235", "C293", "C136", "C267", "0.7790", "2", "180.0"}, {"C235", "C293", "C136", "C267", "0.1275", "3", "0.0"}, {"C267", "C136", "C283", "N238", "-2.7505", "1", "0.0"}, {"C267", "C136", "C283", "N238", "0.7635", "2", "180.0"}, {"C267", "C136", "C283", "N238", "0.0000", "3", "0.0"}, {"C267", "C136", "C283", "C271", "0.2990", "1", "0.0"}, {"C267", "C136", "C283", "C271", "0.7790", "2", "180.0"}, {"C267", "C136", "C283", "C271", "0.1275", "3", "0.0"}}; /* Impropers */ char * OPLSAAM_impropers[105][7]= {{"C136", "C500", "C501", "C514", "1.1000", "2", "180.0"}, {"C136", "C500", "C514", "C501", "1.1000", "2", "180.0"}, {"C145", "C502", "C501", "N503", "1.1000", "2", "180.0"}, {"C145", "C502", "N503", "C501", "1.1000", "2", "180.0"}, {"C149", "C145", "C145", "C145", "1.1000", "2", "180.0"}, {"C245", "N238", "C235", "C285", "2.5000", "2", "180.0"}, {"C245", "N238", "C285", "C235", "2.5000", "2", "180.0"}, {"C245", "N239", "C235", "C246", "2.5000", "2", "180.0"}, {"C245", "N239", "C235", "C285", "2.5000", "2", "180.0"}, {"C245", "N239", "C246", "C235", "2.5000", "2", "180.0"}, {"C245", "N239", "C285", "C235", "2.5000", "2", "180.0"}, {"C502", "C501", "C145", "C500", "1.1000", "2", "180.0"}, {"C502", "C501", "C500", "C145", "1.1000", "2", "180.0"}, {"C505", "C507", "C508", "N511", "1.1000", "2", "180.0"}, {"C505", "C507", "N511", "C508", "1.1000", "2", "180.0"}, {"C505", "C508", "C507", "N503", "1.1000", "2", "180.0"}, {"C505", "C508", "N503", "C507", "1.1000", "2", "180.0"}, {"C505", "C510", "C510", "N512", "1.1000", "2", "180.0"}, {"C505", "C510", "N512", "C510", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C166", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C166", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C501", "1.1000", "2", "180.0"}, {"H146", "C145", "C501", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C502", "1.1000", "2", "180.0"}, {"H146", "C145", "C502", "C145", "1.1000", "2", "180.0"}, {"H146", "C506", "N503", "N511", "1.1000", "2", "180.0"}, {"H146", "C506", "N511", "N503", "1.1000", "2", "180.0"}, {"H146", "C507", "C508", "N511", "1.1000", "2", "180.0"}, {"H146", "C507", "N511", "C508", "1.1000", "2", "180.0"}, {"H146", "C508", "C507", "N503", "1.1000", "2", "180.0"}, {"H146", "C508", "N503", "C507", "1.1000", "2", "180.0"}, {"H146", "C509", "N512", "N512", "1.1000", "2", "180.0"}, {"H146", "C510", "C510", "N512", "1.1000", "2", "180.0"}, {"H146", "C510", "N512", "C510", "1.1000", "2", "180.0"}, {"H146", "C514", "C500", "N503", "1.1000", "2", "180.0"}, {"H146", "C514", "N503", "C500", "1.1000", "2", "180.0"}, {"H240", "N237", "C235", "H240", "2.5000", "2", "180.0"}, {"H240", "N237", "H240", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C223", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C224", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C223", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C224", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C242", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C283", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C284", "2.5000", "2", "180.0"}, {"H241", "N238", "C242", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C283", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C284", "C235", "2.5000", "2", "180.0"}, {"H301", "N300", "C302", "H301", "2.5000", "2", "180.0"}, {"H301", "N300", "H301", "C302", "2.5000", "2", "180.0"}, {"H304", "N303", "C302", "C307", "2.5000", "2", "180.0"}, {"H304", "N303", "C307", "C302", "2.5000", "2", "180.0"}, {"H504", "N503", "C502", "C514", "2.5000", "2", "180.0"}, {"H504", "N503", "C506", "C508", "2.5000", "2", "180.0"}, {"H504", "N503", "C508", "C506", "2.5000", "2", "180.0"}, {"H504", "N503", "C514", "C502", "2.5000", "2", "180.0"}, {"H513", "N512", "C509", "C510", "2.5000", "2", "180.0"}, {"H513", "N512", "C510", "C509", "2.5000", "2", "180.0"}, {"N300", "C302", "N300", "N303", "10.5000", "2", "180.0"}, {"N300", "C302", "N303", "N300", "10.5000", "2", "180.0"}, {"O167", "C166", "C145", "C145", "1.1000", "2", "180.0"}, {"O236", "C235", "C135", "N239", "10.5", "2", "180.0"}, {"O236", "C235", "C135", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C136", "N237", "10.5000", "2", "180.0"}, {"O236", "C235", "C223", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C223", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C224", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C224", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C246", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C246", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C292", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C293", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C293", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C295", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C295", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "N237", "C136", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C135", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C223", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C224", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C246", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C292", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C293", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C295", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C135", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C223", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C224", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C246", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C293", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C295", "10.5000", "2", "180.0"}, {"O269", "C267", "C136", "O268", "10.5000", "2", "180.0"}, {"O269", "C267", "O268", "C136", "10.5000", "2", "180.0"}, {"O269", "C267", "C224", "O268", "10.5000", "2", "180.0"}, {"O269", "C267", "O268", "C224", "10.5000", "2", "180.0"}, {"O272", "C271", "C274", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C283", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C284", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C285", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C274", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C283", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C284", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C285", "10.5000", "2", "180.0"}, {"O268", "C267", "C136", "O269", "10.5", "2", "180.0"}, {"O268", "C267", "C223", "O269", "10.5", "2", "180.0"}, {"O268", "C267", "C224", "O269", "10.5", "2", "180.0"}}; /* Non-bonded */ char * OPLSAAM_vdw[78][7]= {{"C135", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C136", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C137", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C145", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C149", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C157", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C158", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C166", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C206", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C209", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C210", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C214", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C223", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C224", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C235", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C242", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C245", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C246", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C267", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C271", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C274", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C283", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C284", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C285", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C292", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C293", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C295", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C296", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C302", "0.00", "-0.050000", "1.2627698", "0.00", "-0.025000", "1.2627698"}, {"C307", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C308", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C500", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C501", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C502", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C505", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C506", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C507", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C508", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C509", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C510", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C514", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"H140", "0.00", "-0.030000", "1.4030776", "0.00", "-0.015000", "1.4030776"}, {"H146", "0.00", "-0.030000", "1.3581791", "0.00", "-0.015000", "1.3581791"}, {"H155", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H168", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H204", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H240", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H241", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H270", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H290", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H301", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H304", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H310", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H504", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H513", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"N237", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N238", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N239", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N287", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N300", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N303", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N309", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N503", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N511", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N512", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"O154", "0.00", "-0.170000", "1.7510408", "0.00", "-0.085000", "1.7510408"}, {"O167", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"O236", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O268", "0.00", "-0.170000", "1.6836931", "0.00", "-0.085000", "1.6836931"}, {"O269", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O272", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"S200", "0.00", "-0.425000", "2.0204317", "0.00", "-0.212500", "2.0204317"}, {"S202", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"S203", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"OT", "0.00", "-0.152100", "1.768200", "0.00", "-0.152100", "1.768200"}, {"HT", "0.00", "-0.046000", "0.224500", "0.00", "-0.046000", "0.22450"}, {"SOD", "0.00", "-0.000500", "2.9969737", "0.00", "-0.000500", "2.9969737"}, {"CLA", "0.00", "-0.710000", "2.2561487", "0.00", "-0.710000", "2.2561487"}}; atomes_1.3.1/src/calc/force_fields/cvff_aug.c0000664000175000017500000141745315212624223020565 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cvff_aug.c * @short CVFF_aug force field, from 'CVFF_aug.frc' * @author Sébastien Le Roux */ /* * This file: 'cvff_aug.c' * * Contains: * CVFF_aug force field, data from taken from: - the 'CVFF_aug.frc' file This file contains several tables: Atoms : CVFF_aug_atoms[172][5] Equivalence : CVFF_aug_equivalence_auto[162][11] Equivalence : CVFF_aug_equivalence[168][7] Quadractic bonds : CVFF_aug_bonds_auto[798][5] Morse bonds : CVFF_aug_morse_bonds[752][6] Quadratic angles : CVFF_aug_angles_auto[640][6] Torsions : CVFF_aug_torsions_auto[342][8] Impropers : CVFF_aug_impropers[41][8] Non bonded : CVFF_aug_vdw[86][4] Bond increments : CVFF_aug_bond_increments[717][5] */ #include "global.h" int CVFF_aug_objects[14] = {172, 162, 168, 798, 0, 752, 640, 0, 342, 0, 0, 41, 86, 717}; int CVFF_aug_dim[14] = {5, 11, 7, 5, 0, 6, 6, 0, 8, 0, 0, 8, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CVFF_aug info */ char * CVFF_aug_atoms[172][5]= {{"H", "1.007970", "h", "Hydrogen bonded to C. Masses from CRC 1973/74 pages B-250.", "Ver. 1.0, Ref. 1"}, {"H", "2.014000", "d", "General Deuterium", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "Hydrogen bonded to N", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "Hydrogen bonded to O", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "Hydrogen bonded to P", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "Hydrogen bonded to S", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "Hydrogen in water molecule", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h$", "Hydrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"L", "0.001097", "lp", "Lone Pair", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "Lone Pair", "Ver. 1.1, Ref. 2"}, {"H", "1.007970", "h+", "Charged hydrogen in cations", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hc", "Hydrogen bonded to carbon", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hw", "Hydrogen in water", "Ver. 2.0, Ref. 18"}, {"D", "2.014000", "dw", "Deuterium in heivy water", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c", "Sp3 aliphatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cg", "Sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c'", "Sp2 carbon in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c*", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 21"}, {"C", "12.011150", "c\"", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "cp", "Sp2 aromatic carbon (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cr", "Carbon in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c+", "C in guanidinium group", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c-", "Carbon in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ca", "General amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c3", "Sp3 carbon in methyl (CH3) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cn", "Sp3 Carbon bonded to N", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c2", "Sp3 carbon bonded to 2 H's, 2 heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c1", "Sp3 carbon bonded to 1 H, 3 Heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c5", "Sp2 aromatic carbon in five membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cs", "Sp2 carbon involved in thiophene", "Ver. 1.3, Ref. 6"}, {"C", "12.011150", "c=", "Non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c=1", "Non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "c=2", "Non aromatic doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "ct", "Sp carbon involved in triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ci", "Aromatic carbon in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c$", "Carbon atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "co", "Sp3 carbon in acetals", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3m", "Sp3 carbon in 3-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4m", "Sp3 carbon in 4-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "coh", "Sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3h", "Sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4h", "Sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "ci", "Sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n", "Sp2 nitrogen with 1 H, 2 heavy atoms (amide group)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "no", "Sp2 nitrogen in nitro group", "Ver. 3.0, Ref. 22"}, {"N", "14.006700", "n2", "Sp2 nitrogen (NH2 in the guanidinium group (HN=C(NH2)2))", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "np", "Sp2 aromatic nitrogen (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n3", "Sp3 nitrogen with three substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n4", "Sp3 nitrogen with four substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=", "Non aromatic end double bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=1", "Non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "n=2", "Non aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "nt", "Sp nitrogen involved in triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "nz", "Sp nitrogen in N2", "Ver. 1.3, Ref. 4"}, {"N", "14.006700", "n1", "Sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "ni", "Sp2 nitrogen in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n$", "Nitrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "na", "Sp3 nitrogen in amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n3m", "Sp3 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n4m", "Sp3 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n3n", "Sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n4n", "Sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nb", "sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nn", "sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "npc", "sp2 nitrogen in 5- or 6- membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh", "sp2 nitrogen in 5-or 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nho", "sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh+", "protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n+", "sp3 nitrogen in protonated amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o'", "Oxygen in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o", "sp3 oxygen in ether or ester groups", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o-", "Oxygen in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oh", "Oxygen in hydroxyl (OH) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o*", "Oxygen in water molecule", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "op", "Oxygen in aromatic rings. e.g. furan", "Ver. 1.3, Ref. 8"}, {"O", "15.999400", "of", "Oxygen in", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o$", "Oxygen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oc", "sp3 oxygen in ether or acetals", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "oe", "sp3 oxygen in ester", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o3e", "sp3 oxygen in three membered ring", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o4e", "sp3 oxygen in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s", "Sulfur in methionine (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "s1", "Sulfur involved in S-S disulfide bond", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sh", "Sulfur in sulfhydryl (-SH) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sp", "Sulfur in thiophene", "Ver. 1.3, Ref. 6"}, {"S", "32.064000", "s'", "Sulfur in thioketone (>C=S) group", "Ver. 1.3, Ref. 7"}, {"S", "32.064000", "s$", "Sulfur atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s3e", "Sulfur in three membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s4e", "Sulfur in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s-", "Sulfur bonded to something then bonded to another partial double O or S", "Ver. 2.0, Ref. 18"}, {"P", "30.973800", "p", "General phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.973800", "p$", "Phosphorous atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"Ca", "40.079800", "ca+", "Calcium ion - Ca++, mass = mass of Ca - 2*electron mass.", "Ver. 2.0, Ref. 18"}, {"F", "18.998400", "f", "Fluorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "cl", "Chlorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Br", "79.909000", "br", "Bromine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"I", "126.9045", "i", "Covalently bound Iodine", "Ver. 1.3, Ref. 4"}, {"Si", "28.086000", "si", "Silicon atom (General)", "Ver. 1.0, Ref. 1"}, {"H", "12.000000", "nu", "NULL atom for relative free energy", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "Cl", "Chloride ion Cl-", "Ver. 1.0, Ref. 1"}, {"Br", "79.904000", "Br", "Bromide ion Br-", "Ver. 1.0, Ref. 1"}, {"Na", "22.989800", "Na", "Sodium ion", "Ver. 1.0, Ref. 1"}, {"Ar", "39.948", "ar", "Argon ", "Ver. 1.3, Ref. 9"}, {"Si", "28.086000", "sz", "Silicon atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Si", "28.086000", "sy", "Tetrahedral Silicon atom in Clays", "Ver. 3.2, Ref. 24"}, {"O", "15.999400", "oz", "Oxygen atom in zeolites", "Ver. 3.1, Ref. 23"}, {"O", "15.999400", "oy", "Oxygen atom in Clays", "Ver. 3.2, Ref. 24"}, {"Al", "26.981539", "az", "Tetrahedral Aluminum atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Al", "26.981539", "ay", "Octahedral Aluminum atom in Clays", "Ver. 3.2, Ref. 24"}, {"Al", "26.981539", "ayt", "Tetrahedral Aluminum atom to be used with oy", "Ver. 3.2, Ref. 34"}, {"P", "30.973800", "pz", "Phosphorous atom in zeolites", "Ver. 3.1, Ref. 23"}, {"P", "30.973800", "py", "Phosphorous atom to be used with oy", "Ver. 3.1, Ref. 34"}, {"Ga", "69.723000", "ga", "Gallium atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Ge", "72.610000", "ge", "Germanium atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Ti", "47.880000", "tioc", "Titanium (Octahedral) in zeolites", "Ver. 3.1, Ref. 23"}, {"Ti", "47.880000", "ti4c", "Titanium (Octahedral) to be used with oy", "Ver. 3.1, Ref. 35"}, {"Ti", "47.880000", "titd", "Titanium (Tetrahedral) in zeolites", "Ver. 3.1, Ref. 23"}, {"Li", "6.941000", "li+", "Lithium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Li", "6.941000", "lic+", "Lithium ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Li", "6.941000", "lioh", "Lithium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Na", "22.989800", "na+", "Sodium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Na", "22.989800", "nac+", "Sodium ion in Clays", "Ver. 3.2, Ref. 24"}, {"Na", "22.989800", "naoh", "Sodium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"K", "39.098300", "k+", "Potassium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"K", "39.098300", "koh", "Potassium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Rb", "85.467800", "rb+", "Rubidium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cs", "132.905430", "cs+", "Cesium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"N", "14.006740", "nh4+", "United atom type for ammonium ion to be used with oy", "Ver. 3.1, Ref. 36"}, {"Mg", "24.305000", "mg2+", "Magnesium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Mg", "24.305000", "mg2c", "Octahedral Magnesium ion in Clays", "Ver. 3.2, Ref. 24"}, {"Mn", "54.938050", "mn4c", "Manganese (IV) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Mn", "54.938050", "mn3c", "Manganese (III) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Co", "58.933200", "co2c", "Cobalt (II) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Ni", "58.690000", "ni2c", "Nickel (II) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Ca", "40.078000", "ca2+", "Calcium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Ca", "40.078000", "ca2c", "Calcium ion to be used with oy in Clays", "Ver. 3.1, Ref. 35"}, {"Sr", "87.620000", "sr2c", "Strontium ion to be used with oy in Clays", "Ver. 3.1, Ref. 35"}, {"Ba", "137.327000", "ba2+", "Barium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cu", "63.546000", "cu2+", "Copper(II) ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Fe", "55.847000", "fe2c", "Octahedral Fe(II) ion in clays", "Ver. 3.2, Ref. 24"}, {"F", "18.998403", "f-", "Fluoride ion in zeolites", "Ver. 3.1, Ref. 26"}, {"Be", "9.012182", "beoh", "Beryllium (II) in water to be used with o*", "Ver. 3.4, Ref. 33"}, {"F", "18.998400", "foh", "Fluoride ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Cl", "35.452700", "cl-", "Chloride ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cl", "35.452700", "cloh", "Chloride ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Cl", "35.452700", "cly-", "Chloride ion to be used with oy in Clays", "Ver. 3.4, Ref. 36"}, {"Br", "79.904000", "br-", "Bromide ion in zeolites", "Ver. 3.1, Ref. 23"}, {"I", "126.904470", "i-", "Iodide ion in zeolites", "Ver. 3.1, Ref. 23"}, {"S", "32.066000", "so4", "Sulfur in sulphate ion to be used with oz", "Ver. 3.1, Ref. 23"}, {"S", "32.066000", "so4y", "Sulfur in sulphate ion to be used with oy in Clays", "Ver. 3.1, Ref. 36"}, {"H", "1.008000", "hocl", "Hydrogen in hydroxyl group in Clays", "Ver. 3.2, Ref. 24"}, {"Pd", "106.4200", "pd2+", "Palladium(II) ", "Ver. 3.2, Ref. 27"}, {"V", "50.941500", "vy", "Tetrahedral Vanadium to be used with oy", "Ver. 3.2, Ref. 34"}, {"Al", "26.982000", "al", "Aluminium metal", "Ver. 2.1, Ref. 26"}, {"Na", "22.990000", "Na", "Sodium metal", "Ver. 2.1, Ref. 26"}, {"Pt", "195.090000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 26"}, {"Pd", "106.400000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 26"}, {"Au", "196.967000", "Au", "Gold metal", "Ver. 2.1, Ref. 26"}, {"Ag", "107.868000", "Ag", "Silver metal", "Ver. 2.1, Ref. 26"}, {"Sn", "118.690000", "Sn", "Tin metal", "Ver. 2.1, Ref. 26"}, {"K", "39.102000", "K", "Potassium metal", "Ver. 2.1, Ref. 26"}, {"Li", "6.940000", "Li", "Lithium metal", "Ver. 2.1, Ref. 26"}, {"Mo", "95.940000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 26"}, {"Fe", "55.847000", "Fe", "Iron metal", "Ver. 2.1, Ref. 26"}, {"W", "183.850000", "W", "Tungsten metal", "Ver. 2.1, Ref. 26"}, {"Ni", "58.710000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 26"}, {"Cr", "51.996000", "Cr", "Chromium metal", "Ver. 2.1, Ref. 26"}, {"Cu", "63.546000", "Cu", "Copper metal", "Ver. 2.1, Ref. 26"}, {"Pb", "207.200000", "Pb", "Lead metal", "Ver. 2.1, Ref. 26"}}; /* Equivalence table for key symbols CVFF_aug auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CVFF_aug info */ char * CVFF_aug_equivalence_auto[162][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hn", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hi", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"ho", "hn", "ho", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"lp", "h", "lp", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"coh", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ca", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cn", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c2", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c1", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ci", "c'", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 21"}, {"c\"", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"cp", "c'", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c5", "c'", "c5", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cs", "c'", "cs", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cr", "c'", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c+", "c'", "cr", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c=", "c'", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 18"}, {"c=1", "c'", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 18"}, {"na", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"ni", "n", "ni", "ni_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n+", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"no", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 3.0, Ref. 22"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n1", "n", "n1", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n=", "n", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 18"}, {"n=1", "n", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 18"}, {"nz", "n", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 18"}, {"o", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oh", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oc", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"op", "o'", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"of", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o-", "o'", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s-", "s'", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sh", "s", "sh", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 18"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 18"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 18"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 18"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 18"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 18"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 18"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 18"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 18"}, {"sz", "sz", "sz", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "Ver. 3.1, Ref. 23"}, {"sy", "sy", "sy", "sy_", "sy_", "sy_", "sy_", "sy_", "sy_", "sy_", "Ver. 3.2, Ref. 24"}, {"py", "py", "py", "py_", "py_", "py_", "py_", "py_", "py_", "py_", "Ver. 3.2, Ref. 34"}, {"vy", "vy", "vy", "vy_", "vy_", "vy_", "vy_", "vy_", "vy_", "vy_", "Ver. 3.2, Ref. 34"}, {"ti4c", "ti4c", "ti4c", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "Ver. 3.2, Ref. 35"}, {"ca2c", "ca2c", "ca2c", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "Ver. 3.2, Ref. 35"}, {"cly-", "cly-", "cly-", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "Ver. 3.2, Ref. 36"}, {"so4y", "so4y", "so4y", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "Ver. 3.2, Ref. 36"}, {"nh4+", "nh4+", "nh4+", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "Ver. 3.2, Ref. 36"}, {"sr2c", "sr2c", "sr2c", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "Ver. 3.2, Ref. 35"}, {"ayt", "ayt", "ayt", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "Ver. 3.2, Ref. 34"}, {"oz", "oz", "oz", "oz_", "oz_", "oz_", "oz_", "oz_", "oz_", "oz_", "Ver. 3.1, Ref. 23"}, {"oy", "oy", "oy", "oy_", "oy_", "oy_", "oy_", "oy_", "oy_", "oy_", "Ver. 3.2, Ref. 24"}, {"az", "az", "az", "az_", "az_", "az_", "az_", "az_", "az_", "az_", "Ver. 3.1, Ref. 23"}, {"ay", "ay", "ay", "ay_", "ay_", "ay_", "ay_", "ay_", "ay_", "ay_", "Ver. 3.2, Ref. 24"}, {"pz", "pz", "pz", "pz_", "pz_", "pz_", "pz_", "pz_", "pz_", "pz_", "Ver. 3.1, Ref. 23"}, {"ga", "ga", "ga", "ga_", "ga_", "ga_", "ga_", "ga_", "ga_", "ga_", "Ver. 3.1, Ref. 23"}, {"ge", "ge", "ge", "ge_", "ge_", "ge_", "ge_", "ge_", "ge_", "ge_", "Ver. 3.1, Ref. 23"}, {"tioc", "tioc", "tioc", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "Ver. 3.1, Ref. 23"}, {"titd", "titd", "titd", "titd_", "titd_", "titd_", "titd_", "titd_", "titd_", "titd_", "Ver. 3.1, Ref. 23"}, {"li+", "li+", "li+", "li+_", "li+_", "li+_", "li+_", "li+_", "li+_", "li+_", "Ver. 3.1, Ref. 23"}, {"na+", "na+", "na+", "na+_", "na+_", "na+_", "na+_", "na+_", "na+_", "na+_", "Ver. 3.1, Ref. 23"}, {"nac+", "nac+", "nac+", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "Ver. 3.2, Ref. 24"}, {"k+", "k+", "k+", "k+_", "k+_", "k+_", "k+_", "k+_", "k+_", "k+_", "Ver. 3.1, Ref. 23"}, {"rb+", "rb+", "rb+", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "Ver. 3.1, Ref. 23"}, {"cs+", "cs+", "cs+", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "Ver. 3.1, Ref. 23"}, {"mg2+", "mg2+", "mg2+", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "Ver. 3.1, Ref. 23"}, {"mg2c", "mg2c", "mg2c", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "Ver. 3.2, Ref. 24"}, {"mn4c", "mn4c", "mn4c", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "Ver. 3.3, Ref. 25"}, {"mn3c", "mn3c", "mn3c", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "Ver. 3.3, Ref. 25"}, {"co2c", "co2c", "co2c", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "Ver. 3.3, Ref. 25"}, {"ni2c", "ni2c", "ni2c", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "Ver. 3.3, Ref. 25"}, {"lic+", "lic+", "lic+", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "Ver. 3.3, Ref. 25"}, {"ca2+", "ca2+", "ca2+", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "Ver. 3.1, Ref. 23"}, {"ba2+", "ba2+", "ba2+", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "Ver. 3.1, Ref. 23"}, {"cu2+", "cu2+", "cu2+", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "Ver. 3.1, Ref. 23"}, {"fe2c", "fe2c", "fe2c", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "Ver. 3.2, Ref. 24"}, {"f-", "f-", "f-", "f-_", "f-_", "f-_", "f-_", "f-_", "f-_", "f-_", "Ver. 3.1, Ref. 26"}, {"cl-", "cl-", "cl-", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "Ver. 3.1, Ref. 23"}, {"br-", "br-", "br-", "br-_", "br-_", "br-_", "br-_", "br-_", "br-_", "br-_", "Ver. 3.1, Ref. 23"}, {"i-", "i-", "i-", "i-_", "i-_", "i-_", "i-_", "i-_", "i-_", "i-_", "Ver. 3.1, Ref. 23"}, {"so4", "so4", "so4", "so4_", "so4_", "so4_", "so4_", "so4_", "so4_", "so4_", "Ver. 3.1, Ref. 23"}, {"hocl", "hocl", "hocl", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "Ver. 3.2, Ref. 24"}, {"pd2+", "pd2+", "pd2+", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "Ver. 3.2, Ref. 27"}, {"lioh", "lioh", "lioh", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "Ver. 3.4, Ref. 30"}, {"naoh", "naoh", "naoh", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "Ver. 3.4, Ref. 30"}, {"koh", "koh", "koh", "koh_", "koh_", "koh_", "koh_", "koh_", "koh_", "koh_", "Ver. 3.4, Ref. 30"}, {"foh", "foh", "foh", "foh_", "foh_", "foh_", "foh_", "foh_", "foh_", "foh_", "Ver. 3.4, Ref. 30"}, {"cloh", "cloh", "cloh", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "Ver. 3.4, Ref. 30"}, {"beoh", "beoh", "beoh", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "Ver. 3.4, Ref. 33"}, {"al", "si", "si", "al_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Pb", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pt", "Pt", "Pt", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pd", "Pd", "Pd", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Au", "Au", "Au", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ag", "Ag", "Ag", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Sn", "Sn", "Sn", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Li", "Li", "Li", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Mo", "Mo", "Mo", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Fe", "Fe", "Fe", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"W", "W", "W", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ni", "Ni", "Ni", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cr", "Cr", "Cr", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cu", "Cu", "Cu", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF_aug with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CVFF_aug info */ char * CVFF_aug_equivalence[168][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"d", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "hs", "hs", "hs", "Ver. 1.0, Ref. 1"}, {"hn", "hn", "hn", "hn", "hn", "hn", "Ver. 1.0, Ref. 1"}, {"ho", "hn", "ho", "ho", "ho", "ho", "Ver. 1.0, Ref. 1"}, {"hi", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"h$", "h$", "h$", "h$", "h$", "h$", "Ver. 1.0, Ref. 1"}, {"lp", "h", "lp", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"coh", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cn", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c1", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c\"", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 21"}, {"cp", "c'", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "c'", "c5", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "c'", "cs", "cs", "cs", "cs", "Ver. 1.3, Ref. 6"}, {"cr", "c'", "cr", "c'", "cr", "c'", "Ver. 1.0, Ref. 1"}, {"c+", "c'", "cr", "c'", "cr", "c'", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"ci", "c'", "ci", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c$", "c$", "c$", "c$", "c$", "c$", "Ver. 1.0, Ref. 1"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"no", "n", "no", "no", "no", "no", "Ver. 3.0, Ref. 22"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n", "n2", "n2", "Ver. 1.0, Ref. 1"}, {"n3", "n", "n3", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"na", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"n+", "n", "n4", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=", "n", "n=", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=1", "n", "n=1", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=2", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "n", "nz", "nz", "nz", "nz", "Ver. 1.3, Ref. 4"}, {"n1", "n", "n1", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"ni", "n", "ni", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"nh", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n2", "n2", "n2", "Ver. 2.0, Ref. 18"}, {"n$", "n$", "n$", "n$", "n$", "n$", "Ver. 1.0, Ref. 1"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"o", "o'", "o", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o-", "o'", "o-", "o-", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"oh", "o'", "oh", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"op", "o'", "op", "op", "op", "op", "Ver. 1.3, Ref. 8"}, {"of", "o'", "oh", "o", "of", "o'", "Ver. 1.0, Ref. 1"}, {"o$", "o$", "o$", "o$", "o$", "o$", "Ver. 1.0, Ref. 1"}, {"oc", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "sh", "sh", "sh", "sh", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.3, Ref. 7"}, {"sp", "s'", "sp", "sp", "sp", "sp", "Ver. 1.3, Ref. 6"}, {"s$", "s$", "s$", "s$", "s$", "s$", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"p$", "p$", "p$", "p$", "p$", "p$", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.3, Ref. 9"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 3.1, Ref. 23"}, {"sy", "sy", "sy", "sy", "sy", "sy", "Ver. 3.2, Ref. 24"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 3.1, Ref. 23"}, {"oy", "oy", "oy", "oy", "oy", "oy", "Ver. 3.2, Ref. 24"}, {"az", "az", "az", "az", "az", "az", "Ver. 3.1, Ref. 23"}, {"ay", "ay", "ay", "ay", "ay", "ay", "Ver. 3.2, Ref. 24"}, {"pz", "pz", "pz", "pz", "pz", "pz", "Ver. 3.1, Ref. 23"}, {"ga", "ga", "ga", "ga", "ga", "ga", "Ver. 3.1, Ref. 23"}, {"ge", "ge", "ge", "ge", "ge", "ge", "Ver. 3.1, Ref. 23"}, {"tioc", "tioc", "tioc", "tioc", "tioc", "tioc", "Ver. 3.1, Ref. 23"}, {"titd", "titd", "titd", "titd", "titd", "titd", "Ver. 3.1, Ref. 23"}, {"li+", "li+", "li+", "li+", "li+", "li+", "Ver. 3.1, Ref. 23"}, {"na+", "na+", "na+", "na+", "na+", "na+", "Ver. 3.1, Ref. 23"}, {"nac+", "nac+", "nac+", "nac+", "nac+", "nac+", "Ver. 3.2, Ref. 24"}, {"k+", "k+", "k+", "k+", "k+", "k+", "Ver. 3.1, Ref. 23"}, {"rb+", "rb+", "rb+", "rb+", "rb+", "rb+", "Ver. 3.1, Ref. 23"}, {"cs+", "cs+", "cs+", "cs+", "cs+", "cs+", "Ver. 3.1, Ref. 23"}, {"mg2+", "mg2+", "mg2+", "mg2+", "mg2+", "mg2+", "Ver. 3.1, Ref. 23"}, {"mg2c", "mg2c", "mg2c", "mg2c", "mg2c", "mg2c", "Ver. 3.2, Ref. 24"}, {"mn4c", "mn4c", "mn4c", "mn4c", "mn4c", "mn4c", "Ver. 3.3, Ref. 25"}, {"mn3c", "mn3c", "mn3c", "mn3c", "mn3c", "mn3c", "Ver. 3.3, Ref. 25"}, {"co2c", "co2c", "co2c", "co2c", "co2c", "co2c", "Ver. 3.3, Ref. 25"}, {"ni2c", "ni2c", "ni2c", "ni2c", "ni2c", "ni2c", "Ver. 3.3, Ref. 25"}, {"lic+", "lic+", "lic+", "lic+", "lic+", "lic+", "Ver. 3.3, Ref. 25"}, {"ca2+", "ca2+", "ca2+", "ca2+", "ca2+", "ca2+", "Ver. 3.1, Ref. 23"}, {"ba2+", "ba2+", "ba2+", "ba2+", "ba2+", "ba2+", "Ver. 3.1, Ref. 23"}, {"cu2+", "cu2+", "cu2+", "cu2+", "cu2+", "cu2+", "Ver. 3.1, Ref. 23"}, {"fe2c", "fe2c", "fe2c", "fe2c", "fe2c", "fe2c", "Ver. 3.2, Ref. 24"}, {"f-", "f-", "f-", "f-", "f-", "f-", "Ver. 3.1, Ref. 26"}, {"cl-", "cl-", "cl-", "cl-", "cl-", "cl-", "Ver. 3.1, Ref. 23"}, {"br-", "br-", "br-", "br-", "br-", "br-", "Ver. 3.1, Ref. 23"}, {"i-", "i-", "i-", "i-", "i-", "i-", "Ver. 3.1, Ref. 23"}, {"so4", "so4", "so4", "so4", "so4", "so4", "Ver. 3.1, Ref. 23"}, {"ayt", "ayt", "ayt", "ayt", "ayt", "ayt", "Ver. 3.1, Ref. 34"}, {"py", "py", "py", "py", "py", "py", "Ver. 3.1, Ref. 34"}, {"vy", "vy", "vy", "vy", "vy", "vy", "Ver. 3.1, Ref. 34"}, {"ti4c", "ti4c", "ti4c", "ti4c", "ti4c", "ti4c", "Ver. 3.1, Ref. 35"}, {"ca2c", "ca2c", "ca2c", "ca2c", "ca2c", "ca2c", "Ver. 3.1, Ref. 35"}, {"cly-", "cly-", "cly-", "cly-", "cly-", "cly-", "Ver. 3.1, Ref. 36"}, {"nh4+", "nh4+", "nh4+", "nh4+", "nh4+", "nh4+", "Ver. 3.1, Ref. 36"}, {"so4y", "so4y", "so4y", "so4y", "so4y", "so4y", "Ver. 3.1, Ref. 36"}, {"sr2c", "sr2c", "sr2c", "sr2c", "sr2c", "sr2c", "Ver. 3.1, Ref. 35"}, {"hocl", "hocl", "hocl", "hocl", "hocl", "hocl", "Ver. 3.2, Ref. 24"}, {"pd2+", "pd2+", "pd2+", "pd2+", "pd2+", "pd2+", "Ver. 3.2, Ref. 27"}, {"lioh", "lioh", "lioh", "lioh", "lioh", "lioh", "Ver. 3.4, Ref. 30"}, {"naoh", "naoh", "naoh", "naoh", "naoh", "naoh", "Ver. 3.4, Ref. 30"}, {"koh", "koh", "koh", "koh", "koh", "koh", "Ver. 3.4, Ref. 30"}, {"foh", "foh", "foh", "foh", "foh", "foh", "Ver. 3.4, Ref. 30"}, {"cloh", "cloh", "cloh", "cloh", "cloh", "cloh", "Ver. 3.4, Ref. 30"}, {"beoh", "beoh", "beoh", "beoh", "beoh", "beoh", "Ver. 3.4, Ref. 33"}, {"al", "si", "al", "si", "si", "si", "Ver. 2.1, Ref. 26"}, {"Pt", "Pt", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pd", "Pd", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Au", "Au", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ag", "Ag", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Sn", "Na", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"K", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Li", "Li", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Mo", "Mo", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Fe", "Fe", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"W", "W", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ni", "Ni", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cr", "Cr", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cu", "Cu", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CVFF_aug info E = K2 * (R - R0)^2 */ char * CVFF_aug_bonds_auto[798][5]= {{"mg2+", "cl-", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"sz", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"sy", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"py", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"vy", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"ti4c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"ca2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"cly-", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"nh4+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"so4y", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"sr2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"ayt", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"az", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ay", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"pz", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ga", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ge", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"tioc", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"titd", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"li+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"na+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"nac+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"k+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"rb+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"cs+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"mg2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"mn4c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"mn3c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"co2c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"lic+", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"ca2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ba2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"cu2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"fe2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"f-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 26"}, {"cl-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"br-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"i-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"so4", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"hocl", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"pd2+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 27"}, {"lioh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"naoh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"koh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"foh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"cloh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"beoh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 33"}, {"no", "o-", "1.2178", "560.9942", "Ver. 3.0, Ref. 22"}, {"no", "cp", "1.4720", "351.2527", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "1.4720", "351.2527", "Ver. 3.0, Ref. 22"}, {"c", "o", "1.4250", "273.2000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "322.7158", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "283.0924", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "615.3220", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"oz", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "384.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "540.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "480.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "384.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "420.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "420.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "228.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "379.0809", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "400.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "320.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "280.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"o*", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "300.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "560.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "245.2000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "480.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "361.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "222.4000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "392.8000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "398.75", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "398.24", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "259.07", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "236.55", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "175.64", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "123.21", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "833.72", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "1632.51", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "1632.51", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "510.2775", "Ver. 1.3, Ref. 7"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "280.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni_", "1.3800", "320.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 18"}}; /* Morse bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= D, 4= ALPHA, 5= CVFF_aug info E = D * (1 - exp(-ALPHA*(R - R0)))^2 */ char * CVFF_aug_morse_bonds[752][6]= {{"no", "o-", "1.2178", "140.2486", "2.0000", "Ver. 3.0, Ref. 22"}, {"no", "cp", "1.4720", "87.8132", "2.0000", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "1.4720", "87.8132", "2.0000", "Ver. 3.0, Ref. 22"}, {"c", "o", "1.4250", "68.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "88.0000", "1.9150", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "145.0000", "2.0600", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "135.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "105.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "105.0000", "2.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "57.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "121.0000", "1.7700", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "100.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "80.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o*", "beoh", "1.5000", "5.7319", "1.0000", "Ver. 3.4, Ref. 33"}, {"o*", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "75.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "61.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "90.4000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "104.207", "1.9561", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "106.010", "1.9382", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "37.5", "2.6284", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "58.066", "2.0183", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "46.336", "1.9469", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "36.46", "1.8383", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "118.86", "2.6484", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "169.3000", "1.7361", "Ver. 1.3, Ref. 7"}, {"c3m_", "c3m_", "1.5100", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "68.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "83.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "beoh_", "1.4000", "5.7634", "1.0000", "Ver. 3.4, Ref. 33"}, {"o_", "s4e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "66.6000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "71.0829", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "77.7873", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "100.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "145.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "135.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "73.5252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "169.3000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "93.0000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "53.8383", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "60.3455", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "54.4273", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "62.4647", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "57.0702", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "59.8388", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "52.1506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "80.4179", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "64.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "110.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "62.8336", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "96.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "74.3713", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "105.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "59.9506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "58.7607", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "54.3628", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "56.2919", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni", "1.3800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "123.3817", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "200.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "220.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "72.3612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "69.5942", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "91.9541", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "86.6170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "79.7170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "64.0086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "67.7086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "68.3667", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "101.1528", "1.7700", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "69.5983", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "73.0488", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "67.2132", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "62.2317", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "66.8241", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "55.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "52.6590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "75.3158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "66.7770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "59.8770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "48.3711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "52.0711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "54.9881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "47.3464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "56.8901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "51.5995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "46.6743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "54.2016", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "102.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "122.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "93.7906", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "48.3901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "72.7505", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "50.0292", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "65.4265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "58.5265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "45.8238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "49.5238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "52.2884", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "88.7167", "2.2800", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "44.5093", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "54.4312", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "49.1485", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "44.3191", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "51.7353", "2.0000", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.09758", "226.8", "2.6829", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.09758", "226.8000", "2.6829", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.20800", "118.86", "2.6484", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "87.6930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "80.7930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "67.9896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "71.6896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "61.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "98.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "95.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "76.7658", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "71.1997", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "66.2467", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "121.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "68.1000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "90.1047", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "85.3184", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "105.3797", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "131.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "114.6152", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "51.0126", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "62.9485", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "58.3239", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "53.3079", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "113.6866", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "75.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "61.9610", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "65.7436", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "71.5226", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "121.5152", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "57.9126", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "69.8485", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "65.2239", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "60.2079", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "73.0600", "2.0000", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "107.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "63.8131", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "79.2035", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "48.8255", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "52.7842", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "46.9004", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "41.9068", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "61.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "52.7450", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "60.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "43.7949", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "75.5035", "1.7700", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "45.1255", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "49.0842", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "43.2004", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "38.2068", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "41.8565", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "44.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "57.5916", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "52.2057", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "45.7868", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "40.6770", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "42.0518", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.74611", "104.207", "1.9561", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "130.1826", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "86.4756", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "78.5432", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "73.0108", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "72.0792", "2.0000", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.74164", "106.010", "1.9382", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "37.5", "2.6284", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "51.7795", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "48.3750", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "43.5416", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "74.3350", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.988", "58.066", "2.0183", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "52.2969", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "47.3349", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "51.9937", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.290", "46.336", "1.9469", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "41.4039", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "45.0580", "2.0000", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.662", "36.46", "1.8383", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "39.7416", "2.0000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.1900", "36.0000", "2.0000", "Ver. 2.0, Ref. 18"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CVFF_aug info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CVFF_aug_angles_auto[640][6]= {{"mg2+", "cl-", "mg2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "sz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cl-", "mg2+", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "mg2+", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"sy", "oy", "sy", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"py", "oy", "py", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"vy", "oy", "vy", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"ti4c", "oy", "ti4c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"ca2c", "oy", "ca2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"nh4+", "oy", "nh4+", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"so4y", "oy", "so4y", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"cly-", "oy", "cly-", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"sr2c", "oy", "sr2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"ayt", "oy", "ayt", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"ay", "oy", "ay", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"sz", "oz", "sz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"az", "oz", "az", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"pz", "oz", "pz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ga", "oz", "ga", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ge", "oz", "ge", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"tioc", "oz", "tioc", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"titd", "oz", "titd", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"li+", "oz", "li+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"na+", "oz", "na+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"nac+", "oy", "nac+", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"k+", "oz", "k+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"rb+", "oz", "rb+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cs+", "oz", "cs+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "mg2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2c", "oy", "mg2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 24"}, {"mn4c", "oy", "mn4c", "144.0000", "00.0000", "Ver. 3.2, Ref. 25"}, {"mn3c", "oy", "mn3c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"co2c", "oy", "co2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "oy", "ni2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"lic+", "oy", "lic+", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"ca2+", "oz", "ca2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ba2+", "oz", "ba2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cu2+", "oz", "cu2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"fe2c", "oy", "fe2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"f-", "oz", "f-", "144.0000", "00.0000", "Ver. 3.1, Ref. 26"}, {"cl-", "oz", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"br-", "oz", "br-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"i-", "oz", "i-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"so4", "oz", "so4", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"hocl", "oy", "hocl", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"pd2+", "oy", "pd2+", "144.0000", "00.0000", "Ver. 3.2, Ref. 27"}, {"lioh", "o*", "lioh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"naoh", "o*", "naoh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"koh", "o*", "koh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"foh", "o*", "foh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"cloh", "o*", "cloh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"beoh", "o*", "beoh", "144.0000", "00.0000", "Ver. 3.4, Ref. 33"}, {"beoh", "o*", "h*", "144.0000", "00.0000", "Ver. 3.4, Ref. 33"}, {"cp", "cp", "c'", "120.0000", "34.6799", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o'", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"cp", "cp", "no", "120.0000", "34.6799", "Ver. 3.0, Ref. 22"}, {"cp", "no", "o-", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"o-", "no", "o-", "120.0000", "113.5731", "Ver. 3.0, Ref. 22"}, {"c", "o", "c'", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "h", "106.4000", "39.5000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "109.5000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "hn", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "118.0000", "111.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "c", "122.0000", "35.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "h", "109.5000", "51.5000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "ho", "106.0000", "58.5000", "Ver. 1.0, Ref. 1"}, {"o", "c", "h", "109.5000", "57.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"o", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "hn", "125.0000", "33.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "o", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o", "110.0000", "122.8000", "Ver. 1.0, Ref. 1"}, {"c'", "o", "ho", "112.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o", "110.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"o-", "c'", "o-", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o-", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o-", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "120.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "ho", "109.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o", "cp", "cp", "120.0000", "60.0000", "Ver. 1.0, Ref. 1"}, {"c", "sh", "hs", "96.0000", "48.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "sh", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "sh", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "99.0000", "58.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "109.5000", "75.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n3", "109.5000", "57.3000", "Ver. 1.0, Ref. 1"}, {"hn", "n3", "hn", "105.5000", "36.0000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "c", "112.0000", "86.3000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "hn", "110.0000", "41.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "n3", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "c5", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c5", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "c5", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c5", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"np", "c5", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c5", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "cp", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"n3", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "h*", "104.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "c", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "p", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o'", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "o-", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c", "128.8000", "70.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "o", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "h", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "c", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "h", "120.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=2", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "h", "121.2000", "33.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "np", "c=", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=1", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c'", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=2", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"cp", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "c", "107.8000", "99.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "h", "107.1000", "62.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "c", "107.8000", "85.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "h", "107.1000", "67.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "c", "107.8000", "96.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "h", "107.1000", "56.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "cp", "120.0000", "99.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "cp", "120.0000", "85.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "cp", "120.0000", "96.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "h", "112.3000", "34.6000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "113.5000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "si", "h", "109.1000", "32.7000", "Ver. 1.0, Ref. 1"}, {"h", "si", "h", "112.0000", "31.8000", "Ver. 1.0, Ref. 1"}, {"si", "c", "si", "122.5000", "42.2000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "117.3000", "44.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "h", "113.4000", "33.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "149.8000", "31.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "113.1000", "42.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "124.1000", "56.4000", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "cp", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"nt", "nt", "c", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"cs", "c5", "c5", "112.7000", "70.0000", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"c5", "cs", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "92.5670", "126.5060", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "c5", "111.0390", "88.7595", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "h", "119.9000", "30.2723", "Ver. 1.3, Ref. 6"}, {"s'", "c'", "h", "121.6300", "40.9360", "Ver. 1.3, Ref. 7"}, {"h", "c'", "h", "117.0200", "26.3900", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"s'", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"c5", "op", "c5", "120.0000", "75.0000", "Ver. 1.3, Ref. 8"}, {"oy", "sy", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "py", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "vy", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ti4c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ca2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "nh4+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "so4y", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "cly-", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "sr2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ayt", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ay", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "sz", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "az", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "pz", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ga", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ge", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "tioc", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "titd", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "li+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "nac+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "na+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "k+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "rb+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "cs+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "mg2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "mn4c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "mn3c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "co2c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "ni2c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "lic+", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oz", "mg2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ca2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ba2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "cu2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "fe2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "f-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 26"}, {"oz", "cl-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "br-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "i-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "so4", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "hocl", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "pd2+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 27"}, {"o*", "lioh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "naoh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "koh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "foh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "beoh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 33"}, {"o*", "cloh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"al", "oz", "al", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "oz", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "al", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"o", "al", "o", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"beoh_", "o_", "h_", "109.5000", "0.0000", "Ver. 3.3, Ref. 33"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 18"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 18"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 18"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 18"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 18"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 18"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 18"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 18"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CVFF_aug info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CVFF_aug_torsions_auto[342][8]= {{"*", "cl-", "mg2+", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "sy", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "py", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "vy", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "ti4c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "ca2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "nh4+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "so4y", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "cly-", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "sr2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "ayt", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "ay", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "sz", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "az", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "pz", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ga", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ge", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "tioc", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "titd", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "li+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "nac+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "na+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "k+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "rb+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "cs+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "mg2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "mn4c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "mn3c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "co2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "ni2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "lic+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "mg2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ca2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ba2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "cu2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "fe2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "f-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 26"}, {"*", "cl-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "br-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "i-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "so4", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "hocl", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "pd2+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 27"}, {"*", "lioh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "naoh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "koh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "foh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "cloh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "beoh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 33"}, {"*", "cp", "no", "*", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"*", "cp", "c'", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c", "*", "1.4225", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c'", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "n", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "o", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "of", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "n2", "*", "6.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cr", "n2", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "cr", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "o", "*", "4.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "cp", "*", "12.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "c", "*", "0.0000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c", "cp", "0.6750", "4", "0.0000", "Ver. 1.9, Ref. 17"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "o", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "ct", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "c'", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "o", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "n", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "s", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "o", "*", "1.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "1.8000", "2", "180.0000", "Ver. 1.9, Ref. 16"}, {"*", "cp", "of", "*", "3.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "sh", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "s", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "s", "*", "5.5000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n3", "c", "*", "0.8000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n2", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n2", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "p", "o", "*", "0.7500", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c=", "*", "16.3000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=1", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c", "*", "1.2660", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "np", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=", "*", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=1", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c'", "c=2", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "cs", "cp", "*", "6.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "cp", "12.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "h", "3.9316", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "cp", "6.4517", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "h", "2.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"c", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "hn", "1.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c", "3.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "hn", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "c", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "h", "0.2800", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "si", "-1.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "c", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "o", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "si", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "o", "0.3000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "c", "0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "c", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "h", "0.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "n3n_", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "n3n_", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c'_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c'_", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "np_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "o_", "*", "1.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "s_", "*", "1.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "p_", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 18"}}; /* Out of plane / impropers / improper 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CVFF_aug info E = K * (Chi - Chi0)^2 */ char * CVFF_aug_impropers[41][8]= {{"c'", "cp", "cp", "cp", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "no", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "cp", "cp", "no", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"c", "c'", "n", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n2", "c'", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "c", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "n", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "c", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o'", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "hn", "hn", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n2", "n2", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c'", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "np", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"sp", "cs", "cp", "h", "2.9998", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cp", "cp", "cs", "h", "0.3700", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"h", "c'", "s'", "h", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "s'", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"*", "c'_", "*", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "*", "11.1000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}}; /* Non-bonded (12-6) 0= Key, 1= A, 2= B, 3= CVFF_aug info E = Aij/r^12 - Bij/r^6 where Aij = sqrt( Ai * Aj ) Bij = sqrt( Bi * Bj )0 */ char * CVFF_aug_vdw[86][4]= {{"h", "7108.4660", "32.87076", "Ver. 1.0, Ref. 1"}, {"cg", "1790340.7240", "528.48190", "Ver. 1.0, Ref. 1"}, {"o'", "272894.7846", "498.87880", "Ver. 1.0, Ref. 1"}, {"n", "2266872.4000", "1230.55700", "Ver. 1.0, Ref. 1"}, {"c'", "2968753.3590", "1325.70810", "Ver. 1.0, Ref. 1"}, {"c", "1981049.2250", "1125.99800", "Ver. 1.0, Ref. 1"}, {"hn", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"s", "365906.4000", "250.80000", "Ver. 1.0, Ref. 1"}, {"s'", "1395550.1000", "956.80800", "Ver. 1.3, Ref. 6"}, {"o*", "629358.0000", "625.50000", "Ver. 1.0, Ref. 1"}, {"h*", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"beoh", "0.00000001", "0.00000", "Ver. 3.4, Ref. 33"}, {"p", "6025894.0000", "2195.60000", "Ver. 1.0, Ref. 1"}, {"ca+", "119025.0000", "240.25000", "Ver. 2.0, Ref. 20"}, {"si", "3149175.0000", "710.00000", "Ver. 1.0, Ref. 1"}, {"f", "201106.0000", "235.20000", "Ver. 1.0, Ref. 1"}, {"cl", "1059166.0000", "541.00000", "Ver. 1.0, Ref. 1"}, {"br", "3572030.0000", "1195.00000", "Ver. 1.0, Ref. 1"}, {"Na", "14000.0000", "300.00000", "Ver. 1.0, Ref. 1"}, {"Cl", "25552052.0000", "3307.00450", "Ver. 1.0, Ref. 1"}, {"Br", "34375640.0000", "3517.84460", "Ver. 1.0, Ref. 1"}, {"ar", "2312930.0", "1484.0920", "Ver. 1.3, Ref. 9"}, {"nu", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"py", "305.7467", "0.00111", "Ver. 3.2, Ref. 34"}, {"vy", "5798.1994", "0.00000", "Ver. 3.2, Ref. 34"}, {"ayt", "183.7928", "20.42565", "Ver. 3.2, Ref. 34"}, {"ti4c", "33874.9079", "0.00025", "Ver. 3.2, Ref. 35"}, {"ca2c", "430342.8075", "1535.58846", "Ver. 3.2, Ref. 35"}, {"nh4+", "3832879.5370", "2377.46428", "Ver. 3.2, Ref. 36"}, {"cly-", "5328228.5280", "676.85728", "Ver. 3.2, Ref. 36"}, {"so4y", "0.2431", "44.55457", "Ver. 3.2, Ref. 36"}, {"sr2c", "1097544.2980", "0.00000", "Ver. 3.2, Ref. 35"}, {"sy", "368.5103", "0.00118", "Ver. 3.2, Ref. 24"}, {"sz", "103.8039", "0.00069", "Ver. 3.1, Ref. 23"}, {"oy", "989199.2750", "676.85728", "Ver. 3.2, Ref. 24"}, {"oz", "388611.3727", "0.18928", "Ver. 3.1, Ref. 23"}, {"ay", "2326.0964", "2.04660", "Ver. 3.2, Ref. 24"}, {"az", "278.3910", "1690.14959", "Ver. 3.1, Ref. 23"}, {"pz", "0.1326", "874.40119", "Ver. 3.1, Ref. 23"}, {"ga", "80.9632", "0.00000", "Ver. 3.1, Ref. 23"}, {"ge", "82.8131", "27.40220", "Ver. 3.1, Ref. 23"}, {"tioc", "6915.3989", "3262.49972", "Ver. 3.1, Ref. 23"}, {"titd", "1231.5903", "0.00000", "Ver. 3.1, Ref. 23"}, {"li+", "1252.1495", "0.03437", "Ver. 3.1, Ref. 23"}, {"nac+", "224513.0317", "2377.46428", "Ver. 3.2, Ref. 24"}, {"na+", "67423.6364", "0.00046", "Ver. 3.1, Ref. 23"}, {"k+", "12886.4561", "0.00009", "Ver. 3.1, Ref. 23"}, {"rb+", "4300534.1423", "6957.88573", "Ver. 3.1, Ref. 23"}, {"cs+", "7280468.2656", "1021.07213", "Ver. 3.1, Ref. 23"}, {"fe2c", "56757.5734", "2377.46428", "Ver. 3.2, Ref. 24"}, {"mg2c", "27194.3713", "2377.46428", "Ver. 3.2, Ref. 24"}, {"mn4c", "15940.6170", "6429.8290", "Ver. 3.3, Ref. 25"}, {"co2c", "29906.3803", "1995.4833", "Ver. 3.3, Ref. 25"}, {"mn3c", "2211.2096", "0.0138", "Ver. 3.3, Ref. 25"}, {"lic+", "1154.3029", "0.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "8579.4845", "0.0000", "Ver. 3.3, Ref. 25"}, {"mg2+", "12275.1109", "1383.78426", "Ver. 3.1, Ref. 23"}, {"ca2+", "300393.7486", "432.82651", "Ver. 3.1, Ref. 23"}, {"ba2+", "2641062.0890", "14.11481", "Ver. 3.1, Ref. 23"}, {"cu2+", "8568.2586", "0.00071", "Ver. 3.1, Ref. 23"}, {"f-", "98927.2590", "0.18928", "Ver. 3.1, Ref. 26"}, {"cl-", "536839.0775", "0.02976", "Ver. 3.1, Ref. 23"}, {"br-", "2.8937", "0.02976", "Ver. 3.1, Ref. 23"}, {"i-", "394.6286", "0.02976", "Ver. 3.1, Ref. 23"}, {"so4", "12.9538", "3277.36445", "Ver. 3.1, Ref. 23"}, {"hocl", "0.0046", "0.00000", "Ver. 3.2, Ref. 24"}, {"pd2+", "7748.8541", "0.00000", "Ver. 3.2, Ref. 27"}, {"lioh", "205.1053", "10.45753", "Ver. 3.4, Ref. 30"}, {"naoh", "12250.6790", "75.16294", "Ver. 3.4, Ref. 30"}, {"koh", "428660.3697", "435.04961", "Ver. 3.4, Ref. 30"}, {"foh", "397492.5026", "920.73615", "Ver. 3.4, Ref. 30"}, {"cloh", "52832487.3113", "13268.78826", "Ver. 3.4, Ref. 30"}, {"al", "3784321.4254", "11699.84934", "Ver. 2.1, Ref. 27"}, {"Au", "4603936.5046", "13692.05223", "Ver. 2.1, Ref. 27"}, {"Pb", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}, {"Ni", "955901.6916", "6768.92014", "Ver. 2.1, Ref. 27"}, {"Pd", "2581174.9390", "10078.92459", "Ver. 2.1, Ref. 27"}, {"Pt", "4576819.9618", "16963.30818", "Ver. 2.1, Ref. 27"}, {"Ag", "3712095.6064", "10865.51833", "Ver. 2.1, Ref. 27"}, {"Cu", "1007210.0670", "6166.70278", "Ver. 2.1, Ref. 27"}, {"Cr", "1222517.4049", "7523.46700", "Ver. 2.1, Ref. 27"}, {"Fe", "1186612.1982", "7590.28296", "Ver. 2.1, Ref. 27"}, {"Li", "5192358.6600", "9916.81768", "Ver. 2.1, Ref. 27"}, {"Mo", "5869689.0344", "21298.66304", "Ver. 2.1, Ref. 27"}, {"W", "7876811.6340", "27853.23915", "Ver. 2.1, Ref. 27"}, {"al", "11422865.0000", "2282.96606", "Ver. 2.2, Ref. 29"}}; /* Bond increments To implement atomic charges */ char * CVFF_aug_bond_increments[717][5]= {{"no", "o-", "0.1684", "-0.1684", "Ver. 3.0, Ref. 22"}, {"no", "cp", "-0.1792", "0.1792", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "-0.1792", "0.1792", "Ver. 2.0, Ref. 18"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "0.0700", "-0.5700", "Ver. 1.0, Ref. 1"}, {"ci", "h", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "0.3200", "-0.0700", "Ver. 1.0, Ref. 1"}, {"cr", "n", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"cr", "n1", "0.5000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"n", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "0.0000", "0.5000", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "-0.1400", "0.1400", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "-0.1100", "0.3600", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "-0.3600", "0.3600", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "-0.2233", "0.2233", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "-0.4100", "0.4100", "Ver. 1.0, Ref. 1"}, {"o*", "beoh", "0.0000", "0.0000", "Ver. 3.4, Ref. 33"}, {"o*", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"s-", "p", "-0.6824", "0.1824", "Ver. 2.0, Ref. 18"}, {"sh", "hs", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"d", "d", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"p", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cs", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "0.0865", "-0.0865", "Ver. 2.0, Ref. 18"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.2, Ref. 3"}, {"c", "n3", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n4", "0.4200", "-0.1700", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.1000", "-0.1000", "Ver. 1.3, Ref. 5"}, {"c", "nz", "0.3640", "-0.3640", "Ver. 2.0, Ref. 18"}, {"c", "o", "0.1500", "-0.1500", "Ver. 1.0, Ref. 1"}, {"c", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c", "oz", "0.1742", "-0.1742", "Ver. 2.0, Ref. 18"}, {"c", "op", "0.3957", "-0.3957", "Ver. 2.0, Ref. 18"}, {"c", "s", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"c", "sh", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "sp", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "s'", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "p", "-0.0785", "0.0785", "Ver. 2.0, Ref. 18"}, {"c", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2750", "-0.2750", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.2260", "-0.2260", "Ver. 1.0, Ref. 1"}, {"c", "br", "0.1920", "-0.1920", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 18"}, {"c", "si", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c'", "c5", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "cs", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c-", "-0.1368", "0.1368", "Ver. 2.0, Ref. 18"}, {"c'", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 18"}, {"c'", "n3", "-0.0442", "0.0442", "Ver. 2.0, Ref. 18"}, {"c'", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n4", "0.1331", "0.1169", "Ver. 2.0, Ref. 18"}, {"c'", "nz", "0.1641", "-0.1641", "Ver. 2.0, Ref. 18"}, {"c'", "o", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oz", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"c'", "op", "0.0300", "-0.0300", "Ver. 1.4, Ref. 10"}, {"c'", "o'", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"c'", "s", "-0.1528", "0.1528", "Ver. 2.0, Ref. 18"}, {"c'", "sh", "-0.2033", "0.2033", "Ver. 2.0, Ref. 18"}, {"c'", "sp", "-0.1079", "0.1079", "Ver. 2.0, Ref. 18"}, {"c'", "s'", "0.0", "0.0", "Ver. 1.3, Ref. 7"}, {"c'", "p", "-0.3283", "0.3283", "Ver. 2.0, Ref. 18"}, {"c'", "h", "-0.2132", "0.2132", "Ver. 1.0, Ref. 1"}, {"c'", "f", "0.1116", "-0.1116", "Ver. 2.0, Ref. 18"}, {"c'", "cl", "-0.0594", "0.0594", "Ver. 2.0, Ref. 18"}, {"c'", "br", "-0.1152", "0.1152", "Ver. 2.0, Ref. 18"}, {"c'", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 18"}, {"c'", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 18"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cp", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cp", "n", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "0.1050", "-0.1050", "Ver. 1.1, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cp", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cp", "o", "0.0282", "-0.0282", "Ver. 1.9, Ref. 16"}, {"cp", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cp", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cp", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cp", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cp", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 1.0, Ref. 1"}, {"cp", "cl", "0.1020", "-0.1020", "Ver. 1.0, Ref. 1"}, {"cp", "br", "0.0800", "-0.0800", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c5", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cs", "0.0000", "0.0000", "Ver. 1.3, Ref. 6"}, {"c5", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c5", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c5", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c5", "n", "0.1100", "-0.1100", "Ver. 1.4, Ref. 10"}, {"c5", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "np", "0.1400", "-0.1400", "Ver. 1.0, Ref. 1"}, {"c5", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c5", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c5", "o", "0.1100", "-0.1100", "Ver. 1.2, Ref. 3"}, {"c5", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c5", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c5", "op", "0.1100", "-0.1100", "Ver. 1.3, Ref. 8"}, {"c5", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c5", "s", "-0.1500", "0.1500", "Ver. 1.2, Ref. 3"}, {"c5", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c5", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c5", "h", "-0.1300", "0.1300", "Ver. 1.0, Ref. 1"}, {"c5", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c5", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c5", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c5", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c5", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"cs", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cs", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cs", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cs", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cs", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cs", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"cs", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cs", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cs", "sp", "-0.1500", "0.1500", "Ver. 1.3, Ref. 6"}, {"cs", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cs", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cs", "h", "-0.1300", "0.1300", "Ver. 1.3, Ref. 6"}, {"cs", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"cs", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"cs", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"cs", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cs", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=1", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=1", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=1", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=1", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=1", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=1", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=1", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=1", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=1", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=2", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=2", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=2", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=2", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=2", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=2", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=2", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=2", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=2", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=2", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=2", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 18"}, {"c-", "n3", "0.0824", "-0.0824", "Ver. 2.0, Ref. 18"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n4", "0.2597", "-0.0097", "Ver. 2.0, Ref. 18"}, {"c-", "nz", "0.2854", "-0.2854", "Ver. 2.0, Ref. 18"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "oh", "-0.0058", "0.0058", "Ver. 2.0, Ref. 18"}, {"c-", "oz", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "o'", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "s", "-0.0146", "0.0146", "Ver. 2.0, Ref. 18"}, {"c-", "sh", "-0.0650", "0.0650", "Ver. 2.0, Ref. 18"}, {"c-", "sp", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s'", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 18"}, {"c-", "p", "-0.1744", "0.1744", "Ver. 2.0, Ref. 18"}, {"c-", "h", "-0.1549", "0.1549", "Ver. 2.0, Ref. 18"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 18"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 18"}, {"c-", "br", "0.0281", "-0.0281", "Ver. 2.0, Ref. 18"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 18"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 18"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"ct", "n3", "0.0419", "-0.0419", "Ver. 2.0, Ref. 18"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n4", "0.2181", "0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "nz", "0.2454", "-0.2454", "Ver. 2.0, Ref. 18"}, {"ct", "o", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "oh", "-0.0420", "0.0420", "Ver. 2.0, Ref. 18"}, {"ct", "oz", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "op", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "o'", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "s", "-0.0581", "0.0581", "Ver. 2.0, Ref. 18"}, {"ct", "sh", "-0.1082", "0.1082", "Ver. 2.0, Ref. 18"}, {"ct", "sp", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "s'", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "p", "-0.2216", "0.2216", "Ver. 2.0, Ref. 18"}, {"ct", "h", "-0.2000", "0.2000", "Ver. 1.2, Ref. 3"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 18"}, {"ct", "cl", "0.0319", "-0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "br", "-0.0173", "0.0173", "Ver. 2.0, Ref. 18"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 18"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 18"}, {"n3", "n3", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n3", "n", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=1", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n4", "0.1650", "0.0850", "Ver. 2.0, Ref. 18"}, {"n3", "nz", "0.1927", "-0.1927", "Ver. 2.0, Ref. 18"}, {"n3", "o", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "oh", "-0.0754", "0.0754", "Ver. 2.0, Ref. 18"}, {"n3", "oz", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "o'", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "s", "-0.0967", "0.0967", "Ver. 2.0, Ref. 18"}, {"n3", "sh", "-0.1434", "0.1434", "Ver. 2.0, Ref. 18"}, {"n3", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 18"}, {"n3", "h", "-0.2386", "0.2386", "Ver. 2.0, Ref. 18"}, {"n3", "f", "0.1415", "-0.1415", "Ver. 2.0, Ref. 18"}, {"n3", "cl", "-0.0117", "0.0117", "Ver. 2.0, Ref. 18"}, {"n3", "br", "-0.0601", "0.0601", "Ver. 2.0, Ref. 18"}, {"n3", "i", "-0.0714", "0.0714", "Ver. 2.0, Ref. 18"}, {"n3", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 18"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n2", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n2", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=1", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=1", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=1", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=1", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=1", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=1", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=1", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=1", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=1", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=1", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=2", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"np", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"np", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"np", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"np", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"np", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"np", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"np", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"np", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"np", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"np", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"np", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"np", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n4", "n4", "0.2500", "0.2500", "Ver. 2.0, Ref. 18"}, {"n4", "nz", "0.2842", "-0.0342", "Ver. 2.0, Ref. 18"}, {"n4", "o", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "oh", "0.0242", "0.2258", "Ver. 2.0, Ref. 18"}, {"n4", "oz", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "o'", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "s", "-0.0257", "0.2757", "Ver. 2.0, Ref. 18"}, {"n4", "sh", "-0.0723", "0.3223", "Ver. 2.0, Ref. 18"}, {"n4", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 18"}, {"n4", "h", "-0.1978", "0.4478", "Ver. 2.0, Ref. 18"}, {"n4", "f", "0.2438", "0.0062", "Ver. 2.0, Ref. 18"}, {"n4", "cl", "0.0642", "0.1858", "Ver. 2.0, Ref. 18"}, {"n4", "br", "0.0048", "0.2452", "Ver. 2.0, Ref. 18"}, {"n4", "i", "-0.0114", "0.2614", "Ver. 2.0, Ref. 18"}, {"n4", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 18"}, {"nz", "nz", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"nz", "o", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nz", "oh", "-0.2490", "0.2490", "Ver. 2.0, Ref. 18"}, {"nz", "oz", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nz", "op", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nz", "o'", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nz", "s", "-0.3010", "0.3010", "Ver. 2.0, Ref. 18"}, {"nz", "sh", "-0.3457", "0.3457", "Ver. 2.0, Ref. 18"}, {"nz", "sp", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nz", "s'", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nz", "p", "-0.4691", "0.4691", "Ver. 2.0, Ref. 18"}, {"nz", "h", "-0.4688", "0.4688", "Ver. 2.0, Ref. 18"}, {"nz", "f", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"nz", "cl", "-0.2141", "0.2141", "Ver. 2.0, Ref. 18"}, {"nz", "br", "-0.2727", "0.2727", "Ver. 2.0, Ref. 18"}, {"nz", "i", "-0.2889", "0.2889", "Ver. 2.0, Ref. 18"}, {"nz", "si", "-0.5738", "0.5738", "Ver. 2.0, Ref. 18"}, {"o", "o", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"o", "oh", "-0.0921", "0.0921", "Ver. 2.0, Ref. 18"}, {"o", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"o", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "p", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"o", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"o", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"o", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"o", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"o", "si", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "oh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oh", "oz", "0.0921", "-0.0921", "Ver. 2.0, Ref. 18"}, {"oh", "op", "0.2853", "-0.2853", "Ver. 2.0, Ref. 18"}, {"oh", "s", "-0.0063", "0.0063", "Ver. 2.0, Ref. 18"}, {"oh", "sh", "-0.0485", "0.0485", "Ver. 2.0, Ref. 18"}, {"oh", "sp", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "s'", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "p", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "h", "-0.1190", "0.1190", "Ver. 2.0, Ref. 18"}, {"oh", "f", "0.1983", "-0.1983", "Ver. 2.0, Ref. 18"}, {"oh", "cl", "0.0686", "-0.0686", "Ver. 2.0, Ref. 18"}, {"oh", "br", "0.0295", "-0.0295", "Ver. 2.0, Ref. 18"}, {"oh", "i", "0.0216", "-0.0216", "Ver. 2.0, Ref. 18"}, {"oh", "si", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oz", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"oz", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"oz", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"oz", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 18"}, {"oz", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"oz", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"oz", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"oz", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"oz", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"oz", "si", "-0.3425", "0.3425", "Ver. 2.0, Ref. 18"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"op", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 18"}, {"op", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"op", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"op", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"op", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"op", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o'", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"o'", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"o'", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o'", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"o'", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"o'", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"o'", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"o'", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"o'", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"s", "s", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s", "sh", "-0.0509", "0.0509", "Ver. 2.0, Ref. 18"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "p", "-0.1600", "0.1600", "Ver. 2.0, Ref. 18"}, {"s", "h", "-0.1392", "0.1392", "Ver. 2.0, Ref. 18"}, {"s", "f", "0.2380", "-0.2380", "Ver. 2.0, Ref. 18"}, {"s", "cl", "0.0898", "-0.0898", "Ver. 2.0, Ref. 18"}, {"s", "br", "0.0437", "-0.0437", "Ver. 2.0, Ref. 18"}, {"s", "i", "0.0345", "-0.0345", "Ver. 2.0, Ref. 18"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 18"}, {"sh", "sh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sh", "sp", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "s'", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "p", "-0.1032", "0.1032", "Ver. 2.0, Ref. 18"}, {"sh", "h", "-0.0787", "0.0787", "Ver. 2.0, Ref. 18"}, {"sh", "f", "0.2794", "-0.2794", "Ver. 2.0, Ref. 18"}, {"sh", "cl", "0.1392", "-0.1392", "Ver. 2.0, Ref. 18"}, {"sh", "br", "0.0966", "-0.0966", "Ver. 2.0, Ref. 18"}, {"sh", "i", "0.0889", "-0.0889", "Ver. 2.0, Ref. 18"}, {"sh", "si", "-0.2032", "0.2032", "Ver. 2.0, Ref. 18"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"sp", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"sp", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"sp", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"sp", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"sp", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"sp", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"s'", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"s'", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"s'", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"s'", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"s'", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"s'", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"p", "h", "0.0356", "-0.0356", "Ver. 2.0, Ref. 18"}, {"p", "f", "0.3869", "-0.3869", "Ver. 2.0, Ref. 18"}, {"p", "cl", "0.2544", "-0.2544", "Ver. 2.0, Ref. 18"}, {"p", "br", "0.2156", "-0.2156", "Ver. 2.0, Ref. 18"}, {"p", "i", "0.2110", "-0.2110", "Ver. 2.0, Ref. 18"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 18"}, {"h", "h", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "f", "0.3823", "-0.3823", "Ver. 2.0, Ref. 18"}, {"h", "cl", "0.2404", "-0.2404", "Ver. 2.0, Ref. 18"}, {"h", "br", "0.1978", "-0.1978", "Ver. 2.0, Ref. 18"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 18"}, {"h", "si", "0.0200", "-0.0200", "Ver. 1.0, Ref. 1"}, {"f", "f", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"f", "cl", "-0.1589", "0.1589", "Ver. 2.0, Ref. 18"}, {"f", "br", "-0.2099", "0.2099", "Ver. 2.0, Ref. 18"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 18"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"cl", "br", "-0.0507", "0.0507", "Ver. 2.0, Ref. 18"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 18"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 18"}, {"br", "br", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 18"}, {"br", "si", "-0.3272", "0.3272", "Ver. 2.0, Ref. 18"}, {"i", "i", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 18"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oy", "py", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "vy", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ti4c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ca2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "cly-", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "so4y", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "nh4+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "sr2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ayt", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "sy", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "sz", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "ay", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "az", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "pz", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ga", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ge", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "tioc", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "titd", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "li+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "nac+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "na+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "k+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "rb+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "cs+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "mg2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oy", "mn4c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "mn3c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "co2c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "ni2c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "lic+", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oz", "mg2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ca2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ba2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "cu2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "fe2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "f-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 26"}, {"oz", "cl-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "br-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "i-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "so4", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "hocl", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oy", "pd2+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 27"}}; atomes_1.3.1/src/calc/force_fields/cvff.c0000664000175000017500000126116215212624223017723 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cvff.c * @short CVFF force field, from 'CVFF.frc' * @author Sébastien Le Roux */ /* * This file: 'cvff.c' * * Contains: * CVFF force field, data from taken from: - the 'CVFF.frc' file This file contains several tables: Atoms : CVFF_atoms[133][5] Equivalence : CVFF_equivalence_auto[123][11] Equivalence : CVFF_equivalence[129][7] Quadractic bonds : CVFF_bonds_auto[776][5] Morse bonds : CVFF_morse_bonds[775][6] Quadratic angles : CVFF_angles_auto[563][6] Torsions : CVFF_torsions_auto[295][8] Impropers : CVFF_impropers[41][8] Non bonded : CVFF_vdw[45][4] Bond increments : CVFF_bond_increments[683][5] */ #include "global.h" int CVFF_objects[14] = {133, 123, 129, 776, 0, 775, 563, 0, 295, 0, 0, 41, 45, 683}; int CVFF_dim[14] = {5, 11, 7, 5, 0, 6, 6, 0, 8, 0, 0, 8, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CVFF info */ char * CVFF_atoms[133][5]= {{"H", "1.007970", "h", "Hydrogen bonded to C. Masses from CRC 1973/74 pages B-250.", "Ver. 1.0, Ref. 1"}, {"D", "2.014000", "d", "General Deuterium Atom", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "Hydrogen bonded to N", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "Hydrogen bonded to O", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "Hydrogen bonded to P", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "Hydrogen bonded to S", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "Hydrogen in water molecule", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hspc", "Hydrogen in SPC water molecule", "Ver. 2.3, Ref. 25"}, {"H", "1.007970", "htip", "Hydrogen in TIP water molecule", "Ver. 2.3, Ref. 25"}, {"H", "1.007970", "h$", "Hydrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"L", "0.001097", "lp", "Lone Pair (massless)", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "Lone Pair", "Ver. 1.1, Ref. 2"}, {"H", "1.007970", "h+", "Charged hydrogen in cations", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hc", "Hydrogen bonded to carbon", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hw", "Hydrogen in water molecule", "Ver. 2.0, Ref. 18"}, {"D", "2.014000", "dw", "Deuterium in heavy water", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c", "Sp3 aliphatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cg", "Sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c'", "Sp2 carbon in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c*", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 21"}, {"C", "12.011150", "c\"", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "cp", "Sp2 aromatic carbon (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cr", "Carbon in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c+", "C in guanidinium group", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c-", "Carbon in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ca", "General amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c3", "Sp3 carbon in methyl (CH3) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cn", "Sp3 Carbon bonded to N", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c2", "Sp3 carbon bonded to 2 H's, 2 heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c1", "Sp3 carbon bonded to 1 H, 3 Heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c5", "Sp2 aromatic carbon in five membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cs", "Sp2 carbon involved in thiophene", "Ver. 1.3, Ref. 6"}, {"C", "12.011150", "c=", "Non-aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c=1", "Non-aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "c=2", "Non-aromatic doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "ct", "Sp carbon involved in triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ci", "Aromatic carbon in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c$", "Carbon atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "co", "Sp3 carbon in acetals", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3m", "Sp3 carbon in 3-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4m", "Sp3 carbon in 4-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "coh", "Sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3h", "Sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4h", "Sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "ci", "Sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n", "Sp2 nitrogen with 1 H, 2 heavy atoms (amide group)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "no", "Sp2 nitrogen in nitro group", "Ver. 2.3, Ref. 23"}, {"N", "14.006700", "n2", "Sp2 nitrogen (NH2 in the guanidinium group (HN=C(NH2)2))", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "np", "Sp2 aromatic nitrogen (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n3", "Sp3 nitrogen with three substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n4", "Sp3 nitrogen with four substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=", "Non-aromatic end double bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=1", "Non-aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "n=2", "Non-aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "nt", "Sp nitrogen involved in triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "nz", "Sp nitrogen in N2", "Ver. 1.3, Ref. 4"}, {"N", "14.006700", "n1", "Sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "ni", "Sp2 nitrogen in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n$", "Nitrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "na", "Sp3 nitrogen in amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n3m", "Sp3 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n4m", "Sp3 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n3n", "Sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n4n", "Sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nb", "Sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nn", "Sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "npc", "Sp2 nitrogen in 5- or 6- membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh", "Sp2 nitrogen in 5-or 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nho", "Sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh+", "Protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n+", "Sp3 nitrogen in protonated amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nr", "Sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o'", "Oxygen in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o", "Sp3 oxygen in ether or ester groups", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oz", "Oxygen in Zeolite", "Ver. 1.8, Ref. 14"}, {"O", "15.999400", "o-", "Oxygen in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oh", "Oxygen in hydroxyl (OH) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o*", "Oxygen in water molecule", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "ospc", "Oxygen in SPC water molecule", "Ver. 2.3, Ref. 25"}, {"O", "15.999400", "otip", "Oxygen in TIP3P water molecule", "Ver. 2.3, Ref. 25"}, {"O", "15.999400", "op", "Oxygen in aromatic rings. e.g. furan", "Ver. 1.3, Ref. 8"}, {"O", "15.999400", "of", "Oxygen ", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o$", "Oxygen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oc", "Sp3 oxygen in ether or acetals", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "oe", "Sp3 oxygen in ester", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o3e", "Sp3 oxygen in three membered ring", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o4e", "Sp3 oxygen in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s", "Sulfur in methionine (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "s1", "Sulfur involved in S-S disulfide bond", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sh", "Sulfur in sulfhydryl (-SH) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sp", "Sulfur in thiophene", "Ver. 1.3, Ref. 6"}, {"S", "32.064000", "s'", "Sulfur in thioketone (>C=S) group", "Ver. 1.3, Ref. 7"}, {"S", "32.064000", "s$", "Sulfur atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sc", "Sp3 sulfur in methionines (C-S-C) group", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s3e", "Sulfur in three membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s4e", "Sulfur in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s-", "Partial double sulfur bonded to something then bonded to another partial double oxygen or sulfur", "Ver. 2.0, Ref. 18"}, {"P", "30.973800", "p", "General phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.973800", "pz", "Phosphorous atom in ALPO type structure", "Ver. 1.8, Ref. 14"}, {"P", "30.973800", "p$", "Phosphorous atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"Ca", "40.079800", "ca+", "ion Ca2+, mass = mass of Ca - 2*electron mass.", "Ver. 2.0, Ref. 18"}, {"F", "18.998400", "f", "Fluorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "cl", "Chlorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Br", "79.909000", "br", "Bromine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"I", "126.9045", "i", "Covalently bound Iodine", "Ver. 1.3, Ref. 4"}, {"Si", "28.086000", "si", "Silicon ", "Ver. 1.0, Ref. 1"}, {"Si", "28.086000", "sz", "Silicon atom in a Zeolite or Silicate", "Ver. 1.8, Ref. 14"}, {"D", "12.000000", "nu", "atom for relative free energy", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "Cl", "Chloride ion Cl-", "Ver. 1.0, Ref. 1"}, {"Br", "79.904000", "Br", "Bromide ion Br-", "Ver. 1.0, Ref. 1"}, {"Na", "22.989800", "Na", "Sodium ion", "Ver. 1.0, Ref. 1"}, {"Ar", "39.948", "ar", "Argon atom", "Ver. 1.3, Ref. 9"}, {"He", "4.002600", "he", "Helium atom", "Ver. 2.4, Ref. 30"}, {"Al", "26.982000", "al", "Aluminium in alumino-silicate", "Ver. 2.1, Ref. 26"}, {"Al", "26.982000", "az", "Aluminium in alumino-silicate", "Ver. 2.1, Ref. 26"}, {"Al", "26.982000", "Al", "Aluminium metal", "Ver. 2.1, Ref. 26"}, {"Na", "22.990000", "Na", "Sodium metal", "Ver. 2.1, Ref. 26"}, {"Pt", "195.090000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 26"}, {"Pd", "106.400000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 26"}, {"Au", "196.967000", "Au", "Gold metal", "Ver. 2.1, Ref. 26"}, {"Ag", "107.868000", "Ag", "Silver metal", "Ver. 2.1, Ref. 26"}, {"Sn", "118.690000", "Sn", "Tin metal", "Ver. 2.1, Ref. 26"}, {"K", "39.102000", "K", "Potassium metal", "Ver. 2.1, Ref. 26"}, {"Li", "6.940000", "Li", "Lithium metal", "Ver. 2.1, Ref. 26"}, {"Mo", "95.940000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 26"}, {"Fe", "55.847000", "Fe", "Iron metal", "Ver. 2.1, Ref. 26"}, {"W", "183.850000", "W", "Tungsten metal", "Ver. 2.1, Ref. 26"}, {"Ni", "58.710000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 26"}, {"Cr", "51.996000", "Cr", "Chromium metal", "Ver. 2.1, Ref. 26"}, {"Cu", "63.546000", "Cu", "Copper metal", "Ver. 2.1, Ref. 26"}, {"Pb", "207.200000", "Pb", "Lead metal", "Ver. 2.1, Ref. 26"}, {"Mg", "100.000000", "mg", "Magnesium ", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CVFF info */ char * CVFF_equivalence_auto[123][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hn", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hi", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"ho", "hn", "ho", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hspc", "hspc", "hspc", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.3, Ref. 25"}, {"htip", "htip", "htip", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.3, Ref. 25"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"lp", "h", "lp", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"c", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"co", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"c3m", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"c4m", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"coh", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ca", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cn", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c2", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c1", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ci", "c'", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 21"}, {"c\"", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"cp", "c'", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c5", "c'", "c5", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cs", "c'", "cs", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cr", "c'", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c+", "c'", "cr", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c=", "c'", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 18"}, {"c=1", "c'", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 18"}, {"na", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"ni", "n", "ni", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n+", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"no", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.3, Ref. 23"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n1", "n", "n1", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n=", "n", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 18"}, {"n=1", "n", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 18"}, {"nz", "n", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 18"}, {"o", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "oz", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"otip", "otip", "otip", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.3, Ref. 25"}, {"ospc", "ospc", "ospc", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.3, Ref. 25"}, {"oh", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oc", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"op", "o'", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"of", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o-", "o'", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s-", "s'", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sh", "s", "sh", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"pz", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 18"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 18"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 18"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 18"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"sz", "sz", "sz", "sz", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 18"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 18"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 18"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 18"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 18"}, {"he", "he", "he", "he_", "he_", "he_", "he_", "he_", "he_", "he_", "Ver. 2.4, Ref. 30"}, {"az", "si", "az", "az_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"al", "si", "az", "az_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"mg", "mg", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"Al", "Al", "Al", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pb", "Pb", "Pb", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pt", "Pt", "Pt", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pd", "Pd", "Pd", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Au", "Au", "Au", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ag", "Ag", "Ag", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Sn", "Sn", "Sn", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Li", "Li", "Li", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Mo", "Mo", "Mo", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Fe", "Fe", "Fe", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"W", "W", "W", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ni", "Ni", "Ni", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cr", "Cr", "Cr", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cu", "Cu", "Cu", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CVFF info */ char * CVFF_equivalence[129][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"d", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "hs", "hs", "hs", "Ver. 1.0, Ref. 1"}, {"hn", "hn", "hn", "hn", "hn", "hn", "Ver. 1.0, Ref. 1"}, {"ho", "hn", "ho", "ho", "ho", "ho", "Ver. 1.0, Ref. 1"}, {"hi", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hspc", "hspc", "hspc", "hspc", "hspc", "hspc", "Ver. 2.3, Ref. 25"}, {"htip", "htip", "htip", "htip", "htip", "htip", "Ver. 2.3, Ref. 25"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"h$", "h$", "h$", "h$", "h$", "h$", "Ver. 1.0, Ref. 1"}, {"lp", "h", "lp", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"c", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 24"}, {"co", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"c3m", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"c4m", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"coh", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cn", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c1", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c\"", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 21"}, {"cp", "c'", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "c'", "c5", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "c'", "cs", "cs", "cs", "cs", "Ver. 1.3, Ref. 6"}, {"cr", "c'", "cr", "c'", "cr", "c'", "Ver. 1.0, Ref. 1"}, {"c+", "c'", "cr", "c'", "cr", "c'", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"ci", "c'", "ci", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c$", "c$", "c$", "c$", "c$", "c$", "Ver. 1.0, Ref. 1"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"no", "n", "no", "no", "no", "no", "Ver. 2.3, Ref. 23"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n", "n2", "n2", "Ver. 1.0, Ref. 1"}, {"n3", "n", "n3", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"na", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"n+", "n", "n4", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=", "n", "n=", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=1", "n", "n=1", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=2", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "n", "nz", "nz", "nz", "nz", "Ver. 1.3, Ref. 4"}, {"n1", "n", "n1", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"ni", "n", "ni", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"nh", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n2", "n2", "n2", "Ver. 2.0, Ref. 18"}, {"n$", "n$", "n$", "n$", "n$", "n$", "Ver. 1.0, Ref. 1"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"o", "o'", "o", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 1.8, Ref. 14"}, {"o-", "o'", "o-", "o-", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"oh", "o'", "oh", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"ospc", "ospc", "ospc", "o*", "o*", "o*", "Ver. 2.3, Ref. 25"}, {"otip", "otip", "otip", "o*", "o*", "o*", "Ver. 2.3, Ref. 25"}, {"op", "o'", "op", "op", "op", "op", "Ver. 1.3, Ref. 8"}, {"of", "o'", "oh", "o", "of", "o'", "Ver. 1.0, Ref. 1"}, {"o$", "o$", "o$", "o$", "o$", "o$", "Ver. 1.0, Ref. 1"}, {"oc", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "sh", "sh", "sh", "sh", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.3, Ref. 7"}, {"sp", "s'", "sp", "sp", "sp", "sp", "Ver. 1.3, Ref. 6"}, {"s$", "s$", "s$", "s$", "s$", "s$", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"pz", "p", "p", "p", "p", "p", "Ver. 1.8, Ref. 14"}, {"p$", "p$", "p$", "p$", "p$", "p$", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 1.8, Ref. 14"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.3, Ref. 9"}, {"he", "he", "he", "he", "he", "he", "Ver. 2.4, Ref. 30"}, {"al", "sz", "al", "si", "si", "si", "Ver. 2.1, Ref. 26"}, {"az", "sz", "az", "sz", "sz", "sz", "Ver. 2.1, Ref. 26"}, {"Al", "Al", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pt", "Pt", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pd", "Pd", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Au", "Au", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ag", "Ag", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Sn", "Na", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"K", "K", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Li", "Li", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Mo", "Mo", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Fe", "Fe", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"W", "W", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ni", "Ni", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cr", "Cr", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cu", "Cu", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"mg", "mg", "sz", "sz", "sz", "sz", "Ver. 2.1, Ref. 27"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CVFF info E = K2 * (R - R0)^2 */ char * CVFF_bonds_auto[776][5]= {{"no", "o-", "1.2178", "560.9942", "Ver. 2.3, Ref. 23"}, {"no", "cp", "1.4720", "351.2527", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "1.4720", "351.2527", "Ver. 2.3, Ref. 23"}, {"c", "o", "1.4250", "273.2000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "322.7158", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "283.0924", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "615.3220", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "384.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "540.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "480.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "384.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "420.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "420.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "228.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "379.0809", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "400.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "320.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "280.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "1.0000", "540.6336", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "0.9570", "540.6336", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "300.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "560.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "245.2000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "480.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "361.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "222.4000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "392.8000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "398.7500", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "398.2400", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "259.0700", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "236.5500", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "175.6400", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "123.2100", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "833.7200", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "1632.5100", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "1632.5100", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "510.2775", "Ver. 1.3, Ref. 7"}, {"sz", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"sz", "o", "1.6150", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "oz", "1.6150", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "oh", "1.6350", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "h", "1.3820", "222.4000", "Ver. 1.8, Ref. 14"}, {"oz", "ho", "0.9600", "540.6336", "Ver. 1.8, Ref. 14"}, {"al", "c", "1.8090", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "h", "1.3820", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "o", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "c", "1.8090", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "o", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "oh", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "h", "1.3820", "392.8000", "Ver. 2.1, Ref. 26"}, {"sz", "f", "1.6650", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "sz", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"az", "az", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "al", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"si", "al", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 18"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 2.0, Ref. 18"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 2.0, Ref. 18"}, {"ci", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.4200", "144.0000", "Ver. 2.0, Ref. 18"}}; /* Morse bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= D, 4= ALPHA, 5= CVFF info E = D * (1 - exp(-ALPHA*(R - R0)))^2 */ char * CVFF_morse_bonds[775][6]= {{"c3m_", "c3m_", "1.5100", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "68.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "83.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "66.6000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "71.0829", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "77.7873", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "100.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "145.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "135.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "73.5252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "169.3000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "93.0000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "53.8383", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "60.3455", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "54.4273", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "62.4647", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "57.0702", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "59.8388", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "52.1506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "80.4179", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "64.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "110.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "62.8336", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "96.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "74.3713", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "105.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "59.9506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "58.7607", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "54.3628", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "56.2919", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni", "1.3800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "123.3817", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "200.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "220.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "72.3612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "69.5942", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "91.9541", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "86.6170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "79.7170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "64.0086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "67.7086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "68.3667", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "101.1528", "1.7700", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "69.5983", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "73.0488", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "67.2132", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "62.2317", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "66.8241", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "55.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "52.6590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "75.3158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "66.7770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "59.8770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "48.3711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "52.0711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "54.9881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "47.3464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "56.8901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "51.5995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "46.6743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "54.2016", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "102.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "122.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "93.7906", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "48.3901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "72.7505", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "50.0292", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "65.4265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "58.5265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "45.8238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "49.5238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "52.2884", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "88.7167", "2.2800", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "44.5093", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "54.4312", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "49.1485", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "44.3191", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "51.7353", "2.0000", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.09758", "226.8", "2.6829", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.09758", "226.8000", "2.6829", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.20800", "118.86", "2.6484", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "87.6930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "80.7930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "67.9896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "71.6896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "61.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "98.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "95.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "76.7658", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "71.1997", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "66.2467", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "121.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "68.1000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "90.1047", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "85.3184", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "105.3797", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "131.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "114.6152", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "51.0126", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "62.9485", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "58.3239", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "53.3079", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "113.6866", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "75.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "61.9610", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "65.7436", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "71.5226", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "121.5152", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "57.9126", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "69.8485", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "65.2239", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "60.2079", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "73.0600", "2.0000", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "107.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "63.8131", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "79.2035", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "48.8255", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "52.7842", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "46.9004", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "41.9068", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "61.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "52.7450", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "60.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "43.7949", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "75.5035", "1.7700", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "45.1255", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "49.0842", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "43.2004", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "38.2068", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "41.8565", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "44.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "57.5916", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "52.2057", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "45.7868", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "40.6770", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "42.0518", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.74611", "104.207", "1.9561", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "130.1826", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "86.4756", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "78.5432", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "73.0108", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "72.0792", "2.0000", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.74164", "106.010", "1.9382", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "37.5", "2.6284", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "51.7795", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "48.3750", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "43.5416", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "74.3350", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.988", "58.066", "2.0183", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "52.2969", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "47.3349", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "51.9937", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.290", "46.336", "1.9469", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "41.4039", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "45.0580", "2.0000", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.662", "36.46", "1.8383", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "39.7416", "2.0000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "3.0900", "36.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"no", "o-", "1.2178", "140.2486", "2.0000", "Ver. 2.3, Ref. 23"}, {"no", "cp", "1.4720", "87.8132", "2.0000", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "1.4720", "87.8132", "2.0000", "Ver. 2.3, Ref. 23"}, {"c", "o", "1.4250", "68.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "88.0000", "1.9150", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "145.0000", "2.0600", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "135.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "105.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "105.0000", "2.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "57.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "121.0000", "1.7700", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "100.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "80.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "1.0000", "104.0000", "2.2800", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "0.9570", "104.0000", "2.2800", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "75.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "61.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "90.4000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "104.207", "1.9561", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "106.010", "1.9382", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "37.5", "2.6284", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "58.066", "2.0183", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "46.336", "1.9469", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "36.46", "1.8383", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "118.86", "2.6484", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "169.3000", "1.7361", "Ver. 1.3, Ref. 7"}, {"oz", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.8, Ref. 14"}, {"sz", "o", "1.6150", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sz", "oz", "1.6150", "98.2000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "oh", "1.6350", "98.2000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"al", "c", "1.8090", "59.5000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "h", "1.3820", "55.6000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "o", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "oh", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "h", "1.3820", "55.6000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "c", "1.8090", "59.5000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "o", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"sz", "sz", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"si", "al", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"az", "az", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CVFF info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CVFF_angles_auto[563][6]= {{"cp", "cp", "c'", "120.0000", "34.6799", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o'", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"cp", "cp", "no", "120.0000", "34.6799", "Ver. 2.3, Ref. 23"}, {"cp", "no", "o-", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"o-", "no", "o-", "120.0000", "113.5731", "Ver. 2.3, Ref. 23"}, {"c", "o", "c'", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "h", "106.4000", "39.5000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "109.5000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "hn", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "118.0000", "111.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "c", "122.0000", "35.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "h", "109.5000", "51.5000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "ho", "106.0000", "58.5000", "Ver. 1.0, Ref. 1"}, {"o", "c", "h", "109.5000", "57.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"o", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "hn", "125.0000", "33.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "o", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o", "110.0000", "122.8000", "Ver. 1.0, Ref. 1"}, {"c'", "o", "ho", "112.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o", "110.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"o-", "c'", "o-", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o-", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o-", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "120.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "ho", "109.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o", "cp", "cp", "120.0000", "60.0000", "Ver. 1.0, Ref. 1"}, {"c", "sh", "hs", "96.0000", "48.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "sh", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "sh", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "99.0000", "58.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "109.5000", "75.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n3", "109.5000", "57.3000", "Ver. 1.0, Ref. 1"}, {"hn", "n3", "hn", "105.5000", "36.0000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "c", "112.0000", "86.3000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "hn", "110.0000", "41.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "n3", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "c5", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c5", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "c5", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c5", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"np", "c5", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c5", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "cp", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"n3", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "h*", "104.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"hspc", "ospc", "hspc", "109.4700", "50.0000", "Ver. 2.3, Ref. 25"}, {"htip", "otip", "htip", "104.5200", "50.0000", "Ver. 2.3, Ref. 25"}, {"p", "o", "c", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "p", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o'", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "o-", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c", "128.8000", "70.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "o", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "h", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "c", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "h", "120.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=2", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "h", "121.2000", "33.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "np", "c=", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=1", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c'", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=2", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"cp", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "c", "107.8000", "99.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "h", "107.1000", "62.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "c", "107.8000", "85.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "h", "107.1000", "67.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "c", "107.8000", "96.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "h", "107.1000", "56.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "cp", "120.0000", "99.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "cp", "120.0000", "85.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "cp", "120.0000", "96.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "h", "112.3000", "34.6000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "113.5000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "si", "h", "109.1000", "32.7000", "Ver. 1.0, Ref. 1"}, {"h", "si", "h", "112.0000", "31.8000", "Ver. 1.0, Ref. 1"}, {"si", "c", "si", "122.5000", "42.2000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "117.3000", "44.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "h", "113.4000", "33.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "149.8000", "31.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "113.1000", "42.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "124.1000", "56.4000", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "cp", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"nt", "nt", "c", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"cs", "c5", "c5", "112.7000", "70.0000", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"c5", "cs", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "92.5670", "126.5060", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "c5", "111.0390", "88.7595", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "h", "119.9000", "30.2723", "Ver. 1.3, Ref. 6"}, {"s'", "c'", "h", "121.6300", "40.9360", "Ver. 1.3, Ref. 7"}, {"h", "c'", "h", "117.0200", "26.3900", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"s'", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"c5", "op", "c5", "120.0000", "75.0000", "Ver. 1.3, Ref. 8"}, {"sz", "oz", "sz", "149.8000", "31.1000", "Ver. 1.8, Ref. 14"}, {"oz", "sz", "oz", "109.4700", "100.3000", "Ver. 1.8, Ref. 14"}, {"oz", "sz", "h", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"sz", "oz", "ho", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"az", "oz", "ho", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"h", "sz", "h", "112.0000", "31.8000", "Ver. 1.8, Ref. 14"}, {"al", "oz", "al", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "oz", "109.4700", "100.3000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "al", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "az", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "az", "oz", "109.4700", "100.3000", "Ver. 2.1, Ref. 26"}, {"oz", "az", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "az", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"o", "al", "o", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "sz", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"o", "az", "o", "109.4700", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "az", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"f", "sz", "oz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"sz", "f", "sz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"f", "sz", "sz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"f", "sz", "f", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"sz", "sz", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"az", "sz", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"si", "si", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"si", "al", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"al", "si", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 18"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 18"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 18"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 18"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 18"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 18"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 18"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 18"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CVFF info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CVFF_torsions_auto[295][8]= {{"*", "c_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "n3n_", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "n3n_", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c'_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c'_", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "np_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "o_", "*", "5.0000", "3", "0.", "Ver. 2.0, Ref. 22"}, {"*", "o_", "s_", "*", "5.0000", "3", "0.", "Ver. 2.0, Ref. 22"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "p_", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp", "no", "*", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"*", "cp", "c'", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c", "*", "1.4225", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c'", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "n", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "o", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "of", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "n2", "*", "6.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cr", "n2", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "cr", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "o", "*", "4.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "cp", "*", "12.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "c", "*", "0.0000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c", "cp", "0.6750", "4", "0.0000", "Ver. 1.9, Ref. 17"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "o", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "ct", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "c'", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "o", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "n", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "s", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "o", "*", "1.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "1.8000", "2", "180.0000", "Ver. 1.9, Ref. 16"}, {"*", "cp", "of", "*", "3.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "sh", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "s", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "s", "*", "5.5000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n3", "c", "*", "0.8000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n2", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n2", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "p", "o", "*", "0.7500", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c=", "*", "16.3000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=1", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c", "*", "1.2660", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "np", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=", "*", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=1", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c'", "c=2", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "cs", "cp", "*", "6.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "cp", "12.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "h", "3.9316", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "cp", "6.4517", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "h", "2.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"c", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "hn", "1.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c", "3.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "hn", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "c", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "h", "0.2800", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "si", "-1.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "c", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "o", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "si", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "o", "0.3000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "c", "0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "c", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "h", "0.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"sz", "oz", "sz", "oz", "0.3000", "3", "0.0000", "Ver. 1.8, Ref. 14"}, {"h", "sz", "oz", "sz", "1.0000", "3", "0.0000", "Ver. 1.8, Ref. 14"}}; /* Out of plane / impropers / improper 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CVFF info E = K * (Chi - Chi0)^2 */ char * CVFF_impropers[41][8]= {{"c'", "cp", "cp", "cp", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "no", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "cp", "cp", "no", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"c", "c'", "n", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n2", "c'", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "c", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "n", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "c", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o'", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "hn", "hn", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n2", "n2", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c'", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "np", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"sp", "cs", "cp", "h", "2.9998", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cp", "cp", "cs", "h", "0.3700", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"h", "c'", "s'", "h", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "s'", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"*", "c'_", "*", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "*", "11.1000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}}; /* Non-bonded (12-6) 0= Key, 1= A, 2= B, 3= CVFF info E = Aij/r^12 - Bij/r^6 where Aij = sqrt( Ai * Aj ) Bij = sqrt( Bi * Bj )0 */ char * CVFF_vdw[45][4]= {{"h", "7108.4660", "32.87076", "Ver. 1.0, Ref. 1"}, {"cg", "1790340.7240", "528.48190", "Ver. 1.0, Ref. 1"}, {"o'", "272894.7846", "498.87880", "Ver. 1.0, Ref. 1"}, {"oz", "272894.7846", "498.87880", "Ver. 1.8, Ref. 14"}, {"n", "2266872.4000", "1230.55700", "Ver. 1.0, Ref. 1"}, {"c'", "2968753.3590", "1325.70810", "Ver. 1.0, Ref. 1"}, {"c", "1981049.2250", "1125.99800", "Ver. 1.0, Ref. 1"}, {"hn", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"s", "365906.4000", "250.80000", "Ver. 1.0, Ref. 1"}, {"s'", "1395550.1000", "956.80800", "Ver. 1.3, Ref. 6"}, {"o*", "629358.0000", "625.50000", "Ver. 1.0, Ref. 1"}, {"ospc", "629358.0000", "625.50000", "Ver. 2.3, Ref. 25"}, {"otip", "582000.0000", "595.00000", "Ver. 2.3, Ref. 25"}, {"h*", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"hspc", "0.00000001", "0.00000", "Ver. 2.3, Ref. 25"}, {"htip", "0.00000001", "0.00000", "Ver. 2.3, Ref. 25"}, {"p", "6025894.0000", "2195.60000", "Ver. 1.0, Ref. 1"}, {"ca+", "119025.0000", "240.25000", "Ver. 2.0, Ref. 20"}, {"si", "3149175.0000", "710.00000", "Ver. 1.0, Ref. 1"}, {"sz", "3149175.0000", "710.00000", "Ver. 1.8, Ref. 14"}, {"f", "201106.0000", "235.20000", "Ver. 1.0, Ref. 1"}, {"cl", "1059166.0000", "541.00000", "Ver. 1.0, Ref. 1"}, {"br", "3572030.0000", "1195.00000", "Ver. 1.0, Ref. 1"}, {"Na", "14000.0000", "300.00000", "Ver. 1.0, Ref. 1"}, {"Cl", "25552052.0000", "3307.00450", "Ver. 1.0, Ref. 1"}, {"Br", "34375640.0000", "3517.84460", "Ver. 1.0, Ref. 1"}, {"ar", "2312930.0000", "1484.09200", "Ver. 1.3, Ref. 9"}, {"he", "6315.5582", "22.64953", "Ver. 2.4, Ref. 30"}, {"nu", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"Al", "3784321.4254", "11699.84934", "Ver. 2.1, Ref. 27"}, {"Au", "4603936.5046", "13692.05223", "Ver. 2.1, Ref. 27"}, {"Pb", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}, {"Ni", "955901.6916", "6768.92014", "Ver. 2.1, Ref. 27"}, {"Pd", "2581174.9390", "10078.92459", "Ver. 2.1, Ref. 27"}, {"Pt", "4576819.9618", "16963.30818", "Ver. 2.1, Ref. 27"}, {"Ag", "3712095.6064", "10865.51833", "Ver. 2.1, Ref. 27"}, {"Cu", "1007210.0670", "6166.70278", "Ver. 2.1, Ref. 27"}, {"Cr", "1222517.4049", "7523.46700", "Ver. 2.1, Ref. 27"}, {"Fe", "1186612.1982", "7590.28296", "Ver. 2.1, Ref. 27"}, {"Li", "5192358.6600", "9916.81768", "Ver. 2.1, Ref. 27"}, {"Mo", "5869689.0344", "21298.66304", "Ver. 2.1, Ref. 27"}, {"W", "7876811.6340", "27853.23915", "Ver. 2.1, Ref. 27"}, {"al", "11422865.0000", "2282.96606", "Ver. 2.2, Ref. 29"}, {"mg", "3149175.0000", "710.00000", "Ver. 2.1, Ref. 27"}, {"K", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}}; /* Bond increments To implement atomic charges */ char * CVFF_bond_increments[683][5]= {{"no", "o-", "0.1684", "-0.1684", "Ver. 2.3, Ref. 23"}, {"no", "cp", "-0.1792", "0.1792", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "-0.1792", "0.1792", "Ver. 2.0, Ref. 18"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "0.0700", "-0.5700", "Ver. 1.0, Ref. 1"}, {"ci", "h", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "0.3200", "-0.0700", "Ver. 1.0, Ref. 1"}, {"cr", "n", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"cr", "n1", "0.5000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"n", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "0.0000", "0.5000", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "-0.1400", "0.1400", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "-0.1100", "0.3600", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "-0.3600", "0.3600", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "-0.2233", "0.2233", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "-0.4100", "0.4100", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "-0.4100", "0.4100", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "-0.4170", "0.4170", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"s-", "p", "-0.6824", "0.1824", "Ver. 2.0, Ref. 18"}, {"oz", "sz", "-0.1500", "0.1500", "Ver. 1.8, Ref. 14"}, {"sh", "hs", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"h", "sz", "0.0200", "-0.0200", "Ver. 1.8, Ref. 14"}, {"d", "d", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"p", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cs", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "0.0865", "-0.0865", "Ver. 2.0, Ref. 18"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.2, Ref. 3"}, {"c", "n3", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n4", "0.4200", "-0.1700", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.1000", "-0.1000", "Ver. 1.3, Ref. 5"}, {"c", "nz", "0.3640", "-0.3640", "Ver. 2.0, Ref. 18"}, {"c", "o", "0.1500", "-0.1500", "Ver. 1.0, Ref. 1"}, {"c", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c", "oz", "0.1742", "-0.1742", "Ver. 2.0, Ref. 18"}, {"c", "op", "0.3957", "-0.3957", "Ver. 2.0, Ref. 18"}, {"c", "s", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"c", "sh", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "sp", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "s'", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "p", "-0.0785", "0.0785", "Ver. 2.0, Ref. 18"}, {"c", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2750", "-0.2750", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.2260", "-0.2260", "Ver. 1.0, Ref. 1"}, {"c", "br", "0.1920", "-0.1920", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 18"}, {"c", "si", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c'", "c5", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "cs", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c-", "-0.1368", "0.1368", "Ver. 2.0, Ref. 18"}, {"c'", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 18"}, {"c'", "n3", "-0.0442", "0.0442", "Ver. 2.0, Ref. 18"}, {"c'", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n4", "0.1331", "0.1169", "Ver. 2.0, Ref. 18"}, {"c'", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 18"}, {"c'", "o", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oz", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"c'", "op", "0.0300", "-0.0300", "Ver. 1.4, Ref. 10"}, {"c'", "o'", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"c'", "s", "-0.1528", "0.1528", "Ver. 2.0, Ref. 18"}, {"c'", "sh", "-0.2033", "0.2033", "Ver. 2.0, Ref. 18"}, {"c'", "sp", "-0.1079", "0.1079", "Ver. 2.0, Ref. 18"}, {"c'", "s'", "0.0", "0.0", "Ver. 1.3, Ref. 7"}, {"c'", "p", "-0.3283", "0.3283", "Ver. 2.0, Ref. 18"}, {"c'", "h", "-0.2132", "0.2132", "Ver. 1.0, Ref. 1"}, {"c'", "f", "0.1116", "-0.1116", "Ver. 2.0, Ref. 18"}, {"c'", "cl", "-0.0594", "0.0594", "Ver. 2.0, Ref. 18"}, {"c'", "br", "-0.1152", "0.1152", "Ver. 2.0, Ref. 18"}, {"c'", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 18"}, {"c'", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 18"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cp", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cp", "n", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "0.1050", "-0.1050", "Ver. 1.1, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cp", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cp", "o", "0.0282", "-0.0282", "Ver. 1.9, Ref. 16"}, {"cp", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cp", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cp", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cp", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cp", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 1.0, Ref. 1"}, {"cp", "cl", "0.1020", "-0.1020", "Ver. 1.0, Ref. 1"}, {"cp", "br", "0.0800", "-0.0800", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c5", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cs", "0.0000", "0.0000", "Ver. 1.3, Ref. 6"}, {"c5", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c5", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c5", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c5", "n", "0.1100", "-0.1100", "Ver. 1.4, Ref. 10"}, {"c5", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "np", "0.1400", "-0.1400", "Ver. 1.0, Ref. 1"}, {"c5", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c5", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c5", "o", "0.1100", "-0.1100", "Ver. 1.2, Ref. 3"}, {"c5", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c5", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c5", "op", "0.1100", "-0.1100", "Ver. 1.3, Ref. 8"}, {"c5", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c5", "s", "-0.1500", "0.1500", "Ver. 1.2, Ref. 3"}, {"c5", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c5", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c5", "h", "-0.1300", "0.1300", "Ver. 1.0, Ref. 1"}, {"c5", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c5", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c5", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c5", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c5", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"cs", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cs", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cs", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cs", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cs", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cs", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"cs", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cs", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cs", "sp", "-0.1500", "0.1500", "Ver. 1.3, Ref. 6"}, {"cs", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cs", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cs", "h", "-0.1300", "0.1300", "Ver. 1.3, Ref. 6"}, {"cs", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"cs", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"cs", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"cs", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cs", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=1", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=1", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=1", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=1", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=1", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=1", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=1", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=1", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=1", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=2", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=2", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=2", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=2", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=2", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=2", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=2", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=2", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=2", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=2", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=2", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 18"}, {"c-", "n3", "0.0824", "-0.0824", "Ver. 2.0, Ref. 18"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n4", "0.2597", "-0.0097", "Ver. 2.0, Ref. 18"}, {"c-", "nt", "0.2854", "-0.2854", "Ver. 2.0, Ref. 18"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "oh", "-0.0058", "0.0058", "Ver. 2.0, Ref. 18"}, {"c-", "oz", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "o'", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "s", "-0.0146", "0.0146", "Ver. 2.0, Ref. 18"}, {"c-", "sh", "-0.0650", "0.0650", "Ver. 2.0, Ref. 18"}, {"c-", "sp", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s'", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 18"}, {"c-", "p", "-0.1744", "0.1744", "Ver. 2.0, Ref. 18"}, {"c-", "h", "-0.1549", "0.1549", "Ver. 2.0, Ref. 18"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 18"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 18"}, {"c-", "br", "0.0281", "-0.0281", "Ver. 2.0, Ref. 18"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 18"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 18"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"ct", "n3", "0.0419", "-0.0419", "Ver. 2.0, Ref. 18"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n4", "0.2181", "0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "nt", "0.2454", "-0.2454", "Ver. 2.0, Ref. 18"}, {"ct", "o", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "oh", "-0.0420", "0.0420", "Ver. 2.0, Ref. 18"}, {"ct", "oz", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "op", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "o'", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "s", "-0.0581", "0.0581", "Ver. 2.0, Ref. 18"}, {"ct", "sh", "-0.1082", "0.1082", "Ver. 2.0, Ref. 18"}, {"ct", "sp", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "s'", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "p", "-0.2216", "0.2216", "Ver. 2.0, Ref. 18"}, {"ct", "h", "-0.2000", "0.2000", "Ver. 1.2, Ref. 3"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 18"}, {"ct", "cl", "0.0319", "-0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "br", "-0.0173", "0.0173", "Ver. 2.0, Ref. 18"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 18"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 18"}, {"n3", "n3", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n3", "n", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=1", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n4", "0.1650", "0.0850", "Ver. 2.0, Ref. 18"}, {"n3", "nt", "0.1927", "-0.1927", "Ver. 2.0, Ref. 18"}, {"n3", "o", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "oh", "-0.0754", "0.0754", "Ver. 2.0, Ref. 18"}, {"n3", "oz", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "o'", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "s", "-0.0967", "0.0967", "Ver. 2.0, Ref. 18"}, {"n3", "sh", "-0.1434", "0.1434", "Ver. 2.0, Ref. 18"}, {"n3", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 18"}, {"n3", "h", "-0.2386", "0.2386", "Ver. 2.0, Ref. 18"}, {"n3", "f", "0.1415", "-0.1415", "Ver. 2.0, Ref. 18"}, {"n3", "cl", "-0.0117", "0.0117", "Ver. 2.0, Ref. 18"}, {"n3", "br", "-0.0601", "0.0601", "Ver. 2.0, Ref. 18"}, {"n3", "i", "-0.0714", "0.0714", "Ver. 2.0, Ref. 18"}, {"n3", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 18"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n2", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n2", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=1", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=1", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=1", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=1", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=1", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=1", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=1", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=1", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=1", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=1", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=2", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"np", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"np", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"np", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"np", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"np", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"np", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"np", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"np", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"np", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"np", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"np", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"np", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n4", "n4", "0.2500", "0.2500", "Ver. 2.0, Ref. 18"}, {"n4", "nt", "0.2842", "-0.0342", "Ver. 2.0, Ref. 18"}, {"n4", "o", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "oh", "0.0242", "0.2258", "Ver. 2.0, Ref. 18"}, {"n4", "oz", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "o'", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "s", "-0.0257", "0.2757", "Ver. 2.0, Ref. 18"}, {"n4", "sh", "-0.0723", "0.3223", "Ver. 2.0, Ref. 18"}, {"n4", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 18"}, {"n4", "h", "-0.1978", "0.4478", "Ver. 2.0, Ref. 18"}, {"n4", "f", "0.2438", "0.0062", "Ver. 2.0, Ref. 18"}, {"n4", "cl", "0.0642", "0.1858", "Ver. 2.0, Ref. 18"}, {"n4", "br", "0.0048", "0.2452", "Ver. 2.0, Ref. 18"}, {"n4", "i", "-0.0114", "0.2614", "Ver. 2.0, Ref. 18"}, {"n4", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 18"}, {"nt", "nt", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"nt", "o", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nt", "oh", "-0.2490", "0.2490", "Ver. 2.0, Ref. 18"}, {"nt", "oz", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nt", "op", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nt", "o'", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nt", "s", "-0.3010", "0.3010", "Ver. 2.0, Ref. 18"}, {"nt", "sh", "-0.3457", "0.3457", "Ver. 2.0, Ref. 18"}, {"nt", "sp", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nt", "s'", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nt", "p", "-0.4691", "0.4691", "Ver. 2.0, Ref. 18"}, {"nt", "h", "-0.4688", "0.4688", "Ver. 2.0, Ref. 18"}, {"nt", "f", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"nt", "cl", "-0.2141", "0.2141", "Ver. 2.0, Ref. 18"}, {"nt", "br", "-0.2727", "0.2727", "Ver. 2.0, Ref. 18"}, {"nt", "i", "-0.2889", "0.2889", "Ver. 2.0, Ref. 18"}, {"nt", "si", "-0.5738", "0.5738", "Ver. 2.0, Ref. 18"}, {"o", "o", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"o", "oh", "-0.0921", "0.0921", "Ver. 2.0, Ref. 18"}, {"o", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"o", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "p", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"o", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"o", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"o", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"o", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"o", "si", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "oh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oh", "oz", "0.0921", "-0.0921", "Ver. 2.0, Ref. 18"}, {"oh", "op", "0.2853", "-0.2853", "Ver. 2.0, Ref. 18"}, {"oh", "s", "-0.0063", "0.0063", "Ver. 2.0, Ref. 18"}, {"oh", "sh", "-0.0485", "0.0485", "Ver. 2.0, Ref. 18"}, {"oh", "sp", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "s'", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "p", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "h", "-0.1190", "0.1190", "Ver. 2.0, Ref. 18"}, {"oh", "f", "0.1983", "-0.1983", "Ver. 2.0, Ref. 18"}, {"oh", "cl", "0.0686", "-0.0686", "Ver. 2.0, Ref. 18"}, {"oh", "br", "0.0295", "-0.0295", "Ver. 2.0, Ref. 18"}, {"oh", "i", "0.0216", "-0.0216", "Ver. 2.0, Ref. 18"}, {"oh", "si", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oh", "sz", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oh", "az", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oz", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"oz", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"oz", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"oz", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 18"}, {"oz", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"oz", "ho", "-0.1", "0.1", "Ver. 2.0, Ref. 18"}, {"oz", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"oz", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"oz", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"oz", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"oz", "si", "-0.1500", "0.1500", "Ver. 2.0, Ref. 18"}, {"oz", "sz", "-0.1500", "0.1500", "Ver. 2.0, Ref. 18"}, {"oz", "az", "-0.0", "0.0", "Ver. 2.0, Ref. 18"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"op", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 18"}, {"op", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"op", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"op", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"op", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"op", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o'", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"o'", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"o'", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o'", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"o'", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"o'", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"o'", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"o'", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"o'", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"s", "s", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s", "sh", "-0.0509", "0.0509", "Ver. 2.0, Ref. 18"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "p", "-0.1600", "0.1600", "Ver. 2.0, Ref. 18"}, {"s", "h", "-0.1392", "0.1392", "Ver. 2.0, Ref. 18"}, {"s", "f", "0.2380", "-0.2380", "Ver. 2.0, Ref. 18"}, {"s", "cl", "0.0898", "-0.0898", "Ver. 2.0, Ref. 18"}, {"s", "br", "0.0437", "-0.0437", "Ver. 2.0, Ref. 18"}, {"s", "i", "0.0345", "-0.0345", "Ver. 2.0, Ref. 18"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 18"}, {"sh", "sh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sh", "sp", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "s'", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "p", "-0.1032", "0.1032", "Ver. 2.0, Ref. 18"}, {"sh", "h", "-0.0787", "0.0787", "Ver. 2.0, Ref. 18"}, {"sh", "f", "0.2794", "-0.2794", "Ver. 2.0, Ref. 18"}, {"sh", "cl", "0.1392", "-0.1392", "Ver. 2.0, Ref. 18"}, {"sh", "br", "0.0966", "-0.0966", "Ver. 2.0, Ref. 18"}, {"sh", "i", "0.0889", "-0.0889", "Ver. 2.0, Ref. 18"}, {"sh", "si", "-0.2032", "0.2032", "Ver. 2.0, Ref. 18"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"sp", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"sp", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"sp", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"sp", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"sp", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"sp", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"s'", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"s'", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"s'", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"s'", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"s'", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"s'", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"p", "h", "0.0356", "-0.0356", "Ver. 2.0, Ref. 18"}, {"p", "f", "0.3869", "-0.3869", "Ver. 2.0, Ref. 18"}, {"p", "cl", "0.2544", "-0.2544", "Ver. 2.0, Ref. 18"}, {"p", "br", "0.2156", "-0.2156", "Ver. 2.0, Ref. 18"}, {"p", "i", "0.2110", "-0.2110", "Ver. 2.0, Ref. 18"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 18"}, {"h", "h", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "f", "0.3823", "-0.3823", "Ver. 2.0, Ref. 18"}, {"h", "cl", "0.2404", "-0.2404", "Ver. 2.0, Ref. 18"}, {"h", "br", "0.1978", "-0.1978", "Ver. 2.0, Ref. 18"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 18"}, {"h", "si", "0.0200", "-0.0200", "Ver. 1.0, Ref. 1"}, {"f", "f", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"f", "cl", "-0.1589", "0.1589", "Ver. 2.0, Ref. 18"}, {"f", "br", "-0.2099", "0.2099", "Ver. 2.0, Ref. 18"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 18"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"cl", "br", "-0.0507", "0.0507", "Ver. 2.0, Ref. 18"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 18"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 18"}, {"br", "br", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 18"}, {"br", "si", "-0.3272", "0.3272", "Ver. 2.0, Ref. 18"}, {"i", "i", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 18"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}}; atomes_1.3.1/src/calc/force_fields/force_fields.h0000664000175000017500000002160515212624223021423 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file force_fields.h * @short Variable declarations for the creation of the force field database * @author Sébastien Le Roux */ /* * This header file: 'force_fields.h' * * Contains: - Variable declarations for the creation of the force field database */ #ifndef FORCE_FIELDS_H_ #define FORCE_FIELDS_H_ /* Amber force fields */ // amber94 extern int amber94_objects[14]; extern int amber94_dim[14]; extern char * amber94_atoms[2][4]; extern char * amber94_equi[2][15]; extern char * amber94_bonds[83][5]; extern char * amber94_angles[191][6]; extern char * amber94_dihedrals[81][9]; extern char * amber94_impropers[31][8]; extern char * amber94_vdw[34][4]; // amber96 extern int amber96_objects[14]; extern int amber96_dim[14]; extern char * amber96_atoms[2][4]; extern char * amber96_equi[2][15]; extern char * amber96_bonds[83][5]; extern char * amber96_angles[191][6]; extern char * amber96_dihedrals[81][9]; extern char * amber96_impropers[31][8]; extern char * amber96_vdw[35][4]; // amber98 extern int amber98_objects[14]; extern int amber98_dim[14]; extern char * amber98_atoms[2][4]; extern char * amber98_equi[2][15]; extern char * amber98_bonds[83][5]; extern char * amber98_angles[191][6]; extern char * amber98_dihedrals[83][9]; extern char * amber98_impropers[31][8]; extern char * amber98_vdw[35][4]; // amber99 extern int amber99_objects[14]; extern int amber99_dim[14]; extern char * amber99_atoms[2][5]; extern char * amber99_equi[2][15]; extern char * amber99_bonds[116][5]; extern char * amber99_angles[281][6]; extern char * amber99_dihedrals[164][9]; extern char * amber99_impropers[38][8]; extern char * amber99_vdw[42][4]; /* CHARMM force fields */ // CHARMM-charmm22_prot extern int charmm22_prot_objects[14]; extern int charmm22_prot_dim[14]; extern char * charmm22_prot_atoms[47][5]; extern char * charmm22_prot_bonds[122][5]; extern char * charmm22_prot_angles[324][8]; extern char * charmm22_prot_dihedrals[445][8]; extern char * charmm22_prot_impropers[34][8]; extern char * charmm22_prot_vdw[47][6]; // CHARMM-charmm22_prot_metals extern int charmm22_prot_metals_objects[14]; extern int charmm22_prot_metals_dim[14]; extern char * charmm22_prot_metals_atoms[98][5]; extern char * charmm22_prot_metals_bonds[139][5]; extern char * charmm22_prot_metals_angles[345][8]; extern char * charmm22_prot_metals_dihedrals[452][8]; extern char * charmm22_prot_metals_impropers[43][8]; extern char * charmm22_prot_metals_vdw[98][6]; // CHARMM-charmm35_ethers extern int charmm35_ethers_objects[14]; extern int charmm35_ethers_dim[14]; extern char * charmm35_ethers_atoms[13][5]; extern char * charmm35_ethers_bonds[22][5]; extern char * charmm35_ethers_angles[55][8]; extern char * charmm35_ethers_dihedrals[106][8]; extern char * charmm35_ethers_vdw[13][6]; // CHARMM-charmm36_carb extern int charmm36_carb_objects[14]; extern int charmm36_carb_dim[14]; extern char * charmm36_carb_atoms[59][5]; extern char * charmm36_carb_bonds[153][5]; extern char * charmm36_carb_angles[438][8]; extern char * charmm36_carb_dihedrals[1354][8]; extern char * charmm36_carb_impropers[14][8]; extern char * charmm36_carb_vdw[57][6]; // CHARMM-charmm36_cgenff extern int charmm36_cgenff_objects[14]; extern int charmm36_cgenff_dim[14]; extern char * charmm36_cgenff_atoms[163][5]; extern char * charmm36_cgenff_bonds[506][5]; extern char * charmm36_cgenff_angles[1561][8]; extern char * charmm36_cgenff_dihedrals[3937][8]; extern char * charmm36_cgenff_impropers[125][8]; extern char * charmm36_cgenff_vdw[156][6]; // CHARMM-charmm36_lipid extern int charmm36_lipid_objects[14]; extern int charmm36_lipid_dim[14]; extern char * charmm36_lipid_atoms[29][5]; extern char * charmm36_lipid_bonds[50][5]; extern char * charmm36_lipid_angles[131][8]; extern char * charmm36_lipid_dihedrals[180][8]; extern char * charmm36_lipid_impropers[4][8]; extern char * charmm36_lipid_vdw[29][6]; // CHARMM-charmm36m_prot extern int charmm36m_prot_objects[14]; extern int charmm36m_prot_dim[14]; extern char * charmm36m_prot_atoms[53][5]; extern char * charmm36m_prot_bonds[132][5]; extern char * charmm36m_prot_angles[364][8]; extern char * charmm36m_prot_dihedrals[706][8]; extern char * charmm36m_prot_impropers[35][8]; extern char * charmm36m_prot_vdw[53][6]; // CHARMM-charmm36_na extern int charmm36_na_objects[14]; extern int charmm36_na_dim[14]; extern char * charmm36_na_atoms[42][5]; extern char * charmm36_na_bonds[89][5]; extern char * charmm36_na_angles[226][8]; extern char * charmm36_na_dihedrals[502][8]; extern char * charmm36_na_impropers[15][8]; extern char * charmm36_na_vdw[42][6]; // CHARMM-charmm36_prot extern int charmm36_prot_objects[14]; extern int charmm36_prot_dim[14]; extern char * charmm36_prot_atoms[53][5]; extern char * charmm36_prot_bonds[132][5]; extern char * charmm36_prot_angles[364][8]; extern char * charmm36_prot_dihedrals[705][8]; extern char * charmm36_prot_impropers[35][8]; extern char * charmm36_prot_vdw[53][6]; // CHARMM-charmm_silicates extern int charmm_silicates_objects[14]; extern int charmm_silicates_dim[14]; extern char * charmm_silicates_atoms[13][5]; extern char * charmm_silicates_bonds[14][5]; extern char * charmm_silicates_angles[27][8]; extern char * charmm_silicates_dihedrals[34][8]; extern char * charmm_silicates_vdw[13][6]; /* FF force fields */ // Compass extern int Compass_objects[14]; extern int Compass_dim[14]; extern char * Compass_atoms[45][5]; extern char * Compass_equivalence[46][7]; extern char * Compass_bonds[54][7]; extern char * Compass_angles[94][8]; extern char * Compass_torsions[95][11]; extern char * Compass_inversions[22][7]; extern char * Compass_vdw[46][4]; extern char * Compass_bond_increments[55][5]; // PCFF extern int PCFF_objects[14]; extern int PCFF_dim[14]; extern char * PCFF_atoms[133][5]; extern char * PCFF_equivalence_auto[108][11]; extern char * PCFF_equivalence[134][7]; extern char * PCFF_bonds_auto[627][5]; extern char * PCFF_bonds[126][7]; extern char * PCFF_angles_auto[329][6]; extern char * PCFF_angles[302][8]; extern char * PCFF_torsions_auto[216][8]; extern char * PCFF_torsions[492][11]; extern char * PCFF_inversions[83][7]; extern char * PCFF_vdw[94][4]; extern char * PCFF_bond_increments[564][5]; // CFF91 extern int CFF91_objects[14]; extern int CFF91_dim[14]; extern char * CFF91_atoms[93][5]; extern char * CFF91_equivalence_auto[97][11]; extern char * CFF91_equivalence[95][7]; extern char * CFF91_bonds_auto[667][5]; extern char * CFF91_bonds[58][7]; extern char * CFF91_angles_auto[330][6]; extern char * CFF91_angles[155][8]; extern char * CFF91_torsions_auto[216][8]; extern char * CFF91_torsions[294][11]; extern char * CFF91_inversions[70][7]; extern char * CFF91_vdw[40][4]; extern char * CFF91_bond_increments[560][5]; // CVFF extern int CVFF_objects[14]; extern int CVFF_dim[14]; extern char * CVFF_atoms[133][5]; extern char * CVFF_equivalence_auto[123][11]; extern char * CVFF_equivalence[129][7]; extern char * CVFF_bonds_auto[776][5]; extern char * CVFF_morse_bonds[775][6]; extern char * CVFF_angles_auto[563][6]; extern char * CVFF_torsions_auto[295][8]; extern char * CVFF_impropers[41][8]; extern char * CVFF_vdw[45][4]; extern char * CVFF_bond_increments[683][5]; // CVFF_aug extern int CVFF_aug_objects[14]; extern int CVFF_aug_dim[14]; extern char * CVFF_aug_atoms[172][5]; extern char * CVFF_aug_equivalence_auto[162][11]; extern char * CVFF_aug_equivalence[168][7]; extern char * CVFF_aug_bonds_auto[798][5]; extern char * CVFF_aug_morse_bonds[752][6]; extern char * CVFF_aug_angles_auto[640][6]; extern char * CVFF_aug_torsions_auto[342][8]; extern char * CVFF_aug_impropers[41][8]; extern char * CVFF_aug_vdw[86][4]; extern char * CVFF_aug_bond_increments[717][5]; // OPLSAAM extern int OPLSAAM_objects[14]; extern int OPLSAAM_dim[14]; extern char * OPLSAAM_atoms[78][4]; extern char * OPLSAAM_bonds[159][5]; extern char * OPLSAAM_angles[437][5]; extern char * OPLSAAM_dihedrals[1446][7]; extern char * OPLSAAM_impropers[105][7]; extern char * OPLSAAM_vdw[78][7]; // OPLSAAR extern int OPLSAAR_objects[14]; extern int OPLSAAR_dim[14]; extern char * OPLSAAR_atoms[145][4]; extern char * OPLSAAR_bonds[242][5]; extern char * OPLSAAR_angles[593][5]; extern char * OPLSAAR_dihedrals[2482][7]; extern char * OPLSAAR_impropers[131][7]; extern char * OPLSAAR_vdw[145][7]; #endif atomes_1.3.1/src/calc/force_fields/charmm22_prot_metals.c0000664000175000017500000045547115212624223023032 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm22_prot_metals.c * @short * @author Sébastien Le Roux */ /* * This file: 'charmm22_prot_metals.c' * * Contains: * CHARMM-charmm22_prot_metals force field, data from taken from: - the file: 'charmm22_prot_metals' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm22_prot_metals_atoms[98][5] Bonds : charmm22_prot_metals_bonds[139][5] Angles : charmm22_prot_metals_angles[345][8] Dihedrals : charmm22_prot_metals_dihedrals[452][8] Impropers : charmm22_prot_metals_impropers[43][8] Non bonded : charmm22_prot_metals_vdw[98][6] */ #include "global.h" int charmm22_prot_metals_objects[14] = {98, 0, 0, 139, 0, 0, 345, 0, 452, 0 , 0, 43, 98, 0}; int charmm22_prot_metals_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm22_prot_metals info */ char * charmm22_prot_metals_atoms[98][5]= {{"H", "1.00800", "H", "polar H", "1"}, {"H", "1.00800", "HC", "N-ter H", "2"}, {"H", "1.00800", "HA", "nonpolar H", "3"}, {"H", "1.00800", "HT", "TIPS3P WATER HYDROGEN", "4"}, {"H", "1.00800", "HP", "aromatic H", "5"}, {"H", "1.00800", "HB", "backbone H", "6"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "7"}, {"H", "1.00800", "HR2", "(+) his HE1", "8"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "9"}, {"H", "1.00800", "HS", "thiol hydrogen", "10"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "11"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "12"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "13"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "14"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "15"}, {"H", "1.00800", "HF1", "Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str)", "16"}, {"H", "1.00800", "HF2", "Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str)", "17"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "20"}, {"C", "12.01100", "CA", "aromatic C", "21"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "22"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "23"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "24"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "25"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "26"}, {"C", "12.01100", "CPT", "trp C between rings", "27"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "28"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "29"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "30"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "31"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "32"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "33"}, {"C", "12.01100", "CPA", "heme alpha-C", "34"}, {"C", "12.01100", "CPB", "heme beta-C", "35"}, {"C", "12.01100", "CPM", "heme meso-C", "36"}, {"C", "12.01100", "CM", "heme CO carbon", "37"}, {"C", "12.01100", "CS", "thiolate carbon", "38"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "39"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "40"}, {"C", "12.01100", "CST", "CO2 carbon ", "41"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens (see toppar_all22_prot_aliphatic_c27.str)", "42"}, {"C", "12.01100", "CT1x", "aliphatic sp3 C for CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"C", "12.01100", "CT2x", "aliphatic sp3 C for CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"C", "12.01100", "CT3x", "aliphatic sp3 C for CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "CN", "C for cyano group (see toppar_all22_prot_pyridines.str)", "46"}, {"C", "12.01100", "CAP", "aromatic C for pyrimidines (see toppar_all22_prot_pyridines.str)", "47"}, {"C", "12.01100", "COA", "carbonyl C for pyrimidines (see toppar_all22_prot_pyridines.str)", "48"}, {"C", "12.01100", "C3", "cyclopropyl carbon", "49"}, {"N", "14.00700", "N", "proline N", "50"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "51"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "52"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "53"}, {"N", "14.00700", "NH1", "peptide nitrogen", "54"}, {"N", "14.00700", "NH2", "amide nitrogen", "55"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "56"}, {"N", "14.00700", "NC2", "guanidinium nitroogen", "57"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "58"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "59"}, {"N", "14.00700", "NPH", "heme pyrrole N", "60"}, {"N", "14.00700", "NC", "N for cyano group (see toppar_all22_prot_pyridines.str)", "61"}, {"O", "15.99900", "O", "carbonyl oxygen", "70"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "71"}, {"O", "15.99900", "OC", "carboxylate oxygen", "72"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "73"}, {"O", "15.99940", "OS", "ester oxygen", "74"}, {"O", "15.99940", "OT", "TIPS3P WATER OXYGEN", "75"}, {"O", "15.99900", "OM", "heme CO/O2 oxygen", "76"}, {"O", "15.99900", "OST", "CO2 oxygen", "77"}, {"O", "15.99900", "OCA", "carbonyl O for pyrimidines (see toppar_all22_prot_pyridines.str)", "78"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}, {"He", "4.00260", "HE", "helium", "85"}, {"Ne", "20.17970", "NE", "neon", "86"}, {"C", "12.01100", "CF1", "monofluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "87"}, {"C", "12.01100", "CF2", "difluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "88"}, {"C", "12.01100", "CF3", "trifluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "89"}, {"Fe", "55.84700", "FE", "heme iron 56", "90"}, {"Cl", "35.45300", "CLAL", "Chlorine Atom (see toppar_all22_prot_aldehydes.str)", "91"}, {"F", "18.99800", "FA", "aromatic flourine (see toppar_all22_prot_pyridines.str)", "92"}, {"F", "18.99800", "F1", "Fluorine, monofluoro (see toppar_all22_prot_fluoro_alkanes.str)", "93"}, {"F", "18.99800", "F2", "Fluorine, difluoro (see toppar_all22_prot_fluoro_alkanes.str)", "94"}, {"F", "18.99800", "F3", "Fluorine, trifluoro (see toppar_all22_prot_fluoro_alkanes.str)", "95"}, {"D", "0.00000", "DUM", "dummy atom", "99"}, {"Na", "22.989770", "SOD", "Sodium Ion", "100"}, {"Mg", "24.305000", "MG", "Magnesium Ion", "101"}, {"P", "39.102000", "POT", "Potassium Ion! check masses", "102"}, {"Cs", "132.900000", "CES", "Cesium Ion", "103"}, {"Ca", "40.080000", "CAL", "Calcium Ion", "104"}, {"Cl", "35.450000", "CLA", "Chloride Ion", "105"}, {"Zn", "65.370000", "ZN", "zinc (II) cation", "106"}, {"Ag", "107.868200", "AG", "Silver metal (HH et al. 2008) ", "107"}, {"Al", "26.981539", "AL", "Aluminium metal (HH et al. 2008)", "108"}, {"Au", "196.966500", "AU", "Gold metal (HH et al. 2008)", "109"}, {"Cu", "63.546000", "CU", "Copper metal (HH et al. 2008)", "110"}, {"Ni", "58.693400", "NI", "Nickel metal (HH et al. 2008)", "111"}, {"Pb", "207.200000", "PB", "Lead metal (HH et al. 2008)", "112"}, {"Pd", "106.420000", "PD", "Palladium metal (HH et al. 2008)", "113"}, {"Pt", "195.084000", "PT", "Platinum metal (HH et al. 2008)", "114"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm22_prot_metals info V(R) = Kb x (R - R0)^2 */ char * charmm22_prot_metals_bonds[139][5]= {{"CST", "OST", "937.96", "1.1600", "to Sulfate (PSUL) link"}, {"SS", "FE", "250.0", "2.3200", "bond length optimized to reproduce "}, {"C", "C", "600.000", "1.3350", "Heme vinyl substituent (KK, from propene (JCS))"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPB", "CE1", "450.000", "1.3800", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPA", "299.800", "1.4432", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "CPB", "340.700", "1.3464", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CPM", "CPA", "360.000", "1.3716", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPT", "CA", "305.000", "1.3680", "adm jr., 12/30/91, for jwk"}, {"CPT", "CPT", "360.000", "1.4000", "jr., 12/30/91, for jwk"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPB", "230.000", "1.4900", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPB", "230.000", "1.4900", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CY", "CA", "350.000", "1.3650", "jr., 5/08/91, indole CCDB structure search"}, {"CY", "CPT", "350.000", "1.4400", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "230.000", "1.5100", "Kb from alkane freq.. b0 from TRP crystal"}, {"FE", "CM", "258.000", "1.9000", "Heme (6-liganded): CO ligand (KK 05/13/91)"}, {"FE", "CPM", "0.000", "3.3814", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CA", "340.000", "1.0830", "trp, adm jr., 10/02/89"}, {"HA", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CPM", "367.600", "1.0900", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HA", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "330.000", "1.0800", "JWK 05/14/91 new r0 from indole"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HP", "CY", "350.000", "1.0800", "jr., 12/30/91, for jwk"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HT", "HT", "0.000", "1.5139", "FROM TIPS3P GEOMETRY (FOR SHAKE/W PARAM)"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "463.000", "1.3650", "403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"NC2", "CT2", "261.000", "1.4900", "arg, (DS)"}, {"NC2", "CT3", "261.000", "1.4900", "methylguanidinium, adm jr., 3/26/92"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NPH", "CPA", "377.200", "1.3757", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "FE", "270.200", "1.9580", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR2", "FE", "65.000", "2.2000", "Heme (6-liganded): His ligand (KK 05/13/91)"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "270.000", "1.3700", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "270.000", "1.3750", "jr., 12/30/91, for jwk"}, {"NY", "H", "465.000", "0.9760", "indole JWK 08/28/89"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OM", "CM", "1115.000", "1.1280", "Heme (6-liganded): CO ligand (KK 05/13/91)"}, {"OM", "FE", "250.000", "1.8000", "Heme (6-liganded): O2 ligand (KK 05/13/91)"}, {"OM", "OM", "600.000", "1.2300", "Heme (6-liganded): O2 ligand (KK 05/13/91)"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OT", "HT", "450.000", "0.9572", "FROM TIPS3P GEOM"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm22_prot_metals info V(S) = Kub x (S - S0)^2 */ char * charmm22_prot_metals_angles[345][8]= {{"OST", "CST", "OST", "3000.00", "180.0000", " ", " ", "to Sulfate (PSUL) link"}, {"CS", "SS", "FE", "50.0", "100.6", " ", " ", "angle optimized to reproduce"}, {"SS", "FE", "NPH", "100.0", "90.0", " ", " ", "jr., 7/01"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPA", "CPB", "CE1", "70.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPA", "CPM", "CPA", "94.200", "125.1200", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPA", "NPH", "CPA", "139.300", "103.9000", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "CE1", "CE2", "70.000", "121.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPB", "CE1", "70.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPB", "CPA", "30.800", "106.5100", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CPM", "CPA", "CPB", "61.600", "124.0700", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPT", "CA", "CA", "60.000", "118.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CPT", "CA", "60.000", "122.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CY", "CA", "120.000", "107.40", "25.00", "2.26100", "jr., 12/30/91, for jwk"}, {"CPT", "NY", "CA", "110.000", "108.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPB", "CPA", "65.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPB", "CPB", "65.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT2", "CPB", "70.000", "113.0000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CY", "CA", "45.800", "129.4000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "CY", "CPT", "45.800", "124.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPB", "CPA", "65.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPB", "CPB", "65.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"CY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "CT1", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"FE", "NPH", "CPA", "96.150", "128.0500", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"FE", "NR2", "CPH1", "30.000", "133.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"FE", "NR2", "CPH2", "30.000", "123.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "NY", "CA", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA", "CA", "CA", "29.000", "120.00", "25.00", "2.15250", "trp, adm jr., 10/02/89"}, {"HA", "CA", "CPT", "41.000", "122.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"HA", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CPM", "CPA", "12.700", "117.4400", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HA", "CPM", "FE", "0.000", "180.0000", " ", " ", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"HA", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CS", "HA", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "HA", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA", "CT2", "CPB", "50.000", "109.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT2", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CY", "33.430", "109.5000", " ", " ", "ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA"}, {"HA", "CT2", "HA", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA", "CT3", "CPB", "50.000", "109.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "HA", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "CA", "20.000", "126.40", "25.00", "2.18600", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CPB", "50.000", "120.0000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT2", "HB", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "jr., 12/30/91, for jwk"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HT", "OT", "HT", "55.000", "104.5200", " ", " ", "TIP3P GEOMETRY, ADM JR."}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "52.000", "120.00", "90.00", "2.36420", "changed from 60.0/120.3 for guanidinium (KK)"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA", "51.500", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT3", "HA", "51.500", "107.5000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HA", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT2", "HB", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT3", "HA", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NPH", "CPA", "CPB", "122.000", "111.5400", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPM", "88.000", "124.3900", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "FE", "CM", "50.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NPH", "FE", "CPM", "0.000", "45.0000", " ", " ", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"NPH", "FE", "NPH", "14.390", "90.0000", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR2", "FE", "CM", "50.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NR2", "FE", "NPH", "50.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NY", "CA", "CY", "120.000", "110.00", "25.00", "2.24000", "jr., 12/30/91, for jwk"}, {"NY", "CA", "HA", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OM", "CM", "FE", "35.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OM", "FE", "NPH", "5.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OM", "OM", "FE", "0.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm22_prot_metals info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm22_prot_metals_dihedrals[452][8]= {{"X", "FE", "SS", "X", "0.0000", "4", "0.00", "jr., 7/01"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CA", "CPT", "CPT", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "CT2", "CT1", "C", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CE1", "CE1", "CT3", "HA", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "NY", "CA", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", " "}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CT2", "CT3", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CY", "CA", "NY", "CPT", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NY", "CA", "CY", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CA", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CPT", "0.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT1", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA", "CA", "CA", "CA", "3.5000", "2", "180.00", "adm jr., 10/02/89"}, {"HA", "CA", "CA", "CPT", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CA", "HA", "2.5000", "2", "180.00", "ADM JR., 10/02/89"}, {"HA", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "TRP (JES)"}, {"HA", "CA", "CPT", "CY", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CY", "CPT", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "NY", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "NY", "H", "1.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT2", "CY", "CA", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT3", "CS", "HA", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CY", "CA", "CPT", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CA", "HA", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "CPB", "5.2000", "2", "180.00", "for vinyl, from butene, yin/adm jr., 12/95"}, {"HB", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HB", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "NY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT1", "0.2400", "1", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.1500", "2", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.2700", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "0.4000", "1", "0.00", "adm jr. 3/24/92, for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CT2", "3.5000", "2", "180.00", "JWK"}, {"NY", "CA", "CY", "HA", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CA", "HA", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CY", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CPA", "CPB", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPA", "CPM", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPB", "CE1", "X", "3.0000", "2", "180.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPB", "CPB", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPB", "CT2", "X", "0.0000", "6", "0.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPB", "CT3", "X", "0.0000", "6", "0.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPT", "CPT", "X", "0.0000", "2", "180.00", "JWK indole 05/14/91"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1950", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "rotation barrier in Ethane (SF)"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1550", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "FE", "CM", "X", "0.0500", "4", "0.00", "Heme (6-liganded): ligands (KK 05/13/91)"}, {"X", "FE", "NPH", "X", "0.0000", "2", "0.00", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"X", "FE", "NR2", "X", "0.0500", "4", "0.00", "Heme (6-liganded): from param19.inp"}, {"X", "FE", "OM", "X", "0.0000", "4", "0.00", "Heme (6-liganded): ligands (KK 05/13/91)"}, {"X", "NPH", "CPA", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm22_prot_metals info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm22_prot_metals_impropers[43][8]= {{"CPB", "CPA", "NPH", "CPA", "20.8000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "X", "X", "CE1", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "X", "X", "CPB", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "X", "X", "CPB", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CPA", "CPA", "CPM", "29.4000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "40.0000", "0", "0.0000", "5.75->40.0 GUANIDINIUM (KK)"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NPH", "CPA", "CPA", "FE", "137.4000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPB", "CPB", "40.6000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPM", "CPA", "18.3000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPM", "CPB", "CPA", "32.7000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "100.0000", "0", "0.0000", "jr., 5/15/91, indole 3-21G HE1 out-of-plane surf."}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm22_prot_metals info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm22_prot_metals_vdw[98][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CM", "-0.110000", "2.100000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPA", "-0.090000", "1.800000", " ", " ", " "}, {"CPB", "-0.090000", "1.800000", " ", " ", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CPM", "-0.090000", "1.800000", " ", " ", " "}, {"CPT", "-0.090000", "1.800000", "-0.090000", "1.900000", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CST", "-0.058000", "1.563000", " ", " ", " "}, {"CT1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CT2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CT3", "-0.080000", "2.060000", "-0.010000", "1.900000", " "}, {"CY", "-0.070000", "1.992400", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1x", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT2x", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3x", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HB", "-0.022000", "1.320000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HT", "-0.046000", "0.224500", " ", " ", " "}, {"HA1", "-0.022", "1.3200", " ", " ", " "}, {"HA2", "-0.028", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NPH", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OM", "-0.120000", "1.700000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"OST", "-0.165000", "1.692000", " ", " ", " "}, {"OT", "-0.152100", "1.768200", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}, {"SOD", "-0.0469", "1.36375", " ", " ", " "}, {"POT", "-0.0870", "1.76375", " ", " ", " "}, {"CLA", "-0.150", "2.27", " ", " ", " "}, {"CAL", "-0.120", "1.367", " ", " ", " "}, {"MG", "-0.0150", "1.18500", " ", " ", " "}, {"CES", "-0.1900", "2.100", " ", " ", " "}, {"ZN", "-0.250000", "1.090000", " ", " ", " "}, {"FE", "0.000000", "0.650000", " ", " ", " "}, {"HE", "-0.021270", "1.4800", " ", " ", " "}, {"NE", "-0.086000", "1.5300", " ", " ", " "}, {"CLAL", "-0.030000", "1.908200", " ", " ", " "}, {"DUM", "-0.000000", "0.000000", " ", " ", " "}, {"AG", "-4.56", "1.4775", " ", " ", " "}, {"AL", "-4.02", "1.4625", " ", " ", " "}, {"AU", "-5.29", "1.4755", " ", " ", " "}, {"CU", "-4.72", "1.3080", " ", " ", " "}, {"NI", "-5.65", "1.2760", " ", " ", " "}, {"PB", "-2.93", "1.7825", " ", " ", " "}, {"PD", "-6.15", "1.4095", " ", " ", " "}, {"PT", "-7.80", "1.4225", " ", " ", " "}, {"CAP", "-0.070000", "1.992400", " ", " ", " "}, {"FA", "-0.12000", "1.700000", " ", " ", " "}, {"CN", "-0.200000", "1.750000", " ", " ", " "}, {"NC", "-0.600000", "1.850000", " ", " ", " "}, {"OCA", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"COA", "-0.110000", "2.000000", " ", " ", " "}, {"CF1", "-0.060000", "1.900000", " ", " ", " "}, {"CF2", "-0.042000", "2.050000", " ", " ", " "}, {"CF3", "-0.020000", "2.300000", " ", " ", " "}, {"HF1", "-0.028000", "1.3200", " ", " ", " "}, {"HF2", "-0.030000", "1.3000", " ", " ", " "}, {"F1", "-0.135", "1.63", " ", " ", " "}, {"F2", "-0.105", "1.63", " ", " ", " "}, {"F3", "-0.097", "1.60", " ", " ", " "}, {"C3", "-0.020000", "2.275000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/charmm36_na.c0000664000175000017500000025554315212624223021102 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_na.c * @short CHARMM-charmm36_na force field, from 'charmm36_na' * @author Sébastien Le Roux */ /* * This file: 'charmm36_na.c' * * Contains: * CHARMM-charmm36_na force field, data from taken from: - the file: 'charmm36_na' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_na_atoms[42][5] Bonds : charmm36_na_bonds[89][5] Angles : charmm36_na_angles[226][8] Dihedrals : charmm36_na_dihedrals[502][8] Impropers : charmm36_na_impropers[15][8] Non bonded : charmm36_na_vdw[42][6] */ #include "global.h" int charmm36_na_objects[14] = {42, 0, 0, 89, 0, 0, 226, 0, 502, 0 , 0, 15, 42, 0}; int charmm36_na_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_na info */ char * charmm36_na_atoms[42][5]= {{"H", "1.008000", "HN1", "Nucleic acid amine proton", "91"}, {"H", "1.008000", "HN2", "Nucleic acid ring nitrogen proton", "92"}, {"H", "1.008000", "HN3", "Nucleic acid aromatic carbon proton", "93"}, {"H", "1.008000", "HN4", "Nucleic acid phosphate hydroxyl proton", "94"}, {"H", "1.008000", "HN5", "Nucleic acid ribose hydroxyl proton", "95"}, {"H", "1.008000", "HN6", "Nucleic acid ribose aliphatic proton", "96"}, {"H", "1.008000", "HN7", "Nucleic acid proton (equivalent to protein HA)", "97"}, {"H", "1.008000", "HN8", "Bound to CN8 in nucleic acids/model compounds", "98"}, {"H", "1.008000", "HN9", "Bound to CN9 in nucleic acids/model compounds", "99"}, {"C", "12.011000", "CN1", "Nucleic acid carbonyl carbon", "100"}, {"C", "12.011000", "CN1T", "Nucleic acid carbonyl carbon (T/U C2)", "101"}, {"C", "12.011000", "CN2", "Nucleic acid aromatic carbon to amide", "102"}, {"C", "12.011000", "CN3", "Nucleic acid aromatic carbon", "103"}, {"C", "12.011000", "CN3T", "Nucleic acid aromatic carbon, Thy C5", "104"}, {"C", "12.011000", "CN4", "Nucleic acid purine C8 and ADE C2", "105"}, {"C", "12.011000", "CN5", "Nucleic acid purine C4 and C5", "106"}, {"C", "12.011000", "CN5G", "Nucleic acid guanine C5", "107"}, {"C", "12.011000", "CN7", "Nucleic acid carbon (equivalent to protein CT1)", "108"}, {"C", "12.011000", "CN7B", "Nucleic acid aliphatic carbon for C1'", "109"}, {"C", "12.011000", "CN8", "Nucleic acid carbon (equivalent to protein CT2)", "110"}, {"C", "12.011000", "CN8B", "Nucleic acid carbon (equivalent to protein CT2)", "111"}, {"C", "12.011000", "CN9", "Nucleic acid carbon (equivalent to protein CT3)", "112"}, {"N", "14.007000", "NN1", "Nucleic acid amide nitrogen", "113"}, {"N", "14.007000", "NN2", "Nucleic acid protonated ring nitrogen", "114"}, {"N", "14.007000", "NN2B", "From NN2, for N9 in GUA different from ADE", "115"}, {"N", "14.007000", "NN2U", "Nucleic acid protonated ring nitrogen, ura N3", "116"}, {"N", "14.007000", "NN2G", "Nucleic acid protonated ring nitrogen, gua N1", "117"}, {"N", "14.007000", "NN3", "Nucleic acid unprotonated ring nitrogen", "118"}, {"N", "14.007000", "NN3A", "Nucleic acid unprotonated ring nitrogen, ade N1 and N3", "119"}, {"N", "14.007000", "NN3G", "Nucleic acid unprotonated ring nitrogen, gua N3", "120"}, {"N", "14.007000", "NN4", "Nucleic acid purine N7", "121"}, {"N", "14.007000", "NN6", "Nucleic acid sp3 amine nitrogen (equiv to protein nh3)", "122"}, {"O", "15.999400", "ON1", "Nucleic acid carbonyl oxygen", "123"}, {"O", "15.999400", "ON1C", "Nucleic acid carbonyl oxygen, cyt O2", "124"}, {"O", "15.999400", "ON2", "Nucleic acid phosphate ester oxygen", "125"}, {"O", "15.999400", "ON3", "Nucleic acid =O in phosphate", "126"}, {"O", "15.999400", "ON4", "Nucleic acid phosphate hydroxyl oxygen", "127"}, {"O", "15.999400", "ON5", "Nucleic acid ribose hydroxyl oxygen", "128"}, {"O", "15.999400", "ON6", "Nucleic acid deoxyribose ring oxygen", "129"}, {"O", "15.999400", "ON6B", "Nucleic acid ribose ring oxygen", "130"}, {"P", "30.974000", "P", "phosphorus", "131"}, {"P", "30.974000", "P2", "phosphorus, adm, 2011 DNA update", "132"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_na info V(R) = Kb x (R - R0)^2 */ char * charmm36_na_bonds[89][5]= {{"CN8", "NN6", "200.000", "1.480", "methylammonium"}, {"NN6", "HN1", "403.000", "1.040", "methylammonium"}, {"ON6", "CN8B", "260.0", "1.420", "susil"}, {"CN8", "CN8B", "222.50", "1.528", "Alkanes, sacred"}, {"CN1", "CN3", "302.0", "1.409", "adm jr. 11/97"}, {"CN1", "CN3T", "302.0", "1.403", "adm jr. 11/97"}, {"CN1", "CN5G", "302.0", "1.360", "adm jr. 11/97"}, {"CN1", "NN2", "380.0", "1.367", "adm jr. 11/97"}, {"CN1T", "NN2B", "302.0", "1.348", "adm jr. 11/97"}, {"CN1", "NN2G", "340.0", "1.396", "adm jr. 11/97"}, {"CN1", "NN2U", "340.0", "1.389", "adm jr. 11/97"}, {"CN1T", "NN2U", "340.0", "1.383", "adm jr. 11/97"}, {"CN1", "NN3", "350.0", "1.335", "adm jr. 11/97"}, {"CN1T", "ON1", "860.0", "1.230", "jjp1/adm jr. 7/95"}, {"CN1", "ON1", "660.0", "1.234", "par_a4 adm jr. 10/2/91"}, {"CN1", "ON1C", "620.0", "1.245", "adm jr. 10/2/91"}, {"CN2", "CN3", "320.0", "1.406", "adm jr. 11/97"}, {"CN2", "CN5", "360.0", "1.358", "adm jr. 11/97"}, {"CN2", "NN1", "360.0", "1.366", "JWK, adm jr. 10/2/91"}, {"CN2", "NN2G", "400.0", "1.392", " "}, {"CN2", "NN3", "450.0", "1.343", " "}, {"CN2", "NN3A", "400.0", "1.342", "adm jr. 11/97"}, {"CN2", "NN3G", "320.0", "1.326", "adm jr. 11/97"}, {"CN3", "CN3", "500.0", "1.326", "adm jr. 11/97"}, {"CN3", "CN3T", "560.0", "1.320", "adm jr. 11/97"}, {"CN3T", "CN9", "230.0", "1.478", "adm jr. 11/97"}, {"CN3", "HN3", "350.0", "1.09", "JWK"}, {"CN3T", "HN3", "350.0", "1.09", "JWK"}, {"CN3", "NN2", "302.0", "1.343", "adm jr. 11/97"}, {"CN3", "NN2B", "320.0", "1.343", "adm jr. 11/97"}, {"CN4", "HN3", "380.0", "1.09", "JWK par_a7 9/30/91"}, {"CN4", "NN2", "320.0", "1.374", "adm jr. 11/97"}, {"CN4", "NN2B", "300.0", "1.378", "adm jr. 11/97"}, {"CN4", "NN3A", "420.0", "1.322", "adm jr. 11/97"}, {"CN4", "NN4", "400.0", "1.305", "adm jr. 11/97"}, {"CN5", "CN5", "310.0", "1.361", "adm jr. 11/97"}, {"CN5", "CN5G", "320.0", "1.350", "adm jr. 11/97"}, {"CN5", "NN2", "300.0", "1.375", "adm jr. 11/97"}, {"CN5", "NN2B", "302.0", "1.375", "adm jr. 11/97"}, {"CN5", "NN3A", "350.0", "1.312", "JWK par_a8 9/30/91"}, {"CN5", "NN3G", "350.0", "1.315", "adm jr. 11/97"}, {"CN5", "NN4", "310.0", "1.355", "adm jr. 11/97"}, {"CN5G", "NN4", "310.0", "1.365", "adm jr. 11/97"}, {"CN8", "CN8", "222.50", "1.528", "sacred"}, {"CN8", "CN9", "222.50", "1.528", "sacred"}, {"CN8", "NN2", "400.0", "1.460", "ADM JR."}, {"CN8", "ON5", "428.0", "1.42", "MeOH"}, {"CN9", "HN9", "322.0", "1.111", " "}, {"CN9", "ON2", "340.0", "1.43", "ADM Jr."}, {"HN1", "NN1", "488.0", "1.00", "JWK, adm jr. 7/24/91"}, {"HN2", "NN2", "474.0", "1.01", "JWK"}, {"HN2", "NN2B", "474.0", "1.01", "adm jr. 11/97"}, {"HN2", "NN2G", "471.0", "1.01", "JWK, par_a12 9/30/91"}, {"HN2", "NN2U", "474.0", "1.01", "JWK, adm jr. 7/24/91"}, {"HN4", "ON4", "545.0", "0.960", "ADM Jr."}, {"ON2", "P", "270.0", "1.60", "ADM Jr."}, {"ON2", "P2", "270.0", "1.60", "ADM Jr., adm, 2011 DNA update"}, {"ON3", "P", "580.0", "1.48", "ADM Jr."}, {"ON3", "P2", "580.0", "1.48", "ADM Jr., adm, 2011 DNA update"}, {"ON4", "P", "237.0", "1.58", "ADM Jr."}, {"ON4", "P2", "237.0", "1.58", "ADM Jr., adm, 2011 DNA update"}, {"CN7B", "ON6", "260.0", "1.420", "From exp"}, {"CN7B", "CN8", "200.0", "1.518", "From exp"}, {"CN7", "ON6", "240.0", "1.446", "Fom exp."}, {"CN7", "CN7", "222.5", "1.529", "From exp"}, {"CN7", "CN8", "222.5", "1.516", "From exp."}, {"CN7", "CN9", "222.5", "1.516", "for 5MET, From alkanes"}, {"CN7", "HN7", "309.0", "1.111", "sacred"}, {"CN8", "HN8", "309.0", "1.111", "sacred"}, {"CN7B", "HN7", "309.0", "1.111", "From CN8 HN7 (NF)"}, {"CN7B", "ON6B", "260.0", "1.420", "From CN7B ON6"}, {"CN7", "ON6B", "240.0", "1.480", "From CN7 ON6"}, {"CN7B", "CN7B", "200.0", "1.450", " "}, {"CN7", "CN7B", "222.5", "1.460", "Specific to RNA"}, {"CN7", "CN8B", "222.5", "1.512", "From exp."}, {"CN8B", "ON2", "320.0", "1.44", "From exp"}, {"CN8B", "ON5", "428.0", "1.42", "CN8 ON2, adm jr., 8/30/98"}, {"CN7", "ON2", "310.0", "1.433", "From exp"}, {"CN7B", "ON2", "310.0", "1.433", "From exp, for NADPH and bkbmod"}, {"CN7", "ON5", "428.0", "1.42", "CN8 ON2, adm jr., 8/30/98"}, {"CN9", "NN2", "400.0", "1.456", "adm jr."}, {"CN8", "NN2B", "400.0", "1.458", "adm jr."}, {"CN9", "NN2B", "400.0", "1.458", "adm jr."}, {"CN7B", "NN2", "220.0", "1.456", " "}, {"CN7B", "NN2B", "220.0", "1.458", " "}, {"CN8B", "HN8", "309.0", "1.111", "sacred"}, {"ON5", "HN5", "545.0", "0.960", "MeOH"}, {"CN7B", "ON5", "428.0", "1.400", "check adm jr.,"}, {"CN8", "ON2", "340.0", "1.44", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_na info V(S) = Kub x (S - S0)^2 */ char * charmm36_na_angles[226][8]= {{"CN7", "CN8", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"CN8", "CN7", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"CN8", "CN8", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"HN1", "NN6", "CN8", "30.00", "109.50", "20.00", "2.074", " "}, {"NN6", "CN8", "HN8", "45.00", "107.50", "35.00", "2.101", " "}, {"CN7", "CN8", "ON2", "115.00", "109.70", " ", " ", "exocyclic angles"}, {"NN6", "CN8", "CN8", "67.70", "110.00", " ", " ", " "}, {"HN1", "NN6", "HN1", "44.00", "109.50", " ", " ", " "}, {"ON2", "CN8", "CN8", "115.0", "109.7", " ", " ", "exocyclic angles"}, {"CN7", "ON6", "CN8B", "110.0", "109.0", " ", " ", " "}, {"ON6", "CN8B", "CN8", "90.0", "106.0", " ", " ", " "}, {"CN8B", "CN8", "CN7", "80.0", "106.0", " ", " ", " "}, {"ON6", "CN8B", "HN8", "45.2", "107.24", " ", " ", " "}, {"HN8", "CN8B", "CN8", "34.53", "110.10", "22.53", "2.179", "alkane"}, {"HN8", "CN8", "CN8B", "34.53", "110.10", "22.53", "2.179", "alkane"}, {"CN2", "NN3A", "CN4", "90.0", "117.8", " ", " ", "adm jr. 11/97"}, {"NN3A", "CN4", "NN3A", "60.0", "133.0", " ", " ", " "}, {"CN4", "NN3A", "CN5", "90.0", "110.1", " ", " ", " "}, {"CN5", "CN5", "NN3A", "60.0", "127.4", " ", " ", "bridgeC4"}, {"CN2", "CN5", "CN5", "60.0", "121.0", " ", " ", "bridgeC5"}, {"CN5", "CN2", "NN3A", "60.0", "110.7", " ", " ", " "}, {"CN5", "CN5", "NN2", "100.0", "105.7", " ", " ", "bridgeC4"}, {"CN5", "CN5", "NN4", "100.0", "110.0", " ", " ", "bridgeC5"}, {"CN4", "NN4", "CN5", "120.0", "104.6", " ", " ", " "}, {"NN2", "CN4", "NN4", "100.0", "113.4", " ", " ", " "}, {"CN4", "NN2", "CN5", "100.0", "106.3", " ", " ", " "}, {"NN2", "CN5", "NN3A", "100.0", "126.9", " ", " ", " "}, {"CN2", "CN5", "NN4", "100.0", "129.0", " ", " ", " "}, {"HN3", "CN4", "NN3A", "38.0", "113.5", " ", " ", " "}, {"NN3A", "CN2", "NN1", "50.0", "130.7", " ", " ", " "}, {"CN5", "CN2", "NN1", "50.0", "118.6", " ", " ", " "}, {"CN2", "NN1", "HN1", "40.0", "121.5", " ", " ", "C,A,G"}, {"HN1", "NN1", "HN1", "31.0", "117.0", " ", " ", " "}, {"NN4", "CN4", "HN3", "39.0", "124.8", " ", " ", "G,A"}, {"NN2", "CN4", "HN3", "39.0", "121.8", " ", " ", " "}, {"CN5", "NN2", "HN2", "30.0", "129.4", " ", " ", " "}, {"CN4", "NN2", "HN2", "30.0", "125.0", " ", " ", " "}, {"CN1", "NN2G", "CN2", "70.0", "131.1", " ", " ", "adm jr. 11/97"}, {"NN2G", "CN2", "NN3G", "70.0", "122.2", " ", " ", " "}, {"CN2", "NN3G", "CN5", "90.0", "109.4", " ", " ", " "}, {"CN5G", "CN5", "NN3G", "70.0", "129.9", " ", " ", "bridgeC4"}, {"CN1", "CN5G", "CN5", "70.0", "119.6", " ", " ", "bridgeC5"}, {"CN5G", "CN1", "NN2G", "70.0", "107.8", " ", " ", " "}, {"CN5G", "CN5", "NN2B", "100.0", "104.6", " ", " ", "bridgeC4"}, {"CN5", "CN5G", "NN4", "100.0", "111.4", " ", " ", "bridgeC5"}, {"CN4", "NN4", "CN5G", "120.0", "103.8", " ", " ", " "}, {"NN2B", "CN4", "NN4", "100.0", "113.0", " ", " ", " "}, {"CN4", "NN2B", "CN5", "100.0", "107.2", " ", " ", " "}, {"NN2B", "CN5", "NN3G", "140.0", "125.5", " ", " ", "bridgeC4"}, {"CN1", "CN5G", "NN4", "125.0", "129.0", " ", " ", "bridgeC5"}, {"CN1", "NN2G", "HN2", "45.0", "113.3", " ", " ", "h1"}, {"CN2", "NN2G", "HN2", "45.0", "115.6", " ", " ", " "}, {"NN1", "CN2", "NN2G", "95.0", "115.4", " ", " ", "n2"}, {"NN1", "CN2", "NN3G", "95.0", "122.4", " ", " ", " "}, {"NN2G", "CN1", "ON1", "50.0", "127.5", " ", " ", "o6"}, {"CN5G", "CN1", "ON1", "50.0", "124.7", " ", " ", " "}, {"HN3", "CN4", "NN2B", "40.0", "122.2", " ", " ", "h8 (NN4 CN4 HN3 124.8)"}, {"CN4", "NN2B", "HN2", "30.0", "124.6", " ", " ", "h9"}, {"CN5", "NN2B", "HN2", "30.0", "129.3", " ", " ", " "}, {"CN1", "NN2", "CN3", "50.0", "124.1", " ", " ", "adm jr. 11/97"}, {"NN2", "CN1", "NN3", "50.0", "116.8", " ", " ", " "}, {"CN1", "NN3", "CN2", "85.0", "119.1", " ", " ", " "}, {"CN3", "CN2", "NN3", "85.0", "119.3", " ", " ", " "}, {"CN2", "CN3", "CN3", "85.0", "117.8", " ", " ", " "}, {"CN3", "CN3", "NN2", "85.0", "122.9", " ", " ", " "}, {"CN1", "NN2", "HN2", "37.0", "121.2", " ", " ", "h1"}, {"CN3", "NN2", "HN2", "37.0", "114.7", " ", " ", " "}, {"NN2", "CN1", "ON1C", "130.0", "119.4", " ", " ", "o2"}, {"NN3", "CN1", "ON1C", "130.0", "123.8", " ", " ", " "}, {"NN3", "CN2", "NN1", "81.0", "122.3", " ", " ", "n4"}, {"CN3", "CN2", "NN1", "81.0", "118.4", " ", " ", " "}, {"CN2", "CN3", "HN3", "38.0", "120.1", " ", " ", "h5"}, {"CN3", "CN3", "HN3", "38.0", "122.1", " ", " ", " "}, {"HN3", "CN3", "NN2", "44.0", "115.0", " ", " ", "h6"}, {"CN1T", "NN2B", "CN3", "70.0", "122.0", " ", " ", "adm jr. 11/97"}, {"NN2B", "CN1T", "NN2U", "50.0", "114.0", " ", " ", " "}, {"CN1T", "NN2U", "CN1", "50.0", "130.2", " ", " ", " "}, {"NN2U", "CN1", "CN3", "70.0", "112.6", " ", " ", " "}, {"CN1", "CN3", "CN3", "100.0", "117.6", " ", " ", " "}, {"CN3", "CN3", "NN2B", "100.0", "123.6", " ", " ", " "}, {"CN1T", "NN2B", "HN2", "40.5", "122.0", " ", " ", "h1"}, {"CN3", "NN2B", "HN2", "32.0", "116.0", " ", " ", " "}, {"NN2B", "CN1T", "ON1", "100.0", "121.6", " ", " ", "o2"}, {"NN2U", "CN1T", "ON1", "100.0", "124.4", " ", " ", " "}, {"CN1T", "NN2U", "HN2", "40.5", "114.4", " ", " ", "h3"}, {"CN1", "NN2U", "HN2", "40.5", "115.4", " ", " ", " "}, {"NN2U", "CN1", "ON1", "100.0", "121.9", " ", " ", "o4"}, {"CN3", "CN1", "ON1", "100.0", "125.5", " ", " ", " "}, {"CN1", "CN3", "HN3", "30.0", "120.3", " ", " ", "h5"}, {"HN3", "CN3", "NN2B", "30.0", "114.3", " ", " ", "h6"}, {"CN3T", "CN1", "NN2U", "70.0", "113.5", " ", " ", "adm jr. 11/97"}, {"CN1", "CN3T", "CN3", "120.0", "116.7", " ", " ", " "}, {"CN3T", "CN3", "NN2B", "120.0", "123.6", " ", " ", "!T"}, {"CN3T", "CN1", "ON1", "100.0", "124.6", " ", " ", "o4"}, {"CN1", "CN3T", "CN9", "38.0", "118.7", " ", " ", "c5 methyl"}, {"CN3", "CN3T", "CN9", "38.0", "124.6", " ", " ", " "}, {"CN3T", "CN3", "HN3", "30.0", "122.1", " ", " ", "h6"}, {"CN1T", "NN2B", "CN9", "70.0", "116.0", " ", " ", "adm jr."}, {"CN3", "NN2B", "CN9", "70.0", "122.0", " ", " ", "adm jr. 7/24/91"}, {"CN1", "NN2", "CN9", "70.0", "115.4", " ", " ", "adm jr."}, {"CN3", "NN2", "CN9", "70.0", "120.5", " ", " ", "adm jr. 7/24/91"}, {"CN5", "NN2", "CN9", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2", "CN9", "70.0", "127.8", " ", " ", "adm jr."}, {"CN5", "NN2B", "CN9", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2B", "CN9", "70.0", "126.9", " ", " ", "adm jr."}, {"CN5", "NN2B", "CN8", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2B", "CN8", "70.0", "126.9", " ", " ", "adm jr."}, {"NN2B", "CN8", "CN9", "70.0", "113.7", " ", " ", "adm jr."}, {"CN1T", "NN2B", "CN7B", "45.0", "118.4", " ", " ", "FC from A"}, {"CN3", "NN2B", "CN7B", "45.0", "119.6", " ", " ", " "}, {"CN1", "NN2", "CN7B", "45.0", "120.0", " ", " ", "FC from A"}, {"CN3", "NN2", "CN7B", "45.0", "115.9", " ", " ", " "}, {"CN5", "NN2", "CN7B", "45.0", "126.1", " ", " ", " "}, {"CN4", "NN2", "CN7B", "45.0", "127.6", " ", " ", " "}, {"CN5", "NN2B", "CN7B", "45.0", "126.5", " ", " ", " "}, {"CN4", "NN2B", "CN7B", "45.0", "126.3", " ", " ", " "}, {"ON6", "CN7B", "NN2", "110.0", "108.0", " ", " ", "DNA"}, {"ON6B", "CN7B", "NN2", "110.0", "112.0", " ", " ", "RNA"}, {"CN8", "CN7B", "NN2", "110.0", "113.7", " ", " ", " "}, {"CN7B", "CN7B", "NN2", "110.0", "111.0", " ", " ", "RNA"}, {"ON6", "CN7B", "NN2B", "110.0", "108.0", " ", " ", "(DNA) FC from A"}, {"ON6B", "CN7B", "NN2B", "110.0", "112.0", " ", " ", "(RNA) FC from A"}, {"CN8", "CN7B", "NN2B", "110.0", "113.7", " ", " ", " "}, {"CN7B", "CN7B", "NN2B", "110.0", "111.0", " ", " ", "RNA"}, {"HN7", "CN7B", "NN2", "43.0", "111.0", " ", " ", " "}, {"HN7", "CN7B", "NN2B", "43.0", "111.0", " ", " ", "HN7 CN7B NN2"}, {"CN9", "CN8", "HN8", "34.6", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN9", "CN7", "HN7", "34.6", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"HN8", "CN8", "NN2", "33.43", "110.1", " ", " ", "9-M-ADE(THY), ADM"}, {"HN8", "CN8", "ON5", "45.9", "108.89", " ", " ", "Adm Jr. MeOH"}, {"CN3", "CN9", "HN9", "33.43", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN3T", "CN9", "HN9", "33.43", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN8", "CN9", "HN9", "34.60", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"HN9", "CN9", "CN7", "33.43", "110.1", "22.53", "2.179", "Alkanes, sacred"}, {"HN9", "CN9", "NN2", "33.43", "110.1", " ", " ", "9-M-A(T), adm jr."}, {"HN9", "CN9", "NN2B", "33.43", "110.1", " ", " ", "9-M-G(C), adm jr."}, {"HN8", "CN8", "NN2B", "33.43", "110.1", " ", " ", "9-E-G, adm jr."}, {"HN9", "CN9", "ON2", "60.0", "109.5", " ", " ", "ADM Jr."}, {"CN9", "ON2", "P", "20.0", "120.0", "35.", "2.33", "ADM Jr."}, {"HN4", "ON4", "P", "30.0", "115.0", "40.0", "2.35", "ADM Jr."}, {"HN4", "ON4", "P2", "30.0", "115.0", "40.0", "2.35", "ADM Jr. , adm, 2011 DNA update"}, {"HN5", "ON5", "CN8", "57.5", "106.0", " ", " ", "Adm Jr. MeOH"}, {"HN5", "ON5", "CN9", "57.5", "106.0", " ", " ", "Adm Jr. MeOH"}, {"ON2", "P", "ON2", "80.0", "104.3", " ", " ", "ADM Jr."}, {"ON2", "P2", "ON2", "80.0", "104.3", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON2", "P", "ON4", "48.1", "108.0", " ", " ", "ADM Jr."}, {"ON2", "P2", "ON4", "48.1", "108.0", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON3", "P", "ON4", "98.9", "108.23", " ", " ", "ADM Jr."}, {"ON3", "P2", "ON4", "98.9", "108.23", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON4", "P", "ON4", "98.9", "104.0", " ", " ", "ADM Jr."}, {"ON4", "P2", "ON4", "98.9", "104.0", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"CN7", "CN8", "ON5", "75.7", "110.10", " ", " ", "adm jr. MeOH"}, {"HN9", "CN9", "HN9", "35.500", "108.40", "5.40", "1.802", "update, adm jr. 3/2/92"}, {"CN7", "ON6", "CN7B", "110.0", "108.0", " ", " ", "NF, 11/97, C4'O4'C1'"}, {"ON6", "CN7B", "CN8", "90.0", "102.0", " ", " ", "NF, 11/97, C4'O4'C1'"}, {"CN7B", "CN8", "CN7", "80.00", "100.0", " ", " ", "NF, 11/97, C1'C2'C3'"}, {"CN8", "CN7", "CN7", "60.00", "102.0", "8.0", "2.561", "11/97, C2'C3'C4'"}, {"CN9", "CN7", "CN7", "60.00", "102.0", "8.0", "2.561", "5MET, adm jr."}, {"CN7", "CN7", "ON6", "100.0", "104.0", " ", " ", "NF, 11/97, C3'C4'O4'"}, {"HN7", "CN7", "ON6", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7B", "ON6", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7", "CN7", "40.0", "108.00", " ", " ", " "}, {"CN7B", "CN8", "HN8", "33.4", "110.10", "22.53", "2.179", "following terms directly"}, {"CN8", "CN7B", "HN7", "33.4", "110.10", "22.53", "2.179", "from alkanes"}, {"HN7", "CN7", "CN8", "34.5", "110.1", "22.53", "2.179", " "}, {"HN8", "CN8", "CN7", "34.53", "110.10", "22.53", "2.179", " "}, {"HN8", "CN8", "CN8", "34.53", "110.10", "22.53", "2.179", " "}, {"HN8", "CN8", "HN8", "35.5", "109.00", "5.40", "1.802", " "}, {"HN7", "CN7", "HN7", "35.5", "109.00", "5.40", "1.802", " "}, {"CN7", "ON6B", "CN7B", "110.0", "115.0", " ", " ", "From CN7 ON6 CN7B"}, {"CN7", "CN7", "ON6B", "100.0", "110.0", " ", " ", "From CN7 CN7 ON6"}, {"ON6B", "CN7B", "CN7B", "90.0", "106.0", " ", " ", "030998"}, {"CN7B", "CN7B", "CN7", "110.0", "96.0", " ", " ", " "}, {"CN7B", "CN7", "CN7", "60.0", "100.0", "8.00", "2.561", "11/97, C2'C3'C4'"}, {"HN7", "CN7", "ON6B", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7B", "ON6B", "45.2", "107.24", " ", " ", " "}, {"CN7B", "CN7B", "HN7", "33.4", "110.10", "22.53", "2.179", "following terms directly"}, {"HN7", "CN7B", "HN7", "35.5", "109.00", "5.40", "1.802", " "}, {"ON6", "CN7", "CN8B", "90.0", "108.2", " ", " ", "11/97, O4'C4'C5'"}, {"ON6", "CN7", "CN9", "90.0", "108.2", " ", " ", "5MET, adm jr."}, {"CN7", "CN7", "CN8B", "45.0", "110.0", " ", " ", "11/97, C3'C4'C5'"}, {"CN8", "CN7", "CN8B", "58.35", "113.60", "11.16", "2.561", "from alkane, 25P1"}, {"CN7", "CN8B", "ON2", "70.0", "108.4", " ", " ", "11/97, C4'C5'O5'"}, {"CN7", "CN7", "ON2", "115.0", "109.7", " ", " ", "11/97, C4'C3'O3'"}, {"CN7B", "CN7B", "ON2", "115.0", "109.7", " ", " ", "11/97, C4'C3'O3' for NADPH and bkbmod"}, {"CN8", "CN7", "ON2", "115.0", "109.7", " ", " ", "11/97, C2'C3'O3'"}, {"CN8B", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C5'O5'P"}, {"CN8B", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C5'O5'P, adm, 2011 DNA update"}, {"CN7", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P"}, {"CN7", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, adm, 2011 DNA update"}, {"CN7B", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, for NADPH and bkbmod"}, {"CN7B", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, for NADPH and bkbmod, adm, 2011 DNA update"}, {"HN7", "CN7", "CN8B", "34.5", "110.1", "22.53", "2.179", "From HN7 CN7 CN8"}, {"HN8", "CN8B", "ON2", "60.0", "109.5", " ", " ", "From HN7 CN8 ON2"}, {"HN5", "ON5", "CN8B", "57.5", "106.0", " ", " ", "From HN5 ON5 CN8"}, {"HN8", "CN8B", "HN8", "35.5", "109.0", "5.40", "1.802", "Alkanes, sacred"}, {"HN8", "CN8B", "CN7", "34.53", "110.1", "22.53", "2.179", "Alkanes, sacred"}, {"HN7", "CN7", "ON2", "60.0", "109.5", " ", " ", "adm jr. from HN7 CN8 ON2"}, {"HN7", "CN7B", "ON2", "60.0", "109.5", " ", " ", "adm jr. from HN7 CN8 ON2, for NADPH and bkbmod"}, {"CN7", "CN8B", "ON5", "75.7", "110.10", " ", " ", "From CN7 CN8B ON5"}, {"CN8B", "CN7", "ON5", "90.0", "108.2", " ", " ", "phosphoramidate, carbocyclic"}, {"HN8", "CN8B", "ON5", "45.9", "108.89", " ", " ", "From HN7 CN8 ON5"}, {"ON5", "CN7", "CN8", "75.7", "110.0", " ", " ", "from CHARMM22"}, {"ON5", "CN7", "CN7", "75.7", "110.1", " ", " ", " "}, {"HN7", "CN7", "ON5", "60.0", "109.5", " ", " ", " "}, {"HN5", "ON5", "CN7", "57.5", "109.0", " ", " ", " "}, {"ON6B", "CN7", "CN8B", "90.0", "108.2", " ", " ", " "}, {"ON6B", "CN7", "CN9", "90.0", "108.2", " ", " ", "for 5MET patch, adm jr."}, {"ON2", "CN7", "CN7B", "90.0", "110.0", " ", " ", " "}, {"ON5", "CN7", "CN7B", "90.0", "110.0", " ", " ", "From ON5 CN7 CN8"}, {"ON5", "CN7B", "CN7B", "80.0", "108.4", " ", " ", " "}, {"ON5", "CN7B", "CN7", "90.0", "108.0", " ", " ", " "}, {"HN7", "CN7B", "ON5", "60.0", "109.5", " ", " ", " "}, {"HN5", "ON5", "CN7B", "57.5", "109.0", " ", " ", " "}, {"HN7", "CN7B", "CN7", "34.53", "110.10", "22.53", "2.179", " "}, {"HN7", "CN7", "CN7B", "34.53", "110.10", "22.53", "2.179", " "}, {"CN8", "ON2", "P", "20.0", "120.0", "35.", "2.33", "adm jr."}, {"CN8", "ON2", "P2", "20.0", "120.0", "35.", "2.33", "adm jr., adm 2011 DNA update"}, {"ON2", "P", "ON3", "98.9", "111.6", " ", " ", "adm jr."}, {"ON2", "P2", "ON3", "98.9", "111.6", " ", " ", "adm jr., adm, 2011 DNA update"}, {"ON3", "P", "ON3", "120.0", "120.0", " ", " ", "adm jr."}, {"ON3", "P2", "ON3", "120.0", "120.0", " ", " ", "adm jr., adm, 2011 DNA update"}, {"HN8", "CN8", "ON2", "60.0", "109.5", " ", " ", "adm jr."}, {"ON5", "P", "ON3", "98.9", "111.6", " ", " ", "From ON2 P ON3"}, {"ON6", "CN7B", "CN7", "120.0", "106.25", " ", " ", " "}, {"CN7B", "CN7", "CN8", "58.35", "113.6", "11.16", "2.561", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_na info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_na_dihedrals[502][8]= {{"X", "CN8", "ON2", "X", "-0.10", "3", "0.0", "phosphate ester"}, {"X", "CN7", "CN8", "X", "0.20", "3", "0.0", "alkane"}, {"X", "CN8", "NN6", "X", "0.10", "3", "0.0", "methylammonium"}, {"CN7", "ON6", "CN8B", "HN8", "0.195", "1", "0.0", " "}, {"ON6", "CN8B", "CN8", "HN8", "0.195", "1", "0.0", " "}, {"HN7", "CN7", "ON6", "CN8B", "0.195", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "HN7", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN8", "CN7", "0.195", "3", "0.0", " "}, {"CN8B", "CN7", "ON6", "CN8B", "0.5", "5", "0.0", "min at 150 310 max at 25 200"}, {"CN8B", "CN7", "ON6", "CN8B", "0.1", "3", "180.0", " "}, {"CN8B", "CN7", "ON6", "CN8B", "0.5", "1", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.4", "5", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.4", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.7", "2", "0.0", "energy at 0 (c3'endo), adm"}, {"CN8B", "CN8", "CN7", "ON5", "0.5", "1", "180.0", "energy at 0 (c3'endo), adm"}, {"CN8B", "CN8", "CN7", "ON2", "0.4", "5", "0.0", "for oligonuclotide"}, {"CN8B", "CN8", "CN7", "ON2", "0.4", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON2", "0.7", "2", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON2", "0.5", "1", "180.0", " "}, {"CN7", "ON6", "CN8B", "CN8", "0.6", "6", "180.0", " "}, {"CN7", "ON6", "CN8B", "CN8", "0.6", "3", "0.0", " "}, {"ON6", "CN8B", "CN8", "CN7", "0.7", "5", "180.0", "90, shifts c2endo minimum towards 200"}, {"ON6", "CN8B", "CN8", "CN7", "0.4", "4", "0.0", "90, shifts c2endo minimum towards 200"}, {"ON6", "CN8B", "CN8", "CN7", "0.4", "3", "180.0", "90, shifts c2endo minimum towards 200"}, {"CN7", "CN7", "CN8", "CN8B", "0.5", "4", "0.0", " "}, {"CN7", "CN7", "CN8", "CN8B", "0.1", "3", "0.0", "energy in 150 to 250 range"}, {"CN8B", "ON6", "CN7", "CN7", "0.5", "3", "0.0", "surface in 200-360 region"}, {"ON2", "P2", "ON2", "CN7", "0.90", "1", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P2", "ON2", "CN7", "0.40", "2", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P2", "ON2", "CN7", "0.20", "3", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P", "ON2", "CN7", "1.20", "1", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.10", "2", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.10", "3", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.00", "6", "0.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8", "1.20", "1", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.10", "2", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.10", "3", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.00", "6", "0.0", "DMP, adm jr."}, {"ON2", "P2", "ON2", "CN8", "1.20", "1", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.10", "2", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.10", "3", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.00", "6", "0.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "1.20", "1", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.10", "2", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.10", "3", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.00", "6", "0.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P", "ON2", "CN8B", "1.20", "1", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.10", "2", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.10", "3", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.00", "6", "0.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN9", "1.20", "1", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.10", "2", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.10", "3", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.00", "6", "0.0", " "}, {"ON2", "P2", "ON2", "CN9", "1.20", "1", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.10", "2", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.10", "3", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.00", "6", "0.0", "adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN7", "0.10", "3", "0.0", "O1P-P-O3'-C3'"}, {"ON3", "P2", "ON2", "CN7", "0.10", "3", "0.0", "O1P-P-O3'-C3', adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN7B", "0.10", "3", "0.0", "NADPH and bkbmod"}, {"ON3", "P", "ON2", "CN8", "0.10", "3", "0.0", " "}, {"ON3", "P2", "ON2", "CN8", "0.10", "3", "0.0", "adm 2011 DNA update"}, {"ON3", "P", "ON2", "CN8B", "0.10", "3", "0.0", "O1P-P-O5'-C5'"}, {"ON3", "P2", "ON2", "CN8B", "0.10", "3", "0.0", "O1P-P-O5'-C5', adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN9", "0.10", "3", "0.0", " "}, {"ON3", "P2", "ON2", "CN9", "0.10", "3", "0.0", "adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN7", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN7", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN7", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN7", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN8", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8B", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8B", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN8B", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN8B", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN9", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN9", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN9", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN9", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"X", "ON4", "P", "X", "0.30", "3", "0.0", "adm jr."}, {"X", "ON4", "P2", "X", "0.30", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"P", "ON2", "CN7", "HN7", "0.000", "3", "0.0", "H-C3'-O3'-P"}, {"P2", "ON2", "CN7", "HN7", "0.000", "3", "0.0", "H-C3'-O3'-P, adm, 2011 DNA update"}, {"P", "ON2", "CN7B", "HN7", "0.000", "3", "0.0", "NADPH and bkbmod"}, {"P", "ON2", "CN8B", "HN8", "0.000", "3", "0.0", "H-C5'-O5'-P"}, {"P2", "ON2", "CN8B", "HN8", "0.000", "3", "0.0", "H-C5'-O5'-P, adm, 2011 DNA update"}, {"P", "ON2", "CN8", "HN8", "0.000", "3", "0.0", " "}, {"P", "ON2", "CN9", "HN9", "0.000", "3", "0.0", " "}, {"P2", "ON2", "CN9", "HN9", "0.000", "3", "0.0", "adm, 2011 DNA update"}, {"CN9", "CN8", "CN8", "CN9", "0.15", "1", "0.0", " "}, {"CN9", "CN8", "CN8", "CN8", "0.15", "1", "0.0", " "}, {"NN2B", "CN1T", "NN2U", "CN1", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN1T", "NN2U", "CN1", "CN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1", "CN3", "CN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3", "CN3", "NN2B", "6.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2B", "CN1T", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN3", "NN2B", "CN1T", "NN2U", "1.5", "2", "180.0", "adm jr. 11/97"}, {"HN3", "CN3", "CN3", "HN3", "3.0", "2", "180.0", "adm jr. 11/97"}, {"HN3", "CN3", "CN1", "ON1", "6.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1T", "NN2B", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1", "NN2U", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1T", "NN2U", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"HN2", "NN2B", "CN3", "HN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN1T", "NN2U", "HN2", "3.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN1", "NN2U", "HN2", "3.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2B", "HN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1T", "NN2B", "HN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"CN1T", "NN2B", "CN3", "CN3T", "1.8", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1", "CN3T", "CN3", "1.8", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3T", "CN3", "NN2B", "3.0", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN1", "CN3T", "CN9", "5.6", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN3", "CN3T", "CN9", "5.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3T", "CN9", "HN9", "0.46", "3", "0.0", "adm jr. 11/97"}, {"CN3", "CN3T", "CN9", "HN9", "0.46", "3", "0.0", "adm jr. 11/97"}, {"CN3T", "CN1", "NN2U", "HN2", "4.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "NN2", "CN1", "NN3", "0.6", "2", "180.0", "adm jr. 11/97"}, {"NN2", "CN1", "NN3", "CN2", "0.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN3", "CN2", "CN3", "6.0", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "CN3", "CN3", "0.6", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN3", "CN3", "NN2", "6.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2", "CN1", "0.6", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "NN1", "HN1", "1.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN2", "NN1", "HN1", "1.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "NN3", "CN1", "2.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "CN3", "CN3", "2.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "CN3", "HN3", "2.0", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN2", "HN2", "3.0", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN3", "CN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN2", "CN3", "1.6", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "CN3", "HN3", "3.4", "2", "180.0", "adm jr. 11/97"}, {"NN2", "CN3", "CN3", "HN3", "3.4", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN3", "CN3", "HN3", "4.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN2", "CN3", "HN3", "4.6", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN3", "X", "2.0", "2", "180.0", "adm jr. 11/97"}, {"CN2", "NN3A", "CN4", "NN3A", "1.8", "2", "180.0", "adm jr. 11/97, 6-mem"}, {"NN3A", "CN4", "NN3A", "CN5", "2.0", "2", "180.0", " "}, {"CN4", "NN3A", "CN5", "CN5", "1.8", "2", "180.0", " "}, {"NN3A", "CN5", "CN5", "CN2", "2.0", "2", "180.0", "treated 2x"}, {"CN5", "CN5", "CN2", "NN3A", "1.8", "2", "180.0", " "}, {"CN5", "CN2", "NN3A", "CN4", "10.0", "2", "180.0", " "}, {"CN5", "CN5", "NN4", "CN4", "6.0", "2", "180.0", "5-mem"}, {"CN5", "NN4", "CN4", "NN2", "14.0", "2", "180.0", " "}, {"NN4", "CN4", "NN2", "CN5", "6.0", "2", "180.0", " "}, {"CN4", "NN2", "CN5", "CN5", "6.0", "2", "180.0", " "}, {"NN2", "CN5", "CN5", "NN4", "14.0", "2", "180.0", "treated 2x"}, {"CN2", "NN3A", "CN4", "HN3", "8.5", "2", "180.0", "H2"}, {"CN5", "NN3A", "CN4", "HN3", "8.5", "2", "180.0", "H2"}, {"CN5", "NN4", "CN4", "HN3", "5.2", "2", "180.0", "H8"}, {"CN5", "NN2", "CN4", "HN3", "5.2", "2", "180.0", "H8"}, {"CN5", "CN5", "NN2", "HN2", "1.2", "2", "180.0", "H9"}, {"NN4", "CN4", "NN2", "HN2", "1.2", "2", "180.0", "H9"}, {"HN2", "NN2", "CN4", "HN3", "0.0", "2", "180.0", "H8-C-N-H9"}, {"CN4", "NN3A", "CN2", "NN1", "4.0", "2", "180.0", "N6"}, {"CN5", "CN5", "CN2", "NN1", "4.0", "2", "180.0", "N6"}, {"NN4", "CN5", "CN2", "NN1", "0.0", "2", "180.0", "N6"}, {"CN5", "CN2", "NN1", "HN1", "0.5", "2", "180.0", "6-NH2"}, {"NN3A", "CN2", "NN1", "HN1", "0.5", "2", "180.0", " "}, {"NN3A", "CN5", "CN5", "NN4", "7.0", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN5", "CN5", "NN2", "7.0", "2", "180.0", " "}, {"NN3A", "CN2", "CN5", "NN4", "2.0", "2", "180.0", " "}, {"CN2", "CN5", "NN4", "CN4", "2.0", "2", "180.0", " "}, {"CN4", "NN3A", "CN5", "NN2", "2.0", "2", "180.0", " "}, {"NN3A", "CN5", "NN2", "CN4", "2.0", "2", "180.0", " "}, {"CN1", "NN2G", "CN2", "NN3G", "0.2", "2", "180.0", "jr. 11/97, 6-mem"}, {"NN2G", "CN2", "NN3G", "CN5", "2.0", "2", "180.0", " "}, {"CN2", "NN3G", "CN5", "CN5G", "0.2", "2", "180.0", " "}, {"NN3G", "CN5", "CN5G", "CN1", "2.0", "2", "180.0", " "}, {"CN5", "CN5G", "CN1", "NN2G", "0.2", "2", "180.0", " "}, {"CN5G", "CN1", "NN2G", "CN2", "0.2", "2", "180.0", " "}, {"CN5", "CN5G", "NN4", "CN4", "6.0", "2", "180.0", " "}, {"CN5G", "NN4", "CN4", "NN2B", "16.0", "2", "180.0", " "}, {"NN4", "CN4", "NN2B", "CN5", "6.0", "2", "180.0", " "}, {"CN4", "NN2B", "CN5", "CN5G", "6.0", "2", "180.0", " "}, {"NN2B", "CN5", "CN5G", "NN4", "10.0", "2", "180.0", " "}, {"ON1", "CN1", "CN5G", "CN5", "14.0", "2", "180.0", "O6"}, {"ON1", "CN1", "CN5G", "NN4", "0.0", "2", "180.0", " "}, {"ON1", "CN1", "NN2G", "CN2", "14.0", "2", "180.0", " "}, {"ON1", "CN1", "NN2G", "HN2", "0.0", "2", "180.0", " "}, {"NN1", "CN2", "NN2G", "CN1", "4.0", "2", "180.0", "N2"}, {"NN1", "CN2", "NN3G", "CN5", "4.0", "2", "180.0", " "}, {"NN1", "CN2", "NN2G", "HN2", "0.0", "2", "180.0", " "}, {"NN2G", "CN2", "NN1", "HN1", "1.2", "2", "180.0", " "}, {"NN3G", "CN2", "NN1", "HN1", "1.2", "2", "180.0", " "}, {"HN2", "NN2G", "CN1", "CN5G", "3.6", "2", "180.0", "H1"}, {"HN2", "NN2G", "CN2", "NN3G", "3.6", "2", "180.0", " "}, {"HN3", "CN4", "NN4", "CN5G", "5.6", "2", "180.0", "H8"}, {"HN3", "CN4", "NN2B", "CN5", "5.6", "2", "180.0", " "}, {"HN3", "CN4", "NN2B", "HN2", "0.0", "2", "180.0", " "}, {"HN2", "NN2B", "CN5", "CN5G", "1.2", "2", "180.0", "H9"}, {"HN2", "NN2B", "CN5", "NN3G", "1.2", "2", "180.0", " "}, {"HN2", "NN2B", "CN4", "NN4", "1.2", "2", "180.0", " "}, {"NN3G", "CN5", "CN5G", "NN4", "10.0", "2", "180.0", "jr. 11/97"}, {"CN1", "CN5G", "CN5", "NN2", "10.0", "2", "180.0", " "}, {"NN2G", "CN1", "CN5G", "NN4", "2.0", "2", "180.0", " "}, {"CN1", "CN5G", "NN4", "CN4", "2.0", "2", "180.0", " "}, {"CN2", "NN3G", "CN5", "NN2B", "2.0", "2", "180.0", " "}, {"NN3G", "CN5", "NN2B", "CN4", "2.0", "2", "180.0", " "}, {"X", "CN1", "NN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN1", "NN2", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1T", "NN2B", "X", "0.9", "2", "180.0", "From X CN1 NN2 X, for thymines"}, {"X", "CN1", "NN2G", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1", "NN2U", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1T", "NN2U", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN3", "NN2", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN3", "NN2B", "X", "1.0", "2", "180.0", "From X CN3 NN2 X, for thymines"}, {"X", "CN3", "CN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN3", "CN3T", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN1", "CN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN1", "CN3T", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "CN3", "X", "0.8", "2", "180.0", "c22"}, {"X", "CN1", "CN5G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN2G", "X", "1.0", "2", "180.0", " "}, {"X", "CN2", "CN5", "X", "1.0", "2", "180.0", " "}, {"X", "CN4", "NN2", "X", "1.5", "2", "180.0", " "}, {"X", "CN4", "NN2B", "X", "1.5", "2", "180.0", "From X CN4 NN2 X"}, {"X", "CN4", "NN3A", "X", "3.5", "2", "180.0", " "}, {"X", "CN4", "NN4", "X", "2.0", "2", "180.0", "A,G"}, {"X", "CN5", "CN5", "X", "0.0", "2", "180.0", " "}, {"X", "CN5G", "CN5", "X", "0.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN5", "NN2", "X", "1.5", "2", "180.0", " "}, {"X", "CN5", "NN2B", "X", "1.5", "2", "180.0", "From X CN5 NN2 X"}, {"X", "CN5", "NN3A", "X", "1.0", "2", "180.0", " "}, {"X", "CN5", "NN3G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN5", "NN4", "X", "1.0", "2", "180.0", " "}, {"X", "CN5G", "NN4", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN3A", "X", "1.0", "2", "180.0", " "}, {"X", "CN2", "NN3G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN2", "CN9", "HN9", "0.19", "3", "0.0", "1-M-C"}, {"CN3", "NN2", "CN9", "HN9", "0.00", "3", "0.0", "1-M-C"}, {"CN4", "NN2", "CN9", "HN9", "0.00", "3", "0.0", "9-M-A"}, {"CN5", "NN2", "CN9", "HN9", "0.19", "3", "0.0", "9-M-A"}, {"CN1", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "1-M-U"}, {"CN1T", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "1-M-T"}, {"CN3", "NN2B", "CN9", "HN9", "0.00", "3", "0.0", "1-M-T/U"}, {"CN4", "NN2B", "CN9", "HN9", "0.00", "3", "0.0", "9-M-G"}, {"CN5", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "9-M-G"}, {"CN4", "NN2B", "CN8", "HN8", "0.00", "3", "0.0", "9-E-G"}, {"CN5", "NN2B", "CN8", "HN8", "0.19", "3", "0.0", "9-E-G"}, {"CN4", "NN2B", "CN8", "CN9", "0.00", "3", "0.0", "9-E-G"}, {"CN5", "NN2B", "CN8", "CN9", "0.19", "3", "0.0", "9-E-G"}, {"X", "CN8", "CN8", "X", "0.15", "3", "0.0", "Alkanes (0.2 to 0.15)"}, {"X", "CN8", "CN9", "X", "0.15", "3", "0.0", "Alkanes (0.2 to 0.15)"}, {"HN7", "CN7B", "CN7B", "ON2", "0.195", "3", "0.0", "NADPH and bkbmod"}, {"ON2", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", "NADPH and bkbmod"}, {"CN7", "CN7B", "ON6", "CN7", "0.6", "6", "180.0", " "}, {"CN7B", "CN7", "CN7", "CN7", "0.4", "6", "0.0", "good for amplitudes"}, {"CN7B", "CN7", "CN7", "CN9", "0.4", "6", "0.0", "good for amplitudes, 5MET"}, {"CN7", "CN7", "CN7", "ON6", "0.6", "6", "0.0", " "}, {"CN7", "CN7", "CN7B", "ON6", "0.6", "6", "0.0", " "}, {"ON2", "CN7", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON2", "CN7", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON2", "CN7B", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON2", "CN7B", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7B", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON5", "CN7", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7", "ON5", "0.0", "3", "0.0", " "}, {"ON5", "CN7", "CN7", "ON2", "0.0", "3", "0.0", " "}, {"ON2", "CN7", "CN7B", "ON6", "0.5", "6", "0.0", "for amplitudes"}, {"ON2", "CN7", "CN7B", "ON6", "0.3", "5", "0.0", "on amplitudes"}, {"ON2", "CN7", "CN7B", "ON6", "0.6", "4", "180.0", "c2'endo"}, {"ON2", "CN7", "CN7B", "ON6", "0.2", "3", "0.0", " "}, {"CN7", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "lowers 180 deg."}, {"CN7B", "NN2", "CN4", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2", "CN5", "CN5", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN4", "NN4", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN4", "NN3A", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2", "CN5", "1.1", "1", "180.0", " "}, {"ON6", "CN7B", "NN2", "CN4", "1.1", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2", "CN5", "1.1", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2", "CN4", "1.1", "1", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN5", "0.3", "3", "0.0", "NF"}, {"CN8", "CN7B", "NN2", "CN4", "0.0", "3", "180.0", "NF"}, {"CN7B", "CN7B", "NN2", "CN5", "0.3", "3", "0.0", "NF"}, {"CN7B", "CN7B", "NN2", "CN4", "0.0", "3", "180.0", "NF"}, {"HN7", "CN7B", "NN2", "CN5", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2", "CN4", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2", "CN3", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2", "CN1", "ON1C", "11.0", "2", "180.0", "adm jr. from A"}, {"CN7B", "NN2", "CN1", "NN3", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN3", "CN3", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", " "}, {"ON6", "CN7B", "NN2", "CN3", "1.0", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2", "CN3", "1.0", "1", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN1", "1.0", "3", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN3", "0.0", "3", "180.0", "NF 030697"}, {"CN7B", "CN7B", "NN2", "CN1", "1.0", "3", "0.0", " "}, {"CN7B", "CN7B", "NN2", "CN3", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2", "CN3", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2B", "CN3", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2B", "CN1T", "ON1", "11.0", "2", "180.0", "adm jr. from A"}, {"CN7B", "NN2B", "CN1T", "NN2U", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2B", "CN3", "CN3T", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2B", "CN1", "0.0", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN1T", "0.7", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN1T", "0.8", "1", "180.0", " "}, {"ON6", "CN7B", "NN2B", "CN3", "0.9", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2B", "CN1", "0.0", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN1T", "0.7", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN1T", "0.8", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2B", "CN3", "0.9", "1", "0.0", " "}, {"CN8", "CN7B", "NN2B", "CN1T", "0.2", "3", "180.0", " "}, {"CN8", "CN7B", "NN2B", "CN3", "0.0", "3", "180.0", "NF"}, {"CN7B", "CN7B", "NN2B", "CN1T", "0.2", "3", "180.0", " "}, {"CN7B", "CN7B", "NN2B", "CN3", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2B", "CN1T", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2B", "CN3", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2B", "CN4", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2B", "CN4", "NN4", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2B", "CN5", "CN5G", "11.0", "2", "180.0", "adm jr. from U"}, {"CN7B", "NN2B", "CN5", "NN3G", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2B", "CN5", "0.2", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN5", "1.1", "1", "180.0", " "}, {"ON6", "CN7B", "NN2B", "CN4", "1.4", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2B", "CN5", "0.2", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN5", "1.1", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2B", "CN4", "1.4", "1", "0.0", " "}, {"CN8", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"CN8", "CN7B", "NN2B", "CN4", "0.0", "3", "180.0", "NF 030697"}, {"CN7B", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"CN7B", "CN7B", "NN2B", "CN4", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2B", "CN4", "0.195", "3", "0.0", "NF"}, {"CN7", "ON6", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "ON6", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "ON6B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "ON6B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN8", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "CN8", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"HN8", "CN8", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"HN8", "CN8", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "CN7B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN8B", "ON2", "P", "0.2", "1", "120.0", "C4'-C5'-O5'-P, adm jr."}, {"CN7", "CN8B", "ON2", "P2", "0.2", "1", "120.0", "C4'-C5'-O5'-P, adm jr., adm, 2011 DNA update"}, {"CN7", "CN8B", "ON5", "HN5", "1.3300", "1", "0.00", " "}, {"CN7", "CN8B", "ON5", "HN5", "0.1800", "2", "0.00", " "}, {"CN7", "CN8B", "ON5", "HN5", "0.3200", "3", "0.00", " "}, {"HN8", "CN8B", "ON5", "HN5", "0.0", "3", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON2", "0.20", "4", "180.0", "adm jr."}, {"CN7", "CN7", "CN8B", "ON2", "0.80", "3", "180.0", "C3'-C4'-C5'-O5'"}, {"CN7", "CN7", "CN8B", "ON2", "0.40", "2", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON2", "2.50", "1", "180.0", " "}, {"CN8", "CN7", "CN8B", "ON2", "0.2", "3", "180.0", "from gam, carbocyclic and 25P1"}, {"CN7", "CN7", "CN8B", "ON5", "0.20", "4", "180.0", "adm jr."}, {"CN7", "CN7", "CN8B", "ON5", "0.80", "3", "180.0", "C3'-C4'-C5'-O5'"}, {"CN7", "CN7", "CN8B", "ON5", "0.40", "2", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON5", "2.50", "1", "180.0", " "}, {"ON6", "CN7", "CN8B", "ON2", "3.4", "1", "180.0", "O4'-C4'-C5'-O5',influences +60"}, {"ON6B", "CN7", "CN8B", "ON2", "3.4", "1", "180.0", "RNA"}, {"ON6", "CN7", "CN8B", "ON5", "3.4", "1", "180.0", " "}, {"ON6B", "CN7", "CN8B", "ON5", "3.4", "1", "180.0", "RNA"}, {"HN8", "CN8B", "CN7", "CN7", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN7", "CN8", "0.195", "1", "0.0", "carbocylic, 25P1"}, {"HN8", "CN8B", "CN7", "ON6", "0.195", "1", "0.0", " "}, {"HN8", "CN8B", "CN7", "ON6B", "0.195", "1", "0.0", "RNA"}, {"HN7", "CN7", "CN8B", "ON2", "0.195", "3", "0.0", "H-C4'-C5'-O5'"}, {"HN7", "CN7", "CN8B", "ON5", "0.195", "3", "0.0", " "}, {"HN8", "CN8", "CN8", "ON6", "0.195", "1", "0.0", " "}, {"CN9", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "-> CN9"}, {"HN7", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"CN7", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"ON6", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"HN7", "CN7", "CN7", "CN9", "0.195", "3", "0.0", "-> CN9"}, {"ON2", "CN7", "CN7", "CN9", "0.2", "4", "0.0", "-> CN9"}, {"ON2", "CN7", "CN7", "CN9", "0.8", "3", "180.0", "-> CN9"}, {"CN8", "CN7", "CN7", "CN9", "0.5", "4", "180.0", "-> CN9"}, {"CN8", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "lowers 180 deg."}, {"CN7B", "CN7", "CN7", "CN8B", "0.2", "4", "180.0", "RNA"}, {"ON2", "CN7", "CN7", "CN8B", "0.2", "4", "0.0", " "}, {"ON2", "CN7", "CN7", "CN8B", "0.8", "3", "180.0", "P [100,250]"}, {"ON5", "CN7", "CN7", "CN8B", "0.2", "4", "0.0", " "}, {"ON5", "CN7", "CN7", "CN8B", "0.8", "3", "180.0", " "}, {"ON2", "CN7", "CN7", "ON6", "0.5", "6", "0.0", "good for amplitudes"}, {"ON2", "CN7", "CN7", "ON6", "0.3", "5", "0.0", "impact on amplitudes"}, {"ON2", "CN7", "CN7", "ON6", "0.6", "4", "180.0", "increases c2'endo"}, {"ON2", "CN7", "CN7", "ON6", "0.2", "3", "0.0", " "}, {"ON2", "CN7", "CN7", "ON6B", "0.4", "6", "0.0", "RNA, good for amplitudes"}, {"ON2", "CN7", "CN7", "ON6B", "0.0", "5", "0.0", "RNA, impact on amplitudes"}, {"ON2", "CN7", "CN7", "ON6B", "0.0", "4", "180.0", "RNA, increases c2'endo"}, {"ON2", "CN7", "CN7", "ON6B", "1.6", "3", "0.0", "RNA, increases C2'endo"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.4", "6", "0.0", "RNA, good for amplitudes"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.0", "5", "0.0", "RNA, impact on amplitudes"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.0", "4", "180.0", "RNA, increases c2'endo"}, {"ON2", "CN7B", "CN7B", "ON6B", "1.6", "3", "0.0", "RNA, increases C2'endo"}, {"ON5", "CN7", "CN7", "ON6", "0.5", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.3", "5", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.6", "4", "180.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.2", "3", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.4", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.0", "5", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.0", "4", "180.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "1.6", "3", "0.0", "increases c2'endo"}, {"CN7B", "ON6", "CN7", "CN8B", "0.8", "3", "0.0", "P [30,80]"}, {"CN7B", "ON6B", "CN7", "CN8B", "2.0", "3", "0.0", "To lower barrier in RNA"}, {"CN7B", "ON6B", "CN7", "CN9", "2.0", "3", "0.0", "To lower barrier in RNA, 5MET"}, {"ON2", "CN7", "CN8", "CN7B", "0.8", "6", "0.0", " "}, {"ON2", "CN7", "CN8", "CN7B", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7", "CN8", "CN7B", "2.0", "3", "180.0", " "}, {"ON2", "CN7", "CN7B", "CN7B", "0.6", "6", "0.0", "RNA"}, {"ON2", "CN7", "CN7B", "CN7B", "0.0", "5", "0.0", "RNA c2/c3 endo in RNA"}, {"ON2", "CN7", "CN7B", "CN7B", "1.6", "3", "180.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "0.8", "6", "0.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "0.4", "5", "0.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7B", "CN7B", "0.6", "6", "0.0", "RNA, c2/c3 endo"}, {"ON5", "CN7", "CN7B", "CN7B", "0.0", "5", "0.0", "RNA"}, {"ON5", "CN7", "CN7B", "CN7B", "1.6", "3", "180.0", "RNA"}, {"ON2", "CN7", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"ON5", "CN7", "CN8", "HN8", "0.195", "3", "180.0", " "}, {"ON2", "CN7", "CN7B", "HN7", "0.195", "3", "0.0", "RNA"}, {"ON5", "CN7", "CN7B", "HN7", "0.195", "3", "180.0", "RNA"}, {"HN7", "CN7", "CN7", "ON2", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON5", "0.195", "3", "0.0", " "}, {"CN7", "CN7", "ON2", "P2", "0.6", "5", "0.0", "adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.2", "4", "0.0", "locat of 200 mimima, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.0", "3", "180.0", "barE beteen minima, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.4", "2", "0.0", "relE of 200 vs 275 min, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "1.9", "1", "180.0", "adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P", "0.6", "5", "0.0", "RNA"}, {"CN7", "CN7", "ON2", "P", "0.2", "4", "0.0", "locat of 200 mimima, RNA"}, {"CN7", "CN7", "ON2", "P", "0.0", "3", "180.0", "barE beteen minima, RNA"}, {"CN7", "CN7", "ON2", "P", "0.4", "2", "0.0", "relE of 200 vs 275 min, RNA"}, {"CN7", "CN7", "ON2", "P", "1.9", "1", "180.0", "RNA"}, {"CN8", "CN7", "ON2", "P", "2.5", "1", "180.0", "3-terminal phosphate"}, {"CN8", "CN7", "ON2", "P2", "1.9", "1", "180.0", "adm, 2011 DNA update new param, eps"}, {"CN7B", "CN7", "ON2", "P", "2.5", "1", "180.0", "RNA"}, {"CN7B", "CN7B", "ON2", "P", "2.5", "1", "180.0", "NADPH and bkbmod"}, {"CN7", "CN7B", "ON2", "P", "2.5", "1", "180.0", "NADPH and bkbmod"}, {"CN7", "CN7", "ON5", "HN5", "0.5", "3", "0.0", " "}, {"CN7", "CN7", "ON5", "HN5", "0.3", "2", "180.0", " "}, {"CN7", "CN7", "ON5", "HN5", "1.5", "1", "0.0", " "}, {"CN8", "CN7", "ON5", "HN5", "0.5", "3", "0.0", " "}, {"CN8", "CN7", "ON5", "HN5", "1.0", "2", "180.0", " "}, {"CN8", "CN7", "ON5", "HN5", "0.3", "1", "0.0", " "}, {"CN7B", "CN7", "ON5", "HN5", "0.8", "3", "0.0", "RNA"}, {"CN7B", "CN7", "ON5", "HN5", "0.5", "1", "0.0", "RNA"}, {"HN7", "CN7", "ON5", "HN5", "0.0", "3", "0.0", " "}, {"HN7", "CN7", "CN8B", "HN8", "0.195", "3", "0.0", "H-C4'-C5'-H"}, {"HN7", "CN7", "CN7", "CN8B", "0.195", "3", "0.0", "H-C3'-C4'-C5'"}, {"CN8", "CN7B", "ON6", "CN7", "0.6", "6", "180.0", " "}, {"CN8", "CN7", "CN7", "ON6", "1.0", "4", "0.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; lowers c3'endo"}, {"CN8", "CN7", "CN7", "ON6", "0.3", "5", "180.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; position of minima"}, {"CN8", "CN7", "CN7", "ON6", "0.3", "6", "180.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; position of minima"}, {"CN7B", "CN7B", "ON6B", "CN7", "0.0", "6", "0.0", "RNA, Lowers barrier"}, {"CN7B", "CN7", "CN7", "ON6B", "0.0", "3", "0.0", "RNA"}, {"CN7", "CN8", "CN7B", "ON6", "0.6", "6", "0.0", "C3'-C2'-C1'-O4', adjust barrier"}, {"CN7", "CN7B", "CN7B", "ON6B", "0.4", "6", "0.0", "RNA"}, {"CN7B", "CN8", "CN7", "CN7", "0.4", "6", "0.0", "good for amplitudes"}, {"CN7B", "CN7B", "CN7", "CN7", "0.0", "6", "0.0", "RNA"}, {"CN7", "CN7", "ON6", "CN7B", "0.6", "6", "180.0", "C3'-C4'-O4'-C1'"}, {"CN7", "CN7", "ON6B", "CN7B", "0.0", "6", "180.0", "RNA"}, {"HN7", "CN7", "CN7", "CN8", "0.0", "3", "0.0", " "}, {"HN7", "CN7", "CN8", "CN7B", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "CN8", "CN7", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON6", "0.195", "3", "180.0", "useful"}, {"HN8", "CN8", "CN7B", "ON6", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "HN7", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN8", "CN8", "CN7", "CN7", "0.195", "3", "0.0", "useful *cccc*"}, {"HN7", "CN7", "ON6", "CN7B", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "ON6", "CN7", "0.000", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON6B", "0.195", "3", "180.0", "RNA"}, {"HN9", "CN9", "CN7", "ON6B", "0.195", "3", "180.0", "RNA, 5MET"}, {"HN8", "CN8", "CN7B", "ON6B", "0.195", "3", "0.0", "RNA"}, {"HN7", "CN7B", "ON6B", "CN7", "0.000", "3", "0.0", "RNA"}, {"HN7", "CN7", "ON6B", "CN7B", "0.195", "3", "0.0", "RNA"}, {"HN7", "CN7", "CN7B", "CN7B", "0.195", "3", "0.0", "RNA, H-C3'-C2'-C1'"}, {"HN7", "CN7B", "CN7B", "CN7", "0.195", "3", "0.0", "RNA, H-C1'-C2'-C3'"}, {"HN7", "CN7B", "CN7B", "ON6B", "0.195", "3", "0.0", "RNA, H-C2'-C1'-O4'"}, {"NN2", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", "Adenine and cytosine"}, {"NN2B", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", "Guanine and uracil"}, {"ON5", "CN7B", "CN7B", "HN7", "0.000", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "HN7", "0.000", "3", "0.0", " "}, {"CN7", "CN7", "CN7B", "ON5", "0.000", "3", "0.0", " "}, {"ON6B", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", " "}, {"ON5", "CN7B", "CN7", "ON2", "0.000", "3", "0.0", " "}, {"ON5", "CN7", "CN7B", "ON2", "0.000", "3", "0.0", " "}, {"ON5", "CN7B", "CN7", "ON5", "0.000", "3", "0.0", " "}, {"HN7", "CN7B", "ON5", "HN5", "0.000", "3", "0.0", " "}, {"HN5", "ON5", "CN7B", "CN7B", "0.000", "6", "180.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.400", "3", "0.0", "shifts min, ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.400", "2", "0.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.800", "1", "0.0", "height of right barrier and can shift min, ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "0.200", "3", "0.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "0.000", "2", "180.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "2.000", "1", "0.0", "height of left side barrier, ejd, 2010 RNA update"}, {"CN7B", "ON6", "CN7", "CN9", "0.0", "3", "0.0", "added for sugar model compounds"}, {"HN7", "CN7", "CN7B", "ON5", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7B", "CN7", "CN7", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7", "CN7", "CN7B", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7", "CN7B", "HN7", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_na info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_na_impropers[15][8]= {{"HN2", "X", "X", "NN2", "1.0", "0", "0.0", "adm jr. 11/97"}, {"NN2B", "CN4", "CN5", "HN2", "7.0", "0", "0.0", "adm jr. 11/97"}, {"HN1", "X", "X", "NN1", "4.0", "0", "0.0", "adm jr. 11/97"}, {"NN1", "CN2", "HN1", "HN1", "6.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "X", "X", "ON1", "90.0", "0", "0.0", " "}, {"CN1T", "X", "X", "ON1", "90.0", "0", "0.0", " "}, {"CN1", "NN2G", "CN5G", "ON1", "90.0", "0", "0.0", " "}, {"CN1T", "NN2B", "NN2U", "ON1", "110.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "NN2U", "CN3T", "ON1", "90.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "X", "X", "ON1C", "80.0", "0", "0.0", "par_32, adm jr. 10/2/91"}, {"CN2", "X", "X", "NN1", "90.0", "0", "0.0", " "}, {"CN2", "NN3G", "NN2G", "NN1", "40.0", "0", "0.0", " "}, {"CN2", "NN3A", "CN5", "NN1", "40.0", "0", "0.0", " "}, {"CN2", "NN3", "CN3", "NN1", "60.0", "0", "0.0", " "}, {"CN9", "X", "X", "CN3T", "14.0", "0", "0.0", "adm jr. 11/97"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_na info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_na_vdw[42][6]= {{"HN1", "-0.0460", "0.2245", " ", " ", " "}, {"HN2", "-0.0460", "0.2245", " ", " ", " "}, {"HN3", "-0.046", "1.1000", " ", " ", "aromatic Hvdw"}, {"HN4", "-0.0460", "0.2245", " ", " ", " "}, {"HN5", "-0.0460", "0.2245", " ", " ", " "}, {"HN6", "-0.0220", "1.3200", " ", " ", " "}, {"HN7", "-0.0220", "1.3200", " ", " ", " "}, {"HN8", "-0.0280", "1.3400", " ", " ", "bound to CN8"}, {"HN9", "-0.0240", "1.3400", " ", " ", "bound to CN9"}, {"NN1", "-0.20", "1.85", " ", " ", " "}, {"NN2", "-0.20", "1.85", " ", " ", " "}, {"NN2B", "-0.20", "1.85", " ", " ", "NN2, for N9 in guanines"}, {"NN2G", "-0.20", "1.85", " ", " ", " "}, {"NN2U", "-0.20", "1.85", " ", " ", " "}, {"NN3", "-0.20", "1.85", " ", " ", " "}, {"NN3A", "-0.20", "1.85", " ", " ", " "}, {"NN3G", "-0.20", "1.85", " ", " ", " "}, {"NN4", "-0.20", "1.85", " ", " ", " "}, {"NN6", "-0.20", "1.85", " ", " ", " "}, {"ON1", "-0.1200", "1.70", " ", " ", " "}, {"ON1C", "-0.1200", "1.70", " ", " ", " "}, {"ON2", "-0.1521", "1.77", " ", " ", " "}, {"ON3", "-0.1200", "1.70", " ", " ", " "}, {"ON4", "-0.1521", "1.77", " ", " ", " "}, {"ON5", "-0.1521", "1.77", " ", " ", " "}, {"ON6", "-0.1521", "1.77", " ", " ", " "}, {"ON6B", "-0.1521", "1.77", " ", " ", " "}, {"CN1", "-0.10", "1.9000", " ", " ", " "}, {"CN1T", "-0.10", "1.9000", " ", " ", " "}, {"CN2", "-0.10", "1.9000", " ", " ", " "}, {"CN3", "-0.09", "1.9000", " ", " ", " "}, {"CN3T", "-0.09", "1.9000", " ", " ", "adm jr."}, {"CN4", "-0.075", "1.9000", " ", " ", " "}, {"CN5", "-0.075", "1.9000", " ", " ", " "}, {"CN5G", "-0.075", "1.9000", " ", " ", " "}, {"CN7", "-0.02", "2.275", "-0.01", "1.90", "to protein CT1"}, {"CN7B", "-0.02", "2.275", "-0.01", "1.90", "to protein CT1"}, {"CN8", "-0.0560", "2.010", "-0.01", "1.90", " "}, {"CN8B", "-0.0560", "2.010", "-0.01", "1.90", " "}, {"CN9", "-0.0780", "2.040", "-0.01", "1.90", " "}, {"P", "-0.585", "2.15", " ", " ", " "}, {"P2", "-0.585", "2.15", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/charmm_silicates.c0000664000175000017500000002754615212624223022313 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm_silicates.c * @short CHARMM-charmm_silicates force field, from 'charmm_silicates' * @author Sébastien Le Roux */ /* * This file: 'charmm_silicates.c' * * Contains: * CHARMM-charmm_silicates force field, data from taken from: - the file: 'charmm_silicates' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm_silicates_atoms[13][5] Bonds : charmm_silicates_bonds[14][5] Angles : charmm_silicates_angles[27][8] Dihedrals : charmm_silicates_dihedrals[34][8] Non bonded : charmm_silicates_vdw[13][6] */ #include "global.h" int charmm_silicates_objects[14] = {13, 0, 0, 14, 0, 0, 27, 0, 34, 0 , 0, 0, 13, 0}; int charmm_silicates_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 0, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm_silicates info */ char * charmm_silicates_atoms[13][5]= {{"H", "1.008000", "HT", "TIPS3P WATER HYDROGEN", "1"}, {"O", "15.99940", "OT", "TIPS3P WATER OXYGEN", "2"}, {"D", "1.008000", "DUM", "dummy atom", "3"}, {"H", "1.008000", "HSiO", "Si hydroxyl hydrogen;", "100"}, {"H", "1.008000", "HSiA", "Si aliphatic hydrogen;", "101"}, {"H", "1.008000", "HAl", "Si aliphatic hydrogen;", "102"}, {"O", "15.999000", "OSiH", "Si Hydroxyl Oxygen;", "103"}, {"O", "15.999000", "OSiE", "Si Ester Oxygen;", "104"}, {"O", "15.999000", "OSiA", "Si Ester Oxygen;", "105"}, {"O", "15.999000", "OAl", "Si Hydroxyl Oxygen;", "106"}, {"Si", "28.085500", "Si", "Si Atom;", "107"}, {"Si", "28.085500", "SiH3", "Si Atom;", "108"}, {"Al", "26.981540", "Al", "Aluminum Atom;", "110"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm_silicates info V(R) = Kb x (R - R0)^2 */ char * charmm_silicates_bonds[14][5]= {{"Si", "OSiE", "302.000", "1.698", " "}, {"Al", "OSiE", "302.000", "1.698", " "}, {"Si", "OSiA", "302.000", "1.698", " "}, {"Si", "OSiH", "325.000", "1.68", " "}, {"Al", "OAl", "302.000", "2.00", " "}, {"SiH3", "OSiE", "304.000", "1.682", " "}, {"HSiO", "OSiH", "566.000", "0.975", " "}, {"HAl", "OAl", "566.000", "0.9600", " "}, {"Al", "HAl", "450.000", "0.9572", " "}, {"Si", "HSiA", "204.0", "1.489", " "}, {"HSiA", "SiH3", "204.0", "1.489", " "}, {"Si", "OAl", "304.000", "1.682", " "}, {"HT", "HT", "0.0", "1.5139", "from TIPS3P geometry (for SHAKE w/PARAM)"}, {"HT", "OT", "450.0", "0.9572", "from TIPS3P geometry"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm_silicates info V(S) = Kub x (S - S0)^2 */ char * charmm_silicates_angles[27][8]= {{"OSiE", "Si", "OSiE", "30.000", "117.00", " ", " ", "from sim1"}, {"OSiE", "SiH3", "OSiE", "30.000", "121.50", " ", " ", "from sim1"}, {"Si", "OSiE", "SiH3", "34.000", "150.50", " ", " ", "from sim1"}, {"Si", "OSiE", "Si", "34.000", "150.00", " ", " ", "from sim1"}, {"Si", "OSiA", "Si", "34.000", "150.00", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiH", "32.000", "126.00", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiA", "30.000", "121.50", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiE", "30.000", "121.50", " ", " ", "from sim1"}, {"SiH3", "OSiE", "SiH3", "34.000", "159.00", " ", " ", "from sim1"}, {"HSiA", "SiH3", "HSiA", "30.00", "119.00", " ", " ", "from sim1"}, {"HSiA", "SiH3", "OSiE", "44.000", "118.00", " ", " ", "from sim1"}, {"Si", "OSiH", "HSiO", "34.00", "122.50", " ", " ", "quartz, from sim2"}, {"OSiE", "Si", "OSiH", "32.000", "126.00", " ", " ", "from sim2"}, {"OSiH", "Si", "OSiH", "30.000", "117.00", " ", " ", "from sim2"}, {"Al", "OAl", "Al", "30.000", "98.00", " ", " ", " "}, {"Al", "OAl", "Si", "30.000", "117.00", " ", " ", " "}, {"OAl", "Si", "OSiE", "30.000", "117.00", " ", " ", " "}, {"HAl", "OAl", "Al", "35.000", "93.40", " ", " ", " "}, {"OAl", "Al", "HAl", "35.000", "93.40", " ", " ", " "}, {"OAl", "Al", "OAl", "30.000", "90.00", " ", " ", " "}, {"OSiE", "Al", "OSiE", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Al", "OAl", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Al", "HAl", "30.00", "119.00", " ", " ", " "}, {"Al", "OSiE", "Si", "30.000", "117.00", " ", " ", " "}, {"Al", "OSiE", "Al", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Si", "HSiA", "44.000", "118.00", " ", " ", " "}, {"HT", "OT", "HT", "55.0", "104.52", " ", " ", "FROM TIPS3P GEOMETRY"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm_silicates info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm_silicates_dihedrals[34][8]= {{"OSiE", "Si", "OSiE", "SiH3", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiE", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiA", "Si", "OSiA", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiA", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "SiH3", "OSiE", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiH", "Si", "OSiE", "SiH3", "0.12000", "5", "0.00", "quartz, from sim1"}, {"Si", "OSiE", "Si", "OSiA", "0.12000", "5", "0.00", "quartz, from sim1"}, {"HSiA", "SiH3", "OSiE", "Si", "0.20000", "3", "0.00", "quartz, from sim1"}, {"HSiA", "SiH3", "OSiE", "SiH3", "0.20000", "3", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiH", "HSiO", "0.30000", "3", "0.00", "quartz, from sim2"}, {"OSiH", "Si", "OSiH", "HSiO", "0.35000", "3", "0.00", "quartz, from sim2"}, {"Si", "OSiA", "Si", "OSiH", "0.12000", "5", "0.00", "quartz, from sim1"}, {"SiH3", "OSiE", "SiH3", "OSiE", "0.18000", "5", "0.00", "quartz, from sim1"}, {"Si", "OSiE", "Si", "HSiA", "0.20000", "3", "0.00", " "}, {"Si", "OSiE", "Si", "OSiH", "0.18000", "5", "0.00", " "}, {"SiH3", "OSiE", "Si", "OSiA", "0.18000", "5", "0.00", " "}, {"OSiA", "Si", "OSiH", "HSiO", "0.35000", "3", "0.00", "quartz, from sim2"}, {"OAl", "Al", "OAl", "HAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Si", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Si", "OAl", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Si", "OSiE", "Si", "OAl", "0.10000", "3", "0.00", " "}, {"Si", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"HAl", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Al", "OSiE", "Si", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "OSiE", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "OAl", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "HAl", "0.10000", "3", "0.00", " "}, {"OSiE", "Al", "OAl", "HAl", "0.10000", "3", "0.00", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm_silicates info V(psi) = Kpsi x (psi - psi0)^2 */ /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm_silicates info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm_silicates_vdw[13][6]= {{"HSiO", "-0.0460", "0.2245", " ", " ", "proteins"}, {"HSiA", "-0.022", "1.3200", " ", " ", "alkane"}, {"HAl", "-0.022", "1.3200", " ", " ", "alkane"}, {"Al", "-0.650", "2.2000", " ", " ", "to Phos"}, {"Si", "-0.600", "2.2000", " ", " ", "to Phos"}, {"SiH3", "-0.600", "2.2000", " ", " ", "to Phos"}, {"OSiH", "-0.1521", "1.7700", " ", " ", "proteins"}, {"OSiE", "-0.1521", "1.7700", " ", " ", "nucleic acids"}, {"OSiA", "-0.1521", "1.7700", " ", " ", "nucleic acids"}, {"OAl", "-0.1521", "1.7700", " ", " ", "proteins"}, {"HT", "-0.046", "0.2245", " ", " ", "water"}, {"OT", "-0.1521", "1.7682", " ", " ", "water"}, {"DUM", "-0.0000", "0.0000", " ", " ", "atom"}}; atomes_1.3.1/src/calc/force_fields/amber98.c0000664000175000017500000013163115212624223020242 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber98.c * @short Amber-98 force field, from 'parm98' * @author Sébastien Le Roux */ /* * This file: 'amber98.c' * * Contains: * Amber-98 force field, data from taken from: - the file: 'parm98' This file contains several tables: Atoms : amber98_atoms[54][4] Equi vdw : amber98_equi[2][12] Bonds : amber98_bonds[83][5] Angles : amber98_angles[191][6] Dihedrals : amber98_dihedrals[83][9] Impropers : amber98_impropers[31][8] Non bonded : amber98_vdw[35][4] */ #include "global.h" int amber98_objects[14] = {54, 2, 0, 83, 0, 0, 191, 0, 83, 0 , 0, 31, 35, 0}; int amber98_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_98 info */ char * amber98_atoms[54][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber98_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber98 info V(R) = Kb x (R - R0)^2 */ char * amber98_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber98_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber98 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber98_dihedrals[83][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"CT", "OS", "CT", "N*", "1", "0.383", "0.0", "-3.", " "}, {"CT", "OS", "CT", "N*", "1", "1.0", "000.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.20", "180.0", "2.", " "}, {"N", "CT", "C", "N", "1", "0.40", "180.0", "-4.", " "}, {"N", "CT", "C", "N", "1", "1.35", "180.0", "-2.", " "}, {"N", "CT", "C", "N", "1", "0.75", "180.0", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.50", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.50", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.50", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.00", "000.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.00", "000.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber98 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber98_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber98 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber98_vdw[35][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"CA", "1.9080", "0.0860", "Spellmeyer"}, {"CM", "1.9080", "0.0860", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}}; atomes_1.3.1/src/calc/force_fields/pcff.c0000664000175000017500000122022515212624223017710 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file pcff.c * @short PCFF force field, from 'PCFF.frc' * @author Sébastien Le Roux */ /* * This file: 'pcff.c' * * Contains: * PCFF force field, data from taken from: - the file: 'PCFF.frc' This file contains several tables: Atoms : PCFF_atoms[133][5] Equivalence : PCFF_equivalence_auto[108][11] Equivalence : PCFF_equivalence[134][7] Quadractic bonds : PCFF_bonds_auto[627][5] Quartic bonds : PCFF_bonds[126][7] Quadratic angles : PCFF_angles_auto[329][6] Quartic angles : PCFF_angles[302][8] Torsions : PCFF_torsions_auto[216][8] Torsions : PCFF_torsions[492][11] Inversions : PCFF_inversions[83][7] Non bonded : PCFF_vdw[94][4] Bond increments : PCFF_bond_increments[564][5] */ #include "global.h" int PCFF_objects[14] = {133, 108, 134, 627, 126, 0, 329, 302, 216, 492, 83, 0, 94, 564}; int PCFF_dim[14] = {5, 11, 7, 5, 7, 0, 6, 8, 8, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= PCFF info */ char * PCFF_atoms[133][5]= {{"Ag", "107.86800", "Ag", "Silver metal", "Ver. 2.1, Ref. 11"}, {"Al", "26.98200", "Al", "Aluminium metal", "Ver. 2.1, Ref. 11"}, {"Au", "196.96700", "Au", "Gold metal", "Ver. 2.1, Ref. 11"}, {"Br", "79.90900", "Br", "bromine ion", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "Cl", "chlorine ion", "Ver. 1.0, Ref. 1"}, {"Cr", "51.99600", "Cr", "Chromium metal", "Ver. 2.1, Ref. 11"}, {"Cu", "63.54600", "Cu", "Copper metal", "Ver. 2.1, Ref. 11"}, {"Fe", "55.84700", "Fe", "Iron metal", "Ver. 2.1, Ref. 11"}, {"K", "39.10200", "K", "Potassium metal", "Ver. 2.1, Ref. 11"}, {"Li", "6.94000", "Li", "Lithium metal", "Ver. 2.1, Ref. 11"}, {"Mo", "95.94000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 11"}, {"Na", "22.99000", "Na", "Sodium metal", "Ver. 2.1, Ref. 11"}, {"Ni", "58.71000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 11"}, {"Pb", "207.20000", "Pb", "Lead metal", "Ver. 2.1, Ref. 11"}, {"Pd", "106.40000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 11"}, {"Pt", "195.09000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 11"}, {"Sn", "118.69000", "Sn", "Tin metal", "Ver. 2.1, Ref. 11"}, {"W", "183.85000", "W", "Tungsten metal", "Ver. 2.1, Ref. 11"}, {"Ar", "39.94400", "ar", "Argon ", "Ver. 2.1, Ref. 8"}, {"Al", "26.98200", "az", "aluminium atom in zeolites", "Ver. 3.0, Ref. 10"}, {"Br", "79.90900", "br", "bromine atom", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c", "generic SP3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c+", "C in guanidinium group", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c-", "C in charged carboxylate", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c1", "sp3 carbon with 1 H 3 heavies", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c2", "sp3 carbon with 2 H's, 2 Heavy's", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3", "sp3 carbon with 3 hHs 1 heavy", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3h", "sp3 carbon in 3-membered ring with hydrogens", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3m", "sp3 carbon in 3-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4h", "sp3 carbon in 4-membered ring with hydrogens", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4m", "sp3 carbon in 4-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c5", "sp2 aromatic carbon in 5-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=", "non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=1", "non aromatic, next to end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=2", "non aromatic doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c_0", "carbonyl carbon of aldehydes, ketones", "Ver. 2.1, Ref. 8"}, {"C", "12.01115", "c_1", "carbonyl carbon of acid, ester, amide", "Ver. 2.1, Ref. 8"}, {"C", "12.01100", "c_2", "carbonyl carbon of carbamate, urea", "Ver. 2.1, Ref. 8"}, {"C", "12.01115", "c_a", "general amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"Ca", "40.08000", "ca+", "calcium ion", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cg", "sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ci", "sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "cl", "chlorine atom", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "co", "sp3 carbon in acetals", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "coh", "sp3 carbon in acetals with hydrogen", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cp", "sp2 aromatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cr", "C in neutral arginine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cs", "sp2 aromatic carbon in 5 membered ring next to S", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct", "sp carbon involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.01100", "cz", "carbonyl carbon of carbonate", "Ver. 2.0, Ref. 5"}, {"D", "2.01400", "dw", "deuterium in heivy water", "Ver. 1.0, Ref. 1"}, {"F", "18.99840", "f", "fluorine atom", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "h", "generic hydrogen bound to C, Si,or H", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h*", "hydrogen bonded to nitrogen, Oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h+", "charged hydrogen in cations", "Ver. 1.0, Ref. 1"}, {"H", "1.00782", "hb", "hydrogen atom in bridging hydroxyl group", "Ver. 3.0, Ref. 10"}, {"H", "1.00797", "hc", "hydrogen bonded to carbon", "Ver. 1.0, Ref. 1"}, {"He", "4.00300", "he", "Helium ", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "hi", "Hydrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "hn", "hydrogen bonded to nitrogen", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "hn2", "amino hydrogen", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "ho", "hydrogen bonded to oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "ho2", "hydroxyl hydrogen", "Ver. 2.1, Ref. 8"}, {"H", "1.00782", "hoa", "hydrogen atom in terminal hydroxyl group on aluminium", "Ver. 3.0, Ref. 10"}, {"H", "1.00782", "hos", "hydrogen atom in terminal hydroxyl group on silicon", "Ver. 3.0, Ref. 10"}, {"H", "1.00797", "hp", "hydrogen bonded to phosphorus", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "hs", "hydrogen bonded to sulfur", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "hsi", "silane hydrogen", "Ver. 2.2, Ref. 9"}, {"H", "1.00797", "hw", "hydrogen in water", "Ver. 1.0, Ref. 1"}, {"I", "126.90440", "i", "iodine atom", "Ver. 1.0, Ref. 1"}, {"Kr", "83.80000", "kr", "Krypton ", "Ver. 2.1, Ref. 8"}, {"N", "14.00670", "n", "generic sp2 nitrogen (in amids))", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n+", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n1", "sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n2", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3m", "sp3 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3n", "sp2 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4m", "sp3 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4n", "sp2 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=", "non aromatic end doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=1", "non aromatic, next to end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=2", "non aromatic doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.01000", "n_2", "nitrogen of urethane", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "na", "sp3 nitrogen in amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nb", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"Ne", "20.18300", "ne", "Neon ", "Ver. 2.1, Ref. 8"}, {"N", "14.00670", "nh", "sp2 nitrogen in 5 or 6 membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nh+", "protonated nitrogen in 6 membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nho", "sp2 nitrogen in 6 membered ring next to a carbonyl", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "ni", "nitrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nn", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "np", "sp2 nitrogen in 5- or 6- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "npc", "sp2 nitrogen in 5- or 6- membered ring and with a heavy atom", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nt", "sp nitrogen involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nz", "sp3 nitrogen bonded to two atoms", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o", "generic SP3 oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o*", "oxygen in water", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o-", "partial double oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o3e", "sp3 oxygen in three membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o4e", "sp3 oxygen in four membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o=", "oxygen double bonded to O, C, S, N, P", "Ver. 2.1, Ref. 8"}, {"O", "15.99940", "o_1", "oxygen in carbonyl group", "Ver. 2.1, Ref. 8"}, {"O", "15.99940", "o_2", "ester oxygen", "Ver. 2.1, Ref. 8"}, {"O", "15.99491", "oah", "oxygen atom in terminal hydroxyl group on aluminium", "Ver. 3.0, Ref. 10"}, {"O", "15.99491", "oas", "oxygen atom between aluminium and silicon", "Ver. 3.0, Ref. 10"}, {"O", "15.99491", "ob", "oxygen atom in bridging hydroxyl group", "Ver. 3.0, Ref. 10"}, {"O", "15.99940", "oc", "sp3 oxygen in ether or acetals", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oe", "sp3 oxygen in ester", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oh", "oxygen bonded to hydrogen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oo", "oxygen in carbonyl group, carbonate only", "Ver. 2.0, Ref. 5"}, {"O", "15.99940", "op", "sp2 aromatic in 5 membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99491", "osh", "oxygen atom in terminal hydroxyl group on silicon", "Ver. 3.0, Ref. 10"}, {"O", "16.00000", "osi", "siloxane oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99491", "oss", "oxygen atom betweem two silicons", "Ver. 3.0, Ref. 10"}, {"O", "15.99940", "oz", "ester oxygen in carbonate", "Ver. 2.0, Ref. 5"}, {"P", "30.97380", "p", "general phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.97380", "p=", "phosphazene phosphorous atom", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s", "sp3 sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s'", "S in thioketone group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s-", "partial double sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s1", "sp3 sulfur involved in (S-S) group of disulfides", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s3e", "sulfur in three membered ring", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s4e", "sulfur in four membered ring", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sf", "S in sulfonate group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sh", "sp3 sulfur in sulfhydryl (-SH) group (e.g. cysteine)", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "si", "silicon atom", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "sio", "siloxane silicon", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sp", "sulfur in an aromatic ring (e.g. thiophene)", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "sz", "silicon atom in zeolites", "Ver. 3.0, Ref. 10"}, {"Xe", "131.30000", "xe", "Xenon ", "Ver. 2.1, Ref. 8"}}; /* Equivalence table for key symbols PCFF auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = PCFF info */ char * PCFF_equivalence_auto[108][11]= {{"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 1"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 1"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.1, Ref. 8"}, {"br", "br", "br", "br_", "br_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 1"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c+", "c+", "c+", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c-", "c-", "c-", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c1", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c2", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3h", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c4h", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c5", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"c=", "c=", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c=1", "c=", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c=2", "c=", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c_0", "c_0", "c_0", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_1", "c_1", "c_1", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_2", "c_2", "c_2", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_a", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca_", "ca_", "ca_", "ca_", "ca_", "ca_", "ca_", "Ver. 2.0, Ref. 1"}, {"cg", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"ci", "cp", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"cl", "cl", "cl", "cl_", "cl_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 1"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"coh", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"cp", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"cr", "cr", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"cs", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"ct", "ct", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 1"}, {"cz", "cz", "cz", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 5"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 1"}, {"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"h+", "h+", "h+", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"he", "he", "he", "he_", "he_", "he_", "he_", "he_", "he_", "he_", "Ver. 2.1, Ref. 8"}, {"hi", "h*", "hi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hn", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hn2", "hn2", "hn2", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"ho", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"ho2", "ho2", "ho2", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hs", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hsi", "hsi", "hsi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.2, Ref. 9"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"i", "i", "i", "i_", "i_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 1"}, {"kr", "kr", "kr", "kr_", "kr_", "kr_", "kr_", "kr_", "kr_", "kr_", "Ver. 2.1, Ref. 8"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n+", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n1", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"n2", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"n3m", "na", "na", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n4", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n4m", "na", "na", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n=", "n=", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n=1", "n=", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n=2", "n=", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n_2", "n_2", "n_2", "n_", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"na", "na", "na", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"nb", "nn", "nn", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"ne", "ne", "ne", "ne_", "ne_", "ne_", "ne_", "ne_", "ne_", "ne_", "Ver. 2.1, Ref. 8"}, {"nh", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nh+", "nh", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nho", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"ni", "nh", "nh", "ni_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nn", "nn", "nn", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"np", "np", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"npc", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nr", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"nt", "nt", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 1"}, {"nz", "nz", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 1"}, {"o", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o-", "o-", "o-", "o-_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o3e", "o", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o4e", "o", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o=", "o-", "o-", "o-_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o_1", "o_1", "o_1", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o_2", "o_2", "o_2", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"oc", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oe", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oh", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oo", "oo", "oo", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 5"}, {"op", "op", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 1"}, {"osi", "osi", "osi", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oz", "oz", "oz", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 5"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 1"}, {"p=", "p=", "p=", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 1"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s'", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s-", "s", "s-", "s-_", "s'_", "s'_", "s_", "s'_", "s_", "s'_", "Ver. 2.0, Ref. 1"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sf", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sh", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 1"}, {"sio", "sio", "sio", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 1"}, {"sp", "sp", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 1"}, {"xe", "xe", "xe", "xe_", "xe_", "xe_", "xe_", "xe_", "xe_", "xe_", "Ver. 2.1, Ref. 8"}}; /* Equivalence table for key symbols PCFF with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = PCFF info */ char * PCFF_equivalence[134][7]= {{"Ag", "Ag", "Ag", "Ag", "Ag", "Ag", "Ver. 2.1, Ref. 11"}, {"Al", "Al", "Al", "Al", "Al", "Al", "Ver. 2.1, Ref. 11"}, {"Au", "Au", "Au", "Au", "Au", "Au", "Ver. 2.1, Ref. 11"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Cr", "Cr", "Cr", "Cr", "Cr", "Cr", "Ver. 2.1, Ref. 11"}, {"Cu", "Cu", "Cu", "Cu", "Cu", "Cu", "Ver. 2.1, Ref. 11"}, {"Fe", "Fe", "Fe", "Fe", "Fe", "Fe", "Ver. 2.1, Ref. 11"}, {"K", "K", "K", "K", "K", "K", "Ver. 2.1, Ref. 11"}, {"Li", "Li", "Li", "Li", "Li", "Li", "Ver. 2.1, Ref. 11"}, {"Mo", "Mo", "Mo", "Mo", "Mo", "Mo", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"Ni", "Ni", "Ni", "Ni", "Ni", "Ni", "Ver. 2.1, Ref. 11"}, {"Pb", "Pb", "Pb", "Pb", "Pb", "Pb", "Ver. 2.1, Ref. 11"}, {"Pd", "Pd", "Pd", "Pd", "Pd", "Pd", "Ver. 2.1, Ref. 11"}, {"Pt", "Pt", "Pt", "Pt", "Pt", "Pt", "Ver. 2.1, Ref. 11"}, {"Sn", "Sn", "Sn", "Sn", "Sn", "Sn", "Ver. 2.1, Ref. 11"}, {"W", "W", "W", "W", "W", "W", "Ver. 2.1, Ref. 11"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 2.1, Ref. 8"}, {"az", "az", "az", "az", "az", "az", "Ver. 3.0, Ref. 10"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c+", "c+", "c+", "c+", "c+", "c+", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "c-", "c-", "c-", "c-", "Ver. 1.0, Ref. 1"}, {"c1", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3h", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4h", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "c=1", "c=", "c=1", "c=", "Ver. 1.0, Ref. 1"}, {"c=2", "c=", "c=2", "c=", "c=2", "c=", "Ver. 1.0, Ref. 1"}, {"c_0", "c_0", "c_0", "c_0", "c_0", "c_0", "Ver. 1.0, Ref. 1"}, {"c_1", "c_1", "c_1", "c_1", "c_1", "c_1", "Ver. 1.0, Ref. 1"}, {"c_2", "c_2", "c_2", "c_2", "c_2", "c_2", "Ver. 1.0, Ref. 1"}, {"c_a", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"cg", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ci", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"coh", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cr", "cr", "cr", "cr", "cr", "cr", "Ver. 1.0, Ref. 1"}, {"cs", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"ct", "ct", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"cz", "cz", "cz", "cz", "cz", "cz", "Ver. 2.0, Ref. 5"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"h+", "h+", "h+", "h+", "h+", "h+", "Ver. 1.0, Ref. 1"}, {"hb", "hb", "hb", "hb", "hb", "hb", "Ver. 3.0, Ref. 10"}, {"hc", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"he", "he", "he", "he", "he", "he", "Ver. 2.1, Ref. 8"}, {"hi", "h*", "hi", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn2", "hn2", "hn2", "hn2", "hn2", "hn2", "Ver. 1.0, Ref. 1"}, {"ho", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"ho2", "ho2", "ho2", "ho2", "ho2", "ho2", "Ver. 1.0, Ref. 1"}, {"hoa", "hoa", "hoa", "hoa", "hoa", "hoa", "Ver. 3.0, Ref. 10"}, {"hos", "hos", "hos", "hos", "hos", "hos", "Ver. 3.0, Ref. 10"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hs", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hsi", "hsi", "h", "h", "h", "h", "Ver. 2.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.0, Ref. 1"}, {"kr", "kr", "kr", "kr", "kr", "kr", "Ver. 2.1, Ref. 8"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n+", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n1", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n2", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n3m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n4", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n4m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n=", "n=", "n=", "n=", "n=", "n=", "Ver. 1.0, Ref. 1"}, {"n=1", "n=", "n=1", "n=", "n=1", "n=", "Ver. 1.0, Ref. 1"}, {"n=2", "n=", "n=2", "n=", "n=2", "n=", "Ver. 1.0, Ref. 1"}, {"n_2", "n_2", "n_2", "n_2", "n_2", "n_2", "Ver. 1.0, Ref. 1"}, {"na", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"nb", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"ne", "ne", "ne", "ne", "ne", "ne", "Ver. 2.1, Ref. 8"}, {"nh", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nh+", "nh", "nh+", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nho", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"ni", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nn", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"np", "np", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"npc", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nr", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "nz", "nz", "nz", "nz", "nz", "Ver. 1.0, Ref. 1"}, {"o", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"o-", "o-", "o-", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o3e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o4e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o=", "o=", "o=", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o_1", "o_1", "o_1", "o_1", "o_1", "o_1", "Ver. 1.0, Ref. 1"}, {"o_2", "o_2", "o_2", "o_2", "o_2", "o_2", "Ver. 1.0, Ref. 1"}, {"oah", "oah", "oah", "oah", "oah", "oah", "Ver. 3.0, Ref. 10"}, {"oas", "oas", "oas", "oas", "oas", "oas", "Ver. 3.0, Ref. 10"}, {"ob", "ob", "ob", "ob", "ob", "ob", "Ver. 3.0, Ref. 10"}, {"oc", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oe", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oh", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oo", "oo", "oo", "oo", "oo", "oo", "Ver. 2.0, Ref. 5"}, {"op", "op", "op", "op", "op", "op", "Ver. 1.0, Ref. 1"}, {"osh", "osh", "osh", "osh", "osh", "osh", "Ver. 3.0, Ref. 10"}, {"osi", "osi", "osi", "osi", "osi", "osi", "Ver. 1.0, Ref. 1"}, {"oss", "oss", "oss", "oss", "oss", "oss", "Ver. 3.0, Ref. 10"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 2.0, Ref. 5"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"p=", "p=", "p=", "p=", "p=", "p=", "Ver. 1.0, Ref. 1"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 1"}, {"s-", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sf", "s'", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 1"}, {"sh", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sio", "sio", "sio", "sio", "sio", "sio", "Ver. 1.0, Ref. 1"}, {"sp", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 3.0, Ref. 10"}, {"xe", "xe", "xe", "xe", "xe", "xe", "Ver. 2.1, Ref. 8"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= PCFF info E = K2 * (R - R0)^2 */ char * PCFF_bonds_auto[627][5]= {{"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 2"}, {"br_", "c'_", "1.8750", "228.2808", "Ver. 2.0, Ref. 2"}, {"br_", "c3m_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "c4m_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "c=", "1.8800", "253.7008", "Ver. 2.0, Ref. 2"}, {"br_", "c=_1", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c=_2", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c=_3", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "cl_", "2.1320", "209.1876", "Ver. 2.0, Ref. 2"}, {"br_", "cp_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "ct_", "1.8250", "268.8528", "Ver. 2.0, Ref. 2"}, {"br_", "f_", "1.7950", "193.5000", "Ver. 2.0, Ref. 2"}, {"br_", "h_", "1.5080", "314.1728", "Ver. 2.0, Ref. 2"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 2"}, {"br_", "n+_", "1.8370", "196.5940", "Ver. 2.0, Ref. 2"}, {"br_", "n3m_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "n4m_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "n=", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"br_", "n=_1", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n=_2", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n=_3", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n_", "1.8100", "206.3980", "Ver. 2.0, Ref. 2"}, {"br_", "na_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "np_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"br_", "o'_", "1.7550", "233.2954", "Ver. 2.0, Ref. 2"}, {"br_", "o_", "1.7980", "284.7988", "Ver. 2.0, Ref. 2"}, {"br_", "op_", "1.7550", "260.8954", "Ver. 2.0, Ref. 2"}, {"br_", "p_", "2.1800", "183.1472", "Ver. 2.0, Ref. 2"}, {"br_", "s'_", "2.1450", "187.6017", "Ver. 2.0, Ref. 2"}, {"br_", "s3e_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "s4e_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "s_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 2"}, {"br_", "sp_", "2.1450", "172.8017", "Ver. 2.0, Ref. 2"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 2"}, {"c'_", "c3m_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "c4m_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 2"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 2"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 2"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 2"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 2"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 2"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 2"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 2"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 2"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 2"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 2"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 2"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 2"}, {"c=", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 2"}, {"c=", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 2"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 2"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 2"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 2"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 2"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 2"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 2"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 2"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 2"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 2"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 2"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 2"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 2"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_1", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_2", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_3", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_3", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"ci_", "ci_", "1.3900", "280.0000", "Ver. 2.0, Ref. 2"}, {"ci_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"ci_", "ni_", "1.3800", "320.0000", "Ver. 2.0, Ref. 2"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 2"}, {"cl_", "cp_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"cl_", "ct_", "1.6770", "292.1952", "Ver. 2.0, Ref. 2"}, {"cl_", "f_", "1.6470", "207.1180", "Ver. 2.0, Ref. 2"}, {"cl_", "h_", "1.3600", "345.9024", "Ver. 2.0, Ref. 2"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 2"}, {"cl_", "n+_", "1.6890", "217.7248", "Ver. 2.0, Ref. 2"}, {"cl_", "n3m_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "n4m_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "n=", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"cl_", "n=_1", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n=_2", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n=_3", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n_", "1.6620", "227.5604", "Ver. 2.0, Ref. 2"}, {"cl_", "na_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "np_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"cl_", "o'_", "1.6070", "251.7939", "Ver. 2.0, Ref. 2"}, {"cl_", "o_", "1.6500", "307.0632", "Ver. 2.0, Ref. 2"}, {"cl_", "op_", "1.6070", "279.3939", "Ver. 2.0, Ref. 2"}, {"cl_", "p_", "2.0430", "208.8228", "Ver. 2.0, Ref. 2"}, {"cl_", "s'_", "1.9970", "211.1368", "Ver. 2.0, Ref. 2"}, {"cl_", "s3e_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "s4e_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "s_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 2"}, {"cl_", "sp_", "1.9970", "196.3368", "Ver. 2.0, Ref. 2"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 2"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 2"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 2"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 2"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 2"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 2"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 2"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 2"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 2"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 2"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 2"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 2"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 2"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 2"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 2"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 2"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 2"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 2"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 2"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 2"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 2"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 2"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 2"}, {"f_", "h_", "1.0230", "520.7304", "Ver. 2.0, Ref. 2"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 2"}, {"f_", "n+_", "1.3520", "178.0372", "Ver. 2.0, Ref. 2"}, {"f_", "n3m_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "n4m_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "n=", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"f_", "n=_1", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n=_2", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n=_3", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n_", "1.3250", "189.3856", "Ver. 2.0, Ref. 2"}, {"f_", "na_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "np_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"f_", "o'_", "1.2700", "204.0505", "Ver. 2.0, Ref. 2"}, {"f_", "o_", "1.4180", "224.0000", "Ver. 2.0, Ref. 2"}, {"f_", "op_", "1.2700", "231.6505", "Ver. 2.0, Ref. 2"}, {"f_", "p_", "1.5400", "230.3664", "Ver. 2.0, Ref. 2"}, {"f_", "s'_", "1.6600", "195.3021", "Ver. 2.0, Ref. 2"}, {"f_", "s3e_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "s4e_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "s_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 2"}, {"f_", "sp_", "1.6600", "180.5021", "Ver. 2.0, Ref. 2"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 2"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 2"}, {"h_", "n+_", "1.0650", "461.1848", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "n=", "1.0380", "551.2061", "Ver. 2.0, Ref. 2"}, {"h_", "n=_1", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n=_2", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n=_3", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"h_", "na_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"h_", "o'_", "0.9830", "458.4610", "Ver. 2.0, Ref. 2"}, {"h_", "o_", "0.9600", "493.8480", "Ver. 2.0, Ref. 2"}, {"h_", "op_", "0.9830", "486.0610", "Ver. 2.0, Ref. 2"}, {"h_", "p_", "1.4300", "224.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s'_", "1.3730", "316.8138", "Ver. 2.0, Ref. 2"}, {"h_", "s3e_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "s4e_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "s_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 2"}, {"h_", "sp_", "1.3730", "236.5449", "Ver. 2.0, Ref. 2"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 2"}, {"i_", "n+_", "2.0230", "177.2764", "Ver. 2.0, Ref. 2"}, {"i_", "n3m_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "n4m_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "n=", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"i_", "n=_1", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n=_2", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n=_3", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n_", "1.9960", "186.6972", "Ver. 2.0, Ref. 2"}, {"i_", "na_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "np_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"i_", "o'_", "1.9410", "213.2317", "Ver. 2.0, Ref. 2"}, {"i_", "o_", "1.9840", "264.9868", "Ver. 2.0, Ref. 2"}, {"i_", "op_", "1.9410", "240.8317", "Ver. 2.0, Ref. 2"}, {"i_", "p_", "2.3110", "162.7080", "Ver. 2.0, Ref. 2"}, {"i_", "s'_", "2.3310", "167.6272", "Ver. 2.0, Ref. 2"}, {"i_", "s3e_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "s4e_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "s_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 2"}, {"i_", "sp_", "2.3310", "152.8272", "Ver. 2.0, Ref. 2"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 2"}, {"n+_", "n3m_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "n4m_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "n=", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n+_", "n=_1", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n=_2", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n=_3", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n_", "1.3670", "210.6360", "Ver. 2.0, Ref. 2"}, {"n+_", "na_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "np_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 2"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 2"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 2"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 2"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 2"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 2"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 2"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n3m_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n4m_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 2"}, {"n=", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n=", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n=", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 2"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 2"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_1", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_1", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 3"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 3"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=_2", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_2", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_2", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 3"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 3"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_3", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_3", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_3", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 3"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 3"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 2"}, {"n_", "na_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 2"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 2"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 2"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 2"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 2"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 2"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 2"}, {"o'_", "o_", "1.2430", "323.1720", "Ver. 2.0, Ref. 2"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 2"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 2"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 2"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 2"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 2"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 2"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 2"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 2"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 2"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 2"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 2"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 2"}, {"p_", "s'_", "1.9700", "255.2524", "Ver. 2.0, Ref. 2"}, {"p_", "s-_", "1.9800", "210.9800", "Ver. 2.0, Ref. 2"}, {"p_", "s3e_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "s4e_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "s_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 2"}, {"p_", "sp_", "1.9900", "175.1796", "Ver. 2.0, Ref. 2"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 2"}, {"s'_", "sp_", "1.9900", "240.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s3e_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s4e_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 2"}, {"si_", "sp_", "2.1000", "167.4260", "Ver. 2.0, Ref. 2"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 2"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= PCFF info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * PCFF_bonds[126][7]= {{"az", "oah", "1.6987", "330.3950", "-600.3590", "662.1600", "Ver. 3.0, Ref. 10"}, {"az", "oas", "1.6614", "378.8170", "-590.1830", "419.2000", "Ver. 3.0, Ref. 10"}, {"az", "ob", "2.2643", "131.8700", "462.6760", "650.2020", "Ver. 3.0, Ref. 10"}, {"br", "c", "1.9390", "151.1370", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 2.1, Ref. 8"}, {"c", "c", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c", "c-", "1.5483", "253.0800", "-449.0300", "457.3200", "Ver. 1.0, Ref. 1"}, {"c", "c=", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "1.5202", "253.7067", "-423.0370", "396.9000", "Ver. 1.0, Ref. 1"}, {"c", "cl", "1.7900", "194.3190", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "cp", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"c", "f", "1.3900", "403.0320", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "h", "1.1010", "345.0000", "-691.8900", "844.6000", "Ver. 2.1, Ref. 8"}, {"c", "h", "1.1010", "341.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4520", "327.1657", "-547.8990", "526.5000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "1.5185", "293.1700", "-603.7882", "629.6900", "Ver. 1.0, Ref. 1"}, {"c", "n=", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n=1", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n=2", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n_2", "1.4632", "319.1593", "-586.3243", "961.4143", "Ver. 2.1, Ref. 7"}, {"c", "na", "1.4570", "365.8052", "-699.6368", "998.4842", "Ver. 1.0, Ref. 1"}, {"c", "nr", "1.4695", "340.2400", "-589.4800", "854.5300", "Ver. 1.0, Ref. 1"}, {"c", "o", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 1"}, {"c", "o_2", "1.4300", "326.7273", "-608.5306", "689.0333", "Ver. 2.2, Ref. 7"}, {"c", "o_2", "1.4457", "326.7273", "-608.5306", "689.0333", "Ver. 2.1, Ref. 6"}, {"c", "oz", "1.4457", "326.7273", "-608.5306", "689.0333", "Ver. 2.0, Ref. 5"}, {"c", "s", "1.8230", "225.2768", "-327.7057", "488.9722", "Ver. 1.0, Ref. 1"}, {"c", "si", "1.8995", "189.6536", "-279.4210", "307.5135", "Ver. 2.2, Ref. 9"}, {"c", "sio", "1.9073", "157.0049", "-237.7023", "356.0328", "Ver. 1.0, Ref. 4"}, {"c+", "nr", "1.3834", "380.4600", "-814.4300", "1153.3000", "Ver. 1.0, Ref. 1"}, {"c-", "h", "1.1331", "241.0600", "-574.7800", "853.7500", "Ver. 1.0, Ref. 1"}, {"c-", "o-", "1.2339", "711.3500", "-1543.9000", "1858.6000", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3400", "543.9900", "-1238.2025", "1644.0282", "Ver. 3.1, Ref. 12"}, {"c=", "c=1", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=2", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c_1", "1.4600", "270.1200", "-433.2519", "405.3601", "Ver. 3.1, Ref. 12"}, {"c=", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=", "n_2", "1.3600", "380.8100", "-725.2168", "805.6459", "Ver. 3.1, Ref. 12"}, {"c=1", "c=2", "1.4400", "304.9700", "-519.7458", "516.7039", "Ver. 3.1, Ref. 12"}, {"c=1", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=2", "c=2", "1.3400", "543.9900", "-1238.2025", "1644.0282", "Ver. 3.1, Ref. 12"}, {"c=2", "c_1", "1.4600", "270.1200", "-433.2519", "405.3601", "Ver. 3.1, Ref. 12"}, {"c=2", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=2", "o=", "1.1600", "1112.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c=2", "s'", "1.5526", "567.3600", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_0", "cp", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 2.1, Ref. 8"}, {"c_0", "h", "1.1220", "304.8631", "-623.3705", "700.2828", "Ver. 2.1, Ref. 8"}, {"c_0", "o_1", "1.2160", "823.7948", "-1878.7940", "2303.5311", "Ver. 2.1, Ref. 8"}, {"c_1", "cp", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 2.1, Ref. 6"}, {"c_1", "h", "1.1110", "325.5717", "-632.1990", "726.0003", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "1.4160", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 1"}, {"c_1", "n_2", "1.3660", "390.6783", "-768.3798", "923.2418", "Ver. 2.1, Ref. 8"}, {"c_1", "o", "1.3649", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 1"}, {"c_1", "o_1", "1.2020", "851.1403", "-1918.4882", "2160.7659", "Ver. 2.1, Ref. 6"}, {"c_1", "o_1", "1.2195", "820.7018", "-1875.1000", "2303.7600", "Ver. 1.0, Ref. 1"}, {"c_1", "o_2", "1.3683", "367.1481", "-794.7908", "1055.2319", "Ver. 2.1, Ref. 6"}, {"c_2", "n_2", "1.3580", "440.6783", "-828.3798", "1423.2418", "Ver. 2.1, Ref. 7"}, {"c_2", "o_1", "1.2063", "854.2903", "-1922.3407", "2101.6824", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "1.3598", "391.3310", "-788.5655", "1212.3812", "Ver. 2.1, Ref. 7"}, {"cl", "p=", "2.0378", "158.7770", "-239.1290", "210.0844", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "1.4170", "470.8361", "-627.6179", "1327.6345", "Ver. 2.1, Ref. 8"}, {"cp", "cp", "1.3823", "476.2720", "-869.7532", "1281.3640", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "1.4314", "356.0904", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0982", "372.8251", "-803.4526", "894.3173", "Ver. 2.1, Ref. 8"}, {"cp", "h", "1.0731", "374.9058", "-799.8437", "899.9151", "Ver. 2.0, Ref. 5"}, {"cp", "n_2", "1.4390", "344.0452", "-652.1208", "1022.2242", "Ver. 2.1, Ref. 7"}, {"cp", "nh", "1.3749", "477.5202", "-848.5592", "1022.3909", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "1.3912", "447.0438", "-784.5346", "886.1671", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.3485", "508.8587", "-977.6914", "1772.5134", "Ver. 1.0, Ref. 1"}, {"cp", "o", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 1"}, {"cp", "o_2", "1.4098", "387.9119", "-715.9186", "660.2442", "Ver. 2.1, Ref. 6"}, {"cp", "op", "1.3597", "547.5169", "-834.0665", "544.3090", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "1.3828", "387.9119", "-715.9186", "660.2442", "Ver. 2.0, Ref. 5"}, {"cp", "p=", "1.7886", "197.7015", "-332.2507", "325.7157", "Ver. 3.1, Ref. 12"}, {"cp", "si", "1.8634", "233.2433", "-276.8692", "161.6659", "Ver. 2.2, Ref. 9"}, {"cp", "sp", "1.7053", "364.2568", "-457.7758", "291.1498", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 2"}, {"cr", "n=1", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"cr", "n=2", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"cr", "nr", "1.3200", "388.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 2"}, {"cz", "oo", "1.1953", "854.2903", "-1922.3407", "2301.6824", "Ver. 2.0, Ref. 5"}, {"cz", "oz", "1.3398", "391.3310", "-788.5655", "1212.3812", "Ver. 2.0, Ref. 5"}, {"f", "f", "1.4200", "330.3795", "-647.0052", "760.1593", "Ver. 1.0, Ref. 4"}, {"f", "h*", "0.9170", "695.3795", "-1736.0052", "2430.1593", "Ver. 1.0, Ref. 4"}, {"f", "p=", "1.5632", "379.1441", "-882.3835", "1197.9185", "Ver. 3.1, Ref. 12"}, {"h", "h", "0.7414", "414.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "p=", "1.3861", "285.2043", "-575.6851", "677.8456", "Ver. 3.1, Ref. 12"}, {"h", "s", "1.3261", "275.1123", "-531.3181", "562.9630", "Ver. 1.0, Ref. 1"}, {"h", "si", "1.4783", "202.7798", "-305.3603", "280.2685", "Ver. 2.2, Ref. 9"}, {"h", "sio", "1.4802", "187.1010", "-280.7306", "258.8998", "Ver. 1.0, Ref. 4"}, {"h*", "n", "1.0100", "462.7500", "-1053.6300", "1545.7570", "Ver. 1.0, Ref. 1"}, {"h*", "n=", "1.0025", "540.1120", "-1500.2952", "2431.0081", "Ver. 3.1, Ref. 12"}, {"h*", "na", "1.0060", "466.7400", "-1073.6018", "1251.1056", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "1.0012", "465.8608", "-1066.2360", "1496.5647", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "1.0023", "462.3900", "-1044.6000", "1468.7000", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.9650", "532.5062", "-1282.9050", "2004.7658", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "0.9700", "563.2800", "-1428.2200", "1902.1200", "Ver. 1.2, Ref. 3"}, {"h*", "osi", "0.9494", "540.3633", "-1311.8663", "2132.4446", "Ver. 1.0, Ref. 4"}, {"h+", "n+", "1.0119", "448.6300", "-963.1917", "1248.4000", "Ver. 1.0, Ref. 1"}, {"hb", "ob", "0.9513", "665.5370", "-1616.9700", "2259.4700", "Ver. 3.0, Ref. 10"}, {"hi", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.1, Ref. 2"}, {"hn2", "n_2", "0.9959", "495.8294", "-1092.7239", "1441.1290", "Ver. 2.1, Ref. 7"}, {"ho2", "o_2", "0.9520", "534.2994", "-1287.1937", "1889.1396", "Ver. 2.1, Ref. 6"}, {"ho2", "oz", "0.9520", "534.2994", "-1287.1937", "1889.1396", "Ver. 2.0, Ref. 5"}, {"hoa", "oah", "0.9421", "719.2330", "-1606.4200", "2199.7200", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "0.9457", "702.8730", "-1531.8700", "1814.8300", "Ver. 3.0, Ref. 10"}, {"n", "p=", "1.6580", "329.1660", "-713.7949", "902.9188", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "1.5880", "429.1660", "-751.4047", "767.4308", "Ver. 3.1, Ref. 12"}, {"nh", "np", "1.3204", "646.7598", "-1639.8800", "6799.7099", "Ver. 1.0, Ref. 1"}, {"np", "np", "1.3121", "513.0111", "-873.6366", "1634.3437", "Ver. 1.0, Ref. 1"}, {"nz", "nz", "1.0977", "1652.4000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "p=", "1.6090", "333.0981", "-726.6232", "924.6198", "Ver. 3.1, Ref. 12"}, {"o=", "o=", "1.2074", "847.4400", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o=", "s'", "1.4308", "743.7600", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"oas", "sz", "1.5923", "392.6680", "-1004.4800", "3452.8601", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "1.6446", "393.6690", "-989.8420", "1461.9800", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "1.6125", "420.0240", "-845.6110", "1438.6300", "Ver. 3.0, Ref. 10"}, {"osi", "sio", "1.6562", "306.1232", "-517.3424", "673.7067", "Ver. 1.0, Ref. 4"}, {"oss", "sz", "1.6155", "325.4430", "-943.3640", "1454.6700", "Ver. 3.0, Ref. 10"}, {"s", "s", "2.0559", "197.6560", "-196.1366", "644.4103", "Ver. 1.0, Ref. 1"}, {"si", "si", "2.3384", "114.2164", "-140.4212", "80.7084", "Ver. 2.2, Ref. 9"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= PCFF info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * PCFF_angles_auto[329][6]= {{"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "h_", "110.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "f_", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s'_", "123.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s3e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s4e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o'_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o_", "110.0000", "122.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n3m_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n4m_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c3m_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c4m_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n3m_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n4m_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "o'_", "120.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "o'_", "125.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "o'_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "o'_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o'_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o3e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o4e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "o3e_", "60.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o'_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o3e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o4e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "h_", "120.0000", "37.5000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "f_", "120.0000", "96.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s'_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s3e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s4e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "o'_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "o_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n3m_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n4m_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c3m_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c4m_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "h_", "120.0000", "37.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "f_", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s'_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s3e_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s4e_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o'_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n3m_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n4m_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c3m_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c4m_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "s_", "114.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "c_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c_", "113.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "c_", "110.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "si_", "120.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "f_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "h_", "122.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s'_", "120.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s3e_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s4e_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o'_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "n_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c3m_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c4m_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "si_", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "f_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "h_", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s'_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s3e_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s4e_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o'_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "n_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c3m_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c4m_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "nt_", "*", "180.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "si_", "124.1000", "56.4000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "h_", "109.0000", "58.5000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "f_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s'_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s3e_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s4e_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o'_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n3m_", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n4m_", "120.0010", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n_", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c3m_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c4m_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"si", "o_", "si_", "149.8000", "31.1000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "si_", "106.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "si_", "109.5000", "30.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "h_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "f_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s'_", "120.0000", "100.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "o'_", "120.0000", "110.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "o_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "n_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c3m_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c4m_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c_", "102.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "si_", "113.4000", "33.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "f_", "117.3000", "44.1000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "s_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "n_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c3m_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c4m_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "si_", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "h_", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "f_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "s'_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "s_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "o'_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "o_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "n_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c3m_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c4m_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= PCFF info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * PCFF_angles[302][8]= {{"oah", "az", "oah", "119.5540", "56.2161", "67.5146", "75.6704", "Ver. 3.0, Ref. 10"}, {"oah", "az", "oas", "135.8500", "1.5716", "-23.2602", "24.2341", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "96.9383", "41.2978", "-101.1850", "180.8230", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oas", "114.1500", "112.9470", "-37.6330", "22.7467", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "97.0360", "73.0531", "-31.9551", "5.5982", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "97.0360", "73.0531", "-31.9551", "5.5982", "Ver. 3.0, Ref. 10"}, {"br", "c", "br", "109.6985", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "109.1026", "64.7730", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "cl", "111.6408", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "h", "106.9999", "46.0608", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "104.4900", "31.3750", "-4.4023", "-6.5271", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_0", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_1", "108.5295", "51.9747", "-9.4851", "-10.9985", "Ver. 2.1, Ref. 8"}, {"c", "c", "cl", "107.0000", "61.1745", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.3, Ref. 1"}, {"c", "c", "f", "109.2000", "68.3715", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "h", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "114.3018", "42.6589", "-10.5464", "-9.3243", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "112.1300", "66.4520", "4.8694", "37.7860", "Ver. 1.0, Ref. 1"}, {"c", "c", "n=", "117.2847", "55.4431", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "c", "n_2", "109.8300", "76.8966", "-48.7334", "18.0162", "Ver. 2.1, Ref. 7"}, {"c", "c", "na", "111.9100", "60.7147", "-13.3366", "-13.0785", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "117.3500", "55.0400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 1"}, {"c", "c", "o_2", "107.4100", "63.3907", "-13.4513", "1.6650", "Ver. 2.1, Ref. 6"}, {"c", "c", "oz", "105.4100", "63.3907", "-13.4513", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "c", "s", "112.5642", "47.0276", "-10.6790", "-10.1687", "Ver. 1.0, Ref. 1"}, {"c", "c", "si", "112.6700", "39.5160", "-7.4430", "0.0000", "Ver. 2.2, Ref. 9"}, {"c-", "c", "h", "109.6700", "37.9190", "-7.3877", "-8.0694", "Ver. 1.0, Ref. 1"}, {"c-", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c=", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "h", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "o", "106.1764", "74.4143", "-12.6018", "-48.7850", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "h", "107.7336", "40.6099", "-28.8121", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n+", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"cl", "c", "cl", "111.6408", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cl", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cl", "c", "h", "107.9968", "51.0987", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c", "cp", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.5, Ref. 4"}, {"cp", "c", "h", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"f", "c", "h", "108.5010", "57.5760", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c", "h", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "108.9372", "57.4010", "2.9374", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "105.8500", "72.2630", "-28.1923", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n=", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=2", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n_2", "108.5330", "66.9202", "-13.6480", "10.3280", "Ver. 2.1, Ref. 7"}, {"h", "c", "na", "110.6204", "51.3137", "-6.7198", "-2.6003", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "107.5000", "62.6790", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 1"}, {"h", "c", "o_2", "107.6880", "65.4801", "-10.3498", "5.8866", "Ver. 2.1, Ref. 6"}, {"h", "c", "oz", "107.6880", "70.4801", "-10.3498", "0.0000", "Ver. 2.0, Ref. 5"}, {"h", "c", "s", "107.8522", "51.4949", "-13.5270", "7.0260", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "112.0355", "28.7721", "-13.9523", "0.0000", "Ver. 2.2, Ref. 9"}, {"h", "c", "sio", "111.5360", "30.2481", "-15.5255", "0.0000", "Ver. 1.0, Ref. 4"}, {"s", "c", "s", "111.5000", "27.9677", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "117.4500", "83.9840", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "115.0600", "59.0960", "-15.1430", "-12.9820", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "112.7500", "61.1530", "-14.0190", "-13.2380", "Ver. 1.0, Ref. 1"}, {"o-", "c-", "o-", "130.0100", "111.2900", "-52.3390", "-28.1070", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "117.6000", "56.4800", "-16.2283", "-12.6333", "Ver. 3.1, Ref. 12"}, {"c=", "c=", "c_1", "121.1000", "66.1100", "-22.0206", "-15.2133", "Ver. 3.1, Ref. 12"}, {"c=", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "n_2", "121.0000", "55.9100", "-18.5471", "-12.8549", "Ver. 3.1, Ref. 12"}, {"c=1", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c_1", "c=", "h", "120.3000", "35.7000", "-11.5062", "-8.1591", "Ver. 3.1, Ref. 12"}, {"h", "c=", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"h", "c=", "n_2", "115.7000", "38.2900", "-10.1050", "-8.4480", "Ver. 3.1, Ref. 12"}, {"o-", "c=", "o-", "180.0000", "200.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"s'", "c=", "s'", "180.0000", "70.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c=1", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"h", "c=2", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "c", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "cp", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "o_1", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "cp", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "o_1", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "h", "108.6000", "40.0764", "-6.8139", "-8.4349", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "o_1", "116.5000", "59.6420", "-21.9179", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "116.9257", "39.4193", "-10.9945", "-8.7733", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_1", "123.1451", "55.5431", "-17.2123", "0.1348", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "100.3182", "38.8631", "-3.8323", "-7.9802", "Ver. 2.1, Ref. 8"}, {"c=", "c_1", "n_2", "113.6000", "41.1200", "-9.8283", "-8.9479", "Ver. 3.1, Ref. 12"}, {"c=", "c_1", "o_1", "125.9000", "46.0600", "-18.5463", "-11.0998", "Ver. 3.1, Ref. 12"}, {"cp", "c_1", "n_2", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "o_1", "125.5320", "72.3167", "-16.0650", "2.0818", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n_2", "110.3935", "52.1647", "-18.4845", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_1", "117.8326", "45.9187", "-22.5264", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_2", "110.5209", "32.3751", "-0.6174", "-6.5639", "Ver. 2.1, Ref. 8"}, {"n", "c_1", "n", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.0, Ref. 1"}, {"n", "c_1", "o_1", "125.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 1"}, {"n_2", "c_1", "o_1", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "c_1", "o_1", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "o_2", "120.7970", "95.3446", "-32.2869", "6.3778", "Ver. 2.1, Ref. 6"}, {"n_2", "c_2", "n_2", "114.5292", "104.0857", "-36.7315", "24.2616", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_1", "125.5320", "101.8765", "-41.8094", "7.7236", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "108.4400", "112.4403", "-59.9730", "38.3067", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "120.7970", "95.3446", "-32.2869", "6.3778", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "109.4930", "137.9111", "-39.8755", "59.0768", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "np", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.3, Ref. 1"}, {"c_0", "cp", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c_1", "cp", "cp", "116.0640", "71.2598", "-15.8273", "2.0506", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n_2", "120.7640", "73.2738", "-27.4033", "13.3920", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "nh", "112.5900", "78.6418", "-16.3888", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "121.4584", "61.0647", "-21.6172", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "116.5100", "76.6970", "-35.3868", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o_2", "117.1400", "33.0391", "-14.7807", "3.8573", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "op", "104.1700", "101.3206", "-17.3072", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "oz", "120.1400", "33.0391", "-14.7807", "0.0000", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "p=", "120.0007", "47.8413", "-15.2288", "-10.9066", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "si", "120.0000", "30.4689", "-23.5439", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "sp", "105.5300", "96.2006", "-44.9267", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "109.8000", "43.8408", "-9.5153", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "110.5500", "40.8275", "-13.0318", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "106.1700", "48.0995", "-9.0144", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "115.9800", "36.7902", "-13.1342", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "105.0080", "107.0693", "-27.7154", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "108.9100", "98.8519", "-5.7502", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "118.5414", "56.9522", "-7.2655", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "115.3800", "85.4923", "-6.5225", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "104.0100", "104.4800", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "114.2300", "92.3110", "-35.5956", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=2", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "nr", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "120.0510", "97.3782", "-26.5619", "0.0000", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "109.4930", "137.9111", "-39.8755", "59.0768", "Ver. 2.0, Ref. 5"}, {"c", "n", "c", "111.5635", "39.6084", "-8.5459", "-8.5152", "Ver. 1.0, Ref. 1"}, {"c", "n", "c_1", "111.0372", "31.8958", "-6.6942", "-6.8370", "Ver. 1.0, Ref. 1"}, {"c", "n", "h*", "113.8683", "45.9271", "-20.0824", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "p=", "120.0833", "25.0010", "-6.1167", "-5.4570", "Ver. 3.1, Ref. 12"}, {"c_1", "n", "c_1", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "h*", "117.9607", "37.4964", "-8.1837", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "h*", "116.9402", "37.5749", "-8.6676", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "p=", "114.0833", "25.0010", "-6.1167", "-5.4570", "Ver. 3.1, Ref. 12"}, {"c", "n+", "c", "109.7700", "44.8220", "-3.9132", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "h+", "110.5100", "49.2170", "-12.2153", "-18.9667", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "h+", "106.1100", "45.3280", "-14.0474", "1.9350", "Ver. 1.0, Ref. 1"}, {"c", "n=", "cr", "117.0900", "31.6888", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "n=", "p=", "120.0000", "26.0683", "-8.2978", "-5.9429", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "118.2000", "36.0683", "-7.6881", "-5.8576", "Ver. 3.1, Ref. 12"}, {"c", "n_2", "c_1", "122.7520", "60.4647", "-29.6188", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "n_2", "c_2", "122.7520", "60.4647", "-29.6188", "5.3290", "Ver. 2.1, Ref. 7"}, {"c", "n_2", "hn2", "120.1350", "29.2218", "-14.1448", "7.2380", "Ver. 2.1, Ref. 7"}, {"c=", "n_2", "c_1", "125.1000", "67.5900", "-26.3889", "-16.1536", "Ver. 3.1, Ref. 12"}, {"c=", "n_2", "hn2", "120.1000", "52.1200", "-16.6595", "-11.8919", "Ver. 3.1, Ref. 12"}, {"c_1", "n_2", "cp", "116.6260", "42.4711", "-10.4269", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "n_2", "hn2", "122.9480", "40.4820", "-16.2028", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_2", "n_2", "cp", "120.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 7"}, {"c_2", "n_2", "hn2", "122.9480", "40.4820", "-16.2028", "8.3280", "Ver. 2.1, Ref. 7"}, {"cp", "n_2", "hn2", "116.3230", "18.3123", "-7.8325", "5.3290", "Ver. 2.1, Ref. 7"}, {"hn2", "n_2", "hn2", "122.3730", "27.6081", "-10.3291", "9.2800", "Ver. 2.1, Ref. 7"}, {"c", "na", "c", "112.4436", "47.2337", "-10.6612", "-10.2062", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "110.9538", "50.8652", "-4.4522", "-10.0298", "Ver. 1.0, Ref. 1"}, {"h*", "na", "h*", "107.0671", "45.2520", "-7.5558", "-9.5120", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "106.0100", "109.7746", "-9.0636", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "109.3800", "47.0120", "-17.3556", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "109.3900", "119.1811", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "99.4530", "41.6499", "-5.7422", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "111.8725", "40.8369", "-15.6673", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "h*", "107.5130", "42.5182", "-21.7566", "-4.3372", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "111.6800", "84.5159", "-48.5528", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "nh", "108.2200", "119.0383", "-24.2061", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "106.0400", "109.1158", "-42.9319", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "117.0900", "31.4400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "h*", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "119.0700", "45.8110", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "122.9480", "40.4820", "-16.2028", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "nr", "h*", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 1"}, {"c", "o", "c_1", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 1"}, {"c", "o", "cp", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.4, Ref. 1"}, {"c", "o", "h*", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 1"}, {"c", "o", "p=", "118.2833", "35.0010", "-10.3597", "-7.8699", "Ver. 3.1, Ref. 12"}, {"c_1", "o", "h*", "111.2537", "53.5303", "-11.8454", "-11.5405", "Ver. 1.0, Ref. 1"}, {"cp", "o", "h*", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o", "p=", "112.2833", "26.0310", "-5.8280", "-5.6195", "Ver. 3.1, Ref. 12"}, {"h*", "o*", "h*", "103.7000", "49.8400", "-11.6000", "-8.0000", "Ver. 1.2, Ref. 1"}, {"c", "o_2", "c_1", "113.2880", "61.2868", "-28.9786", "7.9929", "Ver. 2.1, Ref. 6"}, {"c", "o_2", "c_2", "113.6200", "57.9274", "-17.1312", "23.5480", "Ver. 2.1, Ref. 7"}, {"c_1", "o_2", "cp", "113.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 6"}, {"c_1", "o_2", "ho2", "112.8740", "53.2512", "-14.9979", "2.4640", "Ver. 2.1, Ref. 6"}, {"c_2", "o_2", "cp", "115.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "ho2", "113.1580", "49.6892", "-25.9467", "5.3280", "Ver. 2.1, Ref. 7"}, {"az", "oah", "hoa", "129.6770", "15.5877", "-23.6906", "9.7663", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "167.7890", "21.3772", "-3.8146", "8.1995", "Ver. 3.0, Ref. 10"}, {"az", "ob", "hb", "106.4920", "73.8986", "-23.9590", "8.0039", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "139.4630", "62.0713", "-30.7987", "16.6347", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "113.0480", "26.6270", "-29.5879", "19.8910", "Ver. 3.0, Ref. 10"}, {"cp", "op", "cp", "103.4300", "112.4497", "-25.7326", "0.0000", "Ver. 1.0, Ref. 1"}, {"hos", "osh", "sz", "123.4920", "14.8634", "-17.2643", "57.7495", "Ver. 3.0, Ref. 10"}, {"h*", "osi", "sio", "122.8880", "23.7764", "-19.8152", "9.6331", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "157.0260", "9.0740", "-19.5576", "8.5000", "Ver. 1.0, Ref. 4"}, {"sz", "oss", "sz", "176.2650", "18.8146", "37.9749", "42.8222", "Ver. 3.0, Ref. 10"}, {"c", "oz", "cz", "113.6200", "57.9274", "-17.1312", "60.0000", "Ver. 2.0, Ref. 5"}, {"cp", "oz", "cz", "115.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.0, Ref. 5"}, {"cz", "oz", "ho2", "113.1580", "49.6892", "-25.9467", "0.0000", "Ver. 2.0, Ref. 5"}, {"cl", "p=", "cl", "100.6000", "94.7390", "-9.6046", "-19.4682", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "cp", "109.9153", "75.4619", "-13.4603", "-16.0981", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "f", "98.4500", "104.3358", "-8.2038", "-21.3348", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "h", "100.0557", "59.5624", "-5.7203", "-12.2224", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "n", "98.8500", "90.2538", "-7.6919", "-18.4787", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "n=", "119.5000", "83.6226", "-26.0666", "-18.9852", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "o", "98.0500", "91.2538", "-7.0872", "-18.6603", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "cp", "119.2306", "56.1847", "-17.3159", "-12.7280", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "f", "107.7653", "85.0587", "-12.0595", "-17.9646", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "h", "108.2306", "36.1847", "-6.4878", "-7.6463", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "n", "108.1653", "70.9767", "-11.5476", "-15.1086", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "n=", "119.6000", "63.0624", "-19.7404", "-14.3290", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "o", "107.3653", "71.9767", "-10.9429", "-15.2901", "Ver. 3.1, Ref. 12"}, {"f", "p=", "f", "96.3000", "113.9327", "-6.8030", "-23.2013", "Ver. 3.1, Ref. 12"}, {"f", "p=", "h", "99.9197", "80.7297", "-7.6457", "-16.5604", "Ver. 3.1, Ref. 12"}, {"f", "p=", "n", "96.7000", "99.8506", "-6.2912", "-20.3452", "Ver. 3.1, Ref. 12"}, {"f", "p=", "n=", "120.0245", "99.8462", "-31.8145", "-22.7669", "Ver. 3.1, Ref. 12"}, {"f", "p=", "o", "95.9000", "100.8506", "-5.6865", "-20.5268", "Ver. 3.1, Ref. 12"}, {"h", "p=", "h", "103.4084", "39.6953", "-5.1338", "-8.2266", "Ver. 3.1, Ref. 12"}, {"h", "p=", "n", "103.9784", "68.2569", "-9.2212", "-14.1736", "Ver. 3.1, Ref. 12"}, {"h", "p=", "n=", "119.0329", "45.9784", "-14.0522", "-10.3994", "Ver. 3.1, Ref. 12"}, {"h", "p=", "o", "103.9784", "73.2569", "-9.8966", "-15.2119", "Ver. 3.1, Ref. 12"}, {"n", "p=", "n", "97.1000", "85.7686", "-5.7793", "-17.4892", "Ver. 3.1, Ref. 12"}, {"n", "p=", "n=", "123.2153", "89.9233", "-32.6119", "-21.0956", "Ver. 3.1, Ref. 12"}, {"n", "p=", "o", "96.3000", "86.7686", "-5.1746", "-17.6707", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "n=", "112.8000", "90.5233", "-20.8007", "-19.6019", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "o", "120.2153", "99.9233", "-32.0927", "-22.8209", "Ver. 3.1, Ref. 12"}, {"o", "p=", "o", "95.5000", "87.7686", "-4.5699", "-17.8523", "Ver. 3.1, Ref. 12"}, {"c", "s", "c", "97.5000", "57.6938", "-5.0559", "-11.8206", "Ver. 1.0, Ref. 1"}, {"c", "s", "h", "96.8479", "56.7336", "14.2713", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "100.3000", "57.2900", "-6.5301", "-11.8204", "Ver. 1.0, Ref. 1"}, {"h", "s", "h", "94.3711", "54.9676", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "97.2876", "54.4281", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "s'", "o-", "119.3290", "135.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "si", "c", "113.1855", "36.2069", "-20.3939", "20.0172", "Ver. 2.2, Ref. 9"}, {"c", "si", "h", "112.0977", "36.4832", "-12.8094", "0.0000", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "113.0000", "19.4692", "-34.3471", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "si", "h", "109.5932", "41.9497", "-42.3639", "48.1442", "Ver. 2.2, Ref. 9"}, {"h", "si", "h", "108.6051", "32.5415", "-8.3164", "0.0000", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "112.0893", "22.5062", "-11.5926", "0.0000", "Ver. 2.2, Ref. 9"}, {"si", "si", "si", "114.2676", "24.9501", "-19.5949", "0.0000", "Ver. 2.2, Ref. 9"}, {"c", "sio", "c", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 4"}, {"c", "sio", "h", "110.1810", "38.5645", "-17.8735", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "sio", "osi", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 4"}, {"h", "sio", "h", "106.0360", "48.9872", "-9.1607", "0.0000", "Ver. 1.0, Ref. 4"}, {"h", "sio", "osi", "107.3550", "57.6643", "-10.6506", "4.6274", "Ver. 1.0, Ref. 4"}, {"osi", "sio", "osi", "110.6930", "70.3069", "-6.9375", "0.0000", "Ver. 1.0, Ref. 4"}, {"cp", "sp", "cp", "88.2540", "130.6992", "-18.4789", "0.0000", "Ver. 1.0, Ref. 1"}, {"oas", "sz", "oas", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "ob", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "osh", "119.3400", "28.1962", "-64.3068", "4.7117", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "oss", "108.3940", "127.0520", "-16.5736", "0.0000", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "ob", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "osh", "107.3310", "79.2578", "-46.7537", "108.6900", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "oss", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "osh", "115.0310", "68.3381", "49.4314", "116.2400", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "oss", "110.6700", "117.5060", "-49.8921", "0.0000", "Ver. 3.0, Ref. 10"}, {"oss", "sz", "oss", "110.6120", "154.1860", "-68.6595", "23.6292", "Ver. 3.0, Ref. 10"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= PCFF info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * PCFF_torsions_auto[216][8]= {{"*", "c'_", "c'_", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n3n_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n=", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n=_1", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n=_2", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n=_3", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "np_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "o_", "*", "0.3000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "s_", "*", "0.3000", "2", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "si_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "np_", "h_", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "op", "*", "11.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "op", "*", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o_", "*", "1.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s_", "*", "1.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s_", "*", "0.3750", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "si_", "*", "0.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.0000", "Ver. 2.0, Ref. 2"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= PCFF info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * PCFF_torsions[492][11]= {{"oah", "az", "oah", "hoa", "0.2821", "0.0", "-0.0644", "0.0", "0.0752", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oah", "hoa", "0.0574", "0.0", "-0.3288", "0.0", "0.1277", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "oah", "hoa", "-0.7542", "0.0", "-0.7885", "0.0", "-0.3199", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "oas", "sz", "1.5821", "0.0", "2.8457", "0.0", "0.8378", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oas", "sz", "-4.8417", "0.0", "-0.6233", "0.0", "-1.7530", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "oas", "sz", "-0.0282", "0.0", "5.2299", "0.0", "-1.6555", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "hb", "8.3762", "0.0", "0.4366", "0.0", "-0.2767", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "sz", "1.1339", "0.0", "-0.4378", "0.0", "0.2658", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "hb", "6.7872", "0.0", "1.7367", "0.0", "0.1690", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "sz", "-0.5306", "0.0", "-1.2578", "0.0", "-0.1954", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "hb", "6.7872", "0.0", "1.7367", "0.0", "0.1690", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "hoa", "-0.7542", "0.0", "-0.7885", "0.0", "-0.3199", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "sz", "-0.5306", "0.0", "-1.2578", "0.0", "-0.1954", "0.0", "Ver. 3.0, Ref. 10"}, {"br", "c", "c", "br", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "c", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c", "0.1223", "0.0", "0.0514", "0.0", "-0.2230", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c-", "-0.4054", "0.0", "0.4825", "0.0", "0.4345", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=1", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=2", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c_0", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1681", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1781", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n+", "-1.9394", "0.0", "0.0086", "0.0", "0.2775", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n=", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n=1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n=2", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "c", "na", "0.1764", "0.0", "0.1766", "0.0", "-0.5206", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2500", "0.0", "Ver. 2.1, Ref. 6"}, {"c", "c", "c", "oz", "-3.6896", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"c", "c", "c", "s", "-0.7017", "0.0", "0.0201", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"c-", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "h", "-1.2767", "0.0", "0.5949", "0.0", "0.2379", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c=", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "c", "c_0", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "c_1", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "c", "c", "cp", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "h", "-0.1569", "0.0", "-0.2030", "0.0", "-0.1599", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cl", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cl", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cl", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"f", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"f", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c", "h", "-0.1432", "0.0", "0.0617", "0.0", "-0.1083", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c", "h", "-0.2432", "0.0", "0.0617", "0.0", "-0.1383", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n+", "-0.2179", "0.0", "-0.4127", "0.0", "-0.1252", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n=", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=2", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "c", "na", "-0.2428", "0.0", "0.4065", "0.0", "-0.3079", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "nr", "-0.5336", "0.0", "-0.0444", "0.0", "-0.1432", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2500", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "c", "oz", "-3.6896", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "c", "c", "s", "-0.2078", "0.0", "-0.1060", "0.0", "-0.3595", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"n", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"n_2", "c", "c", "n_2", "0.0000", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"na", "c", "c", "na", "0.3805", "0.0", "0.3547", "0.0", "-0.1102", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.0, Ref. 1"}, {"o_2", "c", "c", "o_2", "-0.6070", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 6"}, {"oz", "c", "c", "oz", "-0.6070", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.0, Ref. 5"}, {"s", "c", "c", "s", "-1.2002", "0.0", "-1.2999", "0.0", "-0.1626", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "o-", "1.7311", "0.0", "1.8510", "0.0", "-0.1933", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c-", "o-", "-2.5999", "0.0", "1.0488", "0.0", "-0.2089", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c-", "o-", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "c=", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_0", "c", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "cp", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "h", "0.3055", "0.0", "0.6703", "0.0", "-0.2816", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "o_1", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c", "c_0", "o_1", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "c", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "cp", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "h", "-0.5265", "0.0", "0.3627", "0.0", "-0.1792", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "o_1", "-0.9975", "0.0", "0.9060", "0.0", "-0.0195", "0.0", "Ver. 2.1, Ref. 8"}, {"o", "c", "c_0", "h", "-0.0390", "0.0", "1.4052", "0.0", "0.0757", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c_0", "o_1", "0.6444", "0.0", "0.7897", "0.0", "1.0604", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_1", "n_2", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_1", "o_1", "0.0442", "0.0", "0.0292", "0.0", "0.0562", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_1", "o_2", "1.8341", "0.0", "2.0603", "0.0", "-0.0195", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "n_2", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "o_1", "-0.1804", "0.0", "0.0012", "0.0", "0.0371", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "o_2", "-0.6359", "0.0", "1.4807", "0.0", "-0.0438", "0.0", "Ver. 2.1, Ref. 8"}, {"n", "c", "c_1", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c_1", "o_1", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"n+", "c", "c_1", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.3, Ref. 1"}, {"n+", "c", "c_1", "o_1", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.5, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2801", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 2.0, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "n", "c", "-0.0017", "0.0", "-0.0072", "0.0", "0.0008", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c_1", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "h*", "-0.0483", "0.0", "-0.0077", "0.0", "-0.0014", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "n", "c_1", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "n", "c", "-0.0036", "0.0", "0.0049", "0.0", "0.0039", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n", "c_1", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c", "0.0406", "0.0", "0.0354", "0.0", "-0.1649", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c_1", "0.0219", "0.0", "-0.0260", "0.0", "0.0714", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "h*", "-0.0148", "0.0", "-0.0791", "0.0", "-0.0148", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "c", "0.7077", "0.0", "-0.3744", "0.0", "-0.1914", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"h", "c", "n+", "c", "0.3624", "0.0", "0.1012", "0.0", "-0.2486", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "h+", "-0.2458", "0.0", "-0.2789", "0.0", "-0.0294", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n=", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=1", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=2", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=2", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "n_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "n_2", "hn2", "0.0000", "0.0", "0.0000", "0.0", "-0.3263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "hn2", "0.0000", "0.0", "0.0000", "0.0", "-0.3263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "na", "c", "-0.1406", "0.0", "0.4168", "0.0", "0.0150", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "h*", "-1.1506", "0.0", "-0.6344", "0.0", "-0.1845", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "c", "0.1904", "0.0", "-0.1342", "0.0", "-0.2460", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "h*", "-0.5187", "0.0", "-0.4837", "0.0", "-0.1692", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "c+", "-5.4418", "0.0", "-0.0437", "0.0", "0.8035", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "h*", "-5.0724", "0.0", "-0.4980", "0.0", "-0.4381", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "c+", "2.8272", "0.0", "-0.3930", "0.0", "-0.3847", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "h*", "1.2659", "0.0", "-0.7739", "0.0", "0.0378", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c", "-0.5203", "0.0", "-0.3028", "0.0", "-0.3450", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c_0", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "h*", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "o", "c_0", "-1.8534", "0.0", "0.1981", "0.0", "0.2423", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "c", "0.5302", "0.0", "0.0000", "0.0", "-0.3966", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "c_0", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "cp", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.4, Ref. 1"}, {"h", "c", "o", "h*", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"c", "c", "o_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.0882", "0.0", "Ver. 2.1, Ref. 7"}, {"c_1", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "o_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.0882", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"c", "c", "s", "c", "-0.5073", "0.0", "0.0155", "0.0", "-0.0671", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "h", "-0.4871", "0.0", "-0.4514", "0.0", "-0.1428", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "s", "-0.6269", "0.0", "-0.9598", "0.0", "-0.4957", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "c", "-0.3338", "0.0", "-0.0684", "0.0", "-0.1706", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "h", "-0.5374", "0.0", "-0.5091", "0.0", "-0.1361", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "s", "-0.0610", "0.0", "-0.6387", "0.0", "-0.3072", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "c", "-1.9835", "0.0", "-1.9213", "0.0", "-0.3816", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "h", "-0.0591", "0.0", "-0.6235", "0.0", "-0.0788", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "si", "-0.3500", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "sio", "c", "-1.3513", "0.0", "0.0000", "0.0", "-0.0580", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "sio", "h", "-0.9301", "0.0", "0.0000", "0.0", "-0.1259", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "sio", "osi", "-1.3513", "0.0", "0.0000", "0.0", "-0.0580", "0.0", "Ver. 1.0, Ref. 4"}, {"nr", "c+", "nr", "c", "-0.6197", "0.0", "3.0539", "0.0", "0.1861", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "c", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=2", "c", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=2", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_0", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_0", "o", "c", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 1"}, {"n_2", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_2", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n", "c_1", "0.1907", "0.0", "1.1212", "0.0", "0.0426", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c_1", "n", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "c", "0.8297", "0.0", "3.7234", "0.0", "-0.0495", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "c_1", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "h*", "-1.6938", "0.0", "2.7386", "0.0", "-0.3360", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "c", "-0.7532", "0.0", "2.7392", "0.0", "0.0907", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "n_2", "hn2", "-0.8236", "0.0", "2.1467", "0.0", "-0.2142", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "c", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "cp", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "hn2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "n_2", "c", "0.3345", "0.0", "2.5838", "0.0", "-0.4006", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "n_2", "hn2", "-0.0078", "0.0", "2.6186", "0.0", "-0.0900", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "n_2", "c", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "n_2", "cp", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "n_2", "hn2", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "o", "h*", "-2.7332", "0.0", "2.9646", "0.0", "-0.0155", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c_1", "o_2", "*", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "c", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "ho2", "-2.9126", "0.0", "1.0199", "0.0", "-0.2077", "0.0", "Ver. 2.1, Ref. 8"}, {"c=1", "c_1", "o_2", "ho2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "c", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "cp", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "ho2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "o_2", "c", "-0.9993", "0.0", "0.2131", "0.0", "-0.4274", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_2", "ho2", "-1.4540", "0.0", "0.8387", "0.0", "-0.4912", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "o_2", "c", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_1", "c_1", "o_2", "cp", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_1", "c_1", "o_2", "ho2", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"n_2", "c_2", "n_2", "c", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "n_2", "cp", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "n_2", "hn2", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "c", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "cp", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "hn2", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "c", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "cp", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "hn2", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "c", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "cp", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "ho2", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "c", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "cp", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "ho2", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "c", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "cp", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "ho2", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "cp", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "h", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "cp", "cp", "cp", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "cp", "cp", "h", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "cp", "cp", "cp", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"c_1", "cp", "cp", "h", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "cp", "8.3667", "0.0", "1.1932", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "n_2", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "cp", "nh", "11.5270", "0.0", "2.7183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "0.0000", "0.0", "5.3826", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.0000", "0.0", "4.7675", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o_2", "0.0000", "0.0", "2.5372", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "op", "0.0000", "0.0", "10.6923", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "oz", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "cp", "p=", "0.0000", "0.0", "5.4768", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "si", "0.0000", "0.0", "4.3270", "0.0", "0.0000", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "cp", "sp", "0.0000", "0.0", "9.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "h", "0.0000", "0.0", "1.8769", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "n_2", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nn", "0.0000", "0.0", "1.3331", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "np", "0.0000", "0.0", "3.6689", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o_2", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "cp", "cp", "op", "0.0000", "0.0", "3.3516", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "oz", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "cp", "cp", "p=", "0.0000", "0.0", "2.2698", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h", "cp", "cp", "si", "0.0000", "0.0", "1.5093", "0.0", "0.0000", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "cp", "cp", "sp", "0.0000", "0.0", "3.7957", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "nh", "0.0000", "0.0", "12.7748", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "np", "0.0000", "0.0", "4.8266", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "np", "0.0000", "0.0", "8.8338", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "op", "0.0000", "0.0", "9.7415", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "sp", "0.0000", "0.0", "8.5974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n_2", "c_1", "0.0000", "0.0", "0.8107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "n_2", "c_2", "0.0000", "0.0", "0.8107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "n_2", "hn2", "0.0000", "0.0", "0.6107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "nh", "cp", "10.8765", "0.0", "6.3475", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "h*", "0.0000", "0.0", "1.8202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "np", "0.0000", "0.0", "10.7803", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "cp", "0.0000", "0.0", "3.7848", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "h*", "0.0000", "0.0", "1.3342", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "0.0000", "0.0", "4.1751", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "cp", "0.0000", "0.0", "23.0443", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "h*", "0.0000", "0.0", "7.0570", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "cp", "0.0000", "0.0", "20.0173", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "h*", "0.0000", "0.0", "3.5096", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "h*", "0.0000", "0.0", "1.2190", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nn", "h*", "0.0000", "0.0", "2.0184", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "cp", "np", "cp", "0.0000", "0.0", "6.8517", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "nh", "0.0000", "0.0", "5.1942", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.0000", "0.0", "12.0680", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "nh", "0.0000", "0.0", "5.2455", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.0000", "0.0", "6.3346", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "cp", "0.0000", "0.0", "9.7830", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "cp", "0.0000", "0.0", "6.7119", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "cp", "0.0000", "0.0", "7.4664", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "cp", "0.0000", "0.0", "15.3660", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "np", "0.0000", "0.0", "11.8577", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "cp", "0.0000", "0.0", "13.6743", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "np", "0.0000", "0.0", "11.5762", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "0.0000", "0.0", "1.5000", "0.0", "0.0000", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "cp", "o", "h*", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o_2", "c_1", "0.0000", "0.0", "0.4561", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "o_2", "c_2", "0.0000", "0.0", "0.4961", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "op", "cp", "0.0000", "0.0", "27.5402", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "cp", "0.0000", "0.0", "2.6043", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "cp", "0.0000", "0.0", "30.4292", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "oz", "cz", "-2.4045", "0.0", "0.4561", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "cp", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"*", "cp", "p=", "*", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "p=", "h", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "p=", "n=", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "si", "si", "0.0000", "0.0", "-0.1000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "sp", "cp", "0.0000", "0.0", "31.5576", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "cp", "0.0000", "0.0", "4.2145", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "cp", "0.0000", "0.0", "21.1715", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "cr", "n=", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "n=1", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "n=2", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=2", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "c", "-4.2342", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oo", "cz", "oz", "cp", "-3.4253", "0.0", "2.3292", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oo", "cz", "oz", "ho2", "-3.0147", "0.0", "1.6536", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "c", "-4.0149", "0.0", "1.8643", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "cp", "-3.2773", "0.0", "1.3788", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "ho2", "-3.0513", "0.0", "1.4279", "0.0", "-0.1216", "0.0", "Ver. 2.0, Ref. 5"}, {"*", "n", "p=", "*", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "n=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "o", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"*", "n=", "p=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "o", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "n=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "nh", "np", "cp", "0.0000", "0.0", "14.4766", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "cp", "0.0000", "0.0", "7.4549", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "cp", "0.0000", "0.0", "13.7232", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "o", "p=", "*", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "h", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "n=", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "o", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"az", "oas", "sz", "oas", "-4.8417", "0.0", "-0.6233", "0.0", "-1.7530", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "osh", "1.0239", "0.0", "0.2734", "0.0", "0.0173", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "oss", "0.2875", "0.0", "1.0574", "0.0", "-0.0222", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "oas", "-23.4547", "0.0", "5.3019", "0.0", "1.7206", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "osh", "-20.7064", "0.0", "4.3987", "0.0", "-0.5242", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "oss", "-23.4547", "0.0", "5.3019", "0.0", "1.7206", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "oas", "-15.3826", "0.0", "-4.7952", "0.0", "0.6596", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "ob", "-12.5965", "0.0", "-5.0843", "0.0", "0.2414", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "osh", "-12.5965", "0.0", "-5.0843", "0.0", "0.2414", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "oss", "-15.3826", "0.0", "-4.7952", "0.0", "0.6596", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "ob", "sz", "ob", "-0.5851", "0.0", "-1.4467", "0.0", "-0.3115", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "ob", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "oas", "1.1145", "0.0", "-0.4708", "0.0", "-0.3937", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "ob", "-0.5851", "0.0", "-1.4467", "0.0", "-0.3115", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "osh", "0.4627", "0.0", "0.1147", "0.0", "0.0390", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "oss", "2.3777", "0.0", "-0.0069", "0.0", "-0.5244", "0.0", "Ver. 3.0, Ref. 10"}, {"h*", "osi", "sio", "c", "-0.6741", "0.0", "0.3661", "0.0", "-0.1008", "0.0", "Ver. 1.0, Ref. 4"}, {"h*", "osi", "sio", "h", "-0.7720", "0.0", "0.9364", "0.0", "-0.1169", "0.0", "Ver. 1.0, Ref. 4"}, {"h*", "osi", "sio", "osi", "-0.6741", "0.0", "0.3661", "0.0", "-0.1008", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.1300", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1300", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "osi", "0.3000", "0.0", "0.3658", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"sz", "oss", "sz", "oas", "-0.3747", "0.0", "0.3232", "0.0", "-0.0194", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "osh", "-0.2403", "0.0", "0.1673", "0.0", "0.0002", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "oss", "-0.3417", "0.0", "0.0961", "0.0", "0.1683", "0.0", "Ver. 3.0, Ref. 10"}, {"c", "s", "s", "c", "-1.8578", "0.0", "-3.8321", "0.0", "-0.4469", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "h", "-0.4956", "0.0", "-3.4601", "0.0", "-0.2482", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "h", "-0.0528", "0.0", "-3.5171", "0.0", "-0.2394", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "si", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"si", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= PCFF info E = K * (Chi - Chi0)^2 */ char * PCFF_inversions[83][7]= {{"nr", "c+", "nr", "nr", "54.4060", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "o-", "44.1500", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "o-", "45.7520", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "c=", "2.0568", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "h", "2.0765", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "h", "h", "2.8561", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "c", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "cp", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "h", "o_1", "38.4069", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "o", "o_1", "46.9264", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "cp", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "h", "o_1", "38.4069", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "h", "o_1", "37.8733", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "o", "o_1", "45.3800", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "o_1", "24.3329", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_1", "o_2", "46.9264", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "o_1", "49.3740", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "o_1", "o_2", "49.3740", "0.0000", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n_2", "o_1", "23.1691", "0.0000", "Ver. 2.1, Ref. 7"}, {"h", "c_1", "o_1", "o_2", "45.3800", "0.0000", "Ver. 2.1, Ref. 8"}, {"n_2", "c_2", "n_2", "o_1", "59.3740", "0.0000", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_1", "o_2", "49.3740", "0.0000", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "o_2", "51.6374", "0.0000", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "cp", "7.8153", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "cp", "cp", "cp", "6.9644", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "10.4920", "0.0000", "Ver. 1.3, Ref. 1"}, {"c_1", "cp", "cp", "cp", "17.0526", "0.0000", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "cp", "7.1794", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "4.8912", "0.0000", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "h", "7.6012", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "n_2", "17.0526", "0.0000", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "cp", "nh", "8.3206", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "10.7855", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "13.0421", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o_2", "-8.8126", "0.0000", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "oz", "19.8126", "0.0000", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "cp", "p=", "6.7092", "0.0000", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "si", "5.3654", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "h", "nh", "7.9682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "10.4920", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "op", "8.1654", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "sp", "5.5684", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "nh", "10.2877", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "8.8464", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "14.3802", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "op", "10.8102", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "sp", "7.3414", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "np", "15.0921", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "cr", "nr", "nr", "54.4060", "0.0000", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "oz", "51.6374", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "n", "c", "c_1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c_1", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "c_1", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "cr", "h*", "0.3176", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n_2", "c_1", "hn2", "-5.3119", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "n_2", "c_2", "hn2", "-5.3119", "0.0000", "Ver. 2.1, Ref. 7"}, {"c_1", "n_2", "cp", "hn2", "4.4181", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "n_2", "hn2", "hn2", "-6.5636", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_2", "n_2", "cp", "hn2", "4.4181", "0.0000", "Ver. 2.1, Ref. 7"}, {"c_2", "n_2", "hn2", "hn2", "-6.5636", "0.0000", "Ver. 2.1, Ref. 7"}, {"c", "na", "c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "h*", "5.9154", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "np", "4.9959", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "h*", "0.3176", "0.0000", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "h*", "1.0035", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "h*", "1.0035", "0.0000", "Ver. 1.1, Ref. 1"}, {"az", "ob", "hb", "sz", "116.0100", "3.8934", "Ver. 3.0, Ref. 10"}, {"*", "c'_", "*", "*", "36.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "c=_", "*", "*", "2.0568", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "cp_", "*", "*", "10.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "n=_", "*", "*", "0.5000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "n_", "*", "*", "0.1000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "na_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "np_", "*", "*", "5.5000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "nr_", "*", "*", "1.0035", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "o_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "p_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "s_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= PCFF info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * PCFF_vdw[94][4]= {{"Ag", "3.0222", "4.10020", "Ver. 2.1, Ref. 11"}, {"Al", "2.9964", "3.32320", "Ver. 2.1, Ref. 11"}, {"Au", "3.0177", "6.09800", "Ver. 2.1, Ref. 11"}, {"Br", "4.2150", "0.30500", "Ver. 2.0, Ref. 3"}, {"Cl", "3.9150", "0.30500", "Ver. 2.0, Ref. 3"}, {"Cr", "2.6764", "5.80440", "Ver. 2.1, Ref. 11"}, {"Cu", "2.6775", "3.81870", "Ver. 2.1, Ref. 11"}, {"Fe", "2.6595", "13.88920", "Ver. 2.1, Ref. 11"}, {"K", "4.8858", "0.74410", "Ver. 2.1, Ref. 11"}, {"Li", "3.2494", "0.72140", "Ver. 2.1, Ref. 11"}, {"Mo", "2.9184", "9.78710", "Ver. 2.1, Ref. 11"}, {"Na", "3.9624", "0.73800", "Ver. 2.1, Ref. 11"}, {"Ni", "2.6105", "5.07370", "Ver. 2.1, Ref. 11"}, {"Pb", "3.6541", "34.18600", "Ver. 2.1, Ref. 11"}, {"Pd", "2.8810", "6.08460", "Ver. 2.1, Ref. 11"}, {"Pt", "2.9034", "9.14470", "Ver. 2.1, Ref. 11"}, {"Sn", "2.9927", "4.84330", "Ver. 2.1, Ref. 11"}, {"W", "2.9344", "12.04700", "Ver. 2.1, Ref. 11"}, {"ar", "3.8400", "0.24640", "Ver. 2.1, Ref. 8"}, {"az", "0.0001", "0.00000", "Ver. 3.0, Ref. 10"}, {"br", "4.3000", "0.34890", "Ver. 2.1, Ref. 8"}, {"c", "4.0100", "0.05400", "Ver. 2.0, Ref. 1"}, {"c+", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c-", "3.9080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c=", "3.9000", "0.06400", "Ver. 2.1, Ref. 8"}, {"c=", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c=1", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c=2", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c_0", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c_1", "3.8100", "0.12000", "Ver. 2.1, Ref. 6"}, {"c_2", "3.8100", "0.12000", "Ver. 2.1, Ref. 7"}, {"ca+", "3.9800", "0.30150", "Ver. 2.1, Ref. 8"}, {"cl", "3.9200", "0.22470", "Ver. 2.1, Ref. 8"}, {"cp", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"cr", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"ct", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"cz", "3.9000", "0.06400", "Ver. 2.0, Ref. 5"}, {"f", "3.2000", "0.05980", "Ver. 2.1, Ref. 8"}, {"h", "2.9950", "0.02000", "Ver. 2.0, Ref. 1"}, {"h*", "1.0980", "0.01300", "Ver. 2.0, Ref. 1"}, {"h+", "1.0980", "0.01300", "Ver. 2.0, Ref. 1"}, {"hb", "1.2149", "5.23020", "Ver. 3.0, Ref. 10"}, {"he", "2.9000", "0.02030", "Ver. 2.1, Ref. 8"}, {"hn2", "1.6500", "0.01300", "Ver. 2.1, Ref. 7"}, {"ho2", "1.1100", "0.01300", "Ver. 2.1, Ref. 6"}, {"ho2", "1.0100", "0.15000", "Ver. 2.0, Ref. 5"}, {"hoa", "1.2879", "3.68600", "Ver. 3.0, Ref. 10"}, {"hos", "2.3541", "0.09880", "Ver. 3.0, Ref. 10"}, {"hsi", "2.9400", "0.02300", "Ver. 2.2, Ref. 9"}, {"i", "4.8000", "0.40000", "Ver. 2.0, Ref. 3"}, {"kr", "4.3000", "0.40280", "Ver. 2.1, Ref. 8"}, {"n", "4.0700", "0.10600", "Ver. 2.0, Ref. 1"}, {"n+", "3.2620", "0.06500", "Ver. 2.0, Ref. 1"}, {"n=", "3.8000", "0.08000", "Ver. 3.1, Ref. 12"}, {"n=", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n=1", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n=2", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n_2", "3.6000", "0.10600", "Ver. 2.1, Ref. 7"}, {"na", "4.0700", "0.06500", "Ver. 2.0, Ref. 1"}, {"ne", "3.1300", "0.07090", "Ver. 2.1, Ref. 8"}, {"nh", "4.0700", "0.13400", "Ver. 2.0, Ref. 1"}, {"nn", "4.0700", "0.06500", "Ver. 2.0, Ref. 1"}, {"np", "3.5700", "0.04100", "Ver. 2.0, Ref. 1"}, {"nr", "4.0700", "0.10600", "Ver. 2.0, Ref. 1"}, {"nt", "3.5700", "0.06500", "Ver. 2.0, Ref. 1"}, {"nz", "3.7500", "0.06500", "Ver. 2.1, Ref. 8"}, {"nz", "3.5700", "0.06500", "Ver. 2.0, Ref. 1"}, {"o", "3.5350", "0.24000", "Ver. 2.0, Ref. 1"}, {"o*", "3.6080", "0.27400", "Ver. 2.0, Ref. 1"}, {"o-", "3.5960", "0.16700", "Ver. 2.0, Ref. 1"}, {"o=", "3.5350", "0.06000", "Ver. 2.1, Ref. 8"}, {"o_1", "3.3000", "0.26700", "Ver. 2.1, Ref. 6"}, {"o_1", "3.5350", "0.26700", "Ver. 2.0, Ref. 1"}, {"o_2", "3.4200", "0.24000", "Ver. 2.1, Ref. 6"}, {"oah", "3.7245", "0.10260", "Ver. 3.0, Ref. 10"}, {"oas", "5.2591", "0.01290", "Ver. 3.0, Ref. 10"}, {"ob", "5.2191", "0.01350", "Ver. 3.0, Ref. 10"}, {"oo", "3.2000", "0.25700", "Ver. 2.0, Ref. 5"}, {"op", "3.5350", "0.10900", "Ver. 2.0, Ref. 1"}, {"osh", "3.4618", "0.15910", "Ver. 3.0, Ref. 10"}, {"osi", "3.3500", "0.24000", "Ver. 1.0, Ref. 4"}, {"oss", "3.4506", "0.16220", "Ver. 3.0, Ref. 10"}, {"oz", "3.3200", "0.24000", "Ver. 2.0, Ref. 5"}, {"p", "4.2950", "0.21500", "Ver. 2.0, Ref. 3"}, {"p=", "4.3000", "0.21500", "Ver. 3.1, Ref. 12"}, {"s", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"s'", "4.0270", "0.25000", "Ver. 2.1, Ref. 8"}, {"s'", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"si", "4.4500", "0.19000", "Ver. 2.2, Ref. 9"}, {"si", "4.4350", "0.09500", "Ver. 2.0, Ref. 3"}, {"sio", "4.2840", "0.07000", "Ver. 1.0, Ref. 4"}, {"sp", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"sz", "0.0001", "0.00000", "Ver. 3.0, Ref. 10"}, {"xe", "4.5600", "0.45500", "Ver. 2.1, Ref. 8"}}; /* Bond increments To implement atomic charges */ char * PCFF_bond_increments[564][5]= {{"Ag", "Ag", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Al", "Al", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Au", "Au", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Cr", "Cr", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Cu", "Cu", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Fe", "Fe", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"K", "K", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Li", "Li", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Mo", "Mo", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Ni", "Ni", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pb", "Pb", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pd", "Pd", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pt", "Pt", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Sn", "Sn", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"W", "W", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"az", "oah", "0.3013", "-0.3013", "Ver. 3.0, Ref. 10"}, {"az", "oas", "0.1694", "-0.1694", "Ver. 3.0, Ref. 10"}, {"az", "ob", "0.0284", "-0.0284", "Ver. 3.0, Ref. 10"}, {"br", "br", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"br", "c", "-0.1600", "0.1600", "Ver. 2.1, Ref. 8"}, {"br", "c-", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"br", "c=", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c=1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c=2", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c_0", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c_1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "cl", "0.0507", "-0.0507", "Ver. 2.0, Ref. 2"}, {"br", "cp", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "ct", "0.0173", "-0.0173", "Ver. 2.0, Ref. 2"}, {"br", "f", "0.2099", "-0.2099", "Ver. 2.0, Ref. 2"}, {"br", "h", "-0.1978", "0.1978", "Ver. 2.0, Ref. 2"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 2"}, {"br", "n", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n+", "0.2452", "0.0048", "Ver. 2.0, Ref. 2"}, {"br", "n=", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n=1", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n=2", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "na", "0.0601", "-0.0601", "Ver. 2.0, Ref. 2"}, {"br", "nh", "-0.0438", "0.0438", "Ver. 2.0, Ref. 2"}, {"br", "nn", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "np", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "o", "0.0818", "-0.0818", "Ver. 2.0, Ref. 2"}, {"br", "op", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"br", "p", "-0.2156", "0.2156", "Ver. 2.0, Ref. 2"}, {"br", "s", "-0.0437", "0.0437", "Ver. 2.0, Ref. 2"}, {"br", "s'", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"br", "si", "-0.3273", "0.3273", "Ver. 2.0, Ref. 2"}, {"br", "sp", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.1840", "-0.1840", "Ver. 2.1, Ref. 8"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2500", "-0.2500", "Ver. 2.1, Ref. 8"}, {"c", "h", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 2"}, {"c", "n", "0.2108", "-0.2108", "Ver. 1.0, Ref. 1"}, {"c", "n+", "0.4071", "-0.1571", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n_2", "0.2100", "-0.2100", "Ver. 2.1, Ref. 7"}, {"c", "na", "0.0827", "-0.0827", "Ver. 1.0, Ref. 1"}, {"c", "nh", "0.0610", "-0.0610", "Ver. 1.0, Ref. 2"}, {"c", "nn", "0.2108", "-0.2108", "Ver. 1.0, Ref. 2"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 3"}, {"c", "nr", "0.4802", "-0.4802", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.3640", "-0.3640", "Ver. 1.0, Ref. 2"}, {"c", "o", "0.1330", "-0.1330", "Ver. 2.1, Ref. 8"}, {"c", "o_2", "0.2250", "-0.2250", "Ver. 2.1, Ref. 6"}, {"c", "oz", "0.0500", "-0.0500", "Ver. 2.0, Ref. 4"}, {"c", "p", "0.0110", "-0.0110", "Ver. 2.0, Ref. 2"}, {"c", "p=", "-0.0500", "0.0500", "Ver. 3.1, Ref. 12"}, {"c", "s", "0.0650", "-0.0650", "Ver. 1.0, Ref. 1"}, {"c", "si", "-0.1350", "0.1350", "Ver. 2.2, Ref. 9"}, {"c", "si", "-0.1767", "0.1767", "Ver. 2.0, Ref. 2"}, {"c", "sio", "-0.1000", "0.1000", "Ver. 1.0, Ref. 4"}, {"c+", "nr", "0.2653", "0.0680", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c-", "c_0", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"c-", "c_1", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 2"}, {"c-", "cp", "-0.0424", "0.0424", "Ver. 2.0, Ref. 2"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 2"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 2"}, {"c-", "h", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 2"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n+", "0.2597", "-0.0097", "Ver. 2.0, Ref. 2"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "nh", "-0.0176", "0.0176", "Ver. 2.0, Ref. 2"}, {"c-", "nn", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 2"}, {"c-", "o-", "0.0337", "-0.5337", "Ver. 1.0, Ref. 1"}, {"c-", "o_1", "0.3241", "-0.3241", "Ver. 2.0, Ref. 2"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 2"}, {"c-", "p", "-0.0857", "0.0857", "Ver. 2.0, Ref. 2"}, {"c-", "s", "-0.0087", "0.0087", "Ver. 2.0, Ref. 2"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 2"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n_2", "0.1000", "-0.1000", "Ver. 3.1, Ref. 12"}, {"c=", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=1", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=1", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=1", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=1", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=1", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=1", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=2", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=2", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=2", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=2", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=2", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n_2", "0.1000", "-0.1000", "Ver. 3.1, Ref. 12"}, {"c=2", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=2", "o=", "0.1200", "-0.1200", "Ver. 2.1, Ref. 8"}, {"c=2", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=2", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=2", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c_0", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c_0", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 2"}, {"c_0", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c_0", "h", "-0.0456", "0.0456", "Ver. 1.0, Ref. 1"}, {"c_0", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 2"}, {"c_0", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_0", "n+", "0.1331", "0.1169", "Ver. 2.0, Ref. 2"}, {"c_0", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "nh", "-0.1422", "0.1422", "Ver. 2.0, Ref. 2"}, {"c_0", "nn", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 2"}, {"c_0", "o", "0.0030", "-0.0030", "Ver. 1.0, Ref. 1"}, {"c_0", "o_1", "0.3964", "-0.3964", "Ver. 1.0, Ref. 1"}, {"c_0", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"c_0", "p", "-0.2396", "0.2396", "Ver. 2.0, Ref. 2"}, {"c_0", "s", "-0.0140", "0.0140", "Ver. 2.0, Ref. 2"}, {"c_0", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c_0", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 2"}, {"c_0", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"c_1", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_1", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c_1", "cp", "0.0180", "-0.0180", "Ver. 2.1, Ref. 6"}, {"c_1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_1", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 2"}, {"c_1", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c_1", "h", "-0.0456", "0.0456", "Ver. 1.0, Ref. 1"}, {"c_1", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 2"}, {"c_1", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n+", "0.1331", "0.1169", "Ver. 2.0, Ref. 2"}, {"c_1", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n_2", "0.1110", "-0.1110", "Ver. 2.1, Ref. 7"}, {"c_1", "nh", "-0.1422", "0.1422", "Ver. 2.0, Ref. 2"}, {"c_1", "nn", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 2"}, {"c_1", "o", "0.0030", "-0.0030", "Ver. 1.0, Ref. 1"}, {"c_1", "o_1", "0.5310", "-0.5310", "Ver. 2.1, Ref. 6"}, {"c_1", "o_2", "0.1710", "-0.1710", "Ver. 2.1, Ref. 6"}, {"c_1", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"c_1", "p", "-0.2396", "0.2396", "Ver. 2.0, Ref. 2"}, {"c_1", "s", "-0.0140", "0.0140", "Ver. 2.0, Ref. 2"}, {"c_1", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c_1", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 2"}, {"c_1", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"c_2", "n_2", "0.1110", "-0.1110", "Ver. 2.1, Ref. 7"}, {"c_2", "o_1", "0.5850", "-0.5850", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "0.1890", "-0.1890", "Ver. 2.1, Ref. 7"}, {"cl", "cl", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"cl", "cp", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"cl", "ct", "-0.0319", "0.0319", "Ver. 2.0, Ref. 2"}, {"cl", "f", "0.1589", "-0.1589", "Ver. 2.0, Ref. 2"}, {"cl", "h", "-0.2404", "0.2404", "Ver. 2.0, Ref. 2"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 2"}, {"cl", "n", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n+", "0.1858", "0.0642", "Ver. 2.0, Ref. 2"}, {"cl", "n=", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n=1", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n=2", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "na", "0.0117", "-0.0117", "Ver. 2.0, Ref. 2"}, {"cl", "nh", "-0.0854", "0.0854", "Ver. 2.0, Ref. 2"}, {"cl", "nn", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "np", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "o", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"cl", "op", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"cl", "p", "-0.2544", "0.2544", "Ver. 2.0, Ref. 2"}, {"cl", "p=", "-0.1200", "0.1200", "Ver. 3.1, Ref. 12"}, {"cl", "s", "-0.0898", "0.0898", "Ver. 2.0, Ref. 2"}, {"cl", "s'", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 2"}, {"cl", "sp", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"cp", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"cp", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n_2", "0.2370", "-0.2370", "Ver. 2.1, Ref. 7"}, {"cp", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "0.0827", "-0.0827", "Ver. 1.0, Ref. 1"}, {"cp", "np", "0.2405", "-0.2405", "Ver. 1.0, Ref. 1"}, {"cp", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"cp", "o_1", "0.3964", "-0.3964", "Ver. 2.0, Ref. 2"}, {"cp", "o_2", "0.2790", "-0.2790", "Ver. 2.1, Ref. 6"}, {"cp", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1700", "-0.1700", "Ver. 2.0, Ref. 4"}, {"cp", "p", "-0.0380", "0.0380", "Ver. 1.0, Ref. 2"}, {"cp", "p=", "-0.0600", "0.0600", "Ver. 3.1, Ref. 12"}, {"cp", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"cp", "si", "-0.1170", "0.1170", "Ver. 2.2, Ref. 9"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"cp", "sio", "-0.1500", "0.1500", "Ver. 1.0, Ref. 4"}, {"cp", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "n=2", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "0.0000", "-0.0000", "Ver. 2.0, Ref. 2"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 2"}, {"ct", "h", "-0.2052", "0.2052", "Ver. 2.0, Ref. 2"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n+", "0.0992", "0.1508", "Ver. 2.0, Ref. 2"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "na", "-0.0636", "0.0636", "Ver. 2.0, Ref. 2"}, {"ct", "nh", "-0.0568", "0.0568", "Ver. 2.0, Ref. 2"}, {"ct", "nn", "0.0920", "-0.0920", "Ver. 2.0, Ref. 2"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "nt", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "o", "0.0675", "-0.0675", "Ver. 2.0, Ref. 2"}, {"ct", "p", "-0.1335", "0.1335", "Ver. 2.0, Ref. 2"}, {"ct", "s", "-0.0522", "0.0522", "Ver. 2.0, Ref. 2"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 2"}, {"cz", "oo", "0.5000", "-0.5000", "Ver. 2.0, Ref. 4"}, {"cz", "oz", "0.1000", "-0.1000", "Ver. 2.0, Ref. 4"}, {"f", "f", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"f", "h", "-0.3823", "0.3823", "Ver. 2.0, Ref. 2"}, {"f", "h*", "-0.4089", "0.4089", "Ver. 1.0, Ref. 4"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 2"}, {"f", "n", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n+", "0.0062", "0.2438", "Ver. 2.0, Ref. 2"}, {"f", "n=", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n=1", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n=2", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "na", "-0.1415", "0.1415", "Ver. 2.0, Ref. 2"}, {"f", "nh", "-0.2220", "0.2220", "Ver. 2.0, Ref. 2"}, {"f", "nn", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "np", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "o", "-0.1077", "0.1077", "Ver. 2.0, Ref. 2"}, {"f", "op", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"f", "p", "-0.3869", "0.3869", "Ver. 2.0, Ref. 2"}, {"f", "p=", "-0.1800", "0.1800", "Ver. 3.1, Ref. 12"}, {"f", "s", "-0.2380", "0.2380", "Ver. 2.0, Ref. 2"}, {"f", "s'", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 2"}, {"f", "sp", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"h", "h", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 2"}, {"h", "op", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"h", "p", "-0.0356", "0.0356", "Ver. 2.0, Ref. 2"}, {"h", "p=", "-0.0500", "0.0500", "Ver. 3.1, Ref. 12"}, {"h", "s", "0.1392", "-0.1392", "Ver. 2.0, Ref. 2"}, {"h", "s'", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"h", "si", "-0.1260", "0.1260", "Ver. 2.2, Ref. 9"}, {"h", "si", "-0.1537", "0.1537", "Ver. 2.0, Ref. 2"}, {"h", "sio", "-0.1300", "0.1300", "Ver. 1.0, Ref. 4"}, {"h", "sp", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"h*", "n", "0.4395", "-0.4395", "Ver. 1.0, Ref. 1"}, {"h*", "n=", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "n=1", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "n=2", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "na", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "0.3925", "-0.3925", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"h*", "np", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "nr", "0.4068", "-0.4068", "Ver. 1.0, Ref. 1"}, {"h*", "nt", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "o", "0.4241", "-0.4241", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "0.3991", "-0.3991", "Ver. 1.0, Ref. 1"}, {"h*", "osi", "0.3400", "-0.3400", "Ver. 1.0, Ref. 4"}, {"h+", "n+", "0.2800", "-0.0300", "Ver. 1.0, Ref. 1"}, {"hb", "ob", "0.0839", "-0.0839", "Ver. 3.0, Ref. 10"}, {"hi", "nh", "0.3925", "0.1075", "Ver. 1.0, Ref. 1"}, {"hn2", "n_2", "0.3780", "-0.3780", "Ver. 2.1, Ref. 7"}, {"ho2", "o_2", "0.4230", "-0.4230", "Ver. 2.1, Ref. 6"}, {"ho2", "oz", "0.4500", "-0.4500", "Ver. 2.0, Ref. 4"}, {"hoa", "oah", "0.0575", "-0.0575", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "0.0641", "-0.0641", "Ver. 3.0, Ref. 10"}, {"hsi", "si", "-0.1260", "0.1260", "Ver. 2.2, Ref. 9"}, {"i", "i", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"i", "n", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n+", "0.2615", "-0.0115", "Ver. 2.0, Ref. 2"}, {"i", "n=", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n=1", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n=2", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "na", "0.0714", "-0.0714", "Ver. 2.0, Ref. 2"}, {"i", "nh", "-0.0356", "0.0358", "Ver. 2.0, Ref. 2"}, {"i", "nn", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "np", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "o", "0.0924", "-0.0924", "Ver. 2.0, Ref. 2"}, {"i", "op", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"i", "p", "-0.2110", "0.2110", "Ver. 2.0, Ref. 2"}, {"i", "s", "-0.0345", "0.0345", "Ver. 2.0, Ref. 2"}, {"i", "s'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 2"}, {"i", "sp", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n+", "0.0883", "0.1617", "Ver. 2.0, Ref. 2"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n", "p=", "-0.1200", "0.1200", "Ver. 3.1, Ref. 12"}, {"n", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n+", "n+", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n+", "n=", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "n=1", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "n=2", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "na", "0.0850", "0.1650", "Ver. 2.0, Ref. 2"}, {"n+", "nh", "-0.0044", "0.2544", "Ver. 2.0, Ref. 2"}, {"n+", "nn", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "np", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "o", "0.1250", "0.1250", "Ver. 2.0, Ref. 2"}, {"n+", "o_1", "0.3418", "-0.0918", "Ver. 2.0, Ref. 2"}, {"n+", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 2"}, {"n+", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 2"}, {"n+", "s", "-0.0255", "0.2755", "Ver. 2.0, Ref. 2"}, {"n+", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 2"}, {"n+", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 2"}, {"n+", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=", "p=", "-0.3500", "0.3500", "Ver. 3.1, Ref. 12"}, {"n=", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=1", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=1", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=1", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=1", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=2", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=2", "o=", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=2", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=2", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"na", "na", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"na", "nh", "-0.0919", "0.0919", "Ver. 2.0, Ref. 2"}, {"na", "nn", "0.0371", "-0.0371", "Ver. 2.0, Ref. 2"}, {"na", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 2"}, {"na", "o", "0.0254", "-0.0254", "Ver. 2.0, Ref. 2"}, {"na", "o_1", "0.2369", "-0.2369", "Ver. 2.0, Ref. 2"}, {"na", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 2"}, {"na", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 2"}, {"na", "s", "-0.0966", "0.0966", "Ver. 2.0, Ref. 2"}, {"na", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 2"}, {"na", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 2"}, {"na", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "nn", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"nh", "np", "-0.2823", "0.2823", "Ver. 1.0, Ref. 1"}, {"nh", "o", "-0.1090", "-0.1090", "Ver. 2.0, Ref. 2"}, {"nh", "o_1", "0.3148", "-0.3148", "Ver. 2.0, Ref. 2"}, {"nh", "op", "0.3148", "-0.3148", "Ver. 2.0, Ref. 2"}, {"nh", "p", "-0.1375", "0.1375", "Ver. 2.0, Ref. 2"}, {"nh", "s", "0.0046", "-0.0046", "Ver. 2.0, Ref. 2"}, {"nh", "s'", "0.0454", "-0.0454", "Ver. 2.0, Ref. 2"}, {"nh", "si", "-0.2278", "0.2278", "Ver. 2.0, Ref. 2"}, {"nh", "sp", "0.0454", "-0.0454", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"nn", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"nn", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"nn", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"nn", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"nn", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"nn", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"nn", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"np", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"np", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"np", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"np", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"nt", "nt", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"nz", "nz", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "o", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 2"}, {"o", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 2"}, {"o", "p=", "-0.1400", "0.1400", "Ver. 3.1, Ref. 12"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 2"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 2"}, {"o", "si", "-0.3425", "0.3425", "Ver. 2.0, Ref. 2"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 2"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 2.0, Ref. 3"}, {"o-", "s'", "-0.1143", "0.1143", "Ver. 2.1, Ref. 8"}, {"o=", "o=", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o=", "s'", "-0.1143", "0.1143", "Ver. 2.1, Ref. 8"}, {"o_1", "o_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o_1", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o_1", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 2"}, {"o_1", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 2"}, {"o_1", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"o_1", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 2"}, {"o_1", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"oas", "sz", "-0.1265", "0.1265", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "-0.1392", "0.1392", "Ver. 3.0, Ref. 10"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 2"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 2"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 2"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"osh", "sz", "-0.1303", "0.1303", "Ver. 3.0, Ref. 10"}, {"osi", "sio", "-0.2200", "0.2200", "Ver. 1.0, Ref. 4"}, {"oss", "sz", "-0.1309", "0.1309", "Ver. 3.0, Ref. 10"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "s", "0.1600", "-0.1600", "Ver. 2.0, Ref. 2"}, {"p", "s'", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"p", "s-", "0.1824", "-0.6824", "Ver. 2.0, Ref. 2"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 2"}, {"p", "sp", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"s", "s", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 2"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 2"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 2"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 2"}, {"s'", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.2, Ref. 9"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "sp", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}}; atomes_1.3.1/src/calc/force_fields/force_fields.c0000664000175000017500000030321515212624223021416 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file force_fields.c * @short Functions to prepare the force field XML files from the sources in atomes \n Functions to read the force field XML files * @author Sébastien Le Roux */ /* * This file: 'force_fields.c' * * Contains: * - The functions to prepare the force field XML files from the sources in atomes - The functions to read the force field XML files * * List of functions: int get_pdim(int fid, int prop, int col); int get_fkey(int fid, int prop, int col); int find_atom_id (int print, char * keyw); int find_atom_z (char * keyw); int get_z (int faid); int get_atoms (int z); int get_bond (int faid, int bid); int get_angle (int faid, int aid); int get_apex (int faid, int aid); int get_torsion (int faid, int tid, int a, int b); int get_improper (int faid, int a, int b); int get_vdw (int faid); int get_bi (int faid); int field_find_atoms (); float get_force_field_atom_mass (int sp, int num); gboolean not_done (int eid, int a, int b); gboolean not_done_an (int eid, int a, int b, int c); gboolean is_a_match (int * data, int num, int val[4]); gchar * find_atom_key (int fid, int prop, char * keyw); gchar * open_field_file (int field); void associate_pointers_to_field_data (int id); void print_object_dim_and_key_tables (int fid); void set_data (int pid, int obj, int oid, int faid); void field_has_element (int aid); void print_atom_table (int fid); void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond); void print_bond_table (int fid, int inum); void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle); void print_angle_table (int fid, int inum); void print_dihedral_table (int fid, int inum); void print_improper_table (int fid, int inum); void print_inversion_table (int fid, int inum); void print_vdw_table (int fid, int inum); void find_object_ijkl (int hid, int foid, int oid, int sa, int za, int sb, int zb, int sc, int zc, int sd, int zd); void field_find_bonds (); void field_find_angles (); void field_find_dihedrals (int id); void field_find_vdw (); void print_all (int oid); void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader); G_MODULE_EXPORT void setup_this_force_field (int id); */ #include "global.h" #include "interface.h" #include "dlp_field.h" #include "force_fields.h" #include extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); #define N_FIELDS 21 #define N_PARAMS #define ALL_PARAMS 9 // Define Fields order and id #define FATS 0 #define FEQI 1 #define FBDS 2 #define FANG 3 #define FDIH 4 #define FIMP 5 #define FINV 6 #define FNBD 7 #define FINC 8 #define USE_ATOMS /* AMBER*: In atoms check label (1 letter only) CHARMM*: In atoms check label (1 letter only) CVFF/CVFF_aug/CFF91/PCFF: - Bonds: 'c=_' in 'c=', 'n=_' in 'n=', 'd_' in 'dw', 'ci_' in 'ci', 'ni_' in 'ni' - Quadratic angles: 's3m_' in 's3e_', 's4m_' in 's4e_', 'o4m_' in 'o4e_', '*?' in '*' CVFF: - Atoms: 'mg' in 'Mg' CVFF_aug: - Non-bonded : 'Al' in 'al' Compass : OPLSAA?: - In atoms : 'NA' to 'Na', 'CLA' to 'Cl', 'MG' to 'Mg' */ char * field_keyw[N_FIELDS] = {"amber94", "amber96", "amber98", "amber99", "prot_22", "prot_metals_22", "ethers_35", "carb_36", "cgenff_36", "lipid_36", "na_36", "prot_36", "prot_metals_36", "silicates", "CVFF", "CVFF_Aug", "CFF91", "PCFF", "Compass", "OPLSAAP", "OPLSAAR"}; char * field_ffl[N_FIELDS] = {"amber94", "amber96", "amber98", "amber99", "charmm-prot_22", "charmm-prot_metals_22", "charmm-ethers_35", "charmm-carb_36", "charmm-cgenff_36", "charmm-lipid_36", "charmm-na_36", "charmm-prot_36", "charmm-prot_metals_36", "charmm-silicates", "cvff", "cvff_aug", "cff91", "pcff", "compass", "oplsaap", "oplsaar"}; char * field_name[N_FIELDS] = {"Assisted Model Building with Energy Refinement 94", "Assisted Model Building with Energy Refinement 96", "Assisted Model Building with Energy Refinement 98", "Assisted Model Building with Energy Refinement 99", "Chemistry at HARvard Macromolecular Mechanics 22 Proteins", "Chemistry at HARvard Macromolecular Mechanics 22 Proteins and metals", "Chemistry at HARvard Macromolecular Mechanics 35 Ethers", "Chemistry at HARvard Macromolecular Mechanics 36 Carbohydrates", "Chemistry at HARvard Macromolecular Mechanics 36 General", "Chemistry at HARvard Macromolecular Mechanics 36 Lipids", "Chemistry at HARvard Macromolecular Mechanics 36 Nucleid acids", "Chemistry at HARvard Macromolecular Mechanics 36 Proteins", "Chemistry at HARvard Macromolecular Mechanics 36 proteins and metals", "Chemistry at HARvard Macromolecular Mechanics Silicates", "Consistent Valence Force Field", "Consistent Valence Force Field Augmented", "Consistent Force Field 91", "Polymer Consistent Force Field", "Condensed-phase Optimized Molecular Potentials for Atomistic Simulation Studies", "Optimized Potentials for Liquid Simulation All-atoms for Proteins", "Optimized Potentials for Liquid Simulation All-atoms for Proteins, Nucleosides, and Nucleotides"}; char * field_acro[N_FIELDS] = {"AMBER 94", "AMBER 96", "AMBER 98", "AMBER 99", "CHARMM 22 Proteins", "CHARMM 22 Proteins and metals", "CHARMM 35 Ethers", "CHARMM 36 Carbohydrates", "CHARMM 36 General", "CHARMM 36 Lipids", "CHARMM 36 Nucleid acids", "CHARMM 36 Proteins", "CHARMM 36 Proteins and metals", "CHARMM Silicates", "CVFF", "CVFF Augmented", "CFF 91", "PCFF", "COMPASS", "OPLS All-atoms for proteins", "OPLS All-atoms for RNA"}; char *** field_atoms; char *** field_equi[2]; // 0 = Quadratic, 1 = Quartic, 2 = Morse char *** field_bonds[3]; // 0 = Quadratic, 1 = Quartic char *** field_angles[2]; char *** field_dihedrals[2]; char *** field_inversions; char *** field_impropers; char *** field_vdw; int * field_objects; int * field_dim; gboolean is_99; int * atoms_id; int ** atoms_id_list; int ** extraz_id; FILE * fp; gchar * ffo_file[21]={"parm94.dat", "parm96.dat", "parm98.dat", "parm99.dat", "par_all22_prot.prm", "par_all22_prot_metals.prm", "par_all35_ethers.prm", "par_all36_carb.prm", "par_all36_cgenff.prm", "par_all36_lipid.prm", "par_all36_na.prm", "par_all36_prot.prm", "par_all36m_prot.prm", "par_all_silicates.prm", "CVFF.frc", "CVFF_aug.frc", "CFF91.frc", "PCFF.frc", "compass.frc", "par_opls_aam.inp", "par_opls_rna.inp"}; gchar * prop_name[11]= {"Quadratic bonds", "Quartic bonds", "Morse bonds", "Quadratic angles", "Quartic angles", "Dihedrals", "Torsions 3", "Inversions", "Impropers", "Non-bonded", "Bond increments"}; gchar * table_name[11]= {"qbonds", "sbonds", "mbonds", "qangles", "sangles", "dih", "tor", "inv", "imp", "vdw", "bdi"}; int ffdim[14][2] = {{1, 0}, {1, 1}, {1, 1}, {2, 2}, {2, 4}, {2, 3}, {3, 2}, {3, 4}, {4, 3}, {4, 4}, {4, 2}, {4, 3}, {1, 2}, {2, 0}}; // Pot +1 ou (-Pot+1) si special int ffpot[N_FIELDS][10]={{1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 2, 1, 0, 1, -4, 1, 0, 1}, {1, 0, 2, 1, 0, 1, -4, 1, 0, 0}, {1, 6, 0, 0, 2, 1, -4, 0, 2, 0}, {1, 6, 0, 1, 2, 1, -4, 0, 2, 0}, {0, 6, 0, 0, 2, 0, -4, 0, 2, -2}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}}; /*! \fn int get_pdim(int fid, int prop, int col) \brief retrieve number of parameters for property in force field database \param fid the force field id \param prop the type of property \param col the column id */ int get_pdim(int fid, int prop, int col) { if (prop == 0) return field_dim[0]; if (field_dim[prop] == 0) return 0; if (prop == 6 && col == 1 && (fid >= CHARMM22P && fid <= CHARMMSI)) return 4; if (prop == 12 && col == 1 && ((fid >= CHARMM22P && fid <= CHARMMSI) || (fid >= OPLSAAP))) return 4; return ffdim[prop][col]; } /*! \fn int get_fkey(int fid, int prop, int col) \brief retrieve key for property in force field database \param fid the force field id \param prop the property id \param col the column id */ int get_fkey(int fid, int prop, int col) { return ffdim[prop][col]; } #ifndef USE_ATOMS void allocate_field_data (int * objects, int * dim, char * atoms[objects[0]][dim[0]], char * equi_a[objects[1]][dim[1]], char * equi_b[objects[2]][dim[2]], char * bonds[objects[3]][dim[3]], char * q_bonds[objects[4]][dim[4]], char * m_bonds[objects[5]][dim[5]], char * angles[objects[6]][dim[6]], char * q_angles[objects[7]][dim[7]], char * dihedrals[objects[8]][dim[8]], char * q_dihedrals[objects[9]][dim[9]], char * inversions[objects[10]][dim[10]], char * impropers[objects[11]][dim[11]], char * vdw[objects[12]][dim[12]], char * bond_inc[objects[13]][dim[13]]) { int h, i; field_objects = objects; field_dim = dim; field_atoms = g_malloc0(field_objects[0]*sizeof*field_atoms); for (i=0; i CHARMMSI && fid < OPLSAAP) { if (find_atom_id(0, keyw) == -10) { int i; for (i=0; i 2) { for (i=0; i\n"); int i, j, k, l, n, m; k = -1; for (i=0; i<13; i++) { if (i != 1 && i != 2) { k ++; j = (i == 10) ? 11 : (i == 11) ? 10 : i; if (i == 0) { fprintf (fp, " <%s dim=\"%d\">%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, field_objects[j], nodes[k]); } else if (i < 12) { fprintf (fp, " <%s dim=\"%d\" pot=\"%d\">%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, ffpot[fid][k-1], field_objects[j], nodes[k]); } else { l = 0; if (fid <= AMBER99) { for (n=0; n%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, ffpot[fid][k-1], field_objects[j]+l, nodes[k]); } } } fprintf (fp, " \n"); } field_object_match ** all_data[10]; field_object_match * om_tmp; /*! \fn void set_data (int pid, int obj, int oid, int faid) \brief save retrieved force field data \param pid the type of structural element \param obj the element id \param oid the parameter id the force field database \param faid the field atom id */ void set_data (int pid, int obj, int oid, int faid) { if (all_data[pid][faid] == NULL) { all_data[pid][faid] = g_malloc0(sizeof*all_data[pid][faid]); om_tmp = all_data[pid][faid]; } else { om_tmp -> next = g_malloc0(sizeof*om_tmp -> next); om_tmp -> next -> id = om_tmp -> id + 1; om_tmp -> next -> prev = om_tmp; } om_tmp -> obj = obj; om_tmp -> oid = oid; } /*! \fn int get_z (int faid) \brief get field atom Z \param faid the field atom id */ int get_z (int faid) { int i; for (i=0; i<120; i++) { if (g_strcmp0 (periodic_table_info[i].lab, field_atoms[faid][0]) == 0) return periodic_table_info[i].Z; } return -1; } /*! \fn int get_atoms (int z) \brief retrieve all field atom(s) with matching Z \param z the target Z */ int get_atoms (int z) { int i, j; j = 0; for (i=0; i\n"); for (i=0; i\n"); } fprintf (fp, " \n"); } typedef struct f_bond f_bond; struct f_bond { int a; int b; float v[2]; f_bond * next; f_bond * prev; }; f_bond * the_bonds[2]; f_bond * tmpbd; /*! \fn gboolean not_done (int eid, int a, int b) \brief was this case already considered ? \param eid equivalence id (not used for the time being) \param a 1st atom id \param b 2nd atom id */ gboolean not_done (int eid, int a, int b) { tmpbd = the_bonds[eid]; while (tmpbd) { if (tmpbd -> a == a && tmpbd -> b == b) return FALSE; if (tmpbd -> a == b && tmpbd -> b == a) return FALSE; tmpbd = tmpbd -> next; } return TRUE; } /*! \fn void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) \brief print this bond to file \param eid equivalence id (not used for the time being) \param h the bond type \param fid the force field id \param inum the structural element id \param at_a 1st atom name \param at_b 2nd atom name \param the_bond the force field parameter(s) for this bond */ void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) { int j; gchar * node[3] = {"bd-h", "bd-q", "bd-m"}; gchar * aaa = g_strdup_printf ("%s", find_atom_key(fid, 2, at_a)); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 2, at_b)); if (eid < 0 || not_done (eid, find_atom_id (1, aaa), find_atom_id (1, bbb))) { if (eid > -1) { if (the_bonds[eid]) { tmpbd = the_bonds[eid]; while (tmpbd -> next) tmpbd = tmpbd -> next; tmpbd -> next = g_malloc0(sizeof*tmpbd -> next); tmpbd -> next -> prev = tmpbd; tmpbd = tmpbd -> next; } else { the_bonds[eid] = g_malloc0(sizeof*the_bonds[eid]); tmpbd = the_bonds[eid]; } tmpbd -> a = find_atom_id (0, aaa); tmpbd -> b = find_atom_id (0, bbb); tmpbd -> v[0] = string_to_double ((gpointer)the_bond[2]); tmpbd -> v[1] = string_to_double ((gpointer)the_bond[3]); } fprintf (fp, " <%s a=\"%d\" b=\"%d\" z_a=\"%d\" z_b=\"%d\"", node[h], find_atom_id (0, aaa), find_atom_id (0, bbb), find_atom_z (aaa), find_atom_z (bbb)); switch (h) { case 0: if (fid == CVFF || fid == CVFF_AUG || fid == CFF91 || fid == PCFF) { fprintf (fp, " K=\"%f\" R_zero=\"%f\"", string_to_double ((gpointer)the_bond[3]), string_to_double ((gpointer)the_bond[2])); } else { fprintf (fp, " K=\"%f\" R_zero=\"%f\"", string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[3])); } j = 4; break; case 1: fprintf (fp, " K=\"%f\" R_zero=\"%f\" KK=\"%f\" KKK=\"%f\"", string_to_double ((gpointer)the_bond[3]), string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[4]), string_to_double ((gpointer)the_bond[5])); j = 6; break; case 2: fprintf (fp, " D=\"%f\" R_zero=\"%f\" Alpha=\"%f\"", string_to_double ((gpointer)the_bond[3]), string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[4])); j = 5; break; } if (field_dim[inum+h] > j) { fprintf (fp, " info=\"%s\"", the_bond[j]); } fprintf (fp, "/>\n"); } else if (eid > -1) { g_debug ("Done:: tmpbd -> a= %d, tmpbd -> b= %d, tmpbd -> v[0]= %f, tmpbd -> v[1]= %f, this.v[0]= %f, this.v[1]=%f", tmpbd -> a, tmpbd -> b, tmpbd -> v[0], tmpbd -> v[1], string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[3])); } g_free (aaa); g_free (bbb); } /*! \fn void print_bond_table (int fid, int inum) \brief print force field bond table to file \param fid the force field id \param inum the structural element id */ void print_bond_table (int fid, int inum) { int h, i;//, j, k, l, m; gchar * bode[3] = {"bonds-h", "bonds-q", "bonds-m"}; gchar * desc[3] = {"Quadratic bonds:\n\n V(R) = K x (R - R0)^2\n" " With:\n - K = spring constant (kcal mol^-1 A^-2)\n - R = bond distance (A)\n - R0 = equilibrium distance (A)\n", "Quartic bonds:\n\n V(R) = K x (R - R0)^2 + K' x (R - R0)^3 + K'' x (R - R0)^4\n" " With:\n - K, K' and K'' = nth order spring constants (kcal mol^-1 A^-2)\n" " - R = bond distance (A)\n - R0 = equilibrium distance (A)", "Morse bonds:\n\n V(R) = D x (1 - exp(-ALPHA x (R - R0)))^2\n" " With:\n - D = well depth\n - ALPHA = well width\n - R = bond distance\n - R0 = equilibrium distance (A)"}; for (h=0; h<3; h++) { the_bonds[0] = the_bonds[1] = NULL; if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", bode[h]); fprintf (fp, " \n", desc[h]); /*if (fid > CHARMMSI && fid < OPLSAAP) { for (i=0; i next) { tmpbd = tmpbd -> next; g_free (tmpbd -> prev); } g_free (tmpbd); the_bonds[j] = NULL; } } } fprintf (fp, " \n", bode[h]); } else*/ { for (i=0; i\n", bode[h]); } } /*if (the_bonds[0] || the_bonds[1]) { for (i=0; i<2; i++) { if (the_bonds[i]) { tmpbd = the_bonds[i]; while (tmpbd -> next) { tmpbd = tmpbd -> next; g_free (tmpbd -> prev); } g_free (tmpbd); } } }*/ } } typedef struct f_angl f_angl; struct f_angl { int a; int b; int c; float v[2]; f_angl * next; f_angl * prev; }; f_angl * the_angles[2]; f_angl * tmpan; /*! \fn gboolean not_done_an (int eid, int a, int b, int c) \brief was this case already considered ? \param eid equivalence id (not used for the time being) \param a 1st atom id \param b 2nd atom id \param c 3rd atom id */ gboolean not_done_an (int eid, int a, int b, int c) { tmpan = the_angles[eid]; while (tmpan) { if (tmpan -> a == a && tmpan -> b == b && tmpan -> c == c) return FALSE; if (tmpan -> a == c && tmpan -> b == b && tmpan -> c == a) return FALSE; tmpan = tmpan -> next; } return TRUE; } /*! \fn void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle) \brief print this angle to file \param eid equivalence id (not used for the time being) \param h 0 = angle, 1 = angle restraints \param fid the force field id \param inum the structural element id \param ub Urey-Bradley parameter for the CHARRM FF, 2 for CHARMM FF, 0 otherwise \param at_a 1st atom name \param at_b 2nd atom name \param at_c 3rd atom name \param the_angle the force field parameter(s) for this angle */ void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle) { int j; gchar * node[2] = {"ang-h", "ang-q"}; gchar * aaa = g_strdup_printf ("%s", find_atom_key(fid, 3, at_a)); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 3, at_b)); gchar * ccc = g_strdup_printf ("%s", find_atom_key(fid, 3, at_c)); if (eid < 0 || not_done_an (eid, find_atom_id (1, aaa), find_atom_id (1, bbb), find_atom_id (1, ccc))) { if (eid > -1) { if (the_angles[eid]) { tmpan = the_angles[eid]; while (tmpan -> next) tmpan = tmpan -> next; tmpan -> next = g_malloc0(sizeof*tmpan -> next); tmpan -> next -> prev = tmpan; tmpan = tmpan -> next; } else { the_angles[eid] = g_malloc0(sizeof*the_angles[eid]); tmpan = the_angles[eid]; } tmpan -> a = find_atom_id (0, aaa); tmpan -> b = find_atom_id (0, bbb); tmpan -> c = find_atom_id (0, ccc); tmpan -> v[0] = string_to_double ((gpointer)the_angle[3]); tmpan -> v[1] = string_to_double ((gpointer)the_angle[4]); } fprintf (fp, " <%s a=\"%d\" b=\"%d\" c=\"%d\" z_a=\"%d\" z_b=\"%d\" z_c=\"%d\"", node[h], find_atom_id (0, aaa), find_atom_id (0, bbb), find_atom_id (0, ccc), find_atom_z (aaa), find_atom_z (bbb), find_atom_z (ccc)); switch (h) { case 0: if (fid >= CVFF && fid < COMPASS) { fprintf (fp, " K=\"%f\" Theta_zero=\"%f\"", string_to_double ((gpointer)the_angle[4]), string_to_double ((gpointer)the_angle[3])); } else { fprintf (fp, " K=\"%f\" Theta_zero=\"%f\"", string_to_double ((gpointer)the_angle[3]), string_to_double ((gpointer)the_angle[4])); } if (ub) { fprintf (fp, " Kub=\"%f\" S_zero=\"%f\"", string_to_double ((gpointer)the_angle[5]), string_to_double ((gpointer)the_angle[6])); } j = (ub) ? 7 : 5; break; case 1: fprintf (fp, " K=\"%f\" Theta_zero=\"%f\" KK=\"%f\" KKK=\"%f\"", string_to_double ((gpointer)the_angle[4]), string_to_double ((gpointer)the_angle[3]), string_to_double ((gpointer)the_angle[5]), string_to_double ((gpointer)the_angle[6])); j = 7; break; } if (field_dim[inum+h] > j) { fprintf (fp, " info=\"%s\"", the_angle[j]); } fprintf (fp, "/>\n"); } else if (eid > -1) { g_debug ("Done:: tmpan -> a= %d, tmpan -> b= %d, tmpan -> c= %d, tmpan -> v[0]= %f, tmpan -> v[1]= %f, this.v[0]= %f, this.v[1]=%f", tmpan -> a, tmpan -> b, tmpan -> c, tmpan -> v[0], tmpan -> v[1], string_to_double ((gpointer)the_angle[3]), string_to_double ((gpointer)the_angle[4])); } g_free (aaa); g_free (bbb); g_free (ccc); } /*! \fn void print_angle_table (int fid, int inum) \brief print angle(s) table to file \param fid the field id \param inum the object id */ void print_angle_table (int fid, int inum) { int h, i;//, j, k, l; int ub = (fid > AMBER99 && fid <= CHARMMSI) ? 2 : 0; // Urey-Bradley parameter for the CHARMM FF gchar * aode[2] = {"angles-h", "angles-q"}; gchar * desc[3] = {"Quadratic angles:\n\n V(Theta) = K x (Theta - Theta0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Theta = angle (°)\n - Theta0 = equilibrium angle (°)", "Quartic angles:\n\n V(Theta) = K x (Theta - Theta0)^2 + K' x (Theta - Theta0)^3 + K' x (Theta - Theta0)^4\n" " With:\n - K, K' and K'' = nth order spring constant (kcal mol^-1 rad^-nth)\n - Theta = angle (°)\n - Theta0 = equilibrium angle (°)", "Quadratic angles + Urey-Bradley (UB) parameters:\n\n V(Theta) = K x (Theta - Theta0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Theta = angle (°)\n - Theta0 = equilibrium angle(°)\n" " V(S) = Kub x (R - Rub)^2\n" " With:\n - Kub = spring constant (kcal mol^-1 A^-2)\n - S = distance 1-3 (A)\n - S0 = equilibrium distance 1-3 (A)"}; for (h=0; h<2; h++) { the_angles[0] = the_angles[1] = NULL; if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", aode[h]); fprintf (fp, " \n", desc[h+ub]); /*if (fid > CHARMMSI && fid < OPLSAAP) { for (i=0; i next) { tmpan = tmpan -> next; g_free (tmpan -> prev); } g_free (tmpan); the_angles[j] = NULL; } } } } else*/ { for (i=0; i\n", aode[h]); } } } /*! \fn void print_dihedral_table (int fid, int inum) \brief print dihedral(s) table to file \param fid the force field id \param inum the object id */ void print_dihedral_table (int fid, int inum) { int h, i, j; gchar * dode[2] = {"dihedrals-c", "dihedrals-ccc"}; gchar * node[2] = {"dih-c", "dih-ccc"}; gchar * desc[2] = {"Dihedrals / torsions:\n\n V(Phi) = K x (1 + cos(n x Phi - Phi0))\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = dihedral angle (°)\n - n = multiplicity\n - Phi0 = phase shift angle (°)", "Dihedrals / torsions\n\n V(Phi) = K x (Phi - Phi0)^2 + K' x (Phi - Phi0)^3 + K'' x (Phi - Phi0)^4\n" " With:\n - K, K' and K'' = nth order spring constant (kcal mol^-1 rad^-nth)\n - Phi = dihedral angle (°)\n - Phi0 = phase shift angle (°)"}; for (h=0; h<2; h++) { if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", dode[h]); fprintf (fp, " \n", desc[h]); for (i=0; i j) { fprintf (fp, " info=\"%s\"", field_dihedrals[h][i][j]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n", dode[h]); } } } /*! \fn void print_improper_table (int fid, int inum) \brief print improper(s) table to file \param fid the force field id \param inum the object id */ void print_improper_table (int fid, int inum) { int i, j; gchar * desc[2] = {"Impropers:\n\n V(Phi) = K x (1 + cos(n x Phi - Phi0))\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - n = multiplicity\n - Phi0 = equilibrium angle (°)", "Impropers: V(Phi) = K x (Phi - Phi0)^2\n\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - Phi0 = equilibrium angle (°)"}; int wid = (fid < 4 || fid == OPLSAAP || fid == OPLSAAR) ? 3 : 2; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc[wid == 3 ? 0 : 1]); for (i=0; i AMBER99 && fid < CVFF) ? field_impropers[i][0]: field_impropers[i][1])); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 5, (fid > AMBER99 && fid < CVFF) ? field_impropers[i][1]: field_impropers[i][0])); gchar * ccc = g_strdup_printf ("%s", find_atom_key(fid, 5, field_impropers[i][2])); gchar * ddd = g_strdup_printf ("%s", find_atom_key(fid, 5, field_impropers[i][3])); fprintf (fp, " AMBER99 && fid < CVFF) { fprintf (fp, " K=\"%f\" Phi_zero=\"%f\"", string_to_double ((gpointer)field_impropers[i][4]), string_to_double ((gpointer)field_impropers[i][6])); j = 7; } else { fprintf (fp, " K=\"%f\" Phi_zero=\"%f\"", string_to_double ((gpointer)field_impropers[i][4]), string_to_double ((gpointer)field_impropers[i][5])); j = 6; } if (field_dim[inum] > j) { fprintf (fp, " info=\"%s\"", field_impropers[i][j]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n"); } } /*! \fn void print_inversion_table (int fid, int inum) \brief print inversion(s) table to file \param fid the force field id \param inum the object id */ void print_inversion_table (int fid, int inum) { int i; gchar * desc = {"Inversions\n 0= Key_a, 1= Key_b, 2= Key_c, 3= Key_d, 4= K, 5= Phi0, 7= FF info\n\n V(φ) = K x (Phi - Phi0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - Phi0 = equilibrium angle (°)"}; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc); for (i=0; i 6) { fprintf (fp, " info=\"%s\"", field_inversions[i][6]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n"); } } /*! \fn void print_vdw_table (int fid, int inum) \brief print VdW table to file \param fid the force field id \param inum the object id */ void print_vdw_table (int fid, int inum) { int i, j, k, l; gchar * desc[3] = {"Non-bonded 12-6\n 0= Key_a, 1= Epslion, 2= R0 (A), 3= FF info\n\n Non-bonded (12-6): V(rij) = Epslion(ij) x [(R0(ij)/rij)^12 - 2 x (R0(ij)/rij)^6]\n" " With:\n" " Epslion(ij) = sqrt(Epslion(i) x Epslion(j)) and Epslion(i) (kcal mol^-1)\n" " R0(ij)= (R0(i) + R0(j))/2 and R0(i) (A)\n", "Non-bonded 12-6\n 0= Key_a, 1= A, 2= B, 3= FF info\n\n Non-bonded (12-6): V(rij) = A(ij)/rij^12 - B(ij)/rij^6\n" " With:\n" " A(ij) = sqrt(Ai x Aj)\n" " B(ij) = sqrt(Bi x Bj)\n", "Non-bonded 9-6\n 0= Key_a, 1= Epslion, 2= R0 (A), 3= FF info\n\n Non-bonded (9-6): V(rij) = Epslion(ij) x [2 x (R0(ij)/rij)^9 - 3 x (R0(ij)/rij)^6]\n" " With:\n" " Epslion(ij) = 2 x sqrt(Epslion(i) x Epslion(j)) x R0(i)^3 x R0(j)^3 / [ R0(i)^6 + R0(j)^6 ] and Epslion(i) (kcal mol^-1)\n" " R0(ij)= ((R0(i)^6 + R0(j)^6)/2) ^ 1/6 and R0(i) (A)\n"}; int wid = ((fid >= CHARMM22P && fid <= CHARMMSI) || (fid >= OPLSAAP)) ? 1 : 0; int did = (fid <= CHARMMSI || fid >= OPLSAAP) ? 0 : (fid == CVFF || fid == CVFF_AUG) ? 1 : 2; int cid = (fid > COMPASS) ? 1 : 0; int wdi[2] = {2, 4}; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc[did]); for (i=0; i= CHARMM22P && fid <= CHARMMSI) || fid > COMPASS) { fprintf (fp, " Eii=\"%f\" Rii=\"%f\"", string_to_double ((gpointer)field_vdw[i][3+2*cid]), string_to_double ((gpointer)field_vdw[i][4+2*cid])); } } j = wdi[wid]+1+2*cid; if (field_dim[inum] > j) { fprintf (fp, " info=\"%s\"", field_vdw[i][j]); } fprintf (fp, "/>\n"); if (fid <= AMBER99) { for (k=0; k j) { fprintf (fp, " info=\"Equi. to %s\"", field_vdw[i][0]); } fprintf (fp, "/>\n"); } } } } } } fprintf (fp, " \n"); } } field_object_match * field_objects_id[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; field_object_match * tmp_obj_id; char *** ff_atoms; // 0 = Quadratic, 1 = Quartic, 2 = Morse field_data * ff_bonds[3]; field_data * ff_angles[2]; field_data * ff_dih[2]; field_data * ff_imp; field_data * ff_inv; field_data * ff_vdw; int ff_unit; int * ff_objects; int * ff_dim; int * ff_info; int * ff_key; /*! \fn int field_find_atoms () \brief retrieve matching atom from force field data base */ int field_find_atoms () { int i, j, k, l; atoms_id = allocint (tmp_proj -> nspec); extraz_id = allocdint (5, tmp_proj -> nspec); atoms_id_list = g_malloc0(tmp_proj -> nspec*sizeof*atoms_id_list); k = 0; for (i=0; i nspec; i++) { atoms_id[i] = 0; #ifdef DEBUG g_debug ("Searching field atoms for spec: %d, label= %s, z= %d", i, tmp_proj -> chemistry -> label[i], (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]); #endif for (j=0; j chemistry -> label[i]), exact_name(ff_atoms[j][0])) == 0) { atoms_id[i] ++; } } if (atoms_id[i] > 0) k ++; } for (i=0; i nspec; i++) { #ifdef DEBUG g_debug ("For spec: %d, number of match = %d", i, atoms_id[i]); #endif if (atoms_id[i]) { atoms_id_list[i] = g_malloc0(atoms_id[i]*sizeof*atoms_id_list[i]); l = 0; for (j=0; j chemistry -> label[i]), exact_name(ff_atoms[j][0])) == 0) { atoms_id_list[i][l] = j; l ++; } } } } return k; } int is_extra; /*! \fn gboolean is_a_match (int * data, int num, int val[4]) \brief is this a match ? \param data the set of parameter(s) \param num the number of parameter \param val the target value(s) */ gboolean is_a_match (int * data, int num, int val[4]) { int i; for (i=0; i 0) { for (i=0; i atoms_z[i], 2, val); break; case FANG: do_this_id = is_a_match (ff_angles[h] -> atoms_z[i], 3, val); break; case FDIH: do_this_id = is_a_match (ff_dih[h] -> atoms_z[i], 4, val); break; case FIMP: do_this_id = is_a_match (ff_imp -> atoms_z[i], 4, val); break; case FINV: do_this_id = is_a_match (ff_inv -> atoms_z[i], 4, val); break; case FNBD: do_this_id = is_a_match (ff_vdw -> atoms_z[i], 1, val); break; default: break; } if (do_this_id) { save_this_id = TRUE; if (field_objects_id[oid]) { test_obj_id = field_objects_id[oid]; while (test_obj_id != NULL) { if (test_obj_id -> type == h && test_obj_id -> oid == i) { save_this_id = FALSE; break; } test_obj_id = test_obj_id -> next; } if (save_this_id) { tmp_obj_id -> next = g_malloc0(sizeof*tmp_obj_id -> next); tmp_obj_id -> next -> id = tmp_obj_id -> id + 1; tmp_obj_id = tmp_obj_id -> next; } } else { field_objects_id[oid] = g_malloc0(sizeof*field_objects_id[oid]); tmp_obj_id = field_objects_id[oid]; } if (save_this_id) { // if (oid == 3) g_debug ("Saving Impropers, sa= %d, sb= %d, sc= %d, sd= %d", sa, sb, sc, sd); tmp_obj_id -> obj = oid; tmp_obj_id -> type = h; tmp_obj_id -> oid = i; if (oid < 5) { if (sa > -1) extraz_id[oid][sa] += is_extra; if (sb > -1) extraz_id[oid][sb] += is_extra; if (sc > -1) extraz_id[oid][sc] += is_extra; if (sd > -1) extraz_id[oid][sd] += is_extra; } } } } } } } /*! \fn void field_find_bonds () \brief retrieve available bond parameters in force field database */ void field_find_bonds () { int i, j, k, l; for (i=0; i nspec-1; i++) { if (atoms_id[i] > 0) { for (j=i+1; j nspec; j++) { if (atoms_id[j] > 0) { k = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; l = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; find_object_ijkl (1, 1, 0, i, k, j, l, -1, -1, -1, -1); find_object_ijkl (1, 1, 0, j, l, i, k, -1, -1, -1, -1); } } } } for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { k = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; find_object_ijkl (1, 1, 0, i, k, i, k, -1, -1, -1, -1); } } } /*! \fn void field_find_angles () \brief retrieve available angle parameters in force field database */ void field_find_angles () { int i, j, k, l, m, n; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { l = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; for (j=0; j nspec; j++) { if (atoms_id[j] > 0) { m = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (k=0; k nspec; k++) { if (atoms_id[k] > 0) { n = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][k]; find_object_ijkl (0, 4, 1, i, l, j, m, k, n, -1, -1); } } } } } } } /*! \fn void field_find_dihedrals (int id) \brief retrieve available dihedral parameters in force field database \param id 0 = dihedral(s), 1 = improper(s), 2 = inversion(s) */ void field_find_dihedrals (int id) { int i, j, k, l, m, n, o, p, q; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { m = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; for (j=0; j nspec; j++) { if (atoms_id[j] > 0) { n = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (k=0; k nspec; k++) { if (atoms_id[k] > 0) { o = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][k]; for (l=0; l nspec; l++) { if (atoms_id[l] > 0) { p = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][l]; q = (id) ? 1 : 0; find_object_ijkl (-q, 6+q*2+q*(id-1), 2+id, i, m, j, n, k, o, l, p); } } } } } } } } } /*! \fn void field_find_vdw () \brief retrieve available VdW parameters in force field database */ void field_find_vdw () { int i, j; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { j = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; find_object_ijkl (-1, 10, 5, i, j, -1, -1, -1, -1, -1, -1); } } } #ifdef DEBUG /*! \fn void print_all (int oid) \brief print found force field data \param oid the type of structural element */ void print_all (int oid) { gchar * prop[7] = {"atom", "bond", "angle", "dihedral", "improper", "inversion", "vdw"}; g_debug ("Field %s found: %d", prop[oid-1], tmp_obj_id -> id+1); while (tmp_obj_id != NULL) { g_debug (" %s N° %d: h= %d, oid= %d", prop[oid-1], tmp_obj_id -> id+1, tmp_obj_id -> type, tmp_obj_id -> oid); tmp_obj_id = tmp_obj_id -> next; } } #endif /*! \fn float get_force_field_atom_mass (int sp, int num) \brief get force field atomic mass \param sp the target chemical species \param num the atom id */ float get_force_field_atom_mass (int sp, int num) { g_debug ("sp= %d, atoms_id[%d]= %d, num= %d", sp, sp, atoms_id[sp], num); if (atoms_id[sp] > 0 && num >= 0 && num <= atoms_id[sp]) { return string_to_double ((gpointer)ff_atoms[atoms_id_list[sp][num]][1]); } else { return 0.0; } } #ifdef USE_ATOMS gchar * filetoread; /*! \fn void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief free force field XML file data \param doc the xmlDoc pointer to free \param reader the XML reader to free */ void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) { clean_xml_data (doc, reader); if (filetoread) g_free (filetoread); filetoread = NULL; if (ff_objects) g_free (ff_objects); ff_objects = NULL; if (ff_dim) g_free (ff_dim); ff_dim = NULL; if (ff_key) g_free (ff_key); ff_key = NULL; if (ff_info) g_free (ff_info); ff_info = NULL; int i; for (i=0; i<3; i++) { if (i < 2) { if (ff_angles[i]) { g_free (ff_angles[i]); ff_angles[i] = NULL; } if (ff_dih[i]) { g_free (ff_dih[i]); ff_dih[i] = NULL; } } if (ff_bonds[i]) { g_free (ff_bonds[i]); ff_bonds[i] = NULL; } } if (ff_imp) { g_free (ff_imp); ff_imp = NULL; } if (ff_inv) { g_free (ff_inv); ff_inv = NULL; } if (ff_vdw) { g_free (ff_vdw); ff_vdw = NULL; } } /*! \fn gchar * open_field_file (int field) \brief open force field XML file \param field the id of the force field to open */ gchar * open_field_file (int field) { int i, j; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, f_node; xmlNodePtr n_node, m_node, o_node; field_data * ff_data; xmlAttrPtr prop; xmlChar * content; const xmlChar fml[7]="ff-xml"; gchar * data_nodes[11]={"atoms", "bonds-h", "bonds-q", "bonds-m", "angles-h", "angles-q", "dihedrals-c", "dihedrals-ccc", "impropers", "inversions", "non-bonded"}; gchar * data_n[11]={"at", "bd-h", "bd-q", "bd-m", "ang-h", "ang-q", "dih-c", "dih-ccc", "imp", "inv", "non-bd"}; gchar * str; filetoread = NULL; ff_objects = NULL; ff_dim = NULL; ff_key = NULL; ff_info = NULL; ff_unit = -1; gchar * force_field_name; gboolean setinfo; int odim[10] = {2, 2, 2, 3, 3, 4, 4, 4, 4, 1}; /* * build an xmlReader for that file */ #ifdef G_OS_WIN32 filetoread = g_strdup_printf ("%s\\force_fields\\%s.ffl", PACKAGE_LIB_DIR, field_ffl[field]); #else filetoread = g_strdup_printf ("%s/force_fields/%s.ffl", PACKAGE_LIB_DIR, field_ffl[field]); #endif reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { g_warning ("Error reading FF file %s, reader error ?!", filetoread); return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) { g_warning ("Error reading FF file %s, xmlParsing error ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } racine = xmlDocGetRootElement(doc); if (racine == NULL) { g_warning ("Error reading FF file %s, missing XML root node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } if (g_strcmp0 ((char *)(racine -> name), (char *)fml) != 0) { g_warning ("Error reading FF file %s, missing ff-xml node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } // nodes :: field-name, data, atoms, bonds, angles, dihedrals, impropers, inversons, non-bonded, bond-inc ? f_node = findnode (racine -> children, "force-field"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing force field node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(f_node); force_field_name = g_strdup_printf ("%s", content); xmlFree (content); f_node = findnode (racine -> children, "units"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing units node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(f_node); str = g_strdup_printf ("%s", content); xmlFree (content); for (i=0; i<4;i++) { if (g_strcmp0 (str, fnames[activef][0][i]) == 0) { ff_unit = i; break; } } if (ff_unit < 0) { g_warning ("Error reading FF file %s, units, ff_unit = %d < 0 ?!", filetoread, ff_unit); clean_this_field_data (doc, reader); return NULL; } f_node = findnode (racine -> children, "ff-data"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing ff-data node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } ff_objects = g_malloc0(11*sizeof*ff_objects); ff_dim = g_malloc0(11*sizeof*ff_dim); //ff_info = g_malloc0(11*sizeof*ff_key); ff_key = g_malloc0(10*sizeof*ff_key); for (i=0; i<11; i++) { m_node = findnode (f_node -> children, data_nodes[i]); if (m_node == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(m_node); ff_objects[i] = (int)string_to_double ((gpointer)content); xmlFree (content); if (ff_objects[i] < 0) { g_warning ("Error reading FF file %s, ff-data, ff_objects[%d] = %d < 0 ?!", filetoread, i, ff_objects[i]); clean_this_field_data (doc, reader); return NULL; } else if (ff_objects[i]) { prop = m_node -> properties; if (prop == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing node prop ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } while (prop) { o_node = prop -> children; if (o_node == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing prop data ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(o_node); if (g_strcmp0 ("dim",(char *)prop -> name) == 0) { ff_dim[i] = (int) string_to_double ((gpointer)content); } /*else if (g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_info[i] = (int)string_to_double ((gpointer)content); }*/ else if (g_strcmp0 ("pot",(char *)prop -> name) == 0) { ff_key[i-1] = (int)string_to_double ((gpointer)content); } xmlFree (content); prop = prop -> next; } } } for (i=0; i<11; i++) { if (ff_objects[i]) { f_node = findnode (racine -> children, data_nodes[i]); if (f_node == NULL) { g_warning ("Error reading FF file %s, i= %d, missing node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } n_node = f_node -> children; if (n_node == NULL) { g_warning ("Error reading FF file %s, i= %d, missing child node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } if (i == 0) { ff_atoms = g_malloc0(ff_objects[0]*sizeof*ff_atoms); for (j=0; j 0) { ff_data -> atoms_z = g_malloc0(ff_objects[i]*sizeof*ff_data -> atoms_z); ff_data -> atoms_id = g_malloc0(ff_objects[i]*sizeof*ff_data -> atoms_id); ff_data -> npar = ff_dim[i]; ff_data -> key = ff_key[i-1]; ff_data -> param = g_malloc0(ff_objects[i]*sizeof*ff_data -> param); for (j=0; j atoms_z[j] = g_malloc0(odim[i-1]*sizeof*ff_data -> atoms_z[j]); ff_data -> atoms_id[j] = g_malloc0(odim[i-1]*sizeof*ff_data -> atoms_id[j]); ff_data -> param[j] = g_malloc0(ff_dim[i]*sizeof*ff_data -> param[j]); } ff_data -> info = g_malloc0(ff_objects[i]*sizeof*ff_data -> info); } setinfo = FALSE; for (j=0; j properties; if (prop == NULL) { g_warning ("Error reading FF file %s, i= %d, j= %d, missing prop ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } while (prop) { o_node = prop -> children; if (o_node == NULL) { g_warning ("Error reading FF file %s, i= %d, j= %d, missing prop node ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(o_node); switch (i) { case 0: if (g_strcmp0 ("label",(char *)prop -> name) == 0) { ff_atoms[j][0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("mass",(char *)prop -> name) == 0) { ff_atoms[j][1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("key",(char *)prop -> name) == 0) { ff_atoms[j][2] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_atoms[j][3] = g_strdup_printf ("%s", content); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } break; default: if (g_strcmp0 ("a",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][0] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("b",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][1] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("c",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][2] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("d",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][3] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_a",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][0] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_b",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][1] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_c",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][2] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_d",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][3] = (int) string_to_double ((gpointer)content); } else if (i > 0 && g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_data -> info[j] = g_strdup_printf ("%s", content); setinfo = TRUE; } else { if (i == 10) { // Non-bonded: 12-6: E_i, R_i, E_14, R_14 if (g_strcmp0 ("Ei",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Ri",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Eii",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Rii",(char *)prop -> name) == 0) { ff_data -> param[j][3] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("A",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("B",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?! node name= %s", filetoread, i, j, (char *)prop -> name); clean_this_field_data (doc, reader); xmlFree (content); return NULL; } } else { // Bonds: Harm: K, R0 // Bonds: Quartic: K, R_0, K', K'' // Bonds: Morse: D, R_0, Alpha // Angle: Quartic: K, Theta_0, K', K'' // Dihedral: Cosine: K, Phi_0, n // Dihedral: Cosine 3: K, Phi_0, K', K'' // Improper: Cosine: K, n, Phi_0 / Harm: K, Phi_0 // Inversion: Harm: K, Phi_0 if (g_strcmp0 ("K",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("R_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Theta_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Phi_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("KK",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("KKK",(char *)prop -> name) == 0) { ff_data -> param[j][3] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Kub",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("S_zero",(char *)prop -> name) == 0) { ff_data -> param[j][3] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("n",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("D",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Alpha",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?! node name= %s", filetoread, i, j, (char *)prop -> name); xmlFree (content); clean_this_field_data (doc, reader); return NULL; } } } break; } xmlFree (content); prop = prop -> next; } n_node = n_node -> next; } if (i > 0 && ! setinfo) { g_free (ff_data -> info); ff_data -> info = NULL; } /*if (i==0) { for (j=0; j next) { tmp_obj_id = tmp_obj_id -> next; g_free (tmp_obj_id -> prev); } g_free (tmp_obj_id); field_objects_id[i] = NULL; } } gchar * name = open_field_file (id); if (g_strcmp0 (name, field_acro[id]) != 0) { // Error in xml file ?! tmp_field -> type = -1; } else if (name) { int spf = field_find_atoms (); if (spf < tmp_proj -> nspec) { // Some atomic species are not described in this force field // Take action ? } int i; for (i=0; i<6; i++) { if (field_objects_id[i]) { tmp_obj_id = field_objects_id[i]; while (tmp_obj_id -> next) { tmp_obj_id = tmp_obj_id -> next; g_free (tmp_obj_id -> prev); } g_free (tmp_obj_id); field_objects_id[i] = NULL; } } // Bonds tmp_obj_id = NULL; field_find_bonds (); #ifdef DEBUG if (tmp_obj_id) print_all (FBDS); #endif // Angles tmp_obj_id = NULL; field_find_angles (); #ifdef DEBUG if (tmp_obj_id) print_all (FANG); #endif // Dihedrals tmp_obj_id = NULL; field_find_dihedrals (0); #ifdef DEBUG if (tmp_obj_id) print_all (FDIH); #endif // Impropers tmp_obj_id = NULL; field_find_dihedrals (1); #ifdef DEBUG if (tmp_obj_id) print_all (FIMP); #endif // Inversions tmp_obj_id = NULL; field_find_dihedrals (2); #ifdef DEBUG if (tmp_obj_id) print_all (FINV); #endif // Vdw tmp_obj_id = NULL; field_find_vdw (); #ifdef DEBUG if (tmp_obj_id) print_all (FNBD); #endif } #else int i; gchar * str; //FILE * hp = fopen ("force_fields.h", "w"); for (i=0; i\n"); fprintf (fp, "\n"); fprintf (fp, "\n"); fprintf (fp, " %s\n", field_acro[i]); fprintf (fp, " \n", ffo_file[i]); fprintf (fp, " k-calories per mol\n"); g_free (str); print_object_dim_and_key_tables (i); print_atom_table (i); print_bond_table (i, 3); print_angle_table (i, 6); print_dihedral_table (i, 8); print_improper_table (i, 11); print_inversion_table (i, 10); print_vdw_table (i, 12); //print_increment_table (i, 13) fprintf (fp, "\n"); fclose (fp); } //fclose (hp); #endif } atomes_1.3.1/src/calc/force_fields/charmm22_prot.c0000664000175000017500000037463515212624223021467 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm22_prot.c * @short CHARMM-charmm22_prot force field, from 'charmm22_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm22_prot.c' * * Contains: * CHARMM-charmm22_prot force field, data from taken from: - the file: 'charmm22_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm22_prot_atoms[47][5] Bonds : charmm22_prot_bonds[122][5] Angles : charmm22_prot_angles[324][8] Dihedrals : charmm22_prot_dihedrals[445][8] Impropers : charmm22_prot_impropers[34][8] Non bonded : charmm22_prot_vdw[47][6] */ #include "global.h" int charmm22_prot_objects[14] = {47, 0, 0, 122, 0, 0, 324, 0, 445, 0 , 0, 34, 47, 0}; int charmm22_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm22_prot info */ char * charmm22_prot_atoms[47][5]= {{"H", "1.00800", "H", "polar H", "41"}, {"H", "1.00800", "HC", "N-ter H", "42"}, {"H", "1.00800", "HA", "nonpolar H", "43"}, {"H", "1.00800", "HP", "aromatic H", "44"}, {"H", "1.00800", "HB", "backbone H", "45"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "46"}, {"H", "1.00800", "HR2", "(+) his HE1", "47"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "48"}, {"H", "1.00800", "HS", "thiol hydrogen", "49"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "50"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "51"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "52"}, {"C", "12.01100", "CA", "aromatic C", "53"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "54"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "55"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "56"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "57"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "58"}, {"C", "12.01100", "CPT", "trp C between rings", "59"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "60"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "61"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "62"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "63"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "64"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "65"}, {"C", "12.01100", "CS", "thiolate carbon", "66"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "67"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "68"}, {"C", "12.01100", "C3", "cyclopropyl carbon", "69"}, {"N", "14.00700", "N", "proline N", "70"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "71"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "72"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "73"}, {"N", "14.00700", "NH1", "peptide nitrogen", "74"}, {"N", "14.00700", "NH2", "amide nitrogen", "75"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "76"}, {"N", "14.00700", "NC2", "guanidinium nitroogen", "77"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "78"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "79"}, {"O", "15.99900", "O", "carbonyl oxygen", "80"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "81"}, {"O", "15.99900", "OC", "carboxylate oxygen", "82"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "83"}, {"O", "15.99940", "OS", "ester oxygen", "84"}, {"S", "32.06000", "S", "sulphur", "85"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "86"}, {"S", "32.06000", "SS", "thiolate sulfur", "87"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm22_prot info V(R) = Kb x (R - R0)^2 */ char * charmm22_prot_bonds[122][5]= {{"NH2", "CT1", "240.00", "1.455", " "}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CPT", "CA", "305.000", "1.3680", "adm jr., 12/30/91, for jwk"}, {"CPT", "CPT", "360.000", "1.4000", "jr., 12/30/91, for jwk"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CY", "CA", "350.000", "1.3650", "jr., 5/08/91, indole CCDB structure search"}, {"CY", "CPT", "350.000", "1.4400", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "230.000", "1.5100", "Kb from alkane freq.. b0 from TRP crystal"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CA", "340.000", "1.0830", "trp, adm jr., 10/02/89"}, {"HA", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "330.000", "1.0800", "JWK 05/14/91 new r0 from indole"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HP", "CY", "350.000", "1.0800", "jr., 12/30/91, for jwk"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "463.000", "1.3650", "403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"NC2", "CT2", "261.000", "1.4900", "arg, (DS)"}, {"NC2", "CT3", "261.000", "1.4900", "methylguanidinium, adm jr., 3/26/92"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "270.000", "1.3700", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "270.000", "1.3750", "jr., 12/30/91, for jwk"}, {"NY", "H", "465.000", "0.9760", "indole JWK 08/28/89"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", " "}, {"O", "CD", "720.000", "1.2050", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm22_prot info V(S) = Kub x (S - S0)^2 */ char * charmm22_prot_angles[324][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "60.000", "118.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CPT", "CA", "60.000", "122.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CY", "CA", "120.000", "107.40", "25.00", "2.26100", "jr., 12/30/91, for jwk"}, {"CPT", "NY", "CA", "110.000", "108.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CY", "CA", "45.800", "129.4000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "CY", "CPT", "45.800", "124.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"CY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "CT1", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "NY", "CA", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA", "CA", "CA", "29.000", "120.00", "25.00", "2.15250", "trp, adm jr., 10/02/89"}, {"HA", "CA", "CPT", "41.000", "122.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"HA", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CS", "HA", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "HA", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT2", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CY", "33.430", "109.5000", " ", " ", "ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA"}, {"HA", "CT2", "HA", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "HA", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "CA", "20.000", "126.40", "25.00", "2.18600", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT2", "HB", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "jr., 12/30/91, for jwk"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "52.000", "120.00", "90.00", "2.36420", "changed from 60.0/120.3 for guanidinium (KK)"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA", "51.500", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT3", "HA", "51.500", "107.5000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HA", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT2", "HB", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT3", "HA", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NY", "CA", "CY", "120.000", "110.00", "25.00", "2.24000", "jr., 12/30/91, for jwk"}, {"NY", "CA", "HA", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT2", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm22_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm22_prot_dihedrals[445][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.000", "1", "0.00", " "}, {"H", "NH2", "CT1", "HB", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT1", "CT2", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CA", "CPT", "CPT", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "CT2", "CT1", "C", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CE1", "CE1", "CT3", "HA", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "NY", "CA", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", " "}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CT2", "CT3", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CY", "CA", "NY", "CPT", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NY", "CA", "CY", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CA", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CPT", "0.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT1", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA", "CA", "CA", "CA", "3.5000", "2", "180.00", "adm jr., 10/02/89"}, {"HA", "CA", "CA", "CPT", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CA", "HA", "2.5000", "2", "180.00", "ADM JR., 10/02/89"}, {"HA", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "TRP (JES)"}, {"HA", "CA", "CPT", "CY", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CY", "CPT", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "NY", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "NY", "H", "1.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT2", "CY", "CA", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT3", "CS", "HA", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CY", "CA", "CPT", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CA", "HA", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HB", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "NY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT1", "0.2400", "1", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.1500", "2", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.2700", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "0.4000", "1", "0.00", "adm jr. 3/24/92, for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CT2", "3.5000", "2", "180.00", "JWK"}, {"NY", "CA", "CY", "HA", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CA", "HA", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CY", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CPT", "CPT", "X", "0.0000", "2", "180.00", "JWK indole 05/14/91"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1950", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "rotation barrier in Ethane (SF)"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1550", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm22_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm22_prot_impropers[34][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "40.0000", "0", "0.0000", "5.75->40.0 GUANIDINIUM (KK)"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "100.0000", "0", "0.0000", "jr., 5/15/91, indole 3-21G HE1 out-of-plane surf."}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm22_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm22_prot_vdw[47][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CPT", "-0.090000", "1.800000", "-0.090000", "1.900000", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CT1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CT2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CT3", "-0.080000", "2.060000", "-0.010000", "1.900000", " "}, {"CY", "-0.070000", "1.992400", " ", " ", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HB", "-0.022000", "1.320000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}, {"C3", "-0.020000", "2.275000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/cff91.c0000664000175000017500000103234615212624223017707 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cff91.c * @short CFF91 force field, from 'CFF91.frc' * @author Sébastien Le Roux */ /* * This file: 'cff91.c' * * Contains: * CFF91 force field, data from taken from: - the file: 'CFF91.frc' This file contains several tables: Atoms : CFF91_atoms[93][5] Equivalence : CFF91_equivalence_auto[97][11] Equivalence : CFF91_equivalence[95][7] Quadractic bonds : CFF91_bonds_auto[667][5] Quartic bonds : CFF91_bonds[58][7] Quadratic angles : CFF91_angles_auto[330][6] Quartic angles : CFF91_angles[155][8] Torsions : CFF91_torsions_auto[216][8] Torsions : CFF91_torsions[294][11] Inversions : CFF91_inversions[70][7] Non bonded : CFF91_vdw[40][4] Bond increments : CFF91_bond_increments[560][5] */ #include "global.h" int CFF91_objects[14] = {93, 97, 95, 667, 58, 0, 330, 155, 216, 294, 70, 0, 40, 560}; int CFF91_dim[14] = {5, 11, 7, 5, 7, 0, 6, 8, 8, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CFF91 info */ char * CFF91_atoms[93][5]= {{"C", "12.01115", "c", "generic SP3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3", "sp3 carbon with 3 hHs 1 heavy", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c2", "sp3 carbon with 2 H's, 2 Heavy's", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "co", "sp3 carbon in acetals", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3m", "sp3 carbon in 3-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4m", "sp3 carbon in 4-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "coh", "sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 1"}, {"C", "12.01115", "c3h", "sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 2"}, {"C", "12.01115", "c4h", "sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 2"}, {"C", "12.01115", "c1", "sp3 carbon with 1 H 3 heavies", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ca", "general amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cg", "sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=", "non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=1", "non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"C", "12.01115", "c=2", "non aromatic doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"C", "12.01115", "c*", "carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 4"}, {"C", "12.01115", "c\"", "carbon in carbonyl group, non_amides", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c'", "carbon in carbonyl group of amides", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cp", "sp2 aromatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c5", "sp2 aromatic carbon in 5-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c-", "C in charged carboxylate", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cr", "C in neutral arginine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c+", "C in guanidinium group", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cs", "sp2 aromatic carbon in 5 membered ring next to S", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ci", "sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct", "sp carbon involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct2", "sp carbon in CO2", "Ver. 2.0, Ref. 6"}, {"N", "14.00670", "na", "sp3 nitrogen in amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3m", "sp3 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4m", "sp3 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3n", "sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "n4n", "sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nb", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nn", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n", "generic sp2 nitrogen (in amids))", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "np", "sp2 nitrogen in 5- or 6-membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "npc", "sp2 nitrogen in 5- or 6-membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nh", "sp2 nitrogen in 5- or 6- membered ring with hydrogen attached", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nho", "sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nh+", "protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "n+", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=", "non aromatic end doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=1", "non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"N", "14.00670", "n=2", "non aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 3"}, {"N", "14.00670", "ni", "nitrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n1", "sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n2", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nt", "sp nitrogen involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nz", "sp nitrogen in N2", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o", "generic SP3 oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oh", "oxygen bonded to hydrogen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oc", "sp3 oxygen in ether or acetals", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oe", "sp3 oxygen in ester", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o3e", "sp3 oxygen in three membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o4e", "sp3 oxygen in four membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o'", "oxygen in carbonyl group", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "op", "sp2 aromatic in 5 membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o*", "oxygen in water", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o-", "partial double oxygen bonded to something then bonded to another partial double oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h", "generic hydrogen bound to C, Si,or H", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "hydrogen bonded to nitrogen, Oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h+", "charged hydrogen in cations", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "hydrogen bonded to sulfur", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hc", "hydrogen bonded to carbon", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "hydrogen bonded to phosphorus", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "hydrogen bonded to oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "hydrogen bonded to nitrogen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hw", "hydrogen in water", "Ver. 1.0, Ref. 1"}, {"D", "2.014000", "dw", "deuterium in heivy water", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s", "sp3 sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s3e", "sulfur in three membered ring", "Ver. 2.0, Ref. 2"}, {"S", "32.06400", "s4e", "sulfur in four membered ring", "Ver. 2.0, Ref. 2"}, {"S", "32.06400", "s1", "sp3 sulfur involved in (S-S) group of disulfides", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sh", "sp3 sulfur in sulfhydryl (-SH) group (e.g. cysteine)", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sp", "sulfur in an aromatic ring (e.g. thiophene)", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s'", "S in thioketone group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s-", "partial double sulfur bonded to something then bonded to another partial double oxygen or sulfur", "Ver. 1.0, Ref. 1"}, {"P", "30.97380", "p", "general phosphorous atom", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "si", "silicon atom", "Ver. 1.0, Ref. 1"}, {"Ca", "40.08000", "ca+", "calcium ion", "Ver. 1.0, Ref. 1"}, {"F", "18.99840", "f", "fluorine atom", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "cl", "chlorine atom", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "Cl", "chlorine ion", "Ver. 1.0, Ref. 1"}, {"Br", "79.90900", "br", "bromine atom", "Ver. 1.0, Ref. 1"}, {"Br", "79.90900", "Br", "bromine ion", "Ver. 1.0, Ref. 1"}, {"I", "126.9044", "i", "iodine atom", "Ver. 1.0, Ref. 1"}, {"Na", "22.98980", "Na", "sodium ion", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "lone pair", "Ver. 1.0, Ref. 1"}, {"Ar", "39.94800", "ar", "Argon atom", "Ver. 1.0, Ref. 1"}}; /* Equivalence table for key symbols CFF91 auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CFF91 info */ char * CFF91_equivalence_auto[97][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hn", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"ho", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hs", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hi", "h*", "hi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"h+", "h+", "h+", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cg", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"ca", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cn", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c2", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c1", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"coh", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3h", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c4h", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cp", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"c5", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"cs", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"ci", "cp", "ci", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"c*", "c*", "c*", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 4"}, {"c\"", "c*", "c*", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 4"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"cr", "cr", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c-", "c-", "c-", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c+", "c+", "c+", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"c=1", "c=", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"c=2", "c=", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"ct", "c=", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 7"}, {"ct2", "c=", "ct", "ct2_", "c_", "ct2_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 6"}, {"na", "na", "na", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n3m", "na", "na", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n4m", "na", "na", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"np", "np", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"npc", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nho", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nh+", "nh", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"ni", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "nn", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"nb", "nn", "nn", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n+", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n4", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"nr", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n2", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n1", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"n=1", "n=", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"n=2", "n=", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"nt", "nt", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 2"}, {"nz", "nz", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 2"}, {"o", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oh", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oc", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oe", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o3e", "o", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o4e", "o", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"op", "op", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 2"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o-", "o-", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s'", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s-", "s", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sh", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 2"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 2"}, {"pz", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 2"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 2"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 2"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "cl_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 2"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 2"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 2"}, {"sz", "sz", "sz", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "Ver. 2.0, Ref. 2"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 2"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 2"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 2"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 2"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 2"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 9"}}; /* Equivalence table for key symbols CFF91 with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CFF91 info */ char * CFF91_equivalence[95][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hs", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hi", "h*", "hi", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"ho", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"h+", "h+", "h+", "h+", "h+", "h+", "Ver. 1.0, Ref. 1"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"coh", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c3h", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c4h", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c1", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cg", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 3"}, {"c*", "c*", "c*", "c*", "c*", "c*", "Ver. 2.0, Ref. 4"}, {"c\"", "c*", "c*", "c*", "c*", "c*", "Ver. 2.0, Ref. 4"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"ci", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cr", "cr", "cr", "cr", "cr", "cr", "Ver. 1.0, Ref. 1"}, {"c+", "c+", "c+", "c+", "c+", "c+", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "c-", "c-", "c-", "c-", "Ver. 1.0, Ref. 1"}, {"ct", "c=", "ct", "ct", "ct", "ct", "Ver. 2.0, Ref. 7"}, {"ct2", "c=", "ct2", "ct2", "ct2", "ct2", "Ver. 2.0, Ref. 6"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 2"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 2"}, {"na", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n3m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n4m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"nn", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"nb", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"n+", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n4", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"np", "np", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"npc", "nh", "nh", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nho", "nh", "nh", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nh+", "nh", "nh+", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nr", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n2", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n=", "n=", "n=", "n=", "n=", "n=", "Ver. 1.0, Ref. 1"}, {"n=1", "n=", "n=1", "n=", "n=1", "n=", "Ver. 1.0, Ref. 1"}, {"n=2", "n=", "n=2", "n=", "n=2", "n=", "Ver. 1.0, Ref. 1"}, {"n1", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"ni", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nt", "n=", "nt", "nt", "nt", "nt", "Ver. 2.0, Ref. 5"}, {"nz", "n=", "nz", "nz", "nz", "nz", "Ver. 1.0, Ref. 10"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"op", "op", "op", "op", "op", "op", "Ver. 1.0, Ref. 1"}, {"o", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oc", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oe", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o3e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o4e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o-", "o-", "o-", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"oh", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 2"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 2"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sp", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"s'", "sp", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 11"}, {"s-", "sp", "s-", "s-", "s-", "s-", "Ver. 1.0, Ref. 11"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"pz", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.0, Ref. 1"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 1.0, Ref. 1"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 2.0, Ref. 9"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CFF91 info E = K2 * (R - R0)^2 */ char * CFF91_bonds_auto[667][5]= {{"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "ct_", "1.4000", "340.000", "Ver. 2.0, Ref. 2"}, {"c3m_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct2_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct2_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct2_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct2_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 2"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 2"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 2"}, {"c'_", "ct2_", "1.4200", "311.1492", "Ver. 2.0, Ref. 6"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 2"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 2"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 2"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 2"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 2"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 2"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 2"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 2"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 2"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 2"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 2"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 2"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 2"}, {"cp_", "ct2_", "1.4000", "321.6716", "Ver. 2.0, Ref. 6"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 2"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 2"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 2"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 2"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 2"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 2"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 2"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 2"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 2.0, Ref. 2"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 2.0, Ref. 2"}, {"ci", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 2"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 2"}, {"c=", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 6"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 2"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "ct2_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 2"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 2"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 2"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 2"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 2"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 2"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 2"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 2"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 2"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 2"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 2"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 2"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 2"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 2"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 2"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 2"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 2"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 2"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 2"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 2"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 2"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 2"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 2"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 2"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 2"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 2"}, {"ct2_", "ct2_", "1.2040", "800.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct2_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 6"}, {"ct2_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 6"}, {"ct2_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"ct2_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 6"}, {"ct2_", "o'_", "1.1600", "615.3220", "Ver. 2.0, Ref. 6"}, {"ct2_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 6"}, {"ct2_", "s'_", "1.6000", "510.2775", "Ver. 2.0, Ref. 6"}, {"ct2_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 6"}, {"ct2_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 6"}, {"ct2_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 6"}, {"ct2_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 6"}, {"ct2_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 6"}, {"ct2_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 6"}, {"ct2_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 6"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 2"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 2"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 2"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 2"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 2"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 2"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 2"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 2"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 2"}, {"np_", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 2"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 2"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 2"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 3"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 3"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 3"}, {"n=", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=_1", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 2"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 3"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 3"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 3"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 2"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 2"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 2"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 2"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 2"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 2"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 2"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 2"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 2"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 2"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 2"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 2"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 2"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 2"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 2"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 2"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 2"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 2"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 2"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 2"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 2"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 2"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 2"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 2"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 2"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 2"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 2"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 2"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 2"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 2"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 2"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 2"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 2"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 2"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 2"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 2"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 2"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 2"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 2"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 2"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 2"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 2"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 2"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 2"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 2"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 2"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 2"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 2"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 2"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 2"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 2"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 2"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 2"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 2"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 2"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 2"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 2"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 2"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 2"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 2"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 2"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 2"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 2"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 2"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 2"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 2"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 2"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 2"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 2"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 2"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 2"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 2"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 2"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 2"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 2"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 2"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 2"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 2"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 2"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 2"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 2"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 2"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= CFF91 info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * CFF91_bonds[58][7]= {{"c", "h", "1.1010", "341.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5330", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 2.0, Ref. 3"}, {"c=", "c=2", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 2.0, Ref. 3"}, {"c", "c=", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 2.0, Ref. 3"}, {"c=", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 2.0, Ref. 3"}, {"c=2", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 2.0, Ref. 3"}, {"c", "o", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.9650", "532.5062", "-1282.9050", "2004.7658", "Ver. 1.0, Ref. 1"}, {"c", "na", "1.4570", "365.8052", "-699.6368", "998.4842", "Ver. 1.0, Ref. 1"}, {"h*", "na", "1.0060", "466.7400", "-1073.6018", "1251.1056", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8230", "225.2768", "-327.7057", "488.9722", "Ver. 1.0, Ref. 1"}, {"h", "s", "1.3261", "275.1123", "-531.3181", "562.9630", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0559", "197.6560", "-196.1366", "644.4103", "Ver. 1.0, Ref. 1"}, {"c", "c*", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 1.0, Ref. 4"}, {"c*", "h", "1.1220", "304.8631", "-623.3705", "700.2828", "Ver. 1.0, Ref. 4"}, {"c*", "o'", "1.2160", "823.7948", "-1878.7940", "2303.5311", "Ver. 1.0, Ref. 4"}, {"c*", "o", "1.3649", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 4"}, {"c'", "o'", "1.2195", "820.7018", "-1875.1000", "2303.7600", "Ver. 1.0, Ref. 1"}, {"c'", "n", "1.4160", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5202", "253.7067", "-423.0370", "396.9000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4520", "327.1657", "-547.8990", "526.5000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "1.0100", "462.7500", "-1053.6300", "1545.7570", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1110", "325.5717", "-632.1990", "726.0003", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.4314", "356.0904", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0862", "377.7644", "-803.4526", "894.3173", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.3485", "508.8587", "-977.6914", "1772.5134", "Ver. 1.0, Ref. 1"}, {"np", "np", "1.3121", "513.0111", "-873.6366", "1634.3437", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.0, Ref. 1"}, {"hi", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.1, Ref. 1"}, {"cp", "nh", "1.3749", "477.5202", "-848.5592", "1022.3909", "Ver. 1.0, Ref. 1"}, {"nh", "np", "1.3204", "646.7598", "-1639.8800", "6799.7099", "Ver. 1.0, Ref. 1"}, {"cp", "op", "1.3597", "547.5169", "-834.0665", "544.3090", "Ver. 1.0, Ref. 1"}, {"cp", "sp", "1.7053", "364.2568", "-457.7758", "291.1498", "Ver. 1.0, Ref. 1"}, {"cp", "o", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 1"}, {"c", "cp", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "1.3912", "447.0438", "-784.5346", "886.1671", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "1.0012", "465.8608", "-1066.2360", "1496.5647", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "1.0119", "448.6300", "-963.1917", "1248.4000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "1.5185", "293.1700", "-603.7882", "629.6900", "Ver. 1.0, Ref. 1"}, {"c", "c-", "1.5483", "253.0800", "-449.0300", "457.3200", "Ver. 1.0, Ref. 1"}, {"c-", "o-", "1.2339", "711.3500", "-1543.9000", "1858.6000", "Ver. 1.0, Ref. 1"}, {"c-", "h", "1.1331", "241.0600", "-574.7800", "853.7500", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "1.3834", "380.4600", "-814.4300", "1153.3000", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "1.0023", "462.3900", "-1044.6000", "1468.7000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "1.4695", "340.2400", "-589.4800", "854.5300", "Ver. 1.0, Ref. 1"}, {"nr", "cr", "1.3200", "388.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"h*", "o*", "0.9700", "563.2800", "-1428.2200", "1902.1200", "Ver. 1.1, Ref. 3"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CFF91 info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CFF91_angles_auto[330][6]= {{"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 2"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 2"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 2"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct2_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 6"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 2"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 2"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 2"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 2"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= CFF91 info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * CFF91_angles[155][8]= {{"h", "c", "h", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"c", "c", "h", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c=", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=1", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=1", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c", "c=", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 2.0, Ref. 3"}, {"c=", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 2.0, Ref. 3"}, {"h", "c=", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 2.0, Ref. 3"}, {"h", "c=2", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c", "o", "c", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 1"}, {"c", "o", "h*", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "112.4436", "47.2337", "-10.6612", "-10.2062", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "110.9538", "50.8652", "-4.4522", "-10.0298", "Ver. 1.0, Ref. 1"}, {"h*", "na", "h*", "107.0671", "45.2520", "-7.5558", "-9.5120", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "111.9100", "60.7147", "-13.3366", "-13.0785", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "110.6204", "51.3137", "-6.7198", "-2.6003", "Ver. 1.0, Ref. 1"}, {"c", "s", "h", "96.8479", "56.7336", "14.2713", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "112.5642", "47.0276", "-10.6790", "-10.1687", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "107.8522", "51.4949", "-13.5270", "7.0260", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "97.5000", "57.6938", "-5.0559", "-11.8206", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "100.3000", "57.2900", "-6.5301", "-11.8204", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "111.5000", "27.9677", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "97.2876", "54.4281", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "h", "94.3711", "54.9676", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c*", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 4"}, {"c*", "c", "h", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "c*", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o'", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o'", "116.5000", "59.6420", "-21.9179", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "c*", "c", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 4"}, {"h", "c*", "h", "108.6000", "40.0764", "-6.8139", "-8.4349", "Ver. 1.0, Ref. 4"}, {"o", "c*", "o'", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "100.3182", "38.8631", "-3.8323", "-7.9802", "Ver. 1.0, Ref. 4"}, {"c*", "o", "h*", "111.2537", "53.5303", "-11.8454", "-11.5405", "Ver. 1.0, Ref. 4"}, {"c*", "c", "o", "106.1764", "74.4143", "-12.6018", "-48.7850", "Ver. 1.0, Ref. 4"}, {"c", "o", "c*", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "94.5209", "32.3751", "-0.6174", "-6.5639", "Ver. 1.0, Ref. 4"}, {"n", "c'", "o'", "125.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "123.1451", "55.5431", "-17.2123", "0.1348", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "116.9257", "39.4193", "-10.9945", "-8.7733", "Ver. 1.0, Ref. 1"}, {"c", "n", "c'", "111.0372", "31.8958", "-6.6942", "-6.8370", "Ver. 1.0, Ref. 1"}, {"c'", "n", "h*", "117.9607", "37.4964", "-8.1837", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "h*", "113.8683", "45.9271", "-20.0824", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "114.3018", "42.6589", "-10.5464", "-9.3243", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "108.9372", "57.4010", "2.9374", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "108.5295", "51.9747", "-9.4851", "-10.9985", "Ver. 1.0, Ref. 1"}, {"c'", "c", "h", "107.7336", "40.6099", "-28.8121", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "117.8326", "45.9187", "-22.5264", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "110.3935", "52.1647", "-18.4845", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "h*", "116.9402", "37.5749", "-8.6676", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "111.5635", "39.6084", "-8.5459", "-8.5152", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c'", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "111.6800", "84.5159", "-48.5528", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "116.5100", "76.6970", "-35.3868", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "110.5500", "40.8275", "-13.0318", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "115.3800", "85.4923", "-6.5225", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "106.0400", "109.1158", "-42.9319", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "109.3800", "47.0120", "-17.3556", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "106.0100", "109.7746", "-9.0636", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "112.5900", "78.6418", "-16.3888", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "109.8000", "43.8408", "-9.5153", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "108.9100", "98.8519", "-5.7502", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "109.3900", "119.1811", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "99.4530", "41.6499", "-5.7422", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "nh", "108.2200", "119.0383", "-24.2061", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "op", "cp", "103.4300", "112.4497", "-25.7326", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "op", "104.1700", "101.3206", "-17.3072", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "106.1700", "48.0995", "-9.0144", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "104.0100", "104.4800", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "sp", "cp", "88.2540", "130.6992", "-18.4789", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "sp", "105.5300", "96.2006", "-44.9267", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "115.9800", "36.7902", "-13.1342", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "114.2300", "92.3110", "-35.5956", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "105.0080", "107.0693", "-27.7154", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "h*", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "h", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "121.4584", "61.0647", "-21.6172", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "111.8725", "40.8369", "-15.6673", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "h*", "107.5130", "42.5182", "-21.7566", "-4.3372", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "118.5414", "56.9522", "-7.2655", "0.0000", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "h+", "106.1100", "45.3280", "-14.0474", "1.9350", "Ver. 1.0, Ref. 1"}, {"c", "n+", "h+", "110.5100", "49.2170", "-12.2153", "-18.9667", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "112.1300", "66.4520", "4.8694", "37.7860", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "105.8500", "72.2630", "-28.1923", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "c", "109.7700", "44.8220", "-3.9132", "0.0000", "Ver. 1.0, Ref. 1"}, {"c-", "c", "h", "109.6700", "37.9190", "-7.3877", "-8.0694", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "115.0600", "59.0960", "-15.1430", "-12.9820", "Ver. 1.0, Ref. 1"}, {"o-", "c-", "o-", "130.0100", "111.2900", "-52.3390", "-28.1070", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "104.4900", "31.3750", "-4.4023", "-6.5271", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "112.7500", "61.1530", "-14.0190", "-13.2380", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "119.0700", "45.8110", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "h*", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "117.4500", "83.9840", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "117.3500", "55.0400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "107.5000", "62.6790", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "117.0900", "31.4400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "h*", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "122.9480", "40.482", "-16.2028", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "nr", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.1, Ref. 1"}, {"c", "n=", "cr", "117.0900", "31.6888", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=", "117.2847", "55.4431", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "o*", "h*", "103.7000", "49.8400", "-11.6000", "-8.0000", "Ver. 1.2, Ref. 1"}, {"c'", "c", "n+", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.3, Ref. 1"}, {"c", "cp", "np", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c", "o", "cp", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.4, Ref. 1"}, {"cp", "c", "cp", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.5, Ref. 1"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CFF91 info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CFF91_torsions_auto[216][8]= {{"*", "c", "n3n", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n3n", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n3n", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "ct", "n3n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n3n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n3n", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=1", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "o", "n3n", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "n3n", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "n3n", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c'", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "cp", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c=1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "c=2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "na", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n=1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "n=2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "o", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "s", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "p", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "si", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c'", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "cp", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c=1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "c=2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n", "h", "1.2000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n=1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "n=2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "np", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "np", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "o", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "sp", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "cp", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "c=1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "c=2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "na", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "np", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "np", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n=1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "n=2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "o", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "o", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "si", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "p", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "c=2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c+", "n", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "o", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "s", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "na", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n=1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "n=2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "o", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "s", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "si", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "np", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "np", "h", "0.3750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n=1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "n=2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "o", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "s", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n=1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "n=2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "np", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "o", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "s", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "sp", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "si", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "n=1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "n=2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "np", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "o", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "s", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "sp", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "si", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n=2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=1", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "o", "o", "*", "5.0000", "2", "0.", "Ver. 2.0, Ref. 8"}, {"*", "o", "s", "*", "5.0000", "2", "0.", "Ver. 2.0, Ref. 8"}, {"*", "o", "si", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "o", "p", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "s", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "si", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "p", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "si", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "p", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 2"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= CFF91 info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * CFF91_torsions[294][11]= {{"h", "c", "c", "h", "-0.2432", "0.0", "0.0617", "0.0", "-0.1383", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1781", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "0.1223", "0.0", "0.0514", "0.0", "-0.2230", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c=", "c=", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c=", "c=2", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c", "c=", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=1", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c", "c=2", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "o", "c", "0.5302", "0.0", "0.0000", "0.0", "-0.2836", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c", "-0.5203", "0.0", "-0.3028", "0.0", "-0.3450", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "h*", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "h*", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "c", "0.1904", "0.0", "-0.1342", "0.0", "-0.2460", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "h*", "-0.5187", "0.0", "-0.4837", "0.0", "-0.1692", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "h*", "-1.1506", "0.0", "-0.6344", "0.0", "-0.1845", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "c", "-0.1406", "0.0", "0.4168", "0.0", "0.0150", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "na", "-0.2428", "0.0", "0.4065", "0.0", "-0.3079", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "na", "0.1764", "0.0", "0.1766", "0.0", "-0.5206", "0.0", "Ver. 1.0, Ref. 1"}, {"na", "c", "c", "na", "0.3805", "0.0", "0.3547", "0.0", "-0.1102", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "h", "-0.4871", "0.0", "-0.4514", "0.0", "-0.1428", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "h", "-0.5374", "0.0", "-0.5091", "0.0", "-0.1361", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "c", "s", "-1.2002", "0.0", "-1.2999", "0.0", "-0.1626", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "s", "-0.2078", "0.0", "-0.1060", "0.0", "-0.3595", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "c", "-0.5073", "0.0", "0.0155", "0.0", "-0.0671", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "c", "-0.3338", "0.0", "-0.0684", "0.0", "-0.1706", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "c", "-1.8578", "0.0", "-3.8321", "0.0", "-0.4469", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "s", "-0.6269", "0.0", "-0.9598", "0.0", "-0.4957", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "s", "-0.0610", "0.0", "-0.6387", "0.0", "-0.3072", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "c", "-1.9835", "0.0", "-1.9213", "0.0", "-0.3816", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "s", "-0.7017", "0.0", "0.0201", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "h", "-0.4956", "0.0", "-3.4601", "0.0", "-0.2482", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "h", "-0.0528", "0.0", "-3.5171", "0.0", "-0.2394", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "h", "-0.0591", "0.0", "-0.6235", "0.0", "-0.0788", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c*", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "h", "-0.1569", "0.0", "-0.2030", "0.0", "-0.1599", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "h", "0.3055", "0.0", "0.6703", "0.0", "-0.2816", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "o'", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "h", "-0.5265", "0.0", "0.3627", "0.0", "-0.1792", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "o'", "-0.9975", "0.0", "0.9060", "0.0", "-0.0195", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "c", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "c", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "c*", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "o", "-0.6359", "0.0", "1.4807", "0.0", "-0.0438", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c*", "o", "h*", "-2.7332", "0.0", "2.9646", "0.0", "-0.0155", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "h*", "-2.9126", "0.0", "1.0199", "0.0", "-0.2077", "0.0", "Ver. 1.0, Ref. 4"}, {"o", "c", "c*", "o'", "0.6444", "0.0", "0.7897", "0.0", "1.0604", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c*", "o", "c", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "o", "c*", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "c", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "o", "1.8341", "0.0", "2.0603", "0.0", "-0.0195", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "o", "c*", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "c", "-0.9993", "0.0", "0.2131", "0.0", "-0.4274", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "o", "c*", "-1.8534", "0.0", "0.1981", "0.0", "0.2423", "0.0", "Ver. 1.0, Ref. 4"}, {"o", "c", "c*", "h", "-0.0390", "0.0", "1.4052", "0.0", "0.0757", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "h*", "-1.4540", "0.0", "0.8387", "0.0", "-0.4912", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c'", "n", "c", "0.8297", "0.0", "3.7234", "0.0", "-0.0495", "0.0", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "h*", "-1.6938", "0.0", "2.7386", "0.0", "-0.3360", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "c", "-0.7532", "0.0", "2.7392", "0.0", "0.0907", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "h*", "-0.8236", "0.0", "2.1467", "0.0", "-0.2142", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "o'", "-0.1804", "0.0", "0.0012", "0.0", "0.0371", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "n", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "c'", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c'", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c'", "0.0219", "0.0", "-0.0260", "0.0", "0.0714", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "h*", "-0.0483", "0.0", "-0.0077", "0.0", "-0.0014", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "h*", "-0.0148", "0.0", "-0.0791", "0.0", "-0.0148", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "o'", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "o'", "0.0442", "0.0", "0.0292", "0.0", "0.0562", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "n", "-0.0368", "0.0", "0.0389", "0.0", "-0.0529", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "0.3345", "0.0", "2.5838", "0.0", "-0.4006", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "h*", "-0.0078", "0.0", "2.6186", "0.0", "-0.0900", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c'", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c", "-0.0017", "0.0", "-0.0072", "0.0", "0.0008", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c", "0.0406", "0.0", "0.0354", "0.0", "-0.1649", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "c'", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "c", "-0.0036", "0.0", "0.0049", "0.0", "0.0039", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c'", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c'", "0.1907", "0.0", "1.1212", "0.0", "0.0426", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "8.3667", "0.0", "1.1932", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "h", "0.0000", "0.0", "1.8769", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "cp", "0.0000", "0.0", "6.8517", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.0000", "0.0", "4.7675", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "np", "0.0000", "0.0", "3.6689", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "cp", "0.0000", "0.0", "7.4664", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "np", "0.0000", "0.0", "8.8338", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "cp", "0.0000", "0.0", "13.7232", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.0000", "0.0", "12.0680", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.0000", "0.0", "6.3346", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "h*", "0.0000", "0.0", "1.8202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "h*", "0.0000", "0.0", "1.3342", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "cp", "10.8765", "0.0", "6.3475", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "cp", "0.0000", "0.0", "3.7848", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nh", "11.5270", "0.0", "2.7183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "cp", "0.0000", "0.0", "20.0173", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "h*", "0.0000", "0.0", "3.5096", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "cp", "0.0000", "0.0", "9.7830", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "np", "0.0000", "0.0", "4.8266", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "cp", "0.0000", "0.0", "14.4766", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "cp", "0.0000", "0.0", "7.4549", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "np", "0.0000", "0.0", "10.7803", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "0.0000", "0.0", "4.1751", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "nh", "0.0000", "0.0", "5.1942", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "nh", "0.0000", "0.0", "5.2455", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "op", "cp", "0.0000", "0.0", "27.5402", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "cp", "0.0000", "0.0", "2.6043", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "op", "0.0000", "0.0", "10.6923", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "op", "0.0000", "0.0", "3.3516", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "cp", "0.0000", "0.0", "30.4292", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "cp", "0.0000", "0.0", "15.3660", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "op", "0.0000", "0.0", "9.7415", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "np", "0.0000", "0.0", "11.8577", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "sp", "cp", "0.0000", "0.0", "31.5576", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "cp", "0.0000", "0.0", "4.2145", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "sp", "0.0000", "0.0", "9.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "sp", "0.0000", "0.0", "3.7957", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "cp", "0.0000", "0.0", "21.1715", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "cp", "0.0000", "0.0", "13.6743", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "sp", "0.0000", "0.0", "8.5974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "np", "0.0000", "0.0", "11.5762", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "cp", "0.0000", "0.0", "23.0443", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "h*", "0.0000", "0.0", "7.0570", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "nh", "0.0000", "0.0", "12.7748", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "h*", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "cp", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "h", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "0.0000", "0.0", "5.3826", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nn", "0.0000", "0.0", "1.3331", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "h*", "0.0000", "0.0", "1.2190", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "cp", "0.0000", "0.0", "6.7119", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nn", "h*", "0.0000", "0.0", "2.0184", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "h+", "-0.2458", "0.0", "-0.2789", "0.0", "-0.0294", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n+", "-1.9394", "0.0", "0.0086", "0.0", "0.2775", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n+", "-0.2179", "0.0", "-0.4127", "0.0", "-0.1252", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "c", "0.3624", "0.0", "0.1012", "0.0", "-0.2486", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "c", "0.7077", "0.0", "-0.3744", "0.0", "-0.1914", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c-", "o-", "-2.5999", "0.0", "1.0488", "0.0", "-0.2089", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c-", "-0.4054", "0.0", "0.4825", "0.0", "0.4345", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "c", "h", "-1.2767", "0.0", "0.5949", "0.0", "0.2379", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "o-", "1.7311", "0.0", "1.8510", "0.0", "-0.1933", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "nr", "-0.5336", "0.0", "-0.0444", "0.0", "-0.1432", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "c+", "-5.4418", "0.0", "-0.0437", "0.0", "0.8035", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "h*", "-5.0724", "0.0", "-0.4980", "0.0", "-0.4381", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "c+", "2.8272", "0.0", "-0.3930", "0.0", "-0.3847", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "h*", "1.2659", "0.0", "-0.7739", "0.0", "0.0378", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "c", "-0.6197", "0.0", "3.0539", "0.0", "0.1861", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n=", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "n=2", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "n=", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "n=1", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "n=2", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=1", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=2", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c", "n=", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c", "n=2", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.0, Ref. 3"}, {"h*", "nr", "cr", "n=", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"h*", "nr", "cr", "n=1", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"h*", "nr", "cr", "n=2", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"n=", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.1, Ref. 1"}, {"c'", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"c*", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 4"}, {"n+", "c", "c'", "o'", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"h", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "c'", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c-", "o-", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"n+", "c", "c'", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "c-", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"s", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.3, Ref. 1"}, {"c*", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 4"}, {"c*", "c", "c", "c'", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "c", "o", "cp", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "cp", "o", "c", "0.0000", "0.0", "1.8000", "0.0", "0.0000", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.5, Ref. 1"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CFF91 info E = K * (Chi - Chi0)^2 */ char * CFF91_inversions[70][7]= {{"c", "c=", "c=", "h", "2.0765", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "h", "h", "2.8561", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "c=", "2.0568", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "c", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c*", "h", "o'", "38.4069", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "c", "o'", "38.7949", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "h", "o'", "37.8733", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "o'", "46.9264", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "o'", "45.3800", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c'", "n", "o'", "24.3329", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "n", "c'", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "o'", "23.1691", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "n", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "c'", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "o'", "27.0615", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c'", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "7.6012", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "10.4920", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "14.3802", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "h*", "5.9154", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "nh", "7.9682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "8.8464", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "np", "4.9959", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "op", "8.1654", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "op", "10.8102", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "sp", "5.5684", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "sp", "7.3414", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "nh", "10.2877", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nh", "8.3206", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "7.1794", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "13.0421", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "cp", "6.9644", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "10.7855", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "np", "15.0921", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "o-", "44.1500", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "o-", "45.7520", "0.0", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "h*", "1.0035", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "nr", "54.4060", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "h*", "0.3176", "0.0", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "h*", "1.0035", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "nr", "54.4060", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "n=", "cr", "h*", "0.3176", "0.0", "Ver. 1.1, Ref. 1"}, {"cp", "cp", "c", "np", "10.4920", "0.0", "Ver. 1.3, Ref. 1"}, {"*", "c'", "*", "*", "36.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "cp", "*", "*", "10.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c=", "*", "*", "2.0568", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "na", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n", "*", "*", "0.1000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "np", "*", "*", "5.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n=", "*", "*", "0.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "nr", "*", "*", "1.0035", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "o", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "s", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "p", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c'", "*", "*", "36.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "cp", "*", "*", "10.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c=", "*", "*", "2.0568", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "na", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n", "*", "*", "0.1000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "np", "*", "*", "5.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n=", "*", "*", "0.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "nr", "*", "*", "1.0035", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "o", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "s", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "p", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= CFF91 info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * CFF91_vdw[40][4]= {{"c", "4.0100", "0.0540", "Ver. 2.0, Ref. 1"}, {"c*", "3.3080", "0.1200", "Ver. 2.0, Ref. 4"}, {"c'", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"cp", "4.0100", "0.0640", "Ver. 2.0, Ref. 1"}, {"c=", "4.0100", "0.0640", "Ver. 2.0, Ref. 1"}, {"c=1", "4.0100", "0.0640", "Ver. 2.0, Ref. 3"}, {"c=2", "4.0100", "0.0640", "Ver. 2.0, Ref. 3"}, {"c-", "3.9080", "0.1200", "Ver. 2.0, Ref. 1"}, {"c+", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"cr", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"na", "4.0700", "0.0650", "Ver. 2.0, Ref. 1"}, {"n", "4.0700", "0.1060", "Ver. 2.0, Ref. 1"}, {"nr", "4.0700", "0.1060", "Ver. 2.0, Ref. 1"}, {"np", "3.5700", "0.0410", "Ver. 2.0, Ref. 1"}, {"nh", "4.0700", "0.1340", "Ver. 2.0, Ref. 1"}, {"nn", "4.0700", "0.0650", "Ver. 2.0, Ref. 1"}, {"n=", "4.1210", "0.0620", "Ver. 2.0, Ref. 1"}, {"n=1", "4.1210", "0.0620", "Ver. 2.0, Ref. 3"}, {"n=2", "4.1210", "0.0620", "Ver. 2.0, Ref. 3"}, {"n+", "3.2620", "0.0650", "Ver. 2.0, Ref. 1"}, {"o", "3.5350", "0.2400", "Ver. 2.0, Ref. 1"}, {"o*", "3.6080", "0.2740", "Ver. 2.0, Ref. 1"}, {"o'", "3.5350", "0.2670", "Ver. 2.0, Ref. 1"}, {"op", "3.5350", "0.1090", "Ver. 2.0, Ref. 1"}, {"o-", "3.5960", "0.1670", "Ver. 2.0, Ref. 1"}, {"s", "4.0270", "0.0710", "Ver. 2.0, Ref. 1"}, {"sp", "4.0270", "0.0710", "Ver. 2.0, Ref. 1"}, {"h", "2.9950", "0.0200", "Ver. 2.0, Ref. 1"}, {"h*", "1.0980", "0.0130", "Ver. 2.0, Ref. 1"}, {"h+", "1.0980", "0.0130", "Ver. 2.0, Ref. 1"}, {"p", "4.2950", "0.2150", "Ver. 2.0, Ref. 2"}, {"f", "3.2850", "0.3050", "Ver. 2.0, Ref. 2"}, {"cl", "3.9150", "0.3050", "Ver. 2.0, Ref. 2"}, {"Cl", "4.0000", "0.4000", "Ver. 2.0, Ref. 2"}, {"br", "4.2150", "0.3050", "Ver. 2.0, Ref. 2"}, {"Br", "4.3000", "0.3600", "Ver. 2.0, Ref. 2"}, {"i", "4.8000", "0.4000", "Ver. 2.0, Ref. 2"}, {"si", "4.4350", "0.0950", "Ver. 2.0, Ref. 2"}, {"Na", "3.1440", "0.5000", "Ver. 2.0, Ref. 2"}, {"ca+", "3.4720", "0.0500", "Ver. 2.0, Ref. 2"}}; /* Bond increments To implement atomic charges */ char * CFF91_bond_increments[560][5]= {{"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c*", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c'", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"cr", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c-", "c", "0.2300", "-0.2300", "Ver. 1.0, Ref. 1"}, {"ct", "c", "-0.0400", "0.0400", "Ver. 1.0, Ref. 1"}, {"ct2", "c", "-0.0400", "0.0400", "Ver. 2.0, Ref. 6"}, {"na", "c", "-0.0827", "0.0827", "Ver. 1.0, Ref. 1"}, {"n", "c", "-0.2108", "0.2108", "Ver. 1.0, Ref. 1"}, {"nn", "c", "-0.2108", "0.2108", "Ver. 1.0, Ref. 2"}, {"nr", "c", "-0.4802", "0.4802", "Ver. 1.0, Ref. 1"}, {"np", "c", "-0.1100", "0.1100", "Ver. 1.0, Ref. 2"}, {"nh", "c", "-0.0610", "0.0610", "Ver. 1.0, Ref. 2"}, {"n=", "c", "-0.3000", "0.3000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n+", "c", "-0.1571", "0.4071", "Ver. 1.0, Ref. 1"}, {"nt", "c", "-0.3640", "0.3640", "Ver. 1.0, Ref. 2"}, {"o", "c", "-0.1133", "0.1133", "Ver. 1.0, Ref. 1"}, {"op", "c", "-0.3957", "0.3957", "Ver. 2.0, Ref. 2"}, {"s", "c", "-0.0650", "0.0650", "Ver. 1.0, Ref. 1"}, {"s'", "c", "-0.1180", "0.1180", "Ver. 2.0, Ref. 2"}, {"sp", "c", "-0.1180", "0.1180", "Ver. 2.0, Ref. 2"}, {"h", "c", "0.0530", "-0.0530", "Ver. 1.0, Ref. 1"}, {"p", "c", "-0.0110", "0.0110", "Ver. 2.0, Ref. 2"}, {"f", "c", "-0.2750", "0.2750", "Ver. 2.0, Ref. 2"}, {"cl", "c", "-0.2260", "0.2260", "Ver. 2.0, Ref. 2"}, {"br", "c", "-0.1920", "0.1920", "Ver. 2.0, Ref. 2"}, {"i", "c", "-0.1120", "0.1120", "Ver. 2.0, Ref. 2"}, {"si", "c", "0.1767", "-0.1767", "Ver. 2.0, Ref. 2"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c*", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c*", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"cp", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c-", "c'", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"ct", "c'", "0.0927", "-0.0927", "Ver. 2.0, Ref. 2"}, {"ct2", "c'", "0.0927", "-0.0927", "Ver. 2.0, Ref. 6"}, {"n", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"np", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"nh", "c'", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"n=", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"n=1", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 3"}, {"n=2", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 3"}, {"n+", "c'", "0.1169", "0.1331", "Ver. 2.0, Ref. 2"}, {"nt", "c'", "-0.1641", "0.1641", "Ver. 2.0, Ref. 2"}, {"cp", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=1", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=2", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c-", "c*", "0.1368", "-0.1368", "Ver. 2.0, Ref. 4"}, {"ct", "c*", "0.0927", "-0.0927", "Ver. 2.0, Ref. 4"}, {"ct2", "c*", "0.0927", "-0.0927", "Ver. 2.0, Ref. 6"}, {"n", "c*", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"nn", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"np", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"nh", "c*", "0.1422", "-0.1422", "Ver. 2.0, Ref. 4"}, {"n=", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n=1", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n=2", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n+", "c*", "0.1169", "0.1331", "Ver. 2.0, Ref. 4"}, {"nt", "c*", "-0.1641", "0.1641", "Ver. 2.0, Ref. 4"}, {"o", "c'", "-0.0030", "0.0030", "Ver. 1.0, Ref. 1"}, {"o", "c*", "-0.0030", "0.0030", "Ver. 1.0, Ref. 4"}, {"o'", "c'", "-0.3964", "0.3964", "Ver. 1.0, Ref. 1"}, {"o'", "c*", "-0.3964", "0.3964", "Ver. 1.0, Ref. 4"}, {"op", "c'", "-0.0283", "0.0283", "Ver. 1.0, Ref. 1"}, {"sp", "c'", "0.0130", "-0.0130", "Ver. 1.0, Ref. 1"}, {"s", "c'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"s'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "c*", "-0.0283", "0.0283", "Ver. 1.0, Ref. 4"}, {"sp", "c*", "0.0130", "-0.0130", "Ver. 1.0, Ref. 4"}, {"s", "c*", "0.0140", "-0.0140", "Ver. 2.0, Ref. 4"}, {"s'", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"h", "c'", "0.0456", "-0.0456", "Ver. 1.0, Ref. 1"}, {"h", "c*", "0.0456", "-0.0456", "Ver. 1.0, Ref. 4"}, {"p", "c'", "0.2396", "-0.2396", "Ver. 2.0, Ref. 2"}, {"f", "c'", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "c'", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "c'", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "c'", "0.1291", "-0.1291", "Ver. 2.0, Ref. 2"}, {"si", "c'", "0.4405", "-0.4405", "Ver. 2.0, Ref. 2"}, {"p", "c*", "0.2396", "-0.2396", "Ver. 2.0, Ref. 4"}, {"f", "c*", "-0.1300", "0.1300", "Ver. 2.0, Ref. 4"}, {"cl", "c*", "-0.1020", "0.1020", "Ver. 2.0, Ref. 4"}, {"br", "c*", "-0.0800", "0.0800", "Ver. 2.0, Ref. 4"}, {"i", "c*", "0.1291", "-0.1291", "Ver. 2.0, Ref. 4"}, {"si", "c*", "0.4405", "-0.4405", "Ver. 2.0, Ref. 4"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c-", "cp", "-0.0424", "0.0424", "Ver. 2.0, Ref. 2"}, {"ct", "cp", "-0.0852", "0.0852", "Ver. 2.0, Ref. 2"}, {"ct2", "cp", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n+", "cp", "-0.0489", "0.2989", "Ver. 2.0, Ref. 2"}, {"nn", "cp", "-0.0827", "0.0827", "Ver. 1.0, Ref. 1"}, {"np", "cp", "-0.2405", "0.2405", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "0.0500", "-0.0500", "Ver. 1.0, Ref. 1"}, {"n=", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 2"}, {"n=1", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 3"}, {"n=2", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 3"}, {"o", "cp", "-0.0265", "0.0265", "Ver. 1.0, Ref. 1"}, {"o'", "cp", "-0.3964", "0.3964", "Ver. 2.0, Ref. 2"}, {"op", "cp", "-0.0283", "0.0283", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "0.0130", "-0.0130", "Ver. 1.0, Ref. 1"}, {"s", "cp", "0.0120", "-0.0120", "Ver. 2.0, Ref. 2"}, {"s'", "cp", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"h", "cp", "0.1268", "-0.1268", "Ver. 1.0, Ref. 1"}, {"p", "cp", "0.0380", "-0.0380", "Ver. 1.0, Ref. 2"}, {"f", "cp", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "cp", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "cp", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "cp", "-0.0642", "0.0642", "Ver. 2.0, Ref. 2"}, {"si", "cp", "0.2270", "-0.2270", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"ct", "c=", "-0.0852", "0.0852", "Ver. 2.0, Ref. 2"}, {"ct2", "c=", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n+", "c=", "-0.0489", "0.2989", "Ver. 2.0, Ref. 2"}, {"np", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=1", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=2", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=1", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=1", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"o", "c=", "-0.0265", "0.0265", "Ver. 1.0, Ref. 1"}, {"op", "c=", "-0.3583", "0.3583", "Ver. 2.0, Ref. 2"}, {"o'", "c=", "-0.3583", "0.3583", "Ver. 2.0, Ref. 2"}, {"s", "c=", "0.0120", "-0.0120", "Ver. 2.0, Ref. 2"}, {"sp", "c=", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"s'", "c=", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"h", "c=", "0.1268", "-0.1268", "Ver. 1.0, Ref. 1"}, {"p", "c=", "0.0380", "-0.0380", "Ver. 2.0, Ref. 2"}, {"f", "c=", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "c=", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "c=", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "c=", "-0.0642", "0.0642", "Ver. 2.0, Ref. 2"}, {"si", "c=", "0.2270", "-0.2270", "Ver. 2.0, Ref. 2"}, {"ct", "c=1", "-0.0852", "0.0852", "Ver. 2.0, Ref. 3"}, {"ct2", "c=1", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nn", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "c=1", "-0.0489", "0.2989", "Ver. 2.0, Ref. 3"}, {"np", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nh", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"o", "c=1", "-0.0265", "0.0265", "Ver. 2.0, Ref. 3"}, {"op", "c=1", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"o'", "c=1", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"s", "c=1", "0.0120", "-0.0120", "Ver. 2.0, Ref. 3"}, {"sp", "c=1", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"s'", "c=1", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"h", "c=1", "0.1268", "-0.1268", "Ver. 2.0, Ref. 3"}, {"p", "c=1", "0.0380", "-0.0380", "Ver. 2.0, Ref. 3"}, {"f", "c=1", "-0.1300", "0.1300", "Ver. 2.0, Ref. 3"}, {"cl", "c=1", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"br", "c=1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"i", "c=1", "-0.0642", "0.0642", "Ver. 2.0, Ref. 3"}, {"si", "c=1", "0.2270", "-0.2270", "Ver. 2.0, Ref. 3"}, {"ct", "c=2", "-0.0852", "0.0852", "Ver. 2.0, Ref. 3"}, {"ct2", "c=2", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 3"}, {"n", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nn", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "c=2", "-0.0489", "0.2989", "Ver. 2.0, Ref. 3"}, {"np", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nh", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"o", "c=2", "-0.0265", "0.0265", "Ver. 2.0, Ref. 3"}, {"op", "c=2", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"o'", "c=2", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"s", "c=2", "0.0120", "-0.0120", "Ver. 2.0, Ref. 3"}, {"sp", "c=2", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"s'", "c=2", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"h", "c=2", "0.1268", "-0.1268", "Ver. 2.0, Ref. 3"}, {"p", "c=2", "0.0380", "-0.0380", "Ver. 2.0, Ref. 3"}, {"f", "c=2", "-0.1300", "0.1300", "Ver. 2.0, Ref. 3"}, {"cl", "c=2", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"br", "c=2", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"i", "c=2", "-0.0642", "0.0642", "Ver. 2.0, Ref. 3"}, {"si", "c=2", "0.2270", "-0.2270", "Ver. 2.0, Ref. 3"}, {"n=", "cr", "-0.4000", "0.4000", "Ver. 1.0, Ref. 1"}, {"n=1", "cr", "-0.4000", "0.4000", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "-0.4000", "0.4000", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "-0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o-", "c-", "-0.5337", "0.0337", "Ver. 1.0, Ref. 1"}, {"h", "c-", "0.0530", "-0.0530", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"ct", "c-", "-0.0432", "0.0432", "Ver. 2.0, Ref. 2"}, {"ct2", "c-", "-0.0432", "0.0432", "Ver. 2.0, Ref. 6"}, {"n", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n+", "c-", "-0.0097", "0.2597", "Ver. 2.0, Ref. 2"}, {"nn", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"np", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n=", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n=1", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 3"}, {"n=2", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 3"}, {"nh", "c-", "0.0176", "-0.0176", "Ver. 2.0, Ref. 2"}, {"o", "c-", "-0.1012", "0.1012", "Ver. 2.0, Ref. 2"}, {"op", "c-", "-0.3241", "0.3241", "Ver. 2.0, Ref. 2"}, {"o'", "c-", "-0.3241", "0.3241", "Ver. 2.0, Ref. 2"}, {"s", "c-", "0.0087", "-0.0087", "Ver. 2.0, Ref. 2"}, {"s-", "c-", "-0.3777", "-0.1223", "Ver. 2.0, Ref. 2"}, {"p", "c-", "0.0857", "-0.0857", "Ver. 2.0, Ref. 2"}, {"f", "c-", "-0.2241", "0.2241", "Ver. 2.0, Ref. 2"}, {"cl", "c-", "-0.0747", "0.0747", "Ver. 2.0, Ref. 2"}, {"br", "c-", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"i", "c-", "-0.0185", "0.0185", "Ver. 2.0, Ref. 2"}, {"si", "c-", "0.2775", "-0.2775", "Ver. 2.0, Ref. 2"}, {"nr", "c+", "0.0680", "0.2653", "Ver. 1.0, Ref. 1"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ct2", "ct2", "0.0000", "0.0000", "Ver. 1.0, Ref. 6"}, {"na", "ct", "0.0636", "-0.0636", "Ver. 2.0, Ref. 2"}, {"n", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"nn", "ct", "-0.0920", "0.0920", "Ver. 2.0, Ref. 2"}, {"n+", "ct", "0.1508", "0.0992", "Ver. 2.0, Ref. 2"}, {"nt", "ct", "-0.2454", "0.2454", "Ver. 2.0, Ref. 2"}, {"np", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"nh", "ct", "0.0568", "-0.0568", "Ver. 2.0, Ref. 2"}, {"n=", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"n=1", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 3"}, {"n=2", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 3"}, {"o", "ct", "-0.0675", "0.0675", "Ver. 2.0, Ref. 2"}, {"op", "ct", "-0.2874", "0.2874", "Ver. 2.0, Ref. 2"}, {"o'", "ct", "-0.2874", "0.2874", "Ver. 2.0, Ref. 2"}, {"s", "ct", "0.0581", "-0.0581", "Ver. 2.0, Ref. 2"}, {"sp", "ct", "0.0135", "-0.0135", "Ver. 2.0, Ref. 2"}, {"s'", "ct", "0.0135", "-0.0135", "Ver. 2.0, Ref. 2"}, {"p", "ct", "0.1335", "-0.1335", "Ver. 2.0, Ref. 2"}, {"h", "ct", "0.2052", "-0.2052", "Ver. 2.0, Ref. 2"}, {"f", "ct", "-0.1873", "0.1873", "Ver. 2.0, Ref. 2"}, {"cl", "ct", "-0.0319", "0.0319", "Ver. 2.0, Ref. 2"}, {"br", "ct", "0.0173", "-0.0173", "Ver. 2.0, Ref. 2"}, {"i", "ct", "0.0281", "-0.0281", "Ver. 2.0, Ref. 2"}, {"na", "ct2", "0.0636", "-0.0636", "Ver. 2.0, Ref. 6"}, {"n", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"nn", "ct2", "-0.0920", "0.0920", "Ver. 2.0, Ref. 6"}, {"n+", "ct2", "0.1508", "0.0992", "Ver. 2.0, Ref. 6"}, {"nt", "ct2", "-0.2454", "0.2454", "Ver. 2.0, Ref. 2"}, {"np", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"nh", "ct2", "0.0568", "-0.0568", "Ver. 2.0, Ref. 6"}, {"n=", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"n=1", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"n=2", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"o", "ct2", "-0.0675", "0.0675", "Ver. 2.0, Ref. 6"}, {"op", "ct2", "-0.2874", "0.2874", "Ver. 2.0, Ref. 6"}, {"o'", "ct2", "-0.2874", "0.2874", "Ver. 2.0, Ref. 6"}, {"s", "ct2", "0.0581", "-0.0581", "Ver. 2.0, Ref. 6"}, {"sp", "ct2", "0.0135", "-0.0135", "Ver. 2.0, Ref. 6"}, {"s'", "ct2", "0.0135", "-0.0135", "Ver. 2.0, Ref. 6"}, {"p", "ct2", "0.1335", "-0.1335", "Ver. 2.0, Ref. 6"}, {"h", "ct2", "0.2052", "-0.2052", "Ver. 2.0, Ref. 6"}, {"f", "ct2", "-0.1873", "0.1873", "Ver. 2.0, Ref. 6"}, {"cl", "ct2", "-0.0319", "0.0319", "Ver. 2.0, Ref. 6"}, {"br", "ct2", "0.0173", "-0.0173", "Ver. 2.0, Ref. 6"}, {"i", "ct2", "0.0281", "-0.0281", "Ver. 2.0, Ref. 6"}, {"si", "ct2", "0.3266", "-0.3266", "Ver. 2.0, Ref. 6"}, {"na", "na", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"nn", "na", "-0.0371", "0.0371", "Ver. 2.0, Ref. 2"}, {"np", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"nh", "na", "0.0919", "-0.0919", "Ver. 2.0, Ref. 2"}, {"n+", "na", "0.0850", "0.1650", "Ver. 2.0, Ref. 2"}, {"nt", "na", "-0.1927", "0.1927", "Ver. 2.0, Ref. 2"}, {"n=", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=1", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 3"}, {"n=2", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 3"}, {"o", "na", "-0.0254", "0.0254", "Ver. 2.0, Ref. 2"}, {"op", "na", "-0.2369", "0.2369", "Ver. 2.0, Ref. 2"}, {"o'", "na", "-0.2369", "0.2369", "Ver. 2.0, Ref. 2"}, {"s", "na", "0.0966", "-0.0966", "Ver. 2.0, Ref. 2"}, {"sp", "na", "0.0551", "-0.0551", "Ver. 2.0, Ref. 2"}, {"s'", "na", "0.0551", "-0.0551", "Ver. 2.0, Ref. 2"}, {"p", "na", "0.2518", "-0.2518", "Ver. 2.0, Ref. 2"}, {"f", "na", "-0.1415", "0.1415", "Ver. 2.0, Ref. 2"}, {"cl", "na", "0.0117", "-0.0117", "Ver. 2.0, Ref. 2"}, {"br", "na", "0.0601", "-0.0601", "Ver. 2.0, Ref. 2"}, {"i", "na", "0.0714", "-0.0714", "Ver. 2.0, Ref. 2"}, {"si", "na", "0.3501", "-0.3501", "Ver. 2.0, Ref. 2"}, {"h*", "na", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"np", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "n", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "n", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "n", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "n", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "n", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "n", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "n", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "n", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "n", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "n", "0.4395", "-0.4395", "Ver. 1.0, Ref. 1"}, {"p", "n", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "n", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "n", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "n", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "n", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "n", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"np", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "nn", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "nn", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "nn", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "nn", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "nn", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "nn", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "nn", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "nn", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "nn", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "nn", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"p", "nn", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "nn", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "nn", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "nn", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "nn", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "nn", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"np", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "np", "-0.2823", "0.2823", "Ver. 1.0, Ref. 1"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "np", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "np", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "np", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o-", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "np", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "np", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "np", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "np", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"p", "np", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "np", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "np", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "np", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "np", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "np", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=1", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 3"}, {"n=2", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 3"}, {"n+", "nh", "-0.0044", "0.2544", "Ver. 2.0, Ref. 2"}, {"nt", "nh", "-0.2783", "0.2783", "Ver. 2.0, Ref. 2"}, {"o", "nh", "-0.1090", "0.1090", "Ver. 2.0, Ref. 2"}, {"op", "nh", "-0.3148", "0.3148", "Ver. 2.0, Ref. 2"}, {"o'", "nh", "-0.3148", "0.3148", "Ver. 2.0, Ref. 2"}, {"s", "nh", "-0.0046", "0.0046", "Ver. 2.0, Ref. 2"}, {"sp", "nh", "-0.0454", "0.0454", "Ver. 2.0, Ref. 2"}, {"s'", "nh", "-0.0454", "0.0454", "Ver. 2.0, Ref. 2"}, {"h*", "nh", "0.3925", "-0.3925", "Ver. 1.0, Ref. 1"}, {"hi", "nh", "0.3925", "0.1075", "Ver. 1.0, Ref. 1"}, {"p", "nh", "0.1375", "-0.1375", "Ver. 2.0, Ref. 2"}, {"f", "nh", "-0.2220", "0.2220", "Ver. 2.0, Ref. 2"}, {"cl", "nh", "-0.0854", "0.0854", "Ver. 2.0, Ref. 2"}, {"br", "nh", "-0.0438", "0.0438", "Ver. 2.0, Ref. 2"}, {"i", "nh", "-0.0356", "0.0358", "Ver. 2.0, Ref. 2"}, {"si", "nh", "0.2278", "-0.2278", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "n=", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "n=", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"nt", "n=1", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"nt", "n=2", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "n=", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o-", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "n=", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "n=", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "n=", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "n=", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"p", "n=", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "n=", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "n=", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "n=", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "n=", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "n=", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"n+", "n=1", "0.1617", "0.0883", "Ver. 2.0, Ref. 3"}, {"o", "n=1", "0.0427", "-0.0427", "Ver. 2.0, Ref. 3"}, {"op", "n=1", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"o'", "n=1", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s", "n=1", "0.1753", "-0.1753", "Ver. 2.0, Ref. 3"}, {"sp", "n=1", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"s'", "n=1", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"h*", "n=1", "0.3278", "-0.3278", "Ver. 2.0, Ref. 3"}, {"p", "n=1", "0.3359", "-0.3359", "Ver. 2.0, Ref. 3"}, {"f", "n=1", "-0.0731", "0.0731", "Ver. 2.0, Ref. 3"}, {"cl", "n=1", "0.0897", "-0.0897", "Ver. 2.0, Ref. 3"}, {"br", "n=1", "0.1422", "-0.1422", "Ver. 2.0, Ref. 3"}, {"i", "n=1", "0.1554", "-0.1554", "Ver. 2.0, Ref. 3"}, {"si", "n=1", "0.4368", "-0.4368", "Ver. 2.0, Ref. 3"}, {"n+", "n=2", "0.1617", "0.0883", "Ver. 2.0, Ref. 3"}, {"o", "n=2", "0.0427", "-0.0427", "Ver. 2.0, Ref. 3"}, {"op", "n=2", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s", "n=2", "0.1753", "-0.1753", "Ver. 2.0, Ref. 3"}, {"sp", "n=2", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"o'", "n=2", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s'", "n=2", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"h*", "n=2", "0.3278", "-0.3278", "Ver. 2.0, Ref. 3"}, {"p", "n=2", "0.3359", "-0.3359", "Ver. 2.0, Ref. 3"}, {"f", "n=2", "-0.0731", "0.0731", "Ver. 2.0, Ref. 3"}, {"cl", "n=2", "0.0897", "-0.0897", "Ver. 2.0, Ref. 3"}, {"br", "n=2", "0.1422", "-0.1422", "Ver. 2.0, Ref. 3"}, {"i", "n=2", "0.1554", "-0.1554", "Ver. 2.0, Ref. 3"}, {"si", "n=2", "0.4368", "-0.4368", "Ver. 2.0, Ref. 3"}, {"n+", "n+", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "n+", "0.1250", "0.1250", "Ver. 2.0, Ref. 2"}, {"op", "n+", "-0.0918", "0.3418", "Ver. 2.0, Ref. 2"}, {"o'", "n+", "-0.0918", "0.3418", "Ver. 2.0, Ref. 2"}, {"s", "n+", "0.2755", "-0.0255", "Ver. 2.0, Ref. 2"}, {"sp", "n+", "0.2341", "0.0159", "Ver. 2.0, Ref. 2"}, {"s'", "n+", "0.2341", "0.0159", "Ver. 2.0, Ref. 2"}, {"h+", "n+", "0.2800", "-0.0300", "Ver. 1.0, Ref. 1"}, {"p", "n+", "0.4494", "-0.1994", "Ver. 2.0, Ref. 2"}, {"f", "n+", "0.0062", "0.2438", "Ver. 2.0, Ref. 2"}, {"cl", "n+", "0.1858", "0.0642", "Ver. 2.0, Ref. 2"}, {"br", "n+", "0.2452", "0.0048", "Ver. 2.0, Ref. 2"}, {"i", "n+", "0.2615", "-0.0115", "Ver. 2.0, Ref. 2"}, {"si", "n+", "0.5583", "-0.3083", "Ver. 2.0, Ref. 2"}, {"h*", "nr", "0.4068", "-0.4068", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "nt", "0.1523", "-0.1523", "Ver. 2.0, Ref. 2"}, {"op", "nt", "-0.0585", "0.0585", "Ver. 2.0, Ref. 2"}, {"o'", "nt", "-0.0585", "0.0585", "Ver. 2.0, Ref. 2"}, {"s", "nt", "0.3010", "-0.3010", "Ver. 2.0, Ref. 2"}, {"sp", "nt", "0.2612", "-0.2612", "Ver. 2.0, Ref. 2"}, {"s'", "nt", "0.2612", "-0.2612", "Ver. 2.0, Ref. 2"}, {"p", "nt", "0.4691", "-0.4691", "Ver. 2.0, Ref. 2"}, {"h", "nt", "0.4688", "-0.4688", "Ver. 2.0, Ref. 2"}, {"f", "nt", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"cl", "nt", "0.2141", "-0.2141", "Ver. 2.0, Ref. 2"}, {"br", "nt", "0.2727", "-0.2727", "Ver. 2.0, Ref. 2"}, {"i", "nt", "0.2889", "-0.2889", "Ver. 2.0, Ref. 2"}, {"si", "nt", "0.5738", "-0.5738", "Ver. 2.0, Ref. 2"}, {"h*", "o*", "0.3991", "-0.3991", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.4241", "-0.4241", "Ver. 1.0, Ref. 1"}, {"o", "o", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "o", "-0.1962", "0.1962", "Ver. 2.0, Ref. 2"}, {"o'", "o", "-0.1962", "0.1962", "Ver. 2.0, Ref. 2"}, {"s", "o", "0.1143", "-0.1143", "Ver. 2.0, Ref. 2"}, {"sp", "o", "0.0766", "-0.0766", "Ver. 2.0, Ref. 2"}, {"s'", "o", "0.0766", "-0.0766", "Ver. 2.0, Ref. 2"}, {"p", "o", "0.2548", "-0.2548", "Ver. 2.0, Ref. 2"}, {"f", "o", "-0.1077", "0.1077", "Ver. 2.0, Ref. 2"}, {"cl", "o", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"br", "o", "0.0818", "-0.0818", "Ver. 2.0, Ref. 2"}, {"i", "o", "0.0924", "-0.0924", "Ver. 2.0, Ref. 2"}, {"si", "o", "0.3425", "-0.3425", "Ver. 2.0, Ref. 2"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o'", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "op", "0.3386", "-0.3386", "Ver. 2.0, Ref. 2"}, {"sp", "op", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"s'", "op", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"p", "op", "0.4933", "-0.4933", "Ver. 2.0, Ref. 2"}, {"h", "op", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"f", "op", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"cl", "op", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"br", "op", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"i", "op", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"si", "op", "0.5883", "-0.5883", "Ver. 2.0, Ref. 2"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "o'", "0.3386", "-0.3386", "Ver. 2.0, Ref. 2"}, {"sp", "o'", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"s'", "o'", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"p", "o'", "0.4933", "-0.4933", "Ver. 2.0, Ref. 2"}, {"h", "o'", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"f", "o'", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"cl", "o'", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"br", "o'", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"i", "o'", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"si", "o'", "0.5883", "-0.5883", "Ver. 2.0, Ref. 2"}, {"p", "o-", "0.3500", "-0.8500", "Ver. 2.0, Ref. 2"}, {"s", "s", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"sp", "s", "-0.0455", "0.0455", "Ver. 2.0, Ref. 2"}, {"s'", "s", "-0.0455", "0.0455", "Ver. 2.0, Ref. 2"}, {"p", "s", "0.1600", "-0.1600", "Ver. 2.0, Ref. 2"}, {"h", "s", "0.1392", "-0.1392", "Ver. 2.0, Ref. 2"}, {"f", "s", "-0.2380", "0.2380", "Ver. 2.0, Ref. 2"}, {"cl", "s", "-0.0898", "0.0898", "Ver. 2.0, Ref. 2"}, {"br", "s", "-0.0437", "0.0437", "Ver. 2.0, Ref. 2"}, {"i", "s", "-0.0345", "0.0345", "Ver. 2.0, Ref. 2"}, {"si", "s", "0.2634", "-0.2634", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s'", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "sp", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"h", "sp", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"f", "sp", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"cl", "sp", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"br", "sp", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"i", "sp", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"si", "sp", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "s'", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"h", "s'", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"f", "s'", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"cl", "s'", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"br", "s'", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"i", "s'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"si", "s'", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"p", "s-", "0.1824", "-0.6824", "Ver. 2.0, Ref. 2"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"h", "p", "-0.0356", "0.0356", "Ver. 2.0, Ref. 2"}, {"f", "p", "-0.3869", "0.3869", "Ver. 2.0, Ref. 2"}, {"cl", "p", "-0.2544", "0.2544", "Ver. 2.0, Ref. 2"}, {"br", "p", "-0.2156", "0.2156", "Ver. 2.0, Ref. 2"}, {"i", "p", "-0.2110", "0.2110", "Ver. 2.0, Ref. 2"}, {"si", "p", "0.1069", "-0.1069", "Ver. 2.0, Ref. 2"}, {"h", "h", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"f", "h", "-0.3823", "0.3823", "Ver. 2.0, Ref. 2"}, {"cl", "h", "-0.2404", "0.2404", "Ver. 2.0, Ref. 2"}, {"br", "h", "-0.1978", "0.1978", "Ver. 2.0, Ref. 2"}, {"i", "h", "-0.1923", "0.1923", "Ver. 2.0, Ref. 2"}, {"si", "h", "0.1537", "-0.1537", "Ver. 2.0, Ref. 2"}, {"f", "f", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"cl", "f", "0.1589", "-0.1589", "Ver. 2.0, Ref. 2"}, {"br", "f", "0.2099", "-0.2099", "Ver. 2.0, Ref. 2"}, {"i", "f", "0.2234", "-0.2234", "Ver. 2.0, Ref. 2"}, {"si", "f", "0.4789", "-0.4789", "Ver. 2.0, Ref. 2"}, {"cl", "cl", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"br", "cl", "0.0507", "-0.0507", "Ver. 2.0, Ref. 2"}, {"i", "cl", "0.0623", "-0.0623", "Ver. 2.0, Ref. 2"}, {"si", "cl", "0.3598", "-0.3598", "Ver. 2.0, Ref. 2"}, {"br", "br", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"i", "br", "0.0110", "-0.0110", "Ver. 2.0, Ref. 2"}, {"si", "br", "0.3273", "-0.3273", "Ver. 2.0, Ref. 2"}, {"i", "i", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "i", "0.3263", "-0.3263", "Ver. 2.0, Ref. 2"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}}; atomes_1.3.1/src/calc/force_fields/charmm36_carb.c0000664000175000017500000073036615212624223021414 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_carb.c * @short CHARMM-charmm36_carb force field, from 'charmm36_carb' * @author Sébastien Le Roux */ /* * This file: 'charmm36_carb.c' * * Contains: * CHARMM-charmm36_carb force field, data from taken from: - the file: 'charmm36_carb' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_carb_atoms[59][5] Bonds : charmm36_carb_bonds[153][5] Angles : charmm36_carb_angles[438][8] Dihedrals : charmm36_carb_dihedrals[1354][8] Non bonded : charmm36_carb_vdw[57][6] */ #include "global.h" int charmm36_carb_objects[14] = {59, 0, 0, 153, 0, 0, 438, 0, 1354, 0 , 0, 14, 57, 0}; int charmm36_carb_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_carb info */ char * charmm36_carb_atoms[59][5]= {{"H", "1.00800", "HCTIP3", "TIP3P water hydrogen", "1"}, {"O", "15.99940", "OCTIP3", "TIP3P water oxygen", "2"}, {"C", "12.01100", "CC301", "aliphatic C, no H's", "171"}, {"C", "12.01100", "CC311", "generic acyclic CH carbon", "172"}, {"C", "12.01100", "CC312", "CH carbon in linear polyols", "173"}, {"C", "12.01100", "CC3161", "C2, C3, C4 CH bound to OH", "174"}, {"C", "12.01100", "CC3162", "C1 (anomeric) CH bound to OH", "175"}, {"C", "12.01100", "CC3163", "C5 CH bound to exocylic CH2OH", "176"}, {"C", "12.01100", "CC321", "generic acyclic CH2 carbon (hexopyranose C6)", "177"}, {"C", "12.01100", "CC322", "CH2 carbon in linear polyols erh", "178"}, {"C", "12.01100", "CC3263", "C5 in xylose", "179"}, {"C", "12.01100", "CC331", "generic acyclic CH3 carbon (xyl C6, glcna/galna CT)", "180"}, {"C", "12.01100", "CC2O1", "sp2 carbon in amides, aldoses", "181"}, {"C", "12.01100", "CC2O2", "sp2 carbon in carboxylates", "182"}, {"C", "12.01100", "CC2O3", "sp2 carbon in acetone, ketoses", "183"}, {"C", "12.01100", "CC2O4", "c22 CD", "184"}, {"H", "1.00800", "HCA1", "aliphatic proton, CH", "185"}, {"H", "1.00800", "HCA2", "aliphatic proton, CH2", "186"}, {"H", "1.00800", "HCA3", "aliphatic proton, CH3", "187"}, {"H", "1.00800", "HCP1", "polar H", "188"}, {"H", "1.00800", "HCR1", "c22 HR1", "189"}, {"O", "15.99940", "OC311", "hydroxyl oxygen", "191"}, {"O", "15.99940", "OC3C61", "ether in six membered ring", "192"}, {"O", "15.99940", "OC301", "generic linear ether", "193"}, {"O", "15.99940", "OC302", "linear ether in 1-1 glycosidic linkage", "194"}, {"O", "15.99940", "OC2D1", "sp2 oxygen in amides, aldoses", "195"}, {"O", "15.99940", "OC2D2", "sp2 oxygen in carboxylates", "196"}, {"O", "15.99940", "OC2D3", "sp2 oxygen in acetone, ketoses", "197"}, {"O", "15.99940", "OC2D4", "par22 O", "198"}, {"N", "14.00700", "NC2D1", "peptide, NMA, IPAA nitrogen (C=NHR)", "200"}, {"C", "12.01100", "CC321C", "cyclohexane, thp CH2", "201"}, {"H", "1.00800", "HCA3M", "alcohol aliphatic proton, CH3", "202"}, {"H", "1.00800", "HCP1M", "EGLY hydroxyl H", "203"}, {"O", "15.99940", "OC311M", "MEOH, ETOH, PRO2, EGLY hydroxyl O", "204"}, {"C", "12.01100", "CC321D", "cyclohexane, thp CH2 model for 1-1 linkage", "205"}, {"C", "12.01100", "CC311C", "patch C1 in model compound", "206"}, {"C", "12.01100", "CC311D", "patch C1 in model compound", "207"}, {"O", "15.99940", "OC3C5M", "thf ring oxygen", "208"}, {"C", "12.01100", "CC322C", "cyclopentane, thf CH2", "209"}, {"H", "1.00800", "HCA2C2", "cyclopentane, thp aliphatic proton, CH2", "210"}, {"C", "12.01100", "CC312C", "tf2m CH1", "211"}, {"H", "1.00800", "HCA1C2", "tf2m aliphatic proton, CH1", "212"}, {"O", "15.99940", "OC3C51", "furan ring oxygen", "213"}, {"C", "12.01100", "CC3152", "furan ring carbon", "214"}, {"C", "12.01100", "CC3153", "furan ring carbon", "215"}, {"C", "12.01100", "CC3251", "furan ring carbon; C2 deoxy", "216"}, {"C", "12.01100", "CC3151", "furan ring carbon", "217"}, {"C", "12.01100", "CC3051", "furan ring carbon; C2 fructose", "218"}, {"C", "12.01100", "CC3062", "C2 on NE5AC", "219"}, {"C", "12.01100", "CC3261", "C3 on NE5AC", "220"}, {"O", "15.99940", "OC312", "OH in PO3H (phosphate) || OHL in top_all27_lipid.rtf", "221"}, {"O", "15.99940", "OC30P", "ester O in PO3H (phosphate) || OSL in top_all27_lipid.rtf", "222"}, {"O", "15.99940", "OC2DP", "=0 in P03H (phosphate) || O2L in top_all27_lipid.rtf", "223"}, {"P", "30.97400", "PC", "phosphorus || PL in top_all27_lipid.rtf", "224"}, {"S", "32.06000", "SC", "Sulfate sulfur", "225"}, {"C", "12.01100", "CC312D", "from CC322C; THF anomeric carbon", "226"}, {"O", "15.99940", "OC303", "from OC301; linear ether in P1->F3 pyranose-furanose glycosidic linkage", "227"}, {"C", "12.01100", "CC2O5", "carbonyl C on acetyl", "228"}, {"N", "14.00700", "NC311", "! Sulfamate nitrogen, xxwy", "229"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_carb info V(R) = Kb x (R - R0)^2 */ char * charmm36_carb_bonds[153][5]= {{"OC2D3", "CC2O3", "700.00", "1.215", "ketone MP2/6-31g*, CSD geometry"}, {"CC2O3", "CC331", "330.00", "1.500", "ketone MP2/6-31g*, CSD geometry"}, {"CC2O3", "CC312", "330.00", "1.500", "ketone"}, {"CC2O3", "CC322", "330.00", "1.500", "ketone"}, {"OC2D4", "CC2O4", "700.00", "1.215", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "330.00", "1.110", "acetaldehyde, adm"}, {"CC2O4", "CC331", "250.00", "1.500", "acetaldehyde, adm"}, {"CC2O4", "CC312", "250.00", "1.500", "acetaldehyde, adm"}, {"CC311", "CC311", "222.50", "1.500", "par22 CT1 CT1"}, {"CC312", "CC312", "222.50", "1.485", "adm 11/08, glycerol"}, {"CC3161", "CC3163", "222.50", "1.500", "par22 CT1 CT1"}, {"CC3161", "CC3263", "222.50", "1.500", "CC3161 CC3163 og xtal xylose"}, {"CC312", "CC322", "222.50", "1.485", "adm 11/08, glycerol"}, {"CC301", "CC331", "222.50", "1.538", "genff CG301 CG331"}, {"CC311", "CC321", "222.50", "1.538", "par22 CT2 CT1"}, {"CC311", "CC331", "222.50", "1.538", "par22 CT3 CT1"}, {"CC331", "CC3163", "222.50", "1.538", "par22 CT3 CT1 og xtal alfuco"}, {"CC3161", "CC3161", "222.50", "1.480", "sng qm and crystal analysis"}, {"CC3261", "CC3161", "222.50", "1.480", "from CC3161 CC3161"}, {"CC3161", "CC3162", "222.50", "1.480", "sng qm and crystal analysis"}, {"CC3261", "CC3062", "222.50", "1.515", "og xtal kemyac"}, {"CC321", "CC3163", "222.50", "1.490", "sng qm and crystal analysis"}, {"CC312", "CC3163", "222.50", "1.490", "from CC321 CC3163"}, {"CC301", "CC2O2", "200.00", "1.522", "par22 CT1 CC"}, {"CC311", "CC2O2", "200.00", "1.522", "par22 CT1 CC"}, {"CC3163", "CC2O2", "200.00", "1.480", "og xtal"}, {"CC3062", "CC2O2", "200.00", "1.480", "og xtal"}, {"CC2O1", "CC331", "250.00", "1.520", "og ipaa and xtal acglua11 agalam10 nacman10"}, {"CC321", "CC331", "222.50", "1.528", "par22 CT3 CT2"}, {"CC321", "CC321", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC321C", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC321D", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC311C", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321", "CC311C", "222.50", "1.490", "from CC321 CC3163"}, {"CC321C", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321D", "CC311C", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321", "CC2O2", "200.00", "1.522", "par22 CT2 CC"}, {"CC3161", "OC311", "410.00", "1.410", "og crystal analysis"}, {"CC3162", "OC311", "428.00", "1.400", "og crystal analysis"}, {"CC3062", "OC311", "428.00", "1.400", "from CC3162 OC311"}, {"CC301", "OC311", "428.00", "1.420", "par22 OH1 CT1"}, {"CC311", "OC311", "428.00", "1.420", "par22 OH1 CT1"}, {"CC312", "OC311", "400.00", "1.420", "adm 11/08, glycerol"}, {"CC311", "OC311M", "428.00", "1.420", "par22 OH1 CT1"}, {"CC321", "OC311", "428.00", "1.420", "par22 OH1 CT2"}, {"CC321", "OC311M", "428.00", "1.420", "par22 OH1 CT2"}, {"CC331", "OC311M", "428.00", "1.420", "par22 OH1 CT3"}, {"CC322", "OC311", "400.00", "1.420", "adm 11/08, glycerol"}, {"CC2O1", "OC2D1", "620.00", "1.230", "par22 O C"}, {"CC2O2", "OC2D2", "525.00", "1.260", "par22 OC CC"}, {"CC301", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC311", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC321", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC331", "OC301", "360.00", "1.415", "par35 CC33A OC30A"}, {"CC311D", "OC301", "360.00", "1.395", "og disac model compounds 2 and 3"}, {"CC3162", "OC301", "360.00", "1.395", "og disac model compounds 2 3 og/rmv crystals"}, {"CC3062", "OC301", "360.00", "1.395", "from CC3162 OC301"}, {"CC311D", "OC302", "360.00", "1.415", "og disac model compounds 4 5 6"}, {"CC3162", "OC302", "360.00", "1.415", "og disac model comps 4 5 6 og/rmv crystals"}, {"CC311C", "OC301", "360.00", "1.435", "og disac model compounds 7 8 9 and 10"}, {"CC3161", "OC301", "360.00", "1.415", "og/rmv disac crystals"}, {"CC321D", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC311D", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC3162", "OC3C61", "360.00", "1.425", "og crystal analysis"}, {"CC3062", "OC3C61", "360.00", "1.425", "from CC3162 OC3C61"}, {"CC321C", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC311C", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC3163", "OC3C61", "360.00", "1.425", "sng qm and crystal analysis"}, {"CC3263", "OC3C61", "360.00", "1.425", "CC3263 OC3C61 og xylose xtal ok"}, {"NC2D1", "CC311", "320.00", "1.430", "par22 NH1 CT1"}, {"NC2D1", "CC3161", "320.00", "1.430", "par22 NH1 CT1"}, {"NC2D1", "CC331", "320.00", "1.430", "par22 NH1 CT3"}, {"NC2D1", "CC2O1", "370.00", "1.345", "par22 NH1 C"}, {"CC311", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC312", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3161", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3162", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3163", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC311C", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC311D", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC321", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC322", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC3263", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC331", "HCA3", "322.00", "1.111", "par22 HA CT3"}, {"CC321C", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC321D", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC3261", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"OC311", "HCP1", "545.00", "0.960", "par22 OH1 H"}, {"OC311M", "HCP1", "545.00", "0.960", "par22 OH1 H"}, {"OC311M", "HCP1M", "545.00", "0.960", "par22 OH1 H"}, {"NC2D1", "HCP1", "440.00", "0.997", "par22 NH1 H"}, {"CC322C", "OC3C5M", "350.00", "1.425", "par34 CC325B OC305A"}, {"CC322C", "CC322C", "195.00", "1.518", "par34 CC325B CC325B"}, {"CC322C", "HCA2C2", "307.00", "1.100", "par34 CC325B HCA25A"}, {"CC312C", "CC331", "222.50", "1.528", "par34 CC325B CC33A"}, {"CC312C", "OC3C5M", "350.00", "1.425", "par34 CC325B OC305A"}, {"CC312C", "CC322C", "195.00", "1.518", "par34 CC325B CC325B"}, {"CC312C", "HCA1C2", "307.00", "1.100", "par34 CC325B HCA25A"}, {"CC312C", "OC301", "360.00", "1.395", "erh xtal analysis on disac"}, {"OC3C51", "CC3152", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC3C51", "CC3051", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC3C51", "CC3153", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC311", "CC3152", "428.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3051", "428.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3151", "410.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"CC3152", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3251", "HCA2", "307.00", "1.100", "par_carb CC322C HCA2C2"}, {"CC3151", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3153", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3152", "CC3251", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3051", "CC3251", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3251", "CC3151", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3153", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3152", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3051", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3151", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3153", "CC321", "222.50", "1.490", "par_carb CC321 CC3163 (sng qm/crystal mod); erh 2/09"}, {"CC3051", "CC321", "222.50", "1.490", "par_carb CC321 CC3163 (sng qm/crystal mod); erh 2/09"}, {"CC3152", "OC301", "360.00", "1.395", "erh xtal analysis on disac"}, {"CC321D", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC311D", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC3161", "OC30P", "360.00", "1.425", " "}, {"CC311D", "OC30P", "360.00", "1.425", " "}, {"CC3162", "OC30P", "360.00", "1.425", " "}, {"CC321", "OC30P", "360.00", "1.452", " "}, {"OC30P", "PC", "270.0", "1.675", " "}, {"OC2DP", "PC", "580.0", "1.525", " "}, {"OC312", "PC", "237.0", "1.61", " "}, {"OC312", "HCP1", "545.0", "0.960", " "}, {"SC", "OC2DP", "540.0", "1.448", "methylsulfate"}, {"SC", "OC30P", "250.0", "1.610", "methylsulfate"}, {"CC312D", "OC301", "360.00", "1.395", "OMe-THF CC312C OC301"}, {"CC312D", "OC3C5M", "350.00", "1.425", "OMe-THF CC312C OC3C5M"}, {"CC312D", "CC322C", "195.00", "1.518", "THF w/me CC312C CC322C"}, {"CC312D", "HCA1", "307.00", "1.100", "THF w/me CC312C HCA1C2"}, {"CC312D", "OC302", "360.00", "1.425", "pram, modified (from OMe-THF) to match model comp 1(raman et al.) QM minima geometry and SUCROS04 crystal"}, {"CC312C", "HCA1", "307.00", "1.100", "THF w/me CC312C HCA1C2"}, {"CC312C", "CC321", "222.50", "1.500", "pram, modified 12/26/2010 (from THF w/me) to match model comp 2(raman et al.) QM minima geometry"}, {"CC331", "OC303", "360.00", "1.415", "Ome-THF CC331 OC301"}, {"CC312C", "OC303", "360.00", "1.425", "pram, modified (from OMe-THF) to match model comp 3(raman et al.) QM minima geometry"}, {"CC311D", "OC303", "360.00", "1.395", "CC311D OC301"}, {"CC3051", "OC302", "360.00", "1.425", "CC312D OC301 - model compound 1 (raman et. al.), crystal analysis"}, {"CC3162", "OC303", "360.00", "1.395", "CC311D OC303 - model compound 3 (raman et. al.)"}, {"OC303", "CC3151", "360.00", "1.425", "CC312C OC303 - model compound 3 (raman et. al.)"}, {"OC301", "CC3051", "360.00", "1.395", "CC312C OC301 - Ome-THF"}, {"OC301", "CC312", "400.00", "1.420", "from CC312 OC311"}, {"OC301", "CC322", "400.00", "1.420", "from CC312 OC311"}, {"CC2O5", "OC301", "150.00", "1.3340", "CG2O2 OG302"}, {"CC2O5", "CC331", "200.00", "1.5220", "CG2O2 CG331"}, {"CC2O5", "OC2D1", "750.00", "1.2200", "CG2O2 OG2D1"}, {"SC", "NC311", "185.00", "1.700", "SUFMA/B, Targeting crystal survey value instead of QM, xxwy"}, {"CC3161", "NC311", "270.00", "1.455", "SUFMA/B, xxwy"}, {"NC311", "HCP1", "432.00", "1.030", "SUFMA/B, xxwy"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_carb info V(S) = Kub x (S - S0)^2 */ char * charmm36_carb_angles[438][8]= {{"CC311", "CC311", "CC321", "53.35", "111.00", "8.00", "2.561", "par22 CT2 CT1 CT1"}, {"CC322", "CC312", "CC322", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC312", "CC312", "CC322", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC312", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 O CD CT2"}, {"CC331", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 aldehydes.str"}, {"CC322", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 O CD CT2"}, {"CC331", "CC2O3", "CC331", "35.00", "116.00", " ", " ", "ketone, C-C-C"}, {"CC312", "CC2O3", "CC322", "35.00", "116.00", " ", " ", "ketone"}, {"CC322", "CC2O3", "CC322", "35.00", "116.00", " ", " ", "ketone"}, {"CC312", "CC312", "CC2O3", "60.00", "113.80", " ", " ", "ketone, par22 str CT3 CT2 CD"}, {"CC2O3", "CC331", "HCA3", "50.00", "109.50", " ", " ", "ketone"}, {"CC2O3", "CC322", "HCA2", "50.00", "109.50", " ", " ", "ketone, par22 HB CT2 CD"}, {"HCA1", "CC312", "CC2O3", "50.00", "109.50", " ", " ", "ketone, par22 HB CT1 CD"}, {"OC311", "CC312", "CC2O3", "55.00", "108.89", " ", " ", "ketone, og 1/06 EtOH NIST IR fit"}, {"CC2O3", "CC322", "OC311", "55.00", "108.89", " ", " ", "ketone, og 1/06 EtOH NIST IR fit"}, {"OC2D4", "CC2O4", "HCR1", "65.00", "118.00", " ", " ", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "CC331", "65.00", "116.00", " ", " ", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "CC312", "65.00", "116.00", " ", " ", "acetaldehyde, adm"}, {"CC312", "CC2O4", "OC2D4", "45.00", "126.00", " ", " ", "acetaldehyde, adm"}, {"CC331", "CC2O4", "OC2D4", "45.00", "126.00", " ", " ", "acetaldehyde, adm"}, {"CC312", "CC312", "CC2O4", "60.00", "113.80", " ", " ", "aldehyde, par22 CT3 CT2 CD"}, {"OC311", "CC312", "CC2O4", "55.00", "108.89", " ", " ", "aldehyde, og 1/06 EtOH NIST IR fit"}, {"CC2O4", "CC312", "HCA1", "33.00", "109.50", "30.00", "2.16300", "acetaldehyde, adm"}, {"CC2O4", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.16300", "acetaldehyde, adm"}, {"CC3161", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3261", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT2 CT1 CT1"}, {"CC3161", "CC3161", "CC3163", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3161", "CC3161", "CC3263", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1; erh transferred by analogy"}, {"CC312", "CC312", "CC312", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC3162", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3163", "CC312", "CC312", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3062", "CC3261", "CC3161", "58.35", "113.50", "11.16", "2.561", "par22 CT1 CT2 CT1"}, {"CC3161", "CC3163", "CC321", "58.35", "113.50", "11.16", "2.561", "sng"}, {"CC3161", "CC3163", "CC312", "58.35", "113.50", "11.16", "2.561", "from CC3161 CC3163 CC321"}, {"CC3161", "CC3163", "CC331", "58.35", "113.50", "11.16", "2.561", "CC3161 CC3163 CC321 og xylose xtal ok"}, {"CC2O2", "CC311", "CC331", "52.00", "108.00", " ", " ", "par22 CT3 CT1 CC"}, {"CC2O2", "CC3163", "CC3161", "52.00", "108.00", " ", " ", "par22 CT1 CT1 CC"}, {"CC2O2", "CC301", "CC331", "52.00", "112.00", " ", " ", "og amol mp2/6-31g*"}, {"CC2O2", "CC3062", "CC3261", "52.00", "112.00", " ", " ", "from CC2O2 CC301 CC331 for ne5ac"}, {"CC321", "CC321", "CC321", "58.35", "113.60", "11.16", "2.561", "par22 CT2 CT2 CT2"}, {"CC331", "CC321", "CC321", "58.00", "115.00", "8.00", "2.561", "par22 CT3 CT2 CT2"}, {"CC331", "CC311", "CC331", "53.35", "114.00", "8.00", "2.561", "par22 CT3 CT1 CT3"}, {"CC321C", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321C", "CC311C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC321C", "CC311C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC311C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311D", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311C", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321C", "CC321D", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321", "CC311C", "CC321C", "58.35", "113.50", "11.16", "2.561", "from CC3161 CC3163 CC321"}, {"CC2O2", "CC321", "CC331", "52.00", "108.00", " ", " ", "par22 CT2 CT2 CC"}, {"CC312", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC312", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3162", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3261", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC3162", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3163", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3163", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC322", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC321", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC331", "CC311", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"CC331", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"CC3263", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC321", "CC311", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC312", "CC322", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3163", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3062", "CC3261", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3161", "CC3261", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC311", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3161", "CC3263", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3163", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC311", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC301", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC2O2", "CC3163", "HCA1", "50.00", "109.50", " ", " ", "par 22 HB CT1 CC"}, {"CC2O2", "CC311", "HCA1", "50.00", "109.50", " ", " ", "par 22 HB CT1 CC"}, {"CC2O1", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.163", "par22 HA CT3 C"}, {"HCA1", "CC311C", "CC321", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311D", "CC321C", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311C", "CC321C", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311C", "CC321D", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC321", "CC311C", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"HCA2", "CC321", "CC321", "26.50", "110.10", "22.53", "2.179", "par22 HA CT2 CT2"}, {"HCA2", "CC321", "CC331", "34.60", "110.10", "22.53", "2.179", "par22 HA CT2 CT3"}, {"HCA3", "CC331", "CC321", "34.60", "110.10", "22.53", "2.179", "par22 HA CT3 CT2"}, {"HCA2", "CC321C", "CC321C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321D", "CC321C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC321D", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC311D", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC311C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321D", "CC311C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"CC2O2", "CC321", "HCA2", "33.00", "109.50", "30.00", "2.163", "par22 HA CT2 CC"}, {"CC3161", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC3162", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC3163", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC331", "CC311", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT3"}, {"NC2D1", "CC2O1", "CC331", "80.00", "116.50", " ", " ", "par22 NH1 C CT3"}, {"CC3161", "NC2D1", "CC2O1", "50.00", "120.00", " ", " ", "par22 CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC311", "50.00", "120.00", " ", " ", "par22 CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC331", "50.00", "120.00", " ", " ", "par22 CT3 NH1 C"}, {"NC2D1", "CC2O1", "OC2D1", "80.00", "122.50", " ", " ", "par22 O C NH1"}, {"NC2D1", "CC3161", "HCA1", "48.00", "108.00", " ", " ", "par22 NH1 CT1 HB"}, {"NC2D1", "CC311", "HCA1", "48.00", "108.00", " ", " ", "par22 NH1 CT1 HB"}, {"NC2D1", "CC331", "HCA3", "51.50", "109.50", " ", " ", "par22 NH1 CT3 HA"}, {"HCP1", "NC2D1", "CC2O1", "34.00", "123.00", " ", " ", "par22 H NH1 C"}, {"CC3161", "NC2D1", "HCP1", "35.00", "117.00", " ", " ", "par22 H NH1 CT1"}, {"HCP1", "NC2D1", "CC311", "35.00", "117.00", " ", " ", "par22 H NH1 CT1"}, {"HCP1", "NC2D1", "CC331", "35.00", "117.00", " ", " ", "par22 H NH1 CT3"}, {"HCA2", "CC321", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC322", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC321C", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC321D", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC3261", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC3263", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA3", "CC331", "HCA3", "35.50", "108.40", "5.40", "1.802", "par22 HA CT3 HA"}, {"CC3161", "CC3163", "OC3C61", "45.00", "110.00", " ", " ", "sng mod (qm and crystal data)"}, {"CC3161", "CC3263", "OC3C61", "45.00", "110.00", " ", " ", "CC3161 CC3163 OC3C61 + og xtal xylose"}, {"CC3161", "CC3162", "OC3C61", "45.00", "106.00", " ", " ", "og crystal analysis"}, {"OC3C61", "CC3062", "CC3261", "45.00", "111.50", " ", " ", "og xtal kemyac"}, {"CC321", "CC3163", "OC3C61", "45.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC312", "CC3163", "OC3C61", "45.00", "109.00", " ", " ", "from C321 CC3163 OC3C61"}, {"CC331", "CC3163", "OC3C61", "45.00", "111.50", " ", " ", "par34 OC30A CC32A CC33A"}, {"CC2O2", "CC311", "OC301", "45.00", "103.00", " ", " ", "og amop mp2/631gd"}, {"CC2O2", "CC3163", "OC3C61", "45.00", "103.00", " ", " ", "og amop mp2/631gd + xtals"}, {"CC2O2", "CC301", "OC301", "45.00", "103.00", " ", " ", "from CC2O2 CC311 OC301; og amol ok"}, {"CC2O2", "CC3062", "OC301", "45.00", "103.00", " ", " ", "from CC2O2 CC301 OC301"}, {"CC2O2", "CC3062", "OC3C61", "45.00", "103.00", " ", " ", "from CC2O2 CC301 OC301"}, {"CC3161", "CC3162", "OC311", "75.70", "107.00", " ", " ", "sng mod (qm and crystal data) III"}, {"CC312", "CC312", "OC311", "75.70", "108.00", " ", " ", "adm 11/08, glycerol"}, {"CC3161", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3261", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3162", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3163", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3163", "CC312", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3263", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC312", "CC322", "OC311", "50.00", "106.00", " ", " ", "adm 11/08, glycerol"}, {"CC3163", "CC321", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"CC311", "CC321", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"CC321", "CC311", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"CC322", "CC312", "OC311", "75.70", "108.00", " ", " ", "adm 11/08, glycerol"}, {"CC331", "CC301", "OC311", "75.70", "113.00", " ", " ", "og amol mp2/631g*"}, {"CC3261", "CC3062", "OC311", "75.70", "113.00", " ", " ", "from CC331 CC301 OC311 for ne5ac"}, {"CC2O2", "CC301", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT3; og amol ok"}, {"CC2O2", "CC3062", "OC311", "75.70", "110.10", " ", " ", "from CC2O2 CC301 OC311 for ne5ac"}, {"CC3163", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC3062", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC311", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC301", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC321", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"OC2D1", "CC2O1", "CC331", "80.00", "121.00", " ", " ", "par22 O C CT3"}, {"OC301", "CC311", "CC331", "45.00", "111.50", " ", " ", "par35 OC30A CC32A CC33A"}, {"OC301", "CC321", "CC321", "45.00", "111.50", " ", " ", "par35 OC30A CC32A CC32A"}, {"OC301", "CC301", "CC331", "45.00", "109.00", " ", " ", "og amol mp2/631g*"}, {"OC3C61", "CC311C", "CC321", "45.00", "109.00", " ", " ", "from CC321 CC3163 OC3C61"}, {"OC3C61", "CC311C", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321C", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321C", "CC311C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC311C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC311D", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC301", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC3062", "CC3261", "45.00", "105.00", " ", " ", "from OC301 CC3162 CC3161"}, {"OC302", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC302", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC311C", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3161", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3163", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC311C", "CC321D", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3162", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC321", "CC311C", "45.00", "106.00", " ", " ", "og fit compounds 11 and 12"}, {"OC301", "CC321", "CC3163", "45.00", "106.00", " ", " ", "og fit compounds 11 and 12"}, {"CC321", "CC321", "OC311M", "75.70", "110.10", " ", " ", "From CN7 CN8B ON5"}, {"CC331", "CC321", "OC311M", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT3"}, {"CC331", "CC311", "OC311M", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT3"}, {"CC3161", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC321", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data)"}, {"CC3162", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC3062", "OC311", "HCP1", "50.00", "109.00", " ", " ", "from CC3162 OC311 HCP1 for ne5ac"}, {"HCP1", "OC311", "CC311", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC312", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC301", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC322", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311M", "CC321", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1M", "OC311M", "CC321", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit for egly"}, {"HCP1", "OC311M", "CC311", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311M", "CC331", "57.50", "106.00", " ", " ", "par22 H OH1 CT3"}, {"OC311", "CC3162", "OC3C61", "45.00", "116.50", " ", " ", "og crystal analysis"}, {"OC311", "CC301", "OC301", "45.00", "116.50", " ", " ", "OC311 CC3162 OC3C61; og amol ok"}, {"OC311", "CC3062", "OC3C61", "45.00", "113.00", " ", " ", "og xtal kemyac"}, {"OC2D2", "CC2O2", "OC2D2", "100.00", "132.00", "70.00", "2.225", "og amop amol and xtals"}, {"OC301", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC3062", "OC3C61", "90.00", "112.00", " ", " ", "from OC301 CC3162 OC3C61"}, {"OC302", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC302", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "og/rmv disac crystal analysis"}, {"CC3163", "OC3C61", "CC3162", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC3163", "OC3C61", "CC3062", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC3263", "OC3C61", "CC3162", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC32A OC30A CC32A"}, {"CC301", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC321D", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC321D", "OC3C61", "CC311C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311D", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311D", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC321", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC321", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC311D", "OC302", "CC311D", "50.00", "111.50", " ", " ", "og QM theta vs phi/psi comp 4 to 6"}, {"CC3162", "OC302", "CC3162", "50.00", "111.50", " ", " ", "og QM theta vs phi/psi comp 4 to 6"}, {"CC311C", "OC301", "CC311D", "50.00", "109.20", " ", " ", "og QM theta vs phi/psi comp 7 to 10"}, {"CC3161", "OC301", "CC3162", "50.00", "109.20", " ", " ", "og QM theta vs phi/psi comp 7 to 10"}, {"CC3161", "OC301", "CC3062", "50.00", "109.20", " ", " ", "from CC3161 OC301 CC3162"}, {"HCA1", "CC312", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3161", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3162", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3163", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC321", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC322", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3162", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC3163", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA2", "CC3263", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311", "OC301", "60.00", "109.50", " ", " ", "par34 HCA2 CC32A OC30A"}, {"OC301", "CC321", "HCA2", "60.00", "109.50", " ", " ", "par34 HCA2 CC32A OC30A"}, {"OC301", "CC331", "HCA3", "60.00", "109.50", " ", " ", "par34 HCA3 CC33A OC30A"}, {"HCA3", "CC331", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 MeOH NIST IR fit"}, {"HCA2", "CC321", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC311", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC321C", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA2", "CC321D", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311C", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311D", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311D", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3162", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC311D", "OC302", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3162", "OC302", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC311C", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3161", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"CC322C", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"HCA2C2", "CC322C", "CC322C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05"}, {"HCA2C2", "CC322C", "HCA2C2", "38.50", "106.80", "5.40", "1.802", "viv cyclopentane 10/17/05"}, {"OC3C5M", "CC322C", "CC322C", "45.00", "111.10", " ", " ", "viv THF 10/21/05"}, {"CC322C", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "viv THF 10/21/05"}, {"HCA2C2", "CC322C", "OC3C5M", "70.00", "107.30", " ", " ", "viv THF 10/21/05"}, {"HCA3", "CC331", "CC312C", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC322C", "CC312C", "CC331", "53.35", "114.00", "8.00", "2.561", "par22 CT3 CT1 CT2"}, {"HCA1C2", "CC312C", "CC331", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"OC3C5M", "CC312C", "CC331", "45.00", "111.50", " ", " ", "viv TF2M (DEE)"}, {"HCA1C2", "CC312C", "CC322C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05; erh 7/08"}, {"HCA2C2", "CC322C", "CC312C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05; erh 7/08"}, {"CC312C", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv ; erh 7/08"}, {"CC322C", "CC312C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv ; erh 7/08"}, {"OC3C5M", "CC312C", "CC322C", "45.00", "111.10", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"CC312C", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"HCA1C2", "CC312C", "OC3C5M", "70.00", "107.30", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"HCA1C2", "CC312C", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC301", "CC312C", "CC322C", "45.00", "106.50", " ", " ", "erh xtal analysis on disac"}, {"CC312C", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"OC301", "CC312C", "OC3C5M", "90.00", "112.00", " ", " ", "og,erh xtal analysis on disac"}, {"OC3C51", "CC3152", "CC3251", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3051", "CC3251", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3152", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3051", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3153", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3153", "CC321", "45.00", "108.00", " ", " ", "erh crystal analysis on furanose 3/09"}, {"OC3C51", "CC3051", "CC321", "45.00", "108.00", " ", " ", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3151", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_Sugars, CC3263 CC3161 OC311"}, {"OC311", "CC3151", "CC3153", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3152", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3051", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC321", "CC3153", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"OC311", "CC321", "CC3152", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1; erh 3/08"}, {"OC311", "CC321", "CC3051", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1; erh 3/08"}, {"OC311", "CC3152", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_carb, CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_carb, CC3263 CC3161 OC311"}, {"OC311", "CC3152", "CC321", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"OC311", "CC3051", "CC321", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"OC311", "CC3152", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3051", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC3C51", "CC3152", "OC311", "45.00", "116.50", " ", " ", "par_carb, OC3C61 CC3162 OC311"}, {"OC3C51", "CC3051", "OC311", "45.00", "116.50", " ", " ", "par_carb, OC3C61 CC3162 OC311"}, {"OC3C51", "CC3152", "HCA1", "70.00", "107.30", " ", " ", "THF, par_carb, OC3C5M CC322C HCA2C2"}, {"OC3C51", "CC3153", "HCA1", "70.00", "107.30", " ", " ", "THF, par_carb, OC3C5M CC322C HCA2C2"}, {"OC311", "CC3152", "HCA1", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit; par_carb, HCA1 CC3162 OC311"}, {"OC311", "CC3151", "HCA1", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit; par_carb, HCA1 CC3161 OC311"}, {"CC3152", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3162 OC311 HCP1"}, {"CC3051", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3162 OC311 HCP1"}, {"CC3151", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3161 OC311 HCP1"}, {"CC3153", "OC3C51", "CC3152", "95.00", "111.00", " ", " ", "THF, par_carb CC322C OC3C5M CC322C"}, {"CC3153", "OC3C51", "CC3051", "95.00", "111.00", " ", " ", "THF, par_carb CC322C OC3C5M CC322C"}, {"CC3152", "CC3251", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3051", "CC3251", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3152", "CC3151", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3051", "CC3151", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3251", "CC3151", "CC3153", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3151", "CC3151", "CC3153", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3151", "CC3153", "CC321", "58.35", "113.50", "11.16", "2.561", "sng, par_carb CC3161 CC3163 CC321; erh 7/08"}, {"CC3151", "CC3051", "CC321", "58.35", "113.50", "11.16", "2.561", "sng, par_carb CC3161 CC3163 CC321; erh 7/08"}, {"CC3152", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3051", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3251", "CC3152", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3251", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3153", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3152", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3051", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3152", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3153", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3153", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC3152", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC3051", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC321", "CC3153", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC3251", "HCA2", "38.50", "106.80", "5.40", "1.802", "cyclopentane, par_carb HCA2C2 CC322C HCA2C2"}, {"HCA1", "CC3152", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC301", "CC3152", "CC3151", "45.00", "105.00", " ", " ", "erh xtal anal on disac/furanose 3/09"}, {"CC3152", "OC301", "CC331", "95.00", "111.00", " ", " ", "erh xtal anal on furanose 3/09"}, {"OC301", "CC3152", "OC3C51", "90.00", "112.00", " ", " ", "erh xtal anal on disac"}, {"CC321C", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311D", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"OC3C61", "CC311D", "CC311D", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC311D", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"HCA1", "CC311D", "CC311D", "34.500", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC321D", "CC311D", "34.500", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA1", "CC311D", "CC321D", "34.500", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"OC30P", "CC311D", "CC321C", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC311D", "CC311D", "45.000", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3161", "CC3161", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3161", "CC3163", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC311D", "CC321D", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC3162", "CC3161", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC3161", "CC3162", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC321", "CC311C", "75.700", "107.50", " ", " ", " "}, {"OC30P", "CC321", "CC3163", "75.700", "107.50", " ", " ", " "}, {"OC30P", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3162", "OC3C61", "90.00", "110.00", " ", " ", " "}, {"OC30P", "CC321", "HCA2", "60.0", "109.5", " ", " ", " "}, {"OC30P", "CC3162", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "CC3161", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "CC311D", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "PC", "OC2DP", "98.9", "111.6", " ", " ", " "}, {"OC2DP", "PC", "OC2DP", "120.0", "120.0", " ", " ", " "}, {"OC2DP", "PC", "OC312", "98.9", "113.23", " ", " ", "ON3 P ON4 98.9 108.23 !MP_1, ADM Jr. !"}, {"OC312", "PC", "OC312", "98.9", "104.413", " ", " ", "ON4 P ON4 98.9 104.0 !MP_0, ADM Jr. !"}, {"OC30P", "PC", "OC312", "48.1", "108.0", " ", " ", "ON2 P ON4 48.1 108.0 !MP_1, ADM Jr. !"}, {"HCP1", "OC312", "PC", "30.0", "115.0", "40.0", "2.35", " "}, {"CC3161", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC311D", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC3162", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC311D", "OC30P", "SC", "15.0", "109.00", "27.00", "1.90", "methylsulfate"}, {"CC3161", "OC30P", "SC", "15.0", "109.00", "27.00", "1.90", "methylsulfate"}, {"CC321", "OC30P", "SC", "15.0", "110.10", "27.00", "1.90", "methylsulfate"}, {"OC2DP", "SC", "OC2DP", "130.0", "109.47", "35.0", "2.45", "methylsulfate"}, {"OC30P", "SC", "OC2DP", "85.0", "98.0", " ", " ", "methylsulfate"}, {"CC311D", "OC301", "CC321", "95.00", "109.70", " ", " ", "pram, OMeTHP CC311D OC301 CC331"}, {"OC301", "CC321", "CC331", "45.00", "111.50", " ", " ", "pram, par35 OC3C7M CC321 CC331"}, {"OC301", "CC312D", "OC3C5M", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"HCA1", "CC312D", "OC301", "60.00", "109.50", " ", " ", "OMe-THF HCA1C2 CC312C OC301"}, {"OC301", "CC312D", "CC322C", "45.00", "106.50", " ", " ", "OMe-THF OC301 CC312C CC322C"}, {"CC312D", "OC301", "CC331", "95.00", "109.70", " ", " ", "OMe-THF CC312C OC301 CC331"}, {"CC311D", "OC302", "CC312D", "50.00", "111.50", " ", " ", "THP-O-THP CC311D OC302 CC311D"}, {"CC312D", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "THF w/me CC312C OC3C5M CC322C"}, {"OC302", "CC312D", "OC3C5M", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"HCA2C2", "CC322C", "CC312D", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA2C2 CC322C CC312C"}, {"CC312D", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF w/me CC312C CC322C CC322C"}, {"OC3C5M", "CC312D", "CC322C", "45.00", "111.10", " ", " ", "THF w/me OC3C5M CC312C CC322C"}, {"OC302", "CC312D", "CC322C", "45.00", "106.50", " ", " ", "OMe-THF OC301 CC312C CC322C"}, {"HCA1", "CC312D", "OC302", "60.00", "109.50", " ", " ", "OMe-THF HCA1C2 CC312C OC301"}, {"HCA1", "CC312D", "OC3C5M", "70.00", "107.30", " ", " ", "THF w/me HCA1C2 CC312C OC3C5M"}, {"HCA1", "CC312D", "CC322C", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC322C"}, {"HCA1", "CC312C", "OC3C5M", "70.00", "107.30", " ", " ", "THF w/me HCA1C2 CC312C OC3C5M"}, {"HCA1", "CC312C", "CC322C", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC322C"}, {"CC321", "CC312C", "CC322C", "58.350", "113.00", "11.16", "2.561", "pram, angle eq. value modified (from CC321 CC311C CC321C),QM minima, MOLVIB on model compound 2 (raman et. al)"}, {"HCA1", "CC312C", "CC321", "34.50", "110.10", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC331"}, {"HCA2", "CC321", "CC312C", "33.43", "110.10", "22.53", "2.179", "COCA-THP2 HCA2 CC321 CC311C"}, {"OC301", "CC321", "CC312C", "45.00", "106.00", " ", " ", "COCA-THP2 OC301 CC321 CC311C"}, {"OC3C5M", "CC312C", "CC321", "60.00", "109.00", " ", " ", "pram, modified (from OC3C61 CC311C CC321),QM minima, MOLVIB on model compound 2 (raman et. al)"}, {"CC312C", "OC303", "CC331", "95.00", "109.70", " ", " ", "OMe-THF CC312C OC301 CC331"}, {"OC303", "CC331", "HCA3", "60.00", "109.50", " ", " ", "OMe-THF"}, {"OC303", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "OC301 CC311D CC321C"}, {"OC303", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "OC301 CC311D OC3C61"}, {"HCA1", "CC311D", "OC303", "60.00", "109.50", " ", " ", "HCA1 CC311D OC301"}, {"HCA1", "CC312C", "OC303", "60.00", "109.50", " ", " ", "HCA1C2 CC312C OC301"}, {"OC303", "CC312C", "CC322C", "45.00", "110.50", " ", " ", "pram, modified (from OC301 CC312C CC322C), model compound 3 (raman et. al) QM minima"}, {"CC311D", "OC303", "CC312C", "50.00", "109.50", " ", " ", "pram, modified (from CC311D OC302 CC311D), model compound 3 (raman et. al) QM minima, MOLVIB"}, {"OC3C5M", "CC322C", "CC312C", "45.00", "111.10", " ", " ", "THF OC3C5M CC322C CC322C"}, {"CC311C", "OC301", "CC312D", "50.00", "109.20", " ", " ", "CC311C OC301 CC311D"}, {"CC3162", "OC302", "CC3051", "50.00", "111.50", " ", " ", "CC3162 OC302 CC3162"}, {"OC302", "CC3051", "OC3C51", "90.00", "112.00", " ", " ", "OC301 CC312C OC3C51"}, {"OC302", "CC3051", "CC321", "75.70", "110.10", " ", " ", "OC311 CC3051 CC321"}, {"OC302", "CC3051", "CC3151", "45.00", "105.00", " ", " ", "OC301 CC3152 CC3151"}, {"HCA1", "CC3162", "OC303", "60.00", "109.50", " ", " ", "pram, model compound 3(raman et al) HCA1 CC311D OC303"}, {"OC303", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "OC301 CC3162 OC3C61"}, {"OC303", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "OC301 CC3162 CC3161"}, {"CC3162", "OC303", "CC3151", "50.00", "109.50", " ", " ", "pram, model compound 3(raman et al) CC311D OC303 CC312C"}, {"OC303", "CC3151", "CC3153", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"OC303", "CC3151", "CC3151", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"OC303", "CC3151", "HCA1", "60.00", "109.50", " ", " ", "pram, model compound 3(raman et al) HCA1 CC312C OC303"}, {"OC303", "CC3151", "CC3051", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"CC3051", "CC321", "OC301", "45.00", "106.00", " ", " ", "pram, model compound 2 OC301 CC321 CC312C"}, {"CC321", "OC301", "CC3051", "95.00", "112.20", " ", " ", "pram, modified based on KESTOS,CELGIJ,PEKHES(2) crystal simulations (from OMe-thf CC312C OC301 CC331) 2/15/2010"}, {"OC301", "CC3051", "OC3C51", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"OC301", "CC3051", "CC321", "75.70", "110.10", " ", " ", "OC311 CC3051 CC321"}, {"OC301", "CC3051", "CC3151", "45.00", "106.50", " ", " ", "OMe-thf OC301 CC312C CC322C"}, {"CC3153", "CC321", "OC301", "45.00", "106.00", " ", " ", "pram, model compound 2(raman et al) OC301 CC321 CC312C"}, {"CC3152", "OC301", "CC321", "95.00", "111.00", " ", " ", "CC3152 OC301 CC331"}, {"CC3161", "OC301", "CC3152", "50.00", "109.20", " ", " ", "CC311C OC301 CC311D, model compound 4"}, {"OC301", "CC3161", "CC3263", "45.00", "109.00", " ", " ", "from OC301 CC3161 CC3163"}, {"CC3162", "OC30P", "SC", "15.00", "109.00", "27.00", "1.90", "sairam"}, {"CC321", "OC301", "CC3062", "95.00", "109.70", " ", " ", "CC3162 OC301 CC321; mjyang"}, {"OC301", "CC312", "CC312", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"OC301", "CC312", "CC322", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"CC312", "OC301", "CC3062", "95.00", "109.70", " ", " ", "from CC3162 OC301 CC321"}, {"OC301", "CC312", "HCA1", "60.00", "109.50", " ", " ", "OC301 CC321 HCA2"}, {"OC301", "CC322", "HCA2", "60.00", "109.50", " ", " ", "OC301 CC321 HCA2"}, {"OC301", "CC322", "CC312", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"CC322", "OC301", "CC3062", "95.00", "109.70", " ", " ", "from CC3162 OC301 CC321"}, {"CC3162", "CC3161", "CC3261", "53.35", "111.00", "8.00", "2.561", "from CC3162 CC3161 CC3161"}, {"CC3161", "CC3261", "CC3161", "53.35", "111.00", "8.00", "2.561", "from CC3161 CC3161 CC3161"}, {"CC3261", "CC3161", "CC3163", "53.35", "111.00", "8.00", "2.561", "from CC3161 CC3161 CC3163"}, {"CC3261", "CC3161", "OC301", "75.70", "110.10", " ", " ", "CC3261 CC3161 OC311"}, {"CC331", "CC2O5", "OC301", "55.00", "109.00", "20.00", "2.3260", "CG331 CG2O2 OG302"}, {"CC331", "CC2O5", "OC2D1", "70.00", "125.00", "20.00", "2.4420", "CG331 CG2O2 OG2D1"}, {"CC2O5", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.1630", "CG2O2 CG331 HGA3"}, {"OC2D1", "CC2O5", "OC301", "90.00", "125.90", "160.00", "2.2576", "OG2D1 CG2O2 OG302"}, {"CC2O5", "OC301", "CC3161", "40.00", "109.60", "30.00", "2.2651", "CG2O2 OG302 CG311"}, {"OC2DP", "SC", "NC311", "85.00", "103.00", " ", " ", "SUFMA/B, xxwy"}, {"SC", "NC311", "HCP1", "48.00", "118.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3161", "NC311", "HCP1", "48.00", "111.00", " ", " ", "SUFMA/B, xxwy"}, {"SC", "NC311", "CC3161", "50.00", "113.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3161", "CC3161", "NC311", "52.00", "109.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3162", "CC3161", "NC311", "52.00", "109.00", " ", " ", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "HCA1", "36.00", "109.50", " ", " ", "SUFMA/B, xxwy"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_carb info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_carb_dihedrals[1354][8]= {{"CC312", "CC312", "CC312", "CC2O3", "0.02", "1", "180.0", "erh ketone, n=6 polyol"}, {"CC312", "CC312", "CC312", "CC2O3", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC2O3", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC2O3", "CC322", "0.02", "1", "180.0", "erh ketone, n=6 polyol"}, {"CC312", "CC312", "CC2O3", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O3", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC2O3", "CC312", "CC312", "OC311", "2.62", "1", "180.0", "erh ketone, fit psicose"}, {"CC2O3", "CC312", "CC312", "OC311", "0.28", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC312", "CC312", "OC311", "2.28", "3", "0.0", "C2-C3-C4-O4"}, {"CC312", "CC312", "CC2O3", "OC2D3", "2.06", "1", "0.0", "erh ketone, fit psicose"}, {"CC312", "CC312", "CC2O3", "OC2D3", "0.13", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O3", "OC2D3", "2.87", "3", "0.0", "C4-C3-C2-O2"}, {"CC312", "CC2O3", "CC322", "OC311", "2.94", "1", "0.0", "erh ketone, fit psicose"}, {"CC312", "CC2O3", "CC322", "OC311", "1.48", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC2O3", "CC322", "OC311", "0.50", "3", "180.0", "C3-C2-C1-O1"}, {"CC322", "CC2O3", "CC322", "OC311", "1.03", "1", "0.0", "erh ketone, fit psicose"}, {"CC322", "CC2O3", "CC322", "OC311", "2.44", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC2O3", "CC322", "OC311", "1.24", "3", "180.0", "C1-C2-C3-O3"}, {"CC322", "CC2O3", "CC312", "OC311", "1.03", "1", "0.0", "erh ketone, fit psicose"}, {"CC322", "CC2O3", "CC312", "OC311", "2.44", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC2O3", "CC312", "OC311", "1.24", "3", "180.0", "C1-C2-C3-O3"}, {"OC2D3", "CC2O3", "CC312", "OC311", "2.09", "1", "0.0", "erh ketone, fit psicose"}, {"OC2D3", "CC2O3", "CC312", "OC311", "0.17", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D3", "CC2O3", "CC312", "OC311", "2.15", "3", "180.0", "O2-C2-C3-O3"}, {"OC2D3", "CC2O3", "CC322", "OC311", "2.80", "1", "0.0", "erh ketone, fit psicose"}, {"OC2D3", "CC2O3", "CC322", "OC311", "0.75", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D3", "CC2O3", "CC322", "OC311", "0.32", "3", "180.0", "O2-C2-C1-O1"}, {"CC331", "CC2O3", "CC331", "HCA3", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC2O3", "CC312", "CC312", "HCA1", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC322", "CC2O3", "CC312", "HCA1", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC312", "CC2O3", "CC322", "HCA2", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC322", "CC2O3", "CC322", "HCA2", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC331", "HCA3", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC322", "HCA2", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC312", "HCA1", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh ketone, n=6 polyol"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C-C-O-H"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.35", "1", "0.0", "erh ketone, n=6 polyol"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.19", "3", "180.0", "C-C-O-H"}, {"CC312", "CC312", "CC312", "CC2O4", "0.02", "1", "180.0", "erh aldehyde, n=6 polyol"}, {"CC312", "CC312", "CC312", "CC2O4", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC2O4", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC2O4", "OC2D4", "0.17", "1", "180.0", "erh aldehyde, fit allose"}, {"CC312", "CC312", "CC2O4", "OC2D4", "0.26", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O4", "OC2D4", "1.04", "3", "180.0", "C3-C2-C1-O1"}, {"CC2O4", "CC312", "CC312", "OC311", "1.15", "1", "0.0", "erh aldehyde, fit allose"}, {"CC2O4", "CC312", "CC312", "OC311", "3.00", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O4", "CC312", "CC312", "OC311", "2.39", "3", "180.0", "C1-C2-C3-O3"}, {"OC2D4", "CC2O4", "CC312", "OC311", "0.56", "1", "180.0", "erh aldehyde, fit allose"}, {"OC2D4", "CC2O4", "CC312", "OC311", "1.60", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D4", "CC2O4", "CC312", "OC311", "0.93", "3", "0.0", "O1-C1-C2-O2"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.35", "1", "0.0", "erh aldehyde, n=6 polyol"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.19", "3", "180.0", "C-C-O-H"}, {"HCR1", "CC2O4", "CC331", "HCA3", "0.00", "3", "180.0", "acetaldehyde, adm"}, {"OC2D4", "CC2O4", "CC331", "HCA3", "0.20", "3", "180.0", "acetaldehyde, adm"}, {"CC312", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"CC2O4", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "aldehyde par22 X CT1 CT1 X"}, {"OC2D4", "CC2O4", "CC312", "HCA1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"OC311", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"CC3161", "CC3161", "CC3161", "CC3162", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3261", "CC3062", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3161", "CC3163", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3161", "CC3263", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3261", "CC3161", "CC3161", "CC3163", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3163", "CC321", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3261", "CC3062", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3163", "CC312", "CC312", "CC322", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC312", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC312", "CC322", "0.02", "1", "180.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC322", "CC312", "CC312", "CC322", "0.02", "1", "180.0", "erh glycerol, n=6 polyol"}, {"CC322", "CC312", "CC312", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC312", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC312", "CC312", "0.02", "1", "180.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "CC312", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC312", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC3161", "CC3161", "CC3161", "CC3161", "2.31", "3", "180.0", "erh fit inositol RIMP2/cc-pVTZ//MP2/631gd C1-C2-C3-C4"}, {"CC311C", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321C", "CC311C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321C", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC311C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC321C", "CC311C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC311C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC311D", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3162", "CC3163", "CC3161", "CC3161", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321", "CC311C", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X og preserve ring def energy"}, {"CC3161", "CC3161", "CC3162", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3261", "CC3062", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3163", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3263", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC312", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC321", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3161", "CC3261", "CC3062", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3162", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3062", "CC3261", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3163", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC312", "CC312", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3263", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC331", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC331", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "CC331 CC3163 CC3161 OC311, pram"}, {"CC2O2", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC2O2", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC302", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3162", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC321", "CC321", "OC301", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC322", "CC312", "CC312", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC322", "CC312", "CC312", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC312", "OC311", "2.79", "3", "180.0", "C1-C2-C3-O3"}, {"CC312", "CC312", "CC322", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC322", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC322", "OC311", "2.79", "3", "180.0", "C3-C2-C1-O1"}, {"CC312", "CC312", "CC312", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "OC311", "2.79", "3", "180.0", "C4-C3-C2-O2"}, {"CC322", "CC312", "CC322", "OC311", "0.35", "1", "0.0", "erh glycerol, n=6 polyol"}, {"CC322", "CC312", "CC322", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC322", "OC311", "2.79", "3", "180.0", "C1-C2-C3-O3"}, {"CC3161", "CC3163", "CC2O2", "OC2D2", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC311", "CC331", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC301", "CC331", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC3062", "CC3261", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"CC321C", "CC321C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC311C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC311C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC311C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC311D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC311C", "CC321C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC311C", "CC321C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"OC301", "CC311C", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321C", "CC321D", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC302", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC2D2", "CC2O2", "CC321", "CC331", "0.05", "6", "180.0", "par22 X CT2 CC X"}, {"CC321C", "CC311C", "CC321", "OC301", "1.10", "1", "180.0", "og compounds 11 and 12"}, {"CC321C", "CC311C", "CC321", "OC301", "0.07", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311C", "CC321", "OC301", "0.15", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3163", "CC321", "OC301", "0.50", "1", "180.0", "dpatel, modified"}, {"CC3161", "CC3163", "CC321", "OC301", "0.37", "2", "180.0", "LS fit"}, {"CC3161", "CC3163", "CC321", "OC301", "0.15", "3", "0.0", " "}, {"NC2D1", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"NC2D1", "CC3161", "CC3161", "CC3261", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3162", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3162", "OC3C61", "CC3263", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3163", "OC3C61", "CC3062", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3263", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC321", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC312", "CC3163", "OC3C61", "CC3062", "0.20", "3", "0.0", "og/sng thp"}, {"CC331", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC2O2", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC2O2", "CC3062", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC331", "OC301", "CC311", "CC331", "0.40", "1", "0.0", "par35"}, {"CC331", "OC301", "CC311", "CC331", "0.49", "3", "0.0", "CC33A CC32A OC30A CC33A"}, {"CC331", "OC301", "CC301", "CC331", "0.40", "1", "0.0", "par35"}, {"CC331", "OC301", "CC301", "CC331", "0.49", "3", "0.0", "CC33A CC32A OC30A CC33A"}, {"CC3162", "OC301", "CC321", "CC321", "0.40", "1", "0.0", "par35"}, {"CC3162", "OC301", "CC321", "CC321", "0.49", "3", "0.0", "CC33A CC32A OC30A CC32A"}, {"CC2O2", "CC301", "OC301", "CC331", "0.20", "3", "0.0", "og/sng thp CC321C CC321C OC3C61 CC321C"}, {"CC2O2", "CC311", "OC301", "CC331", "0.20", "3", "0.0", "og/sng thp CC321C CC321C OC3C61 CC321C"}, {"CC3261", "CC3062", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC311C", "CC321C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321D", "OC3C61", "CC311C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC311D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC311C", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311D", "OC301", "CC331", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "CC311D", "OC301", "CC331", "0.28", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC301", "CC331", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC331", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC3161", "CC3162", "OC301", "CC331", "0.28", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC331", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC321", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC3161", "CC3162", "OC301", "CC321", "0.28", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC321", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.73", "1", "0.0", "og THP-1-O-1-THP"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.61", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.00", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.73", "1", "0.0", "og THP-1-O-1-THP"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.61", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.00", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311D", "OC301", "CC311C", "0.41", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321C", "CC311D", "OC301", "CC311C", "0.66", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC301", "CC311C", "1.60", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC3161", "0.41", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "CC3162", "OC301", "CC3161", "0.66", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC3161", "1.60", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.25", "2", "180.0", "MCSA fit"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.25", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "OC3C61", "CC311C", "CC321", "0.284", "3", "0.0", "from CC321C OC3C61 CC311D HCA1"}, {"CC311C", "CC321", "OC301", "CC331", "0.64", "1", "180.0", "og compounds 11 and 12"}, {"CC311C", "CC321", "OC301", "CC331", "0.03", "2", "180.0", "MCSA fit"}, {"CC311C", "CC321", "OC301", "CC331", "0.61", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "CC321", "OC301", "CC3162", "0.64", "1", "180.0", "og compounds 11 and 12"}, {"CC3163", "CC321", "OC301", "CC3162", "0.03", "2", "180.0", "MCSA fit"}, {"CC3163", "CC321", "OC301", "CC3162", "0.61", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3161", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC311", "CC3161", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC311", "CC3161", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC311", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC311", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC311", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC302", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC302", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC302", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3161", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3161", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3162", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3161", "CC3162", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3161", "CC3162", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3162", "OC301", "0.59", "1", "180.0", "par35 OC30A CC32A CC32A OC30A"}, {"OC301", "CC3161", "CC3162", "OC301", "1.16", "2", "0.0", "og/rmv RESMOR and FABYOW10"}, {"OC311", "CC312", "CC322", "OC311", "1.34", "1", "180.0", "erh n=6 polyol"}, {"OC311", "CC312", "CC322", "OC311", "1.19", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC311", "CC312", "CC322", "OC311", "2.58", "3", "0.0", "O2-C2-C1-O1"}, {"OC311", "CC312", "CC312", "OC311", "1.34", "1", "180.0", "erh n=6 polyol"}, {"OC311", "CC312", "CC312", "OC311", "1.19", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC311", "CC312", "CC312", "OC311", "2.58", "3", "0.0", "O2-C2-C3-O3"}, {"OC301", "CC3161", "CC3162", "OC3C61", "2.75", "1", "180.0", "from"}, {"OC301", "CC3161", "CC3162", "OC3C61", "0.26", "2", "180.0", "OC311 CC3161 CC3162 OC3C61"}, {"OC301", "CC3161", "CC3162", "OC3C61", "0.10", "3", "0.0", " "}, {"OC301", "CC3161", "CC3163", "OC3C61", "1.36", "1", "180.0", "from"}, {"OC301", "CC3161", "CC3163", "OC3C61", "0.16", "2", "0.0", "OC311 CC3161 CC3163 OC3C61"}, {"OC301", "CC3161", "CC3163", "OC3C61", "1.01", "3", "0.0", " "}, {"OC2D2", "CC2O2", "CC311", "OC301", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC301", "CC301", "CC2O2", "OC2D2", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC3C61", "CC3163", "CC2O2", "OC2D2", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC3C61", "CC3062", "CC2O2", "OC2D2", "0.64", "2", "180.0", "from OC301 CC301 CC2O2 OC2D2"}, {"OC311", "CC301", "CC2O2", "OC2D2", "1.11", "2", "180.0", "og amol mp2/ccpvtz"}, {"OC311", "CC3062", "CC2O2", "OC2D2", "1.11", "2", "180.0", "from OC311 CC301 CC2O2 OC2D2"}, {"OC311M", "CC321", "CC321", "OC311M", "0.33", "1", "0.0", "og ethylene glycol combo_star"}, {"OC311M", "CC321", "CC321", "OC311M", "2.17", "2", "0.0", "*** ONLY for RESI EGLY ***"}, {"OC311M", "CC321", "CC321", "OC311M", "0.45", "3", "0.0", "use combo for all else"}, {"OC301", "CC311C", "CC321C", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321D", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC311C", "OC3C61", "1.93", "1", "180.0", "og compounds 11 and 12"}, {"OC301", "CC321", "CC311C", "OC3C61", "0.43", "2", "0.0", "MCSA fit"}, {"OC301", "CC321", "CC311C", "OC3C61", "0.12", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3163", "OC3C61", "1.4906", "1", "180.00", "modified by LS fitting"}, {"OC301", "CC321", "CC3163", "OC3C61", "0.3759", "2", "0.00", " "}, {"OC301", "CC321", "CC3163", "OC3C61", "0.5916", "3", "0.00", " "}, {"HCP1", "OC311", "CC3161", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC3162", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC321", "HCA2", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC322", "HCA2", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC312", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCA3", "CC331", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA2", "CC321", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA2", "CC321", "OC311M", "HCP1M", "0.18", "3", "0.0", "og methanol for egly"}, {"HCA1", "CC311", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA1", "CC3161", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3161", "CC3162", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3261", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3261", "CC3062", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3162", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC321", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3263", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA3", "CC331", "CC301", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3161", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3263", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3162", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC3261", "CC3062", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3162", "OC302", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC321", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA3", "CC331", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA3", "CC331", "CC311", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA3", "CC331", "CC301", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA2", "CC321", "CC321", "OC301", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA1", "CC311", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT1 CC X"}, {"HCA1", "CC3163", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT1 CC X"}, {"HCA3", "CC331", "CC2O1", "OC2D1", "0.00", "3", "180.0", "par22 O C CT3 HA"}, {"HCA2", "CC322", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC312", "CC322", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC312", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC321", "CC331", "HCA3", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC311", "CC331", "HCA3", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC321", "CC321", "HCA2", "0.14", "3", "0.0", "og ethanol"}, {"OC3C61", "CC321C", "CC321C", "HCA2", "0.16", "3", "0.0", "thp H-Cring-Cring-O"}, {"OC3C61", "CC321D", "CC321C", "HCA2", "0.16", "3", "0.0", "thp H-Cring-Cring-O"}, {"OC3C61", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311C", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC321D", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC302", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC3161", "CC3162", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC3161", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC321", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT2 CC X"}, {"HCA1", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"NC2D1", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"NC2D1", "CC2O1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 NH1 C CT3 HA"}, {"OC301", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC311", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC311", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC2D1", "CC2O1", "NC2D1", "CC311", "2.50", "2", "180.0", "par22 O C NH1 CT1"}, {"OC2D1", "CC2O1", "NC2D1", "CC3161", "2.50", "2", "180.0", "par22 O C NH1 CT1"}, {"OC2D1", "CC2O1", "NC2D1", "CC331", "2.50", "2", "180.0", "par22 O C NH1 CT3"}, {"CC311", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT1 NH1 C CT3"}, {"CC311", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC3161", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT1 NH1 C CT3"}, {"CC3161", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC331", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT3 NH1 C CT3"}, {"CC331", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC2O1", "NC2D1", "CC311", "CC331", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3162", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3161", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3163", "0.50", "1", "180.0", "og fit to IPAA"}, {"HCA1", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3263", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA1", "CC3163", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA2", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321D", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"HCA1", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "par22 X CT3 CD X"}, {"HCA1", "CC3162", "OC3C61", "CC3163", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3162", "OC3C61", "CC3263", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A;erh transferred by analogy"}, {"HCA1", "CC3163", "OC3C61", "CC3162", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3163", "OC3C61", "CC3062", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA2", "CC3263", "OC3C61", "CC3162", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A;erh transferred by analogy"}, {"HCA1", "CC311", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC301", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC331", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC331", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321D", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321D", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311C", "OC3C61", "CC321D", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321D", "OC3C61", "CC311C", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311C", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3161", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC302", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3162", "OC302", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC301", "CC311C", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3162", "OC301", "CC3161", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC311D", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC331", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC33A"}, {"HCA1", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3163", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3261", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3263", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC312", "CC322", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3162", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC312", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC3263", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3163", "CC321", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3261", "CC3062", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321", "CC311C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3062", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA3", "CC331", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC2O2", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC2O2", "CC301", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC312", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC322", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC321C", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC331", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC311C", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC311C", "CC321C", "CC321D", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC331", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321C", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321C", "CC321C", "CC321D", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321D", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC311D", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"CC2O2", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"HCP1", "NC2D1", "CC3161", "CC3161", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC3161", "CC3162", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC3161", "CC3163", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC311", "CC331", "0.00", "1", "0.00", "par22 H NH1 CT1 CT3"}, {"HCP1", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", "par22 H NH1 C CT3"}, {"HCP1", "NC2D1", "CC3161", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 H"}, {"HCP1", "NC2D1", "CC311", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 H"}, {"HCP1", "NC2D1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 HA CT3 NH1 H"}, {"HCP1", "NC2D1", "CC2O1", "OC2D1", "2.50", "2", "180.0", "par22 O C NH1 H"}, {"CC2O1", "NC2D1", "CC3161", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC311", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 HA CT3 NH1 C"}, {"CC312", "CC322", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC322", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC322", "OC311", "HCP1", "0.19", "3", "180.0", "C2-C1-O1-HO1"}, {"CC322", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC322", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C1-C2-O2-HO2"}, {"CC312", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C2-C3-O3-HO3"}, {"CC2O2", "CC301", "OC311", "HCP1", "0.82", "3", "180.0", "og amol mp2/ccpvtz"}, {"CC2O2", "CC3062", "OC311", "HCP1", "0.82", "3", "180.0", "from CC2O2 CC301 OC311 HCP1"}, {"HCP1", "OC311", "CC301", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311", "CC301", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311", "CC301", "CC331", "1.13", "1", "0.0", " "}, {"HCP1", "OC311M", "CC321", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311M", "CC321", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311M", "CC321", "CC331", "1.13", "1", "0.0", " "}, {"HCP1", "OC311M", "CC311", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311M", "CC311", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311M", "CC311", "CC331", "1.13", "1", "0.0", " "}, {"HCP1M", "OC311M", "CC321", "CC321", "0.40", "1", "180.0", "og ethylene glycol combo_star"}, {"HCP1M", "OC311M", "CC321", "CC321", "0.01", "2", "0.0", "*** NOT suitable for"}, {"HCP1M", "OC311M", "CC321", "CC321", "0.26", "3", "0.0", "*** HO-C-C-C- type alcohols"}, {"OC311", "CC301", "OC301", "CC331", "0.41", "1", "180.0", "from"}, {"OC311", "CC301", "OC301", "CC331", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"OC311", "CC301", "OC301", "CC331", "0.05", "3", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC301", "0.62", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "OC3C61", "CC311D", "OC301", "1.54", "2", "0.0", "MCSA fit"}, {"CC321C", "OC3C61", "CC311D", "OC301", "0.48", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "OC3C61", "CC311D", "OC302", "0.62", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "OC3C61", "CC311D", "OC302", "1.54", "2", "0.0", "MCSA fit"}, {"CC321C", "OC3C61", "CC311D", "OC302", "0.48", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.41", "1", "180.0", "og from"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.05", "3", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.41", "1", "180.0", "og from"}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.05", "3", "0.0", " "}, {"CC331", "OC301", "CC311D", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC331", "OC301", "CC311D", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC311D", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.53", "1", "0.0", "og THP-1-O-1-THP"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.74", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.53", "1", "0.0", "og THP-1-O-1-THP"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.74", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC311D", "OC3C61", "0.05", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC311C", "OC301", "CC311D", "OC3C61", "0.91", "2", "0.0", "MCSA fit"}, {"CC311C", "OC301", "CC311D", "OC3C61", "1.27", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3162", "OC3C61", "0.05", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "OC301", "CC3162", "OC3C61", "0.91", "2", "0.0", "MCSA fit"}, {"CC3161", "OC301", "CC3162", "OC3C61", "1.27", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"HCP1", "OC311", "CC301", "OC301", "1.55", "1", "0.0", "HCP1 OC311 CC3162 OC3C61"}, {"HCP1", "OC311", "CC301", "OC301", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC301", "OC301", "1.07", "3", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.55", "1", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.07", "3", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "2.75", "1", "180.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "0.26", "2", "180.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "0.10", "3", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.41", "1", "180.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "1.36", "1", "180.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "0.16", "2", "0.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "1.01", "3", "0.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.75", "1", "180.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.17", "2", "0.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.25", "3", "180.0", "og empirical lower barrier by 1.5 kcal"}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.05", "3", "0.0", " "}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.55", "1", "0.0", "from HCP1 OC311 CC3162 OC3C61"}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.07", "3", "0.0", " "}, {"CC3261", "CC3062", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3161 CC3162 OC311 HCP1"}, {"CC3261", "CC3062", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3261", "CC3062", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3163", "CC312", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3163 CC321 OC311 HCP1"}, {"CC3163", "CC312", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC312", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"OC311", "CC312", "CC3163", "OC3C61", "0.75", "1", "180.0", "from OC311 CC321 CC3163 OC3C61"}, {"OC311", "CC312", "CC3163", "OC3C61", "0.17", "2", "0.0", " "}, {"OC311", "CC312", "CC3163", "OC3C61", "0.25", "3", "180.0", " "}, {"CC3261", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3161 CC3161 OC311 HCP1"}, {"CC3261", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3261", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.41", "1", "180.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.89", "2", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "1.36", "1", "180.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "0.16", "2", "0.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "1.01", "3", "0.0", " "}, {"CC3161", "CC3161", "OC301", "CC3062", "0.13", "1", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC3062", "0.25", "2", "180.0", " "}, {"CC3161", "CC3161", "OC301", "CC3062", "0.06", "3", "180.0", " "}, {"CC3161", "OC301", "CC3062", "OC3C61", "0.05", "1", "180.0", "CC3161 OC301 CC3162 OC3C61"}, {"CC3161", "OC301", "CC3062", "OC3C61", "0.91", "2", "0.0", " "}, {"CC3161", "OC301", "CC3062", "OC3C61", "1.27", "3", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC3161", "0.41", "1", "180.0", "CC3161 CC3162 OC301 CC3161"}, {"CC3261", "CC3062", "OC301", "CC3161", "0.66", "2", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC3161", "1.60", "3", "0.0", " "}, {"CC3161", "OC301", "CC3062", "CC2O2", "0.284", "3", "0.0", "CC3161 OC301 CC3162 HCA1"}, {"CC3062", "OC301", "CC3161", "HCA1", "0.284", "3", "0.0", "CC3162 OC301 CC3161 HCA1"}, {"OC301", "CC3062", "CC2O2", "OC2D2", "0.64", "2", "180.0", "OC301 CC301 CC2O2 OC2D2"}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC301"}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.05", "3", "0.0", " "}, {"HCA2", "CC3261", "CC3062", "OC301", "0.20", "3", "0.0", "HCA1 CC3161 CC3162 OC301"}, {"CC3161", "CC3261", "CC3062", "OC301", "0.20", "3", "0.0", "CC3161 CC3161 CC3162 OC301"}, {"OC301", "CC3161", "CC3161", "OC301", "0.59", "1", "180.0", "OC301 CC3161 CC3162 OC301"}, {"OC301", "CC3161", "CC3161", "OC301", "1.16", "2", "0.0", " "}, {"CC3263", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "from CC3163 CC3161 OC301 CC3162"}, {"CC3263", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", " "}, {"CC3263", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", " "}, {"OC301", "CC3161", "CC3263", "HCA2", "0.20", "3", "0.0", "from OC301 CC3161 CC3163 HCA1"}, {"OC301", "CC3161", "CC3263", "OC3C61", "1.36", "1", "180.0", "from OC301 CC3161 CC3163 OC3C61"}, {"OC301", "CC3161", "CC3263", "OC3C61", "0.16", "2", "0.0", " "}, {"OC301", "CC3161", "CC3263", "OC3C61", "1.01", "3", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.41", "1", "180.0", "from CC3163 OC3C61 CC3162 OC301"}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.89", "2", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.05", "3", "0.0", " "}, {"HCA2C2", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"CC322C", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"OC3C5M", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "alkane, 4/98, yin and mackerell!from X-CCT2-CCT2-X thf viv"}, {"CC322C", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv"}, {"HCA2C2", "CC322C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv"}, {"OC3C5M", "CC322C", "CC322C", "CC322C", "0.00", "3", "0.0", "THF, 05/30/06, viv"}, {"CC322C", "CC322C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF, 05/30/06, viv"}, {"CC331", "CC312C", "CC312C", "CC331", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC331", "CC312C", "CC322C", "CC322C", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC331", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCA1C2", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"CC322C", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"OC3C5M", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"HCA1C2", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC322C", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC322C", "CC322C", "CC312C", "HCA1C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C5M", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC312C", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "alkane, 4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"CC312C", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "cpen viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv;"}, {"CC322C", "CC312C", "CC322C", "CC322C", "0.41", "3", "180.0", "cpen viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv;"}, {"HCA2C2", "CC322C", "OC3C5M", "CC312C", "0.30", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"HCA1C2", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"OC3C5M", "CC312C", "CC322C", "CC322C", "0.00", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC322C", "CC312C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC322C", "CC322C", "OC3C5M", "CC312C", "0.50", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC331", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv ! from TF2M viv"}, {"CC312C", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1C2", "CC312C", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"OC301", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC322C", "CC322C", "CC312C", "OC301", "0.20", "3", "0.0", "par27 X CTL2 CTL1 X"}, {"OC301", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv"}, {"CC322C", "CC312C", "OC301", "CC331", "0.21", "1", "180.0", "erh OMeTHF patch for model THF"}, {"CC322C", "CC312C", "OC301", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC322C", "CC312C", "OC301", "CC331", "0.74", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC312C", "OC3C5M", "0.08", "1", "0.0", "erh OMeTHF patch for model THF"}, {"CC331", "OC301", "CC312C", "OC3C5M", "0.76", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC312C", "OC3C5M", "1.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "OC311", "HCP1", "1.17", "1", "0.0", "erh aldopentose monosac"}, {"OC3C51", "CC3152", "OC311", "HCP1", "0.85", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3152", "OC311", "HCP1", "0.37", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "OC311", "HCP1", "0.90", "1", "0.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "OC311", "HCP1", "1.14", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3051", "OC311", "HCP1", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3051", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3051", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3153", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3152", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3051", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC311", "CC3152", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311; erh 3/08"}, {"OC311", "CC3151", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3151", "CC3153", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3163 CC3161 OC311"}, {"OC311", "CC3151", "CC3152", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3162 CC3161 OC311"}, {"OC311", "CC3151", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3161 OC311"}, {"OC311", "CC3152", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3162 OC311"}, {"OC311", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3162 OC311"}, {"OC311", "CC321", "CC3153", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3163 CC321 OC311"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.14", "1", "0.0", "erh aldopentose monosac"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.70", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "CC3151", "OC311", "1.26", "1", "180.0", "erh aldopentose monosac"}, {"OC3C51", "CC3152", "CC3151", "OC311", "1.27", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3152", "CC3151", "OC311", "0.53", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "CC3151", "OC311", "0.32", "1", "180.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "CC3151", "OC311", "0.65", "2", "180.0", "MCSA fit"}, {"OC3C51", "CC3051", "CC3151", "OC311", "2.62", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3153", "CC321", "OC311", "1.50", "1", "180.0", "erh aldopentose monosac"}, {"OC3C51", "CC3153", "CC321", "OC311", "0.58", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3153", "CC321", "OC311", "0.54", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "CC321", "OC311", "0.52", "1", "0.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "CC321", "OC311", "1.16", "2", "180.0", "MCSA fit"}, {"OC3C51", "CC3051", "CC321", "OC311", "0.33", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3152", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3152", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC311", "CC3152", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3151", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3151", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC311", "CC3151", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3152", "OC3C51", "CC3153", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3152", "OC3C51", "CC3153", "1.25", "2", "0.0", "MCSA fit"}, {"OC311", "CC3152", "OC3C51", "CC3153", "0.48", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "OC3C51", "CC3153", "0.19", "1", "180.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "OC3C51", "CC3153", "2.85", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "OC3C51", "CC3153", "0.86", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3251", "CC3151", "CC3153", "1.83", "3", "0.0", "erh deoxy aldopentose MCSA fit"}, {"CC3051", "CC3251", "CC3151", "CC3153", "1.83", "3", "0.0", "erh xfer from deoxyaldopentose"}, {"CC3152", "CC3151", "CC3151", "CC3153", "0.64", "3", "180.0", "erh aldopentose MCSA fit"}, {"CC3051", "CC3151", "CC3151", "CC3153", "2.37", "3", "0.0", "erh ketopentose MCSA fit"}, {"CC3251", "CC3151", "CC3153", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3153", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3051", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "CC3251", "CC3151", "OC311", "0.39", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3152", "CC3251", "CC3151", "OC311", "1.20", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3251", "CC3151", "OC311", "1.42", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3251", "CC3151", "OC311", "0.39", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3051", "CC3251", "CC3151", "OC311", "1.20", "2", "0.0", "transferred"}, {"CC3051", "CC3251", "CC3151", "OC311", "1.42", "3", "180.0", " "}, {"CC3153", "CC3151", "CC3151", "OC311", "0.01", "1", "180.0", "erh aldopentose monosac"}, {"CC3153", "CC3151", "CC3151", "OC311", "0.72", "2", "0.0", "MCSA fit"}, {"CC3153", "CC3151", "CC3151", "OC311", "0.73", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3151", "CC3151", "OC311", "0.81", "1", "180.0", "erh aldopentose monosac"}, {"CC3152", "CC3151", "CC3151", "OC311", "1.07", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3151", "CC3151", "OC311", "0.11", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.07", "1", "0.0", "erh ketopentose monosac"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.13", "2", "0.0", "MCSA fit"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.71", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.56", "1", "180.0", "erh deoxy aldopentose monosac"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.30", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.56", "1", "180.0", "erh deoxy aldopentose monosac"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.30", "2", "180.0", "transferred"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.35", "3", "180.0", " "}, {"CC3151", "CC3151", "CC3152", "OC311", "0.11", "1", "180.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "CC3152", "OC311", "0.66", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3152", "OC311", "0.02", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3051", "OC311", "2.23", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3151", "CC3051", "OC311", "3.00", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3051", "OC311", "0.88", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3153", "CC321", "OC311", "0.01", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3153", "CC321", "OC311", "0.14", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3153", "CC321", "OC311", "0.70", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3051", "CC321", "OC311", "1.59", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3051", "CC321", "OC311", "0.95", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3051", "CC321", "OC311", "1.95", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "CC3153", "CC3151", "OC311", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"CC321", "CC3153", "CC3151", "OC311", "0.40", "2", "180.0", "MCSA fit"}, {"CC321", "CC3153", "CC3151", "OC311", "0.40", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "CC3051", "CC3151", "OC311", "0.94", "1", "0.0", "erh ketopentose monosac"}, {"CC321", "CC3051", "CC3151", "OC311", "1.59", "2", "180.0", "MCSA fit"}, {"CC321", "CC3051", "CC3151", "OC311", "0.84", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3153", "OC3C51", "1.24", "3", "0.0", "erh aldopentose monosac MCSA"}, {"CC3151", "CC3151", "CC3152", "OC3C51", "1.24", "3", "0.0", "erh aldopentose monosac MCSA"}, {"CC3251", "CC3151", "CC3153", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3151", "CC3251", "CC3152", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3151", "CC3251", "CC3051", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose transfer"}, {"CC3151", "CC3151", "CC3051", "OC3C51", "0.62", "3", "0.0", "erh ketopentose monosac MCSA"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.38", "2", "0.0", "MCSA fit"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.13", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.38", "2", "0.0", "transferred"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.13", "3", "0.0", " "}, {"CC321", "CC3051", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC321", "CC3051", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC321", "CC3051", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.38", "2", "0.0", "MCSA fit"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.13", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC311", "HCP1", "0.12", "1", "0.0", "erh aldopentose monosac"}, {"CC3153", "CC321", "OC311", "HCP1", "0.42", "2", "0.0", "MCSA fit"}, {"CC3153", "CC321", "OC311", "HCP1", "0.29", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC321", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3051", "CC321", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3051", "CC321", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3051", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3251", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3151", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3152", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X erh 3/08"}, {"CC3151", "CC3051", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X erh 3/08"}, {"CC3153", "CC3151", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3153", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3051", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC321", "CC3153", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC321", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X erh3/08"}, {"CC321", "CC3051", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X erh3/08"}, {"CC3251", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "OC3C51", "CC3153", "CC3151", "1.00", "3", "0.0", "erh aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3152", "CC3151", "1.00", "3", "0.0", "erh aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3152", "CC3251", "0.45", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3051", "CC3151", "0.61", "3", "0.0", "erh ketopentose MCSA"}, {"CC3153", "OC3C51", "CC3051", "CC3251", "0.61", "3", "0.0", "erh from ketopentose"}, {"CC3051", "OC3C51", "CC3153", "CC3151", "0.43", "3", "0.0", "erh ketopentose MCSA"}, {"CC3152", "OC3C51", "CC3153", "CC321", "0.30", "3", "0.0", "TF2M par_carb CC331C CC322C OC3C5M CC322C"}, {"CC3051", "OC3C51", "CC3153", "CC321", "2.58", "1", "0.0", "erh ketopentose monosac"}, {"CC3051", "OC3C51", "CC3153", "CC321", "0.24", "2", "180.0", "MCSA fit"}, {"CC3051", "OC3C51", "CC3153", "CC321", "0.36", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "OC3C51", "CC3051", "CC321", "0.24", "1", "0.0", "erh ketopentose monosac"}, {"CC3153", "OC3C51", "CC3051", "CC321", "3.00", "2", "180.0", "MCSA fit"}, {"CC3153", "OC3C51", "CC3051", "CC321", "1.38", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC3C51", "CC3153", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"CC3051", "OC3C51", "CC3153", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"CC3153", "OC3C51", "CC3152", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"HCA1", "CC3152", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCA2", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"HCA1", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3151", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCP1", "OC311", "CC3152", "HCA1", "0.18", "3", "0.0", "methanol par_carb HCP1 OC311 CC3162 HCA1"}, {"HCP1", "OC311", "CC3151", "HCA1", "0.18", "3", "0.0", "methanol par_carb HCP1 OC311 CC3161 HCA1"}, {"OC301", "CC3152", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC301", "CC3152", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC301", "CC3152", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3152", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"OC301", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.11", "1", "180.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.66", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.02", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3051", "OC301", "2.23", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3151", "CC3051", "OC301", "3.00", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3051", "OC301", "0.88", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC3152", "OC3C51", "CC3153", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"OC301", "CC3152", "OC3C51", "CC3153", "1.25", "2", "0.0", "MCSA fit"}, {"OC301", "CC3152", "OC3C51", "CC3153", "0.48", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "OC3C51", "CC3051", "OC301", "0.19", "1", "180.0", "erh ketopentose monosac"}, {"CC3153", "OC3C51", "CC3051", "OC301", "2.85", "2", "180.0", "MCSA fit"}, {"CC3153", "OC3C51", "CC3051", "OC301", "0.86", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3152", "OC301", "CC331", "0.21", "1", "180.0", "erh OMeTHF patch for model THF"}, {"CC3151", "CC3152", "OC301", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3152", "OC301", "CC331", "0.74", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC3152", "OC3C51", "0.08", "1", "0.0", "erh OMeTHF patch for model THF"}, {"CC331", "OC301", "CC3152", "OC3C51", "0.76", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC3152", "OC3C51", "1.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC3161", "CC3162", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC3161", "CC3161", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC321C", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC311D", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"HCA1", "CC311D", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"HCA1", "CC3161", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"HCA1", "CC3162", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"OC3C61", "CC311D", "OC30P", "PC", "0.38", "2", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "PC", "0.41", "3", "180.0", " "}, {"OC3C61", "CC3162", "OC30P", "PC", "0.38", "2", "0.0", " "}, {"OC3C61", "CC3162", "OC30P", "PC", "0.41", "3", "180.0", " "}, {"HCA1", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC321D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2"}, {"CC311D", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC311D", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"OC3C61", "CC311D", "CC311D", "CC321C", "0.31", "3", "180.0", "og/sng thp"}, {"OC3C61", "CC321D", "CC311D", "CC321C", "0.31", "3", "180.0", "og/sng thp"}, {"CC311D", "CC311D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC311D", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"HCA1", "CC3161", "CC3162", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3162", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311D", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321C", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321D", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321", "OC30P", "0.00", "6", "180.00", " "}, {"HCA1", "CC3163", "CC321", "OC30P", "0.00", "6", "180.00", " "}, {"CC321C", "CC311C", "CC321", "OC30P", "0.43", "3", "0.0", " "}, {"CC3161", "CC3163", "CC321", "OC30P", "0.43", "3", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "1.76", "1", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "2.56", "2", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "1.76", "1", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "2.56", "2", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "0.01", "3", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "1.76", "1", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "2.56", "2", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC30P", "2.44", "3", "180.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC30P", "2.44", "3", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC30P", "1.27", "3", "0.0", " "}, {"OC30P", "CC311D", "CC311D", "OC30P", "1.27", "3", "0.0", " "}, {"OC3C61", "CC311D", "CC311D", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC321D", "CC311D", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC3162", "CC3161", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC3163", "CC3161", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.06", "1", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.78", "2", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.74", "3", "180.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.06", "1", "0.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.78", "2", "0.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.74", "3", "180.0", " "}, {"CC3161", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC3162", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC311D", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC311D", "OC30P", "PC", "OC312", "1.45", "2", "0.0", " "}, {"OC312", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"OC30P", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"OC2DP", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"CC3161", "OC30P", "PC", "OC312", "1.45", "2", "0.0", "OC30P PC OC312 1.45 2 0.0"}, {"CC3162", "OC30P", "PC", "OC312", "1.45", "2", "0.0", " "}, {"CC321C", "CC311D", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3162", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3163", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3161", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"HCA1", "CC311D", "OC30P", "SC", "0.00", "3", "0.00", "methylsulfate"}, {"HCA1", "CC3161", "OC30P", "SC", "0.00", "3", "0.00", "methylsulfate"}, {"HCA2", "CC321", "OC30P", "SC", "0.284", "3", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.76", "1", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.68", "2", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.26", "3", "180.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "1.41", "1", "180.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "0.40", "2", "0.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "0.21", "3", "180.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "1.41", "1", "180.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "0.40", "2", "0.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "0.21", "3", "180.0", " "}, {"CC3161", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC311D", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC321", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC321", "CC3163", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "OMeTHP CC331 OC301 CC311D HCA1"}, {"OC301", "CC321", "CC331", "HCA3", "0.20", "3", "0.0", "OC301 CC321 CC3163 HCA1"}, {"CC311D", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "OMeTHP CC311D OC301 CC331 HCA3"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.36", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.52", "2", "0.0", "MCSA fit"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.83", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC301", "CC321", "CC331", "0.72", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC311D", "OC301", "CC321", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC311D", "OC301", "CC321", "CC331", "0.12", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC311D", "CC321C", "0.58", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC321", "OC301", "CC311D", "CC321C", "0.69", "2", "180.0", "MCSA fit"}, {"CC321", "OC301", "CC311D", "CC321C", "1.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "CC322C", "CC312D", "OC301", "1.98", "1", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC301", "2.56", "2", "0.0", "MCSA fit"}, {"CC322C", "CC322C", "CC312D", "OC301", "1.80", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "1.88", "1", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "2.18", "2", "0.0", "MCSA fit"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "0.24", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "CC312D", "OC301", "CC331", "0.97", "1", "180.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "CC312D", "OC301", "CC331", "0.44", "3", "180.0", "MCSA fit"}, {"CC331", "OC301", "CC312D", "OC3C5M", "0.98", "2", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC331", "OC301", "CC312D", "OC3C5M", "1.50", "3", "0.0", "MCSA fit"}, {"CC312D", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "OMe-THF CC312C OC301 CC331 HCA3"}, {"HCA1", "CC312D", "OC301", "CC331", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"OC301", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OMe-THF OC301 CC312C CC322C HCA2C2"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.21", "1", "0.0", "pram model compound 1 (raman et al)"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.86", "2", "0.0", "MCSA fit"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "0.70", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "1.41", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC312D", "CC322C", "1.23", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC311D", "OC302", "CC312D", "CC322C", "0.15", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC312D", "CC322C", "0.54", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.18", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.45", "2", "180.0", "MCSA fit"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312D", "OC302", "CC311D", "HCA1", "0.284", "3", "0.0", "CC311D OC302 CC311D HCA1"}, {"CC322C", "CC322C", "CC312D", "OC302", "1.98", "1", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC302", "2.56", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC302", "1.80", "3", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "1.88", "1", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "2.18", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "0.24", "3", "0.0", "pram model compound 5 (raman et al)"}, {"OC302", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OMe-THF OC301 CC312C CC322C HCA2C2"}, {"OC3C5M", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "THF w/me OC3C5M CC312C CC322C HCA2C2"}, {"OC3C5M", "CC312D", "CC322C", "CC322C", "0.00", "3", "0.0", "THF w/me OC3C5M CC312C CC322C CC322C"}, {"CC322C", "CC322C", "OC3C5M", "CC312D", "0.50", "3", "0.0", "THF w/me CC322C CC322C OC3C5M CC322C"}, {"CC312D", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "THF w/me CC312C CC322C CC322C HCA2C2"}, {"CC312D", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "THF w/me CC312C CC322C CC322C CC322C"}, {"HCA1", "CC312D", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF w/me HCA1C2 CC312C OC3C5M CC322C"}, {"HCA1", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC322C HCA2C2"}, {"CC322C", "CC322C", "CC312D", "HCA1", "0.20", "3", "0.0", "THF w/me CC322C CC322C CC312C HCA1C2"}, {"CC322C", "CC312D", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF w/me CC322C CC312C OC3C5M CC322C"}, {"HCA1", "CC312D", "OC302", "CC311D", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"HCA2C2", "CC322C", "OC3C5M", "CC312D", "0.30", "3", "0.0", "THF w/me HCA2C2 CC322C OC3C5M CC312C"}, {"OC3C5M", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "COCA-THP2 OC3C61 CC311C CC321 HCA2"}, {"HCA1", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF w/me HCA1C2 CC312C OC3C5M CC322C"}, {"CC322C", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF w/me CC322C CC322C CC312C HCA1C2"}, {"CC322C", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "THF w/me CC322C CC312C CC331 HCA3"}, {"HCA2C2", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC322C HCA2C2"}, {"HCA2C2", "CC322C", "CC312C", "CC321", "0.20", "3", "0.0", "THF w/me CC331 CC312C CC322C HCA2C2"}, {"HCA1", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC331 HCA3"}, {"HCA1", "CC312C", "CC321", "OC301", "0.20", "3", "0.0", "OC301 CC321 CC3163 HCA1"}, {"CC321", "CC312C", "OC3C5M", "CC322C", "1.17", "3", "180.0", "pram 11/2009, model comp2 (raman et al)"}, {"CC321", "CC312C", "CC322C", "CC322C", "1.92", "3", "180.0", "MCSA fit to (psi=-180 1-D MP2/cc-pVTZ//MP2/6-31G*)"}, {"OC301", "CC321", "CC312C", "OC3C5M", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC301", "CC321", "CC312C", "OC3C5M", "0.43", "2", "0.0", " "}, {"OC301", "CC321", "CC312C", "OC3C5M", "0.12", "3", "180.0", " "}, {"CC322C", "CC312C", "CC321", "OC301", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"CC322C", "CC312C", "CC321", "OC301", "0.07", "2", "180.0", " "}, {"CC322C", "CC312C", "CC321", "OC301", "0.15", "3", "0.0", " "}, {"CC312C", "CC321", "OC301", "CC331", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC312C", "CC321", "OC301", "CC331", "0.03", "2", "180.0", " "}, {"CC312C", "CC321", "OC301", "CC331", "0.61", "3", "0.0", " "}, {"CC322C", "CC312C", "OC303", "CC331", "0.41", "1", "180.0", "pram model compound 6 (raman et al)"}, {"CC322C", "CC312C", "OC303", "CC331", "0.29", "2", "0.0", "MCSA fit"}, {"CC322C", "CC312C", "OC303", "CC331", "0.42", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "0.73", "1", "0.0", "pram model compound 6 (raman et al)"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "2.96", "2", "0.0", "MCSA fit"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "1.39", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312C", "OC303", "CC331", "HCA3", "0.284", "3", "0.0", "CC312C OC301 CC331 HCA3"}, {"HCA1", "CC312C", "OC303", "CC331", "0.284", "3", "0.0", "THF w/me HCA1C2 CC312C OC301 CC331"}, {"CC322C", "CC322C", "CC312C", "OC303", "0.20", "3", "0.0", "CC322C CC322C CC312C OC301"}, {"OC3C5M", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF OC3C5M CC312C CC322C HCA2C2"}, {"CC312C", "CC322C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF CC322C CC322C OC3C5M CC322C"}, {"OC3C5M", "CC322C", "CC312C", "CC322C", "0.00", "3", "0.0", "THF OC3C5M CC322C CC322C CC322C"}, {"OC3C5M", "CC322C", "CC322C", "CC312C", "0.00", "3", "0.0", "THF OC3C5M CC322C CC322C CC322C"}, {"HCA1", "CC312C", "OC303", "CC311D", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"CC312C", "OC303", "CC311D", "HCA1", "0.284", "3", "0.0", "CC311D OC302 CC311D HCA1"}, {"OC303", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "OC301 CC311D CC321C CC321C"}, {"OC303", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "OC301 CC311D CC321C HCA2"}, {"CC321C", "OC3C61", "CC311D", "OC303", "0.62", "1", "0.0", "CC321C OC3C61 CC311D OC301"}, {"CC321C", "OC3C61", "CC311D", "OC303", "1.54", "2", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC303", "0.48", "3", "0.0", " "}, {"OC303", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OC301 CC312C CC322C HCA2C2"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.08", "1", "0.0", "pram model compound 3 (raman et al)"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.93", "2", "0.0", "MCSA fit"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.05", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.05", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.38", "2", "180.0", "MCSA fit"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.36", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.04", "2", "0.0", "MCSA fit"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA1", "CC312D", "OC301", "CC311C", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"CC312D", "OC301", "CC311C", "HCA1", "0.284", "3", "0.0", "CC311D OC301 CC311C HCA1"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.03", "2", "180.0", "MCSA fit"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "0.52", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "1.50", "2", "0.0", "MCSA fit"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "0.98", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC312D", "CC322C", "1.19", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC311C", "OC301", "CC312D", "CC322C", "0.16", "2", "180.0", "MCSA fit"}, {"CC311C", "OC301", "CC312D", "CC322C", "0.49", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.21", "1", "0.0", "pram model compound 1 (raman et al)"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.86", "2", "0.0", "MCSA fit"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3051", "OC3C51", "0.70", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3162", "OC302", "CC3051", "OC3C51", "1.41", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3051", "OC3C51", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3051", "CC3151", "1.23", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3162", "OC302", "CC3051", "CC3151", "0.15", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3051", "CC3151", "0.54", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.18", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.45", "2", "180.0", "MCSA fit"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC302", "CC3051", "OC3C51", "CC3153", "0.19", "1", "180.0", "OC311 CC3051 OC3C51 CC3153 BFRU"}, {"OC302", "CC3051", "OC3C51", "CC3153", "2.85", "2", "180.0", " "}, {"OC302", "CC3051", "OC3C51", "CC3153", "0.86", "3", "0.0", " "}, {"CC3151", "CC3151", "CC3051", "OC302", "2.23", "1", "0.0", "CC3151 CC3151 CC3051 OC311"}, {"CC3151", "CC3151", "CC3051", "OC302", "3.00", "2", "0.0", " "}, {"CC3151", "CC3151", "CC3051", "OC302", "0.88", "3", "180.0", " "}, {"OC302", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "OC311 CC3051 CC321 HCA2"}, {"OC302", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3051 CC3151 HCA1"}, {"OC302", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311"}, {"OC302", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", " "}, {"OC302", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311"}, {"OC302", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", " "}, {"CC3051", "OC302", "CC3162", "HCA1", "0.284", "3", "0.0", "CC3162 OC302 CC3162 HCA1"}, {"CC321", "CC3051", "OC302", "CC3162", "0.40", "1", "180.0", "CC321 CC3051 OC311 HCP1 Fructose"}, {"CC321", "CC3051", "OC302", "CC3162", "0.48", "2", "0.0", " "}, {"CC321", "CC3051", "OC302", "CC3162", "0.19", "3", "0.0", " "}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.08", "1", "0.0", "pram model compound 3 (raman et al)"}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.93", "2", "0.0", "MCSA fit"}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.05", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.05", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.38", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.36", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3162", "OC303", "CC3151", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC301"}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.05", "3", "0.0", " "}, {"OC303", "CC3162", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC303", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "OC301 CC3162 CC3161 OC311"}, {"OC303", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC303", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"CC3161", "CC3161", "CC3162", "OC303", "0.20", "3", "0.0", "CC3161 CC3161 CC3162 OC301"}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.14", "1", "0.0", "OC3C51 CC3153 CC3151 OC311"}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.70", "2", "0.0", " "}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.18", "3", "0.0", " "}, {"CC3051", "CC3151", "CC3151", "OC303", "2.07", "1", "0.0", "CC3051 CC3151 CC3151 OC311"}, {"CC3051", "CC3151", "CC3151", "OC303", "2.13", "2", "0.0", " "}, {"CC3051", "CC3151", "CC3151", "OC303", "2.71", "3", "180.0", " "}, {"CC321", "CC3153", "CC3151", "OC303", "0.76", "1", "180.0", "CC321 CC3153 CC3151 OC311"}, {"CC321", "CC3153", "CC3151", "OC303", "0.40", "2", "180.0", " "}, {"CC321", "CC3153", "CC3151", "OC303", "0.40", "3", "180.0", " "}, {"OC303", "CC3151", "CC3151", "OC311", "2.87", "1", "180.0", "OC311 CC3151 CC3151 OC311"}, {"OC303", "CC3151", "CC3151", "OC311", "0.03", "2", "0.0", " "}, {"OC303", "CC3151", "CC3151", "OC311", "0.23", "3", "0.0", " "}, {"OC303", "CC3151", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3151 CC3151 HCA1"}, {"OC303", "CC3151", "CC3153", "HCA1", "0.14", "3", "0.0", "OC311 CC3151 CC3153 HCA1"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC302", "CC3051", "CC3151", "OC303", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311"}, {"OC302", "CC3051", "CC3151", "OC303", "1.87", "2", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC303", "1.64", "3", "180.0", " "}, {"OC3C51", "CC3051", "CC3151", "OC303", "0.32", "1", "180.0", "OC3C51 CC3051 CC3151 OC311, ketopentose monosac"}, {"OC3C51", "CC3051", "CC3151", "OC303", "0.65", "2", "180.0", " "}, {"OC3C51", "CC3051", "CC3151", "OC303", "2.62", "3", "0.0", " "}, {"CC3153", "CC3151", "CC3151", "OC303", "0.01", "1", "180.0", "CC3153 CC3151 CC3151 OC311, aldopentose monosac"}, {"CC3153", "CC3151", "CC3151", "OC303", "0.72", "2", "0.0", " "}, {"CC3153", "CC3151", "CC3151", "OC303", "0.73", "3", "0.0", " "}, {"CC321", "CC3051", "CC3151", "OC303", "0.94", "1", "0.0", "CC321 CC3051 CC3151 OC311, ketopentose monosac"}, {"CC321", "CC3051", "CC3151", "OC303", "1.59", "2", "180.0", " "}, {"CC321", "CC3051", "CC3151", "OC303", "0.84", "3", "0.0", " "}, {"OC302", "CC3051", "CC321", "OC301", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC302", "CC3051", "CC321", "OC301", "1.99", "2", "180.0", " "}, {"OC302", "CC3051", "CC321", "OC301", "1.72", "3", "180.0", " "}, {"CC321", "OC301", "CC3051", "OC3C51", "0.98", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3051", "OC3C51", "1.50", "3", "0.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3051", "CC3151", "0.97", "1", "180.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3051", "CC3151", "0.44", "3", "180.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA2", "CC321", "OC301", "CC3051", "0.284", "3", "0.0", "OMe-THF CC312D OC301 CC331 HCA3"}, {"CC321", "OC301", "CC3051", "CC321", "0.40", "1", "180.0", "CC321 CC3051 OC311 HCP1, ketopentose monosac"}, {"CC321", "OC301", "CC3051", "CC321", "0.48", "2", "0.0", " "}, {"CC321", "OC301", "CC3051", "CC321", "0.19", "3", "0.0", " "}, {"OC301", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "OC311 CC3051 CC321 HCA2"}, {"OC301", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3051 CC3151 HCA1"}, {"OC301", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", " "}, {"OC301", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", " "}, {"OC301", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", " "}, {"OC301", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", " "}, {"OC3C51", "CC3051", "CC321", "OC301", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC3C51", "CC3051", "CC321", "OC301", "0.43", "2", "0.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC3C51", "CC3051", "CC321", "OC301", "0.12", "3", "180.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3051", "CC3151", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"OC301", "CC321", "CC3051", "CC3151", "0.07", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC301", "CC321", "CC3051", "CC3151", "0.15", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC321", "OC301", "CC3051", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331, validated by mc2 scan"}, {"CC3051", "CC321", "OC301", "CC3051", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3051", "CC321", "OC301", "CC3051", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3153", "CC321", "OC301", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC3C51", "CC3153", "CC321", "OC301", "0.43", "2", "0.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC3C51", "CC3153", "CC321", "OC301", "0.12", "3", "180.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3051", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC3153", "CC321", "OC301", "CC3051", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3051", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3153", "HCA1", "0.14", "3", "0.0", "OC311 CC321 CC3153 HCA1"}, {"OC301", "CC321", "CC3153", "CC3151", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"OC301", "CC321", "CC3153", "CC3151", "0.07", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC301", "CC321", "CC3153", "CC3151", "0.15", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3162", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331, validated by mc2 scan"}, {"CC3153", "CC321", "OC301", "CC3162", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3162", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC3051", "CC321", "OC301", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC321", "OC301", "1.99", "2", "180.0", " "}, {"OC301", "CC3051", "CC321", "OC301", "1.72", "3", "180.0", " "}, {"CC321", "OC301", "CC3152", "OC3C51", "0.98", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3152", "OC3C51", "1.50", "3", "0.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3152", "CC3151", "0.97", "1", "180.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3152", "CC3151", "0.44", "3", "180.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3152", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC3153", "CC321", "OC301", "CC3152", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3152", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA2", "CC321", "OC301", "CC3152", "0.284", "3", "0.0", "OMe-THF CC312D OC301 CC331 HCA3"}, {"HCA1", "CC3152", "OC301", "CC321", "0.284", "3", "0.0", "HCA1 CC3152 OC301 CC331"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.03", "2", "180.0", "MCSA fit"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.03", "2", "180.0", "MCSA fit"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "OC3C51", "0.52", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3161", "OC301", "CC3152", "OC3C51", "1.50", "2", "0.0", "MCSA fit"}, {"CC3161", "OC301", "CC3152", "OC3C51", "0.98", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "CC3151", "1.19", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3161", "OC301", "CC3152", "CC3151", "0.16", "2", "180.0", "MCSA fit"}, {"CC3161", "OC301", "CC3152", "CC3151", "0.49", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "HCA1", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"HCA1", "CC3161", "OC301", "CC3152", "0.284", "3", "0.0", "CC311D OC301 CC311C HCA1"}, {"CC3263", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "CC3263 CC3161 CC3161 OC311"}, {"CC3162", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", "CC3161 OC30P SC OC2DP 0.17 3 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.76", "1", "0.0", "OC3C61 CC311D OC30P SC 0.76 1 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.68", "2", "0.0", "OC3C61 CC311D OC30P SC 0.68 2 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.26", "3", "180.0", "OC3C61 CC311D OC30P SC 0.26 3 180.0"}, {"SC", "OC30P", "CC3162", "CC3161", "0.21", "3", "0.0", "CC3162 CC3161 OC30P SC 0.21 3 0.0"}, {"SC", "OC30P", "CC3162", "HCA1", "0.00", "3", "0.0", "HCA1 CC3161 OC30P SC 0.00 3 0.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.50", "1", "180.0", "OC30P CC3162 CC3161 OC311 2.50 1 180.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.00", "2", "0.0", "OC30P CC3162 CC3161 OC311 2.00 2 0.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.50", "3", "0.0", "OC30P CC3162 CC3161 OC311 2.50 3 0.0"}, {"CC3062", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "from CC3162 OC301 CC321 HCA2"}, {"CC321", "OC301", "CC3062", "OC3C61", "0.14", "1", "0.0", "from CC321 OC301 CC3162 OC3C61"}, {"CC321", "OC301", "CC3062", "OC3C61", "0.97", "2", "0.0", " "}, {"CC321", "OC301", "CC3062", "OC3C61", "0.11", "3", "180.0", " "}, {"CC3163", "CC321", "OC301", "CC3062", "0.64", "1", "180.0", "from CC3163 CC321 OC301 CC3162"}, {"CC3163", "CC321", "OC301", "CC3062", "0.03", "2", "180.0", " "}, {"CC3163", "CC321", "OC301", "CC3062", "0.61", "3", "0.0", " "}, {"CC3261", "CC3062", "OC301", "CC321", "0.22", "1", "0.0", "from C3161 CC3162 OC301 CC321"}, {"CC3261", "CC3062", "OC301", "CC321", "0.28", "2", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC321", "0.89", "3", "0.0", " "}, {"CC321", "OC301", "CC3062", "CC2O2", "0.284", "3", "0.0", "from CC3161 OC301 CC3062 CC2O2"}, {"OC3C61", "CC3062", "OC301", "CC312", "1.3464", "1", "0.00", "RMSE = 1.59697"}, {"OC3C61", "CC3062", "OC301", "CC312", "3.0743", "2", "0.00", "RMSE = 1.59697"}, {"OC3C61", "CC3062", "OC301", "CC312", "0.8378", "3", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "3.0937", "1", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "0.7096", "2", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "0.0245", "3", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.7749", "1", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.5713", "2", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.8214", "3", "0.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "4.2905", "1", "180.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "0.4831", "2", "180.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "0.0488", "3", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "1.7164", "1", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "0.3973", "2", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "1.9793", "3", "0.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "0.2524", "1", "180.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "0.4587", "2", "0.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "1.1807", "3", "180.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.1671", "1", "180.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.5207", "2", "0.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.0160", "3", "180.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.5334", "1", "180.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.5933", "2", "0.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.3811", "3", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "HCA1", "0.1400", "3", "0.00", "from HCA1 CC312 CC312 OC311"}, {"HCA1", "CC312", "OC301", "CC3062", "0.2840", "3", "0.00", "from CC3162 OC301 CC321 HCA2"}, {"OC301", "CC312", "CC322", "HCA2", "0.1400", "3", "0.00", "from HCA2 CC322 CC312 OC311"}, {"OC3C61", "CC3062", "OC301", "CC322", "2.1018", "1", "0.00", "RMSE = 1.5934"}, {"OC3C61", "CC3062", "OC301", "CC322", "1.4102", "2", "0.00", "RMSE = 1.5934"}, {"OC3C61", "CC3062", "OC301", "CC322", "0.4570", "3", "0.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "2.5455", "1", "180.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "0.7918", "2", "180.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "0.9628", "3", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "3.3150", "1", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "1.6828", "2", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "2.9534", "3", "180.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "0.5927", "1", "0.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "1.2961", "2", "180.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "2.1767", "3", "0.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.4128", "1", "180.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.2875", "2", "180.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.0685", "3", "0.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.3336", "1", "180.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.0342", "2", "0.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.7301", "3", "180.00", "RMSE = 1.5934"}, {"OC301", "CC322", "CC312", "HCA1", "0.1400", "3", "0.0", "from HCA1 CC312 CC312 OC311"}, {"HCA2", "CC322", "OC301", "CC3062", "0.2840", "3", "0.0", "from CC3162 OC301 CC321 HCA2"}, {"HCA1", "CC3162", "CC3161", "CC3261", "0.20", "3", "0.0", "from HCA1 CC3162 CC3161 CC3161"}, {"HCA2", "CC3261", "CC3161", "CC3162", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3162"}, {"CC3161", "CC3261", "CC3161", "CC3162", "0.19", "3", "180.0", "from CC3161 CC3161 CC3161 CC3162"}, {"CC3261", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "from CC3161 CC3161 CC3163 CC331"}, {"CC3161", "CC3261", "CC3161", "CC3163", "0.19", "3", "180.0", "from CC3161 CC3161 CC3161 CC3163"}, {"HCA2", "CC3261", "CC3161", "CC3163", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3163"}, {"HCA1", "CC3163", "CC3161", "CC3261", "0.20", "3", "0.0", "from HCA1 CC3163 CC3161 CC3161"}, {"HCA1", "CC3161", "CC3261", "CC3161", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3161"}, {"CC3161", "CC3261", "CC3161", "OC311", "0.20", "3", "0.0", "from CC3161 CC3161 CC3161 OC311"}, {"CC3261", "CC3161", "CC3163", "OC3C61", "0.31", "3", "180.0", "from CC3161 CC3161 CC3163 OC3C61"}, {"CC3261", "CC3161", "CC3162", "OC3C61", "0.31", "3", "180.0", "from CC3161 CC3161 CC3162 OC3C61"}, {"CC3261", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "from CC3161 CC3161 CC3162 OC311"}, {"CC3261", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "from CC3161 CC3161 CC3162 OC301"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.1300", "1", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.2500", "2", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.0600", "3", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3261", "CC3161", "OC301", "CC2O5", "1.0150", "1", "180.0", "RMSE = 2.28686"}, {"CC3261", "CC3161", "OC301", "CC2O5", "0.4550", "2", "0.0", "RMSE = 2.28686"}, {"CC3261", "CC3161", "OC301", "CC2O5", "1.0330", "3", "180.0", "RMSE = 2.28686"}, {"OC2D1", "CC2O5", "CC331", "HCA3", "0.0000", "6", "180.0", "OG2D1 CG2O2 CG331 HGA3"}, {"OC301", "CC2O5", "CC331", "HCA3", "0.0000", "6", "180.0", "OG302 CG2O2 CG331 HGA3"}, {"HCA2", "CC3261", "CC3161", "OC301", "0.1400", "3", "0.0", "HCA2 CC3261 CC3161 OC311"}, {"HCA1", "CC3161", "OC301", "CC2O5", "0.0000", "3", "0.0", "HGA1 CG311 OG302 CG2O2"}, {"CC3161", "OC301", "CC2O5", "OC2D1", "0.9650", "1", "180.0", "OG2D1 CG2O2 OG302 CG301"}, {"CC3161", "OC301", "CC2O5", "OC2D1", "3.8500", "2", "180.0", "OG2D1 CG2O2 OG302 CG301"}, {"CC3161", "OC301", "CC2O5", "CC331", "2.0500", "2", "180.0", "CG311 CG2O2 OG302 CG331"}, {"CC3161", "CC3261", "CC3161", "OC301", "0.2000", "3", "0.0", "from CC3161 CC3161 CC3161 OC311"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.1300", "1", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.2500", "2", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.0600", "3", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"SC", "NC311", "CC3161", "HCA1", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "HCA1", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "CC3161", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "CC3162", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC3C61", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "HCA1", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC30P", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"OC2DP", "SC", "NC311", "HCP1", "0.25", "3", "0.0", "SUFMA/B, xxwy"}, {"CC3161", "NC311", "SC", "OC2DP", "0.153", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}, {"CC3161", "CC3161", "NC311", "SC", "0.161", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}, {"CC3162", "CC3161", "NC311", "SC", "0.161", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_carb info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_carb_impropers[14][8]= {{"CC2O1", "CC331", "NC2D1", "OC2D1", "120.00", "0", "0.00", "par22 O X X C"}, {"NC2D1", "CC2O1", "CC3161", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"NC2D1", "CC2O1", "CC3062", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"CC2O2", "CC311", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC301", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC3163", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC3062", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC321", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"NC2D1", "CC2O1", "CC331", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"NC2D1", "CC2O1", "CC311", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"CC2O4", "CC331", "OC2D4", "HCR1", "50.00", "0", "0.00", "acetaldehyde adm"}, {"CC2O4", "CC312", "OC2D4", "HCR1", "50.00", "0", "0.00", "acetaldehyde adm"}, {"OC2D3", "CC331", "CC331", "CC2O3", "70.00", "0", "0.00", "ketone, acetone"}, {"OC2D3", "CC312", "CC322", "CC2O3", "70.00", "0", "0.00", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_carb info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_carb_vdw[57][6]= {{"CC301", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC3062", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC311", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3161", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3162", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3163", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC321", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC3261", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC3263", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC331", "-0.0780", "2.040", "-0.01", "1.9", "par22, CT3x"}, {"CC2O1", "-0.1100", "2.000", " ", " ", "C"}, {"CC2O2", "-0.0700", "2.000", " ", " ", "CC"}, {"CC2O3", "-0.0900", "2.000", " ", " ", "acetone, 11/08"}, {"CC2O4", "-0.0600", "1.800", " ", " ", "acetaldehyde, 11/08"}, {"CC2O5", "-0.0980", "1.700", " ", " ", "carbonyl C, 04/15, methyl acetate viv 12/29/06"}, {"OC2D1", "-0.1200", "1.700", "-0.12", "1.40", "par22, OB"}, {"OC2D2", "-0.1200", "1.700", " ", " ", "OC"}, {"OC2D3", "-0.0500", "1.700", "-0.12", "1.40", "adm, acetone, 11/08"}, {"OC2D4", "-0.1200", "1.700", "-0.12", "1.40", "adm, acetaldehyde, 11/08"}, {"OC3C61", "-0.1000", "1.650", " ", " ", "thp 1/06"}, {"OC311", "-0.1921", "1.765", " ", " ", "MeOH and EtOH 1/06"}, {"NC2D1", "-0.2000", "1.850", "-0.20", "1.55", "par22 NH1"}, {"HCP1", "-0.0460", "0.2245", " ", " ", "polar H"}, {"HCA1", "-0.0450", "1.340", " ", " ", "1/5/05 igor"}, {"HCA2", "-0.0350", "1.340", " ", " ", "igor, 6/05"}, {"HCA3", "-0.0240", "1.340", " ", " ", "yin and mackerell, 4/98"}, {"CC312", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC322", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"HCR1", "-0.0460", "0.8000", " ", " ", "jr., 6/27/90, his (verified for acetaldehyde, 11/08)"}, {"HCA3M", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"CC321C", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC321D", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC311C", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC311D", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"OC301", "-0.1000", "1.6500", " ", " ", "sng, all34_ethers_1a OC30A"}, {"OC302", "-0.1000", "1.6500", " ", " ", "sng, all34_ethers_1a OC30A"}, {"HCP1M", "-0.0460", "0.2245", " ", " ", "polar H, og, 1/20/06"}, {"OC311M", "-0.1921", "1.765", " ", " ", "and EtOH optimized, og, 1/20/06"}, {"OC3C5M", "-0.1000", "1.6500", " ", " ", "sng 1/06"}, {"CC322C", "-0.0600", "2.02", "-0.01", "1.9", "CPEN, cyclopentane, MD sim. 8/06 viv !from CCP2, THF viv"}, {"HCA2C2", "-0.0350", "1.3000", " ", " ", "11/16/04 viv"}, {"CC312C", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"HCA1C2", "-0.0450", "1.340", " ", " ", "1/5/05 igor"}, {"OC3C51", "-0.1000", "1.6500", " ", " ", "par_carb, OC3C5M"}, {"CC3152", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3051", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC3251", "-0.0600", "2.02", "-0.01", "1.9", "cyclopentane, THF"}, {"CC3151", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3153", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"OC2DP", "-0.12", "1.70", " ", " ", " "}, {"OC312", "-0.1521", "1.77", " ", " ", " "}, {"OC30P", "-0.1521", "1.77", " ", " ", " "}, {"PC", "-0.585", "2.15", " ", " ", "Jr."}, {"SC", "-0.47", "2.1", " ", " ", " "}, {"CC312D", "-0.0320", "2.000", "-0.01", "1.9", "CC312C"}, {"OC303", "-0.1000", "1.6500", " ", " ", " "}, {"NC311", "-0.0450", "2.000", " ", " ", "aliphatic amines, xxwy"}}; atomes_1.3.1/src/calc/force_fields/charmm36_prot_metals.c0000664000175000017500000047615115212624223023035 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_prot_metals.c * @short CHARMM-charmm36m_prot force field, from 'charmm36m_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm36_prot_metals.c' * * Contains: * CHARMM-charmm36m_prot force field, data from taken from: - the file: 'charmm36m_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36m_prot_atoms[53][5] Bonds : charmm36m_prot_bonds[132][5] Angles : charmm36m_prot_angles[364][8] Dihedrals : charmm36m_prot_dihedrals[706][8] Impropers : charmm36m_prot_impropers[35][8] Non bonded : charmm36m_prot_vdw[53][6] */ #include "global.h" int charmm36m_prot_objects[14] = {53, 0, 0, 132, 0, 0, 364, 0, 706, 0 , 0, 35, 53, 0}; int charmm36m_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36m_prot info */ char * charmm36m_prot_atoms[53][5]= {{"H", "1.00800", "H", "polar H", "31"}, {"H", "1.00800", "HC", "N-ter H", "32"}, {"H", "1.00800", "HA", "nonpolar H", "33"}, {"H", "1.00800", "HP", "aromatic H", "34"}, {"H", "1.00800", "HB1", "backbone H", "35"}, {"H", "1.00800", "HB2", "aliphatic backbone H, to CT2", "36"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "37"}, {"H", "1.00800", "HR2", "(+) his HE1", "38"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "39"}, {"H", "1.00800", "HS", "thiol hydrogen", "40"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "41"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "42"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "46"}, {"C", "12.01100", "CA", "aromatic C", "47"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens, see retinol stream file for parameters", "48"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "49"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "50"}, {"C", "12.01100", "CT2A", "from CT2 (GLU, HSP chi1/chi2 fitting) 05282010, zhu", "51"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "52"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "53"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "54"}, {"C", "12.01100", "CPT", "trp C between rings", "55"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "56"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "57"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "58"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "59"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "60"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "61"}, {"C", "12.01100", "CS", "thiolate carbon", "62"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "63"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "64"}, {"C", "12.01100", "CAI", "aromatic C next to CPT in trp", "65"}, {"N", "14.00700", "N", "proline N", "66"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "67"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "68"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "69"}, {"N", "14.00700", "NH1", "peptide nitrogen", "70"}, {"N", "14.00700", "NH2", "amide nitrogen", "71"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "72"}, {"N", "14.00700", "NC2", "guanidinium nitrogen", "73"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "74"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "75"}, {"O", "15.99900", "O", "carbonyl oxygen", "76"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "77"}, {"O", "15.99900", "OC", "carboxylate oxygen", "78"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "79"}, {"O", "15.99940", "OS", "ester oxygen", "80"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36m_prot info V(R) = Kb x (R - R0)^2 */ char * charmm36m_prot_bonds[132][5]= {{"NH2", "CT1", "240.000", "1.4550", " "}, {"CA", "CAI", "305.000", "1.3750", "from CA CA"}, {"CAI", "CAI", "305.000", "1.3750", "atm, methylindole, fit CCDSS"}, {"CPT", "CA", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CAI", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CPT", "360.000", "1.3850", "atm, methylindole, fit CCDSS"}, {"CY", "CA", "350.000", "1.3650", "trj, adm jr., 5/08/91, indole CCDB structure search"}, {"CY", "CAI", "350.000", "1.3650", "from CY CA"}, {"CY", "CPT", "350.000", "1.4300", "atm, methylindole, fit CDS data"}, {"CY", "CT3", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"CY", "CT2", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"HP", "CAI", "340.000", "1.0800", "from HP CA"}, {"HP", "CY", "350.000", "1.0800", "trp, adm jr., 12/30/91"}, {"NY", "CA", "270.000", "1.3700", "trp, adm jr., 12/30/91"}, {"NY", "CPT", "270.000", "1.3700", "atm, methylindole, from CCDS 1/17/04"}, {"NY", "H", "537.500", "0.9760", "atm, methylindole, 1/17/04"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA2", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB1", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "450.000", "1.3650", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT2", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT3", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", "acetaldehyde, benzaldehyde, 3ALP"}, {"O", "CD", "720.000", "1.2050", "acetaldehyde, benzaldehyde, 3ALP. from stream/toppar_all27_na_bkb_modifications.str"}, {"CT2A", "CT1", "222.500", "1.5380", "from CT2 CT1, Zhu"}, {"CT2", "CT2A", "222.500", "1.5300", "from CT2 CT2, Zhu"}, {"CT2A", "HA2", "309.000", "1.1110", "from HA2 CT2, Zhu"}, {"CT2A", "CPH1", "229.630", "1.5000", "from CT2 CPH1, Zhu"}, {"CT2A", "CC", "200.000", "1.5220", "from CT2 CC, jshim"}, {"CT1", "CS", "190.000", "1.5380", "from CT3 CS but lengthened; compare CT3 CT2 with CT2 CT1; kevo"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36m_prot info V(S) = Kub x (S - S0)^2 */ char * charmm36m_prot_angles[364][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"H", "NH2", "CT2", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2, Neutral Gly Nterminus"}, {"NH2", "CT1", "CT1", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB1", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"NH2", "CT2", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C, Neutral Gly Nterminus"}, {"CAI", "CAI", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CAI", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CPT", "CA", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CA", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CAI", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CY", "CA", "85.000", "106.40", "25.00", "2.26100", "atm, methylindole, 1/17/04"}, {"CPT", "NY", "CA", "85.000", "112.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CT2", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT2", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT3", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "85.000", "108.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CT2", "CT1", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"H", "NY", "CA", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CAI", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CPT", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"HA2", "CT2", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CAI", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CAI", "CA", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "trp, adm jr., 12/30/91"}, {"HP", "CAI", "CPT", "30.000", "122.00", "22.00", "2.14600", "from HP CA CPT"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "trp, adm jr., 12/30/91"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "CY", "85.000", "110.50", "25.00", "2.24000", "trp, adm jr., 12/30/91"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CPT", "95.000", "107.40", " ", " ", "atm, methylindole, 1/17/04"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2A", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2A", "CT2", "CD", "52.000", "108.0000", " ", " ", " "}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA2", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA2", "CS", "HA2", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "HA3", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA1", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "HA1", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA2", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA2", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA2", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA2", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA2", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA2", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA2", "CT2", "CT1", "26.500", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA2", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "HA2", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA3", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA3", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA3", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA3", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA3", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA3", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA3", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "HA3", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB1", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB1", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB1", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB2", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB2", "CT2", "HB2", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB1", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA2", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "40.000", "120.00", "70.00", "2.31", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA2", "56.500", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT3", "HA3", "56.5000", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB1", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA2", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB2", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA3", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA1", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HB2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT2", "HA2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT3", "HA3", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB1", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "methylammonium"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "ethylammonium"}, {"NH3", "CT2", "HA2", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB2", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA3", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB1", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA2", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA1", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA2", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA3", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA1", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA2", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA3", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA2", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA3", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA2", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA3", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "diethyldisulfide, as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA2", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA3", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA2", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA3", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", "GLU/HSP, Zhu"}, {"NH1", "CT1", "CT2A", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2"}, {"HB1", "CT1", "CT2A", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2"}, {"CT2A", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C"}, {"CT1", "CT2A", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT1"}, {"CT1", "CT2A", "CT2", "58.350", "113.5000", "11.16", "2.56100", "from CT2 CT2 CT1"}, {"HA2", "CT2A", "HA2", "35.500", "109.0000", "5.40", "1.80200", "from HA2 CT2 HA2"}, {"HA2", "CT2A", "CT2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT2 CC"}, {"CT1", "CT2A", "CPH1", "58.350", "113.0000", " ", " ", "from CT1 CT2 CPH1"}, {"HA2", "CT2A", "CPH1", "33.430", "109.5000", " ", " ", "from HA2 CT2 CPH1"}, {"CT2A", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "from CT2 CPH1 CPH1"}, {"CT2A", "CPH1", "NR3", "45.800", "122.0000", " ", " ", "from NR3 CPH1 CT2"}, {"CT1", "CT2A", "CC", "52.000", "108.0000", " ", " ", "from CT1 CT2 CC"}, {"HA2", "CT2A", "CC", "33.000", "109.5000", "30.00", "2.16300", "from HA2 CT2 CC"}, {"OC", "CC", "CT2A", "40.000", "118.0000", "50.00", "2.38800", "from OC CC CT2"}, {"NH3", "CT1", "CT2A", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2"}, {"CT2A", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD"}, {"NH2", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C , kevo"}, {"CS", "CT1", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT1 CC , kevo"}, {"CS", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD , kevo"}, {"HB1", "CT1", "CS", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2 , kevo"}, {"NH1", "CT1", "CS", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2 , kevo"}, {"NH3", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2 , kevo"}, {"SS", "CS", "CT1", "55.000", "118.0000", " ", " ", "from SS CS CT3 , kevo"}, {"HA2", "CS", "CT1", "34.600", "110.10", "22.53", "2.17900", "from HA2 CS CT3 to be consistent with SS CS CT1, kevo"}, {"OC", "CT2", "CT1", "65.000", "122.0000", " ", " ", "from OC CT2 CT3 , kevo"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36m_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36m_prot_dihedrals[706][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "O", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "NH1", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT2", "C", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "HB1", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA, Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"CAI", "CA", "CA", "CAI", "3.1000", "2", "180.00", "from CA CA CA CA"}, {"CA", "CPT", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CAI", "CPT", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CA", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "NY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "NY", "CA", "6.5000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CT2", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CY", "CA", "NY", "CPT", "6.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CA", "CY", "0.0500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CA", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CAI", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CPT", "0.8500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CAI", "CA", "CA", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CA", "CAI", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CAI", "CPT", "3.0000", "2", "180.00", "from HP CA CA CPT"}, {"HP", "CAI", "CA", "HP", "2.4000", "2", "180.00", "from HP CA CA HP"}, {"HP", "CAI", "CPT", "CPT", "3.0000", "2", "180.00", "from HP CA CPT CPT"}, {"HP", "CAI", "CPT", "CY", "4.0000", "2", "180.00", "from HP CA CPT CY, r6r5"}, {"HP", "CA", "CY", "CPT", "2.8000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT3", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "NY", "CPT", "2.6000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CAI", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.6000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CPT", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CA", "CY", "CT3", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "CT2", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04, r6r5"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CPT", "CY", "6.5000", "2", "180.00", "JWK 05/14/91 fit to indole, r5 t1"}, {"CT3", "CT2", "CY", "CA", "0.3800", "2", "0.00", "trp, from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "atm 1/14/04 3-ethylindole"}, {"CT3", "CT2", "CY", "CPT", "0.3000", "3", "0.00", "atm 1/14/04 3-ethylindole"}, {"HA3", "CT3", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CE1", "CE1", "CT3", "HA3", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA2", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA3", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA1", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA1", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA2", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA2", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA3", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA3", "CT3", "CS", "HA2", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CS", "HA3", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA3", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB1", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA2", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA3", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA2", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA3", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "1.0000", "1", "0.00", "RB 1/07/11, based on graf et al Gly 3 N-ter J-couplings for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA3", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB1", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT3", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA2", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA3", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA3", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"NH1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "CT3", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"NH1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "OH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "OH1", "H", "0.1400", "3", "0.00", "From X CT2 OH1 X"}, {"CT1", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2", "S", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"CT2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "NC2", "C", "NC2", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HA2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"NC2", "C", "NC2", "HC", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HB1", "CT1", "CT2", "CC", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CY", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CC", "OC", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"HB1", "CT1", "CT2", "CPH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT1", "CT2", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"CT1", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", "From X CT2 CT3 X"}, {"HA1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"HA1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA1", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA3", "CT3", "CT1", "CT2", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"HA2", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", "From X CT2 CT3 X"}, {"CT1", "CT2", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", "From X CT2 NH3 X"}, {"HA2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", "From X CT2 NH3 X"}, {"HB1", "CT1", "CT2", "CA", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CA", "CA", "0.0000", "6", "0.00", "From X CT2 CA X"}, {"HB1", "CT1", "CT1", "OH1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "OH1", "H", "0.1400", "3", "0.00", "From X CT1 OH1 X"}, {"OH1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT2", "CT2", "CC", "O", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"CT2", "CT2", "CC", "NH2", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"CT2", "CT2", "CC", "OC", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"NH1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"NH3", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT1", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2A", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "RB: added for C-ter Glu"}, {"HA2", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2A", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2A", "CPH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"C", "NH1", "CT1", "CT2A", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C"}, {"H", "NH1", "CT1", "CT2A", "0.0000", "1", "0.00", "from H NH1 CT1 CT2"}, {"CT2A", "CT1", "C", "O", "1.4000", "1", "0.00", "from O C CT1 CT2"}, {"CT2A", "CT1", "C", "NH1", "0.0000", "1", "0.00", "NH1 C CT1 CT2"}, {"CT2A", "CT1", "C", "N", "0.0000", "1", "0.00", "RB: added for GLU-PRO in UBQ"}, {"CT1", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2A", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "from HR1 CPH1 CPH1 CT2"}, {"CT2A", "CPH1", "CPH1", "NR3", "2.5000", "2", "180.00", "from NR3 CPH1 CPH1 CT2"}, {"CT2A", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "from H NR3 CPH1 CT2"}, {"CT2A", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "from CT2 CPH1 NR3 CPH2"}, {"HA2", "CT2A", "CPH1", "CPH1", "0.0000", "3", "0.00", "from HA2 CT2 CPH1 CPH1"}, {"HA2", "CT2A", "CPH1", "NR3", "0.1900", "3", "0.00", "from NR3 CPH1 CT2 HA2"}, {"C", "CT1", "CT2", "CT2", "0.3500", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "0.4200", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "1.9100", "3", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.8800", "1", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "1.9000", "3", "0.00", " "}, {"CC", "CT2", "CT2", "CT1", "1.8400", "1", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.8400", "2", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.6300", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.0100", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.1500", "3", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.1400", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "S", "0.5400", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.6900", "3", "0.00", "Fitted Asn"}, {"C", "CT1", "CT2", "CC", "1.4100", "1", "180.00", " "}, {"C", "CT1", "CT2", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.2800", "1", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.5000", "2", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6600", "2", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.4200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.1500", "2", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.9500", "3", "180.00", "Fitted Asp"}, {"C", "CT1", "CT2A", "CC", "1.6100", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.6800", "1", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.1000", "2", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.8400", "1", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.9800", "2", "180.00", " "}, {"CT1", "CT2A", "CC", "OC", "1.4600", "3", "0.00", "Fitted Cys"}, {"CT1", "CT2", "S", "HS", "0.2000", "1", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.6500", "2", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.2200", "3", "0.00", " "}, {"C", "CT1", "CT2", "S", "0.2400", "1", "180.00", " "}, {"C", "CT1", "CT2", "S", "0.7500", "2", "180.00", " "}, {"C", "CT1", "CT2", "S", "1.3500", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "0.3400", "1", "0.00", " "}, {"NH1", "CT1", "CT2", "S", "0.5000", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "1.4300", "3", "0.00", "Fitted Glu"}, {"CC", "CT2", "CT2A", "CT1", "0.0000", "1", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.3800", "2", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.5900", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.1100", "1", "0.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.9800", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CC", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3000", "1", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3500", "2", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "1.7600", "3", "0.00", "Group-fitted for Hsd/Hse"}, {"CPH1", "CPH1", "CT2", "CT1", "1.7400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.1500", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.7700", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "1.4900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.0900", "2", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.7900", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "1.0900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.0900", "2", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.6700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.1800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.6400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.8700", "3", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "1", "0.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.9000", "3", "0.00", "Fitted Hsp"}, {"CPH1", "CPH1", "CT2A", "CT1", "2.0400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.4400", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.1300", "3", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.5300", "1", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.4200", "2", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.3000", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.7500", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "0.1300", "2", "0.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.8600", "3", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "1.0900", "1", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "0.2200", "2", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "2.3200", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "CT2", "CT3", "0.3800", "1", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.1300", "2", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.2900", "3", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.1000", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.5200", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.2900", "3", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.1200", "1", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.3600", "2", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.4100", "3", "0.00", "Fitted Leu"}, {"CT1", "CT2", "CT1", "CT3", "0.0500", "1", "0.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.1000", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.0100", "3", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.3200", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.6100", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4800", "1", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4200", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.6500", "3", "0.00", "Group-fitted for Phe/Tyr"}, {"CA", "CA", "CT2", "CT1", "1.0700", "1", "0.00", " "}, {"CA", "CA", "CT2", "CT1", "0.2400", "2", "180.00", " "}, {"CA", "CA", "CT2", "CT1", "0.1700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.2800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CA", "0.9400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.5700", "3", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.5200", "1", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.6200", "2", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "1.5800", "3", "0.00", "Fitted Ser"}, {"CT1", "CT2", "OH1", "H", "0.0200", "1", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.5600", "2", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.4900", "3", "0.00", " "}, {"C", "CT1", "CT2", "OH1", "0.6500", "1", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "0.2500", "2", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "1.1700", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1800", "1", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "1.4600", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "OH1", "H", "0.1800", "1", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.0600", "2", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.2500", "3", "0.00", " "}, {"C", "CT1", "CT1", "OH1", "0.7900", "1", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.3900", "2", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.9900", "3", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.0900", "1", "0.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1700", "3", "0.00", "Fitted Trp"}, {"CA", "CY", "CT2", "CT1", "0.0300", "1", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.5500", "2", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.3600", "1", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.0500", "2", "0.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.1900", "3", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.0900", "1", "180.00", " "}, {"C", "CT1", "CT2", "CY", "0.5000", "2", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.1700", "3", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.2900", "1", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.6600", "2", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "1.1700", "3", "0.00", "Fitted Val"}, {"C", "CT1", "CT1", "CT3", "0.1400", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.2600", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.3300", "3", "180.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.1800", "1", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.0600", "2", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.5900", "3", "0.00", "CT2->CT2A, jshim"}, {"H", "NH1", "CT2A", "CC", "0.0000", "1", "0.00", " "}, {"X", "CT2A", "CC", "X", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH3", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"CC", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "specific terms"}, {"CPH1", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "NH3", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"CT2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", "RESI CYSM and PRES CYSD"}, {"H", "NH2", "CT1", "CS", "0.1100", "3", "0.00", "from H NH2 CT1 CT2 or H NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C or CT2A CT1 NH1 C , kevo"}, {"H", "NH1", "CT1", "CS", "0.0000", "1", "0.00", "from H NH1 CT1 CT2 or H NH1 CT1 CT2 , kevo"}, {"N", "C", "CT1", "CS", "0.0000", "1", "0.00", "from N C CT1 CT2 or N C CT1 CT2 , kevo"}, {"NH1", "C", "CT1", "CS", "0.0000", "1", "0.00", "from NH1 C CT1 CT2 or NH1 C CT1 CT2 , kevo"}, {"O", "C", "CT1", "CS", "1.4000", "1", "0.00", "from O C CT1 CT2 or O C CT1 CT2 , kevo"}, {"HA2", "CS", "CT1", "C", "0.2000", "3", "0.00", "from HA2 CT2 CT1 C or HA2 CT2A CT1 C , kevo"}, {"NH1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from NH1 CT1 CT2 HA2 or NH1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from HB1 CT1 CT2 HA2 or HB1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from HB1 CT1 CT2 S or HB1 CT1 CT2A S , kevo"}, {"C", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"C", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"HB1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36m_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36m_prot_impropers[35][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "45.0000", "0", "0.0000", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"C", "HC", "HC", "NC2", "0.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NC2", "X", "X", "HC", "-2.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA1", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36m_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36m_prot_vdw[53][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CPT", "-0.099000", "1.860000", " ", " ", " "}, {"CY", "-0.073000", "1.990000", " ", " ", " "}, {"CAI", "-0.073000", "1.990000", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1", "-0.0320", "2.000", "-0.01", "1.9", " "}, {"CT2", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT2A", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HB1", "-0.022000", "1.320000", " ", " ", " "}, {"HB2", "-0.028000", "1.340000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HA1", "-0.045", "1.3400", " ", " ", " "}, {"HA2", "-0.034", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/amber96.c0000664000175000017500000013145015212624223020237 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber96.c * @short Amber-96 force field, from 'parm96' * @author Sébastien Le Roux */ /* * This file: 'amber96.c' * * Contains: * Amber-96 force field, data from taken from: - the file: 'parm96' This file contains several tables: Atoms : amber96_atoms[54][4] Equi vdw : amber96_equi[2][12] Bonds : amber96_bonds[83][5] Angles : amber96_angles[191][6] Dihedrals : amber96_dihedrals[81][9] Impropers : amber96_impropers[31][8] Non bonded : amber96_vdw[35][4] */ #include "global.h" int amber96_objects[14] = {54, 2, 0, 83, 0, 0, 191, 0, 81, 0 , 0, 31, 35, 0}; int amber96_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_96 info */ char * amber96_atoms[54][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber96_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber96 info V(R) = Kb x (R - R0)^2 */ char * amber96_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber96_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber96 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber96_dihedrals[81][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.30", "180.0", "-2.", "Kollman et al. 1997"}, {"C", "N", "CT", "C", "1", "0.85", "000.0", "1.", "Kollman et al. 1997"}, {"N", "CT", "C", "N", "1", "0.30", "180.0", "-2.", "Kollman et al. 1997"}, {"N", "CT", "C", "N", "1", "0.85", "000.0", "1.", "Kollman et al. 1997"}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber96 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber96_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CK", "CB", "N*", "CT", "1.0", "180.", "2.", " "}, {"CM", "C", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"CM", "C", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"NA", "CV", "CC", "CT", "1.1", "180.", "2.", " "}, {"NB", "CW", "CC", "CT", "1.1", "180.", "2.", " "}, {"NA", "CW", "CC", "CT", "1.1", "180.", "2.", " "}, {"CW", "CB", "C*", "CT", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"NC", "CM", "CA", "N2", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "NC", "CA", "N2", "1.1", "180.", "2.", "dac, 10/94"}, {"NA", "NC", "CA", "N2", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber96 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber96_vdw[35][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"CA", "1.9080", "0.0860", "Spellmeyer"}, {"CM", "1.9080", "0.0860", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}}; atomes_1.3.1/src/calc/force_fields/oplsaar.c0000664000175000017500000126054015212624223020437 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file oplsaar.c * @short OPLSAAR force field * @author Sébastien Le Roux */ /* * This file: 'oplsaar.c' * * Contains: * OPLSAAR force field This file contains several tables: Atoms : OPLSAAR_atoms[145][4] Bonds : OPLSAAR_bonds[242][5] Angles : OPLSAAR_angles[593][6] Dihedrals : OPLSAAR_dihedrals[2482][8] Impropers : OPLSAAR_impropers[131][[8] Non bonded : OPLSAAR_vdw[145][7] */ #include "global.h" /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= OPLSAAR info */ int OPLSAAR_objects[14] = {145, 0, 0, 242, 0, 0, 593, 0, 2482, 0 , 0, 131, 145, 0}; int OPLSAAR_dim[14] = {4, 0, 0, 5, 0, 0, 6, 0, 8, 0, 0, 8, 7, 0}; /* Atoms */ char * OPLSAAR_atoms[145][4]= {{"C", "12.01100", "C135", "CH3 all-atom C: alkanes ALL-ATOM "}, {"C", "12.01100", "C136", "CH2 all-atom C: alkanes PARAMETERS"}, {"C", "12.01100", "C137", "CH all-atom C: alkanes FROM HERE ON"}, {"C", "12.01100", "C145", "Benzene C - 12 site JACS,112,4768-90"}, {"C", "12.01100", "C149", "all-atom C: CH2, ethyl benzene"}, {"C", "12.01100", "C157", "all-atom C: CH3 and CH2, alcohols"}, {"C", "12.01100", "C158", "all-atom C: CH, alcohols"}, {"C", "12.01100", "C166", "C(OH) phenol Use with all"}, {"C", "12.01100", "C206", "all-atom C: CH2, thiols"}, {"C", "12.01100", "C209", "all-atom C: CH3, sulfides"}, {"C", "12.01100", "C210", "all-atom C: CH2, sulfides"}, {"C", "12.01100", "C214", "all-atom C: CH2, disulfides"}, {"C", "12.01100", "C223", "C in RCH2NH2 and Gly CA (See 900 for amines)"}, {"C", "12.01100", "C224", "C in R2CHNH2 and Ala CA"}, {"C", "12.01100", "C235", "C: C=O in amide. Acyl R in amides"}, {"C", "12.01100", "C242", "C on N: secondary N-Me amide"}, {"C", "12.01100", "C245", "C on N: tertiary N-CH2R amide (Pro Cdelta)"}, {"C", "12.01100", "C246", "C on N: tertiary N-CHR2 amide (Pro Calpha)"}, {"C", "12.01100", "C267", "Co in CCOOH carboxylic acid"}, {"C", "12.01100", "C271", "C in COO- carboxylate"}, {"C", "12.01100", "C274", "C: CH2, carboxylate ion"}, {"C", "12.01100", "C283", "AA C-alpha on C-terminal ALA"}, {"C", "12.01100", "C284", "AA C-alpha on C-terminal GLY"}, {"C", "12.01100", "C285", "AA C-alpha on C-terminal PRO"}, {"C", "12.01100", "C292", "C in RCH2NH3+ and CA in N-term Gly"}, {"C", "12.01100", "C293", "C in R2CHNH3+ and CA in N-term Ala, etc."}, {"C", "12.01100", "C295", "AA:C-alpha in N-term PRO"}, {"C", "12.01100", "C296", "AA:C-delta in N-term PRO"}, {"C", "12.01100", "C302", "C: guanidinium C+"}, {"C", "12.01100", "C307", "C: CH2(D), ARG, ethylguanidinium"}, {"C", "12.01100", "C308", "C: CH2(G), ARG"}, {"C", "12.01100", "C500", "CG in TRP"}, {"C", "12.01100", "C501", "CD C in TRP"}, {"C", "12.01100", "C502", "CE C in TRP"}, {"C", "12.01100", "C505", "CB in HIS"}, {"C", "12.01100", "C506", "CE1 in HID, HIE"}, {"C", "12.01100", "C507", "CD2 in HID, CG in HIE"}, {"C", "12.01100", "C508", "CG in HID, CD2 in HIE"}, {"C", "12.01100", "C509", "CE1 in HIP"}, {"C", "12.01100", "C510", "CG, CD2 in HIP"}, {"C", "12.01100", "C514", "CD1 in TRP"}, {"C", "12.011000", "C366", " "}, {"C", "12.011000", "C320", " "}, {"C", "12.011000", "C362", " "}, {"C", "12.011000", "C324", " "}, {"C", "12.011000", "C323", " "}, {"C", "12.011000", "C353", " "}, {"C", "12.011000", "C364", " "}, {"C", "12.011000", "C365", " "}, {"C", "12.011000", "C183", " "}, {"C", "12.011000", "C931", " "}, {"C", "12.011000", "C174", " "}, {"C", "12.011000", "C350", " "}, {"C", "12.011000", "C349", " "}, {"C", "12.011000", "C351", " "}, {"C", "12.011000", "C932", " "}, {"C", "12.011000", "C338", " "}, {"C", "12.011000", "C337", " "}, {"C", "12.011000", "C334", " "}, {"C", "12.011000", "C336", " "}, {"C", "12.011000", "C322", " "}, {"C", "12.011000", "C933", " "}, {"H", "1.00800", "H140", "H all-atom H: alkanes"}, {"H", "1.00800", "H146", "Benzene H - 12 site"}, {"H", "1.00800", "H155", "all-atom H(O): mono alcohols"}, {"H", "1.00800", "H168", "H phenol 145 and 146"}, {"H", "1.00800", "H204", "all-atom H(S): thiols (mod 11/99)"}, {"H", "1.00800", "H240", "H on N: primary amide"}, {"H", "1.00800", "H241", "H on N: secondary amide"}, {"H", "1.00800", "H270", "H in CCOOH"}, {"H", "1.00800", "H290", "H (RNH3+)"}, {"H", "1.00800", "H301", "H: guanidinium NH2"}, {"H", "1.00800", "H304", "H: guanidinium NHR"}, {"H", "1.00800", "H310", "H (R2NH2+)"}, {"H", "1.00800", "H504", "H on NE in TRP"}, {"H", "1.00800", "H513", "H on N in HIP"}, {"H", "1.008000", "H369", " "}, {"H", "1.008000", "H367", " "}, {"H", "1.008000", "H329", " "}, {"H", "1.008000", "H327", " "}, {"H", "1.008000", "H330", " "}, {"H", "1.008000", "H343", " "}, {"H", "1.008000", "H342", " "}, {"H", "1.008000", "H344", " "}, {"H", "1.008000", "H345", " "}, {"H", "1.008000", "H185", " "}, {"H", "1.008000", "H196", " "}, {"H", "1.008000", "H359", " "}, {"H", "1.008000", "H355", " "}, {"H", "1.008000", "H357", " "}, {"H", "1.008000", "H358", " "}, {"H", "1.008000", "H176", " "}, {"H", "1.008000", "H170", " "}, {"N", "14.00700", "N237", "N: primary amide. alkane parameters."}, {"N", "14.00700", "N238", "N: secondary amide 279 for formyl H."}, {"N", "14.00700", "N239", "N: tertiary amide"}, {"N", "14.00700", "N287", "N (RNH3+)"}, {"N", "14.00700", "N300", "N: guanidinium NH2"}, {"N", "14.00700", "N303", "N: guanidinium NHR"}, {"N", "14.00700", "N309", "N (R2NH2+)"}, {"N", "14.00700", "N503", "NE in TRP"}, {"N", "14.00700", "N511", "NE in HID, ND in HIE"}, {"N", "14.00700", "N512", "N in HIP"}, {"N", "14.007000", "N348", " "}, {"N", "14.007000", "N368", " "}, {"N", "14.007000", "N937", " "}, {"N", "14.007000", "N936", " "}, {"N", "14.007000", "N321", " "}, {"N", "14.007000", "N361", " "}, {"N", "14.007000", "N335", " "}, {"N", "14.007000", "N346", " "}, {"N", "14.007000", "N363", " "}, {"N", "14.007000", "N352", " "}, {"N", "14.007000", "N356", " "}, {"N", "14.007000", "N341", " "}, {"N", "14.007000", "N938", " "}, {"O", "15.99940", "O154", "all-atom O: mono alcohols"}, {"O", "15.99940", "O167", "O phenol atom C, H"}, {"O", "15.99940", "O236", "O: C=O in amide. is neutral - use"}, {"O", "15.99940", "O268", "Oh in CCOOH R in RCOOH is"}, {"O", "15.99940", "O269", "Oc in CCOOH neutral; use 135-140"}, {"O", "15.99940", "O272", "O: O in COO- carboxylate"}, {"O", "15.999400", "O370", " "}, {"O", "15.999400", "O340", " "}, {"O", "15.999400", "O441", " "}, {"O", "15.999400", "O169", " "}, {"O", "15.999400", "O186", " "}, {"P", "30.974000", "P440", " "}, {"C", "12.011000", "C347", " "}, {"O", "15.999400", "O328", " "}, {"O", "15.999400", "O326", " "}, {"C", "12.011000", "C6448", " "}, {"O", "15.999400", "O6934", " "}, {"O", "15.999400", "O6452", " "}, {"O", "15.999400", "O6442", " "}, {"P", "30.974000", "P6450", " "}, {"O", "15.999400", "O6441", " "}, {"S", "32.06000", "S200", "all-atom S: thiols (mod 11/99)"}, {"S", "32.06000", "S202", "all-atom S: sulfides"}, {"S", "32.06000", "S203", "all-atom S: disulfides"}, {"O", "15.99940", "OT", "TIP3P water"}, {"H", "1.00800", "HT", "TIP3P water"}, {"Na", "22.98977", "SOD", "Sodium Ion, adm jr."}, {"Cl", "35.45000", "CLA", "Chloride Ion, adm jr."}, {"Mg", "24.30000", "MG", "Magnesium Ion"}}; /* Bonds */ char * OPLSAAR_bonds[242][5]= {{"OT", "HT", "450.0", "0.9572", " "}, {"HT", "HT", "0.0", "1.5139", " "}, {"S203", "S203", "166.0", "2.038", " "}, {"C157", "O6934", "320.00", "1.410", " "}, {"O6934", "C174", "320.00", "1.410", " "}, {"C135", "C136", "268.00", "1.529", " "}, {"C135", "C137", "268.00", "1.529", " "}, {"C135", "C158", "268.00", "1.529", " "}, {"C135", "C224", "268.00", "1.529", " "}, {"C135", "C235", "317.00", "1.522", " "}, {"C135", "C283", "268.00", "1.529", " "}, {"C135", "C293", "268.00", "1.529", " "}, {"C135", "H140", "340.00", "1.090", " "}, {"C136", "C136", "268.00", "1.529", " "}, {"C136", "C137", "268.00", "1.529", " "}, {"C136", "C210", "268.00", "1.529", " "}, {"C136", "C224", "268.00", "1.529", " "}, {"C136", "C235", "317.00", "1.522", " "}, {"C136", "C245", "268.00", "1.529", " "}, {"C136", "C246", "268.00", "1.529", " "}, {"C136", "C267", "317.00", "1.522", " "}, {"C136", "C274", "268.00", "1.529", " "}, {"C136", "C283", "268.00", "1.529", " "}, {"C136", "C285", "268.00", "1.529", " "}, {"C136", "C292", "268.00", "1.529", " "}, {"C136", "C293", "268.00", "1.529", " "}, {"C136", "C295", "268.00", "1.529", " "}, {"C136", "C296", "268.00", "1.529", " "}, {"C136", "C308", "268.00", "1.529", " "}, {"C136", "C500", "317.00", "1.495", " "}, {"C136", "H140", "340.00", "1.090", " "}, {"C137", "C224", "268.00", "1.529", " "}, {"C137", "C283", "268.00", "1.529", " "}, {"C137", "C293", "268.00", "1.529", " "}, {"C137", "H140", "340.00", "1.090", " "}, {"C145", "C145", "469.00", "1.400", " "}, {"C145", "C149", "317.00", "1.510", " "}, {"C145", "C166", "469.00", "1.400", " "}, {"C145", "C501", "469.00", "1.404", " "}, {"C145", "C502", "469.00", "1.400", " "}, {"C145", "H146", "367.00", "1.080", " "}, {"C149", "C224", "268.00", "1.529", " "}, {"C149", "C283", "268.00", "1.529", " "}, {"C149", "C293", "268.00", "1.529", " "}, {"C149", "H140", "340.00", "1.090", " "}, {"C157", "C224", "268.00", "1.529", " "}, {"C157", "C283", "268.00", "1.529", " "}, {"C157", "C293", "268.00", "1.529", " "}, {"C157", "H140", "340.00", "1.090", " "}, {"C157", "O154", "320.00", "1.410", " "}, {"C158", "C224", "268.00", "1.529", " "}, {"C158", "C283", "268.00", "1.529", " "}, {"C158", "C293", "268.00", "1.529", " "}, {"C158", "H140", "340.00", "1.090", " "}, {"C158", "O154", "320.00", "1.410", " "}, {"C166", "O167", "450.00", "1.364", " "}, {"C206", "C224", "268.00", "1.529", " "}, {"C206", "C283", "268.00", "1.529", " "}, {"C206", "C293", "268.00", "1.529", " "}, {"C206", "H140", "340.00", "1.090", " "}, {"C206", "S200", "222.00", "1.810", " "}, {"C209", "H140", "340.00", "1.090", " "}, {"C209", "S202", "222.00", "1.810", " "}, {"C210", "H140", "340.00", "1.090", " "}, {"C210", "S202", "222.00", "1.810", " "}, {"C214", "C224", "268.00", "1.529", " "}, {"C214", "C283", "268.00", "1.529", " "}, {"C214", "C293", "268.00", "1.529", " "}, {"C214", "H140", "340.00", "1.090", " "}, {"C214", "S203", "222.00", "1.810", " "}, {"C223", "C235", "317.00", "1.522", " "}, {"C223", "H140", "340.00", "1.090", " "}, {"C223", "N238", "337.00", "1.449", " "}, {"C223", "C267", "317.00", "1.522", "phosphorylated C-terminal Gly, adm jr."}, {"C224", "C235", "317.00", "1.522", " "}, {"C224", "C267", "317.00", "1.522", " "}, {"C224", "C274", "268.00", "1.529", " "}, {"C224", "C505", "268.00", "1.529", " "}, {"C224", "H140", "340.00", "1.090", " "}, {"C224", "N238", "337.00", "1.449", " "}, {"C235", "C246", "317.00", "1.522", " "}, {"C235", "C292", "317.00", "1.522", " "}, {"C235", "C293", "317.00", "1.522", " "}, {"C235", "C295", "317.00", "1.522", " "}, {"C235", "N237", "490.00", "1.335", " "}, {"C235", "N238", "490.00", "1.335", " "}, {"C235", "N239", "490.00", "1.335", " "}, {"C235", "O236", "570.00", "1.229", " "}, {"C242", "H140", "340.00", "1.090", " "}, {"C242", "N238", "337.00", "1.449", " "}, {"C245", "H140", "340.00", "1.090", " "}, {"C245", "N239", "337.00", "1.449", " "}, {"C246", "H140", "340.00", "1.090", " "}, {"C246", "N239", "337.00", "1.449", " "}, {"C267", "O268", "450.00", "1.364", " "}, {"C267", "O269", "570.00", "1.229", " "}, {"C271", "C274", "317.00", "1.522", " "}, {"C271", "C283", "317.00", "1.522", " "}, {"C271", "C284", "317.00", "1.522", " "}, {"C271", "C285", "317.00", "1.522", " "}, {"C271", "O272", "656.00", "1.250", " "}, {"C274", "C283", "268.00", "1.529", " "}, {"C274", "C293", "268.00", "1.529", " "}, {"C274", "H140", "340.00", "1.090", " "}, {"C283", "C505", "268.00", "1.529", " "}, {"C283", "H140", "340.00", "1.090", " "}, {"C283", "N238", "337.00", "1.449", " "}, {"C284", "H140", "340.00", "1.090", " "}, {"C284", "N238", "337.00", "1.449", " "}, {"C285", "H140", "340.00", "1.090", " "}, {"C285", "N239", "337.00", "1.449", " "}, {"C292", "H140", "340.00", "1.090", " "}, {"C292", "N287", "367.00", "1.471", " "}, {"C293", "C505", "268.00", "1.529", " "}, {"C293", "H140", "340.00", "1.090", " "}, {"C293", "N287", "367.00", "1.471", " "}, {"C295", "H140", "340.00", "1.090", " "}, {"C295", "N309", "367.00", "1.471", " "}, {"C296", "H140", "340.00", "1.090", " "}, {"C296", "N309", "367.00", "1.471", " "}, {"C302", "N300", "481.00", "1.340", " "}, {"C302", "N303", "481.00", "1.340", " "}, {"C307", "C308", "268.00", "1.529", " "}, {"C307", "H140", "340.00", "1.090", " "}, {"C307", "N303", "337.00", "1.463", " "}, {"C308", "H140", "340.00", "1.090", " "}, {"C500", "C501", "388.00", "1.459", " "}, {"C500", "C514", "546.00", "1.352", " "}, {"C501", "C502", "447.00", "1.419", " "}, {"C502", "N503", "428.00", "1.380", " "}, {"C505", "C507", "317.00", "1.504", " "}, {"C505", "C508", "317.00", "1.504", " "}, {"C505", "C510", "317.00", "1.504", " "}, {"C505", "H140", "340.00", "1.090", " "}, {"C506", "H146", "367.00", "1.080", " "}, {"C506", "N503", "477.00", "1.343", " "}, {"C506", "N511", "488.00", "1.335", " "}, {"C507", "C508", "520.00", "1.370", " "}, {"C507", "H146", "367.00", "1.080", " "}, {"C507", "N511", "410.00", "1.394", " "}, {"C508", "H146", "367.00", "1.080", " "}, {"C508", "N503", "427.00", "1.381", " "}, {"C509", "H146", "367.00", "1.080", " "}, {"C509", "N512", "477.00", "1.343", " "}, {"C510", "C510", "520.00", "1.370", " "}, {"C510", "H146", "367.00", "1.080", " "}, {"C510", "N512", "427.00", "1.381", " "}, {"C514", "H146", "367.00", "1.080", " "}, {"C514", "N503", "427.00", "1.381", " "}, {"H155", "O154", "553.00", "0.945", " "}, {"H168", "O167", "553.00", "0.945", " "}, {"H204", "S200", "274.00", "1.336", " "}, {"H240", "N237", "434.00", "1.010", " "}, {"H241", "N238", "434.00", "1.010", " "}, {"H270", "O268", "553.00", "0.945", " "}, {"H290", "N287", "434.00", "1.010", " "}, {"H301", "N300", "434.00", "1.010", " "}, {"H304", "N303", "434.00", "1.010", " "}, {"H310", "N309", "434.00", "1.010", " "}, {"H504", "N503", "434.00", "1.010", " "}, {"H513", "N512", "434.00", "1.010", " "}, {"O186", "C933", "320.00", "1.380", " "}, {"C174", "C933", "268.00", "1.529", " "}, {"H196", "C933", "340.00", "1.090", " "}, {"C933", "N938", "337.00", "1.475", " "}, {"C320", "N938", "424.00", "1.383", " "}, {"C324", "N938", "448.00", "1.365", " "}, {"H330", "C324", "340.00", "1.080", " "}, {"C323", "C322", "410.00", "1.444", " "}, {"O328", "C322", "570.00", "1.229", " "}, {"H329", "C323", "340.00", "1.080", " "}, {"C324", "C323", "549.00", "1.340", " "}, {"N321", "C320", "418.00", "1.388", " "}, {"O326", "C320", "570.00", "1.229", " "}, {"C322", "N321", "418.00", "1.388", " "}, {"H327", "N321", "434.00", "1.010", " "}, {"N335", "C336", "483.00", "1.339", " "}, {"O186", "C932", "320.00", "1.380", " "}, {"C932", "N937", "337.00", "1.475", " "}, {"C174", "C932", "268.00", "1.529", " "}, {"H196", "C932", "340.00", "1.090", " "}, {"C334", "N937", "424.00", "1.383", " "}, {"C338", "N937", "448.00", "1.365", " "}, {"H345", "C338", "367.00", "1.080", " "}, {"H344", "C337", "340.00", "1.080", " "}, {"C337", "C338", "549.00", "1.340", " "}, {"N335", "C334", "457.00", "1.358", " "}, {"O340", "C334", "570.00", "1.229", " "}, {"N341", "C336", "481.00", "1.340", " "}, {"C336", "C337", "427.00", "1.433", " "}, {"H342", "N341", "434.00", "1.010", " "}, {"H343", "N341", "434.00", "1.010", " "}, {"O370", "C366", "570.00", "1.229", " "}, {"C364", "N936", "436.00", "1.374", " "}, {"N363", "C364", "461.00", "1.354", " "}, {"C365", "C364", "520.00", "1.370", " "}, {"H369", "N368", "434.00", "1.010", " "}, {"C362", "N363", "483.00", "1.339", " "}, {"N368", "C362", "481.00", "1.340", " "}, {"C362", "N361", "427.00", "1.381", " "}, {"H367", "N361", "434.00", "1.010", " "}, {"N361", "C366", "418.00", "1.388", " "}, {"C366", "C365", "447.00", "1.419", " "}, {"N352", "C365", "414.00", "1.391", " "}, {"C183", "C6448", "286.00", "1.529", " "}, {"C6448", "H140", "340.00", "1.090", " "}, {"C6448", "O6934", "320.00", "1.410", " "}, {"O6934", "P440", "230.00", "1.610", " "}, {"O441", "P440", "553.00", "1.480", " "}, {"O441", "P6450", "553.00", "1.480", " "}, {"O6452", "P440", "230.00", "1.610", " "}, {"O6442", "P440", "230.00", "1.610", " "}, {"O6442", "P6450", "230.00", "1.610", " "}, {"O6452", "P6450", "230.00", "1.610", " "}, {"O6441", "P6450", "553.00", "1.480", " "}, {"C931", "N936", "337.00", "1.475", " "}, {"C349", "N936", "436.00", "1.374", " "}, {"C353", "N936", "440.00", "1.371", " "}, {"C174", "C931", "268.00", "1.529", " "}, {"O186", "C931", "320.00", "1.380", " "}, {"H196", "C931", "340.00", "1.090", " "}, {"C174", "C174", "268.00", "1.529", " "}, {"O169", "C174", "320.00", "1.410", " "}, {"H176", "C174", "340.00", "1.090", " "}, {"C183", "C174", "268.00", "1.529", " "}, {"C157", "C183", "268.00", "1.529", " "}, {"H185", "C183", "340.00", "1.090", " "}, {"H170", "O169", "553.00", "0.945", " "}, {"C350", "C349", "520.00", "1.370", " "}, {"N348", "C349", "461.00", "1.354", " "}, {"C351", "C350", "469.00", "1.404", " "}, {"N352", "C350", "414.00", "1.391", " "}, {"N356", "C351", "481.00", "1.340", " "}, {"N346", "C351", "483.00", "1.339", " "}, {"H357", "N356", "434.00", "1.010", " "}, {"H358", "N356", "434.00", "1.010", " "}, {"C347", "N346", "502.00", "1.324", " "}, {"H355", "C347", "367.00", "1.080", " "}, {"H359", "C353", "367.00", "1.080", " "}, {"C183", "O186", "320.00", "1.410", " "}, {"C353", "N352", "529.00", "1.304", " "}, {"C347", "N348", "502.00", "1.324", " "}}; /* Angles */ char * OPLSAAR_angles[593][6]= {{"HT", "OT", "HT", "55.0", "104.52", " "}, {"O6934", "P440", "O6934", "45.0", "102.60", "new?"}, {"C183", "C157", "O6934", "50.00", "109.500", " "}, {"H140", "C157", "O6934", "35.00", "109.500", " "}, {"H176", "C174", "O6934", "35.00", "109.500", " "}, {"C183", "C174", "O6934", "50.00", "109.500", " "}, {"C174", "C174", "O6934", "50.0", "109.50", " "}, {"P440", "O6934", "C174", "30.0", "120.50", " "}, {"P440", "O6934", "C157", "100.0", "120.50", " "}, {"H140", "C135", "H140", "33.0", "107.8", " "}, {"H140", "C136", "H140", "33.0", "107.8", " "}, {"H140", "C149", "H140", "33.0", "107.8", " "}, {"H140", "C157", "H140", "33.0", "107.8", " "}, {"H140", "C206", "H140", "33.0", "107.8", " "}, {"H140", "C209", "H140", "33.0", "107.8", " "}, {"H140", "C210", "H140", "33.0", "107.8", " "}, {"H140", "C214", "H140", "33.0", "107.8", " "}, {"H140", "C223", "H140", "33.0", "107.8", " "}, {"H140", "C224", "H140", "33.0", "107.8", " "}, {"H140", "C242", "H140", "33.0", "107.8", " "}, {"H140", "C245", "H140", "33.0", "107.8", " "}, {"H140", "C274", "H140", "33.0", "107.8", " "}, {"H140", "C284", "H140", "33.0", "107.8", " "}, {"H140", "C292", "H140", "33.0", "107.8", " "}, {"H140", "C296", "H140", "33.0", "107.8", " "}, {"H140", "C307", "H140", "33.0", "107.8", " "}, {"H140", "C308", "H140", "33.0", "107.8", " "}, {"H140", "C505", "H140", "33.0", "107.8", " "}, {"H290", "N287", "H290", "35.0", "109.5", " "}, {"H310", "N309", "H310", "35.0", "109.5", " "}, {"C135", "C136", "C137", "58.35", "112.70", " "}, {"C135", "C136", "H140", "37.50", "110.70", " "}, {"C135", "C137", "C135", "58.35", "112.70", " "}, {"C135", "C137", "C136", "58.35", "112.70", " "}, {"C135", "C137", "C224", "58.35", "112.70", " "}, {"C135", "C137", "C283", "58.35", "112.70", " "}, {"C135", "C137", "C293", "58.35", "112.70", " "}, {"C135", "C137", "H140", "37.50", "110.70", " "}, {"C135", "C158", "C224", "58.35", "112.70", " "}, {"C135", "C158", "C283", "58.35", "112.70", " "}, {"C135", "C158", "C293", "58.35", "112.70", " "}, {"C135", "C158", "H140", "37.50", "110.70", " "}, {"C135", "C158", "O154", "50.00", "109.50", " "}, {"C135", "C224", "C235", "63.00", "111.10", " "}, {"C135", "C224", "C267", "63.00", "111.10", " "}, {"C135", "C224", "H140", "37.50", "110.70", " "}, {"C135", "C224", "N238", "80.00", "109.70", " "}, {"C135", "C235", "N238", "70.00", "116.60", " "}, {"C135", "C235", "N239", "70.00", "116.60", " "}, {"C135", "C235", "O236", "80.00", "120.40", " "}, {"C135", "C283", "C271", "63.00", "111.10", " "}, {"C135", "C283", "H140", "37.50", "110.70", " "}, {"C135", "C283", "N238", "80.00", "109.70", " "}, {"C135", "C293", "C235", "63.00", "111.10", " "}, {"C135", "C293", "H140", "37.50", "110.70", " "}, {"C135", "C293", "N287", "80.00", "111.20", " "}, {"C136", "C135", "H140", "37.50", "110.70", " "}, {"C136", "C136", "C136", "58.35", "112.70", " "}, {"C136", "C136", "C224", "58.35", "112.70", " "}, {"C136", "C136", "C235", "63.00", "111.10", " "}, {"C136", "C136", "C245", "58.35", "112.70", " "}, {"C136", "C136", "C246", "58.35", "112.70", " "}, {"C136", "C136", "C267", "63.00", "111.10", " "}, {"C136", "C136", "C283", "58.35", "112.70", " "}, {"C136", "C136", "C285", "58.35", "112.70", " "}, {"C136", "C136", "C292", "58.35", "112.70", " "}, {"C136", "C136", "C293", "58.35", "112.70", " "}, {"C136", "C136", "C295", "58.35", "112.70", " "}, {"C136", "C136", "C296", "58.35", "112.70", " "}, {"C136", "C136", "H140", "37.50", "110.70", " "}, {"C136", "C137", "C224", "58.35", "112.70", " "}, {"C136", "C137", "C283", "58.35", "112.70", " "}, {"C136", "C137", "C293", "58.35", "112.70", " "}, {"C136", "C137", "H140", "37.50", "110.70", " "}, {"C136", "C210", "H140", "37.50", "110.70", " "}, {"C136", "C210", "S202", "50.00", "114.70", " "}, {"C136", "C224", "C235", "63.00", "111.10", " "}, {"C136", "C224", "H140", "37.50", "110.70", " "}, {"C136", "C224", "N238", "80.00", "109.70", " "}, {"C136", "C235", "N237", "70.00", "116.60", " "}, {"C136", "C235", "O236", "80.00", "120.40", " "}, {"C136", "C245", "H140", "37.50", "110.70", " "}, {"C136", "C245", "N239", "80.00", "109.70", " "}, {"C136", "C246", "C235", "63.00", "111.10", " "}, {"C136", "C246", "H140", "37.50", "110.70", " "}, {"C136", "C246", "N239", "80.00", "109.70", " "}, {"C136", "C267", "O268", "70.00", "108.00", " "}, {"C136", "C267", "O269", "80.00", "120.40", " "}, {"C136", "C274", "C271", "63.00", "111.10", " "}, {"C136", "C274", "H140", "37.50", "110.70", " "}, {"C136", "C283", "C271", "63.00", "111.10", " "}, {"C136", "C283", "H140", "37.50", "110.70", " "}, {"C136", "C283", "N238", "80.00", "109.70", " "}, {"C136", "C285", "C271", "63.00", "111.10", " "}, {"C136", "C285", "H140", "37.50", "110.70", " "}, {"C136", "C285", "N239", "80.00", "109.70", " "}, {"C136", "C292", "H140", "37.50", "110.70", " "}, {"C136", "C292", "N287", "80.00", "111.20", " "}, {"C136", "C293", "C235", "63.00", "111.10", " "}, {"C136", "C293", "H140", "37.50", "110.70", " "}, {"C136", "C293", "N287", "80.00", "111.20", " "}, {"C136", "C295", "C235", "63.00", "111.10", " "}, {"C136", "C295", "H140", "37.50", "110.70", " "}, {"C136", "C295", "N309", "80.00", "111.20", " "}, {"C136", "C296", "H140", "37.50", "110.70", " "}, {"C136", "C296", "N309", "80.00", "111.20", " "}, {"C136", "C308", "C307", "58.35", "112.70", " "}, {"C136", "C308", "H140", "37.50", "110.70", " "}, {"C136", "C500", "C501", "70.00", "128.60", " "}, {"C136", "C500", "C514", "70.00", "125.00", " "}, {"C137", "C135", "H140", "37.50", "110.70", " "}, {"C137", "C136", "C224", "58.35", "112.70", " "}, {"C137", "C136", "C283", "58.35", "112.70", " "}, {"C137", "C136", "C293", "58.35", "112.70", " "}, {"C137", "C136", "H140", "37.50", "110.70", " "}, {"C137", "C224", "C235", "63.00", "111.10", " "}, {"C137", "C224", "H140", "37.50", "110.70", " "}, {"C137", "C224", "N238", "80.00", "109.70", " "}, {"C137", "C283", "C271", "63.00", "111.10", " "}, {"C137", "C283", "H140", "37.50", "110.70", " "}, {"C137", "C283", "N238", "80.00", "109.70", " "}, {"C137", "C293", "C235", "63.00", "111.10", " "}, {"C137", "C293", "H140", "37.50", "110.70", " "}, {"C137", "C293", "N287", "80.00", "111.20", " "}, {"C145", "C145", "C145", "63.00", "120.00", " "}, {"C145", "C145", "C149", "70.00", "120.00", " "}, {"C145", "C145", "C166", "63.00", "120.00", " "}, {"C145", "C145", "C501", "63.00", "120.00", " "}, {"C145", "C145", "C502", "85.00", "120.00", " "}, {"C145", "C145", "H146", "35.00", "120.00", " "}, {"C145", "C149", "C224", "63.00", "114.00", " "}, {"C145", "C149", "C283", "63.00", "114.00", " "}, {"C145", "C149", "C293", "63.00", "114.00", " "}, {"C145", "C149", "H140", "35.00", "109.50", " "}, {"C145", "C166", "C145", "63.00", "120.00", " "}, {"C145", "C166", "O167", "70.00", "120.00", " "}, {"C145", "C501", "C500", "85.00", "134.90", " "}, {"C145", "C501", "C502", "85.00", "116.20", " "}, {"C145", "C502", "C501", "85.00", "122.70", " "}, {"C145", "C502", "N503", "70.00", "132.80", " "}, {"C149", "C224", "C235", "63.00", "111.10", " "}, {"C149", "C224", "H140", "37.50", "110.70", " "}, {"C149", "C224", "N238", "80.00", "109.70", " "}, {"C149", "C283", "C271", "63.00", "111.10", " "}, {"C149", "C283", "H140", "37.50", "110.70", " "}, {"C149", "C283", "N238", "80.00", "109.70", " "}, {"C149", "C293", "C235", "63.00", "111.10", " "}, {"C149", "C293", "H140", "37.50", "110.70", " "}, {"C149", "C293", "N287", "80.00", "111.20", " "}, {"C157", "C224", "C235", "63.00", "111.10", " "}, {"C157", "C224", "H140", "37.50", "110.70", " "}, {"C157", "C224", "N238", "80.00", "109.70", " "}, {"C157", "C283", "C271", "63.00", "111.10", " "}, {"C157", "C283", "H140", "37.50", "110.70", " "}, {"C157", "C283", "N238", "80.00", "109.70", " "}, {"C157", "C293", "C235", "63.00", "111.10", " "}, {"C157", "C293", "H140", "37.50", "110.70", " "}, {"C157", "C293", "N287", "80.00", "111.20", " "}, {"C157", "O154", "H155", "55.00", "108.50", " "}, {"C158", "C135", "H140", "37.50", "110.70", " "}, {"C158", "C224", "C235", "63.00", "111.10", " "}, {"C158", "C224", "H140", "37.50", "110.70", " "}, {"C158", "C224", "N238", "80.00", "109.70", " "}, {"C158", "C283", "C271", "63.00", "111.10", " "}, {"C158", "C283", "H140", "37.50", "110.70", " "}, {"C158", "C283", "N238", "80.00", "109.70", " "}, {"C158", "C293", "C235", "63.00", "111.10", " "}, {"C158", "C293", "H140", "37.50", "110.70", " "}, {"C158", "C293", "N287", "80.00", "111.20", " "}, {"C158", "O154", "H155", "55.00", "108.50", " "}, {"C166", "C145", "H146", "35.00", "120.00", " "}, {"C166", "O167", "H168", "35.00", "113.00", " "}, {"C206", "C224", "C235", "63.00", "111.10", " "}, {"C206", "C224", "H140", "37.50", "110.70", " "}, {"C206", "C224", "N238", "80.00", "109.70", " "}, {"C206", "C283", "C271", "63.00", "111.10", " "}, {"C206", "C283", "H140", "37.50", "110.70", " "}, {"C206", "C283", "N238", "80.00", "109.70", " "}, {"C206", "C293", "C235", "63.00", "111.10", " "}, {"C206", "C293", "H140", "37.50", "110.70", " "}, {"C206", "C293", "N287", "80.00", "111.20", " "}, {"C206", "S200", "H204", "44.00", "96.00", " "}, {"C209", "S202", "C210", "62.00", "98.90", " "}, {"C210", "C136", "C224", "58.35", "112.70", " "}, {"C210", "C136", "C283", "58.35", "112.70", " "}, {"C210", "C136", "C293", "58.35", "112.70", " "}, {"C210", "C136", "H140", "37.50", "110.70", " "}, {"C214", "C224", "C235", "63.00", "111.10", " "}, {"C214", "C224", "H140", "37.50", "110.70", " "}, {"C214", "C224", "N238", "80.00", "109.70", " "}, {"C214", "C283", "C271", "63.00", "111.10", " "}, {"C214", "C283", "H140", "37.50", "110.70", " "}, {"C214", "C283", "N238", "80.00", "109.70", " "}, {"C214", "C293", "C235", "63.00", "111.10", " "}, {"C214", "C293", "H140", "37.50", "110.70", " "}, {"C214", "C293", "N287", "80.00", "111.20", " "}, {"C214", "S203", "S203", "68.00", "103.70", " "}, {"C223", "C235", "N238", "70.00", "116.60", " "}, {"C223", "C235", "N239", "70.00", "116.60", " "}, {"C223", "C235", "O236", "80.00", "120.40", " "}, {"C223", "N238", "C235", "50.00", "121.90", " "}, {"C223", "N238", "H241", "38.00", "118.40", " "}, {"C224", "C135", "H140", "37.50", "110.70", " "}, {"C224", "C136", "C235", "63.00", "111.10", " "}, {"C224", "C136", "C267", "63.00", "111.10", " "}, {"C224", "C136", "C274", "58.35", "112.70", " "}, {"C224", "C136", "C308", "58.35", "112.70", " "}, {"C224", "C136", "C500", "63.00", "115.60", " "}, {"C224", "C136", "H140", "37.50", "110.70", " "}, {"C224", "C137", "H140", "37.50", "110.70", " "}, {"C224", "C149", "H140", "37.50", "110.70", " "}, {"C224", "C157", "H140", "37.50", "110.70", " "}, {"C224", "C157", "O154", "50.00", "109.50", " "}, {"C224", "C158", "H140", "37.50", "110.70", " "}, {"C224", "C158", "O154", "50.00", "109.50", " "}, {"C224", "C206", "H140", "37.50", "110.70", " "}, {"C224", "C206", "S200", "50.00", "108.60", " "}, {"C224", "C214", "H140", "37.50", "110.70", " "}, {"C224", "C214", "S203", "50.00", "114.70", " "}, {"C224", "C235", "N238", "70.00", "116.60", " "}, {"C224", "C235", "N239", "70.00", "116.60", " "}, {"C224", "C235", "O236", "80.00", "120.40", " "}, {"C223", "C267", "O268", "70.00", "108.00", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O268", "70.00", "108.00", " "}, {"C223", "C267", "O269", "80.00", "120.40", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O269", "80.00", "120.40", " "}, {"C224", "C274", "C271", "63.00", "111.10", " "}, {"C224", "C274", "H140", "37.50", "110.70", " "}, {"C224", "C505", "C507", "63.00", "114.00", " "}, {"C224", "C505", "C508", "63.00", "114.00", " "}, {"C224", "C505", "C510", "63.00", "114.00", " "}, {"C224", "C505", "H140", "37.50", "110.70", " "}, {"C224", "N238", "C235", "50.00", "121.90", " "}, {"C224", "N238", "H241", "38.00", "118.40", " "}, {"C235", "C135", "H140", "35.00", "109.50", " "}, {"C235", "C136", "C283", "63.00", "111.10", " "}, {"C235", "C136", "C293", "63.00", "111.10", " "}, {"C235", "C136", "H140", "35.00", "109.50", " "}, {"C235", "C223", "H140", "35.00", "109.50", " "}, {"C235", "C223", "N238", "63.00", "110.10", " "}, {"C235", "C224", "C274", "63.00", "111.10", " "}, {"C235", "C224", "C505", "63.00", "111.10", " "}, {"C235", "C224", "H140", "35.00", "109.50", " "}, {"C235", "C224", "N238", "63.00", "110.10", " "}, {"C235", "C246", "H140", "35.00", "109.50", " "}, {"C235", "C246", "N239", "63.00", "110.10", " "}, {"C235", "C292", "H140", "35.00", "109.50", " "}, {"C235", "C292", "N287", "80.00", "111.20", " "}, {"C235", "C293", "C274", "63.00", "111.10", " "}, {"C235", "C293", "C505", "63.00", "111.10", " "}, {"C235", "C293", "H140", "35.00", "109.50", " "}, {"C235", "C293", "N287", "80.00", "111.20", " "}, {"C235", "C295", "H140", "35.00", "109.50", " "}, {"C235", "C295", "N309", "80.00", "111.20", " "}, {"C235", "N237", "H240", "35.00", "119.80", " "}, {"C235", "N238", "C242", "50.00", "121.90", " "}, {"C235", "N238", "C283", "50.00", "121.90", " "}, {"C235", "N238", "C284", "50.00", "121.90", " "}, {"C235", "N238", "H241", "35.00", "119.80", " "}, {"C235", "N239", "C245", "50.00", "121.90", " "}, {"C235", "N239", "C246", "50.00", "121.90", " "}, {"C235", "N239", "C285", "50.00", "121.90", " "}, {"C242", "N238", "H241", "38.00", "118.40", " "}, {"C245", "C136", "H140", "37.50", "110.70", " "}, {"C245", "N238", "C285", "50.00", "118.00", " "}, {"C245", "N239", "C246", "50.00", "118.00", " "}, {"C245", "N239", "C285", "50.00", "118.00", " "}, {"C246", "C136", "H140", "37.50", "110.70", " "}, {"C246", "C235", "N238", "70.00", "116.60", " "}, {"C246", "C235", "N239", "70.00", "116.60", " "}, {"C246", "C235", "O236", "80.00", "120.40", " "}, {"C267", "C136", "C283", "63.00", "111.10", " "}, {"C267", "C136", "C293", "63.00", "111.10", " "}, {"C267", "C136", "H140", "35.00", "109.50", " "}, {"C267", "C223", "H140", "35.00", "109.50", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "H140", "35.00", "109.50", " "}, {"C267", "C223", "N238", "63.00", "110.10", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "N238", "63.00", "110.10", " "}, {"C267", "O268", "H270", "35.00", "113.00", " "}, {"C271", "C274", "C283", "63.00", "111.10", " "}, {"C271", "C274", "C293", "63.00", "111.10", " "}, {"C271", "C274", "H140", "35.00", "109.50", " "}, {"C271", "C283", "C274", "63.00", "111.10", " "}, {"C271", "C283", "C505", "63.00", "111.10", " "}, {"C271", "C283", "H140", "35.00", "109.50", " "}, {"C271", "C283", "N238", "63.00", "110.10", " "}, {"C271", "C284", "H140", "35.00", "109.50", " "}, {"C271", "C284", "N238", "63.00", "110.10", " "}, {"C271", "C285", "H140", "35.00", "109.50", " "}, {"C271", "C285", "N239", "63.00", "110.10", " "}, {"C274", "C136", "C283", "58.35", "112.70", " "}, {"C274", "C136", "C293", "58.35", "112.70", " "}, {"C274", "C136", "H140", "37.50", "110.70", " "}, {"C274", "C224", "H140", "37.50", "110.70", " "}, {"C274", "C224", "N238", "80.00", "109.70", " "}, {"C274", "C271", "O272", "70.00", "117.00", " "}, {"C274", "C283", "H140", "37.50", "110.70", " "}, {"C274", "C283", "N238", "80.00", "109.70", " "}, {"C274", "C293", "H140", "37.50", "110.70", " "}, {"C274", "C293", "N287", "80.00", "111.20", " "}, {"C283", "C135", "H140", "37.50", "110.70", " "}, {"C283", "C136", "C308", "58.35", "112.70", " "}, {"C283", "C136", "C500", "63.00", "115.60", " "}, {"C283", "C136", "H140", "37.50", "110.70", " "}, {"C283", "C137", "H140", "37.50", "110.70", " "}, {"C283", "C149", "H140", "37.50", "110.70", " "}, {"C283", "C157", "H140", "37.50", "110.70", " "}, {"C283", "C157", "O154", "50.00", "109.50", " "}, {"C283", "C158", "H140", "37.50", "110.70", " "}, {"C283", "C158", "O154", "50.00", "109.50", " "}, {"C283", "C206", "H140", "37.50", "110.70", " "}, {"C283", "C206", "S200", "50.00", "108.60", " "}, {"C283", "C214", "H140", "37.50", "110.70", " "}, {"C283", "C214", "S203", "50.00", "114.70", " "}, {"C283", "C271", "O272", "70.00", "117.00", " "}, {"C283", "C274", "H140", "37.50", "110.70", " "}, {"C283", "C505", "C507", "63.00", "114.00", " "}, {"C283", "C505", "C508", "63.00", "114.00", " "}, {"C283", "C505", "C510", "63.00", "114.00", " "}, {"C283", "C505", "H140", "37.50", "110.70", " "}, {"C283", "N238", "H241", "38.00", "118.40", " "}, {"C284", "C271", "O272", "70.00", "117.00", " "}, {"C284", "N238", "H241", "38.00", "118.40", " "}, {"C285", "C136", "H140", "37.50", "110.70", " "}, {"C285", "C271", "O272", "70.00", "117.00", " "}, {"C292", "C136", "H140", "37.50", "110.70", " "}, {"C292", "C235", "N238", "70.00", "116.60", " "}, {"C292", "C235", "N239", "70.00", "116.60", " "}, {"C292", "C235", "O236", "80.00", "120.40", " "}, {"C292", "N287", "H290", "35.00", "109.50", " "}, {"C293", "C135", "H140", "37.50", "110.70", " "}, {"C293", "C136", "C308", "58.35", "112.70", " "}, {"C293", "C136", "C500", "63.00", "115.60", " "}, {"C293", "C136", "H140", "37.50", "110.70", " "}, {"C293", "C137", "H140", "37.50", "110.70", " "}, {"C293", "C149", "H140", "37.50", "110.70", " "}, {"C293", "C157", "H140", "37.50", "110.70", " "}, {"C293", "C157", "O154", "50.00", "109.50", " "}, {"C293", "C158", "H140", "37.50", "110.70", " "}, {"C293", "C158", "O154", "50.00", "109.50", " "}, {"C293", "C206", "H140", "37.50", "110.70", " "}, {"C293", "C206", "S200", "50.00", "108.60", " "}, {"C293", "C214", "H140", "37.50", "110.70", " "}, {"C293", "C214", "S203", "50.00", "114.70", " "}, {"C293", "C235", "N238", "70.00", "116.60", " "}, {"C293", "C235", "N239", "70.00", "116.60", " "}, {"C293", "C235", "O236", "80.00", "120.40", " "}, {"C293", "C274", "H140", "37.50", "110.70", " "}, {"C293", "C505", "C507", "63.00", "114.00", " "}, {"C293", "C505", "C508", "63.00", "114.00", " "}, {"C293", "C505", "C510", "63.00", "114.00", " "}, {"C293", "C505", "H140", "37.50", "110.70", " "}, {"C293", "N287", "H290", "35.00", "109.50", " "}, {"C295", "C136", "H140", "37.50", "110.70", " "}, {"C295", "C235", "N238", "70.00", "116.60", " "}, {"C295", "C235", "N239", "70.00", "116.60", " "}, {"C295", "C235", "O236", "80.00", "120.40", " "}, {"C295", "N309", "C296", "50.00", "113.00", " "}, {"C295", "N309", "H310", "35.00", "109.50", " "}, {"C296", "C136", "H140", "37.50", "110.70", " "}, {"C296", "N309", "H310", "35.00", "109.50", " "}, {"C302", "N300", "H301", "35.00", "120.00", " "}, {"C302", "N303", "C307", "50.00", "123.20", " "}, {"C302", "N303", "H304", "35.00", "120.00", " "}, {"C307", "C308", "H140", "37.50", "110.70", " "}, {"C307", "N303", "H304", "35.00", "118.40", " "}, {"C308", "C136", "H140", "37.50", "110.70", " "}, {"C308", "C307", "H140", "37.50", "110.70", " "}, {"C308", "C307", "N303", "80.00", "111.20", " "}, {"C500", "C136", "H140", "35.00", "109.50", " "}, {"C500", "C501", "C502", "85.00", "108.80", " "}, {"C500", "C514", "H146", "35.00", "120.00", " "}, {"C500", "C514", "N503", "70.00", "108.70", " "}, {"C501", "C145", "H146", "35.00", "120.00", " "}, {"C501", "C500", "C514", "85.00", "106.40", " "}, {"C501", "C502", "N503", "70.00", "104.40", " "}, {"C502", "C145", "H146", "35.00", "120.00", " "}, {"C502", "N503", "C514", "70.00", "111.60", " "}, {"C502", "N503", "H504", "35.00", "123.10", " "}, {"C505", "C224", "H140", "37.50", "110.70", " "}, {"C505", "C224", "N238", "80.00", "109.70", " "}, {"C505", "C283", "H140", "37.50", "110.70", " "}, {"C505", "C283", "N238", "80.00", "109.70", " "}, {"C505", "C293", "H140", "37.50", "110.70", " "}, {"C505", "C293", "N287", "80.00", "111.20", " "}, {"C505", "C507", "C508", "70.00", "130.70", " "}, {"C505", "C507", "N511", "70.00", "124.50", " "}, {"C505", "C508", "C507", "70.00", "130.70", " "}, {"C505", "C508", "N503", "70.00", "121.60", " "}, {"C505", "C510", "C510", "70.00", "130.70", " "}, {"C505", "C510", "N512", "70.00", "121.60", " "}, {"C506", "N503", "C508", "70.00", "109.80", " "}, {"C506", "N503", "H504", "35.00", "124.00", " "}, {"C506", "N511", "C507", "70.00", "110.00", " "}, {"C507", "C505", "H140", "35.00", "109.50", " "}, {"C507", "C508", "H146", "35.00", "130.70", " "}, {"C507", "C508", "N503", "70.00", "106.30", " "}, {"C508", "C505", "H140", "35.00", "109.50", " "}, {"C508", "C507", "H146", "35.00", "128.20", " "}, {"C508", "C507", "N511", "70.00", "111.00", " "}, {"C508", "N503", "H504", "35.00", "124.00", " "}, {"C509", "N512", "C510", "70.00", "109.80", " "}, {"C509", "N512", "H513", "35.00", "124.00", " "}, {"C510", "C505", "H140", "35.00", "109.50", " "}, {"C510", "C510", "H146", "35.00", "130.70", " "}, {"C510", "C510", "N512", "70.00", "106.30", " "}, {"C510", "N512", "H513", "35.00", "124.00", " "}, {"C514", "N503", "H504", "35.00", "124.00", " "}, {"H140", "C157", "O154", "35.00", "109.50", " "}, {"H140", "C158", "O154", "35.00", "109.50", " "}, {"H140", "C206", "S200", "35.00", "109.50", " "}, {"H140", "C209", "S202", "35.00", "109.50", " "}, {"H140", "C210", "S202", "35.00", "109.50", " "}, {"H140", "C214", "S203", "35.00", "109.50", " "}, {"H140", "C223", "N238", "35.00", "109.50", " "}, {"H140", "C224", "N238", "35.00", "109.50", " "}, {"H140", "C242", "N238", "35.00", "109.50", " "}, {"H140", "C245", "N239", "35.00", "109.50", " "}, {"H140", "C246", "N239", "35.00", "109.50", " "}, {"H140", "C283", "N238", "35.00", "109.50", " "}, {"H140", "C284", "N238", "35.00", "109.50", " "}, {"H140", "C285", "N239", "35.00", "109.50", " "}, {"H140", "C292", "N287", "35.00", "109.50", " "}, {"H140", "C293", "N287", "35.00", "109.50", " "}, {"H140", "C295", "N309", "35.00", "109.50", " "}, {"H140", "C296", "N309", "35.00", "109.50", " "}, {"H140", "C307", "N303", "35.00", "109.50", " "}, {"H146", "C506", "N503", "35.00", "120.00", " "}, {"H146", "C506", "N511", "35.00", "120.00", " "}, {"H146", "C507", "N511", "35.00", "120.00", " "}, {"H146", "C508", "N503", "35.00", "121.60", " "}, {"H146", "C509", "N512", "35.00", "120.00", " "}, {"H146", "C510", "N512", "35.00", "120.00", " "}, {"H146", "C514", "N503", "35.00", "121.60", " "}, {"H240", "N237", "H240", "35.00", "120.00", " "}, {"H301", "N300", "H301", "35.00", "120.00", " "}, {"N237", "C235", "O236", "80.00", "122.90", " "}, {"N238", "C235", "O236", "80.00", "122.90", " "}, {"N239", "C235", "O236", "80.00", "122.90", " "}, {"N300", "C302", "N300", "70.00", "120.00", " "}, {"N300", "C302", "N303", "70.00", "120.00", " "}, {"N503", "C506", "N511", "70.00", "120.00", " "}, {"N512", "C509", "N512", "70.00", "120.00", " "}, {"O268", "C267", "O269", "80.00", "121.00", " "}, {"O272", "C271", "O272", "80.00", "126.00", " "}, {"C183", "O186", "C933", "110.00", "115.000", " "}, {"H196", "C933", "O186", "35.00", "109.500", " "}, {"C320", "N321", "C322", "70.00", "126.400", " "}, {"C320", "N321", "H327", "35.00", "116.800", " "}, {"C324", "N938", "C320", "70.00", "121.600", " "}, {"N321", "C322", "O328", "80.00", "120.600", " "}, {"N321", "C322", "C323", "70.00", "114.100", " "}, {"O326", "C320", "N321", "80.00", "120.600", " "}, {"H327", "N321", "C322", "35.00", "116.800", " "}, {"C322", "C323", "C324", "85.00", "120.700", " "}, {"C322", "C323", "H329", "35.00", "119.700", " "}, {"O328", "C322", "C323", "80.00", "125.300", " "}, {"H329", "C323", "C324", "35.00", "120.000", " "}, {"H196", "C933", "C174", "37.50", "110.700", " "}, {"O186", "C933", "C174", "90.00", "106.000", " "}, {"N938", "C933", "O186", "50.00", "109.500", " "}, {"C933", "C174", "H176", "37.50", "110.700", " "}, {"C933", "C174", "O169", "50.00", "109.500", " "}, {"C933", "C174", "C174", "110.00", "96.000", " "}, {"C933", "N938", "C324", "70.00", "121.200", " "}, {"C320", "N938", "C933", "70.00", "117.600", " "}, {"N938", "C320", "O326", "80.00", "120.900", " "}, {"N938", "C320", "N321", "70.00", "115.400", " "}, {"C323", "C324", "N938", "70.00", "121.200", " "}, {"N938", "C324", "H330", "35.00", "119.100", " "}, {"N938", "C933", "H196", "35.00", "109.500", " "}, {"N938", "C933", "C174", "50.00", "109.500", " "}, {"H330", "C324", "C323", "35.00", "120.000", " "}, {"C336", "N335", "C334", "70.00", "120.500", " "}, {"N335", "C336", "N341", "70.00", "119.300", " "}, {"C337", "C336", "N335", "70.00", "121.500", " "}, {"C183", "O186", "C932", "110.00", "115.000", " "}, {"H196", "C932", "O186", "35.00", "109.500", " "}, {"O186", "C932", "C174", "90.00", "106.000", " "}, {"N937", "C932", "O186", "50.00", "109.500", " "}, {"C338", "C337", "H344", "35.00", "120.000", " "}, {"C334", "N937", "C338", "70.00", "121.600", " "}, {"O340", "C334", "N335", "80.00", "122.500", " "}, {"C336", "N341", "H343", "35.00", "120.000", " "}, {"C336", "N341", "H342", "35.00", "120.000", " "}, {"C338", "C337", "C336", "85.00", "117.000", " "}, {"H344", "C337", "C336", "35.00", "123.300", " "}, {"C337", "C336", "N341", "70.00", "120.100", " "}, {"H343", "N341", "H342", "35.00", "113.000", " "}, {"H196", "C932", "C174", "37.50", "110.700", " "}, {"C932", "C174", "H176", "37.50", "110.700", " "}, {"C932", "C174", "O169", "50.00", "109.500", " "}, {"C932", "C174", "C174", "110.00", "96.000", " "}, {"C338", "N937", "C932", "70.00", "121.200", " "}, {"C932", "N937", "C334", "70.00", "117.600", " "}, {"N937", "C334", "O340", "80.00", "120.900", " "}, {"N335", "C334", "N937", "70.00", "118.600", " "}, {"N937", "C338", "C337", "70.00", "121.200", " "}, {"N937", "C338", "H345", "35.00", "119.100", " "}, {"N937", "C932", "H196", "35.00", "109.500", " "}, {"N937", "C932", "C174", "50.00", "109.500", " "}, {"H345", "C338", "C337", "35.00", "119.700", " "}, {"O370", "C366", "N361", "80.00", "120.600", " "}, {"C364", "C365", "C366", "85.00", "119.200", " "}, {"C365", "N352", "C353", "70.00", "103.800", " "}, {"C365", "C366", "O370", "80.00", "128.800", " "}, {"C364", "C365", "N352", "70.00", "111.000", " "}, {"N361", "C362", "N363", "70.00", "123.300", " "}, {"C362", "N368", "H369", "35.00", "120.000", " "}, {"N352", "C365", "C366", "70.00", "130.000", " "}, {"C365", "C366", "N361", "70.00", "111.300", " "}, {"C366", "N361", "H367", "35.00", "116.800", " "}, {"N936", "C364", "C365", "70.00", "106.200", " "}, {"H369", "N368", "H369", "35.00", "113.000", " "}, {"N363", "C364", "C365", "70.00", "127.700", " "}, {"C366", "N361", "C362", "70.00", "125.200", " "}, {"H367", "N361", "C362", "35.00", "118.000", " "}, {"N936", "C364", "N363", "70.00", "126.200", " "}, {"C362", "N363", "C364", "70.00", "112.200", " "}, {"C353", "N936", "C364", "70.00", "105.400", " "}, {"N368", "C362", "N363", "70.00", "119.300", " "}, {"N361", "C362", "N368", "70.00", "116.000", " "}, {"C364", "N936", "C931", "70.00", "125.800", " "}, {"C183", "C6448", "H140", "37.5", "110.700", " "}, {"P440", "O6452", "P6450", "50.00", "150.000", " "}, {"O441", "P6450", "O6452", "100.00", "108.230", " "}, {"O441", "P6450", "O441", "140.00", "119.900", " "}, {"C6448", "O6934", "P440", "100.00", "120.500", " "}, {"C6448", "C183", "H185", "37.50", "110.700", " "}, {"C174", "C183", "C6448", "58.35", "112.700", " "}, {"C6448", "C183", "O186", "50.00", "109.500", " "}, {"H140", "C6448", "H140", "33.0", "107.800", " "}, {"O6452", "P440", "O6934", "45.00", "102.600", " "}, {"O441", "P440", "O6934", "100.00", "108.230", " "}, {"H140", "C6448", "O6934", "35.00", "109.500", " "}, {"C183", "C6448", "O6934", "50.00", "109.500", " "}, {"P440", "O6452", "P440", "50.00", "150.000", " "}, {"O441", "P440", "O6452", "100.00", "108.230", " "}, {"O441", "P440", "O441", "140.00", "119.900", " "}, {"O6442", "P440", "O6452", "45.00", "102.600", " "}, {"P440", "O6442", "P6450", "50.00", "150.000", " "}, {"O441", "P440", "O6442", "100.00", "108.230", " "}, {"O6441", "P6450", "O6442", "100.00", "108.230", " "}, {"O6441", "P6450", "O6441", "140.00", "119.900", " "}, {"C931", "N936", "C353", "70.00", "128.800", " "}, {"N936", "C931", "C174", "50.00", "109.500", " "}, {"N936", "C931", "O186", "50.00", "109.500", " "}, {"N936", "C931", "H196", "35.00", "109.500", " "}, {"C931", "C174", "C174", "110.00", "96.500", " "}, {"C931", "C174", "O169", "50.00", "109.500", " "}, {"C931", "C174", "H176", "37.50", "110.700", " "}, {"C174", "C174", "C183", "60.00", "100.000", " "}, {"C174", "C174", "H176", "37.50", "110.700", " "}, {"C174", "C183", "C157", "58.35", "112.700", " "}, {"C174", "C183", "H185", "37.50", "110.700", " "}, {"C183", "C157", "O154", "50.00", "109.500", " "}, {"C183", "C157", "H140", "37.50", "110.700", " "}, {"C174", "O169", "H170", "55.00", "108.500", " "}, {"N936", "C349", "C350", "70.00", "106.200", " "}, {"N936", "C349", "N348", "70.00", "126.200", " "}, {"C349", "C350", "C351", "85.00", "117.300", " "}, {"C349", "C350", "N352", "70.00", "111.000", " "}, {"C350", "C351", "N356", "70.00", "123.500", " "}, {"C350", "C351", "N346", "70.00", "117.300", " "}, {"C351", "N356", "H357", "35.00", "120.000", " "}, {"C351", "N356", "H358", "35.00", "120.000", " "}, {"C351", "N346", "C347", "70.00", "118.600", " "}, {"N346", "C347", "H355", "35.00", "115.450", " "}, {"N936", "C353", "H359", "35.00", "123.050", " "}, {"C349", "N936", "C931", "70.00", "125.800", " "}, {"C353", "N936", "C349", "70.00", "105.400", " "}, {"O186", "C931", "C174", "90.00", "106.000", " "}, {"H196", "C931", "C174", "37.50", "110.700", " "}, {"H196", "C931", "O186", "35.00", "109.500", " "}, {"N348", "C349", "C350", "70.00", "127.700", " "}, {"N352", "C353", "N936", "70.00", "113.900", " "}, {"H359", "C353", "N352", "35.00", "123.050", " "}, {"O169", "C174", "C174", "50.00", "109.500", " "}, {"H176", "C174", "O169", "35.00", "109.500", " "}, {"C183", "O186", "C931", "110.00", "115.000", " "}, {"O169", "C174", "C183", "50.00", "109.500", " "}, {"H176", "C174", "C183", "37.50", "110.700", " "}, {"C174", "C183", "O186", "100.00", "109.500", " "}, {"C157", "C183", "O186", "50.00", "109.500", " "}, {"H185", "C183", "O186", "35.00", "109.500", " "}, {"H185", "C183", "C157", "37.50", "110.700", " "}, {"N352", "C350", "C351", "70.00", "132.400", " "}, {"C347", "N348", "C349", "70.00", "111.000", " "}, {"N346", "C351", "N356", "70.00", "119.300", " "}, {"C350", "N352", "C353", "70.00", "103.800", " "}, {"H358", "N356", "H357", "35.00", "113.000", " "}, {"N346", "C347", "N348", "70.00", "129.100", " "}, {"H355", "C347", "N348", "35.00", "115.450", " "}}; /* Dihedrals */ char * OPLSAAR_dihedrals[2482][8]= {{"X", "C145", "C145", "X", "3.6250", "2", "180.0", " "}, {"X", "C145", "C166", "X", "3.6250", "2", "180.0", " "}, {"X", "C145", "C501", "X", "3.5000", "2", "180.0", " "}, {"X", "C145", "C502", "X", "3.6250", "2", "180.0", " "}, {"X", "C302", "N300", "X", "1.9500", "2", "180.0", " "}, {"X", "C500", "C501", "X", "1.6750", "2", "180.0", " "}, {"X", "C500", "C514", "X", "6.5250", "2", "180.0", " "}, {"X", "C501", "C502", "X", "3.0000", "2", "180.0", " "}, {"X", "C502", "N503", "X", "1.5250", "2", "180.0", " "}, {"X", "C506", "N503", "X", "2.3250", "2", "180.0", " "}, {"X", "C506", "N511", "X", "5.0000", "2", "180.0", " "}, {"X", "C507", "C508", "X", "5.3750", "2", "180.0", " "}, {"X", "C507", "N511", "X", "2.4000", "2", "180.0", " "}, {"X", "C509", "N512", "X", "2.3250", "2", "180.0", " "}, {"X", "C510", "C510", "X", "5.3750", "2", "180.0", " "}, {"X", "C514", "N503", "X", "1.5000", "2", "180.0", " "}, {"O6934", "P440", "O6934", "C157", "0.2500", "1", "0.0", "Alpha"}, {"O6934", "P440", "O6934", "C157", "-0.4000", "2", "180.0", " "}, {"O6934", "P440", "O6934", "C157", "0.2000", "3", "0.0", " "}, {"O6934", "P440", "O6934", "C157", "0.0000", "4", "180.0", " "}, {"O441", "P440", "O6934", "C157", "-0.4500", "1", "0.0", "Alpha prime"}, {"O441", "P440", "O6934", "C157", "0.8500", "2", "180.0", " "}, {"O441", "P440", "O6934", "C157", "0.2000", "3", "0.0", " "}, {"O441", "P440", "O6934", "C157", "0.0000", "4", "180.0", " "}, {"C174", "O6934", "P440", "O441", "-0.4000", "1", "0.0", "Zeta prime"}, {"C174", "O6934", "P440", "O441", "-0.2150", "2", "180.0", " "}, {"C174", "O6934", "P440", "O441", "0.7200", "3", "0.0", " "}, {"C174", "O6934", "P440", "O441", "0.0000", "4", "180.0", " "}, {"C174", "O6934", "P440", "O6934", "0.1900", "1", "0.0", "Zeta"}, {"C174", "O6934", "P440", "O6934", "-1.5100", "2", "180.0", " "}, {"C174", "O6934", "P440", "O6934", "-0.1500", "3", "0.0", " "}, {"C174", "O6934", "P440", "O6934", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "O6934", "4.5330", "1", "0.0", "Technically a Sugar"}, {"O169", "C174", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "O6934", "0.0000", "4", "0.0", " "}, {"P440", "O6934", "C157", "C183", "1.7100", "1", "0.0", "Beta"}, {"P440", "O6934", "C157", "C183", "-0.3100", "2", "180.0", " "}, {"P440", "O6934", "C157", "C183", "0.0500", "3", "0.0", " "}, {"P440", "O6934", "C157", "C183", "0.0000", "4", "180.0", " "}, {"C174", "C174", "O6934", "P440", "0.1000", "1", "0.0", "Epsilon"}, {"C174", "C174", "O6934", "P440", "-0.5500", "2", "180.0", " "}, {"C174", "C174", "O6934", "P440", "-0.0500", "3", "0.0", " "}, {"C174", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C157", "O6934", "-0.8500", "1", "0.0", "Gamma"}, {"C174", "C183", "C157", "O6934", "-0.7000", "2", "180.0", " "}, {"C174", "C183", "C157", "O6934", "1.4000", "3", "0.0", " "}, {"C174", "C183", "C157", "O6934", "0.0000", "4", "180.0", " "}, {"C931", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C931", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C931", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C931", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C933", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C933", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C933", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C932", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C932", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C932", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"O6934", "C157", "C183", "O186", "1.9595", "1", "0.0", "Gamma Prime"}, {"O6934", "C157", "C183", "O186", "-1.0000", "2", "180.0", " "}, {"O6934", "C157", "C183", "O186", "-0.8500", "3", "0.0", " "}, {"O6934", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "O6934", "2.1595", "1", "0.0", "Sugar"}, {"O186", "C183", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"H176", "C174", "O6934", "P440", "0.0000", "1", "0.0", "Epsilon Double Prime"}, {"H176", "C174", "O6934", "P440", "0.0000", "2", "180.0", " "}, {"H176", "C174", "O6934", "P440", "0.1500", "3", "0.0", " "}, {"H176", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"P440", "O6934", "C157", "H140", "0.0000", "1", "0.0", "Beta Prime"}, {"P440", "O6934", "C157", "H140", "0.0000", "2", "180.0", " "}, {"P440", "O6934", "C157", "H140", "0.1500", "3", "0.0", " "}, {"P440", "O6934", "C157", "H140", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "O6934", "0.0000", "1", "0.0", "Sugar Pucker"}, {"H185", "C183", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "O6934", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "O6934", "0.0000", "1", "0.0", "Sugar"}, {"H176", "C174", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "O6934", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"O6934", "C157", "C183", "H185", "0.0000", "1", "0.0", "Sugar"}, {"O6934", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"O6934", "C157", "C183", "H185", "0.2340", "3", "0.0", " "}, {"O6934", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C183", "C174", "O6934", "P440", "0.1400", "1", "0.0", "Epsilon Prime"}, {"C183", "C174", "O6934", "P440", "-0.6100", "2", "180.0", " "}, {"C183", "C174", "O6934", "P440", "-0.8000", "3", "0.0", " "}, {"C183", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar Pucker"}, {"C157", "C183", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C157", "C183", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C157", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C135", "C136", "C137", "C135", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C135", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C135", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C224", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C224", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C224", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C283", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C283", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C283", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C293", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C293", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C293", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C136", "C224", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C224", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C224", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "C283", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C283", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C283", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "C293", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C293", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C293", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C135", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C135", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C135", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C135", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C135", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C135", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C135", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C135", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C135", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C135", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C135", "C224", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C135", "C224", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C135", "C224", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C135", "C224", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C135", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C135", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C135", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C135", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C135", "C235", "N238", "C223", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N238", "C223", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C135", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C135", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C135", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C135", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C135", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C135", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C135", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C135", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C135", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C135", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C135", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C135", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C135", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C135", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C136", "C136", "C224", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C224", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C224", "0.1000", "3", "0.0", " "}, {"C267", "C136", "C136", "C224", "0.6500", "1", "0.0", "protonated Glu, adm jr."}, {"C267", "C136", "C136", "C224", "-0.1000", "2", "180.0", "protonated Glu, adm jr."}, {"C267", "C136", "C136", "C224", "0.1000", "3", "0.0", "protonated Glu, adm jr."}, {"C136", "C136", "C136", "C283", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C283", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C283", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "C292", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C292", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C292", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "C293", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C293", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C293", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C267", "C136", "C136", "H140", "0.1500", "3", "0.0", "protonated Glu, adm jr."}, {"C136", "C136", "C224", "C235", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C224", "C235", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C224", "N238", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C224", "N238", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C224", "N238", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C235", "N237", "1.4220", "1", "0.0", " "}, {"C136", "C136", "C235", "N237", "-0.1805", "2", "180.0", " "}, {"C136", "C136", "C235", "N237", "-0.1625", "3", "0.0", " "}, {"C136", "C136", "C235", "O236", "0.2030", "1", "0.0", " "}, {"C136", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C136", "C136", "C235", "O236", "0.0695", "3", "0.0", " "}, {"C136", "C136", "C245", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C245", "N239", "0.4225", "1", "0.0", " "}, {"C136", "C136", "C245", "N239", "-0.4810", "2", "180.0", " "}, {"C136", "C136", "C245", "N239", "0.3565", "3", "0.0", " "}, {"C136", "C136", "C246", "C235", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C246", "C235", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C246", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C246", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C246", "N239", "0.7860", "1", "0.0", " "}, {"C136", "C136", "C246", "N239", "0.0795", "2", "180.0", " "}, {"C136", "C136", "C246", "N239", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C136", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C136", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C136", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C136", "C136", "C283", "C271", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C283", "C271", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C283", "N238", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C283", "N238", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C283", "N238", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C285", "C271", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C285", "C271", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C285", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C285", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C285", "N239", "0.7860", "1", "0.0", " "}, {"C136", "C136", "C285", "N239", "0.0795", "2", "180.0", " "}, {"C136", "C136", "C285", "N239", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C292", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C292", "N287", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C292", "N287", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C292", "N287", "0.2425", "3", "0.0", " "}, {"C136", "C136", "C293", "C235", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C293", "C235", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C293", "N287", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C293", "N287", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C293", "N287", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C295", "C235", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C295", "C235", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C295", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C295", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C295", "N309", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C295", "N309", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C295", "N309", "0.2425", "3", "0.0", " "}, {"C136", "C136", "C296", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C296", "N309", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C296", "N309", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C296", "N309", "0.2425", "3", "0.0", " "}, {"C136", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C136", "C210", "S202", "C209", "0.4625", "1", "0.0", " "}, {"C136", "C210", "S202", "C209", "-0.2880", "2", "180.0", " "}, {"C136", "C210", "S202", "C209", "0.3385", "3", "0.0", " "}, {"C136", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C136", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C136", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C136", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C136", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C136", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C136", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C136", "C235", "N237", "H240", "2.4500", "2", "180.0", " "}, {"C136", "C245", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C245", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C245", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C245", "N239", "C246", "1.4295", "1", "0.0", " "}, {"C136", "C245", "N239", "C246", "1.0290", "2", "180.0", " "}, {"C136", "C245", "N239", "C246", "-5.6330", "3", "0.0", " "}, {"C136", "C245", "N239", "C285", "1.4295", "1", "0.0", " "}, {"C136", "C245", "N239", "C285", "1.0290", "2", "180.0", " "}, {"C136", "C245", "N239", "C285", "-5.6330", "3", "0.0", " "}, {"C136", "C246", "C235", "N238", "2.5145", "1", "0.0", " "}, {"C136", "C246", "C235", "N238", "0.3595", "2", "180.0", " "}, {"C136", "C246", "C235", "N238", "1.1200", "3", "0.0", " "}, {"C136", "C246", "C235", "N239", "2.5145", "1", "0.0", " "}, {"C136", "C246", "C235", "N239", "0.3595", "2", "180.0", " "}, {"C136", "C246", "C235", "N239", "1.1200", "3", "0.0", " "}, {"C136", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C246", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C246", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C246", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C246", "N239", "C245", "2.3765", "1", "0.0", " "}, {"C136", "C246", "N239", "C245", "-0.3670", "2", "180.0", " "}, {"C136", "C267", "O268", "H270", "0.7500", "1", "0.0", " "}, {"C136", "C267", "O268", "H270", "2.7500", "2", "180.0", " "}, {"C136", "C274", "C271", "O272", "0.2730", "2", "180.0", " "}, {"C136", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C136", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C136", "C285", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C136", "C285", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C285", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C285", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C285", "N239", "C245", "2.3765", "1", "0.0", " "}, {"C136", "C285", "N239", "C245", "-0.3670", "2", "180.0", " "}, {"C136", "C292", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C136", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C136", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C136", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C136", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C136", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C136", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C295", "C235", "N238", "2.5145", "1", "0.0", " "}, {"C136", "C295", "C235", "N238", "0.3595", "2", "180.0", " "}, {"C136", "C295", "C235", "N238", "1.1200", "3", "0.0", " "}, {"C136", "C295", "C235", "N239", "2.5145", "1", "0.0", " "}, {"C136", "C295", "C235", "N239", "0.3595", "2", "180.0", " "}, {"C136", "C295", "C235", "N239", "1.1200", "3", "0.0", " "}, {"C136", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C295", "N309", "C296", "0.71895", "1", "0.0", " "}, {"C136", "C295", "N309", "C296", "-0.0619", "2", "180.0", " "}, {"C136", "C295", "N309", "C296", "0.13195", "3", "0.0", " "}, {"C136", "C295", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C136", "C296", "N309", "C295", "0.71895", "1", "0.0", " "}, {"C136", "C296", "N309", "C295", "-0.0619", "2", "180.0", " "}, {"C136", "C296", "N309", "C295", "0.13195", "3", "0.0", " "}, {"C136", "C296", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C136", "C308", "C307", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C308", "C307", "N303", "1.3660", "1", "0.0", " "}, {"C136", "C308", "C307", "N303", "-0.1145", "2", "180.0", " "}, {"C136", "C308", "C307", "N303", "0.2425", "3", "0.0", " "}, {"C137", "C136", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C224", "C235", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C224", "C235", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C224", "N238", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C224", "N238", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C224", "N238", "0.1000", "3", "0.0", " "}, {"C137", "C136", "C283", "C271", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C283", "C271", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C283", "N238", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C283", "N238", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C283", "N238", "0.1000", "3", "0.0", " "}, {"C137", "C136", "C293", "C235", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C293", "C235", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C293", "N287", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C293", "N287", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C293", "N287", "0.1000", "3", "0.0", " "}, {"C137", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C137", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C137", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C137", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C137", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C137", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C137", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C137", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C137", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C137", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C137", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C137", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C137", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C137", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C137", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C137", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C137", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C137", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C137", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C137", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C137", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C137", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C137", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C137", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C145", "C145", "C149", "C224", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "C283", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "C293", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "H140", "0.0000", "1", "0.0", " "}, {"C145", "C149", "C224", "C235", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C224", "C235", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C224", "N238", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C224", "N238", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C224", "N238", "0.1830", "3", "0.0", " "}, {"C145", "C149", "C283", "C271", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C283", "C271", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C283", "N238", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C283", "N238", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C283", "N238", "0.1830", "3", "0.0", " "}, {"C145", "C149", "C293", "C235", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C293", "C235", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C293", "N287", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C293", "N287", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C293", "N287", "0.1830", "3", "0.0", " "}, {"C145", "C166", "C145", "H146", "3.6250", "2", "180.0", " "}, {"C145", "C166", "O167", "H168", "0.8410", "2", "180.0", " "}, {"C145", "C501", "C500", "C514", "1.6750", "2", "180.0", " "}, {"C145", "C502", "C501", "C500", "3.0000", "2", "180.0", " "}, {"C149", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C149", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C149", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C149", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C149", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C149", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C149", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C149", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C149", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C149", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C149", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C149", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C149", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C149", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C149", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C149", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C149", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C149", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C149", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C149", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C149", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C149", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C149", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C149", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C157", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C157", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C157", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C157", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C157", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C157", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C157", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C157", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C157", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C157", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C157", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C157", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C157", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C157", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C157", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C157", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C157", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C157", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C157", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C157", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C157", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C158", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C158", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C158", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C158", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C158", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C158", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C158", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C158", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C158", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C158", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C158", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C158", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C158", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C158", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C158", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C158", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C158", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C158", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C158", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C158", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C158", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C158", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C158", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C158", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C206", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C206", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C206", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C206", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C206", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C206", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C206", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C206", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C206", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C206", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C206", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C206", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C206", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C206", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C206", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C206", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C206", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C206", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C206", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C206", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C206", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C206", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C206", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C206", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C209", "S202", "C210", "H140", "0.3235", "3", "0.0", " "}, {"C210", "C136", "C224", "C235", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C224", "C235", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C224", "N238", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C224", "N238", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C224", "N238", "0.1960", "3", "0.0", " "}, {"C210", "C136", "C283", "C271", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C283", "C271", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C283", "N238", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C283", "N238", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C283", "N238", "0.1960", "3", "0.0", " "}, {"C210", "C136", "C293", "C235", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C293", "C235", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C293", "N287", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C293", "N287", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C293", "N287", "0.1960", "3", "0.0", " "}, {"C210", "S202", "C209", "H140", "0.3235", "3", "0.0", " "}, {"C214", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C214", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C214", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C214", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C214", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C214", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C214", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C214", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C214", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C214", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C214", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C214", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C214", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C214", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C214", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C214", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C214", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C214", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C214", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C214", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C214", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C214", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C214", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C214", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C214", "S203", "S203", "C214", "-3.7070", "2", "180.0", " "}, {"C214", "S203", "S203", "C214", "0.8525", "3", "0.0", " "}, {"C223", "C235", "N238", "C223", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C223", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C242", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C242", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C295", "C235", "N238", "C283", "1.1500", "1", "0.0", "N-terminal Pro (Pres prop), adm jr."}, {"C295", "C235", "N238", "C283", "3.0445", "2", "180.0", "N-terminal Pro (Pres prop), adm jr."}, {"C223", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C223", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C224", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C224", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C224", "C136", "C136", "C235", "-0.6335", "1", "0.0", " "}, {"C224", "C136", "C136", "C235", "0.2395", "2", "180.0", " "}, {"C224", "C136", "C136", "C235", "-0.2430", "3", "0.0", " "}, {"C224", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C224", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C224", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C224", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C224", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C224", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C224", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C224", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C224", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C224", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C224", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C224", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C224", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C224", "C136", "C274", "C271", "-0.4425", "1", "0.0", " "}, {"C224", "C136", "C274", "C271", "0.5125", "2", "180.0", " "}, {"C224", "C136", "C274", "C271", "-0.6465", "3", "0.0", " "}, {"C224", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C224", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C224", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C224", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C224", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C224", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C224", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C224", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C224", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C224", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C224", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C224", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C224", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C224", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C224", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C224", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C224", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C224", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C242", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C242", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C224", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C223", "C267", "O268", "H270", "0.7500", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C223", "C267", "O268", "H270", "2.7500", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O268", "H270", "0.7500", "1", "0.0", " "}, {"C224", "C267", "O268", "H270", "2.7500", "2", "180.0", " "}, {"C224", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C224", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C224", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C224", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C224", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C224", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C224", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C224", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C224", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C224", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C224", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C224", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C224", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C235", "C136", "C136", "C283", "-0.6335", "1", "0.0", " "}, {"C235", "C136", "C136", "C283", "0.2395", "2", "180.0", " "}, {"C235", "C136", "C136", "C283", "-0.2430", "3", "0.0", " "}, {"C235", "C136", "C136", "C293", "-0.6335", "1", "0.0", " "}, {"C235", "C136", "C136", "C293", "0.2395", "2", "180.0", " "}, {"C235", "C136", "C136", "C293", "-0.2430", "3", "0.0", " "}, {"C235", "C136", "C136", "H140", "-0.0500", "3", "0.0", " "}, {"C235", "C136", "C224", "C235", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C224", "C235", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C224", "C235", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C224", "N238", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C224", "N238", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C235", "C136", "C283", "C271", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C283", "C271", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C283", "C271", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C283", "N238", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C283", "N238", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C235", "C136", "C293", "C235", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C293", "C235", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C293", "C235", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C293", "N287", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C293", "N287", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C235", "C223", "N238", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C223", "N238", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C223", "N238", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C223", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C235", "C224", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C136", "C267", "0.2990", "1", "0.0", " "}, {"C235", "C224", "C136", "C267", "0.7790", "2", "180.0", " "}, {"C235", "C224", "C136", "C267", "0.1275", "3", "0.0", " "}, {"C235", "C224", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C235", "C224", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C235", "C224", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C235", "C224", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C235", "C224", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C235", "C224", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C235", "C224", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C224", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C224", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C224", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C224", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C235", "C224", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C235", "C224", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C235", "C224", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C235", "C224", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C274", "C271", "0.7715", "1", "0.0", " "}, {"C235", "C224", "C274", "C271", "0.3480", "2", "180.0", " "}, {"C235", "C224", "C274", "C271", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C235", "C224", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C235", "C224", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C235", "C224", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C235", "C224", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C235", "C224", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C235", "C224", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C235", "C224", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C235", "C224", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C235", "C224", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "N238", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C224", "N238", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C224", "N238", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C223", "C267", "-1.2555", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C223", "C267", "0.1050", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C223", "C267", "-0.1000", "3", "0.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C224", "C267", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C224", "C267", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C224", "C267", "-0.1000", "3", "0.0", " "}, {"C235", "C246", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C246", "N239", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C246", "N239", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C246", "N239", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C246", "N239", "C245", "-0.8685", "1", "0.0", " "}, {"C235", "C246", "N239", "C245", "0.6255", "2", "180.0", " "}, {"C235", "C246", "N239", "C245", "-1.7505", "3", "0.0", " "}, {"C235", "C292", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C235", "C293", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C235", "C293", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C235", "C293", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C235", "C293", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C235", "C293", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C235", "C293", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C235", "C293", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C293", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C293", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C293", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C293", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C235", "C293", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C235", "C293", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C235", "C293", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C235", "C293", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C274", "C271", "0.7715", "1", "0.0", " "}, {"C235", "C293", "C274", "C271", "0.3480", "2", "180.0", " "}, {"C235", "C293", "C274", "C271", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C235", "C293", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C235", "C293", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C235", "C293", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C235", "C293", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C235", "C293", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C235", "C293", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C235", "C293", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C235", "C293", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C235", "C293", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C235", "C295", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C295", "N309", "C296", "0.71895", "1", "0.0", " "}, {"C235", "C295", "N309", "C296", "-0.0619", "2", "180.0", " "}, {"C235", "C295", "N309", "C296", "0.13195", "3", "0.0", " "}, {"C235", "C295", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C235", "N238", "C223", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C224", "C274", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C224", "C274", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C224", "C274", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C224", "C505", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C224", "C505", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C224", "C505", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C224", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C242", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C283", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C283", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C283", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N238", "C283", "C274", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C283", "C274", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C283", "C274", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C283", "C505", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C283", "C505", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C283", "C505", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C283", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C284", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C284", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C284", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N238", "C284", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C246", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C285", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N239", "C285", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N239", "C285", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N239", "C285", "H140", "0.0000", "1", "0.0", " "}, {"C242", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C242", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C242", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C245", "C136", "C136", "C246", "0.6500", "1", "0.0", " "}, {"C245", "C136", "C136", "C246", "-0.1000", "2", "180.0", " "}, {"C245", "C136", "C136", "C246", "0.1000", "3", "0.0", " "}, {"C245", "C136", "C136", "C285", "0.6500", "1", "0.0", " "}, {"C245", "C136", "C136", "C285", "-0.1000", "2", "180.0", " "}, {"C245", "C136", "C136", "C285", "0.1000", "3", "0.0", " "}, {"C245", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C245", "N239", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C246", "H140", "0.0000", "1", "0.0", " "}, {"C245", "N239", "C285", "C271", "-0.8685", "1", "0.0", " "}, {"C245", "N239", "C285", "C271", "0.6255", "2", "180.0", " "}, {"C245", "N239", "C285", "C271", "-1.7505", "3", "0.0", " "}, {"C245", "N239", "C285", "H140", "0.0000", "1", "0.0", " "}, {"C246", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C246", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C246", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C267", "C136", "C224", "H140", "-0.0380", "3", "0.0", " "}, {"C267", "C136", "C224", "N238", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C224", "N238", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C267", "C224", "C135", "H140", "0.0370", "3", "0.0", " "}, {"C267", "C223", "N238", "H241", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C274", "C136", "C283", "-0.4425", "1", "0.0", " "}, {"C271", "C274", "C136", "C283", "0.5125", "2", "180.0", " "}, {"C271", "C274", "C136", "C283", "-0.6465", "3", "0.0", " "}, {"C271", "C274", "C136", "C293", "-0.4425", "1", "0.0", " "}, {"C271", "C274", "C136", "C293", "0.5125", "2", "180.0", " "}, {"C271", "C274", "C136", "C293", "-0.6465", "3", "0.0", " "}, {"C271", "C274", "C136", "H140", "-0.1125", "3", "0.0", " "}, {"C271", "C274", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C224", "N238", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C224", "N238", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C224", "N238", "0.4985", "3", "0.0", " "}, {"C271", "C274", "C283", "C271", "0.7715", "1", "0.0", " "}, {"C271", "C274", "C283", "C271", "0.3480", "2", "180.0", " "}, {"C271", "C274", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C271", "C274", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C283", "N238", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C283", "N238", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C283", "N238", "0.4985", "3", "0.0", " "}, {"C271", "C274", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C293", "N287", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C293", "N287", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C293", "N287", "0.4985", "3", "0.0", " "}, {"C271", "C283", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C271", "C283", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C271", "C283", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C271", "C283", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C271", "C283", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C271", "C283", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C271", "C283", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C271", "C283", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C271", "C283", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C271", "C283", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C271", "C283", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C271", "C283", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C271", "C283", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C271", "C283", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C271", "C283", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C271", "C283", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C271", "C283", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C271", "C283", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C271", "C283", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C271", "C283", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C271", "C283", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C271", "C283", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C271", "C283", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C271", "C283", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C284", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C285", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C274", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C224", "N238", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C224", "N238", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C224", "N238", "0.4100", "3", "0.0", " "}, {"C274", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C283", "N238", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C283", "N238", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C283", "N238", "0.4100", "3", "0.0", " "}, {"C274", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C293", "N287", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C293", "N287", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C293", "N287", "0.4100", "3", "0.0", " "}, {"C274", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C274", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C274", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C274", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C274", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C274", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C274", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C274", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C274", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C274", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C274", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C274", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C274", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C274", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C274", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C274", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C274", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C274", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C283", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C283", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C283", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C283", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C283", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C283", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C283", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C283", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C283", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C283", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C283", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C283", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C283", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C283", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C283", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C283", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C283", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C283", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C283", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C283", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C283", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C283", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C283", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C283", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C283", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C283", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C283", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C283", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C283", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C283", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C283", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C283", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C283", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C283", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C283", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C283", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C283", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C283", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C283", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C283", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C283", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C283", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C283", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C284", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C285", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C285", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C285", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C292", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C292", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C293", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C293", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C293", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C293", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C293", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C293", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C293", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C293", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C293", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C293", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C293", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C293", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C293", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C293", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C293", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C293", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C293", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C293", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C293", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C293", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C293", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C293", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C293", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C293", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C293", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C293", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C293", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C293", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C293", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C293", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C293", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C293", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C293", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C293", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C293", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C293", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C293", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C293", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C293", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C293", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C293", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C293", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C293", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C295", "C136", "C136", "C296", "0.6500", "1", "0.0", " "}, {"C295", "C136", "C136", "C296", "-0.1000", "2", "180.0", " "}, {"C295", "C136", "C136", "C296", "0.1000", "3", "0.0", " "}, {"C295", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C295", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C295", "N309", "C296", "H140", "0.15085", "3", "0.0", " "}, {"C296", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C296", "N309", "C295", "H140", "0.15085", "3", "0.0", " "}, {"C302", "N303", "C307", "C308", "0.9145", "1", "0.0", " "}, {"C302", "N303", "C307", "C308", "0.1215", "2", "180.0", " "}, {"C302", "N303", "C307", "C308", "-0.2490", "3", "0.0", " "}, {"C302", "N303", "C307", "H140", "0.0885", "3", "0.0", " "}, {"C307", "C308", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C307", "N303", "C302", "N300", "3.9680", "2", "180.0", " "}, {"C308", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C224", "N238", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C224", "N238", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C224", "N238", "0.2815", "3", "0.0", " "}, {"C308", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C283", "N238", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C283", "N238", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C283", "N238", "0.2815", "3", "0.0", " "}, {"C308", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C293", "N287", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C293", "N287", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C293", "N287", "0.2815", "3", "0.0", " "}, {"C308", "C307", "N303", "H304", "-0.0950", "1", "0.0", " "}, {"C308", "C307", "N303", "H304", "-0.2085", "2", "180.0", " "}, {"C308", "C307", "N303", "H304", "0.2090", "3", "0.0", " "}, {"C500", "C136", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C224", "N238", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C224", "N238", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C224", "N238", "0.3325", "3", "0.0", " "}, {"C500", "C136", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C283", "N238", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C283", "N238", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C283", "N238", "0.3325", "3", "0.0", " "}, {"C500", "C136", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C293", "N287", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C293", "N287", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C293", "N287", "0.3325", "3", "0.0", " "}, {"C500", "C501", "C145", "H146", "3.5000", "2", "180.0", " "}, {"C501", "C500", "C136", "H140", "0.0000", "1", "0.0", " "}, {"C501", "C502", "C145", "H146", "3.6250", "2", "180.0", " "}, {"C502", "C501", "C145", "H146", "3.5000", "2", "180.0", " "}, {"C502", "C501", "C500", "C514", "1.6750", "2", "180.0", " "}, {"C502", "N503", "C514", "H146", "1.5000", "2", "180.0", " "}, {"C505", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C505", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C505", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C505", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C505", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C505", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C505", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C505", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C505", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C505", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C505", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C505", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C505", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C505", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C505", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C505", "C508", "C507", "H146", "5.3750", "2", "180.0", " "}, {"C505", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"C505", "C508", "N503", "C506", "1.4000", "2", "180.0", " "}, {"C505", "C508", "N503", "H504", "1.4000", "2", "180.0", " "}, {"C505", "C510", "N512", "C509", "1.4000", "2", "180.0", " "}, {"C505", "C510", "N512", "H513", "1.4000", "2", "180.0", " "}, {"C506", "N503", "C508", "C507", "1.4000", "2", "180.0", " "}, {"C506", "N503", "C508", "H146", "2.5000", "2", "180.0", " "}, {"C506", "N511", "C507", "C508", "2.4000", "2", "180.0", " "}, {"C506", "N511", "C507", "H146", "2.4000", "2", "180.0", " "}, {"C507", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C224", "N238", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C224", "N238", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C507", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C283", "N238", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C283", "N238", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C507", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C293", "N287", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C293", "N287", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C507", "C508", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C507", "C508", "N503", "H504", "1.4000", "2", "180.0", " "}, {"C507", "N511", "C506", "H146", "5.0000", "2", "180.0", " "}, {"C507", "N511", "C506", "N503", "5.0000", "2", "180.0", " "}, {"C508", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C224", "N238", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C224", "N238", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C508", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C283", "N238", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C283", "N238", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C508", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C293", "N287", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C293", "N287", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C508", "C507", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C508", "N503", "C506", "H146", "2.3250", "2", "180.0", " "}, {"C508", "N503", "C506", "N511", "2.3250", "2", "180.0", " "}, {"C509", "N512", "C510", "C510", "1.4000", "2", "180.0", " "}, {"C509", "N512", "C510", "H146", "2.5000", "2", "180.0", " "}, {"C510", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C224", "N238", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C224", "N238", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C510", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C283", "N238", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C283", "N238", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C510", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C293", "N287", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C293", "N287", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C510", "C510", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C510", "C510", "N512", "H513", "1.4000", "2", "180.0", " "}, {"C510", "N512", "C509", "H146", "2.3250", "2", "180.0", " "}, {"C510", "N512", "C509", "N512", "2.3250", "2", "180.0", " "}, {"C514", "C500", "C136", "H140", "-0.2400", "3", "0.0", " "}, {"H140", "C135", "C136", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C137", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C158", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C135", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C135", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C135", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C210", "S202", "0.2260", "3", "0.0", " "}, {"H140", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C235", "N237", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C245", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C245", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C246", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C246", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C267", "O268", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C267", "O269", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C285", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C285", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C292", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C292", "N287", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C295", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C295", "N309", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C296", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C296", "N309", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C157", "O154", "H155", "0.1762", "3", "0.0", " "}, {"H140", "C158", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C158", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C158", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C158", "O154", "H155", "0.1762", "3", "0.0", " "}, {"H140", "C206", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C206", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C206", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C206", "S200", "H204", "0.2400", "3", "0.0", " "}, {"H140", "C214", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C214", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C214", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C214", "S203", "S203", "0.2790", "3", "0.0", " "}, {"H140", "C223", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C223", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C224", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C224", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C224", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C224", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C267", "O268", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"H140", "C223", "C267", "O269", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"H140", "C224", "C267", "O268", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C267", "O269", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C274", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C224", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C242", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C274", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C274", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C274", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C274", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C274", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C274", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C283", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C283", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C283", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C283", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C283", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C283", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C284", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C284", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C285", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C292", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C292", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C292", "N287", "H290", "0.1305", "3", "0.0", " "}, {"H140", "C293", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C293", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C293", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C293", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C293", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C293", "N287", "H290", "0.1305", "3", "0.0", " "}, {"H140", "C295", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C295", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C295", "N309", "H310", "0.1305", "3", "0.0", " "}, {"H140", "C296", "N309", "H310", "0.1920", "3", "0.0", " "}, {"H140", "C307", "C308", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C307", "N303", "H304", "0.0000", "1", "0.0", " "}, {"H140", "C308", "C307", "N303", "-0.2910", "3", "0.0", " "}, {"H140", "C505", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C507", "N511", "0.2095", "3", "0.0", " "}, {"H140", "C505", "C508", "N503", "0.2095", "3", "0.0", " "}, {"H140", "C505", "C510", "N512", "0.2095", "3", "0.0", " "}, {"H146", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"H146", "C508", "N503", "H504", "2.5000", "2", "180.0", " "}, {"H146", "C510", "N512", "H513", "2.5000", "2", "180.0", " "}, {"H240", "N237", "C235", "O236", "2.4500", "2", "180.0", " "}, {"H241", "N238", "C235", "O236", "2.4500", "2", "180.0", " "}, {"H270", "O268", "C267", "O269", "2.7500", "2", "180.0", " "}, {"H301", "N300", "C302", "N300", "1.9500", "2", "180.0", " "}, {"H301", "N300", "C302", "N303", "1.9500", "2", "180.0", " "}, {"H304", "N303", "C302", "N300", "1.9500", "2", "180.0", " "}, {"H504", "N503", "C506", "N511", "2.3250", "2", "180.0", " "}, {"H513", "N512", "C509", "N512", "2.3250", "2", "180.0", " "}, {"N238", "C223", "C235", "N238", "0.9050", "1", "0.0", " "}, {"N238", "C223", "C235", "N238", "1.0775", "2", "180.0", " "}, {"N238", "C223", "C235", "N238", "-0.2350", "3", "0.0", " "}, {"N238", "C223", "C235", "N239", "0.9050", "1", "0.0", " "}, {"N238", "C223", "C235", "N239", "1.0775", "2", "180.0", " "}, {"N238", "C223", "C235", "N239", "-0.2350", "3", "0.0", " "}, {"N238", "C223", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N238", "C224", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C224", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C224", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C224", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C224", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C224", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C224", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N238", "C224", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N238", "C224", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N238", "C224", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N238", "C224", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N238", "C224", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N238", "C224", "C235", "N238", "0.9050", "1", "0.0", " "}, {"N238", "C224", "C235", "N238", "1.0775", "2", "180.0", " "}, {"N238", "C224", "C235", "N238", "-0.2350", "3", "0.0", " "}, {"N238", "C224", "C235", "N239", "0.9050", "1", "0.0", " "}, {"N238", "C224", "C235", "N239", "1.0775", "2", "180.0", " "}, {"N238", "C224", "C235", "N239", "-0.2350", "3", "0.0", " "}, {"N238", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N238", "C223", "C267", "O268", "2.6300", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C223", "C267", "O268", "0.4100", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C223", "C267", "O268", "0.0000", "3", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C224", "C267", "O268", "2.6300", "1", "0.0", " "}, {"N238", "C224", "C267", "O268", "0.4100", "2", "180.0", " "}, {"N238", "C224", "C267", "O268", "0.0000", "3", "0.0", " "}, {"N238", "C223", "C267", "O269", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C224", "C267", "O269", "0.0000", "1", "0.0", " "}, {"N238", "C235", "C246", "N239", "-0.4700", "1", "0.0", " "}, {"N238", "C235", "C246", "N239", "1.3775", "2", "180.0", " "}, {"N238", "C235", "C246", "N239", "-1.3350", "3", "0.0", " "}, {"N238", "C235", "C292", "N287", "0.9050", "1", "0.0", " "}, {"N238", "C235", "C292", "N287", "1.0775", "2", "180.0", " "}, {"N238", "C235", "C292", "N287", "-0.2350", "3", "0.0", " "}, {"N238", "C235", "C293", "N287", "0.9050", "1", "0.0", " "}, {"N238", "C235", "C293", "N287", "1.0775", "2", "180.0", " "}, {"N238", "C235", "C293", "N287", "-0.2350", "3", "0.0", " "}, {"N238", "C235", "C295", "N309", "-0.4700", "1", "0.0", " "}, {"N238", "C235", "C295", "N309", "1.3775", "2", "180.0", " "}, {"N238", "C235", "C295", "N309", "-1.3350", "3", "0.0", " "}, {"N238", "C283", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C283", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C283", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C283", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C283", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C283", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C283", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N238", "C283", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N238", "C283", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N238", "C283", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N238", "C283", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N238", "C283", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N238", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N238", "C284", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N239", "C235", "C246", "N239", "-0.4700", "1", "0.0", " "}, {"N239", "C235", "C246", "N239", "1.3775", "2", "180.0", " "}, {"N239", "C235", "C246", "N239", "-1.3350", "3", "0.0", " "}, {"N239", "C235", "C293", "N287", "0.9050", "1", "0.0", " "}, {"N239", "C235", "C293", "N287", "1.0775", "2", "180.0", " "}, {"N239", "C235", "C293", "N287", "-0.2350", "3", "0.0", " "}, {"N239", "C235", "C295", "N309", "-0.4700", "1", "0.0", " "}, {"N239", "C235", "C295", "N309", "1.3775", "2", "180.0", " "}, {"N239", "C235", "C295", "N309", "-1.3350", "3", "0.0", " "}, {"N239", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N239", "C285", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N287", "C292", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N287", "C293", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N287", "C293", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N287", "C293", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N287", "C293", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N287", "C293", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N287", "C293", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N287", "C293", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N287", "C293", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N287", "C293", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N287", "C293", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N287", "C293", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N287", "C293", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N287", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N309", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N503", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"C267", "C136", "C293", "N287", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C293", "N287", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C267", "0.2990", "1", "0.0", " "}, {"C235", "C293", "C136", "C267", "0.7790", "2", "180.0", " "}, {"C235", "C293", "C136", "C267", "0.1275", "3", "0.0", " "}, {"C267", "C136", "C283", "N238", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C283", "N238", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C267", "C136", "C283", "C271", "0.2990", "1", "0.0", " "}, {"C267", "C136", "C283", "C271", "0.7790", "2", "180.0", " "}, {"C267", "C136", "C283", "C271", "0.1275", "3", "0.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "1", "0.0", " "}, {"O340", "C334", "N335", "C336", "3.6250", "2", "180.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "3", "0.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C933", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C933", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C933", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C324", "C323", "2.5000", "2", "180.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C320", "O326", "3.6250", "2", "180.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C324", "H330", "2.5000", "2", "180.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C933", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C933", "C174", "O169", "H170", "1.3370", "1", "0.0", " "}, {"C933", "C174", "O169", "H170", "-1.4415", "2", "180.0", " "}, {"C933", "C174", "O169", "H170", "0.5130", "3", "0.0", " "}, {"C933", "C174", "O169", "H170", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C320", "N321", "3.6250", "2", "180.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "O186", "0.2000", "1", "0.0", " "}, {"C324", "N938", "C933", "O186", "-1.4000", "2", "180.0", " "}, {"C324", "N938", "C933", "O186", "-0.3000", "3", "0.0", " "}, {"C324", "N938", "C933", "O186", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C933", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C933", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C933", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "C183", "0.6500", "1", "0.0", " "}, {"C933", "C174", "C174", "C183", "-0.1000", "2", "180.0", " "}, {"C933", "C174", "C174", "C183", "0.1000", "3", "0.0", " "}, {"C933", "C174", "C174", "C183", "0.0000", "4", "180.0", " "}, {"N938", "C933", "O186", "C183", "-0.2500", "1", "0.0", " "}, {"N938", "C933", "O186", "C183", "-0.7500", "2", "180.0", " "}, {"N938", "C933", "O186", "C183", "0.5000", "3", "0.0", " "}, {"N938", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "1", "0.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "2", "180.0", " "}, {"C933", "O186", "C183", "H185", "0.3800", "3", "0.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "O186", "-0.1000", "1", "0.0", " "}, {"C320", "N938", "C933", "O186", "-1.2500", "2", "180.0", " "}, {"C320", "N938", "C933", "O186", "0.3500", "3", "0.0", " "}, {"C320", "N938", "C933", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C933", "O186", "C183", "0.3250", "1", "0.0", " "}, {"C174", "C933", "O186", "C183", "-0.1250", "2", "180.0", " "}, {"C174", "C933", "O186", "C183", "-0.2350", "3", "0.0", " "}, {"C174", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "1", "0.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "2", "180.0", " "}, {"H196", "C933", "O186", "C183", "0.3800", "3", "0.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "1", "0.0", " "}, {"N335", "C336", "N341", "H342", "1.9500", "2", "180.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "3", "0.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "4", "180.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "1", "0.0", " "}, {"N335", "C336", "N341", "H343", "1.9500", "2", "180.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "3", "0.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "4", "180.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "1", "0.0", " "}, {"N937", "C334", "N335", "C336", "3.6250", "2", "180.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "3", "0.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "4", "180.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "1", "0.0", " "}, {"C338", "C337", "C336", "N335", "3.5000", "2", "180.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "3", "0.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N335", "C334", "3.6250", "2", "180.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "4", "180.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "1", "0.0", " "}, {"H344", "C337", "C336", "N335", "3.5000", "2", "180.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "3", "0.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "4", "180.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "1", "0.0", " "}, {"N341", "C336", "N335", "C334", "3.6250", "2", "180.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "3", "0.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "C174", "0.3250", "1", "0.0", " "}, {"C932", "O186", "C183", "C174", "-0.1250", "2", "180.0", " "}, {"C932", "O186", "C183", "C174", "-0.2350", "3", "0.0", " "}, {"C932", "O186", "C183", "C174", "0.0000", "4", "180.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "1", "0.0", " "}, {"H344", "C337", "C336", "N341", "3.5000", "2", "180.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "3", "0.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "C174", "-0.3500", "1", "0.0", " "}, {"C334", "N937", "C932", "C174", "-0.2000", "2", "180.0", " "}, {"C334", "N937", "C932", "C174", "0.1500", "3", "0.0", " "}, {"C334", "N937", "C932", "C174", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C334", "O340", "3.6250", "2", "180.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C338", "C337", "3.6250", "2", "180.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C338", "H345", "3.6250", "2", "180.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "4", "180.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "1", "0.0", " "}, {"H345", "C338", "C337", "C336", "7.0000", "2", "180.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "3", "0.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "4", "180.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "1", "0.0", " "}, {"H345", "C338", "C337", "H344", "7.0000", "2", "180.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "3", "0.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N341", "H342", "1.9500", "2", "180.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N341", "H343", "1.9500", "2", "180.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "C174", "1.1960", "1", "0.0", " "}, {"N937", "C932", "C174", "C174", "-0.3370", "2", "180.0", " "}, {"N937", "C932", "C174", "C174", "0.2750", "3", "0.0", " "}, {"N937", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "O169", "4.0000", "1", "0.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "3", "0.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "H176", "-0.5065", "1", "0.0", " "}, {"N937", "C932", "C174", "H176", "-0.3545", "2", "180.0", " "}, {"N937", "C932", "C174", "H176", "0.2365", "3", "0.0", " "}, {"N937", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "1", "0.0", " "}, {"C338", "C337", "C336", "N341", "3.5000", "2", "180.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "3", "0.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "C174", "0.2000", "1", "0.0", " "}, {"C338", "N937", "C932", "C174", "-0.2500", "2", "180.0", " "}, {"C338", "N937", "C932", "C174", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C932", "C174", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "2", "180.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "4", "180.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "1", "0.0", " "}, {"O326", "C320", "N321", "H327", "3.6250", "2", "180.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "3", "0.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "4", "180.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "1", "0.0", " "}, {"O328", "C322", "C323", "H329", "3.6250", "2", "180.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "3", "0.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "4", "180.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "1", "0.0", " "}, {"O326", "C320", "N321", "C322", "3.6250", "2", "180.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "3", "0.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "4", "180.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "1", "0.0", " "}, {"H327", "N321", "C322", "O328", "3.6250", "2", "180.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "3", "0.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "4", "180.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "1", "0.0", " "}, {"H327", "N321", "C322", "C323", "3.6250", "2", "180.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "3", "0.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "4", "180.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "1", "0.0", " "}, {"N321", "C322", "C323", "H329", "3.6250", "2", "180.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "3", "0.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C324", "H330", "3.6250", "2", "180.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "4", "180.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "1", "0.0", " "}, {"H330", "C324", "C323", "C322", "7.0000", "2", "180.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "3", "0.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "4", "180.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "1", "0.0", " "}, {"C320", "N321", "C322", "O328", "3.6250", "2", "180.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "3", "0.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "C174", "-0.3500", "1", "0.0", " "}, {"C320", "N938", "C933", "C174", "-0.2000", "2", "180.0", " "}, {"C320", "N938", "C933", "C174", "0.1500", "3", "0.0", " "}, {"C320", "N938", "C933", "C174", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C324", "C323", "3.6250", "2", "180.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "4", "180.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "1", "0.0", " "}, {"H330", "C324", "C323", "H329", "7.0000", "2", "180.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "3", "0.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "4", "180.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "1", "0.0", " "}, {"C320", "N321", "C322", "C323", "3.6250", "2", "180.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "3", "0.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C320", "O326", "3.6250", "2", "180.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C320", "N321", "3.6250", "2", "180.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "C174", "0.2000", "1", "0.0", " "}, {"C324", "N938", "C933", "C174", "-0.2500", "2", "180.0", " "}, {"C324", "N938", "C933", "C174", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C933", "C174", "0.0000", "4", "180.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "1", "0.0", " "}, {"O328", "C322", "C323", "C324", "3.5000", "2", "180.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "3", "0.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "4", "180.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "1", "0.0", " "}, {"N321", "C322", "C323", "C324", "3.5000", "2", "180.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "3", "0.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "H176", "-0.5065", "1", "0.0", " "}, {"N938", "C933", "C174", "H176", "-0.3545", "2", "180.0", " "}, {"N938", "C933", "C174", "H176", "0.2365", "3", "0.0", " "}, {"N938", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "O169", "4.0000", "1", "0.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "3", "0.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "C174", "1.1960", "1", "0.0", " "}, {"N938", "C933", "C174", "C174", "-0.3370", "2", "180.0", " "}, {"N938", "C933", "C174", "C174", "0.2750", "3", "0.0", " "}, {"N938", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "1", "0.0", " "}, {"N938", "C324", "C323", "C322", "7.0000", "2", "180.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "3", "0.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "4", "180.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "1", "0.0", " "}, {"N938", "C324", "C323", "H329", "7.0000", "2", "180.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "3", "0.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "1", "0.0", " "}, {"N938", "C320", "N321", "H327", "3.6250", "2", "180.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "3", "0.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "4", "180.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "1", "0.0", " "}, {"N938", "C320", "N321", "C322", "3.6250", "2", "180.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "3", "0.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C334", "N335", "3.6250", "2", "180.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "2", "180.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "2", "180.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "1", "0.0", " "}, {"N937", "C338", "C337", "C336", "7.0000", "2", "180.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "3", "0.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "4", "180.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "1", "0.0", " "}, {"N937", "C338", "C337", "H344", "7.0000", "2", "180.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "3", "0.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "O186", "0.2000", "1", "0.0", " "}, {"C338", "N937", "C932", "O186", "-1.4000", "2", "180.0", " "}, {"C338", "N937", "C932", "O186", "-0.3000", "3", "0.0", " "}, {"C338", "N937", "C932", "O186", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C334", "N335", "3.6250", "2", "180.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C334", "O340", "3.6250", "2", "180.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C338", "H345", "2.5000", "2", "180.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C338", "C337", "2.5000", "2", "180.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "4", "180.0", " "}, {"C932", "C174", "O169", "H170", "1.3370", "1", "0.0", " "}, {"C932", "C174", "O169", "H170", "-1.4415", "2", "180.0", " "}, {"C932", "C174", "O169", "H170", "0.5130", "3", "0.0", " "}, {"C932", "C174", "O169", "H170", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C932", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C932", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C932", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C932", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C932", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C932", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C932", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N937", "C932", "O186", "C183", "-0.2500", "1", "0.0", " "}, {"N937", "C932", "O186", "C183", "-0.7500", "2", "180.0", " "}, {"N937", "C932", "O186", "C183", "0.5000", "3", "0.0", " "}, {"N937", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "1", "0.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "2", "180.0", " "}, {"C932", "O186", "C183", "H185", "0.3800", "3", "0.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "O186", "-0.1000", "1", "0.0", " "}, {"C334", "N937", "C932", "O186", "-1.2580", "2", "180.0", " "}, {"C334", "N937", "C932", "O186", "0.3500", "3", "0.0", " "}, {"C334", "N937", "C932", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C932", "O186", "C183", "0.3250", "1", "0.0", " "}, {"C174", "C932", "O186", "C183", "-0.1250", "2", "180.0", " "}, {"C174", "C932", "O186", "C183", "-0.2350", "3", "0.0", " "}, {"C174", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "1", "0.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "2", "180.0", " "}, {"H196", "C932", "O186", "C183", "0.3800", "3", "0.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "C183", "0.6500", "1", "0.0", " "}, {"C932", "C174", "C174", "C183", "-0.1000", "2", "180.0", " "}, {"C932", "C174", "C174", "C183", "0.1000", "3", "0.0", " "}, {"C932", "C174", "C174", "C183", "0.0000", "4", "180.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "1", "0.0", " "}, {"C931", "N936", "C364", "C365", "2.5000", "2", "180.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "3", "0.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "4", "180.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "1", "0.0", " "}, {"N936", "C353", "N352", "C365", "5.0000", "2", "180.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "3", "0.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "4", "180.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "1", "0.0", " "}, {"N936", "C364", "N363", "C362", "3.6250", "2", "180.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "3", "0.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "4", "180.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "1", "0.0", " "}, {"N936", "C364", "C365", "C366", "3.6250", "2", "180.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "3", "0.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "4", "180.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "1", "0.0", " "}, {"N936", "C364", "C365", "N352", "3.6250", "2", "180.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "3", "0.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "4", "180.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "1", "0.0", " "}, {"C364", "C365", "C366", "N361", "3.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "3", "0.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "4", "180.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "1", "0.0", " "}, {"C364", "C365", "C366", "O370", "3.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "3", "0.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "4", "180.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "1", "0.0", " "}, {"C364", "C365", "N352", "C353", "3.6250", "2", "180.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "3", "0.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "4", "180.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "1", "0.0", " "}, {"C364", "N363", "C362", "N368", "3.6250", "2", "180.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "3", "0.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "4", "180.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "1", "0.0", " "}, {"C364", "N363", "C362", "N361", "3.6250", "2", "180.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "3", "0.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C353", "N352", "3.6250", "2", "180.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "4", "180.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "1", "0.0", " "}, {"N363", "C362", "N368", "H369", "1.9500", "2", "180.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "3", "0.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "4", "180.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "1", "0.0", " "}, {"H367", "N361", "C362", "N363", "3.6250", "2", "180.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "3", "0.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "4", "180.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "1", "0.0", " "}, {"C366", "N361", "C362", "N363", "3.6250", "2", "180.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "3", "0.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "4", "180.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "1", "0.0", " "}, {"N363", "C364", "C365", "C366", "3.6250", "2", "180.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "3", "0.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "4", "180.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "1", "0.0", " "}, {"N363", "C364", "C365", "N352", "3.6250", "2", "180.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "3", "0.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "4", "180.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "1", "0.0", " "}, {"O370", "C366", "N361", "C362", "3.0445", "2", "180.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "3", "0.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "4", "180.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "1", "0.0", " "}, {"C365", "C364", "N363", "C362", "3.6250", "2", "180.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "3", "0.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "4", "180.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "1", "0.0", " "}, {"O370", "C366", "N361", "H367", "2.4500", "2", "180.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "3", "0.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "4", "180.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "1", "0.0", " "}, {"C366", "C365", "N352", "C353", "3.6250", "2", "180.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "3", "0.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "4", "180.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "1", "0.0", " "}, {"N352", "C365", "C366", "O370", "3.5000", "2", "180.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "3", "0.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N352", "C365", "5.0000", "2", "180.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "4", "180.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "1", "0.0", " "}, {"C353", "N936", "C364", "C365", "3.6250", "2", "180.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "3", "0.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "O186", "0.2000", "1", "0.0", " "}, {"C364", "N936", "C931", "O186", "-0.6000", "2", "180.0", " "}, {"C364", "N936", "C931", "O186", "0.6000", "3", "0.0", " "}, {"C364", "N936", "C931", "O186", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "C174", "-0.3500", "1", "0.0", " "}, {"C364", "N936", "C931", "C174", "-0.0500", "2", "180.0", " "}, {"C364", "N936", "C931", "C174", "0.3000", "3", "0.0", " "}, {"C364", "N936", "C931", "C174", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C353", "H359", "3.6250", "2", "180.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "4", "180.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "1", "0.0", " "}, {"H367", "N361", "C362", "N368", "3.6250", "2", "180.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "3", "0.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "4", "180.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "1", "0.0", " "}, {"C366", "N361", "C362", "N368", "3.6250", "2", "180.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "3", "0.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "4", "180.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "1", "0.0", " "}, {"N361", "C362", "N368", "H369", "1.9500", "2", "180.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "3", "0.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "4", "180.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "1", "0.0", " "}, {"C353", "N936", "C364", "N363", "3.6250", "2", "180.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "3", "0.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "4", "180.0", " "}, {"C365", "C366", "N361", "C362", "1.1500", "1", "0.0", " "}, {"C365", "C366", "N361", "C362", "3.0445", "2", "180.0", " "}, {"C365", "C366", "N361", "C362", "0.0000", "3", "0.0", " "}, {"C365", "C366", "N361", "C362", "0.0000", "4", "180.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "1", "0.0", " "}, {"N352", "C365", "C366", "N361", "3.5000", "2", "180.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "3", "0.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "4", "180.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "1", "0.0", " "}, {"C365", "C366", "N361", "H367", "2.4500", "2", "180.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "3", "0.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "4", "180.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "1", "0.0", " "}, {"C931", "N936", "C364", "N363", "2.5000", "2", "180.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "3", "0.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "4", "180.0", " "}, {"C183", "C6448", "O6934", "P440", "-0.7100", "1", "0.0", " "}, {"C183", "C6448", "O6934", "P440", "-0.3100", "2", "180.0", " "}, {"C183", "C6448", "O6934", "P440", "0.0500", "3", "0.0", " "}, {"C183", "C6448", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C6448", "O6934", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C6448", "H140", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C6448", "O6934", "3.7595", "1", "0.0", " "}, {"O186", "C183", "C6448", "O6934", "-0.6000", "2", "180.0", " "}, {"O186", "C183", "C6448", "O6934", "-0.0500", "3", "0.0", " "}, {"O186", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C6448", "H140", "0.2340", "3", "0.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "C174", "0.3250", "1", "0.0", " "}, {"C933", "O186", "C183", "C174", "-0.1250", "2", "180.0", " "}, {"C933", "O186", "C183", "C174", "-0.2350", "3", "0.0", " "}, {"C933", "O186", "C183", "C174", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "2", "180.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C933", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C933", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C933", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C931", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C931", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C931", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C931", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C932", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C932", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C932", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C6448", "C183", "C174", "C174", "0.6500", "1", "0.0", " "}, {"C6448", "C183", "C174", "C174", "-0.1000", "2", "180.0", " "}, {"C6448", "C183", "C174", "C174", "0.1000", "3", "0.0", " "}, {"C6448", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C6448", "O6934", "0.7000", "1", "0.0", " "}, {"C174", "C183", "C6448", "O6934", "0.2500", "2", "180.0", " "}, {"C174", "C183", "C6448", "O6934", "1.0500", "3", "0.0", " "}, {"C174", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"C174", "C183", "C6448", "H140", "0.1500", "3", "0.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C183", "C6448", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C183", "C6448", "-0.2180", "1", "0.0", " "}, {"O169", "C174", "C183", "C6448", "0.4500", "2", "180.0", " "}, {"O169", "C174", "C183", "C6448", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C6448", "O6934", "P440", "O441", "0.4000", "1", "0.0", " "}, {"C6448", "O6934", "P440", "O441", "0.1500", "2", "180.0", " "}, {"C6448", "O6934", "P440", "O441", "0.0500", "3", "0.0", " "}, {"C6448", "O6934", "P440", "O441", "0.0000", "4", "180.0", " "}, {"C6448", "O6934", "P440", "O6452", "-0.4500", "1", "0.0", " "}, {"C6448", "O6934", "P440", "O6452", "-0.2500", "2", "180.0", " "}, {"C6448", "O6934", "P440", "O6452", "0.1000", "3", "0.0", " "}, {"C6448", "O6934", "P440", "O6452", "0.0000", "4", "180.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "1", "0.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "2", "180.0", " "}, {"H140", "C6448", "O6934", "P440", "0.1500", "3", "0.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"O6934", "P440", "O6452", "P6450", "-0.0500", "1", "0.0", " "}, {"O6934", "P440", "O6452", "P6450", "-0.2000", "2", "180.0", " "}, {"O6934", "P440", "O6452", "P6450", "0.0500", "3", "0.0", " "}, {"O6934", "P440", "O6452", "P6450", "0.0000", "4", "180.0", " "}, {"O6934", "P440", "O6452", "P440", "-0.0500", "1", "0.0", " "}, {"O6934", "P440", "O6452", "P440", "-0.2000", "2", "180.0", " "}, {"O6934", "P440", "O6452", "P440", "0.0500", "3", "0.0", " "}, {"O6934", "P440", "O6452", "P440", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P6450", "O441", "0.1500", "1", "0.0", " "}, {"P440", "O6452", "P6450", "O441", "0.1500", "2", "180.0", " "}, {"P440", "O6452", "P6450", "O441", "0.0000", "3", "0.0", " "}, {"P440", "O6452", "P6450", "O441", "0.0000", "4", "180.0", " "}, {"P6450", "O6452", "P440", "O441", "0.1500", "1", "0.0", " "}, {"P6450", "O6452", "P440", "O441", "0.1500", "2", "180.0", " "}, {"P6450", "O6452", "P440", "O441", "0.0000", "3", "0.0", " "}, {"P6450", "O6452", "P440", "O441", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P440", "O441", "0.1500", "1", "0.0", " "}, {"P440", "O6452", "P440", "O441", "0.1500", "2", "180.0", " "}, {"P440", "O6452", "P440", "O441", "0.0000", "3", "0.0", " "}, {"P440", "O6452", "P440", "O441", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P440", "O6442", "-0.0500", "1", "0.0", " "}, {"P440", "O6452", "P440", "O6442", "-0.2000", "2", "180.0", " "}, {"P440", "O6452", "P440", "O6442", "0.0500", "3", "0.0", " "}, {"P440", "O6452", "P440", "O6442", "0.0000", "4", "180.0", " "}, {"O6452", "P440", "O6442", "P6450", "-0.0500", "1", "0.0", " "}, {"O6452", "P440", "O6442", "P6450", "-0.2000", "2", "180.0", " "}, {"O6452", "P440", "O6442", "P6450", "0.0500", "3", "0.0", " "}, {"O6452", "P440", "O6442", "P6450", "0.0000", "4", "180.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "1", "0.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "2", "180.0", " "}, {"P440", "O6442", "P6450", "O6441", "-0.0500", "3", "0.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "4", "180.0", " "}, {"O441", "P440", "O6442", "P6450", "0.1500", "1", "0.0", " "}, {"O441", "P440", "O6442", "P6450", "0.1500", "2", "180.0", " "}, {"O441", "P440", "O6442", "P6450", "0.0000", "3", "0.0", " "}, {"O441", "P440", "O6442", "P6450", "0.0000", "4", "180.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "1", "0.0", " "}, {"H355", "C347", "N346", "C351", "3.6250", "2", "180.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "3", "0.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N936", "C931", "5.0000", "2", "180.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "4", "180.0", " "}, {"O186", "C931", "N936", "C349", "0.2000", "1", "0.0", " "}, {"O186", "C931", "N936", "C349", "-0.6000", "2", "180.0", " "}, {"O186", "C931", "N936", "C349", "0.6000", "3", "0.0", " "}, {"O186", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "1", "0.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "2", "180.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "3", "0.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"C174", "C931", "N936", "C353", "0.0500", "1", "0.0", " "}, {"C174", "C931", "N936", "C353", "-0.3500", "2", "180.0", " "}, {"C174", "C931", "N936", "C353", "-0.1500", "3", "0.0", " "}, {"C174", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"O186", "C931", "N936", "C353", "1.8000", "1", "0.0", " "}, {"O186", "C931", "N936", "C353", "-1.8000", "2", "180.0", " "}, {"O186", "C931", "N936", "C353", "0.6000", "3", "0.0", " "}, {"O186", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "1", "0.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "2", "180.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "3", "0.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "1", "0.0", " "}, {"N348", "C349", "N936", "C931", "2.5000", "2", "180.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "3", "0.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "4", "180.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "1", "0.0", " "}, {"C350", "C349", "N936", "C353", "3.6250", "2", "180.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "3", "0.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "1", "0.0", " "}, {"N348", "C349", "N936", "C353", "3.6250", "2", "180.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "3", "0.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "1", "0.0", " "}, {"N352", "C353", "N936", "C931", "5.0000", "2", "180.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "3", "0.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "4", "180.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "1", "0.0", " "}, {"N352", "C353", "N936", "C349", "3.6250", "2", "180.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "3", "0.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N936", "C349", "3.6250", "2", "180.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "N936", "4.0000", "1", "0.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "N936", "-0.5065", "1", "0.0", " "}, {"H176", "C174", "C931", "N936", "-0.3545", "2", "180.0", " "}, {"H176", "C174", "C931", "N936", "0.2365", "3", "0.0", " "}, {"H176", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "O186", "-0.2180", "1", "0.0", " "}, {"C174", "C174", "C931", "O186", "0.4500", "2", "180.0", " "}, {"C174", "C174", "C931", "O186", "0.0000", "3", "0.0", " "}, {"C174", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "O186", "2.1595", "1", "0.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C931", "O186", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C174", "C174", "C931", "H196", "0.1500", "3", "0.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "H196", "0.2340", "3", "0.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C931", "H196", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "N936", "-0.2500", "1", "0.0", " "}, {"C183", "O186", "C931", "N936", "-0.7500", "2", "180.0", " "}, {"C183", "O186", "C931", "N936", "0.5000", "3", "0.0", " "}, {"C183", "O186", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "C174", "0.3250", "1", "0.0", " "}, {"C183", "O186", "C931", "C174", "-0.1250", "2", "180.0", " "}, {"C183", "O186", "C931", "C174", "-0.2650", "3", "0.0", " "}, {"C183", "O186", "C931", "C174", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C183", "O186", "C931", "H196", "0.3800", "3", "0.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "4", "180.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "1", "0.0", " "}, {"N352", "C350", "C349", "N936", "3.6250", "2", "180.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "3", "0.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "4", "180.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "1", "0.0", " "}, {"C351", "C350", "C349", "N348", "3.6250", "2", "180.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "3", "0.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "4", "180.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "1", "0.0", " "}, {"N352", "C350", "C349", "N348", "3.6250", "2", "180.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "3", "0.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "4", "180.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "1", "0.0", " "}, {"C347", "N348", "C349", "N936", "3.6250", "2", "180.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "3", "0.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "4", "180.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "1", "0.0", " "}, {"C347", "N348", "C349", "C350", "3.6250", "2", "180.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "3", "0.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "4", "180.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "1", "0.0", " "}, {"C350", "N352", "C353", "N936", "5.0000", "2", "180.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "3", "0.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "4", "180.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "1", "0.0", " "}, {"C350", "N352", "C353", "H359", "5.0000", "2", "180.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "3", "0.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "C931", "-0.2180", "1", "0.0", " "}, {"O169", "C174", "C174", "C931", "0.4500", "2", "180.0", " "}, {"O169", "C174", "C174", "C931", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "C931", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C183", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C183", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C183", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "O169", "4.5330", "1", "0.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C183", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C174", "C183", "O186", "C931", "0.3250", "1", "0.0", " "}, {"C174", "C183", "O186", "C931", "-0.1250", "2", "180.0", " "}, {"C174", "C183", "O186", "C931", "-0.2650", "3", "0.0", " "}, {"C174", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "O186", "C931", "0.3250", "1", "0.0", " "}, {"C157", "C183", "O186", "C931", "-0.1250", "2", "180.0", " "}, {"C157", "C183", "O186", "C931", "-0.2650", "3", "0.0", " "}, {"C157", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "O186", "C932", "0.3250", "1", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "-0.1250", "2", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "-0.2650", "3", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "0.0000", "4", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "0.3250", "1", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "-0.1250", "2", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "-0.2650", "3", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "0.0000", "4", "180.0", "adm jr., from C157 C183 O186 C931"}, {"H185", "C183", "O186", "C931", "0.0000", "1", "0.0", " "}, {"H185", "C183", "O186", "C931", "0.0000", "2", "180.0", " "}, {"H185", "C183", "O186", "C931", "0.3800", "3", "0.0", " "}, {"H185", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C183", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C183", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C157", "C183", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C157", "C183", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C157", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C157", "C183", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C183", "-0.1780", "1", "0.0", " "}, {"H170", "O169", "C174", "C183", "-0.0870", "2", "180.0", " "}, {"H170", "O169", "C174", "C183", "0.2460", "3", "0.0", " "}, {"H170", "O169", "C174", "C183", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H170", "O169", "C174", "H176", "0.1760", "3", "0.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "O186", "3.4095", "1", "0.0", " "}, {"O154", "C157", "C183", "O186", "-1.2500", "2", "180.0", " "}, {"O154", "C157", "C183", "O186", "0.5000", "3", "0.0", " "}, {"O154", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "O186", "0.2340", "3", "0.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "C174", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "1", "0.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"O154", "C157", "C183", "H185", "0.2340", "3", "0.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "H185", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "1", "0.0", " "}, {"N346", "C351", "C350", "C349", "3.5000", "2", "180.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "3", "0.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "4", "180.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "1", "0.0", " "}, {"N356", "C351", "C350", "N352", "3.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "3", "0.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "4", "180.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "1", "0.0", " "}, {"N346", "C351", "C350", "N352", "3.5000", "2", "180.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "3", "0.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "4", "180.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "1", "0.0", " "}, {"C353", "N352", "C350", "C349", "3.6250", "2", "180.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "3", "0.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "4", "180.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "1", "0.0", " "}, {"C353", "N352", "C350", "C351", "3.6250", "2", "180.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "3", "0.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "4", "180.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "1", "0.0", " "}, {"N346", "C347", "N348", "C349", "3.6250", "2", "180.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "3", "0.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "4", "180.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "1", "0.0", " "}, {"H355", "C347", "N348", "C349", "3.6250", "2", "180.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "3", "0.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "4", "180.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "1", "0.0", " "}, {"H358", "N356", "C351", "C350", "1.9500", "2", "180.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "3", "0.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "4", "180.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "1", "0.0", " "}, {"H357", "N356", "C351", "N346", "1.9500", "2", "180.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "3", "0.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "4", "180.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "1", "0.0", " "}, {"H358", "N356", "C351", "N346", "1.9500", "2", "180.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "3", "0.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "4", "180.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "1", "0.0", " "}, {"C347", "N346", "C351", "N356", "3.6250", "2", "180.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "3", "0.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "4", "180.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "1", "0.0", " "}, {"N348", "C347", "N346", "C351", "3.6250", "2", "180.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "3", "0.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "4", "180.0", " "}, {"C174", "C931", "N936", "C349", "-0.3500", "1", "0.0", " "}, {"C174", "C931", "N936", "C349", "-0.0500", "2", "180.0", " "}, {"C174", "C931", "N936", "C349", "0.3000", "3", "0.0", " "}, {"C174", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "N936", "1.1960", "1", "0.0", " "}, {"C174", "C174", "C931", "N936", "-0.3370", "2", "180.0", " "}, {"C174", "C174", "C931", "N936", "0.2750", "3", "0.0", " "}, {"C174", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "C931", "0.6500", "1", "0.0", " "}, {"C183", "C174", "C174", "C931", "-0.1000", "2", "180.0", " "}, {"C183", "C174", "C174", "C931", "0.1000", "3", "0.0", " "}, {"C183", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "C174", "0.6500", "1", "0.0", " "}, {"C157", "C183", "C174", "C174", "-0.1000", "2", "180.0", " "}, {"C157", "C183", "C174", "C174", "0.1000", "3", "0.0", " "}, {"C157", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "C174", "-1.0000", "1", "0.0", " "}, {"O154", "C157", "C183", "C174", "-0.1000", "2", "180.0", " "}, {"O154", "C157", "C183", "C174", "-0.2500", "3", "0.0", " "}, {"O154", "C157", "C183", "C174", "0.0000", "4", "180.0", " "}, {"H155", "O154", "C157", "C183", "1.3370", "1", "0.0", " "}, {"H155", "O154", "C157", "C183", "-1.4415", "2", "180.0", " "}, {"H155", "O154", "C157", "C183", "0.5130", "3", "0.0", " "}, {"H155", "O154", "C157", "C183", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C174", "1.3370", "1", "0.0", " "}, {"H170", "O169", "C174", "C174", "-1.4415", "2", "180.0", " "}, {"H170", "O169", "C174", "C174", "0.5130", "3", "0.0", " "}, {"H170", "O169", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C931", "1.3370", "1", "0.0", " "}, {"H170", "O169", "C174", "C931", "-1.4415", "2", "180.0", " "}, {"H170", "O169", "C174", "C931", "0.5130", "3", "0.0", " "}, {"H170", "O169", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "1", "0.0", " "}, {"C350", "C349", "N936", "C931", "2.5000", "2", "180.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "3", "0.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "4", "180.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "1", "0.0", " "}, {"C351", "C350", "C349", "N936", "3.6250", "2", "180.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "3", "0.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "4", "180.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "1", "0.0", " "}, {"N356", "C351", "C350", "C349", "3.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "3", "0.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "4", "180.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "1", "0.0", " "}, {"H357", "N356", "C351", "C350", "1.9500", "2", "180.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "3", "0.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "4", "180.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "1", "0.0", " "}, {"C347", "N346", "C351", "C350", "3.6250", "2", "180.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "3", "0.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "4", "180.0", " "}}; /* Impropers */ char * OPLSAAR_impropers[131][8]= {{"C136", "C500", "C501", "C514", "1.1000", "2", "180.0", " "}, {"C136", "C500", "C514", "C501", "1.1000", "2", "180.0", " "}, {"C145", "C502", "C501", "N503", "1.1000", "2", "180.0", " "}, {"C145", "C502", "N503", "C501", "1.1000", "2", "180.0", " "}, {"C149", "C145", "C145", "C145", "1.1000", "2", "180.0", " "}, {"C245", "N238", "C235", "C285", "2.5000", "2", "180.0", " "}, {"C245", "N238", "C285", "C235", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C235", "C246", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C235", "C285", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C246", "C235", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C285", "C235", "2.5000", "2", "180.0", " "}, {"C502", "C501", "C145", "C500", "1.1000", "2", "180.0", " "}, {"C502", "C501", "C500", "C145", "1.1000", "2", "180.0", " "}, {"C505", "C507", "C508", "N511", "1.1000", "2", "180.0", " "}, {"C505", "C507", "N511", "C508", "1.1000", "2", "180.0", " "}, {"C505", "C508", "C507", "N503", "1.1000", "2", "180.0", " "}, {"C505", "C508", "N503", "C507", "1.1000", "2", "180.0", " "}, {"C505", "C510", "C510", "N512", "1.1000", "2", "180.0", " "}, {"C505", "C510", "N512", "C510", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C166", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C166", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C501", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C501", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C502", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C502", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C506", "N503", "N511", "1.1000", "2", "180.0", " "}, {"H146", "C506", "N511", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C507", "C508", "N511", "1.1000", "2", "180.0", " "}, {"H146", "C507", "N511", "C508", "1.1000", "2", "180.0", " "}, {"H146", "C508", "C507", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C508", "N503", "C507", "1.1000", "2", "180.0", " "}, {"H146", "C509", "N512", "N512", "1.1000", "2", "180.0", " "}, {"H146", "C510", "C510", "N512", "1.1000", "2", "180.0", " "}, {"H146", "C510", "N512", "C510", "1.1000", "2", "180.0", " "}, {"H146", "C514", "C500", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C514", "N503", "C500", "1.1000", "2", "180.0", " "}, {"H240", "N237", "C235", "H240", "2.5000", "2", "180.0", " "}, {"H240", "N237", "H240", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C223", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C224", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C223", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C224", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C242", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C283", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C284", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C242", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C283", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C284", "C235", "2.5000", "2", "180.0", " "}, {"H301", "N300", "C302", "H301", "2.5000", "2", "180.0", " "}, {"H301", "N300", "H301", "C302", "2.5000", "2", "180.0", " "}, {"H304", "N303", "C302", "C307", "2.5000", "2", "180.0", " "}, {"H304", "N303", "C307", "C302", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C502", "C514", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C506", "C508", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C508", "C506", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C514", "C502", "2.5000", "2", "180.0", " "}, {"H513", "N512", "C509", "C510", "2.5000", "2", "180.0", " "}, {"H513", "N512", "C510", "C509", "2.5000", "2", "180.0", " "}, {"N300", "C302", "N300", "N303", "10.5000", "2", "180.0", " "}, {"N300", "C302", "N303", "N300", "10.5000", "2", "180.0", " "}, {"O167", "C166", "C145", "C145", "1.1000", "2", "180.0", " "}, {"O236", "C235", "C135", "N239", "10.5", "2", "180.0", " "}, {"O236", "C235", "C135", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C136", "N237", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C223", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C223", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C224", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C224", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C246", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C246", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C292", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C293", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C293", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C295", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C295", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N237", "C136", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C135", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C223", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C224", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C246", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C292", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C293", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C295", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C135", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C223", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C224", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C246", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C293", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C295", "10.5000", "2", "180.0", " "}, {"O269", "C267", "C136", "O268", "10.5000", "2", "180.0", " "}, {"O269", "C267", "O268", "C136", "10.5000", "2", "180.0", " "}, {"O269", "C267", "C224", "O268", "10.5000", "2", "180.0", " "}, {"O269", "C267", "O268", "C224", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C274", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C283", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C284", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C285", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C274", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C283", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C284", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C285", "10.5000", "2", "180.0", " "}, {"O268", "C267", "C136", "O269", "10.5", "2", "180.0", " "}, {"O268", "C267", "C223", "O269", "10.5", "2", "180.0", "Gly"}, {"O268", "C267", "C224", "O269", "10.5", "2", "180.0", " "}, {"C320", "C933", "N938", "C324", "2.5000", "2", "180.0", " "}, {"C320", "N938", "N321", "O326", "2.5000", "2", "180.0", " "}, {"C322", "C320", "N321", "H327", "2.5000", "2", "180.0", " "}, {"C322", "N321", "C323", "O328", "2.5000", "2", "180.0", " "}, {"C324", "C322", "C323", "H329", "2.5000", "2", "180.0", " "}, {"C323", "N938", "C324", "H330", "2.5000", "2", "180.0", " "}, {"C338", "N937", "C932", "C334", "2.5000", "2", "180.0", " "}, {"N335", "N937", "C334", "O340", "2.5000", "2", "180.0", " "}, {"N341", "N335", "C336", "C337", "2.5000", "2", "180.0", " "}, {"H342", "C336", "N341", "H343", "2.5000", "2", "180.0", " "}, {"C338", "C336", "C337", "H344", "2.5000", "2", "180.0", " "}, {"C337", "N937", "C338", "H345", "2.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "N352", "2.5000", "2", "180.0", " "}, {"N361", "N363", "C362", "N368", "2.5000", "2", "180.0", " "}, {"H369", "C362", "N368", "H369", "2.5000", "2", "180.0", " "}, {"C362", "H367", "N361", "C366", "2.5000", "2", "180.0", " "}, {"O370", "C365", "C366", "N361", "2.5000", "2", "180.0", " "}, {"N936", "N363", "C364", "C365", "2.5000", "2", "180.0", " "}, {"C353", "C931", "N936", "C364", "2.5000", "2", "180.0", " "}, {"H358", "N356", "C351", "H357", "2.5000", "2", "180.0", " "}, {"H355", "C347", "N346", "N348", "2.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "N346", "2.5000", "2", "180.0", " "}, {"C351", "C350", "C349", "N352", "2.5000", "2", "180.0", " "}, {"N352", "N936", "C353", "H359", "2.5000", "2", "180.0", " "}, {"N348", "C349", "C350", "N936", "2.5000", "2", "180.0", " "}, {"C349", "N936", "C931", "C353", "2.5000", "2", "180.0", " "}}; /* Non-bonded */ char * OPLSAAR_vdw[145][7]= {{"C135", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C136", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C137", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C145", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C149", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C157", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C158", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C166", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C206", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C209", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C210", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C214", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C223", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C224", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C235", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C242", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C245", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C246", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C267", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C271", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C274", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C283", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C284", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C285", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C292", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C293", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C295", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C296", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C302", "0.00", "-0.050000", "1.2627698", "0.00", "-0.025000", "1.2627698"}, {"C307", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C308", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C500", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C501", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C502", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C505", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C506", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C507", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C508", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C509", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C510", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C514", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"H140", "0.00", "-0.030000", "1.4030776", "0.00", "-0.015000", "1.4030776"}, {"H146", "0.00", "-0.030000", "1.3581791", "0.00", "-0.015000", "1.3581791"}, {"H155", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H168", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H204", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H240", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H241", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H270", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H290", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H301", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H304", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H310", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H504", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H513", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"N237", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N238", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N239", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N287", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N300", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N303", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N309", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N503", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N511", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N512", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"O154", "0.00", "-0.170000", "1.7510408", "0.00", "-0.085000", "1.7510408"}, {"O167", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"O236", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O268", "0.00", "-0.170000", "1.6836931", "0.00", "-0.085000", "1.6836931"}, {"O269", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O272", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"S200", "0.00", "-0.425000", "2.0204317", "0.00", "-0.212500", "2.0204317"}, {"S202", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"S203", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"OT", "0.00", "-0.152100", "1.768200", "0.00", "-0.152100", "1.768200"}, {"HT", "0.00", "-0.046000", "0.224500", "0.00", "-0.046000", "0.22450"}, {"SOD", "0.00", "-0.000500", "2.9969737", "0.00", "-0.000500", "2.9969737"}, {"CLA", "0.00", "-0.710000", "2.2561487", "0.00", "-0.710000", "2.2561487"}, {"MG", "0.00", "-0.857044", "0.9229261", "0.00", "-0.857044", "0.9229261"}, {"H329", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C933", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"N938", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C324", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H330", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C320", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O326", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"N321", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H327", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C322", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O328", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"C323", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C932", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"N937", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N936", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C338", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H345", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C337", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H344", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C334", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O340", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"N335", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C336", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N341", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H342", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"H343", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C931", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C349", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C353", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C174", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"O186", "0.00", "-0.140000", "1.6275699", "0.00", "-0.070000", "1.6275699"}, {"H196", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"O169", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"H176", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"C183", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"H185", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"H170", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C350", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N348", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C351", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N352", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N356", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N346", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H357", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"H358", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C347", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H355", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"H359", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C6448", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"O6934", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"P440", "0.00", "-0.200000", "2.0990040", "0.00", "-0.100000", "2.0990040"}, {"O441", "0.00", "-0.200000", "1.7678777", "0.00", "-0.100000", "1.7678777"}, {"O6452", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"O6442", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"P6450", "0.00", "-0.200000", "2.0990040", "0.00", "-0.100000", "2.0990040"}, {"O6441", "0.00", "-0.200000", "1.7678777", "0.00", "-0.100000", "1.7678777"}, {"C364", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N368", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H369", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"N363", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C362", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N361", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H367", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C366", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O370", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"C365", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}}; atomes_1.3.1/src/calc/force_fields/amber94.c0000664000175000017500000013135715212624223020243 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber94.c * @short Amber-94 force field, from 'parm94' * @author Sébastien Le Roux */ /* * This file: 'amber94.c' * * Contains: * Amber-94 force field, data from taken from: - the file: 'parm94' This file contains several tables: Atoms : amber94_atoms[55][4] Equi vdw : amber94_equi[2][12] Bonds : amber94_bonds[83][5] Angles : amber94_angles[191][6] Dihedrals : amber94_dihedrals[81][9] Impropers : amber94_impropers[31][8] Non bonded : amber94_vdw[34][4] */ #include "global.h" int amber94_objects[14] = {55, 2, 0, 83, 0, 0, 191, 0, 81, 0 , 0, 31, 34, 0}; int amber94_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_94 info */ char * amber94_atoms[55][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}, {"EP", "3.0", "EP", "extra point (mass is ignored)"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber94_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber94 info V(R) = Kb x (R - R0)^2 */ char * amber94_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber94_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber94 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber94_dihedrals[81][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.20", "180.0", "2.", " "}, {"N", "CT", "C", "N", "1", "0.40", "180.0", "-4.", " "}, {"N", "CT", "C", "N", "1", "1.35", "180.0", "-2.", " "}, {"N", "CT", "C", "N", "1", "0.75", "180.0", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber94 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber94_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber94 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber94_vdw[34][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7682", "0.1521", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}, {"EP", "0.0", "0.0", "generic extra point"}}; atomes_1.3.1/src/calc/force_fields/amber99.c0000664000175000017500000020533515212624223020246 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber99.c * @short Amber-99 force field, from 'parm99' * @author Sébastien Le Roux */ /* * This file: 'amber99.c' * * Contains: * Amber-99 force field, data from taken from: - the file: 'parm99' This file contains several tables: Atoms : amber99_atoms[64][5] Equi vdw : amber99_equi[2][15] Bonds : amber99_bonds[116][5] Angles : amber99_angles[281][6] Dihedrals : amber99_dihedrals[164][9] Impropers : amber99_impropers[38][8] Non bonded : amber99_vdw[42][4] */ #include "global.h" int amber99_objects[14] = {64, 2, 0, 116, 0, 0, 281, 0, 164, 0 , 0, 38, 42, 0}; int amber99_dim[14] = {5, 15, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_99 info */ char * amber99_atoms[64][5]= {{"C", "12.01", "C", "! sp2 C carbonyl group", "0.616"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)", "0.360"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction", "0.360"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS", "0.360"}, {"C", "12.01", "CD", "sp2 C atom in the middle of: C=CD-CD=C", "0.360"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines", "0.360"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6", "0.360"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)", "0.360"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N", "0.360"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS", "0.360"}, {"C", "12.01", "CT", "sp3 aliphatic C", "0.878"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)", "0.360"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)", "0.360"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)", "0.360"}, {"C", "12.01", "CY", "nitrile C (Howard et al.JCC,16,243,1995)", "0.360"}, {"C", "12.01", "CZ", "sp C (Howard et al.JCC,16,243,1995)", "0.360"}, {"Ca", "40.08", "C0", "calcium"}, {"H", "1.008", "H", "H bonded to nitrogen atoms", "0.161"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group", "0.135"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group", "0.135"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups", "0.135"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups", "0.135"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups", "0.167"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group", "0.167"}, {"H", "1.008", "H5", "H arom.at C with 2 elctrwd. gr,+HCOO group", "0.167"}, {"H", "1.008", "HO", "hydroxyl group", "0.135"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur (pol?)", "0.135"}, {"H", "1.008", "HW", "H in TIP3P water", "0.000"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr", "0.135"}, {"H", "1.008", "HZ", "H bond sp C (Howard et al.JCC,16,243,1995)", "0.161"}, {"F", "19.00", "F", "fluorine", "0.320"}, {"Cl", "35.45", "Cl", "chlorine (Applequist)", "1.910"}, {"Br", "79.90", "Br", "bromine (Applequist)", "2.880"}, {"I", "126.9", "I", "iodine (Applequist)", "4.690"}, {"I", "35.45", "IM", "assumed to be Cl- (ion minus)", "3.235"}, {"I", "131.0", "IB", "ion w/ waters' for vacuum (Na+, 6H2O)", "'big"}, {"Mg", "24.305", "MG", "magnesium", "0.120"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups", "0.530"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)", "0.530"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)", "0.530"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)", "0.530"}, {"N", "14.01", "N2", "sp2 N in amino groups", "0.530"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)", "0.530"}, {"N", "14.01", "NT", "sp3 N for amino groups amino groups", "0.530"}, {"N", "14.01", "N*", "sp2 N", "0.530"}, {"N", "14.01", "NY", "nitrile N (Howard et al.JCC,16,243,1995)", "0.530"}, {"O", "16.00", "O", "carbonyl group oxygen", "0.434"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen", "0.434"}, {"O", "16.00", "OW", "oxygen in TIP3P water", "0.000"}, {"O", "16.00", "OH", "oxygen in hydroxyl group", "0.465"}, {"O", "16.00", "OS", "ether and ester oxygen", "0.465"}, {"P", "30.97", "P", "phosphate,pol:JACS,112,8543,90,K.J.Miller", "1.538"}, {"S", "32.06", "S", "S in disulfide linkage,pol:JPC,102,2399,98", "2.900"}, {"S", "32.06", "SH", "S in cystine", "2.900"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium, ions pol:J.PhysC,11,1541,(1978)", "0.029"}, {"I", "22.99", "IP", "assumed to be Na+ (ion plus)", "0.250"}, {"Na", "22.99", "Na", "Na+, ions pol:J.PhysC,11,1541,(1978)", "0.250"}, {"K", "39.10", "K", "potassium", "1.060"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}, {"Zn", "65.4", "Zn", "Zn2+"}, {"LP", "3.00", "LP", "lone pair", "0.000"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber99_equi[2][15]= {{"N", "NA", "N2", "N*", "NC", "NB", "NT", "NY", " ", " ", " ", " ", " ", " ", " "}, {"C*", "CA", "CB", "CC", "CD", "CK", "CM", "CN", "CQ", "CR", "CV", "CW", "CY", "CZ", " "}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber99 info V(R) = Kb x (R - R0)^2 */ char * amber99_bonds[116][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "C", "310.0", "1.525", "Junmei et al, 1999"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; (not used any more in TYR)"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; (not used any more for TYR)"}, {"C", "OS", "450.0", "1.323", "Junmei et al, 1999"}, {"C", "H4", "367.0", "1.080", "Junmei et al, 1999"}, {"C", "H5", "367.0", "1.080", "Junmei et al, 1999"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CA", "OH", "450.0", "1.364", "substituted for C-OH in tyr"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CD", "HA", "367.0", "1.080", "Junmei et al, 1999"}, {"CD", "CD", "469.0", "1.400", "Junmei et al, 1999"}, {"CD", "CM", "549.0", "1.350", "Junmei et al, 1999"}, {"CD", "CT", "317.0", "1.510", "Junmei et al, 1999"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "OS", "480.0", "1.240", "Junmei et al, 1999"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "NT", "367.0", "1.471", "for neutral amines"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CT", "CY", "400.0", "1.458", "Howard et al JCC.16,243,1995"}, {"CT", "CZ", "400.0", "1.459", "Howard et al JCC,16,243,1995"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"CY", "NY", "600.0", "1.150", "Howard et al JCC,16,243,1995"}, {"CZ", "CZ", "600.0", "1.206", "Howard et al JCC,16,243,1995"}, {"CZ", "HZ", "400.0", "1.056", "Howard et al JCC,16,243,1995"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"H", "NT", "434.0", "1.010", "for neutral amines"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"F", "CT", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}, {"Cl", "CT", "232.0", "1.766", "6-31g* opt"}, {"Br", "CT", "159.0", "1.944", "Junmei et al,99"}, {"I", "CT", "148.0", "2.166", "Junmei et al,99"}, {"F", "CA", "386.0", "1.359", "Junmei et al,99"}, {"Cl", "CA", "193.0", "1.727", "Junmei et al,99"}, {"I", "CA", "171.0", "2.075", "Junmei et al,99"}, {"Br", "CA", "172.0", "1.890", "Junmei et al,99"}, {"LP", "O", "600.0", "0.200", "or 0.35"}, {"LP", "OH", "600.0", "0.200", "or 0.35"}, {"LP", "OS", "600.0", "0.200", "or 0.35"}, {"LP", "N3", "600.0", "0.200", "or 0.35"}, {"LP", "NT", "600.0", "0.200", "or 0.35"}, {"LP", "NB", "600.0", "0.200", "or 0.35 histidines, nucleic acids"}, {"LP", "NC", "600.0", "0.200", "or 0.35 nucleic acids"}, {"LP", "S", "600.0", "0.700", "cys,cyx,met"}, {"LP", "SH", "600.0", "0.700", "cys,cyx"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber99_angles[281][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"C", "C", "O", "80.0", "120.00", "Junmei et al, 1999 acrolein"}, {"C", "C", "OH", "80.0", "120.00", "Junmei et al, 1999"}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA"}, {"CA", "C", "OH", "70.0", "120.00", "AA (not used in tyr)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"CT", "C", "CT", "63.0", "117.00", "Junmei et al, 1999"}, {"CT", "C", "OS", "80.0", "115.00", "Junmei et al, 1999"}, {"CT", "C", "OH", "80.0", "110.00", "Junmei et al, 1999"}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O", "C", "OH", "80.0", "120.00", "(check with Junmei for: theta0:120.0?)"}, {"O", "C", "OS", "80.0", "125.00", "Junmei et al, 1999"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"H4", "C", "C", "50.0", "120.00", "Junmei et al, 1999"}, {"H4", "C", "CM", "50.0", "115.00", "Junmei et al, 1999"}, {"H4", "C", "CT", "50.0", "115.00", "Junmei et al, 1999"}, {"H4", "C", "O", "50.0", "120.00", "Junmei et al, 1999"}, {"H4", "C", "OH", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "C", "N", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "C", "O", "50.0", "119.00", "Junmei et al, 1999"}, {"H5", "C", "OH", "50.0", "107.00", "Junmei et al, 1999"}, {"H5", "C", "OS", "50.0", "107.00", "Junmei et al, 1999"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"C", "CA", "HA", "50.0", "120.00", "AA (not used in tyr)"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "50.0", "120.00", " "}, {"CA", "CA", "H4", "50.0", "120.00", " "}, {"CA", "CA", "OH", "70.0", "120.00", "replacement in tyr"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CB", "CA", "HA", "50.0", "120.00", " "}, {"CB", "CA", "H4", "50.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"CN", "CA", "HA", "50.0", "120.00", "AA trp"}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"F", "CA", "CA", "70.0", "121.00", "Junmei et al,99"}, {"Cl", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"Br", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"I", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"CD", "CD", "CM", "63.0", "120.00", "Junmei et al, 1999"}, {"CD", "CD", "CT", "70.0", "120.00", "Junmei et al, 1999"}, {"CM", "CD", "CT", "70.0", "120.00", "Junmei et al, 1999"}, {"HA", "CD", "HA", "35.0", "119.00", "Junmei et al, 1999"}, {"HA", "CD", "CD", "50.0", "120.00", "Junmei et al, 1999"}, {"HA", "CD", "CM", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "CK", "N*", "50.0", "123.05", " "}, {"H5", "CK", "NB", "50.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "50.0", "119.70", " "}, {"C", "CM", "H4", "50.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "50.0", "123.30", " "}, {"CA", "CM", "H4", "50.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "50.0", "119.70", " "}, {"CM", "CM", "H4", "50.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"CM", "CM", "OS", "80.0", "125.00", "Junmei et al, 1999"}, {"H4", "CM", "N*", "50.0", "119.10", " "}, {"H4", "CM", "OS", "50.0", "113.00", "Junmei et al, 1999"}, {"HA", "CM", "HA", "35.0", "120.00", "Junmei et al, 1999"}, {"HA", "CM", "CD", "50.0", "120.00", "Junmei et al, 1999"}, {"HA", "CM", "CT", "50.0", "120.00", "Junmei et al, 1999"}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"H5", "CQ", "NC", "50.0", "115.45", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "CM", "50.0", "109.50", "Junmei et al, 1999"}, {"H1", "CT", "CY", "50.0", "110.00", "Junmei et al, 1999"}, {"H1", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"H1", "CT", "NT", "50.0", "109.50", "neutral amines"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"HC", "CT", "CM", "50.0", "109.50", "changed based on NMA nmodes"}, {"HC", "CT", "CD", "50.0", "109.50", "Junmei et al, 1999"}, {"HC", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"C", "CT", "OS", "60.0", "109.50", "Junmei et al, 1999"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"CM", "CT", "CT", "63.0", "111.00", "Junmei et al, 1999 (last change: Mar24,99)"}, {"CM", "CT", "OS", "50.0", "109.50", "Junmei et al, 1999"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"CT", "CT", "CA", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CT", "CT", "NT", "80.0", "111.20", "neutral amines"}, {"CT", "CT", "CY", "63.0", "110.00", "Junmei et al, 1999"}, {"CT", "CT", "CZ", "63.0", "110.00", "Junmei et al, 1999"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"OS", "CT", "OS", "160.0", "101.00", "Junmei et al, 1999"}, {"OS", "CT", "CY", "50.0", "110.00", "Junmei et al, 1999"}, {"OS", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"OS", "CT", "N*", "50.0", "109.50", " "}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "50.0", "109.50", "JCC,13,(1992),963;"}, {"F", "CT", "CT", "50.0", "109.00", " "}, {"F", "CT", "H2", "50.0", "109.50", " "}, {"Cl", "CT", "CT", "50.0", "108.50", "(6-31g* opt value)"}, {"Cl", "CT", "H1", "50.0", "108.50", "(6-31g* opt value)"}, {"Br", "CT", "CT", "50.0", "108.00", "Junmei et al 99"}, {"Br", "CT", "H1", "50.0", "106.50", "Junmei et al 99"}, {"I", "CT", "CT", "50.0", "106.00", "Junmei et al,99"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "50.0", "120.00", "AA his"}, {"H5", "CR", "NB", "50.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "50.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "50.0", "120.00", "AA his"}, {"CC", "CW", "H4", "50.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"C*", "CW", "H4", "50.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"H4", "CW", "NA", "50.0", "120.00", "AA his"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CT", "CY", "NY", "80.0", "180.00", "Junmei et al, 1999"}, {"CT", "CZ", "CZ", "80.0", "180.00", "Junmei et al, 1999"}, {"CZ", "CZ", "HZ", "50.0", "180.00", "Junmei et al, 1999"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "50.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "50.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "50.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "50.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "50.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "50.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "50.0", "120.00", " "}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N2", "H", "50.0", "118.40", "AA arg"}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"CT", "NT", "H", "50.0", "109.50", "neutral amines"}, {"CT", "NT", "CT", "50.0", "109.50", "neutral amines"}, {"H", "NT", "H", "35.0", "109.50", "neutral amines"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "50.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "50.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "50.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "50.0", "113.00", "(not used in tyr anymore)"}, {"CA", "OH", "HO", "50.0", "113.00", "replacement in tyr"}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"C", "OS", "CT", "60.0", "117.00", "Junmei et al, 1999"}, {"CM", "OS", "CT", "60.0", "117.00", "Junmei et al, 1999"}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"CB", "NB", "LP", "150.0", "126.0", "NA"}, {"CC", "NB", "LP", "150.0", "126.0", "his,NA"}, {"CK", "NB", "LP", "150.0", "126.0", "NA"}, {"CR", "NB", "LP", "150.0", "126.0", "his,NA"}, {"CV", "NB", "LP", "150.0", "126.0", "his,NA"}, {"C", "NC", "LP", "150.0", "120.0", "NA"}, {"CA", "NC", "LP", "150.0", "120.0", "NA"}, {"CB", "NC", "LP", "150.0", "120.0", "NA"}, {"CQ", "NC", "LP", "150.0", "120.0", "NA"}, {"CT", "N3", "LP", "150.0", "109.5", "in neutral lysine"}, {"H", "N3", "LP", "150.0", "109.5", "in neutral lysine"}, {"CT", "NT", "LP", "150.0", "109.5", " "}, {"H", "NT", "LP", "150.0", "109.5", " "}, {"C", "O", "LP", "150.0", "120.0", " "}, {"LP", "O", "LP", "150.0", "120.0", " "}, {"C", "OH", "LP", "150.0", "120.0", " "}, {"CT", "OH", "LP", "150.0", "109.5", " "}, {"HO", "OH", "LP", "150.0", "109.5", " "}, {"LP", "OH", "LP", "150.0", "109.5", " "}, {"C", "OS", "LP", "150.0", "109.5", " "}, {"CM", "OS", "LP", "150.0", "109.5", "methyl vinyl ether"}, {"CT", "OS", "LP", "150.0", "109.5", " "}, {"LP", "OS", "LP", "150.0", "109.5", " "}, {"CT", "S", "LP", "150.0", "90.0", "cys,cyx,met"}, {"CT", "SH", "LP", "150.0", "90.0", "cys,cyx,met"}, {"P", "OS", "LP", "150.0", "109.5", "NA"}, {"LP", "S", "LP", "150.0", "180.0", "cys,cyx,met"}, {"LP", "SH", "LP", "150.0", "180.0", "cys,cyx,met"}, {"HS", "SH", "LP", "150.0", "90.0", "cys"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber99 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber99_dihedrals[164][9]= {{"X", "C", "C", "X", "4", "14.50", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA,NMA"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "O", "X", "4", "11.20", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "OH", "X", "2", "4.60", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "OS", "X", "2", "5.40", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "OH", "X", "2", "1.80", "180.0", "2.", "Junmei et al, 99"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CD", "CD", "X", "4", "4.00", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CD", "CT", "X", "6", "0.00", "0.0", "2.", "Junmei et al, 1999"}, {"X", "CD", "CM", "X", "4", "26.60", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "OS", "X", "2", "2.10", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "CY", "X", "3", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"X", "CT", "CZ", "X", "3", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "NT", "X", "6", "1.80", "0.0", "3.", "Junmei et al, 1999"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"N", "CT", "C", "N", "1", "1.700", "180.000", "-1.", " "}, {"N", "CT", "C", "N", "1", "2.000", "180.000", "2.", " "}, {"C", "N", "CT", "C", "1", "0.850", "180.000", "-2.", " "}, {"C", "N", "CT", "C", "1", "0.800", "0.000", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", "phi,psi,parm94"}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", "phi,psi,parm94"}, {"CT", "CT", "N", "C", "1", "0.00", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", "phi,psi,parm94"}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", "phi,psi,parm94"}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", "phi,psi,parm94"}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"H1", "CT", "C", "O", "1", "0.80", "0.0", "-1.", "Junmei et al, 1999"}, {"H1", "CT", "C", "O", "1", "0.00", "0.0", "-2.", "Explicit of wild card X-C-CT-X"}, {"H1", "CT", "C", "O", "1", "0.08", "180.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "C", "O", "1", "0.80", "0.0", "-1.", "Junmei et al, 1999"}, {"HC", "CT", "C", "O", "1", "0.00", "0.0", "-2.", "Explicit of wild card X-C-CT-X"}, {"HC", "CT", "C", "O", "1", "0.08", "180.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "HC", "1", "0.15", "0.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "CT", "1", "0.16", "0.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CM", "CM", "1", "0.38", "180.0", "-3.", "Junmei et al, 1999"}, {"HC", "CT", "CM", "CM", "1", "1.15", "0.0", "1.", "Junmei et al, 1999"}, {"HO", "OH", "CT", "CT", "1", "0.16", "0.0", "-3.", "Junmei et al, 1999"}, {"HO", "OH", "CT", "CT", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HO", "OH", "C", "O", "1", "2.30", "180.0", "-2.", "Junmei et al, 1999"}, {"HO", "OH", "C", "O", "1", "1.90", "0.0", "1.", "Junmei et al, 1999"}, {"CM", "CM", "C", "O", "1", "2.175", "180.0", "-2.", "Junmei et al, 1999"}, {"CM", "CM", "C", "O", "1", "0.30", "0.0", "3.", "Junmei et al, 1999"}, {"CT", "CM", "CM", "CT", "1", "6.65", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "CM", "CM", "CT", "1", "1.90", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.18", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.25", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.20", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "CT", "NT", "CT", "1", "0.30", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "NT", "CT", "1", "0.48", "180.0", "2.", "Junmei et al, 1999"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"CT", "CT", "OS", "C", "1", "0.383", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "OS", "C", "1", "0.80", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "0.10", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "0.85", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "1.35", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "N*", "1", "0.383", "0.0", "-3.", "parm98.dat, TC,PC,PAK"}, {"CT", "OS", "CT", "N*", "1", "0.65", "0.0", "2.", "Piotr et al."}, {"CT", "CZ", "CZ", "HZ", "1", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"O", "C", "OS", "CT", "1", "2.70", "180.0", "-2.", "Junmei et al, 1999"}, {"O", "C", "OS", "CT", "1", "1.40", "180.0", "1.", "Junmei et al, 1999"}, {"OS", "CT", "N*", "CK", "1", "0.00", "000.0", "-2.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CM", "1", "0.00", "000.0", "-2.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OS", "1", "1.175", "0.0", "2.", "Piotr et al."}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OH", "1", "1.175", "0.0", "2.", "parm98, TC,PC,PAK"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OH", "CT", "CT", "OH", "1", "1.175", "0.0", "2.", "parm98, TC,PC,PAK"}, {"F", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"F", "CT", "CT", "F", "1", "1.20", "180.0", "1.", "Junmei et al, 1999"}, {"Cl", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"Cl", "CT", "CT", "Cl", "1", "0.45", "180.0", "1.", "Junmei et al, 1999"}, {"Br", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"Br", "CT", "CT", "Br", "1", "0.00", "180.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "OS", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "OS", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "OH", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "OH", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "F", "1", "0.19", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "Cl", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "Br", "1", "0.55", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "OS", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "OS", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "OH", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "OH", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "F", "1", "0.19", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "Cl", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "Br", "1", "0.55", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "NT", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "NT", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "C", "N", "LP", "1", "0.000", "180.000", "2.000", " "}, {"O", "C", "N", "LP", "1", "0.000", "180.000", "2.000", " "}, {"H1", "CT", "OH", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "OH", "LP", "1", "0.000", "0.000", "3.000", " "}, {"H1", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"H2", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CM", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}, {"HA", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}, {"H4", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber99 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber99_impropers[38][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", "(not used in tyr!)"}, {"CA", "CA", "CA", "OH", "1.1", "180.", "2.", "in tyr"}, {"H5", "O", "C", "OH", "1.1", "180.", "2.", "Junmei et al.1999"}, {"H5", "O", "C", "OS", "1.1", "180.", "2.", " "}, {"CM", "CT", "CM", "HA", "1.1", "180.", "2.", "Junmei et al.1999"}, {"Br", "CA", "CA", "CA", "1.1", "180.", "2.", "Junmei et al.1999"}, {"CM", "H4", "C", "O", "1.1", "180.", "2.", "Junmei et al.1999"}, {"C", "CT", "N", "H", "1.1", "180.", "2.", "Junmei et al.1999"}, {"C", "CT", "N", "O", "1.1", "180.", "2.", "Junmei et al.1999"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber99 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber99_vdw[42][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"HZ", "1.4590", "0.0150", "H bonded to sp C (Howard et al JCC 16)"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"C*", "1.9080", "0.0860", "Spellmeyer"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Na", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"MG", "0.7926", "0.8947", "Mg2+ Aqvist JPC 1990,94,8021.(adapted)"}, {"C0", "1.7131", "0.459789", "Ca2+ Aqvist JPC 1990,94,8021.(adapted)"}, {"Zn", "1.10", "0.0125", "Zn2+, Merz,PAK, JACS,113,8262,(1991)"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"Cl", "1.948", "0.265", "Fox, JPCB,102,8070,(98),flex.mdl CHCl3"}, {"Br", "2.22", "0.320", "Junmei(?)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}, {"LP", "0.00", "0.0000", "lone pair"}}; atomes_1.3.1/src/calc/calc.c0000664000175000017500000002535115212624223015252 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file calc.c * @short Callbacks used in by the molecular dynamics calculation assistants \n Atom selection structure manipulation tools \n The initialization of the assistants * @author Sébastien Le Roux */ /* * This file: 'calc.c' * * Contains: * - Callbacks used in by the molecular dynamics calculation assistant - Atom selection structure manipulation tools - The initialization of the assistants * * List of functions: void field_question (gchar * question, GCallback handler, gpointer data); void unselect_all_atoms (glwin * view); void restore_ogl_selection (glwin * view); void preserve_ogl_selection (glwin * view); G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data); atom_selection * duplicate_ogl_selection (atom_selection * old_sel); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #define MAXDATAQM 7 extern void create_classical_force_field (int p, int f); extern void create_qm_input_file (int c, int p, int s); extern void create_new_project_using_data (atom_selection * selection); extern int selected_aspec; extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); extern atom_in_selection * new_atom_in_selection (int id, int sp); GtkWidget * qm_assistant; project * qm_proj; glwin * qm_view; coord_info * qm_coord; GtkTextBuffer * qmbuffer[MAXDATAQM+2]; gboolean force_mol = FALSE; int idopt; int icalc; int ident; int icomb; gboolean selection_confirmed; /*! \fn G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) \brief confirm that the selection is good \param dialog the GtkDialog sending the signal \param response_id the response id \param data the pointer if needed, not in this case */ G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) { selection_confirmed = (response_id == GTK_RESPONSE_YES) ? TRUE : FALSE; destroy_this_dialog (dialog); } /*! \fn void field_question (gchar * question, GCallback handler, gpointer data) \brief ask the use to confirm something \param question the text to display \param handler the callback to use \param data the data to transmit to the callback */ void field_question (gchar * question, GCallback handler, gpointer data) { GtkWidget * dialog; dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure ?")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", question); gtk_window_set_title(GTK_WINDOW(dialog), _("Please confirm")); run_this_gtk_dialog (dialog, handler, data); } /*! \fn atom_selection * duplicate_ogl_selection (atom_selection * old_sel) \brief copy an atom selection \param old_sel the atom selection to copy */ atom_selection * duplicate_ogl_selection (atom_selection * old_sel) { int i, j; atom_in_selection * at, * bt; atom_selection * new_sel = g_malloc0(sizeof*new_sel); if (! old_sel -> selected) return new_sel; new_sel -> selected = old_sel -> selected; at = old_sel -> first; for (i=0; i< old_sel -> selected; i++) { if (! i) { new_sel -> first = new_atom_in_selection (at -> id, at -> sp); bt = new_sel -> first; new_sel -> last = NULL; } else { bt -> next = new_atom_in_selection (at -> id, at -> sp); bt -> next -> prev = bt; bt = bt -> next; } if (at -> next != NULL) at = at -> next; } bt -> next = NULL; new_sel -> last = bt; if (old_sel -> selected > 1 && old_sel -> selected < MAX_IN_SELECTION) { i = num_bonds (old_sel -> selected); new_sel -> selected_bonds = allocint (i); for (j=0; j selected_bonds[j] = old_sel -> selected_bonds[j]; } if (new_sel -> selected > 2) { i = num_angles (old_sel -> selected); new_sel -> selected_angles = allocint (i); for (j=0; j selected_angles[j] = old_sel -> selected_angles[j]; } if (new_sel -> selected > 3 && new_sel -> selected < MAX_IN_SELECTION-10) { i = num_dihedrals (old_sel -> selected); new_sel -> selected_dihedrals = allocint (i); for (j=0; j selected_dihedrals[j] = old_sel -> selected_dihedrals[j]; } } } } return new_sel; } /*! \fn void unselect_all_atoms (glwin * view) \brief remove all atom(s) from selection \param view the glwin the selection comes from */ void unselect_all_atoms (glwin * view) { int i, j, k; project * this_proj = get_project_by_id (view -> proj); for (i=0; i<2; i++) { save_all_selections (view, i); for (j=0; j steps; j++) { for (k=0; k natomes; k++) { if (j == view -> anim -> last -> img -> step) { if (this_proj -> atoms[j][k].pick[i]) { process_selected_atom (this_proj, view, k, 0, 0, i); } } else { this_proj -> atoms[j][k].pick[i] = FALSE; } } } update_all_selections (view, i); } init_default_shaders (view); } /*! \fn void restore_ogl_selection (glwin * view) \brief restore a saved atom selection \param view the glwin to restore the selection to */ void restore_ogl_selection (glwin * view) { int i, j, k, l; project * this_proj = get_project_by_id (view -> proj); unselect_all_atoms (view); for (i=0; i<2; i++) { view -> anim -> last -> img -> selected[i] = duplicate_ogl_selection (view -> tmp_sel[i]); if (view -> anim -> last -> img -> selected[i] -> selected) { atom_in_selection * at = view -> anim -> last -> img -> selected[i] -> first; while (at) { for (j=0; j steps; j++) { this_proj -> atoms[j][at -> id].pick[i] = TRUE; } at = at -> next; } } if (view -> stored_labels[i]) { for (j=1; j stored_labels[i][0]; j++) { k = view -> stored_labels[i][j]; for (l=0; l steps; l++) this_proj -> atoms[l][k].label[i] = TRUE; } g_free (view -> stored_labels[i]); view -> stored_labels[i] = NULL; } } init_default_shaders (view); if (check_label) { view -> labelled = check_label_numbers (this_proj, 2); update (view); } } /*! \fn void preserve_ogl_selection (glwin * view) \brief copy the atom selection, so that it can be re-used once the input assistant is closed. \param view the glwin the selection comes from */ void preserve_ogl_selection (glwin * view) { int h, i, j, k, l; project * this_proj = get_project_by_id (view -> proj); h = view -> anim -> last -> img -> step; k = 0; for (i=0; i<2; i++) { view -> tmp_sel[i] = duplicate_ogl_selection (view -> anim -> last -> img -> selected[i]); for (j=0; j<2; j++) { if (j && k) { view -> stored_labels[i] = allocint (k+1); view -> stored_labels[i][0] = k+1; } k = j; for (l=0; l natomes; l++) { if (this_proj -> atoms[h][l].label[i]) { if (j) { view -> stored_labels[i][k] = l; this_proj -> atoms[h][l].label[i] = FALSE; } k ++; } } } } unselect_all_atoms (view); } extern char * input_types[NINPUTS]; /*! \fn G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) \brief start an input creation assistant \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; int p = the_data -> a; int t = the_data -> b; // if a selection was made preserve it opengl_project_changed (p); preserve_ogl_selection (opengl_project -> modelgl); update (opengl_project -> modelgl); if (opengl_project -> steps > 1) { gchar * info = g_strdup_printf (_(" %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n"), opengl_project -> name, opengl_project -> steps); // preserve parameters int tmp_s = opengl_project -> modelgl -> anim -> last -> img -> step; int tmp_a = activep; int tmp_v = activev; tint t_data; t_data.a = p; t_data.b = iask (info, _("Enter the selected MD step: "), 5+opengl_project -> steps, opengl_project -> modelgl -> win); t_data.c = 1; g_free (info); // then change the MD step and select all atoms opengl_project -> modelgl -> anim -> last -> img -> step = t_data.b; selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & t_data); #else select_unselect_atoms (NULL, & t_data); #endif // create new project with selection force_mol = TRUE; create_new_project_using_data (opengl_project -> modelgl -> anim -> last -> img -> selected[0]); force_mol = FALSE; opengl_project -> modelgl -> anim -> last -> img -> step = tmp_s; restore_ogl_selection (opengl_project -> modelgl); // Set the new project to be use for input creation p = activep; preserve_ogl_selection (active_glwin); // restore old active project active_project_changed (tmp_a); opengl_project_changed (tmp_v); } switch (t) { case 0: // DLPOLY create_classical_force_field (p, 0); break; case 1: // LAMMPS create_classical_force_field (p, 1); break; case 2: create_qm_input_file (0, p, 0); break; case 3: create_qm_input_file (1, p, 0); break; case 4: create_qm_input_file (0, p, 1); break; case 5: create_qm_input_file (1, p, 1); break; } } atomes_1.3.1/src/calc/calc.h0000664000175000017500000000300715212624223015251 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file calc.h * @short Variable declarations for the MD input preparation assistants * @author Sébastien Le Roux */ /* * This header file: 'calc.h' * * Contains: - Variable declarations for the MD input preparation assistants */ #ifndef CALC_H_ #define CALC_H_ #define MAXDATAQM 7 extern GtkWidget * qm_assistant; extern project * qm_proj; extern glwin * qm_view; extern coord_info * qm_coord; extern GtkTextBuffer * qmbuffer[MAXDATAQM+2]; extern gboolean force_mol; extern int idopt; extern int icalc; extern int ident; extern int icomb; extern gboolean selection_confirmed; extern G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data); extern void field_question (gchar * question, GCallback handler, gpointer data); #endif atomes_1.3.1/src/calc/dl_poly/0000775000175000017500000000000015212624223015640 5ustar lerouxlerouxatomes_1.3.1/src/calc/dl_poly/dlp_atom.c0000664000175000017500000006045515212624223017615 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_atom.c * @short Functions to handle atom selection(s) when creating a force field \n Functions to remove / add field atom from a force field * @author Sébastien Le Roux */ /* * This file: 'dlp_atom.c' * * Contains: * - The functions to handle atom selection(s) when creating a force field - The functions to remove / add field atom from a force field * * List of functions: void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clean_old_atom (field_atom* at, int atos, int * atid); void adjust_field_struct (int oid, int k, field_struct * olds); void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda); G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data); G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); */ #include "dlp_field.h" #include "calc.h" #include "interface.h" #include "glview.h" int active_sel; int * new_at; int ** sel_at; int a_ato; extern int * astr; extern int vdw_id; extern ColRGBA init_color (int id, int numid); field_atom* at_to_remove; GtkTreeViewColumn * ato_col[4]; GtkCellRenderer * ato_cell[4]; extern GtkWidget * remove_label; extern GtkCellRenderer * remove_renderer[5]; extern GtkTreeViewColumn * remove_col[5]; extern float val; extern float * val_at; extern void field_selection (int i, int viz, int lab, int aid); extern void field_unselect_all (); extern void compare_non_bonded (gchar * fatom); extern void init_all_impropers_inversions (int stru); extern void init_default_shaders (glwin * view); /*! \fn void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer sensitivity in the DL-POLY atom(s) selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int m; gtk_tree_model_get (mod, iter, 0, & m, -1); if (a_ato && m-1 != new_at[0]) { gtk_cell_renderer_set_visible (renderer, FALSE); } else { gtk_cell_renderer_set_visible (renderer, TRUE); } } /*! \fn void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer color and markup in the DL-POLY atom(s) selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 3, & j, -1); gtk_tree_model_get (mod, iter, 0, & i, -1); set_renderer_color (j, renderer, init_color (i, num_field_objects)); } /*! \fn G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select field atom toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j; GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; tmp_fbt = get_active_atom (tmp_fmol -> id, new_at[a_ato-1]); for (j=0; j num; j++) field_selection (tmp_fbt -> list[j], FALSE, FALSE, new_at[a_ato-1]); new_at[a_ato-1] = -1; a_ato --; gtk_tree_store_set (* model, & iter, 3, 0, -1); } else { a_ato ++; gtk_tree_store_set (* model, & iter, 3, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); new_at[a_ato-1] = i-1; toviz.c = 1; tmp_fbt = get_active_atom (tmp_fmol -> id, new_at[a_ato-1]); for (j=0; j num; j++) field_selection (tmp_fbt -> list[j], TRUE, TRUE, new_at[a_ato-1]); } init_default_shaders (tmp_view); gtk_tree_view_column_set_cell_data_func (remove_col[3], remove_renderer[3], set_sensitive_atom, NULL, NULL); i = combo_get_active (combo_mol[0]); if (new_at[0] == -1) { gtk_label_set_text (GTK_LABEL(remove_label), remove_text(-2, 0, at_to_remove -> name)); } else { gtk_label_set_text (GTK_LABEL(remove_label), remove_text(i, new_at[0], at_to_remove -> name)); } gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); } /*! \fn void clean_old_atom (field_atom* at, int atos, int * atid) \brief remove atom list from field atom \param at the field atom \param atos the number of atom(s) to remove \param atid the list of atom(s) id to remove */ void clean_old_atom (field_atom* at, int atos, int * atid) { int h, i, j, k, l, m; gboolean save; h = at -> num - atos*tmp_fmol -> multi; int * tlist = allocint (h); int * dlist = allocint (h); j = -1; for (i=0; i < at -> num; i++) { save = TRUE; for (k=0; k list_id[i] == atid[k]) { save = FALSE; break; } } if (save) { j ++; tlist[j] = at -> list[i]; dlist[j] = at -> list_id[i]; } } at -> num = h; g_free (at -> list); at -> list = duplicate_int (h, tlist); g_free (at -> list_id); at -> list_id = duplicate_int (h, dlist); for (i=0; i list[i]; l = at -> list_id[i]; for (m=0; m< tmp_fmol -> multi; m++) { if (tmp_proj -> atoms[0][k].coord[2] == tmp_fmol -> fragments[m]) break; } tmp_fmol -> atoms_id[l][m].b = i; } g_free (tlist); g_free (dlist); } // extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn void adjust_field_struct (int oid, int k, field_struct * olds) \brief adjust field molecule structural property \param oid the target field atom type \param k the type of structural property to adjust \param olds the field molecule structural property to adjust */ void adjust_field_struct (int oid, int k, field_struct * olds) { int i, j; gboolean doit; field_struct * str; i = struct_id(k); int * aids = allocint (i); while (olds) { doit = TRUE; if (oid < 0) { for (j=0; j aid[j]; } else { for (j=0; j aid[j] < oid) { aids[j] = olds -> aid[j]; } else if (olds -> aid[j] > oid) { aids[j] = olds -> aid[j] - 1; } else { doit = FALSE; } } } if (doit) { j = get_struct_id_from_atom_id (k, aids); if (j > 0) { str = get_active_struct (k, tmp_fmol -> id, j-1); str -> def = duplicate_field_prop (olds -> def, k); if (olds -> other) { duplicate_other_prop (oid, olds, str); } } } olds = olds -> next; } // if (k == 0) print_all_field_struct (tmp_fmol, k); g_free (aids); } /*! \fn G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) \brief DL-POLY force field atom selection - running the dialog \param add_dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) { gboolean done = FALSE; selection_confirmed = FALSE; int i, j, k; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_ato > 0 && a_ato < tmp_fat -> num / tmp_fmol -> multi) { if (a_ato > 1) { str = g_strdup_printf (_("%d atoms have been selected !"), a_ato); str = g_strdup_printf (_("%s\nConfirm this choice and create a new field atom to describe them ?"), str); } else { str = g_strdup_printf (_("A single atom has been selected !")); str = g_strdup_printf (_("%s\nIs this correct, create a new field atom to describe it ?"), str); } field_question (str, G_CALLBACK(confirm_selection), NULL); if (selection_confirmed) { done = TRUE; i = combo_get_active (combo_mol[0]); tmp_fbt = get_active_atom (i, tmp_fmol -> atoms-1); new_at = allocint (a_ato); j = 0; for (k=0; k num/tmp_fmol -> multi; k++) { if (sel_at[1][k]) { new_at[j] = sel_at[0][k]; j ++; } } tmp_fbt -> next = init_field_atom (tmp_fmol -> atoms, OTHER, tmp_fat -> sp, a_ato*tmp_fmol -> multi, -1, new_at); tmp_fbt -> next -> prev = g_malloc0(sizeof*tmp_fbt -> next -> prev); tmp_fbt -> next -> prev = tmp_fbt; tmp_fmol -> atoms ++; clean_old_atom (tmp_fat, a_ato, new_at); g_free (new_at); field_struct * struct_saved[8]; for (k=0; k<8; k++) { struct_saved[k] = duplicate_field_struct_list (tmp_fmol -> first_struct[k], FALSE); } init_all_field_struct (FALSE); // Cross check saved vs. new struct for (k=0; k<8; k++) { adjust_field_struct (-1, k, struct_saved[k]); clean_field_struct_list (struct_saved[k]); } // Update non bonded interactions compare_non_bonded (tmp_fbt -> next -> name); } } break; default: done = TRUE; break; } if (done) { destroy_this_dialog (add_dialog); field_unselect_all (); update_field_trees (); } } /*! \fn G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) \brief DL-POLY force field atom selection - creating the dialog \param select_dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) { int sid = GPOINTER_TO_INT (data); gboolean done = FALSE; gboolean redone; gboolean save; gchar * str; int i, j, k, l; redone = FALSE; save = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (sid == 6 || sid == 7) { i = sid - 6; if (tmp_fpmf -> num[i] > 0) { k = 0; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) k ++; } } else { k = a_ato; } } else if (sid == 8) { if (tmp_frig -> num > 0) { k = 0; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) k ++; } } else { k = a_ato; } } else { k = a_ato; } if (k > 1) { if (sid < 2 || sid > 4) { str = g_strdup_printf (_("%d atoms selected !\nIs this correct ?"), k); } else { str = g_strdup_printf (_("%d atoms selected !\nOnly a single atom is required !"), k); redone = TRUE; } } else if (k == 1) { switch (sid) { case 1: str = g_strdup_printf (_("A single atom selected !\nIs this correct ?")); break; default: done = TRUE; save = TRUE; break; } } else { str = g_strdup_printf (_("No atom selected !\nIs this correct ?")); } if (! done) { selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed && ! redone) { done = TRUE; save = TRUE; } } break; default: done = TRUE; break; } if (done) { destroy_this_dialog (select_dialog); if (save) { if (sid == 1) { tmp_fat -> frozen = a_ato; for (i=0; i < tmp_fat -> num/tmp_fmol -> multi; i++) { j = sel_at[0][i]; k = sel_at[1][i]; for (l=0; l num; l++) { if (tmp_fat -> list_id[l] == j) { tmp_fat -> frozen_id[l] = k; } } } } else if ((sid > 1 && sid < 6) || sid == 9) { for (j=0; j mol -> natoms; j++) if (sel_at[0][j]) break; switch (sid) { case 2: tmp_fshell -> ia[0] = j+1; break; case 3: tmp_fshell -> ia[1] = j+1; break; case 4: tmp_fcons -> ia[0] = j+1; break; case 5: tmp_fcons -> ia[1] = j+1; break; case 9: tmp_ftet -> num = j+1; break; } } else if (sid == 6 || sid == 7) { tmp_fpmf -> num[i] = k; tmp_fpmf -> list[i] = NULL; tmp_fpmf -> weight[i] = NULL; if (k > 0) { tmp_fpmf -> list[i] = allocint (tmp_fpmf -> num[i]); tmp_fpmf -> weight[i] = allocfloat (tmp_fpmf -> num[i]); k = -1; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) { k ++; tmp_fpmf -> list[i][k] = j; tmp_fpmf -> weight[i][k] = val_at[j]; } } } } else if (sid == 8) { tmp_frig -> num = k; tmp_frig -> list = NULL; if (k > 0) { tmp_frig -> list = allocint (tmp_frig -> num); k = -1; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) { k ++; tmp_frig -> list[k] = j; } } } } else if (sid > 10 && sid < SEXTERN) { i = sid - 11; tmp_fbody -> na[i] = get_active_body (vdw_id, 0)-> na[0]; tmp_fbody -> a[i] = duplicate_int (get_active_body (vdw_id, 0) -> na[0], get_active_body (vdw_id, 0)-> a[0]); tmp_fbody -> ma[i] = duplicate_int (get_active_body (vdw_id, 0)-> na[0], get_active_body (vdw_id, 0)-> ma[0]); } } field_unselect_all (); } } /*! \fn void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda) \brief merge the field atom to remove with already other field atom \param to_merge the field atom to merge the atom to remove with \param to_remove the field atom to remove \param upda update field atom(s) data lists */ void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda) { int * tmp_ato = allocint (to_merge -> num + to_remove -> num); int * tmp_atd = allocint (to_merge -> num + to_remove -> num); int * tmp_fre = allocint (to_merge -> num + to_remove -> num); int i, j, k, l; i = to_merge -> num + to_remove -> num; for (j=0; j num; j++) { tmp_ato[j] = to_merge -> list[j]; tmp_atd[j] = to_merge -> list_id[j]; tmp_fre[j] = to_merge -> frozen_id[j]; } for (j=to_merge -> num; j list[j - to_merge -> num]; tmp_atd[j] = to_remove -> list_id[j - to_merge -> num]; tmp_fre[j] = to_remove -> frozen_id[j - to_merge -> num]; } int val_a, val_b, val_c; for (j=1; j-1; k--) { if (tmp_atd[k] < val_b) break; tmp_ato[k+1] = tmp_ato[k]; tmp_atd[k+1] = tmp_atd[k]; tmp_fre[k+1] = tmp_fre[k]; } tmp_ato[k+1] = val_a; tmp_atd[k+1] = val_b; tmp_fre[k+1] = val_c; } to_merge -> num = i; g_free (to_merge -> list); to_merge -> list = duplicate_int (to_merge -> num, tmp_ato); g_free (tmp_ato); g_free (to_merge -> list_id); to_merge -> list_id = duplicate_int (to_merge -> num, tmp_atd); g_free (tmp_atd); g_free (to_merge -> frozen_id); to_merge -> frozen_id = duplicate_int (to_merge -> num, tmp_fre); g_free (tmp_fre); if (upda) { for (i=0; i num; i++) { j = to_merge -> list[i]; k = to_merge -> list_id[i]; for (l=0; l< tmp_fmol -> multi; l++) { if (tmp_proj -> atoms[0][j].coord[2] == tmp_fmol -> fragments[l]) break; } tmp_fmol -> atoms_id[k][l].a = to_merge -> id; tmp_fmol -> atoms_id[k][l].b = i; tmp_proj -> atoms[0][j].faid = to_merge -> id; } } } /*! \fn G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) \brief remove atom from field molecule - running the dialog \param rmol the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) { int i, j, k; gboolean done = FALSE; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_ato) { i = combo_get_active (combo_mol[0]); field_atom* to_merge = get_active_atom(i, new_at[0]); str = g_strdup_printf (_("Merging with atom N°%d - %s !\nIs this correct ?"), new_at[0]+1, to_merge -> name); selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { done = TRUE; merging_atoms (to_merge, at_to_remove, TRUE); field_struct * struct_saved[8]; for (k=0; k<8; k++) { struct_saved[k] = duplicate_field_struct_list (tmp_fmol -> first_struct[k], FALSE); } // Modify the atom list j = at_to_remove -> id; if (at_to_remove -> prev == NULL) { tmp_fmol -> first_atom = at_to_remove -> next; tmp_fmol -> first_atom -> prev = NULL; } else if (at_to_remove -> next == NULL) { tmp_fct = at_to_remove -> prev; tmp_fct -> next = NULL; } else { tmp_fct -> next = at_to_remove -> next; at_to_remove -> next -> prev = tmp_fct; } // Finally clearing atom id tmp_fct = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { tmp_fct -> id = k; if (tmp_fct -> next != NULL) tmp_fct = tmp_fct -> next; } tmp_fmol -> atoms --; init_all_field_struct (FALSE); // Cross check saved vs. new struct for (k=0; k<8; k++) { adjust_field_struct (j, k, struct_saved[k]); clean_field_struct_list (struct_saved[k]); } // Non-bonded interactions: compare_non_bonded (to_merge -> name); } } break; default: done = TRUE; break; } if (done) destroy_this_dialog (rmol); } /*! \fn G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove atom from field molecule - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) { at_to_remove = (field_atom*) data; int i, j; field_object = 1; gchar * str = g_strdup_printf (_("Select the field atom to merge atom \"%s\" with"), at_to_remove -> name); GtkWidget * rmol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rmol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * remove_tree = NULL; GtkTreeIter iter; gchar * mol_title[4] = {i18n("Id."), i18n("Name"), i18n("Number"), i18n("Viz.3D & Merge with")}; gchar * ctype[4] = {"text", "text", "text", "active"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN}; a_ato = 0; new_at = allocint (1); GtkTreeStore * remove_model = gtk_tree_store_newv (4, col_type); remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); num_field_objects = tmp_fmol -> atoms; for (i=0; i<4; i++) { if (i < 3) { remove_renderer[i] = gtk_cell_renderer_text_new (); } else { remove_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(remove_renderer[i]), TRUE); g_signal_connect (G_OBJECT(remove_renderer[i]), "toggled", G_CALLBACK(select_field_atom), & remove_model); } remove_col[i] = gtk_tree_view_column_new_with_attributes (_(mol_title[i]), remove_renderer[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), remove_col[i]); if (i < 3) { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], atom_set_color_and_markup, NULL, NULL); } } // Clean 3D viz field_unselect_all (); // fill model j = 0; tmp_fat = tmp_fmol -> first_atom; for (i=0; i atoms; i++) { if (tmp_fat -> sp == at_to_remove -> sp && tmp_fat -> id != at_to_remove -> id) { j ++; gtk_tree_store_append (remove_model, & iter, NULL); gtk_tree_store_set (remove_model, & iter, 0, tmp_fat -> id+1, 1, tmp_fat -> name, 2, tmp_fat -> num, 3, 0, -1); } if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } g_object_unref (remove_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(remove_tree)); i = ((j+1)*40 < 500) ? (j+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rmol), 375, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); remove_label = markup_label(remove_text(-2, 0, at_to_remove -> name), -1, -1, 0.5, 0.5); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (rmol), remove_label, FALSE, FALSE, 0); run_this_gtk_dialog (rmol, G_CALLBACK(run_remove_atom_from_field_molecule), NULL); field_unselect_all (); update_field_trees (); } atomes_1.3.1/src/calc/dl_poly/dlp_ff_match.c0000664000175000017500000015304615212624223020423 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_ff_match.c * @short Functions the list the available database parameters for the atom database window * @author Sébastien Le Roux */ /* * This file: 'dlp_ff_match.c' * * Contains: * - The functions the list the available database parameters for the atom database window * * List of functions: int this_body_has_atom (field_nth_body * body, char * name); gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar); static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * get_this_prop_param (int sid, int key, int calc, int newp, float * val); gchar * get_this_prop_string (int sid, int oid, int type, int calc); void update_result_list (int sid, field_object_match * new_match); void fill_update_model (GtkTreeStore * store); void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path); void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void win_update_tree (GtkWidget * vbx); void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat); void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp); void check_atom_for_updates (); G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data); GtkWidget * create_update_tree (); GtkWidget * create_field_prop_combo (int f, int is_moy); GtkTreeModel * global_render_tree (); field_data * get_ff_data (int i, int j); field_object_match * duplicate_match (field_object_match * old_m); dint get_visible (gboolean result, gchar * the_name); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" extern int * atoms_id; extern int ** atoms_id_list; extern int * field_objects; extern char *** ff_atoms; extern char * fvars_bond[2][FBONDS][FBONDS_P]; extern char * fvars_angle[2][FANGLES][FANGLES_P]; extern char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P]; extern char * fvars_inversion[2][FINVERS][FINVERS_P]; extern char * fvars_vdw[2][FVDW][FVDW_P]; extern gchar * felemts[MAXDATA+1]; extern GtkWidget * afftype; extern GtkWidget * field_key_combo; extern GtkWidget * p_box; extern GtkWidget * param_box; field_object_match * up_match[9]; field_object_match * tmp_match, * other_match; field_data * ff_data; extern GtkWidget * param_prop_param_box (int pid); extern gchar * get_this_vdw_string (); extern G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); #define NUCOL 8 GtkTreeViewColumn * update_col[NUCOL]; GtkCellRenderer * update_renderer[NUCOL]; GtkWidget * update_tree; GtkWidget * ff_p_combo[2]; GtkTreeStore * update_model; dint up; GtkTreeModel * prop_to_up; field_object_match * tmp_res[9]; dint pup[2]; gboolean vdw_same_atom; /*! \fn gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) \brief check if object matches parameters from the database \param fsid the type of field property \param nat the number of atoms for this field property \param ffc object data \param fpar field database data */ gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) { int i, j; int has_x = 0; gboolean a_match, b_match; for (i=0; i0", "k'/3", "k''/4"}; char * vanq[4] = {"k/2", "θ0", "k'/3", "k''/4"}; char * vdwij[2] = {"Æ�i", "r0i/2.0"}; switch (sid/2) { case 0: if (newp && (key == 0 || key == 5)) { vars = (char **)vbdq; } else { vars = (char **)fvars_bond[key]; } break; case 1: if (newp && key < 2) { vars = (char **)vanq; } else { vars = (char **)fvars_angle[key]; } break; default: if (sid > 7) { if (newp && (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) && ! calc) { vars = (char **)vdwij; } else { vars = (char **)fvars_vdw[key]; } } else if (sid < 7) { vars = (char **)fvars_dihedral[key]; } else { vars = (char **)fvars_inversion[key]; } break; } return g_strdup_printf ("%s pot. (%s)", dlp_to_translate(activef,(sid > 7) ? 10 : sid+2, key) ? _(fnames[activef][(sid > 7) ? 10 : sid+2][key]) : fnames[activef][(sid > 7) ? 10 : sid+2][key], parameters_info ((sid > 7) ? 9 : sid+1, key, vars, val)); } /*! \fn gchar * get_this_prop_string (int sid, int oid, int type, int calc) \brief get property name \param sid the type of field property \param oid the number of atoms for this field property \param type the id of the force field database \param calc from the tree model (1) or from the selection combo box (0) */ gchar * get_this_prop_string (int sid, int oid, int type, int calc) { gchar * str; int i, j, k, l; i = (sid > 7) ? 1 : struct_id (sid+7); ff_data = get_ff_data (sid, type); float * val; for (j=0; j atoms_id[oid][j]; if (j > 0) { str = g_strdup_printf ("%s-%s", str, (k < 0) ? "X" : ff_atoms[k][2]); } else { str = g_strdup_printf ("%s", (k < 0) ? "X" : ff_atoms[k][2]); } } j = abs(ff_data -> key)-1; k = fvalues[activef][(sid < 8) ? sid+1 : 9][j]; val = allocfloat (k); for (l=0; l param[oid][l]; // Here if (sid == 8 && calc) { if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { float v = sqrt(ff_data -> param[oid][0]*ff_data -> param[oid][0]); val[0] = v*pow((double)(ff_data -> param[oid][1] + ff_data -> param[oid][1]), 12.0); val[1] = 2.0 * v * pow((double)(ff_data -> param[oid][1] + ff_data -> param[oid][1]), 6.0); } else if (tmp_field -> type <= CVFF_AUG) { for (l=0; l<2; l++) val[l] = sqrt(ff_data -> param[oid][l]*ff_data -> param[oid][l]); } } str = g_strdup_printf ("%s: %s", str, get_this_prop_param(sid, j, calc, 1, val)); g_free (val); return str; } /*! \fn field_object_match * duplicate_match (field_object_match * old_m) \brief create a copy of a field match \param old_m the field match to duplicate */ field_object_match * duplicate_match (field_object_match * old_m) { field_object_match * new_m = g_malloc0(sizeof*new_m); new_m -> id = old_m -> id; new_m -> obj = old_m -> obj; new_m -> oid = old_m -> oid; new_m -> type = old_m -> type; new_m -> use = old_m -> use; return new_m; } /*! \fn void update_result_list (int sid, field_object_match * new_match) \brief update avialable parameter list \param sid the type of field property \param new_match the field match */ void update_result_list (int sid, field_object_match * new_match) { if (tmp_res[sid]) { field_object_match * map, * mbp; map = duplicate_match (new_match); mbp = tmp_res[sid]; while (mbp) { if (mbp -> id == map -> id && mbp -> obj == map -> obj) { // Changing a value already saved if (mbp -> next && mbp -> prev) { mbp -> prev -> next = map; map -> prev = mbp -> prev; map -> next = mbp -> next; mbp -> next -> prev = map; } else if (mbp -> next) { mbp -> next -> prev = map; map -> next = mbp -> next; } else if (mbp -> prev) { mbp -> prev -> next = map; map -> prev = mbp -> prev; } } else if (! mbp -> next) { mbp -> next = map; map -> prev = mbp -> next; mbp = mbp -> next; } mbp = mbp -> next; } } else { tmp_res[sid] = duplicate_match (new_match); } } /*! \fn void fill_update_model (GtkTreeStore * store) \brief fill the parameters database tree store \param store the GtkTreeStore to fill */ void fill_update_model (GtkTreeStore * store) { GtkTreeIter prop_level, struct_level; field_atom* upat; int g, h, i, j; gchar * str; gchar * stra, * strb, * strc, * strd, * stre; for (i=0; i<9; i++) { g = (i==8) ? i+1 : i; h = (i==8) ? 2 : struct_id (i+7); if (up_match[i]) { if (g%2 && i < 6) { if (i == 3 && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF_AUG) { str = g_strdup_printf ("%s (2,3)", _(felemts[8+g])); } else { str = g_strdup_printf ("%s (2)", _(felemts[8+g])); } } else if (i < 8) { if (i == 2 && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF_AUG) { str = g_strdup_printf ("%s (3)", _(felemts[8+g])); } else { str = g_strdup_printf ("%s", _(felemts[8+g])); } } else if (tmp_field -> type <= AMBER99 || tmp_field -> type > COMPASS) { str = g_strdup_printf ("%s (3)", _(felemts[8+i])); } else if (tmp_field -> type <= CHARMMSI) { str = g_strdup_printf ("%s (4)", _(felemts[8+i])); } else { str = g_strdup_printf ("%s", _(felemts[8+i])); } gtk_tree_store_append (store, & prop_level, NULL); gtk_tree_store_set (store, & prop_level, 0, -(i+1), 1, 0, 2, str, 3, NULL, 4, NULL, 5, NULL, 6, NULL, NUCOL-1, FALSE, -1); g_free (str); tmp_match = up_match[i]; while (tmp_match) { if (i<8) { tmp_fstr = get_active_struct (i, tmp_fmol -> id, tmp_match -> id); if (tmp_match -> obj > 0) { tmp_fprop = get_active_prop (tmp_fstr -> other, tmp_match -> obj - 1); tmp_match -> use = TRUE; } else { tmp_fprop = tmp_fstr -> def; tmp_match -> use = TRUE; } } else { tmp_fbody = get_active_body (tmp_match -> obj, 0); tmp_match -> use = TRUE; } for (j=0; j id, tmp_fstr -> aid[j]); } else { upat = get_active_atom (tmp_fbody -> ma[j][0], tmp_fbody -> a[j][0]); } if (j > 0) { stra = g_strdup_printf ("%s - ""%s""", stra, upat -> name); if (tmp_match -> obj > 0 && i < 8) strb = g_strdup_printf ("%s-%d", strb, tmp_fprop -> aid[j]+1); strc = g_strdup_printf ("%s - %s", strc, tmp_proj -> chemistry -> label[upat -> sp]); } else { stra = g_strdup_printf ("""%s""", upat -> name); if (tmp_match -> obj > 0 && i < 8) strb = g_strdup_printf ("%d", tmp_fprop -> aid[j]+1); strc = g_strdup_printf ("%s", tmp_proj -> chemistry -> label[upat -> sp]); } } other_match = tmp_match; if (tmp_match -> use) { update_result_list (i, tmp_match); strd = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); } else { strd = g_strdup_printf (_("Select ...")); } if (i < 8) { stre = g_strdup_printf ("%s", get_this_prop_param(i, tmp_fprop -> key, 1, 0, tmp_fprop -> val)); } else { stre = g_strdup_printf ("%s", get_this_prop_param(i, tmp_fbody -> key, 1, 0, tmp_fbody -> val)); } if (tmp_match -> obj > 0 && i < 8) { str = g_strdup_printf ("%s", strb); g_free (strb); } else { str = g_strdup_printf ("%s (*)", stra); } gtk_tree_store_append (store, & struct_level, & prop_level); while (other_match && other_match -> id == tmp_match -> id && other_match -> obj == tmp_match -> obj) { other_match = other_match -> next; } gtk_tree_store_set (store, & struct_level, 0, i, 1, (i == 8) ? tmp_match -> obj : tmp_match -> id, 2, NULL, 3, str, 4, strc, 5, strd, 6, stre, NUCOL-1, tmp_match -> use, -1); g_free (str); g_free (stra); g_free (strc); g_free (strd); g_free (stre); tmp_match = other_match; } } } } /*! \fn GtkTreeModel * global_render_tree () \brief create the field property combo box model that contains the list of available parameters */ GtkTreeModel * global_render_tree () { int i; GtkTreeIter iter; GtkTreeStore * store; gchar * str; store = gtk_tree_store_new (1, G_TYPE_STRING); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Select ..."), -1); for (i=0; i<9; i++) { if (up_match[i]) { other_match = up_match[i]; while (other_match) { str = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, str, -1); g_free (str); other_match = other_match -> next; } } } return gtk_tree_model_filter_new(GTK_TREE_MODEL (store), NULL); } /*! \fn dint get_visible (gboolean result, gchar * the_name) \brief get cell renderer visibility poitner \param result is renderer visible or not ? \param the_name the target name */ dint get_visible (gboolean result, gchar * the_name) { dint vis; gchar * str; gboolean done = FALSE; // With the "Select ..." path starts at 1 and not 0 vis.a = vis.b = 0; int i; for (i=0; i<9; i++) { if (up_match[i]) { other_match = up_match[i]; while (other_match) { if (i == up.a && ((i < 8 && other_match -> id == up.b) || (i == 8 && other_match -> obj == up.b))) { if (result) { str = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); if (g_strcmp0 (str, the_name) == 0) { vis.a = -1; return vis; } } vis.b ++; done = TRUE; } else if (! done) { vis.a ++; } other_match = other_match -> next; } if (done) break; } } return vis; } /*! \fn G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) \brief change combo box in tree model callback \param combo the cell renderer combo box \param path_string the path in the tree model \param iter the tree iter \param data the associated data pointer */ G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) { GValue val = {0, }; GObject * cmodel; dint res; g_object_get (combo, "model", & cmodel, NULL); gtk_tree_model_get_value ((GtkTreeModel *)cmodel, iter, 0, & val); if (gtk_tree_model_get_iter_from_string ((GtkTreeModel *)update_model, iter, path_string)) { gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); gtk_tree_store_set (update_model, iter, 5, str, -1); res = get_visible (TRUE, str); if (res.a < 0) { update_result_list (up.a, other_match); } } } /*! \fn void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) \brief update force field parameters database tree model data \param tree the GtkWidget sending the signal \param data the associated data pointer \param path the path in the tree model */ void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) { GtkTreeModel * tmodel = gtk_tree_view_get_model (GTK_TREE_VIEW(tree)); GtkTreeIter update_iter; up.a = up.b = -1; if (gtk_tree_model_get_iter (tmodel, & update_iter, path)) { gtk_tree_model_get (tmodel, & update_iter, 0, & up.a, 1, & up.b, -1); gtk_tree_model_filter_refilter ((GtkTreeModelFilter *)prop_to_up); } } #ifdef GTK4 /*! \fn void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the DL-POLY force field parameters database window GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the DL-POLY force field parameters database window GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(update_tree), event_x, event_y, & e_x, & e_y); gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(update_tree), e_x, e_y, & path, & column, & i, & j); #else gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(update_tree), event_x, event_y, & path, & column, & i, & j); #endif if (path != NULL) { get_update_tree_data (update_tree, data, path); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the DL-POLY force field parameters database window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { ff_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the DL-POLY force field parameters database window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { ff_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief mouse button event on the DL-POLY force field parameters database window \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; ff_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #endif /*! \fn G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select field parameter toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeIter iter; int i; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(update_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(update_model), & iter, 7, & i, -1); gchar * str; gtk_tree_model_get (GTK_TREE_MODEL(update_model), & iter, 5, & str, -1); dint res = get_visible(TRUE, str); g_free (str); if (res.a < 0) { tmp_match = tmp_res[up.a]; while (tmp_match) { if (tmp_match -> id == other_match -> id && tmp_match -> obj == other_match -> obj) { tmp_match -> use = ! i; break; } tmp_match = tmp_match -> next; } gtk_tree_store_set (update_model, & iter, 7, ! i, -1); } } /*! \fn static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) \brief udpate cell renderer visibility \param model the target GtkTreeModel \param iter the target tree iter \param data the associated data pointer */ static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) { GtkTreeIter upiter; dint vis; gchar * str; if (gtk_tree_model_get_iter_first(model, & upiter)) { GtkTreePath * path = gtk_tree_model_get_path(model, iter); str = gtk_tree_path_to_string(path); gtk_tree_path_free(path); if (g_strcmp0 (str, "0") == 0) return TRUE; vis = get_visible (FALSE, NULL); int p = (int)string_to_double ((gpointer)str); g_free (str); if (p > vis.a && p < vis.a+vis.b+1) return TRUE; } return FALSE; } /*! \fn void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field parameter set renderer markup and visibility in the parameter database selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); k = (j < 0) ? 0 : 1; gtk_cell_renderer_set_visible (renderer, (i == 2) ? ! k : k); if ((j < 0 && i == 2) || (j>-1 && i != 7)) { set_renderer_markup (mod, iter, renderer, i); } } /*! \fn GtkWidget * create_update_tree () \brief create the parameters database tree model */ GtkWidget * create_update_tree () { int i; gchar * str; gchar * up_title[NUCOL]={" ", " ", i18n("Property"), i18n("Atoms"), i18n("Species"), i18n("parameters (1)"), i18n("Actual parameters (1)"), i18n("Update ?")}; GType up_type[NUCOL] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}; update_model = gtk_tree_store_newv (NUCOL, up_type); update_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(update_model)); for (i=0; i type], _(up_title[i])); } else { str = g_strdup_printf ("%s", (i > 1) ? _(up_title[i]) : up_title[i]); } if (i == 5) { update_renderer[i] = gtk_cell_renderer_combo_new(); prop_to_up = global_render_tree (); g_object_set (update_renderer[i], "model", prop_to_up, "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter *)prop_to_up, (GtkTreeModelFilterVisibleFunc)G_CALLBACK(update_rend), GTK_TREE_VIEW(update_tree), NULL); g_object_unref (prop_to_up); g_signal_connect (G_OBJECT(update_renderer[i]), "editing-started", G_CALLBACK(markup_action_renderer), NULL); g_signal_connect (G_OBJECT(update_renderer[i]), "changed", G_CALLBACK(changed_update_renderer), NULL); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "text", i, NULL); } else if (i == NUCOL-1) { update_renderer[i] = gtk_cell_renderer_toggle_new (); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "active", i, NULL); g_signal_connect (G_OBJECT(update_renderer[i]), "toggled", G_CALLBACK(on_toggle_update), NULL); } else { update_renderer[i] = gtk_cell_renderer_text_new(); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "text", i, NULL); } g_free (str); if (i > 1) { gtk_tree_view_column_set_alignment (update_col[i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(update_tree), update_col[i]); gtk_tree_view_column_set_cell_data_func (update_col[i], update_renderer[i], field_set_markup_and_visible, GINT_TO_POINTER(i), NULL); } } for (i=0; i<9; i++) tmp_res[i] = NULL; fill_update_model (update_model); g_object_unref (update_model); GtkTreeSelection * update_select = gtk_tree_view_get_selection (GTK_TREE_VIEW(update_tree)); gtk_tree_selection_set_mode (update_select, GTK_SELECTION_SINGLE); #ifdef GTK4 add_widget_gesture_and_key_action (update_tree, "ff-button-pressed", G_CALLBACK(on_ff_button_pressed), NULL, "ff-button-released", G_CALLBACK(on_ff_button_released), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(update_tree), "button_press_event", G_CALLBACK(on_ff_button_event), NULL); #endif return update_tree; } /*! \fn void win_update_tree (GtkWidget * vbx) \brief update the parameters database tree model \param vbx the GtkWidget sending the signal */ void win_update_tree (GtkWidget * vbx) { int i; update_tree = NULL; update_model = NULL; for (i=0; i-1", "kJ mol-1", "K B-1", i18n("DL_POLY internal units")}; gchar * str = g_strdup_printf (_("\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n"), field_acro[tmp_field -> type], (ff_unit == 4) ? _(funits[ff_unit]) : funits[ff_unit]); i = 3; if (tmp_field -> type > AMBER99 && tmp_field -> type < CVFF) { str = g_strdup_printf (_("%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n"), str, i, field_acro[tmp_field -> type]); i ++; } if (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS) { str = g_strdup_printf (_("%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:"), str, i, field_acro[tmp_field -> type]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 0); if (tmp_field -> type < CVFF || tmp_field -> type > COMPASS) { str = g_strdup_printf (_("%s\nA and B are calculated using Æ�i/j and r0i/j provided by the force field parameters."), get_this_vdw_string()); if (tmp_field -> type > AMBER99) { str = g_strdup_printf (_("%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored."), str, field_acro[tmp_field -> type]); } } else { str = g_strdup_printf (_("%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters."), get_this_vdw_string()); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 200); g_free (str); } } /*! \fn void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) \brief look up in database for this field property \param fsid the type of field property \param fpid global propert (0) or atom specific (> 0) \param ssid the id of the field property to check \param nat the number of atoms for this field property \param fat the list of field atom(s) \param fsp the list of the chemical species for the field atom(s) */ void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) { int i, j; tmp_obj_id = field_objects_id[(fsid < 6) ? fsid / 2 : fsid - 3]; while (tmp_obj_id) { i = tmp_obj_id -> oid; j = tmp_obj_id -> type; ff_data = get_ff_data (fsid, j); if (is_this_object_a_match (fsid, nat, fsp, ff_data -> atoms_z[i])) { if (is_this_object_a_match (fsid, nat, fat, ff_data -> atoms_id[i])) { if (up_match[fsid] == NULL) { up_match[fsid] = g_malloc0(sizeof*up_match[fsid]); tmp_match = up_match[fsid]; } else { tmp_match -> next = g_malloc0(sizeof*tmp_match); tmp_match = tmp_match -> next; } tmp_match -> id = ssid; tmp_match -> obj = fpid; tmp_match -> oid = i; tmp_match -> type = j; // g_debug ("Match :: fsid= %d, -> id = %d, -> obj = %d, -> oid = %d, -> type = %d", fsid, ssid, fpid, i, j); } } tmp_obj_id = tmp_obj_id -> next; } } /*! \fn void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) \brief check if the database offers parameters for a field property \param fsid the type of field property \param fpid global propert (0) or atom specific (> 0) \param ssid the id of the field property to check \param fat the list of field atom(s) \param fsp the list of the chemical species for the field atom(s) */ void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) { int i, j, k; int * ffat, * ffsp; gboolean update = TRUE; field_atom* tmpat; i = struct_id(fsid+7); for (j=0; j id, fat[j]); if (tmpat -> id != tmp_fat -> id) { if (tmpat -> afid < 0) { if (atoms_id[k] == 0 && extraz_id[(fsid < 6)? fsid/2: fsid-3][k] == 0) { update = FALSE; } } } } if (update) { // Is there any field data available ? // Check the field data for available parameters ffat = allocint (i); ffsp = allocint (i); for (j=0; j id, fat[j]) -> afid; ffsp[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][get_active_atom (tmp_fmol -> id, fat[j]) -> sp]; } look_up_this_field_object (fsid, fpid, ssid, i, ffsp, ffat); g_free (ffat); g_free (ffsp); } } /*! \fn int this_body_has_atom (field_nth_body * body, char * name) \brief check if non bonded potential has this field atom \param body the non bonded potential to check \param name the name of the target field atom */ int this_body_has_atom (field_nth_body * body, char * name) { int i, j, k, l , m; m = 0; for (i=0; i<2; i++) { for (j=0; j na[i]; j++) { k = body -> ma[i][j]; l = body -> a[i][j]; if (g_strcmp0 (get_active_atom(k, l) -> name, name) == 0) m += (i+1); } } return m; } /*! \fn G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) \brief check for parameters in the database to be used in the force field - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) { int i, j, k, l, m; float v; gboolean update_vdw = FALSE; if (response_id == GTK_RESPONSE_APPLY) { for (i=0; i<9; i++) { if (tmp_res[i]) { tmp_match = other_match = tmp_res[i]; while (other_match) { if (tmp_match -> use) { if (i < 8) { tmp_fstr = get_active_struct (i, tmp_fmol -> id, tmp_match -> id); tmp_fprop = (tmp_match -> obj > 0) ? get_active_prop (tmp_fstr -> other, tmp_match -> obj - 1) : tmp_fstr -> def; g_free (tmp_fprop -> val); ff_data = get_ff_data (i, tmp_match -> type); tmp_fprop -> val = duplicate_float(ff_data -> npar, ff_data -> param[tmp_match -> oid]); // UNITS ! tmp_fprop -> fpid = tmp_match -> oid; tmp_fprop -> key = abs(ff_data -> key)-1; if ((i < 2 && (tmp_fprop -> key == 1 || tmp_fprop -> key == 5)) || ((i == 2 || i == 3) && tmp_fprop -> key < 2)) { for (l=0; l npar; l++) { if (l != 1) tmp_fprop -> val[l] *= (l+2 - l/3); } } if (ff_unit != tmp_field -> energy_unit) { v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; tmp_fprop -> val[0] = tmp_fprop -> val[0]*v; if ((i/2 == 1 && tmp_fprop -> key == 1) || (i/2 == 1 && tmp_fprop -> key == 3)) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; tmp_fprop -> val[3] = tmp_fprop -> val[3]*v; } else if (i/2 == 0 && tmp_fprop -> key == 1) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; } } tmp_fprop -> use = TRUE; } else { // Pot must be defined for the 2 atoms tmp_fbody = get_active_body (0, 0); ff_data = get_ff_data (i, tmp_match -> type); while (tmp_fbody) { update_vdw = FALSE; j = this_body_has_atom (tmp_fbody, tmp_fat -> name); k = tmp_match -> oid; if (j == 3) { tmp_fbody -> fpid[0] = tmp_fbody -> fpid[1] = k; j = l = k; update_vdw = TRUE; } else if (j) { j --; tmp_fbody -> fpid[j] = k; // Need to do something here ! l = (j) ? 0 : 1; update_vdw = FALSE; if (tmp_fbody -> fpid[l] > -1) { j = k; l = tmp_fbody -> fpid[l]; update_vdw = TRUE; } } if (update_vdw) { if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { v = sqrt(ff_data -> param[j][0]*ff_data -> param[l][0]); tmp_fbody -> val[0] = v*pow((double)(ff_data -> param[j][1] + ff_data -> param[l][1]), 12.0); tmp_fbody -> val[1] = 2.0 * v * pow((double)(ff_data -> param[j][1] + ff_data -> param[l][1]), 6.0); } else if (tmp_field -> type <= CVFF_AUG) { for (m=0; m<2; m++) tmp_fbody -> val[m] = sqrt(ff_data -> param[j][m]*ff_data -> param[l][m]); } } tmp_fbody = tmp_fbody -> next; } } } other_match = tmp_match -> next; g_free (tmp_match); tmp_match = other_match; } } } for (i=0; i<9; i++) { if (up_match[i]) { tmp_match = other_match = up_match[i]; while (other_match) { other_match = tmp_match -> next; g_free (tmp_match); tmp_match = other_match; } up_match[i] = NULL; } } } destroy_this_dialog (dialog); } /*! \fn void check_atom_for_updates () \brief check for parameters in the database to be used in the force field - creating the dialog */ void check_atom_for_updates () { int i, j, k, l; int * fsp; gboolean update_this = FALSE; field_prop * oth; // Lookup for this atoms in bonds, etc ... and if parameters, then look for update is all atoms are field auto // Field struct (bonds, bond rest., angles, angles rest., dih, tors. rest., imp., vdw.) // g_debug ("Checking for field parameters of atoms: %s - id = %d", tmp_fat -> name, tmp_fat -> id + 1); for (i=0; i<8; i++) { up_match[i] = NULL; if ((i != 4 && i != 5) || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { if (get_ff_data(i, 0) && tmp_field -> afp[i+15]) { k = struct_id(i+7); fsp = allocint (k); tmp_fstr = tmp_fmol -> first_struct[i]; while (tmp_fstr != NULL) { for (j=0; j aid[j] == tmp_fat -> id) { // Update this field struct parameters for (l=0; l id, tmp_fstr -> aid[l]) -> sp; } check_this_fprop (i, 0, tmp_fstr -> id, tmp_fstr -> aid, fsp); oth = tmp_fstr -> other; while (oth != NULL) { check_this_fprop (i, oth -> pid+1, tmp_fstr -> id, tmp_fstr -> aid, fsp); oth = oth -> next; } break; } } tmp_fstr = tmp_fstr -> next; } g_free (fsp); } } } up_match[8] = NULL; if (tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { tmp_fbody = get_active_body (0, 0); while (tmp_fbody && tmp_field -> afp[23]) { if (this_body_has_atom (tmp_fbody, tmp_fat -> name) == 3) { tmp_obj_id = field_objects_id[5]; while (tmp_obj_id) { i = tmp_proj -> chemistry -> chem_prop[CHEM_Z][tmp_fat -> sp]; j = tmp_obj_id -> oid; if (ff_vdw -> atoms_z[j][0] == i && (ff_vdw -> atoms_id[j][0] == tmp_fat -> afid || ff_vdw -> atoms_id[j][0] == -1)) { if (up_match[8] == NULL) { up_match[8] = g_malloc0(sizeof*up_match[8]); tmp_match = up_match[8]; } else { tmp_match -> next = g_malloc0(sizeof*tmp_match); tmp_match = tmp_match -> next; } tmp_match -> id = 8; tmp_match -> obj = tmp_fbody -> id; tmp_match -> oid = tmp_obj_id -> oid; tmp_match -> type = 0; tmp_match -> use = FALSE; } tmp_obj_id = tmp_obj_id -> next; } } tmp_fbody = tmp_fbody -> next; } } for (i=0; i<9; i++) { if (up_match[i] != NULL) { update_this = TRUE; break; } } if (update_this) { gchar * str = g_strdup_printf (_("Update FIELD file with %s parameters using \"%s\" atom(s)"), field_acro[tmp_field -> type], exact_name(ff_atoms[tmp_fat -> afid][2])); GtkWidget * dial = dialog_cancel_apply (str, field_assistant, FALSE); g_free (str); GtkWidget * vbox = dialog_get_content_area (dial); win_update_tree (vbox); run_this_gtk_dialog (dial, G_CALLBACK(run_check_atom_for_updates), NULL); } } /*! \fn G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) \brief change the field parameter selection \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) { int i, j; dint * prop = (dint *)data; float * val, * vbl; i = combo_get_active ((GtkWidget *)box); if (i) { tmp_match = up_match[prop -> b]; for (j=0; j next; ff_data = get_ff_data (prop -> a - 7, tmp_match -> type); if (prop -> a < 15) { tmp_fprop -> key = abs(ff_data -> key) - 1; g_free (tmp_fprop -> val); tmp_fprop -> fpid = tmp_match -> oid; tmp_fprop -> val = duplicate_float (ff_data -> npar, ff_data -> param[tmp_match -> oid]); if ((prop -> a < 9 && (tmp_fprop -> key == 0 || tmp_fprop -> key == 5)) || ((prop -> a == 9 || prop -> a == 10) && tmp_fprop -> key < 2)) { for (j=0; j npar; j++) { if (j != 1) tmp_fprop -> val[j] *= (j+2 - j/3); } } if (ff_unit != tmp_field -> energy_unit) { float v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; tmp_fprop -> val[0] = tmp_fprop -> val[0]*v; if (((prop -> a - 7)/2 == 1 && tmp_fprop -> key == 1) || ((prop -> a - 7)/2 == 1 && tmp_fprop -> key == 3)) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; tmp_fprop -> val[3] = tmp_fprop -> val[3]*v; } else if ((prop -> a - 7)/2 == 0 && tmp_fprop -> key == 1) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; } } combo_set_active (field_key_combo, tmp_fprop -> key); } else { // Check both atoms pot, and use same pot. tmp_fbody -> key = abs(ff_data -> key) - 1; tmp_fbody -> fpid[prop -> b] = tmp_match -> oid; val = duplicate_float (ff_data -> npar, ff_data -> param[tmp_match -> oid]); combo_set_active (field_key_combo, tmp_fbody -> key); } } else { if (prop -> a < 15) { tmp_fprop -> fpid = -1; } else { tmp_fbody -> fpid[prop -> b] = -1; } } if (prop -> a == 15 && i) { float * vcl; float eij; float rij; i = (prop -> b) ? 0 : 1; if (vdw_same_atom) { tmp_fbody -> fpid[i] = tmp_fbody -> fpid[!i]; } if (tmp_fbody -> fpid[0] > -1 && tmp_fbody -> fpid[1] > -1) { j = tmp_fbody -> fpid[i]; vbl = duplicate_float (ff_data -> npar, ff_data -> param[j]); if ((tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) && tmp_fbody -> key == 0) { // 12-6, recalculate A and B vcl = allocfloat (ff_data -> npar); eij = sqrt(val[0]*vbl[0]); rij = (val[1] + vbl[1]); vcl[0] = eij * pow((double) rij, 12.0); vcl[1] = 2.0 * eij * pow((double) rij, 6.0); g_free (tmp_fbody -> val); tmp_fbody -> val = duplicate_float(ff_data -> npar, vcl); g_free (vcl); } else if (tmp_field -> type == CVFF || tmp_field -> type == CVFF_AUG) { // 12-6, A-B vcl = allocfloat (ff_data -> npar); vcl[0] = sqrt(val[0]*vbl[0]); vcl[1] = sqrt(val[1]*vbl[1]); g_free (tmp_fbody -> val); tmp_fbody -> val = duplicate_float(ff_data -> npar, vcl); g_free (vcl); } g_free (vbl); } g_free (val); } p_box = destroy_this_widget (p_box); p_box = param_prop_param_box (prop -> a); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); show_the_widgets (param_box); } /*! \fn GtkWidget * create_field_prop_combo (int f, int is_moy) \brief create field parameter selection combo box \param f the type of force field property \param is_moy global parameter (1) or atom(s) specific parameter (0) */ GtkWidget * create_field_prop_combo (int f, int is_moy) { int h, i, j, k, l, m, n; GtkWidget * vbox, * hbox; gboolean save_it; gchar * str_vdw[2]; gchar * str; h = (f == 15) ? 2 : struct_id(f); i = (f == 15) ? 2 : 1; for (j=0; j ma[j][0]; m = tmp_fbody -> a[j][0]; n = get_active_atom (l, m) -> sp; spec_z[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][n]; } if (g_strcmp0 (str_vdw[0], str_vdw[1]) == 0) { vdw_same_atom = TRUE; i = 1; } for (j=0; j ma[j][0]; m = tmp_fbody -> a[j][0]; if (i == 1) { str = g_strdup_printf (_("Atom (1 and 2) %s"), str_vdw[j]); } else { str = g_strdup_printf (_("Atom (%d) %s"), j+1, str_vdw[j]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ff_p_combo[j], FALSE, FALSE, 10); } for (j=0; j<2; j++) g_free (str_vdw[j]); } else { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); ff_p_combo[0] = create_combo (); combo_text_append (ff_p_combo[0], _("Manual")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ff_p_combo[0], FALSE, FALSE, 10); for (j=0; j aid[j]; l = get_active_atom (tmp_fmol -> id, k) -> sp; } else { k = tmp_fprop -> aid[j]; l = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[k][0].a) -> sp; } spec_z[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][l]; } } if (f != 15 || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { for (j=0; j oid; l = tmp_obj_id -> type; ff_data = get_ff_data (f-7, l); save_it = FALSE; if (f < 15 && is_this_object_a_match (f-7, h, spec_z, ff_data -> atoms_z[k])) { m ++; if (tmp_fprop -> fpid == k && tmp_fprop -> key == abs(ff_data -> key)-1) n = m; save_it = TRUE; } else if (f == 15 && ff_data -> atoms_z[k][0] == spec_z[j]) { m ++; if (tmp_fbody -> fpid[j] == k) n = m; save_it = TRUE; } if (save_it) { str = g_strdup_printf ("%s", get_this_prop_string (f-7, k, l, 0)); if (ff_data -> info) { if (g_strcmp0 (ff_data -> info[k], " ") != 0) str = g_strdup_printf ("%s : %s", str, ff_data -> info[k]); } combo_text_append (ff_p_combo[j], str); g_free (str); if (up_match[j] == NULL) { up_match[j] = g_malloc0(sizeof*up_match[j]); tmp_match = up_match[j]; } else { tmp_match -> next = g_malloc0(sizeof*tmp_match -> next); tmp_match -> next -> id = tmp_match -> id + 1; tmp_match = tmp_match -> next; } tmp_match -> obj = f - 7; tmp_match -> oid = k; tmp_match -> type = l; } tmp_obj_id = tmp_obj_id -> next; } combo_set_markup (ff_p_combo[j]); pup[j].a = f; pup[j].b = j; combo_set_active (ff_p_combo[j], n); if (m == 0) widget_set_sensitive (ff_p_combo[j], FALSE); g_signal_connect (G_OBJECT(ff_p_combo[j]), "changed", G_CALLBACK(changed_field_prop_combo), & pup[j]); } } return vbox; } atomes_1.3.1/src/calc/dl_poly/dlp_copy.c0000664000175000017500000004731215212624223017624 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_copy.c * @short Functions to copy force field and related data structures * @author Sébastien Le Roux */ /* * This file: 'dlp_copy.c' * * Contains: * - The functions to copy force field and related data structures * * List of functions: gboolean check_this_other_prop (int oid, int nat, field_prop * other); void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr); void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody); field_atom* duplicate_field_atom (field_atom* old_fat); field_shell * duplicate_field_shell (field_shell * old_shell); field_constraint * duplicate_field_constraint (field_constraint * old_cons); field_pmf * duplicate_field_pmf (field_pmf * old_pmf); field_rigid * duplicate_field_rigid (field_rigid * old_rig); field_tethered * duplicate_field_tethered (field_tethered * old_tet); field_prop * duplicate_field_prop (field_prop * old_prop, int ti); field_struct * duplicate_field_struct (field_struct * old_fstr); field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init); field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody); field_external * duplicate_field_external (field_external * old_fext); field_molecule * duplicate_field_molecule (field_molecule * old_fmol); classical_field * duplicate_classical_field (classical_field * init_field); */ #include "dlp_field.h" #include "global.h" extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn field_atom* duplicate_field_atom (field_atom* old_fat) \brief create copy of a field atom data structure \param old_fat the field atom to duplicate */ field_atom* duplicate_field_atom (field_atom* old_fat) { field_atom* new_fat; new_fat = g_malloc0(sizeof*new_fat); new_fat -> id = old_fat -> id; new_fat -> fid = old_fat -> fid; new_fat -> afid = old_fat -> afid; new_fat -> name = g_strdup_printf ("%s", old_fat -> name); new_fat -> num = old_fat -> num; new_fat -> sp = old_fat -> sp; new_fat -> type = old_fat -> type; new_fat -> mass = old_fat -> mass; new_fat -> charge = old_fat -> charge; new_fat -> frozen = old_fat -> frozen; new_fat -> show = FALSE; new_fat -> list = duplicate_int (old_fat -> num, old_fat -> list); /* g_debug ("Debug copy atom: %d", new_fat -> id); int i; for (i=0; i num; i++) g_debug ("old_fat -> list[%d]= %d", i, old_fat -> list[i]); for (i=0; i num; i++) g_debug ("new_fat -> list[%d]= %d", i, new_fat -> list[i]); */ new_fat -> list_id = duplicate_int (old_fat -> num, old_fat -> list_id); new_fat -> frozen_id = duplicate_bool (old_fat -> num, old_fat -> frozen_id); new_fat -> prev = NULL; new_fat -> next = NULL; return new_fat; } /*! \fn field_shell * duplicate_field_shell (field_shell * old_shell) \brief create copy of a field shell data structure \param old_shell the field shell to duplicate */ field_shell * duplicate_field_shell (field_shell * old_shell) { field_shell * new_shell; new_shell = g_malloc0(sizeof*new_shell); new_shell -> id = old_shell -> id; new_shell -> ia[0] = old_shell -> ia[0]; new_shell -> ia[1] = old_shell -> ia[1]; new_shell -> m = old_shell -> m; new_shell -> z = old_shell -> z; new_shell -> k2 = old_shell -> k2; new_shell -> k4 = old_shell -> k4; new_shell -> vdw = old_shell -> vdw; new_shell -> use = old_shell -> use; new_shell -> show = old_shell -> show; new_shell -> prev = NULL; new_shell -> next = NULL; return new_shell; } /*! \fn field_constraint * duplicate_field_constraint (field_constraint * old_cons) \brief create copy of a field constraint data structure \param old_cons the field constraint to duplicate */ field_constraint * duplicate_field_constraint (field_constraint * old_cons) { field_constraint * new_cons; new_cons = g_malloc0(sizeof*new_cons); new_cons -> id = old_cons -> id; new_cons -> ia[0] = old_cons -> ia[0]; new_cons -> ia[1] = old_cons -> ia[1]; new_cons -> length = old_cons -> length; new_cons -> use = old_cons -> use; new_cons -> show = old_cons -> show; new_cons -> prev = NULL; new_cons -> next = NULL; return new_cons; } /*! \fn field_pmf * duplicate_field_pmf (field_pmf * old_pmf) \brief create copy of a field PMF data structure \param old_pmf the field PMF to duplicate */ field_pmf * duplicate_field_pmf (field_pmf * old_pmf) { field_pmf * new_pmf; new_pmf = g_malloc0(sizeof*new_pmf); new_pmf -> id = old_pmf -> id; new_pmf -> length = old_pmf -> length; int i; for (i=0; i<2; i++) { new_pmf -> num[i] = old_pmf -> num[i]; new_pmf -> list[i] = duplicate_int (old_pmf -> num[i], old_pmf -> list[i]); new_pmf -> weight[i] = duplicate_float (old_pmf -> num[i], old_pmf -> weight[i]); } new_pmf -> show = old_pmf -> show; new_pmf -> use = old_pmf -> use; new_pmf -> next = NULL; new_pmf -> prev = NULL; return new_pmf; } /*! \fn field_rigid * duplicate_field_rigid (field_rigid * old_rig) \brief create copy of a field rigid data structure \param old_rig the field rigid to duplicate */ field_rigid * duplicate_field_rigid (field_rigid * old_rig) { field_rigid * new_rig; new_rig = g_malloc0(sizeof*new_rig); new_rig -> id = old_rig -> id; new_rig -> num = old_rig -> num; new_rig -> list = duplicate_int (old_rig -> num, old_rig -> list); new_rig -> show = old_rig -> show; new_rig -> use = old_rig -> use; new_rig -> next = NULL; new_rig -> prev = NULL; return new_rig; } /*! \fn field_tethered * duplicate_field_tethered (field_tethered * old_tet) \brief create copy of a field tethered data structure \param old_tet the field tethered to duplicate */ field_tethered * duplicate_field_tethered (field_tethered * old_tet) { field_tethered * new_tet; new_tet = g_malloc0(sizeof*new_tet); new_tet -> id = old_tet -> id; new_tet -> num = old_tet -> num; new_tet -> show = old_tet -> show; new_tet -> use = old_tet -> use; new_tet -> next = NULL; new_tet -> prev = NULL; return new_tet; } /*! \fn field_prop * duplicate_field_prop (field_prop * old_prop, int ti) \brief create a copy of a field property \param old_prop the field property to duplicate \param ti the type of field property */ field_prop * duplicate_field_prop (field_prop * old_prop, int ti) { field_prop * new_prop; new_prop = g_malloc0(sizeof*new_prop); new_prop -> aid = duplicate_int (struct_id(ti+7), old_prop -> aid); new_prop -> key = old_prop -> key; new_prop -> pid = old_prop -> pid; new_prop -> fpid = old_prop -> fpid; new_prop -> val = NULL; if (fvalues[activef][ti+1][new_prop -> key] > 0) { new_prop -> val = duplicate_float (fvalues[activef][ti+1][new_prop -> key], old_prop -> val); } new_prop -> show = old_prop -> show; new_prop -> use = old_prop -> use; new_prop -> next = NULL; new_prop -> prev = NULL; return new_prop; } /*! \fn gboolean check_this_other_prop (int oid, int nat, field_prop * other) \brief check if field atom already in field property \param oid the field atom id to search for \param nat the number of atoms in the field property \param other the field structural property to check */ gboolean check_this_other_prop (int oid, int nat, field_prop * other) { if (oid > -1) { int i; for (i=0; i atoms_id[other -> aid[i]][0].a == oid) return FALSE; } } return TRUE; } /*! \fn void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr) \brief create copy of a field property 'other' list \param oid the target field atom id \param old_fstr the field property to duplicate \param new_fstr the field property to store the results */ void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr) { int i = struct_id(new_fstr -> st+7); field_prop * tmp_new; field_prop * tmp_old = old_fstr -> other; while (tmp_old) { if (check_this_other_prop(oid, i, tmp_old)) { if (new_fstr -> other) { tmp_new -> next = duplicate_field_prop (tmp_old, old_fstr -> st); tmp_new = tmp_new -> next; } else { new_fstr -> other = duplicate_field_prop (tmp_old, old_fstr -> st); tmp_new = new_fstr -> other; } } tmp_old = tmp_old -> next; } } /*! \fn field_struct * duplicate_field_struct (field_struct * old_fstr) \brief create copy of a field structural element \param old_fstr the field structural element to duplicate */ field_struct * duplicate_field_struct (field_struct * old_fstr) { field_struct * new_fstr; new_fstr = g_malloc0(sizeof*new_fstr); new_fstr -> st = old_fstr -> st; new_fstr -> id = old_fstr -> id; new_fstr -> num = old_fstr -> num; new_fstr -> aid = duplicate_int (struct_id(old_fstr -> st+7), old_fstr -> aid); new_fstr -> av = old_fstr -> av; new_fstr -> def = duplicate_field_prop (old_fstr -> def, old_fstr -> st); new_fstr -> other = NULL; if (old_fstr -> other != NULL) duplicate_other_prop (-1, old_fstr, new_fstr); new_fstr -> prev = NULL; new_fstr -> next = NULL; return new_fstr; } /*! \fn field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init) \brief create copy of list of field structural element(s) \param list_str the list of field structural element(s) to duplicate \param init */ field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init) { field_struct * str_list = duplicate_field_struct (list_str); if (init) str_list -> def -> use = FALSE; field_struct * tmp_str = str_list; field_struct * tmp_fst = list_str; while (tmp_fst -> next) { tmp_str -> next = duplicate_field_struct (tmp_fst -> next); tmp_str -> next -> prev = tmp_str; if (init) tmp_str -> next -> def -> use = FALSE; tmp_str = tmp_str -> next; tmp_fst = tmp_fst -> next; } return str_list; } /*! \fn void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody) \brief copy field body parameter list \param new_fbody the body parameters to fill \param old_fbody the body parameters to duplicate */ void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody) { new_fbody -> key = old_fbody -> key; new_fbody -> val = duplicate_float (fvalues[activef][9+new_fbody -> bd][new_fbody -> key], old_fbody -> val); new_fbody -> show = old_fbody -> show; new_fbody -> use = old_fbody -> use; } /*! \fn field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody) \brief create copy of a field body property \param old_fbody the field body property to duplicate */ field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody) { field_nth_body * new_fbody; int i, j; new_fbody = g_malloc0(sizeof*new_fbody); new_fbody -> id = old_fbody -> id; new_fbody -> bd = old_fbody -> bd; if (old_fbody -> fpid) new_fbody -> fpid = duplicate_int (2, old_fbody -> fpid); j = body_at (old_fbody -> bd); new_fbody -> na = duplicate_int (j, old_fbody -> na); new_fbody -> ma = NULL; new_fbody -> ma = g_malloc0(j*sizeof*new_fbody -> ma); new_fbody -> a = NULL; new_fbody -> a = g_malloc0(j*sizeof*new_fbody -> a); for (i=0; i ma[i] != NULL) { new_fbody -> ma[i] = duplicate_int (old_fbody -> na[i], old_fbody -> ma[i]); } else { new_fbody -> ma[i] = NULL; } if (old_fbody -> a[i] != NULL) { new_fbody -> a[i] = duplicate_int (old_fbody -> na[i], old_fbody -> a[i]); } else { new_fbody -> a[i] = NULL; } } duplicate_nbody_params (new_fbody, old_fbody); new_fbody -> prev = NULL; new_fbody -> next = NULL; return new_fbody; } /*! \fn field_external * duplicate_field_external (field_external * old_fext) \brief create copy of a field external property \param old_fext the field external property to duplicate */ field_external * duplicate_field_external (field_external * old_fext) { field_external * new_fext; new_fext = g_malloc0(sizeof*new_fext); new_fext -> id = old_fext -> id; new_fext -> key = old_fext -> key; new_fext -> val = NULL; if (old_fext -> val != NULL) { new_fext -> val = duplicate_float (fvalues[activef][SEXTERN-6][new_fext -> key], old_fext -> val); } new_fext -> use = old_fext -> use; new_fext -> next = NULL; new_fext -> prev = NULL; return new_fext; } /*! \fn field_molecule * duplicate_field_molecule (field_molecule * old_fmol) \brief create copy of a field molecule \param old_fmol the feld molecule to duplicate */ field_molecule * duplicate_field_molecule (field_molecule * old_fmol) { int i, j; field_molecule * new_fmol; new_fmol = g_malloc0(sizeof*new_fmol); new_fmol -> id = old_fmol -> id; new_fmol -> multi = old_fmol -> multi; new_fmol -> name = g_strdup_printf ("%s", old_fmol -> name); new_fmol -> show = old_fmol -> show; new_fmol -> show_id = old_fmol -> show_id; new_fmol -> atoms = old_fmol -> atoms; new_fmol -> first_atom = NULL; new_fmol -> tethered = old_fmol -> tethered; new_fmol -> first_tethered = NULL; new_fmol -> rigids = old_fmol -> rigids; new_fmol -> first_rigid = NULL; new_fmol -> pmfs = old_fmol -> pmfs; new_fmol -> first_pmf = NULL; new_fmol -> first_constraint = NULL; new_fmol -> constraints = old_fmol -> constraints; new_fmol -> first_shell = NULL; new_fmol -> shells = old_fmol -> shells; new_fmol -> mol = g_malloc0(sizeof*new_fmol -> mol); new_fmol -> mol = & tmp_proj -> modelfc -> mols[0][old_fmol -> mol -> id]; // Duplicating atoms new_fmol -> fragments = NULL; new_fmol -> fragments = allocint (new_fmol -> multi); for (i=0; i multi; i++) new_fmol -> fragments[i] = old_fmol -> fragments[i]; new_fmol -> first_atom = duplicate_field_atom (old_fmol -> first_atom); field_atom* tmp_fat = new_fmol -> first_atom; field_atom* tmp_fa = old_fmol -> first_atom; for (i=1; i atoms; i++) { tmp_fat -> next = duplicate_field_atom (tmp_fa -> next); tmp_fat -> next -> prev = tmp_fat; tmp_fat = tmp_fat -> next; tmp_fa = tmp_fa -> next; } new_fmol -> atoms_id = g_malloc0(new_fmol -> mol -> natoms*sizeof*new_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { new_fmol -> atoms_id[i] = g_malloc0(new_fmol -> multi*sizeof*new_fmol -> atoms_id[i]); for (j=0; j multi; j++) { new_fmol -> atoms_id[i][j].a = old_fmol -> atoms_id[i][j].a; new_fmol -> atoms_id[i][j].b = old_fmol -> atoms_id[i][j].b; } } for (i=0; i<8; i++) { // Duplicating bonds / br / angles / ar / diherdrals / impropers / tr / inversions new_fmol -> nstruct[i] = old_fmol -> nstruct[i]; new_fmol -> first_struct[i] = NULL; if (old_fmol -> nstruct[i] > 0) { new_fmol -> first_struct[i] = duplicate_field_struct (old_fmol -> first_struct[i]); field_struct * tmp_str = new_fmol -> first_struct[i]; field_struct * tmp_fst = old_fmol -> first_struct[i]; for (j=1; j nstruct[i]; j++) { tmp_str -> next = duplicate_field_struct (tmp_fst -> next); tmp_str -> next -> prev = tmp_str; tmp_str = tmp_str -> next; tmp_fst = tmp_fst -> next; } } } new_fmol -> next = NULL; new_fmol -> prev = NULL; return new_fmol; } /*! \fn classical_field * duplicate_classical_field (classical_field * init_field) \brief create copy of a force field \param init_field the force field to duplicate */ classical_field * duplicate_classical_field (classical_field * init_field) { classical_field * new_field = NULL; new_field = g_malloc0(sizeof*new_field); int i, j; // All for (i=0; i afp[i] = init_field -> afp[i]; for (i=0; i<2; i++) new_field -> prepare_file[i] = init_field -> prepare_file[i]; // Control new_field -> ensemble = init_field -> ensemble; new_field -> thermostat = init_field -> thermostat; for (i=0; i<17; i++) new_field -> sys_opts[i] = init_field -> sys_opts[i]; for (i=0; i<23; i++) new_field -> io_opts[i] = init_field -> io_opts[i]; for (i=0; i<17; i++) new_field -> ana_opts[i] = init_field -> ana_opts[i]; for (i=0; i<11; i++) new_field -> elec_opts[i] = init_field -> elec_opts[i]; for (i=0; i<6; i++) new_field -> vdw_opts[i] = init_field -> vdw_opts[i]; for (i=0; i<2; i++) new_field -> met_opts[i] = init_field -> met_opts[i]; for (i=0; i<17; i++) new_field -> equi_opts[i] = init_field -> equi_opts[i]; for (i=0; i<10; i++) new_field -> thermo_opts[i] = init_field -> thermo_opts[i]; for (i=0; i<20; i++) new_field -> md_opts[i] = init_field -> md_opts[i]; for (i=0; i<31; i++) new_field -> out_opts[i] = init_field -> out_opts[i]; // Field new_field -> energy_unit = init_field -> energy_unit; new_field -> atom_init = init_field -> atom_init; new_field -> molecules = init_field -> molecules; if (new_field -> molecules) { field_molecule * fmol; new_field -> first_molecule = duplicate_field_molecule (init_field -> first_molecule); fmol = new_field -> first_molecule; tmp_fmol = init_field -> first_molecule; for (i=1; i molecules; i++) { fmol -> next = duplicate_field_molecule (tmp_fmol -> next); fmol -> next -> prev = fmol; fmol = fmol -> next; tmp_fmol = tmp_fmol -> next; } // Duplicating nth_body for (i=0; i<5; i++) { new_field -> first_body[i] = NULL; new_field -> nbody[i] = init_field -> nbody[i]; if (init_field -> nbody[i] > 0) { new_field -> first_body[i] = duplicate_field_nth_body (init_field -> first_body[i]); field_nth_body * tmp_fbod = new_field -> first_body[i]; field_nth_body * tmp_fbo = init_field -> first_body[i]; for (j=1; j nbody[i]; j++) { tmp_fbod -> next = duplicate_field_nth_body (tmp_fbo -> next); tmp_fbod -> next -> prev = tmp_fbod; tmp_fbod = tmp_fbod -> next; tmp_fbo = tmp_fbo -> next; } } } // Tersoff cross terms new_field -> cross = NULL; if (init_field -> cross != NULL) { new_field -> cross = g_malloc0(tmp_field -> nbody[2]*sizeof*new_field -> cross); for (i=0; i nbody[2]; i++) { new_field -> cross[i] = g_malloc0(tmp_field -> nbody[2]*sizeof*new_field -> cross[i]); for (j=0; j nbody[2]; j++) new_field -> cross[i][j] = duplicate_double (3, init_field -> cross[i][j]); } } // Duplicating external fields new_field -> first_external = NULL; new_field -> extern_fields = init_field -> extern_fields; if (init_field -> extern_fields > 0) { new_field -> first_external = duplicate_field_external (init_field -> first_external); field_external * tmp_fext = new_field -> first_external; field_external * tmp_ftxt = init_field -> first_external; for (i=1; i extern_fields; i++) { tmp_fext -> next = duplicate_field_external (tmp_ftxt -> next); tmp_fext -> next -> prev = tmp_fext; tmp_fext = tmp_fext -> next; tmp_ftxt = tmp_ftxt -> next; } } } return new_field; } atomes_1.3.1/src/calc/dl_poly/dlp_field.c0000664000175000017500000070002315212624223017730 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_field.c * @short Functions to prepare the DL-POLY / LAMMPS input preparation assistant \n Functions to design a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_field.c' * * Contains: * - The functions to prepare the DL-POLY / LAMMPS input preparation assistant - The functions to design a classical force field * * List of functions: int struct_id (int f); int body_at (int b); int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path); int get_field_data_id (int k, gchar * data); G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data); gboolean dlp_to_translate (int fid, int obj, int key); gboolean set_nbd_but_sensitive (int nbid); gboolean field_file_has_energy_parameters (gboolean scale, int sca, int scb); G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data); G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data); G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data); gchar * parameters_info (int obj, int key, gchar ** words, float * data); gchar * set_field_label (int f, int m); gchar * pop_info (int i, int id); gchar * pop_edit (int i); gchar * pop_add (int i); gchar * pop_remove (int i); void set_mol_num_label (); void setup_cs_labels (int i); void fill_field_struct (GtkTreeStore * store, int id, int mo); void fill_field_body (GtkTreeStore * store, int id); void fill_field_model (GtkTreeStore * store, int f, int m); void update_field_trees (); void get_is_energy (int i, int l); void append_field_item (GMenu * menu, const gchar * name, const gchar * key, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); void pop_up_field_context_menu (int row_id, GtkWidget * widget, double event_x, double event_y, gpointer data); void pop_up_field_context_menu (int row_id, GtkWidget * widget, GdkEvent * event, gpointer data); void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_markup_box (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void prop_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void pmf_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void rig_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_markup_and_visible_box (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void get_field_iter_and_edit (gchar * path_string, gpointer data); void create_field_list (GtkWidget * vbx, int f); void close_the_assistant (GtkAssistant * assistant); void hide_show_this_pages (int start, int end, int status, int delta); void remove_classical_assistant_pages (); void add_classical_assistant_pages (int p); void create_ff_structure (int ai, int type); void on_assistant_apply (GtkAssistant * assistant, gpointer data); void create_classical_force_field (int p, int f); G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void run_changed_energy_unit (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_field_key_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void to_select_atom_id_from_fied_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void edit_field_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data); G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void clean_field (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void clean_field (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void select_field_action (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_field_action (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data); G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data); GtkWidget * vbox_init (int p); GtkWidget * create_combo_mol (int f); GtkWidget * create_field_tree (int f); GtkWidget * create_mol_box (int f); GtkWidget * vbox_field (int f); */ #include "dlp_field.h" #include "calc.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "bind.h" gboolean append_pages; extern GtkWidget * extra_vbox[2]; extern ColRGBA init_color (int id, int numid); extern void restore_ogl_selection (glwin * view); gchar * felemts[MAXDATA+1] = {i18n("Energy unit"), i18n("Molecule(s)"), i18n("Atom(s)"), i18n("Core-shell unit(s)"), i18n("Constraint bond(s)"), i18n("Mean force potential(s)"), i18n("Rigid unit(s)"), i18n("Tethering potential(s)"), i18n("Flexible chemical bond(s)"), i18n("Bond restraint(s)"), i18n("Bond angle(s)"), i18n("Angular restraint(s)"), i18n("Dihedral angle(s)"), i18n("Torsional restraint(s)"), i18n("Improper angle(s)"), i18n("Inversion angle(s)"), i18n("van der Waals potential(s)"), i18n("Metal potential(s)"), i18n("Tersoff Potential(s)"), i18n("Three-body potential(s)"), i18n("Four-body potential(s)"), i18n("External field(s)")}; gchar * felemt[MAXDATA+1] = {i18n("Energy unit"), i18n("Molecule"), i18n("Atom"), i18n("Core-shell unit"), i18n("Constraint bond"), i18n("Mean force potential"), i18n("Rigid unit"), i18n("Tethering potential"), i18n("Flexible chemical bond"), i18n("Bond restraint"), i18n("Bond angle"), i18n("Angular restraint"), i18n("Dihedral angle"), i18n("Torsional restraint"), i18n("Improper angle"), i18n("Inversion angle"), i18n("van der Waals potential"), i18n("Metal potential"), i18n("Tersoff Potential"), i18n("Three-body potential"), i18n("Four-body potential"), i18n("External field")}; gchar * elemts[MAXDATA] = {i18n("molecule(s)"), i18n("atom(s)"), i18n("core-shell unit(s)"), i18n("constraint bond(s)"), i18n("mean force potential(s)"), i18n("rigid unit(s)"), i18n("tethering potential(s)"), i18n("flexible chemical bond(s)"), i18n("bond restraint(s)"), i18n("bond angle(s)"), i18n("angular restraint(s)"), i18n("dihedral angle(s)"), i18n("torsional restraint(s)"), i18n("improper angle(s)"), i18n("inversion angle(s)"), i18n("van der Waals potential(s)"), i18n("metal potential(s)"), i18n("Tersoff Potential(s)"), i18n("three-body potential(s)"), i18n("four-body potential(s)"), i18n("external field(s)")}; gchar * elemt[MAXDATA] = {i18n("molecule"), i18n("atom"), i18n("core-shell unit"), i18n("constraint bond"), i18n("mean force potential"), i18n("rigid unit"), i18n("tethering potential"), i18n("flexible chemical bond"), i18n("bond restraint"), i18n("bond angle"), i18n("angular restraint"), i18n("dihedral angle"), i18n("torsional restraint"), i18n("improper angle"), i18n("inversion angle"), i18n("van der Waals potential"), i18n("metal potential"), i18n("Tersoff Potential"), i18n("three-body potential"), i18n("four-body potential"), i18n("external field")}; gchar * intelemts[MAXDATA] = {i18n("of molecule(s)"), i18n("of atom(s)"), i18n("of core-shell unit(s)"), i18n("of constraint bond(s)"), i18n("of mean force potential(s)"), i18n("of rigid unit(s)"), i18n("of tethering potential(s)"), i18n("of flexible chemical bond(s)"), i18n("of bond restraint(s)"), i18n("of bond angle(s)"), i18n("of angular restraint(s)"), i18n("of dihedral angle(s)"), i18n("of torsional restraint(s)"), i18n("of improper angle(s)"), i18n("of inversion angle(s)"), i18n("of van der Waals potential(s)"), i18n("of metal potential(s)"), i18n("of Tersoff Potential(s)"), i18n("of three-body potential(s)"), i18n("of four-body potential(s)"), i18n("of external field(s)")}; gchar * intelemt[MAXDATA] = {i18n("of the molecule"), i18n("of the atom"), i18n("of the core-shell unit"), i18n("of the constraint bond"), i18n("of the mean force potential"), i18n("of the rigid unit)"), i18n("of the tethering potential"), i18n("of the flexible chemical bond"), i18n("of the bond restraint"), i18n("of the bond angle"), i18n("of the angular restraint"), i18n("of the dihedral angle"), i18n("of the torsional restraint"), i18n("of the improper angle"), i18n("of the inversion angle"), i18n("of the van der Waals potential"), i18n("of the metal potential"), i18n("of the Tersoff Potential"), i18n("of the three-body potential"), i18n("of the four-body potential"), i18n("of the external field")}; gchar * fkeysw[2][16][21] = {{{"eV", "kcal", "kJ", "K", "internal", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 0 - Energy unit(s) {"harm", "rhrm", "quar", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 1 - Tethering pot. {"harm", "mors", "12-6", "lj ", "rhrm", "quar", "buck", "coul", "fene", "mmst", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 2 - Bond pot. {"-hrm", "-mrs", "-126", "-lj ", "-rhm", "-qur", "-bck", "-cul", "-fne", "-mst", "-tab", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 3 - Bond rest. {"harm", "quar", "thrm", "shrm", "bvs1", "bvs2", "hcos", "cos ", "mmsb", "stst", "stbe", "cmps", "mmbd", "kky ", "tab ", " ", " ", " ", " ", " ", " "}, // 4 - Angles pot. {"-hrm", "-qur", "-thm", "-shm", "-bv1", "-bv2", "-hcs", "-cos", "-msb", "-sts", "-stb", "-cmp", "-mbd", "-kky", "-tab", " ", " ", " ", " ", " ", " "}, // 5 - Angles rest. {"cos ", "harm", "hcos", "cos3", "ryck", "rbf ", "opls", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 6 - Dihedral pot. {"-cos", "-hrm", "-hcs", "-cs3", "-rck", "-rbf", "-opl", "-tab", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 8 - Torsion pot. {"cos ", "harm", "hcos", "cos3", "ryck", "rbf ", "opls", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 7 - Improper pot. {"harm", "hcos", "plan", "xpln", "calc", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 9 - Inversion pot. {"12-6", "lj ", "ljc", "nm ", "buck", "bhm ", "hbnd", "snm ", "mors", "wca ", "dpd", "14-7", "mstw", "ryb", "zbl", "zbls", "zblb", "mlj", "mbuc", "m126", "tab "}, // 10 - Vdw pot. {"eam ", "eeam", "2bea", "2bee", "fnsc", "exfs", "stch", "gupt", "mbpc", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 11 - Metal pot. {"ters", "kihs", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 12 - Tersoff pot. {"harm", "thrm", "shrm", "bvs1", "bvs2", "hbnd", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 13 - Three-body pot. {"harm", "hcos", "plan", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 14 - Four-body pot. {"elec", "oshr", "shrx", "grav", "magn", "sphr", "zbnd", "xpis", "zres", "zrs-", "zrs+", "osel", "ushr", " ", " ", " ", " ", " ", " ", " ", " "}}, // 15 - External fields. {{"lj", "real", "metal", "si", "cgs", "electron", "micro", "nano", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "class2", "fene", "fene/expand", "gromos", "harmonic/shift", "harmonic/shift/cut", "mm3", "morse", "nonlinear", "oxdna/fene", "oxdna2/fene", "oxrna2/fene", "quartic", "special", "table", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "charmm", "class2", "class2/p6", "cosine", "cosine/buck6d", "cosine/delta", "cosine/periodic", "cosine/shift", "cosine/shift/exp", "cosine/squared", "cross", "dipole", "fourier", "fourier/simple", "mm3", "quartic", "sdk", "table", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"cosine/shift/exp", "charmm", "charmmfsw", "class2", "fourier", "harmonic", "helix", "multi/harmonic", "nharmonic", "opls", "quadratic","spherical", "table", "table/cut", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "class2", "cossq", "cvff", "distance", "distharm", "fourier", "ring", "sqdistharm", "umbrella", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"inversion/harmonic", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; gchar * fnames[2][16][21] = {{{i18n("Electron-Volts"), i18n("k-calories per mol"), i18n("k-Joules per mol"), i18n("Kelvin per Boltzmann"), i18n("DL_POLY internal units"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Restraint"), i18n("Quartic"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), "Morse", "12-6", "Lennard-Jones", i18n("Restraint"), i18n("Quartic"), "Buckingham", "Coulomb", i18n("Shifted FENE"), i18n("MM3 bond stretch"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), "Morse", "12-6", "Lennard-Jones", i18n("Restraint"), i18n("Quartic"), "Buckingham", "Coulomb", i18n("Shifted FENE"), i18n("MM3 bond stretch"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Quartic"), i18n("Truncated harmonic"), i18n("Screened harmonic"), i18n("Screened Vessal"), i18n("Truncated Vessal"), i18n("Harmonic cosine"), i18n("Cosine"), i18n("MM3 stretch-bend"), i18n("Compass stretch-stretch"), i18n("Compass stretch-bend"), i18n("Compass all terms"), i18n("MM3 angle bend"), "KKY", i18n("Tabulated"), " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Quartic"), i18n("Truncated harmonic"), i18n("Screened harmonic"), i18n("Screened Vessal"), i18n("Truncated Vessal"), i18n("Harmonic cosine"), i18n("Cosine"), i18n("MM3 stretch-bend"), i18n("Compass stretch-stretch"), i18n("Compass stretch-bend"), i18n("Compass all terms"), i18n("MM3 angle bend"), "KKY", i18n("Tabulated"), " ", " ", " ", " ", " ", " "}, {i18n("Cosine"), i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Triple cosine"), "Ryckaert-Bellemans", i18n("Fluorinated Ryckaert-Bellemans"), i18n("OPLS torsion"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cosine"), i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Triple cosine"), "Ryckaert-Bellemans", i18n("Fluorinated Ryckaert-Bellemans"), i18n("OPLS torsion"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cosine"), i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Triple cosine"), "Ryckaert-Bellemans", i18n("Fluorinated Ryckaert-Bellemans"), i18n("OPLS torsion"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Planar"), i18n("Extended Planar"), i18n("Calcite"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"12-6", "Lennard-Jones", i18n("LJ cohesive"), "n-m", "Buckingham", "Born-Huggins-Meyer", i18n("12-10 H-bond"), i18n("Shifted force n-m"), "Morse", i18n("Shifted Weeks-Chandler-Anderson"), i18n("Standard DPD"), i18n("14-7 buffered AMOEBA FF"), i18n("Morse modified"), "Rydberg", "ZBL", i18n("ZBL mixed with Morse"), i18n("ZBL mixed with Buckingham"), i18n("Lennard-Jones tapered with MDF"), i18n("Buckingham tapered with MDF"), i18n("12-6 Lennard-Jones tapered with MDF"), i18n("Tabulated")}, {"EAM", "EEAM", "2BEAM", "2BEEAM", "Finis-Sinclair", i18n("Extended Finis-Sinclair"), "Sutton-Chen", "Gupta", "MBPC", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Tersoff", "KIHS", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Truncated harmonic"), i18n("Screened harmonic"), i18n("Screened Vessal"), i18n("Truncated Vessal"), i18n("H-bond"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Planar"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Electric field"), i18n("Oscillating Shear"), i18n("Continuous Shear"), i18n("Gravitational field"), i18n("Magnetic field"), i18n("Containing Sphere"), i18n("Repulsive Wall"), i18n("X-Piston"), i18n("Molecule in HR Zone"), i18n("HR Zone (pull out)"), i18n("HR Zone (pull in)"), i18n("Osc. Electric Field"), i18n("Umbrella sampling, harm. constant"), " ", " ", " ", " ", " ", " ", " ", " "}}, {{"lj", i18n("k-calories per mol"), i18n("Electron-Volts"), i18n("k-Joules per mol"), "cgs", i18n("electron"), "micro", "nano", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"),i18n("COMPASS class2 force field"), i18n("Finite extensible nonlinear elastic (FENE)"), i18n("FENE with variable size particles"), i18n("GROMOS force field"), i18n("Shifted harmonic"), i18n("Shifted truncated harmonic"), i18n("MM3 anharmonic"), "Morse", i18n("Nonlinear"), i18n("Finite extensible nonlinear elastic DNA"), i18n("Finite extensible nonlinear elastic DNA (2)"), i18n("Finite extensible nonlinear elastic RNA"), i18n("Breakable quartic"), i18n("Special bond exclusions for 1-5 pairs and beyond"), i18n("Tabulated"), " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("CHARMM force field"), i18n("COMPASS class2 force field"), i18n("COMPASS class2 force field - 6th order"), i18n("Cosine"), i18n("Cosine with Buckingham term between 1-3"), i18n("Difference of cosines"), i18n("DREIDING force field"), i18n("Cosine with a shift"), i18n("Cosine with a shift and exponential term in spring"), i18n("Cosine with squared term"), i18n("Cross term coupling angle and bond length"), i18n("Dipole orientation"), i18n("Fourier (multiple cosines)"), i18n("Fourier (single cosine)"), "MM3", i18n("Quartic"), i18n("Combination of the harmonic (SDK)"), i18n("Tabulated"), " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cosine with a shift and exponential term in spring"), i18n("CHARMM force field"), i18n("CHARMM force field with force switching"), i18n("COMPASS class2 force field"), i18n("Fourier (multiple cosines)"), i18n("Harmonic"), i18n("Helix"), i18n("Harmonic with 5 terms"), i18n("Harmonic with N terms"), i18n("OPLS force field"), i18n("Quadratic"), i18n("Spherical"), i18n("Tabulated"), i18n("Tabulated with analytic cutoff"), " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("COMPASS class2 force field"), i18n("Cosine squared"), i18n("CVFF force field"), i18n("Distance between atom planes"), i18n("Out-of-the plane distance"), i18n("Fourier (multiple cosines)"), i18n("Planar conformation"), i18n("Squared distance harmonic"), i18n("DREIDING force field"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic with Wilson Decius out-of-plane"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; int fvalues[2][15][21] = {{{ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0 - Tethered { 2, 3, 2, 2, 3, 4, 3, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 1 - Bond(s) { 2, 3, 2, 2, 3, 4, 3, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 2 - Bond restraint(s) { 2, 4, 3, 4, 4, 4, 2, 3, 4, 3, 3, 6, 2, 4, 0, 0, 0, 0, 0, 0, 0}, // 3 - Angle(s) { 2, 4, 3, 4, 4, 4, 2, 3, 4, 3, 3, 6, 2, 4, 0, 0, 0, 0, 0, 0, 0}, // 4 - Angle restraint(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 5 - Dihedral(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6 - Torsional restraint(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 7 - Improper(s) { 2, 2, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8 - Inversion(s) { 2, 2, 3, 4, 3, 5, 2, 5, 3, 3, 2, 2, 4, 3, 2, 7, 7, 3, 4, 3, 0}, // 9 - vdW { 0, 0, 0, 0, 7, 9, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10 - Metal(s) {11,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11 - Tersoff(s) { 2, 3, 4, 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12 - 3-body { 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13 - 4-body { 3, 2, 2, 3, 3, 4, 3, 3, 5, 5, 5, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0}}, // 14 - External(s) {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0 - Tethered { 2, 4, 4, 5, 2, 3, 3, 2, 3, 3, 3, 3, 3, 5, 2, 2, 0, 0, 0, 0, 0}, // 1 - Bond(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 2 - Bond restraint(s) { 2, 4, 4, 4, 1, 3, 2, 3, 2, 3, 2, 6, 2, 4, 3, 2, 4, 2, 2, 0, 0}, // 3 - Angle(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 4 - Angle restraint(s) { 3, 4, 4, 6, 4, 3, 3, 5, 2, 4, 2,11, 2, 2, 0, 0, 0, 0, 0, 0, 0}, // 5 - Dihedral(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6 - Torsional restraint(s) { 2, 2, 2, 3, 2, 2, 5, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 7 - Improper(s) { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8 - Inversion(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 9 - vdW { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10 - Metal(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11 - Tersoff(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12 - 3-body { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13 - 4-body { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}};// 14 - External(s) int fetypes[2][16] = {{DL_ENERGY, DL_TETH, DL_BONDS, DL_BONDS, DL_ANGLES, DL_ANGLES, DL_DIHEDRAL, DL_DIHEDRAL, DL_DIHEDRAL, DL_INVERS, DL_VDW, DL_METALS, DL_TERSOFFS, DL_THREEBODY, DL_FOURBODY, DL_EXTERNAL}, {LA_ENERGY, LA_TETH, LA_BONDS, 1, LA_ANGLES, 1, LA_DIHEDRAL, 1, LA_DIHEDRAL, LA_INVERS, LA_VDW, LA_METALS, LA_TERSOFFS, LA_THREEBODY, LA_FOURBODY, LA_EXTERNAL}}; int fntypes[2][15] = {{DL_TETH_P, DL_BONDS_P, DL_BONDS_P, DL_ANGLES_P, DL_ANGLES_P, DL_DIHEDRAL_P, DL_DIHEDRAL_P, DL_DIHEDRAL_P, DL_INVERS_P, DL_VDW_P, DL_METALS_P, DL_TERSOFFS_P, DL_THREEBODY_P, DL_FOURBODY_P, DL_EXTERNAL_P}, {LA_TETH_P, LA_BONDS_P, LA_BONDS_P, LA_ANGLES_P, LA_ANGLES_P, LA_DIHEDRAL_P, LA_DIHEDRAL_P, LA_DIHEDRAL_P, LA_INVERS_P, LA_VDW_P, LA_METALS_P, LA_TERSOFFS_P, LA_THREEBODY_P, LA_FOURBODY_P, LA_EXTERNAL_P}}; char * fvars_teth[2][FTETH][FTETH_P] = {{{"k", " ", " "}, {"k", "rc", " "}, {"k", "k'", "k''"}}, {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}}; int feunit_teth[2][FTETH][FTETH_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}}; char * fvars_bond[2][FBONDS][FBONDS_P] = {{{"k", "r0", " ", " ", " "}, {"E0", "r0", "k", " ", " "}, {"A", "B", " ", " ", " "}, {"ϵ", "σ", " ", " ", " "}, {"k", "r0", "rc", " ", " "}, {"k", "r0", "k'", "k''", " "}, {"A", "Ï�", "C", " ", " "}, {"k", " ", " ", " ", " "}, {"k", "R0", "Δ", " ", " "}, {"k", "ro", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}}, {{"K", "r0", " ", " ", " "}, {"r0", "K2", "K3", "K4", " "}, {"K", "R0", "ϵ", "σ", " "}, {"K", "R0", "ϵ", "σ", "Δ"}, {"K", "r0", " ", " ", " "}, {"K", "r0", "rc", " ", " "}, {"Umin", "r0", "rc", " ", " "}, {"K", "r0", " ", " ", " "}, {"D", "α", "r0", " ", " "}, {"ϵ", "r0", "λ", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"K", "B1", "B2", "Rc", "U0"}, {"wLJ", "wCoul", " ", " ", " "}, {i18n("Interpolation style"), i18n("Distances"), " ", " ", " "}}}; int feunit_bond[2][FBONDS][FBONDS_P] = {{{1, 0, 0, 0, 0}, {1, 0, 1, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 1}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}}; char * fvars_angle[2][FANGLES][FANGLES_P] = {{{"k", "θ0", " ", " ", " ", " "}, {"k", "θ0", "k'", "k''", " ", " "}, {"k", "θ0", "Ï�", " ", " ", " "}, {"k", "θ0", "Ï�1", "Ï�2", " ", " "}, {"k", "θ0", "Ï�1", "Ï�2", " ", " "}, {"k", "θ0", "a", "Ï�", " ", " "}, {"k", "θ0", " ", " ", " ", " "}, {"A", "δ", "m", " ", " ", " "}, {"A", "θ0", "roij", "rojk", " ", " "}, {"A", "roij", "rojk", " ", " ", " "}, {"A", "θ0", "roij", " ", " ", " "}, {"A", "B", "C", "θ0", "roij", "rojk"}, {"k", "θ0", " ", " ", " ", " "}, {"fk", "θ0", "gr", "ro", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}}, {{"K", "θ0", " ", " ", " ", " "}, {"K", "θ0", "Kub", "rub", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"K", " ", " ", " ", " ", " "}, {"K", "n", "θ0", " ", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"C", "B", "n", " ", " ", " "}, {"Umin", "θ0", " ", " ", " ", " "}, {"Umin", "θ0", "A", " ", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"KSS", "KBS0", "KBS1", "r12,0", "r32,0", "θ0"}, {"K", "λ0", " ", " ", " ", " "}, {"K", "C0", "C1", "C2", " ", " "}, {"K", "c", "n", "", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {i18n("Interpolation style"), i18n("Angles"), " ", " ", " ", " "}}}; int feunit_angle[2][FANGLES][FANGLES_P] = {{{1, 0, 0, 0, 0, 0}, {1, 0, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}}; char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P] = {{{"A", "δ", "m", " ", " ", " ", " ", " ", " ", " ", " "}, {"k", "Ï•0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"k", "Ï•0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A1", "A2", "A3", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A0", "A1", "A2", "A3", "Ï•0", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}, {{"Umin", "θ0", "a", " ", " ", " ", " ", " ", " ", " ", " "}, {"K", "n", "d", i18n("weighting factor"), " ", " ", " ", " ", " ", " ", " "}, {"K", "n", "d", i18n("weighting factor"), " ", " ", " ", " ", " ", " ", " "}, {"Ed", "Embt", "Eebt", "Eat", "Eaat", "Ebb13", " ", " ", " ", " ", " "}, {"m", "K", "n", "d", " ", " ", " ", " ", " ", " ", " "}, {"K", "d", "n", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", "B", "C", " ", " ", " ", " ", " ", " ", " ", " "}, {"A1", "A2", "A3", "A4", "A5", " ", " ", " ", " ", " ", " "}, {"n", "A", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"K1", "K2", "K3", "K4", " ", " ", " ", " ", " ", " ", " "}, {"K", "Ï•0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"n", "C", "K", "a", "u", "L", "b", "v", "M", "c", "w"}, {i18n("Interpolation style"), i18n("Dihedrals"), " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Interpolation style"), i18n("Dihedrals"), " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; int feunit_dihedral[2][FDIHEDRAL][FDIHEDRAL_P] = {{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; /*gchar la_dih_class2[6][9] = {{"K1", "Ï•1", "K2", "Ï•2", "K3", "Ï•3", " ", " ", " "}, {"mbt", "A1", "A2", "A3", "r2", " ", " ", " ", " "}, {"ebt", "B1", "B2", "B3", "C1", "C2", "C3", "r1", "r3"}, {"at", "D1", "D2", "D3", "E1", "E2", "E3", "θ1", "θ2"}, {"aat", "M", "θ1", "θ2", " ", " ", " ", " ", " "}, {"bb13", "N", "r1", "r3", " ", " ", " ", " ", " "}}; int feu_la_dih_class2[6][9] = {{1, 0, 1, 0, 1, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}};*/ char * fvars_inversion[2][FINVERS][FINVERS_P] = {{{"k", "Ï•0", " "}, {"k", "Ï•0", " "}, {"A", " ", " "}, {"k", "m", "Ï•0"}, {"A", "B", " "}, {" ", " ", " "}}, {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}}; int feunit_inversion[2][FINVERS][FINVERS_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}}, {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}}}; // LAMMPS Impropers gchar * la_improper_style_keyw[11] = {"class2", "cossq", "cvff", "distance", "distharm", "fourier", "harmonic", "inversion/harmonic", "ring", "sqdistharm", "umbrella"}; /*gchar * la_improper_style_info[11] = {i18n("COMPASS class2 force field"), i18n("Cosine squared"), i18n("CVFF force field"), i18n("Distance between atom planes"), i18n("Out-of-the plane distance"), i18n("Fourier (multiple cosines)"), i18n("Harmonic"), i18n("Harmonic with Wilson Decius out-of-plane"), i18n("Planar conformation"), i18n("Squared distance harmonic"), i18n("DREIDING force field")}; gchar la_improper_var[11][LIMPROPERS] = {{"Ei", "Eaa", " ", " ", " "}, {"K", "χ0", " ", " ", " "}, {"K", "d", "n", " ", " "}, {"K2", "K4", " ", " ", " "} {"K", "d0", " ", " ", " "}, {"K", "C0", "C1", "C2", "all"}, {"K", "χ0", " ", " ", " "}, {"K", "ω0", " ", " ", " "}, {"K", "θ0", " ", " ", " "}, {"K", "d02", " ", " ", " "}, {"K", "ω0", " ", " ", " "}}; gchar la_imp_class2[2][7] = {{"K", "χ0", " ", " ", " ", " ", " "}, {"aa", "M1", "M2", "M3", "θ1", "θ2", "θ3"}}; int feu_la_imp_class2[2][7] = {{1, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0}}; int feu_la_improper[15][LIMPROPERS] = {{0, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}};*/ char * fvars_vdw[2][FVDW][FVDW_P] = {{{"A", "B", " ", " ", " ", " ", " "}, {"ϵ", "Ï�", " ", " ", " ", " ", " "}, {"ϵ", "Ï�", "c", " ", " ", " ", " "}, {"E0", "n", "m", "r0", " ", " ", " "}, {"A", "Ï�", "C", " ", " ", " ", " "}, {"A", "B", "σ", "C", "D", " ", " "}, {"A", "B", " ", " ", " ", " ", " "}, {"E0", "n", "m", "r0", "rc", " ", " "}, {"E0", "r0", "k", " ", " ", " ", " "}, {"ϵ", "σ", "Δ", " ", " ", " ", " "}, {"A", "rc", " ", " ", " ", " ", " "}, {"ϵ", "ro", " ", " ", " ", " ", " "}, {"E0", "r0", "k", "c", " ", " ", " "}, {"a", "b", "σ", " ", " ", " ", " "}, {"Z1", "Z2", " ", " ", " ", " ", " "}, {"Z1", "Z2", "rm", "ξ", "E0", "r0", "k"}, {"Z1", "Z2", "rm", "ξ", "A", "Ï�", "C"}, {"ϵ", "Ï�", "ri", " ", " ", " ", " "}, {"A", "Ï�", "C", "ri", " ", " ", " "}, {"A", "B", "ri", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " "}}, {{"A", "B", " ", " ", " ", " ", " "}, {"A", "B", " ", " ", " ", " ", " "}, {"ϵ", "Ï�", " ", " ", " ", " ", " "}, {"ϵ", "Ï�", "c", " ", " ", " ", " "}, {"E0", "n", "m", "r0", " ", " ", " "}, {"A", "Ï�", "C", " ", " ", " ", " "}, {"A", "B", "σ", "C", "D", " ", " "}, {"E0", "n", "m", "r0", "rc", " ", " "}, {"E0", "r0", "k", " ", " ", " ", " "}, {"ϵ", "σ", "Δ", " ", " ", " ", " "}, {"A", "rc", " ", " ", " ", " ", " "}, {"ϵ", "ro", " ", " ", " ", " ", " "}, {"E0", "r0", "k", "c", " ", " ", " "}, {"a", "b", "σ", " ", " ", " ", " "}, {"Z1", "Z2", " ", " ", " ", " ", " "}, {"Z1", "Z2", "rm", "ξ", "E0", "r0", "k"}, {"Z1", "Z2", "rm", "ξ", "A", "Ï�", "C"}, {"ϵ", "Ï�", "ri", " ", " ", " ", " "}, {"A", "Ï�", "C", "ri", " ", " ", " "}, {"A", "B", "ri", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " "}}}; int feunit_vdw[2][FVDW][FVDW_P] = {{{1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}}; char * fvars_met[2][FMETALS][FMETALS_P] = {{{" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {"c0", "c1", "c2", "c", "A", "d", "β", " ", " "}, {"c0", "c1", "c2", "c3", "c4", "c", "A", "d", "B"}, {"ϵ", "a", "n", "m", "c", " ", " ", " ", " "}, {"A", "r0", "p", "B", "qij", " ", " ", " ", " "}, {"ϵ", "a", "m", "α", "ro", " ", " ", " ", " "}}, {{" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {"c0", "c1", "c2", "c", "A", "d", "β", " ", " "}, {"c0", "c1", "c2", "c3", "c4", "c", "A", "d", "B"}, {"ϵ", "a", "n", "m", "c", " ", " ", " ", " "}, {"A", "r0", "p", "B", "qij", " ", " ", " ", " "}, {"ϵ", "a", "m", "α", "ro", " ", " ", " ", " "}}}; int feunit_met[2][FMETALS][FMETALS_P] = {{{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0}}}; char * fvars_ters[2][FTERSOFFS][FTERSOFFS_P] = {{{"A", "a", "B", "b", "R", "S", "β", "η", "c", "d", "h", "χ", "ω", "δ", " ", " "}, {"A", "a", "B", "b", "R", "S", "η", "δ", "c1", "c2", "c3", "c4", "c5", "h", "α", "β"}}, {{"A", "a", "B", "b", "R", "S", "β", "η", "c", "d", "h", "χ", "ω", "δ", " ", " "}, {"A", "a", "B", "b", "R", "S", "η", "δ", "c1", "c2", "c3", "c4", "c5", "h", "α", "β"}}}; int feunit_ters[2][FTERSOFFS][FTERSOFFS_P] = {{{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; char * fvars_tbd[2][FTHREEBODY][FTHREEBODY_P] = {{{"k", "θ0", " ", " ", " "}, {"k", "θ0", "Ï�", " ", " "}, {"k", "θ0", "Ï�1", "Ï�2", " "}, {"k", "θ0", "Ï�1", "Ï�2", " "}, {"k", "θ0", "a", "Ï�", " "}, {"Dhb", "Rhb", " ", " ", " "}}, {{"k", "θ0", " ", " ", " "}, {"k", "θ0", "Ï�", " ", " "}, {"k", "θ0", "Ï�1", "Ï�2", " "}, {"k", "θ0", "Ï�1", "Ï�2", " "}, {"k", "θ0", "a", "Ï�", " "}, {"Dhb", "Rhb", " ", " ", " "}}}; int feunit_tbd[2][FTHREEBODY][FTHREEBODY_P] = {{{1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}}}; char * fvars_fbd[2][FFOURBODY][FFOURBODY_P] = {{{"k", "Ï•0", " "}, {"k", "Ï•0", " "}, {"A", " ", " "}}, {{"k", "Ï•0", " "}, {"k", "Ï•0", " "}, {"A", " ", " "}}}; int feunit_fbd[2][FFOURBODY][FFOURBODY_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}}; char * fvars_fext[2][FEXTERNAL][FEXTERNAL_P] = {{{"Ex", "Ey", "Ez", " ", " ", " "}, {"A", "n", " ", " ", " ", " "}, {"A", "z0", " ", " ", " ", " "}, {"Gx", "Gy", "Gz", " ", " ", " "}, {"Hx", "Hy", "Hz", " ", " ", " "}, {"A", "R0", "n", "Rcut", " ", " "}, {"A", "z0", "p", " ", " ", " "}, {"iindglob", "jindglob", "Pink-atom", " ", " ", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"Ex", "Ey", "Ez", "ωinps-1", " ", " "}, {"igidA", "jgidA", "k", "igidB", "jgidB", "R0"}}, {{"Ex", "Ey", "Ez", " ", " ", " "}, {"A", "n", " ", " ", " ", " "}, {"A", "z0", " ", " ", " ", " "}, {"Gx", "Gy", "Gz", " ", " ", " "}, {"Hx", "Hy", "Hz", " ", " ", " "}, {"A", "R0", "n", "Rcut", " ", " "}, {"A", "z0", "p", " ", " ", " "}, {"iindglob", "jindglob", "Pink-atom", " ", " ", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"Ex", "Ey", "Ez", "ωinps-1", " ", " "}, {"igidA", "jgidA", "k", "igidB", "jgidB", "R0"}}}; int feunit_fext[2][FEXTERNAL][FEXTERNAL_P] = {{{1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}}, {{1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}}}; int field_v[MAXDATA] = { 8, 8, 9, 7, 8, 5, 5, 8, 8, 9, 9, 10, 10, 10, 10, 6, 6, 5, 7, 8, 3}; int field_s[MAXDATA] = {650, 520, 520, 500, 600, 450, 600, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720}; int field_a[MAXDATA] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; gchar * ctitle[MAXDATA][12] ={{i18n("Id."), i18n("Name"), i18n("Multiplicity"), i18n("Chemistry"), i18n("Atom(s)"), i18n("Species"), i18n("Viz. 3D"), i18n("Viz. Atom num.")}, // Molecule(s) {i18n("Id."), i18n("Name"), i18n("Element"), i18n("Mass"), i18n("Charge"), i18n("Frozen"), i18n("Atom(s)"), i18n("Viz. 3D")}, // Atom(s) {i18n("Id."), i18n("Core Id"), i18n("Shell"), i18n("Mass"), i18n("Charge"), "k2 (1)", "k4 (2)", i18n("Viz. 3D"), i18n("Use (3)")}, // Core-shell unit(s) {i18n("Id."), i18n("At.1 Id"), i18n("At.2 Id"), i18n("Length [Ã…]"), i18n("av. d [Ã…] (1)"), i18n("Viz. 3D"), i18n("Use (2)")}, // Constraint(s) {i18n("Id."), i18n("Length [Ã…]"), i18n("av. d12 [Ã…] (1)"), i18n("Unit Id"), i18n("At. Id"), i18n("Weight (2)"), i18n("Viz. 3D"), i18n("Use (3)")}, // Mean force potential(s) {i18n("Id."), i18n("Atom(s) in unit"), i18n("List of atom(s)"), i18n("Viz. 3D"), i18n("Use (1)")}, // Rigid unit(s) {i18n("Id."), i18n("Atom Id."), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Potential")}, // Tethering potential(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("Bond(s)"), i18n("av. d [Ã…] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Bond(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("Bond restraint(s)"), i18n("av. d [Ã…] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Bond restraint(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("Angle(s)"), i18n("av. θ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Angle(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("Angular restraint(s)"), i18n("av. θ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Angle restraint(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Dihedral(s)"), i18n("av. Ï• [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Dihedrals {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Torsional restraint(s)"), i18n("av. Ï• [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Torsions {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Improper(s)"), i18n("av. Ï• [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Impropers {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Inversion(s)"), i18n("av. Ï• [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Inversion(s) {i18n("Id."), i18n("Spec.1"), i18n("Spec.2"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("VdW potential")}, // VdW(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Metal potential")}, // Metal(s) {i18n("Id."), i18n("At."), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Tersoff Pot.")}, // Tersoff potential(s) {i18n("Id."), i18n("At.1"), i18n("At.2*"), i18n("At.3"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Three-body Pot.")}, // Three-body potential(s) {i18n("Id."), i18n("At.1*"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Four-body Pot.")}, // Four-body potential(s) {i18n("Id."), i18n("Use (1)"), i18n("Field type")}}; // External field(s) GType col_type[MAXDATA][12] = {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 0 - Molecule(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 1 - Atom(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 2 - Core-shell unit(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 3 - Constraint(s) {G_TYPE_INT, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_INT, G_TYPE_INT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 4 - Mean force potential(s) {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 5 - Rigid unit(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 6 - Tethering potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 7 - Bond(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 8 - Bond restraint(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT}, // 9 - Angle(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT}, // 10 - Angle restraint(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 11 - Dihedral(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 12 - Improper(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 13 - Torsion(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 14 - Inversion(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 15 - vdW(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 16 - Metal(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 17 - Tersoff potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 18 - Three-body potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 19 - Four-body potential(s) {G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}}; // 20 - External field(s) // 0 - nothing // 1 - combo box // 2 - viz3D bool // 3 - pick bool // 4 - editable int is_special[MAXDATA][11] ={{0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0}, // Molecule(s) {0, 0, 0, 4, 4, 0, 0, 2, 0, 0, 0}, // Atom(s) {0, 0, 0, 4, 4, 4, 4, 2, 3, 0, 0}, // Core-shell unit(s) {0, 0, 0, 4, 0, 2, 3, 0, 0, 0, 0}, // Constraint(s) {0, 4, 0, 0, 0, 4, 2, 3, 0, 0, 0}, // Mean force potential(s) {0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0}, // Rigid unit(s) {0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0}, // Tethering potential(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Bond(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Bond restrain(s) {0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0}, // Angle(s) {0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0}, // Angle restraint(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Dihedral(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Torsional restraint(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Improper(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Inversion(s) {0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0}, // vdW(s) {0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0}, // Metal(s) {0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0}, // Tersoff potential(s) {0, 0, 0, 0, 2, 3, 1, 0, 0, 0, 0}, // Three-body potential(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Four-body potential(s) {0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0}}; // External field(s) gboolean afp_init[MAXDATC+MAXDATA] = {TRUE, // 0 - System TRUE, // 1 - Analysis TRUE, // 2 - Electrostatics TRUE, // 3 - Equilibration TRUE, // 4 - Thermodynamics TRUE, // 5 - Molecular dynamics TRUE, // 6 - Output TRUE, // 7 - Computational TRUE, // 8 - Molecule(s) TRUE, // 9 - Atom(s) FALSE, // 10 - Shell(s) FALSE, // 11 - Constraint(s) FALSE, // 12 - Mean force potential(s) FALSE, // 13 - Rigid unit(s) FALSE, // 14 - Tethering potential(s) TRUE, // 15 - Bond(s) FALSE, // 16 - Bond restraint(s) TRUE, // 17 - Angle(s) FALSE, // 18 _ Angle restraint(s) TRUE, // 19 - Dihedral(s) FALSE, // 20 - Torsional restraint(s) FALSE, // 21 - Improper(s) FALSE, // 22 - Inversion(s) TRUE, // 23 - Vdw(s) FALSE, // 24 - Metal(s) FALSE, // 25 - Tersoff potential(s) FALSE, // 26 - Three-body potential(s) FALSE, // 27 - Four-body potential(s) FALSE};// 28 - External field(s) gchar * mo_title[8]={i18n("Bond"), i18n("Bond restraint"), i18n("Angle"), i18n("Angle restraint"), i18n("Dihedral"), i18n("Torsional restraint"), i18n("Improper"), i18n("Inversion")}; // Energy converter, values taken from DL_POLY 'read_file.f90' and 'setup_module.f90' float internal_to_other[5] = {9648.530821, 418.4, 100.0, 0.831451115, 1.0}; GtkWidget * field_assistant; GtkTreeViewColumn * field_col[MAXDATA][11]; GtkCellRenderer * field_renderer[MAXDATA][11]; GtkWidget * mol_box[MOLIMIT-1]; GtkWidget * combo_mol[MOLIMIT-1]; GtkWidget * field_tree[MAXDATA]; GtkWidget * field_label[MAXDATA]; GtkTreeStore * field_model[MAXDATA]; GtkTreeIter field_iter; int atom_init = PARTIAL_COORD_AND_SPEC; //SPEC_ONLY; classical_field * tmp_field; glwin * tmp_view = NULL; project * tmp_proj; coord_info * tmp_coord; field_molecule * tmp_fmol; molecule * tmp_mol; field_atom* tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; field_shell * tmp_fshell; field_constraint * tmp_fcons; field_pmf * tmp_fpmf; field_rigid * tmp_frig; field_tethered * tmp_ftet; field_prop * tmp_fprop; field_struct * tmp_fstr; field_nth_body * tmp_fbody; field_nth_body * new_body; field_external * tmp_fext; //GtkWidget * view[13]; GtkWidget * aview; GtkWidget * cs_label[2]; GtkWidget * fwin = NULL; GtkWidget * cwin = NULL; GtkWidget * mol_num_label = NULL; GtkWidget * fibox[MAXDATC+MAXDATA+2]; GtkWidget * enbox; GtkWidget * ff_but[19]; int field_object = FALSE; gboolean field_color = FALSE; int num_field_objects = 0; int row_id; extern void field_unselect_all (); extern gboolean tersoff_question (); extern void check_tersoffs (int id, int key); extern void check_to_visualize_properties (int id); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); extern void print_lammps_atom_file (GtkTextBuffer * buf); /*! \fn int struct_id (int f) \brief number of atoms in a structural element \param f the type of structural element */ int struct_id (int f) { if (f < 9) { return 2; } else if (f < 11) { return 3; } else { return 4; } } /*! \fn int body_at (int b) \brief find the number of atom(s) in a non bonded interaction \param b */ int body_at (int b) { if (b < 2) { return 2; } else if (b == 2) { return 1; } else { return b; } } model example; /*! \fn void set_mol_num_label () \brief classical force field prepare the molecule information widget */ void set_mol_num_label () { gchar * str; str = g_strdup_printf ("%d", tmp_field -> molecules); if (mol_num_label == NULL) { mol_num_label = markup_label(str, -1, -1, 0.0, 0.5); } else { gtk_label_set_text (GTK_LABEL(mol_num_label), str); gtk_label_set_use_markup (GTK_LABEL(mol_num_label), TRUE); } } /*! \fn void setup_cs_labels (int i) \brief classical force field prepare the core-shell description strings \param i the energy unit id */ void setup_cs_labels (int i) { gchar * str; str = g_strdup_printf (_("\t (1) Force constant of the core-shell spring in [%s Å-2]"), exact_name(fkeysw[activef][0][i])); gtk_label_set_text (GTK_LABEL(cs_label[0]), str); gtk_label_set_use_markup (GTK_LABEL(cs_label[0]), TRUE); g_free (str); str = g_strdup_printf (_("\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4"), exact_name(fkeysw[activef][0][i])); gtk_label_set_text (GTK_LABEL(cs_label[1]), str); gtk_label_set_use_markup (GTK_LABEL(cs_label[1]), TRUE); g_free (str); } int ** is_param; int * has_energy; int ** is_energy; gchar *** is_var; /*! \fn gchar * parameters_info (int obj, int key, gchar ** words, float * data) \brief prepare classical force field parameter description string \param obj the type of field object \param key the formalism key for this type of object \param words the string description lists \param data the value(s) to print */ gchar * parameters_info (int obj, int key, gchar ** words, float * data) { int i; gchar * str = NULL; if (fvalues[activef][obj][key] > 0) { // float v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; str = g_strdup_printf (" %s= %.3f", words[0], data[0]); for (i=1; i< fvalues[activef][obj][key]; i++) str = g_strdup_printf ("%s, %s= %.3f", str, words[i], data[i]); } else { str = g_strdup_printf (_("Tabulated")); } return str; } extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn gboolean dlp_to_translate (int fid, int obj, int key) \brief test if fnames text is to be translated or not \param fid the target force field \param obj the target object in the force field \param key the target key for the object */ gboolean dlp_to_translate (int fid, int obj, int key) { switch (fid) { case 0: if (obj == 0 || obj == 1 || obj == 9 || obj == 13 || obj == 14 || obj == 15) return TRUE; if ((obj == 2 || obj == 3) && (key == 0 || key == 3 || key == 4 || key == 7 || key == 8 || key == 9)) return TRUE; if ((obj == 4 || obj == 5) && key != 13) return TRUE; if ((obj == 6 || obj == 7 || obj == 8) && key != 4) return TRUE; if (obj == 10 && (key == 2 || key == 6 || key == 7 || key == 8 || key == 9 || key == 10)) return TRUE; if (obj == 11 && key == 5) return TRUE; break; case 1: if (obj == 0 && (key == 1 || key == 2 || key == 3 || key == 5)) return TRUE; if (obj == 2 && key != 7) return TRUE; if (obj == 4 && key != 16) return TRUE; if (obj == 6 || obj == 8 || obj == 10) return TRUE; break; } return FALSE; } /*! \fn void fill_field_struct (GtkTreeStore * store, int id, int mo) \brief classical force field fill the tree store with structural element parameter(s) \param store the tree store to fill \param id the type of structural element \param mo the id of the target field molecule */ void fill_field_struct (GtkTreeStore * store, int id, int mo) { int j, k, l; char ** vars; gchar * stra, * strb, * strc; GtkTreeIter field_level; if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } #ifdef DEBUG //g_debug ("id= %d, mo= %d", id, mo); //if (id > 5) print_all_field_struct (tmp_fmol, id); #endif tmp_fstr = tmp_fmol -> first_struct[id]; l = id + 2; while (tmp_fstr) { gtk_tree_store_append (store, & field_level, NULL); tmp_fprop = tmp_fstr -> def; stra = g_strdup_printf ("%.3f", tmp_fstr -> av); strb = g_strdup_printf (_("Default: %s (%s)"), dlp_to_translate(activef,l,tmp_fprop -> key) ? _(fnames[activef][l][tmp_fprop -> key]) : fnames[activef][l][tmp_fprop -> key], exact_name(fkeysw[activef][l][tmp_fprop -> key])); if (id < 2) { vars = (char **)fvars_bond[activef][tmp_fprop -> key]; } else if (id < 4) { vars = (char **)fvars_angle[activef][tmp_fprop -> key]; } else if (id < 7) { vars = (char **)fvars_dihedral[activef][tmp_fprop -> key]; } else { vars = (char **)fvars_inversion[activef][tmp_fprop -> key]; } strc = parameters_info (l-1, tmp_fprop -> key, vars, tmp_fprop -> val); for (k=0; k aid[k]) -> name, -1); gtk_tree_store_set (store, & field_level, 0, tmp_fstr -> id+1, k+1, tmp_fstr -> num, k+2, stra, k+3, tmp_fstr -> def -> show, k+4, tmp_fstr -> def -> use, k+5, strb, k+6, strc, k+7, tmp_fstr -> id, -1); g_free (stra); g_free (strb); g_free (strc); tmp_fat = get_active_atom (mo, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (mo, tmp_fstr -> aid[1]); if (id > 1) tmp_fct = get_active_atom (mo, tmp_fstr -> aid[2]); if (id > 3) tmp_fdt = get_active_atom (mo, tmp_fstr -> aid[3]); if (id < 2) { print_dlp_bond (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 4) { print_dlp_angle (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 6) { print_dlp_dihedral (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 8) { print_dlp_improper_inversion (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } tmp_fstr = tmp_fstr -> next; } } /*! \fn void fill_field_body (GtkTreeStore * store, int id) \brief classical force field fill the tree store with non bonded parameter(s) \param store the tree store to fill \param id the type of non bonded interaction */ void fill_field_body (GtkTreeStore * store, int id) { int i, j, k, l; gchar * stra, * strb; GtkTreeIter field_level; if (! id) { i = get_num_vdw_max (); } tmp_fbody = tmp_field -> first_body[id]; k = body_at(id); for (i=0; i < tmp_field -> nbody[id]; i++) { gtk_tree_store_append (store, & field_level, NULL); for (j=0; j na[j] > 0) { if (! id) { gtk_tree_store_set (store, & field_level, j+1, get_body_element_name (tmp_fbody, j, 0), -1); } else { l = tmp_fbody -> ma[j][0]; gtk_tree_store_set (store, & field_level, j+1, get_active_atom (l, tmp_fbody -> a[j][0]) -> name, -1); } } } stra = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,10+id,tmp_fbody -> key) ? _(fnames[activef][10+id][tmp_fbody -> key]) : fnames[activef][10+id][tmp_fbody -> key], exact_name(fkeysw[activef][10+id][tmp_fbody -> key])); if (id == 0) strb = parameters_info (9+id, tmp_fbody -> key, fvars_vdw[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 1) strb = parameters_info (9+id, tmp_fbody -> key, fvars_met[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 2) strb = parameters_info (9+id, tmp_fbody -> key, fvars_ters[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 3) strb = parameters_info (9+id, tmp_fbody -> key, fvars_tbd[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 4) strb = parameters_info (9+id, tmp_fbody -> key, fvars_fbd[activef][tmp_fbody -> key], tmp_fbody -> val); gtk_tree_store_set (store, & field_level, 0, tmp_fbody -> id+1, k+1, tmp_fbody -> show, k+2, tmp_fbody -> use, k+3, stra, k+4, strb, -1); g_free (stra); g_free (strb); if (tmp_fbody -> next != NULL) tmp_fbody = tmp_fbody -> next; } } /*! \fn void fill_field_model (GtkTreeStore * store, int f, int m) \brief classical force field fill the tree store \param store the tree store to fill \param f the type of field object \param m the target field molecule, if any */ void fill_field_model (GtkTreeStore * store, int f, int m) { GtkTreeIter field_level, unit_level, site_level; int i, j, k, l; gchar * stra, * strb, * strc, * strd; tmp_fmol = tmp_field -> first_molecule; //if (get_active_field_elements(f) >= GTK_LIMIT && ! tmp_field -> show_all[f]) { } //else { switch (f) { case 0: stra = NULL; for (i=0; i< tmp_field -> molecules; i++) { tmp_mol = tmp_fmol -> mol; for (j=0; j < tmp_proj -> nspec; j++) { if (tmp_mol -> species[j] > 0) { if (tmp_mol -> species[j] == 1) { if (stra == NULL) { stra = g_strdup_printf ("%s ", exact_name(tmp_proj -> chemistry -> label[j])); } else { stra = g_strdup_printf ("%s%s ", stra, exact_name(tmp_proj -> chemistry -> label[j])); } } else { if (stra == NULL) { stra = g_strdup_printf ("%s%d ", exact_name(tmp_proj -> chemistry -> label[j]), tmp_mol -> species[j]); } else { stra = g_strdup_printf ("%s%s%d ", stra, exact_name(tmp_proj -> chemistry -> label[j]), tmp_mol -> species[j]); } } } } gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fmol -> name, 2, tmp_fmol -> multi, 3, stra, 4, tmp_mol -> natoms, 5, tmp_mol -> nspec, 6, tmp_fmol -> show, 7, tmp_fmol -> show_id, -1); g_free (stra); stra = NULL; if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } break; case 1: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fat = tmp_fmol -> first_atom; for (i=0; i < tmp_fmol -> atoms; i++) { gtk_tree_store_append (store, & field_level, NULL); stra = g_strdup_printf ("%.3f", tmp_fat -> mass); strb = g_strdup_printf ("%.2f", tmp_fat -> charge); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fat -> name, 2, tmp_proj -> chemistry -> label[tmp_fat -> sp], 3, stra, 4, strb, 5, tmp_fat -> frozen, 6, tmp_fat -> num / tmp_fmol -> multi, 7, tmp_fat -> show, -1); g_free (stra); g_free (strb); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } break; case 2: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fshell = tmp_fmol -> first_shell; for (i=0; i < tmp_fmol -> shells; i++) { gtk_tree_store_append (store, & field_level, NULL); if (tmp_fshell -> ia[0]) { l = tmp_fmol -> atoms_id[tmp_fshell -> ia[0]-1][0].a; tmp_fat = get_active_atom (tmp_fmol -> id, l); stra = g_strdup_printf ("%d (%s)", tmp_fshell -> ia[0], exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp])); } else { stra = g_strdup_printf ("%s", _("None")); } if (tmp_fshell -> ia[1]) { l = tmp_fmol -> atoms_id[tmp_fshell -> ia[1]-1][0].a; tmp_fat = get_active_atom (tmp_fmol -> id, l); strb = g_strdup_printf ("%d (%s)", tmp_fshell -> ia[1], exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp])); } else { strb = g_strdup_printf ("%s", _("None")); } strc = g_strdup_printf ("%.3f", tmp_fshell -> m); strd = g_strdup_printf ("%.2f", tmp_fshell -> z); gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, strb, 3, strc, 4, strd, 5, tmp_fshell -> k2, 6, tmp_fshell -> k4, 7, tmp_fshell -> show, 8, tmp_fshell -> use, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); if (tmp_fshell -> next != NULL) tmp_fshell = tmp_fshell -> next; } break; case 3: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fcons = tmp_fmol -> first_constraint; for (i=0; i < tmp_fmol -> constraints; i++) { gtk_tree_store_append (store, & field_level, NULL); if (tmp_fcons -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][0].a; l = get_active_atom (m, k) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_fcons -> ia[0], exact_name(tmp_proj -> chemistry -> label[l])); } else { stra = g_strdup_printf ("%s", _("None")); } if (tmp_fcons -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][0].a; l = get_active_atom (m, k) -> sp; strb = g_strdup_printf ("%d (%s)", tmp_fcons -> ia[1], exact_name(tmp_proj -> chemistry -> label[l])); } else { strb = g_strdup_printf ("%s", _("None")); } gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, strb, 3, tmp_fcons -> length, 4, tmp_fcons -> av, 5, tmp_fcons -> show, 6, tmp_fcons -> use, -1); g_free (stra); g_free (strb); if (tmp_fcons -> next != NULL) tmp_fcons = tmp_fcons -> next; } break; case 4: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fpmf = tmp_fmol -> first_pmf; for (i=0; i < tmp_fmol -> pmfs; i++) { gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fpmf -> length, 2, tmp_fpmf -> av, 3, 0, 4, 0, 5, 0.0, 6, tmp_fpmf -> show, 7, tmp_fpmf -> use, -1); for (j=0; j<2; j++) { gtk_tree_store_append (store, & unit_level, & field_level); gtk_tree_store_set (store, & unit_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, j+1, 4, 0, 5, 0.0, 6, tmp_fpmf -> show, 7, FALSE, -1); if (tmp_fpmf -> num[j] > 0) { for (k=0; k num[j]; k++) { gtk_tree_store_append (store, & site_level, & unit_level); gtk_tree_store_set (store, & site_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, -(j+1), 4, tmp_fpmf -> list[j][k]+1, 5, tmp_fpmf -> weight[j][k], 6, tmp_fpmf -> show, 7, FALSE, -1); } } } if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } break; case 5: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_frig = tmp_fmol -> first_rigid; for (i=0; i < tmp_fmol -> rigids; i++) { gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_frig -> num, 2, NULL, 3, tmp_frig -> show, 4, tmp_frig -> use, -1); if (tmp_frig -> num > 0) { for (j=0; j num; j++) { l = tmp_fmol -> atoms_id[tmp_frig -> list[j]][0].a; k = get_active_atom (m, l) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_frig -> list[j]+1, exact_name(tmp_proj -> chemistry -> label[k])); gtk_tree_store_append (store, & unit_level, & field_level); gtk_tree_store_set (store, & unit_level, 0, -(i+1), 1, 0, 2, stra, 3, FALSE, 4, FALSE, -1); g_free (stra); } } if (tmp_frig -> next != NULL) tmp_frig = tmp_frig -> next; } break; case 6: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_ftet = tmp_fmol -> first_tethered; for (i=0; i < tmp_fmol -> tethered; i++) { j = tmp_fmol -> atoms_id[tmp_ftet -> num-1][0].a; k = get_active_atom (m, j) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_ftet -> num, exact_name(tmp_proj -> chemistry -> label[k])); strb = g_strdup_printf ("%s (%s)", (activef) ? fnames[activef][1][tmp_ftet -> key] : _(fnames[activef][1][tmp_ftet -> key]), exact_name(fkeysw[activef][1][tmp_ftet -> key])); strc = parameters_info (0, tmp_ftet -> key, fvars_teth[activef][tmp_ftet -> key], tmp_ftet -> val); gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, tmp_ftet -> show, 3, tmp_ftet -> use, 4, strb, 5, strc, -1); g_free (stra); g_free (strb); g_free (strc); if (tmp_ftet -> next != NULL) tmp_ftet = tmp_ftet -> next; } break; case SEXTERN: // External field tmp_fext = tmp_field -> first_external; for (i=0; i < tmp_field -> extern_fields; i++) { gtk_tree_store_append (store, & field_level, NULL); stra = g_strdup_printf ("%s (%s)", (activef) ? fnames[activef][15][tmp_fext -> key] : _(fnames[activef][15][tmp_fext -> key]), exact_name(fkeysw[activef][15][tmp_fext -> key])); gtk_tree_store_set (store, & field_level, 0, tmp_fext -> id+1, 1, tmp_fext -> use, 2, stra, 3, parameters_info (14, tmp_fext -> key, fvars_fext[activef][tmp_fext -> key], tmp_fext -> val), -1); g_free (stra); if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } break; default: if (f < MOLIMIT) { fill_field_struct (store, f-7, m); } else { fill_field_body (store, f - MOLIMIT); } break; } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) \brief change classical force field parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) \brief change classical force field parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); tmp_field -> afp[i] = button_get_status ((GtkWidget *)but); if (i == MAXDATC) { for (j=0; j afp[MAXDATC]); combo_set_active (combo_mol[j], 0); } } else if (i > MAXDATC) { gtk_widget_set_visible (fibox[i+1], tmp_field -> afp[i]); } } /*! \fn gboolean set_nbd_but_sensitive (int nbid) \brief adjust non bonded interaction button sensitivity \param nbid the type of non bonded interaction */ gboolean set_nbd_but_sensitive (int nbid) { if (nbid == 0 || nbid == 2 || nbid == 5) { return TRUE; } else { int i, j; i = (nbid == 1) ? 2 : nbid; j = 0; field_molecule * ftmp = tmp_field -> first_molecule; while (ftmp) { j += ftmp -> atoms; ftmp = ftmp -> next; } gboolean res = (j >= i) ? TRUE : FALSE; return res; } } /*! \fn gchar * set_field_label (int f, int m) \brief prepare classical force field description string \param f the type of field object(s) \param m the field molecule id, if any */ gchar * set_field_label (int f, int m) { gchar * lab; int k; if (f < MOLIMIT) { if (tmp_field -> afp[MAXDATC]) { tmp_fmol = get_active_field_molecule (m); lab = g_strdup_printf (_("the %d different fragment(s) in molecule %s\n"), tmp_fmol -> multi, tmp_fmol -> name); } else { lab = g_strdup_printf (_("the system\n")); } } switch (f) { case 1: lab = g_strdup_printf (_("%seach contains the following %d type(s) of atom"), lab, tmp_fmol -> atoms); break; case 2: if (tmp_fmol -> shells == 0) { lab = g_strdup_printf (_("%sdo not contains any core-shell unit"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d core-shell unit"), lab, tmp_fmol -> shells); } break; case 3: if (tmp_fmol -> constraints == 0) { lab = g_strdup_printf (_("%sdo not contains any constraint"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d constraint(s)"), lab, tmp_fmol -> constraints); } break; case 4: if (tmp_fmol -> pmfs == 0) { lab = g_strdup_printf (_("%sdo not contains any mean force potential"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d type(s) of mean force potential(s)"), lab, tmp_fmol -> pmfs); } break; case 5: if (tmp_fmol -> rigids == 0) { lab = g_strdup_printf (_("%sdo not contains any rigid unit"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d rigid unit(s)"), lab, tmp_fmol -> rigids); } break; case 6: if (tmp_fmol -> tethered == 0) { lab = g_strdup_printf (_("%sdo not contains any tethering potential(s)"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d tethering potential(s)"), lab, tmp_fmol -> tethered); } break; case SEXTERN: if (tmp_field -> extern_fields == 0) { lab = g_strdup_printf (_("the force field do not contains any external field(s)")); } else { lab = g_strdup_printf (_("the force field contains the following %d external field(s)"), tmp_field -> extern_fields); } break; default: if (f < MOLIMIT) { if (f == 14) { if (tmp_fmol -> nstruct[f-7] == 0) { lab = g_strdup_printf (_("%sdo not contains any %s *"), lab, _(mo_title[f-7])); } else { lab = g_strdup_printf (_("%s contains the following %d type(s) %s *"), lab, tmp_fmol -> nstruct[f-7], _(intelemts[f])); } } else { if (tmp_fmol -> nstruct[f-7] == 0) { lab = g_strdup_printf (_("%sdo not contains any %s"), lab, _(mo_title[f-7])); } else { lab = g_strdup_printf (_("%s contains the following %d type(s) %s"), lab, tmp_fmol -> nstruct[f-7], _(intelemts[f])); } } break; } else { k = f - MOLIMIT; if (tmp_field -> nbody[k] == 0) { lab = g_strdup_printf (_("the force field do not contains any %s"), _(elemt[f])); } else { lab = g_strdup_printf (_("the force field contains the following %d %s"), tmp_field -> nbody[k], _(elemts[f])); } break; } } return lab; } /*! \fn G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) \brief classical force field assistant change the target molecule for the page \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); gtk_label_set_text (GTK_LABEL(field_label[i]), set_field_label(i, j)); gtk_label_set_use_markup (GTK_LABEL(field_label[i]), TRUE); gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, j); } /*! \fn void update_field_trees () \brief classical force field assistant update all tree models */ void update_field_trees () { int i; for (i=0; i 0 && i < MOLIMIT) { changed_mol_box (GTK_COMBO_BOX (combo_mol[i-1]), GINT_TO_POINTER(i)); } else { if (i > 0) { gtk_label_set_text (GTK_LABEL(field_label[i]), set_field_label(i, 0)); gtk_label_set_use_markup(GTK_LABEL(field_label[i]), TRUE); } gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, -1); } } } /*! \fn void get_is_energy (int i, int l) \brief get the energy unit linked parameter list \param i the type of force field object \param l 1 = prepare the associated string description(s), 0 = no description(s) */ void get_is_energy (int i, int l) { int j, k; j = (i > 1 && i < 8) ? (i-1)/2 + 1 - i/7 : i; is_energy = g_malloc0(fetypes[activef][i+1]*sizeof*is_energy); if (l) { is_var = g_malloc0(fetypes[activef][i+1]*sizeof*is_var); } switch (j) { case 0: for (k=0; k first_molecule; while (tmp_fmol) { tmp_fshell = get_active_shell(tmp_fmol -> id, 0); while (tmp_fshell) { if (! scale) { i =1; break; } else { tmp_fshell -> k2 = (tmp_fshell -> k2 * internal_to_other[sca]) / internal_to_other[scb]; tmp_fshell -> k4 = (tmp_fshell -> k4 * internal_to_other[sca]) / internal_to_other[scb]; tmp_fshell = tmp_fshell -> next; } } tmp_fmol = tmp_fmol -> next; } for (j=0; j<15; j++) { get_is_energy (j, 0); l = 0; if (j == 0) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_ftet = get_active_tethered (tmp_fmol -> id, 0); while (tmp_ftet) { for (k=0; k key]; k++) { if (is_energy[tmp_ftet -> key][k]) { is_param[j][tmp_ftet -> key] ++; if (scale) tmp_ftet -> val[k]= (tmp_ftet -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_ftet = tmp_ftet -> next; } tmp_fmol = tmp_fmol -> next; } } else if (j>0 && j<9) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fstr = tmp_fmol -> first_struct[j-1]; //get_active_struct (j-1, tmp_fmol -> id, 0); while (tmp_fstr) { for (k=0; k def -> key]; k++) { if (is_energy[tmp_fstr -> def -> key][k]) { is_param[j][tmp_fstr -> def -> key] ++; if (scale) tmp_fstr -> def -> val[k] = (tmp_fstr -> def -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { for (k=0; k key]; k++) { if (is_energy[tmp_fprop -> key][k]) { is_param[j][tmp_fprop -> key] ++; if (scale) tmp_fprop -> val[k] = (tmp_fprop -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fprop = tmp_fprop -> next; } tmp_fstr = tmp_fstr -> next; } tmp_fmol = tmp_fmol -> next; } } else { tmp_fbody = get_active_body (0, j-9); while (tmp_fbody) { for (k=0; k key]; k++) { if (is_energy[tmp_fbody -> key][k]) { is_param[j][tmp_fbody -> key] ++; if (scale) tmp_fbody -> val[k] = (tmp_fbody -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fbody = tmp_fbody -> next; } } has_energy[j] = l; i += l; for (k=0; k energy_unit, i); tmp_field -> energy_unit = i; } g_free (is_param); destroy_this_dialog (dialog); } /*! \fn G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) \brief change the classical force field energy unit - creating the dialog \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) { int i, j, k, l; i = combo_get_active ((GtkWidget *)box); if (i != tmp_field -> energy_unit) { if (field_file_has_energy_parameters(FALSE, 0, 0)) { GtkWidget * dialog = gtk_dialog_new_with_buttons (_("Change energy unit ?"), GTK_WINDOW(field_assistant), GTK_DIALOG_MODAL, _("Yes"), GTK_RESPONSE_YES, "No", GTK_RESPONSE_NO, NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); GtkWidget * vbox = dialog_get_content_area (dialog); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly."), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("List of energy related parameters in your FIELD file:\n"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * hbox; GtkWidget * vbax, * vbbx; GtkWidget * hax, * hbx; gchar * str; // Core-Shell tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fshell = get_active_shell(tmp_fmol -> id, 0); if (tmp_fshell) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vbax = create_vbox (BSEP); vbbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbax, FALSE, FALSE, 0); hax = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbax, hax, FALSE, FALSE, 0); str = g_strdup_printf ("\t%s:", _(felemts[3])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hax, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbbx, FALSE, FALSE, 0); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbbx, hbx, FALSE, FALSE, 0); str = g_strdup_printf ("k2 %s k4", _("and")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); break; } tmp_fmol = tmp_fmol -> next; } for (j=0; j<15; j++) { if (has_energy[j]) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vbax = create_vbox (BSEP); vbbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbax, FALSE, FALSE, 0); hax = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbax, hax, FALSE, FALSE, 0); str = g_strdup_printf ("\t%s:", _(felemt[j+7])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hax, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbbx, FALSE, FALSE, 0); get_is_energy (j, 1); for (k=0; k energy_unit = i; } } combo_set_active ((GtkWidget *)box, tmp_field -> energy_unit); update_field_trees (); } /*! \fn GtkWidget * vbox_init (int p) \brief classical force field assistant prepare the field object configuration widgets \param p the type of field object */ GtkWidget * vbox_init (int p) { int i, j, k, l; int col[3]={5, 4, 4}; gchar * str; GtkWidget * vbox; GtkWidget * hbox; GtkWidget * ebox; vbox = create_vbox (BSEP); hbox = create_hbox (0); str = g_strdup_printf (_("Please select the %s:"), _(felemt[0])); ebox = fbox (hbox, str); g_free (str); enbox = create_combo (); for (j=0; j energy_unit); g_signal_connect (G_OBJECT (enbox), "changed", G_CALLBACK(changed_energy_unit), GINT_TO_POINTER(0)); gtk_widget_set_size_request (enbox, 250, 30); widget_set_sensitive (enbox, ! activef); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ebox, enbox, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); ebox = fbox (hbox, _("Please select the component(s) of the force field:")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(" Intra-molecular interaction(s):"), 200, 20, 0.0, 0.5), FALSE, FALSE, 10); //str = g_strdup_printf (_("Use multiple molecule(s)")); //but = check_button (str, 225, 40, tmp_field -> afp[MAXDATC], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(MAXDATC)); //g_free (str); //add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); k = 2+MAXDATC; l = 0; for (i=0; i<3; i++) { ebox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ebox, FALSE, FALSE, 20); for (j=0; j afp[k], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(k)); g_free (str); widget_set_sensitive (ff_but[l], ! activef); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, ff_but[l], FALSE, FALSE, 0); k ++; l ++; } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Non-bonded interaction(s)"), 200, 20, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); for (i=0; i<3; i++) { ebox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ebox, FALSE, FALSE, 20); for (j=0; j<2; j++) { str = g_strdup_printf (_("Use %s"), _(elemts[k-MAXDATC])); if (activef) tmp_field -> afp[k] = FALSE; ff_but[l] = check_button (str, 225, 40, tmp_field -> afp[k], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(k)); k ++; g_free (str); widget_set_sensitive (ff_but[l], set_nbd_but_sensitive (l-13)); widget_set_sensitive (ff_but[l], ! activef); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, ff_but[l], FALSE, FALSE, 0); l ++; } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) \brief retrieve classical force field data from tree model \param tree the GtkWidget sending the signal \param treeid the type of field object \param path the path in the tree model */ int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) { int res = -1; GtkTreeModel * tmodel = gtk_tree_view_get_model (GTK_TREE_VIEW(tree)); if (gtk_tree_model_get_iter (tmodel, & field_iter, path)) { gtk_tree_model_get (tmodel, & field_iter, 0, & res, -1); if (res == 0) { gtk_tree_model_get (tmodel, & field_iter, field_v[treeid]+1, & res, -1); } else { res --; } } return res; } /*! \fn int get_field_data_id (int k, gchar * data) \brief get classical force field parameter from description string \param k the type of field object \param data the target description string */ int get_field_data_id (int k, gchar * data) { int i, j; gchar * str; i = -1; for (j=0; j -1) { if (i < MOLIMIT) k = combo_get_active (combo_mol[i-1]); if (i > 6 && i < MOLIMIT) { tmp_fstr = get_active_struct (i-7, k, j); o = struct_id (i); ids = allocint (o); if (i < 9) { vars = (char **)fvars_bond[activef][l]; } else if (i < 11) { vars = (char **)fvars_angle[activef][l]; } else if (i < 14) { vars = (char **)fvars_dihedral[activef][l]; } else { vars = (char **)fvars_inversion[activef][l]; } gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), iter, 0, & m, -1); if (m) { // Default prop for (n=0; n def -> key) { adjust_field_prop (i-7, o, NULL, ids, l); // print status of field prop str = g_strdup_printf (_("Default: %s"), str); gtk_tree_store_set (field_model[i], iter, field_v[i]-1, str, -1); gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, vars, tmp_fstr -> def -> val), -1); update_field_trees (); } } else { // Other prop gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); for (n=1; n other, o, ids) -> val), -1); } g_free (ids); } else { switch (i) { case 6: tmp_ftet = get_active_tethered (k, j-1); tmp_ftet -> key = l; tmp_ftet -> val = NULL; tmp_ftet -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (0, l, fvars_teth[activef][l], tmp_ftet-> val), -1); break; case SEXTERN: tmp_fext = get_active_external(j-1); tmp_fext -> key = l; tmp_fext -> val = NULL; tmp_fext -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, 2, & val); gtk_tree_store_set (field_model[i], iter, 3, parameters_info (i-6, l, fvars_fext[activef][l], tmp_fext -> val), -1); break; default: k = i - MOLIMIT; tmp_fbody = get_active_body (j-1, k); if (k == 2) { changeit = tersoff_question (); } if (changeit) { if (k == 2) { check_tersoffs (-1, l); gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, -1); } else { tmp_fbody -> key = l; tmp_fbody -> val = NULL; tmp_fbody -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); } } else if (i == 17) { gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_ters[activef][l], tmp_fbody -> val), -1); } if (i == 15) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_vdw[activef][l], tmp_fbody -> val), -1); if (i == 16) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_met[activef][l], tmp_fbody -> val), -1); if (i == 18) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_tbd[activef][l], tmp_fbody -> val), -1); if (i == 19) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_fbd[activef][l], tmp_fbody -> val), -1); break; } } } g_free (str); g_value_unset(& vbl); } g_value_unset(& val); } /*! \fn GtkWidget * create_combo_mol (int f) \brief classical force field create molecule selection combo box \param f the type of force field object */ GtkWidget * create_combo_mol (int f) { int i; gchar * str; GtkWidget * combo = create_combo (); tmp_fmol = tmp_field -> first_molecule; for (i=0; i molecules; i++) { str = g_strdup_printf ("%d: %s", i+1, tmp_fmol -> name); combo_text_append (combo, str); g_free (str); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } widget_set_sensitive (combo, (tmp_field -> molecules > 1) ? TRUE : FALSE); combo_set_active (combo, 0); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(changed_mol_box), GINT_TO_POINTER(f+1)); return combo; } int actel; /*! \fn gchar * pop_info (int i, int id) \brief get popup information message \param i the type of element \param id the id number of the element */ gchar * pop_info (int i, int id) { int j, k, l; gchar * str = NULL; actel = 0; switch (i) { case 0: tmp_fmol = get_active_field_molecule (row_id); str = g_strdup_printf (_("Molecule N°%d"), id+1); actel = 1; break; default: if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); } switch (i) { case 1: tmp_fat = get_active_atom (j, id); str = g_strdup_printf (_("Atom N°%d: \"%s\""), tmp_fat -> id+1, tmp_fat -> name); actel = tmp_fat -> num; break; case 2: if (tmp_fmol -> shells > 0) { tmp_fshell = get_active_shell (j, id); actel = 1; if (tmp_fshell -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fshell -> ia[0]-1][0].a; str = g_strdup_printf (_("Core-Shell N°%d: Atom %d (%s) - "), tmp_fshell -> id+1, tmp_fshell -> ia[0], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf (_("Core-Shell N°%d: %s - "), tmp_fshell -> id+1, _("None")); } if (tmp_fshell -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fshell -> ia[1]-1][1].a; str = g_strdup_printf ("%s%d (%s)", str, tmp_fshell -> ia[1], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("%s%s", str, _("None")); } } break; case 3: if (tmp_fmol -> constraints > 0) { tmp_fcons = get_active_constraint (j, id); actel = 1; if (tmp_fcons -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][0].a; str = g_strdup_printf (_("Constrained Bond N°%d: Atom %d (%s) - "), tmp_fcons -> id+1, tmp_fcons -> ia[0], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf (_("Constrained Bond N°%d: %s - "), tmp_fcons -> id+1, _("None")); } if (tmp_fcons -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][1].a; str = g_strdup_printf ("%s%d (%s)", str, tmp_fcons -> ia[1], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("%s%s", str, _("None")); } } break; case 4: if (tmp_fmol -> pmfs > 0) { tmp_fpmf = get_active_pmf (j, id); actel = 1; str = g_strdup_printf (_("Mean Force Potential N°%d"), tmp_fpmf -> id+1); } break; case 5: if (tmp_fmol -> rigids > 0) { tmp_frig = get_active_rigid (j, id); actel = 1; str = g_strdup_printf (_("Rigid Unit N°%d: %d Atom(s)"), tmp_frig -> id+1, tmp_frig -> num); } break; case 6: if (tmp_fmol -> tethered > 0) { tmp_ftet = get_active_tethered (j, id); actel = 1; str = g_strdup_printf (_("Tethering Potential N°%d"), tmp_ftet -> id+1); } break; case SEXTERN: if (tmp_field -> extern_fields > 0) { tmp_fext = get_active_external (row_id); str = g_strdup_printf ("%s N°: %d", _(felemt[i+1]), tmp_fext -> id+1); actel = 1; } break; default: if (i < MOLIMIT) { if (tmp_fmol -> nstruct[i-7] > 0) { actel = 1; tmp_fstr = get_active_struct (i-7, j, row_id); str = g_strdup_printf ("%s N°%d: \"", _(mo_title[i-7]), tmp_fstr -> id+1); for (k=0; k aid[k]) -> name); if (k nbody[k] > 0) { tmp_fbody = get_active_body (row_id, k); str = g_strdup_printf ("%s N°: %d \"%s", _(felemt[i+1]), tmp_fbody -> id+1, get_active_atom (tmp_fbody -> ma[0][0], tmp_fbody -> a[0][0]) -> name); for (l=1; l na[l] < 0) { str = g_strdup_printf (_("%s - NONE"), str); } else { str = g_strdup_printf ("%s - %s", str, get_active_atom (tmp_fbody -> ma[l][0], tmp_fbody -> a[l][0]) -> name); } } str = g_strdup_printf ("%s\"", str); actel = 1; } } break; } break; } return str; } /*! \fn gchar * pop_edit (int i) \brief get edit string label \param i the type of element to edit */ gchar * pop_edit (int i) { gchar * str = NULL; switch (i) { case 0: str = g_strdup_printf (_("Edit Name: \"%s\""), tmp_fmol -> name); break; default: str = g_strdup_printf (_("Edit properties %s"), _(intelemt[i])); break; } return str; } /*! \fn gchar * pop_add (int i) \brief get add string label \param i the type of element to add */ gchar * pop_add (int i) { gchar * str = NULL; if ((i>1 && i<7) || (i>MOLIMIT && i1 && i<7) || (i>MOLIMIT && i 0) { str = pop_edit (i); if (str) { fmenus = g_menu_new (); append_field_item (fmenus, str, "edit-fp", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(edit_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } switch (i) { case 0: if (tmp_field -> molecules < tmp_coord -> totcoord[2] && tmp_fmol -> multi > 1) { fmenus = g_menu_new (); append_field_item (fmenus, _("Add new molecule"), "add-mol", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(add_molecule_to_field), data, FALSE, FALSE, FALSE, TRUE); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } if (tmp_field -> molecules > tmp_coord -> totcoord[3] && tmp_fmol -> mol -> multiplicity > 1 && tmp_fmol -> multi < tmp_fmol -> mol -> multiplicity) { fmenus = g_menu_new (); str = g_strdup_printf (_("Remove molecule %s from force field"), tmp_fmol -> name); append_field_item (fmenus, str, "rem-mol", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_molecule_from_field), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } break; default: if (i == 1) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); if (actel > 1) { fmenus = g_menu_new (); str = g_strdup_printf (_("Created new force field atom from %s atom(s)"), tmp_fat -> name); append_field_item (fmenus, str, "add-fat", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_select_atom_id_from_fied_molecule), GINT_TO_POINTER(0), FALSE, FALSE, FALSE, TRUE); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } l = 0; tmp_fbt = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { if (tmp_fbt -> sp == tmp_fat -> sp) l ++; if (tmp_fbt -> next != NULL) tmp_fbt = tmp_fbt -> next; } if (l > 1) { fmenus = g_menu_new (); str = g_strdup_printf (_("Remove atom %s from force field molecule"), tmp_fat -> name); append_field_item (fmenus, str, "rem-fat", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_atom_from_field_molecule), (gpointer *)tmp_fat, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } } str = pop_remove (i); if (str) append_field_item (fmenu, str, "rem-fp", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); break; } } str = pop_add (i); if (str != NULL) { fmenus = g_menu_new (); append_field_item (fmenus, str, "add-prop", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(add_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } #ifdef GTK4 menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)fmenu, GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (menu, widget); // gtk_widget_set_size_request (menu, -1, i); #else menu = gtk_menu_new_from_model ((GMenuModel *)fmenu); #endif str = g_strdup_printf ("ff-%d", i); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(field_pop_actions)); g_free (str); #ifdef GTK4 pop_menu_at_pointer (menu, event_x, event_y); #else pop_menu_at_pointer (menu, event); #endif /* GtkWidget * prop; menu = gtk_menu_new (); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); if (actel > 0) add_menu_separator (menu); } if (actel > 0) { str = pop_edit (i); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(edit_field_prop), data); } switch (i) { case 0: if (tmp_field -> molecules < tmp_coord -> totcoord[2] && tmp_fmol -> multi > 1) { add_menu_separator (menu); prop = create_menu_item (FALSE, _("Add new molecule")); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(add_molecule_to_field), data); } if (tmp_field -> molecules > tmp_coord -> totcoord[3] && tmp_fmol -> mol -> multiplicity > 1 && tmp_fmol -> multi < tmp_fmol -> mol -> multiplicity) { add_menu_separator (menu); str = g_strdup_printf (_("Remove molecule %s from force field"), tmp_fmol -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_molecule_from_field), (gpointer *)tmp_fmol); } break; default: if (i == 1) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); if (actel > 1) { add_menu_separator (menu); str = g_strdup_printf (_("Created new force field atom from %s atom(s)"), tmp_fat -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(select_atom_id_from_fied_molecule), GINT_TO_POINTER(0)); } l = 0; tmp_fbt = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { if (tmp_fbt -> sp == tmp_fat -> sp) l ++; if (tmp_fbt -> next != NULL) tmp_fbt = tmp_fbt -> next; } if (l > 1) { add_menu_separator (menu); str = g_strdup_printf (_("Remove atom %s from force field molecule"), tmp_fat -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_atom_from_field_molecule), (gpointer *)tmp_fat); } } str = pop_remove (i); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_field_prop), data); } break; } } str = pop_add (i); if (str != NULL) { if (actel > 0) add_menu_separator (menu); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(add_field_prop), data); } pop_menu_at_pointer (menu, (GdkEvent *)event); #endif*/ } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) \brief classical force field tree model popup contextual menu callback GTK3 \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) { pop_up_field_context_menu (row_id, widget, NULL, data); return TRUE; } #endif #ifdef GTK4 /*! \fn void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief classical force field tree model button event GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief classical force field tree model button event GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { GtkTreePath * path; GtkTreeViewColumn * column; int i, j, k; i = GPOINTER_TO_INT(data); #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(field_tree[i]), event_x, event_y, & e_x, & e_y); gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(field_tree[i]), e_x, e_y, & path, & column, & j, & k); #else gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(field_tree[i]), event_x, event_y, & path, & column, & j, & k); #endif if (path != NULL) { row_id = get_field_tree_data (field_tree[i], i, path); } else { row_id = 0; } if (event_button == 3) { #ifdef GTK4 pop_up_field_context_menu (row_id, field_tree[i], event_x, event_y, data); #else pop_up_field_context_menu (row_id, field_tree[i], event, data); #endif } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief classical force field tree model button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { field_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief classical force field tree model button released callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { field_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief classical force field tree model button event callback GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; field_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #endif /*! \fn void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the classical force field tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k, l; int tree = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & i, -1); if (tree < SEXTERN) { if (i == 0) { gtk_tree_model_get (mod, iter, field_v[tree]+1, & i, -1); i ++; } else if (i < 0) { i = - i; } for (k=0; k 5) ? 1 : 0; if (i) { set_renderer_markup (mod, iter, renderer, field_v[tree]); } else { gchar * str = NULL; GtkTreeViewColumn * cal; switch (tree) { case 0: gtk_tree_model_get (mod, iter, 3, & str, -1); break; default: // CHECK THIS cal = gtk_tree_view_get_column (GTK_TREE_VIEW(field_tree[tree]), 1); if (cal == col) { gtk_tree_model_get (mod, iter, 1, & str, -1); } else { gtk_tree_model_get (mod, iter, 2, & str, -1); } break; } g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } } /*! \fn void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer visibility in the classical force field tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; int tree = GPOINTER_TO_INT(data); if (tree != SEXTERN) { if (tree == 4 || tree == 5) { gtk_tree_model_get (mod, iter, 0, & j, -1); if (j < 0) j = 0; } else { for (i=0; i mass = val; if (i == 1) get_active_atom (l, k) -> charge = val; if (i == 2) get_active_shell (l, k) -> m = val; if (i == 3) get_active_shell (l, k) -> z = val; if (i == 4) get_active_shell (l, k) -> k2 = val; if (i == 5) get_active_shell (l, k) -> k4 = val; if (i == 6) get_active_constraint (l, k) -> length = val; if (i == 7) get_active_pmf (l, k) -> length = val; if (i == 8) { int n, m; gtk_tree_model_get (GTK_TREE_MODEL(field_model[j]), & iter, 3, & n, 4, & m, -1); if (n < 0 && m > 0) { get_active_pmf (l, k) -> weight[-n-1][m-1] = val; } } if (j < MOLIMIT) changed_mol_box (GTK_COMBO_BOX(combo_mol[j-1]), GINT_TO_POINTER(j)); } /*! \fn void get_field_iter_and_edit (gchar * path_string, gpointer data) \brief edit field property in the classical force field tree model \param path_string the path in the tree model \param data the associated data pointer */ void get_field_iter_and_edit (gchar * path_string, gpointer data) { int i = GPOINTER_TO_INT(data); gtk_tree_model_get_iter (GTK_TREE_MODEL(field_model[i]), & field_iter, gtk_tree_path_new_from_string (path_string)); if (i == 4 || i == 5 || (i > 6 && i < MOLIMIT)) { GValue vbl = {0, }; if (i < 6) { gtk_tree_model_get_value (GTK_TREE_MODEL(field_model[i]), & field_iter, 0, & vbl); } else { gtk_tree_model_get_value (GTK_TREE_MODEL(field_model[i]), & field_iter, field_v[i]+1, & vbl); } row_id = (int) g_value_get_int (& vbl); if (i < 6) row_id = abs(row_id) - 1; } edit_field_prop (g_simple_action_new ("Dummy", NULL), NULL, data); } /*! \fn G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief to edit data in the classical force field tree model \param cell the GtkTreeView sending the signal \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { destroy_this_widget (GTK_WIDGET(editable)); get_field_iter_and_edit (path_string, data); } /*! \fn G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) \brief activating row in the classical force field tree model \param treeview the GtkTreeView sending the signal \param path the path in the tree view \param col the column in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) { get_field_iter_and_edit (gtk_tree_path_to_string (path), data); } /*! \fn GtkWidget * create_field_tree (int f) \brief classical force field create the list store selection widgets \param f the page number / type of field object(s) */ GtkWidget * create_field_tree (int f) { int i, j, k, l, m; gchar * str; GtkListStore * list_store_combo; GtkTreeIter iter; gboolean combox = FALSE; l = (f > 5) ? 1 : 0; m = 0; field_model[f] = gtk_tree_store_newv (field_v[f]+l+field_a[f], col_type[f]); field_tree[f] = gtk_tree_view_new_with_model(GTK_TREE_MODEL(field_model[f])); for (i=0; i 1 && is_special[f][i] < 4) { field_renderer[f][i] = gtk_cell_renderer_toggle_new (); str = g_strdup_printf ("%s", (f == 2 && (i-m == 5|| i-m == 6)) ? ctitle[f][i-m] : _(ctitle[f][i-m])); field_col[f][i] = gtk_tree_view_column_new_with_attributes (str, field_renderer[f][i], "active", i, NULL); g_free (str); g_signal_connect (G_OBJECT(field_renderer[f][i]), "toggled", G_CALLBACK(on_toggle_visualize_or_select_object), & tmp_view -> colorp[f][is_special[f][i]-2]); if ((f == 4 && i == field_v[f]+l-1) || f == SEXTERN) gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(field_renderer[f][i]), TRUE); gtk_tree_view_column_set_clickable (field_col[f][i], TRUE); if (f != SEXTERN) { g_signal_connect (G_OBJECT(field_col[f][i]), "clicked", G_CALLBACK(visualize_or_select_all_elements), & tmp_view -> colorp[f][is_special[f][i]-2]); } } else { field_renderer[f][i] = gtk_cell_renderer_text_new(); str = g_strdup_printf ("%s", (f == 2 && (i-m == 5|| i-m == 6)) ? ctitle[f][i-m] : _(ctitle[f][i-m])); field_col[f][i] = gtk_tree_view_column_new_with_attributes (str, field_renderer[f][i], "text", i, NULL); g_free (str); } if (is_special[f][i] == 4) { g_object_set (field_renderer[f][i], "editable", TRUE, NULL); if (f < 3) { j = 2*(f-1) + i - 3; } else if (f == 3) { j = 6; } else if (f == 4) { j = (i == 1) ? 7 : 8; } g_signal_connect (G_OBJECT(field_renderer[f][i]), "edited", G_CALLBACK(edit_field_cell), GINT_TO_POINTER(j)); } if ((f == 0 && i == 3) || (f == 2 && (i == 1 || i == 2)) || (f == 3 && (i == 1 || i == 2))) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_and_markup, GINT_TO_POINTER(f), NULL); } else if (f == 4 || f == 5) { if ((f == 4 && i < 3) || (f == 5 && i < 2)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else if (f == 4 && (i == 3 || i == 4 || i == 5)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], pmf_set_color_and_visible, GINT_TO_POINTER(i), NULL); } else if (f == 5 && i == 2) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], rig_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_visible, GINT_TO_POINTER(f), NULL); } } else if (f > 6 && f < MOLIMIT && (i == 0 || i == struct_id(f)+1)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], prop_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else if (l == 1 && i > field_v[f]-2) { if (i == field_v[f]-1) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_markup_and_visible_box, GINT_TO_POINTER(f), NULL); } else if (i == field_v[f]) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_markup_and_visible, GINT_TO_POINTER(f), NULL); g_object_set (field_renderer[f][i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(field_renderer[f][i]), "editing-started", G_CALLBACK(to_edit_field_prop), GINT_TO_POINTER(f)); } } else if (is_special[f][i] < 2 || is_special[f][i] > 3) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color, GINT_TO_POINTER(f), NULL); } gtk_tree_view_column_set_alignment (field_col[f][i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(field_tree[f]), field_col[f][i]); } fill_field_model (field_model[f], f, 0); g_object_unref (field_model[f]); GtkTreeSelection * fieldselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(field_tree[f])); gtk_tree_selection_set_mode (fieldselect, GTK_SELECTION_SINGLE); #ifdef GTK4 add_widget_gesture_and_key_action (field_tree[f], "field-button-pressed", G_CALLBACK(on_field_button_pressed), GINT_TO_POINTER(f), "field-button-released", G_CALLBACK(on_field_button_released), GINT_TO_POINTER(f), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(field_tree[f]), "button_press_event", G_CALLBACK(on_field_button_event), GINT_TO_POINTER(f)); g_signal_connect (G_OBJECT(field_tree[f]), "popup-menu", G_CALLBACK(on_pop_up_field), GINT_TO_POINTER(f)); g_signal_connect (G_OBJECT(field_tree[f]), "row-activated", G_CALLBACK(on_field_row_activated), GINT_TO_POINTER(f)); #endif return field_tree[f]; } /*! \fn void create_field_list (GtkWidget * vbx, int f) \brief classical force field creation prepare list store selection widgets \param vbx the GtkWidget sending the signal \param f the page number */ void create_field_list (GtkWidget * vbx, int f) { int i; field_tree[f] = NULL; field_model[f] = NULL; for (i=0; i<11; i++) { field_renderer[f][i] = NULL; field_col[f][i] = NULL; } GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); if (f == 0) { gtk_widget_set_size_request (scrollsets, field_s[f], 175); } else if (f < MOLIMIT) { if (f == 1) { gtk_widget_set_size_request (scrollsets, field_s[f], 320); } else if (f == 8 || f == 10 || f == 12 || f == 13) { gtk_widget_set_size_request (scrollsets, field_s[f], 180); } else { gtk_widget_set_size_request (scrollsets, field_s[f], 220); } } else { gtk_widget_set_size_request (scrollsets, field_s[f], 300); } add_container_child (CONTAINER_SCR, scrollsets, create_field_tree(f)); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, (800-field_s[f])/2); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 20); } /*! \fn GtkWidget * create_mol_box (int f) \brief classical force field create molecule selection widgets \param f the type of force field object */ GtkWidget * create_mol_box (int f) { GtkWidget * hbox; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Please select molecule: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 100); combo_mol[f] = create_combo_mol (f); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_mol[f], FALSE, FALSE, 10); return hbox; } /*! \fn GtkWidget * vbox_field (int f) \brief classical force field create page option widgets \param f the page number */ GtkWidget * vbox_field (int f) { gchar * str; GtkWidget * vbx; GtkWidget * hbx; GtkWidget * vbox; GtkWidget * hbox; vbox = create_vbox (5); if (f > 6 && f < MOLIMIT) { hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbx, FALSE, FALSE, 0); vbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, vbx, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_image_new_from_file(ifield[f-7]), FALSE, FALSE, 50); } if (f == 0) { hbox = fbox (vbox, _("Number of isolated molecular fragments: ")); str = g_strdup_printf ("%d", tmp_coord -> totcoord[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 75); g_free (str); str = g_strdup_printf (_("\tEach of these fragments can be described separately in the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); hbox = fbox (vbox, _("Number of distinct molecules: ")); str = g_strdup_printf ("%d", tmp_coord -> totcoord[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 75); g_free (str); hbox = fbox (vbox, _("Number of molecules in the force field: ")); set_mol_num_label (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, mol_num_label, FALSE, FALSE, 75); } else if (f < MOLIMIT) { // if f > 0, ie. atoms tab at least // need a combobox to pick the 'active' molecule and its corresponding force field // If using molecules the combo box is active, and visible // Otherwise deactivate and hide the combo box // Anyway fill the treestore according to the selection mol_box[f-1] = create_mol_box (f-1); if (f > 6 && f < MOLIMIT) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, mol_box[f-1], FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, mol_box[f-1], FALSE, FALSE, 0); } widget_set_sensitive (mol_box[f-1], tmp_field -> afp[MAXDATC]); } if (f > 6 && f < MOLIMIT) { hbox = fbox (vbx, g_strdup_printf (_("Properties %s: "), _(intelemt[f]))); } else { hbox = fbox (vbox, g_strdup_printf (_("Properties %s: "), _(intelemt[f]))); } if (f > 0) { field_label[f] = markup_label(set_field_label(f, 0), 120, 40, 0.35, 0.5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, field_label[f], TRUE, TRUE, 0); if (f > 6 && f < MOLIMIT) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 10); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); } } create_field_list (vbox, f); if (f > 6 && f < MOLIMIT) { if (f == 8 || f == 10 || f == 12 || f == 13) { int g = (f < 12) ? f - 1 : 11; str = g_strdup_printf (_("\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only."), _(elemts[f]), _(elemts[g])); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 14) { str = g_strdup_printf (_("\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } str = g_strdup_printf (_("\t (1) average value for the force field element as measured in the model.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (2) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (3) each force field element can be tuned separately, if not the Default parameters will be used.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 2) { cs_label[0] = markup_label(" ", -1, -1, 0.0, 0.5); cs_label[1] = markup_label(" ", -1, -1, 0.0, 0.5); setup_cs_labels (tmp_field -> energy_unit); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cs_label[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cs_label[1], FALSE, FALSE, 0); str = g_strdup_printf (_("\t (3) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 3) { str = g_strdup_printf (_("\t (1) average value for the force field element as measured in the model.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (2) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 4) { str = g_strdup_printf (_("\t (1) average distance between the barycenters of units 1 and 2 as measured in the model.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (3) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if ((f > 2 && f < 7) || f > 11) { str = g_strdup_printf (_("\t (1) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } return vbox; } GtkWidget * field_i_prep[2]; GtkWidget * field_i_box[2]; GtkWidget * field_i_lab[2]; GtkWidget * field_i_fixed[2]; GtkWidget * field_i_combo[2]; GtkWidget * field_i_obj[2]; GtkWidget * preview_but; gboolean assist_init; int saved_label_format[2]; int saved_label_position[2]; /*! \fn void close_the_assistant (GtkAssistant * assistant) \brief classical force field creation close the assistant \param assistant the target assistant */ void close_the_assistant (GtkAssistant * assistant) { field_assistant = destroy_this_widget (field_assistant); int j; #ifdef GTK3 // GTK3 Menu Action To Check gboolean i = (tmp_proj -> force_field[activef]) ? TRUE : FALSE; widget_set_sensitive (tmp_view -> color_styles[5], i); widget_set_sensitive (tmp_view -> color_styles[5+ATOM_MAPS], i); #endif field_color = FALSE; for (j=0; j<2; j++) { tmp_view -> anim -> last -> img -> acl_format[j] = saved_label_format[j]; tmp_view -> anim -> last -> img -> labels[j].position = saved_label_position[j]; } field_unselect_all (); /* tmp_fmol = tmp_field -> first_molecule; for (j=0; j molecules; j++) { g_debug ("FIELD_CANCEL:: Mol= %d, show= %d, show_id= %d", j, tmp_fmol -> show, tmp_fmol -> show_id); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } */ // restore selection if any from calc.c restore_ogl_selection (tmp_view); mol_num_label = NULL; tmp_field = NULL; tmp_view = NULL; if (! assist_init) { if (tmp_proj -> force_field[activef]) { g_free (tmp_proj -> force_field[activef]); tmp_proj -> force_field[activef] = NULL; } } } /*! \fn G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) \brief classical force field creation cancel assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) \brief classical force field creation cancel event callback GTK4 \param assistant the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) \brief classical force field creation cancel event callback GTK3 \param assistant the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) #endif { on_assistant_cancel (((GtkAssistant *)assistant), data); return TRUE; } /*! \fn G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) \brief classical force field creation close assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } /*! \fn G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) \brief classical force field assistant find the next page to go to \param current_page the current page id \param data the associated data pointer */ G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) { int i, j; j = -1; switch (current_page) { case 0: j = 1; if (! tmp_field -> prepare_file[0]) { j = MAXDATC+1; if (! tmp_field -> prepare_file[1]) j += MAXDATA+2; } return j; break; case MAXDATC+MAXDATA+2: return -1; break; default: if (current_page > MAXDATC-1 && tmp_field -> prepare_file[1]) { for (i=current_page-1; i afp[i]) { j = i+2; break; } } } else if (tmp_field -> prepare_file[0]) { for (i=current_page; i afp[i]) { j = i+1; break; } } } if (j == -1) j = MAXDATC+MAXDATA+2; return j; break; } } /*! \fn G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) \brief prepare classical force field assistant pages before display \param assistant the GtkAssistant sending the signal \param page the current page \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) { int i, j, k; i = gtk_assistant_get_current_page (assistant); field_unselect_all (); switch (i) { case 0: // hide_the_widgets (preview_but); break; case 1: // show_the_widgets (preview_but); break; case MAXDATC+MAXDATA+2: break; default: j = field_object = i-2-MAXDATC; toviz.c = 1; switch (j) { case 0: tmp_fmol = tmp_field -> first_molecule; for (k=0; k molecules; k++) { if (tmp_fmol -> show) visualize_object (j, k, -1); if (tmp_fmol -> show_id) visualize_object (-1, k, -1); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } break; default: if (j > -1 && j < SEXTERN) check_to_visualize_properties (j); break; } break; } init_default_shaders (tmp_view); } /*! \fn void hide_show_this_pages (int start, int end, int status, int delta) \brief classical force field assistant show / hide pages \param start starting page id \param end ending page id \param status 0 = hide, 1 = show \param delta delta from starting page */ void hide_show_this_pages (int start, int end, int status, int delta) { int i; for (i=start; i afp[i] : status); } } } } /*! \fn void remove_classical_assistant_pages () \brief classical force field creation remove assistant pages */ void remove_classical_assistant_pages () { int i; GtkAssistant * assist = GTK_ASSISTANT(field_assistant); mol_num_label = destroy_this_widget (mol_num_label); for (i=MAXDATC+MAXDATA+1; i>-1; i--) { gtk_assistant_remove_page (assist, i+1); fibox[i] = destroy_this_widget(fibox[i]); } } /*! \fn G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) \brief clean force field data - running the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (field_assistant), 0), FALSE); gtk_label_set_text (GTK_LABEL(field_i_lab[1]), _("Initialize force field using: ")); int i; for (i=0; i<2; i++) { combo_set_active (field_i_combo[i], -1); //tmp_field -> prepare_file[i] = TRUE; widget_set_sensitive (field_i_combo[i], TRUE); widget_set_sensitive (field_i_lab[i], TRUE); widget_set_sensitive (field_i_prep[i], FALSE); field_i_obj[i] = destroy_this_widget (field_i_obj[i]); field_i_obj[i] = stock_image (CANCEL); show_the_widgets (field_i_obj[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_obj[i], TRUE, TRUE, 25); } for (i=0; i prepare_file[i] = button_get_status ((GtkWidget *)but); if (i == 1) { for (j=0; j<2; j++) { widget_set_sensitive (field_i_lab[j], (tmp_field -> prepare_file[i] && ! assist_init) ? TRUE : FALSE); widget_set_sensitive (field_i_combo[j], (tmp_field -> prepare_file[i] && ! assist_init) ? TRUE : FALSE); } hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); } else { hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); } } /*! \fn void add_classical_assistant_pages (int p) \brief classical force field assistant add pages \param p the target project id */ void add_classical_assistant_pages (int p) { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(field_assistant); // Control file for (i=0; i Finalize the creation of the %s input file(s) now !"), (activef) ? "LAMMPS" : "DL-POLY"); add_box_child_start (GTK_ORIENTATION_VERTICAL, fibox[i], markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, fibox[i], markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, fibox[i]); gtk_assistant_set_page_title (assist, fibox[i], (activef) ? _("Create the LAMMPS input file(s) now !") : _("Create the DL-POLY input file(s) now !")); gtk_assistant_set_page_type (assist, fibox[i], GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, fibox[i], TRUE); gtk_assistant_update_buttons_state (assist); append_pages = TRUE; } gchar * field_init[3]={i18n("Atomic Species as Field Atoms"), i18n("Atomic Species and Total Coordinations as Field Atoms"), i18n("Atomic Species and Partial Coordinations as Field Atoms")}; // gboolean create_ff_structure (gpointer data) /*! \fn void create_ff_structure (int ai, int type) \brief create the classical force field data structure and update widgets \param ai how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) \param type the type of force field to create (0 = DL-POLY, 1 = LAMMPS) */ void create_ff_structure (int ai, int type) { int i; //if (append_pages) remove_classical_assistant_pages (); tmp_proj -> force_field[activef] = create_force_field_data_structure (ai); tmp_proj -> force_field[activef] -> type = type; tmp_field = tmp_proj -> force_field[activef]; for (i=0; i afp[i] = afp_init[i]; for (i=0; i<2; i++) { widget_set_sensitive (field_i_prep[i], TRUE); if (activef && ! i) { widget_set_sensitive (field_i_prep[i], FALSE); tmp_field -> prepare_file[i] = FALSE; } else { tmp_field -> prepare_file[i] = button_get_status (field_i_prep[i]); } widget_set_sensitive (field_i_lab[i], FALSE); } // for (i=13; i<19; i++) widget_set_sensitive (ff_but[i], set_nbd_but_sensitive (i)); add_classical_assistant_pages (tmp_view -> proj); set_mol_num_label (); update_field_trees (); field_i_obj[1] = destroy_this_widget (field_i_obj[1]); field_i_obj[1] = stock_image (APPLY); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[1], field_i_obj[1], TRUE, TRUE, 25); gtk_label_set_text (GTK_LABEL(field_i_lab[1]), _("Force field was initialized using: ")); gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (field_assistant), 0), TRUE); show_the_widgets (field_assistant); if (tmp_field -> md_opts[1] == 0.0) hide_the_widgets (extra_vbox[1]); hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); // return FALSE; } /*! \fn G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) \brief classical force field change initialization parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); if (j > -1) { switch (i) { case 0: tmp_field -> type = j; setup_this_force_field (j); if (tmp_field -> type == j) { field_i_obj[0] = destroy_this_widget (field_i_obj[0]); field_i_obj[0] = stock_image (APPLY); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[0], field_i_obj[0], TRUE, TRUE, 25); show_the_widgets (field_i_obj[0]); } else { combo_set_active ((GtkWidget *)box, -1); } break; case 1: if (tmp_field -> type > -1) { widget_set_sensitive (field_i_combo[0], FALSE); widget_set_sensitive (field_i_combo[1], FALSE); field_i_obj[1] = destroy_this_widget (field_i_obj[1]); field_i_obj[1] = gtk_spinner_new (); show_the_widgets (field_i_obj[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[1], field_i_obj[1], TRUE, TRUE, 25); show_the_widgets (field_i_obj[1]); gtk_spinner_start (GTK_SPINNER(field_i_obj[1])); // gdk_threads_add_idle (create_ff_structure, GINT_TO_POINTER(j)); create_ff_structure (j, tmp_field -> type); assist_init = TRUE; } else { show_warning (_("Please select the force field first !"), field_assistant); } break; } } } /*! \fn G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) \brief show classical force field input files preview \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) { GtkWidget * preview = (activef) ? dialogmodal (_("LAMMPS files preview"), GTK_WINDOW(field_assistant)) : dialogmodal (_("DL-POLY files preview"), GTK_WINDOW(field_assistant)); GtkWidget * notebook = gtk_notebook_new (); GtkWidget * scrollsets; GtkWidget * aview; gchar * ff_files[2][3] = {{"CONTROL", "FIELD" , "CONFIG"}, {"LAMMPS.IN", "LAMMPS.DATA", ""}}; int num_files[2] = {3, 2}; int i; for (i=0; i prepare_file[0]) || (i > 0 && tmp_field -> prepare_file[1])) { scrollsets = create_scroll (NULL, 700, 350, GTK_SHADOW_ETCHED_IN); aview = create_text_view (-1, -1, 0, 1, NULL, NULL, NULL); add_container_child (CONTAINER_SCR, scrollsets, aview); if (! activef) { switch (i) { case 0: print_dlp_control (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; case 1: print_dlp_field (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; case 2: print_dlp_config (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; } } else { switch (i) { case 0: break; case 1: print_lammps_atom_file (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; } } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scrollsets, gtk_label_new (ff_files[activef][i])); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (preview), notebook, FALSE, FALSE, 0); if (gtk_assistant_get_current_page (GTK_ASSISTANT (field_assistant)) > MAXDATC && tmp_field -> prepare_file[0]) gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1); run_this_gtk_dialog (preview, G_CALLBACK(run_destroy_dialog), NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) \brief on classical force field assistant apply - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) \brief on classical force field assistant apply - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i; GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd; GError * err = NULL; gboolean result = FALSE; gchar * ff_files[2][3] = {{"CONTROL", "FIELD" , "CONFIG"}, {"LAMMPS.IN", "LAMMPS.DATA", ""}}; int num_files[2] = {3, 2}; if (response_id == GTK_RESPONSE_ACCEPT) { gchar * direname = file_chooser_get_current_folder (chooser); if (direname != NULL) { gchar * filename; gchar * str; gboolean doit[3]; for (i=0; i prepare_file[0]) || (i > 0 && tmp_field -> prepare_file[1])) { filename = g_strdup_printf ("%s/%s", direname, ff_files[activef][i]); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { str = g_strdup_printf (_("%s file found in '%s'\nreplace existing %s file ?"), ff_files[activef][i], direname, ff_files[activef][i]); doit[i] = ask_yes_no (_("Replace file ?"), str, GTK_MESSAGE_QUESTION, field_assistant); g_free (str); } else { doit[i] = TRUE; } } else { doit[i] = FALSE; } } for (i=0; i message), 0, field_assistant); g_error_free (err); } g_free (filename); } } g_free (direname); } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void on_assistant_apply (GtkAssistant * assistant, gpointer data) \brief on classical force field assistant apply - creating the dialog \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ void on_assistant_apply (GtkAssistant * assistant, gpointer data) { gchar * text; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif gchar * ff_type[2] = {"DL-POLY", "LAMMPS"}; text = g_strdup_printf (_("Saving %s input file(s)"), ff_type[activef]); info = create_file_chooser (text, GTK_WINDOW(assistant), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, _("Save")); g_free (text); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_assistant_apply), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_assistant_apply), NULL); // GTK3 Menu Action To Check gboolean i = (tmp_proj -> force_field[activef]) ? TRUE : FALSE; widget_set_sensitive (tmp_view -> color_styles[5], i); widget_set_sensitive (tmp_view -> color_styles[5+ATOM_MAPS], i); #endif } /*! \fn void create_classical_force_field (int p, int f) \brief create classical force field prepare the assistant \param p the target project id \param f 0 = DL-POLY, 1 = LAMMPS */ void create_classical_force_field (int p, int f) { field_assistant = gtk_assistant_new (); gtk_widget_set_size_request (field_assistant, 800, 600); int i, j, k; activef = f; field_color = TRUE; field_object = -1; selected_aspec = -1; opengl_project_changed (p); tmp_proj = get_project_by_id(p); tmp_coord = tmp_proj -> coord; tmp_view = tmp_proj -> modelgl; tmp_fmol = NULL; tmp_fmol = g_malloc0(sizeof*tmp_fmol); gchar * field_type[2] = {"DL-POLY 4", "LAMMPS"}; // Preparing data structure and pointers append_pages = FALSE; if (tmp_proj -> force_field[activef] == NULL) { assist_init = FALSE; tmp_proj -> force_field[activef] = g_malloc0(sizeof*tmp_proj -> force_field[activef]); tmp_proj -> force_field[activef] -> type = -1; tmp_proj -> force_field[activef] -> atom_init = -1; for (i=0; i<2; i++) tmp_proj -> force_field[activef] -> prepare_file[i] = TRUE; if (activef) tmp_proj -> force_field[activef] -> prepare_file[0] = FALSE; } else { assist_init = TRUE; if (tmp_proj -> force_field[activef] -> type > -1) setup_this_force_field (tmp_proj -> force_field[activef] -> type); //tmp_field = duplicate_dlpoly_field (tmp_proj -> force_field[activef]); } tmp_field = tmp_proj -> force_field[activef]; gtk_window_set_resizable (GTK_WINDOW (field_assistant), FALSE); gtk_window_set_modal (GTK_WINDOW (field_assistant), TRUE); gchar * info = g_strdup_printf (_("%s calculation assistant"), field_type[f]); gtk_window_set_title (GTK_WINDOW(field_assistant), info); g_free (info); GtkWidget * intro = create_vbox (BSEP); info = g_strdup_printf (_(" This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point"), field_type[f], tmp_proj -> name); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(info, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); g_free (info); gchar * i_titles[2][2] = {{i18n("Force field: "), i18n("Force field: ")}, {i18n("Initialize force field using: "), i18n("Force field was initialized using: ")}}; for (i=0; i<2; i++) { field_i_box[i] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, field_i_box[i], FALSE, FALSE, 0); j = (i == 0) ? tmp_field -> type + 1 : tmp_field -> atom_init + 1; k = (j) ? 1 : 0; field_i_lab[i] = markup_label(_(i_titles[i][k]), 210, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_lab[i], FALSE, FALSE, 20); field_i_combo[i] = create_combo (); combo_set_active (field_i_combo[i], -1); switch (i) { case 0: for (j=0; j type); break; case 1: for (j=0; j<3; j++) combo_text_append (field_i_combo[i], _(field_init[j])); combo_set_active (field_i_combo[i], tmp_field -> atom_init); break; } widget_set_sensitive (field_i_combo[i], ! k); g_signal_connect (G_OBJECT (field_i_combo[i]), "changed", G_CALLBACK(changed_init_box), GINT_TO_POINTER(i)); field_i_fixed[i] = gtk_fixed_new (); gtk_widget_set_size_request (field_i_fixed[i], 410, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_fixed[i], FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(field_i_fixed[i]), field_i_combo[i], 0, 0); field_i_obj[i] = (k) ? stock_image (APPLY) : stock_image (CANCEL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_obj[i], FALSE, FALSE, 25); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, hbox, FALSE, FALSE, 10); GtkWidget * but = check_button (_("\tDelete the existing force field data and reset the parameters to the default values"), -1, 40, FALSE, G_CALLBACK(clean_field), GINT_TO_POINTER(p)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 85); if (! f) { field_i_prep[0] = check_button (_("\tPrepare the CONTROL file to describe the calculation"), -1, 40, tmp_field -> prepare_file[0], G_CALLBACK(select_field_action), GINT_TO_POINTER(0)); field_i_prep[1] = check_button (_("\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model"), -1, 40, tmp_field -> prepare_file[1], G_CALLBACK(select_field_action), GINT_TO_POINTER(1)); } else { field_i_prep[0] = check_button (_("\tPrepare the LAMMPS Input to describe the calculation"), -1, 40, tmp_field -> prepare_file[0], G_CALLBACK(select_field_action), GINT_TO_POINTER(0)); field_i_prep[1] = check_button (_("\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model"), -1, 40, tmp_field -> prepare_file[1], G_CALLBACK(select_field_action), GINT_TO_POINTER(1)); } for (i=0; i<2; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, hbox, FALSE, FALSE, 0); widget_set_sensitive (field_i_prep[i], assist_init); if (activef) widget_set_sensitive (field_i_prep[0], 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, field_i_prep[i], FALSE, FALSE, 50); } add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 50); gtk_assistant_append_page (GTK_ASSISTANT (field_assistant), intro); info = g_strdup_printf ("%s calculation set-up", field_type[f]); gtk_assistant_set_page_title (GTK_ASSISTANT (field_assistant), intro, info); g_free (info); gtk_assistant_set_page_type (GTK_ASSISTANT (field_assistant), intro, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), intro, assist_init); preview_but = create_button (_("Preview"), IMG_STOCK, EDITF, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_force_field_preview), NULL); gtk_assistant_add_action_widget (GTK_ASSISTANT (field_assistant), preview_but); if (assist_init) { add_classical_assistant_pages (tmp_view -> proj); show_the_widgets (field_assistant); hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); } else { show_the_widgets (field_assistant); hide_the_widgets (preview_but); } gtk_assistant_set_forward_page_func (GTK_ASSISTANT (field_assistant), on_assistant_go_forward, NULL, NULL); g_signal_connect (G_OBJECT (field_assistant), "prepare", G_CALLBACK(on_assistant_prepare), NULL); g_signal_connect (G_OBJECT (field_assistant), "cancel", G_CALLBACK(on_assistant_cancel), NULL); g_signal_connect (G_OBJECT (field_assistant), "close", G_CALLBACK(on_assistant_close), NULL); g_signal_connect (G_OBJECT (field_assistant), "apply", G_CALLBACK(on_assistant_apply), NULL); add_gtk_close_event (field_assistant, G_CALLBACK(on_assistant_cancel_event), NULL); for (i=0; i<2; i++) { saved_label_format[i] = tmp_view -> anim -> last -> img -> acl_format[i]; saved_label_position[i] = tmp_view -> anim -> last -> img -> labels[i].position; tmp_view -> anim -> last -> img -> labels[i].position = 0; tmp_view -> anim -> last -> img -> acl_format[i] = ID_IN_MOLECULE; } //g_debug ("Number of pages in the assitant: %d", gtk_assistant_get_n_pages (GTK_ASSISTANT (field_assistant))); //g_debug ("Active page is: %d", gtk_assistant_get_current_page (GTK_ASSISTANT (fwin))); } atomes_1.3.1/src/calc/dl_poly/dlp_print.c0000664000175000017500000025446015212624223020012 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_print.c * @short Functions to handle the output of the DL-POLY FIELD file \n Functions to handle the output of the DL-POLY CONTROL file \n Functions to handle the output of the DL-POLY CONFIG file \n Functions to fill the structural element(s) tree models in the assistant * @author Sébastien Le Roux */ /* * This file: 'dlp_print.c' * * Contains: * - The functions to handle the output of the DL-POLY FIELD file - The functions to handle the output of the DL-POLY CONTROL file - The functions to handle the output of the DL-POLY CONFIG file - The functions to fill the structural element(s) tree models in the assistant * * List of functions: int get_num_struct_to_print (field_molecule * fmol, int sid); int get_pbc (); gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d); gboolean member_of_atom (field_atom* fat, int id); gboolean print_ana (); void print_field_prop (field_prop * pro, int st, field_molecule * mol); void print_field_struct (field_struct * stru, field_molecule * mol); void print_all_field_struct (field_molecule * mol, int str); void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig); void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet); void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf); void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons); void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell); void print_dlp_atom (GtkTextBuffer * buf, int at, int numat); void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol); void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body); void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b); void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body); void print_dlp_field (GtkTextBuffer * buf); void print_dlp_config (GtkTextBuffer * buf); void print_int (GtkTextBuffer * buf, int data); void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key); void print_float (GtkTextBuffer * buf, double data); void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key); void print_sci (GtkTextBuffer * buf, double data); void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key); void print_string (GtkTextBuffer * buf, gchar * string); void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key); void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key); void print_dlp_control (GtkTextBuffer * buf); */ #include "dlp_field.h" #include "interface.h" extern gboolean in_bond (int at, int bd[2]); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); /*! \fn void print_field_prop (field_prop * pro, int st, field_molecule * mol) \brief print force field property \param pro the field property to print \param st the type of structural element \param mol the target field molecule */ void print_field_prop (field_prop * pro, int st, field_molecule * mol) { int i, j, k, u, v; field_atom* fat; j = struct_id(st+7); #ifdef DEBUG int w; g_debug ("Prop - natomes= %d", j); #endif for (i=0; i aid[i]); #endif if (mol != NULL) { for (k=0; k< mol -> multi; k++) { u = mol -> atoms_id[pro -> aid[i]][k].a; v = mol -> atoms_id[pro -> aid[i]][k].b; fat = get_active_atom (mol -> id, u); if (v > fat -> num) { #ifdef DEBUG g_debug ("********************** BIG BUG BIG BUG BIG BUG **********************"); g_debug (" TO CHEK:: multi= %d:: at.a= %d, at.b= %d", k, u, v); g_debug ("********************** BIG BUG BIG BUG BIG BUG **********************"); #endif } else { #ifdef DEBUG w = fat -> list[v]; g_debug (" multi= %d:: at.a= %d, at.b= %d, real_id= %d", k, u, v, w); #endif } } } } #ifdef DEBUG g_debug ("Prop - key= %d", pro -> key); j = fvalues[activef][st][pro -> key]; for (i=0; i val[i]); } g_debug ("Prop - show= %d", pro -> show); g_debug ("Prop - use= %d", pro -> use); #endif } /*! \fn void print_field_struct (field_struct * stru, field_molecule * mol) \brief print force field structural element \param stru the target field structural element \param mol the target field molecule */ void print_field_struct (field_struct * stru, field_molecule * mol) { #ifdef DEBUG int i; g_debug (" "); g_debug ("Struct - st= %d", stru -> st); g_debug ("Struct - id= %d", stru -> id); g_debug ("Struct - num= %d", stru -> num); g_debug ("Struct - av= %f", stru -> av); g_debug ("Struct - natomes= %d", struct_id(stru -> st+7)); for (i=0; i st+7); i++) { g_debug (" at[%d]= %d", i, stru -> aid[i]); } g_debug ("Default property:: "); #endif print_field_prop (stru -> def, stru -> st, NULL); if (stru -> other != NULL) { #ifdef DEBUG g_debug ("Other property(ies):: "); #endif field_prop * tmp_pr; tmp_pr = stru -> other; print_field_prop (tmp_pr, stru -> st, mol); while (tmp_pr -> next != NULL) { print_field_prop (tmp_pr -> next, stru -> st, mol); tmp_pr = tmp_pr -> next; } } } /*! \fn void print_all_field_struct (field_molecule * mol, int str) \brief print all field structural element(s) \param mol the target field molecule \param str the type of structural element */ void print_all_field_struct (field_molecule * mol, int str) { int i; field_struct * tmp_s; #ifdef DEBUG g_debug (" "); g_debug ("IN MOL:: %d", mol -> id); g_debug ("PRINTING STRUCT:: %d", str); g_debug ("Total Num of Struct %d:: NUM= %d", str, mol -> nstruct[str]); #endif tmp_s = mol -> first_struct[str]; for (i=0; i nstruct[str]; i++) { print_field_struct (tmp_s, mol); if (tmp_s -> next != NULL) tmp_s = tmp_s -> next; } #ifdef DEBUG g_debug ("END STRUCT :: %d", str); #endif } typedef struct imp_inv imp_inv; struct imp_inv { int a; int b; int c; int d; imp_inv * next; imp_inv * prev; }; /*! \fn gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d) \brief print this improper / inversion structure or not (already printed) ? \param inv the improper / inversion structure to check \param di 6 = improper, 7 = inversion \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param d 4th atom id */ gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d) { if (! inv) return TRUE; while (inv) { if (di == 6) { if (inv -> a == a && inv -> d == d) { if (inv -> b == b && inv -> c == c) return FALSE; if (inv -> b == c && inv -> c == b) return FALSE; } } else { if (inv -> a == a && inv -> b == b) return FALSE; /* { if (inv -> b == b && inv -> c == d && inv -> d == c) return FALSE; if (inv -> b == c && inv -> c == b && inv -> d == d) return FALSE; if (inv -> b == c && inv -> c == d && inv -> d == b) return FALSE; if (inv -> b == d && inv -> c == b && inv -> d == c) return FALSE; if (inv -> b == d && inv -> c == c && inv -> d == b) return FALSE; }*/ } inv = inv -> next; } return TRUE; } /*! \fn gboolean member_of_atom (field_atom* fat, int id) \brief is the id atom from the model in target field atom \param fat the target field atom \param id the atom id in the model */ gboolean member_of_atom (field_atom* fat, int id) { int i; for (i=0; i num; i++) { if (tmp_fat -> list[i] == id) return TRUE; } return FALSE; } /*! \fn void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field improper(s)/inversion(s) information \param di 6 = improper(s), 7 = inversion(s) \param buf the GtkTextBuffer to print into, if input print \param dhii the field improper / inversion structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, i, j, k, l, m, n, o, p, q, r, s, t, u, v; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf, * strg; float w; GtkTreeIter di_level; int * ids = allocint (4); imp_inv * first_imp_inv = NULL; imp_inv * this_ii = NULL; for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { if ((tmp_proj -> atoms[0][j].numv > 2 && di == 6) || (tmp_proj -> atoms[0][j].numv == 3 && di == 7)) { a = ids[0] = tmp_fat -> list_id[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { b = ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][j].numv; m++) { if (m != k) { n = tmp_proj -> atoms[0][j].vois[m]; if (tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { c = ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][j].numv; o++) { if (o != k && o != m) { p = tmp_proj -> atoms[0][j].vois[o]; if (tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { d = ids[3] = tmp_proj -> atoms[0][p].fid; if (print_this_imp_inv(first_imp_inv, di, a, b, c, d)) { if (! first_imp_inv) { first_imp_inv = g_malloc0(sizeof*first_imp_inv); this_ii = first_imp_inv; } else { this_ii -> next = g_malloc0(sizeof*this_ii); this_ii -> next -> prev = this_ii; this_ii = this_ii -> next; } this_ii -> a = a; this_ii -> b = b; this_ii -> c = c; this_ii -> d = d; tmp_fprop = get_active_prop_using_atoms (dhii -> other, 4, ids); if (tmp_fprop == NULL) { tmp_fprop = dhii -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { if (di == 6) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][di+2][tmp_fprop -> key], b+1, a+1, c+1, d+1); } else { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][di+2][tmp_fprop -> key], a+1, b+1, c+1, d+1); } print_info (stra, NULL, buf); g_free (stra); for (e=0; e key]; e++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[e]); print_info (stra, NULL, buf); g_free (stra); if (e == 2) { // Print 1-4 electrostatic interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); // Print 1-4 van der Waals interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); } } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", a+1); strb = g_strdup_printf ("%d", b+1); strc = g_strdup_printf ("%d", c+1); strd = g_strdup_printf ("%d", d+1); w = 0.0; for (e=0; e multi; e++) { q = tmp_fmol -> atoms_id[a][e].a; r = tmp_fmol -> atoms_id[a][e].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[b][e].a; r = tmp_fmol -> atoms_id[b][e].b; t = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[c][e].a; r = tmp_fmol -> atoms_id[c][e].b; u = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[d][e].a; r = tmp_fmol -> atoms_id[d][e].b; v = get_active_atom (tmp_fmol -> id, q) -> list[r]; if (di == 6) { w += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][t], & tmp_proj -> atoms[0][u], & tmp_proj -> atoms[0][s], & tmp_proj -> atoms[0][v]).angle; } else { w += inversion_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][s], & tmp_proj -> atoms[0][t], & tmp_proj -> atoms[0][u], & tmp_proj -> atoms[0][v]).angle; } } w /= tmp_fmol -> multi; stre = g_strdup_printf ("%.3f", w); strf = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,di+2,tmp_fprop -> key) ? _(fnames[activef][di+2][tmp_fprop -> key]) : fnames[activef][di+2][tmp_fprop -> key], fkeysw[activef][di+2][tmp_fprop -> key]); strg = parameters_info (di+1, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & di_level, iter); gtk_tree_store_set (store, & di_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, strd, 5, 0, 6, stre, 7, show, 8, tmp_fprop -> use, 9, strf, 10, strg, 11, dhii -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); g_free (strg); } } } } } } } } } } } } } if (first_imp_inv) { this_ii = first_imp_inv; while (this_ii -> next) { this_ii = this_ii -> next; g_free (this_ii -> prev); } g_free (this_ii); } g_free (ids); } /*! \fn void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field dihedral(s) information \param dih 4 = dihderale(s), 5 = dihedral restraint(s) \param buf the GtkTextBuffer to print into, if input print \param dh the field dihedral / dihedral restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf, * strg; float v; GtkTreeIter di_level; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fdt -> id && tmp_fbt -> id && tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } int * ids = allocint (4); for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { a = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[a] = TRUE; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { b = ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { c = ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; d = ids[3] = tmp_proj -> atoms[0][p].fid; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id && (! same_atom || (same_atom && ! already_done[d]))) { tmp_fprop = get_active_prop_using_atoms (dh -> other, 4, ids); if (tmp_fprop == NULL) { tmp_fprop = dh -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][dih+2][tmp_fprop -> key], a+1, b+1, c+1, d+1); print_info (stra, NULL, buf); g_free (stra); for (q=0; q key]; q++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[q]); print_info (stra, NULL, buf); g_free (stra); if (q == 2) { // Print 1-4 electrostatic interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); // Print 1-4 van der Waals interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); } } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", a+1); strb = g_strdup_printf ("%d", b+1); strc = g_strdup_printf ("%d", c+1); strd = g_strdup_printf ("%d", d+1); v = 0.0; for (q=0; q multi; q++) { r = tmp_fmol -> atoms_id[a][q].a; s = tmp_fmol -> atoms_id[a][q].b; e = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[b][q].a; s = tmp_fmol -> atoms_id[b][q].b; f = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[c][q].a; s = tmp_fmol -> atoms_id[c][q].b; g = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[d][q].a; s = tmp_fmol -> atoms_id[d][q].b; h = get_active_atom (tmp_fmol -> id, r) -> list[s]; v += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][e], & tmp_proj -> atoms[0][f], & tmp_proj -> atoms[0][g], & tmp_proj -> atoms[0][h]).angle; } v /= tmp_fmol -> multi; stre = g_strdup_printf ("%.3f", v); strf = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,dih+2,tmp_fprop -> key) ? _(fnames[activef][dih+2][tmp_fprop -> key]) : fnames[activef][dih+2][tmp_fprop -> key], fkeysw[activef][dih+2][tmp_fprop -> key]); strg = parameters_info (dih+1, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & di_level, iter); gtk_tree_store_set (store, & di_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, strd, 5, 0, 6, stre, 7, show, 8, tmp_fprop -> use, 9, strf, 10, strg, 11, dh -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); g_free (strg); } } } } } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field angle(s) information \param ai 2 = angle(s), 3 = angular restraint(s) \param buf the GtkTextBuffer to print into, if input print \param an the field angle / angle restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, u; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf; float v; GtkTreeIter an_level; int * ids = allocint (3); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { k = ids[0] = tmp_proj -> atoms[0][j].fid; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id) { n = ids[1] = tmp_proj -> atoms[0][m].fid; for (o=0; o atoms[0][m].numv; o++) { p = tmp_proj -> atoms[0][m].vois[o]; q = ids[2] = tmp_proj -> atoms[0][p].fid; if (p != j && tmp_proj -> atoms[0][p].faid == tmp_fct -> id && (! same_atom || (same_atom && ! already_done[q]))) { tmp_fprop = get_active_prop_using_atoms (an -> other, 3, ids); if (tmp_fprop == NULL) { tmp_fprop = an -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d",fkeysw[activef][ai+2][tmp_fprop -> key], k+1, n+1, q+1); print_info (stra, NULL, buf); g_free (stra); for (u=0; u key]; u++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[u]); print_info (stra, NULL, buf); g_free (stra); } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", k+1); strb = g_strdup_printf ("%d", n+1); strc = g_strdup_printf ("%d", q+1); v = 0.0; for (u=0; u multi; u++) { a = tmp_fmol -> atoms_id[k][u].a; b = tmp_fmol -> atoms_id[k][u].b; c = get_active_atom (tmp_fmol -> id, a) -> list[b]; d = tmp_fmol -> atoms_id[n][u].a; e = tmp_fmol -> atoms_id[n][u].b; f = get_active_atom (tmp_fmol -> id, d) -> list[e]; e = tmp_fmol -> atoms_id[q][u].a; g = tmp_fmol -> atoms_id[q][u].b; h = get_active_atom (tmp_fmol -> id, e) -> list[g]; v += angle_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][f], & tmp_proj -> atoms[0][h]).angle; } v /= tmp_fmol -> multi; strd = g_strdup_printf ("%.3f", v); stre = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,ai+2,tmp_fprop -> key) ? _(fnames[activef][ai+2][tmp_fprop -> key]) : fnames[activef][ai+2][tmp_fprop -> key], fkeysw[activef][ai+2][tmp_fprop -> key]); strf = parameters_info (ai+1, tmp_fprop -> key, fvars_angle[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & an_level, iter); gtk_tree_store_set (store, & an_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, 0, 5, strd, 6, show, 7, tmp_fprop -> use, 8, stre, 9, strf, 10, an -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); } } } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field bond(s) information \param bi 0 = bond(s), 1 = bond restraint(s) \param buf the GtkTextBuffer to print into, if input print \param bd the field bond / bond restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int i, j, k, l, m, n, o, p, q, r, s, t, u; gboolean show; gchar * stra, * strb, * strc, * strd, * stre; float v; int * ids = allocint (2); GtkTreeIter bd_level; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fbt -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { k = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; n = ids[1] = tmp_proj -> atoms[0][m].fid; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id && (! same_atom || (same_atom && ! already_done[n]))) { tmp_fprop = get_active_prop_using_atoms (bd -> other, 2, ids); if (tmp_fprop == NULL) { tmp_fprop = bd -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d",fkeysw[activef][bi+2][tmp_fprop -> key], k+1, n+1); print_info (stra, NULL, buf); g_free (stra); for (o=0; o key]; o++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[o]); print_info (stra, NULL, buf); g_free (stra); } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", k+1); strb = g_strdup_printf ("%d", n+1); v = 0.0; for (o=0; o multi; o++) { p = tmp_fmol -> atoms_id[k][o].a; q = tmp_fmol -> atoms_id[k][o].b; r = get_active_atom (tmp_fmol -> id, p) -> list[q]; s = tmp_fmol -> atoms_id[n][o].a; t = tmp_fmol -> atoms_id[n][o].b; u = get_active_atom (tmp_fmol -> id, s) -> list[t]; v += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][r], & tmp_proj -> atoms[0][u]).length; } v /= tmp_fmol -> multi; strc = g_strdup_printf ("%.3f", v); strd = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,bi+2,tmp_fprop -> key) ? _(fnames[activef][bi+2][tmp_fprop -> key]) : fnames[activef][bi+2][tmp_fprop -> key], fkeysw[activef][bi+2][tmp_fprop -> key]); stre = parameters_info (bi+1, tmp_fprop -> key, fvars_bond[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & bd_level, iter); gtk_tree_store_set (store, & bd_level, 0, 0, 1, stra, 2, strb, 3, 0, 4, strc, 5, show, 6, tmp_fprop -> use, 7, strd, 8, stre, 9, bd -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig) \brief print force field rigid \param buf the GtkTextBuffer to print into \param rig the field rigid to print */ void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig) { gchar * str; int h, i, j, k, l, m, n; str = g_strdup_printf ("%d\t", rig -> num); j = 1; n = rig -> num; if (rig -> num > 15) { k = rig -> num - 15; l = k / 16; j += l + 1; n = k - l*16; } h = 0; for (i=0; i 1 && i == j-1)) ? n : 15+k; for (m=0; m list[h]+1); h ++; } str = g_strdup_printf ("%s\n", str); } print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet) \brief print force field tethered potential \param buf the GtkTextBuffer to print into \param tet the field tethered potential to print */ void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet) { gchar * str; str = g_strdup_printf ("%4s\t\%d", fkeysw[activef][1][tet -> key], tet -> num); print_info (str, NULL, buf); g_free (str); int i; for (i=0; i key]; i++) { str = g_strdup_printf ("\t%15.10f", tmp_ftet -> val[i]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf) \brief print force field mean force potential \param buf the GtkTextBuffer to print into \param pmf the field PMF to print */ void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf) { gchar * str; int i, j; print_info ("PMF", "bold", buf); str = g_strdup_printf ("\t%f\n", pmf -> length); print_info (str, NULL, buf); g_free (str); for (i=0; i<2; i++) { str = g_strdup_printf ("PMF UNIT %d\n", pmf -> num[i]); print_info (str, NULL, buf); g_free (str); for (j=0; j < pmf -> num[i]; j++) { str = g_strdup_printf ("%d\t%f\n", pmf -> list[i][j]+1, pmf -> weight[i][j]); print_info (str, NULL, buf); g_free (str); } } } /*! \fn void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons) \brief print force field constraint \param buf the GtkTextBuffer to print into \param cons the field constraint to print */ void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons) { gchar * str; str = g_strdup_printf ("%d\t\%d\t%f\n", cons -> ia[0], cons -> ia[1], cons -> length); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell) \brief print force field core shell \param buf the GtkTextBuffer to print into \param fmol the target field molecule \param shell the field shell to print */ void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell) { gchar * str; str = g_strdup_printf ("%d\t\%d\t%f\t%f\n", shell -> ia[0], shell -> ia[1], shell -> k2, shell -> k4); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) \brief print force field atom \param buf the GtkTextBuffer to print into \param at the list id in the target field atom \param numat the atom id in the fragment / molecule */ void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) { gchar * str; if (tmp_fat -> frozen_id[at]) { str = g_strdup_printf ("%8s %15.10f %15.10f %d %d\n", tmp_fat -> name, tmp_fat -> mass, tmp_fat -> charge, numat, 1); } else { str = g_strdup_printf ("%8s %15.10f %15.10f %d\n", tmp_fat -> name, tmp_fat -> mass, tmp_fat -> charge, numat); } print_info (str, NULL, buf); g_free (str); } /*! \fn int get_num_struct_to_print (field_molecule * fmol, int sid) \brief find the number of structural element(s) to print \param fmol the target field molecule \param sid the type of structural element */ int get_num_struct_to_print (field_molecule * fmol, int sid) { int i = 0; tmp_fstr = fmol -> first_struct[sid]; while (tmp_fstr) { if (tmp_fstr -> def -> use) { i += tmp_fstr -> num; } else if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (tmp_fprop -> use) i ++; tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } return i; } /*! \fn void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol) \brief print force field molecule \param buf the GtkTextBuffer to print into \param fmol the field molecule to print */ void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol) { gchar * str; str = g_strdup_printf ("%s", fmol -> name); print_info (str, "bold_orange", buf); g_free (str); print_info ("\nNUMMOLS\t", "bold", buf); str = g_strdup_printf ("%d", fmol -> multi); print_info (str, "bold_green", buf); g_free (str); int i, j, k, l, m, n, o, p; j = 0; tmp_fat = fmol -> first_atom; for (i=0; i atoms; i++) { j += tmp_fat -> num; if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } j /= fmol -> multi; if (j != fmol -> mol -> natoms) g_debug ("PRINT:: Error the number of atom(s) is wrong ?!"); print_info ("\nATOMS\t", "bold", buf); str = g_strdup_printf ("%d\n", fmol -> mol -> natoms); print_info (str, "bold_blue", buf); g_free (str); for (i=0; i < fmol -> mol -> natoms ; i+=(m-i)) { j = fmol -> atoms_id[i][0].a; tmp_fat = get_active_atom (fmol -> id, j); k = fmol -> atoms_id[i][0].b; l = tmp_fat -> frozen_id[k]; for (m=i+1; m mol -> natoms; m++) { n = fmol -> atoms_id[m][0].a; o = fmol -> atoms_id[m][0].b; tmp_fbt = get_active_atom (fmol -> id, n); p = tmp_fbt -> frozen_id[o]; if (j != n || l != p) break; } print_dlp_atom (buf, k, m-i); } // Shells int ncs = 0; if (tmp_field -> afp[10]) { tmp_fshell = fmol -> first_shell; while (tmp_fshell) { if (tmp_fshell -> use) { if (tmp_fshell -> ia[0] && tmp_fshell -> ia[1]) ncs ++; } tmp_fshell = tmp_fshell -> next; } } if (ncs) { print_info ("SHELLS\t", "bold", buf); str = g_strdup_printf ("%d\n", ncs); print_info (str, "bold", buf); g_free (str); tmp_fshell = fmol -> first_shell; while (tmp_fshell) { if (tmp_fshell -> use && tmp_fshell -> ia[0] && tmp_fshell -> ia[1]) { print_dlp_shell (buf, fmol, tmp_fshell); } tmp_fshell = tmp_fshell -> next; } } // Constraints if (tmp_field -> afp[11]) { j = 0; tmp_fcons = fmol -> first_constraint; while (tmp_fcons) { if (tmp_fcons -> use) j ++; tmp_fcons = tmp_fcons -> next; } if (j > 0) { print_info ("CONSTRAINTS\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_fcons = fmol -> first_constraint; while (tmp_fcons) { if (tmp_fcons -> use) print_dlp_cons (buf, tmp_fcons); tmp_fcons = tmp_fcons -> next; } } } // PMFs if (tmp_field -> afp[12]) { tmp_fpmf = fmol -> first_pmf; while (tmp_fpmf) { if (tmp_fpmf -> use) { print_dlp_pmf (buf, tmp_fpmf); break; } tmp_fpmf = tmp_fpmf -> next; } } // Rigid if (tmp_field -> afp[13]) { j = 0; k = 0; tmp_frig = fmol -> first_rigid; while (tmp_frig) { if (tmp_frig -> use) j ++; tmp_frig = tmp_frig -> next; } if (j > 0) { print_info ("RIGID\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_frig = fmol -> first_rigid; while (tmp_frig) { if (tmp_frig -> use) { print_dlp_rigid (buf, tmp_frig); } tmp_frig = tmp_frig -> next; } } } // Tethering if (tmp_field -> afp[14]) { j = 0; tmp_ftet = fmol -> first_tethered; while (tmp_ftet) { if (tmp_ftet -> use && tmp_ftet -> num) j ++; tmp_ftet = tmp_ftet -> next; } if (j > 0) { print_info ("TETH\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_ftet = fmol -> first_tethered; while (tmp_ftet) { if (tmp_ftet -> use) print_dlp_tet (buf, tmp_ftet); tmp_ftet = tmp_ftet -> next; } } } gchar * str_title[8] = {"BONDS ", "BONDS ", "ANGLES ", "ANGLES ", "DIHEDRALS ", "DIHEDRALS ", "DIHEDRALS ", "INVERSIONS "}; gboolean doprint; for (i=0; i<8; i++) { if (tmp_field -> afp[i+15]) { j = get_num_struct_to_print (fmol, i); if ((i == 0 || i == 2 || i == 4) && tmp_field -> afp[i+16]) { // To add the number of constraints j += get_num_struct_to_print (fmol, i+1); } if ((i == 4 && tmp_field -> afp[i+17]) || (i == 5 && ! tmp_field -> afp[i+14] && tmp_field -> afp[i+16])) { // To add the number of impropers k = (i == 4) ? 2 : 1; j += get_num_struct_to_print (fmol, i+k); } doprint = (i == 0 || i == 2 || i == 4 || i == 7) ? TRUE : FALSE; if ((i == 1 || i == 3 || i == 5) && ! tmp_field -> afp[i+14]) { doprint = TRUE; } else if (i == 5 && ! tmp_field -> afp[i+14]) { doprint = TRUE; } else if (i == 6 && ! tmp_field -> afp[i+13] && ! tmp_field -> afp[i+14]) { doprint = TRUE; } if (j > 0) { if (doprint) { print_info (str_title[i], "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold_blue", buf); g_free (str); } tmp_fstr = fmol -> first_struct[i]; while (tmp_fstr) { tmp_fat = get_active_atom (fmol -> id, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (fmol -> id, tmp_fstr -> aid[1]); if (i > 1) tmp_fct = get_active_atom (fmol -> id, tmp_fstr -> aid[2]); if (i > 3) tmp_fdt = get_active_atom (fmol -> id, tmp_fstr -> aid[3]); if (i == 0 || i == 1) print_dlp_bond (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 2 || i == 3) print_dlp_angle (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 4 || i == 5) print_dlp_dihedral (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 6 || i == 7) print_dlp_improper_inversion (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); tmp_fstr = tmp_fstr -> next; } } } } print_info ("FINISH\n", "bold_orange", buf); } /*! \fn void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body) \brief print force field non bonded potential \param buf the GtkTextBuffer to print into \param body the non bonded potential to print */ void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body) { gchar * str; int i, j; j = body_at (body -> bd); if (! body -> bd) { for (i=0; i ma[i][0], body -> a[i][0]) -> name), NULL, buf); } str = g_strdup_printf ("%4s",fkeysw[activef][10+ body -> bd][body -> key]); print_info (str, NULL, buf); g_free (str); for (i=0; i bd][body -> key]; i++) { str = g_strdup_printf ("\t%15.10f", body -> val[i]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b) \brief print Tersoff potential cross term \param buf the GtkTextBuffer to print into \param body_a 1st non bonded potential \param body_b 2nd non bonded potential */ void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b) { gchar * str; int j; print_info (g_strdup_printf ("%8s\t", get_active_atom(body_a -> ma[0][0], body_a -> a[0][0]) -> name), NULL, buf); print_info (g_strdup_printf ("%8s\t", get_active_atom(body_b -> ma[0][0], body_b -> a[0][0]) -> name), NULL, buf); for (j=0; j<3; j++) { str = g_strdup_printf ("%15.10f", tmp_field -> cross[body_a -> id][body_b -> id][j]); print_info (str, NULL, buf); g_free (str); if (j<2) print_info ("\t", NULL, buf); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body) \brief print force field Tersoff potential \param buf the GtkTextBuffer to print into \param body the non bonded (Tersoff potential) to print */ void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body) { gchar * str; int i, j, k; int num[2]={2, 3}; int nc[2][3]={{5, 6, 3}, {5, 6, 5}}; j = body_at (body -> bd); k = 0; for (i=0; i key]; i++) { if (i==0) { print_info (g_strdup_printf ("%8s\t", get_active_atom(body -> ma[0][0], body -> a[0][0]) -> name), NULL, buf); str = g_strdup_printf ("%4s\t",fkeysw[activef][10+body -> bd][body -> key]); print_info (str, NULL, buf); g_free (str); } else { print_info (" \t \t", NULL, buf); } for (j=0; j key][i]; j++) { if (j > 0) print_info ("\t", NULL, buf); str = g_strdup_printf ("%15.10f", body -> val[j+k]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); k += nc[body -> key][i]; } if (! body -> key) { field_nth_body * tmp_fbo; tmp_fbo = tmp_field -> first_body[2]; while (tmp_fbo) { print_dlp_tersoff_cross (buf, body, tmp_fbo); tmp_fbo = tmp_fbo -> next; } } } /*! \fn void print_dlp_field (GtkTextBuffer * buf) \brief print DL-POLY classical force field \param buf the GtkTextBuffer to print into */ void print_dlp_field (GtkTextBuffer * buf) { int i, j; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf (_("# This file was created using %s\n"), PACKAGE); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (_("# %s contains:\n"), prepare_for_title(tmp_proj -> name)); print_info (str, NULL, buf); g_free (str); i = 0; for (j=0; j modelfc -> mol_by_step[0]; j++) { i += tmp_proj -> modelfc -> mols[0][j].multiplicity; } str = g_strdup_printf (_("# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n"), tmp_proj -> natomes, i, tmp_proj -> modelfc -> mol_by_step[0]); print_info (str, NULL, buf); g_free (str); print_info (_("# Energy unit:\n"), NULL, buf); print_info ("UNITS ", "bold", buf); str = g_strdup_printf ("%s\n", fkeysw[activef][0][tmp_field -> energy_unit]); print_info (str, "bold_green", buf); g_free (str); print_info (_("# Number of field molecules:\n"), NULL, buf); print_info ("MOLECULES ", "bold", buf); str = g_strdup_printf ("%d\n", tmp_field -> molecules); print_info (str, "bold_red", buf); g_free (str); tmp_fmol = tmp_field -> first_molecule; for (i=0; i molecules; i++) { str = g_strdup_printf (_("# Begin molecule %d\n"), i+1); print_info (str, NULL, buf); g_free (str); print_dlp_molecule (buf, tmp_fmol); str = g_strdup_printf (_("# End molecule %d\n"), i+1); print_info (str, NULL, buf); g_free (str); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } // Non bonded gchar * nd_title[5] = {"VDW", "METAL", "TERSOFF", "TBP", "FBP"}; gchar * com_ndb[5] = {i18n("van der Walls pair"), i18n("metal"), "Tersoff", i18n("three-body"), i18n("four-body")}; for (i=0; i<5; i++) { if (tmp_field -> afp[i+23]) { j=0; tmp_fbody = tmp_field -> first_body[i]; while (tmp_fbody) { if (tmp_fbody -> use) j++; tmp_fbody = tmp_fbody -> next; } if (j > 0) { str = g_strdup_printf (_("# Non-bonded: %s potential(s)\n"), (i != 2) ? _(com_ndb[i]) : com_ndb[i]); print_info (str, NULL, buf); g_free (str); print_info (nd_title[i], "bold", buf); str = g_strdup_printf (" %d\n", j); print_info (str, "bold_red", buf); tmp_fbody = tmp_field -> first_body[i]; while (tmp_fbody) { if (tmp_fbody -> use) { if (i == 2) { print_dlp_tersoff (buf, tmp_fbody); } else { print_dlp_body (buf, tmp_fbody); } } tmp_fbody = tmp_fbody -> next; } } } } // External fields if (tmp_field -> afp[28]) { i = 0; tmp_fext = tmp_field -> first_external; while (tmp_fext) { if (tmp_fext -> use) i ++; tmp_fext = tmp_fext -> next; } if (i == 1) { print_info ("EXTERN", "bold", buf); tmp_fext = tmp_field -> first_external; while (tmp_fext) { if (tmp_fext -> use) { str = g_strdup_printf ("\n%4s",fkeysw[activef][15][tmp_fext -> key]); print_info (str, NULL, buf); g_free (str); for (j=0; j key]; j++) { print_info (g_strdup_printf ("\t%15.10f", tmp_fext -> val[j]), NULL, buf); } print_info ("\n", NULL, buf); break; } tmp_fext = tmp_fext -> next; } } } print_info ("CLOSE", "bold", buf); } /*! \fn int get_pbc () \brief get the PBC DL-POLY lattice type */ int get_pbc () { box_info * box = & tmp_proj -> cell.box[0]; if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2]) { return 1; } else { return 2; } } else if (box -> vect[0][1] == 0.0 && box -> vect[0][2] == 0.0 && box -> vect[1][0] == 0.0 && box -> vect[1][2] == 0.0 && box -> vect[2][0] == 0.0 && box -> vect[2][1] == 0.0) { if (box -> vect[0][0] == box -> vect[1][1] && box -> vect[0][0] == box -> vect[2][2]) { return 1; } else { return 2; } } else { return 3; } } /*! \fn void print_dlp_config (GtkTextBuffer * buf) \brief print DL-POLY CONFIG file \param buf the GtkTextBuffer to print into */ void print_dlp_config (GtkTextBuffer * buf) { int h, i, j, k, l, m, n; int pbc; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf (_("# DL-POLY CONFIG file created by %s, %s - %d atoms\n"), PACKAGE, prepare_for_title(tmp_proj -> name), tmp_proj -> natomes); print_info (str, "bold", buf); g_free (str); if (tmp_proj -> cell.pbc) { pbc = get_pbc (); } else { pbc = 0; } str = g_strdup_printf ("%d", 0); print_info (str, "bold_red", buf); g_free (str); str = g_strdup_printf ("\t%d", pbc); print_info (str, "bold_green", buf); g_free (str); str = g_strdup_printf ("\t%d\n", tmp_proj -> natomes); print_info (str, "bold_blue", buf); g_free (str); if (pbc > 0) { for (i=0; i<3; i++) { str = g_strdup_printf ("%f\t%f\t%f\n", tmp_proj -> cell.box[0].vect[i][0], tmp_proj -> cell.box[0].vect[i][1], tmp_proj -> cell.box[0].vect[i][2]); print_info (str, NULL, buf); g_free (str); } } tmp_fmol = tmp_field -> first_molecule; h = 0; for (i=0; i molecules; i++) { for (j=0; j multi; j++) { for (k=0; k mol -> natoms; k++) { l = tmp_fmol -> atoms_id[k][j].a; m = tmp_fmol -> atoms_id[k][j].b; tmp_fat = get_active_atom (tmp_fmol -> id, l); str = g_strdup_printf ("%8s", tmp_fat -> name); print_info (str, "bold", buf); g_free (str); if (tmp_field -> sys_opts[2]) { print_info ("\n", NULL, buf); } else { str = g_strdup_printf (" %d\n", h+1); print_info (str, "bold_red", buf); g_free (str); h ++; } n = tmp_fat -> list[m]; str = g_strdup_printf ("%f\t%f\t%f\n", tmp_proj -> atoms[0][n].x, tmp_proj -> atoms[0][n].y, tmp_proj -> atoms[0][n].z); print_info (str, NULL, buf); g_free (str); } } if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } } gchar * ens_keyw[4] = {"nve", "nvt", "npt", "nst"}; gchar * thermo_keyw[10] = {"evans", "lang", "ander", "ber", "hoover", "gst", "dpd", "mtk", "ttm", "inhomo"}; gchar * pseudo_thermo[3] = {"langevin", "gauss", "direct"}; gchar * area_keyw[5]={"area", "tens", "tens", "orth", "orth"}; gchar * md_keyw[4]={"temp ", "steps ", "integrat ", "pres "}; gchar * md_text[4]={i18n("# Target temperature in K\n"), i18n("# Number of MD steps\n"), i18n("# Integration time step in ps\n"), i18n("# Target presssure in k atms\n")}; gchar * min_key[3]={"force", "energy", "distance"}; //gchar * md_legend[3]={i18n("# Target temperature"), i18n("# Number of MD steps"), i18n("# MD time step d(t)")}; /*! \fn gboolean print_ana () \brief determine if the analysis information section is required */ gboolean print_ana () { if ((int)tmp_field -> ana_opts[0] || (int)tmp_field -> ana_opts[4] || (int)tmp_field -> ana_opts[8] || (int)tmp_field -> ana_opts[11] || (int)tmp_field -> ana_opts[14]) { return TRUE; } else { return FALSE; } } extern gchar * eval_m[10]; extern gchar * eval_vdw[6]; extern gchar * io_rw_m[4]; extern gchar * io_pres[2]; gchar * elec_key[10]={"coul ", "distan ", "ewald precision ", "ewald ", "reaction ", "reaction damp ", "reaction precision ", "shift ", "shift damp ", "shift precision "}; gchar * vdw_key[6]={"lor ", "fend", "hoge", "halg", "tang", "func"}; gchar * sys_info[8]={i18n("\n# Ignore particle indices from CONFIG file and set indices by order of reading"), i18n("\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters"), i18n("\n# Skip detailed topology reporting when reading FIELD file"), i18n("\n# Ignore center of mass momentum removal during the simulation"), i18n("\n# Tolerance for the relaxed shell model\n"), i18n("\n# Subcelling threshold density of particle per link cell\n"), i18n("\n# Create an expanded version of the current model\n"), i18n("\n# Restart job from previous run: ")}; gchar * sys_key[8]={NULL, NULL, NULL, NULL, "rlxtol ", "subcell ", "nfold ", "restart "}; gchar * sys_string[8]={"ind", "str", "top", "vom", NULL, NULL, NULL, NULL}; gchar * rest_inf[3]={i18n("\n# Continue current simulation - require REVOLD file"), i18n("\n# Start new simulation from older run without temperature reset"), i18n("\n# Start new simulation from older run with temperature reset")}; gchar * rest_key[3]={NULL, "noscale", "scale"}; gchar * time_inf[2]={i18n("\n\n# Set job time to "), i18n("\n\n# Set job closure time to ")}; gchar * time_key[2]={"job time ", "close time "}; gchar * io_inf[2]={i18n("\n# I/O read interface, with:\n"), i18n("\n# I/O write interface, with:\n")}; gchar * io_key[2]={"\nio read ", "\nio writ "}; gchar * io_meth[4]={"mpiio", "direct", "master", "netcdf"}; gchar * io_pec[2]={"off", "on"}; gchar * io_typ[2]={"sorted", "unsorted"}; /*! \fn void print_int (GtkTextBuffer * buf, int data) \brief print integer value \param buf the GtkTextBuffer to print into \param data the integer value to print */ void print_int (GtkTextBuffer * buf, int data) { gchar * str = g_strdup_printf (" %d", data); print_info (str, "bold_blue", buf); g_free (str); } /*! \fn void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print integer value \param buf the GtkTextBuffer to print into \param data the integer value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%d", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); g_free (str); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_int (buf, data); } /*! \fn void print_float (GtkTextBuffer * buf, double data) \brief print float value \param buf the GtkTextBuffer to print into \param data the float value to print */ void print_float (GtkTextBuffer * buf, double data) { gchar * str = g_strdup_printf (" %f", data); print_info (str, "bold_red", buf); g_free (str); } /*! \fn void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print float value \param buf the GtkTextBuffer to print into \param data the float value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%f", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); g_free (str); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_float (buf, data); } /*! \fn void print_sci (GtkTextBuffer * buf, double data) \brief print float in scientific format \param buf the GtkTextBuffer to print into \param data the float value to print */ void print_sci (GtkTextBuffer * buf, double data) { gchar * str = g_strdup_printf (" %e", data); print_info (str, "bold_orange", buf); g_free (str); } /*! \fn void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print float value in scientific format \param buf the GtkTextBuffer to print into \param data the float value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%e", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_info (str, "bold_orange", buf); g_free (str); } /*! \fn void print_string (GtkTextBuffer * buf, gchar * string) \brief print string \param buf the GtkTextBuffer to print into \param string the string to print */ void print_string (GtkTextBuffer * buf, gchar * string) { print_info (" ", NULL, buf); print_info (string, "bold_green", buf); } /*! \fn void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print string \param buf the GtkTextBuffer to print into \param string the string to print \param info_a 1st string to print, if any \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) { if (info_a != NULL) print_info (info_a, NULL, buf); if (info_b != NULL) print_info (info_b, NULL, buf); if (info_a != NULL) print_info ("\n", NULL, buf); print_info (key, "bold", buf); if (string) print_string (buf, string); } /*! \fn void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) \brief print CONTROL file print key \param buf the GtkTextBuffer to print into \param info the information string, if any \param key DL-POLY key to print */ void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) { if (info != NULL) print_info (info, NULL, buf); print_info (key, "bold", buf); } /*! \fn void print_dlp_control (GtkTextBuffer * buf) \brief print DL-POLY CONTROL file \param buf the GtkTextBuffer to print into */ void print_dlp_control (GtkTextBuffer * buf) { int i, j, k; gchar * str; gchar * str_a, * str_b, * str_c; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf (_("# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n"), PACKAGE, prepare_for_title(tmp_proj -> name), tmp_proj -> natomes); print_info (str, "bold", buf); g_free (str); if (tmp_field -> sys_opts[0] != 1.0) { print_control_float (buf, tmp_field -> sys_opts[0], _("# Relative dielectric constant = "), NULL, "eps "); } if (tmp_field -> sys_opts[1] != 0.0) { print_control_float (buf, tmp_field -> sys_opts[1], _("\n# Allowing local variation of system density of: "), " \%", "densvar "); } for (i=2; i<10; i++) { j = (i < 7) ? i : (i == 7) ? 8 : (i == 8) ? 10 : 14; if (tmp_field -> sys_opts[j] == 1.0) { if (i == 9) { k = (int)tmp_field -> sys_opts[15]; print_control_string (buf, rest_key[k], _(sys_info[i-2]), _(rest_inf[k]), sys_key[i-2]); } else if (i < 6) { print_control_string (buf, sys_string[i-2], _(sys_info[i-2]), NULL, "no "); } else { print_control_key (buf, _(sys_info[i-2]), sys_key[i-2]); } if (i == 6 || i == 7) { print_float (buf, tmp_field -> sys_opts[j+1]); } else if (i == 8) { for (k=1; k<4; k++) print_int (buf, (int)tmp_field -> sys_opts[j+k]); } print_info ("\n", NULL, buf); } } if (tmp_field -> vdw_opts[0] == 1.0) { print_info (_("\n# Non-bonded short range interactions - type vdW"), NULL, buf); print_control_float (buf, tmp_field -> vdw_opts[1], _("\n# van der Waals short range cutoff = "), " Ang.", "rvdw "); if (tmp_field -> vdw_opts[2] == 1.0) { print_control_string (buf, "direct", _("\n# Enforce direct calculation of vdW interactions"), _("\n# Do not work with system using tabulated potentials"), "vdw "); } if (tmp_field -> vdw_opts[3] == 1.0) { print_control_string (buf, "shift", _("\n# Apply force-shifting for vdW interactions"), NULL, "vdw "); } if (tmp_field -> vdw_opts[4] == 1.0) { print_control_string (buf, vdw_key[(int)tmp_field -> vdw_opts[5]], _("\n# Apply mixing rule of type: "), eval_vdw[(int)tmp_field -> vdw_opts[5]], "vdw mix "); } } else { print_control_string (buf, "vdw", _("\n# No van der Waals interactions (short range)"), NULL, "no "); } print_info ("\n\n", NULL, buf); if (tmp_field -> elec_opts[0] == 1.0) { print_info (_("\n# Non-bonded long range interactions"), NULL, buf); print_control_float (buf, tmp_field -> elec_opts[1], _("\n# Electrostatics long range cutoff = "), " Ang.", "cut "); if (tmp_field -> elec_opts[2] == 1.0) { print_control_float (buf, tmp_field -> elec_opts[3], _("\n# Use optional padding to the cutoff = "), " Ang.", "pad "); } if (tmp_field -> elec_opts[4] == 1.0) { print_control_key (buf, _("\n# Use extended coulombic exclusion\n"), "exclu"); } print_info (_("\n# Electrostatics calculated using "), NULL, buf); print_info (eval_m[(int)tmp_field -> elec_opts[5]], NULL, buf); print_info ("\n", NULL, buf); print_info (elec_key[(int)tmp_field -> elec_opts[5]], "bold", buf); if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { print_sci (buf, tmp_field -> elec_opts[6]); } else if (tmp_field -> elec_opts[5] == 3.0) { print_float (buf, tmp_field -> elec_opts[6]); for (k=7; k<10; k++) print_int (buf, (int)tmp_field -> elec_opts[k]); } else if (tmp_field -> elec_opts[5] == 5.0 || tmp_field -> elec_opts[5] == 8.0) { print_float (buf, tmp_field -> elec_opts[6]); } if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 3.0) { print_control_int (buf, (int)tmp_field -> elec_opts[10], _("\n# Evaluate k space contribution to the Ewald sum every: "), _(" MD step(s)"), "ewald evalu "); } } else { print_control_string (buf, "elec", _("# No electrostatics interactions (long range)"), NULL, "no "); } print_info ("\n", NULL, buf); if (tmp_field -> met_opts[0] == 1.0 || tmp_field -> met_opts[1] == 1.0) { print_info (_("\n# Metallic interactions"), NULL, buf); } if (tmp_field -> met_opts[0] == 1.0) { print_control_string (buf, "direct", _("\n# Enforce direct calculation of metal interactions"), _("\n# This does not work with metal alloy systems using the *EAM* potentials"), "metal "); } if (tmp_field -> met_opts[1] == 1.0) { print_control_string (buf, "sqrtrho", _("\n# Switch the TABEAM default embedding functions, F, from F(Ï�) to F(√Ï�)"), NULL, "metal "); } if (tmp_field -> met_opts[0] == 1.0 || tmp_field -> met_opts[1] == 1.0) print_info ("\n", NULL, buf); print_control_string (buf, ens_keyw[tmp_field -> ensemble], _("\n# Thermostat information"), NULL, "ensemble "); if (tmp_field -> ensemble) { switch (tmp_field -> ensemble) { case 1: i = (tmp_field -> thermostat > 6) ? tmp_field -> thermostat + 1 : tmp_field -> thermostat; break; default: i = (! tmp_field -> thermostat) ? 1 : (tmp_field -> thermostat == 3) ? 7 : tmp_field -> thermostat + 2; break; } print_string (buf, thermo_keyw[i]); if (tmp_field -> ensemble > 1 || tmp_field -> thermostat) { if (tmp_field -> ensemble == 1 && tmp_field -> thermostat == 6) { str = g_strdup_printf ("s%1d", (int)tmp_field -> thermo_opts[0]+1); print_string (buf, str); g_free (str); print_float (buf, tmp_field -> thermo_opts[1]); } else { if (tmp_field -> ensemble == 3 && tmp_field -> thermo_opts[3] > 0.0) print_string (buf, "Q"); print_float (buf, tmp_field -> thermo_opts[0]); if (tmp_field -> ensemble != 1 || (tmp_field -> thermostat == 2 || tmp_field -> thermostat == 5 || tmp_field -> thermostat > 6)) { print_float (buf, tmp_field -> thermo_opts[1]); if (tmp_field -> ensemble == 1 && tmp_field -> thermostat > 6) print_float (buf, tmp_field -> thermo_opts[2]); } } if (tmp_field -> ensemble == 3 && tmp_field -> thermo_opts[3] > 0.0) { i = (int)tmp_field -> thermo_opts[3] - 1; print_string (buf, area_keyw[i]); if (tmp_field -> thermo_opts[3] == 2.0) print_float (buf, tmp_field -> thermo_opts[4]); } if (tmp_field -> thermo_opts[5] == 1.0) print_string (buf, "semi"); } } print_info ("\n\n", NULL, buf); if (tmp_field -> thermo_opts[6] == 1.0) { print_info (_("# Attach a pseudo thermal bath with:\n"), NULL, buf); if (tmp_field -> thermo_opts[7] > 0.0) { str = g_strdup_printf (_("# - thermostat of type: %s\n"), pseudo_thermo[(int)tmp_field -> thermo_opts[7] - 1]); } else { str = g_strdup_printf (_("# - thermostats of type Langevin and Direct applied successively\n")); } print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (_("# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n"), tmp_field -> thermo_opts[8]); print_info (str, NULL, buf); g_free (str); if (tmp_field -> thermo_opts[9] > 0.0) { str = g_strdup_printf (_("# - Target temperature: %f K\n"), tmp_field -> thermo_opts[9]); print_info (str, NULL, buf); g_free (str); } else { print_info (_("# - Target temperature: system target temperature\n"), NULL, buf); } print_info ("pseudo ", "bold", buf); if (tmp_field -> thermo_opts[7] > 0.0) { print_info (pseudo_thermo[(int)tmp_field -> thermo_opts[7] - 1], "bold_green", buf); } print_float (buf, tmp_field -> thermo_opts[8]); if (tmp_field -> thermo_opts[9] > 0.0) print_float (buf, tmp_field -> thermo_opts[9]); print_info ("\n\n", NULL, buf); } // MD information print_info (_("# Molecular dynamics information\n"), NULL, buf); for (i=0; i<2+(int)tmp_field -> md_opts[1]; i++) { print_control_key (buf, _(md_text[i]), md_keyw[i]); switch (i) { case 0: print_float (buf, tmp_field -> md_opts[0]); if (tmp_field -> ensemble > 1) { print_info ("\n", NULL, buf); print_info (md_keyw[3], "bold", buf); print_float (buf, tmp_field -> md_opts[5]); } break; case 1: print_int (buf, (int)tmp_field -> md_opts[2]); break; case 2: print_info ("leapfrog", "bold_green", buf); break; } print_info ("\n", NULL, buf); } if (tmp_field -> md_opts[3] == 1.0) { print_control_float (buf, tmp_field -> md_opts[4], _("# Variable time step, initial time step = "), " ps", "variable timestep "); print_control_float (buf, tmp_field -> md_opts[6], _("\n# Maximum time step allowed = "), " ps", "mxstep "); print_control_float (buf, tmp_field -> md_opts[7], _("\n# Maximum move allowed = "), " Ang.", "maxdis "); print_control_float (buf, tmp_field -> md_opts[8], _("\n# Minimum move allowed = "), " Ang.", "mindis "); } else { print_control_float (buf, tmp_field -> md_opts[4], _("# MD time step = "), " fs", "timestep "); } print_control_int (buf, (int)tmp_field -> md_opts[9], _("\n# Shake / Rattle iterations limit: "), _(" cycle(s)"), "mxshak "); print_control_sci (buf, tmp_field -> md_opts[10], _("\n# Shake / Rattle tolerance: "), NULL, "shake "); if (tmp_field -> md_opts[1] == 1.0) { print_control_int (buf, (int)tmp_field -> md_opts[11], _("\n# FIQA iterations limit: "), _(" cycle(s)"), "mxquat "); print_control_sci (buf, tmp_field -> md_opts[12], _("\n# Quaternion tolerance: "), NULL, "quater "); } if (tmp_field -> md_opts[13] == 1.0) { print_info (_("\n\n# Initiate impact on particle\n# - with particle index: "), NULL, buf); str = g_strdup_printf ("%d", (int)tmp_field -> md_opts[14]); print_info (str, NULL, buf); print_info (_("\n# - at MD step: "), NULL, buf); str = g_strdup_printf ("%d", (int)tmp_field -> md_opts[15]); print_info (str, NULL, buf); g_free (str); print_info (_("\n# - with energy (k eV): "), NULL, buf); str = g_strdup_printf ("%f", tmp_field -> md_opts[16]); print_info (str, NULL, buf); g_free (str); print_info (_("\n# - direction (x, y, z): "), NULL, buf); str = g_strdup_printf ("%f %f %f", tmp_field -> md_opts[17], tmp_field -> md_opts[18], tmp_field -> md_opts[19]); print_info (str, NULL, buf); g_free (str); print_info ("\n", NULL, buf); print_info ("impact ", "bold", buf); for (k=14; k<16; k++) print_int (buf, (int)tmp_field -> md_opts[k]); for (k=16; k<20; k++) print_float (buf, tmp_field -> md_opts[k]); } if (tmp_field -> equi_opts[0] == 1.0) { // Equilibration information print_info (_("\n\n# Equilibration information"), NULL, buf); print_control_int (buf, (int)tmp_field -> equi_opts[1], _("\n# Equilibrate during: "), _(" MD step(s)"), "equil "); if (tmp_field -> equi_opts[2] == 1.0) { print_control_int (buf, (int)tmp_field -> equi_opts[3], _("\n# During equilibration: rescale system temperature every: "), _(" MD step(s)"), "scale "); } if (tmp_field -> equi_opts[4] == 1.0) { print_control_float (buf, tmp_field -> equi_opts[5], _("\n# During equilibration: cap forces, with fmax= "), " Kb T Ang-1", "cap "); } if (tmp_field -> equi_opts[6] == 1.0) { print_control_int (buf, (int)tmp_field -> equi_opts[7], _("\n# During equilibration: resample the instantaneous momenta distribution every: "), _(" MD step(s)"), "regaus "); } if (tmp_field -> equi_opts[8] == 1.0) { str = g_strdup_printf (_("\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n"), (int)tmp_field -> equi_opts[11], min_key[(int)tmp_field -> equi_opts[9]], min_key[(int)tmp_field -> equi_opts[9]], tmp_field -> equi_opts[10]); print_control_key (buf, str, "minim "); g_free (str); print_string (buf, min_key[(int)tmp_field -> equi_opts[9]]); print_int (buf, (int)tmp_field -> equi_opts[11]); print_float (buf, tmp_field -> equi_opts[10]); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[12] == 1.0) { str = g_strdup_printf (_("# At the start of the equilibration: minimize %s with target %s= %f\n"), min_key[(int)tmp_field -> equi_opts[13]], min_key[(int)tmp_field -> equi_opts[13]], tmp_field -> equi_opts[14]); print_control_key (buf, str, "optim "); g_free (str); print_string (buf, min_key[(int)tmp_field -> equi_opts[13]]); print_float (buf, tmp_field -> equi_opts[14]); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[15] == 1.0) { print_control_key (buf, _("# During equilibration: perform a zero temperature MD minimization\n"), "zero"); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[16] == 1.0) { print_control_key (buf, _("# Include equilibration data in overall statistics\n"), "collect"); print_info ("\n", NULL, buf); } } if (print_ana()) { print_info (_("\n# Analysis information"), NULL, buf); if (tmp_field -> ana_opts[0] == 1.0) { print_control_string (buf, "all", _("\n# Calculate and collect all intra-molecular PDFs"), NULL, "ana "); for (k=1; k<3; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); print_float (buf, tmp_field -> ana_opts[3]); } if (tmp_field -> ana_opts[4] == 1.0) { print_control_string (buf, "bon", _("\n# Calculate and collect bonds PDFs"), NULL, "ana "); for (k=5; k<6; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); print_float (buf, tmp_field -> ana_opts[7]); } if (tmp_field -> ana_opts[8] == 1.0) { print_control_string (buf, "ang", _("\n# Calculate and collect angles PDFs"), NULL, "ana "); for (k=9; k<11; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } if (tmp_field -> ana_opts[11] == 1.0) { print_control_string (buf, "dih", _("\n# Calculate and collect dihedrals PDFs"), NULL, "ana "); for (k=12; k<14; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } if (tmp_field -> ana_opts[14] == 1.0) { print_control_string (buf, "inv", _("\n# Calculate and collect inversions PDFs"), NULL, "ana "); for (k=15; k<17; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } print_control_string (buf, "ana", _("\n# Print any opted for analysis inter and intra-molecular PDFs"), NULL, "print "); } print_info ("\n", NULL, buf); if (tmp_field -> out_opts[21] == 1.0 || tmp_field -> out_opts[27] == 1.0) { print_control_float (buf, tmp_field -> out_opts[23], _("\n# Bin size for RDfs and Z-density distribution: "), " Ang.", "binsize "); } if (tmp_field -> out_opts[21] == 1.0) { print_control_int (buf, (int)tmp_field -> out_opts[22], _("\n# Calculate and collect radial distribution functions every: "), _(" MD step(s)"), "rdf "); print_info ("\n", NULL, buf); print_control_string (buf, "rdf", NULL, NULL, "print "); } if (tmp_field -> out_opts[27] == 1.0) { print_control_int (buf, (int)tmp_field -> out_opts[28], _("\n# Calculate and collect Z-density profile every: "), _(" MD step(s)"), "zden "); print_info ("\n", NULL, buf); print_control_string (buf, "zden", NULL, NULL, "print "); } if (tmp_field -> out_opts[24] == 1.0) { print_control_key (buf, _("\n# Velocity autocorrelation functions, VAFs\n"), "vaf "); for (k=25; k<27; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_info ("\n", NULL, buf); print_control_string (buf, "vaf", NULL, NULL, "print "); if (tmp_field -> out_opts[29] == 1.0) { print_control_string (buf, "vafav", _("\n# Ignore time averaging for the VAFs"), NULL, "no "); } } if ((int)tmp_field -> out_opts[0] || (int)tmp_field -> out_opts[4] || (int)tmp_field -> out_opts[8] || (int)tmp_field -> out_opts[12] || (int)tmp_field -> out_opts[15] || (int)tmp_field -> out_opts[17] || (int)tmp_field -> out_opts[19]) { print_info (_("\n\n# Output information"), NULL, buf); if ((int)tmp_field -> out_opts[0]) { print_control_key (buf, _("\n# Write defects trajectory file, DEFECTS\n"), "defe "); for (k=1; k<3; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[3]); } if ((int)tmp_field -> out_opts[4]) { print_control_key (buf, _("\n# Write displacement trajectory file, RSDDAT\n"), "disp "); for (k=5; k<7; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[7]); } if ((int)tmp_field -> out_opts[8]) { print_control_key (buf, _("\n# Write HISTORY file\n"), "traj "); for (k=9; k<11; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[11]); } if ((int)tmp_field -> out_opts[12]) { print_control_key (buf, _("\n# Write MSDTMP file\n"), "msdtmp "); for (k=13; k<15; k++) print_int (buf, (int)tmp_field -> out_opts[k]); } if ((int)tmp_field -> out_opts[15]) { print_control_int (buf, (int)tmp_field -> out_opts[16], _("\n# Print system data every: "), _(" MD step(s)"), "print "); } if ((int)tmp_field -> out_opts[17]) { print_control_int (buf, (int)tmp_field -> out_opts[18], _("\n# Accumulate statics data every: "), _(" MD step(s)"), "stats "); } if ((int)tmp_field -> out_opts[19]) { print_control_int (buf, (int)tmp_field -> out_opts[20], _("\n# Set rolling average stack to: "), _(" MD step(s)"), "stack "); } } print_control_int (buf, (int)tmp_field -> out_opts[30], _("\n# Dump restart information every: "), _(" MD step(s)"), "dump "); for (i=0; i<2; i++) { if (tmp_field -> io_opts[2*i] == 1.0) { print_control_float (buf, tmp_field -> io_opts[2*i+1], _(time_inf[i]), " s", time_key[i]); } } print_info ("\n", NULL, buf); for (i=0; i<2; i++) { j=4 + i*6; if (tmp_field -> io_opts[j] == 1.0) { j ++; print_info (_(io_inf[i]), NULL, buf); print_info (_("# - method = "), NULL, buf); print_info (io_rw_m[(int)tmp_field -> io_opts[j]], NULL, buf); j++; if (i) { if (tmp_field -> io_opts[j-1] == 3.0) { print_info (_("\n# - precision = "), NULL, buf); print_info (io_pres[(int)tmp_field -> io_opts[j]], NULL, buf); } j ++; print_info (_("\n# - type = "), NULL, buf); print_info (io_typ[(int)tmp_field -> io_opts[j]], NULL, buf); j++; } if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (_("\n# - j, reader count = "), NULL, buf); str_a = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_a, NULL, buf); } j++; if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (_("\n# - k, batch size = "), NULL, buf); str_b = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_b, NULL, buf); } j++; print_info (_("\n# - l, buffer size = "), NULL, buf); str_c = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_c, NULL, buf); j++; if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (_("\n# - e, parallel error check is "), NULL, buf); print_info (io_pec[(int)tmp_field -> io_opts[j]], NULL, buf); } print_info (io_key[i], "bold", buf); print_info (io_meth[(int)tmp_field -> io_opts[5+6*i]], "bold_green", buf); if (i) { if (tmp_field -> io_opts[11] == 3.0) { print_info (io_pres[(int)tmp_field -> io_opts[12]], "bold_green", buf); } print_info (" ", NULL, buf); print_info (io_typ[(int)tmp_field -> io_opts[13]], "bold_green", buf); } if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (" ", NULL, buf); print_info (str_a, "bold_blue", buf); g_free (str_a); print_info (" ", NULL, buf); print_info (str_b, "bold_blue", buf); g_free (str_b); } print_info (" ", NULL, buf); print_info (str_c, "bold_blue", buf); g_free (str_c); if (tmp_field -> io_opts[4+7*i] != 2.0) { (tmp_field -> io_opts[j] == 0.0) ? print_string (buf, "N") : print_string (buf, "Y"); } print_info ("\n", NULL, buf); j++; } } if (tmp_field -> io_opts[18] == 1.0) { print_control_key (buf, _("\n# Seeds for the random number generators\n"), "seed "); for (i=19; i<22; i++) print_int (buf, (int)tmp_field -> io_opts[i]); print_info ("\n", NULL, buf); } if (tmp_field -> io_opts[22] == 1.0) { print_control_key (buf, _("\n# Limits to 2 the number of processors in z direction for slab simulations\n"), "slab"); } print_info ("\n\n", NULL, buf); print_info ("finish", "bold", buf); // Close the CONTROL file } atomes_1.3.1/src/calc/dl_poly/dlp_active.c0000664000175000017500000001726015212624223020124 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_active.c * @short Functions to retrieve data in the force field structure * @author Sébastien Le Roux */ /* * This file: 'dlp_active.c' * * Contains: * - The functions to retrieve data in the force field structure * * List of functions: field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid); field_molecule * get_active_field_molecule (int a); field_nth_body * get_active_body (int a, int b); field_external * get_active_external (int a); field_atom* get_active_atom (int a, int b); field_shell * get_active_shell (int a, int b); field_constraint * get_active_constraint (int a, int b); field_pmf * get_active_pmf (int a, int b); field_rigid * get_active_rigid (int a, int b); field_tethered * get_active_tethered (int a, int b); field_prop * get_active_prop (struct field_prop * pr, int a); field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); field_struct * get_active_struct (int s, int a, int b); */ #include "dlp_field.h" /*! \fn field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid) \brief retrieve field molecule from overall atom id in the model \param this_proj the target project \param aid the target atom id */ field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid) { int i; field_molecule * fmol = this_proj -> force_field[activef] -> first_molecule; field_atom* fat; while (fmol) { fat = fmol -> first_atom; while (fat) { for (i=0; i num; i++) { if (fat -> list[i] == aid) return fmol; } fat = fat -> next; } fmol = fmol -> next; } return NULL; } /*! \fn field_molecule * get_active_field_molecule (int a) \brief retrieve field molecule \param a the id of the field molecule to retrieve */ field_molecule * get_active_field_molecule (int a) { int i; field_molecule * tfmol = tmp_field -> first_molecule; for (i=0; i next != NULL) tfmol = tfmol -> next; } return tfmol; } /*! \fn field_nth_body * get_active_body (int a, int b) \brief retrieve field nth body interaction \param a the id of the body interaction to retrieve \param b the type of body interaction */ field_nth_body * get_active_body (int a, int b) { int i; field_nth_body * body; body = tmp_field -> first_body[b]; for (i=0; i next != NULL) body = body -> next; } return body; } /*! \fn field_external * get_active_external (int a) \brief retrieve external field property \param a the id of the external field property to retrieve */ field_external * get_active_external (int a) { int i; field_external * external; external = tmp_field -> first_external; for (i=0; i next != NULL) external = external -> next; } return external; } /*! \fn field_atom* get_active_atom (int a, int b) \brief retrieve field atom \param a the id of the field molecule \param b the id of the field atom to retrieve */ field_atom* get_active_atom (int a, int b) { int i; field_atom* ato; ato = get_active_field_molecule (a) -> first_atom; for (i=0; i next != NULL) ato = ato -> next; } return ato; } /*! \fn field_shell * get_active_shell (int a, int b) \brief retrieve shell property \param a the id of the field molecule \param b the id of the shell property to retrieve */ field_shell * get_active_shell (int a, int b) { int i; field_shell * shl; shl = get_active_field_molecule (a) -> first_shell; for (i=0; i next != NULL) shl = shl -> next; } return shl; } /*! \fn field_constraint * get_active_constraint (int a, int b) \brief retrieve constraint property \param a the id of the field molecule \param b the id of the constraint to retrieve */ field_constraint * get_active_constraint (int a, int b) { int i; field_constraint * cons; cons = get_active_field_molecule (a) -> first_constraint; for (i=0; i next != NULL) cons = cons -> next; } return cons; } /*! \fn field_pmf * get_active_pmf (int a, int b) \brief retrieve PMF property \param a the id of the field molecule \param b the id of the PMF property to retrieve */ field_pmf * get_active_pmf (int a, int b) { int i; field_pmf * pmf; pmf = get_active_field_molecule (a) -> first_pmf; for (i=0; i next != NULL) pmf = pmf -> next; } return pmf; } /*! \fn field_rigid * get_active_rigid (int a, int b) \brief retrieve rigid property \param a the id of the field molecule \param b the id of the rigid property to retrieve */ field_rigid * get_active_rigid (int a, int b) { int i; field_rigid * rig; rig = get_active_field_molecule (a) -> first_rigid; for (i=0; i next != NULL) rig = rig -> next; } return rig; } /*! \fn field_tethered * get_active_tethered (int a, int b) \brief retrieve tethered property \param a the id of the field molecule \param b the id of the tethered to retrieve */ field_tethered * get_active_tethered (int a, int b) { int i; field_tethered * tet; tet = get_active_field_molecule (a) -> first_tethered; for (i=0; i next != NULL) tet = tet -> next; } return tet; } /*! \fn field_prop * get_active_prop (struct field_prop * pr, int a) \brief the field molecule structural property id to retrieve \param pr the pointer on the field molecule properties to browse \param a the id of the field molecule property to retrieve */ field_prop * get_active_prop (struct field_prop * pr, int a) { field_prop * prop; prop = pr; int i; for (i=0; i next != NULL) prop = prop -> next; } return prop; } /*! \fn field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) \brief retrieve field molecule structural property using atoms \param pr the pointer on the field molecule properties to browse \param ti the number of atoms for this property \param ids the atoms to search for */ field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) { field_prop * prop = NULL; prop = pr; gboolean done; int i; while (prop != NULL) { done = TRUE; for (i=0; i aid[i] != ids[i]) { done = FALSE; break; } } if (done) break; prop = prop -> next; } return prop; } /*! \fn field_struct * get_active_struct (int s, int a, int b) \brief retrieve field structural property \param s the type of structural property \param a the field molecule id \param b the structural property id to retrieve */ field_struct * get_active_struct (int s, int a, int b) { int i; field_struct * str; str = get_active_field_molecule (a) -> first_struct[s]; for (i=0; i next != NULL) str = str -> next; } return str; } atomes_1.3.1/src/calc/dl_poly/dlp_init.c0000664000175000017500000025017615212624223017621 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_init.c * @short Functions to initialize the creation of a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_init.c' * * Contains: * - The functions to initialize the creation of a classical force field * * List of functions: int get_position_in_field_atom_from_model_id (int fat, int at); int get_field_atom_id_from_model_id (field_molecule * fmol, int at); int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at); int get_atom_id_in_fragment_from_model_id (int frag, int at); int set_atom_id (field_atom* at, int c, int p, int id); int get_struct_id_from_atom_id (int ids, int * aid); int prepare_field_atom (int i, int j, int k, int l, int m); int test_for_bonds (field_atom* at, field_atom* bt); int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b); int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct); int angles_from_bonds (int n, field_atom* at, field_atom* bt, field_atom* ct); int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); int dihedrals_from_angles (int n, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d); int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id, gboolean in_field_atom); int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it); int setup_atomic_weight (int seq); int init_vdw (gboolean init); gboolean was_not_created_struct (int ids, int num, int * aid); gboolean in_bond (int at, int bd[2]); gboolean are_neighbors (field_neighbor * ngb, int at); gboolean are_in_bond (atom ato, int at); gboolean is_numbering_possible (int frag); gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom); gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init); gboolean id_atoms_in_fragment (int frag, int seed); gchar * set_field_atom_name (field_atom* ato, field_molecule * mol); void init_all_atoms (int i); void init_all_bonds (); void init_all_angles (); void init_all_dihedrals (); void init_all_impropers_inversions (int stru); void get_weight (int seq); void find_atom_id_in_field_molecule (); void clean_field_struct_list (field_struct * stru); void init_all_field_struct (gboolean init); void init_field_molecule (int i); void init_dlpoly_field (classical_field * new_field); void init_lammps_field (classical_field * new_field); field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list); field_shell * init_field_shell (int id, int ia, int ib); field_constraint * init_field_constraint (int id, int ia, int ib); field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); field_rigid * init_field_rigid (int id, int num, int * list); field_tethered * init_field_tethered (int id, int num); field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); field_struct * init_field_struct (int st, int ai, int an, int * aid); field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); field_external * init_field_external (int bi); field_neighbor * get_init_neighbor (int a); classical_field * create_force_field_data_structure (int ai); */ #include "dlp_field.h" #include "interface.h" extern void print_all_field_struct (field_molecule * mol, int str); int * astr; float val; extern int * duplicate_int (int num, int * old_val); extern float * duplicate_float (int num, float * old_val); int id_atom; int multi; int a_multi; /*! \fn int get_position_in_field_atom_from_model_id (int fat, int at) \brief retrieve atom position id in field atom id using atom id in model \param fat the target field atom \param at the target model atom id */ int get_position_in_field_atom_from_model_id (int fat, int at) { int i; field_atom* tmp_ft = get_active_atom (tmp_fmol -> id, fat); for (i=0; i num; i++) { if (tmp_ft -> list[i] == at) return i; } return -1; } /*! \fn int get_field_atom_id_from_model_id (field_molecule * fmol, int at) \brief retrieve field atom id using atom id in model \param fmol the target field molecule \param at the target model atom id */ int get_field_atom_id_from_model_id (field_molecule * fmol, int at) { int i; field_atom* fat = fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return fat -> id; } fat = fat -> next; } return -1; } /*! \fn int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at) \brief retrieve fragment atom id using atom id in model \param fmol the target field molecule \param at the target model atom id */ int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at) { int i; field_atom* fat = fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return fat -> list_id[i]; } fat = fat -> next; } return -1; } /*! \fn int get_atom_id_in_fragment_from_model_id (int frag, int at) \brief retrieve field atom id in fragment from model id \param frag the fragment id \param at the atom id in the model */ int get_atom_id_in_fragment_from_model_id (int frag, int at) { int i, j, k; field_atom* tmp_ft; for (i=0; i< tmp_fmol -> mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][frag].a > -1 && tmp_fmol -> atoms_id[i][frag].b > -1) { tmp_ft = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][frag].a); j = tmp_fmol -> atoms_id[i][frag].b; k = tmp_ft -> list[j]; if (k == at) return i; } } return -1; } /*! \fn int set_atom_id (field_atom* at, int c, int p, int id) \brief set new fragment/molecule atom parameters \param at the target field atom \param c the fragment id \param p the list id in field atom \param id the field atom id */ int set_atom_id (field_atom* at, int c, int p, int id) { if (c == tmp_fmol -> fragments[0]) { id_atom ++; tmp_fmol -> atoms_id[id_atom][0].a = id; tmp_fmol -> atoms_id[id_atom][0].b = p; return id_atom; } else { return -1; } } /*! \fn gchar * set_field_atom_name (field_atom* ato, field_molecule * mol) \brief get name string for field atom \param ato the target field atom \param mol the target field molecule */ gchar * set_field_atom_name (field_atom* ato, field_molecule * mol) { int i, j; gchar * str; field_atom* tmpatf; switch (ato -> type) { case SPEC_ONLY: str = exact_name(tmp_proj -> chemistry -> label[ato -> sp]); break; case OTHER: tmpatf = mol -> first_atom; j = 1; while (tmpatf) { if (tmpatf -> sp == ato -> sp) j ++; tmpatf = tmpatf -> next; } str = exact_name(g_strdup_printf ("%s-%d-%d", tmp_proj -> chemistry -> label[ato -> sp], j, mol -> id+1)); break; default: i = ato -> list[0]; j = tmp_proj -> atoms[0][i].coord[ato -> type-1]; switch (ato -> type) { case TOTAL_COORD_AND_SPEC: str = g_strdup_printf ("%s-%d-%d", exact_name(tmp_proj -> chemistry -> label[ato -> sp]), tmp_coord -> geolist[0][ato -> sp][j], mol -> id+1); break; case PARTIAL_COORD_AND_SPEC: str = g_strdup_printf ("%s-%d-%d", exact_name(tmp_proj -> chemistry -> label[ato -> sp]), j+1, mol -> id+1); /*str = g_strdup_printf ("%s-%d", exact_name (env_name (tmp_proj, j, ato -> sp, ato -> type, NULL)), mol -> id+1);*/ break; } } return str; } /*! \fn field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list) \brief initialize a new type of field atom \param id the new field atom id \param type the new field atom coordination type \param at the new field atom species \param nat the number of atom(s) of for this field atom type \param coo the coordination id in coordination type, if any \param list the list of atoms that match this type of field atom */ field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list) { int h, i, j, k, l, m, n; field_atom* ato; ato = g_malloc0(sizeof*ato); ato -> id = id; ato -> type = type; ato -> num = nat; ato -> list = allocint (ato -> num); ato -> list_id = allocint (ato -> num); ato -> frozen_id = allocbool (ato -> num); h = 0; switch (type) { case OTHER: for (i=0; i multi; i++) { for (j=0; j < nat/tmp_fmol -> multi; j++) { k = list[j]; l = tmp_fmol -> atoms_id[k][i].a; m = tmp_fmol -> atoms_id[k][i].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; ato -> list[h] = n; ato -> list_id[h] = k; ato -> frozen_id[h] = FALSE; tmp_fmol -> atoms_id[k][i].a = ato -> id; tmp_fmol -> atoms_id[k][i].b = h; tmp_proj -> atoms[0][n].faid = ato -> id; h ++; } } break; default: for (i=0; i < tmp_fmol -> multi; i++) { j = tmp_fmol -> fragments[i]; for (k=0; k < tmp_proj -> natomes; k++) { if (tmp_proj -> atoms[0][k].coord[2] == j && tmp_proj -> atoms[0][k].sp == at) { if (type == SPEC_ONLY) { ato -> list[h] = k; ato -> frozen_id[h] = FALSE; ato -> list_id[h] = set_atom_id (ato, tmp_proj -> atoms[0][k].coord[2], h, id); h ++; } else { if (tmp_proj -> atoms[0][k].coord[type-1] == coo) { ato -> list[h] = k; ato -> frozen_id[h] = FALSE; ato -> list_id[h] = set_atom_id (ato, tmp_proj -> atoms[0][k].coord[2], h, id); h ++; } } } } } break; } #ifdef DEBUG if (h != ato -> num) g_debug ("Something is wrong in with this field atom: id= %d, sp= %d, co= %d", id, at, coo); #endif ato -> sp = at; ato -> mass = 0.0;//get_force_field_atom_mass (at, 0); ato -> fid = (ato -> mass == 0.0) ? -1 : tmp_field -> type; ato -> afid = (ato -> mass == 0.0) ? -1 : 0; ato -> mass = (ato -> mass == 0.0) ? tmp_proj -> chemistry -> chem_prop[CHEM_M][at] : ato -> mass; ato -> name = g_strdup_printf ("%s", set_field_atom_name (ato, tmp_fmol)); ato -> charge = 0.0; ato -> frozen = 0; ato -> show = FALSE; ato -> next = NULL; ato -> prev = NULL; return ato; } /*! \fn field_shell * init_field_shell (int id, int ia, int ib) \brief initialize field core shell interaction \param id the new shell id \param ia 1st atom id in field molecule \param ib 2nd atom id in field molecule */ field_shell * init_field_shell (int id, int ia, int ib) { field_shell * shell; shell = g_malloc0(sizeof*shell); shell -> id = id; shell -> ia[0] = ia; shell -> ia[1] = ib; shell -> k2 = 0.0; shell -> k4 = 0.0; shell -> show = FALSE; shell -> use = TRUE; shell -> next = NULL; shell -> prev = NULL; return shell; } /*! \fn field_constraint * init_field_constraint (int id, int ia, int ib) \brief initialize field bond constraint \param id the new field constraint id \param ia 1st atom id in field molecule \param ib 2nd atom id in field molecule */ field_constraint * init_field_constraint (int id, int ia, int ib) { field_constraint * cons; cons = g_malloc0(sizeof*cons); cons -> id = id; cons -> ia[0] = ia; cons -> ia[1] = ib; cons -> av = -1.0; cons -> length = 0.0; cons -> show = FALSE; cons -> use = TRUE; cons -> next = NULL; cons -> prev = NULL; return cons; } /*! \fn field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) \brief initialize new field mean force potential \param id the id of the new field PMF \param num the numbers of atom(s) \param list the lists of atom(s) \param w the weight list */ field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) { field_pmf * pmf; pmf = g_malloc0(sizeof*pmf); pmf -> id = id; pmf -> av = -1.0; pmf -> length = 0.0; int i; if (num != NULL) { for (i=0; i<2; i++) { pmf -> num[i] = num[i]; pmf -> list[i] = duplicate_int (num[i], list[i]); pmf -> weight[i] = duplicate_float (num[i], w[i]); } } else { for (i=0; i<2; i++) { pmf -> num[i] = 0; pmf -> list[i] = NULL; pmf -> weight[i] = NULL; } } pmf -> show = FALSE; pmf -> use = TRUE; pmf -> next = NULL; pmf -> prev = NULL; return pmf; } /*! \fn field_rigid * init_field_rigid (int id, int num, int * list) \brief initialize new field rigid constraint \param id the id of the new field rigid \param num the number of atom(s) to fix \param list the list of atom(s) to fix */ field_rigid * init_field_rigid (int id, int num, int * list) { field_rigid * rig; rig = g_malloc0(sizeof*rig); rig -> id = id; rig -> num = num; rig -> list = NULL; if (list != NULL) rig -> list = duplicate_int (num, list); rig -> show = FALSE; rig -> use = TRUE; rig -> next = NULL; rig -> prev = NULL; return rig; } /*! \fn field_tethered * init_field_tethered (int id, int num) \brief initialize new field tethered potential \param id the new field tethered potential id \param num the atom id in the field molecule */ field_tethered * init_field_tethered (int id, int num) { field_tethered * tet; tet = g_malloc0(sizeof*tet); tet -> id = id; tet -> num = num; tet -> key = 0; tet -> val = allocfloat (fvalues[activef][0][0]); tet -> show = FALSE; tet -> use = TRUE; tet -> next = NULL; tet -> prev = NULL; return tet; } /*! \fn field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) \brief initialize new field molecule structural property \param ti the type of field structural element to initialize \param key the formalism to use \param show visualize in the 3D window (yes / no) \param use use to create the force field input file (yes / no) */ field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) { field_prop * prop; prop = g_malloc0(sizeof*prop); prop -> aid = allocint (struct_id(ti+7)); prop -> key = key; prop -> pid = -1; prop -> fpid = -1; prop -> val = allocfloat (fvalues[activef][ti+1][key]); prop -> show = show; prop -> use = use; prop -> next = NULL; prop -> prev = NULL; return prop; } /*! \fn int get_struct_id_from_atom_id (int ids, int * aid) \brief retrieve field structural element id from a list of atom id \param ids the type of structural element \param aid the list of atom id */ int get_struct_id_from_atom_id (int ids, int * aid) { int i, j; field_struct * stru = tmp_fmol -> first_struct[ids]; j = struct_id (ids+7); int res = 0; while (stru) { res = stru -> id + 1; for (i=0; i aid[i] != aid[i]) { res = 0; break; } } if (! res) { res = -(stru -> id + 1); for (i=0; i aid[i] != aid[j-1-i]) { res = 0; break; } } } if (res != 0) break; stru = stru -> next; } return res; } /*! \fn gboolean was_not_created_struct (int ids, int num, int * aid) \brief was this structural element already created ? \param ids the type of structural element \param num the number of atoms \param aid the list of atom id */ gboolean was_not_created_struct (int ids, int num, int * aid) { if (num == 0) return TRUE; int j, k; k = struct_id(ids+7); tmp_fstr = tmp_fmol -> first_struct[ids]; gboolean res; while (tmp_fstr) { res = FALSE; if (ids < 6) { for (j=0; j aid[j] != aid[j]) { res = TRUE; break; } } if (res) { res = FALSE; for (j=0; j aid[k-1-j] != aid[j]) { res = TRUE; break; } } } } else if (ids == 6) { for (j=0; j aid[j] != aid[j]) { res = TRUE; break; } } if (res) { if (tmp_fstr -> aid[0] != aid[0]) { res = TRUE; } else if (tmp_fstr -> aid[3] != aid[3]) { res = TRUE; } else if (tmp_fstr -> aid[1] == aid[2] && tmp_fstr -> aid[2] == aid[1]) { res = FALSE; } } } else { if (tmp_fstr -> aid[0] != aid[0]) { res = TRUE; } else { if (tmp_fstr -> aid[1] != aid[1]) { res = TRUE; } else if (tmp_fstr -> aid[2] == aid[2] && tmp_fstr -> aid[3] == aid[3]) { res = FALSE; } else if (tmp_fstr -> aid[2] == aid[3] && tmp_fstr -> aid[3] == aid[2]) { res = FALSE; } else { res = TRUE; } } } if (! res) return FALSE; tmp_fstr = tmp_fstr -> next; } return TRUE; } /*! \fn field_struct * init_field_struct (int st, int ai, int an, int * aid) \brief initialize field molecule new structural element \param st the type of structural element (0 = bond, 1 = angle, 2 = dihedral) \param ai the id of the new structural property \param an the number of atoms \param aid the list of field atoms */ field_struct * init_field_struct (int st, int ai, int an, int * aid) { field_struct * str; str = g_malloc0(sizeof*str); str -> st = st; str -> id = ai; if (st == 6 || st == 7) { str -> num = 0; str -> av = 0.0; } else { str -> num = an; str -> av = val; } str -> aid = NULL; if (aid != NULL) str -> aid = duplicate_int (struct_id(st+7), aid); str -> def = init_field_prop (st, 0, FALSE, TRUE); str -> other = NULL; str -> next = NULL; str -> prev = NULL; return str; } /*! \fn field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) \brief initialize new field non bonded interaction \param bi the new non bonded interaction id \param bd the type of non bonded interaction \param na the list of field atom(s), if any \param ma the list of field molecule(s), if any \param ba the list of atom id in field molecule, if any */ field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) { int i, j; field_nth_body * nthbd; nthbd = g_malloc0(sizeof*nthbd); nthbd -> id = bi; nthbd -> bd = bd; if (! bd) { nthbd -> fpid = allocint (2); nthbd -> fpid[0] = nthbd -> fpid[1] = -1; } j = body_at (bd); // Id in Vdw list if (na == NULL) { nthbd -> na = allocint (j); for (i=0; i na[i] = -1; } else { nthbd -> na = duplicate_int (j, na); } // Molecule id nthbd -> ma = NULL; nthbd -> ma = g_malloc0(j*sizeof*nthbd -> ma); // Field atom id in molecule nthbd -> a = NULL; nthbd -> a = g_malloc0(j*sizeof*nthbd -> a); for (i=0; i < j; i++) { if (ma != NULL) nthbd -> ma[i] = duplicate_int (na[i], ma[i]); if (ba != NULL) nthbd -> a[i] = duplicate_int (na[i], ba[i]); } nthbd -> key = 0; nthbd -> val = allocfloat (fvalues[activef][9+bd][nthbd -> key]); nthbd -> show = FALSE; nthbd -> use = TRUE; nthbd -> next = NULL; nthbd -> prev = NULL; return nthbd; } /*! \fn field_external * init_field_external (int bi) \brief initialize new field external potential \param bi the id of the new field external potential */ field_external * init_field_external (int bi) { field_external * nfext; nfext = g_malloc0(sizeof*nfext); nfext -> id = bi; nfext -> key = -1; nfext -> val = NULL; nfext -> use = FALSE; nfext -> next = NULL; nfext -> prev = NULL; return nfext; } /*! \fn int prepare_field_atom (int i, int j, int k, int l, int m) \brief initialiaze new type of field atom \param i the new field atom id \param j the new field atom coordination type \param k the new field atom species \param l the number of atom(s) of for this field atom type \param m the coordination id in coordination type, if any */ int prepare_field_atom (int i, int j, int k, int l, int m) { if (tmp_fmol -> first_atom == NULL) { tmp_fmol -> first_atom = init_field_atom (i, j, k, l, m, NULL); tmp_fat = tmp_fmol -> first_atom; } else { tmp_fat -> next = init_field_atom (i, j, k, l, m, NULL); tmp_fat -> next -> prev = g_malloc0(sizeof*tmp_fat -> next -> prev); tmp_fat -> next -> prev = tmp_fat; tmp_fat = tmp_fat -> next; } return 1; } /*! \fn void init_all_atoms (int i) \brief initialize all field atom(s) \param i the molecule id in the model, if any */ void init_all_atoms (int i) { int j, k, l, m, n; tmp_fmol -> first_atom = NULL; k = 0; switch (tmp_field -> atom_init) { case SPEC_ONLY: for (j=0; j nspec; j++) { if (tmp_mol -> species[j] > 0) { k += prepare_field_atom (k, tmp_field -> atom_init, j, tmp_mol -> species[j]*tmp_fmol -> multi, 0); } } break; case OTHER: break; default: for (j=0; j nspec; j++) { if (tmp_mol -> species[j] > 0) { for (l=0; l < tmp_coord -> totcoord[tmp_field -> atom_init-1]; l++) { n = 0; for (m=0; m < tmp_proj -> natomes; m++) { if (tmp_proj -> atoms[0][m].sp == j && tmp_proj -> atoms[0][m].coord[3] == i && tmp_proj -> atoms[0][m].coord[tmp_field -> atom_init -1] == l) n ++; } if (n > 0) { k += prepare_field_atom (k, tmp_field -> atom_init, j, n, l); } } } } break; } tmp_fmol -> atoms = k; } /*! \fn gboolean in_bond (int at, int bd[2]) \brief is atom at in bond bd \param at the target atom id \param bd the bond atoms id */ gboolean in_bond (int at, int bd[2]) { if (at == bd[0] || at == bd[1]) { return TRUE; } else { return FALSE; } } /*! \fn gboolean are_neighbors (field_neighbor * ngb, int at) \brief test if 2 atoms are neighbors \param ngb the neighbor data structure to test \param at the target atom id in the model */ gboolean are_neighbors (field_neighbor * ngb, int at) { int i; for (i=0; i num; i++) { if (ngb -> vois[i] == at) return TRUE; } return FALSE; } /*! \fn gboolean are_in_bond (atom ato, int at) \brief is at in ato neighbors ? \param ato the target atom \param at the target atom id */ gboolean are_in_bond (atom ato, int at) { int i; for (i=0; i num; i++) { j = at -> list[i]; for (k= 0; k < tmp_proj -> atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { m ++; val += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l]).length; } } } if (m > 0) val /= m; if (at -> id == bt -> id) m /= 2; return m / tmp_fmol -> multi; } /*! \fn int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) \brief prepare the creation of a field structural element \param ids the type of structural element (0 to 7) \param sid the id of the new structural element \param yes_no_num is there data to save (1 or > 1) or not (0) ? \param aid the list of field atoms */ int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) { if (yes_no_num > 0) { if (tmp_fmol -> first_struct[ids] == NULL) { tmp_fmol -> first_struct[ids] = init_field_struct (ids, sid, yes_no_num, aid); tmp_fstr = tmp_fmol -> first_struct[ids]; return 1; } else if (was_not_created_struct (ids, sid, aid)) { tmp_fstr = tmp_fmol -> first_struct[ids]; while (tmp_fstr -> next) tmp_fstr = tmp_fstr -> next; tmp_fstr -> next = init_field_struct (ids, sid, yes_no_num, aid); tmp_fstr -> next -> prev = tmp_fstr; tmp_fstr = tmp_fstr -> next; return 1; } } return 0; } /*! \fn int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b) \brief search for bond(s) between two field atoms \param n the number of different bond types already found \param at 1st field atom \param bt 2nd field atom \param a 1st atom chemical species \param b 2nd atom chemical species */ int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b) { if ((at -> sp == a && bt -> sp == b) || (at -> sp == b && bt -> sp == a)) { astr[0] = at -> id; astr[1] = bt -> id; n += prepare_field_struct (0, n, test_for_bonds (at, bt), astr); } return n; } /*! \fn void init_all_bonds () \brief find, and initialize all bond(s) */ void init_all_bonds () { int j, k, l; tmp_fmol -> first_struct[0] = NULL; k = 0; for (j=0; j< tmp_proj -> nspec; j++) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { tmp_fbt = tmp_fat; while (tmp_fbt) { k = bonds_between_atoms (k, tmp_fat, tmp_fbt, j, j); tmp_fbt = tmp_fbt -> next; } tmp_fat = tmp_fat -> next; } } for (j=0; j nspec-1; j++) { for (l=j+1; l nspec; l++) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { tmp_fbt = tmp_fat -> next; while (tmp_fbt) { k = bonds_between_atoms (k, tmp_fat, tmp_fbt, j, l); tmp_fbt = tmp_fbt -> next; } tmp_fat = tmp_fat -> next; } } } tmp_fmol -> nstruct[0] = k; } /*! \fn int test_for_angles (field_atom * at, field_atom * bt, field_atom * ct) \brief search for angle(s) between these field atoms \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct) { int i, j, k, l, m, n, o; val = 0.0; o = 0; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].numv >= 2 && tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { o ++; val += angle_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l], & tmp_proj -> atoms[0][n]).angle; } } } } } if (o > 0) val /= o; if (at -> id == ct -> id) o /= 2; return o / tmp_fmol -> multi; } /*! \fn int angles_from_bonds (int n, field_atom * at, field_atom * bt, field_atom * ct) \brief find, and initialize, angles using bonds \param n the number of different angle types already found \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ int angles_from_bonds (int n, field_atom* at, field_atom* bt, field_atom* ct) { astr[0] = at -> id; astr[1] = bt -> id; astr[2] = ct -> id; n += prepare_field_struct (2, n, test_for_angles (at, bt, ct), astr); return n; } /*! \fn void init_all_angles () \brief find, and intialiaze, all angle(s) using bonds */ void init_all_angles () { int m, p; tmp_fmol -> first_struct[2] = NULL; p = 0; field_struct * tmp_fst = tmp_fmol -> first_struct[0]; for (m=0; m < tmp_fmol -> nstruct[0]; m++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[1]); tmp_fct = tmp_fmol -> first_atom; while (tmp_fct) { p = angles_from_bonds (p, tmp_fat, tmp_fbt, tmp_fct); p = angles_from_bonds (p, tmp_fbt, tmp_fat, tmp_fct); tmp_fct = tmp_fct -> next; } if (tmp_fst -> next != NULL) tmp_fst = tmp_fst -> next; } tmp_fmol -> nstruct[2] = p; } /*! \fn int test_for_dihedrals (field_atom * at, field_atom * bt, field_atom * ct, field_atom * dt) \brief search for dihedral(s) between these field atoms \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p, q; q = 0; val = 0.0; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == dt -> id) { q ++; val += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l], & tmp_proj -> atoms[0][n], & tmp_proj -> atoms[0][p]).angle; } } } } } } } if (q > 0) val /= q; if (at -> id == dt -> id && bt -> id == ct -> id) q /= 2; return q / tmp_fmol -> multi; } /*! \fn int dihedrals_from_angles (int n, field_atom * at, field_atom * bt, field_atom * ct, field_atom * dt) \brief find, and initialize, dihedrals using angles \param n the number of different dihedral types already found \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ int dihedrals_from_angles (int n, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { astr[0] = at -> id; astr[1] = bt -> id; astr[2] = ct -> id; astr[3] = dt -> id; n += prepare_field_struct (4, n, test_for_dihedrals (at, bt, ct, dt), astr); return n; } /*! \fn void init_all_dihedrals () \brief find, and intialiaze, all dihedral(s) using bonds */ void init_all_dihedrals () { int n, p; tmp_fmol -> first_struct[4] = NULL; p = 0; field_struct * tmp_fst = tmp_fmol -> first_struct[2]; for (n=0; n< tmp_fmol -> nstruct[2]; n++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[1]); tmp_fct = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[2]); tmp_fdt = tmp_fmol -> first_atom; while (tmp_fdt) { p = dihedrals_from_angles (p, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); p = dihedrals_from_angles (p, tmp_fct, tmp_fbt, tmp_fat, tmp_fdt); tmp_fdt = tmp_fdt -> next; } if (tmp_fst -> next != NULL) tmp_fst = tmp_fst -> next; } tmp_fmol -> nstruct[4] = p; } /*! \fn int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d) \brief prepare new improper / inversion \param n the actual number of structural element \param stru the type of structural element, 6 = impropers, 7 = inversions \param at 1st field atom id \param bt 2nd field atom id \param ct 3rd field atom id \param dt 4th field atom id \param a 1st atom id in molecule/fragment \param b 2nd atom id in molecule/fragment \param c 3rd atom id in molecule/fragment \param d 4th atom id in molecule/fragment */ int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d) { astr[0] = at; astr[1] = bt; astr[2] = ct; astr[3] = dt; double v; //g_debug ("Improp:: at= %d, bt= %d, ct= %d, dt= %d", at, bt, ct, dt); //g_debug ("Improp:: a= %d, b= %d, c= %d, d= %d", a, b, c, d); n += prepare_field_struct (stru, n, 1, astr); //g_debug ("tmp_fstr -> id= %d", tmp_fstr -> id); if (stru == 6) { v = dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][b], & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][a], & tmp_proj -> atoms[0][d]).angle; } else { v = inversion_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][a], & tmp_proj -> atoms[0][b], & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][d]).angle; } tmp_fstr -> av += v; tmp_fstr -> num ++; //g_debug ("tmp_fstr -> id = %d, tmp_fstr -> num = %d, v= %f, av= %f\n", tmp_fstr -> id, tmp_fstr -> num, v, tmp_fstr -> av); return n; } /*! \fn void init_all_impropers_inversions (int stru) \brief initialize all impropers and inversions \param stru 6 = improper(s), 7 = inversion(s) */ void init_all_impropers_inversions (int stru) { int i, j, k, l, m, n, p; int * atid, * matid; atid = allocint (tmp_proj -> coord -> cmax+1); matid = allocint (tmp_proj -> coord -> cmax+1); tmp_fmol -> first_struct[stru] = NULL; p = 0; for (i=0; i mol -> natoms; i++) { matid[0] = tmp_fmol -> atoms_id[i][0].a; j = tmp_fmol -> atoms_id[i][0].b; k = atid[0] = get_active_atom (tmp_fmol -> id, matid[0]) -> list[j]; if ((tmp_proj -> atoms[0][k].numv > 2 && stru == 6) || (tmp_proj -> atoms[0][k].numv == 3 && stru == 7)) { for (m=0; m atoms[0][k].numv; m++) { atid[m+1] = tmp_proj -> atoms[0][k].vois[m]; l = tmp_proj -> atoms[0][k].vois[m]; matid[m+1] = tmp_proj -> atoms[0][l].faid; } if (stru == 6) { for (l=0; l atoms[0][k].numv-2; l++) { for (m=l+1; m atoms[0][k].numv-1; m++) { for (n=m+1; n atoms[0][k].numv; n++) { p = impropers_inversion (p, stru, matid[0], matid[l+1], matid[m+1], matid[n+1], atid[0], atid[l+1], atid[m+1], atid[n+1]); p = impropers_inversion (p, stru, matid[0], matid[l+1], matid[n+1], matid[m+1], atid[0], atid[l+1], atid[n+1], atid[m+1]); p = impropers_inversion (p, stru, matid[0], matid[m+1], matid[n+1], matid[l+1], atid[0], atid[m+1], atid[n+1], atid[l+1]); } } } } else { p = impropers_inversion (p, stru, matid[0], matid[1], matid[2], matid[3], atid[0], atid[1], atid[2], atid[3]); p = impropers_inversion (p, stru, matid[0], matid[2], matid[1], matid[3], atid[0], atid[2], atid[1], atid[3]); p = impropers_inversion (p, stru, matid[0], matid[3], matid[1], matid[2], atid[0], atid[3], atid[1], atid[2]); } } } tmp_fmol -> nstruct[stru] = p; tmp_fstr = tmp_fmol -> first_struct[stru]; for (i=0; i nstruct[stru]; i++) { tmp_fstr -> def -> use = FALSE; tmp_fstr -> av /= tmp_fstr -> num; if (tmp_fstr -> next != NULL) tmp_fstr = tmp_fstr -> next; } g_free (atid); g_free (matid); } /*! \fn int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id) \brief get coord sphere multiplicity in the model \param at the target atom in the model \param id the atom id in the fragment \param set_atom_id adjust field atom parameters (yes / no) */ int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id) { int j, k, l, m; gboolean not_alone; multi = 0; a_multi = 0; tmp_fct = tmp_fmol -> first_atom; while (tmp_fct) { if (tmp_fct -> sp == at -> sp) { for (j=0; j num; j++) { k = tmp_fct -> list[j]; not_alone = TRUE; if (k != at -> id) { for (l=0; l<2; l++) { if (tmp_proj -> atoms[0][k].coord[l] != at -> coord[l]) { not_alone = FALSE; break; } } if (not_alone) { multi ++; if (tmp_fct -> id == tmp_fat -> id) a_multi ++; if (set_atom_id) { l = tmp_proj -> atoms[0][k].coord[2]; for (m=1; m multi; m++) { if (l == tmp_fmol -> fragments[m]) { tmp_fmol -> atoms_id[id][m].a = tmp_fct -> id; tmp_fmol -> atoms_id[id][m].b = j; tmp_fct -> list_id[j] = id; } } } } } } } tmp_fct = tmp_fct -> next; } return multi; } int assigned; int * i_weight; // For the molecule, indice = atom id for the molecule int * n_weight; // For the analyzed multi, indice = atom id for the project field_neighbor * init_ngb = NULL; /*! \fn field_neighbor * get_init_neighbor (int a) \brief retrieve neighbor data structure for atom a \param a the atom id in the fragment */ field_neighbor * get_init_neighbor (int a) { field_neighbor * ngb = NULL; ngb = init_ngb; while (ngb) { if (ngb -> id == a) break; ngb = ngb -> next; } return ngb; } /*! \fn gboolean is_numbering_possible (int frag) \brief compare if the atom numbering of two fragment(s) are identical, and it should \param frag the fragment id */ gboolean is_numbering_possible (int frag) { int i, j, k, l, m, n, o , p; field_neighbor * ngma, * ngmb; field_atom* fat, * fbt; for (i=0; i mol -> natoms-1; i++) { if (tmp_fmol -> atoms_id[i][frag].a > -1 && tmp_fmol -> atoms_id[i][frag].b > -1) { ngma = get_init_neighbor (i); j = tmp_fmol -> atoms_id[i][frag].a; k = tmp_fmol -> atoms_id[i][frag].b; fat = get_active_atom(tmp_fmol -> id, j); l = fat -> list[k]; for (m=i+1; m mol -> natoms; m++) { if (tmp_fmol -> atoms_id[m][frag].a > -1 && tmp_fmol -> atoms_id[m][frag].b > -1) { ngmb = get_init_neighbor (m); n = tmp_fmol -> atoms_id[m][frag].a; o = tmp_fmol -> atoms_id[m][frag].b; fbt = get_active_atom(tmp_fmol -> id, n); p = fbt -> list[o]; if (are_in_bond (tmp_proj -> atoms[0][l], p) != are_neighbors (ngma, m)) { return FALSE; } if (are_in_bond (tmp_proj -> atoms[0][p], l) != are_neighbors (ngmb, i)) { return FALSE; } } } } } return TRUE; } /*! \fn gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom) \brief check if the id in fragment for this atom is possible or not \param frag the fragment id \param ngma the neigbbor data structure for this fragment \param atom the atom id in the model */ gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom) { int m, n, o, p; field_atom* fbt; for (m=0; m mol -> natoms; m++) { if (m != ngma -> id) { if (tmp_fmol -> atoms_id[m][frag].a > -1 && tmp_fmol -> atoms_id[m][frag].b > -1) { n = tmp_fmol -> atoms_id[m][frag].a; o = tmp_fmol -> atoms_id[m][frag].b; fbt = get_active_atom(tmp_fmol -> id, n); p = fbt -> list[o]; if (are_in_bond (tmp_proj -> atoms[0][atom], p) != are_neighbors (ngma, m)) { return FALSE; } } } } return TRUE; } /*! \fn int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it) \brief find / set up field atom data for a fragment \param frag the fragment id \param aid the atom id in the model \param fai the atom id in the fragment \param fat the field atom \param ngmb the neighbor(s) list for the fragment \param sid iter to save \param save_it save field atom data (yes / no) */ int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it) { int i, j, k; int iter = 0; i = fat -> num / tmp_fmol -> multi; for (j=frag*i; j < (frag+1)*i; j++) { if (fat -> list_id[j] < 0) { k = fat -> list[j]; if (are_in_bond (tmp_proj -> atoms[0][k], aid)) { //g_debug ("Are linked, n_weight[%d]= %d, i_weight[%d]= %d", k+1, n_weight[k], j+1, i_weight[j]); if (n_weight[k] == i_weight[ngmb -> id]) { tmp_fmol -> atoms_id[fai][frag].a = fat -> id; tmp_fmol -> atoms_id[fai][frag].b = j; fat -> list_id[j] = fai; if (save_it && iter == sid) return k; if (is_this_numbering_possible_for_this_atom (frag, ngmb, k)) iter ++; tmp_fmol -> atoms_id[fai][frag].a = -1; tmp_fmol -> atoms_id[fai][frag].b = -1; fat -> list_id[j] = -1; } } } } return iter; } /*! \fn gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init) \brief find atom id in fragment using the neighbor list \param frag the fragment id \param limit the total number of atom(s) in the fragment \param num_ngb the neighbor(s) list for the fragment \param search_type search type (0 = browse field molecule atom list, 1 = browse field atom list) \param init the atom id in the model \param ngma_init the target */ gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init) { int i, j, k, l, m, n, o, p, q, r, s, t; field_neighbor * ngma, * ngmb, * ngmc; field_atom* fat, * fbt; if (assigned < limit) { if (search_type) { i = ngma_init -> id; j = tmp_fmol -> atoms_id[i][frag].a; for (k=0; k num; k++) { l = ngma_init -> vois[k]; ngma = get_init_neighbor (l); if (tmp_fmol -> atoms_id[l][frag].a < 0 && tmp_fmol -> atoms_id[l][frag].b < 0) { if (ngma -> num > num_ngb) { m = tmp_fmol -> atoms_id[l][0].a; fat = get_active_atom (tmp_fmol -> id, m); n = find_neighbor_loop (frag, init, l, fat, ngma, 0, FALSE); for (o=0; o mol -> natoms; q++) { if (q != l && tmp_fmol -> atoms_id[q][frag].a > -1 && tmp_fmol -> atoms_id[q][frag].b > -1) { ngmb = get_init_neighbor(q); t = 0; for (r=0; r num; r++) { s = ngmb -> vois[r]; ngmc = get_init_neighbor(s); if (tmp_fmol -> atoms_id[s][frag].a < 0 && tmp_fmol -> atoms_id[s][frag].b < 0 && ngmc -> num > num_ngb) t ++; } if (t) { r = tmp_fmol -> atoms_id[q][frag].a; fbt = get_active_atom (tmp_fmol -> id, r); s = tmp_fmol -> atoms_id[q][frag].b; t = fbt -> list[s]; if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 1, t, ngmb)) { return TRUE; } } } } if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 0, -1, NULL)) { return TRUE; } else { assigned --; tmp_fmol -> atoms_id[l][frag].a = -1; p = tmp_fmol -> atoms_id[l][frag].b; fat -> list_id[p] = -1; tmp_fmol -> atoms_id[l][frag].b = -1; } } } } } } return FALSE; } else { for (i=0; i mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][frag].a < 0 && tmp_fmol -> atoms_id[i][frag].b <0) { j = 0; ngma = get_init_neighbor (i); if (ngma -> num > num_ngb) { for (k=0; k natomes; k++) { if (tmp_proj -> atoms[0][k].coord[2] == tmp_fmol -> fragments[frag]) { j ++; if ((n_weight[k] == i_weight[i]) && (ngma -> num == tmp_proj -> atoms[0][k].numv)) { if (get_atom_id_in_fragment_from_model_id (frag, k) < 0) { assigned ++; l = get_field_atom_id_from_model_id (tmp_fmol, k); tmp_fmol -> atoms_id[i][frag].a = l; m = get_position_in_field_atom_from_model_id (l, k); tmp_fmol -> atoms_id[i][frag].b = m; get_active_atom(tmp_fmol -> id, l) -> list_id[m] = i; if (is_this_numbering_possible_for_this_atom (frag, ngma, k)) { if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 1, k, ngma)) { return TRUE; } else if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 0, -1, NULL)) { return TRUE; } } tmp_fmol -> atoms_id[i][frag].a = -1; tmp_fmol -> atoms_id[i][frag].b = -1; get_active_atom(tmp_fmol -> id, l) -> list_id[m] = -1; assigned --; } } if (j == tmp_fmol -> mol -> natoms) { break; } } } return FALSE; } } } return FALSE; } } else { return TRUE; } } /*! \fn gboolean id_atoms_in_fragment (int frag, int seed) \brief find the atom field id in the fragment \param frag the fragment id \param seed seed */ gboolean id_atoms_in_fragment (int frag, int seed) { int i, j; i = 0; for (j=0; j natomes; j++) { if (tmp_proj -> atoms[0][j].coord[2] == tmp_fmol -> fragments[frag]) { if (tmp_proj -> atoms[0][j].numv > 1) i++; } } if (seed > -1) { field_neighbor * ngb = get_init_neighbor (seed); if (id_n_fold_atoms_in_fragment (frag, i, 1, 0, seed, ngb)) { return id_n_fold_atoms_in_fragment (frag, tmp_fmol -> mol -> natoms, 0, 0, seed, ngb); } else { return FALSE; } } else { if (id_n_fold_atoms_in_fragment (frag, i, 1, 0, -1, NULL)) { return id_n_fold_atoms_in_fragment (frag, tmp_fmol -> mol -> natoms, 0, 0, -1, NULL); } else { return FALSE; } } } /*! \fn void get_weight (int seq) \brief compute field weigth for the atom(s) in the model \param seq weighting sequence */ void get_weight (int seq) { int h, i, j, k; for (i=0; i natomes; i++) { for (j=0; j atoms[0][i].numv; j++) { k = tmp_proj -> atoms[0][i].vois[j]; n_weight[i] += tmp_proj -> atoms[0][k].numv; } } int * weight = duplicate_int (tmp_proj -> natomes, n_weight); for (h=1; h natomes; i++) { for (j=0; j atoms[0][i].numv; j++) { k = tmp_proj -> atoms[0][i].vois[j]; weight[i] += n_weight[k]; } } for (i=0; i natomes; i++) { n_weight[i] = weight[i]; } } g_free (weight); #ifdef DEBUG /*for (i=0; i natomes; i++) { j = tmp_proj -> atoms[0][i].sp; g_debug ("N_WEIGHT:: %s i= %d, n_weight[i] = %d", tmp_proj -> chemistry -> label[j], i+1, n_weight[i]); }*/ #endif } /*! \fn int setup_atomic_weight (int seq) \brief setup atom(s) field weight \param seq weighting sequencce */ int setup_atomic_weight (int seq) { int h, i, j, k, l; field_neighbor * ngm; i_weight = allocint (tmp_fmol -> mol -> natoms); init_ngb = NULL; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == tmp_fmol -> fragments[0]) { if (init_ngb) { ngm -> next = g_malloc0(sizeof*ngm); ngm -> next -> prev = ngm; ngm = ngm -> next; } else { init_ngb = g_malloc0(sizeof*init_ngb); ngm = init_ngb; } ngm -> num = tmp_proj -> atoms[0][i].numv; ngm -> vois = duplicate_int (ngm -> num, tmp_proj -> atoms[0][i].vois); j = get_atom_id_in_fragment_from_model_id (0, i); ngm -> id = j; for (k=0; k num; k++) { l = ngm -> vois[k]; ngm -> vois[k] = get_atom_id_in_fragment_from_model_id (0, l); i_weight[j] += tmp_proj -> atoms[0][l].numv; } } } int * weight = duplicate_int (tmp_fmol -> mol -> natoms, i_weight); for (h=1; h mol -> natoms; i++) { ngm = get_init_neighbor (i); if (ngm) { for (j=0; j num; j++) { k = ngm -> vois[j]; weight[i] += i_weight[k]; } } } for (i=0; i mol -> natoms; i++) { i_weight[i] = weight[i]; } } #ifdef DEBUG /*field_atom* fat; for (i=0; i mol -> natoms; i++) { fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); j = tmp_fmol -> atoms_id[i][0].b; k = fat -> list[j]; l = tmp_proj -> atoms[0][k].sp; g_debug ("I_WEIGHT:: %s i= %d, i_weight[i] = %d", tmp_proj -> chemistry -> label[l], i, i_weight[i]); }*/ #endif g_free (weight); int seed = -1; for (i=0; i mol -> natoms; i++) { seed = i; for (j=0; j mol -> natoms; j++) { if (j!=i) { if (i_weight[i] == i_weight[j]) { seed = -1; break; } } } if (seed > -1) break; } get_weight (seq); return seed; } /*! \fn void find_atom_id_in_field_molecule () \brief find field atom id in field molecule (fragment multiplicity > 1) */ void find_atom_id_in_field_molecule () { int i, j, k, l; gboolean sym = FALSE; gboolean done; int ** coordnum; int start = 1; int seed = -1; assigned = 0; coordnum = allocdint (tmp_proj -> nspec, tmp_coord -> totcoord[1]); tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (tmp_fat -> num == tmp_fmol -> multi) { i = tmp_fat -> list_id[0]; // Multiplicity = num of atoms ... // Unic atom, ie. as much as identical molecular fragments for (j=1; j multi; j++) { for (k=1; k num; k++) { l = tmp_fat -> list[k]; if (tmp_proj -> atoms[0][l].coord[2] == tmp_fmol -> fragments[j]) { tmp_fmol -> atoms_id[i][j].a = tmp_fmol -> atoms_id[i][0].a; tmp_fmol -> atoms_id[i][j].b = k; tmp_fat -> list_id[j] = i; break; } } } assigned ++; } tmp_fat = tmp_fat -> next; } for (i=0; i< tmp_fmol -> mol -> natoms; i++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); done = TRUE; for (j=0; j num; j++) { if (tmp_fat -> list_id[j] < 0) { done = FALSE; break; } } if (! done) { j = tmp_fmol -> atoms_id[i][0].b; k = tmp_fat -> list[j]; l = coord_sphere_multiplicity (& tmp_proj -> atoms[0][k], i, FALSE); coordnum[tmp_proj -> atoms[0][k].sp][tmp_proj -> atoms[0][k].coord[1]] = l+1; if (l == tmp_fmol -> multi - 1 || a_multi == tmp_fmol -> multi - 1) { coord_sphere_multiplicity (& tmp_proj -> atoms[0][k], i, TRUE); assigned ++; } } } for (i=0; i nspec; i++) { for (j=0; j totcoord[1]; j++) { if (coordnum[i][j] > 1 && coordnum[i][j] % tmp_fmol -> multi != 0) g_debug ("This should not happen"); coordnum[i][j] /= tmp_fmol -> multi; } } for (k=6; k>0; k--) { sym = TRUE; for (i=0; i nspec; i++) { for (j=0; j totcoord[1]; j++) { if (coordnum[i][j] > 1 && coordnum[i][j] >= k && coordnum[i][j] % k != 0) sym = FALSE; } } if (sym) break; } g_free (coordnum); if (assigned < tmp_fmol -> mol -> natoms) { #ifdef DEBUG if ((sym || assigned == 0)) { g_debug ("Molecule seems to be symmetric, k= %d", k); g_debug ("Mol -> id: %d", tmp_fmol -> id); g_debug ("Mol -> multi= %d", tmp_fmol -> multi); g_debug ("Mol -> field atoms= %d", tmp_fmol -> atoms); g_debug ("Mol -> atomes= %d", tmp_fmol -> mol -> natoms); g_debug ("Assigned so far= %d", assigned); } #endif // k is a weight factor // The values of the total coord of each atom's neighbors // is sum k times over, this is a safety for systems with // a peculiar symetry, otherwise it could be very very long k = 3; j = assigned; gboolean done = FALSE; if (n_weight) g_free (n_weight); n_weight = NULL; n_weight = allocint (tmp_proj -> natomes); while (! done && (seed < 0 || (tmp_fmol -> mol -> natoms && k < tmp_fmol -> mol -> natoms))) { seed = setup_atomic_weight (k); if (seed < 0) k ++; done = TRUE; } #ifdef DEBUG g_debug ("Assigning using: seed= %d, w_factor= %d", seed, k); #endif for (i=start; i multi; i++) { #ifdef DEBUG g_debug (" -> fragment id: %d", i+1); #endif assigned = j; while (! id_atoms_in_fragment (i, seed) && k < tmp_fmol -> mol -> natoms) { #ifdef DEBUG g_debug ("**********************************"); g_debug ("*** NOT ABLE TO ASSIGN NUMBERS ***"); g_debug ("*** Mol -> Id= %3d ***", tmp_fmol -> id); g_debug ("*** Mol -> Multi= %3d ***", tmp_fmol -> multi); g_debug ("*** Fragment= %3d ***", i+1); g_debug ("*** k= %3d ***", k); g_debug ("*** assigned= %10d ***", assigned); g_debug ("**********************************"); #endif k ++; if (n_weight) g_free (n_weight); n_weight = NULL; n_weight = allocint (tmp_proj -> natomes); seed = setup_atomic_weight (k); } for (l=0; l natomes; l++) { if (tmp_proj -> atoms[0][l].coord[2] == tmp_fmol -> fragments[i]) { tmp_proj -> atoms[0][l].faid = get_field_atom_id_from_model_id (tmp_fmol, l); tmp_proj -> atoms[0][l].fid = get_atom_id_in_fragment_from_model_id (i, l); } } #ifdef DEBUG g_debug (" -> done !"); #endif } } if (i_weight) g_free (i_weight); i_weight = NULL; if (n_weight) g_free (n_weight); n_weight = NULL; if (init_ngb) g_free (init_ngb); init_ngb = NULL; #ifdef DEBUG g_debug ("Assigning completed !"); #endif } /*! \fn void clean_field_struct_list (field_struct * stru) \brief clean force field structural property(ies) \param stru */ void clean_field_struct_list (field_struct * stru) { while (stru) { if (stru -> next) { stru = stru -> next; g_free (stru -> prev); } else { g_free (stru); stru = NULL; } } } /*! \fn void init_all_field_struct (gboolean init) \brief initialize the force field structural properties for a field molecule \param init search for the atom(s) force field id number(s) */ void init_all_field_struct (gboolean init) { int i; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == tmp_fmol -> fragments[0]) { tmp_proj -> atoms[0][i].faid = get_field_atom_id_from_model_id (tmp_fmol, i); tmp_proj -> atoms[0][i].fid = get_atom_id_in_fragment_from_model_id (0, i); } } if (tmp_fmol -> multi > 1 && init) find_atom_id_in_field_molecule (); for (i=0; i<8; i++) { tmp_fmol -> nstruct[i] = 0; if (tmp_fmol -> first_struct[i] && tmp_fmol -> nstruct[i]) { clean_field_struct_list (tmp_fmol -> first_struct[i]); } tmp_fmol -> first_struct[i] = NULL; } // Bonds start astr = g_malloc0(2*sizeof*astr); init_all_bonds (); g_free (astr); if (tmp_fmol -> nstruct[0] > 0) { tmp_fmol -> first_struct[1] = duplicate_field_struct_list (tmp_fmol -> first_struct[0], TRUE); tmp_fmol -> nstruct[1] = tmp_fmol -> nstruct[0]; } // Bonds end // Angle start astr = g_malloc0(3*sizeof*astr); init_all_angles (); g_free (astr); if (tmp_fmol -> nstruct[2] > 0) { tmp_fmol -> nstruct[3] = tmp_fmol -> nstruct[2]; tmp_fmol -> first_struct[3] = duplicate_field_struct_list (tmp_fmol -> first_struct[2], TRUE); } // Angle end // Dihedral start astr = g_malloc0(4*sizeof*astr); init_all_dihedrals (); // Torsional restraints if (tmp_fmol -> nstruct[4] > 0) { tmp_fmol -> nstruct[5] = tmp_fmol -> nstruct[4]; tmp_fmol -> first_struct[5] = duplicate_field_struct_list (tmp_fmol -> first_struct[4], TRUE); } // Improper and inversion angles for (i=6; i<8; i++) init_all_impropers_inversions (i); g_free (astr); } /*! \fn void init_field_molecule (int i) \brief initialiaze of field molecule data structurre \param i the id of the field molecule to initialize */ void init_field_molecule (int i) { int j, k; tmp_fmol -> id = i; tmp_fmol -> multi = tmp_mol -> multiplicity; tmp_fmol -> name = g_strdup_printf("MOL-%d", i+1); tmp_fmol -> fragments = NULL; tmp_fmol -> fragments = allocint (tmp_fmol -> multi); for (j=0; j multi; j++) { tmp_fmol -> fragments[j] = tmp_mol -> fragments[j]; } tmp_fmol -> mol = tmp_mol; // Atoms start id_atom = -1; tmp_fmol -> atoms_id = g_malloc0(tmp_mol -> natoms*sizeof*tmp_fmol -> atoms_id); for (j=0; j natoms; j++) { tmp_fmol -> atoms_id[j] = g_malloc0(tmp_fmol -> multi*sizeof*tmp_fmol -> atoms_id[j]); for (k=0; k multi; k++) { tmp_fmol -> atoms_id[j][k].a = -1; tmp_fmol -> atoms_id[j][k].b = -1; } } init_all_atoms (i); // Atoms end // setup_field_molecule_neighbors (i, tmp_proj); tmp_fmol -> shells = 0; // Field struct init_all_field_struct (TRUE); tmp_fmol -> shells = 0; tmp_fmol -> first_shell = NULL; tmp_fmol -> constraints = 0; tmp_fmol -> first_constraint = NULL; tmp_fmol -> pmfs = 0; tmp_fmol -> first_pmf = NULL; tmp_fmol -> rigids = 0; tmp_fmol -> first_rigid = NULL; tmp_fmol -> tethered = 0; tmp_fmol -> first_tethered = NULL; tmp_fmol -> show = FALSE; tmp_fmol -> show_id = FALSE; tmp_fmol -> next = NULL; tmp_fmol -> prev = NULL; } /*! \fn int init_vdw (gboolean init) \brief initialize the VdW section of a classical force field \param init */ int init_vdw (gboolean init) { int nvdw; int i, j, k, l; tmp_fmol = tmp_field -> first_molecule; i = 0; while (tmp_fmol) { i += tmp_fmol -> atoms; tmp_fmol = tmp_fmol -> next; } nvdw = i; gchar ** to_be_vdw = g_malloc0(nvdw*sizeof*to_be_vdw); int * vdw_mlist = allocint (nvdw); int ** vdw_aids = allocdint (nvdw,nvdw); int ** vdw_mids = allocdint (nvdw,nvdw); int vdw_na[2]; int * vdw_a[2], * vdw_ma[2]; gboolean add_vdw; i = 0; tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { add_vdw = TRUE; for (j=0; j name) == 0) { add_vdw = FALSE; vdw_mlist[j] ++; vdw_mids[j][vdw_mlist[j]] = tmp_fmol -> id; vdw_aids[j][vdw_mlist[j]] = tmp_fat -> id; break; } } if (add_vdw) { to_be_vdw[j] = g_strdup_printf ("%s", tmp_fat -> name); vdw_mids[j][0] = tmp_fmol -> id; vdw_aids[j][0] = tmp_fat -> id; i ++; } tmp_fat = tmp_fat -> next; } tmp_fmol = tmp_fmol -> next; } j = 0 ; tmp_fbody = NULL; for (k=0; k first_body[0] = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody = tmp_field -> first_body[0]; } else { comp_fbody = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody = comp_fbody; } } else { tmp_fbody -> next = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody -> next -> prev = tmp_fbody; tmp_fbody = tmp_fbody -> next; } j ++; } for (k=0; k next = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody -> next -> prev = tmp_fbody; tmp_fbody = tmp_fbody -> next; j ++; } } g_free (to_be_vdw); g_free (vdw_aids); g_free (vdw_mids); g_free (vdw_mlist); return j; } /*! \fn void init_dlpoly_field (classical_field * new_field) \brief initialize DL-POLY classical force field \param new_field the force field to initialize */ void init_dlpoly_field (classical_field * new_field) { // Preparing DLPOLY Control file new_field -> sys_opts = allocdouble (17); new_field -> io_opts = allocdouble (23); new_field -> ana_opts = allocdouble (17); new_field -> elec_opts = allocdouble (11); new_field -> vdw_opts = allocdouble (6); new_field -> met_opts = allocdouble (2); new_field -> equi_opts = allocdouble (17); new_field -> thermo_opts= allocdouble (10); new_field -> md_opts = allocdouble (20); new_field -> out_opts = allocdouble (31); /* new_field -> io_opts[] */ // Set job time control (yes/no) new_field -> io_opts[0] = 1.0; // Job time control (s): new_field -> io_opts[1] = 10000.0; // Set job closure time (yes/no) new_field -> io_opts[2] = 1.0; // Job closure time (s): new_field -> io_opts[3] = 100.0; // 4 (1/0) General I/O read interace // 5 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Reader count: new_field -> io_opts[6] = 12; // Batch size: new_field -> io_opts[7] = 2000000; // Buffer size: new_field -> io_opts[8] = 20000; // 9 (1/0) Error check on general read I/O // 10 (1/0) General I/O write interace // 11 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Real precision (0 = 32 bits, 1= 64 bits) new_field -> io_opts[12] = 1; // 13 Type (0= Sorted, 1= Unsorted) // Reader count: new_field -> io_opts[14] = 12; // Batch size: new_field -> io_opts[15] = 2000000; // Buffer size: new_field -> io_opts[16] = 20000; // 17 (1/0) Error check on general write I/O // 18 (1/0) Define random number generator seeds // n1 seed: new_field -> io_opts[19] = 1; // n2 seed: new_field -> io_opts[20] = 20; // n3 seed: new_field -> io_opts[21] = 300; // 22 (1/0) limit the number of processors in the z direction /* new_field -> sys_opts[] */ // Relative dieletric constant: new_field -> sys_opts[0] = 1.0; // 1 = allowed local variation of the system density (%) // 2 (1/0) Ingore the particle indices in CONFIG file // 3 (1/0) Ignore strict checks // 4 (1/0) Skip detailed topology reporting // 5 (1/0) Ignore center of mass removal // 6 (1/0) Set tolerance of the relaxed shell model // Tolerance for the relaxed shell model: new_field -> sys_opts[7] = 1.0; // 8 (1/0) Set the subscelling threshold density of particles per link cell // Subscelling threshold density of particles per link cell: new_field -> sys_opts[9] = 50.0; // 10 (1/0) Create an expanded version of the current model ... // ... on x: new_field -> sys_opts[11] = 1.0; // ... on y: new_field -> sys_opts[12] = 1.0; // .. on z: new_field -> sys_opts[13] = 1.0; // 14 (1/0) Restart a calculation // 15 (0= Continue current, 1= Start new without T reset, 2= Start new with T reset) /* new_field -> equi_opts[] */ new_field -> equi_opts[0] = 1.0; // Equilibrate for the first N steps, N= new_field -> equi_opts[1] = 20.0; // Scale temperature every N steps, N= new_field -> equi_opts[3] = 1.0; // Cap forces fmax= new_field -> equi_opts[5] = 1000.0; // Resample the momenta distribution during N steps N= new_field -> equi_opts[7] = 1.0; // 8 (1/0) = Minimize system configuration // 9 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[10] = 50.0; // Minimization to be done every N steps, N= new_field -> equi_opts[11] = 1.0; // 12 (1/0) = Optimize system configuration from start // 13 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[14] = 50.0; // 15 (1/0) = Perform zero temperature (10K) optimization // 16 (1/0) = Include equilibration data in statistics /* new_field -> vdw_opts[] */ // Vdw cutoff // 0 (1/0) Use VdW interactions new_field -> vdw_opts[0] = 1.0; // Vdw Cutoff radius new_field -> vdw_opts[1] = 12.0; // 2 (1/0) Enforce direct VdW calculation // 3 (1/0) Apply force shifting // 4 (1/0) Apply mixing rule // 5 Mixing rule (0= LB, 1= FH, 2= H, 3= HHG, 4= TT, 5= F) /* new_field -> elec_opts[] */ // 0 (1/0) Evaluate electrostatics new_field -> elec_opts[0] = 1.0; // Long range cutoff: new_field -> elec_opts[1] = 12.0; // 2 (1/0) Add padding to rcut // 3 Padding in angstrom // 4 (1/0) Use extended coulombic exclusion // 5 Electrostatic calculation method (0= Direct, ...) new_field -> elec_opts[5] = 2.0; // Ewald precision: new_field -> elec_opts[6] = 1e-20; // 7 to 9 method options // 10 Evaluation every N steps, N= tmp_field -> elec_opts[10] = 1.0; /* new_field -> met_opts[] */ // 0 (1/0) Enable direct calculation of metal interactions // 1 (1/0) Switch the default embeding fuctions // Ensemble (0= NVE, 1= NVT, 2= NPT, 4= NST) // new_field -> ensemble // Thermostat = f(ensemble): // new_field -> thermostat /* new_field -> thermo_opts[] */ // 0-5 ensemble + thermostat related options // 6 (1/0) Use pseudo thermal bath // 7 Thermostat type (0= L+D, 1= L, 2= G, 3= D) // Thickness: new_field -> thermo_opts[8] = 2.0; // 9 = Target temperature /* new_field -> md_opts[] */ // MD target temperature (K) new_field -> md_opts[0] = 300.0; // 1 Verlet integrator (0 = velocity, 1 = leapfrog) // Number of MD steps: new_field -> md_opts[2] = 100.0; // 3 Time step (0 = fixed, 1 = variable) // Time step delta(t)= (ps) new_field -> md_opts[4] = 0.001; // Target pressure (katms): new_field -> md_opts[5] = 0.001; // Variable time step, maximum time step: new_field -> md_opts[6] = 0.001; // Variable time step, maximum distance allowed: new_field -> md_opts[7] = 0.5; // Variable time step, minimun distance allowed: new_field -> md_opts[8] = 0.01; // Shake iterations limit, in cycles: new_field -> md_opts[9] = 250.0; // Shake tolerance: new_field -> md_opts[10] = 1e-6; // FIQA iterations limit, in cycles: new_field -> md_opts[11] = 100; // FIQA quaternions tolerance: new_field -> md_opts[12] = 1e-8; // 13 (1/0) Initiate impact on particles // Index if the particle to impact: new_field -> md_opts[14] = 1.0; // Time step of the impact: new_field -> md_opts[15] = 1.0; // Energy of the imapct (keV): new_field -> md_opts[16] = 1.0; // Direction of the impact (from center of mass) ... // ... on x: new_field -> md_opts[17] = 1.0; // ... on y: new_field -> md_opts[18] = 1.0; // ... on z: new_field -> md_opts[19] = 1.0; /* new_field -> out_opts[] */ // 0 (1/0) Print Defect file ... // 1 ... starting from step // ... every N steps, N= new_field -> out_opts[2] = 1.0; // ... with a site inteerstitial cutoff: new_field -> out_opts[3] = 0.75; // 4 (1/0) Print Displacement file .. // 5 ... starting from step // ... every N steps, N= new_field -> out_opts[6] = 1.0; // ... with a qualifying cutoff: new_field -> out_opts[7] = 0.15; // 8 (1/0) Print HISTORY file ... // 9 ... starting from step // ... every N steps, N= new_field -> out_opts[10] = 1.0; // 11 Data level (0, 1, 2) // 12 (1/0) Print Atom's MSD ... // 13 ... starting from step // ... every N steps, N= new_field -> out_opts[14] = 1.0; // 15 (1/0) Print system data ... // ... every N steps, N= new_field -> out_opts[16] = 1.0; // 17 (1/0) Accumulate statistics ... // ... every N steps, N= new_field -> out_opts[18] = 1.0; // 19 (1/0) Rolling average stack ... // ... to N steps, N= new_field -> out_opts[20] = 1.0; // 21 (1/0) RDF ... // ... every N steps, N= new_field -> out_opts[22] = 1.0; // ... with a bin size= new_field -> out_opts[23] = 0.05; // 24 (1/0) Overall VAF analysis ... // ... every N steps, N= new_field -> out_opts[25] = 1.0; // ... with a bin size= new_field -> out_opts[26] = 50.0; // 27 (1/0) Z density profile ... // ... every N steps, N= new_field -> out_opts[28] = 1.0; // 29 (1/0) ignoring time-av. VAFs // Dump restart information every N steps, N= new_field -> out_opts[30] = 1000.0; /* new_field -> ana_opts[] */ // 0 (1/0) Activate all intra-molecular PDF analysis ... // ... every N steps, N= new_field -> ana_opts[1] = 1.0; // ... number of delta r in: new_field -> ana_opts[2] = 100.0; // ... Cutoff: new_field -> ana_opts[3] = 2.0; // 4 (1/0) Activate bonds PDF analysis ... // ... every N steps, N= new_field -> ana_opts[5] = 1.0; // ... number of delta r in: new_field -> ana_opts[6] = 100.0; // ... Cutoff: new_field -> ana_opts[7] = 2.0; // 8 (1/0) Activate angles analysis ... // ... every N steps, N= new_field -> ana_opts[9] = 1.0; // ... number of delta angle in: new_field -> ana_opts[10] = 90.0; // 11 (1/0) Activate dihedrals analysis ... // ... every N steps, N= new_field -> ana_opts[12] = 1.0; // ... number of delta angle in: new_field -> ana_opts[13] = 90.0; // 14 (1/0) Activate inversions analysis ... // ... every N steps, N= new_field -> ana_opts[15] = 1.0; // ... number of delta angle in: new_field -> ana_opts[16] = 90.0; } /*! \fn void init_lammps_field (classical_field * new_field) \brief initialize a LAMMPS classical force field \param new_field the force field to initialize */ void init_lammps_field (classical_field * new_field) { // Preparing LAMMPS Control file new_field -> sys_opts = allocdouble (17); new_field -> io_opts = allocdouble (23); new_field -> ana_opts = allocdouble (17); new_field -> elec_opts = allocdouble (11); new_field -> vdw_opts = allocdouble (6); new_field -> met_opts = allocdouble (2); new_field -> equi_opts = allocdouble (17); new_field -> thermo_opts= allocdouble (10); new_field -> md_opts = allocdouble (20); new_field -> out_opts = allocdouble (31); /* new_field -> io_opts[] */ // Set job time control (yes/no) new_field -> io_opts[0] = 1.0; // Job time control (s): new_field -> io_opts[1] = 10000.0; // Set job closure time (yes/no) new_field -> io_opts[2] = 1.0; // Job closure time (s): new_field -> io_opts[3] = 100.0; // 4 (1/0) General I/O read interace // 5 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Reader count: new_field -> io_opts[6] = 12; // Batch size: new_field -> io_opts[7] = 2000000; // Buffer size: new_field -> io_opts[8] = 20000; // 9 (1/0) Error check on general read I/O // 10 (1/0) General I/O write interace // 11 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Real precision (0 = 32 bits, 1= 64 bits) new_field -> io_opts[12] = 1; // 13 Type (0= Sorted, 1= Unsorted) // Reader count: new_field -> io_opts[14] = 12; // Batch size: new_field -> io_opts[15] = 2000000; // Buffer size: new_field -> io_opts[16] = 20000; // 17 (1/0) Error check on general write I/O // 18 (1/0) Define random number generator seeds // n1 seed: new_field -> io_opts[19] = 1; // n2 seed: new_field -> io_opts[20] = 20; // n3 seed: new_field -> io_opts[21] = 300; // 22 (1/0) limit the number of processors in the z direction /* new_field -> sys_opts[] */ // Relative dieletric constant: new_field -> sys_opts[0] = 1.0; // 1 = allowed local variation of the system density (%) // 2 (1/0) Ingore the particle indices in CONFIG file // 3 (1/0) Ignore strict checks // 4 (1/0) Skip detailed topology reporting // 5 (1/0) Ignore center of mass removal // 6 (1/0) Set tolerance of the relaxed shell model // Tolerance for the relaxed shell model: new_field -> sys_opts[7] = 1.0; // 8 (1/0) Set the subscelling threshold density of particles per link cell // Subscelling threshold density of particles per link cell: new_field -> sys_opts[9] = 50.0; // 10 (1/0) Create an expanded version of the current model ... // ... on x: new_field -> sys_opts[11] = 1.0; // ... on y: new_field -> sys_opts[12] = 1.0; // .. on z: new_field -> sys_opts[13] = 1.0; // 14 (1/0) Restart a calculation // 15 (0= Continue current, 1= Start new without T reset, 2= Start new with T reset) /* new_field -> equi_opts[] */ new_field -> equi_opts[0] = 1.0; // Equilibrate for the first N steps, N= new_field -> equi_opts[1] = 20.0; // Scale temperature every N steps, N= new_field -> equi_opts[3] = 1.0; // Cap forces fmax= new_field -> equi_opts[5] = 1000.0; // Resample the momenta distribution during N steps N= new_field -> equi_opts[7] = 1.0; // 8 (1/0) = Minimize system configuration // 9 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[10] = 50.0; // Minimization to be done every N steps, N= new_field -> equi_opts[11] = 1.0; // 12 (1/0) = Optimize system configuration from start // 13 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[14] = 50.0; // 15 (1/0) = Perform zero temperature (10K) optimization // 16 (1/0) = Include equilibration data in statistics /* new_field -> vdw_opts[] */ // Vdw cutoff // 0 (1/0) Use VdW interactions new_field -> vdw_opts[0] = 1.0; // Vdw Cutoff radius new_field -> vdw_opts[1] = 12.0; // 2 (1/0) Enforce direct VdW calculation // 3 (1/0) Apply force shifting // 4 (1/0) Apply mixing rule // 5 Mixing rule (0= LB, 1= FH, 2= H, 3= HHG, 4= TT, 5= F) /* new_field -> elec_opts[] */ // 0 (1/0) Evaluate electrostatics new_field -> elec_opts[0] = 1.0; // Long range cutoff: new_field -> elec_opts[1] = 12.0; // 2 (1/0) Add padding to rcut // 3 Padding in angstrom // 4 (1/0) Use extended coulombic exclusion // 5 Electrostatic calculation method (0= Direct, ...) new_field -> elec_opts[5] = 2.0; // Ewald precision: new_field -> elec_opts[6] = 1e-20; // 7 to 9 method options // 10 Evaluation every N steps, N= tmp_field -> elec_opts[10] = 1.0; /* new_field -> met_opts[] */ // 0 (1/0) Enable direct calculation of metal interactions // 1 (1/0) Switch the default embeding fuctions // Ensemble (0= NVE, 1= NVT, 2= NPT, 4= NST) // new_field -> ensemble // Thermostat = f(ensemble): // new_field -> thermostat /* new_field -> thermo_opts[] */ // 0-5 ensemble + thermostat related options // 6 (1/0) Use pseudo thermal bath // 7 Thermostat type (0= L+D, 1= L, 2= G, 3= D) // Thickness: new_field -> thermo_opts[8] = 2.0; // 9 = Target temperature /* new_field -> md_opts[] */ // MD target temperature (K) new_field -> md_opts[0] = 300.0; // 1 Verlet integrator (0 = velocity, 1 = leapfrog) // Number of MD steps: new_field -> md_opts[2] = 100.0; // 3 Time step (0 = fixed, 1 = variable) // Time step delta(t)= (ps) new_field -> md_opts[4] = 0.001; // Target pressure (katms): new_field -> md_opts[5] = 0.001; // Variable time step, maximum time step: new_field -> md_opts[6] = 0.001; // Variable time step, maximum distance allowed: new_field -> md_opts[7] = 0.5; // Variable time step, minimun distance allowed: new_field -> md_opts[8] = 0.01; // Shake iterations limit, in cycles: new_field -> md_opts[9] = 250.0; // Shake tolerance: new_field -> md_opts[10] = 1e-6; // FIQA iterations limit, in cycles: new_field -> md_opts[11] = 100; // FIQA quaternions tolerance: new_field -> md_opts[12] = 1e-8; // 13 (1/0) Initiate impact on particles // Index if the particle to impact: new_field -> md_opts[14] = 1.0; // Time step of the impact: new_field -> md_opts[15] = 1.0; // Energy of the imapct (keV): new_field -> md_opts[16] = 1.0; // Direction of the impact (from center of mass) ... // ... on x: new_field -> md_opts[17] = 1.0; // ... on y: new_field -> md_opts[18] = 1.0; // ... on z: new_field -> md_opts[19] = 1.0; /* new_field -> out_opts[] */ // 0 (1/0) Print Defect file ... // 1 ... starting from step // ... every N steps, N= new_field -> out_opts[2] = 1.0; // ... with a site inteerstitial cutoff: new_field -> out_opts[3] = 0.75; // 4 (1/0) Print Displacement file .. // 5 ... starting from step // ... every N steps, N= new_field -> out_opts[6] = 1.0; // ... with a qualifying cutoff: new_field -> out_opts[7] = 0.15; // 8 (1/0) Print HISTORY file ... // 9 ... starting from step // ... every N steps, N= new_field -> out_opts[10] = 1.0; // 11 Data level (0, 1, 2) // 12 (1/0) Print Atom's MSD ... // 13 ... starting from step // ... every N steps, N= new_field -> out_opts[14] = 1.0; // 15 (1/0) Print system data ... // ... every N steps, N= new_field -> out_opts[16] = 1.0; // 17 (1/0) Accumulate statistics ... // ... every N steps, N= new_field -> out_opts[18] = 1.0; // 19 (1/0) Rolling average stack ... // ... to N steps, N= new_field -> out_opts[20] = 1.0; // 21 (1/0) RDF ... // ... every N steps, N= new_field -> out_opts[22] = 1.0; // ... with a bin size= new_field -> out_opts[23] = 0.05; // 24 (1/0) Overall VAF analysis ... // ... every N steps, N= new_field -> out_opts[25] = 1.0; // ... with a bin size= new_field -> out_opts[26] = 50.0; // 27 (1/0) Z density profile ... // ... every N steps, N= new_field -> out_opts[28] = 1.0; // 29 (1/0) ignoring time-av. VAFs // Dump restart information every N steps, N= new_field -> out_opts[30] = 1000.0; /* new_field -> ana_opts[] */ // 0 (1/0) Activate all intra-molecular PDF analysis ... // ... every N steps, N= new_field -> ana_opts[1] = 1.0; // ... number of delta r in: new_field -> ana_opts[2] = 100.0; // ... Cutoff: new_field -> ana_opts[3] = 2.0; // 4 (1/0) Activate bonds PDF analysis ... // ... every N steps, N= new_field -> ana_opts[5] = 1.0; // ... number of delta r in: new_field -> ana_opts[6] = 100.0; // ... Cutoff: new_field -> ana_opts[7] = 2.0; // 8 (1/0) Activate angles analysis ... // ... every N steps, N= new_field -> ana_opts[9] = 1.0; // ... number of delta angle in: new_field -> ana_opts[10] = 90.0; // 11 (1/0) Activate dihedrals analysis ... // ... every N steps, N= new_field -> ana_opts[12] = 1.0; // ... number of delta angle in: new_field -> ana_opts[13] = 90.0; // 14 (1/0) Activate inversions analysis ... // ... every N steps, N= new_field -> ana_opts[15] = 1.0; // ... number of delta angle in: new_field -> ana_opts[16] = 90.0; } /*! \fn classical_field * create_force_field_data_structure (int ai) \brief initialize classical force field \param ai how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) */ classical_field * create_force_field_data_structure (int ai) { int i; classical_field * new_field; new_field = g_malloc0(sizeof*new_field); tmp_field = new_field; new_field -> energy_unit = 1; new_field -> atom_init = ai; switch (activef) { case 0: init_dlpoly_field (new_field); break; case 1: init_lammps_field (new_field); break; } new_field -> molecules = tmp_proj -> modelfc -> mol_by_step[0]; new_field -> first_molecule = g_malloc0(sizeof*new_field -> first_molecule); tmp_fmol = new_field -> first_molecule; #ifdef DEBUG g_debug ("Total num of molecules: %d", tmp_proj -> modelfc -> mol_by_step[0]); #endif // DEBUG for (i=0; i < tmp_proj -> modelfc -> mol_by_step[0]; i++) { tmp_mol = & tmp_proj -> modelfc -> mols[0][i]; #ifdef DEBUG g_debug ("Init FORCE FIELD for: "); g_debug (" tmp_mol -> id= %d", tmp_mol -> id); g_debug (" tmp_mol -> multi= %d", tmp_mol -> multiplicity); g_debug (" tmp_mol -> natoms= %d", tmp_mol -> natoms); #endif // DEBUG init_field_molecule (i); if (i < tmp_proj -> modelfc -> mol_by_step[0]-1) { tmp_fmol -> next = g_malloc0(sizeof*tmp_fmol -> next); tmp_fmol = tmp_fmol -> next; } } for (i=0; i<5; i++) { tmp_field -> nbody[i] = 0; tmp_field -> first_body[i] = NULL; } // Tersoff cross terms tmp_field -> cross = NULL; // vdW start tmp_field -> nbody[0] = init_vdw (TRUE); // vdW end // External field(s) start new_field -> extern_fields = 0; new_field -> first_external = NULL; // External field(s) end // Non-bonded end return new_field; } atomes_1.3.1/src/calc/dl_poly/dlp_comp.c0000664000175000017500000001447115212624223017610 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_comp.c * @short Functions to compare and adjust field body parameters * @author Sébastien Le Roux */ /* * This file: 'dlp_comp.c' * * Contains: * - The functions to compare and adjust field body parameters * * List of functions: void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body); void compare_non_bonded (gchar * fatom); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" field_nth_body * comp_fbody; extern void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody); /*! \fn void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body) \brief compare, and if require ajdust, two lists of field body properties \param fatom the name of the field atom to search for \param new_body 1st list of field body property(ies) \param n_body the number of field body in this 1st list \param old_body 2nd list of field body property(ies) \param o_body the number of field body in this 2nd list */ void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body) { int i, j, k, l, m, n, o, p; field_nth_body * tmp_new = new_body; field_nth_body * tmp_old; field_nth_body * new_guy; field_nth_body * old_one; field_nth_body * new_one; gboolean doit; for (i=0; i ma[0][0], tmp_new -> a[0][0]) -> name) == 0 && g_strcmp0 (fatom, get_active_atom (tmp_new -> ma[1][0], tmp_new -> a[1][0]) -> name) == 0) new_guy = tmp_new; for (k=0; k<2; k++) { for (l=0; l<2; l++) { if (g_strcmp0 (get_active_atom (tmp_new -> ma[k][0], tmp_new -> a[k][0]) -> name, get_active_atom (tmp_old -> ma[l][0], tmp_old -> a[l][0]) -> name) == 0) doit = TRUE; if (doit) break; } if (g_strcmp0 (get_active_atom (tmp_new -> ma[k][0], tmp_new -> a[k][0]) -> name, get_active_atom (tmp_old -> ma[k][0], tmp_old -> a[k][0]) -> name) == 0) doit = TRUE; if (doit) break; } // Same atoms copy the body params if (doit) duplicate_nbody_params (tmp_new, tmp_old); if (tmp_old -> next != NULL) tmp_old = tmp_old -> next; } if (tmp_new -> next != NULL) tmp_new = tmp_new -> next; } for (i=1; i<5; i++) { tmp_fbody = tmp_field -> first_body[i]; k = body_at (i); new_one = get_active_body (tmp_field -> nbody[i], i); m = 0; for (j=0; j nbody[i]; j++) { for (l=0; l na[l] > 0) { doit = FALSE; for (n=0; n na[l]; n++) { if (g_strcmp0 (get_active_atom (tmp_fbody -> ma[l][n], tmp_fbody -> a[l][n]) -> name, fatom) == 0) { doit = TRUE; o = n; break; } } if (doit) { if (tmp_fbody -> na[l] > 1) { // Add new nth_body new_one -> next = duplicate_field_nth_body (tmp_fbody); old_one = duplicate_field_nth_body (tmp_fbody); new_one -> next -> prev = new_one; new_one = new_one -> next; new_one -> id ++; new_one -> na[l] = new_guy -> na[0]; new_one -> a[l] = duplicate_int (new_guy -> na[0], new_guy -> a[0]); new_one -> ma[l] = duplicate_int (new_guy -> na[0], new_guy -> ma[0]); p = 0; old_one -> na[l] --; old_one -> a[l] = NULL; old_one -> a[l] = g_malloc0(old_one -> na[l]*sizeof*old_one -> a[l]); old_one -> ma[l] = NULL; old_one -> ma[l] = g_malloc0(old_one -> na[l]*sizeof*old_one -> ma[l]); for (n=0; n na[l]; n++) { if (n != o) { old_one -> a[l][p] = tmp_fbody -> a[l][n]; old_one -> ma[l][p] = tmp_fbody -> ma[l][n]; } } tmp_fbody -> a[l] = NULL; tmp_fbody -> ma[l] = NULL; tmp_fbody -> na[l] --; tmp_fbody -> a[l] = duplicate_int (tmp_fbody -> na[l], old_one -> a[l]); tmp_fbody -> ma[l] = duplicate_int (tmp_fbody -> na[l], old_one -> ma[l]); m ++; } else if (tmp_fbody -> na[l] == 1) { tmp_fbody -> a[l][0] = new_guy -> a[0][0]; tmp_fbody -> ma[l][0] = new_guy -> ma[0][0]; } } } } if (tmp_fbody -> next != NULL) tmp_fbody = tmp_fbody -> next; } tmp_field -> nbody[i] += m; } tmp_field -> first_body[0] = NULL; tmp_field -> first_body[0] = duplicate_field_nth_body (new_body); tmp_new = tmp_field -> first_body[0]; tmp_old = new_body; for (i=1; i next = duplicate_field_nth_body (tmp_old -> next); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; tmp_old = tmp_old -> next; } tmp_field -> nbody[0] = n_body; } /*! \fn void compare_non_bonded (gchar * fatom) \brief compare non bond interaction parameters \param fatom the name of the target field atom */ void compare_non_bonded (gchar * fatom) { int nbody = init_vdw (FALSE); // comp_fbody is prepared in init_vdw compare_body (fatom, comp_fbody, nbody, tmp_field -> first_body[0], tmp_field -> nbody[0]); } atomes_1.3.1/src/calc/dl_poly/dlp_edit.c0000664000175000017500000034633415212624223017605 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_edit.c * @short Functions to edit DL-POLY force field parameters * @author Sébastien Le Roux */ /* * This file: 'dlp_edit.c' * * Contains: * - The functions to edit DL-POLY force field parameters * * List of functions: int get_num_vdw_max (); gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b); gboolean tersoff_question (); gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba); gchar * get_this_vdw_string (); gchar * field_str (int a); gchar * body_str (int a); gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key); void select_atom_set_color (GtkCellRenderer * renderer, int i); void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void update_field_dist (float v); void adjust_vdw_interactions (gboolean add_shell); void edit_parameters (int f, int id); void update_tersoffs (int id, int key); void check_tersoffs (int id, int key); G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data); G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * combo_cross (field_nth_body * body); GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data); GtkWidget * param_prop_param_box (int pid); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" #include "calc.h" extern int * atoms_id; extern int ** atoms_id_list; extern char *** ff_atoms; extern gchar * felemt[MAXDATA+1]; extern gchar * elemts[MAXDATA]; extern gchar * mo_title[8]; extern int fetypes[2][16]; extern void clean_up_molecules_info (gboolean usel); extern void select_object (int id, int jd, int kd); extern G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data); extern void field_selection (int i, int viz, int lab, int aid); extern void field_unselect_all (); extern void compare_non_bonded (gchar * fatom); extern void visualize_single_struct (int id, int jd, int kd, int * ids); extern void visualize_body (int viz, int bd, field_nth_body * body); extern void init_default_shaders (glwin * view); extern GtkWidget * create_field_prop_combo (int f, int is_moy); extern void check_atom_for_updates (); extern void check_to_visualize_properties_for_this_field_mol (int pid, int mol); extern GtkWidget * ff_p_combo[2]; GtkWidget * field_key_combo; GtkWidget * p_box; GtkWidget * cross_vbox, * cross_hbox; GtkWidget * param_box; GtkWidget * img_but[4]; GtkWidget * shell_but; GtkWidget * shell_hbox[3]; GtkWidget * shell_cbox[2]; GtkWidget * body_lab; GtkWidget * afftype; int is_moy; int * edit_atids; /*! \fn gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b) \brief are the 2 field property identicals ? \param ti the type of field property \param ai the number of field atoms for this field property \param pro_a 1st field property \param pro_b 2nd field property */ gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b) { if (pro_a -> key != pro_b -> key) return FALSE; if (pro_a -> use != pro_b -> use) return FALSE; if (pro_a -> show != pro_b -> show) return FALSE; int i; /*for (i=0; i aid[i] != pro_b -> aid[i]) return FALSE; }*/ for (i=0; i key]; i++) { if (pro_a -> val[i] != pro_b -> val[i]) return FALSE; } return TRUE; } /*! \fn void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key) \brief adjust field property \param fil the type of field property \param sti the number of field atoms for this type of field property \param tmp the pointer of the field property list \param ids the list of field atoms \param key the key value to adjust */ void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key) { int i, j, k, l; gboolean add; add = FALSE; field_prop * pro, * ptmp; if (ids[0] < 0) { // Default prop if (tmp == NULL) { // New val for default field prop tmp_fstr -> def = init_field_prop (fil, key, tmp_fstr -> def -> show, tmp_fstr -> def -> use); } else { tmp_fstr -> def = duplicate_field_prop (tmp, fil); } } else { // Not default, between specified atoms if (tmp != NULL) { pro = get_active_prop_using_atoms (tmp_fstr -> other, sti, ids); if (pro == NULL) { // No 'other' yet, but is it identical to default ? if (! are_identical_prop (fil+1, sti, tmp, tmp_fstr -> def)) { add = TRUE; } } else if (! are_identical_prop (fil+1, sti, tmp, pro)) { add = TRUE; } } else { if (tmp_fstr -> other == NULL) { add = TRUE; j = key; k = tmp_fstr -> def -> show; l = tmp_fstr -> def -> use; } else { pro = get_active_prop_using_atoms (tmp_fstr -> other, sti, ids); if (pro == NULL) { if (key != tmp_fstr -> def -> key) { add = TRUE; j = key; k = tmp_fstr -> def -> show; l = tmp_fstr -> def -> use; } } else if (key != pro -> key) { add = TRUE; j = key; } } } if (add) { if (tmp_fstr -> other == NULL) { if (tmp != NULL) { tmp_fstr -> other = duplicate_field_prop (tmp, fil); } else { tmp_fstr -> other = init_field_prop (fil, j, k, l); for (i=0; i other -> aid[i] = ids[i]; } } else if (pro == NULL) { pro = tmp_fstr -> other; while (pro -> next != NULL) pro = pro -> next; if (tmp != NULL) { pro -> next = duplicate_field_prop (tmp, fil); } else { pro -> next = init_field_prop (fil, j, k, l); pro = pro -> next; for (i=0; i aid[i] = ids[i]; } } else { if (tmp != NULL) { // Modifying an existing 'other' prop pro -> key = tmp -> key; pro -> val = NULL; if (fvalues[activef][fil+1][tmp -> key] > 0) { pro -> val = duplicate_float (fvalues[activef][fil+1][tmp -> key], tmp -> val); } pro -> show = tmp -> show; pro -> use = tmp -> use; } else { pro -> key = j; pro -> val = NULL; pro -> val = allocfloat (fvalues[activef][fil+1][j]); } } } } if (tmp_fstr -> other != NULL) { ptmp = tmp_fstr -> other; while (ptmp) { if (are_identical_prop (fil+1, sti, ptmp, tmp_fstr -> def)) { if (ptmp -> next != NULL) { if (ptmp -> prev != NULL) { ptmp -> prev -> next = ptmp -> next; ptmp -> next -> prev = ptmp -> prev; } else { ptmp -> next -> prev = NULL; } } else if (ptmp -> prev != NULL) { ptmp -> prev -> next = NULL; } else { g_free (tmp_fstr -> other); tmp_fstr -> other = NULL; ptmp = NULL; } } if (ptmp) ptmp = ptmp -> next; } } if (tmp_fstr -> other != NULL) { ptmp = tmp_fstr -> other; ptmp -> pid = 0; while (ptmp -> next != NULL) { ptmp -> next -> pid = ptmp -> pid + 1; ptmp = ptmp -> next; } } } /*! \fn G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) \brief update field atom parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); double v; const gchar * m = entry_get_text (res); if (i > -1) { v = string_to_double ((gpointer)m); update_entry_double (res, v); } switch (i) { case -1: tmp_fat -> name = g_strdup_printf ("%s", m); break; case 0: tmp_fat -> mass = v; break; case 1: tmp_fat -> charge = v; break; case 2: tmp_fshell -> m = v; break; case 3: tmp_fshell -> z = v; break; case 4: tmp_fshell -> k2 = v; break; case 5: tmp_fshell -> k4 = v; break; case 6: tmp_fcons -> length = v; break; case 7: tmp_fpmf -> length = v; break; } } int object_is; /*! \fn G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) \brief update field parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); update_entry_double (res, v); if (object_is > 0 && object_is < 9) { tmp_fprop -> val[i] = v; } else { switch (object_is) { case 0: tmp_ftet -> val[i] = v; break; case 14: tmp_fext -> val[i] = v; break; default: tmp_fbody -> val[i] = v; break; } } } GtkWidget * centry[3]; GtkWidget * cross_box; double *** cross = NULL; int num_body_d; gboolean change_tersoff; /*! \fn G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) \brief update field cross parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) { int j, k; k = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); update_entry_double (res, v); j = combo_get_active (cross_box); cross[tmp_fbody -> id][j][k] = cross[j][tmp_fbody -> id][k] = v; } /*! \fn G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) \brief change field cross combo \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) { int i, j; i = combo_get_active ((GtkWidget *)box); for (j=0; j<3; j++) { // g_debug ("Updating entry:: id= %d, i= %d, j= %d", tmp_fbody -> id, i, j); update_entry_double (GTK_ENTRY(centry[j]), cross[tmp_fbody -> id][i][j]); } } /*! \fn GtkWidget * combo_cross (field_nth_body * body) \brief create field cross configuration widgets \param body the pointer on the first non bonded field structure */ GtkWidget * combo_cross (field_nth_body * body) { GtkWidget * combo; combo = create_combo (); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(changed_cross_combo), NULL); if (tmp_field -> first_body[2] && tmp_fbody -> na[0] > -1) { field_nth_body * obody; obody = tmp_field -> first_body[2]; while (obody) { combo_text_append (combo, get_active_atom(obody -> ma[0][0], obody -> a[0][0]) -> name); obody = obody -> next; } } return combo; } /*! \fn gchar * get_this_vdw_string () \brief get VdW formalism description string */ gchar * get_this_vdw_string () { gchar * str = NULL; if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { str = g_strdup_printf ("U(rij) = Æ�ij x [ (r0ij/rij)12 - 2.0 (r0ij/rij)6 ]\n" "\t\twith Æ�ij = sqrt (Æ�i x Æ�j)\n" "\t\tand r0ij = r0i/2.0 + r0j/2.0"); } else if (tmp_field -> type == CVFF || tmp_field -> type == CVFF_AUG) { str = g_strdup_printf ("U(rij) = (Aij/rij)12 - 2.0 (Bij/rij)6\n" "\t\twith Aij = sqrt (Ai x Aj)\n" "\t\tand Bij = sqrt (Bi x Bj)"); } else if (tmp_field -> type >= CFF91 && tmp_field -> type <= COMPASS) { str = g_strdup_printf ("U(rij) = Æ�ij x [ 2.0 (r0ij/rij)9 - 3.0 (r0ij/rij)6 ]\n" "\t\twith Æ�ij = 2.0 sqrt (Æ�i x Æ�j) x (r0i3 r0j3) / (r0i6 + r0j6)\n" "\t\tand r0ij = [(r0i6 + r0j6)/2.0] 1/6"); } return str; } /*! \fn GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) \brief pepare field property edition parameters \param obj the type of field property \param key the key type for this field property, if any \param words the parameter(s) labels \param data the actual value(s) for the parameter(s) */ GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) { int i; gchar * str = NULL; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * lab; GtkWidget * entry; object_is = obj; if (obj > -1 && key > -1) { if (fvalues[activef][obj][key] > 0) { for (i=0; i< fvalues[activef][obj][key]; i++) { if (obj == 11 && key == 0 && i == 0) { hbox = create_hbox (0); lab = markup_label (_("Single terms:"), 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); if (activef) { if (((obj == 1 || obj == 2) && key == FBONDS-1 && (i == 0 || i == 1)) || ((obj == 3 || obj == 4) && key == FANGLES-1 && (i == 0 || i == 1)) || ((obj == 5 || obj == 6) && (key == FDIHEDRAL-2 || key == FDIHEDRAL-1) && (i == 0 || i == 1)) || ((obj == 5 || obj == 6) && (key == 1 || key == 2) && i ==3)) { str = g_strdup_printf (" %s", _(words[i])); } else { str = g_strdup_printf (" %s", words[i]); } } else { str = g_strdup_printf (" %s", words[i]); } lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 50); entry = create_entry (G_CALLBACK(update_field_parameter), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), data[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (obj == 11 && key == 0) { cross_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cross_vbox, FALSE, FALSE, 0); cross_hbox = create_hbox (0); lab = markup_label (_("Cross terms with atom:"), 160, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, lab, FALSE, FALSE, 30); cross_box = combo_cross (tmp_fbody); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, cross_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cross_vbox, cross_hbox, FALSE, FALSE, 10); for (i=11; i< 14; i++) { hbox = create_hbox (0); str = g_strdup_printf (" %s", words[i]); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 50); centry[i-11] = create_entry (G_CALLBACK(update_cross_parameter), 100, 15, FALSE, GINT_TO_POINTER(i-11)); update_entry_double (GTK_ENTRY(centry[i-11]), cross[tmp_fbody -> id][0][i-11]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, centry[i-11], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cross_vbox, hbox, FALSE, FALSE, 0); } if (tmp_fbody -> na[0] < 0) { widget_set_sensitive (cross_vbox, FALSE); } else { combo_set_active (cross_box, 0); } } } else { hbox = create_hbox (0); str = g_strdup_printf (_("Tabulated")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (obj == 9 && tmp_field -> type >= CFF91 && tmp_field -> type <= COMPASS) { str = g_strdup_printf (_("In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options."), field_acro[tmp_field -> type], get_this_vdw_string()); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } else if (obj == 9 && key == 0 && (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS)) { if (tmp_field -> type < CVFF) { str = g_strdup_printf (_("In %s, 12-6 non-bonded interactions are evaluated using: \n%s\nA and B" " are calculated using Æ�i/j and r0i/j provided by the force field parameters."), field_acro[tmp_field -> type], get_this_vdw_string()); if (tmp_field -> type > AMBER99) { str = g_strdup_printf (_("%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored."), str, field_acro[tmp_field -> type]); } } else { str = g_strdup_printf (_("In %s, 12-6 non-bonded interactions are evaluated using: \n%s\nA and B" " are calculated using Ai/j and Bi/j provided by the force field parameters."), field_acro[tmp_field -> type], get_this_vdw_string()); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } else if ((obj == 3 || obj == 4) && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF) { hbox = create_hbox (0); str = g_strdup_printf (_("Urey-Bradley terms provided by the %s force field are ignored.\n"), field_acro[tmp_field -> type]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } } return vbox; } /*! \fn gchar * field_str (int a) \brief get field external name \param a the field external id */ gchar * field_str (int a) { gchar * str = g_strdup_printf (_("External field")); if (a > -1) { str = g_strdup_printf ("%s: %s", str, (activef) ? fnames[activef][15][a] : _(fnames[activef][15][a])); } return str; } /*! \fn gboolean tersoff_question () \brief change Tersoff potential ? */ gboolean tersoff_question () { gchar * text = _("Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !"); if (num_body_d > 1) { return ask_yes_no (_("Change Tersoff potential ?!"), text, GTK_MESSAGE_QUESTION, field_assistant); } else { change_tersoff = TRUE; return TRUE; } } /*! \fn GtkWidget * param_prop_param_box (int pid) \brief prepare field parameter edition widgets \param pid the type of field parameter */ GtkWidget * param_prop_param_box (int pid) { switch (pid) { case MOLIMIT-9: return parameters_box (0, tmp_ftet -> key, fvars_teth[activef][tmp_ftet -> key], tmp_ftet -> val); break; case MOLIMIT-1: return parameters_box (pid-6, tmp_fprop -> key, fvars_inversion[activef][tmp_fprop -> key], tmp_fprop -> val); break; case MOLIMIT: return parameters_box (pid-6, tmp_fbody -> key, fvars_vdw[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+1: return parameters_box (pid-6, tmp_fbody -> key, fvars_met[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+2: return parameters_box (pid-6, tmp_fbody -> key, fvars_ters[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+3: return parameters_box (pid-6, tmp_fbody -> key, fvars_tbd[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+4: return parameters_box (pid-6, tmp_fbody -> key, fvars_fbd[activef][tmp_fbody -> key], tmp_fbody -> val); break; case SEXTERN: return parameters_box (14, tmp_fext -> key, fvars_fext[activef][tmp_fext -> key], tmp_fext -> val); break; default: switch ((pid-7)/2) { case 0: return parameters_box (pid-6, tmp_fprop -> key, fvars_bond[activef][tmp_fprop -> key], tmp_fprop -> val); break; case 1: return parameters_box (pid-6, tmp_fprop -> key, fvars_angle[activef][tmp_fprop -> key], tmp_fprop -> val); break; default: return parameters_box (pid-6, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); break; } break; } } /*! \fn G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) \brief change field key \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) { int i, j; gboolean changeit = FALSE; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); if (i > 6 && i < MOLIMIT) { if (j != tmp_fprop -> key) { tmp_fprop -> key = j; tmp_fprop -> val = NULL; tmp_fprop -> val = allocfloat (fvalues[activef][i-6][j]); changeit = TRUE; } } else { switch (i) { case 6: if (j != tmp_ftet -> key) { tmp_ftet -> key = j; tmp_ftet -> val = NULL; tmp_ftet -> val = allocfloat (fvalues[activef][0][j]); changeit = TRUE; } break; case SEXTERN: if (j != tmp_fext -> key) { tmp_fext -> key = j; gtk_label_set_text (GTK_LABEL(body_lab), field_str(tmp_fext -> key)); gtk_label_set_use_markup (GTK_LABEL(body_lab), TRUE); tmp_fext -> val = NULL; tmp_fext -> val = allocfloat (fvalues[activef][SEXTERN-6][j]); changeit = TRUE; } break; default: if (j != tmp_fbody -> key) { changeit = TRUE; if (i == MOLIMIT+2) changeit = tersoff_question (); if (changeit) { tmp_fbody -> key = j; tmp_fbody -> val = NULL; tmp_fbody -> val = allocfloat (fvalues[activef][i-6][j]); if (i == MOLIMIT+2 && j == 0) { cross = alloctdouble (num_body_d, num_body_d, 3); } else if (j == 1 && cross != NULL) { g_free (cross); cross = NULL; } } else { combo_set_active ((GtkWidget *)box, tmp_fbody -> key); } } break; } } if (changeit) { if (ff_p_combo[0]) combo_set_active (ff_p_combo[0], 0); if (ff_p_combo[1]) combo_set_active (ff_p_combo[1], 0); p_box = destroy_this_widget (p_box); p_box = param_prop_param_box (i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); show_the_widgets (param_box); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) \brief visualize object toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) \brief visualize object toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); j = 0; toviz.c = button_get_status ((GtkWidget *)but); if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); } if (is_moy) { visualize_object (i, row_id, j); if (i < MOLIMIT) check_to_visualize_properties_for_this_field_mol (i, j); } else { visualize_single_struct (i, row_id, j, edit_atids); if (i < MOLIMIT) { check_to_visualize_properties_for_this_field_mol (i, j); tmp_fprop -> show = toviz.c; } } if (i < MOLIMIT) tmp_fmol = get_active_field_molecule (j); init_default_shaders (tmp_view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) \brief select object toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) \brief select object toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); toviz.c = button_get_status ((GtkWidget *)but); if (i < MOLIMIT) j = combo_get_active (combo_mol[i-1]); if (is_moy) { select_object (i, row_id, j); } else { tmp_fprop -> use = toviz.c; } } extern ColRGBA init_color (int id, int numid); extern int active_sel; extern int a_ato; extern int ** sel_at; extern void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data); GtkWidget * add_tree; int vdw_id; /*! \fn G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select atom in field molecule toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int h, i, j, k, l, m, n; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; a_ato --; } else { toviz.c = 1; a_ato ++; } if (active_sel < 11) { sel_at[0][i-1] = toviz.c; } switch (active_sel) { case 0: j = i-1; break; case 1: j = i-1; break; case 2: j = tmp_fshell -> id; break; case 3: j = tmp_fshell -> id; break; case 4: j = tmp_fcons -> id; break; case 5: j = tmp_fcons -> id; break; case 6: j = tmp_fpmf -> id; break; case 7: j = tmp_fpmf -> id; break; case 8: j = tmp_frig -> id; break; case 9: j = tmp_ftet -> id; break; default: j = tmp_fbody -> id; break; } if (active_sel < 10) { for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[i-1][k].a; m = tmp_fmol -> atoms_id[i-1][k].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; field_selection (n, toviz.c, toviz.c, i-1); } } else { h = vdw_id = sel_at[0][i-1]; field_nth_body * tmp_fbo = tmp_field -> first_body[0]; for (k=0; k nbody[0]; k++) { if (tmp_fbo -> id == h) { visualize_body (toviz.c, h, tmp_fbo); break; } else if (tmp_fbo -> next != NULL) { tmp_fbo = tmp_fbo -> next; } } } init_default_shaders (tmp_view); j = (active_sel > 5 && active_sel < 8) ? 1 : 0; gtk_tree_store_set (* model, & iter, 3+j, toviz.c, -1); hide_the_widgets (add_tree); show_the_widgets (add_tree); } /*! \fn void select_atom_set_color (GtkCellRenderer * renderer, int i) \brief set cell renderer color \param renderer the target GtkCellRen \param i the color id */ void select_atom_set_color (GtkCellRenderer * renderer, int i) { set_renderer_color (i, renderer, init_color (i-1, num_field_objects)); } /*! \fn void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer color, markup and visibility in the property edition atom(s) selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int h, i, j, k; gtk_tree_model_get (mod, iter, 0, & h, -1); if (active_sel < 11) { gtk_tree_model_get (mod, iter, 1, & i, -1); } else { i = ! h; } j = GPOINTER_TO_INT(data); switch (j) { case 0: gtk_cell_renderer_set_visible (renderer, ! i); break; case 1: if (active_sel > 10) { set_renderer_markup (mod, iter, renderer, 1); i = h; } gtk_cell_renderer_set_visible (renderer, i); break; case 2: set_renderer_markup (mod, iter, renderer, 2); gtk_cell_renderer_set_visible (renderer, i); break; case 3: gtk_cell_renderer_set_visible (renderer, ! i); break; case 4: if ((active_sel > 1 && active_sel < 6) || active_sel > 8) { if (active_sel > 10) { gtk_tree_model_get (mod, iter, 3, & k, -1); } else { k = sel_at[0][h-1]; } if (k || ! a_ato) { gtk_cell_renderer_set_visible (renderer, TRUE); } else { gtk_cell_renderer_set_visible (renderer, ! a_ato); } } else { gtk_cell_renderer_set_visible (renderer, ! i); } break; } if (active_sel < 2 && j < 4) { for (i=0; i num/tmp_fmol -> multi; i++) { if (sel_at[0][i]+1 == abs(h)) break; } if (sel_at[1][i]) { select_atom_set_color (renderer, sel_at[0][i]+1); } else { select_atom_set_color (renderer, sel_at[1][i]); } } else if (j < 4) { if (h < 0) h = -h; if (active_sel < 11) { k = (sel_at[0][h-1]) ? h : 0; } else { gtk_tree_model_get (mod, iter, 3, & k, -1); } select_atom_set_color (renderer, k); } } float * val_at; /* * G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) \brief on edit unit weight callback \param cell the GtkCellRendererToggle sending the signal \param string_path the path in the tree store * gchar \param data the associated data pointer */ G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int i; GtkTreePath * path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); val_at[i] = string_to_double ((gpointer)new_text); } /*! \fn G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) \brief select atom id from field molecule - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) { int i, j, k, l, m, n, o, p, q; GtkTreeIter id_level; GtkTreeIter atom_level; GtkTreeViewColumn * ato_col[5]; GtkCellRenderer * ato_cell[5]; gchar * ato_title[5] = {i18n("Atom Id."), i18n("Fragment"), i18n("Atom"), i18n("Weight (1)"), i18n("Viz.3D & Select")}; gchar * nbd_title[5] = {i18n("Atom Id."), i18n("Field atom"), i18n("Field molecule(s)"), " ", i18n("Viz.3D & Select")}; gchar * ctype[5]={"text", "text", "text", "text", "active"}; GType col_type[2][5] = {{G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_FLOAT}, {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_BOOLEAN}}; GType cbl_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}; field_object = 1; active_sel = GPOINTER_TO_INT (data); gboolean add; gchar * str; q = (active_sel > 5 && active_sel < 8) ? 1 : 0; switch (active_sel) { case 0: str = g_strdup_printf (_("Please select the new atom(s)")); o = -1; p = -1; break; case 1: str = g_strdup_printf (_("Please select the atom(s) to freeze / unfreeze")); o = -1; p = -1; break; case 2: str = g_strdup_printf (_("Please select the core atom")); o = tmp_fshell -> ia[0]-1; p = tmp_fshell -> ia[1]-1; break; case 3: str = g_strdup_printf (_("Please select the atom(s) to shell")); o = tmp_fshell -> ia[1]-1; p = tmp_fshell -> ia[0]-1; break; case 4: str = g_strdup_printf (_("Please select the first atom")); o = tmp_fcons -> ia[0]-1; p = tmp_fcons -> ia[1]-1; break; case 5: str = g_strdup_printf (_("Please select the second atom")); o = tmp_fcons -> ia[1]-1; p = tmp_fcons -> ia[0]-1; break; case 6: str = g_strdup_printf (_("Please select the atom(s) in the first unit")); break; case 7: str = g_strdup_printf (_("Please select the atom(s) in the second unit")); break; case 8: str = g_strdup_printf (_("Please select the atom(s) in the rigid unit")); p = -1; break; case 9: str = g_strdup_printf (_("Please select the tethered atom")); o = tmp_ftet -> num-1; p = -1; break; case 11: if (tmp_fbody -> bd == 2) { str = g_strdup_printf (_("Please select the type of field atom")); } else { str = g_strdup_printf (_("Please select the first type of field atom")); } break; case 12: str = g_strdup_printf (_("Please select the second type of field atom")); break; case 13: str = g_strdup_printf (_("Please select the third type of field atom")); break; case 14: str = g_strdup_printf (_("Please select the fourth type of field atom")); break; } GtkWidget * amol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), _("Apply"), GTK_RESPONSE_APPLY); a_ato = 0; GtkTreeStore * add_model; if (active_sel < 11) { add_model = gtk_tree_store_newv (4+q, col_type[q]); } else { add_model = gtk_tree_store_newv (4, cbl_type); } add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); if (active_sel < 11) { num_field_objects = tmp_fmol -> mol -> natoms; } for (i=0; i<4+q; i++) { k = i; if (i < 3+q) { ato_cell[i] = gtk_cell_renderer_text_new (); } else { if (! q) k ++; ato_cell[i] = gtk_cell_renderer_toggle_new (); if (active_sel > 1) gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(ato_cell[i]), TRUE); g_signal_connect (G_OBJECT(ato_cell[i]), "toggled", G_CALLBACK(field_molecule_select_atom_id), & add_model); } if (active_sel < 11) { ato_col[i] = gtk_tree_view_column_new_with_attributes (_(ato_title[k]), ato_cell[i], ctype[k], i, NULL); } else { ato_col[i] = gtk_tree_view_column_new_with_attributes ((k != 3) ? _(nbd_title[k]) : nbd_title[k], ato_cell[i], ctype[k], i, NULL); } gtk_tree_view_append_column (GTK_TREE_VIEW(add_tree), ato_col[i]); gtk_tree_view_column_set_alignment (ato_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (ato_col[i], ato_cell[i], select_atom_set_cmv, GINT_TO_POINTER(k), NULL); if (q && i == 3) { g_object_set (ato_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(ato_cell[i]), "edited", G_CALLBACK(edit_unit_weight), & add_model); } } // Clean 3D viz field_unselect_all (); // fill model if (active_sel < 2) { sel_at = allocdint (2, tmp_fat -> num/tmp_fmol -> multi); } else if (active_sel < 11) { sel_at = allocdint (2, tmp_fmol -> mol -> natoms); } else { field_nth_body * tmp_fbo = tmp_field -> first_body[0]; k = 0; for (i=0; i nbody[0]; i++) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbo -> ma[1][0], tmp_fbo -> a[1][0]) -> name) == 0) k ++; if (tmp_fbo -> next != NULL) tmp_fbo = tmp_fbo -> next; } sel_at = allocdint (1, k); num_field_objects = k; } if (active_sel < 2) { l = 0; for (i=0; i mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][0].a == tmp_fat -> id) { j = tmp_fmol -> atoms_id[i][0].b; k = tmp_fat -> list_id[j]; sel_at[0][l] = k; if (active_sel) { sel_at[1][l] = tmp_fat -> frozen_id[j]; } else { sel_at[1][l] = 0; } l ++; } } for (i=0; i num/tmp_fmol -> multi; i++) { gtk_tree_store_append (add_model, & id_level, NULL); gtk_tree_store_set (add_model, & id_level, 0, sel_at[0][i]+1, 1, 0, 3, 0, -1); if (sel_at[1][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[3]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); k = sel_at[0][i]; l = tmp_fmol -> atoms_id[k][j].b; m = tmp_fat -> list[l]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), m+1); gtk_tree_store_set (add_model, & atom_level, 0, -(sel_at[0][i]+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } else if (active_sel < 4) { for (i=0; i mol -> natoms; i++) { if (i != p) { gtk_tree_store_append (add_model, & id_level, NULL); gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, 0, -1); tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); k = tmp_fat -> list[tmp_fmol -> atoms_id[i][j].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), k+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } } else if (active_sel < 6 || (active_sel > 7 && active_sel < 11)) { for (i=0; i mol -> natoms; i++) { if (i != p) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); gtk_tree_store_append (add_model, & id_level, NULL); if (active_sel < 6 || active_sel == 9) { if (i == o) { k = 1; } else { k = 0; } } else { k = 0; if (tmp_frig -> num > 0) { for (j=0; j num; j++) { if (i == tmp_frig -> list[j]) { k = 1; break; } } } } sel_at[0][i] = k; gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, 0, -1); if (sel_at[0][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[3]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); l = tmp_fat -> list[tmp_fmol -> atoms_id[i][j].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), l+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } } else if (active_sel > 10) { m = active_sel-11; field_nth_body * tmp_fbo = tmp_field -> first_body[0]; k = 0; for (i=0; i nbody[0]; i++) { // need to find the atoms name if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbo -> ma[1][0], tmp_fbo -> a[1][0]) -> name) == 0) { add = TRUE; for (j=0; j < body_at(tmp_fbody -> bd); j++) { if (j != m && tmp_fbody -> na[j] > -1) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbody -> ma[j][0], tmp_fbody -> a[j][0]) -> name) == 0) add = FALSE; } } if (add) { gtk_tree_store_append (add_model, & id_level, NULL); l = 0; if (tmp_fbody -> na[m] > -1) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbody -> ma[m][0], tmp_fbody -> a[m][0]) -> name) == 0) { l = 1; vdw_id = tmp_fbo -> id; a_ato = 1; } } gtk_tree_store_set (add_model, & id_level, 0, k+1, 1, exact_name(get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name), 3, l, -1); sel_at[0][k] = tmp_fbo -> id; for (j=0; j na[0]; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); gtk_tree_store_set (add_model, & atom_level, 0, 0, 2, get_active_field_molecule(tmp_fbo -> ma[0][j]) -> name, 3, 0, -1); } } k ++; } if (tmp_fbo -> next != NULL) tmp_fbo = tmp_fbo -> next; } } else { val_at = allocfloat (tmp_fmol -> mol -> natoms); if (active_sel == 5) { k = 1; m = 0; } else { k = 0; m = 1; } for (i=0; i mol -> natoms; i++) { add = TRUE; if (tmp_fpmf -> num[k] > 0) { for (l=0; l num[k]; l++) { if (i == tmp_fpmf -> list[k][l]) { add = FALSE; break; } } } if (add) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); gtk_tree_store_append (add_model, & id_level, NULL); n = 0; if (tmp_fpmf -> num[m] > 0) { for (l=0; l num[m]; l++) { if (i == tmp_fpmf -> list[m][l]) { n = 1; break; } } } val_at[i] = tmp_fat -> mass; sel_at[0][i] = n; gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, val_at[i], 4, 0, -1); if (sel_at[0][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[4]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (l=0; l< tmp_fmol -> multi; l++) { gtk_tree_store_append (add_model, & atom_level, & id_level); n = tmp_fat -> list[tmp_fmol -> atoms_id[i][l].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), n+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[l]+1, 2, str, -1); g_free (str); } } } } g_object_unref (add_model); if (active_sel < 2) { j = tmp_fat -> num/tmp_fmol -> multi; } else { j = num_field_objects; } i = ((j+1)*37 < 500) ? (j+1)*37 : 500; if (active_sel > 10) q = 1; GtkWidget * vbox = dialog_get_content_area (amol); GtkWidget * scrollsets = create_scroll (vbox, 320+q*100, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); if (q && active_sel < 11) { str = g_strdup_printf (_(" (1) if all 0.0 then atomic weight(s) will be used by DL-POLY")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } if (active_sel < 2) { str = g_strdup_printf (_("The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n"), tmp_fat -> name); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); } show_the_widgets (amol); switch (active_sel) { case 0: run_this_gtk_dialog (amol, G_CALLBACK(run_add_atom_dialog), NULL); break; default: run_this_gtk_dialog (amol, G_CALLBACK(run_select_atom_dialog), GINT_TO_POINTER(active_sel)); if (active_sel == 1) { str = g_strdup_printf (_("%d atom(s)"), tmp_fat -> frozen); if (but) gtk_button_set_label (but, str); } break; } g_free (sel_at); if (q && active_sel < 11) g_free (val_at); } GtkWidget * av_lgt; /*! \fn void update_field_dist (float v) \brief update field distance widget \param v the new value */ void update_field_dist (float v) { gchar * str; if (v < 0.0) { str = g_strdup_printf (" "); } else { str = g_strdup_printf ("%8.3f", v); } gtk_label_set_text (GTK_LABEL(av_lgt), str); gtk_label_set_use_markup (GTK_LABEL(av_lgt), TRUE); } /*! \fn gchar * body_str (int a) \brief get body potential string name \param a the type of potential */ gchar * body_str (int a) { int i, j; j = body_at (a); gchar * str = g_strdup_printf ("%s ", _(felemt[a+MOLIMIT+1])); for (i=0; i na[i] > -1) { str = g_strdup_printf ("%s%s", str, get_active_atom (tmp_fbody -> ma[i][0], tmp_fbody -> a[i][0]) -> name); } if (i < j-1 && j > 1) str = g_strdup_printf ("%s - ", str); } str = g_strdup_printf ("%s", str); return str; } /*! \fn G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) \brief select field object callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) { select_atom_id_from_fied_molecule (NULL, data); int i, j, k, l, m, n, o, p, q, r; i = GPOINTER_TO_INT(data); gchar * stra = NULL; gchar * strb = NULL; if (i == 2 || i == 3) { j=i-2; if (! tmp_fshell -> ia[j]) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { k = tmp_fshell -> ia[j]-1; l = tmp_fmol -> atoms_id[k][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, l) -> sp]), tmp_fshell -> ia[j]); strb = g_strdup_printf (APPLY); } } else if (i == 4 || i == 5) { j=i-4; if (! tmp_fcons -> ia[j]) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { k = tmp_fcons -> ia[j] - 1; l = tmp_fmol -> atoms_id[k][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, l) -> sp]), tmp_fcons -> ia[j]); strb = g_strdup_printf (APPLY); } } else if (i == 6 || i == 7) { j=i-6; if (! tmp_fpmf -> num[j]) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf (_("%d atom(s)"), tmp_fpmf -> num[j]); strb = g_strdup_printf (APPLY); } } else if (i == 8) { j=0; if (! tmp_frig -> num) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf (_("%d atom(s)"), tmp_frig -> num); strb = g_strdup_printf (APPLY); } } else if (i == 9) { j=0; if (! tmp_ftet -> num) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { k = tmp_fmol -> atoms_id[tmp_ftet -> num - 1][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, k) -> sp]), tmp_ftet -> num); strb = g_strdup_printf (APPLY); } } else if (i == 11 || i == 12 || i == 13 || i == 14) { j=i-11; if (tmp_fbody -> na[j] < 0) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%s", exact_name(get_active_atom (tmp_fbody -> ma[j][0]-1, tmp_fbody -> a[j][0]) -> name)); strb = g_strdup_printf (APPLY); } if (tmp_fbody -> bd == 2) { cross_box = destroy_this_widget (cross_box); cross_box = combo_cross (tmp_fbody); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, cross_box, FALSE, FALSE, 0); show_the_widgets (cross_box); } if (tmp_fbody -> na[j] < 0) { widget_set_sensitive (cross_vbox, FALSE); } else { widget_set_sensitive (cross_vbox, TRUE); combo_set_active (cross_box, 0); } gtk_label_set_text (GTK_LABEL(body_lab), body_str (tmp_fbody -> bd)); gtk_label_set_use_markup (GTK_LABEL(body_lab), TRUE); } set_image_from_icon_name (img_but[j], strb); g_free (strb); if (i == 4 || i == 5) { if (tmp_fcons -> ia[0] && tmp_fcons -> ia[1]) { // update_distance tmp_fcons -> av = 0.0; for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][k].a; m = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][k].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; l = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][k].a; m = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][k].b; o = get_active_atom (tmp_fmol -> id, l) -> list[m]; tmp_fcons -> av += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][n], & tmp_proj -> atoms[0][o]).length; } tmp_fcons -> av /= tmp_fmol -> multi; } update_field_dist (tmp_fcons -> av); } else if (i == 6 || i == 7) { if (tmp_fpmf -> num[0] > 0 && tmp_fpmf -> num[1] > 0) { atom at[2][tmp_fmol -> multi]; float ma[2][tmp_fmol -> multi]; gboolean all_zero = TRUE; float v; for (k=0; k<2; k++) { for (l=0; l num[k]; l++) { if (tmp_fpmf -> weight[k][l] != 0.0) { all_zero = FALSE; break; } } if (! all_zero) break; } for (k=0; k<2; k++) { for (l=0; l multi; l++) { ma[k][l] = 0.0; at[k][l].x = 0.0; at[k][l].y = 0.0; at[k][l].z = 0.0; } } for (k=0; k<2; k++) { for (l=0; l num[k]; l++) { m = tmp_fpmf -> list[k][l]; for (n=0; n multi; n++) { o = tmp_fmol -> atoms_id[m][n].a; p = tmp_fmol -> atoms_id[m][n].b; q = get_active_atom (tmp_fmol -> id, o) -> list[p]; if (all_zero) { r = tmp_proj -> atoms[0][q].sp; v = tmp_proj -> chemistry -> chem_prop[CHEM_M][r]; } else { v = tmp_fpmf -> weight[k][l]; } at[k][n].x += v * tmp_proj -> atoms[0][q].x; at[k][n].y += v * tmp_proj -> atoms[0][q].y; at[k][n].z += v * tmp_proj -> atoms[0][q].z; ma[k][n] += v; } } } v = 0.0; for (n=0; n multi; n++) { for (k=0; k<2; k++) { at[k][n].x /= ma[k][n]; at[k][n].y /= ma[k][n]; at[k][n].z /= ma[k][n]; } v += distance_3d (& tmp_proj -> cell, 0, & at[0][n], & at[1][n]).length; } tmp_fpmf -> av = v / tmp_fmol -> multi; } update_field_dist (tmp_fpmf -> av); } gtk_button_set_label (but, stra); gtk_widget_set_size_request ((GtkWidget *)but, 150, -1); g_free (stra); } /*! \fn G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) \brief change atom \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); switch (i) { case 0: widget_set_sensitive (afftype, (j) ? TRUE : FALSE); k = -1; if (tmp_fat -> afid > -1) { for (k=0; k sp]; k++) { if (atoms_id_list[tmp_fat -> sp][k] == tmp_fat -> afid) break; } } combo_set_active (afftype, k+1); if (j) { tmp_fat -> mass =(tmp_fat -> afid < 0) ? tmp_proj -> chemistry -> chem_prop[CHEM_M][tmp_fat -> sp] : get_force_field_atom_mass (tmp_fat -> sp, tmp_fat -> afid); } else { tmp_fat -> mass = tmp_proj -> chemistry -> chem_prop[CHEM_M][tmp_fat -> sp]; } break; case 1: if (j > 0) { tmp_fat -> afid = atoms_id_list[tmp_fat -> sp][j - 1]; } else { tmp_fat -> afid = - 1; } tmp_fat -> mass = get_force_field_atom_mass (tmp_fat -> sp, j-1); check_atom_for_updates (); break; } } /*! \fn gchar * get_body_element_name (field_nth_body * body, int aid, int nbd) \brief get field body potential element name \param body the field body potential \param aid the atom id, if any \param nbd the body potential id */ gchar * get_body_element_name (field_nth_body * body, int aid, int nbd) { int i, j; i = body -> ma[aid][0]; if (! nbd) { return g_strdup_printf ("%s", get_active_atom (i, body -> a[aid][0]) -> name); } else { j = get_active_shell (i, body -> a[aid][0]-nbd+1) -> ia[0]; return g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } } /*! \fn gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) \brief are these non bonded potentials identicals ? \param body the field non bonded property \param nbd number of distinct interactions \param na number of atoms (0 = 1st pot, 1 = 2nd pot) \param ma 1st potential data \param ba 2nd potential data */ gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) { gchar * stra, * strb, * strc, * strd; int i, j; stra = get_body_element_name (body, 0, 0); strb = get_body_element_name (body, 1, 0); i = ma[0][0]; if (ba[0][0] < nbd) { strc = g_strdup_printf ("%s", get_active_atom (i, ba[0][0]) -> name); } else { j = get_active_shell (i, ba[0][0]-nbd) -> ia[0]; strc = g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } i = ma[1][0]; if (ba[1][0] < nbd) { strd = g_strdup_printf ("%s", get_active_atom (i, ba[1][0]) -> name); } else { j = get_active_shell (i, ba[1][0]-nbd) -> ia[0]; strd = g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } gboolean res = FALSE; if (g_strcmp0(stra, strc) == 0 && g_strcmp0(strb, strd) == 0) res = TRUE; if (g_strcmp0(stra, strd) == 0 && g_strcmp0(strb, strc) == 0) res = TRUE; // g_debug ("stra= %s, strb= %s, strc= %s, strd= %s:: res= %d", stra, strb, strc, strd, res); g_free (stra); g_free (strb); g_free (strc); g_free (strd); return res; } /*! \fn int get_num_vdw_max () \brief Get the number of field shell interactions */ int get_num_vdw_max () { int i; field_molecule * molff; field_shell * shellff; molff = tmp_field -> first_molecule; i = 0; while (molff) { i += molff -> atoms; shellff = molff -> first_shell; while (shellff) { if (shellff -> use && shellff -> vdw && shellff -> ia[0] > -1) i ++; shellff = shellff -> next; } molff = molff -> next; } return i; } /*! \fn void adjust_vdw_interactions (gboolean add_shell) \brief adjust VdW interactions \param add_shell update field shells */ void adjust_vdw_interactions (gboolean add_shell) { int i, j, k, l, m, n; field_molecule * molff; field_atom* atff; field_shell * shellff; field_nth_body * bodyff; i = get_num_vdw_max (); m = i * (i+1) / 2; n = (add_shell) ? i * (i-1) / 2 : (i+1) * (i+2) / 2; bodyff = get_active_body (0, 0); while (bodyff) { for (j=0; j<2; j++) { k = bodyff -> ma[j][0]; if (bodyff -> a[j][0] >= n) { bodyff -> a[j][0] -= n; bodyff -> a[j][0] += m; } } bodyff = bodyff -> next; } if (add_shell) { gboolean add_vdw; gchar * str; gchar ** to_be_vdw = g_malloc0(i*sizeof*to_be_vdw); int * vdw_mlist = allocint (i); int ** vdw_aids = allocdint (i,i); int ** vdw_mids = allocdint (i,i); int vdw_na[2]; int * vdw_a[2], * vdw_ma[2]; int nbd = m; molff = tmp_field -> first_molecule; l = 0; while (molff) { atff = molff -> first_atom; while (atff) { add_vdw = TRUE; for (k=0; k name) == 0) { add_vdw = FALSE; vdw_mlist[k] ++; vdw_mids[k][vdw_mlist[k]] = molff -> id; vdw_aids[k][vdw_mlist[k]] = atff -> id; break; } } if (add_vdw) { to_be_vdw[k] = g_strdup_printf ("%s", atff -> name); vdw_mids[k][0] = molff -> id; vdw_aids[k][0] = atff -> id; l ++; } atff = atff -> next; } shellff = molff -> first_shell; while (shellff) { if (shellff -> use && shellff -> vdw && shellff -> ia[0] > -1) { add_vdw = TRUE; atff = get_active_atom (molff -> id, shellff -> ia[0]); str = g_strdup_printf ("%s_sh", atff -> name); for (k=0; k id; vdw_aids[k][vdw_mlist[k]] = shellff -> id + nbd; break; } } if (add_vdw) { to_be_vdw[k] = g_strdup_printf ("%s", str); vdw_mids[k][0] = molff -> id; vdw_aids[k][0] = shellff -> id + nbd; l ++; } g_free (str); } shellff = shellff -> next; } molff = molff -> next; } i = tmp_field -> nbody[0]; j = 0; for (k=0; k next; } if (! bodyff) { bodyff = get_active_body (i+j, 0); bodyff -> next = init_field_nth_body (i+j, 0, vdw_na, vdw_ma, vdw_a); bodyff -> next -> prev = bodyff; j ++; } } for (m=0; m next; } if (! bodyff) { bodyff = get_active_body (i+j, 0); bodyff -> next = init_field_nth_body (i+j, 0, vdw_na, vdw_ma, vdw_a); bodyff -> next -> prev = bodyff; j ++; } } } tmp_field -> nbody[0] += j; } else { atff = get_active_atom (tmp_fmol -> id, tmp_fshell -> ia[0]); gchar * str = g_strdup_printf ("%s_sh", atff -> name); gchar * stra, * strb; bodyff = get_active_body (0, 0); i = 0; while (bodyff) { stra = get_body_element_name (bodyff, 0, m+1); strb = get_body_element_name (bodyff, 1, m+1); if (g_strcmp0(str,stra) == 0 || g_strcmp0(str,strb) == 0) { if (bodyff -> next) { bodyff -> prev -> next = bodyff -> next; bodyff -> next -> prev = bodyff -> prev; } else { bodyff = bodyff -> prev; g_free (bodyff -> next); bodyff -> next = NULL; } i ++; } g_free (stra); g_free (strb); bodyff = bodyff -> next; } g_free (str); tmp_field -> nbody[0] -= i; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) \brief VdW in shell toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) \brief VdW in shell toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) #endif { tmp_fshell -> vdw = button_get_status ((GtkWidget *)but); adjust_vdw_interactions (tmp_fshell -> vdw); } dint rep; gchar * rep_atom_name; /*! \fn G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) \brief edit field parameter - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) { if (rep.a > 6 && rep.a < MOLIMIT) { adjust_field_prop (rep.a-7, rep.b, tmp_fprop, edit_atids, tmp_fprop -> key); } else if (rep.a == 1) { if (g_strcmp0 (rep_atom_name, tmp_fat -> name) != 0) { // Atom name's change, need to update non bonded interactions compare_non_bonded (tmp_fat -> name); } g_free (rep_atom_name); rep_atom_name = NULL; } destroy_this_dialog (dialog); } /*! \fn void edit_parameters (int f, int id) \brief edit field parameter - creating the dialog \param f the type of parameter to edit \param id the field molecule id, if any */ void edit_parameters (int f, int id) { gchar * str = g_strdup_printf (_("%s parameter(s)"), _(felemt[f+1])); GtkWidget * dialog = dialogmodal(str, GTK_WINDOW(field_assistant)); GtkWidget * lab; GtkWidget * entry; GtkWidget * but; GtkWidget * hbox; GtkWidget * combo; GtkWidget * box = dialog_get_content_area (dialog); gboolean show_it; gboolean use_it; gchar * cs_name[3]={i18n("Core atom: "), i18n("Shell atom: "), i18n("Selection: ")}; gchar * cs_param[4]={i18n("Mass:"), i18n("Charge:"), "k2 ", "k4 "}; gchar * cs_unit[4]={"g mol-1", " ", "Å-2", "Å-4"}; gchar * co_name[4]={i18n("First atom: "), i18n("Second atom: "), i18n("Third atom: "), i18n("Fourth atom: ")}; gchar * pm_name[2]={i18n("First unit: "), i18n("Second unit: ")}; int i, j, k, l, m; float v; gchar * ba; is_moy = 1; show_it = use_it = FALSE; for (i=0; i<2; i++) ff_p_combo[i] = NULL; if (f < MOLIMIT) { i = combo_get_active (combo_mol[f-1]); lab = markup_label (g_strdup_printf (_("\tMolecule: \t%s"), get_active_field_molecule(i) -> name), -1, 30, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); tmp_fmol = get_active_field_molecule (i); } switch (f) { case 1: // Atom edit tmp_fat = get_active_atom(i, id); rep_atom_name = g_strdup_printf("%s", tmp_fat -> name); lab = markup_label (g_strdup_printf (_("\tAtom: \t\t%s"), rep_atom_name), -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Element:")); lab = markup_label (str, 120, 30, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); str = g_strdup_printf ("%s", exact_name(tmp_proj -> chemistry -> element[tmp_fat -> sp])); lab = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Field parameters:")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); combo = create_combo (); combo_text_append (combo, _("Manual")); combo_text_append (combo, _("Automatic")); combo_set_active (combo, (tmp_fat -> afid > -1) ? 1 : 0); widget_set_sensitive (combo, atoms_id[tmp_fat -> sp]); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(changed_atom_combo), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Force field type *:")); lab = markup_label (str, 120, 30, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); afftype = create_combo (); combo_text_append (afftype, "None"); k = 0; for (i=0; i sp]; i++) { j = atoms_id_list[tmp_fat -> sp][i]; str = g_strdup_printf ("%s", exact_name(ff_atoms[j][2])); if (g_strcmp0 (ff_atoms[j][3], " ") != 0) str = g_strdup_printf ("%s : %s", str, ff_atoms[j][3]); combo_text_append (afftype, str); g_free (str); if (atoms_id_list[tmp_fat -> sp][i] == tmp_fat -> afid) k = i+1; } combo_set_active (afftype, k); g_signal_connect (G_OBJECT(afftype), "changed", G_CALLBACK(changed_atom_combo), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, afftype, FALSE, FALSE, 0); widget_set_sensitive (afftype, (tmp_fat -> afid > -1) ? TRUE : FALSE); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Name: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(-1)); update_entry_text (GTK_ENTRY(entry), tmp_fat -> name); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Mass: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_double (GTK_ENTRY(entry), tmp_fat -> mass); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Charge: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_fat -> charge); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Frozen: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); str = g_strdup_printf (_("%d atom(s)"), tmp_fat -> frozen); but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_atom_id_from_fied_molecule), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); break; case 2: // Shell edit tmp_fshell = get_active_shell (i, id); str = g_strdup_printf (_("\tCore-Shell N°%d"), tmp_fshell -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (_(cs_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_fshell -> ia[k]) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { j = tmp_fshell -> ia[k] - 1; l = tmp_fmol -> atoms_id[j][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, l) -> sp]), tmp_fshell -> ia[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+2)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); } /*for (k=0; k<3; k++) { shell_hbox[k] = create_hbox (0); lab = markup_label (_(cs_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], lab, FALSE, FALSE, 10); if ((k < 2 && tmp_fshell -> ia[k] == -1) || (k == 2 && ! tmp_fshell -> ib)) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { if (k < 2) { str = g_strdup_printf (_("Selected !")); } else { str = g_strdup_printf (_("%d atom(s) selected !"), tmp_fshell -> ia[1]-1); } img_but[k] = stock_image (APPLY); } if (k < 2) { shell_cbox[k] = create_combo (); combo_text_append (shell_cbox[k], _("Not picked yet !")); switch (k) { case 0: tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { combo_text_append (shell_cbox[k], tmp_fat -> name); tmp_fat = tmp_fat -> next; } break; case 1: combo_text_append (shell_cbox[k], _("All Atoms")); combo_text_append (shell_cbox[k], _("Selected Atoms")); break; } l = (! k) ? tmp_fshell -> ia[k]+1 : (tmp_fshell -> ia[k] < 1) ? tmp_fshell -> ia[k]+1 : 2; combo_set_active (shell_cbox[k], l); g_signal_connect (G_OBJECT(shell_cbox[k]), "changed", G_CALLBACK(changed_shell_combo), GINT_TO_POINTER(k)); gtk_widget_set_size_request (shell_cbox[k], 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], shell_cbox[k], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, shell_hbox[k], FALSE, FALSE, 0); } else { shell_but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(2)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], shell_but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, shell_hbox[k], FALSE, FALSE, 0); } g_free (str); } */ for (k=0; k<4; k++) { hbox = create_hbox (0); lab = markup_label ((k < 2) ? _(cs_param[k]) : cs_param[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(2+k)); v = (! k) ? tmp_fshell -> m : (k == 1) ? tmp_fshell -> z : (k == 2) ? tmp_fshell -> k2 : tmp_fshell -> k4; update_entry_double (GTK_ENTRY(entry), v); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); if (k < 2) { str = g_strdup_printf ("%s", cs_unit[k]); } else { str = g_strdup_printf ("%s %s", fkeysw[activef][0][tmp_field -> energy_unit], cs_unit[k]); } lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); lab = markup_label(_("Use non-bonded: "), 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, tmp_fshell -> vdw, G_CALLBACK(shell_in_vdw), NULL), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fshell -> show; use_it = tmp_fshell -> use; break; case 3: // Constraint edit tmp_fcons = get_active_constraint (i, id); str = g_strdup_printf (_("\tBond constraint N°%d"), tmp_fcons -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (_(co_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_fcons -> ia[k]) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { j = tmp_fcons -> ia[k]-1; l = tmp_fmol -> atoms_id[j][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, l) -> sp]), tmp_fcons -> ia[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+4)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf (_("Av. distance (1): ")); lab = markup_label (str, 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); av_lgt = markup_label ("", 150, 50, 0.5, 0.5); update_field_dist (tmp_fcons -> av); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, av_lgt, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Length: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_fcons -> length); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fcons -> show; use_it = tmp_fcons -> use; break; case 4: // Pmf edit tmp_fpmf = get_active_pmf (i, id); str = g_strdup_printf (_("\tMean force potential N°%d"), tmp_fpmf -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (_(pm_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_fpmf -> num[k] == 0) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { str = g_strdup_printf (_("%d atom(s)"), tmp_fpmf -> num[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+6)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf (_("Av. d1-2 (1): ")); lab = markup_label (str, 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); av_lgt = markup_label ("", 150, 50, 0.5, 0.5); update_field_dist (tmp_fpmf -> av); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, av_lgt, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Length: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(7)); update_entry_double (GTK_ENTRY(entry), tmp_fpmf -> length); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fpmf -> show; use_it = tmp_fpmf -> use; break; case 5: // Rigid edit tmp_frig = get_active_rigid (i, id); str = g_strdup_printf (_("\tRigid unit N°%d"), id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Atom(s): ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_frig -> num == 0) { str = g_strdup_printf (_("Not picked yet !")); img_but[0] = stock_image (DELETEB); } else { str = g_strdup_printf (_("%d atom(s)"), tmp_frig -> num); img_but[0] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(8)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[0], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_frig -> show; use_it = tmp_frig -> use; break; case 6: // Tethered tmp_ftet = get_active_tethered (i, id); str = g_strdup_printf (_("\tTethered atom N°%d"), id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Atom: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_ftet -> num) { str = g_strdup_printf (_("Not picked yet !")); img_but[0] = stock_image (DELETEB); } else { k = tmp_fmol -> atoms_id[tmp_ftet -> num-1][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, k) -> sp]), tmp_ftet -> num); img_but[0] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(9)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[0], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_ftet -> show; use_it = tmp_ftet -> use; break; case SEXTERN: tmp_fext = get_active_external (id); body_lab = markup_label (field_str(tmp_fext -> key), 250, 50, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, body_lab, FALSE, FALSE, 0); use_it = tmp_fext -> use; break; default: if (f < MOLIMIT) { // Bond, angle, dihedral, improper, inversion edit tmp_fstr = get_active_struct (f-7, i, id); m = struct_id (f); str = g_strdup_printf (_("\t%s type N°%d\n\tField atoms: "), mo_title[f-7], id+1); for (k=0; k and "), str); str = g_strdup_printf ("%s%s", str, get_active_atom (i, tmp_fstr -> aid[k]) -> name); if (m > 2 && k < m-1) str = g_strdup_printf ("%s, ", str); } str = g_strdup_printf ("%s", str); edit_atids = allocint (m); gtk_tree_model_get (GTK_TREE_MODEL(field_model[f]), & field_iter, 0, & is_moy, -1); if (! is_moy) { str = g_strdup_printf (_("%s\n\tBetween atoms: "), str); for (k=0; k and "), str); str = g_strdup_printf ("%s%s", str, ba); if (m > 2 && k < m-1) str = g_strdup_printf ("%s, ", str); } str = g_strdup_printf ("%s", str); if (tmp_fstr -> other) { tmp_fprop = get_active_prop_using_atoms (tmp_fstr -> other, m, edit_atids); if (! tmp_fprop) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop -> next) tmp_fprop = tmp_fprop -> next; tmp_fprop -> next = duplicate_field_prop (tmp_fstr -> def, f-7); tmp_fprop = tmp_fprop -> next; for (k=0; k aid[k] = edit_atids[k]; } } else { tmp_fstr -> other = duplicate_field_prop (tmp_fstr -> def, f-7); for (k=0; k other -> aid[k] = edit_atids[k]; tmp_fprop = tmp_fstr -> other; } } else { for (l=0; l def; } add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label (str, -1, (is_moy) ? 70 : 100, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); show_it = tmp_fprop -> show; use_it = tmp_fprop -> use; } else { l = f - MOLIMIT; tmp_fbody = get_active_body (id, l); body_lab = markup_label (body_str (tmp_fbody -> bd), 250, 50, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, body_lab, FALSE, FALSE, 0); if (l > 0) { for (k=0; k< body_at(l); k++) { hbox = create_hbox (0); if (l == 2) { lab = markup_label (_("Tersoff atom: "), 100, -1, 0.0, 0.5); } else { lab = markup_label (_(co_name[k]), 100, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_fbody -> na[k] < 0) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { str = g_strdup_printf ("%s", get_active_atom (tmp_fbody -> ma[k][0], tmp_fbody -> a[k][0]) -> name); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(11+k)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } } show_it = tmp_fbody -> show; use_it = tmp_fbody -> use; } break; } if (f < SEXTERN) { hbox = create_hbox (0); lab = markup_label(_("Visualize in the model: "), (f == 1) ? 150 : 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, show_it, G_CALLBACK(visualize_it), GINT_TO_POINTER(f)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } if (f == 1) { str = g_strdup_printf (_("* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file.")); lab = markup_label (str, -1, 75, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); } if (f > 1) { hbox = create_hbox (0); lab = markup_label(_("Use to create force field: "), 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, use_it, G_CALLBACK(select_it), GINT_TO_POINTER(f)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); if (f > 5) { if (f > 6 && f < 16) { if (f != 15 || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { hbox = create_hbox (0); gchar * funits[5] ={"Ev", "kcal mol-1", "kJ mol-1", "K B-1", _("DL_POLY internal units")}; str = g_strdup_printf (_("Field parameters *:")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_field_prop_combo (f, is_moy), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); str = g_strdup_printf (_("* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n"), field_acro[tmp_field -> type], (ff_unit == 4) ? _(funits[ff_unit]) : funits[ff_unit]); lab = markup_label (str, -1, 75, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); } } hbox = create_hbox (0); str = g_strdup_printf (_("Potential: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); field_key_combo = create_combo (); for (j=0; j key); break; case SEXTERN: combo_set_active (field_key_combo, tmp_fext -> key); break; default: if (f < MOLIMIT) { combo_set_active (field_key_combo, tmp_fprop -> key); } else { // non nonded combo_set_active (field_key_combo, tmp_fbody -> key); } break; } g_signal_connect (G_OBJECT(field_key_combo), "changed", G_CALLBACK(changed_field_key_combo), GINT_TO_POINTER(f)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, param_box, FALSE, FALSE, 5); } else if (f == 3) { hbox = create_hbox (0); str = g_strdup_printf (_(" (1) average distance between the 2 atoms\n\tas measured in the 3D model")); lab = markup_label (str, 320, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } else if (f == 4) { hbox = create_hbox (0); str = g_strdup_printf (_(" (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model")); lab = markup_label (str, 320, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } } rep.a = f; rep.b = m; g_signal_connect (G_OBJECT(dialog), "response", G_CALLBACK(run_edit_parameters), NULL); show_the_widgets (dialog); if (f == 2) { if (tmp_fshell -> ia[0] < 0 || tmp_fshell -> ia[1] < 1) hide_the_widgets (shell_hbox[2]); if (tmp_fshell -> ia[0] < 0) widget_set_sensitive (shell_hbox[1], FALSE); } dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } /*! \fn void update_tersoffs (int id, int key) \brief update non bonded potential \param id potential id \param key potenntial type */ void update_tersoffs (int id, int key) { int i; field_nth_body * bod = tmp_field -> first_body[2]; for (i=0; i nbody[2]; i++) { if (i != id) { if (bod -> key != key) { bod -> key = key; bod -> val = NULL; bod -> val = allocfloat (fvalues[activef][MOLIMIT-4][bod -> key]); } } if (bod -> next != NULL) bod = bod -> next; } if (key && tmp_field -> cross != NULL) { g_free (tmp_field -> cross); tmp_field -> cross = NULL; } } /*! \fn void check_tersoffs (int id, int key) \brief check non bonded potential \param id potential id \param key potential type */ void check_tersoffs (int id, int key) { int i, j; if (change_tersoff && id != -1) update_tersoffs (id, key); if (! key) { if (tmp_field -> cross) { g_free (tmp_field -> cross); tmp_field -> cross = NULL; } if (cross) { tmp_field -> cross = g_malloc0(tmp_field -> nbody[2]*sizeof*tmp_field -> cross); for (i=0; i nbody[2]; i++) { tmp_field -> cross[i] = g_malloc0(tmp_field -> nbody[2]*sizeof*tmp_field -> cross[i]); for (j=0; j nbody[2]; j++) tmp_field -> cross[i][j] = duplicate_double (3, cross[i][j]); } } else { tmp_field -> cross = alloctdouble (tmp_field -> nbody[2], tmp_field -> nbody[2], 3); } } } /*! \fn G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief edit field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT (data); gchar * tmp; switch (i) { case 0: if (action == NULL) { tmp_fmol = get_active_field_molecule (row_id); tmp = g_strdup_printf (_("Please enter name for new molecule N°%d"), tmp_field -> molecules); tmp_fmol -> name = g_strdup_printf("MOL-%d", i); tmp = cask (tmp, _("Molecule name:"), 0, tmp_fmol -> name, field_assistant); if (tmp != NULL) { tmp_fmol -> name = g_strdup_printf ("%s", tmp); g_free (tmp); } } else { tmp_fmol = get_active_field_molecule (row_id); tmp = g_strdup_printf (_("Please enter name for molecule N°%d"), row_id+1); tmp = cask (tmp, _("Molecule name:"), 0, tmp_fmol -> name, field_assistant); if (tmp != NULL) { tmp_fmol -> name = g_strdup_printf ("%s", tmp); g_free (tmp); clean_up_molecules_info (FALSE); } } break; default: if (i == MOLIMIT+2) { num_body_d = tmp_field -> nbody[2]; cross = NULL; if (tmp_field -> cross != NULL) { cross = g_malloc0(tmp_field -> nbody[2]*sizeof*cross); for (j=0; j nbody[2]; j++) { cross[j] = g_malloc0(tmp_field -> nbody[2]*sizeof*cross[j]); for (k=0; k nbody[2]; k++) cross[j][k] = duplicate_double (3, tmp_field -> cross[j][k]); } } change_tersoff = FALSE; } edit_parameters (i, row_id); if (i == MOLIMIT+2) check_tersoffs (tmp_fbody -> id, tmp_fbody -> key); update_field_trees (); break; } } /*! \fn G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k, l, m; gboolean save_it; i = GPOINTER_TO_INT (data); field_molecule * fmol; if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = fmol = get_active_field_molecule (j); } if (i == 2) { if (fmol -> first_shell == NULL) { fmol -> first_shell = init_field_shell (fmol -> shells, 0, 0); } else { tmp_fshell = get_active_shell (j, fmol -> shells); tmp_fshell -> next = init_field_shell (fmol -> shells, 0, 0); tmp_fshell -> next -> prev = g_malloc0(sizeof*tmp_fshell -> next -> prev); tmp_fshell -> next -> prev = tmp_fshell; } row_id = fmol -> shells; edit_parameters (i, fmol -> shells); if (tmp_fshell -> ia[0] || tmp_fshell -> ia[1]) { fmol -> shells ++; if (! tmp_fshell -> ia[0] || ! tmp_fshell -> ia[1]) tmp_fshell -> use = FALSE; } else { tmp_fshell = get_active_shell (j, fmol -> shells); tmp_fshell -> next = NULL; if (fmol -> shells == 0) fmol -> first_shell = NULL; } } else if (i == 3) { if (fmol -> first_constraint == NULL) { fmol -> first_constraint = init_field_constraint (fmol -> constraints, 0, 0); } else { tmp_fcons = get_active_constraint (j, fmol -> constraints); tmp_fcons -> next = init_field_constraint (fmol -> constraints, 0, 0); tmp_fcons -> next -> prev = g_malloc0(sizeof*tmp_fcons -> next -> prev); tmp_fcons -> next -> prev = tmp_fcons; } row_id = fmol -> constraints; edit_parameters (i, fmol -> constraints); if (tmp_fcons -> ia[0] || tmp_fcons -> ia[1]) { fmol -> constraints ++; if (! tmp_fcons -> ia[0] || ! tmp_fcons -> ia[1]) tmp_fcons -> use = FALSE; } else { tmp_fcons = get_active_constraint (j, fmol -> constraints); tmp_fcons -> next = NULL; if (fmol -> constraints == 0) fmol -> first_constraint = NULL; } } else if (i == 4) { if (fmol -> first_pmf == NULL) { fmol -> first_pmf = init_field_pmf (fmol -> pmfs, NULL, NULL, NULL); } else { tmp_fpmf = get_active_pmf (j, fmol -> pmfs); tmp_fpmf -> next = init_field_pmf (fmol -> pmfs, NULL, NULL, NULL); tmp_fpmf -> next -> prev = g_malloc0(sizeof*tmp_fpmf -> next -> prev); tmp_fpmf -> next -> prev = tmp_fpmf; } row_id = fmol -> pmfs; edit_parameters (i, fmol -> pmfs); if (tmp_fpmf -> num[0] > 0 || tmp_fpmf -> num[1] > 0) { fmol -> pmfs ++; if (tmp_fpmf -> length == 0.0 || tmp_fpmf -> num[0] == 0 || tmp_fpmf -> num[1] == 0) tmp_fpmf -> use = FALSE; if (tmp_fpmf -> use) { toviz.c = TRUE; select_object (i, fmol -> pmfs, j); } } else { tmp_fpmf = get_active_pmf (j, fmol -> pmfs); tmp_fpmf -> next = NULL; if (fmol -> pmfs == 0) fmol -> first_pmf = NULL; } } else if (i == 5) { if (fmol -> first_rigid == NULL) { fmol -> first_rigid = init_field_rigid (fmol -> rigids, 0, NULL); } else { tmp_frig = get_active_rigid (j, fmol -> rigids); tmp_frig -> next = init_field_rigid (fmol -> rigids, 0, NULL); tmp_frig -> next -> prev = g_malloc0(sizeof*tmp_frig -> next -> prev); tmp_frig -> next -> prev = tmp_frig; } row_id = fmol -> rigids; edit_parameters (i, fmol -> rigids); if (tmp_frig -> num > 0) { fmol -> rigids ++; tmp_frig -> use = TRUE; } else { tmp_frig = get_active_rigid (j, fmol -> rigids); tmp_frig -> next = NULL; if (fmol -> rigids == 0) fmol -> first_rigid = NULL; } } else if (i == 6) { if (fmol -> first_tethered == NULL) { fmol -> first_tethered = init_field_tethered (fmol -> tethered, 0); } else { tmp_ftet = get_active_tethered (j, fmol -> tethered); tmp_ftet -> next = init_field_tethered (fmol -> tethered, 0); tmp_ftet -> next -> prev = g_malloc0(sizeof*tmp_ftet -> next -> prev); tmp_ftet -> next -> prev = tmp_ftet; } row_id = fmol -> tethered; edit_parameters (i, fmol -> tethered); if (tmp_ftet -> num) { fmol -> tethered ++; tmp_ftet -> use = TRUE; } else { tmp_ftet = get_active_tethered (j, fmol -> tethered); tmp_ftet -> next = NULL; if (fmol -> tethered == 0) fmol -> first_tethered = NULL; } } else if (i == SEXTERN) { if (tmp_field -> first_external == NULL) { tmp_field -> first_external = init_field_external (tmp_field -> extern_fields); } else { tmp_fext = get_active_external (tmp_field -> extern_fields-1); tmp_fext -> next = init_field_external (tmp_field -> extern_fields); tmp_fext -> next -> prev = g_malloc0(sizeof*tmp_fext -> next -> prev); tmp_fext -> next -> prev = tmp_fext; } row_id = tmp_field -> extern_fields; edit_parameters (i, tmp_field -> extern_fields); if (tmp_fext -> use && tmp_fext -> key > -1) { tmp_field -> extern_fields ++; } else { tmp_fext = get_active_external (tmp_field -> extern_fields); tmp_fext -> next = NULL; if (tmp_field -> extern_fields == 0) tmp_field -> first_external = NULL; } } else { j = i - MOLIMIT; row_id = tmp_field -> nbody[j]; if (tmp_field -> first_body[j] == NULL) { tmp_field -> first_body[j] = init_field_nth_body (tmp_field -> nbody[j], j, NULL, NULL, NULL); } else { tmp_fbody = get_active_body (tmp_field -> nbody[j], j); tmp_fbody -> next = init_field_nth_body (tmp_field -> nbody[j], j, NULL, NULL, NULL); tmp_fbody -> next -> prev = g_malloc0(sizeof*tmp_fbody -> next -> prev); tmp_fbody -> next -> prev = tmp_fbody; } if (j == 2) { cross = NULL; cross = alloctdouble (tmp_field -> nbody[j]+1, tmp_field -> nbody[j]+1, 3); if (tmp_field -> cross != NULL) { for (k=0; k nbody[j]; k++) { for (l=0; l nbody[j]; l++) { for (m=0; m<3; m++) cross[k][l][m] = cross[l][k][m] = tmp_field -> cross[k][l][m]; } } } else { tmp_field -> cross = alloctdouble (1, 1, 3); } } edit_parameters (i, tmp_field -> nbody[j]); save_it = FALSE; k = body_at (j); for (l=0; l na[l] > -1) save_it = TRUE; if (save_it) { tmp_field -> nbody[j] ++; for (l=0; l na[l] < 0) tmp_fbody -> use = FALSE; if (j == 2) check_tersoffs (tmp_fbody -> id, tmp_fbody -> key); } else { tmp_fbody = get_active_body (tmp_field -> nbody[j], j); tmp_fbody -> next = NULL; if (tmp_field -> nbody[j] == 0) tmp_field -> first_body[j] = NULL; } } update_field_trees (); } /*! \fn G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k, l, m, n, o; i = GPOINTER_TO_INT (data); gchar * str; if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); str = g_strdup_printf (_("Delete %s N°%d from molecule %s, is this correct ?"), _(elemts[i]), row_id+1, tmp_fmol -> name); } else { str = g_strdup_printf (_("Delete %s, is this correct ?"), _(elemts[i])); } selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { if (i == 2) { tmp_fshell = get_active_shell (j, row_id); if (tmp_fshell == tmp_fmol -> first_shell) { if (tmp_fshell -> next != NULL) { tmp_fmol -> first_shell = tmp_fmol -> first_shell -> next; tmp_fmol -> first_shell -> prev = NULL; } else { tmp_fmol -> first_shell = NULL; } } else if (tmp_fshell -> next == NULL) { tmp_fshell = tmp_fshell -> prev; tmp_fshell -> next = NULL; } else { tmp_fshell -> prev -> next = tmp_fshell -> next; tmp_fshell -> next -> prev = tmp_fshell -> prev; } tmp_fmol -> shells --; tmp_fshell = tmp_fmol -> first_shell; for (j=0; j shells; j++) { tmp_fshell -> id = j; if (tmp_fshell -> next != NULL) tmp_fshell = tmp_fshell -> next; } } else if (i == 3) { tmp_fcons = get_active_constraint (j, row_id); if (tmp_fcons == tmp_fmol -> first_constraint) { if (tmp_fcons -> next != NULL) { tmp_fmol -> first_constraint = tmp_fmol -> first_constraint -> next; tmp_fmol -> first_constraint -> prev = NULL; } else { tmp_fmol -> first_constraint = NULL; } } else if (tmp_fcons -> next == NULL) { tmp_fcons = tmp_fcons -> prev; tmp_fcons -> next = NULL; } else { tmp_fcons -> prev -> next = tmp_fcons -> next; tmp_fcons -> next -> prev = tmp_fcons -> prev; } tmp_fmol -> constraints --; tmp_fcons = tmp_fmol -> first_constraint; for (j=0; j constraints; j++) { tmp_fcons -> id = j; if (tmp_fcons -> next != NULL) tmp_fcons = tmp_fcons -> next; } } else if (i == 4) { tmp_fpmf = get_active_pmf (j, row_id); if (tmp_fpmf == tmp_fmol -> first_pmf) { if (tmp_fpmf -> next != NULL) { tmp_fmol -> first_pmf = tmp_fmol -> first_pmf -> next; tmp_fmol -> first_pmf -> prev = NULL; } else { tmp_fmol -> first_pmf = NULL; } } else if (tmp_fpmf -> next == NULL) { tmp_fpmf = tmp_fpmf -> prev; tmp_fpmf -> next = NULL; } else { tmp_fpmf -> prev -> next = tmp_fpmf -> next; tmp_fpmf -> next -> prev = tmp_fpmf -> prev; } tmp_fmol -> pmfs --; tmp_fpmf = tmp_fmol -> first_pmf; for (j=0; j pmfs; j++) { tmp_fpmf -> id = j; if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } } else if (i == 5) { tmp_frig = get_active_rigid (j, row_id); if (tmp_frig == tmp_fmol -> first_rigid) { if (tmp_frig -> next != NULL) { tmp_fmol -> first_rigid = tmp_fmol -> first_rigid -> next; tmp_fmol -> first_rigid -> prev = NULL; } else { tmp_fmol -> first_rigid = NULL; } } else if (tmp_frig -> next == NULL) { tmp_frig = tmp_frig -> prev; tmp_frig -> next = NULL; } else { tmp_frig -> prev -> next = tmp_frig -> next; tmp_frig -> next -> prev = tmp_frig -> prev; } tmp_fmol -> rigids --; tmp_frig = tmp_fmol -> first_rigid; for (j=0; j rigids; j++) { tmp_frig -> id = j; if (tmp_frig -> next != NULL) tmp_frig = tmp_frig -> next; } } else if (i == 6) { tmp_ftet = get_active_tethered (j, row_id); if (tmp_ftet == tmp_fmol -> first_tethered) { if (tmp_ftet -> next != NULL) { tmp_fmol -> first_tethered = tmp_fmol -> first_tethered -> next; tmp_fmol -> first_tethered -> prev = NULL; } else { tmp_fmol -> first_tethered = NULL; } } else if (tmp_ftet -> next == NULL) { tmp_ftet = tmp_ftet -> prev; tmp_ftet -> next = NULL; } else { tmp_ftet -> prev -> next = tmp_ftet -> next; tmp_ftet -> next -> prev = tmp_ftet -> prev; } tmp_fmol -> tethered --; tmp_ftet = tmp_fmol -> first_tethered; for (j=0; j tethered; j++) { tmp_ftet -> id = j; if (tmp_ftet -> next != NULL) tmp_ftet = tmp_ftet -> next; } } else if (i == SEXTERN) { tmp_fext = get_active_external (row_id); if (tmp_fext == tmp_field -> first_external) { if (tmp_fext -> next != NULL) { tmp_field -> first_external = tmp_field -> first_external -> next; tmp_field -> first_external -> prev = NULL; } else { tmp_field -> first_external = NULL; } } else if (tmp_fext -> next == NULL) { tmp_fext = tmp_fext -> prev; tmp_fext -> next = NULL; } else { tmp_fext -> prev -> next = tmp_fext -> next; tmp_fext -> next -> prev = tmp_fext -> prev; } tmp_field -> extern_fields --; tmp_fext = tmp_field -> first_external; for (k=0; k extern_fields; k++) { tmp_fext -> id = k; if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } } else { j = i - MOLIMIT; tmp_fbody = get_active_body (row_id, j); if (j == 2) { cross = NULL; if (tmp_field -> nbody[j] > 1) { cross = alloctdouble (tmp_field -> nbody[j]-1, tmp_field -> nbody[j]-1, 3); m = -1; for (k=0; k nbody[j]; k++) { if (k != tmp_fbody -> id) { m ++; n = -1; for (l=0; l nbody[j]; l++) { if (l != tmp_fbody -> id) { n ++; for (o=0; o<3; o++) cross[m][n][o] = cross[n][m][o] = tmp_field -> cross[k][l][o]; } } } } } } if (tmp_fbody == tmp_field -> first_body[j]) { if (tmp_fbody -> next != NULL) { tmp_field -> first_body[j] = tmp_field -> first_body[j] -> next; tmp_field -> first_body[j] -> prev = NULL; } else { tmp_field -> first_body[j] = NULL; } } else if (tmp_fbody -> next == NULL) { tmp_fbody = tmp_fbody -> prev; tmp_fbody -> next = NULL; } else { tmp_fbody -> prev -> next = tmp_fbody -> next; tmp_fbody -> next -> prev = tmp_fbody -> prev; } tmp_field -> nbody[j] --; g_free (tmp_fbody); tmp_fbody = tmp_field -> first_body[j]; k = 0; while (tmp_fbody) { tmp_fbody -> id = k; k ++; tmp_fbody = tmp_fbody -> next; } if (j == 2) check_tersoffs (-1, tmp_field -> first_body[j] -> key); } update_field_trees (); } } atomes_1.3.1/src/calc/dl_poly/dlp_mol.c0000664000175000017500000007043615212624223017444 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_mol.c * @short Functions to add / remove molecule(s) to / from the force field * @author Sébastien Le Roux */ /* * This file: 'dlp_mol.c' * * Contains: * - The functions to add / remove molecule(s) to / from the force field * * List of functions: gchar * remove_text (int i, int j, gchar * str); void clean_up_molecules_info (gboolean usel); void set_sensitive_mol (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol); void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart); void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol); G_MODULE_EXPORT void select_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data); G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data); field_atom* new_atom_to_merge (int id, field_molecule * fmol); */ #include "dlp_field.h" #include "calc.h" #include "interface.h" #include "glview.h" int active_col; int a_mol, b_mol; int * new_mol; extern ColRGBA init_color (int id, int numid); field_molecule * to_remove; GtkWidget * remove_label; GtkCellRenderer * remove_renderer[5]; GtkTreeViewColumn * remove_col[5]; gboolean removing = FALSE; extern void field_unselect_all (); extern gchar * set_field_atom_name (field_atom* ato, field_molecule * mol); extern void find_atom_id_in_field_molecule (field_molecule * fmol); extern void viz_fragment (field_molecule * fmol, int id, int viz); extern void check_to_visualize_properties (int id); /*! \fn gchar * remove_text (int i, int j, gchar * str) \brief get removal information text \param i -2 = remove field atom, -1 = remove field molecule \param j -1 = remove field molecule, else remove field atom \param str the name of the object to remove */ gchar * remove_text (int i, int j, gchar * str) { switch (i) { case -2: return g_strdup_printf (_("The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly."), str, str); break; case -1: return g_strdup_printf (_("The description of molecule %s will be deleted\nand merged with the one of the selected molecule."), str); break; default: switch (j) { case -1: return g_strdup_printf (_("The description of molecule %s will be deleted\nand merged with the one of molecule %s"), str, get_active_field_molecule(i) -> name); break; default: return g_strdup_printf (_("The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly."), str, get_active_atom(i,j) -> name, str); break; } break; } } /*! \fn void clean_up_molecules_info (gboolean usel) \brief prepare molecule related widgets in the assistant \param usel unselect all atom(s) (yes / no) */ void clean_up_molecules_info (gboolean usel) { int i; for (i=0; i name)); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); } } dint ** atomd_id_save; /*! \fn void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol) \brief clean the field atom from a list of atom(s) \param fmol the target fied molecule \param at the field atom to clean, remove specific atom(s) from it \param mols the number of fragment(s) for this molecule \param mol the list of fragment id */ void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol) { int i, j, k, l; l = 0; for (i=0; i < at -> num; i++) { k = at -> list[i]; for (j=0; j < mols; j++) { if (tmp_proj -> atoms[0][k].coord[2] == mol[j]) { l ++; } } } int * r_list = allocint (l); int * s_list = allocint (l); int * t_list = allocint (l); l = -1; at -> frozen = 0; for (i=0; i < at -> num; i++) { k = at -> list[i]; for (j=0; j < mols; j++) { if (tmp_proj -> atoms[0][k].coord[2] == mol[j]) { l ++; r_list[l] = k; s_list[l] = at -> list_id[i]; t_list[l] = at -> frozen_id[i]; if (t_list[l]) at -> frozen ++; } } } at -> num = l+1; at -> list = NULL; at -> list = allocint (at -> num); at -> list_id = NULL; at -> list_id = allocint (at -> num); at -> frozen_id = NULL; at -> frozen_id = allocbool (at -> num); for (i=0; i < at -> num; i++) { at -> list[i] = r_list[i]; at -> list_id[i] = s_list[i]; at -> frozen_id[i] = t_list[i]; j = at -> list[i]; k = at -> list_id[i]; for (l=0; l atoms[0][j].coord[2] == mol[l]) { atomd_id_save[k][l].a = at -> id; atomd_id_save[k][l].b = i; } } } g_free (r_list); g_free (s_list); g_free (t_list); } /*! \fn void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the force field molecule selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, active_col, & j, -1); gtk_tree_model_get (mod, iter, 0, & i, -1); set_renderer_color (j, renderer, init_color (i-1, num_field_objects)); } /*! \fn G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) \brief add molecule to force field - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) { int i, j, k; int * old_mol = NULL; gchar * str; gboolean done = FALSE; gboolean saveit = FALSE; // Id - Name - Multiplicity - Select // While selected < m apply inactif switch (response_id) { case GTK_RESPONSE_APPLY: if (a_mol > 0 && a_mol < tmp_fmol -> multi) { if (a_mol > 1) { str = g_strdup_printf (_("Fragments N°%d"), new_mol[0]+1); if (a_mol > 2) { for (i=1; i molecules-1) -> next = next_fmol; next_fmol -> prev = get_active_field_molecule(tmp_field -> molecules-1); next_fmol -> id = tmp_field -> molecules; next_fmol -> multi = a_mol; next_fmol -> fragments = NULL; next_fmol -> fragments = allocint (a_mol); for (i=0; i fragments[i] = new_mol[i]; // Atoms_id and field atoms atomd_id_save = g_malloc0(next_fmol-> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc0(next_fmol -> multi*sizeof*atomd_id_save[i]); } tmp_fat = next_fmol -> first_atom; for (i=0; i < next_fmol -> atoms; i++) { clear_field_atoms (next_fmol, tmp_fat, a_mol, new_mol); tmp_fat -> name = g_strdup_printf ("%s", set_field_atom_name (tmp_fat, next_fmol)); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } g_free (next_fmol -> atoms_id); next_fmol -> atoms_id = NULL; next_fmol -> atoms_id = g_malloc0(next_fmol-> mol -> natoms*sizeof*next_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { next_fmol -> atoms_id[i] = g_malloc0(next_fmol -> multi*sizeof*next_fmol -> atoms_id[i]); for (j=0; j multi; j++) { next_fmol -> atoms_id[i][j].a = atomd_id_save[i][j].a; next_fmol -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); old_mol = allocint (old_fmol -> multi - a_mol); k = -1; for (i=0; i multi; i++) { saveit = TRUE; for (j=0; j fragments[i]) { saveit = FALSE; break; } } if (saveit) { k++; old_mol[k] = old_fmol -> fragments[i]; } } new_mol = NULL; // Now we deal with atoms_id and the field atoms atomd_id_save = g_malloc0(old_fmol-> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc0((old_fmol -> multi - a_mol)*sizeof*atomd_id_save[i]); } tmp_fat = old_fmol -> first_atom; for (i=0; i < old_fmol -> atoms; i++) { clear_field_atoms (old_fmol, tmp_fat, old_fmol -> multi - a_mol, old_mol); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } old_fmol -> multi -= a_mol; g_free (old_fmol -> atoms_id); old_fmol -> atoms_id = NULL; old_fmol -> atoms_id = g_malloc0(old_fmol-> mol -> natoms*sizeof*old_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { old_fmol -> atoms_id[i] = g_malloc0(old_fmol -> multi*sizeof*old_fmol -> atoms_id[i]); for (j=0; j multi; j++) { old_fmol -> atoms_id[i][j].a = atomd_id_save[i][j].a; old_fmol -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); old_fmol -> fragments = NULL; old_fmol -> fragments = allocint (old_fmol -> multi); for (i=0; i multi; i++) old_fmol -> fragments[i] = old_mol[i]; old_mol = NULL; row_id = tmp_field -> molecules; tmp_field -> molecules ++; edit_field_prop (NULL, NULL, GINT_TO_POINTER(0)); clean_up_molecules_info (TRUE); } } break; default: field_unselect_all (); done = TRUE; break; } if (done) { g_free (new_mol); new_mol = NULL; destroy_this_dialog (dialog); } } /*! \fn G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add molecule to force field - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) { int i; field_object = 0; gchar * str = g_strdup_printf (_("Please select the fragment(s) of the new molecule")); GtkWidget * amol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * add_tree = NULL; GtkTreeIter iter; GtkTreeViewColumn * mol_col[2]; GtkCellRenderer * mol_cell[2]; gchar * mol_title[2] = {i18n("Fragment"), i18n("Viz.3D & Select")}; gchar * ctype[2]={"text", "active"}; GType col_type[2] = {G_TYPE_INT, G_TYPE_BOOLEAN}; active_col = 1; a_mol = 0; GtkTreeStore * add_model = gtk_tree_store_newv (2, col_type); add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); tmp_fmol = get_active_field_molecule (row_id); for (i=0; i<2; i++) { if (i == 0) { mol_cell[i] = gtk_cell_renderer_text_new (); } else { mol_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(mol_cell[i]), "toggled", G_CALLBACK(select_mol), & add_model); } mol_col[i] = gtk_tree_view_column_new_with_attributes (_(mol_title[i]), mol_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(add_tree), mol_col[i]); gtk_tree_view_column_set_alignment (mol_col[i], 0.5); if (i == 0) { gtk_tree_view_column_set_cell_data_func (mol_col[i], mol_cell[i], molecule_set_color, NULL, NULL); } } // fill model num_field_objects = tmp_coord-> totcoord[2]; new_mol = NULL; new_mol = allocint (tmp_fmol -> multi); for (i=0; i multi; i++) { gtk_tree_store_append (add_model, & iter, NULL); gtk_tree_store_set (add_model, & iter, 0, tmp_fmol -> fragments[i] + 1, 1, 0, -1); new_mol[i] = -1; } g_object_unref (add_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(add_tree)); i = ((tmp_fmol -> multi+1)*35 < 500) ? (tmp_fmol -> multi+1)*35 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (amol), 220, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); run_this_gtk_dialog (amol, G_CALLBACK(run_add_molecule_to_field), NULL); } /*! \fn void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart) \brief merge all field atoms to another field molecule \param new_mol the field molecule to merge the atom(s) with \param mstart the fragment id to start with */ void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart) { field_atom* fat, * fbt; fat = get_active_atom (new_mol -> id, new_mol -> atoms-1); int i, j, k, l, m, n; for (i=0; i num; i++) { j = fat -> list[i]; k = fat -> list_id[i]; l = new_mol -> atoms_id[k][0].a; fbt = get_active_atom (new_mol -> id, l); fbt -> list[fbt -> num] = j; fbt -> list_id[fbt -> num] = k; m = tmp_proj -> atoms[0][j].coord[2]; for (n=mstart; n multi; n++) { if (new_mol -> fragments[n] == m) { new_mol -> atoms_id[k][n].a = fbt -> id; new_mol -> atoms_id[k][n].b = fbt -> num; break; } } fbt -> num ++; } } /*! \fn void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol) \brief update the data for the newly 'merged' field atom \param at the target field atom \param new_mol the target molecule to merge with \param old_mol the molecule to remove */ void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol) { int i, j; int * saved_list = allocint (at -> num); int * saved_list_id = allocint (at -> num); int * saved_frozen_id = allocbool (at -> num); for (j=0; j < at -> num; j++) { saved_list[j] = at -> list[j]; saved_list_id[j] = at -> list_id[j]; saved_frozen_id[j] = at -> frozen_id[j]; } i = at -> num; i /= (new_mol -> multi - old_mol -> multi); i *= old_mol -> multi; g_free (at -> list); at -> list = allocint (at -> num + i); g_free (at -> list_id); at -> list_id = allocint (at -> num + i); g_free (at -> frozen_id); at -> frozen_id = allocbool (at -> num + i); for (j=0; j< at -> num; j++) { at -> list[j] = saved_list[j]; at -> list_id[j] = saved_list_id[j]; at -> frozen_id[j] = saved_frozen_id[j]; } g_free (saved_list); g_free (saved_list_id); g_free (saved_frozen_id); } /*! \fn field_atom* new_atom_to_merge (int id, field_molecule * fmol) \brief merge field atoms from a field molecule \param id the id of the new field atom \param fmol the field molecule for of the atoms */ field_atom* new_atom_to_merge (int id, field_molecule * fmol) { field_atom* fat, * fbt; fat = g_malloc0(sizeof*fat); fat -> id = id; fat -> sp = -1; fat -> num = fmol -> mol -> natoms * fmol -> multi; fat -> list = allocint (fmol -> mol -> natoms * fmol -> multi); fat -> list_id = allocint (fmol -> mol -> natoms * fmol -> multi); fbt = fmol -> first_atom; int i, j; i = 0; while (fbt != NULL) { for (j=0; j num; j++) { fat -> list[i] = fbt -> list[j]; fat -> list_id[i] = fbt -> list_id[j]; i ++; } fbt = fbt -> next; } return fat; } /*! \fn G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) \brief remove molecule from force field - running the dialog \param rmol the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_mol) { done = TRUE; field_molecule * to_merge = get_active_field_molecule(new_mol[0]); int * old_mol = allocint (to_merge -> multi); for (i=0; i multi; i++) old_mol[i] = to_merge -> fragments[i]; g_free (to_merge -> fragments); to_merge -> fragments = allocint (to_merge -> multi + to_remove -> multi); for (i=0; i multi; i++) to_merge -> fragments[i] = old_mol[i]; old_mol = NULL; for (i=to_merge -> multi; i < to_merge -> multi + to_remove -> multi; i++) { to_merge -> fragments[i] = to_remove -> fragments[i - to_merge -> multi]; } atomd_id_save = g_malloc0(to_merge -> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc0((to_merge -> multi+to_remove -> multi)*sizeof*atomd_id_save[i]); for (j=0; j multi; j++) { atomd_id_save[i][j].a = to_merge -> atoms_id[i][j].a; atomd_id_save[i][j].b = to_merge -> atoms_id[i][j].b; } for (j=to_merge -> multi; j multi+to_remove -> multi; j++) { atomd_id_save[i][j].a = -1; atomd_id_save[i][j].b = -1; } } to_merge -> multi += to_remove -> multi; g_free (to_merge -> atoms_id); to_merge -> atoms_id = g_malloc0(to_merge -> mol -> natoms*sizeof*to_merge -> atoms_id); for (i=0; i mol -> natoms; i++) { to_merge -> atoms_id[i] = g_malloc0(to_merge -> multi*sizeof*to_merge -> atoms_id[i]); for (j=0; j multi; j++) { to_merge -> atoms_id[i][j].a = atomd_id_save[i][j].a; to_merge -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); tmp_fat = get_active_atom (to_merge -> id, to_merge -> atoms -1); tmp_fat -> next = new_atom_to_merge (to_merge -> atoms, to_remove); to_merge -> atoms ++; tmp_fat = to_merge -> first_atom; for (i=0; i < to_merge -> atoms-1; i++) { prepare_atoms_to_merge (tmp_fat, to_merge, to_remove); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } merge_all_atoms_to_mol (to_merge, to_merge -> multi - to_remove -> multi); tmp_fat = get_active_atom (to_merge -> id, to_merge -> atoms-2); g_free (tmp_fat -> next); tmp_fat -> next = NULL; to_merge -> atoms --; if (to_remove == tmp_field -> first_molecule) { tmp_field -> first_molecule = to_remove -> next; tmp_field -> first_molecule -> prev = NULL; } else { if (to_remove -> next != NULL) { tmp_fmol = to_remove -> prev; tmp_fmol -> next = to_remove -> next; to_remove -> next -> prev = tmp_fmol; } else { to_remove = to_remove -> prev; to_remove -> next = NULL; } } tmp_field -> molecules --; clean_up_molecules_info (TRUE); } break; default: field_unselect_all (); done = TRUE; break; } if (done) destroy_this_dialog (rmol); } /*! \fn G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove molecule from force field - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) { to_remove = (field_molecule *) data; int i, j; field_object = 0; gchar * str = g_strdup_printf (_("Select the molecule to merge molecule \"%s\" with"), to_remove -> name); GtkWidget * rmol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rmol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * remove_tree = NULL; GtkTreeIter iter; gchar * mol_title[4] = {i18n("Id."), i18n("Name"), i18n("Multiplicity"), i18n("Viz.3D & Merge with")}; gchar * ctype[4]={"text", "text", "text", "active"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN}; active_col = 3; a_mol = 0; new_mol = allocint (1); GtkTreeStore * remove_model = gtk_tree_store_newv (4, col_type); remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<4; i++) { if (i < 3) { remove_renderer[i] = gtk_cell_renderer_text_new (); } else { remove_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(remove_renderer[i]), TRUE); g_signal_connect (G_OBJECT(remove_renderer[i]), "toggled", G_CALLBACK(select_mol), & remove_model); } remove_col[i] = gtk_tree_view_column_new_with_attributes (_(mol_title[i]), remove_renderer[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), remove_col[i]); if (i < 3) { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], molecule_set_color, NULL, NULL); } else { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], set_sensitive_mol, NULL, NULL); } } // fill model tmp_fmol = tmp_field -> first_molecule; j = 0; for (i=0; i molecules; i++) { if (tmp_fmol != to_remove && tmp_fmol -> mol -> id == to_remove -> mol -> id) { j ++; gtk_tree_store_append (remove_model, & iter, NULL); gtk_tree_store_set (remove_model, & iter, 0, i+1, 1, tmp_fmol -> name, 2, tmp_fmol -> multi, 3, 0, -1); } if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } num_field_objects = tmp_field -> molecules; g_object_unref (remove_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(remove_tree)); i = ((j+1)*40 < 500) ? (j+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rmol), 375, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); remove_label = gtk_label_new (remove_text(-1, -1, to_remove -> name)); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (rmol), remove_label, FALSE, FALSE, 0); run_this_gtk_dialog (rmol, G_CALLBACK(run_remove_molecule_from_field), NULL); } atomes_1.3.1/src/calc/dl_poly/dlp_viz.c0000664000175000017500000007633415212624223017470 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_viz.c * @short functions to handle the visualization events when creating a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_viz.c' * * Contains: * - The functions to handle the visualization events when creating a classical force field * * List of functions: int get_field_objects (int id, int jd); gboolean show_field_object (int id, int jd, int kd); void field_selection (int i, int viz, int lab, int aid); void viz_fragment (field_molecule * fmol, int id, int viz); void field_unselect_all (); void visualize_bonds (int viz, int aid, field_atom* at, field_atom* bt); void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct); void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); void visualize_body (int viz, int bd, field_nth_body * body); void select_object (int id, int jd, int kd); void visualize_single_struct (int id, int jd, int kd, int * ids); void visualize_object (int id, int jd, int kd); void check_to_visualize_properties_for_this_field_mol (int pid, int mol); void check_to_visualize_properties (int pid); void update_mol_tree (int a, int b); G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data); */ #include "dlp_field.h" #include "project.h" #include "glwindow.h" #include "glview.h" tint toviz; extern int is_special[MAXDATA][11]; extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add); extern void init_default_shaders (glwin * view); /*! \fn void field_selection (int i, int viz, int lab, int aid) \brief select / unselect atom \param i the atom id in the model \param viz visualization status (0= hide, 1 = show) \param lab the value to display for the label \param aid the value to use for the color */ void field_selection (int i, int viz, int lab, int aid) { if (viz && tmp_proj -> atoms[0][i].pick[0] != viz) { tmp_view -> picked ++; } else if (! viz && tmp_proj -> atoms[0][i].pick[0] != viz) { tmp_view -> picked --; } tmp_proj -> atoms[0][i].pick[0] = viz; tmp_proj -> atoms[0][i].label[0] = lab; tmp_proj -> atoms[0][i].coord[4] = aid; } /*! \fn void viz_fragment (field_molecule * fmol, int id, int viz) \brief show / hide fragment \param fmol the target field molecule \param id the fragment id \param viz visualization status (0 = hide, 1 = show) */ void viz_fragment (field_molecule * fmol, int id, int viz) { int i; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == fmol -> fragments[id]) field_selection (i, viz, viz, id); } init_default_shaders (tmp_view); } /*! \fn void field_unselect_all () \brief unselect all atoms */ void field_unselect_all () { int i; for (i=0; i natomes; i++) field_selection (i, FALSE, FALSE, 0); init_default_shaders (tmp_view); } extern gboolean in_bond (int at, int bd[2]); /*! \fn void visualize_bonds (int viz, int aid, field_atom * at, field_atom * bt) \brief show / hide bond / bond restraint \param viz visualization status (0 = hide, 1 = show) \param aid the id of the structural element \param at 1st field atom \param bt 2nd field atom */ void visualize_bonds (int viz, int bid, field_atom* at, field_atom* bt) { int i, j, k, l; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { field_selection (j, viz, FALSE, bid); field_selection (l, viz, FALSE, bid); } } } } /*! \fn void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct) \brief show / hide angle / angle restraint \param viz visualization status (0 = hide, 1 = show) \param aid the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct) { int i, j, k, l, m, n; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { field_selection (j, viz, FALSE, aid); field_selection (l, viz, FALSE, aid); field_selection (n, viz, FALSE, aid); } } } } } } /*! \fn void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) \brief show / hide dihedral / dihedral restraint \param viz visualization status (0 = hide, 1 = show) \param did the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p; for (i=0; i num; i++) { j = tmp_fat -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { field_selection (j, viz, FALSE, did); field_selection (l, viz, FALSE, did); field_selection (n, viz, FALSE, did); field_selection (p, viz, FALSE, did); } } } } } } } } /*! \fn void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) \brief show / hide improper or inversion \param viz visualization status (0 = hide, 1 = show) \param dih 6 = improper, 7 = inversion \param iid the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p; for (i=0; i num; i++) { j = tmp_fat -> list[i]; if ((tmp_proj -> atoms[0][j].numv > 2 && dih == 6) || (tmp_proj -> atoms[0][j].numv == 3 && dih == 7)) { for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { for (m=0; m atoms[0][j].numv; m++) { if (m != k) { n = tmp_proj -> atoms[0][j].vois[m]; if (tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { for (o=0; o atoms[0][j].numv; o++) { if (o != k && o != m) { p = tmp_proj -> atoms[0][j].vois[o]; if (tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { field_selection (j, viz, FALSE, iid); field_selection (l, viz, FALSE, iid); field_selection (n, viz, FALSE, iid); field_selection (p, viz, FALSE, iid); } } } } } } } } } } } /*! \fn void visualize_body (int viz, int bd, field_nth_body * body) \brief show / hide non bonded interaction \param viz visualization status (0 = hide, 1 = show) \param bd the type of non bonded interaction \param body the target non bonded interaction */ void visualize_body (int viz, int bd, field_nth_body * body) { int h, i, j, k, l; l = body_at (body -> bd); for (h=0; h na[h]; i++) { tmp_fat = get_active_atom (body -> ma[h][i], body -> a[h][i]); for (j=0; j < tmp_fat -> num; j++) { k = tmp_fat -> list[j]; field_selection (k, viz, viz, bd); } } } } /*! \fn int get_field_objects (int id, int jd) \brief get the number of this type of field object \param id the tyoe of field object \param jd the field molecule id */ int get_field_objects (int id, int jd) { int kd; int i; switch (id) { case -1: kd = 0; for (i=0; i molecules; i++) kd = max(kd, get_active_field_molecule (i) -> mol -> natoms); break; case 0: kd = tmp_field -> molecules; break; case 1: kd = 0; for (i=0; i molecules; i++) kd = max(kd, get_active_field_molecule (i) -> atoms); break; case 2: kd = get_active_field_molecule (jd) -> shells; break; case 3: kd = get_active_field_molecule (jd) -> constraints; break; case 4: kd = get_active_field_molecule (jd) -> pmfs; break; case 5: kd = get_active_field_molecule (jd) -> rigids; break; case 6: kd = get_active_field_molecule (jd) -> tethered; break; case SEXTERN: kd = tmp_field -> extern_fields; break; default: if (id < MOLIMIT) { kd = get_active_field_molecule (jd) -> nstruct[id-7]; } else { kd = tmp_field -> nbody[id - MOLIMIT]; } break; } return kd; } /*! \fn void select_object (int id, int jd, int kd) \brief select structural element \param id the type of structural element \param jd the object id, if any \param kd the field molecule id */ void select_object (int id, int jd, int kd) { int i; field_object = id; num_field_objects = get_field_objects (id, kd); switch (id) { case 2: // Select a core-shell unit in a molecule tmp_fshell = get_active_shell (kd, jd); if (tmp_fshell -> ia[0] < 0 || tmp_fshell -> ia[1] < 0) toviz.c = FALSE; tmp_fshell -> use = toviz.c; break; case 3: // Select a contraint bond in a molecule tmp_fcons = get_active_constraint (kd, jd); if (! tmp_fcons -> ia[0] || ! tmp_fcons -> ia[1]) toviz.c = FALSE; tmp_fcons -> use = toviz.c; break; case 4: // Select a PMF in a molecule tmp_fpmf = get_active_field_molecule (kd) -> first_pmf; for (i=0; i < get_active_field_molecule(kd) -> pmfs; i++) { tmp_fpmf -> use = FALSE; if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } tmp_fpmf = get_active_pmf (kd, jd); if (tmp_fpmf -> num[0] > 0 && tmp_fpmf -> num[1] > 0) tmp_fpmf -> use = toviz.c; break; case SEXTERN: tmp_fext = tmp_field -> first_external; for (i=0; i < tmp_field -> extern_fields; i++) { tmp_fext -> use = FALSE; if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } tmp_fext = get_active_external (jd); tmp_fext -> use = toviz.c; break; default: if (id < MOLIMIT) { get_active_struct (id-7, kd, jd) -> def -> use = toviz.c; } else { get_active_body (jd, id - MOLIMIT) -> use = toviz.c; } break; } } /*! \fn void visualize_single_struct (int id, int jd, int kd, int * ids) \brief visualize single structural element \param id the type of structural element \param jd the object id, if any \param kd the field molecule id \param ids the list of atom id in the fragment */ void visualize_single_struct (int id, int jd, int kd, int * ids) { int i, j, k, l, m, n, o, p; int * idat; i = struct_id(id); idat = allocint (i); for (j=0; j atoms_id[k][0].a) -> id; } for (j=0; j multi; l++) { m = tmp_fmol -> atoms_id[k][l].b; n = get_active_atom (kd, tmp_fmol -> atoms_id[k][l].a) -> list[m]; field_selection (n, 0, 0, k); } } g_free (idat); i = ids[0]; j = ids[1]; for (l=0; l< tmp_fmol -> multi; l++) { m = tmp_fmol -> atoms_id[i][l].b; n = get_active_atom (kd, tmp_fmol -> atoms_id[i][l].a) -> list[m]; field_selection (n, toviz.c, 0, jd); o = tmp_fmol -> atoms_id[j][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[j][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } if (id > 8 && id < 15) { k = ids[2]; for (l=0; l< tmp_fmol -> multi; l++) { o = tmp_fmol -> atoms_id[k][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[k][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } if (id > 10) { i = ids[3]; for (l=0; l< tmp_fmol -> multi; l++) { o = tmp_fmol -> atoms_id[i][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[i][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } } } } /*! \fn void visualize_object (int id, int jd, int kd) \brief visualize object and update OpenGL rendering \param id the type of object \param jd the molecule id, if any \param kd the object id, if any */ void visualize_object (int id, int jd, int kd) { int l, m, n, o, p, q, r, s; field_atom* tshell; field_object = id; num_field_objects = get_field_objects (id, kd); switch (id) { case -1: // View molecule atoms id tmp_fmol = get_active_field_molecule (jd); tmp_fmol -> show_id = toviz.c; tmp_fat = tmp_fmol -> first_atom; for (m=0; m < tmp_fmol -> atoms; m++) { for (n=0; n < tmp_fat -> num; n++) { field_selection (tmp_fat -> list[n], toviz.c, toviz.c, tmp_fat -> list_id[n]); } if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } break; case 0: // View an entire molecule tmp_fmol = get_active_field_molecule (jd); tmp_fmol -> show = toviz.c; for (m=0; m multi; m++) { toviz.a = 2; toviz.b = tmp_fmol -> fragments[m]; for (n=0; n natomes; n++) { if (tmp_proj -> atoms[0][n].coord[2] == toviz.b) field_selection (n, toviz.c, toviz.c, jd); } } break; case 1: // View a type of atoms in a molecule tmp_fat = get_active_atom (kd, jd); tmp_fat -> show = toviz.c; for (m=0; m num; m++) { n = tmp_fat -> list[m]; field_selection (n, toviz.c, toviz.c, jd); } break; case 2: // View a type of Core-shell unit in a molecule tmp_fshell = get_active_shell (kd, jd); tmp_fshell -> show = toviz.c; for (m=0; m<2; m++) { if (tmp_fshell -> ia[m]) { n = tmp_fshell -> ia[0]-1; tshell = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[0][n].a); for (o=0; o multi; o++) { p = tmp_fmol -> atoms_id[n][o].b; field_selection (tshell -> list[p], toviz.c, toviz.c, jd); } } } break; case 3: // View a type of bond constraint in a molecule tmp_fcons = get_active_constraint (kd, jd); tmp_fcons -> show = toviz.c; for (l=0; l<2; l++) { if (tmp_fcons -> ia[l]) { for (m=0; m multi; m++) { n = tmp_fmol -> atoms_id[tmp_fcons -> ia[l]-1][m].a; o = tmp_fmol -> atoms_id[tmp_fcons -> ia[l]-1][m].b; p = get_active_atom (tmp_fmol -> id, n) -> list[o]; field_selection (p, toviz.c, toviz.c, jd); } } } break; case 4: tmp_fpmf = get_active_pmf (kd, jd); tmp_fpmf -> show = toviz.c; for (m=0; m<2; m++) { if (tmp_fpmf -> num[m] > 0) { for (n=0; n num[m]; n++) { o = tmp_fpmf -> list[m][n]; for (p=0; p multi;p++) { q = tmp_fmol -> atoms_id[o][p].a; r = tmp_fmol -> atoms_id[o][p].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } } } break; case 5: tmp_frig = get_active_rigid (kd, jd); tmp_frig -> show = toviz.c; if (tmp_frig -> num > 0) { for (n=0; n num; n++) { o = tmp_frig -> list[n]; for (p=0; p multi;p++) { q = tmp_fmol -> atoms_id[o][p].a; r = tmp_fmol -> atoms_id[o][p].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } } break; case 6: tmp_ftet = get_active_tethered (kd, jd); tmp_ftet -> show = toviz.c; if (tmp_ftet -> num) { o = tmp_ftet -> num-1; p = tmp_fmol -> atoms_id[o][0].a; for (q=0; q multi;q++) { r = tmp_fmol -> atoms_id[o][q].b; s = get_active_atom (tmp_fmol -> id, p) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } break; case SEXTERN: break; default: if (id < MOLIMIT) { // View a type of bond / angles / dihedral / improper / inversion in a molecule tmp_fstr = get_active_struct (id-7, kd, jd); tmp_fat = get_active_atom (kd, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (kd, tmp_fstr -> aid[1]); if (id > 8) tmp_fct = get_active_atom (kd, tmp_fstr -> aid[2]); if (id > 10) tmp_fdt = get_active_atom (kd, tmp_fstr -> aid[3]); tmp_fstr -> def -> show = toviz.c; if (id < 9) { visualize_bonds (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt); } else if (id < 11) { visualize_angles (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt, tmp_fct); } else if (id < 13) { visualize_dihedrals (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); } else if (id < 15) { visualize_imp_inv (tmp_fstr -> def -> show, id-7, jd, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); } } else { // View a non-bonded interaction tmp_fbody = get_active_body (jd, id - MOLIMIT); tmp_fbody -> show = toviz.c; visualize_body (tmp_fbody -> show, jd, tmp_fbody); } break; } } /*! \fn void check_to_visualize_properties_for_this_field_mol (int pid, int mol) \brief check if rendering is required for object in molecule \param pid the type of field object \param mol the target field molecule */ void check_to_visualize_properties_for_this_field_mol (int pid, int mol) { int h, i, j; field_prop * propv; h = toviz.c; toviz.c = 1; tmp_fmol = get_active_field_molecule (mol); i = get_field_objects (pid, mol); for (j=0; j 6 && pid < MOLIMIT) { propv = get_active_struct (pid-7, mol, j) -> other; while (propv) { if (propv -> show) visualize_single_struct (pid, j, mol, propv -> aid); propv = propv -> next; } } } toviz.c = h; } /*! \fn void check_to_visualize_properties (int pid) \brief check if it is requried to update rendering \param pid the page number in the assistant */ void check_to_visualize_properties (int pid) { int i, j; i = (pid < MOLIMIT) ? tmp_field -> molecules : 1; for (j=0; j molecules; i++) { if (get_active_field_molecule (i) -> show_id && ! a) { toviz.c = 0; visualize_object (-1, i, 0); check_to_visualize_properties (-1); toviz.c = j; } else if (get_active_field_molecule (i) -> show && a) { toviz.c = 0; visualize_object (0, i, 0); check_to_visualize_properties (0); toviz.c = j; } } if (a) { get_active_field_molecule (b) -> show_id = j; } else { get_active_field_molecule (b) -> show = j; } gtk_tree_store_clear (field_model[0]); init_default_shaders (tmp_view); fill_field_model (field_model[0], 0, -1); } /*! \fn G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on visualize force field object toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k, l, m, n; int * ids = NULL; tint * dat = (tint * )data; GtkTreeIter iter; gboolean forall; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; } else { toviz.c = 1; } i = dat -> b; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(field_model[i]), & iter, path); forall = TRUE; if (i > 6 && i < MOLIMIT) { gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), & iter, 0, & k, -1); if (! k) { gchar * str; forall = FALSE; j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); l = struct_id(i); ids = allocint (l); if (dat -> c == 0) { field_object = i; num_field_objects = get_field_objects (i, tmp_fmol -> id); } for (m=1; m def; } else { if (tmp_fstr -> other) { tmp_fprop = get_active_prop_using_atoms (tmp_fstr -> other, l, ids); if (! tmp_fprop) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop -> next) tmp_fprop = tmp_fprop -> next; tmp_fprop -> next = duplicate_field_prop (tmp_fstr -> def, i-7); tmp_fprop = tmp_fprop -> next; for (n=0; n aid[n] = ids[n]; } } else { tmp_fstr -> other = duplicate_field_prop (tmp_fstr -> def, i-7); for (n=0; n other -> aid[n] = ids[n]; tmp_fprop = tmp_fstr -> other; } } if (dat -> c) tmp_fprop -> use = toviz.c; if (! dat -> c) tmp_fprop -> show = toviz.c; adjust_field_prop (i-7, l, NULL, ids, tmp_fprop -> key); j = m-1; } else { j = k-1; } } else { gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), & iter, 0, & k, -1); j = k-1; } if (forall) { k = -1; if (i > 0 && i < MOLIMIT) { k = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (k); } if (i == 0 && dat -> c == 1) { update_mol_tree (1, j); visualize_object (-1, j, k); check_to_visualize_properties (i); } else if (dat -> c == 0) { if (i == 0) update_mol_tree (0, j); visualize_object (i, j, k); check_to_visualize_properties (i); } else { select_object (i, j, k); } } else if (dat -> c == 0) { k = combo_get_active (combo_mol[i-1]); visualize_single_struct (i, j+1, k, ids); check_to_visualize_properties (i); } if (ids) g_free (ids); if (forall || i == 4 || i == SEXTERN) { gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, k); } else if (! forall && i > 0 && i != 4 && i != SEXTERN) { for (l=0; l c) break; } gtk_tree_store_set (field_model[i], & iter, l, toviz.c, -1); } } /*! \fn gboolean show_field_object (int id, int jd, int kd) \brief is the field object visible ? \param id the type of object \param jd the object id, if any \param kd the field molecule id, if any */ gboolean show_field_object (int id, int jd, int kd) { gboolean show = FALSE; switch (id) { case -1: show = get_active_field_molecule (jd) -> show; break; case 0: show = get_active_field_molecule (jd) -> show; break; case 1: show = (jd < get_active_field_molecule (kd) -> atoms) ? get_active_atom (kd, jd) -> show : FALSE; break; case 2: show = get_active_shell (kd, jd) -> show; break; case 3: show = get_active_constraint (kd, jd) -> show; break; case 4: show = get_active_pmf (kd, jd) -> show; break; case 5: show = get_active_rigid (kd, jd) -> show; break; case 6: show = get_active_tethered (kd, jd) -> show; break; default: if (id < MOLIMIT) { show = get_active_struct (id-7, kd, jd) -> def -> show; } else { show = get_active_body (jd, id - MOLIMIT) -> show; } break; } return show; } /*! \fn G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) \brief select all element(s) in the column for visualization \param col the target GtkTreeViewColumn \param data the associated data pointer */ G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) { int i, j, k, l; tint * dat = (tint *)data; i = dat -> b; j = -1; if (i > 0 && i < MOLIMIT) j = combo_get_active (combo_mol[i-1]); num_field_objects = get_field_objects (i, j); if (i < 7) { switch (i) { case 0: toviz.c = (dat -> c) ? get_active_field_molecule (0) -> show_id : get_active_field_molecule (0) -> show; break; case 1: toviz.c = get_active_field_molecule (j) -> first_atom -> show; break; case 2: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_shell -> use : get_active_field_molecule (j) -> first_shell -> show; break; case 3: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_constraint -> use : get_active_field_molecule (j) -> first_constraint -> show; break; case 4: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_pmf -> use : get_active_field_molecule (j) -> first_pmf -> show; break; case 5: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_rigid -> use : get_active_field_molecule (j) -> first_rigid -> show; break; case 6: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_tethered-> use : get_active_field_molecule (j) -> first_tethered -> show; break; } toviz.c = ! toviz.c; } else if (i > 6 && i < MOLIMIT) { if (num_field_objects) { tmp_fmol = get_active_field_molecule (j); tmp_fstr = tmp_fmol -> first_struct[i-7]; toviz.c = (dat -> c == 0) ? ! tmp_fstr -> def -> show : ! tmp_fstr -> def -> use; while (tmp_fstr) { if (dat -> c) tmp_fstr -> def -> use = toviz.c; if (! dat -> c) tmp_fstr -> def -> show = toviz.c; if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (dat -> c) tmp_fprop -> use = toviz.c; if (! dat -> c) tmp_fprop -> show = toviz.c; tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } } } else { tmp_fbody = tmp_field -> first_body[i - MOLIMIT]; toviz.c = (dat -> c == 0) ? ! tmp_fbody -> show : ! tmp_fbody -> use; while (tmp_fbody) { if (dat -> c) tmp_fbody -> use = toviz.c; if (! dat -> c) tmp_fbody -> show = toviz.c; tmp_fbody = tmp_fbody -> next; } } if (num_field_objects) { if (i == 0 && dat -> c == 1) { l = num_field_objects; num_field_objects = get_field_objects (-1, j); for (k=0; k c == 0) { for (k=0; k Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_control.c * @short Functions to handle the creation of the DL-POLY CONTROL file * @author Sébastien Le Roux */ /* * This file: 'dlp_control.c' * * Contains: * - The functions to handle the creation of the DL-POLY CONTROL file * * List of functions: G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data); GtkWidget * create_thermo_options (int ensemble, int thermo); GtkWidget * create_thermo_box (int ensemble); GtkWidget * create_ensemble_box (); GtkWidget * create_md_box (); GtkWidget * create_equi_box (); GtkWidget * create_traj_box (); GtkWidget * create_dump_box (); GtkWidget * create_out_box (); GtkWidget * create_overall_box (); GtkWidget * create_analyze_box (); GtkWidget * create_job_box (); GtkWidget * create_io_box (); GtkWidget * create_misc_box (); GtkWidget * create_elec_param_box (); GtkWidget * create_electro_box (); GtkWidget * create_vdws_box (); GtkWidget * create_metal_box (); GtkWidget * create_sys_box (); GtkWidget * create_restart_box (); GtkWidget * vbox_control (int f); */ #include "dlp_field.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "bind.h" extern ColRGBA init_color (int id, int numid); extern gboolean print_ana (); gchar * celemts[MAXDATC] = {i18n("System information"), i18n("Calculation details"), i18n("Non-bonded interactions"), i18n("Equilibration"), i18n("Thermodynamics"), i18n("Molecular dynamics"), i18n("Output options"), i18n("Computational details")}; #define DLP_ENS 4 #define DLP_ENS_TYPE 10 gchar * md_ensemble[DLP_ENS] = {"NVE", "NVT", "NPT", "NST"}; gchar * md_thermo[DLP_ENS_TYPE] = {"Evans", "Langevin", "Andersen", "Berendsen", "Nosë-Hoover", i18n("Gentle Stochastic"), "DPD", "Martyna-Tuckerman-Klein", i18n("Two temperature model"), i18n("Inhomogeneous Langevin")}; // In the following, 0 = no thermo, > 0 = thermo and num of opts + 1 int md_ens_opt[DLP_ENS][DLP_ENS_TYPE] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 2, 3, 2, 2, 3, 3, 0, 4, 4}, {0, 3, 0, 3, 3, 0, 0, 3, 0, 0}, {0, 3, 0, 3, 3, 0, 0, 3, 0, 0}}; gchar * opts_nvt[9][3]={{NULL, NULL, NULL}, {i18n("Relaxation speed constant (friction):"), NULL, NULL}, {i18n("Relaxation time:"), i18n("Softness [0.0 - 1.0]:"), NULL}, {i18n("Relaxation constant:"), NULL, NULL}, {i18n("Relaxation constant:"), NULL, NULL}, {i18n("Relaxation constant:"), i18n("Langevin friction:"), NULL}, {i18n("Shardlow's splitting order:"), i18n("Global drag coefficient:"), NULL}, {i18n("Relaxation constant:"), i18n("Enhancement of relaxation constant:"), i18n("Cut-off particle velocity for friction enhancement:")}, {i18n("Relaxation constant:"), i18n("Enhancement of relaxation constant:"), i18n("Cut-off particle velocity for friction enhancement:")}}; gchar * unit_nvt[9][3]={{NULL, NULL, NULL}, {"ps-1", NULL, NULL}, {"ps", NULL, NULL}, {"ps", NULL, NULL}, {"ps", NULL, NULL}, {"ps", "ps-1", NULL}, {NULL, "Dalton ps-1", NULL}, {"ps-1", "ps-1", "Å ps-1"}, {"ps-1", "ps-1", "Å ps-1"}}; gchar * opts_npt_nvs[2][3] = {{i18n("Thermostat relaxation speed constant (friction):"), i18n("Barostat relaxation speed constant (friction):"), NULL}, {i18n("Thermostat relaxation time:"), i18n("Barostat relaxation time:"), i18n("Target surface tension:")}}; gchar * unit_npt_nvs[2][3] = {{"ps-1", "ps-1", NULL}, {"ps", "ps", "dyn cm-1"}}; gchar * extra_nvs[4] = {i18n("Standard"), i18n("Area"), i18n("Tension"), i18n("Orthorhombic")}; GtkWidget * check_nvs_butt[4]; GtkWidget * nvs_label; GtkWidget * nvs_entry; GtkWidget * nvs_unit; GtkWidget * nvs_check[2]; GtkWidget * o_ent_vbox; GtkWidget * o_vbox; GtkWidget * e_vbox; GtkWidget * ens_box; GtkWidget * bath_box; GtkWidget * thermo_option_box; /*! \fn G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) \brief CONTROL file change thermostat order \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) { tmp_field -> thermo_opts[0] = combo_get_active ((GtkWidget *)box); } /*! \fn G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) \brief CONTROL file thermostat update parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 9) { if ((v == 0.0 || v >= 1.0) && v != tmp_field -> thermo_opts[i]) { tmp_field -> thermo_opts[i] = v; } else if (v < 1.0 && v != 0.0) { show_warning (_("Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature."), field_assistant); } } else if (v >= 0.0 && v != tmp_field -> thermo_opts[i]) { tmp_field -> thermo_opts[i] = v; } update_entry_double(res, tmp_field -> thermo_opts[i]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT(data); tmp_field -> thermo_opts[3] = (double) i; for (j=0; j<2; j++) { widget_set_sensitive (nvs_check[j], FALSE); } for (j=0; j<4; j++) { if (j != i) { if (j == 2) { update_entry_text (GTK_ENTRY(nvs_entry), ""); widget_set_sensitive (nvs_label, FALSE); widget_set_sensitive (nvs_entry, FALSE); widget_set_sensitive (nvs_unit, FALSE); } } else if (j == i && i == 2) { widget_set_sensitive (nvs_label, TRUE); widget_set_sensitive (nvs_entry, TRUE); widget_set_sensitive (nvs_unit, TRUE); update_entry_double (GTK_ENTRY(nvs_entry), 0.0); tmp_field -> thermo_opts[4] = 0.0; widget_set_sensitive (nvs_check[0], TRUE); } else if (j == i && i == 3) { widget_set_sensitive (nvs_check[1], TRUE); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> thermo_opts[i] = j; if (i == 6) widget_set_sensitive (bath_box, j); } /*! \fn GtkWidget * create_thermo_options (int ensemble, int thermo) \brief CONTROL file create thermostat option box \param ensemble the thermodynamic ensemble \param thermo the type of thermostat */ GtkWidget * create_thermo_options (int ensemble, int thermo) { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i, j; switch (ensemble) { case 1: for (i=0; i<3; i++) { if (opts_nvt[thermo][i] != NULL) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(opts_nvt[thermo][i]), 375, -1, 1.0, 0.5), FALSE, FALSE, 50); if (thermo == 6 && i == 0) { GtkWidget * o_combo = create_combo(); combo_text_append (o_combo, "s1"); combo_text_append (o_combo, "s2"); combo_set_active (o_combo, (int)tmp_field -> thermo_opts[i]); g_signal_connect (G_OBJECT (o_combo), "changed", G_CALLBACK(set_order), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, o_combo, FALSE, FALSE, 5); } else { entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); } if (unit_nvt[thermo][i] != NULL) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(unit_nvt[thermo][i], 20, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } } break; default: for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(opts_npt_nvs[(thermo) ? 1 : 0][i]), 410, -1, 1.0, 0.5), FALSE, FALSE, 50); entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(unit_npt_nvs[(thermo) ? 1 : 0][i], 20, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (ensemble == 3) { GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hhbox, FALSE, FALSE, 0); GtkWidget * vvbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, hhbox, vvbox, FALSE, FALSE, 50); gtk_box_set_homogeneous (GTK_BOX (vvbox), TRUE); for (i=0; i<4; i++) { hbox = create_hbox (5); val = ((int)tmp_field -> thermo_opts[3] == i) ? TRUE : FALSE; #ifdef GTK4 check_nvs_butt[i] = check_button (_(extra_nvs[i]), 100, -1, val, G_CALLBACK(check_nvs), GINT_TO_POINTER(i)); if (i) { gtk_check_button_set_group ((GtkCheckButton *) check_nvs_butt[i], (GtkCheckButton *)check_nvs_butt[0]); } #else if (! i) { check_nvs_butt[i] = radio_button (_(extra_nvs[i]), 100, -1, val, G_CALLBACK(check_nvs), GINT_TO_POINTER(i)); } else { check_nvs_butt[i] = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(check_nvs_butt[0]), _(extra_nvs[i])); } #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_nvs_butt[i], FALSE, FALSE, 20); if (i == 2) { nvs_label = markup_label(_(opts_npt_nvs[1][2]), 150, -1, 0.0, 0.5); widget_set_sensitive (nvs_label, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_label, FALSE, FALSE, 0); j = 4; nvs_entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(j)); widget_set_sensitive (nvs_entry, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_entry, FALSE, FALSE, 10); if (val) update_entry_double (GTK_ENTRY(nvs_entry), tmp_field -> thermo_opts[4]); nvs_unit = markup_label(unit_npt_nvs[1][2], 50, -1, 0.0, 0.5); widget_set_sensitive (nvs_unit, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_unit, FALSE, FALSE, 0); } if (i > 1) { val = (((int)tmp_field -> thermo_opts[3] == i) && tmp_field -> thermo_opts[5] == 1.0) ? TRUE : FALSE; nvs_check[i-2] = check_button(_("Semi-anisotropic constraint"), 200, -1, val, G_CALLBACK(check_semi), GINT_TO_POINTER(5)); widget_set_sensitive (nvs_check[i-2], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_check[i-2], FALSE, FALSE, 10); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } } break; } return vbox; } /*! \fn G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) \brief CONTROL file change thermostat option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); switch (i) { case 0: tmp_field -> thermostat = combo_get_active ((GtkWidget *)box); for (j=0; j<6; j++) tmp_field -> thermo_opts[j] = 0.0; if (tmp_field -> ensemble) { o_ent_vbox = destroy_this_widget (o_ent_vbox); o_ent_vbox = create_thermo_options (tmp_field -> ensemble, tmp_field -> thermostat); add_box_child_start (GTK_ORIENTATION_VERTICAL, o_vbox, o_ent_vbox, FALSE, FALSE, 0); show_the_widgets (o_ent_vbox); } break; case 1: tmp_field -> thermo_opts[7] = combo_get_active ((GtkWidget *)box); break; } } /*! \fn GtkWidget * create_thermo_box (int ensemble) \brief CONTROL file create thermostat box parameters \param ensemble the target thermodynamic ensemble */ GtkWidget * create_thermo_box (int ensemble) { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Thermostat:"), 100, -1, 0.0, 0.5), FALSE, FALSE, 30); GtkWidget * thermo_box = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, thermo_box, FALSE, FALSE, 0); int i; for (i=0; i thermostat); g_signal_connect (G_OBJECT (thermo_box), "changed", G_CALLBACK(set_thermostat), GINT_TO_POINTER(0)); if (ensemble) { o_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, o_vbox, FALSE, FALSE, 0); o_ent_vbox = create_thermo_options (ensemble, tmp_field -> thermostat); add_box_child_start (GTK_ORIENTATION_VERTICAL, o_vbox, o_ent_vbox, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) \brief CONTROL file change thermodynamic ensemble parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) { int i; if (tmp_field -> ensemble) { for (i=0; i<4; i++) { check_nvs_butt[i] = destroy_this_widget (check_nvs_butt[i]); } thermo_option_box = destroy_this_widget (thermo_option_box); } tmp_field -> ensemble = combo_get_active ((GtkWidget *)box); tmp_field -> thermostat = 0; for (i=0; i<6; i++) tmp_field -> thermo_opts[i] = 0.0; if (tmp_field -> ensemble) { thermo_option_box = create_thermo_box (tmp_field -> ensemble); show_the_widgets (thermo_option_box); add_box_child_start (GTK_ORIENTATION_VERTICAL, ens_box, thermo_option_box, FALSE, FALSE, 0); } } /*! \fn GtkWidget * create_ensemble_box () \brief CONTROL file create thermodynamic ensemble parameter widgets */ GtkWidget * create_ensemble_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Ensemble:"), 100, -1, 0.0, 0.5), FALSE, FALSE, 30); GtkWidget * ensemble = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ensemble, FALSE, FALSE, 0); int i; for (i=0; i ensemble); g_signal_connect (G_OBJECT (ensemble), "changed", G_CALLBACK(set_ensemble), NULL); ens_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ens_box, FALSE, FALSE, 0); if (tmp_field -> ensemble) { thermo_option_box = create_thermo_box (tmp_field -> ensemble); add_box_child_start (GTK_ORIENTATION_VERTICAL, ens_box, thermo_option_box, FALSE, FALSE, 0); } gtk_widget_set_size_request (vbox, -1, 390); gboolean val = (tmp_field -> thermo_opts[6] == 1.0) ? TRUE : FALSE; bath_box = create_hbox (5); add_box_child_end (vbox, bath_box, FALSE, FALSE, 0); add_box_child_end (vbox, check_button(_("Use pseudo thermal bath"), 100, -1, val, G_CALLBACK(check_semi), GINT_TO_POINTER(6)), FALSE, FALSE, 5); widget_set_sensitive (bath_box, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label(_("Thermostat type:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, combo, FALSE, FALSE, 00); combo_text_append (combo, _("Langevin + Direct")); combo_text_append (combo, "Langevin"); combo_text_append (combo, "Gauss"); combo_text_append (combo, _("Direct")); combo_set_active (combo, (int)tmp_field -> thermo_opts[7]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_thermostat), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label(_("Thickness:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(8)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[8]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label(_("Target T°:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(9)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[9]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("K", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); return vbox; } GtkWidget * step_button; GtkWidget * extra_vbox[2]; GtkWidget * extra_lab[4]; gchar * md_data[6] = {i18n("Target temperature:"), i18n("Verlet integrator:"), i18n("Number of steps:"), i18n("Time step δt:"), i18n("Target pressure:"), ""}; gchar * md_extra[2][4] = {{i18n("Shake iterations limit:"), i18n("Shake tolerance:"), "", ""}, {i18n("Rattle iterations limit:"), i18n("Rattle tolerance:"), i18n("FIQA iterations limit:"), i18n("FIQA quaternions tolerance:")}}; gchar * md_unit[6] = {"K", "", "", "ps", "katms", ""}; gchar * extra_unit[4] = {i18n("cycle(s)"), "", i18n("cycle(s)"), ""}; gchar * dt_data[3] = {i18n("Maximum time step:"), i18n("Maximum distance allowed:"), i18n("Minimum distance allowed:")}; gchar * dt_unit[3] = {"ps", "Å", "Å"}; gchar * md_combo[2][2] = {{i18n("Velocity"), i18n("Leapfrog")}, {i18n("Fixed"), i18n("Variable")}}; /*! \fn G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) \brief CONTROL file update MD parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 14) { if (v >= 1.0 && v <= tmp_proj -> natomes) { tmp_field -> md_opts[i] = v; } } else if (v >= 0.0 && v != tmp_field -> md_opts[i]) { tmp_field -> md_opts[i] = v; } if (i == 2 || i == 9 || i == 11 || i == 14 || i == 15) { update_entry_int (res, (int)tmp_field -> md_opts[i]); } else { update_entry_double (res, tmp_field -> md_opts[i]); } } /*! \fn G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) \brief CONTROL file advanced time step - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) { GtkWidget * dialog = dialogmodal (_("Variable time step information"), GTK_WINDOW(field_assistant)); GtkWidget * vbox = dialog_get_content_area (dialog); GtkWidget * hbox; GtkWidget * entry; int i, j; i = 6; for (j=0; j<3; j++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(dt_data[j]), 250, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_md_param), 100, 10, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[i+j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dt_unit[j], 30, -1, 0.0, 0.5), FALSE, FALSE, 5); } run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) \brief CONTROL file change MD parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); tmp_field -> md_opts[i] = combo_get_active ((GtkWidget *)box); if (i == 3) widget_set_sensitive (step_button, (int)tmp_field -> md_opts[i]); if (i == 3 && tmp_field -> md_opts[i] == 1.0) show_advance_time_step (NULL, NULL); if (i == 1) { gtk_widget_set_visible (extra_vbox[1], (int)tmp_field -> md_opts[1]); for (j=0 ;j<2; j++) { gtk_label_set_text (GTK_LABEL(extra_lab[2*j]), ((int)tmp_field -> md_opts[i] || 2*j < 2) ? _(md_extra[(int)tmp_field -> md_opts[i]][2*j]) : md_extra[(int)tmp_field -> md_opts[i]][2*j]); gtk_label_set_text (GTK_LABEL(extra_lab[2*j+1]), ((int)tmp_field -> md_opts[i] || 2*j+1 < 2) ? _(md_extra[(int)tmp_field -> md_opts[i]][2*j+1]) : md_extra[(int)tmp_field -> md_opts[i]][2*j+1]); } } } GtkWidget * impact_but; gchar * imp_dir[3] = {"x", "y", "z"}; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) \brief CONTROL file particle impact change parameter toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) \brief CONTROL file particle impact change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) #endif { gboolean i = button_get_status ((GtkWidget *)but); tmp_field -> md_opts[13] = (i) ? 1.0 : 0.0; widget_set_sensitive (impact_but, i); } /*! \fn G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) \brief CONTROL file particle impact - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) { GtkWidget * dialog = dialogmodal (_("Initiate impact on particle"), GTK_WINDOW(field_assistant)); GtkWidget * vbox = dialog_get_content_area (dialog); GtkWidget * hbox, * hhbox; GtkWidget * entry; int i, j; gchar * str; gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); gchar * imp_info[4] = {i18n("Index of the particle to impact: "), i18n("Time step of impact:"), i18n("Energy of impact:"), i18n("Direction (from center of mass):")}; gchar * imp_unit[2] = {i18n("nth step"), "k eV"}; for (i=0; i<4; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(imp_info[i]), 200, -1, 1.0, 0.5), FALSE, FALSE, 5); if (i < 3) { j = (i < 2) ? 5 : 10; entry = create_entry (G_CALLBACK(set_md_param), j*10, j + j/6, FALSE, GINT_TO_POINTER(i+14)); if (i < 2) { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[i+14]); } else { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[i+14]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); if (! i) { str = g_strdup_printf ("∈ [1-%d]", tmp_proj -> natomes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 30, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((i-1) ? imp_unit[i-1] : _(imp_unit[i-1]), 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 50); for (j=0; j<3; j++) { str = g_strdup_printf (_("on %s:"), imp_dir[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(j+17)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[j+17]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, entry, FALSE, FALSE, 5); } } } run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn GtkWidget * create_md_box () \brief CONTROL file create molecular dynamics parameter widgets */ GtkWidget * create_md_box () { GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, -1, 450); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; int i, j, k, l; l = 0; for (i=0; i<3; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); for (j=0; j<2; j++, l++) { k = (j) ? 110 : 150; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((2*i+j) < 5 ? _(md_data[2*i+j]) :md_data[2*i+j], k, -1, 1.0, 0.5), FALSE, FALSE, 5); if (j) { if (i < 2) { combo = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); for (k=0; k<2; k++) { combo_text_append (combo, _(md_combo[i][k])); } combo_set_active (combo, 0); gtk_widget_set_size_request (combo, 100, -1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_md_combo), GINT_TO_POINTER(l)); if (i) { l ++; entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_unit[l-1], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { step_button = create_button (_("Time step details"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_advance_time_step), NULL); widget_set_sensitive (step_button, (int)tmp_field -> md_opts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, step_button, FALSE, FALSE, 10); } } else { entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); if (i == 1 && j == 0) { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[l]); } else { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_unit[2*i+j], 60, -1, 0.0, 0.5), FALSE, FALSE, 0); } } } k = (int)tmp_field -> md_opts[1]; l = 9; gchar * extra_info[2] = {i18n("Bond constraint(s) dynamics:"), i18n("Rotational motion of rigid body(ies):")}; for (i=0; i<2; i++) { extra_vbox[i] = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, extra_vbox[i], FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, extra_vbox[i], markup_label(_(extra_info[i]), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, extra_vbox[i], hbox, FALSE, FALSE, 0); for (j=0; j<2; j++, l++) { extra_lab[2*i+j] = markup_label((k || 2*i+j < 2) ? _(md_extra[k][2*i+j]) : md_extra[k][2*i+j], 150+j*100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, extra_lab[2*i+j], FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); if (j) { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[l]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); if (! j) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(extra_unit[2*i+j]), 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } gtk_widget_set_visible (extra_vbox[1], (int)tmp_field -> md_opts[1]); j = (int)tmp_field -> md_opts[1]; for (i=0 ;i<2; i++) { gtk_label_set_text (GTK_LABEL(extra_lab[2*i]), (j || 2*i < 2) ?_(md_extra[(int)tmp_field -> md_opts[1]][2*i]) : md_extra[(int)tmp_field -> md_opts[1]][2*i]); gtk_label_set_text (GTK_LABEL(extra_lab[2*i+1]), (j || 2*i+1 < 2) ? _(md_extra[(int)tmp_field -> md_opts[1]][2*i+1]) : md_extra[(int)tmp_field -> md_opts[1]][2*i+1]); } hbox = create_hbox (5); add_box_child_end (vbox, hbox, FALSE, FALSE, 0); gboolean val = (tmp_field -> md_opts[13] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Initiate impact on particle"), 100, -1, val, G_CALLBACK(check_impact), NULL), FALSE, FALSE, 10); impact_but = create_button (_("Impact details"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_impact_dialog), NULL); widget_set_sensitive (impact_but, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, impact_but, FALSE, FALSE, 10); return vbox; } GtkWidget * equi_lab[6]; GtkWidget * equi_entry[3]; GtkWidget * equi_box[9]; gchar * equi_info[8]= {i18n("Equilibrate for the first:"), i18n("Scale temperature:"), i18n("Cap forces:"), i18n("Resample the momenta distribution:"), i18n("Minimize system configuration:"), i18n("Optimize system configuration from start:"), i18n("Perform zero temperature (10 K) optimization"), i18n("Include equilibration data in statistics")}; gchar * equi_data[5]= {i18n("Every:"), "fmax=", i18n("During:"), i18n("Minimize:"), i18n("Optimize")}; gchar * equi_unit[3]= {i18n("step(s)"), "kBT / Å", i18n("step(s)")}; gchar * equi_min[3]= {i18n("Force"), i18n("Energy"), i18n("Distance")}; gchar * equi_minu[3]= {"kBT / Å", "", "Å"}; double equi_lim[2][3] = {{1.0, 0.0, 0.000001}, {1000.0, 0.01, 0.1}}; float init_minop[3]={50.0, 0.005, 0.005}; /*! \fn G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) \brief CONTROL file change equilibration parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); tmp_field -> equi_opts[i] = combo_get_active ((GtkWidget *)box); j = (i == 9) ? 11 : 14; k = (i == 9) ? 0 : 1; tmp_field -> equi_opts[j] = init_minop[(int)tmp_field -> equi_opts[i]]; update_entry_double (GTK_ENTRY(equi_entry[2*k]), tmp_field -> equi_opts[j]); gtk_label_set_text (GTK_LABEL(equi_lab[4*k]), g_strdup_printf ("%s:", _(equi_min[(int)tmp_field -> equi_opts[i]]))); gtk_label_set_text (GTK_LABEL(equi_lab[4*k+1]), g_strdup_printf ("%s", equi_minu[(int)tmp_field -> equi_opts[i]])); gtk_label_set_use_markup (GTK_LABEL(equi_lab[4*k+1]), TRUE); } /*! \fn G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) \brief CONTROL file update equilibration parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 10 || i == 14) { j = (i == 10) ? 9 : 13; if (v >= equi_lim[0][(int)tmp_field -> equi_opts[j]] && v <= equi_lim[1][(int)tmp_field -> equi_opts[j]]) { tmp_field -> equi_opts[i] = v; } else { gchar * str = g_strdup_printf (_("Minimization parameter must ∈ [ %f - %f ]"), equi_lim[0][(int)tmp_field -> equi_opts[j]], equi_lim[1][(int)tmp_field -> equi_opts[j]]); show_warning (str, field_assistant); g_free (str); } } else if (v >= 0.0 && v != tmp_field -> equi_opts[i]) { tmp_field -> equi_opts[i] = v; } if (i == 1 || i == 3 || i == 7 || i == 11) { update_entry_int (res, (int)tmp_field -> equi_opts[i]); } else { update_entry_double (res, tmp_field -> equi_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) \brief CONTROL file change equilibration parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) \brief CONTROL file change equilibration parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); k = 2*i + 2*(i/5) + i/6 - i/7; tmp_field -> equi_opts[k] = (j) ? 1.0 : 0.0; if (i < 6) widget_set_sensitive (equi_box[i], j); } /*! \fn GtkWidget * create_equi_box () \brief CONTROL file create equilibration parameter widgets */ GtkWidget * create_equi_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox, * hhbox; GtkWidget * entry; GtkWidget * combo; gboolean val; int i, j, k, l, m; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); val = (tmp_field -> equi_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Equilibrate"), 100, -1, val, G_CALLBACK(check_equi), GINT_TO_POINTER(0)), FALSE, FALSE, 5); equi_box[0] = create_vbox (5); widget_set_sensitive (equi_box[0], val); gtk_box_set_homogeneous (GTK_BOX (equi_box[0]), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, equi_box[0], FALSE, FALSE, 0); for (i=0; i<8; i++) { hbox = create_hbox (5); j = 2*i + 2*(i/5) - i/7; k = (i != 2) ? 5 : 10; l = j + 1; add_box_child_start (GTK_ORIENTATION_VERTICAL, equi_box[0], hbox, FALSE, FALSE, 0); if (i < 4) { entry = create_entry (G_CALLBACK(set_equi_param), k*10, k + k/6, FALSE, GINT_TO_POINTER(l)); if (i == 2) { update_entry_double (GTK_ENTRY(entry), tmp_field -> equi_opts[l]); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> equi_opts[l]); } } if (i) { val = (tmp_field -> equi_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(equi_info[i]), 300, -1, val, G_CALLBACK(check_equi), GINT_TO_POINTER(i)), FALSE, FALSE, 5); if (i == 4 || i == 5) { hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, equi_box[0], hhbox, FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, hbox, FALSE, FALSE, 50); } equi_box[i] = create_hbox (5); widget_set_sensitive (equi_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, equi_box[i], FALSE, FALSE, 5); if (i < 6) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], markup_label((i != 2) ? _(equi_data[i-1]) : equi_data[i-1], 100, -1, 0.8, 0.5), FALSE, FALSE, 0); if (i < 4) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], markup_label((i != 2) ? _(equi_unit[i-1]) : equi_unit[i-1], 100, -1, 0.0, 0.5), FALSE, FALSE, 0); } else if (i < 6) { combo = create_combo(); for (m=0; m<3; m++) combo_text_append (combo, _(equi_min[m])); combo_set_active (combo, (int)tmp_field -> equi_opts[l]); gtk_widget_set_size_request (combo, 100, -1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_equi_combo), GINT_TO_POINTER(l)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], combo, FALSE, FALSE, 5); for (m=i-4; m<2; m++, l++) { equi_lab[(i-4)*2+2*m] = markup_label((i == 4 && m) ? _(equi_data[0]) : g_strdup_printf ("%s:", _(equi_min[(int)tmp_field -> equi_opts[l]])), 75, -1, 0.8, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_lab[(i-4)*2+2*m], FALSE, FALSE, 0); k = (i == 4 && m) ? 5 : 10; equi_entry[i-4+m] = create_entry (G_CALLBACK(set_equi_param), k*10, k + k/6, FALSE, GINT_TO_POINTER(l+1+m/2)); if (i == 4 && m) { update_entry_int (GTK_ENTRY(equi_entry[i-4+m]), (int)tmp_field -> equi_opts[l+1+m/2]); } else { update_entry_double (GTK_ENTRY(equi_entry[i-4+m]), tmp_field -> equi_opts[l+1+m/2]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_entry[i-4+m], FALSE, FALSE, 5); equi_lab[(i-4)*2+2*m+1] = markup_label((i == 4 && m) ? _(equi_unit[0]) : equi_minu[(int)tmp_field -> equi_opts[l]], 50, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_lab[(i-4)*2+2*m+1], FALSE, FALSE, 0); } } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(equi_info[i]), 250, -1, 0.8, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((i != 1) ? _(equi_unit[i]) : equi_unit[i], 100, -1, 0.0, 0.5), FALSE, FALSE, 0); } } return vbox; } gchar * traj_data[4] = {i18n("Defects:"), i18n("Displacements:"), i18n("History:"), i18n("Atom's MSD:")}; gchar * traj_info[4][3] = {{i18n("From step:"), i18n("Every:"), i18n("Site interstitial cutoff:")}, {i18n("From step:"), i18n("Every:"), i18n("Qualifying cutoff:")}, {i18n("From step:"), i18n("Every:"), i18n("Data level:")}, {i18n("From step:"), i18n("Every:"), NULL}}; gchar * traj_level[3]={"0", "1", "2"}; gchar * out_print[3]={i18n("Radial distribution functions (RDFs):"), i18n("Velocity autocorrelation functions (VAFs):"), i18n("Z density profile:")}; GtkWidget * out_hbox[11]; GtkWidget * out_entry[3]; /*! \fn G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) \brief CONTROL file update output information parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 3 || i == 7 || i == 23) { if (v >= 0.0 && v != tmp_field -> out_opts[i]) { tmp_field -> out_opts[i] = v; } update_entry_double (res, tmp_field -> out_opts[i]); if (i == 23) { update_entry_double (GTK_ENTRY(out_entry[0]), tmp_field -> out_opts[i]); update_entry_double (GTK_ENTRY(out_entry[2]), tmp_field -> out_opts[i]); } } else { if ((int)v != (int)tmp_field -> out_opts[i]) { tmp_field -> out_opts[i] = (int)v; } update_entry_int (res, (int)tmp_field -> out_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) \brief CONTROL file change output information parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) \brief CONTROL file change output information parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); if (i < 7) { k = 4*i - i/4 - 2*(i/5) - 2*(i/6); tmp_field -> out_opts[k] = (j) ? 1.0 : 0.0; widget_set_sensitive (out_hbox[i], j); } else { tmp_field -> out_opts[i] = (j) ? 1.0 : 0.0; if (i < 29) { k = (i == 21) ? 7 : (i == 24) ? 8 : 9; widget_set_sensitive (out_hbox[k], j); if (i == 24) widget_set_sensitive (out_hbox[10], j); } } } /*! \fn G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) \brief CONTROL file change print level \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) { tmp_field -> out_opts[12] = combo_get_active ((GtkWidget *)box); } /*! \fn GtkWidget * create_traj_box () \brief CONTROL file create MD trajectory parameter widgets */ GtkWidget * create_traj_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; gboolean val; int i, j, k, l; for (i=0; i<4; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); k = (i < 4) ? 4*i : 15; val = (tmp_field -> out_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(traj_data[i]), 150, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(i)), FALSE, FALSE, 5); out_hbox[i] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i], FALSE, FALSE, 0); widget_set_sensitive (out_hbox[i], val); for (j=0; j<3-i/3; j++) { l = (j == 2) ? 150 : 50; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label((i < 3 || j < 2) ? _(traj_info[i][j]) : traj_info[i][j], l, -1, 1.0, 0.5), FALSE, FALSE, 5); if (i != 2 || j != 2) { l = (j<2) ? 50 : 100; entry = create_entry (G_CALLBACK(set_out_param), l, l/10, FALSE, GINT_TO_POINTER(k+j+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], entry, FALSE, FALSE, 0); if (j == 2) { update_entry_double (GTK_ENTRY(entry), tmp_field -> out_opts[k+j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[k+j+1]); if (j) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { combo = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], combo, FALSE, FALSE, 0); for (l=0; l<3; l++) combo_text_append (combo, traj_level[l]); combo_set_active (combo, (int)tmp_field -> out_opts[k+j+1]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_print_level), NULL); } } } return vbox; } /*! \fn GtkWidget * create_dump_box () \brief CONTROL file create dump parameter widgets */ GtkWidget * create_dump_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Dump restart information every:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 6, FALSE, GINT_TO_POINTER(30)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[30]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); return vbox; } gchar * out_data[3] = {i18n("Print system data:"), i18n("Accumulate statistics data:"), i18n("Rolling average stack:")}; gchar * out_info[3] = {i18n("Every:"), i18n("Every:"), " "}; /*! \fn GtkWidget * create_out_box () \brief CONTROL file create output information widgets */ GtkWidget * create_out_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i, j; for (i=4; i<7; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); j = 2*(i-4)+15; val = (tmp_field -> out_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(out_data[i-4]), 200, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(i)), FALSE, FALSE, 5); out_hbox[i] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i], FALSE, FALSE, 0); widget_set_sensitive (out_hbox[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label((i-4 < 2) ? _(out_info[i-4]) : out_info[i-4], 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 5, FALSE, GINT_TO_POINTER(j+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], entry, FALSE, FALSE, 0); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * create_overall_box () \brief CONTROL file create overall parameter widgets */ GtkWidget * create_overall_box () { GtkWidget * vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); GtkWidget * hbox, * hhbox; GtkWidget * entry; gboolean val; int i, k, l, m, n; i = 6; for (l=0; l<3; l++) { k = 21 + 3*l; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); val = (tmp_field -> out_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(out_print[l]), 350, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(k)), FALSE, FALSE, 5); out_hbox[i+l+1] = create_hbox (5); widget_set_sensitive (out_hbox[i+l+1], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i+l+1], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label(_("Every:"), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 5, FALSE, GINT_TO_POINTER(k+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[k+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label(_("Bin size:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 5); m = (l==1) ? k + 2 : 23; n = (l==1) ? 1 : 2; out_entry[l] = create_entry (G_CALLBACK(set_out_param), n*50, n*5, FALSE, GINT_TO_POINTER(m)); if (l != 1) { update_entry_double (GTK_ENTRY(out_entry[l]), tmp_field -> out_opts[m]); } else { update_entry_int (GTK_ENTRY(out_entry[l]), (int)tmp_field -> out_opts[m]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], out_entry[l], FALSE, FALSE, 0); if (l != 1) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (l == 1) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); out_hbox[10] = create_hbox (0); hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); gtk_widget_set_size_request (hhbox, 330, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[10], FALSE, FALSE, 0); val = (tmp_field -> out_opts[29] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[10], check_button(_("Ignore time-averaging for the VAFs"), 100, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(29)), FALSE, FALSE, 5); widget_set_sensitive (out_hbox[10], val); } } return vbox; } GtkWidget * ana_box[5]; gchar * ana_info[5]={i18n("All:"), i18n("Bonds:"), i18n("Angles:"), i18n("Dihedrals:"), i18n("Inversions:")}; gchar * ana_param[3]={i18n("Every:"), i18n("Num. δ"), i18n("Cutoff = ")}; /*! \fn G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) \brief CONTROL file update analysis parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (v >= 0.0 && v != tmp_field -> ana_opts[i]) { tmp_field -> ana_opts[i] = v; } if (i == 3 || i == 7) { update_entry_double (GTK_ENTRY(res), tmp_field -> ana_opts[i]); } else { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> ana_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) \brief CONTROL file change analysis parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) \brief CONTROL file change analysis parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> ana_opts[i] = (j) ? 1.0 : 0.0; switch (i) { case 14: k = 4; break; case 11: k = 3; break; default: k = i / 4; break; } widget_set_sensitive (ana_box[k], j); } /*! \fn GtkWidget * create_analyze_box () \brief CONTROL file create analysis parameter widgets */ GtkWidget * create_analyze_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; gchar * str; int i, j; for (i=0; i<5; i++) { hbox = create_hbox (5); j = (i < 3) ? 4*i: 11 + 3*(i-3); val = (tmp_field -> ana_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(ana_info[i]), 100, -1, val, G_CALLBACK(check_ana), GINT_TO_POINTER(j)), FALSE, FALSE, 5); ana_box[i] = create_hbox (5); widget_set_sensitive (ana_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ana_box[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(_(ana_param[0]), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_ana_param), 50, 5, FALSE, GINT_TO_POINTER(j+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> ana_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i < 2) { str = g_strdup_printf (_("%sr in [0 : r]"), _(ana_param[1])); } else if (i == 3) { str = g_strdup_printf (_("%s° in [-180 : 180]"), _(ana_param[1])); } else { str = g_strdup_printf (_("%s° in [0 : 180]"), _(ana_param[1])); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(str, 160, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_ana_param), 50, 5, FALSE, GINT_TO_POINTER(j+2)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> ana_opts[j+2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); if (i < 2) { str = g_strdup_printf ("δr"); } else { str = g_strdup_printf ("δ°"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (i < 2) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(_(ana_param[2]), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_ana_param), 100, 11, FALSE, GINT_TO_POINTER(j+3)); update_entry_double (GTK_ENTRY(entry), tmp_field -> ana_opts[j+3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } } return vbox; } GtkWidget * time_box[2]; GtkWidget * io_box[2]; GtkWidget * io_pre; GtkWidget * misc_box; gchar * time_info[2]={i18n("Set job time:"), i18n("Set job closure time:")}; gchar * io_rw_m[4] = {"MPI I/O", "FORTRAN I/O", i18n("Traditional master I/O"), "netCDF I/O"}; gchar * io_info[2] = {i18n("General Input/Output (I/O) read interface:"), i18n("General Input/Output (I/O) write interface:")}; gchar * io_para[4] = {i18n("Reader count:"), i18n("Batch size:"), i18n("Buffer size:"), i18n("// error check")}; gchar * io_pres[2] = {"Float - 32 bit", "Double - 64 bit"}; GtkWidget * io_hp[2][4]; GtkWidget * check_e[2]; /*! \fn G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) \brief CONTROL file update I/O parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i < 2) { if (v >= 0.0 && v != tmp_field -> io_opts[2*i+1]) { tmp_field -> io_opts[2*i+1] = v; } update_entry_double (GTK_ENTRY(res), tmp_field -> io_opts[2*i+1]); } else { if (i == 7 || i == 15) { if (v >= 1.0 && v <= 100000000.0) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else { show_warning (_("The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]"), field_assistant); } } else if (i == 8 || i == 16) { if (v >= 100.0 && v <= 100000.0) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else { show_warning (_("The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]"), field_assistant); } } else if (i == 19 || i == 20 || i == 21) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else if (v > 0.0 && v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } update_entry_int (GTK_ENTRY(res), (int)tmp_field -> io_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) \brief CONTROL file change I/O parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) \brief CONTROL file change I/O parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); if (i < 2) { tmp_field -> io_opts[2*i] = (j) ? 1.0 : 0.0; widget_set_sensitive (time_box[i], j); } else { tmp_field -> io_opts[i] = (j) ? 1.0 : 0.0; if (i < 18) { k = (i == 4) ? 0 : 1; widget_set_sensitive (io_box[k], j); } else if (i == 18) { widget_set_sensitive (misc_box, j); } } } /*! \fn G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) \brief CONTROL file change I/O method \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) { int i, j, k; gboolean l; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); tmp_field -> io_opts[i] = (double)j; if (i < 12) { k = (i == 5) ? 0 : 1; l = (j == 2) ? FALSE : TRUE; widget_set_sensitive (io_hp[k][0], l); widget_set_sensitive (io_hp[k][2], l); widget_set_sensitive (check_e[k], l); if (i == 11) { l = (j == 3) ? TRUE : FALSE; widget_set_sensitive (io_pre, l); } } } /*! \fn GtkWidget * create_job_box () \brief CONTROL file create job parameter vidgets */ GtkWidget * create_job_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i; for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[2*i] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(time_info[i]), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(i)), FALSE, FALSE, 5); time_box[i] = create_hbox (5); widget_set_sensitive (time_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, time_box[i], FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_io_param), 100, 11, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> io_opts[i*2+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, time_box[i], entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, time_box[i], markup_label("s", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * create_io_box () \brief CONTROL file create I/O parameter vidgets */ GtkWidget * create_io_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; gboolean val; int i, j, k; gboolean l, m; k = 4; for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); val = (tmp_field -> io_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(io_info[i]), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(k)), FALSE, FALSE, 5); io_box[i] = create_vbox (5); widget_set_sensitive (io_box[i], val); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, io_box[i], FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, io_box[i], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Method:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<4; j++) { combo_text_append(combo, (j == 2) ? _(io_rw_m[j]) : io_rw_m[j]); } k ++; combo_set_active (combo, (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); l = tmp_field -> io_opts[k] == 2.0 ? FALSE : TRUE; m = tmp_field -> io_opts[k] == 3.0 ? TRUE : FALSE; if (i) { io_pre = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, io_pre, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_pre, markup_label(_("Real precision:"), 150, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<2; j++) combo_text_append(combo, io_pres[j]); k ++; combo_set_active (combo, (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_pre, combo, FALSE, FALSE, 5); widget_set_sensitive (io_pre, m); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Type:"), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); combo_text_append (combo, _("Sorted")); combo_text_append (combo, _("Unsorted")); k ++; combo_set_active (combo, (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, io_box[i], hbox, FALSE, FALSE, 0); for (j=0; j<3; j++) { io_hp[i][j] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, io_hp[i][j], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_hp[i][j], markup_label(_(io_para[j]), 100, -1, 1.0, 0.5), FALSE, FALSE, 5); k++; entry = create_entry (G_CALLBACK(set_io_param), 70, 8, FALSE, GINT_TO_POINTER(k)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> io_opts[k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_hp[i][j], entry, FALSE, FALSE, 5); if (j == 1) widget_set_sensitive (io_hp[i][j], l); } k++; check_e[i] = check_button(_(io_para[j]), 50, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_e[i], FALSE, FALSE, 20); widget_set_sensitive (check_e[i], l); k ++; } return vbox; } /*! \fn GtkWidget * create_misc_box () \brief CONTROL file create miscalleanous parameter vidgets */ GtkWidget * create_misc_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * entry; gchar * str; gboolean val; int i; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[18] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Random number generator seeds:"), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(18)), FALSE, FALSE, 5); misc_box = create_hbox (5); widget_set_sensitive (misc_box, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, misc_box, FALSE, FALSE, 0); for (i=19; i<22; i++) { str = g_strdup_printf ("n%d", i-18); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, misc_box, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_io_param), 70, 10, FALSE, GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> io_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, misc_box, entry, FALSE, FALSE, 5); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[22] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Limits to 2 the number of processors in z direction for slab simulations"), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(22)), FALSE, FALSE, 5); return vbox; } GtkWidget * elec_box[4]; GtkWidget * pres_spin; gchar * eval_m[10] = {i18n("Direct Coulomb sum"), i18n("Distance dependent dielectric Coulomb sum"), i18n("Ewald sum (auto)"), i18n("Ewald sum"), i18n("Reaction field electrostatics"), i18n("Reaction field with Fennel damping"), i18n("Reaction field with Fennel damping (auto)"), i18n("Force-shifted Coulomb sum"), i18n("Force-shifted Coulomb sum with Fennel damping"), i18n("Force-shifted Coulomb sum with Fennel damping (auto)")}; /*! \fn G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) \brief CONTROL file update electrostatic interactions parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 1) { if (v > 0.0 && v != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = v; } else if (v < 0.0) { show_warning (_("Cutoff must be > 0.0 Å"), field_assistant); } } else if (i == 3) { if (v > 0.0 && v != tmp_field -> elec_opts[i]) { if (v >= min(0.05, 0.5*tmp_field -> elec_opts[1]/100.0)) { tmp_field -> elec_opts[i] = v; } else { show_warning (_("Padding must be ≥ min(0.05, 0.5%rcut) Å"), field_assistant); } } else if (v < 0.0) { show_warning (_("Padding must be > 0.0 Å"), field_assistant); } } else { if (i != 6 && (v >= 0.0 && v != tmp_field -> elec_opts[i])) { tmp_field -> elec_opts[i] = v; } else if (i == 6) { if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { int j = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pres_spin)); double w = v * pow (10, j); if ((w >= 1e-20 && w <= 0.5) && w != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = w; w = v; } else if (w < 1e-20 || w > 0.5) { show_warning (_("Precision must ∈ [10-20 - 0.5]"), field_assistant); w = tmp_field -> elec_opts[i] / pow (10, j); } } else if (v >= 0.0 && v != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = v; } } } if (i == 10) { if (tmp_field -> elec_opts[i] == 0.0) tmp_field -> elec_opts[i] = 1.0; if (tmp_field -> elec_opts[i] > 10.0) tmp_field -> elec_opts[i] = 4.0; update_entry_int (GTK_ENTRY(res), (int)tmp_field -> elec_opts[i]); } else if (i == 7 || i == 8 || i == 9) { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> elec_opts[i]); } else { if (i == 6) { update_entry_double (GTK_ENTRY(res), v); } else { update_entry_double (GTK_ENTRY(res), tmp_field -> elec_opts[i]); } } } /*! \fn G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) \brief CONTROL file update electrostatic interactions precision spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) { int powa = gtk_spin_button_get_value_as_int(res); double v = tmp_field -> elec_opts[6]; while (v < 0.1) { v = v*10; } v = v*10; tmp_field -> elec_opts[6] = v * pow(10, powa); } /*! \fn GtkWidget * create_elec_param_box () \brief CONTROL file create electrostatic interactions parameter box */ GtkWidget * create_elec_param_box () { GtkWidget * vbox, * vvbox; GtkWidget * hbox, * hhbox; GtkWidget * entry; vvbox = create_hbox (5); vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vvbox, vbox, FALSE, FALSE, 50); gchar * dir[3] = {"x:", "y:", "z:"}; if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Precision:"), 180, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[6] = 1e-20; entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); double v = tmp_field -> elec_opts[6]; int i = -1; while (v < 0.1) { v = v*10; i --; } update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6] / pow(10,i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" x 10-", 5, -1, 0.0, 0.5), FALSE, FALSE, 0); pres_spin = spin_button (G_CALLBACK(adjust_precision), i, -20, -1, 1, 0, 15, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, pres_spin, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("∈ [10-20 - 0.5]", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } else if (tmp_field -> elec_opts[5] == 3.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Ewald convergence parameter:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[6] = 1.0; entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å-1", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Maximum k vector index in directions:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); int i; for (i=0; i<3; i++) { hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dir[i], 10, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[7+i] = 1.0; entry = create_entry (G_CALLBACK(set_elec_param), 50, 5, FALSE, GINT_TO_POINTER(7+i)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> elec_opts[7+i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); } } else if (tmp_field -> elec_opts[5] == 5.0 || tmp_field -> elec_opts[5] == 8.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Fennell damping parameter (α):"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å-1", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 3.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Evaluate k-space contribution to the Ewald sum every:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 50, 5, FALSE, GINT_TO_POINTER(10)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> elec_opts[10]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } return vvbox; } /*! \fn G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) \brief CONTROL file change electrostatics evaluation method \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) { tmp_field -> elec_opts[5] = combo_get_active ((GtkWidget *)box); elec_box[3] = destroy_this_widget (elec_box[3]); elec_box[3] = create_elec_param_box (); show_the_widgets (elec_box[3]); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[2], elec_box[3], FALSE, FALSE, 10); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) \brief change CONTROL file electrostatics option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) \brief change CONTROL file electrostatics option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> elec_opts[i] = (j) ? 1.0 : 0.0; if (! i) widget_set_sensitive (elec_box[j], j); if (i == 2) widget_set_sensitive (elec_box[1], j); } /*! \fn GtkWidget * create_electro_box () \brief CONTROL file create electrostatic interactions parameter vidgets */ GtkWidget * create_electro_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gboolean val = (tmp_field -> elec_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Evaluate electrostatics interactions"), -1, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(0)), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); elec_box[0] = create_vbox(5); widget_set_sensitive (elec_box[0], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, elec_box[0], FALSE, FALSE, 50); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Long range interaction cutoff [rcut]:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry (G_CALLBACK(set_elec_param), 100, 10, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); val = (tmp_field -> elec_opts[2] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Add padding to rcut:"), 150, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(2)), FALSE, FALSE, 0); elec_box[1] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, elec_box[1], FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 100, 10, FALSE, GINT_TO_POINTER(3)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, elec_box[1], entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, elec_box[1], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); widget_set_sensitive (elec_box[1], val); val = (tmp_field -> elec_opts[4] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], check_button(_("Use extended coulombic exclusion"), -1, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(4)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Evaluation method:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); int i; for (i=0; i<10; i++) { combo_text_append(combo, _(eval_m[i])); } combo_set_active (combo, (int)tmp_field -> elec_opts[5]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_elec_eval), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); elec_box[2] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], elec_box[2], FALSE, FALSE, 0); elec_box[3] = create_elec_param_box (); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[2], elec_box[3], FALSE, FALSE, 10); return vbox; } GtkWidget * vdw_box[2]; gchar * eval_vdw[6] = {"Lorentz-Berthelot", "Fender-Halsey", "Hogervorst", "Halgren HHG", "Tang-Toennies", i18n("Functional")}; /*! \fn G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) \brief CONTROL file udpate VdW parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 1) { if (v > 0.0 && v != tmp_field -> vdw_opts[i]) { tmp_field -> vdw_opts[i] = v; } else if (v < 0.0) { show_warning (_("Cutoff must be > 0.0 Å"), field_assistant); } } update_entry_double (GTK_ENTRY(res), tmp_field -> vdw_opts[i]); } /*! \fn G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) \brief CONTROL file change VdW mixing rule \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) { tmp_field -> vdw_opts[5] = combo_get_active ((GtkWidget *)box); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) \brief change CONTROL file VdW option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) \brief change CONTROL file VdW option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) #endif { int i, j; j = GPOINTER_TO_INT(data); i = button_get_status ((GtkWidget *)but); tmp_field -> vdw_opts[j] = (double)i; if (j == 0) widget_set_sensitive (vdw_box[0], i); if (j == 4) widget_set_sensitive (vdw_box[1], i); } /*! \fn GtkWidget * create_vdws_box () \brief CONTROL file create VdW parameter vidgets */ GtkWidget * create_vdws_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gboolean val = (tmp_field -> vdw_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Evaluate van der Waals interactions"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(0)), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vdw_box[0] = create_vbox(5); gtk_box_set_homogeneous (GTK_BOX (vdw_box[0]), TRUE); widget_set_sensitive (vdw_box[0], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vdw_box[0], FALSE, FALSE, 50); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Short range interaction cutoff:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry (G_CALLBACK(set_vdw_param), 100, 10, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> vdw_opts[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Enforce direct calculation of van der Waals interactions"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(2)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Apply force-shifting (contributions smoothly fall to zero near rcut)"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(3)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Apply mixing rule (when needed and if possible generate cross species interactions)"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(4)), FALSE, FALSE, 5); vdw_box[1] = create_vbox(5); val = (tmp_field -> vdw_opts[4] == 1.0) ? TRUE : FALSE; widget_set_sensitive (vdw_box[1], val); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], vdw_box[1], FALSE, FALSE, 0); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Mixing rule:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); int i; for (i=0; i<6; i++) { combo_text_append(combo, (i == 5) ? _(eval_vdw[i]) : eval_vdw[i]); } combo_set_active (combo, (int)tmp_field -> vdw_opts[5]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_vdw_mix), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); return vbox; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) \brief change CONTROL file metal interactions toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) \brief change CONTROL file metal interactions toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) #endif { int i, j; j = GPOINTER_TO_INT(data); i = button_get_status ((GtkWidget *)but); tmp_field -> met_opts[j] = (double)i; } /*! \fn GtkWidget * create_metal_box () \brief create CONTROL file metal interaction widgets */ GtkWidget * create_metal_box () { GtkWidget * vbox = create_vbox (BSEP); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); GtkWidget * hbox; gboolean val = (tmp_field -> met_opts[0] == 1.0) ? TRUE : FALSE; hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials"), -1, 25, val, G_CALLBACK(check_met), GINT_TO_POINTER(0)), FALSE, FALSE, 5); val = (tmp_field -> met_opts[1] == 1.0) ? TRUE : FALSE; hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Switch the default embedding functions, F, from F(ρ) to F(√ρ)"), -1, 25, val, G_CALLBACK(check_met), GINT_TO_POINTER(1)), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) \brief update CONTROL file system option parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 9) { if (v >= 1.0 && v != tmp_field -> sys_opts[i]) { tmp_field -> sys_opts[i] = v; } else if (v < 1.0) { show_warning (_("Subcelling threshold density must be ≥ 1.0"), field_assistant); } } else if (v >= 0.0 && v != tmp_field -> sys_opts[i]) { tmp_field -> sys_opts[i] = v; } if (i > 10) { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> sys_opts[i]); } else { update_entry_double (GTK_ENTRY(res), tmp_field -> sys_opts[i]); } } GtkWidget * sys_box[4]; gchar * sys_opts[10] = {i18n("Relative dielectric constant εr"), i18n("Allowed local variation of system density:"), i18n("Ignore the particle indices in CONFIG file"), i18n("Ignore strict checks, hide warnings and assume safe simulation parameters"), i18n("Skip detailed topology reporting during read of FIELD file in output"), i18n("Ignore center of mass removal during the calculation"), i18n("Set tolerance for relaxed shell model:"), i18n("Set the subcelling threshold density of particles per link cell:"), i18n("Create an expanded version of the current model:"), i18n("Restart calculation:")}; /*! \fn G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) \brief change CONTROL file system option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) { tmp_field -> sys_opts[15] = combo_get_active ((GtkWidget *)box); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) \brief change CONTROL file system option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) \brief change CONTROL file system option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> sys_opts[i] = (j) ? 1.0 : 0.0; if (i > 5) { k = i - 6; if (i == 14) k = 3; widget_set_sensitive (sys_box[k], j); } } /*! \fn GtkWidget * create_sys_box () \brief prepare the DL-POLY CONTROL file system options widgets */ GtkWidget * create_sys_box () { GtkWidget * vbox; GtkWidget * hbox, * hhbox; GtkWidget * entry; gboolean val; hhbox = create_hbox (5); vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 10); int i, j, k; for (i=0; i<9; i++) { hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); if (i < 2) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(sys_opts[i]), 350, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_sys_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> sys_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (i) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("%", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { j = (i < 7) ? i : (i == 7) ? 8 : 10; val = (tmp_field -> sys_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(sys_opts[i]), -1, 25, val, G_CALLBACK(check_sys), GINT_TO_POINTER(i)), FALSE, FALSE, 5); if (i > 5) { sys_box[i-6] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sys_box[i-6], FALSE, FALSE, 0); widget_set_sensitive (sys_box[i-6], val); if (i < 8) { entry = create_entry (G_CALLBACK(set_sys_param), 100, 10, FALSE, GINT_TO_POINTER(j+1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> sys_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], entry, FALSE, FALSE, 10); if (i == 6) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], markup_label("D Å ps-2", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { for (k=0; k<3; k++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], markup_label(imp_dir[k], 50, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_sys_param), 50, 5, FALSE, GINT_TO_POINTER(j+k+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> sys_opts[j+k+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], entry, FALSE, FALSE, 5); } } } } } return hhbox; } /*! \fn GtkWidget * create_restart_box () \brief prepare the DL-POLY CONTROL file restart widgets */ GtkWidget * create_restart_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gboolean val = (tmp_field -> sys_opts[14] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(sys_opts[9]), -1, 25, val, G_CALLBACK(check_sys), GINT_TO_POINTER(14)), FALSE, FALSE, 5); sys_box[3] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sys_box[3], FALSE, FALSE, 0); widget_set_sensitive (sys_box[3], val); gchar * rtype[3]={i18n("Continue current simulation"), i18n("Start new simulation from older run without temperature reset"), i18n("Start new simulation from older run with temperature reset")}; GtkWidget * combo = create_combo(); int i; for (i=0; i<3; i++) combo_text_append(combo, _(rtype[i])); combo_set_active (combo, (int)tmp_field -> sys_opts[15]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_sys_restart), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[3], combo, FALSE, FALSE, 20); return vbox; } /*! \fn GtkWidget * vbox_control (int f) \brief crerate DL-POLY option widgets \param f the page number in the CONTROL file section of the DL-POLY input file(s) creation assistant */ GtkWidget * vbox_control (int f) { GtkWidget * vbox; vbox = create_vbox (5); switch (f) { case 0: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Global options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_sys_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Restart options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_restart_box(), FALSE, FALSE, 0); break; case 1: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Intra-molecular probability denisty function (PDF) analysis:"), 350, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_analyze_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Overall analysis:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_overall_box(), FALSE, FALSE, 0); break; case 2: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("van der Waals (Non-bonded short range):"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_vdws_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Electrostatics (Non-bonded long range):"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_electro_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Metallic interactions:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_metal_box(), FALSE, FALSE, 0); break; case 3: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Equilibration:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_equi_box(), FALSE, FALSE, 0); break; case 4: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Thermodynamics:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_ensemble_box(), FALSE, FALSE, 0); break; case 5: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Molecular dynamics:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_md_box(), FALSE, FALSE, 0); break; case 6: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Output information:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_out_box(), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Trajectory file(s):"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_traj_box(), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Restart file:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_dump_box(), FALSE, FALSE, 10); break; case 7: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Job options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_job_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("I/O options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_io_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Other options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_misc_box(), FALSE, FALSE, 0); break; default: break; } return vbox; } /* 0: System options: 0 = Epsilon 1 = Density variation 2 = no index 3 = no strict 4 = no topology 5 = no vafar 6 = no vom 7 = Set tolerance for rsm ... 8 = ... rsm tolerance 9 = Set subscelling threshold ... 10 = ... subscelling threshold 11 = Create expanded system ... 12 = ... x ... 13 = ... y ... 14 = ... z 15 = Restart calc ... 16 = ... restart type 1: Calc. options: 0 = All PDFs 1 = All: every 2 = All: ndelta 3 = All: cutoff 4 = Bonds PDFs 5 = Bonds: every 6 = Bonds: ndelta 7 = Bonds: cutoff 8 = Angles PDFs 9 = Angles: every 10 = Angles: ndelta 11 = Dihedrals PDFs 12 = Dihedrals: every 13 = Dihedrals: ndelta 14 = Inversions PDFs 15 = Inversions: every 16 = Inversions: ndelta 17 = print pdfs 18 = rdf 19 = every n steps 20 = bin size 21 = print velocity autocorrelation functions 22 = every n steps 23 = print z-dens 24 = every n steps 25 = Job time 26 = Job closure 2: Electro. stat options: 0 = Evaluate (or not) electrostatics 1 = Electrostatics evaluation method 2 = Param 1 3 = Param 2 4 = Param 3 5 = Param 4 3: Equil. options: 0 = Equil 1 = Equi for n steps 2 = Scale temp 3 = Scale temp: every 4 = cap forces 5 = cap: force max 6 = Resample 7 = Resample: during 8 = Minimize 9 = Minimize: string 10 = Minimize: target 11 = Minimize: every 12 = Optimize 13 = Optimize: string 14 = Optimize: target 15 = zero temp MD 16 = collect 4: Thermo options: 0 = Ensemble 1 = Thermostat 2 to 7 = Thermostat options 5: MD options 0 = target temp 1 = integrator 2 = MD steps 3 = Time step type 4 = Time step 5 = Max time step 6 = Max dist. per time step 7 = Min dist. per time step 8 = Target pressure 9 = shake limit 10 = shake tol 11 = FIQA lim 12 = FIQA tol 17 = Initiate impact 18 = particle index 19 = MD step 20 = impact energy 21 = impact x direct 22 = impact y direct 23 = impact z direct 6: Output options: 0 = Write defects trajectory ... 1 = ... start time to dump defects 2 = ... time step to dump defects 3 = ... site interstitial cutoff 4 = write displacements trajectory ... 5 = ... start time to dump displacements 6 = ... time step to dump displacements 7 = ... displacement qualifying cutoff 8 = Write history/trajectory file ... 9 = ... start time to dump trajectory 10 = ... time step to dump trajectory 11 = ... data level [0=coord, 1=0+velo, 2=1+forces] 12 = Write MSDTMP file ... 13 = ... start time to dump trajectory 14 = ... time step to dump trajectory 15 = print data ... 16 = ... every n steps 17 = accumulate stat ... 18 = ... every n step(s) 19 = set rolling avertage stack ... 20 = ... to n time step(s) 21 = Write RDFs ... 22 = ... every n step(s) 23 = ... bin size * 24 = Write VAFs ... 25 = ... every n step(s) 26 = ... bin size 27 = Write z-dens ... 28 = ... every n step(s) 29 = Ignore time average for VAFs 30 = Dump restart every n step(s) */ atomes_1.3.1/src/calc/dl_poly/dlp_field.h0000664000175000017500000004241115212624223017735 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_field.h * @short Variable declarations for the creation of the DL_POLY input file(s) * @author Sébastien Le Roux */ /* * This header file: 'dlp_field.h' * * Contains: Variable declarations for the creation of the DL_POLY input file(s) */ #ifndef DLP_FIELD_H_ #define DLP_FIELD_H_ #include "global.h" // See DL_POLY user manual for the meaning // of the different parameters, key and values. #define N_FIELDS 21 extern char * field_acro[N_FIELDS]; #define DL_ENERGY 5 #define DL_BONDS 11 #define DL_ANGLES 15 #define DL_DIHEDRAL 8 #define DL_INVERS 6 #define DL_TETH 3 #define DL_VDW 21 #define DL_METALS 9 #define DL_TERSOFFS 2 #define DL_THREEBODY 6 #define DL_FOURBODY 3 #define DL_EXTERNAL 13 #define LA_ENERGY 1 #define LA_BONDS 16 #define LA_ANGLES 19 #define LA_DIHEDRAL 14 #define LA_INVERS 11 #define LA_TETH 0 #define LA_VDW 0 #define LA_METALS 0 #define LA_TERSOFFS 0 #define LA_THREEBODY 0 #define LA_FOURBODY 0 #define LA_EXTERNAL 0 #define FTETH max(DL_TETH,LA_TETH) #define FBONDS max(DL_BONDS,LA_BONDS) #define FANGLES max(DL_ANGLES,LA_ANGLES) #define FDIHEDRAL max(DL_DIHEDRAL,LA_DIHEDRAL) #define FINVERS max(DL_INVERS,LA_INVERS) #define FVDW max(DL_VDW,LA_VDW) #define FMETALS max(DL_METALS,LA_METALS) #define FTERSOFFS max(DL_TERSOFFS,LA_TERSOFFS) #define FTHREEBODY max(DL_THREEBODY,LA_THREEBODY) #define FFOURBODY max(DL_FOURBODY,LA_FOURBODY) #define FEXTERNAL max(DL_EXTERNAL,LA_EXTERNAL) #define DL_BONDS_P 4 #define DL_ANGLES_P 6 #define DL_DIHEDRAL_P 5 #define DL_INVERS_P 3 #define DL_TETH_P 3 #define DL_VDW_P 7 #define DL_METALS_P 9 #define DL_TERSOFFS_P 16 #define DL_THREEBODY_P 5 #define DL_FOURBODY_P 3 #define DL_EXTERNAL_P 6 #define LA_BONDS_P 5 #define LA_ANGLES_P 6 #define LA_DIHEDRAL_P 11 #define LA_INVERS_P 5 #define LA_TETH_P 0 #define LA_VDW_P 0 #define LA_METALS_P 0 #define LA_TERSOFFS_P 0 #define LA_THREEBODY_P 0 #define LA_FOURBODY_P 0 #define LA_EXTERNAL_P 0 #define FTETH_P max(DL_TETH_P,LA_TETH_P) #define FBONDS_P max(DL_BONDS_P,LA_BONDS_P) #define FANGLES_P max(DL_ANGLES_P,LA_ANGLES_P) #define FDIHEDRAL_P max(DL_DIHEDRAL_P,LA_DIHEDRAL_P) #define FINVERS_P max(DL_INVERS_P,LA_INVERS_P) #define FVDW_P max(DL_VDW_P,LA_VDW_P) #define FMETALS_P max(DL_METALS_P,LA_METALS_P) #define FTERSOFFS_P max(DL_TERSOFFS_P,LA_TERSOFFS_P) #define FTHREEBODY_P max(DL_THREEBODY_P,LA_THREEBODY_P) #define FFOURBODY_P max(DL_FOURBODY_P,LA_FOURBODY_P) #define FEXTERNAL_P max(DL_EXTERNAL_P,LA_EXTERNAL_P) #define MOLIMIT 15 #define SEXTERN 20 #define AMBER94 0 #define AMBER96 1 #define AMBER98 2 #define AMBER99 3 #define CHARMM22P 4 #define CHARMM22M 5 #define CHARMM35E 6 #define CHARMM36C 7 #define CHARMM36G 8 #define CHARMM36L 9 #define CHARMM36N 10 #define CHARMM36P 11 #define CHARMM36M 12 #define CHARMMSI 13 #define CVFF 14 #define CVFF_AUG 15 #define CFF91 16 #define PCFF 17 #define COMPASS 18 #define OPLSAAP 19 #define OPLSAAR 20 /*! \enum dlp_atom_types */ enum dlp_atom_types { SPEC_ONLY = 0, /*!< 0 */ // Total coord + spec TOTAL_COORD_AND_SPEC = 1, /*!< 1 */ // Partial coord + spec PARTIAL_COORD_AND_SPEC = 2, /*!< 2 */ OTHER = 3 /*!< 3 */ }; typedef struct field_prop field_prop; struct field_prop { int pid; int fpid; int key; int * aid; float * val; gboolean show; gboolean use; field_prop * next; field_prop * prev; }; typedef struct field_atom field_atom; struct field_atom { int id; int fid; // Id among force field int afid; // Atoms id among force field atoms // Type is Among dlp_atom_types int type; char * name; int num; int sp; float mass; float charge; int frozen; gboolean * frozen_id; gboolean show; // ID of atoms in project file int * list; // ID of atoms for the DL_POLY molecule int * list_id; field_atom* prev; field_atom* next; }; typedef struct field_shell field_shell; struct field_shell { int id; // 0 = select the field atom to CS // 1 = 0= all, 1 = selection int ia[2]; float z; float m; float k2; float k4; gboolean vdw; gboolean show; gboolean use; field_shell * prev; field_shell * next; }; typedef struct field_constraint field_constraint; struct field_constraint { int id; int ia[2]; float av; float length; gboolean show; gboolean use; field_constraint * prev; field_constraint * next; }; typedef struct field_pmf field_pmf; struct field_pmf { int id; float av; float length; int num[2]; int * list[2]; float * weight[2]; gboolean show; gboolean use; field_pmf * prev; field_pmf * next; }; typedef struct field_rigid field_rigid; struct field_rigid { int id; int num; int * list; gboolean show; gboolean use; field_rigid * prev; field_rigid * next; }; typedef struct field_tethered field_tethered; struct field_tethered { int id; int num; int key; float * val; gboolean show; gboolean use; field_tethered * prev; field_tethered * next; }; // See field molecule for details typedef struct field_struct field_struct; struct field_struct { // Struct id (0 = Bonds, 2 = Angles, 4 = dihedrals ...) int st; int id; int num; int * aid; // Field atom id float av; field_prop * def; field_prop * other; field_struct * prev; field_struct * next; }; // Non-bonded interactions follow // N body (Vdw, Metal, Tersoff, 3b, 4b) typedef struct field_nth_body field_nth_body; struct field_nth_body { // Body Id 0=Vdw, 1= Metal ... int bd; int id; int * fpid; int * na; // atom a num int ** ma; // atom a mol id's int ** a; // field atom a id's in mol int key; float * val; gboolean show; gboolean use; field_nth_body * prev; field_nth_body * next; }; typedef struct field_external field_external; struct field_external { int id; int key; float * val; gboolean use; field_external * prev; field_external * next; }; /* simplified atom data structure */ typedef struct field_neighbor field_neighbor; struct field_neighbor { int id; // atom id in molecule/fragment int num; // number of neighbor(s) int * vois; // list of neighbor(s) field_neighbor * prev; field_neighbor * next; }; typedef struct field_molecule field_molecule; struct field_molecule { int id; gchar * name; struct molecule * mol; int multi; int * fragments; dint ** atoms_id; int atoms; field_atom* first_atom; int shells; field_shell * first_shell; int constraints; field_constraint * first_constraint; int pmfs; field_pmf * first_pmf; int rigids; field_rigid * first_rigid; int tethered; field_tethered * first_tethered; // 0 = bonds // 1 = bonds restraints // 2 = angles // 3 = angles restraints // 4 = diehdrals // 5 = torsional restraints // 6 = impropers // 7 = inversions int nstruct[8]; field_struct * first_struct[8]; gboolean show; gboolean show_id; field_molecule * next; field_molecule * prev; }; typedef struct field_object_match field_object_match; struct field_object_match { int id; int obj; int oid; int type; gboolean use; field_object_match * next; field_object_match * prev; }; typedef struct field_data field_data; struct field_data { int key; int ** atoms_z; int ** atoms_id; int npar; float ** param; char ** info; }; extern GtkWidget * field_assistant; extern gchar * celemts[MAXDATC]; extern GtkWidget * vbox_control (int f); extern int selected_aspec; extern gchar * fkeysw[2][16][21]; extern gchar * fnames[2][16][21]; extern int fvalues[2][15][21]; extern char * fvars_teth[2][FTETH][FTETH_P]; extern char * fvars_bond[2][FBONDS][FBONDS_P]; extern char * fvars_angle[2][FANGLES][FANGLES_P]; extern char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P]; extern char * fvars_inversion[2][FINVERS][FINVERS_P]; extern char * fvars_vdw[2][FVDW][FVDW_P]; extern char * fvars_met[2][FMETALS][FMETALS_P]; extern char * fvars_ters[2][FTERSOFFS][FTERSOFFS_P]; extern char * fvars_tbd[2][FTHREEBODY][FTHREEBODY_P]; extern char * fvars_fbd[2][FFOURBODY][FFOURBODY_P]; extern char * fvars_fext[2][FEXTERNAL][FEXTERNAL_P]; extern float internal_to_other[5]; extern classical_field * tmp_field; extern glwin * tmp_view; extern coord_info * tmp_coord; extern project * tmp_proj; extern field_molecule * tmp_fmol; extern molecule * tmp_mol; extern field_atom* tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; extern field_shell * tmp_fshell; extern field_constraint * tmp_fcons; extern field_pmf * tmp_fpmf; extern field_rigid * tmp_frig; extern field_tethered * tmp_ftet; extern field_prop * tmp_fprop; extern field_struct * tmp_fstr; extern field_nth_body * tmp_fbody; extern field_nth_body * comp_fbody; extern field_external * tmp_fext; extern int row_id; extern tint toviz; extern int field_v[MAXDATA]; extern GtkWidget * mol_box[MOLIMIT-1]; extern GtkWidget * combo_mol[MOLIMIT-1]; extern GtkTreeStore * field_model[MAXDATA]; extern GtkWidget * field_tree[MAXDATA]; extern GtkWidget * mol_num_label; extern GtkTreeIter field_iter; extern gboolean afp[MAXDATA]; extern int field_object; extern gboolean field_color; extern int num_field_objects; extern int saved_label_format[2]; extern int struct_id (int f); extern int body_at (int b); // Init field elements extern int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); extern int test_for_bonds (field_atom* at, field_atom* bt); extern int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct); extern int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); extern void clean_field_struct_list (field_struct * stru); // Create force field data structure extern void set_mol_num_label (); extern G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data); extern void update_field_trees (); extern GtkWidget * create_combo_mol (int f); extern void fill_field_model (GtkTreeStore * store, int f, int m); extern GtkWidget * create_field_tree (int f); extern classical_field * create_force_field_data_structure (int ai); // Duplicate field element: extern int * duplicate_int (int num, int * old_val); extern gboolean * duplicate_bool (int num, gboolean * old_val); extern float * duplicate_float (int num, float * old_val); extern field_atom* duplicate_field_atom (field_atom* old_fat); extern field_shell * duplicate_field_shell (field_shell * old_shell); extern field_constraint * duplicate_field_constraint (field_constraint * old_cons); extern field_rigid * duplicate_field_rigid (field_rigid * old_rig); extern field_tethered * duplicate_field_tethered (field_tethered * old_tet); extern field_prop * duplicate_field_prop (field_prop * old_prop, int ti); extern void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr); extern field_struct * duplicate_field_struct (field_struct * old_fstr); extern field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init); extern field_nth_body * duplicate_field_nth_body (field_nth_body * old_nth_body); extern field_molecule * duplicate_field_molecule (field_molecule * old_fmol); extern classical_field * duplicate_dlpoly_field (classical_field * init_field); // Init field element: extern field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list); extern field_shell * init_field_shell (int id, int ia, int ib); extern field_constraint * init_field_constraint (int id, int ia, int ib); extern field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); extern field_rigid * init_field_rigid (int id, int num, int * list); extern field_tethered * init_field_tethered (int id, int num); extern field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); extern field_struct * init_field_struct (int st, int ai, int an, int * aid); extern field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); extern field_external * init_field_external (int bi); extern void init_all_field_struct (gboolean init); extern int init_vdw (gboolean init); extern void setup_field_molecule_neighbors (int i, project * this_proj); // Get active field element: extern int get_position_in_field_atom_from_model_id (int fat, int at); extern int get_field_atom_id_from_model_id (field_molecule * fmol, int at); extern field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid); extern int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at); extern field_molecule * get_active_field_molecule (int a); extern field_nth_body * get_active_body (int a, int b); extern field_external * get_active_external (int a); extern field_atom* get_active_atom (int a, int b); extern field_shell * get_active_shell (int a, int b); extern field_constraint * get_active_constraint (int a, int b); extern field_pmf * get_active_pmf (int a, int b); extern field_rigid * get_active_rigid (int a, int b); extern field_tethered * get_active_tethered (int a, int b); extern field_prop * get_active_prop (struct field_prop * pr, int a); extern field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); extern field_struct * get_active_struct (int s, int a, int b); extern int get_struct_id_from_atom_id (int ids, int * aid); // Field objects visualization: extern int get_field_objects (int id, int jd); extern gboolean show_field_object (int id, int jd, int kd); extern void visualize_object (int id, int jd, int kd); extern G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); extern G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data); // Field molecule callbacks extern void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key); extern gchar * remove_text (int i, int j, gchar * str); extern G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data); extern G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); // OGL utils extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); extern angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); // Print extern gchar * parameters_info (int obj, int key, gchar ** words, float * data); extern void print_dlp_field (GtkTextBuffer * buf); extern void print_dlp_config (GtkTextBuffer * buf); extern void print_dlp_control (GtkTextBuffer * buf); extern void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_dihedral (int di, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern G_MODULE_EXPORT void setup_this_force_field (int id); extern field_object_match * field_objects_id[6]; extern field_object_match * tmp_obj_id; extern float get_force_field_atom_mass (int sp, int num); extern int ff_unit; extern field_data * ff_bonds[3]; extern field_data * ff_angles[2]; extern field_data * ff_dih[2]; extern field_data * ff_imp; extern field_data * ff_inv; extern field_data * ff_vdw; extern int ** extraz_id; extern gboolean dlp_to_translate (int fid, int obj, int key); #endif atomes_1.3.1/src/calc/cpmd/0000775000175000017500000000000015212624223015121 5ustar lerouxlerouxatomes_1.3.1/src/calc/cpmd/cpmd_init.c0000664000175000017500000017375615212624223017256 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_init.c * @short Functions to initialize the QM / QM-MM input file creation assistant * @author Sébastien Le Roux */ /* * This file: 'cpmd_init.c' * * Contains: * - The functions to initialize the QM / QM-MM input file creation assistant * * List of functions: G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data); gboolean go_for_it (int i, int j, gboolean print[2]); G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data); G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data); gchar * section_name (int p); gchar * page_name (int p); void print_all_sections (GtkTextBuffer * buf); void add_cpmd_pages (); void proj_unselect_all_atoms (); void create_qm_input_file (int c, int p, int s); G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data); G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data); G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data); G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data); GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); GtkWidget * prepare_qm_option_box (int s); GtkWidget * calc_qm_option_box (int c); GtkWidget * info_box (); GtkWidget * section_box (int s); GtkWidget * qm_preview_box (int c, int s, int l); GtkWidget * vbox_cpmd (int s); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cpmd.h" #include "cp2k.h" extern void print_cp2k (int f, GtkTextBuffer * buffer); extern void add_cp2k_pages (); extern ColRGBA init_color (int id, int numid); extern GtkWidget * electron_box; extern GtkWidget * thermo_box (); extern void field_unselect_all (); extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern void init_thermos (); extern gboolean are_all_atoms_thermostated (); extern void create_selection_combo (int id, int num, int type, GCallback handler); extern G_MODULE_EXPORT void atom_button (GtkButton * but, gpointer data); extern GtkWidget * restart_box (); extern void restore_ogl_selection (glwin * view); gchar * co_type[2] = {"CPMD", "CP2K"}; cpmd * tmp_cpmd; gchar * cpmd_elements[MAXDATAQM] = {"INFO", "CPMD", "DFT", "VDW", "PROP", "SYSTEM", "ATOMS"}; gchar * cdescr[MAXDATAQM] = {i18n("provides an informal description of the system and the calculation to be performed"), i18n("provides the general control parameters for the calculation to be performed"), i18n("provides the exchange and correlation functional (DFT) parameters"), i18n("describes the implementation of the van der Waals interactions"), i18n("provides details about the physical properties to be calculated"), i18n("describes the symmetry and periodicity of the system"), i18n("describes the atomic species, pseudo-potentials and coordinates")}; double default_cpmd_options[17] = {400.0, 0.0, 0.0, 4.0, 0.000001, 0.0, 0.0, 0.0, 0.0, 0.0, 70.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0}; gchar * default_opts[MAXDATAQM-1][NSECOP]= {{i18n("Fictitious electronic mass:"), i18n("Local Spin Density"), i18n("van der Walls interactions"), " ", " ", " "}, {i18n("DFT functional:"), i18n("Density cutoff*:"), " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {i18n("Use Angströms (default a.u.)"), i18n("Lattice:"), i18n("Symmetry:"), i18n("Parameters:"), i18n("Angles:"), i18n("Cutoff for the plane wave basis:")}, {i18n("Use constraints"), i18n("Freeze:"), i18n("Use dummy atoms:"), i18n("Atom type:"), i18n("Maximum angular momentum l:"), i18n("Local angular momentum l:")}}; // 0 = None, 1 = Entry, 2 = Combo, 3 = yes/no int default_opts_type[MAXDATAQM-1][NSECOP] = {{1, 3, 3, 0, 0, 0}, {2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {3, 2, 2, 2 ,2, 1}, {3, 0, 3, 2, 2, 2}}; // NDF is the max by far int defaut_num[9]={NDFT, 2, NSYM, 2, 2, 3, -1, 3, 3}; gchar * default_keywords[9][NDFT] = {{"SONLY", "LDA", "BONLY", "BP", "BLYP", "XLYP", "PW91", "PBE", "PBES", "REVPBE", "HCTH", "OPTX", "OLYP", "TPSS", "PBE0", "B1LYP", "B3LYP", "X3LYP", "HSE06"}, {" ", " VECTORS", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ABSOLUTE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " DEGREE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"ALL", "ATOMS", "COORDINATES", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"S", "P", "D", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"S", "P", "D", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * default_text[9][NDFT] = {{i18n("Slater Exchange Only"), i18n("Local Density Approximation"), "Becke 88", "Becke + Perdew", "Becke + Lee-Yang-Parr", i18n("Extended B88+PW91+LYP88"), "Perdew + Wang 91", "Perdew + Burke-Ernzerhof", i18n("PBE Revised for Solids"), i18n("Revised - PBE"), "Hamprecht-Cohen-Tozer-Handy", i18n("Optimized Becke 88"), "Handy-Cohen + LYP", "Tao-Perdew-Staroverov-Scuseria", i18n("Parameter-free PBE"), i18n("Becke One-parameter Hybrid + LYP"), i18n("Becke Three-parameters Hybrid + LYP"), i18n("Extended Hybrid + LYP"), "Heyd-Scuseria-Ernzerhof 06"}, {i18n("Box Parameters (a,b,c and α,β,γ)"), i18n("Lattice Vectors"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Isolated"), i18n("Cubic"), i18n("Face Centered Cubic (FCC)"), i18n("Body Centered Cubic (BCC)"), i18n("Hexagonal"), i18n("Trigonal"), i18n("Tetragonal"), i18n("Body Centered Tetragonal (BCT)"), i18n("Orthorombic"), i18n("Monoclinic"), i18n("Triclinic"), " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Default (a, b/a, c/a)"), i18n("Absolute (a, b, c)"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Default (cos α, cos β, cos γ)"), i18n("Degrees (α, β, γ)"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("All Atoms"), i18n("Some Atoms"), i18n("Some Coordinates"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"s", "p", "d", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"s", "p", "d", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; double default_calc_options[24] = {0.00001, 0.0, 10000.0, 3.0, 0.0005, 0.0, 10000.0, 3.0, 10000.0, 5.0, 0.0, 0.0, 0.9, 0.0, 0.9, 10000.0, 5.0, 0.0, 0.0, 0.9, 50.0, 0.0, 0.0, 0.0}; gchar * cpmd_calc_opts[NCPMDCALC][NOPTPC]={{i18n("Convergence criteria*:"), i18n("Optimizer:"), i18n("Max steps:"), i18n("Integration step:"), " ", " ", " "}, {i18n("Convergence criteria*:"), i18n("Optimizer:"), i18n("Max steps:"), i18n("Integration step:"), " ", " ", " "}, {i18n("Max MD steps: "), i18n("Time step:"), i18n("Barostat:"), i18n("Ions"), i18n("Factor:"), i18n("Fictitious electrons"), i18n("Factor:")}, {i18n("Max MD steps: "), i18n("Time step:"), i18n("Barostat:"), i18n("Ions"), i18n("Factor:"), " ", " "}, {i18n("Number of unoccupied states:"), i18n("3D visualization*"), i18n("Number of objects**:"), " ", " ", " ", " "}, {i18n("Property to compute:"), " ", " ", " ", " ", " ", " "}}; int default_type[NCPMDCALC][NOPTPC]={{1, 2, 1, 1, 0, 0, 0}, {1, 2, 1, 1, 0, 0, 0}, {1, 1, 2, 3, 1, 3, 1}, {1, 1, 2, 3, 1, 0, 0}, {1, 3, 1, 0, 0, 0, 0}, {2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}; gchar * calc_kw[NCPMDCALC]= {"OPTIMIZE WAVEFUNCTION", "OPTIMIZE GEOMETRY", "MOLECULAR DYNAMICS", "MOLECULAR DYNAMICS BO", "KOHN-SHAM ENERGIES", "VIBRATIONAL ANALYSIS", "PROPERTIES"}; gchar * calc_ds[NCPMDCALC]= {i18n("Wavefunction Optimization"), i18n("Geometry Optimization"), i18n("CPMD Molecular Dynamics"), i18n("Born-Oppenheimer Molecular Dynamics"), i18n("Kohn-Sham Eigen Values"), i18n("Vibrational Analysis"), i18n("Calculation of Physical Properties")}; int calc_box_num[NCACOMBO]={2, 2, 3, 3, 3}; gchar * calc_box_name[NCACOMBO][3] = {{i18n("Preconditioned Gradient"), i18n("Direct Inversion of Iterative Subspace"), " "}, {i18n("Quasi-Newton method"), i18n("Direct Inversion of Iterative Subspace"), " "}, {i18n("None"), "Parrinello-Rahman", "Parrinello-Rahman + NPT"}, {i18n("None"), "Parrinello-Rahman", "Parrinello-Rahman + NPT"}, {i18n("Finite differences of first derivatives"), i18n("Linear response of ionic displacement"), i18n("Precalculated Hessian")}}; gchar * calc_box_keys[NCACOMBO][3] = {{"PCG", "ODIIS", " "}, {"BFGS", "GDIIS", " "}, {" ", "PARRINELLO-RAHMAN", "PARRINELLO-RAHMAN NPT"}, {" ", "PARRINELLO-RAHMAN", "PARRINELLO-RAHMAN NPT"}, {"FD", "LR", "IN"}}; gchar * nosetype[3] = {i18n("Gobal"), i18n("Local"), i18n("Molecule")}; gchar * thermo_name[2][5] = {{i18n("None"), i18n("Controlled"), i18n("Nosé-Hoover chains"), " ", " "}, {i18n("None"), i18n("Adaptive Langevin"), i18n("Canonical sampling through velocity rescaling"), "GLE", i18n("Nosé-Hoover chains")}}; int num_thermo[2] = {3, 5}; int type_thermo[2] = {2, 2}; GtkWidget * qm_preview_but; GtkWidget * calc_combo; gboolean qm_assist_init; int qm_saved_label_format[2]; GtkWidget * calc_label; GtkWidget * latbox; GtkWidget * but_at[2]; GtkWidget * spatbox; GtkWidget * ppbox[2]; GtkWidget * calc_box[NCPMDCALC]; GtkWidget * qm_option_box[MAXDATAQM-1]; gboolean is_cpmd; /*! \fn GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) \brief prepare a labelled box widget for the CPMD input creation assistant \param box the GtkWidget sending the signal \param lab the label \param v_space vertical spacing \param h_space horizontal spacing \param dim label width */ GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, v_space); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, dim, 30, 0.0, 0.5), FALSE, FALSE, h_space); return hbox; } /*! \fn void print_all_sections (GtkTextBuffer * buf) \brief print all sections of the CPMD input file \param buf the GtkTextBuffer to print into */ void print_all_sections (GtkTextBuffer * buf) { int i; for (i=0; i 2) { print_the_section (i, 1, buf); } } else if (i == 5 && (int)tmp_cpmd -> default_opts[2]) { if (buf == NULL) { print_the_section (i, 0, qmbuffer[i]); } else { print_the_section (i, 1, buf); } } else if (i == 6 && tmp_cpmd -> calc_type == 4) { if (buf == NULL) { print_the_section (i, 0, qmbuffer[i]); } else { print_the_section (i, 1, buf); } } } } /*! \fn G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) \brief update CPMD QM option value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); tmp_cpmd -> default_opts[i] = v; if (i == DEFGC) { update_entry_long_double (res, tmp_cpmd -> default_opts[i]); } else { update_entry_double (res, tmp_cpmd -> default_opts[i]); } print_all_sections (NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) \brief update CPMD QM option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) \brief update CPMD QM option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); if (i == DEFCO || i == DEFDU) { widget_set_sensitive (but_at[(i == DEFCO) ? 0 : 1], j); } tmp_cpmd -> default_opts[i] = (double) j; print_all_sections (NULL); } /*! \fn G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) \brief change CPMD QM option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) { int i, j, k; j = GPOINTER_TO_INT(data); i = combo_get_active ((GtkWidget *)box); if (j != DEFLM && j != DEFLO) { if (i != (int)tmp_cpmd -> default_opts[j]) { tmp_cpmd -> default_opts[j] = (double)i; if (j == DEFSP) { k = (int)tmp_cpmd -> default_opts[j]; combo_set_active (ppbox[0], tmp_cpmd -> pp[k][0]); combo_set_active (ppbox[1], tmp_cpmd -> pp[k][1]); } else if (j == DEFFI) { tmp_cpmd -> default_opts[DEFCO] = tmp_cpmd -> default_opts[j] + 1; if (tmp_cpmd -> fixlist != NULL) { g_free (tmp_cpmd -> fixlist); tmp_cpmd -> fixlist = NULL; if (tmp_cpmd -> fixcoord != NULL) { g_free (tmp_cpmd -> fixcoord); tmp_cpmd -> fixcoord = NULL; } } tmp_cpmd -> fixat = 0; widget_set_sensitive (sel_but[1], i); } } } else { if (i != tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][j-DEFLM]) { tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][j-DEFLM] = i; } } if (j == DEFVE) { widget_set_sensitive (latbox, ! (int)tmp_cpmd -> default_opts[j]); } print_all_sections (NULL); } /*! \fn GtkWidget * prepare_qm_option_box (int s) \brief CPM input file creation prepare section general options widgets \param s the section id */ GtkWidget * prepare_qm_option_box (int s) { int i, j, k, l; GtkWidget * hbox; GtkWidget * widg; gchar * str; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { if ((s == 0 && (i == 0 || i == 1 || i == 2)) || (s == 1 && (i == 0 || i == 1)) || (s == 4) || (s == 5)) { str = g_strdup_printf ("%s", _(default_opts[s][i])); } else { str = g_strdup_printf ("%s", default_opts[s][i]); } ident ++; if (ident == DEFAB || ident == DEFDG || ident == DEFSY) { hbox = cpmd_box (latbox, str, 5, 20, (s == 1) ? 150 : 220); } else if (ident == DEFCO || ident == DEFDU) { hbox = cpmd_box (vbox, str, 20, 20, 180); } else if (ident == DEFLM || ident == DEFLO) { hbox = cpmd_box (spatbox, str, 5, 20, 220); } else { hbox = cpmd_box (vbox, str, (ident == DEFSP) ? 20 : 5, 5, (s == 1) ? 150 : 220); } g_free (str); j = ident; switch (default_opts_type[s][i]) { case 1: widg = create_entry (G_CALLBACK(update_cpmd_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j == DEFGC) { update_entry_long_double (GTK_ENTRY(widg), tmp_cpmd -> default_opts[j]); } else { update_entry_double (GTK_ENTRY(widg), tmp_cpmd -> default_opts[j]); } break; case 2: icomb ++; if (ident == DEFLM || ident == DEFLO) { ppbox[ident - DEFLM] = create_combo (); } else { widg = create_combo (); } l = (ident == DEFSP) ? qm_proj -> nspec : defaut_num[icomb]; for (k=0; k chemistry -> label[k]); } else { str = g_strdup_printf ("%s", (icomb < 6) ? _(default_text[icomb][k]) : default_text[icomb][k]); } if (ident == DEFLM || ident == DEFLO) { combo_text_append (ppbox[ident - DEFLM], str); } else { combo_text_append (widg, str); } g_free (str); } if (ident == DEFLM || ident == DEFLO) { combo_set_active (ppbox[ident - DEFLM], tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][ident - DEFLM]); g_signal_connect (G_OBJECT (ppbox[ident - DEFLM]), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(j)); } else { combo_set_active (widg, (int)tmp_cpmd -> default_opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(j)); } break; case 3: widg = check_button (NULL, -1, -1, tmp_cpmd -> default_opts[j], G_CALLBACK(update_cpmd_check), GINT_TO_POINTER(j)); break; } if (ident == DEFLM || ident == DEFLO) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ppbox[ident - DEFLM], FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); } if (j==DEFEM || j==DEFGC || j==DEFCU) { if (j==DEFEM || j==DEFGC) { widg = gtk_label_new ("a.u."); } else { widg = gtk_label_new ("Ry"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } else if (j == DEFVE) { latbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, latbox, FALSE, FALSE, 15); widget_set_sensitive (latbox, ! (int)tmp_cpmd -> default_opts[DEFVE]); } else if (j == DEFCO || j == DEFDU) { k = (j==DEFCO) ? 0 : 1; but_at[k] = create_button ((j == DEFCO) ? _("Configure constraints") : _("Configure dummy atoms"), IMG_NONE, NULL, 175, -1, GTK_RELIEF_NORMAL, G_CALLBACK(atom_button), GINT_TO_POINTER(j)); widget_set_sensitive (but_at[k], (int)tmp_cpmd -> default_opts[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but_at[k], FALSE, FALSE, 20); if (j == DEFCO) { ident ++; icomb ++; } } else if (j == DEFSP) { spatbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, spatbox, FALSE, FALSE, 15); } } } return vbox; } /*! \fn G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) \brief update CPMD calculation option value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i==STEPO || i==STEPG || i==STEPC || i==STEPB || i==KSUNO || i==NBAND) { j = (int) v; tmp_cpmd -> calc_opts[i] = (double) j; update_entry_int (res, j); } else { tmp_cpmd -> calc_opts[i] = v; if (i == CONVO || i == CONVG) { update_entry_long_double (res, tmp_cpmd -> calc_opts[i]); } else { update_entry_double (res, tmp_cpmd -> calc_opts[i]); } } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) \brief change CPMD calculation option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); i = combo_get_active ((GtkWidget *)box); if (i != tmp_cpmd -> calc_opts[j]) { tmp_cpmd -> calc_opts[j] = i; for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) \brief update CPMD calculation option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) \brief update CPMD calculation option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); tmp_cpmd -> calc_opts[i] = (double) button_get_status ((GtkWidget *)but); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * calc_qm_option_box (int c) \brief CPMD input assistant prepare the calculation option widgets \param c the calculation id */ GtkWidget * calc_qm_option_box (int c) { int i, j, k, l; GtkWidget * hbox; GtkWidget * widg; gchar * str; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { idopt ++; l = 0; if (idopt == ANNIC || idopt == ANNIB) { hbox = cpmd_box (vbox, _("Annealing:"), 0, 5, 220); } if (idopt == ANNIC || idopt == ANNEC || idopt == ANNIB) { hbox = cpmd_box (vbox, _(cpmd_calc_opts[c][i]), 0, 25, 120); l = 30; } else if (idopt == AFAIC || idopt == AFAEC || idopt == AFAIB) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_(cpmd_calc_opts[c][i])), FALSE, FALSE, 10); l = 30; } else { hbox = cpmd_box (vbox, _(cpmd_calc_opts[c][i]), 0, 5, 220); } j = idopt; switch (default_type[c][i]) { case 1: widg = create_entry (G_CALLBACK(update_calc_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j==STEPO || j==STEPG || j==STEPC || j==STEPB || j==KSUNO || j==NBAND) { update_entry_int (GTK_ENTRY(widg), (int) tmp_cpmd -> calc_opts[j]); } else { update_entry_double (GTK_ENTRY(widg), tmp_cpmd -> calc_opts[j]); } break; case 2: icalc ++; widg = create_combo (); for (k=0; k calc_opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_calc_opt_box), GINT_TO_POINTER(j)); break; case 3: widg = check_button (NULL, -1, -1, tmp_cpmd -> calc_opts[j], G_CALLBACK(update_calc_check), GINT_TO_POINTER(j)); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, l); if (j==TSTPO || j==TSTPG || j==TSTPC || j==TSTPB) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("a.u."), FALSE, FALSE, 5); } else if (j==NBAND) { gchar * ksout = _("\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n\t\t < 0 for wavefunction"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(ksout, -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } } } return vbox; } /*! \fn G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) \brief change CPMD calculation type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); if (i != tmp_cpmd -> calc_type) { gtk_label_set_text (GTK_LABEL(calc_label), g_strdup_printf (_("%s option(s)"), _(calc_ds[i]))); gtk_label_set_use_markup (GTK_LABEL(calc_label), TRUE); hide_the_widgets (calc_box[tmp_cpmd -> calc_type]); show_the_widgets (calc_box[i]); tmp_cpmd -> calc_type = i; if (tmp_cpmd -> calc_type != 2) { hide_the_widgets (electron_box); } else { show_the_widgets (electron_box); } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } } /*! \fn G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) \brief update CPMD input file preview \param textbuf the GtkTextBuffer to print into \param data the associated data pointer */ G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (textbuf, & bStart); gtk_text_buffer_get_end_iter (textbuf, & bEnd); if (tmp_cpmd -> info != NULL) g_free (tmp_cpmd -> info); tmp_cpmd -> info = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); print_the_section (0, 0, qmbuffer[0]); } /*! \fn GtkWidget * info_box () \brief create CPMD input file information widgets */ GtkWidget * info_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); GtkWidget * scrollsets = create_scroll (NULL, 355, 250, GTK_SHADOW_ETCHED_IN); GtkWidget * aview = create_text_view (-1, -1, 1, 0, G_CALLBACK(changed_info), NULL, NULL); if (tmp_cpmd -> info != NULL) print_info (tmp_cpmd -> info, NULL, gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); add_container_child (CONTAINER_SCR, scrollsets, aview); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, 85); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * section_box (int s) \brief create CPMD section box \param s the section id */ GtkWidget * section_box (int s) { int i; gchar * str; GtkWidget * hbox; GtkWidget * vbox = create_vbox (BSEP); if (s == 0) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_box(), FALSE, FALSE, 50); } else if (s == 1) { // CPMD Calculation /* Calc type combo_box: */ idopt = -1; icalc = -1; ident = -1; icomb = -1; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Calculation to be performed:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); calc_combo = create_combo (); for (i=0; i%s option(s)"), _(calc_ds[tmp_cpmd -> calc_type])); calc_label = markup_label(str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, calc_label, FALSE, FALSE, 10); for (i=0; i calc_type); } else if (s == 2) { // CPMD - thermostat(s) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, thermo_box(), FALSE, FALSE, 5); } else if (s == 3) { // CPMD - restart add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, restart_box(), FALSE, FALSE, 0); } /* General CPMD section options: */ if (s > 0 && s != 2 && s != 3) { i = (s == 1) ? s : s - 2; str = g_strdup_printf (_("General %s section option(s)"),cpmd_elements[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, 525, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); qm_option_box[i-1] = prepare_qm_option_box (i-1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, qm_option_box[i-1], FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * qm_preview_box (int c, int s, int l) \brief prepare preview section widgets \param c 0 = CPMD, 1 = CP2K \param s section id \param l spacing */ GtkWidget * qm_preview_box (int c, int s, int l) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * scrollsets = create_scroll (NULL, 250, (c) ? 280 : 410, GTK_SHADOW_ETCHED_IN); GtkWidget * aview = create_text_view (-1, -1, 0, 1, NULL, NULL, NULL); qmbuffer[s] = gtk_text_view_get_buffer (GTK_TEXT_VIEW(aview)); add_container_child (CONTAINER_SCR, scrollsets, aview); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, scrollsets, FALSE, FALSE, l); if (c == 0) { print_the_section (s, 0, qmbuffer[s]); } else { print_cp2k (s, qmbuffer[s]); } return vbox; } /*! \fn gchar * section_name (int p) \brief get CPMD input creation section name \param p the section id */ gchar * section_name (int p) { if (p > 0 && p < 4) { return g_strdup_printf (_("Details of the %s section that %s"), cpmd_elements[1], _(cdescr[1])); } else if (p == 0) { return g_strdup_printf (_("Details of the %s section that %s"), cpmd_elements[p], _(cdescr[p])); } else { return g_strdup_printf (_("Details of the %s section that %s"), cpmd_elements[p-2], _(cdescr[p-2])); } } /*! \fn GtkWidget * vbox_cpmd (int s) \brief create CPMD input creation section widgets \param s the section id */ GtkWidget * vbox_cpmd (int s) { GtkWidget * vbox; GtkWidget * hbox; vbox = create_vbox (BSEP); hbox = create_hbox (0); if (s < 2 || s > 3) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(section_name(s), -1, 20, 0.0, 0.5), FALSE, FALSE, 20); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, (s < 2 ||s > 3) ? 5 : 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, section_box(s), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, qm_preview_box (0, s, (s < 2 ||s > 3) ? 0 : 65), FALSE, FALSE, 0); return vbox; } /*! \fn gchar * page_name (int p) \brief get CPMD input creation assistant page name \param p the page id */ gchar * page_name (int p) { if (p > 0 && p <4) { if (p == 1) { return g_strdup_printf (_("The %s section - Calculation options"), cpmd_elements[1]); } else if (p == 2) { return g_strdup_printf (_("The %s section - Thermostat options"), cpmd_elements[1]); } else { return g_strdup_printf (_("The %s section - RESTART options"), cpmd_elements[1]); } } else if (p == 0) { return g_strdup_printf (_("The %s section"), cpmd_elements[p]); } else { return g_strdup_printf (_("The %s section"), cpmd_elements[p-2]); } } /*! \fn void add_cpmd_pages () \brief add pages to the CPMD input file creation assistant */ void add_cpmd_pages () { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page; for (i=0; i Finalize the creation of the CPMD input file now !")); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(_("\n \tNote: You can re-open this assitant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, conclu); gtk_assistant_set_page_title (assist, conclu, _("Create the input file now !")); gtk_assistant_set_page_type (assist, conclu, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, conclu, TRUE); gtk_assistant_update_buttons_state (assist); } /*! \fn void proj_unselect_all_atoms () \brief unselect all atom(s) in the target project of the assistant */ void proj_unselect_all_atoms () { int i, j; for (i=0; i natomes; i++) { for (j=0; j<2; j++) { qm_proj -> atoms[0][i].pick[j] = FALSE; qm_proj -> atoms[0][i].label[j] = FALSE; } } qm_view -> picked = 0; init_default_shaders (qm_view); } /*! \fn G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) \brief cancel QM / QM-MM input file creation \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) { destroy_this_widget (GTK_WIDGET(assistant)); proj_unselect_all_atoms (); // restore selection if any from calc.c restore_ogl_selection (qm_view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) \brief QM / QM-MM input file creation cancel event GTK4 \param assistant the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) \brief QM / QM-MM input file creation cancel event GTK3 \param assistant the GtkWidget sending the signal \param event \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) #endif { on_qm_assistant_cancel (((GtkAssistant *)assistant), data); return TRUE; } /*! \fn G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) \brief close QM / QM-MM input creation assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) { // Apply changes ... then close window destroy_this_widget (GTK_WIDGET(assistant)); // Saving // Cleaning proj_unselect_all_atoms (); // restore selection if any from calc.c restore_ogl_selection (qm_view); } /*! \fn G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) \brief QM / QM-MM assistant go to the next page \param current_page the current assistant page \param data the associated data pointer */ G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) { int i = GPOINTER_TO_INT(data); if (i == 0) { switch (current_page) { case MAXDATAQM+4: return -1; break; case 2: if (tmp_cpmd -> calc_type == 2 || tmp_cpmd -> calc_type == 3) { return 3; } else { return 4; } break; case 5: if ((int)tmp_cpmd -> default_opts[2]) { return current_page+1; } else if (tmp_cpmd -> calc_type == 6) { return current_page+2; } else { return current_page+3; } break; case 6: if (tmp_cpmd -> calc_type == 6) { return current_page+1; } else { return current_page+2; } default: return current_page+1; break; } } else { switch (current_page) { case MAXDATAQM+4: return -1; break; default: return current_page+1; break; } } } /*! \fn G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) \brief prepare QM / QM-MM assistant pages before display \param assistant the GtkAssistant sending the signal \param page the current page \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) { int i = gtk_assistant_get_current_page (assistant); // field_unselect_all (); switch (i) { case 0: hide_the_widgets (qm_preview_but); break; default: show_the_widgets (qm_preview_but); break; } } /*! \fn gboolean go_for_it (int i, int j, gboolean print[2]) \brief add tab to the QM / QM-MM file preview window notebook \param i tab id \param j last tab id \param print basis and pseudopotential printing status */ gboolean go_for_it (int i, int j, gboolean print[2]) { if (tmp_cp2k -> input_type && i<=j-3) return TRUE; if (i==0) return TRUE; if (i==j-2 && print[0]) return TRUE; if (i==j-1 && print[1]) return TRUE; return FALSE; } /*! \fn G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) \brief show QM / QM-MM input file preview \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) { int i, j, k, l, c; c = GPOINTER_TO_INT(data); gchar * ptitle[5] = {i18n("CP2K input file"), "forces.inc", "system.inc", "motion.inc", "coord.inc"}; gchar * wtite[2] = {i18n(" input file preview"), i18n(" input files preview")}; gchar * str; GtkWidget * scrollsets; GtkWidget * aview; GtkWidget * notebook; k = 0; gboolean print[2]; if (c) { j = 6; notebook = gtk_notebook_new (); if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) k = 1; str = g_strdup_printf ("%s %s", co_type[c], _(wtite[tmp_cp2k -> input_type])); print[0] = print[1] = FALSE; for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][0] != -1) { print[0] = TRUE; break; } } for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][1] != -1) { print[1] = TRUE; break; } } } else { j = 1; str = g_strdup_printf ("%s %s", co_type[c], _(wtite[0])); } GtkWidget * preview = dialogmodal (str, GTK_WINDOW (qm_assistant)); g_free (str); if (c) { add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area(preview), notebook, FALSE, FALSE, 0); } else { scrollsets = create_scroll (dialog_get_content_area(preview), 700, 350, GTK_SHADOW_ETCHED_IN); } for (i=0; i j+k-3) { str = g_strdup_printf ("%s", tmp_cp2k -> files[i-(j+k-3)]); } else { l = (i == j-3+k) ? 4 : i; str = g_strdup_printf ("%s", (l) ? ptitle[l] : _(ptitle[l])); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scrollsets, gtk_label_new (str)); g_free (str); } else { add_container_child (CONTAINER_SCR, scrollsets, aview); } } if (c) { if (tmp_cp2k -> input_type || i != j+k-3) { print_cp2k ((i >= j+k-3) ? i+1-k: i, gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); } } else { print_all_sections (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); } } run_this_gtk_dialog (preview, G_CALLBACK(run_destroy_dialog), NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i, j, k, l; int c = GPOINTER_TO_INT(data); gboolean result = FALSE; gboolean done = FALSE; GtkTextBuffer * buffer = NULL; GtkTextIter bStart; GtkTextIter bEnd; GError * err = NULL; gchar * text; gchar * filename; gchar * direname; gchar * cp2sp[2] = {"basis.inc", "pseudo.inc"}; gchar * cp2file[4] = {"forces.inc", "system.inc", "motion.inc", "coord.inc"}; switch (response_id) { case GTK_RESPONSE_ACCEPT: filename = file_chooser_get_file_name (chooser); direname = file_chooser_get_current_folder (chooser); if (filename != NULL) { done = TRUE; if (! c || (c && ! tmp_cp2k -> input_type)) buffer = add_buffer (NULL, NULL, NULL); switch (c) { case 0: print_all_sections (buffer); break; case 1: j = 6; k = 0; if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) k = 1; for (i=0; i input_type) { l = (i >= j+k-3) ? i+1-k: i; if (tmp_cp2k -> input_type) { buffer = add_buffer (NULL, NULL, NULL); if (i > 0) filename = g_strdup_printf ("%s/%s", direname, cp2file[l-1]); print_cp2k (l, buffer); gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); gtk_text_buffer_set_modified (buffer, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); g_object_unref (buffer); if (! result && err) { show_error (g_strdup_printf (_("Error while saving input file: %s\n Error: %s"), filename, err -> message), 0, qm_assistant); g_error_free (err); } g_free (filename); } else if (l != 5 && l != 6) { print_cp2k (l, buffer); } } } break; } if (! c || (c && ! tmp_cp2k -> input_type)) { gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); gtk_text_buffer_set_modified (buffer, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); g_object_unref (buffer); if (! result && err) { /* error saving file, show message to user */ show_error (g_strdup_printf (_("Error while saving input file: %s\n Error: %s"), filename, err -> message), 0, qm_assistant); g_error_free (err); } g_free (filename); } if (c) { // save pseudo and basis auto for (i=0; i<2; i++) { buffer = add_buffer (NULL, NULL, NULL); filename = g_strdup_printf ("%s/%s", direname, cp2sp[i]); print_cp2k (i+5, buffer); gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); if (! result && err) { /* error saving file, show message to user */ show_error (g_strdup_printf (_("Error while saving file %s: %s"), cp2sp[i], err -> message), 0, qm_assistant); g_error_free (err); break; } g_free (filename); g_object_unref (buffer); } } } break; default: done = TRUE; break; } if (done) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } if (c && result) { if (tmp_cp2k -> input_type) { if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { show_info (_("The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file."), 0, qm_assistant); } else { show_info (_("The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file."), 0, qm_assistant); } } else { show_info (_("The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file."), 0, qm_assistant); } } } /*! \fn G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - creating the dialog \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) { int c = GPOINTER_TO_INT(data); gchar * text; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileFilter * filter1, * filter2; gchar * qm_type[2] = {"CPMD", "CP2K"}; const gchar * qm_name[2] = {i18n("CPMD input file (*.in)"), i18n("CP2K input file (*.inp)")}; const gchar * qm_ext[2] = {".in", ".inp"}; text = g_strdup_printf (_("Saving %s input file(s)"), qm_type[c]); info = create_file_chooser (text, GTK_WINDOW(assistant), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); g_free (text); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _(qm_name[c])); text = g_strdup_printf ("*%s", qm_ext[c]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), text); g_free (text); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); text = g_strdup_printf ("%s%s", prepare_for_title(qm_proj -> name), qm_ext[c]); file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, text); g_free (text); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_saving_qm), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_saving_qm), data); #endif } /*! \fn void create_qm_input_file (int c, int p, int s) \brief initialize an ab-initio MD input file creation assistant \param c 0 = CPMD, 1 = CP2K \param p the target project \param s 0 = ab-initio, 1 = QM-MM */ void create_qm_input_file (int c, int p, int s) { gchar * qm_type[2] = {i18n("first-principles"), "QM-MM"}; qm_assistant = gtk_assistant_new (); gtk_widget_set_size_request (qm_assistant, 800, 600); int i, j; //field_color = TRUE; field_object = -1; //selected_aspec = -1; opengl_project_changed (p); qm_proj = get_project_by_id(p); for (i=0; i cpmd_input[s] == NULL) { qm_proj -> cpmd_input[s] = g_malloc0(sizeof*qm_proj -> cpmd_input[s]); qm_proj -> cpmd_input[s] -> calc_type = 0; qm_proj -> cpmd_input[s] -> thermostats = 0; qm_proj -> cpmd_input[s] -> ions_thermostat = NULL; qm_proj -> cpmd_input[s] -> elec_thermostat = NULL; qm_proj -> cpmd_input[s] -> dummies = 0; qm_proj -> cpmd_input[s] -> dummy = NULL; qm_proj -> cpmd_input[s] -> fixat = 0; qm_proj -> cpmd_input[s] -> fixlist = NULL; qm_proj -> cpmd_input[s] -> fixcoord = NULL; qm_proj -> cpmd_input[s] -> restart[0] = 0; qm_proj -> cpmd_input[s] -> restart[1] = 100; qm_proj -> cpmd_input[s] -> restart[2] = 2; qm_proj -> cpmd_input[s] -> restart[3] = 0; qm_proj -> cpmd_input[s] -> restart[4] = 1; for (i=5; i<9; i++) qm_proj -> cpmd_input[s] -> restart[i] = 0; qm_proj -> cpmd_input[s] -> restart[9] = 0; for (i=0; i<17; i++) qm_proj -> cpmd_input[s] -> default_opts[i] = default_cpmd_options[i]; for (i=0; i<24; i++) qm_proj -> cpmd_input[s] -> calc_opts[i] = default_calc_options[i]; qm_proj -> cpmd_input[s] -> pp = allocdint (qm_proj -> nspec, 2); for (i=0; i nspec; i++) qm_proj -> cpmd_input[s] -> pp[i][0] = qm_proj -> cpmd_input[s] -> pp[i][1] = 1; qm_proj -> cpmd_input[s] -> info = g_strdup_printf (_(" Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d"), prepare_for_title(qm_proj -> name), qm_proj -> natomes, qm_proj -> nspec); } tmp_cpmd = qm_proj -> cpmd_input[s]; } else { is_cpmd = FALSE; if (qm_proj -> cp2k_input[s] == NULL) { qm_proj -> cp2k_input[s] = g_malloc0(sizeof*qm_proj -> cp2k_input[s]); qm_proj -> cp2k_input[s] -> input_type = 0; for (i=0; i<2; i++) { qm_proj -> cp2k_input[s] -> fixat[i] = 0; qm_proj -> cp2k_input[s] -> fixlist[i] = NULL; qm_proj -> cp2k_input[s] -> fixcoord[i] = NULL; } qm_proj -> cp2k_input[s] -> thermostats = 0; qm_proj -> cp2k_input[s] -> ions_thermostat = NULL; for (i=0; i<5; i++) qm_proj -> cp2k_input[s] -> files[i] = NULL; for (i=0; i<41; i++) qm_proj -> cp2k_input[s] -> opts[i] = default_cp2k_options[i]; qm_proj -> cp2k_input[s] -> opts[CP2SYM] = find_cp2k_sym (); for (i=0; i<3; i++) { for (j=0;j<4;j++) qm_proj -> cp2k_input[s] -> extra_opts[i][j] = default_cp2k_extra[i][j]; if (i == 0) qm_proj -> cp2k_input[s] -> extra_opts[i][2] = default_vdw_cut[0]; } qm_proj -> cp2k_input[s] -> spec_data = allocdint (qm_proj -> nspec, 2); qm_proj -> cp2k_input[s] -> spec_files = g_malloc0(qm_proj -> nspec*sizeof*qm_proj -> cp2k_input[s] -> spec_files); for (i=0; i nspec; i++) { qm_proj -> cp2k_input[s] -> spec_data[i][0] = cp2k_is_basis_in_database (i); qm_proj -> cp2k_input[s] -> spec_data[i][1] = cp2k_is_pseudo_in_database (i); qm_proj -> cp2k_input[s] -> spec_files[i] = g_malloc0(2*sizeof*qm_proj -> cp2k_input[s] -> spec_files[i]); qm_proj -> cp2k_input[s] -> spec_files[i][0] = NULL; qm_proj -> cp2k_input[s] -> spec_files[i][1] = NULL; } gchar * defname[2]={"basis.inc", "pseudo.inc"}; for (j=0;j<2;j++) { for (i=0; i nspec; i++) { if (qm_proj -> cp2k_input[s] -> spec_data[i][j] > -1) { qm_proj -> cp2k_input[s] -> files[1+j] = g_strdup_printf ("%s", defname[j]); break; } } } qm_proj -> cp2k_input[s] -> info = g_strdup_printf (_(" Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d"), prepare_for_title(qm_proj -> name), qm_proj -> natomes, qm_proj -> nspec); } tmp_cp2k = qm_proj -> cp2k_input[s]; } qm_coord = qm_proj -> coord; qm_view = qm_proj -> modelgl; gtk_window_set_resizable (GTK_WINDOW (qm_assistant), FALSE); gtk_window_set_modal (GTK_WINDOW (qm_assistant), TRUE); gchar * str = g_strdup_printf (_("Basic %s - %s - calculation assistant"), co_type[c], (s) ? qm_type[s] : _(qm_type[s])); gtk_window_set_title (GTK_WINDOW(qm_assistant), str); g_free (str); GtkWidget * intro = create_vbox (BSEP); gchar * info = g_strdup_printf (_("\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\nPlease note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n\n" "In any case if you intent to use the %s code please refer to the user manual."), (s) ? qm_type[s] : _(qm_type[s]), co_type[c], qm_proj -> name, co_type[c], co_type[c], co_type[c]); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 50); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (GTK_ASSISTANT (qm_assistant), intro); str = g_strdup_printf ("%s calculation set-up", co_type[c]); gtk_assistant_set_page_title (GTK_ASSISTANT (qm_assistant), intro, str); g_free (str); gtk_assistant_set_page_type (GTK_ASSISTANT (qm_assistant), intro, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (qm_assistant), intro, qm_assist_init); if (c == 0) { add_cpmd_pages (); } else { add_cp2k_pages (); } gtk_assistant_set_forward_page_func (GTK_ASSISTANT (qm_assistant), on_qm_assistant_go_forward, GINT_TO_POINTER(c), NULL); qm_preview_but = create_button (_("Preview"), IMG_STOCK, EDITF, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_qm_file_preview), GINT_TO_POINTER(c)); gtk_assistant_add_action_widget (GTK_ASSISTANT (qm_assistant), qm_preview_but); g_signal_connect (G_OBJECT (qm_assistant), "prepare", G_CALLBACK(on_qm_assistant_prepare), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "cancel", G_CALLBACK(on_qm_assistant_cancel), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "close", G_CALLBACK(on_qm_assistant_close), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "apply", G_CALLBACK(on_qm_assistant_apply), GINT_TO_POINTER(c)); add_gtk_close_event (qm_assistant, G_CALLBACK(on_qm_assistant_cancel_event), GINT_TO_POINTER(c)); gtk_assistant_set_page_complete (GTK_ASSISTANT (qm_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (qm_assistant), 0), TRUE); show_the_widgets (qm_preview_but); show_the_widgets (qm_assistant); if (c == 0) { for (i=0; i calc_type]); if (tmp_cpmd -> calc_type != 2) hide_the_widgets (electron_box); } hide_the_widgets (qm_preview_but); } atomes_1.3.1/src/calc/cpmd/cpmd_print.c0000664000175000017500000005212215212624223017426 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_print.c * @short Functions to print the CPMD input file(s) * @author Sébastien Le Roux */ /* * This file: 'cpmd_print.c' * * Contains: * - The functions to print the CPMD input file(s) * * List of functions: void print_info_section (GtkTextBuffer * buf); void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf); void print_thermostat (GtkTextBuffer * buf); void print_restart (GtkTextBuffer * buf); void print_cpmd_section (GtkTextBuffer * buf); void print_dft_section (GtkTextBuffer * buf); void print_vdw_section (GtkTextBuffer * buf); void print_prop_section (GtkTextBuffer * buf); void print_system_section (GtkTextBuffer * buf); void print_atoms_section (GtkTextBuffer * buf); void print_the_section (int s, int p, GtkTextBuffer * buffer); */ #include "global.h" #include "interface.h" #include "calc.h" #include "cpmd.h" extern dummy_atom * get_active_dummy (int id); int cpmd_sym[NSYM] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 14}; /*! \fn void print_info_section (GtkTextBuffer * buf) \brief print the CPMD input file INFO section \param buf the GtkTextBuffer to print into */ void print_info_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (_(" This input file was prepared using %s\n\n"), PACKAGE); print_info (str, NULL, buf); g_free (str); if (tmp_cpmd -> info != NULL) print_info (tmp_cpmd -> info, NULL, buf); print_info ("\n\n", NULL, buf); } /*! \fn void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf) \brief print CPMD thermostat parameters \param thermo the target thermostat \param id 0 = ionic, 1 = fictitious electronic \param buf the GtkTextBuffer to print into */ void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf) { int i, j, k, l, m; gchar * temp[2] = {"TEMPERATURE", "TEMPERATURE ELECTRONS"}; gchar * tobj[2] = {"IONS", "ELECTRONS"}; gchar * tkey[2] = {"TEMPCONTROL", "NOSE"}; gchar * str = NULL; if (thermo -> type == 0) { str = g_strdup_printf ("\n\n %s\n", temp[id]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %f", thermo -> params[0]); print_info (str, NULL, buf); g_free (str); } else { if (thermo -> sys == GLOBAL) { str = g_strdup_printf ("\n\n %s %s\n", tkey[thermo -> type-1], tobj[id]); } else if (thermo -> sys == LOCAL) { str = g_strdup_printf ("\n\n %s %s %s\n", tkey[thermo -> type-1], tobj[id], "LOCAL"); } print_info (str, NULL, buf); g_free (str); if (thermo -> sys == LOCAL) { str = g_strdup_printf (" %d\n", tmp_cpmd -> thermostats); print_info (str, NULL, buf); g_free (str); for (i=0; i thermostats; i++) { for (j=0; j<2; j++) { str = g_strdup_printf (" %11.5lf", thermo -> params[j]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); if (thermo-> next != NULL) thermo = thermo-> next; } str = g_strdup_printf (" %d\n", tmp_cpmd -> thermostats); print_info (str, NULL, buf); g_free (str); thermo = tmp_cpmd -> ions_thermostat; for (i=0; i thermostats; i++) { l = 0; str = g_strdup_printf (" %d", i+1); print_info (str, NULL, buf); g_free (str); for (j=0; j < qm_proj-> nspec; j++) { for (k=0; k < qm_proj-> natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l++; for (m=0; m < thermo -> natoms; m++) { if (thermo -> list[m] == k) { str = g_strdup_printf (" %d", l); print_info (str, NULL, buf); g_free (str); } } } } } if (i < tmp_cpmd -> thermostats-1) print_info ("\n", NULL, buf); if (thermo-> next != NULL) thermo = thermo-> next; } } else { for (j=0; j<2; j++) { str = g_strdup_printf (" %11.5lf", thermo -> params[j]); print_info (str, NULL, buf); g_free (str); } } } } /*! \fn void print_thermostat (GtkTextBuffer * buf) \brief print the CPMD input file THERMOSTAT section \param buf the GtkTextBuffer to print into */ void print_thermostat (GtkTextBuffer * buf) { gchar * str; int id = (tmp_cpmd -> calc_type == 2) ? BAROC : BAROB; if ((int)tmp_cpmd -> calc_opts[id]) { str = g_strdup_printf ("\n\n %s", calc_box_keys[tmp_cpmd -> calc_type][(int)tmp_cpmd -> calc_opts[id]]); print_info (str, NULL, buf); g_free (str); } id = (tmp_cpmd -> calc_type == 2) ? ANNIC : ANNIB; if ((int)tmp_cpmd -> calc_opts[id]) { str = g_strdup_printf ("\n\n ANNEALING IONS\n %f", tmp_cpmd -> calc_opts[id+1]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type == 2) { if ((int)tmp_cpmd -> calc_opts[ANNEC]) { str = g_strdup_printf ("\n\n ANNEALING ELECTRONS\n %f", tmp_cpmd -> calc_opts[AFAEC]); print_info (str, NULL, buf); g_free (str); } } print_this_thermostat (tmp_cpmd -> ions_thermostat, 0, buf); if (tmp_cpmd -> calc_type == 2) { print_this_thermostat (tmp_cpmd -> elec_thermostat, 1, buf); } } /*! \fn void print_restart (GtkTextBuffer * buf) \brief print the CPMD input file RESTART section \param buf the GtkTextBuffer to print into */ void print_restart (GtkTextBuffer * buf) { gchar * str; gchar * rest_keys[2] = {"RANDOM", "ATOMS"}; if (tmp_cpmd -> restart[0] < 2) { str = g_strdup_printf ("\n\n INITIALIZE WAVEFUNCTION %s", rest_keys[tmp_cpmd -> restart[0]]); print_info (str, NULL, buf); g_free (str); } else { print_info ("\n\n RESTART WAVEFUNCTION LATEST", NULL, buf); print_info ("\n RESTART COORDINATES LATEST", NULL, buf); if (tmp_cpmd -> calc_type > 1 && tmp_cpmd -> calc_type < 4) { print_info ("\n RESTART ACCUMULATORS LATEST", NULL, buf); print_info ("\n RESTART VELOCITIES LATEST", NULL, buf); if (tmp_cpmd -> ions_thermostat -> type > 0) print_info ("\n RESTART NOSEP LATEST", NULL, buf); if (tmp_cpmd -> calc_type == 2 && tmp_cpmd -> elec_thermostat -> type == 1) print_info ("\n RESTART NOSEE LATEST", NULL, buf); } } } /*! \fn void print_cpmd_section (GtkTextBuffer * buf) \brief print CPMD input file CPMD section \param buf the GtkTextBuffer to print into */ void print_cpmd_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" %s", calc_kw[tmp_cpmd -> calc_type]); print_info (str, NULL, buf); g_free (str); int i; switch (tmp_cpmd -> calc_type) { case 0: str = g_strdup_printf ("\n\n CONVERGENCE ORBITAL\n %E\n\n", tmp_cpmd -> calc_opts[CONVO]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %s\n\n", calc_box_keys[0][(int)tmp_cpmd -> calc_opts[OPTIO]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" MAXITER\n %d", (int)tmp_cpmd -> calc_opts[STEPO]); print_info (str, NULL, buf); g_free (str); break; case 1: str = g_strdup_printf ("\n\n CONVERGENCE GEOMETRY\n %E\n\n", tmp_cpmd -> calc_opts[CONVG]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %s\n\n", calc_box_keys[1][(int)tmp_cpmd -> calc_opts[OPTIG]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPG]); print_info (str, NULL, buf); g_free (str); break; case 2: str = g_strdup_printf ("\n\n MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPC]); print_info (str, NULL, buf); g_free (str); break; case 3: str = g_strdup_printf ("\n\n MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPB]); print_info (str, NULL, buf); g_free (str); break; case 4: str = g_strdup_printf ("\n %d", (int)tmp_cpmd -> calc_opts[KSUNO]); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> calc_opts[RHOUT]) { str = g_strdup_printf ("\n RHOOUT BANDS\n %d\n ", (int)tmp_cpmd -> calc_opts[NBAND]); print_info (str, NULL, buf); g_free (str); } break; case 5: str = g_strdup_printf (" %s", calc_box_keys[4][(int)tmp_cpmd -> calc_opts[VIBRA]]); print_info (str, NULL, buf); g_free (str); break; case 6: break; } print_restart (buf); if (tmp_cpmd -> calc_type < 4) { if (tmp_cpmd -> calc_type == 0) { i = TSTPO; } else if (tmp_cpmd -> calc_type == 1) { i = TSTPG; } else if (tmp_cpmd -> calc_type == 2) { i = TSTPC; } else { i = TSTPB; } str = g_strdup_printf ("\n\n TIMESTEP\n %f", tmp_cpmd -> calc_opts[i]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type != 3) { str = g_strdup_printf ("\n\n EMASS\n %f", tmp_cpmd -> default_opts[DEFEM]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type == 2 || tmp_cpmd -> calc_type == 3) print_thermostat (buf); if (tmp_cpmd -> default_opts[DEFLS] == 1.0) { print_info ("\n\n LOCAL SPIN DENSITY", NULL, buf); } if (tmp_cpmd -> default_opts[DEFVD] == 1.0) { print_info ("\n\n VDW CORRECTION", NULL, buf); } gchar * sv_key[2] = {"STORE", "RESTFILE"}; for (i=0; i<2; i++) { str = g_strdup_printf ("\n\n %s\n %d", sv_key[i], tmp_cpmd -> restart[i+1]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type != 0 && tmp_cpmd -> restart[3]) { print_info ("\n\n TRAJECTORY SAMPLE", NULL, buf); if (tmp_cpmd -> restart[4]) print_info (" XYZ", NULL, buf); if (tmp_cpmd -> restart[5]) print_info (" FORCES", NULL, buf); str = g_strdup_printf ("\n %d", tmp_cpmd -> restart[3]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> restart[6]) { print_info ("\n\n PRINT", NULL, buf); if (tmp_cpmd -> restart[7]) print_info (" INFO", NULL, buf); //if (tmp_cpmd -> restart[8]) print_info (" EIGENVALUES", NULL, buf); if (tmp_cpmd -> restart[8]) print_info (" COORDINATES", NULL, buf); if (tmp_cpmd -> restart[9]) print_info (" FORCES", NULL, buf); str = g_strdup_printf ("\n %d", tmp_cpmd -> restart[6]); print_info (str, NULL, buf); g_free (str); } print_info ("\n\n", NULL, buf); } /*! \fn void print_dft_section (GtkTextBuffer * buf) \brief print the CPMD input file DFT section \param buf the GtkTextBuffer to print into */ void print_dft_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" FUNCTIONAL %s", default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf ("\n\n GC-CUTOFF\n %E\n\n", tmp_cpmd -> default_opts[DEFGC]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_vdw_section (GtkTextBuffer * buf) \brief print the CPMD input file VDW section \param buf the GtkTextBuffer to print into */ void print_vdw_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" EMPIRICAL CORRECTION\n" " VDW PARAMETERS\n" " ALL DFT-D2\n" " S6GRIMME\n %s\n" " END EMPIRICAL CORRECTION\n\n", default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_prop_section (GtkTextBuffer * buf) \brief print the CPMD input file PROPERTIES section \param buf the GtkTextBuffer to print into */ void print_prop_section (GtkTextBuffer * buf) { } /*! \fn void print_system_section (GtkTextBuffer * buf) \brief print the CPMD input file SYSTEM section \param buf the GtkTextBuffer to print into */ void print_system_section (GtkTextBuffer * buf) { double u, v; gchar * str; u = 0.52917721; if ((int)tmp_cpmd -> default_opts[DEFAN]) { u = 1.0; print_info (" ANGSTROM\n\n", NULL, buf); } if (! (int)tmp_cpmd -> default_opts[DEFVE]) { str = g_strdup_printf (" SYMMETRY\n %d\n\n", cpmd_sym[(int)tmp_cpmd -> default_opts[DEFSY]]); print_info (str, NULL, buf); g_free (str); } print_info (" CELL", NULL, buf); if ((int)tmp_cpmd -> default_opts[DEFVE]) { print_info (" VECTORS", NULL, buf); if (((int)tmp_cpmd -> default_opts[DEFAB])) { print_info (" ABSOLUTE", NULL, buf); } } else { if (((int)tmp_cpmd -> default_opts[DEFAB])) { print_info (" ABSOLUTE", NULL, buf); } if (((int)tmp_cpmd -> default_opts[DEFDG])) { print_info (" DEGREE", NULL, buf); } } int i, j; if ((int)tmp_cpmd -> default_opts[DEFVE]) { for (i=0; i<3; i++) { print_info ("\n ", NULL, buf); for (j=0; j<3; j++) { v = qm_proj -> cell.box[0].vect[i][j] / u; str = g_strdup_printf (" %12.6lf", v); print_info (str, NULL, buf); g_free (str); } } } else { print_info ("\n ", NULL, buf); for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (i == 0) { if ((int)tmp_cpmd -> default_opts[DEFAB]) { v = qm_proj -> cell.box[0].param[i][j] / u; } else { if (j==0) { v = qm_proj -> cell.box[0].param[i][j] / u; } else if (qm_proj -> cell.box[0].param[i][0] != 0.0) { v = qm_proj -> cell.box[0].param[i][j] / qm_proj -> cell.box[0].param[i][0]; } else { v = -1.0; } } } else { if ((int)tmp_cpmd -> default_opts[DEFDG]) { v = qm_proj -> cell.box[0].param[i][j]; } else { v = cos (qm_proj -> cell.box[0].param[i][j]*pi/180.0); } } str = g_strdup_printf (" %12.6lf", v); print_info (str, NULL, buf); g_free (str); } } } print_info ("\n\n", NULL, buf); str = g_strdup_printf (" CUTOFF\n %15.10lf\n\n", tmp_cpmd -> default_opts[DEFCU]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_atoms_section (GtkTextBuffer * buf) \brief print the CPMD input file ATOMS section \param buf the GtkTextBuffer to print into */ void print_atoms_section (GtkTextBuffer * buf) { int i, j, k, l, m; gchar * str; double u = ((int)tmp_cpmd -> default_opts[DEFAN]) ? 1.0 : 0.52917721; if ((int)tmp_cpmd -> default_opts[DEFCO] && ((int)tmp_cpmd -> default_opts[DEFFI] == 0 || ((int)tmp_cpmd -> default_opts[DEFFI] > 0 && tmp_cpmd -> fixat > 0))) { str = g_strdup_printf (" CONSTRAINTS\n FIX %s\n", default_keywords[5][(int)tmp_cpmd -> default_opts[DEFFI]]); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> default_opts[DEFFI] > 0) { str = g_strdup_printf (" %d\n ", tmp_cpmd -> fixat); print_info (str, NULL, buf); g_free (str); k = m = 0; for (i=0; i nspec; i++) { for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; for (l=0; lfixat; l++) { if (qm_proj -> atoms[0][j].id == tmp_cpmd -> fixlist[l]) { m ++; str = g_strdup_printf (" %d", k); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> default_opts[DEFFI] == 2) { str = g_strdup_printf (" %d %d %d\n", tmp_cpmd -> fixcoord[l][0], tmp_cpmd -> fixcoord[l][1], tmp_cpmd -> fixcoord[l][2]); print_info (str, NULL, buf); g_free (str); if (m < tmp_cpmd->fixat) { print_info (" ", NULL, buf); } } } } } } } if ((int)tmp_cpmd -> default_opts[DEFFI] != 2) print_info ("\n", NULL, buf); } print_info (" END CONSTRAINTS\n\n", NULL, buf); } if ((int)tmp_cpmd -> default_opts[DEFDU] && tmp_cpmd -> dummies > 0) { gchar * dtype[3]={" TYPE1", " TYPE2", " TYPE3"}; str = g_strdup_printf (" DUMMY ATOMS\n %d\n", tmp_cpmd -> dummies); print_info (str, NULL, buf); g_free (str); dummy_atom * dumm; for (i=0; i dummies; i++) { dumm = get_active_dummy (i); print_info (dtype[dumm -> type], NULL, buf); if (dumm -> type == 0) { str = g_strdup_printf (" %12.6lf %12.6lf %12.6lf\n", dumm -> xyz[0], dumm -> xyz[1], dumm -> xyz[2]); } else if (dumm -> natoms > 0) { if ( dumm -> natoms < qm_proj -> natomes) { l = 0; str = g_strdup_printf (" %d", dumm -> natoms); for (j=0; j nspec; j++) { for (k=0; k natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l ++; for (m=0; m natoms; m++) { if (qm_proj -> atoms[0][k].id == dumm -> list[m]) { str = g_strdup_printf ("%s %d", str, l); } } } } } } else if (dumm -> natoms == qm_proj -> natomes) { str = g_strdup_printf (" %d", -1); } str = g_strdup_printf ("%s\n", str); } else { str = g_strdup_printf ("\n"); } print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } for (i=0; i nspec; i++) { str = g_strdup_printf ("*%s-%s.psp\n", exact_name(qm_proj -> chemistry -> label[i]), default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" LMAX=%s LOC=%s\n %d\n", default_keywords[7][(int)tmp_cpmd -> pp[i][0]], default_keywords[8][(int)tmp_cpmd -> pp[i][1]], qm_proj -> chemistry -> nsps[i]); print_info (str, NULL, buf); g_free (str); for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { str = g_strdup_printf (" %12.6lf %12.6lf %12.6lf\n", qm_proj -> atoms[0][j].x/u, qm_proj -> atoms[0][j].y/u, qm_proj -> atoms[0][j].z/u); print_info (str, NULL, buf); g_free (str); } } print_info ("\n", NULL, buf); } } /*! \fn void print_the_section (int s, int p, GtkTextBuffer * buffer) \brief print CPMD input section \param s the section id \param p 0 = section preview, 1 = complete input file \param buffer the GtkTextBuffer to print into */ void print_the_section (int s, int p, GtkTextBuffer * buffer) { int i; gchar * str; if (buffer != NULL) { if (s > 0 && s < 4) { i = 1; } else if (s == 0) { i = 0; } else { i = s - 2; } if (! p) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); gtk_text_buffer_delete (buffer, & bStart, & bEnd); } if (p && s > 0) print_info ("\n\n", NULL, buffer); str = g_strdup_printf ("&%s\n\n", cpmd_elements[i]); print_info (str, "bold", buffer); g_free (str); if (s == 0) { print_info_section (buffer); } else if (s < 4) { print_cpmd_section (buffer); } else { switch (s) { case 4: print_dft_section (buffer); break; case 5: print_vdw_section (buffer); break; case 6: print_prop_section (buffer); break; case 7: print_system_section (buffer); break; case 8: print_atoms_section (buffer); break; } } print_info ("&END", "bold", buffer); } } atomes_1.3.1/src/calc/cpmd/cpmd.h0000664000175000017500000000605115212624223016217 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd.h * @short Variable declarations for the creation of the CPMD input file * @author Sébastien Le Roux */ /* * This header file: 'cpmd.h' * * Contains: Variable declarations for the creation of the CPMD input file */ #define NCPMDCALC 7 #define NCACOMBO 5 #define NDFT 19 #define NSYM 11 #define NOPTPC 7 #define NSECOP 6 #define DEFEM 0 #define DEFLS 1 #define DEFVD 2 #define DEFDF 3 #define DEFGC 4 #define DEFAN 5 #define DEFVE 6 #define DEFSY 7 #define DEFAB 8 #define DEFDG 9 #define DEFCU 10 #define DEFCO 11 #define DEFFI 12 #define DEFDU 13 #define DEFSP 14 #define DEFLM 15 #define DEFLO 16 #define CONVO 0 #define OPTIO 1 #define STEPO 2 #define TSTPO 3 #define CONVG 4 #define OPTIG 5 #define STEPG 6 #ifndef CPMD_H_ #define CPMD_H_ #define TSTPG 7 #define STEPC 8 #define TSTPC 9 #define BAROC 10 #define ANNIC 11 #define AFAIC 12 #define ANNEC 13 #define AFAEC 14 #define STEPB 15 #define TSTPB 16 #define BAROB 17 #define ANNIB 18 #define AFAIB 19 #define KSUNO 20 #define RHOUT 21 #define NBAND 22 #define VIBRA 23 extern cpmd * tmp_cpmd; extern gboolean is_cpmd; extern gchar * cpmd_elements[MAXDATAQM]; extern gchar * cdescr[MAXDATAQM]; extern double default_cpmd_options[17]; extern gchar * default_opts[MAXDATAQM-1][NSECOP]; // 0 = None, 1 = Entry, 2 = Combo, 3 = yes/no extern int default_opts_type[MAXDATAQM-1][NSECOP]; // NDF is the max by far extern int defaut_num[9]; extern gchar * default_keywords[9][NDFT]; extern gchar * default_text[9][NDFT]; extern double default_calc_options[24]; extern gchar * calc_opts[NCPMDCALC][NOPTPC]; extern int default_type[NCPMDCALC][NOPTPC]; extern gchar * calc_kw[NCPMDCALC]; extern gchar * calc_ds[NCPMDCALC]; extern int calc_box_num[NCACOMBO]; extern gchar * calc_box_name[NCACOMBO][3]; extern gchar * calc_box_keys[NCACOMBO][3]; extern GtkWidget * sel_but[3]; extern GtkWidget * sel_img[3]; extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); /*! \enum therm_types */ enum therm_types { CONTROL = -1, /*!< -1 */ GLOBAL = 0, /*!< 0 */ LOCAL = 1, /*!< 1 */ MOLECULE = 2 /*!< 2 */ }; extern gchar * nosetype[3]; extern gchar * nosekey[2]; extern gchar * thermo_name[2][5]; extern int num_thermo[2]; extern int type_thermo[2]; extern gchar * param[2]; extern gchar * iunit[2]; extern gchar * eunit[2]; #endif atomes_1.3.1/src/calc/cpmd/cpmd_restart.c0000664000175000017500000002056615212624223017765 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_restart.c * @short Functions to configure the restart section for the CPMD input file creation assistant * @author Sébastien Le Roux */ /* * This file: 'cpmd_restart.c' * * Contains: * - The functions to configure the restart section for the CPMD input file creation assistant * * List of functions: G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data); GtkWidget * restart_box (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "calc.h" #include "cpmd.h" extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); /*! \fn G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) \brief CPMD input file update restart parameter value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); j = (int)v; if (j != tmp_cpmd -> restart[i]) { tmp_cpmd -> restart[i] = j; } update_entry_int (res, tmp_cpmd -> restart[i]); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } GtkWidget * sace[2]; GtkWidget * trap_box[2]; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) \brief CPMD input file restart option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) \brief CPMD input file restart option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_cpmd -> restart[i] = (j) ? 1 : 0; if (i == 3 || i == 6) { if (tmp_cpmd -> restart[i]) tmp_cpmd -> restart[i] = 10; update_entry_int (GTK_ENTRY(sace[i/6]), (tmp_cpmd -> restart[i]) ? TRUE : FALSE); widget_set_sensitive (trap_box[i/6], j); } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) \brief CPMD input file change restart type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) { tmp_cpmd -> restart[0] = combo_get_active ((GtkWidget *)box); int i; for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * restart_box () \brief prepare the CPMD input preparation assistant restart widgets */ GtkWidget * restart_box () { int i; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; // Thermostat type ions gtk_widget_set_size_request (vbox, 525, 350); // Initialization: Random / Atom / Restart hbox = cpmd_box (vbox, _("Initialization for the Wavefunction:"), 20, 5, 230); GtkWidget * box = create_combo (); combo_text_append (box, _("Random")); combo_text_append (box, _("Atomic Pseudo Wavefunctions")); combo_text_append (box, _("Use a RESTART.* File")); combo_set_active (box, tmp_cpmd -> restart[0]); g_signal_connect (G_OBJECT (box), "changed", G_CALLBACK(changed_restart_box), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, box, FALSE, FALSE, 5); // Save restart every hbox = cpmd_box (vbox, _("Save the information required for a restart every:"), 5, 5, 340); GtkWidget * widg = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(widg), tmp_cpmd -> restart[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("steps")), FALSE, FALSE, 10); // Num of restart: hbox = cpmd_box (vbox, _("Number of restart file(s): "), 0, 5, 340); widg = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(2)); update_entry_int (GTK_ENTRY(widg), tmp_cpmd -> restart[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); // Trajectory: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Create a trajectory"), -1, -1, tmp_cpmd -> restart[3], G_CALLBACK(update_restart_check), GINT_TO_POINTER(3)), FALSE, FALSE, 20); trap_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox,trap_box[0], FALSE, FALSE, 0); hbox = cpmd_box (trap_box[0], _("Save the atomic coordinates every: "), 0, 25, 300); sace[0] = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(3)); update_entry_int (GTK_ENTRY(sace[0]), tmp_cpmd -> restart[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sace[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("steps")), FALSE, FALSE, 10); hbox = cpmd_box (trap_box[0], _("Write XYZ format"), 0, 25, 300); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(NULL, -1, -1, tmp_cpmd -> restart[4], G_CALLBACK(update_restart_check), GINT_TO_POINTER(4)), FALSE, FALSE, 0); hbox = cpmd_box (trap_box[0], _("Write atomic forces"), 0, 25, 300); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(NULL, -1, -1, tmp_cpmd -> restart[5], G_CALLBACK(update_restart_check), GINT_TO_POINTER(5)), FALSE, FALSE, 0); widget_set_sensitive (trap_box[0], tmp_cpmd -> restart[3]); // Print information add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Print extra data in the global output file"), -1, -1, tmp_cpmd -> restart[6], G_CALLBACK(update_restart_check), GINT_TO_POINTER(6)), FALSE, FALSE, 20); trap_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, trap_box[1], FALSE, FALSE, 0); hbox = cpmd_box (trap_box[1], _("Save the extra information every: "), 0, 25, 300); sace[1] = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(6)); update_entry_int (GTK_ENTRY(sace[1]), tmp_cpmd -> restart[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sace[1], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("steps")), FALSE, FALSE, 10); hbox = cpmd_box (trap_box[1], _("Select the information to print:"), 5, 25, 300); widget_set_sensitive (trap_box[1], tmp_cpmd -> restart[6]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, trap_box[1], hbox, FALSE, FALSE, 0); gchar * print_str[3]={i18n("Information"), i18n("Coordinates"), i18n("Forces")}; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(print_str[i]), -1, -1, tmp_cpmd -> restart[i+7], G_CALLBACK(update_restart_check), GINT_TO_POINTER(i+7)), FALSE, FALSE, 5); } return vbox; } atomes_1.3.1/src/calc/cpmd/cpmd_atoms.c0000664000175000017500000005133415212624223017421 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_atoms.c * @short Functions to handle dummy atom(s) for the CPMD input file * @author Sébastien Le Roux */ /* * This file: 'cpmd_atoms.c' * * Contains: * - The functions to handle dummy atom(s) for the CPMD input file * * List of functions: void create_dummy_param_box (int dummy_id); void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clean_dummy_widgets (); void remove_dummy (int num_to_remove); void add_dummy (int extra); G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data); G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data); GtkWidget * create_dummy_box (); dummy_atom * get_active_dummy (int id); dummy_atom * init_dummy (int type, int id); */ #include "global.h" #include "interface.h" #include "glview.h" #include "calc.h" #include "cpmd.h" extern void create_selection_combo (int id, int num, int type, GCallback handler); extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern void create_selection_button (GtkWidget * box, int num, int id, gpointer data); extern G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data); extern GtkWidget * combo_id[2]; extern GtkWidget * combo_id_box[2]; extern ColRGBA init_color (int id, int numid); extern int num_cpmd_objects; GtkWidget * dummy_box[2]; GtkWidget * the_dummy_box; GtkWidget * dummy_param_box; dummy_atom * dummy; int n_dummy; int * old_dummy; GtkCellRenderer * dummy_renderer[5]; GtkTreeViewColumn * dummy_col[5]; /*! \fn dummy_atom * get_active_dummy (int id) \brief get dummy atom by id \param id the target dummy atom id */ dummy_atom * get_active_dummy (int id) { dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> id != id) { if (dumm -> next != NULL) dumm = dumm -> next; } return dumm; } /*! \fn G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) \brief udate dummy atom coordinate entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); dummy -> xyz[i] = v; update_entry_double (res, dummy -> xyz[i]); print_the_section (8, 0, qmbuffer[8]); } void create_dummy_param_box (int dummy_id); /*! \fn G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) \brief change the dummy atom type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); if (i != dummy -> type) { dummy -> type = i; create_dummy_param_box (dummy -> id); } print_the_section (8, 0, qmbuffer[8]); } /*! \fn void create_dummy_param_box (int dummy_id) \brief crreate dummy atom parameter widgets \param dummy_id dummy atom id */ void create_dummy_param_box (int dummy_id) { gchar * str; dummy_box[1] = destroy_this_widget (dummy_box[1]); if (tmp_cpmd -> dummies > 0) { GtkWidget * hbox; GtkWidget * widg; str = g_strdup_printf (_("Configuration for dummy atom N°%d: "), dummy_id+1); dummy_box[1] = create_vbox (BSEP); cpmd_box (dummy_box[1], str, 0, 5, 280); g_free (str); int i; hbox = cpmd_box (dummy_box[1], _("Type of dummy atom:"), 0, 25, -1); GtkWidget * box = create_combo (); gchar * dtext[3] = {i18n("fixed in space:"), i18n("calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)"), i18n("calculated by\nthe center of mass of the coordinates of the selected atom(s)")}; for (i=0; i<3; i++) { str = g_strdup_printf ("%s %d", _("Type"), i+1); combo_text_append (box, str); g_free (str); } g_signal_connect (G_OBJECT (box), "changed", G_CALLBACK(dummy_type_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, box, FALSE, FALSE, 10); dummy = get_active_dummy (dummy_id); str = g_strdup_printf (_("The coordinates of the dummy atom are %s"), _(dtext[dummy -> type])); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, (dummy -> type == 0) ? 40 : 60, 0.0, 0.5), FALSE, FALSE, 25); g_free (str); if (dummy -> type > 0) { create_selection_button (dummy_box[1], dummy -> natoms, 2, GINT_TO_POINTER(-(dummy -> id + 2))); } else { gchar * lcoo[3]={"x", "y", "z"}; for (i=0; i<3; i++) { str = g_strdup_printf (_("Dummy %s coordinate: "), lcoo[i]); hbox = cpmd_box (dummy_box[1], str, 0, 25, -1); widg = create_entry (G_CALLBACK(update_dummy_coord), 100, 15, FALSE, GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); update_entry_double (GTK_ENTRY(widg), dummy -> xyz[i]); } } combo_set_active (box, dummy -> type); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_box[0], dummy_box[1], FALSE, FALSE, 0); show_the_widgets (dummy_box[1]); } } /*! \fn G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) \brief change the dummy atom id \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); create_dummy_param_box (i); } /*! \fn dummy_atom * init_dummy (int type, int id) \brief create dummy atom \param type the type of dummy atom to create \param id the id of the new dummy atom */ dummy_atom * init_dummy (int type, int id) { dummy_atom * dumm = g_malloc0(sizeof*dumm); dumm -> id = id; dumm -> type = type; dumm -> show = FALSE; dumm -> natoms = 0; dumm -> list = NULL; dumm -> xyz[0] = 0.0; dumm -> xyz[1] = 0.0; dumm -> xyz[2] = 0.0; return dumm; } /*! \fn G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select dummy atom toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { get_active_dummy (old_dummy[n_dummy-1]) -> show = FALSE; old_dummy[n_dummy-1] = -1; n_dummy --; gtk_tree_store_set (* model, & iter, 4, 0, -1); //toviz.c = 0; } else { n_dummy ++; gtk_tree_store_set (* model, & iter, 4, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & old_dummy[n_dummy-1], -1); old_dummy[n_dummy-1] --; get_active_dummy (old_dummy[n_dummy-1]) -> show = TRUE; //toviz.c = 1; } // Viz } /*! \fn void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CPMD dummy atom(s) tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; gtk_tree_model_get (mod, iter, 0, & i, -1); i = abs(i); set_renderer_color (get_active_dummy (i-1) -> show, renderer, init_color (i-1, num_cpmd_objects)); } /*! \fn void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CPMD dummy atom(s) tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if (j > 0 && i != 3) { gtk_cell_renderer_set_visible (renderer, TRUE); if (i < 3) dummy_set_color (col, renderer, mod, iter, data); } else if (j > 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (i == 3) { gtk_cell_renderer_set_visible (renderer, TRUE); dummy_set_color (col, renderer, mod, iter, data); } else { gtk_cell_renderer_set_visible (renderer, FALSE); } } GtkWidget * create_dummy_box (); /*! \fn void clean_dummy_widgets () \brief destroy dummy atom(s) widgets */ void clean_dummy_widgets () { combo_id_box[1] = destroy_this_widget (combo_id_box[1]); combo_id[1] = destroy_this_widget (combo_id[1]); dummy_box[1] = destroy_this_widget (dummy_box[1]); dummy_box[0] = destroy_this_widget (dummy_box[0]); the_dummy_box = destroy_this_widget (the_dummy_box); } /*! \fn G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) \brief remove dummy atom(s) - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; int num_to_remove = GPOINTER_TO_INT(data); dummy_atom * dumm; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_dummy == num_to_remove) { done = TRUE; // Now we remove all selected dummy atoms for (i=0; i dummy; for (j=0; j dummies; j++) { if (dumm -> id == old_dummy[i]) { if (dumm -> next != NULL) { if (dumm -> prev != NULL) { dumm -> next -> prev = dumm -> prev; dumm -> prev -> next = dumm -> next; } else { tmp_cpmd -> dummy = dumm -> next; tmp_cpmd -> dummy -> prev = NULL; } g_free (dumm); } else if (dumm -> prev != NULL) { dumm -> prev -> next = NULL; g_free (dumm); } else { g_free (tmp_cpmd -> dummy); tmp_cpmd -> dummy = NULL; } break; } if (dumm -> next != NULL) dumm = dumm -> next; } } tmp_cpmd -> dummies -= num_to_remove; if (tmp_cpmd -> dummies > 0) { dumm = tmp_cpmd -> dummy; for (j=0; j dummies; j++) { dumm -> id = j; if (dumm -> next != NULL) dumm = dumm -> next; } } clean_dummy_widgets (); the_dummy_box = create_dummy_box (); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_param_box, the_dummy_box, FALSE, FALSE, 0); show_the_widgets (dummy_param_box); } else { str = g_strdup_printf (_("You must select %d dummy atom(s) to be deleted !"), num_to_remove); show_warning (str, qm_assistant); g_free (str); } break; default: // field_unselect_all (); done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void remove_dummy (int num_to_remove) \brief remove dummy atom(s) - creating the dialog \param num_to_remove the number of dummy atom(s) to remove */ void remove_dummy (int num_to_remove) { int i, j, k; gchar * str; str = g_strdup_printf (_("Select the %d dummy atom(s) to be removed"), num_to_remove); GtkWidget * rdummy = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rdummy), _("Apply"), GTK_RESPONSE_APPLY); gchar * mol_title[5] = {i18n("Id."), i18n("Type"), i18n("Atom(s)"), " ", i18n("Select")}; gchar * ctype[5] = {"text", "text", "text", "text", "active"}; GType col_type[5] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN}; GtkTreeIter dummy_level, atom_level; n_dummy = 0; old_dummy = allocint (tmp_cpmd -> dummies); GtkTreeStore * remove_model = gtk_tree_store_newv (5, col_type); GtkWidget * remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<5; i++) { if (i < 4) { dummy_renderer[i] = gtk_cell_renderer_text_new (); } else { dummy_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(dummy_renderer[i]), TRUE); g_signal_connect (G_OBJECT(dummy_renderer[i]), "toggled", G_CALLBACK(select_dummy), & remove_model); } dummy_col[i] = gtk_tree_view_column_new_with_attributes ((i != 3) ? _(mol_title[i]) : mol_title[i], dummy_renderer[i], ctype[i], i, NULL); gtk_tree_view_column_set_alignment (dummy_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), dummy_col[i]); gtk_tree_view_column_set_cell_data_func (dummy_col[i], dummy_renderer[i], dummy_set_visible, GINT_TO_POINTER(i), NULL); } // fill model dummy_atom * dumm = tmp_cpmd -> dummy; for (i=0; i dummies; i++) { gtk_tree_store_append (remove_model, & dummy_level, NULL); gtk_tree_store_set (remove_model, & dummy_level, 0, i+1, 1, g_strdup_printf ("%s %d", _("Type"), dumm -> type + 1), 2, dumm -> natoms, 3, NULL, 4, 0, -1); for (j=0; j natoms; j++) { gtk_tree_store_append (remove_model, & atom_level, & dummy_level); k = qm_proj -> atoms[0][dumm -> list[j]].sp; str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[k]), dumm -> list[j]+1); gtk_tree_store_set (remove_model, & atom_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, str, 4, 0, -1); g_free (str); } if (dumm -> next != NULL) dumm = dumm -> next; } num_cpmd_objects = tmp_cpmd -> dummies; g_object_unref (remove_model); i = ((tmp_cpmd -> dummies+1)*40 < 500) ? (tmp_cpmd -> dummies+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rdummy), 450, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); run_this_gtk_dialog (rdummy, G_CALLBACK(run_remove_dummy), GINT_TO_POINTER(num_to_remove)); } /*! \fn void add_dummy (int extra) \brief add dummy atom(s) \param extra the number of dummy atom(s) to add */ void add_dummy (int extra) { int i; if (tmp_cpmd -> dummy == NULL) { tmp_cpmd -> dummy = init_dummy (0, 0); tmp_cpmd -> dummies = 1; extra --; } dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> next != NULL) dumm = dumm -> next; for (i=0; i next = init_dummy (0, i+tmp_cpmd -> dummies); dumm -> next -> prev = dumm; dumm = dumm -> next; } tmp_cpmd -> dummies += extra; // finaly update the combobox create_selection_combo (1, tmp_cpmd -> dummies, 0, G_CALLBACK(changed_dummy_id_box)); } /*! \fn G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) \brief add or remove dummy atom spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) { int id = gtk_spin_button_get_value_as_int(res); int k; gchar * str; gboolean to_add_dummy = TRUE; if (id != tmp_cpmd -> dummies) { if (id > tmp_cpmd -> dummies) { // adding dummy k = id - tmp_cpmd -> dummies; if (k > 1) { str = g_strdup_printf (_("Do you really want to add %d dummy atom(s) ?"), k); to_add_dummy = ask_yes_no (_("Adding dummy atom(s) ?"), str, GTK_MESSAGE_QUESTION, qm_assistant); g_free (str); } if (to_add_dummy) { add_dummy (k); } } else if (id < tmp_cpmd -> dummies) { remove_dummy (tmp_cpmd -> dummies - id); } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_cpmd -> dummies); print_the_section (8, 0, qmbuffer[8]); } /*! \fn GtkWidget * create_dummy_box () \brief create the dummy atom(s) widgets */ GtkWidget * create_dummy_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; hbox = cpmd_box (vbox, _("Number of dummy atom(s):"), 5, 20, 200); widg = spin_button (G_CALLBACK(add_or_remove_dummy), tmp_cpmd -> dummies, 0.0, (double)qm_proj -> natomes, 1.0, 0, 100, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); combo_id[1] = cpmd_box (vbox, _("Dummy atom to configure: "), 5, 5, 200); dummy_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, dummy_box[0], FALSE, FALSE, 10); create_selection_combo (1, tmp_cpmd -> dummies, 0, G_CALLBACK(changed_dummy_id_box)); return vbox; } /*! \fn G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) \brief CPMD input file, add constraint(s) or dummy atom(s) - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); GtkWidget * amol = dialogmodal ((i == DEFCO) ? _("Add and configure constraint(s)") : _("Add and configure dummy atoms"), GTK_WINDOW(qm_assistant)); GtkWidget * vbox = dialog_get_content_area (amol); GtkWidget * hbox; GtkWidget * widg; gchar * str; if (i == DEFCO) { hbox = cpmd_box (vbox, _(default_opts[5][1]), 5, 20, 120); widg = create_combo (); for (j=0; j default_opts[i+1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(i+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); create_selection_button (vbox, tmp_cpmd -> fixat, 1, GINT_TO_POINTER(-1)); j = (tmp_cpmd -> default_opts[i+1] < 0.0) ? 0 : (int) tmp_cpmd -> default_opts[i+1]; widget_set_sensitive (sel_but[1], j); } else if (i == DEFDU) { dummy_box[0] = NULL; dummy_box[1] = NULL; combo_id[1] = NULL; dummy_param_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, dummy_param_box, FALSE, FALSE, 0); the_dummy_box = create_dummy_box(); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_param_box, the_dummy_box, FALSE, FALSE, 0); } run_this_gtk_dialog (amol, G_CALLBACK(run_destroy_dialog), NULL); } atomes_1.3.1/src/calc/cpmd/cpmd_nose.c0000664000175000017500000016306615212624223017250 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_nose.c * @short Functions to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * @author Sébastien Le Roux */ /* * This file: 'cpmd_nose.c' * * Contains: * - The functions to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * * List of functions: int get_num_thermo (); int is_not_thermostated (int at, int therm); int is_fixed_atom (int at); int in_dummy (int at, int id); gboolean are_all_atoms_thermostated (); gboolean was_it_selected (int id, int at); void set_going_forward (); void clean_nose_widgets (); void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void remove_nose_thermostat (int num_to_remove); void init_thermostats (int type, int elec); void clean_thermostat (int new_type); void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb); void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_thermo_atom_model (int therm); void select_atom_from_model (int therm); void create_selection_button (GtkWidget * box, int num, int id, gpointer data); void create_nose_thermo_param_box (int therm_id); void create_selection_combo (int id, int num, int type, GCallback handler); void add_thermostat (int extra); void prepare_therm_ions (); void prepare_therm_elec (); void thermo_type_box (GtkWidget * vbox, gchar * str, int id); G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data); GtkWidget * create_nose_box (int n); GtkWidget * thermo_box (); thermostat * get_thermo (); thermostat * get_active_thermostat (int id); thermostat * init_thermo (int id, int type, int sys); */ #include "global.h" #include "interface.h" #include "glview.h" #include "calc.h" #include "cpmd.h" #include "cp2k.h" extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern ColRGBA init_color (int id, int numid); extern void proj_unselect_all_atoms (); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); extern dummy_atom * get_active_dummy (int id); extern void create_dummy_param_box (int dummy_id); gchar * c_thermo[2][CP2NTHERM][4] = {{{i18n("Initial temperature: "), " ", " ", " "}, {i18n("Target temperature: "),i18n("Tolerance: "), " ", " "}, {i18n("Target temperature: "), i18n("Target frequency: "), " ", " "}, {" ", " ", " ", " "}, {" ", " ", " ", " "}}, {{" ", " ", " ", " "}, {i18n("Time constant (Langevin): "), i18n("Time constant (Nosë-Hoover): "), i18n("Mass: "), "Chi: "}, {i18n("Time constant: "), " ", " ", " "}, {" ", " ", " ", " "}, {i18n("Length: "), i18n("Multiple time steps: "), i18n("Time constant: "), i18n("Yoshida integrator: ")}}}; gchar * u_thermo[2][CP2NTHERM][4] = {{{" K", " ", " ", " "}, {" K", " K", " ", " "}, {" K", " cm-1", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " ", " "}}, {{" ", " ", " ", " "}, {" fs", " fs", " fs-1", " fs-1"}, {" fs", " ", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " fs", " "}}}; gchar * ue_thermo[CP2NTHERM][4] = {{" a.u.", " ", " ", " "}, {" a.u.", " ", " ", " "}, {" a.u.", " a.u.", " ", " "}, {" a.u.", " cm-1", " ", " "}}; int v_thermo[2][CP2NTHERM] = {{1, 2, 2, 0, 0}, {0, 4, 1, 0, 4}}; double d_thermo[2][CP2NTHERM][4] = {{{ 300.0, 0.0, 0.0, 0.0}, { 300.0, 20.0, 0.0, 0.0}, { 300.0, 200.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}}, {{ 0.0, 0.0, 0.0, 0.0}, { 100.0, 100.0, 1.0, 1.0}, { 100.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}, { 3.0, 2.0, 1000.0, 3.0}}}; GtkWidget * sel_but[3]; GtkWidget * sel_img[3]; GtkWidget * electron_box; GtkWidget * therm_ions; GtkWidget * therm_elec; GtkWidget * therm_param_ions; GtkWidget * therm_param_elec; GtkWidget * nose_box; GtkWidget * combo_id[2]; GtkWidget * combo_id_box[2]; GtkWidget * nose_id_box[2]; GtkCellRenderer * thermo_renderer[6]; GtkTreeViewColumn * thermo_col[6]; int n_therm; int at_col; int * old_thermo; int ** old_fixed; int num_cpmd_objects; int the_therm; gboolean fixco; GtkTreeStore * add_model; /*! \fn thermostat * get_thermo () \brief get QM / QM-MM ions thermostat */ thermostat * get_thermo () { if (is_cpmd) { return tmp_cpmd -> ions_thermostat; } else { return tmp_cp2k -> ions_thermostat; } } /*! \fn int get_num_thermo () \brief get the number of thermostat(s) */ int get_num_thermo () { if (is_cpmd) { return tmp_cpmd -> thermostats; } else { return tmp_cp2k -> thermostats; } } /*! \fn gboolean are_all_atoms_thermostated () \brief are all atom(s) in the model thermostated ? */ gboolean are_all_atoms_thermostated () { int i, j; thermostat * thermo = get_thermo(); j = 0; if (thermo -> sys < LOCAL) return TRUE; for (i=0; i natoms; if (thermo -> next != NULL) thermo = thermo -> next; } if (j == qm_proj -> natomes) { return TRUE; } else { return FALSE; } } /*! \fn void set_going_forward () \brief QM / QM-MM assistant going forward on thermostat page */ void set_going_forward () { GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page = gtk_assistant_get_nth_page (assist, (is_cpmd) ? 3 : 5); gtk_assistant_set_page_complete (assist, page, are_all_atoms_thermostated ()); } /*! \fn void clean_nose_widgets () \brief clean thermostat widgets */ void clean_nose_widgets () { combo_id_box[0] = destroy_this_widget (combo_id_box[0]); combo_id[0] = destroy_this_widget (combo_id[0]); nose_id_box[1] = destroy_this_widget (nose_id_box[1]); nose_id_box[0] = destroy_this_widget (nose_id_box[0]); nose_box = destroy_this_widget (nose_box); } /*! \fn thermostat * get_active_thermostat (int id) \brief get thermostat using id \param id the thermostat id */ thermostat * get_active_thermostat (int id) { if (id < 0) { return tmp_cpmd -> elec_thermostat; } else { thermostat * thermo = get_thermo (); while (thermo -> id != id) { if (thermo -> next != NULL) thermo = thermo -> next; } return thermo; } } /*! \fn G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select QM / QM-MM thermostat toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { get_active_thermostat (old_thermo[n_therm-1]) -> show = FALSE; old_thermo[n_therm-1] = -1; n_therm --; gtk_tree_store_set (* model, & iter, 5, 0, -1); //toviz.c = 0; } else { n_therm ++; gtk_tree_store_set (* model, & iter, 5, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & old_thermo[n_therm-1], -1); old_thermo[n_therm-1] --; get_active_thermostat (old_thermo[n_therm-1]) -> show = TRUE; //toviz.c = 1; } // Viz } /*! \fn void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the QM / QM-MM thermostat selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 0, & i, -1); i = abs(i); gtk_tree_model_get (mod, iter, 5, & j, -1); set_renderer_color (j, renderer, init_color (i-1, num_cpmd_objects)); } /*! \fn void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the QM / QM-MM thermostat selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if (j > 0 && i != 4) { gtk_cell_renderer_set_visible (renderer, TRUE); if (i < 5) thermo_set_color (col, renderer, mod, iter, data); } else if (j > 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (i == 4) { gtk_cell_renderer_set_visible (renderer, TRUE); thermo_set_color (col, renderer, mod, iter, data); } else { gtk_cell_renderer_set_visible (renderer, FALSE); } } GtkWidget * create_nose_box (int n); /*! \fn G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) \brief remove thermostat(s) - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; int num_to_remove = GPOINTER_TO_INT(data); gboolean done = FALSE; gchar * str; thermostat * thermo; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_therm == num_to_remove) { done = TRUE; // Now we remove all selected thermostats: for (i=0; i id == old_thermo[i]) { if (thermo -> next != NULL) { if (thermo -> prev != NULL) { thermo -> next -> prev = thermo -> prev; thermo -> prev -> next = thermo -> next; } else { tmp_cpmd -> ions_thermostat = thermo -> next; tmp_cpmd -> ions_thermostat -> prev = NULL; } } else { thermo -> prev -> next = NULL; } g_free (thermo); break; } if (thermo -> next != NULL) thermo = thermo -> next; } } if (is_cpmd) { tmp_cpmd -> thermostats -= num_to_remove; } else { tmp_cp2k -> thermostats -= num_to_remove; } thermo = get_thermo(); for (j=0; j id = j; if (thermo -> next != NULL) thermo = thermo -> next; } clean_nose_widgets (); nose_box = create_nose_box (get_thermo() -> type); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); //int j; //for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]);); show_the_widgets (therm_param_ions); } else { str = g_strdup_printf (_("You must select %d thermostat(s) to be deleted !"), num_to_remove); show_warning (str, qm_assistant); g_free (str); } break; default: done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void remove_nose_thermostat (int num_to_remove) \brief remove thermostat(s) - creating the dialog \param num_to_remove the number of thermostat(s) to remove */ void remove_nose_thermostat (int num_to_remove) { int i, j, k; gchar * str; // int cpmd_object = 0; str = g_strdup_printf (_("Select the %d thermostat(s) to be removed"), num_to_remove); GtkWidget * rthermo = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rthermo), _("Apply"), GTK_RESPONSE_APPLY); gchar * mol_title[6] = {i18n("Id."), i18n("Target T°"), i18n("Frequency"), i18n("Atom(s)"), " ", i18n("Select")}; gchar * ctype[6] = {"text", "text", "text", "text", "text", "active"}; GType col_type[6] = {G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN}; GtkTreeIter thermo_level, atom_level; n_therm = 0; old_thermo = allocint (get_num_thermo()); GtkTreeStore * remove_model = gtk_tree_store_newv (6, col_type); GtkWidget * remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<6; i++) { if (i < 5) { thermo_renderer[i] = gtk_cell_renderer_text_new (); } else { thermo_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(thermo_renderer[i]), TRUE); g_signal_connect (G_OBJECT(thermo_renderer[i]), "toggled", G_CALLBACK(select_thermo), & remove_model); } thermo_col[i] = gtk_tree_view_column_new_with_attributes ((i != 4) ? _(mol_title[i]) : mol_title[i], thermo_renderer[i], ctype[i], i, NULL); gtk_tree_view_column_set_alignment (thermo_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), thermo_col[i]); gtk_tree_view_column_set_cell_data_func (thermo_col[i], thermo_renderer[i], thermo_set_visible, GINT_TO_POINTER(i), NULL); } // fill model thermostat * thermo = get_thermo(); for (i=0; i params[0], 2, thermo -> params[1], 3, thermo -> natoms, 4, " ", 5, 0, -1); for (j=0; j natoms; j++) { gtk_tree_store_append (remove_model, & atom_level, & thermo_level); k = qm_proj -> atoms[0][thermo -> list[j]].sp; str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[k]), thermo -> list[j]+1); gtk_tree_store_set (remove_model, & atom_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, 0, 4, str, 5, 0, -1); g_free (str); } if (thermo -> next != NULL) thermo = thermo -> next; } num_cpmd_objects = get_num_thermo(); g_object_unref (remove_model); i = ((num_cpmd_objects+1)*40 < 500) ? (num_cpmd_objects+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rthermo), 450, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); run_this_gtk_dialog (rthermo, G_CALLBACK(run_remove_nose_thermostat), GINT_TO_POINTER(num_to_remove)); } /*! \fn thermostat * init_thermo (int id, int type, int sys) \brief initialize new thermostat \param id the new thermostat id \param type the type of thermostat \param sys the thermostat system */ thermostat * init_thermo (int id, int type, int sys) { thermostat * thermo = g_malloc0(sizeof*thermo); thermo -> id = id; thermo -> type = type; thermo -> sys = sys; thermo -> show = FALSE; if (id < 0) { thermo -> params[0] = 0.5; thermo -> params[1] = (type == 0) ? 0.2: 200.0; } else { int i; for (i=0; i params[i] = d_thermo[!is_cpmd][type][i]; } } return thermo; } /*! \fn void init_thermostats (int type, int elec) \brief initialize thermostat(s) \param type the type of thermostat \param elec 1 = fictitious electronic thermostat */ void init_thermostats (int type, int elec) { //int i = (type == ULTRA) ? qm_proj -> nspec: 1; if (is_cpmd) { tmp_cpmd -> thermostats = 1; tmp_cpmd -> ions_thermostat = init_thermo (0, type, 0); } else { tmp_cp2k -> thermostats = 1; tmp_cp2k -> ions_thermostat = init_thermo (0, type, 0); } if (is_cpmd && elec) tmp_cpmd -> elec_thermostat = init_thermo (-1, type, 0); } /*! \fn void clean_thermostat (int new_type) \brief free thermostat data, then initialiaze new type of thermostat \param new_type the new type of thermostat */ void clean_thermostat (int new_type) { int i; thermostat * thermo = get_thermo (); if (thermo -> sys > 0) { for (i=0; i next != NULL) thermo = thermo -> next; } for (i=0; i prev != NULL) { thermo = thermo -> prev; g_free (thermo -> next); } } } g_free (thermo); init_thermostats (new_type, 0); } G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data); /*! \fn void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) \brief create thermostat parameters configuration widgets \param vbox the GtkWidget sending the signal \param id thermostat id, -2 if fictitious electronic \param jd number of parameter(s) for this thermostat \param la thermostat parameter name(s) \param lb thermostat parameter unit(s) */ void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) { thermostat * thermo = get_active_thermostat (id); //gchar * itemp[2]={_("Initial temperature:"), _("Target temperature:")}; gchar * str; GtkWidget * hbox; GtkWidget * widg; int i, j; i = (id < 0) ? id : 0; for (j=0; j type == 4) ? _(la[j]) : la[j]); } else { str = g_strdup_printf ("%s", _(la[j])); } hbox = cpmd_box (vbox, str, 5, (is_cpmd) ? 20 : 50, 220); g_free (str); widg = create_entry (G_CALLBACK(update_thermo_parameter), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(widg), thermo -> params[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lb[j], -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } } /*! \fn G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select CPMD atom id toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int i, j; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, at_col, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { j = 0; n_therm --; old_thermo[i-1] = 0; qm_view -> picked --; } else { j = 1; n_therm ++; old_thermo[i-1] = 1; qm_view -> picked ++; } qm_proj -> atoms[0][i-1].pick[0] = j; qm_proj -> atoms[0][i-1].label[0] = j; init_default_shaders (qm_view); gtk_tree_store_set (* model, & iter, 3, j, -1); } /*! \fn G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select CP2K fixed id toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(add_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(add_model), & iter, at_col, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { old_fixed[i-1][j-4] = 0; } else { old_fixed[i-1][j-4] = 1; } gtk_tree_store_set (add_model, & iter, (fixco) ? j : j-2, old_fixed[i-1][j-4], -1); } /*! \fn void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CPMD atom selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; gtk_tree_model_get (mod, iter, 1, & i, -1); gtk_tree_model_get (mod, iter, 3, & j, -1); set_renderer_color (j, renderer, init_color (i-1, num_cpmd_objects)); k = GPOINTER_TO_INT(data); if (k == 2) { set_renderer_markup (mod, iter, renderer, 2); } } /*! \fn void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CPMD atom selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, at_col, & j, -1); if (j == 0 && i != 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (j == 0) { gtk_cell_renderer_set_visible (renderer, TRUE); } else if (j > 0 && i == 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (j > 0) { if (i < 4) { gtk_cell_renderer_set_visible (renderer, TRUE); } else { gtk_tree_model_get (mod, iter, 3, & k, -1); gtk_cell_renderer_set_visible (renderer, k); } if (i < 3) atom_set_color (col, renderer, mod, iter, data); } } /*! \fn int is_not_thermostated (int at, int therm) \brief is atom thermostated ? \param at the atom id \param therm the thermostat id */ int is_not_thermostated (int at, int therm) { int i, j; thermostat * thermo = get_thermo (); for (i=0; i natoms; j++) { if (thermo -> list[j] == at) { if (i == therm) { return 2; } else { return 0; } } } if (thermo -> next != NULL) thermo = thermo -> next; } return 1; } /*! \fn int is_fixed_atom (int at) \brief is atom fixed ? \param at the atom id */ int is_fixed_atom (int at) { int i; if (is_cpmd) { for (i=0; i fixat; i++) { if (tmp_cpmd -> fixlist[i] == at) { return i+2; } } } else { for (i=0; i fixat[0]; i++) { if (tmp_cp2k -> fixlist[0][i] == at) { return i+2; } } } return 1; } /*! \fn int in_dummy (int at, int id) \brief is atom in dummy ? \param at the atom id \param id the dummy list id */ int in_dummy (int at, int id) { dummy_atom * dummy = get_active_dummy (-(id+2)); int i; if (dummy -> natoms == qm_proj -> natomes) return 2; for (i=0; i natoms; i++) { if (dummy -> list[i] == at) return 2; } return 1; } /*! \fn gboolean was_it_selected (int id, int at) \brief was this atom already selected ? \param id the selection type \param at the atom id */ gboolean was_it_selected (int id, int at) { if (id < -1) { return in_dummy (at, id); } else if (id == -1) { return is_fixed_atom (at); } else { return is_not_thermostated (at, id); } } /*! \fn void fill_thermo_atom_model (int therm) \brief fill thermostat atom model \param therm the thermostat id */ void fill_thermo_atom_model (int therm) { int i, j, k, l, m; gchar * str; GtkTreeIter spec_level; GtkTreeIter atom_level; k = 0; for (i=0; i< qm_proj -> nspec; i++) { gtk_tree_store_append (add_model, & spec_level, NULL); gtk_tree_store_set (add_model, & spec_level, 0, qm_proj -> chemistry -> label[i], 1, 0, 3, 0, 4, 0, -1); for (j=0; j< qm_proj -> natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; l = was_it_selected (therm, j); if (fixco) { if (is_cpmd) { if (tmp_cpmd -> fixat > 0) { for (m=0; m fixat; m++) { if (qm_proj -> atoms[0][j].coord[2] == tmp_cpmd-> fixlist[m]) { l = 0; break; } } } } else { if (tmp_cp2k -> fixat[1] > 0) { for (m=0; m fixat[1]; m++) { if (qm_proj -> atoms[0][j].coord[2] == tmp_cp2k -> fixlist[1][m]) { l = 0; break; } } } } } if (l) { gtk_tree_store_append (add_model, & atom_level, & spec_level); str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[i]), j+1); if (fixco) { gtk_tree_store_set (add_model, & atom_level, 0, 0, 1, k, 2, str, 3, old_thermo[j], 4, old_fixed[j][0], 5, old_fixed[j][1], 6, old_fixed[j][2], at_col, j+1, -1); } else { gtk_tree_store_set (add_model, & atom_level, 0, 0, 1, k, 2, str, 3, old_thermo[j], at_col, j+1, -1); } g_free (str); } } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) \brief select atom to thermostat toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) \brief select atom to thermostat toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) #endif { int h, i, j, k, l, m; h = GPOINTER_TO_INT (data); j = button_get_status ((GtkWidget *)but); for (i=0; i natomes; i++) { m = 0; if (j) { k = l = m = 1; if (was_it_selected(h, i) != 1) { m = 0; } } else if (old_thermo[i]) { k = -1; l = 0; m = 1; } if (m) { n_therm += k; old_thermo[i] = l; if (l) qm_view -> picked ++; qm_proj -> atoms[0][i].pick[0] = l; qm_proj -> atoms[0][i].label[0] = l; } } gtk_tree_store_clear (add_model); fill_thermo_atom_model (h); init_default_shaders (qm_view); } /*! \fn G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) \brief select atom from model - running the dialgo \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_therm > 1) { str = g_strdup_printf (_("%d atoms have been selected !"), n_therm); } else if (n_therm) { str = g_strdup_printf (_("A single atom has been selected !")); } else { str = g_strdup_printf (_("Not at single atom has been selected !")); } str = g_strdup_printf (_("%s\nis this correct ?"), str); selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { done = TRUE; if (fixco) { for (i=0; i natomes; i++) { if (old_thermo[i] && ! old_fixed[i][0] && ! old_fixed[i][1] && ! old_fixed[i][2]) { str = g_strdup_printf (_("Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !"), i+1, i+1); show_warning (str, qm_assistant); done = FALSE; } } } } thermostat * thermo; dummy_atom * dummy; if (done) { if (the_therm < -1) { dummy = get_active_dummy (-(the_therm+2)); dummy -> natoms = n_therm; if (dummy -> list != NULL) { g_free (dummy -> list); dummy -> list = NULL; } if (n_therm > 0 && n_therm < qm_proj -> natomes) { dummy -> list = allocint (n_therm); j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; dummy -> list[j] = i; } } } } else if (the_therm == -1) { if (is_cpmd) { if (tmp_cpmd -> fixlist != NULL) { g_free (tmp_cpmd -> fixlist); tmp_cpmd -> fixlist = NULL; if (tmp_cpmd -> fixcoord != NULL) { g_free (tmp_cpmd -> fixcoord); tmp_cpmd -> fixcoord = NULL; } } if (n_therm > 0) { tmp_cpmd -> fixlist = allocint (n_therm); if (fixco) tmp_cpmd -> fixcoord = allocdint (n_therm, 3); tmp_cpmd -> fixat = n_therm; j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; tmp_cpmd -> fixlist[j] = i; if (fixco) { tmp_cpmd -> fixcoord[j][0] = old_fixed[i][0]; tmp_cpmd -> fixcoord[j][1] = old_fixed[i][1]; tmp_cpmd -> fixcoord[j][2] = old_fixed[i][2]; } } } } } else { if (tmp_cp2k -> fixlist[0] != NULL) { g_free (tmp_cp2k -> fixlist[0]); tmp_cp2k -> fixlist[0] = NULL; if (tmp_cp2k -> fixcoord[0] != NULL) { g_free (tmp_cp2k -> fixcoord[0]); tmp_cp2k -> fixcoord[0] = NULL; } } if (n_therm > 0) { tmp_cp2k -> fixlist[0] = allocint (n_therm); tmp_cp2k -> fixcoord[0] = allocdint (n_therm, 3); tmp_cp2k -> fixat[0] = n_therm; j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; tmp_cp2k -> fixlist[0][j] = i; tmp_cp2k -> fixcoord[0][j][0] = old_fixed[i][0]; tmp_cp2k -> fixcoord[0][j][1] = old_fixed[i][1]; tmp_cp2k -> fixcoord[0][j][2] = old_fixed[i][2]; } } } } } else { thermo = get_active_thermostat (the_therm); thermo -> natoms = n_therm; if (thermo -> list != NULL) { g_free (thermo -> list); thermo -> list = NULL; } if (n_therm > 0) { thermo -> list = allocint (n_therm); j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; thermo -> list[j] = i; } } } } } break; case GTK_RESPONSE_CLOSE: done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void select_atom_from_model (int therm) \brief select atom from model - creating the dialog \param therm the thermostat id */ void select_atom_from_model (int therm) { int i, j, k, l, m; the_therm = therm; GtkTreeViewColumn * ato_col[8]; GtkCellRenderer * ato_cell[8]; gchar * ato_title[2][8] = {{i18n("Species"), i18n("Id. (*)"), i18n("Atom"), i18n("Viz.3D & Select"), " "}, {i18n("Species"), i18n("Id. (*)"), i18n("Atom"), i18n("Viz.3D & Select"), "x", "y", "z", " "}}; gchar * ctype[2][8] = {{"text", "text", "text", "active", "text", "active", "active", "active"}, {"text", "text", "text", "active", "active", "active", "active", "text"}}; GType col_type[2][8] = {{G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT}, {G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT}}; gchar * str; at_col = 4; fixco = FALSE; qm_view -> picked = 0; if (! is_cpmd && the_therm == -1) { fixco = TRUE; } else if (is_cpmd) { if ((int)tmp_cpmd -> default_opts[DEFFI] == 2) fixco = TRUE; } if (the_therm < -1) { str = g_strdup_printf (_("Select atom(s) to construct dummy N°%d"), -(the_therm+1)); } else if (the_therm == -1) { str = g_strdup_printf (_("Select atom(s) to fix")); if (fixco) { g_free (str); at_col = 7; str = g_strdup_printf (_("Select atom(s) and coordinate(s) to fix")); } } else { str = g_strdup_printf (_("Add atom(s) to thermostat N°%d"), the_therm+1); } GtkWidget * amol = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), _("Apply"), GTK_RESPONSE_APPLY); n_therm = 0; i = (fixco) ? 1 : 0; j = (fixco) ? 8 : 5; add_model = gtk_tree_store_newv (j, col_type[i]); GtkWidget * add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); for (k=0; k natomes); if (fixco) { old_fixed = allocdint (qm_proj -> natomes, 3); } k = l = 0; for (i=0; i < qm_proj -> nspec; i++) { for (j=0; j < qm_proj -> natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; m = was_it_selected (the_therm, j); if (m) { l ++; n_therm += (m > 1) ? 1 : 0; old_thermo[j] = (m > 1) ? 1 : 0; qm_proj -> atoms[0][j].pick[0] = old_thermo[j]; qm_view -> picked += old_thermo[j]; if (fixco && m > 1) { if (is_cpmd) { old_fixed[j][0] = tmp_cpmd -> fixcoord[m-2][0]; old_fixed[j][1] = tmp_cpmd -> fixcoord[m-2][1]; old_fixed[j][2] = tmp_cpmd -> fixcoord[m-2][2]; } else { old_fixed[j][0] = tmp_cp2k -> fixcoord[0][m-2][0]; old_fixed[j][1] = tmp_cp2k -> fixcoord[0][m-2][1]; old_fixed[j][2] = tmp_cp2k -> fixcoord[0][m-2][2]; } } } } } } fill_thermo_atom_model (the_therm); init_default_shaders (qm_view); num_cpmd_objects = l; g_object_unref (add_model); i = ((qm_proj -> nspec + l)*37 < 500) ? (qm_proj -> nspec + l)*37 : 500; //GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN, 0); GtkWidget * scrollsets = create_scroll (dialog_get_content_area (amol), 320, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); str = g_strdup_printf (_(" (*) Order of appearance in the input file")); GtkWidget * vbox = dialog_get_content_area (amol); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (the_therm != -1) { if (get_num_thermo() > 1 || the_therm < -1) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); gchar * lab[2] = {i18n("All non-thermostated atom(s)"), i18n("All atom(s)")}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_(lab[(the_therm > -1) ? 0 : 1]), -1, -1, FALSE, G_CALLBACK(select_atoms_not_thermostated), GINT_TO_POINTER(the_therm)), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } } run_this_gtk_dialog (amol, G_CALLBACK(run_select_atom_from_model), & fixco); proj_unselect_all_atoms (); if (the_therm > -1) set_going_forward (); g_free (old_thermo); fixco = FALSE; } /*! \fn G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) \brief select atom(s) to be thermostated \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) { int num, id; int i = GPOINTER_TO_INT(data); select_atom_from_model (i); if (i < -1) { id = 2; num = get_active_dummy (-(i+2)) -> natoms; } else if (i == -1) { id = 1; num = (is_cpmd) ? tmp_cpmd -> fixat : tmp_cp2k -> fixat[0]; } else { id = 0; thermostat * thermo = get_active_thermostat (i); num = thermo -> natoms; } gchar * stra, * strb; if (num == 0) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf (_("%d atom(s)"), num); strb = g_strdup_printf (APPLY); } set_image_from_icon_name (sel_img[id], strb); gtk_button_set_label (but, stra); g_free (stra); g_free (strb); if (is_cpmd) { // CPMD if (i < -1) { print_the_section (8, 0, qmbuffer[8]); } else if (i == -1) { print_the_section (8, 0, qmbuffer[8]); } else { for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } } else { // CP2K } } /*! \fn void create_selection_button (GtkWidget * box, int num, int id, gpointer data) \brief create thermostat atom(s) selection button \param box the GtkWidget sending the signal \param num the number of atom(s) already selected \param id 0 = ionic, 1 = fictitious electronic \param data the associated data pointer */ void create_selection_button (GtkWidget * box, int num, int id, gpointer data) { int i = GPOINTER_TO_INT(data); GtkWidget * hbox = cpmd_box (box, _("Atom(s) selection: "), 5, 20, (i < -1) ? 120 : 220); gchar * str; if (num == 0) { str = g_strdup_printf (_("Not picked yet !")); sel_img[id] = stock_image (DELETEB); } else { str = g_strdup_printf (_("%d atom(s)"), (int)num); sel_img[id] = stock_image (APPLY); } sel_but[id] = gtk_button_new_with_label (str); gtk_widget_set_size_request (sel_but[id], 150, -1); g_free (str); g_signal_connect (G_OBJECT(sel_but[id]), "clicked", G_CALLBACK(atom_selection_button), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_but[id], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_img[id], FALSE, FALSE, 30); } /*! \fn void create_nose_thermo_param_box (int therm_id) \brief create thermostat configuration widgets \param therm_id the thermostat id */ void create_nose_thermo_param_box (int therm_id) { gchar * str; nose_id_box[1] = destroy_this_widget (nose_id_box[1]); str = g_strdup_printf (_("Configuration for thermostat N°%d: "), therm_id+1); nose_id_box[1] = create_vbox (BSEP); cpmd_box (nose_id_box[1], str, 5, 5, 220); g_free (str); thermostat * thermo = get_active_thermostat (therm_id); create_selection_button (nose_id_box[1], thermo -> natoms, 0, GINT_TO_POINTER(therm_id)); nose_parameters (nose_id_box[1], therm_id, v_thermo[!is_cpmd][thermo->type], c_thermo[!is_cpmd][thermo->type], u_thermo[!is_cpmd][thermo->type]); add_box_child_start (GTK_ORIENTATION_VERTICAL, nose_id_box[0], nose_id_box[1], FALSE, FALSE, 0); show_the_widgets (nose_id_box[1]); } /*! \fn G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) \brief change thermostat id \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); create_nose_thermo_param_box (i); } /*! \fn void create_selection_combo (int id, int num, int type, GCallback handler) \brief create thermostat selection combo box \param id 0 = ionic, 1 = fictitious electronic \param num the number of thermostat \param type the type of thermostat \param handler the associated callback */ void create_selection_combo (int id, int num, int type, GCallback handler) { int i, j; gchar * str; gchar * lab[2]={i18n("Thermostat"), i18n("Dummy atom")}; combo_id_box[id] = destroy_this_widget (combo_id_box[id]); combo_id_box[id] = create_combo (); for (i=0; i 0) { combo_set_active (combo_id_box[id], 0); if (id == 0) { create_nose_thermo_param_box (0); } else { create_dummy_param_box (0); } } else { combo_set_active (combo_id_box[id], -1); widget_set_sensitive (combo_id_box[id], FALSE); } g_signal_connect (G_OBJECT (combo_id_box[id]), "changed", handler, GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, combo_id[id], combo_id_box[id], FALSE, FALSE, 0); show_the_widgets (combo_id[id]); } /*! \fn void add_thermostat (int extra) \brief add thermostat(s) \param extra the number of thermostat(s) to add */ void add_thermostat (int extra) { int i, j; thermostat * thermo = get_thermo (); j = get_num_thermo (); while (thermo -> next != NULL) thermo = thermo -> next; for (i=0; i next = init_thermo (i+j, thermo -> type, thermo -> sys); thermo -> next -> prev = thermo; if (i < extra-1) thermo = thermo -> next; } if (is_cpmd) { tmp_cpmd -> thermostats += extra; } else { tmp_cp2k -> thermostats += extra; } // finally update the combobox create_selection_combo (0, get_num_thermo (), get_thermo() -> type, G_CALLBACK(changed_nose_thermo_id_box)); } /*! \fn G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) \brief add / remove thermostat \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) { int id = gtk_spin_button_get_value_as_int(res); int i, j, k; gchar * str; gboolean add_thermo = TRUE; thermostat * thermo = get_thermo(); if (id != get_num_thermo ()) { if (id > get_num_thermo ()) { // adding thermostats // ok if: 1) all atoms do not already have a thermostat assigned // 2) number of thermostat(s) to create < number of atoms that do have a thermostat assigned j = 0; for (i=0; i natoms; if (thermo -> next != NULL) thermo = thermo -> next; } if (j < qm_proj -> natomes) { // Number of thermostat to create k = id - get_num_thermo (); if (k < (qm_proj -> natomes - j)) { if (k > 1) { str = g_strdup_printf (_("Do you really want to add %d thermostat(s) ?"), k); add_thermo = ask_yes_no (_("Adding thermostat(s) ?"), str, GTK_MESSAGE_QUESTION, qm_assistant); g_free (str); } if (add_thermo) { add_thermostat (k); } else { // Set value back to the number of ionic thermostats gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { show_warning (_("It is not possible to create so many thermostats"), qm_assistant); gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { show_warning (_("All atoms arleady have a thermostat assigned"), qm_assistant); gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { // removing thermostats remove_nose_thermostat (get_num_thermo () - id); } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)(get_num_thermo ())); if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) \brief update thermostat parameter value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i < 0) { if (tmp_cpmd -> elec_thermostat -> params[i+2] != v) { tmp_cpmd -> elec_thermostat -> params[i+2] = v; update_entry_double (res, v); } } else { if (get_num_thermo () > 1) { j = combo_get_active (combo_id_box[0]); } else { j = 0; } thermostat * thermo = get_active_thermostat (j); if (i < 2) { if (thermo -> params[i] != v) { thermo -> params[i] = v; update_entry_double (res, v); } } else { if ((int)thermo -> params[i] != (int)v) { thermo -> params[i] = v; update_entry_int (res, (int)v); } } } if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * create_nose_box (int n) \brief create thermostat configuration widgets \param n the thermostat system */ GtkWidget * create_nose_box (int n) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; if (n > GLOBAL) { hbox = cpmd_box (vbox, _("Number of thermostat(s): "), 5, 5, 220); widg = spin_button (G_CALLBACK(add_or_remove_thermostat), (double)(get_num_thermo ()), 1.0, (double)qm_proj -> natomes, 1.0, 0, 100, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); combo_id[0] = cpmd_box (vbox, _("Thermostat to configure: "), 5, 5, 220); nose_id_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, nose_id_box[0], FALSE, FALSE, 10); create_selection_combo (0, get_num_thermo (), get_thermo () -> type, G_CALLBACK(changed_nose_thermo_id_box)); create_nose_thermo_param_box (0); } else { nose_parameters (vbox, 0, v_thermo[!is_cpmd][get_thermo()->type], c_thermo[!is_cpmd][get_thermo() -> type], u_thermo[!is_cpmd][get_thermo()->type]); } return vbox; } /*! \fn G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) \brief change the type of the ionic thermostat \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); if (i != get_thermo () -> sys) { clean_thermostat (get_thermo () -> type); clean_nose_widgets (); get_thermo () -> sys = i; nose_box = create_nose_box (get_thermo () -> sys); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); int j; if (is_cpmd) for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]); show_the_widgets (therm_param_ions); } set_going_forward (); } /*! \fn void prepare_therm_ions () \brief prepare ions thermostat widgets */ void prepare_therm_ions () { int i, j, k; GtkWidget * hbox; GtkWidget * tbox; gchar * str; clean_nose_widgets (); therm_param_ions = destroy_this_widget (therm_param_ions); therm_param_ions = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_ions, therm_param_ions, FALSE, FALSE, 0); i = (is_cpmd) ? 1 : 0; //if (is_cpmd) { if (get_thermo () -> type > i) { hbox = cpmd_box (therm_param_ions, _("Thermostat type: "), 5, 5, 220); tbox = create_combo (); j = 2; // For QM-MM: qm_view -> bonding + 2; for (k=0; k sys); g_signal_connect (G_OBJECT (tbox), "changed", G_CALLBACK(changed_thermo_box_nose), NULL); } } nose_box = create_nose_box (get_thermo () -> sys); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); show_the_widgets (therm_param_ions); if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn void prepare_therm_elec () \brief prepare electrons thermostat widgets */ void prepare_therm_elec () { therm_param_elec = destroy_this_widget (therm_param_elec); therm_param_elec = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_elec, therm_param_elec, FALSE, FALSE, 0); int i; nose_parameters (therm_param_elec, -2, v_thermo[0][tmp_cpmd -> elec_thermostat -> type], c_thermo[0][tmp_cpmd -> elec_thermostat -> type], ue_thermo[tmp_cpmd -> elec_thermostat -> type]); show_the_widgets (therm_param_elec); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) \brief change the thermostat family (ionic / fictitious electronic) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) { int i, j; i = combo_get_active ((GtkWidget *)box); j = GPOINTER_TO_INT (data); if (j == 0 && i != get_thermo () -> type) { clean_thermostat (i); thermostat * thermo = get_thermo(); thermo -> sys = GLOBAL; prepare_therm_ions (); } else if (j == -1) { if (i != tmp_cpmd -> elec_thermostat -> type) { g_free (tmp_cpmd -> elec_thermostat); tmp_cpmd -> elec_thermostat = init_thermo (-1, i, 0); tmp_cpmd -> elec_thermostat -> sys = 0; prepare_therm_elec (); } } set_going_forward (); } /*! \fn void thermo_type_box (GtkWidget * vbox, gchar * str, int id) \brief prepare the thermostat option widgets \param vbox the GtkWidget sending the signal \param str thermostat information \param id the type of thermostat */ void thermo_type_box (GtkWidget * vbox, gchar * str, int id) { int i; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * tbox = create_combo (); for (i=0; i elec_thermostat -> type); } else { thermostat * thermo = get_thermo(); combo_set_active (tbox, thermo -> type); } g_signal_connect (G_OBJECT (tbox), "changed", G_CALLBACK(changed_thermo_box), GINT_TO_POINTER(id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, tbox, FALSE, FALSE, 0); } /*! \fn GtkWidget * thermo_box () \brief create the thermostat configuration widgets */ GtkWidget * thermo_box () { gchar * thermo_info[2] = {i18n("Ionic subsystem thermostat: "), i18n("Thermostat: ")}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * vvbox; nose_id_box[0] = nose_id_box[1] = NULL; therm_param_ions = NULL; therm_param_elec = NULL; nose_box = NULL; combo_id_box[0] = NULL; combo_id[0] = NULL; if (get_num_thermo() == 0) init_thermostats (0, 1); // Thermostat type ions vvbox = create_vbox (BSEP); gtk_widget_set_size_request (vvbox, (is_cpmd) ? 525 : -1, (is_cpmd) ? 350 : 260); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 0); thermo_type_box (vvbox, _(thermo_info[!is_cpmd]), 0); therm_ions = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, therm_ions, FALSE, FALSE, (is_cpmd) ? 0 : 20); prepare_therm_ions (); // Thermostat type electrons if (is_cpmd) { electron_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, electron_box, FALSE, FALSE, 5); thermo_type_box (electron_box, _("Fictitious electronic subsystem: "), -1); therm_elec = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, electron_box, therm_elec, FALSE, FALSE, 0); prepare_therm_elec (); } return vbox; } atomes_1.3.1/src/calc/cp2k/0000775000175000017500000000000015212624223015035 5ustar lerouxlerouxatomes_1.3.1/src/calc/cp2k/cp2k_mol.c0000664000175000017500000002551015212624223016712 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_mol.c * @short Functions to fix fragment(s) when creating the CP2K input file * @author Sébastien Le Roux */ /* * This file: 'cp2k_mol.c' * * Contains: * - The functions to fix fragment(s) when creating the CP2K input file Note: this is not used for the time being ! * * List of functions: void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void cp2k_fix_molecule (); G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "cp2k.h" #include "calc.h" extern void proj_unselect_all_atoms (); extern ColRGBA init_color (int id, int numid); extern G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); extern int at_col; extern int ** old_fixed; int a_frag; int * fix_frag; extern GtkTreeStore * add_model; /*! \fn G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select molecule toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(add_model), & iter, path); int i; gtk_tree_model_get (GTK_TREE_MODEL(add_model), & iter, 0, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { fix_frag[i-1] = 0; a_frag --; } else { a_frag ++; fix_frag[i-1] = 1; } gtk_tree_store_set (add_model, & iter, 1, fix_frag[i-1], -1); } /*! \fn void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CP2K molecule tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; gtk_tree_model_get (mod, iter, 1, & i, -1); gtk_cell_renderer_set_visible (renderer, i); } /*! \fn void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CP2K molecule tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 0, & i, -1); gtk_tree_model_get (mod, iter, 1, & j, -1); set_renderer_color (j, renderer, init_color (i, qm_coord -> totcoord[2])); } gboolean sel_and_conf; /*! \fn G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) \brief confirm fix selection \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) { int i; if (response_id == GTK_RESPONSE_YES) { sel_and_conf = TRUE; for (i=0; i totcoord[2]; i++) { if (fix_frag[i] && ! old_fixed[i][0] && ! old_fixed[i][1] && ! old_fixed[i][2]) { gchar * str = g_strdup_printf (_("Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !"), i+1, i+1); show_warning (str, qm_assistant); g_free (str); sel_and_conf = FALSE; } } } destroy_this_dialog (dialog); } /*! \fn G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) \brief CP2K assistant fixing fragment(s) - running the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) { gchar * str; int i, j; gboolean done = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_frag > 0) { if (a_frag > 1) { str = g_strdup_printf (_("Fragments N°%d"), fix_frag[0]+1); if (a_frag > 2) { for (i=1; i fixlist[1] != NULL) { g_free (tmp_cp2k -> fixlist[1]); tmp_cp2k -> fixlist[1] = NULL; if (tmp_cp2k -> fixcoord[1] != NULL) { g_free (tmp_cp2k -> fixcoord[1]); tmp_cp2k -> fixcoord[1] = NULL; } } if (a_frag > 0) { tmp_cp2k -> fixlist[1] = allocint (a_frag); tmp_cp2k -> fixcoord[1] = allocdint (a_frag, 3); tmp_cp2k -> fixat[1] = a_frag; j = -1; for (i=0; i totcoord[2]; i++) { if (fix_frag[i]) { j ++; tmp_cp2k -> fixlist[1][j] = i; tmp_cp2k -> fixcoord[1][j][0] = old_fixed[i][0]; tmp_cp2k -> fixcoord[1][j][1] = old_fixed[i][1]; tmp_cp2k -> fixcoord[1][j][2] = old_fixed[i][2]; } } } } } break; case GTK_RESPONSE_CLOSE: done = TRUE; break; } if (done) destroy_this_dialog (dial); } /*! \fn void cp2k_fix_molecule () \brief CP2K assistant fixing fragment(s) - creating the dialog */ void cp2k_fix_molecule () { int i, j, k; at_col = 0; gchar * str = g_strdup_printf (_("Please select the fragment(s) to fix")); GtkWidget * fmol = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(fmol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * frag_tree = NULL; GtkTreeIter iter; GtkTreeViewColumn * frag_col[5]; GtkCellRenderer * frag_cell[5]; gchar * frag_title[5] = {i18n("Fragment"), i18n("Viz.3D & Select"), "x", "y", "z"}; gchar * ctype[5]={"text", "active", "active", "active", "active"}; GType col_type[5] = {G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; add_model = gtk_tree_store_newv (5, col_type); frag_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); for (i=0; i<5; i++) { if (i == 0) { frag_cell[i] = gtk_cell_renderer_text_new (); } else { frag_cell[i] = gtk_cell_renderer_toggle_new (); if (i == 1) { g_signal_connect (G_OBJECT(frag_cell[i]), "toggled", G_CALLBACK(select_frag), NULL); } else { j = i + 2; g_signal_connect (G_OBJECT(frag_cell[i]), "toggled", G_CALLBACK(cp2k_select_coord_id), GINT_TO_POINTER(j)); } } frag_col[i] = gtk_tree_view_column_new_with_attributes ((i < 2) ? _(frag_title[i]) : frag_title[i], frag_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(frag_tree), frag_col[i]); gtk_tree_view_column_set_alignment (frag_col[i], 0.5); if (i == 0) { gtk_tree_view_column_set_cell_data_func (frag_col[i], frag_cell[i], frag_set_color, NULL, NULL); } else if (i > 1) { gtk_tree_view_column_set_cell_data_func (frag_col[i], frag_cell[i], frag_set_visible, NULL, NULL); } } // fill model fix_frag = NULL; fix_frag = allocint (qm_coord -> totcoord[2]); old_fixed = allocdint (qm_coord -> totcoord[2], 3); a_frag = 0; for (i=0; i totcoord[2]; i++) { gtk_tree_store_append (add_model, & iter, NULL); for (j=0; j fixat[1]; j++) { if (tmp_cp2k -> fixlist[1][j] == i) { fix_frag[i] = 1; a_frag ++; for (k=0; k<3; k++) old_fixed[i][k] = tmp_cp2k -> fixcoord[1][j][k]; break; } } gtk_tree_store_set (add_model, & iter, 0, i + 1, 1, fix_frag[i], 2, old_fixed[i][0], 3, old_fixed[i][1], 4, old_fixed[i][2], -1); } g_object_unref (add_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(frag_tree)); i = ((qm_coord -> totcoord[2]+1)*35 < 500) ? (qm_coord -> totcoord[2]+1)*35 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (fmol), 220, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, frag_tree); run_this_gtk_dialog (fmol, G_CALLBACK(run_cp2k_fix_molecule), NULL); proj_unselect_all_atoms (); g_free (fix_frag); } atomes_1.3.1/src/calc/cp2k/cp2k_print.c0000664000175000017500000013704415212624223017265 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_print.c * @short Functions to print the CP2K input file(s) * @author Sébastien Le Roux */ /* * This file: 'cp2k_print.c' * * Contains: * - The functions to print the CP2K input file(s) * * List of functions: gchar * cp2kbool (double opt); void print_cp2k_var (gchar * var, GtkTextBuffer * buffer); void print_var_section (int num, gchar ** section, int i18p, int * i18pos, GtkTextBuffer * buffer); void print_thermostat_cp2k (int n_thermo, GtkTextBuffer * buffer); void print_motion_cp2k (int m, GtkTextBuffer * buffer); void print_coord_cp2k (GtkTextBuffer * buffer); void print_subsys_cp2k (GtkTextBuffer * buffer); void print_variables_cp2k (GtkTextBuffer * buffer); void print_global_cp2k (GtkTextBuffer * buffer); void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer); void print_cp2k (int f, GtkTextBuffer * buffer); */ #include "global.h" #include "interface.h" #include "calc.h" #include "cp2k.h" gchar * globopts[49] = {"@SET SYSTEM ", // 0 | - char "@SET RUN ", // 1 | 0 - char(int) "@SET CPU_TIME ", // 2 | 1 - int "@SET PRINT ", // 3 | 2 - char(int) "@SET USE_RESTART ", // 4 | 3 - bool(int) "@SET RESTART_FILE ", // 5 | 4 - char "@SET BASIS_FILE ", // 6 | 5 - char "@SET PSEUDO_FILE ", // 7 | 6 - char "@SET WAVE_FILE ", // 8 | 7 - char "@SET CHARGE ", // 9 | 8 - int "@SET CUTOFF ", // 10 | 9 - double "@SET GRIDS ", // 11 | 10 - int "@SET QS_METHOD ", // 12 | 11 - char(int) "@SET SCF_GUESS ", // 13 | 12 - char(int) "@SET SCF_NCYCLES ", // 13 | 13 - int "@SET SCF_NCONV ", // 14 | 14 - double "@SET SCF_OCYCLES ", // 16 | 15 - int "@SET SCF_OCONV ", // 17 | 16 - double "@SET OT_MINI ", // 18 | 17 - char(int) "@SET FUNCTIONAL ", // 19 | 18 - char(int) "@SET PBC ", // 20 | 29 - char(int) "@SET SYM ", // 21 | 31 - int "@SET A ", // 22 | - double "@SET B ", // 23 | - double "@SET C ", // 24 | - double "@SET ALPHA ", // 25 | - double "@SET BETA ", // 26 | - double "@SET GAMMA ", // 27 | - double "@SET AX ", // 28 | - double "@SET AY ", // 29 | - double "@SET AZ ", // 30 | - double "@SET BX ", // 31 | - double "@SET BY ", // 32 | - double "@SET BZ ", // 33 | - double "@SET CX ", // 34 | - double "@SET CY ", // 35 | - double "@SET CZ ", // 36 | - double "@SET COORD_FILE ", // 37 | - char "@SET MD_ENSEMBLE ", // 38 | 32 - char(int) "@SET MD_STEPS ", // 39 | 34 - int "@SET MD_DELTA_T ", // 40 | 35 - double "@SET MD_TEMP ", // 41 | 36 - double "@SET GEO_MINI ", // 42 | 37 - char(int) "@SET GEO_STEPS ", // 43 | 38 - int "@SET GEO_CONV ", // 44 | 39 - double "@SET OUT_STEPS ", // 45 | 40 - int "@SET OUT_UNIT ", // 46 | 42 - char(int) "@SET OUT_FORM ", // 47 | XYZ "@SET OUT_UNIT "};// 48 | Angstrom gchar * cp2kglobal[9] = {"&GLOBAL\n" " PROJECT_NAME ","SYSTEM", "\n RUN_TYPE ","RUN", "\n PRINT_LEVEL ","PRINT", "\n WALLTIME ","CPU_TIME", "\n&END GLOBAL\n"}; gchar * cp2krestart[7] = {"@IF ( ","USE_RESTART"," == TRUE )\n" " &EXT_RESTART ON\n" " RESTART_DEFAULT F\n" " RESTART_FILE_NAME ","RESTART_FILE", "\n RESTART_POS T\n" " RESTART_COUNTERS T\n" " @IF ( ","RUN"," == MOLECULAR_DYNAMICS )\n" " RESTART_VEL T\n" " RESTART_THERMOSTAT T\n" " @ENDIF\n" " &END EXT_RESTART\n" "@ENDIF\n"}; gchar * cp2kfev[8][17] = {{i18n("!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME "), "BASIS_FILE", "\n POTENTIAL_FILE_NAME ", "PSEUDO_FILE", "\n@IF ( ","USE_RESTART"," == TRUE )\n" " WFN_RESTART_FILE_NAME ","WAVE_FILE", "\n@ENDIF\n" " CHARGE ","CHARGE", i18n("\n! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF "), "CUTOFF", i18n(" ! => Cutoff of the finest grid level\n" " NGRIDS "), "GRIDS", i18n(" ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD "), "QS_METHOD", i18n("\n EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n")}, {i18n(" EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n")}, {i18n("! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS "), "SCF_GUESS", i18n(" ! => Initial guess for the wave-function\n" " MAX_SCF "),"SCF_NCYCLES", i18n(" ! => Maximum number of SCF cycles\n" " EPS_SCF "),"SCF_NCONV", i18n(" ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF "), "SCF_OCYCLES", i18n(" ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF "), "SCF_OCONV", i18n(" ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER "), "OT_MINI", i18n("\n PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n")}, {" &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n"}, {i18n(" &END PRINT\n\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL "), "FUNCTIONAL", "\n &END XC_FUNCTIONAL\n"}, {" &END XC\n"}, {i18n("! Spin polarized calculation\n" " UKS "), "SPIN_POLARIZED", "\n MULTIPLICITY ", "SPIN_MULTIPLICITY"}, {" &END DFT\n"}}; gchar * qs_extrapo[2]={i18n(" EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n"), i18n(" EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n")}; gchar * scf_wrestart[3][3]={{"JUST_ENERGY ","OUT_STEPS",i18n(" ! => Write restart file every ${OUT_STEPS} SCF steps\n")}, {"GEO_OPT ","OUT_STEPS",i18n(" ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n")}, {"MD ","OUT_STEPS",i18n(" ! => Write restart file every ${OUT_STEPS} MD steps\n")}}; gchar * cp2kincludes[3] = {"forces.inc", "system.inc", "motion.inc"}; gchar * thermostatr[4] = {"\n &THERMOSTAT\n", " TYPE ", "\n REGION ", " &END THERMOSTAT"}; gchar * cp2k_thermo[4] = {"AD_LANGEVIN", "CSVR", "GLE", "NOSE"}; gchar * thermo_region[3] = {"GLOBAL", "DEFINED", "MOLECULE"}; gchar * define_region[4] = {"\n &DEFINE_REGION", "\n LIST", "\n MOLECULE", "\n &END DEFINE_REGION"}; gchar * thermo_type[4][5] = {{"\n &AD_LANGEVIN" "\n TIMECON_LANGEVIN ", "\n TIMECON_NH ", "\n &CHI ", "\n &END CHI" "\n &MASS ", "\n &END MASS" "\n &END AD_LANGEVIN\n"}, {"\n &CSVR" "\n TIMECON ", "\n &END CSVR\n"}, {"\n"}, {"\n &NOSE" "\n LENGTH ", "\n MTS ", "\n TIMECON ", "\n YOSHIDA ", "\n &END NOSE\n"}}; gchar * cp2kmotion[4][15] = {{"&MOTION\n\n" " &GEO_OPT\n" " MINIMIZER ","GEO_MINI", "\n MAX_ITER ","GEO_STEPS", "\n MAX_FORCE ","GEO_CONV", "\n &END GEO_OPT\n" " &PRINT\n" " &RESTART\n" " LOG_PRINT_KEY T\n" " &EACH\n" " GEO_OPT ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n" " &TRAJECTORY\n" " LOG_PRINT_KEY T\n" " FORMAT XYZ\n" " &EACH\n" " GEO_OPT ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END TRAJECTORY\n" " &END PRINT\n"}, {"&MOTION\n\n" " &MD\n" " ENSEMBLE ","MD_ENSEMBLE", "\n STEPS ","MD_STEPS", "\n TIMESTEP ","MD_DELTA_T", "\n TEMPERATURE ","MD_TEMP"}, {"\n &END MD\n\n" " &PRINT\n" " &RESTART\n" " LOG_PRINT_KEY T\n" " &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n\n" " &TRAJECTORY\n" " LOG_PRINT_KEY T\n" " FORMAT ","OUT_FORM", "\n UNIT ","OUT_UNIT", "\n &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END TRAJECTORY\n\n" " &VELOCITIES\n" " LOG_PRINT_KEY T\n" " FORMAT ","OUT_FORM", "\n UNIT ","OUT_UNIT", "\n &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END VELOCITIES\n" " &END PRINT\n"}, {"\n&END MOTION"}}; gchar * cp2ksyst[3][3] = {{i18n("!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC "), "PBC","\n"}, {"\n &END CELL\n" " &COORD","\n &END COORD\n" }, {i18n("\n &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME "), "COORD_FILE", "\n &END TOPOLOGY\n"}}; gchar * cp2klat[2][19] = {{" ABC ","A"," ","B"," ","C", "\n ALPHA_BETA_GAMMA ","ALPHA"," ","BETA"," ","GAMMA", "\n SYMMETRY ","SYM"," "," "," "," "," "}, {" A ","AX"," ","AY"," ","AZ", "\n B ","BX"," ","BY"," ","BZ", "\n C ","CX"," ","CY"," ","CZ","\n"}}; gchar * cp2kspin[2] = {"@SET SPIN_POLARIZED ", "@SET SPIN_MULTIPLICITY "}; gchar * cp2ksroks[3] = {"@SET ROKS ", "@SET ROKS_SCALING ", "@SET ROKS_SPIN_CONFIG "}; gchar * cp2kroks[7] = {" ROKS ","ROKS", i18n(" ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING "), "ROKS_SCALING", "\n SPIN_CONFIGURATION ", "ROKS_SPIN_CONFIG", "\n &END LOW_SPIN_ROKS\n"}; gchar * cp2kmocu[3] = {"@SET NUM_HOMO ", "@SET NUM_LUMO ", "@SET CUBES "}; gchar * cp2kmocubes[7] = {" NHOMO ","NUM_HOMO", "\n NLUMO ","NUM_LUMO", "\n WRITE_CUBES ","CUBES", "\n"}; gchar * cp2ksvdw[4] = {"@SET VDW_FCT ", "@SET VDW_TYPE ", "@SET VDW_CUTOFF ", "@SET VDW_LONG "}; gchar * cp2kvdw[4][7] = {{" &VDW_POTENTIAL\n" " POTENTIAL_TYPE ", "VDW_FCT", "\n "}, {"&NON_LOCAL\n" " TYPE ", "VDW_TYPE", "\n CUTOFF ", "VDW_CUTOFF", "\n &END NON_LOCAL\n"}, {"&PAIR_POTENTIAL\n" " TYPE ", "VDW_TYPE", "\n R_CUTOFF ", "VDW_CUTOFF", "\n LONG_RANGE_CORRECTION ","VDW_LONG", "\n &END PAIR_POTENTIAL\n"}, {" &END VDW_POTENTIAL\n"}}; gchar * vdw_fct[2] = {"NON_LOCAL", "PAIR_POTENTIAL"}; gchar * cp2k_cons[2] = {"\n &CONSTRAINT\n", " &END CONSTRAINT\n"}; gchar * cp2k_fix[4] = {" &FIXED_ATOMS\n COMPONENTS_TO_FIX ", " LIST", " MOLNAME", "\n &END FIXED_ATOMS\n"}; /*! \fn void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) \brief print a CP2K variable name \param var the variable name \param buffer the GtkTextBuffer to print into */ void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) { print_info ("${", "bold", buffer); print_info (var, "bold_blue", buffer); print_info ("}", "bold", buffer); } /*! \fn void print_var_section (int num, gchar ** section, int i18p, int * i18pos, GtkTextBuffer * buffer) \brief print CP2K input file variable section \param num the number of element(s) to print \param section the section text \param i18p the number of parts to translate \param i18pos the parts to translate \param buffer the GtkTextBuffer to print into */ void print_var_section (int num, gchar ** section, int i18p, int * i18pos, GtkTextBuffer * buffer) { int i, j; for (i=0; i ions_thermostat; for (i=0; i 1) { str = g_strdup_printf (_("\n! Thermostat N°%d"), i+1); print_info (str, NULL, buffer); g_free (str); } print_info (thermostatr[0], NULL, buffer); print_info (thermostatr[1], NULL, buffer); print_info (cp2k_thermo[thermo -> type-1], "red", buffer); print_info (thermostatr[2], NULL, buffer); print_info (thermo_region[thermo -> sys], "red", buffer); if (thermo -> sys > 0) { print_info (define_region[0], NULL, buffer); print_info (define_region[thermo -> sys], NULL, buffer); if (thermo -> sys == 1) { l = 0; for (j=0; j < qm_proj-> nspec; j++) { for (k=0; k < qm_proj-> natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l++; for (m=0; m < thermo -> natoms; m++) { if (thermo -> list[m] == k) { str = g_strdup_printf (" %d", l); print_info (str, "red", buffer); g_free (str); } } } } } } else { str = g_strdup_printf (" MOL-%d", thermo -> natoms+1); print_info (str, "red", buffer); g_free (str); } print_info (define_region[3], NULL, buffer); } for (j=0; j type]; j++) { print_info (thermo_type[thermo -> type-1][j], NULL, buffer); if (thermo -> type == 4 && j != 2) { str = g_strdup_printf ("%d", (int)thermo -> params[j]); } else { str = g_strdup_printf ("%f", thermo -> params[j]); } print_info (str, "red", buffer); g_free (str); } print_info (thermo_type[thermo -> type-1][j], NULL, buffer); if (thermo -> next != NULL) thermo = thermo -> next; } print_info (thermostatr[3], NULL, buffer); } /*! \fn void print_motion_cp2k (int m, GtkTextBuffer * buffer) \brief print the CP2K input MOTION section \param m 0 = Geometry optimisation, 1 = MD \param buffer the GtkTextBuffer to print into */ void print_motion_cp2k (int m, GtkTextBuffer * buffer) { gchar * intro = _("!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n"); print_info (intro, NULL, buffer); print_var_section ((m==0) ? 11 : 8, cp2kmotion[m], 0, NULL, buffer); if (m) { if ((int)tmp_cp2k -> opts[CP2ENS] != 2 && (int)tmp_cp2k -> opts[CP2ENS] != 3) { if (tmp_cp2k -> ions_thermostat -> type) print_thermostat_cp2k (tmp_cp2k -> thermostats, buffer); } print_var_section (15, cp2kmotion[m+1], 0, NULL, buffer); } if ((int)tmp_cp2k -> opts[CP2CON]) { gchar * fixec[7] = {"X\n", "Y\n", "Z\n", "XY\n", "XZ\n", "YZ\n", "XYZ\n"}; int fixed[7][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {1, 1, 1}}; int i, j, k; gchar * str; gboolean doit; for (i=0; i<2; i++) { if (tmp_cp2k -> fixat[i] > 0) { print_info (cp2k_cons[0], NULL, buffer); for (j=0; j<7; j++) { doit = FALSE; for (k=0; k fixat[i]; k++) { if (tmp_cp2k -> fixcoord[i][k][0] == fixed[j][0] && tmp_cp2k -> fixcoord[i][k][1] == fixed[j][1] && tmp_cp2k -> fixcoord[i][k][2] == fixed[j][2]) { print_info (cp2k_fix[0], NULL, buffer); print_info (fixec[j], NULL, buffer); if (i==0) { print_info (cp2k_fix[1], NULL, buffer); } else { print_info (cp2k_fix[2], NULL, buffer); } doit= TRUE; break; } } if (doit) { for (k=0; k fixat[i]; k++) { if (tmp_cp2k -> fixcoord[i][k][0] == fixed[j][0] && tmp_cp2k -> fixcoord[i][k][1] == fixed[j][1] && tmp_cp2k -> fixcoord[i][k][2] == fixed[j][2]) { if (i ==0) { str = g_strdup_printf (" %d", tmp_cp2k -> fixlist[i][k]+1); } else { str = g_strdup_printf (" MOL-%d", tmp_cp2k -> fixlist[i][k]+1); } print_info (str, NULL, buffer); g_free (str); } } print_info (cp2k_fix[3], NULL, buffer); } } print_info (cp2k_cons[1], NULL, buffer); } } } print_info (cp2kmotion[3][0], NULL, buffer); } /*! \fn void print_coord_cp2k (GtkTextBuffer * buffer) \brief print atomic coordinates in CP2K input format \param buffer the GtkTextBuffer to print into */ void print_coord_cp2k (GtkTextBuffer * buffer) { gchar * str; if (tmp_cp2k -> input_type) { gchar * str = g_strdup_printf (_("\t%d\n# This file was prepared using %s"), qm_proj -> natomes, PACKAGE); print_info (str, NULL, buffer); g_free (str); } int i, j; for (i=0; i nspec; i++) { for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { print_info ("\n", NULL, buffer); print_info (qm_proj -> chemistry -> label[i], NULL, buffer); str = g_strdup_printf (" %15.10lf %15.10lf %15.10lf", qm_proj -> atoms[0][j].x, qm_proj -> atoms[0][j].y, qm_proj -> atoms[0][j].z); print_info (str, NULL, buffer); g_free (str); /*if (qm_view -> bonding) { if (tmp_cp2k -> fixat[1] > 0 || tmp_cp2k -> ions_thermostat -> sys > 1) { str = g_strdup_printf (" MOL-%d", qm_proj -> atoms[0][j].coord[3]+1); print_info (str, NULL, buffer); g_free (str); } }*/ } } } } /*! \fn void print_subsys_cp2k (GtkTextBuffer * buffer) \brief print the CP2K input SUBSYS section \param buffer the GtkTextBuffer to print into */ void print_subsys_cp2k (GtkTextBuffer * buffer) { int totrans[] = {0}; print_var_section (3, cp2ksyst[0], 1, totrans, buffer); int i = ((int)tmp_cp2k -> opts[CP2LAT]) ? 19 : 14; print_var_section (i, cp2klat[(int)tmp_cp2k -> opts[CP2LAT]], 0, NULL, buffer); if (! tmp_cp2k -> input_type) { print_info (cp2ksyst[1][0], NULL, buffer); print_coord_cp2k (buffer); print_info (cp2ksyst[1][1], NULL, buffer); } else { print_var_section (3, cp2ksyst[2], 1, totrans, buffer); } gchar * str; print_info (_("! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n") , NULL, buffer); for (i=0; i nspec; i++) { str = g_strdup_printf (" &KIND %s\n BASIS_SET ", exact_name(qm_proj -> chemistry -> label[i])); print_info (str, NULL, buffer); g_free (str); str = g_strdup_printf ("BASIS_FOR_%s", exact_name(qm_proj -> chemistry -> label[i])); print_cp2k_var (str, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[i])) == 1) print_info (" ",NULL, buffer); print_info ("\n POTENTIAL ", NULL, buffer); str = g_strdup_printf ("POTENTIAL_FOR_%s", exact_name(qm_proj -> chemistry -> label[i])); print_cp2k_var (str, buffer); g_free (str); print_info ("\n &END KIND\n", NULL, buffer); } print_info ("&END SUBSYS", NULL, buffer); } /*! \fn void print_variables_cp2k (GtkTextBuffer * buffer) \brief print the list of the CP2K input variables \param buffer the GtkTextBuffer to print into */ void print_variables_cp2k (GtkTextBuffer * buffer) { int i, j, k, l; gchar * str; gboolean append; gchar * fileinfo[5] = {i18n("! This file contains the restart information:"), i18n("! This file contains the basis set(s):"), i18n("! This file contains the pseudo-potential(s):"), i18n("! This file contains the wave-function:"), i18n("! This file contains the atomic coordinates in XYZ format:")}; l = 0; for (i=0; i<41; i++) { if (i==0) { print_info (globopts[0], NULL, buffer); print_info (exact_name(qm_proj -> name), "bold", buffer); print_info ("\n", NULL, buffer); print_info (globopts[i+1], NULL, buffer); print_info (cp2k_default_keywords[l][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); l++; } else if (i == CP2SPI) { if ((int)tmp_cp2k -> opts[CP2SPI]) { print_info (cp2kspin[0], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[CP2SPI]), "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2kspin[1], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> opts[CP2SPM]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } else if (i==CP2PLE || i==CP2QSM || i==CP2SCG || i==CP2SMI || i==CP2FCT) { print_info (globopts[i+1], NULL, buffer); print_info (cp2k_default_keywords[l][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); l++; if (i==CP2SMI) { if ((int)tmp_cp2k -> opts[CP2ROK]) { print_info (cp2ksroks[0], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[CP2ROK]), "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksroks[1], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> extra_opts[1][0]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); print_info (cp2ksroks[2], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> extra_opts[1][1] + 1); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } if ((int)tmp_cp2k -> opts[CP2POR]) { for (j=0; j<2; j++) { print_info (cp2kmocu[j], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> extra_opts[2][j]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } print_info (cp2kmocu[j], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> extra_opts[2][2]), "blue", buffer); print_info ("\n", NULL, buffer); } } if (i==CP2FCT) { if ((int)tmp_cp2k -> opts[CP2VDW]) { print_info (cp2ksvdw[0], NULL, buffer); print_info (vdw_fct[(int)tmp_cp2k -> extra_opts[0][0]], "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksvdw[1], NULL, buffer); print_info (cp2k_vdw_keywords[(int)tmp_cp2k -> extra_opts[0][0]][(int)tmp_cp2k -> extra_opts[0][1]], "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksvdw[2], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> extra_opts[0][2]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); if (tmp_cp2k -> extra_opts[0][0] == 1.0) { print_info (cp2ksvdw[3], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> extra_opts[0][3]), "blue", buffer); print_info ("\n", NULL, buffer); } } } } else if (i == CP2RES) { print_info (globopts[4], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[i]), "blue", buffer); print_info ("\n", NULL, buffer); for (j=0; j<4; j++) { print_info (_(fileinfo[j]), "bold_red", buffer); print_info ("\n", NULL, buffer); print_info (globopts[5+j], NULL, buffer); if (tmp_cp2k -> files[j] != NULL) { print_info (tmp_cp2k -> files[j], "blue", buffer); } else { print_info ("None", "blue", buffer); if ((tmp_cp2k -> opts[i] == 1.0 && (j==0 || j==3)) || (j==1 || j==2)) print_info (_("\t\t! A file is required !"), "bold_red", buffer); } print_info ("\n", NULL, buffer); } } else if (i==CP2KTI || i==CP2CHA || i==CP2GRI || i==CP2SNN ||i==CP2SNO || i==CP2NST || i==CP2MAG ||i==CP2OUF) { if (i==CP2NST && tmp_cp2k -> opts[CP2RUN] != 3.0) { append = FALSE; } else if (i==CP2MAG && tmp_cp2k -> opts[CP2RUN] != 2.0) { append = FALSE; } else { append = TRUE; } if (append) { j = (i > CP2SNO) ? i+7 : i+1; print_info (globopts[j], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> opts[i]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); if (i==CP2OUF) { print_info (globopts[47], NULL, buffer); print_info ("XYZ", "blue", buffer); print_info ("\n", NULL, buffer); print_info (globopts[48], NULL, buffer); print_info ("ANGSTROM", "blue", buffer); print_info ("\n", NULL, buffer); } } } else if (i==CP2CUT || i==CP2SCN || i==CP2SCO || i==CP2DLT || i==CP2TMP || i==CP2GEF) { if ((i == CP2DLT || i == CP2TMP) && tmp_cp2k -> opts[CP2RUN] != 3.0) { append = FALSE; } else if (i == CP2GEF && tmp_cp2k -> opts[CP2RUN] != 2.0) { append = FALSE; } else { append = TRUE; } if (append) { j = (i > CP2SCO) ? i+7 : i+1; print_info (globopts[j], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> opts[i]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } else if (i == CP2PBC) { print_info (globopts[i-8], NULL, buffer); print_info (cp2k_default_keywords[6][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2ENS && tmp_cp2k -> opts[CP2RUN] == 3.0) { print_info (globopts[38], NULL, buffer); print_info (cp2k_default_keywords[9][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2GMI && tmp_cp2k -> opts[CP2RUN] == 2.0) { print_info (globopts[42], NULL, buffer); print_info (cp2k_default_keywords[10][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2LAT) { if (tmp_cp2k -> opts[i] == 0.0) { for (j=0; j<6; j++) { print_info (globopts[22+j], NULL, buffer); k = j/3; str = g_strdup_printf ("%f", qm_proj -> cell.box[0].param[k][j-3*k]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } print_info (globopts[21], NULL, buffer); print_info (cp2k_default_keywords[8][(int)tmp_cp2k -> opts[CP2SYM]], "blue", buffer); print_info ("\n", NULL, buffer); } else { for (j=0; j<3; j++) { print_info (globopts[28+j], NULL, buffer); k = j/3; str = g_strdup_printf ("%f", qm_proj -> cell.box[0].vect[k][j-3*k]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } if (tmp_cp2k -> input_type) { print_info (_(fileinfo[4]), "bold_red", buffer); print_info ("\n", NULL, buffer); print_info (globopts[37], NULL, buffer); print_info ("coord.inc", "blue", buffer); print_info ("\n", NULL, buffer); } for (j=0; j nspec;j++) { str = g_strdup_printf ("@SET BASIS_FOR_%s ", exact_name(qm_proj -> chemistry -> label[j])); print_info (str, NULL, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[j])) == 1) print_info (" ",NULL, buffer); if (tmp_cp2k -> spec_data[j][0] > -1) { print_info (get_nth_key (j, tmp_cp2k -> spec_data[j][0], 0), "blue", buffer); } else { print_info ("None", "blue", buffer); print_info (_("\t\t! A keyword is required !"), "bold_red", buffer); } print_info ("\n", NULL, buffer); str = g_strdup_printf ("@SET POTENTIAL_FOR_%s ", exact_name(qm_proj -> chemistry -> label[j])); print_info (str, NULL, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[j])) == 1) print_info (" ",NULL, buffer); if (tmp_cp2k -> spec_data[j][1] > -1) { print_info (get_nth_key (j, tmp_cp2k -> spec_data[j][1], 1), "blue", buffer); } else { print_info ("None", "blue", buffer); print_info (_("\t\t! A keyword is required !"), "bold_red", buffer); } print_info ("\n", NULL, buffer); } } } print_info ("\n", NULL, buffer); } /*! \fn void print_global_cp2k (GtkTextBuffer * buffer) \brief print the CP2K input file GLOBAL section \param buffer the GtkTextBuffer to print into */ void print_global_cp2k (GtkTextBuffer * buffer) { print_variables_cp2k (buffer); print_var_section (9, cp2kglobal, 0, NULL, buffer); if (tmp_cp2k -> input_type) { print_info ("\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info (_("! The mandatory FORCE_EVAL section include file\n"), NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[0], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { print_info ("!\n", NULL, buffer); print_info (_("! The mandatory MOTION section include file\n"), NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[2], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); } } else { print_info ("\n", NULL, buffer); } } /*! \fn void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) \brief print CP2K input file PRINT section content \param spaces spaces string \param info variable string to print \param i SCF restart option \param j 1 = MO cubes, 0 = else \param buffer the GtkTextBuffer to print into */ void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) { print_info (spaces, NULL, buffer); print_info ("&", NULL, buffer); print_info (info, NULL, buffer); print_info ("\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (_(" LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n"), NULL, buffer); print_info (spaces, NULL, buffer); print_info (" &EACH\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" ", NULL, buffer); int totrans[] = {2}; print_var_section (3, scf_wrestart[i], 1, totrans, buffer); print_info (spaces, NULL, buffer); print_info (" &END EACH\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" ADD_LAST NUMERIC\n", NULL, buffer); if (j) { print_var_section (7, cp2kmocubes, 0, NULL, buffer); } print_info (spaces, NULL, buffer); print_info ("&END ", NULL, buffer); print_info (info, NULL, buffer); print_info ("\n", NULL, buffer); } /*! \fn void print_cp2k (int f, GtkTextBuffer * buffer) \brief print the CP2K input file section \param f the section id \param buffer the GtkTextBuffer to print into */ void print_cp2k (int f, GtkTextBuffer * buffer) { int i; int * totrans; switch (f) { case 0: print_global_cp2k (buffer); if (tmp_cp2k -> input_type && (int)tmp_cp2k -> opts[CP2RES]) print_var_section (7, cp2krestart, 0, NULL, buffer); break; case 1: totrans = allocint (5); totrans[0] = 0; totrans[1] = 10; totrans[2] = 12; totrans[3] = 14; totrans[4] = 16; print_var_section (17, cp2kfev[0], 5, totrans, buffer); g_free (totrans); i = ((int)tmp_cp2k -> opts[CP2RUN] == 3) ? 0 : 1; print_info (_(qs_extrapo[i]), NULL, buffer); g_free (totrans); totrans = allocint (1); totrans[0] = 0; print_var_section (1, cp2kfev[1], 1, totrans, buffer); i = ((int)tmp_cp2k -> opts[CP2RUN] == 2 || (int)tmp_cp2k -> opts[CP2RUN] == 3) ? (int)tmp_cp2k -> opts[CP2RUN] - 1 : 0; if ((int)tmp_cp2k -> opts[CP2ROK]) { totrans[0] = 1; print_var_section (7, cp2kroks, 1, totrans, buffer); } g_free (totrans); if ((int)tmp_cp2k -> opts[CP2POR]) { print_info (" &PRINT\n", NULL, buffer); print_cp2k_print (" ", "MO_CUBES", i, 1, buffer); print_info (" &END PRINT\n", NULL, buffer); } totrans = allocint (7); totrans[0] = 0; totrans[1] = 2; totrans[2] = 3; totrans[3] = 4; totrans[4] = 6; totrans[5] = 8; totrans[6] = 10; print_var_section (13, cp2kfev[2], 7, totrans, buffer); g_free (totrans); print_info (" ", NULL, buffer); totrans = allocint (1); totrans[0] = 2; print_var_section (3, scf_wrestart[i], 1, totrans, buffer); g_free (totrans); print_var_section (1, cp2kfev[3], 0, NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PMU]) print_cp2k_print (" ", "MULLIKEN", i, 0, buffer); if ((int)tmp_cp2k -> opts[CP2PLO]) print_cp2k_print (" ", "LOWDIN", i, 0, buffer); totrans[0] = 0; print_var_section (3, cp2kfev[4], 1, totrans, buffer); g_free (totrans); if ((int)tmp_cp2k -> opts[CP2VDW]) { print_var_section (3, cp2kvdw[0], 0, NULL, buffer); print_var_section ((int)tmp_cp2k -> extra_opts[0][0]*2+5, cp2kvdw[(int)tmp_cp2k -> extra_opts[0][0]+1], 0, NULL, buffer); print_var_section (1, cp2kvdw[3], 0, NULL, buffer); } print_info (cp2kfev[5][0], NULL, buffer); if ((int)tmp_cp2k -> opts[CP2SPI]) { print_var_section (4, cp2kfev[6], 1, totrans, buffer); print_info ("\n", NULL, buffer); } print_info (cp2kfev[7][0], NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PFO] || (int)tmp_cp2k -> opts[CP2PST]) { print_info ("\n", NULL, buffer); print_info (" &PRINT\n", NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PFO]) print_cp2k_print (" ", "FORCES", i, 0, buffer); if ((int)tmp_cp2k -> opts[CP2PST]) print_cp2k_print (" ", "STRESS_TENSOR", i, 0, buffer); print_info (" &END PRINT\n", NULL, buffer); } if (tmp_cp2k -> input_type) { print_info ("\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info (_("! The mandatory SUBSYS section include file\n"), NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[1], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); print_info ("&END FORCE_EVAL\n", NULL, buffer); } break; case 2: print_subsys_cp2k (buffer); if (! tmp_cp2k -> input_type) { print_info ("\n&END FORCE_EVAL\n", NULL, buffer); if ((int)tmp_cp2k -> opts[CP2RUN] != 2 && (int)tmp_cp2k -> opts[CP2RUN] != 3 && (int)tmp_cp2k -> opts[CP2RES]) { print_info ("\n", NULL, buffer); print_var_section (7, cp2krestart, 0, NULL, buffer); } } break; case 4: print_coord_cp2k (buffer); break; default: if (f == 5 || f == 6) { for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][f-5] > -1) { print_info (get_nth_elem (i, tmp_cp2k -> spec_data[i][f-5], f-5), NULL, buffer); } } } else { if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { print_motion_cp2k ((int)tmp_cp2k -> opts[CP2RUN]- 2, buffer); } if (! tmp_cp2k -> input_type && (int)tmp_cp2k -> opts[CP2RES]) print_var_section (7, cp2krestart, 0, NULL, buffer); } break; } } atomes_1.3.1/src/calc/cp2k/cp2k_files.c0000664000175000017500000002011415212624223017220 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_files.c * @short Functions to handle CP2K basis sets and pseudopotentials * @author Sébastien Le Roux */ /* * This file: 'cp2k_files.c' * * Contains: * - The functions to handle CP2K basis sets and pseudopotentials * * List of functions: int cp2k_is_basis_in_database (int sp); int cp2k_is_pseudo_in_database (int sp); int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]); gchar * get_nth_elem (int sp, int id, int obj); gchar * get_nth_key (int sp, int id, int obj); G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data); GtkWidget * prepare_basis_combo (int sp, int obj); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cp2k.h" extern GtkWidget * cp2k_spec_combo; /*! \fn gchar * get_nth_elem (int sp, int id, int obj) \brief retrieve basis or pseudopotential name string for element from global list \param sp the chemical species \param id the list element id of 'sp' to find \param obj 0 = basis sets, 1 = pseudopotentials */ gchar * get_nth_elem (int sp, int id, int obj) { int i, j; j = -1; if (obj) { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_pot[i]); } } } } else { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_molopt[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_gth[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_basis[i]); } } } } return NULL; } /*! \fn gchar * get_nth_key (int sp, int id, int obj) \brief retrieve basis or pseudopotential key string for element from global list \param sp the chemical species \param id the list element id of 'sp' to find \param obj 0 = basis sets, 1 = pseudopotentials */ gchar * get_nth_key (int sp, int id, int obj) { int i, j; j = -1; if (obj) { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", pot_keys[i]); } } } } else { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", molopt_keys[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", gth_keys[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", basis_keys[i]); } } } } return NULL; } /*! \fn int cp2k_is_basis_in_database (int sp) \brief does this chemical species have basis set(s) in store ? \param sp the chemical species */ int cp2k_is_basis_in_database (int sp) { int i; for (i=0; i chemistry -> label[sp])) == 0) return 0; } for (i=0; i chemistry -> label[sp])) == 0) return 0; } for (i=0; i chemistry -> label[sp])) == 0) return 0; } return -1; } /*! \fn int cp2k_is_pseudo_in_database (int sp) \brief does this chemical species have pseudopotential(s) in store ? \param sp the chemical species */ int cp2k_is_pseudo_in_database (int sp) { int i; for (i=0; i chemistry -> label[sp])) == 0) return 0; } return -1; } /*! \fn int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) \brief find matching chemical element in basis / pseudo database \param sp the chemical species \param sp_id the list of entries to save \param n_basis_pseudo the number of element(s) to check \param bp_elem the string list to check */ int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) { int i, j; j = 0; for (i=0; i chemistry -> label[sp])) == 0) { j ++; sp_id[j-1] = i; } } return j; } /*! \fn G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) \brief change basis or pseudopotential \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) { int i, j, k; i = combo_get_active (cp2k_spec_combo); j = GPOINTER_TO_INT(data); k = combo_get_active ((GtkWidget *)box); if (k > -1) { tmp_cp2k -> spec_data[i][j] = k; if (tmp_cp2k -> spec_files[i][j] != NULL) { g_free (tmp_cp2k -> spec_files[i][j]); tmp_cp2k -> spec_files[i][j] = NULL; } } } /*! \fn GtkWidget * prepare_basis_combo (int sp, int obj) \brief prepare basis set / pseudopotential combo box \param sp the chemical species \param obj 0 = basis, 1 = pseudopotentials */ GtkWidget * prepare_basis_combo (int sp, int obj) { int i, j; GtkWidget * widg = create_combo (); int * sp_id = g_malloc0(100*sizeof*sp_id); if (obj) { i = prepare_cp2k_basis_pseudo_list (sp, sp_id, N_POTS, pot_elem); if (i > 0) { for (j=0; j 0) { for (j=0; j 0) { for (j=0; j 0) { for (j=0; j spec_files[sp][obj] == NULL) { combo_set_active (widg, tmp_cp2k -> spec_data[sp][obj]); } else { widget_set_sensitive (widg, FALSE); } g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_basis_pseudo_box), GINT_TO_POINTER(obj)); return widg; } atomes_1.3.1/src/calc/cp2k/cp2k_gth-basis.c0000664000175000017500000040211215212624223020001 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_gth-basis.c * @short CP2K GTH basis set, as delivered with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_gth-basis.c' * * Contains: * - CP2K GTH basis set, as delivered with CP2K v9.1 This file contains 3 tables: gth_elem -> the list of chemical elements gth_keys -> the list of keywords cp2k_gth -> finally the complete GTH basis set */ #include "global.h" char * gth_elem[156] = {"H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "He", "He", "He", "He", "He", "He", "He", "Li", "Li", "Li", "Li", "Li", "Li", "Be", "Be", "Be", "Be", "Be", "Be", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "Ne", "Ne", "Ne", "Ne", "Ne", "Ne", "Na", "Na", "Na", "Na", "Na", "Na", "Mg", "Mg", "Mg", "Mg", "Mg", "Mg", "Al", "Al", "Al", "Al", "Al", "Al", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ar", "Ar", "Ar", "Ar", "Ar", "Ar", "W"}; char * gth_keys[156] = {"SZV-GTH", "DZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "DZVP-GTH"}; char * cp2k_gth[156] = {"\n" "H SZV-GTH-q1 SZV-GTH\n" " 1\n" " 1 0 0 4 1\n" " 8.3744350009 -0.0283380461\n" " 1.8058681460 -0.1333810052\n" " 0.4852528328 -0.3995676063\n" " 0.1658236932 -0.5531027541\n" "#","\n" "H DZV-GTH-q1 DZV-GTH\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" "#","\n" "H DZVP-GTH-q1 DZVP-GTH\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" "#","\n" "H TZVP-GTH-q1 TZVP-GTH\n" " 2\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" "#","\n" "H TZV2P-GTH-q1 TZV2P-GTH\n" " 2\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" "#","\n" "H QZV2P-GTH-q1 QZV2P-GTH\n" " 2\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" "#","\n" "H QZV3P-GTH-q1 QZV3P-GTH\n" " 2\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 2.2920000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.8380000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2920000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "H aug-DZVP-GTH-q1 aug-DZVP-GTH\n" " 4\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.0297400000 1.0000000000\n" " 3 1 1 1 1\n" " 0.1410000000 1.0000000000\n" "#","\n" "H aug-TZVP-GTH-q1 aug-TZVP-GTH\n" " 4\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0252600000 1.0000000000\n" " 3 1 1 1 1\n" " 0.1020000000 1.0000000000\n" "#","\n" "H aug-TZV2P-GTH-q1 aug-TZV2P-GTH\n" " 4\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0252600000 1.0000000000\n" " 4 1 1 1 1\n" " 0.1020000000 1.0000000000\n" "#","\n" "H aug-QZV2P-GTH-q1 aug-QZV2P-GTH\n" " 4\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0236300000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0848000000 1.0000000000\n" "#","\n" "H aug-QZV3P-GTH-q1 aug-QZV3P-GTH\n" " 4\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 2.2920000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.8380000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2920000000 0.0000000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0236300000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0848000000 1.0000000000\n" "#","\n" "He SZV-GTH-q2 SZV-GTH\n" " 1\n" " 1 0 0 5 1\n" " 13.1305278312 -0.0500802904\n" " 4.1977275150 -0.1474339352\n" " 1.3647725570 -0.3245281495\n" " 0.4549715461 -0.4365284986\n" " 0.1513197845 -0.2164629317\n" "#","\n" "He DZV-GTH-q2 DZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 13.1305278312 -0.0500802904 0.0000000000\n" " 4.1977275150 -0.1474339352 0.0000000000\n" " 1.3647725570 -0.3245281495 0.0000000000\n" " 0.4549715461 -0.4365284986 0.0000000000\n" " 0.1513197845 -0.2164629317 1.0000000000\n" "#","\n" "He DZVP-GTH-q2 DZVP-GTH\n" " 2\n" " 1 0 0 5 2\n" " 13.1305278312 -0.0500802904 0.0000000000\n" " 4.1977275150 -0.1474339352 0.0000000000\n" " 1.3647725570 -0.3245281495 0.0000000000\n" " 0.4549715461 -0.4365284986 0.0000000000\n" " 0.1513197845 -0.2164629317 1.0000000000\n" " 2 1 1 1 1\n" " 1.2750000000 1.0000000000\n" "#","\n" "He TZVP-GTH-q2 TZVP-GTH\n" " 2\n" " 1 0 0 6 3\n" " 14.9231368362 0.0343142688 0.0000000000 0.0000000000\n" " 5.9479610723 0.0933152472 0.0000000000 0.0000000000\n" " 2.1932485067 0.2143451850 0.0000000000 0.0000000000\n" " 0.8304881034 0.3500759421 0.0000000000 0.0000000000\n" " 0.3182586587 0.3570840512 1.0000000000 0.0000000000\n" " 0.1197839846 0.1270021790 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 1.2750000000 1.0000000000\n" "#","\n" "He TZV2P-GTH-q2 TZV2P-GTH\n" " 2\n" " 1 0 0 6 3\n" " 14.9231368362 0.0343142688 0.0000000000 0.0000000000\n" " 5.9479610723 0.0933152472 0.0000000000 0.0000000000\n" " 2.1932485067 0.2143451850 0.0000000000 0.0000000000\n" " 0.8304881034 0.3500759421 0.0000000000 0.0000000000\n" " 0.3182586587 0.3570840512 1.0000000000 0.0000000000\n" " 0.1197839846 0.1270021790 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 3.0440000000 1.0000000000 0.0000000000\n" " 0.7580000000 0.0000000000 1.0000000000\n" "#","\n" "He QZV2P-GTH-q2 QZV2P-GTH\n" " 2\n" " 1 0 0 7 4\n" " 16.7962354569 -0.0217345796 0.0000000000 0.0000000000 0.0000000000\n" " 8.0784265748 -0.0637981790 0.0000000000 0.0000000000 0.0000000000\n" " 3.2397448253 -0.1438730374 0.0000000000 0.0000000000 0.0000000000\n" " 1.3463173459 -0.2567923947 0.0000000000 0.0000000000 0.0000000000\n" " 0.5669193043 -0.3407783682 1.0000000000 0.0000000000 0.0000000000\n" " 0.2404041556 -0.2752209877 0.0000000000 1.0000000000 0.0000000000\n" " 0.0990547078 -0.0742573863 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 3.0440000000 1.0000000000 0.0000000000\n" " 0.7580000000 0.0000000000 1.0000000000\n" "#","\n" "He QZV3P-GTH-q2 QZV3P-GTH\n" " 2\n" " 1 0 0 7 4\n" " 16.7962354569 -0.0217345796 0.0000000000 0.0000000000 0.0000000000\n" " 8.0784265748 -0.0637981790 0.0000000000 0.0000000000 0.0000000000\n" " 3.2397448253 -0.1438730374 0.0000000000 0.0000000000 0.0000000000\n" " 1.3463173459 -0.2567923947 0.0000000000 0.0000000000 0.0000000000\n" " 0.5669193043 -0.3407783682 1.0000000000 0.0000000000 0.0000000000\n" " 0.2404041556 -0.2752209877 0.0000000000 1.0000000000 0.0000000000\n" " 0.0990547078 -0.0742573863 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 5.9940000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7450000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5600000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Li SZV-GTH-q3 SZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 7.2610457926 -0.2798628497 0.0501840556\n" " 2.1056583087 -0.4477420790 0.1084202571\n" " 0.6439906571 -0.3912929157 0.1448363201\n" " 0.0797152017 -0.0282408543 -0.4643021689\n" " 0.0294029590 0.0106542324 -0.6220213304\n" "#","\n" "Li DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 1 0 1 5 3 2\n" " 7.2610457926 -0.2798628497 0.0501840556 0.0000000000 0.0000000000 0.0000000000\n" " 2.1056583087 -0.4477420790 0.1084202571 0.0000000000 0.0000000000 0.0000000000\n" " 0.6439906571 -0.3912929157 0.1448363201 0.0000000000 1.0000000000 0.0000000000\n" " 0.0797152017 -0.0282408543 -0.4643021689 0.0000000000 0.0000000000 1.0000000000\n" " 0.0294029590 0.0106542324 -0.6220213304 1.0000000000 0.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.1239000000 1.0000000000\n" "#","\n" "Li TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 9.0670525492 -0.1411283591 0.0257097367 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3499909489 -0.2767569948 0.0520569091 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4348215636 -0.4501634495 0.1264219750 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4970537951 -0.2617675690 0.1024067911 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729943466 -0.0116685753 -0.5635707625 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264328979 0.0038616721 -0.5290102979 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1239000000 1.0000000000\n" "#","\n" "Li TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 9.0670525492 -0.1411283591 0.0257097367 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3499909489 -0.2767569948 0.0520569091 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4348215636 -0.4501634495 0.1264219750 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4970537951 -0.2617675690 0.1024067911 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729943466 -0.0116685753 -0.5635707625 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264328979 0.0038616721 -0.5290102979 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1874000000 1.0000000000 0.0000000000\n" " 0.0801000000 0.0000000000 1.0000000000\n" "#","\n" "Li QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 11.2399728913 0.0546031957 0.0121121394 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5.9010009273 0.2707752256 0.0442943986 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.1128841305 0.3250518116 0.0864603159 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.9242200694 0.3360526690 0.0982556510 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.3843405136 0.1477938090 0.0724371635 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0745791133 0.0049656060 -0.5608077915 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0266127545 -0.0013302258 -0.5385875662 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1874000000 1.0000000000 0.0000000000\n" " 0.0801000000 0.0000000000 1.0000000000\n" "#","\n" "Li QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 11.2399728913 0.0546031957 0.0121121394 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5.9010009273 0.2707752256 0.0442943986 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.1128841305 0.3250518116 0.0864603159 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.9242200694 0.3360526690 0.0982556510 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.3843405136 0.1477938090 0.0724371635 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0745791133 0.0049656060 -0.5608077915 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0266127545 -0.0013302258 -0.5385875662 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.3440000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1530000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0680000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be SZV-GTH-q4 SZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 12.0759365620 -0.2957180545 0.0588372089\n" " 3.8545761940 -0.4334460398 0.1288856096\n" " 1.2504781570 -0.3784683226 0.1550415386\n" " 0.1871714430 -0.0264606251 -0.5160084709\n" " 0.0612757198 0.0081452640 -0.5935732462\n" "#","\n" "Be DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 1 0 1 5 3 2\n" " 12.0759365620 -0.2957180545 0.0588372089 0.0000000000 0.0000000000 0.0000000000\n" " 3.8545761940 -0.4334460398 0.1288856096 0.0000000000 0.0000000000 0.0000000000\n" " 1.2504781570 -0.3784683226 0.1550415386 0.0000000000 0.0000000000 0.0000000000\n" " 0.1871714430 -0.0264606251 -0.5160084709 0.0000000000 1.0000000000 0.0000000000\n" " 0.0612757198 0.0081452640 -0.5935732462 1.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2380000000 1.0000000000\n" "#","\n" "Be TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 16.1633017560 0.1058505482 0.0252110810 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2794656488 0.3142306535 0.0592234829 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7431462702 0.4327355582 0.1590642952 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0051192904 0.2646375740 0.0970211162 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765074807 0.0128485143 -0.5606394206 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580432824 -0.0034494712 -0.5479256813 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2380000000 1.0000000000\n" "#","\n" "Be TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 16.1633017560 0.1058505482 0.0252110810 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2794656488 0.3142306535 0.0592234829 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7431462702 0.4327355582 0.1590642952 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0051192904 0.2646375740 0.0970211162 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765074807 0.0128485143 -0.5606394206 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580432824 -0.0034494712 -0.5479256813 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3480000000 1.0000000000 0.0000000000\n" " 0.1803000000 0.0000000000 1.0000000000\n" "#","\n" "Be QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 16.8878782250 -0.0871781047 -0.0213560020 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.7399964830 -0.3154557784 -0.0594803584 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.9043390390 -0.4227762231 -0.1487687019 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0791842760 -0.2848246813 -0.1164217493 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.2337917550 -0.0252413708 0.2786030195 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1037025890 0.0110215162 0.5642008017 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0421510390 -0.0028677576 0.2754009863 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3480000000 1.0000000000 0.0000000000\n" " 0.1803000000 0.0000000000 1.0000000000\n" "#","\n" "Be QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 16.8878782250 -0.0871781047 -0.0213560020 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.7399964830 -0.3154557784 -0.0594803584 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.9043390390 -0.4227762231 -0.1487687019 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0791842760 -0.2848246813 -0.1164217493 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.2337917550 -0.0252413708 0.2786030195 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1037025890 0.0110215162 0.5642008017 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0421510390 -0.0028677576 0.2754009863 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0720000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4410000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1811000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B SZV-GTH-q3 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 2.8854084023 0.1420731829 -0.0759815770\n" " 0.8566849689 -0.0083257749 -0.2508281584\n" " 0.2712991753 -0.6707104603 -0.4610296144\n" " 0.0826101984 -0.4241277148 -0.4419922734\n" "#","\n" "B DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8854084023 0.1420731829 0.0000000000 -0.0759815770 0.0000000000\n" " 0.8566849689 -0.0083257749 0.0000000000 -0.2508281584 0.0000000000\n" " 0.2712991753 -0.6707104603 0.0000000000 -0.4610296144 0.0000000000\n" " 0.0826101984 -0.4241277148 1.0000000000 -0.4419922734 1.0000000000\n" " 3 2 2 1 1\n" " 0.3430000000 1.0000000000\n" "#","\n" "B TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 3.5725567849 0.0919963366 0.0000000000 0.0000000000 -0.0431808210 0.0000000000 0.0000000000\n" " 1.3258097706 0.1075235422 0.0000000000 0.0000000000 -0.1511855730 0.0000000000 0.0000000000\n" " 0.4583887751 -0.3415470752 0.0000000000 0.0000000000 -0.3429313866 0.0000000000 0.0000000000\n" " 0.1620866416 -0.6439245174 1.0000000000 0.0000000000 -0.4414563660 1.0000000000 0.0000000000\n" " 0.0559199264 -0.1753147308 0.0000000000 1.0000000000 -0.2681154092 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3430000000 1.0000000000\n" "#","\n" "B TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 3.5725567849 0.0919963366 0.0000000000 0.0000000000 -0.0431808210 0.0000000000 0.0000000000\n" " 1.3258097706 0.1075235422 0.0000000000 0.0000000000 -0.1511855730 0.0000000000 0.0000000000\n" " 0.4583887751 -0.3415470752 0.0000000000 0.0000000000 -0.3429313866 0.0000000000 0.0000000000\n" " 0.1620866416 -0.6439245174 1.0000000000 0.0000000000 -0.4414563660 1.0000000000 0.0000000000\n" " 0.0559199264 -0.1753147308 0.0000000000 1.0000000000 -0.2681154092 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6610000000 1.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000\n" "#","\n" "B QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 4.1102306804 -0.0620335875 0.0000000000 0.0000000000 0.0000000000 0.0278217612 0.0000000000 0.0000000000 0.0000000000\n" " 1.7172984348 -0.1274529700 0.0000000000 0.0000000000 0.0000000000 0.1085525628 0.0000000000 0.0000000000 0.0000000000\n" " 0.6589800479 0.1200448703 0.0000000000 0.0000000000 0.0000000000 0.2367567166 0.0000000000 0.0000000000 0.0000000000\n" " 0.2700358860 0.5129734657 1.0000000000 0.0000000000 0.0000000000 0.3599759140 1.0000000000 0.0000000000 0.0000000000\n" " 0.1081818865 0.4555842541 0.0000000000 1.0000000000 0.0000000000 0.3683676413 0.0000000000 1.0000000000 0.0000000000\n" " 0.0406426579 0.0612204758 0.0000000000 0.0000000000 1.0000000000 0.1513382480 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6610000000 1.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000\n" "#","\n" "B QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 4.1102306804 -0.0620335875 0.0000000000 0.0000000000 0.0000000000 0.0278217612 0.0000000000 0.0000000000 0.0000000000\n" " 1.7172984348 -0.1274529700 0.0000000000 0.0000000000 0.0000000000 0.1085525628 0.0000000000 0.0000000000 0.0000000000\n" " 0.6589800479 0.1200448703 0.0000000000 0.0000000000 0.0000000000 0.2367567166 0.0000000000 0.0000000000 0.0000000000\n" " 0.2700358860 0.5129734657 1.0000000000 0.0000000000 0.0000000000 0.3599759140 1.0000000000 0.0000000000 0.0000000000\n" " 0.1081818865 0.4555842541 0.0000000000 1.0000000000 0.0000000000 0.3683676413 0.0000000000 1.0000000000 0.0000000000\n" " 0.0406426579 0.0612204758 0.0000000000 0.0000000000 1.0000000000 0.1513382480 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.1100000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1450000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "C SZV-GTH-q4 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 4.3362376436 0.1490797872 -0.0878123619\n" " 1.2881838513 -0.0292640031 -0.2775560300\n" " 0.4037767149 -0.6882040510 -0.4712295093\n" " 0.1187877657 -0.3964426906 -0.4058039291\n" "#","\n" "C DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000\n" " 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000\n" " 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000\n" " 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "C TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "C TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" "#","\n" "C QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" "#","\n" "C QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8480000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6490000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2280000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "C aug-DZVP-GTH-q4 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000\n" " 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000\n" " 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000\n" " 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04690000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04041000 1.0000000000\n" "#","\n" "C aug-TZVP-GTH-q4 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04402000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03569000 1.0000000000\n" "#","\n" "C aug-TZV2P-GTH-q4 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04402000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03569000 1.0000000000\n" "#","\n" "C aug-QZV2P-GTH-q4 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04145000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03218000 1.0000000000\n" "#","\n" "C aug-QZV3P-GTH-q4 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8480000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6490000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2280000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04145000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03218000 1.0000000000\n" "#","\n" "N SZV-GTH-q5 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 6.1526903413 0.1506300537 -0.0950603476\n" " 1.8236332280 -0.0360100734 -0.2918864295\n" " 0.5676628870 -0.6942023212 -0.4739050050\n" " 0.1628222852 -0.3878929987 -0.3893418670\n" "#","\n" "N DZVP-GTH-q5 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1526903413 0.1506300537 0.0000000000 -0.0950603476 0.0000000000\n" " 1.8236332280 -0.0360100734 0.0000000000 -0.2918864295 0.0000000000\n" " 0.5676628870 -0.6942023212 0.0000000000 -0.4739050050 0.0000000000\n" " 0.1628222852 -0.3878929987 1.0000000000 -0.3893418670 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" "#","\n" "N TZVP-GTH-q5 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" "#","\n" "N TZV2P-GTH-q5 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" "#","\n" "N QZV2P-GTH-q5 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" "#","\n" "N QZV3P-GTH-q5 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 2.8370000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.9680000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3350000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "N aug-DZVP-GTH-q5 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 6.1526903413 0.1506300537 0.0000000000 -0.0950603476 0.0000000000\n" " 1.8236332280 -0.0360100734 0.0000000000 -0.2918864295 0.0000000000\n" " 0.5676628870 -0.6942023212 0.0000000000 -0.4739050050 0.0000000000\n" " 0.1628222852 -0.3878929987 1.0000000000 -0.3893418670 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.06124000 1.0000000000\n" " 2 1 1 1 1\n" " 0.05611000 1.0000000000\n" "#","\n" "N aug-TZVP-GTH-q5 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05760000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04910000 1.0000000000\n" "#","\n" "N aug-TZV2P-GTH-q5 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05760000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04910000 1.0000000000\n" "#","\n" "N aug-QZV2P-GTH-q5 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05464000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04402000 1.0000000000\n" "#","\n" "N aug-QZV3P-GTH-q5 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 2.8370000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.9680000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3350000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05464000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04402000 1.0000000000\n" "#","\n" "O SZV-GTH-q6 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 8.3043855492 0.1510165999 -0.0995679273\n" " 2.4579484191 -0.0393195364 -0.3011422449\n" " 0.7597373434 -0.6971724029 -0.4750857083\n" " 0.2136388632 -0.3841133622 -0.3798777957\n" "#","\n" "O DZVP-GTH-q6 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 8.3043855492 0.1510165999 0.0000000000 -0.0995679273 0.0000000000\n" " 2.4579484191 -0.0393195364 0.0000000000 -0.3011422449 0.0000000000\n" " 0.7597373434 -0.6971724029 0.0000000000 -0.4750857083 0.0000000000\n" " 0.2136388632 -0.3841133622 1.0000000000 -0.3798777957 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" "#","\n" "O TZVP-GTH-q6 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" "#","\n" "O TZV2P-GTH-q6 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" "#","\n" "O QZV2P-GTH-q6 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" "#","\n" "O QZV3P-GTH-q6 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 3.7750000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.3000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.4440000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "O aug-DZVP-GTH-q6 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 8.3043855492 0.1510165999 0.0000000000 -0.0995679273 0.0000000000\n" " 2.4579484191 -0.0393195364 0.0000000000 -0.3011422449 0.0000000000\n" " 0.7597373434 -0.6971724029 0.0000000000 -0.4750857083 0.0000000000\n" " 0.2136388632 -0.3841133622 1.0000000000 -0.3798777957 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0789600000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0685600000 1.0000000000\n" "#","\n" "O aug-TZVP-GTH-q6 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0737600000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0597400000 1.0000000000\n" "#","\n" "O aug-TZV2P-GTH-q6 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000 0.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0737600000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0597400000 1.0000000000\n" "#","\n" "O aug-QZV2P-GTH-q6 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0695900000 1.0000000000\n" " 6 1 1 1 1\n" " 0.0534800000 1.0000000000\n" "#","\n" "O aug-QZV3P-GTH-q6 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 3.7750000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.3000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.4440000000 0.0000000000 0.0000000000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0695900000 1.0000000000\n" " 6 1 1 1 1\n" " 0.0534800000 1.0000000000\n" "#","\n" "F SZV-GTH-q7 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 10.7079832847 0.1525178777 -0.1028649478\n" " 3.1757210204 -0.0450363043 -0.3085265610\n" " 0.9750975650 -0.6987425604 -0.4757649909\n" " 0.2701246771 -0.3801470341 -0.3724954705\n" "#","\n" "F DZVP-GTH-q7 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7079832847 0.1525178777 0.0000000000 -0.1028649478 0.0000000000\n" " 3.1757210204 -0.0450363043 0.0000000000 -0.3085265610 0.0000000000\n" " 0.9750975650 -0.6987425604 0.0000000000 -0.4757649909 0.0000000000\n" " 0.2701246771 -0.3801470341 1.0000000000 -0.3724954705 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" "#","\n" "F TZVP-GTH-q7 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" "#","\n" "F TZV2P-GTH-q7 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" "#","\n" "F QZV2P-GTH-q7 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" "#","\n" "F QZV3P-GTH-q7 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 5.0140000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7250000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5860000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "F aug-DZVP-GTH-q7 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 10.7079832847 0.1525178777 0.0000000000 -0.1028649478 0.0000000000\n" " 3.1757210204 -0.0450363043 0.0000000000 -0.3085265610 0.0000000000\n" " 0.9750975650 -0.6987425604 0.0000000000 -0.4757649909 0.0000000000\n" " 0.2701246771 -0.3801470341 1.0000000000 -0.3724954705 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09863000 1.0000000000\n" " 2 1 1 1 1\n" " 0.08502000 1.0000000000\n" "#","\n" "F aug-TZVP-GTH-q7 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09158000 1.0000000000\n" " 2 1 1 1 1\n" " 0.07361000 1.0000000000\n" "#","\n" "F aug-TZV2P-GTH-q7 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09158000 1.0000000000\n" " 2 1 1 1 1\n" " 0.07361000 1.0000000000\n" "#","\n" "F aug-QZV2P-GTH-q7 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.08594000 1.0000000000\n" " 2 1 1 1 1\n" " 0.06568000 1.0000000000\n" "#","\n" "F aug-QZV3P-GTH-q7 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 5.0140000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7250000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5860000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.08594000 1.0000000000\n" " 2 1 1 1 1\n" " 0.06568000 1.0000000000\n" "#","\n" "Ne SZV-GTH-q8 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 13.7594449156 0.1483426747 -0.1044041225\n" " 4.0425282819 -0.0356307196 -0.3108899020\n" " 1.2355181615 -0.7010729520 -0.4760216511\n" " 0.3367029925 -0.3841118307 -0.3721570391\n" "#","\n" "Ne DZVP-GTH-q8 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 13.7594449156 0.1483426747 0.0000000000 -0.1044041225 0.0000000000\n" " 4.0425282819 -0.0356307196 0.0000000000 -0.3108899020 0.0000000000\n" " 1.2355181615 -0.7010729520 0.0000000000 -0.4760216511 0.0000000000\n" " 0.3367029925 -0.3841118307 1.0000000000 -0.3721570391 1.0000000000\n" " 3 2 2 1 1\n" " 2.2020000000 1.0000000000\n" "#","\n" "Ne TZVP-GTH-q8 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 17.0406976441 0.0956582854 0.0000000000 0.0000000000 -0.0631287607 0.0000000000 0.0000000000\n" " 6.1494859942 0.1095546500 0.0000000000 0.0000000000 -0.1953504506 0.0000000000 0.0000000000\n" " 2.1810891675 -0.3850952695 0.0000000000 0.0000000000 -0.3747245390 0.0000000000 0.0000000000\n" " 0.7370336206 -0.6201458095 1.0000000000 0.0000000000 -0.4151315545 1.0000000000 0.0000000000\n" " 0.2296296929 -0.1719183539 0.0000000000 1.0000000000 -0.2286539782 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 2.2020000000 1.0000000000\n" "#","\n" "Ne TZV2P-GTH-q8 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 17.0406976441 0.0956582854 0.0000000000 0.0000000000 -0.0631287607 0.0000000000 0.0000000000\n" " 6.1494859942 0.1095546500 0.0000000000 0.0000000000 -0.1953504506 0.0000000000 0.0000000000\n" " 2.1810891675 -0.3850952695 0.0000000000 0.0000000000 -0.3747245390 0.0000000000 0.0000000000\n" " 0.7370336206 -0.6201458095 1.0000000000 0.0000000000 -0.4151315545 1.0000000000 0.0000000000\n" " 0.2296296929 -0.1719183539 0.0000000000 1.0000000000 -0.2286539782 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 4.0140000000 1.0000000000 0.0000000000\n" " 1.0960000000 0.0000000000 1.0000000000\n" "#","\n" "Ne QZV2P-GTH-q8 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 19.5499411153 -0.0632766758 0.0000000000 0.0000000000 0.0000000000 0.0422167837 0.0000000000 0.0000000000 0.0000000000\n" " 8.0769601838 -0.1370919085 0.0000000000 0.0000000000 0.0000000000 0.1383304483 0.0000000000 0.0000000000 0.0000000000\n" " 3.1678758504 0.1578325934 0.0000000000 0.0000000000 0.0000000000 0.2813677061 0.0000000000 0.0000000000 0.0000000000\n" " 1.2535625634 0.5200705489 1.0000000000 0.0000000000 0.0000000000 0.3669217463 1.0000000000 0.0000000000 0.0000000000\n" " 0.4749693396 0.4313985613 0.0000000000 1.0000000000 0.0000000000 0.3213403173 0.0000000000 1.0000000000 0.0000000000\n" " 0.1666682167 0.0613040256 0.0000000000 0.0000000000 1.0000000000 0.1317714527 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 4.0140000000 1.0000000000 0.0000000000\n" " 1.0960000000 0.0000000000 1.0000000000\n" "#","\n" "Ne QZV3P-GTH-q8 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 19.5499411153 -0.0632766758 0.0000000000 0.0000000000 0.0000000000 0.0422167837 0.0000000000 0.0000000000 0.0000000000\n" " 8.0769601838 -0.1370919085 0.0000000000 0.0000000000 0.0000000000 0.1383304483 0.0000000000 0.0000000000 0.0000000000\n" " 3.1678758504 0.1578325934 0.0000000000 0.0000000000 0.0000000000 0.2813677061 0.0000000000 0.0000000000 0.0000000000\n" " 1.2535625634 0.5200705489 1.0000000000 0.0000000000 0.0000000000 0.3669217463 1.0000000000 0.0000000000 0.0000000000\n" " 0.4749693396 0.4313985613 0.0000000000 1.0000000000 0.0000000000 0.3213403173 0.0000000000 1.0000000000 0.0000000000\n" " 0.1666682167 0.0613040256 0.0000000000 0.0000000000 1.0000000000 0.1317714527 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 6.4710000000 1.0000000000 0.0000000000 0.0000000000\n" " 2.2130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.7470000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Na SZV-GTH-q9 SZV-GTH\n" " 1\n" " 2 0 1 6 2 1\n" " 17.6698382207 -0.1362364777 0.0270957219 0.0791980974\n" " 6.9070658063 -0.0645835666 0.0098734119 0.2184139257\n" " 2.6098601451 0.3866153961 -0.0737170396 0.3764887364\n" " 0.9649548796 0.5971358883 -0.2186742776 0.3922304007\n" " 0.3400348369 0.1756697026 -0.0301066303 0.1808407220\n" " 0.0432486046 -0.0017104621 1.0388865857 0.0057696324\n" "#","\n" "Na DZVP-GTH-q9 DZVP-GTH\n" " 2\n" " 2 0 1 6 3 2\n" " 17.6698382207 -0.1362364777 0.0270957219 0.0000000000 0.0791980974 0.0000000000\n" " 6.9070658063 -0.0645835666 0.0098734119 0.0000000000 0.2184139257 0.0000000000\n" " 2.6098601451 0.3866153961 -0.0737170396 0.0000000000 0.3764887364 0.0000000000\n" " 0.9649548796 0.5971358883 -0.2186742776 0.0000000000 0.3922304007 0.0000000000\n" " 0.3400348369 0.1756697026 -0.0301066303 0.0000000000 0.1808407220 0.0000000000\n" " 0.0432486046 -0.0017104621 1.0388865857 1.0000000000 0.0057696324 1.0000000000\n" " 3 2 2 1 1\n" " 0.0973000000 1.0000000000\n" "#","\n" "Na TZVP-GTH-q9 TZVP-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 18.1210741090 -0.1275232222 -0.0248047945 0.0000000000 0.0000000000 0.0729874345 0.0000000000 0.0000000000\n" " 7.3775066400 -0.0812376594 -0.0171596817 0.0000000000 0.0000000000 0.1996717590 0.0000000000 0.0000000000\n" " 2.8817585986 0.3277442268 0.0724090847 0.0000000000 0.0000000000 0.3527504683 0.0000000000 0.0000000000\n" " 1.0990235357 0.5946658147 0.1739886836 0.0000000000 0.0000000000 0.3936231447 0.0000000000 0.0000000000\n" " 0.4007387720 0.2436047977 0.1404493622 0.0000000000 0.0000000000 0.2171401481 0.0000000000 0.0000000000\n" " 0.0916859420 -0.0017574619 -0.3860533721 1.0000000000 0.0000000000 0.0205070521 1.0000000000 0.0000000000\n" " 0.0309750158 0.0016745741 -0.7360619920 0.0000000000 1.0000000000 -0.0045593404 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0973000000 1.0000000000\n" "#","\n" "Na TZV2P-GTH-q9 TZV2P-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 18.1210741090 -0.1275232222 -0.0248047945 0.0000000000 0.0000000000 0.0729874345 0.0000000000 0.0000000000\n" " 7.3775066400 -0.0812376594 -0.0171596817 0.0000000000 0.0000000000 0.1996717590 0.0000000000 0.0000000000\n" " 2.8817585986 0.3277442268 0.0724090847 0.0000000000 0.0000000000 0.3527504683 0.0000000000 0.0000000000\n" " 1.0990235357 0.5946658147 0.1739886836 0.0000000000 0.0000000000 0.3936231447 0.0000000000 0.0000000000\n" " 0.4007387720 0.2436047977 0.1404493622 0.0000000000 0.0000000000 0.2171401481 0.0000000000 0.0000000000\n" " 0.0916859420 -0.0017574619 -0.3860533721 1.0000000000 0.0000000000 0.0205070521 1.0000000000 0.0000000000\n" " 0.0309750158 0.0016745741 -0.7360619920 0.0000000000 1.0000000000 -0.0045593404 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1367000000 1.0000000000 0.0000000000\n" " 0.0636000000 0.0000000000 1.0000000000\n" "#","\n" "Na QZV2P-GTH-q9 QZV2P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 19.7241294087 0.0964646065 0.0186968769 0.0000000000 0.0000000000 0.0000000000 -0.0533754431 0.0000000000 0.0000000000 0.0000000000\n" " 9.3287912748 0.1166761476 0.0236192089 0.0000000000 0.0000000000 0.0000000000 -0.1400719948 0.0000000000 0.0000000000 0.0000000000\n" " 4.1199901709 -0.1393562188 -0.0290484898 0.0000000000 0.0000000000 0.0000000000 -0.2641114390 0.0000000000 0.0000000000 0.0000000000\n" " 1.7720338111 -0.4584822127 -0.1108583114 0.0000000000 0.0000000000 0.0000000000 -0.3519032892 0.0000000000 0.0000000000 0.0000000000\n" " 0.7498415377 -0.4636596929 -0.1735322668 0.0000000000 0.0000000000 0.0000000000 -0.3064604543 0.0000000000 0.0000000000 0.0000000000\n" " 0.2996060606 -0.1092610807 -0.0565756124 1.0000000000 0.0000000000 0.0000000000 -0.1309377611 1.0000000000 0.0000000000 0.0000000000\n" " 0.0698044897 0.0012749633 0.5743314061 0.0000000000 1.0000000000 0.0000000000 -0.0074120120 0.0000000000 1.0000000000 0.0000000000\n" " 0.0255058383 -0.0006119521 0.5364207511 0.0000000000 0.0000000000 1.0000000000 0.0017424530 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1367000000 1.0000000000 0.0000000000\n" " 0.0636000000 0.0000000000 1.0000000000\n" "#","\n" "Na QZV3P-GTH-q9 QZV3P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 19.7241294087 0.0964646065 0.0186968769 0.0000000000 0.0000000000 0.0000000000 -0.0533754431 0.0000000000 0.0000000000 0.0000000000\n" " 9.3287912748 0.1166761476 0.0236192089 0.0000000000 0.0000000000 0.0000000000 -0.1400719948 0.0000000000 0.0000000000 0.0000000000\n" " 4.1199901709 -0.1393562188 -0.0290484898 0.0000000000 0.0000000000 0.0000000000 -0.2641114390 0.0000000000 0.0000000000 0.0000000000\n" " 1.7720338111 -0.4584822127 -0.1108583114 0.0000000000 0.0000000000 0.0000000000 -0.3519032892 0.0000000000 0.0000000000 0.0000000000\n" " 0.7498415377 -0.4636596929 -0.1735322668 0.0000000000 0.0000000000 0.0000000000 -0.3064604543 0.0000000000 0.0000000000 0.0000000000\n" " 0.2996060606 -0.1092610807 -0.0565756124 1.0000000000 0.0000000000 0.0000000000 -0.1309377611 1.0000000000 0.0000000000 0.0000000000\n" " 0.0698044897 0.0012749633 0.5743314061 0.0000000000 1.0000000000 0.0000000000 -0.0074120120 0.0000000000 1.0000000000 0.0000000000\n" " 0.0255058383 -0.0006119521 0.5364207511 0.0000000000 0.0000000000 1.0000000000 0.0017424530 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.1538000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0865000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0487000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Mg SZV-GTH-q10 SZV-GTH\n" " 1\n" " 2 0 1 6 2 1\n" " 28.4894000448 -0.0662729183 0.0165018731 0.0464558886\n" " 11.7278204570 -0.1706135571 0.0374283767 0.1664914738\n" " 4.4443941842 0.2494781478 -0.0517347280 0.3580941241\n" " 1.6070266284 0.6423214818 -0.2647624258 0.4356599896\n" " 0.5690630460 0.2933234669 -0.0948461091 0.2229558550\n" " 0.0763496459 -0.0002717019 1.0630071183 0.0085986529\n" "#","\n" "Mg DZVP-GTH-q10 DZVP-GTH\n" " 2\n" " 2 0 1 6 3 2\n" " 28.4894000448 -0.0662729183 0.0165018731 0.0000000000 0.0464558886 0.0000000000\n" " 11.7278204570 -0.1706135571 0.0374283767 0.0000000000 0.1664914738 0.0000000000\n" " 4.4443941842 0.2494781478 -0.0517347280 0.0000000000 0.3580941241 0.0000000000\n" " 1.6070266284 0.6423214818 -0.2647624258 0.0000000000 0.4356599896 0.0000000000\n" " 0.5690630460 0.2933234669 -0.0948461091 0.0000000000 0.2229558550 0.0000000000\n" " 0.0763496459 -0.0002717019 1.0630071183 1.0000000000 0.0085986529 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg TZVP-GTH-q10 TZVP-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 32.6102127160 -0.0379330911 -0.0088936017 0.0000000000 0.0000000000 0.0307150457 0.0000000000 0.0000000000\n" " 14.0525311690 -0.1824731301 -0.0446185212 0.0000000000 0.0000000000 0.1365611853 0.0000000000 0.0000000000\n" " 5.3750565930 0.1414840059 0.0361139004 0.0000000000 0.0000000000 0.3216977104 0.0000000000 0.0000000000\n" " 1.9603294652 0.6092794423 0.1991926589 0.0000000000 0.0000000000 0.4406864532 0.0000000000 0.0000000000\n" " 0.6985451378 0.4085543085 0.2360727936 0.0000000000 0.0000000000 0.2830209201 0.0000000000 0.0000000000\n" " 0.1599451430 0.0093835755 -0.4060439955 1.0000000000 0.0000000000 0.0314202293 1.0000000000 0.0000000000\n" " 0.0539901438 -0.0000358721 -0.7421716821 0.0000000000 1.0000000000 -0.0070197374 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg TZV2P-GTH-q10 TZV2P-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 32.6102127160 -0.0379330911 -0.0088936017 0.0000000000 0.0000000000 0.0307150457 0.0000000000 0.0000000000\n" " 14.0525311690 -0.1824731301 -0.0446185212 0.0000000000 0.0000000000 0.1365611853 0.0000000000 0.0000000000\n" " 5.3750565930 0.1414840059 0.0361139004 0.0000000000 0.0000000000 0.3216977104 0.0000000000 0.0000000000\n" " 1.9603294652 0.6092794423 0.1991926589 0.0000000000 0.0000000000 0.4406864532 0.0000000000 0.0000000000\n" " 0.6985451378 0.4085543085 0.2360727936 0.0000000000 0.0000000000 0.2830209201 0.0000000000 0.0000000000\n" " 0.1599451430 0.0093835755 -0.4060439955 1.0000000000 0.0000000000 0.0314202293 1.0000000000 0.0000000000\n" " 0.0539901438 -0.0000358721 -0.7421716821 0.0000000000 1.0000000000 -0.0070197374 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.2940000000 1.0000000000 0.0000000000\n" " 0.1260000000 0.0000000000 1.0000000000\n" "#","\n" "Mg QZV2P-GTH-q10 QZV2P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 38.2989934401 0.0104376055 0.0024542703 0.0000000000 0.0000000000 0.0000000000 -0.0169307005 0.0000000000 0.0000000000 0.0000000000\n" " 18.2352594129 0.1600713964 0.0383890090 0.0000000000 0.0000000000 0.0000000000 -0.0880606004 0.0000000000 0.0000000000 0.0000000000\n" " 7.8322039250 0.0236151231 0.0063757667 0.0000000000 0.0000000000 0.0000000000 -0.2233078530 0.0000000000 0.0000000000 0.0000000000\n" " 3.2096669080 -0.3496886711 -0.0967311125 0.0000000000 0.0000000000 0.0000000000 -0.3590124156 0.0000000000 0.0000000000 0.0000000000\n" " 1.3215191150 -0.5744578292 -0.2302830710 0.0000000000 0.0000000000 0.0000000000 -0.3636484834 0.0000000000 0.0000000000 0.0000000000\n" " 0.5219034472 -0.2167187848 -0.1302378952 1.0000000000 0.0000000000 0.0000000000 -0.1772276014 1.0000000000 0.0000000000 0.0000000000\n" " 0.1263242017 -0.0012887617 0.5892536861 0.0000000000 1.0000000000 0.0000000000 -0.0121989604 0.0000000000 1.0000000000 0.0000000000\n" " 0.0449896165 -0.0003669674 0.5569471332 0.0000000000 0.0000000000 1.0000000000 0.0026934953 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.2940000000 1.0000000000 0.0000000000\n" " 0.1260000000 0.0000000000 1.0000000000\n" "#","\n" "Mg QZV3P-GTH-q10 QZV3P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 38.2989934401 0.0104376055 0.0024542703 0.0000000000 0.0000000000 0.0000000000 -0.0169307005 0.0000000000 0.0000000000 0.0000000000\n" " 18.2352594129 0.1600713964 0.0383890090 0.0000000000 0.0000000000 0.0000000000 -0.0880606004 0.0000000000 0.0000000000 0.0000000000\n" " 7.8322039250 0.0236151231 0.0063757667 0.0000000000 0.0000000000 0.0000000000 -0.2233078530 0.0000000000 0.0000000000 0.0000000000\n" " 3.2096669080 -0.3496886711 -0.0967311125 0.0000000000 0.0000000000 0.0000000000 -0.3590124156 0.0000000000 0.0000000000 0.0000000000\n" " 1.3215191150 -0.5744578292 -0.2302830710 0.0000000000 0.0000000000 0.0000000000 -0.3636484834 0.0000000000 0.0000000000 0.0000000000\n" " 0.5219034472 -0.2167187848 -0.1302378952 1.0000000000 0.0000000000 0.0000000000 -0.1772276014 1.0000000000 0.0000000000 0.0000000000\n" " 0.1263242017 -0.0012887617 0.5892536861 0.0000000000 1.0000000000 0.0000000000 -0.0121989604 0.0000000000 1.0000000000 0.0000000000\n" " 0.0449896165 -0.0003669674 0.5569471332 0.0000000000 0.0000000000 1.0000000000 0.0026934953 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.3570000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1944000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1060000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Al SZV-GTH-q3 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 0.9504275958 0.2820078575 0.0257257859\n" " 0.2947366659 -0.2787607042 -0.2528156908\n" " 0.1124426785 -0.7494973519 -0.5124696636\n" " 0.0396003631 -0.1645895071 -0.3831165034\n" "#","\n" "Al DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9504275958 0.2820078575 0.0000000000 0.0257257859 0.0000000000\n" " 0.2947366659 -0.2787607042 0.0000000000 -0.2528156908 0.0000000000\n" " 0.1124426785 -0.7494973519 0.0000000000 -0.5124696636 0.0000000000\n" " 0.0396003631 -0.1645895071 1.0000000000 -0.3831165034 1.0000000000\n" " 3 2 2 1 1\n" " 0.1890000000 1.0000000000\n" "#","\n" "Al TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 0.9710403542 0.2731273083 0.0000000000 0.0000000000 0.0318495312 0.0000000000 0.0000000000\n" " 0.3604758056 -0.1164353642 0.0000000000 0.0000000000 -0.1582365164 0.0000000000 0.0000000000\n" " 0.1582849401 -0.6159606293 0.0000000000 0.0000000000 -0.3791239519 0.0000000000 0.0000000000\n" " 0.0674736203 -0.4172871263 1.0000000000 0.0000000000 -0.4457455282 1.0000000000 0.0000000000\n" " 0.0267010818 -0.0326661237 0.0000000000 1.0000000000 -0.1788784308 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1890000000 1.0000000000\n" "#","\n" "Al TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 0.9710403542 0.2731273083 0.0000000000 0.0000000000 0.0318495312 0.0000000000 0.0000000000\n" " 0.3604758056 -0.1164353642 0.0000000000 0.0000000000 -0.1582365164 0.0000000000 0.0000000000\n" " 0.1582849401 -0.6159606293 0.0000000000 0.0000000000 -0.3791239519 0.0000000000 0.0000000000\n" " 0.0674736203 -0.4172871263 1.0000000000 0.0000000000 -0.4457455282 1.0000000000 0.0000000000\n" " 0.0267010818 -0.0326661237 0.0000000000 1.0000000000 -0.1788784308 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3330000000 1.0000000000 0.0000000000\n" " 0.1090000000 0.0000000000 1.0000000000\n" "#","\n" "Al QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0705249839 0.0027352701 0.0000000000 0.0000000000 0.0000000000 0.0044124453 0.0000000000 0.0000000000 0.0000000000\n" " 0.9962478983 -0.2668117634 0.0000000000 0.0000000000 0.0000000000 -0.0401883011 0.0000000000 0.0000000000 0.0000000000\n" " 0.4094779636 0.0618740192 0.0000000000 0.0000000000 0.0000000000 0.1289865679 0.0000000000 0.0000000000 0.0000000000\n" " 0.1732890531 0.5987573069 1.0000000000 0.0000000000 0.0000000000 0.3723262575 1.0000000000 0.0000000000 0.0000000000\n" " 0.0723986239 0.4707960559 0.0000000000 1.0000000000 0.0000000000 0.4626980717 0.0000000000 1.0000000000 0.0000000000\n" " 0.0282432465 0.0425944411 0.0000000000 0.0000000000 1.0000000000 0.2032552207 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3330000000 1.0000000000 0.0000000000\n" " 0.1090000000 0.0000000000 1.0000000000\n" "#","\n" "Al QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0705249839 0.0027352701 0.0000000000 0.0000000000 0.0000000000 0.0044124453 0.0000000000 0.0000000000 0.0000000000\n" " 0.9962478983 -0.2668117634 0.0000000000 0.0000000000 0.0000000000 -0.0401883011 0.0000000000 0.0000000000 0.0000000000\n" " 0.4094779636 0.0618740192 0.0000000000 0.0000000000 0.0000000000 0.1289865679 0.0000000000 0.0000000000 0.0000000000\n" " 0.1732890531 0.5987573069 1.0000000000 0.0000000000 0.0000000000 0.3723262575 1.0000000000 0.0000000000 0.0000000000\n" " 0.0723986239 0.4707960559 0.0000000000 1.0000000000 0.0000000000 0.4626980717 0.0000000000 1.0000000000 0.0000000000\n" " 0.0282432465 0.0425944411 0.0000000000 0.0000000000 1.0000000000 0.2032552207 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.4940000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0804000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Si SZV-GTH-q4 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.2032403600 0.3290356759 0.0474536439\n" " 0.4688385970 -0.2533162616 -0.2594495462\n" " 0.1679853910 -0.7870936517 -0.5440932235\n" " 0.0575616890 -0.1909870193 -0.3623984652\n" "#","\n" "Si DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2032403600 0.3290356759 0.0000000000 0.0474536439 0.0000000000\n" " 0.4688385970 -0.2533162616 0.0000000000 -0.2594495462 0.0000000000\n" " 0.1679853910 -0.7870936517 0.0000000000 -0.5440932235 0.0000000000\n" " 0.0575616890 -0.1909870193 1.0000000000 -0.3623984652 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" "#","\n" "Si TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" "#","\n" "Si TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" "#","\n" "Si QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" "#","\n" "Si QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.7600000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.3020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1200000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Si aug-DZVP-GTH-q4 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.2032403600 0.3290356759 0.0000000000 0.0474536439 0.0000000000\n" " 0.4688385970 -0.2533162616 0.0000000000 -0.2594495462 0.0000000000\n" " 0.1679853910 -0.7870936517 0.0000000000 -0.5440932235 0.0000000000\n" " 0.0575616890 -0.1909870193 1.0000000000 -0.3623984652 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03320000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02500000 1.0000000000\n" "#","\n" "Si aug-TZVP-GTH-q4 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03300000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02370000 1.0000000000\n" "#","\n" "Si aug-TZV2P-GTH-q4 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03300000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02370000 1.0000000000\n" "#","\n" "Si aug-QZV2P-GTH-q4 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.02750000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02000000 1.0000000000\n" "#","\n" "Si aug-QZV3P-GTH-q4 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.7600000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.3020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1200000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.02750000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02000000 1.0000000000\n" "#","\n" "P SZV-GTH-q5 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.4960907993 0.3653124842 0.0816205767\n" " 0.7169067467 -0.2125748699 -0.2627397053\n" " 0.2411464781 -0.8136091436 -0.5627246555\n" " 0.0803414677 -0.2362413556 -0.3691448735\n" "#","\n" "P DZVP-GTH-q5 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4960907993 0.3653124842 0.0000000000 0.0816205767 0.0000000000\n" " 0.7169067467 -0.2125748699 0.0000000000 -0.2627397053 0.0000000000\n" " 0.2411464781 -0.8136091436 0.0000000000 -0.5627246555 0.0000000000\n" " 0.0803414677 -0.2362413556 1.0000000000 -0.3691448735 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" "#","\n" "P TZVP-GTH-q5 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" "#","\n" "P TZV2P-GTH-q5 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" "#","\n" "P QZV2P-GTH-q5 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" "#","\n" "P QZV3P-GTH-q5 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0360000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1650000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "P aug-DZVP-GTH-q5 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.4960907993 0.3653124842 0.0000000000 0.0816205767 0.0000000000\n" " 0.7169067467 -0.2125748699 0.0000000000 -0.2627397053 0.0000000000\n" " 0.2411464781 -0.8136091436 0.0000000000 -0.5627246555 0.0000000000\n" " 0.0803414677 -0.2362413556 1.0000000000 -0.3691448735 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04170000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03430000 1.0000000000\n" "#","\n" "P aug-TZVP-GTH-q5 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04090000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03070000 1.0000000000\n" "#","\n" "P aug-TZV2P-GTH-q5 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04090000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03070000 1.0000000000\n" "#","\n" "P aug-QZV2P-GTH-q5 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03540000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02720000 1.0000000000\n" "#","\n" "P aug-QZV3P-GTH-q5 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0360000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1650000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03540000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02720000 1.0000000000\n" "#","\n" "S SZV-GTH-q6 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.8379629578 0.3832142891 0.1221358296\n" " 1.0357730084 -0.1682257315 -0.2752002461\n" " 0.3297969875 -0.8258488166 -0.5729054592\n" " 0.1073535471 -0.2832758052 -0.3825468137\n" "#","\n" "S DZVP-GTH-q6 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8379629578 0.3832142891 0.0000000000 0.1221358296 0.0000000000\n" " 1.0357730084 -0.1682257315 0.0000000000 -0.2752002461 0.0000000000\n" " 0.3297969875 -0.8258488166 0.0000000000 -0.5729054592 0.0000000000\n" " 0.1073535471 -0.2832758052 1.0000000000 -0.3825468137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" "#","\n" "S TZVP-GTH-q6 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" "#","\n" "S TZV2P-GTH-q6 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" "#","\n" "S QZV2P-GTH-q6 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" "#","\n" "S QZV3P-GTH-q6 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.2500000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.5040000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2030000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "S aug-DZVP-GTH-q6 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.8379629578 0.3832142891 0.0000000000 0.1221358296 0.0000000000\n" " 1.0357730084 -0.1682257315 0.0000000000 -0.2752002461 0.0000000000\n" " 0.3297969875 -0.8258488166 0.0000000000 -0.5729054592 0.0000000000\n" " 0.1073535471 -0.2832758052 1.0000000000 -0.3825468137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05070000 1.0000000000\n" " 3 1 1 1 1 \n" " 0.03990000 1.0000000000\n" "#","\n" "S aug-TZVP-GTH-q6 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04970000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03510000 1.0000000000\n" "#","\n" "S aug-TZV2P-GTH-q6 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04970000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03510000 1.0000000000\n" "#","\n" "S aug-QZV2P-GTH-q6 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04280000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03170000 1.0000000000\n" "#","\n" "S aug-QZV3P-GTH-q6 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.2500000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.5040000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2030000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04280000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03170000 1.0000000000\n" "#","\n" "Cl SZV-GTH-q7 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 2.2321759828 0.3787844947 0.1555385229\n" " 1.3787736290 -0.1239714599 -0.2931741896\n" " 0.4264904045 -0.8298226129 -0.5781097351\n" " 0.1366670312 -0.3175023225 -0.3901110870\n" "#","\n" "Cl DZVP-GTH-q7 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787844947 0.0000000000 0.1555385229 0.0000000000\n" " 1.3787736290 -0.1239714599 0.0000000000 -0.2931741896 0.0000000000\n" " 0.4264904045 -0.8298226129 0.0000000000 -0.5781097351 0.0000000000\n" " 0.1366670312 -0.3175023225 1.0000000000 -0.3901110870 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "Cl TZVP-GTH-q7 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "Cl TZV2P-GTH-q7 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" "#","\n" "Cl QZV2P-GTH-q7 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" "#","\n" "Cl QZV3P-GTH-q7 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.5510000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6280000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2540000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Cl aug-DZVP-GTH-q7 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787844947 0.0000000000 0.1555385229 0.0000000000\n" " 1.3787736290 -0.1239714599 0.0000000000 -0.2931741896 0.0000000000\n" " 0.4264904045 -0.8298226129 0.0000000000 -0.5781097351 0.0000000000\n" " 0.1366670312 -0.3175023225 1.0000000000 -0.3901110870 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.06080000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04660000 1.0000000000\n" "#","\n" "Cl aug-TZVP-GTH-q7 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05910000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04190000 1.0000000000\n" "#","\n" "Cl aug-TZV2P-GTH-q7 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05910000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04190000 1.0000000000\n" "#","\n" "Cl aug-QZV2P-GTH-q7 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05190000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03760000 1.0000000000\n" "#","\n" "Cl aug-QZV3P-GTH-q7 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.5510000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6280000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2540000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05190000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03760000 1.0000000000\n" "#","\n" "Ar SZV-GTH-q8 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 2.6436341408 0.3737594656 0.1735190188\n" " 1.6948954231 -0.0996534757 -0.3100915552\n" " 0.5231109619 -0.8315200024 -0.5807564917\n" " 0.1663306660 -0.3339930084 -0.3879330451\n" "#","\n" "Ar DZVP-GTH-q8 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 2.6436341408 0.3737594656 0.0000000000 0.1735190188 0.0000000000\n" " 1.6948954231 -0.0996534757 0.0000000000 -0.3100915552 0.0000000000\n" " 0.5231109619 -0.8315200024 0.0000000000 -0.5807564917 0.0000000000\n" " 0.1663306660 -0.3339930084 1.0000000000 -0.3879330451 1.0000000000\n" " 3 2 2 1 1\n" " 0.7380000000 1.0000000000\n" "#","\n" "Ar TZVP-GTH-q8 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.7933849461 -0.1618280953 0.0000000000 0.0000000000 0.0960404756 0.0000000000 0.0000000000\n" " 2.9269187333 0.5221781637 0.0000000000 0.0000000000 -0.0704844503 0.0000000000 0.0000000000\n" " 0.9316537640 -0.3632163241 0.0000000000 0.0000000000 -0.3787707182 0.0000000000 0.0000000000\n" " 0.3621005146 -0.7358329756 1.0000000000 0.0000000000 -0.5047539917 1.0000000000 0.0000000000\n" " 0.1287409102 -0.1523090856 0.0000000000 1.0000000000 -0.2525011145 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7380000000 1.0000000000\n" "#","\n" "Ar TZV2P-GTH-q8 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.7933849461 -0.1618280953 0.0000000000 0.0000000000 0.0960404756 0.0000000000 0.0000000000\n" " 2.9269187333 0.5221781637 0.0000000000 0.0000000000 -0.0704844503 0.0000000000 0.0000000000\n" " 0.9316537640 -0.3632163241 0.0000000000 0.0000000000 -0.3787707182 0.0000000000 0.0000000000\n" " 0.3621005146 -0.7358329756 1.0000000000 0.0000000000 -0.5047539917 1.0000000000 0.0000000000\n" " 0.1287409102 -0.1523090856 0.0000000000 1.0000000000 -0.2525011145 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.2540000000 1.0000000000 0.0000000000\n" " 0.4100000000 0.0000000000 1.0000000000\n" "#","\n" "Ar QZV2P-GTH-q8 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 5.2342384840 0.0594091942 0.0000000000 0.0000000000 0.0000000000 -0.0218235164 0.0000000000 0.0000000000 0.0000000000\n" " 3.0293732626 -0.3808584814 0.0000000000 0.0000000000 0.0000000000 -0.0397609427 0.0000000000 0.0000000000 0.0000000000\n" " 1.3121914980 0.0527214554 0.0000000000 0.0000000000 0.0000000000 0.2096390562 0.0000000000 0.0000000000 0.0000000000\n" " 0.5914580696 0.6333744672 1.0000000000 0.0000000000 0.0000000000 0.4311838680 1.0000000000 0.0000000000 0.0000000000\n" " 0.2478147218 0.4727819382 0.0000000000 1.0000000000 0.0000000000 0.3981434659 0.0000000000 1.0000000000 0.0000000000\n" " 0.0969644987 0.0535029998 0.0000000000 0.0000000000 1.0000000000 0.1359825259 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.2540000000 1.0000000000 0.0000000000\n" " 0.4100000000 0.0000000000 1.0000000000\n" "#","\n" "Ar QZV3P-GTH-q8 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 5.2342384840 0.0594091942 0.0000000000 0.0000000000 0.0000000000 -0.0218235164 0.0000000000 0.0000000000 0.0000000000\n" " 3.0293732626 -0.3808584814 0.0000000000 0.0000000000 0.0000000000 -0.0397609427 0.0000000000 0.0000000000 0.0000000000\n" " 1.3121914980 0.0527214554 0.0000000000 0.0000000000 0.0000000000 0.2096390562 0.0000000000 0.0000000000 0.0000000000\n" " 0.5914580696 0.6333744672 1.0000000000 0.0000000000 0.0000000000 0.4311838680 1.0000000000 0.0000000000 0.0000000000\n" " 0.2478147218 0.4727819382 0.0000000000 1.0000000000 0.0000000000 0.3981434659 0.0000000000 1.0000000000 0.0000000000\n" " 0.0969644987 0.0535029998 0.0000000000 0.0000000000 1.0000000000 0.1359825259 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8730000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7630000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3110000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "W DZVP-GTH-q14 DZVP-GTH\n" " 3\n" " 5 0 0 4 3\n" " 3.17833961 -0.59405642 0.16293727 0.00000000\n" " 1.54892965 0.66388244 -0.20717075 0.00000000\n" " 0.65507630 0.77725275 -0.51725023 0.00000000\n" " 0.08615458 0.02093277 1.15557619 1.00000000\n" " 5 1 1 4 2\n" " 2.98630221 0.05620580 0.00000000\n" " 1.21317676 -0.52492834 0.00000000\n" " 0.58573989 -0.46305304 0.00000000\n" " 0.26423237 -0.11761739 1.00000000\n" " 5 2 2 4 2\n" " 3.98958029 0.05242902 0.00000000\n" " 1.11283726 -0.37652293 0.00000000\n" " 0.39364968 -0.52218358 0.00000000\n" " 0.12396511 -0.33923705 1.00000000\n" "#"}; atomes_1.3.1/src/calc/cp2k/cp2k_init.c0000664000175000017500000014707015212624223017074 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_init.c * @short Initialization of the CP2K input assistant * @author Sébastien Le Roux */ /* * This file: 'cp2k_init.c' * * Contains: * - The initialization of the CP2K input assistant * * List of functions: int find_cp2k_sym (); gboolean cp2k_with_motion (); gchar * cp_section_name (int p); gchar * page_name_cp2k (int p); void print_start_buffer (); void create_mol_selection_button (GtkWidget * box, int id); void cp2k_option_box (GtkWidget * box, int id); void add_cp2k_pages (); G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget *but, gpointer data); G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data); G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data); GtkWidget * create_vdw_box (int id); GtkWidget * create_cp2k_spec_box (int spec); GtkWidget * cp2k_section_box (int s); GtkWidget * vbox_cp2k (int s); GtkWidget * file_info (int id); GtkWidget * init_cp2k (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cp2k.h" #include "cpmd.h" extern GtkWidget * thermo_box (); extern void print_cp2k (int f, GtkTextBuffer * buffer); extern ColRGBA init_color (int id, int numid); extern GtkWidget * qm_preview_box (int c, int s, int l); extern void field_unselect_all (); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); extern void create_selection_button (GtkWidget * box, int num, int id, gpointer data); extern void cp2k_fix_molecule (); cp2k * tmp_cp2k; double default_cp2k_options[41] = {0.0, 86400.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 300.0, 4.0, 0.0, 0.0, 50.0, 0.000001, 20.0, 0.00001, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0, 10000.0, 2.5, 300.0, 1.0, 10000.0, 0.0001, 10.0, 0.0, 0.0}; double default_vdw_cut[2] = {-2.00000000E+000, 1.05835442E+001}; double default_cp2k_extra[3][4] = {{0.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 0.0}, {-1.0, -1.0, 1.0, 0.0}}; gchar * cp2k_unit[6]={"s", "Ry", "fs", "K", "a.u.", i18n("steps")}; int cp2k_default_num[12] = {7, 3, 3, 4, 3, 11, 8, 4, 10, 9, 4, 2}; gchar * cp2k_default_keywords[11][11] = {{"ENERGY", "ENERGY_FORCES", "GEOMETRY_OPTIMIZATION", "MOLECULAR_DYNAMICS", "VIBRATIONAL_ANALYSIS", "LINEAR_RESPONSE", "EHRENFEST_DYN", " ", " ", " ", " "}, {"LOW", "MEDIUM", "HIGH", " ", " ", " ", " ", " ", " ", " ", " "}, {"GPW", "GAPW", "GAPW_XC", " ", " ", " ", " ", " ", " ", " ", " "}, {"ATOMIC", "CORE", "RANDOM", "RESTART", " ", " ", " ", " ", " ", " ", " "}, {"BROYDEN", "CG", "DIIS", " ", " ", " ", " ", " ", " ", " ", " "}, {"BLYP", "B3LYP", "BEEFVDW", "BP", "HCTH120", "LDA", "OLYP", "PADE", "PBE", "PBE0", "TPSS"}, {"XYZ", "XY", "XZ", "YZ", "X", "Y", "Z", "NONE", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"CUBIC", "HEXAGONAL", "ORTHORHOMBIC", "RHOMBOHEDRAL", "TETRAGONAL_AB", "TETRAGONAL_AC", "TETRAGONAL_BC", "MONOCLINIC", "TRICLINIC", "NONE", " "}, {"ISOKIN", "LANGEVIN", "NPE_F", "NPE_I", "NPT_F", "NPT_I", "NVE", "NVT", "NVT_ADIABATIC", " ", " "}, {"BFGS", "CG", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * cp2k_vdw_keywords[2][3] = {{"DRSLL", "LMKLL", "RVV10"}, {"DFTD2", "DFTD3", "DFTD3(BJ)"}}; gchar * cp2k_default_text[11][11] = {{i18n("Single Point Energy Calculation"), i18n("Single Point Energy and Forces Calculation"), i18n("Geometry Optimization"), i18n("Molecular Dynamics"), i18n("Vibrational Analysis"), i18n("Linear Response Calculation"), i18n("Ehrenfest Dynamics"), " ", " ", " ", " "}, {i18n("Low"), i18n("Medium"), i18n("High"), " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Gaussian and Plane Waves Method"), i18n("Gaussian and Augmented Plane Waves Method"), i18n("Gaussian and Augmented Plane Waves Method Only for XC"), " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Generate an Atomic Density Using the Atomic Code"), i18n("Diagonalize the Core Hamiltonian"), i18n("Use Random Wave-function Coefficients"), i18n("Use the RESTART File"), " ", " ", " ", " ", " ", " ", " "}, {i18n("Broyden Mixing Approximating the Inverse Hessian"), i18n("Conjugate Gradients"), i18n("Direct Inversion in the Iterative Subspace"), " ", " ", " ", " ", " ", " ", " ", " "}, {"Becke + Lee-Yang-Parr", i18n("Becke Three-parameters Hybrid + LYP"), i18n("Bayesian Error Estimation + van der Walls"), "Becke + Perdew", "Hamprecht-Cohen-Tozer-Handy", i18n("Local Density Approximation"), "Handy-Cohen + LYP", "Padé", "Perdew + Burke-Ernzerhof", i18n("Parameter-free PBE"), "Tao-Perdew-Staroverov-Scuseria"}, {i18n("3 Dimensional (XYZ)"), i18n("2 Dimensional (XY)"), i18n("2 Dimensional (XZ)"), i18n("2 Dimensional (YZ)"), i18n("1 Dimensional (X)"), i18n("1 Dimensional (Y)"), i18n("1 Dimensional (Z)"), i18n("Isolated System"), " ", " ", " "}, {i18n("Box Parameters (a,b,c and α,β,γ)"), i18n("Lattice Vectors"), " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cubic (a = b = c, α = β = γ = 90°)"), i18n("Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)"), i18n("Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)"), i18n("Rhombohedral (a = b = c, α = β = γ ≠ 90°)"), i18n("Tetragonal (a = b ≠ c, α = β = γ = 90°)"), i18n("Tetragonal (a = c ≠ b, α = β = γ = 90°)"), i18n("Tetragonal (a ≠ b = c, α = β = γ = 90°)"), i18n("Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)"), i18n("Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)"), i18n("No Cell Symmetry"), " "}, {i18n("Constant kinetic energy"), i18n("Langevin dynamics (constant temperature)"), i18n("Constant pressure ensemble (no thermostat)"), i18n("Constant pressure ensemble using an isotropic cell (no thermostat)"), i18n("Constant temperature and pressure using a flexible cell"), i18n("Constant temperature and pressure using an isotropic cell"), i18n("Constant energy (µ-canonical)"), i18n("Constant temperature and volume (canonical)"), i18n("Adiabatic dynamics in constant temperature and volume ensemble (CAFES)"), " ", " "}, {i18n("Diagonalization of a full Hessian matrix"), i18n("Conjugate gradients"), " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * cp2k_vdw_text[2][3] = {{i18n("Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional"), i18n("Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional"), i18n("Revised Vydrov-van Voorhis non-local van der Waals density functional")}, {i18n("Grimme D2 method"), i18n("Grimme D3 method (zero damping)"), i18n("Grimme D3 method (Becke-Johnson damping)")}}; int var_by_cp2sections[4] = {8, 20, 3, 10}; gchar * global_opts[40] = {i18n("Run type:"), i18n("Max CPU time:"), i18n("Print level:"), i18n("Use restart information:"), i18n("File that contains the restart information:"), i18n("File that contains the basis set(s):"), i18n("File that contains the pseudo-potential(s):"), i18n("File that contains the wave-function:"), i18n("Charge:"), i18n("Density cutoff for the finest grid level:"), i18n("Number of multi-grids:"), i18n("Quickstep method:"), i18n("Initial guess for the wave-function:"), i18n("Maximum inner-SCF cycle(s):"), i18n("Convergence threshold:"), i18n("Maximum outer-SCF cycle(s):"), i18n("Convergence threshold:"), i18n("Orbital transformation minimizer:"), i18n("DFT functional:"), i18n("Spin unrestricted calculation"), i18n("Multiplicity"), i18n("Use van der Waals interactions"), i18n("Restricted Open Kohn-Sham 'ROKS'"), i18n("Forces"), i18n("Stress tensor"), i18n("Mulliken population"), i18n("Löwdin population"), i18n("Orbitals"), i18n("Periodicity:"), i18n("Lattice parameters:"), i18n("Symmetry:"), i18n("Ensemble:"), i18n("Maximum number of MD steps:"), i18n("MD time step:"), i18n("Initial temperature:"), i18n("Geometry optimizer:"), i18n("Maximum number of optimization steps:"), i18n("Atomic forces convergence criterion:"), i18n("Save information every:"), i18n("Add constraint(s)")}; gchar * cpelemts[7] = {i18n("The CP2K input structure"), i18n("provides the general control parameters for the calculation to be performed"), i18n("describes how the interatomic forces will be evaluated"), i18n("describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates"), i18n("describes the displacement of the atoms for molecular dynamics and geometry optimization"), i18n("To describe the thermostat(s) for molecular dynamics"), i18n("To describe the parameters required for restart")}; gchar * cpsect[4] = {"GLOBAL", "FORCE_EVAL", "SUBSYS", "MOTION"}; char * k_thermo[CP2NTHERM][4] = {{"TIMECON_LANGEVIN", "TIMECON_NH", "MASS", "CHI"}, {"TIMECON", " ", " ", " "}, {" ", " ", " ", " "}, {"LENGTH", "MTS", "TIMECON", "YOSHIDA"}}; #define NC2OP 20 // 0 = None, 1 = Entry, 2 = Combo (-2 thermostats), 3 = yes/no, 4 = textbuffer int cp2k_opts_type[4][NC2OP] = {{ 2, 1, 2, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // GLOBAL { 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3}, // FEVAL { 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // SUBSYS { 2, -2, 1, 1, 1, 2, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; // MOTION int idunit; int checkb; int optionb; int motionb; GtkWidget * print_box; GtkWidget * vfbox[2]; GtkWidget * filebut[2]; GtkWidget * fileinf[2]; GtkWidget * cp2k_combo; GtkWidget * cp2k_label; GtkWidget * checked_box[2]; GtkWidget * option_box[4]; GtkWidget * motion_box[2]; GtkWidget * cp2k_vdw_box[2]; GtkWidget * cp2k_spec_box[2]; GtkWidget * cp2k_spec_combo; GtkWidget * spec_data_combo[2]; GtkWidget * cp2k_thermo_box; /*! \fn void print_start_buffer () \brief update of the GtkTextBuffer showing the CP2K input * */ void print_start_buffer () { if (qmbuffer[0]) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (qmbuffer[0], & bStart); gtk_text_buffer_get_end_iter (qmbuffer[0], & bEnd); gtk_text_buffer_delete (qmbuffer[0], & bStart, & bEnd); print_cp2k (0, qmbuffer[0]); } } /*! \fn G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) \brief update CP2K option entry callback \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); switch (i) { case CP2VDW: if (v > 0.0) tmp_cp2k -> extra_opts[0][2] = v; update_entry_double (res, tmp_cp2k -> extra_opts[0][2]); break; case CP2ROK: if (v > 0.0) tmp_cp2k -> extra_opts[1][0] = v; update_entry_double (res, tmp_cp2k -> extra_opts[1][0]); break; default: if ((int)v == -1 || (int)v > 0) tmp_cp2k -> extra_opts[2][i-CP2POR] = v; update_entry_int (res, tmp_cp2k -> extra_opts[2][i-CP2POR]); break; } print_start_buffer (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) \brief CP2K option toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) \brief CP2K option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) #endif { int i; i = GPOINTER_TO_INT(data); tmp_cp2k -> extra_opts[i][(i==2)?2:3] = (double) button_get_status ((GtkWidget *)but); print_start_buffer (); } GtkWidget * create_vdw_box (int id); /*! \fn G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) \brief change a GtkComboBox while creating a CP2K input file \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); if (i < 2) { j = k = 1; } else { j = 0; k = i - CP2VDW; } tmp_cp2k -> extra_opts[j][k] = (double) combo_get_active ((GtkWidget *)box); if (i == CP2VDW) { cp2k_vdw_box[1] = destroy_this_widget (cp2k_vdw_box[1]); cp2k_vdw_box[1] = create_vdw_box ((int)tmp_cp2k -> extra_opts[0][0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, cp2k_vdw_box[0], cp2k_vdw_box[1], FALSE, FALSE, 0); show_the_widgets (cp2k_vdw_box[1]); } print_start_buffer (); } /*! \fn GtkWidget * create_vdw_box (int id) \brief create the VdW informaiton and option(s) widgets \param id the type of VdW interactions */ GtkWidget * create_vdw_box (int id) { GtkWidget * vbox, * hbox; GtkWidget * widg; gchar * cp2k_vdw_vars[2] = {i18n("Type of potential:"), i18n("Cutoff:")}; int i, j, k; vbox = create_vbox(5); i = (id == 0) ? 2 : 3; for (j=0; j extra_opts[0][j+1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(CP2VDW+1)); break; case 1: widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(CP2VDW)); tmp_cp2k -> extra_opts[0][j+1] = default_vdw_cut[id]; update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[0][j+1]); break; case 2: widg = check_button (_("Apply long range corrections"), -1, -1, tmp_cp2k -> extra_opts[0][j+1], G_CALLBACK(update_cp2k_option_check), GINT_TO_POINTER(0)); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } return vbox; } /*! \fn G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) \brief NOT USED ! \param but the GtkButton sending the signal \param data the associated data pointer * / G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) { cp2k_fix_molecule (); gchar * stra, * strb; if (tmp_cp2k -> fixat[1] == 0) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%d fragment(s)", tmp_cp2k -> fixat[1]); strb = g_strdup_printf (APPLY); } set_image_from_icon_name (sel_img[2], strb); gtk_button_set_label (but, stra); g_free (stra); g_free (strb); } */ /*! \fn void create_mol_selection_button (GtkWidget * box, int id) \brief NOT USED ! \param box the box to insert the new widget in \param id the selection status * / void create_mol_selection_button (GtkWidget * box, int id) { GtkWidget * hbox = cpmd_box (box, "Molecule(s)* selection **:", 5, 20, 220); gchar * str; if (tmp_cp2k -> fixat[1] == 0) { str = g_strdup_printf ("Not picked yet !"); sel_img[id] = stock_image (DELETEB); } else { str = g_strdup_printf ("%d fragment(s)", tmp_cp2k -> fixat[1]); sel_img[id] = stock_image (APPLY); } sel_but[id] = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NONE, G_CALLBACK(mol_selection_button), NULL); g_free (str); widget_set_sensitive (sel_but[id], qm_view -> bonding); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_but[id], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_img[id], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("* isolated molecular fragment", -1, -1, 0.1, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("** requires to compute the bonding properties", -1, -1, 0.1, 0.5), FALSE, FALSE, 5); } */ /*! \fn G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget * but, gpointer data) \brief CP2K option dialog - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget *but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); GtkWidget * vbox, * hbox; GtkWidget * widg; gchar * cp2k_roks_options[2] = {i18n("Energy scaling:"), i18n("Spin configuration *:")}; gchar * cp2k_orb_options[2] = {i18n("Number of HOMO levels (-1 for all):"), i18n("Number of LUMO levels (-1 for all):")}; gchar * str = g_strdup_printf (_("%s - options"), i18n(global_opts[i])); GtkWidget * dial = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); vbox = dialog_get_content_area (dial); switch (i) { case CP2VDW: hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); widg = create_combo (); combo_text_append (widg, _("Non-local potential")); combo_text_append (widg, _("Pair potential")); combo_set_active (widg, (int)tmp_cp2k -> extra_opts[0][0]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(CP2VDW)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Type of functional for the van der Waals interactions"), 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); cp2k_vdw_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_vdw_box[0], FALSE, FALSE, 10); cp2k_vdw_box[1] = create_vdw_box ((int)tmp_cp2k -> extra_opts[0][0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, cp2k_vdw_box[0], cp2k_vdw_box[1], FALSE, FALSE, 0); break; case CP2ROK: for (j=0; j<2; j++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cp2k_roks_options[j]), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); if (j==0) { widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[1][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); } else { widg = create_combo (); combo_text_append (widg, "alpha - α"); combo_text_append (widg, "beta - β"); combo_set_active (widg, (int)tmp_cp2k -> extra_opts[1][1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (_("* for the singly occupied orbitals")), FALSE, FALSE, 5); break; case CP2POR: for (j=0; j<2; j++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cp2k_orb_options[j]), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_int (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[2][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Write cube files, if not then only print eigenvalues"), -1, -1, tmp_cp2k -> extra_opts[2][2], G_CALLBACK(update_cp2k_option_check), GINT_TO_POINTER(2)), FALSE, FALSE, 5); break; case CP2CON: create_selection_button (vbox, tmp_cp2k -> fixat[0], 1, GINT_TO_POINTER(-1)); //create_mol_selection_button (vbox, 2); break; } run_this_gtk_dialog (dial, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) \brief update some CP2K parameters \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (tmp_cp2k -> opts[i] != v) { tmp_cp2k -> opts[i] = v; print_start_buffer (); } if (i==CP2CUT || i==CP2SCN || i==CP2SCO || i==CP2DLT || i==CP2GEF) { update_entry_double (res, tmp_cp2k -> opts[i]); } else { update_entry_int (res, tmp_cp2k -> opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) \brief update some CP2K parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) \brief update some CP2K parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT(data); tmp_cp2k -> opts[i] = (double) button_get_status ((GtkWidget *)but); if (i == CP2RES) { for (j=0; j<2; j++) widget_set_sensitive (checked_box[j], (int)tmp_cp2k -> opts[CP2RES]); } else if (i==CP2SPI || i==CP2VDW || i==CP2ROK || i==CP2POR || i==CP2CON) { switch (i) { case CP2SPI: j = 0; break; case CP2VDW: j = 1; break; case CP2ROK: j = 2; break; case CP2POR: j = 3; break; case CP2CON: j = 4; break; } widget_set_sensitive (option_box[j], (int)tmp_cp2k -> opts[i]); } print_start_buffer (); } /*! \fn G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) \brief update the C2PK information textview \param textbuf the GtkTextBuffer sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data) - CP2FRE; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (textbuf, & bStart); gtk_text_buffer_get_end_iter (textbuf, & bEnd); if (i < 5) { if (tmp_cp2k -> files[i] != NULL) g_free (tmp_cp2k -> files[i]); tmp_cp2k -> files[i] = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); if (g_strcmp0 (tmp_cp2k -> files[i], "") == 0) tmp_cp2k -> files[i] = NULL; } else { j = combo_get_active (cp2k_spec_combo); k = i + CP2FRE - 10; if (tmp_cp2k -> spec_files[j][k] != NULL) g_free (tmp_cp2k -> spec_files[j][k]); tmp_cp2k -> spec_files[j][k] = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); if (g_strcmp0 (tmp_cp2k -> spec_files[j][k], "") == 0) { tmp_cp2k -> spec_files[j][k] = NULL; combo_set_active (spec_data_combo[k], tmp_cp2k -> spec_data[j][k]); widget_set_sensitive (spec_data_combo[k], TRUE); } else if (spec_data_combo[k] != NULL) { combo_set_active (spec_data_combo[k], -1); widget_set_sensitive (spec_data_combo[k], FALSE); } } print_start_buffer (); } /*! \fn GtkWidget * create_cp2k_spec_box (int spec) \brief create a CP2K chemical species option combo box \param spec the chemical species */ GtkWidget * create_cp2k_spec_box (int spec) { gchar * info[2] = {i18n("- Select and use set of parameters from the database: "), i18n("- Define and use other set of parameters: ")}; gchar * data_name[2][2] = {{i18n("\t\tAvailable basis set for "), i18n("\t\tAvailable pseudo-potential for ")}, {i18n("\t\tBasis set for "), i18n("\t\tPseudo-potential for ")}}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gchar * str; int i, j; for (i=0; i<2; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(info[i]), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); for (j=0; j<2; j++) { str = g_strdup_printf ("%s%s", _(data_name[i][j]), qm_proj -> chemistry -> label[spec]); hbox = cpmd_box (vbox, str, 5, 5, 300); g_free (str); if (i==0) { spec_data_combo[j] = NULL; if (tmp_cp2k -> spec_data[spec][j] > -1) { spec_data_combo[j] = prepare_basis_combo (spec, j); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spec_data_combo[j], FALSE, FALSE, 5); } else { str = g_strdup_printf ("%s", _("None")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_text_view (350, -1, 1, 0, G_CALLBACK(cp2k_file_info), GINT_TO_POINTER(j+10), tmp_cp2k -> spec_files[spec][j]), FALSE, FALSE, 5); } } } return vbox; } gboolean cp2k_with_motion (); GtkWidget * vbox_cp2k (int s); gchar * page_name_cp2k (int p); /*! \fn G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) \brief change CP2K option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) { int i, j; gboolean motion; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); if (j != (int)tmp_cp2k -> opts[i]) { if (i == CP2SYM) { cp2k_spec_box[1] = destroy_this_widget (cp2k_spec_box[1]); cp2k_spec_box[1] = create_cp2k_spec_box (combo_get_active ((GtkWidget *)box)); show_the_widgets (cp2k_spec_box[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cp2k_spec_box[0], cp2k_spec_box[1], FALSE, FALSE, 0); } else { if (i == CP2RUN) motion = cp2k_with_motion (); tmp_cp2k -> opts[i] = (double) combo_get_active ((GtkWidget *)box); if (i == CP2RUN) { if (motion && ! cp2k_with_motion()) { gtk_assistant_remove_page (GTK_ASSISTANT(qm_assistant), 5); } else if (! motion && cp2k_with_motion()) { GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); idopt = CP2SYM; motionb = -1; optionb = 3; idunit = 1; icomb = 8; GtkWidget * page = vbox_cp2k (3); show_the_widgets (page); gtk_assistant_insert_page (assist, page, 5); gtk_assistant_set_page_title (assist, page, page_name_cp2k(4)); gtk_assistant_set_page_type (assist, page, GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_complete (assist, page, TRUE); cp2k_with_motion (); } } else if (i == CP2ENS) { if (j == 2 || j == 3) { widget_set_sensitive (cp2k_thermo_box, FALSE); } else { widget_set_sensitive (cp2k_thermo_box, TRUE); } } print_start_buffer (); } } } /*! \fn void cp2k_option_box (GtkWidget * box, int id) \brief create a CP2K option combo box \param box the box to insert the new widgets in \param id the option id */ void cp2k_option_box (GtkWidget * box, int id) { optionb ++; option_box[optionb] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, option_box[optionb], FALSE, FALSE, 5); if (id != CP2SPI) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], create_button (_("Options"), IMG_STOCK, DPROPERTIES, 200, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cp2k_option_dialog), GINT_TO_POINTER(id)), FALSE, FALSE, 50); } widget_set_sensitive (option_box[optionb], (int)tmp_cp2k -> opts[id]); } /*! \fn GtkWidget * cp2k_section_box (int s) \brief create the CP2K assistant section box \param s the section id */ GtkWidget * cp2k_section_box (int s) { int i, j, k; GtkWidget * hbox; GtkWidget * widg; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { idopt ++; j = idopt; if (j == CP2NST) { cp2k_thermo_box = thermo_box(); add_box_child_start (GTK_ORIENTATION_VERTICAL, motion_box[motionb], cp2k_thermo_box, FALSE, FALSE, 5); hbox = cpmd_box (motion_box[motionb], _(global_opts[idopt]), 5, 5, 300); } else if (j == CP2FRE || j == CP2FWV) { checkb ++; checked_box[checkb] = cpmd_box (vbox, _(global_opts[idopt]), 5, 5, 300); } else if (j == CP2SPM) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], markup_label(_(global_opts[idopt]), 100, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j == CP2PFO || j == CP2PLO) { if (j == CP2PFO) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Print:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); print_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, print_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, markup_label(_(global_opts[idopt]), 150, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j > CP2ROK && j < CP2PBC) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, markup_label(_(global_opts[idopt]), 150, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j == CP2ENS || j == CP2GMI) { motionb ++; motion_box[motionb] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, motion_box[motionb], FALSE, FALSE, 5); hbox = cpmd_box (motion_box[motionb], _(global_opts[idopt]), 5, 5, 300); } else if (j > CP2ENS && j < CP2OUF) { hbox = cpmd_box (motion_box[motionb], _(global_opts[idopt]), 5, 5, 300); } else if (j == CP2SCN || j == CP2SCO) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(global_opts[idopt]), 150, 30, 0.0, 0.5), FALSE, FALSE, 30); } else { hbox = cpmd_box (vbox, _(global_opts[idopt]), 5, 5, 300); } switch (cp2k_opts_type[s][i]) { case 1: ident ++; widg = create_entry (G_CALLBACK(update_cp2k_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j==CP2CUT || j==CP2SCN || j==CP2SCO || j==CP2DLT || j==CP2GEF) { update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> opts[j]); } else { update_entry_int (GTK_ENTRY(widg), tmp_cp2k -> opts[j]); } break; case 2: icomb ++; widg = create_combo (); for (k=0; k opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_box), GINT_TO_POINTER(j)); break; case 3: widg = check_button (NULL, -1, -1, tmp_cp2k -> opts[j], G_CALLBACK(update_cp2k_check), GINT_TO_POINTER(j)); break; case 4: widg = create_text_view (200, -1, 1, 0, G_CALLBACK(cp2k_file_info), GINT_TO_POINTER(j), tmp_cp2k -> files[j-CP2FRE]); break; default: break; } if (j==CP2FRE || j==CP2FWV) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, checked_box[checkb], widg, FALSE, FALSE, 5); widget_set_sensitive (checked_box[checkb], (int)tmp_cp2k -> opts[CP2RES]); } else if (j==CP2SPM) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], widg, FALSE, FALSE, 5); } else if (j > CP2ROK && j < CP2PBC) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, widg, FALSE, FALSE, 5); if (j == CP2POR) cp2k_option_box (print_box, j); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); if (j==CP2SPI || j==CP2VDW || j==CP2ROK || j==CP2CON) cp2k_option_box (hbox, j); } if (j==CP2KTI || j==CP2CUT || j==CP2DLT || j==CP2TMP || j==CP2GEF || j==CP2OUF) { idunit ++; widg = gtk_label_new ((idunit == 5) ? _(cp2k_unit[idunit]) : cp2k_unit[idunit]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } if (idopt == CP2SYM) { gchar * str = g_strdup_printf (_(" %s provides official CP2K atomic basis sets and pseudo-potentials, are included:"), PACKAGE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)"), -1, -1, 0.1, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(" Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters."), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); hbox = cpmd_box (vbox, _("\t\t\t\tChemical species"), 20, 5, 300); cp2k_spec_combo = create_combo (); for (k=0; k nspec; k++) combo_text_append (cp2k_spec_combo, qm_proj -> chemistry -> label[k]); combo_set_active (cp2k_spec_combo, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cp2k_spec_combo, FALSE, FALSE, 5); cp2k_spec_box[0] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_spec_box[0], FALSE, FALSE, 0); cp2k_spec_box[1] = create_cp2k_spec_box (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cp2k_spec_box[0], cp2k_spec_box[1], FALSE, FALSE, 0); g_signal_connect (G_OBJECT (cp2k_spec_combo), "changed", G_CALLBACK(changed_cp2k_box), GINT_TO_POINTER(j)); } } } return vbox; } /*! \fn gchar * cp_section_name (int p) \brief get CP2K section name \param p the section id */ gchar * cp_section_name (int p) { if (p < 4) { return g_strdup_printf (_("Details of the %s section that %s"), cpsect[p], cpelemts[p+1]); } else { return g_strdup_printf ("%s", cpelemts[p+1]); } } /*! \fn GtkWidget * vbox_cp2k (int s) \brief create the CP2K assistant page vertical box \param s the section id */ GtkWidget * vbox_cp2k (int s) { GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(cp_section_name(s), -1, 20, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_section_box(s), FALSE, FALSE, 0); if (s== 0) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, qm_preview_box (1, s, 0), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) \brief select the input file type \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) { #ifdef GTK4 tmp_cp2k -> input_type = GPOINTER_TO_INT (data); #else tmp_cp2k -> input_type = ! tmp_cp2k -> input_type; #endif widget_set_sensitive (fileinf[! tmp_cp2k -> input_type], FALSE); widget_set_sensitive (fileinf[tmp_cp2k -> input_type], TRUE); print_start_buffer (); } /*! \fn GtkWidget * file_info (int id) \brief create the assistant page that present the input file(s) properties \param id the input file(s) type (0 = single, 1 = multiple) */ GtkWidget * file_info (int id) { GtkWidget * main_box; gchar * filename[4] = {i18n("CP2K main input file '*.inp'"), "forces.inc", "system.inc", "motion.inc"}; gchar * filetext[4] = {"&GLOBAL\n...\n&END GLOBAL\n\n@INCLUDE 'forces.inc'\n\n@INCLUDE 'motion.inc'", "&FORCE_EVAL\n...\n@INCLUDE 'system.inc'\n&END FORCE_EVAL", "&SUBSYS\n...\n&END SUBSYS", "&MOTION\n...\n&END MOTION"}; GtkWidget * vbox, * vbx, * hbx; GtkWidget * vframe; if (id == 0) { main_box = create_vbox (BSEP); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, stock_image(AFILE), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_label_new (_("CP2K input file '*.inp'")), FALSE, FALSE, 5); vframe = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME(vframe), hbx); #ifdef GTK3 gtk_frame_set_shadow_type (GTK_FRAME(vframe), GTK_SHADOW_ETCHED_IN); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, main_box, vframe, FALSE, FALSE, 10); vbox = create_vbox (BSEP); add_container_child (CONTAINER_FRA, vframe, vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("! Information"), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&GLOBAL\n...\n&END GLOBAL", 100, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&FORCE_EVAL\n...", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbx, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, markup_label("&SUBSYS\n...\n&END SUBSYS", 150, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&END FORCE_EVAL", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&MOTION\n...\n&END MOTION", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); } else { main_box = create_hbox (0); vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, main_box, vbox, FALSE, FALSE, 0); int i; for (i=0; i<4; i++) { hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, stock_image(AFILE), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_label_new ((! i) ? _(filename[i]) : filename[i]), FALSE, FALSE, 5); vframe = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME(vframe), hbx); #ifdef GTK3 gtk_frame_set_shadow_type (GTK_FRAME(vframe), GTK_SHADOW_ETCHED_IN); #endif vbx = create_vbox (BSEP); add_container_child (CONTAINER_FRA, vframe, vbx); if (i == 0) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(_("! Information"), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(filetext[i], 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vframe, FALSE, FALSE, 5); if (i == 0) { vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, main_box, vbox, FALSE, FALSE, 20); } } } return main_box; } /*! \fn GtkWidget * init_cp2k () \brief initialize the CP2K input creation assistant * */ GtkWidget * init_cp2k () { GtkWidget * vbox = create_vbox (BSEP); gchar * text = _("The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: "); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (text), FALSE, FALSE, 20); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * hbx; gchar * ftext[2] = {i18n("Single input file"), i18n("Multiple files")}; int i, j; j = tmp_cp2k -> input_type; for (i=0; i<2; i++) { vfbox[i] = create_vbox (BSEP); gtk_widget_set_size_request (vfbox[i], (i==0) ? 200 : 400, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vfbox[i], FALSE, FALSE, (i==0) ? 50 : 10); fileinf[i] = file_info (i); add_box_child_start (GTK_ORIENTATION_VERTICAL, vfbox[i], fileinf[i], FALSE, FALSE, (i==0) ? 0 : 15); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vfbox[i], hbx, FALSE, FALSE, 0); #ifdef GTK4 filebut[i] = check_button (_(ftext[i]), -1, -1, (i != j) ? FALSE : TRUE, G_CALLBACK(select_input_type), GINT_TO_POINTER(i)); if (i) gtk_check_button_set_group ((GtkCheckButton *)filebut[i], (GtkCheckButton *)filebut[0]); #else if (! i) { filebut[i] = radio_button (_(ftext[i]), -1, -1, (i != j) ? FALSE : TRUE, G_CALLBACK(select_input_type), NULL); } else { filebut[i] = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(filebut[0]), _(ftext[i])); } #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, filebut[i], FALSE, FALSE, (i==0) ? 50 : 120); } tmp_cp2k -> input_type = j; widget_set_sensitive (fileinf[tmp_cp2k -> input_type], TRUE); widget_set_sensitive (fileinf[! tmp_cp2k -> input_type], FALSE); show_the_widgets (vbox); return vbox; } /*! \fn gchar * page_name_cp2k (int p) \brief get CP2K assistant page name \param p the page id */ gchar * page_name_cp2k (int p) { if (p == 0) { return g_strdup_printf (_("The CP2K input structure")); } else if (p < 5) { return g_strdup_printf (_("The %s section"), cpsect[p-1]); } else if (p == 5) { return g_strdup_printf (_("The MOTION section - thermostat(s)")); } else { return g_strdup_printf (_("The MOTION section - restart(s)")); } } /*! \fn gboolean cp2k_with_motion () \brief CP2K MD calculation ? */ gboolean cp2k_with_motion () { int i; for (i=0; i<2; i++) hide_the_widgets (motion_box[i]); hide_the_widgets (motion_box[1]); if (tmp_cp2k -> opts[CP2RUN] == 2.0 || tmp_cp2k -> opts[CP2RUN] == 3.0 || tmp_cp2k -> opts[CP2RUN] == 6.0) { i = (tmp_cp2k -> opts[CP2RUN] == 2.0) ? 1 : 0; show_the_widgets (motion_box[i]); return TRUE; } else { return FALSE; } } /*! \fn void add_cp2k_pages () \brief add pages to the CP2 assistant */ void add_cp2k_pages () { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page; idopt = -1; ident = -1; icomb = -1; idunit = -1; checkb = -1; optionb = -1; motionb = -1; for (i=0; i<(cp2k_with_motion() ? 5: 4); i++) { if (i > 0) { page = vbox_cp2k (i-1); } else { page = init_cp2k (); } gtk_assistant_append_page (assist, page); gtk_assistant_set_page_title (assist, page, page_name_cp2k(i)); gtk_assistant_set_page_type (assist, page, GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_complete (assist, page, TRUE); } GtkWidget * conclu = create_vbox (BSEP); info = g_strdup_printf (_(" Finalize the creation of the CP2K input files now !")); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, conclu); gtk_assistant_set_page_title (assist, conclu, _("Create the input files now !")); gtk_assistant_set_page_type (assist, conclu, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, conclu, TRUE); gtk_assistant_update_buttons_state (assist); } /*! \fn int find_cp2k_sym () \brief find the CP2K symmetry parameter based on the cell properties * */ int find_cp2k_sym () { box_info * box = & qm_proj -> cell.box[0]; if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2] && box -> param[0][1] == box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] == 90.0) return 0; if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] != 90.0) return 3; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) return 4; if (box -> param[0][0] == box -> param[0][2] && box -> param[0][0] != box -> param[0][1]) return 5; if (box -> param[0][1] == box -> param[0][2] && box -> param[0][1] != box -> param[0][0]) return 6; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2]) { if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) return 2; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == 90.0) { if (box -> param[1][2] == 60.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) return 1; } } if (box -> param[1][0] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[1][1] != 90.0) { if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) return 7; } } if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) { if (box -> param[1][0] != box -> param[1][1] && box -> param[1][0] != box -> param[1][2] && box -> param[1][1] != box -> param[1][2]) return 8; } return 9; } atomes_1.3.1/src/calc/cp2k/cp2k_pot.c0000664000175000017500000046147015212624223016736 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_pot.c * @short CP2K potentials, as distributed with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_pot.c' * * Contains: * - CP2K potentials, as distributed with CP2K v9.1 This file contains 3 tables: pot_elem -> the list of chemical elements pot_keys -> the list of keywords cp2k_pot -> finally the complete potential */ #include "global.h" char * pot_elem[421] = {"H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Mo", "Ru", "Rh", "Pd", "Ag", "Ag", "In", "In", "Sb", "Te", "I", "Xe", "Cs", "Ba", "Ba", "Ce", "Gd", "W", "Au", "Au", "Pb", "Bi", "Bi", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Zr", "Ru", "Te", "Cs", "Cs", "Au", "H", "C", "N", "O", "F", "P", "Ar", "H", "C", "N", "O", "H", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "K", "Ca", "Ca", "Sc", "Sc", "Ti", "Ti", "V", "V", "Cr", "Cr", "Mn", "Mn", "Fe", "Fe", "Co", "Co", "Ni", "Ni", "Cu", "Cu", "Cu", "Zn", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Rb", "Sr", "Sr", "Y", "Y", "Zr", "Zr", "Nb", "Nb", "Mo", "Mo", "Tc", "Tc", "Ru", "Ru", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Ag", "Cd", "Cd", "In", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Cs", "Ba", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Au", "Hg", "Hg", "Tl", "Tl", "Pb", "Bi", "Po", "At", "Rn", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Ru", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Cd", "In", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Hg", "Tl", "Tl", "Pb", "Pb", "Bi", "Bi", "Po", "At", "Rn", "U", "B", "H", "B", "C", "N", "O", "F", "P", "S", "Cl", "H", "C", "N", "O", "Al", "B", "C", "Cl", "F", "H", "N", "O", "P", "S", "Si", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "I"}; char * pot_keys[421] = {"GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q2", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP", "GTH-BLYP-q20", "GTH-BLYP", "GTH-BLYP-q3", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q9", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP", "GTH-BLYP-q3", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q8", "GTH-BLYP-q9", "GTH-BLYP", "GTH-BLYP-q2", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP-q4", "GTH-BLYP-q15", "GTH-BLYP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP-q1", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP-q1", "GTH-BP", "GTH-BP-q11", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH407", "GTH-HCTH407", "GTH-HCTH407", "GTH-HCTH407", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA-q4", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA-q20", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA-q4", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q2", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE-q20", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q8", "GTH-PBE", "GTH-PBE-q9", "GTH-PBE-q10", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q30", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q5", "GTH-PBE", "GTH-PBE-q6", "GTH-PBE", "GTH-PBE-q7", "GTH-PBE", "GTH-PBE-q8", "GTH-PBE", "GTH-PBE-q9", "GTH-PBE-q10", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE-q14", "GTH-PBE", "GTH-PBE-q15", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q14", "GTH-PBESol", "GTH-OLYP", "GTH-OLYP-q3", "GTH-OLYP-q4", "GTH-OLYP-q5", "GTH-OLYP", "GTH-OLYP-q7", "GTH-OLYP-q5", "GTH-OLYP-q6", "GTH-OLYP-q7", "GTH-HF", "GTH-HF", "GTH-HF", "GTH-HF", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL"}; char * cp2k_pot[421] = {"\n" "H GTH-BLYP-q1 GTH-BLYP\n" " 1\n" " 0.20000000 2 -4.19596147 0.73049821\n" " 0\n" "#","\n" "He GTH-BLYP-q2 GTH-BLYP\n" " 2\n" " 0.20000000 2 -9.14737128 1.71197792\n" " 0\n" "#","\n" "Li GTH-BLYP-q3 GTH-BLYP\n" " 3\n" " 0.40000000 4 -14.11679756 9.67724760 -1.79886461 0.08624957\n" " 0\n" "#","\n" "Be GTH-BLYP-q4 GTH-BLYP\n" " 4\n" " 0.32500000 4 -24.08977105 17.30275720 -3.34561015 0.16601474\n" " 0\n" "#","\n" "B GTH-BLYP-q3 GTH-BLYP\n" " 2 1\n" " 0.42407181 2 -6.10890761 0.98586957\n" " 2\n" " 0.37086003 1 6.34339578\n" " 0.34936716 0\n" "#","\n" "C GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.33806609 2 -9.13626871 1.42925956\n" " 2\n" " 0.30232223 1 9.66551228\n" " 0.28637912 0\n" "#","\n" "N GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.28287094 2 -12.73646720 1.95107926\n" " 2\n" " 0.25523449 1 13.67893172\n" " 0.24313253 0\n" "#","\n" "O GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.24342026 2 -16.99189235 2.56614206\n" " 2\n" " 0.22083140 1 18.38885102\n" " 0.21720070 0\n" "#","\n" "F GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.21384014 2 -21.90241518 3.27597572\n" " 2\n" " 0.19459028 1 23.79658295\n" " 0.18786326 0\n" "#","\n" "Ne GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.19000000 2 -28.61959769 4.15549516\n" " 2\n" " 0.17823784 2 27.95784886 0.83365601\n" " -1.07624528\n" " 0.15276372 1 0.33116999\n" "#","\n" "Na GTH-BLYP-q9 GTH-BLYP\n" " 3 6\n" " 0.23396502 2 -2.68948346 -0.50947770\n" " 2\n" " 0.14977690 1 32.85715860\n" " 0.12319901 1 -13.99900802\n" "#","\n" "Mg GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.20098403 2 -19.33029317 2.86005812\n" " 2\n" " 0.14107967 1 40.67473040\n" " 0.10456134 1 -10.73617094\n" "#","\n" "Mg GTH-BLYP-q2\n" " 2\n" " 0.61697665 1 -3.24611921\n" " 2\n" " 0.60092845 2 3.64729616 -0.76401307\n" " 0.98633664\n" " 0.70217751 1 0.94952736\n" "#","\n" "Al GTH-BLYP-q3 GTH-BLYP\n" " 2 1\n" " 0.45000000 1 -7.66683204\n" " 2\n" " 0.49773601 2 6.46303151 -1.58386957\n" " 2.04476682\n" " 0.56545785 1 1.81826715\n" "#","\n" "Si GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.44000000 1 -6.25958674\n" " 2\n" " 0.44465247 2 8.31460936 -2.33277947\n" " 3.01160535\n" " 0.50279207 1 2.33241791\n" "#","\n" "P GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.43000000 1 -5.92953335\n" " 2\n" " 0.40286945 2 10.41483915 -3.13168757\n" " 4.04299126\n" " 0.45245811 1 2.95358263\n" "#","\n" "S GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.42000000 1 -5.98880045\n" " 2\n" " 0.36973266 2 12.55648450 -3.91290459\n" " 5.05153810\n" " 0.41287571 1 3.58772114\n" "#","\n" "Cl GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.41000000 1 -6.35705212\n" " 2\n" " 0.34311864 2 14.68134781 -4.64034312\n" " 5.99065720\n" " 0.38113517 1 4.22292428\n" "#","\n" "Ar GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.32154985 2 16.80099893 -5.32871056\n" " 6.87933576\n" " 0.35544413 1 4.87719604\n" "#","\n" "K GTH-BLYP-q9 GTH-BLYP\n" " 3 6\n" " 0.40000000 2 -2.88013377 -1.21143500\n" " 2\n" " 0.30634684 2 17.51002284 -5.61037883\n" " 7.24296793\n" " 0.32105825 2 6.90321066 -2.19925814\n" " 2.60219733\n" "#","\n" "Ca GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.39000000 2 -4.03561119 -1.61257448\n" " 3\n" " 0.28936507 2 20.42566030 -7.23674813\n" " 9.34260166\n" " 0.31177925 2 7.53169389 -2.08537690\n" " 2.46745122\n" " 0.69141876 1 0.05522276\n" "#","\n" "Sc GTH-BLYP-q11 GTH-BLYP\n" " 4 6 1\n" " 0.37687548 2 9.84009747 -1.16586015\n" " 3\n" " 0.35998897 2 3.30610316 2.54796421\n" " -3.28940766\n" " 0.22099375 2 -0.43488219 6.46425824\n" " -7.64861350\n" " 0.23338021 1 -10.13403863\n" "#","\n" "Ti GTH-BLYP-q12 GTH-BLYP\n" " 4 6 2\n" " 0.38000000 2 8.71144218 -0.70028677\n" " 3\n" " 0.33777078 2 2.57526386 3.69297065\n" " -4.76760461\n" " 0.24253135 2 -4.63054123 8.87087502\n" " -10.49616087\n" " 0.24331694 1 -9.40665268\n" "#","\n" "V GTH-BLYP-q13 GTH-BLYP\n" " 4 6 3\n" " 0.37500000 2 7.09567441 -0.32225919\n" " 3\n" " 0.32984260 2 1.99203993 4.73916314\n" " -6.11823331\n" " 0.24621323 2 -5.54974480 8.76420181\n" " -10.36994343\n" " 0.24115328 1 -9.44436162\n" "#","\n" "Cr GTH-BLYP-q14 GTH-BLYP\n" " 3 6 5\n" " 0.37000000 2 5.81498098 -0.67571792\n" " 3\n" " 0.31671447 2 2.60698311 5.06715750\n" " -6.54167220\n" " 0.23961307 2 -4.66668172 7.57290229\n" " -8.96037883\n" " 0.22092939 1 -11.18989241\n" "#","\n" "Mn GTH-BLYP-q15 GTH-BLYP\n" " 4 6 5\n" " 0.36500000 2 6.17870291 -0.44450988\n" " 3\n" " 0.29784355 2 1.69433567 6.39053422\n" " -8.25014420\n" " 0.24582549 2 -6.53742440 7.84591162\n" " -9.28340782\n" " 0.22244655 1 -11.66961579\n" "#","\n" "Fe GTH-BLYP-q16 GTH-BLYP\n" " 4 6 6\n" " 0.36000000 2 7.01102510 -0.22274667\n" " 3\n" " 0.27620533 2 0.61149598 7.99235733\n" " -10.31808895\n" " 0.24713005 2 -8.71055592 8.68416924\n" " -10.27524761\n" " 0.22353398 1 -12.41150401\n" "#","\n" "Co GTH-BLYP-q17 GTH-BLYP\n" " 4 6 7\n" " 0.35500000 2 3.43297847 0.61491331\n" " 3\n" " 0.27555403 2 0.19362864 9.18128009\n" " -11.85298162\n" " 0.24312795 2 -8.92204873 9.23263048\n" " -10.92419570\n" " 0.22362456 1 -11.75878279\n" "#","\n" "Ni GTH-BLYP-q18 GTH-BLYP\n" " 4 6 8\n" " 0.35000000 2 4.07602942 0.23312841\n" " 3\n" " 0.25714683 2 0.09878517 10.14864210\n" " -13.10184061\n" " 0.24975271 2 -8.34861501 7.26677120\n" " -8.59815964\n" " 0.21247761 1 -13.67293293\n" "#","\n" "Cu GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.43078178 3 10.29852604 -6.05837033 1.70054574\n" " 10.58726032 -4.39079021\n" " 3.48508169\n" " 0.55080544 2 2.74458701 -0.86295510\n" " 1.02106225\n" " 0.26558610 1 -12.66158247\n" "#","\n" "Cu GTH-BLYP-q19\n" " 3 6 10\n" " 0.34500000 2 0.00729001 1.26270041\n" " 3\n" " 0.25025136 2 0.78207556 10.69795592\n" " -13.81100171\n" " 0.22145058 2 -13.10305990 14.86802590\n" " -17.59208548\n" " 0.21548515 1 -12.45211713\n" "#","\n" "Zn GTH-BLYP-q12 GTH-BLYP\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.39855016 3 11.95945993 -8.66522085 2.80807710\n" " 15.75408976 -7.25042390\n" " 5.75484556\n" " 0.54556247 2 2.51050004 -0.44032483\n" " 0.52099937\n" " 0.25168465 1 -14.32309848\n" "#","\n" "Zn GTH-BLYP-q20\n" " 4 6 10\n" " 0.34000000 2 0.69029187 1.23803712\n" " 3\n" " 0.24511603 2 -1.58948215 12.87573398\n" " -16.62250109\n" " 0.23151219 2 -10.91449266 9.54377070\n" " -11.29234178\n" " 0.20860634 1 -14.24182139\n" "#","\n" "Ga GTH-BLYP-q13 GTH-BLYP\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39467346 3 12.48450375 -7.17987436 1.92607131\n" " 12.40193316 -4.97309473\n" " 3.94727157\n" " 0.58027448 2 1.59145844 0.32153951\n" " -0.38045068\n" " 0.23867979 1 -16.11979876\n" "#","\n" "Ga GTH-BLYP-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.57532960 3 2.06609505 1.21904266 -0.87326380\n" " -2.99414098 2.25475743\n" " -1.78965823\n" " 0.67710486 2 0.14524752 0.72041368\n" " -0.85240496\n" " 0.94154174 1 0.10030959\n" "#","\n" "Ge GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42737427 3 7.55651469 -0.07090242 -1.72596317\n" " -2.71574467 4.45641774\n" " -3.53717192\n" " 0.57489897 2 0.80056266 0.71307408\n" " -0.84372063\n" " 0.78547258 1 0.21870790\n" "#","\n" "As GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45698284 3 5.57976394 0.11777254 -0.99243898\n" " -1.76624582 2.56246643\n" " -2.03389468\n" " 0.55494716 2 1.00097684 0.68325082\n" " -0.80843328\n" " 0.68498074 1 0.34818137\n" "#","\n" "Se GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43367514 3 6.43369922 -0.22063995 -1.17545323\n" " -1.62702987 3.03500718\n" " -2.40896227\n" " 0.47248310 2 2.23970327 0.40191857\n" " -0.47555647\n" " 0.60911821 1 0.49494679\n" "#","\n" "Br GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43612268 3 6.23128313 0.21889262 -1.12467641\n" " -2.11187548 2.90390201\n" " -2.30490077\n" " 0.45379296 2 2.46574310 0.49636818\n" " -0.58731075\n" " 0.53315603 1 0.74724056\n" "#","\n" "Kr GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42362066 3 6.37382917 0.49858632 -1.41991709\n" " -2.95316749 3.66621015\n" " -2.90996409\n" " 0.43391338 2 2.63230352 0.64517712\n" " -0.76338386\n" " 0.51315369 1 0.70954468\n" "#","\n" "Rb GTH-BLYP-q9\n" " 3 6\n" " 0.49000000 2 5.75447985 -0.48374192\n" " 3\n" " 0.25518839 2 30.72215135 -12.19094908\n" " 15.73844759\n" " 0.33800292 1 4.39362252\n" " 0.58372659 1 0.18537105\n" "#","\n" "Sr GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.48000000 2 6.75494554 -1.12140847\n" " 3\n" " 0.27574829 2 20.90591056 -7.66251431\n" " 9.89226343\n" " 0.27951874 2 11.83709620 -11.14034857\n" " 13.18143819\n" " 0.53145306 1 0.32212393\n" "#","\n" "Y GTH-BLYP-q11 GTH-BLYP\n" " 4 6 1\n" " 0.47500000 2 12.12173196 -2.23590662\n" " 3\n" " 0.24768420 2 22.15257967 -7.66355161\n" " 9.89360259\n" " 0.29467778 2 5.85308697 -5.77308732\n" " 6.83080904\n" " 0.45213814 2 1.12663777 -1.27929123\n" " 1.45057990\n" "#","\n" "Zr GTH-BLYP-q12 GTH-BLYP\n" " 4 6 2\n" " 0.47000000 2 7.68287419 -1.83482397\n" " 3\n" " 0.26098833 2 22.58608773 -8.39346102\n" " 10.83591158\n" " 0.28950143 2 8.50003567 -5.29014738\n" " 6.25938680\n" " 0.57680903 2 0.04082300 0.26426022\n" " -0.29964293\n" "#","\n" "Mo GTH-BLYP-q14 GTH-BLYP\n" " 3 6 5\n" " 0.43000000 2 28.10289595 -4.36588317\n" " 3\n" " 0.34238035 2 -0.06850864 2.98011244\n" " -3.84730862\n" " 0.41442576 2 -0.15765657 -0.95307240\n" " 1.12769047\n" " 0.42539061 2 1.13742343 -2.64549690\n" " 2.99971152\n" "#","\n" "Ru GTH-BLYP-q16 GTH-BLYP\n" " 3 6 7\n" " 0.43000000 2 26.85974124 -5.05749455\n" " 3\n" " 0.33894617 2 -0.50446833 3.70095133\n" " -4.77790762\n" " 0.42823486 2 0.15024145 -1.32523126\n" " 1.56803477\n" " 0.43752832 2 1.52972881 -2.96335285\n" " 3.36012630\n" "#","\n" "Rh GTH-BLYP-q17 GTH-BLYP\n" " 3 6 8\n" " 0.42000000 2 27.21859006 -5.26666561\n" " 3\n" " 0.33775970 2 -0.37805742 3.85156484\n" " -4.97234883\n" " 0.40476998 2 -0.26519119 -0.79135076\n" " 0.93633885\n" " 0.43219447 2 1.68856873 -3.13689837\n" " 3.55690842\n" "#","\n" "Pd GTH-BLYP-q18 GTH-BLYP\n" " 2 6 10\n" " 0.41000000 2 26.65379780 -4.86862194\n" " 3\n" " 0.33643267 2 -0.66218232 4.36901475\n" " -5.64037379\n" " 0.41121734 2 -0.16335747 -0.94666822\n" " 1.12011294\n" " 0.44038158 2 1.64374463 -3.09751466\n" " 3.51225149\n" "#","\n" "Ag GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.57000000 1 0.27329871\n" " 3\n" " 0.53113691 3 9.45447859 -4.73986410 0.59512748\n" " 7.08711317 -1.53661256\n" " 1.21964841\n" " 0.62572123 2 3.90619533 -1.71774975\n" " 2.03246891\n" " 0.40832785 2 -2.77610164 -0.36178338\n" " 0.41022380\n" "#","\n" "Ag GTH-BLYP-q19\n" " 3 6 10\n" " 0.40000000 2 24.37631116 -4.16834876\n" " 3\n" " 0.31731325 2 0.69929536 4.25162666\n" " -5.48882642\n" " 0.41393281 2 -0.30767006 -0.44941724\n" " 0.53175765\n" " 0.45569543 2 1.75618266 -3.09368795\n" " 3.50791241\n" "#","\n" "In GTH-BLYP-q13 GTH-BLYP\n" " 2 1 10\n" " 0.53000000 1 3.57797710\n" " 3\n" " 0.47995615 3 11.20107941 -6.26219645 1.21444270\n" " 10.05975207 -3.13567758\n" " 2.48886692\n" " 0.56617182 2 4.78019859 -2.24059762\n" " 2.65111085\n" " 0.37728287 2 -4.24415179 -0.59846912\n" " 0.67860020\n" "#","\n" "In GTH-BLYP-q3\n" " 2 1\n" " 0.61000000 1 3.20683546\n" " 3\n" " 0.72668632 3 0.70288050 1.01907230 -0.54239646\n" " -2.19782459 1.40046163\n" " -1.11158196\n" " 0.85226033 2 0.01176733 0.48673996\n" " -0.57591849\n" " 1.06121328 1 0.15160282\n" "#","\n" "Sb GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.59000000 1 7.71520811\n" " 3\n" " 0.56281517 3 1.46135468 1.28119333 -0.94856576\n" " -3.19685579 2.44918625\n" " -1.94398132\n" " 0.64746318 2 0.46086693 0.43857096\n" " -0.51892416\n" " 0.85920174 1 0.31255771\n" "#","\n" "Te GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.57500000 1 8.54112001\n" " 3\n" " 0.57657850 3 1.45132840 0.97095302 -0.49085149\n" " -2.05186498 1.26737311\n" " -1.00594622\n" " 0.60434855 2 0.70106128 0.40189978\n" " -0.47553423\n" " 0.79625711 1 0.38178821\n" "#","\n" "I GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.56000000 1 13.73638610\n" " 3\n" " 0.58939001 3 0.21393489 0.88456526 -0.02067022\n" " -1.17558896 0.05337028\n" " -0.04236135\n" " 0.54232717 2 0.28721066 0.46932671\n" " -0.55531485\n" " 0.77040507 1 0.30709615\n" "#","\n" "Xe GTH-BLYP-q8\n" " 2 6\n" " 0.56000000 1 8.59949070\n" " 3\n" " 0.49592925 3 2.81672987 1.44752782 -1.40786958\n" " -4.15865041 3.63510361\n" " -2.88527404\n" " 0.48311258 1 2.11273917\n" " 0.69721940 1 0.50983839\n" "#","\n" "Cs GTH-BLYP-q9\n" " 3 6\n" " 0.54000000 2 33.07782844 -2.80842052\n" " 4\n" " 0.45607453 2 -3.56881717 2.63732767\n" " -3.40477539\n" " 0.36820141 2 -5.01061387 0.77988492\n" " -0.92277228\n" " 0.75684499 1 0.20052308\n" " 0.58463791 1 -1.70870691\n" "#","\n" "Ba GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.54000000 2 24.53545105 -2.47807384\n" " 4\n" " 0.48569784 2 0.09387924 1.15171729\n" " -1.48686063\n" " 0.39622579 2 0.84537359 -1.74106987\n" " 2.06006165\n" " 0.66014281 1 0.42755776\n" " 0.30049122 1 -19.65179380\n" "#","\n" "Ba GTH-BLYP-q2\n" " 2\n" " 1.20000000 0\n" " 3\n" " 1.03638675 3 1.42164527 -0.44534139 -0.07451309\n" " 0.45373771 0.19239197\n" " -0.15270639\n" " 1.25440147 2 0.73041014 -0.29211206\n" " 0.34563165\n" " 0.87881774 1 -0.85472852\n" "#","\n" "Ce GTH-BLYP-q12 GTH-BLYP\n" " 4 6 1 1\n" " 0.52864798 2 19.13548995 -0.59690386\n" " 4\n" " 0.52094620 2 -0.55473220 1.70057992\n" " -2.19543924\n" " 0.45984533 2 -0.92453341 1.99827739\n" " -2.36439369\n" " 0.67639660 1 0.10451755\n" " 0.30436847 1 -17.54504586\n" "#","\n" "Gd GTH-BLYP-q18 GTH-BLYP\n" " 4 6 1 7\n" " 0.52166157 2 18.16996137 -0.54313383\n" " 4\n" " 0.45763555 2 -2.89847533 3.94756205\n" " -5.09628069\n" " 0.45903313 3 -3.22259659 2.93618073 -0.30453227\n" " -3.98113568 0.72065489\n" " -0.51217326\n" " 0.48380572 1 -0.84857548\n" " 0.27560057 1 -22.19038178\n" "#","\n" "W GTH-BLYP-q14 GTH-BLYP\n" " 4 6 4\n" " 0.54000000 2 6.68380890 -0.31709158\n" " 3\n" " 0.39238521 3 -1.92936041 4.30955402 2.23540296\n" " -1.92772713 -5.77178561\n" " 4.58121281\n" " 0.39242369 2 -5.22265341 6.11414396\n" " -7.23435270\n" " 0.37281208 2 -6.46250589 7.70934709\n" " -8.74157793\n" "#","\n" "Au GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.59000000 1 10.81589381\n" " 3\n" " 0.52572747 2 6.71867015 -2.66620610\n" " 3.44205728\n" " 0.60526597 2 4.32132354 -4.09465015\n" " 4.84485539\n" " 0.43903160 2 -7.45153985 3.06802476\n" " -3.47881309\n" "#","\n" "Au GTH-BLYP-q19\n" " 3 6 10\n" " 0.49000000 2 9.10574107 -0.31170627\n" " 3\n" " 0.28881911 3 -5.84394846 25.76364500 -14.96878334\n" " -57.60745060 38.64923240\n" " -30.67687719\n" " 0.35793393 2 -6.87735522 7.88320706\n" " -9.32753639\n" " 0.33407191 2 -8.71118504 9.49731666\n" " -10.76894486\n" "#","\n" "Pb GTH-BLYP-q4\n" " 2 2\n" " 0.61750000 1 5.33520808\n" " 3\n" " 0.62372070 3 0.77431309 2.33644883 -1.62011026\n" " -5.65145200 4.18310671\n" " -3.32023802\n" " 0.81430558 2 0.08023553 0.61572271\n" " -0.72853293\n" " 0.95575855 1 0.39678153\n" "#","\n" "Bi GTH-BLYP-q15\n" " 2 3 10\n" " 0.51000000 1 13.61415171\n" " 3\n" " 0.47534187 2 10.01031001 -4.17527106\n" " 5.39025176\n" " 0.54300464 2 5.84572146 -3.45677684\n" " 4.09011352\n" " 0.39904006 2 -5.95513083 0.85300728\n" " -0.96721934\n" "#","\n" "Bi GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.60500000 1 8.13212850\n" " 3\n" " 0.59003694 3 0.58526544 2.28713930 -1.46002100\n" " -5.32740847 3.76975801\n" " -2.99215266\n" " 0.77185023 2 0.16538598 0.48986468\n" " -0.57961570\n" " 0.93145569 1 0.39528270\n" "#","\n" "H GTH-BP-q1 GTH-BP\n" " 1\n" " 0.20000000 2 -4.18576872 0.72693955\n" " 0\n" "#","\n" "He GTH-BP-q2 GTH-BP\n" " 2\n" " 0.20000000 2 -9.13007508 1.70547521\n" " 0\n" "#","\n" "Li GTH-BP-q3 GTH-BP\n" " 3\n" " 0.40000000 4 -14.06056862 9.58589939 -1.77248513 0.08455183\n" " 0\n" "#","\n" "Be GTH-BP-q4 GTH-BP\n" " 4\n" " 0.32500000 4 -24.05179710 17.25001598 -3.33397632 0.16556913\n" " 0\n" "#","\n" "B GTH-BP-q3 GTH-BP\n" " 2 1\n" " 0.41689069 2 -5.92229378 0.92456157\n" " 2\n" " 0.37107711 1 6.29599634\n" " 0.35853552 0\n" "#","\n" "C GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.33679692 2 -8.86848685 1.35447596\n" " 2\n" " 0.30241022 1 9.62271161\n" " 0.28961690 0\n" "#","\n" "N GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.28309178 2 -12.45088915 1.87519554\n" " 2\n" " 0.25528977 1 13.63656889\n" " 0.24443710 0\n" "#","\n" "O GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.24401839 2 -16.70590802 2.49292672\n" " 2\n" " 0.22086487 1 18.34759371\n" " 0.21290362 0\n" "#","\n" "F GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.21448854 2 -21.61832219 3.20543202\n" " 2\n" " 0.19461036 1 23.75712327\n" " 0.18640875 0\n" "#","\n" "Ne GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.19000000 2 -27.05603079 4.33563519\n" " 2\n" " 0.17609718 2 28.15075707 0.83365601\n" " -1.07624528\n" " 0.19349680 1 -0.24066336\n" "#","\n" "Na GTH-BP-q1\n" " 1\n" " 0.75473588 1 -2.13985326\n" " 2\n" " 0.72207334 2 2.08932802 -0.33891173\n" " 0.43753317\n" " 0.87531990 1 0.49722485\n" "#","\n" "Na GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.21033221 2 1.69258850 0.50357981\n" " 2\n" " 0.13173054 1 40.12933608\n" " 0.14067337 1 -12.69190352\n" "#","\n" "Mg GTH-BP-q10 GTH-BP\n" " 4 6\n" " 0.20344528 2 -19.14863290 2.82311627\n" " 2\n" " 0.14101308 1 40.61528144\n" " 0.10485644 1 -10.81236006\n" "#","\n" "Al GTH-BP-q3 GTH-BP\n" " 2 1\n" " 0.45000000 1 -7.51792352\n" " 2\n" " 0.48626591 2 6.97775636 -1.91568248\n" " 2.47313545\n" " 0.56192765 1 1.85584177\n" "#","\n" "Si GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.44000000 1 -6.31784112\n" " 2\n" " 0.43603553 2 8.90462481 -2.69406309\n" " 3.47802049\n" " 0.49841919 1 2.41937486\n" "#","\n" "P GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.43000000 1 -5.89229627\n" " 2\n" " 0.39681575 2 10.93288778 -3.45803253\n" " 4.46430080\n" " 0.44912129 1 3.03004831\n" "#","\n" "S GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.42000000 1 -6.03304243\n" " 2\n" " 0.36545997 2 13.05126503 -4.21706733\n" " 5.44421051\n" " 0.41024550 1 3.67822896\n" "#","\n" "Cl GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.41000000 1 -6.39460178\n" " 2\n" " 0.34001772 2 15.11347341 -4.90811514\n" " 6.33634940\n" " 0.37914105 1 4.30633607\n" "#","\n" "Ar GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31922565 2 17.15805529 -5.55332249\n" " 7.16930851\n" " 0.35391145 1 4.94347383\n" "#","\n" "K GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.40000000 2 -3.20803677 -1.13958016\n" " 2\n" " 0.30531669 2 17.82113209 -5.62459155\n" " 7.26131647\n" " 0.31728644 2 7.27073764 -2.45836276\n" " 2.90877405\n" "#","\n" "Ca GTH-BP-q10 GTH-BP\n" " 4 6\n" " 0.39000000 2 -5.15066460 -1.27635919\n" " 3\n" " 0.29180561 2 20.37501847 -6.39225402\n" " 8.25236446\n" " 0.30585091 2 8.08679088 -2.35194765\n" " 2.78286199\n" " 0.69084590 1 0.05057463\n" "#","\n" "Sc GTH-BP-q11 GTH-BP\n" " 4 6 1\n" " 0.38500000 2 8.15113811 -0.54578786\n" " 3\n" " 0.36408582 2 2.63374349 3.01189542\n" " -3.88834027\n" " 0.24337293 2 -2.59643301 7.97785436\n" " -9.43952457\n" " 0.25316272 1 -8.16168667\n" "#","\n" "Ti GTH-BP-q12 GTH-BP\n" " 4 6 2\n" " 0.38000000 2 8.75240544 -0.72051287\n" " 3\n" " 0.33725619 2 2.57793688 3.67192953\n" " -4.74044064\n" " 0.24244686 2 -4.63571761 8.84700754\n" " -10.46792049\n" " 0.24327738 1 -9.40815808\n" "#","\n" "V GTH-BP-q13 GTH-BP\n" " 4 6 3\n" " 0.37500000 2 7.15179161 -0.34356487\n" " 3\n" " 0.32978741 2 1.96706044 4.72624160\n" " -6.10155167\n" " 0.24617385 2 -5.58236403 8.79691014\n" " -10.40864444\n" " 0.24115908 1 -9.44742960\n" "#","\n" "Cr GTH-BP-q14 GTH-BP\n" " 3 6 5\n" " 0.37000000 2 5.65864275 -0.68098927\n" " 3\n" " 0.31450745 2 2.82535174 5.00194988\n" " -6.45748952\n" " 0.24079099 2 -4.43722064 7.25268232\n" " -8.58148945\n" " 0.22035720 1 -11.18549799\n" "#","\n" "Mn GTH-BP-q15 GTH-BP\n" " 4 6 5\n" " 0.36500000 2 6.08697327 -0.45767880\n" " 3\n" " 0.29664936 2 1.82641604 6.37301365\n" " -8.22752524\n" " 0.24691092 2 -6.51555304 7.91051030\n" " -9.35984202\n" " 0.22235797 1 -11.61828411\n" "#","\n" "Fe GTH-BP-q16 GTH-BP\n" " 4 6 6\n" " 0.36000000 2 6.76627078 -0.22960467\n" " 3\n" " 0.27801949 2 0.64092335 7.90310889\n" " -10.20286971\n" " 0.25211093 2 -7.91342590 7.66613465\n" " -9.07069285\n" " 0.22286543 1 -12.38774903\n" "#","\n" "Co GTH-BP-q17 GTH-BP\n" " 4 6 7\n" " 0.35500000 2 3.11870813 0.60978675\n" " 3\n" " 0.27344715 2 0.60869990 9.05959793\n" " -11.69589063\n" " 0.24486485 2 -8.73194160 9.19441838\n" " -10.87898254\n" " 0.22321373 1 -11.65940289\n" "#","\n" "Ni GTH-BP-q18 GTH-BP\n" " 4 6 8\n" " 0.35000000 2 1.98092026 0.67873534\n" " 3\n" " 0.26151729 2 0.64051423 9.97129765\n" " -12.87288991\n" " 0.22299669 2 -11.03584887 12.32415881\n" " -14.58214136\n" " 0.21531615 1 -12.60737765\n" "#","\n" "Cu GTH-BP-q11 GTH-BP\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.42826021 3 9.92997278 -6.73378071 2.06123370\n" " 12.04587038 -5.32208253\n" " 4.22427205\n" " 0.56179993 2 2.52706517 -0.76026621\n" " 0.89955911\n" " 0.26481830 1 -12.79028986\n" "#","\n" "Zn GTH-BP-q12 GTH-BP\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.39853504 3 11.71430184 -8.95271466 3.10389577\n" " 16.60639177 -8.01422441\n" " 6.36109342\n" " 0.54277993 2 2.59454952 -0.56410898\n" " 0.66746275\n" " 0.25119891 1 -14.42369639\n" "#","\n" "Ga GTH-BP-q13 GTH-BP\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39614555 3 12.22933993 -7.15254431 2.02087227\n" " 12.52084398 -5.21786976\n" " 4.14155572\n" " 0.57682875 2 1.65710194 0.27257669\n" " -0.32251709\n" " 0.23837295 1 -16.19719645\n" "#","\n" "Ge GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42652691 3 7.46008807 -0.10148543 -1.79977798\n" " -2.79632198 4.64700676\n" " -3.68844727\n" " 0.57081829 2 0.83232240 0.67204801\n" " -0.79517793\n" " 0.80229340 1 0.20140599\n" "#","\n" "As GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45615688 3 5.51837021 0.17312741 -1.14220882\n" " -2.08130930 2.94917048\n" " -2.34083150\n" " 0.55642685 2 0.96871581 0.69251828\n" " -0.81939868\n" " 0.70085191 1 0.31310326\n" "#","\n" "Se GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43378134 3 6.42760223 -0.11666018 -1.25092543\n" " -1.88402272 3.22987558\n" " -2.56363426\n" " 0.47287696 2 2.19350862 0.46354749\n" " -0.54847679\n" " 0.61779280 1 0.45787624\n" "#","\n" "Br GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43844329 3 6.02809057 0.36950836 -1.26583607\n" " -2.53591576 3.26837467\n" " -2.59419197\n" " 0.45265302 2 2.45444938 0.55326441\n" " -0.65463128\n" " 0.57270080 1 0.53453193\n" "#","\n" "Kr GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42201160 3 6.43640090 0.55484448 -1.49019203\n" " -3.14009866 3.84765927\n" " -3.05398486\n" " 0.43381353 2 2.58759250 0.72129118\n" " -0.85344324\n" " 0.54760510 1 0.52878835\n" "#","\n" "Zr GTH-BP-q12 GTH-BP\n" " 4 6 2\n" " 0.47000000 2 7.71710396 -1.87349588\n" " 3\n" " 0.26012850 2 23.33316266 -8.48756302\n" " 10.95739674\n" " 0.28909449 2 8.57471103 -5.33803887\n" " 6.31605277\n" " 0.57923104 2 0.03180631 0.27415481\n" " -0.31086233\n" "#","\n" "Ru GTH-BP-q16 GTH-BP\n" " 3 6 7\n" " 0.43000000 2 14.95348689 -0.02426473\n" " 3\n" " 0.35723814 2 -1.36117090 5.92761103\n" " -7.65251293\n" " 0.36153743 2 -4.67111662 4.55280704\n" " -5.38695393\n" " 0.47093469 2 0.51873585 -2.29176040\n" " 2.59861204\n" "#","\n" "Te GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.57500000 1 8.45045608\n" " 3\n" " 0.57841719 3 1.43632249 1.01620377 -0.52198665\n" " -2.16092478 1.34776374\n" " -1.06975431\n" " 0.60416533 2 0.67900355 0.42745229\n" " -0.50576837\n" " 0.80633893 1 0.35636810\n" "#","\n" "Cs GTH-BP-q1\n" " 1\n" " 1.20000000 0\n" " 3\n" " 1.15311277 3 0.93256439 0.00814108 -0.14921814\n" " -0.25321342 0.38527959\n" " -0.30580619\n" " 1.29745832 2 0.63229903 -0.43114835\n" " 0.51014161\n" " 1.01147944 1 -0.69777439\n" "#","\n" "Cs GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.54000000 2 33.18925821 -2.80669630\n" " 4\n" " 0.44888547 2 -3.15382781 3.31288554\n" " -4.27691685\n" " 0.36087547 2 -5.24766705 3.25354824\n" " -3.84965020\n" " 0.76171895 1 0.18517971\n" " 0.33862935 1 -16.82118432\n" "#","\n" "Au GTH-BP-q11\n" " 1 0 10\n" " 0.59000000 1 10.62376865\n" " 3\n" " 0.53803750 2 6.00785520 -2.34452337\n" " 3.02676666\n" " 0.60560054 2 4.37533897 -4.26458410\n" " 5.04592396\n" " 0.43922932 2 -7.29174553 2.89836819\n" " -3.28644061\n" "#","\n" "H GTH-HCTH120-q1 GTH-HCTH120\n" " 1\n" " 0.20000000 2 -4.17956174 0.72571934\n" " 0\n" "#","\n" "C GTH-HCTH120-q4 GTH-HCTH120\n" " 2 2\n" " 0.33476327 2 -8.73799634 1.35592059\n" " 2\n" " 0.30224259 1 9.60562026\n" " 0.29150776 0\n" "#","\n" "N GTH-HCTH120-q5 GTH-HCTH120\n" " 2 3\n" " 0.28289705 2 -12.19488993 1.83989918\n" " 2\n" " 0.25526540 1 13.60420273\n" " 0.24618482 0\n" "#","\n" "O GTH-HCTH120-q6 GTH-HCTH120\n" " 2 4\n" " 0.24476117 2 -16.35853832 2.42680904\n" " 2\n" " 0.22092765 1 18.29885210\n" " 0.21259318 0\n" "#","\n" "F GTH-HCTH120-q7 GTH-HCTH120\n" " 2 5\n" " 0.21555878 2 -21.21402136 3.11524496\n" " 2\n" " 0.19472662 1 23.68789289\n" " 0.18667491 0\n" "#","\n" "P GTH-HCTH120-q5 GTH-HCTH120\n" " 2 3\n" " 0.43000000 1 -5.55967117\n" " 2\n" " 0.39982658 2 10.60103244 -3.26897992\n" " 4.22023493\n" " 0.45131904 1 2.95015425\n" "#","\n" "Ar GTH-HCTH120-q8 GTH-HCTH120\n" " 2 6\n" " 0.40000000 1 -7.01660399\n" " 2\n" " 0.31726372 2 17.43470209 -5.68655497\n" " 7.34131090\n" " 0.35199759 1 4.99753699\n" "#","\n" "H GTH-HCTH407-q1 GTH-HCTH407\n" " 1\n" " 0.20000000 2 -4.17855435 0.72595112\n" " 0\n" "#","\n" "C GTH-HCTH407-q4 GTH-HCTH407\n" " 2 2\n" " 0.33895449 2 -8.64070432 1.35762517\n" " 2\n" " 0.30236220 1 9.59681173\n" " 0.29159277 0\n" "#","\n" "N GTH-HCTH407-q5 GTH-HCTH407\n" " 2 3\n" " 0.28580927 2 -12.16723704 1.85814414\n" " 2\n" " 0.25533910 1 13.60665370\n" " 0.24645801 0\n" "#","\n" "O GTH-HCTH407-q6 GTH-HCTH407\n" " 2 4\n" " 0.24634413 2 -16.39807931 2.45634724\n" " 2\n" " 0.22101140 1 18.29754812\n" " 0.21441275 0\n" "#","\n" "H GTH-PADE-q1 GTH-LDA-q1 GTH-PADE GTH-LDA\n" " 1\n" " 0.20000000 2 -4.18023680 0.72507482\n" " 0\n" "#","\n" "He GTH-PADE-q2 GTH-LDA-q2 GTH-PADE GTH-LDA\n" " 2\n" " 0.20000000 2 -9.11202340 1.69836797\n" " 0\n" "#","\n" "Li GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.78755305 2 -1.89261247 0.28605968\n" " 2\n" " 0.66637518 1 1.85881111\n" " 1.07930561 1 -0.00589504\n" "#","\n" "Li GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 3\n" " 0.40000000 4 -14.03486849 9.55347627 -1.76648817 0.08436998\n" " 0\n" "#","\n" "Be GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.73900865 2 -2.59295078 0.35483893\n" " 2\n" " 0.52879656 1 3.06166591\n" " 0.65815348 1 0.09246196\n" "#","\n" "Be GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 4\n" " 0.32500000 4 -24.01504092 17.20401444 -3.32639018 0.16541943\n" " 0\n" "#","\n" "B GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 2 1\n" " 0.43392956 2 -5.57864173 0.80425145\n" " 2\n" " 0.37384326 1 6.23392822\n" " 0.36039317 0\n" "#","\n" "C GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.34883045 2 -8.51377110 1.22843203\n" " 2\n" " 0.30455321 1 9.52284179\n" " 0.23267730 0\n" "#","\n" "N GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.28917923 2 -12.23481988 1.76640728\n" " 2\n" " 0.25660487 1 13.55224272\n" " 0.27013369 0\n" "#","\n" "O GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.24762086 2 -16.58031797 2.39570092\n" " 2\n" " 0.22178614 1 18.26691718\n" " 0.25682890 0\n" "#","\n" "F GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.21852465 2 -21.30736112 3.07286942\n" " 2\n" " 0.19556721 1 23.58494211\n" " 0.17426832 0\n" "#","\n" "Ne GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.19000000 2 -27.69285182 4.00590585\n" " 2\n" " 0.17948804 2 28.50609828 0.41682800\n" " -1.07624528\n" " 0.21491271 1 -0.00008991\n" "#","\n" "Na GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.88550938 1 -1.23886713\n" " 2\n" " 0.66110390 2 1.84727135 -0.22540903\n" " 0.58200362\n" " 0.85711928 1 0.47113258\n" "#","\n" "Na GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.24631780 2 -7.54559253 1.12599671\n" " 2\n" " 0.14125125 1 36.55698653\n" " 0.13966840 1 -10.39208332\n" "#","\n" "Mg GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.21094954 2 -19.41900751 2.87133099\n" " 2\n" " 0.14154696 1 40.31662629\n" " 0.10546902 1 -10.89111329\n" "#","\n" "Mg GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.65181169 1 -2.86429746\n" " 2\n" " 0.55647814 2 2.97095712 -0.51508390\n" " 1.32994091\n" " 0.67756881 1 1.04988101\n" "#","\n" "Al GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 2 1\n" " 0.45000000 1 -8.49135116\n" " 2\n" " 0.46010427 2 5.08833953 -1.03784325\n" " 2.67969975\n" " 0.53674439 1 2.19343827\n" "#","\n" "Si GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.44000000 1 -7.33610297\n" " 2\n" " 0.42273813 2 5.90692831 -1.26189397\n" " 3.25819622\n" " 0.48427842 1 2.72701346\n" "#","\n" "P GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.43000000 1 -6.65421981\n" " 2\n" " 0.38980284 2 6.84213556 -1.49369090\n" " 3.85669332\n" " 0.44079585 1 3.28260592\n" "#","\n" "S GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.42000000 1 -6.55449184\n" " 2\n" " 0.36175665 2 7.90530250 -1.73188130\n" " 4.47169830\n" " 0.40528502 1 3.86657900\n" "#","\n" "Cl GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.41000000 1 -6.86475431\n" " 2\n" " 0.33820832 2 9.06223968 -1.96193036\n" " 5.06568240\n" " 0.37613709 1 4.46587640\n" "#","\n" "Ar GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31738081 2 10.24948699 -2.16984522\n" " 5.60251627\n" " 0.35161921 1 4.97880101\n" "#","\n" "K GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.95000000 0\n" " 3\n" " 0.95536395 3 0.91461200 -0.11136800 -0.07324712\n" " 0.28755094 0.18912326\n" " -0.30022386\n" " 1.08641063 2 0.31546177 -0.02881726\n" " 0.06819410\n" " 0.72060608 1 -1.52951361\n" "#","\n" "K GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.40000000 2 -4.98934751 -0.75604821\n" " 2\n" " 0.29482550 2 11.23870466 -2.73733893\n" " 7.06777871\n" " 0.32235865 2 5.25670239 -0.39677748\n" " 0.93894690\n" "#","\n" "Ca GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.39000000 2 -4.92814602 -1.23285409\n" " 3\n" " 0.28190948 2 12.35233956 -2.96571964\n" " 7.65745518\n" " 0.31034528 2 5.72242348 -0.39028860\n" " 0.92359141\n" " 0.90433011 1 0.01680633\n" "#","\n" "Ca GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.80000000 0\n" " 3\n" " 0.66973721 3 1.64501442 -0.59004546 0.07221571\n" " 1.52349082 -0.18646017\n" " 0.29599634\n" " 0.94647402 2 0.58547893 -0.05338365\n" " 0.12632878\n" " 0.52654998 1 -3.03232095\n" "#","\n" "Sc GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.38500000 2 7.42503638 -0.48985155\n" " 3\n" " 0.35970653 2 6.11958455 0.99282105\n" " -2.56345293\n" " 0.24323416 2 6.37661838 2.54239924\n" " -6.01641469\n" " 0.25294463 1 -8.02089177\n" "#","\n" "Sc GTH-PADE-q3 GTH-LDA-q3\n" " 2 0 1\n" " 0.75000000 0\n" " 3\n" " 0.59707941 3 1.83576833 -0.67169514 0.34607449\n" " 1.73430939 -0.89356049\n" " 1.41848330\n" " 0.84799438 2 0.78412669 -0.10426371\n" " 0.24673297\n" " 0.45465318 1 -3.85924078\n" "#","\n" "Ti GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.38000000 2 7.54878947 -0.58837666\n" " 3\n" " 0.33423466 2 6.92573970 1.21689330\n" " -3.14200499\n" " 0.24241582 2 5.07908650 2.65559321\n" " -6.28428053\n" " 0.24294750 1 -9.12589591\n" "#","\n" "Ti GTH-PADE-q4 GTH-LDA-q4\n" " 2 0 2\n" " 0.72000000 0\n" " 3\n" " 0.52841076 3 1.86661330 -0.55779994 0.89250253\n" " 1.44023325 -2.30443161\n" " 3.65817177\n" " 0.79114554 2 0.96791577 -0.11016023\n" " 0.26068669\n" " 0.40871178 1 -4.82645635\n" "#","\n" "V GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 3\n" " 0.37500000 2 4.94129058 -0.09644336\n" " 3\n" " 0.32665112 2 7.65939048 1.50745391\n" " -3.89222925\n" " 0.24640748 2 4.25623049 2.51062024\n" " -5.94121187\n" " 0.24079150 1 -8.82851757\n" "#","\n" "V GTH-PADE-q5 GTH-LDA-q5\n" " 2 0 3\n" " 0.69000000 0\n" " 3\n" " 0.51470421 3 2.20866978 -0.73461318 0.75055919\n" " 1.89676307 -1.93793550\n" " 3.07637723\n" " 0.74350381 2 1.11575121 -0.12113126\n" " 0.28664887\n" " 0.37488959 1 -5.84163317\n" "#","\n" "Cr GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 3 6 5\n" " 0.37000000 2 5.11336166 -0.64681932\n" " 3\n" " 0.30601140 2 8.61783515 1.60252229\n" " -4.13769475\n" " 0.24108964 2 3.16158758 2.12679104\n" " -5.03290619\n" " 0.21957702 1 -11.15786828\n" "#","\n" "Cr GTH-PADE-q6 GTH-LDA-q6\n" " 1 0 5\n" " 0.66000000 0\n" " 3\n" " 0.49857767 3 2.40075556 -0.80261251 0.72025801\n" " 2.07233658 -1.85969818\n" " 2.95217934\n" " 0.71976824 2 1.14555658 -0.11757619\n" " 0.27823604\n" " 0.35434060 1 -6.61587832\n" "#","\n" "Mn GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 5\n" " 0.36500000 2 6.74868332 -0.57656900\n" " 3\n" " 0.28075266 2 9.37953150 2.15929667\n" " -5.57528002\n" " 0.25453567 2 0.37117568 1.78710271\n" " -4.22905690\n" " 0.22142210 1 -12.11538453\n" "#","\n" "Mn GTH-PADE-q7 GTH-LDA-q7\n" " 2 0 5\n" " 0.64000000 0\n" " 3\n" " 0.48124608 3 2.79903057 -0.96286281 0.62594958\n" " 2.48610107 -1.61619487\n" " 2.56562982\n" " 0.66930432 2 1.36877564 -0.13385695\n" " 0.31676337\n" " 0.32776314 1 -7.99541784\n" "#","\n" "Fe GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 6\n" " 0.36000000 2 5.39250667 -0.03006638\n" " 3\n" " 0.26926810 2 10.19372276 2.64717717\n" " -6.83498206\n" " 0.24768563 2 0.14561261 2.21217195\n" " -5.23495429\n" " 0.22302105 1 -12.02694100\n" "#","\n" "Fe GTH-PADE-q8 GTH-LDA-q8\n" " 2 0 6\n" " 0.61000000 0\n" " 3\n" " 0.45448200 3 3.01664046 -1.00040646 0.79478164\n" " 2.58303836 -2.05211737\n" " 3.25763534\n" " 0.63890282 2 1.49964199 -0.13812935\n" " 0.32687369\n" " 0.30873177 1 -9.14535371\n" "#","\n" "Co GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 7\n" " 0.35500000 2 3.41839094 0.48207820\n" " 3\n" " 0.25914047 2 11.19522589 3.03867482\n" " -7.84582466\n" " 0.25142451 2 -0.55146375 1.96043558\n" " -4.63923731\n" " 0.22166454 1 -12.07535366\n" "#","\n" "Co GTH-PADE-q9 GTH-LDA-q9\n" " 2 0 7\n" " 0.58000000 0\n" " 3\n" " 0.44045735 3 3.33497825 -1.11276628 0.75413362\n" " 2.87315017 -1.94716465\n" " 3.09102805\n" " 0.61004847 2 1.63400481 -0.15047260\n" " 0.35608316\n" " 0.29166058 1 -10.35880017\n" "#","\n" "Ni GTH-PADE-q10 GTH-LDA-q10\n" " 2 0 8\n" " 0.56000000 0\n" " 3\n" " 0.42539870 3 3.61965071 -1.19635099 0.74622158\n" " 3.08896496 -1.92673583\n" " 3.05859831\n" " 0.58408076 2 1.74222007 -0.16325873\n" " 0.38634067\n" " 0.27811348 1 -11.60842823\n" "#","\n" "Ni GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 4 6 8\n" " 0.35000000 2 3.61031072 0.44963832\n" " 3\n" " 0.24510489 2 12.16113071 3.51625420\n" " -9.07892931\n" " 0.23474136 2 -0.82062357 2.54774737\n" " -6.02907069\n" " 0.21494950 1 -13.39506212\n" "#","\n" "Cu GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.58000000 0\n" " 3\n" " 0.84328288 3 0.97578662 0.31838619 -0.03250652\n" " -0.82206962 0.08393147\n" " -0.13323707\n" " 1.08954266 2 0.02457986 0.10522210\n" " -0.24900093\n" " 1.29160225 1 -0.06529209\n" "#","\n" "Cu GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.42373431 3 3.88805001 -1.26901549 0.55872509\n" " 3.27658391 -1.44262198\n" " 2.29009139\n" " 0.57217697 2 1.75127242 -0.15844220\n" " 0.37494269\n" " 0.26614275 1 -12.67695749\n" "#","\n" "Cu GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.34500000 2 0.38158866 1.38680111\n" " 3\n" " 0.25131927 2 0.03400360 11.19862293\n" " -14.45736004\n" " 0.22038147 2 -14.27160096 16.04403507\n" " -18.98355830\n" " 0.21773897 1 -12.50830997\n" "#","\n" "Zn GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.40086620 3 4.27870973 -1.40486350 0.69522313\n" " 3.62734196 -1.79505840\n" " 2.84956686\n" " 0.53961806 2 2.02388400 -0.18244417\n" " 0.43174171\n" " 0.25215059 1 -14.33836841\n" "#","\n" "Zn GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.57000000 0\n" " 3\n" " 0.64071219 3 2.08855724 0.08453570 -0.22965773\n" " -0.21827024 0.59297371\n" " -0.94131659\n" " 0.96760483 2 0.16354600 0.09596150\n" " -0.22708635\n" " 1.33035200 1 0.01048578\n" "#","\n" "Zn GTH-PADE-q20 GTH-LDA-q20\n" " 4 6 10\n" " 0.34000000 2 -0.62164886 1.27422289\n" " 3\n" " 0.23892824 2 0.30844368 12.35877752\n" " -15.95511318\n" " 0.23960139 2 -9.43744220 8.39596370\n" " -9.93423822\n" " 0.20656246 1 -14.03217427\n" "#","\n" "Ga GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39530156 3 12.45703651 -7.08541671 1.84712738\n" " 12.15158654 -4.76926238\n" " 3.78548466\n" " 0.58085441 2 1.57898606 0.32869270\n" " -0.38891444\n" " 0.23908100 1 -16.13575103\n" "#","\n" "Ga GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.61079074 3 2.36932516 0.09644314 -0.13462450\n" " -0.24901512 0.34759896\n" " -0.55179624\n" " 0.70459583 2 0.74630529 0.21683799\n" " -0.51313234\n" " 0.98257967 1 0.07543656\n" "#","\n" "Ge GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.49374254 3 3.82689099 -0.42611775 -0.32795553\n" " 1.10023129 0.84677753\n" " -1.34421765\n" " 0.60106438 2 1.36251781 0.26511216\n" " -0.62736987\n" " 0.78836851 1 0.19120485\n" "#","\n" "As GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45640025 3 4.56076106 -0.65545935 -0.33517391\n" " 1.69238876 0.86541531\n" " -1.37380421\n" " 0.55056168 2 1.81224664 0.27329186\n" " -0.64672658\n" " 0.68528272 1 0.31237276\n" "#","\n" "Se GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43253108 3 5.14513084 -0.79473967 -0.33405137\n" " 2.05200900 0.86251693\n" " -1.36920317\n" " 0.47247252 2 2.85880607 0.24960384\n" " -0.59067050\n" " 0.61342013 1 0.43482888\n" "#","\n" "Br GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.42820734 3 5.39883713 -0.70499608 -0.32301656\n" " 1.82029205 0.83402517\n" " -1.32397392\n" " 0.45532308 2 3.10882269 0.26715405\n" " -0.63220188\n" " 0.55784727 1 0.55590294\n" "#","\n" "Kr GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.41075893 3 5.91119429 -0.76196004 -0.35573234\n" " 1.96737236 0.91849694\n" " -1.45806869\n" " 0.43025641 2 3.52435692 0.29208431\n" " -0.69119763\n" " 0.51712005 1 0.62922850\n" "#","\n" "Rb GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 1.09620685 2 0.84733274 -0.74812032\n" " 3\n" " 0.95569909 3 0.88746022 -0.34976454 -0.00164684\n" " 0.90308815 0.00425212\n" " -0.00675003\n" " 1.15668058 2 0.46173448 -0.14203355\n" " 0.33611273\n" " 0.66432256 1 -1.36293829\n" "#","\n" "Rb GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.49000000 2 4.50415106 -0.74101810\n" " 3\n" " 0.28230077 2 9.53632920 -3.67415744\n" " 9.48663373\n" " 0.30188614 2 2.20959243 -2.31371511\n" " 5.47524928\n" " 0.51489528 1 0.44937574\n" "#","\n" "Sr GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.48000000 2 5.57145509 -1.07996304\n" " 3\n" " 0.27544056 2 9.99513531 -3.61608019\n" " 9.33667892\n" " 0.30224313 2 3.16912572 -1.71111259\n" " 4.04923144\n" " 0.50204544 1 0.43872821\n" "#","\n" "Sr GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 1.01000000 2 0.68474888 -0.06212465\n" " 3\n" " 0.83756431 3 1.20039504 -0.35889978 -0.07706135\n" " 0.92667525 0.19897155\n" " -0.31585755\n" " 1.17417825 2 0.43998339 -0.00771915\n" " 0.01826685\n" " 0.74317548 1 -1.38699026\n" "#","\n" "Y GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.47500000 2 6.89262113 -1.44841137\n" " 3\n" " 0.25929613 2 11.06849407 -4.05874563\n" " 10.47963616\n" " 0.28851147 2 3.01907548 -1.80967899\n" " 4.28248210\n" " 0.50364209 2 0.33991901 -0.00795600\n" " 0.01804251\n" "#","\n" "Y GTH-PADE-q3 GTH-LDA-q3\n" " 2 0 1\n" " 0.90000000 1 -0.34389132\n" " 3\n" " 0.78245699 3 1.52065466 -0.57489340 -0.04611453\n" " 1.48436836 0.11906721\n" " -0.18901334\n" " 0.94986375 2 0.78095000 -0.15582064\n" " 0.36873894\n" " 0.65385060 2 -1.25692979 0.03323415\n" " -0.07536797\n" "#","\n" "Zr GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.47000000 2 6.34261837 -1.73217100\n" " 3\n" " 0.26250960 2 11.10177456 -3.71411720\n" " 9.58980939\n" " 0.28881376 2 3.44681955 -1.78708731\n" " 4.22902044\n" " 0.58825239 2 0.33463695 0.08621617\n" " -0.19551990\n" "#","\n" "Zr GTH-PADE-q4 GTH-LDA-q4\n" " 2 0 2\n" " 0.75000000 1 -0.78261098\n" " 3\n" " 0.64999821 3 1.73987747 -0.92494916 0.29407499\n" " 2.38820846 -0.75929835\n" " 1.20534876\n" " 0.87440769 2 1.01829381 -0.22321509\n" " 0.52822332\n" " 0.63066761 2 -1.17391057 -0.09356197\n" " 0.21217861\n" "#","\n" "Nb GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 3 6 4\n" " 0.46000000 2 13.50539360 0.75243372\n" " 3\n" " 0.39370802 2 3.22202457 1.78131738\n" " -4.59934171\n" " 0.40362557 2 -0.82203677 0.94968536\n" " -2.24736575\n" " 0.51364405 2 -1.48984771 -0.36326930\n" " 0.82381733\n" "#","\n" "Nb GTH-PADE-q5 GTH-LDA-q5\n" " 1 0 4\n" " 0.72400000 1 4.02105754\n" " 3\n" " 0.69970828 2 1.53265135 -0.55316427\n" " 1.42826399\n" " 0.84667164 2 0.60967518 -0.25218878\n" " 0.59678759\n" " 0.51607226 2 -2.69682993 0.74741000\n" " -1.69496657\n" "#","\n" "Mo GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 3 6 5\n" " 0.43000000 2 16.23745228 1.49653613\n" " 3\n" " 0.37625527 2 3.36242551 2.04852792\n" " -5.28927635\n" " 0.36173435 2 -0.37957075 1.71892268\n" " -4.06771350\n" " 0.52582812 2 -1.54321130 -0.47376044\n" " 1.07438769\n" "#","\n" "Mo GTH-PADE-q6 GTH-LDA-q6\n" " 1 0 5\n" " 0.69900000 1 7.99586821\n" " 3\n" " 0.67812595 2 1.28960728 -0.38656751\n" " 0.99811301\n" " 0.80077140 2 0.30141226 -0.31338933\n" " 0.74161451\n" " 0.45338393 2 -2.80970771 3.00775463\n" " -6.82094635\n" "#","\n" "Tc GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 3 6 6\n" " 0.43000001 2 14.91001129 1.04638147\n" " 3\n" " 0.36972111 2 3.91740844 2.04044213\n" " -5.26839892\n" " 0.35777235 2 -0.27000007 1.57949660\n" " -3.73777116\n" " 0.51048733 2 -1.58670910 -0.49930056\n" " 1.13230724\n" "#","\n" "Tc GTH-PADE-q7 GTH-LDA-q7\n" " 1 0 6\n" " 0.67300000 1 13.31538067\n" " 3\n" " 0.67761188 2 0.81921767 -0.13495786\n" " 0.34845968\n" " 0.78427538 2 0.02867266 -0.27820911\n" " 0.65836292\n" " 0.51988975 2 -5.98422427 -0.31829379\n" " 0.72182246\n" "#","\n" "Ru GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 3 6 7\n" " 0.43000000 2 13.58257130 0.59622675\n" " 3\n" " 0.36408374 2 4.48063220 2.04055059\n" " -5.26867898\n" " 0.36405317 2 -0.32037214 1.29296495\n" " -3.05971353\n" " 0.49585036 2 -1.59787017 -0.51393501\n" " 1.16549505\n" "#","\n" "Ru GTH-PADE-q8 GTH-LDA-q8\n" " 1 0 7\n" " 0.64721429 1 8.68772333\n" " 3\n" " 0.62565612 2 1.63786602 -0.51484914\n" " 1.32933477\n" " 0.74642487 2 0.63901157 -0.27483407\n" " 0.65037612\n" " 0.44035802 2 -4.88336495 1.35098513\n" " -3.06374629\n" "#","\n" "Rh GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 3 6 8\n" " 0.42000000 2 15.22501231 0.41591145\n" " 3\n" " 0.35005185 2 4.71529244 2.24847003\n" " -5.80552464\n" " 0.35025339 2 -0.50469386 1.42536937\n" " -3.37303956\n" " 0.49694980 2 -1.68559431 -0.61192127\n" " 1.38770701\n" "#","\n" "Rh GTH-PADE-q9 GTH-LDA-q9\n" " 1 0 8\n" " 0.62142857 1 5.39796233\n" " 3\n" " 0.59807881 2 2.24211131 -0.83330981\n" " 2.15159669\n" " 0.70958567 2 1.15527830 -0.29785195\n" " 0.70484635\n" " 0.36920687 2 -1.05305819 4.81701344\n" " -10.92395969\n" "#","\n" "Pd GTH-PADE-q10 GTH-LDA-q10\n" " 0 0 10\n" " 0.59600000 1 5.20966476\n" " 3\n" " 0.58220422 2 2.41107608 -0.89811395\n" " 2.31892024\n" " 0.68878713 2 1.22725330 -0.32032214\n" " 0.75802053\n" " 0.44283523 2 -4.37713124 -0.18223540\n" " 0.41327105\n" "#","\n" "Pd GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 2 6 10\n" " 0.41000000 2 15.72025922 0.14076508\n" " 3\n" " 0.34215063 2 5.17768606 2.26678707\n" " -5.85281906\n" " 0.34311064 2 -0.37256076 1.37706395\n" " -3.25872809\n" " 0.49491624 2 -1.60827298 -0.63789470\n" " 1.44660922\n" "#","\n" "Ag GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.65000000 1 -2.37606096\n" " 3\n" " 1.01270456 3 0.89793134 0.28982424 0.00726736\n" " -0.74832297 -0.01876424\n" " 0.02978730\n" " 1.23584202 2 0.13008068 0.11726324\n" " -0.27749548\n" " 1.01615913 1 -0.03884235\n" "#","\n" "Ag GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.57000000 1 1.01705324\n" " 3\n" " 0.49890039 3 2.99028401 -1.51526425 0.53817162\n" " 3.91239548 -1.38955314\n" " 2.20584723\n" " 0.63000853 2 1.81396786 -0.55123072\n" " 1.30444997\n" " 0.38765955 2 -3.42007573 0.44975502\n" " -1.01994852\n" "#","\n" "Ag GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.40000000 2 26.10213544 -5.21734352\n" " 3\n" " 0.30814467 2 1.55692822 3.68811443\n" " -4.76133525\n" " 0.42100419 2 0.24550848 -0.89060050\n" " 1.05377272\n" " 0.44722234 2 1.87011922 -3.09368795\n" " 3.50791241\n" "#","\n" "Cd GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.55000000 1 2.38271306\n" " 3\n" " 0.49150479 3 3.20793247 -1.60378823 0.38651363\n" " 4.14096341 -0.99797390\n" " 1.58423446\n" " 0.59856481 2 1.94014994 -0.64058146\n" " 1.51589242\n" " 0.37787436 2 -4.19007193 0.33960669\n" " -0.77015558\n" "#","\n" "Cd GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.62500000 1 -1.79683799\n" " 3\n" " 0.82846467 3 1.48529241 0.16450606 -0.09953846\n" " -0.42475283 0.25700719\n" " -0.40798627\n" " 0.97287254 2 0.46920843 0.18936149\n" " -0.44811107\n" " 1.24094900 1 0.06541164\n" "#","\n" "In GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.53000000 1 2.39540385\n" " 3\n" " 0.47408054 3 3.55441064 -1.84126870 0.38183068\n" " 4.75413535 -0.98588258\n" " 1.56504008\n" " 0.55981945 2 2.22366425 -0.86006177\n" " 2.03527762\n" " 0.36048751 2 -4.56641372 0.34120718\n" " -0.77378515\n" "#","\n" "In GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.61000000 1 2.86577676\n" " 3\n" " 0.77060197 3 1.25619360 0.15385620 -0.06790534\n" " -0.39725499 0.17533083\n" " -0.27832906\n" " 0.85813160 2 0.49445864 0.16091263\n" " -0.38078878\n" " 1.08869090 1 0.12920778\n" "#","\n" "Sn GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.60500000 1 4.61091234\n" " 3\n" " 0.66354369 3 1.64879146 0.05498623 -0.14066273\n" " -0.14197384 0.36318961\n" " -0.57654563\n" " 0.74586492 2 0.76935544 0.18807652\n" " -0.44507028\n" " 0.94445897 1 0.22511508\n" "#","\n" "Sb GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.59000000 1 6.68022783\n" " 3\n" " 0.59768356 3 1.95147672 -0.01453812 -0.19191821\n" " 0.03753727 0.49553069\n" " -0.78663058\n" " 0.67212205 2 0.97031285 0.19722998\n" " -0.46673132\n" " 0.85655729 1 0.30010262\n" "#","\n" "Te GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.57500000 1 9.38708481\n" " 3\n" " 0.55645602 3 2.04689031 0.01136047 -0.21497109\n" " -0.02933260 0.55505297\n" " -0.88111927\n" " 0.61526187 2 1.03347754 0.20333245\n" " -0.48117240\n" " 0.80510072 1 0.31741073\n" "#","\n" "I GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.56000000 1 14.66182521\n" " 3\n" " 0.55283008 3 1.33805374 0.32333643 -0.11404312\n" " -0.83485108 0.29445806\n" " -0.46743768\n" " 0.56225147 2 0.67449617 0.24415947\n" " -0.57778676\n" " 0.79432495 1 0.22434543\n" "#","\n" "Xe GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.56000000 1 12.73427972\n" " 3\n" " 0.50737118 3 2.23645069 0.15629453 -0.27630331\n" " -0.40355073 0.71341207\n" " -1.13250655\n" " 0.54102371 2 1.13004299 0.31810091\n" " -0.75276413\n" " 0.72982111 1 0.28013078\n" "#","\n" "Cs GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 1.20000000 0\n" " 3\n" " 1.22473727 3 0.61152657 -0.09288578 -0.07173455\n" " 0.23983005 0.18521782\n" " -0.29402418\n" " 1.28047759 2 0.24489277 -0.09604275\n" " 0.22727863\n" " 1.10752212 1 -0.54216260\n" "#","\n" "Cs GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.54000000 2 35.23443810 -3.31807009\n" " 4\n" " 0.45682103 2 -0.28237849 1.07705949\n" " -2.78095565\n" " 0.36246700 2 -2.69673321 0.96809883\n" " -2.29093996\n" " 0.76146205 1 0.18375440\n" " 0.33350703 1 -17.94825944\n" "#","\n" "Ba GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.54000000 2 24.47865325 -2.50084994\n" " 4\n" " 0.51477613 2 1.04672903 0.37847454\n" " -0.97721707\n" " 0.37519011 2 -0.20243912 -0.28749217\n" " 0.68033065\n" " 0.66540319 1 0.37841850\n" " 0.30492043 1 -18.79520777\n" "#","\n" "Ba GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 1.20000000 0\n" " 3\n" " 1.01618684 3 0.92259259 -0.29570030 -0.08135711\n" " 0.76349489 0.21006316\n" " -0.33346493\n" " 1.24987991 2 0.44716820 -0.06384326\n" " 0.15108073\n" " 0.93715823 1 -0.71893382\n" "#","\n" "La GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.53500000 2 19.90930823 -1.47483023\n" " 4\n" " 0.55177542 2 1.29327192 0.43447877\n" " -1.12181937\n" " 0.47630806 3 1.17252682 0.35023609 0.00887640\n" " -0.82880986 -0.02100539\n" " 0.02985728\n" " 0.62667220 1 0.32837704\n" " 0.29931017 1 -18.26943896\n" "#","\n" "Ce GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 1 1\n" " 0.53500000 2 18.26801534 -0.63048034\n" " 4\n" " 0.52642558 2 -0.68453554 1.78656499\n" " -2.30644548\n" " 0.49085089 2 -1.02722427 1.53667473\n" " -1.81821806\n" " 0.69222809 1 0.06340682\n" " 0.30390134 1 -17.54564801\n" "#","\n" "Pr GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 0 3\n" " 0.53208333 2 18.42473909 -0.65766893\n" " 4\n" " 0.52684996 2 1.01262106 0.66537143\n" " -1.71798165\n" " 0.45889736 2 1.11706004 0.78265878\n" " -1.85210872\n" " 0.74760989 1 0.01757109\n" " 0.30077296 1 -17.89711891\n" "#","\n" "Nd GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 4 6 0 4\n" " 0.52916670 2 17.81503043 -0.59479767\n" " 4\n" " 0.50299986 2 1.52910988 0.83413680\n" " -2.15373194\n" " 0.46701290 2 0.72155346 0.69619548\n" " -1.64749920\n" " 0.32528958 1 -0.54324017\n" " 0.29474281 1 -18.52022760\n" "#","\n" "Pm GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 0 5\n" " 0.52625000 2 18.25172292 -0.49210744\n" " 4\n" " 0.48987856 2 1.30897757 0.97124774\n" " -2.50775088\n" " 0.47226016 2 0.16051238 0.66146221\n" " -1.56530527\n" " 0.47370914 1 -0.42995241\n" " 0.29152653 1 -19.30505668\n" "#","\n" "Sm GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 0 6\n" " 0.52333337 2 17.20679172 -0.53280292\n" " 4\n" " 0.47967676 2 1.72363519 1.02996853\n" " -2.65936731\n" " 0.49059775 2 -0.08240311 0.46948681\n" " -1.11100858\n" " 0.47084026 1 -0.41063034\n" " 0.28404049 1 -19.98429201\n" "#","\n" "Eu GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 0 7\n" " 0.52041668 2 17.37351625 -0.64846778\n" " 4\n" " 0.46904261 2 1.76363790 1.12972280\n" " -2.91693172\n" " 0.44590722 2 0.51804594 0.90228057\n" " -2.13518554\n" " 0.49003840 1 -0.42611996\n" " 0.27840129 1 -20.94652763\n" "#","\n" "Gd GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 4 6 0 8\n" " 0.51750004 2 17.51255640 -0.71953420\n" " 4\n" " 0.46201372 2 1.55185591 1.18850339\n" " -3.06870256\n" " 0.45695327 2 -0.05834713 0.71741382\n" " -1.69771095\n" " 0.48236813 1 -0.56260077\n" " 0.27338980 1 -21.92349011\n" "#","\n" "Tb GTH-PADE-q19 GTH-LDA-q19 GTH-PADE GTH-LDA\n" " 4 6 0 9\n" " 0.51458335 2 17.60361623 -0.82808004\n" " 4\n" " 0.44869439 2 1.71848088 1.33046245\n" " -3.43523929\n" " 0.42422013 2 0.56239978 1.17553634\n" " -2.78182671\n" " 0.48280866 1 -0.62580219\n" " 0.26825995 1 -22.91169709\n" "#","\n" "Dy GTH-PADE-q20 GTH-LDA-q20 GTH-PADE GTH-LDA\n" " 4 6 0 10\n" " 0.51166666 2 16.99433138 -0.95529792\n" " 4\n" " 0.44059045 2 1.94031950 1.37870375\n" " -3.55979777\n" " 0.43464206 2 0.01431536 0.86469335\n" " -2.04623793\n" " 0.46722880 1 -0.66892417\n" " 0.26167045 1 -23.92235817\n" "#","\n" "Ho GTH-PADE-q21 GTH-LDA-q21 GTH-PADE GTH-LDA\n" " 4 6 0 11\n" " 0.50875002 2 16.78157003 -1.17351448\n" " 4\n" " 0.43221176 2 2.05279689 1.42314101\n" " -3.67453429\n" " 0.42013792 2 0.25329464 0.99529117\n" " -2.35528878\n" " 0.44713057 1 -0.74286267\n" " 0.25499226 1 -25.19721081\n" "#","\n" "Er GTH-PADE-q22 GTH-LDA-q22 GTH-PADE GTH-LDA\n" " 4 6 0 12\n" " 0.50583333 2 17.10529281 -1.43095318\n" " 4\n" " 0.41994801 2 2.14450257 1.54307528\n" " -3.98420323\n" " 0.41445530 2 0.05408736 0.96959342\n" " -2.29447680\n" " 0.41838497 1 -0.99900632\n" " 0.24912591 1 -26.69680936\n" "#","\n" "Tm GTH-PADE-q23 GTH-LDA-q23 GTH-PADE GTH-LDA\n" " 4 6 0 13\n" " 0.50291669 2 17.24729254 -1.62769708\n" " 4\n" " 0.41337286 2 1.94719583 1.59627195\n" " -4.12155644\n" " 0.40992301 2 -0.09449281 0.93984837\n" " -2.22408718\n" " 0.39287009 1 -1.35330770\n" " 0.24391696 1 -28.10415875\n" "#","\n" "Yb GTH-PADE-q24 GTH-LDA-q24 GTH-PADE GTH-LDA\n" " 4 6 0 14\n" " 0.50000000 2 17.35714421 -1.77391642\n" " 4\n" " 0.40230918 2 2.12077095 1.86019003\n" " -4.80298999\n" " 0.41435774 2 -0.92321216 0.70931244\n" " -1.67853959\n" " 0.44402468 1 -0.88996733\n" " 0.23829829 1 -29.93285367\n" "#","\n" "Lu GTH-PADE-q25 GTH-LDA-q25 GTH-PADE GTH-LDA\n" " 4 6 1 14\n" " 0.49700000 2 17.03705292 -1.66161023\n" " 4\n" " 0.39120615 2 2.18467779 2.10393860\n" " -5.43234610\n" " 0.39389567 2 -0.71981878 1.15101512\n" " -2.72379890\n" " 0.43651827 1 -1.17324513\n" " 0.23262926 1 -31.85226177\n" "#","\n" "Hf GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.56000000 2 5.13480056 0.52919062\n" " 3\n" " 0.42281035 3 2.56444209 2.32910852 0.27075363\n" " -6.01373234 -0.69908286\n" " 1.10975964\n" " 0.47268130 2 -1.02527490 0.79129612\n" " -1.87254839\n" " 0.42638752 2 1.45936326 2.32948018\n" " -5.28276448\n" "#","\n" "Ta GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 3\n" " 0.55000000 2 4.54623627 0.77942234\n" " 3\n" " 0.42185350 3 2.70813558 2.24282880 0.23120613\n" " -5.79095906 -0.59697167\n" " 0.94766314\n" " 0.46134516 2 -0.72485277 0.93609767\n" " -2.21521141\n" " 0.41099434 2 1.34849472 2.37542018\n" " -5.38694662\n" "#","\n" "Ta GTH-PADE-q5 GTH-LDA-q5\n" " 2 0 3\n" " 0.74400000 1 3.62311645\n" " 3\n" " 0.58180113 2 2.00533833 -1.17236605\n" " 3.02703613\n" " 0.77064628 2 0.51856664 -0.50091380\n" " 1.18537841\n" " 0.53436996 2 -2.20220040 0.73493457\n" " -1.66667495\n" "#","\n" "W GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 4 6 4\n" " 0.54000000 2 4.80025094 0.90154434\n" " 3\n" " 0.41856963 3 2.69220433 2.33255747 0.29723855\n" " -6.02263750 -0.76746663\n" " 1.21831550\n" " 0.44955492 2 -0.70208426 1.03602407\n" " -2.45168043\n" " 0.39960167 2 1.17743638 2.44891670\n" " -5.55362106\n" "#","\n" "W GTH-PADE-q6 GTH-LDA-q6\n" " 2 0 4\n" " 0.71900000 1 4.05844991\n" " 3\n" " 0.58246289 2 2.16116556 -1.06177835\n" " 2.74149991\n" " 0.74230741 2 0.60097339 -0.54932611\n" " 1.29994284\n" " 0.53495887 2 -2.51706347 0.34797654\n" " -0.78913661\n" "#","\n" "Re GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 5\n" " 0.53000000 2 5.59266028 0.94395680\n" " 3\n" " 0.40325199 3 2.76072043 2.47732079 0.21194880\n" " -6.39641476 -0.54724946\n" " 0.86873158\n" " 0.44095069 2 -0.90054631 1.06118049\n" " -2.51121137\n" " 0.39039544 2 0.87525142 2.50135628\n" " -5.67254285\n" "#","\n" "Re GTH-PADE-q7 GTH-LDA-q7\n" " 2 0 5\n" " 0.69300000 1 8.18081618\n" " 3\n" " 0.50981621 2 2.26937936 -1.36659354\n" " 3.52852934\n" " 0.74583906 2 0.49669329 -0.39123421\n" " 0.92582911\n" " 0.50095420 2 -3.68962967 0.83544051\n" " -1.89460099\n" "#","\n" "Os GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 6\n" " 0.52000000 2 5.61307299 0.92195476\n" " 3\n" " 0.41057830 3 2.78575826 2.59185074 0.54822025\n" " -6.69212983 -1.41549860\n" " 2.24703437\n" " 0.42239546 2 -0.59000550 1.27547446\n" " -3.01832347\n" " 0.38025200 2 0.88013282 2.52796761\n" " -5.73289168\n" "#","\n" "Os GTH-PADE-q8 GTH-LDA-q8\n" " 2 0 6\n" " 0.66700000 1 9.44045936\n" " 3\n" " 0.51030708 2 2.40236688 -1.17998407\n" " 3.04670577\n" " 0.71755329 2 0.49952321 -0.44509384\n" " 1.05328427\n" " 0.48758605 2 -4.14203471 0.73468110\n" " -1.66610013\n" "#","\n" "Ir GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 7\n" " 0.51000000 2 4.90450946 1.31378645\n" " 3\n" " 0.40446887 3 3.24327835 2.83328456 0.72142882\n" " -7.31550927 -1.86272120\n" " 2.95697824\n" " 0.41142571 2 -0.38057445 1.48088044\n" " -3.50440273\n" " 0.37642813 2 0.75431547 2.59088743\n" " -5.87558042\n" "#","\n" "Ir GTH-PADE-q9 GTH-LDA-q9\n" " 2 0 7\n" " 0.64100000 1 10.72001591\n" " 3\n" " 0.50996044 2 2.44599887 -1.08871009\n" " 2.81103736\n" " 0.68497052 2 0.46179182 -0.55134721\n" " 1.30472563\n" " 0.47174528 2 -4.54548411 0.72115617\n" " -1.63542847\n" "#","\n" "Pt GTH-PADE-q10 GTH-LDA-q10\n" " 1 0 9\n" " 0.61600000 1 11.02741707\n" " 3\n" " 0.52013211 2 2.44743006 -1.02260695\n" " 2.64035978\n" " 0.65897566 2 0.40845297 -0.69628711\n" " 1.64771604\n" " 0.45124318 2 -4.55229454 0.92706936\n" " -2.10239568\n" "#","\n" "Pt GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 3 6 9\n" " 0.50000000 2 5.44583159 1.15638204\n" " 3\n" " 0.40994150 3 2.99436565 2.88489700 1.03520925\n" " -7.44877202 -2.67289879\n" " 4.24309529\n" " 0.39865199 2 -0.22518140 1.59606293\n" " -3.77697426\n" " 0.36796397 2 0.63206655 2.53790667\n" " -5.75543134\n" "#","\n" "Au GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.65000000 2 -1.96371223 -1.69812291\n" " 2\n" " 0.91930757 3 1.53959915 0.18155717 -0.19323771\n" " -0.46877861 0.49893761\n" " -0.79203890\n" " 1.14035080 3 0.47122943 0.21024829 -0.06235978\n" " -0.49753827 0.14757016\n" " -0.20975780\n" "#","\n" "Au GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.59000000 1 11.60442790\n" " 3\n" " 0.52117975 2 2.53861359 -1.04613664\n" " 2.70111320\n" " 0.63061306 2 0.39485270 -0.86959213\n" " 2.05783056\n" " 0.44070643 2 -4.71906966 0.72777081\n" " -1.65042907\n" "#","\n" "Au GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.49000000 2 9.07322639 -0.34013367\n" " 3\n" " 0.28803780 3 -5.90182040 26.42537412 -15.50837777\n" " -59.33938963 40.04245923\n" " -31.78271670\n" " 0.35586747 2 -7.08858659 8.19796427\n" " -9.69996213\n" " 0.33386175 2 -8.82572349 9.56535285\n" " -10.84609065\n" "#","\n" "Hg GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.57000000 1 2.13457183\n" " 3\n" " 0.52180188 2 3.29392021 -1.80519780\n" " 4.66100069\n" " 0.62164790 2 2.10096040 -0.71415047\n" " 1.68998846\n" " 0.40189401 2 -1.66988578 1.09060737\n" " -2.47326503\n" "#","\n" "Hg GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.64000000 1 -3.29632880\n" " 3\n" " 0.81210780 3 1.76504143 0.18053035 -0.19516558\n" " -0.46612737 0.50391537\n" " -0.79994085\n" " 1.05371378 2 0.47405588 0.22473320\n" " -0.53181582\n" " 1.10000000 1 0.12063831\n" "#","\n" "Tl GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.55000000 1 7.30188582\n" " 3\n" " 0.50242266 2 3.32656022 -1.68141322\n" " 4.34139027\n" " 0.57201594 2 1.27280729 -1.26443781\n" " 2.99220598\n" " 0.39318504 2 -3.20065227 1.32653373\n" " -3.00829573\n" "#","\n" "Tl GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.63000000 1 -1.23584552\n" " 3\n" " 0.75400547 3 1.87576571 0.11761462 -0.19062668\n" " -0.30367964 0.49219597\n" " -0.78133689\n" " 0.90374170 2 0.75966830 0.24793467\n" " -0.58672051\n" " 1.06351212 1 0.24761396\n" "#","\n" "Pb GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.61750000 1 0.75314257\n" " 3\n" " 0.70525860 3 1.97992741 0.06388872 -0.19665860\n" " -0.16495996 0.50777033\n" " -0.80606040\n" " 0.84664106 2 0.86442030 0.22860106\n" " -0.54096885\n" " 0.97193857 1 0.37496708\n" "#","\n" "Bi GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.60500000 1 6.67943714\n" " 3\n" " 0.67885795 3 1.37763378 0.19895396 -0.11491910\n" " -0.51369691 0.29671983\n" " -0.47102813\n" " 0.79867267 2 0.65557809 0.17026993\n" " -0.40293219\n" " 0.93468255 1 0.37847579\n" "#","\n" "Po GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.59250000 1 10.41173070\n" " 3\n" " 0.64794961 3 1.14420296 0.28499406 -0.08280174\n" " -0.73585149 0.21379318\n" " -0.33938616\n" " 0.74894708 2 0.59456184 0.14942108\n" " -0.35359482\n" " 0.88046840 1 0.43323228\n" "#","\n" "At GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.58000000 1 13.52041116\n" " 3\n" " 0.62782694 3 0.94555652 0.37409257 -0.04645981\n" " -0.96590285 0.11995872\n" " -0.19042856\n" " 0.70982320 2 0.52707805 0.13472635\n" " -0.31882073\n" " 0.83836499 1 0.46894787\n" "#","\n" "Rn GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.57000000 1 14.62918461\n" " 3\n" " 0.61518195 3 0.98183224 0.40238854 -0.02938821\n" " -1.03896274 0.07588004\n" " -0.12045584\n" " 0.67669721 2 0.61227859 0.14541822\n" " -0.34412231\n" " 0.78833715 1 0.55774596\n" "#","\n" "H GTH-PBE-q1 GTH-PBE\n" " 1\n" " 0.20000000 2 -4.17890044 0.72446331\n" " 0\n" "#","\n" "He GTH-PBE-q2 GTH-PBE\n" " 2\n" " 0.20000000 2 -9.12214383 1.70270770\n" " 0\n" "#","\n" "Li GTH-PBE-q3 GTH-PBE\n" " 3\n" " 0.40000000 4 -14.08115455 9.62621962 -1.78361605 0.08515207\n" " 0\n" "#","\n" "Be GTH-PBE-q4 GTH-PBE\n" " 4\n" " 0.32500000 4 -24.06746684 17.27902186 -3.33910629 0.16554912\n" " 0\n" "#","\n" "B GTH-PBE-q3 GTH-PBE\n" " 2 1\n" " 0.41899145 2 -5.85946171 0.90375643\n" " 2\n" " 0.37132046 1 6.29728018\n" " 0.36456308 0\n" "#","\n" "C GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.33847124 2 -8.80367398 1.33921085\n" " 2\n" " 0.30257575 1 9.62248665\n" " 0.29150694 0\n" "#","\n" "N GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.28379051 2 -12.41522559 1.86809592\n" " 2\n" " 0.25540500 1 13.63026257\n" " 0.24549453 0\n" "#","\n" "O GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.24455430 2 -16.66721480 2.48731132\n" " 2\n" " 0.22095592 1 18.33745811\n" " 0.21133247 0\n" "#","\n" "F GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.21492959 2 -21.57302836 3.19977615\n" " 2\n" " 0.19468402 1 23.74354045\n" " 0.18615608 0\n" "#","\n" "Ne GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.19000000 2 -27.12015973 4.36044962\n" " 2\n" " 0.17605938 2 28.17737082 0.83365601\n" " -1.07624528\n" " 0.19547452 1 -0.23629360\n" "#","\n" "Na GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.23652322 2 0.29510499 -0.91388488\n" " 2\n" " 0.14356046 1 34.60149228\n" " 0.12993224 1 -14.27746168\n" "#","\n" "Mg GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.19275787 2 -20.57539077 3.04016732\n" " 2\n" " 0.14140682 1 41.04729209\n" " 0.10293187 1 -9.98562566\n" "#","\n" "Mg GTH-PBE-q2\n" " 2\n" " 0.57696017 1 -2.69040744\n" " 2\n" " 0.59392350 2 3.50321099 -0.71677167\n" " 0.92534825\n" " 0.70715728 1 0.83115848\n" "#","\n" "Al GTH-PBE-q3 GTH-PBE\n" " 2 1\n" " 0.45000000 1 -7.55476126\n" " 2\n" " 0.48743529 2 6.95993832 -1.88883584\n" " 2.43847659\n" " 0.56218949 1 1.86529857\n" "#","\n" "Si GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.44000000 1 -6.26928833\n" " 2\n" " 0.43563383 2 8.95174150 -2.70627082\n" " 3.49378060\n" " 0.49794218 1 2.43127673\n" "#","\n" "P GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.43000000 1 -5.87594327\n" " 2\n" " 0.39637742 2 11.00886207 -3.47035607\n" " 4.48021042\n" " 0.44829838 1 3.05606416\n" "#","\n" "S GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.42000000 1 -5.98626038\n" " 2\n" " 0.36482035 2 13.14354448 -4.24183045\n" " 5.47617957\n" " 0.40948048 1 3.70089057\n" "#","\n" "Cl GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.41000000 1 -6.39208181\n" " 2\n" " 0.33953864 2 15.21898983 -4.93452321\n" " 6.37044208\n" " 0.37847416 1 4.33877527\n" "#","\n" "Ar GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31881468 2 17.25203807 -5.58548836\n" " 7.21083447\n" " 0.35337019 1 4.97421551\n" "#","\n" "K GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.40000000 2 -3.36355184 -1.08652975\n" " 2\n" " 0.30531772 2 17.85062321 -5.62264870\n" " 7.25880826\n" " 0.31648432 2 7.33378021 -2.46094505\n" " 2.91182945\n" "#","\n" "Ca GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.39000000 2 -4.16707222 -1.58379781\n" " 3\n" " 0.28935572 2 20.53187635 -7.12978578\n" " 9.20451387\n" " 0.32788206 2 5.80560513 -0.42875336\n" " 0.50730782\n" " 0.67961713 1 0.05806826\n" "#","\n" "Sc GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.38500000 2 8.21490030 -0.55705910\n" " 3\n" " 0.36361108 2 2.64653339 3.02108393\n" " -3.90020259\n" " 0.24389778 2 -2.63482265 7.99213715\n" " -9.45642421\n" " 0.25320575 1 -8.16594769\n" "#","\n" "Ti GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.38000000 2 8.71144218 -0.70028677\n" " 3\n" " 0.33777078 2 2.57526386 3.69297065\n" " -4.76760461\n" " 0.24253135 2 -4.63054123 8.87087502\n" " -10.49616087\n" " 0.24331694 1 -9.40665268\n" "#","\n" "V GTH-PBE-q13 GTH-PBE\n" " 4 6 3\n" " 0.37500000 2 7.47470354 -0.37026363\n" " 3\n" " 0.32779544 2 1.94087762 4.72568824\n" " -6.10083728\n" " 0.24476590 2 -5.97816705 9.35863915\n" " -11.07329118\n" " 0.24173879 1 -9.49989110\n" "#","\n" "Cr GTH-PBE-q14 GTH-PBE\n" " 3 6 5\n" " 0.37000000 2 5.69965764 -0.69548599\n" " 3\n" " 0.31393442 2 2.86995474 4.97445648\n" " -6.42199570\n" " 0.24086624 2 -4.47620867 7.33141440\n" " -8.67464650\n" " 0.22028633 1 -11.19711641\n" "#","\n" "Mn GTH-PBE-q15 GTH-PBE\n" " 4 6 5\n" " 0.36500000 2 6.09304649 -0.44646948\n" " 3\n" " 0.29568592 2 1.88711984 6.35683658\n" " -8.20664074\n" " 0.24561261 2 -6.57002452 7.98335983\n" " -9.44603874\n" " 0.22252279 1 -11.61205092\n" "#","\n" "Fe GTH-PBE-q16 GTH-PBE\n" " 4 6 6\n" " 0.36000000 2 6.75678916 -0.22883251\n" " 3\n" " 0.27826303 2 0.62950570 7.91313242\n" " -10.21581002\n" " 0.25138338 2 -7.93213293 7.69707888\n" " -9.10730654\n" " 0.22285578 1 -12.38579937\n" "#","\n" "Co GTH-PBE-q17 GTH-PBE\n" " 4 6 7\n" " 0.35500000 2 4.82819736 0.36814301\n" " 3\n" " 0.27680076 2 -0.58449582 9.28629277\n" " -11.98855242\n" " 0.26815783 2 -6.85195349 5.68013280\n" " -6.72082376\n" " 0.22258414 1 -12.33315019\n" "#","\n" "Ni GTH-PBE-q18 GTH-PBE\n" " 4 6 8\n" " 0.35000000 2 2.10216598 0.64848387\n" " 3\n" " 0.26129530 2 0.62265847 9.97022667\n" " -12.87150729\n" " 0.22425346 2 -11.14270822 12.42956644\n" " -14.70686134\n" " 0.21534825 1 -12.62814550\n" "#","\n" "Cu GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.43135505 3 9.69380507 -6.47016535 1.93595215\n" " 11.50177396 -4.99860696\n" " 3.96752127\n" " 0.56139155 2 2.54547330 -0.78463573\n" " 0.92839352\n" " 0.26455485 1 -12.82861406\n" "#","\n" "Cu GTH-PBE-q19\n" " 3 6 10\n" " 0.34500000 2 0.05196970 1.24904337\n" " 3\n" " 0.25002849 2 0.75019332 10.73582127\n" " -13.85988567\n" " 0.22202454 2 -13.05959885 14.74763830\n" " -17.44964096\n" " 0.21556837 1 -12.45672374\n" "#","\n" "Zn GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.40031644 3 11.53004133 -8.79189815 3.14508644\n" " 16.46577518 -8.12057827\n" " 6.44550918\n" " 0.54318233 2 2.59719512 -0.59426275\n" " 0.70314117\n" " 0.25095885 1 -14.46695795\n" "#","\n" "Zn GTH-PBE-q20\n" " 4 6 10\n" " 0.34000000 2 0.55188462 1.24394356\n" " 3\n" " 0.24394890 2 -1.34762699 12.79313122\n" " -16.51586139\n" " 0.23975357 2 -9.72145777 8.07114357\n" " -9.54990586\n" " 0.20855195 1 -14.19380873\n" "#","\n" "Ga GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.41677723 3 10.47568975 -4.92176814 0.87070559\n" " 7.77017809 -2.24815216\n" " 1.78441545\n" " 0.56962652 2 1.77798534 0.19585976\n" " -0.23174439\n" " 0.23812650 1 -16.24868022\n" "#","\n" "Ga GTH-PBE-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.56586645 3 2.21575051 1.03244793 -0.76062946\n" " -2.57004845 1.96393682\n" " -1.55882652\n" " 0.64671613 2 0.31122394 0.61341605\n" " -0.72580366\n" " 0.99942484 1 0.08951951\n" "#","\n" "Ge GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42186518 3 7.51024121 -0.58810836 -1.44797580\n" " -1.59588819 3.73865744\n" " -2.96746735\n" " 0.56752887 2 0.91385969 0.54687534\n" " -0.64707163\n" " 0.81391394 1 0.19717731\n" "#","\n" "As GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45554957 3 5.52067327 0.03512220 -1.06108239\n" " -1.77119320 2.73970295\n" " -2.17457180\n" " 0.55460557 2 1.02179156 0.62920826\n" " -0.74448925\n" " 0.70368872 1 0.31479504\n" "#","\n" "Se GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43246005 3 6.51810990 -0.22271639 -1.19612899\n" " -1.65797833 3.08839178\n" " -2.45133498\n" " 0.47049162 2 2.28126223 0.36533529\n" " -0.43227055\n" " 0.62560034 1 0.43979948\n" "#","\n" "Br GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43803892 3 6.07855632 0.33049817 -1.23838226\n" " -2.44090020 3.19748924\n" " -2.53792841\n" " 0.45313561 2 2.45930381 0.52275313\n" " -0.61852985\n" " 0.56771383 1 0.55926645\n" "#","\n" "Kr GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42165717 3 6.46530358 0.53866049 -1.50260118\n" " -3.13938870 3.87969957\n" " -3.07941607\n" " 0.43374437 2 2.60116535 0.70510978\n" " -0.83429715\n" " 0.52469073 1 0.63559472\n" "#","\n" "Rb GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.49000000 2 5.66908644 -0.81162703\n" " 3\n" " 0.28180292 2 21.39073240 -8.07866676\n" " 10.42951394\n" " 0.28570828 2 12.25634859 -12.19854075\n" " 14.43350807\n" " 0.54179651 1 0.34566626\n" "#","\n" "Sr GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.48000000 2 6.81095035 -1.19610979\n" " 3\n" " 0.27588581 2 21.28971943 -7.89903416\n" " 10.19760926\n" " 0.28174086 2 11.70905135 -10.96577673\n" " 12.97488200\n" " 0.52108911 1 0.36053906\n" "#","\n" "Y GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.47500000 2 12.16776904 -2.32855103\n" " 3\n" " 0.24674070 2 23.45027195 -8.32535748\n" " 10.74799029\n" " 0.29656397 2 5.97863401 -5.85234964\n" " 6.92459348\n" " 0.45045569 2 1.18749048 -1.31867331\n" " 1.49523499\n" "#","\n" "Zr GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.47000000 2 7.79605677 -1.89321030\n" " 3\n" " 0.25982885 2 23.38087417 -8.57193933\n" " 11.06632609\n" " 0.28896899 2 8.59276581 -5.37735808\n" " 6.36257589\n" " 0.58124504 2 0.02781064 0.27686186\n" " -0.31393184\n" "#","\n" "Nb GTH-PBE-q13 GTH-PBE\n" " 3 6 4\n" " 0.46000000 2 26.27526252 -4.57803146\n" " 3\n" " 0.35116942 2 -1.04371870 3.27790404\n" " -4.23175592\n" " 0.40546040 2 -0.66246647 -0.90782868\n" " 1.07415738\n" " 0.42212155 2 1.49409323 -3.43003953\n" " 3.88929925\n" "#","\n" "Mo GTH-PBE-q14 GTH-PBE\n" " 3 6 5\n" " 0.43000000 2 28.60936832 -4.72180336\n" " 3\n" " 0.34521579 2 0.14630305 2.76200500\n" " -3.56573312\n" " 0.41688762 2 -0.19078495 -0.72874402\n" " 0.86226156\n" " 0.42050785 2 1.21681419 -2.68646267\n" " 3.04616234\n" "#","\n" "Tc GTH-PBE-q15 GTH-PBE\n" " 3 6 6\n" " 0.43000000 2 27.30199947 -4.64715709\n" " 3\n" " 0.34617499 2 -0.37921852 3.34056578\n" " -4.31265188\n" " 0.42346840 2 -0.24151639 -0.82215042\n" " 0.97278149\n" " 0.43186468 2 1.21878473 -2.67400954\n" " 3.03204182\n" "#","\n" "Ru GTH-PBE-q16 GTH-PBE\n" " 3 6 7\n" " 0.43000000 2 26.83239104 -5.05049720\n" " 3\n" " 0.34135508 2 -0.55504091 3.71548964\n" " -4.79667650\n" " 0.42827085 2 0.10677508 -1.27757181\n" " 1.51164335\n" " 0.43814779 2 1.50921742 -2.94305440\n" " 3.33711002\n" "#","\n" "Ru GTH-PBE-q8\n" " 1 0 7\n" " 0.61211332 1 5.04489332\n" " 3\n" " 0.64215040 2 4.62556355 -1.80334903\n" " 2.32811359\n" " 0.67936654 2 3.23395238 -2.42101064\n" " 2.86457842\n" " 0.38059720 2 -15.53165455 13.58045054\n" " -15.39878349\n" "#","\n" "Rh GTH-PBE-q17 GTH-PBE\n" " 3 6 8\n" " 0.42000000 2 26.20679340 -4.93738335\n" " 3\n" " 0.34544622 2 -0.45248232 3.89280438\n" " -5.02558885\n" " 0.37838014 2 -0.94111242 -0.00569931\n" " 0.00674351\n" " 0.43374725 2 1.57423622 -3.01217170\n" " 3.41548166\n" "#","\n" "Rh GTH-PBE-q9\n" " 1 0 8\n" " 0.61900948 1 4.70454397\n" " 3\n" " 0.61332681 2 4.99320515 -1.92978191\n" " 2.49133773\n" " 0.69365000 2 2.53237506 -1.28086042\n" " 1.51553449\n" " 0.37003772 2 -16.88260377 14.71821684\n" " -16.68888922\n" "#","\n" "Pd GTH-PBE-q10\n" " 0 0 10\n" " 0.59600000 1 5.29987401\n" " 3\n" " 0.59194990 2 5.30819456 -2.06237933\n" " 2.66252027\n" " 0.66628526 2 2.73458446 -1.46697005\n" " 1.73574237\n" " 0.43851839 2 -3.71978832 -0.80738825\n" " 0.91549223\n" "#","\n" "Pd GTH-PBE-q18 GTH-PBE\n" " 2 6 10\n" " 0.41000000 2 26.78365917 -4.93130594\n" " 3\n" " 0.33797077 2 -0.71872875 4.38486657\n" " -5.66083840\n" " 0.41519591 2 -0.04624449 -1.07795233\n" " 1.27545040\n" " 0.44027049 2 1.63916358 -3.09368795\n" " 3.50791241\n" "#","\n" "Ag GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.57000000 1 0.03341912\n" " 3\n" " 0.52704461 3 9.58204535 -5.27424043 0.99704725\n" " 8.43071259 -2.57436494\n" " 2.04333882\n" " 0.62911218 2 3.87401904 -1.74211583\n" " 2.06129925\n" " 0.40538186 2 -2.72495276 -0.43354851\n" " 0.49159781\n" "#","\n" "Ag GTH-PBE-q19\n" " 3 6 10\n" " 0.40000000 2 24.53317558 -4.21395181\n" " 3\n" " 0.31760029 2 0.62551338 4.28490995\n" " -5.53179495\n" " 0.41962178 2 -0.19050165 -0.61441835\n" " 0.72698960\n" " 0.45640092 2 1.75125916 -3.09368795\n" " 3.50791241\n" "#","\n" "Cd GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.55000000 1 3.63395858\n" " 3\n" " 0.49127900 3 10.11138228 -6.50695409 1.80457679\n" " 11.33558598 -4.65939724\n" " 3.69828191\n" " 0.59970999 2 4.00148729 -1.88393578\n" " 2.22910288\n" " 0.37787256 2 -6.13703223 1.53571055\n" " -1.74133209\n" "#","\n" "In GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.53000000 1 3.32478546\n" " 3\n" " 0.47949521 3 11.11716024 -6.57350729 1.50686327\n" " 10.93727471 -3.89070422\n" " 3.08815074\n" " 0.56993285 2 4.70061419 -2.21706406\n" " 2.62326557\n" " 0.37706890 2 -4.00228785 -0.84012846\n" " 0.95261614\n" "#","\n" "In GTH-PBE-q3\n" " 2 1\n" " 0.61000000 1 5.08622849\n" " 3\n" " 0.68888318 3 0.56228376 0.99900413 -0.48093816\n" " -2.07195476 1.24177699\n" " -0.98562993\n" " 0.76370974 2 0.10892299 0.42327835\n" " -0.50082970\n" " 1.14391192 1 0.11683948\n" "#","\n" "Sn GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.60500000 1 6.26678230\n" " 3\n" " 0.56643732 3 1.57118124 1.47004118 -1.17857669\n" " -3.81477013 3.04307193\n" " -2.41536347\n" " 0.64184959 2 0.52689769 0.40325781\n" " -0.47714107\n" " 0.99087302 1 0.19876639\n" "#","\n" "Sb GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.59000000 1 7.92852084\n" " 3\n" " 0.55613636 3 1.43047790 1.26142599 -0.92323353\n" " -3.13013340 2.38377872\n" " -1.89206570\n" " 0.62275507 2 0.56147233 0.30484522\n" " -0.36069773\n" " 0.88948576 1 0.27086864\n" "#","\n" "Te GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.57500000 1 8.71364868\n" " 3\n" " 0.57492240 3 1.40181273 0.97877992 -0.48630602\n" " -2.05457624 1.25563675\n" " -0.99663078\n" " 0.58989076 2 0.76478865 0.32398623\n" " -0.38334568\n" " 0.81338925 1 0.34485820\n" "#","\n" "I GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.56000000 1 8.20710157\n" " 3\n" " 0.53192813 3 2.30814581 1.00390933 -0.95915606\n" " -2.85610882 2.47653030\n" " -1.96568498\n" " 0.58918244 2 0.90648219 0.42507060\n" " -0.50295032\n" " 0.73972147 1 0.47919458\n" "#","\n" "Xe GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.56000000 1 8.03636262\n" " 3\n" " 0.53049420 3 2.23202148 1.20035836 -0.99849824\n" " -3.17371348 2.57811136\n" " -2.04631245\n" " 0.58177483 2 0.79698181 0.59123264\n" " -0.69955590\n" " 0.68554509 1 0.56018900\n" "#","\n" "Cs GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.54000000 2 33.31331676 -2.92121670\n" " 4\n" " 0.46189568 2 -3.32292700 2.45565338\n" " -3.17023488\n" " 0.36635860 2 -4.95076405 0.84038977\n" " -0.99436259\n" " 0.76150193 1 0.19840723\n" " 0.59701503 1 -1.55056693\n" "#","\n" "Ba GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.54000000 2 24.52678070 -2.46867001\n" " 4\n" " 0.49206839 2 0.09515093 1.16931840\n" " -1.50958357\n" " 0.39148930 2 0.80018261 -1.61683907\n" " 1.91306979\n" " 0.67217348 1 0.38853100\n" " 0.30049773 1 -19.65379452\n" "#","\n" "La GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.53500000 2 20.68980469 -1.70327035\n" " 4\n" " 0.56144723 2 -0.02823977 1.07859821\n" " -1.39246430\n" " 0.47517309 2 0.26802268 0.67328503\n" " -0.79664160\n" " 0.62908399 1 0.38022718\n" " 0.29911708 1 -18.44354886\n" "#","\n" "Ce GTH-PBE-q12 GTH-PBE\n" " 4 6 1 1\n" " 0.52480035 2 18.46313266 -0.35928475\n" " 4\n" " 0.52899318 2 -0.46945550 1.68519941\n" " -2.17558308\n" " 0.47758674 2 -0.85915259 1.49893178\n" " -1.77356000\n" " 0.65909303 1 0.10742047\n" " 0.30186583 1 -17.66735258\n" "#","\n" "Ce GTH-PBE-q30\n" " 6 12 11 1\n" " 0.20000000 2 148.23700910 3.91725495\n" " 4\n" " 0.24060899 2 2.21770923 4.21351645\n" " -5.43962635\n" " 0.16613857 3 -4.53697472 11.78843522 0.01475880\n" " -13.92369350 -0.03492570\n" " 0.02482188\n" " 0.17161109 1 -15.00199037\n" " 0.26526997 1 -4.75946878\n" "#","\n" "Pr GTH-PBE-q13 GTH-PBE\n" " 4 6 0 3\n" " 0.53188976 2 16.83551414 -0.43235649\n" " 4\n" " 0.52415103 2 -0.50975406 1.84037783\n" " -2.37591756\n" " 0.48546735 2 -0.98189616 1.60445908\n" " -1.89842158\n" " 0.71653344 1 0.05575046\n" " 0.29937329 1 -17.49550069\n" "#","\n" "Nd GTH-PBE-q14 GTH-PBE\n" " 4 6 0 4\n" " 0.52991298 2 17.80646346 -0.32095543\n" " 4\n" " 0.50114025 2 -1.36443892 2.46474917\n" " -3.18197749\n" " 0.50039105 2 -1.55942619 1.53939247\n" " -1.82143373\n" " 0.33431765 1 -1.70064367\n" " 0.29567529 1 -18.64327128\n" "#","\n" "Pm GTH-PBE-q15 GTH-PBE\n" " 4 6 0 5\n" " 0.52793919 2 17.84482075 -0.36133182\n" " 4\n" " 0.48944396 2 -1.72725500 2.81006693\n" " -3.62778081\n" " 0.49132954 2 -1.87193192 1.65260118\n" " -1.95538409\n" " 0.47893079 1 -0.44781450\n" " 0.29022183 1 -19.51693564\n" "#","\n" "Sm GTH-PBE-q16 GTH-PBE\n" " 4 6 0 6\n" " 0.52466086 2 16.51148828 -0.24504217\n" " 4\n" " 0.48687809 2 -1.59045606 2.90667135\n" " -3.75249657\n" " 0.49648709 2 -1.75047341 1.54491665\n" " -1.82797004\n" " 0.49241328 1 -0.41980527\n" " 0.28444353 1 -19.88144667\n" "#","\n" "Eu GTH-PBE-q17 GTH-PBE\n" " 4 6 0 7\n" " 0.52072219 2 17.93467530 -0.57606530\n" " 4\n" " 0.46955990 2 -2.07710390 3.25447577\n" " -4.20151015\n" " 0.46644592 2 -2.34175427 2.29907112\n" " -2.72029763\n" " 0.47357383 1 -0.59831876\n" " 0.27831058 1 -21.30605878\n" "#","\n" "Gd GTH-PBE-q18 GTH-PBE\n" " 4 6 1 7\n" " 0.52126799 2 18.10313196 -0.51440770\n" " 4\n" " 0.45805877 2 -2.87481761 3.91661136\n" " -5.05632353\n" " 0.46124964 2 -3.05406750 2.55197375\n" " -3.01953606\n" " 0.48332992 1 -0.84348188\n" " 0.27559144 1 -22.18390606\n" "#","\n" "Tb GTH-PBE-q19 GTH-PBE\n" " 4 6 0 9\n" " 0.51588228 2 17.15783725 -0.66955170\n" " 4\n" " 0.45376626 2 -2.42821095 3.74357813\n" " -4.83293859\n" " 0.45360450 2 -2.68351507 2.30311187\n" " -2.72507871\n" " 0.47258283 1 -0.72646091\n" " 0.26876196 1 -22.75147607\n" "#","\n" "Dy GTH-PBE-q20 GTH-PBE\n" " 4 6 0 10\n" " 0.51029687 2 17.67093508 -0.86787770\n" " 4\n" " 0.44212348 2 -2.71573384 4.01788426\n" " -5.18706627\n" " 0.45017230 2 -2.77347535 2.20115245\n" " -2.60443870\n" " 0.47116514 1 -0.75227561\n" " 0.26180741 1 -24.24856414\n" "#","\n" "Ho GTH-PBE-q21 GTH-PBE\n" " 4 6 0 11\n" " 0.51034519 2 17.00694728 -1.14166376\n" " 4\n" " 0.43408065 2 -2.64595349 4.10374692\n" " -5.29791449\n" " 0.43159817 2 -3.06100899 2.73161511\n" " -3.23209058\n" " 0.45020006 1 -0.82014316\n" " 0.25514026 1 -25.40966658\n" "#","\n" "Er GTH-PBE-q22 GTH-PBE\n" " 4 6 0 12\n" " 0.50173422 2 17.22416099 -1.23324605\n" " 4\n" " 0.42576787 2 -2.61580658 4.19913757\n" " -5.42106329\n" " 0.41793960 2 -3.15341814 3.17618553\n" " -3.75811340\n" " 0.43046826 1 -0.89805056\n" " 0.24914231 1 -26.58720599\n" "#","\n" "Tm GTH-PBE-q23 GTH-PBE\n" " 4 6 0 13\n" " 0.50234443 2 17.68675860 -1.59907075\n" " 4\n" " 0.41312714 2 -3.20033933 4.64501695\n" " -5.99669110\n" " 0.41759033 2 -3.17289513 2.80513657\n" " -3.31908235\n" " 0.39281519 1 -1.44965467\n" " 0.24385920 1 -28.31696046\n" "#","\n" "Yb GTH-PBE-q24 GTH-PBE\n" " 4 6 0 14\n" " 0.49808783 2 17.08328394 -1.56295270\n" " 4\n" " 0.40553079 2 -3.55061134 5.03314458\n" " -6.49776171\n" " 0.42489671 2 -3.13538311 2.14082491\n" " -2.53305819\n" " 0.44507157 1 -0.91407703\n" " 0.23857822 1 -29.66528314\n" "#","\n" "Lu GTH-PBE-q25 GTH-PBE\n" " 4 6 1 14\n" " 0.49611621 2 18.63208417 -1.51663710\n" " 4\n" " 0.39319895 2 -5.65573977 6.47885270\n" " -8.36416287\n" " 0.41028936 2 -4.66078088 2.84645630\n" " -3.36797252\n" " 0.43890201 1 -1.52277808\n" " 0.23494399 1 -32.20596727\n" "#","\n" "Hf GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.56000000 2 15.52236567 -2.43356678\n" " 3\n" " 0.31182849 3 -10.91013059 27.37264587 -14.96156977\n" " -59.67292892 38.63060703\n" " -30.66209376\n" " 0.36196660 2 -9.65170049 9.22329739\n" " -10.91315264\n" " 0.41579070 2 -2.74891464 0.48133335\n" " -0.54578072\n" "#","\n" "Ta GTH-PBE-q13 GTH-PBE\n" " 4 6 3\n" " 0.55000000 2 13.38520167 -2.25392008\n" " 3\n" " 0.40088312 3 -4.43670899 4.17648934 1.87560787\n" " -2.34114813 -4.84279868\n" " 3.84385229\n" " 0.35654936 2 -7.62442808 8.17895534\n" " -9.67747047\n" " 0.41822925 2 -1.11356085 -0.87533080\n" " 0.99253183\n" "#","\n" "Ta GTH-PBE-q5\n" " 2 0 3\n" " 0.74400000 1 9.83934257\n" " 3\n" " 0.45239666 2 6.12338066 -2.16890335\n" " 2.80004218\n" " 0.75164390 2 1.64970103 -2.51481038\n" " 2.97556377\n" " 0.50114181 2 -12.42334477 9.01473381\n" " -10.22174735\n" "#","\n" "W GTH-PBE-q14 GTH-PBE\n" " 4 6 4\n" " 0.54000000 2 13.41481123 -2.21345603\n" " 3\n" " 0.39702790 3 -4.14121089 3.83542346 2.23317927\n" " -1.31924404 -5.76604408\n" " 4.57665561\n" " 0.35353069 2 -7.45623626 8.11232637\n" " -9.59863401\n" " 0.41210703 2 -0.95466075 -1.06744623\n" " 1.21037026\n" "#","\n" "W GTH-PBE-q6\n" " 2 0 4\n" " 0.71900000 1 10.69989013\n" " 3\n" " 0.46755372 2 5.80350289 -2.07063257\n" " 2.67317516\n" " 0.72666463 2 1.78871915 -2.55415819\n" " 3.02212073\n" " 0.49929065 2 -10.59832562 6.44789319\n" " -7.31122365\n" "#","\n" "Re GTH-PBE-q15 GTH-PBE\n" " 4 6 5\n" " 0.53000000 2 13.46263143 -2.23492240\n" " 3\n" " 0.39380077 3 -3.71748055 3.15477903 2.85593500\n" " 0.57237640 -7.37399245\n" " 5.85292506\n" " 0.35253332 2 -7.05340425 7.56675835\n" " -8.95310922\n" " 0.40186765 2 -0.90002359 -1.14917105\n" " 1.30303749\n" "#","\n" "Re GTH-PBE-q7\n" " 2 0 5\n" " 0.69300000 1 11.96194160\n" " 3\n" " 0.46331539 2 6.08700876 -2.19137969\n" " 2.82905901\n" " 0.70964824 2 1.81506156 -2.35412193\n" " 2.78543463\n" " 0.47606454 2 -12.39371002 8.00629664\n" " -9.07828707\n" "#","\n" "Os GTH-PBE-q16 GTH-PBE\n" " 4 6 6\n" " 0.52000000 2 13.46303008 -2.24116983\n" " 3\n" " 0.39012207 3 -3.27416829 2.36003137 3.61101851\n" " 2.82653464 -9.32360969\n" " 7.40038577\n" " 0.34945025 2 -6.89928214 7.52931882\n" " -8.90881017\n" " 0.39284207 2 -0.94268282 -1.08157042\n" " 1.22638558\n" "#","\n" "Os GTH-PBE-q8\n" " 2 0 6\n" " 0.66700000 1 13.07904899\n" " 3\n" " 0.49576015 2 4.35033878 -1.49680274\n" " 1.93236403\n" " 0.70116140 2 1.81669550 -1.99815917\n" " 2.36425382\n" " 0.47117333 2 -10.99598697 5.97918090\n" " -6.77975387\n" "#","\n" "Ir GTH-PBE-q17 GTH-PBE\n" " 4 6 7\n" " 0.51000000 2 13.41080576 -2.34194822\n" " 3\n" " 0.38726411 3 -2.51628491 1.05519006 4.67505628\n" " 6.24173509 -12.07094340\n" " 9.58101430\n" " 0.34608307 2 -6.52615069 7.35318392\n" " -8.70040455\n" " 0.37881290 2 -0.85595250 -1.17535111\n" " 1.33272289\n" "#","\n" "Ir GTH-PBE-q9\n" " 2 0 7\n" " 0.64100000 1 14.58181397\n" " 3\n" " 0.51010474 2 3.71524999 -1.26263745\n" " 1.63005794\n" " 0.68489160 2 1.91910152 -1.89619458\n" " 2.24360769\n" " 0.47173508 2 -8.85603130 3.17025312\n" " -3.59472915\n" "#","\n" "Pt GTH-PBE-q10\n" " 1 0 9\n" " 0.61600000 1 11.31363525\n" " 3\n" " 0.55090426 2 4.73349110 -1.78459401\n" " 2.30390096\n" " 0.67413781 2 2.53479850 -1.77806555\n" " 2.10383553\n" " 0.45739243 2 -7.26401101 2.55866480\n" " -2.90125318\n" "#","\n" "Pt GTH-PBE-q18 GTH-PBE\n" " 3 6 9\n" " 0.50000000 2 8.81432324 -0.29250943\n" " 3\n" " 0.29800221 3 -5.96838498 24.21289966 -13.78967932\n" " -53.68763413 35.60479890\n" " -28.26043301\n" " 0.36017182 3 -6.66865904 7.17065922 0.76690370\n" " -7.20766072 -1.81482538\n" " 1.28980604\n" " 0.34053206 2 -8.58990455 9.41012200\n" " -10.67007542\n" "#","\n" "Au GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.59000000 1 10.51717881\n" " 3\n" " 0.54384733 2 5.78681103 -2.25067966\n" " 2.90561495\n" " 0.60917298 2 4.28404873 -4.07128520\n" " 4.81720962\n" " 0.43730922 2 -7.40328124 3.01019307\n" " -3.41323811\n" "#","\n" "Au GTH-PBE-q19\n" " 3 6 10\n" " 0.49000000 1 8.36945885\n" " 3\n" " 0.29008402 3 -5.98869002 26.10502137 -15.17621948\n" " -58.38556050 39.18483021\n" " -31.10199477\n" " 0.36150576 3 -5.87695332 4.73144606 2.92710526\n" " -0.72513863 -6.92679530\n" " 4.92291022\n" " 0.34037313 2 -8.80458432 9.49191532\n" " -10.76282032\n" "#","\n" "Hg GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.57000000 1 8.46784734\n" " 3\n" " 0.52978669 2 7.37124306 -2.96994403\n" " 3.83418126\n" " 0.63516596 2 3.55116141 -1.72290935\n" " 2.03857383\n" " 0.40798543 2 -8.61398015 5.00756120\n" " -5.67804069\n" "#","\n" "Tl GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.55000000 1 12.29058515\n" " 3\n" " 0.51280306 2 7.19017017 -2.86301073\n" " 3.69613096\n" " 0.57711505 2 4.76094580 -3.67332496\n" " 4.34633671\n" " 0.39323001 2 -11.01268700 6.42159202\n" " -7.28140093\n" "#","\n" "Tl GTH-PBE-q3\n" " 2 1\n" " 0.63000000 1 1.45272083\n" " 3\n" " 0.78076788 3 0.37973043 1.20912802 -0.45856792\n" " -2.30683834 1.18401727\n" " -0.93978457\n" " 0.89705009 2 -0.02423596 0.58235582\n" " -0.68905269\n" " 1.09379194 1 0.22764152\n" "#","\n" "Pb GTH-PBE-q14\n" " 2 2 10\n" " 0.53000000 1 12.57214281\n" " 3\n" " 0.49554891 2 8.42980665 -3.44005610\n" " 4.44109332\n" " 0.56934785 2 4.98150638 -2.89639920\n" " 3.42706575\n" " 0.40422413 2 -6.81491262 1.83782673\n" " -2.08389964\n" "#","\n" "Pb GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.61750000 1 4.67238428\n" " 3\n" " 0.62235881 3 0.87991768 2.08114784 -1.43125710\n" " -5.01469016 3.69548994\n" " -2.93320421\n" " 0.81200202 2 0.15345679 0.47889785\n" " -0.56663958\n" " 1.02501525 1 0.30170206\n" "#","\n" "Bi GTH-PBE-q15\n" " 2 3 10\n" " 0.51000000 1 13.39622231\n" " 3\n" " 0.48120446 2 9.54548100 -3.94511418\n" " 5.09312050\n" " 0.54894636 2 5.63359371 -3.17713769\n" " 3.75924002\n" " 0.39730251 2 -6.03753705 0.92523553\n" " -1.04911848\n" "#","\n" "Bi GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.60500000 1 7.94575692\n" " 3\n" " 0.58223216 3 0.64373527 2.24761617 -1.44060063\n" " -5.24479711 3.71961484\n" " -2.95235275\n" " 0.76639400 2 0.21253292 0.37983417\n" " -0.44942585\n" " 0.96565479 1 0.34729822\n" "#","\n" "Po GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.59250000 1 8.13432566\n" " 3\n" " 0.80422357 3 0.32633408 0.10539986 0.52809414\n" " 0.72287456 -1.36353322\n" " 1.08227094\n" " 0.81703652 2 0.15801481 0.37530247\n" " -0.44406387\n" " 0.89014943 1 0.46253238\n" "#","\n" "At GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.58000000 1 14.21716853\n" " 3\n" " 0.66580683 3 -0.37891203 0.66112626 0.27884944\n" " -0.39996168 -0.71998616\n" " 0.57147130\n" " 0.65241195 2 0.26704745 0.32622823\n" " -0.38599845\n" " 0.85406059 1 0.45259467\n" "#","\n" "Rn GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.57000000 1 16.20061781\n" " 3\n" " 0.63480802 3 -0.58199405 0.80312797 0.29738605\n" " -0.55313531 -0.76784748\n" " 0.60946004\n" " 0.64710877 2 0.16927880 0.30517348\n" " -0.36108613\n" " 0.80634271 1 0.51103874\n" "#","\n" "U GTH-PBE-q14\n" " 4 6 1 3\n" " 0.48000000 2 48.86182633 -4.59713581\n" " 4\n" " 0.51405537 3 -0.65017014 -1.15225083 1.84763553\n" " 4.49272884 -4.77057442\n" " 3.78652606\n" " 0.40934387 3 3.58555843 -6.88134873 4.03097788\n" " 14.85308504 -9.53903470\n" " 6.77944264\n" " 0.67885536 2 0.53789816 0.48180765\n" " -0.54631852\n" " 0.32134043 1 -16.65115610\n" "#","\n" "B GTH-PBESol-q3 GTH-PBESol\n" " 2 1\n" " 0.42188166 2 -5.99194495 0.94658199\n" " 2\n" " 0.37186069 1 6.29208376\n" " 0.36287582 0\n" "#","\n" "H GTH-OLYP-q1 GTH-OLYP\n" " 1\n" " 0.20000000 2 -4.16025705 0.71696182\n" " 0\n" "#","\n" "B GTH-OLYP-q3\n" " 2 1\n" " 0.40824397 2 -5.84551716 0.92100194\n" " 2\n" " 0.37035120 1 6.31003106\n" " 0.35773831 0\n" "#","\n" "C GTH-OLYP-q4\n" " 2 2\n" " 0.33266812 2 -8.65195820 1.32052627\n" " 2\n" " 0.30204607 1 9.62061855\n" " 0.29182215 0\n" "#","\n" "N GTH-OLYP-q5\n" " 2 3\n" " 0.28091145 2 -12.16718730 1.82099926\n" " 2\n" " 0.25510834 1 13.61560292\n" " 0.24679335 0\n" "#","\n" "O GTH-OLYP-q6 GTH-OLYP\n" " 2 4\n" " 0.24340006 2 -16.34721549 2.41772603\n" " 2\n" " 0.22079018 1 18.31443918\n" " 0.22008988 0\n" "#","\n" "F GTH-OLYP-q7\n" " 2 5\n" " 0.21382039 2 -21.28598900 3.12167577\n" " 2\n" " 0.19453412 1 23.73308173\n" " 0.16302766 0\n" "#","\n" "P GTH-OLYP-q5\n" " 2 3\n" " 0.43000000 1 -4.69763642\n" " 2\n" " 0.39666347 2 10.63544240 -3.29388139\n" " 4.25238258\n" " 0.44942590 1 2.88712442\n" "#","\n" "S GTH-OLYP-q6\n" " 2 4\n" " 0.42000000 1 -5.70095751\n" " 2\n" " 0.36360282 2 13.23499116 -4.28266416\n" " 5.52889566\n" " 0.40854250 1 3.70359686\n" "#","\n" "Cl GTH-OLYP-q7\n" " 2 5\n" " 0.41000000 1 -6.18936120\n" " 2\n" " 0.33820768 2 15.35745265 -4.99108675\n" " 6.44346529\n" " 0.37732312 1 4.35487695\n" "#","\n" "H GTH-HF-q1 GTH-HF\n" " 1 0 0 0\n" " 0.196680577426 2 -4.122010670148 0.685113494453\n" " 0\n" "#","\n" "C GTH-HF-q4 GTH-HF\n" " 2 2 0 0\n" " 0.315416975333 2 -8.867306339232 1.255277018021\n" " 1\n" " 0.301022709314 1 9.800185699152\n" "#","\n" "N GTH-HF-q5 GTH-HF\n" " 2 3 0 0\n" " 0.293004428534 2 -12.353673551345 1.940376934223\n" " 1\n" " 0.255011990622 1 13.748056543074\n" "#","\n" "O GTH-HF-q6 GTH-HF\n" " 2 4 0 0\n" " 0.246496621432 2 -17.087623980861 2.645053514530\n" " 1\n" " 0.220770923508 1 18.522680682057\n" "#","\n" "Al GTH-NLCC-PBE-q3 GTH-NLCC-PBE\n" " 2 1 \n" " 0.35000000 2 -1.20404111 -2.14848844 \n" " NLCC 1\n" " 0.487749457320947 1 26.6661157296629\n" " 2 \n" " 0.46845918 2 2.69261923 0.00000000\n" " 2.15425102\n" " 0.54697362 1 2.13803860 \n" "#","\n" "B GTH-NLCC-PBE-q3 GTH-NLCC-PBE\n" " 2 1\n" " 0.43249960 2 -4.26853158 0.59951279\n" " NLCC 1 \n" " 0.333523099251602 1 18.6519880515354\n" " 1 \n" " 0.37147150 1 6.30164101 \n" "#","\n" "C GTH-NLCC-PBE-q4 GTH-NLCC-PBE\n" " 2 2\n" " 0.31478662 2 -6.92377020 0.96359690\n" " NLCC 1 \n" " 0.274399357915869 1 58.7058349842360\n" " 2 \n" " 0.30228391 1 9.57595383 \n" " 0.36878252 1 -0.00996437 \n" "#","\n" "Cl GTH-NLCC-PBE-q7 GTH-NLCC-PBE\n" " 2 5\n" " 0.32000000 1 -0.27448290\n" " NLCC 1\n" " 0.42147846 1 31.2490172184\n" " 2\n" " 0.32659110 2 4.20335702 0.00000000\n" " 4.55651710\n" " 0.36756872 1 4.22907835\n" "#","\n" "F GTH-NLCC-PBE-q7 GTH-NLCC-PBE\n" " 2 5\n" " 0.20610323 2 -19.86716500 2.79308907\n" " NLCC 1 \n" " 0.171542709683482 1 193.635582221771\n" " 1 \n" " 0.19518097 1 23.47047311 \n" "#","\n" "H GTH-NLCC-PBE-q1 GTH-NLCC-PBE\n" " 1 \n" " 0.20000000 2 -4.07311634 0.68070153 \n" " 0 \n" "#","\n" "N GTH-NLCC-PBE-q5 GTH-NLCC-PBE\n" " 2 3\n" " 0.24179589 2 -10.04328500 1.39719020 \n" " NLCC 1 \n" " 0.246115465086927 1 70.6868378070653\n" " 2 \n" " 0.25696561 1 12.96801666 \n" " 0.15685548 1 -0.73452991 \n" "#","\n" "O GTH-NLCC-PBE-q6 GTH-NLCC-PBE\n" " 2 4\n" " 0.26099935 2 -14.15180600 1.97829510 \n" " NLCC 1 \n" " 0.252338420313492 1 44.0109866619909\n" " 2 \n" " 0.22308282 1 18.37181432 \n" " 0.26844098 1 0.10003633 \n" "#","\n" "P GTH-NLCC-PBE-q5 GTH-NLCC-PBE\n" " 2 3\n" " 0.34000000 2 -1.62258310 -0.72412131 \n" " NLCC 1 \n" " 0.398676358021430 1 57.5022588665043\n" " 2 \n" " 0.38208906 2 3.47753509 -0.01266608\n" " 3.47461367\n" " 0.43410975 1 3.37859278 \n" "#","\n" "S GTH-NLCC-PBE-q6 GTH-NLCC-PBE\n" " 2 4\n" " 0.33000000 2 1.49042820 -0.73313881 \n" " NLCC 1 \n" " 0.386218088400348 1 79.6359982164901\n" " 2 \n" " 0.37045712 2 6.18604810 0.00000000\n" " 2.57760787\n" " 0.39772434 1 3.89113272 \n" "#","\n" "Si GTH-NLCC-PBE-q4 GTH-NLCC-PBE\n" " 2 2\n" " 0.33000000 2 -0.07845999 -0.79378214 \n" " NLCC 1\n" " 0.442792079831528 1 38.1776559763904\n" " 2 \n" " 0.42179461 2 2.87392223 0.02558827\n" " 2.59458148\n" " 0.48800255 1 2.47962806\n" "#","\n" "H ALLELECTRON ALL\n" " 1 0 0\n" " 0.20000000 0\n" "#","\n" "He ALLELECTRON ALL\n" " 2 0 0 \n" " 0.20000000 0\n" "#","\n" "Li ALLELECTRON ALL\n" " 3 0 0 \n" " 0.40000000 0\n" "#","\n" "Be ALLELECTRON ALL\n" " 4 0 0 \n" " 0.32500000 0\n" "#","\n" "B ALLELECTRON ALL\n" " 4 1 0\n" " 0.43392956 0\n" "#","\n" "C ALLELECTRON ALL\n" " 4 2 0\n" " 0.34883045 0\n" "#","\n" "N ALLELECTRON ALL\n" " 4 3 0\n" " 0.28917923 0\n" "#","\n" "O ALLELECTRON ALL\n" " 4 4 0\n" " 0.24762086 0\n" "#","\n" "F ALLELECTRON ALL\n" " 4 5 0\n" " 0.21852465 0\n" "#","\n" "Ne ALLELECTRON ALL\n" " 4 6 0\n" " 0.19000000 0\n" "#","\n" "Na ALLELECTRON ALL\n" " 5 6 0\n" " 0.24631780 0\n" "#","\n" "Mg ALLELECTRON ALL\n" " 6 6 0\n" " 0.21094954 0\n" "#","\n" "Al ALLELECTRON ALL\n" " 6 7 0\n" " 0.45000000 0\n" "#","\n" "Si ALLELECTRON ALL\n" " 6 8 0\n" " 0.44000000 0\n" "#","\n" "P ALLELECTRON ALL\n" " 6 9 0\n" " 0.43000000 0\n" "#","\n" "S ALLELECTRON ALL\n" " 6 10 0\n" " 0.42000000 0\n" "#","\n" "Cl ALLELECTRON ALL\n" " 6 11 0\n" " 0.41000000 0\n" "#","\n" "Ar ALLELECTRON ALL\n" " 6 12 0\n" " 0.40000000 0\n" "#","\n" "K ALLELECTRON ALL\n" " 7 12 0\n" " 0.40000000 0\n" "#","\n" "Ca ALLELECTRON ALL\n" " 8 12 0\n" " 0.39000000 0\n" "#","\n" "Sc ALLELECTRON ALL\n" " 8 12 1\n" " 0.38500000 0\n" "#","\n" "Ti ALLELECTRON ALL\n" " 8 12 2\n" " 0.3800000 0\n" "#","\n" "V ALLELECTRON ALL\n" " 8 12 3\n" " 0.37500000 0\n" "#","\n" "Cr ALLELECTRON ALL\n" " 8 12 4\n" " 0.37000000 0\n" "#","\n" "Mn ALLELECTRON ALL\n" " 8 12 5\n" " 0.36500000 0\n" "#","\n" "Fe ALLELECTRON ALL\n" " 8 12 6\n" " 0.36000000 0\n" "#","\n" "Co ALLELECTRON ALL\n" " 8 12 7\n" " 0.35500000 0\n" "#","\n" "Ni ALLELECTRON ALL\n" " 8 12 8\n" " 0.35000000 0\n" "#","\n" "Cu ALLELECTRON ALL\n" " 8 12 9\n" " 0.53000000 0\n" "#","\n" "Zn ALLELECTRON ALL\n" " 8 12 10\n" " 0.34000000 0\n" "#","\n" "Ga ALLELECTRON ALL\n" " 8 13 10\n" " 0.49000000 0\n" "#","\n" "Ge ALLELECTRON ALL\n" " 8 14 10\n" " 0.54000000 0\n" "#","\n" "As ALLELECTRON ALL\n" " 8 15 10\n" " 0.52000000 0\n" "#","\n" "Se ALLELECTRON ALL\n" " 8 16 10\n" " 0.51000000 0\n" "#","\n" "Br ALLELECTRON ALL\n" " 8 17 10\n" " 0.50000000 0\n" "#","\n" "Kr ALLELECTRON ALL\n" " 8 18 10\n" " 0.50000000 0\n" "#","\n" "I ALLELECTRON ALL\n" " 10 23 20\n" " 0.50000000 0\n" }; atomes_1.3.1/src/calc/cp2k/cp2k.h0000664000175000017500000000771415212624223016056 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k.h * @short Variable declarations for the creation of the CP2K input file(s) * @author Sébastien Le Roux */ /* * This header file: 'cp2k.h' * * Contains: Variable declarations for the creation of the CP2K input file(s) * Called by: calc/cp2k/cp2k_files.c calc/cp2k/cp2k_init.c calc/cp2k/cp2k_mol.c calc/cp2k/cp2k_print.c calc/cpmd/cpmd_init.c calc/cpmd/cpmd_nose.c */ #ifndef CP2K_H_ #define CP2K_H_ #define CP2RUN 0 // Def: 0 = ENERGY run #define CP2KTI 1 // Def: 86400 = 24h #define CP2PLE 2 // Def: 1 = MEDIUM #define CP2RES 3 // Def: 0 = Not a restart #define CP2FRE 4 // Def: 0 = Null #define CP2FBA 5 // Def: 0 = Null #define CP2FPS 6 // Def: 0 = Null #define CP2FWV 7 // Def: 0 = Null #define CP2CHA 8 // Def: 0 = neutral #define CP2CUT 9 // Def: 300 #define CP2GRI 10 // Def: 4 #define CP2QSM 11 // Def: 0 = GPW #define CP2SCG 12 // Def: Guess 0 = ATOMS #define CP2SNN 13 // Def: 50 #define CP2SCN 14 // Def: 0.000001 #define CP2SNO 15 // Def: 20 #define CP2SCO 16 // Def: 0.00001 #define CP2SMI 17 // Def: 2 = DIIS #define CP2FCT 18 // Def: 0 = BLYP #define CP2SPI 19 // Def: 0 = spin restricted #define CP2SPM 20 // Def: 0 spin multiplicity #define CP2VDW 21 // Def: 0 = non vdw #define CP2ROK 22 // Def: 0 = non ROKS #define CP2PFO 23 // Def: 0 = do not print forces #define CP2PST 24 // Def: 0 = do not print stress tensor #define CP2PMU 25 // Def: 0 = do not print Mulliken #define CP2PLO 26 // Def: 0 = do not print Löwdin #define CP2POR 27 // Def: 0 = do not print orbitals #define CP2PBC 28 // Def: f(system) #define CP2LAT 29 // 0 = a,b,c,alpha,beta,gamma :: 1 = ax,ay,az,bx,by,bz,cx,cy,cz #define CP2SYM 30 // Def: f(system) #define CP2ENS 31 // Def: 7 = NVT ensemble #define CP2NST 32 // Def: 10000 max step md #define CP2DLT 33 // Def: 2.5 #define CP2TMP 34 // Def: 300 #define CP2GMI 35 // Def: 1 = CG geometry optimizer #define CP2MAG 36 // Def: 10000 max step geo #define CP2GEF 37 // Def: 0.0001 #define CP2OUF 38 // Def: 10 #define CP2CON 39 // Def: 0 #define CP2OUU 40 // Def: 0 #define NCP2KCALC 7 #define CP2NTHERM 5 extern cp2k * tmp_cp2k; extern double default_cp2k_options[41]; extern double default_cp2k_extra[3][4]; extern double default_vdw_cut[2]; extern int cp2k_default_num[12]; extern gchar * cp2k_default_keywords[11][11]; extern gchar * cp2k_default_text[11][11]; extern gchar * cp2k_vdw_keywords[2][3]; extern int cp2k_is_basis_in_database (int sp); extern int cp2k_is_pseudo_in_database (int sp); extern GtkWidget * prepare_basis_combo (int sp, int obj); extern gchar * get_nth_elem (int sp, int id, int obj); extern gchar * get_nth_key (int sp, int id, int obj); extern int find_cp2k_sym (); // For CP2K v9.1 #define N_MOLOPT 191 extern char * molopt_elem[N_MOLOPT]; extern char * molopt_keys[N_MOLOPT]; extern char * cp2k_molopt[N_MOLOPT]; #define N_GTH 156 extern char * gth_elem[N_GTH]; extern char * gth_keys[N_GTH]; extern char * cp2k_gth[N_GTH]; #define N_BASIS 250 extern char * basis_elem[N_BASIS]; extern char * basis_keys[N_BASIS]; extern char * cp2k_basis[N_BASIS]; #define N_POTS 421 extern char * pot_elem[N_POTS]; extern char * pot_keys[N_POTS]; extern char * cp2k_pot[N_POTS]; #endif atomes_1.3.1/src/calc/cp2k/cp2k_molopt-basis.c0000664000175000017500000042011515212624223020534 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_molopt-basis.c * @short CP2K MOLOPT basis set, as distributed with CP2K 9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_molopt-basis.c' * * Contains: * - CP2K MOLOPT basis set, as distributed with CP2K 9.1 This file contains 3 tables: molopt_elem -> the list of chemical elements molopt_keys -> the list of keywords cp2k_molopt -> finally the complete MOLOPT basis set */ #include "global.h" char * molopt_elem[191]={"H", "H", "H", "H", "H", "C", "C", "C", "C", "C", "N", "N", "N", "N", "N", "O", "O", "O", "O", "O", "F", "F", "F", "F", "F", "Si", "Si", "Si", "Si", "Si", "P", "P", "P", "P", "P", "S", "S", "S", "S", "S", "Cl", "Cl", "Cl", "Cl", "Cl", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "B", "C", "C", "N", "N", "O", "O", "F", "F", "Ne", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Al", "Si", "Si", "P", "P", "S", "S", "Cl", "Cl", "Ar", "Ar", "K", "K", "Ca", "Ca", "Sc", "Sc", "Ti", "Ti", "V", "V", "Cr", "Cr", "Mn", "Mn", "Fe", "Fe", "Co", "Co", "Ni", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "Ge", "As", "As", "Se", "Se", "Br", "Br", "Kr", "Kr", "Rb", "Rb", "Sr", "Sr", "Y", "Y", "Zr", "Zr", "Nb", "Nb", "Mo", "Mo", "Tc", "Tc", "Ru", "Ru", "Rh", "Rh", "Rh", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Cd", "Cd", "In", "In", "Sn", "Sn", "Sb", "Sb", "Te", "Te", "I", "I", "Xe", "Xe", "Cs", "Cs", "Ba", "Ba", "Hf", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Hg", "Hg", "Tl", "Tl", "Pb", "Pb", "Bi", "Bi", "Po", "Po", "At", "At", "Rn", "Rn", "U"}; char * molopt_keys[191]={"SZV-MOLOPT-GTH-q1", "DZVP-MOLOPT-GTH-q1", "TZVP-MOLOPT-GTH-q1", "TZV2P-MOLOPT-GTH-q1", "TZV2PX-MOLOPT-GTH-q1", "SZV-MOLOPT-GTH-q4", "DZVP-MOLOPT-GTH-q4", "TZVP-MOLOPT-GTH-q4", "TZV2P-MOLOPT-GTH-q4", "TZV2PX-MOLOPT-GTH-q4", "SZV-MOLOPT-GTH-q5", "DZVP-MOLOPT-GTH-q5", "TZVP-MOLOPT-GTH-q5", "TZV2P-MOLOPT-GTH-q5", "TZV2PX-MOLOPT-GTH-q5", "SZV-MOLOPT-GTH-q6", "DZVP-MOLOPT-GTH-q6", "TZVP-MOLOPT-GTH-q6", "TZV2P-MOLOPT-GTH-q6", "TZV2PX-MOLOPT-GTH-q6", "SZV-MOLOPT-GTH-q7", "DZVP-MOLOPT-GTH-q7", "TZVP-MOLOPT-GTH-q7", "TZV2P-MOLOPT-GTH-q7", "TZV2PX-MOLOPT-GTH-q7", "SZV-MOLOPT-GTH-q4", "DZVP-MOLOPT-GTH-q4", "TZVP-MOLOPT-GTH-q4", "TZV2P-MOLOPT-GTH-q4", "TZV2PX-MOLOPT-GTH-q4", "SZV-MOLOPT-GTH-q5", "DZVP-MOLOPT-GTH-q5", "TZVP-MOLOPT-GTH-q5", "TZV2P-MOLOPT-GTH-q5", "TZV2PX-MOLOPT-GTH-q5", "SZV-MOLOPT-GTH-q6", "DZVP-MOLOPT-GTH-q6", "TZVP-MOLOPT-GTH-q6", "TZV2P-MOLOPT-GTH-q6", "TZV2PX-MOLOPT-GTH-q6", "SZV-MOLOPT-GTH-q7", "DZVP-MOLOPT-GTH-q7", "TZVP-MOLOPT-GTH-q7", "TZV2P-MOLOPT-GTH-q7", "TZV2PX-MOLOPT-GTH-q7", "SZV-MOLOPT-SR-GTH-q1", "DZVP-MOLOPT-SR-GTH-q1", "SZV-MOLOPT-SR-GTH-q2", "DZVP-MOLOPT-SR-GTH-q2", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q9", "SZVP-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-GTH-q14"}; char * cp2k_molopt[191]={"\n" " H SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q1\n" " 1\n" " 2 0 0 7 1\n" " 11.478000339908 0.024916243200\n" " 3.700758562763 0.079825490000\n" " 1.446884268432 0.128862675300\n" " 0.716814589696 0.379448894600\n" " 0.247918564176 0.324552432600\n" " 0.066918004004 0.037148121400\n" " 0.021708243634 -0.001125195500\n" "#","\n" " H DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 2 1\n" " 11.478000339908 0.024916243200 -0.012512421400 0.024510918200\n" " 3.700758562763 0.079825490000 -0.056449071100 0.058140794100\n" " 1.446884268432 0.128862675300 0.011242684700 0.444709498500\n" " 0.716814589696 0.379448894600 -0.418587548300 0.646207973100\n" " 0.247918564176 0.324552432600 0.590363216700 0.803385018200\n" " 0.066918004004 0.037148121400 0.438703133000 0.892971208700\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.120101316500\n" "#","\n" " H TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 3 1\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500\n" "#","\n" " H TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 3 2\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200 -0.016497254600\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100 -0.023524900100\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500 -0.484890807700\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100 0.581651597400\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200 -0.302708265200\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700 0.037586403600\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500 0.177876988600\n" "#","\n" " H TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q1\n" " 1\n" " 2 0 2 7 3 2 1\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200 -0.016497254600 0.013783151600\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100 -0.023524900100 0.095244888900\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500 -0.484890807700 1.000410191300\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100 0.581651597400 0.169848598800\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200 -0.302708265200 0.073559299500\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700 0.037586403600 0.782848013900\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500 0.177876988600 -0.348307160100\n" "#","\n" " C SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q4\n" " 1\n" " 2 0 1 7 1 1\n" " 6.132624767898 -0.105576563700 0.035098108400\n" " 2.625196064782 -0.174866621100 0.114197930900\n" " 1.045456957247 0.064464981400 0.215908137300\n" " 0.478316330874 0.830447035300 0.355929151000\n" " 0.178617414302 0.371911373800 0.271541842000\n" " 0.075144725465 0.006174464000 0.056256557700\n" " 0.030286753006 0.008966477300 0.004998059700\n" "#","\n" " C DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 2 2 1\n" " 6.132624767898 -0.105576563700 0.024850587600 0.035098108400 -0.056712999000 0.037469425800\n" " 2.625196064782 -0.174866621100 0.147440856000 0.114197930900 -0.076743951500 0.071047574800\n" " 1.045456957247 0.064464981400 -0.421418379200 0.215908137300 -0.528056757000 0.619330561200\n" " 0.478316330874 0.830447035300 0.823051336800 0.355929151000 0.394594045700 0.710730857000\n" " 0.178617414302 0.371911373800 0.184880712100 0.271541842000 0.721247475800 0.389148235000\n" " 0.075144725465 0.006174464000 -0.742086051600 0.056256557700 0.733902531700 0.346374124100\n" " 0.030286753006 0.008966477300 0.083382192000 0.004998059700 0.248172175500 -0.005142430900\n" "#","\n" " C TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 3 3 1\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900\n" "#","\n" " C TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 3 3 2\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800 0.029169209100\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800 0.026982879200\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200 0.547209491100\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000 -0.776406436300\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000 0.657213953300\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100 -0.480025949600\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900 0.036022564900\n" "#","\n" " C TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q4\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800 0.029169209100 0.022304679500\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800 0.026982879200 0.026025873000\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200 0.547209491100 0.716854675300\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000 -0.776406436300 -0.024992326800\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000 0.657213953300 0.633014106300\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100 -0.480025949600 -0.092802773900\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900 0.036022564900 -0.094955683900\n" "#","\n" " N SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q5\n" " 1\n" " 2 0 1 7 1 1\n" " 9.042730397298 -0.057711157700 0.031469526900\n" " 3.882224940673 -0.121876730300 0.109126355100\n" " 1.512880320070 0.094844857800 0.238123330300\n" " 0.586630738140 0.558583487700 0.376105481500\n" " 0.222851091943 0.346456981000 0.249727365300\n" " 0.084582888713 0.031196738600 0.054673928900\n" " 0.039193834928 0.010393976200 -0.000181794900\n" "#","\n" " N DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 2 2 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.031469526900 -0.012643172000 0.017852718900\n" " 3.882224940673 -0.121876730300 0.101741751800 0.109126355100 -0.031177059000 0.037932409700\n" " 1.512880320070 0.094844857800 -0.036013432800 0.238123330300 -0.094228032000 0.324051472500\n" " 0.586630738140 0.558583487700 -0.547764884700 0.376105481500 -0.192405367500 0.888374055100\n" " 0.222851091943 0.346456981000 0.606791574500 0.249727365300 0.701455729100 0.188935754200\n" " 0.084582888713 0.031196738600 0.493556790200 0.054673928900 0.593951368600 -0.049452863800\n" " 0.039193834928 0.010393976200 0.053452379800 -0.000181794900 0.039720774300 -0.019150455700\n" "#","\n" " N TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 3 3 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700\n" "#","\n" " N TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 3 3 2\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900 -0.026814870200\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700 0.018900829300\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500 -0.406110228200\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100 0.202616067000\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200 0.641914827500\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800 -0.754236178400\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700 0.192322748800\n" "#","\n" " N TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q5\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900 -0.026814870200 0.020975689500\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700 0.018900829300 -0.027501696100\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500 -0.406110228200 0.569952079600\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100 0.202616067000 0.862205093600\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200 0.641914827500 -0.067750230800\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800 -0.754236178400 -0.185330469600\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700 0.192322748800 0.013120721900\n" "#","\n" " O SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q6\n" " 1\n" " 2 0 1 7 1 1\n" " 12.015954705512 -0.060190841200 0.036543638800\n" " 5.108150287385 -0.129597923300 0.120927648700\n" " 2.048398039874 0.118175889400 0.251093670300\n" " 0.832381575582 0.462964485000 0.352639910300\n" " 0.352316246455 0.450353782600 0.294708645200\n" " 0.142977330880 0.092715833600 0.173039869300\n" " 0.046760918300 -0.000255945800 0.009726110600\n" "#","\n" " O DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 2 2 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.036543638800 -0.034210557400 0.014807054400\n" " 5.108150287385 -0.129597923300 0.110885902200 0.120927648700 -0.120619770900 0.068186159300\n" " 2.048398039874 0.118175889400 -0.053732406400 0.251093670300 -0.213719464600 0.290576499200\n" " 0.832381575582 0.462964485000 -0.572670666200 0.352639910300 -0.473674858400 1.063344189500\n" " 0.352316246455 0.450353782600 0.186760006700 0.294708645200 0.484848376400 0.307656114200\n" " 0.142977330880 0.092715833600 0.387201458600 0.173039869300 0.717465919700 0.318346834400\n" " 0.046760918300 -0.000255945800 0.003825849600 0.009726110600 0.032498979400 -0.005771736600\n" "#","\n" " O TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 3 3 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600\n" "#","\n" " O TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 3 3 2\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400 -0.013843410500\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300 0.016850210400\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200 -0.186696332600\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500 0.068001578700\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200 0.911407510000\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400 -0.333128530600\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600 -0.405788515900\n" "#","\n" " O TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q6\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400 -0.013843410500 0.002657486200\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300 0.016850210400 -0.007708463700\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200 -0.186696332600 0.378459897700\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500 0.068001578700 0.819571172100\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200 0.911407510000 -0.075845376400\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400 -0.333128530600 0.386329438600\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600 -0.405788515900 0.035062554400\n" "#","\n" " F SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q7\n" " 1\n" " 2 0 1 7 1 1\n" " 15.025672765127 -0.076135699000 0.043030876500\n" " 6.156800581515 -0.145492650600 0.138591822100\n" " 2.411456205564 0.195144281500 0.283251574300\n" " 0.963986369687 0.553654166300 0.357678749700\n" " 0.396229721431 0.454888028100 0.300622862100\n" " 0.157658905678 0.078338198300 0.138839114100\n" " 0.048130255107 0.002175323600 0.008740274300\n" "#","\n" " F DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 2 2 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.043030876500 -0.027382614400 0.006095862800\n" " 6.156800581515 -0.145492650600 0.078091919900 0.138591822100 -0.119463647500 0.057880784500\n" " 2.411456205564 0.195144281500 -0.051537351700 0.283251574300 -0.152089668600 0.143657436500\n" " 0.963986369687 0.553654166300 -0.448874166200 0.357678749700 -0.460859710900 0.782158193600\n" " 0.396229721431 0.454888028100 0.143111336600 0.300622862100 0.260540362300 0.349204565600\n" " 0.157658905678 0.078338198300 0.433345205900 0.138839114100 0.410677921300 0.106634189000\n" " 0.048130255107 0.002175323600 -0.111759214900 0.008740274300 0.051656760200 -0.008599668300\n" "#","\n" " F TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 3 3 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300\n" "#","\n" " F TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 3 3 2\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800 -0.001964191900\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500 -0.017608747700\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500 -0.092704702300\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600 -0.415809616200\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600 0.628910907400\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000 -0.412356840700\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300 0.389252314700\n" "#","\n" " F TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q7\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800 -0.001964191900 -0.008318565400\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500 -0.017608747700 0.039096268100\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500 -0.092704702300 0.354742552600\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600 -0.415809616200 1.307321527200\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600 0.628910907400 -0.018428865800\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000 -0.412356840700 0.046645417600\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300 0.389252314700 0.001877717700\n" "#","\n" " Si SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q4\n" " 1\n" " 2 0 1 6 1 1\n" " 2.693604434572 0.015333179500 -0.005800105400\n" " 1.359613855428 -0.283798205000 -0.059172026000\n" " 0.513245176029 -0.228939692700 0.121487149900\n" " 0.326563011394 0.728834000900 0.423382421100\n" " 0.139986977410 0.446205299300 0.474592116300\n" " 0.068212286977 0.122025292800 0.250129397700\n" "#","\n" " Si DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 2 2 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.005800105400 0.023996406700 0.043919650100\n" " 1.359613855428 -0.283798205000 0.484815594600 -0.059172026000 0.055459199900 0.134639409600\n" " 0.513245176029 -0.228939692700 -0.276015880000 0.121487149900 -0.269559268100 0.517732111300\n" " 0.326563011394 0.728834000900 -0.228394679700 0.423382421100 -0.259506329000 0.282311245100\n" " 0.139986977410 0.446205299300 -0.018311553000 0.474592116300 0.310318217600 0.281350794600\n" " 0.068212286977 0.122025292800 0.365245476200 0.250129397700 0.647414251100 0.139066843800\n" "#","\n" " Si TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 3 3 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800\n" "#","\n" " Si TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 3 3 2\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100 -0.021796206700\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600 -0.065666574500\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300 -0.587881439600\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100 0.799278215300\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600 -0.377563218200\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800 0.406207118300\n" "#","\n" " Si TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q4\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100 -0.021796206700 -0.021648469800\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600 -0.065666574500 0.421421477600\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300 -0.587881439600 0.744190736800\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100 0.799278215300 0.434937300000\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600 -0.377563218200 -0.722129731000\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800 0.406207118300 0.655673293700\n" "#","\n" " P SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q5\n" " 1\n" " 2 0 1 6 1 1\n" " 3.338153406523 0.039454247900 -0.012783546700\n" " 1.833919672496 -0.306814659300 -0.038865450000\n" " 0.688531765653 -0.113978610700 0.127534067400\n" " 0.372376701254 0.668025394000 0.401195491100\n" " 0.166131443191 0.491467475700 0.369849381300\n" " 0.075778343330 0.087478573600 0.184268604800\n" "#","\n" " P DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 2 2 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.012783546700 0.005165760600 0.023530272900\n" " 1.833919672496 -0.306814659300 0.305933443100 -0.038865450000 0.103133751300 0.140233454000\n" " 0.688531765653 -0.113978610700 0.118785269000 0.127534067400 -0.305520428500 0.507069588900\n" " 0.372376701254 0.668025394000 -0.716389791200 0.401195491100 -0.245673644600 0.492728339400\n" " 0.166131443191 0.491467475700 0.271518859600 0.369849381300 0.153640758600 0.310650223400\n" " 0.075778343330 0.087478573600 0.523136739400 0.184268604800 0.721924297300 0.030421200100\n" "#","\n" " P TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 3 3 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100\n" "#","\n" " P TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 3 3 2\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900 -0.026902801200\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000 -0.024419850900\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900 -0.592608257200\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400 0.982063898700\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400 0.131647772600\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100 0.264354685800\n" "#","\n" " P TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q5\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900 -0.026902801200 0.005311181800\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000 -0.024419850900 0.138144780500\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900 -0.592608257200 0.874057452500\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400 0.982063898700 0.436475627300\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400 0.131647772600 -0.092923616900\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100 0.264354685800 0.017694303700\n" "#","\n" " S SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q6\n" " 1\n" " 2 0 1 6 1 1\n" " 3.817590656735 0.075558928000 -0.019219238100\n" " 2.362751931093 -0.351216488200 -0.035664835200\n" " 0.861004180298 -0.099160602500 0.160834397000\n" " 0.417524512433 0.862753116400 0.507608206800\n" " 0.181513540673 0.307053614900 0.249563613200\n" " 0.070570776865 0.001592872500 0.025974500500\n" "#","\n" " S DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 2 2 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.019219238100 0.001714015800 0.007498037400\n" " 2.362751931093 -0.351216488200 0.179094296600 -0.035664835200 0.064608303200 0.104757185100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.160834397000 -0.170453754100 0.344818199900\n" " 0.417524512433 0.862753116400 -0.737640763800 0.507608206800 -0.536548069500 0.472319101700\n" " 0.181513540673 0.307053614900 0.419230078700 0.249563613200 0.786543640200 0.204745694800\n" " 0.070570776865 0.001592872500 0.359607313200 0.025974500500 0.740434318200 -0.019952573900\n" "#","\n" " S TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 3 3 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900\n" "#","\n" " S TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 3 3 2\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400 -0.024661974800\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100 0.042689758500\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900 -0.325440208500\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700 0.746641212400\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800 -0.120502819400\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900 -0.158216979000\n" "#","\n" " S TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q6\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400 -0.024661974800 0.013118322300\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100 0.042689758500 0.057787584100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900 -0.325440208500 0.679953632100\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700 0.746641212400 0.768725285200\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800 -0.120502819400 0.173138012700\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900 -0.158216979000 0.060850854200\n" "#","\n" " Cl SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q7\n" " 1\n" " 2 0 1 6 1 1\n" " 4.577034194110 0.065051807700 -0.018555371400\n" " 2.685006367322 -0.363216561500 -0.038757218600\n" " 1.107869270111 -0.013978112200 0.165913669300\n" " 0.515012065056 0.656897397000 0.409671142600\n" " 0.225105420962 0.492961793600 0.367216031300\n" " 0.089684813445 0.053468914400 0.129741292500\n" "#","\n" " Cl DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 2 2 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.018555371400 0.004980719100 0.008255008600\n" " 2.685006367322 -0.363216561500 0.289383593800 -0.038757218600 0.062414668400 0.112659622200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.165913669300 -0.069602677800 0.303640572700\n" " 0.515012065056 0.656897397000 -0.631234162900 0.409671142600 -0.435899779400 0.542588312000\n" " 0.225105420962 0.492961793600 0.132599834000 0.367216031300 0.798386816000 0.275653471800\n" " 0.089684813445 0.053468914400 0.558743621800 0.129741292500 1.105427347200 -0.001399665300\n" "#","\n" " Cl TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 3 3 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300\n" "#","\n" " Cl TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 3 3 2\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600 -0.023981761800\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200 0.022760737200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700 -0.255872922500\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000 0.152366447500\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800 0.683411212900\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300 -0.558926647700\n" "#","\n" " Cl TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q7\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600 -0.023981761800 0.012967367100\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200 0.022760737200 0.024412096700\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700 -0.255872922500 0.393536985500\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000 0.152366447500 0.715552544800\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800 0.683411212900 0.342440527400\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300 -0.558926647700 -0.147002819200\n" "#","\n" " H SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q1\n" " 1\n" " 2 0 0 5 1\n" " 10.068468228533 -0.033917444900\n" " 2.680222868089 -0.122202212100\n" " 0.791501539122 -0.443818861200\n" " 0.239116150487 -0.453182186600\n" " 0.082193184441 -0.131612861500\n" "#","\n" " H DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q1\n" " 1\n" " 2 0 1 5 2 1\n" " 10.068468228533 -0.033917444900 0.059193775500 0.009905134400\n" " 2.680222868089 -0.122202212100 0.843318328900 0.122449566500\n" " 0.791501539122 -0.443818861200 -1.155707115500 0.477183240900\n" " 0.239116150487 -0.453182186600 0.049479621200 0.547919678200\n" " 0.082193184441 -0.131612861500 0.522708738000 0.869031854000\n" "#","\n" " He SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q2\n" " 1\n" " 2 0 0 4 1\n" " 11.042785405048 -0.057709039524\n" " 2.784477928537 -0.186997538114\n" " 0.777508803064 -0.356165765185\n" " 0.222222544418 -0.270871722171\n" "#","\n" " He DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q2\n" " 1\n" " 2 0 1 4 2 1\n" " 11.042785405048 -0.057709039524 -0.105186433287 0.003655817482\n" " 2.784477928537 -0.186997538114 -0.390936479220 -0.189395754815\n" " 0.777508803064 -0.356165765185 -0.838063667638 -1.512867520694\n" " 0.222222544418 -0.270871722171 1.442874338563 0.670534435463\n" "#","\n" " Li SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 0 5 2\n" " 7.133127574876 0.277443782336 0.081564852833\n" " 1.999997046722 0.418209986449 0.163120764751\n" " 0.612030939985 0.305912589369 0.178229873051\n" " 0.084366737836 0.210640845338 -0.467205177084\n" " 0.032613166298 0.112523830865 -0.297593804585\n" "#","\n" " Li DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 5 3 1\n" " 7.133127574876 0.277443782336 0.081564852833 -0.186441017519 -0.057587889331\n" " 1.999997046722 0.418209986449 0.163120764751 -0.109333052536 -0.009895878526\n" " 0.612030939985 0.305912589369 0.178229873051 -0.035923579149 -0.849366496083\n" " 0.084366737836 0.210640845338 -0.467205177084 -1.930661653919 -2.366974219334\n" " 0.032613166298 0.112523830865 -0.297593804585 1.884814754037 0.117218879286\n" "#","\n" " Be SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 0 6 2\n" " 14.927410410930 -0.101692281035 0.108892279587\n" " 6.934611958494 -0.211895541408 0.237670602277\n" " 2.222208384565 -0.279935231472 0.429698556888\n" " 0.732913986617 -0.091068265926 0.213557818158\n" " 0.225007132266 -0.115295308010 -0.652182396204\n" " 0.074144067364 -0.173251908170 -0.905622978118\n" "#","\n" " Be DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 6 3 1\n" " 14.927410410930 -0.101692281035 0.108892279587 -0.013828511039 -0.043322867269\n" " 6.934611958494 -0.211895541408 0.237670602277 -0.065062052894 -0.047764533740\n" " 2.222208384565 -0.279935231472 0.429698556888 -0.515821054187 -0.217923574729\n" " 0.732913986617 -0.091068265926 0.213557818158 -0.100183446834 -1.091509212634\n" " 0.225007132266 -0.115295308010 -0.652182396204 2.012025412480 -2.124632001073\n" " 0.074144067364 -0.173251908170 -0.905622978118 -1.507944883871 -1.344316057412\n" "#","\n" " B SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 4 1 1\n" " 3.053444073497 0.142389531583 -0.124774394633\n" " 0.915483968316 0.070304308347 -0.383517801425\n" " 0.329920053516 -0.657626233726 -0.645201457411\n" " 0.101655384143 -0.417625483973 -0.369557407831\n" "#","\n" " B DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 2 4 2 2 1\n" " 3.053444073497 0.142389531583 -0.541363625050 -0.124774394633 -0.166005683397 -0.081377656373\n" " 0.915483968316 0.070304308347 -0.187885904555 -0.383517801425 -0.631934352115 -0.772292138236\n" " 0.329920053516 -0.657626233726 1.734743314732 -0.645201457411 -0.579629526633 -1.322433881793\n" " 0.101655384143 -0.417625483973 -1.647357915542 -0.369557407831 1.762122465548 -0.981970482328\n" "#","\n" " C SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 5.605330751705 0.111532881900 -0.064868978500\n" " 2.113016390533 0.153142194100 -0.200470255700\n" " 0.769911454810 -0.321396879400 -0.413141730100\n" " 0.348157086385 -0.610926421600 -0.415337139200\n" " 0.128212254710 -0.133990862800 -0.288527673600\n" "#","\n" " C DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 5.605330751705 0.111532881900 0.466507483200 -0.064868978500 -0.055475693400 0.029952774600\n" " 2.113016390533 0.153142194100 0.144113212800 -0.200470255700 -0.216165175200 0.070784458800\n" " 0.769911454810 -0.321396879400 0.029364880900 -0.413141730100 -0.436624272300 0.674601058600\n" " 0.348157086385 -0.610926421600 0.929470388400 -0.415337139200 0.784000698400 0.173652061800\n" " 0.128212254710 -0.133990862800 1.066914331200 -0.288527673600 0.987908135000 1.036317024700\n" "#","\n" " N SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 7.341988051825 0.113789156500 -0.053744330400\n" " 2.542637110957 0.097294516500 -0.165752516200\n" " 0.888574967229 -0.445077422600 -0.317365165600\n" " 0.333802200435 -0.584142233900 -0.312039675200\n" " 0.112012109029 -0.139562383500 -0.117936008100\n" "#","\n" " N DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 7.341988051825 0.113789156500 0.077765588400 -0.053744330400 -0.007627243700 0.033688455200\n" " 2.542637110957 0.097294516500 0.108655219900 -0.165752516200 0.015163333100 0.109813343200\n" " 0.888574967229 -0.445077422600 -0.374125427100 -0.317365165600 -0.129388247500 0.856542971300\n" " 0.333802200435 -0.584142233900 0.024021712400 -0.312039675200 0.554905847400 0.509681657500\n" " 0.112012109029 -0.139562383500 0.979415132500 -0.117936008100 1.001020469600 0.047030652200\n" "#","\n" " O SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 10.389228018317 0.126240722900 -0.061302037200\n" " 3.849621072005 0.139933704300 -0.190087511700\n" " 1.388401188741 -0.434348231700 -0.377726982800\n" " 0.496955043655 -0.852791790900 -0.454266086000\n" " 0.162491615040 -0.242351537800 -0.257388983000\n" "#","\n" " O DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 10.389228018317 0.126240722900 0.069215797900 -0.061302037200 -0.026862701100 0.029845227500\n" " 3.849621072005 0.139933704300 0.115634538900 -0.190087511700 -0.006283021000 0.060939733900\n" " 1.388401188741 -0.434348231700 -0.322839719400 -0.377726982800 -0.224839187800 0.732321580100\n" " 0.496955043655 -0.852791790900 -0.095944016600 -0.454266086000 0.380324658600 0.893564918400\n" " 0.162491615040 -0.242351537800 1.102830348700 -0.257388983000 1.054102919900 0.152954188700\n" "#","\n" " F SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 13.701520668842 0.112227293400 -0.076186490700\n" " 5.098268930397 0.138913509400 -0.239982004100\n" " 1.837941323644 -0.418624975600 -0.481912435400\n" " 0.631758758967 -0.781149500600 -0.576092640600\n" " 0.202026732748 -0.233361053400 -0.325681090200\n" "#","\n" " F DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 13.701520668842 0.112227293400 0.097208978300 -0.076186490700 -0.065073103800 0.014975910100\n" " 5.098268930397 0.138913509400 0.102876192000 -0.239982004100 -0.178954386700 0.056540852300\n" " 1.837941323644 -0.418624975600 -0.261194711300 -0.481912435400 -0.432978808900 0.421555957700\n" " 0.631758758967 -0.781149500600 -0.613877500700 -0.576092640600 -0.420393726200 1.040368501100\n" " 0.202026732748 -0.233361053400 0.913930794200 -0.325681090200 1.087532785600 -0.115372011600\n" "#","\n" " Ne SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 6 1 1\n" " 19.144669251814 0.069475808579 0.044323480089\n" " 7.817581633327 0.136833604284 0.141748545980\n" " 3.076395099204 -0.176240522396 0.286599690536\n" " 1.225783227767 -0.534790596391 0.369762267197\n" " 0.469438475964 -0.420816475643 0.313976275678\n" " 0.165401378033 -0.056199770547 0.129616681048\n" "#","\n" " Ne DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 6 2 2 1\n" " 19.144669251814 0.069475808579 0.008074422113 0.044323480089 -0.019633668505 -0.016337449779\n" " 7.817581633327 0.136833604284 0.088172430797 0.141748545980 -0.051196308389 -0.013519520944\n" " 3.076395099204 -0.176240522396 -0.218906635760 0.286599690536 -0.171521562166 -0.158627528552\n" " 1.225783227767 -0.534790596391 0.130013326453 0.369762267197 0.007505219111 -0.028650976608\n" " 0.469438475964 -0.420816475643 -1.271285832759 0.313976275678 -0.568357530124 -0.982412169970\n" " 0.165401378033 -0.056199770547 1.727911777889 0.129616681048 1.298147838544 1.273253904774\n" "#","\n" " Na SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 2 1\n" " 23.518800761960 0.037798268053 0.005040470618 -0.041235150854\n" " 11.135656103275 0.180415272016 0.031210048356 -0.102704065658\n" " 4.647813820246 -0.084235489885 -0.021214584887 -0.276507156374\n" " 1.866708259982 -0.502007239468 -0.088006426680 -0.405087985600\n" " 0.734683697196 -0.487454712994 -0.241562643580 -0.345669762598\n" " 0.275672995860 -0.088909855778 0.046069503612 -0.128294724774\n" " 0.049895108245 -0.000245624853 1.008694292400 -0.002074313963\n" "#","\n" " Na DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 3 2\n" " 23.518800761960 0.037798268053 0.005040470618 0.037779070657 -0.041235150854 -0.005410838671\n" " 11.135656103275 0.180415272016 0.031210048356 -0.119614429319 -0.102704065658 -0.017609338317\n" " 4.647813820246 -0.084235489885 -0.021214584887 0.224302495702 -0.276507156374 -0.043803008653\n" " 1.866708259982 -0.502007239468 -0.088006426680 -0.183779813212 -0.405087985600 -0.067844235623\n" " 0.734683697196 -0.487454712994 -0.241562643580 1.641649867502 -0.345669762598 -0.085057974012\n" " 0.275672995860 -0.088909855778 0.046069503612 -2.281564821968 -0.128294724774 0.159527770719\n" " 0.049895108245 -0.000245624853 1.008694292400 0.801660990981 -0.002074313963 0.982149424568\n" "#","\n" " Mg SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 7 2 1\n" " 30.653047963189 0.054377184080 -0.008503364657 0.041949376018\n" " 12.924389070531 0.180093043263 -0.033268853396 0.154513485142\n" " 4.968377097667 -0.183378978769 0.039287763681 0.347080006586\n" " 1.851827556019 -0.641604001295 0.169148911336 0.456042413582\n" " 0.673565331978 -0.382610049904 0.233823708921 0.275294822235\n" " 0.168626419621 -0.012877428759 -0.474103906013 0.029266033687\n" " 0.059428253135 -0.011565253116 -0.681875195374 -0.006397458869\n" "#","\n" " Mg DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 7 3 2\n" " 30.653047963189 0.054377184080 -0.008503364657 -0.017403499711 0.041949376018 0.005685482959\n" " 12.924389070531 0.180093043263 -0.033268853396 0.019979586563 0.154513485142 0.031145413254\n" " 4.968377097667 -0.183378978769 0.039287763681 -0.035277033496 0.347080006586 0.054939424515\n" " 1.851827556019 -0.641604001295 0.169148911336 -0.203352520214 0.456042413582 0.123275320202\n" " 0.673565331978 -0.382610049904 0.233823708921 -0.348027990301 0.275294822235 -0.070548883335\n" " 0.168626419621 -0.012877428759 -0.474103906013 2.122888539507 0.029266033687 -0.608144728127\n" " 0.059428253135 -0.011565253116 -0.681875195374 -1.871583263111 -0.006397458869 -0.561501656268\n" "#","\n" " Al SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 4 1 1\n" " 1.212902319099 0.095248915182 0.017523273525\n" " 0.454181446881 0.238368062117 0.031530615904\n" " 0.242418503788 -0.551005849330 -0.395233201731\n" " 0.078268495175 -0.241350820340 -0.270737591969\n" "#","\n" " Al DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.212902319099 0.095248915182 -0.230241641025 0.017523273525 -0.081919506975 0.359233701644\n" " 0.454181446881 0.238368062117 -0.662191771394 0.031530615904 0.059600622511 0.610925184385\n" " 0.242418503788 -0.551005849330 1.692156327298 -0.395233201731 1.076271205166 1.758688383246\n" " 0.078268495175 -0.241350820340 -1.648320060523 -0.270737591969 -1.208390139070 0.735529744423\n" "#","\n" " Si SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 4 1 1\n" " 1.256767641387 0.227718466600 0.067776267500\n" " 0.506394122478 -0.024323599300 -0.213716770200\n" " 0.238883845662 -0.558639778900 -0.409893726600\n" " 0.087336883836 -0.207272502200 -0.353922302700\n" "#","\n" " Si DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.256767641387 0.227718466600 -1.025748084300 0.067776267500 0.099785628800 0.159026680300\n" " 0.506394122478 -0.024323599300 0.694283033300 -0.213716770200 -0.411985229800 0.392330436800\n" " 0.238883845662 -0.558639778900 0.058162561600 -0.409893726600 -0.057183126300 0.393085151800\n" " 0.087336883836 -0.207272502200 -0.258181009000 -0.353922302700 0.700307869400 0.550337119000\n" "#","\n" " P SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 4 1 1\n" " 1.631862170786 0.335074115300 0.123299547600\n" " 0.708432685319 -0.023088252600 -0.351511376700\n" " 0.284968483654 -0.973819129700 -0.806870557100\n" " 0.098011823689 -0.292906884000 -0.517933891800\n" "#","\n" " P DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.631862170786 0.335074115300 0.341512748800 0.123299547600 0.134459618400 0.174671506000\n" " 0.708432685319 -0.023088252600 0.008045537600 -0.351511376700 -0.389557392400 0.503029215100\n" " 0.284968483654 -0.973819129700 -0.851246931200 -0.806870557100 -0.138884374300 0.699184423900\n" " 0.098011823689 -0.292906884000 1.328906840600 -0.517933891800 1.062071606300 0.407460906200\n" "#","\n" " S SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 4 1 1\n" " 2.215854692813 0.170962878400 0.092191824200\n" " 1.131470525271 0.127069405600 -0.162197093800\n" " 0.410168143974 -0.733925381700 -0.605594737600\n" " 0.140587330023 -0.176971633900 -0.213309789800\n" "#","\n" " S DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 4 2 2 1\n" " 2.215854692813 0.170962878400 -0.080726543800 0.092191824200 0.057845138800 0.113762894700\n" " 1.131470525271 0.127069405600 -0.209877313900 -0.162197093800 -0.094737441500 0.350414093700\n" " 0.410168143974 -0.733925381700 0.683497090800 -0.605594737600 -0.369172638100 0.866785684700\n" " 0.140587330023 -0.176971633900 -0.625512739500 -0.213309789800 1.155699504700 0.217880463100\n" "#","\n" " Cl SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 4 1 1\n" " 2.379078117601 0.349064979100 0.116462270400\n" " 1.470718465013 0.023265903500 -0.193945393700\n" " 0.461213474057 -1.015492630400 -0.463529682400\n" " 0.150014717415 -0.402599991500 -0.299834714700\n" "#","\n" " Cl DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 4 2 2 1\n" " 2.379078117601 0.349064979100 0.153138206200 0.116462270400 0.160067891900 0.074898027900\n" " 1.470718465013 0.023265903500 0.170051509900 -0.193945393700 -0.212781225800 0.303856570000\n" " 0.461213474057 -1.015492630400 -0.702516267300 -0.463529682400 -0.439023237200 0.766878436800\n" " 0.150014717415 -0.402599991500 0.681437336600 -0.299834714700 1.036634179400 0.154947398700\n" "#","\n" " Ar SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 3.936450214256 -0.126876868653 0.081197313256\n" " 2.888050686108 0.488558851459 -0.050560847288\n" " 0.925305548464 -0.356808308806 -0.382285987629\n" " 0.366456608488 -0.745538702598 -0.507927770980\n" " 0.128035915977 -0.148475482748 -0.248562045384\n" "#","\n" " Ar DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 3.936450214256 -0.126876868653 -0.120853949683 0.081197313256 0.115242855583 0.118434272495\n" " 2.888050686108 0.488558851459 0.030456012450 -0.050560847288 -0.153264749918 -0.157989713634\n" " 0.925305548464 -0.356808308806 -0.229699408013 -0.382285987629 -0.074149829187 -0.072608763447\n" " 0.366456608488 -0.745538702598 1.833670881562 -0.507927770980 -0.965020325642 -0.967474418604\n" " 0.128035915977 -0.148475482748 -1.869800022555 -0.248562045384 1.384189599695 1.358175503076\n" "#","\n" " K SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 6 2 1\n" " 2.891270375454 -0.125588343071 0.141760377816 0.586273841257\n" " 2.714957993897 -0.332679523247 0.045797253838 -0.600247660122\n" " 0.954062644964 0.579235654863 -0.270917640330 -0.331386642719\n" " 0.407596260029 0.640286613853 -0.523435976542 -0.345162964052\n" " 0.163339876080 0.132146903359 -0.040955544362 -0.129654083334\n" " 0.036854064168 0.136961207358 1.420210199250 -0.002662514210\n" "#","\n" " K DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 3 2 1\n" " 2.891270375454 -0.125588343071 0.141760377816 0.092583173658 0.586273841257 0.174577931878 -0.022072489962\n" " 2.714957993897 -0.332679523247 0.045797253838 -0.045825704377 -0.600247660122 -0.189434477232 0.113984804892\n" " 0.954062644964 0.579235654863 -0.270917640330 0.363168058178 -0.331386642719 -0.078101098846 0.234486045475\n" " 0.407596260029 0.640286613853 -0.523435976542 -2.539586038548 -0.345162964052 -0.144666151565 0.234673259721\n" " 0.163339876080 0.132146903359 -0.040955544362 2.654427110393 -0.129654083334 0.092758894460 0.452553356262\n" " 0.036854064168 0.136961207358 1.420210199250 -0.693763482649 -0.002662514210 0.780744603300 0.480095027043\n" "#","\n" " Ca SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 5.284985596557 -0.416182629697 -0.083912217567 0.064960038145\n" " 4.091752229122 0.887610504052 0.216895453968 0.014546526081\n" " 1.429520321762 -0.323549926958 -0.096935550443 -0.466720491908\n" " 0.614375507986 -0.908395199325 -0.502206578258 -0.634030899528\n" " 0.242970577562 -0.208971576432 -0.096821746914 -0.251681593814\n" " 0.055000158016 0.039132482825 1.342563762693 -0.000003936848\n" "#","\n" " Ca DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 5.284985596557 -0.416182629697 -0.083912217567 -0.208574685974 0.064960038145 0.026515439739 -0.066630752510\n" " 4.091752229122 0.887610504052 0.216895453968 0.314510703283 0.014546526081 -0.028997969950 0.197842850864\n" " 1.429520321762 -0.323549926958 -0.096935550443 -0.601923136001 -0.466720491908 -0.073243851190 0.458365171560\n" " 0.614375507986 -0.908395199325 -0.502206578258 2.853614975011 -0.634030899528 -0.218228118923 0.372585742208\n" " 0.242970577562 -0.208971576432 -0.096821746914 -3.043287352030 -0.251681593814 0.144907690867 0.820156666086\n" " 0.055000158016 0.039132482825 1.342563762693 0.887844469398 -0.000003936848 0.854082269914 0.653032075293\n" "#","\n" " Sc SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.596358558474 -0.005607824648 -0.000597439424 -0.092377568763 0.045120250343\n" " 3.531908044322 0.513266691301 0.153537412458 0.071267862889 0.192728189010\n" " 1.358432991102 -0.619613224500 -0.224168885145 0.468025381136 0.336183526558\n" " 0.543348479632 -0.729328581203 -0.458469756794 0.444181247677 0.405780027669\n" " 0.197283658533 -0.063678221084 0.072089942129 0.091871138246 0.446780401537\n" " 0.054428805670 -0.076152416285 1.048240218482 -0.004061267711 0.155178106722\n" "#","\n" " Sc DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.596358558474 -0.005607824648 -0.000597439424 -0.002143930265 -0.092377568763 0.020935300558 0.045120250343 -0.026241824143 0.005774084495\n" " 3.531908044322 0.513266691301 0.153537412458 0.228058090414 0.071267862889 -0.024159604541 0.192728189010 -0.096234745142 -0.021058205466\n" " 1.358432991102 -0.619613224500 -0.224168885145 0.050489185834 0.468025381136 -0.177053431087 0.336183526558 -0.167689255408 -0.090318610966\n" " 0.543348479632 -0.729328581203 -0.458469756794 1.714744833607 0.444181247677 -0.236101867977 0.405780027669 -0.337050099684 -0.717025179002\n" " 0.197283658533 -0.063678221084 0.072089942129 -2.748813311572 0.091871138246 0.624399910851 0.446780401537 0.338357123973 -0.806018996967\n" " 0.054428805670 -0.076152416285 1.048240218482 1.327173437956 -0.004061267711 0.798174697757 0.155178106722 0.993267553023 -0.034431734574\n" "#","\n" " Ti SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.884569925997 0.004750577412 -0.002690702837 -0.108736525246 0.052842407451\n" " 3.894698463070 0.499503858222 0.103956524568 0.100912855636 0.195986532018\n" " 1.513588828959 -0.664995883766 -0.256641947580 0.527328996047 0.330343722079\n" " 0.596768079836 -0.726044574739 -0.451591547817 0.468197803110 0.396808432313\n" " 0.222222125842 -0.029011079755 0.165167622946 0.077640626075 0.347092399871\n" " 0.077078461321 0.075171747143 0.993127316430 -0.007523238420 0.132320900948\n" "#","\n" " Ti DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.884569925997 0.004750577412 -0.002690702837 0.075105591562 -0.108736525246 0.023185061556 0.052842407451 -0.038307431199 -0.002442658125\n" " 3.894698463070 0.499503858222 0.103956524568 0.048602853477 0.100912855636 -0.027189036213 0.195986532018 -0.076880250937 0.013119020987\n" " 1.513588828959 -0.664995883766 -0.256641947580 0.079732563787 0.527328996047 -0.230044390357 0.330343722079 -0.242486488988 -0.206817889885\n" " 0.596768079836 -0.726044574739 -0.451591547817 1.660896378972 0.468197803110 -0.126795185046 0.396808432313 -0.118369379707 -0.546596492823\n" " 0.222222125842 -0.029011079755 0.165167622946 -2.748651632733 0.077640626075 0.343517279356 0.347092399871 0.038099375809 -0.279145975103\n" " 0.077078461321 0.075171747143 0.993127316430 1.368227638651 -0.007523238420 0.946960702315 0.132320900948 1.046553050597 0.934394052863\n" "#","\n" " V SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.984623749528 0.020761670278 0.003472483927 -0.127318262252 0.054932269310\n" " 4.192169946044 0.491008828907 0.116393516673 0.142383719999 0.194803913356\n" " 1.674403287155 -0.682491382781 -0.215217539970 0.556224679524 0.318207922138\n" " 0.666664577236 -0.670820374730 -0.436714762412 0.483736882428 0.350513304180\n" " 0.242419878750 -0.048891386418 0.104274844115 0.086227000831 0.324484835051\n" " 0.067390273084 -0.000084103227 1.134107947863 -0.004719320688 0.134088585517\n" "#","\n" " V DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.984623749528 0.020761670278 0.003472483927 0.004588768658 -0.127318262252 0.022347856999 0.054932269310 -0.022459138650 -0.026581274918\n" " 4.192169946044 0.491008828907 0.116393516673 0.265023422395 0.142383719999 -0.034743188380 0.194803913356 -0.101116586232 0.051515222079\n" " 1.674403287155 -0.682491382781 -0.215217539970 0.055753124298 0.556224679524 -0.168852773516 0.318207922138 -0.120777522887 -0.165483508295\n" " 0.666664577236 -0.670820374730 -0.436714762412 1.571857662805 0.483736882428 -0.212388638969 0.350513304180 -0.254635388920 -0.672649310115\n" " 0.242419878750 -0.048891386418 0.104274844115 -2.575720417590 0.086227000831 0.567082913076 0.324484835051 0.328826511242 -0.518402997758\n" " 0.067390273084 -0.000084103227 1.134107947863 1.490359925888 -0.004719320688 0.737649031611 0.134088585517 0.919495386218 0.651022121928\n" "#","\n" " Cr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.512514788173 0.044157704927 0.005521331885 -0.106538347032 0.081830853262\n" " 4.473610317347 0.611382080738 0.102717317434 0.123956998990 0.165469927086\n" " 1.935100804674 -0.806653824181 -0.230184308969 0.572145261792 0.291295712802\n" " 0.787755660544 -0.813737787488 -0.583672998554 0.518904350249 0.315064211859\n" " 0.293768118617 -0.097787236037 0.171514456916 0.104097287875 0.298491580418\n" " 0.096285158065 -0.018725934011 1.121145454028 -0.012851161685 0.091086538491\n" "#","\n" " Cr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.512514788173 0.044157704927 0.005521331885 0.051983958707 -0.106538347032 0.019159720527 0.081830853262 -0.086435342501 0.010065113847\n" " 4.473610317347 0.611382080738 0.102717317434 -0.056754820192 0.123956998990 -0.039826791539 0.165469927086 -0.200410712475 -0.041960450278\n" " 1.935100804674 -0.806653824181 -0.230184308969 0.286788879281 0.572145261792 -0.183705969647 0.291295712802 -0.303533420852 -0.023503174374\n" " 0.787755660544 -0.813737787488 -0.583672998554 1.450866672422 0.518904350249 -0.237503427061 0.315064211859 -0.406252982054 -0.642426781332\n" " 0.293768118617 -0.097787236037 0.171514456916 -2.505465496286 0.104097287875 0.544755601203 0.298491580418 0.671193994691 -1.002149340367\n" " 0.096285158065 -0.018725934011 1.121145454028 1.333321045479 -0.012851161685 0.728237138423 0.091086538491 1.044472107589 -0.051749578559\n" "#","\n" " Mn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.544553301652 0.073093470228 0.007737617141 -0.112356559070 0.128427483264\n" " 4.848054813373 0.524172731625 0.080999035925 0.147232813006 0.251552231081\n" " 2.164526529348 -0.728865076153 -0.168390545215 0.595364746984 0.432303419394\n" " 0.889600577579 -0.719279115513 -0.484910732725 0.547990570294 0.462243734648\n" " 0.342420014284 -0.107062868546 0.161978409160 0.112195052476 0.410033587493\n" " 0.101924225526 -0.091391408123 0.922002216513 -0.006599984929 0.104488744702\n" "#","\n" " Mn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.544553301652 0.073093470228 0.007737617141 0.072614715676 -0.112356559070 -0.000918247791 0.128427483264 -0.098510232939 0.011600099044\n" " 4.848054813373 0.524172731625 0.080999035925 0.243235089119 0.147232813006 -0.022563980399 0.251552231081 -0.201137346341 -0.038269110382\n" " 2.164526529348 -0.728865076153 -0.168390545215 -0.083273051926 0.595364746984 -0.222689774520 0.432303419394 -0.372206024320 -0.006930134936\n" " 0.889600577579 -0.719279115513 -0.484910732725 1.528518694896 0.547990570294 -0.223281730802 0.462243734648 -0.283875478140 -0.593864975230\n" " 0.342420014284 -0.107062868546 0.161978409160 -2.382396811600 0.112195052476 0.787892008324 0.410033587493 0.535487181225 -0.731351385550\n" " 0.101924225526 -0.091391408123 0.922002216513 1.312464873250 -0.006599984929 0.923252070662 0.104488744702 0.884777948907 -0.410551623712\n" "#","\n" " Fe SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.424366035773 -0.162658565315 -0.035363017559 -0.072847050506 0.110173914394\n" " 4.825219529323 -0.376899337900 -0.052967122649 0.142729813399 0.188638090829\n" " 2.198939257455 0.782922261822 0.047770046081 0.463643359935 0.309261422382\n" " 0.891660670520 0.668791717694 -0.303745487596 0.381142099471 0.329416033612\n" " 0.316230539846 0.044155272467 0.241839701006 0.065337400672 0.286237082129\n" " 0.103474049912 -0.109124318184 1.110613962319 -0.008571808472 0.085017978924\n" "#","\n" " Fe DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.424366035773 -0.162658565315 -0.035363017559 -0.094078593184 -0.072847050506 -0.005733704721 0.110173914394 -0.070157127293 -0.006314368438\n" " 4.825219529323 -0.376899337900 -0.052967122649 -0.123947729175 0.142729813399 -0.013789178386 0.188638090829 -0.086799612151 0.010113549442\n" " 2.198939257455 0.782922261822 0.047770046081 -0.097232244128 0.463643359935 -0.102097633738 0.309261422382 -0.268972922540 -0.073675908597\n" " 0.891660670520 0.668791717694 -0.303745487596 -1.526375946562 0.381142099471 -0.120441338124 0.329416033612 -0.034996470754 -0.417006031951\n" " 0.316230539846 0.044155272467 0.241839701006 2.582854093079 0.065337400672 0.562339049496 0.286237082129 0.429744227008 -0.588459890648\n" " 0.103474049912 -0.109124318184 1.110613962319 -1.436336658778 -0.008571808472 0.724515320284 0.085017978924 0.805064206226 0.838504572352\n" "#","\n" " Co SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.365267848849 0.325640340818 0.100399284242 0.065178086481 0.161970551713\n" " 4.376457504499 0.052133097592 0.035256534659 -0.270123287267 0.258523958001\n" " 1.999997730424 -0.771768661844 -0.356022277776 -0.523181103805 0.345535423988\n" " 0.834299833692 -0.451524705474 -0.484191598528 -0.351988387737 0.343948305407\n" " 0.307481719486 -0.065898239599 0.316152225672 -0.046316455477 0.268593856293\n" " 0.095840175724 -0.089785302253 1.048143547929 0.002689603563 0.072458934329\n" "#","\n" " Co DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.365267848849 0.325640340818 0.100399284242 -0.037272221184 0.065178086481 -0.007853810191 0.161970551713 -0.150374171995 -0.004972248652\n" " 4.376457504499 0.052133097592 0.035256534659 0.130340578991 -0.270123287267 -0.005278972597 0.258523958001 -0.233094541861 -0.027876689140\n" " 1.999997730424 -0.771768661844 -0.356022277776 0.090277112993 -0.523181103805 -0.068346693868 0.345535423988 -0.433567358235 -0.105956196731\n" " 0.834299833692 -0.451524705474 -0.484191598528 1.325070368105 -0.351988387737 -0.063077394461 0.343948305407 0.030145546706 -0.735605287383\n" " 0.307481719486 -0.065898239599 0.316152225672 -2.625301782430 -0.046316455477 0.759497959451 0.268593856293 0.599205222587 -0.912105772173\n" " 0.095840175724 -0.089785302253 1.048143547929 1.561113649398 0.002689603563 0.543915652075 0.072458934329 0.957030486546 0.577467491892\n" "#","\n" " Ni SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 2 1 1\n" " 10.077427756816 -0.169086929207 0.022677528942 -0.126427871284 0.093966508982\n" " 5.847735848326 -0.313749841130 0.057292097754 0.241165311699 0.269388431386\n" " 2.494032826008 0.766489587737 -0.198532965699 0.543849904725 0.374569463127\n" " 0.988354848429 0.557414017577 -0.427662657827 0.407338672608 0.368089865298\n" " 0.344978242158 0.031729942841 0.260121348436 0.053320914508 0.281719022542\n" " 0.099465768726 -0.025637387109 0.887675876654 -0.003779723220 0.071642894272\n" "#","\n" " Ni DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 10.077427756816 -0.169086929207 0.022677528942 0.008641083176 -0.126427871284 -0.005476801255 0.093966508982 -0.033098284050 -0.001956691144\n" " 5.847735848326 -0.313749841130 0.057292097754 -0.136071800928 0.241165311699 -0.010936526817 0.269388431386 -0.127029492510 0.008799010286\n" " 2.494032826008 0.766489587737 -0.198532965699 0.002540653375 0.543849904725 -0.096663192733 0.374569463127 -0.196169938991 0.006398276758\n" " 0.988354848429 0.557414017577 -0.427662657827 -1.418467855641 0.407338672608 -0.097657540866 0.368089865298 -0.053996889860 0.204329631644\n" " 0.344978242158 0.031729942841 0.260121348436 2.550221093172 0.053320914508 0.508429500180 0.281719022542 0.149590629720 0.039178572608\n" " 0.099465768726 -0.025637387109 0.887675876654 -1.335540301345 -0.003779723220 0.911795065206 0.071642894272 1.026626831833 1.055662599287\n" "#","\n" " Cu SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 6 1 1 1\n" " 5.804051150731 0.020918100390 -0.004381592772 0.275442696345\n" " 2.947777593081 -0.106208582202 0.017185613995 0.351705110927\n" " 1.271621207972 0.307397740339 -0.089805629814 0.331635969640\n" " 0.517173767860 0.240805274553 0.054415126660 0.259386540456\n" " 0.198006620331 -0.798718095004 0.446326740476 0.151105835782\n" " 0.061684232135 -0.738671023869 0.468516012555 0.030634833418\n" "#","\n" " Cu DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 5.804051150731 0.020918100390 0.045720931893 -0.004381592772 -0.021109803873 0.275442696345 -0.101811263028 -0.016523760157\n" " 2.947777593081 -0.106208582202 -0.094026024883 0.017185613995 0.020960301873 0.351705110927 -0.207670618594 0.055142365254\n" " 1.271621207972 0.307397740339 -0.110623536813 -0.089805629814 0.233442747472 0.331635969640 -0.224161904198 -0.286656089760\n" " 0.517173767860 0.240805274553 -0.742218346329 0.054415126660 0.369266430953 0.259386540456 0.176105738988 -0.502349311598\n" " 0.198006620331 -0.798718095004 2.208107372713 0.446326740476 -1.405067129701 0.151105835782 0.210534119173 -0.508940020577\n" " 0.061684232135 -0.738671023869 -1.720016262377 0.468516012555 1.042169799071 0.030634833418 0.902456275117 0.682110135764\n" "#","\n" " Zn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 1 1 1\n" " 6.400812724595 0.021801105639 0.002944311709 0.285687212506\n" " 3.167793332690 -0.095613408620 -0.010450068121 0.358913949434\n" " 1.341703542578 0.274599856591 0.109519543853 0.326076466590\n" " 0.545418416941 0.137056274402 -0.060402922899 0.224403593782\n" " 0.222221794449 -0.625184197271 -0.531920972347 0.097325359555\n" " 0.079830045424 -0.482184818124 -0.498668813865 0.009048926598\n" "#","\n" " Zn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 6.400812724595 0.021801105639 0.042720631346 0.002944311709 0.015629658082 0.285687212506 -0.088263924683 -0.000548299003\n" " 3.167793332690 -0.095613408620 -0.109242428655 -0.010450068121 -0.063967389104 0.358913949434 -0.137258994504 0.001063691080\n" " 1.341703542578 0.274599856591 -0.024734012319 0.109519543853 -0.067544866326 0.326076466590 -0.221544327713 0.030739369071\n" " 0.545418416941 0.137056274402 -1.003647707301 -0.060402922899 -0.144585524038 0.224403593782 0.258114817153 0.504509433027\n" " 0.222221794449 -0.625184197271 2.351480103434 -0.531920972347 1.553520638132 0.097325359555 0.333724215761 0.222475088124\n" " 0.079830045424 -0.482184818124 -1.671373693342 -0.498668813865 -1.253104288811 0.009048926598 0.857995942810 0.894090639367\n" "#","\n" " Ga SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 7.066653970373 0.004038828810 0.000167446202 -0.311164169605\n" " 3.428369180000 -0.049926015210 0.003362568505 -0.386388805667\n" " 1.430064114378 0.270487560795 0.130532105798 -0.341437057173\n" " 0.571610928613 0.114461485481 -0.096032824634 -0.204608212390\n" " 0.232196966975 -0.765662388169 -0.807329497232 -0.056129936831\n" " 0.076561670688 -0.411890094700 -0.419386452377 -0.001205250841\n" "#","\n" " Ga DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 7.066653970373 0.004038828810 -0.031816598052 0.000167446202 0.029367472355 -0.311164169605 -0.152377671375 0.008402101637\n" " 3.428369180000 -0.049926015210 0.005769897361 0.003362568505 -0.090542574365 -0.386388805667 -0.200456714008 -0.016601774058\n" " 1.430064114378 0.270487560795 0.375790997895 0.130532105798 -0.084206693559 -0.341437057173 -0.304563164958 0.049257564549\n" " 0.571610928613 0.114461485481 0.388650732034 -0.096032824634 0.052258004145 -0.204608212390 0.349719373167 0.451920686398\n" " 0.232196966975 -0.765662388169 -1.779139618248 -0.807329497232 1.288732412987 -0.056129936831 0.455579311293 0.322063208269\n" " 0.076561670688 -0.411890094700 1.829743730735 -0.419386452377 -1.217068254825 -0.001205250841 0.817649971475 1.018553207480\n" "#","\n" " Ge SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 4 1 1\n" " 3.751626352194 -0.081330564365 0.009035073443\n" " 1.419172362656 0.601635148115 0.102040890998\n" " 0.322428319082 -0.974594550901 -0.762506665117\n" " 0.110739925211 -0.656437584837 -0.400605035566\n" "#","\n" " Ge DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 4 2 2 1\n" " 3.751626352194 -0.081330564365 0.131718200550 0.009035073443 -0.028177828258 -0.016817594331\n" " 1.419172362656 0.601635148115 -0.833571668129 0.102040890998 -0.184453915085 0.112319200324\n" " 0.322428319082 -0.974594550901 1.770142218328 -0.762506665117 1.459738649058 1.386642934635\n" " 0.110739925211 -0.656437584837 -1.762909730970 -0.400605035566 -1.461907495600 0.473933627779\n" "#","\n" " As SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 4 1 1\n" " 1.098624139209 0.855667038605 0.312802805211\n" " 0.889293303816 -0.687764546866 -0.362619654191\n" " 0.234710973732 -0.705420359459 -0.425177185346\n" " 0.097981856094 -0.209729326520 -0.182957845017\n" "#","\n" " As DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.098624139209 0.855667038605 -0.557301753073 0.312802805211 -0.238167652686 -0.102371891125\n" " 0.889293303816 -0.687764546866 -0.627315887673 -0.362619654191 0.216505388598 0.223787145639\n" " 0.234710973732 -0.705420359459 -2.016588485577 -0.425177185346 0.935056716086 0.988597507108\n" " 0.097981856094 -0.209729326520 1.439205779281 -0.182957845017 -1.485977479107 0.039413462750\n" "#","\n" " Se SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 4 1 1\n" " 1.465689267622 0.522315327760 0.302629346132\n" " 1.029752381010 -0.177617010578 -0.349360567622\n" " 0.303575471349 -1.057800048233 -0.653355185785\n" " 0.107173147417 -0.299101385035 -0.381186874482\n" "#","\n" " Se DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.465689267622 0.522315327760 0.109434486047 0.302629346132 0.397353185807 0.120897258750\n" " 1.029752381010 -0.177617010578 0.919860707697 -0.349360567622 -0.410169822544 -0.291516752716\n" " 0.303575471349 -1.057800048233 -1.719933785859 -0.653355185785 -0.626545135443 -1.069566209605\n" " 0.107173147417 -0.299101385035 2.073037006457 -0.381186874482 2.208055478040 -0.296658894209\n" "#","\n" " Br SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 4 1 1\n" " 1.737392738120 0.698849040883 0.408222406946\n" " 0.995743043074 -0.178219675950 -0.559269850657\n" " 0.337588776628 -1.701043348622 -1.220407791913\n" " 0.115887043391 -0.358131187327 -0.708522727592\n" "#","\n" " Br DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.737392738120 0.698849040883 -0.027829541950 0.408222406946 0.104199804352 0.735355883214\n" " 0.995743043074 -0.178219675950 0.121124053665 -0.559269850657 -0.028681992792 -2.354878683630\n" " 0.337588776628 -1.701043348622 -2.197717138458 -1.220407791913 -0.996384166266 -2.891234672063\n" " 0.115887043391 -0.358131187327 1.946344639416 -0.708522727592 3.770311426725 -0.592507107440\n" "#","\n" " Kr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 4 1 1\n" " 1.784435668906 0.810837662050 0.348552421052\n" " 1.005532891273 -0.533585820331 -0.573408630951\n" " 0.327795673641 -1.439836500217 -0.909538466141\n" " 0.108549688447 -0.206171398876 -0.408970770978\n" "#","\n" " Kr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.784435668906 0.810837662050 -0.329499714794 0.348552421052 -0.018676893124 -0.577769793404\n" " 1.005532891273 -0.533585820331 0.849588151788 -0.573408630951 -0.063596257231 -0.379378556605\n" " 0.327795673641 -1.439836500217 -2.926928041746 -0.909538466141 -0.786542637237 -1.203208979343\n" " 0.108549688447 -0.206171398876 1.961821687963 -0.408970770978 1.457080125376 1.674577778254\n" "#","\n" " Rb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 2 1\n" " 7.107230694150 -0.062218041672 -0.013507092266 0.035700265054\n" " 2.414406259100 0.488731908603 0.125115402960 -0.161483665734\n" " 1.134628425827 -0.101894960518 -0.042229797524 0.211536304024\n" " 0.483816136667 -0.827806256641 -0.296364033354 0.499666987934\n" " 0.198690371820 -0.304219423335 -0.278176269515 0.306717399916\n" " 0.078496630593 0.002468186208 0.316847793087 0.039955632038\n" " 0.029773227781 0.025109167182 0.829792452385 -0.000551065720\n" "#","\n" " Rb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 7 3 2 1\n" " 7.107230694150 -0.062218041672 -0.013507092266 0.027821303246 0.035700265054 -0.009299202459 -0.001936508600\n" " 2.414406259100 0.488731908603 0.125115402960 -0.230232762986 -0.161483665734 0.041686622213 -0.002780629610\n" " 1.134628425827 -0.101894960518 -0.042229797524 0.239146438168 0.211536304024 -0.062301116336 0.092739553255\n" " 0.483816136667 -0.827806256641 -0.296364033354 -0.001364253092 0.499666987934 -0.186160284116 0.347438745009\n" " 0.198690371820 -0.304219423335 -0.278176269515 1.281826773475 0.306717399916 -0.090677499009 0.636698242337\n" " 0.078496630593 0.002468186208 0.316847793087 -2.888698734643 0.039955632038 0.258184855427 0.573025473782\n" " 0.029773227781 0.025109167182 0.829792452385 1.751588992331 -0.000551065720 0.909374383359 0.565570253663\n" "#","\n" " Sr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 7.290111894735 0.069364270475 -0.016182746349 0.035659445929\n" " 2.536776771327 -0.571246927373 0.158928639982 -0.195822349727\n" " 1.283099546928 0.167836311459 -0.041157757852 0.260320252229\n" " 0.532449841650 0.904733330629 -0.431882417196 0.555386362294\n" " 0.211628059408 0.250907816117 -0.073959284415 0.267635587013\n" " 0.050841303698 0.007135721199 0.825600560103 0.001214128781\n" "#","\n" " Sr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 7.290111894735 0.069364270475 -0.016182746349 -0.139466774650 0.035659445929 0.013920724630 -0.000090724547\n" " 2.536776771327 -0.571246927373 0.158928639982 -0.692403611332 -0.195822349727 -0.076802870831 -0.010109417559\n" " 1.283099546928 0.167836311459 -0.041157757852 -0.230309165261 0.260320252229 0.101479121539 0.066689821534\n" " 0.532449841650 0.904733330629 -0.431882417196 -0.069075854659 0.555386362294 0.267329775450 0.181824639879\n" " 0.211628059408 0.250907816117 -0.073959284415 1.145292027845 0.267635587013 0.052802012061 0.278155352971\n" " 0.050841303698 0.007135721199 0.825600560103 -2.640301525895 0.001214128781 -0.501686484262 0.157444712589\n" "#","\n" " Y SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 7 2 1 1\n" " 7.169829557085 0.064756738089 -0.022627762846 -0.024276685117 -0.000498514326\n" " 2.700922470615 -0.597719860262 0.235885458901 0.187917721906 -0.031403568872\n" " 1.376251109084 0.082122642041 -0.087291364288 -0.245232860710 0.127573561162\n" " 0.656916983532 0.966304799106 -0.405979470239 -0.598857920831 0.336722884287\n" " 0.281951576337 0.370251411162 -0.369782037034 -0.347360898522 0.474465039649\n" " 0.114567346626 0.047095993893 0.381463146281 -0.027444250529 0.383269025496\n" " 0.041587097849 0.121766951290 0.813527659184 -0.000772518245 0.124574151507\n" "#","\n" " Y DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 7.169829557085 0.064756738089 -0.022627762846 0.003819575374 -0.024276685117 -0.007895618075 -0.000498514326 -0.004435490551 -0.001782791348\n" " 2.700922470615 -0.597719860262 0.235885458901 -0.198330198799 0.187917721906 0.069387220484 -0.031403568872 0.054881707361 0.012853512634\n" " 1.376251109084 0.082122642041 -0.087291364288 0.531158632032 -0.245232860710 -0.134631203363 0.127573561162 -0.129541942957 -0.087471625840\n" " 0.656916983532 0.966304799106 -0.405979470239 0.108726218382 -0.598857920831 -0.231880747338 0.336722884287 -0.597681869599 -0.650935776283\n" " 0.281951576337 0.370251411162 -0.369782037034 1.371830612307 -0.347360898522 -0.080179872806 0.474465039649 -0.136727173378 -0.584017959493\n" " 0.114567346626 0.047095993893 0.381463146281 -3.345342150310 -0.027444250529 0.520590734955 0.383269025496 0.038190788742 -0.696187518367\n" " 0.041587097849 0.121766951290 0.813527659184 2.147987485965 -0.000772518245 0.741032334112 0.124574151507 1.078804758995 0.524836449052\n" "#","\n" " Zr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 7 2 1 1\n" " 7.568385790028 -0.094978310907 -0.033616559232 -0.020865512366 -0.001689422502\n" " 2.940870125103 0.694261607918 0.288000788551 0.222352813741 -0.011935551626\n" " 1.478549725921 -0.214258448962 -0.141902662715 -0.319406707712 0.152103521468\n" " 0.699652747292 -0.923670545104 -0.452166355085 -0.588541345286 0.296191130217\n" " 0.314575404780 -0.327047026378 -0.381211768681 -0.309198403218 0.399124869129\n" " 0.129868596693 0.003239038466 0.526743157382 -0.019801636662 0.242072326904\n" " 0.046850569449 -0.007129719335 0.810803550660 -0.000524643311 0.048657150043\n" "#","\n" " Zr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 7.568385790028 -0.094978310907 -0.033616559232 -0.013349699986 -0.020865512366 -0.002290591691 -0.001689422502 -0.002354868577 0.003856737689\n" " 2.940870125103 0.694261607918 0.288000788551 -0.164712644101 0.222352813741 0.053781865205 -0.011935551626 0.026432470933 -0.013583377285\n" " 1.478549725921 -0.214258448962 -0.141902662715 0.533207302704 -0.319406707712 -0.122494830242 0.152103521468 -0.076453834071 -0.086468568432\n" " 0.699652747292 -0.923670545104 -0.452166355085 0.109420966738 -0.588541345286 -0.277888241330 0.296191130217 -0.273025800110 -0.563950845131\n" " 0.314575404780 -0.327047026378 -0.381211768681 1.392697829361 -0.309198403218 0.025966843597 0.399124869129 0.045119618315 -0.622062115242\n" " 0.129868596693 0.003239038466 0.526743157382 -3.337321484704 -0.019801636662 0.475807819736 0.242072326904 0.180401992175 -0.552753691412\n" " 0.046850569449 -0.007129719335 0.810803550660 2.074605849369 -0.000524643311 0.625967738574 0.048657150043 1.105393639621 0.165196094208\n" "#","\n" " Nb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 7 2 1 1\n" " 3.445688332127 6.967608357644 -3.377478792599 -0.840846380047 0.388363778921\n" " 3.361754070289 -7.592191163341 3.690016909917 0.956420493475 -0.389233499416\n" " 1.402769349742 0.489341601567 -0.310828636726 -0.276255708969 -0.232772054682\n" " 0.638107530614 0.749244219846 -0.462987145063 -0.340280885378 -0.367470032847\n" " 0.297916452528 0.168228854756 -0.275959272761 -0.120882245268 -0.373135144785\n" " 0.134531184887 -0.010188517089 0.576706104059 -0.004779969154 -0.185455779821\n" " 0.051687918628 0.006294814846 0.631490283017 -0.000211964161 -0.039160568093\n" "#","\n" " Nb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 3.445688332127 6.967608357644 -3.377478792599 8.753281549590 -0.840846380047 0.156868559129 0.388363778921 0.459373932984 0.464314945457\n" " 3.361754070289 -7.592191163341 3.690016909917 -8.926202800310 0.956420493475 -0.211987417412 -0.389233499416 -0.467868954158 -0.427447517961\n" " 1.402769349742 0.489341601567 -0.310828636726 0.633972204920 -0.276255708969 0.225373426671 -0.232772054682 -0.169379157593 -0.197717184453\n" " 0.638107530614 0.749244219846 -0.462987145063 -0.111601241388 -0.340280885378 0.183794395021 -0.367470032847 -0.323135603674 -0.588178917976\n" " 0.297916452528 0.168228854756 -0.275959272761 1.410604379810 -0.120882245268 -0.165885709655 -0.373135144785 0.023106426168 -0.476010923425\n" " 0.134531184887 -0.010188517089 0.576706104059 -3.231399119388 -0.004779969154 -0.336057891318 -0.185455779821 -0.086482885111 -0.466998469570\n" " 0.051687918628 0.006294814846 0.631490283017 2.118393728700 -0.000211964161 -0.786575100596 -0.039160568093 1.131690269915 0.648887813696\n" "#","\n" " Mo SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 7 2 1 1\n" " 2.540273246178 -0.578530819221 0.207479779241 0.307100812758 -0.149151531382\n" " 1.999996221023 0.255133124027 -0.231957971109 -0.375633370985 0.289650418561\n" " 0.894040376874 0.676100594670 0.285544120446 -0.244205356948 0.207391250228\n" " 0.439256605865 0.131763425580 0.062954195096 -0.177325998176 0.312615422763\n" " 0.189497802537 0.085911973535 -0.210930323620 -0.016882413378 0.200727667932\n" " 0.083802212693 -0.062285567387 -0.868201464922 -0.000916114554 0.047819428716\n" " 0.052948764137 0.016176877393 -0.574266536022 0.000883614589 0.013662121505\n" "#","\n" " Mo DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 2.540273246178 -0.578530819221 0.207479779241 -0.299914438061 0.307100812758 -0.056135943926 -0.149151531382 0.078318936957 0.090482429273\n" " 1.999996221023 0.255133124027 -0.231957971109 -0.417466028636 -0.375633370985 0.137590516968 0.289650418561 -0.193587305622 -0.158221499177\n" " 0.894040376874 0.676100594670 0.285544120446 0.515341081590 -0.244205356948 0.160869646404 0.207391250228 -0.376645017726 -0.294586192143\n" " 0.439256605865 0.131763425580 0.062954195096 -0.748853953260 -0.177325998176 -0.132932627695 0.312615422763 -0.186682023670 -0.705339054554\n" " 0.189497802537 0.085911973535 -0.210930323620 1.300969236640 -0.016882413378 -0.383867077982 0.200727667932 0.236167100944 -0.270988043507\n" " 0.083802212693 -0.062285567387 -0.868201464922 -3.373816977234 -0.000916114554 -0.526274675338 0.047819428716 0.096109040144 -0.475221485624\n" " 0.052948764137 0.016176877393 -0.574266536022 1.973814085745 0.000883614589 -0.535005148259 0.013662121505 1.079607069896 0.639098431599\n" "#","\n" " Tc SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 7 2 1 1\n" " 3.164224765901 -4.936025404648 2.690105911399 1.875473204955 -0.315743748171\n" " 3.111533459421 5.402033503677 -2.906113798449 -1.589412009269 0.248590535878\n" " 1.923601224823 -0.382432085374 0.205154484199 -0.484599011050 0.277986264842\n" " 0.887428259225 -0.325518324167 0.411180892172 -0.878565217193 0.337694430891\n" " 0.387592572799 -0.122553923184 0.110130628461 -0.345096002980 0.419921218350\n" " 0.151375638104 0.091448243559 -0.679068092339 -0.016891045364 0.202434518908\n" " 0.052897942898 0.094934643036 -0.799513230137 0.002744375423 0.022350450321\n" "#","\n" " Tc DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 3.164224765901 -4.936025404648 2.690105911399 8.299735456543 1.875473204955 -0.389124278660 -0.315743748171 0.453605787389 0.417278606867\n" " 3.111533459421 5.402033503677 -2.906113798449 -8.422380593905 -1.589412009269 0.310379586569 0.248590535878 -0.430318362917 -0.352874423698\n" " 1.923601224823 -0.382432085374 0.205154484199 0.605501825023 -0.484599011050 0.219977647323 0.277986264842 -0.192462070398 -0.135620561050\n" " 0.887428259225 -0.325518324167 0.411180892172 -0.244963673523 -0.878565217193 0.144726968569 0.337694430891 -0.252253826854 -0.492425087615\n" " 0.387592572799 -0.122553923184 0.110130628461 1.309565408916 -0.345096002980 -0.226102503229 0.419921218350 -0.096741785658 -0.446932223217\n" " 0.151375638104 0.091448243559 -0.679068092339 -3.154717953969 -0.016891045364 -0.394462618190 0.202434518908 -0.085506487189 -0.445111357421\n" " 0.052897942898 0.094934643036 -0.799513230137 2.197244299784 0.002744375423 -0.648372090195 0.022350450321 1.149052887456 0.721221763063\n" "#","\n" " Ru SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 7 2 1 1\n" " 2.787485846721 0.419245156353 0.847305490262 -2.358144554736 0.788526811934\n" " 2.671513807197 0.402523023175 -1.207617992281 2.345239865410 -0.863711338604\n" " 1.595751289168 -0.808149719838 0.513111660606 0.317793572742 -0.053253108229\n" " 0.821527061530 -0.477224887406 0.129164670091 0.512263090829 -0.202587225418\n" " 0.376346360068 -0.163265585552 0.268674181220 0.188482905753 -0.146122499622\n" " 0.192696937194 -0.088262869679 -0.408874960105 0.000829620006 -0.095330219372\n" " 0.068097557464 -0.260996120571 -0.797339816834 0.001387096163 -0.024995451964\n" "#","\n" " Ru DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 2.787485846721 0.419245156353 0.847305490262 6.921824287372 -2.358144554736 -0.707900609304 0.788526811934 0.431581913720 0.626906168798\n" " 2.671513807197 0.402523023175 -1.207617992281 -7.215911406936 2.345239865410 0.713232939519 -0.863711338604 -0.493940272079 -0.640462793210\n" " 1.595751289168 -0.808149719838 0.513111660606 0.791734614725 0.317793572742 0.156002828255 -0.053253108229 -0.106350839479 -0.104374234384\n" " 0.821527061530 -0.477224887406 0.129164670091 -0.269179658833 0.512263090829 0.255718656921 -0.202587225418 -0.431181078906 -0.721109469116\n" " 0.376346360068 -0.163265585552 0.268674181220 1.108319334214 0.188482905753 -0.505228683203 -0.146122499622 0.055386787557 -0.474329276924\n" " 0.192696937194 -0.088262869679 -0.408874960105 -3.154973580527 0.000829620006 -0.444948207050 -0.095330219372 0.157949246530 -0.620019133396\n" " 0.068097557464 -0.260996120571 -0.797339816834 1.934939194182 0.001387096163 -0.452796474664 -0.024995451964 1.037559058652 0.466016266685\n" "#","\n" " Rh SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.157817444361 0.760084070950 0.239207051701 -0.336193318541 -0.176446839307\n" " 2.683291075925 -0.255650224037 -0.091067207483 0.373953992584 0.261743358411\n" " 1.140786095845 -1.025626679377 -0.520689753906 0.300684698668 0.174717739794\n" " 0.492081007160 -0.234415477939 -0.274976137245 0.141457244144 0.188746290944\n" " 0.192543904978 0.046321838032 0.534686741279 0.007751787318 0.112894420897\n" " 0.066486620394 0.135748106274 0.896548625743 0.000117823467 0.021703317232\n" "#","\n" " Rh DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.157817444361 0.760084070950 0.239207051701 -0.176908781955 -0.336193318541 -0.088125446787 -0.176446839307 -0.026270559744 0.115615533976\n" " 2.683291075925 -0.255650224037 -0.091067207483 0.468944646941 0.373953992584 0.061257175816 0.261743358411 -0.026406732314 -0.111111060683\n" " 1.140786095845 -1.025626679377 -0.520689753906 -0.120831837016 0.300684698668 -0.192303757667 0.174717739794 -0.254749961865 -0.622696187547\n" " 0.492081007160 -0.234415477939 -0.274976137245 1.313841940318 0.141457244144 0.290786768179 0.188746290944 0.046758963178 -0.157786278903\n" " 0.192543904978 0.046321838032 0.534686741279 -3.287648327719 0.007751787318 0.580565362723 0.112894420897 0.048917987662 -0.581950444165\n" " 0.066486620394 0.135748106274 0.896548625743 1.948301386804 0.000117823467 0.790444403671 0.021703317232 0.972191217603 0.993182295696\n" "#","\n" " Rh SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.902721449032 0.016652865171 -0.008699428728 -0.112417659954\n" " 1.999830271997 -0.133395648426 0.046572987907 0.348017742874\n" " 0.879887627395 0.373099930807 -0.153463590375 0.381775351795\n" " 0.363794442257 0.298777744612 -0.052550610965 0.335875585916\n" " 0.140096726529 -0.924610879301 0.949493319446 0.146687236468\n" " 0.042562039477 -0.455102584336 0.423881871378 0.013082339937\n" "#","\n" " Rh SZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 2 1 2\n" " 3.902721449032 0.016652865171 -0.068138878878 -0.008699428728 -0.112417659954 -0.059777116284\n" " 1.999830271997 -0.133395648426 -0.004871048934 0.046572987907 0.348017742874 0.202056639971\n" " 0.879887627395 0.373099930807 0.649713932179 -0.153463590375 0.381775351795 0.110186767731\n" " 0.363794442257 0.298777744612 -0.021734587290 -0.052550610965 0.335875585916 0.064547743479\n" " 0.140096726529 -0.924610879301 -1.860437433134 0.949493319446 0.146687236468 -0.989654088355\n" " 0.042562039477 -0.455102584336 1.740659313641 0.423881871378 0.013082339937 -0.289820583737\n" "#","\n" " Rh DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.902721449032 0.016652865171 -0.068138878878 -0.008699428728 -0.059391469214 -0.112417659954 -0.059777116284 -0.003558664914\n" " 1.999830271997 -0.133395648426 -0.004871048934 0.046572987907 0.041960437254 0.348017742874 0.202056639971 -0.044875919808\n" " 0.879887627395 0.373099930807 0.649713932179 -0.153463590375 0.518188755943 0.381775351795 0.110186767731 0.283349273890\n" " 0.363794442257 0.298777744612 -0.021734587290 -0.052550610965 -0.216591015187 0.335875585916 0.064547743479 1.043919000870\n" " 0.140096726529 -0.924610879301 -1.860437433134 0.949493319446 -0.898213733147 0.146687236468 -0.989654088355 -0.791074751670\n" " 0.042562039477 -0.455102584336 1.740659313641 0.423881871378 1.173029461392 0.013082339937 -0.289820583737 -0.082082714309\n" "#","\n" " Pd SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.408675573589 -0.132466784026 -0.567545309589 -0.237012042169\n" " 3.102531722049 -0.437179496952 0.553597861423 0.281832849168\n" " 1.644492988513 0.691818466230 0.309106812808 0.110086701020\n" " 0.791839035568 0.350166504373 0.314239136372 0.167791703969\n" " 0.316235520337 0.074477347669 0.070008169012 0.139346360820\n" " 0.109243742847 -0.009869037755 -0.003111197582 0.062460911300\n" "#","\n" " Pd DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.408675573589 -0.132466784026 0.029290454237 -0.567545309589 0.092784274333 -0.237012042169 0.095368996052 -0.073961706459\n" " 3.102531722049 -0.437179496952 0.192782667373 0.553597861423 -0.071388535306 0.281832849168 -0.080649769787 0.103257171864\n" " 1.644492988513 0.691818466230 -0.427625425484 0.309106812808 -0.179050519933 0.110086701020 -0.295200859905 -0.351204999462\n" " 0.791839035568 0.350166504373 -0.357653431542 0.314239136372 -0.049934153069 0.167791703969 0.018285464999 -0.414552037766\n" " 0.316235520337 0.074477347669 0.052946309434 0.070008169012 0.231812779555 0.139346360820 -0.027457577038 -0.637088708585\n" " 0.109243742847 -0.009869037755 1.328390548434 -0.003111197582 0.958384247940 0.062460911300 1.416457521209 1.171833433651\n" "#","\n" " Ag SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.586709178255 0.043754600978 0.022644943791 -0.228119986020\n" " 1.295159890890 -0.065091062805 -0.041727270135 -0.411112871153\n" " 0.553039826122 -0.405167335465 -0.158228872130 -0.391768462286\n" " 0.211183058137 0.497578418798 0.484453657192 -0.227577654035\n" " 0.062847168062 0.619659047740 0.747373652696 -0.034845530428\n" "#","\n" " Ag DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.586709178255 0.043754600978 0.016002004018 0.022644943791 0.005366630333 -0.228119986020 -0.065708005966 0.049544247949\n" " 1.295159890890 -0.065091062805 -0.036550568555 -0.041727270135 0.118122315157 -0.411112871153 -0.164499674965 -0.230239586867\n" " 0.553039826122 -0.405167335465 1.349533052863 -0.158228872130 0.689957680364 -0.391768462286 -0.083405899269 -0.501645626428\n" " 0.211183058137 0.497578418798 -2.535842013811 0.484453657192 -1.573396135858 -0.227577654035 -0.038684987758 -0.563865046243\n" " 0.062847168062 0.619659047740 1.655664881614 0.747373652696 1.108931560435 -0.034845530428 1.073281933345 0.515376673117\n" "#","\n" " Cd SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.617301292227 0.056942862843 0.032277317911 -0.270406154064\n" " 1.315617684053 -0.111910427538 -0.096634842893 -0.407839310946\n" " 0.573375899853 -0.420173785813 -0.083107933622 -0.363233448773\n" " 0.222222213763 0.564376116618 0.419549254990 -0.168907403589\n" " 0.076307136525 0.789967059806 0.795089873672 -0.013172843723\n" "#","\n" " Cd DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.617301292227 0.056942862843 0.085229465042 0.032277317911 0.051510843904 -0.270406154064 -0.064920306950 -0.038770557595\n" " 1.315617684053 -0.111910427538 -0.202708060768 -0.096634842893 -0.059783928261 -0.407839310946 -0.152553100915 -0.110107626346\n" " 0.573375899853 -0.420173785813 1.542506765787 -0.083107933622 0.615455610766 -0.363233448773 0.032121836723 -0.034014284171\n" " 0.222222213763 0.564376116618 -2.827046600082 0.419549254990 -1.767302700397 -0.168907403589 -0.117391708980 -0.107254575233\n" " 0.076307136525 0.789967059806 1.744522478935 0.795089873672 1.158998093237 -0.013172843723 1.045519107194 1.059683456620\n" "#","\n" " In SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.101675464995 -0.014756989563 -0.002337235001 0.245121261683\n" " 1.829866249849 -0.064345448008 0.031433449222 0.432609058860\n" " 0.898324196118 0.435246205245 -0.178879364380 0.486649088749\n" " 0.389454004688 -0.080147974732 0.140416923228 0.288251501897\n" " 0.162701041351 -0.728191656411 0.548122424076 0.057468890352\n" " 0.059412871673 -0.313235936982 0.384462238049 -0.000258770565\n" "#","\n" " In DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.101675464995 -0.014756989563 -0.110029580336 -0.002337235001 0.052839464904 0.245121261683 -0.012257945606 0.018888332958\n" " 1.829866249849 -0.064345448008 0.153222489077 0.031433449222 -0.110752586447 0.432609058860 -0.110028720800 -0.034470276859\n" " 0.898324196118 0.435246205245 0.391315648506 -0.178879364380 -0.100516978998 0.486649088749 -0.199975755292 0.113987435924\n" " 0.389454004688 -0.080147974732 0.337603965479 0.140416923228 0.023776328126 0.288251501897 0.335339132093 0.644348565644\n" " 0.162701041351 -0.728191656411 -1.893798269373 0.548122424076 1.285364410462 0.057468890352 0.399314422381 0.277069768884\n" " 0.059412871673 -0.313235936982 1.933683990690 0.384462238049 -1.445573560596 -0.000258770565 0.813978718300 0.799646050773\n" "#","\n" " Sn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 0.666669575074 0.689214482698 0.249601611539\n" " 0.486831392324 -0.512955759145 -0.282734426066\n" " 0.172775679838 -0.598032924010 -0.235164953470\n" " 0.065536149861 -0.215612744096 -0.261775353331\n" " 0.063643963946 0.056968014830 0.117722874377\n" "#","\n" " Sn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.666669575074 0.689214482698 0.597390157534 0.249601611539 0.315252873428 0.457406998777\n" " 0.486831392324 -0.512955759145 -0.578949723335 -0.282734426066 -0.456284996504 -0.671314814330\n" " 0.172775679838 -0.598032924010 -0.232486513252 -0.235164953470 0.160480606525 -0.579588972796\n" " 0.065536149861 -0.215612744096 -1.308667699314 -0.261775353331 -1.088783079841 -1.650667611807\n" " 0.063643963946 0.056968014830 2.152315008945 0.117722874377 1.400518346191 0.726312420432\n" "#","\n" " Sb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 0.757214368696 0.691593689520 0.756051462053\n" " 0.576116222147 -0.351217469046 -0.792348307348\n" " 0.244349272369 -0.615740163850 -0.378296806004\n" " 0.160329448814 -0.264402217378 -0.611128127466\n" " 0.073465983327 -0.171357973436 -0.255229944153\n" "#","\n" " Sb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.757214368696 0.691593689520 1.088920140322 0.756051462053 0.641112817519 0.801626688859\n" " 0.576116222147 -0.351217469046 -0.822676611872 -0.792348307348 -0.692298068143 -0.889703632274\n" " 0.244349272369 -0.615740163850 0.211516912099 -0.378296806004 -0.178293615513 -1.240429938237\n" " 0.160329448814 -0.264402217378 -1.715750005616 -0.611128127466 -0.751513283235 -2.058418758569\n" " 0.073465983327 -0.171357973436 2.700437428872 -0.255229944153 1.854777651762 0.223525953909\n" "#","\n" " Te SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 0.871170553457 -0.768209530501 -0.201075823729\n" " 0.666552751461 0.368144626623 0.204460083751\n" " 0.260565380434 0.833378133558 0.154271149685\n" " 0.171876990300 0.191335229653 0.113448742480\n" " 0.082233548720 0.215694921905 0.106354644586\n" "#","\n" " Te DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.871170553457 -0.768209530501 0.791359979104 -0.201075823729 0.531876807227 0.753248997934\n" " 0.666552751461 0.368144626623 -0.650859183208 0.204460083751 -0.682761765123 -0.946881734404\n" " 0.260565380434 0.833378133558 0.702283405156 0.154271149685 0.282705036438 -0.783009060844\n" " 0.171876990300 0.191335229653 -1.929360042093 0.113448742480 -0.665024191612 -1.602503279568\n" " 0.082233548720 0.215694921905 2.377910783672 0.106354644586 1.691098378374 0.055752014401\n" "#","\n" " I SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 0.966172693776 -0.472463189351 -0.431253473002\n" " 0.828885570527 -0.046174838614 0.405448133098\n" " 0.367159310806 0.674866028669 0.154408288042\n" " 0.201369106832 0.441846190432 0.307131088797\n" " 0.083015071126 0.147700751496 0.151452356751\n" "#","\n" " I DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.966172693776 -0.472463189351 1.555822203873 -0.431253473002 0.437499136144 0.790909981479\n" " 0.828885570527 -0.046174838614 -0.405245398304 0.405448133098 -0.360836974979 -0.706739130323\n" " 0.367159310806 0.674866028669 0.837346281042 0.154408288042 -0.426955819328 -1.146102256372\n" " 0.201369106832 0.441846190432 -2.170714561688 0.307131088797 -0.142879089720 -1.473453298743\n" " 0.083015071126 0.147700751496 2.099200395478 0.151452356751 1.946428231727 -0.517749701272\n" "#","\n" " Xe SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 1.060135338393 0.595086879307 -0.455562867881\n" " 0.666666004946 -0.333303102706 0.584858919323\n" " 0.277808854324 -0.853453515069 0.556607088551\n" " 0.171463992710 0.008584975685 0.284690856924\n" " 0.096899106515 -0.148160183031 0.213921134179\n" "#","\n" " Xe DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.060135338393 0.595086879307 1.159498326834 -0.455562867881 0.341641892911 0.461999932788\n" " 0.666666004946 -0.333303102706 -0.700514321869 0.584858919323 -0.637621905684 -0.861718349639\n" " 0.277808854324 -0.853453515069 0.843332917012 0.556607088551 0.421389646121 -0.690146245180\n" " 0.171463992710 0.008584975685 -2.438781702578 0.284690856924 -1.036777647654 -2.060830843444\n" " 0.096899106515 -0.148160183031 2.027210394018 0.213921134179 2.018039151988 0.570372103567\n" "#","\n" " Cs SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 6 2 1\n" " 1.000865707027 0.280322352634 0.098179355219 -0.360207388692\n" " 0.913482115012 0.358344637273 -0.098255007626 -0.016242892143\n" " 0.666653730505 -0.489376812003 0.118067108510 0.500190150119\n" " 0.332485858625 -0.512310150761 -0.480608369395 0.336498234976\n" " 0.149836705312 -0.141743262814 0.078136295233 0.344475837226\n" " 0.026691284164 0.280660075501 1.173263741421 0.011885241412\n" "#","\n" " Cs DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 3 2 1\n" " 1.000865707027 0.280322352634 0.098179355219 0.031141586311 -0.360207388692 0.002335867187 0.147697150754\n" " 0.913482115012 0.358344637273 -0.098255007626 0.330103917383 -0.016242892143 0.084765416923 0.071945154769\n" " 0.666653730505 -0.489376812003 0.118067108510 -0.659442112080 0.500190150119 -0.132236014043 -0.240447290500\n" " 0.332485858625 -0.512310150761 -0.480608369395 3.043138449037 0.336498234976 -0.036101912675 -0.535530906149\n" " 0.149836705312 -0.141743262814 0.078136295233 -3.444995658743 0.344475837226 -0.076534707873 -0.669534557468\n" " 0.026691284164 0.280660075501 1.173263741421 1.178266960491 0.011885241412 1.106818006414 0.388389576072\n" "#","\n" " Ba SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 1.099107387393 -0.265977603953 0.133167313532 -0.076120521522\n" " 1.042415611430 -0.548867124949 0.303553076384 0.581707053986\n" " 0.923815583300 0.534778251294 -0.187596947384 -0.513377720928\n" " 0.409515187180 0.587584269233 -0.829784858376 -0.199996660495\n" " 0.166000524554 0.112796348364 0.080177822791 -0.129413972483\n" " 0.038868137908 -0.097599163432 1.388751874990 0.001685949311\n" "#","\n" " Ba DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 1.099107387393 -0.265977603953 0.133167313532 0.290876128104 -0.076120521522 0.156054210447 0.457091203328\n" " 1.042415611430 -0.548867124949 0.303553076384 -0.457720153751 0.581707053986 0.034898462239 -0.051884397940\n" " 0.923815583300 0.534778251294 -0.187596947384 0.955681723101 -0.513377720928 -0.112603657198 -0.325084641003\n" " 0.409515187180 0.587584269233 -0.829784858376 -3.839746465310 -0.199996660495 -0.398760799348 -1.103831466587\n" " 0.166000524554 0.112796348364 0.080177822791 3.559104747841 -0.129413972483 0.013035859628 -1.307997155338\n" " 0.038868137908 -0.097599163432 1.388751874990 -1.406284723707 0.001685949311 0.806788017038 -0.503750948349\n" "#","\n" " Hf SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 2 1 1\n" " 2.671196497548 0.788939427855 0.166407997203 -0.301974408389 -0.047796823905\n" " 2.597200237263 -0.135944993309 0.121000538909 0.293385766135 0.040716807355\n" " 1.091215248046 -0.911502384031 -0.450097538431 0.044171452367 0.281226003531\n" " 0.482780902120 -0.403765732131 -0.527116158052 0.050912843752 0.563159769901\n" " 0.184203719686 -0.116982787286 0.367518491637 0.006790589259 0.537885417612\n" " 0.060257634881 -0.118019349325 0.917540530320 -0.000081217891 0.138650274135\n" "#","\n" " Hf DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 2.671196497548 0.788939427855 0.166407997203 -0.808044747643 -0.301974408389 0.200618001886 -0.047796823905 -0.576358120326 0.136965103461\n" " 2.597200237263 -0.135944993309 0.121000538909 0.502710504170 0.293385766135 -0.131814094303 0.040716807355 0.121047786291 -0.101127257056\n" " 1.091215248046 -0.911502384031 -0.450097538431 -0.571536407023 0.044171452367 -0.119671510085 0.281226003531 -0.260083157654 -0.239844496668\n" " 0.482780902120 -0.403765732131 -0.527116158052 1.567869205746 0.050912843752 -0.209054741982 0.563159769901 -0.061407406614 -0.448266650992\n" " 0.184203719686 -0.116982787286 0.367518491637 -3.196670125867 0.006790589259 -0.050569947887 0.537885417612 -0.642967474054 -0.402343230211\n" " 0.060257634881 -0.118019349325 0.917540530320 1.895484387467 -0.000081217891 -0.947169815010 0.138650274135 0.976981432228 1.144416860469\n" "#","\n" " Ta SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 2 1 1\n" " 2.946055777701 0.481243902001 -0.039175358113 0.388448534264 -0.093115240785\n" " 2.777081321651 -0.000792758352 0.308251777475 -0.366342974440 0.111690390706\n" " 1.000199049661 -0.863712437729 -0.568363162228 -0.156083711841 0.225370492392\n" " 0.459026245077 -0.356339626223 -0.406417265286 -0.108217872947 0.293416264804\n" " 0.201289293145 -0.023090355735 0.248901497428 -0.015667426694 0.298377389246\n" " 0.065633603795 -0.015350833125 0.839900958846 0.000163546036 0.101787930127\n" "#","\n" " Ta DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 2.946055777701 0.481243902001 -0.039175358113 -0.219388739489 0.388448534264 -0.107938517042 -0.093115240785 -0.050799537716 0.071927166904\n" " 2.777081321651 -0.000792758352 0.308251777475 0.403285867163 -0.366342974440 0.047342767090 0.111690390706 0.051196996245 -0.015240206083\n" " 1.000199049661 -0.863712437729 -0.568363162228 -0.077743160108 -0.156083711841 -0.041740097950 0.225370492392 -0.295019586907 -0.470524112950\n" " 0.459026245077 -0.356339626223 -0.406417265286 1.717095624131 -0.108217872947 0.095987055932 0.293416264804 -0.181398283746 -0.645020041639\n" " 0.201289293145 -0.023090355735 0.248901497428 -3.203010923833 -0.015667426694 0.541275844761 0.298377389246 -0.083413162524 -0.819326850350\n" " 0.065633603795 -0.015350833125 0.839900958846 2.207786277506 0.000163546036 1.013357766701 0.101787930127 1.239644127245 0.794184603929\n" "#","\n" " W SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.103253876757 0.441154908462 -0.046848871737 0.516608286752 -0.104347730230\n" " 2.893835485057 0.301691972314 0.288483139662 -0.467840628709 0.135920880880\n" " 1.106150599362 -1.218290751007 -0.497581763775 -0.270577331119 0.396440765199\n" " 0.501100356736 -0.518231686854 -0.399441949193 -0.201524408230 0.551980290722\n" " 0.214446586103 -0.084224251837 0.243845988221 -0.022741809925 0.520355492616\n" " 0.074662878487 -0.194908755488 0.767604001481 0.002782169859 0.166409595366\n" "#","\n" " W DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.103253876757 0.441154908462 -0.046848871737 0.061298236069 0.516608286752 -0.857438192378 -0.104347730230 0.147146022027 0.063493654940\n" " 2.893835485057 0.301691972314 0.288483139662 0.240334881954 -0.467840628709 0.847145939975 0.135920880880 -0.154506508676 -0.017539591740\n" " 1.106150599362 -1.218290751007 -0.497581763775 -0.484396153573 -0.270577331119 -0.102821415305 0.396440765199 -0.271607294299 -0.299829989865\n" " 0.501100356736 -0.518231686854 -0.399441949193 1.821350211035 -0.201524408230 0.202413605224 0.551980290722 -0.086061740572 -0.841712144112\n" " 0.214446586103 -0.084224251837 0.243845988221 -3.376374627548 -0.022741809925 0.726346128053 0.520355492616 -0.074473115136 -0.801669560536\n" " 0.074662878487 -0.194908755488 0.767604001481 1.871608065172 0.002782169859 1.071006452855 0.166409595366 1.370657399699 0.359000011573\n" "#","\n" " Re SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.240620484285 0.518163100285 -0.250238063014 0.468480577212 -0.072782318249\n" " 2.835126642764 0.195266488444 0.421668475444 -0.390221082301 0.122612230842\n" " 1.164528911859 -1.218515127381 -0.468452769005 -0.460013931050 0.480667297031\n" " 0.530722413547 -0.526678086213 -0.480290161831 -0.325605406180 0.649752314300\n" " 0.234483312957 0.013465891784 0.546638137882 -0.033295571228 0.547928673428\n" " 0.080543361521 0.073473765653 1.175883886226 0.000112993288 0.124811170239\n" "#","\n" " Re DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.240620484285 0.518163100285 -0.250238063014 -0.143105506392 0.468480577212 -0.321600051025 -0.072782318249 0.025724531725 -0.094952415125\n" " 2.835126642764 0.195266488444 0.421668475444 0.282261176246 -0.390221082301 0.399779900733 0.122612230842 -0.054892892051 0.167119769419\n" " 1.164528911859 -1.218515127381 -0.468452769005 -0.091681345615 -0.460013931050 -0.473028481025 0.480667297031 -0.324411259630 -0.392227058286\n" " 0.530722413547 -0.526678086213 -0.480290161831 1.803552484337 -0.325605406180 0.144355698544 0.649752314300 -0.308280195070 -0.743838252325\n" " 0.234483312957 0.013465891784 0.546638137882 -3.327790605170 -0.033295571228 0.634911741065 0.547928673428 -0.127571404930 -1.130445599596\n" " 0.080543361521 0.073473765653 1.175883886226 2.036392104934 0.000112993288 0.654149241066 0.124811170239 1.436351247342 0.187517650202\n" "#","\n" " Os SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.254044521240 0.750520917538 -0.143104881416 0.300026803534 0.074118403382\n" " 2.913080457815 -0.151830818511 0.445036489078 -0.259358262119 -0.115497320573\n" " 1.267677044450 -0.946576386912 -0.597290651826 -0.221193553941 -0.384061295904\n" " 0.604328817602 -0.387028536076 -0.626533321263 -0.169922484236 -0.478648993701\n" " 0.281958732679 -0.114632827845 0.617675737134 -0.022924623249 -0.460410219053\n" " 0.105080883429 -0.043141212439 0.420830468078 0.003128164174 -0.078890551925\n" "#","\n" " Os DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.254044521240 0.750520917538 -0.143104881416 -0.535872399061 0.300026803534 -0.211083191310 0.074118403382 0.126612739775 0.055180357207\n" " 2.913080457815 -0.151830818511 0.445036489078 0.515111350010 -0.259358262119 0.229325744297 -0.115497320573 -0.133462796701 -0.050797865115\n" " 1.267677044450 -0.946576386912 -0.597290651826 -0.260044026215 -0.221193553941 -0.306853849304 -0.384061295904 -0.172895146469 -0.094606319061\n" " 0.604328817602 -0.387028536076 -0.626533321263 2.036801058213 -0.169922484236 -0.097257714947 -0.478648993701 -0.020295601352 -0.619031243983\n" " 0.281958732679 -0.114632827845 0.617675737134 -3.120177167686 -0.022924623249 0.777630448466 -0.460410219053 0.083516044344 -0.782263365247\n" " 0.105080883429 -0.043141212439 0.420830468078 2.188492676789 0.003128164174 0.996792107810 -0.078890551925 1.136520641989 -0.218817489272\n" "#","\n" " Ir SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.382588893137 0.763880845384 0.045942912052 0.377410965587 -0.045848645796\n" " 2.784159868873 -0.292040459450 0.216107018572 -0.332679361082 0.111589415592\n" " 1.210222778222 -0.909572071077 -0.662794901842 -0.436015494968 0.421660006206\n" " 0.538964109721 -0.253085528911 -0.351696141574 -0.249715223969 0.494349511683\n" " 0.221744781815 -0.072390522439 0.495615757119 -0.017455807910 0.370178722395\n" " 0.076331555777 -0.086622720340 0.741983451061 -0.000390256599 0.086694983507\n" "#","\n" " Ir DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.382588893137 0.763880845384 0.045942912052 -0.263001102796 0.377410965587 -0.244073478822 -0.045848645796 0.080634315236 0.043335746927\n" " 2.784159868873 -0.292040459450 0.216107018572 0.479096801070 -0.332679361082 0.284264073291 0.111589415592 -0.130581842872 -0.027515178683\n" " 1.210222778222 -0.909572071077 -0.662794901842 -0.247236645375 -0.436015494968 -0.355790158310 0.421660006206 -0.303249401129 -0.249112788977\n" " 0.538964109721 -0.253085528911 -0.351696141574 1.693017503277 -0.249715223969 0.296278894300 0.494349511683 -0.146179963439 -0.712777874450\n" " 0.221744781815 -0.072390522439 0.495615757119 -3.248000084180 -0.017455807910 0.597905270423 0.370178722395 -0.212963343957 -0.608411042049\n" " 0.076331555777 -0.086622720340 0.741983451061 1.914284024079 -0.000390256599 0.721347075950 0.086694983507 1.131902611500 0.702894953816\n" "#","\n" " Pt SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.630667770866 -0.159789658749 -0.051717884453 0.538256464339 -0.235370873672\n" " 3.114659085953 0.706153230701 0.409305333723 -0.272066595039 0.216340904150\n" " 1.999980602577 -0.571771619750 -0.410633416904 -0.529494089441 0.129334517594\n" " 0.885339761910 -0.081706194543 -0.389005427246 -0.778436218941 0.364806321954\n" " 0.330796251617 -0.114509254013 0.079357268588 -0.160188783181 0.322200075207\n" " 0.105770091411 -0.422769859471 0.768211167014 0.009487463222 0.101113260398\n" "#","\n" " Pt DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.630667770866 -0.159789658749 -0.051717884453 0.306450339788 0.538256464339 -0.065391881766 -0.235370873672 0.116835554957 0.047374313928\n" " 3.114659085953 0.706153230701 0.409305333723 -0.004265278861 -0.272066595039 0.095535920231 0.216340904150 -0.069230936472 -0.086321928611\n" " 1.999980602577 -0.571771619750 -0.410633416904 -0.325808096224 -0.529494089441 -0.142896827794 0.129334517594 -0.143174497742 -0.045559578405\n" " 0.885339761910 -0.081706194543 -0.389005427246 2.249070845144 -0.778436218941 -0.282985948216 0.364806321954 -0.296713078924 -0.269438595683\n" " 0.330796251617 -0.114509254013 0.079357268588 -3.545365684090 -0.160188783181 0.355152674354 0.322200075207 -0.091262909891 -0.826716259834\n" " 0.105770091411 -0.422769859471 0.768211167014 1.739828578507 0.009487463222 1.072406293162 0.101113260398 0.921513114926 0.798799196421\n" "#","\n" " Au SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.950008433436 0.043352289298 0.027243676590 -0.013694544955\n" " 1.563056721867 -0.007387713167 0.010297865642 0.393434199831\n" " 0.666663784909 -0.527617143816 -0.144512389068 0.499419616649\n" " 0.251083343925 0.504357857018 0.133984006194 0.342848487787\n" " 0.081714167287 0.754614789542 0.955899672482 0.072643323717\n" "#","\n" " Au DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.950008433436 0.043352289298 0.131563039441 0.027243676590 0.028420586704 -0.013694544955 -0.004579045037 -0.004506137994\n" " 1.563056721867 -0.007387713167 -0.273187489232 0.010297865642 -0.293415713813 0.393434199831 -0.180469448036 -0.160912550000\n" " 0.666663784909 -0.527617143816 1.676640340285 -0.144512389068 0.816838276799 0.499419616649 -0.108498062902 -0.120663084497\n" " 0.251083343925 0.504357857018 -2.954078498545 0.133984006194 -1.870657920681 0.342848487787 -0.166963798876 -0.308972159083\n" " 0.081714167287 0.754614789542 1.757201273778 0.955899672482 1.065823745725 0.072643323717 1.125505465534 1.113838074084\n" "#","\n" " Hg SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.031517109734 -0.000773276442 -0.035104188311 -0.051519431610\n" " 1.999949750084 -0.127545432316 0.112459425109 0.245745995267\n" " 0.968505371291 0.467348942725 -0.270433349168 0.344642941759\n" " 0.443215909283 0.041435964338 0.012885629971 0.274191104401\n" " 0.197907885691 -0.613050351354 0.562923305773 0.133463525187\n" " 0.078429867482 -0.478543703910 0.626349238816 0.016313913539\n" "#","\n" " Hg DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.031517109734 -0.000773276442 0.142001377433 -0.035104188311 -0.090931506623 -0.051519431610 0.008323885654 0.001599032324\n" " 1.999949750084 -0.127545432316 -0.280482979589 0.112459425109 0.162444892253 0.245745995267 -0.053441689967 0.043884187965\n" " 0.968505371291 0.467348942725 0.098625459472 -0.270433349168 0.029548333852 0.344642941759 -0.165877240510 -0.177253996973\n" " 0.443215909283 0.041435964338 -1.223462696050 0.012885629971 0.581078127814 0.274191104401 0.080323576326 -0.478266521156\n" " 0.197907885691 -0.613050351354 3.053372335969 0.562923305773 -2.004214126133 0.133463525187 -0.144762593434 -0.613795411840\n" " 0.078429867482 -0.478543703910 -2.173525587081 0.626349238816 1.450865733492 0.016313913539 1.183407428870 0.788269658688\n" "#","\n" " Tl SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.381004006201 -0.012728024519 -0.016321000960 -0.053146025142\n" " 1.995904628767 -0.125438487741 0.089582033082 0.335647454889\n" " 0.933877613856 0.654386378507 -0.217643347249 0.449765059425\n" " 0.399454518437 -0.261927153680 0.120847730197 0.311198161018\n" " 0.159704350468 -0.832380709805 0.521905432003 0.079298892465\n" " 0.061648317122 -0.296535560045 0.504618443314 0.000172821470\n" "#","\n" " Tl DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.381004006201 -0.012728024519 -0.061982942976 -0.016321000960 0.062772243005 -0.053146025142 0.033620187298 -0.003552704832\n" " 1.995904628767 -0.125438487741 0.232903517659 0.089582033082 -0.085940512856 0.335647454889 -0.143867909630 -0.007253615821\n" " 0.933877613856 0.654386378507 0.293870645694 -0.217643347249 -0.043458296138 0.449765059425 -0.230549240854 0.070845906277\n" " 0.399454518437 -0.261927153680 0.253865535097 0.120847730197 -0.072921411535 0.311198161018 0.089679875757 0.337468890558\n" " 0.159704350468 -0.832380709805 -1.750489239268 0.521905432003 1.361409731000 0.079298892465 0.093223456445 0.055414449864\n" " 0.061648317122 -0.296535560045 1.812842163522 0.504618443314 -1.338528342478 0.000172821470 0.951780949164 1.007671535938\n" "#","\n" " Pb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 1.933597551820 -0.128503343993 0.015280202292\n" " 0.981424884833 0.574812594694 -0.134233849467\n" " 0.222223023415 -0.960047108285 0.502933226160\n" " 0.077758928722 -0.206626081460 0.243024445565\n" " 0.073967768161 -0.082212261416 0.131891977459\n" "#","\n" " Pb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.933597551820 -0.128503343993 -0.101796893236 0.015280202292 0.005350345202 0.014172606616\n" " 0.981424884833 0.574812594694 0.383708445593 -0.134233849467 0.075210282932 -0.095091389111\n" " 0.222223023415 -0.960047108285 -0.673075164196 0.502933226160 -0.366898195819 0.404788663351\n" " 0.077758928722 -0.206626081460 -0.887877388873 0.243024445565 -1.159690406979 -0.640460683863\n" " 0.073967768161 -0.082212261416 1.917996276605 0.131891977459 1.651684865211 1.791004946570\n" "#","\n" " Bi SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 1.666928293168 -0.433606016760 -0.092396269342\n" " 1.317941720436 0.723433454454 0.184381669404\n" " 0.222221383065 -0.715303457579 -0.507231634301\n" " 0.074524438950 -0.308379410009 -0.421377693158\n" " 0.066725427306 0.159245921554 0.106621540317\n" "#","\n" " Bi DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.666928293168 -0.433606016760 -0.100663867810 -0.092396269342 -0.108190299502 -0.195956091275\n" " 1.317941720436 0.723433454454 0.259612627134 0.184381669404 0.210739707604 0.351618767590\n" " 0.222221383065 -0.715303457579 -0.216478402471 -0.507231634301 -0.568218339722 -1.047717462114\n" " 0.074524438950 -0.308379410009 -1.423645113253 -0.421377693158 -0.757828317889 -1.887710553530\n" " 0.066725427306 0.159245921554 2.308274018558 0.106621540317 1.788226073856 0.443921215549\n" "#","\n" " Po SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 1.757750856683 -0.224044332601 -0.053062093035\n" " 1.245376491921 0.572355818018 0.195354776138\n" " 0.251860493510 -0.863597717984 -0.839838825812\n" " 0.087993894799 -0.286569207007 -0.307002699297\n" " 0.087955184861 0.098257897619 -0.203109314513\n" "#","\n" " Po DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.757750856683 -0.224044332601 -0.135012487173 -0.053062093035 -0.021231103721 -0.096055785490\n" " 1.245376491921 0.572355818018 0.332752073309 0.195354776138 0.081960076684 0.254315976726\n" " 0.251860493510 -0.863597717984 -0.473417673148 -0.839838825812 -0.313733392241 -0.969368508973\n" " 0.087993894799 -0.286569207007 -1.276188389904 -0.307002699297 -0.822258321101 -1.683509583898\n" " 0.087955184861 0.098257897619 1.876429081086 -0.203109314513 1.692783549882 0.775369779849\n" "#","\n" " At SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 1.796641038213 -0.363075778132 -0.119884096868\n" " 1.378396886358 0.702535890722 0.281487205121\n" " 0.332155278101 -0.571059806679 -0.483364756316\n" " 0.150379247357 -0.338513795954 -0.533191703362\n" " 0.059913588731 -0.008356077866 -0.164154832840\n" "#","\n" " At DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.796641038213 -0.363075778132 -1.100370829977 -0.119884096868 -0.250626278132 -0.464474892145\n" " 1.378396886358 0.702535890722 -1.057174398279 0.281487205121 0.561700422906 0.955620810236\n" " 0.332155278101 -0.571059806679 0.447996190508 -0.483364756316 -1.242559252539 -1.899306426919\n" " 0.150379247357 -0.338513795954 -1.273313528437 -0.533191703362 0.441233871549 -1.551331120159\n" " 0.059913588731 -0.008356077866 0.740426167051 -0.164154832840 0.937688301921 -0.982495907237\n" "#","\n" " Rn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 2.000005663002 -0.442608171766 -0.136991011529\n" " 1.522474413760 0.852282073224 0.312749617939\n" " 0.319589540831 -0.907143180970 -0.775828387512\n" " 0.124013091191 -0.222277238353 -0.204098521582\n" " 0.113270499507 -0.001928995329 -0.288853228632\n" "#","\n" " Rn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 2.000005663002 -0.442608171766 -0.511614938408 -0.136991011529 -0.063901785194 -0.186151960320\n" " 1.522474413760 0.852282073224 -0.536614916033 0.312749617939 0.154086890384 0.369270825531\n" " 0.319589540831 -0.907143180970 -0.390801321298 -0.775828387512 -0.485164655715 -1.000515166114\n" " 0.124013091191 -0.222277238353 -1.541429072147 -0.204098521582 -1.116124046015 -1.713700191874\n" " 0.113270499507 -0.001928995329 1.908801729636 -0.288853228632 1.721625954410 0.927072017361\n" "#","\n" " U DZVP-MOLOPT-GTH-q14\n" " 1\n" " 6 0 4 7 3 3 2 2 1 6s 7s 8s 6p 7p 8p 6d 7d 5f 6f 5g\n" " 2.970404051267 -8.613286991729 -4.847218644580 -0.094448304725 2.089613520508 -1.388690863894 -0.339032038879 -0.517917661294 -0.108712988266 0.630053678940 -0.328083139683 0.193812038517\n" " 2.837409896206 9.359917338956 5.295013384216 0.080503840695 -2.330831226482 1.591366466533 -0.297639904371 0.575541916820 0.134339314945 0.077256524471 -0.136357555344 -0.096937116722\n" " 1.029287870466 -0.223393808655 -0.207730929575 0.170499084947 0.118073808224 -0.298526476737 -0.144235936067 -0.007051323571 -0.072924564853 0.798224117501 -0.044975575325 0.942045397086\n" " 0.447156512122 -1.138927348908 -1.085942892963 -0.128005768148 0.875430068610 -0.558080313712 0.020421937017 -0.328938941888 -0.022899936943 0.416776715909 0.084347995405 1.112468197028\n" " 0.224386023364 -0.475585548696 -0.147870903958 0.028006926300 0.257221846022 -0.186869197027 -0.068935950988 -0.436497768592 0.047774203203 0.269342903301 0.107901532632 0.049712666496\n" " 0.082082026090 -0.038412518166 1.206363318489 0.959404540206 -0.004940369038 1.337846156620 1.078056470699 -0.170128075474 1.023142281896 0.095618485831 0.591613653295 0.071150976147\n" " 0.048989649967 -0.161438730593 0.204614845616 0.064250249847 -0.040926507048 0.070410902066 0.151425801177 0.019870929957 0.031382006308 -0.029027116072 0.159595534158 -0.000586301554\n" "#"}; atomes_1.3.1/src/calc/cp2k/cp2k_basis.c0000664000175000017500000063422115212624223017231 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_basis.c * @short CP2K basis set, as delivered with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_basis.c' * * Contains: * - CP2K basis set, as delivered with CP2K v9.1 This file contains 3 tables: basis_elem -> the list of chemical elements basis_keys -> the list of keywords cp2k_basis -> finally the complete basis set */ #include "global.h" char * basis_elem[250]={"H", "O", "Si", "H", "H", "He", "He", "Li", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Cu", "Cu", "Cu", "Zn", "Br", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "Si", "P", "S", "Cl", "Ar", "H", "H", "He", "He", "B", "C", "N", "O", "F", "Ne", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "O", "F", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "H", "H", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "C", "C", "N", "N", "O", "O", "O", "O", "F", "F", "Ne", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Al", "Si", "Si", "Si", "P", "P", "S", "S", "Cl", "Ar", "K", "K", "Ca", "Sc", "Ti", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Ni", "Ni", "Ni", "Ni", "Cu", "Zn", "Zn", "Br", "Y", "Y", "Y", "Y", "Zr", "Zr", "Zr", "Zr", "Pt", "Pt", "Pt", "Pt", "H", "H", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "O", "F", "Ne", "Na", "Mg", "Al", "Al", "Si", "Si", "P", "S", "Cl", "Ar", "K", "K", "Ti", "Ba", "H", "H", "C", "N", "O", "Mg", "Mg", "Mg", "Si", "P", "S", "Ca", "Au", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar"}; char * basis_keys[250]={"DZ-ANO", "DZ-ANO", "DZ-ANO", "DZV-ALL", "DZVP-ALL", "DZV-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "TZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW-CONFINED", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW-CONFINED", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "TZV-ALL-PADE", "TZVP-ALL-PADE", "TZV-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "DZV-ALL-BLYP", "DZVP-ALL-BLYP", "TZVP-ALL-BLYP", "TZVP-ALL-BLYP", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "SZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "MAO-PRIM", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "MAO-PRIM", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-q2", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZV-GTH-PADE-q10", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE-CONFINED", "DZV-GTH-BLYP", "DZV-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZV-GTH-BLYP", "SZV-GTH-BLYP", "DZV-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZV-GTH-PBE-q10-soft", "DZVP-GTH-PBE-q2", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "TZ-GTH", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP"}; char * cp2k_basis[250]={"\n" "H DZ-ANO\n" " 2\n" " 1 0 0 8 3\n" " 188.6144500000 0.0009639000 -0.0013119000 0.0024224000\n" " 28.2765960000 0.0074920000 -0.0103451000 0.0203382000\n" " 6.4248300000 0.0375954000 -0.0504953000 0.0896394000\n" " 1.8150410000 0.1433950000 -0.2073855000 0.4422907000\n" " 0.5910630000 0.3486363000 -0.4350885000 0.5757144000\n" " 0.2121490000 0.4382974000 -0.0247297000 -0.9802890000\n" " 0.0798910000 0.1651066000 0.3225260000 -0.6721538000\n" " 0.0279620000 0.0210229000 0.7072754000 1.1417685000\n" " 2 1 1 4 2\n" " 2.3050000000 0.1127902000 -0.2108688000\n" " 0.8067500000 0.4185075000 -0.5943796000\n" " 0.2823620000 0.4700077000 0.0896889000\n" " 0.0988270000 0.1826260000 0.8611634000\n" "#","\n" "O DZ-ANO\n" " 3\n" " 1 0 0 14 4\n" " 105374.9500000000 0.0000459000 -0.0000105000 0.0000090000 -0.0000109000\n" " 15679.2400000000 0.0003607000 -0.0000825000 0.0000705000 -0.0000822000\n" " 3534.5447000000 0.0019198000 -0.0004412000 0.0003757000 -0.0004675000\n" " 987.3651600000 0.0082067000 -0.0018864000 0.0016146000 -0.0018465000\n" " 315.9787500000 0.0297257000 -0.0069540000 0.0059340000 -0.0075585000\n" " 111.6542800000 0.0904558000 -0.0217208000 0.0187866000 -0.0210868000\n" " 42.6994510000 0.2174054000 -0.0568513000 0.0494683000 -0.0667511000\n" " 17.3955960000 0.3687657000 -0.1139635000 0.1030399000 -0.1093673000\n" " 7.4383090000 0.3372798000 -0.1620201000 0.1620586000 -0.2731431000\n" " 3.2228620000 0.0967505000 -0.0333800000 0.0009367000 0.2097137000\n" " 1.2538770000 0.0025674000 0.3655068000 -0.8224251000 1.2034807000\n" " 0.4951550000 0.0013746000 0.5520031000 -0.1017902000 -0.6774694000\n" " 0.1916650000 -0.0001410000 0.2236393000 0.4253939000 -1.4298840000\n" " 0.0670830000 0.0000683000 0.0065745000 0.6877028000 1.4891068000\n" " 2 1 1 9 3\n" " 200.0000000000 0.0008933000 -0.0008384000 0.0012618000\n" " 46.5333670000 0.0073690000 -0.0068491000 0.0111628000\n" " 14.6218090000 0.0349392000 -0.0328505000 0.0518316000\n" " 5.3130640000 0.1152985000 -0.1100060000 0.1978845000\n" " 2.1025250000 0.2583231000 -0.3135263000 0.5707652000\n" " 0.8502230000 0.3696231000 -0.3196011000 -0.1789291000\n" " 0.3375970000 0.3238789000 0.2217243000 -0.8982077000\n" " 0.1288920000 0.1467989000 0.5622616000 0.2666643000\n" " 0.0451120000 0.0336127000 0.3013251000 0.6258994000\n" " 3 2 2 4 2\n" " 3.7500000000 0.1284934000 -0.2182055000\n" " 1.3125000000 0.5211884000 -0.4817695000\n" " 0.4593750000 0.4345784000 0.1357595000\n" " 0.1607810000 0.1457409000 0.8297734000\n" "#","\n" "Si DZ-ANO\n" " 4\n" " 1 0 0 17 5\n" " 250095.9700000000 0.0000681500 -0.0000182000 0.0000047000 -0.0000049000 0.0000068800\n" " 35803.2000000000 0.0004801700 -0.0001278000 0.0000330500 -0.0000348000 0.0000473500\n" " 10522.4830000000 0.0015962600 -0.0004265000 0.0001106400 -0.0001149000 0.0001652200\n" " 3701.7745000000 0.0054750700 -0.0014618000 0.0003777800 -0.0004007000 0.0005308800\n" " 1399.3933000000 0.0169370600 -0.0045845000 0.0011912000 -0.0012329000 0.0017985200\n" " 548.3889500000 0.0504178400 -0.0138701000 0.0035922800 -0.0038201000 0.0050352300\n" " 219.3626900000 0.1345026700 -0.0391782000 0.0102427300 -0.0106138000 0.0155996000\n" " 88.8822590000 0.2947640100 -0.0963506000 0.0253036400 -0.0270878000 0.0356862000\n" " 36.3233770000 0.4127972600 -0.1817620000 0.0493252100 -0.0512202000 0.0786378100\n" " 14.9334630000 0.2188576000 -0.1452339000 0.0404961600 -0.0466301000 0.0494893100\n" " 6.1663485000 0.0135263100 0.2298980700 -0.0698564000 0.0919014000 -0.1113745000\n" " 2.5545565000 0.0047876100 0.6237984700 -0.2541120000 0.2690132700 -0.5522929000\n" " 1.0609507000 -0.0023509000 0.3154358200 -0.2861133000 0.4607770300 -0.3884090000\n" " 0.4415024000 0.0015770000 -0.0027626000 0.2463941500 -1.0562010000 2.9534782000\n" " 0.1840168000 -0.0009118000 0.0090372200 0.6801918100 -0.7847112000 -2.8556020000\n" " 0.0767962000 0.0004164400 -0.0039062000 0.2896670600 1.2042630000 0.0921528600\n" " 0.0307185000 -0.0001140000 0.0011114400 0.0241482300 0.2967985900 1.0348260000\n" " 2 1 1 12 4\n" " 843.5338200000 0.0007436900 -0.0001574000 0.0001660200 -0.0001925000\n" " 204.9072600000 0.0055201500 -0.0011656000 0.0011978900 -0.0011519000\n" " 72.2487870000 0.0241128700 -0.0051529000 0.0054575000 -0.0064766000\n" " 27.9613650000 0.0888357300 -0.0191723000 0.0196283200 -0.0182754000\n" " 11.2322820000 0.2349425100 -0.0523132000 0.0558657900 -0.0680060000\n" " 4.5969373000 0.3973225000 -0.0900087000 0.0919795600 -0.0775832000\n" " 1.9014833000 0.3618118500 -0.0925012000 0.1150392100 -0.2143299000\n" " 0.7917828000 0.1052477300 0.0387090900 -0.0648366000 0.2557204800\n" " 0.3311662000 0.0025655500 0.3415276900 -0.6831822000 1.0777334000\n" " 0.1389423000 0.0017732900 0.4611056100 -0.1636095000 -1.2446840000\n" " 0.0584257000 -0.0004541000 0.2585592100 0.6175016400 -0.3835503000\n" " 0.0233703000 0.0001788100 0.0756656000 0.4409777500 1.0225198000\n" " 3 2 2 5 2\n" " 2.0105333000 0.0222105100 -0.0019527000\n" " 0.7910981000 0.1035698000 0.1535609200\n" " 0.3112787000 0.5081316400 0.4895933200\n" " 0.1224809000 0.3511753500 0.1138756000\n" " 0.0489924000 0.2507112700 -0.9848990000\n" " 4 3 3 2 1\n" " 0.8000000000 0.7000000000\n" " 0.3000000000 0.4000000000\n" "#","\n" "H (41) DZV-ALLELECTRON DZV-ALL\n" " 2\n" " 1 0 0 4 1\n" " 50.9991800000 0.0096604760\n" " 7.4832180000 0.0737288600\n" " 1.7774680000 0.2958581000\n" " 0.5193295000 0.7159053000\n" " 2 0 0 1 1\n" " 0.1541100000 1.0000000000\n" "#","\n" "H (41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 3\n" " 1 0 0 4 1\n" " 50.9991800000 0.0096604760\n" " 7.4832180000 0.0737288600\n" " 1.7774680000 0.2958581000\n" " 0.5193295000 0.7159053000\n" " 2 0 0 1 1\n" " 0.1541100000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He (51) DZV-ALLELECTRON DZV-ALL\n" " 2\n" " 1 0 0 5 1\n" " 221.3880300000 0.0027491019\n" " 33.2619660000 0.0208657650\n" " 7.5616549000 0.0970588380\n" " 2.0855990000 0.2807288500\n" " 0.6143391600 0.4742218300\n" " 2 0 0 1 1\n" " 0.1829212000 0.3055012900\n" "#","\n" "He (51/1) DZVP-ALLELECTRON DZVP-ALL\n" " 3\n" " 1 0 0 5 1\n" " 221.3880300000 0.0027491019\n" " 33.2619660000 0.0208657650\n" " 7.5616549000 0.0970588380\n" " 2.0855990000 0.2807288500\n" " 0.6143391600 0.4742218300\n" " 2 0 0 1 1\n" " 0.1829212000 0.3055012900\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li (6111/311) DZVP-ALLELECTRON DZVP-ALL\n" " 7\n" " 1 0 0 6 1\n" " 605.7054000000 0.0022800000\n" " 90.8609100000 0.0174600000\n" " 20.6312700000 0.0834000000\n" " 5.7384460000 0.2607400000\n" " 1.7515260000 0.4726300000\n" " 0.5463901000 0.3090700000\n" " 2 0 0 1 1\n" " 0.8427234000 1.0000000000\n" " 3 0 0 1 1\n" " 0.0674483300 1.0000000000\n" " 4 0 0 1 1\n" " 0.0253733200 1.0000000000\n" " 2 1 1 3 1\n" " 2.7700000000 0.0119900000\n" " 0.6300000000 0.0543800000\n" " 0.1850000000 0.1724600000\n" " 3 1 1 1 1\n" " 0.0544000000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0160000000 1.0000000000\n" "#","\n" "Li (621/1/1) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 5\n" " 1 0 0 6 1\n" " 605.7054000000 -0.0022870220\n" " 90.8609100000 -0.0174528000\n" " 20.6312700000 -0.0836970200\n" " 5.7384460000 -0.2597485000\n" " 1.7515260000 -0.4794613000\n" " 0.5463901000 -0.3233006000\n" " 2 0 0 2 1\n" " 0.8427234000 0.0748609200\n" " 0.0674483300 -0.6546490000\n" " 3 0 0 1 1\n" " 0.0253733200 1.0000000000\n" " 2 1 1 1 1\n" " 0.0773000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1220000000 1.0000000000\n" "#","\n" "Be (621/1/1) DZVP-ALLELECTRON DZVP-ALL\n" " 5\n" " 1 0 0 6 1\n" " 1203.4140000000 0.0020504250\n" " 180.2457000000 0.0157077700\n" " 40.8000500000 0.0768315300\n" " 11.3365400000 0.2480252000\n" " 3.5034830000 0.4798452000\n" " 1.1091220000 0.3371459000\n" " 2 0 0 2 1\n" " 1.9593420000 -0.0750455400\n" " 0.1652013000 0.5813557000\n" " 3 0 0 1 1\n" " 0.0552207800 1.0000000000\n" " 2 1 1 1 1\n" " 0.1500000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2500000000 1.0000000000\n" "#","\n" "B (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 1915.1670000000 -0.0020395200\n" " 287.1831000000 -0.0155965800\n" " 65.1571700000 -0.0762442400\n" " 18.1958300000 -0.2479244000\n" " 5.7015380000 -0.4790823000\n" " 1.8438370000 -0.3352953000\n" " 2 0 0 2 1\n" " 3.4914300000 0.0774223700\n" " 0.3050560000 -0.5741239000\n" " 3 0 0 1 1\n" " 0.0964865000 1.0000000000\n" " 2 1 1 4 1\n" " 11.6874200000 0.0150861200\n" " 2.6307750000 0.0888157000\n" " 0.7442269000 0.2903682000\n" " 0.2304761000 0.4994433000\n" " 3 1 1 1 1\n" " 0.0699380500 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 2808.0640000000 0.0020178300\n" " 421.1383000000 0.0154332000\n" " 95.5866200000 0.0755815500\n" " 26.7390000000 0.2478282000\n" " 8.4328270000 0.4793725000\n" " 2.7605820000 0.3338344000\n" " 2 0 0 2 1\n" " 5.4470040000 -0.0778407700\n" " 0.4792422000 0.5689560000\n" " 3 0 0 1 1\n" " 0.1461565000 1.0000000000\n" " 2 1 1 4 1\n" " 18.1308500000 0.0158547300\n" " 4.0998830000 0.0956827700\n" " 1.1858370000 0.3049119000\n" " 0.3685974000 0.4935017000\n" " 3 1 1 1 1\n" " 0.1097200000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 3845.4150000000 0.0020186080\n" " 577.5332000000 0.0154077600\n" " 131.3198000000 0.0753714000\n" " 36.8237800000 0.2482122000\n" " 11.6701200000 0.4798274000\n" " 3.8542600000 0.3318012000\n" " 2 0 0 2 1\n" " 7.8295610000 -0.0776668700\n" " 0.6877351000 0.5654598000\n" " 3 0 0 1 1\n" " 0.2040388000 1.0000000000\n" " 2 1 1 4 1\n" " 26.8098400000 0.0154663100\n" " 6.0681540000 0.0964396800\n" " 1.7676260000 0.3083610000\n" " 0.5466728000 0.4911597000\n" " 3 1 1 1 1\n" " 0.1587289000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 5222.9020000000 -0.0019363720\n" " 782.5399000000 -0.0148506700\n" " 177.2674000000 -0.0733187000\n" " 49.5166900000 -0.2451162000\n" " 15.6664400000 -0.4802847000\n" " 5.1793600000 -0.3359427000\n" " 2 0 0 2 1\n" " 10.6014400000 0.0788058200\n" " 0.9423171000 -0.5676952000\n" " 3 0 0 1 1\n" " 0.2774746000 1.0000000000\n" " 2 1 1 4 1\n" " 33.4241300000 0.0175603300\n" " 7.6221710000 0.1076300000\n" " 2.2382090000 0.3235255000\n" " 0.6867300000 0.4832229000\n" " 3 1 1 1 1\n" " 0.1938135000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 6384.7140000000 -0.0020301590\n" " 958.8865000000 -0.0154981000\n" " 218.1901000000 -0.0757786900\n" " 61.3647300000 -0.2502724000\n" " 19.6029000000 -0.4801086000\n" " 6.5648830000 -0.3271614000\n" " 2 0 0 2 1\n" " 13.8106900000 0.0790706600\n" " 1.2298670000 -0.5681216000\n" " 3 0 0 1 1\n" " 0.3584713000 1.0000000000\n" " 2 1 1 4 1\n" " 42.4699100000 0.0183170400\n" " 9.7138810000 0.1124513000\n" " 2.8640390000 0.3297771000\n" " 0.8746054000 0.4799772000\n" " 3 1 1 1 1\n" " 0.2425071000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 7883.8260000000 0.0020374790\n" " 1184.4060000000 0.0155468100\n" " 269.6731000000 0.0759637700\n" " 75.9416500000 0.2511027000\n" " 24.3210900000 0.4804765000\n" " 8.1832560000 0.3251142000\n" " 2 0 0 2 1\n" " 17.4495200000 -0.0790099700\n" " 1.5516320000 0.5676274000\n" " 3 0 0 1 1\n" " 0.4476986000 1.0000000000\n" " 2 1 1 4 1\n" " 52.9038100000 0.0187910600\n" " 12.1233600000 0.1157605000\n" " 3.5859220000 0.3342627000\n" " 1.0921630000 0.4778038000\n" " 3 1 1 1 1\n" " 0.2994419000 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 9911.9960000000 0.0019500000\n" " 1487.4550000000 0.0148800000\n" " 337.9539000000 0.0732600000\n" " 94.9139500000 0.2450700000\n" " 30.3415000000 0.4787800000\n" " 10.1908400000 0.3327300000\n" " 2 0 0 3 1\n" " 21.2296500000 -0.0917500000\n" " 1.9804180000 0.5721000000\n" " 0.6188824000 0.4550100000\n" " 3 0 0 2 1\n" " 0.6991738000 -0.1150200000\n" " 0.0618270500 0.6934500000\n" " 4 0 0 1 1\n" " 0.0237274100 1.0000000000\n" " 2 1 1 5 1\n" " 73.0853100000 -0.0165900000\n" " 16.8645600000 -0.1059900000\n" " 5.0553910000 -0.3220200000\n" " 1.5920210000 -0.4903600000\n" " 0.4702690000 -0.3121800000\n" " 3 1 1 2 1\n" " 0.1700000000 0.0412900000\n" " 0.0647000000 0.4041200000\n" " 4 1 1 1 1\n" " 0.0170000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Na (6321/411/1) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 8\n" " 1 0 0 6 1\n" " 9911.9960000000 0.0019504590\n" " 1487.4550000000 0.0149171200\n" " 337.9539000000 0.0734165800\n" " 94.9139500000 0.2456910000\n" " 30.3415000000 0.4795611000\n" " 10.1908400000 0.3337213000\n" " 2 0 0 3 1\n" " 21.2296500000 0.0823028800\n" " 1.9804180000 -0.5608480000\n" " 0.6188824000 -0.5224378000\n" " 3 0 0 2 1\n" " 0.6991738000 0.0920975500\n" " 0.0618270500 -0.6708252000\n" " 4 0 0 1 1\n" " 0.0237274100 1.0000000000\n" " 2 1 1 4 1\n" " 73.0853100000 0.0167176300\n" " 16.8645600000 0.1065395000\n" " 5.0553910000 0.3242217000\n" " 1.5920210000 0.4891362000\n" " 3 1 1 1 1\n" " 0.4702690000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0647000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg (6321/411/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 12436.6700000000 -0.0018333240\n" " 1862.2230000000 -0.0140828100\n" " 421.3745000000 -0.0700956200\n" " 117.6930000000 -0.2387718000\n" " 37.4314500000 -0.4787377000\n" " 12.5054900000 -0.3447773000\n" " 2 0 0 3 1\n" " 25.4514000000 0.0852139700\n" " 2.4528770000 -0.5646916000\n" " 0.8051333000 -0.5157275000\n" " 3 0 0 2 1\n" " 1.0820080000 -0.1113334000\n" " 0.1083340000 0.6481452000\n" " 4 0 0 1 1\n" " 0.0399073500 1.0000000000\n" " 2 1 1 4 1\n" " 92.4632200000 0.0162715700\n" " 21.5017700000 0.1045630000\n" " 6.5374420000 0.3224328000\n" " 2.1180810000 0.4940399000\n" " 3 1 1 1 1\n" " 0.6583148000 1.0000000000\n" " 4 1 1 1 1\n" " 0.1061000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 14724.4500000000 0.0018181970\n" " 2205.4630000000 0.0139580500\n" " 499.3021000000 0.0695009200\n" " 139.5901000000 0.2371061000\n" " 44.4922800000 0.4776104000\n" " 14.9056900000 0.3476339000\n" " 2 0 0 3 1\n" " 30.0750700000 -0.0878851200\n" " 2.9838330000 0.5677370000\n" " 1.0209900000 0.5105008000\n" " 3 0 0 2 1\n" " 1.4927790000 0.1341424000\n" " 0.1692291000 -0.6656758000\n" " 4 0 0 1 1\n" " 0.0617449100 1.0000000000\n" " 2 1 1 5 1\n" " 127.9161000000 0.0133024200\n" " 29.7767800000 0.0896709600\n" " 9.0917390000 0.2981308000\n" " 3.0009870000 0.4962628000\n" " 0.9695584000 0.3301450000\n" " 3 1 1 2 1\n" " 0.3756001000 0.2050982000\n" " 0.1250989000 0.5518101000\n" " 4 1 1 1 1\n" " 0.0417398100 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 17268.5800000000 -0.0017973950\n" " 2586.6510000000 -0.0137970400\n" " 585.6364000000 -0.0687807200\n" " 163.7736000000 -0.2352508000\n" " 52.2670300000 -0.4766194000\n" " 17.5416800000 -0.3507726000\n" " 2 0 0 3 1\n" " 35.1241400000 0.0902137000\n" " 3.5654230000 -0.5722548000\n" " 1.2591470000 -0.5045537000\n" " 3 0 0 2 1\n" " 1.9470140000 -0.1508352000\n" " 0.2367573000 0.6745594000\n" " 4 0 0 1 1\n" " 0.0858966400 1.0000000000\n" " 2 1 1 5 1\n" " 159.6817000000 -0.0123932000\n" " 37.2581700000 -0.0850800400\n" " 11.4382500000 -0.2905513000\n" " 3.8278340000 -0.4985588000\n" " 1.2679000000 -0.3325624000\n" " 3 1 1 2 1\n" " 0.5344095000 -0.2264369000\n" " 0.1829031000 -0.5553035000\n" " 4 1 1 1 1\n" " 0.0617872600 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 20024.9400000000 -0.0017787230\n" " 2999.4410000000 -0.0136540700\n" " 679.0868000000 -0.0681441600\n" " 189.9439000000 -0.2336137000\n" " 60.6834800000 -0.4757401000\n" " 20.3982300000 -0.3535470000\n" " 2 0 0 3 1\n" " 40.5941600000 -0.0922427200\n" " 4.1972190000 0.5774677000\n" " 1.5192950000 0.4983773000\n" " 3 0 0 2 1\n" " 2.4458590000 0.1631695000\n" " 0.3116159000 -0.6787174000\n" " 4 0 0 1 1\n" " 0.1120101000 1.0000000000\n" " 2 1 1 5 1\n" " 195.3994000000 -0.0116298200\n" " 45.6667500000 -0.0811413200\n" " 14.0730700000 -0.2837707000\n" " 4.7572430000 -0.5004074000\n" " 1.6035060000 -0.3357758000\n" " 3 1 1 2 1\n" " 0.7039432000 -0.2471697000\n" " 0.2451145000 -0.5552025000\n" " 4 1 1 1 1\n" " 0.0831324000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 23050.0700000000 -0.0017566500\n" " 3451.8660000000 -0.0134893800\n" " 781.2787000000 -0.0674324900\n" " 218.4765000000 -0.2318604000\n" " 69.8326300000 -0.4749416000\n" " 23.4948000000 -0.3564992000\n" " 2 0 0 3 1\n" " 46.4823800000 -0.0940421700\n" " 4.8807490000 0.5828881000\n" " 1.8014760000 0.4923262000\n" " 3 0 0 2 1\n" " 2.9778040000 0.1731553000\n" " 0.3942510000 -0.6854363000\n" " 4 0 0 1 1\n" " 0.1417028000 1.0000000000\n" " 2 1 1 5 1\n" " 231.3313000000 0.0112789100\n" " 54.1461600000 0.0794256900\n" " 16.7576200000 0.2808799000\n" " 5.7193200000 0.5020190000\n" " 1.9560350000 0.3344146000\n" " 3 1 1 2 1\n" " 0.8955913000 0.2646811000\n" " 0.3094227000 0.5496127000\n" " 4 1 1 1 1\n" " 0.1021157000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 26351.4600000000 0.0017324290\n" " 3945.0570000000 0.0133109400\n" " 892.4384000000 0.0666748300\n" " 249.4174000000 0.2300506000\n" " 79.7215700000 0.4742307000\n" " 26.8311400000 0.3595240000\n" " 2 0 0 3 1\n" " 52.7853000000 -0.0956295900\n" " 5.6156430000 0.5880840000\n" " 2.1059080000 0.4866982000\n" " 3 0 0 2 1\n" " 3.5586150000 0.1806891000\n" " 0.4847981000 -0.6884829000\n" " 4 0 0 1 1\n" " 0.1733310000 1.0000000000\n" " 2 1 1 5 1\n" " 271.0782000000 -0.0109256700\n" " 63.5472100000 -0.0775909100\n" " 19.7371100000 -0.2775159000\n" " 6.7889940000 -0.5031933000\n" " 2.3480300000 -0.3348426000\n" " 3 1 1 2 1\n" " 1.1066860000 -0.2765381000\n" " 0.3829680000 -0.5466768000\n" " 4 1 1 1 1\n" " 0.1251133000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 29505.7700000000 -0.0017375040\n" " 4419.2160000000 -0.0133380900\n" " 1000.5770000000 -0.0667249100\n" " 280.0380000000 -0.2298887000\n" " 89.7120800000 -0.4735744000\n" " 30.2798800000 -0.3599160000\n" " 2 0 0 3 1\n" " 59.5144000000 0.0970257400\n" " 6.3997780000 -0.5933987000\n" " 2.4314710000 -0.4810804000\n" " 3 0 0 2 1\n" " 4.1875360000 -0.1864000000\n" " 0.5832562000 0.6895689000\n" " 4 0 0 1 1\n" " 0.2071081000 1.0000000000\n" " 2 1 1 5 1\n" " 313.0218000000 0.0106753000\n" " 73.4872300000 0.0763095300\n" " 22.8979900000 0.2751271000\n" " 7.9322150000 0.5040719000\n" " 2.7702700000 0.3346271000\n" " 3 1 1 2 1\n" " 1.3318950000 0.2877000000\n" " 0.4618615000 0.5447527000\n" " 4 1 1 1 1\n" " 0.1502194000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K (63321/5211/1) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 33078.6500000000 0.0017266760\n" " 4954.9020000000 0.0132514200\n" " 1122.1310000000 0.0663142300\n" " 314.2081000000 0.2286724000\n" " 100.7763000000 0.4726698000\n" " 34.0613500000 0.3621416000\n" " 2 0 0 3 1\n" " 66.6029300000 -0.0984506600\n" " 7.2644560000 0.5941619000\n" " 2.8036790000 0.4799139000\n" " 3 0 0 3 1\n" " 4.8324390000 0.1972709000\n" " 0.7058188000 -0.6956473000\n" " 0.2697520000 -0.4228781000\n" " 4 0 0 2 1\n" " 0.3533535000 -0.1246783000\n" " 0.0420916300 0.7383633000\n" " 5 0 0 1 1\n" " 0.0174484800 1.0000000000\n" " 2 1 1 5 1\n" " 367.5115000000 -0.0100333200\n" " 86.2608600000 -0.0727348400\n" " 26.8979700000 -0.2679043000\n" " 9.3541250000 -0.5038367000\n" " 3.2920580000 -0.3426224000\n" " 3 1 1 2 1\n" " 1.6209190000 -0.2952722000\n" " 0.5872493000 -0.5563566000\n" " 4 1 1 1 1\n" " 0.2046941000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0408000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "Cu (63321/531/41*) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 10\n" " 1 0 0 6 1\n" " 80289.6200000000 -0.0016562160\n" " 12027.3400000000 -0.0127092500\n" " 2724.2580000000 -0.0638517700\n" " 763.5617000000 -0.2221154000\n" " 246.0646000000 -0.4686049000\n" " 83.8683600000 -0.3733793000\n" " 2 0 0 3 1\n" " 161.7973000000 0.1066759000\n" " 18.7253700000 -0.6245943000\n" " 7.6364160000 -0.4496724000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.2198077000\n" " 2.2528310000 0.7108760000\n" " 0.8644886000 0.4206572000\n" " 4 0 0 2 1\n" " 1.2230960000 0.1303169000\n" " 0.1429771000 -0.5708601000\n" " 5 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089143100\n" " 236.6253000000 0.0669704300\n" " 74.8923200000 0.2584147000\n" " 26.9312500000 0.5070620000\n" " 9.9267760000 0.3407511000\n" " 3 1 1 3 1\n" " 5.3446650000 0.3313745000\n" " 2.0247480000 0.5459871000\n" " 0.7366331000 0.2494767000\n" " 4 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 4 1\n" " 31.8126700000 -0.0668891400\n" " 8.6058710000 -0.2907401000\n" " 2.6093410000 -0.4984195000\n" " 0.6852135000 -0.4697251000\n" " 4 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Cu (63321/531/41) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 80289.6200000000 0.0016500000\n" " 12027.3400000000 0.0127400000\n" " 2724.2580000000 0.0634300000\n" " 763.5617000000 0.2238400000\n" " 246.0646000000 0.4469700000\n" " 83.8683600000 0.3432300000\n" " 2 0 0 3 1\n" " 161.7973000000 -0.0836100000\n" " 18.7253700000 0.7573900000\n" " 7.6364160000 0.5060700000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.1441800000\n" " 2.2528310000 0.8250000000\n" " 0.8644886000 0.4798900000\n" " 4 0 0 2 1\n" " 1.2230960000 -0.0785900000\n" " 0.1429771000 0.5949100000\n" " 5 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089100000\n" " 236.6253000000 0.0666800000\n" " 74.8923200000 0.2569800000\n" " 26.9312500000 0.5058100000\n" " 9.9267760000 0.3376600000\n" " 3 1 1 3 1\n" " 5.3446650000 0.3484300000\n" " 2.0247480000 0.5954700000\n" " 0.7366331000 0.2609100000\n" " 4 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 4 1\n" " 31.8126700000 0.0636900000\n" " 8.6058710000 0.2755200000\n" " 2.6093410000 0.4756400000\n" " 0.6852135000 0.4480200000\n" " 4 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Cu (633111/5211/311) TZVP-ALLELECTRON TZVP-ALL\n" " 13\n" " 1 0 0 6 1\n" " 80289.6200000000 0.0016500000\n" " 12027.3400000000 0.0127400000\n" " 2724.2580000000 0.0634300000\n" " 763.5617000000 0.2238400000\n" " 246.0646000000 0.4469700000\n" " 83.8683600000 0.3432300000\n" " 2 0 0 3 1\n" " 161.7973000000 -0.0836100000\n" " 18.7253700000 0.7573900000\n" " 7.6364160000 0.5060700000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.1441800000\n" " 2.2528310000 0.8250000000\n" " 0.8644886000 0.4798900000\n" " 4 0 0 1 1\n" " 1.2230960000 1.0000000000\n" " 5 0 0 1 1\n" " 0.1429771000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089100000\n" " 236.6253000000 0.0666800000\n" " 74.8923200000 0.2569800000\n" " 26.9312500000 0.5058100000\n" " 9.9267760000 0.3376600000\n" " 3 1 1 2 1\n" " 5.3446650000 0.3484300000\n" " 2.0247480000 0.5954700000\n" " 4 1 1 1 1\n" " 0.7366331000 1.0000000000\n" " 5 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 3 1\n" " 31.8126700000 0.0636900000\n" " 8.6058710000 0.2755200000\n" " 2.6093410000 0.4756400000\n" " 4 2 2 1 1\n" " 0.6852135000 1.0000000000\n" " 5 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Zn (63321/531/41) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 82904.2200000000 -0.0017313190\n" " 12444.2300000000 -0.0132328300\n" " 2829.8530000000 -0.0658900700\n" " 797.8929000000 -0.2261988000\n" " 259.0647000000 -0.4683912000\n" " 89.0795100000 -0.3669156000\n" " 2 0 0 3 1\n" " 173.6817000000 -0.1071624000\n" " 20.1665000000 0.6264982000\n" " 8.2470820000 0.4478206000\n" " 3 0 0 3 1\n" " 15.3165800000 -0.2212375000\n" " 2.4557490000 0.7091911000\n" " 0.9548777000 0.4224147000\n" " 4 0 0 2 1\n" " 1.4100030000 -0.1404652000\n" " 0.1693441000 0.6012745000\n" " 5 0 0 1 1\n" " 0.0592210000 1.0000000000\n" " 2 1 1 5 1\n" " 1085.1780000000 0.0088260260\n" " 256.1809000000 0.0664454900\n" " 81.1402500000 0.2574246000\n" " 29.2225200000 0.5071455000\n" " 10.7937000000 0.3414356000\n" " 3 1 1 3 1\n" " 5.8412900000 0.3312126000\n" " 2.2263660000 0.5463760000\n" " 0.8211640000 0.2468144000\n" " 4 1 1 1 1\n" " 0.1690000000 1.0000000000\n" " 3 2 2 4 1\n" " 38.0934700000 -0.0606966400\n" " 10.4237600000 -0.2760500000\n" " 3.2532520000 -0.4982638000\n" " 0.9097528000 -0.4689898000\n" " 4 2 2 1 1\n" " 0.1720000000 1.0000000000\n" "#","\n" "Br (63321/5321/41) DZVP-ALLELECTRON DZVP-ALL\n" " 11\n" " 1 0 0 6 1\n" " 115354.1000000000 0.0016893780\n" " 17308.3900000000 0.0129218500\n" " 3932.8540000000 0.0645566100\n" " 1107.7720000000 0.2228721000\n" " 359.6334000000 0.4668337000\n" " 123.6999000000 0.3726870000\n" " 2 0 0 3 1\n" " 239.1218000000 0.1093640000\n" " 28.2681300000 -0.6294377000\n" " 11.7505700000 -0.4449871000\n" " 3 0 0 3 1\n" " 21.8299600000 0.2318734000\n" " 3.6088260000 -0.7272457000\n" " 1.5164870000 -0.4055866000\n" " 4 0 0 2 1\n" " 2.5209370000 0.2202626000\n" " 0.4093415000 -0.7163121000\n" " 5 0 0 1 1\n" " 0.1530953000 1.0000000000\n" " 2 1 1 5 1\n" " 1580.3740000000 0.0081757200\n" " 373.0976000000 0.0625525000\n" " 118.3523000000 0.2484745000\n" " 42.8589600000 0.5054137000\n" " 15.9778700000 0.3523443000\n" " 3 1 1 3 1\n" " 8.7533270000 0.3283504000\n" " 3.5160330000 0.5437991000\n" " 1.4307380000 0.2357859000\n" " 4 1 1 2 1\n" " 0.7091507000 -0.3244162000\n" " 0.2656835000 -0.5395416000\n" " 5 1 1 1 1\n" " 0.0943995000 1.0000000000\n" " 3 2 2 4 1\n" " 61.5144200000 0.0595776800\n" " 17.1619800000 0.2843781000\n" " 5.5384710000 0.5281856000\n" " 1.6848170000 0.4047724000\n" " 4 2 2 1 1\n" " 0.3620000000 1.0000000000\n" "#","\n" "H DZV-ALL-PADE\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" "#","\n" "H DZVP-ALL-PADE\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-ALL-PADE\n" " 1\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" "#","\n" "He DZVP-ALL-PADE\n" " 2\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-ALL-PADE\n" " 1\n" " 1 0 0 9 3\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000\n" "#","\n" "Li DZVP-ALL-PADE\n" " 1\n" " 1 0 1 9 3 1\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000 1.0000000000\n" "#","\n" "Be DZV-ALL-PADE\n" " 1\n" " 1 0 0 9 3\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000\n" "#","\n" "Be DZVP-ALL-PADE\n" " 1\n" " 1 0 1 9 3 1\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000 1.0000000000\n" "#","\n" "B DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 -0.0194224027 0.0000000000 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 -0.0637848437 0.0000000000 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 -0.2445403926 0.0000000000 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 0.0000000000 -0.4653071695 0.0000000000 1.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 1.0000000000 -0.4454718873 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 -0.0207269323 0.0000000000 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 -0.0735133778 0.0000000000 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 -0.2717786632 0.0000000000 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 0.0000000000 -0.4752358588 0.0000000000 1.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 1.0000000000 -0.4103141270 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 -0.0210878424 0.0000000000 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 -0.0789077492 0.0000000000 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 -0.2857497167 0.0000000000 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 0.0000000000 -0.4787797641 0.0000000000 1.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 1.0000000000 -0.3946908536 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 -0.0212313047 0.0000000000 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 -0.0827974544 0.0000000000 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 -0.2949296208 0.0000000000 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 0.0000000000 -0.4802452851 0.0000000000 1.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 1.0000000000 -0.3854659989 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 -0.0213060126 0.0000000000 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 -0.0858798131 0.0000000000 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 -0.3015970754 0.0000000000 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 0.0000000000 -0.4808474043 0.0000000000 1.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 1.0000000000 -0.3792605287 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 -0.0213531723 0.0000000000 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 -0.0884397798 0.0000000000 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 -0.3067173307 0.0000000000 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 0.0000000000 -0.4810347809 0.0000000000 1.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 1.0000000000 -0.3747659865 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 21394.4924408352 0.0006997970 -0.0001723222 0.0000318328 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 3795.7378701065 0.0042288655 -0.0010411116 0.0001901524 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 985.8138826962 0.0187975202 -0.0046890691 0.0008718578 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 302.7884326942 0.0687646112 -0.0175180517 0.0031871723 0.0000000000 -0.0012633822 0.0000000000 0.0000000000 0.0000000000\n" " 103.1219260258 0.1965820685 -0.0542917187 0.0102229243 0.0000000000 -0.0055996166 0.0000000000 0.0000000000 0.0000000000\n" " 37.9946819901 0.3853147762 -0.1258294332 0.0229101289 0.0000000000 -0.0260567422 0.0000000000 0.0000000000 0.0000000000\n" " 14.7704405101 0.3818197180 -0.1864438254 0.0376735175 0.0000000000 -0.0909943900 0.0000000000 0.0000000000 0.0000000000\n" " 5.8005968867 0.0996875920 -0.0067937817 -0.0040418885 0.0000000000 -0.2388788121 0.0000000000 0.0000000000 0.0000000000\n" " 2.2568321873 -0.0028473835 0.4371568026 -0.0847080121 0.0000000000 -0.3819119184 0.0000000000 0.0000000000 0.0000000000\n" " 0.8574123124 0.0015751503 0.5578917664 -0.2235245000 0.0000000000 -0.3665265555 1.0000000000 0.0000000000 0.0000000000\n" " 0.3102401678 -0.0004707246 0.1358955383 0.0003703549 0.0000000000 -0.1521385722 0.0000000000 1.0000000000 0.0000000000\n" " 0.0425973682 0.0000637435 -0.0014197920 1.0326168980 1.0000000000 -0.0040572054 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 24563.3509341519 0.0007501763 -0.0001898742 0.0000432716 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4098.7281652598 0.0049866285 -0.0012662269 0.0002886160 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1006.0693449047 0.0236248415 -0.0060608521 0.0013824537 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 296.0583569831 0.0889264612 -0.0236070994 0.0053960194 0.0000000000 -0.0019014218 0.0000000000 0.0000000000 0.0000000000\n" " 97.5602425330 0.2498577261 -0.0728218452 0.0167469733 0.0000000000 -0.0091160713 0.0000000000 0.0000000000 0.0000000000\n" " 35.0026526821 0.4370249965 -0.1609409689 0.0376024877 0.0000000000 -0.0414328941 0.0000000000 0.0000000000 0.0000000000\n" " 13.2894359607 0.3137343310 -0.1793620369 0.0434617096 0.0000000000 -0.1416149186 0.0000000000 0.0000000000 0.0000000000\n" " 5.0406635723 0.0348223238 0.1488145108 -0.0386567967 0.0000000000 -0.3285471023 0.0000000000 0.0000000000 0.0000000000\n" " 1.8767656586 0.0002090057 0.6227623758 -0.2075293171 0.0000000000 -0.4342370572 0.0000000000 0.0000000000 0.0000000000\n" " 0.6740386983 -0.0003911930 0.3832848322 -0.2221884917 0.0000000000 -0.2719424179 1.0000000000 0.0000000000 0.0000000000\n" " 0.1488350316 0.0001705201 0.0091106555 0.4513483785 0.0000000000 -0.0274310878 0.0000000000 1.0000000000 0.0000000000\n" " 0.0515990826 -0.0000693922 -0.0006594960 0.6960710466 1.0000000000 0.0065925450 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 -0.0020283510 0.0003943314 0.0000000000 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 -0.0096153064 0.0020649970 0.0000000000 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 -0.0438990222 0.0086117474 0.0000000000 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 -0.1486831836 0.0325680927 0.0000000000 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 -0.3395431168 0.0689924793 0.0000000000 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 -0.4356046359 0.1128895908 0.0000000000 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 0.0000000000 -0.0176080423 -0.4885175925 0.0000000000 1.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 1.0000000000 0.0038180642 -0.5990452444 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 -0.0020435691 0.0004608501 0.0000000000 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 -0.0098284202 0.0024034582 0.0000000000 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 -0.0454264531 0.0103657478 0.0000000000 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 -0.1542320032 0.0386846044 0.0000000000 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 -0.3498959381 0.0835955571 0.0000000000 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 -0.4363611647 0.1290968861 0.0000000000 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 0.0000000000 -0.0131604244 -0.5256989764 0.0000000000 1.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 1.0000000000 0.0021025311 -0.5604030966 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 -0.0023114207 0.0005787895 0.0000000000 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 -0.0110744755 0.0029302708 0.0000000000 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 -0.0514807115 0.0130835082 0.0000000000 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 -0.1716941092 0.0469534420 0.0000000000 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 -0.3732355043 0.1006399940 0.0000000000 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 -0.4305581327 0.1364700825 0.0000000000 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 0.0000000000 -0.0060298501 -0.5504601345 0.0000000000 1.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 1.0000000000 0.0003271252 -0.5191181650 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 -0.0025280039 0.0006830870 0.0000000000 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 -0.0122585511 0.0034185387 0.0000000000 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 -0.0575128029 0.0158200681 0.0000000000 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 -0.1899219376 0.0551163883 0.0000000000 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 -0.3975202657 0.1178364339 0.0000000000 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 -0.4219856265 0.1353291071 0.0000000000 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 0.0000000000 0.0006566296 -0.5644015152 0.0000000000 1.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 1.0000000000 -0.0009601988 -0.4712031290 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 -0.0027461074 0.0007848141 0.0000000000 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 -0.0132763202 0.0038538083 0.0000000000 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 -0.0625171637 0.0182320502 0.0000000000 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 -0.2041393264 0.0620073474 0.0000000000 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 -0.4143068471 0.1319770088 0.0000000000 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 -0.4107049745 0.1291981811 0.0000000000 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 0.0000000000 0.0044892009 -0.5671711751 0.0000000000 1.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 1.0000000000 -0.0015760776 -0.4254457201 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 -0.0027433029 0.0008170301 0.0000000000 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 -0.0134329689 0.0040333465 0.0000000000 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 -0.0636580890 0.0193733027 0.0000000000 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 -0.2085598634 0.0657449676 0.0000000000 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 -0.4214027465 0.1412356088 0.0000000000 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 -0.4060028434 0.1270698508 0.0000000000 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 0.0000000000 0.0056716141 -0.5665305364 0.0000000000 1.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 1.0000000000 -0.0017347653 -0.3971352648 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" "#","\n" "H DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" "#","\n" "He DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 9 3\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000\n" "#","\n" "Li DZVP-ALL-PADE-NEW\n" " 1\n" " 1 0 1 9 3 2\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000 0.0000000000 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000 0.0000000000 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000 0.0000000000 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000 0.0000000000 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000 0.0000000000 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000 0.0000000000 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000 0.0000000000 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000 1.0000000000 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 9 3\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000\n" "#","\n" "Be DZVP-ALL-PADE-NEW\n" " 1\n" " 1 0 1 9 3 2\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000 0.0000000000 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000 0.0000000000 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000 0.0000000000 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000 0.0000000000 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000 0.0000000000 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000 0.0000000000 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000 0.0000000000 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 -0.0194224027 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 -0.0637848437 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 -0.2445403926 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 0.0000000000 -0.4653071695 0.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 1.0000000000 -0.4454718873 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 -0.0207269323 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 -0.0735133778 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 -0.2717786632 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 0.0000000000 -0.4752358588 0.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 1.0000000000 -0.4103141270 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE-NEW-CONFINED\n" " 2\n" " 1 0 1 9 3 2\n" " 4632.6109261696 -0.0010491808 0.0002461448 0.0000000000 0.0000000000 0.0000000000\n" " 743.7957159823 -0.0073693327 0.0017441253 0.0000000000 0.0000000000 0.0000000000\n" " 176.9921440195 -0.0356124607 0.0084765994 0.0000000000 0.0000000000 0.0000000000\n" " 51.1239838771 -0.1296976533 0.0325377884 0.0000000000 0.0000000000 0.0000000000\n" " 16.3281731915 -0.3377322464 0.0944035645 0.0000000000 -0.0162087526 0.0000000000\n" " 5.5265358443 -0.4718174357 0.1851968433 0.0000000000 -0.0517011722 0.0000000000\n" " 1.8931812532 -0.1789961518 0.0990225545 0.0000000000 -0.2045873835 0.0000000000\n" " 0.6098030227 0.0053187867 -0.4713283667 0.0000000000 -0.4496981983 0.0000000000\n" " 0.2069219808 -0.0024734214 -0.6664084300 1.0000000000 -0.4809024290 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 -0.0210878424 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 -0.0789077492 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 -0.2857497167 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 0.0000000000 -0.4787797641 0.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 1.0000000000 -0.3946908536 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 -0.0212313047 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 -0.0827974544 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 -0.2949296208 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 0.0000000000 -0.4802452851 0.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 1.0000000000 -0.3854659989 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 -0.0213060126 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 -0.0858798131 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 -0.3015970754 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 0.0000000000 -0.4808474043 0.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 1.0000000000 -0.3792605287 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 -0.0213531723 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 -0.0884397798 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 -0.3067173307 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 0.0000000000 -0.4810347809 0.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 1.0000000000 -0.3747659865 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 21394.4924408352 0.0006997970 -0.0001723222 0.0000318328 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 3795.7378701065 0.0042288655 -0.0010411116 0.0001901524 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 985.8138826962 0.0187975202 -0.0046890691 0.0008718578 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 302.7884326942 0.0687646112 -0.0175180517 0.0031871723 0.0000000000 -0.0012633822 0.0000000000 0.0000000000\n" " 103.1219260258 0.1965820685 -0.0542917187 0.0102229243 0.0000000000 -0.0055996166 0.0000000000 0.0000000000\n" " 37.9946819901 0.3853147762 -0.1258294332 0.0229101289 0.0000000000 -0.0260567422 0.0000000000 0.0000000000\n" " 14.7704405101 0.3818197180 -0.1864438254 0.0376735175 0.0000000000 -0.0909943900 0.0000000000 0.0000000000\n" " 5.8005968867 0.0996875920 -0.0067937817 -0.0040418885 0.0000000000 -0.2388788121 0.0000000000 0.0000000000\n" " 2.2568321873 -0.0028473835 0.4371568026 -0.0847080121 0.0000000000 -0.3819119184 0.0000000000 0.0000000000\n" " 0.8574123124 0.0015751503 0.5578917664 -0.2235245000 0.0000000000 -0.3665265555 0.0000000000 0.0000000000\n" " 0.3102401678 -0.0004707246 0.1358955383 0.0003703549 0.0000000000 -0.1521385722 1.0000000000 0.0000000000\n" " 0.0425973682 0.0000637435 -0.0014197920 1.0326168980 1.0000000000 -0.0040572054 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 24563.3509341519 0.0007501763 -0.0001898742 0.0000432716 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4098.7281652598 0.0049866285 -0.0012662269 0.0002886160 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1006.0693449047 0.0236248415 -0.0060608521 0.0013824537 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 296.0583569831 0.0889264612 -0.0236070994 0.0053960194 0.0000000000 -0.0019014218 0.0000000000 0.0000000000\n" " 97.5602425330 0.2498577261 -0.0728218452 0.0167469733 0.0000000000 -0.0091160713 0.0000000000 0.0000000000\n" " 35.0026526821 0.4370249965 -0.1609409689 0.0376024877 0.0000000000 -0.0414328941 0.0000000000 0.0000000000\n" " 13.2894359607 0.3137343310 -0.1793620369 0.0434617096 0.0000000000 -0.1416149186 0.0000000000 0.0000000000\n" " 5.0406635723 0.0348223238 0.1488145108 -0.0386567967 0.0000000000 -0.3285471023 0.0000000000 0.0000000000\n" " 1.8767656586 0.0002090057 0.6227623758 -0.2075293171 0.0000000000 -0.4342370572 0.0000000000 0.0000000000\n" " 0.6740386983 -0.0003911930 0.3832848322 -0.2221884917 0.0000000000 -0.2719424179 0.0000000000 0.0000000000\n" " 0.1488350316 0.0001705201 0.0091106555 0.4513483785 0.0000000000 -0.0274310878 1.0000000000 0.0000000000\n" " 0.0515990826 -0.0000693922 -0.0006594960 0.6960710466 1.0000000000 0.0065925450 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 -0.0020283510 0.0003943314 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 -0.0096153064 0.0020649970 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 -0.0438990222 0.0086117474 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 -0.1486831836 0.0325680927 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 -0.3395431168 0.0689924793 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 -0.4356046359 0.1128895908 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 0.0000000000 -0.0176080423 -0.4885175925 0.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 1.0000000000 0.0038180642 -0.5990452444 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 -0.0020435691 0.0004608501 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 -0.0098284202 0.0024034582 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 -0.0454264531 0.0103657478 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 -0.1542320032 0.0386846044 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 -0.3498959381 0.0835955571 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 -0.4363611647 0.1290968861 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 0.0000000000 -0.0131604244 -0.5256989764 0.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 1.0000000000 0.0021025311 -0.5604030966 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE-NEW-CONFINED\n" " 2\n" " 1 0 1 12 4 3\n" " 34205.8807706528 -0.0007250833 -0.0001923205 -0.0000562487 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5862.8987880849 -0.0046320509 -0.0012317373 -0.0003597167 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1469.7841832649 -0.0215037349 -0.0057791418 -0.0016933695 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 437.7710897905 -0.0808773954 -0.0224211779 -0.0065639379 0.0000000000 -0.0018310926 0.0004497923 0.0000000000\n" " 145.2906854908 -0.2311846174 -0.0700642670 -0.0207468988 0.0000000000 -0.0086848321 0.0022634300 0.0000000000\n" " 52.4935101069 -0.4235892976 -0.1594640775 -0.0477647759 0.0000000000 -0.0401672864 0.0099776953 0.0000000000\n" " 20.1350286776 -0.3395538298 -0.1966123125 -0.0622802590 0.0000000000 -0.1384353363 0.0369505072 0.0000000000\n" " 7.7970699880 -0.0514349592 0.1015781624 0.0362142447 0.0000000000 -0.3280724073 0.0855552742 0.0000000000\n" " 3.0126365952 0.0007938866 0.6138991409 0.2684108647 0.0000000000 -0.4389286243 0.1342617724 0.0000000000\n" " 1.1536933283 0.0000152963 0.4217267721 0.3164997698 0.0000000000 -0.2544553578 -0.0014632113 0.0000000000\n" " 0.3215383280 -0.0000675058 0.0171213835 -0.5537569632 0.0000000000 -0.0222713737 -0.4583562382 0.0000000000\n" " 0.1132249636 0.0000282717 -0.0013106938 -0.6608856513 1.0000000000 0.0035467037 -0.6194427763 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 -0.0023114207 0.0005787895 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 -0.0110744755 0.0029302708 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 -0.0514807115 0.0130835082 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 -0.1716941092 0.0469534420 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 -0.3732355043 0.1006399940 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 -0.4305581327 0.1364700825 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 0.0000000000 -0.0060298501 -0.5504601345 0.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 1.0000000000 0.0003271252 -0.5191181650 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 -0.0025280039 0.0006830870 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 -0.0122585511 0.0034185387 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 -0.0575128029 0.0158200681 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 -0.1899219376 0.0551163883 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 -0.3975202657 0.1178364339 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 -0.4219856265 0.1353291071 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 0.0000000000 0.0006566296 -0.5644015152 0.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 1.0000000000 -0.0009601988 -0.4712031290 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 -0.0027461074 0.0007848141 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 -0.0132763202 0.0038538083 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 -0.0625171637 0.0182320502 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 -0.2041393264 0.0620073474 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 -0.4143068471 0.1319770088 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 -0.4107049745 0.1291981811 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 0.0000000000 0.0044892009 -0.5671711751 0.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 1.0000000000 -0.0015760776 -0.4254457201 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 -0.0027433029 0.0008170301 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 -0.0134329689 0.0040333465 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 -0.0636580890 0.0193733027 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 -0.2085598634 0.0657449676 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 -0.4214027465 0.1412356088 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 -0.4060028434 0.1270698508 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 0.0000000000 0.0056716141 -0.5665305364 0.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 1.0000000000 -0.0017347653 -0.3971352648 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H TZV-ALL-PADE\n" " 1\n" " 1 0 0 5 3\n" " 47.6766821949 -0.0039912598 0.0000000000 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000 0.0000000000\n" " 0.4620756821 -0.2465524925 1.0000000000 0.0000000000\n" " 0.1633279056 -0.6895969065 0.0000000000 1.0000000000\n" "#","\n" "H TZVP-ALL-PADE\n" " 2\n" " 1 0 0 5 3\n" " 47.6766821949 -0.0039912598 0.0000000000 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000 0.0000000000\n" " 0.4620756821 -0.2465524925 1.0000000000 0.0000000000\n" " 0.1633279056 -0.6895969065 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He TZV-ALL-PADE\n" " 1\n" " 1 0 0 6 3\n" " 204.6501154200 0.0030044482 0.0000000000 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000 0.0000000000\n" " 0.5990792530 0.4724594508 1.0000000000 0.0000000000\n" " 0.1799489287 0.2977187692 0.0000000000 1.0000000000\n" "#","\n" "He TZVP-ALL-PADE\n" " 2\n" " 1 0 0 6 3\n" " 204.6501154200 0.0030044482 0.0000000000 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000 0.0000000000\n" " 0.5990792530 0.4724594508 1.0000000000 0.0000000000\n" " 0.1799489287 0.2977187692 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "B TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 0.0000000000 -0.0194224027 0.0000000000 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 0.0000000000 -0.0637848437 0.0000000000 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 0.0000000000 -0.2445403926 0.0000000000 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 1.0000000000 0.0000000000 -0.4653071695 1.0000000000 0.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 0.0000000000 1.0000000000 -0.4454718873 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 0.0000000000 -0.0207269323 0.0000000000 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 0.0000000000 -0.0735133778 0.0000000000 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 0.0000000000 -0.2717786632 0.0000000000 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 1.0000000000 0.0000000000 -0.4752358588 1.0000000000 0.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 0.0000000000 1.0000000000 -0.4103141270 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 0.0000000000 -0.0210878424 0.0000000000 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 0.0000000000 -0.0789077492 0.0000000000 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 0.0000000000 -0.2857497167 0.0000000000 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 1.0000000000 0.0000000000 -0.4787797641 1.0000000000 0.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 0.0000000000 1.0000000000 -0.3946908536 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 0.0000000000 -0.0212313047 0.0000000000 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 0.0000000000 -0.0827974544 0.0000000000 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 0.0000000000 -0.2949296208 0.0000000000 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 1.0000000000 0.0000000000 -0.4802452851 1.0000000000 0.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 0.0000000000 1.0000000000 -0.3854659989 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 0.0000000000 -0.0213060126 0.0000000000 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 0.0000000000 -0.0858798131 0.0000000000 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 0.0000000000 -0.3015970754 0.0000000000 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 1.0000000000 0.0000000000 -0.4808474043 1.0000000000 0.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 0.0000000000 1.0000000000 -0.3792605287 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 0.0000000000 -0.0213531723 0.0000000000 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 0.0000000000 -0.0884397798 0.0000000000 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 0.0000000000 -0.3067173307 0.0000000000 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 1.0000000000 0.0000000000 -0.4810347809 1.0000000000 0.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 0.0000000000 1.0000000000 -0.3747659865 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Al TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 0.0000000000 -0.0020283510 0.0003943314 0.0000000000 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 0.0000000000 -0.0096153064 0.0020649970 0.0000000000 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 0.0000000000 -0.0438990222 0.0086117474 0.0000000000 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 0.0000000000 -0.1486831836 0.0325680927 0.0000000000 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 0.0000000000 -0.3395431168 0.0689924793 0.0000000000 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 0.0000000000 -0.4356046359 0.1128895908 0.0000000000 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 1.0000000000 0.0000000000 -0.0176080423 -0.4885175925 1.0000000000 0.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 0.0000000000 1.0000000000 0.0038180642 -0.5990452444 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 0.0000000000 -0.0020435691 0.0004608501 0.0000000000 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 0.0000000000 -0.0098284202 0.0024034582 0.0000000000 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 0.0000000000 -0.0454264531 0.0103657478 0.0000000000 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 0.0000000000 -0.1542320032 0.0386846044 0.0000000000 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 0.0000000000 -0.3498959381 0.0835955571 0.0000000000 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 0.0000000000 -0.4363611647 0.1290968861 0.0000000000 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 1.0000000000 0.0000000000 -0.0131604244 -0.5256989764 1.0000000000 0.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 0.0000000000 1.0000000000 0.0021025311 -0.5604030966 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 0.0000000000 -0.0023114207 0.0005787895 0.0000000000 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 0.0000000000 -0.0110744755 0.0029302708 0.0000000000 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 0.0000000000 -0.0514807115 0.0130835082 0.0000000000 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 0.0000000000 -0.1716941092 0.0469534420 0.0000000000 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 0.0000000000 -0.3732355043 0.1006399940 0.0000000000 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 0.0000000000 -0.4305581327 0.1364700825 0.0000000000 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 1.0000000000 0.0000000000 -0.0060298501 -0.5504601345 1.0000000000 0.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 0.0000000000 1.0000000000 0.0003271252 -0.5191181650 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 0.0000000000 -0.0025280039 0.0006830870 0.0000000000 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 0.0000000000 -0.0122585511 0.0034185387 0.0000000000 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 0.0000000000 -0.0575128029 0.0158200681 0.0000000000 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 0.0000000000 -0.1899219376 0.0551163883 0.0000000000 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 0.0000000000 -0.3975202657 0.1178364339 0.0000000000 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 0.0000000000 -0.4219856265 0.1353291071 0.0000000000 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 1.0000000000 0.0000000000 0.0006566296 -0.5644015152 1.0000000000 0.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 0.0000000000 1.0000000000 -0.0009601988 -0.4712031290 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 0.0000000000 -0.0027461074 0.0007848141 0.0000000000 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 0.0000000000 -0.0132763202 0.0038538083 0.0000000000 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 0.0000000000 -0.0625171637 0.0182320502 0.0000000000 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 0.0000000000 -0.2041393264 0.0620073474 0.0000000000 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 0.0000000000 -0.4143068471 0.1319770088 0.0000000000 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 0.0000000000 -0.4107049745 0.1291981811 0.0000000000 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 1.0000000000 0.0000000000 0.0044892009 -0.5671711751 1.0000000000 0.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 0.0000000000 1.0000000000 -0.0015760776 -0.4254457201 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 0.0000000000 -0.0027433029 0.0008170301 0.0000000000 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 0.0000000000 -0.0134329689 0.0040333465 0.0000000000 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 0.0000000000 -0.0636580890 0.0193733027 0.0000000000 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 0.0000000000 -0.2085598634 0.0657449676 0.0000000000 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 0.0000000000 -0.4214027465 0.1412356088 0.0000000000 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 0.0000000000 -0.4060028434 0.1270698508 0.0000000000 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 1.0000000000 0.0000000000 0.0056716141 -0.5665305364 1.0000000000 0.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 0.0000000000 1.0000000000 -0.0017347653 -0.3971352648 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H DZV-ALL-BLYP\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0043584463 0.0000000000\n" " 7.2138252786 -0.0280413054 0.0000000000\n" " 1.6553477814 -0.1607911988 0.0000000000\n" " 0.4620756821 -0.2616974130 0.0000000000\n" " 0.1633279056 -0.6663250351 1.0000000000\n" "#","\n" "H DZVP-ALL-BLYP\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0043584463 0.0000000000\n" " 7.2138252786 -0.0280413054 0.0000000000\n" " 1.6553477814 -0.1607911988 0.0000000000\n" " 0.4620756821 -0.2616974130 0.0000000000\n" " 0.1633279056 -0.6663250351 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O TZVP-ALL-BLYP\n" " 2\n" " 1 0 1 9 4 3\n" " 8664.6907364270 -0.0010398418 0.0002426467 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1304.2944310248 -0.0079828203 0.0018962898 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 295.9693605095 -0.0406371136 0.0096067682 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 82.2047238380 -0.1536198678 0.0392806838 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.1299697483 -0.4014912128 0.1153729549 0.0000000000 0.0000000000 -0.0218982495 0.0000000000 0.0000000000\n" " 8.1128473457 -0.4659531883 0.2128198124 0.0000000000 0.0000000000 -0.0836678585 0.0000000000 0.0000000000\n" " 2.5105499839 -0.0915561133 -0.0513764869 0.0000000000 0.0000000000 -0.2995070193 0.0000000000 0.0000000000\n" " 0.7657968411 0.0075189734 -0.7008547943 1.0000000000 0.0000000000 -0.4814704278 1.0000000000 0.0000000000\n" " 0.2109431242 -0.0018090393 -0.3792651362 0.0000000000 1.0000000000 -0.3804918653 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F TZVP-ALL-BLYP\n" " 2\n" " 1 0 1 9 4 3\n" " 11534.0506179760 -0.0009798237 0.0002305539 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4518540745 -0.0075252319 0.0018012871 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 393.7045510622 -0.0384982409 0.0091753398 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 108.8690799446 -0.1483161618 0.0381319658 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 32.9489612499 -0.4001274801 0.1157679180 0.0000000000 0.0000000000 -0.0219498202 0.0000000000 0.0000000000\n" " 10.5255415538 -0.4733020735 0.2166396110 0.0000000000 0.0000000000 -0.0867958235 0.0000000000 0.0000000000\n" " 3.2533274751 -0.0924284355 -0.0553420468 0.0000000000 0.0000000000 -0.3063025367 0.0000000000 0.0000000000\n" " 0.9849075495 0.0071803551 -0.7013315907 1.0000000000 0.0000000000 -0.4827220806 1.0000000000 0.0000000000\n" " 0.2674718721 -0.0017014451 -0.3775933468 0.0000000000 1.0000000000 -0.3732467322 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "H 6-31G*\n" " 2\n" " 1 0 0 3 1\n" " 18.7311369600 0.0334946043\n" " 2.8253943650 0.2347269535\n" " 0.6401216923 0.8137573262\n" " 2 0 0 1 1\n" " 0.1612777588 1.0000000000\n" "#","\n" "He 6-31G*\n" " 2\n" " 1 0 0 3 1\n" " 38.4216340000 0.0237660000\n" " 5.7780300000 0.1546790000\n" " 1.2417740000 0.4696300000\n" " 2 0 0 1 1\n" " 0.2979640000 1.0000000000\n" "#","\n" "Li 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 642.4189150000 0.0021426078\n" " 96.7985153000 0.0162088715\n" " 22.0911212000 0.0773155725\n" " 6.2010702500 0.2457860520\n" " 1.9351176800 0.4701890040\n" " 0.6367357890 0.3454708450\n" " 2 0 1 3 1 1\n" " 2.3249184080 -0.0350917459 0.0089415080\n" " 0.6324303556 -0.1912328440 0.1410094640\n" " 0.0790534347 1.0839878000 0.9453636950\n" " 3 0 1 1 1 1\n" " 0.0359619718 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "Be 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 1264.5856900000 0.0019447576\n" " 189.9368060000 0.0148350520\n" " 43.1590890000 0.0720905463\n" " 12.0986627000 0.2371541500\n" " 3.8063232200 0.4691986520\n" " 1.2728903000 0.3565202280\n" " 2 0 1 3 1 1\n" " 3.1964630980 -0.1126487290 0.0559801998\n" " 0.7478133038 -0.2295064090 0.2615506110\n" " 0.2199663302 1.1869167700 0.7939723390\n" " 3 0 1 1 1 1\n" " 0.0823099007 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "B 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 2068.8822500000 0.0018662746\n" " 310.6495700000 0.0142514817\n" " 70.6830330000 0.0695516185\n" " 19.8610803000 0.2325729330\n" " 6.2993048400 0.4670787120\n" " 2.1270269700 0.3634314400\n" " 2 0 1 3 1 1\n" " 4.7279710710 -0.1303937970 0.0745975799\n" " 1.1903377360 -0.1307889510 0.3078466770\n" " 0.3594116829 1.1309444800 0.7434568340\n" " 3 0 1 1 1 1\n" " 0.1267512469 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 3047.5248800000 0.0018347371\n" " 457.3695180000 0.0140373228\n" " 103.9486850000 0.0688426222\n" " 29.2101553000 0.2321844430\n" " 9.2866629600 0.4679413480\n" " 3.1639269600 0.3623119850\n" " 2 0 1 3 1 1\n" " 7.8682723500 -0.1193324200 0.0689990666\n" " 1.8812885400 -0.1608541520 0.3164239610\n" " 0.5442492580 1.1434564400 0.7443082910\n" " 3 0 1 1 1 1\n" " 0.1687144782 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "N 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 4173.5114600000 0.0018347722\n" " 627.4579110000 0.0139946270\n" " 142.9020930000 0.0685865518\n" " 40.2343293000 0.2322408730\n" " 12.8202129000 0.4690699480\n" " 4.3904370100 0.3604551990\n" " 2 0 1 3 1 1\n" " 11.6263618600 -0.1149611820 0.0675797439\n" " 2.7162798070 -0.1691174790 0.3239072960\n" " 0.7722183966 1.1458519500 0.7408951400\n" " 3 0 1 1 1 1\n" " 0.2120314975 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 5484.6716600000 0.0018310744\n" " 825.2349460000 0.0139501722\n" " 188.0469580000 0.0684450781\n" " 52.9645000000 0.2327143360\n" " 16.8975704000 0.4701928980\n" " 5.7996353400 0.3585208530\n" " 2 0 1 3 1 1\n" " 15.5396162500 -0.1107775490 0.0708742682\n" " 3.5999335860 -0.1480262620 0.3397528390\n" " 1.0137617500 1.1307670100 0.7271585770\n" " 3 0 1 1 1 1\n" " 0.2700058226 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 7001.7130900000 0.0018196169\n" " 1051.3660900000 0.0139160796\n" " 239.2856900000 0.0684053245\n" " 67.3974453000 0.2331857600\n" " 21.5199573000 0.4712674390\n" " 7.4031013000 0.3566185460\n" " 2 0 1 3 1 1\n" " 20.8479528000 -0.1085069750 0.0716287243\n" " 4.8083083400 -0.1464516580 0.3459121030\n" " 1.3440698600 1.1286885800 0.7224699570\n" " 3 0 1 1 1 1\n" " 0.3581513930 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "Ne 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 8425.8515300000 0.0018843480\n" " 1268.5194000000 0.0143368994\n" " 289.6214140000 0.0701096233\n" " 81.8590040000 0.2373732660\n" " 26.2515079000 0.4730071260\n" " 9.0947205100 0.3484012410\n" " 2 0 1 3 1 1\n" " 26.5321310000 -0.1071182870 0.0719095885\n" " 6.1017550100 -0.1461638210 0.3495133720\n" " 1.6962715300 1.1277735000 0.7199405120\n" " 3 0 1 1 1 1\n" " 0.4458187000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "Na 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 9993.2000000000 0.0019376600\n" " 1499.8900000000 0.0148070000\n" " 341.9510000000 0.0727055000\n" " 94.6796000000 0.2526290000\n" " 29.7345000000 0.4932420000\n" " 10.0063000000 0.3131690000\n" " 2 0 1 6 1 1\n" " 150.9630000000 -0.0035420800 0.0050016600\n" " 35.5878000000 -0.0439588000 0.0355109000\n" " 11.1683000000 -0.1097520000 0.1428250000\n" " 3.9020100000 0.1873980000 0.3386200000\n" " 1.3817700000 0.6466990000 0.4515790000\n" " 0.4663820000 0.3060580000 0.2732710000\n" " 3 0 1 3 1 1\n" " 0.4979660000 -0.2485030000 -0.0230225000\n" " 0.0843529000 -0.1317040000 0.9503590000\n" " 0.0666350000 1.2335200000 0.0598579000\n" " 4 0 1 1 1 1\n" " 0.0259544000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1750000000 1.0000000000\n" "#","\n" "Mg 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 11722.8000000000 0.0019778300\n" " 1759.9300000000 0.0151140000\n" " 400.8460000000 0.0739108000\n" " 112.8070000000 0.2491910000\n" " 35.9997000000 0.4879280000\n" " 12.1828000000 0.3196620000\n" " 2 0 1 6 1 1\n" " 189.1800000000 -0.0032371700 0.0049281300\n" " 45.2119000000 -0.0410079000 0.0349888000\n" " 14.3563000000 -0.1126000000 0.1407250000\n" " 5.1388600000 0.1486330000 0.3336420000\n" " 1.9065200000 0.6164970000 0.4449400000\n" " 0.7058870000 0.3648290000 0.2692540000\n" " 3 0 1 3 1 1\n" " 0.9293400000 -0.2122900000 -0.0224192000\n" " 0.2690350000 -0.1079850000 0.1922710000\n" " 0.1173790000 1.1758400000 0.8461810000\n" " 4 0 1 1 1 1\n" " 0.0421061000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1750000000 1.0000000000\n" "#","\n" "Al 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 13983.1000000000 0.0019426700\n" " 2098.7500000000 0.0148599000\n" " 477.7050000000 0.0728494000\n" " 134.3600000000 0.2468300000\n" " 42.8709000000 0.4872580000\n" " 14.5189000000 0.3234960000\n" " 2 0 1 6 1 1\n" " 239.6680000000 -0.0029261900 0.0046028500\n" " 57.4419000000 -0.0374083000 0.0331990000\n" " 18.2859000000 -0.1144870000 0.1362820000\n" " 6.5991400000 0.1156350000 0.3304760000\n" " 2.4904900000 0.6125950000 0.4491460000\n" " 0.9445450000 0.3937990000 0.2657040000\n" " 3 0 1 3 1 1\n" " 1.2779000000 -0.2276060000 -0.0175126000\n" " 0.3975900000 0.0014458300 0.2445330000\n" " 0.1600950000 1.0927900000 0.8049340000\n" " 4 0 1 1 1 1\n" " 0.0556577000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3250000000 1.0000000000\n" "#","\n" "Si 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 16115.9000000000 0.0019594800\n" " 2425.5800000000 0.0149288000\n" " 553.8670000000 0.0728478000\n" " 156.3400000000 0.2461300000\n" " 50.0683000000 0.4859140000\n" " 17.0178000000 0.3250020000\n" " 2 0 1 6 1 1\n" " 292.7180000000 -0.0027809400 0.0044382600\n" " 69.8731000000 -0.0357146000 0.0326679000\n" " 22.3363000000 -0.1149850000 0.1347210000\n" " 8.1503900000 0.0935634000 0.3286780000\n" " 3.1345800000 0.6030170000 0.4496400000\n" " 1.2254300000 0.4189590000 0.2613720000\n" " 3 0 1 3 1 1\n" " 1.7273800000 -0.2446300000 -0.0177951000\n" " 0.5729220000 0.0043157200 0.2535390000\n" " 0.2221920000 1.0981800000 0.8006690000\n" " 4 0 1 1 1 1\n" " 0.0778369000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 19413.3000000000 0.0018516000\n" " 2909.4200000000 0.0142062000\n" " 661.3640000000 0.0699995000\n" " 185.7590000000 0.2400790000\n" " 59.1943000000 0.4847620000\n" " 20.0310000000 0.3352000000\n" " 2 0 1 6 1 1\n" " 339.4780000000 -0.0027821700 0.0045646200\n" " 81.0101000000 -0.0360499000 0.0336936000\n" " 25.8780000000 -0.1166310000 0.1397550000\n" " 9.4522100000 0.0968328000 0.3393620000\n" " 3.6656600000 0.6144180000 0.4509210000\n" " 1.4674600000 0.4037980000 0.2385860000\n" " 3 0 1 3 1 1\n" " 2.1562300000 -0.2529230000 -0.0177653000\n" " 0.7489970000 0.0328517000 0.2740580000\n" " 0.2831450000 1.0812500000 0.7854210000\n" " 4 0 1 1 1 1\n" " 0.0998317000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 21917.1000000000 0.0018692400\n" " 3301.4900000000 0.0142303000\n" " 754.1460000000 0.0696962000\n" " 212.7110000000 0.2384870000\n" " 67.9896000000 0.4833070000\n" " 23.0515000000 0.3380740000\n" " 2 0 1 6 1 1\n" " 423.7350000000 -0.0023767700 0.0040610100\n" " 100.7100000000 -0.0316930000 0.0306813000\n" " 32.1599000000 -0.1133170000 0.1304520000\n" " 11.8079000000 0.0560900000 0.3272050000\n" " 4.6311000000 0.5922550000 0.4528510000\n" " 1.8702500000 0.4550060000 0.2560420000\n" " 3 0 1 3 1 1\n" " 2.6158400000 -0.2503740000 -0.0145105000\n" " 0.9221670000 0.0669570000 0.3102630000\n" " 0.3412870000 1.0545100000 0.7544830000\n" " 4 0 1 1 1 1\n" " 0.1171670000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 25180.1000000000 0.0018329600\n" " 3780.3500000000 0.0140342000\n" " 860.4740000000 0.0690974000\n" " 242.1450000000 0.2374520000\n" " 77.3349000000 0.4830340000\n" " 26.2470000000 0.3398560000\n" " 2 0 1 6 1 1\n" " 491.7650000000 -0.0022973900 0.0039894000\n" " 116.9840000000 -0.0307137000 0.0303177000\n" " 37.4153000000 -0.1125280000 0.1298800000\n" " 13.7834000000 0.0450163000 0.3279510000\n" " 5.4521500000 0.5893530000 0.4535270000\n" " 2.2258800000 0.4652060000 0.2521540000\n" " 3 0 1 3 1 1\n" " 3.1864900000 -0.2518270000 -0.0142993000\n" " 1.1442700000 0.0615890000 0.3235720000\n" " 0.4203770000 1.0601800000 0.7435070000\n" " 4 0 1 1 1 1\n" " 0.1426570000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 28348.3000000000 0.0018252600\n" " 4257.6200000000 0.0139686000\n" " 969.8570000000 0.0687073000\n" " 273.2630000000 0.2362040000\n" " 87.3695000000 0.4822140000\n" " 29.6867000000 0.3420430000\n" " 2 0 1 6 1 1\n" " 575.8910000000 -0.0021597200 0.0038066500\n" " 136.8160000000 -0.0290775000 0.0292305000\n" " 43.8098000000 -0.1108270000 0.1264670000\n" " 16.2094000000 0.0276999000 0.3235100000\n" " 6.4608400000 0.5776130000 0.4548960000\n" " 2.6511400000 0.4886880000 0.2566300000\n" " 3 0 1 3 1 1\n" " 3.8602800000 -0.2555920000 -0.0159197000\n" " 1.4137300000 0.0378066000 0.3246460000\n" " 0.5166460000 1.0805600000 0.7439900000\n" " 4 0 1 1 1 1\n" " 0.1738880000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H SZV-GTH-PADE\n" " 1\n" " 1 0 0 4 1\n" " 8.3744350009 -0.0238943732\n" " 1.8058681460 -0.1397943259\n" " 0.4852531032 -0.2530970874\n" " 0.1658235797 -0.6955307423\n" "#","\n" "H DZV-GTH-PADE\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0238943732 0.0000000000\n" " 1.8058681460 -0.1397943259 0.0000000000\n" " 0.4852531032 -0.2530970874 0.0000000000\n" " 0.1658235797 -0.6955307423 1.0000000000\n" "#","\n" "H DZV-GTH-PADE-CONFINED\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380594 0.0000000000\n" " 1.8058681460 -0.1333808815 0.0000000000\n" " 0.4852531032 -0.3995678166 0.0000000000\n" " 0.1658235797 -0.5531027153 1.0000000000\n" "#","\n" "H DZVP-GTH-PADE\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0238943732 0.0000000000\n" " 1.8058681460 -0.1397943259 0.0000000000\n" " 0.4852531032 -0.2530970874 0.0000000000\n" " 0.1658235797 -0.6955307423 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H DZVP-GTH-PADE-CONFINED\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380594 0.0000000000\n" " 1.8058681460 -0.1333808815 0.0000000000\n" " 0.4852531032 -0.3995678166 0.0000000000\n" " 0.1658235797 -0.5531027153 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H MAO-PRIM\n" " 2\n" " 1 0 0 4 4\n" " 8.3744350009 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.8058681460 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4852531032 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1658235797 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-GTH-PADE\n" " 1\n" " 1 0 0 4 2\n" " 10.9449874915 -0.0753847695 0.0000000000\n" " 2.7220103814 -0.2478759473 0.0000000000\n" " 0.7380855468 -0.4844314598 0.0000000000\n" " 0.2044485380 -0.3633328585 1.0000000000\n" "#","\n" "He DZVP-GTH-PADE\n" " 2\n" " 1 0 0 4 2\n" " 10.9449874915 -0.0753847695 0.0000000000\n" " 2.7220103814 -0.2478759473 0.0000000000\n" " 0.7380855468 -0.4844314598 0.0000000000\n" " 0.2044485380 -0.3633328585 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-GTH-PADE\n" " 1\n" " 1 0 0 6 3\n" " 9.0645724591 0.1412707699 -0.0257336579 0.0000000000\n" " 4.3479418841 0.2767295609 -0.0520596034 0.0000000000\n" " 1.4344377059 0.4501408198 -0.1264254986 0.0000000000\n" " 0.4969595308 0.2616803664 -0.1023799272 0.0000000000\n" " 0.0729934685 0.0116600998 0.5635942604 0.0000000000\n" " 0.0264321968 -0.0038582262 0.5289910438 1.0000000000\n" "#","\n" "Li DZVP-GTH-PADE\n" " 1\n" " 1 0 1 6 3 3\n" " 9.0645724591 0.1412707699 -0.0257336579 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3479418841 0.2767295609 -0.0520596034 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4344377059 0.4501408198 -0.1264254986 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4969595308 0.2616803664 -0.1023799272 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729934685 0.0116600998 0.5635942604 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264321968 -0.0038582262 0.5289910438 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-GTH-PADE\n" " 1\n" " 1 0 0 6 3\n" " 16.1605993866 0.1059191045 -0.0252247893 0.0000000000\n" " 8.2781849385 0.3141963412 -0.0592178229 0.0000000000\n" " 2.7429504166 0.4327229195 -0.1590666667 0.0000000000\n" " 1.0050808492 0.2646169070 -0.0970095401 0.0000000000\n" " 0.1765058796 0.0128470696 0.5606449178 0.0000000000\n" " 0.0580428345 -0.0034490257 0.5479193518 1.0000000000\n" "#","\n" "Be DZVP-GTH-PADE\n" " 1\n" " 1 0 1 6 3 3\n" " 16.1605993866 0.1059191045 -0.0252247893 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2781849385 0.3141963412 -0.0592178229 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7429504166 0.4327229195 -0.1590666667 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0050808492 0.2646169070 -0.0970095401 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765058796 0.0128470696 0.5606449178 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580428345 -0.0034490257 0.5479193518 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8854072190 0.1420734374 0.0000000000 -0.0759818266 0.0000000000\n" " 0.8566811318 -0.0083272998 0.0000000000 -0.2508295957 0.0000000000\n" " 0.2712977126 -0.6707128588 0.0000000000 -0.4610302659 0.0000000000\n" " 0.0826097889 -0.4241240913 1.0000000000 -0.4419902640 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 4.3362505404 0.1490793580 -0.0878122158\n" " 1.2881820646 -0.0292634544 -0.2775568334\n" " 0.4037764944 -0.6882043984 -0.4712287175\n" " 0.1187878168 -0.3964423560 -0.4058040746\n" "#","\n" "C DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3362505404 0.1490793580 0.0000000000 -0.0878122158 0.0000000000\n" " 1.2881820646 -0.0292634544 0.0000000000 -0.2775568334 0.0000000000\n" " 0.4037764944 -0.6882043984 0.0000000000 -0.4712287175 0.0000000000\n" " 0.1187878168 -0.3964423560 1.0000000000 -0.4058040746 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C DZVP-GTH-PADE-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 4.9036932712 0.1231402806 0.0000000000 -0.0710058771 0.0000000000\n" " 1.6574324667 0.0678620439 0.0000000000 -0.2265440401 0.0000000000\n" " 0.5592463507 -0.5108450721 0.0000000000 -0.4459711159 0.0000000000\n" " 0.1992045030 -0.6156990839 1.0000000000 -0.4501432808 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 6.1527081270 0.1506293354 -0.0950596846\n" " 1.8236453987 -0.0360069142 -0.2918844594\n" " 0.5676671941 -0.6942003416 -0.4739047963\n" " 0.1628232875 -0.3878973877 -0.3893444095\n" "#","\n" "N DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1527081270 0.1506293354 0.0000000000 -0.0950596846 0.0000000000\n" " 1.8236453987 -0.0360069142 0.0000000000 -0.2918844594 0.0000000000\n" " 0.5676671941 -0.6942003416 0.0000000000 -0.4739047963 0.0000000000\n" " 0.1628232875 -0.3878973877 1.0000000000 -0.3893444095 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 8.3044042305 0.1510163077 -0.0995678047\n" " 2.4579452461 -0.0393193874 -0.3011430914\n" " 0.7597363524 -0.6971729792 -0.4750852730\n" " 0.2136387585 -0.3841125601 -0.3798775565\n" "#","\n" "O DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 8.3044042305 0.1510163077 0.0000000000 -0.0995678047 0.0000000000\n" " 2.4579452461 -0.0393193874 0.0000000000 -0.3011430914 0.0000000000\n" " 0.7597363524 -0.6971729792 0.0000000000 -0.4750852730 0.0000000000\n" " 0.2136387585 -0.3841125601 1.0000000000 -0.3798775565 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O MAO-PRIM\n" " 3\n" " 1 0 0 4 4\n" " 8.3044042305 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.4579452461 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7597363524 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2136387585 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 4 4\n" " 8.3044042305 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.4579452461 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7597363524 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2136387585 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-PADE-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 8.8580368553 0.1363369629 0.0000000000 -0.0886958138 0.0000000000\n" " 2.7922584694 0.0206593813 0.0000000000 -0.2694541227 0.0000000000\n" " 0.9068691246 -0.6094274296 0.0000000000 -0.4594270880 0.0000000000\n" " 0.2872216831 -0.5022915093 1.0000000000 -0.4103120494 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 10.7079864789 0.1525178335 -0.1028649155\n" " 3.1757211287 -0.0450362306 -0.3085266108\n" " 0.9750975998 -0.6987425203 -0.4757649137\n" " 0.2701247513 -0.3801470840 -0.3724955108\n" "#","\n" "F DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7079864789 0.1525178335 0.0000000000 -0.1028649155 0.0000000000\n" " 3.1757211287 -0.0450362306 0.0000000000 -0.3085266108 0.0000000000\n" " 0.9750975998 -0.6987425203 0.0000000000 -0.4757649137 0.0000000000\n" " 0.2701247513 -0.3801470840 1.0000000000 -0.3724955108 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 13.7594457910 0.1483426269 -0.1044040672\n" " 4.0425314051 -0.0356303947 -0.3108896070\n" " 1.2355194419 -0.7010725739 -0.4760215931\n" " 0.3367033579 -0.3841124763 -0.3721573833\n" "#","\n" "Ne DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 13.7594457910 0.1483426269 0.0000000000 -0.1044040672 0.0000000000\n" " 4.0425314051 -0.0356303947 0.0000000000 -0.3108896070 0.0000000000\n" " 1.2355194419 -0.7010725739 0.0000000000 -0.4760215931 0.0000000000\n" " 0.3367033579 -0.3841124763 1.0000000000 -0.3721573833 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na SZV-GTH-PADE\n" " 1\n" " 2 0 1 6 2 1\n" " 17.6699685720 -0.1362341108 0.0270952595 0.0791962955\n" " 6.9071803380 -0.0645881804 0.0098743015 0.2184099565\n" " 2.6099085380 0.3866064317 -0.0737148250 0.3764868181\n" " 0.9649711690 0.5971408467 -0.2186736173 0.3922334703\n" " 0.3400394180 0.1756759463 -0.0301109343 0.1808450956\n" " 0.0432486776 -0.0017104609 1.0388873735 0.0057698929\n" "#","\n" "Na DZVP-GTH-PADE\n" " 2\n" " 2 0 1 6 3 3\n" " 17.6699685720 -0.1362341108 0.0270952595 0.0000000000 0.0791962955 0.0000000000 0.0000000000\n" " 6.9071803380 -0.0645881804 0.0098743015 0.0000000000 0.2184099565 0.0000000000 0.0000000000\n" " 2.6099085380 0.3866064317 -0.0737148250 0.0000000000 0.3764868181 0.0000000000 0.0000000000\n" " 0.9649711690 0.5971408467 -0.2186736173 0.0000000000 0.3922334703 0.0000000000 0.0000000000\n" " 0.3400394180 0.1756759463 -0.0301109343 0.0000000000 0.1808450956 1.0000000000 0.0000000000\n" " 0.0432486776 -0.0017104609 1.0388873735 1.0000000000 0.0057698929 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-PADE-q10 DZVP-GTH-PADE\n" " 2\n" " 2 0 1 6 3 3\n" " 28.4908976858 -0.0662610173 0.0164990227 0.0000000000 0.0464488574 0.0000000000 0.0000000000\n" " 11.7286146019 -0.1706220696 0.0374304317 0.0000000000 0.1664817432 0.0000000000 0.0000000000\n" " 4.4446432719 0.2494471473 -0.0517267282 0.0000000000 0.3580892342 0.0000000000 0.0000000000\n" " 1.6070987233 0.6423276770 -0.2647575784 0.0000000000 0.4356677176 0.0000000000 0.0000000000\n" " 0.5690818481 0.2933445091 -0.0948604830 0.0000000000 0.2229690408 1.0000000000 0.0000000000\n" " 0.0763499358 -0.0002712350 1.0630089581 1.0000000000 0.0085994850 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-PADE-q2\n" " 2\n" " 3 0 0 4 2\n" " 2.9198644211 -0.0025733539 0.0000000000\n" " 0.8049484892 0.2058124895 0.0000000000\n" " 0.1126554966 -0.6457766724 0.0000000000\n" " 0.0413625487 -0.4747074468 1.0000000000\n" " 3 1 1 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9504243929 0.2820110253 0.0000000000 0.0257292971 0.0000000000\n" " 0.2947542270 -0.2787298974 0.0000000000 -0.2527939401 0.0000000000\n" " 0.1124473777 -0.7495145975 0.0000000000 -0.5124792729 0.0000000000\n" " 0.0396013464 -0.1646066141 1.0000000000 -0.3831309239 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9659628623 0.2842778097 0.0000000000 0.0340618641 0.0000000000\n" " 0.3438400556 -0.1449517389 0.0000000000 -0.2054970468 0.0000000000\n" " 0.1485207596 -0.6897086501 0.0000000000 -0.4772801180 0.0000000000\n" " 0.0719529320 -0.3389750810 1.0000000000 -0.4170196265 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.2032422345 0.3290350445 0.0474539126\n" " 0.4688409786 -0.2533118323 -0.2594473573\n" " 0.1679863234 -0.7870946277 -0.5440929303\n" " 0.0575619526 -0.1909898479 -0.3624010364\n" "#","\n" "Si DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2032422345 0.3290350445 0.0000000000 0.0474539126 0.0000000000\n" " 0.4688409786 -0.2533118323 0.0000000000 -0.2594473573 0.0000000000\n" " 0.1679863234 -0.7870946277 0.0000000000 -0.5440929303 0.0000000000\n" " 0.0575619526 -0.1909898479 1.0000000000 -0.3624010364 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2283393137 0.3224377170 0.0000000000 0.0594606114 0.0000000000\n" " 0.5501858147 -0.1360087627 0.0000000000 -0.2102673957 0.0000000000\n" " 0.2104840660 -0.7254143349 0.0000000000 -0.5133271944 0.0000000000\n" " 0.0912235796 -0.3482519842 1.0000000000 -0.4108824626 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.4961048190 0.3653028603 0.0816119465\n" " 0.7168717560 -0.2125795312 -0.2627452850\n" " 0.2411410649 -0.8136062969 -0.5627188034\n" " 0.0803403985 -0.2362293752 -0.3691372243\n" "#","\n" "P DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4961048190 0.3653028603 0.0000000000 0.0816119465 0.0000000000\n" " 0.7168717560 -0.2125795312 0.0000000000 -0.2627452850 0.0000000000\n" " 0.2411410649 -0.8136062969 0.0000000000 -0.5627188034 0.0000000000\n" " 0.0803403985 -0.2362293752 1.0000000000 -0.3691372243 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.8379557070 0.3832201009 0.1221451195\n" " 1.0358088377 -0.1682229539 -0.2752006797\n" " 0.3298020165 -0.8258487331 -0.5729080701\n" " 0.1073546335 -0.2832847829 -0.3825524954\n" "#","\n" "S DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8379557070 0.3832201009 0.0000000000 0.1221451195 0.0000000000\n" " 1.0358088377 -0.1682229539 0.0000000000 -0.2752006797 0.0000000000\n" " 0.3298020165 -0.8258487331 0.0000000000 -0.5729080701 0.0000000000\n" " 0.1073546335 -0.2832847829 1.0000000000 -0.3825524954 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787841491 0.0000000000 0.1555383208 0.0000000000\n" " 1.3787736290 -0.1239706468 0.0000000000 -0.2931737153 0.0000000000\n" " 0.4264909846 -0.8298219996 0.0000000000 -0.5781090940 0.0000000000\n" " 0.1366672601 -0.3175034120 1.0000000000 -0.3901119426 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 2.6436290990 0.3737616862 0.0000000000 0.1735201807 0.0000000000\n" " 1.6948961534 -0.0996561183 0.0000000000 -0.3100928733 0.0000000000\n" " 0.5231108387 -0.8315195659 0.0000000000 -0.5807563784 0.0000000000\n" " 0.1663306775 -0.3339930421 1.0000000000 -0.3879330018 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K DZVP-GTH-PADE\n" " 2\n" " 3 0 1 6 3 3\n" " 4.9094498551 0.3409782009 -0.0718544684 0.0000000000 -0.0383589744 0.0000000000 0.0000000000\n" " 3.7798462116 -0.7275665906 0.1645679593 0.0000000000 -0.0185547112 0.0000000000 0.0000000000\n" " 1.2616687398 0.2421667415 -0.0492186533 0.0000000000 0.3499301423 0.0000000000 0.0000000000\n" " 0.5208676931 0.7973211939 -0.3638537086 0.0000000000 0.5271250194 0.0000000000 0.0000000000\n" " 0.1977138661 0.2181209543 -0.0636674785 0.0000000000 0.2616666463 1.0000000000 0.0000000000\n" " 0.0313945665 -0.0006704360 1.0746760317 1.0000000000 0.0081708337 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "K DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 6 3 3\n" " 5.0562599816 0.2799518601 -0.0650771209 0.0000000000 -0.0324181496 0.0000000000 0.0000000000\n" " 3.7408592301 -0.6649216195 0.1655178754 0.0000000000 -0.0267570689 0.0000000000 0.0000000000\n" " 1.2850539206 0.2238370548 -0.0537305354 0.0000000000 0.3397270753 0.0000000000 0.0000000000\n" " 0.5337655981 0.7974284526 -0.3684242774 0.0000000000 0.5266222265 0.0000000000 0.0000000000\n" " 0.2033806513 0.2347131143 -0.1192800271 0.0000000000 0.2729583365 1.0000000000 0.0000000000\n" " 0.0366378947 -0.0006397374 1.1060765731 1.0000000000 0.0099036017 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "# Calcium\n" "# \n" "# Z(nuc) = 20\n" "# Z(eff) = 10\n" "# E(ref) = -36.614864 a.u. (DZV)\n" "# \n" "Ca DZVP-GTH-PADE-q10 DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 3 2\n" " 2.8976614522 0.6350314914 0.2038750228 0.0000000000 0.1518240054 0.0000000000\n" " 1.4766172782 -0.6715522195 -0.2579542636 0.0000000000 -0.5771864343 0.0000000000\n" " 0.4495737541 -0.8068315347 -0.4282041397 0.0000000000 -0.6174577485 0.0000000000\n" " 0.0520990913 -0.0145128759 1.1194316117 1.0000000000 -0.0373205562 1.0000000000\n" " 3 2 2 1 1\n" " 0.1088000000 1.0000000000\n" "#","\n" "# Scandium\n" "# \n" "# Z(nuc) = 21\n" "# Z(eff) = 11\n" "# E(ref) = -46.447044 a.u.\n" "# \n" "Sc DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.6177243131 -0.0025816821 0.0020846187 0.0000000000 -0.0990370320 0.0000000000 0.0417638000 -0.0265577865\n" " 3.5261707573 -0.4535887309 0.1333741760 0.0000000000 0.0830531204 0.0000000000 0.1794321279 -0.1237289932\n" " 1.3475088268 0.5851881107 -0.2044293970 0.0000000000 0.5068532353 0.0000000000 0.3071566485 -0.2111871137\n" " 0.5296968643 0.6915603927 -0.4643940847 0.0000000000 0.4818000644 0.0000000000 0.3729120547 -0.2265277705\n" " 0.1812303900 0.0523300246 0.1894325403 0.0000000000 0.0896287007 1.0000000000 0.3594956734 0.1297694309\n" " 0.0515699896 -0.0005424240 0.9922288961 1.0000000000 -0.0048406883 0.0000000000 0.1446776127 0.8641342523\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# E(ref) = -57.906922 a.u.\n" "# \n" "Ti DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.8662560704 -0.0142007165 0.0051486133 0.0000000000 -0.1058111845 0.0000000000 0.0536511054 -0.0316785505\n" " 3.8950658856 -0.4494837964 0.1327129568 0.0000000000 0.1048087858 0.0000000000 0.1933632803 -0.1267950119\n" " 1.5117853291 0.6143981202 -0.2143014467 0.0000000000 0.5160204236 0.0000000000 0.3290345604 -0.2122564864\n" " 0.5932516463 0.6730966953 -0.4565151952 0.0000000000 0.4704168448 0.0000000000 0.3780068197 -0.2097541935\n" " 0.2029490001 0.0494956907 0.2060441001 0.0000000000 0.0790813703 1.0000000000 0.3303452351 0.2356257943\n" " 0.0570083591 -0.0007722992 0.9803815034 1.0000000000 -0.0040175351 0.0000000000 0.1067632616 0.8133941640\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# r(cov) = 2.494 a.u.\n" "# E(ref) = -57.768017 a.u.\n" "# \n" "Ti DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.9054508950 -0.0089866342 0.0033403228 0.0000000000 -0.1044805862 0.0000000000 0.0524477349 -0.0208282688\n" " 3.9606136239 -0.4508141066 0.1442719748 0.0000000000 0.0963354612 0.0000000000 0.1891993776 -0.0904000412\n" " 1.5621587965 0.5637837175 -0.2125114543 0.0000000000 0.4935065359 0.0000000000 0.3209566467 -0.1191689233\n" " 0.6278375325 0.6987976039 -0.4744456374 0.0000000000 0.4799614577 0.0000000000 0.3684022594 -0.2436747742\n" " 0.2253690150 0.0716873095 0.0753192189 0.0000000000 0.0995748325 1.0000000000 0.3365998900 0.0009608049\n" " 0.0725661163 -0.0018693598 1.0806476083 1.0000000000 -0.0043939777 0.0000000000 0.1049021142 0.9691386629\n" "#","\n" "# Vanadium\n" "# \n" "# Z(nuc) = 23\n" "# Z(eff) = 13\n" "# E(ref) = -71.188765 a.u.\n" "# \n" "V DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.8747524263 -0.0443841418 0.0126347723 0.0000000000 -0.1144265054 0.0000000000 0.0651523717 -0.0186113262\n" " 4.0933440615 -0.4317842194 0.1208086573 0.0000000000 0.1421671368 0.0000000000 0.2101756320 -0.0735897040\n" " 1.6384502186 0.6727841327 -0.2278558403 0.0000000000 0.5251937993 0.0000000000 0.3407334498 -0.0858251101\n" " 0.6438497632 0.6346678975 -0.4409702916 0.0000000000 0.4484462388 0.0000000000 0.3767018108 -0.2121800208\n" " 0.2206224245 0.0418256229 0.2306573940 0.0000000000 0.0670590120 1.0000000000 0.3023326440 0.0291442397\n" " 0.0614716642 -0.0007065154 0.9629588869 1.0000000000 -0.0031794120 0.0000000000 0.0836085023 0.9675641584\n" "#","\n" "# Chromium\n" "# \n" "# Z(nuc) = 24\n" "# Z(eff) = 14\n" "# E(ref) = -86.421763 a.u.\n" "# \n" "Cr DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.4980218808 -0.0608783001 0.0160558551 0.0000000000 -0.0906220888 0.0000000000 0.0912009861 -0.0448527735\n" " 4.3332768421 -0.4362254023 0.1136246368 0.0000000000 0.1247923043 0.0000000000 0.1856901245 -0.0956642574\n" " 1.8357623166 0.6983227560 -0.2164316105 0.0000000000 0.5242992155 0.0000000000 0.3171108663 -0.1613201508\n" " 0.7086266315 0.6277540640 -0.3811547378 0.0000000000 0.4531101254 0.0000000000 0.3686546467 -0.1825467055\n" " 0.2325535793 0.0471147492 0.1539908695 0.0000000000 0.0676061963 1.0000000000 0.3250452914 0.0506894382\n" " 0.0621290391 -0.0023417403 0.9943414586 1.0000000000 -0.0037177277 0.0000000000 0.1425114774 0.9264839944\n" "#","\n" "# Manganese\n" "# \n" "# Z(nuc) = 25\n" "# Z(eff) = 15\n" "# E(ref) = -103.693822 a.u.\n" "# \n" "Mn DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.2162644620 -0.1392987047 0.0379745482 0.0000000000 -0.0706781641 0.0000000000 0.1231824621 -0.0271916197\n" " 4.3995038116 -0.3474284933 0.1026238058 0.0000000000 0.1421129189 0.0000000000 0.2003862748 -0.0616392441\n" " 1.9735860720 0.7276920861 -0.2459044301 0.0000000000 0.5304230993 0.0000000000 0.3396356204 -0.0508758521\n" " 0.7747355100 0.5917173669 -0.4104364589 0.0000000000 0.4289471268 0.0000000000 0.3764537252 -0.2226457142\n" " 0.2621680644 0.0446992498 0.2379188342 0.0000000000 0.0557678273 1.0000000000 0.2677240676 0.0808460497\n" " 0.0708470020 -0.0024642409 0.9512627458 1.0000000000 -0.0025525092 0.0000000000 0.0617409278 0.9529259336\n" "#","\n" "# Iron\n" "# \n" "# Z(nuc) = 26\n" "# Z(eff) = 16\n" "# E(ref) = -123.167637 a.u.\n" "# \n" "Fe DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.3176581765 -0.2221260103 0.0571340867 0.0000000000 -0.0835047401 0.0000000000 0.1328616119 -0.0265786973\n" " 4.4422592901 -0.2065484249 0.0659015546 0.0000000000 0.2224692471 0.0000000000 0.2337033217 -0.0640748896\n" " 1.9537149970 0.7710412303 -0.2695445185 0.0000000000 0.5334951260 0.0000000000 0.3480430202 -0.0427943670\n" " 0.7755476397 0.5063505210 -0.3754221317 0.0000000000 0.3763681502 0.0000000000 0.3564479505 -0.2349902890\n" " 0.2667047888 0.0299286713 0.2874114014 0.0000000000 0.0390767933 1.0000000000 0.2392969951 0.1437613614\n" " 0.0730205366 -0.0015070313 0.9166672323 1.0000000000 -0.0012748470 0.0000000000 0.0495086684 0.9263257056\n" "#","\n" "# Cobalt\n" "# \n" "# Z(nuc) = 27\n" "# Z(eff) = 17\n" "# E(ref) = -145.074726 a.u.\n" "# \n" "Co DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.2259784105 -0.3348828014 0.0839161925 0.0000000000 -0.0575730412 0.0000000000 0.1703306058 -0.0329647329\n" " 4.0899376713 0.0273051456 0.0043597020 0.0000000000 0.3114547257 0.0000000000 0.2731993143 -0.0646674934\n" " 1.7906737831 0.8008414138 -0.3063471909 0.0000000000 0.5288889096 0.0000000000 0.3481942056 -0.0406024695\n" " 0.7202346272 0.3743034819 -0.3094552251 0.0000000000 0.2922852722 0.0000000000 0.3268542552 -0.2546151534\n" " 0.2531395288 0.0119133243 0.3681678234 0.0000000000 0.0193344238 1.0000000000 0.1983580019 0.2591729030\n" " 0.0724847250 -0.0002875656 0.8518740079 1.0000000000 -0.0000074411 0.0000000000 0.0347706125 0.8655847940\n" "#","\n" "# Nickel\n" "# \n" "# Z(nuc) = 28\n" "# Z(eff) = 18\n" "# E(ref) = -169.014868 a.u. (DZV)\n" "# \n" "Ni SZV-GTH-PADE-q18 SZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 1 1\n" " 9.1083628918 -0.3318472282 0.0814757465 -0.0734890997 0.1546631104\n" " 4.7077006381 0.0215195281 0.0083255182 0.3143433748 0.2793018964\n" " 2.0075563311 0.7820035505 -0.2919821887 0.5321470345 0.3572041353\n" " 0.7991545346 0.3981367371 -0.3174059212 0.3004714229 0.3257021539\n" " 0.2801233689 0.0110672576 0.3537517680 0.0204262431 0.1980609814\n" " 0.0777183285 0.0003240675 0.8632205228 0.0000512651 0.0349659775\n" "#","\n" "Ni SZV-GTH-PADE-CONFINED-q18 SZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 2 1 1\n" " 9.1839262940 -0.3194864695 0.0820798088 -0.0753895848 0.1482345528\n" " 4.8715988710 -0.0166115410 0.0216589790 0.2902126119 0.2678833452\n" " 2.1295830130 0.7470874340 -0.2893085485 0.5183042283 0.3474007726\n" " 0.8692986192 0.4468007103 -0.3470085291 0.3282859990 0.3267208363\n" " 0.3160013087 0.0241429107 0.2421486666 0.0331477696 0.2129571216\n" " 0.0996764017 -0.0007297350 0.9538524021 -0.0007168330 0.0399879500\n" "#","\n" "Ni DZV-GTH-PADE-q18 DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 9.1083628918 -0.3318472282 0.0814757465 0.0000000000 -0.0734890997 0.0000000000 0.1546631104 -0.0270446181\n" " 4.7077006381 0.0215195281 0.0083255182 0.0000000000 0.3143433748 0.0000000000 0.2793018964 -0.0621439339\n" " 2.0075563311 0.7820035505 -0.2919821887 0.0000000000 0.5321470345 0.0000000000 0.3572041353 -0.0346035868\n" " 0.7991545346 0.3981367371 -0.3174059212 0.0000000000 0.3004714229 0.0000000000 0.3257021539 -0.2542426351\n" " 0.2801233689 0.0110672576 0.3537517680 0.0000000000 0.0204262431 1.0000000000 0.1980609814 0.2437546148\n" " 0.0777183285 0.0003240675 0.8632205228 1.0000000000 0.0000512651 0.0000000000 0.0349659775 0.8783250274\n" "#","\n" "Ni DZV-GTH-PADE-CONFINED-q18 DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 3 2 2\n" " 9.1839262940 -0.3194864695 0.0820798088 0.0000000000 -0.0753895848 0.0000000000 0.1482345528 -0.0303971456\n" " 4.8715988710 -0.0166115410 0.0216589790 0.0000000000 0.2902126119 0.0000000000 0.2678833452 -0.0724968085\n" " 2.1295830130 0.7470874340 -0.2893085485 0.0000000000 0.5183042283 0.0000000000 0.3474007726 -0.0383232476\n" " 0.8692986192 0.4468007103 -0.3470085291 0.0000000000 0.3282859990 0.0000000000 0.3267208363 -0.2746023312\n" " 0.3160013087 0.0241429107 0.2421486666 0.0000000000 0.0331477696 1.0000000000 0.2129571216 0.2181292551\n" " 0.0996764017 -0.0007297350 0.9538524021 1.0000000000 -0.0007168330 0.0000000000 0.0399879500 0.8850545821\n" "#","\n" "# Nickel\n" "# \n" "# Z(nuc) = 28\n" "# Z(eff) = 10\n" "# E(ref) = -36.954230 a.u.\n" "# \n" "Ni DZV-GTH-PADE-q10\n" " 1\n" " 3 0 2 6 2 2 2\n" " 5.2465385132 -0.0195686939 0.0000000000 0.0016517420 0.0000000000 0.2741056767 -0.0137577062\n" " 2.6090644689 0.0813873400 0.0000000000 -0.0052396301 0.0000000000 0.3543794794 -0.0268890369\n" " 1.1046166843 -0.2728677440 0.0000000000 0.0619959272 0.0000000000 0.3296854386 0.0126199016\n" " 0.4448692089 -0.0688949785 0.0000000000 -0.0614220277 0.0000000000 0.2335185166 -0.3679775516\n" " 0.1687659415 0.6206874931 0.0000000000 -0.2903889111 1.0000000000 0.0992461972 0.4117542785\n" " 0.0576654368 0.5625306587 1.0000000000 -0.7554832177 0.0000000000 0.0101944431 0.7852149041\n" "#","\n" "# Copper\n" "# \n" "# Z(nuc) = 29\n" "# Z(eff) = 11\n" "# E(ref) = -47.922396 a.u.\n" "# \n" "Cu DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 2 2\n" " 5.7799826780 -0.0137622398 0.0000000000 -0.0019325638 0.0000000000 0.2572828355 -0.0100377492\n" " 2.9223072565 0.0624852089 0.0000000000 0.0066529976 0.0000000000 0.3370459629 -0.0172155062\n" " 1.2410860367 -0.2101042076 0.0000000000 -0.0486904400 0.0000000000 0.3219866164 0.0080455917\n" " 0.4926826906 -0.1147109815 0.0000000000 0.0379720404 0.0000000000 0.2528381981 -0.2353878212\n" " 0.1789330672 0.5404419433 0.0000000000 0.2206564191 1.0000000000 0.1448314035 0.0049310905\n" " 0.0561739570 0.6479193925 1.0000000000 0.8303966635 0.0000000000 0.0314382917 1.0108918979\n" "#","\n" "# Zinc\n" "# \n" "# Z(nuc) = 30\n" "# Z(eff) = 12\n" "# E(ref) = -60.408339 a.u.\n" "# \n" "Zn DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 2 2\n" " 6.4206423601 -0.0159961492 0.0000000000 -0.0017007517 0.0000000000 0.2738774540 -0.0086808361\n" " 3.2164545624 0.0700921695 0.0000000000 0.0057876549 0.0000000000 0.3543101613 -0.0259525057\n" " 1.3637346905 -0.2332431465 0.0000000000 -0.0557262454 0.0000000000 0.3285180198 0.0317203087\n" " 0.5481563712 -0.1137154667 0.0000000000 0.0463783393 0.0000000000 0.2334531038 -0.3651680612\n" " 0.2053011443 0.5909100816 0.0000000000 0.2629520047 1.0000000000 0.1017295445 0.3530864382\n" " 0.0662102782 0.6085540919 1.0000000000 0.7908150346 0.0000000000 0.0108701745 0.8289022633\n" "#","\n" "# Zinc\n" "# \n" "# r(cov) = 2.362 a.u.\n" "# E(ref) = -60.299849 a.u.\n" "# \n" "Zn DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 2 2 2\n" " 6.4635610128 -0.0174178283 0.0000000000 0.0014889091 0.0000000000 0.2661076361 -0.0172911104\n" " 3.3087913561 0.0729496060 0.0000000000 -0.0053382185 0.0000000000 0.3453918347 -0.0353171901\n" " 1.4436868426 -0.2102985944 0.0000000000 0.0544382687 0.0000000000 0.3206623881 0.0094335277\n" " 0.6045470598 -0.1788671076 0.0000000000 -0.0164095173 0.0000000000 0.2357873353 -0.3686660487\n" " 0.2390582336 0.5149852625 0.0000000000 -0.2811557323 1.0000000000 0.1164010142 0.3573346078\n" " 0.0857774784 0.7053938257 1.0000000000 -0.7792591266 0.0000000000 0.0149561710 0.8225277665\n" "#","\n" "# Bromine\n" "# \n" "# Z(nuc) = 35\n" "# Z(eff) = 7\n" "# E(ref) = -13.399562 a.u.\n" "# \n" "Br DZVP-GTH-PADE\n" " 2\n" " 4 0 1 6 2 2\n" " 3.1292582762 0.1580383222 0.0000000000 -0.0227993689 0.0000000000\n" " 2.0410191811 -0.5451938775 0.0000000000 -0.0920733298 0.0000000000\n" " 0.8302017350 0.1080068318 0.0000000000 0.1803022828 0.0000000000\n" " 0.3973439755 0.6925896761 0.0000000000 0.4347908141 0.0000000000\n" " 0.1725496378 0.4230867305 0.0000000000 0.4234285104 0.0000000000\n" " 0.0696797072 0.0332389489 1.0000000000 0.1406796525 1.0000000000\n" " 4 2 2 1 1\n" " 0.3620000000 1.0000000000\n" "#","\n" "# Yttrium\n" "# \n" "# Z(nuc) = 39\n" "# Z(eff) = 11\n" "# E(ref) = -38.220903 a.u. (DZV)\n" "# \n" "Y SZV-GTH-PADE\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.8428845299 0.0803324138 -0.0266188717 0.0134161241 -0.0016439813\n" " 2.7619481977 -0.6392520852 0.2386709814 -0.1893880809 -0.0012258216\n" " 1.1534752103 0.4260952519 -0.1749784343 0.4372433962 0.1854518520\n" " 0.4724776609 0.8755246609 -0.5963031281 0.6173916742 0.3755995103\n" " 0.1689866773 0.0824597184 0.1334866382 0.1503112301 0.4711505916\n" " 0.0490946914 -0.0003667507 1.0516399914 -0.0061616659 0.2624412351\n" "#","\n" "Y SZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.8513817096 0.0798606067 -0.0279472583 0.0137177365 -0.0014643321\n" " 2.7616577921 -0.6382967169 0.2509901785 -0.1927451959 -0.0030943144\n" " 1.1844670938 0.3929099619 -0.1729550553 0.4168976599 0.1811003704\n" " 0.4898256283 0.8878410454 -0.6035125417 0.6214526828 0.3711873238\n" " 0.1795686728 0.1040199200 0.0270233339 0.1694869546 0.4764905487\n" " 0.0573407217 -0.0015793010 1.1284469161 -0.0059902205 0.2444820548\n" "#","\n" "Y DZV-GTH-PADE\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.8428845299 0.0803324138 -0.0266188717 0.0000000000 0.0134161241 0.0000000000 -0.0016439813 0.0000000000\n" " 2.7619481977 -0.6392520852 0.2386709814 0.0000000000 -0.1893880809 0.0000000000 -0.0012258216 0.0000000000\n" " 1.1534752103 0.4260952519 -0.1749784343 0.0000000000 0.4372433962 0.0000000000 0.1854518520 0.0000000000\n" " 0.4724776609 0.8755246609 -0.5963031281 0.0000000000 0.6173916742 0.0000000000 0.3755995103 1.0000000000\n" " 0.1689866773 0.0824597184 0.1334866382 0.0000000000 0.1503112301 1.0000000000 0.4711505916 0.0000000000\n" " 0.0490946914 -0.0003667507 1.0516399914 1.0000000000 -0.0061616659 0.0000000000 0.2624412351 0.0000000000\n" "#","\n" "Y DZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.8513817096 0.0798606067 -0.0279472583 0.0000000000 0.0137177365 0.0000000000 -0.0014643321 0.0000000000\n" " 2.7616577921 -0.6382967169 0.2509901785 0.0000000000 -0.1927451959 0.0000000000 -0.0030943144 0.0000000000\n" " 1.1844670938 0.3929099619 -0.1729550553 0.0000000000 0.4168976599 0.0000000000 0.1811003704 0.0000000000\n" " 0.4898256283 0.8878410454 -0.6035125417 0.0000000000 0.6214526828 0.0000000000 0.3711873238 1.0000000000\n" " 0.1795686728 0.1040199200 0.0270233339 0.0000000000 0.1694869546 1.0000000000 0.4764905487 0.0000000000\n" " 0.0573407217 -0.0015793010 1.1284469161 1.0000000000 -0.0059902205 0.0000000000 0.2444820548 0.0000000000\n" "#","\n" "# Zirconium\n" "# \n" "# Z(nuc) = 40\n" "# Z(eff) = 12\n" "# E(ref) = -46.893180 a.u. (DZV)\n" "# \n" "Zr SZV-GTH-PADE\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.6857477291 0.0921982715 -0.0300916002 0.0146645208 -0.0028305635\n" " 2.8983441504 -0.7069142736 0.2663213129 -0.2102277970 0.0073835576\n" " 1.2697609208 0.5009909419 -0.2139641740 0.4771534202 0.2198586769\n" " 0.5172494858 0.8658642938 -0.6004758231 0.6141472939 0.4200820229\n" " 0.1837156188 0.0697098809 0.1712660028 0.1280872093 0.4495790932\n" " 0.0544846775 -0.0001210510 1.0314604844 -0.0061029355 0.1822139319\n" "#","\n" "Zr SZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.6907307864 0.0918380423 -0.0320131875 0.0151438658 -0.0025460744\n" " 2.8994679368 -0.7065066090 0.2831559477 -0.2148939669 0.0047430657\n" " 1.3083923278 0.4616304054 -0.2132614049 0.4535119288 0.2123619968\n" " 0.5389907155 0.8834077941 -0.6128847036 0.6213717566 0.4126795546\n" " 0.1971440852 0.0929467894 0.0453994877 0.1490106611 0.4547421602\n" " 0.0656808473 -0.0016305751 1.1255334296 -0.0064460597 0.1726337227\n" "#","\n" "Zr DZV-GTH-PADE\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.6857477291 0.0921982715 -0.0300916002 0.0000000000 0.0146645208 0.0000000000 -0.0028305635 0.0000000000\n" " 2.8983441504 -0.7069142736 0.2663213129 0.0000000000 -0.2102277970 0.0000000000 0.0073835576 0.0000000000\n" " 1.2697609208 0.5009909419 -0.2139641740 0.0000000000 0.4771534202 0.0000000000 0.2198586769 0.0000000000\n" " 0.5172494858 0.8658642938 -0.6004758231 0.0000000000 0.6141472939 0.0000000000 0.4200820229 1.0000000000\n" " 0.1837156188 0.0697098809 0.1712660028 0.0000000000 0.1280872093 1.0000000000 0.4495790932 0.0000000000\n" " 0.0544846775 -0.0001210510 1.0314604844 1.0000000000 -0.0061029355 0.0000000000 0.1822139319 0.0000000000\n" "#","\n" "Zr DZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.6907307864 0.0918380423 -0.0320131875 0.0000000000 0.0151438658 0.0000000000 -0.0025460744 0.0000000000\n" " 2.8994679368 -0.7065066090 0.2831559477 0.0000000000 -0.2148939669 0.0000000000 0.0047430657 0.0000000000\n" " 1.3083923278 0.4616304054 -0.2132614049 0.0000000000 0.4535119288 0.0000000000 0.2123619968 0.0000000000\n" " 0.5389907155 0.8834077941 -0.6128847036 0.0000000000 0.6213717566 0.0000000000 0.4126795546 1.0000000000\n" " 0.1971440852 0.0929467894 0.0453994877 0.0000000000 0.1490106611 1.0000000000 0.4547421602 0.0000000000\n" " 0.0656808473 -0.0016305751 1.1255334296 1.0000000000 -0.0064460597 0.0000000000 0.1726337227 0.0000000000\n" "#","\n" "# Platinum\n" "# \n" "# Z(nuc) = 78\n" "# Z(eff) = 18\n" "# E(ref) = -120.876931 a.u. (DZV)\n" "# \n" "Pt SZV-GTH-PADE\n" " 1\n" " 5 0 2 5 2 1 1\n" " 3.8539902592 0.6550845009 -0.1051705366 0.1013168098 0.0757804127\n" " 1.7615287193 -0.8764031847 0.1401591199 -0.4564614080 -0.2980475179\n" " 0.7984755007 -0.5895118007 0.6070281980 -0.5905298499 -0.4267024585\n" " 0.3063995931 -0.0418859472 -0.2491931231 -0.0921404881 -0.4156575987\n" " 0.0905510437 0.0010007235 -1.0046330563 0.0002983670 -0.1378705014\n" "#","\n" "Pt DZV-GTH-PADE\n" " 1\n" " 5 0 2 5 3 2 2\n" " 3.8539902592 0.6550845009 -0.1051705366 0.0000000000 0.1013168098 0.0000000000 0.0757804127 0.0000000000\n" " 1.7615287193 -0.8764031847 0.1401591199 0.0000000000 -0.4564614080 0.0000000000 -0.2980475179 0.0000000000\n" " 0.7984755007 -0.5895118007 0.6070281980 0.0000000000 -0.5905298499 0.0000000000 -0.4267024585 1.0000000000\n" " 0.3063995931 -0.0418859472 -0.2491931231 0.0000000000 -0.0921404881 1.0000000000 -0.4156575987 0.0000000000\n" " 0.0905510437 0.0010007235 -1.0046330563 1.0000000000 0.0002983670 0.0000000000 -0.1378705014 0.0000000000\n" "#","\n" "# Platinum\n" "# \n" "# Z(nuc) = 78\n" "# Z(eff) = 18\n" "# r(cov) = 2.457 a.u.\n" "# E(ref) = -120.704482 a.u. (DZV)\n" "# \n" "Pt SZV-GTH-PADE-CONFINED\n" " 1\n" " 5 0 2 5 2 1 1\n" " 3.8119175158 0.6811428125 -0.1098754333 0.1070703344 0.0816913963\n" " 1.8322303424 -0.8481780351 0.1224415322 -0.4203762499 -0.2816553083\n" " 0.8395270960 -0.6301940141 0.6208296307 -0.6135494498 -0.4250744523\n" " 0.3248710896 -0.0565770730 -0.1523972357 -0.1113673639 -0.4272240550\n" " 0.1034693582 0.0020421374 -1.0726205087 0.0007567030 -0.1392021184\n" "#","\n" "Pt DZV-GTH-PADE-CONFINED\n" " 1\n" " 5 0 2 5 3 2 2\n" " 3.8119175158 0.6811428125 -0.1098754333 0.0000000000 0.1070703344 0.0000000000 0.0816913963 0.0000000000\n" " 1.8322303424 -0.8481780351 0.1224415322 0.0000000000 -0.4203762499 0.0000000000 -0.2816553083 0.0000000000\n" " 0.8395270960 -0.6301940141 0.6208296307 0.0000000000 -0.6135494498 0.0000000000 -0.4250744523 1.0000000000\n" " 0.3248710896 -0.0565770730 -0.1523972357 0.0000000000 -0.1113673639 1.0000000000 -0.4272240550 0.0000000000\n" " 0.1034693582 0.0020421374 -1.0726205087 1.0000000000 0.0007567030 0.0000000000 -0.1392021184 0.0000000000\n" "#","\n" "H DZV-GTH-BLYP\n" " 1\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0253743372 0.0000000000\n" " 1.8741624886 -0.1423057735 0.0000000000\n" " 0.5105244224 -0.2688793627 0.0000000000\n" " 0.1671584984 -0.6811381593 1.0000000000\n" "#","\n" "H DZV-GTH-BLYP-CONFINED\n" " 1\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0295744132 0.0000000000\n" " 1.8741624886 -0.1366960483 0.0000000000\n" " 0.5105244224 -0.3996700661 0.0000000000\n" " 0.1671584984 -0.5535181527 1.0000000000\n" "#","\n" "H DZVP-GTH-BLYP\n" " 2\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0253743372 0.0000000000\n" " 1.8741624886 -0.1423057735 0.0000000000\n" " 0.5105244224 -0.2688793627 0.0000000000\n" " 0.1671584984 -0.6811381593 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0295744132 0.0000000000\n" " 1.8741624886 -0.1366960483 0.0000000000\n" " 0.5105244224 -0.3996700661 0.0000000000\n" " 0.1671584984 -0.5535181527 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-GTH-BLYP\n" " 1\n" " 1 0 0 4 2\n" " 11.1193917922 -0.0770450237 0.0000000000\n" " 2.7858130727 -0.2506337219 0.0000000000\n" " 0.7622149528 -0.4810430873 0.0000000000\n" " 0.2069465438 -0.3647148361 1.0000000000\n" "#","\n" "He DZVP-GTH-BLYP\n" " 2\n" " 1 0 0 4 2\n" " 11.1193917922 -0.0770450237 0.0000000000\n" " 2.7858130727 -0.2506337219 0.0000000000\n" " 0.7622149528 -0.4810430873 0.0000000000\n" " 0.2069465438 -0.3647148361 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-GTH-BLYP\n" " 1\n" " 1 0 0 6 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000\n" "#","\n" "Li DZVP-GTH-BLYP\n" " 1\n" " 1 0 1 6 3 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-GTH-BLYP\n" " 1\n" " 1 0 0 6 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000\n" "#","\n" "Be DZVP-GTH-BLYP\n" " 1\n" " 1 0 1 6 3 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8461657736 0.1478743320 0.0000000000 -0.0780482479 0.0000000000\n" " 0.8351785230 -0.0200254137 0.0000000000 -0.2557970914 0.0000000000\n" " 0.2702560177 -0.6820892853 0.0000000000 -0.4542195946 0.0000000000\n" " 0.0805636848 -0.4080927351 1.0000000000 -0.4455266641 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3451975957 0.1511172750 0.0000000000 -0.0883417890 0.0000000000\n" " 1.2765552224 -0.0330272512 0.0000000000 -0.2797032766 0.0000000000\n" " 0.4047139801 -0.6994401873 0.0000000000 -0.4686400677 0.0000000000\n" " 0.1166096360 -0.3842706677 1.0000000000 -0.4085514115 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1514293421 0.1529382304 0.0000000000 -0.0952593918 0.0000000000\n" " 1.8080207176 -0.0415737876 0.0000000000 -0.2946953365 0.0000000000\n" " 0.5656159036 -0.7060780663 0.0000000000 -0.4740427661 0.0000000000\n" " 0.1593207770 -0.3734107042 1.0000000000 -0.3884930037 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 8.2783332000 0.1537128043 0.0000000000 -0.1000437084 0.0000000000\n" " 2.4319182697 -0.0468575728 0.0000000000 -0.3046718654 0.0000000000\n" " 0.7530401707 -0.7092306221 0.0000000000 -0.4764866041 0.0000000000\n" " 0.2084649705 -0.3678036990 1.0000000000 -0.3764915728 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 8.8354826103 0.1386860737 0.0000000000 -0.0892277038 0.0000000000\n" " 2.7621439773 0.0162775038 0.0000000000 -0.2724019359 0.0000000000\n" " 0.8984199177 -0.6272143534 0.0000000000 -0.4630551829 0.0000000000\n" " 0.2813539810 -0.4833352657 1.0000000000 -0.4046182936 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7284760684 0.1539953252 0.0000000000 -0.1034591141 0.0000000000\n" " 3.1496622427 -0.0503062083 0.0000000000 -0.3116781877 0.0000000000\n" " 0.9671794608 -0.7107682323 0.0000000000 -0.4776960745 0.0000000000\n" " 0.2640315133 -0.3648266470 1.0000000000 -0.3688578623 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 13.5711021582 0.1528118547 0.0000000000 -0.1055093745 0.0000000000\n" " 3.9754062896 -0.0499228626 0.0000000000 -0.3161557844 0.0000000000\n" " 1.2121681091 -0.7116163527 0.0000000000 -0.4784388183 0.0000000000\n" " 0.3268420958 -0.3647465749 1.0000000000 -0.3648062165 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 6 3 3\n" " 24.4106415968 -0.0437913152 0.0091786765 0.0000000000 0.0412394777 0.0000000000 0.0000000000\n" " 9.9296107008 -0.2028236387 0.0363180981 0.0000000000 0.1340487332 0.0000000000 0.0000000000\n" " 3.6565524838 0.2429179955 -0.0394753287 0.0000000000 0.3537211057 0.0000000000 0.0000000000\n" " 1.2695832879 0.6645538239 -0.2078727830 0.0000000000 0.4486246648 0.0000000000 0.0000000000\n" " 0.4165172455 0.2885738064 -0.0972810085 0.0000000000 0.2617452725 1.0000000000 0.0000000000\n" " 0.0447862002 -0.0015791358 1.0489993368 1.0000000000 0.0111532456 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 6 3 3\n" " 26.6684192078 -0.0843827177 0.0209137976 0.0000000000 0.0574690984 0.0000000000 0.0000000000\n" " 10.6278914168 -0.1540012185 0.0328904567 0.0000000000 0.1834886260 0.0000000000 0.0000000000\n" " 4.0257536169 0.3069950002 -0.0656366632 0.0000000000 0.3728084155 0.0000000000 0.0000000000\n" " 1.4729826270 0.6341736453 -0.2789230951 0.0000000000 0.4211046995 0.0000000000 0.0000000000\n" " 0.5301398986 0.2463411075 -0.0573174800 0.0000000000 0.1968486915 1.0000000000 0.0000000000\n" " 0.0755213250 -0.0010479306 1.0561246927 1.0000000000 0.0067129918 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9040202750 0.2819459889 0.0000000000 0.0202901873 0.0000000000\n" " 0.2716888904 -0.3565936829 0.0000000000 -0.2865844984 0.0000000000\n" " 0.1038208154 -0.7126726101 0.0000000000 -0.4993035494 0.0000000000\n" " 0.0361219503 -0.1315446458 1.0000000000 -0.3664719249 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9188833080 0.2847922923 0.0000000000 0.0265971886 0.0000000000\n" " 0.3059227599 -0.2166908019 0.0000000000 -0.2493477448 0.0000000000\n" " 0.1405671989 -0.6528454698 0.0000000000 -0.4330290941 0.0000000000\n" " 0.0701003942 -0.3130607257 1.0000000000 -0.4145972860 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1607523260 0.3347731757 0.0000000000 0.0434283150 0.0000000000\n" " 0.4367408478 -0.3093572718 0.0000000000 -0.2863246710 0.0000000000\n" " 0.1596639467 -0.7662114250 0.0000000000 -0.5309372647 0.0000000000\n" " 0.0542076476 -0.1654691868 1.0000000000 -0.3502990755 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1846613412 0.3285317082 0.0000000000 0.0525302034 0.0000000000\n" " 0.4966320416 -0.1837395449 0.0000000000 -0.2375844983 0.0000000000\n" " 0.2018817867 -0.7175956794 0.0000000000 -0.4934742426 0.0000000000\n" " 0.0883185787 -0.3186166920 1.0000000000 -0.3999071137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4438479448 0.3786128496 0.0000000000 0.0768556482 0.0000000000\n" " 0.6655205239 -0.2651542911 0.0000000000 -0.2851732159 0.0000000000\n" " 0.2306279229 -0.8037940077 0.0000000000 -0.5540528446 0.0000000000\n" " 0.0761045314 -0.2088239606 1.0000000000 -0.3549348725 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.7644177483 0.4114656852 0.0000000000 0.1207217819 0.0000000000\n" " 0.9717752574 -0.2250656540 0.0000000000 -0.2949379210 0.0000000000\n" " 0.3174012156 -0.8265244883 0.0000000000 -0.5702721181 0.0000000000\n" " 0.1021260036 -0.2549919207 1.0000000000 -0.3673119254 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 2.1331287798 0.4248059842 0.0000000000 0.1653685236 0.0000000000\n" " 1.3235903746 -0.1892927953 0.0000000000 -0.3177398987 0.0000000000\n" " 0.4137876064 -0.8368579090 0.0000000000 -0.5798040681 0.0000000000\n" " 0.1308257425 -0.2914138536 1.0000000000 -0.3759941633 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 2.5545614018 0.4141718172 0.0000000000 0.1900119384 0.0000000000\n" " 1.6618834559 -0.1513194180 0.0000000000 -0.3348991938 0.0000000000\n" " 0.5128881676 -0.8416116448 0.0000000000 -0.5845220689 0.0000000000\n" " 0.1605817921 -0.3128170499 1.0000000000 -0.3771344877 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 6 3 3\n" " 4.7446150543 0.6776090858 -0.1330438947 0.0000000000 0.0442549261 0.0000000000 0.0000000000\n" " 4.0634061217 -1.0488085165 0.2215127842 0.0000000000 -0.1105968228 0.0000000000 0.0000000000\n" " 1.3597003283 0.1782277656 -0.0238079016 0.0000000000 0.3264615514 0.0000000000 0.0000000000\n" " 0.5555828915 0.8152922135 -0.3671176099 0.0000000000 0.5369026258 0.0000000000 0.0000000000\n" " 0.2069147328 0.2513051410 -0.0812211744 0.0000000000 0.2886757585 1.0000000000 0.0000000000\n" " 0.0314551108 -0.0007525995 1.0760313569 1.0000000000 0.0096972783 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "K DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 6 3 3\n" " 5.0541010987 0.3579755406 -0.0764703445 0.0000000000 0.0214294191 0.0000000000 0.0000000000\n" " 3.9172656623 -0.7279027742 0.1727468706 0.0000000000 -0.0903397463 0.0000000000 0.0000000000\n" " 1.3875920988 0.1617562448 -0.0280980511 0.0000000000 0.3167508594 0.0000000000 0.0000000000\n" " 0.5688300282 0.8136478071 -0.3703988041 0.0000000000 0.5367387047 0.0000000000 0.0000000000\n" " 0.2124883615 0.2680905299 -0.1358924595 0.0000000000 0.2992577807 1.0000000000 0.0000000000\n" " 0.0365517013 -0.0006990076 1.1057124282 1.0000000000 0.0115831023 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# E(ref) = -57.936907 a.u.\n" "# \n" "Ti DZV-GTH-BLYP\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.7577063940 -0.0020221836 0.0007040530 0.0000000000 -0.1128549787 0.0000000000 0.0514577128 -0.0296043049\n" " 3.9130950485 -0.4886848871 0.1358104132 0.0000000000 0.1055473912 0.0000000000 0.1904588963 -0.1242820460\n" " 1.5201082969 0.6401079822 -0.2125240090 0.0000000000 0.5200032209 0.0000000000 0.3308521630 -0.2103629080\n" " 0.5931432380 0.6699336988 -0.4587761894 0.0000000000 0.4712945273 0.0000000000 0.3789723974 -0.2097314556\n" " 0.2016337402 0.0458870927 0.2236504805 0.0000000000 0.0769848218 1.0000000000 0.3321693836 0.2301712912\n" " 0.0555239732 -0.0006070586 0.9681970919 1.0000000000 -0.0038977980 0.0000000000 0.1083505565 0.8189372496\n" "#","\n" "# Barium\n" "# \n" "# Z(nuc) = 56\n" "# Z(eff) = 10\n" "# E(ref) = -25.242058 a.u.\n" "# \n" "Ba SZV-GTH-BLYP\n" " 1\n" " 5 0 1 3 2 1\n" " 1.4209812500 -0.5031736249 -0.2251634082 -0.1405229393\n" " 0.3546440900 1.2590856152 0.8249457612 1.0335378927\n" " 0.0425115800 0.0618835363 -1.1709205133 0.1096101386\n" "#","\n" "# Hydrogen\n" "# \n" "# Z(nuc) = 1\n" "# Z(eff) = 1\n" "# E(ref) = -0.387060 a.u. (DZV)\n" "# \n" "H DZV-GTH-PBE\n" " 1\n" " 1 0 0 4 2\n" " 8.4486934208 -0.0290463773 0.0000000000\n" " 1.8581649215 -0.1327955318 0.0000000000\n" " 0.5076108225 -0.4061407363 0.0000000000\n" " 0.1673904511 -0.5490803703 1.0000000000\n" "#","\n" "H DZVP-GTH-PBE\n" " 2\n" " 1 0 0 4 2\n" " 8.4486934208 -0.0290463773 0.0000000000\n" " 1.8581649215 -0.1327955318 0.0000000000\n" " 0.5076108225 -0.4061407363 0.0000000000\n" " 0.1673904511 -0.5490803703 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "# Carbon\n" "# \n" "# Z(nuc) = 6\n" "# Z(eff) = 4\n" "# E(ref) = -5.357012 a.u. (DZV)\n" "# \n" "C DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3657614966 0.1476030280 0.0000000000 -0.0864171061 0.0000000000\n" " 1.2749626469 -0.0210014779 0.0000000000 -0.2743211800 0.0000000000\n" " 0.4052884311 -0.7098993929 0.0000000000 -0.4772572587 0.0000000000\n" " 0.1172717248 -0.3801259461 1.0000000000 -0.4035098365 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "# Nitrogen\n" "# \n" "# Z(nuc) = 7\n" "# Z(eff) = 5\n" "# E(ref) = -9.642007 a.u. (DZV)\n" "# \n" "N DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1646187898 0.1507499417 0.0000000000 -0.0938164220 0.0000000000\n" " 1.8037211883 -0.0339053520 0.0000000000 -0.2912161121 0.0000000000\n" " 0.5658506122 -0.7128963473 0.0000000000 -0.4795028541 0.0000000000\n" " 0.1603297607 -0.3703029459 1.0000000000 -0.3849298984 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "# Oxygen\n" "# \n" "# Z(nuc) = 8\n" "# Z(eff) = 6\n" "# E(ref) = -15.773873 a.u. (DZV)\n" "# \n" "O DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 8.2968917719 0.1521363234 0.0000000000 -0.0985730287 0.0000000000\n" " 2.4314066255 -0.0407682329 0.0000000000 -0.3018606942 0.0000000000\n" " 0.7547606612 -0.7133526943 0.0000000000 -0.4800913367 0.0000000000\n" " 0.2102342150 -0.3666620394 1.0000000000 -0.3745464613 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 10\n" "# E(ref) = -63.225154 a.u. (DZV)\n" "# \n" "Mg DZVP-GTH-PBE-q10 DZVP-GTH-PBE\n" " 2\n" " 2 0 1 6 3 3\n" " 28.2523693585 -0.0714106769 0.0169520109 0.0000000000 0.0508396337 0.0000000000 0.0000000000\n" " 11.3902578811 -0.1643154146 0.0358612451 0.0000000000 0.1704940251 0.0000000000 0.0000000000\n" " 4.2988917455 0.2636167334 -0.0572539076 0.0000000000 0.3626339588 0.0000000000 0.0000000000\n" " 1.5759918035 0.6448595194 -0.2521366266 0.0000000000 0.4306062033 0.0000000000 0.0000000000\n" " 0.5613579735 0.2752673720 -0.0973472023 0.0000000000 0.2152016385 1.0000000000 0.0000000000\n" " 0.0754606217 -0.0003305902 1.0641066589 1.0000000000 0.0081228668 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# all radii fixed to 0.18\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 10\n" "# E(ref) = -62.588650 a.u. (DZV)\n" "# \n" "Mg DZV-GTH-PBE-q10-soft\n" " 2\n" " 2 0 1 6 3 3\n" " 18.8104523828 -0.1661468987 0.0354167535 0.0000000000 0.0566689026 0.0000000000 0.0000000000\n" " 8.2318014002 -0.0567549189 0.0064682696 0.0000000000 0.2254152529 0.0000000000 0.0000000000\n" " 3.1566348611 0.4035375328 -0.0939726004 0.0000000000 0.4018442569 0.0000000000 0.0000000000\n" " 1.2110282519 0.6033695127 -0.2761377801 0.0000000000 0.3834403179 0.0000000000 0.0000000000\n" " 0.4518289787 0.1550065597 -0.0102084295 1.0000000000 0.1456919835 1.0000000000 0.0000000000\n" " 0.0733999314 -0.0006466925 1.0489008353 0.0000000000 0.0034002162 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 2\n" "# E(ref) = -0.826790 a.u. (DZV)\n" "# \n" "Mg DZVP-GTH-PBE-q2\n" " 2\n" " 3 0 0 4 2\n" " 1.4682667137 0.0219081251 0.0000000000\n" " 0.6661420794 0.1894369669 0.0000000000\n" " 0.1116164481 -0.6758108328 0.0000000000\n" " 0.0398960535 -0.4565650195 1.0000000000\n" " 3 1 1 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "# Silicon\n" "# \n" "# Z(nuc) = 14\n" "# Z(eff) = 4\n" "# E(ref) = -3.739451 a.u. (DZV)\n" "# \n" "Si DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1815290892 0.3214648125 0.0000000000 0.0458533253 0.0000000000\n" " 0.4454622072 -0.2454343061 0.0000000000 -0.2633419994 0.0000000000\n" " 0.1674585747 -0.7952663455 0.0000000000 -0.5433222352 0.0000000000\n" " 0.0564288769 -0.1828967955 1.0000000000 -0.3560783416 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "# Phosphorus\n" "# \n" "# Z(nuc) = 15\n" "# Z(eff) = 5\n" "# E(ref) = -6.396285 a.u. (DZV)\n" "# \n" "P DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4802317376 0.3584488109 0.0000000000 0.0813818902 0.0000000000\n" " 0.6986713896 -0.1974902111 0.0000000000 -0.2594593013 0.0000000000\n" " 0.2410963537 -0.8300256683 0.0000000000 -0.5714822479 0.0000000000\n" " 0.0788943128 -0.2268703009 1.0000000000 -0.3611947554 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "# Sulfur\n" "# \n" "# Z(nuc) = 16\n" "# Z(eff) = 6\n" "# E(ref) = -10.064918 a.u. (DZV)\n" "# \n" "S DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8210130043 0.3787811739 0.0000000000 0.1262123760 0.0000000000\n" " 1.0326142421 -0.1527118831 0.0000000000 -0.2717532297 0.0000000000\n" " 0.3304499316 -0.8445546077 0.0000000000 -0.5856508153 0.0000000000\n" " 0.1058215004 -0.2742356178 1.0000000000 -0.3747165087 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "# Calcium\n" "# \n" "# Z(nuc) = 20\n" "# Z(eff) = 10\n" "# E(ref) = -36.615304 a.u. (DZV)\n" "# \n" "Ca DZVP-GTH-PBE-q10 DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 3 2\n" " 2.8342212933 0.6441471192 0.2090958309 0.0000000000 0.1692254340 0.0000000000\n" " 1.4833415585 -0.6848623428 -0.2618151665 0.0000000000 -0.5926970057 0.0000000000\n" " 0.4519073282 -0.8089853788 -0.4137067900 0.0000000000 -0.6168657871 0.0000000000\n" " 0.0502772140 -0.0131335018 1.1126219713 1.0000000000 -0.0361141736 1.0000000000\n" " 3 2 2 1 1\n" " 0.1088000000 1.0000000000\n" "#","\n" "Au TZ-GTH\n" " 1\n" " 1 0 2 6 3 3 3\n" " 3.333 -0.2996385052 -0.0253458759 -0.0505901975 0.047560000000 0.0233626853 -0.0684498204 -0.0411742318 -0.0069631085 -0.0874460677\n" " 1.582 -0.0735011750 0.0529347225 0.3174596863 -0.10200000000 -0.0112096790 0.3475804049 1.1908036284 0.7214138304 1.5934218487\n" " .7514 3.4198421760 0.0063068212 -1.0018695196 0.002000000 -0.1543550102 -0.9013800582 1.4081117116 1.000000000 1.2910850825\n" " .3568 1.000000000 -0.3216103136 1.00000000000 -0.3480000000 -0.1918211838 1.0 1.000000000 0.7172330126 1.000000000\n" " .1694 -7.5936501839 1.000000000 -0.4219772167 0.9589000000 1.000000000 -0.4056275576 0.6305837811 -0.1109815597 3.2469320583\n" " .0804 -1.4837051517 0.1624309950 1.6448580273 1.0000000000 -0.1069487306 0.4438513365 0.0688923738 -1.0201823698 -2.0909150178\n" "#","\n" "H TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 1 0 0 4 3\n" " 8.5926819670 -0.0253743372 0.0000000000 0.0\n" " 1.8741624886 -0.1423057735 0.0000000000 0.0\n" " 0.5105244224 -0.2688793627 0.0000000000 1.0\n" " 0.1671584984 -0.6811381593 1.0000000000 0.0\n" " 2 1 1 1 1\n" " 3.0000 1.0\n" " 2 1 1 1 1\n" " 0.7500 1.0\n" " 2 1 1 1 1\n" " 0.1875 1.0\n" " 3 2 2 1 1\n" " 1.0000 1.0\n" " 1 0 0 1 1\n" " 0.0360 1.0\n" "#","\n" "He TZVDD3DF3PD-GTH-BLYP\n" " 5\n" " 1 0 0 4 3\n" " 11.1193917922 -0.0770450237 0.0000000000 0.0\n" " 2.7858130727 -0.2506337219 0.0000000000 0.0\n" " 0.7622149528 -0.4810430873 0.0000000000 1.0\n" " 0.2069465438 -0.3647148361 1.0000000000 0.0\n" " 2 1 1 1 1\n" " 3.0000 1.0\n" " 2 1 1 1 1\n" " 0.7500 1.0\n" " 2 1 1 1 1\n" " 0.1875 1.0\n" " 3 2 2 1 1\n" " 2.0000 1.0\n" "#","\n" "Li TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000 0.0 1.0 0.0 0.0 1.0\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000 1.0 0.0 0.0 1.0 0.0\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000 0.0 0.0 1.0 0.0 0.0\n" " 3 2 2 1 1\n" " 0.8000 1.0\n" " 3 2 2 1 1\n" " 0.2000 1.0\n" " 3 2 2 1 1\n" " 0.0500 1.0\n" " 4 3 3 1 1\n" " 0.1500 1.0\n" " 2 0 1 1 1 1\n" " 0.0074 1.0 1.0\n" "#","\n" "Be TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 1 0 1 6 5 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000 0.0 1.0 0.0 0.0 1.0\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000 1.0 0.0 0.0 1.0 0.0\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000 0.0 0.0 1.0 0.0 0.0\n" " 3 2 2 1 1\n" " 1.02000 1.0\n" " 3 2 2 1 1\n" " 0.25500 1.0\n" " 3 2 2 1 1\n" " 0.06375 1.0\n" " 4 3 3 1 1\n" " 0.26000 1.0\n" " 2 0 1 1 1 1\n" " 0.0207 1.0 1.0\n" "#","\n" "B TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 2.8461657736 0.1478743320 0.0000000000 0.0 -0.0780482479 0.0000000000 0.0\n" " 0.8351785230 -0.0200254137 0.0000000000 0.0 -0.2557970914 0.0000000000 0.0\n" " 0.2702560177 -0.6820892853 0.0000000000 1.0 -0.4542195946 0.0000000000 1.0\n" " 0.0805636848 -0.4080927351 1.0000000000 0.0 -0.4455266641 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.60400 1.0\n" " 3 2 2 1 1\n" " 0.40100 1.0\n" " 3 2 2 1 1\n" " 0.10025 1.0\n" " 4 3 3 1 1\n" " 0.50000 1.0\n" " 2 0 1 1 1 1\n" " 0.03150 1.0 1.0\n" "#","\n" "C TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 4.3451975957 0.1511172750 0.0000000000 0.0 -0.0883417890 0.0000000000 0.0\n" " 1.2765552224 -0.0330272512 0.0000000000 0.0 -0.2797032766 0.0000000000 0.0\n" " 0.4047139801 -0.6994401873 0.0000000000 1.0 -0.4686400677 0.0000000000 1.0\n" " 0.1166096360 -0.3842706677 1.0000000000 0.0 -0.4085514115 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.50400 1.0\n" " 3 2 2 1 1\n" " 0.62600 1.0\n" " 3 2 2 1 1\n" " 0.15650 1.0\n" " 4 3 3 1 1\n" " 0.80000 1.0\n" " 2 0 1 1 1 1\n" " 0.04380 1.0 1.0\n" "#","\n" "N TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 6.1514293421 0.1529382304 0.0000000000 0.0 -0.0952593918 0.0000000000 0.0\n" " 1.8080207176 -0.0415737876 0.0000000000 0.0 -0.2946953365 0.0000000000 0.0\n" " 0.5656159036 -0.7060780663 0.0000000000 1.0 -0.4740427661 0.0000000000 1.0\n" " 0.1593207770 -0.3734107042 1.0000000000 0.0 -0.3884930037 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.65200 1.0\n" " 3 2 2 1 1\n" " 0.91300 1.0\n" " 3 2 2 1 1\n" " 0.22825 1.0\n" " 4 3 3 1 1\n" " 1.00000 1.0\n" " 2 0 1 1 1 1\n" " 0.06390 1.0 1.0\n" "#","\n" "O TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 8.2783332000 0.1537128043 0.0000000000 0.0 -0.1000437084 0.0000000000 0.0\n" " 2.4319182697 -0.0468575728 0.0000000000 0.0 -0.3046718654 0.0000000000 0.0\n" " 0.7530401707 -0.7092306221 0.0000000000 1.0 -0.4764866041 0.0000000000 1.0\n" " 0.2084649705 -0.3678036990 1.0000000000 0.0 -0.3764915728 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 5.16000 1.0\n" " 3 2 2 1 1\n" " 1.29200 1.0\n" " 3 2 2 1 1\n" " 0.33250 1.0\n" " 4 3 3 1 1\n" " 1.40000 1.0\n" " 2 0 1 1 1 1\n" " 0.08450 1.0 1.0\n" "#","\n" "F TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 10.7284760684 0.1539953252 0.0000000000 0.0 -0.1034591141 0.0000000000 0.0\n" " 3.1496622427 -0.0503062083 0.0000000000 0.0 -0.3116781877 0.0000000000 0.0\n" " 0.9671794608 -0.7107682323 0.0000000000 1.0 -0.4776960745 0.0000000000 1.0\n" " 0.2640315133 -0.3648266470 1.0000000000 0.0 -0.3688578623 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 7.00000 1.0\n" " 3 2 2 1 1\n" " 1.75000 1.0\n" " 3 2 2 1 1\n" " 0.43750 1.0\n" " 4 3 3 1 1\n" " 1.85000 1.0\n" " 2 0 1 1 1 1\n" " 0.10760 1.0 1.0\n" "#","\n" "Ne TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 13.5711021582 0.1528118547 0.0000000000 0.0 -0.1055093745 0.0000000000 0.0\n" " 3.9754062896 -0.0499228626 0.0000000000 0.0 -0.3161557844 0.0000000000 0.0\n" " 1.2121681091 -0.7116163527 0.0000000000 1.0 -0.4784388183 0.0000000000 1.0\n" " 0.3268420958 -0.3647465749 1.0000000000 0.0 -0.3648062165 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 9.21600 1.0\n" " 3 2 2 1 1\n" " 2.30400 1.0\n" " 3 2 2 1 1\n" " 0.57600 1.0\n" " 4 3 3 1 1\n" " 2.50000 1.0\n" " 2 0 1 1 1 1\n" " 0.13000 1.0 1.0\n" "#","\n" "Na TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 5\n" " 24.4106415968 -0.0437913152 0.0091786765 0.0000000000 0.0 0.0 0.0412394777 0.0000000000 0.0000000000 0.0 0.0\n" " 9.9296107008 -0.2028236387 0.0363180981 0.0000000000 0.0 0.0 0.1340487332 0.0000000000 0.0000000000 0.0 0.0\n" " 3.6565524838 0.2429179955 -0.0394753287 0.0000000000 0.0 0.0 0.3537211057 0.0000000000 0.0000000000 0.0 1.0\n" " 1.2695832879 0.6645538239 -0.2078727830 0.0000000000 0.0 1.0 0.4486246648 0.0000000000 0.0000000000 1.0 0.0\n" " 0.4165172455 0.2885738064 -0.0972810085 0.0000000000 1.0 0.0 0.2617452725 1.0000000000 0.0000000000 0.0 0.0\n" " 0.0447862002 -0.0015791358 1.0489993368 1.0000000000 0.0 0.0 0.0111532456 0.0000000000 1.0000000000 0.0 0.0\n" " 3 2 2 1 1\n" " 0.70000 1.0\n" " 3 2 2 1 1\n" " 0.17500 1.0\n" " 3 2 2 1 1\n" " 0.04375 1.0\n" " 4 3 3 1 1\n" " 0.15000 1.0\n" " 2 0 1 1 1 1\n" " 0.00760 1.0 1.0\n" "#","\n" "Mg TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 5\n" " 26.6684192078 -0.0843827177 0.0209137976 0.0000000000 0.0 0.0 0.0574690984 0.0000000000 0.0000000000 0.0 0.0\n" " 10.6278914168 -0.1540012185 0.0328904567 0.0000000000 0.0 0.0 0.1834886260 0.0000000000 0.0000000000 0.0 0.0\n" " 4.0257536169 0.3069950002 -0.0656366632 0.0000000000 0.0 0.0 0.3728084155 0.0000000000 0.0000000000 1.0 0.0\n" " 1.4729826270 0.6341736453 -0.2789230951 0.0000000000 0.0 1.0 0.4211046995 0.0000000000 0.0000000000 0.0 1.0\n" " 0.5301398986 0.2463411075 -0.0573174800 0.0000000000 1.0 0.0 0.1968486915 1.0000000000 0.0000000000 0.0 0.0\n" " 0.0755213250 -0.0010479306 1.0561246927 1.0000000000 0.0 0.0 0.0067129918 0.0000000000 1.0000000000 0.0 0.0\n" " 3 2 2 1 1\n" " 0.70000 1.0\n" " 3 2 2 1 1\n" " 0.17500 1.0\n" " 3 2 2 1 1\n" " 0.04375 1.0\n" " 4 3 3 1 1\n" " 0.20000 1.0\n" " 2 0 1 1 1 1\n" " 0.01460 1.0 1.0\n" "#","\n" "Al TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 0.9040202750 0.2819459889 0.0000000000 0.0 0.0202901873 0.0000000000 0.0\n" " 0.2716888904 -0.3565936829 0.0000000000 0.0 -0.2865844984 0.0000000000 0.0\n" " 0.1038208154 -0.7126726101 0.0000000000 1.0 -0.4993035494 0.0000000000 1.0\n" " 0.0361219503 -0.1315446458 1.0000000000 0.0 -0.3664719249 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.30000 1.0\n" " 3 2 2 1 1\n" " 0.32500 1.0\n" " 3 2 2 1 1\n" " 0.08125 1.0\n" " 4 3 3 1 1\n" " 0.25000 1.0\n" " 2 0 1 1 1 1\n" " 0.03180 1.0 1.0\n" "#","\n" "Si TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.1607523260 0.3347731757 0.0000000000 0.0 0.0434283150 0.0000000000 0.0\n" " 0.4367408478 -0.3093572718 0.0000000000 0.0 -0.2863246710 0.0000000000 0.0\n" " 0.1596639467 -0.7662114250 0.0000000000 1.0 -0.5309372647 0.0000000000 1.0\n" " 0.0542076476 -0.1654691868 1.0000000000 0.0 -0.3502990755 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.80000 1.0\n" " 3 2 2 1 1\n" " 0.45000 1.0\n" " 3 2 2 1 1\n" " 0.11250 1.0\n" " 4 3 3 1 1\n" " 0.32000 1.0\n" " 2 0 1 1 1 1\n" " 0.03310 1.0 1.0\n" "#","\n" "P TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.4438479448 0.3786128496 0.0000000000 0.0 0.0768556482 0.0000000000 0.0\n" " 0.6655205239 -0.2651542911 0.0000000000 0.0 -0.2851732159 0.0000000000 0.0\n" " 0.2306279229 -0.8037940077 0.0000000000 1.0 -0.5540528446 0.0000000000 1.0\n" " 0.0761045314 -0.2088239606 1.0000000000 0.0 -0.3549348725 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.20000 1.0\n" " 3 2 2 1 1\n" " 0.55000 1.0\n" " 3 2 2 1 1\n" " 0.13750 1.0\n" " 4 3 3 1 1\n" " 0.45000 1.0\n" " 2 0 1 1 1 1\n" " 0.03480 1.0 1.0\n" "#","\n" "S TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.7644177483 0.4114656852 0.0000000000 0.0 0.1207217819 0.0000000000 0.0\n" " 0.9717752574 -0.2250656540 0.0000000000 0.0 -0.2949379210 0.0000000000 0.0\n" " 0.3174012156 -0.8265244883 0.0000000000 1.0 -0.5702721181 0.0000000000 1.0\n" " 0.1021260036 -0.2549919207 1.0000000000 0.0 -0.3673119254 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.60000 1.0\n" " 3 2 2 1 1\n" " 0.65000 1.0\n" " 3 2 2 1 1\n" " 0.16250 1.0\n" " 4 3 3 1 1\n" " 0.55000 1.0\n" " 2 0 1 1 1 1\n" " 0.04050 1.0 1.0\n" "#","\n" "Cl TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 2.1331287798 0.4248059842 0.0000000000 0.0 0.1653685236 0.0000000000 0.0\n" " 1.3235903746 -0.1892927953 0.0000000000 0.0 -0.3177398987 0.0000000000 0.0\n" " 0.4137876064 -0.8368579090 0.0000000000 1.0 -0.5798040681 0.0000000000 1.0\n" " 0.1308257425 -0.2914138536 1.0000000000 0.0 -0.3759941633 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.00000 1.0\n" " 3 2 2 1 1\n" " 0.75000 1.0\n" " 3 2 2 1 1\n" " 0.18750 1.0\n" " 4 3 3 1 1\n" " 0.70000 1.0\n" " 2 0 1 1 1 1\n" " 0.04830 1.0 1.0\n" "#","\n" "Ar TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 2.5545614018 0.4141718172 0.0000000000 0.0 0.1900119384 0.0000000000 0.0\n" " 1.6618834559 -0.1513194180 0.0000000000 0.0 -0.3348991938 0.0000000000 0.0\n" " 0.5128881676 -0.8416116448 0.0000000000 1.0 -0.5845220689 0.0000000000 1.0\n" " 0.1605817921 -0.3128170499 1.0000000000 0.0 -0.3771344877 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.40000 1.0\n" " 3 2 2 1 1\n" " 0.85000 1.0\n" " 3 2 2 1 1\n" " 0.21250 1.0\n" " 4 3 3 1 1\n" " 0.85000 1.0\n" " 2 0 1 1 1 1\n" " 0.06000 1.0 1.0\n" "#"}; atomes_1.3.1/src/calc/lammps/0000775000175000017500000000000015212624223015467 5ustar lerouxlerouxatomes_1.3.1/src/calc/lammps/la_print.c0000664000175000017500000006005415212624223017450 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file la_print.c * @short Functions to print the LAMMPS input file(s) * @author Sébastien Le Roux */ /* * This file: 'la_print.c' * * Contains: * - The functions to print the LAMMPS input file(s) * * List of functions: int get_mol_id_from_model_id (int at); int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh); int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an); int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd); int is_this_new_prop (int sid, field_prop * init, field_prop * to_check); int get_type_struct_to_print (field_molecule * tfmol, int sid); int get_different_atoms (); gboolean are_different_field_atoms (field_atom* at, field_atom* bt); void print_lammps_mass (GtkTextBuffer * buf); void print_lammps_atoms (GtkTextBuffer * buf); void print_lammps_atom_file (GtkTextBuffer * buf); field_atom* get_print_atom (int aid); */ #include "dlp_field.h" #include "interface.h" /*! \enum lammps_atom_types */ enum lammps_atom_types { // comments = corresponding data file formats l_angle = 0, /*!< atom-ID molecule-ID atom-type x y z */ l_atomic = 1, /*!< atom-ID atom-type x y z */ l_body = 2, /*!< atom-ID atom-type bodyflag mass x y z */ l_bond = 3, /*!< atom-ID molecule-ID atom-type x y z */ l_charge = 4, /*!< atom-type q x y z */ l_dipole = 5, /*!< atom-ID atom-type q x y z mux muy muz */ l_dpd = 6, /*!< atom-ID atom-type theta x y z */ l_edpd = 7, /*!< atom-ID atom-type edpd_temp edpd_cv x y z */ l_electron = 8, /*!< atom-ID atom-type q spin eradius x y z */ l_ellipsoid = 9, /*!< atom-ID atom-type ellipsoidflag density x y z */ l_full = 10, /*!< atom-ID molecule-ID atom-type q x y z */ l_line = 11, /*!< atom-ID molecule-ID atom-type lineflag density x y z */ l_mdpd = 12, /*!< atom-ID atom-type rho x y z */ l_molecular = 13, /*!< atom-ID molecule-ID atom-type x y z */ l_peri = 14, /*!< atom-ID atom-type volume density x y z */ l_smd = 15, /*!< atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z */ l_sph = 16, /*!< atom-ID atom-type rho esph cv x y z */ l_sphere = 17, /*!< atom-ID atom-type diameter density x y z */ l_spin = 18, /*!< atom-ID atom-type x y z spx spy spz sp */ l_tdpd = 19, /*!< atom-ID atom-type x y z cc1 cc2 … ccNspecies */ l_template = 20, /*!< atom-ID atom-type molecule-ID template-index template-atom x y z */ l_tri = 21, /*!< atom-ID molecule-ID atom-type triangleflag density x y z */ l_wavepacket = 22, /*!< atom-ID atom-type charge spin eradius etag cs_re cs_im x y z */ l_hybrid = 23 /*!< atom-ID atom-type x y z sub-style1 sub-style2 … */ }; extern gboolean in_bond (int at, int bd[2]); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); extern int get_num_struct_to_print (field_molecule * fmol, int sid); extern gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b); extern void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda); extern char * vect_comp[3]; /*! \fn int get_mol_id_from_model_id (int at) \brief get field molecule id using atom id \param at the atom id */ int get_mol_id_from_model_id (int at) { int i; tmp_fmol = tmp_field -> first_molecule; field_atom* fat; while (tmp_fmol) { fat = tmp_fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return tmp_fmol -> id; } fat = fat -> next; } tmp_fmol = tmp_fmol -> next; } return -1; } field_prop * print_prop[8]; /*! \fn int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh) \brief print LAMMPS dihedral \param did the dihedral id to print \param di the type of structural property = 2 \param buf the GtkTextBuffer to print into \param dh the structural property to print */ int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh) { int a, c, i, j, k, l, m, n, o, p; gchar * str; field_prop * tp_prop; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fdt -> id && tmp_fbt -> id && tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } int * ids = allocint (4); for (i=0; i num; i++) { j = tmp_fat -> list[i]; a = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[a] = TRUE; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; c = ids[3] = tmp_proj -> atoms[0][p].fid; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id && (! same_atom || (same_atom && ! already_done[c]))) { tmp_fprop = get_active_prop_using_atoms (dh -> other, 4, ids); if (tmp_fprop == NULL) tmp_fprop = dh -> def; tp_prop = print_prop[2*di]; while (! are_identical_prop (2*di+1, 0, tmp_fprop, tp_prop) && tp_prop -> next) tp_prop = tp_prop -> next; if (tp_prop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d %10d %10d\n", did+1, tp_prop -> pid, j+1, l+1, n+1, p+1); print_info (str, NULL, buf); g_free (str); did ++; } } } } } } } } g_free (ids); if (same_atom) g_free (already_done); return did; } /*! \fn int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an) \brief print LAMMPS angle \param aid the angle id to print \param ai the type of structural property = 1 \param buf the GtkTextBuffer to print into \param an the structural property to print */ int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an) { int i, j, k, l, m, o, p, q; gchar * str; field_prop * tp_prop; int * ids = allocint (3); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; k = ids[0] = tmp_proj -> atoms[0][j].fid; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id) { ids[1] = tmp_proj -> atoms[0][m].fid; for (o=0; o atoms[0][m].numv; o++) { p = tmp_proj -> atoms[0][m].vois[o]; q = ids[2] = tmp_proj -> atoms[0][p].fid; if (p != j && tmp_proj -> atoms[0][p].faid == tmp_fct -> id && (! same_atom || (same_atom && ! already_done[q]))) { tmp_fprop = get_active_prop_using_atoms (an -> other, 3, ids); if (tmp_fprop == NULL) tmp_fprop = an -> def; tp_prop = print_prop[2*ai]; while (! are_identical_prop (2*ai+1, 0, tmp_fprop, tp_prop)) tp_prop = tp_prop -> next; if (tp_prop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d %10d\n", aid+1, tp_prop -> pid, j+1, m+1, p+1); print_info (str, NULL, buf); g_free (str); aid ++; } } } } } } g_free (ids); if (same_atom) g_free (already_done); return aid; } /*! \fn int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd) \brief print LAMMPS bond \param bid the bond id to print \param bi the type of structural property = 0 \param buf the GtkTextBuffer to print into \param bd the structural property to print */ int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd) { int i, j, k, l, m, n; gchar * str; field_prop * tp_prop; int * ids = allocint (2); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fbt -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; k = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; n = ids[1] = tmp_proj -> atoms[0][m].fid; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id && (! same_atom || (same_atom && ! already_done[n]))) { tmp_fprop = get_active_prop_using_atoms (bd -> other, 2, ids); if (tmp_fprop == NULL) tmp_fprop = bd -> def; tp_prop = print_prop[2*bi]; while (! are_identical_prop (2*bi+1, 0, tmp_fprop, tp_prop)) tp_prop = tp_prop -> next; if (tmp_fprop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d\n", bid+1, tp_prop -> pid, j+1, m+1); print_info (str, NULL, buf); g_free (str); bid ++; } } } } g_free (ids); if (same_atom) g_free (already_done); return bid; } /*! \fn int is_this_new_prop (int sid, field_prop * init, field_prop * to_check) \brief check if field property exists, if not add it \param sid the type of structural property \param init the initial field property pointer \param to_check the field property to check */ int is_this_new_prop (int sid, field_prop * init, field_prop * to_check) { field_prop * tmp_pr = init; gboolean add_prop = TRUE; while (tmp_pr) { if (are_identical_prop (sid+1, 0, to_check, tmp_pr)) { add_prop = FALSE; break; } else if (tmp_pr -> next) { tmp_pr = tmp_pr -> next; } else { break; } } if (add_prop) { tmp_pr -> next = duplicate_field_prop (to_check, sid); tmp_pr -> next -> pid = tmp_pr -> pid + 1; } return (add_prop) ? 1 : 0; } /*! \fn int get_type_struct_to_print (field_molecule * tfmol, int sid) \brief build the list of 'sid' type structural property(ies) to print \param tfmol the field molecule \param sid the type of structural */ int get_type_struct_to_print (field_molecule * tfmol, int sid) { int pid = 0; tmp_fstr = tfmol -> first_struct[sid]; while (tmp_fstr) { if (tmp_fstr -> def -> use) { if (! print_prop[sid]) { print_prop[sid] = duplicate_field_prop (tmp_fstr -> def, sid); pid = print_prop[sid] -> pid = 1; } else { pid += is_this_new_prop (sid, print_prop[sid], tmp_fstr -> def); } } if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (tmp_fprop -> use && ! are_identical_prop (sid+1, 0, tmp_fstr -> def, tmp_fprop)) { if (! print_prop[sid]) { print_prop[sid] = duplicate_field_prop (tmp_fprop, sid); pid = print_prop[sid] -> pid = 1; } else { pid += is_this_new_prop (sid, print_prop[sid], tmp_fprop); } } tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } return pid; } field_atom* all_at; /*! \fn gboolean are_different_field_atoms (field_atom* at, field_atom* bt) \brief check if two field atoms are different \param at 1st field atom \param bt 2nd field atom */ gboolean are_different_field_atoms (field_atom* at, field_atom* bt) { if (g_strcmp0(at -> name, bt -> name) != 0) return TRUE; if (at -> sp != bt -> sp) return TRUE; if (at -> mass != bt -> mass) return TRUE; if (at -> charge != bt -> charge) return TRUE; return FALSE; } /*! \fn int get_different_atoms () \brief create the list of all different field atoms */ int get_different_atoms () { int numat = 0; tmp_fmol = tmp_field -> first_molecule; all_at = NULL; gboolean append; while (tmp_fmol) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (! all_at) { all_at = duplicate_field_atom(tmp_fat); numat = all_at -> id = 1; } else { append = TRUE; tmp_fbt = all_at; while (tmp_fbt) { if (! are_different_field_atoms(tmp_fat, tmp_fbt)) { merging_atoms (tmp_fbt, tmp_fat, FALSE); append = FALSE; break; } tmp_fbt = tmp_fbt -> next; } if (append) { tmp_fbt = all_at; while (tmp_fbt -> next) tmp_fbt = tmp_fbt -> next; tmp_fbt -> next = duplicate_field_atom (tmp_fat); numat = tmp_fbt -> next -> id = tmp_fbt -> id + 1; } } tmp_fat = tmp_fat -> next; } tmp_fmol = tmp_fmol -> next; } return numat; } /*! \fn void print_lammps_mass (GtkTextBuffer * buf) \brief pritn LAMMPS atomic masses \param buf the GtkTextBuffer to print into */ void print_lammps_mass (GtkTextBuffer * buf) { gchar * str; print_info ("\nMass\n\n", "bold", buf); tmp_fat = all_at; while (tmp_fat) { str = g_strdup_printf ("\t%d\t%f\n", tmp_fat -> id, tmp_fat -> mass); print_info (str, NULL, buf); g_free (str); tmp_fat = tmp_fat -> next; } } /*! \fn field_atom* get_print_atom (int aid) \brief get LAMMPS field atom \param aid the atom id to find */ field_atom* get_print_atom (int aid) { int i; tmp_fat = all_at; while (tmp_fat) { for (i=0; i num; i++) { if (tmp_fat -> list[i] == aid) return tmp_fat; } tmp_fat = tmp_fat -> next; } return NULL; } /*! \fn void print_lammps_atoms (GtkTextBuffer * buf) \brief print LAMMPS atoms \param buf the GtkTextBuffer to print into */ void print_lammps_atoms (GtkTextBuffer * buf) { int i; //, j, k; // * field_molecule * la_mol; field_atom* la_ats; gchar * pos, * atid, * atype; //* molid, * amass; gchar * str; print_info ("\nAtoms\n\n", "bold", buf); for (i=0; i natomes; i++) { atid = g_strdup_printf ("%10d", i+1); // * la_mol = get_active_field_molecule_from_model_id (tmp_proj, i); // molid = g_strdup_printf ("%5d", la_mol -> id+1); la_ats = get_print_atom (i); atype = g_strdup_printf ("%5d", la_ats -> id); pos = g_strdup_printf ("%f\t%f\t%f", tmp_proj -> atoms[0][i].x, tmp_proj -> atoms[0][i].y, tmp_proj -> atoms[0][i].z); // amass = g_strdup_printf ("%f", la_ats -> mass); /* switch () { case l_angle: // atom-ID molecule-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\t%s\n", atid, molid, atype, pos); print_info (str, NULL, buf); g_free (str); break; case l_atomic: */ // atom-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\n", atid, atype, pos); print_info (str, NULL, buf); g_free (str); /*break; case l_body: // atom-ID atom-type bodyflag mass x y z break; case l_bond: // atom-ID molecule-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\t%s\n", atid, molid, atype, pos); print_info (str, NULL, buf); g_free (str); break; case l_charge: // atom-type q x y z break; case l_dipole: // atom-ID atom-type q x y z mux muy muz break; case l_dpd: // atom-ID atom-type theta x y z break; case l_edpd: // atom-ID atom-type edpd_temp edpd_cv x y z break; case l_electron: // atom-ID atom-type q spin eradius x y z break; case l_ellipsoid: // atom-ID atom-type ellipsoidflag density x y z break; case l_full: // atom-ID molecule-ID atom-type q x y z break; case l_line: // atom-ID molecule-ID atom-type lineflag density x y z break; case l_mdpd: // atom-ID atom-type rho x y z break; case l_molecular: // atom-ID molecule-ID atom-type x y z break; case l_peri: // atom-ID atom-type volume density x y z break; case l_smd: // atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z break; case l_sph: // atom-ID atom-type rho esph cv x y z break; case l_sphere: // atom-ID atom-type diameter density x y z break; case l_spin: // atom-ID atom-type x y z spx spy spz sp break; case l_tdpd: // atom-ID atom-type x y z cc1 cc2 … ccNspecies break; case l_template: // atom-ID atom-type molecule-ID template-index template-atom x y z break; case l_tri: // atom-ID molecule-ID atom-type triangleflag density x y z break; case l_wavepacket: // atom-ID atom-type charge spin eradius etag cs_re cs_im x y z break; }*/ } } /*! \fn void print_lammps_atom_file (GtkTextBuffer * buf) \brief print LAMMPS atom file \param buf the GtkTextBuffer to print into */ void print_lammps_atom_file (GtkTextBuffer * buf) { int i, j; //, k, l; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); //str = g_strdup_printf ("# This file was created using %s\n", PACKAGE); //print_info (str, NULL, buf); //g_free (str); print_info ("LAMMPS Atom File\n\n", NULL, buf); str = g_strdup_printf ("%12d", tmp_proj -> natomes); print_info (str, "bold_blue", buf); g_free (str); print_info (" atoms", "bold", buf); print_info ("\n", NULL, buf); gchar * str_title[4] = {" bond", " angle", " dihedral", " improper"}; for (i=0; i<4; i++) { tmp_fmol = tmp_field -> first_molecule; j = 0; while (tmp_fmol) { if (tmp_field -> afp[i*2+15]) { j += get_num_struct_to_print (tmp_fmol, i*2); } tmp_fmol = tmp_fmol -> next; } if (j > 0) { str = g_strdup_printf ("%12d", j); print_info (str, "bold_blue", buf); g_free (str); print_info (str_title[i], "bold", buf); print_info ("s\n", "bold", buf); } } print_info ("\n", NULL, buf); int numat = get_different_atoms (); str = g_strdup_printf ("%12d", numat); print_info (str, "bold_red", buf); g_free (str); print_info (" atom types", "bold", buf); print_info ("\n", NULL, buf); int ntypes[4]; for (i=0; i<4; i++) { ntypes[i] = 0; print_prop[2*i] = NULL; if (tmp_field -> afp[i*2+15]) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { j = get_type_struct_to_print (tmp_fmol, 2*i); ntypes[i] += j; tmp_fmol = tmp_fmol -> next; } if (ntypes[i] > 0) { str = g_strdup_printf ("%12d", ntypes[i]); print_info (str, "bold_red", buf); g_free (str); print_info (str_title[i], "bold", buf); print_info (" types\n", "bold", buf); } } } // Lattice print_info ("\n", NULL, buf); /*xlo xhi ylo yhi zlo zhi*/ if (tmp_proj -> cell.pbc) { j = 0; for (i=0; i<3; i++) { str = g_strdup_printf ("%f %f %slo %shi\n", 0.0, tmp_proj -> cell.box[0].param[0][i], vect_comp[i], vect_comp[i]); print_info (str, NULL, buf); g_free (str); if (tmp_proj -> cell.box[0].param[1][i] != 90.0) j=1; } if (j) { float lx, ly, lz; float xy, xz, yz; lx = tmp_proj -> cell.box[0].param[0][0]; xy = tmp_proj -> cell.box[0].param[0][1] * cos(tmp_proj -> cell.box[0].param[1][2]*pi/180.0); xz = tmp_proj -> cell.box[0].param[0][2] * cos(tmp_proj -> cell.box[0].param[1][1]*pi/180.0); ly = sqrt(tmp_proj -> cell.box[0].param[0][1]*tmp_proj -> cell.box[0].param[0][1] -xy*xy); yz = (tmp_proj -> cell.box[0].param[0][1]*(tmp_proj -> cell.box[0].param[0][2]*cos(tmp_proj -> cell.box[0].param[1][0]*pi/180.0)) - xy*xz) / ly; lz = sqrt(tmp_proj -> cell.box[0].param[0][2]*tmp_proj -> cell.box[0].param[0][2] - xz*xz - yz*yz); str = g_strdup_printf ("%f %f %f\n", lx, ly, lz); print_info (str, NULL, buf); g_free (str); } } else { // min(pos), max(pos) } // Masses print_lammps_mass (buf); gchar * coeffs[13]={"Pair", "Bond", "Angle", "Dihedral", "Improper", "BondBond", "BondAngle", "MiddleBondTorsion", "EndBondTorsion", "AngleTorsion", "AngleAngleTorsion", "BondBond13", "AngleAngle"}; // > 5 = CVFF force field ? /* if (tmp_field -> afp[23]) { j=0; tmp_fbody = tmp_field -> first_body[0]; while (tmp_fbody) { if (tmp_fbody -> use) j++; tmp_fbody = tmp_fbody -> next; } if (j > 0) { k = get_num_vdw_max (); l = k * (k+1) / 2; str = g_strdup_printf ("%s Coeffs\n\n", coeffs[0]); print_info(str, "bold", buf); g_free (str); tmp_fbody = tmp_field -> first_body[0]; while (tmp_fbody) { if (tmp_fbody -> use) { print_lam_body (buf, l, tmp_fbody); } tmp_fbody = tmp_fbody -> next; } } } */ for (i=0; i<4; i++) { if (ntypes[i]) { str = g_strdup_printf ("\n%s Coeffs\n\n", coeffs[i+1]); print_info (str, "bold", buf); g_free (str); tmp_fprop = print_prop[2*i]; while (tmp_fprop) { str = g_strdup_printf (" %5d", tmp_fprop -> pid); print_info (str, NULL, buf); g_free (str); for (j=0; j key]; j++) { str = g_strdup_printf (" %15.10f", tmp_fprop -> val[j]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); tmp_fprop = tmp_fprop -> next; } } } // Atoms print_lammps_atoms (buf); for (i=0; i<4; i++) { j = 0; if (ntypes[i]) { str = g_strdup_printf ("\n%ss\n\n", coeffs[i+1]); print_info(str, "bold", buf); g_free (str); tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { if (get_num_struct_to_print (tmp_fmol, i*2)) { tmp_fstr = tmp_fmol -> first_struct[i*2]; while (tmp_fstr) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[1]); if (i > 0) tmp_fct = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[2]); if (i > 1) tmp_fdt = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[3]); if (i == 0) j = print_lammps_bond (j, i, buf, tmp_fstr); if (i == 1) j = print_lammps_angle (j, i, buf, tmp_fstr); if (i == 2) j = print_lammps_dihedral (j, i, buf, tmp_fstr); // if (i == 3) j = print_lammps_improper (j, i, buf, tmp_fstr); tmp_fstr = tmp_fstr -> next; } } tmp_fmol = tmp_fmol -> next; } } } } atomes_1.3.1/locale/0000775000175000017500000000000015212624223013744 5ustar lerouxlerouxatomes_1.3.1/locale/fr/0000775000175000017500000000000015212624223014353 5ustar lerouxlerouxatomes_1.3.1/locale/fr/atomes-messages.po0000664000175000017500000151231215212624223020015 0ustar lerouxleroux# This file is part of the 'atomes' software # # 'atomes' is free software: you can redistribute it and/or modify it under the terms # of the GNU Affero General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later version. # # 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU Affero General Public License along with 'atomes'. # If not, see # # Copyright (C) 2022-2026 by CNRS and University of Strasbourg msgid "" msgstr "" "Project-Id-Version: atomes 1.3.0\n" "PO-Revision-Date: 2026-05-12 16:25+0200\n" "Last-Translator: Sébastien Le Roux \n" "Language-Team: Français\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # ============================================================ # Section: gui # ============================================================ # File: gui/bdcall.c, Line: 181 msgid "Angles [%s-%s-%s]" msgstr "Angles [%s-%s-%s]" # File: gui/bdcall.c, Line: 197 msgid "Dihedrals [%s-%s-%s-%s]" msgstr "Dièdres [%s-%s-%s-%s]" # File: gui/bdcall.c, Line: 431 msgid "\n\nAngles and diherdrals distribution(s)\n\n" msgstr "\n\nDistribution(s) des angles et dièdres\n\n" # File: gui/bdcall.c, Line: 432 # File: gui/grcall.c, Line: 142 # File: gui/msdcall.c, Line: 154 # File: gui/sqcall.c, Line: 145 msgid "Calculation details:\n\n" msgstr "Détails du calcul:\n\n" # File: gui/bdcall.c, Line: 433 msgid "\tAngular space discretization:\n\n" msgstr "\tDiscrétisation de l'espace angulaire:\n\n" # File: gui/bdcall.c, Line: 434,997 msgid "\t - Number of δ° steps: " msgstr "\t - Nombre d'intervalles δ°: " # File: gui/bdcall.c, Line: 438 msgid "\n\n\t between 0.0 and 180.0" msgstr "\n\n\t entre 0,0 et 180,0" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 # File: gui/bdcall.c, Line: 495 # File: opengl/win/glwindow.c, Line: 157 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 82 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Fragment" msgstr "Fragment" # File: calc/cpmd/cpmd_init.c, Line: 214 # File: calc/dl_poly/dlp_field.c, Line: 142 # File: gui/bdcall.c, Line: 503 # File: opengl/win/glwindow.c, Line: 158 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 83 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_library.c, Line: 1148 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Molecule" msgstr "Molécule" # File: gui/bdcall.c, Line: 589 # File: gui/chainscall.c, Line: 315 # File: gui/ringscall.c, Line: 446 # File: gui/spcall.c, Line: 211 msgid "The nearest neighbors table calculation has failed" msgstr "Le calcul de la table des plus proches voisins a échoué" # File: gui/bdcall.c, Line: 596 # File: gui/spcall.c, Line: 207 msgid "Impossible to update FORTRAN data" msgstr "Impossible de mettre à jour les données FORTRAN" # File: gui/bdcall.c, Line: 623 msgid "Unexpected error when calculating bond properties" msgstr "Erreur inattendue lors du calcul des propriétés des liaisons" # File: gui/bdcall.c, Line: 635 msgid "Unexpected error when looking for isolated fragment(s) and molecule(s)" msgstr "Erreur inattendue lors de la recherche de fragment(s) isolé(s) et de molécule(s)" # File: gui/bdcall.c, Line: 681 msgid "Unexpected error when calculating the bond angles distribution" msgstr "Erreur inattendue lors du calcul de la distribution des angles de liaison" # File: gui/bdcall.c, Line: 689 msgid "Unexpected error when calculating the dihedral angles distribution" msgstr "Erreur inattendue lors du calcul de la distribution des angles dièdres" # File: gui/bdcall.c, Line: 735 msgid "\n\nBond properties\n\n" msgstr "\n\nPropriétés des liaisons\n\n" # File: gui/bdcall.c, Line: 736 msgid "Existence of a bond between 2 atoms i (α) and j (β)\n" msgstr "Existence d'une liaison entre 2 atomes i (α) et j (β)\n" # File: gui/bdcall.c, Line: 737 msgid "if the 2 following conditions are verified:\n\n\t1) D" msgstr "si les 2 conditions suivantes sont vérifiées:\n\n\t1)D" # File: gui/bdcall.c, Line: 739 msgid " < first minimum of the total g(r) (%9.5f Ã… )\n\t2) D" msgstr " < premier minimum de la g(r) totale (%9.5f Ã… )\n\t2)D" # File: gui/bdcall.c, Line: 744,771 msgid "cut" msgstr "coup." # File: gui/bdcall.c, Line: 752 msgid "\nCoordination numbers: " msgstr "\nNombres de coordination: " # File: gui/bdcall.c, Line: 758 msgid " (total)=\t" msgstr " (total)=\t" # File: gui/bdcall.c, Line: 785,974,1065,1089,1113,1164,1189 msgid "\t or \t" msgstr "\t ou \t" # File: gui/bdcall.c, Line: 801 msgid "\nAverage coordination number: " msgstr "\nNombre de coordination moyen: " # File: gui/bdcall.c, Line: 842 msgid "\nWarren-Cowley chemical order parameters for A" msgstr "\nParamètres d'ordre chimique de Warren-Cowley pour systèmes binaires A" # File: gui/bdcall.c, Line: 846,884 msgid " binary systems:\n\n" msgstr ":\n\n" # File: gui/bdcall.c, Line: 880 msgid "\nCargill-Spaepen chemical order parameters for A" msgstr "\nParamètres d'ordre chimique de Cargill-Spaepen pour systèmes binaires A" # File: gui/bdcall.c, Line: 915 msgid "\nEnvironments for " msgstr "\nEnvironnements pour " # File: gui/bdcall.c, Line: 921,1041,1129 msgid " atoms:\n\n" msgstr " atomes:\n\n" # File: gui/bdcall.c, Line: 922 msgid "\t \tN(tot)" msgstr "\t \tN(total)" # File: gui/bdcall.c, Line: 935 msgid "\tNumber\t\t or \tPercent\n\n" msgstr "\tNombre\t\t ou \tpourcentage\n\n" # File: gui/bdcall.c, Line: 995 msgid "\n\nAngle distribution function(s)\n\n" msgstr "\n\nFonction(s) de distribution des angles\n\n" # File: gui/bdcall.c, Line: 996 msgid "\tAngle space discretization:\n\n" msgstr "\tDiscrétisation de l'espace angulaire:\n\n" # File: gui/bdcall.c, Line: 1001 msgid "\n\n\t between 0.0 and 180.0°\n" msgstr "\n\n\t entre 0,0 et 180,0°\n" # File: gui/bdcall.c, Line: 1039 msgid "\nNumber and proportion of tetrahedra links for " msgstr "\nNombre et proportion de liens entre tétraèdres pour " # File: gui/bdcall.c, Line: 1052,1140 msgid " tetrahedra:\n" msgstr " tétraèdres:\n" # File: gui/bdcall.c, Line: 1055,1154 msgid "\t\t Edge-sharing: " msgstr "\t\t Arête commune: " # File: gui/bdcall.c, Line: 1079,1179 msgid "\t\t Corner-sharing: " msgstr "\t\t Sommet commun: " # File: gui/bdcall.c, Line: 1103 msgid "\t\t with the following bond defects: " msgstr "\t\t présentant les défauts de liaison suivants: " # File: gui/bdcall.c, Line: 1127 msgid "\nNumber and proportion of tetrahedra units for " msgstr "\nNombre et proportion d'unités tétraèdres pour " # File: gui/bdcall.c, Line: 1141 msgid "\t\t Total number of tetrahedra:" msgstr "\t\t Nombre total de tétraèdres:" # File: gui/calc_menu.c, Line: 600 msgid "[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)." msgstr "[1] S.V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D.S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke et H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan et A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cristal. A, 58(4):346-351 (2002)." # File: gui/calc_menu.c, Line: 776 msgid "The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n" msgstr "Le résultat de l’analyse des plus proches voisins\n" "sera enregistré dans un fichier que vous pourrez utiliser par la suite.\n" # File: gui/calc_menu.c, Line: 817 msgid "You must specify a number of δr intervals >= 2\n" "to discretize the real space between 0.0 and Dmax\n" msgstr "Vous devez spécifier un nombre d'intervalles δr >= 2\n" "pour discrétiser l'espace réel entre 0.0 et Dmax\n" # File: gui/calc_menu.c, Line: 823 msgid "You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax" msgstr "Vous devez spécifier un vecteur d'onde maximum Qmax[FFT]\n" "pour la FFT, avec Qmin < Qmax[FFT] <= Qmax" # File: gui/calc_menu.c, Line: 868 msgid "You must specify a number of δr intervals >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances" msgstr "Vous devez spécifier un nombre d'intervalles δr >= 2\n" "discrétiser l'espace réel entre\n" "les distances interatomiques les plus courtes et les plus élevées" # File: gui/calc_menu.c, Line: 875 msgid "You must specify a number of δθ intervals >= 2\n" "to discretize the angular space between 0 and 180°" msgstr "Vous devez spécifier un nombre d'intervalles δθ >= 2\n" "discrétiser l'espace angulaire entre 0 et 180°" # File: gui/calc_menu.c, Line: 904 msgid "You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value" msgstr "Vous devez spécifier un nombre de %ss par taille 'n' et par nÅ“ud\n" "cette valeur est utilisée pour allouer la mémoire pour stocker les résultats\n" "et dépend à la fois de la taille maximale %s utilisée dans la recherche\n" "et du système étudié.\n" "Nous recommandons une valeur au moins égale à 100.\n" "S'il apparaît que la valeur donnée n'est pas assez grande\n" "(ex : plus de 100 %s différents de taille 'n' pour un seul nÅ“ud)\n" "alors la recherche échouera mais le programme vous proposera\n" "d'effectuer une nouvelle recherche en utilisant une valeur plus élevée" # File: gui/calc_menu.c, Line: 950 msgid "You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n" msgstr "Vous devez préciser l'unité de temps\n" "utilisé pour intégrer les équations de Newton\n" "du mouvement au cours de la dynamique moléculaire\n" # File: gui/calc_menu.c, Line: 971 msgid "You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n" msgstr "Vous devez préciser le nombre de pas\n" "entre chacune des %d configurations\n" "recensée pour la dynamique moléculaire\n" # File: gui/calc_menu.c, Line: 171 msgid "ωmax =" msgstr "ωmax =" # File: gui/calc_menu.c, Line: 179 msgid "Update step(s) between conf. and δt to evaluate ωmax" msgstr "Mettre à jour les pas entre conf. et δt pour évaluer ωmax" # File: gui/calc_menu.c, Line: 297 msgid "Maximum l, lmax ∈ [2-40]" msgstr "Maximum l, lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 314,317 msgid "Number of configurations:" msgstr "Nombre de configurations:" # File: gui/calc_menu.c, Line: 315 msgid "\tTime step δt used during the dynamics:" msgstr "\tPas de temps δt utilisé lors de la dynamique:" # File: gui/calc_menu.c, Line: 316 msgid "\tNumber of step(s) between each configuration:" msgstr "\tNombre de pas entre chaque configuration:" # File: gui/calc_menu.c, Line: 318 # File: gui/preferences.c, Line: 4240 msgid "Time step δt" msgstr "Pas de temps δt" # File: gui/calc_menu.c, Line: 319 # File: gui/preferences.c, Line: 4229 msgid "Step(s) between conf." msgstr "Pas entre les conf." # File: gui/calc_menu.c, Line: 580 msgid "All Rings (No Rule)" msgstr "Tous les Anneaux (Aucune Règle)" # File: gui/calc_menu.c, Line: 581 msgid "King's [1, 3]" msgstr "de King [1, 3]" # File: gui/calc_menu.c, Line: 582 msgid "Guttman's [2]" msgstr "de Guttman [2]" # File: gui/calc_menu.c, Line: 583 msgid "Primitives [4, 5, 6]" msgstr "Primitifs [4, 5, 6]" # File: gui/calc_menu.c, Line: 584 msgid "Strongs [4, 5]" msgstr "Forts [4, 5]" # File: gui/calc_menu.c, Line: 585 msgid "Definition of ring to be used: " msgstr "Définition d'anneaux à utiliser: " # File: gui/calc_menu.c, Line: 585 msgid "Atom(s) to initiate the search from: " msgstr "Atome(s) à partir desquels initier la recherche: " # File: gui/calc_menu.c, Line: 586 msgid "nmax = maximum size for a ring *" msgstr "nmax = taille maximale pour un anneau*" # File: gui/calc_menu.c, Line: 587 msgid "Maximum number of rings of size n per MD step **" msgstr "Nombre maximum d'anneaux de taille n par pas de DM **" # File: gui/calc_menu.c, Line: 588 msgid "nmax = maximum size for a chain *" msgstr "nmax = taille maximale pour une chaîne *" # File: gui/calc_menu.c, Line: 589 msgid "Maximum number of chains of size n per MD step **" msgstr "Nombre maximum de chaînes de taille n par pas de DM**" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 470 msgid "Only search for ABAB rings" msgstr "Rechercher uniquement les anneaux ABAB" # File: gui/calc_menu.c, Line: 590 msgid "No homopolar bonds in the rings (A-A, B-B ...) ***" msgstr "Pas de liaisons homopolaires dans les anneaux (A-A, B-B...) ***" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 472 msgid "No homopolar bonds in the connectivity matrix" msgstr "Pas de liaisons homopolaires dans la matrice de connectivité" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 476 msgid "Only search for AAAA chains" msgstr "Rechercher uniquement les chaînes AAAA" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 477 msgid "Only search for ABAB chains" msgstr "Rechercher uniquement les chaînes ABAB" # File: gui/calc_menu.c, Line: 592 msgid "No homopolar bonds in the chains (A-A, B-B ...) ***" msgstr "Pas de liaisons homopolaires dans les chaînes (A-A, B-B...) ***" # File: gui/calc_menu.c, Line: 592 msgid "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains." msgstr "Recherchez uniquement les chaînes d'atomes 1-(2)n-1, c'est-à-dire les chaînes isolées." # File: gui/calc_menu.c, Line: 594 msgid "in total number of nodes (or atoms)" msgstr "en nombre total de nÅ“uds (ou atomes)" # File: gui/calc_menu.c, Line: 595 msgid "value used for memory allocation = f(nmax, system studied)" msgstr "valeur utilisée pour l'allocation mémoire = f(nmax, système étudié)" # File: gui/calc_menu.c, Line: 596 msgid "but homopolar bonds can shorten the rings" msgstr "mais les liaisons homopolaires peuvent raccourcir les anneaux" # File: gui/calc_menu.c, Line: 608 # File: gui/chainscall.c, Line: 124 # File: gui/ringscall.c, Line: 163 # File: opengl/edit/cbuild_edit.c, Line: 949 # File: opengl/win/initcoord.c, Line: 645 # File: opengl/win/m_coord.c, Line: 597 # File: opengl/win/w_search.c, Line: 4154 msgid "All" msgstr "Tous" # File: gui/calc_menu.c, Line: 611 # File: opengl/win/w_search.c, Line: 3917,4147 msgid "Chemical Species" msgstr "Espèces Chimiques" # File: gui/calc_menu.c, Line: 782 msgid "Save neighbors analysis in file" msgstr "Enregistrer l'analyse des voisins dans un fichier" # File: calc/cpmd/cpmd_init.c, Line: 1542 # File: calc/dl_poly/dlp_field.c, Line: 4753 # File: curve/w_data.c, Line: 181 # File: curve/w_img.c, Line: 250 # File: gui/calc_menu.c, Line: 782 # File: gui/callbacks.c, Line: 560,918,1775 # File: gui/gui.c, Line: 772,853 # File: gui/work_menu.c, Line: 134,148,177 # File: opengl/draw/image.c, Line: 212 # File: opengl/draw/movie.c, Line: 1310 # File: opengl/win/m_map.c, Line: 885 # File: opengl/win/w_chains.c, Line: 959 # File: opengl/win/w_rings.c, Line: 1094 msgid "Save" msgstr "Sauvegarder" # File: gui/calc_menu.c, Line: 868 msgid "You must specify a number of δr intervals >= 2\n" msgstr "Vous devez spécifier un nombre d'intervalles δr >= 2\n" # File: gui/calc_menu.c, Line: 822 msgid "You must specify a maximum wave vector Qmax[FFT]\n" msgstr "Vous devez spécifier un vecteur d'onde maximum Qmax[FFT]\n" # File: gui/calc_menu.c, Line: 843 msgid "You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin" msgstr "Vous devez spécifier un vecteur d'onde maximum Qmax\n" "notez que Qmax doit être > Qmin" # File: gui/calc_menu.c, Line: 850 msgid "You must specify a number of δq intervals >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n" msgstr "Vous devez spécifier un nombre d'intervalles δq >= 2\n" "pour discrétiser l'espace réciproque entre 0.0 et Qmax\n" # File: gui/calc_menu.c, Line: 883 msgid "ring" msgstr "anneau" # File: gui/calc_menu.c, Line: 892 msgid "chain" msgstr "chaîne" # File: gui/calc_menu.c, Line: 896 msgid "You must specify a maximum %s size > 1 for the search" msgstr "Vous devez spécifier une taille maximale %s > 1 pour la recherche" # File: gui/calc_menu.c, Line: 929 msgid "You must specify a number lmax ∈ [2-40]" msgstr "Vous devez spécifier un nombre lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 949 msgid "You must specify the time step δt\n" msgstr "Vous devez préciser le pas de temps δt\n" # File: gui/calc_menu.c, Line: 997 msgid "You must specify the number of frequency points\n" msgstr "Vous devez préciser le nombre de points de fréquence\n" # File: gui/calc_menu.c, Line: 1011 msgid "Number of δr [Dijmin-Dijmax]" msgstr "Nombre de δr [Dijmin-Dijmax]" # File: gui/calc_menu.c, Line: 1012 msgid "Number of δθ [0-180°]" msgstr "Nombre de δθ [0-180°]" # File: gui/calc_menu.c, Line: 1013 msgid "First coordination sphere properties" msgstr "Propriétés de la première sphère de coordination" # File: gui/calc_menu.c, Line: 1014 msgid "Bond and dihedral angles distribution" msgstr "Distribution des angles de liaisons et dièdres" # File: gui/calc_menu.c, Line: 1015 msgid "Search for molecules and isolated fragments" msgstr "Recherche de molécules et de fragments isolés" # File: gui/calc_menu.c, Line: 1016 msgid "Output detailed results in text file" msgstr "Afficher les résultats détaillés dans un fichier texte" # File: gui/calc_menu.c, Line: 1130 msgid "You must specify a probability between 0.0 and 1.0" msgstr "Vous devez spécifier une probabilité comprise entre 0,0 et 1,0" # File: gui/calc_menu.c, Line: 1134 msgid "Qlim must be ≥ Qmin and ≤ Qmax" msgstr "Qlim doit être ≥ Qmin et ≤ Qmax" # File: gui/calc_menu.c, Line: 1160 msgid "The smoothing factor must be between 0.0 and 1.0" msgstr "Le facteur de lissage doit être compris entre 0,0 et 1,0" # File: gui/calc_menu.c, Line: 1349 msgid "No data set(s) to be smoothed\n" msgstr "Aucun ensemble de données à lisser\n" # File: gui/calc_menu.c, Line: 1364 msgid "Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]" msgstr "Probabilité de garder un vecteur\nd'onde q > Qlim ∈ [0,0-1,0]" # File: gui/calc_menu.c, Line: 1365 msgid "Qlim [Å-1] ∈ [Qmin-Qmax]" msgstr "Qlim [Å-1] ∈ [Qmin-Qmax]" # File: gui/calc_menu.c, Line: 1366 msgid " Advanced options" msgstr " Options avancées" # File: gui/calc_menu.c, Line: 1402 msgid " Gaussian data smoothing" msgstr " Lissage gaussien des données" # File: gui/calc_menu.c, Line: 1407 msgid "Factor [0.0-1.0]" msgstr "Facteur [0,0-1,0]" # File: gui/calc_menu.c, Line: 1411 msgid "Smooth" msgstr "Lisser" # File: gui/calc_menu.c, Line: 1430 msgid "Number of δr steps" msgstr "Nombre d'intervalles δr" # File: gui/calc_menu.c, Line: 1431 msgid "Number of δq steps" msgstr "Nombre d'intervalles δq" # File: gui/calc_menu.c, Line: 1434 msgid "Qmax [Å-1]" msgstr "Qmax [Å-1]" # File: gui/calc_menu.c, Line: 1436 msgid "Qmax for the FFT [Å-1]" msgstr "Qmax pour la FFT [Å-1]" # File: gui/calc_menu.c, Line: 1481 msgid "Dmax is the maximum inter-atomic distance in the model" msgstr "Dmax est la distance inter-atomique maximale dans le modèle" # File: gui/calc_menu.c, Line: 1487,1864 msgid "Qmin is the minimum wave vector for the model" msgstr "Qmin est le vecteur d'onde minimum pour le modèle" # File: gui/calc_menu.c, Line: 1493 msgid "Qmax is the maximum wave vector to compute S(q)" msgstr "Qmax est le vecteur d'onde maximum pour calculer S(q)" # File: gui/calc_menu.c, Line: 1667 msgid "Number of δt results to save" msgstr "Nombre de δt résultats à enregistrer" # File: gui/calc_menu.c, Line: 1667 msgid "Number of q vectors to analyze" msgstr "Nombre de vecteurs q à analyser" # File: gui/calc_menu.c, Line: 1708 msgid "This value must be > 0 and < number of steps" msgstr "Cette valeur doit être > 0 et < nombre de pas" # File: gui/calc_menu.c, Line: 1713,1931 msgid "%d calculation results in total !" msgstr "%d résultats de calcul au total !" # File: gui/calc_menu.c, Line: 1727 msgid "This value must be > 0" msgstr "Cette valeur doit être > 0" # File: gui/calc_menu.c, Line: 1890 msgid "ω points in [0.0, ωmax]" msgstr "ω points en [0.0, ωmax]" # File: gui/calc_menu.c, Line: 1876 msgid "δtmin is the correlation threshold" msgstr "δtmin est le seuil de corrélation" # File: gui/calc_menu.c, Line: 1905 msgid "Results" msgstr "Résultats" # File: gui/calc_menu.c, Line: 1908 msgid "atomes cannot yet display 3D results," msgstr "atomes ne peut pas encore afficher les résultats 3D," # File: gui/calc_menu.c, Line: 1909 msgid "but we are working to add this feature !" msgstr "mais nous travaillons pour ajouter cette fonctionnalité !" # File: gui/calc_menu.c, Line: 1910 msgid "For the time being you need to select" msgstr "Pour le moment, vous devez sélectionner" # File: gui/calc_menu.c, Line: 1911 msgid "what to display using the 2D graph system:" msgstr "ce qu'il faut afficher à l'aide du système de graph 2D:" # File: gui/calc_menu.c, Line: 1928 msgid "All δt correlated calculations" msgstr "Tous les calculs δt corrélés" # File: gui/calc_menu.c, Line: 1956 msgid "Intermediate scattering: F(q,δt)" msgstr "Diffusion intermédiaire: F(q,δt)" # File: gui/calc_menu.c, Line: 1956 msgid "Dynamic calculations: S(q,ω)" msgstr "Calculs dynamiques: S(q,ω)" # File: gui/callbacks.c, Line: 295 msgid "Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible d%s le fichier projet: \n\n" "\t\t%s\n\n" "\tErreur %s %s\n" "\tVersion du fichier du projet: %1.1f\n" # File: gui/callbacks.c, Line: 309 msgid "Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible d%s le fichier espace de travail.\n" "Erreur pour le projet: \n\n" "\t\t%s\n\n" "\tErreur %s %s\n" "\tVersion du fichier du projet: %1.1f\n" # File: gui/callbacks.c, Line: 1545 msgid "Error while parsing the chemical information\n" "please check carefully the coordinates file" msgstr "Erreur lors de l'analyse des informations chimiques\n" "veuillez vérifier attentivement le fichier de coordonnées" # File: gui/callbacks.c, Line: 88,1776 msgid "XYZ file" msgstr "Fichier XYZ" # File: gui/callbacks.c, Line: 89 msgid "XYZ file - NPT" msgstr "Fichier XYZ - NPT" # File: gui/callbacks.c, Line: 90,1776 msgid "Chem3D file" msgstr "Fichier Chem3D" # File: gui/callbacks.c, Line: 91 msgid "CPMD trajectory" msgstr "Trajectoire CPMD" # File: gui/callbacks.c, Line: 92 msgid "CPMD trajectory - NPT" msgstr "Trajectoire CPMD - NPT" # File: gui/callbacks.c, Line: 93 msgid "VASP trajectory" msgstr "Trajectoire VASP" # File: gui/callbacks.c, Line: 94 msgid "VASP trajectory - NPT" msgstr "Trajectoire VASP - NPT" # File: gui/callbacks.c, Line: 95,96 msgid "PDB file" msgstr "Fichier PDB" # File: gui/callbacks.c, Line: 97 msgid "Cryst. information (crystal build) - single configuration" msgstr "Info. cristal. (construction de cristal) - configuration unique" # File: gui/callbacks.c, Line: 98 msgid "Cryst. information (crystal build) - multiple configurations" msgstr "Info. cristal. (construction de cristal) - configurations multiples" # File: gui/callbacks.c, Line: 99 msgid "Cryst. information (symmetry positions) - single configuration" msgstr "Info. cristal. (positions de symétrie) - configuration unique" # File: gui/callbacks.c, Line: 100 msgid "DL-POLY HISTORY file" msgstr "Fichier HISTORY de DL-POLY" # File: gui/callbacks.c, Line: 101 msgid "ISAACS Project File" msgstr "Dossier de projet ISAACS" # File: gui/callbacks.c, Line: 133 msgid "Close workspace ?" msgstr "Fermer l'espace de travail ?" # File: calc/calc.c, Line: 106 # File: gui/callbacks.c, Line: 133 # File: gui/preferences.c, Line: 4945,4978 msgid "Are you sure ?" msgstr "Etes-vous sûr ?" # File: gui/callbacks.c, Line: 156 msgid "I/O error" msgstr "Erreur d'E/S" # File: gui/callbacks.c, Line: 157 msgid "project information" msgstr "informations sur le projet" # File: gui/callbacks.c, Line: 158 msgid "curve(s) information" msgstr "informations sur les courbes" # File: gui/callbacks.c, Line: 159 msgid "OpenGL information" msgstr "Informations OpenGL" # File: gui/callbacks.c, Line: 160 msgid "atom's data - A" msgstr "données de l'atome - A" # File: gui/callbacks.c, Line: 161 msgid "atom's data - B" msgstr "données de l'atome - B" # File: gui/callbacks.c, Line: 162 msgid "updating project" msgstr "projet de mise à jour" # File: gui/callbacks.c, Line: 163 msgid "this should not happen" msgstr "cela ne devrait pas arriver" # File: gui/callbacks.c, Line: 164 msgid "coordination data" msgstr "données de coordination" # File: gui/callbacks.c, Line: 165 msgid "ring(s) data" msgstr "données des anneaux" # File: gui/callbacks.c, Line: 166 msgid "chain(s) data" msgstr "données des chaînes" # File: gui/callbacks.c, Line: 167 msgid "molecule(s) data" msgstr "données des molécules" # File: gui/callbacks.c, Line: 168 msgid "analysis data" msgstr "données d'analyse" # File: gui/callbacks.c, Line: 169 msgid "ab-initio data" msgstr "données ab-initio" # File: gui/callbacks.c, Line: 170 msgid "classical data" msgstr "données classiques" # File: gui/callbacks.c, Line: 222 msgid "File : %s\n" msgstr "Fichier : %s\n" # File: gui/callbacks.c, Line: 223 msgid "Function: %s()\n" msgstr "Fonction: %s()\n" # File: gui/callbacks.c, Line: 224 msgid "Line : %d" msgstr "Ligne : %d" # File: gui/callbacks.c, Line: 296 msgid "open" msgstr "'ouvrir" # File: gui/callbacks.c, Line: 296 msgid "save" msgstr "e sauvegarder" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "reading" msgstr "en lisant" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "saving" msgstr "en sauvegardant" # File: gui/callbacks.c, Line: 528 msgid "Error %s workspace file\n%s\n" msgstr "Erreur %s le fichier d'espace de travail\n%s\n" # File: gui/callbacks.c, Line: 560 msgid "Open Project File(s)" msgstr "Ouvrir un ou plusieurs fichiers de projet" # File: gui/callbacks.c, Line: 560 msgid "Save Project File" msgstr "Enregistrer le fichier de projet" # File: gui/callbacks.c, Line: 560 msgid "Open Workspace" msgstr "Ouvrir un espace de travail" # File: gui/callbacks.c, Line: 560 msgid "Save Workspace" msgstr "Enregistrer l'espace de travail" # File: gui/callbacks.c, Line: 560,918,1381,1775 # File: gui/gui.c, Line: 767,847 # File: gui/work_menu.c, Line: 132,145 # File: opengl/win/m_map.c, Line: 885 msgid "Open" msgstr "Ouvrir" # File: gui/callbacks.c, Line: 562 msgid "Project file (*.apf)" msgstr "Fichier de projet (*.apf)" # File: gui/callbacks.c, Line: 562 msgid "Workspace file (*.awf)" msgstr "Fichier d'espace de travail (*.awf)" # File: gui/callbacks.c, Line: 580 msgid "A workspace is already open !" msgstr "Un espace de travail est déjà ouvert !" # File: gui/callbacks.c, Line: 584 msgid "Empty workspace ... nothing to be saved\n" msgstr "Espace de travail vide ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 591 msgid "Workspace contains only empty projects ... nothing to be saved\n" msgstr "L'espace de travail ne contient que des projets vides ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 596 msgid "No project open ... nothing to be saved\n" msgstr "Aucun projet ouvert ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 600 msgid "Empty project ... nothing to be saved\n" msgstr "Projet vide ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 651 msgid "%s - New project" msgstr "%s - Nouveau projet" # File: calc/cpmd/cpmd_init.c, Line: 1556 # File: gui/callbacks.c, Line: 711,916,1388,1831 # File: opengl/win/m_map.c, Line: 937 msgid "All files (*)" msgstr "Tous les fichiers (*)" # File: gui/callbacks.c, Line: 827 msgid "ISAACS project file (XML) successfully opened" msgstr "Le fichier de projet ISAACS (XML) a été ouvert avec succès" # File: gui/callbacks.c, Line: 880 msgid "Impossible to write the IPF file\n" msgstr "Impossible d'écrire le fichier IPF\n" # File: gui/callbacks.c, Line: 916 msgid "IPF file (*.ipf)" msgstr "Fichier IPF (*.ipf)" # File: gui/callbacks.c, Line: 917 msgid "Import ISAACS Project File" msgstr "Importer le fichier de projet ISAACS" # File: gui/callbacks.c, Line: 917 msgid "Export ISAACS Project File" msgstr "Exporter le fichier de projet ISAACS" # File: gui/callbacks.c, Line: 923 msgid "Save an empty project ?" msgstr "Enregistrer un projet vide ?" # File: gui/callbacks.c, Line: 923 msgid "Do you want to save an empty project ?" msgstr "Voulez-vous sauvegarder un projet vide ?" # File: gui/callbacks.c, Line: 1037 msgid "Label of atomic spec. N° %d:" msgstr "Label de l'espèce atomique. N° %d :" # File: gui/callbacks.c, Line: 1043 msgid "Number of %s atom(s):" msgstr "Nombre d'atomes %s :" # File: gui/callbacks.c, Line: 1048 msgid "Number of atom(s) for spec. N° %d:" msgstr "Nombre d'atomes pour l'espèce N° %d :" # File: gui/callbacks.c, Line: 1129 msgid "Chemical species info:" msgstr "Informations sur les espèces chimiques:" # File: gui/callbacks.c, Line: 1132 msgid "Species: " msgstr "Espèces: " # File: gui/callbacks.c, Line: 1271 msgid "Total number of atom(s):" msgstr "Nombre total d'atome(s):" # File: gui/callbacks.c, Line: 1271 msgid "Number of chemical species:" msgstr "Nombre d'espèces chimiques:" # File: gui/callbacks.c, Line: 1272 msgid "Reading CPMD / VASP trajectory" msgstr "Lecture de la trajectoire CPMD/VASP" # File: calc/cp2k/cp2k_mol.c, Line: 251 # File: calc/cpmd/cpmd_atoms.c, Line: 446 # File: calc/cpmd/cpmd_nose.c, Line: 466,1255 # File: calc/dl_poly/dlp_atom.c, Line: 739 # File: calc/dl_poly/dlp_edit.c, Line: 1264 # File: calc/dl_poly/dlp_mol.c, Line: 473,756 # File: curve/datab.c, Line: 473,526,1060 # File: gui/callbacks.c, Line: 1273 # File: gui/gtk-misc.c, Line: 619 # File: opengl/edit/atom_edit.c, Line: 445 # File: opengl/win/m_map.c, Line: 506,739,983 msgid "Apply" msgstr "Appliquer" # File: gui/callbacks.c, Line: 1352 msgid "Please select the file format of the NPT cell data" msgstr "Veuillez sélectionner le format de fichier des données des cellules NPT" # File: gui/callbacks.c, Line: 1352,1686 msgid "Select format:" msgstr "Sélectionnez le format:" # File: gui/callbacks.c, Line: 1378 msgid "Read cell data for NPT molecular dynamics" msgstr "Lire les données des cellules pour la dynamique moléculaire NPT" # File: gui/callbacks.c, Line: 1384 msgid "DAT files (*.dat)" msgstr "Fichiers DAT (*.dat)" # File: gui/callbacks.c, Line: 1531 msgid "Error loading atomic coordinates:\nfile does not exist" msgstr "Erreur lors du chargement des coordonnées atomiques:\nle fichier n'existe pas" # File: gui/callbacks.c, Line: 1534 msgid "Error loading coordinates file: format not supported" msgstr "Erreur de chargement du fichier de coordonnées: format non pris en charge" # File: gui/callbacks.c, Line: 1537 msgid "Error at input: impossible to process input file data" msgstr "Erreur de lecture: impossible de traiter les données du fichier d'entrée" # File: gui/callbacks.c, Line: 1619 msgid "%s - symmetry position(s)" msgstr "%s - position(s) de symétrie" # File: gui/callbacks.c, Line: 1686 msgid "Please select the file format of the atomic coordinates" msgstr "Veuillez sélectionner le format de fichier des coordonnées atomiques" # File: gui/callbacks.c, Line: 1694 msgid "Please select the format of the atomic coordinates" msgstr "Veuillez sélectionner le format des coordonnées atomiques" # File: gui/callbacks.c, Line: 1734 msgid "Impossible to export the atomic coordinates\nError code: %d" msgstr "Impossible d'exporter les coordonnées atomiques\nCode d'erreur: %d" # File: gui/callbacks.c, Line: 1774 msgid "Import atomic coordinates" msgstr "Importer des coordonnées atomiques" # File: gui/callbacks.c, Line: 1774 msgid "Export atomic coordinates" msgstr "Exporter les coordonnées atomiques" # File: gui/callbacks.c, Line: 1850 msgid "No project loaded ... nothing to be saved\n" msgstr "Aucun projet chargé ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 1854 msgid "Project %s is empty ... nothing to be saved\n" msgstr "Le projet %s est vide ... rien à sauvegarder\n" # File: gui/chainscall.c, Line: 352 msgid "\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tLes statistiques des chaînes ont échoué !\n\n" "Le nombre de chaînes par configuration apparaît\n" "être supérieur à la valeur initiale de %d\n" "utilisé pour allouer de la mémoire pour stocker les résultats.\n\n" "Augmentez la valeur et recommencez !" # File: gui/chainscall.c, Line: 73 msgid "Chains - Cc(n)[All]" msgstr "Chaînes - Cc(n)[Tous]" # File: gui/chainscall.c, Line: 76 msgid "Chains - Cc(n)[%s]" msgstr "Chaînes - Cc(n)[%s]" # File: gui/chainscall.c, Line: 94 # File: opengl/win/glwindow.c, Line: 312 # File: opengl/win/menu_bar.c, Line: 216,220 # File: opengl/win/popup.c, Line: 4236 # File: opengl/win/w_coord.c, Line: 1332 msgid "Chain(s)" msgstr "Chaîne(s)" # File: gui/chainscall.c, Line: 132 msgid "\n\nChain statistics\n\n" msgstr "\n\nStatistiques des chaînes\n\n" # File: gui/chainscall.c, Line: 136 msgid " * only AAAA chains have been considered\n" msgstr " * seules les chaînes AAAA ont été prises en compte\n" # File: gui/chainscall.c, Line: 140 msgid " * only ABAB chains have been considered\n" msgstr " * seules les chaînes ABAB ont été prises en compte\n" # File: gui/chainscall.c, Line: 144 msgid " * homopolar bonds can not shorten the chains\n" msgstr " * les liaisons homopolaires ne peuvent pas raccourcir les chaînes\n" # File: gui/chainscall.c, Line: 148 msgid " * only 1-(2)" msgstr " * seulement 1-(2)" # File: gui/chainscall.c, Line: 150 msgid "-1 chains have been considered, ie. isolated chains\n" msgstr "-1 chaînes ont été prises en compte, c'est à dire isolées\n" # File: gui/chainscall.c, Line: 152 # File: gui/ringscall.c, Line: 189 msgid "\n Atom(s) used to start the search: " msgstr "\n Atome(s) utilisé(s) pour initier la recherche: " # File: gui/chainscall.c, Line: 154 # File: gui/ringscall.c, Line: 191 msgid " atom(s) only" msgstr " atome(s) uniquement" # File: gui/chainscall.c, Line: 158 msgid "\n Average number of chains per configuration: " msgstr "\n Nombre moyen de chaînes par configuration: " # File: gui/chainscall.c, Line: 168 msgid "\n Total number of chains: " msgstr "\n Nombre total de chaînes: " # File: gui/chainscall.c, Line: 176 msgid "\n\t n Av. by step \tC" msgstr "\n\t n Av. par pas \tC" # File: gui/chainscall.c, Line: 191 msgid "\n\t n\tNumber\t\tC" msgstr "\n\t n\tNombre\t\tC" # File: gui/chainscall.c, Line: 346 msgid "The chain statistics calculation has failed" msgstr "Le calcul des statistiques de chaîne a échoué" # File: gui/edit_menu.c, Line: 779 msgid "To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters" msgstr "Pour appliquer les CLP ou utiliser des coordonnées fractionnaires\n" "décrivez correctement les paramètres de la boîte de simulation" # File: gui/edit_menu.c, Line: 73 msgid "Edges [Å]" msgstr "Bords [Å]" # File: gui/edit_menu.c, Line: 73 msgid "Angles [°]" msgstr "Angles [°]" # File: gui/edit_menu.c, Line: 411 msgid "Atom:" msgstr "Atome:" # File: calc/dl_poly/dlp_edit.c, Line: 2320 # File: gui/edit_menu.c, Line: 411 msgid "Element:" msgstr "Élément:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic number:" msgstr "Numéro atomique:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic mass:" msgstr "Masse atomique:" # File: gui/edit_menu.c, Line: 412 msgid "Radius:" msgstr "Rayon:" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/win/m_bonds.c, Line: 245 msgid "Radius" msgstr "Rayon" # File: gui/edit_menu.c, Line: 413 msgid "Neutrons scattering length:" msgstr "Longueur de diffusion neutronique:" # File: gui/edit_menu.c, Line: 413 msgid "X-rays scattering length:" msgstr "Longueur de diffusion des rayons X:" # File: gui/edit_menu.c, Line: 414 msgid "Covalent" msgstr "Covalent" # File: gui/edit_menu.c, Line: 414 msgid "Ionic" msgstr "Ionique" # File: gui/edit_menu.c, Line: 414 msgid "In Crystal" msgstr "Cristallin" # File: gui/edit_menu.c, Line: 76 msgid "Chemistry and physics" msgstr "Chimie et physique" # File: gui/edit_menu.c, Line: 76 msgid "Box and periodicity" msgstr "Boite et périodicité" # File: gui/edit_menu.c, Line: 76 msgid "Bond cutoffs" msgstr "Rayons de coupure" # File: gui/edit_menu.c, Line: 76,310 msgid "Lattice vectors" msgstr "Vecteurs de maille" # File: gui/edit_menu.c, Line: 279 msgid "Apply Periodic Boundary Conditions" msgstr "Appliquer les Conditions aux Limites Périodiques" # File: gui/edit_menu.c, Line: 282 msgid "Fractional coordinates" msgstr "Coordonnées fractionnaires" # File: gui/edit_menu.c, Line: 714 msgid "To define the existence of a bond between 2 atoms i (α) and j (β), " msgstr "Pour définir l'existence d'une liaison entre 2 atomes i (α) et j (β), " # File: gui/edit_menu.c, Line: 715 msgid "a bond exits if the 2 following conditions are verified:" msgstr "une liaison existe si les 2 conditions suivantes sont vérifiées:" # File: gui/edit_menu.c, Line: 716 msgid "1) Dij < first minimum of the total g(r) - rcut (Tot.)" msgstr "1) Dij < premier minimum de la g(r) totale - rcut (Tot.)" # File: gui/edit_menu.c, Line: 717 msgid "2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)" msgstr "2) Dij < premier minimum de la gα,β(r) partielle - rcut (α,β)" # File: gui/edit_menu.c, Line: 718 msgid "0.0 < rcut ≤ Dmax" msgstr "0,0 < rcoup. ≤ Dmax" # File: gui/edit_menu.c, Line: 719 msgid "Dmax is the maximum inter-atomic distance in the model\n" msgstr "Dmax est la distance inter-atomique maximale dans le modèle\n" # File: gui/edit_menu.c, Line: 726 msgid "%s\twith\tDmax = %f Å" msgstr "%s\tavec\tDmax = %f Å" # File: gui/edit_menu.c, Line: 732,737 msgid "With %s" msgstr "Avec %s" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "Data can be lost !" msgstr "Les données peuvent être perdues !" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?" msgstr "Vous perdrez les données\n des statistiques d'anneaux et/ou de chaînes\nContinuer quand même ?" # File: gui/grcall.c, Line: 69,70,71,72,73,74,75,76 # File: gui/sktcall.c, Line: 73,74,75,76,187,188,189,190 # File: gui/sqcall.c, Line: 65,66,67,68 msgid "Neutrons" msgstr "Neutrons" # File: gui/grcall.c, Line: 70,72,74,76,78,80,82,84,92,96,106,110,114 # File: gui/sktcall.c, Line: 74,76,78,80,88,98,106,110,114,118,188,190,192,194,203,213,221,225,229,233 # File: gui/sqcall.c, Line: 66,68,70,72,80,90,98,102,106,110 msgid "smoothed" msgstr "lissé" # File: gui/grcall.c, Line: 77,78,79,80,81,82,83,84 # File: gui/sktcall.c, Line: 77,78,79,80,191,192,193,194 # File: gui/sqcall.c, Line: 69,70,71,72 msgid "X-rays" msgstr "Rayons X" # File: gui/grcall.c, Line: 133 msgid "\n\nRadial distribution function(s)" msgstr "\n\nFonction(s) de distribution radiale" # File: gui/grcall.c, Line: 136 msgid " - real space calculation\n\n" msgstr " - calcul dans l'espace réel\n\n" # File: gui/grcall.c, Line: 140 msgid " - FFT[S(q)]\n\n" msgstr " - FFT[S(q)]\n\n" # File: gui/grcall.c, Line: 146 msgid "\tReciprocal space data:\n\n" msgstr "\tDonnées de l'espace réciproque:\n\n" # File: gui/grcall.c, Line: 147 msgid "\t - Minimum vector Q" msgstr "\t - Vecteur Q minimal" # File: gui/grcall.c, Line: 155 msgid "\n\t - Maximum vector Q" msgstr "\n\t - Vecteur maximal Q" # File: gui/grcall.c, Line: 157 msgid " for the FFT: " msgstr " pour la FFT: " # File: gui/grcall.c, Line: 165 msgid "\tReal space discretization:\n\n" msgstr "\tDiscrétisation de l'espace réel:\n\n" # File: gui/grcall.c, Line: 166 msgid "\t - Number of δr steps: " msgstr "\t - Nombre d'intervalles δr: " # File: gui/grcall.c, Line: 170 msgid "\n\n\t between 0.0 and " msgstr "\n\n\t entre 0,0 et " # File: gui/grcall.c, Line: 173 # File: gui/sqcall.c, Line: 159 msgid "\n\t where " msgstr "\n\t où " # File: gui/grcall.c, Line: 176 msgid " is the maximum distance in real space, " msgstr " est la distance maximale dans l'espace réel, " # File: gui/grcall.c, Line: 211 msgid "The g(r) calculation has failed" msgstr "Le calcul de la g(r) a échoué" # File: gui/grcall.c, Line: 330 msgid "The g(r) from FFT[S(k)] calculation has failed" msgstr "Le calcul de la g(r) par FFT[S(k)] a échoué" # File: curve/datab.c, Line: 1059 # File: gui/gtk-misc.c, Line: 619,2380,2395 msgid "Cancel" msgstr "Annuler" # File: gui/gtk-misc.c, Line: 1645 # File: opengl/win/glwindow.c, Line: 324 # File: opengl/win/m_atoms.c, Line: 712,822 # File: opengl/win/m_axis.c, Line: 337 # File: opengl/win/m_box.c, Line: 631 # File: opengl/win/m_coord.c, Line: 675 # File: opengl/win/m_poly.c, Line: 455 # File: opengl/win/m_rep.c, Line: 752 # File: opengl/win/menu_bar.c, Line: 238 # File: opengl/win/popup.c, Line: 4239 msgid "Advanced" msgstr "Avancé" # File: gui/gtk-misc.c, Line: 2345 msgid "Impossible to locate file: %s" msgstr "Impossible de localiser le fichier: %s" # File: gui/gui.c, Line: 113,124 # File: gui/initc.c, Line: 244,318 msgid "S(q) from FFT[g(r)]" msgstr "S(q) par FFT[g(r)]" # File: gui/gui.c, Line: 114,125 # File: gui/initc.c, Line: 246,325 msgid "S(q) from Debye Equation" msgstr "S(q) par l'Équation de Debye" # File: gui/gui.c, Line: 115,126 # File: gui/initc.c, Line: 239,332 msgid "g(r)/G(r) from FFT[S(q)]" msgstr "g(r)/G(r) par FFT[S(q)]" # File: gui/gui.c, Line: 116 msgid "Bonds and Angles" msgstr "Liaisons et Angles" # File: gui/gui.c, Line: 117,129 # File: gui/initc.c, Line: 261,350 msgid "Ring Statistics" msgstr "Statistiques d'Anneaux" # File: gui/gui.c, Line: 118,130 # File: gui/initc.c, Line: 265,356 msgid "Chain Statistics" msgstr "Statistiques de Chaînes" # File: gui/gui.c, Line: 119,131 # File: gui/initc.c, Line: 269,362 msgid "Spherical Harmonics" msgstr "Harmoniques Sphériques" # File: gui/gui.c, Line: 120,132 # File: gui/initc.c, Line: 275,368 msgid "Mean Squared Displacement" msgstr "Déplacement Carré Moyen" # File: gui/gui.c, Line: 121,133 # File: gui/initc.c, Line: 280,374 msgid "Dynamic Structure Factor" msgstr "Facteur de Structure Dynamique" # File: gui/gui.c, Line: 127 # File: gui/initc.c, Line: 253,338 msgid "Bond Properties" msgstr "Propriétés des Liaisons" # File: gui/gui.c, Line: 128 # File: gui/initc.c, Line: 257,344 msgid "Angle Distributions" msgstr "Distribution des Angles" # File: gui/gui.c, Line: 152,1021 msgid "About" msgstr "À propos" # File: gui/gui.c, Line: 152 msgid "open about dialog" msgstr "ouvrir la boîte de dialogue à propos" # File: gui/gui.c, Line: 153 msgid "Periodic table" msgstr "Tableau périodique" # File: gui/gui.c, Line: 153 msgid "open periodic table" msgstr "ouvrir le tableau périodique" # File: gui/gui.c, Line: 154,894 # File: gui/work_menu.c, Line: 198 msgid "Quit" msgstr "Quitter" # File: gui/gui.c, Line: 154 msgid "quit atomes" msgstr "quitter atomes" # File: gui/gui.c, Line: 157 msgid "Open workspace" msgstr "Ouvrir un espace de travail" # File: gui/gui.c, Line: 157 msgid "open atomes workspace" msgstr "ouvrir un espace de travail atomes" # File: gui/gui.c, Line: 158 msgid "Save workspace" msgstr "Enregistrer l'espace de travail" # File: gui/gui.c, Line: 158 msgid "save atomes workspace" msgstr "enregistrer l'espace de travail atomes" # File: gui/gui.c, Line: 159 msgid "Close workspace" msgstr "Fermer l'espace de travail" # File: gui/gui.c, Line: 159 msgid "close atomes workspace" msgstr "fermer l'espace de travail atomes" # File: gui/gui.c, Line: 162 msgid "New project" msgstr "Nouveau projet" # File: gui/gui.c, Line: 162 msgid "create new atomes project" msgstr "créer un nouveau projet atomes" # File: gui/gui.c, Line: 163 msgid "Open project" msgstr "Ouvrir un projet" # File: gui/gui.c, Line: 163 msgid "open atomes project" msgstr "ouvrir un projet atomes" # File: gui/gui.c, Line: 168 # File: gui/preferences.c, Line: 2474,3678,3855,4319,5062 # File: opengl/win/glwindow.c, Line: 126 msgid "General" msgstr "Général" # File: gui/gui.c, Line: 168,907,1033 # File: gui/work_menu.c, Line: 130 msgid "Workspace" msgstr "Espace de Travail" # File: gui/gui.c, Line: 168 msgid "Projects" msgstr "Projets" # File: gui/gui.c, Line: 775,856 # File: gui/work_menu.c, Line: 134,148,177 msgid "Save As" msgstr "Enregistrer Sous" # File: curve/m_curve.c, Line: 556 # File: gui/gui.c, Line: 778,861 # File: gui/work_menu.c, Line: 135,151,180 # File: opengl/edit/atom_edit.c, Line: 447 # File: opengl/edit/cbuild_edit.c, Line: 1434 # File: opengl/edit/cell_edit.c, Line: 203 # File: opengl/win/w_atoms.c, Line: 547 # File: opengl/win/w_coord.c, Line: 1378 # File: opengl/win/w_measures.c, Line: 683 msgid "Close" msgstr "Fermer" # File: gui/gui.c, Line: 799 msgid "ISAACS Project File (*.ipf)" msgstr "Fichier de Projet ISAACS (*.ipf)" # File: gui/gui.c, Line: 802 # File: gui/work_menu.c, Line: 156,185,195 msgid "Atomic Coordinates" msgstr "Coordonnées Atomiques" # File: gui/gui.c, Line: 826 # File: gui/work_menu.c, Line: 167 msgid "Make Active" msgstr "Rendre Actif" # File: gui/gui.c, Line: 832 # File: gui/work_menu.c, Line: 171 msgid "Analyze: %s" msgstr "Analyser: %s" # File: gui/gui.c, Line: 838 # File: gui/work_menu.c, Line: 175 msgid "Edit Name" msgstr "Éditer le Nom" # File: gui/gui.c, Line: 844 # File: gui/work_menu.c, Line: 144 msgid "New" msgstr "Nouveau" # File: curve/m_curve.c, Line: 78 # File: gui/gui.c, Line: 864 # File: gui/work_menu.c, Line: 153 msgid "Export" msgstr "Exporter" # File: gui/gui.c, Line: 879 # File: gui/work_menu.c, Line: 191 msgid "Import" msgstr "Importer" # File: gui/gui.c, Line: 930 # File: gui/work_menu.c, Line: 140 msgid "Project(s)" msgstr "Projet(s)" # File: gui/gui.c, Line: 971 msgid "Chemistry and Physics" msgstr "Chimie et Physique" # File: gui/gui.c, Line: 972 msgid "Box and Periodicity" msgstr "Boîte et Périodicité" # File: gui/gui.c, Line: 973 msgid "Bond Cutoffs" msgstr "Rayons de Coupure" # File: gui/gui.c, Line: 985 # File: gui/tools.c, Line: 342 # File: project/close_p.c, Line: 371 msgid "Toolboxes" msgstr "Boîtes à Outils" # File: gui/gui.c, Line: 1018 msgid "Periodic Table" msgstr "Tableau Périodique" # File: gui/gui.c, Line: 1019 msgid "Preferences" msgstr "Préférences" # File: curve/m_curve.c, Line: 572 # File: gui/gui.c, Line: 1020 # File: opengl/win/glwindow.c, Line: 599 # File: opengl/win/menu_bar.c, Line: 253 # File: opengl/win/popup.c, Line: 4281 msgid "Shortcuts" msgstr "Raccourcis" # File: gui/gui.c, Line: 1034 # File: opengl/win/m_tools.c, Line: 320,517 msgid "Edit" msgstr "Éditer" # File: gui/gui.c, Line: 1035 msgid "Analyze" msgstr "Analyser" # File: curve/m_curve.c, Line: 614 # File: gui/gui.c, Line: 1036 # File: opengl/win/glwindow.c, Line: 639,1523 # File: opengl/win/menu_bar.c, Line: 281 msgid "Help" msgstr "Aide" # File: gui/initc.c, Line: 99 msgid "Please wait calculation in progress" msgstr "Veuillez patienter calcul en cours" # File: gui/initc.c, Line: 102 msgid "Computing" msgstr "Calcul en cours" # File: gui/initc.c, Line: 261,350 msgid "Size n of the ring [total number of nodes]" msgstr "Taille n de l'anneau [nombre total de nÅ“uds]" # File: gui/initc.c, Line: 265,356 msgid "Size n of the chain [total number of nodes]" msgstr "Taille n de la chaîne [nombre total de nÅ“uds]" # File: gui/interface.c, Line: 339 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n" msgstr "\n\tErreur %s %s, à:\n" "\t\tFichier : %s\n" "\t\tFonction: %s()\n" "\t\tLigne : %d\n\n" "\tHistorique:\n%s\t\t →\t\t appel à %s()\n" # File: gui/interface.c, Line: 353 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n" msgstr "\n\tErreur %s %s, à:\n" "\t\tFichier : %s\n" "\t\tFonction: %s()\n" "\t\tLigne  : %d\n" # File: gui/interface.c, Line: 529 msgid "\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tRéaction chimique en une seule étape\n" "\t\tConsidérez chaque configuration comme une étape d’une réaction chimique:\n" "\t\t\t- Les coordonnées atomiques sont triées en fonction de l'occupation ou des sites\n" "\t\t\t- Chacun décrivant la proportion d'un réactif\n" "\t\t\t- Une super maille est construit pour respecter ces proportions\n\n" "\tTrajectoire MD\n" "\t\tConsidérez le fichier CIF comme une trajectoire MD\n\n" "\t\tLe nombre d'atomes ne doit pas changer entre les configurations\n\n" "\tConfiguration unique \n" "\t\tSélectionnez une seule configuration dans le fichier CIF" # File: gui/interface.c, Line: 534 msgid "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tTrajectoire MD\n" "\t\tConsidérez le fichier CIF comme une trajectoire MD\n\n" "\t\tLe nombre d'atomes ne doit pas changer entre les configurations\n\n" "\tConfiguration unique \n" "\t\tSélectionnez une seule configuration dans le fichier CIF" # File: gui/interface.c, Line: 677 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n" msgstr "\tEntier le plus petit: \n" "\t\t Occupation %s\n\t\t\t ex:\t ⌊8,76⌋ = 8\n\n" "\tEntier le plus élevé: \n" "\t\t Occupation %s\n\t\t\t ex:\t ⌈5,39⌉ = 6\n\n" "\tEntier le plus proche : \n" "\t\t Occupation %s\n\t\t\t ex:\t ⌊6,82⌉ = 7\t\t et\t ⌊4,31⌉ = 4\n\n" "\t\t%s\n" # File: gui/interface.c, Line: 117 msgid "Failed to open link:\n%s" msgstr "Échec de l'ouverture du lien:\n%s" # File: gui/interface.c, Line: 121 msgid "Impossible to open link: " msgstr "Impossible d'ouvrir le lien: " # File: gui/interface.c, Line: 139 msgid " Please contact me at:\n" msgstr " Merci de me contacter à:\n" # File: gui/interface.c, Line: 144 msgid "\n Or check the website for information\n" msgstr "\n Ou consultez le site Web pour plus d'informations\n" # File: gui/interface.c, Line: 147 msgid "Visit the project's website" msgstr "Visitez le site Web du projet" # File: gui/interface.c, Line: 187 msgid "Collaborations:" msgstr "Collaborations:" # File: gui/interface.c, Line: 189 msgid "Dr. Noël Jakse : dynamic structure factor" msgstr "Dr. Noël Jakse : facteur de structure dynamique" # File: gui/interface.c, Line: 191 msgid "Visualization, analyzis, creation/edition and post-processing of atomic scale models !" msgstr "Visualisation, analyse, création/édition et post-traitement de modèles atomiques !" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: gui/interface.c, Line: 252,449 msgid "Information" msgstr "Information" # File: gui/interface.c, Line: 268 msgid "Warning" msgstr "Avertissement" # File: gui/interface.c, Line: 310,330 msgid "Error" msgstr "Erreur" # File: gui/interface.c, Line: 331 msgid "Details" msgstr "Détails" # File: gui/interface.c, Line: 485 msgid "Leaving ?!" msgstr "Sortir ?!" # File: gui/interface.c, Line: 485 msgid "Are you sure you want to quit ?" msgstr "Etes-vous sûr de vouloir quitter ?" # File: gui/interface.c, Line: 505,777 msgid "Parameter required" msgstr "Paramètre requis" # File: gui/interface.c, Line: 511 msgid "Cartesian" msgstr "cartésien" # File: gui/interface.c, Line: 512 msgid "Atomic units" msgstr "Unités atomiques" # File: gui/interface.c, Line: 513 msgid "Fractional" msgstr "Fractionnaire" # File: gui/interface.c, Line: 518 msgid "1 line by step, as many lines as MD steps" msgstr "1 ligne par pas, autant de lignes que de pas de DM" # File: gui/interface.c, Line: 519 msgid "2 lines by step, twice as many lines as MD steps" msgstr "2 lignes par pas, deux fois plus de lignes que de pas de DM" # File: gui/interface.c, Line: 520 msgid "3 lines by step, three times as many lines as MD steps" msgstr "3 lignes par pas, trois fois plus de lignes que de pas de DM" # File: gui/interface.c, Line: 521 msgid "Single step chemical reaction" msgstr "Réaction chimique en une seule étape" # File: gui/interface.c, Line: 522 msgid "MD trajectory" msgstr "Trajectoire de DM" # File: gui/interface.c, Line: 523 msgid "Single configuration" msgstr "Configuration unique" # File: gui/interface.c, Line: 524 msgid "Round up to lowest integer" msgstr "Arrondir à l'entier le plus petit" # File: gui/interface.c, Line: 525 msgid "Round up to highest integer" msgstr "Arrondir à l'entier le plus élevé" # File: gui/interface.c, Line: 526 msgid "Round up to nearest integer" msgstr "Arrondir à l'entier le plus proche" # File: gui/interface.c, Line: 542 msgid "to lowest integer: ⌊nsites x occupancy⌋" msgstr "à l'entier le plus petit: ⌊nsites x occupation⌋" # File: gui/interface.c, Line: 543 msgid "to highest integer: ⌈nsites x occupancy⌉" msgstr "à l'entier le plus élevé: ⌈nsites x occupation⌉" # File: gui/interface.c, Line: 544 msgid "to nearest integer: ⌊nsites x occupancy⌉" msgstr "à l'entier le plus proche: ⌊nsites x occupation⌉" # File: gui/interface.c, Line: 545 msgid "with nsites = f(space group, crystalline positions)" msgstr "avec nsites = f(groupe d'espace, positions cristallines)" # File: gui/interface.c, Line: 546 msgid "with nsites = f(symmetry positions, crystalline positions)" msgstr "avec nsites = f(positions de symétrie, positions cristallines)" # File: gui/interface.c, Line: 627 msgid "Parameter Required" msgstr "Paramètre requis" # File: gui/interface.c, Line: 1088 msgid "%s - isolated" msgstr "%s - isolé" # File: gui/interface.c, Line: 1088 msgid " - isolated" msgstr " - isolé" # File: gui/main.c, Line: 179 msgid "\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" msgstr "\nUtilisation : atomes [OPTION]\n" " atomes [FICHIER]\n" " atomes [OPTION] [FICHIER]\n" " atomes [FICHIER1] [FICHIER2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "Outil d'analyse, de création/édition et de post-traitement de modèles 3D à l'échelle atomique\n\n" "choix :\n" " -v, --version informations sur la version\n" " -h, --help afficher ce message d'aide\n\n" "fichiers, n'importe quel nombre, dans n'importe quel ordre, dans les formats suivants:\n\n" " fichier de l'espace de travail atomes  : .awf\n" " fichier projet atomes : .apf\n" " Fichier de coordonnées XYZ : .xyz\n" " Fichier de coordonnées Chem3D : .c3d\n" " Trajectoire CPMD : .trj\n" " Trajectoire VASP : .xdatcar\n" " Coordonnées PDB : .pdb, .ent\n" " Fichier d'informations cristallographiques : .cif\n" " Fichier historique DL-POLY : .hist\n" " Fichier du projet ISAACS : .ipf\n\n" " vous pouvez également spécifier le format de fichier en utilisant:\n\n" " -awf [FICHIER]\n" " -apf [FICHIER]\n" " -xyz [FICHIER]\n" " -c3d [FICHIER]\n" " -trj [FICHIER]\n" " -xdatcar [FICHIER]\n" " -pdb [FICHIER], ou, -ent [FICHIER]\n" " -cif [FICHIER]\n" " -hist [FICHIER]\n" " -ipf [FICHIER]\n\n" "ex :\n\n" " atomes -pdb this.f fichier.awf -cif that.f *.xyz\n\n" "Rendu d'image depuis la ligne de commande:\n\n" "Utilisation: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png génère l'image au format PNG\n" " -j, --jpg, --render-jpg génère l'image au format JPEG\n" " -o, --output=[FILE] nom du fichier image\n" " -W, --width=[XSIZE] largeur de l'image\n" " -H, --height=[YSIZE] hauteur de l'image\n" " -s, --style=[STYLE] style de rendu\n" " -r, --rep=[REP] type de représentation\n" " -b, --box=[STYLE] style de boîte\n" " -a, --axis=[STYLE] style d'axe\n" " -e, --acolor=[MAP] carte des couleurs des atomes et des liaisons\n" " -t, --pcolor=[MAP] carte des couleurs des polyèdres\n" " -C, --box_color=[COULEUR] couleur de la boîte\n" " -G, --back_grad=[GRAD] type de dégradé d'arrière-plan\n" " -B, --back_color=[COULEUR] couleur d'arrière-plan\n" " -D, --back_dir=[DIR] direction du gradient de l'arrière-plan\n" " -P, --back_pos=[POS] couleurs position mixte\n" " -U, --grad_col_a=[COL] couleur initiale du dégradé\n" " -V, --grad_col_b=[COL] couleur finale du dégradé\n\n" "ex :\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" # File: gui/main.c, Line: 181 msgid "\nReport a bug to <" msgstr "\nSignaler un bug à <" # File: gui/main.c, Line: 192 msgid "\n3D atomic scale model analysis, creation/edition and post-processing tool\n" msgstr "\nOutil d'analyse, de création/édition et de post-traitement de modèles atomiques 3D\n" # File: gui/main.c, Line: 839 msgid "Error while reading workspace file\n%s\n" msgstr "Erreur lors de la lecture du fichier d'espace de travail\n%s\n" # File: gui/main.c, Line: 1053 msgid "Impossible to load the splash screen\n" msgstr "Impossible de charger l'écran de démarrage\n" # File: gui/main.c, Line: 1155 msgid "Fatal error on OpenGL initialization: trying to adjust environment !" msgstr "Erreur fatale à l'initialisation d'OpenGL: tentative d'ajustement de l'environnement !" # File: gui/main.c, Line: 1158 msgid "Impossible to initialize the OpenGL 3D rendering !" msgstr "Impossible d'initialiser le rendu 3D OpenGL !" # File: gui/main.c, Line: 1161 msgid "GDK visual must be modified to initialize the OpenGL context !" msgstr "Le visuel GDK doit être modifié pour initialiser le contexte OpenGL !" # File: gui/main.c, Line: 1289 msgid "Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s" msgstr "Erreur impossible d'obtenir l'AppData\\Roaming (code 0x%08lx)\n%s" # File: gui/msdcall.c, Line: 65,67,72,74,76,78,80,82,87,89,91,93,95,97 msgid "MSD" msgstr "DCM" # File: gui/msdcall.c, Line: 67,87,89,91,93,95,97 msgid "nac" msgstr "nac" # File: gui/msdcall.c, Line: 100,102,104 msgid "Correction" msgstr "Correction" # File: gui/msdcall.c, Line: 106,108,110 msgid "Drift" msgstr "Dérive" # File: gui/msdcall.c, Line: 127 msgid "\t - Number of configurations: " msgstr "\t - Nombre de configurations: " # File: gui/msdcall.c, Line: 131 msgid "\n\n\t - Number of time steps between each configuration: " msgstr "\n\n\t - Nombre de pas de temps entre chaque configuration: " # File: gui/msdcall.c, Line: 135 msgid "\n\n\t - Time step δt used to integrate Newton's equations of motion: " msgstr "\n\n\t - Pas de temps δt utilisé pour intégrer les équations du mouvement de Newton: " # File: gui/msdcall.c, Line: 153 msgid "\n\nMean Square Displacement\n\n" msgstr "\n\nDéplacement Carré Moyen\n\n" # File: gui/msdcall.c, Line: 180 msgid "The MSD calculation has failed" msgstr "Le calcul du DCM a échoué" # File: gui/preferences.c, Line: 3484 msgid "\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976)." msgstr "\n[1] B. Cordero et al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem.. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon et C.T. Prewitt Acta Cryst. B, 25 : 925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23 : 751-767 (1976)." # File: gui/preferences.c, Line: 448 msgid "Error: impossible to create %s (code: %lu)\n" msgstr "Erreur: impossible de créer %s (code: %lu)\n" # File: gui/preferences.c, Line: 454 msgid "Error: impossible to create %s (code: %s)\n" msgstr "Erreur: impossible de créer %s (code: %s)\n" # File: gui/preferences.c, Line: 461 msgid "g(r): number of δr" msgstr "g(r): nombre de δr" # File: gui/preferences.c, Line: 461 msgid "s(q): number of δq" msgstr "s(q): nombre de δq" # File: gui/preferences.c, Line: 461 msgid "s(k): number of δk" msgstr "s(k): nombre de δk" # File: gui/preferences.c, Line: 461 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: nombre de δr" # File: gui/preferences.c, Line: 462 msgid "Dij: number of δr [min(Dij)-max(Dij)]" msgstr "Dij: nombre de δr [min(Dij)-max(Dij)]" # File: gui/preferences.c, Line: 462 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Distribution des angles: nombre de δθ [0-180°]" # File: gui/preferences.c, Line: 463 msgid "Spherical harmonics: l(max) in [2-40]" msgstr "Harmoniques sphériques: l(max) dans [2-40]" # File: gui/preferences.c, Line: 463 msgid "MSD: steps between configurations" msgstr "DCM: pas entre les configurations" # File: gui/preferences.c, Line: 464 msgid "F(k,t): number of δk" msgstr "F(k,t): nombre de δk" # File: gui/preferences.c, Line: 465 msgid "MSD: time steps δt" msgstr "DCM: pas de temps δt" # File: gui/preferences.c, Line: 465 msgid "MSD: time unit" msgstr "DCM: unité de temps" # File: gui/preferences.c, Line: 466 msgid "Default search" msgstr "Recherche par défaut" # File: gui/preferences.c, Line: 467,473 msgid "Atom(s) to initiate the search from" msgstr "Atome(s) à partir desquels lancer la recherche" # File: gui/preferences.c, Line: 468,474 msgid "Maximum size for a ring" msgstr "Taille maximale pour un anneau" # File: gui/preferences.c, Line: 469,475 msgid "Maximum number of rings of size n per MD step" msgstr "Nombre maximum d'anneaux de taille n par pas de DM" # File: gui/preferences.c, Line: 471 msgid "No homopolar bonds in the rings (A-A, B-B ...)" msgstr "Pas de liaisons homopolaires dans les anneaux (A-A, B-B...)" # File: gui/preferences.c, Line: 478 msgid "No homopolar bonds in the chains (A-A, B-B ...)" msgstr "Pas de liaisons homopolaires dans les chaînes (A-A, B-B...)" # File: gui/preferences.c, Line: 479 msgid "Only search for 1-(2)n-1 chains" msgstr "Rechercher uniquement les chaînes 1-(2)n-1" # File: gui/preferences.c, Line: 480 msgid "Analyze all correlated δt steps" msgstr "Analyser toutes les pas δt corrélés" # File: gui/preferences.c, Line: 481 msgid "Number of analyzed δt steps" msgstr "Nombre de pas δt analysées" # File: gui/preferences.c, Line: 482 msgid "Number of analyzed q points" msgstr "Nombre de points q analysés" # File: gui/preferences.c, Line: 483 msgid "Number of frequency points" msgstr "Nombre de points de fréquence" # File: gui/preferences.c, Line: 484 msgid "Default style" msgstr "Style par défaut" # File: gui/preferences.c, Line: 485 # File: opengl/win/glwindow.c, Line: 139 msgid "Atom(s) color map" msgstr "Palettes de couleurs des atomes" # File: gui/preferences.c, Line: 486 # File: opengl/win/glwindow.c, Line: 140 msgid "Polyhedra color map" msgstr "Palettes de couleurs des polyèdres" # File: gui/preferences.c, Line: 487 # File: opengl/win/w_advance.c, Line: 1372 msgid "Quality" msgstr "Qualité" # File: gui/preferences.c, Line: 488 # File: opengl/win/w_advance.c, Line: 1304 msgid "Ray Tracing" msgstr "Tracé de Rayons" # File: gui/preferences.c, Line: 489 msgid "Predefine material" msgstr "Matériau prédéfini" # File: gui/preferences.c, Line: 490 # File: opengl/win/w_advance.c, Line: 1377 msgid "Lightning model" msgstr "Modèle d'éclairage" # File: gui/preferences.c, Line: 491 # File: opengl/win/w_advance.c, Line: 115 msgid "Metallic" msgstr "Métallique" # File: gui/preferences.c, Line: 492 # File: opengl/win/w_advance.c, Line: 116 msgid "Roughness" msgstr "Rugosité" # File: gui/preferences.c, Line: 493 msgid "Back lightning" msgstr "Retour d'éclairage" # File: gui/preferences.c, Line: 495 # File: opengl/win/w_advance.c, Line: 119 msgid "Opacity" msgstr "Opacité" # File: gui/preferences.c, Line: 496 # File: opengl/win/w_advance.c, Line: 114 msgid "Albedo" msgstr "Albédo" # File: calc/cpmd/cpmd_atoms.c, Line: 157,448,480 # File: gui/preferences.c, Line: 497,505 # File: opengl/win/w_advance.c, Line: 129 msgid "Type" msgstr "Type" # File: gui/preferences.c, Line: 498 msgid "Fix" msgstr "Réparer" # File: gui/preferences.c, Line: 499,511 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/m_axis.c, Line: 210,336 # File: opengl/win/w_advance.c, Line: 120 # File: opengl/win/w_labels.c, Line: 716 # File: opengl/win/w_search.c, Line: 3581 msgid "Position" msgstr "Position" # File: gui/preferences.c, Line: 500,1036 # File: opengl/win/w_advance.c, Line: 121 msgid "Direction" msgstr "Direction" # File: gui/preferences.c, Line: 501 # File: opengl/win/w_advance.c, Line: 122 msgid "Intensity" msgstr "Intensité" # File: gui/preferences.c, Line: 502 msgid "Attenuation" msgstr "Atténuation" # File: gui/preferences.c, Line: 503 msgid "Spot specifics" msgstr "Détails du spot" # File: gui/preferences.c, Line: 504 # File: opengl/win/m_rep.c, Line: 504 msgid "Mode" msgstr "Mode" # File: gui/preferences.c, Line: 506 msgid "Density" msgstr "Densité" # File: gui/preferences.c, Line: 507 msgid "Depth" msgstr "Profondeur" # File: gui/preferences.c, Line: 508,1012,1045,1051,1147,2520,3215,3444 # File: opengl/win/m_back.c, Line: 72 # File: opengl/win/m_box.c, Line: 380,629 # File: opengl/win/m_coord.c, Line: 656 # File: opengl/win/popup.c, Line: 3667 # File: opengl/win/w_atoms.c, Line: 360 # File: opengl/win/w_coord.c, Line: 537,873,892,997 msgid "Color" msgstr "Couleur" # File: gui/preferences.c, Line: 509 msgid "Show clones" msgstr "Afficher les clones" # File: gui/preferences.c, Line: 510 msgid "Show box" msgstr "Afficher la boîte" # File: gui/preferences.c, Line: 512 msgid "Rendering" msgstr "Rendu" # File: gui/preferences.c, Line: 513 msgid "Scaling" msgstr "Mise à l'échelle" # File: gui/preferences.c, Line: 514 # File: opengl/win/w_axis.c, Line: 969 # File: opengl/win/w_labels.c, Line: 707 msgid "Font" msgstr "Police" # File: gui/preferences.c, Line: 515 msgid "Shift" msgstr "Changement" # File: gui/preferences.c, Line: 516,3696 # File: opengl/win/w_axis.c, Line: 1000 msgid "Colors" msgstr "Couleurs" # File: gui/preferences.c, Line: 517 msgid "Legend on x" msgstr "Légende sur x" # File: gui/preferences.c, Line: 518 msgid "Legend on y" msgstr "Légende sur y" # File: gui/preferences.c, Line: 519 msgid "Legend on z" msgstr "Légende sur z" # File: gui/preferences.c, Line: 532 msgid "atomes preferences XML file" msgstr "fichier XML de préférences d'atomes" # File: gui/preferences.c, Line: 550 msgid "Total cutoff" msgstr "Rayon de coupure total" # File: gui/preferences.c, Line: 563 msgid "cutoff %s-%s" msgstr "coupure %s-%s" # File: gui/preferences.c, Line: 682 msgid "Number of lights" msgstr "Nombre de lumières" # File: gui/preferences.c, Line: 946 msgid "Format" msgstr "Format" # File: gui/preferences.c, Line: 955 msgid "Only label color" msgstr "Couleur de label unique" # File: gui/preferences.c, Line: 1009,1114 msgid "Wireframe width" msgstr "Largeur du fil de fer" # File: gui/preferences.c, Line: 1009,1114 msgid "Cylinder radius" msgstr "Rayon du cylindre" # File: gui/preferences.c, Line: 1030 msgid "Gradient" msgstr "Gradient" # File: gui/preferences.c, Line: 1040 # File: opengl/win/w_colors.c, Line: 549 msgid "Mixed position" msgstr "Position mixte" # File: gui/preferences.c, Line: 1063 msgid "Representation type" msgstr "Type de représentation" # File: gui/preferences.c, Line: 1069 msgid "Camera depth" msgstr "Profondeur caméra" # File: gui/preferences.c, Line: 1075 # File: opengl/win/m_rep.c, Line: 427 msgid "Zoom" msgstr "Zoom" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera pitch" msgstr "Pitch caméra" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera heading" msgstr "Orientation caméra" # File: gui/preferences.c, Line: 1088 msgid "Camera x" msgstr "Caméra x" # File: gui/preferences.c, Line: 1088 msgid "Camera y" msgstr "Caméra y" # File: gui/preferences.c, Line: 1104 msgid "Template position" msgstr "Position du modèle" # File: gui/preferences.c, Line: 1110 msgid "Custom position" msgstr "Position personnalisée" # File: gui/preferences.c, Line: 1118 # File: opengl/win/m_axis.c, Line: 187,332 msgid "Length" msgstr "Longueur" # File: gui/preferences.c, Line: 1179 # File: opengl/win/w_labels.c, Line: 711 msgid "Font color" msgstr "Couleur de police" # File: gui/preferences.c, Line: 1186 msgid "Tilt along" msgstr "Inclinez selon" # File: gui/preferences.c, Line: 1191 # File: opengl/win/w_labels.c, Line: 813 msgid "Pattern" msgstr "Modèle" # File: gui/preferences.c, Line: 1196 # File: opengl/win/w_labels.c, Line: 832 msgid "Factor" msgstr "Facteur" # File: gui/preferences.c, Line: 1201,3426,3587 # File: opengl/win/w_labels.c, Line: 837 msgid "Width" msgstr "Largeur" # File: gui/preferences.c, Line: 1216 msgid "Selection color" msgstr "Couleur de sélection" # File: gui/preferences.c, Line: 2462 msgid "The View tab regroups representation options" msgstr "L'onglet Vue regroupe les options de représentation" # File: gui/preferences.c, Line: 2463 msgid "which effect apply to the general aspect of the model:" msgstr "quel effet s'applique à l'aspect général du modèle:" # File: curve/cedit.c, Line: 384,385 # File: gui/preferences.c, Line: 2465,2484 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Axis" msgstr "Axes" # File: gui/preferences.c, Line: 2464 msgid "scene set-up and orientation" msgstr "configuration et orientation de la scene" # File: gui/preferences.c, Line: 2465 msgid "axis options" msgstr "options des axes" # File: gui/preferences.c, Line: 2466,2526 # File: opengl/win/glwindow.c, Line: 630 # File: opengl/win/menu_bar.c, Line: 278 # File: opengl/win/popup.c, Line: 4031,4243 msgid "Tools" msgstr "Outils" # File: gui/preferences.c, Line: 2466 msgid "measures and selections option" msgstr "option de mesures et sélections" # File: gui/preferences.c, Line: 2479 # File: opengl/win/glwindow.c, Line: 558 # File: opengl/win/m_rep.c, Line: 812 msgid "Representation" msgstr "Représentation" # File: gui/preferences.c, Line: 2489 msgid "Select measure type" msgstr "Sélectionner le type de mesure" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: gui/preferences.c, Line: 2491,2508 msgid "Standard" msgstr "Standard" # File: gui/preferences.c, Line: 2492,2509 # File: opengl/win/glwindow.c, Line: 126,169,172 msgid "Edition mode" msgstr "Mode édition" # File: gui/preferences.c, Line: 2506 msgid "Select selection type" msgstr "Sélectionner le type de sélection" # File: calc/dl_poly/dlp_field.c, Line: 188 # File: gui/preferences.c, Line: 3221,3336,3341 msgid "atom" msgstr "atome" # File: gui/preferences.c, Line: 3221,3336,3341 msgid "clone" msgstr "cloner" # File: gui/preferences.c, Line: 3224 msgid "%s %s color" msgstr "%s %s couleur" # File: gui/preferences.c, Line: 3299 # File: opengl/win/w_search.c, Line: 2903,3129 msgid "atom(s)" msgstr "atome(s)" # File: gui/preferences.c, Line: 3299 msgid "dot(s)" msgstr "point(s)" # File: gui/preferences.c, Line: 3299 msgid "sphere(s)" msgstr "sphère(s)" # File: gui/preferences.c, Line: 3300 msgid "radius" msgstr "rayon" # File: gui/preferences.c, Line: 3300 msgid "size" msgstr "taille" # File: gui/preferences.c, Line: 3300 msgid "width" msgstr "largeur" # File: gui/preferences.c, Line: 3301 msgid "bond(s)" msgstr "liaison(s)" # File: gui/preferences.c, Line: 3301 msgid "wireframe(s)" msgstr "fil(s) de fer" # File: gui/preferences.c, Line: 3301 msgid "cylinder(s)" msgstr "cylindre(s)" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit cloned %s %s" msgstr "Éditer %s %s cloné" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit %s %s" msgstr "Éditer %s %s" # File: gui/preferences.c, Line: 3336 msgid "Select %s color" msgstr "Sélectionnez la couleur %s" # File: gui/preferences.c, Line: 3341 msgid "Select %s label color" msgstr "Sélectionnez la couleur du label %s" # File: calc/dl_poly/dlp_field.c, Line: 925 # File: gui/preferences.c, Line: 3425 # File: opengl/win/m_map.c, Line: 679 msgid "Element" msgstr "Élément" # File: gui/preferences.c, Line: 3425 msgid "Symbol" msgstr "Symbole" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_axis.c, Line: 974 # File: opengl/win/w_labels.c, Line: 726 msgid "Size" msgstr "Taille" # File: gui/preferences.c, Line: 3427 msgid "Covalent [1]" msgstr "Covalent [1]" # File: gui/preferences.c, Line: 3427 msgid "Ionic [2]" msgstr "Ionique [2]" # File: gui/preferences.c, Line: 3427 msgid "Crystal [4,5]" msgstr "Cristal [4,5]" # File: gui/preferences.c, Line: 3478 msgid "User defined values appear in colored bold font." msgstr "Les valeurs définies par l'utilisateur apparaissent en caractères gras colorés." # File: gui/preferences.c, Line: 3494 msgid "By default label and species colors are similar," msgstr "Par défaut, les couleurs des labels et des espèces sont similaires," # File: gui/preferences.c, Line: 3494 msgid "you can modify that using this dialog window." msgstr "vous pouvez modifier cela à l'aide de cette fenêtre de dialogue." # File: gui/preferences.c, Line: 3494 msgid "You can also use a single color for all labels:" msgstr "Vous pouvez également utiliser une couleur unique pour tous les labels:" # File: gui/preferences.c, Line: 3506 msgid "Use single color" msgstr "Utiliser une couleur unique" # File: gui/preferences.c, Line: 3543 msgid "Edit species related parameters" msgstr "Éditer les paramètres liés aux espèces" # File: gui/preferences.c, Line: 3547 msgid "Override species based parameters" msgstr "Remplacer les valeurs liées aux espèces" # File: gui/preferences.c, Line: 3552 msgid "Set default value" msgstr "Définir la valeur par défaut" # File: gui/preferences.c, Line: 3586 msgid "Atom(s)" msgstr "Atome(s)" # File: gui/preferences.c, Line: 3586 msgid "Bond(s)" msgstr "Liaison(s)" # File: gui/preferences.c, Line: 3586 msgid "\tClone(s)" msgstr "\tClone(s)" # File: gui/preferences.c, Line: 3586 msgid "Atom(s) " msgstr "Atome(s) " # File: gui/preferences.c, Line: 3299 msgid "atom(s) " msgstr "atome(s) " # File: calc/dl_poly/dlp_field.c, Line: 346 # File: opengl/win/glwindow.c, Line: 526 # File: opengl/win/m_clones.c, Line: 125 # File: opengl/win/menu_bar.c, Line: 187 # File: opengl/win/popup.c, Line: 4229 msgid "Bond(s)" msgstr "Liaison(s)" # File: gui/preferences.c, Line: 3644 msgid "The Model tab regroups atom(s), bond(s) and clone(s) options" msgstr "L'onglet Modèle regroupe les options des atome(s), liaison(s) et clone(s)" # File: gui/preferences.c, Line: 3645 msgid "which effect apply when the corresponding OpenGL style is used:" msgstr "quel effet s'applique lorsque le style OpenGL correspondant est utilisé:" # File: gui/preferences.c, Line: 3646 # File: opengl/win/glwindow.c, Line: 141 # File: opengl/win/m_style.c, Line: 59 msgid "Balls and Sticks" msgstr "Boules et Bâtonnets" # File: gui/preferences.c, Line: 3646 msgid "atoms* and bonds radii" msgstr "atomes* et rayons des liaisons" # File: gui/preferences.c, Line: 3647 # File: opengl/win/glwindow.c, Line: 148 # File: opengl/win/m_style.c, Line: 60 # File: opengl/win/w_axis.c, Line: 935 # File: opengl/win/w_box.c, Line: 400 msgid "Wireframes" msgstr "Fils de Fer" # File: gui/preferences.c, Line: 3647 msgid "dots** size and wireframes width" msgstr "taille des points** et largeur des fils de fer" # File: gui/preferences.c, Line: 3648 # File: opengl/win/m_style.c, Line: 61,371,406,505 # File: opengl/win/popup.c, Line: 3104 msgid "Spacefilled" msgstr "Volumique" # File: gui/preferences.c, Line: 3648 msgid "tabulated parameters" msgstr "paramètres tabulés" # File: gui/preferences.c, Line: 3649 # File: opengl/win/glwindow.c, Line: 142 # File: opengl/win/m_box.c, Line: 362,370,617 # File: opengl/win/m_style.c, Line: 63 # File: opengl/win/w_axis.c, Line: 936 # File: opengl/win/w_box.c, Line: 401 msgid "Cylinders" msgstr "Cylindres" # File: gui/preferences.c, Line: 3649 msgid "bonds radii" msgstr "rayons des liaisons" # File: gui/preferences.c, Line: 3652 msgid "It also provides options to customize atomic label(s)," msgstr "Il fournit également des options pour personnaliser les labels atomiques," # File: gui/preferences.c, Line: 3652 msgid "and, the model box, if any:" msgstr "et la boîte du modèle, le cas échéant:" # File: gui/preferences.c, Line: 3653,3701 msgid "Labels" msgstr "Labels" # File: gui/preferences.c, Line: 3653 msgid "atom labels" msgstr "labels d'atomes" # File: gui/preferences.c, Line: 3654,3718 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Box" msgstr "Boîte" # File: gui/preferences.c, Line: 3654 msgid "model box details" msgstr "détails de la boîte du modèle" # File: gui/preferences.c, Line: 3659 msgid "Atoms" msgstr "Atomes" # File: gui/preferences.c, Line: 3659 msgid "Clones" msgstr "Clones" # File: gui/preferences.c, Line: 3664 msgid "Edit species colors" msgstr "Éditer les couleurs des espèces" # File: gui/preferences.c, Line: 3668 msgid "Always show clone(s), if any." msgstr "Affichez toujours les clones, le cas échéant." # File: gui/preferences.c, Line: 3671 msgid "Always show box, if any." msgstr "Montrez toujours la boîte, le cas échéant." # File: gui/preferences.c, Line: 3675 msgid "the same parameters are also used for the spheres style" msgstr "les mêmes paramètres sont également utilisés pour le style sphères" # File: gui/preferences.c, Line: 3676 msgid "the same parameters are also used for the dots style" msgstr "les mêmes paramètres sont également utilisés pour le style points" # File: gui/preferences.c, Line: 3697 msgid "Adjust color(s)" msgstr "Ajuster la ou les couleurs" # File: gui/preferences.c, Line: 3742 msgid "f(atoms) *" msgstr "f(atomes) *" # File: gui/preferences.c, Line: 3785 # File: opengl/win/m_map.c, Line: 1132,1239 # File: opengl/win/w_coord.c, Line: 90 msgid "Atomic Species" msgstr "Espèces Chimiques" # File: gui/preferences.c, Line: 3786 # File: opengl/win/m_poly.c, Line: 333,493 msgid "Total Coordination(s)" msgstr "Coordination(s) Totale(s)" # File: gui/preferences.c, Line: 3787 # File: opengl/win/m_poly.c, Line: 334,494 msgid "Partial Coordination(s)" msgstr "Coordination(s) Partielle(s)" # File: gui/preferences.c, Line: 3816 msgid "The OpenGL tab regroups rendering options" msgstr "L'onglet OpenGL regroupe les options de rendu" # File: gui/preferences.c, Line: 3817 msgid "use it to configure the OpenGL 3D scene:" msgstr "utilisez-le pour configurer la scène 3D OpenGL:" # File: gui/preferences.c, Line: 3818,3857 msgid "Material" msgstr "Matériau" # File: gui/preferences.c, Line: 3818 msgid "aspect for atom(s) and bond(s)" msgstr "aspect pour les atomes et les liaisons" # File: gui/preferences.c, Line: 3819,3858 msgid "Lights" msgstr "Lumières" # File: gui/preferences.c, Line: 3819 msgid "lightning of the scene" msgstr "éclairage de la scène" # File: gui/preferences.c, Line: 3820,3859 msgid "Fog" msgstr "Brouillard" # File: gui/preferences.c, Line: 3820 msgid "atmosphere effects" msgstr "effets d'atmosphère" # File: gui/preferences.c, Line: 3821 msgid "It also offers to adjust the main visualization style and the color maps" msgstr "Il propose également d'ajuster le style de visualisation principal et les cartes de couleurs" # File: gui/preferences.c, Line: 3826 msgid "Style" msgstr "Style" # File: gui/preferences.c, Line: 3838 msgid "if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks" msgstr "si 10 000 atomes ou plus: Fils de fer, sinon: Boules et bâttonets" # File: gui/preferences.c, Line: 3841 msgid "Color maps" msgstr "Palettes de couleurs" # File: gui/preferences.c, Line: 3844 msgid "\tatom(s) and bond(s)" msgstr "\tatome(s) et liaison(s)" # File: gui/preferences.c, Line: 3849 msgid "\tpolyhedra" msgstr "\tpolyèdres" # File: gui/preferences.c, Line: 4016,4196 msgid "Spec. α" msgstr "Esp. α" # File: gui/preferences.c, Line: 4017,4211 msgid "Spec. β" msgstr "Esp. β" # File: gui/preferences.c, Line: 4018 msgid "Rcut (α, β)" msgstr "Rcoup (α, β)" # File: gui/preferences.c, Line: 4019 msgid "Use *" msgstr "Utilisez *" # File: gui/preferences.c, Line: 4040 msgid "Unused values will not be saved !" msgstr "Les valeurs inutilisées ne seront pas enregistrées !" # File: gui/preferences.c, Line: 4187 msgid "Select partial cutoffs(s)" msgstr "Sélectionnez les rayons de coupure partiels" # File: gui/preferences.c, Line: 4229,4269 msgid "Step(s) between configurations" msgstr "Pas entre les configurations" # File: gui/preferences.c, Line: 4267 msgid "g(r): number of δr" msgstr "g(r): nombre de δr" # File: gui/preferences.c, Line: 4267 msgid "s(q): number of δq" msgstr "s(q): nombre de δq" # File: gui/preferences.c, Line: 4267 msgid "s(k): number of δk" msgstr "s(k): nombre de δk" # File: gui/preferences.c, Line: 4267 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: nombre de δr" # File: gui/preferences.c, Line: 4268 msgid "Dij: number of δr [Dijmin-Dijmax]" msgstr "Dij: nombre de δr [Dijmin-Dijmax]" # File: gui/preferences.c, Line: 4268 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Distribution des angles: nombre de δθ [0-180°]" # File: gui/preferences.c, Line: 4269 msgid "Spherical harmonics: lmax ∈ [2-40]" msgstr "Harmoniques sphériques: lmax ∈ [2-40]" # File: gui/preferences.c, Line: 4269 msgid "F(k,δt): number of δk" msgstr "F(k,δt): nombre de δk" # File: gui/preferences.c, Line: 4270 msgid "The Analysis tab regroups calculation options" msgstr "L'onglet Analyse regroupe les options de calcul" # File: gui/preferences.c, Line: 4271 msgid "use it to setup your own default parameters:" msgstr "utilisez-le pour configurer vos propres paramètres par défaut:" # File: gui/preferences.c, Line: 4272,4343 msgid "Calculations" msgstr "Calculs" # File: gui/preferences.c, Line: 4272 msgid "most analysis options" msgstr "la plupart des options d'analyse" # File: gui/preferences.c, Line: 4273,4350 # File: opengl/win/popup.c, Line: 4235 msgid "Rings" msgstr "Anneaux" # File: gui/preferences.c, Line: 4273 msgid "ring statistics options" msgstr "options de statistiques d'anneaux" # File: gui/preferences.c, Line: 4274,4350 msgid "Chains" msgstr "Chaînes" # File: gui/preferences.c, Line: 4274 msgid "chain statistics options" msgstr "options de statistiques de chaînes" # File: gui/preferences.c, Line: 4275 msgid "dynamic structure factor options" msgstr "options de facteur de structure dynamique" # File: gui/preferences.c, Line: 4280 msgid "To determine the existence, or the absence, of a chemical bond" msgstr "Déterminer l’existence ou l’absence d’une liaison chimique" # File: gui/preferences.c, Line: 4281 msgid "between 2 atoms is a key feature in the atomes software" msgstr "entre 2 atomes est une fonctionnalité clé du logiciel atomes" # File: gui/preferences.c, Line: 4284 msgid "It is used for analysis purposes, and, to draw bonds in the OpenGL window." msgstr "Cela est utilisé à des fins d'analyse et pour dessiner des liaisons dans la fenêtre OpenGL." # File: gui/preferences.c, Line: 4286 msgid "You can adapt below the distance cutoffs:" msgstr "Vous pouvez adapter ci-dessous les rayons de coupure:" # File: gui/preferences.c, Line: 4292 msgid "Total cutoff" msgstr "Rayon de coupure total" # File: gui/preferences.c, Line: 4294 msgid "Evaluated by atomes" msgstr "Évalué par atomes" # File: gui/preferences.c, Line: 4295 msgid "User Defined *" msgstr "Défini par l'Utilisateur *" # File: gui/preferences.c, Line: 4313 msgid "Partial cutoff(s)" msgstr "Rayon(s) de coupure partiel(s)" # File: gui/preferences.c, Line: 4314 msgid "Set default cutoff(s)" msgstr "Définir les rayons de coupure par défaut" # File: gui/preferences.c, Line: 4317 msgid "The highest this value is, the highest the number of neighbors around an atom." msgstr "Plus cette valeur est élevée, plus le nombre de voisins autour d’un atome est élevé." # File: gui/preferences.c, Line: 4339 msgid "Dynamical analysis: MSD, S(q,ω)" msgstr "Déplacement Carré Moyen:" # File: gui/preferences.c, Line: 4879 msgid "Apply to project(s) in workspace ?" msgstr "Appliquer aux projets de l'espace de travail ?" # File: gui/preferences.c, Line: 4879 msgid "Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?" msgstr "Les préférences ont été enregistrées pour la session active !\n Souhaitez-vous appliquer ces préférences au(x) projet(s) ouvert(s) dans l'espace de travail ?" # File: gui/preferences.c, Line: 4882 msgid "Project selection" msgstr "Sélection de projets" # File: gui/preferences.c, Line: 4882 msgid "Select to apply preferences" msgstr "Sélectionnez pour appliquer les préférences" # File: gui/preferences.c, Line: 4891 msgid "Including analysis parameters and cutoffs ..." msgstr "Y compris les paramètres d'analyse et les rayons de coupure ..." # File: gui/preferences.c, Line: 4945 msgid "Restore default parameters" msgstr "Restaurer les paramètres par défaut" # File: global.c, Line: 141 msgid "Analysis" msgstr "analyse" # File: gui/preferences.c, Line: 4954,5064 # File: opengl/win/m_tools.c, Line: 78 msgid "Analysis " msgstr "Analyse" # File: gui/preferences.c, Line: 4956,5066 # File: opengl/win/glwindow.c, Line: 622 # File: opengl/win/menu_bar.c, Line: 270,275 # File: opengl/win/w_volumes.c, Line: 1138 msgid "Model" msgstr "Modèle" # File: gui/preferences.c, Line: 4957,5067 # File: opengl/win/glwindow.c, Line: 631 # File: opengl/win/menu_bar.c, Line: 279 msgid "View" msgstr "Vue" # File: gui/preferences.c, Line: 4978 msgid "Save parameters" msgstr "Enregistrer les paramètres" # File: gui/preferences.c, Line: 4981,5127 msgid "Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?" msgstr "Voulez-vous sauvegarder les préférences d'atomes dans:\n\n\t%s\n\nS'il est trouvé, ce fichier est traité à chaque démarrage d'atomes.\n\n\t\t\t\t\t\tEnregistrer le fichier ?" # File: gui/preferences.c, Line: 4982,5128 msgid "Save atomes preferences to file ?" msgstr "Enregistrer les préférences d'atomes dans un fichier ?" # File: gui/preferences.c, Line: 4986,5132 msgid "Error while trying to save preferences to file" msgstr "Erreur lors de la tentative d'enregistrement des préférences dans le fichier" # File: gui/preferences.c, Line: 5024 msgid "User preferences" msgstr "Préférences utilisateur" # File: gui/preferences.c, Line: 5037 msgid "Browse the following to modify the default configuration of atomes" msgstr "Parcourez ce qui suit pour modifier la configuration par défaut d'atomes" # File: gui/preferences.c, Line: 5038 msgid "by replacing internal parameters by user defined preferences." msgstr "en remplaçant les paramètres internes par des préférences définies par l'utilisateur." # File: gui/preferences.c, Line: 5039 msgid "calculation preferences" msgstr "préférences de calcul" # File: gui/preferences.c, Line: 5040 msgid "rendering preferences" msgstr "préférences de rendu" # File: gui/preferences.c, Line: 5041 msgid "atom(s), bond(s) and box preferences" msgstr "préférences d'atome(s), liaison(s) et boîte" # File: gui/preferences.c, Line: 5042 msgid "representation and projection preferences" msgstr "préférences de représentation et projection" # File: gui/preferences.c, Line: 5043 msgid "Default parameters are used for any new project added to the workspace\n" msgstr "Les paramètres par défaut sont utilisés\npour tout nouveau projet ajouté à l'espace de travail\n" # File: gui/preferences.c, Line: 5058 msgid "Restore atomes default parameters" msgstr "Restaurer les paramètres par défaut d'atomes" # File: gui/preferences.c, Line: 5094 msgid "rendering" msgstr "rendu" # File: gui/preferences.c, Line: 5104 # File: opengl/win/w_bonds.c, Line: 410 msgid "box" msgstr "boîte" # File: gui/preferences.c, Line: 5108 # File: opengl/win/w_bonds.c, Line: 410 msgid "axis" msgstr "axes" # File: gui/preferences.c, Line: 5112 msgid "background" msgstr "arrière-plan" # File: gui/preferences.c, Line: 5084 msgid "representation" msgstr "représentation" # File: gui/preferences.c, Line: 5085 msgid "Set %s preferences as default preferences ?" msgstr "Définir les préférences %s comme préférences par défaut ?" # File: gui/preferences.c, Line: 5087 msgid "Set model preferences as default ?" msgstr "Définir les préférences du modèle par défaut ?" # File: gui/preferences.c, Line: 5157 msgid "Set default" msgstr "Définir par défaut" # File: gui/ringscall.c, Line: 488 msgid "\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tLes statistiques d'anneaux ont échoué !\n\n" "Le nombre d'anneaux par pas de DM apparaît\n" "être supérieur à la valeur initiale de %d\n" "utilisée pour allouer de la mémoire pour stocker les résultats.\n\n" "Augmentez la valeur et recommencez !" # File: gui/ringscall.c, Line: 93 msgid "%s - %sAll]" msgstr "%s - %sTous]" # File: gui/ringscall.c, Line: 171 msgid "\n\nRing statistics\n\n" msgstr "\n\nStatistiques d'anneaux\n\n" # File: gui/ringscall.c, Line: 172 msgid "\n%s rings analysis details:\n" msgstr "\nDétails de l'analyse des anneaux %s:\n" # File: gui/ringscall.c, Line: 178 msgid " * only ABAB rings have been considered\n" msgstr " *seuls les anneaux ABAB ont été pris en compte\n" # File: gui/ringscall.c, Line: 182 msgid " * no homopolar bonds in the rings (A-A, B-B ...)\n" msgstr " * pas de liaisons homopolaires dans les anneaux (A-A, B-B...)\n" # File: gui/ringscall.c, Line: 186 msgid " * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n" msgstr " * pas de liaisons homopolaires dans la matrice de connectivité (A-A, B-B...)\n" # File: gui/ringscall.c, Line: 195 msgid "\n Average number of rings per configuration: " msgstr "\n Nombre moyen d'anneaux par configuration: " # File: gui/ringscall.c, Line: 205 msgid "\n Total number of rings: " msgstr "\n Nombre total d'anneaux: " # File: gui/ringscall.c, Line: 214 msgid " Average number of ring(s) with n > " msgstr " Nombre moyen d'anneau(x) avec n > " # File: gui/ringscall.c, Line: 218 msgid " Number of ring(s) with n > " msgstr " Nombre de anneau(x) avec n > " # File: gui/ringscall.c, Line: 223 msgid " nodes that potentially exist: " msgstr " nÅ“uds qui existent potentiellement: " # File: gui/ringscall.c, Line: 480 msgid "The ring statistics calculation has failed" msgstr "Le calcul des statistiques d'anneaux a échoué" # File: gui/sktcall.c, Line: 254 msgid "\tMolecular dynamics information:\n\n" msgstr "\tInformations sur la dynamique moléculaire:\n\n" # File: gui/sktcall.c, Line: 257 msgid "\n\n\tIntermediate scattering - F(q,δt)\n\n" msgstr "\n\n\tDiffusion intermédiaire - F(q,δt)\n\n" # File: gui/sktcall.c, Line: 259 msgid "\t - Correlation threshold δt" msgstr "\t - Seuil de corrélation δt" # File: gui/sktcall.c, Line: 268 msgid "\t - All " msgstr "\t - Tous " # File: gui/sktcall.c, Line: 272 msgid " correlated calculations saved" msgstr " calculs corrélés sauvegardés" # File: gui/sktcall.c, Line: 277 msgid "\t - Results saved for " msgstr "\t - Résultats sauvegardés pour " # File: gui/sktcall.c, Line: 281 msgid " correlated calculations:\n\n" msgstr " calculs corrélés:\n\n" # File: gui/sktcall.c, Line: 295 msgid "\tDynamic structure factor - S(q,ω)\n\n" msgstr "\tFacteur de structure dynamique - S(q,ω)\n\n" # File: gui/sktcall.c, Line: 300 msgid " q vectors were analyzed:\n\n" msgstr " q vecteurs ont été analysés:\n\n" # File: gui/sktcall.c, Line: 364 msgid "The dynamic structure factor calculation has failed" msgstr "Le calcul du facteur de structure dynamique a échoué" # File: gui/sktcall.c, Line: 375 # File: gui/sqcall.c, Line: 295 msgid "Problem during the selection of the k-points\nused to sample the reciprocal lattice" msgstr "Problème lors de la sélection des points-k\nutilisés pour échantillonner le réseau réciproque" # File: gui/spcall.c, Line: 116 msgid "\n\nSpherical harmonics\n\n" msgstr "\n\nHarmoniques sphériques\n\n" # File: gui/spcall.c, Line: 120 msgid "\nResults for the " msgstr "\nRésultats pour le " # File: gui/spcall.c, Line: 122 msgid " atoms: \n\n" msgstr " atomes: \n\n" # File: gui/spcall.c, Line: 130 msgid "[All]" msgstr "[Tous]" # File: gui/spcall.c, Line: 240 msgid "Unexpected error when analyzing the spherical harmonics" msgstr "Erreur inattendue lors de l'analyse des harmoniques sphériques" # File: gui/sqcall.c, Line: 131 msgid "\n\nStructure factor(s)" msgstr "\n\nFacteur(s) de structure" # File: gui/sqcall.c, Line: 135 msgid "\n\nDynamic structure factor(s)" msgstr "\n\nFacteur(s) de structure dynamique" # File: gui/sqcall.c, Line: 139 msgid " - reciprocal space calculation\n\n" msgstr " - calcul dans l'espace réciproque\n\n" # File: gui/sqcall.c, Line: 146 msgid "\tReciprocal space discretization:\n\n" msgstr "\tDiscrétisation de l'espace réciproque:\n\n" # File: gui/sqcall.c, Line: 147 msgid "\t - Number of δq steps: " msgstr "\t - Nombre d'intervalles δq: " # File: gui/sqcall.c, Line: 151 msgid "\n\n\t between " msgstr "\n\n\t entre " # File: gui/sqcall.c, Line: 155,175 # File: calc/dl_poly/dlp_field.c, Line: 3 msgid "and" msgstr "et" # File: gui/sqcall.c, Line: 162 msgid " is the minimum wave vector, and " msgstr " est le vecteur d'onde minimum, et " # File: gui/sqcall.c, Line: 165 msgid " is the maximum wave vector:\n\n" msgstr " est le vecteur d'onde maximum:\n\n" # File: gui/sqcall.c, Line: 220,283 msgid "The S(q) calculation has failed" msgstr "Le calcul du S(q) a échoué" # File: gui/tools.c, Line: 302 msgid "Logo" msgstr "Logo" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: gui/tools.c, Line: 302 # File: opengl/win/w_search.c, Line: 3577 msgid "Name" msgstr "Nom" # File: gui/tools.c, Line: 302 msgid "Button" msgstr "Bouton" # File: gui/work_menu.c, Line: 155,184,194 msgid "ISAACS Project File '*.ipf'" msgstr "Fichier de projet ISAACS '*.ipf'" # ============================================================ # Section: src # ============================================================ # File: global.c, Line: 141 msgid "Edition" msgstr "édition" # File: curve/m_curve.c, Line: 78 # File: opengl/win/m_tools.c, Line: 78 msgid "Edition " msgstr "Édition" # File: global.c, Line: 145 msgid "\nIf this is a bug please report it to:" msgstr "\nS'il s'agit d'un bug, veuillez le signaler à:" # File: global.c, Line: 147 msgid "All (No Rule)" msgstr "Tous (Aucune Règle)" # File: global.c, Line: 148 msgid "King's" msgstr "de King" # File: global.c, Line: 149 msgid "Guttman's" msgstr "de Guttman" # File: global.c, Line: 150 msgid "Primitive" msgstr "Primitif(s)" # File: global.c, Line: 151 msgid "Strong" msgstr "Fort(s)" # File: global.c, Line: 617 msgid "Error in string format: string = \"%s\" - value == %lf\n" msgstr "Erreur dans le format de chaîne : chaîne = \"%s\" - valeur == %lf\n" # File: global.c, Line: 646 msgid "\n \tAnalysis was performed in: " msgstr "\n \tL'analyse a été réalisée en: " # File: project/close_p.c, Line: 526 msgid "No project to be closed" msgstr "Aucun projet à clôturer" # File: project/init_p.c, Line: 279 msgid "Project N°" msgstr "Projet N°" # File: opengl/win/glwindow.c, Line: 315 # File: opengl/win/m_map.c, Line: 1139,1250 # File: opengl/win/menu_bar.c, Line: 224,228 # File: opengl/win/popup.c, Line: 4237 # File: opengl/win/w_coord.c, Line: 93,1351 # File: opengl/win/w_volumes.c, Line: 1139 # File: project/read_mol.c, Line: 149 msgid "Fragment(s)" msgstr "Fragment(s)" # File: opengl/win/glwindow.c, Line: 316 # File: opengl/win/m_map.c, Line: 1140,1253 # File: opengl/win/menu_bar.c, Line: 232,236 # File: opengl/win/popup.c, Line: 4238 # File: opengl/win/w_coord.c, Line: 94,1355 # File: opengl/win/w_volumes.c, Line: 1140 # File: project/read_mol.c, Line: 150 # File: calc/dl_poly/dlp_field.c, Line: 142 msgid "Molecule(s)" msgstr "Molécule(s)" # File: project/update_p.c, Line: 258 msgid "Impossible to update project: %s\n" msgstr "Impossible de mettre à jour le projet: %s\n" # File: project/update_p.c, Line: 280 # File: workspace/workspace.c, Line: 441 msgid "Toolboxes - %s" msgstr "Boîtes à outils - %s" # File: project/readers/read_c3d.c, Line: 328,351 # File: project/readers/read_xyz.c, Line: 309,332 msgid "Wrong file format - cannot find the number of atoms !" msgstr "Mauvais format de fichier - impossible de trouver le nombre d'atomes !" # File: project/readers/read_c3d.c, Line: 329,352 # File: project/readers/read_xyz.c, Line: 310,333 msgid "Wrong file format - first line is corrupted !" msgstr "Mauvais format de fichier - la première ligne est corrompue !" # File: project/readers/read_c3d.c, Line: 334,357 # File: project/readers/read_hist.c, Line: 440 # File: project/readers/read_trj.c, Line: 252 # File: project/readers/read_vas.c, Line: 251 # File: project/readers/read_xyz.c, Line: 315,338 msgid "Number of atoms" msgstr "Nombre d'atomes" # File: project/readers/read_c3d.c, Line: 343,366 # File: project/readers/read_hist.c, Line: 441 # File: project/readers/read_trj.c, Line: 254 # File: project/readers/read_vas.c, Line: 253 # File: project/readers/read_xyz.c, Line: 324,347 msgid "Number of steps" msgstr "Nombre de pas" # File: project/readers/read_cif.c, Line: 367 msgid "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s).\n\n" "Please select an atom type for the following object(s):" msgstr "Pour continuer et construire le cristal selon les informations du fichier CIF\n" "il est nécessaire de fournir une valeur appropriée pour chaque paramètre manquant.\n\n" "Veuillez sélectionner un type d'atome pour le(s) objet(s) suivant(s):" # File: project/readers/read_cif.c, Line: 769 msgid "CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "Ligne de boucle d'obtention CIF : quelque chose ne va pas pour le mot clé : %s_%s\n" " -> mot clé trouvé = %d fois\n" " -> configurations dans le fichier CIF= %d !\n" # File: project/readers/read_cif.c, Line: 819 msgid "CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "Valeur leu dans le CIF : mot-clé : %s_%s\n" " -> mot clé trouvé = %d fois\n" " -> configurations dans le fichier CIF= %d !\n" # File: project/readers/read_cif.c, Line: 857 msgid "Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n" msgstr "Positions clés : mot-clé : %s_%s\n" " -> introuvable pour la conf %d entre loop_pos[0]= %d et loop_pos[1]= %d\n" # File: project/readers/read_cif.c, Line: 1203 msgid "Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n" msgstr "Coordonnées atomiques: le nombre d'atome(s) change !\n" " - configuration N°%d :: atomes= %d\n" " - initialisation :: atomes= %d\n" # File: project/readers/read_cif.c, Line: 1265 msgid "Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n" msgstr "Coordonnées atomiques: le nombre d'espèces chimiques change !\n" " - configuration N°%d :: espèce= %d\n" " - initialisation :: espèce= %d\n" # File: project/readers/read_cif.c, Line: 1277 msgid "Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n" msgstr "Coordonnées atomiques: le nombre d'atome(s) pour l'espèce %d change !\n" " - configuration N°%d :: atome(s)= %d\n" " - initialisation :: atome(s)= %d\n" # File: project/readers/read_cif.c, Line: 1658,1739 msgid "Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Groupe d'espace: les informations du fichier CIF pourraient être inexactes !\n" " Groupe d'espace fichier CIF : %s, symbole H-M du fichier CIF: %s\n" # File: project/readers/read_cif.c, Line: 1899 msgid "Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Groupe d'espace: groupe d'espace et symbole H-M ne sont pas cohérent !\n" " Groupe d'espace fichier CIF : %s, symbole H-M du fichier CIF: %s\n" # File: project/readers/read_cif.c, Line: 2048 msgid "Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n" msgstr "Groupe d'espace : groupe d'espace trigonal trouvé N°%d-%s, paramètre %s\n" "mais les paramètres de maille ont été trouvés au format %s ...\n" "\t ... le paramétrage du groupe d'espace a été modifié en conséquence !\n" # File: project/readers/read_cif.c, Line: 2063 msgid "Space group and lattice parameters are not compatible !\n\n" "Check a, b, c, and α, β, ɣ, with the type of crystal system.\n" msgstr "Le Groupe d'espace et les paramètres de maille ne sont pas compatibles !\n\n" "Vérifiez a, b, c et α, β, ɣ, avec le type de système cristallin.\n" # File: project/readers/read_cif.c, Line: 2170 msgid "Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n" msgstr "Construire un cristal en utilisant des positions de symétrie: \n" " 1) évaluer les positions atomiques candidates à l'aide des données du fichier CIF: \n" " - positions de symétrie\n" " - coordonnées atomiques + occupation\n" " 2) pourvoir chaque position candidate en utilisant l'occupation associée: \n" " - occupation %s\n" " - %s\n" # File: project/readers/read_cif.c, Line: 2517 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n" msgstr "Le cristal sera créé mais certains objets pourraient manquer,\n" "L'occupation est trop faible par rapport au nombre de site(s) par cellule.\n\n" "Pour construire un cristal correspondant à l'occupation définie:\n" "\t 1) Si vous essayez de lire un fichier CIF, utilisez plutôt le constructeur de cristaux.\n" "\t 2) Modifiez la configuration d'occupation sur « Complètement aléatoire ».\n" "\t 3) Augmentez le nombre de cellules unitaires jusqu'à supprimer ce message.\n\n" # File: project/readers/read_cif.c, Line: 2525 msgid "Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n " msgstr "Les objets situés à des positions équivalentes ont été supprimés\n" "pour assurer la cohérence du modèle\n" "lors de l'utilisation des Conditions aux Limites Périodiques\n " # File: project/readers/read_cif.c, Line: 362 msgid "Error while reading CIF file" msgstr "Erreur lors de la lecture du fichier CIF" # File: project/readers/read_cif.c, Line: 379 msgid "Type N°%d:\t%s" msgstr "Tapez N°%d : %s" # File: project/readers/read_cif.c, Line: 396 msgid "In case of a molecule: insert an extra type of atom and run a substitution afterwards." msgstr "Dans le cas d'une molécule: insérez un type d'atome supplémentaire et effectuez ensuite une substitution." # File: project/readers/read_cif.c, Line: 478,561 msgid "Wrong file format: searching for %s - error at line %d !\n" msgstr "Mauvais format de fichier: recherche de %s - erreur à la ligne %d !\n" # File: project/readers/read_cif.c, Line: 1107 msgid "label" msgstr "label" # File: project/readers/read_cif.c, Line: 1110,2518 msgid "occupancy" msgstr "occupation" # File: project/readers/read_cif.c, Line: 1156 msgid "Atomic coordinates: impossible to find atomic label(s) ..." msgstr "Coordonnées atomiques: impossible de trouver des labels atomiques ..." # File: project/readers/read_cif.c, Line: 1168 msgid "Atomic coordinates: impossible to find '%s' ..." msgstr "Coordonnées atomiques: impossible de trouver '%s' ..." # File: project/readers/read_cif.c, Line: 1184 msgid "Please select how to handle occupancy" msgstr "Veuillez sélectionner comment gérer l'occupation" # File: project/readers/read_cif.c, Line: 1184 msgid "Select how to handle occupancy" msgstr "Sélectionnez comment gérer l'occupation" # File: project/readers/read_cif.c, Line: 1188 msgid "Occupancy %s\n\t%s\n" msgstr "Occupation %s\n\t%s\n" # File: project/readers/read_cif.c, Line: 1304 msgid "Atomic coordinates: a site has an occupancy > 1.0 !\n" msgstr "Coordonnées atomiques: un site possède une occupation > 1,0 !\n" # File: project/readers/read_cif.c, Line: 1368 msgid "reaction or trajectory" msgstr "réaction ou trajectoire" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n" msgstr "Le fichier CIF est compatible avec une réaction chimique: \n\t Les réactifs peuvent être séparés en utilisant l'occupation\n" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n" msgstr "Le fichier CIF est compatible avec une réaction chimique: \n\t Les réactifs peuvent être séparés en utilisant le désordre du site\n" # File: project/readers/read_cif.c, Line: 1796 msgid "Lattice parameters: impossible to retrieve the '%s' parameter !\n" msgstr "Paramètres de maille: impossible de récupérer le paramètre '%s' !\n" # File: project/readers/read_cif.c, Line: 1875 msgid "Space group: no space group and no H-M symbol found !\n" msgstr "Groupe d'espace: aucun groupe d'espace et aucun symbole H-M trouvé !\n" # File: project/readers/read_cif.c, Line: 1891 msgid "Space group: no space group found, unknown H-M symbol !\n" msgstr "Groupe d'espace: aucun groupe d'espace trouvé, symbole H-M inconnu !\n" # File: project/readers/read_cif.c, Line: 1953,1983,1990 msgid "Space group: ambiguous space group setting !\n" msgstr "Groupe d'espace: paramètre de groupe d'espace ambigu !\n" # File: project/readers/read_cif.c, Line: 2047 msgid "hexagonal" msgstr "hexagonal" # File: project/readers/read_cif.c, Line: 2047 msgid "rhombohedral" msgstr "rhomboédrique" # File: project/readers/read_cif.c, Line: 2095 msgid "Space group changes between configurations !\n" msgstr "Le groupe d'espace change entre les configurations !\n" # File: project/readers/read_cif.c, Line: 2130 msgid "Symmetry position(s) in CIF file\n" msgstr "Position(s) de symétrie dans le fichier CIF\n" # File: project/readers/read_cif.c, Line: 2135 msgid "No symmetry position(s) in CIF file\n" msgstr "Aucune position de symétrie dans le fichier CIF\n" # File: project/readers/read_cif.c, Line: 2586 msgid "It seems the CIF file contains %d distinct configurations\n" msgstr "Il semble que le fichier CIF contienne %d configurations distinctes\n" # File: project/readers/read_cif.c, Line: 2591 msgid "Impossible to use symmetry positions with multiple configurations\n" msgstr "Impossible d'utiliser des positions de symétrie avec plusieurs configurations\n" # File: project/readers/read_cif.c, Line: 2602 msgid "This CIF file could be describing a trajectory or a chemical reaction.\n" msgstr "Ce fichier CIF pourrait décrire une trajectoire ou une réaction chimique.\n" # File: project/readers/read_cif.c, Line: 2610 msgid "Please select how to process the data in the CIF file" msgstr "Veuillez sélectionner comment traiter les données dans le fichier CIF" # File: project/readers/read_cif.c, Line: 2610 msgid "Select how to process data" msgstr "Sélectionnez comment traiter les données" # File: project/readers/read_cif.c, Line: 2617 msgid "This CIF file could be describing a trajectory.\n" msgstr "Ce fichier CIF pourrait décrire une trajectoire.\n" # File: project/readers/read_cif.c, Line: 2629 msgid "Select the configuration c, c ∈ [1-%d]" msgstr "Sélectionnez la configuration c, c ∈ [1-%d]" # File: project/readers/read_cif.c, Line: 2633 msgid "Please select the configuration to work on" msgstr "Veuillez sélectionner la configuration sur laquelle travailler" # File: project/readers/read_cif.c, Line: 2643 msgid "Working on configuration N°%d\n" msgstr "Travail sur la configuration N°%d\n" # File: project/readers/read_coord.c, Line: 416 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Erreur(s) en essayant de construire le cristal en utilisant les paramètres du fichier CIF !\n" "Cela vient généralement de: \n" "\t - description incorrecte du groupe d'espace\n" "\t - description incomplète du groupe d'espace\n" "\t - paramètre de groupe d'espace manquant\n" "\t - paramètre de groupe d'espace incorrect\n" # File: project/readers/read_coord.c, Line: 427 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n" msgstr "Erreur(s) en essayant de construire Crystal en utilisant les paramètres du fichier CIF !\n" "Les informations entraînent des changements entre chaque configuration\n" # File: project/readers/read_coord.c, Line: 434 msgid "Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Problème(s) potentiel(s) lors de la construction de cristaux !\n" "Cela vient généralement de: \n" "\t - description incorrecte du groupe d'espace\n" "\t - description incomplète du groupe d'espace\n" "\t - paramètre de groupe d'espace manquant\n" "\t - paramètre de groupe d'espace incorrect\n" # File: project/readers/read_coord.c, Line: 146 msgid "Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Format de fichier incorrect: erreur au pas %d !\n" "Mauvais format de fichier: l'enregistrement %s sur la ligne %d est corrompu !" # File: project/readers/read_coord.c, Line: 152 msgid "Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Format de fichier incorrect: erreur au pas %d, atome %d !\n" "Mauvais format de fichier: l'enregistrement %s sur la ligne %d est corrompu !" # File: project/readers/read_coord.c, Line: 193 msgid "Use dummy atom(s) for unknown %s species ?" msgstr "Utiliser des atomes factices pour l'espèce %s inconnue ?" # File: project/readers/read_coord.c, Line: 194 msgid "Use dummy atom(s) ?" msgstr "Utiliser des atomes factices ?" # File: project/readers/read_coord.c, Line: 198 msgid "Using dummy atom(s) for unknown %s species" msgstr "Utilisation d'atomes factices pour l'espèce %s inconnue" # File: project/readers/read_coord.c, Line: 205 msgid "No dummy atom(s) for unknown %s species" msgstr "Aucun atome(s) factice(s) pour l'espèce %s inconnue" # File: project/readers/read_coord.c, Line: 282 msgid "Error - cannot get file statistics !\n" msgstr "Erreur - impossible d'obtenir les statistiques du fichier !\n" # File: project/readers/read_coord.c, Line: 290 msgid "Error - cannot open coordinates file !\n" msgstr "Erreur - impossible d'ouvrir le fichier de coordonnées !\n" # File: project/readers/read_coord.c, Line: 442 msgid "\nAnother model will be built using included symmetry positions\n" msgstr "\nUn autre modèle sera construit en utilisant les positions de symétrie incluses\n" # File: project/readers/read_coord.c, Line: 475,509 msgid "Number of species" msgstr "Nombre d'espèces" # File: project/readers/read_coord.c, Line: 483 msgid "Dummy %s" msgstr "Factice %s" # File: project/readers/read_coord.c, Line: 496 msgid "For species %s, radius is equal to 0.0 !\n" msgstr "Pour l'espèce %s, le rayon est égal à 0.0 !\n" # File: project/readers/read_hist.c, Line: 78,85 msgid "Wrong file format - record ii line is corrupted !" msgstr "Mauvais format de fichier - la ligne d'enregistrement ii est corrompue !" # File: project/readers/read_hist.c, Line: 394 msgid "Cannot find species with a mass of %f !" msgstr "Impossible de trouver une espèce avec une masse de %f !" # File: project/readers/read_isaacs.c, Line: 795 msgid "The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n" msgstr "Le nombre d'atomes dans le fichier XML\n" "n'est pas le même que le nombre d'atomes\n" "dans le fichier contenant les coordonnées.\n" "Les autres informations du fichier XML\n" "seront ignorées\n" # File: project/readers/read_isaacs.c, Line: 818 msgid "The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n" msgstr "Le nombre d'espèces chimiques dans le fichier XML\n" "n'est pas le même que le nombre d'espèces chimiques\n" "dans le fichier qui contient les coordonnées atomiques.\n" # File: project/readers/read_isaacs.c, Line: 129 msgid " I.S.A.A.C.S. v1.0 XML file " msgstr " I.S.A.A.C.S. Fichier XML v1.0 " # File: project/readers/read_isaacs.c, Line: 141 msgid " Data format and file containing the configuration(s) " msgstr " Format des données et fichier contenant la ou les configurations " # File: project/readers/read_isaacs.c, Line: 196 msgid " Chemistry information " msgstr " Informations chimiques " # File: project/readers/read_isaacs.c, Line: 270 msgid " Box information " msgstr " Informations sur la boîte " # File: project/readers/read_isaacs.c, Line: 376 msgid " PBC information " msgstr " Informations sur les CLP " # File: project/readers/read_isaacs.c, Line: 412 msgid " Cutoffs information " msgstr " Informations sur les rayons de coupure " # File: project/readers/read_isaacs.c, Line: 451 msgid " Time series " msgstr " Séries chronologiques " # File: project/readers/read_isaacs.c, Line: 469 msgid " Apply project " msgstr " Valider le projet " # File: project/readers/read_isaacs.c, Line: 753 msgid "The %s\n %s\n from the XML file does not exist\n" msgstr "Le %s\n %s\n du fichier XML n'existe pas\n" # File: project/readers/read_isaacs.c, Line: 761 msgid "Unknown data format in XML file\n" msgstr "Format de données inconnu dans le fichier XML\n" # File: project/readers/read_isaacs.c, Line: 1428 msgid "Impossible to open the ISAACS project file (XML) file\n" msgstr "Impossible d'ouvrir le fichier du fichier projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1431 msgid "The file is not a valid ISAACS project file (XML) file\n" msgstr "Le fichier n'est pas un fichier de projet ISAACS (XML) valide.\n" # File: project/readers/read_isaacs.c, Line: 1434 msgid "The ISAACS project file (XML) file is incomplete\n" msgstr "Le fichier de projet ISAACS (XML) est incomplet\n" # File: project/readers/read_isaacs.c, Line: 1437 msgid "Problem(s) in the <data> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <data> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1440 msgid "Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la sectop, <chemistry> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1443 msgid "Problem(s) in the <element> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <element> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1446 msgid "Problem(s) in the <box> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <box> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1449 msgid "Problem(s) in the <pbc> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <pbc> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1452 msgid "Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans le <seuils> section du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1455 msgid "Problem(s) in the <time-series> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <time-series> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_npt.c, Line: 97 msgid "Wrong file format - %d steps in coordinates file" msgstr "Format de fichier incorrect – %d pas dans le fichier de coordonnées" # File: project/readers/read_npt.c, Line: 98 msgid "Wrong file format - %d steps found in cell file" msgstr "Format de fichier incorrect: %d pas trouvées dans le fichier de cellule" # File: project/readers/read_npt.c, Line: 122,130,138,161,169,177 msgid "Wrong file format - error at step %d !" msgstr "Format de fichier incorrect - erreur au pas %d !" # File: project/readers/read_pdb.c, Line: 124 msgid "Wrong file format - record %d on line %d is corrupted !" msgstr "Mauvais format de fichier - l'enregistrement %d sur la ligne %d est corrompu !" # File: project/readers/read_trj.c, Line: 179 # File: project/readers/read_vas.c, Line: 167 msgid "Error - chemical species changes between steps %d and %d, for atom %d !" msgstr "Erreur : l'espèce chimique change entre les pas %d et %d, pour l'atome %d !" # File: opengl/glview.c, Line: 1826 msgid "Impossible to initialize the OpenGL 3D rendering ! \n %s\n" msgstr "Impossible d'initialiser le rendu 3D OpenGL ! \n %s\n" # File: opengl/ogl_shading.c, Line: 110 msgid "Compilation failure in %s shader:\n%s" msgstr "Échec de compilation dans le shader %s:\n%s" # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "fragment" msgstr "fragment" # File: opengl/edit/atom_action.c, Line: 587 msgid "Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" msgstr "Erreur: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "replaced" msgstr "remplacé(s)" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "removed" msgstr "supprimé(s)" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "inserted" msgstr "inséré(s)" # File: opengl/edit/atom_action.c, Line: 1138 msgid "No atoms to be %s !" msgstr "Aucun atome ne doit être %s !" # File: opengl/edit/atom_action.c, Line: 1144 # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) removed !\n%d atom(s) inserted !" msgstr "%d atome(s) supprimé(s) !\n%d atome(s) inséré(s) !" # File: opengl/edit/atom_action.c, Line: 1148 msgid "%d atom(s) %s !" msgstr "%d atome(s) %s !" # File: opengl/edit/atom_action.c, Line: 2064 msgid "Nothing to be done, check selection !" msgstr "Rien à faire, vérifiez la sélection !" # File: opengl/edit/atom_action.c, Line: 2068 msgid "Nothing to be done, check selection and/or MSD !" msgstr "Rien à faire, vérifiez la sélection et/ou le DCM !" # File: opengl/edit/atom_edit.c, Line: 207 msgid "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" msgstr "Pour conserver le(s) déplacement(s) des atomes, appuyez sur le bouton « Appliquer »\n" "Sinon les positions initiales des atomes seront restaurées...\n" "\t\t\t Etes-vous sûr de quitter ?" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/w_search.c, Line: 3578 msgid "Move" msgstr "Déplacer" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3703 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 2904,3579 msgid "Replace" msgstr "Remplacer" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3702 # File: opengl/win/w_search.c, Line: 2904,3580,4104 msgid "Remove" msgstr "Supprimer" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 4201 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 3581 msgid "Insert" msgstr "Insérer" # File: opengl/edit/atom_edit.c, Line: 60 msgid "Random Move" msgstr "Déplacement Aléatoire" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Non-selected Atoms" msgstr "Tous les Atomes Non-sélectionnés" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Selected Atoms" msgstr "Tous les Atomes Sélectionnés" # File: calc/cpmd/cpmd_init.c, Line: 158 # File: calc/dl_poly/dlp_edit.c, Line: 2466 # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Atoms" msgstr "Tous les Atomes" # File: opengl/edit/atom_edit.c, Line: 206 msgid "Leaving without saving ?" msgstr "Partir sans sauvegarder ?" # File: opengl/edit/atom_edit.c, Line: 282 # File: opengl/win/m_rep.c, Line: 579 msgid "Reset" msgstr "Réinitialiser" # File: opengl/edit/atom_edit.c, Line: 282 msgid "Reset and get back to initial coordinates ?\n This will affect all atoms !" msgstr "Réinitialiser et revenir aux coordonnées initiales ?\n Cela affectera tous les atomes !" # File: opengl/edit/atom_edit.c, Line: 421 # File: workspace/workspace.c, Line: 384 msgid "Model edition - %s" msgstr "Édition du modèle - %s" # File: opengl/edit/atom_move.c, Line: 1201 msgid "On %s axis:" msgstr "Sur l'axe %s:" # File: opengl/edit/atom_move.c, Line: 1230 msgid "Select the axis to be used: " msgstr "Sélectionnez l'axe à utiliser: " # File: opengl/edit/atom_move.c, Line: 1232 msgid "Model axis" msgstr "Axe du modèle" # File: opengl/edit/atom_move.c, Line: 1233 msgid "Eye (viewer) axis" msgstr "Axe de l'oeil (spectateur)" # File: opengl/edit/atom_move.c, Line: 1237 # File: opengl/win/m_atoms.c, Line: 364,443,709,806 # File: opengl/win/popup.c, Line: 3697 # File: opengl/win/w_atoms.c, Line: 362 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 msgid "Show" msgstr "Montrer" # File: opengl/edit/atom_move.c, Line: 1247 # File: opengl/edit/atom_search.c, Line: 332 msgid "Reset transformation(s)" msgstr "Réinitialiser la ou les transformations" # File: opengl/edit/atom_object.c, Line: 729 msgid "From selection" msgstr "De la sélection" # File: opengl/edit/atom_object.c, Line: 791,878 # File: opengl/win/w_search.c, Line: 859,3080 msgid "%d-fold" msgstr "%d-coordonné" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/atom_object.c, Line: 795,882 # File: opengl/win/w_search.c, Line: 859 msgid "Isolated" msgstr "Isolé" # File: opengl/edit/atom_object.c, Line: 911 msgid "All %s - atom(s)" msgstr "Tous les %s - atome(s)" # File: opengl/edit/atom_object.c, Line: 934 # File: opengl/win/initcoord.c, Line: 534 # File: opengl/win/w_search.c, Line: 875 msgid "Fragment N°%d" msgstr "Fragment N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2640 # File: opengl/edit/atom_object.c, Line: 938 # File: opengl/win/initcoord.c, Line: 538 # File: opengl/win/w_search.c, Line: 879,1069 msgid "Molecule N°%d" msgstr "Molécule N°%d" # File: opengl/edit/atom_object.c, Line: 1026 msgid "All non-selected atom(s) from: %s" msgstr "Tous les atomes non-sélectionnés de: %s" # File: opengl/edit/atom_object.c, Line: 1030 msgid "All selected atom(s) from: %s" msgstr "Tous les atomes sélectionnés parmi: %s" # File: opengl/edit/atom_object.c, Line: 1034 msgid "All atom(s) from: %s" msgstr "Tous les atomes de: %s" # File: opengl/edit/atom_object.c, Line: 1306 # File: opengl/win/w_search.c, Line: 2435,2687 msgid "Empty position" msgstr "Postion vide" # File: opengl/edit/atom_object.c, Line: 1310 msgid "%s atom" msgstr "Atome %s" # File: opengl/edit/atom_search.c, Line: 114 msgid " Move atom(s)" msgstr " Déplacer les atomes" # File: opengl/edit/atom_search.c, Line: 114 msgid " Replace atom(s)" msgstr " Remplacer les atomes" # File: opengl/edit/atom_search.c, Line: 114 msgid " Remove atom(s)" msgstr " Supprimer les atomes" # File: opengl/edit/atom_search.c, Line: 114 msgid " Insert atom(s)" msgstr " Insérer un ou plusieurs atomes" # File: opengl/edit/atom_search.c, Line: 138 msgid "Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)" msgstr "Extraire/reconstruire le ou les objets à déplacer, c'est-à-dire couper/nettoyer les liens avec le(s) voisin(s) le(s) plus proche(s)" # File: opengl/edit/atom_search.c, Line: 146 msgid "Recompute bonding information using bond cutoffs" msgstr "Recalculer les informations de liaison à l'aide des rayons de coupure" # File: opengl/edit/atom_search.c, Line: 157 msgid "Repeat n times, n= " msgstr "Répétez n fois, n= " # File: opengl/edit/atom_search.c, Line: 269 msgid "moved" msgstr "déplacer" # File: opengl/edit/atom_search.c, Line: 269 msgid "moved randomly" msgstr "déplacer au hasard" # File: opengl/edit/atom_search.c, Line: 269 msgid "passivated" msgstr "passiver" # File: opengl/edit/atom_search.c, Line: 277 msgid "Select the object(s) to be %s in: " msgstr "Sélectionnez le(s) objet(s) à %s: " # File: opengl/edit/atom_search.c, Line: 287 msgid "Atom selection:" msgstr "Sélection d'atomes:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Translate:" msgstr "Translation:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Rotate:" msgstr "Rotation:" # File: opengl/edit/atom_search.c, Line: 313 msgid "Normally" msgstr "Normalement" # File: opengl/edit/atom_search.c, Line: 314 msgid "Randomly" msgstr "Au Hasard" # File: opengl/edit/atom_search.c, Line: 320 msgid "Replace: " msgstr "Remplacer: " # File: opengl/edit/atom_search.c, Line: 320 msgid "Remove: " msgstr "Supprimer: " # File: opengl/edit/cbuild_action.c, Line: 1209 msgid "%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?" msgstr "La dimension %s (%f Å) est supérieure au min(a,b,c)\n" "Si vous construisez le cristal, la structure finale risque d’être encombrée !\n" "Continuer quand même ?" # File: opengl/edit/cbuild_action.c, Line: 1772 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message." msgstr "Le cristal sera créé mais certains objets pourraient manquer,\n" "L'occupation est trop faible par rapport au nombre de site(s) par cellule.\n\n" "Pour construire un cristal correspondant à l'occupation définie:\n" "\t 1) Si vous essayez de lire un fichier CIF, utilisez plutôt le constructeur de cristaux.\n" "\t 2) Modifiez la configuration d'occupation sur « Complètement aléatoire ».\n" "\t 3) Augmentez le nombre de cellules unitaires jusqu'à supprimer ce message." # File: opengl/edit/cbuild_action.c, Line: 356 msgid "Please describe properly the lattice parameters" msgstr "Veuillez décrire correctement les paramètres de maille" # File: opengl/edit/cbuild_action.c, Line: 1212 msgid "This object might be too big !" msgstr "Cet objet est peut-être trop gros !" # File: opengl/edit/cbuild_action.c, Line: 1287 msgid "Impossible to build crystal: check occupancy !" msgstr "Impossible de construire le cristal: vérifiez l'occupation !" # File: opengl/edit/cbuild_action.c, Line: 1325 msgid "Impossible to build crystal: site total occupancy > 1.0" msgstr "Impossible de construire le cristal: occupation totale du site > 1,0" # File: opengl/edit/cbuild_action.c, Line: 1357 msgid "Impossible to build crystal: empty site(s) only !" msgstr "Impossible de construire le cristal: site(s) vide(s) uniquement !" # File: opengl/edit/cbuild_action.c, Line: 1489 msgid "Inter-object distance(s) < 0.5 Ang. !" msgstr "Distance(s) inter-objets < 0,5 Ang. !" # File: opengl/edit/cbuild_action.c, Line: 1490 msgid "Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?" msgstr "Distance(s) inter-objets < 0,5 Å !\n\n\t\tContinuer et laisser un seul objet à chaque position ?" # File: opengl/edit/cbuild_action.c, Line: 1724 # File: opengl/edit/cbuild_edit.c, Line: 1432 msgid "Build (new project)" msgstr "Construire (nouveau projet)" # File: opengl/edit/cbuild_edit.c, Line: 1203 msgid "Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated." msgstr "Les sites sont remplis aléatoirement dans la cellule initiale uniquement,\n" "la cellule initiale est alors simplement répliquée." # File: opengl/edit/cbuild_edit.c, Line: 1206 msgid "Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole." msgstr "Les sites sont remplis aléatoirement pour l'ensemble du réseau,\n" "le cristal final est considéré dans son ensemble." # File: opengl/edit/cbuild_edit.c, Line: 1252 msgid "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n" msgstr "Au lieu de garantir que les sites soient remplis par un seul objet,\n" "cela permet aux objets de partager la même position cristalline. \n" "L'option ci-dessus décrit l'alternance des positions remplies et vides.\n" # File: opengl/edit/cbuild_edit.c, Line: 1271 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n" msgstr "\tEntier le plus petit : \n" "\t\t Occupation %s\n\t\t\t ex: ⌊8,75⌋ = 8\n" "\tEntier le plus élevé : \n" "\t\t Occupation %s\n\t\t\t ex: ⌈5,39⌉ = 6\n" "\tEntier le plus proche : \n" "\t\t Occupation %s\n\t\t\t ex: ⌊6,82⌉ = 7 et ⌊4,31⌉ = 4\n" "\n\t\t%s\n" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 102 # File: opengl/win/w_crystal.c, Line: 75 msgid "Triclinic" msgstr "Triclinique" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 103 # File: opengl/win/w_crystal.c, Line: 75 msgid "Monoclinic" msgstr "Monoclinique" # File: opengl/edit/cbuild_edit.c, Line: 1290 msgid "Othorhombic" msgstr "Orthorhombique" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 105 # File: opengl/win/w_crystal.c, Line: 75 msgid "Tetragonal" msgstr "Tétragonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 106 # File: opengl/win/w_crystal.c, Line: 75 msgid "Trigonal" msgstr "Trigonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 107 # File: opengl/win/w_crystal.c, Line: 75 msgid "Hexagonal" msgstr "Hexagonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 108 msgid "Cubic" msgstr "Cubique" # File: opengl/edit/cbuild_edit.c, Line: 940,941,942,943,946 # File: opengl/edit/cbuild_info.c, Line: 99 msgid "Primitive " msgstr "Primitif " # File: opengl/edit/cbuild_edit.c, Line: 941 # File: opengl/edit/cbuild_info.c, Line: 87 msgid "Base-centered" msgstr "Base Centrée" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 95 msgid "Body-centered" msgstr "Corps Centré" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 91 msgid "Face-centered" msgstr "Face Centrée" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Hexagonal Axes" msgstr "Axes Hexagonaux" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Rhombohedral Axes" msgstr "Axes Rhomboédriques" # File: opengl/edit/cbuild_edit.c, Line: 104 msgid "a ≠ b ≠ c\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β" msgstr "a ≠ b ≠ c\nα = β = 90° ≠ ɣ\n\tou\nα = ɣ = 90° ≠ β" # File: opengl/edit/cbuild_edit.c, Line: 107 msgid "a = b ≠ c\nα = β = 90° and ɣ = 120°" msgstr "a = b ≠ c\nα = β = 90° et ɣ = 120°" # File: opengl/edit/cbuild_edit.c, Line: 408 msgid "Vectors" msgstr "Vecteurs" # File: opengl/edit/cbuild_edit.c, Line: 747 msgid "%s group info" msgstr "Informations sur le groupe %s" # File: opengl/edit/cbuild_edit.c, Line: 889 msgid "Cannot read space group *.sgl file ?!\nPlease check the program library !" msgstr "Impossible de lire le fichier *.sgl du groupe d'espace ?!\nVeuillez vérifier la bibliothèque du logiciel !" # File: opengl/edit/cbuild_edit.c, Line: 1198 msgid "Random for the initial cell only" msgstr "Aléatoire pour la cellule initiale uniquement" # File: opengl/edit/cbuild_edit.c, Line: 1199 msgid "Random cell by cell" msgstr "Aléatoire cellule par cellule" # File: opengl/edit/cbuild_edit.c, Line: 1200 msgid "Completely random" msgstr "Complètement aléatoire" # File: opengl/edit/cbuild_edit.c, Line: 1201 msgid "Successively" msgstr "Successivement" # File: opengl/edit/cbuild_edit.c, Line: 1202 msgid "Alternatively" msgstr "Alternativement" # File: opengl/edit/cbuild_edit.c, Line: 1205 msgid "Sites are filled randomly for each cell, cell by cell separately." msgstr "Les sites sont remplis de manière aléatoire pour chaque cellule,\ncellule par cellule séparément." # File: opengl/edit/cbuild_edit.c, Line: 1208 msgid "Sites are filled successively: all object(s) A, then all object(s) B ... " msgstr "Les sites sont remplis successivement: tous les objets A, puis tous les objets B ... " # File: opengl/edit/cbuild_edit.c, Line: 1209 msgid "Sites are filled alternatively: object A, object B, object A ..." msgstr "Les sites sont remplis alternativement: objet A, objet B, objet A ..." # File: opengl/edit/cbuild_edit.c, Line: 1247 msgid "Allow overlapping" msgstr "Autoriser le chevauchement" # File: opengl/edit/cbuild_edit.c, Line: 1258 msgid "Occupancy rounding:" msgstr "Arrondi des taux d'occupation:" # File: opengl/edit/cbuild_edit.c, Line: 1291 msgid "Crystal builder - %s" msgstr "Constructeur de cristaux - %s" # File: opengl/edit/cbuild_edit.c, Line: 1291 # File: opengl/win/w_crystal.c, Line: 776 msgid "Crystal builder" msgstr "Constructeur de cristaux" # File: opengl/edit/cbuild_edit.c, Line: 1309 msgid "Crystal system:" msgstr "Système cristallin:" # File: opengl/edit/cbuild_edit.c, Line: 1321 msgid "Bravais lattice:" msgstr "Réseau de Bravais:" # File: opengl/edit/cbuild_edit.c, Line: 1326 # File: opengl/edit/cbuild_info.c, Line: 555 msgid "Lattice constraints: " msgstr "Contraintes de maille: " # File: opengl/edit/cbuild_edit.c, Line: 1340 msgid "Space group:" msgstr "Groupe d'espace:" # File: opengl/edit/cbuild_edit.c, Line: 1355 msgid "Settings:" msgstr "Paramètres:" # File: calc/cp2k/cp2k_init.c, Line: 182 # File: opengl/edit/cbuild_edit.c, Line: 1383 msgid "Lattice parameters:" msgstr "Paramètres de maille:" # File: opengl/edit/cbuild_edit.c, Line: 1402 msgid "Cell(s):" msgstr "Cellule(s):" # File: opengl/edit/cbuild_edit.c, Line: 1415 msgid " Wrap all atoms in the unit cell after building" msgstr " Remettre tous les atomes dans la cellule unitaire après la construction" # File: opengl/edit/cbuild_edit.c, Line: 1416 msgid " Show/Hide clones after building" msgstr " Afficher/Masquer les clones après la construction" # File: opengl/edit/cbuild_edit.c, Line: 1421 msgid "Add object(s):" msgstr "Ajouter un ou plusieurs objets:" # File: opengl/edit/cbuild_edit.c, Line: 1425 # File: opengl/win/w_search.c, Line: 3581 msgid "Occupancy" msgstr "Occupation" # File: opengl/edit/cbuild_edit.c, Line: 1432 # File: opengl/win/w_crystal.c, Line: 784 msgid "Build" msgstr "Construire" # File: opengl/edit/cbuild_info.c, Line: 103 msgid "Rhombohedral" msgstr "Rhomboédrique" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 892,997 # File: opengl/win/w_measures.c, Line: 491,492,493 # File: opengl/win/w_rings.c, Line: 413 msgid "Id." msgstr "Id." # File: calc/cp2k/cp2k_init.c, Line: 173 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Multiplicity" msgstr "Multiplicité" # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Letter" msgstr "Lettre" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/w_crystal.c, Line: 793 msgid "Symmetry" msgstr "Symétrie" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Coordinates" msgstr "Coordonnées" # File: opengl/edit/cbuild_info.c, Line: 498 msgid "%s info" msgstr "%s informations" # File: opengl/edit/cbuild_info.c, Line: 516 msgid "Space group: " msgstr "Groupe d'espace: " # File: opengl/edit/cbuild_info.c, Line: 523 msgid "Number: " msgstr "Numéro: " # File: opengl/edit/cbuild_info.c, Line: 537 msgid "Crystal system: " msgstr "Système cristallin: " # File: opengl/edit/cbuild_info.c, Line: 547 msgid "Bravais lattice: " msgstr "Réseau de Bravais: " # File: opengl/edit/cbuild_info.c, Line: 571 msgid "Setting(s): " msgstr "Paramètres): " # File: opengl/edit/cbuild_info.c, Line: 595 msgid "Wyckoff position(s): " msgstr "Position(s) de Wyckoff: " # File: opengl/edit/cell_cut.c, Line: 81 msgid "Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B" msgstr "Sélectionnez le ou les objets A à remplacer lors de la création du volume, puis sélectionnez le ou les objets B à insérer à sa place.\n" "Lors de la découpe dans le modèle, toute liaison à A avec la nouvelle surface sera passivée par B" # File: opengl/edit/cell_cut.c, Line: 71 msgid "Cell edition - %s: surface passivation" msgstr "Édition de la cellule - %s: passivation de surface" # File: opengl/edit/cell_cut.c, Line: 116 msgid "- Volume: " msgstr "- Volume: " # File: opengl/edit/cell_cut.c, Line: 123 msgid "- Atom(s) in slab: " msgstr "- Atome(s) dans le volume: " # File: opengl/edit/cell_cut.c, Line: 132 msgid "\t - %s atom(s) in slab: " msgstr "\t - %s atome(s) dans le volume: " # File: opengl/edit/cell_cut.c, Line: 225 msgid "- Position the center of the slab: " msgstr "- Positionner le centre du volume: " # File: opengl/edit/cell_cut.c, Line: 226,227 msgid "- Size of the slab: " msgstr "- Dimensions du volume: " # File: opengl/edit/cell_cut.c, Line: 229 msgid "- Parallelepiped angles: " msgstr "- Angles parallélépipédiques: " # File: opengl/edit/cell_cut.c, Line: 230 msgid "- Slab rotation: " msgstr "- Rotation du volume: " # File: calc/dl_poly/dlp_field.c, Line: 279 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_measures.c, Line: 752 msgid "Angles" msgstr "Angles" # File: opengl/edit/cell_cut.c, Line: 307 msgid "Rotation" msgstr "Rotation" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and modify model ?\n This is irreversible !" msgstr "Couper et modifier le modèle ?\n Cela est irréversible !" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and create new project ?" msgstr "Couper et créer un nouveau projet ?" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut" msgstr "Couper" # File: opengl/edit/cell_cut.c, Line: 638 msgid "Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !" msgstr "Rien pour passiver le(s) liaison(s) à rompre:\nDésactivez la passivation ou réglez correctement les options !" # File: opengl/edit/cell_cut.c, Line: 643 msgid "The slab is empty, nothing to do !" msgstr "Le volume est vide, rien à faire !" # File: opengl/edit/cell_cut.c, Line: 666 msgid "Cut slab in the simulation box: " msgstr "Découper un volume dans la boîte de simulation: " # File: opengl/edit/cell_cut.c, Line: 670 msgid "Show/Hide slab" msgstr "Afficher/Masquer le volume" # File: opengl/edit/cell_cut.c, Line: 672 msgid "Use PBC to select atoms" msgstr "Utilisez les CLP pour sélectionner les atomes" # File: opengl/edit/cell_cut.c, Line: 674 msgid "Invert cutting (all but the slab)" msgstr "Coupe inversée (tout sauf le volume)" # File: opengl/edit/cell_cut.c, Line: 676 msgid "Export in new project" msgstr "Exporter dans un nouveau projet" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Parallelepiped" msgstr "Parallélépipède" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Cylinder" msgstr "Cylindre" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Sphere" msgstr "Sphère" # File: opengl/edit/cell_cut.c, Line: 688 msgid "- Shape of the slab: " msgstr "- Forme du volume: " # File: opengl/edit/cell_cut.c, Line: 694 msgid "Passivate surface" msgstr "Passiver la surface" # File: calc/cp2k/cp2k_init.c, Line: 802 # File: opengl/edit/cell_cut.c, Line: 698 msgid "Options" msgstr "Options" # File: opengl/edit/cell_cut.c, Line: 712 msgid "- Select option to tweak: " msgstr "- Sélectionnez l'option à modifier: " # File: opengl/edit/cell_cut.c, Line: 726 msgid "Slab information:" msgstr "Informations sur le volume:" # File: opengl/edit/cell_cut.c, Line: 729 msgid "- Opacity: " msgstr "- Opacité: " # File: opengl/edit/cell_cut.c, Line: 738 msgid "Select atom(s) in this slab !" msgstr "Sélectionnez le(s) atome(s) dans ce volume !" # File: opengl/edit/cell_cut.c, Line: 739 msgid "or" msgstr "ou" # File: opengl/edit/cell_cut.c, Line: 740 msgid "Cut this slab now !" msgstr "Decoupez ce volume maintenant !" # File: opengl/edit/cell_density.c, Line: 59 msgid "Volume:" msgstr "Volume:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Mass density:" msgstr "Densité de masse:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Number density:" msgstr "Densité numérique:" # File: opengl/edit/cell_density.c, Line: 60 msgid "atom/Å3" msgstr "atome/Å3" # File: opengl/edit/cell_density.c, Line: 120 msgid "Modify the density of the simulation box *: " msgstr "Modifier la densité de la boîte de simulation *: " # File: opengl/edit/cell_density.c, Line: 121 msgid "Homogeneous rescaling **" msgstr "Redimensionnement homogène **" # File: opengl/edit/cell_density.c, Line: 130 msgid " * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated." msgstr " * Les informations visuelles seront préservées, les liaisons réelles sont susceptibles d'être modifiées.\n" " Les propriétés des liaisons doivent être recalculées, et si nécessaire, les rayons de coupure mis à jour." # File: opengl/edit/cell_density.c, Line: 131 msgid "** Keep the ratios between the lattice vectors A, B and C like in the initial cell." msgstr "** Conservez les rapports entre les vecteurs de maille A, B et C comme ceux de la cellule initiale." # File: opengl/edit/cell_edit.c, Line: 48 msgid "Wrap All Atoms in" msgstr "Replacer les Atomes dans la Boîte" # File: opengl/edit/cell_edit.c, Line: 49 msgid "Shift Center" msgstr "Déplacer le Centre de la Cellule" # File: opengl/edit/cell_edit.c, Line: 50 msgid "Add Extra(s)" msgstr "Ajouter des Extras" # File: opengl/edit/cell_edit.c, Line: 51 msgid "Create Super-Cell" msgstr "Créer une Super-Cellule" # File: opengl/edit/cell_edit.c, Line: 52 msgid "Adjust Density" msgstr "Ajuster la Densité" # File: opengl/edit/cell_edit.c, Line: 53 msgid "Cut Slab" msgstr "Découper un Volume" # File: opengl/edit/cell_edit.c, Line: 54 msgid "PBC Pixels Debug" msgstr "Débogage des Pixels CLP" # File: opengl/edit/cell_edit.c, Line: 190 # File: workspace/workspace.c, Line: 388 msgid "Cell edition - %s" msgstr "Édition de cellule - %s" # File: opengl/edit/cell_extra.c, Line: 89 msgid "\tAdd extra cell(s):" msgstr "\tAjouter des cellules supplémentaires:" # File: opengl/edit/cell_extra.c, Line: 103 msgid "Create super-cell" msgstr "Créer une super-cellule" # File: opengl/edit/cell_pixel.c, Line: 259 msgid "\tSelect pixel to check, from 1 to %d:" msgstr "\tSélectionnez le pixel à vérifier, de 1 à %d:" # File: opengl/edit/cell_shift.c, Line: 500 msgid "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?" msgstr "Vous êtes sur le point de remettre tous les atomes du modèle dans la boîte\n" "Cette action est irréversible, continuer quand même ?" # File: opengl/edit/cell_shift.c, Line: 422 msgid "on %s axis [+/- Å]" msgstr "sur l'axe %s [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 429 msgid "Lattice %s [+/- Å]" msgstr "Maille %s [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 435 msgid "Length [+/- Å]" msgstr "Longueur [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 441 msgid "Angle %s [+/- °]" msgstr "Angle %s [+/- °]" # File: opengl/edit/cell_shift.c, Line: 447 msgid "on %s axis [+/- °]" msgstr "sur l'axe %s [+/- °]" # File: opengl/edit/cell_shift.c, Line: 453 msgid "Radius [+/- Å]" msgstr "Rayon [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 483 msgid "Shift the position of the cell center *: " msgstr "Décaler la position du centre de la cellule *: " # File: opengl/edit/cell_shift.c, Line: 485 msgid "* requires all atoms to be wrapped in the unit cell" msgstr "* nécessite que tous les atomes soient replacés dans la cellule unitaire" # File: opengl/edit/cell_shift.c, Line: 502 msgid "Wrap atomic coordinates in unit cell ?" msgstr "Replacer les coordonnées atomiques dans la cellule unitaire ?" # File: opengl/edit/cell_shift.c, Line: 565 msgid "Wrap atomic coordinates in unit cell" msgstr "Replacer les coordonnées atomiques dans la cellule unitaire" # File: opengl/edit/cell_super.c, Line: 206 msgid "You are about to change the periodicity of the 3D model," msgstr "Vous êtes sur le point de modifier la périodicité du modèle 3D," # File: opengl/edit/cell_super.c, Line: 207 msgid "this will affect the entire molecular dynamics trajectory," msgstr "cela affectera toute la trajectoire de dynamique moléculaire," # File: opengl/edit/cell_super.c, Line: 208 msgid "\tand the action is irreversible, proceed anyway ?" msgstr "\tet l'action est irréversible, continuer quand même ?" # File: opengl/edit/cell_super.c, Line: 218 msgid "Create a super-cell ?" msgstr "Créer une super-cellule ?" # File: opengl/edit/cell_super.c, Line: 325 msgid "Something went wrong, the 3D model was not updated" msgstr "Quelque chose s'est mal passé, le modèle 3D n'a pas été mis à jour" # File: opengl/win/color_box.c, Line: 366 # File: opengl/win/m_atoms.c, Line: 747 # File: opengl/win/m_back.c, Line: 92 # File: opengl/win/m_box.c, Line: 627 # File: opengl/win/m_coord.c, Line: 483 msgid "More Colors ..." msgstr "Plus de Couleurs ..." # File: opengl/win/glwindow.c, Line: 126,168,171 msgid "Analysis mode" msgstr "Mode analyse" # File: opengl/win/glwindow.c, Line: 128 msgid "Styles" msgstr "Styles" # File: opengl/win/glwindow.c, Line: 128,161 # File: opengl/win/m_tools.c, Line: 316,473 msgid "Measures" msgstr "Mesures" # File: opengl/win/glwindow.c, Line: 128 msgid "Selection mode" msgstr "Mode de sélection" # File: opengl/win/glwindow.c, Line: 128 msgid "Window management" msgstr "Gestion des fenêtres" # File: opengl/win/glwindow.c, Line: 128 msgid "Mouse mode" msgstr "Mode de la souris" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera rotation" msgstr "Rotation de la caméra" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera motion" msgstr "Déplacement de la caméra" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera spin" msgstr "Rotation lancée" # File: opengl/win/glwindow.c, Line: 129,130 msgid "Model interaction" msgstr "Interaction avec le modèle" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates rotation" msgstr "Rotation des coordonnées" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates translation" msgstr "Translation des coordonnées" # File: opengl/win/glwindow.c, Line: 139 msgid "change atom(s) color map" msgstr "changer la carte des couleurs des atomes" # File: opengl/win/glwindow.c, Line: 140 msgid "change polyhedra color map" msgstr "changer la carte des couleurs des polyèdres" # File: opengl/win/glwindow.c, Line: 141 msgid "change global style to balls and sticks" msgstr "changer le style global en boules et bâtonnets" # File: opengl/win/glwindow.c, Line: 142 msgid "change global style to cylinders" msgstr "changer le style global en cylindres" # File: opengl/win/glwindow.c, Line: 143 # File: opengl/win/m_style.c, Line: 62 msgid "Spheres" msgstr "Sphères" # File: opengl/win/glwindow.c, Line: 143 msgid "change global style to spheres" msgstr "changer le style global en sphères" # File: opengl/win/glwindow.c, Line: 144 # File: opengl/win/m_style.c, Line: 66 msgid "Covalent Radii" msgstr "Rayons Covalents" # File: opengl/win/glwindow.c, Line: 144 msgid "change global style to covalent radii" msgstr "changer le style global en rayons covalents" # File: opengl/win/glwindow.c, Line: 145 # File: opengl/win/m_style.c, Line: 67 msgid "Ionic Radii" msgstr "Rayons Ioniques" # File: opengl/win/glwindow.c, Line: 145 msgid "change global style to ionic radii" msgstr "changer le style global en rayons ioniques" # File: opengl/win/glwindow.c, Line: 146 # File: opengl/win/m_style.c, Line: 68 msgid "van der Waals Radii" msgstr "Rayons de van der Waals" # File: opengl/win/glwindow.c, Line: 146 msgid "change global style to van der Waals radii" msgstr "changer le style global en rayons de van der Waals" # File: opengl/win/glwindow.c, Line: 147 # File: opengl/win/m_style.c, Line: 69 msgid "In Crystal Radii" msgstr "Rayons Cristallins" # File: opengl/win/glwindow.c, Line: 147 msgid "change global style to in crystal radii" msgstr "changer le style global en rayons cristallins" # File: opengl/win/glwindow.c, Line: 148 msgid "change global style to wireframes" msgstr "changer le style global en fils de fer" # File: opengl/win/glwindow.c, Line: 150 msgid "All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures" msgstr "Toutes les mesures pour la sélection, appuyé:\n\n" "\t- 1ère fois: affiche les distances inter-atomiques\n" "\t- 2ème fois: affiche les angles inter-atomiques\n" "\t- 3ème fois: masque les mesures" # File: opengl/win/glwindow.c, Line: 153 msgid "Show measures" msgstr "Afficher les mesures" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 155 # File: opengl/win/w_library.c, Line: 194 msgid "Atom" msgstr "Atome" # File: opengl/win/glwindow.c, Line: 155 msgid "atom selection mode" msgstr "mode de sélection d'atomes" # File: opengl/win/glwindow.c, Line: 156 # File: opengl/win/m_coord.c, Line: 425 # File: opengl/win/menu_bar.c, Line: 204 msgid "Coordination" msgstr "Coordination" # File: opengl/win/glwindow.c, Line: 156 msgid "coordination sphere selection mode" msgstr "sélection par sphère de coordination" # File: opengl/win/glwindow.c, Line: 157 msgid "fragment selection mode" msgstr "sélection par fragment" # File: opengl/win/glwindow.c, Line: 158 msgid "molecule selection mode" msgstr "sélection par molécule" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments" msgstr "Environnements" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments window" msgstr "Fenêtre Environnements" # File: opengl/win/glwindow.c, Line: 161 msgid "Measures window" msgstr "Fenêtre Mesures" # File: opengl/win/glwindow.c, Line: 162 # File: opengl/win/m_anim.c, Line: 79,83,144 msgid "Recorder" msgstr "Enregistreur" # File: opengl/win/glwindow.c, Line: 162 msgid "Recorder window" msgstr "Fenêtre de l'enregistreur" # File: opengl/win/glwindow.c, Line: 163 msgid "Create new project" msgstr "Créer un nouveau projet" # File: opengl/win/glwindow.c, Line: 164 msgid "Enter fullscreen" msgstr "Entrez en plein écran" # File: opengl/win/glwindow.c, Line: 165 msgid "Exit fullscreen" msgstr "Quitter le plein écran" # File: opengl/win/glwindow.c, Line: 177,202 msgid "Rotate right" msgstr "Pivoter à droite" # File: opengl/win/glwindow.c, Line: 177,189,202 msgid "rotate right" msgstr "tourner à droite" # File: opengl/win/w_spiner.c, Line: 186 msgid "Right" msgstr "Droite" # File: opengl/win/glwindow.c, Line: 178,203 msgid "Rotate left" msgstr "Pivoter à gauche" # File: opengl/win/glwindow.c, Line: 178,190,203 msgid "rotate left" msgstr "tourner à gauche" # File: opengl/win/w_spiner.c, Line: 187 msgid "Left" msgstr "Gauche" # File: opengl/win/glwindow.c, Line: 179,204 msgid "Rotate up" msgstr "Pivoter vers le haut" # File: opengl/win/glwindow.c, Line: 179,191,204 msgid "rotate up" msgstr "tourner vers le haut" # File: opengl/win/w_spiner.c, Line: 189 msgid "Up" msgstr "Haut" # File: opengl/win/glwindow.c, Line: 180,205 msgid "Rotate down" msgstr "Pivoter vers le bas" # File: opengl/win/glwindow.c, Line: 180,192,205 msgid "rotate down" msgstr "tourner vers le bas" # File: opengl/win/w_spiner.c, Line: 190 msgid "Down" msgstr "Bas" # File: opengl/win/glwindow.c, Line: 182 msgid "Move right" msgstr "Vers la droite" # File: opengl/win/glwindow.c, Line: 182,207 msgid "move camera right" msgstr "déplacer la caméra vers la droite" # File: opengl/win/glwindow.c, Line: 183 msgid "Move left" msgstr "Vers la gauche" # File: opengl/win/glwindow.c, Line: 183,208 msgid "move camera left" msgstr "déplacer la caméra vers la gauche" # File: opengl/win/glwindow.c, Line: 184 msgid "Move up" msgstr "Monter" # File: opengl/win/glwindow.c, Line: 184,209 msgid "move camera up" msgstr "déplacer la caméra vers le haut" # File: opengl/win/glwindow.c, Line: 185 msgid "Move down" msgstr "Descendre" # File: opengl/win/glwindow.c, Line: 185,210 msgid "move camera down" msgstr "déplacer la caméra vers le bas" # File: opengl/win/glwindow.c, Line: 186,211 msgid "Zoom in" msgstr "Zoom avant" # File: opengl/win/glwindow.c, Line: 186,211 msgid "zoom camera in" msgstr "zoom avant de la caméra" # File: opengl/win/glwindow.c, Line: 187,212 msgid "Zoom out" msgstr "Zoom arrière" # File: opengl/win/glwindow.c, Line: 187,212 msgid "zoom camera out" msgstr "zoom arrière de la caméra" # File: opengl/win/glwindow.c, Line: 189 msgid "Spin right" msgstr "Tourner à droite" # File: opengl/win/glwindow.c, Line: 190 msgid "Spin left" msgstr "Tourner à gauche" # File: opengl/win/glwindow.c, Line: 191 msgid "Spin up" msgstr "Tourner vers le haut" # File: opengl/win/glwindow.c, Line: 192 msgid "Spin down" msgstr "Tourner vers le bas" # File: opengl/win/glwindow.c, Line: 193 msgid "Pause / restart" msgstr "Pause / redémarrage" # File: opengl/win/glwindow.c, Line: 193 msgid "pause / restart spinning" msgstr "mettre en pause / redémarrer la rotation" # File: opengl/win/glwindow.c, Line: 194 # File: opengl/win/w_record.c, Line: 167 # File: opengl/win/w_sequencer.c, Line: 491 # File: opengl/win/w_spiner.c, Line: 188 msgid "Stop" msgstr "Arrêt" # File: opengl/win/glwindow.c, Line: 194 msgid "stop spinning" msgstr "arrêter de tourner" # File: opengl/win/glwindow.c, Line: 196,214 msgid "Label / unlabel all atom(s)" msgstr "Étiqueter / désétiq. tous les atomes" # File: opengl/win/glwindow.c, Line: 197,215 msgid "Select / unselect all atom(s)" msgstr "Sélectionner / désélect. tous les atomes" # File: opengl/win/glwindow.c, Line: 198,216 msgid "Copy selection" msgstr "Copier la sélection" # File: opengl/win/glwindow.c, Line: 207 msgid "Translate right" msgstr "Translation à droite" # File: opengl/win/glwindow.c, Line: 208 msgid "Translate left" msgstr "Translation à gauche" # File: opengl/win/glwindow.c, Line: 209 msgid "Translate up" msgstr "Translation en haut" # File: opengl/win/glwindow.c, Line: 210 msgid "Translate down" msgstr "Translation en bas" # File: opengl/win/glwindow.c, Line: 217 msgid "Cut selection" msgstr "Couper la sélection" # File: opengl/win/glwindow.c, Line: 218 msgid "Paste selection" msgstr "Coller la sélection" # File: opengl/win/glwindow.c, Line: 219 msgid "Delete selection" msgstr "Supprimer la sélection" # File: opengl/win/glwindow.c, Line: 310 # File: opengl/win/m_poly.c, Line: 343,497,501 # File: opengl/win/menu_bar.c, Line: 208,212 msgid "Ring(s)" msgstr "Anneau(x)" # File: opengl/win/glwindow.c, Line: 314 # File: opengl/win/m_map.c, Line: 1165,1276 # File: opengl/win/menu_bar.c, Line: 205 # File: opengl/win/popup.c, Line: 4234 msgid "Polyhedra" msgstr "Polyèdres" # File: opengl/win/glwindow.c, Line: 490 # File: opengl/win/m_box.c, Line: 327,606 # File: opengl/win/menu_bar.c, Line: 166 # File: opengl/win/popup.c, Line: 3699 msgid "Style" msgstr "Style" # File: opengl/win/glwindow.c, Line: 492 # File: opengl/win/menu_bar.c, Line: 167 msgid "Color Maps" msgstr "Palettes de Couleurs" # File: opengl/win/glwindow.c, Line: 493 # File: opengl/win/menu_bar.c, Line: 170 msgid "Material and Light(s)" msgstr "Matériau et Éclairage(s)" # File: opengl/draw/image.c, Line: 209 # File: opengl/win/glwindow.c, Line: 494 # File: opengl/win/menu_bar.c, Line: 171 msgid "Render Image" msgstr "Générer Une Image" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 525 # File: opengl/win/m_clones.c, Line: 122,185 # File: opengl/win/m_edit.c, Line: 360 # File: opengl/win/menu_bar.c, Line: 186 # File: opengl/win/popup.c, Line: 4228 # File: opengl/win/w_search.c, Line: 4000,4141 # File: calc/dl_poly/dlp_field.c, Line: 143 msgid "Atom(s)" msgstr "Atome(s)" # File: opengl/win/glwindow.c, Line: 527 # File: opengl/win/menu_bar.c, Line: 188 # File: opengl/win/popup.c, Line: 4230 msgid "Clone(s)" msgstr "Clone(s)" # File: opengl/win/glwindow.c, Line: 559 # File: opengl/win/m_rep.c, Line: 813 msgid "Projection" msgstr "Projection" # File: opengl/win/glwindow.c, Line: 560 # File: opengl/win/m_rep.c, Line: 814 msgid "Background" msgstr "Arrière-plan" # File: opengl/win/glwindow.c, Line: 565 # File: opengl/win/m_rep.c, Line: 579,781 # File: opengl/win/popup.c, Line: 4269 msgid "Reset View" msgstr "Réinitialiser la Vue" # File: opengl/win/glwindow.c, Line: 566 # File: opengl/win/m_rep.c, Line: 782 # File: opengl/win/popup.c, Line: 4270 msgid "Center Molecule" msgstr "Centrer la Molécule" # File: opengl/win/glwindow.c, Line: 568 # File: opengl/win/m_rep.c, Line: 797 # File: opengl/win/popup.c, Line: 4274 msgid "Fullscreen" msgstr "Plein écran" # File: calc/dl_poly/dlp_field.c, Line: 924 # File: opengl/win/glwindow.c, Line: 623 # File: opengl/win/menu_bar.c, Line: 271,276 msgid "Chemistry" msgstr "Chimie" # File: opengl/win/glwindow.c, Line: 1359 msgid "Sorry OpenGL is not supported !" msgstr "Désolé, OpenGL n'est pas supporté !" # File: opengl/win/glwindow.c, Line: 1376 # File: opengl/win/m_tools.c, Line: 240 # File: workspace/workspace.c, Line: 368 msgid "%s - 3D view - [%s mode]" msgstr "%s - Vue 3D - [Mode %s]" # File: opengl/win/initcoord.c, Line: 267 # File: opengl/win/m_box.c, Line: 321,325 # File: opengl/win/m_clones.c, Line: 116,120,183 # File: opengl/win/m_coord.c, Line: 294,656 # File: opengl/win/m_poly.c, Line: 234,449,453 # File: opengl/win/w_labels.c, Line: 810 # File: opengl/win/w_volumes.c, Line: 797,1106 msgid "Show/Hide" msgstr "Afficher/Masquer" # File: opengl/win/initcoord.c, Line: 483 msgid "fragment(s)" msgstr "fragment(s)" # File: opengl/win/initcoord.c, Line: 483 msgid "molecule(s)" msgstr "molécule(s)" # File: opengl/win/initcoord.c, Line: 486 msgid "Maximum number of %s per MD step: %d" msgstr "Nombre maximum de %s par pas de DM: %d" # File: opengl/win/m_anim.c, Line: 61 # File: opengl/win/menu_bar.c, Line: 280 # File: opengl/win/popup.c, Line: 4045 msgid "Animate" msgstr "Animer" # File: opengl/win/m_anim.c, Line: 66,70,142 msgid "Spin" msgstr "Rotation" # File: opengl/win/m_anim.c, Line: 72,143 msgid "Sequencer" msgstr "Séquenceur" # File: opengl/win/m_atoms.c, Line: 361 # File: opengl/win/m_atoms.c, Line: 689 msgid "Show/Hide All" msgstr "Afficher/Masquer Tout" # File: opengl/win/m_atoms.c, Line: 408,417,710 msgid "Select atom(s)" msgstr "Sélectionner un(des) Atome(s)" # File: opengl/win/m_atoms.c, Line: 447,451,807 # File: opengl/win/m_coord.c, Line: 360 # File: opengl/win/w_labels.c, Line: 778 msgid "Color(s)" msgstr "Couleurs)" # File: opengl/win/m_atoms.c, Line: 453,808 msgid "Label(s)" msgstr "Label(s)" # File: opengl/win/m_atoms.c, Line: 459,469,812 # File: opengl/win/m_bonds.c, Line: 275,286,387 msgid "Radius(ii)" msgstr "Rayon(s)" # File: opengl/win/m_atoms.c, Line: 482,492,818 msgid "Dot Size(s)" msgstr "Taille(s) de Point" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Top" msgstr "Haut" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Bottom" msgstr "Bas" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Right Corner" msgstr "Coin Droit" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Left Corner" msgstr "Coin Gauche" # File: opengl/win/m_axis.c, Line: 163,169,315 # File: opengl/win/w_colors.c, Line: 484 msgid "Center" msgstr "Centre" # File: opengl/win/m_axis.c, Line: 192 msgid " Length [ %f Ã… ]" msgstr " Longueur [ %f Ã… ]" # File: opengl/win/m_back.c, Line: 75 msgid "Gradient color" msgstr "Dégradé" # File: opengl/win/m_back.c, Line: 93 # File: opengl/win/w_colors.c, Line: 533 msgid "Gradient colors" msgstr "Couleurs du dégradé" # File: opengl/win/m_bonds.c, Line: 161 msgid "Total [ %f Ã… ]" msgstr "Total [ %f Ã… ]" # File: opengl/win/m_bonds.c, Line: 239,243,257,261,376,380 # File: opengl/win/w_bonds.c, Line: 174,188 msgid "Cylinder(s) [ %f Ã… ]" msgstr "Cylindre(s) [ %f Ã… ]" # File: opengl/win/m_bonds.c, Line: 263,382 msgid "Cylinder Radius(ii)" msgstr "Rayon(s) du cylindre" # File: opengl/win/m_bonds.c, Line: 298,309,392 msgid "Line Width(s)" msgstr "Largeur(s) de ligne" # File: opengl/win/m_bonds.c, Line: 323,328,400 msgid "Cutoffs" msgstr "Rayons de Coupure" # File: opengl/win/m_box.c, Line: 332,568 # File: opengl/win/w_axis.c, Line: 136 # File: opengl/win/w_bonds.c, Line: 113,152 # File: opengl/win/w_box.c, Line: 109 msgid "Width [ %f pts ]" msgstr "Largeur [ %f pts ]" # File: opengl/win/m_box.c, Line: 338,350,610 # File: opengl/win/w_advance.c, Line: 1319 msgid "Lines" msgstr "Lignes" # File: opengl/win/m_box.c, Line: 359,573 # File: opengl/win/w_axis.c, Line: 122 # File: opengl/win/w_bonds.c, Line: 96,134 # File: opengl/win/w_box.c, Line: 90 msgid "Radius [ %f Ã… ]" msgstr "Rayon [ %f Ã… ]" # File: opengl/win/m_box.c, Line: 578 msgid " length [ %f Ã… ]" msgstr " longueur [ %f Ã… ]" # File: opengl/win/m_clones.c, Line: 188 msgid "Bonds(s)" msgstr "Liaison(s)" # File: opengl/win/m_coord.c, Line: 304,618 msgid "Atoms in Chain(s) of Size" msgstr "Atomes de Chaîne(s) de Taille" # File: opengl/win/m_coord.c, Line: 308,618 msgid "Atoms in Ring(s) of Size" msgstr "Atomes d'Anneau(x) de Taille" # File: opengl/win/m_coord.c, Line: 429,692 # File: opengl/win/m_map.c, Line: 1242 msgid "Total(s)" msgstr "Totale(s)" # File: opengl/win/m_coord.c, Line: 430,693 # File: opengl/win/m_map.c, Line: 1244 msgid "Partial(s)" msgstr "Partielle(s)" # File: opengl/win/m_edit.c, Line: 176,182,358 msgid "Crystal Builder" msgstr "Constructeur de Cristaux" # File: opengl/win/m_edit.c, Line: 189,194,359 msgid "Cell" msgstr "Cellule" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: opengl/win/m_edit.c, Line: 197 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "Atoms" msgstr "Atomes" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4263 msgid "Extract/Rebuild on Motion" msgstr "Extraire/Reconstruire après Déplacement" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4264 msgid "Extract/Rebuild on Copy" msgstr "Extraire/Reconstruire après Copie" # File: opengl/win/m_map.c, Line: 780 msgid "Wrong file format !\n" " Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms" msgstr "Mauvais format de fichier !\n" " N'attendre qu'un seul fichier à colonne\n" " avec des lignes Ns x Na, avec:\n" " - Ns = nombre de pas MD\n" " - Na = nombre d'atomes" # File: opengl/win/m_map.c, Line: 235 msgid "Range: [min-max] = %f - %f" msgstr "Plage : [min-max] = %f - %f" # File: opengl/win/m_map.c, Line: 236 msgid "Use this data set ?" msgstr "Utiliser cet ensemble de données ?" # File: opengl/win/m_map.c, Line: 505 msgid "Edit color map" msgstr "Éditer la palette de couleurs" # File: opengl/win/m_map.c, Line: 519 msgid "Number of color points for the gradient: " msgstr "Nombre de points de couleur pour le dégradé: " # File: opengl/win/m_map.c, Line: 527 msgid "Initial value (overall max): " msgstr "Valeur initiale (maximum global): " # File: opengl/win/m_map.c, Line: 535 msgid "Final value (overall min): " msgstr "Valeur finale (min global): " # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "MD step" msgstr "Pas de DM" # File: opengl/win/m_map.c, Line: 679 msgid "Value" msgstr "Valeur" # File: opengl/win/m_map.c, Line: 738 msgid "Edit color map data" msgstr "Éditer les données de la palette de couleurs" # File: opengl/win/m_map.c, Line: 804 msgid "Error while saving custom color map" msgstr "Erreur lors de l'enregistrement de la palette de couleurs personnalisée" # File: opengl/win/m_map.c, Line: 887 msgid "Opening custom map for " msgstr "Ouverture d'une carte personnalisée pour " # File: opengl/win/m_map.c, Line: 887 msgid "Saving custom map for " msgstr "Enregistrement de la palette personnalisée pour " # File: opengl/win/m_map.c, Line: 894 msgid "Do you want to save the color map data" msgstr "Voulez-vous enregistrer les données de la palette de couleurs" # File: opengl/win/m_map.c, Line: 895 msgid "Save color map data to file ?" msgstr "Enregistrer les données de la palette de couleurs dans un fichier ?" # File: opengl/win/m_map.c, Line: 903 msgid "Do you want to read new color map data" msgstr "Lire les données d'une nouvelle palette carte de couleurs" # File: opengl/win/m_map.c, Line: 904 msgid "Read color map data from file ?" msgstr "Lire les données de la palette de couleurs à partir du fichier ?" # File: opengl/win/m_map.c, Line: 933 msgid "Raw data (*.dat)" msgstr "Données brutes (*.dat)" # File: opengl/win/m_map.c, Line: 982 msgid "Custom color map settings" msgstr "Paramètres de la pallete de couleurs personnalisée" # File: opengl/win/m_map.c, Line: 985 msgid "Import / Save data" msgstr "Importer / Enregistrer des données" # File: opengl/win/m_map.c, Line: 985 msgid "Edit data" msgstr "Éditer les données" # File: opengl/win/m_map.c, Line: 985 msgid "Customize color map" msgstr "Personnaliser la palette de couleurs" # File: opengl/win/m_map.c, Line: 1133 msgid "Atomic Coordination" msgstr "Coordination Atomique" # File: opengl/win/m_map.c, Line: 1137 # File: opengl/win/w_coord.c, Line: 91 # File: opengl/win/w_cutoffs.c, Line: 201 msgid "Total" msgstr "Totale" # File: opengl/win/m_map.c, Line: 1138 # File: opengl/win/w_coord.c, Line: 92 msgid "Partial" msgstr "Partielle" # File: opengl/win/m_map.c, Line: 1141,1256 msgid "Force Field (DL_POLY)" msgstr "Champ de force (DL_POLY)" # File: opengl/win/m_map.c, Line: 1144,1259 # File: opengl/win/w_coord.c, Line: 1171 msgid "Custom" msgstr "Personnalisé" # File: opengl/win/m_map.c, Line: 1148,1259 msgid "Use Atom(s) Custom Map" msgstr "Palette perso. (atomes)" # File: opengl/win/m_map.c, Line: 1164 msgid "Atoms & bonds" msgstr "Atomes & Liaisons" # File: opengl/win/m_map.c, Line: 1246 msgid "Atomic Coordinations" msgstr "Coordinations atomiques" # File: opengl/win/m_map.c, Line: 1275 msgid "Atoms & Bonds" msgstr "Atomes et & Liaisons" # File: opengl/win/m_poly.c, Line: 339,347,503 msgid "Cloned Polyhedra" msgstr "Polyèdres Clonés" # File: opengl/win/m_proj.c, Line: 145,192 # File: opengl/win/m_rep.c, Line: 486 msgid "Right [1, 0, 0]" msgstr "Droite [1, 0, 0]" # File: opengl/win/m_proj.c, Line: 148,193 # File: opengl/win/m_rep.c, Line: 486 msgid "Left [-1, 0, 0]" msgstr "Gauche [-1, 0, 0]" # File: opengl/win/m_proj.c, Line: 151,194 # File: opengl/win/m_rep.c, Line: 486 msgid "Top [0, 1, 0]" msgstr "Haut [0, 1, 0]" # File: opengl/win/m_proj.c, Line: 154,195 # File: opengl/win/m_rep.c, Line: 486 msgid "Bottom [0, -1, 0]" msgstr "Bas [0, -1, 0]" # File: opengl/win/m_proj.c, Line: 157,196 # File: opengl/win/m_rep.c, Line: 486 msgid "Front [0, 0, 1]" msgstr "Avant [0, 0, 1]" # File: opengl/win/m_proj.c, Line: 160,197 # File: opengl/win/m_rep.c, Line: 486 msgid "Back [0, 0, -1]" msgstr "Arrière [0, 0, -1]" # File: opengl/win/w_advance.c, Line: 1318 msgid "Filled" msgstr "Rempli" # File: opengl/win/w_advance.c, Line: 1320 msgid "Points" msgstr "Points" # File: opengl/win/m_rep.c, Line: 76 msgid "Orthographic" msgstr "Orthographique" # File: opengl/win/m_rep.c, Line: 76 msgid "Perspective" msgstr "Perspective" # File: opengl/win/m_rep.c, Line: 427 msgid "Perspective depth" msgstr "Profond. Perspective" # File: opengl/win/m_rep.c, Line: 427 msgid "Camera depth" msgstr "Profondeur Caméra" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera right/left" msgstr "Cam. droite/gauche" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera up/down" msgstr "Caméra haut/bas" # File: opengl/win/m_rep.c, Line: 469 msgid "%s - OpenGL scene set-up" msgstr "%s - configuration de la scène OpenGL" # File: opengl/win/m_rep.c, Line: 478 msgid "Projection" msgstr "Projection" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: curve/cedit.c, Line: 294 # File: opengl/win/m_rep.c, Line: 487 # File: opengl/win/popup.c, Line: 3693 msgid "Select" msgstr "Sélectionner" # File: opengl/win/m_rep.c, Line: 496 msgid "Representation" msgstr "Représentation" # File: opengl/win/m_rep.c, Line: 513 msgid "OpenGL camera set-up" msgstr "Réglages de la caméra" # File: opengl/win/m_rep.c, Line: 566 msgid "∈ [C. depth, %.1f]" msgstr "∈ [Profondeur C., %.1f]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth*]" msgstr "∈ [%.1f, Profondeur P.*]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth]" msgstr "∈ [%.1f, Profondeur P.]" # File: opengl/win/m_rep.c, Line: 587 msgid "Perspective depth evaluated from the model" msgstr "Profondeur de perspective évaluée à partir du modèle" # File: opengl/win/m_style.c, Line: 64 msgid "Dots" msgstr "Points" # File: opengl/win/m_tools.c, Line: 71 msgid "Classical: DL-POLY" msgstr "Classique: DL-POLY" # File: opengl/win/m_tools.c, Line: 72 msgid "Classical: LAMMPS" msgstr "Classique: LAMMPS" # File: opengl/win/m_tools.c, Line: 73 msgid "First-Principles: CPMD" msgstr "Premiers Principes: CPMD" # File: opengl/win/m_tools.c, Line: 74 msgid "First-Principles: CP2K" msgstr "Premiers Principes: CP2K" # File: opengl/win/m_tools.c, Line: 75 msgid "QM-MM: CPMD - [Soon]" msgstr "QM-MM: CPMD - [Bientôt]" # File: opengl/win/m_tools.c, Line: 76 msgid "QM-MM: CP2K - [Soon]" msgstr "QM-MM: CP2K - [Bientôt]" # File: opengl/win/m_tools.c, Line: 78 msgid "Input(s)" msgstr "Entrée(s)" # File: opengl/win/m_tools.c, Line: 80 msgid "Atom/Bond" msgstr "Atome/Liaison" # File: opengl/win/m_tools.c, Line: 81 msgid "Coordination Sphere" msgstr "Sphère de Coordination" # File: opengl/win/m_tools.c, Line: 84 msgid "Single Fragment" msgstr "Fragment Unique" # File: opengl/win/m_tools.c, Line: 85 msgid "Single Molecule" msgstr "Molécule Unique" # File: opengl/win/m_tools.c, Line: 86 msgid "Measures (Edition Mode Only)" msgstr "Mesures (mode édition uniquement)" # File: opengl/win/m_tools.c, Line: 88 # File: opengl/win/w_search.c, Line: 4206 msgid "Selection" msgstr "Sélection" # File: opengl/win/m_tools.c, Line: 88 msgid "Visible/Hidden" msgstr "Visible/Caché" # File: opengl/win/m_tools.c, Line: 317,502 msgid "Volumes" msgstr "Volumes" # File: opengl/win/m_tools.c, Line: 322,682 msgid "Mouse Mode" msgstr "Mode de la Souris" # File: opengl/win/m_tools.c, Line: 369,683 msgid "Selection Mode" msgstr "Mode de Sélection" # File: opengl/win/m_tools.c, Line: 412,785 # File: calc/cp2k/cp2k_init.c, Line: 119 msgid "Molecular Dynamics" msgstr "Dynamique Moléculaire" # File: opengl/win/m_tools.c, Line: 443,786 msgid "Invert" msgstr "Inverser" # File: opengl/win/popup.c, Line: 438,3025,3186 # File: opengl/win/w_search.c, Line: 2416,2669 msgid "%s in %s" msgstr "%s de %s" # File: opengl/win/popup.c, Line: 504,740,3041,3194 msgid "Copied Data" msgstr "Données Copiées" # File: opengl/win/popup.c, Line: 617 msgid "No atoms to be removed !" msgstr "Aucun atome à supprimer !" # File: opengl/win/popup.c, Line: 621 msgid "%d atom(s) removed !" msgstr "%d atome(s) supprimé(s) !" # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) inserted !" msgstr "%d atome(s) inséré(s) !" # File: opengl/win/popup.c, Line: 3037,3168 # File: opengl/win/w_search.c, Line: 2658 msgid "Import From Project" msgstr "Importer Depuis le Projet" # File: opengl/win/popup.c, Line: 3314 msgid "All Non-Selected Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Non Sélectionnés" # File: opengl/win/popup.c, Line: 3314 msgid "All Selected Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Sélectionnés" # File: opengl/win/popup.c, Line: 3315 msgid "All Non-Labelled Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Non Étiquetés" # File: opengl/win/popup.c, Line: 3315 msgid "All Labelled Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Étiquetés" # File: opengl/win/popup.c, Line: 3372 msgid "This Atom: %s%d" msgstr "Cet atome: %s%d" # File: opengl/win/popup.c, Line: 3407 msgid "This Bond: %s%d - %s%d" msgstr "Cette liaison: %s%d - %s%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Fragment N°:\t%d" msgstr "Fragment N°:\t%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Molecule N°:\t%d" msgstr "Molécule N°:\t%d" # File: opengl/win/popup.c, Line: 3515 msgid "All %s Atoms %d Fold" msgstr "Tous les %s Avec %d Voisins" # File: opengl/win/popup.c, Line: 3526 msgid "All %s Coordinations" msgstr "Toutes les Coordinations %s" # File: opengl/win/popup.c, Line: 3536 msgid "All %s Atoms" msgstr "Tous les %s" # File: opengl/win/popup.c, Line: 3540 msgid "All %s* Clones" msgstr "Tous les Clones %s*" # File: opengl/win/popup.c, Line: 3555 msgid "All %s %d - %s %d Bonds" msgstr "Toutes les Laisons %s %d - %s %d" # File: opengl/win/popup.c, Line: 3569 msgid "All %s - %s Bonds" msgstr "Toutes les Liaisons %s - %s" # File: opengl/win/popup.c, Line: 3577 msgid "All %s - %s Bonds" msgstr "Toutes les Liaisons %s - %s" # File: opengl/win/popup.c, Line: 3587 msgid "All Hidden Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Cachés" # File: opengl/win/popup.c, Line: 3587 msgid "All Visible Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Visibles" # File: opengl/win/popup.c, Line: 3694 msgid "Unselect" msgstr "Désélectionner" # File: opengl/win/popup.c, Line: 3695 # File: opengl/win/w_atoms.c, Line: 363 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Label" msgstr "Label" # File: opengl/win/popup.c, Line: 3696 msgid "Unlabel" msgstr "Enlever le label" # File: opengl/win/popup.c, Line: 3698 msgid "Hide" msgstr "Masquer" # File: opengl/win/popup.c, Line: 3701 msgid "Edit as New Project" msgstr "Éditer en tant que Nouveau Projet" # File: opengl/win/popup.c, Line: 3704 msgid "Copy" msgstr "Copier" # File: opengl/win/popup.c, Line: 3830 msgid "Total Coordination: %d" msgstr "Coordination Totale: %d" # File: opengl/win/popup.c, Line: 3839 msgid "Partial Coordination: %s" msgstr "Coordination Partielle: %s" # File: opengl/win/popup.c, Line: 4023 msgid "Center crystal atom(s)" msgstr "Centrer le(s) atome(s) du cristal" # File: opengl/win/popup.c, Line: 4023 msgid "Are you sure, this can affect the visual representation of the unit cell ?" msgstr "Êtes-vous sûr que cela peut affecter la représentation visuelle de la cellule unitaire ?" # File: opengl/win/popup.c, Line: 4094 msgid "Color palette error: %s - %d - custom= %s" msgstr "Erreur de palette de couleurs: %s - %d - personnalisé= %s" # File: opengl/win/popup.c, Line: 4126 msgid "Color palette error: %s - spec= %d - coord= %d, custom= %s" msgstr "Erreur de palette de couleurs: %s - spec= %d - coord= %d, custom= %s" # File: opengl/win/popup.c, Line: 4143 msgid "Color palette error: %s - %d, custom= %s" msgstr "Erreur de palette de couleurs: %s - %d, personnalisé= %s" # File: calc/dl_poly/dlp_field.c, Line: 187 # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "molecule" msgstr "molécule" # File: opengl/win/popup.c, Line: 4156 msgid "Color palette error: rings - %d - %d, custom= %s" msgstr "Erreur de palette de couleurs: anneaux - %d - %d, personnalisé= %s" # File: opengl/win/popup.c, Line: 4203,4266 msgid "Reset Motion" msgstr "Réinitialiser le(s) Déplacement(s)" # File: opengl/win/popup.c, Line: 4278 msgid "Exit Fullscreen" msgstr "Quitter le Plein Écran" # File: opengl/win/w_advance.c, Line: 1391 msgid "Opaque" msgstr "Opaque" # File: opengl/win/w_advance.c, Line: 1392 msgid "Brushed Metal" msgstr "Métal Brossé" # File: opengl/win/w_advance.c, Line: 1393 msgid "Shiny Metal" msgstr "Métal Brillant" # File: opengl/win/w_advance.c, Line: 1394 msgid "Plastic" msgstr "Plastique" # File: curve/tab-2.c, Line: 1007 # File: opengl/win/w_advance.c, Line: 1395 msgid "Transparent" msgstr "Transparent" # File: opengl/win/w_advance.c, Line: 1396 msgid "Translucent" msgstr "Translucide" # File: opengl/win/w_advance.c, Line: 1397 msgid "Diffuse" msgstr "Diffus" # File: opengl/win/w_advance.c, Line: 117 msgid "Ambient occlusion" msgstr "Occlusion ambiante" # File: opengl/win/w_advance.c, Line: 118 msgid "Gamma correction" msgstr "Correction gamma" # File: opengl/win/w_advance.c, Line: 123 msgid "Constant attenuation" msgstr "Atténuation constante" # File: opengl/win/w_advance.c, Line: 124 msgid "Linear attenuation" msgstr "Atténuation linéaire" # File: opengl/win/w_advance.c, Line: 125 msgid "Quadratic attenuation" msgstr "Atténuation quadratique" # File: opengl/win/w_advance.c, Line: 126 msgid "Cone angle" msgstr "Angle du cône" # File: opengl/win/w_advance.c, Line: 127 msgid "Inner cutoff" msgstr "Coupure intérieure" # File: opengl/win/w_advance.c, Line: 128 msgid "Outer cutoff" msgstr "Coupure extérieure" # File: opengl/win/w_advance.c, Line: 130 msgid "Fog color" msgstr "Couleur du brouillard" # File: opengl/win/w_advance.c, Line: 244 msgid "You must select %d light source(s) to be removed !" msgstr "Vous devez sélectionner %d source(s) lumineuse(s) à supprimer !" # File: opengl/win/w_advance.c, Line: 266 msgid "Please select the %d light sources to be removed: " msgstr "Veuillez sélectionner les %d sources lumineuses à supprimer: " # File: opengl/win/w_advance.c, Line: 270 msgid "Please select the light source to be removed: " msgstr "Veuillez sélectionner la source lumineuse à supprimer: " # File: opengl/win/w_advance.c, Line: 272 msgid "Remove light source(s)" msgstr "Supprimer la ou les sources de lumière" # File: opengl/win/w_advance.c, Line: 280,520 msgid "Light N°%d" msgstr "Lumière N°%d" # File: opengl/win/w_advance.c, Line: 882 msgid "Show light" msgstr "Montrer la lumière" # File: opengl/win/w_advance.c, Line: 905 msgid "Number of light sources\n(add or remove lights - up to 10 sources)" msgstr "Nombre de sources lumineuses\n(ajouter ou supprimer des lumières - jusqu'à 10 sources)" # File: opengl/win/w_advance.c, Line: 914 msgid "Configure light source *" msgstr "Configurer la source lumineuse *" # File: opengl/win/w_advance.c, Line: 919 msgid "Light configuration" msgstr "Configuration de l'éclairage" # File: opengl/win/w_advance.c, Line: 923 msgid "Directional" msgstr "Directionnel" # File: opengl/win/w_advance.c, Line: 924 msgid "Point" msgstr "Point" # File: opengl/win/w_advance.c, Line: 925 msgid "Spot" msgstr "Spot" # File: opengl/win/w_advance.c, Line: 929 msgid "Fixed by respect to: " msgstr "Fixé par rapport au: " # File: opengl/win/w_advance.c, Line: 931 msgid "The viewer" msgstr "Spectateur" # File: opengl/win/w_advance.c, Line: 932 msgid "The model" msgstr "Modèle" # File: opengl/win/w_advance.c, Line: 955 msgid "Advanced parameters" msgstr "Paramètres avancés" # File: opengl/win/w_advance.c, Line: 980 msgid "Note that light N°1 must be a directional light" msgstr "A noter que le feu N°1 doit être un feu directionnel" # File: opengl/win/w_advance.c, Line: 983 msgid "Position and attenuation will be corrected based on model depth" msgstr "La position et l'atténuation seront corrigées en fonction de la profondeur du modèle" # File: opengl/win/w_advance.c, Line: 1303 msgid "3D Objects" msgstr "Objets 3D" # File: opengl/win/w_advance.c, Line: 1384 msgid "Use template" msgstr "Utiliser un modèle" # File: opengl/win/w_advance.c, Line: 1388 msgid "Templates" msgstr "Modèles" # File: opengl/win/w_advance.c, Line: 1417 msgid "Material properties" msgstr "Propriétés des matériaux" # File: opengl/win/w_advance.c, Line: 1633 msgid "Fog mode " msgstr "Mode brouillard " # File: curve/tab-4.c, Line: 718 # File: opengl/win/w_advance.c, Line: 1636 # File: opengl/win/w_colors.c, Line: 489 msgid "Linear" msgstr "Linéaire" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential" msgstr "Exponentiel" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential Squared" msgstr "Exponentiel au Carré" # File: opengl/win/w_advance.c, Line: 1647 msgid "Fog type " msgstr "Type de brouillard " # File: opengl/win/w_advance.c, Line: 1649 msgid "Plane Based" msgstr "Basé sur un Plan" # File: opengl/win/w_advance.c, Line: 1650 msgid "Range Based" msgstr "Basé sur une Échelle" # File: opengl/win/w_advance.c, Line: 1657 msgid "Fog density" msgstr "Densité du brouillard" # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* start: " msgstr "\t début de la profondeur*: " # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* end: " msgstr "\t fin de la profondeur*: " # File: opengl/win/w_advance.c, Line: 1666 msgid "Fog depth" msgstr "Profondeur du brouillard" # File: opengl/win/w_advance.c, Line: 1675 msgid "* % of the OpenGL model depth." msgstr "* % de la profondeur du modèle OpenGL." # File: opengl/win/w_advance.c, Line: 1746 # File: workspace/workspace.c, Line: 392 msgid "OpenGL material aspect and light settings - %s" msgstr "Aspect du matériau OpenGL et paramètres d'éclairage - %s" # File: opengl/win/w_advance.c, Line: 1767 msgid "Material aspect" msgstr "Aspect du matériau" # File: opengl/win/w_advance.c, Line: 1769 msgid "Configure light sources" msgstr "Configurer l'éclairage" # File: opengl/win/w_advance.c, Line: 1771 msgid "Configure fog" msgstr "Configurer le brouillard" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust atom sphere radius" msgstr "Ajuster le rayon de l'atome" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust clone sphere radius" msgstr "Ajuster le rayon du clone" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust atom point size" msgstr "Ajuster la taille de l'atome" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust clone point size" msgstr "Ajuster la taille du clone" # File: opengl/win/w_atoms.c, Line: 361 msgid "Radius [Ã…]" msgstr "Rayon [Ã…]" # File: opengl/win/w_atoms.c, Line: 364 msgid "Size [pts]" msgstr "Taille [pts]" # File: opengl/win/w_atoms.c, Line: 408 msgid "%s atom(s) color" msgstr "Couleur atome(s) %s" # File: opengl/win/w_atoms.c, Line: 412 msgid "%s clone(s) color" msgstr "Couleur clone(s) %s" # File: opengl/win/w_atoms.c, Line: 512 msgid "Display properties" msgstr "Propriétés d'affichage" # File: opengl/win/w_atoms.c, Line: 513 msgid "Label properties" msgstr "Propriétés des labels" # File: opengl/win/w_atoms.c, Line: 521 msgid "Clone(s) selection" msgstr "Sélection de clone(s)" # File: opengl/win/w_atoms.c, Line: 521 msgid "Atom(s) selection" msgstr "Sélection d'atome(s)" # File: opengl/win/w_atoms.c, Line: 536 msgid "Atom(s) configuration - " msgstr "Configuration atome(s) - " # File: opengl/win/w_atoms.c, Line: 536 msgid "Clone(s) configuration - " msgstr "Configuration clones - " # File: opengl/win/w_atoms.c, Line: 599 msgid "atoms" msgstr "atomes" # File: opengl/win/w_atoms.c, Line: 599 msgid "clones" msgstr "clones" # File: opengl/win/w_atoms.c, Line: 599 msgid "Error impossible to display the model window for %s !" msgstr "Erreur impossible d'afficher la fenêtre du modèle pour %s !" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window width" msgstr "% de la largeur de la fenêtre" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window height" msgstr "% de la hauteur de la fenêtre" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window depth" msgstr "% de la profondeur de la fenêtre" # File: opengl/win/w_axis.c, Line: 186 msgid "_Radius [ %f Ã… ]" msgstr "_Rayon [ %f Ã… ]" # File: opengl/win/w_axis.c, Line: 843 msgid "Axis settings" msgstr "Paramètres des axes" # File: opengl/win/w_axis.c, Line: 851 # File: workspace/workspace.c, Line: 417 msgid "%s - axis settings" msgstr "%s - paramètres des axes" # File: opengl/win/w_axis.c, Line: 866 msgid "Show/Hide axis" msgstr "Afficher/Masquer les axes" # File: opengl/win/w_axis.c, Line: 883 msgid "Top Right Corner *" msgstr "Coin Supérieur Droit *" # File: opengl/win/w_axis.c, Line: 884 msgid "Top Left Corner *" msgstr "Coin Supérieur Gauche *" # File: opengl/win/w_axis.c, Line: 885 msgid "Bottom Right Corner *" msgstr "Coin Inférieur Droit *" # File: opengl/win/w_axis.c, Line: 886 msgid "Bottom Left Corner *" msgstr "Coin Inférieur Gauche *" # File: opengl/win/w_axis.c, Line: 887 msgid "Center **" msgstr "Centre **" # File: opengl/win/w_axis.c, Line: 888 msgid "Use template positions" msgstr "Utiliser les positions du modèle" # File: opengl/win/w_axis.c, Line: 904 msgid "Please choose axis position:" msgstr "Veuillez choisir la position des axes:" # File: opengl/win/w_axis.c, Line: 928 msgid "Length [Å] " msgstr "Longueur [Å] " # File: opengl/win/w_axis.c, Line: 933 # File: opengl/win/w_box.c, Line: 398 msgid "Style " msgstr "Style " # File: opengl/win/w_axis.c, Line: 945 # File: opengl/win/w_box.c, Line: 409 msgid "Line width [pts] " msgstr "Largeur de ligne [pts] " # File: opengl/win/w_axis.c, Line: 949 # File: opengl/win/w_box.c, Line: 413 msgid "Cylinder radius [Å] " msgstr "Rayon du cylindre [Å] " # File: opengl/win/w_axis.c, Line: 957 msgid "Label axis" msgstr "Label des axes" # File: opengl/win/w_axis.c, Line: 961 # File: opengl/win/w_labels.c, Line: 698 msgid "Rendering " msgstr "Rendu " # File: opengl/win/w_axis.c, Line: 963 # File: opengl/win/w_labels.c, Line: 700 msgid "Basic Text" msgstr "Texte Simple" # File: opengl/win/w_axis.c, Line: 964 # File: opengl/win/w_labels.c, Line: 701 msgid "Highlighted" msgstr "Mis en Évidence" # File: opengl/win/w_axis.c, Line: 976 # File: opengl/win/w_labels.c, Line: 728 msgid "Scale with zoom in/out" msgstr "Taille fonction du zoom" # File: opengl/win/w_axis.c, Line: 983 msgid "Legends" msgstr "Légendes" # File: opengl/win/w_axis.c, Line: 1001 msgid "Use base colors" msgstr "Utiliser les couleurs de base" # File: opengl/win/w_axis.c, Line: 1032 msgid "In front of the atomic model" msgstr "Devant le modèle atomique" # File: opengl/win/w_axis.c, Line: 1033 msgid "Inside the atomic model" msgstr "À l'intérieur du modèle atomique" # File: opengl/win/w_bonds.c, Line: 79 msgid "Axis length [ %f Ã… ]" msgstr "Longueur des axes [ %f Ã… ]" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust atomic bond radius(ii)" msgstr "Ajuster le rayon de liaison atomique (ii)" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust clone bond radius(ii)" msgstr "Ajuster le rayon de liaison du clone (ii)" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust atomic line width(s)" msgstr "Ajuster la ou les largeurs des lignes atomiques" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust clone line width(s)" msgstr "Ajuster la(les) largeur(s) de ligne de clonage" # File: opengl/win/w_bonds.c, Line: 410 msgid "bond" msgstr "liaison" # File: opengl/win/w_bonds.c, Line: 410 msgid "clone bond" msgstr "liaison clonée" # File: calc/dl_poly/dlp_field.c, Line: 932 # File: opengl/win/w_bonds.c, Line: 411 msgid "Bond" msgstr "Liaison" # File: opengl/win/w_bonds.c, Line: 411 msgid "Clone bond" msgstr "Liaison clonée" # File: opengl/win/w_bonds.c, Line: 417 msgid "Adjust axis length" msgstr "Ajuster la longueur des axes" # File: opengl/win/w_bonds.c, Line: 421 msgid "Adjust %s line width" msgstr "Ajuster la largeur de ligne %s" # File: opengl/win/w_bonds.c, Line: 425,429 msgid "Adjust %s cylinders radius" msgstr "Ajuster le rayon des cylindres %s" # File: opengl/win/w_bonds.c, Line: 442 msgid "Axis length" msgstr "Longueur des axes" # File: opengl/win/w_bonds.c, Line: 445 msgid "%s line width" msgstr "largeur de ligne %s" # File: opengl/win/w_bonds.c, Line: 448,451 msgid "%s cylinders radius" msgstr "Rayon des cylindres %s" # File: opengl/win/w_bonds.c, Line: 478 msgid " [pts]" msgstr " [pts]" # File: opengl/win/w_box.c, Line: 367 msgid "Box settings" msgstr "Paramètres de la boîte" # File: opengl/win/w_box.c, Line: 374 # File: workspace/workspace.c, Line: 413 msgid "%s - box settings" msgstr "%s - paramètres de la boîte" # File: opengl/win/w_box.c, Line: 389 msgid "Show/Hide box" msgstr "Afficher/Masquer la boîte" # File: opengl/win/w_box.c, Line: 419 msgid "Color " msgstr "Couleur " # File: opengl/win/w_chains.c, Line: 825 msgid "Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n" msgstr "Trop de chaînes dans votre modèle !\n" " Il est impossible d'afficher la liste entière ...\n" "... à la place, vous pouvez rechercher des chaînes individuellement:\n" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 540 msgid "Chain(s) size" msgstr "Taille des chaînes" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Pick" msgstr "Sélection" # File: opengl/win/w_chains.c, Line: 828 # File: opengl/win/w_rings.c, Line: 954 msgid "MD step:" msgstr "Pas de DM:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain size:" msgstr "Taille de la chaîne:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain Id.:" msgstr "Id. de la chaîne:" # File: opengl/win/w_chains.c, Line: 860 # File: opengl/win/w_coord.c, Line: 978 # File: opengl/win/w_rings.c, Line: 986 msgid "Search result(s)" msgstr "Résultat(s) de recherche" # File: opengl/win/w_chains.c, Line: 906 msgid "# This file contains the list of all chains in the %s model\n\n" msgstr "# Ce fichier contient la liste de toutes les chaînes du modèle %s\n\n" # File: opengl/win/w_chains.c, Line: 911 # File: opengl/win/w_rings.c, Line: 1045 msgid "Step N°%d\n" msgstr "Étape N°%d\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\n\tChain(s) of size %d atoms\n" msgstr "\n\tChaîne(s) de taille %d atomes\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\nChain(s) of size %d atoms\n" msgstr "\nChaîne(s) de taille %d atomes\n" # File: opengl/win/w_chains.c, Line: 930 # File: opengl/win/w_rings.c, Line: 1064 msgid "Impossible to open file: %s" msgstr "Impossible d'ouvrir le fichier: %s" # File: opengl/win/w_chains.c, Line: 959 msgid "Save atoms in chains to file" msgstr "Enregistrer les atomes dans des chaînes dans un fichier" # File: opengl/win/w_chains.c, Line: 1013 # File: opengl/win/w_rings.c, Line: 1153 msgid "Save to file" msgstr "Enregistrer dans un fichier" # File: opengl/win/w_colors.c, Line: 175,520 msgid "Background color" msgstr "Couleur d'arrière-plan" # File: opengl/win/w_colors.c, Line: 180 msgid "Model box color" msgstr "Couleur de la boîte du modèle" # File: opengl/win/w_colors.c, Line: 187 msgid "%s - atom(s) color" msgstr "Couleur des atomes - %s" # File: opengl/win/w_colors.c, Line: 191 msgid "%s* - clone(s) color" msgstr "Couleur des clones - %s*" # File: opengl/win/w_colors.c, Line: 469 msgid "Background settings" msgstr "Paramètres d'arrière-plan" # File: opengl/win/w_colors.c, Line: 476 # File: workspace/workspace.c, Line: 409 msgid "%s - background settings" msgstr "%s - paramètres d'arrière-plan" # File: opengl/win/w_colors.c, Line: 486 msgid "Gradient type" msgstr "Type de dégradé" # File: opengl/win/w_colors.c, Line: 499 msgid "Gradient direction" msgstr "Direction du dégradé" # File: opengl/win/w_colors.c, Line: 488 msgid "No Gradient" msgstr "Pas de Dégradé" # File: opengl/win/w_colors.c, Line: 490 msgid "Circular" msgstr "Circulaire" # File: opengl/win/w_colors.c, Line: 483 msgid "Top to Bottom" msgstr "De Haut en Bas" # File: opengl/win/w_colors.c, Line: 483 msgid "Right to Left" msgstr "De Droite à Gauche" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Right to Top Left" msgstr "Du Bas à Droite vers le Haut à Gauche" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Right to Bottom Left" msgstr "Du Haut à Droite vers le Bas à Gauche" # File: opengl/win/w_colors.c, Line: 483 msgid "Left to Right" msgstr "De Gauche à Droite" # File: opengl/win/w_colors.c, Line: 483 msgid "Bottom to Top" msgstr "De Bas en Haut" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Left to Top Right" msgstr "Du Bas à Gauche vers le Haut à Droite" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Left to Bottom Right" msgstr "Du Haut à Gauche vers le Bas à Droite" # File: opengl/win/w_colors.c, Line: 527 msgid "Single color" msgstr "Couleur unique" # File: opengl/win/w_colors.c, Line: 538 msgid "First color" msgstr "Première couleur" # File: opengl/win/w_colors.c, Line: 538 msgid "Second color" msgstr "Deuxième couleur" # File: opengl/win/w_colors.c, Line: 687 msgid "%s atom(s) %d fold coordination sphere color" msgstr "%s atome(s) avec %d voisin(s), couleur de la sphère de coordination" # File: opengl/win/w_colors.c, Line: 692 msgid "%s - %s coordination sphere color" msgstr "%s - Couleur de la sphère de coordination %s" # File: opengl/win/w_colors.c, Line: 697 msgid "Fragment N°%d color" msgstr "Fragment N°%d couleur" # File: opengl/win/w_colors.c, Line: 702 msgid "Molecule N°%d color" msgstr "Molécule N°%d couleur" # File: opengl/win/w_colors.c, Line: 707 msgid "%d atom chain(s) color" msgstr "Couleurchaîne(s) de %d atomes" # File: opengl/win/w_colors.c, Line: 711 msgid "%s - %d atom ring(s) color" msgstr "%s - couleur(s) des anneaux de %d atomes" # File: opengl/win/w_coord.c, Line: 962 # File: opengl/win/w_volumes.c, Line: 873 msgid "Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n" msgstr "Trop de %ss dans votre modèle !\n" " Il est impossible d'afficher la liste entière ...\n" "... à la place, vous pouvez rechercher %s(s) individuellement:\n" # File: opengl/win/w_coord.c, Line: 537 msgid "Alpha" msgstr "Alpha" # File: opengl/win/w_coord.c, Line: 538 msgid "Color *" msgstr "Couleur *" # File: opengl/win/w_coord.c, Line: 538 msgid "Show **" msgstr "Afficher **" # File: opengl/win/w_coord.c, Line: 538 msgid "Label **" msgstr "Label **" # File: opengl/win/w_coord.c, Line: 538 msgid "Pick **" msgstr "Sélection **" # File: opengl/win/w_coord.c, Line: 539 # File: opengl/win/w_rings.c, Line: 413 msgid "Ring(s) size" msgstr "Taille de bague(s)" # File: opengl/win/w_coord.c, Line: 540 msgid "Show *" msgstr "Afficher *" # File: opengl/win/w_coord.c, Line: 540 msgid "Label *" msgstr "Label *" # File: opengl/win/w_coord.c, Line: 540 msgid "Pick *" msgstr "Sélection *" # File: opengl/win/w_coord.c, Line: 553 msgid " * for the polyhedra only" msgstr " * pour les polyèdres uniquement" # File: opengl/win/w_coord.c, Line: 554 msgid "** affect all atoms that belong to ring(s) of this size" msgstr "** affecte tous les atomes appartenant à des anneaux de cette taille" # File: opengl/win/w_coord.c, Line: 558 msgid "* affect all atoms that belong to chain(s) of this size" msgstr "* affecte tous les atomes appartenant à des chaînes de cette taille" # File: opengl/win/w_coord.c, Line: 636 msgid "%d atoms" msgstr "%d atomes" # File: opengl/win/w_coord.c, Line: 851 msgid "%s N°%d color" msgstr "Couleur %s N°%d" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Fragment Id.:" msgstr "Id. du fragment:" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Molecule Id.:" msgstr "Id. de la molécule:" # File: opengl/win/w_coord.c, Line: 1148 msgid "Atom(s) and bond(s) color map:" msgstr "Palette de couleurs des atomes et liaisons:" # File: opengl/win/w_coord.c, Line: 1159,1205 msgid "%s coordination(s)" msgstr "Coordination(s) %s" # File: opengl/win/w_coord.c, Line: 1165,1213 msgid "Force field (DL_POLY)" msgstr "Champ de force (DL_POLY)" # File: opengl/win/w_coord.c, Line: 1196 msgid "Polyhedra color map:" msgstr "Palette de couleurs des polyèdres :" # File: opengl/win/w_coord.c, Line: 1217 msgid "Use atom(s) custom map" msgstr "Palette personnalisée (atomes)" # File: opengl/win/w_coord.c, Line: 1235 msgid "\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:" msgstr "\nAfficher les polyèdres sur les bords de la boîte du modèle\n" "en utilisant les CLP même si les clones ne sont pas affichés:" # File: opengl/win/w_coord.c, Line: 1236 msgid "Cloned polyhedra" msgstr "Polyèdres clonés" # File: opengl/win/w_coord.c, Line: 1243 msgid "This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC." msgstr "Ceci est automatique si les clones sont affichés.\n" "Les clones sont des répliques des atomes liés par CLP." # File: opengl/win/w_coord.c, Line: 1300 # File: workspace/workspace.c, Line: 380 msgid "Environments configuration - %s" msgstr "Configuration des environnements - %s" # File: opengl/win/w_coord.c, Line: 1313 msgid "Parameters" msgstr "Paramètres" # File: opengl/win/w_coord.c, Line: 1314 msgid "Total coordination(s) [TC]" msgstr "Coordination(s) totale(s) [TC]" # File: opengl/win/w_coord.c, Line: 1315 msgid "Partial coordination(s) [PC]" msgstr "Coordination(s) partielle(s) [PC]" # File: opengl/win/w_coord.c, Line: 1324 msgid "%s ring(s) [%s]" msgstr "Anneau(x) %s [%s]" # File: opengl/win/w_coord.c, Line: 1324 msgid "All ring(s) (no rule) [%s]" msgstr "Tous les anneau(x) (aucune règle) %s [%s]" # File: opengl/win/w_coord.c, Line: 1334 msgid "Polyhedra from TC" msgstr "Polyèdres de TC" # File: opengl/win/w_coord.c, Line: 1335 msgid "Polyhedra from PC" msgstr "Polyèdres de PC" # File: opengl/win/w_coord.c, Line: 1342 msgid "Polyhedra from %s" msgstr "Polyèdres de %s" # File: opengl/win/w_coord.c, Line: 1364 msgid "Isolated ring(s) from %s" msgstr "Anneau(x) isolé(s) de %s" # File: opengl/win/w_coord.c, Line: 1373 msgid "Isolated chain(s)" msgstr "Chaîne(s) isolée(s)" # File: opengl/win/w_coord.c, Line: 1474 msgid "Error impossible to display the environments window !" msgstr "Erreur impossible d'afficher la fenêtre des environnements !" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: opengl/win/w_crystal.c, Line: 75 msgid "Orthorhombic" msgstr "Orthorhombique" # File: opengl/win/w_crystal.c, Line: 75 msgid " Cubic" msgstr " Cubique" # File: opengl/win/w_crystal.c, Line: 75 msgid "Other" msgstr "Autre" # File: opengl/win/w_crystal.c, Line: 450 # File: opengl/win/w_library.c, Line: 865 msgid "Formula:" msgstr "Formule:" # File: opengl/win/w_crystal.c, Line: 470 msgid "Density:" msgstr "Densité:" # File: opengl/win/w_crystal.c, Line: 475 msgid "Name:" msgstr "Nom:" # File: opengl/win/w_crystal.c, Line: 791 msgid "Database" msgstr "Base de données" # File: opengl/win/w_crystal.c, Line: 795 msgid "Group" msgstr "Groupe" # File: opengl/win/w_crystal.c, Line: 797 msgid "Crystal" msgstr "Cristal" # File: opengl/win/w_cutoffs.c, Line: 210 msgid "Cutoff(s) must be ≥ 0.5 Å" msgstr "Les seuils doivent être ≥ 0,5 Å" # File: opengl/win/w_cutoffs.c, Line: 278 msgid "Adjust cutoff radius(ii) - %s" msgstr "Ajuster le rayon de coupure(ii) - %s" # File: opengl/win/w_encode.c, Line: 455 msgid "%s - movie encoding" msgstr "%s - encodage du film" # File: opengl/win/w_encode.c, Line: 459 msgid "%s - image rendering" msgstr "%s - rendu d'image" # File: opengl/win/w_encode.c, Line: 472 msgid "Frames recorded:" msgstr "Images enregistrées:" # File: opengl/win/w_encode.c, Line: 481 msgid "Frames per seconds:" msgstr "Images par seconde:" # File: opengl/win/w_encode.c, Line: 491 msgid "Extra frames every (frames):" msgstr "Images supplémentaires toutes les (images):" # File: opengl/win/w_encode.c, Line: 496 msgid "Movie resolution (in pixels):" msgstr "Résolution de la vidéo (en pixels):" # File: opengl/win/w_encode.c, Line: 501 msgid "Image resolution (in pixels):" msgstr "Résolution de l'image (en pixels):" # File: opengl/win/w_encode.c, Line: 523 msgid "Video codec:" msgstr "Codec vidéo:" # File: opengl/win/w_encode.c, Line: 530 msgid "Image format:" msgstr "Format des images:" # File: opengl/win/w_encode.c, Line: 550 msgid "Video quality (bitrate in kb/s):" msgstr "Qualité vidéo (débit en kb/s):" # File: opengl/win/w_encode.c, Line: 564 msgid "OpenGL quality [0-1000] (0= recorded quality):" msgstr "Qualité OpenGL [0-1000] (0= qualité enregistrée):" # File: opengl/win/w_encode.c, Line: 568 msgid "OpenGL quality [0-1000] (0= on-screen quality):" msgstr "Qualité OpenGL [0-1000] (0= qualité à l'écran):" # File: opengl/win/w_encode.c, Line: 575 msgid "Progress: " msgstr "Progrès: " # File: opengl/win/w_labels.c, Line: 73 msgid "Element Name" msgstr "Nom de l'Élément" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol" msgstr "Symbole Atomique" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol + Id. Number" msgstr "Symbole Atom. + Num. Id." # File: opengl/win/w_labels.c, Line: 73 msgid "Sym. + Id. Num. Subscript" msgstr "Sym. + Num. Id. en Indice" # File: opengl/win/w_labels.c, Line: 73 msgid "Id. Number" msgstr "Numéro d'Id." # File: opengl/win/w_labels.c, Line: 682 msgid "Templates " msgstr "Modèles " # File: opengl/win/w_labels.c, Line: 695 msgid "Label(s):" msgstr "Label(s):" # File: opengl/win/w_labels.c, Line: 718 msgid "Always Visible" msgstr "Toujours Visible" # File: curve/tab-4.c, Line: 769,800 # File: opengl/win/w_labels.c, Line: 719 msgid "Normal" msgstr "Normale" # File: opengl/win/w_labels.c, Line: 734 msgid "Tilt" msgstr "Inclinaison" # File: opengl/win/w_labels.c, Line: 737 msgid "Adapted" msgstr "Adapté" # File: opengl/win/w_labels.c, Line: 747 msgid "Distance to atom [Å]" msgstr "Distance à l'atome [Å]" # File: opengl/win/w_labels.c, Line: 782 msgid "Use atom colors" msgstr "Utiliser les couleurs des atomes" # File: opengl/win/w_labels.c, Line: 786 msgid "Please select atom label colors:" msgstr "Sélectionnez les couleurs des labels atomiques:" # File: opengl/win/w_labels.c, Line: 807 msgid "Line(s):" msgstr "Ligne(s):" # File: opengl/win/w_library.c, Line: 72 msgid "Unknown" msgstr "Inconnu" # File: opengl/win/w_library.c, Line: 73 msgid "Hydrogen" msgstr "Hydrogène" # File: opengl/win/w_library.c, Line: 74 msgid "Helium" msgstr "Hélium" # File: opengl/win/w_library.c, Line: 75 msgid "Lithium" msgstr "Lithium" # File: opengl/win/w_library.c, Line: 76 msgid "Beryllium" msgstr "Béryllium" # File: opengl/win/w_library.c, Line: 77 msgid "Boron" msgstr "Bore" # File: opengl/win/w_library.c, Line: 78 msgid "Carbon" msgstr "Carbone" # File: opengl/win/w_library.c, Line: 79 msgid "Nitrogen" msgstr "Azote" # File: opengl/win/w_library.c, Line: 80 msgid "Oxygen" msgstr "Oxygène" # File: opengl/win/w_library.c, Line: 81 msgid "Fluorine" msgstr "Fluor" # File: opengl/win/w_library.c, Line: 82 msgid "Neon" msgstr "Néon" # File: opengl/win/w_library.c, Line: 83 msgid "Sodium" msgstr "Sodium" # File: opengl/win/w_library.c, Line: 84 msgid "Magnesium" msgstr "Magnésium" # File: opengl/win/w_library.c, Line: 85 msgid "Aluminium" msgstr "Aluminium" # File: opengl/win/w_library.c, Line: 86 msgid "Silicon" msgstr "Silicium" # File: opengl/win/w_library.c, Line: 87 msgid "Phosphorus" msgstr "Phosphore" # File: opengl/win/w_library.c, Line: 88 msgid "Sulfur" msgstr "Soufre" # File: opengl/win/w_library.c, Line: 89 msgid "Chlorine" msgstr "Chlore" # File: opengl/win/w_library.c, Line: 90 msgid "Argon" msgstr "Argon" # File: opengl/win/w_library.c, Line: 91 msgid "Potassium" msgstr "Potassium" # File: opengl/win/w_library.c, Line: 92 msgid "Calcium" msgstr "Calcium" # File: opengl/win/w_library.c, Line: 93 msgid "Scandium" msgstr "Scandium" # File: opengl/win/w_library.c, Line: 94 msgid "Titanium" msgstr "Titane" # File: opengl/win/w_library.c, Line: 95 msgid "Vanadium" msgstr "Vanadium" # File: opengl/win/w_library.c, Line: 96 msgid "Chromium" msgstr "Chrome" # File: opengl/win/w_library.c, Line: 97 msgid "Manganese" msgstr "Manganèse" # File: opengl/win/w_library.c, Line: 98 msgid "Iron" msgstr "Fer" # File: opengl/win/w_library.c, Line: 99 msgid "Cobalt" msgstr "Cobalt" # File: opengl/win/w_library.c, Line: 100 msgid "Nickel" msgstr "Nickel" # File: opengl/win/w_library.c, Line: 101 msgid "Copper" msgstr "Cuivre" # File: opengl/win/w_library.c, Line: 102 msgid "Zinc" msgstr "Zinc" # File: opengl/win/w_library.c, Line: 103 msgid "Gallium" msgstr "Gallium" # File: opengl/win/w_library.c, Line: 104 msgid "Germanium" msgstr "Germanium" # File: opengl/win/w_library.c, Line: 105 msgid "Arsenic" msgstr "Arsenic" # File: opengl/win/w_library.c, Line: 106 msgid "Selenium" msgstr "Sélénium" # File: opengl/win/w_library.c, Line: 107 msgid "Bromine" msgstr "Brome" # File: opengl/win/w_library.c, Line: 108 msgid "Krypton" msgstr "Krypton" # File: opengl/win/w_library.c, Line: 109 msgid "Rubidium" msgstr "Rubidium" # File: opengl/win/w_library.c, Line: 110 msgid "Strontium" msgstr "Strontium" # File: opengl/win/w_library.c, Line: 111 msgid "Yttrium" msgstr "Yttrium" # File: opengl/win/w_library.c, Line: 112 msgid "Zirconium" msgstr "Zirconium" # File: opengl/win/w_library.c, Line: 113 msgid "Niobium" msgstr "Niobium" # File: opengl/win/w_library.c, Line: 114 msgid "Molybdenum" msgstr "Molybdène" # File: opengl/win/w_library.c, Line: 115 msgid "Technetium" msgstr "Technétium" # File: opengl/win/w_library.c, Line: 116 msgid "Ruthenium" msgstr "Ruthénium" # File: opengl/win/w_library.c, Line: 117 msgid "Rhodium" msgstr "Rhodium" # File: opengl/win/w_library.c, Line: 118 msgid "Palladium" msgstr "Palladium" # File: opengl/win/w_library.c, Line: 119 msgid "Silver" msgstr "Argent" # File: opengl/win/w_library.c, Line: 120 msgid "Cadmium" msgstr "Cadmium" # File: opengl/win/w_library.c, Line: 121 msgid "Indium" msgstr "Indium" # File: opengl/win/w_library.c, Line: 122 msgid "Tin" msgstr "Étain" # File: opengl/win/w_library.c, Line: 123 msgid "Antimony" msgstr "Antimoine" # File: opengl/win/w_library.c, Line: 124 msgid "Tellurium" msgstr "Tellure" # File: opengl/win/w_library.c, Line: 125 msgid "Iodine" msgstr "Iode" # File: opengl/win/w_library.c, Line: 126 msgid "Xenon" msgstr "Xénon" # File: opengl/win/w_library.c, Line: 127 msgid "Caesium" msgstr "Césium" # File: opengl/win/w_library.c, Line: 128 msgid "Barium" msgstr "Baryum" # File: opengl/win/w_library.c, Line: 129 msgid "Lanthanum" msgstr "Lanthane" # File: opengl/win/w_library.c, Line: 130 msgid "Cerium" msgstr "Cérium" # File: opengl/win/w_library.c, Line: 131 msgid "Praseodymium" msgstr "Praséodyme" # File: opengl/win/w_library.c, Line: 132 msgid "Neodymium" msgstr "Néodyme" # File: opengl/win/w_library.c, Line: 133 msgid "Promethium" msgstr "Prométhium" # File: opengl/win/w_library.c, Line: 134 msgid "Samarium" msgstr "Samarium" # File: opengl/win/w_library.c, Line: 135 msgid "Europium" msgstr "Europium" # File: opengl/win/w_library.c, Line: 136 msgid "Gadolinium" msgstr "Gadolinium" # File: opengl/win/w_library.c, Line: 137 msgid "Terbium" msgstr "Terbium" # File: opengl/win/w_library.c, Line: 138 msgid "Dysprosium" msgstr "Dysprosium" # File: opengl/win/w_library.c, Line: 139 msgid "Holmium" msgstr "Holmium" # File: opengl/win/w_library.c, Line: 140 msgid "Erbium" msgstr "Erbium" # File: opengl/win/w_library.c, Line: 141 msgid "Thulium" msgstr "Thulium" # File: opengl/win/w_library.c, Line: 142 msgid "Ytterbium" msgstr "Ytterbium" # File: opengl/win/w_library.c, Line: 143 msgid "Lutetium" msgstr "Lutétium" # File: opengl/win/w_library.c, Line: 144 msgid "Hafnium" msgstr "Hafnium" # File: opengl/win/w_library.c, Line: 145 msgid "Tantalum" msgstr "Tantale" # File: opengl/win/w_library.c, Line: 146 msgid "Tungsten" msgstr "Tungstène" # File: opengl/win/w_library.c, Line: 147 msgid "Rhenium" msgstr "Rhénium" # File: opengl/win/w_library.c, Line: 148 msgid "Osmium" msgstr "Osmium" # File: opengl/win/w_library.c, Line: 149 msgid "Iridium" msgstr "Iridium" # File: opengl/win/w_library.c, Line: 150 msgid "Platinum" msgstr "Platine" # File: opengl/win/w_library.c, Line: 151 msgid "Gold" msgstr "Or" # File: opengl/win/w_library.c, Line: 152 msgid "Mercury" msgstr "Mercure" # File: opengl/win/w_library.c, Line: 153 msgid "Thallium" msgstr "Thallium" # File: opengl/win/w_library.c, Line: 154 msgid "Lead" msgstr "Plomb" # File: opengl/win/w_library.c, Line: 155 msgid "Bismuth" msgstr "Bismuth" # File: opengl/win/w_library.c, Line: 156 msgid "Polonium" msgstr "Polonium" # File: opengl/win/w_library.c, Line: 157 msgid "Astatine" msgstr "Astate" # File: opengl/win/w_library.c, Line: 158 msgid "Radon" msgstr "Radon" # File: opengl/win/w_library.c, Line: 159 msgid "Francium" msgstr "Francium" # File: opengl/win/w_library.c, Line: 160 msgid "Radium" msgstr "Radium" # File: opengl/win/w_library.c, Line: 161 msgid "Actinium" msgstr "Actinium" # File: opengl/win/w_library.c, Line: 162 msgid "Thorium" msgstr "Thorium" # File: opengl/win/w_library.c, Line: 163 msgid "Protactinium" msgstr "Protactinium" # File: opengl/win/w_library.c, Line: 164 msgid "Uranium" msgstr "Uranium" # File: opengl/win/w_library.c, Line: 165 msgid "Neptunium" msgstr "Neptunium" # File: opengl/win/w_library.c, Line: 166 msgid "Plutonium" msgstr "Plutonium" # File: opengl/win/w_library.c, Line: 167 msgid "Americium" msgstr "Américium" # File: opengl/win/w_library.c, Line: 168 msgid "Curium" msgstr "Curium" # File: opengl/win/w_library.c, Line: 169 msgid "Berkelium" msgstr "Berkélium" # File: opengl/win/w_library.c, Line: 170 msgid "Californium" msgstr "Californium" # File: opengl/win/w_library.c, Line: 171 msgid "Einsteinium" msgstr "Einsteinium" # File: opengl/win/w_library.c, Line: 172 msgid "Fermium" msgstr "Fermium" # File: opengl/win/w_library.c, Line: 173 msgid "Mendelevium" msgstr "Mendélévium" # File: opengl/win/w_library.c, Line: 174 msgid "Nobelium" msgstr "Nobelium" # File: opengl/win/w_library.c, Line: 175 msgid "Lawrencium" msgstr "Lawrencium" # File: opengl/win/w_library.c, Line: 176 msgid "Rutherfordium" msgstr "Rutherfordium" # File: opengl/win/w_library.c, Line: 177 msgid "Dubnium" msgstr "Dubnium" # File: opengl/win/w_library.c, Line: 178 msgid "Seaborgium" msgstr "Seaborgium" # File: opengl/win/w_library.c, Line: 179 msgid "Bohrium" msgstr "Bohrium" # File: opengl/win/w_library.c, Line: 180 msgid "Hassium" msgstr "Hassium" # File: opengl/win/w_library.c, Line: 181 msgid "Meitnerium" msgstr "Meitnérium" # File: opengl/win/w_library.c, Line: 182 msgid "Darmstadtium" msgstr "Darmstadtium" # File: opengl/win/w_library.c, Line: 183 msgid "Roentgenium" msgstr "Roentgénium" # File: opengl/win/w_library.c, Line: 184 msgid "Copernicium" msgstr "Copernicium" # File: opengl/win/w_library.c, Line: 185 msgid "Nihonium" msgstr "Nihonium" # File: opengl/win/w_library.c, Line: 186 msgid "Flerovium" msgstr "Flérovium" # File: opengl/win/w_library.c, Line: 187 msgid "Moscovium" msgstr "Moscovium" # File: opengl/win/w_library.c, Line: 188 msgid "Livermorium" msgstr "Livermorium" # File: opengl/win/w_library.c, Line: 189 msgid "Tennessine" msgstr "Tennesse" # File: opengl/win/w_library.c, Line: 190 msgid "Oganesson" msgstr "Oganesson" # File: opengl/win/w_library.c, Line: 191 msgid "Deuterium" msgstr "Deutérium" # File: opengl/win/w_library.c, Line: 203 msgid "Other ..." msgstr "Autre ..." # File: opengl/win/w_library.c, Line: 204,1129 msgid "Library" msgstr "Bibliothèque" # File: opengl/win/w_library.c, Line: 207 msgid "Toluene" msgstr "Toluène" # File: opengl/win/w_library.c, Line: 210 msgid "Ni-Phthalocyanine" msgstr "Ni-phtalocyanine" # File: opengl/win/w_library.c, Line: 211 msgid "More ..." msgstr "Plus ..." # File: opengl/win/w_library.c, Line: 215 msgid "Misc" msgstr "Divers" # File: opengl/win/w_library.c, Line: 216 msgid "Alcohols" msgstr "Alcools" # File: opengl/win/w_library.c, Line: 217 msgid "Aldehydes" msgstr "Aldéhydes" # File: opengl/win/w_library.c, Line: 218 msgid "Alkanes" msgstr "Alcanes" # File: opengl/win/w_library.c, Line: 219 msgid "Alkenes" msgstr "Alcènes" # File: opengl/win/w_library.c, Line: 220 msgid "Alkynes" msgstr "Alcynes" # File: opengl/win/w_library.c, Line: 221 msgid "Amides" msgstr "Amides" # File: opengl/win/w_library.c, Line: 222 msgid "Amines" msgstr "Amines" # File: opengl/win/w_library.c, Line: 223 msgid "Amino acids" msgstr "Acides aminés" # File: opengl/win/w_library.c, Line: 224 msgid "Aromatics" msgstr "Aromatiques" # File: opengl/win/w_library.c, Line: 225 msgid "Carboxylic acids" msgstr "Acides carboxyliques" # File: opengl/win/w_library.c, Line: 226 msgid "Cyclic alkanes" msgstr "Alcanes cycliques" # File: opengl/win/w_library.c, Line: 227 msgid "Cyclic alkenes" msgstr "Alcènes cycliques" # File: opengl/win/w_library.c, Line: 228 msgid "Ethers" msgstr "Éthers" # File: opengl/win/w_library.c, Line: 229 msgid "Fatty acids" msgstr "Acides gras" # File: opengl/win/w_library.c, Line: 230 msgid "Fullerenes" msgstr "Fullerènes" # File: opengl/win/w_library.c, Line: 231 msgid "Heterocyclics" msgstr "Hétérocycliques" # File: opengl/win/w_library.c, Line: 232 msgid "Macrocycles" msgstr "Macrocycles" # File: opengl/win/w_library.c, Line: 233 msgid "Ketones" msgstr "Cétones" # File: opengl/win/w_library.c, Line: 234 msgid "Nitriles" msgstr "Nitriles" # File: opengl/win/w_library.c, Line: 235 msgid "Nucleobases" msgstr "Nucléobases" # File: opengl/win/w_library.c, Line: 236 msgid "Steroids" msgstr "Stéroïdes" # File: opengl/win/w_library.c, Line: 237 msgid "Sugars (Linears)" msgstr "Sucres (Linéaires)" # File: opengl/win/w_library.c, Line: 238 msgid "Sugars (Cyclics)" msgstr "Sucres (Cycliques)" # File: opengl/win/w_library.c, Line: 239 msgid "Sulfoxides" msgstr "Sulfoxydes" # File: opengl/win/w_library.c, Line: 240 msgid "Thiols" msgstr "Thiols" # File: opengl/win/w_library.c, Line: 884 msgid "Molecular mass:" msgstr "Masse moléculaire:" # File: opengl/win/w_library.c, Line: 895 msgid "IUPAC name:" msgstr "Nom IUPAC:" # File: opengl/win/w_library.c, Line: 905 msgid "Other name(s):" msgstr "Autre(s) nom(s):" # File: opengl/win/w_library.c, Line: 1146 msgid "Family" msgstr "Famille" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 1" msgstr "Atome 1" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 2" msgstr "Atome 2" # File: opengl/win/w_measures.c, Line: 491 msgid "Distance [Ã…]" msgstr "Distance [Ã…]" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Using PBC" msgstr "Utilise les CLP" # File: opengl/win/w_measures.c, Line: 492,493 msgid "Atom 3" msgstr "Atome 3" # File: opengl/win/w_measures.c, Line: 493 msgid "Atom 4" msgstr "Atome 4" # File: opengl/win/w_measures.c, Line: 626 msgid "\tAtom(s) in selection* :\t%d" msgstr "\tAtome(s) sélectionné(s)*: %d" # File: opengl/win/w_measures.c, Line: 630 msgid "\tSorry too many [%d] atoms in selection*" msgstr "\tDésolé, il y a trop d'atomes [%d] dans la sélection*" # File: opengl/win/w_measures.c, Line: 675 msgid "%s - measures - style" msgstr "%s - mesures - style" # File: opengl/win/w_measures.c, Line: 740 # File: workspace/workspace.c, Line: 405 msgid "%s - measures" msgstr "%s - mesures" # File: calc/dl_poly/dlp_field.c, Line: 427 # File: opengl/win/w_measures.c, Line: 751 msgid "Distances" msgstr "Distances" # File: calc/dl_poly/dlp_field.c, Line: 566 # File: opengl/win/w_measures.c, Line: 753 msgid "Dihedrals" msgstr "Dièdres" # File: opengl/win/w_measures.c, Line: 755 msgid "You can select up to %d atoms for both inter-atomic distance(s) and angle(s)," msgstr "Vous pouvez sélectionner jusqu'à %d atomes pour les distances et les angles inter-atomiques." # File: opengl/win/w_measures.c, Line: 758 msgid "and up to %d atoms for dihedral angle(s) measurement(s)" msgstr "et jusqu'à %d atomes pour les mesures d'angle(s) dièdre(s)" # File: opengl/win/w_measures.c, Line: 762 msgid "Font and style" msgstr "Police et style" # File: opengl/win/w_periodic.c, Line: 90 msgid "Electronic structure: [%s]" msgstr "Structure électronique: [%s]" # File: opengl/win/w_periodic.c, Line: 93 msgid "Electronic structure:\t [%s]" msgstr "Structure électronique: [%s]" # File: opengl/win/w_periodic.c, Line: 97 msgid "Electronic structure:\t " msgstr "Structure électronique:\t " # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkali metal" msgstr " Métal alcalin" # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkaline earth metal" msgstr " Métal alcalino-terreux" # File: opengl/win/w_periodic.c, Line: 651 msgid " Lanthanide" msgstr " Lanthanide" # File: opengl/win/w_periodic.c, Line: 651 msgid " Actinide" msgstr " Actinide" # File: opengl/win/w_periodic.c, Line: 652 msgid " Transition metal" msgstr " Métal de transition" # File: opengl/win/w_periodic.c, Line: 652 msgid " Post-transition metal" msgstr " Métal de post-transition" # File: opengl/win/w_periodic.c, Line: 652 msgid " Metalloid" msgstr " Métalloïde" # File: opengl/win/w_periodic.c, Line: 652 msgid " Polyatomic non-metal" msgstr " Non-métal polyatomique" # File: opengl/win/w_periodic.c, Line: 653 msgid " Diatomic non-metal" msgstr " Non-métal diatomique" # File: opengl/win/w_periodic.c, Line: 653 msgid " Noble gas" msgstr " Gaz rares" # File: opengl/win/w_periodic.c, Line: 653 msgid " Unknown" msgstr " Inconnu" # File: opengl/win/w_periodic.c, Line: 678 msgid "Element selection from the periodic table" msgstr "Sélection d'éléments du tableau périodique" # File: opengl/win/w_periodic.c, Line: 694 msgid "Periodic table of the elements" msgstr "Tableau périodique des éléments" # File: opengl/win/w_record.c, Line: 158 msgid "%s - record" msgstr "%s - enregistrement" # File: opengl/win/w_record.c, Line: 164 msgid "Record" msgstr "Enregistrer" # File: opengl/win/w_rings.c, Line: 951 msgid "Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n" msgstr "Trop d'annneaux %s dans votre modèle !\n" " Il est impossible d'afficher la liste entière ...\n" "... à la place, vous pouvez rechercher la ou les anneaux individuellement:\n" # File: opengl/win/w_rings.c, Line: 61 msgid "all" msgstr "tous" # File: opengl/win/w_rings.c, Line: 61 msgid "King" msgstr "de King" # File: opengl/win/w_rings.c, Line: 61 msgid "Guttman" msgstr "de Gutman" # File: opengl/win/w_rings.c, Line: 61 msgid "primtive" msgstr "primitif" # File: opengl/win/w_rings.c, Line: 61 msgid "strong" msgstr "fort" # File: opengl/win/w_rings.c, Line: 413 msgid "Poly." msgstr "Poly." # File: opengl/win/w_rings.c, Line: 954 msgid "Ring size:" msgstr "Taille de l'anneau:" # File: opengl/win/w_rings.c, Line: 954 msgid "Ring Id.:" msgstr "Id. de l'anneau:" # File: opengl/win/w_rings.c, Line: 1035 msgid "# This file contains the list of all rings in the %s model\n\n" msgstr "# Ce fichier contient la liste de tous les anneaux du modèle %s\n\n" # File: opengl/win/w_rings.c, Line: 1039 msgid "# This file contains the list of all %s rings in the %s model\n\n" msgstr "# Ce fichier contient la liste de tous les anneaux %s dans le modèle %s\n\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\n\tRing(s) of size %d atoms\n" msgstr "\n\tAnneau(x) de taille %d atomes\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\nRing(s) of size %d atoms\n" msgstr "\nAnneau(x) de taille %d atomes\n" # File: opengl/win/w_rings.c, Line: 1094 msgid "Save atoms in %s rings to file" msgstr "Enregistrer les atomes dans les anneaux %s dans un fichier" # File: opengl/win/w_search.c, Line: 4192 msgid "\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:" msgstr "\tLe nombre d'atomes dans le modèle est trop grand\n" "\t\tpour afficher et parcourir toute la liste !\n" "\tVous devez rechercher un ou plusieurs objets individuellement:" # File: opengl/win/w_search.c, Line: 4196 msgid "The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:" msgstr "Le nombre d'atomes dans le modèle est trop important pour afficher et parcourir la liste complète !\n" "\t\t\t\tVous devez rechercher un ou plusieurs objets individuellement:" # File: opengl/win/w_search.c, Line: 4216 msgid "The search must be performed using species and/or Id.\n" "Use the filters above to define the object(s) of the search" msgstr "La recherche doit être effectuée à l’aide de l’espèce et/ou de l'Id.\n" "Utilisez les filtres ci-dessus pour définir le(s) objet(s) de la recherche" # File: opengl/win/w_search.c, Line: 268,386,417,677,1180,3184 msgid "MSDmax= %f" msgstr "DCMmax= %f" # File: opengl/win/w_search.c, Line: 272,390,424,681,1193,3188,3212 msgid "Set MSDmax for ..." msgstr "Définissez le DCMmax pour ..." # File: opengl/win/w_search.c, Line: 286,413,1184,3203 msgid "For all: MSDmax= %f" msgstr "Pour tous: DCMmax= %f" # File: opengl/win/w_search.c, Line: 290,428,1197,1584,1643,3216 msgid "Set MSDmax for all ..." msgstr "Définir le DCMmax pour tous ..." # File: opengl/win/w_search.c, Line: 651 msgid "%s + neighbor(s)" msgstr "%s + voisin(s)" # File: calc/dl_poly/dlp_ff_match.c, Line: 556,613 # File: opengl/win/w_search.c, Line: 706,1166,2548,2589,2624 msgid "Select ..." msgstr "Sélectionner ..." # File: opengl/win/w_search.c, Line: 999 msgid "All %s(s)" msgstr "Tous les %s(s)" # File: opengl/win/w_search.c, Line: 1040 msgid "Fragments" msgstr "Fragments" # File: opengl/win/w_search.c, Line: 1053,1081,1157,2542,2570 msgid "For all: %s" msgstr "Pour tous: %s" # File: opengl/win/w_search.c, Line: 1059,1087,1170,1580,2548,2583 msgid "Select for all ..." msgstr "Sélectionnez pour tous ..." # File: opengl/win/w_search.c, Line: 2431,2680 msgid "Copied data" msgstr "Données copiées" # File: opengl/win/w_search.c, Line: 2832,3273 msgid "MSDmax must be > 0.0 !" msgstr "DCMmax doit être > 0,0 !" # File: opengl/win/w_search.c, Line: 2903 msgid "total coordination(s)" msgstr "coordination(s) totale(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "partial coordination(s)" msgstr "coordination(s) partielle(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "in fragment" msgstr "du fragment" # File: opengl/win/w_search.c, Line: 2903 msgid "in molecule" msgstr "de la molécule" # File: opengl/win/w_search.c, Line: 2910 msgid "%s %s randomly" msgstr "%s %s au hasard" # File: opengl/win/w_search.c, Line: 2916,3346 msgid "Maximum Mean Square Displacement" msgstr "Déplacement Carré Moyen maximum" # File: opengl/win/w_search.c, Line: 2923 msgid "Site occupancy for %s" msgstr "Occupation du site pour %s" # File: opengl/win/w_search.c, Line: 2927 msgid "Insert %s at" msgstr "Insérez %s à" # File: opengl/win/w_search.c, Line: 2945 msgid "Occupancy= " msgstr "Occupation= " # File: opengl/win/w_search.c, Line: 2976 msgid "MSDmax for %s%d + neighbors = " msgstr "DCMmax pour %s%d + voisins = " # File: opengl/win/w_search.c, Line: 2980 msgid "MSDmax for %s%d = " msgstr "DCMmax pour %s%d = " # File: opengl/win/w_search.c, Line: 2989 msgid "MSDmax for all %s atom(s) = " msgstr "DCMmax pour tous les atomes %s = " # File: opengl/win/w_search.c, Line: 2994 msgid "MSDmax for all isolated atom(s) = " msgstr "DCMmax pour tous les atomes isolés = " # File: opengl/win/w_search.c, Line: 2998 msgid "MSDmax for all %d-fold atom(s) + neighbors = " msgstr "DCMmax pour tous les atomes %d fois coord. + voisins = " # File: opengl/win/w_search.c, Line: 3002 msgid "MSDmax for all %d-fold atom(s) = " msgstr "DCMmax pour tous les atomes %d fois coord. = " # File: opengl/win/w_search.c, Line: 3018 msgid "MSDmax for all %s + neighbors = " msgstr "DCMmax pour tous les %s + voisins = " # File: opengl/win/w_search.c, Line: 3022 msgid "MSDmax for all %s = " msgstr "DCMmax pour tous les %s = " # File: opengl/win/w_search.c, Line: 3028 msgid "MSDmax for fragment N°%d = " msgstr "DCMmax pour le fragment N°%d = " # File: opengl/win/w_search.c, Line: 3032 msgid "MSDmax for the atom(s) in fragment N°%d = " msgstr "DCMmax pour le(s) atome(s) du fragment N°%d = " # File: opengl/win/w_search.c, Line: 3038 msgid "MSDmax for molecule N°%d = " msgstr "DCMmax pour la molécule N°%d = " # File: opengl/win/w_search.c, Line: 3042 msgid "MSDmax for the atom(s) in molecule N°%d = " msgstr "DCMmax pour le(s) atome(s) de la molécule N°%d = " # File: opengl/win/w_search.c, Line: 3084 msgid "isolated" msgstr "isolé" # File: opengl/win/w_search.c, Line: 3140 msgid "%s randomly n fragment(s) in all fragments, n= " msgstr "%s aléatoirement n fragment(s) dans tous les fragments, n= " # File: opengl/win/w_search.c, Line: 3144 msgid "%s randomly n fragment(s) in molecule N°%d, n= " msgstr "%s aléatoirement n fragment(s) dans la molécule N°%d, n= " # File: opengl/win/w_search.c, Line: 3148 msgid "%s randomly n %s coordinations, n= " msgstr "%s aléatoirement n %s coordinations, n= " # File: opengl/win/w_search.c, Line: 3155 msgid "%s randomly n %s %s, n= " msgstr "%s au hasard n %s %s, n= " # File: opengl/win/w_search.c, Line: 3159 msgid "%s randomly n %s %s N°%d, n= " msgstr "%s au hasard n %s %s N°%d, n= " # File: opengl/win/w_search.c, Line: 3167 msgid " with nmax = %d" msgstr " avec nmax = %d" # File: opengl/win/w_search.c, Line: 3354 msgid "MSDmax for all objects = " msgstr "DCMmax pour tous les objets = " # File: opengl/win/w_search.c, Line: 3577 msgid "Object" msgstr "Objet" # File: opengl/win/w_search.c, Line: 3579 msgid "By" msgstr "Par" # File: opengl/win/w_search.c, Line: 3582 msgid "Translate" msgstr "Translater" # File: opengl/win/w_search.c, Line: 3582 msgid "Max. MSD" msgstr "DCM Max." # File: opengl/win/w_search.c, Line: 3932 msgid "Rotate" msgstr "Tourner" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: opengl/win/w_search.c, Line: 3958 msgid "Number" msgstr "Nombre" # File: opengl/win/w_search.c, Line: 4000,4142 msgid "Atom(s): All" msgstr "Atome(s) : Tous" # File: opengl/win/w_search.c, Line: 4001,4144 msgid "Group of Atoms: All" msgstr "Groupe d'Atomes: Tous" # File: opengl/win/w_search.c, Line: 4001,4143 msgid "Group of Atoms" msgstr "Groupe d'Atomes" # File: opengl/win/w_search.c, Line: 4087 msgid "\t Atom species: " msgstr "\t Espèces atomique: " # File: opengl/win/w_search.c, Line: 4093 msgid "\t Atom Id: " msgstr "\t Id. de l'atome: " # File: opengl/win/w_search.c, Line: 4101 msgid "Add" msgstr "Ajouter" # File: opengl/win/w_search.c, Line: 4139 msgid "Search " msgstr "Recherche " # File: opengl/win/w_search.c, Line: 4147 msgid "Total Coordination" msgstr "Coordination Totale" # File: opengl/win/w_search.c, Line: 4147 msgid "Partial Coordination" msgstr "Coordination Partielle" # File: opengl/win/w_search.c, Line: 4164 msgid "For " msgstr "Pour " # File: opengl/win/w_search.c, Line: 4165 msgid "Filter by " msgstr "Filtrer par " # File: opengl/win/w_search.c, Line: 4166 msgid "Species " msgstr "Espèces " # File: opengl/win/w_search.c, Line: 4169 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 930 msgid "Atom Id." msgstr "Id. de l'Atome" # File: opengl/win/w_search.c, Line: 4205 msgid "All objects" msgstr "Tous les objets" # File: opengl/win/w_search.c, Line: 4206 msgid "Selection " msgstr "Sélection " # File: opengl/win/w_sequencer.c, Line: 72 # File: workspace/workspace.c, Line: 401 msgid "%s - player - step %d" msgstr "%s - lecteur - pas %d" # File: opengl/win/w_sequencer.c, Line: 263 msgid "Enter a step number" msgstr "Entrez un numéro de pas" # File: opengl/win/w_sequencer.c, Line: 267 msgid "Step number [%d-%d]: " msgstr "Numéro de pas [%d-%d]: " # File: opengl/win/w_sequencer.c, Line: 469 msgid "First" msgstr "Premier" # File: opengl/win/w_sequencer.c, Line: 472 msgid "Previous" msgstr "Précédent" # File: opengl/win/w_sequencer.c, Line: 475 msgid "Next" msgstr "Suivant" # File: opengl/win/w_sequencer.c, Line: 478 msgid "Last" msgstr "Dernier" # File: opengl/win/w_sequencer.c, Line: 481 msgid "Go to" msgstr "Aller à" # File: opengl/win/w_sequencer.c, Line: 488 msgid "Play" msgstr "Jouer" # File: opengl/win/w_sequencer.c, Line: 494 msgid "Loop" msgstr "Boucle" # File: opengl/win/w_sequencer.c, Line: 497 msgid "Faster" msgstr "Accélérer" # File: opengl/win/w_sequencer.c, Line: 500 msgid "Slower" msgstr "Ralentir" # File: opengl/win/w_spiner.c, Line: 181 # File: workspace/workspace.c, Line: 396 msgid "%s - spin" msgstr "%s - rotation" # File: opengl/win/w_volumes.c, Line: 716 msgid "Mean volume(s) occupied by the atom(s) for each %s:" msgstr "Volume(s) moyen(s) occupé(s) par le(s) atome(s) pour chaque %s:" # File: opengl/win/w_volumes.c, Line: 720 msgid "Volume(s) occupied by the atom(s) for each %s:" msgstr "Volume(s) occupé(s) par le(s) atome(s) pour chaque %s:" # File: opengl/win/w_volumes.c, Line: 742,780,1046,1079 msgid "using %s: " msgstr " %s: " # File: opengl/win/w_volumes.c, Line: 756 msgid "Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Plus petit(s) parallélépipéde(s) rectangle(s) moyen(s) englobant le(s) atome(s) pour chaque %s:" # File: opengl/win/w_volumes.c, Line: 760 msgid "Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Plus petit(s) parallélépipéd(s) rectangle(s) englobant le(s) atome(s) de chaque %s:" # File: opengl/win/w_volumes.c, Line: 785,1093 msgid "Compute" msgstr "Calculer" # File: opengl/win/w_volumes.c, Line: 913 msgid "Select MD step [1-%d]:" msgstr "Sélectionnez le pas de DM [1-%d]:" # File: opengl/win/w_volumes.c, Line: 1036 msgid "Volume(s) occupied by all the atom(s):" msgstr "Volume(s) occupé(s) par tous les atomes:" # File: opengl/win/w_volumes.c, Line: 1061 msgid "average by MD step" msgstr "moyenne par pas de DM" # File: opengl/win/w_volumes.c, Line: 1065 msgid "Smallest rectangle parallepiped volume(s) to englobe all atom(s):" msgstr "Plus petit(s) parallélépipéde(s) rectangle(s) englobant tous les atomes:" # File: opengl/win/w_volumes.c, Line: 1067 msgid "Angular precision: " msgstr "Précision angulaire: " # File: opengl/win/w_volumes.c, Line: 1130 msgid "%s - volumes" msgstr "%s - volumes" # File: opengl/draw/d_measures.c, Line: 96,453 # File: opengl/win/popup.c, Line: 3772 msgid "PBC" msgstr "CLP" # File: opengl/draw/image.c, Line: 166 msgid "An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble" msgstr "Une erreur s'est produite en exportant l'image\nvous pouvez réessayer\ndésolé pour le dérangement" # File: opengl/draw/image.c, Line: 222 # File: opengl/draw/movie.c, Line: 1321 msgid "%s file (*.%s)" msgstr "Fichier %s (*.%s)" # File: opengl/draw/movie.c, Line: 322,340,359 msgid "Error in movie encoding : video frame - error : %s" msgstr "Erreur pendant l'encodage du film : image vidéo - erreur : %s" # File: opengl/draw/movie.c, Line: 347 msgid "Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d" msgstr "Erreur pendant l'encodage du film : image vidéo - avertissement : paquet vide, image ignorée = %d" # File: opengl/draw/movie.c, Line: 407 msgid "Error in movie encoding : impossible to find codec %s" msgstr "Erreur pendant l'encodage du film : impossible de trouver le codec %s" # File: opengl/draw/movie.c, Line: 412 msgid "Error in movie encoding : impossible to allocate encoding context" msgstr "Erreur pendant l'encodage du film : impossible d'attribuer le contexte d'encodage" # File: opengl/draw/movie.c, Line: 469 msgid "Error in movie encoding : impossible to allocate video stream" msgstr "Erreur pendant l'encodage du film : impossible d'attribuer le flux vidéo" # File: opengl/draw/movie.c, Line: 476 msgid "Error in movie encoding : impossible to allocate raw frame buffer" msgstr "Erreur pendant l'encodage du film : impossible d'allouer le frame buffer brut" # File: opengl/draw/movie.c, Line: 1033 msgid "Error in movie encoding : impossible to allocate AV format context" msgstr "Erreur pendant l'encodage du film : impossible d'attribuer le contexte du format AV" # File: opengl/draw/movie.c, Line: 1040 msgid "Error in movie encoding : impossible to guess container format : change file name" msgstr "Erreur pendant l'encodage du film : impossible de deviner le format du conteneur : changer le nom du fichier" # File: opengl/draw/movie.c, Line: 1049 msgid "Error in movie encoding : impossible to create video stream" msgstr "Erreur pendant l'encodage du film : impossible de créer un flux vidéo" # File: opengl/draw/movie.c, Line: 1057 msgid "Error in movie encoding : impossible to open codec, error= %s" msgstr "Erreur pendant l'encodage du film : impossible d'ouvrir le codec, erreur= %s" # File: opengl/draw/movie.c, Line: 1075 msgid "Error in movie encoding : impossible to open video file '%s'" msgstr "Erreur pendant l'encodage du film : impossible d'ouvrir le fichier vidéo '%s'" # File: opengl/draw/movie.c, Line: 1085 msgid "Error in movie encoding : impossible to write the AV format header" msgstr "Erreur pendant l'encodage du film : impossible d'écrire l'en-tête au format AV" # File: opengl/draw/movie.c, Line: 1271 msgid "An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble" msgstr "Une erreur s'est produite lors de l'encodage du film\nvous pouvez réessayer\ndésolé pour le dérangement" # File: opengl/draw/movie.c, Line: 1307 msgid "Render Movie" msgstr "Encoder une Vidéo" # File: opengl/draw/ogl_text.c, Line: 452 msgid "Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s" msgstr "Erreur dans le rendu du texte : il semble impossible de rendre le texte\n - cette chaîne: '%s' \n - en utilisant cette police: %s" # File: workspace/modelinfo.c, Line: 118 msgid "\n\tProject file: " msgstr "\n\tFichier projet: " # File: workspace/modelinfo.c, Line: 124 msgid "\n\tCoordinates file: " msgstr "\n\tFichier de coordonnées: " # File: workspace/modelinfo.c, Line: 126 msgid "\n\tFile type: " msgstr "\n\tType de fichier: " # File: workspace/modelinfo.c, Line: 130 msgid "\n\nModel properties\n\n\n" msgstr "\n\nPropriétés du modèle\n\n\n" # File: workspace/modelinfo.c, Line: 133 msgid "\tNumber of MD steps = " msgstr "\tNombre de pas de DM = " # File: workspace/modelinfo.c, Line: 138 msgid "\tNumber of atoms = " msgstr "\tNombre d'atomes = " # File: workspace/modelinfo.c, Line: 142 msgid "\tNumber of species = " msgstr "\tNombre d'espèces = " # File: workspace/modelinfo.c, Line: 152 msgid "\tAv. lattice parameters:\n\n" msgstr "\tParamètres de maille moy.:\n\n" # File: workspace/modelinfo.c, Line: 156 msgid "\tLattice parameters:\n\n" msgstr "\tParamètres de maille:\n\n" # File: workspace/modelinfo.c, Line: 185 msgid "\tAv. lattice vectors:\n\n\t\t" msgstr "\tVecteurs de maille moy.:\n\n\t\t" # File: workspace/modelinfo.c, Line: 189 msgid "\tLattice vectors:\n\n\t\t" msgstr "\tVecteurs de maille:\n\n\t\t" # File: workspace/modelinfo.c, Line: 224 msgid "\tCrystal information:\n\n" msgstr "\tInformations sur le cristal:\n\n" # File: workspace/modelinfo.c, Line: 226 msgid "\t\tSpace group N°: " msgstr "\t\tGroupe d'espace N°: " # File: workspace/modelinfo.c, Line: 230 msgid "\t\tSpace group: " msgstr "\t\tGroupe d'espace: " # File: workspace/modelinfo.c, Line: 233 msgid "\t\tSpace group setting: " msgstr "\t\tParamètre du groupe: " # File: workspace/modelinfo.c, Line: 239 msgid "\t\tBravais lattice: " msgstr "\t\tRéseau de Bravais: " # File: workspace/modelinfo.c, Line: 247 msgid "\tAv. volume = " msgstr "\tVolume moy. = " # File: workspace/modelinfo.c, Line: 251 msgid "\tVolume = " msgstr "\tVolume = " # File: workspace/modelinfo.c, Line: 260 msgid "\n\tAv. density = " msgstr "\n\tDensité moy. = " # File: workspace/modelinfo.c, Line: 264 msgid "\n\tDensity = " msgstr "\n\tDensité = " # File: workspace/modelinfo.c, Line: 273 msgid "\n\tAv. number density = " msgstr "\n\tDensité num. moy. =" # File: workspace/modelinfo.c, Line: 277 msgid "\n\tNumber density = " msgstr "\n\tDensité numérique = " # File: workspace/modelinfo.c, Line: 282 msgid " atoms / Ã…" msgstr " atomes / Ã…" # File: workspace/modelinfo.c, Line: 285 msgid "\n\n\tEmpirical formula:\t" msgstr "\n\n\tFormule empirique:\t" # File: workspace/modelinfo.c, Line: 299 msgid "\n\n\tAtom\t Number Fraction\tNumber density (atoms / Ã…" msgstr "\n\n\tAtome\t Nombre Fraction\t Denisté num. (atomes / Ã…" # File: workspace/modelinfo.c, Line: 305 msgid "\n\n\tAtom\t Number Fraction" msgstr "\n\n\tAtome\t Nombre Fraction" # File: workspace/workinfo.c, Line: 69 msgid "\n\nWorkspace information\n\n\n" msgstr "\n\nInformations sur l'espace de travail\n\n\n" # File: workspace/workinfo.c, Line: 73 msgid "\tWorkspace file: " msgstr "\tFichier d'espace de travail: " # File: workspace/workinfo.c, Line: 79 msgid " project(s) in workspace: " msgstr " projet(s) dans l'espace de travail: " # File: workspace/workinfo.c, Line: 87 msgid "\n\n\tActive project: " msgstr "\n\n\tProjet actif: " # File: workspace/workspace.c, Line: 89 msgid "Workspace " msgstr "Espace de Travail " # File: workspace/workspace.c, Line: 90 msgid "Settings " msgstr "Paramètres " # File: workspace/workspace.c, Line: 91 msgid "OpenGL - 3D " msgstr "OpenGL - 3D " # File: workspace/workspace.c, Line: 92 msgid "Visualization " msgstr "Visualisation " # File: workspace/workspace.c, Line: 93 msgid "Calc. visualization " msgstr "Calc. visualisation " # File: workspace/workspace.c, Line: 94 msgid "Analysis " msgstr "Analyse " # File: workspace/workspace.c, Line: 349 msgid "Please enter a new name for project N°%d" msgstr "Veuillez saisir un nouveau nom pour le projet N°%d" # File: workspace/workspace.c, Line: 351 msgid "Project name" msgstr "Nom du projet" # File: workspace/workspace.c, Line: 370 msgid "Atom(s) configuration" msgstr "Configuration des atomes" # File: workspace/workspace.c, Line: 370 msgid "Clone(s) configuration" msgstr "Configuration des clones" # File: calc/calc.c, Line: 322 msgid " %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n" msgstr " %s contient %d différents ensembles de coordonnées atomiques. \n" " Veuillez sélectionner celui à utiliser pour créer le(s) fichier(s) d'entrée \n" " Notez qu'un nouveau projet sera généré à cet effet. \n" # File: calc/calc.c, Line: 108 msgid "Please confirm" msgstr "Veuillez confirmer" # File: calc/calc.c, Line: 331 msgid "Enter the selected MD step: " msgstr "Entrez le pas de DM sélectionné: " # File: calc/cp2k/cp2k_init.c, Line: 948 msgid "\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)" msgstr "\t - BASIS_MOLOPT (CP2K v9.1, sortie: 2021-12-31)\n" "\t - GTH_BASIS_SETS (CP2K v9.1, sortie: 2021-12-31)\n" "\t - BASIS_SET (CP2K v9.1, sortie: 2021-12-31)\n" "\t - POTENTIEL (CP2K v9.1, sortie: 2021-12-31)" # File: calc/cp2k/cp2k_init.c, Line: 950 msgid " Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters." msgstr " Suite à votre sélection, les fichiers contenant les paramètres de votre calcul seront générés automatiquement.\n" " Alternativement, il est possible de définir et d'utiliser votre propre ensemble de paramètres." # File: calc/cp2k/cp2k_init.c, Line: 1104 msgid "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: " msgstr "Le système de saisie CP2K propose de regrouper les informations dans un seul fichier, assez long.\n" "ou séparés en plusieurs fichiers chacun dédié à une section particulière de l'entrée: " # File: calc/cp2k/cp2k_init.c, Line: 97 # File: calc/cpmd/cpmd_restart.c, Line: 155,174,195 msgid "steps" msgstr "pas" # File: calc/cp2k/cp2k_init.c, Line: 117 msgid "Single Point Energy Calculation" msgstr "Calcul d'Énergie Point Unique" # File: calc/cp2k/cp2k_init.c, Line: 118 msgid "Single Point Energy and Forces Calculation" msgstr "Calcul d'Énergie et des Forces Point Unique" # File: calc/cp2k/cp2k_init.c, Line: 119 # File: calc/cpmd/cpmd_init.c, Line: 193 msgid "Geometry Optimization" msgstr "Optimisation de la Géométrie" # File: calc/cp2k/cp2k_init.c, Line: 120 # File: calc/cpmd/cpmd_init.c, Line: 197 msgid "Vibrational Analysis" msgstr "Analyse Vibratoire" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Linear Response Calculation" msgstr "Calcul de Réponse Linéaire" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Ehrenfest Dynamics" msgstr "Dynamique d'Ehrenfest" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Low" msgstr "Faible" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Medium" msgstr "Moyen" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "High" msgstr "Haut" # File: calc/cp2k/cp2k_init.c, Line: 122 msgid "Gaussian and Plane Waves Method" msgstr "Méthode Gaussiennes et Ondes Planes" # File: calc/cp2k/cp2k_init.c, Line: 123 msgid "Gaussian and Augmented Plane Waves Method" msgstr "Méthode Gaussiennes et Ondes Planes Augmentées" # File: calc/cp2k/cp2k_init.c, Line: 124 msgid "Gaussian and Augmented Plane Waves Method Only for XC" msgstr "Méthode Gaussiennes et Ondes Planes Augmentées Uniquement pour XC" # File: calc/cp2k/cp2k_init.c, Line: 125 msgid "Generate an Atomic Density Using the Atomic Code" msgstr "Générer une Densité Atomique à l'Aide du Code Atomique" # File: calc/cp2k/cp2k_init.c, Line: 126 msgid "Diagonalize the Core Hamiltonian" msgstr "Diagonaliser le Noyau Hamiltonien" # File: calc/cp2k/cp2k_init.c, Line: 127 msgid "Use Random Wave-function Coefficients" msgstr "Utiliser des Coefficients de Fonction d'Onde Aléatoires" # File: calc/cp2k/cp2k_init.c, Line: 128 msgid "Use the RESTART File" msgstr "Utiliser le Fichier RESTART" # File: calc/cp2k/cp2k_init.c, Line: 129 msgid "Broyden Mixing Approximating the Inverse Hessian" msgstr "Mélange de Broyden Approximant le Hessien inversé" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Conjugate Gradients" msgstr "Gradients Conjugués" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Direct Inversion in the Iterative Subspace" msgstr "Inversion Directe dans le Sous-espace Itératif" # File: calc/cp2k/cp2k_init.c, Line: 131 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke Three-parameters Hybrid + LYP" msgstr "Becke Hybride à Trois Paramètres + LYP" # File: calc/cp2k/cp2k_init.c, Line: 131 msgid "Bayesian Error Estimation + van der Walls" msgstr "Estimation de l'Erreur Bayésienne + van der Walls" # File: calc/cp2k/cp2k_init.c, Line: 132 # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Local Density Approximation" msgstr "Approximation de la Densité Locale" # File: calc/cp2k/cp2k_init.c, Line: 133 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Parameter-free PBE" msgstr "PBE sans Paramètres" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "3 Dimensional (XYZ)" msgstr "3 Dimensions (XYZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XY)" msgstr "2 Dimensions (XY)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XZ)" msgstr "2 Dimensions (XZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (YZ)" msgstr "2 Dimensions (YZ)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (X)" msgstr "1 Dimension (X)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Y)" msgstr "1 Dimension (Y)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Z)" msgstr "1 Dimension (Z)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "Isolated System" msgstr "Système Isolé" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Lattice Vectors" msgstr "Vecteurs de Maille" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Box Parameters (a,b,c and α,β,γ)" msgstr "Paramètres de la Boîte (a,b,c et α,β,γ)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Cubic (a = b = c, α = β = γ = 90°)" msgstr "Cubique (a = b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)" msgstr "Hexagonale (a = b ≠ c, α = β = 90°, γ = 60°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)" msgstr "Orthorhombique (a ≠ b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Rhombohedral (a = b = c, α = β = γ ≠ 90°)" msgstr "Rhomboédrique (a = b = c, α = β = γ ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = b ≠ c, α = β = γ = 90°)" msgstr "Tétragonal (a = b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = c ≠ b, α = β = γ = 90°)" msgstr "Tétragonal (a = c ≠ b, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a ≠ b = c, α = β = γ = 90°)" msgstr "Tétragonal (a ≠ b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" msgstr "Monoclinique (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" msgstr "Triclinique (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "No Cell Symmetry" msgstr "Pas de Symétrie" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant kinetic energy" msgstr "Énergie cinétique constante" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Langevin dynamics (constant temperature)" msgstr "Dynamique de Langevin (température constante)" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant pressure ensemble (no thermostat)" msgstr "Ensemble à pression constante (pas de thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant pressure ensemble using an isotropic cell (no thermostat)" msgstr "Ensemble à pression constante utilisant une cellule isotrope (pas de thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant temperature and pressure using a flexible cell" msgstr "Température et pression constantes grâce à une cellule flexible" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and pressure using an isotropic cell" msgstr "Température et pression constantes grâce à une cellule isotrope" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant energy (µ-canonical)" msgstr "Énergie constante (µ-canonique)" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and volume (canonical)" msgstr "Température et volume constants (canonique)" # File: calc/cp2k/cp2k_init.c, Line: 144 msgid "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)" msgstr "Dynamique adiabatique en ensemble température et volume constants (CAFES)" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Diagonalization of a full Hessian matrix" msgstr "Diagonalisation d'une matrice hessienne complète" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Conjugate gradients" msgstr "Gradients conjugués" # File: calc/cp2k/cp2k_init.c, Line: 147 msgid "Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional" msgstr "Fonctionnelle de la densité de van der Waals non-locale de Dion-Rydberg-Schroeder-Langreth-Lundqvist" # File: calc/cp2k/cp2k_init.c, Line: 148 msgid "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional" msgstr "Fonctionnelle de la densité de van der Waals non-locale de Lee-Murray-Kong-Lundqvist-Langreth" # File: calc/cp2k/cp2k_init.c, Line: 149 msgid "Revised Vydrov-van Voorhis non-local van der Waals density functional" msgstr "Fonctionnelle de la densité de van der Waals non-locale de Vydrov-van Voorhis révisée" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D2 method" msgstr "Méthode Grimme D2" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (zero damping)" msgstr "Méthode Grimme D3 (amortissement nul)" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (Becke-Johnson damping)" msgstr "Méthode Grimme D3 (amortissement Becke-Johnson)" # File: calc/cp2k/cp2k_init.c, Line: 153 msgid "Run type:" msgstr "Type de calcul:" # File: calc/cp2k/cp2k_init.c, Line: 154 msgid "Max CPU time:" msgstr "Temps CPU maximum:" # File: calc/cp2k/cp2k_init.c, Line: 155 msgid "Print level:" msgstr "Niveau d'impression:" # File: calc/cp2k/cp2k_init.c, Line: 156 msgid "Use restart information:" msgstr "Utiliser les informations de redémarrage:" # File: calc/cp2k/cp2k_init.c, Line: 157 msgid "File that contains the restart information:" msgstr "Fichier contenant les informations de redémarrage:" # File: calc/cp2k/cp2k_init.c, Line: 158 msgid "File that contains the basis set(s):" msgstr "Fichier contenant le ou les jeu(x) de bases:" # File: calc/cp2k/cp2k_init.c, Line: 159 msgid "File that contains the pseudo-potential(s):" msgstr "Fichier contenant le(s) pseudo-potentiel(s):" # File: calc/cp2k/cp2k_init.c, Line: 160 msgid "File that contains the wave-function:" msgstr "Fichier contenant la fonction d'onde:" # File: calc/cp2k/cp2k_init.c, Line: 161 # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Charge:" msgstr "Charge:" # File: calc/cp2k/cp2k_init.c, Line: 162 msgid "Density cutoff for the finest grid level:" msgstr "Seuil de densité pour le niveau de grille le plus fin:" # File: calc/cp2k/cp2k_init.c, Line: 163 msgid "Number of multi-grids:" msgstr "Nombre de multi-grilles:" # File: calc/cp2k/cp2k_init.c, Line: 164 msgid "Quickstep method:" msgstr "Méthode Quickstep:" # File: calc/cp2k/cp2k_init.c, Line: 165 msgid "Initial guess for the wave-function:" msgstr "Supposition initiale pour la fonction d'onde:" # File: calc/cp2k/cp2k_init.c, Line: 166 msgid "Maximum inner-SCF cycle(s):" msgstr "Cycle(s) maximal(s) de SCF interne:" # File: calc/cp2k/cp2k_init.c, Line: 167,169 msgid "Convergence threshold:" msgstr "Seuil de convergence:" # File: calc/cp2k/cp2k_init.c, Line: 168 msgid "Maximum outer-SCF cycle(s):" msgstr "Cycle(s) maximum de SCF externe:" # File: calc/cp2k/cp2k_init.c, Line: 170 msgid "Orbital transformation minimizer:" msgstr "Minimiseur de transformation orbitale:" # File: calc/cp2k/cp2k_init.c, Line: 171 # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "DFT functional:" msgstr "Fonctionnelle DFT:" # File: calc/cp2k/cp2k_init.c, Line: 172 msgid "Spin unrestricted calculation" msgstr "Calcul sans restriction de spin" # File: calc/cp2k/cp2k_init.c, Line: 174 msgid "Use van der Waals interactions" msgstr "Utiliser les interactions de van der Waals" # File: calc/cp2k/cp2k_init.c, Line: 175 msgid "Restricted Open Kohn-Sham 'ROKS'" msgstr "Kohn-Sham Ouvert Restreint 'ROKS'" # File: calc/cp2k/cp2k_init.c, Line: 176 # File: calc/cpmd/cpmd_restart.c, Line: 200 msgid "Forces" msgstr "Forces" # File: calc/cp2k/cp2k_init.c, Line: 177 msgid "Stress tensor" msgstr "Tenseur de force" # File: calc/cp2k/cp2k_init.c, Line: 178 msgid "Mulliken population" msgstr "Population de Mulliken" # File: calc/cp2k/cp2k_init.c, Line: 179 msgid "Löwdin population" msgstr "Population de Löwdin" # File: calc/cp2k/cp2k_init.c, Line: 180 msgid "Orbitals" msgstr "Orbitales" # File: calc/cp2k/cp2k_init.c, Line: 181 msgid "Periodicity:" msgstr "Périodicité:" # File: calc/cp2k/cp2k_init.c, Line: 183 # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Symmetry:" msgstr "Symétrie:" # File: calc/cp2k/cp2k_init.c, Line: 184 # File: calc/dl_poly/dlp_control.c, Line: 531 msgid "Ensemble:" msgstr "Ensemble:" # File: calc/cp2k/cp2k_init.c, Line: 185 msgid "Maximum number of MD steps:" msgstr "Nombre maximum de pas de DM:" # File: calc/cp2k/cp2k_init.c, Line: 186 msgid "MD time step:" msgstr "Pas de temps DM:" # File: calc/cp2k/cp2k_init.c, Line: 187 # File: calc/cpmd/cpmd_nose.c, Line: 625 msgid "Initial temperature:" msgstr "Température initiale:" # File: calc/cp2k/cp2k_init.c, Line: 188 msgid "Geometry optimizer:" msgstr "Optimiseur de géométrie:" # File: calc/cp2k/cp2k_init.c, Line: 189 msgid "Maximum number of optimization steps:" msgstr "Nombre maximum de pas d'optimisation:" # File: calc/cp2k/cp2k_init.c, Line: 190 msgid "Atomic forces convergence criterion:" msgstr "Critère de convergence des forces atomiques:" # File: calc/cp2k/cp2k_init.c, Line: 191 msgid "Save information every:" msgstr "Enregistrez les informations tous les:" # File: calc/cp2k/cp2k_init.c, Line: 192 msgid "Add constraint(s)" msgstr "Ajouter une(des) contrainte(s)" # File: calc/cp2k/cp2k_init.c, Line: 194,1156 msgid "The CP2K input structure" msgstr "Structure d'entrée de CP2K" # File: calc/cp2k/cp2k_init.c, Line: 195 # File: calc/cpmd/cpmd_init.c, Line: 114 msgid "provides the general control parameters for the calculation to be performed" msgstr "fournit les paramètres généraux controlant le calcul à effectuer" # File: calc/cp2k/cp2k_init.c, Line: 196 msgid "describes how the interatomic forces will be evaluated" msgstr "décrit comment les forces interatomiques seront évaluées" # File: calc/cp2k/cp2k_init.c, Line: 197 msgid "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates" msgstr "décrit le modèle: symétrie, périodicité et espèces atomiques, pseudo-potentiels et coordonnées" # File: calc/cp2k/cp2k_init.c, Line: 198 msgid "describes the displacement of the atoms for molecular dynamics and geometry optimization" msgstr "décrit le déplacement des atomes pour la dynamique moléculaire et l'optimisation de géométrie" # File: calc/cp2k/cp2k_init.c, Line: 199 msgid "To describe the thermostat(s) for molecular dynamics" msgstr "Pour décrire le(s) thermostat(s) pour la dynamique moléculaire" # File: calc/cp2k/cp2k_init.c, Line: 200 msgid "To describe the parameters required for restart" msgstr "Pour décrire les paramètres requis pour le redémarrage" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Type of potential:" msgstr "Type de potentiel:" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Cutoff:" msgstr "Rayon de coupure:" # File: calc/cp2k/cp2k_init.c, Line: 386 msgid "Apply long range corrections" msgstr "Appliquer les corrections à longue portée" # File: calc/cp2k/cp2k_init.c, Line: 483 msgid "Non-local potential" msgstr "Potentiel non-local" # File: calc/cp2k/cp2k_init.c, Line: 484 msgid "Pair potential" msgstr "Potentiel de paire" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Energy scaling:" msgstr "Mise à l'échelle énergétique:" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Spin configuration *:" msgstr "Configuration du spin *:" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of HOMO levels (-1 for all):" msgstr "Nombre de niveaux HOMO (-1 pour tous):" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of LUMO levels (-1 for all):" msgstr "Nombre de niveaux LUMO (-1 pour tous):" # File: calc/cp2k/cp2k_init.c, Line: 473 msgid "%s - options" msgstr "%s - options" # File: calc/cp2k/cp2k_init.c, Line: 487 msgid "Type of functional for the van der Waals interactions" msgstr "Type de fonctionnelle pour les interactions de van der Waals" # File: calc/cp2k/cp2k_init.c, Line: 516 msgid "* for the singly occupied orbitals" msgstr "* pour les orbitales occupées une seule fois" # File: calc/cp2k/cp2k_init.c, Line: 528 msgid "Write cube files, if not then only print eigenvalues" msgstr "Écrire les fichiers cube, sinon imprimer uniquement les valeurs propres" # File: calc/cp2k/cp2k_init.c, Line: 674 msgid "- Select and use set of parameters from the database: " msgstr "- Sélectionnez et utilisez un ensemble de paramètres de la base de données: " # File: calc/cp2k/cp2k_init.c, Line: 675 msgid "- Define and use other set of parameters: " msgstr "- Définir et utiliser d'autres ensembles de paramètres: " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable basis set for " msgstr "\t\tJeu de bases disponible définie pour " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable pseudo-potential for " msgstr "\t\tPseudo-potentiel disponible pour " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tBasis set for " msgstr "\t\tJeu de base pour " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tPseudo-potential for " msgstr "\t\tPseudo-potentiel pour " # File: calc/cp2k/cp2k_init.c, Line: 844 msgid "Print:" msgstr "Imprimer:" # File: calc/cp2k/cp2k_init.c, Line: 941 msgid " %s provides official CP2K atomic basis sets and pseudo-potentials, are included:" msgstr " %s fournit les jeux de bases atomiques et les pseudo-potentiels officiels CP2K, sont inclus:" # File: calc/cp2k/cp2k_init.c, Line: 952 msgid "\t\t\t\tChemical species" msgstr "\t\t\t\tEspèces chimiques" # File: calc/cp2k/cp2k_init.c, Line: 979 # File: calc/cpmd/cpmd_init.c, Line: 936 msgid "Details of the %s section that %s" msgstr "Détails de la section %s qui %s" # File: calc/cp2k/cp2k_init.c, Line: 1033 msgid "CP2K main input file '*.inp'" msgstr "Fichier d'entrée principal de CP2K '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1046 msgid "CP2K input file '*.inp'" msgstr "Fichier d'entrée CP2K '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1055 msgid "! Information" msgstr "! Information" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Single input file" msgstr "Fichier d'entrée unique" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Multiple files" msgstr "Fichiers multiples" # File: calc/cp2k/cp2k_init.c, Line: 1160 # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section" msgstr "La section %s" # File: calc/cp2k/cp2k_init.c, Line: 1164 msgid "The MOTION section - thermostat(s)" msgstr "La section MOUVEMENT - thermostat(s)" # File: calc/cp2k/cp2k_init.c, Line: 1168 msgid "The MOTION section - restart(s)" msgstr "La section MOTION - redémarrage(s)" # File: calc/cp2k/cp2k_init.c, Line: 1228 msgid " Finalize the creation of the CP2K input files now !" msgstr " Finalisez dès maintenant la création des fichiers d'entrée de CP2K !" # File: calc/cp2k/cp2k_init.c, Line: 1231 # File: calc/cpmd/cpmd_init.c, Line: 1697 # File: calc/dl_poly/dlp_field.c, Line: 4447 msgid "\n \tNote: You can re-open this assistant later if required to adjust your choices\n" msgstr "\n \tRemarque: Au besoin vous pourrez rouvrir cet assistant plus tard pour ajuster vos choix.\n" # File: calc/cp2k/cp2k_init.c, Line: 1233 msgid "Create the input files now !" msgstr "Créez les fichiers d'entrée maintenant !" # File: calc/cp2k/cp2k_mol.c, Line: 147 msgid "Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !" msgstr "Le fragment %d a été sélectionné mais aucune coordonnée ne semble figée !\n" "Désélectionnez le fragment %d ou sélectionnez les coordonnées à figer !" # File: calc/cp2k/cp2k_mol.c, Line: 180 # File: calc/dl_poly/dlp_mol.c, Line: 330 msgid "Fragments N°%d" msgstr "Fragments N°%d" # File: calc/cp2k/cp2k_mol.c, Line: 188 # File: calc/dl_poly/dlp_mol.c, Line: 338 msgid "%s and %d have been selected !" msgstr "%s et %d ont été sélectionnés !" # File: calc/cp2k/cp2k_mol.c, Line: 189 msgid "%s\nConfirm this choice and fix these fragments ?" msgstr "%s\nConfirmer ce choix et corriger ces fragments ?" # File: calc/cp2k/cp2k_mol.c, Line: 193 # File: calc/dl_poly/dlp_mol.c, Line: 343 msgid "Fragment N°%d has been selected !" msgstr "Le fragment N°%d a été sélectionné !" # File: calc/cp2k/cp2k_mol.c, Line: 194 msgid "%s\nConfirm this choice and fix this fragment ?" msgstr "%s\nConfirmer ce choix et corriger ce fragment ?" # File: calc/cp2k/cp2k_mol.c, Line: 248 msgid "Please select the fragment(s) to fix" msgstr "Veuillez sélectionner le(s) fragment(s) à corriger" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 msgid "Viz.3D & Select" msgstr "Vis. 3D et sélection" # File: calc/cp2k/cp2k_print.c, Line: 130 msgid "!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME " msgstr "!\n" "! Toujours une section FORCE_EVAL qui décrit\n" "! la méthode pour calculer l'énergie et les forces\n" "!\n" "&FORCE_EVAL\n" " MÉTHODE QUICKSTEP\n" " &TFD\n" "! Précisez d'abord les fichiers qui seront utilisés par la suite \n" " BASIS_SET_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 138 msgid "\n" "! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF " msgstr "\n" "! Accéder à la section Multi-grilles\n" " &MGRID\n" " COUPE " # File: calc/cp2k/cp2k_print.c, Line: 142 msgid " ! => Cutoff of the finest grid level\n" " NGRIDS " msgstr " ! => Rayon de coupure du niveau de grille le plus fin\n" " NGRIDS " # File: calc/cp2k/cp2k_print.c, Line: 145 msgid " ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD " msgstr " ! => Nombre de multigrilles à utiliser, par défaut = 4\n" " &FIN MGRID\n" "! Accéder à la section Configuration de Quickstep\n" " &QS\n" " MÉTHODE " # File: calc/cp2k/cp2k_print.c, Line: 152 msgid "\n" " EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n" msgstr "\n" " EPS_DEFAULT 1.0E-12  ! => La valeur par défaut est 1.0E-10\n" " MAP_CONSISTENT VRAI  ! => C'est la valeur par défaut\n" # File: calc/cp2k/cp2k_print.c, Line: 153 msgid " EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n" msgstr " EXTRAPOLATION_ORDER 3  ! => C'est la valeur par défaut\n" " &FIN QS\n" # File: calc/cp2k/cp2k_print.c, Line: 155 msgid "! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS " msgstr "! Accéder à la section Champ auto-cohérent\n" " &SCF\n" "! Nombre maximum de cycles\n" " SCF_GUESS " # File: calc/cp2k/cp2k_print.c, Line: 160 msgid " ! => Initial guess for the wave-function\n" " MAX_SCF " msgstr " ! => Estimation initiale de la fonction d'onde\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 162 msgid " ! => Maximum number of SCF cycles\n" " EPS_SCF " msgstr " ! => Nombre maximum de cycles SCF\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 165 msgid " ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF " msgstr " ! => Seuil de convergence SCF\n" "! Si après les ${SCF_NCYCLES} premières étapes SCF aucune convergence n'a été atteinte\n" "! davantage de cycles SCF peuvent être effectués en mettant à jour le préconditionneur. \n" "! Des informations détaillées sont ensuite présentées dans la section SCF « Externe ».\n" " &OUTER_SCF\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 171 msgid " ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF " msgstr " ! => On met à jour le préconditionneur et on démarre un nouveau cycle SCF\n" " ! jusqu'à ${SCF_NCYCLES} x ${SCF_OCYCLES} peuvent être calculés\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 175 msgid " ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n" "\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER " msgstr " ! => Seuil de convergence pour les cycles supplémentaires\n" " &END OUTER_SCF\n" "\n" "! Aller à la section Transformation Orbitale\n" " &OT SUR\n" " MINIMISEUR " # File: calc/cp2k/cp2k_print.c, Line: 184 msgid "\n" " PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n" "\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n" msgstr "\n" " PRÉCONDITIONNEUR FULL_ALL  ! => Préconditionneur pour le schéma de minimisation,\n" " ! FULL_ALL est le préconditionneur le plus efficace\n" " ! poru la sélection d'états et est basé sur la diagonalisation\n" " ÉCART_ÉNERGÉTIQUE 0,001  ! => Valeur sous-estimée du Gap (HOMO-LUMO) en a.u.\n" " ! à utiliser avec le préconditionneur FULL_ALL\n" " &FIN OT\n" "\n" " &IMPRIMER\n" "! Pour régler l'impression du fichier de redémarrage\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Impression à l'écran lors de l'écriture du fichier de redémarrage\n" " &CHACUN\n" " QS_SCF0  ! => Ne jamais écrire de fichier(s) de redémarrage pendant le cycle SCF\n" # File: calc/cp2k/cp2k_print.c, Line: 198 msgid " &END PRINT\n" "\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL FUNCTIONAL\n" " &END XC_FUNCTIONAL\n" msgstr " &FIN D'IMPRESSION\n" "\n" " &FIN SCF\n" "! Aller à la section échanges-corrélation\n" " &XC\n" " &XC_FUNCTIONAL FONCTIONNEL\n" " &END XC_FUNCTIONAL\n" # File: calc/cp2k/cp2k_print.c, Line: 204 msgid "! Spin polarized calculation\n" " UKS " msgstr "! Calcul en spin polarisé\n" " UKS " # File: calc/cp2k/cp2k_print.c, Line: 313 msgid "!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC " msgstr "!\n" "! Toujours une section SUBSYS qui décrit\n" "! la chimie et la périodicité du système\n" "!\n" "&SOUS-SYSTÈME\n" " &CELLULE\n" " PÉRIODIQUE " # File: calc/cp2k/cp2k_print.c, Line: 324 msgid "\n" " &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME " msgstr "\n" " &FIN DE CELLULE\n" " &TOPOLOGIE\n" "! En utilisant un fichier XYZ, les coordonnées sont toujours cartésiennes et en angström\n" " COORDONNEE XYZ\n" " COORD_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 345 msgid " ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " msgstr " ! => Calcul de Kohn-Sham Ouvert Restreint\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " # File: calc/cp2k/cp2k_print.c, Line: 561 msgid "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n" msgstr "!\n" "! Toujours une section MOTION qui décrit\n" "! comment déplacer les atomes\n" "!\n" # File: calc/cp2k/cp2k_print.c, Line: 710 msgid "! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" msgstr "! La suite est délicate et des tests sont recommandés\n" "! Un jeu de bases atomiques et un pseudo-potentiel doivent être fournis pour chaque espèce chimique\n" "! les séquences exactes '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' apparaissent\n" "! à l'intérieur des fichiers qui contiennent respectivement les bases et les pseudo-potentiels\n" "! devant le nom de l'élément '*'\n" # File: calc/cp2k/cp2k_print.c, Line: 210 msgid " EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION ASPC  ! => ASPC recommandé pour DM, sinon PS\n" #File: calc/cp2k/cp2k_print.c, Line: 211 msgid " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION PS ! => ASPC recommandé pour MD, sinon PS\n" # File: calc/cp2k/cp2k_print.c, Line: 213 msgid " ! => Write restart file every ${OUT_STEPS} SCF steps\n" msgstr " ! => Écrire le fichier de redémarrage tous les ${OUT_STEPS} pas SCF\n" # File: calc/cp2k/cp2k_print.c, Line: 214 msgid " ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n" msgstr " ! => Écrire le fichier de redémarrage tous les ${OUT_STEPS} pas de GEO_OPT\n" # File: calc/cp2k/cp2k_print.c, Line: 215 msgid " ! => Write restart file every ${OUT_STEPS} MD steps\n" msgstr " ! => Écrire le fichier de redémarrage tous les ${OUT_STEPS} pas de DM\n" # File: calc/cp2k/cp2k_print.c, Line: 484 msgid "\n! Thermostat N°%d" msgstr "\n! Thermostat N°%d" # File: calc/cp2k/cp2k_print.c, Line: 652 msgid "\t%d\n# This file was prepared using %s" msgstr "\t%d\n# Ce fichier a été préparé en utilisant %s" # File: calc/cp2k/cp2k_print.c, Line: 744 msgid "! This file contains the restart information:" msgstr "! Ce fichier contient les informations de redémarrage:" # File: calc/cp2k/cp2k_print.c, Line: 745 msgid "! This file contains the basis set(s):" msgstr "! Ce fichier contient le(s) jeu(x) de bases:" # File: calc/cp2k/cp2k_print.c, Line: 746 msgid "! This file contains the pseudo-potential(s):" msgstr "! Ce fichier contient le(s) pseudo-potentiel(s):" # File: calc/cp2k/cp2k_print.c, Line: 747 msgid "! This file contains the wave-function:" msgstr "! Ce fichier contient la fonction d'onde:" # File: calc/cp2k/cp2k_print.c, Line: 748 msgid "! This file contains the atomic coordinates in XYZ format:" msgstr "! Ce fichier contient les coordonnées atomiques au format XYZ:" # File: calc/cp2k/cp2k_print.c, Line: 856 msgid "\t\t! A file is required !" msgstr "\t\t! Un fichier est requis !" # File: calc/cp2k/cp2k_print.c, Line: 986 msgid "\t\t! A keyword is required !" msgstr "\t\t! Un mot-clé est requis !" # File: calc/cp2k/cp2k_print.c, Line: 1025 msgid "! The mandatory FORCE_EVAL section include file\n" msgstr "! La section obligatoire FORCE_EVAL inclut le fichier\n" # File: calc/cp2k/cp2k_print.c, Line: 1034 msgid "! The mandatory MOTION section include file\n" msgstr "! La section MOTION obligatoire inclut le fichier\n" # File: calc/cp2k/cp2k_print.c, Line: 190 msgid " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" msgstr " LOG_PRINT_KEY T ! => Impression à l'écran lors de l'écriture du fichier de redémarrage\n" # File: calc/cp2k/cp2k_print.c, Line: 1181 msgid "! The mandatory SUBSYS section include file\n" msgstr "! La section obligatoire SUBSYS inclut le fichier\n" # File: calc/cpmd/cpmd_atoms.c, Line: 152 msgid "Configuration for dummy atom N°%d: " msgstr "Configuration pour l'atome factice N°%d: " # File: calc/cpmd/cpmd_atoms.c, Line: 157 msgid "Type of dummy atom:" msgstr "Type d'atome factice:" # File: calc/cpmd/cpmd_atoms.c, Line: 159 msgid "fixed in space:" msgstr "fixé dans l'espace:" # File: calc/cpmd/cpmd_atoms.c, Line: 160 msgid "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)" msgstr "calculé par\nla moyenne arithmétique des coordonnées du ou des atome(s) sélectionné(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 161 msgid "calculated by\nthe center of mass of the coordinates of the selected atom(s)" msgstr "calculé par\nle centre de masse des coordonnées du ou des atome(s) sélectionné(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 171 msgid "The coordinates of the dummy atom are %s" msgstr "Les coordonnées de l'atome factice sont %s" # File: calc/cpmd/cpmd_atoms.c, Line: 187 msgid "Dummy %s coordinate: " msgstr "Coordonnée factice %s: " # File: calc/cpmd/cpmd_atoms.c, Line: 419 msgid "You must select %d dummy atom(s) to be deleted !" msgstr "Vous devez sélectionner %d atome(s) factice(s) à supprimer !" # File: calc/cpmd/cpmd_atoms.c, Line: 443 msgid "Select the %d dummy atom(s) to be removed" msgstr "Sélectionnez le(s) %d atome(s) factice(s) à supprimer" # File: calc/cpmd/cpmd_atoms.c, Line: 556 msgid "Do you really want to add %d dummy atom(s) ?" msgstr "Voulez-vous vraiment ajouter %d atome(s) factice(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 557 msgid "Adding dummy atom(s) ?" msgstr "Ajout d'atome(s) factice(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 584 msgid "Number of dummy atom(s):" msgstr "Nombre d'atome(s) factice(s):" # File: calc/cpmd/cpmd_atoms.c, Line: 588 msgid "Dummy atom to configure: " msgstr "Atome factice à configurer: " # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure constraint(s)" msgstr "Ajout et configuration de contrainte(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure dummy atoms" msgstr "Ajout et configuration d'atome(s) factice(s)" # File: calc/cpmd/cpmd_init.c, Line: 749 msgid "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n" "\t\t < 0 for wavefunction" msgstr "\t * densité(s) électronique(s) ou/et fonction(s) d'onde\n" "\t ** autant d'index(s) à fournir sur la ligne suivante:\n" "\t\t > 0 pour la densité électronique\n" "\t\t < 0 pour la fonction d'onde" # File: calc/cpmd/cpmd_init.c, Line: 1491 msgid "The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "Les fichiers d'entrée 'forces.inc', 'system.inc', 'motion.inc' et 'coord.inc'\n" "ainsi que les fichiers 'basis.inc' et 'pseudo.inc'\n" "pour les jeux de bases atomiques et les peudo-potentiels\n" "ont été enregistrés dans le même répertoire que le fichier d’entrée principal." # File: calc/cpmd/cpmd_init.c, Line: 1499 msgid "The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "Les fichiers d'entrée « forces.inc », « system.inc » et « coord.inc »\n" "ainsi que les fichiers 'basis.inc' et 'pseudo.inc'\n" "pour les jeux de bases atomiques et les peudo-potentiels\n" "ont été enregistrés dans le même répertoire que le fichier d’entrée principal." # File: calc/cpmd/cpmd_init.c, Line: 1494 msgid "The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "Les fichiers 'basis.inc' et 'pseudo.inc'\n" "pour les jeux de bases atomiques et les peudo-potentiels\n" "ont été enregistrés dans le même répertoire que le fichier d’entrée principal." # File: calc/cpmd/cpmd_init.c, Line: 1618 msgid " Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d" msgstr " Nom du projet: %s\n" " Nombre total d'atomes: %d\n" " Nombre d'espèces chimiques: %d" # File: calc/cpmd/cpmd_init.c, Line: 1690 msgid "\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\n" "Please note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n" "\n" "In any case if you intent to use the %s code please refer to the user manual." msgstr "\tCet assistant vous aidera à configurer un %s %s\n" "\tcalcul en utilisant le modèle 3D %s comme point de départ\n" "\n" "Veuillez noter que le code %s offre tellement d'options de calcul qu'il n'est pas possible\n" "pour fournir une description et proposer un guide d’utilisation complet pour chacun d’eux. \n" "Par conséquent, cet assistant fournit uniquement une aide concernant les instructions de base et/ou %s fréquemment utilisées. \n" "\n" "Dans tous les cas, si vous avez l'intention d'utiliser le code %s, veuillez vous référer au manuel d'utilisation." # File: calc/cpmd/cpmd_init.c, Line: 113 msgid "provides an informal description of the system and the calculation to be performed" msgstr "fournit une description informelle du système et du calcul à effectuer" # File: calc/cpmd/cpmd_init.c, Line: 115 msgid "provides the exchange and correlation functional (DFT) parameters" msgstr "fournit les paramètres de la fonctionnelle d'échange et corrélation (DFT)" # File: calc/cpmd/cpmd_init.c, Line: 116 msgid "describes the implementation of the van der Waals interactions" msgstr "décrit l'implémentation des interactions de van der Waals" # File: calc/cpmd/cpmd_init.c, Line: 117 msgid "provides details about the physical properties to be calculated" msgstr "fournit des détails sur les propriétés physiques à calculer" # File: calc/cpmd/cpmd_init.c, Line: 118 msgid "describes the symmetry and periodicity of the system" msgstr "décrit la symétrie et la périodicité du système" # File: calc/cpmd/cpmd_init.c, Line: 119 msgid "describes the atomic species, pseudo-potentials and coordinates" msgstr "décrit les espèces atomiques, les pseudo-potentiels et les coordonnées" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Fictitious electronic mass:" msgstr "Masse électronique fictive:" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Local Spin Density" msgstr "Densité de Spin Locale" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "van der Walls interactions" msgstr "interactions avec van der Walls" # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "Density cutoff*:" msgstr "Coupure pour la densité*:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Use Angströms (default a.u.)" msgstr "Utiliser Angströms (a.u. par défaut)" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Lattice:" msgstr "Maille:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Parameters:" msgstr "Paramètres:" # File: calc/cpmd/cpmd_init.c, Line: 127 # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Angles:" msgstr "Angles:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Cutoff for the plane wave basis:" msgstr "Coupure pour la base d'onde plane:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use constraints" msgstr "Utiliser des contraintes" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Freeze:" msgstr "Figer:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use dummy atoms:" msgstr "Utilisez des atomes factices:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Atom type:" msgstr "Type d'atome:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Maximum angular momentum l:" msgstr "Moment cinétique maximal l:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Local angular momentum l:" msgstr "Moment cinétique local l:" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Slater Exchange Only" msgstr "Échange Slater Uniquement" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Extended B88+PW91+LYP88" msgstr "B88 Étendue + PW91 + LYP88" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "PBE Revised for Solids" msgstr "PBE Révisé pour les Solides" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Revised - PBE" msgstr "PBE - Révisé" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Optimized Becke 88" msgstr "Becke 88 Optimisé" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke One-parameter Hybrid + LYP" msgstr "Becke Hybride à un Paramètre + LYP" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Extended Hybrid + LYP" msgstr "Hybride Étendue + LYP" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Face Centered Cubic (FCC)" msgstr "Cubique Faces Centrées (FCC)" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Body Centered Cubic (BCC)" msgstr "Cubique Corps Centré (BCC)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Body Centered Tetragonal (BCT)" msgstr "Tétragonal Coprs Centré (BCT)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Orthorombic" msgstr "Orthorombique" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Default (a, b/a, c/a)" msgstr "Par Défaut (a, b/a, c/a)" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Absolute (a, b, c)" msgstr "Absolu (a, b, c)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Default (cos α, cos β, cos γ)" msgstr "Par Défaut (cos α, cos β, cos γ)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Degrees (α, β, γ)" msgstr "Degrés (α, β, γ)" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Atoms" msgstr "Quelques Atomes" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Coordinates" msgstr "Quelques Coordonnées" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Convergence criteria*:" msgstr "Critères de convergence*:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Optimizer:" msgstr "Optimiseur:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Max steps:" msgstr "Nombre de pas max.:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Integration step:" msgstr "Pas d'intégration:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Max MD steps: " msgstr "Pas max. de MD: " # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Time step:" msgstr "Pas de temps:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Barostat:" msgstr "Barostat:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Ions" msgstr "Ions" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Factor:" msgstr "Facteur:" # File: calc/cpmd/cpmd_init.c, Line: 171 msgid "Fictitious electrons" msgstr "Électrons fictifs" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of unoccupied states:" msgstr "Nombre d'états inoccupés:" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "3D visualization*" msgstr "Visualisation 3D*" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of objects**:" msgstr "Nombre d'objets**:" # File: calc/cpmd/cpmd_init.c, Line: 174 msgid "Property to compute:" msgstr "Propriété à calculer:" # File: calc/cpmd/cpmd_init.c, Line: 192 msgid "Wavefunction Optimization" msgstr "Optimisation de la Fonction d'Onde" # File: calc/cpmd/cpmd_init.c, Line: 194 msgid "CPMD Molecular Dynamics" msgstr "Dynamique Moléculaire CPMD" # File: calc/cpmd/cpmd_init.c, Line: 195 msgid "Born-Oppenheimer Molecular Dynamics" msgstr "Dynamique Moléculaire Born-Oppenheimer" # File: calc/cpmd/cpmd_init.c, Line: 196 msgid "Kohn-Sham Eigen Values" msgstr "Valeurs Propres de Kohn-Sham" # File: calc/cpmd/cpmd_init.c, Line: 198 msgid "Calculation of Physical Properties" msgstr "Calcul des Propriétés Physiques" # File: calc/cpmd/cpmd_init.c, Line: 202 msgid "Preconditioned Gradient" msgstr "Gradient Préconditionné" # File: calc/cpmd/cpmd_init.c, Line: 202,203 msgid "Direct Inversion of Iterative Subspace" msgstr "Inversion Directe du Sous-Espace Itératif" # File: calc/cpmd/cpmd_init.c, Line: 203 msgid "Quasi-Newton method" msgstr "Méthode quasi-Newton" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Finite differences of first derivatives" msgstr "Différences finies des dérivées premières" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Linear response of ionic displacement" msgstr "Réponse linéaire du déplacement ionique" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Precalculated Hessian" msgstr "Hessien précalculé" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Gobal" msgstr "Global" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Local" msgstr "Locale" # File: calc/cpmd/cpmd_init.c, Line: 215 msgid "Controlled" msgstr "Contrôlé" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Nosé-Hoover chains" msgstr "Chaînes Nosé-Hoover" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Adaptive Langevin" msgstr "Langevin adaptatif" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Canonical sampling through velocity rescaling" msgstr "Échantillonnage canonique par redimensionnement de la vitesse" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure constraints" msgstr "Configurer les contraintes" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure dummy atoms" msgstr "Configuration de(s) atome(s) factice(s)" # File: calc/cpmd/cpmd_init.c, Line: 500 msgid "%s atom(s)" msgstr "atome(s) de %s" # File: calc/cpmd/cpmd_init.c, Line: 684 msgid "Annealing:" msgstr "Recuit:" # File: calc/cpmd/cpmd_init.c, Line: 772,860 msgid "%s option(s)" msgstr "%s option(s)" # File: calc/cpmd/cpmd_init.c, Line: 853 msgid "Calculation to be performed:" msgstr "Calcul à effectuer:" # File: calc/cpmd/cpmd_init.c, Line: 888 msgid "General %s section option(s)" msgstr "Option(s) générale(s) de la section %s" # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section - Calculation options" msgstr "La section %s - Options de calcul" # File: calc/cpmd/cpmd_init.c, Line: 988 msgid "The %s section - Thermostat options" msgstr "La section %s - Options du thermostat" # File: calc/cpmd/cpmd_init.c, Line: 992 msgid "The %s section - RESTART options" msgstr "La section %s - Options RESTART" # File: calc/cpmd/cpmd_init.c, Line: 1033 msgid " Finalize the creation of the CPMD input file now !" msgstr " Finalisez la création du fichier d'entrée CPMD maintenant !" # File: calc/cpmd/cpmd_init.c, Line: 1036 msgid "\n \tNote: You can re-open this assitant later if required to adjust your choices\n" msgstr "\n \tRemarque: Vous pourrez rouvrir cet assistant plus tard pour ajuster vos choix si nécessaire.\n" # File: calc/cpmd/cpmd_init.c, Line: 1038 msgid "Create the input file now !" msgstr "Créez le fichier d'entrée maintenant !" # File: calc/cpmd/cpmd_init.c, Line: 1251 msgid "CP2K input file" msgstr "Fichier d'entrée CP2K" # File: calc/cpmd/cpmd_init.c, Line: 1242 msgid " input file preview" msgstr " aperçu du fichier d'entrée" # File: calc/cpmd/cpmd_init.c, Line: 1253 msgid " input files preview" msgstr " aperçu des fichiers d'entrée" # File: calc/cpmd/cpmd_init.c, Line: 1417 # File: calc/dl_poly/dlp_field.c, Line: 4715 msgid "Error while saving input file: %s\n Error: %s" msgstr "Erreur lors de l'enregistrement du fichier d'entrée: %s\n Erreur : %s" # File: calc/cpmd/cpmd_init.c, Line: 1463 msgid "Error while saving file %s: %s" msgstr "Erreur lors de l'enregistrement du fichier %s: %s" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CPMD input file (*.in)" msgstr "Fichier d'entrée CPMD (*.in)" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CP2K input file (*.inp)" msgstr "Fichier d'entrée CP2K (*.inp)" # File: calc/cpmd/cpmd_init.c, Line: 1538 # File: calc/dl_poly/dlp_field.c, Line: 4749 msgid "Saving %s input file(s)" msgstr "Enregistrement de(s) %s fichier(s) d'entrée" # File: calc/cpmd/cpmd_init.c, Line: 1581 msgid "first-principles" msgstr "premiers principes" # File: calc/cpmd/cpmd_init.c, Line: 1681 msgid "Basic %s - %s - calculation assistant" msgstr "Assistant simple pour le calcul %s - %s" # File: calc/cpmd/cpmd_init.c, Line: 1714 # File: calc/dl_poly/dlp_field.c, Line: 4892 msgid "Preview" msgstr "Aperçu" # File: calc/cpmd/cpmd_nose.c, Line: 1068 msgid "Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !" msgstr "L'atome %d a été sélectionné mais ses coordonnées ne sont pas figées !\n" "Désélectionnez l'atome %d ou sélectionnez les coordonnées à figer !" # File: calc/cpmd/cpmd_nose.c, Line: 98 msgid "Initial temperature: " msgstr "Température initiale: " # File: calc/cpmd/cpmd_nose.c, Line: 99,100 msgid "Target temperature: " msgstr "Température cible: " # File: calc/cpmd/cpmd_nose.c, Line: 99 msgid "Tolerance: " msgstr "Tolérance: " # File: calc/cpmd/cpmd_nose.c, Line: 100 msgid "Target frequency: " msgstr "Fréquence cible: " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Langevin): " msgstr "Constante de temps (Langevin): " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Nosë-Hoover): " msgstr "Constante de temps (Nosë-Hoover): " # File: calc/cpmd/cpmd_nose.c, Line: 104 # File: calc/dl_poly/dlp_edit.c, Line: 2374 msgid "Mass: " msgstr "Masse: " # File: calc/cpmd/cpmd_nose.c, Line: 105,107 msgid "Time constant: " msgstr "Constante de temps: " # File: calc/cpmd/cpmd_nose.c, Line: 107 # File: calc/dl_poly/dlp_edit.c, Line: 2558,2614 msgid "Length: " msgstr "Longueur: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Multiple time steps: " msgstr "Pas de temps multiples: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Yoshida integrator: " msgstr "Intégrateur Yoshida: " # File: calc/cpmd/cpmd_nose.c, Line: 439 msgid "You must select %d thermostat(s) to be deleted !" msgstr "Vous devez sélectionner %d thermostat(s) à supprimer !" # File: calc/cpmd/cpmd_nose.c, Line: 463 msgid "Select the %d thermostat(s) to be removed" msgstr "Sélectionnez le(s) %d thermostat(s) à supprimer" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Target T°" msgstr "T° cible" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Frequency" msgstr "Fréquence" # File: calc/cpmd/cpmd_nose.c, Line: 625 # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target temperature:" msgstr "Température cible:" # File: calc/cpmd/cpmd_nose.c, Line: 1045 # File: calc/dl_poly/dlp_atom.c, Line: 308 msgid "%d atoms have been selected !" msgstr "%d atomes ont été sélectionnés !" # File: calc/cpmd/cpmd_nose.c, Line: 1049 # File: calc/dl_poly/dlp_atom.c, Line: 313 msgid "A single atom has been selected !" msgstr "Un seul atome a été sélectionné !" # File: calc/cpmd/cpmd_nose.c, Line: 1053 msgid "Not at single atom has been selected !" msgstr "Pas un seul atome n’a été sélectionné !" # File: calc/cpmd/cpmd_nose.c, Line: 1055 msgid "%s\nis this correct ?" msgstr "%s\nest-ce exact ?" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Species" msgstr "Espèces" # File: calc/cpmd/cpmd_nose.c, Line: 1216,1217 msgid "Id. (*)" msgstr "Id. (*)" # File: calc/cpmd/cpmd_nose.c, Line: 1237 msgid "Select atom(s) to construct dummy N°%d" msgstr "Sélectionnez le(s) atome(s) pour du factice N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1241 msgid "Select atom(s) to fix" msgstr "Sélectionnez les atomes à corriger" # File: calc/cpmd/cpmd_nose.c, Line: 1246 msgid "Select atom(s) and coordinate(s) to fix" msgstr "Sélectionnez le(s) atome(s) et le(s) coordonnée(s) à corriger" # File: calc/cpmd/cpmd_nose.c, Line: 1251 msgid "Add atom(s) to thermostat N°%d" msgstr "Ajouter un ou plusieurs atomes au thermostat N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1332 msgid " (*) Order of appearance in the input file" msgstr " (*) Ordre d'apparition dans le fichier d'entrée" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All non-thermostated atom(s)" msgstr "Tous les atomes non-thermostatés" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All atom(s)" msgstr "Tous les atomes" # File: calc/cpmd/cpmd_nose.c, Line: 1389,1440 # File: calc/dl_poly/dlp_edit.c, Line: 1682,1698,1714,1728,2414,2436,2531,2586,2644,2777 msgid "Not picked yet !" msgstr "Pas encore choisi !" # File: calc/cpmd/cpmd_nose.c, Line: 1394,1445 # File: calc/dl_poly/dlp_edit.c, Line: 1605,1719,2396,2591,2649 msgid "%d atom(s)" msgstr "%d atome(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1436 msgid "Atom(s) selection: " msgstr "Sélection d'atome(s): " # File: calc/cpmd/cpmd_nose.c, Line: 1467 msgid "Configuration for thermostat N°%d: " msgstr "Configuration du thermostat N°%d: " # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Thermostat" msgstr "Thermostat" # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Dummy atom" msgstr "Atome factice" # File: calc/cpmd/cpmd_nose.c, Line: 1610 msgid "Do you really want to add %d thermostat(s) ?" msgstr "Voulez-vous vraiment ajouter %d thermostat(s) ?" # File: calc/cpmd/cpmd_nose.c, Line: 1611 msgid "Adding thermostat(s) ?" msgstr "Ajouter un ou plusieurs thermostats ?" # File: calc/cpmd/cpmd_nose.c, Line: 1626 msgid "It is not possible to create so many thermostats" msgstr "Il n'est pas possible de créer autant de thermostats" # File: calc/cpmd/cpmd_nose.c, Line: 1632 msgid "All atoms arleady have a thermostat assigned" msgstr "Tous les atomes sont déjà thermostatés" # File: calc/cpmd/cpmd_nose.c, Line: 1713 msgid "Number of thermostat(s): " msgstr "Nombre de thermostat(s): " # File: calc/cpmd/cpmd_nose.c, Line: 1717 msgid "Thermostat to configure: " msgstr "Thermostat à configurer: " # File: calc/cpmd/cpmd_nose.c, Line: 1779 msgid "Thermostat type: " msgstr "Type de thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Ionic subsystem thermostat: " msgstr "Thermostat du sous-système ionique: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Thermostat: " msgstr "Thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1916 msgid "Fictitious electronic subsystem: " msgstr "Sous-système électronique fictif: " # File: calc/cpmd/cpmd_print.c, Line: 65 msgid " This input file was prepared using %s\n\n" msgstr " Ce fichier d'entrée a été préparée en utilisant %s\n\n" # File: calc/cpmd/cpmd_restart.c, Line: 140 msgid "Initialization for the Wavefunction:" msgstr "Initialisation de la fonction d'onde:" # File: calc/cpmd/cpmd_restart.c, Line: 143 msgid "Random" msgstr "Aléatoire" # File: calc/cpmd/cpmd_restart.c, Line: 144 msgid "Atomic Pseudo Wavefunctions" msgstr "Fonctions d'Ondes Pseudo-Atomiques" # File: calc/cpmd/cpmd_restart.c, Line: 145 msgid "Use a RESTART.* File" msgstr "Utiliser un Fichier RESTART.*" # File: calc/cpmd/cpmd_restart.c, Line: 151 msgid "Save the information required for a restart every:" msgstr "Enregistrez les informations nécessaires à un redémarrage tous les:" # File: calc/cpmd/cpmd_restart.c, Line: 158 msgid "Number of restart file(s): " msgstr "Nombre de fichiers de redémarrage: " # File: calc/cpmd/cpmd_restart.c, Line: 165 msgid "Create a trajectory" msgstr "Créer une trajectoire" # File: calc/cpmd/cpmd_restart.c, Line: 170 msgid "Save the atomic coordinates every: " msgstr "Enregistrez les coordonnées atomiques tous les: " # File: calc/cpmd/cpmd_restart.c, Line: 175 msgid "Write XYZ format" msgstr "Écrire au format XYZ" # File: calc/cpmd/cpmd_restart.c, Line: 179 msgid "Write atomic forces" msgstr "Écrire les forces atomiques" # File: calc/cpmd/cpmd_restart.c, Line: 187 msgid "Print extra data in the global output file" msgstr "Imprimer des données supplémentaires dans le fichier de sortie global" # File: calc/cpmd/cpmd_restart.c, Line: 191 msgid "Save the extra information every: " msgstr "Enregistrez les informations supplémentaires tous les: " # File: calc/cpmd/cpmd_restart.c, Line: 196 msgid "Select the information to print:" msgstr "Sélectionnez les informations à imprimer:" # File: calc/dl_poly/dlp_atom.c, Line: 309 msgid "%s\nConfirm this choice and create a new field atom to describe them ?" msgstr "%s\nConfirmer ce choix et créer un nouveau champ atome pour les décrire ?" # File: calc/dl_poly/dlp_atom.c, Line: 314 msgid "%s\nIs this correct, create a new field atom to describe it ?" msgstr "%s\nEst-ce correct, créer un nouvel atome de champ pour le décrire ?" # File: calc/dl_poly/dlp_atom.c, Line: 433 msgid "%d atoms selected !\nIs this correct ?" msgstr "%d atomes sélectionnés !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 437 msgid "%d atoms selected !\nOnly a single atom is required !" msgstr "%d atomes sélectionnés !\nUn seul atome suffit !" # File: calc/dl_poly/dlp_atom.c, Line: 446 msgid "A single atom selected !\nIs this correct ?" msgstr "Un seul atome sélectionné !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 456 msgid "No atom selected !\nIs this correct ?" msgstr "Aucun atome sélectionné !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 664 msgid "Merging with atom N°%d - %s !\nIs this correct ?" msgstr "Fusion avec l'atome N°%d - %s !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 736 msgid "Select the field atom to merge atom \"%s\" with" msgstr "Sélectionnez l'atome de champ avec lequel fusionner l'atome \"%s\"" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_mol.c, Line: 761 msgid "Viz.3D & Merge with" msgstr "Viz.3D et fusionner avec" # File: calc/dl_poly/dlp_control.c, Line: 117 msgid "Molecular dynamics" msgstr "Dynamique moléculaire" # File: calc/dl_poly/dlp_control.c, Line: 216 msgid "Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature." msgstr "La température cible pour le pseudo-bain doit être ≥ 1,0K,\n" "Vous pouvez également définir la valeur sur 0,0 K pour la température du système." # File: calc/dl_poly/dlp_control.c, Line: 1590 msgid "The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]" msgstr "La taille du lot ou max. nombre de particules par lot\n" "doit ∈ [1 - 10 000 000]" # File: calc/dl_poly/dlp_control.c, Line: 112 msgid "System information" msgstr "Informations sur le système" # File: calc/dl_poly/dlp_control.c, Line: 113 msgid "Calculation details" msgstr "Détails du calcul" # File: calc/dl_poly/dlp_control.c, Line: 114 msgid "Non-bonded interactions" msgstr "Interactions non-liées" # File: calc/dl_poly/dlp_control.c, Line: 115 msgid "Equilibration" msgstr "Équilibration" # File: calc/dl_poly/dlp_control.c, Line: 116 msgid "Thermodynamics" msgstr "Thermodynamique" # File: calc/dl_poly/dlp_control.c, Line: 118 msgid "Output options" msgstr "Options de sortie" # File: calc/dl_poly/dlp_control.c, Line: 119 msgid "Computational details" msgstr "Détails du calcul" # File: calc/dl_poly/dlp_control.c, Line: 129 msgid "Gentle Stochastic" msgstr "Stochastique doux" # File: calc/dl_poly/dlp_control.c, Line: 132 msgid "Two temperature model" msgstr "Modèle à deux températures" # File: calc/dl_poly/dlp_control.c, Line: 133 msgid "Inhomogeneous Langevin" msgstr "Langevin inhomogène" # File: calc/dl_poly/dlp_control.c, Line: 142 msgid "Relaxation speed constant (friction):" msgstr "Constante de vitesse de relaxation (frottement):" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Relaxation time:" msgstr "Temps de détente:" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Softness [0.0 - 1.0]:" msgstr "Douceur [0,0 - 1,0]:" # File: calc/dl_poly/dlp_control.c, Line: 144,145,146,148,149 msgid "Relaxation constant:" msgstr "Constante de détente:" # File: calc/dl_poly/dlp_control.c, Line: 146 msgid "Langevin friction:" msgstr "Frottement Langevin:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Shardlow's splitting order:" msgstr "Ordre de partage de Shardlow:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Global drag coefficient:" msgstr "Coefficient de traînée global:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Enhancement of relaxation constant:" msgstr "Amélioration de la constante de relaxation:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Cut-off particle velocity for friction enhancement:" msgstr "Vitesse limite des particules pour améliorer la friction:" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Thermostat relaxation speed constant (friction):" msgstr "Constante de vitesse de relaxation du thermostat (frottement):" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Barostat relaxation speed constant (friction):" msgstr "Constante de vitesse de relaxation du barostat (frottement):" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Thermostat relaxation time:" msgstr "Temps de relaxation du thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Barostat relaxation time:" msgstr "Temps de relaxation du barostat:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Target surface tension:" msgstr "Tension superficielle cible:" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Area" msgstr "Zone" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Tension" msgstr "Tension" # File: calc/dl_poly/dlp_control.c, Line: 412 msgid "Semi-anisotropic constraint" msgstr "Contrainte semi-anisotrope" # File: calc/dl_poly/dlp_control.c, Line: 467 msgid "Thermostat:" msgstr "Thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 554 msgid "Use pseudo thermal bath" msgstr "Utiliser un pseudo bain thermal" # File: calc/dl_poly/dlp_control.c, Line: 556 msgid "Thermostat type:" msgstr "Type de thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Langevin + Direct" msgstr "Langevin + Direct" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Direct" msgstr "Direct" # File: calc/dl_poly/dlp_control.c, Line: 565 msgid "Thickness:" msgstr "Épaisseur:" # File: calc/dl_poly/dlp_control.c, Line: 570 msgid "Target T°:" msgstr "T° cible:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Verlet integrator:" msgstr "Intégrateur Verlet:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Number of steps:" msgstr "Nombre de pas:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Time step δt:" msgstr "Pas de temps δt:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target pressure:" msgstr "Pression cible:" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake iterations limit:" msgstr "Limite d'itérations des secousses (Shake):" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake tolerance:" msgstr "Tolérance aux secousses (Shake):" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle iterations limit:" msgstr "Limite d'itérations des vibrations (Rattle):" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle tolerance:" msgstr "Tolérance aux vibrations (Rattle):" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA iterations limit:" msgstr "Limite d'itérations FIQA:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA quaternions tolerance:" msgstr "Tolérance des quaternions FIQA:" # File: calc/dl_poly/dlp_control.c, Line: 585 msgid "cycle(s)" msgstr "cycle(s)" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum time step:" msgstr "Pas de temps maximum:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum distance allowed:" msgstr "Distance maximale autorisée:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Minimum distance allowed:" msgstr "Distance minimale autorisée:" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Velocity" msgstr "Vitesse" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Leapfrog" msgstr "Dépasser" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Fixed" msgstr "Fixé" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Variable" msgstr "Variable" # File: calc/dl_poly/dlp_control.c, Line: 635 msgid "Variable time step information" msgstr "Informations sur le pas de temps variable" # File: calc/dl_poly/dlp_control.c, Line: 722 msgid "Initiate impact on particle" msgstr "Initier l'impact sur la particule" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Index of the particle to impact: " msgstr "Indice de la particule à impacter: " # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Time step of impact:" msgstr "Pas de temps d’impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Energy of impact:" msgstr "Énergie d'impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Direction (from center of mass):" msgstr "Direction (à partir du centre de masse):" # File: calc/dl_poly/dlp_control.c, Line: 730 msgid "nth step" msgstr "nième étape" # File: calc/dl_poly/dlp_control.c, Line: 769 msgid "on %s:" msgstr "sur %s:" # File: calc/dl_poly/dlp_control.c, Line: 830 msgid "Time step details" msgstr "Détails du pas de temps" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Bond constraint(s) dynamics:" msgstr "Dynamique de(s) contrainte(s) de liaison:" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Rotational motion of rigid body(ies):" msgstr "Mouvement de rotation du(es) corps rigide(s):" # File: calc/dl_poly/dlp_control.c, Line: 890 msgid "Initiate impact on particle" msgstr "Initier l'impact sur les particules" # File: calc/dl_poly/dlp_control.c, Line: 891 msgid "Impact details" msgstr "Détails des impacts" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Equilibrate for the first:" msgstr "Équilibrer pour le premier:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Scale temperature:" msgstr "Température de l'échelle:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Cap forces:" msgstr "Forces de plafonnement:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Resample the momenta distribution:" msgstr "Rééchantillonnez la distribution de moments:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Minimize system configuration:" msgstr "Réduire la configuration du système:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize system configuration from start:" msgstr "Optimisez la configuration du système dès le départ:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Perform zero temperature (10 K) optimization" msgstr "Effectuer une optimisation à température nulle (10 K)" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Include equilibration data in statistics" msgstr "Inclure les données d'équilibrage dans les statistiques" # File: calc/dl_poly/dlp_control.c, Line: 904,1112,1302,1359,1400 msgid "Every:" msgstr "Chaque:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "During:" msgstr "Pendant:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "Minimize:" msgstr "Minimiser:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize" msgstr "Optimiser" # File: calc/dl_poly/dlp_control.c, Line: 905,1260,1293,1330,1363,1502,2051 msgid "step(s)" msgstr "pas" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Force" msgstr "Force" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Energy" msgstr "Énergie" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Distance" msgstr "Distance" # File: calc/dl_poly/dlp_control.c, Line: 957 msgid "Minimization parameter must ∈ [ %f - %f ]" msgstr "Le paramètre de minimisation doit ∈ [ %f - %f ]" # File: calc/dl_poly/dlp_control.c, Line: 1023 msgid "Equilibrate" msgstr "Équilibrer" # File: calc/dl_poly/dlp_control.c, Line: 1107 msgid "Defects:" msgstr "Défauts:" # File: calc/dl_poly/dlp_control.c, Line: 1108 msgid "Displacements:" msgstr "Déplacements:" # File: calc/dl_poly/dlp_control.c, Line: 1109 msgid "History:" msgstr "Histoire:" # File: calc/dl_poly/dlp_control.c, Line: 1110 msgid "Atom's MSD:" msgstr "Le DCM d'Atom:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "From step:" msgstr "Du pas:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "Site interstitial cutoff:" msgstr "Coupure du site interstitiel:" # File: calc/dl_poly/dlp_control.c, Line: 1113 msgid "Qualifying cutoff:" msgstr "Seuil de qualification:" # File: calc/dl_poly/dlp_control.c, Line: 1114 msgid "Data level:" msgstr "Niveau de données:" # File: calc/dl_poly/dlp_control.c, Line: 1119 msgid "Radial distribution functions (RDFs):" msgstr "Fonctions de distribution radiale (RDF):" # File: calc/dl_poly/dlp_control.c, Line: 1120 msgid "Velocity autocorrelation functions (VAFs):" msgstr "Fonctions d'autocorrélation de vitesse (VAF):" # File: calc/dl_poly/dlp_control.c, Line: 1121 msgid "Z density profile:" msgstr "Profil de densité Z:" # File: calc/dl_poly/dlp_control.c, Line: 1289 msgid "Dump restart information every:" msgstr "Vider les informations de redémarrage tous les:" # File: calc/dl_poly/dlp_control.c, Line: 1298 msgid "Print system data:" msgstr "Imprimer les données du système:" # File: calc/dl_poly/dlp_control.c, Line: 1299 msgid "Accumulate statistics data:" msgstr "Accumuler des données statistiques:" # File: calc/dl_poly/dlp_control.c, Line: 1300 msgid "Rolling average stack:" msgstr "Pile moyenne mobile:" # File: calc/dl_poly/dlp_control.c, Line: 1364 msgid "Bin size:" msgstr "Taille du bac:" # File: calc/dl_poly/dlp_control.c, Line: 1391 msgid "Ignore time-averaging for the VAFs" msgstr "Ignorer la moyenne temporelle pour les VAF" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "All:" msgstr "Tous:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Bonds:" msgstr "Liaisons:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Dihedrals:" msgstr "Dièdres:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Inversions:" msgstr "Inversions:" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Num. δ" msgstr "Nbre. δ" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Cutoff = " msgstr "Coupure = " # File: calc/dl_poly/dlp_control.c, Line: 1505 msgid "%sr in [0 : r]" msgstr "%sr dans [0 : r]" # File: calc/dl_poly/dlp_control.c, Line: 1509 msgid "%s° in [-180 : 180]" msgstr "%s° dans [-180 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1513 msgid "%s° in [0 : 180]" msgstr "%s° dans [0 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job time:" msgstr "Durée du calcul:" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job closure time:" msgstr "Heure de fin du calcul:" # File: calc/dl_poly/dlp_control.c, Line: 1548 msgid "Traditional master I/O" msgstr "E/S maître traditionnelles" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) read interface:" msgstr "Interface de lecture générale d'entrée/sortie (E/S):" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) write interface:" msgstr "Interface d'écriture générale d'entrée/sortie (E/S):" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Reader count:" msgstr "Nombre de lecteurs:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Batch size:" msgstr "Taille du lot:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Buffer size:" msgstr "Taille du tampon:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "// error check" msgstr "// vérification des erreurs" # File: calc/dl_poly/dlp_control.c, Line: 1780 msgid "Sorted" msgstr "Trié" # File: calc/dl_poly/dlp_control.c, Line: 1781 msgid "Unsorted" msgstr "Non trié" # File: calc/dl_poly/dlp_control.c, Line: 1606 msgid "The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]" msgstr "La taille du tampon ou max. nombre d'enregistrements de ligne ASCII par lot\ndoit ∈ [100 - 100 000]" # File: calc/dl_poly/dlp_control.c, Line: 1754 msgid "Method:" msgstr "Méthode:" # File: calc/dl_poly/dlp_control.c, Line: 1770 msgid "Real precision:" msgstr "Précision réelle:" # File: calc/dl_poly/dlp_control.c, Line: 1778 # File: curve/tab-1.c, Line: 648 msgid "Type:" msgstr "Type:" # File: calc/dl_poly/dlp_control.c, Line: 1825 msgid "Random number generator seeds:" msgstr "Graines du générateur de nombres aléatoires :" # File: calc/dl_poly/dlp_control.c, Line: 1841 msgid "Limits to 2 the number of processors in z direction for slab simulations" msgstr "Limite à 2 le nombre de processeurs dans le sens z pour les simulations de dalles" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Direct Coulomb sum" msgstr "Somme coulombienne directe" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Distance dependent dielectric Coulomb sum" msgstr "Somme de Coulomb diélectrique dépendant de la distance" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum (auto)" msgstr "Somme d'Ewald (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum" msgstr "Somme d'Ewald" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field electrostatics" msgstr "Électrostatique du champ de réaction" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field with Fennel damping" msgstr "Champ de réaction avec amortissement Fennel" # File: calc/dl_poly/dlp_control.c, Line: 1851 msgid "Reaction field with Fennel damping (auto)" msgstr "Champ de réaction avec amortissement Fennel (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum" msgstr "Somme de Coulomb décalée par force" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum with Fennel damping" msgstr "Somme de Coulomb décalée par force avec amortissement Fennel" # File: calc/dl_poly/dlp_control.c, Line: 1853 msgid "Force-shifted Coulomb sum with Fennel damping (auto)" msgstr "Somme de Coulomb décalée par force avec amortissement Fennel (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1877,2181 msgid "Cutoff must be > 0.0 Å" msgstr "Le seuil doit être > 0,0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1890 msgid "Padding must be ≥ min(0.05, 0.5%rcut) Å" msgstr "Le remplissage doit être ≥ min(0,05, 0,5%rcoupe) Å" # File: calc/dl_poly/dlp_control.c, Line: 1895 msgid "Padding must be > 0.0 Å" msgstr "Le remplissage doit être > 0,0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1917 msgid "Precision must ∈ [10-20 - 0.5]" msgstr "La précision doit ∈ [10-20 - 0,5]" # File: calc/dl_poly/dlp_control.c, Line: 1989 msgid "Precision:" msgstr "Précision:" # File: calc/dl_poly/dlp_control.c, Line: 2010 msgid "Ewald convergence parameter:" msgstr "Paramètre de convergence d'Ewald:" # File: calc/dl_poly/dlp_control.c, Line: 2018 msgid "Maximum k vector index in directions:" msgstr "Indice vectoriel k maximum dans les directions:" # File: calc/dl_poly/dlp_control.c, Line: 2037 msgid "Fennell damping parameter (α):" msgstr "Paramètre d'amortissement Fennell (α):" # File: calc/dl_poly/dlp_control.c, Line: 2047 msgid "Evaluate k-space contribution to the Ewald sum every:" msgstr "Évaluez la contribution de l'espace k à la somme d'Ewald tous les:" # File: calc/dl_poly/dlp_control.c, Line: 2112 msgid "Evaluate electrostatics interactions" msgstr "Évaluer les interactions électrostatiques" # File: calc/dl_poly/dlp_control.c, Line: 2120 msgid "Long range interaction cutoff [rcut]:" msgstr "Seuil d'interaction à longue portée [rcut]:" # File: calc/dl_poly/dlp_control.c, Line: 2126 msgid "Add padding to rcut:" msgstr "Ajoutez un remplissage à rcut:" # File: calc/dl_poly/dlp_control.c, Line: 2135 msgid "Use extended coulombic exclusion" msgstr "Utiliser l'exclusion coulombienne étendue" # File: calc/dl_poly/dlp_control.c, Line: 2138 msgid "Evaluation method:" msgstr "Méthode d'évaluation:" # File: calc/dl_poly/dlp_control.c, Line: 2157 msgid "Functional" msgstr "Fonctionnelle" # File: calc/dl_poly/dlp_control.c, Line: 2240 msgid "Evaluate van der Waals interactions" msgstr "Évaluer les interactions de van der Waals" # File: calc/dl_poly/dlp_control.c, Line: 2249 msgid "Short range interaction cutoff:" msgstr "Seuil d’interaction à courte portée:" # File: calc/dl_poly/dlp_control.c, Line: 2257 msgid "Enforce direct calculation of van der Waals interactions" msgstr "Appliquer le calcul direct des interactions de van der Waals" # File: calc/dl_poly/dlp_control.c, Line: 2261 msgid "Apply force-shifting (contributions smoothly fall to zero near rcut)" msgstr "Appliquer un changement de force (les contributions tombent progressivement à zéro près de rcut)" # File: calc/dl_poly/dlp_control.c, Line: 2265 msgid "Apply mixing rule (when needed and if possible generate cross species interactions)" msgstr "Appliquer la règle de mélange (si nécessaire et si possible générer des interactions entre espèces)" # File: calc/dl_poly/dlp_control.c, Line: 2272 msgid "Mixing rule:" msgstr "Règle de mélange:" # File: calc/dl_poly/dlp_control.c, Line: 2327 msgid "Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials" msgstr "Appliquer le calcul direct des interactions métalliques par des potentiels explicites, ne fonctionne pas avec les potentiels *EAM*" # File: calc/dl_poly/dlp_control.c, Line: 2332 msgid "Switch the default embedding functions, F, from F(ρ) to F(√ρ)" msgstr "Basculez les fonctions d'intégration par défaut, F, de F(ρ) à F(√ρ)" # File: calc/dl_poly/dlp_control.c, Line: 2359 msgid "Subcelling threshold density must be ≥ 1.0" msgstr "Le seuil densité de sous-cellule doit être ≥ 1.0" # File: calc/dl_poly/dlp_control.c, Line: 2377 msgid "Relative dielectric constant εr" msgstr "Constante diélectrique relative εr" # File: calc/dl_poly/dlp_control.c, Line: 2378 msgid "Allowed local variation of system density:" msgstr "Variation locale autorisée de la densité du système:" # File: calc/dl_poly/dlp_control.c, Line: 2379 msgid "Ignore the particle indices in CONFIG file" msgstr "Ignorer les indices de particules dans le fichier CONFIG" # File: calc/dl_poly/dlp_control.c, Line: 2380 msgid "Ignore strict checks, hide warnings and assume safe simulation parameters" msgstr "Ignorer les contrôles stricts, masquer les avertissements et utilser des paramètres de simulation sûrs" # File: calc/dl_poly/dlp_control.c, Line: 2381 msgid "Skip detailed topology reporting during read of FIELD file in output" msgstr "Ignorer les rapports de topologie détaillés lors de la lecture du fichier FIELD" # File: calc/dl_poly/dlp_control.c, Line: 2382 msgid "Ignore center of mass removal during the calculation" msgstr "Ignorer la suppression du centre de masse pendant le calcul" # File: calc/dl_poly/dlp_control.c, Line: 2383 msgid "Set tolerance for relaxed shell model:" msgstr "Définir la tolérance pour le modèle de coque détendu:" # File: calc/dl_poly/dlp_control.c, Line: 2384 msgid "Set the subcelling threshold density of particles per link cell:" msgstr "Densité seuil de sous-cellule des particules par cellule de lien:" # File: calc/dl_poly/dlp_control.c, Line: 2385 msgid "Create an expanded version of the current model:" msgstr "Créez une version étendue du modèle actuel:" # File: calc/dl_poly/dlp_control.c, Line: 2386 msgid "Restart calculation:" msgstr "Recommencer le calcul:" # File: calc/dl_poly/dlp_control.c, Line: 2512 msgid "Continue current simulation" msgstr "Continuer la simulation en cours" # File: calc/dl_poly/dlp_control.c, Line: 2513 msgid "Start new simulation from older run without temperature reset" msgstr "Démarrer une nouvelle simulation à partir d'un travail plus ancien sans réinitialisation de la température" # File: calc/dl_poly/dlp_control.c, Line: 2514 msgid "Start new simulation from older run with temperature reset" msgstr "Démarrer une nouvelle simulation à partir d'un travail plus ancien avec réinitialisation de la température" # File: calc/dl_poly/dlp_control.c, Line: 2539 msgid "Global options:" msgstr "Options globales:" # File: calc/dl_poly/dlp_control.c, Line: 2541 msgid "Restart options:" msgstr "Options de redémarrage:" # File: calc/dl_poly/dlp_control.c, Line: 2545 msgid "Intra-molecular probability denisty function (PDF) analysis:" msgstr "Analyse de la fonction de densité de probabilité intramoléculaire (PDF):" # File: calc/dl_poly/dlp_control.c, Line: 2547 msgid "Overall analysis:" msgstr "Analyse globale:" # File: calc/dl_poly/dlp_control.c, Line: 2551 msgid "van der Waals (Non-bonded short range):" msgstr "van der Waals (courte portée non-liée):" # File: calc/dl_poly/dlp_control.c, Line: 2553 msgid "Electrostatics (Non-bonded long range):" msgstr "Électrostatique (longue portée non-liée):" # File: calc/dl_poly/dlp_control.c, Line: 2555 msgid "Metallic interactions:" msgstr "Interactions métalliques:" # File: calc/dl_poly/dlp_control.c, Line: 2559 msgid "Equilibration:" msgstr "Équilibration:" # File: calc/dl_poly/dlp_control.c, Line: 2563 msgid "Thermodynamics:" msgstr "Thermodynamique:" # File: calc/dl_poly/dlp_control.c, Line: 2567 msgid "Molecular dynamics:" msgstr "Dynamique moléculaire:" # File: calc/dl_poly/dlp_control.c, Line: 2571 msgid "Output information:" msgstr "Informations de sortie:" # File: calc/dl_poly/dlp_control.c, Line: 2573 msgid "Trajectory file(s):" msgstr "Fichier(s) de trajectoire:" # File: calc/dl_poly/dlp_control.c, Line: 2575 msgid "Restart file:" msgstr "Fichier de redémarrage:" # File: calc/dl_poly/dlp_control.c, Line: 2579 msgid "Job options:" msgstr "Options du calcul:" # File: calc/dl_poly/dlp_control.c, Line: 2581 msgid "I/O options:" msgstr "Options d'E/S:" # File: calc/dl_poly/dlp_control.c, Line: 2583 msgid "Other options:" msgstr "Autres options:" # File: calc/dl_poly/dlp_edit.c, Line: 610 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Æ�i/j and r0i/j provided by the force field parameters." msgstr "Dans %s, les interactions non-liées 12-6 sont évaluées à l'aide de : \n" "%s\n" "A et B sont calculés à l'aide de Æ�i/j et r0i/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_edit.c, Line: 619 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "Dans %s, les interactions non-liées 12-6 sont évaluées à l'aide de : \n" "%s\n" "A et B sont calculés à l'aide de Ai/j et Bi/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_edit.c, Line: 686 msgid "Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !" msgstr "Etes-vous sûr de changer le type de potentiel Tersoff ?\n" "Les formes Tersoff (ter) et KIHS (kihs) ne peuvent pas être mélangés\n" "Ce choix affectera donc tous le(s) potentiel(s) de Tersoff.\n" "Tous les paramètres précédents seront effacés !" # File: calc/dl_poly/dlp_edit.c, Line: 1589 msgid "The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n" msgstr "Le ou les atomes ci-dessus seront décrits\n" "dans le champ de force en utilisant les paramètres\n" "de l'atome du champ %s.\n" # File: calc/dl_poly/dlp_edit.c, Line: 2807 msgid "* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file." msgstr "* cela servira à ajuster le collage, les angles, etc... en conséquence,\n" " à condition que certains paramètres puissent être trouvés dans les données du champ de force.\n" " Veuillez noter que les commentaires sont directement importés du fichier de champ de force." # File: calc/dl_poly/dlp_edit.c, Line: 2836 msgid "* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n" msgstr "* Paramètres disponibles avec les espèces chimiques correspondantes,\n" " Paramètres liés à l'énergie du champ de force %s dans : %s \n" " si nécessaire, la conversion en unité énergétique du fichier FIELD sera effectuée lors de la sélection.\n" " Veuillez noter que les commentaires sont directement importés du fichier de champ de force.\n" # File: calc/dl_poly/dlp_edit.c, Line: 543 msgid "Single terms:" msgstr "Termes uniques:" # File: calc/dl_poly/dlp_edit.c, Line: 579 msgid "Cross terms with atom:" msgstr "Termes croisés avec atome:" # File: calc/dl_poly/dlp_edit.c, Line: 609 # File: calc/dl_poly/dlp_field.c, Line: 1199 msgid "Tabulated" msgstr "Tableau" # File: calc/dl_poly/dlp_edit.c, Line: 618 msgid "In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options." msgstr "Dans %s, les interactions non-liées sont évaluées à l'aide de : \n%s\n" "Les paramètres fournis par le champ de force sont donc incompatibles avec les options DL-POLY." # File: calc/dl_poly/dlp_edit.c, Line: 634 # File: calc/dl_poly/dlp_ff_match.c, Line: 1038 msgid "%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored." msgstr "%s\nLes paramètres d'exclusion échelonnés 1-4, fournis par le champ de force %s, sont ignorés." # File: calc/dl_poly/dlp_edit.c, Line: 651 msgid "Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "Les termes Urey-Bradley fournis par le champ de force %s sont ignorés.\n" # File: calc/dl_poly/dlp_edit.c, Line: 669 # File: calc/dl_poly/dlp_field.c, Line: 162 msgid "External field" msgstr "Champ externe" # File: calc/dl_poly/dlp_edit.c, Line: 690 msgid "Change Tersoff potential ?!" msgstr "Changer le potentiel Tersoff ?!" # File: calc/dl_poly/dlp_edit.c, Line: 1184 msgid "Weight (1)" msgstr "Poids (1)" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field atom" msgstr "Atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field molecule(s)" msgstr "Molécule(s) de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1198 msgid "Please select the new atom(s)" msgstr "Veuillez sélectionner le ou les nouveaux atomes" # File: calc/dl_poly/dlp_edit.c, Line: 1203 msgid "Please select the atom(s) to freeze / unfreeze" msgstr "Veuillez sélectionner le(s) atome(s) à geler / dégeler" # File: calc/dl_poly/dlp_edit.c, Line: 1208 msgid "Please select the core atom" msgstr "Veuillez sélectionner l'atome de cÅ“ur" # File: calc/dl_poly/dlp_edit.c, Line: 1213 msgid "Please select the atom(s) to shell" msgstr "Veuillez sélectionner le ou les atomes de la coquille" # File: calc/dl_poly/dlp_edit.c, Line: 1218 msgid "Please select the first atom" msgstr "Veuillez sélectionner le premier atome" # File: calc/dl_poly/dlp_edit.c, Line: 1223 msgid "Please select the second atom" msgstr "Veuillez sélectionner le deuxième atome" # File: calc/dl_poly/dlp_edit.c, Line: 1228 msgid "Please select the atom(s) in the first unit" msgstr "Veuillez sélectionner le(s) atome(s) dans la première unité" # File: calc/dl_poly/dlp_edit.c, Line: 1231 msgid "Please select the atom(s) in the second unit" msgstr "Veuillez sélectionner le(s) atome(s) dans la deuxième unité" # File: calc/dl_poly/dlp_edit.c, Line: 1234 msgid "Please select the atom(s) in the rigid unit" msgstr "Veuillez sélectionner le(s) atome(s) dans l'unité rigide" # File: calc/dl_poly/dlp_edit.c, Line: 1238 msgid "Please select the tethered atom" msgstr "Veuillez sélectionner l'atome attaché" # File: calc/dl_poly/dlp_edit.c, Line: 1245 msgid "Please select the type of field atom" msgstr "Veuillez sélectionner le type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1249 msgid "Please select the first type of field atom" msgstr "Veuillez sélectionner le premier type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1253 msgid "Please select the second type of field atom" msgstr "Veuillez sélectionner le deuxième type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1256 msgid "Please select the third type of field atom" msgstr "Veuillez sélectionner le troisième type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1259 msgid "Please select the fourth type of field atom" msgstr "Veuillez sélectionner le quatrième type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1582 msgid " (1) if all 0.0 then atomic weight(s) will be used by DL-POLY" msgstr " (1) si tous 0,0 alors le(s) poids atomique(s) seront utilisés par DL-POLY" # File: calc/dl_poly/dlp_edit.c, Line: 2283 msgid "%s parameter(s)" msgstr "paramètre(s) %s" # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Core atom: " msgstr "Atome de cÅ“ur: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Shell atom: " msgstr "Atome de coquille: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Selection: " msgstr "Sélection: " # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Mass:" msgstr "Masse:" # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "First atom: " msgstr "Premier atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Second atom: " msgstr "Deuxième atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Third atom: " msgstr "Troisième atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Fourth atom: " msgstr "Quatrième atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "First unit: " msgstr "Première unité: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "Second unit: " msgstr "Deuxième unité: " # File: calc/dl_poly/dlp_edit.c, Line: 2307 msgid "\tMolecule: \t%s" msgstr "\tMolécule: \t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2317 msgid "\tAtom: \t\t%s" msgstr "\tAtome:\t\t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2330 msgid "Field parameters:" msgstr "Paramètres de champ:" # File: calc/dl_poly/dlp_edit.c, Line: 2335 # File: calc/dl_poly/dlp_ff_match.c, Line: 1563,1585 msgid "Manual" msgstr "Manuel" # File: calc/dl_poly/dlp_edit.c, Line: 2336 msgid "Automatic" msgstr "Automatique" # File: calc/dl_poly/dlp_edit.c, Line: 2343 msgid "Force field type *:" msgstr "Type de champ de force *:" # File: calc/dl_poly/dlp_edit.c, Line: 2365 msgid "Name: " msgstr "Nom: " # File: calc/dl_poly/dlp_edit.c, Line: 2383 msgid "Charge: " msgstr "Charge: " # File: calc/dl_poly/dlp_edit.c, Line: 2392 msgid "Frozen: " msgstr "Figé: " # File: calc/dl_poly/dlp_edit.c, Line: 2404 msgid "\tCore-Shell N°%d" msgstr "\tCÅ“ur-Coquille N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2443 msgid "Selected !" msgstr "Sélectionné !" # File: calc/dl_poly/dlp_edit.c, Line: 2447 msgid "%d atom(s) selected !" msgstr "%d atome(s) sélectionné(s) !" # File: calc/dl_poly/dlp_edit.c, Line: 2467 msgid "Selected Atoms" msgstr "Atomes Sélectionnés" # File: calc/dl_poly/dlp_edit.c, Line: 2511 msgid "Use non-bonded: " msgstr "Utiliser non-lié: " # File: calc/dl_poly/dlp_edit.c, Line: 2521 msgid "\tBond constraint N°%d" msgstr "\tContrainte de liaison N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2547 msgid "Av. distance (1): " msgstr "Av. distance (1): " # File: calc/dl_poly/dlp_edit.c, Line: 2576 msgid "\tMean force potential N°%d" msgstr "\tPotentiel de force moyen N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2602 msgid "Av. d1-2 (1): " msgstr "Av. d1-2 (1) : " # File: calc/dl_poly/dlp_edit.c, Line: 2632 msgid "\tRigid unit N°%d" msgstr "\tUnité rigide N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2638 msgid "Atom(s): " msgstr "Atome(s) : " # File: calc/dl_poly/dlp_edit.c, Line: 2663 msgid "\tTethered atom N°%d" msgstr "\tAtome attaché N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2669 msgid "Atom: " msgstr "Atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2704 msgid "\t%s type N°%d\n\tField atoms: " msgstr "\tN° de type %s%d\n\tAtomes de champ : " # File: calc/dl_poly/dlp_edit.c, Line: 2707 msgid "%s and " msgstr "%s et " # File: calc/dl_poly/dlp_edit.c, Line: 2716 msgid "%s\n\tBetween atoms: " msgstr "%s\n\tEntre atomes : " # File: calc/dl_poly/dlp_edit.c, Line: 2768 msgid "Tersoff atom: " msgstr "Atome de Tersoff : " # File: calc/dl_poly/dlp_edit.c, Line: 2800 msgid "Visualize in the model: " msgstr "Visualisez dans le modèle: " # File: calc/dl_poly/dlp_edit.c, Line: 2816 msgid "Use to create force field: " msgstr "Utiliser pour créer un champ de force : " # File: calc/dl_poly/dlp_edit.c, Line: 2827 # File: calc/dl_poly/dlp_ff_match.c, Line: 1012 # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "DL_POLY internal units" msgstr "Unités internes DL_POLY" # File: calc/dl_poly/dlp_edit.c, Line: 2828 msgid "Field parameters *:" msgstr "Paramètres du champ * :" # File: calc/dl_poly/dlp_edit.c, Line: 2844 msgid "Potential: " msgstr "Potentiel: " # File: calc/dl_poly/dlp_edit.c, Line: 2887 msgid " (1) average distance between the 2 atoms\n\tas measured in the 3D model" msgstr " (1) distance moyenne entre les 2 atomes\n\ttel que mesuré dans le modèle 3D" # File: calc/dl_poly/dlp_edit.c, Line: 2896 msgid " (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model" msgstr " (1) distance moyenne entre les barycentres\n\tdes unités 1 et 2 telles que mesurées dans le modèle" # File: calc/dl_poly/dlp_edit.c, Line: 3005 msgid "Please enter name for new molecule N°%d" msgstr "Veuillez saisir le nom de la nouvelle molécule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3007 msgid "Molecule name:" msgstr "Nom de la molécule:" # File: calc/dl_poly/dlp_edit.c, Line: 3017 msgid "Please enter name for molecule N°%d" msgstr "Veuillez saisir le nom de la molécule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3308 msgid "Delete %s N°%d from molecule %s, is this correct ?" msgstr "Supprimer %s N°%d de la molécule %s, est-ce correct ?" # File: calc/dl_poly/dlp_edit.c, Line: 3312 msgid "Delete %s, is this correct ?" msgstr "Supprimez %s, est-ce correct ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1014 msgid "\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n" msgstr "\t(*) Chaque élément du champ de force peut être réglé séparément, sinon ces paramètres par défaut seront utilisés.\n" "\t(1) Unité d'énergie %s : %s, si nécessaire, la conversion en unité d'énergie du fichier FIELD sera effectuée lors de la sélection.\n" "\t(2) Les paramètres de contrainte sont des doublons des paramètres sans contrainte.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Property" msgstr "Propriété" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "parameters (1)" msgstr "paramètres (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Actual parameters (1)" msgstr "Paramètres réels (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Update ?" msgstr "Mise à jour ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1020 msgid "%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "%s\t(%d) Les termes Urey-Bradley fournis par le champ de force %s sont ignorés.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 1025 msgid "%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:" msgstr "%s\t(%d) Dans %s, les interactions non-liées 12-6 sont évaluées avec:" # File: calc/dl_poly/dlp_ff_match.c, Line: 1035 msgid "%s\nA and B are calculated using Æ�i/j and r0i/j provided by the force field parameters." msgstr "%s\nA et B sont calculés à l'aide de Æ�i/j et r0i/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_ff_match.c, Line: 1043 msgid "%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "%s\nA et B sont calculés à l'aide de Ai/j et Bi/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_ff_match.c, Line: 1398 msgid "Update FIELD file with %s parameters using \"%s\" atom(s)" msgstr "Mettre à jour le fichier FIELD avec les paramètres %s à l'aide des atomes \"%s\"" # File: calc/dl_poly/dlp_ff_match.c, Line: 1568 msgid "Atom (1 and 2) %s" msgstr "Atome (1 et 2) %s" # File: calc/dl_poly/dlp_ff_match.c, Line: 1572 msgid "Atom (%d) %s" msgstr "Atome (%d) %s" # File: calc/dl_poly/dlp_field.c, Line: 1077 msgid "\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4" msgstr "\t (2) Constante de force quartique (anharmonique) du ressort cÅ“ur-coquille en [%s Å-4] " " généralement k2 >> k4" # File: calc/dl_poly/dlp_field.c, Line: 3962 msgid "\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only." msgstr "\t * dans le fichier FIELD %s(s) apparaissent dans la section %s.\n" "\t Ils sont présentés séparément dans cet assistant uniquement à des fins de clarté." # File: calc/dl_poly/dlp_field.c, Line: 4359 msgid "Providing that the force field information was already saved once\n" "the previous data could still be retrieved by canceling the assistant." msgstr "À condition que les informations sur le champ de force aient déjà été enregistrées\n" "les données précédentes sauvegardées pourront toujours être récupérées en annulant l'assistant." # File: calc/dl_poly/dlp_field.c, Line: 4818 msgid " This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point" msgstr " Cet assistant vous aidera à configurer un %s \n" "calcul en utilisant le modèle 3D %s comme point de départ" # File: calc/dl_poly/dlp_field.c, Line: 141,164 msgid "Energy unit" msgstr "Unité d'énergie" # File: calc/dl_poly/dlp_field.c, Line: 144 msgid "Core-shell unit(s)" msgstr "Unité(s) cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 145 msgid "Constraint bond(s)" msgstr "Contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 146 msgid "Mean force potential(s)" msgstr "Potentiel(s) de force moyen(s)" # File: calc/dl_poly/dlp_field.c, Line: 147 msgid "Rigid unit(s)" msgstr "Unité(s) rigide(s)" # File: calc/dl_poly/dlp_field.c, Line: 148 msgid "Tethering potential(s)" msgstr "Potentiel(s) de connexion(s)" # File: calc/dl_poly/dlp_field.c, Line: 149 msgid "Flexible chemical bond(s)" msgstr "Liaison(s) chimique(s) flexible(s)" # File: calc/dl_poly/dlp_field.c, Line: 150,932 msgid "Bond restraint(s)" msgstr "Contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 151 msgid "Bond angle(s)" msgstr "Angle(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 152 msgid "Angular restraint(s)" msgstr "Contrainte(s) angulaire(s)" # File: calc/dl_poly/dlp_field.c, Line: 153 msgid "Dihedral angle(s)" msgstr "Angle(s) dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 154,936 msgid "Torsional restraint(s)" msgstr "Contrainte(s) de torsion" # File: calc/dl_poly/dlp_field.c, Line: 155 msgid "Improper angle(s)" msgstr "Angle(s) impropre" # File: calc/dl_poly/dlp_field.c, Line: 156 msgid "Inversion angle(s)" msgstr "Angle(s) d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 157 msgid "van der Waals potential(s)" msgstr "potentiel(s) de van der Waals" # File: calc/dl_poly/dlp_field.c, Line: 158 msgid "Metal potential(s)" msgstr "Potentiel(s) métallique(s)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Tersoff Potential(s)" msgstr "Potentiel(s) de Tersoff" # File: calc/dl_poly/dlp_field.c, Line: 160 msgid "Three-body potential(s)" msgstr "Potentiel(s) à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 161 msgid "Four-body potential(s)" msgstr "Potentiel(s) à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 167 msgid "Core-shell unit" msgstr "Unité cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 168 msgid "Constraint bond" msgstr "Contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 169 msgid "Mean force potential" msgstr "Potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 170 msgid "Rigid unit" msgstr "Unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 171 msgid "Tethering potential" msgstr "Potentiel de connexion" # File: calc/dl_poly/dlp_field.c, Line: 172 msgid "Flexible chemical bond" msgstr "Liaison chimique flexible" # File: calc/dl_poly/dlp_field.c, Line: 173,932 msgid "Bond restraint" msgstr "Contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 174 msgid "Bond angle" msgstr "Angle de liaison" # File: calc/dl_poly/dlp_field.c, Line: 175 msgid "Angular restraint" msgstr "Contrainte angulaire" # File: calc/dl_poly/dlp_field.c, Line: 176 msgid "Dihedral angle" msgstr "Angle dièdre" # File: calc/dl_poly/dlp_field.c, Line: 177,936 msgid "Torsional restraint" msgstr "Contrainte de torsion" # File: calc/dl_poly/dlp_field.c, Line: 178 msgid "Improper angle" msgstr "Angle impropre" # File: calc/dl_poly/dlp_field.c, Line: 179 msgid "Inversion angle" msgstr "Angle d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 180,202 msgid "van der Waals potential" msgstr "potentiel de van der Waals" # File: calc/dl_poly/dlp_field.c, Line: 158,181 msgid "Metal potential" msgstr "Potentiel métallique" # File: calc/dl_poly/dlp_field.c, Line: 182,204 msgid "Tersoff Potential" msgstr "Potentiel de Tersoff" # File: calc/dl_poly/dlp_field.c, Line: 183 msgid "Three-body potential" msgstr "Potentiel à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 184 msgid "Four-body potential" msgstr "Potentiel à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit(s)" msgstr "unité(s) cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond(s)" msgstr "contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential(s)" msgstr "potentiel(s) de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit(s)" msgstr "unité(s) rigide(s)" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential(s)" msgstr "potentiel(s) d'attache" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond(s)" msgstr "liaison(s) chimique(s) flexible(s)" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint(s)" msgstr "contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle(s)" msgstr "angle(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint(s)" msgstr "contrainte(s) angulaire(s)" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle(s)" msgstr "angle(s) dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint(s)" msgstr "contrainte(s) de torsion(s)" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle(s)" msgstr "angle(s) impropre(s)" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle(s)" msgstr "angle(s) d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential(s)" msgstr "potentiel métallique(s)" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential(s)" msgstr "potentiel(s) à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential(s)" msgstr "potentiel(s) à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field(s)" msgstr "champ(s) externe(s)" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit" msgstr "unité cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond" msgstr "contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential" msgstr "potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit" msgstr "unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential" msgstr "potentiel d'attache" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond" msgstr "liaison chimique flexible" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint" msgstr "contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle" msgstr "angle de liaison" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint" msgstr "contrainte angulaire" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle" msgstr "angle dièdre" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint" msgstr "contrainte de torsion" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle" msgstr "angle impropre" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle" msgstr "angle d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential" msgstr "potentiel métallique" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential" msgstr "potentiel à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential" msgstr "potentiel à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field" msgstr "champ externe" # File: calc/dl_poly/dlp_field.c, Line: 231 msgid "of molecule(s)" msgstr "de molécule(s)" # File: calc/dl_poly/dlp_field.c, Line: 232 msgid "of atom(s)" msgstr "d'atome(s)" # File: calc/dl_poly/dlp_field.c, Line: 233 msgid "of core-shell unit(s)" msgstr "d'unité(s) cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 234 msgid "of constraint bond(s)" msgstr "de contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 235 msgid "of mean force potential(s)" msgstr "de potentiel(s) de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 236 msgid "of rigid unit(s)" msgstr "d'unité(s) rigide(s)" # File: calc/dl_poly/dlp_field.c, Line: 237 msgid "of tethering potential(s)" msgstr "de potentiel(s) d'attache" # File: calc/dl_poly/dlp_field.c, Line: 238 msgid "of flexible chemical bond(s)" msgstr "de liaison(s) chimique(s) flexible(s)" # File: calc/dl_poly/dlp_field.c, Line: 239 msgid "of bond restraint(s)" msgstr "de contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 240 msgid "of bond angle(s)" msgstr "d'angle(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 241 msgid "of angular restraint(s)" msgstr "de contrainte(s) angulaire(s)" # File: calc/dl_poly/dlp_field.c, Line: 242 msgid "of dihedral angle(s)" msgstr "d'angle(s) dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 243 msgid "of torsional restraint(s)" msgstr "de contrainte(s) de torsion(s)" # File: calc/dl_poly/dlp_field.c, Line: 244 msgid "of improper angle(s)" msgstr "d'angle(s) impropre(s)" # File: calc/dl_poly/dlp_field.c, Line: 245 msgid "of inversion angle(s)" msgstr "d'angle(s) d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 247 msgid "of metal potential(s)" msgstr "de potentiel métallique(s)" # File: calc/dl_poly/dlp_field.c, Line: 249 msgid "of three-body potential(s)" msgstr "de potentiel(s) à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 250 msgid "of four-body potential(s)" msgstr "de potentiel(s) à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 251 msgid "of external field(s)" msgstr "de champ(s) externe(s)" # File: calc/dl_poly/dlp_field.c, Line: 253 msgid "of the molecule" msgstr "de la molécule" # File: calc/dl_poly/dlp_field.c, Line: 254 msgid "of the atom" msgstr "de l'atome" # File: calc/dl_poly/dlp_field.c, Line: 255 msgid "of the core-shell unit" msgstr "de l'unité cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 256 msgid "of the constraint bond" msgstr "de la contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 257 msgid "of the mean force potential" msgstr "du potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 258 msgid "of the rigid unit" msgstr "de l'unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 259 msgid "of the tethering potential" msgstr "du potentiel d'attache" # File: calc/dl_poly/dlp_field.c, Line: 260 msgid "of the flexible chemical bond" msgstr "de la liaison chimique flexible" # File: calc/dl_poly/dlp_field.c, Line: 261 msgid "of the bond restraint" msgstr "de la contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 262 msgid "of the bond angle" msgstr "de l'angle de liaison" # File: calc/dl_poly/dlp_field.c, Line: 263 msgid "of the angular restraint" msgstr "de la contrainte angulaire" # File: calc/dl_poly/dlp_field.c, Line: 264 msgid "of the dihedral angle" msgstr "de l'angle dièdre" # File: calc/dl_poly/dlp_field.c, Line: 265 msgid "of the torsional restraint" msgstr "de la contrainte de torsion" # File: calc/dl_poly/dlp_field.c, Line: 266 msgid "of the improper angle" msgstr "de l'angle impropre" # File: calc/dl_poly/dlp_field.c, Line: 267 msgid "of the inversion angle" msgstr "de l'angle d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 269 msgid "of the metal potential" msgstr "du potentiel métallique" # File: calc/dl_poly/dlp_field.c, Line: 271 msgid "of the three-body potential" msgstr "du potentiel à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 272 msgid "of the four-body potential" msgstr "du potentiel à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 273 msgid "of the external field" msgstr "du champ externe" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Electron-Volts" msgstr "Électrons-volts" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-calories per mol" msgstr "k-calories par mole" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-Joules per mol" msgstr "k-Joules par mol" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Kelvin per Boltzmann" msgstr "Kelvin pour Boltzmann" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Harmonic" msgstr "Harmonique" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Restraint" msgstr "Retenue" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Quartic" msgstr "Quartique" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Shifted FENE" msgstr "FENE décalé" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "MM3 bond stretch" msgstr "Étirement de la liaison MM3" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Tabulated" msgstr "Tabulé" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated harmonic" msgstr "Harmonique tronquée" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened harmonic" msgstr "Harmonique filtrée" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened Vessal" msgstr "Navire blindé" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated Vessal" msgstr "Navire tronqué" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Harmonic cosine" msgstr "Cosinus harmonique" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Cosine" msgstr "Cosinus" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 stretch-bend" msgstr "MM3 étirable-plié" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-stretch" msgstr "Boussole extensible-étirable" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-bend" msgstr "Boussole extensible-courbée" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass all terms" msgstr "Compas tous les termes" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 angle bend" msgstr "Coude d'angle MM3" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Triple cosine" msgstr "Triple cosinus" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Fluorinated Ryckaert-Bellemans" msgstr "Ryckaert-Bellemans fluoré" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "OPLS torsion" msgstr "Torsion OPLS" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Planar" msgstr "Planaire" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Extended Planar" msgstr "Planaire étendu" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Calcite" msgstr "calcite" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "LJ cohesive" msgstr "LJ cohérent" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "12-10 H-bond" msgstr "12-10 H-liaison" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted force n-m" msgstr "Force décalée n-m" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted Weeks-Chandler-Anderson" msgstr "Semaines décalées-Chandler-Anderson" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Standard DPD" msgstr "DPD standard" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "14-7 buffered AMOEBA FF" msgstr "AMOEBA FF tamponné 14-7" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Morse modified" msgstr "Morse modifié" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Morse" msgstr "ZBL mélangé avec Morse" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Buckingham" msgstr "ZBL mélangé avec Buckingham" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Lennard-Jones tapered with MDF" msgstr "Lennard-Jones effilé avec MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Buckingham tapered with MDF" msgstr "Buckingham effilé avec MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "12-6 Lennard-Jones tapered with MDF" msgstr "12-6 Lennard-Jones effilé avec MDF" # File: calc/dl_poly/dlp_field.c, Line: 320 msgid "Extended Finis-Sinclair" msgstr "Finis-Sinclair étendu" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "H-bond" msgstr "Liaison H" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Electric field" msgstr "Champ électrique" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Oscillating Shear" msgstr "Cisaille oscillante" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Continuous Shear" msgstr "Cisaillement continu" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Gravitational field" msgstr "Champ gravitationnel" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Magnetic field" msgstr "Champ magnétique" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Containing Sphere" msgstr "Sphère contenante" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Repulsive Wall" msgstr "Mur répulsif" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "X-Piston" msgstr "X-Piston" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Molecule in HR Zone" msgstr "Molécule dans la zone HR" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull out)" msgstr "Zone HR (retirable)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull in)" msgstr "Zone RH (tirez-vous)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Osc. Electric Field" msgstr "Osc. Champ électrique" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Umbrella sampling, harm. constant" msgstr "Échantillonnage de parapluie, préjudice. constante" # File: calc/dl_poly/dlp_field.c, Line: 291 msgid "electron" msgstr "électron" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "COMPASS class2 force field" msgstr "Champ de force COMPASS classe 2" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic (FENE)" msgstr "Élastique non-linéaire extensible fini (FENE)" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "FENE with variable size particles" msgstr "FENE à particules de taille variable" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "GROMOS force field" msgstr "Champ de force GROMOS" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted harmonic" msgstr "Harmonique décalée" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted truncated harmonic" msgstr "Harmonique tronquée décalée" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "MM3 anharmonic" msgstr "MM3 anharmonique" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Nonlinear" msgstr "Non linéaire" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic DNA" msgstr "ADN élastique non-linéaire extensible fini" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic DNA (2)" msgstr "ADN élastique non-linéaire extensible fini (2)" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic RNA" msgstr "ARN élastique non-linéaire extensible fini" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Breakable quartic" msgstr "Quartique cassable" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Special bond exclusions for 1-5 pairs and beyond" msgstr "Exclusions spéciales de liaison pour paires 1-5 et au-delà" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "CHARMM force field" msgstr "Champ de force CHARMM" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "COMPASS class2 force field - 6th order" msgstr "Champ de force COMPASS classe 2 - 6ème ordre" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with Buckingham term between 1-3" msgstr "Cosinus avec terme de Buckingham entre 1 et 3" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Difference of cosines" msgstr "Différence de cosinus" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "DREIDING force field" msgstr "Champ de force DREIDING" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift" msgstr "Cosinus avec un décalage" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift and exponential term in spring" msgstr "Cosinus avec décalage et terme exponentiel au printemps" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cosine with squared term" msgstr "Cosinus avec terme carré" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cross term coupling angle and bond length" msgstr "Angle de couplage des termes croisés et longueur de liaison" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Dipole orientation" msgstr "Orientation dipolaire" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (multiple cosines)" msgstr "Fourier (cosinus multiples)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (single cosine)" msgstr "Fourier (cosinus simple)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Combination of the harmonic (SDK)" msgstr "Combinaison de l'harmonique (SDK)" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "CHARMM force field with force switching" msgstr "Champ de force CHARMM avec commutation de force" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Helix" msgstr "Hélix" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Harmonic with 5 terms" msgstr "Harmonique à 5 termes" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Harmonic with N terms" msgstr "Harmonique avec N termes" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "OPLS force field" msgstr "Champ de force OPLS" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Quadratic" msgstr "Quadratique" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Spherical" msgstr "Sphérique" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Tabulated with analytic cutoff" msgstr "Tabulé avec seuil analytique" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Cosine squared" msgstr "Cosinus carré" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "CVFF force field" msgstr "Champ de force CVFF" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Distance between atom planes" msgstr "Distance entre les plans atomiques" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Out-of-the plane distance" msgstr "Distance hors du plan" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Planar conformation" msgstr "Forme planaire" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Squared distance harmonic" msgstr "Harmonique de distance carrée" # File: calc/dl_poly/dlp_field.c, Line: 337 msgid "Harmonic with Wilson Decius out-of-plane" msgstr "Harmonique avec Wilson Decius hors plan" # File: calc/dl_poly/dlp_field.c, Line: 427,499 msgid "Interpolation style" msgstr "Style d'interpolation" # File: calc/dl_poly/dlp_field.c, Line: 555 msgid "weighting factor" msgstr "facteur de pondération" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. 3D" msgstr "Vue. 3D" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. Atom num." msgstr "Vue Numéro d'Atome." # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Mass" msgstr "Masse" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Charge" msgstr "Charge" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Frozen" msgstr "Congelé" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Core Id" msgstr "Identifiant de base" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Shell" msgstr "Coquille" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Use (3)" msgstr "Utiliser (3)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1 Id" msgstr "At.1 Identifiant" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2 Id" msgstr "At.2 Identifiant" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Length [Ã…]" msgstr "Longueur [Ã…]" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "av. d [Ã…] (1)" msgstr "av. d [Ã…] (1)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Use (2)" msgstr "Utiliser (2)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "av. d12 [Ã…] (1)" msgstr "av. d12 [Ã…] (1)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Unit Id" msgstr "Identifiant de l'unité" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "At. Id" msgstr "À. Identifiant" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Weight (2)" msgstr "Poids (2)" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Atom(s) in unit" msgstr "Atome(s) dans l'unité" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "List of atom(s)" msgstr "Liste des atomes" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Use (1)" msgstr "Utiliser (1)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Potential" msgstr "Potentiel" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1" msgstr "À.1" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2" msgstr "À.2" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "At.3" msgstr "À.3" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "At.4" msgstr "À.4" # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "At.1*" msgstr "À.1*" # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "At.2*" msgstr "À.2*" # File: calc/dl_poly/dlp_field.c, Line: 931 msgid "Potential (3)" msgstr "Potentiel (3)" # File: calc/dl_poly/dlp_field.c, Line: 348 msgid "Angle(s)" msgstr "Angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "av. θ [°] (1)" msgstr "av. θ [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 350 msgid "Dihedral(s)" msgstr "Dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "av. Ï• [°] (1)" msgstr "av. Ï• [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 352 msgid "Improper(s)" msgstr "Impropre(s)" # File: calc/dl_poly/dlp_field.c, Line: 353 msgid "Inversion(s)" msgstr "Inversion(s)" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.1" msgstr "Spéc.1" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.2" msgstr "Spéc.2" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "VdW potential" msgstr "Potentiel VdW" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At." msgstr "À." # File: calc/dl_poly/dlp_field.c, Line: 941 msgid "Tersoff Pot." msgstr "Pot Tersoff." # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "Three-body Pot." msgstr "Pot à trois corps." # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "Four-body Pot." msgstr "Pot à quatre corps." # File: calc/dl_poly/dlp_field.c, Line: 944 msgid "Field type" msgstr "Type de champ" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle" msgstr "Angle" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle restraint" msgstr "Retenue d'angle" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "Dihedral" msgstr "Dièdre" # File: calc/dl_poly/dlp_field.c, Line: 937 msgid "Improper" msgstr "Incorrect" # File: calc/dl_poly/dlp_field.c, Line: 938 msgid "Inversion" msgstr "Inversion" # File: calc/dl_poly/dlp_field.c, Line: 1160 msgid "\t (1) Force constant of the core-shell spring in [%s Å-2]" msgstr "\t (1) Constante de force du ressort cÅ“ur-coquille en [%s Å-2]" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s (%s)" msgstr "Par défaut : %s (%s)" # File: calc/dl_poly/dlp_field.c, Line: 1766 msgid "the %d different fragment(s) in molecule %s\n" msgstr "le(s) %d fragment(s) différent(s) dans la molécule %s\n" # File: calc/dl_poly/dlp_field.c, Line: 1771 msgid "the system\n" msgstr "le système\n" # File: calc/dl_poly/dlp_field.c, Line: 1777 msgid "%seach contains the following %d type(s) of atom" msgstr "%scontient le(s) %d type(s) d'atome suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1782 msgid "%sdo not contains any core-shell unit" msgstr "%sne contient aucune unité cÅ“ur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 1786 msgid "%seach contains the following %d core-shell unit" msgstr "%scontient l'unité cÅ“ur-coquille %d suivante" # File: calc/dl_poly/dlp_field.c, Line: 1792 msgid "%sdo not contains any constraint" msgstr "%sne contient aucune contrainte" # File: calc/dl_poly/dlp_field.c, Line: 1796 msgid "%seach contains the following %d constraint(s)" msgstr "%scontient la ou les %d contrainte(s) suivante(s)" # File: calc/dl_poly/dlp_field.c, Line: 1802 msgid "%sdo not contains any mean force potential" msgstr "%sne contient aucun potentiel de force moyenne" # File: calc/dl_poly/dlp_field.c, Line: 1806 msgid "%seach contains the following %d type(s) of mean force potential(s)" msgstr "%scontient le(s) type(s) %d de potentiel(s) de force moyenne suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1812 msgid "%sdo not contains any rigid unit" msgstr "%sne contient aucune unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 1816 msgid "%seach contains the following %d rigid unit(s)" msgstr "%scontient le(s) %d unité(s) rigide(s) suivante(s)" # File: calc/dl_poly/dlp_field.c, Line: 1822 msgid "%sdo not contains any tethering potential(s)" msgstr "%sne contient aucun potentiel de partage de connexion" # File: calc/dl_poly/dlp_field.c, Line: 1826 msgid "%seach contains the following %d tethering potential(s)" msgstr "%seach contient le(s) potentiel(s) de connexion %d suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1832 msgid "the force field do not contains any external field(s)" msgstr "le champ de force ne contient aucun champ externe" # File: calc/dl_poly/dlp_field.c, Line: 1836 msgid "the force field contains the following %d external field(s)" msgstr "le champ de force contient le(s) champ(s) externe(s) %d suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s *" msgstr "%sne contient aucun %s *" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s *" msgstr "%s contient les %d type(s) suivant(s) %s *" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s" msgstr "%sne contient aucun %s" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s" msgstr "%s contient le(s) type(s) %d suivants %s" # File: calc/dl_poly/dlp_field.c, Line: 1871 msgid "the force field do not contains any %s" msgstr "le champ de force ne contient aucun %s" # File: calc/dl_poly/dlp_field.c, Line: 1875 msgid "the force field contains the following %d %s" msgstr "le champ de force contient les %d %s suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 2202 msgid "Change energy unit ?" msgstr "Changer d'unité d'énergie ?" # File: calc/dl_poly/dlp_field.c, Line: 2203 msgid "Yes" msgstr "Oui" # File: calc/dl_poly/dlp_field.c, Line: 2206 msgid "Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly." msgstr "Changer l'unité d'énergie ?\nLa valeur de tous les paramètres de champ liés à l'énergie (répertoriés ci-dessous) sera mise à l'échelle en conséquence." # File: calc/dl_poly/dlp_field.c, Line: 2207 msgid "List of energy related parameters in your FIELD file:\n" msgstr "Liste des paramètres liés à l'énergie dans votre fichier FIELD :\n" # File: calc/dl_poly/dlp_field.c, Line: 2322 msgid "Please select the %s:" msgstr "Veuillez sélectionner le %s :" # File: calc/dl_poly/dlp_field.c, Line: 2340 msgid "Please select the component(s) of the force field:" msgstr "Veuillez sélectionner le(s) composant(s) du champ de force :" # File: calc/dl_poly/dlp_field.c, Line: 2343 msgid " Intra-molecular interaction(s):" msgstr " Interaction(s) intra-moléculaire(s) :" # File: calc/dl_poly/dlp_field.c, Line: 2345 msgid "Use multiple molecule(s)" msgstr "Utiliser plusieurs molécules" # File: calc/dl_poly/dlp_field.c, Line: 2360 msgid "Use %s" msgstr "Utiliser %s" # File: calc/dl_poly/dlp_field.c, Line: 2371 msgid "Non-bonded interaction(s)" msgstr "Interactions non-liées" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s" msgstr "Par défaut : %s" # File: calc/dl_poly/dlp_field.c, Line: 2564 msgid "Atom N°%d: \"%s\"" msgstr "Atome N°%d : \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2664 msgid "Core-Shell N°%d: Atom %d (%s) - " msgstr "CÅ“ur-Coquille N°%d: Atome %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2669 msgid "Core-Shell N°%d: %s - " msgstr "CÅ“ur-Coque N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2690 msgid "Constrained Bond N°%d: Atom %d (%s) - " msgstr "Liaison contrainte N°%d: Atome %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2695 msgid "Constrained Bond N°%d: %s - " msgstr "Liaison contrainte N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2713 msgid "Mean Force Potential N°%d" msgstr "Potentiel de Force Moyenne N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2721 msgid "Rigid Unit N°%d: %d Atom(s)" msgstr "Unité rigide N°%d : %d Atome(s)" # File: calc/dl_poly/dlp_field.c, Line: 2729 msgid "Tethering Potential N°%d" msgstr "Potentiel de connexion N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2767 msgid "%s - NONE" msgstr "%s - AUCUN" # File: calc/dl_poly/dlp_field.c, Line: 2709 msgid "Edit Name: \"%s\"" msgstr "Éditer le Nom : \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2801 msgid "Edit properties %s" msgstr "Éditer les propriétés %s" # File: calc/dl_poly/dlp_field.c, Line: 2817 msgid "Add a new %s" msgstr "Ajouter un nouveau %s" # File: calc/dl_poly/dlp_field.c, Line: 2831 msgid "Remove %s" msgstr "Supprimer %s" # File: calc/dl_poly/dlp_field.c, Line: 2958 msgid "Add new molecule" msgstr "Ajouter une nouvelle molécule" # File: calc/dl_poly/dlp_field.c, Line: 2967 msgid "Remove molecule %s from force field" msgstr "Supprimer la molécule %s du champ de force" # File: calc/dl_poly/dlp_field.c, Line: 2983 msgid "Created new force field atom from %s atom(s)" msgstr "Création d'un nouvel atome de champ de force à partir de %s" # File: calc/dl_poly/dlp_field.c, Line: 2998 msgid "Remove atom %s from force field molecule" msgstr "Supprimer l'atome %s de la molécule du champ de force" # File: calc/dl_poly/dlp_field.c, Line: 3699 msgid "Parameter(s)" msgstr "Paramètres" # File: calc/dl_poly/dlp_field.c, Line: 3867 msgid "Please select molecule: " msgstr "Veuillez sélectionner une molécule: " # File: calc/dl_poly/dlp_field.c, Line: 3898 msgid "Number of isolated molecular fragments: " msgstr "Nombre de fragments moléculaires isolés: " # File: calc/dl_poly/dlp_field.c, Line: 3902 msgid "\tEach of these fragments can be described separately in the force field." msgstr "\tChacun de ces fragments peut être décrit séparément dans le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 3905 msgid "Number of distinct molecules: " msgstr "Nombre de molécules distinctes: " # File: calc/dl_poly/dlp_field.c, Line: 3909 msgid "Number of molecules in the force field: " msgstr "Nombre de molécules dans le champ de force: " # File: calc/dl_poly/dlp_field.c, Line: 3935,3939 msgid "Properties %s: " msgstr "Propriétés %s: " # File: calc/dl_poly/dlp_field.c, Line: 3969 msgid "\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4." msgstr "\t * le potentiel sera calculé par la somme des 3 termes d'inversion possibles entre les atomes 1 (centre), 2, 3 et 4." # File: calc/dl_poly/dlp_field.c, Line: 3973 msgid "\t (1) average value for the force field element as measured in the model." msgstr "\t (1) valeur moyenne de l'élément du champ de force telle que mesurée dans le modèle." # File: calc/dl_poly/dlp_field.c, Line: 3976 msgid "\t (2) only the selected element(s) will be used to create the force field." msgstr "\t (2) seuls les éléments sélectionnés seront utilisés pour créer le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 3979 msgid "\t (3) each force field element can be tuned separately, if not the Default parameters will be used." msgstr "\t (3) chaque élément du champ de force peut être réglé séparément, sinon les paramètres Par défaut seront utilisés." # File: calc/dl_poly/dlp_field.c, Line: 3991 msgid "\t (3) only the selected element(s) will be used to create the force field." msgstr "\t (3) seuls les éléments sélectionnés seront utilisés pour créer le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 4006 msgid "\t (1) average distance between the barycenters of units 1 and 2 as measured in the model." msgstr "\t (1) distance moyenne entre les barycentres des unités 1 et 2 telle que mesurée dans le modèle." # File: calc/dl_poly/dlp_field.c, Line: 4009 msgid "\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY." msgstr "\t (2) si tous 0,0 alors le(s) poids atomique(s) seront utilisés par DL-POLY." # File: calc/dl_poly/dlp_field.c, Line: 4018 msgid "\t (1) only the selected element(s) will be used to create the force field." msgstr "\t (1) seuls les éléments sélectionnés seront utilisés pour créer le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 4295 msgid "Initialize force field using: " msgstr "Créez le champ de force avec: " # File: calc/dl_poly/dlp_field.c, Line: 4355 msgid "Clean all force field parameter(s) ?" msgstr "Nettoyer tous les paramètres du champ de force ?" # File: calc/dl_poly/dlp_field.c, Line: 4430 msgid "Select the component(s) of the force field" msgstr "Composante(s) du champ de force" # File: calc/dl_poly/dlp_field.c, Line: 4444 msgid " Finalize the creation of the %s input file(s) now !" msgstr " Finalisez la création du ou des fichiers d'entrée %s maintenant !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the LAMMPS input file(s) now !" msgstr "Créez le(s) fichier(s) d'entrée LAMMPS maintenant !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the DL-POLY input file(s) now !" msgstr "Créez le(s) fichier(s) d'entrée DL-POLY maintenant !" # File: calc/dl_poly/dlp_field.c, Line: 4457 msgid "Atomic Species as Field Atoms" msgstr "Espèces Chimiques comme Atomes de Champ" # File: calc/dl_poly/dlp_field.c, Line: 4458 msgid "Atomic Species and Total Coordinations as Field Atoms" msgstr "Espèces Chim. et Coord. Totales comme Atomes de Champ" # File: calc/dl_poly/dlp_field.c, Line: 4459 msgid "Atomic Species and Partial Coordinations as Field Atoms" msgstr "Espèces Chim. et Coord. Partielles comme Atomes de Champ" # File: calc/dl_poly/dlp_field.c, Line: 4499 msgid "Force field was initialized using: " msgstr "Le champ de force créé avec: " # File: calc/dl_poly/dlp_field.c, Line: 4558 msgid "Please select the force field first !" msgstr "Veuillez d'abord sélectionner le champ de force !" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "LAMMPS files preview" msgstr "Aperçu des fichiers LAMMPS" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "DL-POLY files preview" msgstr "Aperçu des fichiers DL-POLY" # File: calc/dl_poly/dlp_field.c, Line: 4674 msgid "%s file found in '%s'\nreplace existing %s file ?" msgstr "Fichier %s trouvé dans '%s'\nremplacer le fichier %s existant ?" # File: calc/dl_poly/dlp_field.c, Line: 4675 msgid "Replace file ?" msgstr "Remplacer le fichier ?" # File: calc/dl_poly/dlp_field.c, Line: 4812 msgid "%s calculation assistant" msgstr "assistant de calcul %s" # File: calc/dl_poly/dlp_field.c, Line: 4822 msgid "Force field: " msgstr "Champ de force: " # File: calc/dl_poly/dlp_field.c, Line: 4856 msgid "\tDelete the existing force field data and reset the parameters to the default values" msgstr "\tSupprimez les données du champ de force existantes et réinitialisez les paramètres aux valeurs par défaut" # File: calc/dl_poly/dlp_field.c, Line: 4862 msgid "\tPrepare the CONTROL file to describe the calculation" msgstr "\tPréparer le fichier CONTROL pour décrire le calcul" # File: calc/dl_poly/dlp_field.c, Line: 4864 msgid "\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model" msgstr "\tPréparez les fichiers FIELD et CONFIG pour décrire le champ de force et le modèle à l'échelle atomique" # File: calc/dl_poly/dlp_field.c, Line: 4869 msgid "\tPrepare the LAMMPS Input to describe the calculation" msgstr "\tPréparez l'entrée LAMMPS pour décrire le calcul" # File: calc/dl_poly/dlp_field.c, Line: 4871 msgid "\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model" msgstr "\tPréparez le fichier LAMMPS Atom pour décrire le champ de force et le modèle à l'échelle atomique" # File: calc/dl_poly/dlp_mol.c, Line: 89 msgid "The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "La description de l'atome %s sera supprimée\n" "et fusionné avec celui de l'atome de champ sélectionné.\n" "Les objets de champ utilisant l'atome %s seront également supprimés\n" "et le ou les paramètres du champ de force seront mis à jour en conséquence." # File: calc/dl_poly/dlp_mol.c, Line: 105 msgid "The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "La description de l'atome %s sera supprimée\n" "et fusionné avec celui de l'atome de champ %s\n" "Les objets de champ utilisant l'atome %s seront également supprimés\n" "et le ou les paramètres du champ de force seront mis à jour en conséquence." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of the selected molecule." msgstr "La description de la molécule %s sera supprimée\net fusionné avec celui de la molécule sélectionnée." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of molecule %s" msgstr "La description de la molécule %s sera supprimée\net fusionné avec celui de la molécule %s" # File: calc/dl_poly/dlp_mol.c, Line: 339 msgid "%s\nConfirm this choice and create a new field molecule to describe these fragments ?" msgstr "%s\nConfirmer ce choix et créer une nouvelle molécule de champ pour décrire ces fragments ?" # File: calc/dl_poly/dlp_mol.c, Line: 344 msgid "%s\nConfirm this choice and create a new field molecule to describe this fragment ?" msgstr "%s\nConfirmer ce choix et créer une nouvelle molécule de champ pour décrire ce fragment ?" # File: calc/dl_poly/dlp_mol.c, Line: 470 msgid "Please select the fragment(s) of the new molecule" msgstr "Veuillez sélectionner le(s) fragment(s) de la nouvelle molécule" # File: calc/dl_poly/dlp_mol.c, Line: 753 msgid "Select the molecule to merge molecule \"%s\" with" msgstr "Sélectionnez la molécule avec laquelle fusionner la molécule \"%s\"" # File: calc/dl_poly/dlp_print.c, Line: 1433 msgid "# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n" msgstr "# - %d atomes\n" "# - %d fragments moléculaires isolés\n" "# - %d molécules distinctes\n" # File: calc/dl_poly/dlp_print.c, Line: 1421 msgid "# This file was created using %s\n" msgstr "# Ce fichier a été créé en utilisant %s\n" # File: calc/dl_poly/dlp_print.c, Line: 1424 msgid "# %s contains:\n" msgstr "# %s contient:\n" # File: calc/dl_poly/dlp_print.c, Line: 1439 msgid "# Energy unit:\n" msgstr "# Unité énergétique:\n" # File: calc/dl_poly/dlp_print.c, Line: 1444 msgid "# Number of field molecules:\n" msgstr "# Nombre de molécules de champ:\n" # File: calc/dl_poly/dlp_print.c, Line: 1452 msgid "# Begin molecule %d\n" msgstr "# Début de la molécule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1456 msgid "# End molecule %d\n" msgstr "# Fin de la molécule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "van der Walls pair" msgstr "paire de van der Walls" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "metal" msgstr "métal" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "three-body" msgstr "à trois corps" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "four-body" msgstr "quatre corps" # File: calc/dl_poly/dlp_print.c, Line: 1478 msgid "# Non-bonded: %s potential(s)\n" msgstr "# Non lié : %s potentiel(s)\n" # File: calc/dl_poly/dlp_print.c, Line: 1596 msgid "# DL-POLY CONFIG file created by %s, %s - %d atoms\n" msgstr "# Fichier DL-POLY CONFIG créé par %s, %s - %d atomes\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature in K\n" msgstr "# Température cible en K\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps\n" msgstr "# Nombre d'étapes MD\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Integration time step in ps\n" msgstr "# Pas de temps d'intégration en ps\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target presssure in k atms\n" msgstr "# Pression cible en k atms\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature" msgstr "# Température cible" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps" msgstr "# Nombre d'étapes MD" # File: calc/dl_poly/dlp_print.c, Line: 1675 msgid "# MD time step d(t)" msgstr "# MD pas de temps d(t)" # File: calc/dl_poly/dlp_print.c, Line: 1711 msgid "\n# Ignore particle indices from CONFIG file and set indices by order of reading" msgstr "\n# Ignorer les indices de particules du fichier CONFIG et définir les indices par ordre de lecture" # File: calc/dl_poly/dlp_print.c, Line: 1712 msgid "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters" msgstr "\n# Ignorer les contrôles stricts lors de la lecture du fichier CONFIG, des messages d'avertissement et supposer des paramètres de simulation sûrs" # File: calc/dl_poly/dlp_print.c, Line: 1713 msgid "\n# Skip detailed topology reporting when reading FIELD file" msgstr "\n# Ignorer les rapports de topologie détaillés lors de la lecture du fichier FIELD" # File: calc/dl_poly/dlp_print.c, Line: 1714 msgid "\n# Ignore center of mass momentum removal during the simulation" msgstr "\n# Ignorer la suppression de l'impulsion du centre de masse pendant la simulation" # File: calc/dl_poly/dlp_print.c, Line: 1715 msgid "\n# Tolerance for the relaxed shell model\n" msgstr "\n# Tolérance pour le modèle coque relax\n" # File: calc/dl_poly/dlp_print.c, Line: 1716 msgid "\n# Subcelling threshold density of particle per link cell\n" msgstr "\n# Densité seuil de sous-cellule de particule par cellule de liaison\n" # File: calc/dl_poly/dlp_print.c, Line: 1717 msgid "\n# Create an expanded version of the current model\n" msgstr "\n# Créer une version étendue du modèle actuel\n" # File: calc/dl_poly/dlp_print.c, Line: 1718 msgid "\n# Restart job from previous run: " msgstr "\n# Redémarrez le travail depuis l'exécution précédente: " # File: calc/dl_poly/dlp_print.c, Line: 1721 msgid "\n# Continue current simulation - require REVOLD file" msgstr "\n# Continuer la simulation en cours - nécessite le fichier REVOLD" # File: calc/dl_poly/dlp_print.c, Line: 1722 msgid "\n# Start new simulation from older run without temperature reset" msgstr "\n# Démarrer une nouvelle simulation à partir d'une ancienne exécution sans réinitialisation de la température" # File: calc/dl_poly/dlp_print.c, Line: 1723 msgid "\n# Start new simulation from older run with temperature reset" msgstr "\n# Démarrer une nouvelle simulation à partir d'une ancienne exécution avec réinitialisation de la température" # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job time to " msgstr "\n\n# Heure de début du calcul " # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job closure time to " msgstr "\n\n# Heure de fin du calcul " # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O read interface, with:\n" msgstr "\n# Interface de lecture E/S, avec:\n" # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O write interface, with:\n" msgstr "\n# Interface d'écriture E/S, avec:\n" # File: calc/dl_poly/dlp_print.c, Line: 1918 msgid "# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n" msgstr "# Fichier DL-POLY CONTROL créé par %s, %s - %d atoms\n\n" # File: calc/dl_poly/dlp_print.c, Line: 1928 msgid "# Relative dielectric constant = " msgstr "# Constante diélectrique relative = " # File: calc/dl_poly/dlp_print.c, Line: 1932 msgid "\n# Allowing local variation of system density of: " msgstr "\n# Permettre une variation locale de la densité du système de: " # File: calc/dl_poly/dlp_print.c, Line: 1966 msgid "\n# Non-bonded short range interactions - type vdW" msgstr "\n# Interactions à courte portée non-liées - type vdW" # File: calc/dl_poly/dlp_print.c, Line: 1967 msgid "\n# van der Waals short range cutoff = " msgstr "\n# seuil de courte portée de van der Waals = " # File: calc/dl_poly/dlp_print.c, Line: 1970 msgid "\n# Enforce direct calculation of vdW interactions" msgstr "\n# Appliquer le calcul direct des interactions vdW" # File: calc/dl_poly/dlp_print.c, Line: 1971 msgid "\n# Do not work with system using tabulated potentials" msgstr "\n# Ne travaillez pas avec un système utilisant des potentiels tabulés" # File: calc/dl_poly/dlp_print.c, Line: 1975 msgid "\n# Apply force-shifting for vdW interactions" msgstr "\n# Appliquer le changement de force pour les interactions vdW" # File: calc/dl_poly/dlp_print.c, Line: 1979 msgid "\n# Apply mixing rule of type: " msgstr "\n# Appliquer la règle de mélange du type: " # File: calc/dl_poly/dlp_print.c, Line: 1984 msgid "\n# No van der Waals interactions (short range)" msgstr "\n# Pas d'interactions van der Waals (courte portée)" # File: calc/dl_poly/dlp_print.c, Line: 1990 msgid "\n# Non-bonded long range interactions" msgstr "\n# Interactions à longue portée non-liées" # File: calc/dl_poly/dlp_print.c, Line: 1991 msgid "\n# Electrostatics long range cutoff = " msgstr "\n# Coupure électrostatique longue portée = " # File: calc/dl_poly/dlp_print.c, Line: 1994 msgid "\n# Use optional padding to the cutoff = " msgstr "\n# Utiliser un remplissage facultatif jusqu'à un seuil = " # File: calc/dl_poly/dlp_print.c, Line: 1998 msgid "\n# Use extended coulombic exclusion\n" msgstr "\n# Utiliser l'exclusion coulombienne étendue\n" # File: calc/dl_poly/dlp_print.c, Line: 2000 msgid "\n# Electrostatics calculated using " msgstr "\n# Électrostatique calculé à l'aide " # File: calc/dl_poly/dlp_print.c, Line: 2020 msgid "\n# Evaluate k space contribution to the Ewald sum every: " msgstr "\n# Évaluer la contribution de l'espace k à la somme d'Ewald tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2020,2197,2284,2335 msgid " MD step(s)" msgstr " Pas de DM" # File: calc/dl_poly/dlp_print.c, Line: 2025 msgid "# No electrostatics interactions (long range)" msgstr "# Aucune interaction électrostatique (longue portée)" # File: calc/dl_poly/dlp_print.c, Line: 2031 msgid "\n# Metallic interactions" msgstr "\n# Interactions métalliques" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# Enforce direct calculation of metal interactions" msgstr "\n# Appliquer le calcul direct des interactions métalliques" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# This does not work with metal alloy systems using the *EAM* potentials" msgstr "\n# Cela ne fonctionne pas avec les systèmes d'alliages métalliques utilisant les potentiels *EAM*" # File: calc/dl_poly/dlp_print.c, Line: 2039 msgid "\n# Switch the TABEAM default embedding functions, F, from F(Ï�) to F(√Ï�)" msgstr "\n# Basculez les fonctions d'intégration par défaut de TABEAM, F, de F(Ï�) à F(√Ï�)" # File: calc/dl_poly/dlp_print.c, Line: 2043 msgid "\n# Thermostat information" msgstr "\n# Informations sur les thermostats" # File: calc/dl_poly/dlp_print.c, Line: 2088 msgid "# Attach a pseudo thermal bath with:\n" msgstr "# Attacher un pseudo bain thermal avec:\n" # File: calc/dl_poly/dlp_print.c, Line: 2091 msgid "# - thermostat of type: %s\n" msgstr "# - thermostat de type: %s\n" # File: calc/dl_poly/dlp_print.c, Line: 2095 msgid "# - thermostats of type Langevin and Direct applied successively\n" msgstr "# - thermostats de type Langevin et Direct appliqués successivement\n" # File: calc/dl_poly/dlp_print.c, Line: 2099 msgid "# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n" msgstr "# - épaisseur de la couche thermostaté jusqu'aux limites de boîte de MD: %f Ang.\n" # File: calc/dl_poly/dlp_print.c, Line: 2104 msgid "# - Target temperature: %f K\n" msgstr "# - Température cible: %f K\n" # File: calc/dl_poly/dlp_print.c, Line: 2110 msgid "# - Target temperature: system target temperature\n" msgstr "# - Température cible: température cible du système\n" # File: calc/dl_poly/dlp_print.c, Line: 2123 msgid "# Molecular dynamics information\n" msgstr "# Informations sur la dynamique moléculaire\n" # File: calc/dl_poly/dlp_print.c, Line: 2150 msgid "# Variable time step, initial time step = " msgstr "# Pas de temps variable, pas de temps initial = " # File: calc/dl_poly/dlp_print.c, Line: 2151 msgid "\n# Maximum time step allowed = " msgstr "\n# Pas de temps maximum autorisé = " # File: calc/dl_poly/dlp_print.c, Line: 2152 msgid "\n# Maximum move allowed = " msgstr "\n# Déplacement maximum autorisé = " # File: calc/dl_poly/dlp_print.c, Line: 2153 msgid "\n# Minimum move allowed = " msgstr "\n# Déplacement minimum autorisé = " # File: calc/dl_poly/dlp_print.c, Line: 2157 msgid "# MD time step = " msgstr "# Pas de temps DM = " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid "\n# Shake / Rattle iterations limit: " msgstr "\n# Limite d'itérations secousse / vibration: " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid " cycle(s)" msgstr " cycle(s)" # File: calc/dl_poly/dlp_print.c, Line: 2161 msgid "\n# Shake / Rattle tolerance: " msgstr "\n# Tolérance aux secousses / vibrations: " # File: calc/dl_poly/dlp_print.c, Line: 2165 msgid "\n# FIQA iterations limit: " msgstr "\n# Limite d'itérations FIQA: " # File: calc/dl_poly/dlp_print.c, Line: 2166 msgid "\n# Quaternion tolerance: " msgstr "\n# Tolérance aux quaternions: " # File: calc/dl_poly/dlp_print.c, Line: 2171 msgid "\n\n# Initiate impact on particle\n# - with particle index: " msgstr "\n\n# Initier l'impact sur les particules\n# - avec indice de particules: " # File: calc/dl_poly/dlp_print.c, Line: 2174 msgid "\n# - at MD step: " msgstr "\n# - au pas de DM: " # File: calc/dl_poly/dlp_print.c, Line: 2178 msgid "\n# - with energy (k eV): " msgstr "\n# - avec énergie (k eV): " # File: calc/dl_poly/dlp_print.c, Line: 2182 msgid "\n# - direction (x, y, z): " msgstr "\n# - direction (x, y, z): " # File: calc/dl_poly/dlp_print.c, Line: 2196 msgid "\n\n# Equilibration information" msgstr "\n\n# Informations d'équilibration" # File: calc/dl_poly/dlp_print.c, Line: 2197 msgid "\n# Equilibrate during: " msgstr "\n# Equilibrer pendant: " # File: calc/dl_poly/dlp_print.c, Line: 2200 msgid "\n# During equilibration: rescale system temperature every: " msgstr "\n# Pendant l'équilibration: redimensionnez la température du système tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2204 msgid "\n# During equilibration: cap forces, with fmax= " msgstr "\n# Lors de l'équilibration: plafond des forces, avec fmax= " # File: calc/dl_poly/dlp_print.c, Line: 2208 msgid "\n# During equilibration: resample the instantaneous momenta distribution every: " msgstr "\n# Pendant l'équilibration: rééchantillonnez la distribution de l'impulsion instantanée tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2212 msgid "\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n" msgstr "\n# Toutes les %d étape(s) pendant l'équilibration: minimiser %s avec la cible %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2223 msgid "# At the start of the equilibration: minimize %s with target %s= %f\n" msgstr "# Au début de l'équilibration: minimiser %s avec la cible %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2233 msgid "# During equilibration: perform a zero temperature MD minimization\n" msgstr "# Pendant l'équilibration: effectuer une minimisation DM à température nulle\n" # File: calc/dl_poly/dlp_print.c, Line: 2238 msgid "# Include equilibration data in overall statistics\n" msgstr "# Inclure les données d'équilibration dans les statistiques globales\n" # File: calc/dl_poly/dlp_print.c, Line: 2245 msgid "\n# Analysis information" msgstr "\n# Informations d'analyse" # File: calc/dl_poly/dlp_print.c, Line: 2248 msgid "\n# Calculate and collect all intra-molecular PDFs" msgstr "\n# Calculer et collecter tous les PDF intra-moléculaires" # File: calc/dl_poly/dlp_print.c, Line: 2254 msgid "\n# Calculate and collect bonds PDFs" msgstr "\n# Calculer et collecter des PDF de liaisons" # File: calc/dl_poly/dlp_print.c, Line: 2260 msgid "\n# Calculate and collect angles PDFs" msgstr "\n# Calculer et collecter des angles PDF" # File: calc/dl_poly/dlp_print.c, Line: 2265 msgid "\n# Calculate and collect dihedrals PDFs" msgstr "\n# Calculer et collecter des PDF de dièdres" # File: calc/dl_poly/dlp_print.c, Line: 2270 msgid "\n# Calculate and collect inversions PDFs" msgstr "\n# Calculer et collecter les PDF d'inversions" # File: calc/dl_poly/dlp_print.c, Line: 2273 msgid "\n# Print any opted for analysis inter and intra-molecular PDFs" msgstr "\n# Imprimez tous les PDF d'analyse inter et intra-moléculaires choisis" # File: calc/dl_poly/dlp_print.c, Line: 2280 msgid "\n# Bin size for RDfs and Z-density distribution: " msgstr "\n# Taille du bac pour les RDfs et la distribution de densité Z: " # File: calc/dl_poly/dlp_print.c, Line: 2284 msgid "\n# Calculate and collect radial distribution functions every: " msgstr "\n# Calculer et collecter les fonctions de distribution radiale tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2290 msgid "\n# Calculate and collect Z-density profile every: " msgstr "\n# Calculez et collectez le profil de densité Z tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2296 msgid "\n# Velocity autocorrelation functions, VAFs\n" msgstr "\n# Fonctions d'autocorrélation de vitesse, VAF\n" # File: calc/dl_poly/dlp_print.c, Line: 2302 msgid "\n# Ignore time averaging for the VAFs" msgstr "\n# Ignorer la moyenne du temps pour les VAF" # File: calc/dl_poly/dlp_print.c, Line: 2309 msgid "\n\n# Output information" msgstr "\n\n# Informations de sortie" # File: calc/dl_poly/dlp_print.c, Line: 2312 msgid "\n# Write defects trajectory file, DEFECTS\n" msgstr "\n# Écrire le fichier de trajectoire des défauts, DEFECTS\n" # File: calc/dl_poly/dlp_print.c, Line: 2318 msgid "\n# Write displacement trajectory file, RSDDAT\n" msgstr "\n# Écrire le fichier de trajectoire de déplacement, RSDDAT\n" # File: calc/dl_poly/dlp_print.c, Line: 2324 msgid "\n# Write HISTORY file\n" msgstr "\n# Écrire le fichier HISTORY\n" # File: calc/dl_poly/dlp_print.c, Line: 2330 msgid "\n# Write MSDTMP file\n" msgstr "\n# Écrire le fichier MSDTMP\n" # File: calc/dl_poly/dlp_print.c, Line: 2335 msgid "\n# Print system data every: " msgstr "\n# Imprimer les données du système tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2339 msgid "\n# Accumulate statics data every: " msgstr "\n# Accumulez des données statiques tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2343 msgid "\n# Set rolling average stack to: " msgstr "\n# Définissez la pile moyenne mobile sur: " # File: calc/dl_poly/dlp_print.c, Line: 2347 msgid "\n# Dump restart information every: " msgstr "\n# Vider les informations de redémarrage tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2364 msgid "# - method = " msgstr "# - méthode = " # File: calc/dl_poly/dlp_print.c, Line: 2371 msgid "\n# - precision = " msgstr "\n# - précision = " # File: calc/dl_poly/dlp_print.c, Line: 2375 msgid "\n# - type = " msgstr "\n# - type = " # File: calc/dl_poly/dlp_print.c, Line: 2381 msgid "\n# - j, reader count = " msgstr "\n# - j, nombre de lecteurs = " # File: calc/dl_poly/dlp_print.c, Line: 2388 msgid "\n# - k, batch size = " msgstr "\n# - k, taille du lot = " # File: calc/dl_poly/dlp_print.c, Line: 2393 msgid "\n# - l, buffer size = " msgstr "\n# - l, taille du tampon = " # File: calc/dl_poly/dlp_print.c, Line: 2399 msgid "\n# - e, parallel error check is " msgstr "\n# - e, la vérification des erreurs parallèles est " # File: calc/dl_poly/dlp_print.c, Line: 2435 msgid "\n# Seeds for the random number generators\n" msgstr "\n# Graines pour les générateurs de nombres aléatoires\n" # File: calc/dl_poly/dlp_print.c, Line: 2441 msgid "\n# Limits to 2 the number of processors in z direction for slab simulations\n" msgstr "\n# Limite à 2 le nombre de processeurs dans la direction z pour les simulations de dalles\n" # File: curve/cedit.c, Line: 294 msgid "Data sets" msgstr "Jeux de données" # File: curve/cedit.c, Line: 362 # File: curve/m_curve.c, Line: 86 msgid "Edit curve" msgstr "Éditer la courbe" # File: curve/cedit.c, Line: 372,373 msgid "Graph" msgstr "Graphique" # File: curve/cedit.c, Line: 376,377 # File: curve/m_curve.c, Line: 611 msgid "Data" msgstr "Données" # File: curve/cedit.c, Line: 380,381 msgid "Legend" msgstr "Légende" # File: curve/cedit.c, Line: 389 msgid "Add data set(s) to the active window" msgstr "Ajouter un (des) jeu(x) de données à la fenêtre active" # File: curve/cedit.c, Line: 392,393 msgid "Add data set" msgstr "Ajout de données" # File: curve/datab.c, Line: 472 msgid "Add Constant to Column" msgstr "Ajouter une Constante à la Colonne" # File: curve/datab.c, Line: 478,613 msgid "Add Constant to Last Column" msgstr "Ajouter une Constante à la Dernière Colonne" # File: curve/datab.c, Line: 525 msgid "Multiply Column by Constant" msgstr "Multiplier la Colonne par une Constante" # File: curve/datab.c, Line: 531,614 msgid "Multiply Last Column by Constant" msgstr "Multiplier la Dernière Colonne par une Constante" # File: curve/datab.c, Line: 550 msgid "Before" msgstr "Avant" # File: curve/datab.c, Line: 551 msgid "After" msgstr "Après" # File: curve/datab.c, Line: 563 msgid "Insert Row(s)" msgstr "Insérer une(des) Ligne(s)" # File: curve/datab.c, Line: 575 msgid "Delete Row(s)" msgstr "Supprimer une(des) Ligne(s)" # File: curve/datab.c, Line: 587 msgid "Copy Selected Row(s)" msgstr "Copier la(les) Ligne(s) Sélectionnées" # File: curve/datab.c, Line: 601 msgid "Cell Based Operations" msgstr "Opérations Basées sur les Cellules" # File: curve/datab.c, Line: 626 msgid "Column Based Operations" msgstr "Opérations Basées sur les Colonnes" # File: curve/m_curve.c, Line: 76 msgid "Curve window" msgstr "Fenêtre de courbe" # File: curve/m_curve.c, Line: 85,707 msgid "Autoscale" msgstr "Mise à l'Échelle Automatique" # File: curve/m_curve.c, Line: 87 msgid "Close curve" msgstr "Fermer la Courbe" # File: curve/m_curve.c, Line: 88 msgid "Export data" msgstr "Export des Données" # File: curve/m_curve.c, Line: 89 msgid "Save image" msgstr "Enregistrer l'Image" # File: curve/m_curve.c, Line: 510 msgid "Edit Curve" msgstr "Éditer la Courbe" # File: curve/m_curve.c, Line: 513 msgid "Export Image" msgstr "Exporter une Image" # File: curve/m_curve.c, Line: 530 msgid "Edit Data" msgstr "Éditer les Données" # File: curve/m_curve.c, Line: 592 # File: curve/w_data.c, Line: 178 msgid "Save Data" msgstr "Enregistrer les Données" # File: curve/m_curve.c, Line: 613 msgid "Curve" msgstr "Courbe" # File: curve/m_curve.c, Line: 659 msgid "Add Data Set" msgstr "Ajouter un Jeu de Données" # File: curve/m_curve.c, Line: 677 msgid "Remove Data Set" msgstr "Supprimer le Jeu de Données" # File: curve/tab-1.c, Line: 103 # File: curve/w_img.c, Line: 83 msgid "X size must be > 0" msgstr "La taille X doit être > 0" # File: curve/tab-1.c, Line: 104 # File: curve/w_img.c, Line: 83 msgid "Y size must be > 0" msgstr "La taille Y doit être > 0" # File: curve/tab-1.c, Line: 471 msgid "Frame x min must be < to frame x max" msgstr "L'image x min doit être < à l'image x max" # File: curve/tab-1.c, Line: 483 msgid "Frame x max must be > to frame x min" msgstr "L'image x max doit être > à l'image x min" # File: curve/tab-1.c, Line: 499 msgid "Frame y min must be > to frame y max" msgstr "L'image y min doit être > à l'image y max" # File: curve/tab-1.c, Line: 511 msgid "Frame y max must be < to frame y min" msgstr "L'image y max doit être < à l'image y min" # File: curve/tab-1.c, Line: 543 msgid "Closed" msgstr "Fermé" # File: curve/tab-1.c, Line: 543 msgid "Top Open" msgstr "Ouvert en Haut" # File: curve/tab-1.c, Line: 543 msgid "Right Open" msgstr "Ouvert à Droite" # File: curve/tab-1.c, Line: 543 msgid "Left Open" msgstr "Ouvert à Gauche" # File: curve/tab-1.c, Line: 543 msgid "Open " msgstr "Ouvert " # File: curve/tab-1.c, Line: 560 msgid "Size:" msgstr "Taille:" # File: curve/tab-1.c, Line: 568 # File: curve/w_img.c, Line: 362 msgid "pixels" msgstr "pixels" # File: curve/tab-1.c, Line: 572 msgid "Insert title" msgstr "Insérer un titre" # File: curve/tab-1.c, Line: 582 msgid "Default title" msgstr "Titre par défaut" # File: curve/tab-1.c, Line: 597 # File: curve/tab-3.c, Line: 335 # File: curve/tab-4.c, Line: 818,854 msgid "Font:" msgstr "Police:" # File: curve/tab-1.c, Line: 601,667 # File: curve/tab-3.c, Line: 339,381 msgid "Color:" msgstr "Couleur:" # File: curve/tab-1.c, Line: 605 # File: curve/tab-3.c, Line: 343 msgid "Position:" msgstr "Position:" # File: curve/tab-1.c, Line: 620 msgid "Background color:" msgstr "Couleur d'arrière-plan:" # File: curve/tab-1.c, Line: 629 msgid "Show/Hide frame" msgstr "Afficher/Masquer le cadre" # File: curve/tab-1.c, Line: 659 # File: curve/tab-2.c, Line: 953 # File: curve/tab-3.c, Line: 373 msgid "Line style:" msgstr "Style de ligne:" # File: curve/tab-1.c, Line: 664 # File: curve/tab-2.c, Line: 962 # File: curve/tab-3.c, Line: 378 msgid "Line width:" msgstr "Largeur de trait:" # File: curve/tab-1.c, Line: 689 # File: curve/tab-4.c, Line: 825,856 msgid "Position: " msgstr "Position: " # File: curve/tab-2.c, Line: 348 msgid "Line width must be > 0.0" msgstr "La largeur de ligne doit être > 0,0" # File: curve/tab-2.c, Line: 392 msgid "Glyph size must be > 0.0" msgstr "La taille du glyphe doit être > 0,0" # File: curve/tab-2.c, Line: 436 msgid "Bar width must be > 0.0" msgstr "La largeur de la barre doit être > 0,0" # File: curve/tab-2.c, Line: 480 msgid "Bar opacity must ∈ [0.0 - 1.0]" msgstr "L'opacité de la barre doit ∈ [0,0 - 1,0]" # File: curve/tab-2.c, Line: 547 msgid "Glyph frequency must be > 0" msgstr "La fréquence des glyphes doit être > 0" # File: curve/tab-2.c, Line: 846 msgid "Data set(s)" msgstr "Jeu(x) de données" # File: curve/tab-2.c, Line: 929 msgid "Bar" msgstr "Histogramme" # File: curve/tab-2.c, Line: 916 msgid "Select set: " msgstr "Sélectionner un jeu: " # File: curve/tab-2.c, Line: 933 msgid "Plot type:" msgstr "Type de représentation:" # File: curve/tab-2.c, Line: 941 msgid "Data color:" msgstr "Couleur des données:" # File: curve/tab-2.c, Line: 945 msgid "No Line" msgstr "Pas de Ligne" # File: curve/tab-2.c, Line: 970 msgid "No Glyph" msgstr "Pas de Glyphe" # File: curve/tab-2.c, Line: 978 msgid "Glyph type:" msgstr "Type de glyphe:" # File: curve/tab-2.c, Line: 983 msgid "Glyph size:" msgstr "Taille du glyphe:" # File: curve/tab-2.c, Line: 988 msgid "Glyph freq.:" msgstr "Fréq. des glyphes:" # File: curve/tab-2.c, Line: 1000 msgid "Bar width:" msgstr "Largeur de barre:" # File: curve/tab-2.c, Line: 1004 msgid "Color opacity:" msgstr "Opacité des couleurs:" # File: curve/tab-2.c, Line: 1008 msgid "Plain" msgstr "Pleine" # File: curve/tab-2.c, Line: 1012 msgid "Bar opacity:" msgstr "Opacité de la barre:" # File: curve/tab-2.c, Line: 1021 msgid "Automatic x axis shift for bar diagram (to improve visibility)" msgstr "Décalage automatique de l'axe x\n pour l'histogramme (améliore la visibilité)" # File: curve/tab-2.c, Line: 1027 msgid "Layers organization: " msgstr "Organisation des calques: " # File: curve/tab-2.c, Line: 1037 msgid "\tMove up/down to adjust layer position (up to front, down to back)" msgstr "\tDéplacez pour ajuster la position du calque\n\thaut vers l'avant, bas vers l'arrière." # File: curve/tab-3.c, Line: 327 msgid "Show/Hide legend" msgstr "Afficher/Masquer la légende" # File: curve/tab-3.c, Line: 356 msgid "Show/Hide legend box" msgstr "Afficher/Masquer la zone de légende" # File: curve/tab-4.c, Line: 123 msgid "Axis min must be < to axis max" msgstr "L'axe min doit être < à l'axe max" # File: curve/tab-4.c, Line: 150 msgid "Axis max must be > to axis min" msgstr "L'axe max doit être > à l'axe min" # File: curve/tab-4.c, Line: 179 msgid "Major tick must be > 0.0" msgstr "Le tick majeur doit être > 0,0" # File: curve/tab-4.c, Line: 703 msgid "Select axis:" msgstr "Sélectionner l'axe:" # File: curve/tab-4.c, Line: 705 msgid "X axis" msgstr "Axe X" # File: curve/tab-4.c, Line: 706 msgid "Y axis" msgstr "Axe Y" # File: curve/tab-4.c, Line: 716 msgid "Scale type:" msgstr "Type d'échelle:" # File: curve/tab-4.c, Line: 724 msgid "Autoscale axis" msgstr "Mise à l'échelle auto. de l'axe" # File: curve/tab-4.c, Line: 730 msgid "Min:" msgstr "Min:" # File: curve/tab-4.c, Line: 733 msgid "Max:" msgstr "Max:" # File: curve/tab-4.c, Line: 740 msgid "Major ticks spacing:" msgstr "Espacement des divisions majeurs:" # File: curve/tab-4.c, Line: 747 msgid "Number of minor ticks:" msgstr "Nombre de divisions mineurs:" # File: curve/tab-4.c, Line: 757 msgid "Tick marks:" msgstr "Divisions:" # File: curve/tab-4.c, Line: 760,798 msgid "Location:" msgstr "Emplacement:" # File: curve/tab-4.c, Line: 762 msgid "In" msgstr "Dedans" # File: curve/tab-4.c, Line: 763 msgid "Out" msgstr "Dehors" # File: curve/tab-4.c, Line: 770,801 msgid "Opposite" msgstr "Opposé" # File: curve/tab-4.c, Line: 771,802 msgid "Both" msgstr "Les Deux" # File: curve/tab-4.c, Line: 772,803 # File: calc/cp2k/cp2k_init.c, Line: 700 # File: calc/dl_poly/dlp_field.c, Line: 1493 # File: opengl/win/w_advance.c, Line: 1344,1635 # File: opengl/win/w_periodic.c, Line: 90 msgid "None" msgstr "Aucun(e)" # File: curve/tab-4.c, Line: 779 msgid "Major ticks size:" msgstr "Taille des divisions majeurs:" # File: curve/tab-4.c, Line: 785 msgid "Minor ticks size:" msgstr "Taille des divisions mineurs:" # File: curve/tab-4.c, Line: 795 msgid "Tick labels:" msgstr "Labels des divisions:" # File: curve/tab-4.c, Line: 809 msgid "Significant digits:" msgstr "Chiffres significatifs:" # File: curve/tab-4.c, Line: 822 msgid "Angle:" msgstr "Angle:" # File: curve/tab-4.c, Line: 839 msgid "Show/Hide axis (if min[axis] < 0.0 < max[axis])" msgstr "Afficher/Masquer l'axe (si min[axis] < 0,0 < max[axis])" # File: curve/tab-4.c, Line: 841 msgid "Show/Hide axis grid" msgstr "Afficher/Masquer la grille des axes" # File: curve/tab-4.c, Line: 847 msgid "Use default axis title" msgstr "Utiliser le titre de l'axe par défaut" # File: curve/w_curve.c, Line: 157 msgid "zoom: out (x) / in (y)" msgstr "zoom: arrière (x) / avant (y)" # File: curve/w_curve.c, Line: 164 msgid "zoom: out (x) / out (y)" msgstr "zoom: arrière (x) / arrière (y)" # File: curve/w_curve.c, Line: 176 msgid "zoom: in (x) / in (y)" msgstr "zoom: avant (x) / avant (y)" # File: curve/w_curve.c, Line: 183 msgid "zoom: in (x) / out (y)" msgstr "zoom: avant (x) / arrière (y)" # File: curve/w_curve.c, Line: 219 msgid "(Not in plot)" msgstr "(Pas dans le graph)" # File: curve/w_curve.c, Line: 257 msgid "Not in plot" msgstr "Pas dans le graph" # File: curve/w_data.c, Line: 187 msgid "Xmgrace file (*.agr)" msgstr "Fichier Xmgrace (*.agr)" # File: curve/w_data.c, Line: 191 msgid "x/y ASCII file (*.dat)" msgstr "Fichier ASCII x/y (*.dat)" # File: curve/w_img.c, Line: 226 msgid "PNG file (*.png)" msgstr "Fichier PNG (*.png)" # File: curve/w_img.c, Line: 227 msgid "PDF file (*.pdf)" msgstr "Fichier PDF (*.pdf)" # File: curve/w_img.c, Line: 228 msgid "SVG file (*.svg)" msgstr "Fichier SVG (*.svg)" # File: curve/w_img.c, Line: 229 msgid "EPS file (*.eps)" msgstr "Fichier EPS (*.eps)" # File: curve/w_img.c, Line: 234 msgid "To save an image please enter a file format" msgstr "Pour enregistrer une image, veuillez entrer un format de fichier" # File: curve/w_img.c, Line: 238 msgid "You need to specify the size of the image" msgstr "Vous devez préciser la taille de l'image" # File: curve/w_img.c, Line: 322 msgid "Export image" msgstr "Exporter l'image" # File: curve/w_img.c, Line: 332 msgid "Format: " msgstr "Format: " # File: curve/w_img.c, Line: 350 msgid "Size: " msgstr "Taille: " # File: curve/w_img.c, Line: 364 msgid "Make background transparent" msgstr "Rendre l'arrière-plan transparent" atomes_1.3.1/locale/Makefile.am0000664000175000017500000000175115212624223016004 0ustar lerouxleroux# Nom du programme (doit correspondre à GETTEXT_PACKAGE dans configure.ac) PACKAGE = atomes atomes_locale = $(DESTDIR)$(localedir) # Liste des fichiers de langue à compiler POFILES = en/atomes-messages.po \ fr/atomes-messages.po MOFILES = $(patsubst %.po,%.mo,$(POFILES)) # Règle de compilation .po -> .mo .po.mo: msgfmt -o $@ $< all-local: $(MOFILES) # Installation des fichiers .mo dans le dossier locale de destination install-data-local: for mo in $(MOFILES); do \ lang=`echo $$mo |sed 's/\/atomes-messages.mo//'`; \ $(mkinstalldirs) $(atomes_locale)/$$lang/LC_MESSAGES; \ $(INSTALL_DATA) $$mo $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Nettoyage lors de la désinstallation uninstall-local: for po in $(POFILES); do \ lang=`echo $$po |sed 's/\/atomes-messages.po//'`; \ rm -f $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Fichiers à nettoyer CLEANFILES = $(MOFILES) # Fichiers à inclure dans la distribution EXTRA_DIST = $(POFILES) atomes_1.3.1/locale/Makefile.in0000664000175000017500000003232615212624223016017 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = locale ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ # Nom du programme (doit correspondre à GETTEXT_PACKAGE dans configure.ac) PACKAGE = atomes PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_locale = $(DESTDIR)$(localedir) # Liste des fichiers de langue à compiler POFILES = en/atomes-messages.po \ fr/atomes-messages.po MOFILES = $(patsubst %.po,%.mo,$(POFILES)) # Fichiers à nettoyer CLEANFILES = $(MOFILES) # Fichiers à inclure dans la distribution EXTRA_DIST = $(POFILES) all: all-am .SUFFIXES: .SUFFIXES: .mo .po $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu locale/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu locale/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -$(am__rm_f) $(CLEANFILES) distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local .PRECIOUS: Makefile # Règle de compilation .po -> .mo .po.mo: msgfmt -o $@ $< all-local: $(MOFILES) # Installation des fichiers .mo dans le dossier locale de destination install-data-local: for mo in $(MOFILES); do \ lang=`echo $$mo |sed 's/\/atomes-messages.mo//'`; \ $(mkinstalldirs) $(atomes_locale)/$$lang/LC_MESSAGES; \ $(INSTALL_DATA) $$mo $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Nettoyage lors de la désinstallation uninstall-local: for po in $(POFILES); do \ lang=`echo $$po |sed 's/\/atomes-messages.po//'`; \ rm -f $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/locale/en/0000775000175000017500000000000015212624223014346 5ustar lerouxlerouxatomes_1.3.1/locale/en/atomes-messages.po0000664000175000017500000144312215212624223020012 0ustar lerouxleroux# This file is part of the 'atomes' software # # 'atomes' is free software: you can redistribute it and/or modify it under the terms # of the GNU Affero General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later version. # # 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU Affero General Public License along with 'atomes'. # If not, see # # Copyright (C) 2022-2026 by CNRS and University of Strasbourg msgid "" msgstr "" "Project-Id-Version: atomes 1.3.0\n" "PO-Revision-Date: 2026-05-12 16:25+0200\n" "Last-Translator: Sébastien Le Roux \n" "Language-Team: English\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # ============================================================ # Section: gui # ============================================================ # File: gui/bdcall.c, Line: 181 msgid "Angles [%s-%s-%s]" msgstr "Angles [%s-%s-%s]" # File: gui/bdcall.c, Line: 197 msgid "Dihedrals [%s-%s-%s-%s]" msgstr "Dihedrals [%s-%s-%s-%s]" # File: gui/bdcall.c, Line: 431 msgid "\n\nAngles and diherdrals distribution(s)\n\n" msgstr "\n\nAngles and diherdrals distribution(s)\n\n" # File: gui/bdcall.c, Line: 432 # File: gui/grcall.c, Line: 142 # File: gui/msdcall.c, Line: 154 # File: gui/sqcall.c, Line: 145 msgid "Calculation details:\n\n" msgstr "Calculation details:\n\n" # File: gui/bdcall.c, Line: 433 msgid "\tAngular space discretization:\n\n" msgstr "\tAngular space discretization:\n\n" # File: gui/bdcall.c, Line: 434,997 msgid "\t - Number of δ° steps: " msgstr "\t - Number of δ° steps: " # File: gui/bdcall.c, Line: 438 msgid "\n\n\t between 0.0 and 180.0" msgstr "\n\n\t between 0.0 and 180.0" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 # File: gui/bdcall.c, Line: 495 # File: opengl/win/glwindow.c, Line: 157 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 82 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Fragment" msgstr "Fragment" # File: calc/cpmd/cpmd_init.c, Line: 214 # File: calc/dl_poly/dlp_field.c, Line: 142 # File: gui/bdcall.c, Line: 503 # File: opengl/win/glwindow.c, Line: 158 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 83 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_library.c, Line: 1148 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Molecule" msgstr "Molecule" # File: gui/bdcall.c, Line: 589 # File: gui/chainscall.c, Line: 315 # File: gui/ringscall.c, Line: 446 # File: gui/spcall.c, Line: 211 msgid "The nearest neighbors table calculation has failed" msgstr "The nearest neighbors table calculation has failed" # File: gui/bdcall.c, Line: 596 # File: gui/spcall.c, Line: 207 msgid "Impossible to update FORTRAN data" msgstr "Impossible to update FORTRAN data" # File: gui/bdcall.c, Line: 623 msgid "Unexpected error when calculating bond properties" msgstr "Unexpected error when calculating bond properties" # File: gui/bdcall.c, Line: 635 msgid "Unexpected error when looking for isolated fragment(s) and molecule(s)" msgstr "Unexpected error when looking for isolated fragment(s) and molecule(s)" # File: gui/bdcall.c, Line: 681 msgid "Unexpected error when calculating the bond angles distribution" msgstr "Unexpected error when calculating the bond angles distribution" # File: gui/bdcall.c, Line: 689 msgid "Unexpected error when calculating the dihedral angles distribution" msgstr "Unexpected error when calculating the dihedral angles distribution" # File: gui/bdcall.c, Line: 735 msgid "\n\nBond properties\n\n" msgstr "\n\nBond properties\n\n" # File: gui/bdcall.c, Line: 736 msgid "Existence of a bond between 2 atoms i (α) and j (β)\n" msgstr "Existence of a bond between 2 atoms i (α) and j (β)\n" # File: gui/bdcall.c, Line: 737 msgid "if the 2 following conditions are verified:\n\n\t1) D" msgstr "if the 2 following conditions are verified:\n\n\t1) D" # File: gui/bdcall.c, Line: 739 msgid " < first minimum of the total g(r) (%9.5f Ã… )\n\t2) D" msgstr " < first minimum of the total g(r) (%9.5f Ã… )\n\t2) D" # File: gui/bdcall.c, Line: 744,771 msgid "cut" msgstr "cut" # File: gui/bdcall.c, Line: 752 msgid "\nCoordination numbers: " msgstr "\nCoordination numbers: " # File: gui/bdcall.c, Line: 758 msgid " (total)=\t" msgstr " (total)=\t" # File: gui/bdcall.c, Line: 785,974,1065,1089,1113,1164,1189 msgid "\t or \t" msgstr "\t or \t" # File: gui/bdcall.c, Line: 801 msgid "\nAverage coordination number: " msgstr "\nAverage coordination number: " # File: gui/bdcall.c, Line: 842 msgid "\nWarren-Cowley chemical order parameters for A" msgstr "\nWarren-Cowley chemical order parameters for A" # File: gui/bdcall.c, Line: 846,884 msgid " binary systems:\n\n" msgstr " binary systems:\n\n" # File: gui/bdcall.c, Line: 880 msgid "\nCargill-Spaepen chemical order parameters for A" msgstr "\nCargill-Spaepen chemical order parameters for A" # File: gui/bdcall.c, Line: 915 msgid "\nEnvironments for " msgstr "\nEnvironments for " # File: gui/bdcall.c, Line: 921,1041,1129 msgid " atoms:\n\n" msgstr " atoms:\n\n" # File: gui/bdcall.c, Line: 922 msgid "\t \tN(tot)" msgstr "\t \tN(tot)" # File: gui/bdcall.c, Line: 935 msgid "\tNumber\t\t or \tPercent\n\n" msgstr "\tNumber\t\t or \tPercent\n\n" # File: gui/bdcall.c, Line: 995 msgid "\n\nAngle distribution function(s)\n\n" msgstr "\n\nAngle distribution function(s)\n\n" # File: gui/bdcall.c, Line: 996 msgid "\tAngle space discretization:\n\n" msgstr "\tAngle space discretization:\n\n" # File: gui/bdcall.c, Line: 1001 msgid "\n\n\t between 0.0 and 180.0°\n" msgstr "\n\n\t between 0.0 and 180.0°\n" # File: gui/bdcall.c, Line: 1039 msgid "\nNumber and proportion of tetrahedra links for " msgstr "\nNumber and proportion of tetrahedra links for " # File: gui/bdcall.c, Line: 1052,1140 msgid " tetrahedra:\n" msgstr " tetrahedra:\n" # File: gui/bdcall.c, Line: 1055,1154 msgid "\t\t Edge-sharing: " msgstr "\t\t Edge-sharing: " # File: gui/bdcall.c, Line: 1079,1179 msgid "\t\t Corner-sharing: " msgstr "\t\t Corner-sharing: " # File: gui/bdcall.c, Line: 1103 msgid "\t\t with the following bond defects: " msgstr "\t\t with the following bond defects: " # File: gui/bdcall.c, Line: 1127 msgid "\nNumber and proportion of tetrahedra units for " msgstr "\nNumber and proportion of tetrahedra units for " # File: gui/bdcall.c, Line: 1141 msgid "\t\t Total number of tetrahedra:" msgstr "\t\t Total number of tetrahedra:" # File: gui/calc_menu.c, Line: 600 msgid "[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)." msgstr "[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)." # File: gui/calc_menu.c, Line: 776 msgid "The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n" msgstr "The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n" # File: gui/calc_menu.c, Line: 817 msgid "You must specify a number of δr >= 2\n" "to discretize the real space between 0.0 and Dmax\n" msgstr "You must specify a number of δr >= 2\n" "to discretize the real space between 0.0 and Dmax\n" # File: gui/calc_menu.c, Line: 823 msgid "You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax" msgstr "You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax" # File: gui/calc_menu.c, Line: 870 msgid "You must specify a number of δr >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances" msgstr "You must specify a number of δr >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances" # File: gui/calc_menu.c, Line: 876 msgid "You must specify a number of δθ >= 2\n" "to discretize the angular space between 0 and 180°" msgstr "You must specify a number of δθ >= 2\n" "to discretize the angular space between 0 and 180°" # File: gui/calc_menu.c, Line: 904 msgid "You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value" msgstr "You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value" # File: gui/calc_menu.c, Line: 950 msgid "You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n" msgstr "You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n" # File: gui/calc_menu.c, Line: 971 msgid "You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n" msgstr "You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n" # File: gui/calc_menu.c, Line: 171 msgid "ωmax =" msgstr "ωmax =" # File: gui/calc_menu.c, Line: 179 msgid "Update step(s) between conf. and δt to evaluate ωmax" msgstr "Update step(s) between conf. and δt to evaluate ωmax" # File: gui/calc_menu.c, Line: 297 msgid "Maximum l, lmax ∈ [2-40]" msgstr "Maximum l, lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 314,317 msgid "Number of configurations:" msgstr "Number of configurations:" # File: gui/calc_menu.c, Line: 315 msgid "\tTime step δt used during the dynamics:" msgstr "\tTime step δt used during the dynamics:" # File: gui/calc_menu.c, Line: 316 msgid "\tNumber of step(s) between each configuration:" msgstr "\tNumber of step(s) between each configuration:" # File: gui/calc_menu.c, Line: 318 # File: gui/preferences.c, Line: 4240 msgid "Time step δt" msgstr "Time step δt" # File: gui/calc_menu.c, Line: 319 # File: gui/preferences.c, Line: 4229 msgid "Step(s) between conf." msgstr "Step(s) between conf." # File: gui/calc_menu.c, Line: 580 msgid "All Rings (No Rule)" msgstr "All Rings (No Rule)" # File: gui/calc_menu.c, Line: 581 msgid "King's [1, 3]" msgstr "King's [1, 3]" # File: gui/calc_menu.c, Line: 582 msgid "Guttman's [2]" msgstr "Guttman's [2]" # File: gui/calc_menu.c, Line: 583 msgid "Primitives [4, 5, 6]" msgstr "Primitives [4, 5, 6]" # File: gui/calc_menu.c, Line: 584 msgid "Strongs [4, 5]" msgstr "Strongs [4, 5]" # File: gui/calc_menu.c, Line: 585 msgid "Definition of ring to be used: " msgstr "Definition of ring to be used: " # File: gui/calc_menu.c, Line: 585 msgid "Atom(s) to initiate the search from: " msgstr "Atom(s) to initiate the search from: " # File: gui/calc_menu.c, Line: 586 msgid "nmax = maximum size for a ring *" msgstr "nmax = maximum size for a ring *" # File: gui/calc_menu.c, Line: 587 msgid "Maximum number of rings of size n per MD step **" msgstr "Maximum number of rings of size n per MD step **" # File: gui/calc_menu.c, Line: 588 msgid "nmax = maximum size for a chain *" msgstr "nmax = maximum size for a chain *" # File: gui/calc_menu.c, Line: 589 msgid "Maximum number of chains of size n per MD step **" msgstr "Maximum number of chains of size n per MD step **" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 470 msgid "Only search for ABAB rings" msgstr "Only search for ABAB rings" # File: gui/calc_menu.c, Line: 590 msgid "No homopolar bonds in the rings (A-A, B-B ...) ***" msgstr "No homopolar bonds in the rings (A-A, B-B ...) ***" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 472 msgid "No homopolar bonds in the connectivity matrix" msgstr "No homopolar bonds in the connectivity matrix" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 476 msgid "Only search for AAAA chains" msgstr "Only search for AAAA chains" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 477 msgid "Only search for ABAB chains" msgstr "Only search for ABAB chains" # File: gui/calc_menu.c, Line: 592 msgid "No homopolar bonds in the chains (A-A, B-B ...) ***" msgstr "No homopolar bonds in the chains (A-A, B-B ...) ***" # File: gui/calc_menu.c, Line: 592 msgid "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains." msgstr "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains." # File: gui/calc_menu.c, Line: 594 msgid "in total number of nodes (or atoms)" msgstr "in total number of nodes (or atoms)" # File: gui/calc_menu.c, Line: 595 msgid "value used for memory allocation = f(nmax, system studied)" msgstr "value used for memory allocation = f(nmax, system studied)" # File: gui/calc_menu.c, Line: 596 msgid "but homopolar bonds can shorten the rings" msgstr "but homopolar bonds can shorten the rings" # File: gui/calc_menu.c, Line: 608 # File: gui/chainscall.c, Line: 124 # File: gui/ringscall.c, Line: 163 # File: opengl/edit/cbuild_edit.c, Line: 949 # File: opengl/win/initcoord.c, Line: 645 # File: opengl/win/m_coord.c, Line: 597 # File: opengl/win/w_search.c, Line: 4154 msgid "All" msgstr "All" # File: gui/calc_menu.c, Line: 611 # File: opengl/win/w_search.c, Line: 3917,4147 msgid "Chemical Species" msgstr "Chemical Species" # File: gui/calc_menu.c, Line: 782 msgid "Save neighbors analysis in file" msgstr "Save neighbors analysis in file" # File: calc/cpmd/cpmd_init.c, Line: 1542 # File: calc/dl_poly/dlp_field.c, Line: 4753 # File: curve/w_data.c, Line: 181 # File: curve/w_img.c, Line: 250 # File: gui/calc_menu.c, Line: 782 # File: gui/callbacks.c, Line: 560,918,1775 # File: gui/gui.c, Line: 772,853 # File: gui/work_menu.c, Line: 134,148,177 # File: opengl/draw/image.c, Line: 212 # File: opengl/draw/movie.c, Line: 1310 # File: opengl/win/m_map.c, Line: 885 # File: opengl/win/w_chains.c, Line: 959 # File: opengl/win/w_rings.c, Line: 1094 msgid "Save" msgstr "Save" # File: gui/calc_menu.c, Line: 868 msgid "You must specify a number of δr intervals >= 2\n" msgstr "You must specify a number of δr intervals >= 2\n" # File: gui/calc_menu.c, Line: 822 msgid "You must specify a maximum wave vector Qmax[FFT]\n" msgstr "You must specify a maximum wave vector Qmax[FFT]\n" # File: gui/calc_menu.c, Line: 843 msgid "You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin" msgstr "You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin" # File: gui/calc_menu.c, Line: 850 msgid "You must specify a number of δq >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n" msgstr "You must specify a number of δq >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n" # File: gui/calc_menu.c, Line: 883 msgid "ring" msgstr "ring" # File: gui/calc_menu.c, Line: 892 msgid "chain" msgstr "chain" # File: gui/calc_menu.c, Line: 896 msgid "You must specify a maximum %s size > 1 for the search" msgstr "You must specify a maximum %s size > 1 for the search" # File: gui/calc_menu.c, Line: 929 msgid "You must specify a number lmax ∈ [2-40]" msgstr "You must specify a number lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 949 msgid "You must specify the time step δt\n" msgstr "You must specify the time step δt\n" # File: gui/calc_menu.c, Line: 997 msgid "You must specify the number of frequency points\n" msgstr "You must specify the number of frequency points\n" # File: gui/calc_menu.c, Line: 1011 msgid "Number of δr [Dijmin-Dijmax]" msgstr "Number of δr [Dijmin-Dijmax]" # File: gui/calc_menu.c, Line: 1012 msgid "Number of δθ [0-180°]" msgstr "Number of δθ [0-180°]" # File: gui/calc_menu.c, Line: 1013 msgid "First coordination sphere properties" msgstr "First coordination sphere properties" # File: gui/calc_menu.c, Line: 1014 msgid "Bond and dihedral angles distribution" msgstr "Bond and dihedral angles distribution" # File: gui/calc_menu.c, Line: 1015 msgid "Search for molecules and isolated fragments" msgstr "Search for molecules and isolated fragments" # File: gui/calc_menu.c, Line: 1016 msgid "Output detailed results in text file" msgstr "Output detailed results in text file" # File: gui/calc_menu.c, Line: 1130 msgid "You must specify a probability between 0.0 and 1.0" msgstr "You must specify a probability between 0.0 and 1.0" # File: gui/calc_menu.c, Line: 1134 msgid "Qlim must be ≥ Qmin and ≤ Qmax" msgstr "Qlim must be ≥ Qmin and ≤ Qmax" # File: gui/calc_menu.c, Line: 1160 msgid "The smoothing factor must be between 0.0 and 1.0" msgstr "The smoothing factor must be between 0.0 and 1.0" # File: gui/calc_menu.c, Line: 1349 msgid "No data set(s) to be smoothed\n" msgstr "No data set(s) to be smoothed\n" # File: gui/calc_menu.c, Line: 1364 msgid "Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]" msgstr "Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]" # File: gui/calc_menu.c, Line: 1365 msgid "Qlim [Å-1] ∈ [Qmin-Qmax]" msgstr "Qlim [Å-1] ∈ [Qmin-Qmax]" # File: gui/calc_menu.c, Line: 1366 msgid " Advanced options" msgstr " Advanced options" # File: gui/calc_menu.c, Line: 1402 msgid " Gaussian data smoothing" msgstr " Gaussian data smoothing" # File: gui/calc_menu.c, Line: 1407 msgid "Factor [0.0-1.0]" msgstr "Factor [0.0-1.0]" # File: gui/calc_menu.c, Line: 1411 msgid "Smooth" msgstr "Smooth" # File: gui/calc_menu.c, Line: 1430 msgid "Number of δr steps" msgstr "Number of δr steps" # File: gui/calc_menu.c, Line: 1431 msgid "Number of δq steps" msgstr "Number of δq steps" # File: gui/calc_menu.c, Line: 1434 msgid "Qmax [Å-1]" msgstr "Qmax [Å-1]" # File: gui/calc_menu.c, Line: 1436 msgid "Qmax for the FFT [Å-1]" msgstr "Qmax for the FFT [Å-1]" # File: gui/calc_menu.c, Line: 1481 msgid "Dmax is the maximum inter-atomic distance in the model" msgstr "Dmax is the maximum inter-atomic distance in the model" # File: gui/calc_menu.c, Line: 1487,1864 msgid "Qmin is the minimum wave vector for the model" msgstr "Qmin is the minimum wave vector for the model" # File: gui/calc_menu.c, Line: 1493 msgid "Qmax is the maximum wave vector to compute S(q)" msgstr "Qmax is the maximum wave vector to compute S(q)" # File: gui/calc_menu.c, Line: 1667 msgid "Number of δt results to save" msgstr "Number of δt results to save" # File: gui/calc_menu.c, Line: 1667 msgid "Number of q vectors to analyze" msgstr "Number of q vectors to analyze" # File: gui/calc_menu.c, Line: 1708 msgid "This value must be > 0 and < number of steps" msgstr "This value must be > 0 and < number of steps" # File: gui/calc_menu.c, Line: 1713,1931 msgid "%d calculation results in total !" msgstr "%d calculation results in total !" # File: gui/calc_menu.c, Line: 1727 msgid "This value must be > 0" msgstr "This value must be > 0" # File: gui/calc_menu.c, Line: 1890 msgid "ω points in [0.0, ωmax]" msgstr "ω points in [0.0, ωmax]" # File: gui/calc_menu.c, Line: 1876 msgid "δtmin is the correlation threshold" msgstr "δtmin is the correlation threshold" # File: gui/calc_menu.c, Line: 1905 msgid "Results" msgstr "Results" # File: gui/calc_menu.c, Line: 1908 msgid "atomes cannot yet display 3D results," msgstr "atomes cannot yet display 3D results," # File: gui/calc_menu.c, Line: 1909 msgid "but we are working to add this feature !" msgstr "but we are working to add this feature !" # File: gui/calc_menu.c, Line: 1910 msgid "For the time being you need to select" msgstr "For the time being you need to select" # File: gui/calc_menu.c, Line: 1911 msgid "what to display using the 2D graph system:" msgstr "what to display using the 2D graph system:" # File: gui/calc_menu.c, Line: 1928 msgid "All δt correlated calculations" msgstr "All δt correlated calculations" # File: gui/calc_menu.c, Line: 1956 msgid "Intermediate scattering: F(q,δt)" msgstr "Intermediate scattering: F(q,δt)" # File: gui/calc_menu.c, Line: 1956 msgid "Dynamic calculations: S(q,ω)" msgstr "Dynamic calculations: S(q,ω)" # File: gui/callbacks.c, Line: 295 msgid "Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" # File: gui/callbacks.c, Line: 309 msgid "Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" # File: gui/callbacks.c, Line: 1545 msgid "Error while parsing the chemical information\n" "please check carefully the coordinates file" msgstr "Error while parsing the chemical information\n" "please check carefully the coordinates file" # File: gui/callbacks.c, Line: 88,1776 msgid "XYZ file" msgstr "XYZ file" # File: gui/callbacks.c, Line: 89 msgid "XYZ file - NPT" msgstr "XYZ file - NPT" # File: gui/callbacks.c, Line: 90,1776 msgid "Chem3D file" msgstr "Chem3D file" # File: gui/callbacks.c, Line: 91 msgid "CPMD trajectory" msgstr "CPMD trajectory" # File: gui/callbacks.c, Line: 92 msgid "CPMD trajectory - NPT" msgstr "CPMD trajectory - NPT" # File: gui/callbacks.c, Line: 93 msgid "VASP trajectory" msgstr "VASP trajectory" # File: gui/callbacks.c, Line: 94 msgid "VASP trajectory - NPT" msgstr "VASP trajectory - NPT" # File: gui/callbacks.c, Line: 95,96 msgid "PDB file" msgstr "PDB file" # File: gui/callbacks.c, Line: 97 msgid "Cryst. information (crystal build) - single configuration" msgstr "Cryst. information (crystal build) - single configuration" # File: gui/callbacks.c, Line: 98 msgid "Cryst. information (crystal build) - multiple configurations" msgstr "Cryst. information (crystal build) - multiple configurations" # File: gui/callbacks.c, Line: 99 msgid "Cryst. information (symmetry positions) - single configuration" msgstr "Cryst. information (symmetry positions) - single configuration" # File: gui/callbacks.c, Line: 100 msgid "DL-POLY HISTORY file" msgstr "DL-POLY HISTORY file" # File: gui/callbacks.c, Line: 101 msgid "ISAACS Project File" msgstr "ISAACS Project File" # File: gui/callbacks.c, Line: 133 msgid "Close workspace ?" msgstr "Close workspace ?" # File: calc/calc.c, Line: 106 # File: gui/callbacks.c, Line: 133 # File: gui/preferences.c, Line: 4945,4978 msgid "Are you sure ?" msgstr "Are you sure ?" # File: gui/callbacks.c, Line: 156 msgid "I/O error" msgstr "I/O error" # File: gui/callbacks.c, Line: 157 msgid "project information" msgstr "project information" # File: gui/callbacks.c, Line: 158 msgid "curve(s) information" msgstr "curve(s) information" # File: gui/callbacks.c, Line: 159 msgid "OpenGL information" msgstr "OpenGL information" # File: gui/callbacks.c, Line: 160 msgid "atom's data - A" msgstr "atom's data - A" # File: gui/callbacks.c, Line: 161 msgid "atom's data - B" msgstr "atom's data - B" # File: gui/callbacks.c, Line: 162 msgid "updating project" msgstr "updating project" # File: gui/callbacks.c, Line: 163 msgid "this should not happen" msgstr "this should not happen" # File: gui/callbacks.c, Line: 164 msgid "coordination data" msgstr "coordination data" # File: gui/callbacks.c, Line: 165 msgid "ring(s) data" msgstr "ring(s) data" # File: gui/callbacks.c, Line: 166 msgid "chain(s) data" msgstr "chain(s) data" # File: gui/callbacks.c, Line: 167 msgid "molecule(s) data" msgstr "molecule(s) data" # File: gui/callbacks.c, Line: 168 msgid "analysis data" msgstr "analysis data" # File: gui/callbacks.c, Line: 169 msgid "ab-initio data" msgstr "ab-initio data" # File: gui/callbacks.c, Line: 170 msgid "classical data" msgstr "classical data" # File: gui/callbacks.c, Line: 222 msgid "File : %s\n" msgstr "File : %s\n" # File: gui/callbacks.c, Line: 223 msgid "Function: %s()\n" msgstr "Function: %s()\n" # File: gui/callbacks.c, Line: 224 msgid "Line : %d" msgstr "Line : %d" # File: gui/callbacks.c, Line: 296 msgid "open" msgstr "open" # File: gui/callbacks.c, Line: 296 msgid "save" msgstr "save" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "reading" msgstr "reading" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "saving" msgstr "saving" # File: gui/callbacks.c, Line: 528 msgid "Error %s workspace file\n%s\n" msgstr "Error %s workspace file\n%s\n" # File: gui/callbacks.c, Line: 560 msgid "Open Project File(s)" msgstr "Open Project File(s)" # File: gui/callbacks.c, Line: 560 msgid "Save Project File" msgstr "Save Project File" # File: gui/callbacks.c, Line: 560 msgid "Open Workspace" msgstr "Open Workspace" # File: gui/callbacks.c, Line: 560 msgid "Save Workspace" msgstr "Save Workspace" # File: gui/callbacks.c, Line: 560,918,1381,1775 # File: gui/gui.c, Line: 767,847 # File: gui/work_menu.c, Line: 132,145 # File: opengl/win/m_map.c, Line: 885 msgid "Open" msgstr "Open" # File: gui/callbacks.c, Line: 562 msgid "Project file (*.apf)" msgstr "Project file (*.apf)" # File: gui/callbacks.c, Line: 562 msgid "Workspace file (*.awf)" msgstr "Workspace file (*.awf)" # File: gui/callbacks.c, Line: 580 msgid "A workspace is already open !" msgstr "A workspace is already open !" # File: gui/callbacks.c, Line: 584 msgid "Empty workspace ... nothing to be saved\n" msgstr "Empty workspace ... nothing to be saved\n" # File: gui/callbacks.c, Line: 591 msgid "Workspace contains only empty projects ... nothing to be saved\n" msgstr "Workspace contains only empty projects ... nothing to be saved\n" # File: gui/callbacks.c, Line: 596 msgid "No project open ... nothing to be saved\n" msgstr "No project open ... nothing to be saved\n" # File: gui/callbacks.c, Line: 600 msgid "Empty project ... nothing to be saved\n" msgstr "Empty project ... nothing to be saved\n" # File: gui/callbacks.c, Line: 651 msgid "%s - New project" msgstr "%s - New project" # File: calc/cpmd/cpmd_init.c, Line: 1556 # File: gui/callbacks.c, Line: 711,916,1388,1831 # File: opengl/win/m_map.c, Line: 937 msgid "All files (*)" msgstr "All files (*)" # File: gui/callbacks.c, Line: 827 msgid "ISAACS project file (XML) successfully opened" msgstr "ISAACS project file (XML) successfully opened" # File: gui/callbacks.c, Line: 880 msgid "Impossible to write the IPF file\n" msgstr "Impossible to write the IPF file\n" # File: gui/callbacks.c, Line: 916 msgid "IPF file (*.ipf)" msgstr "IPF file (*.ipf)" # File: gui/callbacks.c, Line: 917 msgid "Import ISAACS Project File" msgstr "Import ISAACS Project File" # File: gui/callbacks.c, Line: 917 msgid "Export ISAACS Project File" msgstr "Export ISAACS Project File" # File: gui/callbacks.c, Line: 923 msgid "Save an empty project ?" msgstr "Save an empty project ?" # File: gui/callbacks.c, Line: 923 msgid "Do you want to save an empty project ?" msgstr "Do you want to save an empty project ?" # File: gui/callbacks.c, Line: 1037 msgid "Label of atomic spec. N° %d:" msgstr "Label of atomic spec. N° %d:" # File: gui/callbacks.c, Line: 1043 msgid "Number of %s atom(s):" msgstr "Number of %s atom(s):" # File: gui/callbacks.c, Line: 1048 msgid "Number of atom(s) for spec. N° %d:" msgstr "Number of atom(s) for spec. N° %d:" # File: gui/callbacks.c, Line: 1129 msgid "Chemical species info:" msgstr "Chemical species info:" # File: gui/callbacks.c, Line: 1132 msgid "Species: " msgstr "Species: " # File: gui/callbacks.c, Line: 1271 msgid "Total number of atom(s):" msgstr "Total number of atom(s):" # File: gui/callbacks.c, Line: 1271 msgid "Number of chemical species:" msgstr "Number of chemical species:" # File: gui/callbacks.c, Line: 1272 msgid "Reading CPMD / VASP trajectory" msgstr "Reading CPMD / VASP trajectory" # File: calc/cp2k/cp2k_mol.c, Line: 251 # File: calc/cpmd/cpmd_atoms.c, Line: 446 # File: calc/cpmd/cpmd_nose.c, Line: 466,1255 # File: calc/dl_poly/dlp_atom.c, Line: 739 # File: calc/dl_poly/dlp_edit.c, Line: 1264 # File: calc/dl_poly/dlp_mol.c, Line: 473,756 # File: curve/datab.c, Line: 473,526,1060 # File: gui/callbacks.c, Line: 1273 # File: gui/gtk-misc.c, Line: 619 # File: opengl/edit/atom_edit.c, Line: 445 # File: opengl/win/m_map.c, Line: 506,739,983 msgid "Apply" msgstr "Apply" # File: gui/callbacks.c, Line: 1352 msgid "Please select the file format of the NPT cell data" msgstr "Please select the file format of the NPT cell data" # File: gui/callbacks.c, Line: 1352,1686 msgid "Select format:" msgstr "Select format:" # File: gui/callbacks.c, Line: 1378 msgid "Read cell data for NPT molecular dynamics" msgstr "Read cell data for NPT molecular dynamics" # File: gui/callbacks.c, Line: 1384 msgid "DAT files (*.dat)" msgstr "DAT files (*.dat)" # File: gui/callbacks.c, Line: 1531 msgid "Error loading atomic coordinates:\nfile does not exist" msgstr "Error loading atomic coordinates:\nfile does not exist" # File: gui/callbacks.c, Line: 1534 msgid "Error loading coordinates file: format not supported" msgstr "Error loading coordinates file: format not supported" # File: gui/callbacks.c, Line: 1537 msgid "Error at input: impossible to process input file data" msgstr "Error at input: impossible to process input file data" # File: gui/callbacks.c, Line: 1619 msgid "%s - symmetry position(s)" msgstr "%s - symmetry position(s)" # File: gui/callbacks.c, Line: 1686 msgid "Please select the file format of the atomic coordinates" msgstr "Please select the file format of the atomic coordinates" # File: gui/callbacks.c, Line: 1694 msgid "Please select the format of the atomic coordinates" msgstr "Please select the format of the atomic coordinates" # File: gui/callbacks.c, Line: 1734 msgid "Impossible to export the atomic coordinates\nError code: %d" msgstr "Impossible to export the atomic coordinates\nError code: %d" # File: gui/callbacks.c, Line: 1774 msgid "Import atomic coordinates" msgstr "Import atomic coordinates" # File: gui/callbacks.c, Line: 1774 msgid "Export atomic coordinates" msgstr "Export atomic coordinates" # File: gui/callbacks.c, Line: 1850 msgid "No project loaded ... nothing to be saved\n" msgstr "No project loaded ... nothing to be saved\n" # File: gui/callbacks.c, Line: 1854 msgid "Project %s is empty ... nothing to be saved\n" msgstr "Project %s is empty ... nothing to be saved\n" # File: gui/chainscall.c, Line: 352 msgid "\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" # File: gui/chainscall.c, Line: 73 msgid "Chains - Cc(n)[All]" msgstr "Chains - Cc(n)[All]" # File: gui/chainscall.c, Line: 76 msgid "Chains - Cc(n)[%s]" msgstr "Chains - Cc(n)[%s]" # File: gui/chainscall.c, Line: 94 # File: opengl/win/glwindow.c, Line: 312 # File: opengl/win/menu_bar.c, Line: 216,220 # File: opengl/win/popup.c, Line: 4236 # File: opengl/win/w_coord.c, Line: 1332 msgid "Chain(s)" msgstr "Chain(s)" # File: gui/chainscall.c, Line: 132 msgid "\n\nChain statistics\n\n" msgstr "\n\nChain statistics\n\n" # File: gui/chainscall.c, Line: 136 msgid " * only AAAA chains have been considered\n" msgstr " * only AAAA chains have been considered\n" # File: gui/chainscall.c, Line: 140 msgid " * only ABAB chains have been considered\n" msgstr " * only ABAB chains have been considered\n" # File: gui/chainscall.c, Line: 144 msgid " * homopolar bonds can not shorten the chains\n" msgstr " * homopolar bonds can not shorten the chains\n" # File: gui/chainscall.c, Line: 148 msgid " * only 1-(2)" msgstr " * only 1-(2)" # File: gui/chainscall.c, Line: 150 msgid "-1 chains have been considered, ie. isolated chains\n" msgstr "-1 chains have been considered, ie. isolated chains\n" # File: gui/chainscall.c, Line: 152 # File: gui/ringscall.c, Line: 189 msgid "\n Atom(s) used to start the search: " msgstr "\n Atom(s) used to start the search: " # File: gui/chainscall.c, Line: 154 # File: gui/ringscall.c, Line: 191 msgid " atom(s) only" msgstr " atom(s) only" # File: gui/chainscall.c, Line: 158 msgid "\n Average number of chains per configuration: " msgstr "\n Average number of chains per configuration: " # File: gui/chainscall.c, Line: 168 msgid "\n Total number of chains: " msgstr "\n Total number of chains: " # File: gui/chainscall.c, Line: 176 msgid "\n\t n Av. by step \tC" msgstr "\n\t n Av. by step \tC" # File: gui/chainscall.c, Line: 191 msgid "\n\t n\tNumber\t\tC" msgstr "\n\t n\tNumber\t\tC" # File: gui/chainscall.c, Line: 346 msgid "The chain statistics calculation has failed" msgstr "The chain statistics calculation has failed" # File: gui/edit_menu.c, Line: 779 msgid "To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters" msgstr "To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters" # File: gui/edit_menu.c, Line: 73 msgid "Edges [Å]" msgstr "Edges [Å]" # File: gui/edit_menu.c, Line: 73 msgid "Angles [°]" msgstr "Angles [°]" # File: gui/edit_menu.c, Line: 411 msgid "Atom:" msgstr "Atom:" # File: calc/dl_poly/dlp_edit.c, Line: 2320 # File: gui/edit_menu.c, Line: 411 msgid "Element:" msgstr "Element:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic number:" msgstr "Atomic number:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic mass:" msgstr "Atomic mass:" # File: gui/edit_menu.c, Line: 412 msgid "Radius:" msgstr "Radius:" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/win/m_bonds.c, Line: 245 msgid "Radius" msgstr "Radius" # File: gui/edit_menu.c, Line: 413 msgid "Neutrons scattering length:" msgstr "Neutrons scattering length:" # File: gui/edit_menu.c, Line: 413 msgid "X-rays scattering length:" msgstr "X-rays scattering length:" # File: gui/edit_menu.c, Line: 414 msgid "Covalent" msgstr "Covalent" # File: gui/edit_menu.c, Line: 414 msgid "Ionic" msgstr "Ionic" # File: gui/edit_menu.c, Line: 414 msgid "In Crystal" msgstr "In Crystal" # File: gui/edit_menu.c, Line: 76 msgid "Chemistry and physics" msgstr "Chemistry and physics" # File: gui/edit_menu.c, Line: 76 msgid "Box and periodicity" msgstr "Box and periodicity" # File: gui/edit_menu.c, Line: 76 msgid "Bond cutoffs" msgstr "Bond cutoffs" # File: gui/edit_menu.c, Line: 76,310 msgid "Lattice vectors" msgstr "Lattice vectors" # File: gui/edit_menu.c, Line: 279 msgid "Apply Periodic Boundary Conditions" msgstr "Apply Periodic Boundary Conditions" # File: gui/edit_menu.c, Line: 282 msgid "Fractional coordinates" msgstr "Fractional coordinates" # File: gui/edit_menu.c, Line: 714 msgid "To define the existence of a bond between 2 atoms i (α) and j (β), " msgstr "To define the existence of a bond between 2 atoms i (α) and j (β), " # File: gui/edit_menu.c, Line: 715 msgid "a bond exits if the 2 following conditions are verified:" msgstr "a bond exits if the 2 following conditions are verified:" # File: gui/edit_menu.c, Line: 716 msgid "1) Dij < first minimum of the total g(r) - rcut (Tot.)" msgstr "1) Dij < first minimum of the total g(r) - rcut (Tot.)" # File: gui/edit_menu.c, Line: 717 msgid "2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)" msgstr "2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)" # File: gui/edit_menu.c, Line: 718 msgid "0.0 < rcut ≤ Dmax" msgstr "0.0 < rcut ≤ Dmax" # File: gui/edit_menu.c, Line: 719 msgid "Dmax is the maximum inter-atomic distance in the model\n" msgstr "Dmax is the maximum inter-atomic distance in the model\n" # File: gui/edit_menu.c, Line: 727 msgid "%s\twith\tDmax = %f Å" msgstr "%s\twith\tDmax = %f Å" # File: gui/edit_menu.c, Line: 732,737 msgid "With %s" msgstr "With %s" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "Data can be lost !" msgstr "Data can be lost !" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?" msgstr "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?" # File: gui/grcall.c, Line: 69,70,71,72,73,74,75,76 # File: gui/sktcall.c, Line: 73,74,75,76,187,188,189,190 # File: gui/sqcall.c, Line: 65,66,67,68 msgid "Neutrons" msgstr "Neutrons" # File: gui/grcall.c, Line: 70,72,74,76,78,80,82,84,92,96,106,110,114 # File: gui/sktcall.c, Line: 74,76,78,80,88,98,106,110,114,118,188,190,192,194,203,213,221,225,229,233 # File: gui/sqcall.c, Line: 66,68,70,72,80,90,98,102,106,110 msgid "smoothed" msgstr "smoothed" # File: gui/grcall.c, Line: 77,78,79,80,81,82,83,84 # File: gui/sktcall.c, Line: 77,78,79,80,191,192,193,194 # File: gui/sqcall.c, Line: 69,70,71,72 msgid "X-rays" msgstr "X-rays" # File: gui/grcall.c, Line: 133 msgid "\n\nRadial distribution function(s)" msgstr "\n\nRadial distribution function(s)" # File: gui/grcall.c, Line: 136 msgid " - real space calculation\n\n" msgstr " - real space calculation\n\n" # File: gui/grcall.c, Line: 140 msgid " - FFT[S(q)]\n\n" msgstr " - FFT[S(q)]\n\n" # File: gui/grcall.c, Line: 146 msgid "\tReciprocal space data:\n\n" msgstr "\tReciprocal space data:\n\n" # File: gui/grcall.c, Line: 147 msgid "\t - Minimum vector Q" msgstr "\t - Minimum vector Q" # File: gui/grcall.c, Line: 155 msgid "\n\t - Maximum vector Q" msgstr "\n\t - Maximum vector Q" # File: gui/grcall.c, Line: 157 msgid " for the FFT: " msgstr " for the FFT: " # File: gui/grcall.c, Line: 165 msgid "\tReal space discretization:\n\n" msgstr "\tReal space discretization:\n\n" # File: gui/grcall.c, Line: 166 msgid "\t - Number of δr steps: " msgstr "\t - Number of δr steps: " # File: gui/grcall.c, Line: 170 msgid "\n\n\t between 0.0 and " msgstr "\n\n\t between 0.0 and " # File: gui/grcall.c, Line: 173 # File: gui/sqcall.c, Line: 159 msgid "\n\t where " msgstr "\n\t where " # File: gui/grcall.c, Line: 176 msgid " is the maximum distance in real space, " msgstr " is the maximum distance in real space, " # File: gui/grcall.c, Line: 211 msgid "The g(r) calculation has failed" msgstr "The g(r) calculation has failed" # File: gui/grcall.c, Line: 330 msgid "The g(r) from FFT[S(k)] calculation has failed" msgstr "The g(r) from FFT[S(k)] calculation has failed" # File: curve/datab.c, Line: 1059 # File: gui/gtk-misc.c, Line: 619,2380,2395 msgid "Cancel" msgstr "Cancel" # File: gui/gtk-misc.c, Line: 1645 # File: opengl/win/glwindow.c, Line: 324 # File: opengl/win/m_atoms.c, Line: 712,822 # File: opengl/win/m_axis.c, Line: 337 # File: opengl/win/m_box.c, Line: 631 # File: opengl/win/m_coord.c, Line: 675 # File: opengl/win/m_poly.c, Line: 455 # File: opengl/win/m_rep.c, Line: 752 # File: opengl/win/menu_bar.c, Line: 238 # File: opengl/win/popup.c, Line: 4239 msgid "Advanced" msgstr "Advanced" # File: gui/gtk-misc.c, Line: 2345 msgid "Impossible to locate file: %s" msgstr "Impossible to locate file: %s" # File: gui/gui.c, Line: 113,124 # File: gui/initc.c, Line: 244,318 msgid "S(q) from FFT[g(r)]" msgstr "S(q) from FFT[g(r)]" # File: gui/gui.c, Line: 114,125 # File: gui/initc.c, Line: 246,325 msgid "S(q) from Debye Equation" msgstr "S(q) from Debye Equation" # File: gui/gui.c, Line: 115,126 # File: gui/initc.c, Line: 239,332 msgid "g(r)/G(r) from FFT[S(q)]" msgstr "g(r)/G(r) from FFT[S(q)]" # File: gui/gui.c, Line: 116 msgid "Bonds and Angles" msgstr "Bonds and Angles" # File: gui/gui.c, Line: 117,129 # File: gui/initc.c, Line: 261,350 msgid "Ring Statistics" msgstr "Ring Statistics" # File: gui/gui.c, Line: 118,130 # File: gui/initc.c, Line: 265 msgid "Chain Statistics" msgstr "Chain Statistics" # File: gui/gui.c, Line: 119,131 # File: gui/initc.c, Line: 269,362 msgid "Spherical Harmonics" msgstr "Spherical Harmonics" # File: gui/gui.c, Line: 120,132 # File: gui/initc.c, Line: 275,368 msgid "Mean Squared Displacement" msgstr "Mean Squared Displacement" # File: gui/gui.c, Line: 121,133 # File: gui/initc.c, Line: 280,374 msgid "Dynamic Structure Factor" msgstr "Dynamic Structure Factor" # File: gui/gui.c, Line: 127 # File: gui/initc.c, Line: 253,338 msgid "Bond Properties" msgstr "Bond Properties" # File: gui/gui.c, Line: 128 # File: gui/initc.c, Line: 257,344 msgid "Angle Distributions" msgstr "Angle Distributions" # File: gui/gui.c, Line: 152,1021 msgid "About" msgstr "About" # File: gui/gui.c, Line: 152 msgid "open about dialog" msgstr "open about dialog" # File: gui/gui.c, Line: 153 msgid "Periodic table" msgstr "Periodic table" # File: gui/gui.c, Line: 153 msgid "open periodic table" msgstr "open periodic table" # File: gui/gui.c, Line: 154,894 # File: gui/work_menu.c, Line: 198 msgid "Quit" msgstr "Quit" # File: gui/gui.c, Line: 154 msgid "quit atomes" msgstr "quit atomes" # File: gui/gui.c, Line: 157 msgid "Open workspace" msgstr "Open workspace" # File: gui/gui.c, Line: 157 msgid "open atomes workspace" msgstr "open atomes workspace" # File: gui/gui.c, Line: 158 msgid "Save workspace" msgstr "Save workspace" # File: gui/gui.c, Line: 158 msgid "save atomes workspace" msgstr "save atomes workspace" # File: gui/gui.c, Line: 159 msgid "Close workspace" msgstr "Close workspace" # File: gui/gui.c, Line: 159 msgid "close atomes workspace" msgstr "close atomes workspace" # File: gui/gui.c, Line: 162 msgid "New project" msgstr "New project" # File: gui/gui.c, Line: 162 msgid "create new atomes project" msgstr "create new atomes project" # File: gui/gui.c, Line: 163 msgid "Open project" msgstr "Open project" # File: gui/gui.c, Line: 163 msgid "open atomes project" msgstr "open atomes project" # File: gui/gui.c, Line: 168 # File: gui/preferences.c, Line: 2474,3678,3855,4319,5062 # File: opengl/win/glwindow.c, Line: 126 msgid "General" msgstr "General" # File: gui/gui.c, Line: 168,907,1033 # File: gui/work_menu.c, Line: 130 msgid "Workspace" msgstr "Workspace" # File: gui/gui.c, Line: 168 msgid "Projects" msgstr "Projects" # File: gui/gui.c, Line: 775,856 # File: gui/work_menu.c, Line: 134,148,177 msgid "Save As" msgstr "Save As" # File: curve/m_curve.c, Line: 556 # File: gui/gui.c, Line: 778,861 # File: gui/work_menu.c, Line: 135,151,180 # File: opengl/edit/atom_edit.c, Line: 447 # File: opengl/edit/cbuild_edit.c, Line: 1434 # File: opengl/edit/cell_edit.c, Line: 203 # File: opengl/win/w_atoms.c, Line: 547 # File: opengl/win/w_coord.c, Line: 1378 # File: opengl/win/w_measures.c, Line: 683 msgid "Close" msgstr "Close" # File: gui/gui.c, Line: 799 msgid "ISAACS Project File (*.ipf)" msgstr "ISAACS Project File (*.ipf)" # File: gui/gui.c, Line: 802 # File: gui/work_menu.c, Line: 156,185,195 msgid "Atomic Coordinates" msgstr "Atomic Coordinates" # File: gui/gui.c, Line: 826 # File: gui/work_menu.c, Line: 167 msgid "Make Active" msgstr "Make Active" # File: gui/gui.c, Line: 832 # File: gui/work_menu.c, Line: 171 msgid "Analyze: %s" msgstr "Analyze: %s" # File: gui/gui.c, Line: 838 # File: gui/work_menu.c, Line: 175 msgid "Edit Name" msgstr "Edit Name" # File: gui/gui.c, Line: 844 # File: gui/work_menu.c, Line: 144 msgid "New" msgstr "New" # File: curve/m_curve.c, Line: 78 # File: gui/gui.c, Line: 864 # File: gui/work_menu.c, Line: 153 msgid "Export" msgstr "Export" # File: gui/gui.c, Line: 879 # File: gui/work_menu.c, Line: 191 msgid "Import" msgstr "Import" # File: gui/gui.c, Line: 930 # File: gui/work_menu.c, Line: 140 msgid "Project(s)" msgstr "Project(s)" # File: gui/gui.c, Line: 971 msgid "Chemistry and Physics" msgstr "Chemistry and Physics" # File: gui/gui.c, Line: 972 msgid "Box and Periodicity" msgstr "Box and Periodicity" # File: gui/gui.c, Line: 973 msgid "Bond Cutoffs" msgstr "Bond Cutoffs" # File: gui/gui.c, Line: 985 # File: gui/tools.c, Line: 342 # File: project/close_p.c, Line: 371 msgid "Toolboxes" msgstr "Toolboxes" # File: gui/gui.c, Line: 1018 msgid "Periodic Table" msgstr "Periodic Table" # File: gui/gui.c, Line: 1019 msgid "Preferences" msgstr "Preferences" # File: curve/m_curve.c, Line: 572 # File: gui/gui.c, Line: 1020 # File: opengl/win/glwindow.c, Line: 599 # File: opengl/win/menu_bar.c, Line: 253 # File: opengl/win/popup.c, Line: 4281 msgid "Shortcuts" msgstr "Shortcuts" # File: gui/gui.c, Line: 1034 # File: opengl/win/m_tools.c, Line: 320,517 msgid "Edit" msgstr "Edit" # File: gui/gui.c, Line: 1035 msgid "Analyze" msgstr "Analyze" # File: curve/m_curve.c, Line: 614 # File: gui/gui.c, Line: 1036 # File: opengl/win/glwindow.c, Line: 639,1523 # File: opengl/win/menu_bar.c, Line: 281 msgid "Help" msgstr "Help" # File: gui/initc.c, Line: 99 msgid "Please wait calculation in progress" msgstr "Please wait calculation in progress" # File: gui/initc.c, Line: 102 msgid "Computing" msgstr "Computing" # File: gui/initc.c, Line: 261,350 msgid "Size n of the ring [total number of nodes]" msgstr "Size n of the ring [total number of nodes]" # File: gui/initc.c, Line: 265,356 msgid "Size n of the chain [total number of nodes]" msgstr "Size n of the chain [total number of nodes]" # File: gui/interface.c, Line: 339 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n" msgstr "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n" # File: gui/interface.c, Line: 353 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n" msgstr "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n" # File: gui/interface.c, Line: 529 msgid "\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" # File: gui/interface.c, Line: 534 msgid "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" # File: gui/interface.c, Line: 677 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n" msgstr "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n" # File: gui/interface.c, Line: 117 msgid "Failed to open link:\n%s" msgstr "Failed to open link:\n%s" # File: gui/interface.c, Line: 121 msgid "Impossible to open link: " msgstr "Impossible to open link: " # File: gui/interface.c, Line: 139 msgid " Please contact me at:\n" msgstr " Please contact me at:\n" # File: gui/interface.c, Line: 144 msgid "\n Or check the website for information\n" msgstr "\n Or check the website for information\n" # File: gui/interface.c, Line: 147 msgid "Visit the project's website" msgstr "Visit the project's website" # File: gui/interface.c, Line: 187 msgid "Collaborations:" msgstr "Collaborations:" # File: gui/interface.c, Line: 189 msgid "Dr. Noël Jakse : dynamic structure factor" msgstr "Dr. Noël Jakse : dynamic structure factor" # File: gui/interface.c, Line: 191 msgid "Visualization, analyzis, creation/edition and post-processing of atomic scale models !" msgstr "Visualization, analyzis, creation/edition and post-processing of atomic scale models !" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: gui/interface.c, Line: 252,449 msgid "Information" msgstr "Information" # File: gui/interface.c, Line: 268 msgid "Warning" msgstr "Warning" # File: gui/interface.c, Line: 310,330 msgid "Error" msgstr "Error" # File: gui/interface.c, Line: 331 msgid "Details" msgstr "Details" # File: gui/interface.c, Line: 485 msgid "Leaving ?!" msgstr "Leaving ?!" # File: gui/interface.c, Line: 485 msgid "Are you sure you want to quit ?" msgstr "Are you sure you want to quit ?" # File: gui/interface.c, Line: 505,777 msgid "Parameter required" msgstr "Parameter required" # File: gui/interface.c, Line: 511 msgid "Cartesian" msgstr "Cartesian" # File: gui/interface.c, Line: 512 msgid "Atomic units" msgstr "Atomic units" # File: gui/interface.c, Line: 513 msgid "Fractional" msgstr "Fractional" # File: gui/interface.c, Line: 518 msgid "1 line by step, as many lines as MD steps" msgstr "1 line by step, as many lines as MD steps" # File: gui/interface.c, Line: 519 msgid "2 lines by step, twice as many lines as MD steps" msgstr "2 lines by step, twice as many lines as MD steps" # File: gui/interface.c, Line: 520 msgid "3 lines by step, three times as many lines as MD steps" msgstr "3 lines by step, three times as many lines as MD steps" # File: gui/interface.c, Line: 521 msgid "Single step chemical reaction" msgstr "Single step chemical reaction" # File: gui/interface.c, Line: 522 msgid "MD trajectory" msgstr "MD trajectory" # File: gui/interface.c, Line: 523 msgid "Single configuration" msgstr "Single configuration" # File: gui/interface.c, Line: 524 msgid "Round up to lowest integer" msgstr "Round up to lowest integer" # File: gui/interface.c, Line: 525 msgid "Round up to highest integer" msgstr "Round up to highest integer" # File: gui/interface.c, Line: 526 msgid "Round up to nearest integer" msgstr "Round up to nearest integer" # File: gui/interface.c, Line: 542 msgid "to lowest integer: ⌊nsites x occupancy⌋" msgstr "to lowest integer: ⌊nsites x occupancy⌋" # File: gui/interface.c, Line: 543 msgid "to highest integer: ⌈nsites x occupancy⌉" msgstr "to highest integer: ⌈nsites x occupancy⌉" # File: gui/interface.c, Line: 544 msgid "to nearest integer: ⌊nsites x occupancy⌉" msgstr "to nearest integer: ⌊nsites x occupancy⌉" # File: gui/interface.c, Line: 545 msgid "with nsites = f(space group, crystalline positions)" msgstr "with nsites = f(space group, crystalline positions)" # File: gui/interface.c, Line: 546 msgid "with nsites = f(symmetry positions, crystalline positions)" msgstr "with nsites = f(symmetry positions, crystalline positions)" # File: gui/interface.c, Line: 627 msgid "Parameter Required" msgstr "Parameter Required" # File: gui/interface.c, Line: 1088 msgid "%s - isolated" msgstr "%s - isolated" # File: gui/interface.c, Line: 1088 msgid " - isolated" msgstr " - isolated" # File: gui/main.c, Line: 179 msgid "\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" msgstr "\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" # File: gui/main.c, Line: 181 msgid "\nReport a bug to <" msgstr "\nReport a bug to <" # File: gui/main.c, Line: 192 msgid "\n3D atomic scale model analysis, creation/edition and post-processing tool\n" msgstr "\n3D atomic scale model analysis, creation/edition and post-processing tool\n" # File: gui/main.c, Line: 839 msgid "Error while reading workspace file\n%s\n" msgstr "Error while reading workspace file\n%s\n" # File: gui/main.c, Line: 1053 msgid "Impossible to load the splash screen\n" msgstr "Impossible to load the splash screen\n" # File: gui/main.c, Line: 1155 msgid "Fatal error on OpenGL initialization: trying to adjust environment !" msgstr "Fatal error on OpenGL initialization: trying to adjust environment !" # File: gui/main.c, Line: 1158 msgid "Impossible to initialize the OpenGL 3D rendering !" msgstr "Impossible to initialize the OpenGL 3D rendering !" # File: gui/main.c, Line: 1161 msgid "GDK visual must be modified to initialize the OpenGL context !" msgstr "GDK visual must be modified to initialize the OpenGL context !" # File: gui/main.c, Line: 1289 msgid "Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s" msgstr "Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s" # File: gui/msdcall.c, Line: 65,67,72,74,76,78,80,82,87,89,91,93,95,97 msgid "MSD" msgstr "MSD" # File: gui/msdcall.c, Line: 67,87,89,91,93,95,97 msgid "nac" msgstr "nac" # File: gui/msdcall.c, Line: 100,102,104 msgid "Correction" msgstr "Correction" # File: gui/msdcall.c, Line: 106,108,110 msgid "Drift" msgstr "Drift" # File: gui/msdcall.c, Line: 127 msgid "\t - Number of configurations: " msgstr "\t - Number of configurations: " # File: gui/msdcall.c, Line: 131 msgid "\n\n\t - Number of time steps between each configuration: " msgstr "\n\n\t - Number of time steps between each configuration: " # File: gui/msdcall.c, Line: 135 msgid "\n\n\t - Time step δt used to integrate Newton's equations of motion: " msgstr "\n\n\t - Time step δt used to integrate Newton's equations of motion: " # File: gui/msdcall.c, Line: 153 msgid "\n\nMean Square Displacement\n\n" msgstr "\n\nMean Square Displacement\n\n" # File: gui/msdcall.c, Line: 180 msgid "The MSD calculation has failed" msgstr "The MSD calculation has failed" # File: gui/preferences.c, Line: 3484 msgid "\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976)." msgstr "\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976)." # File: gui/preferences.c, Line: 448 msgid "Error: impossible to create %s (code: %lu)\n" msgstr "Error: impossible to create %s (code: %lu)\n" # File: gui/preferences.c, Line: 454 msgid "Error: impossible to create %s (code: %s)\n" msgstr "Error: impossible to create %s (code: %s)\n" # File: gui/preferences.c, Line: 461 msgid "g(r): number of δr" msgstr "g(r): number of δr" # File: gui/preferences.c, Line: 461 msgid "s(q): number of δq" msgstr "s(q): number of δq" # File: gui/preferences.c, Line: 461 msgid "s(k): number of δk" msgstr "s(k): number of δk" # File: gui/preferences.c, Line: 461 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: number of δr" # File: gui/preferences.c, Line: 462 msgid "Dij: number of δr [min(Dij)-max(Dij)]" msgstr "Dij: number of δr [min(Dij)-max(Dij)]" # File: gui/preferences.c, Line: 462 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Angles distribution: number of δθ [0-180°]" # File: gui/preferences.c, Line: 463 msgid "Spherical harmonics: l(max) in [2-40]" msgstr "Spherical harmonics: l(max) in [2-40]" # File: gui/preferences.c, Line: 463 msgid "MSD: steps between configurations" msgstr "MSD: steps between configurations" # File: gui/preferences.c, Line: 464 msgid "F(k,t): number of δk" msgstr "F(k,t): number of δk" # File: gui/preferences.c, Line: 465 msgid "MSD: time steps δt" msgstr "MSD: time steps δt" # File: gui/preferences.c, Line: 465 msgid "MSD: time unit" msgstr "MSD: time unit" # File: gui/preferences.c, Line: 466 msgid "Default search" msgstr "Default search" # File: gui/preferences.c, Line: 467,473 msgid "Atom(s) to initiate the search from" msgstr "Atom(s) to initiate the search from" # File: gui/preferences.c, Line: 468,474 msgid "Maximum size for a ring" msgstr "Maximum size for a ring" # File: gui/preferences.c, Line: 469,475 msgid "Maximum number of rings of size n per MD step" msgstr "Maximum number of rings of size n per MD step" # File: gui/preferences.c, Line: 471 msgid "No homopolar bonds in the rings (A-A, B-B ...)" msgstr "No homopolar bonds in the rings (A-A, B-B ...)" # File: gui/preferences.c, Line: 478 msgid "No homopolar bonds in the chains (A-A, B-B ...)" msgstr "No homopolar bonds in the chains (A-A, B-B ...)" # File: gui/preferences.c, Line: 479 msgid "Only search for 1-(2)n-1 chains" msgstr "Only search for 1-(2)n-1 chains" # File: gui/preferences.c, Line: 480 msgid "Analyze all correlated δt steps" msgstr "Analyze all correlated δt steps" # File: gui/preferences.c, Line: 481 msgid "Number of analyzed δt steps" msgstr "Number of analyzed δt steps" # File: gui/preferences.c, Line: 482 msgid "Number of analyzed q points" msgstr "Number of analyzed q points" # File: gui/preferences.c, Line: 483 msgid "Number of frequency points" msgstr "Number of frequency points" # File: gui/preferences.c, Line: 484 msgid "Default style" msgstr "Default style" # File: gui/preferences.c, Line: 485 # File: opengl/win/glwindow.c, Line: 139 msgid "Atom(s) color map" msgstr "Atom(s) color map" # File: gui/preferences.c, Line: 486 # File: opengl/win/glwindow.c, Line: 140 msgid "Polyhedra color map" msgstr "Polyhedra color map" # File: gui/preferences.c, Line: 487 # File: opengl/win/w_advance.c, Line: 1372 msgid "Quality" msgstr "Quality" # File: gui/preferences.c, Line: 488 # File: opengl/win/w_advance.c, Line: 1304 msgid "Ray Tracing" msgstr "Ray Tracing" # File: gui/preferences.c, Line: 489 msgid "Predefine material" msgstr "Predefine material" # File: gui/preferences.c, Line: 490 # File: opengl/win/w_advance.c, Line: 1377 msgid "Lightning model" msgstr "Lightning model" # File: gui/preferences.c, Line: 491 # File: opengl/win/w_advance.c, Line: 115 msgid "Metallic" msgstr "Metallic" # File: gui/preferences.c, Line: 492 # File: opengl/win/w_advance.c, Line: 116 msgid "Roughness" msgstr "Roughness" # File: gui/preferences.c, Line: 493 msgid "Back lightning" msgstr "Back lightning" # File: gui/preferences.c, Line: 495 # File: opengl/win/w_advance.c, Line: 119 msgid "Opacity" msgstr "Opacity" # File: gui/preferences.c, Line: 496 # File: opengl/win/w_advance.c, Line: 114 msgid "Albedo" msgstr "Albedo" # File: calc/cpmd/cpmd_atoms.c, Line: 157,448,480 # File: gui/preferences.c, Line: 497,505 # File: opengl/win/w_advance.c, Line: 129 msgid "Type" msgstr "Type" # File: gui/preferences.c, Line: 498 msgid "Fix" msgstr "Fix" # File: gui/preferences.c, Line: 499,511 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/m_axis.c, Line: 210,336 # File: opengl/win/w_advance.c, Line: 120 # File: opengl/win/w_labels.c, Line: 716 # File: opengl/win/w_search.c, Line: 3581 msgid "Position" msgstr "Position" # File: gui/preferences.c, Line: 500,1036 # File: opengl/win/w_advance.c, Line: 121 msgid "Direction" msgstr "Direction" # File: gui/preferences.c, Line: 501 # File: opengl/win/w_advance.c, Line: 122 msgid "Intensity" msgstr "Intensity" # File: gui/preferences.c, Line: 502 msgid "Attenuation" msgstr "Attenuation" # File: gui/preferences.c, Line: 503 msgid "Spot specifics" msgstr "Spot specifics" # File: gui/preferences.c, Line: 504 # File: opengl/win/m_rep.c, Line: 504 msgid "Mode" msgstr "Mode" # File: gui/preferences.c, Line: 506 msgid "Density" msgstr "Density" # File: gui/preferences.c, Line: 507 msgid "Depth" msgstr "Depth" # File: gui/preferences.c, Line: 508,1012,1045,1051,1147,2520,3215,3444 # File: opengl/win/m_back.c, Line: 72 # File: opengl/win/m_box.c, Line: 380,629 # File: opengl/win/m_coord.c, Line: 656 # File: opengl/win/popup.c, Line: 3667 # File: opengl/win/w_atoms.c, Line: 360 # File: opengl/win/w_coord.c, Line: 537,873,892,997 msgid "Color" msgstr "Color" # File: gui/preferences.c, Line: 509 msgid "Show clones" msgstr "Show clones" # File: gui/preferences.c, Line: 510 msgid "Show box" msgstr "Show box" # File: gui/preferences.c, Line: 512 msgid "Rendering" msgstr "Rendering" # File: gui/preferences.c, Line: 513 msgid "Scaling" msgstr "Scaling" # File: gui/preferences.c, Line: 514 # File: opengl/win/w_axis.c, Line: 969 # File: opengl/win/w_labels.c, Line: 707 msgid "Font" msgstr "Font" # File: gui/preferences.c, Line: 515 msgid "Shift" msgstr "Shift" # File: gui/preferences.c, Line: 516,3696 # File: opengl/win/w_axis.c, Line: 1000 msgid "Colors" msgstr "Colors" # File: gui/preferences.c, Line: 517 msgid "Legend on x" msgstr "Legend on x" # File: gui/preferences.c, Line: 518 msgid "Legend on y" msgstr "Legend on y" # File: gui/preferences.c, Line: 519 msgid "Legend on z" msgstr "Legend on z" # File: gui/preferences.c, Line: 532 msgid "atomes preferences XML file" msgstr "atomes preferences XML file" # File: gui/preferences.c, Line: 550 msgid "Total cutoff" msgstr "Total cutoff" # File: gui/preferences.c, Line: 563 msgid "cutoff %s-%s" msgstr "cutoff %s-%s" # File: gui/preferences.c, Line: 682 msgid "Number of lights" msgstr "Number of lights" # File: gui/preferences.c, Line: 946 msgid "Format" msgstr "Format" # File: gui/preferences.c, Line: 955 msgid "Only label color" msgstr "Only label color" # File: gui/preferences.c, Line: 1009,1114 msgid "Wireframe width" msgstr "Wireframe width" # File: gui/preferences.c, Line: 1009,1114 msgid "Cylinder radius" msgstr "Cylinder radius" # File: gui/preferences.c, Line: 1030 msgid "Gradient" msgstr "Gradient" # File: gui/preferences.c, Line: 1040 # File: opengl/win/w_colors.c, Line: 549 msgid "Mixed position" msgstr "Mixed position" # File: gui/preferences.c, Line: 1063 msgid "Representation type" msgstr "Representation type" # File: gui/preferences.c, Line: 1069 msgid "Camera depth" msgstr "Camera depth" # File: gui/preferences.c, Line: 1075 # File: opengl/win/m_rep.c, Line: 427 msgid "Zoom" msgstr "Zoom" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera pitch" msgstr "Camera pitch" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera heading" msgstr "Camera heading" # File: gui/preferences.c, Line: 1088 msgid "Camera x" msgstr "Camera x" # File: gui/preferences.c, Line: 1088 msgid "Camera y" msgstr "Camera y" # File: gui/preferences.c, Line: 1104 msgid "Template position" msgstr "Template position" # File: gui/preferences.c, Line: 1110 msgid "Custom position" msgstr "Custom position" # File: gui/preferences.c, Line: 1118 # File: opengl/win/m_axis.c, Line: 187,332 msgid "Length" msgstr "Length" # File: gui/preferences.c, Line: 1179 # File: opengl/win/w_labels.c, Line: 711 msgid "Font color" msgstr "Font color" # File: gui/preferences.c, Line: 1186 msgid "Tilt along" msgstr "Tilt along" # File: gui/preferences.c, Line: 1191 # File: opengl/win/w_labels.c, Line: 813 msgid "Pattern" msgstr "Pattern" # File: gui/preferences.c, Line: 1196 # File: opengl/win/w_labels.c, Line: 832 msgid "Factor" msgstr "Factor" # File: gui/preferences.c, Line: 1201,3426,3587 # File: opengl/win/w_labels.c, Line: 837 msgid "Width" msgstr "Width" # File: gui/preferences.c, Line: 1216 msgid "Selection color" msgstr "Selection color" # File: gui/preferences.c, Line: 2462 msgid "The View tab regroups representation options" msgstr "The View tab regroups representation options" # File: gui/preferences.c, Line: 2463 msgid "which effect apply to the general aspect of the model:" msgstr "which effect apply to the general aspect of the model:" # File: curve/cedit.c, Line: 384,385 # File: gui/preferences.c, Line: 2465,2484 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Axis" msgstr "Axis" # File: gui/preferences.c, Line: 2464 msgid "scene set-up and orientation" msgstr "scene set-up and orientation" # File: gui/preferences.c, Line: 2465 msgid "axis options" msgstr "axis options" # File: gui/preferences.c, Line: 2466,2526 # File: opengl/win/glwindow.c, Line: 630 # File: opengl/win/menu_bar.c, Line: 278 # File: opengl/win/popup.c, Line: 4031,4243 msgid "Tools" msgstr "Tools" # File: gui/preferences.c, Line: 2466 msgid "measures and selections option" msgstr "measures and selections option" # File: gui/preferences.c, Line: 2479 # File: opengl/win/glwindow.c, Line: 558 # File: opengl/win/m_rep.c, Line: 812 msgid "Representation" msgstr "Representation" # File: gui/preferences.c, Line: 2489 msgid "Select measure type" msgstr "Select measure type" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: gui/preferences.c, Line: 2491,2508 msgid "Standard" msgstr "Standard" # File: gui/preferences.c, Line: 2492,2509 # File: opengl/win/glwindow.c, Line: 126,169,172 msgid "Edition mode" msgstr "Edition mode" # File: gui/preferences.c, Line: 2506 msgid "Select selection type" msgstr "Select selection type" # File: calc/dl_poly/dlp_field.c, Line: 188 # File: gui/preferences.c, Line: 3221,3336,3341 msgid "atom" msgstr "atom" # File: gui/preferences.c, Line: 3221,3336,3341 msgid "clone" msgstr "clone" # File: gui/preferences.c, Line: 3224 msgid "%s %s color" msgstr "%s %s color" # File: gui/preferences.c, Line: 3299 # File: opengl/win/w_search.c, Line: 2903,3129 msgid "atom(s)" msgstr "atom(s)" # File: gui/preferences.c, Line: 3299 msgid "dot(s)" msgstr "dot(s)" # File: gui/preferences.c, Line: 3299 msgid "sphere(s)" msgstr "sphere(s)" # File: gui/preferences.c, Line: 3300 msgid "radius" msgstr "radius" # File: gui/preferences.c, Line: 3300 msgid "size" msgstr "size" # File: gui/preferences.c, Line: 3300 msgid "width" msgstr "width" # File: gui/preferences.c, Line: 3301 msgid "bond(s)" msgstr "bond(s)" # File: gui/preferences.c, Line: 3301 msgid "wireframe(s)" msgstr "wireframe(s)" # File: gui/preferences.c, Line: 3301 msgid "cylinder(s)" msgstr "cylinder(s)" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit cloned %s %s" msgstr "Edit cloned %s %s" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit %s %s" msgstr "Edit %s %s" # File: gui/preferences.c, Line: 3336 msgid "Select %s color" msgstr "Select %s color" # File: gui/preferences.c, Line: 3341 msgid "Select %s label color" msgstr "Select %s label color" # File: calc/dl_poly/dlp_field.c, Line: 925 # File: gui/preferences.c, Line: 3425 # File: opengl/win/m_map.c, Line: 679 msgid "Element" msgstr "Element" # File: gui/preferences.c, Line: 3425 msgid "Symbol" msgstr "Symbol" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_axis.c, Line: 974 # File: opengl/win/w_labels.c, Line: 726 msgid "Size" msgstr "Size" # File: gui/preferences.c, Line: 3427 msgid "Covalent [1]" msgstr "Covalent [1]" # File: gui/preferences.c, Line: 3427 msgid "Ionic [2]" msgstr "Ionic [2]" # File: gui/preferences.c, Line: 3427 msgid "Crystal [4,5]" msgstr "Crystal [4,5]" # File: gui/preferences.c, Line: 3478 msgid "User defined values appear in colored bold font." msgstr "User defined values appear in colored bold font." # File: gui/preferences.c, Line: 3494 msgid "By default label and species colors are similar," msgstr "By default label and species colors are similar," # File: gui/preferences.c, Line: 3494 msgid "you can modify that using this dialog window." msgstr "you can modify that using this dialog window." # File: gui/preferences.c, Line: 3494 msgid "You can also use a single color for all labels:" msgstr "You can also use a single color for all labels:" # File: gui/preferences.c, Line: 3506 msgid "Use single color" msgstr "Use single color" # File: gui/preferences.c, Line: 3543 msgid "Edit species related parameters" msgstr "Edit species related parameters" # File: gui/preferences.c, Line: 3547 msgid "Override species based parameters" msgstr "Override species based parameters" # File: gui/preferences.c, Line: 3552 msgid "Set default value" msgstr "Set default value" # File: gui/preferences.c, Line: 3586 msgid "Atom(s)" msgstr "Atom(s)" # File: gui/preferences.c, Line: 3586 msgid "Bond(s)" msgstr "Bond(s)" # File: gui/preferences.c, Line: 3586 msgid "\tClone(s)" msgstr "\tClone(s)" # File: gui/preferences.c, Line: 3586 msgid "Atom(s) " msgstr "Atom(s) " # File: gui/preferences.c, Line: 3299 msgid "atom(s) " msgstr "atom(s) " # File: calc/dl_poly/dlp_field.c, Line: 346 # File: opengl/win/glwindow.c, Line: 526 # File: opengl/win/m_clones.c, Line: 125 # File: opengl/win/menu_bar.c, Line: 187 # File: opengl/win/popup.c, Line: 4229 msgid "Bond(s)" msgstr "Bond(s)" # File: gui/preferences.c, Line: 3644 msgid "The Model tab regroups atom(s), bond(s) and clone(s) options" msgstr "The Model tab regroups atom(s), bond(s) and clone(s) options" # File: gui/preferences.c, Line: 3645 msgid "which effect apply when the corresponding OpenGL style is used:" msgstr "which effect apply when the corresponding OpenGL style is used:" # File: gui/preferences.c, Line: 3646 # File: opengl/win/glwindow.c, Line: 141 # File: opengl/win/m_style.c, Line: 59 msgid "Balls and Sticks" msgstr "Balls and Sticks" # File: gui/preferences.c, Line: 3646 msgid "atoms* and bonds radii" msgstr "atoms* and bonds radii" # File: gui/preferences.c, Line: 3647 # File: opengl/win/glwindow.c, Line: 148 # File: opengl/win/m_style.c, Line: 60 # File: opengl/win/w_axis.c, Line: 935 # File: opengl/win/w_box.c, Line: 400 msgid "Wireframes" msgstr "Wireframes" # File: gui/preferences.c, Line: 3647 msgid "dots** size and wireframes width" msgstr "dots** size and wireframes width" # File: gui/preferences.c, Line: 3648 # File: opengl/win/m_style.c, Line: 61,371,406,505 # File: opengl/win/popup.c, Line: 3104 msgid "Spacefilled" msgstr "Spacefilled" # File: gui/preferences.c, Line: 3648 msgid "tabulated parameters" msgstr "tabulated parameters" # File: gui/preferences.c, Line: 3649 # File: opengl/win/glwindow.c, Line: 142 # File: opengl/win/m_box.c, Line: 362,370,617 # File: opengl/win/m_style.c, Line: 63 # File: opengl/win/w_axis.c, Line: 936 # File: opengl/win/w_box.c, Line: 401 msgid "Cylinders" msgstr "Cylinders" # File: gui/preferences.c, Line: 3649 msgid "bonds radii" msgstr "bonds radii" # File: gui/preferences.c, Line: 3652 msgid "It also provides options to customize atomic label(s)," msgstr "It also provides options to customize atomic label(s)," # File: gui/preferences.c, Line: 3652 msgid "and, the model box, if any:" msgstr "and, the model box, if any:" # File: gui/preferences.c, Line: 3653,3701 msgid "Labels" msgstr "Labels" # File: gui/preferences.c, Line: 3653 msgid "atom labels" msgstr "atom labels" # File: gui/preferences.c, Line: 3654,3718 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Box" msgstr "Box" # File: gui/preferences.c, Line: 3654 msgid "model box details" msgstr "model box details" # File: gui/preferences.c, Line: 3659 msgid "Atoms" msgstr "Atoms" # File: gui/preferences.c, Line: 3659 msgid "Clones" msgstr "Clones" # File: gui/preferences.c, Line: 3664 msgid "Edit species colors" msgstr "Edit species colors" # File: gui/preferences.c, Line: 3668 msgid "Always show clone(s), if any." msgstr "Always show clone(s), if any." # File: gui/preferences.c, Line: 3671 msgid "Always show box, if any." msgstr "Always show box, if any." # File: gui/preferences.c, Line: 3675 msgid "the same parameters are also used for the spheres style" msgstr "the same parameters are also used for the spheres style" # File: gui/preferences.c, Line: 3676 msgid "the same parameters are also used for the dots style" msgstr "the same parameters are also used for the dots style" # File: gui/preferences.c, Line: 3697 msgid "Adjust color(s)" msgstr "Adjust color(s)" # File: gui/preferences.c, Line: 3742 msgid "f(atoms) *" msgstr "f(atoms) *" # File: gui/preferences.c, Line: 3785 # File: opengl/win/m_map.c, Line: 1132,1239 # File: opengl/win/w_coord.c, Line: 90 msgid "Atomic Species" msgstr "Atomic Species" # File: gui/preferences.c, Line: 3786 # File: opengl/win/m_poly.c, Line: 333,493 msgid "Total Coordination(s)" msgstr "Total Coordination(s)" # File: gui/preferences.c, Line: 3787 # File: opengl/win/m_poly.c, Line: 334,494 msgid "Partial Coordination(s)" msgstr "Partial Coordination(s)" # File: gui/preferences.c, Line: 3816 msgid "The OpenGL tab regroups rendering options" msgstr "The OpenGL tab regroups rendering options" # File: gui/preferences.c, Line: 3817 msgid "use it to configure the OpenGL 3D scene:" msgstr "use it to configure the OpenGL 3D scene:" # File: gui/preferences.c, Line: 3818,3857 msgid "Material" msgstr "Material" # File: gui/preferences.c, Line: 3818 msgid "aspect for atom(s) and bond(s)" msgstr "aspect for atom(s) and bond(s)" # File: gui/preferences.c, Line: 3819,3858 msgid "Lights" msgstr "Lights" # File: gui/preferences.c, Line: 3819 msgid "lightning of the scene" msgstr "lightning of the scene" # File: gui/preferences.c, Line: 3820,3859 msgid "Fog" msgstr "Fog" # File: gui/preferences.c, Line: 3820 msgid "atmosphere effects" msgstr "atmosphere effects" # File: gui/preferences.c, Line: 3821 msgid "It also offers to adjust the main visualization style and the color maps" msgstr "It also offers to adjust the main visualization style and the color maps" # File: gui/preferences.c, Line: 3826 msgid "Style" msgstr "Style" # File: gui/preferences.c, Line: 3838 msgid "if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks" msgstr "if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks" # File: gui/preferences.c, Line: 3841 msgid "Color maps" msgstr "Color maps" # File: gui/preferences.c, Line: 3844 msgid "\tatom(s) and bond(s)" msgstr "\tatom(s) and bond(s)" # File: gui/preferences.c, Line: 3849 msgid "\tpolyhedra" msgstr "\tpolyhedra" # File: gui/preferences.c, Line: 4016,4196 msgid "Spec. α" msgstr "Spec. α" # File: gui/preferences.c, Line: 4017,4211 msgid "Spec. β" msgstr "Spec. β" # File: gui/preferences.c, Line: 4018 msgid "Rcut (α, β)" msgstr "Rcut (α, β)" # File: gui/preferences.c, Line: 4019 msgid "Use *" msgstr "Use *" # File: gui/preferences.c, Line: 4040 msgid "Unused values will not be saved !" msgstr "Unused values will not be saved !" # File: gui/preferences.c, Line: 4187 msgid "Select partial cutoffs(s)" msgstr "Select partial cutoffs(s)" # File: gui/preferences.c, Line: 4229,4269 msgid "Step(s) between configurations" msgstr "Step(s) between configurations" # File: gui/preferences.c, Line: 4267 msgid "g(r): number of δr" msgstr "g(r): number of δr" # File: gui/preferences.c, Line: 4267 msgid "s(q): number of δq" msgstr "s(q): number of δq" # File: gui/preferences.c, Line: 4267 msgid "s(k): number of δk" msgstr "s(k): number of δk" # File: gui/preferences.c, Line: 4267 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: number of δr" # File: gui/preferences.c, Line: 4268 msgid "Dij: number of δr [Dijmin-Dijmax]" msgstr "Dij: number of δr [Dijmin-Dijmax]" # File: gui/preferences.c, Line: 4268 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Angles distribution: number of δθ [0-180°]" # File: gui/preferences.c, Line: 4269 msgid "Spherical harmonics: lmax ∈ [2-40]" msgstr "Spherical harmonics: lmax ∈ [2-40]" # File: gui/preferences.c, Line: 4269 msgid "F(k,δt): number of δk" msgstr "F(k,δt): number of δk" # File: gui/preferences.c, Line: 4270 msgid "The Analysis tab regroups calculation options" msgstr "The Analysis tab regroups calculation options" # File: gui/preferences.c, Line: 4271 msgid "use it to setup your own default parameters:" msgstr "use it to setup your own default parameters:" # File: gui/preferences.c, Line: 4272,4343 msgid "Calculations" msgstr "Calculations" # File: gui/preferences.c, Line: 4272 msgid "most analysis options" msgstr "most analysis options" # File: gui/preferences.c, Line: 4273,4350 # File: opengl/win/popup.c, Line: 4235 msgid "Rings" msgstr "Rings" # File: gui/preferences.c, Line: 4273 msgid "ring statistics options" msgstr "ring statistics options" # File: gui/preferences.c, Line: 4274,4350 msgid "Chains" msgstr "Chains" # File: gui/preferences.c, Line: 4274 msgid "chain statistics options" msgstr "chain statistics options" # File: gui/preferences.c, Line: 4275 msgid "dynamic structure factor options" msgstr "dynamic structure factor options" # File: gui/preferences.c, Line: 4280 msgid "To determine the existence, or the absence, of a chemical bond" msgstr "To determine the existence, or the absence, of a chemical bond" # File: gui/preferences.c, Line: 4281 msgid "between 2 atoms is a key feature in the atomes software" msgstr "between 2 atoms is a key feature in the atomes software" # File: gui/preferences.c, Line: 4284 msgid "It is used for analysis purposes, and, to draw bonds in the OpenGL window." msgstr "It is used for analysis purposes, and, to draw bonds in the OpenGL window." # File: gui/preferences.c, Line: 4286 msgid "You can adapt below the distance cutoffs:" msgstr "You can adapt below the distance cutoffs:" # File: gui/preferences.c, Line: 4292 msgid "Total cutoff" msgstr "Total cutoff" # File: gui/preferences.c, Line: 4294 msgid "Evaluated by atomes" msgstr "Evaluated by atomes" # File: gui/preferences.c, Line: 4295 msgid "User Defined *" msgstr "User Defined *" # File: gui/preferences.c, Line: 4313 msgid "Partial cutoff(s)" msgstr "Partial cutoff(s)" # File: gui/preferences.c, Line: 4314 msgid "Set default cutoff(s)" msgstr "Set default cutoff(s)" # File: gui/preferences.c, Line: 4317 msgid "The highest this value is, the highest the number of neighbors around an atom." msgstr "The highest this value is, the highest the number of neighbors around an atom." # File: gui/preferences.c, Line: 4339 msgid "Dynamical analysis: MSD, S(q,ω)" msgstr "Mean Squared Displacement :" # File: gui/preferences.c, Line: 4879 msgid "Apply to project(s) in workspace ?" msgstr "Apply to project(s) in workspace ?" # File: gui/preferences.c, Line: 4879 msgid "Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?" msgstr "Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?" # File: gui/preferences.c, Line: 4882 msgid "Project selection" msgstr "Project selection" # File: gui/preferences.c, Line: 4882 msgid "Select to apply preferences" msgstr "Select to apply preferences" # File: gui/preferences.c, Line: 4891 msgid "Including analysis parameters and cutoffs ..." msgstr "Including analysis parameters and cutoffs ..." # File: gui/preferences.c, Line: 4945 msgid "Restore default parameters" msgstr "Restore default parameters" # File: global.c, Line: 141 msgid "Analysis" msgstr "Analysis" # File: gui/preferences.c, Line: 4954,5064 # File: opengl/win/m_tools.c, Line: 78 msgid "Analysis " msgstr "Analysis" # File: gui/preferences.c, Line: 4956,5066 # File: opengl/win/glwindow.c, Line: 622 # File: opengl/win/menu_bar.c, Line: 270,275 # File: opengl/win/w_volumes.c, Line: 1138 msgid "Model" msgstr "Model" # File: gui/preferences.c, Line: 4957,5067 # File: opengl/win/glwindow.c, Line: 631 # File: opengl/win/menu_bar.c, Line: 279 msgid "View" msgstr "View" # File: gui/preferences.c, Line: 4978 msgid "Save parameters" msgstr "Save parameters" # File: gui/preferences.c, Line: 4981,5127 msgid "Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?" msgstr "Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?" # File: gui/preferences.c, Line: 4982,5128 msgid "Save atomes preferences to file ?" msgstr "Save atomes preferences to file ?" # File: gui/preferences.c, Line: 4986,5132 msgid "Error while trying to save preferences to file" msgstr "Error while trying to save preferences to file" # File: gui/preferences.c, Line: 5024 msgid "User preferences" msgstr "User preferences" # File: gui/preferences.c, Line: 5037 msgid "Browse the following to modify the default configuration of atomes" msgstr "Browse the following to modify the default configuration of atomes" # File: gui/preferences.c, Line: 5038 msgid "by replacing internal parameters by user defined preferences." msgstr "by replacing internal parameters by user defined preferences." # File: gui/preferences.c, Line: 5039 msgid "calculation preferences" msgstr "calculation preferences" # File: gui/preferences.c, Line: 5040 msgid "rendering preferences" msgstr "rendering preferences" # File: gui/preferences.c, Line: 5041 msgid "atom(s), bond(s) and box preferences" msgstr "atom(s), bond(s) and box preferences" # File: gui/preferences.c, Line: 5042 msgid "representation and projection preferences" msgstr "representation and projection preferences" # File: gui/preferences.c, Line: 5043 msgid "Default parameters are used for any new project added to the workspace\n" msgstr "Default parameters are used for any new project added to the workspace\n" # File: gui/preferences.c, Line: 5058 msgid "Restore atomes default parameters" msgstr "Restore atomes default parameters" # File: gui/preferences.c, Line: 5094 msgid "rendering" msgstr "rendering" # File: gui/preferences.c, Line: 5104 # File: opengl/win/w_bonds.c, Line: 410 msgid "box" msgstr "box" # File: gui/preferences.c, Line: 5108 # File: opengl/win/w_bonds.c, Line: 410 msgid "axis" msgstr "axis" # File: gui/preferences.c, Line: 5112 msgid "background" msgstr "background" # File: gui/preferences.c, Line: 5084 msgid "representation" msgstr "representation" # File: gui/preferences.c, Line: 5085 msgid "Set %s preferences as default preferences ?" msgstr "Set %s preferences as default preferences ?" # File: gui/preferences.c, Line: 5087 msgid "Set model preferences as default ?" msgstr "Set model preferences as default ?" # File: gui/preferences.c, Line: 5157 msgid "Set default" msgstr "Set default" # File: gui/ringscall.c, Line: 488 msgid "\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" # File: gui/ringscall.c, Line: 93 msgid "%s - %sAll]" msgstr "%s - %sAll]" # File: gui/ringscall.c, Line: 171 msgid "\n\nRing statistics\n\n" msgstr "\n\nRing statistics\n\n" # File: gui/ringscall.c, Line: 172 msgid "\n%s rings analysis details:\n" msgstr "\n%s rings analysis details:\n" # File: gui/ringscall.c, Line: 178 msgid " * only ABAB rings have been considered\n" msgstr " * only ABAB rings have been considered\n" # File: gui/ringscall.c, Line: 182 msgid " * no homopolar bonds in the rings (A-A, B-B ...)\n" msgstr " * no homopolar bonds in the rings (A-A, B-B ...)\n" # File: gui/ringscall.c, Line: 186 msgid " * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n" msgstr " * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n" # File: gui/ringscall.c, Line: 195 msgid "\n Average number of rings per configuration: " msgstr "\n Average number of rings per configuration: " # File: gui/ringscall.c, Line: 205 msgid "\n Total number of rings: " msgstr "\n Total number of rings: " # File: gui/ringscall.c, Line: 214 msgid " Average number of ring(s) with n > " msgstr " Average number of ring(s) with n > " # File: gui/ringscall.c, Line: 218 msgid " Number of ring(s) with n > " msgstr " Number of ring(s) with n > " # File: gui/ringscall.c, Line: 223 msgid " nodes that potentially exist: " msgstr " nodes that potentially exist: " # File: gui/ringscall.c, Line: 480 msgid "The ring statistics calculation has failed" msgstr "The ring statistics calculation has failed" # File: gui/sktcall.c, Line: 254 msgid "\tMolecular dynamics information:\n\n" msgstr "\tMolecular dynamics information:\n\n" # File: gui/sktcall.c, Line: 257 msgid "\n\n\tIntermediate scattering - F(q,δt)\n\n" msgstr "\n\n\tIntermediate scattering - F(q,δt)\n\n" # File: gui/sktcall.c, Line: 259 msgid "\t - Correlation threshold δt" msgstr "\t - Correlation threshold δt" # File: gui/sktcall.c, Line: 268 msgid "\t - All " msgstr "\t - All " # File: gui/sktcall.c, Line: 272 msgid " correlated calculations saved" msgstr " correlated calculations saved" # File: gui/sktcall.c, Line: 277 msgid "\t - Results saved for " msgstr "\t - Results saved for " # File: gui/sktcall.c, Line: 281 msgid " correlated calculations:\n\n" msgstr " correlated calculations:\n\n" # File: gui/sktcall.c, Line: 295 msgid "\tDynamic structure factor - S(q,ω)\n\n" msgstr "\tDynamic structure factor - S(q,ω)\n\n" # File: gui/sktcall.c, Line: 300 msgid " q vectors were analyzed:\n\n" msgstr " q vectors were analyzed:\n\n" # File: gui/sktcall.c, Line: 364 msgid "The dynamic structure factor calculation has failed" msgstr "The dynamic structure factor calculation has failed" # File: gui/sktcall.c, Line: 375 # File: gui/sqcall.c, Line: 295 msgid "Problem during the selection of the k-points\nused to sample the reciprocal lattice" msgstr "Problem during the selection of the k-points\nused to sample the reciprocal lattice" # File: gui/spcall.c, Line: 116 msgid "\n\nSpherical harmonics\n\n" msgstr "\n\nSpherical harmonics\n\n" # File: gui/spcall.c, Line: 120 msgid "\nResults for the " msgstr "\nResults for the " # File: gui/spcall.c, Line: 122 msgid " atoms: \n\n" msgstr " atoms: \n\n" # File: gui/spcall.c, Line: 130 msgid "[All]" msgstr "[All]" # File: gui/spcall.c, Line: 240 msgid "Unexpected error when analyzing the spherical harmonics" msgstr "Unexpected error when analyzing the spherical harmonics" # File: gui/sqcall.c, Line: 131 msgid "\n\nStructure factor(s)" msgstr "\n\nStructure factor(s)" # File: gui/sqcall.c, Line: 135 msgid "\n\nDynamic structure factor(s)" msgstr "\n\nDynamic structure factor(s)" # File: gui/sqcall.c, Line: 139 msgid " - reciprocal space calculation\n\n" msgstr " - reciprocal space calculation\n\n" # File: gui/sqcall.c, Line: 146 msgid "\tReciprocal space discretization:\n\n" msgstr "\tReciprocal space discretization:\n\n" # File: gui/sqcall.c, Line: 147 msgid "\t - Number of δq steps: " msgstr "\t - Number of δq steps: " # File: gui/sqcall.c, Line: 151 msgid "\n\n\t between " msgstr "\n\n\t between " # File: gui/sqcall.c, Line: 155,175 # File: calc/dl_poly/dlp_field.c, Line: 3 msgid "and" msgstr "and" # File: gui/sqcall.c, Line: 162 msgid " is the minimum wave vector, and " msgstr " is the minimum wave vector, and " # File: gui/sqcall.c, Line: 165 msgid " is the maximum wave vector:\n\n" msgstr " is the maximum wave vector:\n\n" # File: gui/sqcall.c, Line: 220,283 msgid "The S(q) calculation has failed" msgstr "The S(q) calculation has failed" # File: gui/tools.c, Line: 302 msgid "Logo" msgstr "Logo" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: gui/tools.c, Line: 302 # File: opengl/win/w_search.c, Line: 3577 msgid "Name" msgstr "Name" # File: gui/tools.c, Line: 302 msgid "Button" msgstr "Button" # File: gui/work_menu.c, Line: 155,184,194 msgid "ISAACS Project File '*.ipf'" msgstr "ISAACS Project File '*.ipf'" # ============================================================ # Section: src # ============================================================ # File: global.c, Line: 141 msgid "Edition" msgstr "Edition" # File: curve/m_curve.c, Line: 78 # File: opengl/win/m_tools.c, Line: 78 msgid "Edition " msgstr "Edition" # File: global.c, Line: 145 msgid "\nIf this is a bug please report it to:" msgstr "\nIf this is a bug please report it to:" # File: global.c, Line: 147 msgid "All (No Rule)" msgstr "Tous (Aucune Règle)" # File: global.c, Line: 148 msgid "King's" msgstr "de King" # File: global.c, Line: 149 msgid "Guttman's" msgstr "de Guttman" # File: global.c, Line: 150 msgid "Primitive" msgstr "Primitive" # File: global.c, Line: 151 msgid "Strong" msgstr "Strong" # File: global.c, Line: 617 msgid "Error in string format: string = \"%s\" - value == %lf\n" msgstr "Error in string format: string = \"%s\" - value == %lf\n" # File: global.c, Line: 646 msgid "\n \tAnalysis was performed in: " msgstr "\n \tAnalysis was performed in: " # File: project/close_p.c, Line: 526 msgid "No project to be closed" msgstr "No project to be closed" # File: project/init_p.c, Line: 279 msgid "Project N°" msgstr "Project N°" # File: opengl/win/glwindow.c, Line: 315 # File: opengl/win/m_map.c, Line: 1139,1250 # File: opengl/win/menu_bar.c, Line: 224,228 # File: opengl/win/popup.c, Line: 4237 # File: opengl/win/w_coord.c, Line: 93,1351 # File: opengl/win/w_volumes.c, Line: 1139 # File: project/read_mol.c, Line: 149 msgid "Fragment(s)" msgstr "Fragment(s)" # File: opengl/win/glwindow.c, Line: 316 # File: opengl/win/m_map.c, Line: 1140,1253 # File: opengl/win/menu_bar.c, Line: 232,236 # File: opengl/win/popup.c, Line: 4238 # File: opengl/win/w_coord.c, Line: 94,1355 # File: opengl/win/w_volumes.c, Line: 1140 # File: project/read_mol.c, Line: 150 # File: calc/dl_poly/dlp_field.c, Line: 142 msgid "Molecule(s)" msgstr "Molecule(s)" # File: project/update_p.c, Line: 258 msgid "Impossible to update project: %s\n" msgstr "Impossible to update project: %s\n" # File: project/update_p.c, Line: 280 # File: workspace/workspace.c, Line: 441 msgid "Toolboxes - %s" msgstr "Toolboxes - %s" # File: project/readers/read_c3d.c, Line: 328,351 # File: project/readers/read_xyz.c, Line: 309,332 msgid "Wrong file format - cannot find the number of atoms !" msgstr "Wrong file format - cannot find the number of atoms !" # File: project/readers/read_c3d.c, Line: 329,352 # File: project/readers/read_xyz.c, Line: 310,333 msgid "Wrong file format - first line is corrupted !" msgstr "Wrong file format - first line is corrupted !" # File: project/readers/read_c3d.c, Line: 334,357 # File: project/readers/read_hist.c, Line: 440 # File: project/readers/read_trj.c, Line: 252 # File: project/readers/read_vas.c, Line: 251 # File: project/readers/read_xyz.c, Line: 315,338 msgid "Number of atoms" msgstr "Number of atoms" # File: project/readers/read_c3d.c, Line: 343,366 # File: project/readers/read_hist.c, Line: 441 # File: project/readers/read_trj.c, Line: 254 # File: project/readers/read_vas.c, Line: 253 # File: project/readers/read_xyz.c, Line: 324,347 msgid "Number of steps" msgstr "Number of steps" # File: project/readers/read_cif.c, Line: 367 msgid "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s).\n\n" "Please select an atom type for the following object(s):" msgstr "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s).\n\n" "Please select an atom type for the following object(s):" # File: project/readers/read_cif.c, Line: 769 msgid "CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" # File: project/readers/read_cif.c, Line: 819 msgid "CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" # File: project/readers/read_cif.c, Line: 857 msgid "Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n" msgstr "Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n" # File: project/readers/read_cif.c, Line: 1203 msgid "Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n" msgstr "Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n" # File: project/readers/read_cif.c, Line: 1265 msgid "Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n" msgstr "Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n" # File: project/readers/read_cif.c, Line: 1277 msgid "Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n" msgstr "Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n" # File: project/readers/read_cif.c, Line: 1658,1739 msgid "Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" # File: project/readers/read_cif.c, Line: 1899 msgid "Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" # File: project/readers/read_cif.c, Line: 2048 msgid "Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n" msgstr "Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n" # File: project/readers/read_cif.c, Line: 2063 msgid "Space group and lattice parameters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system.\n" msgstr "Space group and lattice parameters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system.\n" # File: project/readers/read_cif.c, Line: 2170 msgid "Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n" msgstr "Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n" # File: project/readers/read_cif.c, Line: 2517 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n" msgstr "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n" # File: project/readers/read_cif.c, Line: 2525 msgid "Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n " msgstr "Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n " # File: project/readers/read_cif.c, Line: 362 msgid "Error while reading CIF file" msgstr "Error while reading CIF file" # File: project/readers/read_cif.c, Line: 379 msgid "Type N°%d:\t%s" msgstr "Type N°%d:\t%s" # File: project/readers/read_cif.c, Line: 396 msgid "In case of a molecule: insert an extra type of atom and run a substitution afterwards." msgstr "In case of a molecule: insert an extra type of atom and run a substitution afterwards." # File: project/readers/read_cif.c, Line: 478,561 msgid "Wrong file format: searching for %s - error at line %d !\n" msgstr "Wrong file format: searching for %s - error at line %d !\n" # File: project/readers/read_cif.c, Line: 1107 msgid "label" msgstr "label" # File: project/readers/read_cif.c, Line: 1110,2518 msgid "occupancy" msgstr "occupancy" # File: project/readers/read_cif.c, Line: 1156 msgid "Atomic coordinates: impossible to find atomic label(s) ..." msgstr "Atomic coordinates: impossible to find atomic label(s) ..." # File: project/readers/read_cif.c, Line: 1168 msgid "Atomic coordinates: impossible to find '%s' ..." msgstr "Atomic coordinates: impossible to find '%s' ..." # File: project/readers/read_cif.c, Line: 1184 msgid "Please select how to handle occupancy" msgstr "Please select how to handle occupancy" # File: project/readers/read_cif.c, Line: 1184 msgid "Select how to handle occupancy" msgstr "Select how to handle occupancy" # File: project/readers/read_cif.c, Line: 1188 msgid "Occupancy %s\n\t%s\n" msgstr "Occupancy %s\n\t%s\n" # File: project/readers/read_cif.c, Line: 1304 msgid "Atomic coordinates: a site has an occupancy > 1.0 !\n" msgstr "Atomic coordinates: a site has an occupancy > 1.0 !\n" # File: project/readers/read_cif.c, Line: 1368 msgid "reaction or trajectory" msgstr "reaction or trajectory" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n" msgstr "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n" msgstr "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n" # File: project/readers/read_cif.c, Line: 1796 msgid "Lattice parameters: impossible to retrieve the '%s' parameter !\n" msgstr "Lattice parameters: impossible to retrieve the '%s' parameter !\n" # File: project/readers/read_cif.c, Line: 1875 msgid "Space group: no space group and no H-M symbol found !\n" msgstr "Space group: no space group and no H-M symbol found !\n" # File: project/readers/read_cif.c, Line: 1891 msgid "Space group: no space group found, unknown H-M symbol !\n" msgstr "Space group: no space group found, unknown H-M symbol !\n" # File: project/readers/read_cif.c, Line: 1953,1983,1990 msgid "Space group: ambiguous space group setting !\n" msgstr "Space group: ambiguous space group setting !\n" # File: project/readers/read_cif.c, Line: 2047 msgid "hexagonal" msgstr "hexagonal" # File: project/readers/read_cif.c, Line: 2047 msgid "rhombohedral" msgstr "rhombohedral" # File: project/readers/read_cif.c, Line: 2095 msgid "Space group changes between configurations !\n" msgstr "Space group changes between configurations !\n" # File: project/readers/read_cif.c, Line: 2130 msgid "Symmetry position(s) in CIF file\n" msgstr "Symmetry position(s) in CIF file\n" # File: project/readers/read_cif.c, Line: 2135 msgid "No symmetry position(s) in CIF file\n" msgstr "No symmetry position(s) in CIF file\n" # File: project/readers/read_cif.c, Line: 2586 msgid "It seems the CIF file contains %d distinct configurations\n" msgstr "It seems the CIF file contains %d distinct configurations\n" # File: project/readers/read_cif.c, Line: 2591 msgid "Impossible to use symmetry positions with multiple configurations\n" msgstr "Impossible to use symmetry positions with multiple configurations\n" # File: project/readers/read_cif.c, Line: 2602 msgid "This CIF file could be describing a trajectory or a chemical reaction.\n" msgstr "This CIF file could be describing a trajectory or a chemical reaction.\n" # File: project/readers/read_cif.c, Line: 2610 msgid "Please select how to process the data in the CIF file" msgstr "Please select how to process the data in the CIF file" # File: project/readers/read_cif.c, Line: 2610 msgid "Select how to process data" msgstr "Select how to process data" # File: project/readers/read_cif.c, Line: 2617 msgid "This CIF file could be describing a trajectory.\n" msgstr "This CIF file could be describing a trajectory.\n" # File: project/readers/read_cif.c, Line: 2629 msgid "Select the configuration c, c ∈ [1-%d]" msgstr "Select the configuration c, c ∈ [1-%d]" # File: project/readers/read_cif.c, Line: 2633 msgid "Please select the configuration to work on" msgstr "Please select the configuration to work on" # File: project/readers/read_cif.c, Line: 2643 msgid "Working on configuration N°%d\n" msgstr "Working on configuration N°%d\n" # File: project/readers/read_coord.c, Line: 416 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" # File: project/readers/read_coord.c, Line: 427 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n" msgstr "Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n" # File: project/readers/read_coord.c, Line: 434 msgid "Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" # File: project/readers/read_coord.c, Line: 146 msgid "Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !" # File: project/readers/read_coord.c, Line: 152 msgid "Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !" # File: project/readers/read_coord.c, Line: 193 msgid "Use dummy atom(s) for unknown %s species ?" msgstr "Use dummy atom(s) for unknown %s species ?" # File: project/readers/read_coord.c, Line: 194 msgid "Use dummy atom(s) ?" msgstr "Use dummy atom(s) ?" # File: project/readers/read_coord.c, Line: 198 msgid "Using dummy atom(s) for unknown %s species" msgstr "Using dummy atom(s) for unknown %s species" # File: project/readers/read_coord.c, Line: 205 msgid "No dummy atom(s) for unknown %s species" msgstr "No dummy atom(s) for unknown %s species" # File: project/readers/read_coord.c, Line: 282 msgid "Error - cannot get file statistics !\n" msgstr "Error - cannot get file statistics !\n" # File: project/readers/read_coord.c, Line: 290 msgid "Error - cannot open coordinates file !\n" msgstr "Error - cannot open coordinates file !\n" # File: project/readers/read_coord.c, Line: 442 msgid "\nAnother model will be built using included symmetry positions\n" msgstr "\nAnother model will be built using included symmetry positions\n" # File: project/readers/read_coord.c, Line: 475,509 msgid "Number of species" msgstr "Number of species" # File: project/readers/read_coord.c, Line: 483 msgid "Dummy %s" msgstr "Dummy %s" # File: project/readers/read_coord.c, Line: 496 msgid "For species %s, radius is equal to 0.0 !\n" msgstr "For species %s, radius is equal to 0.0 !\n" # File: project/readers/read_hist.c, Line: 78,85 msgid "Wrong file format - record ii line is corrupted !" msgstr "Wrong file format - record ii line is corrupted !" # File: project/readers/read_hist.c, Line: 394 msgid "Cannot find species with a mass of %f !" msgstr "Cannot find species with a mass of %f !" # File: project/readers/read_isaacs.c, Line: 795 msgid "The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n" msgstr "The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n" # File: project/readers/read_isaacs.c, Line: 818 msgid "The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n" msgstr "The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n" # File: project/readers/read_isaacs.c, Line: 129 msgid " I.S.A.A.C.S. v1.0 XML file " msgstr " I.S.A.A.C.S. v1.0 XML file " # File: project/readers/read_isaacs.c, Line: 141 msgid " Data format and file containing the configuration(s) " msgstr " Data format and file containing the configuration(s) " # File: project/readers/read_isaacs.c, Line: 196 msgid " Chemistry information " msgstr " Chemistry information " # File: project/readers/read_isaacs.c, Line: 270 msgid " Box information " msgstr " Box information " # File: project/readers/read_isaacs.c, Line: 376 msgid " PBC information " msgstr " PBC information " # File: project/readers/read_isaacs.c, Line: 412 msgid " Cutoffs information " msgstr " Cutoffs information " # File: project/readers/read_isaacs.c, Line: 451 msgid " Time series " msgstr " Time series " # File: project/readers/read_isaacs.c, Line: 469 msgid " Apply project " msgstr " Apply project " # File: project/readers/read_isaacs.c, Line: 753 msgid "The %s\n %s\n from the XML file does not exist\n" msgstr "The %s\n %s\n from the XML file does not exist\n" # File: project/readers/read_isaacs.c, Line: 761 msgid "Unknown data format in XML file\n" msgstr "Unknown data format in XML file\n" # File: project/readers/read_isaacs.c, Line: 1428 msgid "Impossible to open the ISAACS project file (XML) file\n" msgstr "Impossible to open the ISAACS project file (XML) file\n" # File: project/readers/read_isaacs.c, Line: 1431 msgid "The file is not a valid ISAACS project file (XML) file\n" msgstr "The file is not a valid ISAACS project file (XML) file\n" # File: project/readers/read_isaacs.c, Line: 1434 msgid "The ISAACS project file (XML) file is incomplete\n" msgstr "The ISAACS project file (XML) file is incomplete\n" # File: project/readers/read_isaacs.c, Line: 1437 msgid "Problem(s) in the <data> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <data> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1440 msgid "Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1443 msgid "Problem(s) in the <element> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <element> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1446 msgid "Problem(s) in the <box> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <box> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1449 msgid "Problem(s) in the <pbc> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <pbc> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1452 msgid "Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1455 msgid "Problem(s) in the <time-series> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <time-series> section of the ISAACS project file (XML)\n" # File: project/readers/read_npt.c, Line: 97 msgid "Wrong file format - %d steps in coordinates file" msgstr "Wrong file format - %d steps in coordinates file" # File: project/readers/read_npt.c, Line: 98 msgid "Wrong file format - %d steps found in cell file" msgstr "Wrong file format - %d steps found in cell file" # File: project/readers/read_npt.c, Line: 122,130,138,161,169,177 msgid "Wrong file format - error at step %d !" msgstr "Wrong file format - error at step %d !" # File: project/readers/read_pdb.c, Line: 124 msgid "Wrong file format - record %d on line %d is corrupted !" msgstr "Wrong file format - record %d on line %d is corrupted !" # File: project/readers/read_trj.c, Line: 179 # File: project/readers/read_vas.c, Line: 167 msgid "Error - chemical species changes between steps %d and %d, for atom %d !" msgstr "Error - chemical species changes between steps %d and %d, for atom %d !" # File: opengl/glview.c, Line: 1826 msgid "Impossible to initialize the OpenGL 3D rendering ! \n %s\n" msgstr "Impossible to initialize the OpenGL 3D rendering ! \n %s\n" # File: opengl/ogl_shading.c, Line: 110 msgid "Compilation failure in %s shader:\n%s" msgstr "Compilation failure in %s shader:\n%s" # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "fragment" msgstr "fragment" # File: opengl/edit/atom_action.c, Line: 587 msgid "Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" msgstr "Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "replaced" msgstr "replaced" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "removed" msgstr "removed" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "inserted" msgstr "inserted" # File: opengl/edit/atom_action.c, Line: 1138 msgid "No atoms to be %s !" msgstr "No atoms to be %s !" # File: opengl/edit/atom_action.c, Line: 1144 # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) removed !\n%d atom(s) inserted !" msgstr "%d atom(s) removed !\n%d atom(s) inserted !" # File: opengl/edit/atom_action.c, Line: 1148 msgid "%d atom(s) %s !" msgstr "%d atom(s) %s !" # File: opengl/edit/atom_action.c, Line: 2064 msgid "Nothing to be done, check selection !" msgstr "Nothing to be done, check selection !" # File: opengl/edit/atom_action.c, Line: 2068 msgid "Nothing to be done, check selection and/or MSD !" msgstr "Nothing to be done, check selection and/or MSD !" # File: opengl/edit/atom_edit.c, Line: 207 msgid "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" msgstr "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/w_search.c, Line: 3578 msgid "Move" msgstr "Move" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3703 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 2904,3579 msgid "Replace" msgstr "Replace" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3702 # File: opengl/win/w_search.c, Line: 2904,3580,4104 msgid "Remove" msgstr "Remove" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 4201 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 3581 msgid "Insert" msgstr "Insert" # File: opengl/edit/atom_edit.c, Line: 60 msgid "Random Move" msgstr "Random Move" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Non-selected Atoms" msgstr "All Non-selected Atoms" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Selected Atoms" msgstr "All Selected Atoms" # File: calc/cpmd/cpmd_init.c, Line: 158 # File: calc/dl_poly/dlp_edit.c, Line: 2466 # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Atoms" msgstr "All Atoms" # File: opengl/edit/atom_edit.c, Line: 206 msgid "Leaving without saving ?" msgstr "Leaving without saving ?" # File: opengl/edit/atom_edit.c, Line: 282 # File: opengl/win/m_rep.c, Line: 579 msgid "Reset" msgstr "Reset" # File: opengl/edit/atom_edit.c, Line: 282 msgid "Reset and get back to initial coordinates ?\n This will affect all atoms !" msgstr "Reset and get back to initial coordinates ?\n This will affect all atoms !" # File: opengl/edit/atom_edit.c, Line: 421 # File: workspace/workspace.c, Line: 384 msgid "Model edition - %s" msgstr "Model edition - %s" # File: opengl/edit/atom_move.c, Line: 1201 msgid "On %s axis:" msgstr "On %s axis:" # File: opengl/edit/atom_move.c, Line: 1230 msgid "Select the axis to be used: " msgstr "Select the axis to be used: " # File: opengl/edit/atom_move.c, Line: 1232 msgid "Model axis" msgstr "Model axis" # File: opengl/edit/atom_move.c, Line: 1233 msgid "Eye (viewer) axis" msgstr "Eye (viewer) axis" # File: opengl/edit/atom_move.c, Line: 1237 # File: opengl/win/m_atoms.c, Line: 364,443,709,806 # File: opengl/win/popup.c, Line: 3697 # File: opengl/win/w_atoms.c, Line: 362 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 msgid "Show" msgstr "Show" # File: opengl/edit/atom_move.c, Line: 1247 # File: opengl/edit/atom_search.c, Line: 332 msgid "Reset transformation(s)" msgstr "Reset transformation(s)" # File: opengl/edit/atom_object.c, Line: 729 msgid "From selection" msgstr "From selection" # File: opengl/edit/atom_object.c, Line: 791,878 # File: opengl/win/w_search.c, Line: 859,3080 msgid "%d-fold" msgstr "%d-fold" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/atom_object.c, Line: 795,882 # File: opengl/win/w_search.c, Line: 859 msgid "Isolated" msgstr "Isolated" # File: opengl/edit/atom_object.c, Line: 911 msgid "All %s - atom(s)" msgstr "All %s - atom(s)" # File: opengl/edit/atom_object.c, Line: 934 # File: opengl/win/initcoord.c, Line: 534 # File: opengl/win/w_search.c, Line: 875 msgid "Fragment N°%d" msgstr "Fragment N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2640 # File: opengl/edit/atom_object.c, Line: 938 # File: opengl/win/initcoord.c, Line: 538 # File: opengl/win/w_search.c, Line: 879,1069 msgid "Molecule N°%d" msgstr "Molecule N°%d" # File: opengl/edit/atom_object.c, Line: 1026 msgid "All non-selected atom(s) from: %s" msgstr "All non-selected atom(s) from: %s" # File: opengl/edit/atom_object.c, Line: 1030 msgid "All selected atom(s) from: %s" msgstr "All selected atom(s) from: %s" # File: opengl/edit/atom_object.c, Line: 1034 msgid "All atom(s) from: %s" msgstr "All atom(s) from: %s" # File: opengl/edit/atom_object.c, Line: 1306 # File: opengl/win/w_search.c, Line: 2435,2687 msgid "Empty position" msgstr "Empty position" # File: opengl/edit/atom_object.c, Line: 1310 msgid "%s atom" msgstr "%s atom" # File: opengl/edit/atom_search.c, Line: 114 msgid " Move atom(s)" msgstr " Move atom(s)" # File: opengl/edit/atom_search.c, Line: 114 msgid " Replace atom(s)" msgstr " Replace atom(s)" # File: opengl/edit/atom_search.c, Line: 114 msgid " Remove atom(s)" msgstr " Remove atom(s)" # File: opengl/edit/atom_search.c, Line: 114 msgid " Insert atom(s)" msgstr " Insert atom(s)" # File: opengl/edit/atom_search.c, Line: 138 msgid "Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)" msgstr "Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)" # File: opengl/edit/atom_search.c, Line: 146 msgid "Recompute bonding information using bond cutoffs" msgstr "Recompute bonding information using bond cutoffs" # File: opengl/edit/atom_search.c, Line: 157 msgid "Repeat n times, n= " msgstr "Repeat n times, n= " # File: opengl/edit/atom_search.c, Line: 269 msgid "moved" msgstr "moved" # File: opengl/edit/atom_search.c, Line: 269 msgid "moved randomly" msgstr "moved randomly" # File: opengl/edit/atom_search.c, Line: 269 msgid "passivated" msgstr "passivated" # File: opengl/edit/atom_search.c, Line: 277 msgid "Select the object(s) to be %s in: " msgstr "Select the object(s) to be %s in: " # File: opengl/edit/atom_search.c, Line: 287 msgid "Atom selection:" msgstr "Atom selection:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Translate:" msgstr "Translate:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Rotate:" msgstr "Rotate:" # File: opengl/edit/atom_search.c, Line: 313 msgid "Normally" msgstr "Normally" # File: opengl/edit/atom_search.c, Line: 314 msgid "Randomly" msgstr "Randomly" # File: opengl/edit/atom_search.c, Line: 320 msgid "Replace: " msgstr "Replace: " # File: opengl/edit/atom_search.c, Line: 320 msgid "Remove: " msgstr "Remove: " # File: opengl/edit/cbuild_action.c, Line: 1209 msgid "%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?" msgstr "%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?" # File: opengl/edit/cbuild_action.c, Line: 1772 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message." msgstr "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message." # File: opengl/edit/cbuild_action.c, Line: 356 msgid "Please describe properly the lattice parameters" msgstr "Please describe properly the lattice parameters" # File: opengl/edit/cbuild_action.c, Line: 1212 msgid "This object might be too big !" msgstr "This object might be too big !" # File: opengl/edit/cbuild_action.c, Line: 1287 msgid "Impossible to build crystal: check occupancy !" msgstr "Impossible to build crystal: check occupancy !" # File: opengl/edit/cbuild_action.c, Line: 1325 msgid "Impossible to build crystal: site total occupancy > 1.0" msgstr "Impossible to build crystal: site total occupancy > 1.0" # File: opengl/edit/cbuild_action.c, Line: 1357 msgid "Impossible to build crystal: empty site(s) only !" msgstr "Impossible to build crystal: empty site(s) only !" # File: opengl/edit/cbuild_action.c, Line: 1489 msgid "Inter-object distance(s) < 0.5 Ang. !" msgstr "Inter-object distance(s) < 0.5 Ang. !" # File: opengl/edit/cbuild_action.c, Line: 1490 msgid "Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?" msgstr "Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?" # File: opengl/edit/cbuild_action.c, Line: 1724 # File: opengl/edit/cbuild_edit.c, Line: 1432 msgid "Build (new project)" msgstr "Build (new project)" # File: opengl/edit/cbuild_edit.c, Line: 1203 msgid "Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated." msgstr "Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated." # File: opengl/edit/cbuild_edit.c, Line: 1206 msgid "Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole." msgstr "Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole." # File: opengl/edit/cbuild_edit.c, Line: 1252 msgid "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n" msgstr "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n" # File: opengl/edit/cbuild_edit.c, Line: 1271 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n" msgstr "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 102 # File: opengl/win/w_crystal.c, Line: 75 msgid "Triclinic" msgstr "Triclinic" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 103 # File: opengl/win/w_crystal.c, Line: 75 msgid "Monoclinic" msgstr "Monoclinic" # File: opengl/edit/cbuild_edit.c, Line: 1290 msgid "Othorhombic" msgstr "Othorhombic" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 105 # File: opengl/win/w_crystal.c, Line: 75 msgid "Tetragonal" msgstr "Tetragonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 106 # File: opengl/win/w_crystal.c, Line: 75 msgid "Trigonal" msgstr "Trigonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 107 # File: opengl/win/w_crystal.c, Line: 75 msgid "Hexagonal" msgstr "Hexagonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 108 msgid "Cubic" msgstr "Cubic" # File: opengl/edit/cbuild_edit.c, Line: 940 # File: opengl/edit/cbuild_info.c, Line: 99 msgid "Primitive " msgstr "Primitive " # File: opengl/edit/cbuild_edit.c, Line: 941 # File: opengl/edit/cbuild_info.c, Line: 87 msgid "Base-centered" msgstr "Base-centered" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 95 msgid "Body-centered" msgstr "Body-centered" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 91 msgid "Face-centered" msgstr "Face-centered" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Hexagonal Axes" msgstr "Hexagonal Axes" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Rhombohedral Axes" msgstr "Rhombohedral Axes" # File: opengl/edit/cbuild_edit.c, Line: 104 msgid "a ≠ b ≠ c\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β" msgstr "a ≠ b ≠ c\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β" # File: opengl/edit/cbuild_edit.c, Line: 107 msgid "a = b ≠ c\nα = β = 90° and ɣ = 120°" msgstr "a = b ≠ c\nα = β = 90° and ɣ = 120°" # File: opengl/edit/cbuild_edit.c, Line: 408 msgid "Vectors" msgstr "Vectors" # File: opengl/edit/cbuild_edit.c, Line: 747 msgid "%s group info" msgstr "%s group info" # File: opengl/edit/cbuild_edit.c, Line: 889 msgid "Cannot read space group *.sgl file ?!\nPlease check the program library !" msgstr "Cannot read space group *.sgl file ?!\nPlease check the program library !" # File: opengl/edit/cbuild_edit.c, Line: 1198 msgid "Random for the initial cell only" msgstr "Random for the initial cell only" # File: opengl/edit/cbuild_edit.c, Line: 1199 msgid "Random cell by cell" msgstr "Random cell by cell" # File: opengl/edit/cbuild_edit.c, Line: 1200 msgid "Completely random" msgstr "Completely random" # File: opengl/edit/cbuild_edit.c, Line: 1201 msgid "Successively" msgstr "Successively" # File: opengl/edit/cbuild_edit.c, Line: 1202 msgid "Alternatively" msgstr "Alternatively" # File: opengl/edit/cbuild_edit.c, Line: 1205 msgid "Sites are filled randomly for each cell, cell by cell separately." msgstr "Sites are filled randomly for each cell, cell by cell separately." # File: opengl/edit/cbuild_edit.c, Line: 1208 msgid "Sites are filled successively: all object(s) A, then all object(s) B ... " msgstr "Sites are filled successively: all object(s) A, then all object(s) B ... " # File: opengl/edit/cbuild_edit.c, Line: 1209 msgid "Sites are filled alternatively: object A, object B, object A ..." msgstr "Sites are filled alternatively: object A, object B, object A ..." # File: opengl/edit/cbuild_edit.c, Line: 1247 msgid "Allow overlapping" msgstr "Allow overlapping" # File: opengl/edit/cbuild_edit.c, Line: 1258 msgid "Occupancy rounding:" msgstr "Occupancy rounding:" # File: opengl/edit/cbuild_edit.c, Line: 1291 msgid "Crystal builder - %s" msgstr "Crystal builder - %s" # File: opengl/edit/cbuild_edit.c, Line: 1291 # File: opengl/win/w_crystal.c, Line: 776 msgid "Crystal builder" msgstr "Crystal builder" # File: opengl/edit/cbuild_edit.c, Line: 1309 msgid "Crystal system:" msgstr "Crystal system:" # File: opengl/edit/cbuild_edit.c, Line: 1321 msgid "Bravais lattice:" msgstr "Bravais lattice:" # File: opengl/edit/cbuild_edit.c, Line: 1326 # File: opengl/edit/cbuild_info.c, Line: 555 msgid "Lattice constraints: " msgstr "Lattice constraints: " # File: opengl/edit/cbuild_edit.c, Line: 1340 msgid "Space group:" msgstr "Space group:" # File: opengl/edit/cbuild_edit.c, Line: 1355 msgid "Settings:" msgstr "Settings:" # File: calc/cp2k/cp2k_init.c, Line: 182 # File: opengl/edit/cbuild_edit.c, Line: 1383 msgid "Lattice parameters:" msgstr "Lattice parameters:" # File: opengl/edit/cbuild_edit.c, Line: 1402 msgid "Cell(s):" msgstr "Cell(s):" # File: opengl/edit/cbuild_edit.c, Line: 1415 msgid " Wrap all atoms in the unit cell after building" msgstr " Wrap all atoms in the unit cell after building" # File: opengl/edit/cbuild_edit.c, Line: 1416 msgid " Show/Hide clones after building" msgstr " Show/Hide clones after building" # File: opengl/edit/cbuild_edit.c, Line: 1421 msgid "Add object(s):" msgstr "Add object(s):" # File: opengl/edit/cbuild_edit.c, Line: 1425 # File: opengl/win/w_search.c, Line: 3581 msgid "Occupancy" msgstr "Occupancy" # File: opengl/edit/cbuild_edit.c, Line: 1432 # File: opengl/win/w_crystal.c, Line: 784 msgid "Build" msgstr "Build" # File: opengl/edit/cbuild_info.c, Line: 103 msgid "Rhombohedral" msgstr "Rhombohedral" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 892,997 # File: opengl/win/w_measures.c, Line: 491,492,493 # File: opengl/win/w_rings.c, Line: 413 msgid "Id." msgstr "Id." # File: calc/cp2k/cp2k_init.c, Line: 173 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Multiplicity" msgstr "Multiplicity" # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Letter" msgstr "Letter" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/w_crystal.c, Line: 793 msgid "Symmetry" msgstr "Symmetry" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Coordinates" msgstr "Coordinates" # File: opengl/edit/cbuild_info.c, Line: 498 msgid "%s info" msgstr "%s info" # File: opengl/edit/cbuild_info.c, Line: 516 msgid "Space group: " msgstr "Space group: " # File: opengl/edit/cbuild_info.c, Line: 523 msgid "Number: " msgstr "Number: " # File: opengl/edit/cbuild_info.c, Line: 537 msgid "Crystal system: " msgstr "Crystal system: " # File: opengl/edit/cbuild_info.c, Line: 547 msgid "Bravais lattice: " msgstr "Bravais lattice: " # File: opengl/edit/cbuild_info.c, Line: 571 msgid "Setting(s): " msgstr "Setting(s): " # File: opengl/edit/cbuild_info.c, Line: 595 msgid "Wyckoff position(s): " msgstr "Wyckoff position(s): " # File: opengl/edit/cell_cut.c, Line: 81 msgid "Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B" msgstr "Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B" # File: opengl/edit/cell_cut.c, Line: 71 msgid "Cell edition - %s: surface passivation" msgstr "Cell edition - %s: surface passivation" # File: opengl/edit/cell_cut.c, Line: 116 msgid "- Volume: " msgstr "- Volume: " # File: opengl/edit/cell_cut.c, Line: 123 msgid "- Atom(s) in slab: " msgstr "- Atom(s) in slab: " # File: opengl/edit/cell_cut.c, Line: 132 msgid "\t - %s atom(s) in slab: " msgstr "\t - %s atom(s) in slab: " # File: opengl/edit/cell_cut.c, Line: 225 msgid "- Position the center of the slab: " msgstr "- Position the center of the slab: " # File: opengl/edit/cell_cut.c, Line: 226,227 msgid "- Size of the slab: " msgstr "- Size of the slab: " # File: opengl/edit/cell_cut.c, Line: 229 msgid "- Parallelepiped angles: " msgstr "- Parallelepiped angles: " # File: opengl/edit/cell_cut.c, Line: 230 msgid "- Slab rotation: " msgstr "- Slab rotation: " # File: calc/dl_poly/dlp_field.c, Line: 279 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_measures.c, Line: 752 msgid "Angles" msgstr "Angles" # File: opengl/edit/cell_cut.c, Line: 307 msgid "Rotation" msgstr "Rotation" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and modify model ?\n This is irreversible !" msgstr "Cut and modify model ?\n This is irreversible !" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and create new project ?" msgstr "Cut and create new project ?" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut" msgstr "Cut" # File: opengl/edit/cell_cut.c, Line: 638 msgid "Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !" msgstr "Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !" # File: opengl/edit/cell_cut.c, Line: 643 msgid "The slab is empty, nothing to do !" msgstr "The slab is empty, nothing to do !" # File: opengl/edit/cell_cut.c, Line: 666 msgid "Cut slab in the simulation box: " msgstr "Cut slab in the simulation box: " # File: opengl/edit/cell_cut.c, Line: 670 msgid "Show/Hide slab" msgstr "Show/Hide slab" # File: opengl/edit/cell_cut.c, Line: 672 msgid "Use PBC to select atoms" msgstr "Use PBC to select atoms" # File: opengl/edit/cell_cut.c, Line: 674 msgid "Invert cutting (all but the slab)" msgstr "Invert cutting (all but the slab)" # File: opengl/edit/cell_cut.c, Line: 676 msgid "Export in new project" msgstr "Export in new project" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Parallelepiped" msgstr "Parallelepiped" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Cylinder" msgstr "Cylinder" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Sphere" msgstr "Sphere" # File: opengl/edit/cell_cut.c, Line: 688 msgid "- Shape of the slab: " msgstr "- Shape of the slab: " # File: opengl/edit/cell_cut.c, Line: 694 msgid "Passivate surface" msgstr "Passivate surface" # File: calc/cp2k/cp2k_init.c, Line: 802 # File: opengl/edit/cell_cut.c, Line: 698 msgid "Options" msgstr "Options" # File: opengl/edit/cell_cut.c, Line: 712 msgid "- Select option to tweak: " msgstr "- Select option to tweak: " # File: opengl/edit/cell_cut.c, Line: 726 msgid "Slab information:" msgstr "Slab information:" # File: opengl/edit/cell_cut.c, Line: 729 msgid "- Opacity: " msgstr "- Opacity: " # File: opengl/edit/cell_cut.c, Line: 738 msgid "Select atom(s) in this slab !" msgstr "Select atom(s) in this slab !" # File: opengl/edit/cell_cut.c, Line: 739 msgid "or" msgstr "or" # File: opengl/edit/cell_cut.c, Line: 740 msgid "Cut this slab now !" msgstr "Cut this slab now !" # File: opengl/edit/cell_density.c, Line: 59 msgid "Volume:" msgstr "Volume:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Mass density:" msgstr "Mass density:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Number density:" msgstr "Number density:" # File: opengl/edit/cell_density.c, Line: 60 msgid "atom/Å3" msgstr "atom/Å3" # File: opengl/edit/cell_density.c, Line: 120 msgid "Modify the density of the simulation box *: " msgstr "Modify the density of the simulation box *: " # File: opengl/edit/cell_density.c, Line: 121 msgid "Homogeneous rescaling **" msgstr "Homogeneous rescaling **" # File: opengl/edit/cell_density.c, Line: 130 msgid " * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated." msgstr " * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated." # File: opengl/edit/cell_density.c, Line: 131 msgid "** Keep the ratios between the lattice vectors A, B and C like in the initial cell." msgstr "** Keep the ratios between the lattice vectors A, B and C like in the initial cell." # File: opengl/edit/cell_edit.c, Line: 48 msgid "Wrap All Atoms in" msgstr "Wrap All Atoms in" # File: opengl/edit/cell_edit.c, Line: 49 msgid "Shift Center" msgstr "Shift Center" # File: opengl/edit/cell_edit.c, Line: 50 msgid "Add Extra(s)" msgstr "Add Extra(s)" # File: opengl/edit/cell_edit.c, Line: 51 msgid "Create Super-Cell" msgstr "Create Super-Cell" # File: opengl/edit/cell_edit.c, Line: 52 msgid "Adjust Density" msgstr "Adjust Density" # File: opengl/edit/cell_edit.c, Line: 53 msgid "Cut Slab" msgstr "Cut Slab" # File: opengl/edit/cell_edit.c, Line: 54 msgid "PBC Pixels Debug" msgstr "PBC Pixels Debug" # File: opengl/edit/cell_edit.c, Line: 190 # File: workspace/workspace.c, Line: 388 msgid "Cell edition - %s" msgstr "Cell edition - %s" # File: opengl/edit/cell_extra.c, Line: 89 msgid "\tAdd extra cell(s):" msgstr "\tAdd extra cell(s):" # File: opengl/edit/cell_extra.c, Line: 103 msgid "Create super-cell" msgstr "Create super-cell" # File: opengl/edit/cell_pixel.c, Line: 259 msgid "\tSelect pixel to check, from 1 to %d:" msgstr "\tSelect pixel to check, from 1 to %d:" # File: opengl/edit/cell_shift.c, Line: 500 msgid "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?" msgstr "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?" # File: opengl/edit/cell_shift.c, Line: 422 msgid "on %s axis [+/- Å]" msgstr "on %s axis [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 429 msgid "Lattice %s [+/- Å]" msgstr "Lattice %s [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 435 msgid "Length [+/- Å]" msgstr "Length [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 441 msgid "Angle %s [+/- °]" msgstr "Angle %s [+/- °]" # File: opengl/edit/cell_shift.c, Line: 447 msgid "on %s axis [+/- °]" msgstr "on %s axis [+/- °]" # File: opengl/edit/cell_shift.c, Line: 453 msgid "Radius [+/- Å]" msgstr "Radius [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 483 msgid "Shift the position of the cell center *: " msgstr "Shift the position of the cell center *: " # File: opengl/edit/cell_shift.c, Line: 485 msgid "* requires all atoms to be wrapped in the unit cell" msgstr "* requires all atoms to be wrapped in the unit cell" # File: opengl/edit/cell_shift.c, Line: 502 msgid "Wrap atomic coordinates in unit cell ?" msgstr "Wrap atomic coordinates in unit cell ?" # File: opengl/edit/cell_shift.c, Line: 565 msgid "Wrap atomic coordinates in unit cell" msgstr "Wrap atomic coordinates in unit cell" # File: opengl/edit/cell_super.c, Line: 206 msgid "You are about to change the periodicity of the 3D model," msgstr "You are about to change the periodicity of the 3D model," # File: opengl/edit/cell_super.c, Line: 207 msgid "this will affect the entire molecular dynamics trajectory," msgstr "this will affect the entire molecular dynamics trajectory," # File: opengl/edit/cell_super.c, Line: 208 msgid "\tand the action is irreversible, proceed anyway ?" msgstr "\tand the action is irreversible, proceed anyway ?" # File: opengl/edit/cell_super.c, Line: 218 msgid "Create a super-cell ?" msgstr "Create a super-cell ?" # File: opengl/edit/cell_super.c, Line: 325 msgid "Something went wrong, the 3D model was not updated" msgstr "Something went wrong, the 3D model was not updated" # File: opengl/win/color_box.c, Line: 366 # File: opengl/win/m_atoms.c, Line: 747 # File: opengl/win/m_back.c, Line: 92 # File: opengl/win/m_box.c, Line: 627 # File: opengl/win/m_coord.c, Line: 483 msgid "More Colors ..." msgstr "More Colors ..." # File: opengl/win/glwindow.c, Line: 126,168,171 msgid "Analysis mode" msgstr "Analysis mode" # File: opengl/win/glwindow.c, Line: 128 msgid "Styles" msgstr "Styles" # File: opengl/win/glwindow.c, Line: 128,161 # File: opengl/win/m_tools.c, Line: 316,473 msgid "Measures" msgstr "Measures" # File: opengl/win/glwindow.c, Line: 128 msgid "Selection mode" msgstr "Selection mode" # File: opengl/win/glwindow.c, Line: 128 msgid "Window management" msgstr "Window management" # File: opengl/win/glwindow.c, Line: 128 msgid "Mouse mode" msgstr "Mouse mode" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera rotation" msgstr "Camera rotation" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera motion" msgstr "Camera motion" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera spin" msgstr "Camera spin" # File: opengl/win/glwindow.c, Line: 129,130 msgid "Model interaction" msgstr "Model interaction" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates rotation" msgstr "Coordinates rotation" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates translation" msgstr "Coordinates translation" # File: opengl/win/glwindow.c, Line: 139 msgid "change atom(s) color map" msgstr "change atom(s) color map" # File: opengl/win/glwindow.c, Line: 140 msgid "change polyhedra color map" msgstr "change polyhedra color map" # File: opengl/win/glwindow.c, Line: 141 msgid "change global style to balls and sticks" msgstr "change global style to balls and sticks" # File: opengl/win/glwindow.c, Line: 142 msgid "change global style to cylinders" msgstr "change global style to cylinders" # File: opengl/win/glwindow.c, Line: 143 # File: opengl/win/m_style.c, Line: 62 msgid "Spheres" msgstr "Spheres" # File: opengl/win/glwindow.c, Line: 143 msgid "change global style to spheres" msgstr "change global style to spheres" # File: opengl/win/glwindow.c, Line: 144 # File: opengl/win/m_style.c, Line: 66 msgid "Covalent Radii" msgstr "Covalent Radii" # File: opengl/win/glwindow.c, Line: 144 msgid "change global style to covalent radii" msgstr "change global style to covalent radii" # File: opengl/win/glwindow.c, Line: 145 # File: opengl/win/m_style.c, Line: 67 msgid "Ionic Radii" msgstr "Ionic Radii" # File: opengl/win/glwindow.c, Line: 145 msgid "change global style to ionic radii" msgstr "change global style to ionic radii" # File: opengl/win/glwindow.c, Line: 146 # File: opengl/win/m_style.c, Line: 68 msgid "van der Waals Radii" msgstr "van der Waals Radii" # File: opengl/win/glwindow.c, Line: 146 msgid "change global style to van der Waals radii" msgstr "change global style to van der Waals radii" # File: opengl/win/glwindow.c, Line: 147 # File: opengl/win/m_style.c, Line: 69 msgid "In Crystal Radii" msgstr "In Crystal Radii" # File: opengl/win/glwindow.c, Line: 147 msgid "change global style to in crystal radii" msgstr "change global style to in crystal radii" # File: opengl/win/glwindow.c, Line: 148 msgid "change global style to wireframes" msgstr "change global style to wireframes" # File: opengl/win/glwindow.c, Line: 150 msgid "All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures" msgstr "All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures" # File: opengl/win/glwindow.c, Line: 153 msgid "Show measures" msgstr "Show measures" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 155 # File: opengl/win/w_library.c, Line: 194 msgid "Atom" msgstr "Atom" # File: opengl/win/glwindow.c, Line: 155 msgid "atom selection mode" msgstr "atom selection mode" # File: opengl/win/glwindow.c, Line: 156 # File: opengl/win/m_coord.c, Line: 425 # File: opengl/win/menu_bar.c, Line: 204 msgid "Coordination" msgstr "Coordination" # File: opengl/win/glwindow.c, Line: 156 msgid "coordination sphere selection mode" msgstr "coordination sphere selection mode" # File: opengl/win/glwindow.c, Line: 157 msgid "fragment selection mode" msgstr "fragment selection mode" # File: opengl/win/glwindow.c, Line: 158 msgid "molecule selection mode" msgstr "molecule selection mode" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments" msgstr "Environments" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments window" msgstr "Environments window" # File: opengl/win/glwindow.c, Line: 161 msgid "Measures window" msgstr "Measures window" # File: opengl/win/glwindow.c, Line: 162 # File: opengl/win/m_anim.c, Line: 79,83,144 msgid "Recorder" msgstr "Recorder" # File: opengl/win/glwindow.c, Line: 162 msgid "Recorder window" msgstr "Recorder window" # File: opengl/win/glwindow.c, Line: 163 msgid "Create new project" msgstr "Create new project" # File: opengl/win/glwindow.c, Line: 164 msgid "Enter fullscreen" msgstr "Enter fullscreen" # File: opengl/win/glwindow.c, Line: 165 msgid "Exit fullscreen" msgstr "Exit fullscreen" # File: opengl/win/glwindow.c, Line: 177,202 msgid "Rotate right" msgstr "Rotate right" # File: opengl/win/glwindow.c, Line: 177,189,202 msgid "rotate right" msgstr "rotate right" # File: opengl/win/w_spiner.c, Line: 186 msgid "Right" msgstr "Right" # File: opengl/win/glwindow.c, Line: 178,203 msgid "Rotate left" msgstr "Rotate left" # File: opengl/win/glwindow.c, Line: 178,190,203 msgid "rotate left" msgstr "rotate left" # File: opengl/win/w_spiner.c, Line: 187 msgid "Left" msgstr "Left" # File: opengl/win/glwindow.c, Line: 179,204 msgid "Rotate up" msgstr "Rotate up" # File: opengl/win/glwindow.c, Line: 179,191,204 msgid "rotate up" msgstr "rotate up" # File: opengl/win/w_spiner.c, Line: 189 msgid "Up" msgstr "Up" # File: opengl/win/glwindow.c, Line: 180,205 msgid "Rotate down" msgstr "Rotate down" # File: opengl/win/glwindow.c, Line: 180,192,205 msgid "rotate down" msgstr "rotate down" # File: opengl/win/w_spiner.c, Line: 190 msgid "Down" msgstr "Down" # File: opengl/win/glwindow.c, Line: 182 msgid "Move right" msgstr "Move right" # File: opengl/win/glwindow.c, Line: 182,207 msgid "move camera right" msgstr "move camera right" # File: opengl/win/glwindow.c, Line: 183 msgid "Move left" msgstr "Move left" # File: opengl/win/glwindow.c, Line: 183,208 msgid "move camera left" msgstr "move camera left" # File: opengl/win/glwindow.c, Line: 184 msgid "Move up" msgstr "Move up" # File: opengl/win/glwindow.c, Line: 184,209 msgid "move camera up" msgstr "move camera up" # File: opengl/win/glwindow.c, Line: 185 msgid "Move down" msgstr "Move down" # File: opengl/win/glwindow.c, Line: 185,210 msgid "move camera down" msgstr "move camera down" # File: opengl/win/glwindow.c, Line: 186,211 msgid "Zoom in" msgstr "Zoom in" # File: opengl/win/glwindow.c, Line: 186,211 msgid "zoom camera in" msgstr "zoom camera in" # File: opengl/win/glwindow.c, Line: 187,212 msgid "Zoom out" msgstr "Zoom out" # File: opengl/win/glwindow.c, Line: 187,212 msgid "zoom camera out" msgstr "zoom camera out" # File: opengl/win/glwindow.c, Line: 189 msgid "Spin right" msgstr "Spin right" # File: opengl/win/glwindow.c, Line: 190 msgid "Spin left" msgstr "Spin left" # File: opengl/win/glwindow.c, Line: 191 msgid "Spin up" msgstr "Spin up" # File: opengl/win/glwindow.c, Line: 192 msgid "Spin down" msgstr "Spin down" # File: opengl/win/glwindow.c, Line: 193 msgid "Pause / restart" msgstr "Pause / restart" # File: opengl/win/glwindow.c, Line: 193 msgid "pause / restart spinning" msgstr "pause / restart spinning" # File: opengl/win/glwindow.c, Line: 194 # File: opengl/win/w_record.c, Line: 167 # File: opengl/win/w_sequencer.c, Line: 491 # File: opengl/win/w_spiner.c, Line: 188 msgid "Stop" msgstr "Stop" # File: opengl/win/glwindow.c, Line: 194 msgid "stop spinning" msgstr "stop spinning" # File: opengl/win/glwindow.c, Line: 196,214 msgid "Label / unlabel all atom(s)" msgstr "Label / unlabel all atom(s)" # File: opengl/win/glwindow.c, Line: 197,215 msgid "Select / unselect all atom(s)" msgstr "Select / unselect all atom(s)" # File: opengl/win/glwindow.c, Line: 198,216 msgid "Copy selection" msgstr "Copy selection" # File: opengl/win/glwindow.c, Line: 207 msgid "Translate right" msgstr "Translate right" # File: opengl/win/glwindow.c, Line: 208 msgid "Translate left" msgstr "Translate left" # File: opengl/win/glwindow.c, Line: 209 msgid "Translate up" msgstr "Translate up" # File: opengl/win/glwindow.c, Line: 210 msgid "Translate down" msgstr "Translate down" # File: opengl/win/glwindow.c, Line: 217 msgid "Cut selection" msgstr "Cut selection" # File: opengl/win/glwindow.c, Line: 218 msgid "Paste selection" msgstr "Paste selection" # File: opengl/win/glwindow.c, Line: 219 msgid "Delete selection" msgstr "Delete selection" # File: opengl/win/glwindow.c, Line: 310 # File: opengl/win/m_poly.c, Line: 343,497,501 # File: opengl/win/menu_bar.c, Line: 208,212 msgid "Ring(s)" msgstr "Ring(s)" # File: opengl/win/glwindow.c, Line: 314 # File: opengl/win/m_map.c, Line: 1165,1276 # File: opengl/win/menu_bar.c, Line: 205 # File: opengl/win/popup.c, Line: 4234 msgid "Polyhedra" msgstr "Polyhedra" # File: opengl/win/glwindow.c, Line: 490 # File: opengl/win/m_box.c, Line: 327,606 # File: opengl/win/menu_bar.c, Line: 166 # File: opengl/win/popup.c, Line: 3699 msgid "Style" msgstr "Style" # File: opengl/win/glwindow.c, Line: 492 # File: opengl/win/menu_bar.c, Line: 167 msgid "Color Maps" msgstr "Color Maps" # File: opengl/win/glwindow.c, Line: 493 # File: opengl/win/menu_bar.c, Line: 170 msgid "Material and Light(s)" msgstr "Material and Light(s)" # File: opengl/draw/image.c, Line: 209 # File: opengl/win/glwindow.c, Line: 494 # File: opengl/win/menu_bar.c, Line: 171 msgid "Render Image" msgstr "Render Image" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 525 # File: opengl/win/m_clones.c, Line: 122,185 # File: opengl/win/m_edit.c, Line: 360 # File: opengl/win/menu_bar.c, Line: 186 # File: opengl/win/popup.c, Line: 4228 # File: opengl/win/w_search.c, Line: 4000,4141 # File: calc/dl_poly/dlp_field.c, Line: 143 msgid "Atom(s)" msgstr "Atom(s)" # File: opengl/win/glwindow.c, Line: 527 # File: opengl/win/menu_bar.c, Line: 188 # File: opengl/win/popup.c, Line: 4230 msgid "Clone(s)" msgstr "Clone(s)" # File: opengl/win/glwindow.c, Line: 559 # File: opengl/win/m_rep.c, Line: 813 msgid "Projection" msgstr "Projection" # File: opengl/win/glwindow.c, Line: 560 # File: opengl/win/m_rep.c, Line: 814 msgid "Background" msgstr "Background" # File: opengl/win/glwindow.c, Line: 565 # File: opengl/win/m_rep.c, Line: 579,781 # File: opengl/win/popup.c, Line: 4269 msgid "Reset View" msgstr "Reset View" # File: opengl/win/glwindow.c, Line: 566 # File: opengl/win/m_rep.c, Line: 782 # File: opengl/win/popup.c, Line: 4270 msgid "Center Molecule" msgstr "Center Molecule" # File: opengl/win/glwindow.c, Line: 568 # File: opengl/win/m_rep.c, Line: 797 # File: opengl/win/popup.c, Line: 4274 msgid "Fullscreen" msgstr "Fullscreen" # File: calc/dl_poly/dlp_field.c, Line: 924 # File: opengl/win/glwindow.c, Line: 623 # File: opengl/win/menu_bar.c, Line: 271,276 msgid "Chemistry" msgstr "Chemistry" # File: opengl/win/glwindow.c, Line: 1359 msgid "Sorry OpenGL is not supported !" msgstr "Sorry OpenGL is not supported !" # File: opengl/win/glwindow.c, Line: 1376 # File: opengl/win/m_tools.c, Line: 240 # File: workspace/workspace.c, Line: 368 msgid "%s - 3D view - [%s mode]" msgstr "%s - 3D view - [%s mode]" # File: opengl/win/initcoord.c, Line: 267 # File: opengl/win/m_box.c, Line: 321,325 # File: opengl/win/m_clones.c, Line: 116,120,183 # File: opengl/win/m_coord.c, Line: 294,656 # File: opengl/win/m_poly.c, Line: 234,449,453 # File: opengl/win/w_labels.c, Line: 810 # File: opengl/win/w_volumes.c, Line: 797,1106 msgid "Show/Hide" msgstr "Show/Hide" # File: opengl/win/initcoord.c, Line: 483 msgid "fragment(s)" msgstr "fragment(s)" # File: opengl/win/initcoord.c, Line: 483 msgid "molecule(s)" msgstr "molecule(s)" # File: opengl/win/initcoord.c, Line: 486 msgid "Maximum number of %s per MD step: %d" msgstr "Maximum number of %s per MD step: %d" # File: opengl/win/m_anim.c, Line: 61 # File: opengl/win/menu_bar.c, Line: 280 # File: opengl/win/popup.c, Line: 4045 msgid "Animate" msgstr "Animate" # File: opengl/win/m_anim.c, Line: 66,70,142 msgid "Spin" msgstr "Spin" # File: opengl/win/m_anim.c, Line: 72,143 msgid "Sequencer" msgstr "Sequencer" # File: opengl/win/m_atoms.c, Line: 361 # File: opengl/win/m_atoms.c, Line: 689 msgid "Show/Hide All" msgstr "Show/Hide All" # File: opengl/win/m_atoms.c, Line: 408,417,710 msgid "Select atom(s)" msgstr "Select atom(s)" # File: opengl/win/m_atoms.c, Line: 447,451,807 # File: opengl/win/m_coord.c, Line: 360 # File: opengl/win/w_labels.c, Line: 778 msgid "Color(s)" msgstr "Color(s)" # File: opengl/win/m_atoms.c, Line: 453,808 msgid "Label(s)" msgstr "Label(s)" # File: opengl/win/m_atoms.c, Line: 459,469,812 # File: opengl/win/m_bonds.c, Line: 275,286,387 msgid "Radius(ii)" msgstr "Radius(ii)" # File: opengl/win/m_atoms.c, Line: 482,492,818 msgid "Dot Size(s)" msgstr "Dot Size(s)" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Top" msgstr "Top" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Bottom" msgstr "Bottom" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Right Corner" msgstr "Right Corner" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Left Corner" msgstr "Left Corner" # File: opengl/win/m_axis.c, Line: 163,169,315 # File: opengl/win/w_colors.c, Line: 484 msgid "Center" msgstr "Center" # File: opengl/win/m_axis.c, Line: 192 msgid " Length [ %f Ã… ]" msgstr " Length [ %f Ã… ]" # File: opengl/win/m_back.c, Line: 75 msgid "Gradient color" msgstr "Gradient color" # File: opengl/win/m_back.c, Line: 93 # File: opengl/win/w_colors.c, Line: 533 msgid "Gradient colors" msgstr "Gradient colors" # File: opengl/win/m_bonds.c, Line: 161 msgid "Total [ %f Ã… ]" msgstr "Total [ %f Ã… ]" # File: opengl/win/m_bonds.c, Line: 239,243,257,261,376,380 # File: opengl/win/w_bonds.c, Line: 174,188 msgid "Cylinder(s) [ %f Ã… ]" msgstr "Cylinder(s) [ %f Ã… ]" # File: opengl/win/m_bonds.c, Line: 263,382 msgid "Cylinder Radius(ii)" msgstr "Cylinder Radius(ii)" # File: opengl/win/m_bonds.c, Line: 298,309,392 msgid "Line Width(s)" msgstr "Line Width(s)" # File: opengl/win/m_bonds.c, Line: 323,328,400 msgid "Cutoffs" msgstr "Cutoffs" # File: opengl/win/m_box.c, Line: 332,568 # File: opengl/win/w_axis.c, Line: 136 # File: opengl/win/w_bonds.c, Line: 113,152 # File: opengl/win/w_box.c, Line: 109 msgid "Width [ %f pts ]" msgstr "Width [ %f pts ]" # File: opengl/win/m_box.c, Line: 338,350,610 # File: opengl/win/w_advance.c, Line: 1319 msgid "Lines" msgstr "Lines" # File: opengl/win/m_box.c, Line: 359,573 # File: opengl/win/w_axis.c, Line: 122 # File: opengl/win/w_bonds.c, Line: 96,134 # File: opengl/win/w_box.c, Line: 90 msgid "Radius [ %f Ã… ]" msgstr "Radius [ %f Ã… ]" # File: opengl/win/m_box.c, Line: 578 msgid " length [ %f Ã… ]" msgstr " length [ %f Ã… ]" # File: opengl/win/m_clones.c, Line: 188 msgid "Bonds(s)" msgstr "Bonds(s)" # File: opengl/win/m_coord.c, Line: 304,618 msgid "Atoms in Chain(s) of Size" msgstr "Atoms in Chain(s) of Size" # File: opengl/win/m_coord.c, Line: 308,618 msgid "Atoms in Ring(s) of Size" msgstr "Atoms in Ring(s) of Size" # File: opengl/win/m_coord.c, Line: 429,692 # File: opengl/win/m_map.c, Line: 1242 msgid "Total(s)" msgstr "Total(s)" # File: opengl/win/m_coord.c, Line: 430,693 # File: opengl/win/m_map.c, Line: 1244 msgid "Partial(s)" msgstr "Partial(s)" # File: opengl/win/m_edit.c, Line: 176,182,358 msgid "Crystal Builder" msgstr "Crystal Builder" # File: opengl/win/m_edit.c, Line: 189,194,359 msgid "Cell" msgstr "Cell" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: opengl/win/m_edit.c, Line: 197 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "Atoms" msgstr "Atoms" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4263 msgid "Extract/Rebuild on Motion" msgstr "Extract/Rebuild on Motion" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4264 msgid "Extract/Rebuild on Copy" msgstr "Extract/Rebuild on Copy" # File: opengl/win/m_map.c, Line: 780 msgid "Wrong file format !\n" " Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms" msgstr "Wrong file format !\n" " Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms" # File: opengl/win/m_map.c, Line: 235 msgid "Range: [min-max] = %f - %f" msgstr "Range: [min-max] = %f - %f" # File: opengl/win/m_map.c, Line: 236 msgid "Use this data set ?" msgstr "Use this data set ?" # File: opengl/win/m_map.c, Line: 505 msgid "Edit color map" msgstr "Edit color map" # File: opengl/win/m_map.c, Line: 519 msgid "Number of color points for the gradient: " msgstr "Number of color points for the gradient: " # File: opengl/win/m_map.c, Line: 527 msgid "Initial value (overall max): " msgstr "Initial value (overall max): " # File: opengl/win/m_map.c, Line: 535 msgid "Final value (overall min): " msgstr "Final value (overall min): " # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "MD step" msgstr "MD step" # File: opengl/win/m_map.c, Line: 679 msgid "Value" msgstr "Value" # File: opengl/win/m_map.c, Line: 738 msgid "Edit color map data" msgstr "Edit color map data" # File: opengl/win/m_map.c, Line: 804 msgid "Error while saving custom color map" msgstr "Error while saving custom color map" # File: opengl/win/m_map.c, Line: 887 msgid "Opening custom map for " msgstr "Opening custom map for " # File: opengl/win/m_map.c, Line: 887 msgid "Saving custom map for " msgstr "Saving custom map for " # File: opengl/win/m_map.c, Line: 894 msgid "Do you want to save the color map data" msgstr "Do you want to save the color map data" # File: opengl/win/m_map.c, Line: 895 msgid "Save color map data to file ?" msgstr "Save color map data to file ?" # File: opengl/win/m_map.c, Line: 903 msgid "Do you want to read new color map data" msgstr "Do you want to read new color map data" # File: opengl/win/m_map.c, Line: 904 msgid "Read color map data from file ?" msgstr "Read color map data from file ?" # File: opengl/win/m_map.c, Line: 933 msgid "Raw data (*.dat)" msgstr "Raw data (*.dat)" # File: opengl/win/m_map.c, Line: 982 msgid "Custom color map settings" msgstr "Custom color map settings" # File: opengl/win/m_map.c, Line: 985 msgid "Import / Save data" msgstr "Import / Save data" # File: opengl/win/m_map.c, Line: 985 msgid "Edit data" msgstr "Edit data" # File: opengl/win/m_map.c, Line: 985 msgid "Customize color map" msgstr "Customize color map" # File: opengl/win/m_map.c, Line: 1133 msgid "Atomic Coordination" msgstr "Atomic Coordination" # File: opengl/win/m_map.c, Line: 1137 # File: opengl/win/w_coord.c, Line: 91 # File: opengl/win/w_cutoffs.c, Line: 201 msgid "Total" msgstr "Total" # File: opengl/win/m_map.c, Line: 1138 # File: opengl/win/w_coord.c, Line: 92 msgid "Partial" msgstr "Partial" # File: opengl/win/m_map.c, Line: 1141,1256 msgid "Force Field (DL_POLY)" msgstr "Force Field (DL_POLY)" # File: opengl/win/m_map.c, Line: 1144,1259 # File: opengl/win/w_coord.c, Line: 1171 msgid "Custom" msgstr "Custom" # File: opengl/win/m_map.c, Line: 1148,1259 msgid "Use Atom(s) Custom Map" msgstr "Use Atom(s) Custom Map" # File: opengl/win/m_map.c, Line: 1164 msgid "Atoms & bonds" msgstr "Atoms & bonds" # File: opengl/win/m_map.c, Line: 1246 msgid "Atomic Coordinations" msgstr "Atomic Coordinations" # File: opengl/win/m_map.c, Line: 1275 msgid "Atoms & Bonds" msgstr "Atoms & Bonds" # File: opengl/win/m_poly.c, Line: 339,347,503 msgid "Cloned Polyhedra" msgstr "Cloned Polyhedra" # File: opengl/win/m_proj.c, Line: 145,192 # File: opengl/win/m_rep.c, Line: 486 msgid "Right [1, 0, 0]" msgstr "Right [1, 0, 0]" # File: opengl/win/m_proj.c, Line: 148,193 # File: opengl/win/m_rep.c, Line: 486 msgid "Left [-1, 0, 0]" msgstr "Left [-1, 0, 0]" # File: opengl/win/m_proj.c, Line: 151,194 # File: opengl/win/m_rep.c, Line: 486 msgid "Top [0, 1, 0]" msgstr "Top [0, 1, 0]" # File: opengl/win/m_proj.c, Line: 154,195 # File: opengl/win/m_rep.c, Line: 486 msgid "Bottom [0, -1, 0]" msgstr "Bottom [0, -1, 0]" # File: opengl/win/m_proj.c, Line: 157,196 # File: opengl/win/m_rep.c, Line: 486 msgid "Front [0, 0, 1]" msgstr "Front [0, 0, 1]" # File: opengl/win/m_proj.c, Line: 160,197 # File: opengl/win/m_rep.c, Line: 486 msgid "Back [0, 0, -1]" msgstr "Back [0, 0, -1]" # File: opengl/win/w_advance.c, Line: 1318 msgid "Filled" msgstr "Filled" # File: opengl/win/w_advance.c, Line: 1320 msgid "Points" msgstr "Points" # File: opengl/win/m_rep.c, Line: 76 msgid "Orthographic" msgstr "Orthographic" # File: opengl/win/m_rep.c, Line: 76 msgid "Perspective" msgstr "Perspective" # File: opengl/win/m_rep.c, Line: 427 msgid "Perspective depth" msgstr "Perspective depth" # File: opengl/win/m_rep.c, Line: 427 msgid "Camera depth" msgstr "Camera depth" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera right/left" msgstr "Camera right/left" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera up/down" msgstr "Camera up/down" # File: opengl/win/m_rep.c, Line: 469 msgid "%s - OpenGL scene set-up" msgstr "%s - OpenGL scene set-up" # File: opengl/win/m_rep.c, Line: 478 msgid "Projection" msgstr "Projection" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: curve/cedit.c, Line: 294 # File: opengl/win/m_rep.c, Line: 487 # File: opengl/win/popup.c, Line: 3693 msgid "Select" msgstr "Select" # File: opengl/win/m_rep.c, Line: 496 msgid "Representation" msgstr "Representation" # File: opengl/win/m_rep.c, Line: 513 msgid "OpenGL camera set-up" msgstr "OpenGL camera set-up" # File: opengl/win/m_rep.c, Line: 566 msgid "∈ [C. depth, %.1f]" msgstr "∈ [C. depth, %.1f]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth*]" msgstr "∈ [%.1f, P. depth*]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth]" msgstr "∈ [%.1f, P. depth]" # File: opengl/win/m_rep.c, Line: 587 msgid "Perspective depth evaluated from the model" msgstr "Perspective depth evaluated from the model" # File: opengl/win/m_style.c, Line: 64 msgid "Dots" msgstr "Dots" # File: opengl/win/m_tools.c, Line: 71 msgid "Classical: DL-POLY" msgstr "Classical: DL-POLY" # File: opengl/win/m_tools.c, Line: 72 msgid "Classical: LAMMPS" msgstr "Classical: LAMMPS" # File: opengl/win/m_tools.c, Line: 73 msgid "First-Principles: CPMD" msgstr "First-Principles: CPMD" # File: opengl/win/m_tools.c, Line: 74 msgid "First-Principles: CP2K" msgstr "First-Principles: CP2K" # File: opengl/win/m_tools.c, Line: 75 msgid "QM-MM: CPMD - [Soon]" msgstr "QM-MM: CPMD - [Soon]" # File: opengl/win/m_tools.c, Line: 76 msgid "QM-MM: CP2K - [Soon]" msgstr "QM-MM: CP2K - [Soon]" # File: opengl/win/m_tools.c, Line: 78 msgid "Input(s)" msgstr "Input(s)" # File: opengl/win/m_tools.c, Line: 80 msgid "Atom/Bond" msgstr "Atom/Bond" # File: opengl/win/m_tools.c, Line: 81 msgid "Coordination Sphere" msgstr "Coordination Sphere" # File: opengl/win/m_tools.c, Line: 84 msgid "Single Fragment" msgstr "Single Fragment" # File: opengl/win/m_tools.c, Line: 85 msgid "Single Molecule" msgstr "Single Molecule" # File: opengl/win/m_tools.c, Line: 86 msgid "Measures (Edition Mode Only)" msgstr "Measures (Edition Mode Only)" # File: opengl/win/m_tools.c, Line: 88 # File: opengl/win/w_search.c, Line: 4206 msgid "Selection" msgstr "Selection" # File: opengl/win/m_tools.c, Line: 88 msgid "Visible/Hidden" msgstr "Visible/Hidden" # File: opengl/win/m_tools.c, Line: 317,502 msgid "Volumes" msgstr "Volumes" # File: opengl/win/m_tools.c, Line: 322,682 msgid "Mouse Mode" msgstr "Mouse Mode" # File: opengl/win/m_tools.c, Line: 369,683 msgid "Selection Mode" msgstr "Selection Mode" # File: opengl/win/m_tools.c, Line: 412,785 # File: calc/cp2k/cp2k_init.c, Line: 119 msgid "Molecular Dynamics" msgstr "Molecular Dynamics" # File: opengl/win/m_tools.c, Line: 443,786 msgid "Invert" msgstr "Invert" # File: opengl/win/popup.c, Line: 438,3025,3186 # File: opengl/win/w_search.c, Line: 2416,2669 msgid "%s in %s" msgstr "%s in %s" # File: opengl/win/popup.c, Line: 504,740,3041,3194 msgid "Copied Data" msgstr "Copied Data" # File: opengl/win/popup.c, Line: 617 msgid "No atoms to be removed !" msgstr "No atoms to be removed !" # File: opengl/win/popup.c, Line: 621 msgid "%d atom(s) removed !" msgstr "%d atom(s) removed !" # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) inserted !" msgstr "%d atom(s) inserted !" # File: opengl/win/popup.c, Line: 3037,3168 # File: opengl/win/w_search.c, Line: 2658 msgid "Import From Project" msgstr "Import From Project" # File: opengl/win/popup.c, Line: 3314 msgid "All Non-Selected Atom(s)/Bond(s)" msgstr "All Non-Selected Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3314 msgid "All Selected Atom(s)/Bond(s)" msgstr "All Selected Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3315 msgid "All Non-Labelled Atom(s)/Bond(s)" msgstr "All Non-Labelled Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3315 msgid "All Labelled Atom(s)/Bond(s)" msgstr "All Labelled Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3372 msgid "This Atom: %s%d" msgstr "This Atom: %s%d" # File: opengl/win/popup.c, Line: 3407 msgid "This Bond: %s%d - %s%d" msgstr "This Bond: %s%d - %s%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Fragment N°:\t%d" msgstr "Fragment N°:\t%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Molecule N°:\t%d" msgstr "Molecule N°:\t%d" # File: opengl/win/popup.c, Line: 3515 msgid "All %s Atoms %d Fold" msgstr "All %s Atoms %d Fold" # File: opengl/win/popup.c, Line: 3526 msgid "All %s Coordinations" msgstr "All %s Coordinations" # File: opengl/win/popup.c, Line: 3536 msgid "All %s Atoms" msgstr "All %s Atoms" # File: opengl/win/popup.c, Line: 3540 msgid "All %s* Clones" msgstr "All %s* Clones" # File: opengl/win/popup.c, Line: 3555 msgid "All %s %d - %s %d Bonds" msgstr "All %s %d - %s %d Bonds" # File: opengl/win/popup.c, Line: 3569 msgid "All %s - %s Bonds" msgstr "All %s - %s Bonds" # File: opengl/win/popup.c, Line: 3577 msgid "All %s - %s Bonds" msgstr "All %s - %s Bonds" # File: opengl/win/popup.c, Line: 3587 msgid "All Hidden Atom(s)/Bond(s)" msgstr "All Hidden Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3587 msgid "All Visible Atom(s)/Bond(s)" msgstr "All Visible Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3694 msgid "Unselect" msgstr "Unselect" # File: opengl/win/popup.c, Line: 3695 # File: opengl/win/w_atoms.c, Line: 363 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Label" msgstr "Label" # File: opengl/win/popup.c, Line: 3696 msgid "Unlabel" msgstr "Unlabel" # File: opengl/win/popup.c, Line: 3698 msgid "Hide" msgstr "Hide" # File: opengl/win/popup.c, Line: 3701 msgid "Edit as New Project" msgstr "Edit as New Project" # File: opengl/win/popup.c, Line: 3704 msgid "Copy" msgstr "Copy" # File: opengl/win/popup.c, Line: 3830 msgid "Total Coordination: %d" msgstr "Total Coordination: %d" # File: opengl/win/popup.c, Line: 3839 msgid "Partial Coordination: %s" msgstr "Partial Coordination: %s" # File: opengl/win/popup.c, Line: 4023 msgid "Center crystal atom(s)" msgstr "Center crystal atom(s)" # File: opengl/win/popup.c, Line: 4023 msgid "Are you sure, this can affect the visual representation of the unit cell ?" msgstr "Are you sure, this can affect the visual representation of the unit cell ?" # File: opengl/win/popup.c, Line: 4094 msgid "Color palette error: %s - %d - custom= %s" msgstr "Color palette error: %s - %d - custom= %s" # File: opengl/win/popup.c, Line: 4126 msgid "Color palette error: %s - spec= %d - coord= %d, custom= %s" msgstr "Color palette error: %s - spec= %d - coord= %d, custom= %s" # File: opengl/win/popup.c, Line: 4143 msgid "Color palette error: %s - %d, custom= %s" msgstr "Color palette error: %s - %d, custom= %s" # File: calc/dl_poly/dlp_field.c, Line: 187 # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "molecule" msgstr "molecule" # File: opengl/win/popup.c, Line: 4156 msgid "Color palette error: rings - %d - %d, custom= %s" msgstr "Color palette error: rings - %d - %d, custom= %s" # File: opengl/win/popup.c, Line: 4203,4266 msgid "Reset Motion" msgstr "Reset Motion" # File: opengl/win/popup.c, Line: 4278 msgid "Exit Fullscreen" msgstr "Exit Fullscreen" # File: opengl/win/w_advance.c, Line: 1391 msgid "Opaque" msgstr "Opaque" # File: opengl/win/w_advance.c, Line: 1392 msgid "Brushed Metal" msgstr "Brushed Metal" # File: opengl/win/w_advance.c, Line: 1393 msgid "Shiny Metal" msgstr "Shiny Metal" # File: opengl/win/w_advance.c, Line: 1394 msgid "Plastic" msgstr "Plastic" # File: curve/tab-2.c, Line: 1007 # File: opengl/win/w_advance.c, Line: 1395 msgid "Transparent" msgstr "Transparent" # File: opengl/win/w_advance.c, Line: 1396 msgid "Translucent" msgstr "Translucent" # File: opengl/win/w_advance.c, Line: 1397 msgid "Diffuse" msgstr "Diffuse" # File: opengl/win/w_advance.c, Line: 117 msgid "Ambient occlusion" msgstr "Ambient occlusion" # File: opengl/win/w_advance.c, Line: 118 msgid "Gamma correction" msgstr "Gamma correction" # File: opengl/win/w_advance.c, Line: 123 msgid "Constant attenuation" msgstr "Constant attenuation" # File: opengl/win/w_advance.c, Line: 124 msgid "Linear attenuation" msgstr "Linear attenuation" # File: opengl/win/w_advance.c, Line: 125 msgid "Quadratic attenuation" msgstr "Quadratic attenuation" # File: opengl/win/w_advance.c, Line: 126 msgid "Cone angle" msgstr "Cone angle" # File: opengl/win/w_advance.c, Line: 127 msgid "Inner cutoff" msgstr "Inner cutoff" # File: opengl/win/w_advance.c, Line: 128 msgid "Outer cutoff" msgstr "Outer cutoff" # File: opengl/win/w_advance.c, Line: 130 msgid "Fog color" msgstr "Fog color" # File: opengl/win/w_advance.c, Line: 244 msgid "You must select %d light source(s) to be removed !" msgstr "You must select %d light source(s) to be removed !" # File: opengl/win/w_advance.c, Line: 266 msgid "Please select the %d light sources to be removed: " msgstr "Please select the %d light sources to be removed: " # File: opengl/win/w_advance.c, Line: 270 msgid "Please select the light source to be removed: " msgstr "Please select the light source to be removed: " # File: opengl/win/w_advance.c, Line: 272 msgid "Remove light source(s)" msgstr "Remove light source(s)" # File: opengl/win/w_advance.c, Line: 280,520 msgid "Light N°%d" msgstr "Light N°%d" # File: opengl/win/w_advance.c, Line: 882 msgid "Show light" msgstr "Show light" # File: opengl/win/w_advance.c, Line: 905 msgid "Number of light sources\n(add or remove lights - up to 10 sources)" msgstr "Number of light sources\n(add or remove lights - up to 10 sources)" # File: opengl/win/w_advance.c, Line: 914 msgid "Configure light source *" msgstr "Configure light source *" # File: opengl/win/w_advance.c, Line: 919 msgid "Light configuration" msgstr "Light configuration" # File: opengl/win/w_advance.c, Line: 923 msgid "Directional" msgstr "Directional" # File: opengl/win/w_advance.c, Line: 924 msgid "Point" msgstr "Point" # File: opengl/win/w_advance.c, Line: 925 msgid "Spot" msgstr "Spot" # File: opengl/win/w_advance.c, Line: 929 msgid "Fixed by respect to: " msgstr "Fixed by respect to: " # File: opengl/win/w_advance.c, Line: 931 msgid "The viewer" msgstr "The viewer" # File: opengl/win/w_advance.c, Line: 932 msgid "The model" msgstr "The model" # File: opengl/win/w_advance.c, Line: 955 msgid "Advanced parameters" msgstr "Advanced parameters" # File: opengl/win/w_advance.c, Line: 980 msgid "Note that light N°1 must be a directional light" msgstr "Note that light N°1 must be a directional light" # File: opengl/win/w_advance.c, Line: 983 msgid "Position and attenuation will be corrected based on model depth" msgstr "Position and attenuation will be corrected based on model depth" # File: opengl/win/w_advance.c, Line: 1303 msgid "3D Objects" msgstr "3D Objects" # File: opengl/win/w_advance.c, Line: 1384 msgid "Use template" msgstr "Use template" # File: opengl/win/w_advance.c, Line: 1388 msgid "Templates" msgstr "Templates" # File: opengl/win/w_advance.c, Line: 1417 msgid "Material properties" msgstr "Material properties" # File: opengl/win/w_advance.c, Line: 1633 msgid "Fog mode " msgstr "Fog mode " # File: curve/tab-4.c, Line: 718 # File: opengl/win/w_advance.c, Line: 1636 # File: opengl/win/w_colors.c, Line: 489 msgid "Linear" msgstr "Linear" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential" msgstr "Exponential" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential Squared" msgstr "Exponential Squared" # File: opengl/win/w_advance.c, Line: 1647 msgid "Fog type " msgstr "Fog type " # File: opengl/win/w_advance.c, Line: 1649 msgid "Plane Based" msgstr "Plane Based" # File: opengl/win/w_advance.c, Line: 1650 msgid "Range Based" msgstr "Range Based" # File: opengl/win/w_advance.c, Line: 1657 msgid "Fog density" msgstr "Fog density" # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* start: " msgstr "\t depth* start: " # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* end: " msgstr "\t depth* end: " # File: opengl/win/w_advance.c, Line: 1666 msgid "Fog depth" msgstr "Fog depth" # File: opengl/win/w_advance.c, Line: 1675 msgid "* % of the OpenGL model depth." msgstr "* % of the OpenGL model depth." # File: opengl/win/w_advance.c, Line: 1746 # File: workspace/workspace.c, Line: 392 msgid "OpenGL material aspect and light settings - %s" msgstr "OpenGL material aspect and light settings - %s" # File: opengl/win/w_advance.c, Line: 1767 msgid "Material aspect" msgstr "Material aspect" # File: opengl/win/w_advance.c, Line: 1769 msgid "Configure light sources" msgstr "Configure light sources" # File: opengl/win/w_advance.c, Line: 1771 msgid "Configure fog" msgstr "Configure fog" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust atom sphere radius" msgstr "Adjust atom sphere radius" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust clone sphere radius" msgstr "Adjust clone sphere radius" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust atom point size" msgstr "Adjust atom point size" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust clone point size" msgstr "Adjust clone point size" # File: opengl/win/w_atoms.c, Line: 361 msgid "Radius [Ã…]" msgstr "Radius [Ã…]" # File: opengl/win/w_atoms.c, Line: 364 msgid "Size [pts]" msgstr "Size [pts]" # File: opengl/win/w_atoms.c, Line: 408 msgid "%s atom(s) color" msgstr "%s atom(s) color" # File: opengl/win/w_atoms.c, Line: 412 msgid "%s clone(s) color" msgstr "%s clone(s) color" # File: opengl/win/w_atoms.c, Line: 512 msgid "Display properties" msgstr "Display properties" # File: opengl/win/w_atoms.c, Line: 513 msgid "Label properties" msgstr "Label properties" # File: opengl/win/w_atoms.c, Line: 521 msgid "Clone(s) selection" msgstr "Clone(s) selection" # File: opengl/win/w_atoms.c, Line: 521 msgid "Atom(s) selection" msgstr "Atom(s) selection" # File: opengl/win/w_atoms.c, Line: 536 msgid "Atom(s) configuration - " msgstr "Atom(s) configuration - " # File: opengl/win/w_atoms.c, Line: 536 msgid "Clone(s) configuration - " msgstr "Clone(s) configuration - " # File: opengl/win/w_atoms.c, Line: 599 msgid "atoms" msgstr "atoms" # File: opengl/win/w_atoms.c, Line: 599 msgid "clones" msgstr "clones" # File: opengl/win/w_atoms.c, Line: 599 msgid "Error impossible to display the model window for %s !" msgstr "Error impossible to display the model window for %s !" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window width" msgstr "% of the window width" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window height" msgstr "% of the window height" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window depth" msgstr "% of the window depth" # File: opengl/win/w_axis.c, Line: 186 msgid "_Radius [ %f Ã… ]" msgstr "_Radius [ %f Ã… ]" # File: opengl/win/w_axis.c, Line: 843 msgid "Axis settings" msgstr "Axis settings" # File: opengl/win/w_axis.c, Line: 851 # File: workspace/workspace.c, Line: 417 msgid "%s - axis settings" msgstr "%s - axis settings" # File: opengl/win/w_axis.c, Line: 866 msgid "Show/Hide axis" msgstr "Show/Hide axis" # File: opengl/win/w_axis.c, Line: 883 msgid "Top Right Corner *" msgstr "Top Right Corner *" # File: opengl/win/w_axis.c, Line: 884 msgid "Top Left Corner *" msgstr "Top Left Corner *" # File: opengl/win/w_axis.c, Line: 885 msgid "Bottom Right Corner *" msgstr "Bottom Right Corner *" # File: opengl/win/w_axis.c, Line: 886 msgid "Bottom Left Corner *" msgstr "Bottom Left Corner *" # File: opengl/win/w_axis.c, Line: 887 msgid "Center **" msgstr "Center **" # File: opengl/win/w_axis.c, Line: 888 msgid "Use template positions" msgstr "Use template positions" # File: opengl/win/w_axis.c, Line: 904 msgid "Please choose axis position:" msgstr "Please choose axis position:" # File: opengl/win/w_axis.c, Line: 928 msgid "Length [Å] " msgstr "Length [Å] " # File: opengl/win/w_axis.c, Line: 933 # File: opengl/win/w_box.c, Line: 398 msgid "Style " msgstr "Style " # File: opengl/win/w_axis.c, Line: 945 # File: opengl/win/w_box.c, Line: 409 msgid "Line width [pts] " msgstr "Line width [pts] " # File: opengl/win/w_axis.c, Line: 949 # File: opengl/win/w_box.c, Line: 413 msgid "Cylinder radius [Å] " msgstr "Cylinder radius [Å] " # File: opengl/win/w_axis.c, Line: 957 msgid "Label axis" msgstr "Label axis" # File: opengl/win/w_axis.c, Line: 961 # File: opengl/win/w_labels.c, Line: 698 msgid "Rendering " msgstr "Rendering " # File: opengl/win/w_axis.c, Line: 963 # File: opengl/win/w_labels.c, Line: 700 msgid "Basic Text" msgstr "Basic Text" # File: opengl/win/w_axis.c, Line: 964 # File: opengl/win/w_labels.c, Line: 701 msgid "Highlighted" msgstr "Highlighted" # File: opengl/win/w_axis.c, Line: 976 # File: opengl/win/w_labels.c, Line: 728 msgid "Scale with zoom in/out" msgstr "Scale with zoom in/out" # File: opengl/win/w_axis.c, Line: 983 msgid "Legends" msgstr "Legends" # File: opengl/win/w_axis.c, Line: 1001 msgid "Use base colors" msgstr "Use base colors" # File: opengl/win/w_axis.c, Line: 1032 msgid "In front of the atomic model" msgstr "In front of the atomic model" # File: opengl/win/w_axis.c, Line: 1033 msgid "Inside the atomic model" msgstr "Inside the atomic model" # File: opengl/win/w_bonds.c, Line: 79 msgid "Axis length [ %f Ã… ]" msgstr "Axis length [ %f Ã… ]" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust atomic bond radius(ii)" msgstr "Adjust atomic bond radius(ii)" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust clone bond radius(ii)" msgstr "Adjust clone bond radius(ii)" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust atomic line width(s)" msgstr "Adjust atomic line width(s)" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust clone line width(s)" msgstr "Adjust clone line width(s)" # File: opengl/win/w_bonds.c, Line: 410 msgid "bond" msgstr "bond" # File: opengl/win/w_bonds.c, Line: 410 msgid "clone bond" msgstr "clone bond" # File: calc/dl_poly/dlp_field.c, Line: 932 # File: opengl/win/w_bonds.c, Line: 411 msgid "Bond" msgstr "Bond" # File: opengl/win/w_bonds.c, Line: 411 msgid "Clone bond" msgstr "Clone bond" # File: opengl/win/w_bonds.c, Line: 417 msgid "Adjust axis length" msgstr "Adjust axis length" # File: opengl/win/w_bonds.c, Line: 421 msgid "Adjust %s line width" msgstr "Adjust %s line width" # File: opengl/win/w_bonds.c, Line: 425,429 msgid "Adjust %s cylinders radius" msgstr "Adjust %s cylinders radius" # File: opengl/win/w_bonds.c, Line: 442 msgid "Axis length" msgstr "Axis length" # File: opengl/win/w_bonds.c, Line: 445 msgid "%s line width" msgstr "%s line width" # File: opengl/win/w_bonds.c, Line: 448,451 msgid "%s cylinders radius" msgstr "%s cylinders radius" # File: opengl/win/w_bonds.c, Line: 478 msgid " [pts]" msgstr " [pts]" # File: opengl/win/w_box.c, Line: 367 msgid "Box settings" msgstr "Box settings" # File: opengl/win/w_box.c, Line: 374 # File: workspace/workspace.c, Line: 413 msgid "%s - box settings" msgstr "%s - box settings" # File: opengl/win/w_box.c, Line: 389 msgid "Show/Hide box" msgstr "Show/Hide box" # File: opengl/win/w_box.c, Line: 419 msgid "Color " msgstr "Color " # File: opengl/win/w_chains.c, Line: 825 msgid "Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n" msgstr "Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 540 msgid "Chain(s) size" msgstr "Chain(s) size" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Pick" msgstr "Pick" # File: opengl/win/w_chains.c, Line: 828 # File: opengl/win/w_rings.c, Line: 954 msgid "MD step:" msgstr "MD step:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain size:" msgstr "Chain size:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain Id.:" msgstr "Chain Id.:" # File: opengl/win/w_chains.c, Line: 860 # File: opengl/win/w_coord.c, Line: 978 # File: opengl/win/w_rings.c, Line: 986 msgid "Search result(s)" msgstr "Search result(s)" # File: opengl/win/w_chains.c, Line: 906 msgid "# This file contains the list of all chains in the %s model\n\n" msgstr "# This file contains the list of all chains in the %s model\n\n" # File: opengl/win/w_chains.c, Line: 911 # File: opengl/win/w_rings.c, Line: 1045 msgid "Step N°%d\n" msgstr "Step N°%d\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\n\tChain(s) of size %d atoms\n" msgstr "\n\tChain(s) of size %d atoms\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\nChain(s) of size %d atoms\n" msgstr "\nChain(s) of size %d atoms\n" # File: opengl/win/w_chains.c, Line: 930 # File: opengl/win/w_rings.c, Line: 1064 msgid "Impossible to open file: %s" msgstr "Impossible to open file: %s" # File: opengl/win/w_chains.c, Line: 959 msgid "Save atoms in chains to file" msgstr "Save atoms in chains to file" # File: opengl/win/w_chains.c, Line: 1013 # File: opengl/win/w_rings.c, Line: 1153 msgid "Save to file" msgstr "Save to file" # File: opengl/win/w_colors.c, Line: 175,520 msgid "Background color" msgstr "Background color" # File: opengl/win/w_colors.c, Line: 180 msgid "Model box color" msgstr "Model box color" # File: opengl/win/w_colors.c, Line: 187 msgid "%s - atom(s) color" msgstr "%s - atom(s) color" # File: opengl/win/w_colors.c, Line: 191 msgid "%s* - clone(s) color" msgstr "%s* - clone(s) color" # File: opengl/win/w_colors.c, Line: 469 msgid "Background settings" msgstr "Background settings" # File: opengl/win/w_colors.c, Line: 476 # File: workspace/workspace.c, Line: 409 msgid "%s - background settings" msgstr "%s - background settings" # File: opengl/win/w_colors.c, Line: 486 msgid "Gradient type" msgstr "Gradient type" # File: opengl/win/w_colors.c, Line: 499 msgid "Gradient direction" msgstr "Gradient direction" # File: opengl/win/w_colors.c, Line: 488 msgid "No Gradient" msgstr "No Gradient" # File: opengl/win/w_colors.c, Line: 490 msgid "Circular" msgstr "Circular" # File: opengl/win/w_colors.c, Line: 483 msgid "Top to Bottom" msgstr "Top to Bottom" # File: opengl/win/w_colors.c, Line: 483 msgid "Right to Left" msgstr "Right to Left" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Right to Top Left" msgstr "Bottom Right to Top Left" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Right to Bottom Left" msgstr "Top Right to Bottom Left" # File: opengl/win/w_colors.c, Line: 483 msgid "Left to Right" msgstr "Left to Right" # File: opengl/win/w_colors.c, Line: 483 msgid "Bottom to Top" msgstr "Bottom to Top" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Left to Top Right" msgstr "Bottom Left to Top Right" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Left to Bottom Right" msgstr "Top Left to Bottom Right" # File: opengl/win/w_colors.c, Line: 527 msgid "Single color" msgstr "Single color" # File: opengl/win/w_colors.c, Line: 538 msgid "First color" msgstr "First color" # File: opengl/win/w_colors.c, Line: 538 msgid "Second color" msgstr "Second color" # File: opengl/win/w_colors.c, Line: 687 msgid "%s atom(s) %d fold coordination sphere color" msgstr "%s atom(s) %d fold coordination sphere color" # File: opengl/win/w_colors.c, Line: 692 msgid "%s - %s coordination sphere color" msgstr "%s - %s coordination sphere color" # File: opengl/win/w_colors.c, Line: 697 msgid "Fragment N°%d color" msgstr "Fragment N°%d color" # File: opengl/win/w_colors.c, Line: 702 msgid "Molecule N°%d color" msgstr "Molecule N°%d color" # File: opengl/win/w_colors.c, Line: 707 msgid "%d atom chain(s) color" msgstr "%d atom chain(s) color" # File: opengl/win/w_colors.c, Line: 711 msgid "%s - %d atom ring(s) color" msgstr "%s - %d atom ring(s) color" # File: opengl/win/w_coord.c, Line: 962 # File: opengl/win/w_volumes.c, Line: 873 msgid "Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n" msgstr "Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n" # File: opengl/win/w_coord.c, Line: 537 msgid "Alpha" msgstr "Alpha" # File: opengl/win/w_coord.c, Line: 538 msgid "Color *" msgstr "Color *" # File: opengl/win/w_coord.c, Line: 538 msgid "Show **" msgstr "Show **" # File: opengl/win/w_coord.c, Line: 538 msgid "Label **" msgstr "Label **" # File: opengl/win/w_coord.c, Line: 538 msgid "Pick **" msgstr "Pick **" # File: opengl/win/w_coord.c, Line: 539 # File: opengl/win/w_rings.c, Line: 413 msgid "Ring(s) size" msgstr "Ring(s) size" # File: opengl/win/w_coord.c, Line: 540 msgid "Show *" msgstr "Show *" # File: opengl/win/w_coord.c, Line: 540 msgid "Label *" msgstr "Label *" # File: opengl/win/w_coord.c, Line: 540 msgid "Pick *" msgstr "Pick *" # File: opengl/win/w_coord.c, Line: 553 msgid " * for the polyhedra only" msgstr " * for the polyhedra only" # File: opengl/win/w_coord.c, Line: 554 msgid "** affect all atoms that belong to ring(s) of this size" msgstr "** affect all atoms that belong to ring(s) of this size" # File: opengl/win/w_coord.c, Line: 558 msgid "* affect all atoms that belong to chain(s) of this size" msgstr "* affect all atoms that belong to chain(s) of this size" # File: opengl/win/w_coord.c, Line: 636 msgid "%d atoms" msgstr "%d atoms" # File: opengl/win/w_coord.c, Line: 851 msgid "%s N°%d color" msgstr "%s N°%d color" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Fragment Id.:" msgstr "Fragment Id.:" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Molecule Id.:" msgstr "Molecule Id.:" # File: opengl/win/w_coord.c, Line: 1148 msgid "Atom(s) and bond(s) color map:" msgstr "Atom(s) and bond(s) color map:" # File: opengl/win/w_coord.c, Line: 1159,1205 msgid "%s coordination(s)" msgstr "%s coordination(s)" # File: opengl/win/w_coord.c, Line: 1165,1213 msgid "Force field (DL_POLY)" msgstr "Force field (DL_POLY)" # File: opengl/win/w_coord.c, Line: 1196 msgid "Polyhedra color map:" msgstr "Polyhedra color map:" # File: opengl/win/w_coord.c, Line: 1217 msgid "Use atom(s) custom map" msgstr "Use atom(s) custom map" # File: opengl/win/w_coord.c, Line: 1235 msgid "\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:" msgstr "\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:" # File: opengl/win/w_coord.c, Line: 1236 msgid "Cloned polyhedra" msgstr "Cloned polyhedra" # File: opengl/win/w_coord.c, Line: 1243 msgid "This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC." msgstr "This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC." # File: opengl/win/w_coord.c, Line: 1300 # File: workspace/workspace.c, Line: 380 msgid "Environments configuration - %s" msgstr "Environments configuration - %s" # File: opengl/win/w_coord.c, Line: 1313 msgid "Parameters" msgstr "Parameters" # File: opengl/win/w_coord.c, Line: 1314 msgid "Total coordination(s) [TC]" msgstr "Total coordination(s) [TC]" # File: opengl/win/w_coord.c, Line: 1315 msgid "Partial coordination(s) [PC]" msgstr "Partial coordination(s) [PC]" # File: opengl/win/w_coord.c, Line: 1324 msgid "%s ring(s) [%s]" msgstr "%s ring(s) [%s]" # File: opengl/win/w_coord.c, Line: 1324 msgid "All ring(s) (no rule) [%s]" msgstr "All ring(s) (no rule) [%s]" # File: opengl/win/w_coord.c, Line: 1334 msgid "Polyhedra from TC" msgstr "Polyhedra from TC" # File: opengl/win/w_coord.c, Line: 1335 msgid "Polyhedra from PC" msgstr "Polyhedra from PC" # File: opengl/win/w_coord.c, Line: 1342 msgid "Polyhedra from %s" msgstr "Polyhedra from %s" # File: opengl/win/w_coord.c, Line: 1364 msgid "Isolated ring(s) from %s" msgstr "Isolated ring(s) from %s" # File: opengl/win/w_coord.c, Line: 1373 msgid "Isolated chain(s)" msgstr "Isolated chain(s)" # File: opengl/win/w_coord.c, Line: 1474 msgid "Error impossible to display the environments window !" msgstr "Error impossible to display the environments window !" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: opengl/win/w_crystal.c, Line: 75 msgid "Orthorhombic" msgstr "Orthorhombic" # File: opengl/win/w_crystal.c, Line: 75 msgid " Cubic" msgstr " Cubic" # File: opengl/win/w_crystal.c, Line: 75 msgid "Other" msgstr "Other" # File: opengl/win/w_crystal.c, Line: 450 # File: opengl/win/w_library.c, Line: 865 msgid "Formula:" msgstr "Formula:" # File: opengl/win/w_crystal.c, Line: 470 msgid "Density:" msgstr "Density:" # File: opengl/win/w_crystal.c, Line: 475 msgid "Name:" msgstr "Name:" # File: opengl/win/w_crystal.c, Line: 791 msgid "Database" msgstr "Database" # File: opengl/win/w_crystal.c, Line: 795 msgid "Group" msgstr "Group" # File: opengl/win/w_crystal.c, Line: 797 msgid "Crystal" msgstr "Crystal" # File: opengl/win/w_cutoffs.c, Line: 210 msgid "Cutoff(s) must be ≥ 0.5 Å" msgstr "Cutoff(s) must be ≥ 0.5 Å" # File: opengl/win/w_cutoffs.c, Line: 278 msgid "Adjust cutoff radius(ii) - %s" msgstr "Adjust cutoff radius(ii) - %s" # File: opengl/win/w_encode.c, Line: 455 msgid "%s - movie encoding" msgstr "%s - movie encoding" # File: opengl/win/w_encode.c, Line: 459 msgid "%s - image rendering" msgstr "%s - image rendering" # File: opengl/win/w_encode.c, Line: 472 msgid "Frames recorded:" msgstr "Frames recorded:" # File: opengl/win/w_encode.c, Line: 481 msgid "Frames per seconds:" msgstr "Frames per seconds:" # File: opengl/win/w_encode.c, Line: 491 msgid "Extra frames every (frames):" msgstr "Extra frames every (frames):" # File: opengl/win/w_encode.c, Line: 496 msgid "Movie resolution (in pixels):" msgstr "Movie resolution (in pixels):" # File: opengl/win/w_encode.c, Line: 501 msgid "Image resolution (in pixels):" msgstr "Image resolution (in pixels):" # File: opengl/win/w_encode.c, Line: 523 msgid "Video codec:" msgstr "Video codec:" # File: opengl/win/w_encode.c, Line: 530 msgid "Image format:" msgstr "Image format:" # File: opengl/win/w_encode.c, Line: 550 msgid "Video quality (bitrate in kb/s):" msgstr "Video quality (bitrate in kb/s):" # File: opengl/win/w_encode.c, Line: 564 msgid "OpenGL quality [0-1000] (0= recorded quality):" msgstr "OpenGL quality [0-1000] (0= recorded quality):" # File: opengl/win/w_encode.c, Line: 568 msgid "OpenGL quality [0-1000] (0= on-screen quality):" msgstr "OpenGL quality [0-1000] (0= on-screen quality):" # File: opengl/win/w_encode.c, Line: 575 msgid "Progress: " msgstr "Progress: " # File: opengl/win/w_labels.c, Line: 73 msgid "Element Name" msgstr "Element Name" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol" msgstr "Atomic Symbol" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol + Id. Number" msgstr "Atomic Symbol + Id. Number" # File: opengl/win/w_labels.c, Line: 73 msgid "Sym. + Id. Num. Subscript" msgstr "Sym. + Id. Num. Subscript" # File: opengl/win/w_labels.c, Line: 73 msgid "Id. Number" msgstr "Id. Number" # File: opengl/win/w_labels.c, Line: 682 msgid "Templates " msgstr "Templates " # File: opengl/win/w_labels.c, Line: 695 msgid "Label(s):" msgstr "Label(s):" # File: opengl/win/w_labels.c, Line: 718 msgid "Always Visible" msgstr "Always Visible" # File: curve/tab-4.c, Line: 769,800 # File: opengl/win/w_labels.c, Line: 719 msgid "Normal" msgstr "Normal" # File: opengl/win/w_labels.c, Line: 734 msgid "Tilt" msgstr "Tilt" # File: opengl/win/w_labels.c, Line: 737 msgid "Adapted" msgstr "Adapted" # File: opengl/win/w_labels.c, Line: 747 msgid "Distance to atom [Å]" msgstr "Distance to atom [Å]" # File: opengl/win/w_labels.c, Line: 782 msgid "Use atom colors" msgstr "Use atom colors" # File: opengl/win/w_labels.c, Line: 786 msgid "Please select atom label colors:" msgstr "Please select atom label colors:" # File: opengl/win/w_labels.c, Line: 807 msgid "Line(s):" msgstr "Line(s):" # File: opengl/win/w_library.c, Line: 72 msgid "Unknown" msgstr "Unknown" # File: opengl/win/w_library.c, Line: 73 msgid "Hydrogen" msgstr "Hydrogen" # File: opengl/win/w_library.c, Line: 74 msgid "Helium" msgstr "Helium" # File: opengl/win/w_library.c, Line: 75 msgid "Lithium" msgstr "Lithium" # File: opengl/win/w_library.c, Line: 76 msgid "Beryllium" msgstr "Beryllium" # File: opengl/win/w_library.c, Line: 77 msgid "Boron" msgstr "Boron" # File: opengl/win/w_library.c, Line: 78 msgid "Carbon" msgstr "Carbon" # File: opengl/win/w_library.c, Line: 79 msgid "Nitrogen" msgstr "Nitrogen" # File: opengl/win/w_library.c, Line: 80 msgid "Oxygen" msgstr "Oxygen" # File: opengl/win/w_library.c, Line: 81 msgid "Fluorine" msgstr "Fluorine" # File: opengl/win/w_library.c, Line: 82 msgid "Neon" msgstr "Neon" # File: opengl/win/w_library.c, Line: 83 msgid "Sodium" msgstr "Sodium" # File: opengl/win/w_library.c, Line: 84 msgid "Magnesium" msgstr "Magnesium" # File: opengl/win/w_library.c, Line: 85 msgid "Aluminium" msgstr "Aluminium" # File: opengl/win/w_library.c, Line: 86 msgid "Silicon" msgstr "Silicon" # File: opengl/win/w_library.c, Line: 87 msgid "Phosphorus" msgstr "Phosphorus" # File: opengl/win/w_library.c, Line: 88 msgid "Sulfur" msgstr "Sulfur" # File: opengl/win/w_library.c, Line: 89 msgid "Chlorine" msgstr "Chlorine" # File: opengl/win/w_library.c, Line: 90 msgid "Argon" msgstr "Argon" # File: opengl/win/w_library.c, Line: 91 msgid "Potassium" msgstr "Potassium" # File: opengl/win/w_library.c, Line: 92 msgid "Calcium" msgstr "Calcium" # File: opengl/win/w_library.c, Line: 93 msgid "Scandium" msgstr "Scandium" # File: opengl/win/w_library.c, Line: 94 msgid "Titanium" msgstr "Titanium" # File: opengl/win/w_library.c, Line: 95 msgid "Vanadium" msgstr "Vanadium" # File: opengl/win/w_library.c, Line: 96 msgid "Chromium" msgstr "Chromium" # File: opengl/win/w_library.c, Line: 97 msgid "Manganese" msgstr "Manganese" # File: opengl/win/w_library.c, Line: 98 msgid "Iron" msgstr "Iron" # File: opengl/win/w_library.c, Line: 99 msgid "Cobalt" msgstr "Cobalt" # File: opengl/win/w_library.c, Line: 100 msgid "Nickel" msgstr "Nickel" # File: opengl/win/w_library.c, Line: 101 msgid "Copper" msgstr "Copper" # File: opengl/win/w_library.c, Line: 102 msgid "Zinc" msgstr "Zinc" # File: opengl/win/w_library.c, Line: 103 msgid "Gallium" msgstr "Gallium" # File: opengl/win/w_library.c, Line: 104 msgid "Germanium" msgstr "Germanium" # File: opengl/win/w_library.c, Line: 105 msgid "Arsenic" msgstr "Arsenic" # File: opengl/win/w_library.c, Line: 106 msgid "Selenium" msgstr "Selenium" # File: opengl/win/w_library.c, Line: 107 msgid "Bromine" msgstr "Bromine" # File: opengl/win/w_library.c, Line: 108 msgid "Krypton" msgstr "Krypton" # File: opengl/win/w_library.c, Line: 109 msgid "Rubidium" msgstr "Rubidium" # File: opengl/win/w_library.c, Line: 110 msgid "Strontium" msgstr "Strontium" # File: opengl/win/w_library.c, Line: 111 msgid "Yttrium" msgstr "Yttrium" # File: opengl/win/w_library.c, Line: 112 msgid "Zirconium" msgstr "Zirconium" # File: opengl/win/w_library.c, Line: 113 msgid "Niobium" msgstr "Niobium" # File: opengl/win/w_library.c, Line: 114 msgid "Molybdenum" msgstr "Molybdenum" # File: opengl/win/w_library.c, Line: 115 msgid "Technetium" msgstr "Technetium" # File: opengl/win/w_library.c, Line: 116 msgid "Ruthenium" msgstr "Ruthenium" # File: opengl/win/w_library.c, Line: 117 msgid "Rhodium" msgstr "Rhodium" # File: opengl/win/w_library.c, Line: 118 msgid "Palladium" msgstr "Palladium" # File: opengl/win/w_library.c, Line: 119 msgid "Silver" msgstr "Silver" # File: opengl/win/w_library.c, Line: 120 msgid "Cadmium" msgstr "Cadmium" # File: opengl/win/w_library.c, Line: 121 msgid "Indium" msgstr "Indium" # File: opengl/win/w_library.c, Line: 122 msgid "Tin" msgstr "Tin" # File: opengl/win/w_library.c, Line: 123 msgid "Antimony" msgstr "Antimony" # File: opengl/win/w_library.c, Line: 124 msgid "Tellurium" msgstr "Tellurium" # File: opengl/win/w_library.c, Line: 125 msgid "Iodine" msgstr "Iodine" # File: opengl/win/w_library.c, Line: 126 msgid "Xenon" msgstr "Xenon" # File: opengl/win/w_library.c, Line: 127 msgid "Caesium" msgstr "Caesium" # File: opengl/win/w_library.c, Line: 128 msgid "Barium" msgstr "Barium" # File: opengl/win/w_library.c, Line: 129 msgid "Lanthanum" msgstr "Lanthanum" # File: opengl/win/w_library.c, Line: 130 msgid "Cerium" msgstr "Cerium" # File: opengl/win/w_library.c, Line: 131 msgid "Praseodymium" msgstr "Praseodymium" # File: opengl/win/w_library.c, Line: 132 msgid "Neodymium" msgstr "Neodymium" # File: opengl/win/w_library.c, Line: 133 msgid "Promethium" msgstr "Promethium" # File: opengl/win/w_library.c, Line: 134 msgid "Samarium" msgstr "Samarium" # File: opengl/win/w_library.c, Line: 135 msgid "Europium" msgstr "Europium" # File: opengl/win/w_library.c, Line: 136 msgid "Gadolinium" msgstr "Gadolinium" # File: opengl/win/w_library.c, Line: 137 msgid "Terbium" msgstr "Terbium" # File: opengl/win/w_library.c, Line: 138 msgid "Dysprosium" msgstr "Dysprosium" # File: opengl/win/w_library.c, Line: 139 msgid "Holmium" msgstr "Holmium" # File: opengl/win/w_library.c, Line: 140 msgid "Erbium" msgstr "Erbium" # File: opengl/win/w_library.c, Line: 141 msgid "Thulium" msgstr "Thulium" # File: opengl/win/w_library.c, Line: 142 msgid "Ytterbium" msgstr "Ytterbium" # File: opengl/win/w_library.c, Line: 143 msgid "Lutetium" msgstr "Lutetium" # File: opengl/win/w_library.c, Line: 144 msgid "Hafnium" msgstr "Hafnium" # File: opengl/win/w_library.c, Line: 145 msgid "Tantalum" msgstr "Tantalum" # File: opengl/win/w_library.c, Line: 146 msgid "Tungsten" msgstr "Tungsten" # File: opengl/win/w_library.c, Line: 147 msgid "Rhenium" msgstr "Rhenium" # File: opengl/win/w_library.c, Line: 148 msgid "Osmium" msgstr "Osmium" # File: opengl/win/w_library.c, Line: 149 msgid "Iridium" msgstr "Iridium" # File: opengl/win/w_library.c, Line: 150 msgid "Platinum" msgstr "Platinum" # File: opengl/win/w_library.c, Line: 151 msgid "Gold" msgstr "Gold" # File: opengl/win/w_library.c, Line: 152 msgid "Mercury" msgstr "Mercury" # File: opengl/win/w_library.c, Line: 153 msgid "Thallium" msgstr "Thallium" # File: opengl/win/w_library.c, Line: 154 msgid "Lead" msgstr "Lead" # File: opengl/win/w_library.c, Line: 155 msgid "Bismuth" msgstr "Bismuth" # File: opengl/win/w_library.c, Line: 156 msgid "Polonium" msgstr "Polonium" # File: opengl/win/w_library.c, Line: 157 msgid "Astatine" msgstr "Astatine" # File: opengl/win/w_library.c, Line: 158 msgid "Radon" msgstr "Radon" # File: opengl/win/w_library.c, Line: 159 msgid "Francium" msgstr "Francium" # File: opengl/win/w_library.c, Line: 160 msgid "Radium" msgstr "Radium" # File: opengl/win/w_library.c, Line: 161 msgid "Actinium" msgstr "Actinium" # File: opengl/win/w_library.c, Line: 162 msgid "Thorium" msgstr "Thorium" # File: opengl/win/w_library.c, Line: 163 msgid "Protactinium" msgstr "Protactinium" # File: opengl/win/w_library.c, Line: 164 msgid "Uranium" msgstr "Uranium" # File: opengl/win/w_library.c, Line: 165 msgid "Neptunium" msgstr "Neptunium" # File: opengl/win/w_library.c, Line: 166 msgid "Plutonium" msgstr "Plutonium" # File: opengl/win/w_library.c, Line: 167 msgid "Americium" msgstr "Americium" # File: opengl/win/w_library.c, Line: 168 msgid "Curium" msgstr "Curium" # File: opengl/win/w_library.c, Line: 169 msgid "Berkelium" msgstr "Berkelium" # File: opengl/win/w_library.c, Line: 170 msgid "Californium" msgstr "Californium" # File: opengl/win/w_library.c, Line: 171 msgid "Einsteinium" msgstr "Einsteinium" # File: opengl/win/w_library.c, Line: 172 msgid "Fermium" msgstr "Fermium" # File: opengl/win/w_library.c, Line: 173 msgid "Mendelevium" msgstr "Mendelevium" # File: opengl/win/w_library.c, Line: 174 msgid "Nobelium" msgstr "Nobelium" # File: opengl/win/w_library.c, Line: 175 msgid "Lawrencium" msgstr "Lawrencium" # File: opengl/win/w_library.c, Line: 176 msgid "Rutherfordium" msgstr "Rutherfordium" # File: opengl/win/w_library.c, Line: 177 msgid "Dubnium" msgstr "Dubnium" # File: opengl/win/w_library.c, Line: 178 msgid "Seaborgium" msgstr "Seaborgium" # File: opengl/win/w_library.c, Line: 179 msgid "Bohrium" msgstr "Bohrium" # File: opengl/win/w_library.c, Line: 180 msgid "Hassium" msgstr "Hassium" # File: opengl/win/w_library.c, Line: 181 msgid "Meitnerium" msgstr "Meitnerium" # File: opengl/win/w_library.c, Line: 182 msgid "Darmstadtium" msgstr "Darmstadtium" # File: opengl/win/w_library.c, Line: 183 msgid "Roentgenium" msgstr "Roentgenium" # File: opengl/win/w_library.c, Line: 184 msgid "Copernicium" msgstr "Copernicium" # File: opengl/win/w_library.c, Line: 185 msgid "Nihonium" msgstr "Nihonium" # File: opengl/win/w_library.c, Line: 186 msgid "Flerovium" msgstr "Flerovium" # File: opengl/win/w_library.c, Line: 187 msgid "Moscovium" msgstr "Moscovium" # File: opengl/win/w_library.c, Line: 188 msgid "Livermorium" msgstr "Livermorium" # File: opengl/win/w_library.c, Line: 189 msgid "Tennessine" msgstr "Tennessine" # File: opengl/win/w_library.c, Line: 190 msgid "Oganesson" msgstr "Oganesson" # File: opengl/win/w_library.c, Line: 191 msgid "Deuterium" msgstr "Deuterium" # File: opengl/win/w_library.c, Line: 203 msgid "Other ..." msgstr "Other ..." # File: opengl/win/w_library.c, Line: 204,1129 msgid "Library" msgstr "Library" # File: opengl/win/w_library.c, Line: 207 msgid "Toluene" msgstr "Toluene" # File: opengl/win/w_library.c, Line: 210 msgid "Ni-Phthalocyanine" msgstr "Ni-Phthalocyanine" # File: opengl/win/w_library.c, Line: 211 msgid "More ..." msgstr "More ..." # File: opengl/win/w_library.c, Line: 215 msgid "Misc" msgstr "Misc" # File: opengl/win/w_library.c, Line: 216 msgid "Alcohols" msgstr "Alcohols" # File: opengl/win/w_library.c, Line: 217 msgid "Aldehydes" msgstr "Aldehydes" # File: opengl/win/w_library.c, Line: 218 msgid "Alkanes" msgstr "Alkanes" # File: opengl/win/w_library.c, Line: 219 msgid "Alkenes" msgstr "Alkenes" # File: opengl/win/w_library.c, Line: 220 msgid "Alkynes" msgstr "Alkynes" # File: opengl/win/w_library.c, Line: 221 msgid "Amides" msgstr "Amides" # File: opengl/win/w_library.c, Line: 222 msgid "Amines" msgstr "Amines" # File: opengl/win/w_library.c, Line: 223 msgid "Amino acids" msgstr "Amino acids" # File: opengl/win/w_library.c, Line: 224 msgid "Aromatics" msgstr "Aromatics" # File: opengl/win/w_library.c, Line: 225 msgid "Carboxylic acids" msgstr "Carboxylic acids" # File: opengl/win/w_library.c, Line: 226 msgid "Cyclic alkanes" msgstr "Cyclic alkanes" # File: opengl/win/w_library.c, Line: 227 msgid "Cyclic alkenes" msgstr "Cyclic alkenes" # File: opengl/win/w_library.c, Line: 228 msgid "Ethers" msgstr "Ethers" # File: opengl/win/w_library.c, Line: 229 msgid "Fatty acids" msgstr "Fatty acids" # File: opengl/win/w_library.c, Line: 230 msgid "Fullerenes" msgstr "Fullerenes" # File: opengl/win/w_library.c, Line: 231 msgid "Heterocyclics" msgstr "Heterocyclics" # File: opengl/win/w_library.c, Line: 232 msgid "Macrocycles" msgstr "Macrocycles" # File: opengl/win/w_library.c, Line: 233 msgid "Ketones" msgstr "Ketones" # File: opengl/win/w_library.c, Line: 234 msgid "Nitriles" msgstr "Nitriles" # File: opengl/win/w_library.c, Line: 235 msgid "Nucleobases" msgstr "Nucleobases" # File: opengl/win/w_library.c, Line: 236 msgid "Steroids" msgstr "Steroids" # File: opengl/win/w_library.c, Line: 237 msgid "Sugars (Linears)" msgstr "Sugars (Linears)" # File: opengl/win/w_library.c, Line: 238 msgid "Sugars (Cyclics)" msgstr "Sugars (Cyclics)" # File: opengl/win/w_library.c, Line: 239 msgid "Sulfoxides" msgstr "Sulfoxides" # File: opengl/win/w_library.c, Line: 240 msgid "Thiols" msgstr "Thiols" # File: opengl/win/w_library.c, Line: 884 msgid "Molecular mass:" msgstr "Molecular mass:" # File: opengl/win/w_library.c, Line: 895 msgid "IUPAC name:" msgstr "IUPAC name:" # File: opengl/win/w_library.c, Line: 905 msgid "Other name(s):" msgstr "Other name(s):" # File: opengl/win/w_library.c, Line: 1146 msgid "Family" msgstr "Family" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 1" msgstr "Atom 1" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 2" msgstr "Atom 2" # File: opengl/win/w_measures.c, Line: 491 msgid "Distance [Ã…]" msgstr "Distance [Ã…]" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Using PBC" msgstr "Using PBC" # File: opengl/win/w_measures.c, Line: 492,493 msgid "Atom 3" msgstr "Atom 3" # File: opengl/win/w_measures.c, Line: 493 msgid "Atom 4" msgstr "Atom 4" # File: opengl/win/w_measures.c, Line: 626 msgid "\tAtom(s) in selection* :\t%d" msgstr "\tAtom(s) in selection* :\t%d" # File: opengl/win/w_measures.c, Line: 630 msgid "\tSorry too many [%d] atoms in selection*" msgstr "\tSorry too many [%d] atoms in selection*" # File: opengl/win/w_measures.c, Line: 675 msgid "%s - measures - style" msgstr "%s - measures - style" # File: opengl/win/w_measures.c, Line: 740 # File: workspace/workspace.c, Line: 405 msgid "%s - measures" msgstr "%s - measures" # File: calc/dl_poly/dlp_field.c, Line: 427 # File: opengl/win/w_measures.c, Line: 751 msgid "Distances" msgstr "Distances" # File: calc/dl_poly/dlp_field.c, Line: 566 # File: opengl/win/w_measures.c, Line: 753 msgid "Dihedrals" msgstr "Dihedrals" # File: opengl/win/w_measures.c, Line: 755 msgid "You can select up to %d atoms for both inter-atomic distance(s) and angle(s)," msgstr "You can select up to %d atoms for both inter-atomic distance(s) and angle(s)," # File: opengl/win/w_measures.c, Line: 758 msgid "and up to %d atoms for dihedral angle(s) measurement(s)" msgstr "and up to %d atoms for dihedral angle(s) measurement(s)" # File: opengl/win/w_measures.c, Line: 762 msgid "Font and style" msgstr "Font and style" # File: opengl/win/w_periodic.c, Line: 90 msgid "Electronic structure: [%s]" msgstr "Electronic structure: [%s]" # File: opengl/win/w_periodic.c, Line: 93 msgid "Electronic structure:\t [%s]" msgstr "Electronic structure:\t [%s]" # File: opengl/win/w_periodic.c, Line: 97 msgid "Electronic structure:\t " msgstr "Electronic structure:\t " # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkali metal" msgstr " Alkali metal" # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkaline earth metal" msgstr " Alkaline earth metal" # File: opengl/win/w_periodic.c, Line: 651 msgid " Lanthanide" msgstr " Lanthanide" # File: opengl/win/w_periodic.c, Line: 651 msgid " Actinide" msgstr " Actinide" # File: opengl/win/w_periodic.c, Line: 652 msgid " Transition metal" msgstr " Transition metal" # File: opengl/win/w_periodic.c, Line: 652 msgid " Post-transition metal" msgstr " Post-transition metal" # File: opengl/win/w_periodic.c, Line: 652 msgid " Metalloid" msgstr " Metalloid" # File: opengl/win/w_periodic.c, Line: 652 msgid " Polyatomic non-metal" msgstr " Polyatomic non-metal" # File: opengl/win/w_periodic.c, Line: 653 msgid " Diatomic non-metal" msgstr " Diatomic non-metal" # File: opengl/win/w_periodic.c, Line: 653 msgid " Noble gas" msgstr " Noble gas" # File: opengl/win/w_periodic.c, Line: 653 msgid " Unknown" msgstr " Unknown" # File: opengl/win/w_periodic.c, Line: 678 msgid "Element selection from the periodic table" msgstr "Element selection from the periodic table" # File: opengl/win/w_periodic.c, Line: 694 msgid "Periodic table of the elements" msgstr "Periodic table of the elements" # File: opengl/win/w_record.c, Line: 158 msgid "%s - record" msgstr "%s - record" # File: opengl/win/w_record.c, Line: 164 msgid "Record" msgstr "Record" # File: opengl/win/w_rings.c, Line: 951 msgid "Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n" msgstr "Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n" # File: opengl/win/w_rings.c, Line: 61 msgid "all" msgstr "all" # File: opengl/win/w_rings.c, Line: 61 msgid "King" msgstr "King" # File: opengl/win/w_rings.c, Line: 61 msgid "Guttman" msgstr "Guttman" # File: opengl/win/w_rings.c, Line: 61 msgid "primtive" msgstr "primtive" # File: opengl/win/w_rings.c, Line: 61 msgid "strong" msgstr "strong" # File: opengl/win/w_rings.c, Line: 413 msgid "Poly." msgstr "Poly." # File: opengl/win/w_rings.c, Line: 954 msgid "Ring size:" msgstr "Ring size:" # File: opengl/win/w_rings.c, Line: 954 msgid "Ring Id.:" msgstr "Ring Id.:" # File: opengl/win/w_rings.c, Line: 1035 msgid "# This file contains the list of all rings in the %s model\n\n" msgstr "# This file contains the list of all rings in the %s model\n\n" # File: opengl/win/w_rings.c, Line: 1039 msgid "# This file contains the list of all %s rings in the %s model\n\n" msgstr "# This file contains the list of all %s rings in the %s model\n\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\n\tRing(s) of size %d atoms\n" msgstr "\n\tRing(s) of size %d atoms\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\nRing(s) of size %d atoms\n" msgstr "\nRing(s) of size %d atoms\n" # File: opengl/win/w_rings.c, Line: 1094 msgid "Save atoms in %s rings to file" msgstr "Save atoms in %s rings to file" # File: opengl/win/w_search.c, Line: 4192 msgid "\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:" msgstr "\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:" # File: opengl/win/w_search.c, Line: 4196 msgid "The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:" msgstr "The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:" # File: opengl/win/w_search.c, Line: 4216 msgid "The search must be performed using species and/or Id.\n" "Use the filters above to define the object(s) of the search" msgstr "The search must be performed using species and/or Id..\n" "Use the filters above to define the object(s) of the search" # File: opengl/win/w_search.c, Line: 268,386,417,677,1180,3184 msgid "MSDmax= %f" msgstr "MSDmax= %f" # File: opengl/win/w_search.c, Line: 272,390,424,681,1193,3188,3212 msgid "Set MSDmax for ..." msgstr "Set MSDmax for ..." # File: opengl/win/w_search.c, Line: 286,413,1184,3203 msgid "For all: MSDmax= %f" msgstr "For all: MSDmax= %f" # File: opengl/win/w_search.c, Line: 290,428,1197,1584,1643,3216 msgid "Set MSDmax for all ..." msgstr "Set MSDmax for all ..." # File: opengl/win/w_search.c, Line: 651 msgid "%s + neighbor(s)" msgstr "%s + neighbor(s)" # File: calc/dl_poly/dlp_ff_match.c, Line: 556,613 # File: opengl/win/w_search.c, Line: 706,1166,2548,2589,2624 msgid "Select ..." msgstr "Select ..." # File: opengl/win/w_search.c, Line: 999 msgid "All %s(s)" msgstr "All %s(s)" # File: opengl/win/w_search.c, Line: 1040 msgid "Fragments" msgstr "Fragments" # File: opengl/win/w_search.c, Line: 1053,1081,1157,2542,2570 msgid "For all: %s" msgstr "For all: %s" # File: opengl/win/w_search.c, Line: 1059,1087,1170,1580,2548,2583 msgid "Select for all ..." msgstr "Select for all ..." # File: opengl/win/w_search.c, Line: 2431,2680 msgid "Copied data" msgstr "Copied data" # File: opengl/win/w_search.c, Line: 2832,3273 msgid "MSDmax must be > 0.0 !" msgstr "MSDmax must be > 0.0 !" # File: opengl/win/w_search.c, Line: 2903 msgid "total coordination(s)" msgstr "total coordination(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "partial coordination(s)" msgstr "partial coordination(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "in fragment" msgstr "in fragment" # File: opengl/win/w_search.c, Line: 2903 msgid "in molecule" msgstr "in molecule" # File: opengl/win/w_search.c, Line: 2910 msgid "%s %s randomly" msgstr "%s %s randomly" # File: opengl/win/w_search.c, Line: 2916,3346 msgid "Maximum Mean Square Displacement" msgstr "Maximum Mean Square Displacement" # File: opengl/win/w_search.c, Line: 2923 msgid "Site occupancy for %s" msgstr "Site occupancy for %s" # File: opengl/win/w_search.c, Line: 2927 msgid "Insert %s at" msgstr "Insert %s at" # File: opengl/win/w_search.c, Line: 2945 msgid "Occupancy= " msgstr "Occupancy= " # File: opengl/win/w_search.c, Line: 2976 msgid "MSDmax for %s%d + neighbors = " msgstr "MSDmax for %s%d + neighbors = " # File: opengl/win/w_search.c, Line: 2980 msgid "MSDmax for %s%d = " msgstr "MSDmax for %s%d = " # File: opengl/win/w_search.c, Line: 2989 msgid "MSDmax for all %s atom(s) = " msgstr "MSDmax for all %s atom(s) = " # File: opengl/win/w_search.c, Line: 2994 msgid "MSDmax for all isolated atom(s) = " msgstr "MSDmax for all isolated atom(s) = " # File: opengl/win/w_search.c, Line: 2998 msgid "MSDmax for all %d-fold atom(s) + neighbors = " msgstr "MSDmax for all %d-fold atom(s) + neighbors = " # File: opengl/win/w_search.c, Line: 3002 msgid "MSDmax for all %d-fold atom(s) = " msgstr "MSDmax for all %d-fold atom(s) = " # File: opengl/win/w_search.c, Line: 3018 msgid "MSDmax for all %s + neighbors = " msgstr "MSDmax for all %s + neighbors = " # File: opengl/win/w_search.c, Line: 3022 msgid "MSDmax for all %s = " msgstr "MSDmax for all %s = " # File: opengl/win/w_search.c, Line: 3028 msgid "MSDmax for fragment N°%d = " msgstr "MSDmax for fragment N°%d = " # File: opengl/win/w_search.c, Line: 3032 msgid "MSDmax for the atom(s) in fragment N°%d = " msgstr "MSDmax for the atom(s) in fragment N°%d = " # File: opengl/win/w_search.c, Line: 3038 msgid "MSDmax for molecule N°%d = " msgstr "MSDmax for molecule N°%d = " # File: opengl/win/w_search.c, Line: 3042 msgid "MSDmax for the atom(s) in molecule N°%d = " msgstr "MSDmax for the atom(s) in molecule N°%d = " # File: opengl/win/w_search.c, Line: 3084 msgid "isolated" msgstr "isolated" # File: opengl/win/w_search.c, Line: 3140 msgid "%s randomly n fragment(s) in all fragments, n= " msgstr "%s randomly n fragment(s) in all fragments, n= " # File: opengl/win/w_search.c, Line: 3144 msgid "%s randomly n fragment(s) in molecule N°%d, n= " msgstr "%s randomly n fragment(s) in molecule N°%d, n= " # File: opengl/win/w_search.c, Line: 3148 msgid "%s randomly n %s coordinations, n= " msgstr "%s randomly n %s coordinations, n= " # File: opengl/win/w_search.c, Line: 3155 msgid "%s randomly n %s %s, n= " msgstr "%s randomly n %s %s, n= " # File: opengl/win/w_search.c, Line: 3159 msgid "%s randomly n %s %s N°%d, n= " msgstr "%s randomly n %s %s N°%d, n= " # File: opengl/win/w_search.c, Line: 3167 msgid " with nmax = %d" msgstr " with nmax = %d" # File: opengl/win/w_search.c, Line: 3354 msgid "MSDmax for all objects = " msgstr "MSDmax for all objects = " # File: opengl/win/w_search.c, Line: 3577 msgid "Object" msgstr "Object" # File: opengl/win/w_search.c, Line: 3579 msgid "By" msgstr "By" # File: opengl/win/w_search.c, Line: 3582 msgid "Translate" msgstr "Translate" # File: opengl/win/w_search.c, Line: 3582 msgid "Max. MSD" msgstr "Max. MSD" # File: opengl/win/w_search.c, Line: 3932 msgid "Rotate" msgstr "Rotate" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: opengl/win/w_search.c, Line: 3958 msgid "Number" msgstr "Number" # File: opengl/win/w_search.c, Line: 4000,4142 msgid "Atom(s): All" msgstr "Atom(s): All" # File: opengl/win/w_search.c, Line: 4001,4144 msgid "Group of Atoms: All" msgstr "Group of Atoms: All" # File: opengl/win/w_search.c, Line: 4001,4143 msgid "Group of Atoms" msgstr "Group of Atoms" # File: opengl/win/w_search.c, Line: 4087 msgid "\t Atom species: " msgstr "\t Atom species: " # File: opengl/win/w_search.c, Line: 4093 msgid "\t Atom Id: " msgstr "\t Atom Id: " # File: opengl/win/w_search.c, Line: 4101 msgid "Add" msgstr "Add" # File: opengl/win/w_search.c, Line: 4139 msgid "Search " msgstr "Search " # File: opengl/win/w_search.c, Line: 4147 msgid "Total Coordination" msgstr "Total Coordination" # File: opengl/win/w_search.c, Line: 4147 msgid "Partial Coordination" msgstr "Partial Coordination" # File: opengl/win/w_search.c, Line: 4164 msgid "For " msgstr "For " # File: opengl/win/w_search.c, Line: 4165 msgid "Filter by " msgstr "Filter by " # File: opengl/win/w_search.c, Line: 4166 msgid "Species " msgstr "Species " # File: opengl/win/w_search.c, Line: 4169 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 930 msgid "Atom Id." msgstr "Atom Id." # File: opengl/win/w_search.c, Line: 4205 msgid "All objects" msgstr "All objects" # File: opengl/win/w_search.c, Line: 4206 msgid "Selection " msgstr "Selection " # File: opengl/win/w_sequencer.c, Line: 72 # File: workspace/workspace.c, Line: 401 msgid "%s - player - step %d" msgstr "%s - player - step %d" # File: opengl/win/w_sequencer.c, Line: 263 msgid "Enter a step number" msgstr "Enter a step number" # File: opengl/win/w_sequencer.c, Line: 267 msgid "Step number [%d-%d]: " msgstr "Step number [%d-%d]: " # File: opengl/win/w_sequencer.c, Line: 469 msgid "First" msgstr "First" # File: opengl/win/w_sequencer.c, Line: 472 msgid "Previous" msgstr "Previous" # File: opengl/win/w_sequencer.c, Line: 475 msgid "Next" msgstr "Next" # File: opengl/win/w_sequencer.c, Line: 478 msgid "Last" msgstr "Last" # File: opengl/win/w_sequencer.c, Line: 481 msgid "Go to" msgstr "Go to" # File: opengl/win/w_sequencer.c, Line: 488 msgid "Play" msgstr "Play" # File: opengl/win/w_sequencer.c, Line: 494 msgid "Loop" msgstr "Loop" # File: opengl/win/w_sequencer.c, Line: 497 msgid "Faster" msgstr "Faster" # File: opengl/win/w_sequencer.c, Line: 500 msgid "Slower" msgstr "Slower" # File: opengl/win/w_spiner.c, Line: 181 # File: workspace/workspace.c, Line: 396 msgid "%s - spin" msgstr "%s - spin" # File: opengl/win/w_volumes.c, Line: 716 msgid "Mean volume(s) occupied by the atom(s) for each %s:" msgstr "Mean volume(s) occupied by the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 720 msgid "Volume(s) occupied by the atom(s) for each %s:" msgstr "Volume(s) occupied by the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 742,780,1046,1079 msgid "using %s: " msgstr "using %s: " # File: opengl/win/w_volumes.c, Line: 756 msgid "Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 760 msgid "Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 785,1093 msgid "Compute" msgstr "Compute" # File: opengl/win/w_volumes.c, Line: 913 msgid "Select MD step [1-%d]:" msgstr "Select MD step [1-%d]:" # File: opengl/win/w_volumes.c, Line: 1036 msgid "Volume(s) occupied by all the atom(s):" msgstr "Volume(s) occupied by all the atom(s):" # File: opengl/win/w_volumes.c, Line: 1061 msgid "average by MD step" msgstr "average by MD step" # File: opengl/win/w_volumes.c, Line: 1065 msgid "Smallest rectangle parallepiped volume(s) to englobe all atom(s):" msgstr "Smallest rectangle parallepiped volume(s) to englobe all atom(s):" # File: opengl/win/w_volumes.c, Line: 1067 msgid "Angular precision: " msgstr "Angular precision: " # File: opengl/win/w_volumes.c, Line: 1130 msgid "%s - volumes" msgstr "%s - volumes" # File: opengl/draw/d_measures.c, Line: 96,453 # File: opengl/win/popup.c, Line: 3772 msgid "PBC" msgstr "PBC" # File: opengl/draw/image.c, Line: 166 msgid "An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble" msgstr "An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble" # File: opengl/draw/image.c, Line: 222 # File: opengl/draw/movie.c, Line: 1321 msgid "%s file (*.%s)" msgstr "%s file (*.%s)" # File: opengl/draw/movie.c, Line: 322,340,359 msgid "Error in movie encoding : video frame - error : %s" msgstr "Error in movie encoding : video frame - error : %s" # File: opengl/draw/movie.c, Line: 347 msgid "Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d" msgstr "Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d" # File: opengl/draw/movie.c, Line: 407 msgid "Error in movie encoding : impossible to find codec %s" msgstr "Error in movie encoding : impossible to find codec %s" # File: opengl/draw/movie.c, Line: 412 msgid "Error in movie encoding : impossible to allocate encoding context" msgstr "Error in movie encoding : impossible to allocate encoding context" # File: opengl/draw/movie.c, Line: 469 msgid "Error in movie encoding : impossible to allocate video stream" msgstr "Error in movie encoding : impossible to allocate video stream" # File: opengl/draw/movie.c, Line: 476 msgid "Error in movie encoding : impossible to allocate raw frame buffer" msgstr "Error in movie encoding : impossible to allocate raw frame buffer" # File: opengl/draw/movie.c, Line: 1033 msgid "Error in movie encoding : impossible to allocate AV format context" msgstr "Error in movie encoding : impossible to allocate AV format context" # File: opengl/draw/movie.c, Line: 1040 msgid "Error in movie encoding : impossible to guess container format : change file name" msgstr "Error in movie encoding : impossible to guess container format : change file name" # File: opengl/draw/movie.c, Line: 1049 msgid "Error in movie encoding : impossible to create video stream" msgstr "Error in movie encoding : impossible to create video stream" # File: opengl/draw/movie.c, Line: 1057 msgid "Error in movie encoding : impossible to open codec, error= %s" msgstr "Error in movie encoding : impossible to open codec, error= %s" # File: opengl/draw/movie.c, Line: 1075 msgid "Error in movie encoding : impossible to open video file '%s'" msgstr "Error in movie encoding : impossible to open video file '%s'" # File: opengl/draw/movie.c, Line: 1085 msgid "Error in movie encoding : impossible to write the AV format header" msgstr "Error in movie encoding : impossible to write the AV format header" # File: opengl/draw/movie.c, Line: 1271 msgid "An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble" msgstr "An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble" # File: opengl/draw/movie.c, Line: 1307 msgid "Render Movie" msgstr "Render Movie" # File: opengl/draw/ogl_text.c, Line: 452 msgid "Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s" msgstr "Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s" # File: workspace/modelinfo.c, Line: 118 msgid "\n\tProject file: " msgstr "\n\tProject file: " # File: workspace/modelinfo.c, Line: 124 msgid "\n\tCoordinates file: " msgstr "\n\tCoordinates file: " # File: workspace/modelinfo.c, Line: 126 msgid "\n\tFile type: " msgstr "\n\tFile type: " # File: workspace/modelinfo.c, Line: 130 msgid "\n\nModel properties\n\n\n" msgstr "\n\nModel properties\n\n\n" # File: workspace/modelinfo.c, Line: 133 msgid "\tNumber of MD steps = " msgstr "\tNumber of MD steps = " # File: workspace/modelinfo.c, Line: 138 msgid "\tNumber of atoms = " msgstr "\tNumber of atoms = " # File: workspace/modelinfo.c, Line: 142 msgid "\tNumber of species = " msgstr "\tNumber of species = " # File: workspace/modelinfo.c, Line: 152 msgid "\tAv. lattice parameters:\n\n" msgstr "\tAv. lattice parameters:\n\n" # File: workspace/modelinfo.c, Line: 156 msgid "\tLattice parameters:\n\n" msgstr "\tLattice parameters:\n\n" # File: workspace/modelinfo.c, Line: 185 msgid "\tAv. lattice vectors:\n\n\t\t" msgstr "\tAv. lattice vectors:\n\n\t\t" # File: workspace/modelinfo.c, Line: 189 msgid "\tLattice vectors:\n\n\t\t" msgstr "\tLattice vectors:\n\n\t\t" # File: workspace/modelinfo.c, Line: 224 msgid "\tCrystal information:\n\n" msgstr "\tCrystal information:\n\n" # File: workspace/modelinfo.c, Line: 226 msgid "\t\tSpace group N°: " msgstr "\t\tSpace group N°: " # File: workspace/modelinfo.c, Line: 230 msgid "\t\tSpace group: " msgstr "\t\tSpace group: " # File: workspace/modelinfo.c, Line: 233 msgid "\t\tSpace group setting: " msgstr "\t\tSpace group setting: " # File: workspace/modelinfo.c, Line: 239 msgid "\t\tBravais lattice: " msgstr "\t\tBravais lattice: " # File: workspace/modelinfo.c, Line: 247 msgid "\tAv. volume = " msgstr "\tAv. volume = " # File: workspace/modelinfo.c, Line: 251 msgid "\tVolume = " msgstr "\tVolume = " # File: workspace/modelinfo.c, Line: 260 msgid "\n\tAv. density = " msgstr "\n\tAv. density = " # File: workspace/modelinfo.c, Line: 264 msgid "\n\tDensity = " msgstr "\n\tDensity = " # File: workspace/modelinfo.c, Line: 273 msgid "\n\tAv. number density = " msgstr "\n\tAv. number density = " # File: workspace/modelinfo.c, Line: 277 msgid "\n\tNumber density = " msgstr "\n\tNumber density = " # File: workspace/modelinfo.c, Line: 282 msgid " atoms / Ã…" msgstr " atoms / Ã…" # File: workspace/modelinfo.c, Line: 285 msgid "\n\n\tEmpirical formula:\t" msgstr "\n\n\tEmpirical formula:\t" # File: workspace/modelinfo.c, Line: 299 msgid "\n\n\tAtom\t Number Fraction\tNumber density (atoms / Ã…" msgstr "\n\n\tAtom\t Number Fraction\tNumber density (atoms / Ã…" # File: workspace/modelinfo.c, Line: 305 msgid "\n\n\tAtom\t Number Fraction" msgstr "\n\n\tAtom\t Number Fraction" # File: workspace/workinfo.c, Line: 69 msgid "\n\nWorkspace information\n\n\n" msgstr "\n\nWorkspace information\n\n\n" # File: workspace/workinfo.c, Line: 73 msgid "\tWorkspace file: " msgstr "\tWorkspace file: " # File: workspace/workinfo.c, Line: 79 msgid " project(s) in workspace: " msgstr " project(s) in workspace: " # File: workspace/workinfo.c, Line: 87 msgid "\n\n\tActive project: " msgstr "\n\n\tActive project: " # File: workspace/workspace.c, Line: 89 msgid "Workspace " msgstr "Workspace " # File: workspace/workspace.c, Line: 90 msgid "Settings " msgstr "Settings " # File: workspace/workspace.c, Line: 91 msgid "OpenGL - 3D " msgstr "OpenGL - 3D " # File: workspace/workspace.c, Line: 92 msgid "Visualization " msgstr "Visualization " # File: workspace/workspace.c, Line: 93 msgid "Calc. visualization " msgstr "Calc. visualization " # File: workspace/workspace.c, Line: 94 msgid "Analysis " msgstr "Analysis " # File: workspace/workspace.c, Line: 349 msgid "Please enter a new name for project N°%d" msgstr "Please enter a new name for project N°%d" # File: workspace/workspace.c, Line: 351 msgid "Project name" msgstr "Project name" # File: workspace/workspace.c, Line: 370 msgid "Atom(s) configuration" msgstr "Atom(s) configuration" # File: workspace/workspace.c, Line: 370 msgid "Clone(s) configuration" msgstr "Clone(s) configuration" # File: calc/calc.c, Line: 322 msgid " %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n" msgstr " %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n" # File: calc/calc.c, Line: 108 msgid "Please confirm" msgstr "Please confirm" # File: calc/calc.c, Line: 331 msgid "Enter the selected MD step: " msgstr "Enter the selected MD step: " # File: calc/cp2k/cp2k_init.c, Line: 948 msgid "\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)" msgstr "\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)" # File: calc/cp2k/cp2k_init.c, Line: 950 msgid " Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters." msgstr " Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters." # File: calc/cp2k/cp2k_init.c, Line: 1104 msgid "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: " msgstr "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: " # File: calc/cp2k/cp2k_init.c, Line: 97 # File: calc/cpmd/cpmd_restart.c, Line: 155,174,195 msgid "steps" msgstr "steps" # File: calc/cp2k/cp2k_init.c, Line: 117 msgid "Single Point Energy Calculation" msgstr "Single Point Energy Calculation" # File: calc/cp2k/cp2k_init.c, Line: 118 msgid "Single Point Energy and Forces Calculation" msgstr "Single Point Energy and Forces Calculation" # File: calc/cp2k/cp2k_init.c, Line: 119 # File: calc/cpmd/cpmd_init.c, Line: 193 msgid "Geometry Optimization" msgstr "Geometry Optimization" # File: calc/cp2k/cp2k_init.c, Line: 120 # File: calc/cpmd/cpmd_init.c, Line: 197 msgid "Vibrational Analysis" msgstr "Vibrational Analysis" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Linear Response Calculation" msgstr "Linear Response Calculation" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Ehrenfest Dynamics" msgstr "Ehrenfest Dynamics" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Low" msgstr "Low" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Medium" msgstr "Medium" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "High" msgstr "High" # File: calc/cp2k/cp2k_init.c, Line: 122 msgid "Gaussian and Plane Waves Method" msgstr "Gaussian and Plane Waves Method" # File: calc/cp2k/cp2k_init.c, Line: 123 msgid "Gaussian and Augmented Plane Waves Method" msgstr "Gaussian and Augmented Plane Waves Method" # File: calc/cp2k/cp2k_init.c, Line: 124 msgid "Gaussian and Augmented Plane Waves Method Only for XC" msgstr "Gaussian and Augmented Plane Waves Method Only for XC" # File: calc/cp2k/cp2k_init.c, Line: 125 msgid "Generate an Atomic Density Using the Atomic Code" msgstr "Generate an Atomic Density Using the Atomic Code" # File: calc/cp2k/cp2k_init.c, Line: 126 msgid "Diagonalize the Core Hamiltonian" msgstr "Diagonalize the Core Hamiltonian" # File: calc/cp2k/cp2k_init.c, Line: 127 msgid "Use Random Wave-function Coefficients" msgstr "Use Random Wave-function Coefficients" # File: calc/cp2k/cp2k_init.c, Line: 128 msgid "Use the RESTART File" msgstr "Use the RESTART File" # File: calc/cp2k/cp2k_init.c, Line: 129 msgid "Broyden Mixing Approximating the Inverse Hessian" msgstr "Broyden Mixing Approximating the Inverse Hessian" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Conjugate Gradients" msgstr "Conjugate Gradients" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Direct Inversion in the Iterative Subspace" msgstr "Direct Inversion in the Iterative Subspace" # File: calc/cp2k/cp2k_init.c, Line: 131 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke Three-parameters Hybrid + LYP" msgstr "Becke Three-parameters Hybrid + LYP" # File: calc/cp2k/cp2k_init.c, Line: 131 msgid "Bayesian Error Estimation + van der Walls" msgstr "Bayesian Error Estimation + van der Walls" # File: calc/cp2k/cp2k_init.c, Line: 132 # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Local Density Approximation" msgstr "Local Density Approximation" # File: calc/cp2k/cp2k_init.c, Line: 133 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Parameter-free PBE" msgstr "Parameter-free PBE" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "3 Dimensional (XYZ)" msgstr "3 Dimensional (XYZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XY)" msgstr "2 Dimensional (XY)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XZ)" msgstr "2 Dimensional (XZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (YZ)" msgstr "2 Dimensional (YZ)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (X)" msgstr "1 Dimensional (X)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Y)" msgstr "1 Dimensional (Y)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Z)" msgstr "1 Dimensional (Z)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "Isolated System" msgstr "Isolated System" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Lattice Vectors" msgstr "Lattice Vectors" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Box Parameters (a,b,c and α,β,γ)" msgstr "Box Parameters (a,b,c and α,β,γ)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Cubic (a = b = c, α = β = γ = 90°)" msgstr "Cubic (a = b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)" msgstr "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)" msgstr "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Rhombohedral (a = b = c, α = β = γ ≠ 90°)" msgstr "Rhombohedral (a = b = c, α = β = γ ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = b ≠ c, α = β = γ = 90°)" msgstr "Tetragonal (a = b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = c ≠ b, α = β = γ = 90°)" msgstr "Tetragonal (a = c ≠ b, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a ≠ b = c, α = β = γ = 90°)" msgstr "Tetragonal (a ≠ b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" msgstr "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" msgstr "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "No Cell Symmetry" msgstr "No Cell Symmetry" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant kinetic energy" msgstr "Constant kinetic energy" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Langevin dynamics (constant temperature)" msgstr "Langevin dynamics (constant temperature)" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant pressure ensemble (no thermostat)" msgstr "Constant pressure ensemble (no thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant pressure ensemble using an isotropic cell (no thermostat)" msgstr "Constant pressure ensemble using an isotropic cell (no thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant temperature and pressure using a flexible cell" msgstr "Constant temperature and pressure using a flexible cell" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and pressure using an isotropic cell" msgstr "Constant temperature and pressure using an isotropic cell" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant energy (µ-canonical)" msgstr "Constant energy (µ-canonical)" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and volume (canonical)" msgstr "Constant temperature and volume (canonical)" # File: calc/cp2k/cp2k_init.c, Line: 144 msgid "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)" msgstr "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Diagonalization of a full Hessian matrix" msgstr "Diagonalization of a full Hessian matrix" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Conjugate gradients" msgstr "Conjugate gradients" # File: calc/cp2k/cp2k_init.c, Line: 147 msgid "Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional" msgstr "Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional" # File: calc/cp2k/cp2k_init.c, Line: 148 msgid "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional" msgstr "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional" # File: calc/cp2k/cp2k_init.c, Line: 149 msgid "Revised Vydrov-van Voorhis non-local van der Waals density functional" msgstr "Revised Vydrov-van Voorhis non-local van der Waals density functional" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D2 method" msgstr "Grimme D2 method" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (zero damping)" msgstr "Grimme D3 method (zero damping)" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (Becke-Johnson damping)" msgstr "Grimme D3 method (Becke-Johnson damping)" # File: calc/cp2k/cp2k_init.c, Line: 153 msgid "Run type:" msgstr "Run type:" # File: calc/cp2k/cp2k_init.c, Line: 154 msgid "Max CPU time:" msgstr "Max CPU time:" # File: calc/cp2k/cp2k_init.c, Line: 155 msgid "Print level:" msgstr "Print level:" # File: calc/cp2k/cp2k_init.c, Line: 156 msgid "Use restart information:" msgstr "Use restart information:" # File: calc/cp2k/cp2k_init.c, Line: 157 msgid "File that contains the restart information:" msgstr "File that contains the restart information:" # File: calc/cp2k/cp2k_init.c, Line: 158 msgid "File that contains the basis set(s):" msgstr "File that contains the basis set(s):" # File: calc/cp2k/cp2k_init.c, Line: 159 msgid "File that contains the pseudo-potential(s):" msgstr "File that contains the pseudo-potential(s):" # File: calc/cp2k/cp2k_init.c, Line: 160 msgid "File that contains the wave-function:" msgstr "File that contains the wave-function:" # File: calc/cp2k/cp2k_init.c, Line: 161 # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Charge:" msgstr "Charge:" # File: calc/cp2k/cp2k_init.c, Line: 162 msgid "Density cutoff for the finest grid level:" msgstr "Density cutoff for the finest grid level:" # File: calc/cp2k/cp2k_init.c, Line: 163 msgid "Number of multi-grids:" msgstr "Number of multi-grids:" # File: calc/cp2k/cp2k_init.c, Line: 164 msgid "Quickstep method:" msgstr "Quickstep method:" # File: calc/cp2k/cp2k_init.c, Line: 165 msgid "Initial guess for the wave-function:" msgstr "Initial guess for the wave-function:" # File: calc/cp2k/cp2k_init.c, Line: 166 msgid "Maximum inner-SCF cycle(s):" msgstr "Maximum inner-SCF cycle(s):" # File: calc/cp2k/cp2k_init.c, Line: 167,169 msgid "Convergence threshold:" msgstr "Convergence threshold:" # File: calc/cp2k/cp2k_init.c, Line: 168 msgid "Maximum outer-SCF cycle(s):" msgstr "Maximum outer-SCF cycle(s):" # File: calc/cp2k/cp2k_init.c, Line: 170 msgid "Orbital transformation minimizer:" msgstr "Orbital transformation minimizer:" # File: calc/cp2k/cp2k_init.c, Line: 171 # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "DFT functional:" msgstr "DFT functional:" # File: calc/cp2k/cp2k_init.c, Line: 172 msgid "Spin unrestricted calculation" msgstr "Spin unrestricted calculation" # File: calc/cp2k/cp2k_init.c, Line: 174 msgid "Use van der Waals interactions" msgstr "Use van der Waals interactions" # File: calc/cp2k/cp2k_init.c, Line: 175 msgid "Restricted Open Kohn-Sham 'ROKS'" msgstr "Restricted Open Kohn-Sham 'ROKS'" # File: calc/cp2k/cp2k_init.c, Line: 176 # File: calc/cpmd/cpmd_restart.c, Line: 200 msgid "Forces" msgstr "Forces" # File: calc/cp2k/cp2k_init.c, Line: 177 msgid "Stress tensor" msgstr "Stress tensor" # File: calc/cp2k/cp2k_init.c, Line: 178 msgid "Mulliken population" msgstr "Mulliken population" # File: calc/cp2k/cp2k_init.c, Line: 179 msgid "Löwdin population" msgstr "Löwdin population" # File: calc/cp2k/cp2k_init.c, Line: 180 msgid "Orbitals" msgstr "Orbitals" # File: calc/cp2k/cp2k_init.c, Line: 181 msgid "Periodicity:" msgstr "Periodicity:" # File: calc/cp2k/cp2k_init.c, Line: 183 # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Symmetry:" msgstr "Symmetry:" # File: calc/cp2k/cp2k_init.c, Line: 184 # File: calc/dl_poly/dlp_control.c, Line: 531 msgid "Ensemble:" msgstr "Ensemble:" # File: calc/cp2k/cp2k_init.c, Line: 185 msgid "Maximum number of MD steps:" msgstr "Maximum number of MD steps:" # File: calc/cp2k/cp2k_init.c, Line: 186 msgid "MD time step:" msgstr "MD time step:" # File: calc/cp2k/cp2k_init.c, Line: 187 # File: calc/cpmd/cpmd_nose.c, Line: 625 msgid "Initial temperature:" msgstr "Initial temperature:" # File: calc/cp2k/cp2k_init.c, Line: 188 msgid "Geometry optimizer:" msgstr "Geometry optimizer:" # File: calc/cp2k/cp2k_init.c, Line: 189 msgid "Maximum number of optimization steps:" msgstr "Maximum number of optimization steps:" # File: calc/cp2k/cp2k_init.c, Line: 190 msgid "Atomic forces convergence criterion:" msgstr "Atomic forces convergence criterion:" # File: calc/cp2k/cp2k_init.c, Line: 191 msgid "Save information every:" msgstr "Save information every:" # File: calc/cp2k/cp2k_init.c, Line: 192 msgid "Add constraint(s)" msgstr "Add constraint(s)" # File: calc/cp2k/cp2k_init.c, Line: 194,1156 msgid "The CP2K input structure" msgstr "The CP2K input structure" # File: calc/cp2k/cp2k_init.c, Line: 195 # File: calc/cpmd/cpmd_init.c, Line: 114 msgid "provides the general control parameters for the calculation to be performed" msgstr "provides the general control parameters for the calculation to be performed" # File: calc/cp2k/cp2k_init.c, Line: 196 msgid "describes how the interatomic forces will be evaluated" msgstr "describes how the interatomic forces will be evaluated" # File: calc/cp2k/cp2k_init.c, Line: 197 msgid "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates" msgstr "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates" # File: calc/cp2k/cp2k_init.c, Line: 198 msgid "describes the displacement of the atoms for molecular dynamics and geometry optimization" msgstr "describes the displacement of the atoms for molecular dynamics and geometry optimization" # File: calc/cp2k/cp2k_init.c, Line: 199 msgid "To describe the thermostat(s) for molecular dynamics" msgstr "To describe the thermostat(s) for molecular dynamics" # File: calc/cp2k/cp2k_init.c, Line: 200 msgid "To describe the parameters required for restart" msgstr "To describe the parameters required for restart" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Type of potential:" msgstr "Type of potential:" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Cutoff:" msgstr "Cutoff:" # File: calc/cp2k/cp2k_init.c, Line: 386 msgid "Apply long range corrections" msgstr "Apply long range corrections" # File: calc/cp2k/cp2k_init.c, Line: 483 msgid "Non-local potential" msgstr "Non-local potential" # File: calc/cp2k/cp2k_init.c, Line: 484 msgid "Pair potential" msgstr "Pair potential" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Energy scaling:" msgstr "Energy scaling:" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Spin configuration *:" msgstr "Spin configuration *:" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of HOMO levels (-1 for all):" msgstr "Number of HOMO levels (-1 for all):" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of LUMO levels (-1 for all):" msgstr "Number of LUMO levels (-1 for all):" # File: calc/cp2k/cp2k_init.c, Line: 473 msgid "%s - options" msgstr "%s - options" # File: calc/cp2k/cp2k_init.c, Line: 487 msgid "Type of functional for the van der Waals interactions" msgstr "Type of functional for the van der Waals interactions" # File: calc/cp2k/cp2k_init.c, Line: 516 msgid "* for the singly occupied orbitals" msgstr "* for the singly occupied orbitals" # File: calc/cp2k/cp2k_init.c, Line: 528 msgid "Write cube files, if not then only print eigenvalues" msgstr "Write cube files, if not then only print eigenvalues" # File: calc/cp2k/cp2k_init.c, Line: 674 msgid "- Select and use set of parameters from the database: " msgstr "- Select and use set of parameters from the database: " # File: calc/cp2k/cp2k_init.c, Line: 675 msgid "- Define and use other set of parameters: " msgstr "- Define and use other set of parameters: " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable basis set for " msgstr "\t\tAvailable basis set for " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable pseudo-potential for " msgstr "\t\tAvailable pseudo-potential for " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tBasis set for " msgstr "\t\tBasis set for " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tPseudo-potential for " msgstr "\t\tPseudo-potential for " # File: calc/cp2k/cp2k_init.c, Line: 844 msgid "Print:" msgstr "Print:" # File: calc/cp2k/cp2k_init.c, Line: 941 msgid " %s provides official CP2K atomic basis sets and pseudo-potentials, are included:" msgstr " %s provides official CP2K atomic basis sets and pseudo-potentials, are included:" # File: calc/cp2k/cp2k_init.c, Line: 952 msgid "\t\t\t\tChemical species" msgstr "\t\t\t\tChemical species" # File: calc/cp2k/cp2k_init.c, Line: 979 # File: calc/cpmd/cpmd_init.c, Line: 936 msgid "Details of the %s section that %s" msgstr "Details of the %s section that %s" # File: calc/cp2k/cp2k_init.c, Line: 1033 msgid "CP2K main input file '*.inp'" msgstr "CP2K main input file '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1046 msgid "CP2K input file '*.inp'" msgstr "CP2K input file '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1055 msgid "! Information" msgstr "! Information" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Single input file" msgstr "Single input file" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Multiple files" msgstr "Multiple files" # File: calc/cp2k/cp2k_init.c, Line: 1160 # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section" msgstr "The %s section" # File: calc/cp2k/cp2k_init.c, Line: 1164 msgid "The MOTION section - thermostat(s)" msgstr "The MOTION section - thermostat(s)" # File: calc/cp2k/cp2k_init.c, Line: 1168 msgid "The MOTION section - restart(s)" msgstr "The MOTION section - restart(s)" # File: calc/cp2k/cp2k_init.c, Line: 1228 msgid " Finalize the creation of the CP2K input files now !" msgstr " Finalize the creation of the CP2K input files now !" # File: calc/cp2k/cp2k_init.c, Line: 1231 # File: calc/cpmd/cpmd_init.c, Line: 1697 # File: calc/dl_poly/dlp_field.c, Line: 4447 msgid "\n \tNote: You can re-open this assistant later if required to adjust your choices\n" msgstr "\n \tNote: You can re-open this assistant later if required to adjust your choices\n" # File: calc/cp2k/cp2k_init.c, Line: 1233 msgid "Create the input files now !" msgstr "Create the input files now !" # File: calc/cp2k/cp2k_mol.c, Line: 147 msgid "Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !" msgstr "Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !" # File: calc/cp2k/cp2k_mol.c, Line: 180 # File: calc/dl_poly/dlp_mol.c, Line: 330 msgid "Fragments N°%d" msgstr "Fragments N°%d" # File: calc/cp2k/cp2k_mol.c, Line: 188 # File: calc/dl_poly/dlp_mol.c, Line: 338 msgid "%s and %d have been selected !" msgstr "%s and %d have been selected !" # File: calc/cp2k/cp2k_mol.c, Line: 189 msgid "%s\nConfirm this choice and fix these fragments ?" msgstr "%s\nConfirm this choice and fix these fragments ?" # File: calc/cp2k/cp2k_mol.c, Line: 193 # File: calc/dl_poly/dlp_mol.c, Line: 343 msgid "Fragment N°%d has been selected !" msgstr "Fragment N°%d has been selected !" # File: calc/cp2k/cp2k_mol.c, Line: 194 msgid "%s\nConfirm this choice and fix this fragment ?" msgstr "%s\nConfirm this choice and fix this fragment ?" # File: calc/cp2k/cp2k_mol.c, Line: 248 msgid "Please select the fragment(s) to fix" msgstr "Please select the fragment(s) to fix" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 msgid "Viz.3D & Select" msgstr "Viz.3D & Select" # File: calc/cp2k/cp2k_print.c, Line: 130 msgid "!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME " msgstr "!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 138 msgid "\n" "! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF " msgstr "\n" "! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF " # File: calc/cp2k/cp2k_print.c, Line: 142 msgid " ! => Cutoff of the finest grid level\n" " NGRIDS " msgstr " ! => Cutoff of the finest grid level\n" " NGRIDS " # File: calc/cp2k/cp2k_print.c, Line: 145 msgid " ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD " msgstr " ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD " # File: calc/cp2k/cp2k_print.c, Line: 152 msgid "\n" " EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n" msgstr "\n" " EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n" # File: calc/cp2k/cp2k_print.c, Line: 153 msgid " EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n" msgstr " EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n" # File: calc/cp2k/cp2k_print.c, Line: 155 msgid "! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS " msgstr "! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS " # File: calc/cp2k/cp2k_print.c, Line: 160 msgid " ! => Initial guess for the wave-function\n" " MAX_SCF " msgstr " ! => Initial guess for the wave-function\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 162 msgid " ! => Maximum number of SCF cycles\n" " EPS_SCF " msgstr " ! => Maximum number of SCF cycles\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 165 msgid " ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF " msgstr " ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 171 msgid " ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF " msgstr " ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 175 msgid " ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n" "\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER " msgstr " ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n" "\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER " # File: calc/cp2k/cp2k_print.c, Line: 184 msgid "\n" " PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n" "\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n" msgstr "\n" " PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n" "\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n" # File: calc/cp2k/cp2k_print.c, Line: 198 msgid " &END PRINT\n" "\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL FUNCTIONAL\n" " &END XC_FUNCTIONAL\n" msgstr " &END PRINT\n" "\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL FUNCTIONAL\n" " &END XC_FUNCTIONAL\n" # File: calc/cp2k/cp2k_print.c, Line: 204 msgid "! Spin polarized calculation\n" " UKS " msgstr "! Spin polarized calculation\n" " UKS " # File: calc/cp2k/cp2k_print.c, Line: 313 msgid "!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC " msgstr "!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC " # File: calc/cp2k/cp2k_print.c, Line: 324 msgid "\n" " &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME " msgstr "\n" " &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 345 msgid " ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " msgstr " ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " # File: calc/cp2k/cp2k_print.c, Line: 561 msgid "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n" msgstr "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n" # File: calc/cp2k/cp2k_print.c, Line: 710 msgid "! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" msgstr "! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" # File: calc/cp2k/cp2k_print.c, Line: 210 msgid " EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n" # File: calc/cp2k/cp2k_print.c, Line: 211 msgid " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n" # File: calc/cp2k/cp2k_print.c, Line: 213 msgid " ! => Write restart file every ${OUT_STEPS} SCF steps\n" msgstr " ! => Write restart file every ${OUT_STEPS} SCF steps\n" # File: calc/cp2k/cp2k_print.c, Line: 214 msgid " ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n" msgstr " ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n" # File: calc/cp2k/cp2k_print.c, Line: 215 msgid " ! => Write restart file every ${OUT_STEPS} MD steps\n" msgstr " ! => Write restart file every ${OUT_STEPS} MD steps\n" # File: calc/cp2k/cp2k_print.c, Line: 484 msgid "\n! Thermostat N°%d" msgstr "\n! Thermostat N°%d" # File: calc/cp2k/cp2k_print.c, Line: 652 msgid "\t%d\n# This file was prepared using %s" msgstr "\t%d\n# This file was prepared using %s" # File: calc/cp2k/cp2k_print.c, Line: 744 msgid "! This file contains the restart information:" msgstr "! This file contains the restart information:" # File: calc/cp2k/cp2k_print.c, Line: 745 msgid "! This file contains the basis set(s):" msgstr "! This file contains the basis set(s):" # File: calc/cp2k/cp2k_print.c, Line: 746 msgid "! This file contains the pseudo-potential(s):" msgstr "! This file contains the pseudo-potential(s):" # File: calc/cp2k/cp2k_print.c, Line: 747 msgid "! This file contains the wave-function:" msgstr "! This file contains the wave-function:" # File: calc/cp2k/cp2k_print.c, Line: 748 msgid "! This file contains the atomic coordinates in XYZ format:" msgstr "! This file contains the atomic coordinates in XYZ format:" # File: calc/cp2k/cp2k_print.c, Line: 856 msgid "\t\t! A file is required !" msgstr "\t\t! A file is required !" # File: calc/cp2k/cp2k_print.c, Line: 986 msgid "\t\t! A keyword is required !" msgstr "\t\t! A keyword is required !" # File: calc/cp2k/cp2k_print.c, Line: 1025 msgid "! The mandatory FORCE_EVAL section include file\n" msgstr "! The mandatory FORCE_EVAL section include file\n" # File: calc/cp2k/cp2k_print.c, Line: 1034 msgid "! The mandatory MOTION section include file\n" msgstr "! The mandatory MOTION section include file\n" # File: calc/cp2k/cp2k_print.c, Line: 190 msgid " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" msgstr " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" # File: calc/cp2k/cp2k_print.c, Line: 1181 msgid "! The mandatory SUBSYS section include file\n" msgstr "! The mandatory SUBSYS section include file\n" # File: calc/cpmd/cpmd_atoms.c, Line: 152 msgid "Configuration for dummy atom N°%d: " msgstr "Configuration for dummy atom N°%d: " # File: calc/cpmd/cpmd_atoms.c, Line: 157 msgid "Type of dummy atom:" msgstr "Type of dummy atom:" # File: calc/cpmd/cpmd_atoms.c, Line: 159 msgid "fixed in space:" msgstr "fixed in space:" # File: calc/cpmd/cpmd_atoms.c, Line: 160 msgid "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)" msgstr "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 161 msgid "calculated by\nthe center of mass of the coordinates of the selected atom(s)" msgstr "calculated by\nthe center of mass of the coordinates of the selected atom(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 171 msgid "The coordinates of the dummy atom are %s" msgstr "The coordinates of the dummy atom are %s" # File: calc/cpmd/cpmd_atoms.c, Line: 187 msgid "Dummy %s coordinate: " msgstr "Dummy %s coordinate: " # File: calc/cpmd/cpmd_atoms.c, Line: 419 msgid "You must select %d dummy atom(s) to be deleted !" msgstr "You must select %d dummy atom(s) to be deleted !" # File: calc/cpmd/cpmd_atoms.c, Line: 443 msgid "Select the %d dummy atom(s) to be removed" msgstr "Select the %d dummy atom(s) to be removed" # File: calc/cpmd/cpmd_atoms.c, Line: 556 msgid "Do you really want to add %d dummy atom(s) ?" msgstr "Do you really want to add %d dummy atom(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 557 msgid "Adding dummy atom(s) ?" msgstr "Adding dummy atom(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 584 msgid "Number of dummy atom(s):" msgstr "Number of dummy atom(s):" # File: calc/cpmd/cpmd_atoms.c, Line: 588 msgid "Dummy atom to configure: " msgstr "Dummy atom to configure: " # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure constraint(s)" msgstr "Add and configure constraint(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure dummy atoms" msgstr "Add and configure dummy atoms" # File: calc/cpmd/cpmd_init.c, Line: 749 msgid "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n" "\t\t < 0 for wavefunction" msgstr "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n" "\t\t < 0 for wavefunction" # File: calc/cpmd/cpmd_init.c, Line: 1491 msgid "The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." # File: calc/cpmd/cpmd_init.c, Line: 1499 msgid "The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." # File: calc/cpmd/cpmd_init.c, Line: 1494 msgid "The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." # File: calc/cpmd/cpmd_init.c, Line: 1618 msgid " Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d" msgstr " Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d" # File: calc/cpmd/cpmd_init.c, Line: 1690 msgid "\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\n" "Please note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n" "\n" "In any case if you intent to use the %s code please refer to the user manual." msgstr "\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\n" "Please note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n" "\n" "In any case if you intent to use the %s code please refer to the user manual." # File: calc/cpmd/cpmd_init.c, Line: 113 msgid "provides an informal description of the system and the calculation to be performed" msgstr "provides an informal description of the system and the calculation to be performed" # File: calc/cpmd/cpmd_init.c, Line: 115 msgid "provides the exchange and correlation functional (DFT) parameters" msgstr "provides the exchange and correlation functional (DFT) parameters" # File: calc/cpmd/cpmd_init.c, Line: 116 msgid "describes the implementation of the van der Waals interactions" msgstr "describes the implementation of the van der Waals interactions" # File: calc/cpmd/cpmd_init.c, Line: 117 msgid "provides details about the physical properties to be calculated" msgstr "provides details about the physical properties to be calculated" # File: calc/cpmd/cpmd_init.c, Line: 118 msgid "describes the symmetry and periodicity of the system" msgstr "describes the symmetry and periodicity of the system" # File: calc/cpmd/cpmd_init.c, Line: 119 msgid "describes the atomic species, pseudo-potentials and coordinates" msgstr "describes the atomic species, pseudo-potentials and coordinates" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Fictitious electronic mass:" msgstr "Fictitious electronic mass:" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Local Spin Density" msgstr "Local Spin Density" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "van der Walls interactions" msgstr "van der Walls interactions" # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "Density cutoff*:" msgstr "Density cutoff*:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Use Angströms (default a.u.)" msgstr "Use Angströms (default a.u.)" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Lattice:" msgstr "Lattice:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Parameters:" msgstr "Parameters:" # File: calc/cpmd/cpmd_init.c, Line: 127 # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Angles:" msgstr "Angles:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Cutoff for the plane wave basis:" msgstr "Cutoff for the plane wave basis:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use constraints" msgstr "Use constraints" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Freeze:" msgstr "Freeze:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use dummy atoms:" msgstr "Use dummy atoms:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Atom type:" msgstr "Atom type:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Maximum angular momentum l:" msgstr "Maximum angular momentum l:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Local angular momentum l:" msgstr "Local angular momentum l:" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Slater Exchange Only" msgstr "Slater Exchange Only" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Extended B88+PW91+LYP88" msgstr "Extended B88+PW91+LYP88" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "PBE Revised for Solids" msgstr "PBE Revised for Solids" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Revised - PBE" msgstr "Revised - PBE" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Optimized Becke 88" msgstr "Optimized Becke 88" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke One-parameter Hybrid + LYP" msgstr "Becke One-parameter Hybrid + LYP" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Extended Hybrid + LYP" msgstr "Extended Hybrid + LYP" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Face Centered Cubic (FCC)" msgstr "Face Centered Cubic (FCC)" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Body Centered Cubic (BCC)" msgstr "Body Centered Cubic (BCC)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Body Centered Tetragonal (BCT)" msgstr "Body Centered Tetragonal (BCT)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Orthorombic" msgstr "Orthorombic" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Default (a, b/a, c/a)" msgstr "Default (a, b/a, c/a)" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Absolute (a, b, c)" msgstr "Absolute (a, b, c)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Default (cos α, cos β, cos γ)" msgstr "Default (cos α, cos β, cos γ)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Degrees (α, β, γ)" msgstr "Degrees (α, β, γ)" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Atoms" msgstr "Some Atoms" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Coordinates" msgstr "Some Coordinates" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Convergence criteria*:" msgstr "Convergence criteria*:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Optimizer:" msgstr "Optimizer:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Max steps:" msgstr "Max steps:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Integration step:" msgstr "Integration step:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Max MD steps: " msgstr "Max MD steps: " # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Time step:" msgstr "Time step:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Barostat:" msgstr "Barostat:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Ions" msgstr "Ions" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Factor:" msgstr "Factor:" # File: calc/cpmd/cpmd_init.c, Line: 171 msgid "Fictitious electrons" msgstr "Fictitious electrons" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of unoccupied states:" msgstr "Number of unoccupied states:" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "3D visualization*" msgstr "3D visualization*" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of objects**:" msgstr "Number of objects**:" # File: calc/cpmd/cpmd_init.c, Line: 174 msgid "Property to compute:" msgstr "Property to compute:" # File: calc/cpmd/cpmd_init.c, Line: 192 msgid "Wavefunction Optimization" msgstr "Wavefunction Optimization" # File: calc/cpmd/cpmd_init.c, Line: 194 msgid "CPMD Molecular Dynamics" msgstr "CPMD Molecular Dynamics" # File: calc/cpmd/cpmd_init.c, Line: 195 msgid "Born-Oppenheimer Molecular Dynamics" msgstr "Born-Oppenheimer Molecular Dynamics" # File: calc/cpmd/cpmd_init.c, Line: 196 msgid "Kohn-Sham Eigen Values" msgstr "Kohn-Sham Eigen Values" # File: calc/cpmd/cpmd_init.c, Line: 198 msgid "Calculation of Physical Properties" msgstr "Calculation of Physical Properties" # File: calc/cpmd/cpmd_init.c, Line: 202 msgid "Preconditioned Gradient" msgstr "Preconditioned Gradient" # File: calc/cpmd/cpmd_init.c, Line: 202,203 msgid "Direct Inversion of Iterative Subspace" msgstr "Direct Inversion of Iterative Subspace" # File: calc/cpmd/cpmd_init.c, Line: 203 msgid "Quasi-Newton method" msgstr "Quasi-Newton method" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Finite differences of first derivatives" msgstr "Finite differences of first derivatives" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Linear response of ionic displacement" msgstr "Linear response of ionic displacement" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Precalculated Hessian" msgstr "Precalculated Hessian" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Gobal" msgstr "Gobal" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Local" msgstr "Local" # File: calc/cpmd/cpmd_init.c, Line: 215 msgid "Controlled" msgstr "Controlled" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Nosé-Hoover chains" msgstr "Nosé-Hoover chains" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Adaptive Langevin" msgstr "Adaptive Langevin" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Canonical sampling through velocity rescaling" msgstr "Canonical sampling through velocity rescaling" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure constraints" msgstr "Configure constraints" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure dummy atoms" msgstr "Configure dummy atoms" # File: calc/cpmd/cpmd_init.c, Line: 500 msgid "%s atom(s)" msgstr "%s atom(s)" # File: calc/cpmd/cpmd_init.c, Line: 684 msgid "Annealing:" msgstr "Annealing:" # File: calc/cpmd/cpmd_init.c, Line: 772,860 msgid "%s option(s)" msgstr "%s option(s)" # File: calc/cpmd/cpmd_init.c, Line: 853 msgid "Calculation to be performed:" msgstr "Calculation to be performed:" # File: calc/cpmd/cpmd_init.c, Line: 888 msgid "General %s section option(s)" msgstr "General %s section option(s)" # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section - Calculation options" msgstr "The %s section - Calculation options" # File: calc/cpmd/cpmd_init.c, Line: 988 msgid "The %s section - Thermostat options" msgstr "The %s section - Thermostat options" # File: calc/cpmd/cpmd_init.c, Line: 992 msgid "The %s section - RESTART options" msgstr "The %s section - RESTART options" # File: calc/cpmd/cpmd_init.c, Line: 1033 msgid " Finalize the creation of the CPMD input file now !" msgstr " Finalize the creation of the CPMD input file now !" # File: calc/cpmd/cpmd_init.c, Line: 1036 msgid "\n \tNote: You can re-open this assitant later if required to adjust your choices\n" msgstr "\n \tNote: You can re-open this assitant later if required to adjust your choices\n" # File: calc/cpmd/cpmd_init.c, Line: 1038 msgid "Create the input file now !" msgstr "Create the input file now !" # File: calc/cpmd/cpmd_init.c, Line: 1251 msgid "CP2K input file" msgstr "CP2K input file" # File: calc/cpmd/cpmd_init.c, Line: 1242 msgid " input file preview" msgstr " input file preview" # File: calc/cpmd/cpmd_init.c, Line: 1253 msgid " input files preview" msgstr " input files preview" # File: calc/cpmd/cpmd_init.c, Line: 1417 # File: calc/dl_poly/dlp_field.c, Line: 4715 msgid "Error while saving input file: %s\n Error: %s" msgstr "Error while saving input file: %s\n Error: %s" # File: calc/cpmd/cpmd_init.c, Line: 1463 msgid "Error while saving file %s: %s" msgstr "Error while saving file %s: %s" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CPMD input file (*.in)" msgstr "CPMD input file (*.in)" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CP2K input file (*.inp)" msgstr "CP2K input file (*.inp)" # File: calc/cpmd/cpmd_init.c, Line: 1538 # File: calc/dl_poly/dlp_field.c, Line: 4749 msgid "Saving %s input file(s)" msgstr "Saving %s input file(s)" # File: calc/cpmd/cpmd_init.c, Line: 1581 msgid "first-principles" msgstr "first-principles" # File: calc/cpmd/cpmd_init.c, Line: 1681 msgid "Basic %s - %s - calculation assistant" msgstr "Basic %s - %s - calculation assistant" # File: calc/cpmd/cpmd_init.c, Line: 1714 # File: calc/dl_poly/dlp_field.c, Line: 4892 msgid "Preview" msgstr "Preview" # File: calc/cpmd/cpmd_nose.c, Line: 1068 msgid "Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !" msgstr "Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !" # File: calc/cpmd/cpmd_nose.c, Line: 98 msgid "Initial temperature: " msgstr "Initial temperature: " # File: calc/cpmd/cpmd_nose.c, Line: 99,100 msgid "Target temperature: " msgstr "Target temperature: " # File: calc/cpmd/cpmd_nose.c, Line: 99 msgid "Tolerance: " msgstr "Tolerance: " # File: calc/cpmd/cpmd_nose.c, Line: 100 msgid "Target frequency: " msgstr "Target frequency: " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Langevin): " msgstr "Time constant (Langevin): " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Nosë-Hoover): " msgstr "Time constant (Nosë-Hoover): " # File: calc/cpmd/cpmd_nose.c, Line: 104 # File: calc/dl_poly/dlp_edit.c, Line: 2374 msgid "Mass: " msgstr "Mass: " # File: calc/cpmd/cpmd_nose.c, Line: 105,107 msgid "Time constant: " msgstr "Time constant: " # File: calc/cpmd/cpmd_nose.c, Line: 107 # File: calc/dl_poly/dlp_edit.c, Line: 2558,2614 msgid "Length: " msgstr "Length: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Multiple time steps: " msgstr "Multiple time steps: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Yoshida integrator: " msgstr "Yoshida integrator: " # File: calc/cpmd/cpmd_nose.c, Line: 439 msgid "You must select %d thermostat(s) to be deleted !" msgstr "You must select %d thermostat(s) to be deleted !" # File: calc/cpmd/cpmd_nose.c, Line: 463 msgid "Select the %d thermostat(s) to be removed" msgstr "Select the %d thermostat(s) to be removed" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Target T°" msgstr "Target T°" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Frequency" msgstr "Frequency" # File: calc/cpmd/cpmd_nose.c, Line: 625 # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target temperature:" msgstr "Target temperature:" # File: calc/cpmd/cpmd_nose.c, Line: 1045 # File: calc/dl_poly/dlp_atom.c, Line: 308 msgid "%d atoms have been selected !" msgstr "%d atoms have been selected !" # File: calc/cpmd/cpmd_nose.c, Line: 1049 # File: calc/dl_poly/dlp_atom.c, Line: 313 msgid "A single atom has been selected !" msgstr "A single atom has been selected !" # File: calc/cpmd/cpmd_nose.c, Line: 1053 msgid "Not at single atom has been selected !" msgstr "Not at single atom has been selected !" # File: calc/cpmd/cpmd_nose.c, Line: 1055 msgid "%s\nis this correct ?" msgstr "%s\nis this correct ?" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Species" msgstr "Species" # File: calc/cpmd/cpmd_nose.c, Line: 1216,1217 msgid "Id. (*)" msgstr "Id. (*)" # File: calc/cpmd/cpmd_nose.c, Line: 1237 msgid "Select atom(s) to construct dummy N°%d" msgstr "Select atom(s) to construct dummy N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1241 msgid "Select atom(s) to fix" msgstr "Select atom(s) to fix" # File: calc/cpmd/cpmd_nose.c, Line: 1246 msgid "Select atom(s) and coordinate(s) to fix" msgstr "Select atom(s) and coordinate(s) to fix" # File: calc/cpmd/cpmd_nose.c, Line: 1251 msgid "Add atom(s) to thermostat N°%d" msgstr "Add atom(s) to thermostat N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1332 msgid " (*) Order of appearance in the input file" msgstr " (*) Order of appearance in the input file" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All non-thermostated atom(s)" msgstr "All non-thermostated atom(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All atom(s)" msgstr "All atom(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1389,1440 # File: calc/dl_poly/dlp_edit.c, Line: 1682,1698,1714,1728,2414,2436,2531,2586,2644,2777 msgid "Not picked yet !" msgstr "Not picked yet !" # File: calc/cpmd/cpmd_nose.c, Line: 1394,1445 # File: calc/dl_poly/dlp_edit.c, Line: 1605,1719,2396,2591,2649 msgid "%d atom(s)" msgstr "%d atom(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1436 msgid "Atom(s) selection: " msgstr "Atom(s) selection: " # File: calc/cpmd/cpmd_nose.c, Line: 1467 msgid "Configuration for thermostat N°%d: " msgstr "Configuration for thermostat N°%d: " # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Thermostat" msgstr "Thermostat" # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Dummy atom" msgstr "Dummy atom" # File: calc/cpmd/cpmd_nose.c, Line: 1610 msgid "Do you really want to add %d thermostat(s) ?" msgstr "Do you really want to add %d thermostat(s) ?" # File: calc/cpmd/cpmd_nose.c, Line: 1611 msgid "Adding thermostat(s) ?" msgstr "Adding thermostat(s) ?" # File: calc/cpmd/cpmd_nose.c, Line: 1626 msgid "It is not possible to create so many thermostats" msgstr "It is not possible to create so many thermostats" # File: calc/cpmd/cpmd_nose.c, Line: 1632 msgid "All atoms arleady have a thermostat assigned" msgstr "All atoms arleady have a thermostat assigned" # File: calc/cpmd/cpmd_nose.c, Line: 1713 msgid "Number of thermostat(s): " msgstr "Number of thermostat(s): " # File: calc/cpmd/cpmd_nose.c, Line: 1717 msgid "Thermostat to configure: " msgstr "Thermostat to configure: " # File: calc/cpmd/cpmd_nose.c, Line: 1779 msgid "Thermostat type: " msgstr "Thermostat type: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Ionic subsystem thermostat: " msgstr "Ionic subsystem thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Thermostat: " msgstr "Thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1916 msgid "Fictitious electronic subsystem: " msgstr "Fictitious electronic subsystem: " # File: calc/cpmd/cpmd_print.c, Line: 65 msgid " This input file was prepared using %s\n\n" msgstr " This input file was prepared using %s\n\n" # File: calc/cpmd/cpmd_restart.c, Line: 140 msgid "Initialization for the Wavefunction:" msgstr "Initialization for the Wavefunction:" # File: calc/cpmd/cpmd_restart.c, Line: 143 msgid "Random" msgstr "Random" # File: calc/cpmd/cpmd_restart.c, Line: 144 msgid "Atomic Pseudo Wavefunctions" msgstr "Atomic Pseudo Wavefunctions" # File: calc/cpmd/cpmd_restart.c, Line: 145 msgid "Use a RESTART.* File" msgstr "Use a RESTART.* File" # File: calc/cpmd/cpmd_restart.c, Line: 151 msgid "Save the information required for a restart every:" msgstr "Save the information required for a restart every:" # File: calc/cpmd/cpmd_restart.c, Line: 158 msgid "Number of restart file(s): " msgstr "Number of restart file(s): " # File: calc/cpmd/cpmd_restart.c, Line: 165 msgid "Create a trajectory" msgstr "Create a trajectory" # File: calc/cpmd/cpmd_restart.c, Line: 170 msgid "Save the atomic coordinates every: " msgstr "Save the atomic coordinates every: " # File: calc/cpmd/cpmd_restart.c, Line: 175 msgid "Write XYZ format" msgstr "Write XYZ format" # File: calc/cpmd/cpmd_restart.c, Line: 179 msgid "Write atomic forces" msgstr "Write atomic forces" # File: calc/cpmd/cpmd_restart.c, Line: 187 msgid "Print extra data in the global output file" msgstr "Print extra data in the global output file" # File: calc/cpmd/cpmd_restart.c, Line: 191 msgid "Save the extra information every: " msgstr "Save the extra information every: " # File: calc/cpmd/cpmd_restart.c, Line: 196 msgid "Select the information to print:" msgstr "Select the information to print:" # File: calc/dl_poly/dlp_atom.c, Line: 309 msgid "%s\nConfirm this choice and create a new field atom to describe them ?" msgstr "%s\nConfirm this choice and create a new field atom to describe them ?" # File: calc/dl_poly/dlp_atom.c, Line: 314 msgid "%s\nIs this correct, create a new field atom to describe it ?" msgstr "%s\nIs this correct, create a new field atom to describe it ?" # File: calc/dl_poly/dlp_atom.c, Line: 433 msgid "%d atoms selected !\nIs this correct ?" msgstr "%d atoms selected !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 437 msgid "%d atoms selected !\nOnly a single atom is required !" msgstr "%d atoms selected !\nOnly a single atom is required !" # File: calc/dl_poly/dlp_atom.c, Line: 446 msgid "A single atom selected !\nIs this correct ?" msgstr "A single atom selected !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 456 msgid "No atom selected !\nIs this correct ?" msgstr "No atom selected !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 664 msgid "Merging with atom N°%d - %s !\nIs this correct ?" msgstr "Merging with atom N°%d - %s !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 736 msgid "Select the field atom to merge atom \"%s\" with" msgstr "Select the field atom to merge atom \"%s\" with" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_mol.c, Line: 761 msgid "Viz.3D & Merge with" msgstr "Viz.3D & Merge with" # File: calc/dl_poly/dlp_control.c, Line: 117 msgid "Molecular dynamics" msgstr "Molecular dynamics" # File: calc/dl_poly/dlp_control.c, Line: 216 msgid "Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature." msgstr "Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature." # File: calc/dl_poly/dlp_control.c, Line: 1590 msgid "The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]" msgstr "The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]" # File: calc/dl_poly/dlp_control.c, Line: 112 msgid "System information" msgstr "System information" # File: calc/dl_poly/dlp_control.c, Line: 113 msgid "Calculation details" msgstr "Calculation details" # File: calc/dl_poly/dlp_control.c, Line: 114 msgid "Non-bonded interactions" msgstr "Non-bonded interactions" # File: calc/dl_poly/dlp_control.c, Line: 115 msgid "Equilibration" msgstr "Equilibration" # File: calc/dl_poly/dlp_control.c, Line: 116 msgid "Thermodynamics" msgstr "Thermodynamics" # File: calc/dl_poly/dlp_control.c, Line: 118 msgid "Output options" msgstr "Output options" # File: calc/dl_poly/dlp_control.c, Line: 119 msgid "Computational details" msgstr "Computational details" # File: calc/dl_poly/dlp_control.c, Line: 129 msgid "Gentle Stochastic" msgstr "Gentle Stochastic" # File: calc/dl_poly/dlp_control.c, Line: 132 msgid "Two temperature model" msgstr "Two temperature model" # File: calc/dl_poly/dlp_control.c, Line: 133 msgid "Inhomogeneous Langevin" msgstr "Inhomogeneous Langevin" # File: calc/dl_poly/dlp_control.c, Line: 142 msgid "Relaxation speed constant (friction):" msgstr "Relaxation speed constant (friction):" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Relaxation time:" msgstr "Relaxation time:" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Softness [0.0 - 1.0]:" msgstr "Softness [0.0 - 1.0]:" # File: calc/dl_poly/dlp_control.c, Line: 144,145,146,148,149 msgid "Relaxation constant:" msgstr "Relaxation constant:" # File: calc/dl_poly/dlp_control.c, Line: 146 msgid "Langevin friction:" msgstr "Langevin friction:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Shardlow's splitting order:" msgstr "Shardlow's splitting order:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Global drag coefficient:" msgstr "Global drag coefficient:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Enhancement of relaxation constant:" msgstr "Enhancement of relaxation constant:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Cut-off particle velocity for friction enhancement:" msgstr "Cut-off particle velocity for friction enhancement:" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Thermostat relaxation speed constant (friction):" msgstr "Thermostat relaxation speed constant (friction):" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Barostat relaxation speed constant (friction):" msgstr "Barostat relaxation speed constant (friction):" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Thermostat relaxation time:" msgstr "Thermostat relaxation time:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Barostat relaxation time:" msgstr "Barostat relaxation time:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Target surface tension:" msgstr "Target surface tension:" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Area" msgstr "Area" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Tension" msgstr "Tension" # File: calc/dl_poly/dlp_control.c, Line: 412 msgid "Semi-anisotropic constraint" msgstr "Semi-anisotropic constraint" # File: calc/dl_poly/dlp_control.c, Line: 467 msgid "Thermostat:" msgstr "Thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 554 msgid "Use pseudo thermal bath" msgstr "Use pseudo thermal bath" # File: calc/dl_poly/dlp_control.c, Line: 556 msgid "Thermostat type:" msgstr "Thermostat type:" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Langevin + Direct" msgstr "Langevin + Direct" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Direct" msgstr "Direct" # File: calc/dl_poly/dlp_control.c, Line: 565 msgid "Thickness:" msgstr "Thickness:" # File: calc/dl_poly/dlp_control.c, Line: 570 msgid "Target T°:" msgstr "Target T°:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Verlet integrator:" msgstr "Verlet integrator:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Number of steps:" msgstr "Number of steps:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Time step δt:" msgstr "Time step δt:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target pressure:" msgstr "Target pressure:" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake iterations limit:" msgstr "Shake iterations limit:" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake tolerance:" msgstr "Shake tolerance:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle iterations limit:" msgstr "Rattle iterations limit:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle tolerance:" msgstr "Rattle tolerance:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA iterations limit:" msgstr "FIQA iterations limit:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA quaternions tolerance:" msgstr "FIQA quaternions tolerance:" # File: calc/dl_poly/dlp_control.c, Line: 585 msgid "cycle(s)" msgstr "cycle(s)" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum time step:" msgstr "Maximum time step:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum distance allowed:" msgstr "Maximum distance allowed:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Minimum distance allowed:" msgstr "Minimum distance allowed:" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Velocity" msgstr "Velocity" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Leapfrog" msgstr "Leapfrog" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Fixed" msgstr "Fixed" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Variable" msgstr "Variable" # File: calc/dl_poly/dlp_control.c, Line: 635 msgid "Variable time step information" msgstr "Variable time step information" # File: calc/dl_poly/dlp_control.c, Line: 722 msgid "Initiate impact on particle" msgstr "Initiate impact on particle" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Index of the particle to impact: " msgstr "Index of the particle to impact: " # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Time step of impact:" msgstr "Time step of impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Energy of impact:" msgstr "Energy of impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Direction (from center of mass):" msgstr "Direction (from center of mass):" # File: calc/dl_poly/dlp_control.c, Line: 730 msgid "nth step" msgstr "nth step" # File: calc/dl_poly/dlp_control.c, Line: 769 msgid "on %s:" msgstr "on %s:" # File: calc/dl_poly/dlp_control.c, Line: 830 msgid "Time step details" msgstr "Time step details" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Bond constraint(s) dynamics:" msgstr "Bond constraint(s) dynamics:" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Rotational motion of rigid body(ies):" msgstr "Rotational motion of rigid body(ies):" # File: calc/dl_poly/dlp_control.c, Line: 890 msgid "Initiate impact on particle" msgstr "Initiate impact on particle" # File: calc/dl_poly/dlp_control.c, Line: 891 msgid "Impact details" msgstr "Impact details" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Equilibrate for the first:" msgstr "Equilibrate for the first:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Scale temperature:" msgstr "Scale temperature:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Cap forces:" msgstr "Cap forces:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Resample the momenta distribution:" msgstr "Resample the momenta distribution:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Minimize system configuration:" msgstr "Minimize system configuration:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize system configuration from start:" msgstr "Optimize system configuration from start:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Perform zero temperature (10 K) optimization" msgstr "Perform zero temperature (10 K) optimization" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Include equilibration data in statistics" msgstr "Include equilibration data in statistics" # File: calc/dl_poly/dlp_control.c, Line: 904,1112,1302,1359,1400 msgid "Every:" msgstr "Every:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "During:" msgstr "During:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "Minimize:" msgstr "Minimize:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize" msgstr "Optimize" # File: calc/dl_poly/dlp_control.c, Line: 905,1260,1293,1330,1363,1502,2051 msgid "step(s)" msgstr "step(s)" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Force" msgstr "Force" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Energy" msgstr "Energy" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Distance" msgstr "Distance" # File: calc/dl_poly/dlp_control.c, Line: 957 msgid "Minimization parameter must ∈ [ %f - %f ]" msgstr "Minimization parameter must ∈ [ %f - %f ]" # File: calc/dl_poly/dlp_control.c, Line: 1023 msgid "Equilibrate" msgstr "Equilibrate" # File: calc/dl_poly/dlp_control.c, Line: 1107 msgid "Defects:" msgstr "Defects:" # File: calc/dl_poly/dlp_control.c, Line: 1108 msgid "Displacements:" msgstr "Displacements:" # File: calc/dl_poly/dlp_control.c, Line: 1109 msgid "History:" msgstr "History:" # File: calc/dl_poly/dlp_control.c, Line: 1110 msgid "Atom's MSD:" msgstr "Atom's MSD:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "From step:" msgstr "From step:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "Site interstitial cutoff:" msgstr "Site interstitial cutoff:" # File: calc/dl_poly/dlp_control.c, Line: 1113 msgid "Qualifying cutoff:" msgstr "Qualifying cutoff:" # File: calc/dl_poly/dlp_control.c, Line: 1114 msgid "Data level:" msgstr "Data level:" # File: calc/dl_poly/dlp_control.c, Line: 1119 msgid "Radial distribution functions (RDFs):" msgstr "Radial distribution functions (RDFs):" # File: calc/dl_poly/dlp_control.c, Line: 1120 msgid "Velocity autocorrelation functions (VAFs):" msgstr "Velocity autocorrelation functions (VAFs):" # File: calc/dl_poly/dlp_control.c, Line: 1121 msgid "Z density profile:" msgstr "Z density profile:" # File: calc/dl_poly/dlp_control.c, Line: 1289 msgid "Dump restart information every:" msgstr "Dump restart information every:" # File: calc/dl_poly/dlp_control.c, Line: 1298 msgid "Print system data:" msgstr "Print system data:" # File: calc/dl_poly/dlp_control.c, Line: 1299 msgid "Accumulate statistics data:" msgstr "Accumulate statistics data:" # File: calc/dl_poly/dlp_control.c, Line: 1300 msgid "Rolling average stack:" msgstr "Rolling average stack:" # File: calc/dl_poly/dlp_control.c, Line: 1364 msgid "Bin size:" msgstr "Bin size:" # File: calc/dl_poly/dlp_control.c, Line: 1391 msgid "Ignore time-averaging for the VAFs" msgstr "Ignore time-averaging for the VAFs" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "All:" msgstr "All:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Bonds:" msgstr "Bonds:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Dihedrals:" msgstr "Dihedrals:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Inversions:" msgstr "Inversions:" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Num. δ" msgstr "Num. δ" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Cutoff = " msgstr "Cutoff = " # File: calc/dl_poly/dlp_control.c, Line: 1505 msgid "%sr in [0 : r]" msgstr "%sr in [0 : r]" # File: calc/dl_poly/dlp_control.c, Line: 1509 msgid "%s° in [-180 : 180]" msgstr "%s° in [-180 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1513 msgid "%s° in [0 : 180]" msgstr "%s° in [0 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job time:" msgstr "Set job time:" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job closure time:" msgstr "Set job closure time:" # File: calc/dl_poly/dlp_control.c, Line: 1548 msgid "Traditional master I/O" msgstr "Traditional master I/O" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) read interface:" msgstr "General Input/Output (I/O) read interface:" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) write interface:" msgstr "General Input/Output (I/O) write interface:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Reader count:" msgstr "Reader count:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Batch size:" msgstr "Batch size:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Buffer size:" msgstr "Buffer size:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "// error check" msgstr "// error check" # File: calc/dl_poly/dlp_control.c, Line: 1780 msgid "Sorted" msgstr "Sorted" # File: calc/dl_poly/dlp_control.c, Line: 1781 msgid "Unsorted" msgstr "Unsorted" # File: calc/dl_poly/dlp_control.c, Line: 1606 msgid "The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]" msgstr "The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]" # File: calc/dl_poly/dlp_control.c, Line: 1754 msgid "Method:" msgstr "Method:" # File: calc/dl_poly/dlp_control.c, Line: 1770 msgid "Real precision:" msgstr "Real precision:" # File: calc/dl_poly/dlp_control.c, Line: 1778 # File: curve/tab-1.c, Line: 648 msgid "Type:" msgstr "Type:" # File: calc/dl_poly/dlp_control.c, Line: 1825 msgid "Random number generator seeds:" msgstr "Random number generator seeds:" # File: calc/dl_poly/dlp_control.c, Line: 1841 msgid "Limits to 2 the number of processors in z direction for slab simulations" msgstr "Limits to 2 the number of processors in z direction for slab simulations" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Direct Coulomb sum" msgstr "Direct Coulomb sum" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Distance dependent dielectric Coulomb sum" msgstr "Distance dependent dielectric Coulomb sum" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum (auto)" msgstr "Ewald sum (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum" msgstr "Ewald sum" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field electrostatics" msgstr "Reaction field electrostatics" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field with Fennel damping" msgstr "Reaction field with Fennel damping" # File: calc/dl_poly/dlp_control.c, Line: 1851 msgid "Reaction field with Fennel damping (auto)" msgstr "Reaction field with Fennel damping (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum" msgstr "Force-shifted Coulomb sum" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum with Fennel damping" msgstr "Force-shifted Coulomb sum with Fennel damping" # File: calc/dl_poly/dlp_control.c, Line: 1853 msgid "Force-shifted Coulomb sum with Fennel damping (auto)" msgstr "Force-shifted Coulomb sum with Fennel damping (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1877,2181 msgid "Cutoff must be > 0.0 Å" msgstr "Cutoff must be > 0.0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1890 msgid "Padding must be ≥ min(0.05, 0.5%rcut) Å" msgstr "Padding must be ≥ min(0.05, 0.5%rcut) Å" # File: calc/dl_poly/dlp_control.c, Line: 1895 msgid "Padding must be > 0.0 Å" msgstr "Padding must be > 0.0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1917 msgid "Precision must ∈ [10-20 - 0.5]" msgstr "Precision must ∈ [10-20 - 0.5]" # File: calc/dl_poly/dlp_control.c, Line: 1989 msgid "Precision:" msgstr "Precision:" # File: calc/dl_poly/dlp_control.c, Line: 2010 msgid "Ewald convergence parameter:" msgstr "Ewald convergence parameter:" # File: calc/dl_poly/dlp_control.c, Line: 2018 msgid "Maximum k vector index in directions:" msgstr "Maximum k vector index in directions:" # File: calc/dl_poly/dlp_control.c, Line: 2037 msgid "Fennell damping parameter (α):" msgstr "Fennell damping parameter (α):" # File: calc/dl_poly/dlp_control.c, Line: 2047 msgid "Evaluate k-space contribution to the Ewald sum every:" msgstr "Evaluate k-space contribution to the Ewald sum every:" # File: calc/dl_poly/dlp_control.c, Line: 2112 msgid "Evaluate electrostatics interactions" msgstr "Evaluate electrostatics interactions" # File: calc/dl_poly/dlp_control.c, Line: 2120 msgid "Long range interaction cutoff [rcut]:" msgstr "Long range interaction cutoff [rcut]:" # File: calc/dl_poly/dlp_control.c, Line: 2126 msgid "Add padding to rcut:" msgstr "Add padding to rcut:" # File: calc/dl_poly/dlp_control.c, Line: 2135 msgid "Use extended coulombic exclusion" msgstr "Use extended coulombic exclusion" # File: calc/dl_poly/dlp_control.c, Line: 2138 msgid "Evaluation method:" msgstr "Evaluation method:" # File: calc/dl_poly/dlp_control.c, Line: 2157 msgid "Functional" msgstr "Functional" # File: calc/dl_poly/dlp_control.c, Line: 2240 msgid "Evaluate van der Waals interactions" msgstr "Evaluate van der Waals interactions" # File: calc/dl_poly/dlp_control.c, Line: 2249 msgid "Short range interaction cutoff:" msgstr "Short range interaction cutoff:" # File: calc/dl_poly/dlp_control.c, Line: 2257 msgid "Enforce direct calculation of van der Waals interactions" msgstr "Enforce direct calculation of van der Waals interactions" # File: calc/dl_poly/dlp_control.c, Line: 2261 msgid "Apply force-shifting (contributions smoothly fall to zero near rcut)" msgstr "Apply force-shifting (contributions smoothly fall to zero near rcut)" # File: calc/dl_poly/dlp_control.c, Line: 2265 msgid "Apply mixing rule (when needed and if possible generate cross species interactions)" msgstr "Apply mixing rule (when needed and if possible generate cross species interactions)" # File: calc/dl_poly/dlp_control.c, Line: 2272 msgid "Mixing rule:" msgstr "Mixing rule:" # File: calc/dl_poly/dlp_control.c, Line: 2327 msgid "Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials" msgstr "Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials" # File: calc/dl_poly/dlp_control.c, Line: 2332 msgid "Switch the default embedding functions, F, from F(ρ) to F(√ρ)" msgstr "Switch the default embedding functions, F, from F(ρ) to F(√ρ)" # File: calc/dl_poly/dlp_control.c, Line: 2359 msgid "Subcelling threshold density must be ≥ 1.0" msgstr "Subcelling threshold density must be ≥ 1.0" # File: calc/dl_poly/dlp_control.c, Line: 2377 msgid "Relative dielectric constant εr" msgstr "Relative dielectric constant εr" # File: calc/dl_poly/dlp_control.c, Line: 2378 msgid "Allowed local variation of system density:" msgstr "Allowed local variation of system density:" # File: calc/dl_poly/dlp_control.c, Line: 2379 msgid "Ignore the particle indices in CONFIG file" msgstr "Ignore the particle indices in CONFIG file" # File: calc/dl_poly/dlp_control.c, Line: 2380 msgid "Ignore strict checks, hide warnings and assume safe simulation parameters" msgstr "Ignore strict checks, hide warnings and assume safe simulation parameters" # File: calc/dl_poly/dlp_control.c, Line: 2381 msgid "Skip detailed topology reporting during read of FIELD file in output" msgstr "Skip detailed topology reporting during read of FIELD file in output" # File: calc/dl_poly/dlp_control.c, Line: 2382 msgid "Ignore center of mass removal during the calculation" msgstr "Ignore center of mass removal during the calculation" # File: calc/dl_poly/dlp_control.c, Line: 2383 msgid "Set tolerance for relaxed shell model:" msgstr "Set tolerance for relaxed shell model:" # File: calc/dl_poly/dlp_control.c, Line: 2384 msgid "Set the subcelling threshold density of particles per link cell:" msgstr "Set the subcelling threshold density of particles per link cell:" # File: calc/dl_poly/dlp_control.c, Line: 2385 msgid "Create an expanded version of the current model:" msgstr "Create an expanded version of the current model:" # File: calc/dl_poly/dlp_control.c, Line: 2386 msgid "Restart calculation:" msgstr "Restart calculation:" # File: calc/dl_poly/dlp_control.c, Line: 2512 msgid "Continue current simulation" msgstr "Continue current simulation" # File: calc/dl_poly/dlp_control.c, Line: 2513 msgid "Start new simulation from older run without temperature reset" msgstr "Start new simulation from older run without temperature reset" # File: calc/dl_poly/dlp_control.c, Line: 2514 msgid "Start new simulation from older run with temperature reset" msgstr "Start new simulation from older run with temperature reset" # File: calc/dl_poly/dlp_control.c, Line: 2539 msgid "Global options:" msgstr "Global options:" # File: calc/dl_poly/dlp_control.c, Line: 2541 msgid "Restart options:" msgstr "Restart options:" # File: calc/dl_poly/dlp_control.c, Line: 2545 msgid "Intra-molecular probability denisty function (PDF) analysis:" msgstr "Intra-molecular probability denisty function (PDF) analysis:" # File: calc/dl_poly/dlp_control.c, Line: 2547 msgid "Overall analysis:" msgstr "Overall analysis:" # File: calc/dl_poly/dlp_control.c, Line: 2551 msgid "van der Waals (Non-bonded short range):" msgstr "van der Waals (Non-bonded short range):" # File: calc/dl_poly/dlp_control.c, Line: 2553 msgid "Electrostatics (Non-bonded long range):" msgstr "Electrostatics (Non-bonded long range):" # File: calc/dl_poly/dlp_control.c, Line: 2555 msgid "Metallic interactions:" msgstr "Metallic interactions:" # File: calc/dl_poly/dlp_control.c, Line: 2559 msgid "Equilibration:" msgstr "Equilibration:" # File: calc/dl_poly/dlp_control.c, Line: 2563 msgid "Thermodynamics:" msgstr "Thermodynamics:" # File: calc/dl_poly/dlp_control.c, Line: 2567 msgid "Molecular dynamics:" msgstr "Molecular dynamics:" # File: calc/dl_poly/dlp_control.c, Line: 2571 msgid "Output information:" msgstr "Output information:" # File: calc/dl_poly/dlp_control.c, Line: 2573 msgid "Trajectory file(s):" msgstr "Trajectory file(s):" # File: calc/dl_poly/dlp_control.c, Line: 2575 msgid "Restart file:" msgstr "Restart file:" # File: calc/dl_poly/dlp_control.c, Line: 2579 msgid "Job options:" msgstr "Job options:" # File: calc/dl_poly/dlp_control.c, Line: 2581 msgid "I/O options:" msgstr "I/O options:" # File: calc/dl_poly/dlp_control.c, Line: 2583 msgid "Other options:" msgstr "Other options:" # File: calc/dl_poly/dlp_edit.c, Line: 610 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Æ�i/j and r0i/j provided by the force field parameters." msgstr "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Æ�i/j and r0i/j provided by the force field parameters." # File: calc/dl_poly/dlp_edit.c, Line: 619 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ai/j and Bi/j provided by the force field parameters." # File: calc/dl_poly/dlp_edit.c, Line: 686 msgid "Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !" msgstr "Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !" # File: calc/dl_poly/dlp_edit.c, Line: 1589 msgid "The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n" msgstr "The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n" # File: calc/dl_poly/dlp_edit.c, Line: 2807 msgid "* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file." msgstr "* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file." # File: calc/dl_poly/dlp_edit.c, Line: 2836 msgid "* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n" msgstr "* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n" # File: calc/dl_poly/dlp_edit.c, Line: 543 msgid "Single terms:" msgstr "Single terms:" # File: calc/dl_poly/dlp_edit.c, Line: 579 msgid "Cross terms with atom:" msgstr "Cross terms with atom:" # File: calc/dl_poly/dlp_edit.c, Line: 609 # File: calc/dl_poly/dlp_field.c, Line: 1199 msgid "Tabulated" msgstr "Tabulated" # File: calc/dl_poly/dlp_edit.c, Line: 618 msgid "In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options." msgstr "In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options." # File: calc/dl_poly/dlp_edit.c, Line: 634 # File: calc/dl_poly/dlp_ff_match.c, Line: 1038 msgid "%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored." msgstr "%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored." # File: calc/dl_poly/dlp_edit.c, Line: 651 msgid "Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "Urey-Bradley terms provided by the %s force field are ignored.\n" # File: calc/dl_poly/dlp_edit.c, Line: 669 # File: calc/dl_poly/dlp_field.c, Line: 162 msgid "External field" msgstr "External field" # File: calc/dl_poly/dlp_edit.c, Line: 690 msgid "Change Tersoff potential ?!" msgstr "Change Tersoff potential ?!" # File: calc/dl_poly/dlp_edit.c, Line: 1184 msgid "Weight (1)" msgstr "Weight (1)" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field atom" msgstr "Field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field molecule(s)" msgstr "Field molecule(s)" # File: calc/dl_poly/dlp_edit.c, Line: 1198 msgid "Please select the new atom(s)" msgstr "Please select the new atom(s)" # File: calc/dl_poly/dlp_edit.c, Line: 1203 msgid "Please select the atom(s) to freeze / unfreeze" msgstr "Please select the atom(s) to freeze / unfreeze" # File: calc/dl_poly/dlp_edit.c, Line: 1208 msgid "Please select the core atom" msgstr "Please select the core atom" # File: calc/dl_poly/dlp_edit.c, Line: 1213 msgid "Please select the atom(s) to shell" msgstr "Please select the atom(s) to shell" # File: calc/dl_poly/dlp_edit.c, Line: 1218 msgid "Please select the first atom" msgstr "Please select the first atom" # File: calc/dl_poly/dlp_edit.c, Line: 1223 msgid "Please select the second atom" msgstr "Please select the second atom" # File: calc/dl_poly/dlp_edit.c, Line: 1228 msgid "Please select the atom(s) in the first unit" msgstr "Please select the atom(s) in the first unit" # File: calc/dl_poly/dlp_edit.c, Line: 1231 msgid "Please select the atom(s) in the second unit" msgstr "Please select the atom(s) in the second unit" # File: calc/dl_poly/dlp_edit.c, Line: 1234 msgid "Please select the atom(s) in the rigid unit" msgstr "Please select the atom(s) in the rigid unit" # File: calc/dl_poly/dlp_edit.c, Line: 1238 msgid "Please select the tethered atom" msgstr "Please select the tethered atom" # File: calc/dl_poly/dlp_edit.c, Line: 1245 msgid "Please select the type of field atom" msgstr "Please select the type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1249 msgid "Please select the first type of field atom" msgstr "Please select the first type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1253 msgid "Please select the second type of field atom" msgstr "Please select the second type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1256 msgid "Please select the third type of field atom" msgstr "Please select the third type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1259 msgid "Please select the fourth type of field atom" msgstr "Please select the fourth type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1582 msgid " (1) if all 0.0 then atomic weight(s) will be used by DL-POLY" msgstr " (1) if all 0.0 then atomic weight(s) will be used by DL-POLY" # File: calc/dl_poly/dlp_edit.c, Line: 2283 msgid "%s parameter(s)" msgstr "%s parameter(s)" # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Core atom: " msgstr "Core atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Shell atom: " msgstr "Shell atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Selection: " msgstr "Selection: " # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Mass:" msgstr "Mass:" # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "First atom: " msgstr "First atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Second atom: " msgstr "Second atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Third atom: " msgstr "Third atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Fourth atom: " msgstr "Fourth atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "First unit: " msgstr "First unit: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "Second unit: " msgstr "Second unit: " # File: calc/dl_poly/dlp_edit.c, Line: 2307 msgid "\tMolecule: \t%s" msgstr "\tMolecule: \t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2317 msgid "\tAtom: \t\t%s" msgstr "\tAtom: \t\t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2330 msgid "Field parameters:" msgstr "Field parameters:" # File: calc/dl_poly/dlp_edit.c, Line: 2335 # File: calc/dl_poly/dlp_ff_match.c, Line: 1563,1585 msgid "Manual" msgstr "Manual" # File: calc/dl_poly/dlp_edit.c, Line: 2336 msgid "Automatic" msgstr "Automatic" # File: calc/dl_poly/dlp_edit.c, Line: 2343 msgid "Force field type *:" msgstr "Force field type *:" # File: calc/dl_poly/dlp_edit.c, Line: 2365 msgid "Name: " msgstr "Name: " # File: calc/dl_poly/dlp_edit.c, Line: 2383 msgid "Charge: " msgstr "Charge: " # File: calc/dl_poly/dlp_edit.c, Line: 2392 msgid "Frozen: " msgstr "Frozen: " # File: calc/dl_poly/dlp_edit.c, Line: 2404 msgid "\tCore-Shell N°%d" msgstr "\tCore-Shell N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2443 msgid "Selected !" msgstr "Selected !" # File: calc/dl_poly/dlp_edit.c, Line: 2447 msgid "%d atom(s) selected !" msgstr "%d atom(s) selected !" # File: calc/dl_poly/dlp_edit.c, Line: 2467 msgid "Selected Atoms" msgstr "Selected Atoms" # File: calc/dl_poly/dlp_edit.c, Line: 2511 msgid "Use non-bonded: " msgstr "Use non-bonded: " # File: calc/dl_poly/dlp_edit.c, Line: 2521 msgid "\tBond constraint N°%d" msgstr "\tBond constraint N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2547 msgid "Av. distance (1): " msgstr "Av. distance (1): " # File: calc/dl_poly/dlp_edit.c, Line: 2576 msgid "\tMean force potential N°%d" msgstr "\tMean force potential N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2602 msgid "Av. d1-2 (1): " msgstr "Av. d1-2 (1): " # File: calc/dl_poly/dlp_edit.c, Line: 2632 msgid "\tRigid unit N°%d" msgstr "\tRigid unit N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2638 msgid "Atom(s): " msgstr "Atom(s): " # File: calc/dl_poly/dlp_edit.c, Line: 2663 msgid "\tTethered atom N°%d" msgstr "\tTethered atom N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2669 msgid "Atom: " msgstr "Atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2704 msgid "\t%s type N°%d\n\tField atoms: " msgstr "\t%s type N°%d\n\tField atoms: " # File: calc/dl_poly/dlp_edit.c, Line: 2707 msgid "%s and " msgstr "%s and " # File: calc/dl_poly/dlp_edit.c, Line: 2716 msgid "%s\n\tBetween atoms: " msgstr "%s\n\tBetween atoms: " # File: calc/dl_poly/dlp_edit.c, Line: 2768 msgid "Tersoff atom: " msgstr "Tersoff atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2800 msgid "Visualize in the model: " msgstr "Visualize in the model: " # File: calc/dl_poly/dlp_edit.c, Line: 2816 msgid "Use to create force field: " msgstr "Use to create force field: " # File: calc/dl_poly/dlp_edit.c, Line: 2827 # File: calc/dl_poly/dlp_ff_match.c, Line: 1012 # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "DL_POLY internal units" msgstr "DL_POLY internal units" # File: calc/dl_poly/dlp_edit.c, Line: 2828 msgid "Field parameters *:" msgstr "Field parameters *:" # File: calc/dl_poly/dlp_edit.c, Line: 2844 msgid "Potential: " msgstr "Potential: " # File: calc/dl_poly/dlp_edit.c, Line: 2887 msgid " (1) average distance between the 2 atoms\n\tas measured in the 3D model" msgstr " (1) average distance between the 2 atoms\n\tas measured in the 3D model" # File: calc/dl_poly/dlp_edit.c, Line: 2896 msgid " (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model" msgstr " (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model" # File: calc/dl_poly/dlp_edit.c, Line: 3005 msgid "Please enter name for new molecule N°%d" msgstr "Please enter name for new molecule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3007 msgid "Molecule name:" msgstr "Molecule name:" # File: calc/dl_poly/dlp_edit.c, Line: 3017 msgid "Please enter name for molecule N°%d" msgstr "Please enter name for molecule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3308 msgid "Delete %s N°%d from molecule %s, is this correct ?" msgstr "Delete %s N°%d from molecule %s, is this correct ?" # File: calc/dl_poly/dlp_edit.c, Line: 3312 msgid "Delete %s, is this correct ?" msgstr "Delete %s, is this correct ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1014 msgid "\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n" msgstr "\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Property" msgstr "Property" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "parameters (1)" msgstr "parameters (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Actual parameters (1)" msgstr "Actual parameters (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Update ?" msgstr "Update ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1020 msgid "%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 1025 msgid "%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:" msgstr "%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:" # File: calc/dl_poly/dlp_ff_match.c, Line: 1035 msgid "%s\nA and B are calculated using Æ�i/j and r0i/j provided by the force field parameters." msgstr "%s\nA and B are calculated using Æ�i/j and r0i/j provided by the force field parameters." # File: calc/dl_poly/dlp_ff_match.c, Line: 1043 msgid "%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters." # File: calc/dl_poly/dlp_ff_match.c, Line: 1398 msgid "Update FIELD file with %s parameters using \"%s\" atom(s)" msgstr "Update FIELD file with %s parameters using \"%s\" atom(s)" # File: calc/dl_poly/dlp_ff_match.c, Line: 1568 msgid "Atom (1 and 2) %s" msgstr "Atom (1 and 2) %s" # File: calc/dl_poly/dlp_ff_match.c, Line: 1572 msgid "Atom (%d) %s" msgstr "Atom (%d) %s" # File: calc/dl_poly/dlp_field.c, Line: 1077 msgid "\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4" msgstr "\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4" # File: calc/dl_poly/dlp_field.c, Line: 3962 msgid "\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only." msgstr "\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only." # File: calc/dl_poly/dlp_field.c, Line: 4359 msgid "Providing that the force field information was already saved once\n" "the previous data could still be retrieved by canceling the assistant." msgstr "Providing that the force field information was already saved once\n" "the previous data could still be retrieved by canceling the assistant." # File: calc/dl_poly/dlp_field.c, Line: 4818 msgid " This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point" msgstr " This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point" # File: calc/dl_poly/dlp_field.c, Line: 141,164 msgid "Energy unit" msgstr "Energy unit" # File: calc/dl_poly/dlp_field.c, Line: 144 msgid "Core-shell unit(s)" msgstr "Core-shell unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 145 msgid "Constraint bond(s)" msgstr "Constraint bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 146 msgid "Mean force potential(s)" msgstr "Mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 147 msgid "Rigid unit(s)" msgstr "Rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 148 msgid "Tethering potential(s)" msgstr "Tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 149 msgid "Flexible chemical bond(s)" msgstr "Flexible chemical bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 150,932 msgid "Bond restraint(s)" msgstr "Bond restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 151 msgid "Bond angle(s)" msgstr "Bond angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 152 msgid "Angular restraint(s)" msgstr "Angular restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 153 msgid "Dihedral angle(s)" msgstr "Dihedral angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 154,936 msgid "Torsional restraint(s)" msgstr "Torsional restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 155 msgid "Improper angle(s)" msgstr "Improper angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 156 msgid "Inversion angle(s)" msgstr "Inversion angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 157 msgid "van der Waals potential(s)" msgstr "van der Waals potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 158 msgid "Metal potential(s)" msgstr "Metal potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Tersoff Potential(s)" msgstr "Tersoff Potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 160 msgid "Three-body potential(s)" msgstr "Three-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 161 msgid "Four-body potential(s)" msgstr "Four-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 167 msgid "Core-shell unit" msgstr "Core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 168 msgid "Constraint bond" msgstr "Constraint bond" # File: calc/dl_poly/dlp_field.c, Line: 169 msgid "Mean force potential" msgstr "Mean force potential" # File: calc/dl_poly/dlp_field.c, Line: 170 msgid "Rigid unit" msgstr "Rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 171 msgid "Tethering potential" msgstr "Tethering potential" # File: calc/dl_poly/dlp_field.c, Line: 172 msgid "Flexible chemical bond" msgstr "Flexible chemical bond" # File: calc/dl_poly/dlp_field.c, Line: 173,932 msgid "Bond restraint" msgstr "Bond restraint" # File: calc/dl_poly/dlp_field.c, Line: 174 msgid "Bond angle" msgstr "Bond angle" # File: calc/dl_poly/dlp_field.c, Line: 175 msgid "Angular restraint" msgstr "Angular restraint" # File: calc/dl_poly/dlp_field.c, Line: 176 msgid "Dihedral angle" msgstr "Dihedral angle" # File: calc/dl_poly/dlp_field.c, Line: 177,936 msgid "Torsional restraint" msgstr "Torsional restraint" # File: calc/dl_poly/dlp_field.c, Line: 178 msgid "Improper angle" msgstr "Improper angle" # File: calc/dl_poly/dlp_field.c, Line: 179 msgid "Inversion angle" msgstr "Inversion angle" # File: calc/dl_poly/dlp_field.c, Line: 180 msgid "van der Waals potential" msgstr "van der Waals potential" # File: calc/dl_poly/dlp_field.c, Line: 158,181 msgid "Metal potential" msgstr "Metal potential" # File: calc/dl_poly/dlp_field.c, Line: 182 msgid "Tersoff Potential" msgstr "Tersoff Potential" # File: calc/dl_poly/dlp_field.c, Line: 183 msgid "Three-body potential" msgstr "Three-body potential" # File: calc/dl_poly/dlp_field.c, Line: 184 msgid "Four-body potential" msgstr "Four-body potential" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit(s)" msgstr "core-shell unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond(s)" msgstr "constraint bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential(s)" msgstr "mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit(s)" msgstr "rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential(s)" msgstr "tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond(s)" msgstr "flexible chemical bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint(s)" msgstr "bond restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle(s)" msgstr "bond angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint(s)" msgstr "angular restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle(s)" msgstr "dihedral angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint(s)" msgstr "torsional restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle(s)" msgstr "improper angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle(s)" msgstr "inversion angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential(s)" msgstr "metal potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential(s)" msgstr "three-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential(s)" msgstr "four-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field(s)" msgstr "external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit" msgstr "core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond" msgstr "contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential" msgstr "potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit" msgstr "rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential" msgstr "tethering potential" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond" msgstr "flexible chemical bond" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint" msgstr "bond restraint" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle" msgstr "bond angle" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint" msgstr "angular restraint" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle" msgstr "dihedral angle" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint" msgstr "torsional restraint" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle" msgstr "improper angle" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle" msgstr "inversion angle" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential" msgstr "metal potential" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential" msgstr "three-body potential" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential" msgstr "four-body potential" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field" msgstr "external field" # File: calc/dl_poly/dlp_field.c, Line: 231 msgid "of molecule(s)" msgstr "of molecule(s)" # File: calc/dl_poly/dlp_field.c, Line: 232 msgid "of atom(s)" msgstr "of atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 233 msgid "of core-shell unit(s)" msgstr "of core-shell unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 234 msgid "of constraint bond(s)" msgstr "of constraint bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 235 msgid "of mean force potential(s)" msgstr "of mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 236 msgid "of rigid unit(s)" msgstr "of rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 237 msgid "of tethering potential(s)" msgstr "of tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 238 msgid "of flexible chemical bond(s)" msgstr "of flexible chemical bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 239 msgid "of bond restraint(s)" msgstr "of bond restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 240 msgid "of bond angle(s)" msgstr "of bond angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 241 msgid "of angular restraint(s)" msgstr "of angular restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 242 msgid "of dihedral angle(s)" msgstr "of dihedral angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 243 msgid "of torsional restraint(s)" msgstr "of torsional restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 244 msgid "of improper angle(s)" msgstr "of improper angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 245 msgid "of inversion angle(s)" msgstr "of inversion angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 247 msgid "of metal potential(s)" msgstr "of metal potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 249 msgid "of three-body potential(s)" msgstr "of three-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 250 msgid "of four-body potential(s)" msgstr "of four-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 251 msgid "of external field(s)" msgstr "of external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 253 msgid "of the molecule" msgstr "of the molecule" # File: calc/dl_poly/dlp_field.c, Line: 254 msgid "of the atom" msgstr "of the atom" # File: calc/dl_poly/dlp_field.c, Line: 255 msgid "of the core-shell unit" msgstr "of the core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 256 msgid "of the constraint bond" msgstr "of the constraint bond" # File: calc/dl_poly/dlp_field.c, Line: 257 msgid "of the mean force potential" msgstr "of the mean force potential" # File: calc/dl_poly/dlp_field.c, Line: 258 msgid "of the rigid unit" msgstr "of the rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 259 msgid "of the tethering potential" msgstr "of the tethering potential" # File: calc/dl_poly/dlp_field.c, Line: 260 msgid "of the flexible chemical bond" msgstr "of the flexible chemical bond" # File: calc/dl_poly/dlp_field.c, Line: 261 msgid "of the bond restraint" msgstr "of the bond restraint" # File: calc/dl_poly/dlp_field.c, Line: 262 msgid "of the bond angle" msgstr "of the bond angle" # File: calc/dl_poly/dlp_field.c, Line: 263 msgid "of the angular restraint" msgstr "of the angular restraint" # File: calc/dl_poly/dlp_field.c, Line: 264 msgid "of the dihedral angle" msgstr "of the dihedral angle" # File: calc/dl_poly/dlp_field.c, Line: 265 msgid "of the torsional restraint" msgstr "of the torsional restraint" # File: calc/dl_poly/dlp_field.c, Line: 266 msgid "of the improper angle" msgstr "of the improper angle" # File: calc/dl_poly/dlp_field.c, Line: 267 msgid "of the inversion angle" msgstr "of the inversion angle" # File: calc/dl_poly/dlp_field.c, Line: 269 msgid "of the metal potential" msgstr "of the metal potential" # File: calc/dl_poly/dlp_field.c, Line: 271 msgid "of the three-body potential" msgstr "of the three-body potential" # File: calc/dl_poly/dlp_field.c, Line: 272 msgid "of the four-body potential" msgstr "of the four-body potential" # File: calc/dl_poly/dlp_field.c, Line: 273 msgid "of the external field" msgstr "of the external field" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Electron-Volts" msgstr "Electron-Volts" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-calories per mol" msgstr "k-calories per mol" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-Joules per mol" msgstr "k-Joules per mol" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Kelvin per Boltzmann" msgstr "Kelvin per Boltzmann" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Harmonic" msgstr "Harmonic" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Restraint" msgstr "Restraint" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Quartic" msgstr "Quartic" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Shifted FENE" msgstr "Shifted FENE" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "MM3 bond stretch" msgstr "MM3 bond stretch" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Tabulated" msgstr "Tabulated" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated harmonic" msgstr "Truncated harmonic" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened harmonic" msgstr "Screened harmonic" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened Vessal" msgstr "Screened Vessal" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated Vessal" msgstr "Truncated Vessal" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Harmonic cosine" msgstr "Harmonic cosine" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Cosine" msgstr "Cosine" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 stretch-bend" msgstr "MM3 stretch-bend" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-stretch" msgstr "Compass stretch-stretch" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-bend" msgstr "Compass stretch-bend" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass all terms" msgstr "Compass all terms" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 angle bend" msgstr "MM3 angle bend" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Triple cosine" msgstr "Triple cosine" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Fluorinated Ryckaert-Bellemans" msgstr "Fluorinated Ryckaert-Bellemans" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "OPLS torsion" msgstr "OPLS torsion" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Planar" msgstr "Planar" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Extended Planar" msgstr "Extended Planar" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Calcite" msgstr "Calcite" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "LJ cohesive" msgstr "LJ cohesive" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "12-10 H-bond" msgstr "12-10 H-bond" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted force n-m" msgstr "Shifted force n-m" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted Weeks-Chandler-Anderson" msgstr "Shifted Weeks-Chandler-Anderson" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Standard DPD" msgstr "Standard DPD" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "14-7 buffered AMOEBA FF" msgstr "14-7 buffered AMOEBA FF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Morse modified" msgstr "Morse modified" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Morse" msgstr "ZBL mixed with Morse" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Buckingham" msgstr "ZBL mixed with Buckingham" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Lennard-Jones tapered with MDF" msgstr "Lennard-Jones tapered with MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Buckingham tapered with MDF" msgstr "Buckingham tapered with MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "12-6 Lennard-Jones tapered with MDF" msgstr "12-6 Lennard-Jones tapered with MDF" # File: calc/dl_poly/dlp_field.c, Line: 320 msgid "Extended Finis-Sinclair" msgstr "Extended Finis-Sinclair" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "H-bond" msgstr "H-bond" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Electric field" msgstr "Electric field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Oscillating Shear" msgstr "Oscillating Shear" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Continuous Shear" msgstr "Continuous Shear" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Gravitational field" msgstr "Gravitational field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Magnetic field" msgstr "Magnetic field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Containing Sphere" msgstr "Containing Sphere" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Repulsive Wall" msgstr "Repulsive Wall" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "X-Piston" msgstr "X-Piston" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Molecule in HR Zone" msgstr "Molecule in HR Zone" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull out)" msgstr "HR Zone (pull out)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull in)" msgstr "HR Zone (pull in)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Osc. Electric Field" msgstr "Osc. Electric Field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Umbrella sampling, harm. constant" msgstr "Umbrella sampling, harm. constant" # File: calc/dl_poly/dlp_field.c, Line: 291 msgid "electron" msgstr "electron" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "COMPASS class2 force field" msgstr "COMPASS class2 force field" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic (FENE)" msgstr "Finite extensible nonlinear elastic (FENE)" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "FENE with variable size particles" msgstr "FENE with variable size particles" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "GROMOS force field" msgstr "GROMOS force field" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted harmonic" msgstr "Shifted harmonic" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted truncated harmonic" msgstr "Shifted truncated harmonic" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "MM3 anharmonic" msgstr "MM3 anharmonic" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Nonlinear" msgstr "Nonlinear" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic DNA" msgstr "Finite extensible nonlinear elastic DNA" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic DNA (2)" msgstr "Finite extensible nonlinear elastic DNA (2)" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic RNA" msgstr "Finite extensible nonlinear elastic RNA" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Breakable quartic" msgstr "Breakable quartic" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Special bond exclusions for 1-5 pairs and beyond" msgstr "Special bond exclusions for 1-5 pairs and beyond" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "CHARMM force field" msgstr "CHARMM force field" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "COMPASS class2 force field - 6th order" msgstr "COMPASS class2 force field - 6th order" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with Buckingham term between 1-3" msgstr "Cosine with Buckingham term between 1-3" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Difference of cosines" msgstr "Difference of cosines" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "DREIDING force field" msgstr "DREIDING force field" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift" msgstr "Cosine with a shift" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift and exponential term in spring" msgstr "Cosine with a shift and exponential term in spring" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cosine with squared term" msgstr "Cosine with squared term" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cross term coupling angle and bond length" msgstr "Cross term coupling angle and bond length" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Dipole orientation" msgstr "Dipole orientation" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (multiple cosines)" msgstr "Fourier (multiple cosines)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (single cosine)" msgstr "Fourier (single cosine)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Combination of the harmonic (SDK)" msgstr "Combination of the harmonic (SDK)" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "CHARMM force field with force switching" msgstr "CHARMM force field with force switching" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Helix" msgstr "Helix" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Harmonic with 5 terms" msgstr "Harmonic with 5 terms" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Harmonic with N terms" msgstr "Harmonic with N terms" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "OPLS force field" msgstr "OPLS force field" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Quadratic" msgstr "Quadratic" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Spherical" msgstr "Spherical" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Tabulated with analytic cutoff" msgstr "Tabulated with analytic cutoff" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Cosine squared" msgstr "Cosine squared" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "CVFF force field" msgstr "CVFF force field" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Distance between atom planes" msgstr "Distance between atom planes" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Out-of-the plane distance" msgstr "Out-of-the plane distance" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Planar conformation" msgstr "Planar conformation" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Squared distance harmonic" msgstr "Squared distance harmonic" # File: calc/dl_poly/dlp_field.c, Line: 337 msgid "Harmonic with Wilson Decius out-of-plane" msgstr "Harmonic with Wilson Decius out-of-plane" # File: calc/dl_poly/dlp_field.c, Line: 427,499 msgid "Interpolation style" msgstr "Interpolation style" # File: calc/dl_poly/dlp_field.c, Line: 555 msgid "weighting factor" msgstr "weighting factor" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. 3D" msgstr "Viz. 3D" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. Atom num." msgstr "Viz. Atom num." # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Mass" msgstr "Mass" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Charge" msgstr "Charge" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Frozen" msgstr "Frozen" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Core Id" msgstr "Core Id" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Shell" msgstr "Shell" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Use (3)" msgstr "Use (3)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1 Id" msgstr "At.1 Id" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2 Id" msgstr "At.2 Id" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Length [Ã…]" msgstr "Length [Ã…]" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "av. d [Ã…] (1)" msgstr "av. d [Ã…] (1)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Use (2)" msgstr "Use (2)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "av. d12 [Ã…] (1)" msgstr "av. d12 [Ã…] (1)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Unit Id" msgstr "Unit Id" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "At. Id" msgstr "At. Id" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Weight (2)" msgstr "Weight (2)" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Atom(s) in unit" msgstr "Atom(s) in unit" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "List of atom(s)" msgstr "List of atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Use (1)" msgstr "Use (1)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Potential" msgstr "Potential" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1" msgstr "At.1" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2" msgstr "At.2" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "At.3" msgstr "At.3" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "At.4" msgstr "At.4" # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "At.1*" msgstr "At.1*" # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "At.2*" msgstr "At.2*" # File: calc/dl_poly/dlp_field.c, Line: 931 msgid "Potential (3)" msgstr "Potential (3)" # File: calc/dl_poly/dlp_field.c, Line: 348 msgid "Angle(s)" msgstr "Angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "av. θ [°] (1)" msgstr "av. θ [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 350 msgid "Dihedral(s)" msgstr "Dihedral(s)" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "av. Ï• [°] (1)" msgstr "av. Ï• [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 352 msgid "Improper(s)" msgstr "Improper(s)" # File: calc/dl_poly/dlp_field.c, Line: 353 msgid "Inversion(s)" msgstr "Inversion(s)" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.1" msgstr "Spec.1" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.2" msgstr "Spec.2" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "VdW potential" msgstr "VdW potential" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At." msgstr "At." # File: calc/dl_poly/dlp_field.c, Line: 941 msgid "Tersoff Pot." msgstr "Tersoff Pot." # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "Three-body Pot." msgstr "Three-body Pot." # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "Four-body Pot." msgstr "Four-body Pot." # File: calc/dl_poly/dlp_field.c, Line: 944 msgid "Field type" msgstr "Field type" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle" msgstr "Angle" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle restraint" msgstr "Angle restraint" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "Dihedral" msgstr "Dihedral" # File: calc/dl_poly/dlp_field.c, Line: 937 msgid "Improper" msgstr "Improper" # File: calc/dl_poly/dlp_field.c, Line: 938 msgid "Inversion" msgstr "Inversion" # File: calc/dl_poly/dlp_field.c, Line: 1160 msgid "\t (1) Force constant of the core-shell spring in [%s Å-2]" msgstr "\t (1) Force constant of the core-shell spring in [%s Å-2]" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s (%s)" msgstr "Default: %s (%s)" # File: calc/dl_poly/dlp_field.c, Line: 1766 msgid "the %d different fragment(s) in molecule %s\n" msgstr "the %d different fragment(s) in molecule %s\n" # File: calc/dl_poly/dlp_field.c, Line: 1771 msgid "the system\n" msgstr "the system\n" # File: calc/dl_poly/dlp_field.c, Line: 1777 msgid "%seach contains the following %d type(s) of atom" msgstr "%seach contains the following %d type(s) of atom" # File: calc/dl_poly/dlp_field.c, Line: 1782 msgid "%sdo not contains any core-shell unit" msgstr "%sdo not contains any core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 1786 msgid "%seach contains the following %d core-shell unit" msgstr "%seach contains the following %d core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 1792 msgid "%sdo not contains any constraint" msgstr "%sdo not contains any constraint" # File: calc/dl_poly/dlp_field.c, Line: 1796 msgid "%seach contains the following %d constraint(s)" msgstr "%seach contains the following %d constraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 1802 msgid "%sdo not contains any mean force potential" msgstr "%sdo not contains any mean force potential" # File: calc/dl_poly/dlp_field.c, Line: 1806 msgid "%seach contains the following %d type(s) of mean force potential(s)" msgstr "%seach contains the following %d type(s) of mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 1812 msgid "%sdo not contains any rigid unit" msgstr "%sdo not contains any rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 1816 msgid "%seach contains the following %d rigid unit(s)" msgstr "%seach contains the following %d rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 1822 msgid "%sdo not contains any tethering potential(s)" msgstr "%sdo not contains any tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 1826 msgid "%seach contains the following %d tethering potential(s)" msgstr "%seach contains the following %d tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 1832 msgid "the force field do not contains any external field(s)" msgstr "the force field do not contains any external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 1836 msgid "the force field contains the following %d external field(s)" msgstr "the force field contains the following %d external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s *" msgstr "%sdo not contains any %s *" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s *" msgstr "%s contains the following %d type(s) %s *" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s" msgstr "%sdo not contains any %s" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s" msgstr "%s contains the following %d type(s) %s" # File: calc/dl_poly/dlp_field.c, Line: 1871 msgid "the force field do not contains any %s" msgstr "the force field do not contains any %s" # File: calc/dl_poly/dlp_field.c, Line: 1875 msgid "the force field contains the following %d %s" msgstr "the force field contains the following %d %s" # File: calc/dl_poly/dlp_field.c, Line: 2202 msgid "Change energy unit ?" msgstr "Change energy unit ?" # File: calc/dl_poly/dlp_field.c, Line: 2203 msgid "Yes" msgstr "Yes" # File: calc/dl_poly/dlp_field.c, Line: 2206 msgid "Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly." msgstr "Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly." # File: calc/dl_poly/dlp_field.c, Line: 2207 msgid "List of energy related parameters in your FIELD file:\n" msgstr "List of energy related parameters in your FIELD file:\n" # File: calc/dl_poly/dlp_field.c, Line: 2322 msgid "Please select the %s:" msgstr "Please select the %s:" # File: calc/dl_poly/dlp_field.c, Line: 2340 msgid "Please select the component(s) of the force field:" msgstr "Please select the component(s) of the force field:" # File: calc/dl_poly/dlp_field.c, Line: 2343 msgid " Intra-molecular interaction(s):" msgstr " Intra-molecular interaction(s):" # File: calc/dl_poly/dlp_field.c, Line: 2345 msgid "Use multiple molecule(s)" msgstr "Use multiple molecule(s)" # File: calc/dl_poly/dlp_field.c, Line: 2360 msgid "Use %s" msgstr "Use %s" # File: calc/dl_poly/dlp_field.c, Line: 2371 msgid "Non-bonded interaction(s)" msgstr "Non-bonded interaction(s)" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s" msgstr "Default: %s" # File: calc/dl_poly/dlp_field.c, Line: 2564 msgid "Atom N°%d: \"%s\"" msgstr "Atom N°%d: \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2664 msgid "Core-Shell N°%d: Atom %d (%s) - " msgstr "Core-Shell N°%d: Atom %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2669 msgid "Core-Shell N°%d: %s - " msgstr "Core-Shell N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2690 msgid "Constrained Bond N°%d: Atom %d (%s) - " msgstr "Constrained Bond N°%d: Atom %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2695 msgid "Constrained Bond N°%d: %s - " msgstr "Constrained Bond N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2713 msgid "Mean Force Potential N°%d" msgstr "Mean Force Potential N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2721 msgid "Rigid Unit N°%d: %d Atom(s)" msgstr "Rigid Unit N°%d: %d Atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 2729 msgid "Tethering Potential N°%d" msgstr "Tethering Potential N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2767 msgid "%s - NONE" msgstr "%s - NONE" # File: calc/dl_poly/dlp_field.c, Line: 2709 msgid "Edit Name: \"%s\"" msgstr "Edit Name: \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2801 msgid "Edit properties %s" msgstr "Edit properties %s" # File: calc/dl_poly/dlp_field.c, Line: 2817 msgid "Add a new %s" msgstr "Add a new %s" # File: calc/dl_poly/dlp_field.c, Line: 2831 msgid "Remove %s" msgstr "Remove %s" # File: calc/dl_poly/dlp_field.c, Line: 2958 msgid "Add new molecule" msgstr "Add new molecule" # File: calc/dl_poly/dlp_field.c, Line: 2967 msgid "Remove molecule %s from force field" msgstr "Remove molecule %s from force field" # File: calc/dl_poly/dlp_field.c, Line: 2983 msgid "Created new force field atom from %s atom(s)" msgstr "Created new force field atom from %s atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 2998 msgid "Remove atom %s from force field molecule" msgstr "Remove atom %s from force field molecule" # File: calc/dl_poly/dlp_field.c, Line: 3699 msgid "Parameter(s)" msgstr "Parameter(s)" # File: calc/dl_poly/dlp_field.c, Line: 3867 msgid "Please select molecule: " msgstr "Please select molecule: " # File: calc/dl_poly/dlp_field.c, Line: 3898 msgid "Number of isolated molecular fragments: " msgstr "Number of isolated molecular fragments: " # File: calc/dl_poly/dlp_field.c, Line: 3902 msgid "\tEach of these fragments can be described separately in the force field." msgstr "\tEach of these fragments can be described separately in the force field." # File: calc/dl_poly/dlp_field.c, Line: 3905 msgid "Number of distinct molecules: " msgstr "Number of distinct molecules: " # File: calc/dl_poly/dlp_field.c, Line: 3909 msgid "Number of molecules in the force field: " msgstr "Number of molecules in the force field: " # File: calc/dl_poly/dlp_field.c, Line: 3935,3939 msgid "Properties %s: " msgstr "Properties %s: " # File: calc/dl_poly/dlp_field.c, Line: 3969 msgid "\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4." msgstr "\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4." # File: calc/dl_poly/dlp_field.c, Line: 3973 msgid "\t (1) average value for the force field element as measured in the model." msgstr "\t (1) average value for the force field element as measured in the model." # File: calc/dl_poly/dlp_field.c, Line: 3976 msgid "\t (2) only the selected element(s) will be used to create the force field." msgstr "\t (2) only the selected element(s) will be used to create the force field." # File: calc/dl_poly/dlp_field.c, Line: 3979 msgid "\t (3) each force field element can be tuned separately, if not the Default parameters will be used." msgstr "\t (3) each force field element can be tuned separately, if not the Default parameters will be used." # File: calc/dl_poly/dlp_field.c, Line: 3991 msgid "\t (3) only the selected element(s) will be used to create the force field." msgstr "\t (3) only the selected element(s) will be used to create the force field." # File: calc/dl_poly/dlp_field.c, Line: 4006 msgid "\t (1) average distance between the barycenters of units 1 and 2 as measured in the model." msgstr "\t (1) average distance between the barycenters of units 1 and 2 as measured in the model." # File: calc/dl_poly/dlp_field.c, Line: 4009 msgid "\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY." msgstr "\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY." # File: calc/dl_poly/dlp_field.c, Line: 4018 msgid "\t (1) only the selected element(s) will be used to create the force field." msgstr "\t (1) only the selected element(s) will be used to create the force field." # File: calc/dl_poly/dlp_field.c, Line: 4295 msgid "Initialize force field using: " msgstr "Initialize force field using: " # File: calc/dl_poly/dlp_field.c, Line: 4355 msgid "Clean all force field parameter(s) ?" msgstr "Clean all force field parameter(s) ?" # File: calc/dl_poly/dlp_field.c, Line: 4430 msgid "Select the component(s) of the force field" msgstr "Select the component(s) of the force field" # File: calc/dl_poly/dlp_field.c, Line: 4444 msgid " Finalize the creation of the %s input file(s) now !" msgstr " Finalize the creation of the %s input file(s) now !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the LAMMPS input file(s) now !" msgstr "Create the LAMMPS input file(s) now !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the DL-POLY input file(s) now !" msgstr "Create the DL-POLY input file(s) now !" # File: calc/dl_poly/dlp_field.c, Line: 4457 msgid "Atomic Species as Field Atoms" msgstr "Atomic Species as Field Atoms" # File: calc/dl_poly/dlp_field.c, Line: 4458 msgid "Atomic Species and Total Coordinations as Field Atoms" msgstr "Atomic Species and Total Coordinations as Field Atoms" # File: calc/dl_poly/dlp_field.c, Line: 4459 msgid "Atomic Species and Partial Coordinations as Field Atoms" msgstr "Atomic Species and Partial Coordinations as Field Atoms" # File: calc/dl_poly/dlp_field.c, Line: 4499 msgid "Force field was initialized using: " msgstr "Force field was initialized using: " # File: calc/dl_poly/dlp_field.c, Line: 4558 msgid "Please select the force field first !" msgstr "Please select the force field first !" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "LAMMPS files preview" msgstr "LAMMPS files preview" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "DL-POLY files preview" msgstr "DL-POLY files preview" # File: calc/dl_poly/dlp_field.c, Line: 4674 msgid "%s file found in '%s'\nreplace existing %s file ?" msgstr "%s file found in '%s'\nreplace existing %s file ?" # File: calc/dl_poly/dlp_field.c, Line: 4675 msgid "Replace file ?" msgstr "Replace file ?" # File: calc/dl_poly/dlp_field.c, Line: 4812 msgid "%s calculation assistant" msgstr "%s calculation assistant" # File: calc/dl_poly/dlp_field.c, Line: 4822 msgid "Force field: " msgstr "Force field: " # File: calc/dl_poly/dlp_field.c, Line: 4856 msgid "\tDelete the existing force field data and reset the parameters to the default values" msgstr "\tDelete the existing force field data and reset the parameters to the default values" # File: calc/dl_poly/dlp_field.c, Line: 4862 msgid "\tPrepare the CONTROL file to describe the calculation" msgstr "\tPrepare the CONTROL file to describe the calculation" # File: calc/dl_poly/dlp_field.c, Line: 4864 msgid "\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model" msgstr "\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model" # File: calc/dl_poly/dlp_field.c, Line: 4869 msgid "\tPrepare the LAMMPS Input to describe the calculation" msgstr "\tPrepare the LAMMPS Input to describe the calculation" # File: calc/dl_poly/dlp_field.c, Line: 4871 msgid "\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model" msgstr "\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model" # File: calc/dl_poly/dlp_mol.c, Line: 89 msgid "The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." # File: calc/dl_poly/dlp_mol.c, Line: 105 msgid "The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of the selected molecule." msgstr "The description of molecule %s will be deleted\nand merged with the one of the selected molecule." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of molecule %s" msgstr "The description of molecule %s will be deleted\nand merged with the one of molecule %s" # File: calc/dl_poly/dlp_mol.c, Line: 339 msgid "%s\nConfirm this choice and create a new field molecule to describe these fragments ?" msgstr "%s\nConfirm this choice and create a new field molecule to describe these fragments ?" # File: calc/dl_poly/dlp_mol.c, Line: 344 msgid "%s\nConfirm this choice and create a new field molecule to describe this fragment ?" msgstr "%s\nConfirm this choice and create a new field molecule to describe this fragment ?" # File: calc/dl_poly/dlp_mol.c, Line: 470 msgid "Please select the fragment(s) of the new molecule" msgstr "Please select the fragment(s) of the new molecule" # File: calc/dl_poly/dlp_mol.c, Line: 753 msgid "Select the molecule to merge molecule \"%s\" with" msgstr "Select the molecule to merge molecule \"%s\" with" # File: calc/dl_poly/dlp_print.c, Line: 1433 msgid "# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n" msgstr "# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n" # File: calc/dl_poly/dlp_print.c, Line: 1421 msgid "# This file was created using %s\n" msgstr "# This file was created using %s\n" # File: calc/dl_poly/dlp_print.c, Line: 1424 msgid "# %s contains:\n" msgstr "# %s contains:\n" # File: calc/dl_poly/dlp_print.c, Line: 1439 msgid "# Energy unit:\n" msgstr "# Energy unit:\n" # File: calc/dl_poly/dlp_print.c, Line: 1444 msgid "# Number of field molecules:\n" msgstr "# Number of field molecules:\n" # File: calc/dl_poly/dlp_print.c, Line: 1452 msgid "# Begin molecule %d\n" msgstr "# Begin molecule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1456 msgid "# End molecule %d\n" msgstr "# End molecule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "van der Walls pair" msgstr "van der Walls pair" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "metal" msgstr "metal" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "three-body" msgstr "three-body" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "four-body" msgstr "four-body" # File: calc/dl_poly/dlp_print.c, Line: 1478 msgid "# Non-bonded: %s potential(s)\n" msgstr "# Non-bonded: %s potential(s)\n" # File: calc/dl_poly/dlp_print.c, Line: 1596 msgid "# DL-POLY CONFIG file created by %s, %s - %d atoms\n" msgstr "# DL-POLY CONFIG file created by %s, %s - %d atoms\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature in K\n" msgstr "# Target temperature in K\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps\n" msgstr "# Number of MD steps\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Integration time step in ps\n" msgstr "# Integration time step in ps\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target presssure in k atms\n" msgstr "# Target presssure in k atms\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature" msgstr "# Target temperature" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps" msgstr "# Number of MD steps" # File: calc/dl_poly/dlp_print.c, Line: 1675 msgid "# MD time step d(t)" msgstr "# MD time step d(t)" # File: calc/dl_poly/dlp_print.c, Line: 1711 msgid "\n# Ignore particle indices from CONFIG file and set indices by order of reading" msgstr "\n# Ignore particle indices from CONFIG file and set indices by order of reading" # File: calc/dl_poly/dlp_print.c, Line: 1712 msgid "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters" msgstr "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters" # File: calc/dl_poly/dlp_print.c, Line: 1713 msgid "\n# Skip detailed topology reporting when reading FIELD file" msgstr "\n# Skip detailed topology reporting when reading FIELD file" # File: calc/dl_poly/dlp_print.c, Line: 1714 msgid "\n# Ignore center of mass momentum removal during the simulation" msgstr "\n# Ignore center of mass momentum removal during the simulation" # File: calc/dl_poly/dlp_print.c, Line: 1715 msgid "\n# Tolerance for the relaxed shell model\n" msgstr "\n# Tolerance for the relaxed shell model\n" # File: calc/dl_poly/dlp_print.c, Line: 1716 msgid "\n# Subcelling threshold density of particle per link cell\n" msgstr "\n# Subcelling threshold density of particle per link cell\n" # File: calc/dl_poly/dlp_print.c, Line: 1717 msgid "\n# Create an expanded version of the current model\n" msgstr "\n# Create an expanded version of the current model\n" # File: calc/dl_poly/dlp_print.c, Line: 1718 msgid "\n# Restart job from previous run: " msgstr "\n# Restart job from previous run: " # File: calc/dl_poly/dlp_print.c, Line: 1721 msgid "\n# Continue current simulation - require REVOLD file" msgstr "\n# Continue current simulation - require REVOLD file" # File: calc/dl_poly/dlp_print.c, Line: 1722 msgid "\n# Start new simulation from older run without temperature reset" msgstr "\n# Start new simulation from older run without temperature reset" # File: calc/dl_poly/dlp_print.c, Line: 1723 msgid "\n# Start new simulation from older run with temperature reset" msgstr "\n# Start new simulation from older run with temperature reset" # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job time to " msgstr "\n\n# Set job time to " # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job closure time to " msgstr "\n\n# Set job closure time to " # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O read interface, with:\n" msgstr "\n# I/O read interface, with:\n" # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O write interface, with:\n" msgstr "\n# I/O write interface, with:\n" # File: calc/dl_poly/dlp_print.c, Line: 1918 msgid "# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n" msgstr "# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n" # File: calc/dl_poly/dlp_print.c, Line: 1928 msgid "# Relative dielectric constant = " msgstr "# Relative dielectric constant = " # File: calc/dl_poly/dlp_print.c, Line: 1932 msgid "\n# Allowing local variation of system density of: " msgstr "\n# Allowing local variation of system density of: " # File: calc/dl_poly/dlp_print.c, Line: 1966 msgid "\n# Non-bonded short range interactions - type vdW" msgstr "\n# Non-bonded short range interactions - type vdW" # File: calc/dl_poly/dlp_print.c, Line: 1967 msgid "\n# van der Waals short range cutoff = " msgstr "\n# van der Waals short range cutoff = " # File: calc/dl_poly/dlp_print.c, Line: 1970 msgid "\n# Enforce direct calculation of vdW interactions" msgstr "\n# Enforce direct calculation of vdW interactions" # File: calc/dl_poly/dlp_print.c, Line: 1971 msgid "\n# Do not work with system using tabulated potentials" msgstr "\n# Do not work with system using tabulated potentials" # File: calc/dl_poly/dlp_print.c, Line: 1975 msgid "\n# Apply force-shifting for vdW interactions" msgstr "\n# Apply force-shifting for vdW interactions" # File: calc/dl_poly/dlp_print.c, Line: 1979 msgid "\n# Apply mixing rule of type: " msgstr "\n# Apply mixing rule of type: " # File: calc/dl_poly/dlp_print.c, Line: 1984 msgid "\n# No van der Waals interactions (short range)" msgstr "\n# No van der Waals interactions (short range)" # File: calc/dl_poly/dlp_print.c, Line: 1990 msgid "\n# Non-bonded long range interactions" msgstr "\n# Non-bonded long range interactions" # File: calc/dl_poly/dlp_print.c, Line: 1991 msgid "\n# Electrostatics long range cutoff = " msgstr "\n# Electrostatics long range cutoff = " # File: calc/dl_poly/dlp_print.c, Line: 1994 msgid "\n# Use optional padding to the cutoff = " msgstr "\n# Use optional padding to the cutoff = " # File: calc/dl_poly/dlp_print.c, Line: 1998 msgid "\n# Use extended coulombic exclusion\n" msgstr "\n# Use extended coulombic exclusion\n" # File: calc/dl_poly/dlp_print.c, Line: 2000 msgid "\n# Electrostatics calculated using " msgstr "\n# Electrostatics calculated using " # File: calc/dl_poly/dlp_print.c, Line: 2020 msgid "\n# Evaluate k space contribution to the Ewald sum every: " msgstr "\n# Evaluate k space contribution to the Ewald sum every: " # File: calc/dl_poly/dlp_print.c, Line: 2020,2197,2284,2335 msgid " MD step(s)" msgstr " MD step(s)" # File: calc/dl_poly/dlp_print.c, Line: 2025 msgid "# No electrostatics interactions (long range)" msgstr "# No electrostatics interactions (long range)" # File: calc/dl_poly/dlp_print.c, Line: 2031 msgid "\n# Metallic interactions" msgstr "\n# Metallic interactions" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# Enforce direct calculation of metal interactions" msgstr "\n# Enforce direct calculation of metal interactions" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# This does not work with metal alloy systems using the *EAM* potentials" msgstr "\n# This does not work with metal alloy systems using the *EAM* potentials" # File: calc/dl_poly/dlp_print.c, Line: 2039 msgid "\n# Switch the TABEAM default embedding functions, F, from F(Ï�) to F(√Ï�)" msgstr "\n# Switch the TABEAM default embedding functions, F, from F(Ï�) to F(√Ï�)" # File: calc/dl_poly/dlp_print.c, Line: 2043 msgid "\n# Thermostat information" msgstr "\n# Thermostat information" # File: calc/dl_poly/dlp_print.c, Line: 2088 msgid "# Attach a pseudo thermal bath with:\n" msgstr "# Attach a pseudo thermal bath with:\n" # File: calc/dl_poly/dlp_print.c, Line: 2091 msgid "# - thermostat of type: %s\n" msgstr "# - thermostat of type: %s\n" # File: calc/dl_poly/dlp_print.c, Line: 2095 msgid "# - thermostats of type Langevin and Direct applied successively\n" msgstr "# - thermostats of type Langevin and Direct applied successively\n" # File: calc/dl_poly/dlp_print.c, Line: 2099 msgid "# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n" msgstr "# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n" # File: calc/dl_poly/dlp_print.c, Line: 2104 msgid "# - Target temperature: %f K\n" msgstr "# - Target temperature: %f K\n" # File: calc/dl_poly/dlp_print.c, Line: 2110 msgid "# - Target temperature: system target temperature\n" msgstr "# - Target temperature: system target temperature\n" # File: calc/dl_poly/dlp_print.c, Line: 2123 msgid "# Molecular dynamics information\n" msgstr "# Molecular dynamics information\n" # File: calc/dl_poly/dlp_print.c, Line: 2150 msgid "# Variable time step, initial time step = " msgstr "# Variable time step, initial time step = " # File: calc/dl_poly/dlp_print.c, Line: 2151 msgid "\n# Maximum time step allowed = " msgstr "\n# Maximum time step allowed = " # File: calc/dl_poly/dlp_print.c, Line: 2152 msgid "\n# Maximum move allowed = " msgstr "\n# Maximum move allowed = " # File: calc/dl_poly/dlp_print.c, Line: 2153 msgid "\n# Minimum move allowed = " msgstr "\n# Minimum move allowed = " # File: calc/dl_poly/dlp_print.c, Line: 2157 msgid "# MD time step = " msgstr "# MD time step = " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid "\n# Shake / Rattle iterations limit: " msgstr "\n# Shake / Rattle iterations limit: " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid " cycle(s)" msgstr " cycle(s)" # File: calc/dl_poly/dlp_print.c, Line: 2161 msgid "\n# Shake / Rattle tolerance: " msgstr "\n# Shake / Rattle tolerance: " # File: calc/dl_poly/dlp_print.c, Line: 2165 msgid "\n# FIQA iterations limit: " msgstr "\n# FIQA iterations limit: " # File: calc/dl_poly/dlp_print.c, Line: 2166 msgid "\n# Quaternion tolerance: " msgstr "\n# Quaternion tolerance: " # File: calc/dl_poly/dlp_print.c, Line: 2171 msgid "\n\n# Initiate impact on particle\n# - with particle index: " msgstr "\n\n# Initiate impact on particle\n# - with particle index: " # File: calc/dl_poly/dlp_print.c, Line: 2174 msgid "\n# - at MD step: " msgstr "\n# - at MD step: " # File: calc/dl_poly/dlp_print.c, Line: 2178 msgid "\n# - with energy (k eV): " msgstr "\n# - with energy (k eV): " # File: calc/dl_poly/dlp_print.c, Line: 2182 msgid "\n# - direction (x, y, z): " msgstr "\n# - direction (x, y, z): " # File: calc/dl_poly/dlp_print.c, Line: 2196 msgid "\n\n# Equilibration information" msgstr "\n\n# Equilibration information" # File: calc/dl_poly/dlp_print.c, Line: 2197 msgid "\n# Equilibrate during: " msgstr "\n# Equilibrate during: " # File: calc/dl_poly/dlp_print.c, Line: 2200 msgid "\n# During equilibration: rescale system temperature every: " msgstr "\n# During equilibration: rescale system temperature every: " # File: calc/dl_poly/dlp_print.c, Line: 2204 msgid "\n# During equilibration: cap forces, with fmax= " msgstr "\n# During equilibration: cap forces, with fmax= " # File: calc/dl_poly/dlp_print.c, Line: 2208 msgid "\n# During equilibration: resample the instantaneous momenta distribution every: " msgstr "\n# During equilibration: resample the instantaneous momenta distribution every: " # File: calc/dl_poly/dlp_print.c, Line: 2212 msgid "\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n" msgstr "\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2223 msgid "# At the start of the equilibration: minimize %s with target %s= %f\n" msgstr "# At the start of the equilibration: minimize %s with target %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2233 msgid "# During equilibration: perform a zero temperature MD minimization\n" msgstr "# During equilibration: perform a zero temperature MD minimization\n" # File: calc/dl_poly/dlp_print.c, Line: 2238 msgid "# Include equilibration data in overall statistics\n" msgstr "# Include equilibration data in overall statistics\n" # File: calc/dl_poly/dlp_print.c, Line: 2245 msgid "\n# Analysis information" msgstr "\n# Analysis information" # File: calc/dl_poly/dlp_print.c, Line: 2248 msgid "\n# Calculate and collect all intra-molecular PDFs" msgstr "\n# Calculate and collect all intra-molecular PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2254 msgid "\n# Calculate and collect bonds PDFs" msgstr "\n# Calculate and collect bonds PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2260 msgid "\n# Calculate and collect angles PDFs" msgstr "\n# Calculate and collect angles PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2265 msgid "\n# Calculate and collect dihedrals PDFs" msgstr "\n# Calculate and collect dihedrals PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2270 msgid "\n# Calculate and collect inversions PDFs" msgstr "\n# Calculate and collect inversions PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2273 msgid "\n# Print any opted for analysis inter and intra-molecular PDFs" msgstr "\n# Print any opted for analysis inter and intra-molecular PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2280 msgid "\n# Bin size for RDfs and Z-density distribution: " msgstr "\n# Bin size for RDfs and Z-density distribution: " # File: calc/dl_poly/dlp_print.c, Line: 2284 msgid "\n# Calculate and collect radial distribution functions every: " msgstr "\n# Calculate and collect radial distribution functions every: " # File: calc/dl_poly/dlp_print.c, Line: 2290 msgid "\n# Calculate and collect Z-density profile every: " msgstr "\n# Calculate and collect Z-density profile every: " # File: calc/dl_poly/dlp_print.c, Line: 2296 msgid "\n# Velocity autocorrelation functions, VAFs\n" msgstr "\n# Velocity autocorrelation functions, VAFs\n" # File: calc/dl_poly/dlp_print.c, Line: 2302 msgid "\n# Ignore time averaging for the VAFs" msgstr "\n# Ignore time averaging for the VAFs" # File: calc/dl_poly/dlp_print.c, Line: 2309 msgid "\n\n# Output information" msgstr "\n\n# Output information" # File: calc/dl_poly/dlp_print.c, Line: 2312 msgid "\n# Write defects trajectory file, DEFECTS\n" msgstr "\n# Write defects trajectory file, DEFECTS\n" # File: calc/dl_poly/dlp_print.c, Line: 2318 msgid "\n# Write displacement trajectory file, RSDDAT\n" msgstr "\n# Write displacement trajectory file, RSDDAT\n" # File: calc/dl_poly/dlp_print.c, Line: 2324 msgid "\n# Write HISTORY file\n" msgstr "\n# Write HISTORY file\n" # File: calc/dl_poly/dlp_print.c, Line: 2330 msgid "\n# Write MSDTMP file\n" msgstr "\n# Write MSDTMP file\n" # File: calc/dl_poly/dlp_print.c, Line: 2335 msgid "\n# Print system data every: " msgstr "\n# Print system data every: " # File: calc/dl_poly/dlp_print.c, Line: 2339 msgid "\n# Accumulate statics data every: " msgstr "\n# Accumulate statics data every: " # File: calc/dl_poly/dlp_print.c, Line: 2343 msgid "\n# Set rolling average stack to: " msgstr "\n# Set rolling average stack to: " # File: calc/dl_poly/dlp_print.c, Line: 2347 msgid "\n# Dump restart information every: " msgstr "\n# Dump restart information every: " # File: calc/dl_poly/dlp_print.c, Line: 2364 msgid "# - method = " msgstr "# - method = " # File: calc/dl_poly/dlp_print.c, Line: 2371 msgid "\n# - precision = " msgstr "\n# - precision = " # File: calc/dl_poly/dlp_print.c, Line: 2375 msgid "\n# - type = " msgstr "\n# - type = " # File: calc/dl_poly/dlp_print.c, Line: 2381 msgid "\n# - j, reader count = " msgstr "\n# - j, reader count = " # File: calc/dl_poly/dlp_print.c, Line: 2388 msgid "\n# - k, batch size = " msgstr "\n# - k, batch size = " # File: calc/dl_poly/dlp_print.c, Line: 2393 msgid "\n# - l, buffer size = " msgstr "\n# - l, buffer size = " # File: calc/dl_poly/dlp_print.c, Line: 2399 msgid "\n# - e, parallel error check is " msgstr "\n# - e, parallel error check is " # File: calc/dl_poly/dlp_print.c, Line: 2435 msgid "\n# Seeds for the random number generators\n" msgstr "\n# Seeds for the random number generators\n" # File: calc/dl_poly/dlp_print.c, Line: 2441 msgid "\n# Limits to 2 the number of processors in z direction for slab simulations\n" msgstr "\n# Limits to 2 the number of processors in z direction for slab simulations\n" # File: curve/cedit.c, Line: 294 msgid "Data sets" msgstr "Data sets" # File: curve/cedit.c, Line: 362 # File: curve/m_curve.c, Line: 86 msgid "Edit curve" msgstr "Edit curve" # File: curve/cedit.c, Line: 372,373 msgid "Graph" msgstr "Graph" # File: curve/cedit.c, Line: 376,377 # File: curve/m_curve.c, Line: 611 msgid "Data" msgstr "Data" # File: curve/cedit.c, Line: 380,381 msgid "Legend" msgstr "Legend" # File: curve/cedit.c, Line: 389 msgid "Add data set(s) to the active window" msgstr "Add data set(s) to the active window" # File: curve/cedit.c, Line: 392,393 msgid "Add data set" msgstr "Add data set" # File: curve/datab.c, Line: 472 msgid "Add Constant to Column" msgstr "Add Constant to Column" # File: curve/datab.c, Line: 478,613 msgid "Add Constant to Last Column" msgstr "Add Constant to Last Column" # File: curve/datab.c, Line: 525 msgid "Multiply Column by Constant" msgstr "Multiply Column by Constant" # File: curve/datab.c, Line: 531,614 msgid "Multiply Last Column by Constant" msgstr "Multiply Last Column by Constant" # File: curve/datab.c, Line: 550 msgid "Before" msgstr "Before" # File: curve/datab.c, Line: 551 msgid "After" msgstr "After" # File: curve/datab.c, Line: 563 msgid "Insert Row(s)" msgstr "Insert Row(s)" # File: curve/datab.c, Line: 575 msgid "Delete Row(s)" msgstr "Delete Row(s)" # File: curve/datab.c, Line: 587 msgid "Copy Selected Row(s)" msgstr "Copy Selected Row(s)" # File: curve/datab.c, Line: 601 msgid "Cell Based Operations" msgstr "Cell Based Operations" # File: curve/datab.c, Line: 626 msgid "Column Based Operations" msgstr "Column Based Operations" # File: curve/m_curve.c, Line: 76 msgid "Curve window" msgstr "Curve window" # File: curve/m_curve.c, Line: 85,707 msgid "Autoscale" msgstr "Autoscale" # File: curve/m_curve.c, Line: 87 msgid "Close curve" msgstr "Close curve" # File: curve/m_curve.c, Line: 88 msgid "Export data" msgstr "Export data" # File: curve/m_curve.c, Line: 89 msgid "Save image" msgstr "Save image" # File: curve/m_curve.c, Line: 510 msgid "Edit Curve" msgstr "Edit Curve" # File: curve/m_curve.c, Line: 513 msgid "Export Image" msgstr "Export Image" # File: curve/m_curve.c, Line: 530 msgid "Edit Data" msgstr "Edit Data" # File: curve/m_curve.c, Line: 592 # File: curve/w_data.c, Line: 178 msgid "Save Data" msgstr "Save Data" # File: curve/m_curve.c, Line: 613 msgid "Curve" msgstr "Curve" # File: curve/m_curve.c, Line: 659 msgid "Add Data Set" msgstr "Add Data Set" # File: curve/m_curve.c, Line: 677 msgid "Remove Data Set" msgstr "Remove Data Set" # File: curve/tab-1.c, Line: 103 # File: curve/w_img.c, Line: 83 msgid "X size must be > 0" msgstr "X size must be > 0" # File: curve/tab-1.c, Line: 104 # File: curve/w_img.c, Line: 83 msgid "Y size must be > 0" msgstr "Y size must be > 0" # File: curve/tab-1.c, Line: 471 msgid "Frame x min must be < to frame x max" msgstr "Frame x min must be < to frame x max" # File: curve/tab-1.c, Line: 483 msgid "Frame x max must be > to frame x min" msgstr "Frame x max must be > to frame x min" # File: curve/tab-1.c, Line: 499 msgid "Frame y min must be > to frame y max" msgstr "Frame y min must be > to frame y max" # File: curve/tab-1.c, Line: 511 msgid "Frame y max must be < to frame y min" msgstr "Frame y max must be < to frame y min" # File: curve/tab-1.c, Line: 543 msgid "Closed" msgstr "Closed" # File: curve/tab-1.c, Line: 543 msgid "Top Open" msgstr "Top Open" # File: curve/tab-1.c, Line: 543 msgid "Right Open" msgstr "Right Open" # File: curve/tab-1.c, Line: 543 msgid "Left Open" msgstr "Left Open" # File: curve/tab-1.c, Line: 543 msgid "Open " msgstr "Open " # File: curve/tab-1.c, Line: 560 msgid "Size:" msgstr "Size:" # File: curve/tab-1.c, Line: 568 # File: curve/w_img.c, Line: 362 msgid "pixels" msgstr "pixels" # File: curve/tab-1.c, Line: 572 msgid "Insert title" msgstr "Insert title" # File: curve/tab-1.c, Line: 582 msgid "Default title" msgstr "Default title" # File: curve/tab-1.c, Line: 597 # File: curve/tab-3.c, Line: 335 # File: curve/tab-4.c, Line: 818,854 msgid "Font:" msgstr "Font:" # File: curve/tab-1.c, Line: 601,667 # File: curve/tab-3.c, Line: 339,381 msgid "Color:" msgstr "Color:" # File: curve/tab-1.c, Line: 605 # File: curve/tab-3.c, Line: 343 msgid "Position:" msgstr "Position:" # File: curve/tab-1.c, Line: 620 msgid "Background color:" msgstr "Background color:" # File: curve/tab-1.c, Line: 629 msgid "Show/Hide frame" msgstr "Show/Hide frame" # File: curve/tab-1.c, Line: 659 # File: curve/tab-2.c, Line: 953 # File: curve/tab-3.c, Line: 373 msgid "Line style:" msgstr "Line style:" # File: curve/tab-1.c, Line: 664 # File: curve/tab-2.c, Line: 962 # File: curve/tab-3.c, Line: 378 msgid "Line width:" msgstr "Line width:" # File: curve/tab-1.c, Line: 689 # File: curve/tab-4.c, Line: 825,856 msgid "Position: " msgstr "Position: " # File: curve/tab-2.c, Line: 348 msgid "Line width must be > 0.0" msgstr "Line width must be > 0.0" # File: curve/tab-2.c, Line: 392 msgid "Glyph size must be > 0.0" msgstr "Glyph size must be > 0.0" # File: curve/tab-2.c, Line: 436 msgid "Bar width must be > 0.0" msgstr "Bar width must be > 0.0" # File: curve/tab-2.c, Line: 480 msgid "Bar opacity must ∈ [0.0 - 1.0]" msgstr "Bar opacity must ∈ [0.0 - 1.0]" # File: curve/tab-2.c, Line: 547 msgid "Glyph frequency must be > 0" msgstr "Glyph frequency must be > 0" # File: curve/tab-2.c, Line: 846 msgid "Data set(s)" msgstr "Data set(s)" # File: curve/tab-2.c, Line: 929 msgid "Bar" msgstr "Bar" # File: curve/tab-2.c, Line: 916 msgid "Select set: " msgstr "Select set: " # File: curve/tab-2.c, Line: 933 msgid "Plot type:" msgstr "Plot type:" # File: curve/tab-2.c, Line: 941 msgid "Data color:" msgstr "Data color:" # File: curve/tab-2.c, Line: 945 msgid "No Line" msgstr "No Line" # File: curve/tab-2.c, Line: 970 msgid "No Glyph" msgstr "No Glyph" # File: curve/tab-2.c, Line: 978 msgid "Glyph type:" msgstr "Glyph type:" # File: curve/tab-2.c, Line: 983 msgid "Glyph size:" msgstr "Glyph size:" # File: curve/tab-2.c, Line: 988 msgid "Glyph freq.:" msgstr "Glyph freq.:" # File: curve/tab-2.c, Line: 1000 msgid "Bar width:" msgstr "Bar width:" # File: curve/tab-2.c, Line: 1004 msgid "Color opacity:" msgstr "Color opacity:" # File: curve/tab-2.c, Line: 1008 msgid "Plain" msgstr "Plain" # File: curve/tab-2.c, Line: 1012 msgid "Bar opacity:" msgstr "Bar opacity:" # File: curve/tab-2.c, Line: 1021 msgid "Automatic x axis shift for bar diagram (to improve visibility)" msgstr "Automatic x axis shift for bar diagram (to improve visibility)" # File: curve/tab-2.c, Line: 1027 msgid "Layers organization: " msgstr "Layers organization: " # File: curve/tab-2.c, Line: 1037 msgid "\tMove up/down to adjust layer position (up to front, down to back)" msgstr "\tMove up/down to adjust layer position (up to front, down to back)" # File: curve/tab-3.c, Line: 327 msgid "Show/Hide legend" msgstr "Show/Hide legend" # File: curve/tab-3.c, Line: 356 msgid "Show/Hide legend box" msgstr "Show/Hide legend box" # File: curve/tab-4.c, Line: 123 msgid "Axis min must be < to axis max" msgstr "Axis min must be < to axis max" # File: curve/tab-4.c, Line: 150 msgid "Axis max must be > to axis min" msgstr "Axis max must be > to axis min" # File: curve/tab-4.c, Line: 179 msgid "Major tick must be > 0.0" msgstr "Major tick must be > 0.0" # File: curve/tab-4.c, Line: 703 msgid "Select axis:" msgstr "Select axis:" # File: curve/tab-4.c, Line: 705 msgid "X axis" msgstr "X axis" # File: curve/tab-4.c, Line: 706 msgid "Y axis" msgstr "Y axis" # File: curve/tab-4.c, Line: 716 msgid "Scale type:" msgstr "Scale type:" # File: curve/tab-4.c, Line: 724 msgid "Autoscale axis" msgstr "Autoscale axis" # File: curve/tab-4.c, Line: 730 msgid "Min:" msgstr "Min:" # File: curve/tab-4.c, Line: 733 msgid "Max:" msgstr "Max:" # File: curve/tab-4.c, Line: 740 msgid "Major ticks spacing:" msgstr "Major ticks spacing:" # File: curve/tab-4.c, Line: 747 msgid "Number of minor ticks:" msgstr "Number of minor ticks:" # File: curve/tab-4.c, Line: 757 msgid "Tick marks:" msgstr "Tick marks:" # File: curve/tab-4.c, Line: 760,798 msgid "Location:" msgstr "Location:" # File: curve/tab-4.c, Line: 762 msgid "In" msgstr "In" # File: curve/tab-4.c, Line: 763 msgid "Out" msgstr "Out" # File: curve/tab-4.c, Line: 770,801 msgid "Opposite" msgstr "Opposite" # File: curve/tab-4.c, Line: 771,802 msgid "Both" msgstr "Both" # File: curve/tab-4.c, Line: 772,803 # File: calc/cp2k/cp2k_init.c, Line: 700 # File: calc/dl_poly/dlp_field.c, Line: 1493 # File: opengl/win/w_advance.c, Line: 1344,1635 # File: opengl/win/w_periodic.c, Line: 90 msgid "None" msgstr "None" # File: curve/tab-4.c, Line: 779 msgid "Major ticks size:" msgstr "Major ticks size:" # File: curve/tab-4.c, Line: 785 msgid "Minor ticks size:" msgstr "Minor ticks size:" # File: curve/tab-4.c, Line: 795 msgid "Tick labels:" msgstr "Tick labels:" # File: curve/tab-4.c, Line: 809 msgid "Significant digits:" msgstr "Significant digits:" # File: curve/tab-4.c, Line: 822 msgid "Angle:" msgstr "Angle:" # File: curve/tab-4.c, Line: 839 msgid "Show/Hide axis (if min[axis] < 0.0 < max[axis])" msgstr "Show/Hide axis (if min[axis] < 0.0 < max[axis])" # File: curve/tab-4.c, Line: 841 msgid "Show/Hide axis grid" msgstr "Show/Hide axis grid" # File: curve/tab-4.c, Line: 847 msgid "Use default axis title" msgstr "Use default axis title" # File: curve/w_curve.c, Line: 157 msgid "zoom: out (x) / in (y)" msgstr "zoom: out (x) / in (y)" # File: curve/w_curve.c, Line: 164 msgid "zoom: out (x) / out (y)" msgstr "zoom: out (x) / out (y)" # File: curve/w_curve.c, Line: 176 msgid "zoom: in (x) / in (y)" msgstr "zoom: in (x) / in (y)" # File: curve/w_curve.c, Line: 183 msgid "zoom: in (x) / out (y)" msgstr "zoom: in (x) / out (y)" # File: curve/w_curve.c, Line: 219 msgid "(Not in plot)" msgstr "(Not in plot)" # File: curve/w_curve.c, Line: 257 msgid "Not in plot" msgstr "Not in plot" # File: curve/w_data.c, Line: 187 msgid "Xmgrace file (*.agr)" msgstr "Xmgrace file (*.agr)" # File: curve/w_data.c, Line: 191 msgid "x/y ASCII file (*.dat)" msgstr "x/y ASCII file (*.dat)" # File: curve/w_img.c, Line: 226 msgid "PNG file (*.png)" msgstr "PNG file (*.png)" # File: curve/w_img.c, Line: 227 msgid "PDF file (*.pdf)" msgstr "PDF file (*.pdf)" # File: curve/w_img.c, Line: 228 msgid "SVG file (*.svg)" msgstr "SVG file (*.svg)" # File: curve/w_img.c, Line: 229 msgid "EPS file (*.eps)" msgstr "EPS file (*.eps)" # File: curve/w_img.c, Line: 234 msgid "To save an image please enter a file format" msgstr "To save an image please enter a file format" # File: curve/w_img.c, Line: 238 msgid "You need to specify the size of the image" msgstr "You need to specify the size of the image" # File: curve/w_img.c, Line: 322 msgid "Export image" msgstr "Export image" # File: curve/w_img.c, Line: 332 msgid "Format: " msgstr "Format: " # File: curve/w_img.c, Line: 350 msgid "Size: " msgstr "Size: " # File: curve/w_img.c, Line: 364 msgid "Make background transparent" msgstr "Make background transparent" atomes_1.3.1/NEWS.md0000664000175000017500000000042715212624223013606 0ustar lerouxlerouxWelcome to **atomes** ! Detailed installation instruction can be found on the web site: [https://atomes.ipcms.fr/](https://atomes.ipcms.fr/) For basic help after compilation and/or installation: atomes -h atomes --help For version information: atomes -v atomes --version atomes_1.3.1/missing0000775000175000017500000001533615212624223014114 0ustar lerouxleroux#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/configure.ac0000664000175000017500000001421715212624223015000 0ustar lerouxlerouxdnl Process this file with autoconf to produce a configure script. dnl Created by Sébastien Le Roux. AC_PREREQ(2.59) m4_define(atomes_major_version, 1) m4_define(atomes_minor_version, 3) m4_define(atomes_patch_version, 1) m4_define(atomes_version, atomes_major_version.atomes_minor_version.atomes_patch_version) m4_define(atomes_url, https://atomes.ipcms.fr) m4_define(atomes_tar, atomes) AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) AM_INIT_AUTOMAKE AC_DEFINE([ATOMES_MAJOR_VERSION], [atomes_major_version], [atomes major version]) AC_SUBST(ATOMES_MAJOR_VERSION, atomes_major_version) AC_DEFINE([ATOMES_MINOR_VERSION], [atomes_minor_version], [atomes minor version]) AC_SUBST(ATOMES_MINOR_VERSION, atomes_minor_version) AC_DEFINE([ATOMES_PATCH_VERSION], [atomes_patch_version], [atomes patch version]) AC_SUBST(ATOMES_PATCH_VERSION, atomes_patch_version) dnl *************************************************************************** dnl Internatinalization dnl *************************************************************************** dnl GETTEXT_PACKAGE=atomes dnl AC_SUBST(GETTEXT_PACKAGE) dnl AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [GETTEXT package name]) AC_PROG_CC AC_CHECK_HEADERS([libintl.h locale.h]) dnl *************************************************************************** dnl Check for the operating system dnl *************************************************************************** AC_CANONICAL_HOST build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) AC_MSG_ERROR(["OS $host_os is not supported"]) ;; esac # Pass the conditionals to automake AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) if test "$build_windows" = "yes"; then AC_CHECK_TOOL([WINDRES], [windres], [no]) if test "$WINDRES" = no; then AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.]) fi fi dnl *************************************************************************** dnl Check for utilities dnl *************************************************************************** AC_CHECK_PROG([PKG_CONFIG], [pkg-config], [yes], [no]) AC_CHECK_PROG([UP_MIME], [update-mime-database], [yes], [no]) AC_CHECK_PROG([UP_DESKTOP], [update-desktop-database], [yes], [no]) AC_CHECK_PROG([UP_APPSTREAM], [appstream-util], [yes], [no]) dnl *************************************************************************** dnl Check for required librairies dnl *************************************************************************** # determine the GTK version to use AC_MSG_CHECKING([the GTK version to use]) AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk=3|4], [the GTK version to use (default: 3)])], [case "$with_gtk" in 3|4) ;; *) AC_MSG_ERROR([invalid GTK version specified]) ;; esac], [with_gtk=3]) AC_MSG_RESULT([$with_gtk]) AM_CONDITIONAL([GTK3], [test "$with_gtk" == "3"]) case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac PKG_CHECK_MODULES([LGTK], [$gtk_version >= $gtk_version_number]) if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then PKG_CHECK_MODULES([INTEGRATION], [gtk-mac-integration]) fi fi PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.4.0]) PKG_CHECK_MODULES([PANGOFT2], [pangoft2]) PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libavutil libswscale]) if test "$build_windows" = "no"; then PKG_CHECK_MODULES([GLU], [glu]) fi PKG_CHECK_MODULES([EPOXY], [epoxy]) # Checking for compilers dnl Definig the macro AX_CHECK_COMPILER_FLAG: AC_DEFUN([AX_CHECK_COMPILER_FLAG], [AC_PREREQ(2.64) dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR], [ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1]) AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR]) ])dnl AX_CHECK_COMPILER_FLAG # C AC_PROG_CC AX_CHECK_COMPILER_FLAG([$CFLAGS]) # Fortran 90 AC_FC_WRAPPERS AC_LANG_PUSH([Fortran]) fcflags_save="$FCFLAGS" AC_PROG_FC([xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe], [90]) FCFLAGS="$fcflags_save" AC_FC_SRCEXT(f90, FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS", AC_MSG_ERROR([Cannot compile .f90 files])) AC_FC_SRCEXT(F90, FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS", AC_MSG_ERROR([Cannot compile .F90 files])) AX_CHECK_COMPILER_FLAG([$FCFLAGS]) AC_FC_LIBRARY_LDFLAGS AC_FC_FREEFORM AC_LANG_POP([Fortran]) cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h AC_MSG_CHECKING([the OpenMP specification and flags]) AC_ARG_ENABLE([--disable-openmp], [AS_HELP_STRING([--disable-openmp], [disable OpenMP thread parallelisation (default: no)])], [with_opemp="no"], [with_openmp="yes"]) AC_MSG_RESULT([$with_openmp]) if test "$with_openmp" = "yes"; then AC_OPENMP AC_SUBST([OPENMP_CFLAGS]) AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) fi AC_CONFIG_FILES([ Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile ]) AC_CONFIG_HEADERS([config.h]) if test "$build_windows" = "yes"; then AC_CONFIG_FILES([misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in]) fi AC_OUTPUT atomes_1.3.1/debian/0000775000175000017500000000000015212624223013727 5ustar lerouxlerouxatomes_1.3.1/debian/changelog0000664000175000017500000000646015212624223015607 0ustar lerouxlerouxatomes (1.3.1-2) unstable; urgency=medium * Bug corrections, for good this time :-( -- Sébastien Le Roux Thu, 11 Jun 2026 23:26:21 +0200 atomes (1.3.1-1) unstable; urgency=medium * Bug corrections -- Sébastien Le Roux Thu, 11 Jun 2026 21:22:29 +0200 atomes (1.3.0-1) unstable; urgency=medium * New upstream version 1.3.0 -- Sébastien Le Roux Thu, 11 Jun 2026 14:22:21 +0200 atomes (1.2.1-1) unstable; urgency=medium [ Pierre Gruet ] * Team upload * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util (Closes: #1120450) * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util -- Pierre Gruet Mon, 10 Nov 2025 13:42:28 +0100 atomes (1.2.0-1) unstable; urgency=medium * New upstream version 1.2.0 [ Pierre Gruet ] * Refreshing patch -- Sébastien Le Roux Thu, 04 Sep 2025 14:21:06 +0200 atomes (1.1.18-1) unstable; urgency=medium * New upstream version 1.1.18 [ Pierre Gruet ] * Raising Standards version to 4.7.2 (no change) * Removing old FSF address from d/copyright -- Sébastien Le Roux Thu, 21 Aug 2025 09:25:53 +0200 atomes (1.1.17-1) unstable; urgency=medium * New upstream version 1.1.17 [ Pierre Gruet ] * Raising Standards version to 4.7.1 (no change) * Bumping d/copyright years -- Sébastien Le Roux Fri, 21 Feb 2025 10:48:19 +0100 atomes (1.1.16-1) unstable; urgency=medium * Team upload * New upstream version 1.1.16 -- Pierre Gruet Thu, 26 Dec 2024 22:15:39 +0100 atomes (1.1.15-1) unstable; urgency=medium * New upstream version 1.1.15 * Refreshing patch * Raising Standards version to 4.7.0, no change * Fixing spelling of the Lintian override -- Sébastien Le Roux Wed, 20 Nov 2024 11:37:02 +0100 atomes (1.1.14-1.1) unstable; urgency=medium * Non-maintainer upload. * debian/control: Removed hard-coded dependency on libgtk-3-0 (Closes: #1068217) -- Sebastian Ramacher Sat, 13 Apr 2024 19:42:07 +0200 atomes (1.1.14-1) unstable; urgency=medium * New upstream version * Refreshing patches [ Pierre Gruet ] * Replacing obsolete pkg-config by pkgconf in the build-dependencies -- Sébastien Le Roux Wed, 20 Mar 2024 16:40:00 +0200 atomes (1.1.12+repack-2) unstable; urgency=medium * Team upload * Removing -fstack-protector-strong from FCFLAGS on arm64 to circumvent gcc bug 111528 -- Pierre Gruet Wed, 27 Sep 2023 09:41:46 +0200 atomes (1.1.12+repack-1) unstable; urgency=medium * New upstream version -- Sébastien Le Roux Tue, 19 Sep 2023 15:45:00 +0200 atomes (1.1.12-2) unstable; urgency=medium * Team upload. * Source-only upload to unstable -- Pierre Gruet Sat, 26 Aug 2023 22:34:12 +0200 atomes (1.1.12-1) unstable; urgency=medium * Initial release (Closes: #1019387) -- Sébastien Le Roux Mon, 17 Jul 2023 17:26:00 +0200 atomes_1.3.1/debian/copyright0000664000175000017500000011500215212624223015661 0ustar lerouxlerouxFormat: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: atomes Upstream-Contact: atomes@ipcms.unistra.fr Sébastien Le Roux Source: https://github.com/Slookeur/Atomes-GNU/ Files: * Copyright: 2022-2026 Dr. Sébastien Le Roux License: AGPL-3.0-or-later Files: Makefile.in src/Makefile.in Copyright: 1994-2021 Free Software Foundation, Inc. License: FSFULLR Files: aclocal.m4 Copyright: 1996-2020 Free Software Foundation, Inc. 2004 Scott James Remnant . 2012-2015 Dan Nicholson License: FSFULLR and GPL-2.0-or-later Files: compile depcomp missing Copyright: 1996-2020 Free Software Foundation, Inc. License: GPL-2.0-or-later with Autoconf-data exception Files: config.guess config.sub Copyright: 1992-2018 Free Software Foundation, Inc. License: GPL-3.0-or-later Files: configure autom4te.cache/* Copyright: 1992-2021 Free Software Foundation, Inc. License: FSFUL Files: install-sh Copyright: 1994 X Consortium License: Expat-X Comment: FSF changes to this file are in the public domain. Files: INSTALL Copyright: 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. License: FSFULLR Files: metadata/fr.ipcms.atomes.appdata.xml Copyright: 2025 Dr. Sébastien Le Roux License: FSFAP Files: debian/* Copyright: 2022-2025 Dr. Sébastien Le Roux License: AGPL-3.0-or-later License: AGPL-3.0-or-later GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 . Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. . Preamble . The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. . The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. . When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. . Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. . A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. . The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. . An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. . The precise terms and conditions for copying, distribution and modification follow. . TERMS AND CONDITIONS . 0. Definitions. . "This License" refers to version 3 of the GNU Affero General Public License. . "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. . "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. . To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. . A "covered work" means either the unmodified Program or a work based on the Program. . To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. . To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. . An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. . 1. Source Code. . The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. . A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. . The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. . The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. . The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. . The Corresponding Source for a work in source code form is that same work. . 2. Basic Permissions. . All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. . You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. . Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. . 3. Protecting Users' Legal Rights From Anti-Circumvention Law. . No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. . When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. . 4. Conveying Verbatim Copies. . You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. . You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. . 5. Conveying Modified Source Versions. . You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: . a) The work must carry prominent notices stating that you modified it, and giving a relevant date. . b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". . c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. . d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. . A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. . 6. Conveying Non-Source Forms. . You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: . a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. . b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. . c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. . d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. . e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. . A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. . A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. . "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. . If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). . The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. . Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. . 7. Additional Terms. . "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. . When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. . Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: . a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or . b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or . c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or . d) Limiting the use for publicity purposes of names of licensors or authors of the material; or . e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or . f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. . All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. . If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. . Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. . 8. Termination. . You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). . However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. . Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. . Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. . 9. Acceptance Not Required for Having Copies. . You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. . 10. Automatic Licensing of Downstream Recipients. . Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. . An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. . You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. . 11. Patents. . A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". . A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. . Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. . In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. . If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. . If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. . A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. . Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. . 12. No Surrender of Others' Freedom. . If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. . 13. Remote Network Interaction; Use with the GNU General Public License. . Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. . Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. . 14. Revised Versions of this License. . The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. . Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. . If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. . Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. . 15. Disclaimer of Warranty. . THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. . 16. Limitation of Liability. . IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. . 17. Interpretation of Sections 15 and 16. . If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. . END OF TERMS AND CONDITIONS License: FSFUL Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. . This file is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. License: FSFULLR Copyright 1996-2006 Free Software Foundation, Inc. . This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. License: GPL-2.0-or-later This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/. . On Debian systems, the complete text of version 2 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2'. /usr/share/common-licenses/GPL-2 License: GPL-3.0-or-later This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/. . On Debian systems, the complete text of version 3 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-3'. /usr/share/common-licenses/GPL-3 License: Expat-X Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. . Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. License: FSFAP Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. License: GPL-2.0-or-later with Autoconf-data exception This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/. . As a special exception to the GNU General Public License, if you distribute this file as part of a program that contains a configuration script generated by Autoconf, you may include it under the same distribution terms that you use for the rest of that program. . On Debian systems, the complete text of version 2 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2'. atomes_1.3.1/debian/patches/0000775000175000017500000000000015212624223015356 5ustar lerouxlerouxatomes_1.3.1/debian/patches/appstreamcli.patch0000664000175000017500000000377015212624223021072 0ustar lerouxlerouxDescription: using appstreamcli instead of deprecated appstream-util Right now the check is deactivated as there are many errors, letting upstream rework the file. Author: Pierre Gruet Bug-Debian: https://bugs.debian.org/1120450 Forwarded: sebastien.leroux@ipcms.unistra.fr Last-Update: 2025-11-10 --- a/Makefile.am +++ b/Makefile.am @@ -43,7 +43,7 @@ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) - appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml +# appstreamcli validate --no-net $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ --- a/atomes.spec +++ b/atomes.spec @@ -69,7 +69,7 @@ %check desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop -appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml +#appstreamcli validate --no-net %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml %files %license COPYING --- a/configure.ac +++ b/configure.ac @@ -76,7 +76,7 @@ AC_CHECK_PROG([PKG_CONFIG], [pkg-config], [yes], [no]) AC_CHECK_PROG([UP_MIME], [update-mime-database], [yes], [no]) AC_CHECK_PROG([UP_DESKTOP], [update-desktop-database], [yes], [no]) -AC_CHECK_PROG([UP_APPSTREAM], [appstream-util], [yes], [no]) +AC_CHECK_PROG([UP_APPSTREAM], [appstreamcli], [yes], [no]) dnl *************************************************************************** --- a/configure +++ b/configure @@ -3477,8 +3477,8 @@ fi -# Extract the first word of "appstream-util", so it can be a program name with args. -set dummy appstream-util; ac_word=$2 +# Extract the first word of "appstreamcli", so it can be a program name with args. +set dummy appstreamcli; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} atomes_1.3.1/debian/patches/series0000664000175000017500000000005615212624223016574 0ustar lerouxlerouxomit_flags_in_binary.patch appstreamcli.patch atomes_1.3.1/debian/patches/omit_flags_in_binary.patch0000664000175000017500000000142315212624223022555 0ustar lerouxlerouxDescription: removing FLAGS from the contents of the built executable file in order to enhance build reproducibility. Otherwise the build path would be shipped inside /usr/bin/atomes. Author: Pierre Gruet Forwarded: not-needed Last-Update: 2026-06-11 --- a/src/gui/main.c +++ b/src/gui/main.c @@ -254,10 +254,10 @@ } printf ("OpenMP version : %1.1f (%s)\n", v, v_string); #endif - printf ("FC Compiler : %s\n", FC); + /*printf ("FC Compiler : %s\n", FC); printf ("FC Compiler flags : %s\n", FCFLAGS); printf ("C Compiler : %s\n", CC); - printf ("C Compiler flags : %s\n", CFLAGS); + printf ("C Compiler flags : %s\n", CFLAGS);*/ printf ("%s", bug); printf ("%s", PACKAGE_BUGREPORT); atomes_1.3.1/debian/atomes.lintian-overrides0000664000175000017500000000015415212624223020577 0ustar lerouxleroux# False positive, "coul" is the intended word atomes: spelling-error-in-binary coul could [usr/bin/atomes*] atomes_1.3.1/debian/changelog.save0000664000175000017500000000573315212624223016546 0ustar lerouxlerouxatomes (1.3.0-1) unstable; urgency=medium * New upstream version 1.3.0 -- Sébastien Le Roux Thu, atomes (1.2.1-1) unstable; urgency=medium [ Pierre Gruet ] * Team upload * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util (Closes: #1120450) * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util -- Sébastien Le Roux Thu, 11 Jun 2026 14:18:13 +0200 atomes (1.2.0-1) unstable; urgency=medium * New upstream version 1.2.0 [ Pierre Gruet ] * Refreshing patch -- Sébastien Le Roux Thu, 04 Sep 2025 14:21:06 +0200 atomes (1.1.18-1) unstable; urgency=medium * New upstream version 1.1.18 [ Pierre Gruet ] * Raising Standards version to 4.7.2 (no change) * Removing old FSF address from d/copyright -- Sébastien Le Roux Thu, 21 Aug 2025 09:25:53 +0200 atomes (1.1.17-1) unstable; urgency=medium * New upstream version 1.1.17 [ Pierre Gruet ] * Raising Standards version to 4.7.1 (no change) * Bumping d/copyright years -- Sébastien Le Roux Fri, 21 Feb 2025 10:48:19 +0100 atomes (1.1.16-1) unstable; urgency=medium * Team upload * New upstream version 1.1.16 -- Pierre Gruet Thu, 26 Dec 2024 22:15:39 +0100 atomes (1.1.15-1) unstable; urgency=medium * New upstream version 1.1.15 * Refreshing patch * Raising Standards version to 4.7.0, no change * Fixing spelling of the Lintian override -- Sébastien Le Roux Wed, 20 Nov 2024 11:37:02 +0100 atomes (1.1.14-1.1) unstable; urgency=medium * Non-maintainer upload. * debian/control: Removed hard-coded dependency on libgtk-3-0 (Closes: #1068217) -- Sebastian Ramacher Sat, 13 Apr 2024 19:42:07 +0200 atomes (1.1.14-1) unstable; urgency=medium * New upstream version * Refreshing patches [ Pierre Gruet ] * Replacing obsolete pkg-config by pkgconf in the build-dependencies -- Sébastien Le Roux Wed, 20 Mar 2024 16:40:00 +0200 atomes (1.1.12+repack-2) unstable; urgency=medium * Team upload * Removing -fstack-protector-strong from FCFLAGS on arm64 to circumvent gcc bug 111528 -- Pierre Gruet Wed, 27 Sep 2023 09:41:46 +0200 atomes (1.1.12+repack-1) unstable; urgency=medium * New upstream version -- Sébastien Le Roux Tue, 19 Sep 2023 15:45:00 +0200 atomes (1.1.12-2) unstable; urgency=medium * Team upload. * Source-only upload to unstable -- Pierre Gruet Sat, 26 Aug 2023 22:34:12 +0200 atomes (1.1.12-1) unstable; urgency=medium * Initial release (Closes: #1019387) -- Sébastien Le Roux Mon, 17 Jul 2023 17:26:00 +0200 atomes_1.3.1/debian/atomes-data.install0000664000175000017500000000002115212624223017507 0ustar lerouxlerouxusr/share/atomes atomes_1.3.1/debian/rules0000775000175000017500000000032715212624223015011 0ustar lerouxleroux#!/usr/bin/make -f #export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+all ifeq ($(shell dpkg --print-architecture),arm64) export DEB_FCFLAGS_MAINT_STRIP=-fstack-protector-strong endif %: dh $@ atomes_1.3.1/debian/control0000664000175000017500000000622415212624223015336 0ustar lerouxlerouxSource: atomes Section: science Priority: optional Maintainer: Debichem Team Uploaders: Sébastien Le Roux Build-Depends: debhelper-compat (= 13), automake, autoconf, pkgconf, gettext, gfortran, libgfortran5, libgtk-3-dev, libxml2-dev, libpango1.0-dev, libglu1-mesa-dev, libepoxy-dev, libavutil-dev, libavcodec-dev, libavformat-dev, libswscale-dev, desktop-file-utils, appstream Standards-Version: 4.7.2 Homepage: https://atomes.ipcms.fr/ Vcs-Browser: https://salsa.debian.org/debichem-team/atomes Vcs-Git: https://salsa.debian.org/debichem-team/atomes.git Rules-Requires-Root: no Package: atomes Architecture: any Depends: atomes-data (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends}, libglu1-mesa, bash-completion Description: atomic-scale 3D modeling toolbox atomes is a tool box to analyze (physico-chemical properties calculations), visualize (atoms, bonds, colormaps, measurements, coordination polyedra ...) create (crystal builder, molecular library, surface creation and passivation ...) 3D atomic scale models. atomes offers a workspace capable of handling many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS - ab-initio MD: CPMD and CP2K - QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. . This package provides the binaries. Package: atomes-data Architecture: all Multi-Arch: foreign Depends: ${misc:Depends} Enhances: atomes Suggests: atomes Description: atomic-scale 3D modeling toolbox (data) atomes is a tool box to analyze (physico-chemical properties calculations), visualize (atoms, bonds, colormaps, measurements, coordination polyedra ...) create (crystal builder, molecular library, surface creation and passivation ...) 3D atomic scale models. atomes offers a workspace capable of handling many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS - ab-initio MD: CPMD and CP2K - QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. . This package contains data files for atomes. atomes_1.3.1/debian/upstream/0000775000175000017500000000000015212624223015567 5ustar lerouxlerouxatomes_1.3.1/debian/upstream/metadata0000664000175000017500000000041415212624223017271 0ustar lerouxlerouxBug-Database: https://github.com/Slookeur/Atomes-GNU/issues Bug-Submit: https://github.com/Slookeur/Atomes-GNU/issues/new Repository: https://github.com/Slookeur/Atomes-GNU.git Repository-Browse: https://github.com/Slookeur/Atomes-GNU Contact: atomes@ipcms.unistra.fr atomes_1.3.1/debian/source/0000775000175000017500000000000015212624223015227 5ustar lerouxlerouxatomes_1.3.1/debian/source/format0000664000175000017500000000001415212624223016435 0ustar lerouxleroux3.0 (quilt) atomes_1.3.1/debian/watch0000664000175000017500000000031215212624223014754 0ustar lerouxlerouxVersion: 5 Source: https://github.com/Slookeur/Atomes-GNU/tags Matching-Pattern: (?:.*?/)?v?(\d[\d.]*)\.tar\.gz Filenamemangle: s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%atomes-$1.tar.gz% Update-Script: uupdate atomes_1.3.1/debian/atomes.install0000664000175000017500000000024615212624223016611 0ustar lerouxlerouxusr/bin usr/libexec usr/share/applications usr/share/bash-completion usr/share/doc usr/share/locale usr/share/man usr/share/metainfo usr/share/mime usr/share/pixmaps atomes_1.3.1/COPYING0000664000175000017500000010340515212624223013543 0ustar lerouxleroux GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. atomes - An atomic-scale 3D modeling toolbox To analyze, visualize, and create 3D atomistic models. Copyright (C) 2022, 2023 Dr. Sébastien Le Roux This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . atomes_1.3.1/ChangeLog0000664000175000017500000002205715212624223014265 0ustar lerouxleroux2026-06-11 Sébastien Le Roux Release of version 1.3.1 * Bug corrections: Ensure that init_camera always uses the active project 'init_p.c' Curve layout when saving workspace 'save_curve.c' 2026-06-11 Sébastien Le Roux Release of version 1.3.0 * New features: New code structure to facilitate the use of the 2D graph system New 'analysis' data structure New version and structure of the projet file New OpenGL shaders for ray tracing rendering Image rendering from the command line Error backtrace for reading and saving atomes files (apf and awf) Internationalisation (Fr + En): atomes interface is now translatable * Improvements: Improved command line parsing and capabilities OpenGL tilted font rendering improvement New pango markup instructions for 2D graph and 3D text Improvement memory management when searching for molecules * Bug corrections: OpenGL shaders lightning bug correction 'w_advanced.c' Curve draw order 'tab-2.c' Spinning and closing project 'w_spiner.c' / 'close_p.c' Chain statistics 'chainscall.c' Chain statistics calc menu 'calc_menu.c' DL-POLY field match for vdW potentials 'dlp_ff_match.c' Many, many, others * Extra: New LibreOffice extension Improved developer documentation with examples 2025-09-30 Sébastien Le Roux Release of version 1.2.1 * Bug corrections: Linux package fix Windows bug fix to read preferences file 'preferences.c' 2025-09-05 Sébastien Le Roux Release of version 1.2.0 * New features: New user preferences window and associated features: - Set global user preferences - Save preferences in 'atomes.pml' configuration file Gradient backgrounds * Improvements: Reading of CIF files 'read_cif.c' - better occupancy treatment - multiconfiguration CIF files Representation window 'm_rep.c' * Bug corrections: Several issues fixed for advanced OpenGL rendering 'w_advance.c' 2025-05-15 Sébastien Le Roux Release of version 1.1.18 * Bug corrections: Crystal building, bug correction if occ < 1.0 'cbuild_action.c' OpenGL drawing of NPT boxes 'ogl_draw.c' and 'd_box.c' Workspace space groupe info 'modelinfo.c' Dmax evaluation 'interface.c' 2025-02-20 Sébastien Le Roux Release of version 1.1.17 * Bug corrections: OpenGL window shortcuts bug correction 'glwindow.c' OpenGL window, GTK3 menu bar fix 'glwindow.c', 'm_atoms.c' OpenGL window contextual menu fix 'popup.c' Crystal building, few minor bug corrections and code cleaning 'cbuild_action.c' Supercell: bug fix to restore coordination and polyhedra data 'cell_super.c' * Improvement: Distance matrix calculation 'dmtx.F90' minor adjustments and improvements 2024-12-18 Sébastien Le Roux Release of version 1.1.16 * Bug corrections: Ring statistics correction for Guttman analysis with ABAB rings X-rays g(r): 'CHEM_X' parameters default set to Z 2024-04-10 Sébastien Le Roux Release of version 1.1.15 * Bug corrections: Several MacOS OS related bugs corrected Various small bug corrections * Improvements: OpenGL testing utility implemented at startup Shorcuts information dialog for all windows with shorcuts GTK4 forward transition code wide MacOS beta version 2024-03-20 Sébastien Le Roux Release of version 1.1.14 * Bug corrections: X-rays g(r): 'CHEM_X' parameter was 0.0 * Improvements: Option to build model from CIF file using symmetry positions when available 'read_cif.c' Object(s) can be used to fill CIF file unknown positions 'read_cif.c' and 'cbuild_action.c' Distance matrix calculation 'dmtx.F90' minor adjustments and improvements Improvement of the automatic evaluation of the OpenGL model depth 'bonds.F90' Pixel debug is now available in DEBUG mode overall code cleaning atomes code is now entirely commented in Doxygen format 2024-02-28 Sébastien Le Roux Release of version 1.1.13 * Bug corrections: Surface passivation: 'cell_cut.c' and 'atom_action.c' Atomic object managment: 'src/opengl/edit/atom_*.c' Atom search window: 'w_search.c' * Improvements: Handling unknown chemical species when reading coordinates files Keyboard shortcuts added for styles and selection modes for the OpenGL window Re-compute bonding properties of edition with the model edition window 2023-09-11 Sébastien Le Roux Release of version 1.1.12 * Bug corrections: Corrections on reading I.S.A.A.C.S. files: 'callbacks.c' and 'xmlrw.c' Workspace contextual menu correction: 'workspace.c' Movie encoding correction for axis colors and volumes: 'movie.c' GTK3 version: OpenGL / GTK interaction, on fail to initialize rendering: test to change the GDK visual 'gtk_window_change_gdk_visual()' GTK4 version: Event controller correction: 'dlp_ff_match.c' Tree view selection corrections: 'dlp_field.c' and 'w_measures.c' Menus with pango markups (if no submenu attached: https://gitlab.gnome.org/GNOME/gtk/-/issues/5946) "Color palettes" ready (if bug fixed: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955) Periodic table focus on mouse motion fixed: 'w_periodic.c' OpenGL window main menu and contextual menus corrections * Improvements: Massive code cleaning Massive addition of comments in the C sources Code cleaning to remove older APF version compatibilities on open project File associations added for standards atomic coordinates file formats BASH completion adapted accordingly Separate 'Makefile.am' for architecture independent data 2023-03-27 Sébastien Le Roux Release of version 1.1.11 * Bug correction: dmtx.F90: ADAPT_CUT callbacks.c: removed 'if (oap < 2)' 2022-04-11 Sébastien Le Roux Release of version 1.1.10 * Bug correction: molecules.F90: m = VOISJ(l,j,i) 2022-28-10 Sébastien Le Roux Release of version 1.1.9 * Bug corrections: glwin.h: float shift[4], label_format[3] m_poly.c: olg_clones[6] -> olg_clones[5] read_bond.c: update_mol edit_menu.c: cshift[i+3] -> cshift[i] gui.c: cut_sel and cut_lab pointers for 3D window actions dlp_atom.c: compare_non_bonded 2022-27-10 Sébastien Le Roux Release of version 1.1.8 * Bug corrections: edit_menu.c: correction for lattice parameter updates gui.c: cut_sel and cut_lab pointers for 3D window actions popup.c: corrections to use cut_sel and cut_lab glwindow.c: corrections to use cut_sel and cut_lab closep.c: corrections to close volume_win and model_win[2] atom_action.c: corrections to properly trigger bond udpates or not atom_remove.c: corrections to adjust bonds id atom_remove.c: corrections if fragments are removed ogl_text.c: correction buffer size strings for measures callbacks.c: correction when reading workspace remember name 2022-13-10 Sébastien Le Roux Release of version 1.1.7 * Bug corrections: callback.c: save workspace atom_action.c: on remove, trigger re-calculate bonding 2022-10-10 Sébastien Le Roux Release of version 1.1.6 * Bug correction: w_library.c: lib_preview_plot = NULL; * Improvements: main.c: -h glview.c: selection delay on mouse pressed/released 2022-09-23 Sébastien Le Roux Release of version 1.1.5 * Bug correction: w_search.c: selection not to crash if atom_win is closed 2022-09-22 Sébastien Le Roux Release of version 1.1.4 * Bug corrections: read_coord.c: Windows to handle properly EOL symbols m_curve.c: Windows to not crash when destroying label widget glview.c: correct GWARNING messages on widget scale 2022-09-15 Sébastien Le Roux Release of version 1.1.3 * Bug corrections: read_opengl.c: correct 'read_atom_b' initring.c: correct 'send_rings_opengl_' 2022-09-14 Sébastien Le Roux Release of version 1.1.2 * Bug corrections: atom_action.c: recompute bonding on passivate bdcall.c: do not trigger menu init on passivate 2022-09-13 Sébastien Le Roux Release of version 1.1.1 * Bug correction: workspace.c: double click on workspace 2022-08-28 Sébastien Le Roux Initial release of the Atomes program v1.1.0 atomes_1.3.1/README.md0000664000175000017500000001114315212624223013764 0ustar lerouxleroux# atomes ![License][license] ![OpenSSF Best Practices][openssf] ![Development Status][dev_status] ![Hits Of Code][hoc] [atomes][atomes] is a Free (Open Source) cross-platform software licensed under the terms of the Affero GPL v3+ license. **atomes** is a toolbox developed to analyze, to visualize and to create/edit three-dimensional atomic scale models. It offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates ... **atomes** also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: - Classical MD : [DLPOLY][dlpoly] and [LAMMPS][lammps] - ab-initio MD : [CPMD][cpmd] and [CP2K][cp2k] - QM-MM MD : [CPMD][cpmd] and [CP2K][cp2k] To prepare the input ï¬�lles for these calculations is likely to be the key, and most complicated step towards MD simulations. **atomes** offers a user-friendly assistant to help and guide the user step by step to achieve this crucial step. ## Features - Analysis of 3D atomic scale models: neutrons and x-rays diffraction, ring statistics, chain statistics, bond order, MSD ... - Visualization: measures, coordination polyhedras, advanced coloring, advanced design - Edition: molecular library, crystal builder, cell edition, surface creation and passivation ... - MD input preparation: - Classical MD: [DLPOLY][dlpoly] and [LAMMPS][lammps] - ab-initio MD: [CPMD][cpmd] and [CP2K][cp2k] - QM-MM MD: [CPMD][cpmd] and [CP2K][cp2k] ## Build instructions To build ***atomes***: ``` ./configure ``` Followed by: ``` make ``` ### Build options #### Building the GTK4 version of ***atomes*** ***atomes*** uses the [GTK][gtk] lib for the GUI, by default GTK3 is used, however it is possible to build the GTK4 version (beta). To do that: 1. Configure using the `--with-gtk=` flag: ``` ./configure --with-gtk=4 ``` Note the default flag is: `--with-gtk=3` 2. Build ***atomes*** ``` make ``` Here are some issues with GTK4 that cannot be sovled for the time being: 1. No way to attach widget to menu items not in the top level of the menu (https://gitlab.gnome.org/GNOME/gtk/-/issues/5955) #### Building the serial version of ***atomes*** By default ***atomes*** uses [OpenMP][openmp] to parallelize several calculations over the CPU cores. It is possible to turn this off, and to build a serial version of ***atomes***, to do that: 1. Configure using the `--disable-openmp` flag: ``` ./configure --disable-openmp ``` 2. Build ***atomes*** ``` make ``` ## Install ***atomes*** ``` make install ``` ## Who's behind ***atomes*** ***atomes*** is developed by [Dr. Sébastien Le Roux][slr], research engineer for the [CNRS][cnrs]

CNRS logo

[Dr. Sébastien Le Roux][slr] works at the Institut de Physique et Chimie des Matériaux de Strasbourg [IPCMS][ipcms]

IPCMS logo

## Documentation The documenation is hosted on [GitHub][github] here: [atomes documentation][atomes-doc] Developer documentation is hosted on [GitHub][github] here: [atomes developer documenation][devel-doc] ## Tutorials Tutorial are regrouped and hosted on [GitHub][github] here: [atomes tutorials][atomes-tuto] [license]:https://img.shields.io/badge/License-AGPL_v3%2B-blue [openssf]:https://www.bestpractices.dev/projects/9146/badge [dev_status]:https://www.repostatus.org/badges/latest/active.svg [down_status]:https://img.shields.io/sourceforge/dw/atomes.svg [hoc]:https://hitsofcode.com/github/Slookeur/atomes-GNU?branch=main [slr]:https://www.ipcms.fr/sebastien-le-roux/ [cnrs]:https://www.cnrs.fr/ [ipcms]:https://www.ipcms.fr/ [github]:https://github.com/ [jekyll]:https://jekyllrb.com/ [atomes]:https://atomes.ipcms.fr/ [atomes-doc]:https://slookeur.github.io/atomes-doc/ [atomes-tuto]:https://slookeur.github.io/atomes-tuto/ [devel-doc]:https://slookeur.github.io/atomes-doxygen/ [dlpoly]:https://www.scd.stfc.ac.uk/Pages/DL_POLY.aspx [lammps]:https://lammps.sandia.gov/ [cpmd]:http://www.cpmd.org [cp2k]:http://cp2k.berlios.de [gtk]:https://www.gtk.org/ [openmp]:https://www.openmp.org/ atomes_1.3.1/data/0000775000175000017500000000000015212624223013416 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/0000775000175000017500000000000015212624223015077 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/an.png0000664000175000017500000000060115212624223016200 0ustar lerouxleroux‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ .‡xròIDAT8Ë•“±qÃ0 EŸ³@¼‡m¨p¯8G '°6È*¢ mà&uÔ«°6€ É–NGæl6 ÿAò+xï­ë:SÕÈ»KDLUMUÍÌLUCêÞÇ#6‘a˜¦ €¾ïô?@¿$öÀר¼÷4MóeÕ.•ÕCÂNø !Û‡�9oaáÌæbI€ìö²—3 «"Æz!nìÉVE®‰pX¢ç€ ø›•díì{ò¸%ñV–v½^íV–öjSÅA¸¬•mpÎ,a' »€Eˆñloá°­ä½�"ÂñxÔ¶m9�NòY×UµNaÈ*MÌþKèñ Œã¨»Ù?¿ý‹¢ˆu]›s.¼šs¢—7³²ÄîIEND®B`‚atomes_1.3.1/data/pixmaps/mol.png0000664000175000017500000000221415212624223016373 0ustar lerouxleroux‰PNG  IHDR�‰ sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ7Ó“… IDAT8Ë•”mh[uÆŸÿ½7ÉMÚ&Yo—´I›5m¶¬ÙdÕꆇl°�è@Pa¦ C(¶t2‡:D§uÝQABZ‡ ûà&«ÅÖºu*5méË¢ÍK›´¡ij’›ÜÞ››ôþýÐ fמ/çü8Îól;ÎÖÕf “.,mÔšD¶Á =^á÷×£ýW“Ê|R)~óÓŠì¹hhöéæ],% ¤  « ÓKÀàdmei�7hé/îþ¸ÓLÅÃíO,±¸õRXŒ’ L$€‚MOuBýÑÒ�næÿP�Àg³ÜÇ[ú ™øî}ÄE‚¡É"úúƒXËÊØo'à�š ÷2077�g÷‡†Õ>ŸÆ™Pc ¢Á ¨S½°GN";z6 Àgb³w9†a i8Ž;ÞÕÕõA[[Ûžç‰D�Àt.—;h¨rƉ3—a5�;%LÏhЯ/##Kc_]ڼѣ���4 iù|žJ’Dçççi  .—‹ ‚0ã©ÃGÎNæÞ¼Jµç;Þ¥{½{4ÁÞZxé^ €·Ùlcn·Ûh³Ùˆ¦iÈårˆÇãG0,—Ëå§ÖÄ›·¢7~ûbìÖÒ “¹é,Ê™¦‚¸8£( /ƒÝšÍæf�Çó*˲¬(ŠH§ÓˆÅb˜��E(¥”Éår¿ … �”K™áˆ—-ªÔÑIkRƒ¢|›D4 @g4Y§ÓI, DQ„,ˈF£H¥Rp¹\p8‡Ã–»'õìk™:í÷ïÕ{vƒÊrãäÇ…?½Ðóš¸ôV’¤²Ïç;c6›žç‰N§ÃÀÀR©²Ù,TU… ¤¥©)û\|áÚùs^}ó†1U€Udâ¬2°ŽxìÉÅXâÏ`Š ˆ¢Xáóù×ëõÔd2¡¡¡�$ šL&‰¢( ”6[”â �­¬ì8 /�Õq Ù H$Œ‘ôÐÏ´ iLJéz/K)Eww÷ ªª:³Ù|Øn·AP]]M‰ÄX*•z+/I­n1o=UR©%œ ú¿f�é ðËèõh)ëÄ@fhÉ¿ù}vqwžeÙ‹žù—i1†÷r¥V+Õš›(Ý¿�j-^J�Juœ6¨¯*6žÍZž/—Ëïü—tþfÙ+l¥õuìRWG`5ƒ¨% µ”ËäG±Xˆ‹ìVýë­”äuÆö¶:›G_k£¨wp: U%ßçÖðöêòI ˜Ü2ЂUö¯Š’§¶¦Æ[eÝARk²öùTHzc!úâ2pyÛ.Û{'»€úƒÀÁàA–{]æ¡�ÕQMeïIEND®B`‚atomes_1.3.1/data/pixmaps/tiff.png0000664000175000017500000000675515212624223016552 0ustar lerouxleroux‰PNG  IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  šœtIMEà ±AÓ zIDAThÞÅškŒ]ÕuÇ{ïsÎ}ÌÜy�Ç/l^F !LƒcÚâ‚Iê–¦DH´JÔ_ RU…/釤­¢*QS)@«„Š~(ª‚ªª ¥$MšâðPh jÅ¢ÁÆÎìÁöx<æuïÜ{ÎÙ{¯~8÷Þ¹3s=¶Ç#õÈG>�»÷^ÿ½^ÿµÎ(.ñ8xð QJEišlð¡”j½M …Br÷ÝwËåÌ\Æbפiúh___É{¿^!—"Ò<s:ëFççæ¾üÊË?ÛÏþÚ†ñÞtppðOn¼ñFÖr!ÁÛ=÷Þc­Å9‡µk-•JÅ;ç>{~üü—ß|óÍç÷ìÙSÛP @!—ËÑÑÙ‰³ö²…^õ\)Äû&k-išE‘N’d—ÒêÉÑÑQ÷Æo|oïÞ½ñE5߸xäч®>7;ñ€K}•-ÔXW”ÈÕ[¯¹mx×ðïlÜ„ ÍÑÒ”KÓ*§ ÙäZ¯´§lîÆøºYmîbøÚ›ˆ¢ˆ‘‘z{{Ÿž˜˜ø|¡Pøî}÷Ý·xI@~ë¡û¾þÒÑ׿ ¢Ê(¨Ë 4x„T"tý�®Ï @é´4Á)­PZ!jùrZëì7jI'Ž;7Œ¯}î/¹}÷íœ:uŠr¹ÌÐÐãããgΞ=ûÅžžžçî½÷ÞêEMkv~.R¢D�­QZe*°ÞâÄcŒÆ×Ÿçóybƒ†|”Çy�:‘�r¤âpÞ55a-�xãssscÃ� èîîÆ9·=MÓ¯OLLÔÞzë­¿ãŽ;’µ}¤Õ€[_j-öÞË�·~‚\”Ë# "¾ôôWxòÑǘ˜�äñg¿É§÷þwÞ¼‡Z317ÅãÏ}“ÏÝý »wÝŠóŽÑ‰Ó<û“ç©ÙdMÛÐZg`¡cÌfëÜSgΜñ/¿üò÷ï_Í4+¥WjÙni­9ó/ü÷Kܸó@ñý×ÿ…b°»Ÿ®b‰Ô¦ìûدP*tò÷~ÄGßD)øôž¼pè%�&u®¾Ž\0c0Æ µf``€®î.víº~`ppðÓÓÓ÷¿øâ‹…KŠZ­f­µæÔ¹QFξÏg?õ ïŽçLJB¾PäøéŒÏœÇ:Gœ$?ó ~üæ Pè Exñ~ïm^ùŸ W¤TìDi݈dÿDP*ó£ÉÉIŽ9‚sŽ$II’˜0 · ýõÌÌŒ}õÕW¿¿oß¾d•F´³,ÐJƒV™ÚcÉîëÑ* ¾úÐ_ðÁ¿ŽòØÃ_%®U)×ù›‡¿Æûÿô þî�C7"A[…d ¼÷‹EªÕ*Ç�gllŒ……jµÓSÓÌÎÎ^­µþÆÜÜÜ=¯½öšY¥Y+®©–8+õ{‘¥‘ÖY¾üÌ_ñø·ŸÀä‹Dù�ù"_xúÏùÖÁg¢<Å|�fic�%z{{Ù¿ÓW¼÷uÍ$”Ëefgg·9rä±ÎÎÎÏ'–Qk¦Yf·"JÓ×ÕC-­¢”&0Å|‘\±D„$6ÁhCG¾H¡ØE`L¶kd©3c A4iŒ÷¾‹J¥¹\Žr¹|Óøøø5«€\ÈG8”Ò9ù.g'Ï¡´ÂhÍ5[v…!ù(âØéf*3Í]ÔZóóSG83u®)„B]‰j¡-J©¦¿¬ �çAÄÞûښξjç”BkxêßþQ‚ ©Mùí?û]PB„<ýÂ3( Fg †AÈß}*¢™ÝU3³¯\QZŒ[2›m Ý�g�-"n�b¾P):J!õÌ­¡¸žÁ�x<õÌ®J‡ˆ’ŒžhJZØ€Zʳ纡âæ;'šŽ €Vz™54ÓÖTç•Rm€¤¹î¨FÚÆvP¨ó,µ´GÛ·^uÝð®á}]Ý¥ÌHÚÙ¸WJµp0ÕÜó†ªÕÊ£`K×&vìØÑ4¯ ‘ÏcŒ7Ƭòüw~pø �kÇâ¿ôȾixß 7Ü€xYÊĪN9„eæq¡/uR™¡Ÿ™k±X\æ#­~ÒŽE7æ]é#(×ÏUÇu×_Wîééa```Y=r±ÂébÏZï×­æÕ ¨Ýo×SX©V'l†áu1@+…^Vjør «æ`¥Õjç\[5³"”^Šðû�ˆ�Ïç›Ñk Òxq �‹Z­Æôô4"‚sç¾^íµž+ëòµîcZ¯[O¥ï¼óN[m­K#ÖZzzz(uõ26YAi�Fá¼e‰µÔ£uÇ¥aëY*É„‘æµD|}¨4ß{'ôtåèîî I’UZ¾" ��›¬ð�ÿqŠJlX([N�ϰX­‘¦–$IqÖ“:!Ÿ Èå"¢fç+KàÄ�øŒšˆàŃ÷ˆxðħŽGÿvþðþ[–%Éu;{»#— øø-C„AÈéñUgx÷½IÊOh lÊó«·mâÿu†;wocäƒ2g§R¦fæA\®½ Þ¡¤nZÞeÙ[”8rÅ.tX\‹Ö®Hk8œš©ñä¿c ·“ñ©*©Õ _» ØÎ-»:�â�OîäõÃÓüè§§˜�« •BÐ ¾^ïð M�U @B”0 åÞËšA"¸\­Gjï�œàð;ccèè(Å/ 22ZáÝ“eÎOWøùÈ ‡ŽLWÑF�WˆW8Q¨:cÑ&D^|Ë:žj5!Žã¶Â¯ˆ¬Ôu‡ ´ÆMšZ>›"NSf6á¼ðöÈyÄ9ò‘!�5"¥4¢¤Î›À{‡'£j … Š 0˜Àa‚ óŸ hãŠ5E!›72v~k pÎsvüCÎOÎqíUƒô÷–xtŒ$±(e²L`HÒ­3nctŽ\RÈåÐZá¼'u. µ4£ð²q�FÁ²Ð×±ÿŽmœä½Ó3LÍT ž[’ØqtdœŽÎˆ®R'µ8¡ºX££ØI’Z¢($ŠB¬µ(¥È…šMý�$©f¾R%¥^HizJŶ™ýŠ�½ñ©Ãð™}ýœ83=ßÍ[G¦9>ºÀä‡n»©�±©³ •a ‰òµÄ6ÍË:GgG‘®ÎWo.Ñ[Š˜œ«aÓ<…¼¡¯…†k·†«(̆E-€™…„W}ˆ•�œ�»oëçÁ{¶ðþx�Ý×w1Ôò·ßþ€Ñs1q*ÔK'$©%tòtwæØ½«“�ìÌÓ[ ÙÔ7ˆ! 5 aj6¡§g¹eÅFnXùp.åÙ—Î[� è)ð‰›û¸õúùH¨,¦ \µódÀÛTŽW ¤1a.ÒìÚÑIjµœ(Nœ®P^´œ8Ses�!¶pr<¡i†w„äCÅ–^COÉpÕ¦<› °°P#IÏè¹3 –©¹”rÕrÃV¸jh5™\7û]ùa&4†­ÝFia°GSˆ õž æ-F+~í£Š¡§¿Óà˜z—¾§ÌÌzƦcœu”:ÆgRFΤTc¡˜3” ¹°ÁËdãÂoëD•…Ó¼ý³'èèëeǶmlßr ý]Wá\]ňÔ+ÒÄÑY8?Ue¾b¥‚Æ:Á‹bëps žZêùp®ÊäüÕd’‰ùÓT«ç99z’Oݾ—�\{`ã)Š÷c VÍ0•>DZÃs¼ñSá;‘Pè‚þ­ýCÝø$DIˆµA½$VhÉ#Þ£L‚ÂÁA�#%*¤XŸ0;=Ku^H«`…SÂ/ßփȯo\B\i^ùî�›s;1}ˆW(2Fë­àE²\ Ä„`SA¤ŒVÍ2�B¼Ô;‰€DtíBëzsÓ ©‹Ø™oGÕ†™–µŽ…ù 5?OèŒcH .Q¸D"!õ*ë ˆBY¬U È Þ‚³õKê§›}`Š“˜d°Îˆ[>š®”åŠêc Ôñd}ÉêNU/u%mÀ[¼œ´VDõ�6\â³~˜\VªE £ :ºÞ�<âÄ‹#Ÿ}®S’1s©×EÂÎf½.—*‚¢úavW+’K‘¢€^`ÉÙÁÌ�û¿çÎÿœ3+XâØ»w¯BÄÃ0ô¸ÉCQû5H&“Á®]»Üræð–ñ°[Â0üR[[[“µöFyÍpÎU?•9�6Ã3Ó3{÷ý|ßÑÝŸÙ]¼é@¬µwvvvþÎÖ­[Y H½…/tÞZ‹Öc Zk´Öär9kŒyn$=ò§‡zõ�(ÞT ’¾ïÓÐØ€1¦|J€X˜k®8k#0F£CM†ÄãqÁf!Åß ›ƒ¾¶cÇŽÒõ—W/uýáÆ YõLVéXíÒAKs]ŸlßÞ÷`ï/wvv¡ŒAÙ …V˜‡¨aµ²eB^å">] Ô9¬q4ö7нk~ÂghhˆÖÖVÒéôÄèèè Édò_žxâ‰ü’€ü~ê�þæt~öÅzfqh Ž¥ûÇR½ÕâØÖÐ̳¯?Éöû¶3<�Âl‰/ÿày¾ñÁ0~aŠÙÉA&“Ù ¥üæôôôg8 æùHÂÔ’lòùÛ/ü�Ã{�óWo}™»voáýÿÀ‹I^ÿÆ[|å§¿ÎÉ“Ÿ.0rf‚®�íU‹¬^¿ŠÛwöó÷/¼ÂñýC‹Z¤2Z[[Ù½{wÕW¬µc‚€l6K&“é9qâÄ_766> œ¾H¸ˆ·)èìkeý漸‡ £HäÅ=® �ñ¿?yŸ¿ÿ<öÙï°õÁ[�^4YÌ÷:|žïþñ?“ÀÇ«µªÔ*k“R Ïóªt³ÖVµ§©© ß÷Éf³ÛÒéô-ó�ÔÙ(‰àäÛg¸ýá~6ß¿žý?8‰ýC8§Ÿàû_û7Í>¤­·£- EúÌaQ/ DäïWíj„³6TÎ{žW²ÖçQ+¬óœ81~ôçoTÅM"ªôøÞW_C”Uä¥çþ‘81üø(Hâsð•÷q°$µòYñ£Ê¢+ r®¢�sf¾�(WðeL¸9–gÁbq€¬ª{¢,�óR†((/ ‚¯DÕÙk-QÉŽ+ߥ”pV1H ÏýpTT^Ûæ.(f¤ëÚÔÙß׆‡›››‘ÎU]VZÊ9Ñ„q®Òc¡huõœ`UW‚uë×U�»^òY£”²J©ù@^Îüø8ðuÀ_HJ¾õ{ßúü¶Ûn{xË–[±ÎVé%dtTIkUi¡°ÎF׊ˆ¦ÖY<å‘J¥®ñ77Áœ“]×nŽwMÊÙògÞØÔ¿)»jU+×Ô#×+œ®w®ö{帖^µ€ºöF +Q{ób®·àz ëÍ]DíuË®¿… ŠÅb]3¯Ìbçœs$ R©Ô *D…B�¦¦¦Ewµ–ß‹Qb)T«Æt:Íš5kV¤Êßd2Icc#Z‡eÏ¡ƒ(;~Pëpº•¶•�­¦»`œëÐ1pX”Š!DPÑõ‘ )U5]Y1�Z<þ,ÆZ¤�QQ>¦0‹:Š<7€˜LWÂZ�KI²­Žø„¡( émÑ@gÇçð¼µ8c°&ÄXMCÃ*Ö®ßr ÍV ¤2J¥Aâ)/úÊZj" †àÔ{ˆ BVL B"�×4¦Ók Ù0@†¥’äsY’‰W¦’ÄUR` ã™7œëÓx=q¬ÖˆrSL �ÉrdŠ6Ê9[À�PK+¥®á©$êFE–�ºr†Ä;?#Ì�¥\äQÅR�5 ¦ ™ù­éBÈh^a�2Ž ‰Ñ!Îérþì¢ÍXD4½åªzmä0ÆàŒ)±³S4¾ó3ÌäÊÕ´3„« H Æ Ã�ôí|Y�ÓZH©bºrch•BÆqÖ`�ÁY[µÌJ-²@ÑS¶Œ> yä,H¯Ì FƒTõ@X‹5Yt_ÂE;í¬¤]ÞGµd§Ñá¬PÕˆhÛT¶ˆÃZÇ|?½ :í�Æ ©™¢Œ“qT!y_L�)À0hfš:p;úÀžÆáEåWvR%(1�µ�›FÁŒ.⩚£A,œ0ÞPø½šRGQÊlG—Öo§}ð0­žÄI‡Šbv†|{7¹žMÈþO Ûsˆ©¡L#àcT–+3—¹2!ØÚ»Ž‚MÐàû¤Ç&q-l_ïGõ§”ÕæÄÜ\n…)J$ˆÖhpÏ�ÓpïNF Ôéw˜Ùx7ÁtñÀCÄ6ÝIsKÎM36ù …â ~¶ŸfÙ͈ÿ]Ý ¦¼~Œ±þÎ{ðZ¹xá]î¹w+¢ˆh£þs½èåÝhø­ ©Ú„(§P1EÃ}ŸfBçIî~ â©T$j6 ›ßO©x‘T²—‰´¡©É#—飫ױíÖ‡hJ^!S(±qc?ý›úñ$£Ë~dUöe눭Lè ÈÏf0¥<Æ”KE¼TÉÇ>�ÄKøX£qÖR*^`fæ4¾¿ %Wsnòù"ŸÚù'LMlD¢XÝÕFPÌ’J¥H&ýjȵÖÌ+›oZ®e­Á¤?¤púÅs‡ÉŸ=B�>�ž:‹Í�Q*å1ÆFÊoCpÍ$ã»P¢‡Ð Ñ××ÎoüwÜq7““Í8§QB`t@¾P ¬-‡]c"gw ¿Û¹ag¯ÏŒO0;r !$R€T‚@*AS{' ÝëpM½xññX©Åðc°¦ó^}í}††NÓÑÙM.—Ã÷cø1Å¥ËiRJb´F)�ÖRȪ�TXQ¯ù°lË„�Æ„J)´s”rZœ›efä öÃãtövÐxËèÎM$â=Œ�¯¦­åq’~3;îMòòËÿÀ³Ï<ÍÀ±·ééê$ ‹œ:Íæ¾’ñFÂP£¤Œ¬3ŸVò¦V΄A@à$¡vÕtÞ‹5% ‡Î`>¦}]�wÞKw÷£H,ÎÖ­]ûï}ÄøDë`it{ô¶s;´4 Ê©|MS±ò|áÜÕvâŠ,R 4ÙÙRÔe,«´œEZK.o(•,΄¤O2“¦ëÎûiÝvqO÷$·mîã½cÇñXÓâ[MéÐ!f¶¯¥­³ùjŒJíVî#s_ò—r!a1ĺ(S�y‘5´¶J‰E ‡ë4cé)ÆÇö²vlœ¾‡ö“‚µ=œøŸÿfsìc‚¾/€x~œüx&ò cAX´k€ÕµÜ‹(?…óñã’¸rí(íM«RX¬±„Ú^Ò`­eüÔ �«»Y³í´4·°®·—äô9 WN‘h쥩k5¥ÐâÅ|œrà ž¯­šÍ+NQ”㳿õuŒ «eh¥ð©tQœsåü±¦mŠÃY‡ âQwvãíŸóÛÑŽ{>æ‘§qJóãÑÖâÅâó,²¢EJÉää$™L¦ö�9C­iö8®öâ+Çe`•?®”»öžòë×èŸÆƒš× y¬µ …ëö~—Têú¾�”’B¡°ìãrÚ¦ %†Äãq„NJioä×A™L&ãÆÇÇ Pm[.Ô5¯×IŸÛ9¬íé^Tí}SSSbvvvÆó¼Ùe‰ÅbÇŽ9òÂÀÀ@óÍú�ÖR?gƒdù#J¥Òù�;w^\6�b±8òøã�'ŸÏ þ†sŽ0 E†¢T*‘ÏçíÉ“'«?£ø?yf¤ Ïà>©IEND®B`‚atomes_1.3.1/data/pixmaps/td.png0000664000175000017500000000136515212624223016221 0ustar lerouxleroux‰PNG  IHDR½ù5TbKGDÿÿÿ ½§“ pHYs  šœtIMEä �«!‚IDAT8Ë�“MhQ…¿7™ašéL;MÚ¤EPZ)DZjQŠ–.*¢ ܉ø³±‹Ú‚ ‚ 1T .¤?HAW®ZP7Ùˆ .w� ‚ ©à¢?&MIl’™dž‹ÚšV‚¹›Ëãœ{Þ½ïž'¨1®@°ÞéО€®çðs Sj°‡.hh‡î#.ÃÅJ\©±‘£�FGŸ$ZZÄ›¦¦äW!žU‚¢ÚÍ™X ÛqLà5Ч–J´&“´ôô|Ê{ÞáÂÝ»å…ÿtbÛŽ3 ¬}RŒ� d$–u°˜JE*Èê P þï¥ã¨À- V©èË¢­±)%Fkë}àÚö›4ëý�ú288Wâ“b‡€�O×Iµµ¡ƒ %j0x¨Û±áØ^0’É ­kk��Ù,žªâ+ e!X³, ¶�šÉ *›Ó EáøøøÙíq¾Á`fÏŸ†tÏãW(�¢PÃM£X,’s],]GªaœæÔXš4m^ ±XÔu¥iy™²¢�«¯G* ˆÍ%~^Y¡#¢QÓPàpùŸÛŽsx»uv6l\VW ƒ¤s9:—–(›&ç^¼XVÒé¹À.o|¯ëï?P}Ÿ‚a-•èŽDØcÛìkh ¬i4/.r=‘0%ôV3[Ð¥”˜¥áp˜�iVRŠn<~s(�‚Ye·SÿD/à|3›Åðý¿žñ¼ á}<þä4?†;;D2±ØVþ<Õ]™Ï£ÖÕ�”ë¥|¾ëÝØØp!�vkýýŒD£ò¶eÉþ‰‰‡ÓÓ:ÀÉÉÉšë¹ Ãq�ó G`èäÔTU®¨œã|°–€Óó�«Æý ÞÞ³BCmIEND®B`‚atomes_1.3.1/data/pixmaps/import.png0000664000175000017500000000123215212624223017115 0ustar lerouxleroux‰PNG  IHDR™g�ÏbKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÞ  Qeÿ¾'IDAT8Ë­RKka=óÊ«IKшƒ MK´ TÛi1ñB).\»(ÔÍ,Š¡¿@⳩¸Ét¡*´nœ`k»°ê¢Æàc Q›˜‡M2If® §ÐhÛ¤àÙÜïãž{Îwïw™iÀÆWy– ‚u¢‘@-€&†®MÞ=®³ëÇzÇ·|Þ¯éúº,·"Àò,ìv»…¢ˆc==öxl<ÃÍ|(¸¾�"ä>‚Ûëé:@´5o3ãq7ÿ¨…^$·É0ldˆ©j¥Nú‹§°nÛ‘œ¦MÍ®®&ŸÅãÉ|µ:E@DIn0c¶3Î`�àÌ™Åsæ}ÏèðÔŒÿL+$Q’E0Ì{]I)áh÷�ì;º°Ü�3§O8¬VËQ’Ï6lâæ¡¸¶XßÁÝçjsÜšž³T`·¨ê×1G×ÉWŵÅÏ /ØÅýþåK£ÖªNب±ð$§ �EI–š ˆ’|áð¡}¾�^›ßÐð!ùšÎ"àvò¼%ùÛÄýÞøÅ{¡TƒaüÙ¥D2W» ¾ã}.†a¢ÍZ˜{]vX9Ø,X–A÷~d2Y¼Yy÷‹ˆÆ¹Ýª‹ê“²³÷à§dº?0è ¥rÙŒ¡Ä– º®RJø%×lˆEua¶ÖÑמø’(•5niy%K†1”RÂo¾±‰È¼ÖÓß�’a ¦”ðÇÍÜo¤äסő¼KIEND®B`‚atomes_1.3.1/data/pixmaps/cedit.png0000664000175000017500000000236715212624223016705 0ustar lerouxleroux‰PNG  IHDRàw=øgAMA±� üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs ‡ ‡“@‡SNIDATHǵ•[lTU†¿}ÎL/Ó±-*¤ TZ*LKJ!H„*)£A/øfb4&h">y J‚¾hDT¤¡"(Q.š‚Ðé´�iQ*—¶´0-�NKgÎ^>tf %-âŸs’uÎÞYßÎú×Þþg)€�»Ýé¦il´ÂV‘€Ù?$Ñ¥TÐP꬈TZZq¯ZùRßvíÙ^’—;syú„I(¥n™dYÝÁÝÝÚÚÛ®{»Úôw^!#"h­Ñ¢­QJa³Ù±ÛíX!M’Ó‰×W×[[WÓ¤-=÷ÅÕk¯ 0´S)EEYçk‹ÑZ#¢ûA"„­0Ážn::ýœ¿ÔD}}¹®¼„9³æf(Ã8ôí¶-‰ÃD€«—NÐâÛBͯ¯Ñ××Õÿ?2•#ÉAÇ5?'N6²2³³ ¥J¿ÙºÙ0PÆyKÞ!Ù)T–?EÀï� ÄÙ수Ÿëša3&í1-’?4@¬Ò0ìdº“3g5WÑìÛi%@)@a³ÇáÞQÌ—›¿ µµ•´‡Òâ•¢ph•!Øþ#©÷§² h=íg·â=ú&:D)…2£F=Èø ã¸/ÙIiY ))©ÊPƲÛz•H˜ÞŽcò1oñ[¤$ Uû–ôû0”�#ÑÁ¸´qPøäB´Ö„B¡iwT¢úªªOÖÒä;BÏÕƒdº–�›¿Ï¡5´6îÆ0M £ÿMˆO`ìØ±XZÛîÈäÌÜýÕÞBÓ¹kÔTýIWk9©$3ÿé·ikøšúï#ºÓ40Íþ�ã"‡õ@dà˜½üg$.›œârÓX=1{á«8âœ,_L°£ÈdÀM%ª,‰Åq )¸ ¿b¼kÕ'}üÛpŒ®Ë{™”•Ç”GfQ¹ïš½;\…aMž2}Z‡"-k`&¦­eö²½\¼háõøè¸XŠÓ)<:9çk>åhéshÝ;`€n…»Qʘ1ȈÑ.æ?ÿ;¶¤<êëô®bH;¹s ±®7’Òõ1ÛÞ7oé$Û`¼§bâ”�#Øÿùh†RkK“³§hÿ…ôŒé$'§à­©8^üo¬~×Ú|àFÒvîó³ è=”² ”�R6P& ” ѽt6ïA‡ýÇI1‰ù�'zª+6¹?ºö„¶ä•5ë­€m°áP"P}ä32²gàóœ"cj. 4ÔV‘15ëkÉÈš‰�u§™œ5�œYŽ³Þš¥mÍ<ÀøÈæKDÌ„¤‘ü¶¿8k¾ðw,n¹ðÏ ñ¹!â¦hœ‰ lܴုÁ+Zk¹[i­Å×à• Ÿ|x ’øV“ÝÛv¸ƒÝ=N§Ó‘/Bì\—è¥ý¾i3 " ”Ò�@wEYY¹ \bm½€Ó;÷¦P$ùõ{ÌswúÚ˜;§€×§”IEND®B`‚atomes_1.3.1/data/pixmaps/void.png0000664000175000017500000000027415212624223016551 0ustar lerouxleroux‰PNG  IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  šœtIMEà  ¸®�žiTXtCommentCreated with GIMPd.e IDAThÞíÁ‚ ÿ¯nH@À£'BÚ`XSIEND®B`‚atomes_1.3.1/data/pixmaps/molecule.png0000664000175000017500000000206715212624223017417 0ustar lerouxleroux‰PNG  IHDRR;^jsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÛ ÌFË·IDAT8Ë�“_L[eÆŸïë9-§-´:þi¤C:X@E662Ô…HLÈtY–,[še`\æ�D‰Äxg¢c3‹1n1Û2“¹?JÐEI BͶ²Á¨m)´…Ñ ¥öÀ¡§ƒsÚóyaŠ&Þì½z/žç—7ïó¾èí­ W®˜Nx½†¨(–*ñxåÕ;wì¥x¢”&Þ¶ZåÁòò»ÕÚ¼z¨¸xuâܹë‰�÷S)Ë ÈdƱ¾ž¶ñ¼Ø”]¸°ýÆÙYÀë}4�f…±EjÊŠ�ŸÁ™3¯ÇÆL—#“'¶|XUÔÔ| N’ø›�m¼qëÖ¯ ”"Mbz¬¶žæd'O>U]X82ípè8›m7€mý‘Èð!—‹4qKKæwÒéÍý±˜le da¬­MOZk6/½„½?´ã7i-‘ìÓé—“ó4€"qpsjšÚJÀ鬳òüÌA ]»[6:÷6XÙ¶�“¤êÏ<ä•–Êþ�9úÜ`�À·•(ÇÒÒ·xø0—Kè'Ù1‹Š€X 8R« 7yhå£Õ55`��І‡á¿çAæ«¢v,,DY0¨ŸÏ|�fŸ˜—, HÃVVìÜ 2: %ÂòÆ*ûd`##aŒ�)äöm>êv[~ä²€îîÞrÕ2EIJñ—Å«ÝùÁ¬ÇÐÛudY÷Ì/š�ó÷æç7{€È¿¹öôÔ^çùŸúöu^ª¨`—y›ySÇØª•ÍΘÝ�ùz4jü|h¨É[;p¹L 7¾×ÒàæÕ˜¤¡€`ëq~ ä›Áªžil,Њdòwø|b=wê”ÓØØ¸ëp¨ÕÎjžª]9�Á®©)Â’ødìgÕü|=ÐPŸ `;Ó˜ dm-z–ÊrèƒÜ\Õ)ùôèѤ¢£¡#)B‹ —Æ2õXÍ•VMoÉ2ˆ$hA&³Düþóû•=œ,«]¢¨Ï7BJðr 2å;ÈÍÑ÷€î›òI´©©I§¯“x<†pX!|�S¢®¬hðx‘Ÿ/Âï_A  avV8þ^÷z'½š–Ú1?ÿ“e�@õ§9Qä¿…R)Š›1F±¼œ&‘ÃaÓÝ‹ûqìØiÜ¿ïVÔ&Â7Fããý²¬SEÑÒ %¾Csó3ú}û„³íí``»vqA‡ÃÚøß×=|øµ­¾²òÄÖíØlÀßy™¦*ž‰§IEND®B`‚atomes_1.3.1/data/pixmaps/logo.png0000664000175000017500000120517415212624223016557 0ustar lerouxleroux‰PNG  IHDR ȶøŽ®%+zTXtRaw profile type exifxÚ­›ir,¹n…ÿs^g�ËááxùþKºSw;Þ³}Õ­¡TÊ$Aà Ó�ÿúÏëþƒ­´ær±V{­ž¹çß4ÿù7ßçàóûüþEïÓ׫¿½îVûú6òUoù¼Í÷øu±Ãë|¾~î_7 ßïÿ¾Ð÷7að]ùù‹1¾^Ÿ¿¿>¿.ÛŸúA Ÿ;ûýõ_JñkDùóóúQíÍ~›Ú^_wÎ_/µŸÿçd±–,ó9GoV;ß·è³Ï­�&{·÷îûNß/|ÿüýÖȘâI!y>Ç”?£Lú?¤¡×ßçæxcH…rª|N)|–†¥d\¸.|¿¦ª`þ›Ÿ1ú‡ÿÊ´¾Òä¥Á�Uûqí?ò£ÿþ�ô°ñõŽôyýç…ê�¯¿-ë÷ë¡üñzúqûøÛˆšÿ‘˜ñ×ùŸó/«zïn÷ž÷f—G®Ì¹~Mê{Šï;Þ8­÷g•ãÿÂ÷ö>:Í¿Xéíü¢¢&?ôYËrØa„ÎûºÂbˆ9žh|�q±êz­±=®¤5ÏúpáFK=íÔÈŒE®$^Ž?ÆÞ}û»Ý �¼ß�wÆÀÅñãÃýúÃÿåã/ºW5‚‚Ù?Qc\QgZ9}æ],H¸_1eEÝ qøè_ÿia+X^˜~~.1Kø™[Ië¬ê/|dÿ©±`û너{+à+•jð£…@ë39gp+„Râf”1§TYª€{ó7Þ{c‰Ÿ—AO¢P“ÆÒô4X¬œ éc¨íy”Tr)¥+­ô2jªª°Z­ †‡%ËV¬šY³n£¥–ÁéÚ¬µÖÛè±'L—N=öÖ{ƒ›®<øëÁ;Ƙq¦™g™uÚl³Ï±HŸ•WYuÙj«¯±ãNnSÈ»nÛm÷=N8¤Òɧœzì´Óϸ¤ÚM7ßrëµÛn¿ãǪ}­êï«öçÊýÏ«¾V-¾…JŽOöcÕxÙìûApR´f¬XÌ�7­ µf¾…œ£VnR5Þ¡*Jd”E‹³ƒVŒÌ'ÄrÃ�µû¹r»n.·ÿÕºÅ?WÎiéþ?VÎiéþX¹¿®Û߬Ú¬·b¯ Ý ªO”ß*—Ï-[=·°²ëôiþÜz¶±x,ÃáuÏ­wÞ]J#üÇgBéö®c´ne´\B#€G̙ΦVlìB"ÕÁøú>Á¦ßi¬Q;$FeX{�Uβ®žN/«Ýf}׳nÓŒeÛiÙ$"Ä)…˜jOüîthy÷Ûq㕸GrmÇ›I�Ž.˜©,‚â+€Z¾ÝÚöµ~��™Ñn²QïMžŸÓ¸¹ÜÖKеwÇ­B¨g¦=öYuÆ¢â5Ží1»íX`Ä9¦ò@7åm9­ü<ˆP 8[5‘[Ðì�¸©ç’Ü=©À�%”ë™AU•Ü‘Ðð,$_¨›& %PkYó7çÙ c^ƒœ&ÑŠ×Áã~�#é.+!è 3ÙƒºÒuÃC ·CV C¦ê*ñ*¤A ¨×ÅGˆR-ùhá†j$b^[Ø’Ø;J "_kÀÈ$�öl´êöŠ@ñ«`6î¸7:•zD`&ô ¸à©*†ƒwàH„|1 % é&è©PG, w Ü‚)]p‚z…ýë�ÞºÏm-/Uöº¨(k21�X#JxëÕ%&]uX\@µ¿¼})qÁu f˜°5áªä ‘‘&ëÑœN†6Æq ¤¾ u%�SãgÊ0i‘õŽYàìJ‚ç&óR6¦! ¦—_“`_•È‚jxY•´Iâ VŠ{œ ÖeØ^|S뾸,Jïôz!“…¸#pJÉ][ðáÈÀêÞ’.%Â3‹ó{ð`™Í¹˜�¡ƒ*Y…%s«_f¤A�òõÓ€ê9–R«4°9R©-’É—DÞ2,D#jhÖÆò® & ZNEJ!/¸ÙLÌG!~8¹“'£žyuµVË ®c;›,H§ºËiT„h¨¤'ìYÜAJ 8%1gF âÇÄ,¤ ×®`u”F$bjŽH-‰Î­H5�ð3AyÐÑš§F€æÀÊÒsý#Ë.�PÀêŒ –¦cÕ8"kÆA“Jâ<üw¿º_^€È FôìžO“lèÑSÈðÅyпmK$˜!¡[æäQþ0ØFeB·ŸÏj{¨L$;ɾFRÓ‹÷'Þ,¡° 4Ô.õU"úl;ä/« �6¹ŠjTs.c]”pç RÈ)Sè-¸¸‘ÆÉ•Pß›¡à¡¨Tß…£Ãnö´4y.Å�#u ç„hEtR˜ %µ ÔËíQl¬' ¤ÜÞqµÝ!µ„Þ=Âõ�Ú–ÒÂH\%ã°¨ŸÐšX™56ÉsÖ™` æ%†ÈÉɺváBStÑ)9}Qø¤jã¨àaI¢ÓGmù9É`ÚpÚ�* ÊÞ…ÑRñ…�A[ aMZÞ}sä T `½DhÞ\?eÇ|(@«^YIœ™ÜÆÛ@ ]äÐ7‡€PÕë˜H¬€¢Pi x Ü,Ò(ælí ãa%& Û )ÏÝ—ç:uûÕ²j]â£!çÚk¨¡6êàq±£�`0Šd€³'³¶=tê—Š å¤×˜uƒ�™$+… 2DÆæXĵaIíº ÚwÞ|2x9a"J¤blÎñ{†Fõè/ò"b™×D‡¡ÁÊEÆ9@@7ÃF¨Fb+j‘ ÀËR?ÿ(ž§  —RŸ¬�y4"P| ˆƒÎ PG•T?XoÀ 6ŒÐF c®a Þ hL+ºVŽ,`dÁAàÄý˜ß8�¸ã  "¨Èb<�Â:cP! ;â!ŽÚ:7È 5Âk¡¿*LAÈ‹ � ”Ê h·n!öÈÀ¨«ÊHÇ�¦x)3<9#Œ#Ö¤�–\mv”öD"ÌvòP78WDæ‹5Ëpƒ²B1ì+Ò1¬¸½)]ÐÇU= ôÄ(îÍë$<¯x>µKåD|ißÇpTpoÞ“œ*� !ÄÜŽŒœM‡^ ò`Ð\ʘ7 ŠÀ^²öd×#nÞ-«‹r`l ¶¢Îùhhí€.ê¡: ¸Mª$30*»ôn™F&lª„) GJJ‹ÊMŠ«+•ỔK=reA&|·íaß™x$êž•‘òè`!0’B$ùû-„yt¼ÌhO);“U"l”Š 6´D¦&S^–W«{Æüº?Öå3QÜø›O÷�|•ˆÉé•¥‰¬˜Œƒµ æ©Ý;üÂåàdí" Y(r¹ÖUXTÏÀHekGßR‹žjár°ê¼k2ZêiEŒnYiˆøŠ %Ÿ4yƒ4p,’‡Å‹dc´uL�zÀJm/nžèLÒyàSu3¬»¿SM3`¬�á€?¢\ß@Œaø½ÔóÃî/J F™>ñ¡)×5¨¥)åÊÌx?õ�r&¸BÈqÁ¼.bžÛßAHSh�m5båX†Ì1Cð—·Rµ‹æ>^Ç E&±~D¡÷…‘ã ºj©5>TH9X¡­…°C(Àµyqo »Z+jíð§ Ó°´Á‰ex.—ZÍž C-»$¤‘•_"ÄéB!ÝÐÆè=,ªþkjBŽ™Úñ}=ÓÉ@Y7B‡µSçÅšÈZdL 55–[./S`^?n­m>Pñ 0 Þà÷Ã6m�€8e�w¦ž9 †é@˜YB�·IÙÖ$OÀÂÃh?€¦DƒW�x¦§À.¼§9¦m²Q“f“#mlÍ€SËØ+ÊI4ØÔrk�¦…©RpÀ0;Eë^/›š€%mC €j&M‘¾¨„­F,£ pe¾F5HÆ?³©M"A@HYó¡˜äl4yÞM„·~E€0Ñp+ê ¼>†äÕÆg‰ÕqÛÜ6³šIœz�mþòœÝP*Ah_Ywí*"�èRu_,– ÂSÿ¿Õ�€*�ƒÒ¡£=²â?.*ÿ,ד£B¶Þ” sÅ ™š˜ì9à„('ÌQý1�`#ÿdúÈš0÷ê¡¢H±ÁÙȵ7eQ“ž—ƒ4 DÚÕ Óá;ø˜%P`Àµ€xó§±ÔÒñ 5°>„=ö  ü30ˆ-3¡ªü¤+àWîzdGÖþ§É¶„zªáFÈ{T·Y‡>@*Í”�£€ù’ÊAƒÃ´ÐQ{vƒúC´±Èr\-6ß ÍÆMçÏp ˜bV ø=Á*g>ñ iÁÓj HÕ@„_[ ‚O]!�i#BH ²xËA¯˜5º}…UWš ¹�œ¾›¿�”Õòj$2|© £ ˜¤$sŒ “´+š—% �qj‹GÑT1b9ˆÒ$ÂýjûÊ{ä ¶c�åL1ØCpð�²ËÜÉã¯Ñ"¦B÷ÅÊ1Z¶I' ° ñ·Rµçˆ "Ën˜DŠÚÍ,E‹n`7W7{ƒö£ICò}J† \;¢Ð­�fê�‘3e‹U�]ȪªÍqFCQ‚[ûÉskäNìà, Ô‰[’pð^5ÌI�±e94_ ¨�`” ƨhëvy²áCak¿?HåF5r;N—YASMµeÐ –7ÃR‘R†YBR°ÞA-}ÆÄ·¸?jn“BííÐFÀò¢ ü(Z}ÀÐ�…ŸÒ°"í•kHD5�b�ÐîÞ7•Єu[À£$m›jsT!‚¤¸èÈúÄTÊBE#Ò0»¦¿é’мÍg¤< EEþuS…ÆL†ˆ‡ 5/jymÒS©ŸË# ¯ø/÷�ܳ;KK2%õc`‚{(mm A³Þ&Š(ð÷LÐ’ãuÓ’YÔ±è‡òÒZFÂÔYð»v÷±N0æ„K/Å#¿kj¨TÒH�Œ™‚¹†ÐQ:Á<öìQô 1hALñHÈFŽkDtr·×Ò)ÔþÅ¢6¤c–óà´´çÈpwpG‘6Ç_råSoÕ––G�QLDtªßñÊÂó‚G… à$¢u‹çGŠÏ×~¤~"Ó„ýI¯Ôí"�žUo ¸¨ƒŒIÛK!:m ¦ÓxXoL$Ãçµet,žÒCƒZd)&É«¡"w�£ÜOc�½ö²ÃB§‰ZëÀpT·¨hçc ±€ñí’Äìø1.¬‡Ë^¬éí(0� ‚¿‚öu{íÎìâ¬K,XjR? )‰,ë˜ã‘*kbZ€’м q‡QFçºÕx& ÏAO�’ŒH€ƒüi ¥îáÕ™ÞÁuSš k+à^"”Agv:oÅí ß-=Aj⇆ò/“©›&ž»p-+6Úb±zª2V86Û�j`D8xU)¦ÍD3øQ­yÐ;˧RrU[&£$è mÅàÉÁEr ÚuŒDº®jôçEÉåmßY»ï Í9nûh³;�êF§"1¤à¹´¤�Þæ“Ó·*yš‚öÝ—gõšš‹BäA&0eÒËDÜ®¶“”¸ZzÆ}.—Z¹ �˜¼9P;“ƒ >ˆOŸ ©s÷½)Т ª-pu'©u$/sö['¶œöÇÓþM|ú%yu’HŒ“À“tceÓö¼¤&“81V‡Ê@¶ÎÖu9Õ:¼ëqx�ìuÕw2ð‰¥›Ú'A1›a"wÝŽlvOàšHm€{l‹¤!{Áƒ!:‚“À…õzJˆü2i•ÀëÁU«bj˜˜êbTV³’§ª.NŸP]œ¬j]ƒ5P3ãB©£^ƒ:š:È cà±’Š> §ô\à­"ÚWÈ2³ZXõKxœ¬fJrA¾s¨ˆŠ88ô#ãÀÆEÇJwÕÿÔÖ�–‰è‚XöY…w¾×²l]�öÚK�«´F®L¾!Þ¦îP6¨½++¥:Ãhs•ˆSÁ¨#µÍ<Ù´tŒ¨«Ú·ìQQO3j/ 1­ÉvPÝ i‹O-«*mcòz( Я ?Õ›!öFørB•#ÕИ£NSLFdY¹*‰»~ýçL ˆ¬Ñ.ÑÖQ.†Cn_ìá ?XzT×Î>U$ï½äçÛѼ•�üÆ;?d‚¾žw€õkÔð7¶2Q0`‹…¨dJV®ÕÉ“¡ê´P |ŸI{cC‹š[¢ã;å¹÷;¾Ìc%¼ƒõÐì:œnªÜ>�ù&x£ÃÕrÅ0ˆºÀÉ–š·júwí¢¡RINHº –𴻦•jÛ´µ#ÇÂ�hH£üNJ x7UÆßlí$j‚,× Ù¡ÞFª„¥iÛïƒp¸ÚÒù¸µ€ ~í�]ŒQ&´…LÒøDºåÕ˜±n¨³D]5*p’m¨ Òšø•}užF‡›“ÐqPÖºíÓ¸ˆâ¶À8Îù�ínâÀšå&�‰}Ô²SÁX…¬¬Â±õ¡+£ü )‹£Ã Ò®M¨vt’®=•@!”P�3"<ìÅ37ÁÕ±ÿô4@²©Óa))× �i‹Nbƒ\-G�–øWW_Z[I Õ&†Ï-ÏŒ>ëØ w�™>)8tšŽR jUih:$«éH¼Î‹êlB D5 µ¯›ê$ÐJ™š:”qµAÅ´"`œÉ‚†Š¢Æö½@úê[̓bFxî®Cñ±ÀÌÚzO‘šŒ7½Ž[ ÇíöéU!µ˜CŒ²�Êcr¢Ó6·r´·Ô�Ž­>Içn–΂ ¹¸R½Þå¦ÃÎ:7Ã’‹Ï �©Z�Úf &\ÉSµ­vn n“´Ý²>Û¶„‰Í2¬’¶$6…ª×{eõmíªõËkʶGEÏ‚üå«ûýü-Ò�8“”ó5oUƒvã¬Y›ˆîYhi‡³$أº{éñ€µS»gmÔ˜)¦óRRµóà3Êy>Õü�¡ç;eˆýÚ€ÞB�uÚç{j«ˆSËUgPˆ !|5ÞA‡¸l>û­Úƒ²¸&lÆÛü´ìÀ´Â…«Úcx‹/Œ6F6ŃÑQI4\ÐÞ íO1ÃÒ]>F%ÂR¬©6››åÀ’"´Õu€Ô»»dƒâü}¶?-¯?(:‰܈‘l Î}Õ#×fãaº”šd¸É®¡ŸÖ|[¥hŸ"]�YÿA—¤ÖQ«þv DPËvÆKþMm‘O=_î�iãªg´>(v>mb½»ØdÓ>6臯Äp¼çÚh³±(Õ€U¹ué|2΀„ʰ)µß0Þ 29ßé¦úëUýŽ¢íÀšÔ"]ê ɘÖ'ĬvÍœjd¹m$¼j�‚Æ� ÁÞùì3tJ•ÄŽÖõ.IÙœ9)É‘5ȼÌÐ�Iûë� X©(¾­3È6 ˆÂ”·#¿GU£™Bkßhï«Ã¢[‚Ò©¶!oÇóOÐó,m¨èdNT4�‘ö påùtr<æE÷vÛÒ®GÔÉct©e›¯ªˆÝ@‘á#8aŠbe´Wüz¸FÛŒ5“uð¦wR�jˆ“VRˆüaP³ÀC€—šCø °Iá䨕ÔA6C˸hÿ§¾&Yá´ëÒt€¾èjcÆ £a#µUQw)“ÚtˆIÃKŒ¸ÊŽuÕ‚\K‚¬0CЋ‰:TŸ�ËfJÃCÌ#ã`—öGk'¯mèÐÇÕñcÄF�-®þt5[.Ð1„ñ9b�JV}uZ¦*Q˜^…è^ØtЃXž`X�¬£n߯³]\Y}Ò+{ejD—'Æ#¥¢§*´ÁpºÈ䨓 ²ŽØ$�NÖ f�z™Îºµ'ŽN?a¼Ay´cSó DÕ$xf`ùCó r\t~ê@ò£|ɬ†›ÕtVÉkªUÔ1ˤ*=ηË‹QûÍ/f§O"¨sÔ; xX5b§ ?�àA—uøtî¤ê$;¼B¿Ð·ö6äDÄS´%“½æÑÀ+Ü.êÁá©»ú˜7 ŠÕ:¶"MLoŠoMÕ§c3›>››WtkÔ€Á÷â~’ï¦#ªâWá1�¤„òˆÔ×H¬˜”‡œ˜6šX Á�¡&œrÐ~€º¬#²jÈ1>’¶#QL,*Tεpn¬õAÁ0=PÑSq¬eFRuÇ\ nc�Ͳ¨:Í–Þn5«‘á r�išZß\‰¢îáH÷�ä —å4 =‡Ä—€;(µ£#@M»¨ ìäÔÞ�×éE'¢è:áöt¢ºcÛ‡øSã)õì#åˆדt,iVÐÖ,ž)*zœèœ]¡£¼*ú8õ‹´²>€…¹Ê:‡øÌjA¬f°Þñf|—R]ú9â&šgBN¨­(s1`â¦Sû$©él™L¯b»-k§Ô«ã¦ób]'€�N±ì×19=SÑï‘ÓGã蜚×KL@…aÜVÇÍC]÷Ô„�6'jMݽœžƒk½°;jÏ\°dßU ”ˆV¢¡cŒÚƒQEÙ í¦wF¤‚oÜ ‹™jk/O5™O P”¥ä«BÆ<ä×î´Î!¯'JÔÚ/I»Î:¹°£Z%"±ŸÉò-bT/G—‰êŒMw ÕÛÑú„"õ@G-ö®C³nl†TOhmþ˜ÚÌÐ�Ò0vÚï}ݵ §RŸÖ§Žòøˆ‚ ªMN;õvt†ÉC´J€‹Îפ®WO¯ÃM`¼Ÿ]ϪàLªç•tüQË\×ÏKPapØdµýPeö¦NÕ@<¨cªÐ(¸ôê,êF°¬˜6“t"Š•½™}Õpt‚w2SYÙÖ´Y¿�\ÊÑy„zô`„¬C§PõxÁHðEkEœÎRfµ|³z ñÛµ�¤ÇsŸdÓÕÒƒS±4HÐ@.F�J:Ä¢—Þ±'6í¯oìºØÃó·ïI4e;�F°M'tø8á//– L9GÝX„�9œùÜí¸74 oìzÚ¯�«Ô p)z:¶‚øõRUhÇGíÌ¢;ê,ør}ffiÌÁLç±d¸ãÌè‚6ìaåx0Û�˜6½ÐÊ|ÈNµ†-jkð2—;ª5Ëôìî•0]Ú¦8=õ4q�j÷ÊØ”’»ì ×Á„ ÒÑœ­koÖ)®éü¥ßÅ™zúƒ \ŠŽ$ PÈÀöâ$õH’é;xó #RÁ­ºÚP¿«&ùîf&öiK'©ï‚�Õ9¸iãnAŠé€!ù›=ÿÁ<#昔z(ë9z¬¢�Ù@ ö>sÌEÏ9jßß¾yŒ1fµ¦�ôf€¤ÆoÔ¨G µËJ•z�A÷Ñ 謣•Úÿ¾zÔ¯}mé$IÓ“2@÷R.îu¹�Xö¤ýd�¦mÂH$¦ö“tÄImCèF=”'‘ s†•u\ZÏt-=y„ Ái?;©À¤ý4lJ£8ÕE®yD‰bÍ1±0¼¯˜™}O¸ ¡"ÄÍò“îUy¾µµ3$2t¨G›ì)� ¿>±K×?ÿ³¹¿µƒß.ÃF}é¸t`w|¹çëYr¤Òú:hǵgQò;cDýð7w}ú%:‚^æÐ½zm›:�8p=8JrK¼ËuetU3èADî*ñ†º‰’»j#¼]Z OO8. ˆß‘lˆîÜÀœ+ë¡?ÔòÓÒDé�£Ïw¤sP§šå²øÜ?bPÒæÚgt@rV¿˜ú N’ÑL;„å™k"Ä-!%Jø\®ÎÏ4ýxó~£ÁJQjŠãY§‰èh ž†@¬\XtmÎîó¹L~#fêïhW—ú6^ˆY7 Úr­«9=Ñöô€B3\J4#«õøÀå}â ²—Àbä.>SUŸ�[-7eú¶ä˧µ±Ô¦®Es]ã™ rN‰ÿòé3Í"Ñ«>;Rò“i'¹£.�èý©ÛÊçT! kïî©ÿz©7†¸=q]ezTXtRaw profile type iptcxÚ=JI€@»ó Ÿq|ÎdfÞ<øÿØc ](rÝÏ�­)háqÆÔàüp·¡Žƒ¶Ã¡\ó ƒ·jÛÅ´£#IÁ÷V'¤¼öhy„À…iCCPICC profilexœ}‘=HÃ@Å_[¥RZí â¤êbATÄQ«P„ ¡VhÕÁäÒ¡IC’ââ(¸üX¬:¸8ëêà*‚ nnNŠ.Râÿ’B‹ŽûñîÞãîௗ™jvŒªfédBÈæV„à+BèAƒ‘˜©ÏŠb žãë>¾ÞÅy–÷¹?GDÉ› ð Ä3L7,âuâ©MKç¼Oe%I!>'5è‚Ä�\—]~ã\tØÏ3£F&=G%Šm,·1+*ñ$qLQ5Ê÷g]V8oqVËUÖ¼'a8¯-/q�æ’XÀ"D�QÅʰ§U#ÅDšöþ~Ç/’K&×9æQ� ÉñƒÿÁïnÍÂĸ›N�/¶ý1w�FͶ¿�m»qž�+­å¯Ô�éOÒk--vto×-MÞ.w€¾']2$G Ðô Àû}Sè½B«noÍ}œ>ê*uÃEÊ^óxwW{oÿžiö÷‰„r°kÙ| iTXtXML:com.adobe.xmp U’þ›bKGDÿÿÿ ½§“ pHYs  šœtIMEå  .´*0®tEXtCommentCreated with GIMPW� IDATxÚì½y”$×].øÅ–¹Vefíkï-µº%µ$K²dË€ý�a°ñ0ø� �å2xÌ3x9:`àY΀Y o†mÞxž9øy•d ,k¡»µtKjµZ½Ô–µäRU¹gÆ1(oôͨ¨nÙØæ Åïœ8™U••qï�ˆïû-ß�9vìØaŽãn=pàÀ{FGG=UU!Š"8Žض Ó4¡i�Ö××ñì³Ï~¥T*ý=€ÓßÜl6ûÍD"±W’$‚žçÁq†˲ð<®ëÂu]8ŽÛ¶aYt]G»ÝF6›…(Š`aæyÞŽ÷žçÁó<°, AÀ²,X–õ?GöEö§ë:ÆÆÆ°wï^d2¨ª I’‹Å Š"dY†išèõz0M†a V«¡Ñh€çyÿØ\×8þN§ƒÍÍMvyyùk ÿÕó<÷È‘#ù‘‘‘©L&ãv:��d2FQO–eOEˆ¢Aü±"ãE6–eýWr~ëëë¨×ëPUñx|à;A€ªª¸á†�Çñ /`kk ¦iúÇjt]G·ÛE³ÙD¥RÁÒÒÒßœHJèß{žç/˲E333XYY�®ëp] Àad2ìÙ³gùˆÅbˆÇãäC×uhšÓ4Ñétà8ŽOÎ0î¦Ñh¼táÂ…?ßÞÞîà8/¾øâæ‹/¾Xw`C62^ Ãâý¹dà�¥�ü·i F•eY…eY—Ú·ããã¸ùæ›ñÐCÁ0 ^ÉÖÆ7ªªŠ|>ÿ&]×·<Ïû¬¦iX__? @§Ž{à9ŽÃ4�E]×'-Ëò×Ýææ&<ˆ_|Ç�çyH’„L&stllìX"‘ðb±˜$·4™¦C±Õj�)—˰S©ÔAà¶¶¶.ø wnnî#‰Dâ°¢(ùšÔÐsIJìÃ0{dY֟ꟹ˜eyž�§Óé[âñ¸CÖ¹V‚„(H€yž÷¯BdmÛö‰?YŸäsžça||<ÏßhY,ËÂþýû�éºþî>Ék ‚ðך¦¡Ýncccãæñññ7�ŽŽZ©T Š¢  ²2æ¶mC’$ÄãqH’ä>|øÏó>Y,ëLê¾D“gÌÍÍÝ466–Éçó.Ïó;"d½ ‚àϱmÛþ10 ƒz½ŽF£�\.çÿ?™7×u‘H$Ðëõ�L&áyÞ¡›nºéýÏ=÷ÜçúófÈd2†áƒèT*…L&ãPF>è¨Z»Ý®¬­­}F×u €Àn6›Rã(ÀêêêŸ ÿ¯CCCÈ0°�Àúwyžÿ ŽãÔååå§,ËÒú×.ñ¦»²œ3›L& ±Xl¯ .!„H_eß~ämnnûöíÃúú:Ο?ïï ‘ä8’$!�NCŸ0ôÇÛë¿„mÛ¿lš&LÓÄüü@¥�fÉdRN$j³ÙôÈÃ~dddo:�þ°,Ë –u]‡iš~TƒNY ¤/Y®ë>­iÚ]‚ x„ðpç’ýÓ¯Á €Oz<ÏÃåË—ñ¿ñ(•Jþï‰fff�ÍfýÈ÷„|ÐiWÄ;»½½� .ØO>ùä_›¦¹�Á‡Šppg^ g* <€‡< €�ššúá={ö°±XlJUÕÉdŠ¢x’$¹º®Ã²,(Š2I"çè8:�ž|òI°, ]×á8ÎÀgi�/К¦\Iﱩó`B<¶¯…tøäëy^‘eÙW<Ï;@7YgΜÁ™3g~OÖ¢ëºÇùçL~'I’ç8ΰã8H&“#¦iþ¹iškŽã<×ét˜r¹üeÞ… ÄÑÑQ?%Íqloo¦¦¦P­VýuÞ�èv»þº£É•zä5�«««�ö�¯@�#/˲ÜR©ô‡½^ï]cccoõÚí6¶¶¶péÒ%ûôéÓmšf€HÀ4S•ÂòÚé�B–"(,õ7¶¿qÅbñ‘b±Èˆe³Ù˜,Ë|&“y_"‘à2™ h>ÙhÐdÛöÀXÛ¶šúÖ|^©Tòúçæô½Ælà¿�ˆÇÙÀ‰¢(¹®+Ò䃤Çï2½Nhà‹Å�N§Á²¬O Èy‘Ïõ_½x<î8Ž3ê8Î;‰†‡‡¿_Ó4ÔjµO·Û펮ë*C˲P­V¡(Šjû¤ªªBÓ´µ–e‘´<§\.ÿm£ÑØê_OnÈÚ × ¶Ùl~Åó¼§ …ÂýÉd2&I’ŸŽE®9ÚÏ0ŒçyžÄ²ì¯1 Ãï?9÷l6{o¯×û“F£±Ön·µd2™‘$i¿(Š?.Š"Ïó<Dz¬G“°é¹’?²žŠÅ"öïß�ÕÕU˜¦ú9ú;¿ÚgèWš”ôz=$‰�Ä ¤�Žã �N;333·�={ö|?zF?/�N' ù¦š‘�Þ9z=’s¢É}Ÿ¤ÓUkµ††† Š¢333óKkkkH‘{‡Š^yß&Á�,²È"‹,²»Êå²mYÖ Û¶�ë@ ¤aɲì ½§Z­>ÀÛ¿ÿ%‰ÛDQtétäR@äýœy¦V«¹ívûsF18Žc9¯>õz¯×ûSÚ‹®ªê>I’xAXŽã8EQÞ©(Š�ÇÀÉåv]ñx“““ò ·ƒä£×ëÁ0Œ�ÈG­VÃåË—½Ó§O¾ÑhLO¢ Jí¨+‚õ(¯8‰Ø»�«ÕjN­Vã×ÖÖVšÍfutttTE$ X–µÃkK^¬Ñµ6$'ŸÔ¸4›M}{{ûrßsÏ…��o•„ÉÝÈçóÿ{:�ž‹Çãža°m{H’c§#:4�jµZ¾Gž.Þ'çC>Oƒ[QáºnLQ¤Óé�”J%wzzz€Ä]ºt oyË[ I’Ÿ†%Š"R©¶··wÄ÷ÇíÌÖÖÖb»Ýn‡�Qzج¡aÉ8·Z­–ã8ŸÖ4íÃÃÃÃ,9ožçýëŽÌ-:ˆÇã<™÷€§^�$éÃ<Ï—S©T]„C±XÌ%QšàÑdÀ0ŒÐq ×/..bmmÍ�üБµ`-³ SÖ‚¯td+ŒœkR‚$�©K‰ÇãH$Óûöí={ö¬E]Ã0œmÛ?,‚½›ÀqbÌÏÏcbbÏ=÷Úíö@�MT.]º„‰‰ Ÿ€#AäØû5EBŸà»¸R£ÂQQ‘ˆxDYd‘EöÆ# õzÝ5 cƒ º¾€öÆïßðð0HSSSw¤Óé[$Ir (")2𚦉n·Ë´Z­ ËqÏ0 �B] ¤YðîQ^AÛét.t:¦ÿðæ'''’$½™I@<ÇÔÔ†‡‡Ò®HA=€òA@^­VÃÒÒ’uæÌ™/noo7)Ï%)n5û[0‹&"Áó (]ÜM{Eùþ¹9Ô« €___ÿË¡¡¡ßh6›n"‘‰6ÑD‘ŒýnÄ4Í%¬v»Í,..Vúûe©±ÆwùÞ~žçùÑÑÑ_:$˲GÈ_¯×ÅôqÓŠP–e�a˜¦é×ß�÷$:�Çw�ڻ߯GpÉ“(Šëºh·Û$Š€v» ŽãHºáŽãèõzl³Ù<¿ººzº¿ÜÀ6¨uBazþ}e¦n·[êv»cYöŽãÜ£ªªKâëõ:dYP£Ç«^¯£Ùlº¢(æãñxžçy‡×Au'2&„„Óiid£SÉÿS„g`£É-Mèë1øJŠØƒÄÄó¼°OΗNÛ¢�ƒDgû sìûjSDZ‚ xÁNš0‘ƒcÇŽ!™L¢Ûíâ¹çž ý<¹ë©‚ç@9p\‰0îFô#‹,²È"‹ì C@üô z½î¢€,F¥ôJ&“Ù›Ëån—eÙ£ÉIÙ ±×ëakk«¼¶¶ö ”ÙÒab§ºÏBy�9\©TzN’¤›X–•øE¯,ËB–eLOOcxx‰Db ò¡(  Ûí‚Âȇ÷ôÓO¹Z­¶ÇhàU¥%3p.åù¦I…‡� Rtªù,K�7G�')6Ž`LÓD«ÕB³Ù „hÓUúQ%ßsO+{u:lmm­”J¥oRÇCð­ȆE?¸áááßÎf³{ ùà8Ç�Ç-·Ü‚O~ò“~±/}ÜtÄAÓ4H’„n·;à'çJT¨èu*I’_@L¢®ëÂ4M4 ŒŒŒøëT×uT*>|kkkªoÉd’ÈÊ¢Ûíkkk_ët:u *R�µaup- ü™b±øµB¡Ðsç‰DQôIe½^÷%—âõz–e!‘Hìðê“kØq�¨[†a0<<Œ±±1¤Ói]‹±É|„­«`TMÓ4ÿ}X­ÖÕD$‚¿ã8¢("—Ë!›Í¢\.£Ùl�:…J/‘Hü€û@_xõÐ]&,½,H,ËÂææ&DQÄÚÚèz8ÿâ¥þ—Œa0•ŒŽüRu$BàÚþÈ"‹,²È"{cE@¸�?þø—¦§§ßiÛ¶|ðÒ^¿>0cçççß¡ªªGKe2 :·^Ó4ÔëõµµµµoR3I°ÄÄ ´0ÂàmÛ¶‹Å♚šúYÏó²DÑ'•Jaff¹\nù ¶�Ng íŠ��••çÌ™3�PäÃìK­¿Ñ$˜jìC±›*�rÁRçg‡œ'Àv]×3Mó˲öU*Äb±òA<Á4ð¤k@Hä£×ë¡Ùlbss“YXXX²mÛ DaÜ ’§×B>È9ðÃÃÃÉçó{ùày?ð?€Ûo¿÷ß?TUE³Ù„mÛ;T¦úäÀ«Õjç\×%©=iQ§Að‚EÕd³,ËBšøi€½^š¦ù`ܶm´Z-¤ÓiH’Ó4}“N§±¸¸È´Ûív±X|Ķm-d]èz}âaÖ‡2ÿaÊU¨T*Oôz=nllìºD"1NêBˆì,Ý“#ù")Oa^~àJ‘´iš~mF"‘ÀÔÔ”Ÿž˜Éd°¾¾>P¤N÷Ù!ßLI#µS}U8>|½^/T%k7R$´¤öñãÇ!I†††ðôÓOûQ³àwq‡x<žè_7„€Ø®ëz®ë¾bÛöÞ`Ú�ú¥ë:žxâ Ÿ¸’Z˜€Ãž={ˆ�æ¨ë:¦¦¦ü5ÖëõXêš`£GOd‘EYdQ„òÒw:��‚eºÈ’Öþïׂx´G–Ô}Ð�ãZ­–W,/÷�˜IyŠ ¤uûé Ú‚‘€c†·¸¸ø—ÿQQ”D¡Pàæçç‘ÏçÈQ§á8n€|�¦|õzÅbÑ>yòä—Ëår‹òhk}pIˆý #Áè�·K„ üìÈIëá¸}Ù³®ëîs]×Wø"cœ B Iº~!�3�­®®®ÈÇn½%® #ÜÌÌL.‘Hܬ(ŠKÈÇM7Ý„{øÄ'üèÇqhµZþz#ÞhÃ0:[[[�êºÞàÖëu·O*XEQޤÓéù~Z]’@  �®EÒŠZ­–¯xFÒŽ±oß>äóyt:Zõ ,ËžY^^^r]—DêùÐ)ò¡c0ýʹ‘ k èµÛío^ºtéé™™™_N¥RÃ0 (Ê®u „\M ;™L¢Ùl‚ã8LLL`nnÎ'¤ñ_&“ÁÆÆ†ß‡%¬&Œ^w$ªÖívÑjµ ª*jµ(%»Ðã#KtÄ•ŽLèºAüâwú¼v‰N�û¹_XŽãœ7 c/¹�…‰8rÖ4•&t* =t„‘D… Ã`WVV¾éˆ"‘EYd‘½á ˆívûïMÓüIÇq<Ïó°¹¹‰­­-¿7I±2M,ËBÓ4??;ØT°Ýn³¥Ré1˲Š!€-ÖŠ·é]Áô+:¯žuG_YYyðöÛoÿÙýû÷‡‘¢ùOÈñÚò±ººê�>}úkår¹ðn÷®ýpw!׊x�ó£##Lÿ»É9û‘’^¯ç$“IRX�b±èw°&}Cè¾###ø‘ù,--ammÍ/°/—Ë^2™< ˆðÚ7Äs-â$£ÉdòS²,ûäã¶ÛnÃÛÞö6Üÿý0 ƒ.èF¥RyŠçy�aÏu]÷Õúlg ƒ…Ý®çy®eYh4�7�ǰÙlv�$I1A~ Ov¼°¦zº®ƒã8ض�v»í§$9Žã«ª:P{ ( b±Ø1×u/âJ„Î TšTÓò‚ë�Á5Ä\×uWVVþ¼P(üL6›Ù­ßIÓ¢ÿâ; úyžÇÈÈöìÙ³C˜�ÔLMOOãùçŸÇöö6lÛÞQsT#Qµµµ5FÓ4z=zÁ>6Áº 9aªªú@Ó4œ:u ÉdµZm µ)DÞ—i·ÛÏ`g�S,‘ÏçýugYÖA F_èq Fz4MC.—ˆöÒ5d©TÊ_Û­Vku{{[ǵ›EFYd‘EÙ†€ x_5M{E×uÆ0 ï…^€¢(~ÊÒôô´hHJ�¦ih6›¨×ë¾|i�x›››ÿÜh4ЏÒX§À¼��yòtä#¬h—Íd2ü‘#G®ët:Êår>Ø&`ttÔ M»aGä£Óé ^¯c}}Ýzæ™gYYYiô�‹Ž.EBÈ1Ódé[‰\�Œ*BR8Y–G É#¤¯\.ckk CCC~ÍB¡PÀØØ$I‚®ë˜››ÃÆÆÆ@§ï‘‘‘aì,‚-Mí¼]¼·~ŠÉÌÌÌd"‘ø?dYf)ºûî»ñîw¿ÿøÇÈG«Õ²××׿Þëõ¸’¦¦.F¯‘�}Öjµ³ýõ|—ÉdnO&“Ã’$q‚ LõSµóèº*yKhæ}ï{Ÿ÷È#�`ß¾}µQ¢("�cbbŽã T*!�N£R©ø)[Á^ô= ßͼ÷Øc�=Üëõüäóóów»ýÔ¹x,ËQ×¥/¯MËߦÓi_L�€ûF£�V«µC²7ØK¤_#UYŸžiš�T«Õ·§Ói1�(È‘ûÝ\1(„@î½^ÏOI#}vÈZ&b,Ëbkk‹\Ÿk†aׄû¸oDYd‘Eٿ鈂Úí¶»¼¼ ]×Q(ˆ÷w‡Ô+yè‚Ò÷ªC×uض�ÍÍM»T*-âJê•ý0(ÀI?˜Ý à�œœçççß’Ífß)Ër^’$�Ð4 …BÁ×ê'`£Óé@×õ�´«F£�õõuïĉ�‹ÅF êqµÈ‡ƒkw ÿVö)Ý3Ä¿O’¤ã’$yä¼Éض�íímT*ÜrË-�$É÷ì×j5ÜvÛmˆÅb0MÓ÷œ§R)²?7d»Úy…¥’øu,“““êª~RQŸ|>|÷Þ{/~ó7ív›Ž’auuõ¡>ù Ñ…`=���ÑÚ8jãðõzýŸêõ:€O&“Cñx<›J¥þ�¢(ñž“šB@lÛF£ÑðA¹®ë~$›ÍâèÑ£7.//Ÿê§)z�ñz-©kAâæRó¼AqvK9²mŸÿüç¡ë:dYF½^ßQ ÝO r»Ý.Úíö7›Íæ‘£G�‘Ú(’v%IÆÇÇÁ0 ÖÖÖ|’žÉd°¸¸èKâ’럾ÞÚí¶W,­—^zéá^¯§ÑäqaaáK p' «ýf¥œ(Š·f2™1UU9Y–¡( fggÒÉü�¢ àÃzÙD§Óñ:�NØx˜ÍÍͳÙìEQô£¹D~—� ’NE�#9×n·‹Z­†ÑÑQôz=ZRÝnårûöí#bæòåËO�;wnƒJi6vFy#Yd‘EÙŠ€Ð?7™LÞ•Ïç½L&ビ0O!ýð')N<Ïccc[[[ÝR©ôõþ÷U‚Lì”° zý”$†a˜o¼1—Ëå~7ŸÏ'TUu%Iòh�l°_A­VC2™ÄÔÔdYF,C·Ûõ»²°Ðh4P*•ìçž{î‹Åb»×|U¯¾Ý"m¼¢Â„Öl6›•ey^Eo·Òó‚HÌ/q­VƒaÈårÐ4�n(ÉÜ}÷Ýoúæ7¿ùõ]CE‚)qä•Þ¸©©©©D"ñ€ªª!oyË[ðÞ÷¾¿õ[¿…z½îé¶Ûmwccã‘^¯Wße�Б�Ýd�ý&‡¸R°ÏáŠâßjµt]×Û²,7ÇI’:�~#Á9Þz½Ž^¯‡}ûöáᇆ®ë(‹°mÇŽ;°wïÞƒµZmeyyùå………'ñ­÷J Ž¡·Ë:b0–e¹aï ð=}ú´ʇ††ˆ²™¿ºÝn·X,>@{ë[ßz´×ë  /H>FGG‹ÅP,ýôDMÓ|£ÑhÐgÛ6£iÓh4V766Ö^zé¥\‰ Yâ¼Ña*•JWÒ£¾˜Ïçg�9ro.—ó2™ŒÅ¦“…¥‘û©»èõz¨×ë¥K—.Õ±³áŸ Àk6›«Õê_‹¢ø4Ms§¦¦vÔ¢¢EΟêx�Z­QúΘ¦‰v» A011žçáº.$I‚ã8m\鬱ºÑ�,²È"‹,²×-ñäu×]'ONN¾uxxØ£óÂwëDLrÃéèH_æT)‹¢eYmìÞœ/ØÃí“�4¤ë¯¿>9>>þ‡ù|^H$.9¦°æ{ÄS‹ÅP.—‘J¥�ÉdüÈ],Ûl6±±±�G}´U©TjW» ïF>¾“",½‰QeX„,Çq^�xÐ}\×õ¥…I„€ìùùy¿Ž‡ôÍ8ŽcÇÿy IDAT¡‹ßƒ¯nˆ—ž&,v|||XUÕßSU•%stà 7àññ±�}Ìob×�|8Åbñ‹Ýn·I‘::FH½~Â@›O~úÇA“Rˆ,˜¦©w»Ýb,»ŽVk«×ë…¦ià8Õj<ð€ï…gÙl–¬w/•Jy™Lf2“ÉLär¹îÉ“'Ÿ¦öŒ€\­¹œ !NØønnn6R©Ô@ÊQ0@®I†a Ë2FGG}ÀlÛö&Ã0Ö›ßüæ£û÷ïß“Ïç½d2é“QAR—–– iÚ€*ÜÖÖÐjµ Тߋ¥^¯/¯­­½Ôét Û¶i§‚Žp0PkÊŸ›jµz±Z­ÞžL&Ó„°¯ë âM@ȱö븘Ç{ì±]î9¾¨Åòòò™þýŠMBh’Gz‘TS˲µZ Žã ‹AÓ4]ªV«OaP¡KÂß+ò�Ý<áaQ˜úÑ Ÿh4›MèºîëÚ¶��� är9>ICIEQæGFFäõõõ Øq¥K;ƒ�Šd  €-¤R©ßI$,’·Ür >ñ‰Oà“Ÿü$Ò®666î“2îUÆ‚ã,øZâ4˜’%ªÕêÿÇqÜ ,Ë:ÄÓÝh4P.—±¹¹ Y–zmH’4z ÁíW3¢(þ¨$IñÇ{쟮*ì,>GÈ9 @BœëºÿW·Û}³$IN˜# ¬q#‰NjšÆlllœ~Ó›ÞtãþýûgGFFv��|>�T*…ååe_ŒÔFmnnbqqÇahhèÕìË\Û¶=«iÚó¶mÓM9éù ’ö ªªf[­–R.—}YiÚÉAKK‡Í-"±¼¼|¾Ýn“­` ŸM͉­ªªFd�ƒ‡Þw¯×Ãææ&jµxžG>Ÿ÷šr‡l6ë‹r‚à7‹$õCªªr¬k»VšcDD"‹,²È"{ã�ñññë2™Ì¨,Ë.QS¢ó¢ƒ ˜AÀÇqÈd2¸í¶ÛFo½õÖŸêí5ø¯VPªë:r¹œ—L&¡(Ê@ó0�%Ù?}\KKK0Mªªú‘�r¹Œ—_~ŽãŒsÇÚ¯6 S€‚2Áο"ù·ÝnÿV"‘ر?–e1>>ŽßÿýßLJ?üa¬¬¬`{{Û¯m Q�……8p‰D½^�–˜õdYžIw:�F§Ó9ß_1 FÈyOŒ��åA`u]ÿuÝX,ö§ªªþoªªú5ÀG>ò<ðÀxòÉ'ý4–N§c¯¯¯µÙlÖ°3âD6BJì”9+ŠvFmhÉf¿D­Vû žçïq]w¯¢(n*•Çq �9!±a Ô²,úï€{o»í¶îÉ“'O^eÝ«�`0âR¤Ü èºþ{½^ïƒ,Ë þ?„\Áz…­­­¾ù曯;tèÐÌèèèÀuDÈG>ŸÇââ¢O>Häc{{—.]B»ÝF,�Çí÷Úp:ôöóçÏE×õ.ÂUÁ‚„¬'ŸJ¥f …ÂÏg2Ïó<”J¥çBÏ�nI§E5 ¦X,.?ñÄÏbPÖ;˜ÆGÌbYv2‹yôý"([L7Š¢UUýë&�ûµqôutÈôk­Ø7½éM·ž8qâ1j®#’Yd‘EYD@0Ùlö§Eq%Iˆ2S¬è&dÁ‡u,C.—£å?=Z ”öÔÒïwëL\*•Tzˆ¢ ð¥^Cƒ2Û¶±¼¼ UU!*• .^¼QIA6Ó' tgv¸8ïçðÝa²¶¼(ŠÿÅó¼÷ëy*• þàþ•J|Q’£N<¹ív©T [[[~DQojjêž¾¼©mYV£Ùl2­Vë�=ÏkjšÖàpÇd³YUUÕßEQây©TÊ ¹®ûa–eýFy…Bþð‡ñ{¿÷{8yò¤Ÿ'ßét°ººúåV«ÕÀî2Ç´÷|·\yo—1££!6E@ü.Ã0ί­­‡††~tvvöèÐÐ�_ŒMK6ïÝ ®=×u]Ó4øäÉ“/ÈEXº»Ëɽ9ÛÛÛãñx‹ã¸!r,»u¼ïG>P¯×;###×]wÝäèè(R©Eñ#CCCÈçóX^^öSöHzâöö6Î�;ç®®®²ÉdÒúµïÝ—FGGsKKKÛY¤%Šƒu þÜH’”þ@:�ö)r«««~dƒÂ`WvB²Èš^ZZZ8yòä3�ý›!×±•âyþ^"ÕLGwƒ÷4Çq|1ÒÛƒüž¾gÑ]ÛiB‹Å�H$ؾ£$X3õ‰,²È"‹ì K@`T–å�rE7£7öI'b’ŠEKð!N¿†ýn7…Ÿr¹<à­¥IQhØ-"CW¹\ö%keY&)®ªªï0 ão)�s0oÜÝL~·�öèsj$RD6’§~âĉ�¨R£Ñð¥n‰ç¾\.ãСCX^^öçL’$ ÒtŽwg8‘HÀ¶íß1 ƒõ<ï º®;–eM«ªzŒN¢Sòˆ·xddýèGñÿð8uê”ÿûn·ënll< 4ñ õ6A¥1/Þ¯¥ÌlèèàJÇë¯�ØÌÌÌ݃¬3a KË ’Bp3™LìÎ;ïü™§žz꯼+‹8xœtdãZkh‡Â–ªª^6›õ‰¾çy~½q ض͆áÕjµWR©ôèѽããã^:�¸–²Ù,&&&P,ý^(¤ˆ»V«aaaÁ>uêÔ?I’ôQ]z¾ÉÆó“H$|°EŽ+¬±�–‹„¬�k¤š*žç‘N§½íííÝd;¿=>¾UÒAÌO'J§Ó‰x<þkDB–tmöÿ)�:Bš·õ‹�}�m·Ûõ=ý†aø 2‘HøcJ:;²,;Žãü ¢(°, Ç9»�6²�{ï½÷w‡çž{ÎO“év»ÎÊÊÊ—Z­]óF> |k2Ç!…5~@HíÑèè¨;444£(ŠCGÖHÄ/,í�Ú`Ê“$I�e…Ba.™L*ÍfÓ Y3,ăý]Ük‘\.w4‹ qEQ|‚¤ªªO, Ã0ºÝnyssól>Ÿ?püøñ=“““^:�ökb±Òé4&&&°¶¶†F£1  W«Õ°´´dãßx¨Z­êÉdò›©TêAØ`”\󊢸×_ý½çÎ�û®ë2€Í"ÜË/'‰{$IòhÇYƒãããX^^F*•ÂÆÆ†™bYsssó#6Õj•™��-T*•„G?‚…𠀑æ*`ÑsKî_ž˜â Ç„çy¨ªê_—ÇA–e/�N'+•JWj“š$FÄ#²È"‹,²7EqiO^p#é5wÞy'âñ8VVVpêÔ)X–冎�\)z×~ÎÒ¹ø4á _%I‚¢(¾§’&Dôç Eº®³(Š¢$Icº®/à_7-b7ò¡?�ÉdDRøÚívwH”#¢Z­bzzzÀc»²²‚C‡arrív{ Ów:�†a~jIPò•DRèt˜à1°,‹OúÓ>á#iWëëë_kµZ­ùÐñ­)�ßZWö0`o`t]W2™tƒ�Ý:u“q zÉÉøõIœwìØ±w�={öÛÛÛËôø[ýWºÙ£ $i` &“I&‹1AÒMÆ>�£T*�©Õj%EQØ;î¸cßä䤛ÉdÐoQ‘L&133ƒr¹Œz½¾C’zeeÅ=qâÄ׫Õj€ÝjµjµÚQI’Ábmrýô›|NONNþˆã8Æúúúó<ÏÀ«57ÁB|¦ï\x»(Šbðú¦¯Y’êtôèQ¤ÓéBRÐÈ1(ŠBTÄÂúÈÐd–€\.÷¾x<>°Ï`1_ÍÃÃÃþ|=zëëë �@ɵFw§'çÓn·¡ª*#wjjê�.\ø Š#p�È"‹,²ÈÞ„äí¿¢@Ò®HÝ�þ˜pì¾Ûï¯FP^zé%LNNúö !âySSS8~ü8LÓÄ£�>ŠZ­6ðù Ç–xµБ.™L&t]SRú×ðPúu ©Tj8›Íþa:�–H>˲¸ï¾ûðgögÀŸƤV¡Õjù[RbH^?�†eÛ¶ÿs°™ßä3a„ÔâÑn·aY–µ¾¾þõZ­&sL" ßI™cï*D„¤?9SSSH?•Ý0QÁJ&“>‘¢*�¦Ø�²y7ÝtÓžìm6›L·Ûý\·Û­olltΟ?WäŒéT¥°èA Ïó~E—öÖ¤h;µZ­T(bwÝu×÷ÍÎκÙlÖ�|�(×ìì,677±¹¹¹ƒ|¬®®š�?þøÃKKKm À;¥RéÿUUõ—APáÒu«««ÄQà …)( ¿©ë:£iÚg666Î÷ ÔíL&3¥(J‚ã¸ÿÀ²lš&²Áë4�£ßì1´Þ þxˆ¢HÆÔÆÎ¾1AYdŒ��yt­}o¡- À âÁ;ô}’?‘+¦ï;‰D‚Nmmm鸢6·Û=&"#‘EYd‘½¾ !´G/XNRzžzê)$ lmmÁ²¬ŸsçÛ""ÁßÓò¢»¢t†A&“ñßÓ’©ÁÏÑý; EQä†=ÏÓà€Ç ‚‘û]A%'V–e9›Íþ~6›•Hºˆ ¸ï¾ûpéÒ%$ 4›Í] ˆiš¨T*˜ššr/¿ü2®¿þz<ÿüó0MÓ� år9¬®®ú ‰qAày¶··¬ �­üÃq‘ríÔjµ&®t»§eŽ_kƒÇIcÇ`³?€+ËòŽÞA’Ëó<¦§§qøðahš†'NøãM¯#z¬FFF`Û¶gš¦§ëú�öz=ÌÎÎ:G�ÝÚØØ`Ëåòëº^+‹ºçyAiá°þ&˲¢¢(;úÞФÓé@EööÛoÛôô´$ªªb~~µZ Õju‡$õúúºûØc�=¼´´Ô¢H¢ÀvÇk6›§E¹™öJ¥Çq�N§w4)u]×SÅ3 ãçãñx¥R©<©ªê¢(¦AAð ¯}2ö‰D_øÂð¡}hÇý(øY…Á`T)LîÖç-ªªrÁ^Bô½‡ÜËz½R©}³„ªªât„>r£êe¤ÙÙÙé­­­®4ɤS±\\]²9²È"‹,²È^?„x¶iO9Ù8ŽóIlmma{{{@.—BÁÚ„0€q5âT¯ äïŽãàÒ¥K~çïz½>à‘ #Q4Á¢Á�,Ëw���Õ4íÌööö£xU‚6¬ñû] !ÁÔ+V„\.—ûÝ¡¡!•D>†Á¯üʯ Ñhà‘Gñ;]·Ûí�MÓd4Mk´Z­ÊáÇ÷›¦é‘¹"} dYö»¢9I© z¤ƒ€›­‰‰ ¿v€Ì= ʆ‘xž—lÛîagŸZêø»%sÖÔ1Tv5ì3ÃÃÄW•o‰W;€é÷ÉdÒ_»DÙ4MÎ0ŒÂää$ºÝî'›Í&ë8Îêõº½°°°~éÒ¥§©cPjÀ …ÿ‹Å\Ò‘eYØ¶í§¹É²ŒT*¥îß¿ÿ]³³³.]X/Š"dYÆž={ÐétP.—¡ëz°ŽýÔSO=²°°Ð Ì!†(•J_’eù˜ã8\«Õ!8t“Rº0¿_Øî™¦™/ ïÁ¥£LA1… øo4øò—¿ìGz‚ yô'v¦¶…’:I’†¼)‹ÙAJ¾ŸÜÏÂÖ©kºVH³ÙD<PÇRUuÀY\‘…&΢Øv­¾1‘EYd‘Eöú äáÙét|Õ$R|,º¥óáƒ=;ˆW�&ßê+ý~ïÞ½èv»¡d‡�¦F£�“'O  ¸¡ 9F*érQ†aÜ�Ç•J¥òO–e­‡xPíò/Ê¡uóóóEIK’ä+õ¼ÿýïÇÒÒ¾øÅ/úã­ë:šÍ¦ÀeÆó<†a Ùlþ³išµ\.'4›Í¹\Σ»¢×j5ÌÎ΢ÑhøQY–‘H$P­VwD: ÃØá)æy?þã?ŽV«…|0”L2 # ‚§ú¬˜ØÙ¤î{-s¼#ÚFZÇÁÅ‹Áó<677Ñn·C‰-ÙHþ$cNj,ËrLÓtt]ÿA]×133ã?~üg�Æ7z½Þ“µZÍ}ñÅ«ä܆‰% �D”òù<’É$HDŒÔ\yž˲\×u}bBÈÇÜÜz½VWWa†ß;£Õj¡\.Û?üð—ÛlI"iÞÇ5›Í¿`æW2™ŒlJ¯ ]×ý¦}}q—Ž4�h=ÄÙA×^¼ð ¡QÙ ì_Œyõ¸æÚaEÙU‹Ì½mÛ�$iÇÿ“+dni9rš€†1ð;A�L&÷0 #xž'P$Äꓚ(RF$$²È"‹,²×!¤akk ¹\nÜÐ9Ña�‰?ñø’ffWK{ û]ðïüï¢u÷ÇÙ!½K"%t½ úÈ1ÀLý 9ÛT=ÀÍžç-•Jéºîù�‡?Áærx à™Ùåw~ó¼ýû÷¿C–埋ÇãI»úÕ_ýU”J%|á _ð‰TèuÖ××qÇÀ ü©À«T*\³Ù\5 cœŒ “““8{öì@H2™Ä /¼À�~‚ x,Ë‚[Z–…¿ù›¿�¦ižé0o›¦YCxë{@>˜�qfêõ:KŠêƒ‘1ºè¾V«ùòÆAr$á{÷î…$I;mÒk’�r½X–ņ!†ñïºÝî¶Ûm9räôææ&yä‘g%Iª8�H$Ü‘‘‘�ž84ð§¯Åb±I’�Éd°gϸ®‹ÕÕUèº$8uêÔ+‹‹‹ 6$µ9&®4ïã<ÏëH’4Ð 4¬GÐêêªß <¨0E¶T*…r¹ì_ÛôXúå0# 4¸ç8î`:�~ª^¯ïv�ù)Žªª2ñx|`ü‚õ}BçGšèõ](üTúØéûJ¿Q£!‘Y–½C‡ÝvîܹÇðj”5†A•.:ÒLÇ‹HHd‘EYd¯bš¦ÿ ¬V« å)i@F7 ’Sn†ß…Û0 &¨\̹߭Xœat»]xžçÑ}‚ä#h€G6Ó4}àU¯×¡(ÊI"Ű„Üô# œçy×oll,_Øî&ÑûZªîÉgüÈǾ}ûî”eù?Æãq‡Ô^¼ÿýïG­VÃg?ûY뺎z½ÞZ^^þ Õè¾ .¦Ùl64M§‰ÜÒÒn¾ùf$ ¿Éš(ŠH¥RL2™|âå—_ÞbY–ËçóljĈ¢( š¤Æ”Ëå�±¦¼9Žc8Ž£ag_ˆïE�•Pò€ËçóDzìMÓtûD‚ Ðk``�ÑžñàFGÿ‚©HA²Bm:BbY–gÛ¶×�PÅž={Ž6›M¦Ýn»™L©T*´S;1²6,ËÂââ"¦§§Á0 –––ÈG»ÝFµZeΜ9Szæ™gžÇî !MŠl3Š¢ü*é ¦F®'º_ÐÁ@_»®ëB×õ]¯m’·aéNTѺ×ß/»Ëœû?›¦é 즀EȽ?ÚZ­cš¦Lâ H,ÃåË—166†—^z‰x/�N?vìX§ÕjU^ \´“à qrD$$²È"‹,²×ét:–뺮çy|§ÓaTUõU±Èƒ?,Ï›0B@4MC¯×óÕqNŸ>ý¤(ŠíX,æ ‚àpçqç²,ëS2‚äƒ<ð'''PQ‘ŽÈ�ýÓê5A$Eš¦¡Ñh@’$Ÿ%UéïÜɲìctŠ›Û°ì^ƒŒìñð7†a¸½{÷¾UQ”_PÅ!Þå_ø…_@­VÃç>÷¹�´«z½®­¬¬åø†Áßÿýß��F£ÑX^^~Èu]Iú ù™Œ·€kµZÝz½ÎŽŒŒø[Ó4Q­V‘Ïç±´´äòÆãqottôÿ�ÌW«ÕzXUÕâyÞ Jï×Ð4�«V«�ô�#H>v[ß­è €¹õÖ[žþàøø¸Cô™]Ã0vœÏnÅÉD´�¬±N§ã§äÐ ”–™%ë�¬1:BB÷^ #$$2Iš&ÒD€&G¤–‚÷Ù³g199 AÐét°¹¹‰W^yeík_ûÚãØ=òAjtÈb†y7Çq±°è%‰züôOÿ4Ö××ñàƒúk#X<Œñ<Ï4 0 ã7Ø$÷Ã0 Šâ@šS0"Aƒ}ŽãhÒÁ†E?0étÚà=Ǻ®û5 Aò£išN‹vеDä¸HTÓ4}rOË'+Šâ)Š2yûí·ÿn©TúÛóçÏŸ@x¢ïUÔÈ"‹,²È"ûÞòæòåËߘŸŸg‡‡‡ß^(˜f³ ˲|¯+ÝéœöÖjµP*•¼K—.=¾¹¹Y x僺üW{°ú buuµ799y†çùè\wR$OÀ äh°ÞétÐétP©T@K™pHR¯‚^LÈUU�8tèÐÇz½«ëúŸY–Õêt:]Ã0¶Þ±Û œy !¿ßÈüüü­‰DâçE± øú‰Ÿø 8Žƒ|ÐO«é“�ÞÂÂÂW<Ï3R£ˆE€ët:jšö –eyä|WVVpüøqœ>}ÚI¢("›Íz<Ï ¶mwؽ^¯Ôn·yžŸ%s,<¦£–eAÓ4¯ÙlžÄ•Þ ¯%òñÝ þ8ßzë­7ÎÏÏß7==í¤Ói(ŠI’�J¥011�……¬­­Áó¼Ðâj:ê”±���õ;Òä€î™²[ "ðjAÿnéZ®ëúQºc{’&’n—ÍfÑétpùòåͯ~õ«Oõç„®û _énôP;tD#,"±gÏÀøø8VVVv%ýõlõz=£T*=Ïqœí8ÎÍ©TJ%ÍÉg !‘·`:y¥È™o`°;Yª¢(LXSÅ ‘îv»~:YÐ�†«iÚ@MŽÈÜ«ª ]×ýÂü½{÷úÄŒDXA°yž¯¦iÕååå¥�ÝÑàQ$²È"‹,²× qØžçY—/_~,‘HÜ£(Jlfff@1êܹs>(#P’ÚÑl6™r¹¼vîܹ˶m¯àJÏ;�Â:\‡�HÎu]îÉ'Ÿü"˲mÇqÞlÛ¶G@ !D´ü¬eY˜˜˜ð5üɱ“T:ÕkxxŸøÄ'ðÀ X,†v€ÏårL_‰¶m¨ŸrÓqçb§Ó9[.—ŸÀN Ù]S‹âñø„¢(?β,,Ëê¥R©eUUš¨òð<�÷¾÷½˜ššÂýÑ ��V«Õ^YY!äÃ�éq& ,ÖétºÝnw05›Mض�L&MÓü¼uUU™ãÇ�9qâÄ“ýï²*•Ê—Y–}«çy×€FwäþøÇ?Ž|ív›œªY«Õ.bgã½Ý"Fß) %×_ý[fff~yjjÊ#‘Ò#£P(à–[nÁØØ>ÿùÏ£×ëùQ¿0’E§¶Z-t:looCÓ4Ÿ �º°&‡Á�îA¯e:JB}IN°yEñxÅb•Jeý _øÂ?S×f°'‹��=YŒã8'Çù!×u…`Tƒ(¯}ìcó½^o€”†Át»Ý¦iºõz½á8Î6ϲ,g½Ä1 IDATaaa±P(L&‰·É²Ìõ¯YOQ”k*a° ÷\€è{Øl6ûý¢(JWSÀ"ÂÝš³’ˆ�¦i;Šäië«ëA’$˜¦ I’P*•077ç§µ’cð<óóóï\^^þ?©¯pCñˆ,²È"‹ìuC@HtÂÀìß¿¢(‚ã8$“Ißã:44Ã0ðÊ+¯ Ùlú}jµZõÒ¥KÏjšÖÂΔ ÝRƒ¼@„  énäÂã�?þÈM7Ý$MNNÎ¥R©,!!D_?™LbïÞ½xÏ{ރNj‹‹>€0 cׯ†A�²,Óži7�ÃqÙqœ£Édòèðððûu]g=ÏûcÓ4Ýf³¹ÙjµV)ðæÉ²œÉf³ûyžÿå~î¹GöÅqÜÝ´$èí·ßŽ={öàSŸú”/‰Ü'­‹/~W¢JÁœ}�ú›M�) À[__oÍÎÎj¦iJ$m¤Ñh@×uŸ÷’ɤ/ÿKR/É>Ih«Õ2/\¸pƒŠp.¤ÓiáÀ�¹%‹‰Žã�È-¶··Q¯×±¾¾î7é¬×ë¾2™2 /¿ü2FFFP( ª*†ñ�+èÜ#š¶m#‘HøÑY*ò°,Ë/---âJSÊ VD:"‹,²È"{ÝD@HzŒõ}ß÷}?,Ër,˜¢T92M�N¦i/¹M‘ ƒj:F\í�ÊA$¥qÖ××�õõõO�={Vºë®»Þ=33s€ÎͯV«8vì^|ñEßc‹Å�H$°¸¸ˆd2¹£ˆ:¬Sºã8Hñ×ÿ?Ùu]9™L²¬?5 ‚ 8Á¾ t‡gâáýÉŸüI|èCòÁOT5.]ºôÕ~Ÿã䃮µ ÇÒàT*•S“““s¤Äó<œ?7ÜpjµÖ××Ñl6áyÆÇÇ‘Ëå’…BámÓÓÓ·­®®ž~å•WžÛ¶Û­Vë•|>ƒã8c®ë¢ÛíÂ0 Äb1†AÈÙ8Ã0Ï{žwµ"ýïù`Ü}Ýu×ýêìì¬Mºƒ˜Édðæ7¿[[[xþùç¡iš_ˤëºß$‹ äìQƒZ­FêÛ¶ù­­­Kº+++dþ fffÆgffFDQÜ“ËåÉd²,»$:B7ó ‹Ž0 ã§¥g‰î¼óN_îõܹs~$¨,Dz,ú*Vd}ЀàÚ ^Ÿ.´Z­eUU+±X,·›"¦ƒä¿·±±±D9)‚ÅîN€ð†aØKKK«‡§k´vëÒ/gp¥»¸À½‹/>亮E�­â¹&žcš|xÔº¼óçÏ?±oß¾ŸÈd2Ž$I8þ<$IÂSO=Û¶Á²,2™Ì@EQ}úôòáÇ–e¥y у={ö ô· ¯ßÜÇùùëtƒêPí£†ÉŽ^Kň3úýnMÏÈûjµ àU ÏV«Å,..>ẮBìzO» F—ènÊn<ÿ¡Z­æ2 ƒF£1ÐÔN’¤P¹Ù€—þ0˲ì©S§¾•JåKù|þÃ’$¹äü†‡‡i@è¥Óé[jµÚ?"¼?þ…ÝÝ"Ì‘#G~}bbb_6›õTUõ�g2™Ä]wÝ…N§ƒgŸ}½^o  ¼Z­âĉÿŸ½7�Ž$;¯oDfDFDFîH ‘ØQ P{U/ìf“-±Ùê&©c›¤IY%ŠžCK£Ù#ŽE�I™^ŽlI¶ÄcͱµÍ‘Myš´G¢6²O³ÙÕ+—bUoµ/¨*T…%$rßcŸ�/êåC$ª[–E–ß9y€ÊJäòâEÆw¿ï»÷žr%XGGGw7Òù¢îs3 ã•z½~Ë rŒR©,•J�ÕÕÕ?˜˜˜Îd2Š$Id2™©¬“÷Jæ˜J>À�2mÛ¶Êå²ÖétÜ1¦î¬;"‘HO‚Ðuù‹ÅÇk¯‘‘z½ns§ ‚ ƒÁ×d/0Âʬ’„ƒ˜Ûy™žÑ %ù�p ®]»¶í8Nwø0ìœ×ß |ôÄÞ½{¥ÙÙÙ£©TÊ!´$óªÚB“�»^ ûZ­VîâÅ‹ç8Žã:�N!'mÛÆ¹sçð?ñ®l0tâñx¶T*ñèo÷WÖùà8ŽÏf³Â»ßýîÏŽŒŒN¥R=à#‹á±Çƒ®ë8}ú4êõzOç£P(àÂ… h4�eÙýÜ,ß�­ÂÛ¶ Y–¹©©©÷xŸã8œ nù}{{�N…B’$!‰ ™L"‰ CUU÷¼£ÇyžG§ÓÁ­[·zHèì!Cœ?S«Õ ªÓÁz²°ç' @¬ñññŸ—eÙQÉd¢(¢Ñh¸ü˜îërÝéÆêêê)]×+Ìþ%#„4€¦».effæ—gffâv½ÙH @6›%Þ!’(ŠÿëÒÒ’Ëû!ÀŽtw½:¼–eíP¦ÚÚÚrÁD.—ÛQL`GÝ�ÆÆÆ077‡Û·ocii©Ç �ý.ðÚ#¶màÁ÷Ù÷~øá‡~øqÏG’¤Ï„Ãa›¾@ÓÉ1IJu]G­VC2™D»Ý† *€:SQõR=z»;ò8‹º³ÏÁ­¬¬|izzús†aØ$I¹xñ"üq(ŠÒ3†‰DpæÌd2Ôj57i 9$]ÞÅ­ÍÍÍ«ù|^W% Šâ{c±X´›¼ú‘K½‰®ë;Ô�HÒßétÜõ¥ˆÅb¨T*@tô’øé±«]Á'‘Hü›T*•îr@+4±së$©öJ”LÓÄØØØÃ‹‹‹ ívÛÐ4íŒeY�;Žƒf³‰÷¾÷½øÒ—¾äv…$I"#5d”$J•è$TÜ.÷óxÇq>øà¿Ù—J¥œH$âvyTUÅûßÿ~p‡ï}ï{¨Õj;ÀÇÅ‹í7nðñx|øðG$kâA@v¼ÆÎØûÈ¿«Õª[y·mårù|SSS…B.Y�ÜØ÷ÁÊðÒwÆÇés~¾NŽ€#ªxôºD£Qäu;w/¶Z-½ÑhÑ+šÐaÀÙÇ´7˜K¤R)'�îod; ¨Ñ£ŽpëÖ-loo»{�çy<òÈ#ð⸑õ¥;9‰Dõzôž`Í Ùs~vv‡F(rÅX>Vn™FMÓÃ0X3Eüv?üðÃ?üø� n||<-I’C_h‰úËÿhµZôÜrPQ”@«ÕâvI^þ2¦sl烕ëå …Âf½^çh‹Z­Ó4¡ª**•Š;ö ( ÆÆÆÐl6‰Ó1O{š´Z­F»Ý¾Y©TÎp4M³4M³üñÖÖ–@:®(Š#Â~I’”nÂc÷#„ÜJ’žçñ¾÷½‡Æoÿöo£Ùlö$Rä&Š"QÁñk£U¤¬]À€Ëf³Ç²Ùì™�g Ð^~¤‹Á&h].�¼oß¾;{öìÿ×jµdíƒÁ ~í×~ �=ö^|ñEâP�í’´é‘’@÷3�ÄŠ•½[µ×0ÇñŽãpþð‡?;666700àÐóþ|‚€—_~•JÅí4ðqíڵƩS§N¦ÓéòŸï‘[¥¹D»�/hÃ0< èDä�罎ýØ"Ä0±^¯ÛKKK[Ìž±ÞI�`xx8-ÂqA,ú½Ð¼š¦J¥RÉ4M ÞrÑmHÓ²@÷ÅãñÏ$ KUU(ŠEQz€Ýù�$Éýì4`&^@„ßDÖêÕW_Åøø8æçç{ÀÛ½´, Š¢ Ýnƒã8$“I· âå…BŽÁùóç]a€·Äã¼;aô±"£Ÿ­Vër¡PÐýË’~øá‡ÿS�D"!E£Ñ-Ë’Jiþ¹¨w“L‚ ¢—,Éã¿Ô†NJÜ1�î¿M�­­-css³922âú[躎�� ÌÎÎbccà ’$!�ckk …Ba=ŸÏ¿Ù%åZ¶m›–e‘dß‹”kà¶¶¶^À�WƒÁ`0 …S©Ôß–eÙ!,OƾÈÚ±qõêUèºÃ0vK\ê}xIßm¤Í]ûéééwE£QŽv´§oýFÃ蓹u]ׇ‘ÉdxŽã¤B¡°088ø�mÛ²mÛX[[ç?ýi¼üòË¢Æ�.H€Ù#6îŒÝÜ tðìgÀOLLˆøå±±±ýétlçãÉ'Ÿ„(ŠxþùçQ.—ÝŽ@½^G±Xĵk×:Ï=÷Ü ŽãhHƒBžçñÄOàýï?¾ð…/ R©¸�ñ ^`Ã+Huœí’E"”J%ùYÚùœîvÐDtºH@€é𬯯7VVVÖpgÒÄ;ôd‘e9A(Ø©ah6››¦iö“‹n1àƒ•b&Ý�GR©”E”¦X&] zŠþìôž%É}2™D½^wÕÌȱ©T*X\\Äþýû=}Lˆù#ù>E²,»ÏKø6¬t²išØÞÞÆ‰'zº*¬Ë=&xèºNDtô:Ÿ¿Ó¢�~øá‡~Ü;䡇: …†DQt¼øôøU³ÙD½^G8&Ä …B°È$™4y’g�¿ �Ò¦žÇ`†¡ƒÁg;�ÎGH%žÈ¥NMM¹ 6=†eÆ­\.ww: 4ð U�hB'ö¼eY˲š¦ÕjµÚÿ �H$&E‘Çy<� ‘˜®zZ–…ÕÕU¬®®zVR»kÍ5�óè% {9É;èï(ï:Æb1‡Tѽœ´éÊ;�Ȳ¦v„\Û%s§>úÑ�þh¹\n߸qCTU‚ @Ó4<ÿüó�e™T÷EQžpw¤QI'„Q<¼»\œè GT0??ÿMNNH§Ó=�EQðž÷¼¡PßúÖ·P.—ݤœ¸—/..¶¿÷½ï=o†}8p/½ôVWWÑh4Üu¡ÒÀƒÜçDú�ï°¤jÃ0P(zÙéóÑ+ 'E’ÐÖëuloo—Î�;w‚ÙOìþ¾±ƒÁàg»Fšîûa¤¹íÍÍM"µK‹&ì>hò9R©T,�ÎɺÊÓ#ƒd¿².ð4 ‡ÃÈårÙ±öårÐ4 …B†a¸K9W~æg~/¼ð‚;ŽEü\ú�Ʊï…�#<3ÒQ$ü™B¡àœ?þ z9sÿ£Í;ýðÃ?üðãû@8Žã“ɤ£(ŠÃª5yÉï6 Äb±ž µªªN>ŸçÑ«ÁoP Ħ~¾]òvFºì•••Ìèè(è1¬›7objj étívÛ Ý1’øèåVÐ]Ë#IzÚéª~ \._/—ËA×-Ë:žN§ß#‚›Ì³É)ë­B‘ü¹N§³‰^B?�0ZàÃaÖŒÀÍÌÌÄlÛ~BË‹»Bþ …000EQ°±±�V«Õ3–Â&dÑhÔI§ÓÃ�N³³³¨×ë(—Ë€t:�L&ƒF£Aäxíî‰ÝõqÇß`7þG­¹Ã€Ù@4 >üðÿ855u˜˜Õ‘Ä5㡇B<ÇK/½„íímw슀�[·n5Ÿyæ™gu]7XŽãp¦iÖ¨¬âí;sæÌŽÊ÷n�l°¿{«É¿]4+Àrèª?5v…­­-îòåËë•JEï³—vKn] §(JVUÕämJr�N¥R©D�G¬\´—$wàL$²,ËÉP(d÷óG¡•¦8Žs(ÈÚƒAw�ˆò™ ðâå;vÌ—¦iz)R�çy$“I áÉ'ŸÄ©S§‰D\ymz=xv‡È÷'%r�ÑÑQ´Ûm´Z-”J%ãÆ�ÏâN——¾õ±ôÁˆ~øá‡÷.é&<Ÿfý?HRÃ�b±èú�¤TE~xxø§‹Åâ3 CsÇË•›îd8wè“ õÜ&&&þÇqGjµš£ëº›Ä’y:�Æúúz�o"‘˜ð&vš¢Ñª<†G@¿v€¹éÛÖÖÖÉH$ò° ¯¹}¶rK�δZ­sŽã˜è—¡çöû™ùí�éE‘g“$ö�ÇñðÃC\¸p7nÜèNìˆ�$IH§Ó®d1I¬Úí6NŸ>�v» EQP«Õ …¸l6ûž\.÷J|èÝŸô>ð’�åÒé´˜L&¹r¹üϲÙl”xN”ËåóSSS3ÓÓÓ3,ø ®ò™Lßþö·]ðAÀs©TÂÒÒ’öòË/ŸÐß2†1˜’$‰‘HD”$©'qd»ì?©œ³] ¯Ÿìï$yf ÖŽã@×u—w@'°ÄøŽWŒñªÕ*¶¶¶Î,,,,`§:�‰·çFÏà††† …B= Föp÷u¹B¡ð-ªËBgÒ ^ÀÇítI’Ä®«6EwìÂá0fffÀq]ÀLŠ"4X!ÓäØõ´uºÇÏkT’>^_ùÊWP©T\0Òh4\N [\ðúþ$ç6龩ªêª‡•ËeîòåË'Ö×׫ة øŽGåüðÃ?üðãž œh4šÁaù¬?qŒV…5ãÒétLUÕÿ­^¯_ÚÜÜüJ7É4á=&ôvT±¼ÆoÜÑ®ÑÑÑŸM&“GÂá°CˆÅ$¡#nÃétz‡o2™zG›hƒ?­O‚Æ¡@ŸnéþˆårùË‚ |Šã8Ç+9aå»ëkW*•uôv`X¹Ôwâ£Âõã#°I1k´ØïoÇÁèè(TUÝA¤%R…ŸžžF³ÙÄèèè}�NǪV«­S§N=O<à„$æ}÷Ý÷ÑH$òD4RÅ$ wWÞxDEghhȉÅb.ø�eG�ÅØØNž<‰ÍÍM—óÑl6Q.—qûöíÆ /¼ð\©Trg4UGFF~LUÕ íÑjµz€£—ây~Ã0x¤y�=vÜʶmÇ4M‡HÓ]òš©T �NKKK 2RGw*Éš·Z-ŒŒŒ •J¡P(4(PÀ&¶o«"‚ Šâ~:áf‰ïº®sÍf³†^Õ6ÖÈBÕ6î­zϱDs¯ñ´t:�ƒêõ:nß¾ÝÏSÃõm¡A?‰'N  Ýn»Ÿ…—äFжm#™LâÒ¥K®jä„3Bd‘Ûí¶Û‘%Ü9 %IB»Ý†ªª0M¹\®Á¼:ž>ñÃ?üðãoyï{ßû‹ápØaÝ�é™$–ÄcƒM\‰ f0´AØ ÿ~.—ûCÛ¶½’š~sçÎ]:.øÈf³ñ���÷*Šâˆ¢HT¬zưr¹æçç …X9^çðáÃ?|áÂ…g¨ =]±e4–»BKdÒ„j2Ž%ŠÅâ5I’®˜¥ýH2 …�N§±ººêªrmnn>ÓétÊTâaÞ%qÛ|t:žTxÙ ;�HW*¼öÚk�e.ÉÖK¹Ç¶mŒ��õtÇØQ2zÞÝ0 d³Y»ÓéÜßn·1??ÿPµZuŠÅâEMÓž.—ËÖÂÂQhrfggGÿùðð°ØM¶M:ùíVûÒyE’$A–e8pSSS8yò$r¹œ;vE��Î×¾öµg[­–›˲,ÿ¸ªª<1ˆ#€5£Ñhìða}c …B½X,žà8Îá8Îâ8Î`uÁ§ãÕ ÀƒÁl<Ÿ(Š­>G'ˤeÛ6–——¡( R©”kŠGÀÀáÇÝÑ MÓP*•000ð€[‰m¿1¨û(� ’$dÕ¯È~êîݵ­­­ zEX/ ÝÀd<»çvT.­VËåâsÑ~2Çd Ùç%dôP(ä9 Iö0-—í8âñ8<ˆW_}‡öT‘Ã[hÊ5ºìú¢ Z­‚ã8ŒŒŒ¸RÜÝãk;ŽãÕ¥²ðöy:~øá‡~øqï�ÑÑQ‘¿¢ Rå&ÕUúbÏqœ;�Î1g>™ÏçÿsŸäýnDjš€ÌK’4 …>fšæÙH$rippð_3=2^U¯×¡ëºÛ©×ëh·ÛH§Ó¨×ë=cXÙl6páÂÖº_…¸ßl<Ç€½ BŒ.±Ö××ÿÀ4Íã‘HäïJ’$�5VUSSSxôÑGñ•¯|º®#8Ñhô@»Ý~å.àc7òyOç(ŸÏwöîÝ{Ù4Í}¬Q�tiš†õõu’z*ýÐÕÜD"áVÿi2.Iöú%s]@"vG¢h6›ÖëuîÈ‘#o‹E;—Ë9cccG‡††„PN”ˆhBÞc»ÝÆÍ›7qôèQÌÏÏcnn¯¿þúðQ©T°²²Ò~ùå—¿Ùjµ\¾�¢(âèèè'"‘ˆ >Èk‘Ï Ñét<�5Mã*•J¡X,¾hÛ¶Öç¸íƯ¨Ú¶­‡B¡ñoG$À"~øá‡~ÜÛDUÕ8I¾ØJ/㤌V«ÕÓ%!ã4·¡›œ8‘HdOµZÑ4m�J2xxKÜ‚*Édòp ø¥x<êVÛ¶´m›“eÙ!àczzøÀðÕ¯~4„H�úÐO�‰ÇNòº½µµu¦P(,¥Óé�F£R*•Èçó®L0q�D"C[[[6în×t€òÇPU‰DÂâ8ÎUî!ã>´ÒIˆØÊ;mhGöÁ�Ðét Š"Âáp‚<¿Wg„%ÝÇ:†a8ÝDïèÈȦ¦¦`š&¢Ñ¨ëÖN®Ù(¢øtþüy|ðƒÄ›o¾‰ååe—óÑjµP©T°ººÚøêW¿úl§Óqù’$)ÃÃÃ?�Fy2BCÀëÓÐjµ¸@ @Fé¸î}f¹\~®V«<oZÉhW‚w«ÕºÔ•õý :�†®Ø_žf³é&Ädméñ/ÒÁQÅ™˜˜HÞ¾}»��nç4¸î ²“ÉäA¢ŽGm躎+W®±S±Í+�Þ8W*.�Ns¬Ê½�Èž­V«=ɾðízk@YýÁD,s¥°½ºZ„K£i¸ûƒ¬1áâ°ü*úùˆ’Y&“�¢(ƒ=ã|DÆ|zz:¹¸¸XÇNå«¿Œ‰«~øá‡~üàQçDQ´¼Ô¯XùÝb±ˆáááª/ôÜ:©ÂJ’Èf³Ÿæ8®a†Ól6Ñjµþ lضmÙ¶m†aÙ¶m0XnllìÿTåX×wÀa Â2?�H$ðàƒâK_úR�G I@¶··166¶c +‹ahhˆ/•J´Û00Ò/iê7*f3Ý7Á³,ËÙÜÜüÃ`08�FZEÇ0 <ùä“xõÕWaQ£’Œ¸ê‘(Þ |ô$¶Žãð�<òÈ/g³Ù=N¥R�®ëð"“–MÆèj0Í1 cI4Ù—¨e¢Ý’H¯‰aH¥R(•J®ab?³Dò÷48ù­ßú-ìÛ·¶m»#/år«««Ú‰'Nt:ÂMÐA ÿD<çi�Cxô{j4X[[û^(zW—kñ²mÛÍz½®¨t“lväèí¸Ô»ü¡b±øºaÕx<þ±p8†a¸>rlHÒÚn·{º}4H!�!ì¹¹¹#·oß^aö5îÒAãð²,–e9Í&ÚôwC»ÝæLÓ<‹þ†·;:ˆíííòØØØÅN§³Ÿ8`»/0³û�í^�"DµZÅý÷ßUUAä±u]÷,¶²x½^G>Ÿ‡,ËÐu½‡ ßn·] ïå£Cƒ3~h¯w¡ßâ\9cccÇ—w>øðÃ?üðão ‡Ã«8C�ÒR¯×‘ÉdzdYÉÅßÍÌ© n0D$‘EQ”mÛF*•‚mÛ_ «ê¦inƒÁï†á˜¦‰B¡€l6;¤ª*žÉrW üàñôÓO£Ùlº ‰® ß¼yóóóH$h4.QU±XlÀ*î�Èyì4N¼Û…Ÿ$ÓEaUªèt::=òÔSOazz.\ ãÜÐÐ�Øu^§Ñã þñ�ü³£££ÓŽªªtG“Ød¾ß“�­É(R»ÝîQ&¢“3F7ƒîVЉX?þˆ¦iîßÒjO´é�0’$²ÕjáìÙ³˜œœty-ëëëõo|ãÏçóyB8×yž� ÿx"‘zu>hry³Ùt666^¬V«ÛxËçÆ¤:SzÝêYK›îškµÚÅZ­¶�L&ŸP%(˜,˶j\n @褖¬—(ŠH$ìëqocñøááaI’¤kþGwˆêõú îÈÇî>î&8Á9Ž ƒ‰X,†d2 EQ iÚ†ÌßÓ#à£Z­"c||ÜWpív{Çç¡»¤ØB¸dÉdr‡¢—i+û=Øn·Ñl6�ÇûÅ®Tõ;9Ï}0â‡~øáǽ@èñ+TÐɘ¦i¨T*�$É}ÜÀÀæææðÚk¯AÓ´ž +¹¸V*׬{Q¶Ró€mÛ! D"‘€eYEÑ!sí$ñ¤;3�@†aà�þè�‰DܪgµZÅàà ›œ‚j,C.—£Ç°œ���^F¯„. DX¯’~^´œ,ÏÜç”B¡°044”³m{ضm\ºt ¿ÿû¿�ŸýÙŸuÇ1$I’°“gòvÀ€ß»w¯xðàÁ9:::;00UU].Å}÷݇¥¥%äóùžµdÅèR&”†a V«õð%èýú;"Ë2Q±òײ,Ë»¢�¨YÓ=ZQŒå…,,, ™Lbcc/½ôÒf>ŸïéNŒ���$“É ¡!ÏO*Õd/µZ-keeåÙr¹ÌÊ£ÒcF:ó;í#s7hÒý;±T*}³T*É™Læ}ªªfDQìá\q‡jµÚÓícýDÈ1Š¢¡P( i-˜À‚m²Ï{cÆgHÆËœ´ Ònb'�õ±è—8÷ìñx`tzzz$™LÚªª‚¸¡‹¢ˆÍÍMhšÖ˜ÙcOˆjµŠ\.çŽY‘cKºjdœŠ0”#¹¹²²b‚ ×ëu(ŠÒ88Žƒ×Ø* àMÓ,µÛmÁ4ÍÍC¡Áb(’"È;9çýðÃ?üðãÞ l‚G'¡´ün—,é>fÿþýø…_ø|êSŸrç¤Y)L2ŽE'Žäg?•%ò;I^Y…ÚŸÁ0 ”J%„B!4 nkkka|||ŽNl¯\¹‚ùùy\¿~Ý}ÎP(„x<Ωªz ÑhœEW¹ª{cýx*‰â<À›TÒs&óh·Û6qçyßüæ7‡]¢¼$Is÷†ã8œGÂ&aìpàÀ�_ŸK¥R=Îà‘H?ôC?„'žx¿ù›¿‰f³é¶yu@hS;⟡i·¶¶æ�ç$nÕŒ°¦q,(¡G¶h@BöñZèçÚN'Œ^pÒ9YZZÂÂÂÂÕååå‹Tb¬���ߟH$‘e¹Çè@Ï8X«ÕÂÊÊÊZù-wE¢’¦3 à �Ðü‡»�ÏÑÇM£|T,ÏD£Ñû%I Ð’´’1 €Ðç YgY–Ǧ§§cW¯^môÙOšiµ¹@<‚Á COº8¡iZgsss»øx»ü788ø@&“ùÌàà Mï[rœ²Ù,ÖÖÖÜÑ'/Q–«Õ*jµöìÙƒF£�v»�ÍÍMÉfLÐãRÍf�NÇyã�7¾½¶¶VO$C‚ Dc±Ø~"Ô ±¼¼ŒL&³¼Óßs]-»Õj9»§îwÒ`—«Sƒ· úœû~øá‡~øqoÒ9 I¡ÿƒ�1i“¶Ó§OãÌ™3èt:}åZÝê2 >úúw:é!kv†š¼Çr¹Œ|>ÿº$IF«Õâ ÃpÈ¿V«AQȲ MÓÜÏ©ª*·oß¾éÅÅÅr¥R¹J‹Bú…³ q“‰µµµ/Æãñÿ; YÐh4pìØ1|÷»ß%Ä!£ëz“­HSïƒNJxŽãøññqáÈ‘#Ÿ?000࿈.ØÂã�?Ž`0ˆ_|ccc¸zõ*êõº›ŒÑkLw¾º*RÜòòòæo¼qjzzzljjj¸;"3ªªª£(ŠCÀH?@B’ Ó#[Š¢5°7úùÈ{£y.]iÕmPãR###‰Ä»eY¶éÎ TçÛÛÛ¥R©ô-Ü«"NÞ„ÄN�Yð6�ôÅv ñ‚ õ~mÃ0n·Z­ÛŠ¢LÓNÞÇA’$Wõ�MlÉc�“eÙéŽø°£†¼¸æ �ŒŒŒêºþ1EQšÿAƒ=Ã0Ðl6MMÓšè_`×»$Ì<ÞrZç�?þàÈÈGL%½:CCCX]]í#¤»1�NÇå|�Î(‘*ÞÜÜtÜHA…çy„Ãa—ç1>>Ž••gmm­ À.—ËË¢étz¶;AP­V166Ö³¯½|©TªT«ÕA2vÉÊ“ãÔ-°þB,HôÃ?üðÃ�¿9„˜ ¹H˲ ªª[Å#óÔ]~†[5$J1¬l(ý;IŽú9AÓm”x�ôЉ'ízÜåvºtéÒóG�­†¡’×&NØ“““8þ<�ÖÖÖÐét0>>>•H$&ŠÅbåÆ�¿Óh4¬®œ¨Å¬“ÍüìW…¼áº®»ë´±±áº5w?‹300ðp.—[ƒC¯Ñ0wŒÇq~ÿþýÿzbbb&�N;ÑhÔ­ ‡ÃaüÈ�üDQÄK/½„B¡MÓ�ÉdpãÆ 4›ÍWmrÜIE¸\.Û·oß>}ùòå%öâââÅÅÅÅó055�F£¡x<þ·2™ŒMÔ«ðéHúñGVVVz”…ÈM `ß¾}X[[s“P²·X§ìnâ}?€¯°³Ùì}©Tê”è÷As’:�J¥R%—Ë}wL*;è5ªd;nÄÊKïê³��ªGîó´Ûí?×uý³¡PÈf¹ DT€%¢³jX’$9ñxüþ z 3éd<ÏóÉdR�D"ÿVUÕp(rXÆžÏårßfÞ÷;逸@hïÞ½Ÿ<šH$UUݱ+Ò¥ A�ªªÈår;Ưø(—ËH§Ó®¼.½Òu©T CCCn÷�î´ž[”Ò€r3—Ëýy4ý{’$Ù]/!°¾Iô÷Ww}¸Ó§O_…BKº®?aš¦C?²‚‚ °&§võÃ?üðÃ�{€$¹p’䆨J麎h4ŠÑÑQ¬¯¯#›ÍöÈîzÉ`’jr(Ú!÷Úïwö>úýàƒâ±ÇÿøÅOæ".µÛm³Z­Úš¦¹ïgii gΜÁÆÆ.\¸àV=%IB8F"‘àS©T2™Lþ‹���ï\¾|ù«T‚DwAðßBˆ£aš¦®iÚ˲ælÛÆÂÂ>ÿùÏãôéÓ®¯Šªª`ÀG€Mñ–Áç8÷¡}èóÓÓÓ{ÓétOçCUU<ñÄxå•W°µµåÊf³ I’pãÆ ž€8Žã\"x±X4;�Ε7Þxã “d“ñ"gii©™H$4MÓi6›Ð4 CCC®I^<w+Ì�°£Uô�x.°îׂ `ÿþýD&“Áöö¶«bÔÏu\E%‘HìEÉdò˜¢(6Í+"’¶$±m·Û(—Ëùåååç˜ÎG«{#]Þ2³^ÞoWqÊKõz½�Ç ²,'içs²&^<ºBˆèCCC‘>û)@Þ{"‘ø‡©Tê‡#‘ˆ)Š¢ >4M# m=È]¥¨:¼=FîF>çHçnÏž=ÇöîÝ{”ˆ%Ðàƒ üŽV«…R©Ó|kº‘–Ú ®¼.;šÕétܪ$Iîë`EÖ� ®¨@¥RiW«Õ•p8gšæYW:ˆÏŠ êªf�Æ2“4ÒQ>›Í óóóÿrjjj6�NƒÌÎK’„H$‚}èCƒxå•W\/]gðö /¼ðœ 6Ïó6Çq–ã8–išvµZµÇaÍõèªÿ[(<ÈqœÃó<¢Ñ(QFrÕ}$Iµk× ª*Eé!Ó€„ð?ØNðÖˆI¶kµšË¢Ç:a[–…L&s¤«ÊfÓFƒ4ø ÕójµZ½yóæ Üá|´)ðѦˆ±K•ÿn^^û¤/`Ñu½Øjµ¶Âáp’€'ržÐ²Ó¤²NƒxšB�÷Ð $HŽ£(Š¿800ðP45Ùî¥õz½çœ1 ápXÖ4­†Ýý+Яû¡(J|rrò—†‡‡{ºv47‡î~´Z-lllàsŸû>ùÉO"•J¡Õj¹]3Az$Á h6›V­VãlÛæY“C/s `êtÇqÌB¡p)�Žlmmq£££=rÖôø"ùné:¨;ŽãØív»GŽš>N(F£ÑyÜÅ`Iéôè¥<üðÃ?ü¸÷ˆ =dÎ~óÌŠ¢ ™Lbmm ÃÃÃ=Ò©¬‰W£Ñà:�Îù���&Ïó¢(Š‚@“YzvÚ  �‘Û¶ñÚk¯¹ºÒËhîsÙl6‰Dd`‰¬ý¤fé$¸›|ºëGö<ÙF>Ÿ?‹Å“eYd•½D2êõú¢ã8¶ã86‘gÕÊÈqêŽÊ�é~Ðç½…�cX>ñÃ?üðãÞ tRÞ/I'|Xh!¾D²µÙlr…BáJµZ½B%³¨dÍN$?‡ƒ‚ p(%##Äa›N.YÀááqznnîñ¡¡!Äb17¡a Ç4Ø"ݦãcëº~_­V[Z^^~­OBéELçvIÀèê¸U*•62™Œ)ËrȶmT«ULNNÒœGÅ�ø÷Ýd‘žÛF"îØ±cŸ�››;044Ô£v‡ñÈ#� ‹áäÉ“X]]uGPšÍ&J¥VWWëüÇüM˲he'�"ì\?}?AAžç¿è8οb%–»¦}x饗z:­V ¦i"ãÍ7ßD4E<G&“�$I;Œ IÚjµ\Áƒ»™±ºNîïÔiðQºvíÚ³}:dôJC¯Ä®}—nÇÛM �> „뾟€mÛ×Úíöº¢(YšŒÞÏ��­¬wǧ¸L&“:þ<dOÙ²,U%N8äæ%Á*‘)ŠH&“Ê[“Xo‹0í‚�£G�þÐøøø»ˆän¿Ñ+rÜêõ:Ö×× O?ýôÅxà1ÒêvÀðð04MCµZu^{íµ³ù|~‰/Y–¿aÛöOvA�' : ´¯ 9îv±XüãããŸÁfׇþ~ê4»ÇÓðªiš°@‘~MQ¹���T¡Pè0ç|�Ùs>ñÃ?üðão nRFƒ/§kEQP(�H$Üä°R©€Óh4ZÛÛÛßÖ4­D]¼-*qu \.½\.Ó$K^–åd6›}w(³,ËìŒ5 <ºÕíÎØØXzll ‘HŠ¢¸<¯j.=nFÏq“û’É$†‡‡?pûöíKÝ$Å«Âív"à-Çë@Ü.H£Ñ0#‘ˆkŒvêÔ)¨ªêº¢G"‡IBHòˆ¹¹¹¶oß¾=CCCnçƒÌµßwß}Âk¯½æ’µÛí¶ÛùX[[ÓŸþùç-Ë"„j�I²Iå—&D[ ø ɤ•Éd>)˲E›ÒëÌZrì–——¡ª*LÓtUÖhçkv �* AÍ;"²ÁDb˜¨dñ<�z½îŽvIÇÕÅÅÅÝϤ{t>hÞÇÛq7ÿË$ƒ^ „£×]×õo†ñi2zV(ÜsƒšB�4RªoAžç%žç-I’&#‘ÈûeYv4MEÑé§XFŸ‡äõ‰¼v×Ôó=®Â[>ÖëùDr—v(±mooãõ×_?ŸÍfGdYÐ ‰¼7Ê�ÝÉçó7àÌÑ]3¯NnÔ± yOV¹\Ö'''Á:ÃÓû’¼˲X°£SÅŸîqâöíÛ÷áÍÍÍ­[·þ_Û¶Eì4µ¤Å0|â‡~øáǽ @Òé4fff°¾¾ŽµµµžQ,/‡P(„V«å^H‰ nµZýn§ÓYë^,5ìôL°±Sò“�,ív»S¯×/I’4Áó¼M.èìHyMÒuét:\³Ù\Ÿ™™ ;´¡]?âå}BÈé©T*’Íf�¯¯¯¿‰�c6•œpÿïì’l:`Ư†ñï-˲lÛÆ¡C‡°²²‚jµêV­#‘Èd½^¿@`pç?~üŽ;6�Édܹy>Ž?Žññqœ9s·nÝò»âŸ~ú雵Z­Ù=6^‰¶×(–íqüøÙÙÙŸ�D"“´©Ÿ¦i0Ms‡B�œ1‘S­×ëh6› ŸÇKy‰®¾ÓÏ¥ëºëYB>+ña]³;�Y—À•+W¾IíSvôêí‚�¿Šä�!4oÈÚÞÞÞPUµÝétdQÝu"Ç—UÂb» ÝâÁ±éééã”"™ÜýÆžï´K7Çqh·ÛwÚÔ÷�(Š*}£¿Ñ!€O¥Rü‘#GþÅÈÈHˆørôãç�Ñ«J¥‚………3 µÙÙÙCÄ“ƒ¼oV:¼R©,S@Z`’ó›í¨²„ã8~vvöþëׯ‹=ªªZ„€¾›¯a�$IÎd2ó­VËÊçóúž={v˜F²JXƒƒƒ¡x<>2<<üÑ›7o^Ìår¯1ÀŸŒ�bì‡~øá‡?øäرcH§ÓÃÓO?íª Ñãô…’N » €k·Û/v:�B÷âØa’7 ;Íýèj(ùÌçóg‚Á`�ã¸�9ŽÃÓ„Œ�¨ªŠZ­æ&žõzýV0\ŠÇã{%IrhNítÍγÓDfòoâ¾-ITUu²ÙìÇ­­­­m`§ñŸ�;cXvÒ¯Jnkšf뺮ٶ´mñ�ééi\»v�$�\<ßS¯×ou;âý÷ß=|øð‘ááa›$o|:t{öìÁ¥K—pãÆ�ðQ©T°¾¾ŽW_}õJ­V;C�/…'¯d»§â*˲822òOUU�•$©g�eYv;,©œTµ ‰™tÙxžG©TrkvÔ‡p¼’MÖ­½T*õxGÐÒÍk·Û(•Jç(�Õ¯ûñ×>îBlÛ¶·Úív'‘HÈŠ¢¸Àšçy´Z-×Y¾_r+b±˜“L&ö\&œ /aˆ`0ˆßø�ßÀââ"~çw~Ç%PÓ�év,ú¹¬÷ÈEàb±Ø¿™J&“ðâ�ÐÇ•Hë.//ë/½ôÒR—PŸEѦ½¿4MãŠÅâ5Ü©#²Éðê€x¦Óiçúõë;ÎÙH$bÓ„%°ÓÄ÷N§ãÌÎÎÖuÅbÑ¢GåØ. ñxº®# Í ‚0 ·VVVnõùŽñG±üðÃ?ü¸wÈöö6Òé4¶··Ý 4{Qe§G˜º‰înUd€xu@h…!—Ë]`G£ÑOH’dÑc ªªâŸøžzê)×¹Õj :޳LÈÌý$^éª%;næex'Š"‡÷ìÙó¿w:�ËÅbÑZZZúöÚÚÚ•î{ÂÛx®¡³§T*Õ2™Ìk–e½Ûqܸq¿ò+¿‚gŸ}–ö6ç8NqÇ8~üxüÈ‘#Ÿ&~4ø8pàöíÛ‡……\¾|�N‡Ü›o¾yaqqñÓùh1ÇÊÀNyY0 ÙlöG£Ñ9Y–{¼"ÈžEÑ•F%Á¨qårùd7ñ´eY~�¦iœ,Ëán�¿Áëb; 4ø níÕj„@ºeä8Ó¾1Á`�€ƒÙ»ª+bþ5��~€Ä`§Óéý‘H$ÉlŽãÐh4Üñöü% z×��{:$»¾ÇÁ‹/¾Ø÷»�úN`»^ „?zôèôž={†<ÁËûh6›ÈçóÚ믿þ<SUÕcápØ¡ÏeÚŒ°;~U. uôJ)ë8Ó49Vä€UÂê6O'rI’ì~tV4!™LÂ0 \¿~ÃÃÃY–]¾œ—!¡,Ën¤»ÇqXYYùOØé+s·"‡~øá‡~ü`�+W®`yyÙ5ôº@Óã/¤ÂG% º®—qG1†Nlû„�F ær¹ ¹\îêÄÄÄOŠ¢8�F•X,†`0ˆÍÍM(Š‚F£žç!I’Rô¨•×(‰(ŠÁÀÀ666°±±ÑóÙØÇƒA¼ë]뎦iûÇÆÆ033s¨V«assÓEñ?noo/^¼‚^U¤~`LBã4›Mž(5ñ<�?ù“?ÁÔÔnݺE’“ÈØØØÏ*Šòæ‘#GîËd2ˆÇã=àcß¾}8xð –––pþüy÷8¶Z-T«U¬¯¯sgÏž½véÒ¥ ÝcD’ìu¬¼ªýlbÇB¡àÈÈÈg£ÑèA>ع}²?4Mã,Ër¨}Ãu±\áÎ IDAT»e¹|>ÿ¦¦iej­®@£Ñøè‘#G¶m;$¡d%aé1<¢nÕl6Q,±±±A\¥ñùÏ_ùÊWpéÒ¥žD�ªt;Dÿîï¡Pèˆ  °ibšf�h]Ñ'£“Äñ›tž8ŽsÿMßh�þµ¯} l÷€V3 ƒó8—éß]ð‹ÅþÍ[¢9Zä5H‡¬ë÷Á=óÌ3[kkk ÆÐÐÐP(rXŽn;�Fƒ‘Íqž%ëÓݺ  9�®Ž]«Õþ©ã869¿lÛ†(ŠˆF£=û²Óé@UUloo#‘H@UUWñ�Þø�ÏCº}ÔçÚóðÃÿ�S§Ný<Œ*»ïËò» ~øá‡~Üs¤Ýn»êB„[ÁÊëF"WUȲ,×1Ý4M4›MZ²’í‚Љm?²6Ouh&éöíÛÿU–å�üC2þqýúuÌÍÍáìÙ³$±rdY>œ~^#ǹíP(„t:�b±Ã0vHÓÒÀñx¼‡àL¸|»Ýþ?ÆÆÆ¬ùùù­íím.ŸÏÿ§Z­–«T*V½^×àí‹ÐÓùÙÜÜüz"‘x—išœ$IøêW¿êŽÕض�b±ˆÉÉI>|ø¾l6 zìJEÌÌÌàÈ‘#ØØØÀk¯½Ö3vU­V±±±�‹/^<þüôŽÑþô˜ŠÉ€¦žJðððð¿ŒÅb³^àƒN;�Êåò¥b±8§ª*×jµ8žç_Ôu½ÝjµJØi\çÀ�7þX„äÌÌÌǒɤëBË(Ó\¶Êå2†††P*•¦iâäÉ“¨V«}+û”ã=Ù»z•À¬>`ì¯;É �Ñ4`Óc…Äx“ ,EÓÓÓ4§###qÏç~ „¬«8fšÍæi�ŽéhZ8žç¹GyäSÓÓÓ-¹K ú9;�jµnß¾}sssóu¦ ªªFh@Jºn´÷Í›7OSÇД¶mó¤íFD'ëE�`8OLLüR2™ Y–…r¹Œz½îY–Ñét0>>Ã0�F!Š"nÞ¼‰ññqWƒ¨ zqHhîYoÓ4�Ç�~+ŸÏ;ð6zô�‡~øá‡÷¡GT¼$M‰y«ŽsóæMt:.ŸÏ;%+YyמD³1qGrÒ%^¶Ûí|§ÓáE±‰b?![âE±[X–…jµŠÁÁAT«ÕÃ269€ ÷€1šün†c¯iÚp6›E«ÕúB£ÑàJ¥RÀÓëëëÜÅ‹¿  Œ^µ,7ASUu´^¯s]#2$ ‚€‘‘8Žƒ¹¹9˜¦‰‘‘×Uœt>æææpüøqlllà•W^ÙÑùØØØà.\¸på�7Þ8×=&mxó>4&éö:FÜÄÄÄ?‰Çã3²,;´b1ª# ­Ýns¥RéÊíÛ·Ï8Ûh4h÷tZ•ÈÂNqþÊ•+åv»ýg“““ûâñø¡H$b‡B!‡ ÑhÐ4 ™L†Œê@E€=óÌ3=|¿½þ&^ä{|ŸÁ‡‹Å~) ÚlW�Œ|>�¡¡!w¼Ç«ÂOF S©4MƒªªPU¹\ǹ]ºÓDÎy˜Ðþ.ðÑËåò&³WØŽ¦•Íf,“É| •JÙýx´4r£Ñ@.—sþìÏþìU²OÒé´­( OƒQ�ñ+.ŸÏ×ða0mÛæ½¼8XÕ°î÷ 9Gù‘‘‘¿=::z,•JYªªzú ‘ÁÛ·oCÓ4 £^¯#�öH�“s†þ�ƒ#ÝX²G»ªƒ² !!¦@Cw˜,ÿRæ‡~øáÇ=@H…“®b“ñ–T*åV'Ù.©ªæóùP¡Ph£W®•5­c]£YÂJ�öÈMjšö”iš?%‚S.—qøða÷âMÈ›l—N8Ç�¦i8}ú´;¾¥ëúŽj(]M�ÅbˆD";dNY ` �غ®cllLh·ÛÅ�~´X,¢ÝnÿF³Ùlnnn5œªª“SSS??::ŠX,æ&elbC¥ÈÈJ(ÂÔÔŽ?ŽB¡€ï|ç;=à£;"†Ë—//tÁ- ÐêÓ�²út¨xQÅÁÁÁ�Ç÷)Š/ðA;Š—Ëå…ååå³Ô0˜Äi·dŸXZZº¸ººz=‘H¼täÈ‘|ßÐТѨ[Mƒn„xAÄãqär9w/SÝw/t߯Óå-Ù ˆK°¿OàÃU�EÑfý&hB>€xq5 Ãp÷­ qëÖ-èºîžÓ4§�(šÑÂ䜫Õj¨T*ÕR©T¥Š€ÄÆÆÆ¸P(dišf:tè™LÆfÍAi·szôªP(ØçÎ�{w|4´P(ô$Q¿¢º=¤\.ŸdŽ©A� @úù€ð<ây^ý[{“ɤEÞ;-ÀŽ€É²ìºµŸ={###ž|4JA Š¢¸\:Ò¡ac���ýÌúúú¤@Í?£ ýnˆ~øá‡÷!ªWtÄ0 ÎEOVÄ(è' }èÍ7ßü³���•¨±$I:¡Û­ âEâæ Ãh’ùm˲ ª*dYÆúú:æææ000€jµÚˆÉ í]`YšÍæwXȲŒ~ðƒ�$ º®ãæÍ›ØÚÚê‘<íg‚GnÝj®8::Šv»ý…F£�©©©†¦i kkkˆD"GÇÇǹX,š@Ï*@¾z½Žx<Ž™™ÜÿýØØØÀw¾ó´Ûm|p—/_¾têÔ)2vÅŽÄѮކ•Ôp©TêsÉdr^Q§ø c3¥Ré­[·Î£w$ÏËä°q+ç¦iêÛÛÛzµZmÑÜ$vfŸ$Ä‚ ¸+¶£E++u»4f±X\€·Ô°Ó,ÿu€·,‹óêî‘„5›Í"™Lºž 4—€ã8†á&û„äLï³nâ~³T*q<ÏOÓI}­VsMAÙõ…Bœ¦iôŒ›3<<|`ttt6 M)Š#ߊ¢Ø²,ƒî �÷Gó>ÈxØõë×óçÎ�+R{GK$AÚ|�æR�¾Õj™}¥E::l‡ˆí€€,Ë3�<òˆbšæH*•ê‘»¦×�Uà¢e¿8àòÔØ1OJm ùÈGP.—ñõ¯Ý}o¬ô¹$I´y$1$å±»é£~øá‡~üàMÓvÌÖ“‹1mÔÇV`©NH( þ½óçÏ?½´´t»ûx…ÃtA€;Z÷®V«•‰„fÛ¶è8Nž<‰��ȲŒL&ƒH$žçÝJ0QÈ¢Mñت8ë%AÃ0ðÝï~Š¢`ttûöíáC‡Ðn·±µµ…r¹Œng£GZ“%lw¤ HMÓŽ���£Õj�V³bݧéäÊ0 T«U á�p;|´ÛmÔj5lmmqW¯^]Û¶Ñl6¹���oPÕbÞ³õßÏÑ+wï—J¥/>e¿îg_YYÁ¡C‡À&ǬÃv(ÚÄèN‡iš˜žžÞ{ñâů۶-$‰q6u]‡$I=ÎÝd½Ap’ÉdfmmÍN&“£“““?œÉdÂT§À&¯CøLív“““PUÕå˜Ð{¨^¯cmm­úÜsϽLu/ôD"ñ¡p8¼ƒC�Fv:�æÂÂÂ- ü’½f§R)irròsÑhÔ¢;¤ý8 ‘HÄ‘$)›Ï粯èÎ+ÃKž�æD ¹ß7ž—ã TUE»Ýîù~í³¼Ït@üðÃ?üðãÞ $Y£Y–]ÇhºZJ.®„m> ~X„£×¯_ÿzÝ»Ù$s7iú~’@ó¥RéÖððpѲ¬aÛ¶Ñh4\p@œ”£Ñ(.]ºš°ËJd’÷î@h’¹®ëh4D‰W®\�$IˆÇãˆÅb˜ŸŸ‡¢(0M7nÜÀÖÖZ­V�ª ¡_«P(@–åžîG?BþïæÍ›øó?ÿsX–µ£ó‘ÏçqõêÕkßþö·/R µ��cPôˆÍIáAlÛX–e ¤R©ûÂá°Å‚zí4MC¥RÁêêê3º®—p‡ìN�{±zÔÉ €¸Éc±X¼Øh4Zº®GYŽ5³O*ÅEµZÍõ¿`ÍÞDQv*–Ñ��ï'è N· Bºô~q¥li’3Í7`ebIA�>EÁÀÀ€óðÃÿp­V³766^‡Ãï�D"Û¶ÝóÉË·B–eezzúïŒ��ÇA�X±Êeh,..º :«zµ½½Ý~þùç_C Ïd2m>ÈT†�F£a3ÀÖ`qçLLL|.“É$c±XQŸî‚Ðû)™LB×u‚€B¡€K—.¹]¶ •JyʳŸ7�£Óéx* Z–…ÍÍM<õÔS®9&û8ò¼š¦Y¸Cì§y6ð» ~øá‡~Ü“¤^¯ßÉø©D™V˜¡+«4”é„8‚ LD£Ñ�½ñÆ_ í6vsñ¥ù .'¤Ùl¾‰D> …œ±±±R6!´& 4�)KR™¤y,ô¸I€ˆ‚T£ÑÀþýûÑjµzÆ ˆ2O Àµk× I†††�Íf1>>Ž@ €z½Žb±ˆ\.çšñyuGÊå2$Iê‘"íGJ¥Íú8ŽÃo¼�d2‰N§ƒp8Œz½Ž|>�ëׯcmmmßÄÄ„®išY«Õ6[­ÖuÜp¼ºÑht<‰éV¼?á8 ÿ[,û >ÈÈ ]µÖ4 ÕjÕÎårÏueuiðá%ñkÞ%é§æÉ{¶666øÉÉÉDkš”MÀE$ÁíÛ·=G‡"�N·ÛímìôÂßÐáþ| ‰8]àDF¦055å2úCpÒ*Yä<öï“$ ápSSSEQ`Æc†aØä|h6›\p.Ë2� Ãà§§§ã„ŸÃîg¯×“e+++¸~ý:Ž= ÇqÐçnæóù6Ýý�eY …Bó¢(Z´}ëºÎ_½zõôò?,ŽãB333ŸM§ÓÉx<ŽH$â‚0¯ÇqˆÅb=¼àθ\¹rÇann=àŽ¬µ îºâuÓ4 ›››;Š"ŒÒ¿´´ô>àðÃ?üðão) =&rD ‡u쥫�¤B_¸)ÿŒƒ¢(þ/gÏžý/ívÛ‹ïaQ‰ž½K"FW¡ƒ'''?šÉd,"GË&;óóó8sæ �†›ôДЉ4™?' R…BÁ6¬z ùœš¦¡^¯cii ‚ @QÄb1LLL`~~†a`yyÅbµZ �NÇuÿÖ4 º®»k¯¹r6±¡“”íímT*d2”J%,--¡Óé �NÛ–e4MétÚ6 ã±f³Éw:�ß6MSjµZAMÓL¢(ŠN2™ü¬ªª“¢( Ýckw_÷Lj ]M§Ç®ºàÃZ]]}ºÕjUðAÒ#_ô˜S¿dŸgƒf³ùïZ­Ö¿1MÓòê‚�c"¢Ñ(4MÛQ…§TÓœX,¶okkëô@§£áðŠ¢d‰ÄÏG"‡8ŽƒD"ÑÃG ½WÉÿÓ�>²¯Èzপ*`Û¶í¥üÆŽ(â:­ªEw?è"yMÚ×% âÌ™3˜��%nç ßúÖ·.£×›ÅˆD"IUUVº–t2ºêW†eYlÄJ§ÓÃÃÑhÔ&cT¤ãH@€žõb¿mÛH§ÓÈçóPÅýL›››Ø»w¯;ŽHwšHWFE·ÀA~§Ÿ›|GyòwÍfÓÐu @†Çw¤~øá‡~Ü;dmmí÷777€Mƒ‹f³‰©©)·RHfÉYâå¹f%Iúé—^zé?c§#²—òU¿J0À~ôÑG?355µoppÐU£!É; ,ÆÇÇqæÌ™ž 9ͯ AKÇ×åJ¥‚\.·iYÖ`"‘„Ãa‡$U$i¡“=r#£Pår«««®"S:�ÆÔÔ"‘ˆ›´¬®®’Ä¢'ÁgÕ}X?º#B*ÉKKKX__Çq…B=IŒmÛ¼eYb4…išŸé&ŽÓ4o7 ' …E™%Æn^ã:•J‘Hdt…NŒjµr¹Üs­V«Š^�ú楴eïÒmà˜ûL�N§Ó"Êe¬W @E�ªª`Mç(“9ȲL¥Rã]"úBE™c~çØÙlö'ãñ8/I’C’ã_ÿõ_Çïþîï¢Õjõh®QXÊf³˜��Åòò2VWW{:!´ŸH0D«Õr=#Wì)ÔÀú�hš†d2Ùsް‰6Q.£÷Ù•+Wà8Žýæ›o.Ù¶MÈ {Eù˜$Iönæƒ�Fc¡ÑhÐrßÞrNÿùh4j³ç0 úY€O�Rò<ë ypÙl�@ëëë=9r ‚Á $IB§Óñü®¢}?è.YÏv»�R©t£+íí%˜à‡~øá‡÷&yî¹çÞPUu9�Nÿ“H$#úµµ58Žƒ‰‰‰žDŽTOYÙN€8�@`îÑGý� .üA¥R¹èBÈÅ”gRWÎszzZ¬‰‰‰ÇŽ=êD£Q5Ç»#_;öâÕi6›ØÜÜt“Áh4ŠÑÑQ¼ë]ï‚,Ë(—Ë;$:éÏDª»tG?–¼6|ò“ŸD«Õ‰'Üçex$v7aKZ–•ŒÅbèt: ‰-�ÄÒóç�@­VË]"ëU¯×Í\.÷ÍZ­Vôè|´(ð¡Q e?‚7[Í¥ù 3ŸÏwjµZQ×õ8-¥Jï;²&’$!“ÉàÆ�îqw[+wë|$™,‹×±ÓñšÞ£Õe|�ײÙì?ŠÅbÇiÓÇO}êS8qâÎ�;‡}ûöíàbÑ¿ ‚€ùùyÄb1Äãqäóy†á9>I~’$�ì7/yjœ°JΧp8ܳ¯éýKsPÈ}š¦áÆ�Îòòr…$Ùñx|$™L¾?‰Dèó�?úuu]wªÕj ;�“©TªgD“S£Ï9Ô° Ó4w_H$ :tú§êž«^ǃŒ…’=HÎ9òXNùN*•JÛ§OŸ> oõ¸·s>ùá‡~øáÇ& \6›ýl$‰±‰z©TÚá­!IÒŽ„Ž$¼ì8ز,êÊ•+_^]]½@%ydÆ›­ˆo9'ó‡z|~~þGÓéôp,sh¾‡WrCƈrO:�Æââ¢+%J{l�äž�_Ëå²}ëÖ­o®¬¬�j¾Àº}ûö×oß¾�x< ‡Ãa ýÝ��„ÃáQ¢‰—î?$ù|Á`W¯^…ªªnâLW¢‰FFFP*•°¹¹éVýi> �<…B!¬®®"�âWõW‘L&ñ /à¹çžså{Ù$‡T»ÉšÐÇ�N>É}µZÍý|�F«««ÏÖjµJ÷v˜î«´Eßí> ƒMÆi’¸U©Tš–e�Ñ4í1šŒÍò@Ø{ôÑGñÐCák_ûš[Ñ'I&ù¼Š¢ì/Y–ÕOµ�óèÌü�"<€@&“QS©Ô{Ãá°I’ï={ö`hh_þò—¡ªª'‡�¾Ï², D£Qär9×cbÇâS÷‘1$ºØ@?o?Ïúué‘0–¯Ñ�’N§Ý·“ÍfI¥RhÉ^Çq`dYî) X–…N§c/,,,2àÖeù¨$I"{NÒ{…œ?DP‚ÈlÓ€Ÿ|Y–{$žÇÁêêª+ëÍ–lnFFFz¾ƒÁ ûÙϤ+�r¹\vìÒé4LÓÄsÏ=·£jM¯1Yû—_~Çá«ÿ?{o%ÉYž‰>‘±efdF.µdUuUw©»«7µ�M !æX0ÈÛ±}ï`ãã Žñx°±±|Æöx`ð2œã‹}Ǿ ÜaÜÁFÂÚšMkïnu«º«º–îÚ²2³rÏÈÌXïåýåW‘Õ�¥ï9yjËʌ勌÷yßç}žo~’$áïx~ã7~P©T IN�:…|°O†•®³ò­´d1q›ç8ÎÙØØx¸^¯×pUâ—:§ˆ…`©Ý àAÿަaùt“µµ5nrr,!ǃ x衇64MË�ÅvKdYö2™ÌÁB¡ð$úåM‰ ×?E„¥rétzT×õÿ˜H$l²ŽvíÚ…~ðƒøÝßýÝ>ÃA–Å*C=ÿüóXZZò�*ƒ:$‘ö‹ ¤³²°;’´Ó”Br­ÒÔ-òÄ7£„ãÇ�¹|ù²3<<|¤'ƒÛ×ù€z½îÓë8ŽóÕê h¦iع¶ã‰D°oß>Ü|óÍØØØÀ�~ô#†áƒ%¬Ð34žçáâŋ߿O×v»�ƒ¢T*õ� úØ’‚H­VC·Ûå«Õêú£�>ú0®v»è÷îy±Å0Â#Œ0Âøç @¢Ñèkè®+Ÿ �N }7ZUUýŠ2IhI%�N {7pG’¤_¡ë8Î:Ïó¿‹Å$Žã¼Ýà‡Ç=躮722r÷ÔÔ”œN§m"±K± ÊË™®×ë(•JXXX¨ž:uê”ã8öúúºÀ‹Åbž Žçyn·ÛõLÓì ß‚–­e}28ªR™��}hvv6¢ªê�t]UU÷íÛ÷Þ¡¡!/‹)Ñh4B‡iÎy©Tò)AA¤|ÉqÞ–±R`„vy'‰’çy¸÷Þ{ñ½ï}‘Hét±X wÜq>ô¡Á4MÜ}÷Ý8sæL_÷…­N“cL’/I’P­Vír¹\ê+z~Ÿ‘ $i'à�`Ä!§OŸþúÑ£Go7MS �;‰D‹Å�Éd®Ôëõ1EQ¢¶GÏ ÐŽà¢(Ìf³¼¦ií–ΪyÑRצiB–eáÀ�¯»xñâcÞ ä±Ût ‘H¥Rèu6·Ø}fÁÙò=='E>“²Ù,*•J ”=†äs¬T*9.\¸¯T*5pµ»Øìÿ¹IG‡Fa„Æ‹ ív[( ¾iØðð0²Ù¬?ÔLÂq\ºt ¶mcddÄO~ gœíœ03!XYYávïÞý�Þ¹KªÒ½›øÏ¶Z­;"‘&'']Vb7Èø‹Ü´‰„n«Õ"Nà˜ŸŸçòù¼‰D’Žãz7m«Õj9$ûC«è÷Ë •¨Fív;Òn·‘ÅÅÅ/öïß?–ËåtÏóŽONNj‰D‹ÅbDºÔW3b«Ç¦iâ™gžA6›E½^G»Ýî«ô³UkRé®Õj\¯ÒïÑ ˲°±±ŽãðÅ/~ñ�L&ãÁ±2¶¤ºÜjµü÷£«Ç=;9VA.ë&sìüø†~BºÕjµ Í��ÁßT*µw}}})‹í&‰,y.õ<-™LŽÔjµú½kèsÏ1__nðáÏŸLMMý/ÙlVTUÕ#�›O|âXXXÀéÓ§ýäv÷îÝóMìˆÛ9‘ϦÁ)+,À*Z‘yƒ‘‘SÒA·A‰=ýw²^b±Ž?I’°´´ä CÍ ð<EQøX,¶ÍÏ„ 䳆¦J¥R©ëUU=e†O�k4<Ûµe»6®ëâìÙ³èv»(•Jèv»}£Ÿß£{ùÇoffÙlÖï Óź B:³,-�n¤R,—Ö××Lkd;‹a÷#Œ0Â#ŒW&q]ןGà8­V ­V {÷îíSÄ!7û……ض�\.·�SN'ªtR277G|\Ò  “$Û¶½J¥â #‘H€$"¬R Mo 7vâÝQ­V±ººŠÍÍMxžç¥Óé1UUÇ‹Åâ#�FcW¥=™âÑ¿ âYÓ`B"Ì÷‘¹¹¹¥¹¹9 À\4MîÙ³ç_år91•Jall¬�FDÀÇq°mÛ7@¤FpЕl˲P¯×qöìÙo‰¢™˜˜x½¢(®(ŠYQ¥^çщ9N¤ C'”ý×�o~ó›øÖ·¾å'‹ì¹E¿L*!føøI:¬³ À- Ë{÷õ¡YÒ­Éf³™Z­v%�N驪‹éÄWEIÓ´éZ­¶Žœ¦Eê|:ØNÃz9@H`çcttt2‘HüëX,æ’äûÈ‘#h4øÎw¾ãŸo2#”Éd i,ËÂÖÖÖ¶kŽ\+A•vríPJKF³Ùì¥ACÕ;VÑ©Õj!‰ Õj t§×ÝõaEh�zŸzNåÎÄÄÄ{çææþðpÕK IDATšOÃ06Mó-¶mËAt5r,�NŸ>Ý'ÍÍ^gd0¼^¯#�N#›Íúf…¬¨ùLjµZþŒY½^Çððp`‡…+Û¶Ýçž{îiêÚbÁ=«(v?Â#Œ0ÂxåI’¶U59Žƒ®ëصkæææúä;mÛö;!ãããþ�›P èùŽã|ªO&“Ùöú¦‹Å½X‰LR½%ÉkþÇxwxǽÅó¼¿o6›5&a¶@GŸ‹ò€ BX0BYK’¤èîÝ»ß�ÇE"]›Édúè3tRB’V9(ˆÞÑVå*•Êã˲ºKKKpb±XTUU^’$EÓ´wô@ /×ív�೟ý,ªÕêÀaåÞïén‘‰~ÊZ�×ÇO’õ™J’ôß ÃøŒeYM…aiXÄ�°Ùlæ;�NWUU™ö} hXˆÇãop €Ô{°²ÁÀvu®—º?Ü€ßùë(�N2‘H¸xG£Q|èCÂýÑùç=™LbrrétÚ¿VR©FGGqñâž„–î„ÑU|’$ß›jµ žç‘Ïç%¦ÙN;OAƒSUUû„N�:…X,†J¥²m†Œî4�¤?HÀ�ÞÛ<7Ç�$IH&“@?…ޝV«Îðð°½Ø¶í›’²sdô±céiÄÇcÿþý ³%„öHþ‡EøØÜÜD.—C£Ñp�?>>ÞGudÝÜ{^ì;ÀGÀ#Œ0Â#ŒW!s,ÃÛßþvÌÍÍmã�{ž‡ÙÙYX–âJÎz…ð<ï»뺾cGƒ$A”+¶ÂHÓFåªP(øÕPºòÛ{/›Í¾Ó²¬ÿÞívЯ*c AI´_¬Eÿ>þ!MÓZͧÕj�̆°Ç‚Vžb“Fx¥œZ­Ö.‹*91ñÕ¬ÑjµÈ¶ÿ~xxø†x<®‰¢x}$‰°I mÛ˜��Ý6 Ìt�ˆo ë×À¶—v5„�ˆ·k×.β,�®TÓCý´ÈÞð†ë–ãñøI’÷¹ÏassÓ—·%àƒxáȲŒ±±1Ü~ûí8qâ~øá>óÍ oúú©T*ÜÒÒÒüÒÒ’344䩪êõ|a¤H$2£(ŠÇ*¸,( _‰ü.åNŽjµŠZ­è)B¯k²=Äè��F£xë[ߊ§Ÿ~ù|ÞߺóÕ˜äz䈵Zí/ëõú§£Ñ¨CÏ” òý ë�íµZ-ß˃ø¯Ðónt÷£Õjakk cccèv»ÜÊÊÊIMÓn'ÇŽ@§‡Õ©kŠôz54ì~„Fa„ñÊ ÝnŠ¢l(ýÞ÷¾‡Ë—/÷Q°èJ¸mÛøáˆ÷¾÷½¾\/ù»$Ixúé§áy‰„oÈzwÐ7``‚æ=èÊ-©0Öj5lll`uu•T?·uÈϽJñþ|>¿Ä$µAÕ{ýó ¬L¬ƒ«CÊ´™‰„266öIMÓ$V½«Z­"�BÅ>ðAËŲt3:!"ûß3Ü*—Ë5*I¡—Nt …Â…BAؽ{÷UU#¬ Kµ£P/qåËåò÷pU-ÌÁöy€¼àÃ?_.\¸rôèÑyÓ4¯£ý@èYz$›ÍzO>ùä|&“9¨(ŠGdOéÄ•çy$“É#µZ-oÛ¶ @Æ`õ.šöòR iàáwÑFGGsº®RUÕ!s·Ýv�ÖÖÖ|÷ðÉÉIŸvEäŸ3™ Ž;†F£�r¹Œññq¬¬¬ø3!A²·¤ûQ¯×±´´d<öØc§MÓ4—––üóÈqœ§iÚ{ ƒçyž—e9766öÖx<îéiòH$Ðu½¯£Gƒ„�ÀtÏW¦Ïó†¥{e³Y¼ímoC³ÙD¡P4KÂ1Å»T*µ¦§§/ʲ¼7‹!™Lúj`¦iú€)HØ‚¾Ö¶¶¶º–eɎ〨Ò4RÒý0 ±X ÓÓÓèt:0 Ã1 ÃòØîýYêº.J¥RÛ»‹l‘„þL AGa„F¯\B'ôM1‘HøC™¬Ì'IJEQÄž={j÷ÝwŸ233£xžçÅb1t:xž×G©"UTšÂÁ¾]¡¦�+±[.—±ºº Û¶¡ëú@^ºçyþL€$I×s÷¨çym;³c‡›;û³�€:8]×Å\.÷Û‰Dbøð<ÍfÓ—ä¤) ŽãôQ4‚h34øØØØX:sæÌ)\•Ã%«¤B'Ê~w¦Z­>¬(Ê]‚ ¸ƒŽ] ¦¼ ò†a4Ñ?´<^ÎÄÈ£Žµ ÀªT*ñL`iXìH,ËÆb1¾ÝnoÄb±²þ \.Ãó<"‹<½k×®Z–uauuõkL¿s¨my1‹¬>|är¹½‰Dâ3±XÌ!ýŽ;îÀÁƒñ…/|Á¦{öìA6›í»ž2™ n½õV´Ûmœ8qívÛ7¼ÜØØèsÞ¦»½Î¿²²òĉ'fÉq¥A¥çy^½^µíüèèè/t:Ä•J%\wÝuˆÇãˆÅb°,kÛÚ¥MýèµÌv–——û†ÌYšV¡PÀW¾òÌÏÏҸȚ¥Ž/€ËårñL&3£išCŠ ‰D‘H¦iöÂé™Ã0°µµÕ8uêÔ‰ü‹­­-7™LBQˆ¢èÿO·ÛÅØØ ÃÀ®]»|O�V«U^[[Û¿ Ü5ÙWÛ¶¹n·ûƒÞz²ô\UØý#Œ0Âã•@h7^:Q ÕA–6AnЮë"—ËáoþæoôÍÍÍ3�NÇ>räÈM„ž5::ê•Ò34‚$´2 IDh6I� …–——!Ëò6IšÉ��©r;º®´7šwç¾f³iÕjµó½Ä+B%�n@µÑ ¨fÓ —Ífõl6ûG4íŠM X,B€ç8NŸÁbPÕšH¯¶Ûm2Dî>úè£+èW£¢sèAUºC#V«Õ'TU‹D"7sçÑç@Ÿ÷m’V­VWDZÐ/[ÄG9º^Àóx‹‹‹—÷îÝ;cÛ¶w-?MÓ¢º®£Ñh4’ÉäÏóX[[ƒªªþZL$๮ËÙ¶}0�ÞÝl6ï[__�Jh ¨ã(@t­ý䨵’ÉdŽD£QY€‰Dþ­¦i.IhUUÅë^÷:üíßþ­ŸÀïÞ½Ùlš¦!�BQ躎cÇŽÁu]œ8q†aø×ˆã8èv»¨T*I’Éy4 îÕj…xà!\` ^yžÏ$“I�¬iI’ün}²*uìïè䞈Gõ)úó†68$RÂ/‚#ðï½×ä çŽŽŽ~<�N;ÄGˆîÀ’í¦;*4}¬çD^?þüF¥Ré‚€™™$“I�×#×5ñ#‘$É�n·‹b±X’$ÉäÿA]ã;uZôÆ0Â#Œ0ÂøŸ@ˆÓ6}SG"‘ðGi0@ª—£££$éó8Ž;úüóÏ7Ûíö3SSS7išÖ§hC»#³U~š2eÛ6Úí¶oúEWI åjsss›±\,ç?ýiÜsÏ=xöÙgûf)HRšN§ýä ™LŽZ–õ«©T ¹\.o†·µµõ'ŽãØ–eYŽã˜ é«:J’$*Šâu»Ýß�ÇãªeY|·Ûý/ÙlöÿH$ I(YðA’›V«…b±xrffæ–L&ãK èÓ÷ÍfÝn½í[ÃUºFý~ÄÍ�®bûó)÷ ‚°˜H$ÞC’J£§)r”_ƒW.—/2àƒ­Èþ´h!}~ —/_¾§Ñhü;¢‹¢ˆX,æÅãñ[Ö××O …éD"Á'‰@CKÊÏEñm‘H$¾²²òÏóè®……O5ã^X¢‹ÅÄt:ý'ªªæDQŒPçØW…“eŸùÌgpÏ=÷`mm ®ëbïÞ½}àƒÐ�n¹å‚àw>Hw°Ñh`}}>øà¥H$²‰D\žç]Ïó˲ÜF£a­­­ULõ@ÒéôqY–#¤ˆÀó<4MÂFè^’¤>ÃKzÖ‹V®+•J0 ¹\W®\A,óÅAè'ÃçäÿMÓ„¢(¤£ÂçóùGhÐ:==ýºññq‰¥€ÒÎì¶mC–e‹Å¾aðv»ímmmµŸ|òɶ¶¶LQ¹A®ó,=•¼®aܳÏ>{îÀ�oa׫Lfš¦×ét\æúbEBðFa„Æ«€4›ÍH2™´%Ir‰„ïA«ÖФÓé`tt¢(ö—ñ<_]]=šL&kÙl6äNKk*qú&ïeš&¿¿Ýn£Õj¡\.cqqkkk„Z³MK}}Ýßæ¾,�ãP«Õ�ÉdØ¡j¯·_#š¦!�Nÿ¥iš0MsÞqœÓµZ årù^ôÒÙCCCoWUõ_ȲœEÑ!ÛnÛöïpƒÀSYõ677¸±±±^.—ÝC‡Md2™=š¦‘`?A!Ç"•JA×uLLL Ñh�ãn3Ulv„•pu¸:¿ººZÍårJ,;,IÒu²,»äœø¨åj7�ËårÇ666ù'� Äó<·\.óÝn×%�¸�ü@Ž=šÚµk×;K¥’KNVa�TÖŸ†7�ŒŒ˜ù|þ>êø—tú%ƒ$v³Ùì/%‰wÅãq›xµÐ¼Óé€çy¼ï}ïÃÙ³gñÔSOÁ4MÌÌÌ`hhˆÈWC–ehš†×¿þõˆD"8qâ�FŸ ÃÆÆ÷ì³Ï^ºtéÒSI,›ØÒ„V4£ ¢(ŠE'ÐäÚÛ·oÖÖÖúÖ8¡X‘ëœ µÉŸ#ócÝn7°H@9gäœW*‚€f³Y*‹5rì#‘&&&ޤR)Ž�?£;¬¤³X«ÕxÃ0Hq`assóò¹sçVpu&†'Ÿ3× ò9Y«Õò\UU=vÞŠ0½ù‘Í………­kt=¹�0Â#Œ0^=¤Z­þšªªG¢Ñè=Ïã;�ÎŽCà###¾ù �ä÷Y–“4ð iPäw©T 333h4¸téZ­Að+ÙèÔëu”Ëe¬¬¬ P(ø•LŽã|PD¼Kþê¯þjÛ¬Šçyh·Ûøîw¿‹ï|ç;¾\o©Tòig”«±Ó«^NÛ¶=�H$0::úvÃ0Ó4ÿ½eYPåçc±Øë{I¬Ã Ó»¶m£Z­ú®ÊìP«aX^^nW*•+¼ÍÍÍ…R©t)•J�˜œœœ{]<÷;·ß~»¿dȵÓé �*£££Óù|þ¶«xÑ€l°ßØØø‚ <«ªêÐøøøE‰°æƒ¤3‹Å¢*F%Ý?M>z ŽãxÇý×n·û‹¨Ò~ ¬2ÒÐÐ4Ms3™ J¥’ïMÁR‘\Y–ßšËånµ,«$Šâá8ÎOè=Ïs=Ïs ˜u]×# v·Û-2™Ì/¤R©;ø`U˜Èõeš&î¹ç(Š‚f³‰#GŽô�EQ�ÇqüøqÄãñ>ðA:…BÏ=÷ÜÒ�~ô£§vèl°RÓARÊX*“Èqœä"vïÞ�H$‚|>ﻊÓôCº»DºÕjÕjµ�Ú©i�Æ6e8žçÑh4|¡ ºËÅó<ŠÅ"ªÕêŠiš~·RÓ´d³Ùœ¦iþ¼íBNÓ¤�êÔ©û¶¶¶ºŽãØõz½ãº.íä�”Ø*€Œ$Iza:  ŽûNưûFa„Æ«€Ø¶Ý\YY9ÓétþV×õ㪪^/Š¢K߬I¥pxxد@Ò•P:‰£¬ ³H$‚ññqLOOÃq”Ëe"A˜à�އªªÛ(\Du,Ë ”ûŒD"øô§?�÷¿ÿýØ¿?¦§§¡ª*ž|òI|ík_ë“Õd} ÇQzfoÒ3¿óHE3ˆJF¨c•JÅï¸�„¤Ýn£P(4jµÚ?R Ÿå8ŽS*•òÈ#O£ßG‚5‰t˜¯AÔ´¼ÐKª]ØÓÇŒøpœ?###ˆÇã>¥�|†�9�t:M¶›ë]UÓ4g-ËòšÍ¦àu=<×uÑl6}ïZ2œÌh4ê<ýôÓç©õ2räÈ‘ ¹†‚ä®é�üb±¸¾ººÚ2 £‹~À @èãÑ£‘šW®\)꺮²³'亢»ËÝn/|„Fa„Æ+€�d¤X,>W,DÇÆÆÞ"Ëò.Žã8Û¶¹V«ÕI§Ó ˲n2MÓ#EþM•ø\q¥ÙÄ­ÑhøôªV«ÕwSº¹“„�V'#t¶ªHº6Žã Z­âK_ú’Ÿ¸È²ŒÛn» _üâaÛ6Nœ8˲pêÔ),//o“åt]×%Zýdx5ÈO€$–e¡P(@×u?Ñ) �µµµ`’’z«««ÍV«e[–%’í¦“U (Š‚h4ª£žõ«`�’¹*©^µZÍ' ȲtèпÍårSŽãÀ0 ¨ª žç}…0’h*ŠÒ7“@SÉóiº¡ £ª*kÖèÒëyÐ÷½õz¬—p»ì{)�‘�î×¾öµF"‘ðç‚TUűcÇ ë:Nž<‰r¹Ü7óQ,¹ÙÙÙ¥|�€Ú¼ŽVEcAÆNjf}ç²ÙlæÓé´ë8Ïv U’¬•ññqÒuòA­U¯×Q«Õø………(—Ë]f»œZ­væÀ�?ŸH$²ªªz[[[>˜K�eY8xðàkfggŸ€½{÷N�ŒŒHäýiÐýð–——W{àƒ~t¨kÓåy>‚d—éÏ.Û¶Q¯×Ý­­­ÆØØ˜Ìé9ÓW«Õ-tÉ€‡ $Œ0Â#ŒW±Ðïgá­¯¯?„«ÎÐ"akkK°m»9<<|[4}áŸBÓ£‚mHÅo}}µZ�HUöU±Ùj2ÑØ$ßKøã¬ü'Q�":¡·m÷ß?xàÄãq=zš¦áw~çw‹ÅpòäI|ûÛ߆aþö‘�ÄÒ@…çy[HB[( ( ŠÅb{}}�t>L*9$ ˜Ûžiš`gÈ1&Y–‹ÅŽð<ÿ?(ùÑAÝ:qÐ?œî—r¹üý‘‘‘·E£Qž¦"Q®áž®ë·—ËåçÑ/'Ëÿ”Öæ¶}:räÈÔäää41ã�NÇ—„Ve@eÏ97W®\�,˸馛péÒ%”J%ÿh`¦¯õ3Çq(—ˈF£}êo¬+m>yÓM7axxÉdÒ§1E£QÜzë­H§Ó8uê …BŸ‚T±XÄ… æî¿ÿþ§zëªÍ€“e™ßi�Hð>õÔSOSƒ ùª|„Fa„ñª d�™£n‚Nï,áªz’°´´ô¤çy|&“¹MÓ4—$kt2Njz”¥>0BWMÓÜFy ’û%³´©Ýáèt:Ð4m Ü§aíF£!Äãq¥—�¸t%ºV«á±ÇÇqøû¿ÿ{D"Ü~ûíøØÇ>æ¿· øÓ?ýS˜¦¹­ŠÍú¨šˆ(а, ù|¾º¾¾þ çy„ÖAW©.n}}ýɽ{÷¾Ùq/h¸š X‹¢ˆd2 Ax×u¹݈ pÀ@W»aƳš¦ÝLºY4鹆GDQ±,«Ó[<FX‰Ú— ˆp\Y–ÿ8•JqăâyÌ�µ@;¥Óœl6 ×uñþ÷¿÷Þ{/xà�¾Š6Ýy¢“lòA…2LMƒUrþèál¢(722âƒEQ ( Ž;†‘‘<ùä“Èçó¾*\OAŠ››››ÿîw¿ûx/QnSëÊ`iZÝŠ•—à˜¿¡Õjù,�ŒîLÐÅ0ÐÀ�çyò¹Cw,®mÛ^¡P¨ …Ï'‰L§ÓùÕh4ê’"2äó'‹)‘HSSS?;::ê «êF«ÊÕëunvvöô;�Óà�3ð<ï @goW.—lÛ¶ßl†W«Õ`š&DQÄøøxßq3MÔl•pN‚Š a„Fa„ñª `‹"®*E–——ít:ÖøøøkãñxœJ(ü$Ë0 ôf'|µ,¶[@ß„éí–Lxîäuhƒ<2¨N¨¬t­iš^³Ùl¯¯¯ßç8ާ(Š'˲œÍf6�º¢(FEQäY¥.xì±ÇpòäIH’„L&ƒt: Ã0êAð©^4¥†”Õ9Žã=ÏÛɳÃÀ{ž÷p»Ýþ™”€�¾ŽN^%IB<‡®ëÑb±ØD7âZ —9ß¾!£mÛ�Z–õZY–½4¬H6›ÛØØXen8üü$@„Íî¹X,¦år97‹ xô &}™ç îíšMd˲�H$°¶¶†Ï~ö³¨ÕjÛ:N4॓gúûA „„gã9ŽÃ¾}ûðîw¿ŸûÜç ë:FGGûÀ‡ªª8~ü8víÚ…gŸ}ËËË~ç£Ñh T*a~~~ñÞ{ï}’ó•Я|*Ñ•u7 ÉõwNUÕèØØ2™ DQ$ƒö}ÔCŽãü¢{,é ® @hÚXýþ5‘f³©4›MKÓ4A–eÿýè×’eÙ½îºëÞ;44$°³ä¹t7Õ0 ‹ÅÍóçÏW©k²p]ºxŽã„ àÔ i4—ljïÛ·ïm™LÆãyÞ—Jæ8•J–e!™LúÎì ø�Ga„Fÿ¿ @æ æóùGªÕêøMÓFé�SŽãÐl6¡iÚ6þ5›PÓT+*h—d¢„E'”¢W©Tž“$)išæ$é<8ŽƒN§³jÆ\¹\¾Lö©Óéx�NÇ­Õj™Lf2‹)²,+Š¢¼I–eWE�®ZªÆåË—aš¦O1#�={öàãÿ8î¾ûn‹E°JA½‰ïþÙTBH'\€õzÝ"î̘±Cý”Ĭ»ÿþ;ŠÅâÿÓ;7<¸@€‹« »÷<¾R©¬ëº^pg(ˆ†ÕKòx6`}ð×xÏ78üÌÌÌ/ðAÏUÐ3ì°1-ñJÀ1Ò#]¢ÆÔKýÙ‘A`#|uKHrê8J¥b±˜ïž](°°°Y–1:: ]×ýÁmY–qüøqLNNâôéÓ˜ŸŸïóÎØÚÚÂüüüÅoûÛDíŠîzÐà£o�z@‚{MEAÄ\.÷ûš¦Iä˜MLLà7ó7ñÛ¿ýÛ¾‚ÇqÄ£¦�JÉ3 ŒÑ¬.³Íd}F\×5ÛíöEÓ4�ô�u‰DÄááaıÊW¤pAºçÎ�;çyžÉºkäwŠœÞ€Ð‹‘á]]]�Ü¿ÿ¤®ëk€HwàºÝ.._¾Œv»�€ö 7àœ„ $Œ0Â#ŒW q©¤”žI,éŸER§Ó±NŸ>ý¥n¸á#žç�ÐÒ›=JŸ†BnÞô ¶Ÿ S’h×ïz½Žb±UUû\Ñ›Íf}aaaÝó¼sTÍrÙYu¨>Çî­­­ [[[dßž�ÇãÃCCC·öª§ã¢(þ¶G'¤tå­�ªá$÷E¿i P�–––JÇŽ{Ì4Í[è[U'Æu©TÊøI ]Ù¦Íæ¶aÕN§ÓŠÇãCAÝ—žªÔðÆÆFÄu]Ò‹�—+iò_“vâä/‰Dü®²´Ÿ XÈÌÈÄÄ$Iò«úÄð±R©ø‚tØXÌ ª ®Ûí6’É$†‡‡û®…v»�o|㘞ž†®ë}´«£G�b×®]8wîæææük¢ç‡Ã-...}ë[ßzšíàüøx1À�™Éf³cªªºäú~ó›ßŒ+W® �Â4M4 �J?=—Åv 资þ!x˜›Ô6FØ«««_Îd2ÿ!�zA³Qüù™ å+ÚÇÈ0 ¬®®Öfgg×±]¢o`?›ÍNêºþUUÿúg§ú/*j{Òé´—N§·!zÅó<_™­ÕjyÇ�¿ë¹çžûV«Õº…2"a„Fa¼jiÿ“O%¥4¿ŸÃÕ¡uß[`nn§§?ªëz†N �†_ñ%à#¨*I›‚uâ|^*• Ë2MÇò*•J;ŸÏ?èy^ÛÕ}ØÛAÆ^@?e)Òl6ÛÍfs€�L&‡dYލª:�Çß$Šbß,y¬®®â“Ÿüd_¥�þ{ï÷‹Žãt(Â>h¿§R©¸¹\.p�¡C!�f‡‡‡³…BÁ@G‚í„x@ˆÇ§jµúwÉdònY–Ý ƒ?Y–]Žã~Àÿ j>ýs <¶Óz~Üàãc j IDATð¢(rô09;‡Ó”Ç¡C‡055…¥¥%\¼x±�†ÅRèDQD*•B4õi¤ GÀ.Iþ 0)•J}s ‰DÍf³O�É4MLLL@×uÐUp¶ßjµ ˲>:„àÌ™3˜››ë8/—˸téÒÜ7¿ùͧÐ?4M|X€<�ÒÇ쵑N§5�»dr¹î¼óN|êSŸò;J®ëzårÙ³,‹çØÎSÀv'''ß¼¶¶öß©õG{—�öT£Ñp‰OS¼È¹w]™LÆÞ§× MËì™b~~þ,ó~4øp8ŽsUUýýÑÑÑñd2©Ê²ìÑ®ìÛ(EùK§Ó 3JtQ†žM"Ÿy”/LºÑh¤{”0ž¹ž~Z�Å0Â#Œ0ÂøŸ @€þyòÕÅv:kfæ¶Ûm÷üùó~àÀ��¤R©qUUA¼$ˆK²ã8þ ™®Lè£_‘ 41*+‹ˆÇã¾{r©Tz¬T*­0USý^AÄE°Ì(¹ÙÓÉ{¤V«µ{ÕýuÏ:tèã’$Ù´B=ŒLÓ}XZY·ÛeePíÐäW„×ÖÖÎMOOßÊòéÙ9�žB$›ÍÊ…BA@—Š>g�xrLUœ�Í‘‘AUU—¦ÕÑæ~SSSÉÅÅEº‚ïeªØúûÁóŒ‹/b~~Þ¯V«…J¥‚¹¹9çßøÆ“¸*d0ˆvE�³f‘ÞK9濞L&GEñÈ>|ô£Å—¿üe–žœmá¹çž{,‹œ™™9´“YKš¦iØ> ïRŸ1d9Û¶¿Ôív�È#Óׄã8×ì~ÚæÊÊʹ .,¡ßˆ‘>fH¥RŸšœœÜ«ë:$IÂââbßðø¶‹‰ÚGâÓCw?ØÏ<Ú×§÷;o÷îÝï6 ãëKKKw($¼×Ta„Faü³ `€°Ýß�Ç`³,w~~þÿœœœüØÈȈÞSK‚(Š(—Ëèt:ÐuÝ×åg�Öi§ðV«…z½Ž]»v¡Ûí¢T*¡Ùl¶óùü[­Vý&kl7Zc >Øý€�X‹ívûY–océcA�šîÑív½ÍÍÍ'àf1àƒÞ&çüùóOÜtÓM¶m›cÑIGˆªªˆ¾ ‰®5BŸsÿx9ŽcÙ¶ýßlÛ~­†À§:©ª*p'÷ºPêAö‹}ß—’0qA 1KIc?â “Ïç�DZ¸¸Û¶ŸGS2Ø$ÿ¤ÊÆvJNœ8�[n¹‹‹‹˜ŸŸÇÞ½{‘J¥ü*x�:y˲ Ë2fggñž÷¼/^ÄóÏ?ß>ªÕ*–––Ü“'OÅ&V­éål÷ƒÓu]Ïd2oŠF£Iê8žçqæÌ?©o4ÜùóçOðZ­V—¦¼í4"ËrÐçŽÇ\¤"lmmu“ɤ‹Åx²=žça}}{öìñ;M4å‰î~t»]T«Uû™gž¹€þŽ }=zét:=66vƒ®ëŽªªXYYÁ®]»ú|b?A€ëº¸téb±<ÏÑ#G|àNVÆ;‘Hxû–––.apg1a„Fa¼jÈ ›¬»Tu{ÛÃq,--ý'Ïóö ÿj4u ŸÐHEA<‡$I}ߤñk×.Œ��AT*Äãq\¼xqquuõi\•Ël£_³'4Â&^<Bhu'€X.—O+Šr‹ ’@’dƒz踗@rµZí,•îäÃ@o§R©pãããÛ…è®7ˆîÅãñ;ÐUS¶zºðàªÐN§Óé²0²�=ð“Íf³cÅbÑÀU¯‘Näà“ø0Ms›i *虤 ÃÌ�þ/”˜¦ MÓàyžŸ³„~"ÕLdž<Ïóüë¡Z­bqq‘;yòä÷WWWKè7¤éWæøIÀ@ù¨®ë©äÇb1|èC¾ðt»]ŸÒ´±±qѲ,2´}Öqœëlj°tE„ºÜ~šê°[­Öó†a,Ë%ç Óé ™L"‘Hø`�•Ý%@©Õjammm>ŸÏw˜B9f0¡ëúo'“IG–e¬¯¯cddÄ7 ¼ˆ¨}ö¥º766O<ñR©†‡‡155µM™�PSeYF<ŸN¥RÑJ¥Òa@ˆƒ�†Fa„Æ« €°IiPگРä9ËËË žç}uddä]×õ‡~�<òù>>þŸ'&&b###6ížH$�J¥0??¿­{Ы ÷QpH"J’QÃ0P¯×�ÇQ«Õ|€@{а2¿ìÚ¤Gò= HÈ\ëSÒ›{ð;[ä"‘ˆ/ËJüIzÏ¥Aw—yü$à#°ã”H$F5M{1M€çyxúé§}z[³ÙtΞ={¿çy]ôûhp�Ngø`éJ=Ë[Þò�ùùù¯nlltÇ©õK>g¤l6ûù]»v%²Ù¬M›5²²ÆŽãÀ0 ”ËeÏäqÃ0�ËåúæwèuBhiô ;-ÃM>»¢Ñ¨ßñ<²,ceee dw¸±Òç!ø#Œ0ÂãU @¸s0UóA „Z¦iÚ¶msÞ Ñw“5M—/_F"‘€iš)F”Ô,ÆÇÇ…ååeV®“þ>ˆz…kì»ßl‚Nª³6‚iEN»ÝæhšK‘Ò4-ò@=îV*o||¼�†Å‚œ^§ªªN(Š¢t:W¹ã"‚»BîÛàðR©ÔþD"ñ[ÑhÔ¡iDtÒMKö~Ç9Žó+¥Ri–]\•pêþøç�ã8A×uåðáß;tè�FÌåø sA€¢(8}út Ç Ý!”¢*U«Õ°¾¾Î% ´Z-D£Q�T¹é9‚A „í’@H"¸@Ÿ§h4Šn¸<Ïãüùó¨×ëÛ¨Xt",I1ØäWñãЮuœÈd2¿«ë:O«I}øÃÆW¾òßÔ±Ýns›››§=ϳèíã8ÎÞ·o߇u]u@èõ+I·{÷n1™L~àÊ•+žy景�©õÉOMM½cjj*544„D"ѧtÅv¿H×AQ\ºt ¶mcll ¥R ívétºXu¼È¶ªª Ös†ý>�"�Ã0 ߀‘¾&E²R© “ÉÀu]är9´Ûí�*k�N‡3M3t„¼a„Fa¼ªBˆF£)ë…éÊ ã«k%/�ß7�b&“9.ŠbœMÖhµ(MÓúŒÃØä–ð¨[­V²P(,˜¦YÇvÿ� 9Û�@Ç‹MÎѸ|�‰DÎišv»(н�€ÏAçÚí¶bšæÂÉ#½}þ0üÖÖÖô¡C‡ö�[ÖG‚á¸Ë™Læ&]׎ãÚ�F£z @6hƇç8.’ÍfïÔ4m?Q@¢i'ƒŒÉ¾‹¢˜i4óöAÿ¾úØîÝ»õ™™™¿<|øpjdd„vEªÞ‰Dccc¨V«~e¹P(ôzœ¦\õÜ͹••ó‰'ž¸÷©§ž:ýÌ3ÏœY\\\×µ›Íf£^¯ó†aÈÝn—ëv»œiš0M³Ï „€'‰6ý€N§ãƒ¤ÇÇÇ133]×Ñn·Q©T“P²Í…B!wåÊ•³®ëÒŠoACç/vàœ<ÂøøøëGFF~–Ì=H’„÷¾÷½X__Ç<àS¯J¥’yîܹ'=Ï3pµóÁïÛ·ï×®»îºT6›Äãñm¾?¤SADz€Â‹F£™h4:¼¹¹9çyž º®سgÏGGG=²È<†$I>5Š$ú,ht]ëëëh4þsHGcÈl6›ÄXÑŸO£ß‡îdÝ|ó͸뮻à8òù|_!…¦ýµÛm¿'&&‰DúÎ9Y§ívÅbñùÙÙÙEôw¼vú¼#Œ0Â#ŒWdD²Ù쟗J¥†Aÿ>HIŠ­¾Ñ�Z2ÓàÖjµ/I’ôYAš*Áqœ/áIÌÌÈ ™®0Ó7{MÓ�Íf…F£±“1×�:ý»_è%|}IµmÛmÓ4=EQ|pÀvpt]ç�†€íîÆAÇþWI’¾Öjµ~Ʋ,‡í±nÞÄc%“ÉÜœÉdŽò<_Z__ÿ3÷…ŒxPeÜ HP¹H$‰¢øQrèÊ/ÙGÖéš$yétú€¦iÿ{·Ûu ÃÈ×jµ/°\×µ-˲<ϳƒãÈȈ´ÿþ?Ý»woœ®xÓÀ¹\¥R ÕjÕ—¼Æòò2ˆ&¡Ñ�¤�$�õzÝ]^^~jvvv½Z­6p-‹�=üðÃ.$“Éh.—Sãñ8‹Å&2™Ìk‰b±'Ë2OÏ ê’$l{ž‡f³éÓ �ÆÎ ñj×�în ’p~)t+|ÐàOJ&“ÿ†.Äb1=zŸÿüç}[«Õâ–——¿çºnTgfÏž=ÓSSS‰L&ãw6wRÁ’e²,û’µ<ÏÃqœ£kkk§êõú;c±˜#ËòP³Ùt¯\¹Y–1::Šø@‚õä¡?CèAðz½I’ÎôÐÛµk×.‹ÅÀífÃ4Í>z¾'ôk‘×£»¾G�…,Ëþó P&€³Õjy³³³gÜÕ~¼Ùž0Â#Œ0Âøç @Òét†çù¿,—Ëÿ®^¯w¨ä”ö¨x) Äàlnn®)вÀóün’ ‚Û¶ý$¡Ùl"�Nƒ�s “xI’‹Åz– 7â _·¾¾þÌ‹Ê/xøëA„Édò (Š?£ëz†vïþøÇ?Ž . Z­úÝ�r¹¼Z,ë½ãFºyÓCCC¿�J¥Üx<Žh4Šl6ëÏä°^2@П=Çr禛nú�eY.;˜M€Ý™3g044„C‡ °rÌŽã �N£\.CUÕm�|ÇùóBtw‹�g±mçÏŸÇââ"ºÝ®ÿ\òwº³¥ë:víÚŽã|ÐBƒãžG—Ïç …BƒY—¶{…Fa„Æ+€ôfFÛíöŸ×ëõ_ÇUå'—©ú¿˜j+©Ô ¶m›ËËËŸŸššú}×u³¤²JÔa8ŽC¡PÀÈÈH_„æf“¤NQŒ��¹³³³d¶!H¢òå6êºáívÛ£‡v餼7£‘“$Ij·Û´É!»Ý}ÃáÃÃÑ믿þg%IrÉœ ëâŸÀHñx–eõ ÍòÕuÙl›››h4}´ªZ­†|>�Z­Ó4Ñétüd¹^¯w×ÖÖ¾gš¦S«Õ ô;_Qá@ƒKêEêõzçÑG}/PO&“‚$Iüððð›r¹Ü°¦i1MÓ¸D"MÓ| (Èy¤P:É¥ýIºÝ.LÓôt]?¼¾¾þ,¶›eÒË<˃¹6øX,–ŒÇã¯�F£ÿ›ªªb$yžG4õ©F¯yÍk`Y¾öµ¯ùÛÞl6½•••‹ ø0÷ìÙs4“ɸdN‡ž§a�¬ÿABͽ�õ�Ç‘J¥\¢¸Fƒ\zÍ»®‹ÅÅEМ^o¬³eYˆF£¨Õjþq§·�äo„EƒöÃ0ü·a¨V«X[[ÃÒÒév ™L¶mÔëuãüùóßs‡$rê+íŸAÓ°\&igguh A¿w…¸±±ñüž={nÑ4-NÖ“„íÐCÈÔ,òùø =<ªÕ*®\¹‚�� ðéNåržçÙsss9ŽC’d’Ô ¡»Na½Xê“@w#êõz'ŸÏŸÑ4íV:±§�M9"`Œž J]…B†a •JùÏug¢ÛíþR</®¯¯ÿgÓ4=j»vRÃâð²,+ñxüOu]Y)[²^ɶ>ðÀ¸ï¾ûÑh†aàÂ… –e™L÷ÃRUÕ&•ôœë��FqÝu×Áó<,--ùÊPD¼€Ìƒ�ë¼ç’Þ·]l¬®®â†nðéPÏ<óL _ ¡Öj5ض Ã0ÚÕjõ1Çq\Ó4�r¹¼E;EQÄÝ»wïM§Ó.‘Ú%"=P8ÐÅž–{.•J�ëºh·ÛÜìì죖e™žçÙ¦i:+++Eêó‘ mf�:! #Œ0ÂãU@2™ xžÇÊÊ êõ:xž—Ça;ô �g’VÁóÄD�´æ ð‰„ϯ×ëh·Û;º¢“9]וýû÷߸ººú\o`^b“x4¸/#²Ó4‹d#@I’Ä뺮æóyÒ½!�¾êûž={Ò’$ý IìXfZ®˜uÿ¦+ëD=LQhšæÎÌÌ|ĶíÇÏ�;wÀs½§òT‚Þþýû%�ß�F=šFDè^AF„´$-íúÌ«“ß7 ìß¿H¥R>ø ÛKÌâòù<:�Ž?ÛÑjµP­VqñâEÔj5?¹%I¬ (—Ë^»Ý&ó4ø I �k$î`;Bº""ñôéÓÿ�H$TI’núiº IDATÁ£SÚl3¨bÞétÐh4P*•ü�iº[Ò£(q’$ K’ôïòùüŸÕëõ–X“eù-ñxœ‹D"b"‘ÐTUuYYYöœ’ãjš&Êå2jµškšæ®v5}#Оe a#}ÞGFFpóÍ7Ãó<´Z-¬¬¬ôu‡hpFS•Ø® HÒé4Ξ=‹t:�¥¥¥mž#t·M’$ £P(T/^¼ø°mÛ¬‰))&h|÷èè¨KË“ëottÕj†aôu@è9Ÿv»�r¹Œt: Žã ©^¾|yË0 zý€Awê: P$1‘0Â#Œ0^ÙDÓ4ºZï9Ž£/,,8T'�Uc¹͉$çÄ|Îd*—e³ÙÛ\וIòÜjµ ëº_ag+™D +�{ûöí;–ËånÜÜÜôÖ××ÿk¹\~~À Ùe¾¾œÊX}@ëòåËu]_u]w<(qêQ\Þ`©—lHTòã¿n"‘âñxßKi¡�˜)Å$?Ù¢)/„ÖòÆ7¾1Þn·ßzøða§V«Y•Jå�N§ótµZµ._¾¼%wÝu×ýkMÓnë);õUñÉ 6gM#¢e{Y÷N§ƒ©©)Œ��C×õ>�UU144ØÜÜD§Óñ%t[­*• Ö××Ñn·ûT¦èª»$IS¥g«Êƒ<4‚\âY•2>à+鄈äýèGßäy^ò<煮ÓÊRlÅœ œ·Z-lmmass³�EžK:Z½n…jÛöoJ’ô9Çqþ�,ËÉ^‚ì1�žã8…çy´Ûm�™�A³ô9¥iN±XŒÏår¹ÅÅÅ5\íj:Ïó\VŽ9(Z­–/=Ün·ýkc¸`阬 hš†gŸ}‚ øãA]9zØ{kkkŶí.•øÓƒÞÞÌÌÌÔÄÄ„B<@hcJòÞªªªŸ¿t'«^¯#“ÉøªW†a`}}}µ>ºv´g¿7™ÏÖ‹(Œ0Â#Œ0^Ù„(Rõ’WÅß0Msveeåëv§üAÊ;ó\‹zžk�F}°q-I¦UUE<G2™u]G&“ùàåË—O///5 jm€‘—«â1ûiu»]—ì“ ØÚÚÇq¨Õjà8ñxœ�D"¿Ôét¶¶¶¾†«\~ÿø ‚a•ƒØ‡(ŠÈd28tèÖÖÖpùòåÀdœ.ccc$ÝnWh·Û?oÆ¿l4¸ñÆ/•JR«Õº1�º¬Ç›ÔñÞ»Ý.ÞøÆ7â£ý(žþy|æ3ŸÊïv»Ðu‘HÓÓÓÛ>EÁÈÈÇA©T"*PD¢årkkkøƒ?øÜÿý¾WPµ�ªÐ³ƒçä±øê‚p˜æ@ˆÿz–e¹?øÁþï׿þõï»…Ðxh³MºbÞív}ó;ZD €ð<ï8' 1™LþÏó.Ûqb»$9šÏ e–iðAƒ¤Þ Ã$ÏóO»®ëP §Ýn»¦ir¬ó9û}¥RÁ÷¿ÿ}ŒÐò¶ôWBã£åjYðAº4‘HÄW—¢A; nš&ªÕ*W*•NÏÍÍ=G��½DQ|ÝØØØÛÓé´GÓÔDQôgWÈkö„ü÷%Cçñxܧ]õžÇ …³.\xŽÄA³¬I©�p=Œ0Â#ŒW3‘e¹/a!"Âõ’$¥—––þÆu]ÛMϼ2¨Á&u¼alÛöH’äzž‡N§ƒN§³�†ÅšúÅb1Ȳ ˲ˆêŽ'Ëò ¶m_·ººúlõ’Bø¼Ü „UÄò.]ºtùèÑ£“¼ÍÍMŸb¦ë:� )¦iVåß×jµ¿k6›gz¯'¼�—ºR�…c‡F.—ƒ®ë(•Jþ€ì G2™ô¨ÞÃ3MÓëu-^7>>Ã0ÜF£�b±ècÚ8’øЉ1M!ºÿþûqîÜ9Äb1߇EQ”ªÕê…Þ6¦iúï”ÂlYJ¥2™LŸø|ÇÁƒA�ð9Ù†NMMÙcOÍfµZ ù|Þîv�~‡Î™eY˜™™9pãÇSR©¢Ñ(XËÖ`0ˆT*…f³‰R©d�q‘ {ww+++öÌýÉ“'ûÀ(o©Ú;CBœB‡é>ö øã‰·gûiûwT*|÷»ßýëxàž{ï½÷ýétÚRUÕÞw:'�Nº®Ãçó¡^¯Û@–%z‚  ÕjAQÇlŒaßëÝà{ÚééiüÎïü.^¼ˆ/}éKC_ÇèŒúŽ[©T¦¦¦ìëˆH.?Þ5ÌŒáë�I™LÇM¤óJIâ4å”ûÁ Á©{¶¹¹yéÂ… Wѯ³h2à_K¥R¿›J¥&Ãá°Åë>èwÓï­×ëØØØ€,Ë —:'Sˆv»�|>_ÜÜÜ,ãv'Ž4I4Èv=Lrì’·ÜrË-·~8 ëÚÄ�Ç“öûý=sæÌ‡¬ó£H{u lg¬|>ŸO§Óg Ãx@’$ŒŒŒØV™ä‚Ã�ÇUUm ÀίÓJ|«ÕúùùùyÀ9î½Y°ùZ»c€�F#Édò߃ub÷�FG˜‡¨ëúGªÕêí�xãÔÔÔ»»Ý®á°Y�}ëÖ-lnnÚîINiÍôúp8l²Ai,¡ßË’N§ƒN§ƒ™™ÔëuT*|ðƒÄìì, ÃÀÒÒþþïÿÞîj°Aˆüjw§Ó»º ‘L&mq9u>Z­–-È^\\´ÉAvÿX¼®ëB½^_䀜éx%‚Þa¢tþšpw"Ã0¶xcŸÏgÿ?Ûá‹Åb¶`Ýï÷C’$4 ;ƒ‚%vì=»×¿Ùãå$ÔÞÜÜÄÙ³gñ­o}k¨ˆÛ4MÁr`Æét:¾oß¾ãÉdÒH$¶54™0??� –,•J­Ç{ì :¶Ç�Û¾}û’ñxÜ>÷t-ñŸíÈQÈçóÆõë××1èˆF]=›Íf:4‹ÅúF¯è÷³-ÍfÓ¶„‡ÃzÚ>MÓP©T¶/\¸ð C‚YDïï”Eã:^¹å–[n¹õÃO@à[ùôx<Ó�ç“W®\ù³F£!p L`žp‡•å>"Òjµšªªbdd¡PÈNÀæ; ´I Ù)UY×u$“Iã®»îzÓK/½4‡þñÓ0â5$!B4=ÐËC°ØÑ >‚/SUUýåC‡y§§§Ç‰�†MxÂ@ûÚl6íîÃ0RAŸÏUUÀ&ªœRžY2B ‘í�œ={'OžD½^G§ÓA2™�±âu~eš ¢d2‰jµŠjµjw>ØŽËÍ›7Ñl6íUhÖí‹í‚0`£\._Áí Lƒ!#Ö÷@>ð=’½€¢�F£Ójµ„n·k‘Pš7* r …P­Váõzñ±�} Àïÿþï£ÑhôÙåö½‰ n,óûý~¿=Fä”íÒh4ðw÷w6xv êëv»—4Më &•$I>räÈ¿7"‘�€Ý dzúNA„DtÉá¬T*gÏž}šîYQ]×ù|Þ1ì�' l—¢Ñh ŸÏgÏžý/ù|¾ÂÛæV’$!�Nÿ~2™ÙR.—!Š"<ˆB¡0p­3Á�(‹¬s˜æðpráÚk‘Ç-·ÜrË-·~xïiïóùúH�„¤dYþµ'Nün[ñ¶¹•a> ÍI n“�ùùù/ONN>LăϼæÐ£ëú€PVQ„B!Äb±)UU³µZme�p¾‡{ÁákK’¤OʲlñC,8¤ùp–8I’„ûï¿zbb±X Á`�FÃv€6ÎÂL'ÒAàŽh¹\¶WÙižfè‰X°3ùÃÈ mýÌööv_z¹Óyc‰SµZE Àôô4Êå2jµÚùØÞÞÆÕ«W…J¥bQÂ9×9ê;4—ŸÏçŸn·ÛM†t˜C®�×ÂMˆ¿v†é�„\.·Ýét6»Ýî(ßÙbï32YØØØ€$I8{ö,Ö××íó(Ë2êõúð 2ºGF>Ÿ¯ïÓ{›¦‰Z­Ö—ÒMÉät®[­VŸÅ¯ ¾»îºëã“““j<Ÿ„>>>Žv»�µµ5ûúåC2 Ô÷:˜ŸŸ¿¹ººZïr}ß¾}¥Ói1�Z;;;Ð4Íó£k�% L—BØÜܼ>Žt:m�0)Š‚{î¹×®]C«Õrì(ð]àó©ÚÔ)¡|r bª‰�°Ý^PìÔ!é‰líUïaÙ|ç*ŸÏÃëõ"ô�ßT*lnn /^Ì�:ujkvvvÒ²¬8�/ÑïdSáÙ}i·Ûnw?Ì!çù êœôNB­V«¶Ûí²¦i£t\‡YMÓq4 Ï>û¬MZÙàBv �žy‹ÚÞ÷ú¿p8Œf³i±ú"år¹oä‘@4]+ÍfÓXXX¸ÈK=ztâàÁƒ£ÉdÒds\èAݵd2‰ÍÍMG Nãv•JE[XX(<ÿüóçzçLO$ÇÒéô]ªªZ~¿�@lÂ*BŸ¨Ÿ´4�F£šËå¶Îž=û†�]uèccc‡2™ÌOÄb1‹Ì-Ø{~ôªX,"“ÉØdjrrÒ6M`ÉŠ(Šƒ0MÓ¼çž{~üòåË_gþ±Ú¤aBs—|¸å–[n¹õÃO@蔀;Þä0ŽeI’ôsW®\ ìììœÀí0¶®Ã‡*@ŸÀ#Š¢Ç4M)ôÙƒ²ÏôoŸÏQ¡išíÌDy4/O6½Š¢X£££?¹³³ó7Ýn×Òu�wâ´�{uEœÆÏÄP(ô3| –³Ù,jµJ¥RXœšš²Ç—øÙóÙÙY\¾|¹lóã,ì 7ë"Ä p³Ù,êõú€õ*6ü�Ž9 } ‹y2Âv­ö ·#G$Úîõõu¨ªŠ`0Ⱥ ™ßþö·¿}óæÍ €îâââ�‰‰‰…B I’˲@â~öÚ¤ÎN:�¾kqqñÛpp(û’�a�¡w?ˆº¥RÉ$›i>ã‚wz ¶Èšux¢®D¡P s`Y/q t¬:�ÎÍn·{«w½Y¦i ~¿ÿ ,ˇØND¡PAðÛR«Õ I¶··Ÿc÷w|||fß¾}J¥R}a}´ÀÚÒjšŸÏ‡���>ÒCù.ÅbѺvíÚ7æçç+ìß�‰‰‰×G£Q‹ÍâƒH$PžVé÷Q‡buuõÆÙ³g—ѯ¹h1²Ý5'''iddÄv½b3R¸Ñ>”Ëe; “É$B8FµZíÓO‘9ƒ$I‡ÃàH†1äút‰‡[n¹å–[?Z¤ÑhÜþ‚�NÂôÞ¼úO-..údYnûý~ÃëõLMÓÌz½nݼy3à úÓÔ-Öìììþ‘‘‘‡LÓüi¯×«ó™ì#àèÑ£ˆD"¸~ý:¶¶¶úÆGX«Pªßÿýñ™™™ßÍçóíz½þôéÓ§w¼ˆþÜ~îz¯•r§±+›€ˆ¢(X–e;s±ÇL–e|âŸÀÉ“'ñÄOØ ÉÓÓÓvx&Š"Âá0fff°¼¼<0ÿî4ûÎŽRù( ƒÐ4­o´„}ŸaÇ� <¤1(–èЃý½,‘äÅÁìõDÛ[,m�õÖÖVçĉÏܼy³J@Ô0 }yyù«ªª&ãñø�`0˜5 #éÞ{�‹3²,¿ÐétjÿŒ]�a¤„ âÔ766.>|ø.Ã0,¶£ÁÙ_ÛǰÝn÷i>XrÐh4°µµuvccc‘[Yçí²Ù•õuI’ wY–eI’d¾è˜nlll®¯¯o0ûdLOOÿR6›µuD@eY¶Ã&™Ñ-T*accC ÈN§c¶Ûíë…B¡}þüùK¸­“ÐEQggg?422bw%LÓÄææ&:d“zê~Ð!Ó%c5NÉâ]Æ‘#G~ctt4Iãƒl–'ôµZ �F‘HľޢÑ(>ò‘�`ww_ÿú×Ñh4l’M|Òõ`°l¹Cì’·ÜrË-·~tH±X„eYöl3€¾UrzLA@­V3fffÞA+‡ìv§ÓA*•2òù|£\.ÿa>Ÿ¯¦Ói,;�Ç?‹Å¼Á`PªT*:Û-`%=‡B!ÌÌÌÀçó¡T*!ŸÏ÷ux‚tèÐ!t»]Äb13�Nûêõú£ãããæÖÖÖÏV«Õ?ÚÜÜÔK¥RÃmY�ˆOFhìL”$IA!@IûìÙûÏ~ö³¨×ë¨ÕjÈf³öÈ?ºÄ[¯¦R)˜¦‰µµ5ñwö}YAo¡P@.—Ãöö6‰DÙagõI³ÁÔ9eEÐÿ±êÆðií¼Cc�kw®hl®R© P(àúõë­¹¹¹*³rMiÕF­V[©ÕjkSSSo IÊWa�{Ï5Ê ƒþN§ãDÿ9H/L·W½×ÖÖN4›Í� ¢³!“$âæG¬ØùJ¥¢mll, _[à¤)è»vççç¿9==-F£ÑiEQMÓúFäØm!Q<í�(ŠÂC=ô³û÷ï7ÈN™í~H’d[ ÓvÖj5,//ß|æ™gnˆ¢¨[–et»]½Z­¶¹{° ÀM§ÓIUUMVSDä†íü±Ç†¹ˆ€Ð1јkI﨩ñññb±œùÑ«jµŠd29ð¾ìx%oÀþmr»n¹å–[n¹å@@VVVþÓ4Ͳ,Ó²,ÛJ“%!ô�ÚétP,!Š"ÆÆÆú,WÙ•øh4ê‰Åbáµµµÿ˜ÍfÏD£Ñ}ªªÆC¡�)Ë2dYF$±Gªøwzn4XYYA,Ãööö€Ý,û3ì <ôÓ‘H$ÄL&ªT*ÿ~bb¢[©T.¼ð �Ûù ¬ÿ�\“Ð#÷MLL¼# ½Îï÷›¬u§¦iPº®c~~Š¢`rr‰DÂvûâí>�DÛápÑh›››ˆD"6yà_OS�F;;;(‹v7¦X,bgg¢(Ú£&###¶xœÕà8¥e³Ú ö™ÜšØ×¡|�z½Þ7zÆ�‚ÑÏ+Šb1+×lJ5�#qww÷|$¹GQ‘4özc1V4ýÉb±ø¿£?­\øg""{’�Z­Ö§¯q¢“ý.Ÿï‰¡Û«««ÿˆþm'Â[c –ey–––¾‡cÉdrV’¤w†a±ÛÂÓ˜ßïWZ­Vkrrò�ÓÓÓ‰„E×0«¿bGõÈwkkË:wîÜR±XlÀY€MD�ÅbûÇÆÆ~.‰˜tMz<üú¯ÿ:>þñ�¸Ê±6æo�mõ�~‹[[ –N§oddD¸Sà`»ÝF¡P°SÙÙ¿5•J_üâA!ªN™4=�Ë0M™KFÜrË-·ÜúÑ& �?þø©Ÿø‰Ÿ(›¦ù;–eyYpOúä‡åÊD"$“É>ðLÌœÛí6VWW‘J¥ôP(t_o¥Ñ¤ÕR7¡Õ}6í˜V·Z-\ºtÉõ4c;�ѱ±1{$ƒ„°4‹®ª*¢Ñ¨™J¥<õzýÁ‰‰‰s¹œ¡iÚç®\¹¢7�9ôçGðâuvÖ_Ìd2‡ƒÁà§Âá°)˲ɂvÚ6rëRàW�Yò6̲¶ÕjJ¥J¥B¡B¡�­ a».Õj•JÅ~Oö¼¸j6›èt:X^^¶ b±B¡�‡iEØbÉÛá`ÉH¡Pè똰v²³³³8|ø0Z­Nœ8akø«}`@#Åuéi4 ÍfSè |íÑ.Zµ§{I’ÂÝn·ÅE'"âdÉüZ’~䯬T*›�NgôNV¼²,Û×:�?†W«ÕüâââÓ†aAë8‘a×.oµZÕjµZ}bbâõ†a„Y] K†|>_ H¡PH½çž{¦S©”ÅŽ-±lvL£ÑÀîîn÷…^øæÒÒRÃíg † b:�þ…x¹ðÈ#�|îÀ�¿;22b¯ˆív»¸xñ"‰Dߨo5kVWWQ¯×1>>ÞÚ’²Íf³oU˜>¼EQ´W‰IˆËϱ�X,†_ø…_@>ŸÇùóçQ¯×í, ""~¿ßŽÆãqŒŽŽzjµÚ¿N¥RÆîînnaaá�jµšÞl6;Ì*rŸXÝãñx³Ùìþ`0ø?ƒA“ —m |gggínƒ“[”“Å0ë`U.—!¾ô¥/Á²,<þøã8yò$Êå2–––`š&Òé4J¥RŸ3?ÎÅ:ˆÑ×$ž]]]ݨT*sétÚTU54::úºžµªÈÎø³„„ÆËÈ�ˆ€+ `ùïï‰Ú_F¿ì8¥Fk¸­§�Z­ÖWºÝî‡}>Ÿ50Kétzv}}}·wm{HÈÿ/åóùþ‹¦i¿Æ^ëNŸÏ¿ß�ÕÕU“F‚�F¾V«�/‹; �gƒíˆ„è{:^²eYºišt]d˜0¾§·�>üÎL&ãqÒ}‚`&Ò}”ËeÌÍÍå¯_¿^á¶UsØNkffæ#™LÆ`ݨR©Ž=Š/|á Peào {¯õþn´·zÛ/ªªz_&“¹/ FeYö÷î «ÝnÛ÷"»ˆB‡4M³Ç“É$êõzŸ 5-Ì¡fGäX'ºz½Îg9i?\2â–[n¹åÖ�. Ÿ8qbÕ4Í/†ñÑt:-°`dwwÁ`ÐÖ°d‚ÑžÃápßê"ïÀD€}vvår´êÉw\ð„u�Ñ4 333XYYA:�ÆûÞ÷>lll P(àÆ�h6›vGD×uøý~hšUU‰D¬D"!Ž���MOOÿÙöö¶Ùétþó³Ï>Ûð �ŸÏçõûýÿc4�òz½&‰ÍfÓî¾D";v ‰DÂ>fw¹âEäÅb«««þð‡‰Dð›¿ù›¸ï¾û ( ŠÅ":�¾ó�ïà©§ž²É‡!BG_Ó¼~>Ÿ_[ZZ: ÀÌçó:€-טǎ»bbB ‡ÃÁ`0x@UUS–e›$Òï£g:Góóóèt:(•J¨×ë}Ä|«7ªb1`k¸r©×jµ\4E±x+[ÆEj\ɲ,ï$äü†#ŸÏß311ž€°÷íC$ѯ\¹ò�6Ó=`‰Û éÂÙ›Ý6€D¯+•JF,sÌ&^¯×Êf³�NMMY”SC×1=³º�V«…jµŠ•••­o}ë['82i[àF£Ñ7‡ÃaC’$Ë4Ít:�>‡-"�@¿ú«¿Š¿ù›¿ÁêêjŸu0Oôy�‘¢(wONNÞ;22âWU•ºy]+¦ibaa‡‚ªªðx<}¡›ívÛÖNùý~„Ãa˜¦iwÙ{Š]xa� šÍ&¶··Ÿµ,kXGÕt?zÜrË-·ÜúQ' ´òÜ9yòä�f³ùg¦iþ–iš˲�ËåP,Á®~:ÎÀêê*b±Ø€–€»a_¯(Š \x`Ö=‰¬Ny…B§OŸ¦,;v ‡ÆÑ£G±µµ…—^z ¥RÉK²æ÷ûm§¨h4j¤ÓiÔëõŒŽŽZ¹\îÕjõÞÜÜ4šÍ¦>55õß�ŽŽÆ¢Ñ¨M>XPCàŲ,ŒŽŽÚÙN.WTüþ�è5ŸÏckkË ‚€z½ŽOúÓE²,cdd‘HýèGñÄO  ˆÆ‰x°c?\vÆ(nÏÌ÷�Ø+W®<{åÊÁëõŠ©TJ‘eY˜žžþ½�^Ž IDAT™t:O&“ˆÅbC“Úkµæææì1§´åóù6nwœØÀ6" `V«Õ¥n·» ëú>ŸÏ7ÐAðz½ðûý3�GÒu�ˆ—! "þ~Pd¤�ˆŒŒŒ|Ò4Í©ã7¬ã@ûÐë,y{ ÝpèxðîNó%œl¥=,Ai4Ohšö°aK�Û†û÷ï·âñ8H3A.V÷A×~½^G.—k|ík_ûno[l’äñx¼Édr$yo0TX'+A,¶Óö®w½ ßùÎw�ËåpõêUÜu×]Æ|DÓ4Q„·=ztª§µ²x“v!c{{›››¸ï¾û)R–eû¾¢ÀF'+löç›Í& …BéòåË p4Ýî‡[n¹å–[.¹ úDžsçέX–õjšöëÙlÖ,•JàGqØ®KH{ठàS¼ 8„B!;©›^ãóùúÂÚœå]x½^´Z-ûûÍfÓîØLMM!›Íâ]ïzŠÅ"jµΜ9cÛf²d„‚ñz#ZB&“Q*•ÊŽ��£Z­ ###;ÿ΂Ú®N§¿ß�^·`O—+àÔõh4¨T*¸uë–¸²²rÍëõ•eÙòù|/ §ýüࡪêÀñ¾ÿþûñž÷¼üÇŒF£ÑÔ™Õv/úÅßì(� @Ðu]ØÜÜlð.--}åíoûϨª:Nö¾lŸPÎï+Ÿ¨ÞUñ,..>Í!þYg´P«ÕþQUÕO†a±.mtÝɲl�ŽŽ¾a}}ýéÞj?KB ܶ†6_c"8tÄl6O¥R³‘H�NÇ dõKì>x½^(Šâ}衇öŸ9sæ2CÄÚL'�½–ÃÃ×@è]³Ù"‘HŸ.ET«U$ ¤R©ã²Çeu½ûN¼páÂe]×»Ìvi’$yÆÆÆ>�ÇÃÁ`Ф‘*ºçIØmYxàŒ��ãßø ÀßïXì`¯3ú»Ðétü÷Þ{ït:�¶øíeõY,aÐ4 7nÜ€,ËH$h6›v€"�Ây<´Z-;È“ ne¯oº' …BîÙgŸý–eYN&GÝNˆ[n¹å–[?Ò„@“çÏŸ¿U¯×?ošæ/‰µÚd…Éìª$ë Å§€³`�Oï¦ñŠr¹lƒyÊ» ÿcŽ@�v¯×‹jµj$ú¹n·k¯Ä‡B!;v ÉdøÀ°±±�••¬¯¯£Ùlö�t0!áúÈÈÖ××�FíQ1^ÿ‚lEQî8rÅ®˜’]i¡PVVV6¾ùÍo>Û&ç™LæmÑhTò½\É´ˆpÐ1gWÓ`ÿþýv7ÊÉ&´·ÝúíJ àv™•ZêH¼»»»7Òéô8%·w»]GÍ Oé¼9€ÖÓš¦±–È< aÃ"Å\.÷R<ý~¿1d ËRUõ€ §z �%!ì(ŒÀu^- áÇ®èx Ñh4‡?«ªª×ï÷£R©`X !Ý7d;�F‘H$V©TÖ08šÆ’�MÅ�v~E]×ÿ×n·ûo Ã0Ùã‹Å�ÍfÁë>h‘�Ïû(•JÖÜÜÜ‹.\Xb·æõz•l6û›©TÊK䃿/˜.Ž?Ž/|á 6 ç»­üBÝO�N###\²äß©óh$IB»ÝF©TB«Õ‚išPU>Ÿ�@ oqÃ4MƒAìîîö„ö®m¡Õji…Ba÷ôéÓOâ¶™‚It²HvË-·ÜrË­9B¯Ë€)ñæÍ›·8P‰ÅbI'{Vz�v£Ûí"“É ŸÏ÷‘„²@�wÍ¡úH$bwØQv¥‘i·Z-´Ûm„Ãá>àA�zý³Ï> ¿ß�‘‘ÌÌÌà�o|#Z­êõ:N�:…Z­fƒCv¼¤\.#‘H €§´oê9¥‚;��5›MT*looçÏŸznn®n\ckk뉭­- €‹Å¢Š¢ ¼' É^¯W¤UsÞè«_ý*{ì1hšÖt(hšö<Ó#Òb¶�\�HGá»|ùò‰D"ñ¶`0èeu;ìïv:6Dì¨ãÓ;Ý+W®,rÝ~nÞ`ˆnY–ÞívÿA×õ÷�{ë†Õ³õ�&‰Ìîîn /ëx|dƒú^- qÒ{ØäÃãñ£ÑèÅãq/�ìÅãq{ ÐÉŠ—Õ�$‰}¯{Ýë¦Ö××Ë·nÝú¿t]gõ :×õpʲÁº &KÓ4“ «V«8pà(+ƒÏŽi·ÛöýKº�……ý©§žšç¶ÏJ$M&“^V ÅßäMÓÄg>ó躎\.g ^Æ^Ëô³ú²nØ §pLrµ¢ï•J%†�t:=@>èš-—ËØÙÙ1i›ˆX—Ëå‹…Baycc£äp/±–Ò|̵í–[n¹å–[?’Dgº pÿaÇ«|><ˆÉÉI,//ãÚµk}«Œl·ƒï0ñ¨T*(—˨ÕjH§Ó‡ÃH¥RpÒYÐJ'i%Z­‰%.ÛsêlÆëÀÕívÑh4°¶¶f§¬'“IüÔOý¶··)õz’$Á4M(ŠAG:øîŒiš}‹OÿæG®J¥’°¶¶Ö>{öì?mnnÖ¸•n~U[(•J•ø<O<×ôôô,›®Ívȶ˜?LG¢‚~�ëV¤3�²pÕøVWWÿ·h4úII’‚<¨c÷�ÑãDöÂâââR±Xlr Õ XSôf³Y …B�e¹Ä3NRV 8`¡w�û08?Œ„Ü  _³€°oß¾·ÅãqÕï÷›„ggg±ººÚ§‹áu,ä>Õ}‹±X,žN§?|ñâÅ¿.—Ë"÷Þß«–@à~Ö,•Jµx<¾kF¼V«A×uâ ˆ«qË-·ÜrË-Ž€ð$DÁrJ§‡$I8rä"‘ˆí~lç#væŸ(uH“Add||Ü^u\__·íX15u ÈmJ–e4›Mx6 ˜¦‰ëׯcÿþý…B6ˆâÁO·ÛÅéÓ§mת#GŽàÀ�8xð ŠÅ".^¼ˆõõu[§ÂvVøÕ[¶³C#6bîÍû³º•Z­†ÝÝ]ëæÍ›g.\¸°\¯×›¸=¶¡q$Äb:Ô�ð�LÓ<Ýétöû|>‘tüœ<.:�N¡gëÊ‚ÖiIG¿NÂK«¸ ùn·ûé|ð¿µ,K¦sÍ[ s)Õ6é,‹XYYY½páÂyôÇéÄ‹Ú&c}}ýT4ý]×Ãt¬EQ´Ïð²ÒôôôìÎÎN»Ûíþ‰¦iN«ÏÓùp""wó<ñx³Ùì�…Ãá_…B¦¢(ðz½ˆF£¸|ù²=¶Æ;añ�X,†n· EQ (J\–å��>}úOJ¥Rƒ#e|Þ‡µÇöŠx9Ë&fYÖ£±XìíªªúèÚI¥RˆÇã¶îƒÏûÐ4Í>—õz;;;Âã�?þÔÎÎŽàóùd¯×+H’$‚ð/ƒÁ /XNVÎN÷�®ëX^^†(Švhg½^ªÿ`.•Jawwöu¸¸¸�ǃÍÍM<ôÐCPeÀ–š%ätµZ­>Âܳ½¾vþüùKp–³m¡ç3ZÜî‡[n¹å–[?ÒÐÔ{ E3MÓrJ·ÙŠ®ãêÕ«Èf³X]]…a  ¸ÝÝ]Ç\‹žÇ¾ ëºÐh4N ‚`Åãñ±v»=iFŸ]f±XDµZ…(Šb³Ù¼Øh4±Ẋ¢ôq"¬®bddÍfÓ^ íY›ö�“°]‘v»�ÝÝ]ÌÌÌ •Já�ï|'æçç1??oƒ0§‘A´zÝétìÕlZ�¥pFêÜlllˆ·nÝ:uáÂ…› àggû�VLÁt"¼¤r¹< ·}>_†1q²3¦¹úV«% …+{³$„}o¡÷:¨ÕÕU�Ïv:�•J¥äp8lM:´-ìØ\£Ñ A¯aš¦�Aç+§‘" t¨S­V …ì댒޹‘7YUU¹ÝnÿZ©Tº±»»ûsùŠèw&Я7y%äCD¿Ã”€7�þ¦ªª:‘¿ß�¥¥%ÒÙ]^B× 9Du»]V/zðÁýäÉ“Þn·y‚fû‡i@ìm=räÈ'âñøë"‘ˆì÷û-¥#¼»»‹L&cß+Š¢€=¢H ¥R ×®]³�Àñ}ûöeeY–¼^/m³Ùl6û:‚NºNLÓÄÜÜ:�2™Œ��3==m댆u@¨ÓI ´8Âgær9Ü}÷Ý#p^¯×î (Š‚v»m=ôȇ°¸¸xùôéÓt¿ì•@ÏvñøðEÃí~¸å–[n¹åV?ölê­VËÑj•�.,,`iiÉÚ>ŸápÕjÕ^-­×ëˆÅbhµZXZZj///?i†=f”Ëån„B!_6›}›$IV@ =À,¬­­=IÜÛÛÛ€K™Læ]£££‚ßïÏʲlI’dÐ!âñxlMÇÖÖR©�@߬8?¢uåÊ;UûäÉ“vò8ýnL±óë,ð¥n#;*•JX[[+>þøãO¡ß݈×àgÆYIarikkë/Eù¯Ä(ãƒVwÙí¤ãÑU™+‹›ùàõ<ÈÏÞ¸q#777÷oyË[ÞšJ¥Ž«ªšQÅbÍLÓ´5:cccðz½ØÙÙA<·àìxå¦Ç_£¨×ëX(>-˲ÁfÓ°š!˲ˆ8f¼^oÆëõ6s¹ÜÓè)˜÷17Œ| �Ïx½Þ7H’ô~ åóz½ˆÇã:m“¢(X]]E0D,³ÇÙë„®£N§ö¦}¢ÿ7 cä®»îúĹsç>ƒAA9/pæÉ‰�Çžœœüí±±1«ð-"ìqÓu+++ØÙÙÁ<¯×k;x0ïå} V«attt²öM"Ÿ­VËøü']‡¤ÉÊçó¨Õj(—ËÈf³}÷'¹‡‘«[ô÷(�NÛØÉdÕjÕ&£lWãññõ¯ÅbÑ6J`G÷èï… h·Û¨T*ÂÊÊÊ�_|ñ s¯ò¡Š|ç®Ë‘ƒ;7n÷Ã-·ÜrË-—€0+Ü}c.¼Åbñ ™Læßv»]ƒÕjG €€ û𑑍ªjƒÏžÓŒ¹¸¸ø”eYmnµÝ¨×ëÕ¹¹¹¿wżµ ¬¶¶¶þ~kkK …BÁX,ö“~¿_`»¬nÄçóÙÉëårÙ½bçÜY2¢iÚá`Ie@«Õ²ÅÞ”®iš ¾kµvvvð /”VWWŸÁ`@[“!!nÕ”¯é나¦©ommýi­VûÝÑÑÑ€,Ë�=¶#ÀÚ¼ƒÁC‚ œéʼn›CˆO�•,ËÂÉ“'OD"‘ GŽùåãÇ��Æb1¨ªj¯ä“CipzçˆÍ=ˆûÞ쨔>*˲IM,Èe¯Mîû?Y¯×ƒõzý ¦cáÁ+s‘²÷Y!�ÿûx<žUÅ/I’Å®æ“�s�Œ`}}�4ðûýöõFÉô=Ö¼ ƒ®ë˜˜˜ˆv:�ßnµZV.—ëøýþÏZ–eô’Í Ã0ÌN§cišÖe7:�¾cvvö#™LÆ¢ëž:V¼H›í&^½zÇ�·»6D¦WWW±»»‹p8ܧ_¡[–e[EóÐD†ßö¶·áío;¾üå/ãÉ'Ÿì3’ móù|ƒ6¡nµZöñ ®&Û év»v–;¶¥ií{–'¥ïQw¤R©`yyùÒsÏ=wƒš6ƒeywº—\Û]·ÜrË-·Üâ: <È7s¹Üf6›UU5ø•RúÐçÇ|X�;ûßjµ°½½-X–UÃíQzð–«Â�ò\.×èíÇÍ}ûöýX8öúýþ{ý~¿Á ÆEQ´GuJ¥’M6hUšF>øìîîö îYpåñx�ÇñÐCÁãñàÔ©SØÝݵWU鵤Y)—ËÈçó­[·ž6MSC®C·sœº–Ãj7uAtf³Ù4›ÍæÿàÁp8|·išw'“IÃ)ìÎëõB–e+�N”J¥kèuâ8Ÿ—�Þ{T¥RÁéÓ§¿xôèÑ#Š¢)I’Mêh´ˆYËÙlVX__7÷xo8t@�Çß úý~‹·;æ; ,ˆïe< ƒ­n·«·Ûm½Ùlž�B~Ȇؾ=�'“Éü÷‘Hd�HXN–²årï}ï{ñðÃãÆ�DwØHŸB¤Àï÷#‰xï¾ûîQê’t»Ý?¥ûŒÑ-ˆ¡PèÿÑu]ï�@Jívûç‚Á �ÇH·“[izÚí6žyæÌÌÌ  ¢Ñh`gg…B¡�à‰¢çh4Šf³é8¾I¶ÛgΜA*•B¹\¶é|²‹¬n$ô%¡¢¯E�ªªv7–%£�=ö’Éä€ckÞÐn·ÑjµÄ•••—ž{î9ê|° t¯òfNdc/g2·ûá–[n¹åÖ�<á» sss³}øðáÿÔh4~Æçó ¼å* øh4Ë ‘ÃÌçóßî}Pw¸ÕD ƒŽG¶1˜²¢liiiéI’ªªÏ¦ÓéÅb1Ÿ¢(A6@Ó´>7¯z½Žv»���Üu×]ØÜÜD @©TB<X)¥G<G$�(ЇÃ( ޝ#Ð/Izû§s+ªMæXð fØ>‹ ÇÊçóçvvvæEy:RQ“,zÙíñù|V,;\*•^º@rr !Vœ ¬�1nG#J’$‘G¹(s$!‘H$À'Ì# l‡N×u$“ÉŒišÆìÝ–e|B;c¿ú¤ªªÏ÷H�išæ�F3Á`p(€'0üÜsÏáßø‰Ä°&pÍþ<«‡ 2K_“éB °½×Ió†išïçöÇ0 ¥R Éd�@ à³�6‹‡îù••Äb1hš†���>}�_þÙi|SÓ4\¿~^¯xþùçáñx°¾¾Ž™™ ³ü¦í$ç³n·k¿M:žŠ¢ \.Û�‰Tªª¢Óé lëPg677_zî¹ç.2äƒîÓ&úó=ø…‚½¼K>ÜrË-·ÜrkH¤lš¦i<õÔS�?úè£ï‘$IbÉÆ°¤r6«£ÕjÙY+++;;;;;è·©l2æ¼èC: àHŠ-þEOQ«ÕÚµZíó¤}ûöÝí÷û߇UY–Màå¤uVÐ*>ð�à}ï{~þç–e!�N÷höÙ²,lmmaaa¢(bgg§Ï×Þ`fuµ7jà ½ù‘ކ‡Êñûl û˲Ðn·�v»}) cWÒ 4ö·aEQÂív»ŽÁnàìµ ¡�»ÝîCòØcÌ2¿ßo&‰wÏÏÏÿ%œ;^ŽÛ"¾\ÿB’$}˜E4»êÝ#F°,«o\‡9Ÿ2{žX2Ý{ü¬iš Ñºn·k°�²a–²†aØ!wcccPìƒÒÅ}>Ÿ�•ÂZ(³$K’$,//ãÁìÓc9}òÖËô½V«…H$2�ÉÁ7Ã0º"¨Õjv†ÆÀIb² Ñh@Q”>ǯ¹¹9{‹ŠÞ‹?Ÿô ï…Ãa¼å-o�(Šxæ™gì ÿ:"£ìH(›Õ3Œlêº.loo_:qâÄ•!äéû1¬{g¹ÄÃ-·ÜrË-·^9a?@ ¾¥¥¥?�eùSüäìIJéælÖE±XD.—–––.ƒÉÀ øš]I€Í!„F’lB�¥¥¥ ^à=vìØoD"™%´í�?þ8ž|òI;¼�µJåža¨×ë¸té’½²îúX]L»Ý,Ë2П<ÞÁ`¢õ�²,ޤñç̲,ËÒ4mY×õc|Ö�?Y–UU•v»Íº9‰¸³-OB,x‹š¦Íw:�‡h–ž%ª,Pôù|H§ÓílBÂj`VsÁ?EÁØØÖ××ût9LY’0ìßé´zç ­V ­V«oŒŠÝ¶ƒ@ÇZQ”¡ÀšÍÓ9vì<ˆk×®áúõë}¡Žìq£.YÊòäiØxKN,ËB£Ñ@(˜Éw7 ðmqYòîDÐéyß¾}ØØØ°3}È.‰ �–a�F¶£¢ª*fff iTUE«ÕrÔ—�‹¥µG£Qìß¿Ýn·ïæ2‰„ååå¹óçÏ_Åàˆ$K>H¿6l¡À%n¹å–[n¹õ}ZÙëÞ¸q£`YÖhµZŸÊd2" X ¼à`ÊzA{H¥R`•Ëå»çææ61hùê$ºæW¾­=VÆÙ Ô)h0™LbjjÊÖ]$“Éàüü¼d¼ŒBØð9>b¯nk"ö~²Y¥nˆR(þBUÕß“¤—7ƒ†l¡ib±˜�…À;ÐdÁý,uP¸À¶:÷X«ÎWbÓÉ ÃuB«Õz¦Óé¼+„ÈQ‰·ã ƒ†tÐqsê@ìu�ègÏž=qøðáŸÖu=LÇÉõưä{î¹çøåË—O9þýísm½\Ž õÂ… H¥RX\\zñyü×Ã~fqqñxܱ“ÁŠíÙŒ�v»=ÐAcɽþܹs˜žžÆÚÚšŠ7ŒX�މÿÿa„Êé÷Ðu@#`úIŽn,gÝßh¤Šé †a=*¡ÛíÞ0 Ãè-DX…Ba3•JMx<žC¢(ZNÛ'Š"FFFúÈ>?:fš&�Ο?o»U9½†œ°’É$b±˜}x‚EÝ�ž¨ÞXXXXÇps–|t1¨ùp‰‡[n¹å–[n½Jâd‰„�nC¾SÐív±ººŠÍÍMûrÒpÐ5vüøñ�nÜ+%X|ða�ˆâ­o}+"‘^|ñE¬®®�óz½¶±D»Ý¶ …‹õz}Û4MÝ4M£Ùl¶À�&U«Õ%B ˜Ömêt:öÈÛq$½ 倰¦ô­V ¢(¢V«�uïc;:äP·»»k\ºté‰ííí2úAYòÑq †K:ÜrË-·Ürëµ! Ã2Aº èD±XD±XìÞºuëO}ôÑOMLL˜4îC`… lUUµTU½?—Ë­ßXsŽV쨥A ¡±u¦iÅbñ;�ç˜ öj¬(Švî�”©ªj[�òÁzìèuxý u‚òù¼xñâŧÑßõF>¾—ýv"!”d/ðȲüMÓ>­(Šáä†%ITU•òùÜrË-·Ürëû$ }ø�ž]îÿ V½^ÿ¿[­Ö‡�€E)ܼë…ö¥Óé‰[·nÙ`Ã�–¾—r²©eqßckkkÀgLÓüx0ôù|>Ëãñ ÛíÚÂ^6Ç#—Ëõ�˜‘�*k›J«ªd=ÜjµP«Õ°½½����›µZ­ã@ˆîävõjHˆÀ€u½Z­v[­V% †øóÂ�ÃcŠ¢<ßn·[ ù Œ‘ù½Ö$¤�8Z–õo[­Ög»Ý®Á®øèd…èáp8åóù¼ív›%?ÔÐÙ# IDAT 1Øý:tèÐÛÃáðáP(Ô—àÝn·ûˆŽ!ðnš¦Àçº0ÏÖ^bh"žiš†P(„‘‘„B!„B!ȲŒb±hÛí²�4ž€PDZÙl¢V«!‰@UUhš†¥¥%x<„B!ˆ¢h‡’š¦),//kww·Èlw›{8u>øpN·ÜrË-·Ürë5 N Öpx� Àš››››žž.v»Ý­ê²B\¶ ‡Åt:}ßööö ¸óÌÿ+ý€ö #–h¶¶¶5Mû“x<þÆ@ ðÆ—†Å¾•RÚ~J}Îd2‡Ãv€ Qç£Ýn#�’ã�É�a¡w¯†„ ëFè�N§Öív/êºþÖ ‹%‡½Ôi_»ÝfÝü ¶OpØ^ûX7›M£ÑhØ+þN#`DLC¡zÄãpMx^>‚8;;ûSápøXòAÄï÷£Ñh µ“%€Z­V­ÍÍÍoI’d‰¢hˆ¢h‰¢hŠ¢h ‚àõz½�RvŠ“k•ÏçÙ®?ŠGÝŒv» ŸÏ‡‰‰ Äãq„B!Äãq,//÷éqèúq²ñe]š(�|}}Ýòx<k=L]%B5àE�X,֗ͱ¸¸ØG´²E`*è7nÜx²Óé4q{d‰žYC “!Ä^žØP²ùèè(TU…ßï§Î¦¦¦Ðét°½½í˜·Â# üŒD"`»}ccc0 Ùl¶ïµ¦iB–eÖ•�¿f‹íŽ]¹å–[n¹åÖˆ€ðep ³/å7ŸÏ•JÅŒF£}z h’ëQ(²Ùlp{{›õa ˆð*ø02bÏB¡PX/ �xvttôÇS©ÔC¬¨ž%PµZ Õj©TJˆÇã‚ßï7 ±¢Öf³‰f³‰d2‰l6‹b±ˆP(t(‰œ­T*&öNK~-j@“±°°p=‰¼Y–e�Äà\ÂŒÇãªT*†—ÝÂ|pÎ8œ�¯øãmæóùN³Ù\Ó4mŒÍa ÷fǰü~¿¹oß¾÷]ºtéoÑïdf�€8pàQUU?  6|�í@y<hšfÿ~V# ijµZw}}ýÉZ­VEŠuû3Ž÷]—±XìÝYŸÏ]×H„®ëhµZ…BäC–ed2¼õ­oÅW¾òûg|>__æOœ0W«Uloo—Μ9óüöööÁ`0hú|>K’$«w<,QÃ�g’=F="eÒµ  …ú®[zOö¸ ÓW4�æ¥K—¾Y¯×ë´Òn9²ÊöZ–¥Y–e€r¹Œp8ŒÃ‡#�‚ÜõhÁ‚FÔTUE±XÐb±�­J¥‚@ 0pO¶Z-$“Ix<»ƒÂš¸Ýáàm±�Ü®\òá–[n¹å–[?@ÂçL¸½"΃],,,üi*•úw�@ÀàÇKØqEQP(îSåÅÞÈ+|¦{^Óñý�‘aA~¬x½’Ëåþ1¬ƒÁ÷K’d¿ž€²$I¨×ë8þü ]×—Ž9ò`4Múý~Øhš†7½éM6`k6›Ôõ±TUU*• O¾±ý+Ùo¶ B£S€Ó­VëW�€Àºa±.M²,[²,G Ã�t]ïôH;óΖ¹ñ³P(´»ÝîM" üH+DïsëÒ¥K|Ž‹@Ø¿ÿÛ"‘ÈGB¡�Aà”€5owÌæB0bc«\.w¶¶¶ït:uÜÖ+8�Á�#, K¥Ò×£ÑèÏû|¾ž04›Mˆ¢ˆh4:”|<òÈ#¨V«8|ø0^zé%{ÛÙÄqv´ˆôD½q¾Æ7¾ñ�§:�Ž^,O1Ñ^ ðz½b8–$I<�(öÐú�~zbb"‹ÅìñA"Pü9ás2Øñ¯F£�\.—¯×ë ô‹µYÍK@À_ ðy½^û˜˜¦‰ééiÄãq›|ø|>;à‘Œ h£R©ôe“ô‚/Q«Õ‹Ål·5:~ä@wøðáÂØû7ëô×e¶}/«]—|¸å–[n¹åÖk@@„WøZƒe,àK¥R¥Z­ áp¸o,…ï‚(Š‚cÇŽ‰;;;oð ÜÎè ·*ð‘ø~A98€ÙžÛív�ÜŠœº ½UÙ#ëëës¹\îÙ÷¾÷½ŒŽŽND£Q;h�¿š�€966ö®õõõ/¾Fdã•TŸËX«ÕzR×õw[–eíììÀãñ Z­Úûéõz•}ûöýZ§ÓiÖëõ;;;_ ï±}æÇÜÂË]LLL€u¬rÃâò@$æš0fffÞ‰DÞÏ“29 �Ü vww/†1êóù2†a\5 £T­Võr¹<ßÛfV(ÍkX] O>D{VVVþV’¤÷ ‚0M@¸ÓéÀ4MŒŽŽ:’�l6‹·¼å-¨T*xá…ì×.//Ãï÷÷ö~ÑØU.—+}÷»ßýf§Óa+Y±· ¼l!],ùl�$I§TU}§¢(&o)MûÀ‚s~t�²2666ÄS§N=‡~½+ÚfÇ–Øñ«ÈØØØ/¥R©7†ÃaÓï÷Ûݘd2‰`0hÛ]û|>ȲlgðP‡£Õj¡P(ØD–´1Á`Ð&üñk6›8tè�c&JïzfþJr>ÜrË-·ÜrË­WYžï�€ðÄîZ­†X¡Pè px‘-�Ã0ù|þ"n[·:i"X€.|û( ù7ûV­V+%“É»}>_ˆ#cAZÏæuS×õV*•òÇãñQvìŒÈ2c4Æüüü\¨øÕöûûÙWöçD4{{oÎårö¹!p̬:[²,{E “õzý¶Á‹Î…!ïo¿ïæææµ£G�¾GUU�îóBën·‹f³Ð4M+ m æÔÔÔëãñøÂá°É“‡ñ*akkëòêêêµJ¥²X,/”ËåµJ¥²Ýn··1(0n¡ÖŸžy1µÆ�/ݲ¬n¡P¸ê÷ûˆÚí6ÆÇÇ199‰x<UUûÈÇÃ?ŒZ­†çŸµZ­Ï+ŸÏ š¦õ¹§5 ¡Z­ ¹\ΘŸŸßyúé§ÿ±Ýnó±mô³��•üJ¥R…BQ¿ßŸä¯mÞî—\¥ØmªÕjØÝÝ5çææžÚÙÙ©À9¨�ÕM°×´�Çÿr|||:‹Y¡PÈî(NLL ‹Ù„Mxçstòù<¼^/m �t‚º�´Olg¤T*!‘H@–e[×BûV¯×…\.w½\.WŽ%{o¾Zm–[n¹å–[n¹5¤¼ òN²´²Nât€¾³³Ó¥ÕLÖ•÷²‚‚pò,ÖæÒ‰à˜ßö Û^w¶¹µÊå² ûfò¹q!kddäØêêê3W¯^]Ü¿ÿÑn·+ñBk¶ë#Ë2B¡�<;;;}ëÖ­"úƒÿör{µûÉŸ'³Ýn �F±XÌž±g»<, ïýßaQciié/¸k£ëðžC¯‘Z­6Сk‚oóûýØ·oß›c±Ø ;>Ÿo.‘Hü¸ªª–ÓØÉ^ç[[[/®¯¯ßBÿx•Ó3ÛýpÒ�°ûÊ>Dæ¼I䥥¥/%‰ñL&sðàÁƒod;~¿Š¢Ø��R©„S§NÙä£Õj¡Z­bggW¯^}1 ½Îï÷›¢(¢Ûí Åbñ™F£ÑXXXè6�BoûXRÄÞ3:;|´­^ÞÉÉÉ÷ûýþKKKÆÇ;¾ƒ@cW…BA¸téÒS×®]ÛF¿P»Å‘7ö>1‹ýx6›•#‘ˆMÊVVV0;; úu?dY† 6A#ý uíE�¦ièv»nt,©Õ4 ÕjÕ&ì33®·³±±QÆ 1İ\·ÜrË-·Ürë5& ¢È·î0ûÄÎÏ?ÿü�†Ãa…æ»�Ò·É ëèÑ£?]¯×.‹§êõú3xyäÇB~$d`ÿr¹ÜL&“êóùºN‚mI’F|>_¤\.ïT«U+‘H؇wb~ápxÀ% f]°$äµ£Si¡Pè÷Âá°E^Ã:< ñ²Lg³Ù±±±ñwÜvÒyàAO¢„jµz¶Óé¼¾ÛíZ¬}-0�ˆŽL&ƒX,¦Äãñ‰���IEQ,EQö$õz]Ìårç×ÖÖæpÛ͈ï^èCˆˆSç͉€€! ¶VÉ4M+�Nûgggß<11a²äƒ»*—Ëä£R©`ccC¸pá™ӧO/¸…Áq0Ö5�%NÃDÒG˜<¤t:}<“ɇÃ9Bmnn"‘Hô‰¾Yw).%|e~~~õ¥—^ÚÅm±6ßEÒœÈ�$IžD"ñúp8,)Ó4ÍSãEç¤û`G¯H÷A¯‹Åbh·Û®Xt S÷£ÙlÚ.klVH�Ôù|~A{9ò]—4ä>t‰ˆ[n¹å–[n½V$�N¿c{{û ÑF`xç€+ôär¹z"‘PHÁ') ƒ°,Ëòù|±l6ûh±X ïîî>fí•ôöÚ“ý¢z¡Ûíz4MûÃ0Þ½Wz·ªª¾B¡`ÍÍ͵3™Œ�ÆiÈ�‡6«}‰F£EQôš¦É;€ñ`÷ûÙÇ�J§Ó¿‡-Zef�?2ÆjLÓD(ºÛëõŽèº¾Ã�[ü²ÇW „Ãa£Ñ¸»ÓéXº®Ûä�·9öx<¶‚²3ü~¿µ»»ÛG>ØUû8¶r¹Ü™•••kèw1js �´]ô¯v³"îaÇšï‚Ø`ÿÞ{ï=pàÀ�ŸãÉu>~øa ¼ð h4}äcssÓ:{öìsçÎ�[GÿÈ¿¯sŠ%W,`fïO›,E"%›ÍþW‘HÄ¢{2 !�NãÙgŸÅèè¨=‚Çš‚€F£�D"�ÝÝÝôK/½ô÷þ{gû:‡Ã’ßï¿ßï÷>Ÿ­V –eatt¡PÈ»¢m ¢@$¢çü…T*e_»�@µZÍ&øì5ÌvMü~?öïßo Ù‰´öÒϵ˗/_çÈ�SçÃ%n¹å–[n¹õ(ÏÁƒÿÜãñ4jµÚŒy§(á€3o*•z)‹½CQ‹Ö²c>2R©‰·§‹ÅbȲ¬›pÖið_¿Öšû9 íSåK Ø}è�©r¹|% .���£F>§€]±ïv»¸qã†iYÖê°ùZ¸ì°û#ðŒ��½. î#�Çf\°D„ÝOf_-ŸÏwŸ¢(£õz=`«·}l÷ƃþ%�ßïŸÁ`Ð�,ña».^¯×&GÔ¡!kU>ó¡^¯ [[[g———¯õŽ#+ˆn1v<¨³Ð°—vxØÇø�xpÿþý¿511!ðäcrro~ó›Q(ðâ‹/��õõuñìÙ³§Î�;·çð;'� ÿ5ÛáqÔO…ÃaubbâFFFö}>Þóž÷`rrW®\± ˆªªPUÁ`ÐîFE£Q´Ûm”Ëeaqqñrï½XímO>ì¿ >Ÿï㣣³t|vvv099i[îÒ6ùý~X–e�W‘î£P(PN $I²¯�x<Žn·Û—kÆ6&“IX–…jµ EQú‚ …B÷úõëÿÐh4xaºFœˆ�KDÜrË-·Ürë5,ïÈȈáõzE–åÆâââó¸Œd¼âkçõ¯ý‘‰‰‰ßrê|LLLàMozŠÅ"N�:e“ÊñØØØ°Î�;÷â¹sçV{ ·Ãl3ë Å$¾sÃç—°¤Ó «ªú’ɤ�RÅ%IÂÔÔ’É$¾üå/Ûç�…¢ã®ëºŽØ³¥6Ð?椣a ÷÷BmòÁjAhôŠÕ}ôL °»»k§Ï³„™òM¦¦¦ iŠÅ¢MòMÓÄÈÈZ­dYÆöö6B¡�ý;K¥ÒÎùóçŸn4 ÷»CŽ«[n¹å–[n¹õZUU!Š¢åñx>.Šbtaaá;–e±äƒÃfåÀÊd2êîîîÁd2iðcXìSÏž‘HŠ¢€z;€ÐÚÚÚW‡‡ aÇÈ ¼ìdH’„��†aŠÑÑQênLjš6Y­V­v»m‹ïYÂ’.EQ�H$ ¦�{1Øy5û7ÐÍñz½" I�ǃX,†C‡áÒ¥Kh6›v׆^£ª*¼^/+â ðt]ÿd·ÛE<‡aív[¯T*¹z½þ·ívÛù—±XÌ ƒ¶ÈX›dÐöH’ôòÎöëOlÒ‹ÅP¯×Ñét`�¶¶¶Î,--ÝBÿX¯K`ÑÃFk,îZà�!ßMßð†7Ü?99ù¯³Ùìù˜ššÂßøFäóyœ>}z€|¬¯¯ãÊ•+ƹsç–ÑŸ¾ÝzÛmpÏì> å÷ïßÿÎÑÑQIUUèüʯü >ÿùÏÛ·¬.‡Ÿ~¤ë÷ÿcïÝ£$¹î2ÁïÆ+#ßï¬wuUõ»-µlYjÉX²ËcÀHÆfí9ˬÁ‹s–YƒÇ³3,ö0œ1ç003Îî2³ë3Ëà ؇’�-É’-Kj©¥–úUêG½™••ˆŒŒˆ»TÞè›QY-Ù`Øø�“§«³²²"#nf}ßýý¾ï�pw ’8w#ºëëë8zô¨Ovxѹ,ËþõeY.Ífº®cðÙ4Ô©cëö‡ø‡qᬭ­ù¯‡uÈx²R«Õ<]×[[[/-//W9Ò1J@ï"¿ +¬°Â +¬ï=a~üÀñ³„�Øõë×ϨaxÝ;à4>$�NŸà†á�N°]v@°ÝX–—Á�dêyÞ=ívÛèt:�r‘Ýì(ü›ê%‚$¦iþ;MÓþ½mÛ.Äb1Œ²/uš¦Á0 °�~^;¿Þ�öebvvvb}}ÝÂÍÔq8¥[�,¼Îk Zðú7f§ÊÎ30ð±�} ŸúÔ§°¾¾>Dœ€½�ðX,æ¿^β•rIÙ“Žã P(ê÷ûos™LÆeã< hòú~4�‘�à¹UU±X ™LÛÛÛ ”’��� +++K¸)Ò¾U†C°ëq°$·¸ù÷Þ{ïÝÓÓÓÿrzzÚÍf³C‚ó¹¹9Ü{ィÕj8{ö, ÃðÉÇ`ì ËËËpGš˜˜8^.—_9€<ñäõ:6>�ŽD"ïÍd2’(Š¥TÉf³ÿc*•rù§�|ä#xøá‡Q©T| `Þ™lùàˆ é·ïû£x¶m‹Žã`ff…Bü({Oó>:�Êå2"‘ˆ,ü1 ‚€©©)œ:u ¥R ø‡82È?Îó<ãk_ûÚ£ybçš�ê±Q²ƒDýa…VXa…Ö÷‚€ìîîbbb‚ýávEQ|¿mÛïÝÙÙùw²,»Š¢¸¢(:žç¹–eyÝn·M)uY Ȳüžb±HE�mÛPUÕä D°L`ƒº Çq¼¹¹¹û.\¸ð ÄGí\{Cì‚ø$D×uÊÆRâñø�U)0œó!I:�ëŒ Üc]Ÿx<ŽT*Ëf³™V«eSJù9~ždIÈ­^#¦ìí@gØÈÛaVÅ —/_ƯþꯢR© í‚SJqèÐ!üÚ¯ýyäÔj5ˆçÛê²Ç3bâyu÷jÈ݈Ÿßg$(H@x /6�D"ˆÅb˜™™�aT–åãžçwç/MÓ$­V«ç8ΨÎ^Øùð8o>áˆF£ñ\.UEÀ^¾‡P¯×{oyË[æggg?$ªªbnnÎï|<ÿüóûÈÇÖÖ677ýŽO<90Ï@ï(ç.>L2H@…T*%;ŽóÛ9UU¬ÛH)E,s9’e÷ÝwºÝ.677áº.z½ž¯¡Þ‚é胱,úÈœ ŠëºŸ‘eùÓ¥RÉM&“>aSªªé6˜îcss𦠭ӡ7-¥ØØØÀ7¾ñ ”Ëe8Ž3ô=þë�¸Ç‘ÃÉí|zûAä#$"a…VXa…õ·M@&''}€9==ÍÀ ¢(ÊoH’DEñÇgz½±mû\«Õz¾Õj�7™L~Ðó¼ÌÌÌŒœL&ÁÂÆúý>dYöçÉnŽÝŒ ¦+‹âäääÛÛÛ�ÈÎ$äo0¸Åbñ¡L&ã1—šƒéÑŒ@iš†ƒÆ°x°X,F³Ùì{óù¼ ëú¥ííío—ËåÅàØ  ƒˆV�|øÝ¨ÙÙÙS‰DâS,Eœ�ÿ~¿ï›išØÜÜôÁO(ÖÖÖð[¿õ[xßûÞ‡'N@’$ÌÎÎVVVð…/|ívÛ× °Ÿ­×ëûDãføYr<;öüã�gkC9qâ Ãø`·Û…aÓ4«»»»Î•+W–<�›v¹AçªQ!—Íf³Ç§¦¦þQ,;¢(Ê ;6Çq077·<3337==MƒäãðáÃ8sæ *•Š?vÅ\˜Úí6666°µµå“¬AæÉiI’Î9ŽCGûQ· i"’$=X,ïN$³lT0˜¤nÛ6R©Þö¶·ann?ü0<ÏóíumÛFÐy³¬ßÀ:¥;!ÜùH s¹\îW§§§ÝL&ó†tÍfívŠ¢;nþÍu]t:¼ð û¾Ç>C˜Þ¨Óéì·fá‰AQ¿ƒ0û#¬°Â +¬°¾?$›Íúckk SSS œz €0'¢�•囉ěUUm{ž÷¹H$ò‰�Í,R©”¿Ë9Êö5H6FzUU�ÇQ(2ÛÛÛ±`,HB‚6Á#"’Ïç3‰Dâ-ªªÒ`wðxÙkrgßVP|Ï€W.—£‰DÂ5 ãd:�>™L&+›››ÿ§aîøùÀ¿àë%Î÷ȉD,™LþV:�žâAße°m{H›Ã;”ñNeµZ ?üðP''�âïx~û·„¼üò˨Õj°mW®\A·ÛºæAÑ»(ŠˆÇã8yò$$Iµk×Ðl6ýcEXr¹œ¬#;ÞÀ1©ÔëõJ¦iâŽ;îx³¦i¨×ë¢,Ëÿ‡®ëýÍÍM¯Z­^L˜4�ž8tèЇÇÇÇç™iÐñóEÚý~ÿ�(Š”éù˜ŸŸÇ=÷܃���¡±+Îí >Á2 ÛÛÛð<ÏM¥R ”~½Ùl^ ÇÀ5æ�=ªªÞ?55õs¹\ÎÏu•2Ïô§N�ŸüÉŸøéâ¦i¢Z­–mÛNyžç»^AòÁu@Fòv›››;)Â/e2™œªªll‹d2?ž}°ïóäÃ4M4 _T(�L&aš¦¿&y�! ºÍñäò,ayyùQ w?‚Éí¼¥±;‚ô…D$¬°Â +¬°¾$‘Hø³R©`cccÐ8ŽƒÁn3 T*±1Št£ÑøÉd’J’äï 4r´_åÁ/Ó‚°ŸdAœXXXøùÕÕÕ'<Ï»Œýy œ»�tþ�Xõú�Íår÷F"•?~^ÿÁëXâ»çy0 ÃwÊ•!Âܰ‰r¹b±fãñxüŸŸ?þ?€(»±yûQ€ˆß�Åbñ·Óéô$Û•íyžïÄîã­nYf‚eYCÂu6§ÿÈ#�à‘G�,˘™™Á¡C‡‹ÅðË¿üËøð‡?<ôºƒ� A�J¥pìØ1ðS«™CVðñ„Äãq6ÓïƒLþX¹�9bÛ¶gYÖÇMÓdNI[­VËY__¯Z–õ½^�jšæÆãñwŸÔó¼àùó<ïã‹‹‹ÿ·mÛäuË´nQß}äÈ‘w%‰I¶Û|ó`�'I|d°#MZ­ÖŠã8¹H$’'•$‰ò®D®ëâÆ�XZZ‚çyøÂ¾€L&3r¤‡»†a Ñh@Ôj5ŒÚ…ç5&ìÇra¯‰#%”�Ü^¯Æ‘ IDAT7ÙëõpüøñCÝn÷žN§C<ÏûJ·Ûý±ññq—·…eçŒ?/ì9wvv�L&qôèQœ9sår/¾øâùhµZØØØÀsÏ=‡~¿�T*µo„�{4¥±X¬�Fyggç±jµú­Áõ ˜¥T*ýJ&“‘ùãÕa0¤¯*—ËlÍöoܸñ´aÝ^¯·Ï‹×€Œè€ ‘�ééé¹R©ô¯‹Å"aäƒ'püù³m•J'Ožô?O‚ºf¡ËÈ (ú=î’�°Â +¬°Âú^MÓ ë:ÆÇLJœ«Øx"ø@1I’�Íf}Á±ã8ûì2E±X =ôâñ8þú¯ÿþEÐ%KE$“IÔëuär9/�çJ¥ÒÿÞl6_h4O´Z­Ú`ÇTŠñw2Ç=ª"‘ˆ"IÒÝårÙeúÃ0�N§Áæÿï¼óN,..g×u1>>˲Ðï÷}q:rìu±®û>;σñ˜™ÍÍÍÿ­^¯ÿŒNF™µ@K¥Ò{³Ùìÿ”L&‰ªªûܦ‚øÔo0PØn·¯---½,Š"€/“ÉÌf2™7uŒ'8‚ @×uÌÎÎú‰ÖA²À ]×ñÌ3Ï@̆'!üc§§§�LJî ÎþotIh¿ßw®`ïÖuÝEq¨sw+­�¢(X]]Å?øAlmmáìÙ³0MsHp^­VqíÚ5xž‡l6ë�I’4¤§`Ç9 v¥ô!Û¶¯QJ Y–-˲þY,K³Ÿ€zâ8N,Øed›A¢ì8v»]Ôëõ^¹\îðºÝ.å¯ÑÈ7ÇÍŽßPÐd>Ÿ/Ž��rllŒ°îQ°Ã!f¡|öìY9r²,ûZ™ÝÝ]ôz=”J%ðBõH$‚L&×u166æ“” Þ…׎ º)Þµk×¾¾¸¸¸�ý©í|懒�°Â +¬°Âú�v»�íímd2·6h‰ÊklÛÆØØ˜?²Â@R½^÷AË(ÃÅ¢("�î³Íä+›Í"“É ŸÏ£V«a`íªÆãñw¦Óéêt:ç—––þ7ÃüFYh޲Ò$#þ/@,›Îårð<Ïc �†Y–111�_üÅ_Äg?ûY|ãß躎|>�T*…x<î�ೕe»µA€˜Édpâĉ̷¿ýí®ޱ�›!süˆ™™™ùéd2ù!&6¿•憌n·K"‘t]§œû˜`š¦Ön·_ÙÞÞ¾€:ŽãèºîðÚívcmmídllìD"‘eY&ÑhôÞ©©)ùøñãþÚÚÚòÇlø~~·z/ ûHCp–Ÿ}Ÿ'©<9EJØëEHØóæóy´Ûm¬*ؽ v†Ùú�ßùœ8qÂQ3ò±¶¶&8޳xüøñ–eQ¤ƒ#|üõð<–e¡×ëyÿr@$ˆ .o_ÍÖ�®ë>ùàǃ#Žìùyr9Ð_¨Éd2­iZ]×õ‹®ëþÝ«íxAp€H™™˜˜øh±XÓé4x»e~í œ,˰, ¯½ö¦¦¦ ‚/:Ïår~çƒéD2™ Ç�®ëìýï�cñÝ$N›MÓ„•••'._¾\Æp烑�[¹Œ…ä#¬°Â +¬°¾_dssÓ�Á+ûßl6qýúuÄb1$“É} ˆíÀò»©Áqšn·‹'žxñxÜßÍ îz3ГËåØ˜ ‰4Mc䇦R))™LÞ�H$ÎèºþǵZíj»Ý.ãf.DÐÍÆE`\‰'#’$Éñxü_ …Ûb±Q…A#Û©¯ÕjøØÇ>†n·ëƒâÎÎÎÅN§3qÇw›��•‹Å¢¿†b±Z­–oõÊ:<0åG}‚ãTìglÛF¯×c£~þÏò€œÇ�ê�ܪSÂÎ9ëRð„3¨OâÇ™àÊ•+˜žž†çy¾ÛÕÙ³g_¬T*ÂÌÌ̾÷È(BèyZ­$IB>Ÿ‡ ^ðu z¯×käÇÙˆ#;w<`㊢HÉd2ªiš’ËåzÁîGpkp¾ÉÝwßýîF£Ñ]ZZZš™™9Q,eF¸™ÀüVŽ;ëëëH$¨ÕjH§ÓC](F>úý>ºÝ.ÓöÀ²,hšFP¾Ëâº.|¯º¼¼üÊÊÊÊöSZØŸxîçþ„ä#¬°Â +¬°¾Ï„T šÍ&vwwQ,´V%„ ŸÏï 8ãˆmÛØÞÞÝÁùs×u177`/�…Ø1âÓétP«Õ°»»‹±±1šL&&™Ljõz}ckkë3žçù¢RY–‰,ËŽmÛÿv W8+Šâ×ûý¾G)¥„!›Í¾-�Nÿx4�QU•G—‚£$š¦Áq>c™LÆO tò`68ÎÆëGøñ–9‰Dîp‰BR©Ô›ÓéôÛeYΉ¢˜`€ËqœuA²©T*‹Å(?{?jüe0îBkµÚÆúúú3Œ`loo?�ýãkN€Ìñ£_€|èС‰£G�¾jjJâÁYæäÉ“8{öì>R˃ïQBo>ÍÚ²,t»]=z¦iî ´ED‚®MÁq® 9á¯?ÎÄž�?Ö`÷bmm ªª¢R©à¹çž{~qqq{~~þ§"‘åG§" �N±XlèþQ]Až �zÝìX‰~ý×_ûÚ×ðä“Oî;v~pnnîÝsss ×ué­¬xÙÏ=z”¶ÛíEQ¬E"‘±x���H’D{u2�Nÿçn·ûÿnll¼855u‡¢(TE–$É€ñÛ¶ÿ‰mÛφ±"IÒ{S©TZUUOQÊv‰yâÁï‚óÇËîÓ4 ¥Ri¤ëWpD†‘*œÆ2/X^ #!ãããÉd2yfccã­Éd2�FéàšÐ £ŽãL@M§Ó#mX¨¸ÞÊÊÊWZ­–†›xýÉ8èæðäãÔ©S=vìØìØØ˜ÇFpø¼F„NŸ>�7nH>Fpêº×uÑh4†v×ùŽOFxâ0  ‹¢ˆ ë¯£`D)(¢æ #û?{üÎΖ––¶Ë<~.Ø©`_ó#Q<ÐçÉÆ¨û_/±œRŠjµ Ó4÷u1øçˆD"o?tèÍår”9Û7‚$—ËAUUAQ”Ò�7èÚÚ‰„ÿ~a£dßüæ7qç�wún_ìù‚„„m*†±oìj0"ȯ]Ôj5áêÕ«ç^zé¥57–——¿�ýi÷·®ƒ�QIç^øñVXa…VX? ÂïÜ�" Š¢ �Žz<ȉÅb¨Õj°,kŸ�)ß=Šô t2`ÎŽeaaµZ ív¶mûIâìXøŽÈîî.6771>>îôz½÷'“É—eYƒË�:Q×u]Û¶ï1 ãžF£�x<îñÎGA'¡`Æ#Vlî¼Óé`jjjßH :c±æççAÁòò²?¾§l”h~~žRJß9;;‹f³I···‘Ïç} Œïìì`vvvh&žë`.ÞYZZúKcm²b{(s9 çq÷Q˜˜˜H?~üSSS…|>ï±�kÞq‹RB²Ù,ºÝîÐ13ñ=ÿ¸ƒ\Œvww©a=ÇqÉQy­#§�$�"$l-ˆ¢ˆF£±ï°çdfÌáŠ_Ì’W’$¤Å¸wù.Tð÷ªªŠ»îº ÕjËËËûÖÛ(â,Þa�ÝvwwÑét ( >þñ�Ãó<_�Ä“vþ''')Ó,%“É[ŠÐù ¶é0??]׉Dö异€••¤Ói_@>*l”eâ”Ëeÿ=�Édü®[»á<½råÊs¯¼òÊJ`Í×.#Ólmóº6~ÅÖsØý+¬°Â +¬$áw~ƒ`ŽR:4šÂˆ_|F©TB³Ùô�á­vAƒ»ÞìyÊå2¢Ñ(r¹òù<�Z­Ö>" “É$ …Êå2\×E"‘Pùq2<²q'öšZ­&''÷ÍýóÇÈëX \·Û94ê뉉 Üu×]¾Õ±eYC�!¤Ê²ŒÙÙYôz=är9”J%LOO£Ýn£Ùlbàà„t:=D···155¼#iµZÎÖÖÖcòÁƒ²a &‡»oyË[œ˜˜øÀä䤓Édö �yí®ï¾ûnœ;wÎ?ìg‚]6&ÆlY+• ¹zõê‹‹‹‹ 4ÞsÏ=³™LÆpûÄÄDz0öEù‘§ƒº£ »¼ƒ#Œwß}7Òé4.^¼ˆõõõ!Kå i!„L& EÓ4 ^Wv‹D"øÈG>‚ .à3Ÿù̾nÇ­²8Ø}ÌmŽëonn"‹ùdªÕ*AÀìììPçβ,ÌÎÎ"‘H ‹!��Ž"þÚg¿£Ûí‚Ï ½;Ƌ/¾ˆv»í¿ÿƒd�3d2˜¦9¤ùèv»ØÝÝŸ{õÕWo`x¼Š‘Q$¤Ï=¶ÏÝ‚.y!ù+¬°Â +¬ ¢Ñ(æææ`Y ÃÙj7ø,†N§34Âr@åçýA€eY�$ ŽãÀ4MD£QŒ��#›Í¢^¯£ÓéŒÍŠÇãH¥Rh·Û¨T*Ð4 ’ž`­¬¬àøñãC‚xöØ~¿]×ù|ÕjÕ'<,®ßïßr×ZÓ4hšQašæ�‚RŠ7½éM ”BUÕ!r–Ïç}€Ön·Q«ÕüǨª Ïópýúu,,,ø]„z½þÊÒÒÒ"öÏÅ[ÜÿyÑ>ÆFÐÙÙÙ|.—ûÍcÇŽ …BÁá-WGePð;íìÚ=zÕj•J…¤R)ÊË<a¯³Óéøš£íímƒ;®þÙ³g__üNrÇw¼izzz>•J‘H$2Á�ƒÑ`�$O!h4>ˆfÄš¹•år9D£Q lnnî#—üãA°<Ïs¸Á1C~¤É0 |ò“ŸôÃ*‰vww÷­�à×ü¿Ìy‹�z]»v ²,�t’cÌö¹Ùl"¨×a×QQض=D$غbéãì=Ôï÷‘Ïç¡ë: …‚¿öùNοøE|þóŸÇöö64M¹ v†2™ ÀaC#xÕjW®\yáâÅ‹78Òêõ:jµÚ>Ñ8'|'c~i³Ù„çyÄuÝ!‡œ[ØÂ¢P(ø£¬CÁ’’ãñ8r¹ÆÆÆP.—¡ilÛöI#"±X ©T ­V ívÛ'Süï¶m£V«A’$Äãq__*•†\£ÇÁýÑá=ïyJ¥:äïþG"ˆ¢ˆÝÝÝ!Ë×à9j6›xòÉ'Ýnwè<ò„‡RŠT*5$Æv]ÑhÔ?·ét¹\ãããÐu�Nívº®CUU4›M¦xqccc%°+ì�^ ‚àÈ²ì‰¢è ‚@çFè÷ûÔu]*9|øpüðáÃÿfbbBÈd2û„æAR9ª«¥ë:Z­ÖÖÖ¶¯^½º˜Íf�Ž��OFœþ5f„e0¢CÇÆÆîh·Û_ÅÍ™~¿[ãº.u]çÎ�;{îܹˆssscÅb‘¨ªJr¹Üûr¹œ0 $O˜dYF§ÓñõARÝív±¸¸ˆt:�ÕÕU¿;$ÜuÛév»&�u·F½WÇA£Ñ"¸ªª¢Óé u¹Ÿó‚®]ƒ5AE!Ìù+X<é÷û ”úcmãããC¤ƒ×.1÷¶ ™ ’x6GʺáËó<$è%`ÇA³ÙÄÃ?Œ_ø…_À}÷݇D"^°/˲Ÿê‹a–Ä,‹¡Ó錴„å桇Â;ßùN\½zív¯½öz½Þ¨@=ضíÏÌ›¦ ]×Ñl6ÑjµP«ÕŒ��� †5;‹efffŽD"‘O¥R”Y3Â¥ëz½×ë}-�N™ššº{llÌM&“¾Ð<Œ72+†]S]×Q­Ví§Ÿ~zmeeåÜðm Ž 'Ožüh¡Pp™S´lìOUÕl,ˆ±�áñ1ÞÉÈ‘\]]5VWWEì…åýçÁýÂ;ßùÎ{s¹\$�Ç¢Ñè‘X,æ± Ë 3–çyèõzXZZòÇ´xÝŸ1¾gYÐD"QL$„­sÖiã5<™aBôt:�Z­Æ[¥×ëéý~ßÙÜÜ|qxŽÇãQEQ~Êó¼˜ã8ˆD"û>û÷Æ�˜››C»Ý&ªªRž<Žº±(Má�TU…®ëûÆÙ¿Åb�=öØÈ@J~íçóù}ä£R©.\xáÚµk«“›(ðç(øu0ë#$a…VXa…õƒ& ÁqÏóÐh4ðWõWþe6›…eY~¾Ɔa Óé�r¹üôööv³·§Øu°72óR&“yyzz:5??ÿ±XLE1Â^Û0 w{{Û[]]}´Ûí:ãããÏŸ9sæÁ±±±H*•‚ Ë,˜,‘H`bb…B;;;Ðuý~h4+�"�ûD¤R© “É`~~~(�šíÄ:Žƒ\.]×±¶¶†Ûn» ŸûÜçpòäIçŸàl¤'ŸÏ£×ëÁ¶mÿûAám°ó$ý~¯¾ú*"‘î¼óNBð–·¼[[[¸xñ"Úí¶ß%`cWý~ß¿e2 †MÓb‡þ±ÍÍMìîî>V¯×Ñï÷­ñññŸ™ŸŸÏd2r4uX‡×€�—^zé+Š¢H¢(B%Ègç<ŸÏãïxÇÁO<�ííí}Y"|ø#?jÆ>GصcvӣΠ©”$É'•J¥òå/ùéA–O�#ÆàÔð#V£GH< +¬°Â ëï*aÀ ÈG0~xš®ëþØR¯×s9°Ùã@"sŸ!�FÃl45$2àÈ^xá…+çÎ�{maa!y÷ÝwÿD.—›L¥R”× °0³V«åw6º®ûöú2™Ì�%˜öÎ,c™™×¢ÃäxR�Ç}Áo bÇ1¦0 Ãÿ=›››¨T*xå•W�J¥pç�w¢X,â}ï{t]ÇåË—±»»‹Z­6DBØ¿ý~©T ¹\ÎÃÊÊÊ\&“¡ƒ Ã!'*>Ž��ñ#p¥[ó]Ó4™@ë‹_üâWq°*Ódww÷¹ñññûb±X‚u ØyâU%mÛ6/Hw¸çb€“uAŽtð]ip“+•Ê…\.w*�ŠŒˆ²ë)IÒÐ5ãÁ5{­ìõv:ܸqã™ÙÙÙÓQfJ ( &''ñ�|Ÿýìg‘L&Ñn·G^æöT©Tž)—Ë7çËÂ~—2°×#ŠbïõÞ܃¥”º¬»,ž¸°ãaëV�gÙì³�}.ÜvÛmàw‚çϲ,èºîwKt]ÇÎÎNýÏþìϾ1ø¼`Dƒ' æˆu4ªóqà©?êà +¬°Â ëïéõzûªøÙîàØ ¿¬i$I¢™L挦i‰áQ™ ÷~p—š�!òÁpŽçyâ�7Œ7nü·{î¹gr~~þ½Åb1“L& oˈH»ÝF6›Åüü<,ËÂææ&LÓĵk×�J¥†ÒÞƒ%”RÔj5äóù!�G0ôŽ`<9;yò¤ºÇÀsÿbwTF#.©T Ífs_·E’$ôz=<þøãˆF£(‹˜™™Á™3güç¸rå VVV†´(ün³ã8h·Û8(ñž»Î,£��³�Î <³ÝëF£AŸ{î¹ÎÆÆÆ_c8{Á GŸ��†›H$ (Êкc£Xƒ`Æ·®¯¯?Ê­ žˆ8Nid„'"2yqqñ¢(ŠïUU5ÃÛ/ó£`A²ÅÎ's…ët:˜œœ¤þð‡ïøÒ—¾”L&“¾»—ªª¸ï¾ûð…/|Á'…„èºîŸïÁ{‰v:�J¥Ry©ÑhTÒ'BÄ‘ÓI%1õ¿D˜! ”ì-9x¥îªkkO úk:!!„ÐQY"üùh¨èAf l]6›M|õ«_°g˜0êq¼¶©Õj¡X,¢X,"•Jù®pAÝ ¿^t]‡¢((•JÐ4 •J¥öõ¯ýIÜìnD>FÙFDû�ÁsÌð`¯“'A£Èo•ÚjµÈææ&=þü.\xÉÚÛ6çg÷ùù}¶ØuõdY~)™L¾GQ/øû8ðïµZ­«žç×?†óz7ÞŽ•v»Ý£Ñèí‘H$)Š"µîyÁ?Ïl}mnn¶>÷¹Ï=_©TN Êq4Å<€‹/¢\.ûçªÝn“J¥rÃ4͆®ëµV«U»~ýú3årù¢išmAN‹Ñ±»îU³'~AŽO|\�Ôûˆ „€Èà2"½I”£ï%Ñ©÷y$U$¡ïØšÅå¿ ‰Àó<˜¦IêõúN6›õ²Ùì3à-”yÂÅk¼xÂÉÖ0#š¦Áó<Äb1_OuІ…eYþ† ©Ô4 åryçË_þò¶m÷F¬›×ë|x!ñ+¬°Â +¬¿§dvvöC’$ <˜‚¾ëÁÈG»ÝöµË]S×õ5ŒÞù†‚ñ$ľÅc†¼ü766Z×®][ê÷û)Y–S”Ò‘"z–—qýúuX–5r¤*¼Øï÷Gëq°ƒÁÎG­V³×××—VVV^ŒF£ ̆˜�;þñº®£ÑhÐõõõÞK/½ôèÅ‹7VVV–wwwY– &Äód„]Ÿ��¬­­aii år'NœÀÄÄn»í6LNNú#4µZ žç ¥–GËøfË�“]Ët]G½^Çòòò�o}ë[O-//7;ØAápйÈàõz=¯P(d"‘Èô(2x­IMÓ.öz=à ØÁÅ ëQ0TÑ\¿ß÷šÍæ+¢(Þ�eù-„2 l³ëÆ®Y«ÕB¹\F£ÑXÏf³§K¥’È´2²,ãío;´Ñ` IDAT,ËÂÅ‹ýó¥i]__ÿöòòòÕZ­¶Q«ÕÖ›Íæªã8š e n¿CÍŸú¤(Çœâ@à;×2è’½ü&!Ä¡rZ³cSF?šQ[ˆÓgD¼Óé©×ë—EQŒ9räíÓÓÓ„¿c×xÔy?è|°q»D"�d2‰jµ:ärÔʘ¦é·N§ƒb±Ó4Q.—›�=öØ7\×å5]Üì|ð™5üº vKCÒVXa…VXßH2™Ü¶,ë²,Ó F�a,¯Ùlú»í®ë¢Z­"�£ßïGšÍæNH»¯“�ýAaýnA ÿ溮³½½}msssQŶã8Ç!4èÈcÛ6677ýŒ�Q�ô²1)^À^kÁw0*•аººúÂsÏ=÷âúúúZ­VÓ766¶A¨hšV°,K5 ƒhšFZ­©V«ØÞÞþö�7VΟ?ÿ-Ó4-}Û¶{�Ng1‰L†‘èt:Ðu}h´jTgd°ÃŽÅÅE¬­­¡ßï#�ãÎ;ïÄÜÜœ¯‹9èúìÓ†ð]��ÖøtéÒù'Ÿ|òUÃ0øn/æ»Áà8��ÛD"ñ¦h4z(¨5aߌïD:�Îõë'¸~� Ò>½€mÛîÖÖVGÅŠëºÔqœÉ~¿Oy²È´ÍfétÉd’¹ªE™îC–eüè�þ(r¹¾þõ¯û#Gº® Ï-//¯r„Û`ɉ…d´tú¥Höçs€‚YŽ"Ÿ("™š†œž„œš@"^@:š‚¶ë€Þœ>"®'& /6¡F¢(æ"íèÀrdY¶æææî:qâD¤X,¢P( �NÃ0 ÿZókýu2~ i,Ë‚ªªPU¥R ”R”ËeX–5D:4MóÏÓ%íîîbww·òè£�~ÓuÝG> ŒÖ|8!ù+¬°Â +¬X%½øâ‹¯øÅûï¿ÿ£¹\n!‹e³ÿ{ˆ¶mCE?Ùš‰¶ãñ¸Ü‰D^UÕqÃ04 ë;< g7Œ*^ˆN°ß^µ�=1q‘F£Ñâ‰'Zοë]ïúÐÌÌÌX.—‹²Ì ¶ËFDøö5 £ë÷û¾µm�xð£Gù ÍfÓÜÜܬŸ?þé 0Ö4MöÙg=BÈAÙCÔ¥” ž—ß­÷wéûý>¶··¯ ‚0A¡ÌvøÕW_ÅÂÂÒé4Òé´ŸËÁ:PìuÕëu´Z-?€ñðáÃxöÙg‘J¥Ff>‰þ,[…O)g#W[[[ݯ|å+�Y–Ôzð$„7"àݯ(·&aiié ™LæíªªŠÁÐ:A ( M¥R “³¯ ›ðšÂýK0Ú)‰\¸páòÅ‹W¦§§¿yúôéžL&=¶f$IÂ�wÞ9äôåº.E¡ìÜ˲Œ©©)D"<úè£þc Ã@¥Ryåúõë+òåÌÉ\4}ø× ЧA÷º‚  M#/ÂŽåѧðö–ˆÀ…I�$Ç1áô`i;0ºU˜¶ŽC"[Mé„I]ÇÕH¤ï º®ßyìØ1äóy?Ë&�"—Ëù!–|çs”Å2¯÷iµZ~‡Œ­Ÿt:�D"ÁH¦§§�LJ:(ªªÂ4M6ªhBœ�å0¿~ wOƒnW!ù+¬°Â +¬%PëëëW4M[ìv»×kµÚBÈm©Tа]_&6e �çƒð2ê8ÎT»Ý~ûÔüNup$ÆÅëŒË¾7*ñØ[YY¹¢iÚ Û¶ï€}looïÓt0à-Ë2²Ù,ÞùÎwB–e´Ûmþ=h=«T*ôêÕ«g/\¸pauuõµ@¸¢(¥¶çy¶çy6¥Ô¦”òÝ!lõئi®Ù¶}CQ”iBHœÒ4 õz}Ÿo°3bÛ6žþù!]ßù¸L!•Jù€“ï"1íëT«Uòꫯ~û…^¸Ôív ìÏi8È.58.µ�$d2™÷F£Q18†ÅŽÅu]ÑqÍ0ŒÝàµÇ·_u¿ŸªªÒüüü;æççéÔÔ&''1111ªã�·)Š‚l6‹÷¿ÿýøêW¿Šn· Çq`š&jµZqqñ9×uMŽ˜™R|N�åO|‚ôf€ŠÇX~HM¢'EA©ç_‹›lœì0¥°‰¨i(‰Ô…ÙëÔ(ˆÞ££kÂ6ªÍf³‰7½éMdbbÂ'®ÑhÑh“““Èår°m­Vk_È"¯YbÝÏz½îòFìçz½dYÆéÓ§Ñëõöå©°÷•aÙJ¥r©ßï�œÇ®Âó°Â +¬°ÂúH@†q4Msvvvôr¹¬g³Ùz.—;Å@ûì³�W«ÕZ¯×ëˆGPlÔÀð7žtìë[–Õ®V«/K’”ô<¯A™ ”R–—áy:�jµ ÃðC ƒ$¤V«ùy(ü9�$ ±X gΜÁ™3gàyêõú�ë¿ëßh4P¯×…‹/¾Òh4ôÈG0(ާåXäw¸R©ÔkÑhô¼kþý~š¦Ïó„v»}�¥îäƒà�;#ù÷9ŽC¦¦¦Nf³ÙKgçwùùNë„D"üüÏÿ<}ôQìîîúNYÍfÓ¸|ùò_™¦Ùå×¢flâ®ÿY•ŸØ H¨i¤‹‡aF’p‡C1$ûÈÍûüÿSÀ#„XqQAÏjÀ£.(1)«J´}h¦hLMM‘L&ãw?TUE±X„¢(¨V«þµÖ4mßø%CÓ4 »»» „ xnØzd]Ÿíím¼õ­oõí¥GeÆt»]²±±ñêÀ^9øÞaï7$a…VXa…õ³‚c,ì¼wîܹř™™F<Ï "“eÑh…B­V ±XLÍçó‡Êåò.¶§ƒ�¸TgÜÚ¿Ÿ“ìg öÛ°úÚ‘r¹Üïv»¿wûí·ßK)½¸™j=ôÄ”bgg–eaee¶mû÷' H’„ÍÍM†�f³ Y–±¼¼¬_¿~ý†ñzØïôÅ[³ ÚÃÚd±ñ"{uuõÏ !Ñh4úÔüüüGUU�2ˆ`½^G¥R�ã8˜žžF6›E2™ôÁ$/¤gcMìúe³Y@>ŸGÐÊ•·Äå‚ÙùîqÀ±;<Žˆó$Aணk†Ûëõ\UU^‡´±±A˜ˆ~aaa៵Z-Úívÿ¯^¯ç@l[âû¢Ñ(Ö××ñ+¿ò+xüñDZµµåhšfŸ?þQs/ œ'§]µpÛ‚(F~š¤äq5�DñLA¥ž¿ØÉ¨7ÂÐ�„нA!9�v+áѽ7¨ÞOÍæóZ"‘°UUõ#c4�N#•JakkËïr±sÜl6‡:œý~Ýnš¦ù¡ž| %#¬SÈÞ+�<òΜ9sà‡Žã8Î ˜ÄÅ~É[Ùì†äã Vzáý"€(ÝëpK7Y9((µbRÏîék�…ç5¬°Â +¬ â×ó �O«ŽD"H$h6›h·Ûpç] õ-ìuWÒxoTÐ!Øïr44îÕét<Ó4MÖºd1€[­Vñ§ú§þ®,¿ûOA©TB·ÛE$A¥RêõúSƒß7ªãÜmBIàìwnâõ¤Á¹s)¥®an»ÝþÓd2ù³Š¢PÞÁˆ]×uqîÜ9âyÞ+óóódllìŽl6Kƒ£U \Z–…—_~X^^ö³‚�e·Áùd€‘w¼ vp‚ ï×ÖàU*•õB¡°Üív�t:†UU‘L&ýl•Á1¨Édº®ªÕj�­×ëÿ=@ò†Dî· ¸”é±µµ…õõußÝ.ŸÏƒe›X–5dzÀk?Ø{È4Í¡îI<ÇØØØÐûŠ­%]×i¹\^®T*Ž �²i¾•®'¬‘Äãý?Éžüïù4Ndœ€(€ç[;ßls“$�£„ü¡Â¿P³ÇM95¿f·¯iƒ? ÁŽmXa…VXaý­•„›»ŒNÔÓz½Nt]&�N¿�ùàn0KÎd2ØÜÜÄøø8i$�N¿9�NßÞh4>W¯×/ € @¸9ŽÅƒU2x�ùåjÄÿŒ·»»ëe2f]’$$‰�'¼ƒùàµN§³¦ë:ÙüÎ6»½žh–¼BÅç ÐÚív»+Ýn·’H$fƒZ v-"‘r¹jµšÛjµ^;Æ’©Çis˓ɠÕ/ŸÞív×MÓ4ps­�}¼þÜ>Et#‘Ș$I‡ØõbÎ^<øg׌×ò¸¿Ñhˆ@@= ÷øÿÙ[Ÿðñ <À¿ËÏÙ##®A.·€ÍÍQÆN™­�v6›ÍÔ3™ šÍ&4Mó‚qÚív±»»‹ÕÕU_¤Î4_̤ ÝnûÝNžøòͺ®édfgg}BË¿—Ä=þük88ÓåõF3à TêðûePòyJé‡Áž#ÈžC3A%ð�Wêy€gï€bð3ÿ‘â'R }º³üÈà`3‡°Â +¬°Âú—ø3ôÇßóøºÕè^X<ùXø@À „àG ì­!¢’…š�‡’žƒš=„Xv‘ô$Ôä4¤ø$d5AŒÂëiuÙjK‚àÁHæíµ®=5x�7ð¹VXa…VXßQIPäõ H÷_zé¥ íD"‘c;ÓlG8ØI$ ”Ž�.¥ôç,Ëú/�NçFël�›`ô˜Ö¨�ôQÖ®dii©355µ¨(Ê}AÐÌÀ•õÑívÑét`š&i·ÛÙàyÁðîmÿâñzjT ¼>xžG,ËúóX,ö“üH-TU¥étú‡–––þ|ff¦�ÇS>îw=ø\Y–Q*•`šæ¾ñE>ï¤T*ÁqT*ÜsÏ=Á?‡ü¨WµZ]]]]mâfí È�ö#}ø"¢�@ä%ù”R }€XÔ5{ÚÚWÿ³SŸ<üÓ2�÷$€Œˆ R ‘ä4¢™qP¸{ÝôàrŸ¬¢ˆÑäXjv Zù"¼^”ºƒ©>áߤæ~RÔ·Ïý¦gW –°Â +¬°¾gd!ð¸„Z.—ÿS6›ý·ªªz|7�_^Œ¾¼¼ H§Ó°, ãããlgTèv»ÿ´Óéükìï‚0À.`¿xû ûÔà8O`á›ßüæ¿ûÝïvAøaJ)õ<ÏX<a"k^÷Ñh4�F‘ÍfqôèÑ™+W®¼H|I°ÓqP½‘?Ü£ÔþN¾¦if"‘€¢(7E¥c€T*¥È²í�×}t:ìììè+++õd«�[;½ñ �J¥î�F£BÐ*™w[â�‘Á±X Ñh”]Cip2€åQJÿqPëS¯×‘N§½x‰åݱZ£ëßúÖ·žÅp×ÐÆhíÐ`wÿA™é'@è Åí™�(¹É © �]€.)úíÔüO}ÎXùó%ç;ßý½ªôሠôw@Émlõˆrñ±Óeí/Hï÷ûc¤ÕjñxœuNH·Û�Ú¶½Šƒõä °z� ’âc=@X^^¾‘Íf‹¢(Æ(¥ê¨Q#¶Ûo4MC³ÙD±X„ªªìu©»»»[ý~¿Á�Ì x56r� þ `D^ç{¤Ýnoäóù�D"rp ‹�B–hmYV÷òåË×§¦¦Æ%IŠòà�‘.>÷�å~°ÄëZ­ÆÈ"†Ç¯F‰†ßH÷ƒ¿6€˜ÏçH¥RG˜öƒÁ‚ øbt¾A)ê¾A4 ^d(ªªRUUi,£Ñh”Æb1šH$¨ëº4™Lú#GŠ¢øç2•JùÂëƒvÿu]ÇÙ³g_œ~¤È'l5wržÒÏ�Š�˜™´:â  Rh”wÚˆUDØèÖàq^OƒÙ¸†ÁL-¢MQ ŽçyÔ²,º»»‹\.G-ËB¿ßG2™ôµ7|„銎9‚……‚à‡Wf2d2ÿ}Έ+ ±t=H³Ù4nܸ±}îܹobÿ_0xÐà¥æŠ«ùSï&‚ø_AÈ'@Éi 2PÕg[7_½¸GJÈ!÷C ÿTÊ�L©™£›Rõvéë|†ü½,5wò€? RHJÉé7Céž±�ON¹µE¸eE†?†äHcpº•½Ë@!¢ò�[ÿ¯ÔÑ=ìw# +¬°Â +¬ïº¤\.'»®KlÛ{½ñ<<ù ¬®®vææænd³ÙÛ™;ßa;Š¢øàĶm‡ºZ­b±r¹œ¬ëz£3"€ƒsBpó÷³:fëIˆO=õÔ=z´pèСO …í¸37(–âlš&b±æçç!I,Ëb{zèС÷ììì¸õzý2GÜx²ÆK‰ñÈÆ­Ã[õ‚{MGÓ´Ï%‰_–eÙEÑïØ0�.2™ÌT2™œ¶,K?}ú´«ª*–——Ñëõ|€Îw@ø”ïN§ãgƒìÅY u{FÝÞè¸_AEÂ�’ñ7I’ðàƒâío;>ýéO£ÓéøÝˆ ;O†oõ5ÿ/»â¶˜v!Øñz A‘eñxœ]³‘¹4Œœ»ºŠ(ï}A›·ÂM“ÝÀrô œ`�rgšžçæý’Ù{uàº}]CR$Qêõz®aB<÷E!’$уÎ={�‰D<ð"‘LÓÄòò²¿Ù|¼¦i”¥ªW*•šã8/ïîîj�F£ƒáàÍ ~ÊàŠÑš˜¸ó$ˆøŸ¼Òˆ¦ Dd"q" JP·?Ý T%ÿ Dü¨š?ö{rbüwº›Ov¿Ë÷ãßåú@ ï­Éb…ÈÞuñ×öFôöÖ [/ü[ñæú¡ÄC4;§gÀn-î}¼aZÍŸxÈØ¬üÅàýjsŸÑa'$¬°Â +¬ïž€LMMý¥ÔuÝnWð<ï+•Êy×uëØ D×ÖÖ …B±XlhW˜¶caeñxÜßMe;ÚÕj�N‘HäÞD"ÑÒuýYœ�=Êçõº ‡^bò­ï"Dø<J7 –„¸Z€˜ÈBQ’ä(< �àRÀqÐïkpŒzÚ6ú® P ’£À¯‹râT|öÝŸè®}'ðYòݾ7à•>ü�wà^º§×@$=)ªÀs�A×kà F` 0°æˆÀ\Ö$ñÂ,úÚ ¼~D�$ä@”ÇAmö& IHXaý=«ÔÑŸV‡)p E€ˆ{c¼ÿ�½7�²ä:ëß�íE¼xk¾Ük¯Êª’¬Å’ð&Œ��7l ¶å¥=bÜ=Ó†Ææ à 4뙦™Þ†º9Óô �{è4Ãflƒ Ç`·,Ù²äEK¡²,UIU•KeVîùö÷"â~óGÄ�w#ò¥$¬&ãœ'eU½|/âÆ�{¿ß÷ý¾ßOÊ€ ~B;Ëí¥¿89<þvH£ÑMÓ” 'êõzï÷}ÿ�KKKOÑ›¦ù“ÕjRJ·Óé ßïcœ$¯!333)…&¯ ´¼¼ŒF£!�Æwww_³µµõ¶Z­^¯×ÛÐÓƒšR9WÀ !*zÐ{ùòå/ÏÍÍ-”Ëeö<¥R)¥‰©Ì®Îõ/ ¨T*0MS6�wôz½Ín·{Yéݼ÷¸†ùo„èAS ÚÙÙéÌÎÎ>³··7U©TP«Õ û�ä½N0ü‰Ÿø‰òÊÊÊÃ¥Ré¯n½õÖ7-,,8ºT±º�Jzײ,xž‡r¹lã`•.àùû?Æ‘Š„mÛ³DôÇqR¥haÊ\ñ¾ûîÃý÷ߟ1¶ËËy÷LLÓDc¶ƒƒA¦2NŠ×qLOOÙÞÞ~ßöööïõûý6ÆúŒ°T—?{°ò¨Mq§Òu<*}Þ`p<“ˆ )(qS;á,C@˜�2D¯×2 D§Ó1Ž?.Pxúé§qòäI2M“õëÔûgz½>ÿùϧ㒗'Ö½cƒ�š£:èÐ_ýÜÏC!™µ¨|ü5oŒßep9)Ë® \; YtÁ,±Dˆ� HŠ2 Ó‡å–P¨Îc°} íÎ2XŒ&Þm˜ŽçÍ}Ç»×ØÆø>­M]9süÝ rÀ aUà”'bIçtQòŒ�6Ç”š%ÅNÿ©œ3@–…Bu�µ‡Á,AÂz…S9˜öw’ IDATuÇ`÷ë�`¼Bßáqx¼Ð¹+(2PPLž^$R]w˜¸×|æcƒ¿…s14Üðûz-åQkÀ ƒÿŒßøò µ²3Øø2¿ÈÖ‹2Àï!‰_Dlnì‘Á±äÄ퇒„- „åïVN¿ó¿“QðÕÖÕ?í¿×ÈÃãÅs†aÜë8÷z½TŽÓ¶mÓ÷ýYfþ®ÉÉIÃóräÈ÷Öjµºçy©jW¾1[Ï–ëYð��²,ËoµZOb¿T.?G…&^/¤R0®r žçÝ^¯×�)ÙcE«Ê«Hå^dšæÑååå‹Åbqszzú”¢!)À¨_³ê•év»§®]»ö¥\`y�ëû¸kÖ6¾ïŸ›ššú—SSS†ïûéùëÊW:E.玲W'òMçãèVù£ßïC%Pc$„Àää$z½J¥Ò>ÑØ ‡C„aH“““v¹\~™išbww÷2²f’l•ŽJ2 ?¢Öñ²? iXIó¥YiEÎ'UÝОÒÍSÀ•H𦿗˜»ï-¡½ó ˆÇ Š®húý¨Z­F…B!’RÊ‹/ò‰'xrrõz=ßzâ@}·êR÷!oV™ÐöäÅ‹m·ÛŠn¥÷yt1^º:–Ž¿á¨öa2¾B ÿ S§ RF =-J¯YÖqöž`ú5¬‚Þ¤€D ÓdØVÔÛþG=~ÏÚ·ìáÖo6ô›JDvqV±½n4FÉœHæÙȼRŸ/¤I>Ç?nÝõ‹¢x`LÇ ÛË_ÀsW@�Ãã¹á—øWü€Ÿ"àbƇ|ˆ€�ðOˆèƒ½Ñ©ŸŸpʧì]Š@ýM›bVÎÜsàЯøA€^ÊÌ5<<<Ä?OèU ú ˆÞg:•)§râáÁîåà€xä[樞¹§X¨ßüÓþo}€ .À6Ç„ÌÑ’ºI±À¡ÐÿHÂx­S?7ŒÂð¢ Ú"z±­•‡Ç‹€¼ìe/»WÁJËss•J®ëÂ0  (—˨×ëÊ$•@U<}!D†š¥óÊó�üÒÒNœ8¡À ‹Eø¾??==ý&ÏóÞ^.—Ÿít:½¤%ßgñ\ dÜ{Œ1õ­­­/ŽÉþ�3P|¡`ä¹4ý�ÉÉÉÊÄÄÄù¾Ï |<—oFŽßo0ó`8¶gffŽ{ž'T�­ß3h&A&_»víR†md�Þó= ]·>Äôôô©z½þo�†Ð�ïôóU”+]KW°Rý*aRòJÿM½Oÿõ³ºŸ½^QeÆM}·ò·¨T*ÐÑ Òe› X,¢X,r±X<êy^°¾¾¾”§˜Å™Àa0Š–ƒÈ)g�k œ††ÚŠOih‡š„Ñ¢+eq„áÚ#èu6@BÀ1��mÊ–e™‘mÛ‘aÑÕ«W££G�ÊF£ÁÊÿ£\.§`CŸ3U;òŠiëëë[�?þøã9ðÑÕ^yõ«@T˜z¥°ÜÚpg|Ñ&*åc0¦Ž€!!™µ‡‚@æ”fñ%3à8pí:†� HÙ�@ßfº_¶–5¼ü¢   õ› ¿ÈÌ x“7CÊ^Ì׎æ�ÆJh€wœîˆ C� ½¤ …í•?Ã8zá!9<‚­Bý滜úÍÿ�€_p'S\f¶˜ˆM0M ”œèÍ$ÌrêçW�ÊéµÁîÓ½ýR ßÔùÔ õ›Àèe S:" €ñB"q1@¨x5„õÃNýÜeáM^[‹Ï)òw6îç|Š�÷PM»ÁLn±Œ‚_ƒQ¨Ât«°½2œB!^;£Qû-Çz—Uœ>m—Ž~n¸w¹‡ç•C9<�oì0kµZP¨`bss3­†´ÛmDQ”:$+e!6TãnÞU<ŸIשL…B`Û6 …<σïûT­VÑívÿ—F£q}cc#Z__ÿ·ý~¿-¥ �mzÎ÷‡Ð�½F€÷¹Lõã¹÷‡Ç_ €‹Å4Ó](Ðn·áyÖ××E�ô,{Þ'@—LUÒ®:øÐMÍTOA»ÝN¥?Ã0ÔåRQ,y8ÎV«UÌÎÎþJ§Óypww÷ÚâââCš¹,\àøäääÙb±!%f}X[[xq#}’Ø#Ç4Í©gŸ}¾ïƒˆ†!Z­šÍf¦BÄy³ÅJ¥‚ápˆãÇ�Ou»ÝÛÞÞ­Vë£×¯_ÿ€--(WÊHò`¼ë0å€ yž7oÛ6[–¥Tªà8Îóúf(¥2×u½Z­vúû¿ÿû Ÿþô§áû~šÝÖ?Ã0Œ$V«ÕºaNEqæ*Û€¯b�ý44­©©©7V«Õ\.—YUŸòô&ÝgBUÚôù¤yKðêêêgWWWo$c½ àaìç¦[³³³¯*•JœÌ_2 ƒºÝ.|ß?†!)~éÒ%”J%œïœ«žy÷Àðª´_δQ¨ÏÂ.OAÀ¤Œޤ7Ê€ Ï9 ž?†(l¡¿³Œ`g f˜ ¼Û²K’,üCÒ5íï„TÎÜsÀA\‰Ÿ·TCqâ(¤(! #1XªZrÉCÄòP9v‚ÎÚ7žE “<Ýbgþ³ßþ®ÞêƒÍøæ|Ó"4‡Çá1 ®ë¦2´/^L}N�:•‚†áp˜é%P`œ—J%Üzë­ØÝÝÅÓO?� ^T&[½�úý>¶¶¶°±±�;î¸#Íâ+5ª àº.|ß�ƒÁ+jµÚ+&''ß¾»»û`³ÙüÌööv˲¬°Z­þx­V;R(U‰QÚz½ÎÍfóû›Íæÿ>MÛ¶¶Z­²eYžªvè×´··—rþuð1® â8�¢(’õz]6›Íï-‹oLš—yww·5 v´ K>OEdàWÉ1¸†aˆÍÍM\¿~]¹ŸÃqÌÎ΢^¯£P(@y<¨,¶º ¨à›nºéŽ�}ìc)åHeúÓ`%§nV*•fëõº»±±ÑJ@�"!²FeùꇰmÛ*•J¿8===[*•Xï÷Pc­WÏTp«W¤¸ ‚�Ng°¼¼ü[[[;ïÊ®oP½ÕÕÕO¯®®êÕ0€Î�;wÌu]ϲ,\»v ¶mcvvåråržç¥A·Þü®ÒÔøè´¥ä<£S§N}H™þ¹®û{]D¦Lu%p¢“Ô:XçÂhÁ¢’é•Ä™�õ±Ôo&› 3¸»�í�cî‚M}¯à7nÜàjµŠz½ß÷Y/*@}êÔ)lll`ggBÔj5lnn×Ï`0@³Ùä+W®<ðÐC]�\×E¡P€ëºîææ&Çùg­VKAðÀ•+W¢ápø›Z–5DôC§2é=-i…ã8?»¶¶VTFy:`ºqãî¸ã|àÀ'>ñ <úè£cý�LÓD³Ù„mÛ P@T¿nU ²m¥R‰¼À§4bi¿Ð®I¿LOOÿ\½^ŸU óùž Ý�>bssók®ëÞlÛv z½^»×ë=zõêÕ§µ “w¦?H¤@0–——Óó¼÷†Q ‚µZ-JPÁq!R`«h‡êœôª‘ú» 099YP½TA(࡯Ók‡& PtJ܉L ˜Ñn&]+|çË4ý Ð\|A DÄ•¢Ùnµš\,¹\.K>ÔµMLLàèÑ£X]]ÅÞÞ^Z]RTÌÁ`�¡Ç©êÇ`0ÀÞÞž±²²òÀW¾ò•KØßt®«] Ç€�QÑ? ÀdfX¦³<�HÊ8lЂäq Qœdã¤�€tL”kç±µþ0˜$ Ì—›…é£Agq˜«N ¼(T�F¾/̱2œê âTšYï•!hŽ # ’ù·ì˜Êd«æŒÈKˆ  “«~Êà äð¨.¼[øç z…šUf±ûðbª•>×ô^Ë´`Ç0á£rä¥è4/a°¾Wâ˜,�ñŸ,§r$ f"`¨’|SRd N #YÌø©0`Ë(N�� '¡{�ž�ñÍŒ*äºs0ç\´VÂ`"&ña»zì?õ76ohIŒè Ê@eáÝ/ðœá6G8-{ÉÚy�—ÏÜóÂàWšW?Ñ}þä}€wÅžXœÂŸ9‹0”é/m5é™ëK@c9hœº —‚Œ0 â—�ÆKÿb°ùØJ.éwX9<¾yEQêÁ�¯r(r�O3cggW®\Áòò2†ÃáØ÷23Nž< !DZIP®Ê½^ívW®\¥~Q¥U‘ˆp©TŠúýþéN§×uY—ŸÕˆ¢vÙ¶Ù¶�n·«ë36´…pww7£|$¥ÌŒƒª(É^ß÷13™úµµ5977'£(zU½^G«ÕúŽápøkÍf³»¶¶ör IdµZ=V©Tìv»ýžçyÌŒÁ` Çù×;;;Ôétžõ�ææÅXÞ],ƒA¿;ô<7ò}_‹EéyžTŽð333<;;‹¥¥%ôz½|t»]ììì(cKR÷ €RýZßÞÞ¿øÅ/~#Ÿ�çr7×·…Êéw8 ܪ®Å-6À‰E¶(RzÐxGR5¿GÿÊa-ŽŒ&€5ÓÈö^‚nä*“/ J­T“;lææ‹fG�"O°BÀéc¦òÇõÁrƒY ÉËѪŸy‘�à äï÷1àUóÉ,øðgoIÌQ:ÏÆ9 �àq!ˆP¬œK‰áÆRR E†x‰Úψ ‘Õ9öj–R`Úð&OCÀKùœú¸¤˜a9Ux�´Wÿ*ññ4ª–7ùË}à'ûJ€ý4`®.¼û@?ÍàÄt£}6×ÎWpƒn"0Ø´~²ræ]?Å}¬ùÌǯ'Ý~À•SßcÀp|":ÆTgj9ªs œ›ÑJÁ¹dÒêßB.bêÔmXýúC �0MËküÌÐp‚£„û=J®~K¯›‡Ç·(ÙÛÛC±Xܘë?w»Ý}žº2N³ÙÄŸþ韦Ù_]þT½§R©¤ô+eò–TP,Q*•P«ÕÐétpýúõô{o¹å¨&i½WD‘R·ÔùæZ={«ÿ9<Ôynmm¥½)º©Ÿ Æõ*ÈôôtZ¹Ñ3àaÂ0ŒÔ[¤R©ð`0øp½^§ééé«[[[ÑÚÚÚ/%pÁìììOW*•#…BÁ™žžfunQAü3Ïó¢ÝÝÝÅB¡pÒó<×t®Ÿç“O>‰ŸÿùŸO3Öù{a¦¦¦RÐÑívÑív3ýúøèÀ«V«ÙwÞyç?ØÞÞî,..~BJyµT*ýàÄÄÄ×uKjÌ’óÇp8D¬Ìu¥«ü½ h·Û´²²rßõë×W4°j #Â~×ñ!²ÎãùêR¾ ¢2·&s}}ýO¶¶¶î˜ššz‡.I¬¿ôj :]jðU ϲ½Â•)¡¿ÔÜ‚Ò4 £‘� k³öwDy?J5cSÜIïÕLñf¬ÜMô÷Ç�<ϓɋ]×åb±(ççç¹Z­rR­d|lnn¢Ýn£ßïóåË—ÿRJ)-Ë’¢½½=^___ÏÝÝ`ð� a: šfÉ€0@¶Vû˜nîNš|ŠÓHSwR㇑BX®X`š.,ËÇ`°…˜ŸFGø¹ya$ñ-ša¾ÇèiíB2Xr|Û1êÿÈ„M4êÐç ØÕBEqãÑ- ƒØ]žâgµlzÓ¯ Z×–’ă…ý¬‡Çáñkñü`ÃAqnÄI¢…(“  ¤‰môlsº¦Åëi¼^úÕóØÙ[C€ a& 8f$Qœ�§‘ž¢%ÆŸ*Ò@Û›= S¸à´ò¡Dh³Î ÿ“4E‡äc å#®c°¾¯]d¼¡0óŠ»úk?¦= €¨tò{ Âpþ#@ßpyÂÂp@†=:X†�Q?VŠˆÿ®Æ¿'2ÿiåÌ;~dÐ^ÿsÛŸývpLuŽÅÀ…! nã8‚pô=j õÒ�kž]{Ò¡¯4 oâ:›Wcê‰ï6¼#¿¶.ÝÈÝûCrx|㈘õ@VWN"",,, ÝnC—:ÍýºQœz�þºýöÛqï½÷âÑGÅ×¾ö5,--¥êXº–’UFx�<òÐív155•šä©Oy¥ž¼¬ëææ&&''Sº–˜+ 3£ÛíØ bêõ:<ÏKÇA§ßT*,..⦛nJAV†ìû>Ap¬V«annîÿj6›}+ÅbñDRÑ`5¦Ú5°çy¢X,žh6›¬€‘^¡Ê)Õ?aÛv$ë/Ïó011‘þ¹^¯ciiIe·aYÖXÓ½D “““¥éééÒÌÌÌ-//S¥R‰ fÎS‘°X]]ÅÔÔ\×M?W—ùM(=buuõókkkKc*�ôê $Dêd¬¢@,Q¡Pú¾¿OÊ8ï�nÛ6Êå2�nܸ�N§“z¥,ªüÐ;ç:ýÈa`Ô�!ÒDÓXóýÕŵÀ1]Î)#›ª"ô˜gMp‹SØS™A!P,ºQ¡P�®ëJÏó¤ëº‘ïûÑñãÇ¥ïû¼²²)%«{Ôét°±±AkkkÛÍfsåK_úÒcP�âYð7Ž3Ì›tfÙ D`Ä$`™¤ ¤1²ÊŠŽú²A6Ò÷§²Ä:ü4l�é€{A<@2ª –üG£oÅ�´zæ$þ=À÷(•2̘ÈÕ häX™ÈòŽ©éÉÙ? aŽn³0¬âëDu¡5Ø{æ7À2/@qxü=?ª ï¹Àk9éP³'f`�«)Q–jмa¬þÊÍRA¨œ¼á`$È,gh©LA£@^­£¤¼PÈqå#>º¢Ç¾ÊHï<^‚â7øµ—`¸µ ‡€°Š†0ß à’¾n”N¼uJÎïôV]dÀ)Q¨LÁ0m8¾‡P aÀCÈa ƒÞ<ÜEkk=®Å޳'ñ ÇŸ$UÈ\²†!`˜ØN ¡äì¸fF[«•Ž“aÌQãŠõ#h¯}$,À°',·ôư…�b/k”ù’Ããðx>211�n·;Ö4PWê û· ÃȼG÷jÐýÖ××ñÛ¿ýÛxõ«_�w½ë]0 ÿøÇ±¶¶–7ʵ{8fª"ÍfËË˸óÎ;Ó€PÆ¥”èv»xòÉ'S@¥‚«f³‰3gΤªE*ÈVužõz�F�N'å¿ë Lß÷Q*•Ò€sœzS½^Ç•+WpöìÙ}@,¡çDµZÍêõz'”ð8³;UõQ�ñÎÎN  ÆIÔê/E›ÓïG¨T*XZZJjÏóÒþ¥ˆ¦H¾ò£¼^,Ë‚ïû²T*amm-ýûqDÉÓîíí¥¼>úý>öööÖŸ|òÉûƒAû]´‡ÈòMó?ëwPoM^‘K™T±‚<°÷²moxÃàº.VWWñÀdú£ò•Ãg—[�gVÚsñ†f R¬CÚ%pŽbg¹C†@š!dÕ�°Oª@ ÐàW��9  C�°M×u{®ëF…B!,•Jщ'$ñõë×%džÃ!Z­nܸ1xä‘Gî¿~ýún§Óéîòcä@H0t?â’ Kâ …Uš^cúTIsƒEâþÍš¯ŠúŠ`Ä”  ˆÝ˜;IçÓßvG‰'B1©2è“Âð+`¼—  Ìü™›a˜&d¦s‰Å>nK&äË5у®d¾'Ox?v.}<¡gH�å¿Ý©ß¼7Ü[ü aúÙ~(lŸ Û7‰¨ÏR½Õ�¿ŸÇë”À€p]ŠI•W¯¸©ùEÙçƒd½ñ‚ &l»‘©-¨dã�é‚4ŽÒŸSuÁ¤ºÂcxZ¤õE¥Ÿ¡�Ò…U„Y¨b¸·ª*‡¯PRÁxaúåEa~„WÇ% lõé°{2ÙŸûƒ´X‚à„ �7�Fí(Ú«O¡ßÞõ«9H”¼ –Ãp@¦�êDCµµåŸëüZ �åûÒ;§= Ûu1èuã�ö[|#ªYF\ä|/€¼ùÍoÆG>ò‘Là˜¯¨ ´Óéd¨Izæ7¯d¤€‡ò èõzX^^ÆüÁ ^¯ãÖ[oÅë_ÿz†�íím|ö³ŸMýGTå@SÃBâ‚ÅÅElnnÂ÷}ÌÎβ,,..b}}•Jóóó™¦Ù(ŠT�‹(а±±�#GŽdú’&õTáª^¯§€K%Û[(ÒkÌ›ö©`[519r»»»)…MU|tªÚ8v]mIQºTe¤×ë¡R©dÀ¡¢N)p%„H¿bÀÇ IDAT+RyφÁ`�Þ³ Ðëõàº.:�ÊårúYùÆuEÃR�ïºÉúú:fff2V§$©ûÑétRÉ_Õ{²»»»xáÂ…r�lÿ€lºNéÑ>RSjbéòìyÞ+'''3À+ÄÕµõz½¨åEô÷1ƒžºÖ:1 ¥\Ç…[;†¢ìÂ�ñg©Š Õ¢\ ©³BÛGÁ�ÂpØŒ•ͤáÙ¶½W(d¹\–Ç�—AÈV«Å¦i"Ün·±´´ôÌÇ?þñ/cÔÓh@P!jœƒ1•ý=Ïu?’sWeÆ8&8 ‘ß(uýeUF�“È�YÆ�C° �$Ðw1êiÚ§ý­6£WϾgÀÏ8 ÐÏ�F‹³qdzðgo‚Y(BFዊќ Ì8ìÃ~Z�§)‡ñ¨žÁÌ(Nžã{±wùãIo“°ý{½©Û^Jf! ÃŽˆ¬ˆHH±PÛ>sÏç†ë_ýH¯y•A�ƒÃ`äïÃAø¶8~0 E�aƒ#9¢”Ò˜5Ú\Õ )3�F xœ_yôØës�sDÇ5b”ß`¿ö²þ™HJu.R¦"ÁjÌ ¿õ ÈtAÂ8Ÿ�ÀÐv§~àWƒ&\¿‚ÂÄ)D–BÍVqy´GÌ@þìm0öѾñl|«}ºÅ"J�9„ˆY¦í ˆl ef¹ϱaºøñþ}d<˜8r +O~%®>æyÄÖü>,ÇAÀÃãð8€t:�T )8ôìy†ØÙÙÉ4áæ«!ãŒÊTÀÜívSzËúú:î»ï><øàƒ˜žžÆ[ÞòÜ{ï½ØØØÀ… påÊ´Z­}Ò¼žç¡T*¡^¯£Ûíbmm ;;;¨V«8vìØ¾J‚€—J%t:�”b7nÜÀÄÄæææ2ÕÕç1111¶@õ°¨�Ú4Í”òešfšñ¿ï¾û0??�cÇŽ¡ßï§”+ª”® ¥ƒ¿üØFQ„­­­4øÕ«A€ˆ0==�áp˜©B( †á ÙlÚŽãE™RF“ Œ)£›*¢d[ƒ Ø§Ž´¸¸ˆ³gÏfÎ_§¨){íÚ5ÌÌÌ ×ëÑöööÚÅ‹øÐe\ûÚkˆýýzp�ɼˆJ¥‚ÝÝÝäå+QÌŒåõAãÆžœaZ(–¦00Ì$�É¥Æ�Þ0¬µÒŠt™Y�›lX˜š»ËWïH ”†eZ6ÊårtôèQÙn·%3³mÛAÀ­V‹VVV–þäOþäKÚ=ЫO Œè'}ãI«"îÜ·;–S-‘0Ë$ŒrL�އ…;Úep‡í“>¶$‡,M‡3´¤�Òt@“5eï‰�ˆ"@F`’Ž, |ئ7_¶+ÇgÍBm†5OdتÍU;ÿù$3?½�öµ? ÿº‹oíì{ofðÿLÀ9î¶O#ƒ±�±DfÅés°2 b §I犯Y'Ø“N½HlÞ�õLÉ'ªã’ð§Oü}h^ûL¢FÄ‚ ãÖÔO=C]a€è^{úÛþƒ=uׇügÍË][$ÿ wÆ £XÔ*Ú\#Î(`Åÿçlo’bhæ|‘H«P¤°<¥ Ž”àÔgŒæpòË”mT�ÿ¬oúbÃû£è$#ÄÚZl¹5pÐKúQœ*€ €°0ý²óøïÁ ¯ú "¶!ÓÄerž¬Öq}?¡³P2ìÊ ÔD ÊUD(¡?4ÈàXŒ}”È ëO{zÎ êRŸÏ4fƒLïÉh ‰‡BB5p4PÿXL®5Â~ ëaäðxáäÑGÅÜÜ®\¹‚áp˜º;z«ÕJ÷ùùùô=ã*" 0$.Éèt:<IŸ© ; C,..â#ù¦¦¦pôèQ¼ímoC«ÕÂÒÒî¿ÿ~´Z­4à×eyK¥*• ,ËB©TJ{BòMÎê<ÇÁââbJó<çÏŸO«ÛÛÛE)ý¥èJ·ÝvNŸ>�x««« —zŸúþ……ôû}t»]<ñÄ)à¸ë®»ÀÌØÛÛKA–Þ¯W’ôj”ª°‹E¬¯¯crr2½G½^�«Õ*ù¾�~¿Ÿ,Šæ´³³#?]©T×uyrrò�žçÑp8¤ÙÙYT*•)0¥÷À†�ÉÉÉ8Û¢�¯ú¥¤¤\îu×põg5Ÿvvv°···rùòå0jdVÀC9hä!‘÷QѵȟËÜqD^"GŽyëÙ³g_755u¤V«±ïûéœTU õÒçu³ÙLÝÒóïS¯noh~ýjç3 à˜.¼òÚ¹4~À©��ã m&1ñ%ݰ‰9Ù.3–qÉ&Î0KÓ a #˜…‚g4 ÞÚÚbÛ¶¹P(p¬$§¯^½úÌg>ó™‡s€£7€cÀ‡Àd”¤?÷òŠY¨|7“ñ"º“,˜À1q:qŒ‹äøæû Ä�õAІ‰FÆe#3=ÖûF”ÞRNvUJùÐZN‘dØ…´’ÔbÄ,#`CXÅBýüë-oæÍd8/!a•@¢�©=pÚÚ2D Ä«¦]ü½Ê™wþVgýÉkaë8ø< ÿ4€  ÌÚóBd¦!Œ4úbrˆüÙ›aÚ.dò�œ–É(mÈ×mÎYŒ°Aæ‘HÓ¤C�úž¸(H úˆ�æòq�øÉy‘Äç@ ˜Døu€®Wîù�½Kôóc²¢ÿ¿(Õsï%Šc;­–\iŒkyïÒH³%�yU¦0 ~*"ÁI­×‚@,Sð¡íQ´)Pdü8yþ5iõ¼SÚô¡†‘”9ƒÇí 麛å!r òD:6J{ KT!£(²Ué°2‡¦UüÀÒa’0Lþô9„p–Ú�¬ä*Ù’fœ4 ¤*å2ù'ÍžÚâ‚Trƒ3½_£&~$Þ@ê[IˆÑØk=02 (ýýá‰÷é�å$�¤–„Rn¿"ë vxÏ@”lî‘#GÐl6±³³ƒÁ`€ápÇqRÚ•ê˸téz½^jئª:ÑŒÊÄÆÆÆ•G}ôò�wÞyrvvµZm¡T*E:…Ç4M\¿~kkkxôÑGqÛm·áìÙ³øÐ‡>„gžy×®]Ãc�=†~¿ŸVDT X­VSGç¼"•:Ÿíím<õÔS¨×ëȯzíììŒmÄWv h4˜››Ãúú:Â0Ü÷>!Ž?Çq01Q¯×ÑëõÐétðøã�Ã÷}ÌÌ̤Փ<ðÉ»˜«÷)é\"R”*Ñn·—[­Öe'ƒÁ Û¶ÓÏ‚ êõz—›ÍfûÚµk ÓéHüÌ3ÏüçF£qòå/ùë ƒ±jXª¥ UõG£0 Q­VÑn·áû~ú÷ªG]�ª.­¯¯_¿víÚýQ~9ðÑÃx‰qUŽƒ€G|¢T*ÍÞzë­¯¨Õj˜žžŽÊå2‹E ´Ûmt:�ðê½;ú½È÷¹ä{ž®]oMm¶¢2˜†ƒ©ú´�Ämw”ÌlÂñF:2Œƒ®ö”d¤dâ�¡‚lz†«P�m}DBËÚÜÜäb±ÈBVÏz«Õ¢gŸ}öê¾ð…/b$£›W²`¿¼±^}ŠÊ'¾{NXÞ÷ÿˆÁ·C �S†�ÿÿ8€·ôT|O’¬è°—P€h?M(­v$SÎeSc�“€…8xʃAÐÅ { °Œ8LoîVËŸ¾Ë°Ë·@[§u‰$pâ4p'†Éà€€Ÿ'2Þ_œ~Éÿ‹©óÙ»ü±¼ÀæõêÙ÷”ü@ß7š¤d9p+Ç l¦S†°Ì”» M– Óq?¡C0¤¼pâ ‘Ü ÖÕ®´€\]oFv,áb©*ðgÏ@X6¤ìô]�pAV1þ,9äƒÖ.ÂÞ(Y 9ÿ¬ræ]§dØý±ÖÕ?ß3$c@ vö½·�ðnávߦ—Ƙ1ø« ºX9ûî `Ü·wéŸ8 þ&Ž8‚e–䥀ƒ’ù-Óe-¶GØLœ¡9�æ2²êSi,,’ù+´¶0¥ª5êËö5ÄIdØ`"ý]�%ÕΩÃÅÏ~ `HPÜ“Gœ*n± ’F{|Ó›-Co‹‡Ã„?1 ‰òVÊå¢L°ÏºØˆëEɹÅë©Qr“½b¤lGÙá¢Q…˜YWùR¢'Z‰³‰R¿›VJ5ioAÊ/Ò~²W÷¬™ÈÒX)X‡Çóåÿ Àëõ:úý>ÇÁÞÞÚí6&&&2�ßKKKh4X]]M=tÙ×^¯‡­­-ùÌ3ÏüÙîînŸ™£‡~x�ˆäüüüÃçÎ�ûžÙÙY³T*¹ <(@†!yä\¸pµZ wÝuî¾ûnÜ}÷Ý©‚ÖÖÖVÚØ^,3U•|cx«ÕÂææ&æææÆš,ªì¾zÿAÇp8ÄO<�Ó§Ocyyù@¯fN«4Žã¤`I©{©ñÝØØ@†¸rå Ž=šJÿ6�ÔE—42 á¼··,--ý×^¯7`fÚØØøJ¡Px̶m™\¿ ÃP& Åc �?~³ïû¬ú:ªÕjœéUpç�‘ê)‹X[[ÃÙ³gSA>Ô5(5ŸNÎaˆæ#!s•Œ!ãÀG*½[(ÌS§NU�Æ/ÍÍÍÙµZ-R’Ëjþ,,,à‘GI�î8@;N(@ïwjµ{Æ—žÜ=Ï pí"B¯–8újÅq]n—G$cJ²m @Z^š/C[ŠÔxNùñF"–SÅ0XK¦k+›žçN“mÛd% iÁ<ðÉõõõV2Æ=l"8¶úä4î4ÜÚ‰·@˜ÿŒó ˜ª¶/„!,�°@†ÇÐÑÌ!¢h–‰yá§üF¯½»6±/>%M!‡Ò=™2T�”¤rÞéæÌ�[K�²Ä¸Ð°‹çŒBíf¶¥¶_a80mŽ]ƒe—`ÀJ 20ý]a2�`¦óDøßã•Óß÷áîÖS_ v¿=Wp];ÿ^‰_fÂ÷ªàC.¬Ò ¼ú !!ej¦m† �Y‰Ûô9nª<¢¡¤°B¥3żÆÞ*ñûÓjš6 ú~aº¥Âô+>пñpoL–ô›TªçÞ+8 æ_d›‰Q ¸x˜Pså„‚CLwƒq7�$ýêÂ{þ„9úéAçÆRõ ‡R¢ß|D[‘8ý+ÖÜ'ÊòüÛZp‚�3zBƉ™$T¥SU³ˆRÎ4¸�è]ºü/d²îªä…ÔTõR0’M€(jA1 yd|Ê Ä=e@\±ô¬âÄ;!#°`˜†€U9Ó®ÒÅ{$ ¬ò™ ?iYn²'¤²ë#>j ÀtŽªZ9›ÈRy}ìÓI®%~8]JG=8¶ÑIzè"€#ÂÈ”TõÐåe¹�I�ç zö6‚ôÕï÷Ñét077—¾º"ÒåË—qûí·Ãqœ4àT}Ýn½^�¢(ª1óRÄÌ,//GËËË¿€_óš×Ü\¯×_911Q,‹Rª*0ñçþçøÜç>‡Ûo¿§OŸÆ+_ùJ,..â«_ý*–––à8NZýȸté*•ÊX“Eýµ°°€N§“ šu*Txê©§péÒ¥4;ž3£T*áMozüq ƒ L�‘ R0255…v»�ååeÔj5;v ï}ï{ñë¿þëèõzØÙÙÁúú:ºÝ.'Uß“[[[×ççço²,‹¥”6úý>߸q£ÕëõWïÃ~ ÕÀù™™™£¥R©¤‚o5îªJñ�ú^8ŽƒÙÙYP´0˜¦‰½½=¬¯¯c0(°JBÖÎEox§zõJJÏ)ªËîÊ›o¾ùGgff^===V*xžeè¨_ïwÜ�¯~õ«éxèsé ÁUñë÷û¸ðõÍ…VOz@�‰zmmEÐÉöf”OSûšD°ý,0lÂ<ò²ôBG\ääâUb+Ù¨$YðËsè´®Çà»úƒ¡0Í>¢(¢n·;¼páÂ_®®®vr OUžô¾›qÕ'xóßa8þÌ�ô“ *«@@¥â,·.8 ,ɳ%®ÚÔëcÐÝB«{=äY¦ÉÊ@öîÝ€Ù˜K´ùGAâ\ˆ£mmûšô“æJRE€~Û׿˜™ÂtoQ|k…ן‡_=á•a€C¦´Àæ òä`ˆ°µŽ½ö" `†à¥$Œ?tëç~Xv?õÖ45dÆ�ÑPrâdáO½–ç�£!dÈ™^—4é‚�¼Å‡ õXãtkãB2ùŠiŠ—ÄpG#Š[þÉÒ²©@lM@ººŽÞ#‰Ù\ùÈ­´6Ñ^ûÀ}°$ð}¶?ý¯ú7ðãù­üµŒ«çÞWðï¾DÅ4« ‚Fñ�€C‚£‚$XBØc¢÷‰·J31¬7þlgñ/ú›t±ÿ†* i¢=’=Ù ­šŠ`¿ú3(Û>z¼…Ö@Me\bÚ/™›Jå&_G”ÌY¤�tº†jëpüï”齨§’•N÷‘‚T¿¿(¢,G e"óæ¸WJ¢>;)9=_E³JéfÓ4qá¼öµ¯M«'Ê< Z) ÃWu:�NEבUÕ‰àþûïÌ0Œ Q‰·½ímï¨×듾ﻺážjð~衇ð•¯|år¯{Ýëpþüy|æ3ŸÙG§ÒéPRJø¾ŸéåG³R¯<õFÜŠJ¤²ÿãøÿJmëg~ægàû>î¾ûn|ýë_ÇÕ«W±´´”iöîë¦`O™4öz=<òÈ#¸ÿþûqíÚ5ÌÏÏ£ßïÃu]!Ðjµ†!*•ŠqÛm·�PArûAàÈ‘#ØÙÙ¹uccãSëëë7TÛqœZ£Ñ®ë¾³^¯”R—nj˜)ï�‰‰ ìîî¢ÕjeÀ‡šê¥zƒ‚ €”7nÜÈ€¯ápˆ½½=Ž¢¨ `û¥t#l^7NGå@Ó[õÿ›nºé–jµúsÇŽãZ­ªªGj˜3ut]³³³ØÚÚÚ'¬�8Лüûý>Ö7›ÞWÛGh©«è@¦Í¿iÖ^%åÔ¾¡'ÃÚ‹ŸGäÖÑ8ò²}*Xù S Œ$�Ryk˃ Ñ„…f«çxÐï÷‡_ýêW?ÛëõÚqw»9ÚÛAàƒH»z3lö‡ú9Û†ß�F©z ‘k#D’7•kœl"˜EXå¦z³hî\E¯» )ƒôºÛ»—P-ÕÇE® ‘ã)þÊù…éþéî'C´V/ nÇ€ˆ ¢�Ô<`XeÔgî‚S?†Ð�ˆd˜l°:""DÄ Ï„éÃdiÍͧÐëoÄ_-iŽˆ~Í›ºý�­kk��©ØQõì{ú±4Klz(ÍÜÓ!Èh0ê‰Õ'{fü4¥ q*>ù™/Ct¶¯€Ã–Wf†Ë2 ÑÛ¾‚Òì-° •´I7.# �*&9sÈ ÷œç«Ì! ¥:„ùR4¿ ð0•âƒþñ7~¢}í/JÖ%• ù†AHíÜ{obÆ} L�*�Â-Ãt+0†W�e @e ´w Ûˆ:Ûˆí„.F%ý¨å”ßR>õöïi>û§×´þÉäÖνïƒo!ЀOª°\Åì`~œÁ!Ë{—?Ö}ñ°h‰Uæá`–[ÉÌ�T&B{N™X¸õ$~Tëö@êsd’Í—Q&31¹¶–0év¥œQÌÓ©\c7�Tm+ÖGl­$e ×ɪL²È�$ˆIˆ„:µ¯é[_»U5Tÿ®[+½`Ê_;�í�0QÚòÉ À#È©~iÖS`H¬?ûHÊÿb9ØNª xš’ßé÷ûi†_©Vííí¡ÛíâØ±c�1úË{è†wùðF£ÁÝn÷•KKK¿�ß?Ó¬E‘`|ò“Ÿü½“'O6¦¦¦¼#G޼¹^¯—=Ï#=PTU‘�~ô£X]]MƒG]¡J§ ©ÆmÝŸ!/™ªÎUÉŠ~6Îà0ïà­*ê%¥ÄïÿþïÃ÷}ÌÏÏãĉxË[Þ‚V«…~¿�Ï|æ3ØÞÞN+#z³¿ÿjµŠ~¿ŸVF¢(B»ÝNi]õz=¥�é±.+\­VE½^{µZ]¾~ýúÒüüüÉr¹\/‹¶çy\( ¥D¯×먮ÆË²,œ?·Þz+VVVöù^èï5 µZ †a¤@vffÝn�N;;;hµZØÛÛƒçywù¾/ÚíöCÚ˜ÏçÌÇU>ĘРˆ¥uÍcÇŽýóS§NŸœœäJ¥Õë¡Sþô¹¡îëÑ£GŠÕA‚ ƒÁ½n—þ«­…^'îÙqàTç°Ô”YTÃáhÃY4ÃÕ h6¯¡]°åÝ¢l„~é¦?ËöEa �Ýf×íuv÷®^½ú¥^¯§ÊûcÈs‚§qygßàâ¬Á0 ¨ÕÎ@”ëP7J«+ÕÒ•Š0ÆHŽ0tMxΜÝ*v6ÿ R±”0BtV¿†âÑ—–‘Ɇ޲•ŒUzDШú)!·®coå‹I“j2g!°œ¦N½(–È vOUcR†wF†�ˆÀž�Òü­°n\F³u5¡”‰Ya:¿ê4n{×`óÂö©¶ñ�0c„aÛ8ÓAL¹B¾‚1j¢×fÍ~“sìW#fÄnÊ�õ§°séS@Ø�ƒ.³2pЇ] ô6.bê¶÷Á*T´ÏHSìoÜe�=NY�¤òÕŠpÃ,a¹>ÊG_н«&�Q 2˜ŒÒãµ(™‹øFAHõÜûÎø "žRç%Ì" �£(i€È` ¤Â &,¥IMAÖŽ£ßºŽÁæUH9T7à¼0ìûücßõíÅ¿¼ŽýÒ¢ßHªž{Ÿ ð-~ÀMM¦ùÖ{½RŠR@Âzªzö½(Ãþ¿ë¬_lFígy?Ìþ–d`=ð­D„h¯ x­gÍg0§¼†lÀ?ªTpF¢ð Õ¢Ì\c¡è—Z±ŽFÙ~5OÓ>õÄ Î¨ëº[úyȨ�þîò¨Gƒ‡;D¶† f˜Ž»à Ì´“ŒZ´ŸCºÙBw–²›V‡A½Of¤HšbeæX–©¡*"Ù²²¢õ2Ù^B¿µ™Tµ2è<£ã9öéÃãðxÎøå–[îí÷ûœôÐÎÎúý>æææ2Áºîº­ªóóó™?g³" f¶wvv¶£(ÚDÖc ÈQm¢ÝÝÝîÊÊJëÉ'Ÿ||8ÞAàJ) :Í©×ë¡Ùl"NTÖ^Q›†Ã!vvvöýüt%+Ïó°³³Çqƾ_¯vè´5屡*.A`{{W®\Ác�=ð<¯zÕ«pË-· \.§T5Ýi\5{+3Æb±ˆJ¥‚jµŠÁ`€z½ŽjµŠR©”RˆT@­¨TŽã¤t8å“'O�šš*Öëu£R© T*¡X,¢T*¥ý*ù \¯€;v ÓÓÓèõz¸zõj ´ò~/–eafffß5xž—ú¸ÔëuLOOÃ÷}‹Åùjµv:�N»ZF4_õЩTðŠéééÛæææ¦¦¦êõú×ušÍ¦`€˜žž~Ã-·ÜòÃgΜ92==-jµôʇÞß1Töû}†�ÍÍÍLåJUÈÀR»»»xêÊVãé5¾)v‰3P/O‚+s�åOçXËÆ©†JÑÛÅÖ³ŸEôEx3·CØn&;˜6_*um¤�aÃØ]BoÐ íîpgåÚ“÷‡Ã&€¶öj!kÄ×ÇsÈ)–޼ºJ$~À<À†ƒÚÄ9ˆJÂ1éË$«NŠr¹ŒF£�ïú®ïÂùóça¾üå/ãêÕ«©úØA•‘n· ½iZÏÞëçôàƒ*§r4 ضÍyššÛÛÛûzYtp†!¾öµ¯amm ÍfJEI—é«Ñh T*¥^"ùëP×2 ”ä²ìt:¯ Ó`ª¾]õJo:rà#“•&2ÞÈÀ­qüd¡R= *Wq Ñrœ0}ãÓƒë” -�jåÁvÖK³”�ÿ�½7 ²ì<ÏÞ÷;ë]ûÞÞ{–ž`³I@„‚‚DÉHT"Ñâ¢-)švY•Š�²%ʼn]•D‹m•’”ìÈe'.+¶Š¤dK¢Š‹¸€A;0ÀlÀì==Ó{÷Ý—³}o~œó�û�sï"#—õcNUO÷ôrïÙÏû¼ï³´VP™;�ÈJ÷IWSç'PNGƒä÷àû·obóÊŸ! ÛÉôCÄNS$ L ÷~¢:'Ò§Üç‘Ø=�¢¤]K½ã:r"“‚PØþÕ]xA ƒ@ôq«ºüg~óÒ†j1Äs¦! Źà(Èœ!™€F�o2¢fÄMÊQa-£½­‹h\úb n’¿ E)Þ0b�°Ô{l�ýXxëÏÁt*¹“”FútÖæ1餉rAp”øjVE`TïÃ`ë,HF€!a8å¿à—²D·ôœ£7$ÄøöÇ& Vu•ùc€Œ Œö]ÆYUÝ·õnt¬µ²ŒjË� yó9„Ã&H@tØ´‹ÿ-À¿‘¼J^‹vGJVýÄG 0þ6¿  �òüIÀ°‹0ì"D¡áãã�ƒÂA‘ßËHØEþ©áT?>uô'?Òºò¹+Þó¯Q‘ÇߨC@£×»�jýTâȆ1BSzXÔy¥,z)waÀî¡qåK�és|"dèÇ´Élç3¶ŠFV®dk˜ào@3£‹¿¦‘ͯ:}¤R4÷Ã0è¡ñÚ—´›"¿yÃpæh lÑ(y\é­tÇ©ôúfëá0eAXæäýaj¹«¸¬ œF)î<ަY€¤·pNͼU´o~$2 n$h}Uú.踻|oäé§ŸþÇ[[[]Äá2eß=}úôÑ¥¥¥‹E™ÏÖÐ'!sss©F#}AÓÌX® <øàƒ¦ïûŸH:óžçÝÚÜÜä���?Ĉq-´›¼¡¦#kkkÁÚÚÚkÏ<ó̕ӧO¿eyy¹055õÈôô4O¢S)p!„@¯×ÃÂÂVWW3EºúP…²ÝnŽã¤Ó 5íÐé:êuTq­ÀG³Ù¤Á`@‰ã»®Ëù¢W¥®_¹r3338~ü8Ž9‚G}ëëëèv»xê©§Ò@<õQ¡Z­¦Ô+ý5uPÔh4077—ŠÊ'�]x?Q,3à+BÙn·Ñív'æ]¨ß ø•_ùloo£ÕjáܹsØÝݳ²Íƒ‘d¿[ÃáÐ:räÚíöo,//‡žç}÷µ×^Ûk·ÛŸÝ{⦅žžþ±ééé°X,fÏÔ:ø¾oU«UK‰ûï4ñÈï3}Š£ÜÇVVVðÉO~¿þë¿ß÷Q¯×S�Çp8„"56(•ЏµͶ<9$,Ô¦!…?)KªMùǤGÒÆ�k°‡+ß�ÏDh.âÒȨ•ÝäX±wËÃÒl:À ²ÊdK,ÛªÀS�ƒú‡¯M ò´®ŸøX,KŽUƒYŸCÄ¡ÆMV$f‘ã8[La\ÔÀž;‚zÂ÷ZqW˜¤ë$aÎrÉóYA›"†h·x,.¿wô}Ë�‹Žd"ê‹�2‚¾R:ÕcÄÁ¦µc÷FTŽø†‡Êìq oLH˜o1‹3OøMü1wI€øGÁB€ë +éæê| Mù™—q²Æ/i!>úL8BGM>ÂQ°Xäß–Aïˆ|€<€žUÞ÷^"s>F.[¯þæîÿiX…i$£Ž1Â=¥$|†É#÷ÊœŸêwš¡0P˜+úÏ�`ƒÈxÀ,<öVWµsÍG6×gÒTáüt¼2fiåù{c"ݾG¡&š`ÍJÙòK…YV>„Æ•o@F~ÔŒ_.xük½[ñ¢Îñ—!¿Â?@Ì�„Ó© 0³ Ó)'Çž³'oeÌ¢AÃþ¼ÝU€¤ sx�„ù…ê‘ÿñöõ?»z‡bï?{á×¼ôGgjÇæý$˜lm`hOÃ--¥6·œ/´ÙŒ�‘¯vºEaØÁö…?AÔŠß)ÈM§l¤ÝXòã¡ y �×B{ýyL-¾dcš”èN¦ B[‰x"Ã!W¿9ìÄÓD~ï XöA­‹Œ§.dŒš Ìw_Q.8”³[Dúºèj5©DÒü• xˆzk@a°œøÈÓ83´8d)o�úÛØxñ?‚ÈVû™#ï²F1!&k6ï.w—7 ‰P¹€Q �?þJEzðàÁ©„p}¢hC=ôºÝ.šÍfZÐé®išp ‚@&ƒyß÷ç8€Á`ðöN§ƒn·ûrEÏ4›MÚÛÛ»™£¨I‰uþüù3ƒÁ þðÃÿ ”’õ®½úÚó¼TœÞívaYŠÅ"ºÝ.†ÃáX7¾ß1==�z½ž¾ŽJºVt=\®Š†Ól6à .|}ee¥e?úè£'÷íÛ·T©Tê¥RÉT)]³²µµ…��˜¦‰R©„‡~À/üÂ/Àó<<ýôÓØÞÞÆöö6VWW¡DãúëèÅ´žÇq'БŸ`�>}—/_F¥R™˜{¡¦#y×'�†¦ÒÀ?ýéOcß¾}xÛÛÞ†'žxŽãàìÙ³h4¸}û6ƒÁ›‚‘™™™hß¾}Ôï÷ß¹¼¼ŒF£ñã»»»˜��¥Z­*kcµýùmW•år9y;ÝIr5aÚÛÛá×~í×ð©O} Íf³³³é9`Û6*•Jfò4ð"ëêÚà³%˜€‚]„=µ€>dVaHšq.sšË�öÕeˆÆÚ˃žÖ©èôw004]Í¢$GæQw Ì(–¦a"$\2Ý*‚¶º–ÔCC�ŽI)ó¹Eþ$Àªs÷""­»Fº…5�—f£VgÚµO«çTØû�ÃQÅD+[s¶ƒ�WRŠQO†fáÎ.eŠΰÎ9ÉÁÈá”qx¥Ök]M=±œbz ÎFC¿ aº‹ ëIŽ&Ã6ÁüN " †]‘Ì8îÄRä\ä{F�šD#žØhß„Þ�«ß¤š¬pÜŠ¼ÖË÷º]J¹óÛ+—ÜéÂ\ ¤¼}î³XxÛÏÁH(c¶0âŒõ'²ªÚQÂHú=·RE=ŠÓ”…=#¬òá„2)‘ ·œTà×O|ÔøÆY3†[Fué8 ¥æÜÃ)X#=À£°Ê±idò=Ã0Q»ç�Ø{ý«ÉDÑ2„Yøžý[Òßéæ/ŒY,„üM0ý (ñm28µ}(Ί×3±le=í�)€é”Q.Tá”çÑÛ¸ˆpЊOM)î¦õÿ–¾û=ÝÕ'·0Áäà¯AáG,ƒ¿CÂ|/ˆJzë`,À²ë£ýŸŸoåògFú òûhÞ~Qk- ¼ÔÂ[‘03â{F®+�W[�º“�+Oˆ0µøHXÙ©€îØÅÈäq0KD~{7¿‰ÁÚ@ıRF;2h_‹ï§D ÁDQà!ô‡€e�_Û™IøÈ^x @3� 7RpÆ Dàȇßoæ¸Û+—0ìì‚Y¢ºx SGÂ.!ŸôžŸ�Œ-p„ »�Í—Eé9ò{g Ã&F¹]zóê.¹»|ïDëŠ íT—¥RiX©TÒΰ.Ì€'žx?ÿó?�›7oâÓŸþtš®ë-àðáÃé”DŸ:$Å'%a}o‡ xž·Úét°µµõJ«Õz!Š")¥L‹¾ï‡z1;©kßëõÐëõÒÿ+áv¿ßOAC§ÓA£Ñ@¿ßÇîî.|ßÇ‘#GpæÌض fN“áï»ï>‹Å„EQÄA ÛíbccãÂÆÆÆÍõõõ€0Š¢è›ßüæsøþûï¯ÏÎÎÞ·´´ô@­V#"t«a5yòÉ'aÛ6±´´„ÇRJt»]|îsŸÃ¹sç2už§ö©¢ ©‚{m.óà¬×1 î˜$Ÿ·�Õ�Ÿ Zœ™™A»ÝF¯×õk×íóóóxüñÇ1 àû>ž{î9loo§�‡ú”'F|ßÇââ"µZ­ œ”Ï¡^§T*e¦úöèÓ�>7Ñív±³³p¿ó;¿ƒ§Ÿ~Õj5Ís™”�«›½…®oN CؘŸÞ�.IðT¶#ä¬Ú1”ó`­õ3‰¬‘`�AAЇìïÕig[ˆ€ê0¬"¢a à¦]º'à…Õ%š,øß—ƒ˜j·ÿl§Da¢Wí"hMN�+X²K¨|+Úkgv¶’²Ü8f8•ào`dcý5!ìµ7¶ÜÚÁAà_eB¡sû ¦Žü *èsF­OA™k]á² è`÷ú“®¾�©ÒÎû2è_ÈQ¢!˜=€½¤£¡u¤€…åî7Ü©ÇØéÝx~kõc?ˬÄS Œß[ÔebØ¿…½Kß@Ø\I´iD$#¯ý2˜{ymÆ€„°¢HBJ?Î9¹Ó�H©üšpý3@ƒ+Ø»õ:‚`„m vWF™&"}~ ³uƒþbéÄ»@¥{UV òw´‘ý;CFüÍg°}í9È05Ø2輆¬yÉ GßÍ�»@äîò¦$ÔÎÅ´%„ÀÜÜ\J¨ºÏKKK`flmm¡ÑhL å#"e›vÉu��aÈIQxÀ÷},// ?ÑétÐétv¢(zvmmÍB;�×ëu¸®‹0 3¡*HuÊ•¢ˆ)M†îU©TR=Äææ&öïߟ‚,EϺqãvww133ƒ­­-¯ßïÿE§Óé"k!›ÕËsçÎõÜðÍxàÔáÇ—¦¦¦ŽV«ÕB±X”ùÂ6\¿~=Í99tèŽ?ž:RåÓÛõN¼®ëf\Àtº\^|¯>,ËÂöö6Ç+êuÚ™^èçµ/–eeµ»]\»v /¼ðæææpêÔ)<üðØ™™Áõë×±··‡«W¯¢ÝnOLW`Äqt»]ä+'$*W¶®×B�åŒí-û®kŠ7T@\A&Úa2G €è4À𠺨¿E€;^¹(Lå4Y/ I×M>ÆZñWš;ŠþÆÙ$Ùš-Ó*|À~O['™û¬FQÿ7•xJh£°x Ž[GaÎMiÒu’¿®‚LTN¡zˆz»1 "ñDùà{ÞÛ]ýú·’ç å:ÏÿYAÈpói¶ËÓÿD˜…‡ ô^&$ ˜f))�ßä:gGºÍ«ñý°¹KM=däwÏr8¸¥Áà ðX#E†ísdºmÙú «ÂÃö:¶_ú Š„[ܳ4Ã(d®ª(hÃkoaн†ÞÕg@‘™Ð‘DùÝg9ÜJ&‹éïnƒÄȨ@opgA¹ó.0CoÔ-Éý^8ÜÃú‹ÿ‘75«`Ä-�Ž?¢þ.V_ø#Ì,ߣþV«‹`aƒI$ù!2ÎÈñ;v6лýº;ëñ~J–ËÍp¸ó$8#<× Lòä.ø¸»|OZgTƵwä©b 2¹·o߯§>õ)ø¾Ÿ&vç?>ñ‰Oà]ïzWjA»³³ƒ„r56ÁÐ'$I—�ƒ à¤#>íyÞ–——ŠÅ"+½F>›�5±˜þÚ*sCu½;�NÂá/¥E»ê¶ÏÏÏg¨=JÐjµÐétúý~ =„t{á@GFÚ@Wœ={öÌÙ³gÏ-,,|·\.›'Nœø©¹¹9;É=ɺª�¿|ù2.]º„ëׯ§ë©§¸[–•¦Ð+—¬^¯wG]Œu`V.—Sú‘zX–•Nµî”{¡òb\×MÝÃòÙ†aàÖ­[X__O)LsssxÇ;Þ�ûï¿aâå—_Nõ#zK†X[[ËL?&M5tj˜Ry0¥¦7úñßÙÙI�µ:‡Ÿ}öYLMMazzz ðéS+¯^iëd‰™! ÓSKè%|g½Ä`—Z¬rFŽ9l\Ccû"(¡8– Ã@¦¢þL–oÄ"•†X³Ç�•oÇ`äÎÌbäíÞºC�+'ƒÄnŒ{˜$%w¾’‡1ƒà Õ#�ºÒ¹*Ý¡´æœíeÖF2~¤‹ tÅÈÒ™K#-Çä Ö¾â;Ôo–’pC˜V áp’Èb` @™9Œb@*Ó€3Ê“C8Ëþ�JÊš;W&€QÙmÙx½­¤01dR tà±—|´“âÁ°$! 7dÁ"q’ÊÛ �içh:"´m‚ˆÛXúñúÉ  ‚¬ t�ë쮟ü¨ ÆiNR�Ý…#™R»4+×±¯s]eÎ …U„QšFØÙŠÏÃü€?Ê5è2ýäG&àG8ñ„µ«ópK³±ži÷™ómòφ堺ÿ-h\ú8òô„a~BXÓ/É`¯—;@·¯~¡]»ïÃz/È€Q,ÅC¡ä�fïÙU•<ÄÆ™Ï h¯&z'5ù@(ýÞËn$ç®ròÓ»ðú 9Š‚ÎêŸ�áì˜ní#ŠÌqx`ÿÖyôå+€a€È™±v/ò�rö:ñõi8U鵟•aÿFr=)`ßäÈÿ*Ù•OBhlmaqº…�j98Ÿ�‰ó°ÇÈð!ÆK Ù¹„Èë'”4å¢F ˆ¸‘ᦠ‡· ·þ ³‘a£¹~ ¼± Ã*€„•L6,CH‚Ã>¢a/žn6ÿbó^Øßú:ÀM­ä£­ÝG”{¢^óÜ]î.i¢ŠèLgtww÷Æââb' ÃJ^| -óÂn}²ñÅ/~¯¿þ:î¿ÿ~9rïz×»P©T°³³ƒÁ`€'Ÿ|[[[iñ—� ”-´Z­4ÄO�U4çé1:ÝFu½ýʶmLOO#‚´XB Ùl¢ÙlâàÁƒ™‚[ÙÕZ–5}ãÆ�˜žž6 ¹½½}À­\'&Ì]Œª•`lnn›››æÕ«Wÿã±Ç{ V«Ysss�V*Îwú›ÍæõÅbïz×»P.—ñ­o}+"ô �^¤ëûÒó<ê÷û´»»{Îó|Àc�=†��ôz=¼òÊ+ØÝÝM' ºÍ°~Œó®d 0éëœw¸RS���xž‡Û·o£Z­¦S–ǧÀV ÕÌ*Ó42Ý+·ãÚÊÀl¹Žai:7kn'¤' s.Ø € =ôWŸMk!„¬�NȆå±U€°á ;p£Ò43Y ØP.¡Š Sp uxÁ€©-GÞœ�B¹‡¶þ@$ÜT#i;q¶N²Ïtw³åiñº™"•F~ø:8Óѩ×ÖÖmU9óýìkèÂwfäà‘æ¿Ï£ÖÑß&ô.{·uB…•,,° bŨŒª*�Q@�9×3`诙Ññ$2Ög/#ªgl35p¥Î%ékn8$Z7)Ú¤¯Š62\ ›IÊd€hwHE{»t©Wg&8Ì,eâò‚eTPD¬?´‘¸"k½o"c „zL 5aNü:i®N|ÜÓâ6¡Í�ôFš¥q"˜iJ6gF•„ÂÂI´öV ,€„u€)dõSQúV¢À|œcN¥™Ã`äfD¹Ìæ‘íi„¦0ŽÓ*Â�=ŒþúŘ¢(ÌŸ°¦öýsogۃ¿N�gâµ}fmfìVCÉm&¶Ömw8l ìm$ׂ¢þÈvä÷^åhpS;—UÁßÁÈÉ/?=Ëí†ß¼üY9ò»4÷qÃ,ü0³4… À‚£¤Ä,ã�J²ôãÈpxIzí‹ÌaC›.ª cÇïnþ³8ÿ"Q ´6.£²ôv0™�IcŠrUÒï´LÙ†‡Þ‡1 ½�˜2O:˜£`•e¸ÅÑ`�9j*@ÀáàU£¸pÂp*ï 2ªé™JHô“ÀÕ¯q¬q‰ïɳE†{Ò\”Aûj4Ú¹Iªš‚äíwïZðÞ]¾gÂù weeeóСC—ËåòCŽã°¢.Å×�1&þž”�áy¶¶¶ðÍo~DÓ4aÛ6æççñîw¿ûØÇRŠÍ /¼€~¿�«W¯¢×ë¥àFŸ’(‹WÇqP«ÕÐl6ÑjµÒ÷Vö·Šv£S†<ÏÃp8D«Õ3£V«¥n]ù`=å&U«Õҿר? `_EX^^†ïû÷‡C¥;y�ˆž a£Ñxž·®ÝcTZh˜ìw€õíoû•J¥²ojj óóó¸÷Þ{ÓüÇqÐl6Q©T2S µž…BûöíC±XÄÔÔfffÒíËO:ò–¾�N'ºråÊwnÞ¼ÙŠâQ¯¯¯ïž>}úí3333¥R ¶m³J—WÇ"ù{j6›­Ë—/¯^¸pá"&"išæ+'NœxËÑ£GOÖjµ1 …Ê;Q…üÎÎ� Àã8˜��ÅC=„÷¼ç=pçÏŸÇåË—Ó©J>§D*¥Þ÷ýÔ‰m’ÖC‰ÿ¯]»–檸®‹z½>¶ŽÝnwÌêYYOŸ½ïzl A¦ Qß�P‰’“Ö6s–HC£½"€×^FkïJ"ˆ(¹¢oš"0"˜ â~0ÀBØGÏr3¶±"S¿ª˜Ã4mk‡àm]³$aû@ÂË;HMæÞ'…�L*ÁÈLZôɤ…õ'%�Æœ¤�Ç%5évc´“Q²;¥E9åˆN©©+åæœ$`c¤þÈÝ9™”äÓ¸´ì½£¯�%FS1¦Ý o]¤�¸ð$,@  YJŽ' "o£äd¹? #ÖC^²)ÊhP”ý­! ý¤�‰ýú“â §Ñ&ô¢Í‘Ud`iÄC“h¤VÐ�o&œQŒŒkNüµTÇN…(¤À0)xX2d`%àÃà`”ª,ò膉î#pÈ0 È€²ùÈá{õ½äZT`)�D$ûN2gÎ.E‘Ž]KɆ –Y:U, +÷üX‘“$„€UªÅT¸ˆSÕ|òhú©åIÄöÒñ52¢Rb€ÿ¼8wz·Ï€a@d9µ�yÀ?ÕNµ ¾¯Tù7[¦O~t L‹ .# !Uš�¤‚m°Õxí÷ʇÞg3cYís«X�·/ѯA¿G2eýÂ~ª¸–2è½&ƒþU€Û ê sŠ„S�7�Ê;…U˜%aE±Ã`"–ÁK2 Ÿ ½îõ yq�eå±Qع¾vo¾êÔî»ß,Ö– û žgXñTÁ8Œ-Ñ9I2‡mŽ´Ã^Å IDAT‚­p¸û2dØIŠ|}º¨ óvØ[o�Oÿ>Èþ%4hî¡\½.Þ "– ÈkÏw�€H‚ÓûB²§ ž€µqá ßt„iH¿yM› Åzކaoíj4°¾lMyܰŠ4ƒMÈÄ,bÝ]< ’ æ�eØ”~÷bä·®¬ìÚóMŒF~’:aúq„Ü]þÒdeÛxíµ×~¯T*=lYç;Γrô"w8‚ˆ0 Ò²¢ît»]\¿~¦i¢^¯cÿþý¨T*xÿûߟReÖÖÖð�o|­V+¾ï§!wJ‹²³³ƒ½½½Ôù(o—« ívBÔjµ¸Ô¶I/î‰X\\L•>Y‰¢[[[˜��3“¶í'ƒ 8åy<ÏóÂ0ÜT)àÛÛÛß"¢K2^ÒÚÔÔÔ/>|x¶R©°ëºèt:i…¢ƒå3:Ô¶õz=¼ð ( ØÞÞ3c~~[[[ ú¤Ãážç�™UÒ=W*•Ž=ª„ø´ººúäÊÊÊ×O�:5S­V­¥¥¥v]W !R¸··wy{{ûöõë×›½^ÏSÍ+˲jKKK�˜½}û6omm¡X,²,ÌÎÎbjj*#“B}ßG¯×í[·àº.–––°½½=f'¬þF?Îê¥\ä$H07­ÁÊÊJªY9~üøe,?i*•JØÚÚJ_ר\ßNuúƒê ¯µö«baªX»åØ1$µöD%1ŽúÚ ö°}û¥”Wl ŠŠ®è†! "ß4M_’åH¢A Â�ÓÊp¶ÿ¯ZI(Í&.\ Ö=D¦Íìë…žÀ››¥…kí8Ö‚³.R‹LŒ®8)ð(5ÞÏò�ˆG)¾±Z¤`„‰³” Ö|õG ÍÉZ�ž!S&ǃˆså3´É„H-SëßÔ²s$þ)Gq�-eÜQ•¡  ºÌáÁ,13üî-Ø¥{GïH omÂÛŽ;¯b´ÍŒQG*U~ÄóÕ㢠)µ"j`”ù’Žª®e$ì² 2RîZ0 K;Æœ…ÍI1­à˜)ýÞ(¬0kùéöùí¸ð‘2b…6ùȃ'ä%ÿš.„a¥t¶¼.* ˆ0Êj`Ήè)ç»ÄÚë8òÁ±ØX«²_�²¹9 Ó~„�JœÃ#àÖ¤Ó*uþŠŒTD¤àvÔð¦´0Íš!$aŽÂ†={ÞæeH a¼Àïæ¨WåÝçé“«3ðÛ~„}•ÌyÒ"µ™y³vâ#HÊÿ� ‹1€5`0SšØÍ™¼ŠÑ6{£Fs[ýw…=U¶J ?"ÌÂ4N�L;¡™*0Ùߥ“ág­âì®[?t9ènþOÃísWYti�#á5.~ÇkàE£°4g¸µe@GÓ,—eèBJ‡£`À2�v{‹—" ˆª‚¿•¡&qÐóû»¿ëNøy0UÙ°±µrµ}kêÞD§¥Îͬ£¡ Ò‚õÍQº¹áTPš;…Öê 1P±ìýU§dо�£Fõx,ƒÐo\º"Ìò§Ean‰ˆª`YG.³tXF8,#† õ:ñ7¥–r�¶6ÑéowÒÞ]î.o@ ÝÀHë¢[[[ƒ½½½aYÖ/ +U(_^œ¬ŠÝáp¨òˆˆhww¶m³eY¬x �¨) á©§ž‚ã88xð {ì1|èCÂ�põêU4 \¼x1 ÚSÅèþýq îÎÎÖ××S·*µ^A ßïÃ÷}”Ëeض�Ñ6¨‰N~ºÐï÷ÓßU¶´ªã†!Êårª§SÅ¢(â䳆áAM{òsÃá�úý>ƒÁ çúýþ[—––§¦¦R*5q�Z×ê4*½ãïy^{íµLnš&æçç±¶¶–:y)§ÄæÌ ÇqLÛ¶ë*,ò¾ûîCV¿ßjµx{{ûFE;Ãá�z½:�Nà:²úY«Õfÿ‹Z­†B¡Ày7­íímlll X,¦Óš;Yå*ê“#yP ´/¥R ËËËh6›ØÞÞNCÕÄ'qTC§ÓÁîî.vwwaYVš“¢¿_žf¥‚c@kÓkW7goïúûÖ›rnè& Lõü,Ø%Øó÷—šCU†´’u‡JÜ!Ú¾o°›º^UŠFÇ4ŒPº®í•©0lMG�æmLÕ!„1Ù` ­ ŸËõú!ìÉÄ&ˆì²°+‹ÑpwU›À½)É_#b„‚4Ë<Ê•Š¸ùi=5JÚVSœìz“ÆXÔ¬Šµ@¦Ç»X;„Áú¹ÄgÀš2‹ûî ûkW🠋¡~òc |Àÿ �Þo8CÒ÷cDUÇ ŒØŠ}… ;c¦ùT“‘0ê&'Œ8�a›fqáQÃ."Ã�`Ú™„°Fö¼<2Û& 3NõÀ×íÊÒ¿ ú{ÿ{íÛk¸U”èA4XDƒõm¯a”…VL>œäX mÂhBÔ„±`0Ü|®áT÷ý* óŸ“ÃÁÞêyÌ¢Q9a–Æî�£¾ å\‘9ÀÀì‰'ÐÛ8ƒ(ŠƒgÍâÜÃAgø2K?o4¡tUR†]’�îjrþ:ÉôQM Ý’1Šeæ¶³«MZtÝ–¼[Nß]¾_¢O?t >ûì³çÞþö·ÿÌü÷*•Š˜$üÖ©.ƒÁív›¯^½úd§Ói»®Ë¦i¾õäÉ“KI�ž;©®ŠÀ(Špùòe\½z†a¤4ž}ûöáÈ‘#xî¹çÒÂQ­‡iš8tèjµ®^½š®—^@)ª—²ÂU…¾*’QUˆæÓÆ£(‚ëº(—ËØÙÙÁææ&Úí6zè!¸®›R�&dfp†œLK–ƒ Xîõzp]7ãð¤¨EQ¡P(Àó<]˜ŸR‹”ËXÞñK}LOOc8¦–ÂªßØØ€”õz=Ýÿ̬lhåáÇSðEÑ¡0 i®T†á[Ôqît:†áWæçç?P¯×¡Äôùœ]‡±³³ƒÛ·o#Š"ìß¿µZ--öuª–”ý~¥R)ãꥀÂòò2}ôQt»]üùŸÿyJÅS¿«Ÿ“Ýn7ÝÞI€CQ …ªÕ*LÓÄîî.]¹¾YýòSWO÷"·&ã§bBðHºß‚;µ€�HÊÌ@ áׄԪcmwwpíÆ·RkUÛ4B×5†¦iÊz½–J¥Ðê‹fw“ªD&yÁ† æ¨Ok‘ ïR³¨4Ãr ޝUœ}7"oo'á—ä»Î“D¬?hÈGÀp” ÐeZ€pž½ ©…¦ÃÐc-ÿ,�Lц",h�21BcêgÒ©üz:w v´œ/íÿÈhD²‚d}»x‚%°Î‹Â>‚áNL7aqäùlpdF‘w^péÇ öw!ý> ·<OúËjiòº>&óÙØ ŽBô›ë€ôã|æ>³×C6,,˜P¬Ja: Ð $è]àwwàÖö�®]ÊÆ¥¨¤ø1€ÉãQ%j‚"9DkåéQ!β#Ã~7wîîàK@,"_ f˜%ŒÜJd º\æÐÌŒûµë6¾÷E�~dA2"f©Š5')àô ¢«NL³TË:àéM2çg.(›” M«Sû"`6˜£©¤`Ö³Ä0Þ|âqúc‰‡|ž�EJ÷ A˜Ó�Ã<“•g08ò!ƒ!8ò�l5® C˜1IK;¤é×Ò¡&KÝÍÔɉ„i[¥ÅÇÉt„aÇÅLg öì>Ø¥Z|Ÿ�¿³� Ù„ �~?¡ØDâ¿±Ë ?aÝóÁ�·oüų,{ºi^ uO›4°ijDbä:i²˜ ²û;—þ}yþÔi†ø%") ËÅÞ­k`ù:æ�½lï™… ±1sæ®whÆ‘´1sÿÏ`ûìŸÄeÓš1ܹ™°ûR@Zš>#ÐÀ�‘ BýQ§@ª#å&¨í5èˆwÓÐï.ßÉß“õð¿@ðÒK/]—Rþ›ÙÙÙ+•Ê9Ž#õSi†Ã¡H8ö_¿~ýúFÎ_»qãÀéÓ§OÖëu†qjzzz.)ZÓ ‰^ !ày„X]]Åêêj§&¦ibffïyÏ{pöìY¬¬¬Œe]¨"ضí4e\�}ò¡ƒ�#Gޤ EZJ#à8æææRÚÙîîn:ý™šš‚mÛ)õëØ±c™¢X׬Q: PÅð•+W°»» !öïß�D�1& 7 c¢å°Z']ó¡Àass†a¤vÊŠ^5 póæMT*8p "Úk“”ÒɉÙ?äyž,—Ë)€˜”8®ö��ÝnÏ?ÿ|Y,1;;‹jµŠB¡€~¿Ÿ™²åSïÕTJ9aM¢ÑéǾ\.§ï­ö³ÒY–•î³gŸ}a$�/>ßg#¥K 7^”Nuÿ¿#æw‚HDä×Êšr'9wU5¤µe„²™}¥€°Dwó*‚ö%�QŒï)~÷¾‡4o†$UôFÁˆÀ4F@,áà‘˵˄Ìçó€ŽLÒéI"BfŽ˜#Ÿ5ð¡O³g�z ³ºÖ==�õFšÞž³¨Ó¦‡ŒˆÂø�dXNºõzá"«ùÞƇü!'~O$,—aºS¦ ƒ¬ÄÉ6Ö-Hö!Á …ÁÖ ÈÐKѪ°œ´Ô§Œ¶Š‘áõQ úüí 8€0«$,‹„ 2]nSÇ~¶[‡0 €äX,žxXÕÃÀ!ŠúðûMô×/C†>®Þ™…?¨úá÷·¯é‚6ÍкBÔ±¶µi‰>õ×A‹§íÿTŒ4. Ñ¸ð÷j÷ýô.Hü#�aÀ°f¬Ÿÿ.L‹áNß2Š0- ¥…ã�ìŽ{PV¤®&dÅú2„]‡1Ð*Ïý¬ô÷ž“á@Mf:Ñ9M „Ø9¤È�@\zø Úþ(>î.w—E¹ ˆ~±gΜ¹(„X™ššúÆ<ð‹Žã ¡eQÔï÷éüùó_év»3‡Úßë=>þü ½bš¦!„ Ó§O_XX8•€‘Ť�ÍUÀê4)õ177‡ûï¿…BŸýìg3…k~1 �N'!:]H�×u±¼¼Œn·›:téÝrµNõzÆœºT1«èR—.]Ju=ôlÛ€ô½õéÇåË—1 °°°�‚$åÚ5©¨Ÿä¥À‡Ò? ‡CÌÍÍÁó¼´˜ØÞÞÆáÇQ(2Ó‚r¹Œv»�3gÎà‘GI÷½î¨•%²ÑhÜÑ&W�r^yå03Úí6ŠÅ"nß¾�k×®¥@¶m<øàƒ˜ŸŸÇôôôõLÞ[·ná _øB œò¦:U-|ö³ŸMב™Ñh4ðË¿üËØÜÜ„ïûxæ™gâõwÊöõ½Ê[m·>?âü›(–j(–gQ¨LC’±‹NŽ…µZå IM, èî`oíÅDA¨–\¯Tp‡–eE¶m‡ŽãD®ë†Â°dÅŰíQ‰‰ú}<.�VȈ‘ˆ›Ù=Ú<›ˆ#¨�a¨8ê‡epä¿ïo�û²ôþþ¸Rt‡Ìx  ãD„°·§¾ÐÀz¦˜I±ŸoßË\+õâ*[Žº�ÙtmõšœNyÆìƒ2k¯wïIwÜ!Î<ÔS!òXÊ|Ö©+SÉj"l–Z+ß}Ÿy(£AWuZ£þ­– �þKÓ˜úû Bä7ÐÛ¾†ÒÜáØzȸ[MjÕQ\t@BËuØ»úä¨v âp°ûÞ ŸH/XöAÌO‚¨ íµWQ;ò�°³C1Ö€åÓ5²#‡8à[´ÑZy$Üä�e7òš—´&Wt‡ªîÙ|„d„2‰KÔµÚ~âÑI¤ }T3 ¡ä1PìyíäZŽ@l¨ëfR¡Fqê¹FóKIÚÁ `d� ¨&’NÑÊ�—H À‰Ý™B@’`)ZX!)8uÍ÷lÉ;}êã‚ñ§©&KX0Ë3(.†%È0ËxŸ0Giƒ… `Pf¥ »:‹Þú%øÍ­8 Ƭfsá<ñ&Gˆ:·AÖ4†a@Å¥˜:ø°â$ù0ˆw´`íÔŒbç^8(”—`«¢»úÂînòl3Â.~¹¸ÿ�õog[[ƒ`B±mj”$ã9iaØëטnkNÍKüOªG>ø4™öï‚Ì{I0„]Byèn^† ãé‘×ÛEýÞ³¦‘£{çÈ®,\ù�ŸÂ•oÿ> Ñ(:ÓÇ?8Ø>û»ñ˜l,_GŸü˜Ú‡5�Ž«ƒ­;më$Êß]rwùÿEÁÒÛ�R»0[ ‰F£!¿õ­oýë\GHLø[ý¡—ç fAŒ—^zé%¯§N�ÚW(DµZ=655u:.S¯×C±Xœ8ÙX[[Ãç?ÿy¬¬¬dÂ÷�é<#å÷ÎÍÍ¡P(`ss3¥ ©¢9üæoþ&ÇÁg>ó´Ûí´ש@sss¨T*™$ö|À¢î¦@‰"zÑìû>æççS‘Z?µ^­V+Ð딦I–à |è ßÉÄilB°¶¶†|0£áѧ/¿ü2üñ±Äù¼Ë–vßÉ&·Ñhàúõ뇘��…eY8pà@ª§ è÷ûéûìíí¥dù÷UÿWéê �è¿7É~yii ™�É/}éKèv»èv»8uê,§dž¹½­9Àœjá’ébaö0¸2 B�eRàȱhÄ÷‘š“h[â{+OÅÓ2 Á•¢Ù3M#²m;r'r'´m;²mÛŸ®FƒÎ.—÷v�úÁ¤ÕK9Zgy9ª4¬Äò;>‰`ã¶6^M-&™¹f8ÕY>ðèÿÙß>÷[agEj�¯ôÿ ªŸüèWþ€ Ïk¢<ìƒË•,׌ó£ŽÜg�,ÿI¨]fQèA@f<61ΜGE$CP˜ØI&@a�:r�)r˜Ž@3‹£TàÔ�ÚäZ��� NÿŽìÞD·u9mÇË {1ñ‰Mˬaóö•æª&Ã8ôw¯Àp¦àV§GëÂ:¡q8((µu&d yó ·Ï¥âsú×8òvsÔœ|P[¦`h¼þ‡×ë'?ú¯üC°€ èo_Ciî(È0r”3ÖøV:U�2艈"»—¾‚¨{=I³&–þàÀ>rZ”7ì¦Ê`†}@ , Û°Ë¥±ã4&:âq$±ÞO…a¡·þJ|‚rœb§¢:õJ¤¼/ÒÈÉq¹ÂQnʦ½'sÖ†W³ZK- jN  ÃÄ€ µ1žD £ï |œüXŒ�^‚=»åú!p$cM �Àå61­‚-TO£_®¢ë D©œ}�ߌ®¯¡w ‚¦' „�Ê=¡ºø¶Ä-6J¦S”¹¤·B¥‘ *`êÀ[Ѹý<¢V#“$¦­ÂôGFù×8êNš*ÚÑ$§@½¶Ñ"‘öÿI&ܾþŧ܅x·éL=* ëŸ Ã:(W ‚$ý˼†S¿öU3&ËYCh/bæž·¡yëRìögº?&ìÙÿGz›»Ú½<Ô®}uÀm²s'- çj·|-ÇwÁÇÝ寀dnùÚÉæ.@½³fkê¤WO Ï:QŒn˜†Ö½1.\¸p5ùzÀ“ŒGyä'æææ¹®Ë“2G:�^z饴ƒ>3ŶN¨ÇqpâÄ ´Z­ŒÅë©S§RÛÛ;¹dH-\ƒÁÄyR¦I>í[%üŽ…ÃõÔ-JMÊå2¶··±»»‹Z­–·΀>z½vvv033Û¶Sª–¾-Ýnëëë8|øpºN @Ä�@�?þ8<σ뺨T*hµZ¸yó&vvvÐíváyÞD')5i6›xõÕW1;;‹Z­–{º~h8âÚµk0M3uøšššBw4P۔ϟÑ÷¯:>årQaqqqL·ÔëõpëöQñØÉí.æ]¶àVP_8 ß-'‰Æ“¸DYÎ~¤ßW?”ö®£•† ” ÖÀ¶Mß4ÍȶíÀqœÀu�ÀqìÀ4ͰVµ¶nì…³B»ßÄ€(ÇÓà\ÅŸIÚ%¸XGÅòâ)4o>�N{=¶™²@Âú»ÅùÓkíÎÊ¿AÖÎ3©6Lâ(ø û×@|€ho\@åðC€i¥ÂY~ƒ>tÍQŠ›ÄCóüW‰óoù©Ì~ ™Ó^[z}¬¿üïá÷¯!£/%‘;NZÂ(`éÁŸ‡=»]ÿB¡� ÎUjù™3gĄ̀T*¨V«©…®>ÊïIù3yèn·‹F£‘ê?z½¢(ÂÂÂBºoÕçNPœ{}ƒN$–TpÝ*föŸ„oâpAäë&Õ"£ÞXÒŸˆé2�‹ØRÎW�0ŒÞ�Jí>ª{Ô¶Z N±>V ë†Ù5¤±8}:®~×kÝŠ' ”䢅jä5ŸÃÈHYœú‚âìéY}(Ägç aÊ:Î’ÈM×hìS7�‘¥µDg÷2¼�+ !P?n?pšû€ï3‘zúôÏ|ˆï1†[Auß1 �mˆÆgEú´Uå¨èÝ.Ô!àdñ?�™{„èn½&ÌâŒÂÌò,f�½/{Äô›+�íæñûprO4J ¶®+lkVñ°×¼ò­žÉ žP焹I]„ÉÖ³<œfÖ]¨x IDAT4è®­û�›ß :·žrª�’°� »-«Ó0ÜÚàЯ=hû[8U¸æ½æf À��Èo½~‡ DæÈï¬ý/ÎÔò;z+HÀ®„KN§*£@BÄš¡äü‹ú 4V_Bwå)0)ø a@ƒó2è\ÁH€ª¬3õÂþŽ4‘°}�öå?¨Ÿø™{‰ÄÿÊ$„ aX)å�sÅhª£H\ÖÍ5t·^G÷ÆW@ä¤àd òÚO±ô·‘ Fìiëà ¬de|Ç0ío3𠯽‰Òô2`X‰[g)uºËTÊdí:I.9RüŠóÇP8ø0«Ï'/'Jfqßñ°¿v{R¡…Á×„íÆ§ýæj¼^êOE_šÈž~Ö4FÊu £k:ŠBto>›Ž˜ý]°”9Z}_ó/T‰5M6*KGAQ"x×:í¤䦒ٜŒÂ5à@[3c9›¼ÚÜÉÄŽÇ£±HŽBUè¦îFÇ&—~V"ãPçº p—Ž`pû2HH?àLŸ¼×Û»xý ÀÇM’&à|‡ßÑ£ |m¿GÂa{ý7Üú‘ûIs`ÃÆ+ „•ÑfÀ²N±eÀYxöúU„A–‘kºSŸð@/&A‚¾V³½ÑúÓlç›mëÝåîòWJÁBnt—ã…9ð!&ü ã�½ÉÆ}¹u@¢hYëõ×_¹V«½Û¶íŠN;ÊèŠnåº.æçç•-0nܸáߺu뛇~¸^¯›•J¥ªÄãy«Ý¿ µGZÜØØÈXÄ:Žƒr¹Œ{î¹ï{ßûR·®›7o¦`doo;;;©Ín’Í‘‚�¼›”n-¬DìƒÁƒÁ CSŽNív•J%Õe¨íË ôÕÏóÓ¤(Šà8*• –––RÛß0 S qùòåtÚÐëõÐívQ­VÓíQáƒy›a!Dº–——3:Ýå+Š"4›Í1 ¡ÓÄôÄ{]x¿··Ã0`Û6Â0Ìls§Ó�ëºé1Ýj„3­×bñ¥‰}ó‡á¹å„Æ�Ì£VÆœJ@ˆE‘”°r’I·/b{ý˜v5-!ŒDè‹Ø>Õ0ãνaƒ +Y¦�#´ Ðeª�"¥«�HCåòóËÔž 1{ sÃvw®ÅßÖ9•¹Ç‚æÅ¯j£´›ÚۺШ,¼å�Äg@äÀ0ÑÜ>‡©È‡5wd;iBwª5²È31ì{ܾ€­+§ºDÅ"rùi ^jKG~os4åa„ƒí§òrḰ%»zèÇa:G€ï7±öêg°pßaÖ÷�,+Ý—�^]lM±å­ì¶Ð¼öhm½”…‘×y2l`²5g †k‰¤ü2à”-À¸ŸÀHzŸu^¿…Îõ¯ÂÔ&F^÷Œ :—rS—v@ú&wr­!ÿ­a¹Ÿ$‡XÄSºQþJzHÆ)X¶^ýƒ„&äj•& ¢aã» UPšÊ)èäR~ý�eñdP76°ŠuÀpc[^ 4j9•™>4)kghžLÚT�R�2wï{°¶·‚ÈkDÂ,L=!ƒîó2h�í°ÖÕϯÕO~øIfz7AÀkm¢PÝRZ¦ÜxF?�9OäâQʽ# åu7vÖÛV@ƒõ ´0q‡Žû—™S?k0ðH,¤ìÚ4 +¹ïQ 92 òÚe™RÚÒ³îܦ�È<ÚÞØ´!™Â'è‹Al€ÃX/©&à[�1Œ\ì˜$³hHÓåUøë¨AÃÌ(MÆàöEÈ(‚v•ìò)[¹ë�ñÆiòü&E:Þ„(ú“¯OXÂîÍ€¦�~� û¿fi¢½½…Ú¾UÖ= ‘ÐÇG%Íš—“ŸdVQY:…Ýg 8€0Üw¸soùÑáö+_Ì5ôíã¿Dí÷½lëÝåîòW@& Òõ©ˆÐª ‘›‚cBG�' íüíWhŸE„؃Á ¸zõêïX–õËU êÓ5 е‰[®¬¬üy§Óé�9sæËÇ�Ÿ¯ÕjïU ½À×­xõ„w�Þ“-f´ú‡J]___ÇÓO? Ã0P,±¸¸ˆb±ˆz½Žûï¿333ˆ¢»»»xå•W°··—æšäõªÐÞÛÛKÅøwÚ‹E¬®®¦ö³ùìE¯""8p CËÊÛ W«Õtšr'=Ë$0¥kQ I§‹)ZØìì,’l˜œ¨ý¯ÖÃqììì Š¢”"§:•žCM>Ôº3ÿì½i”çu%xß[F.••µW…�$@‚ྉ”HJ²,Q›%/’­ÍÛi·Úòx�év»{,{F�ûŒ§Ý‹—nÏôé¶5ò´mYò"«%�S$HŠ)€ ‚Ø�Bíkî±}o~Ä’_DF@Š–¥æ9y*Q¨ÌŒŒŒøâÝwï»—»e¤Y–•lûÉKÝYŸ!»P�,�DºãX┞ˆ+Du©¸?t0še¬"¦nû`¦ÄÝÏÔPslB;Ï¢ßIп/ xf9ìLr¯Ó¨6ÿ’ßq¿ôš3¶ŽÌ€=qÆæÏ� B·^3‡žÜúf–õô6_䦦®4~ð×ô †0HèØ\}Vý2†&o‚¨ ‡ác$Òø'É0“€ï�ëëX»ø8š+ÏÆ]fTFn�ñ( q{Í„·%ŸU2êkÏG¨‹ÀÒ_ ;êÜR ïøà ð[+lÕöþ m† –X>ýØC»Q�¼Zelq0`,]“Z¿¶Ûh­œÀÖÂQ¸íùD†ìK¯s\ú­ Hv%~aŽ•=÷DëgÚ’`h–Ž^<ã‚Ø<,žq–h¯œŠ\³B+,–Þ‚t['XºK øˆ¥W[ˆÌ+( 3o »:û&"ü6˜w€º°! ;5{ž©àÔÐûݞĈsàž—^óK?–]m*wuû\l3¤[7ü½AhŒâ(,3Sª TÎ zLH¯3ßcá²| >5ÓÆðµoÂÚñÏ@¤WÍá]ßß]yî·ú®aì’ÿ= ÜÏ ƒ�&:ÍE«;+$(\��¡L2"Q:¨/þ,fe2´\�"šY¹Yz­§9è^M·zûë?á–pÝÑ ™ÅÈÑO å XBŸ*(|Û #“C™üŸPH„�¬l±*…LÖ*ÊæRo]åTNiúˆšñKjV 0tp§ Är@%#AÚnÎá•âÙy�´”�¥ß^<öåÙ{Þ ¡�kBÃÊÙ0~`촠¼SŠQÊ;îÄÆ¥cá¬"ùЭ¡ŸÑ¬É§gÉE¾sÕk¬Æk·ïh$/„2@$¯ã’!@ŒÄL‹À¿té’t]÷=xðà/ÖjµšmÛ2.FUyN<ÔÜjµÄòòò©“'Ok4q0WpòäɳãããGLÓ¼[!ãÂ[×õD®“ q§¿Ýncmm� à ÅzVæ%v«3Žã$Ý|5Ã$Nô¾õÖ[qäÈxž— gÔu¶m'à–e¥ò0òaxxcccØÚÚJØUþ$¥ÄC=„J¥‚S§N%…¼úÞ1ƒP.—ûäj/wà^e�âÁõJ¥’ÌydÁ– @êõ:N�:…©©) õɲbÀ³0###É0{,=SAH K¥Ö6;…•º_�;¶ÕÊ5wé"¾¯ù«0 ÙaæTÁL˜¥¨Ã™6Eàl%$h„ºnf } È«rÞ“{€'þÿ¾Ð:å)žUÁèø~ÌÏ�Cã³¶ÿŽÎÒ‘Çs:ƒÒ]{^êöèïYåñ"ú9IZš ÇÙÀâé¿E¥¼ÖÐNˆÊ04£�XÌJ¯¯¾†ÎÆl,>ú¿PDx¡TۗÉœŒs{º$­æ…D«/o)*fë @ ý†têsÿs¡¶ï£B7o ­‰%:Í947O¡TœA±< a… HéAv[póØ\}2pABD2€ï^ûYéÖOdÞ;a ãw” µ]¿.4ó½¤n=¤{5‘^lUûßÌ`wwãt"k’¾sQº[ÇIÓ€u¤g+²$·ø¹ñCU0~�Á¿ˆ˜ƒ"2 Эräø–®ô‰9å|åu:Iñ º‡Yz+Ñ6Ô•í‹·±®0 *Éehô›ÑµÂ´Q¬íÉ µ�úÎ=J›b¥å+ê/8£±gT&o@kí¸+ad‰Ð ·›Õk¯w·N/e®U$ýÎaa–6 rœI »rÅÚlªõ-2Ѿ UVuþƒ™aèŒÞò~¬ýóhÓ†ôÒÔ^ýüI|+ND�€ëâuÒ(–™£Ê8F%=õ­T9† =ð»o€È²"ã’ºßmŽp’ZË2qö4@b‘àaA#�¿"\öxikY™©mäÀ=‡—¹§5aV%8+ž ‚_Õtëw™„îº.ÜæeˆÊ5I&>zëA/„A�ÂÂÔÁïÁÂs_K$ô=fm×Û;‹KŸDhT�uìzíöÚí»B‚ä»#dSk)€\Ma;0(l ÀÒÒÒ†çy¿3;;{`bbâ=ÅbÑÐu݈»áAÀq¿ÑhøsssÏœ;wîÒ~ÖyøðáGxà�6€û™™²º*EŠ‹æh®„Ïœ9ów'NœØ, ¬iZ0;;û®Z­K�È0 +žáȺBů[þv»]lllà±ÇC³Ù„mÛ)6Å0 ¼ûÝïÆž={ðå/ÇŽ»¢Õpüo]×±k×.œ?>T1pÏ=÷àýï?VVVpùòexž—bHÔ¬•€A�Û=4;ƒ’F£‘ Û«21€$Á€¾"Âêê*677“ù—8ÅÝu]¬¯¯Ã4MT«U¸®›JUzU]×122)%V77«Í®_º¦Ã²‡ÑL�¯*™àlú@d±Ûk·Æÿ+‘™ÁˆCëÔÂ(ƒ ’÷‰H$êä©b¥¯JœÒ”DéL%ï¢×\Œ$Mq(ßè^˜óGá¬kzám q<Ò˜gä“Ìí¹‡»þØ-Ÿ(Öv?O¤ÿHß!…0Jh´çP¯Ÿɰ3-Døý^,È JŸ…¡L’iàR%5‡Á}`®W1j5#5…yàĤ¡á ¥÷Hé¬ÏwVýn�íÿ~Í(ý ƒGIÂ@×Ý@gu,ýÐ%Œƒ0w@ölô…fŰ Vüîæ3ÑlC]éî'ÃÕÆðõZ¡¶ë¿’0®åÈ݇tzaå‰ë  °ïö ÎDì­ñ1Ç�N=Ñ�h†=É~ ,ý¦òžq�¯2 ]¤­nSuãè�.3ø¯‰p| Ý„f”a�ìiá e=pans¾gMM$,‹¥×‰¾ƒ¼í‹â v¦'ºñC7Kƽ �ÂÄÞ>w´ôŠSG ”³I 0ÒËk'¥B ÿntïXÚš0ÍÊä¯xÍù'9h«™$tk7 �ÐPÝs[è&ƒt~Cª§äûUçÈR™"ˆç*•±ëнîzèø¦™åûØžøº¿¢v˜P‚r\ØëfI¦*Qœœyùôp¿º½œ Íì}FUÄ&uM í.½@PgBÉ•TÎ!%Ì@:ÅQ|ejû4» Þ¸­®`ýNlR©F¯ K�­wÔ¨ @:õKYÛÿsÄÆA ÂÚ…ç0yh$ì‚SC.ciª‚ú´ê~ŧàuš`éA3Š?+ŒáÏKo3/H¾Æ|¼vûN ƒ€H«ñ­¼r€ �qñúúúæúúú1/îÙ³g×ÈÈÈn]×5)¥p]—ÖÖÖ6._¾¼„þ¡ù¤ÓÁÌxøá‡¾ÿþûÝÑÑчÊå²K²ÔAìX6Ôn·Åêêê™Ó§O_\XX˜S.èòܹsÿE)üõ{î¹ç@4× ŠÅâÅb‘#™‘TåU*S²µµ•škˆÖÖÖ°wï^xž×—žª|,îl:t(I”�‹ôZ­†¹¹9,--Áó¼�@¦\.ãàÁƒ `j·ÛhµZèv»p]7æÄ� zÛëÆw•=ŠogÏžE¹\N£,CBDI¢¹”2 [´m;ês™ûöíƒað|Ͷ_Œ?ñP¡Œ®i%z�¤»„L•{Õd¨U),T]"CµÓäLñ¡‚ªjÊ”O¤„Sœ(_‘)¤ÒAqi›Þdk fuº+'£Î ®'²†™;y9> €ÝÕcŽ»zìÏÊ»<*ô҉ćI3wfH�Á� \ø^',à£ì"-‘è0K$‘fÝ‚UJ]`Ótk*¿£Óš�Ø'À]°Œ»é EŠ´•)r£æg�Ú‹G~Ϭø¼Q}›ÐÌ÷ ¡M°Ô 4HòÀäÒ�~40‡ŸY:,ýUé6_”~kÌ-…yÙTaÖœâø�¡_"¡�Ì *“ûa–†ÁìAúžRXeº·êw(tH¿“HõHè½4}·×¸ô'yï�a¼þ11!ŒòÔ»·ñM:ÙëæUuèIpÁ•ú½íÍr§é34~ä¾OØc�U™žå~+PÖ¯ü iÊìê{$’AwNæóXY/ÁA˜Ñ'4@zV$Áj#�ð-3LÅ•È+•c¥ÞÃ]{nË®íýy¡[_"q ÑY~…ÉÛÀÐR×dŽ“Þ1B˜<ð=¸xäOC––ü¢=qðç[óOþØï*õ�*#|û@Èk`çµÛ+ ÛˆWràmç¾ žôb›×”äùóç/œ?~Ѱzæ9y©¥¾BAj�>úèÃDôøßøÆŸ´m{Ò¶mC «s‡[­Öê±cǾ²¾¾îD)ï>òÓ…ÁÌôÄO‰¶C†qL¡I)éî»ï~Ïðð0Ù¶ MÓÆmÛQ÷Ÿãn•©ˆgžxâ =z4±Ž3§€ƒúïn·›år9%uZXXÀßþíß& åy@!ÎÍ8uêT2bÛ6ªÕ*¦§§“�÷n· Çq®xDM„ϲ'±5±š!¢J°â!ør¹<ÐFX½Ç fll ËË˩ϡ2!ãããx衇püøqlmÕáKÖâN£iXðÕË\ÔhS—zÉñFéÜ8¤€DàÍ©ÎvšSQ/Öé^?«ìEšÜP\RX õÊ»¤lsºÁ´‡!"ìÐO‚ÄPF“W róâÃgIX¿mÖ®ý3³4þa^Od\  YS‘ bŸ˜%CK‹wIúÎ’Q H@3J°ìÑT"eÀXŠ^e†ÓÝè9�IY�_:QAÑDo;fÔóžwãäqwS¼¤™£ÿ—UÛõVÆmL˜!ˆ2éD¤1‘`˜e—wKº�‹Òo¯E¯¼·ùUÌ‚ÔË;^÷ÒŒ‰„ÐaÇPš¾šA`éd¾ê“È©ÎA `÷›þ9æ�ü1üÖ2@B·¦Ìê¾ûÜ­³ŸRd_ \yö#>à>ÌÀCñûè…a”'À(Ú`ßKºÎ¸¤€á}÷Âïl¢qé‰ÈBY�Q{£»Õ=ÊAG•¦52àhPªrÈ~úð3>Ì¡DVeš0ÂÜÎö㑞P¶1Æ®+ 4/=æÃ³hÕö½­»úü¿Ž¶M5P‡cåÀk ãŸP‹¥zöØ®0<ÓŠ�ûl�žƒÅ‹ÉÞݰRóS””—œOÑ`xíš°úìgöÁÒ×ÌÒØÇ�UüÇ®íýQ0O‡Ò3űÝ)ÑQÈŽ5)û6e¼¦œ§½YFyêÔ/<:D±„n }X/NÉo/l!�†.sh‹ô®•Ì< b ?èÀ r¶¯ž³ö(˜„{Ö¼àl—²7|#s*R§ÓÓ©�©­fµù’üàÞñ—¹ø"{Ì2ÃóBûoæÀ€Ñ‚¦µ¡ë Ãaº®A?¹ º.ccƒ!%‹ d;û[òë§XŽøMÍ,¾¤Ù:š—�¡¼û iðFÙ=¡†á†v½—Ï@4¡ÛÖÐô/{[§?–aB]¥Æz¥u›ëFÂ?ìí5ô@¾]_tvÖ-;Ôƒ=Ǭ,’&$•"D�/„ç766ÌÐįG™×RÃU‰ ç�l¶IòxkkëܳÏ>«Ð:4Q,ïµm›ã4òdfÆîÝ»1??×u±±±‘ñ-žéˆ-nãâ\°Ï¶W�¬bK[u6#;'²Ý=~ž®ë0M…BÃÃÃp]·oØ=xŸ™™Áþýûñ�o|¥Ri[ÙYŒÄ@Šˆ`Û6îºë®„õ‰�¯Îž=‹b±ˆ���c[¡ö.|¬„奺ÆÉÕ�²ÕŽ’ÿ‘‚w¨•KWÁ…:+^Ô39©×á4 ¢T牒œ{Þù½@1V@Nï=¨8Ü®&pPPRŠÅ¸“žuÆCôûж烰ȜPŽîE6z‰Í©F ÝDJÕ½`A)`EzÒ»ê†Û/Nc¾× e¿Žtj\€«�³$>GÕpT_úM'êÖ—¢m/DwCinÄkAü~íè„wÒ;å¯û%Z9œ‡0Q¿š¡)Å}¿‘)ÇXÊe-¡ÅB2u÷Obù蟆ÏzÙ(OÞt—�)ka6Y< >€F(kŠãû ™:8ðÓ:³­IDI¾7Æ®ÿøÝœõÃóR³è¥U¿uyNùŽüÀ#Ã~|dà‰÷‰9: �t0¼¤sWš9¡âÉ6»�Mt/Æšncâú‡"ëd ßB‹SGx|žª3(ïºÍKO䃄~myöîðÿ† IDAT�Ÿé¬žþ=xO8× ` �Á0‹ÑÌHæ ”†«Ü÷›ôýôgÝ(aôà»±þü_‡²0FŪíû1¿³ú °×V®5A?'Ñש’že൶`TÊ)7½Üµ‡{NU}f”�Èé—2°:«Fé& ¥hå4�-¨¯Y¡ µhþ.^r¯…ÀÙ³„`‰`jè:Ôf~‚Êå.*Å¢Ûöa„¯çRAt»„¡¡Oò6�3 eü3ü;õîy€ãÝ.ð ’Ï�û ÒÉäœW\o�ùܱÚu?øGе" £ÓØB¥»Ø3éaüÄå‹ûho©�blïÍX=wèºu[aü–»+ǾšS«È«`B®ÆŽ�ϵ^ã5ç5ò²¿0ÊAê*ñ£‹Z61Õ©E¿Õ¢Î‰ÄlŠ®t“T6e�K /ʳÖr€ˆ@?yòä£ãããwÚ¶­g]½â E€H)1:: Çq`YšÍ&–——ä °7›Í$¬0ë0¥‚‘¸pWåSŽã$¯??;·’&ÙÀCõ=Tರ°Ð—º³oûÛQ©TÐh4púôi4�\€•ýw,%‹ÙžT©�Ûí6žz* ó}’eªp�I U|k{íÑ40èó�‹š�yv7”}½¼9ÇtöDÚæ‡2Ò Ý~Tz�DèWLŠt‘£VÒËD>©ß±´ÑE˜•Ìü.>ܨèoGà£�õR+T§„f _…"ƒÌâp“¤Rè4/ÅÉÈÌÒ]SŠoWyiùeÖDC �øëçl»¥l»Ê®Æë…£0!]]{ê.ShæÛc‡.kx7ÌJ-ÔŸ‡¦Ÿgg–­ãïœQ¨ÎÀ¨LÃk,DìEù}þ8l ’Y ôñmšUÝ«RK�£úælH†aõx•¹æõX¬_ ûÞ$Êfyâ{ýÖåg‘3Ot…âç�íf–º «8$Ê¡ ©ßz.šaY}ñ‹ ÍFkîI¸³·‡Ù+©î‚è§ÜT/_)Q™¹�µ³:u°Ôˆ4ëýVm×fÜæYh°†Æ#ïpþ+…32ðÑXzCS#Kç rJ=5þþ%еY´Ç »zÌ Ý~�5ríß8k'+`[C¿¥löòêxÀ,@œP‰'Ô0àØ¤”5õ£ˆœs8ýoº’e ©—oº‚H‚û­±Ô&U´¾{Ý-ø�Õpž Ìì{\7d7®^ŽÅÛ¨—S|;Ÿûƒó €¾ÓHö&sˆÈPÏÈ*2§ˆm =§àP ®,£’=!Å€H €xž×�››û�¥R飺®ëj¨¢:˜­Ê£b†ÂqÔëur»wïæR©”¤› !077‡V«•ªÛ—:ï¿f§ÓA£ÑÀâââÜÅ‹—¢!z6 ƒƒ Ø3222»WE²+Ö4�Õ9Ž<€ÿŒÃ³`‚™qüøqÌÌÌ`aa!Ù¶,Ô¿Ö3*• VVV’ÙUv[+Ç¿KØ’@F­¬èàr;¡½hèÃêT ãP�µ�嬩}F•ºÆ*Ž.I¡—aú€õ_�ã÷é×îW`p·@†®O!wýãâ[•6f'Qeæ"&0ÐQ˜�Ôë壚Q¶I„2"½\ƒŸ�’Ôß•”9†Þvp =,1üîzÙÎù%»6ä54bfÃ@¾¼SmZ¨ïëÊ“‰Ä~&éX•±¨Ö£þ¢Œ1„"ãqJ¦á˜â÷Áz ˜öäíïè,=ó©Ì÷4è:xÀ³`€t…êD4ÔM0 €”–ÊdE/B-ºfyÅÑÐ^{. ™4Kïð¿gšDÛ^Çý01ð« €„½\ ÷/Ú‘°û y�æ2¼Æ|ø÷2ÀÒ±OcÇ}ÿ0Oè ½ ^p‡¦P»æA¬û °Ð@BÖÍÊÿÄ20‰„fÀ,Ö”sS1ßM yõöq8X}ú`>ø/aÍB„ÒªT®€ÕiÚu:‹Ï�…–ž0J¿äwê'ƒöåìÜ�Ä y|�ö @DÎæ2ŠÃû é–rRd¯œ ½dAeå¬S™Ã¬ÄJ^¯('ÕK€4=qUKïîŒü�I|l\z<|¡2pxqåÖõU.6©XÜ@©TG©Ô‚m;(<F]gè:Ãq¦Ðh¼†�ä®ë½»¦õîBôÿ"€CÑãЄ¯?VÀŒ”nkå¬õìÊõ` ÍzvkbhoêZ”dIe)T„QBmöF,�|2d¶uûÎÒìë?ŽRiÅÛ][tŒ-Á0üˆ åe¾î#Ï\7doêuàsŸû:§rÈÕ´^½ù™WcþæÕ``^îë¼Åÿw3âïV’U´Ë)H61 ZuÛd†áð3,EQ»xú-í¶ X¤FD`ž:uê’ïûÿú¦›nú9)e!.œU§(DÃñIèÞÅ‹Ÿ]__¿022ò}š¦%¹&†a`ÇŽ¸xñb*WÃ0Œdƒü¢EZXXXzâ‰'U ­øböl n(ºÝxã�‡FGG÷(6ÄBÓ´±h.„ÕŒ)%Z­ÊåròÞñ¶ù¾�gžyÏ>û,<ÏÃôô4Z­\×M� U’¦þnrr­V+±÷͆/Ʋ3ÕE«b­ø›jv›÷t ;ºR¯3Ÿ-¼"òº']¦þ â¸(‹ÃÙú:ò.ÊŠ�¾*ÃH��L«¾sd_Yíyjš�íæj$˜—`¸Ìlf˜Àìù�]P‚œ"Þ‹Šxõ5td í™%Ã.šnqÁ£ŠÃÕ §ôvû[—¡ø‹µ™ƒVÛ‘e'e¢îL™*ô s™]‡‚œ†„K†ýŽÒ5f¥ΔñaîŸ:F_@žº«•YÝ.¹^s `I¤™û2β·yN7?§Mkz†]†”^渢 ö¡LB<¢¤j%z\érW÷Ü�öâ@XKê¸ËÙ8ùp˜Ë• I˜?`Olžk�íLœ¯RËÖð4¡AʈEe‘¢È|Jf‰Ís‡½Šõ_Àô]? 3]PGR¥$oEy)«8ŠáƒïBýÔWÁÒ‡ú!kxö¡vûòŸ Ø87÷aý…ÿÊ#‡>ø9€~ ¾DkãE �ß}EPÀ^æ»W¥§”mŒpo�SeQ”Ž©gX;óUÔÏ>Úcyâ×’>føïP(Meš5”NUíc¿Òç ³D}ù(:—Ž�4#l>ùÝKÜn^D+–8LD_C(½Tƒ1Õõâ¯F$¾ka†Q T¨�#†–��`hh ÃÃ@© áÝ4Ó€&1ºŽv�.YD#€˜ ÍÄÖüIŒW&áS)ùÌœ HQú`Ì kê.æŽÃéú€ô tûÍ•Ð϶`/z^çÞ]Ǽɡ5.>„èéŠ³ìæƒ¾‰bÙ™zWœ èý ™œÄt:““Ÿ’^ŸzÑï—¯ù~u:ÀÖV—¿ò•KÛ‘«-¼ÿ!ЫÅàÐU’Aÿ� }73 yy$úm ƒ­‚yS¡*8Èë"Êm•+%½ç’¸°ñxçÎ�óMÓüÝ]»výR­V¶m'`A ±îÆÆÆæéÓ§Ÿ¼p᪮봴´tA1«²%š¦ajj çÎ�ƒã8Iq®&‰«á�õz�_zé¥/½ôÒK+HÏ»$ÀËuÝ”Œå©§žzÀ7ÔÏuÝu×MÕjµÚÔÔÔ±×úú:4MÃððp¤Tâû~’ÿ³³³³8yò$\×í³úUƒcåû>J¥Rbí«•‘‰_¿\ÔÚ–¡¹ž˜ßÚ› ª�de l¨éãDIs³¯¹M„\{£¼†aŸœ$‡1‰í%S³0Œ¢¹¹Q¡ª¤&€ÓZN€î õ pжéªs;äz$ I­TšQ–5^tcæ'Il£”j, /º[§�$ þ*˜³sYy©¿WêÈ9@D] DÉ»{âÁxäÖ(ÎäM§Ý ÐçÜ”:ž˜úZ+$t†w­χò9 ¢Rd ÛÛfå¡ñí ±wQ¡º#ìpsû"ò ›ªÿ§ô*J‚r4Ó„°'ÀA,Ò Õ78À“ŠTÍSÖÜÔ÷4zè#AŒÊL³–†¢A¶Ž÷3|¿‹­—þŸ|„Œ›†Æ…ÇQš¾…ÒXÏ݉�~-‘骒1´ótVOž–Xz•`�î-‹iäË��ÓF{ýô×Dø¡»ºÃƒ]žIö[rX0¥w™c$YãÁtJ;Ùq(°ïÀiÍ÷ŒÎ©'¹„¦cùù¿Âôm€aVÓ9 °ì!6TœöÖ_úHhÑÜ„t‚ÎÚ äÏ…ò6×õ )˜{9ç­�ÄÀ'ÑéKK¸ŠÂ0©ü}oV+ ýžšð|~óPÙßÛG’z+S¹zfT÷½Ë/|)’؆Ç,à�:Â(~õÂ�‡…§þ ØwÒÂB¯s*bL�¬tr€tóJ+s^ö mÓ8Ýîß©½ÔZ<öXu÷ë�BˆÛ‰ ,Ÿ}37ÏÂG)ÿÚ€þã¶8¶c7¼RÚèl­ ÓhÒwó†[)nú·ŽmÝ:ýÙŽ™>"à(—““@¹ ‹@¡À°¬4{c s“09®;ǹºžfx¶“¬õî M“Ñc ÀµaR¦ÞÏ0¥ØÚùî}÷�¤üTêâ˜9*èPÁLÈœÂììÉL°g<�˜°ÊܨìM£Aøó?4j¸¼R%/ÚèÕr`ûvK×újòï62è¤ýVP^v&D^E·7Ûõ½š�Ÿ#ªÅp_æÉ'Ÿü2€ÂÌÌÌ×u]·èRJÍó<±²²âH™$U«Ï—G�ýÂââbiÇŽ?>99 Ó4 q11ÜjµœåååÍõõõG ‚`ssÓév»ê¬jÛ³D }C÷GŽyôÀ�í�;w¾¡\.Ûº®£Ñh¤$Rª¼JýwÌ’ÄìFüxuuõüO<ñôÎ�;íß¿w¥R1,ˆRìCCCXXXHÙ ÇŒHÈú€ü@ ×õ´õºSp=©‡]; Ì#R—= VÒ�cîwÌÉ’™1 0ÀNÜm"ås ž¦”F$@º‘t )bPX+€5=•÷’bYRܾò“’*’Ú.†X=…fcÐŒ0QÃk-½ŒE‡,2”ð ÌÚ^¼^P8Á*¬"T»WE᜖ŸÄŸÀi#ðZq !slfØ�¼Ôï«qy¡ç5 â‘uèÅÿ#%é0éÌh•Åâ;æ'ôÜ‚²7I›&„ÆÂ3 „®c ¥È×&'€Ñ›~Ô$e‡ -–rD{˜¹OýÆ‘ûQÂzÛ¥Î7D~ {…©GIò"I_1º«Îj>”÷¼U3‹£¶Ðô3ý¢,hŒr-,rF 8U’Â0´ÐÞœOìŠYú‹øº]8Hd pšh¬�Euê`Tœ*hž2V±è¹Ê1å±½hÏ ¨/l¡4²Gy^úû΂èð;“Ø<õÕð} H¿ƒµ“_ÆÄ¡w‡š}¨¦žÞl3P¨í„=}Ýå³�äCèÖ½Fuözguóô»¡õCKöÐY?{É»î?è€ P` qîð®ìÊ>�f¤×•8%ó}KJeI3S÷¬Jܸ'? à€�&È(D2èl¸«—&‘0+$üõ%,ý3Œì ŠÕ] adYJŽ…³7Òí ¾ò,6^ø*ØwÃ5`¹8›g‘¶ÏŽÏ•˜™‹�IždóJаFÈœu…¯PtÊ =ßt›K¿iVv|š�ÂÀÖüó(ï¸3´LÏ9ȱÃe¸«}©¡0z]´Qæ¡âÔQ¿t^·–A¨4­Ÿ¨]ÿ¾ë6Nù§Ùßð£3áÏÐlšM¾‚²$ï3™0M •J(7³¬1 N‘„D�iuõV´ZahˆP*¶�ô˜&çÎ⨠†¹M#å5ƒ�Ócmb`×éŸû@´o[Ã�,¸QAÎ[ßú~„–ùìM|�goÔù›f¨×ÿ¦¦é­M$)[V¦§nh4€ÇkÀq¾Uûèí¾óW ~ø»‘y9ÐÕ‚Êé€ÒË|ß¼ßo°˜íµåuR%~~^uæÒ2ýQ€$®ÅÅÅÖâââo°:tk¡PD$|ß�F#8}úô©)I�^†Év¸ iYìòuøäÉ“O8pàŽ‘‘Íqœ;MÓ¬jšÆ*øP�ºÔòˆ¡A«ÕÂÊÊ }ýë_Ÿ?þ‰óçϾá†vÛ±\MJI¾ïS»Ýž˜ššÚ_©Tdȸè¼Ñàê¥%g÷ÅU¯¶Ù J’YP„ H316¾ŽnEƒ—½¯’³v�"3—«~í"m�K~›'¿„Õó_‹õ3þ(‚„®;�Ó®AS´YŒêî×ÁÚ}�Â~ä4Ñ”"¡wágå¿Ó™ìÔ­ãòÙ¯'éÚ,ƒMé5û;úWåÏWf, Fi\�˜@‚4ÌZdåIJ×”‘´§ˆÍñœMø^âŒæ²ô®4ÿñ­¬'À°^áyJê½Æ)·dF6P# Kâ#�EÆe9Ÿ)o)}°ÔÁÌ6Ò–ÇzV:FÒ“Ž^,¦ºÅi'£^¦êx¤Ô©°Šz!œÉ¼#¾—:dØì*!´iÍ H¸`é�Üð÷�nü3ÝÌÀ�‹ÐXJCir„ò~É~Rå�Ìi ÇNkþê €V�XÎ%ö:çQÙAºY%ÒкðìʬòDﬠNĬ Œí3�üߺ«:vBÓÐ9i[0¥£E�ú"œµ38 Ïy" Ý•Spš+(T¦z�åŒå¼Ã‘ û_‡¥•s@(±ÑÍÒØÿ´g~ÜoÏ;ÛÈ“Ç�Å'¥QûuݮΆîh@:¶NE§vű}°ÊÓЄ—J“,Á�‡NsíÕ³(�îC±vMòùý6½ÉÉë.DÎNÉÈÍ®tÖ•™{I³ªDàºX=úw„=²æÐ$t½ !ô(?IBʾ·…îú%4W_BçÒ7Aº‰8‡Çìríò¸©�–ò3q±C:/ƒ€�dÆê{î¶?4Z¦F„V—éÄ9÷ä© ÞqEÚéŠSwL‘Ð1@Ü^x|YJ8$žµ.?}Ä80ùç$´÷ ˜èn-£<ÙÕ4�sQRr·tÝÂÆÈ�û!—°|æ¹p !�ˆÄ†öÞÿ±­SŸûÝHkÆAažÔ]hâ¸p]kkô2×[bàQ�lè¶k*1÷¡P00=M¨TBæÆ¶Cð‚˜J³7óó?!ì0ÅL�j:�<=ÕtˆÊ¹²5•ÉQeký ç>ØlÔÇ*‹£Ç!|èC_IP~8<œ \bðÒj««[øÌg>�£ºZ"(’ÇßÍäåÔ/GÖõJ©­—H¶ëd·<¤SÞUAF�!jÈšÀ}î¹çð|΀Õ Ì˹.dWB îÉ“'`Ñ1"ºÀ;¥”"N=�ÕÕyß÷á8Z­–——ƒ_|ñË™n·âĉs„ ‚ˆDµZ}䦛nú¾ÒÐäôå-ûàb�vÊÄ{Ÿ¶Z�Àhe ~y ’â�”á>¥�øö§ XRQ¼”̯Âï¢qîq¬Í=aTW+ŠEÒ$’î]üêN·E÷ gÆìÈ.ÐÐLR˜§Š2Ž]QH äô Šº™¾‹öÜ3è¶–6!p›Ïƒeý97|R¦A,¥¶#¬®FC¹7Á(”á _bBʬA/y™t;`éÇ‹´é53Ǭ?HÚó ¶�œsûs�Ø�;æÒ—`3ü¬á, §g’ï2*Ø’Yꨀ” ©dL†òBÊ)z CéÌ¡ˆV˜I/¥x[$ËpÜ8)°DÑáOi<È*H¡›‹`†Œlp™|€¡g¶O+ï|`‡Y™úEú�3GBÌD.`†P(×B‰Qσ!â0Ñøœ“ÒsR4+9N¤Û¼ð†ßZùK«¶÷C$L�IÃæ…§0vý÷BÓ­�å@”mÁ=R'ÉÑQ(Ó®¡²÷^è…Š"I£|ÅN2¿R«í­¹0Ã#þ‘Рé$°rôÓØqïOAv&”�R}uæË( £rͽØzéëQGÛk�ïÿ‰n8Ò_bOµŽ¿tæÔ�ôÔq]?ûùîÐ5ïø˜n ՈěABFÞæ*Ö—Ï$QÜu# öްi;nw›§#hn€LÕÙÛ¦ŒRÒ-(`,Ü�åsQö�sЈŠÿ–ô; ¯µþ—Öðì[…fMƒB·á¬Î¡»tRz ÝDat'„U€[_�·¹é4ÁF ÝNÖZ¡‘²Zu 2C;ØòÌS€îƒƒºßšëdÀ‡ƒüŒš>ðñàÖ¾é1ã×&F5.˜á¹âùŒ‰šxýî™ÂøæòÝ:›£? 4ó~±+•vÏ «v-^Ë'¯ýŸ�Æâ3�…'êªì“eKNó?é…ê;‰D1tÔ/<‰êµß² #‰[Ìùj1R.V�Pq3 X<ù dàƒ!HèÖÇŠ3÷|¾=ÿø© s“>Wž³¥+Ô@ pl,´-aà)t»À¹s´ X´ O�ˆ"…R#4!Hß{ó/ëë…m—1> !aobÃ�ÔpŸñ@øS ÛÝ9¯© ‡£û ¹Zü{Ε¨=8P²–}œÉE¼ï}ï�èÍüy™,ˆéI×ÓüST«§¶¦g@�HØþ¿@þ¾Ù”W r¶$RQnúÈÏÉ:e„Ì Òö§Ù FÕ!ePƉêð3HS¿]wHS¶#–sYÌì>ýôÓϹ®ÛÙ±cÇ�ŒŒpl�˜ýp]­V‹O>ÿüó§ÖÖÖV3ò0_Ùoê6 f ×._Ò6 ÷¨Ü[›5à ºnÀìÑYtkC¥ƒU!¡j?8UõÆ/ÂÊEz4Ï>‚Õs�D²Š03šˆ$HH0Å]Ð8vY‰0‹t2ZX�J,=ÿyì¼é½Êc`ˆ^_”Ñ+TSב®(cl&8sÏ`ñôW¢w!€ƒMéµÑ˶ð¾E’{®�0n¸~\Ð 0üÌܽèõOEo_ÔÚìõåYv²“À r¾ú655Ä"Ï0^³³TIR¤pññ„t�*S!XD’zNÿ_ôo–!mÏ,A,Aºy½^œØï·—VÑo €1zÓG>à—Á°Âý¯!èzÐÍbï8B~´L€«³œ Pûÿ¾wk5p—!CÓ u4‡ö¾í£šUùq€&cÖ€„Ò Í€94 ½<¾)°F šî™0õdbÎÖeH·…ff;L IDAT8‡%èÖŸ¸ 8Xîz\3Íû!4�::�E”†gÃ!u\Qæd(c–¨ÎÜÔ2žf—ÔïMš Ç£=*À2X•�»¤ë£· -dê Ç1<{'ˆDϹWöäW U,“+7 ½| ~s RxBÓì·‘f½Mh&“Ð7«{ßpœçêsO?´.æ¹bqýÌç륯ÿ£<ùAÚo“`š a”ÁAͳGÑðŸÒ‹f{d”u£Ý.…Ä‘‰‰^ aše àn.'s2ð×" а)Ý�­î†{ÚÜuÃG ¿8C’³JE¸è.ž«9¼4‘0¢ý¬X‡ mú¥Ò "Ëœ(­›I³f›¦ožœæï¶�‘½M?òËÎfcd¯mxý­Ö¾ÝÓæ¯L�i\²L=<`|Øt¦ªóÞÁOŠ¢UeBÊ‘#Σ �ö.ͬ¼³8Z~ÉÞóõ…o~Òß<™˜ìÔÏþ·§j×ÿÐ&Mÿ‚†N»‹Bý2¬á]Qs¢7{“¢*nɦ�¾1†©ënÃÜó�…�(¡Ã¬Lþjø U�Q-’еð]‚hv�ìSnÈò«µ¥Lç\djdjŸ,¨ÄÒ\©ù›’¾�™àû¾ÏÛ ¼nÿ¢Õ"¬®Š«Lœóü½FFå2`ÛIÏ8amzÌ ' ƒÙ¹s?Ë’ àéIÖ[G§ep4äˆ�Æý`' j>˜v¥¬TM €¼ºlÊ+e^8çDR“×5ô[WfOüìb©)ÀCG¾õ¥ ^²Lˆj¿{¥�^ÚfÑrX€uüøñÇ�ÿÄ]wÝõ®‘‘Ý4Í[,ËâxàÞqœ‹­V«säÈ‘§�F½ôiu€02—\,ŠSwÍÚ£×ü:iæ]½g …BÅá)XÅ!hV 2*®º28ĈS~‰R‹:eØ0÷ºõ±HEúê‹Ø:ÿ6æ"ö°ÛÉ�Û>!½Æi�ÆD¤ ?R@BÓH3 ½úŠ¡Ûc· ½pÀp�:.ÿ,&¾ T�'C›¬Œ¤¤)z'ÔûAŒÆÚÙh>”(�ÐkFeçìuñ;K•}죦â�c7ÿØ­ þ0Š¡X¨�uÑ+n#§!J¾AJ‚Ä8œP »Ç±Œ-ð6Àìbð:ãÂz�ù0·^ã2ÄÔthX£°fiw!…å‰Ù eÎBM–Nfx!ð�èo$ˆa™•é,Ì¡D'4³<¦™åº0JÍÀmœ, ïù~1>„f PÛ�Bm4,(cÍ=Q*ß#qAŠSÇ)qª¥ˆ1Œ‹aF˜ïКûȳn€AB³K;îûÇB·ÞÉÅ@Bƒf Á�…VªÂ4‹‘´'üQSü^1$¢$zI.‚ï`káùD*æ¶ ºËQqÛÐp·æ>©Û£× aŒ„úéÃ0o|Ìâp¯��¢6•jNÄ å“–—¬J¹O\;X$Ú›ópWž•0ó!p.I¯yR/ŽÍ�0& h/¼€âèµ°*#½ï>;Å=) tûïÁÊÑ¿gÙÈ‹~ D�„x€´Â3Õ=¯ÿîü��?s9‡Ý“­Ë‡[þÏÒŽû¾bGB{ˆ4}'`…a¤AXº¡-2ûˆ):!,QTfÔXqdRòß�B"è4Ë`3b šê6Ùk5Ý1íÓÞhõ>k®¹C߀ÇBß)H×™4H¡ƒ¤¡ J†Wd…‘¼ ¤ B3@š Ò,Aš)H3«B3«Z¹ø{æµo9ÆÒÿ·['?ûY9¸XL®sS£ú½£Ua”lBÑ"è:Ðrªæ—OÞxèØòÈŒ®>Mè h¡;œn€Á÷°äp»eòn„¤éÿ¦:{çOË©C?Ý];ý‚YÝ9#ôÒMš B#ÍD°u<4"¬¦G%� ¡0ë*u–„JÀ7'1<½›—Ï„×?·g3ÿø cUâï²ï¬ éªÃZ´Õ•Xß žúÓ/¶þ8SKdã ø uBžee­ªÁ�ÈœeF²ž÷~W#ŸU·K 7£+® ít-Ì›#¦«eçP¯ Ôë4`ÛyYôÏ!ß! Úò¶ùV7bï^ V ÁO©‚˜Þü'’4]çÐt:»áº³)�“gJ�/Y#Âk·è ÐÍe‡ºóèÈ<7.Êÿé\€<ú4›—�M�ß®øD±œ ‰ˆ©Ü-æäädÕ4M€�¶¶¶æ:Ž#9š�tÒµ‹þÙ”|Lß=c�^÷û$´[ÂÕY@3J™†Ù –2*ozíÔ¤ÜM†�{ºNdÙP¬Pr¾‹ Û„3÷ VæžBà¶zÎ.$8ðÚ/JgëE{@fÃÃz×P­P,Œ^÷S$ô�±æS c{ï…9y}¤s¦t�Z¼ ¥EœbfÈ…˜{éËð;á':H³ ôBéÍÙ¼ðH¿u¡?~iü—£ÅØÍ?VøWô19j“�_ššŽé“=œª÷HÕ�9..?úà8« ¡#p›‡gó) æ£û2€�¨�q¶‘cý½ÝFoúÈ[ø"…IkÚyÌr%ÝÏpiNæž´Nõ}îÅB�}�åaB3l�n{B/šQ`hšÎ$t‡!F(bÅ„^@iüص©(ÿƒ‘Ó°ïIøT¶!Ó6é�ŠóK´V.cáÉß�0ªšÉnýâï³ .Ú“·Ýe”Æ~Pèš aU`�ìBer/0˜ýž¼ˆ·«z�Ÿ‰=,~g ¾ôq�Q ì{güîêcV,X°bO۪ܲÎþ.@‚e³6…á]w f!²×ŒÈ.q©òEÙ1a–“: –>æŸú$œµÓ Ð•Éóšó`C³F-kdï� ÍÔAZa7¿‚ô~q 2Ù+Ü+¸]·§¾ˆÀé è68 °ïB ;ܤ3Õ9ðßUŸ;ò ¿qFæÈWu¦Ð«E­23fÊwkVù£�òž&¥+ }›e@já_œ¹7~˜VŸMÙÉäÝxî.}ý÷¯ �ÎÒÙx$p[§¬Dçð:€:Ýu×�Ø»÷õh6©ðÕÃÿ©:T‡fí´KæÒ„ DÀ,:®Vhº…’ê¢HBƒ0ŠÐí!« Í(„²%)Á�î—hþ‚@>À�8­•Ÿhžÿò*ÒžRÚM×êæÔ¨V²LÐè°ùï§Çt • ¶Ehº#ö§ž¸ó¾ÕŽa'’=Í€Q¨`hl¥j ]Y‚Œ‡ð` A{ kó‹ð»u¾§he©p ;–Ë3``x|öôíd�>ör½H”y5‡%’�Ìý¾3I_ó.~ñ—ÞýæÒ?�™ÐG†+BÚ±ľ´» «Aë›/vþðÈ Þ…Ùî•@€@ŒTH¿óÆÂwÏèw”l)Aõ }âl÷ß=ó¢ß– µ.�WÑ ¥«¨ÃÔæm^í•e^dNíu5ìË ð“•²ÓÉ[HäÕ]WËÀ 2WÈ‹ È{ B˜‘K`š”+ùw Ã�¯1 ß9LKÖ9H=ØTfájP8)’.- ùV¢ÛùŸoâx%i™jÇ*3¬Šê²eF…¢¹´´¤× ôç´dS§=ô‡n‘5~«m�^÷/Hè·†{MC±8Œêä5 %ø�—Ó’!%£§oWóÒR@ï6ÐZ} 2à9 ÈÖ*6濉€ez%´X^në›Ò­ŸŽ ãf$5h¡ß–4µ°pÐ%·±üÛ…‘=¿@¤í‡]³¥³�`xý<ŠcסPÛ ¿0”Òs’Èøî§ê&‚˜¹ {&÷í/¢~æl®Ÿ ™š( ¿¹8Uí¶žùM8ƒØ„«;| 7&î±Â€0,håÎÉç\©¢}®5Ûp½Í^‘¸Ø�à Ÿ¿g„�‰Ëv€ÝúeåýaGž¶¿ ÷$DýŒ‰ò÷“7¿+Ïh/½ ~³°‘ˆ³–(’u ÃÂÐŽƒ0˵0…¹N =–H¿ožó›J»¸.VN|B�-nƒ6K¿«—wÐŒâ{cúB3Ë(Î\�bu x½Î9]Y¸A9!tÄŒ�s‡AZOÿ¸›/(ìG3úÙên\ú†YÝõ!ôw ¸ë—Ñ.�£<~Mjtlöo¥Juíˆ_Ëm­†Á‘Q×?p[Ç¢µ¯8k8Øùwd–ßB¤�}Ý�9Ø#»â­þì˜>ðÊ0Í Ì‰^nFàwál-¡5"’*ùĬUIh34së{ÖOžy<ç:ð¤¿Õ‘[+ð5„.Ãjöä­ÑôÂ{XJ“9Z²‰ò®[Ò?ÃË‚W_ Á‚€ñay-AãËËÁ¼Ò`êòå•ãwŽšwT�@¯½Á{P××54)ù’°îz¬Ÿ^¾v÷ºc…�ò$ tC×Ü {h´B)\‹9æÒst›h®œAÐj„Òtb�ˆÞd•ÆÿFî~Û‡Ú¾x€üþ7—þÑäˆF¦A{ &]gÛ­¹áaÖq«æ_=}çëV»¦³ìz¡ŒêÔ^Å |©¡éøÁíŒè€}µ½ãð;›Øº| ^§åÉ� ��’ë ¢p°Þ¨î€”ùž94àeŽõß>0<½+gŸ‡Ð¤o¼û¶Ê?*ÓdÉA©@\°t �Ll†8½äùÖ[޼àýQ†á+0!؆ù�Üa¸qŸõæ±aíþJ‰¤¡‡:3¡•§Çõß:°×ûëO}¾õå ´ r˜ï+e´ þ=7c×ï³Þm[„®ÃtfÎýæ#ßtOåÔ4ƒ,®iãs%’ç(ªÖlr›Æ3¶W’žå¹»] °1RºX_'¬¯_é}³Æ6¯�ï0 ’ÇNä Qm‡¨ãƒ#ØI_ Ù^�ÛÄ•çœ8ƒ€ˆ�ÞìA @²Ÿ{Ѐ|�‘`¡4~ý;Ièo ß]C¹4Š‘ס-ô0‘ú[ ªzQÍ>ê—žÂüÉ/DB¬‹Ô@0â!ó,×üÎê“,½µX1 ñÏúsRot–»«þ/'oü�~A ÒLÔ›«ØÚœC¡XÃÄ-?ŽÜó†l’9@ tèµYLÞñ#(_:Šå ßí‡I¡Ûï*;~¡uùé%½-Þ†Bx¿ùÇ&ø÷ÇÀG·Ê¨TgQÙ_ €À¿âþŽ•ïnkAІ˜¹Ëà¬mtv^åe�¥WëæµV7ÍòÄç| t7ÏîMÀ(÷r®ö8Ûö÷¡„nâ¦ïÃ2‰0 €f•¡†ABƒô]ĦšYFeÇõ0ŠUpà¾âíØöo¤�ÖòKZ‹IÒ¸ßÞ< ºUžø!BBX(ïºVy$ÚÆWa¿wh-¿h:„ÿ—½7�²,»Ê¿}Îßñb̬̌ªTó *Jh hÑbX€d·Y¸ÝÝ`ì^«{ÑØnÛ«»é¶ÁË=¬e¦±…Íd� , Y¢4UI5¦*K••Y9Çñæwï=g÷�s‡sï{‘U’À%´ò­•Y‘ï�{î¹çìoïý}ŸV“s¬“}”%Wïô&»çþ§pé¶W‚å‚p€þå'á5—á­oh.®(5+DýmèI/«Ñµ4*èGÝk¿íÖn#éöÏ~c Ò¯¿øÍ—LÕ-וj ÇàÏÆþù‡‘ vÒ§IÌÁq?Ö¾å�¯ÙÿÚ>=#•%| Ý=Y�#¯xI÷‡X' ­@DpçVд4†l’¬‘„7í _�ûžvÇ;R€H°N�S<¡È“ Ý¡¦gv¼¶� Ñ:õ¨5A+ ÍIe¿¯T»™ÁJ!¨­Â=ÙÆÞ…G ]0z:è\ìÝ{Ç-Ç>í9‚}Ÿ°Ð6jW»= ­“˜qa÷ŽÃÏï·Íã!àø-̽ãHçRîÓëÂ"lÝ'À[|–=¬5¼¹›�° ‘r–ˆ™ 5¨rLPå|ª!Óç]11¤ôÔCŒ‡h"Çõfœtû‰b­˜Åʢ䣫’;A °#ßæ¤#.Qå‘Î�³˜Z¥ø»_þ×GVn5j!ôŽc8D®$iÌ+�ÃKî£Gf$(ù€$¨ˆä-VÞéÝ{ç©àçŽrä|Spà!,Ö@«¡©ÒJ-hüìSçºÿ|ày1ÀçzcdÝ'ùcoküèÒ¼¼+ hY Bsôà]áå_þàþÿ%¤9¿æë}î×K¯¨¶Ì "ð ´EÉÌñz¢4t@œYú}y#æÿ–}ýeðsøJ`/v1ñ_Ò5̪®Øý›I¥Òa·ZÙœ�xÑnçÔn~�~IÇÇêÊIL‚V*ÏX ‚ ®øcPJ:'눠T¿…ŠßSzÏ| {[Ϥ�1kµ æmVñE5Þ{XG½ÇÁñf 8ö`x ;Ö×núýÊíXãÊ×$û;«Á@E“gü¹£·‘to3ª%.–O¾Þüšé/¶ÆYÚòë*d€§zÚksh×:èî^LçÂñ¥W;·?ÊÉ(Æ×¡‚U[½ï‡Áô÷@�€D­¶„ÖÚm`O¦¼ƒÌh�*'çÀ öU�€4ïm"Ž» NÐ$é^ÕQÿl è²y´95üR<»£Í'ûµ•{@ß“e:Ç»Wá5æ!Ý$DE^§XaöºM‹ Ø>¹5¤t�’S%(&!áÕš$Š ,'½SI6§Ða£è±Ù öÚÉT¯À㽬?þ»Ð“-Ã}:>ÎÉð¢ß>úvr_8üδÝf$z¹¬œb¯OTB¬âovoS1s лú "@H"é$:œIŸ³ìÌ€ÿ@ÄÂ?w€Ä­D@2êBÔšð‚vqå¥6Ìbî«1D¦ F³¶>Aî]‚l™µKRk5y¬¶¬ñí%ýK�†�Ûn…tŽI¨Ñ.œF®ß8à3ËóR´ÎÑÔÝ#A{ñpɨ—ÙÅ­ŽWûüdïìÅëí×ÁáWÖƒÖÑ?%uÒ­£uê~ÔçO æÒH츒,‡Q‘®97hc¸<î>yrÂu?¢š?F=è«Z¸×j»Q­¾5 êÛc¿¾=öj[c·¶1ô«}/Ü{!„$" é5Ð:~ÂÖ‘´µ° cíÕÅD¹p€‘WÖ�Â�ÛZÀ¸wO0öFAóŽÃ“í£Ë£ ÚÚSØÜÑØh\ÝRØé úÂå»ïÆnÈ$ÔçÑ9utÂ?3€¥©4`vÖäÏP&V,‚‚%h-Òê™H�q E±é|ÍÜM Ÿë™·î [ëDCõÏcØÝaµ5é5ƒÞÀw‰=Gð‘}|à×öùê–æç.'¨­�ÝžÞ<ý\|nFP>+3O3Ú‹Ä÷¾&¼ãͯ ï[ê8¯mÖD­U}ß',Í%�ÂA¢�A°R„(aøÏ]NÎ̈#ª¢>/XyðÈ7óI¤¢'1XgU�±õ¼Å’Éæc‘ßXþï�Úâ›@²&܃ �!¨ÍCz-t™Ìa݄ʷ¸¯Hç-³p°|ë›qy÷yÓ*œP¸­y¥6Ÿ¶ª cf ãÉþ?qëË/q›à£wñ1x·/B ·b‹^¨“UíQlÂŽ¨d}Z7݇ÍÇÿبŸACzµ_”þÂ[Ôd»ŸþRbWbIÖ¹Þ9õ>�h•$µ#ÇQk†VQ¹Bg©.Qe=“•ò‚y}àÇqá¡_�ŠFi€lK{Š\FÙlç”ÎcVMÐé:fõµ¨·×�¨Èòn²¥‹³Ï¦’wL|k®SGûØ}Ø9ó@Ų#?ýÕ¥›&£+O ‚Œµ YA>ÆúèæÅõQmNÀðÚZË+PIªÛF–¨‰ò3%<�?ï)1Üš«¬]Œl-];�ª3ˆÒõŠp¶xƒ­ÚHA [7"[¨$=ÃÇ"�š—ˆÑ„�Á˜uhõÛ¿º§—H: º$>%A=$Äq.±m'ídU)qõÀínxÓ!ÇoÔHúžó‹‡–¤n„Ôáù.a}Gå€Ì‘w}ß�âÒ•�ãÿÏ&V„hÖ„€QÒ«¶BÍ!ÚÜrT¸·ŸtÛí†x}=:ð¾øž€ë› " Ñ@#$Ì·å½w�’úäYµm]³°ž™ƒÌ{逘÷Ü섇—œ|â°ƒÅ9É�Áw BJ�ÇpÀë~dôùí.�*•ô¼Ø™©ö¯SkB|ïw6þçÃËαù¦@à›õÅüžµeg²Üq¯ýáŸ÷ÿÕú.óŒ6´ üòãéùëJþªÌ_Ÿ« " hÅÌ4ÎìÖ°Y_æÍ�`…@¯fB¸ðÛ‹PéóÀ³‚²Ü>Èö®š‘–RíÕpøäëñü¿—Úyx -ÝLj´k}õ,0ÒŸÕ‚i/“ë·¾ø~"šK'@°t +«¢PÞZf’gA•À HB33üµ»Qß½Œa4ƒáz?*¼Îgõd+Ûp¢ ø+·5~ À °q—Ÿ[¼äºHTls•Í\V[lŠÂ!>{c §½ŒC·¾—žúmsç¤ÓñæN|ÇdûÌs/-æ˜^ó{ÏþÑdþ¶wÿ€p‚ô„Xbïì'á4¡¶p ÁüQG2ÊÀ—2*=$@)Ÿ¡êIagT ÙÍëÈÓ‘ð[ò­4ƒ š­G*hèÇ IDATB‚¤Sdi³Ïa�$ˆz[è^9�ÞÙ�2ÌÔ� «Æ;Ÿh$½æ $]„«·  ÞÛ^°×íŒë°²B ¬Ü¥5wÓ«°úÃŽ!¼æ±¢îùÿ˜VÅl›Ê²»vkÕ‹õ­ èÜþC7‘pÞ˜�.KK7A»>X+kü6Ã¥¼²•GS‡“u@º!Â¥<ÿà$¼7H¿½ª'[1f«oäc^º÷}MïË2µÆ2Ðnð�éþtQ  ì&9žÕiÏÞê 4®ÜŽA÷9s׽ƫɩ„“¾]=û–�ß=óëí[ÞñnéÖŸH¼Â!rëPƒ ìí�ƒŽpj«h¬Þ ·QkÆhw½KAÇ=û®Ÿ�Ô‹ #oé@ÙÝ~š5ñ mðF½\~äßÁoAçä+SÏ�—% °sæcP£-ù;õ"XdÞK†›ŸdVÛ$¼±püIäøðÚ«€%Á•õW&®Íà3Löå«s‚Z·½ýç¿`€›¬‘p˜ ñ%Á ÙNrZ,¤sŠ€pà6àMß¹Îé�½gl"ö&¦­(oéžïÇåOý„ç�È©9µ•CÉpý<Ê­¥19þƒDÐò<¸aÓ‘J¶Æ$9ÝÖ4ftÈš5¼öa×5Õx� ¾À£ö Á›¿»–Èåà’¸“ÀÒC¸|(­ž”?›¬¦#[G¹hzeèÜÎÕì¿AcAcõ@ÙeÎ+tÈ÷ëYòF¬Ëg\_ÌÁÛvªZ0¡qø .>°°Gƒc‡ùÌ!-H³ˆÔœ7f£‘LÒA°tJéR¥Z•*�¦s•Já–û” ÃFâ2  ‘¾¨”µ)]+]?å^]›yâM'ˆúÛ¹7ÉÖ~BB++–��h3 F ×!ĉÆê‚D»)x4Â|3V^”ý3ÏOžºí„WgoZ[vîî´j¡�x.Á5`ŽCpS<Ï%D1c·«0Ž×aÄ c a0)|×p-/^K@„úÛ_ëÓã«[jÿÑg’ç+�ež™Çw…'ŽrÏk¾G?µ0'¹’}SipJ¸tMA3C3AiÆ?ýù§àC)àüå1–;†µ 5g¦ªjø¦y”æ�2oYzðv'|ð®ðØ|KÐ~Ÿ_Ûª ö\Jç„Ðjæ]¬_‰ u ÎשÂT’½äÿð[j?¿Ü‘·Ì5%uÓ‚æ9&¹ 4Á‘¦¥â–cîí¯¹Ç=ôÐãñ5«\§½ì¹ñúVB/D¸ÿº@�_‘U:ÍyDBBë¤0 ³ˆ¬`€ÓÓ:k™ÈÊÔy?:Û’EGgS©5–±¿;ˆH8aMGÝA :v-Ò¯ÛÁ]Í(WÏœÙ8N n…k`Àsí%Œ,c8BÖ{œvg=¿ló*²k RÛå>'ư0\ºêìgͼ8$ÝÆÂ÷ÅݳÄõU?Àaw™Š”�`~ÅH…wƒN³ÞLvÚÖr0ÎTkò̧55ÒAsíN ÷Ÿ !dp« Z‹I¿Ó¦�ôpk½ÿÌG®Ô¿ú­~ëðO�äÿHÒm2khãž<ÞÂγ«(UiÓ9è½òð±öŠŸ€ðj(:Æm‘�²'„ÝŽcu5Y9·„mòrÚÃÁ:Á`ãyl}õcàÑ&Fà \^ÿbå¬Ê>ÛI¥¦³õGZÅ£§ôdÿifµ +üŽ'œ )¤éÖà:a™fž·Âd/Z 1£¥�ÒµšµOr~ýEÏ}Ø>‚>}Ѭ!› Ÿ€¤Úš‘·u ·E€8EK¸�NÞ‚6½b8ÏôSjî™Å;…Y"òuÍO øá<œöèq×Bz�U ׫­¥ŠH>�¹ ×Vn� iZEÁÐ,  ‹Û΄ò­LCK¶M ‹'€H×¹!x¸›&UÄwø°u£Çôö·¿§NÞ[{lð] ò|ø~'U»²Ò™})µnq-²@?k«4ý‘.¼]ŠV6¶½óÒ½ X¯”µ’–z½,!æÜQØïk?é},Ú ލÃ[\Áxó*ˆ5úãæ|\ãË$ˆ‰˜‘Ž’N0QÂe0׃븦‚`íoÆ †¬d —2a¶” ãUÄ«9{æËÎÒ™PGÞ^EŸNd­¸ùþ�îõYûWzV¨$Foó"À25vŒX)CBVb®!h¯¯Ès�SG],w$¹ ¼yÂŒT/½ûÈŠó=‡—œNè öÁ÷ˆ]‡È‘€”/$*A\—ñð飡BèPúëÛ ã c!¨y@Ðã:õ%áJõ%5âÈŠë[ã�­Ÿ;¼$[­†ô}Çë¡`ß#î t±Ÿ°ºÜÂhñV<ú©Ïb1<¦*áˆbšcaï# e9)bm‰œ#«î‘ù–¸µY: (ó]S‰DˆS^SèÚ Á/¿-|ÇC�ÇD™÷s�þ�¯äÆë[ ˆ|Ã&Üob:†WkbÂ:íÖ9á. –l?Áâ\°‚šÕ:`•÷…¯±ìž§]Ð(å�dÄs›ð:9x¼¨žÍæÚË¢ûÀL?¨aâ„ùAÄYÙßn³*µëd*C”Š\Äýç… çtöh·V±ßÛ4‡˜ô¾À‡P&“i”{_à-9C’'hA!±�Y°VÖ6™3¥#å`›½3\ºÙô‡3¬á†�’þ•§a|e „¼hâü_ÁÚÎ;ÍW>×\Á¿ Vîÿ-¿µö3$Ä;拾A$ … –±‘Qe#lâÒC¿ŠµW¾NØÊ³¨¹yN(ÏZ ‹{+*±"ûk·©=â¬ô®œÆæô$}o„�¬?ˆ¥“Éùd¼ó8«hj_øÍ9�OÒ…ôkpê-“­žj?!K,�Kk‘*­EœzGd¿§S>tÚb¶r®À2ÅzÔWoLân0ƒÁitrÄP 6o ËB“5¿le®³g�*!.ÝŒÁÅ/›'Az i^;ŸÐæñ7Q˜‘·ƒz;]öóQ8³ç³BåD òŠ•Ýš™Õr þüÆ[gÓõ'�h`º÷Þ5Üu×-ètÞI�,Æ:ÈÓÚòQhmq Ø6À³Z�òÖ#›/có`µ¦|#Îk#¥µI¥üƒ(v6.D(¿6‘úáA9UzÒŠmÇVˆJï@ú;~ëÆ×ÎAƒÑ�ÈEÒ |ffðâœä¦öl’ ,Šs(•%K„§Smz4µîͳÄ`-Lu„ pÄÖÅ_§B^„‰K×^«ô{H«\kVnÄÅÞ‘òÈÔxñ°á·fHFÌ ÍLÌ ÏÔª ZhKj7ê¡É’»NÊ‘PiN b~eQ²+ ~ÚÆ“�s4¶† QÌŽýC)Æ¥ Uªªíõ ûª]'ì÷5„�?ä`.å'HV˜o ·Ý”Ç�¬ÈÿVÖ-9AË´3iSá‡Ø‘€çXyD1£Û׈ 74ÊŒB\¼c86Õ"†”„Z(À¬õ¬ÿdãõJ1 ÇúÓ×¶âÇÿàSãÓ(|×"ú=ß[͉Î_Å¢#éçš‚ë5¡ÏŒÉuHg• •ŽÄÓç#¨„‘$ÀC_ÞÆÃOý'„� " N€�ýžGH”mt¥ýë ÀwÝÜÿà�þbgNø*Áß\îHÕª ½½¯!ÉÜGÇn¿ÿ0”ZÆg>ùFc�z(à:„ZHYû›Ý–XgîA h7È�×_›Ö°+9œý¸ŸýèÄ­•²sv¦0v¥€©Rž§4W�KîÐB^­L„Ðé¦3FA*ÍÚ¯l®‡­¼H¹X'œ¬ù�‰ý\¯–&l3Ea@—M¡ÎÈ��×Ê€em5yGÈYÀ­å—ao÷’ "¤{@eu²jÖ ¼2Ë<aJ¢€°æ¼—Àdf�A—}Ð-µ€Ã$EÑ’á:¨·O¢ß}ÎTXÿŽtCôQxÉÄÖ†øR¯k @�׿¼=^ÿÊÿæÎ½ì×HÈU7h¾ƒï­Dþª A¬±H­]€} Vc\ùÒ¿ÅáWüM¸a0µ“Q¥¢%ƒSºt–¯JmRT¢ÉÌ)Ø:fèdŒýçÁΙ�gë¸R �6ŠkÒäSM4Á’d¸ûy÷/³Ž‡0¾,c€�!=cÌI$I0TчÎ:m¬8˜fÁ!WZ³ì9m&3�aVá…Å;™¢�œQ«l”ïŽW/*…V•)/$äcãB¤‚ì 8Ía »­(�s&8a;�0 v«c#!]3ÃñB�ð*\…ôÙEVÁµ‚Q1]P,'\ŠKwëóàxÈ n‚+:8qs·ÝöwP¯£QB×6 “&$8n=m¬$7¨ÙeMù8`eÙAŬ‚3’:çÀ9_¢h¹¢)1ù¢âÅiðžUΘ…™c2È,O0Y}LÅP8w'»L˜éÔ¡uÚ6ÊB¶®·0—¨ù–Ô­º½‘#”Á«éXE^ÑÈÖ!U–w <š?²*—€…‰ MåÆÜdQT¸íj¥ëM§`‚ 0š=@,Š*ç`Ä– èëO~äÙ©ÁE ƒLy­Ý¨×² Þu�†Aøý¡†Ò¦•*ðKs“ˆ1š0¢„1‰L°Ÿ$Œ³—ÓI 9/v š>ý @§-á8ã±ÆñC.:m�FMÀ÷ÒÛÃ÷RI"�Ÿ8â ô„r¤êUfœ®CPŠ1ŽqĈb`3â˜qq=ÁpÌH£;Є�Àå�B‚(Ñp‰5­ºÐžkö„I̯=¶ê¾ª7Äž$õK‹óîòÚ²û·V®‡Ô¬…D¡'à¹Hiª@R ¸Ò¬õ81ãO®Ã’ð�M@pà$ Ï%x.°0'±½¯pÓªh½ì„ç‘K }GíŸ>§³/Pῼç­as¾)¨QwÞ¶4/_ߪ‹z£&œÐT;b£ô´„Þ€¡��Tø�{÷L™Gi`®)Àeá�¤’ì;H ­ÛÝ 7^�É�h%‹Ãµ�&¬IƒïR÷ˆÝÚ“µg‰²òUéyɾ/ŠJA)¥Àybo–„°-%<«ÝŠ_쵑 bmeázÖ¡m‘Ê«Mò¶*Ù‚ÃE¶V65od@¶Á:+™íM¾ ÊFeÙѾœ½K-œOXÛ¡�JýèÙÀi&1Úú�°~?ýÕÆÂ-èí} Æ�™æÔ,2±@ÒKÙ†U fΘâ½3›†ðk~+�Û€:€šðæWƒÎM? ¦& Á¬Ñ½ô%,¼ì{ŠÀ …¿€¹�å@¾ÔkÎU‘‚BÂU«;g¿ˆÝ§Âid ­¢Ëj¼÷8XõPˆ&ØÜ¥¤’³È@Oº¡OÒ7${!­v¯, eòlUÂÊÛ$�ib8¡›q^K[�] ˜æ:÷¦ÝišP´¨eý:ÙŠ€’Y•«õ‡h†µEþ2¡˜ÅÔØÌ÷ ˆ´ç§BD&ûó¬²B©ʪ"ÙsÌ„�èdr° ûø1¬¬0Âæf‚ííÏÓ_œ}žîüž—ƒ8$)R™gTÈ6c§"V�µQe®%‘ ª’�˜�ªúXI`ZÀ;»?9 ±¥�¹ÜV~3LùIK×3<& r8ž#d».äRGjµ“îHlu 2OfMÏO1†bÏ-W…Š€»Y9èVµdF}Õ’ñ¥jù>ó¡É«AÖ¯§sÍšížGÜ»–¥¶½½­Mö? í¦Ä¡E‰Å9 /ïiîž×¼�ñ1\¸zÌŒf]àâz‘‚ƒkÛ†PžU;³ ó×;û|�0×0À#ð Àñ=Ê?Ã¥ ͺ@§%Q Ì;*mþ}4fìÇQbÚ¾®m+¨„±µ¯§À�†‘û•8yÄÅ…« ÆÆRGà芃ù–@-pÓè9N€Ð'ç­¯®-‚è—ç‡i/=9×Å1ãe6�|œÃ‘S{=…í}�þˆá9 W7¡©Ž²½§0×ú¿zsû'5‚„8fÚèsÏ_‰Ÿøõ�ô?šU_Þû¶úËOqï\š“ Â[Ú ÁõPhß{Ž@вV4" I“XÃ�c |àßoa·ÇðÝâg6v4º��ÌHÚ%jÑVâ¯Úš–e/Ü¿ûÃÍ¿}€Üx}[¾Üxå×lðšEd¬þœ­šB<-?Êi¦¸òËUMò)­m|C&yÅóŒK"Pä,Û,L —«Á—ušXÇÐÚ�0¡‘–��J»‹Óà‰ ×Ï ÓSŠ8Vû×A÷õ̤¡�ôk©b‹ŒIY˜~ÙU�dF›ØK¤ÕŒÊž­‘¥óêhwo´ÿõÕ{þ_“^e4–ïžšKºžìP9 ^üްH»dZ¯úW¿ rêù›ê$:¯Æ;�œ)¸e\¦‘¨íŠ^6þ‰U7l éÂÉ’�= ³³žö(ŽDåØ3®¯X`Ú”{À^ ˜³5a{dùq]6m«Ì­(ZŠJAތƮ ¦Œÿ ›¬4ka�Í 5ëb¢´*ØjUÙ]Æl;bªÌq4é›±¨LØoœ Ñh‚Ýݾüå³<T̽,,2zZ¸ƒ lºPé~NÍíÌýjÖ�Rð>sÝS9ÁÄ3� fÁö¿±V€ŽSgyͤçBîvµM4í tÞ�' !Ie¸qêzlluà}¤2ß°ì4{K¡œÄ"¦on¥šÈà™Ï ÐQë�ý.´J@BÂZ5ƒÑ¸ÓÜiK^œ¼4'yaN¢Ó¨‡ÄëÛ ‰6ë‡~û?ṋ€LëÐ^/±C=X•*½¸¾kÏ5\‘£+&T5½©jÌ™±t·vU«?ä4È7U­‘öŒþȸÍoî*tº4¦Ù㱪„p|ÍÅÆv‚C‹Z �Fh@�›$‰©�$ŠQó…Zœù¥ \Éjœ—ÑDcœþÿs—›ÎƒIdþò²c.žz.Ê�i·ÏXY�X[vÐnøæý•b,Œå±V]ûéÄdqÞù�Õ‡[u¢Z È7Äÿ$CRš1ÉôâãÄT^ℱ×7üGj †ÀcÏÄè´8|†#õ� HœúÑ·†w,vÜ7¶êBÇ ¨?ˆÿå¥ 5ùȧÇgQá·þÈ[ÂùSG¼ùî�ì¦Uçe sÍ:¹7È�×·O¹„y 5@CF(tJä>›€XÒJŸ’„ªDiu€P�ø èQ7ï¸àYlÕÙþ%ß Ù¾0·Êôï S*ž>©q�Ëm §tfž heŒÆ DZa¨øbF8hÞ×V*r,T�àjÛH)#Êe÷iû½´JyHΟ´Í—|Ð •êAÖº—Up<°ÞnØ£(8õÎô­¥ë!ê¬úÇ¥eÀ6E‘!�ô!0­Uj2|RÇÝçRÐÑ…á2e²Ò™ BŒ2ñPY•¿ÌOó�ñ(% k �D¡ÛØÚÒ¼·÷Û�®ðÁÊÉÕ¬´*ö,‰¥�Ÿ"{üÖó=E™Í«…¢VÆçàŠpÂbfì;e#MÌÜï •75@'1„$$ tq]É^_‰D± !ÆÉD{@I¬&€¢6CZ�«T·òº¯$µ²b/[×—�1­èdÁ#DÛg°·yµf�ão g&j7×SVͳ÷]ŽúØûÚÇ0éí¥ï!УÑ\]%ͺäf�t«.ôœäåyÁž+d\ࣘ!øÒSC´ê"msZ �g/&Xž—†kA/�V³þ}0ÒX˜“h×€ò`ßsL…ëê–ïš�Lî~z =W`g_Á‘„µ‰G¾aqN`¯§¡5c0âJõ«Rµ|�1 ´›†ï’µžy® ĵFF¢ {_áøa‰b$Ê�86-hQœ¿’@³iG‹.g¨* LJàö.žøZaaNàð’��´ NȬMCJ‰8ñÞ}ÇI�=ä:éÏÇIÛÕØ€D„8Û`ĸ´ž˜ï%À^× â8aììgäxB¶÷4–æ$¿æ¾Ú›ZuÁžG L"÷çNì)>¶âþæï¢ÿ"$?ñÎöß?¼,¹Q a@�zHxæ~ºÝhÁºñú¶z=â{À@oÞÂÑrv˾g±Kè€*B‰9™P*¸¿Qô#ëdðA2°ß|ÛO‰ Ë`YBµå@~*𳣬ôÎd©ÑTÅçÓƒÏ÷À©6<8¡48P&zÏòmÀ&£6ëâ-5–LI¨,8TR(bÄ|˜ŸÔÑ(mcQ6 f›òRÒg��jû’—ϯð}á„YôWÉêÚÆÕuR|œüf  p¦à£�ãŒ3"y&+½£êÖE™Ó¤*•¾Äº–@$¤» á TƒRàxx�ƒÇ_zXíX¾¼ÚK¥Él*Ó5¢ÆÝ¬õ Ìʘ”Û¯J\5ÀWº ¬�Œ‡ðƒ9K© l<-�jñÄlo�ìgµJ0Þ|6åh°Šûi‹X>¶h°±ç·EÙµ%Ñ2hL��*H­4g\6‘@ÁM1S¥1\?ãM£ Õ8¹õ'¸×ûRz?=’µ.¼K“Z'�4k(Wà›z K¬t.ZF3XVQ&š‘ ²eÅPù^)›RxodU¬R[•íÄÊåg…ʈ’µF4ÙM¢iVÛô�P�f&MC%¡”‚t’x‚xƒ‚i°ocÑ‚ªG¥-݈ŸÀâëdÊ`1âþ:ƽ]øØÂ`ãiì^»ˆx° ˆä¸èj�…qó·¼äÖKj^Å›ÚJyé~ª’ÞúgÿÛçO§¦¨5—“Ãóû{�ºÔ�šP­†Ô¡O:Š™·÷µö=æá˜Ñ0´Öð\ ÛgxŽ Ô%™¶žÃK톀ÀxÂyöß‘E”½³¯°8/¤\Ž…¶D½–ŽB¢×uSSqMLàüÅ'&ØÞã9ß3"3ãˆqæ|ß.­ërû&ªn03€jºŒ43ê�€ `¾%ÐlÔ|�ÍÝ"õÈô\àþïýœþóáÒúñ†ï Ä °½¯ÓÀ]!Qæ:»ƒJU•^\Ès ÷Þêáâ5…åy‰FͳÀ|ÏT1´bPZ£Ó–¼8'R?Ï”KÄ\Ž”k²ÛÕHÆ¥u…DqÙ3Œ€$2;ß]7{8}6Âö¾9²özŒåy‰µ‰N[pÍ7f� N` =zï?üé…Ÿh7!)ßð�× »V†Ä È�×·Ó‹ðgý8ˆÑ›ô± 1öjyÀ•s«IªRB•mW_+©Á‰îFýkÙ¡¨9ï\Â|Ó`Ä e7;ß’ñk“µbëÀ¡²jÛ’¥Ø3Ýs]ûY ÂdãÙôðb’q©UÄne±« ý,8ˆF;ðжb‘²qZ.âi©p•ÎËÒAÎEŸ?Zk wŸ/úü įTgfTh®kõ_„p%xÏ@ˆ@’zÂñ TërK…Ë/—ܨ¹,z›Îq!8ÀÕSØ|Ei5¦—��ô+Suc¶§Fˆ$ ±ID{ª�5âxÇo”œÖór!1•WQVqË®ÊðmI_•Du7‹‡Fë�Y˜–g&ï]ápñÖ‹`¼ Ä{×€¹C–2*\êÏ,ÁÒ3Ï IDATÛ‘U­³ø*Y@¬ã ¢Í¯BóiP?Ü­£hûÉßÓ'`…Alž‡ßZ¬Ëî/™‚_Él/ÛíìyN÷�Ĉº×ò¹ãÉèz½+ðNq÷¹ø5QöÆãá8A"�êrÌQjñ¡J¥ÕJ‚L™;àb·¶±¥r•hÂçÃ6,ME•T’¦­ŽÇñÈ*=ÉÝóŸK7" ÖZ33˜I¤�sä:Û‘/80Ö'{ nå}¥™Œp¶ëÙ•wÎ@Êbvµ�ˆ0Þ¿†ËŸû×P“qñ¾$ ü9äjt‚°{îô·.àÐÝoƒÓ:H¯�8GE÷ÏàÂÆŽ9øp¡×:Ý]×!%Šj4ÖJJ¡Ç¥†cfÏ3¾íB�&F^}¾%Щ\GGV´"wòN”©llì(ôG†¾¶,qlÕA³F|Ï-Ú«2ÎDàÊhÂEtì÷uîL>›Ö!!L î9f-ítMË•ï�P@ZˆyÊ`8åz ÆKóóÍBÝË÷(¯êHIhÕ]líkhD1ðáßü?½"�81f}« Ÿž€Ùªp¤\™Ê/ΪÄaÖÏ+îòATÌ‘ëæ[�ù›ñüÅg ”ñg <àÜåÇVĉ.Èÿ ãì…QbÚÓ‹)Äuý¸ý¤‡GÏL°ÛUXhKZ’˜k 4C†\§àÛHS‘áý>«c«N^}VËW¢LÕ%In�¯o§—ÖÉ>ˆš ÷×!–ާ7Íì\™î3Ÿá�[鯥$B÷êSPI!=°ÖC� öp}Ã7 ®˜˜žeb �œLú¨©J8%âv©M%—ÊD!½Z!…”“‚E9TŒõË�¤Yd N¢«3ZXÄ Ðõ8@ï½þU,ò hšnŽ/›ÍY‡.+I•ë²õýM6voã+Èz¡U2Þ±ÆçTÆGß"+t±waU•„ðêI_›àZ�“äzÕÞØÓ®èbªŸ¼PoÊ›$õ]I �1§$r’Ò»)  ¢Û^0º¨4õ®]vùgtЈz›ëFyvV@™‰•» ^y¦¢®Yñ¤‡Þ³ŸI?ŦñvŠÞø%�m0Àÿ™ˆ~ˆµD<ÜC<êÁ [% Þ~L�Ù–Ö˜•† 0'Ø<óq“©N:ï^±ã�ôO©ãÑ?"¯ùA�Œ»ˆ'¸~£¸Ïˆ`JƇÈ]ë,™fSM‹û›ˆºW31­£Ñ5빱Р&5ÙÝrg Œ¯]E½s€_1Ú›M ãÛèÔ<Ù‚ËÈèú9›’¤F¦»Ê;Õ”6å _øé ¯´ŽFW‘ì^ƒðê`žØïgæq™†Ÿ'QèLFƒØ „�çŸÁÊ]«Ð¬ZÞ0•ªUÉX3Œ"¿­bŒ.}&"% ‹¢ZI�Ì­’Qú Ì9wîv´WަëL¤#ÑH†»Øß¼„xóì]9á„yÛ•ã@jõ÷|g2ÖšÔpÌ H'Ã1%ý«šO¤™M0.¬kšk Ò˜DÇoò°8'l¿ (Åð] ) !ýö>\צ?‰6 LqÌØé¥ª(f\ÝL ´€Q…Úéjì 4„0ÿ(b´‡]ÔCã"%ŒýžFw ó ;Иo 4kžÌ5%ê¡^…4N nQʸ€ÒŸ|è4Z ž<ˆA¸pM¡Q£ƒAÅ œD“ˆS’;¡Q3c S04‰ÃQÑVy옃Ƕވ‡}ž4•§À7ðôùȨ|E†hoË #c»ÿ6ë; sõ@ ô ^*à§*ÜÔC²oÖ�ª�Ö¦m<1@-N—7S»µÞx}Ûàí 7ü�ÞŒw/£Ù>í(„JQ jì>LûÿÉò·B ÖÐݫظøÅÔ„�Àjr%uAŸE6ÿKɶo~åßðâ}ïÿ2�F nŒã doÉ|-ž„}=U‚¥ 4,IÞ¢üÀP[Ï"I&iïy2Þ?;+{<�´á�ô D�Œ¡]ÈF«|ØÏˆÇiªe¨Qt)€0mñö¨x’.˜5Ô¤{¡ŒdeœåØì¥!ÕW°Ûdy!ý–&áL h`Ò[‡Íõ«Ø dÊ…´¨´lÍpK�ú[ÐQ7 Ž4 "¹ Bz(8 ¶ŸMu�—ŒþFW¿ ë+·ÀÀ„ÉÖÄ�£ðüfi4³�Ê©>€òbÍ+ì>÷EvPñpóiÌ6Ì̃lVC0óŸ€Ä.ˆçÁ„áöE´×î0Òϰü€Š×Nù.Øð¯�•6 yÒßÂhëlDª¨ÿXÇ•€·¿ ½æ6€bÆàê´�Ý ·ôî\�" c€§ Ö³O¥ùSÉOý1�Œé€Á±NÝlµ@¤r%ü=ÿ™Í7ÜÄZa´ õ¹SSnõ\¹T™%ûïÙwâIÉ` � I[ÅËtŒ8Ù›æ©eêQ�Å»Ö� ’{)¤�1«¹ËÞ7ÍxTÔÇÖ“Ÿ9^¸+å‹áÄÌp$Øs¼úØ£OþáÙ×}Èpö/žFóȽÉÒ»Z¶=¥QPe;È熢�DZùì#ÆR‰Ž`åˆ$ñdØ[\5ÐÈN<�°{ö3†*r|�.±štQ–�DwÞìžj†ýÚ‘FûR¿¹(ÈÁðòYøáJ^‘á)ÞQÁ­ žUõH É;Ï{O|ÄÚy¥šJ¦—°«7%g¦â�Ç+—±öÀ{AŽ_ºGdñžˆŠ[ªìŽ”V»×¾‚hëk 4ðo8þRZ;R¢Yz¡-x¥#ÑiK4ëƒñ^¼é³;GH8í]Cki*Þ—Ê ¡2W¯ðtœyµhÄ£]\9ý‰¼ÂAÝrww]‡! ¨ù¤|o2ö¼õþ(™¯Ÿß[XŠ´”od¼=mTY�µqŠ-Óµ#…V-··8ÑÇÊw>E¡GqàQì{”x.”ë�–l<1Ê�ɉb̵RÐáÀT¤É€Ï5\Ùˆ¡”6þi»S³&13¢Ü�ñüÕ$W¯Š"¶*cÓ4·ìubÍÅå�¡/°Ò˜k Ôk¦’! 4ÁuÌ}O·óŒ)¡$È´òâ:„$aÄÊT\úÃtL1°×WØÜÑÐ\Hïõ ÇÃu€ý¾©¬Ô‰0‰ËaŽoT°m¤v×·•ñC‰MõfqNf®âE»Wf˜˜‚Ç%ÈÀ%Êp_†“´®-4öFÚ˜ä\‡0×”Øëi4BQjûz¡Ê å <Â|ÛŒ«U/·£9¸º­ ™ÁÚˆô÷�},Æh ¥ÍXç¾ðä‚¥ý!O)n´`Ýx};�ËÁ çÿÈk,‰�WAHlî\ÄJÐ�§ºˆO¥  ‘´ª—È&ˆ=ûil_z$˜,|‰õd/ìù�o„l?þïFK÷¾ï ¼ŽˆüI4B´s ré i®ðÜ ©¶õ™JB©$k.:£ÔÆYì\{"åuƒU<~¬¢Jvt°bĽ+»^ëÈÇü‚@o÷<‚ö! Ù2‡)[ü…’[;JŠFLœù¥ÍùŒSÊ“Ýuì^ülÎ.ÔjrœL*Õ§Y’Ç/ÿãë"¦íKIkõÎ?aàûP2܇Ž'�^0£Äp¤™ï\îÃ*‰Ð=ÿpÁÿï³f•ùÌ’ß庮ÞÕ'w[Gøç~H{èmŸGké”I¥2å@lÙè–])g|PÑb¨â!6Î|<RD”¨IÿL:ÞøEŒ]°Šþ’î�cÂA÷òpï^"hæ> ¶ w•ómS"t‚�翈ѵ'@Ò˜(°V›œ 7*{F¾o¨Á¥uôkR†? B ÂA÷Ü#�7¿~½�,¯òàœgÜïô?Z%è]ý*6¾òïAÒË~hœ 7ŸL?Û¾×c‘ïR"E¬n_¼váê ¹ @ì_~ó7½2M~`ƒò ¦‚*ƒINIЃ�¯aï‰ùç,Ø$²ÚŒlÏ:ØÊž€ÉÖó¸úèï`õÞ„t‹„Œà²µÙ\‘,èO91½­¯bóáß…pMUY è¹Ú`zB/u„ZhI^˜ºÓ–¼Ü¼ÜZ¸×.=|e~m¤@—Ÿú#Ûgý Ô€–ÊãöŒlïΞÆÀüa};Á8J}b(!.ÒJc¾%á§2Æ[{ J¥^é¼)e*™š×J'«`¥ãs³ê‹F±]ì*ıáÁŒ&À?ýů"ôÍç;’'Œ¯]HP (—94ã°£äÆëÛëÅûÏ~4^¼ç'þ> ñGÌ4áâÚ¥Çq ½x™Ö�Ëý·š-.•Õ. •Œ0zö!\}öÓÒς߱šìÌCëà¶�ÚÔ i_ÿrüg$¼G™é•,l_y+µ9pc1'mêì�¯:Hg›@*ç/Dð‰´7œ÷¯àò“AޒΈõd÷Y+@šumy ß}îÏôâ=ïý'$œ÷3!Iì^ú :'_µ²� MC‚lÞEF´¶pˆ¡{{ØxòÃYÌ€5Ú}º2¶j�ÉÖnåïÙU j¬c 6¯¢yøHTâðóIÙº¶¯V€ÏÐè]>ƒñÖc §fN¢Áy+(žT‚cû¾«ÔÔ\GÛ�ƒÝõKäx?N ãBº^ù*j‹Ç!R!…RpY?¦9¬0 ,>-wqíôŸ ÚøHÈ´¤wu2Ø´‚éìZL·�Oz×¶‚¹£ÿ�A?„$ÁÖ™Ocþæ×Àç,3¹rëXE<®i5ÆÞ•'±÷ôŸšÊŒáØp<¸ö¹ÊØ&ÕäÅΓ¿óÄâ=ïý[Dò?€�v¾öYÔ�܉æÂIÀqJ"`¥µ lá>F�Ñ»z�ý„ðL½QV“ÁÓ�Px·d&’#“Áˆ'QÌ|déÉ«KGo¾6 ZIoˆ�óŸCçØ«!½�bJQ¹Rtc¬&è]=�k�þÈMÁ ¸‚ 0±”’cXH¨DÁs’X�ɺft‘ò½„¥L¶/àÊÿ‰CßñH·žr&*ÉÛü0­^©h„ÝKŸÃÎSrÔs!°ÒèŠÃ€T».ôÿÏÞ»ÆX’žçaÏû}u;÷Ó§»§{.=—�Ùû’ÔrI‰¤h‘’-E‘-I(ɉ#™HâÈ d+†(�b bDp‚r¬A,Dˆ#Ë’‹ºX$EQ¤È½�{›Ù�û­§ï}úÜ«¾ï{ßüøªNWŸí™ÝÕ.)qÙtOO÷9oU}Uõ<ïåy:-Åg޲8§Ù:ÈÞ@P�®í…Iê‰ÑÙ!æ[~v$| Ë v{;Œõ‹³ÇCÌår¾Õ¨ÄÊW`ô¾doáeR Ô{é`FègJ”^»aÑíï{àD‘ÿ»FÕÏë$±¿/ÜÝð·ÛSKÁÔ8’àû¤�¶£í½³‘¢°yr]Õ*)|_`;·@.ETkCT°&ÔþC`P«<ðìà†;Ø»øûX»ü‡ù܇H9NϳÝ€ï‘ß-½úØ—+-WCÞñÞ�Ö_šÔ–¿kH„ycÈpûjµ9 ®M‡eË­ 7fÊËŽä*oMPý ¬ã_c8XË�œ— _d;ºŽ}IÖÂb€}Sºû7ZqX[~:$àà\ ‡ˆk @¸ÁJ^$jß ¬p1ž;’@l½úûl_òh¥ vr‘MÿêÛˆO¾�–óhíëkµãü @žf¸†°ÚAUöÏu©¦=�’Åa&„´¯>&;ìbýåß‚Ø  2°£õÏÏËBùjvöoƒÜÑx㥴zìý—H©ŸðÏÂd÷ˆauJéi”J3ÅJöª¤Ž&¾q0naëÊ0ºþ¥¼º ``†kPŠ7ߟb–åÐu›u¯K2ÿðŸ*> ÂÏÉ-Æ[×@:DPiL N¹ÿý€ÆB‘¼`3éaûòc÷¥µ?@Lš]:ø3qã;ØðßÉ¿÷�<‰A6N^×qícu¶È&¤»·`&]Q*ˆ¦@{Š·§Â⇙÷Vѽù¶¿þ/ täI�ÒÞl2Ý}�Bd`§KÀdc—ïœ;~¤šèÚù…Ýõ[{'O¤VD€1Ú»Š#„QsZa¡}ß$*]Óì`&]ìÜüSl}ý_‚iÌU²á±Fww±1´*Ãþ|mØ;Öî5ãÞ^‚n·÷÷b5èÕÂa¾6ì×Ãa¿¢‡ý$àÉ�TH¤C°™`°þ ‚°Ú©0?_3‚Â`›¢¿~ÛWÿ{¯}Š”�IiÌ×̨Sô㈠ì©c�©%ʤf071oì8Þí ”ÙÞíO–Û}ÕŠŒIosn¸× @Jy°½_mœAÖ½ŽÝ_ÅÝgÄ.ÆhDñÊ\w«Yƒi7”Yhk3×Pf®©³FU­aYÈb†#q㉸̈ë3«•±ÌÖ:k¬&kgãÐÙ(7ßÒ¶ÓRv®¡m»©ì\C›JBV+²©aÓnh3ßÖ¶Y%wúxà.œŽxe9àÅŽÆ\CI£¦Ð¬«é°tx€?J÷¶ �"\¼f|%i:ìïøËíÖ=ƒFMMÝµË ²éõ^úÙhÂhÕêU±Ž7ã;w2ÄRG£ÓÔ˜ki Ç‚$òŸ•64ýòÿ°±~w‹×ïX¤9Ù¸~Ç¢?ÜÝp¸±j±¾ãÀ¹[úTå�W¹m¨¼®Y€N+ÀB[{@Ÿ+CUbB-Ù¯›8œóž!Ëó~vÔæþƒ£?¬mYÜÝp¸zÇâöºÃÆŽ ’¢ÒK)`¡­qsÕBi/CüèÙKó^¥Ê“ …$RÓ!àéÇbœ<àØœB»©Ð¨iÔ+„Zâ+HA^%1Î;ÈÇŒÁHpoËâöºÅv×›ŽÆÞ¸ðÒ “Këæ‡z¿%¸–(ë8*Ä™ã!’H!5Sé}¢#Äz´½×(ª�üh\YxøŸBä?6J\— QÑ �ÓÏ€ZK@T�ä}¶u€µ°évë î¼üÿÁ™Qþ '€‹Í.ÛñÖ×ò÷€uùkûž i)#ÿnd㉢yµðøßø?ü¤ˆ%±Ä qüüG€Ö ˆýP¹ì·PI{WŒyä,¸»Š»_ÿ Œz«~?•D¶ÌpýßBx#ß¿µüµ‘•^ ˜ºrváý?¹LJ"�°� Í¡~ö}Е&Dåft(õÿûÒÇ?¯däàö¶°õÊgÑÛzÑ÷gûøºv´ùGÂv5�©ˆo½tfã“o·õ¼ð�ŸZ&R7DÂÂÜ…� ªÔ¦=ÿe f˜m’}”ÈǤ‡;_ùÈö®å-KZ\6þŠKw¾‘¿{ùk=_ß½p·oóXÔÏþµ°Ò:ùOò³Ââ2/Z«cþìGVZSa‡¢e¦X¥Ó�kò†œÎN�í­ãî×þ/ðdσ_¥@ ÌNƦw9_ÅÚ]°YJŒqPÉkëüSë¼ÒÑ¿aá plS8Ó!æù$Âj JG<ç2™ÂyŸ¿³È&]Œvnbë¥ßö¾'9°)¶wìpýs91Ú*ÅV\S{ùšM8"%ñâûƒÆñ÷ý¾°|¯ˆQb38;‚K{‹h�þ‚¨Udï™áÒ>¬cûò�n¾æý,°¯¦ÄÎܶãÍç!R�r[ycæáÓá?øàãÉûO.jÙN/ûÝ×}š!³�¸ ܤ� ÕFãÄS“‚¨ ¥B³H.ÃŽ{�ncûùÏ€mZ¾—b¾f'Kͽn«NÖ9¸qÊ. ÈÅñæ.s�•"ñÆn€Ï0ëü-†¶][ŸœY1¢H®ÚÇ„õsïCÒ^�RUhx0ÁŽw°wåËÈv×ö ¤*:µâÝÝ0 3ßV&Ž(]hé´Y£l8–,ŠÈø¶$°Ö~r^„èÙµ�àV¿}Bœ%v)ØNÀilÇ8vî$�EjC Rf°†õ+/aÒÛȯÝ T!Ôpç�ílµj’U2aàÛ¢ª ™ ‡d•‚ÝÙcÖʇ�c3”u¢¬ƒÊŒ¨»›VÏ5-¶5% Qž…—@‘ÀÏ�ó$WM”;6¯¸QU®^U\MÀ•XI%&‰B’(ô­9˜JÉm\ru#‡F�PM¾ðÜ�*¡Qó¸7dÔ* �!  úFf÷oý ¯ÜTMëÛgODè´=@®Æ¾5¨p<µÿ>Ð~þêmPMn¬Ü^wˆü(Œ¶ºí†Wçš­¶¾éÍ«ôXŠBÂ8e_ЮûŠÇÆ.£Ýð3(õ áìÉË ÏÿÖ+Øí²÷B1kËóF“}'ôË·,à�ù¦±9^¾’á»�pöD€ù¶F½J¨DÞˆPÄ› Ž&‚ÝžÃ^ŸñÌã1”öÄQÀN�ÙÂ=Þ_gÅÌÊë7ÌÁªóL|©¼øz†ù¶—1®$„, DÑ~Ÿ÷ìÙæ8›`|ûUìÜø&ûÓö¥nÜý"ÛÑÍR|k¥ó°[ŠÏ|;�æùÑqsùW!òSˆ"Ì=ôa„µÆý�á!õ;àÞ×ãõ¯O³­5Êw"›%R�¹´¿“cI¨~ú¯V’öñ_ðßùukÀvv)Âú§ŸAR�ó_«}â$vœ™`oõeŒ¶®a¼ú�<ªüÚ$kÇÝ?($ž¨ IDATf;¼•¯Ï­|-kâÍÓçÜŸ:£ƒøŸ‰ÈˆËH\ ¶c°ƒ’:‚¨Š¨ÖAØ\Îsã�kÈÒ=dÝ;pýõü¾Qýfô²ï~�½<–"¾Ý7@ÕO¢7�ÿ7 õóâL Ž̎ÁéÐLTËO9ÃìÞ�رŸã* ó‚ˆ]6¾èÒ�ËéΧ‚¸×N €B�ðǨþé'ÎGnÖÿûg—:ýð©ïêMtU8ÛÔ{K˜!D#÷ ‰}f² ³s×§™I—<-H:•t¸Ðèõ´hra@Ö‰Ø$"W‰É­n:nT‡„È÷¸kß¿/™ñíõª¢Ì5ã[£sç¦R0Àί-—A\šc[ÿs¶9!£sSZ�«zЫGÃAÀ†f1§–‚Œi%¡¬“I"eÃÀ“¥H ýç½=<×ùâ½óÏ8ë4»bóu“�àìpüº·ûi‚½> ó•a¿ú -Ø(ÌÁ#ʬS‰•Q & Ȇ!¹0kEœs(qAB”s¢,CõN-ÎÔjUbO‚¢ùñ N3ávCñâœæjBܨ)iÕ[+b¦ž쇵ǂõ- `8–7€æÁ˜±¾å°Øñ³Kó íÀWM´¯¤©`wàpëžCøYŽ(æÕ M‡ÄÃÀ·E!Ž=ùô€Þ«,¥Æ;y‡¡ÿ›Ï?;Fy"…þ˜YÁv×Mgœ2Úúà-ó5éÍ.ãÔ¢žº¡7j… ­Ê‡î=ˆ¿³aQ«(ÔÂ|[ãË7±võ†o±ÊMO,°ìÍ3+”Å=ô–~Èïõ‡Œ…9�8 œ8¦§­Uõ ¡ÓÐ: Ç‚ñ„Ñí3cÁS磩‡wC÷-iWn0“ÌÓ·_š ¾öj†ã qÂñE�VC£–{…’ÌãT°ÛgÐþhÈÑv´½÷ª ¥ vžüñŸ R¿ l—‘pû‡¦5CÀ W agr}€æH„yÇ¥{ß`3¼•ƒ˜nþÀ.ÀÄv ¬�¾ Õ�•àúéï«%sg~ Ÿg .ƒÍØ 3¿š;ƒ°Ò‚JêàÀëö+—AÆ=LÆ=ÐÖlÜ~ãÑ–o_ÉÁ€¾mQ\ºVªðl”²£åêG:“ŸNÑèêI5wá?¥þgawZœ�Ø \6@¬kh,>ÕœC7@•DÈ:ðxˆ,ÛƒÛÝÄîÍ/c4¸=í‰ÎÍG.í=Çfpµ 6JYî�Ð,úêßUYäoñ¦:OüX]GõÏüAa›ƒO‡¹sÏ ™;S'éiíChj´F"p.Ãx{ ë_ÿ ˜þm¯zåÁ{jG› .»[Êʯ•ªÝw¡šW4‰©pþѨyüéÿD?¶§€OƒÍiq)œIÁnÉÉ›‘”ÌSÂ_æ}‚8{ÏeýKl7s`_´|m”Bdæ*Ó ¦YW6• 4X)?˜]ävX@iÆŠ«½?|½›,Üæ `SxÒ˜åÕçãÈ�‹‚ãŠ6“Doï5*l¢€8‰É:†�2IŒ¬+›Ä”%ž�¸0¯À¨’,.dêYAÌB™iåÔi)jÕUÀ[uæXR#lœÈ$‰#’GÏDhÈhâIžq"iŠ\îÖW9Š>þ7§ý¡÷àxü\ˆã‹~@;‰|[–r©[ÆÆ6ãÔ²'*ÅŒDøïÃ|8[)?+1ʇ³3ë½3+�kÛ�–ÿëw}«P»å[‹ÒÌÏ#à<Ѐµ~ý F W*¾+B>AX씼8B:0'Q(mQ.ýÒ• •ØWDž}5Eo(¨Äûdkœzwôå…à-!ïê3ƒ1û!÷œ˜-´¹RØé1:-ß ¶rL°ü×þ:žûÌg±s×b4ñ²¸Æ'�ilîúYœ­®C·ÏÏ%½5IÉò¹W xþb†'ŠpþT€ÅŽF«æ�]æNöÎW¸zCÆê¦=" GÛ{˜€ìÏ9EÕ“YŒjó?F*ú/Àæ»4`›Ò�‡‚³ûzé^ÏPaa·ç&ý—œéß�ðûþÙÁþüGÌË•�w{þ 'XZ×W¾··OýcþcqYMlJìÆ3Û”0„XåS©ÎÙÖNÀìø~&ÿ£”­ %ÏÜŠC¬ñÙm�›ˆ9ÌÎŽÀœ•5v[vÒ}Aìd5�¯;“I.€ælõã]ø‹XÏóïû�ÒAôYa>_´µùÖ@BûÜ'5jâšo©*P5[ØÉf0ÂöÕÏa¼ù:À£rfÞÚq÷Kl×òs½y™ëÏ´²ýy×sa¶§@:lœýä™°ÚùGùQqiÂÖ_©L!SÀ蓾¯Ä{H ÇÙøu;Ù~Âý€¿]º>»¥Ö«)*Å©IÅq¼ô�…JsééO³ËjâÒÀÙpYjó»\æ•óûíhûKlG[¹PEù¾±[º¶öf*3åêG1©¦áÊcõÝ]Rç/üWñ–ý�ànÿ„¤c%Öˆ¸â yBd!Ì a¶Yÿ²m_¶£ÒÀy¿týÄ£["A&?>ê}tó‡>Úøå“‹ÚÝX³H"¢¹†¢ PzœÕâ×Ïœ{ñJcywìÂ̤Šmv©Ïò³¼“Xel'îv…'©VÂZÁ…šl†ÁTuÉF!Ù@Ãe|¬£eaNI­Bå3.—kŽ»{§–òyBŽCÝ›Ôk/Ü\^ÙØ kãŒÃ,uʹ Ì6'Œ–5SPу‘V޵�SáZEÙjB®“é4•i6TVM”%ÀŽ3vÌäj"b­öç“æ› IL* ˆ ÐcG›{õÆ 7;'zCUëöU53Öed­…FjC51l‡ãZ8ke„pÕXÙ(š…›$öÕ�8$à0W¦"_…™J¬+Œ&LK�€ª !IˆBM´³çP¯*ªU¼òÑ“å§0Æoã×ÿ· yßá¤)dkÏÉ…•ÆŠ8†Ü¸ka�:~ó!ñÙ,=ç>Ÿ§`¹Pˆ*ˆo òÒ¶Ožå*V̾Õ+5ÅP¶¯"ô‡‚[k"€µrhe€xåJ†…9�( ,ÎiœZÒh×’\"×9Ÿéßé1®Ý1X.µTÊ^QÉ =ÌIQxe)?Wâ×aš ®­ZÔBµ¢ðµW&ŒÄ®üó„½#ünŸ1ßÒÐ:÷ ië¢}—·G�:æ \£öF§öb`üκƒV@-¯€üñ«À`g­|Ì£‰w¡Žý1}ËDã>ÕÎ ›V¾R´²¤a°²`¾¥Ñ¬yCÅãËÇaÝ6Ö72LRÆh"ØØå#r´½çIˆ‚W{‹Äñüã'£ÆÒG‰è ü˜°m±M5Øhf«„��ˆØ Ût‹³ñ=—í݃p¡VS´¤Å«È® "Ã}<ÞU‚E*PñBÜ<ý=WAôŸBä‡ÅeUv°™ì· ä™Qäšð…á`î]ÀÂf�ÓákÎ îæ@®_" ;3@®Ü&ò&@Ž º~æÇ¢ÊÜß„Ò? qßÍ6CQ‰òñå1JžôÜoúNìÌ&g㫜õnˆ¸‚• Òl|å¡éo'5¬žïÎSë1Dÿ Ì—‚]6#¸tâ€ÊÒcÐaàç}°Îaxû°ý«^qˆöûÌLìx÷OØ o—Žåf‰„3 ÷s?'‰� ÔQýÜ÷H‡ÉßTÐ?ÉÎ4ü~å¤Èè‹ËÝÚ9w×5›lÆ7\Ú»!.íæds௽Cª’÷#Rª >NЉ“åg ãú‡yÂO ÛyqY l´°ÕÂN±M×Ùf»b']—îÞË?+ÃAcǽCî£ûf´ÖpNÑßý»ßƒjõ ”B·«põz\]ýŠJ-6«‚mUØÆ"ñd§ÇnR¾¹ü3 Ò+ÅÒ+]7#üC©üÀ™Á©V]…ZÓÇU%•˜`,@$”D¤Â�Tý¤R_ú‚�/ßm7Ò¬Ö€ Ü] �J�S½¡!e��!‚h"Q h¸0 …dÂÀƒë(‚ â@ñ€Ï�d®¡¥RÙoå`WFoÀ¸°¢VU4ßVØÙs*Í #«îlp¸Û§°?”`»ë‚qÆÚQiêHJúÀD­ˆE„�ƒ=>¯ÝÒ¼¶s eue« Y¥ÈY+n{ÏI–Aç””]´ƒ€ ò™j¥ *1©q&z{×êÁ˜ÃÍ]tû¬# ¶÷X  ™¡în0Å^QJ´‚+…äUåt(¯~G^©* À^—X0³,v4’ˆP«(4ª„$VˆB�&@i¢@ŽAk[õŠW�I6©0gâlÏ¥½×8íÝqeƒ¼2�Û9Ì¥¥,î·sûÕÌùö­8 ïûÛÿXà~\œ=¾?0ñ›î÷™ç†d.Ûöeâì]3Xû2 ò¹…ý6»n©eivø\ÞáºU®IÕ)¨7«‹çÿV¿Oœ]xQ¬Qà;b7é Û‘é­>/lR@ IÝ¿bp°î—€uùÚ|Ð~ÌVPÃÒ½£P¤›š€4©¨C$¾º$Ï�QK¯t- J×S™0ˆƒ>õ©&Žÿ'˜›ë M5Ö×.^\•çžûa-¨ûØPõ± 4’åy5߬ŸÔ ’f|y0â×7»¼nìtΣ aEWÏŸ i¾­Gú.u´kÔnÑaèûï›5VÀµ›–’p õÂÅT9†N$Øéº ÓÖÁ`ÄÁ$m�hÇPŽE çø† ¤Áé€8Ÿ·(Àµ‹C²•X1‘p«¡d¾©%ï¿—zUáø¹w®Ž1åÙó>ãô’F½¦¨7`Œ&B½!«ñDToÄzuÃjc¡�m¬hë œƒfÙ7KRñÃÜ�$&w|>°óme[ åêåâN±u"½‘p–‰\8"Ô~(¹šx $"ÔkD÷¶œÚÜqÔ‰êYïô�ŽDo츠?dm”u¢­íô˜j¾ME´‚tZškrILjr±ý¡¸JL.ÀqHl¸ÕPXhkñ-B@ªi6<ÊÛ—´* ‘µ¾EéκE½ê½0¾ôBŠz5—jÈhâAp½ªÞÐbó Ò᦮æý‘Ï‚ûó¥P‰üìö­†' -ÁÙüëøíÿûóxíë;xêB8’žo) ®ßµïh6nܵxâ|ˆSK:Í}²¨sçÔø*ÚöžÃC'BT«˜kE˜_ÙȬ'ýÃ_­YÛvoj*Õ1îm:,´vûŒg‹±4¯Ñ¨íû”0ûÖ¬Ýã޶ñŽíÕÄWNŠ L1l(ÊU¦|+Uj §vÿy«›ZµÄ»¦_½m1WìwNB¬ô†Þq~aNC+C5¦C÷§�Å�B‚1ŒåÅÀ+’UI\2),Làõ›vjFYKWîX\¾i¼BZ>¸žDtD@޶ï¨V¬"ëšäéjþЮåðjþQþ»Å�¸p+NKxX"£ˆ0øóI•¾“}Se�¤ÂjK'óÇ(ª� œg[âLUØ&ƒ]ÀvlÄ��øþ3{P*¹^©Ed<“ P;Îaï@U' 7—UŸ€ÒKb³šp#»�ÍØùø2SŠÏ”Žÿ ߬ônÑöNó_ÒŠž'!õ³ß6ˆë?¤Tðß2gsb3’é<@Þ¾T´Baã²Ñ%;é¾.v¼�ŸÇÙªÁv);Ù|§Çò°Ä@ùš,®ÅFþuöº ïs]ŽK×ä`&)P¨wÍV%ñ€}™]»åÆì½£ýqŸÎÿ®L@ÒÒ}£øZ$,Ò™jâ�óMïï}KKOC© €k×/¿üÛòÚkšnRúšˆ;>}|A?YIÔB ½Üœ°HfEzÞúÊ‹é?¯Äd>øDôãV¢¬^¥…VM'õI%&…JÂÀ“޹¦ÂÓˆ1ì2®¯Zô'Œ×®T¢‹×3¤”RP©ÉÁö빦*À¾vŠY¨äÍ(ʃ<4\³·0§Ý\Ó«/5kŠ« qúC–F]I5ïáß Üzy„þ�qöd€nO@äç@V7± ÇBÆ e­(ã¿æäC ó¾�JÞFÂJ�;MÅKó�›k*nÖÈÕ*ŠÃ�X b x8�>ðHŒÅŽB(Ni*è�ü�mš1­m9Õ0¥V¨?m�(c¡­e´c!f�sBÝãXGc¡­¥YS\­Ç!qÀ ˆ³ŒÝæ.Ëé倛5âZU!‰”D!¦m8QDhåÒ¶ÃQ>‘ÊTͨ?bìî1uŸ}ÿâ Ì5*±ò¹Û^%ªYSÃCiz# )ÓJBhT}›M½šg‡ûmAAàýA®ß5 ê…Í]‡W®ŽǾUtb€I®*5ñ*.oølz�Ïòoï9\X‰P©² 8±è¥ikB§­qö™WþlŒœ°b·ÇÐÊûzCíÆxâ´‘Kõö†|ß–¥ûU†cÆ�u‡'χ8s<@§åÉ@”«¸9çÁx(XÝ´xâ¡pjèh?‹h_�q®¨¼xÒ‘ Ûc¬n{ùþ�èÌdFðÂ¥ KózJBÖ¶ Ú–æï—IIniZv{Œ‹Þœ°QU¨×<ÑÞ(Z¿hJ,œXçÉä­5‹f]! ¿þ{tš¾òî+“©##Â£í½¼•ÁÅ,!p‡€Ú¤"# Y ¤­ åìåa \¾ûVÿ3"6#›óÛoÈ öÝ¢ÓÀ/¿Êf‹³ªWòât²f“-q“­Ižm¯—2¸�*9Ìœ«Y°9˜!Gî-d¹¿]׳âÐàÆçnø5¿Y=þÁ‡ÕΧ„T H@¡¡x5²ãÞu;Z¿UZûÙ!Õ®²�Êè>DóÝØ:lÝb_)®¸ÖжªJiÝê$Êfz£C®M~‹äcöÿìL|®t½ŒK÷�"qQ& �Ç¥ŠM†ƒæˆ| êñwþÎyœ:õ âøGáãÞ=…K—nËç?ÿ‹%â–åq• °]£Êãç¢�´ŠÃ�›é°@¬wš\;±þÜ©%Í�ª²Õ q‘ĹF�äÜÙH¢üì,� ðê«)~ïs#L²¼åiè]š'Io †à€¼Lj¨½aÝ8eî á@¢*1)fP®T k�JB’DJ’<×P\¯)®Uˆk‰â$"®$ŠÛ„ù¶–/<7ñ<>÷ìÎyÂ�Á?;ÁÙRã�䂉R ˆ ŽÀZA åp!Që$’|®!‰I¢¨WÜj·jÄ�º’Çû^©'W®¿,Š ™0“ž¾ê<¸òÔHîκC®vÍ,B طÎp€�ƒr ç$ìÅȾo~®©¤QURIˆ£�$Pä"iF¢ñC+�Ä!Ž”Ôò 4‹÷¿M;ÎÙåîÙ™ñmC÷¶ÜØoîòTéhœzs¹NSáÉó!š5ßž%ðªH;{Œ­®óÞ ù°?¡ÓÌ[½’b :¯¼„@+ïß”ŽÇ~Ýx°*XßqȬÎ]» •ÈKÆ¿~3Ãò|­KÕ¹u£ø±c ‰»}‡³'BÌåEõn”2Fc™>Úu…Ÿûû÷nŸ:­ë½3œ²ÛÆ×Wí¾œÊL5èÍHGùÿ“ˆ £ÝШV|LI”Wa°ùú³ÖÏ‹tZz*/ÍùœÓ`Ä0Ö·kmï9d¸zÇ0œ=ŒˆÅ!áCODxñ²ñ7[V…ÓǛӨ×âÐW¯ûjEµÂ¸zÛà¡SÁþ¬I! �Kkí+D…ñ¨s‚Ñd_é«7dìõ}[ÙhâÏûæ®÷‡)d’£ˆƒ·6r´mï¥JˆÂÁ–¬¢rÍ��2ø-ƒ6;( ¶\}³+÷Ë&S)îb_ÊÙÚÊL–6œÙ¿àÏ‚¹ñ!-"og¶e6ã­É&WJq– Rqä�l÷ìkr˜{+@óÛ¹¢7Ó4­4K„³8çÁ̱œm êR5˜% ïæšž½&ƒ™*Y\ZÃåªdPƇü2¸Ÿ­H¾Ý51{}陪MTŠ7œ‰ovÝ–ï¦ô*“eÿwŸøDDO<ÑÁââ/#Š ÀõëŒk×~I¾öµíü½TéúP¥øèßÿ«µÿòø‚>YKˆÂP‘Î鳈q�ñDD)Èéå€ëu%µ*ÉÊBÀO~w‚KÏOäî¦óÙü!#Ë©nÝóÌæŽÌÅÁc FL¹ù™Š"¡4ƒL˜vºŽö¢‚`Í5j±B’@*‰’8"©ÄÄÕ˜¤^UR¯?y>’̈\»c%5^9¨7Ô*„—.gøÊŒ—eìì1VJ˹gy5(_eð/Q¾í d¨Y#Ô*Š’R‰âˆ$Ž »=–jBÒ¬)iTwæ–ðÕ—‡ÒìÈ`ÄXêø¡áNSáöº›fÝYXùãD €y‡â"&1Š@Z'´JêU’J¢¤‘8±’f"»}–§�ey^c’ º}O~Ò,wÑ6‚q&¸±êœ«7€ÓüàæªÁ©¥çNøì|%öd»_{Õ¥Í]ÆÎžÃãE¨Ä…”£E{P%¦) ¥Œ,ó™ý4óqÝ\³ˆ#_)¹zÛàÞ–¯¶Tcß¶µëP¯Zuí��àΆÅBKØÞÕ<Ÿ,d±ŽÊ®UŠê ¦²½e%­W®f¨&P¿z-Ãú¶Cyy“ÌÅy�dò–«‡�~��OyÂ�¥ŽF£JNÇ::o]R8{&Bôp`o|aôGŒÌx²7I�œ �Ù\ª×xr}Õ_ÆÈÛžÛ`<{1E§©ñ�G#œZÒÚ² âça[»VBD9AÔÁ~ëçƒÿ!*fb2#x劙7“®ò†‹s¾¢’“�£ ÈÑöW á™l¦)eÖËäC•®o.e3í!/þV>Ë&K)S+3™Z[ªjÌfiÕ ±3•�ô�êÎÛU”’0†™ËÙîQ Ô%`UþÝÅgÉÖË{p V=(ÿ,}@å L@ÒCª£€ÿf*ˆ¶/\Zc¦_™|¨™ —Î}ÜÛRÕãÏC>»¾Ê~>EÌ:�S—ޱ𩼖¯Åò×rQ}üãÿ.>ö±£Z}Î9¬®nÝú>ó™X-½¿à�†�ôô£áÊ|K·Úum«¢8$Ä¡¿�¥V�e"a 8ýP -T”É•WS|ãõL¬Ÿ!ß’å^²¬´P‚8±ÈÒ¼F­B>«ŸY‘ú„¨Ú¹•å€Ê­9Zš5’G %d»ÇÒ®+¹·íä‹ÏO`ÄZÁ殃ËÎ÷„nߛمˆ >¯qæxë<MĪÃKÓ²¬©Uˆ*‰’( ªVIHxu# 4$ sM�ù–’ÁXäÅ×3!ò’¿ù‡7¥ZɵøᥫN¸Ú³�ËCÛ…«¶Ê¥4È»D ‹ˆ±D�5üp2µê ̾ݦQ#©% +Ë#-7¶¶pz4tž¬…„.¥8¿N‰Gáä½³ç`ó»«*OŒ= ]IçYöå=5ÐKr'l�šD Î *±Æñy_µH"B%V`8ç‰N·Ï¾‚`|L“œxlvùÀúYßr lî8„�f„V]á¡Sž%q^pÀò¼öï•›øušÞc¢U÷îÝž í+S…¦R¹9郱@/—j1ˆ¶º¾Z¥TNP V!ÜÝ´è4õ�ãw?¢�R”ñññUÕÔÇ$ ýº-ÀE€°Óÿ_ßÛh6õ oN¨jÂ$c¼|Õ·[ç¶|ͽ™j•ƒË¿èxøL0Ь)Tã¼úóÏÒÀÛ IDAT­•?Þ…Ln5ñ)óíÀßì\.{<Þ÷ ¹yÏÂ9ÉeŒå@%æ0‘€3ǽôð½-72L5ሀmßIäc”�* …ƒj8R0nÔÖÖ!ßâ}; $ÍV f –žy�ÃV6–fgÞ.�›��gÀf9‹¬g2ÉRŠ¥ 0í ñà¿ óð­^Ï|2Wn)Œ©&[ˆÊDn‚7Î#|3Éœ²³Ä´L<ô ¸—™kxv­ò!•yîÅçdÀ”¾§CÖ-Ï—YÓNEíö<>ýéÇÐlþgˆcÁ`àpûvŸùÌué÷ÿåÌ5;û^ÅûÓbG7“ˆ¢$!.¼ .¼ÿVžrøÝ_ÝÄ䵋Ãmöª×FÄ8àκ�F=us¥û1EÀ图ï™*êUBµB(HÄZ¢(( rXYÖÔii„P‰>Êk× ®Ý´ÈŒˆq"—R�³��]‡ÑDÞËhìAÞê†Å£gC,v´Ï kÀ �f ½¾`m×!ŠÂ✒ZE!Ž€( Ѥ5!‰jR‚…¶„pgÃÊ�5 cDRÃÈŒÆÅë©ç[®MˆCA§¥°¶í0ßR°ì[XÞP2Ëeq9ÿ>I†c¦åÅ@š~Άr� ŸYÞÚu5IF‘?øÊø”R$ƈŒSÁãç¼BÔsS¤y¦¾\qQêÍ3ôÅŒõ*FçN¨%^ª0è«&ÇÀ8õ€4‰Â@°´ ¡ÉÏBlï¹<óí‰_APuÑtH-À£çBÜ^³8¾`y^c±ãU”â©Ï‹ÂaH¸³nñ¾‡#Tc/�[xt„~ö`Ø÷ñdù€yf¼xfÒ´h#d(­§Õ �žW+¾šSÌ|Pé±[ç¾ŒÚ …ùVN8o’åÙEFkB%!\¾i<€Ÿù�©VÕ  Ž|‹R·Ï¨W aŸK7¼§ö7ö`#ˆòAw­€<¡QSè 8o¡Ê“gB çtvùkãx”ÊtîÄ1ÐJ.à œ±‚K×Í�Jß,9zÐ]teÉÏ×ô†Þ ñC�GGähûŽ#"³`˜K`‡�<$ÍVTþ¢2�Ù qVp³@3dê0çÞá~Îf¼#!E{ Íf”•ÌŽw h~;­ašYƒvæX– g8Cªå>¯ðÏžûo6™;lí–+ ö>à~öš<ì%ïâµ9»~g ßìgÏV’ˆ~ôG«8þ±°Ð†µ‚ÕUàk_KåÞ½_B·;ȯ‰ÙëÀV‘$�€)/Jÿæwîbðë aL³ötÿXΞ °¼à=âÜÔŽY`" Ð '‚¥ŽF­Jµ*@ Tbàì‰@ ÜÞpĹÐÅ[ öÊíÜ_"Í]ÖÙù†$8Ô+ ó-Ÿ‰ñ¤¨7ô€7ŠöóÏëÛgŽï÷Ñ×ü€¶xàLÐ@£¢Ðn*Oà çF‚Ï]ÌÀ †ë€.e86¯<Á8¬=óƒñÄ/Ûã ’hÕ÷�”òk%ÐÀÙ¿Rïí}c¤þÕçFõÇÏ…PtG…*• Ë€�]O6ûö¥zzsT‰=lžo+´óy’ZE!ÌÍý˜­" YGãÄb0m©*$dSã‰Ôx"èf~è>3>ÎÌú Îp,ÓØúcoÌÙ¨)¼ž+2Jc§çðЩ�Ò¨W} _uéö½âU·Çhåd£š(´r¿�B· ž¤zRd��a’·3'‚(03ž»˜úÁíªBDþïÛ •“¯(vøñ»ÿÅi­�ùø‚F5Qh7t.ÉìÛãMØØuSþbþéÿüz<ذ°ÖË÷žX poÓâ2›©�K‘P8ÇoV)€ó+!º=/«Ü¬«#r´UEJq*�‰¼Ëàæ›Uå)�ñÿ~;KÞåê΃Àf[vŸåå¿lçâ[MBfÉœ.Uk :ŒhZÜ¿]I¾…ûSë„™Áì¬ûÃä–å]®ÞÌÆÉ‡çwç� ýÔOý4Μù!$‰Ã` ¸rEãÒ¥_“_ü“RE°L@-)¤kýÏû#ÆÝ çí†ÔOž�¦ŠP0­Ä>6…g¶÷®Þ¶âý I (%§ŒÌ"ÿ[ ‰ iFS�Ÿ™ºKߺ¼�&Ž•h5BԚʻú,½Âí54ÙùJÒµ/š¿ó…”>ÿì�ªoO»¹j ³O+aê-T]f~èxèTˆF1,žÏmTB5ÞCÔ‹B1*1acÇâñs‘rðÔ‹c»ë`¬¯Â¬n>8¶2¡}ü¡×îXŒ&‚'ÎGXYÒh×5*I1ã+p_Yò-aû„#Ÿ�É[ÀˆD¾%mœzBšZ?È¿½ç0Ε¶2#àÞ–E£¦üu“xŸë€j… È¯“@2#ØîúGw%¡—¥±‚ZBØí9œ9b¾å«H•Y¥ªÀWŒ”òkuo�“5Kø§ÿ¼K,¨Ä‘÷?Mßx=C³¦`Ý~kÕýªk"ÓlW>7Ò¨z×Î'ÏÇh5½��£í;ž|Ì‚‹·û÷ò—pß«†¨„·æðMö‡½‡››x $P¾‰Ç[%sEK¡);Üäó!„î/â˜Ê}®C÷&ëöAdC¾‰qÒ!1Ë0•®C¢û±GpæÌ/ ÓiÂZ‡ÕUà•WnÊ‹/þ ¶·‹Y(ÂgNfÛ$Ëí\ú¹‹ÙÕ•¥p£Vá�÷¸ ÄQÞß]%×Åý¯?Ž(ž›ÊÐ^X 1;ìt6»| ôà,üý~”A¨ •¡{)á(ð@¾YŒ%ŒR_EŠ#ÂÝ ‹ó+ÁTl·Ïù@¶7x�ÆùÖ»ñ½aMùhÞw!Æë73XKh7€ÇÎ…86—·Æ„@ùÖ´’“L's_ŽÄ—+…¿ òJŒ 3<õ¹»a‘e‚7dDù|Mµâ;A &o¨)Âè�¼9á\SA)B/÷q,ÓsWl7ïœ<¢Ýð‰�Å|?*ù\L\ä31AnàyD@޶£í½ fåPôvAß·âx¿YŒòp®Þí¬|ñ3‡ûÏ%|+Iç;¹éÛdÌÆ<%€ô?q++¿€v»“Ïz^yå¶|ùË¿‚ñx€ƒÒسs0"ìh,îÌñàKíºúî0ôò®+Ë>‹…^¿ß1P‰aà ÇN.êý GÞžÓ¬)45t&¸ðx 1¾öRŠ×nY¤i>˜ê›;Œ ÒÈ\ë|…#|ëS  ©¬nxÎëìŸPñƒ¯žtøÌ|5QH"LŽ£ˆÐ¬ùø6v6w½aÚ�uÂK_úoÖæz#Á͵Kó—o™ýª†zpF¼ü­u’Åù^þã ÑÐU¥s¯`¸;ÂÚú6‚@¦Ä`<¶ºYŒÒ}e¨«·íÔ7áMcÊ·s'C4* K¯RUIo·ò„çáe_ñÛ7+†#Áê–Ãxâ ¶ˆo;<¿Rõ [‰¯pD‘?ß…ƒ»ò*pùõŒóã~D@޶£í;“TÉQŒïÙó|?ÒI߯Çú/{|tâACM?û³ŸF»ý7ÇŒ~¸rxùåß�W^ùö…ðÈÇô3ϯè8‰ècA{õŽÅÒü¾JO˜Ï 8)°02ChÔ½C£Fxê#D±Â•¯Žár±ËŸxO ÜÝðÎ˃±�õ&cc‹m�¹¦oWRÊ·¡,Íklw·îÌ·5ê•ýö®Zµ.~h<Ô@),uÎ�±¶n±—÷þoïyƒ3­|uÇX Ð>k_�;=Á87@»8�ŪÌÞn±£Q‰�fM£šqèIÛÚ¶›mEÀW¯é¦`c#Ef+KÖ·˜÷¶¼TÛ*?oB€Šm8ò`¹0,²Þ@kD!³Œ8T8ÖQè45ÞÛZAwȸ·•K¨Z?œÍ¼ïÏq@6µt…-Îiì üÀôò‚'@õšw´&øêY»®°±ã0N�ªwO¯WÕ�ù?4Ä‘B½ê•¥Æ©À:Áp$˜ß®´7ô-H"Œþ�‘f¾�,Ê3üÍagÏù÷T>þ…9ýfÜ÷°…„NË�þ…qbQAxõš�;ï ÿ«ÿËWÑëùóœ_Ù:ÖÑxþRzÐ�f³gô@Fy¿vµvsßE¾¨ÄTÜÒ̳cG¨& ·îY|ðñhZÕȬo¯ÊrÑ„ë«">Æ©/îßhàéÇ"|õ•„Öæ çN†X˜ó3%IH¥:Aû¹“ŹÜ\±ð†ÉÛÓŠ0�·&ZçÏóÈz ß‚_¾iŽÈÑv´mGÛ{˜Œ¼Õ6¶£í�L‰‡Öç@?ó3çQ©ü––Ö2îÞUxå•ÛòGô‹Ø7 -ËöÎÎ{ÜOR˜!;ÖwXŒ™¤’W5ÍÂN¯ f™Îœ?âÑï¯áö³üÉï1žø™ŽîÀƒÙ½�oÉ8ÐÂ4 êÉ+ µ Ëó¼ø]oN–ÄÈI�àá•q^át4–OÈŒzÍ·™¼vÍüÿì½i�eéYø|ËYî¾æžYûÒÕÝ¥–ZR·™™aFìñ„!0f™`ˆñ< 8ì`‡±<3Œ'† &†°ñfµ!c™5’º¥nu·z©êÚ׬ܗ›™w=Û÷}óãýι7³²–ž ûFTTeUVåwÏ97ë}Þ÷Ypë˃¬iéôuæ¾Diìa¤á: ´¹8>ë€sšòh}À�Áê?JŽíÝ'\T‹9ßR[œ!Ï¿R$î:ѧâ„a}Gá«—®ÂµyƒÐ c¸Õ;É>Jg�8Ò7$‰Ü�éló‚ÌêÄÉ nÝn#‘ŽZ{Ú¦�'ÙÆ¥Õ&ð³×Qhµuvç\� G§G´¹©†@­D�»cý “„Á•ô,,m·ô<úœDÎ'¤hT ¸å}†(¡Ë^Ÿœ–(Í›t4×,%.Qæ¾€½´Yž¨ ì´ÓMÔÀL“t®3¤ÕË[»·–bÌMJÚ"äH§ã�˜%d Éà§ÖÉ¡A/ÐY˜£ë0´Úœ“&§ÝÓp$·40ÏãPZc§­Ñ¨ˆlT Í~Ç­ƒ—2cwûÕé"JyÚvä=dÙ+RR¢ûâª}ΕA´ã�>µSïöµ1zHS,æ¾ðÕ »ÇY {|JÚa¿)%e ÌMJìVÃw<û~�‚€ �x$âOßC$rߟŽÄQdpñfœ5F{_Œk\ã׸Æ5®Gÿ?ÎGÁûÛûc8wî9ärçÇÀú:í[ŸÇg>sÑ×pxÆMü·¾µð=�*çB0ÅÆl¶û½ú¿Žýᇩ]2~ô{Êw¢Æá:ìlÎcÇóÔ(*GRš´#€‰†€wTâ�Èû÷ÖÜ]jÁõ+èZ1÷ñ9-E •}uì!@ã¾+aˆs>Q#÷ž©:�¼O– å\‚VG¢PjòNGã铎�p±×RXY#G£D‘ 7Q@š,Ž*æV»§qꈃ‰* G2;©ºEuD“ò½”zCœô|Žc~J@rXÚÃÖ®ÂNG#ЬÈx‹ÎÔhøif¶vª%j¼cE9(žË²)w?00šìsG¯S 4]ö†JÉ6Í.º{Iš<×J­=…k‹Ifðï_ì£�#÷ª(¦¤øj‰F˜ù môÜXC¯¯aÁ™ëPBødƒšæBŽáØð=,½ÓEÏæŸlí*œ>âÀ•©è™Îµ´AÍô^‡¦ô�B£¿D4Õ?wÂʼny‰F…£à§ú%ru "²ãÝÚQ8}Ôn8l�žï8ÔšDÓadDÈ ×ˆŽ¶Û!†œÏ�s9v:Dô\ŽJ‘!ç“ö¤Ó×hV*ÚD$ hµÉ½Ìd×½• Q¡ g¨Rm„— Çí9í™™Ýê¼y%² �í+Bä¬õuê²%•£Ñ-{ŒïZqB ºZ"z]£Ê ØÄtîtû7ê œé"®¾ð*×4fš[»êŸ{ڳ׸³Bf{�¶Ý–º…fØðñd\ã׸Æ5®w>öi=ØwwO=õ$Êå†ã´ÛÀÝ»»øô§o›Nçw1Luú[?ä=}Äû‰é ÁS ÜfU VßtõNô;5~k¢Î�ïŠ�VËâC•CÎçb„Ï®rC}Î�§ fϺ(Ïz¸þBW^ „äØt{%†ïWÀ9,—[ci=¡é2{TÓ:üa©5µ2G½ÂQÌ9”¹‘P×þÝzµ†“ßö�øÅŸým Ò¸v7ÁÒºBœPHÛê¶^‘Õ=$…=­ 4˜¨ Ôl0\Þ§‘HÀ‡R€# &ëDËñß瘛X^Mpg%AR“ÚíÓÖ¥ÕVØÚÕ÷�)°´Ÿ 2èÛ¿#32ø§ÓÞvWcц¦bë鉴 ì]1¤Æ¹M¡ó>Ãö®Êlg�†#�·®Å68ÒÀµÔ¹z…c·c(ñÚRa¿Vûol ‰Z¢wM5Jy'³íu$ÃÒúP÷Âè‰~ù_ÜC§oðÁ']ÀÅêe�Õ­;6ÅÛ˜›³wÑ$ç®q�k\ã×xò1m>*Á¾ýÛ 8{ö_¢\®"Ž Ö×�W^ ͽ{?‹åå4Í|ÔáÊÐy¯wúýOù?67)E1O `�bB�ÝŽÆâZÂÎuˆáŽÃM– í1œ;ï¢q¶€µ×ºØ5@¸£°²šPÎDBÓÞBŽ„À¯]¢�1j¶èïÇŠÔ:=ÚbŒ¾Âƒ«z…&öù Ž}g´Á¢ÆñíëePx wÖ,­À…‹~@!hOžp0°NL™˜å1�Ïð'†~ QÈ14*CšNÎ#“+öº ý€@ÅÆŽÂ·|À϶V›4aBy(Û{Æ}è` ûaçê Hä~ú¨ƒzÙ6‰r˜Ñ•m¯«qúˆc)LŽus%m?&ª{–²Æ$ÎXG§¯±º¥†¤õè –6T–Æ t{”åÂmddÓÁÓ-ÐÁs'Ê ^�‚€[!£WíÏ )ädÜ]‰Q*ä}†¯\Ð ŒÕf½À`aŠ(Sûüë•Î~èý¤ c“½>G2¢ÕYpÙ¨ T*KË1úÚjmïjLÖ9U·©&J€ë‹”&Ÿfu€±Cïëa¿µ½§°ÑÒ˜�à8wÂÅdM duI\PŠxt{D{[°îTî>>ÑÖ¤dЊîKš’nŠÂÈàúb ¥�~ áJÚÜ\»c¯G%eûu… ÛÜF…gY!Æn®v»9—Ý·½\\MpbÎAÕ:l‘Ã˄㩲°[)è}s{9¡í\ŽãO^îcbßV©; ÝÑdM<Ð8ì7Æ�q�k\ã×¸Þ øàÑo°ú¡C³ù­p]…vÛàÚ5�‹Í\¼ø% ·©È|”NeNuß;U¢\ ºRꯟ( AÓ˜ª 37!áJ`vF¢z2ÝŠ09ï"æ¾ÐÇöKâÄd¢ñÝŽºõèô†SJc f&$ªEjòŒ!JËNG£Û§tp)hïHdnUY†�äæ}†¹ ¿ÈÁƒÒ1­‚Ð@ r©ZÝLÀ… nmW=—áæ½õ ß×,=¨IM�†ÂÈ çÑÀÈ©©”cð}† 4ž3 :S‚»ààö§×ÑéÛÍ^{'DÎçè èÝYUû)^x<ícwtrØç<ž…+Æ E¸(E mºA ÛÕ’€V€gíl×[ k[ ¡Øïu4ÙÒ®%0z?Œ¬›–1n9ä¹² IDATi�÷Î� `êHj ƒˆDÊwVbä}ÒEø. Ãëe‘%È�6ʾG÷’1jB5€vWcmK¡ŽÔØíй*EnלÇpånŒJ�gT³ô!g�8ÂÈ�‹’Õ»4«D÷ÊY÷±½®Þ÷ïÔ&EòÊ:v_ý|¿ÙhÚ‘ì°?0‹ÐÇ5®q�k\ãzàÁFÁû¡z³³ÿÕjQ¤pïðöÛwÌ… ÿ7¶¶z {]><4ö;Z¡Täßœó™Î‚Ðl“ÞíhM”ŒœÇð׿§ 5%qù3»¸si€~Gáõ7„Úí´õP|̆ÍôÁШ�ek£"�óÈò6u­ñ=Ží]²’Mn¼‘À3ßãðò S%Ž#ÏçйáÆõýM…nWcp�,i[m²UUZ£ÐôÞÁˆ‘dè Š9²få÷m7ÒF¿Û×Y†I1Ï­0vÿ™\ \¾MN@‰2ø­ß]§`DM‚ãÖžÂ3g=¬n&YÊÁäì‡5M£.œÑÁi ”¥Œ; ¥‡Ö´qIåNìu5ŽÌHô©ki"B›ž}}1†R$°O�ŒÀp_VJúÑ´ƒµ­…< TK¾K€Q[ú—ï’]mêH–Ú»JÛ€¦ô­¢MþîôH›F:CaLá�ý@À#ŠÉ -ÍGqGx#š†Ø€J‰ß6´"ö(1˜��(Šž‰îÝG4GZA{Ÿ@Y¢~å7Û²Ý3M)(¯ãÂ�í®ÆÑg(rfȨIï¦!ͤ¸·–І(ÇGRÆÉ¡¬X‘趉^ç:´H›ú(ÛÀh+À7XÞTØÜ!:[ô�ävv ;?2-±¼‘ ÕVcŽ3GÌNîw%cŒè}yp„Ä�¥Ïœuá»öšJ6LEtŸ8'šZ*OÜ£¼®&Hƒå ¢ºmí(K©" ‘‚0Ïeh÷ˆBY+Ó0#NÈñ¬aËh¥¢ü8A¦/�q�k\ã׸<è‡ër;æ²�üï¢ÙüŽLëqíšÂ… Ÿ²iæÃ\�Ñ4ó4Ñ÷´‡×.…öPÃmÇö®Â©#™äH{e4§í]…•-•tRš:0Q™¡‚ï�“ÐÇ5®q�k\ãzøÖƒ1c8ûÁ<�™™ŸF¹\CÜ»ÇðöÛKæå— ý~C{]sx¤à#ý5ÀëÒ£4M$ÿð }ìvôSIbÐ顯ùÓ.ÝŽ³ÓìÐ>º™N3 9†r‘“8ÖŠ  V2°›ߣɸ‡ŸóQ<çcñÏz¸ð9Ê #+šUÄ-O·-;ÏT�š“#ÓÒZ©Z�¸Šy‹« ¦ä”Ù94­Íû Åš€£�é)/Ïqýj„ BËí×è4� B�£hx®È(Q¥ÏÆî,å«^á‡\<Úâx¤ùoT©‘¯Ø<ŒþÀdt°JI°ÅõèÂ3©œ¿õZ×0Î ¸�`À­¥A¤ÅÀõŘt vc”þû‡êpiŒ€©G¹@VËÕ"mƒ\‡(iTG[¨HIŸYcêHÚpäs,ˉb % 3ѽÁâj  ÓÕYÎF¤X+q¬m+ Ë_ò\Ž£3ÏžóH¯È–ymKAŠáÁ7[ŠòBJäV•Ná=w¿&¥AJAÀÜu ×èŒR_~5@h0é;Ípo�‚¿f 1R=k‡œf›<{γ®\´©á ð} ñÌ�BŸÁê[«XÛLP*�ÉÁWCŸu²tô[˔ű—¦£¸©�cÙ+ðì9/¿",¼÷ �êЪ×÷蚥4P! ´ˆbàÈ´“…¦)é41c2®q�k\ã�Ó/Ž û‰Ÿ8…bñ“h4âXcq‘ãÂ…{æOÿôç-è8¨õýcÿæ#MäÌzK]­•ùi¢–�kUÎc6 �h!±¢ÿ¬]‡=Pàk€LTš÷É÷©S4™t@rš”WK í.m\¢xáµðèg¿´im°¹«ñüÓ €÷âÌ^s´Iå¤xݪvOcª.�ÏÙP3;™•šRÇV}öI ”f$:-…«×¢K\¢Œôú;ú‘gšŸ’èô5Þsʳ�; ÄSç¢RžÜ²î­'xÏieëò” ì)Ñ›¡Z¦;‰ ÊeŽnWãör’mvÚD·œay]a`Ó´];ùõ}†$�mÊ�‰†Ö€*M›*)€j‰\‹ˆ²D�¾´¶½­Ú�vd¯«Í•[Éù—¾ºa´!ÝÉÓ'(|ùB€~@ÁMBÌ&YprËç†ÚÏ#Š\¬RC)O©ðßþá¸Ý’ušòUb@;m¢*ÝZ¢Ì�QÀuØ‹yŽ\W£Ý5Ü Y˜Ÿ`䜮_­L×íæ½žKázÏœv³çpTºö™LSÑEî^aDçìYí'rìu:}2ˆàŒîGÎç0Fc¯£mnC’ø>{°(ßþA?0Y^0Ù�Y6Œom|81'ñöurõÒ†\ÈV—¿ùË÷ žmhž8î ÛÓxáÕâw“ŽþdÄ=¿Ï�÷°ÑR#›-Úlø.�UÁ ˆrô-1<;ÄЈ¬þd @Æ5®q�k\cà1@¾ù›<ýôÏ›……p¶·gpãÆ×¯ÿKóÊ+ÓÌn=Ràq|¤ý€Ë·¢?.æÙ))sjT;=�¹)ÚpÆ[JÊzK¡”NYS;ÐFU T í¡(ຠ~ž£ì3<ñ¡¤/ðΟuñê;!\‡áõKƒq®€r�ãå·C™hw”|~x—’Šw¡AÙòÕÏ•è hrÌ9‰_gç%ž_À¿ ý€G2¬ÜK`”AïZ” ž—7H¸û¨Tïƒ'’8{ÄA£J�¨çÅönl§³Ú RtpzÁ%[\‡H)Ï1?/ö5–׬n&è ú·ÉŨhÜZ&úJœ�þfgO[í‰Î¬J•æ'eÖ‡1‰uûÆYö:8'ÚR½BÚœbž¡àsxF¬q <úÖÉŠq Iˆ¿ï†½n‚Õ-e|�A2 \dxûzDZK5ã�P8,m�žv;ÍŠ@³&pö(C/0VÔL?&jÕgkÉæ+-¹¶M×"“·Ú¤3IÙýÐàúb²/­�=ØvÆÙ ‰7®„˜Ÿ˜�¨WèšyÎPÏä»B‰’˜i TK"£ôQâ=5Ì @YSKýJÏyáFmH‹¢4°µ«À��Û+1„Hµ[œ3¥Ò— R�0¼Ó׸±c~JfàRØ õ�¶Æ±Y‰c³é6fÔe޶+é5t­¥òÉ›; ^d°¶¥ñÙOߣ×Á—“ ýµETø(�ù¨2 ï/R/½ÑÅ7=[Äщó§tºdõœfÏTË¥gç±ûÆ2vw Ay3Ý>�ôÔ‚8Œ� Ôè‡c2®q�k\ノQ±ù�þèwáĉ"—;†0îݸ}ûsæþà7xºaû®FéV1ö»^íÛ~0WïÆ¯àIogaZÔ‹9Ž ¤ÉnÙR[ÀhšZ.Pƒ²¶­0ÓÈûÜNò hAÍg!Çpæ)àFÕpÐÛŒðgŸî ô-\ †í=¢*9"uÈ!Ǫí]rµaœ*ìev¢ÝPG¥(À9åK¤¢hWRÓ/8°¼I"u­ 6;ÿîŸ^Æ^Ë ?ÐÈû '|ñµê�õ–ÊBì& ?ªwJ?¿Ý£ì�|Ž“s—óMM™Ñ@˜ã(�óg]0 ú\2lo+|ź‹¡Áê6%foîP:�kx0ÃHÏÂQŒ6v4NÌ ŸsP.pxé=´ôµ­…¥ …Ù&5ŵ2C1'�ó`�¥†Ö¸õ2Sö+èîkܸ#´nEƒ�Dð{VG0p‡ÖR�ci#ÁÉyçþ„t<øž¦�rµÈÁ8 ÏËÒæ¤Î–6hc  óœý‹|gÝab>JŒ™¨ñ¬i~ëZ¥èúÅ îOÇ~Ô$0Xà£3ËÞ¼om…] ëSÊ€3rW« &ëÒ&}ZÓ„>Ž)?$Õ›ôkÛ ‰¢Ÿµ¾¿yW PÌX;i µ§ 9°º©plÖÁùS.ª%:Oj0 �ŵ„€©6˜jØ@ 8\×ê`Dªi¡(Y]Ø^Ogá–ý�ΨfÛ»µ ϶Žr9²/®ùŸ+å/Œ ÊEzOÕÞsº¾O˳Ñ"à ØgÀÍ1¼úêðÖçï¢×ÀÊ™©–8¶wu–sÒîìvž>åŽEèã׸Æ5®¯kð±_ëñwþN§O?‰Ré‡ „Áî.ÃíÛm¼ôÒ?2·nþÈß1ØO»£›3>îûºÇç%\‡aQ²x­Ì)ƒC¤.76ášÑôðÔ'›Š×ªnÝAÕh̼¿ŒÁ Æå/t±÷fh ı� î¬&Y£¹ÑR(8:ý4U›½§f¹ÝÓ¸z'Æ‘i‡¦¶öï9Öγ˜g8µ 37›ÑI}¥"à9êC霋ßú¿v%2aø�ر9„ÃZ{ ‹¯p|ÎÁFKÝ<Ø#nbêÜãH†(6˜n�‘ÔÈsj]Épò´—t¶~k)áBÒTw£¥pùfD©Ô5HaDœù02Ùf'ýjü€hª!Á˜ÁÑ™¡3Y¥Rz·ç�ˆƒãó”/‘Š�sžÍëpje�n_cs‡h]ad¬{Ý—»«´�av—6h»â:ÖõˆQR÷3§=x.5å»25Òk«4‰Œ €ržÙ�Ï(i®Ü¿5�’®éÍ¥˜ÄÍÒàõW†i>ÇßeØÜÑØØV8¹ F#Ÿ½» Lú‡qlìk£_Û‡‹Ö¨Ù¦ \¨N±³Ú�îQr¼çp¼v)Ä_ù€�NŸ€G0’våN<Ü®™CÎù€³ž9âàòíÛm�٦ĔÄD�¶�¾K›cÈ7M6¯•9Uß!Jdj],-%Q –åÝtm·¦ãØàÖr‚¶u];:#qõnŒV[Ù� ÍAˆúx°¶¥Ð¨ÈI”AÒYZÿD‹òFÁ‚u�‹7úøîo.Ó3�凰ý:I§Xѵ¼»˜àsŸûU ä$Ž_ÙLpg8:+QÊÓuø¦÷ù™cã�q�k\ã××çÖcHôܹÂózÂ_ýÀdt)ˆ'žf=¤–�‡Þ´´Ûј�}%uÔJÕõmJçN›�?|50|'6÷,­«Y0V·V6‡×*Vl¨ia�ÞŒn^´eK‡óik0´J%¡|¢‰®2QhV9&ëÆ»mj:7w`„6)ûÞ ï÷º÷§�û�ëxíR¦%NÎY{\Á  mHZmg§.Y”8Nö¼ù\ê°„}÷5Ý2¤h0 ×1GÒfÌàå·B0NÀT ÊÅhT9–7š6)ûq€Û·q ŠÙ©ù*%§4CÏcXÙHèóíý-4|¼½-±|!@§OSö'O¸¨¿v7¦0À„Èè}ûZ@ѹã¶÷4f&*%zþÒÌJ §�"cQ´» çŽ;t]]a�ÈDˆâáFæöJ‚N�¶»½”kC&®Ãpî„‹wnDÖ šg4¿Ù ‰ãs¥<}1Öx µGÏV¹È±ÑRhÖ8šÒ?UK6´ÒcøÐyï>Xº•QÚ Ihc£4Á5¾ôfˆžÝÔy–†˜ó8�[K1~ü¿*ÃèáÀ ­1׸Æ5®q}½��Q Ã�ÿø�£^ÿ/ „ÂÞ°¼|/¾ø&ÞyçHhž~¾9|¨sàd ��¨³ÙIQú¶çsšnŠ“Û{JrLÖÅ·žavNcòèßÄ•×~‰bÂd“Èý€˜› �æ:ìÛ°t¢{[¥”ÁÉ5šz»’4 J‘»Pº 96ëdͬ#¬=íiNlP” fÁÅæWúxå÷;Xýn‡\³(�ûÒüâ„xóŽÃÐpf'<Ä Ñb¤n4Òêô5ªE!d4ªÔ\ùÏè+Ž$ËÞú”„+¶^ N4â„cmKãÖ;¡ã8,³È}óZ„çžòpùv4ÔµØÄéÇ¥zÑô˜²7r>�ªB> &¤sÕš¥‰µË”†Ý1,ÌH$12ËÙ4ðÞzrJûšdÁi*åNŒçžö(½»Àá{ôM›³´1T p|^޲Ó- 'Æ�ú/`¯«±¶E¢û02ØÚ£ù½.%t{®Áê¶²Ú a]ÀH„̰µ£”§ÐË(1ÙVï 0;NLº)ÃdMàO‘A�ïò,œ�61Àü¤‡¯^³&þ¥wñö5�C"÷^ 0?)ðů÷_ÇwIýÚŽ4]sÏa6i~h°Pðr¥>Ý<beà» D™L4é"ÂÖ—Þ·I¬·vÚz߆³2ç1Ý”hTèž1Fæ ížÆÊF‚­=…é…4öƒ¹)ºŽ¥|º‰Á>`”‚¶œO q? Ó r! Î?÷• Ó,HI EiàÂ�§�ȺÇ=Ö=·Ïp? Kéj‰g›¡µm.H.P>C4~É•ŸFw…Y÷1Ú¬·TЗ76¬Þ)»¦À¡©‡UÞ§MÈ…ëÞsÚÅD•Óù 9w?q„�¥·Ÿuî£TI«]I·2qL c}meSa­¥'ƺ‚ «Q¸z7´Ï"¡Œ„l´¢˜ÎKT: TÆd\ã׸Æõu<è‡çqœ?ïâcûÔjß™i=®\IpçÎ'ñÒKk€G ,ðßàÍ=qÜûƜǿÙs™QÊ`¯kØùÓê oD_~ýJt ™þƒÉO|_ù¿®”x^ |¤Z¦�c*m¢IŸ,̹h¾¯Õîã…Ïticƒ×.ÆÈùW 5qúÿä•NÌK0ô¡#;Ð5=Œ6Ôé“€7ïQnƒë°,§¡”c8ú\ŽÝye`”&½ë0ÈI�z]âÒåí¯íÔ6uÚÚÕÙæàA‰ìéFàü)7£O¹.³¢a“� €¬tÓ¦>�ʺ6½:ï{ �¤ÆöνÝk!¢˜ÜŠº•½�lr×¶`\ÇÀãH�º†@lî*Ì4o‡Ú]�ɺ f½ÀQ)RººçP cšæ]Ê1œÒÅ^ Ñ´úô\Äò&9(…±Á~¡�ù)΀W/†Í‹=ìÞ=†u¯ÈrL<‡Á³éâm†e¬ßã赊€#H-­Í+Œ�í…vO#QDOËÎÆpßFfô|µG«­á{ ÇfLZM„gi„‰ÊÚh¨»À´´´Ÿa‡ki?žC›)Iÿ¤ i7ö¶†4¥Õ-…�¶¢ð;plîP“+9m`„ ×>ÝØÚUÖ*Øj%8nó_V»JpÏù$试† äîHPæd�DæZȈÖ}üëÿíûÁxDë‚áè¬Äk—Bl¶ô¡éè_ó79FàaÊy¦™¾› ÆmXÊ™OˆŒŠyº&J‘F¬k)jQB)ç-k“¼4šèþ€sÁðüy¯¾CS0ްK”ÑÉ:cßf¼øN?9ó#c2®q�k\ãú:ØzØ4süØ��ÀôôÏ X¬" ––nÞüøÜçþÚíƒ[ÀÒ­þÚGý‰ógrÿ`²Æ‘óXÂ9ƒÒ@3ÔØëðo�’}ãŸvþçrÑù� ?b§ö‚ļ,‘’þÓ/N{(¸ OyàÅV_ÞÂÛ¼�A ÑékHAt™DÀX â0rä\Õ¬Šý*útQLIÜZøÇD�£˜w�÷m‡`ØÚUÙ¤·0)Ù/ÿ›í7›x¯10gŽ:àøâìãø¬@o`pg%ÁÈ€Ÿšþ�›pàlqb0Q(Hhï:ćWšdiÍ'ç=ªyÁИe�Õ+!®½M.UaDáuQlpõn¼-¦¿î j%�»+1<—º°c³Å<½~¥I;QÈ3´{VŸÂ€ 2(ð” ®¥ 5žÃ�/�ˆ¼\`(T¶×,-%„€œ\ºMqœÓß­—9V·&ëâáÓî4{©(ÞuÐÌÖ1Qã IDATXºM1dzI:g4‘Ïç¦ÿ³ãØzqÛ»dFÀÐí AG`-h/ߊ³k‡GÜ×ÃÎ8Õ äù©¦ÀD�¦ð…� Æ©Éu¢wŸ•8wÜÉ6) w¢9~(2èõMžxùv4¼Œ¢àÌQ÷ÖHI"pÁ *E†zÕ…ïÒödaJPH¡¤Lƈ’WÌ D1�àé¦ÀS' ål:ºku1)HrlKgäœNÄðÂ{“:|p8Àrý�ÁkCÌMÉûÒÑ¿ÖRŠ6«› §Ž889ï£ÓÓd5lÓæó9†æ‰„­MloH, èô ´¦<ŽA I?”¼u-ÊÞDé³ð¸[×aøÐ{||å%ÂwúgŽJL5êå!Ø|ãîü�G¾8qb @Æ5®q�k\)ÁÇ}iæø¹Ÿû{(•>!4vw�›77pñâ¯ãÕWoâð­‡ ¿õy·ùÔ)ÿ§²É½mT•66g‚Ak˜…ù“9�™´aq$ÑŽžøP¹é&¢«›XêÝ~Œ/~ª�Þ€¢¶÷4ÙmF¤�àŒ„6FÅÂÈàâ�x_Ãù8hô\JSÓ˜Ò®Ò¸œKÛ„~ )lQ’¶£>%°0'щHX»øFLô«iµ5´6èôÌ}Íúag«Wô›¡É»ï2pºg#²^ÝRè ÎsPÈ‘†ÂsˆÖãHÏ¥§6)¶öúA¨qëžÁàFd]–€í=r'R†¡Ó3ðá=Î÷€AȰ½K¶¾Ó ñÈ/MµŸ›�YòtJIó];�·Ú™»+ ”¦ìŠ 0ø·¿x›‹!”F&Â>¹àà�+Q&Z'Ðò�aücèbh ÃPµÁ‰9Ÿ(8©ómõ€Äç(ÉŽø¹§=öÂØ ß!ó€0¢Æxm3A«­­IÁð~îÛÄØ.Ùw)¼s·£íû4y¯EΕnã˜ìaï­)´Ú*ÛLÕ‰æ—:W¹ÏÄ×®céDœÙ åÁ„mÒÂtû”˜Î Ñétœq0ë•Ï1(Ã+ÚÀ}­Æ šU¢UŠx’6žÃ0 v:Ên ßúõ*>ÿÙeô;åÍ”9¸`Øm+¬oË zÑÇy/?ªÞÿ$%¦¿çŒ‹ze˜:ŸÏq¼xe?\þ>àøq@©1׸Æ5®qý¥È€‡ë2D‘ÁOÿôi ŸD½�ÆÒ’Æ¥K¯á�þèÿÁ0Í|xìËvŸmT…_Ìq“óíd×Nî9£ib©Èá»0O>åÁŸ¬¡ÜoÃ=ZE”(ÜüÒ66Z·ƤÝèÔT ÅÆ£Ç'®65¬ Suñr@× ˆöto-Éì^=ÈùÕ"ÏŸËëö]†é wÖG±A.øˆB…«¯ö±¸– JƉVU*p#‰�+EŽ/¿`aJÞO©:¤QIEöiæG1OSù©9rZSÈ-¥TàpŸžÀÖ+›ØhE(åéu.Ý�ÁºNÝ�A’ÜYUûšå‡�ã`ósCšŠçÈÓp%ÏhBÕ¹H¹’ºÊ i |‡Ã¸ÀƲÂò…`H?ÛÓ$ ÞNИlëÓî’õ˜…ïiÊlqÎ�pà9´=ëö5.Ý 1Y—™n»«I k“&jÏXg-;ÓÚ yJœÑ=¿y�t8NÌðé¯ôF´“6´²Û7ø94pä�ô¨^tPV„à@©ÀpbN ÊZ ;hñP(ÎcíÆM(HI ³70ØØ¡íA<ÙhD1pã^œÙ´foäGø13çO»¸r'ÆFKáùó~¶Ê{´#á{&xö¬7ÌâÝÈ8,Ó~ÄŠ¦ùŒ z}�ÝŽFœ×îÒæ(Nö<†åÍ;mÊê`Œž3)ˆJf´Á 0(ø qB†½¾A>Çî{E1¹¦sA¤1Ó”ôìŽfv¾ô^W%ƒvŸLâ„áîªÂýÖ—àù<Ë&YÚH°µ£±0-÷½Wþ¼À#ûÎeáñÙTDϬïo.�Á—ÿ&pâ þ›�Ëc2®q�k\ãúK<€Q‘ùG?*ñÁ~33ÓàÜ Õ®] píÚÿŠ—_>Lë1êl• – â¯ævw"ìi•ÑrÂ(H†¥ëmÜn‡è¼¶‚ ¢†âÖRLœk�LÄÉ÷Yâîà ˜›˜›(ç™En>g†Z‰I�r‘�âù»>G³Ä°ð|Ð ‹_ÙÃÚõA;AçÍ”Â\[Œ0YHŽ~@Ù‚€èö5ŠyŽ•M…ÙIAmüð‹Ï9påN„÷œö²têBæ4l˜Ý<Ãíʼn6PŠáËB,þñ0†,1ûÈŒ@œ­ÚNóqHú8›mÚ]‡eüxÏM�ß@Žgθ�;w´v‚À`0H70÷¬(ûa)íŒ�ŠÀFKŽãs2ÛIÎ``„õ ÇòºB/ FóجÌì…½‘æØ•dœ÷jU¦��…�=ºn�ÝÃÁ%P'Šô!ŽmªKŽ[K æ&'‹ÞÔbõ¡×Q\�;瑈½Tà(ç9r9–=7îÅY8 š~íßÞCÔ`Ðvà}OxDä�vá:Q~56?�úõÈM �õr�£^æD�³›,WZG'ÉÀ™F¢8b%Ьñlç{Ö²6´”$»™ ,Hzë*¥£'Êd™ô@;ô¾Ë±½Crú:ŒskŠÀ0Ý�(,C›ŸÖžÂöžÎ4a7—bœ=êb¦Aïë”æéVNHrýŠbÒ1P0¥”WïFèà&By�£Ye¸~7Æ™cΟû›¯¶éî[» UAy(y†çŸöà{ ëÛœ_ºuÿ]åoGŽJá¯-]Åÿtä—Çd\ã׸Æõ—hë‘R¯>ñ‰ïÂÂÂsðý£`iIàÆ�Ïáþà70L3u¸ LÁ‡`ÉLþД´Wk`}eË÷bLÖiK°¼–à‹_ µg)B}Ò¤ 3iNö‚„RœË�Bn$OB™ÌÙ(Œ8f'ò.ùøÏ½7Ç“à:%ÁÒ/þ»mËï¥z+ ÕÖõ†1`eK�AÁuZm…¹I‰¹šÀé#HļÛQ¸»’ Váp¬V@~ÊEŽgÎx\& p8Èç9fϺp+XŠ1hJÜXî" É)ÝY@Z�K,®%(Äc�ìºÙÙÌ�Z™ƒ3†fM€�m!èks ǾáÖ/®amu) „d—nň®D6—Ce˜Õ-•mn·1.æÃÙcm‚ ÜÚáRã˜óÒü†~ ñä 7³ðu$YœÖª´ ‰CÍ�nGãÚ­8ÛÂ,®+¨Ä Ó' P?ÐhíÑóÒîi¸YkC êÑ ) $´ö4I9ûÌ£-c ÇÔYS\8$3Äwi›Õ¨r¼s#B¬ úàWþ÷5‘Éô6J¯¼ QXZO¸�a�ñ¶g‡œu¢N CšmkEŽØRö”fð]¢3µ{óSQl°Ù¢ L”hôäú¤”ÁÊÖýéècs๧=\¼AŽ0V˜mJÌ[Ñ}þ€5n9Ï‘óî®Äxú”‹gθ´éÚ·•!°œêiŒ”}½aŸ‚ £˜6£wWi+ í¹Ê1›Â=ÿyŸa~Jf”5iÓíkåÇ{¬m+ÔJ•"g$Ä?ÊEa$)=µ gÐøâíóøÄÄßÈÀÇ»q ÿðä¯ Šúc2®q�k\ãú >ök=~äG&pâÄ“(ÿ„Z-†7öðÒKÿ7oަ™Üz$‡«‰ˆc§ŸnÄX|ñ&´1è Þ¸áÙ'<pùV¼OÌËh—6RÆ ? 4 ©µ+¬.‚Dèí.MÞ=›L}Ù�Ô·ú¸þ¥v»ahÐí÷'ä`Óµ!€Æ~¦ôhŸR¸ç&I¤�nYâ„ÙÅÇÍ¥3óC£”.%}~±Ìᕚ�Ƈ^Šqûjˆ½®AQˆõÕy�#Œ:=¢ŒHNÍ‘à@»gP̧Âeöð›o¯›”d÷yrÞA½²ßב”¾µ«a4mE‘Á/ü³+0ZgÛƒ÷Ÿs±ÛѸ±ãæR<šÛ²2ÿ˜%8×+"£Ïä­¨™‰¥�¡¼’ހ—¡à1äKƒ®ÆÖ®Î²#‚H£?0ØØQXÝT÷ÝW€hV]ä}Ž»« òÙð:’áļ@)Ïá8,kÚw;×)C£�#jšïr4kCþ¾g³.œ4mÛfsø.5ûݾÁn[c§£1IÅÀ�Õõ ‰ð¥`ÈûÀ^×àâÍg�9û@Ï»‰"*— Œ²b.½Žì—‰ÖȘÕ}ðön 0h­XªùvÏ`y=É‚/Ý¢tôTG‘Ö»‘nHâdŽo£A€œÙ4óÈØ„tƒ(:—oMŸ…ÝîÐ#7ˆÌ„XF*çÀÖžÂdMàøåÁÀ ´ù.û¶bIbດ S.p<÷”‹r�´ei(©›l†Qú^¾´ù~|bú¿æç�8Æ÷._ÁOýE„¡Fœ˜1׸Æ5®qý%ØzÔjßû½%<ñÄ'Q(T‹‹‹‹¿„^XÄÆFšfž¶æ�­Gb¤Û€­l%˜�Èùô¿ü­•‚Ss@`†«wbTJü�Í{À+ØÚU6<Žè5¥‰Úã„´œS'vëVðvQò÷ „aœ€Êo¶‡÷ÝŽ3šÈÝÕJ�žZ§>æÖ%ï3ÌN×<ïó¬Q¢äcÂbQlðä ÇN8©ùh”9¦ŸÉ�{ÀÎ¥mC�gûÚ^²wg%A¢h;„Û6·qcG!ïAB½"0?%a 5ïÝ��ï²CóRëÙ‚ÏP*0¼ÿœ7ÛÛ‰qÞ瘞“pëŸÿã¢p$¹ýD¡ÊrŒ>ÿz€ùI‰Ö^œ}�wµ})¥I#1Ý”p䨃å¯ÌL8Øi+ìu(}Ýu ò>Q†±ÁÚ–Bo)¦‰|lpó^Œ8!0ؘûR¼t̳G],®'˜j2�‘¨—‰æÀ€ž±BŽÀÅí•O§õtƒàŒX ç}†R‘C+¢b…1%·!�£(1¸|+‚ÔøKA¹6Ôt“¹‚”ô|Ç ½F)Z{ Ow,�b¼¦Ú¦ÕOOHs6½;oÓÑGÄø3M�K·chc 5mÿ>û;+¸öæ68gYØã3§]¬oÇH”}¿à?�"Õo4+Ö¾×§m–ï±,dSÆôí%ŸÕ2ÑõÛ‘Ç �¬A`ÅÊnf ®Ý�AÃÚnvæQ@úô)—oG”¨Î€Õm�ZIà‰c&ªâÀ �4I+› K jeN”A�¡Zæ(å¸}.H7u0)�32ÀHÑ)?wý}øÿãÀü�$ø«w/ã§'ÿ ºýÄÒÇIèã׸Æ5®¿è[øÉŸüqT*ÿ9„ÐØÞ¦4ó^x—/�¦™¶õý1*>Oû Ùí%?»Ñ’ÿDJ¦óCkW£YHÑK*E†µ-Ï£© yè°M­+iú=Y—8ÊÙŸê-ˆºtõN ­Éië‹Ú3wV“÷Ä Lw`0Ó䘨 (eðöõ{]½¯y˜³;äƒ06˜› ÍGΣ08)Iˆ Ž8Ñ(8ΞÏA ‘†™õÑ»;ÀÅ?ë¢�{QkO#Vä^µÑÚß$ÜM×Ö[ U†é¦D1O“uc€02h÷4–Öˆ¨@ z–eq�Å1k]\­rxMo`àÔ¢¾ÆÒbŒîe�Í–BÞcàœc�N`MÑóШ©+äcàSE²KéiXLÎ#š�66·……‚A»ùýèè��» :=²6þä•>ÊŽ(6ƒ›ÌGe2ŒžÓq(£ƒ¦ð6‹ÁcÙ„;NÁÉÀ@âè¬$Àá’ÂNÃ%Ðmk,­©Ì¥js‡BéZ{”Š=zÎÍ] dœŸØí 5)ˆ:sÔAÞ¦¦‡‘ÁÖ®‚R @?+˜�J�#ˆhÃQ¯ KYº¹6Ã&ÕHð¡û¸×5p¥Á;k ¾z±‹|Ž,Ÿ=‡Áhàó_ 0Ó¤@ÆÿÀ#M /äèÍ÷á÷x6ø�e€=ï3Ô�wcì¬EH4m¦8î¬Ä˜jˆ t†1¹…õƒ[ËÉ}ÏÝc�c‰ë0¼þz s{ ½Wr1êP0À>}É£€�M¬¦%jeº.‚[' „ij‚3ÜY%ŽüÁ,7ÇPò9¦Î¹Ðœaû�ÛË ‚žAÿz„0$Nÿ¥[1’Ä€1¢ ¬n)´H „óáY»}²?N¹k4S-ˆVÀt“Ù¥üС(ÝÂxÃüŒÄ…ke †Åeƒÿýÿ‘™ tú¾Ë0;!°¶§qO«á5â�4û$c€NWc¢6œ^ûžµv© #jös1C9ᘟ”ÈÂ9*µ»Ô\†ý¼ÙRXZO`@Àa´Ñe‡h$je½».½�É:5¿%«…a ¦}¢&°¹£põNŒz…>§\�(iç»ûóBOG7c²²^ßVPàŒ£; ?‚�{´9ó<†FUàÖr‚³GhMþnçZ8QhTˆf•n<| lV·’ì︹qó§ðÛ¿ñßCÅUôƒ�÷À@Ô)­�›K Ú½ýÉó_‹{¯ùùÌQ¯] ðìžè)”©¶$¦Àkf‚Üठð$íwÑ$!z]¬4b»™‰"ƒ 6À«›Æ?šý80= Ä1¾åæ;ø'3ÿ ¥Ã�{ô­5Nˆ6 ã׸Æ5®¿ÀcÿÆã£õðßñý(—?f®Þy'ÁíÛJ3OÁEòàcß×ï ŒÊ»x{º!žrfmpö˜‹r‘þÅQ)ÒýÆbŒ£3ʼn5ÉBu8=ô]àÈ1ù“Mxƒ!ÇÀ8¸öö¶_¸‹ !±¸1ŒFhCÒ¸¥<ä=6ôîØiô•"šUê•ZözÖ(Š)ì-Õ¢¬€ã×þéæV©(¦òV`Z¯ܹ—`k‹&ÖkÛjˆÔ–‚þ€³ �Ó *Å¡ké#™0�æ¦Y˜ª‘zò¨QâàÛ ýG¸–àÂû„Ô Ý[O ”A»g2*ZÖÀrÕò]Ò"ø.�’ɺÀə湠7Ðä0ÕÖ¨•(1z4+41¯–9*Êcð<;‰·átåGqB@$IDv°¹«!¥Æ…ë‚ÐÚÁZQðÖ®†²äð‡M´ÚtÚ�Y­üÿ±÷žA–�ç}çï}OºùöíÜ=90HI�ƒhQ”¨T’ ¯‚%K»¶eIޥêd«Ö»–å°e{k�¶ôÁÞÝZ9­eZ+‰’&‚ÈaLꙞî™Î}ó½'¼ï~xι}{$J’«îS5§Ãô¹çžsúù?Ï?8øž4ž™ðÞu¤aÎyй‡æ°ÛŠ¥ Ë„é&(IàÌ¥�jIì“£H¿äº0;‰÷wJEz£³O?xÂçʵ˜Ú¬Çž)‡ñJj¬à©Ëp±p2µ)ÎÜ©\'MGÏkG@Ÿ±ââV_Oè§Çº¼ÓîŠNby5¡ZR¾hk¶[’Í¢•FùrÞóŒW…VofÆ:=¹þ )°>ïÖ ]r¬,ƒ×Qî Ã×ÁŽh<Ûz\¹‹5nb¹ºäñÅßùïq܉Ծûz—±’ÞåÊön=<³ãîGríV²gÑ�\.P³ ¬% „Ò¸YM•1rvÛ;Ié™CX·oét-Û­„z£Ïæ{ù—'~ææ ùÄùWùÕÂoQzTŠšŽ{¬l¾ùzŸ­†�Q�jT£Õ5[!é/ý'Oþ8•ŠC¯g¹|YqîÜc|éKŸ§Ñ°H®GÖ{Û!à‘»u»¯nw<‡özçsÊ~õ….‡öxLTS­„+?(ŠS=°ÎåÄA_8Ó.TŠþd@µ`˜?R"*äÙxm•7Ÿ\¡×“¼n_~ÁgÙÓín_“T,TŸýs.qbi¶œdS÷á鬣¥ ²ÀÌxš>žÛÉñ=ÉÉOº‡ö¸»î£a�”9V¹ŽÐ•¢Hl‡»©É�늫Z£]£TƒGCµ¤©·Ì`ônT’ýnq%æè>�}³�ðÙØÎÎ�\¹@1v*ßÓÖÉ]þfƒv_tgž«X^K˜¨:ò<ˆvÒèÛ=K«m| ?TÊò=�äøÆÒÇøeûC03ý>~ñ5Þwý_P¼ÇÃs´VÄ¡%I¼¼|¶7 £Õ¨F5ªÿ*¶šïÿþ½|ðƒ¿Äôô½hmØÜ„sçVxå•ÿÈóÏgiæ7 ͇ÁÇðoÜx0r²?Nög¢ª©·dZ.f”–�j'•F9(,{gN| „;1 WWXÜÒl÷.ýÑ­4tíâ’dƒôúvàd“5Ï™�‚A¦Áü”C1›i˜¶ —¯Åƒ†qfÜ¡XД³,ޡɬëB>§8pÜ'8PBmtXY5t;†Ík ý:};°³Íš¤À—ð¸Ë×¢Çýíä?Õ�¬Øw–u*{YqÞQ($3dÿûþ›õßã‰ßz“SG‚�xùþí6S5‡(²\¸§¡†Ã6Ç7n ît|³“âø51æP* ’ èûíHÊXÙçØ~OĶi8àø˜¦°×Ålš-C/²\¼ÑíISÜéY.-Å+ç,ã•0=î°YO<Ç! §ÓÜ{ÄÁK×~$ e¼êÜt.—×öL;LÔ�•…Ö7È‚IßkßGl«šÄZ¶S ÀÅ¥„o<¶ˆˆXÜ÷àñg»¸èˆ�ejLÎ_µ¤yød0Ⱦñ]84—¯Çðj�Óßl™+›�½r¦«¢ØR*(ÊÉG¹¾žÐéÚqÈ2Öòá‡rılÙœôòüâÅóç¼OÂÌ4ôûüä«ü£{þ#�oAà30zˆyf9>öþü€ŒjT£Õ¨þo=|_†.¿ôKáØ±ÿ�jº]I3íµxì±—~­Çî\�a±¹¹p o;Ô-ÀGæ€åÿÈÇò½÷�?µºeNÎhmJ=Ä�†É9—‰½ûYxù"qbÅFÓQ”ï«på¥&×7êô#ùÅÛl c1mÔ-D¥·jð*E±Ì¬¦¹:k”CiÜ´V” Љª¸Öx^ê^äÂØ”Kq®HÙ„¸3.‘v¨¿Ôbé¥uzáŽk‹eg«+ÍX/d(˜*EÍF=!(:]K5¥&Ýê SÊX.'ŽÉšC%�|gM¨ç@!¯ÙìÚinJ§¿õ/þ'Ö¶ ÄVñÆÅ6÷õpÅ[—#Î^Žn¢ÿÜ’òu‡Í‹:]ËDu‡—Oé(:vZƒ±Š~^3VVì?æá'ä5±õ«1Ë/ôRmlÖE�}ùšP‚îtŒÅ¼âúºLðm¸÷°ÏDUÎUK[)j¶­F±eߌËýÇ| 9ÑËø©Ms–’+)<%µ�°r)beMšvÇ1¬o'tB‹ãŠÙ÷ãÍ‹o†ÌNHã¹û}UwuN³÷½”—­`¹¨¸ç�G©¨Èûh™im\ cï£Û}”µ'þ5­–€ ÇUƒÍT£mhuEgpv!ºYg¢ÞÙƒåø�KKâ5\Ml IDATî47å0^‘AB.¥dY ¹‰Ý]‡7Þèñæ›ÿŒgŸ½ÎŽÃ• ÌûO¹9×Áôú˜—ÏÅ-cÐéç�¡Ÿ“ýJUßóˆì�q½këüÒ#÷‡§Æ�TµTÐä|e|O›Û�¯ýÅň'ž_¢¾Òe³a9¶ßÅq¿ó®p|¿Ç¹+Æ2b +u‡30ô¡(±ìŸ•im± Z­‰×ŒÅšÉ1ÍÔ¸ƒŸw¨äaïÃE(ç鿾ÅåÅ.×:1í—ºôú6µv�éGö¦DïzJ¯r4)ÐPì�qÈk=ú‘a«n¹°±gJµ•f�f¾g:£Ú¤YÙ&�9¡ääNÐ×CÞ|¥Çf˜ày–Vײ´^š˜µ”‹Šož™“mÎ-OÙ70;M“v°UŠš=SÂýϬ[=W€ö©±rµÎÚzŒ«¥á\Û2¬]KÐÖJ*z_D·o]‰š™L,|Óûz@´Îei5á÷̦ô¸Œ.•$’÷1<9>~ÀÛo™û“'�f¥¬pŠš¸aØj¶{†^(V³ýP‚ O_ ™wˆ�¸R5;Y@¡ä6¾¢VÖ\\Šét¾'Ûiüá§4¿^(`s:¥X•‹©5n°CUó\E�ŠãÒù7ë¬m~…nSŒ mË}G=ZË•ë=âX¾îlfðN*Ší�nC¶ƒ%Ñd÷“5D¹Ÿ&Æœ4÷D¥ö²†VÂH@G/”káå³áàß¿Õ1g×@¹¨yð¸ÏëB´–€@Ù�ˆöX%ÝÈh…16¥„%4;b4qîJÄ‘½3ã²UÊ^G�¦½gÛwˆ¦€(‘k4ÛÐøžä Ä ”fžu)ºÕlMñÓ?Xùo÷θ𥳐ž«âlBÝhÙ?SÌëy¯ÏOªÇŠyçÏLŽ9ï+k yí ‡$•É~¾Àž½üù£˜h� _^c½¾I?f .µVœ”œÔ­§ZÒ|ýÅ.Çöûoo�;ôcsKyÍxE6ù@µ:us*å{?ð�l]zŽ7_Kˆ ¾«xîé½~›vW~Ñ_\Šoš^jõöͲI$m~Ê¥V½‹›ºSE‰ˆ¤3ýÀÉC¾h\Äæu\SÈk¦'âÙ€þB�å;´;B³iww&óÙñaᲂ½3ÛM¡•¹È„v¬$@ Œ,)Y7F’[+›ŒÍzÂá=ž¤�†´ÞÎ1MÉW¼zºO[âXñÅoôX^û²L†cXZ‹˜Ÿ2¸Žâ•·Â›\‘î¶ñþ’^hS)ô¯|n'e<—“æ½fÓzM!'`yXOÑY‹Y»ÑO·ÍŽl³Î] éöR0uS‚· û쎹ç°Çâõ•Zãî›qSר4yÛX¦ÆE‡rörÌÆõ„{�øšw©”äøsÁŽÛsÁOi?y_£0}Éqéöäþ[ÝŒiv,Ž#ni5abLnùLÐ?9¦éô,…Ü·öPIÒÞÖ÷„µoÖe< ,¦š­¥Õd'œð«.¿ÿdóµûî-ßÿø—Öí¡½ž h8}1bnÂ!Œ-¯� º‰ì«z�b^sâ ÇÒZÌþYwà3 šYQû±¹{N°õÂÂ(NéQpe%Qv–·¹+!I’j �ðÛ;geå9tÇÊš³.cšRºeSé½ÈdÜX8²7¥€y ×ÛIGÏçù’F[èõ$ b};¡×7ƒ@½3#Œ‘éwœÀê¦lyÂÈÒîXmÑ*seÒ,­FƒÄð~h)²Q¹íyWðÜé.ï?•g¢¢)—ô ™Ïù;š£Ád¿êðÆ%9qbY½²ùVtÿ—^Û°Z+ÞZˆhv,'¸ll®¤ï–=î08œs¨åÚÍè`�/Í~b@k‹5šRÞâhÑx9ZôYâx§”ÈÒ�àÍK!Æ }²Ú·=îéqI`_^OAB3s8ºße¬œÒÂÛ?¹õÃü`ò=01�?uñEþñƒ¿ƒRvG¢åBz½8’9“$2¹¶!& #2ªQ�jT£ú“»ÓÌögæ=ïùN*•GP Ö×W®œá‹_|‰·Þz�ÝiæÃâò0ß÷ÁÄþY÷èxUÛR^×€XÂH¡”&IàZ'¶“UË̸GùH�\à2SèQÏï¥}�—?s‘vÇ&–­æQ,ŽF'~ø8NJñèæ&æ&}@´› qÀIŒa¬ì¤v£"BN˜™�FtØÈÓÒ,׎æ‚<“n�îx…êÕo|­�çZ>ûõ…œÆq!0ÒhüáW:ÜÌ'Ê‚ËÞa:¤â‚ž:ì¾2ªÊì¬�ã;,_î' èc÷äèmÆ\úÜ–hBËfC63——Eðªn8·Ý )i|æ&]æ¦%ùÚ÷¤Y‹ ”ú"²õܘR!uË é Ò-TeÌÁ›Ôú ¦]¢žaãBHýlH? R[ßNXÙHÈùŠF[±QyFó=IµÏ¬GµPbï°ÅÊÀ†çJê5ˆ+Y¥¤[ƒ �•Dðk­ÅZŵ•�ßýwO㸽PˆaŸ ¨7 o]ŽXÙHh´oL–WïÈ•*+‹XÏMÊä=Ûùž¤r'Fìj­5„U‡ë ¼? —Ó¸øZ‘8v 뫉h!Ò©ûV#!ŠáÂÕHÒÍo8®,À0(Ö·Üôºâºö�ûqzKõ0Í®áÒR„ëHÆJfµ\Ì �™ª9üÜW(æÅL`p/ t2jWØd·'˜^hq›ol%¶˜×¸¤)ðž#dºæ ÞÇw£º}¹Ç–ñ)GŽ-Í�ɶcãšÒ\�Æâ�†!r-nj‹;3餖ßb=½º™Ç¼¸Q¿ÙìnAS­âpm]roú¡¢VÑœ÷˜ÓZ˜ç„|sûù{û>!à£ÝæØËÏóÏ¿ëÿE+³ë:»¶.÷gv/ÅFì“m3#2ªQ�jT£ú“Ýz|ß÷åùà�09ùk‹Ý.,/‡<õÔUΞý×CiæêÆ�Ç1ÇöûGK�ÏùÒäùž"Ÿ×hRácJqÊù†Gþ›�Qêžãì«uVÚp¶Þ£ÙÙ’©l×rùzŒJ›òlƒp»€½=Ó.{¦J•Nð!Œ R2ll',®ZªE±K¦e–žA^ssP>5ƒêÅ\m�•¥—[­v›zS(K’@-֖Ûk….S.ê;6ǃ4·»–jI3UÓ©u¯L�·)UŦc³šOÿ‡­FL³cøàý9Pг_oã{ŠsW"z¡h†AÇ�ih»iTIc3Žˆîó;yI"ZiÀ\f'&ÇDäêç•‚¦z؃‚¦s6dãzÂZËÐ=Òíú¡4l+›É.áxvœ×דÔ"Vh\żl`2W¨vϰÕ0Ò@¦Ç›9f96ꆃs"$®4Å‚$�EÉSx¾¢(J‹[ [¯÷éÇàÅ–¯}³‹veú�ó¡Ý…/<ÓåäA�ó‹q:5WïhÜî}¿p5âà¼K1·cÑê{ŠbAãŠNË`,DiP]® ˜œph6 õFº‰Ii`ýÈrúB4�Ü©Þ;ã’ -ƒ1Š=3ó.•’4¼™#Y­/�Åë1I"4¤rQ66…Í÷P“<r9èG±èbšý„~(ïy¯/º#×5X£ù£¯u¨U\Ç =>œªiÙÀäd`à¼ÃˆŽìÚ¨· å¢fºæP.ª›rDÎ_‰v,·{\®tÿ*_ùò¯ö¡Ù1œ8ࡵ\¿ÖÀëÂ4¯æîÎõÝÔñŸ¦Ë©Ãs“éu<�h¾±õ#ü•ÊÇa¬í6ßõÚsüœóï‰ã—®ìYùü™�Oøx®˜„i–Èú¶Ùõ3GdT£Õ¨FõÇ<†s=ŸüdŽ�|ä33³¥Öׯ¿qþüÿÆÓOgbñÌ©jxãqcˆ ¹@›,íYiÙ~{ïwsþÌ\xc�=Ó®„óù.¿û<Îô„O7”p°$�µ­s#·[ݾ™—°/qˆ¯8ä5p- ãTH¬$ìKr$v¬qÇ']j÷Nà;wiôÊ4Ö68÷Ÿ¯Ðé[ú1,­ íjcÛÐÏz Þ6 Kc^Ì+Î{øžp¯‹yᯮZmC!¯+ ï~*mˆòÁNJ»ç@ÞWÌôyõBDo=&N,×6 ¿ÿÏ6ñ}E”Xz}øÒs]î=äñÚùd‡Ru»,Ô§ôÙ‡//‡|à�Å|f'ª<�£-aê '">p�ÏÌÁ€ÜFD3§é7 ŸëÑéZú±e«iØn¤báµd ƾ�~c߬˙ ù@±oÆenÊ•Än7³<–sy9¦Ó3LTp “cÂá—€=-à0k„}EyÌÁw𛆞«èw Ë—#¢”﹆NV6Eøìh¡¢åèŠs‹óSî;7‚Ž$‘ ßWÔ*JWÌ+®®îXã:ÔŽçÕ‹âKý¥öÁzðÖÅÑŠÍí„7·(%Æ™Æ`u3¹%8¿Ûšª9\]ésp>`~2ÕkäSG0G6yßâ¹Ò®–òŠÙIg t÷R±{>§S1À�®ec[Ž3ŠáÊõ‘þʆ¼æµ-¹ ïõ8¿á:Z[YRº¦Ù– ÃVÓ0=îà …hoᆰQOÈrŽ�µÌŽ»ÜwtG2L tݪàÕ•˜Øˆ¡ÄKOtøêóÿùüÄàß}æµ>s“——ão++ä¶i%×ÜGß“C;H˜ezÿ‚˜§·~„ŸÏ}7ÔjÐjñ3çŸã¯ü4[!�}=æÇ¾»88¡öå|¡�Z+ôÉÌ}ÏuGdT£Õ¨Fõ'µõͯþêOpð࣠ÝnÂâ¢âÍ7ãK_ú�ìäz˜!à‘��a ŒÁƉ—“DšññÏ¿€1�n³¯õ9~Ð%ïkÎ]µ,\ïƒâÖââ·y% ¡ M¥…L·‘ÇQbç+:](MÌOì=ñØ$qoƒÅ§ÖÙjYú}C«Ý Šáòµ˜VÇ ~‘NÜÐÏß3-VªG÷‰Ð:H§�ýPr–Ö¶ê óS.¾JKèÛÑ}¥‚Pƒ/KCW‹¯ê2^„‘‰ãÐ}¥É¸¶œï<×áÚj$‰mš¤-¿ø?ÿt�ïzo×M`{çI²ºÅߺ}É(¦âìL{à¹0=å’Ë)._‰ˆãÝM~ˆæô³M¶ê�äÒRLb¥¡½ÕTþVÇÖîZî;ê3Sñª›6GQdEx(.X+Á…e½8²ÆÓ…jI3ùÞ<:(à/5Xn*Ö1�Ï6iÞK«¢ãPJÄöa´“Œî»ŠJQ±p-枃þ�Æ�Õé¦j;®?•4U>;ÆëëIª‹°½üág]Î<Û¡Rt˜¨Ê¹7žz±‡±’&Þ í-ÏáÝÊ(²03.”ŸrQ¨@â2^$‰íq* Î‚ìŠyMyÚA�iìõ„F(óÎrL/4ô#Xß½‰±C Þéÿ,®†Îç4ë[ �o¹¾ž0Qu˜¬9Þ㢵ÐXšmÃfÃP-îîü¯¯'ÌN:LŒ‰Yµ¬ÔØ”kÉf¨htlY_7ôØ0Rk8}>�Ê®“BNsæRĉþÀêݪ͆¡R½Aªè¥ÇZ,hª%ÅvÃb1x)Íçʵ˜{y¢WOÒSqþ¥eqõ»LIÏêð^�kë �fB’]jÏŒC­ä à@t•’¢˜/ÒêH¦Lí†í—ïé�5®›%/uÇ#“Ò’D‹Ôht*Ön´MšûaPj‡V«8¬m%„‘Ð9¿ÐF6µ;VTËžðwÀ´§Xß’Gë“[?ƧªƒjšM~êì7ø‡~†$$²Q7\[‹Ù?çpa1èÇG€m (ìõ-¹@�ȨF5ªQ�ê�iëš©)�¿ø?Ìôô§(•,�ŽaqÑðÒK/òÙÏþ[Ddþv[�að‘ ÿÌ7/†«UsÊWJ Bö´:–ïA¥(Ú†rAßòˆo½ÐRJuA ˜¬fÀC4[C�„Z)꽤»Z⯿Ô,ÏMº‚Ž´âÕ[xn›(¶ll›Ü‹î~󒤎LS5‡jYL™C§`~ÚåÈ>�À• o倇ŸÏ1æFÄã%¢vŸëßl³ÕhÑK7'Ý”"qñj¼‹Vsm]@�Î EE)Ѿì�qétåõ¸®4½ÃÕíÛ�‘—Ú¬V²iü Å[Ü�J³.~Ñá>eùÂã-¢X\ÂþÃná{OṊíV¹ňãû]úÑîÀ»o·ûP«c¨”4ÓãNP§Óé®PQbcé(�IÌ Gbÿœ‹¿×#n¶–bZç¸5;b?Å–³ ñMNd·Hù@ÂÚ¶†¹I—s•’•ÅLlU7ë ¯_™w #á=§Žz»‡'ç6ç+ü4 Î׹ЍiX½‰«[ÓÐê™Ì;Š«k S5'Ý4IóóéW±ao0±ït §Žú|íEIN¿ñz}7ªRTL�»T bç< Vºò´‰nzUÙ8eá ®†^ö¦Ú“ìÚh¶% Fn|d i~Ê%ðV· Nš– XßJ80':™BNÂ5c#ÔÃõí„—Ïö¹ÿh0c½ÐŠ[QRÓ ©%¸àp]y¯a ¯F?Éÿ8õg R�FƒO¾üu~åý@«“ ô½¾v4Ú†'ŸïñÓŸ,a-œ¾qꈟZ=+’DÎÉfÝÜ$ä�Q�jT£Õ»½õ�5 çïüåò/P­Ft:°°àpöìüÞïeiæ»s=nµñØåx•þ¹ñgë0LþQÎWÿò༛ll'kyï½ÂÕWJ¨ûf + ××&k‰±LT5Ýžaÿœ—fq¤Ö“.xZ¸ÿ³ä ʇ(×è4stúóÉ2/¿ÖÇu ­Ž4EŽ7mÜž;Ýçþ£þŽ˜ýnäôƒ+ {¦]<×R)J32­vÒbþä8~9Çåç—ˆbR Y¸Ü5Ÿ[§Õ Ì­¦¡Þ”ééµ�!Qvêðvv®ó“G÷yŒW…«ŸÑآȒÏISsi9â�c¥ÔMkRç(ªeMþXNœ› íÒX Ù|¬I7¥Ò,®Äıe£nh¦iÍÍŽè"ä5‹K•ëÈV&Iä=¼ÐÈ®¬nßîr"«UôÇB1O IDATÀºÕ÷d¶,¯‹¨Þ¤zŠ/ö¯~u›8KÞÜ€µ<ñÍ{¦–V“[ ƒïF$®nhÚãØ2?%ú“Rê@ä» ¥!IŽc±hÂH„Õßó�<…¼Â¯j—këÂíwE·oðÅÉTï‚’æs};¡Ó·zÈûQÈ @t]q3«oïÃÂñ‚ÆQ k,ýØáâbL÷t‡û�Àmæ& �º»&›ˆgž I®‰4à…œÂ+jº ƒµÄ’š>6¦™>êo'Ô×’Ô75§çìµóá@Û’�Ú;m ÊEÍùňF[q}=æ½÷L�;”òÏ#µ@†É1‡õí„×χÔ*š}³.GöJsœO-p³¼“ÁÖË¡¶ã)â¾4°ý¾Ð’:=¡‚¹ŽehwÌ@oä)å‚f½nÈç¬ÜÏßb%‰l‘®\�9¼×“M]šÓ’Ï)êM3Øð( ¹¢æåº½plþP÷Å–j÷RAµg/G„ÙF „›„úß¡Z+Ù#ú‘å½÷LÕô4^š�n²Ü ¸ÌLºø.»ÒÒ½t`¡´hQºaF¡ÚINï… /õœO� Je¨×ùÐs_å�þ.­¶¥›R=Ūܰ¾%ŽpGöy$‰¥Þ²üÖ´˜Ó¼µ1vŸ&Œ �¶/�@D'Õ8ZQ=XU_?½õêû÷yô–b›åŽô{–—žî�Ï)úáNvf0˜ò¿ÃÆ÷�c×ÖÞs2`nÊe,¥ïd›Ž8±ä±SµÖçžÃÞ`Û•]¯ž+VÉAQ£’ Öõ-³#ÂŽÄbúÚzL«+i}[²X–Ö&«z@sÔÊŠ³ s“.Ö ˆ9¶ß{[]еÐí¦Ç]¹6Êš‡NúäƒÔ.vÈ©jªæpîJ4pk5 o¼Ò;üÍÏ4PJc£e9¶ß%I,ßxµGó-�ï;•£avR@m°¹ ›ïí$“G±HæâXÎÛ=G´l]цˆ\4a:ÒMM·/rë[ �ó3ü›{>¥loó/}…¿}ê1öN;D±åêjÂ꺄Nn5eh°Ö8Ù• ÐéÁXÉarÜáâRD‰þg«anySŒÈ¨F5ªQ�ê[»ÓÌ?õ©‡9qâCT*�`-¬®*ÎðØc/qáÂiv§™ß |Ü:ìí~®'ÍÊ3Gä½Ó³‰VìJFö]…£ I3’‹¥Ù¿¼©ùÙGËtËs„QÄê« \[Y¥A§g´•K©ÿþMœí¡¿Wв¹8¼W¶.Þ�6£Ñ6,¯Š^ \ØáÀg4Ñs¤î9©SQq…œïPžèÓ³ãÄõ .?±ÂfCè/¾gøìó½�°ÓÕŠÀ¡çkçBæ&Ý»s„jœ2`V)j’Ä2Ys¨Uô`Úêh:ž§ØóàP…:ÏüÞkTKŽA ùí¹ÊûOô#á}÷CK·o¸|mg[ nœ¿ÍqîŸs9ºßc¢".ON~"ô¸,„î༻“A�6”ùœ"7éà—4 á¸K²±q¦O»+Ô™~(´¯FËpu5arL6Z« ½(³H•FØQ ¥% ˜ŠÔ-;ÏôE„‘€˜b^&г“¢ß(Ô®ônß�Ó -Ö=fk»eÏ¿Ø{àõ¯u­¤Ì>òP@ÃS¯ôwÀÛ·)ÂÞÙ<ªåôÚ,¨4“E§Y⢤µ\+�–aÿQŸ\N€¼ç@¢a×°¶"éòaliudSÇ ô7‚â0ØùàqŸóW"ü®Åq,qšU⹊¿'—}Ñ\¬m&iþ#ÖÎî³^$Ié•ÝÛ™a:˜Ÿ|�^Û¤¯K6S°´±|%¢˜×je¥¯œ +éT;ôî>`[ /Ü;ã Õp†H |-¡·éÐí[âDżÑe%„±P$3§°^( ºÕ‘-O­¢YXVüò柅O|ŠEØÞæ£ß|’¿qô÷%ßÈ×x®bªÛ Ã7_ï³Õ4ÌN:éu�m[Å<,®ÆLÔ43ãQb)¥Ï»ó‹Ñ€ 6 £Õ¨F5ªwgëñè£yÞ÷¾£LMýù¼C§‹‹!_ûÚâ iæÃÃíaÚ•ú˜e·À\ÝZ &+ÊùÐ{üâXY;…¼û‹罃U]ÌŠ$Q�„ëÀþ=Å{f¹ôÕ%ºý�f²ß�yñÅ6íÆ›Ba‰,g"Ñdbâ[$¡ßx"Œ�(‚ûŽzŒWò�L¯-B1 ÒŒ�kë ÷õwiL|_ä4ùœËܽz|eël¾ÔázòðZH§Ó4Eo.„Ä1šwi÷ ÚI7J€A¹ ¹p5bf•7HÝún\¯¯ÇÌO»iZóPb{š(ï{ŠK«1ÖX¬aé‹_½ÀéÅ«K}Lžð1F&ª_y¡7 k0,¸}"ñ¬9]ß6¼÷Þ€Z9m"ƒëá8±h%˜Á³K�STÇ4ÎQÕµô.†l/Ǭ¶ ½^ ~ërD·o\úìx6¶  òyÍêVD>§qµˆn§ÆλhEšëayý\Ÿ{�è”W¯�†ùúF¡=.{§*ÅÔ®5͹\ɱðS3�RÍA�9L¬Æ|ãùý@¶CÿùßÕñ\eÝ4ذRT|á]Žîó¾%zÏ­*Ëq44Ú–ƒóNÊå—ë4ð¡XР¡Ó¶k< ‹œ˜r™¨94[†zWgv/…‘å•·Bl*.ÏÄùo×°k%×�dsÈ9=²×crL„ìž«R:˜e²ªYÛNxóRÄô¸Ãô¸\Õ¢€ÕœÏŽðÚÝq^“÷TÜòz}C?Ýʈ“™‘燂ǾÞI51’”ž ó§Æ4�¶¥ZúöÎ}6YYÝw¾ÙI‡½3nJ “!Ææ¶J˜�41SÃùiÔÙßä‰ÇúÜܤÜ?ûZŸ=Óýôµtz†vºÛj¾ÿC…ÁõÆ9þúÂ�À'¾ ØÞæGŸû"¿rêó€PÕäëvœ¬öÏ;Œµ$ÄRö½šBÀ õ¼T€¥•„#{=¡B:ò èM»¬n&£ ȨF5ªQ�ê[»ÓÌ}4LJ?üO˜œÜ$¬¬(^}5â­·þ Ï<³Ên‡+;4bÀûè{‚ËåôÚžé~>ýšL”ž¤ß— ÎÓß^Î÷ÿ/¿Pž™ª9¾µ|rbL›RA›œ¯l–Éa­e³a1V¶W¶ ôwÞ¢ ©å}«óÊë ­®•ìusÃþvt4»†“�$ðܴÉCÕ¢pð•‚(�vÏ0VÐ71æxŠJI1Quxøžaš�œ×ÀSKwÒÁ7–$†^bÙ^Kh-DÒ0vMpgYÛN˜sÐŽ4Ÿy_(d«› 3ηd‹›Õ¹+!G÷û8ÚR«:LT:éc,ôû­¥éõ=Eí¡ƒöúâ•ë ç{sÅœP€#òJÜ¿Z`7Ò¼’w*¾®C{\®\‹i´ ž˜�tnN®#$NH3'äQtÏ!OÓ €#ð,Y ÆZâX,ˆû©"Œ, K1‰‘4󌚴±-×Õõ�G»hmtÇ| IŒáÚz"aœJ6{¦ï®­®· ã±N.4'z ò÷\j¥ì9¶�‰RSKbkku>ûGÿ�úª�V°ð•í®å�cÞx4Ú’‰rÿ1ŸBÎrx�—Òæä ¼Ù ø©åµ÷òyØÞæßøÿó÷|‰Ï?ÝåÁã>®+NVq,[Âí¦Pä&kI"Á©3ÖÅÑÑù^ê@!§è§‹®(–köâR´+Ãd@F5ªQ�jTï|ëšßø�ŸdÏžK· pæÌñøã_¤Ù„�\�][�Ÿþ¾üÔ¾9ÿoOÕã88qŒ}ä¾àÑóW"½¸ýÓ§^ÏfÛ�_üñÒÞjYç¬U¿vpÞMªEí Z¥y ‘—N† SErA�ù£´Ì#<ùÛ�FÒt|å©–Ð-Nò¥å�b!G£m¨·ÓªïÐ(ߦI6\—�鼟M�IK«+ƒÌ2×9˜çÈ©#°¶Àâ+k4;FÒÐ;Û2¥¬qVbÇ~„ö²k¤Dì'pü€ËäX¶y�Ø•f»aYXŽßW-+&ÇÊÙ†cHŒ�Ë+üŠÐÇÊû=¢ @²Zgít�V[„Á­®^?÷TG‚ÓÒ©kà‰ûÑâJ¼«{;Ð1üù(–sÔì蘬i±ûõ$ÃÀÉh8L½g]3ÍÖSÏÑéI‚µë*>ûM>òPŽf[šËvÏòÆ¥h ÄÎêF;Ð;o¥$Çptoê–×ø®|qœ0pª²Xö͸Ô*NH§ͯWÔä<ÈW’ŠÆ.Çl/Êöe˜³²™°´‹=®‘ëºÛ®þ0Õ¥�Ó¬o'¬o'Œ•âDã;NÚÓe”ïŠ+Ñì¤Ã‘)ÔN.KXéÀëdh�4½ÿßÿuV­¬G³Æ@JÀçýG=6†ÇŸíîLna1û-m¬ˆâËE%¡�M)5pÝ €XGÔÑýH=ï=ì§.Vrþ”:åvSèvQ$"ìNWÀÇkç˜ܚ†:"¸7ê­×qÛ™¥Õ˜rQs`N²c”ºÓvÓ 6J™n¦ÊûF×S„cû½ ‡ìq½›\G+–åߎ|EèX®_ês}Ñ%�‚!ù9ϼÚg¢êð3?X|lfïM£[à}Ïþ(Í÷?"›�ÍM~öå/ð÷¿ï Œ�jY§«*}ÆÈ5xu%aÞé ‡Ø�K•šbh|×0{ü$ãsuÖ—›ÄqjFàʀĎ6 £Õ¨F5ªoqë¡ùÔ§ösâÄ_¢Z½k ++ðæ›×yþùOóâ‹ço±õØçþÅ)L?x"ÿ«ãUG¾r´‚8¶ªÓ·ÎxÅavÂý÷ÎÞë1QÕž:Y.j›” |åfŽA�¯ÙsÂ¥°ï~\§‹Y¹ÆÒZÀ…—"¶Ö¾LbTš'!bRß“fÙsZ)^?2;áÜ6üOÝ¡1J ƒ4ôjÊ-ou Ú‘†Àwû?t§õ�¼ñÜ¿E+qŠrXz¡I÷Ü«ôBØn®­IFH½i„Žñv\þ¡�mn'œ:â1?åŠ8ÛM–« ð]ƒRÛ �Üìš{ž$]OòÑÓ¼¸Cc9¡Ù5¬?Ó¦Ù–Äö^d9ŸŠrÃв²!Mp·geRë*\W´Ÿy²ËÏþ@iÇiéÎf[\]�™›�`Å|µª3°ð †¬P—×d:m,X«øüc®-¶V;4;òßÔ'‰…‚Ro’!úœ½Å¼]ècö×fÛðÀqŸ±dfx�ºª¹=„Þi—rêbUwÐÓnÃÐéº]Ëö¥(Mšg@Ë&ð­ŽÝõ~_I�ÁÆ+šVÛxÎ |oªæ0]óp]•&'l5 Õ²¾©ñ_ÝL˜Ÿ’àÊR^2!²pHßWøNv=(Ñ.•5ÚÀvKôýXÑÙLX\q´R™ýs³cxê•Ó5÷¦æýݨ‹WC|O³gÆ#?¥ú˜°–^_a­! …œ¸ˆÕ*ZDÖ¡ÜS’:.çûÍKIØîÚÛßc7Ô̄ùÅ(¥ujmÃþ9—Ù qÑó=ÙŠ$‰ÿͺáüb„£UšÅ!šš øïh:RѾ³ãŠ(Þ1iˆ"ÃvÓ ”Âu%ý?}¡ÍXIãh uÙMÕ®­Ç<ýr—O|Gá–Û±f·ÈÏ¿ògi>ò°l>66øsÏ?Æ?þäShO½Ú£\ÔƒcKÉ4iµ cåÝ'k~ÊanÒáìBÄf]€×Gòøè�Ma/÷aA¾V‰ —ºXFdT£Õ¨Fõö[�|^sò¤ÇOýÔ‡˜˜ø« ’f¾°`xá…[¥™ï€ù¹*ì{ðDþ׿¦¤Ñ”I²"‰-¹�ŒZ¡ËEu|~Ê•&ÔÁøn—±±"ù}(EÆ'®Ó´ï!©¿ÀùÇ_ Ñ2„±b³±N õhy-afÜÁsqª,‰bÑ ” Bͺ]“œed9å‚&±–©1g`•š5pž†À‡VWÑ E;ÒîÁoþ¯¯Ðí?C/,°¶•ðч¬…—ÞŒ†Ö»­[Õ;ØÀˆ˜Ùaj,µ˜Mµ*m„$]¥Í×ü¤CiÌÁ�ªPöûèªKßô.n±vf•nT·±�%°´ÓîØ›hi½Ô6vµc(äañzÈ‘}‡ö¸üÊŸ¯Ò åßÐZÀÃð÷†‘¥TиTKšSG|ŠùÌ9Õĸ’áÏzB_ `ó•>ÝÕ(uîIxó…ó8ÎyX \Ô¬o›�žK§á�“�<ñ^ûü§ÚÇQ¬o–Vcâ„AjüfC@þÝœï;mc9pæ¢daÝç³gÆ¡V–ÀB?M?O ôCÙ‚j­˜ßý¬ð]ÙxéFÀM¸)ú›(6D©KÕÚ–äö¬n&¸Ž¢×W䱤Þnt¦(9o¹@1=îÐêZ¾ðt‡Ãû<¬�ã<,°Þ¨ò/ü([ïÙ¿ôúgù{?øµÁùh¶ UWl¬•"LDľÕ4” 7{8+÷òèö-$Oµ¬ÙúÊK„‰ ,¢˜Ajz¯oS�5 £Õ¨F5ª»Ùz”JšŸø‰"?ü©ÕöbŒeu^y¥Ï™3ÿ;Ï>{£ÖcØÅ*L­¤ìɃÁG&k•‚&Ÿþâ–fZlO�QD±fz\3;W¤˜ 8toˆùÿÙ{Ó`ÉÎó¾ï÷¾gë½ï¾Ï>`@€ �¤H‰”ãX¥%Rɶ$вÌ8¶b»Rq*)ɱªDzˉ-ÇqUÊþ`'‘­H‘-Š‹(›”HB¢!.@b –Ù—»o}{ï³½o><çô½w03X?˜R?USŽì{úôÛÝÏóü·é¿�c>ÇÚ³[,·š\z¡A§óU¢H]®®‰KUÛ¡¨S+ØjHH\šJ€ÛÌ„löŒîþnÓì£":KpvàüÅ�œ-29&Âáji¿õ¸YPa¥Û A›t–¡Ô]¨wY#¿ßˆÓÔì„ñ9å‚>0,)–fáòr<\_ù·WÙÚk²·=ÀA7ÏóØØ‘3G†RƉ}Û÷ûNå¹jØhO�‹ûUnóìy2|#%ZÒT†§{Žz2Œggž'ÔÌA½Pó8±™\ºÓìš¡ËØÁÚìÈGë‰�‹7å=«µF!ï#�- V·Rj%E³+ù<¯^�¸±=ÎïùI?(ÃÇö6?ñägù{?õìðþƒäÐd¦V1L2_ÛN¨”nïøe�ÇîHŒØŠçåI"ç¾Z:}Ëî^Šë)¦ÆôhÕ¨F5ªQÝõÐ ŠÁÀðË¿ü_P«ý5*•˜n®\qyõÕ'øüç?Íá4óƒCÇÁ �ôûõ«�¯?V Tâg6´E_Q-¦4:ÆÚ,lOaR8óèIš½ n¬>ÅÖ“—^X¦Ê605â0dn“2|«[Õ nþl–á茢:LÔ «[ [�”“Kކéq‡Gî dàÈÓÐ(`òž*ní•â�V‘^˜°üõ-vvÖXÞ4Ä©w_¿.›R¡GÈã|5tHz+ƒÆð‡ÛsEÈée)ÓÕ’‘ÅW¨ú¬£6 úR±ëž¾öLÇÎM¹Ò&)OÿÛkø¾C”Hß’Š­Þ)¸õ¿�U5'D{R.êac’XJ�4Z á§ßsÌ ±}Gš¥Ú„ƒ»T @ºÊn¤ÙÛi¿Ö”`·Ørc-!56Û‚ÃnK³¶•ÐX ¾è\WD¯Qb¹|3æôQï­Ý[ Ù5ÃŒ…‚¯˜¨g9,A®�‘çêj’Ñ¿¤Élì~ç·–iîvé õŠæ�Ó>©±¼øzÄ�uùýw#Â>Xížáø‚ËDÝ¡VQ™E^scÀóì°é½¶–ðÈ}>¾§(—^ÍÁÓ`cKh�”ôõ„(ƒ‚Õì~F±eõ6)é ÏqlèôÀs5Ú^›R03ádVÐ"Ü6™ãU¹xx[ÞêŠð².𕹩,ñ=C—"~–4 eáÕ+‘\¯'ÖΗ.¯’$«C‡¬Ý¦á¥‹1Å@ÝÒ´¿·uc=á¾ãþ�Âøç(HR…R¢™)4ƒÐ2YwHMæ´‰ÃVï'°__KHS±Wn÷ì[ÒÎÈ}Ô\¸‘dŠ&§™u˜Ïß“r·:ÓüFðÓ\ºïAØÜæo<ÿYþ—ŸúÎ[Ü• y¿™þÃI>„–ZEßÕð ÝÀ;MdxÉ5RýP >¶vêUM’ z3^Ó£dT£Õ¨FƒÇ-¨Gžfþ ¿0ÁÄÄ¿`~Þ%Mc66çÏL3/dÊ=8lðÆ<Š�2¾‡Í)ZA¥æ1þøÓÿ�_e³1 Š ZÃÅå„òW_¦Û7$1¼~Ã#IBáòß.eø }§oX˜v92çR«(OgM›l=”r™Ÿr8±äeá‚&”«~yž©Éþ±S%\9Ïʳ’†>4èô q ®ÇD‰=4ôˆUVؾ§¯9|ç•|°ˆ¾ÛvØîÛ�vûâª3^ÓTJŠR :�\Ü|ü˜Ë¥+1ÆztîÅÐ>÷Zt…mw ›»}þì ¤)|ë\4¼_9 ÛÑo…Q ^¹ó±Ç Œ×IF/d Òt8Z´a¤¯‰6«:”ŠšÒ½½ê IDAT’Cؽ­‹}6º’ˆÝXúK^¾¿!Q ÓžNÏP.ÊÕõ–‰šæ{ °HóÙH«èC™Q,¯ƒR2¬,N;œ9æí[ç‚|ü‚¯jʞŸuYë÷ˆš†È·xŽâWÿÝÍl› %[ ÃWþ¸ÇÒ¬ËnÓ>›ï¢ÂH®¹(jYP¡¤ŒgO¨;JAšjŠi�-¹¤5‡´‘ÒÚI釆(’çÝîzÃùÛÜã;¥¤[à¾ã>®Çøže§™°4ërtÖ¥ZÖCZMœÈ{n};%Éh€ùãÞ{ÌÛO£/ìx¹þD–¦©EØ74[™SUÖÈ:Z40kÛ©¸‘eÔ£bAr[6v,óïLž‹R¿¡e~ÚáÔR‘FÛ Ír=ÌäÒþÂ{/]!éæ¹ÇQl5Dãg÷>J¤ÑÏ-ißijúdÝáþã2+M ÷÷Ds’�ÏQ´£I>µûÓÄ<A@y{‹'ë¿Í‘}}ˤéyJRï³ç–Y(tû¾X-ßù›í”Àsp• #òœ»}¡d.o¦›wISè í® £Õ¨F5>†¨Ç~šù?ø›cÇÎàûÝ.\½ª¹rå_ò»¿{ƒNÇøý[Q�[SÌó¹Á$©èL*_nßøv—ë_øwD©K³�²×6ü™Ç‹˜ÔòÂk!�Þ- śۺf?Ì."PM¥¨†4…Ô(m±V%ÏûÚé1Må 8Î^r‘ÍkÖ–îù‹tû)a¬¸²"Ûã8±tºo¤xXÅ0G$È,S Í‘Y¸÷˜K³kh´-ã5}è9lì$�÷¨—U–càP,¯Ûwõ�»_«iª÷UÐ…:º½Ã¹Wö‹’ðþ䳪e¥°B_)øŠ§Ï…,͸‡œ Þ sËýŒS8±è 39ra{!´§7�œ?–-ðÌýUæß§ WÚ}ËÞóº�žäš$ðÚµcº=å�Ø¡äÉ[.pzÜa¯m82ërbÑ¥’eCäMûì¤ÃÚVÊÊV‚ç(ŽÎK@ád}_H~PœoÜËs.jÖÅk¤t:†VϽ2î(®ô-®kyõjH¯Ÿ¹Ri¡"• –µm¡Ÿüw?yôCK-;“uÜÚ]ÑBè,Û¦6îRyßi¯_ds=„ ×o<;`qÆ%<`AÜh r¸×2Ã3ûv°¥`rL³¼‘ò�{}ŽÎÉ`\̬˜s[ÜMZÞH¨W4GæÜlp’û=Ô@x’-â6£…±¥Ù±ÃëŽb mu$MûØ¼Ë 4´ÚbS¬3 žëˆ&eINÎÙþ;²'66âôT«ˆÞ«VÑ~~ε†å�dH j%žüºKûZŸ^Oä÷�òIRË«×böÚ)iÊp8}¯‚ ëUÍÉ%—ó—C>üþ"ScšzU5KýtŠ_\ÿâÏ‚ïÃÖ6ÿlóßqîÒ·8þñÚîÑs¯†›wñ²ÀÀˆ,¯'o¸ös#A{¬ˆ¥]-¶¸ž»¯]¯9¢_1âÌ–¤ûv¼·Vn‹›[fO�;G¨VŸùj—³'½Cîfïub:@¥¨Yš½R¹˜¡dE7™çÏ^û‹4ï;‹ò}Š››üfúy*åg¹²ç°±“23q-„2@皸$=Çn+•°Ó»Tµ$ïyÑäÈgÆ—¿ÒèŽÍ¹8ÂÈàûbžP*Œ(X£Õ¨F5B=@ó³?[àÑGÏ09ùw(º]¸~=â?þÇ\¸�§™;o‚zÜ:|ä‹lõì«Q羓…¯7Zé‡]G6ÞÆJЙ£-ž#_J_úF—ï´xç æmD®J‰pöѳá•W4•‚4iæÉ¯²F±·PݘèvÇ÷^‰|k¤éõ<‡—ŸxI†„Œ—ÝéYìQöAzÊÝ¾Š­}ıùlCˆFÃZ²�GÜ|L �Þïï[ãfbìÀw™�Rè{§Á:ØÕM6–Ûl_ ´;ô²!ÞmI3œ»yi%÷´Z’l’Ü1h¢¦3JÔ(ÙýÌï·ãˆˆõT–{‘£GÅÜ©*Ž‹Š8ο±ð;_h©åkqÉ DPP’Ö­áÉçC!v~ Z½ù q§r]Å´ÃXF+øB{É]Ë} ½&ž_�çõ îÂrDk'¡Ù3D=A_ÂÌ©çåK‘4¨‰Þß0²4Z2îµ�è0<°Ù@57åð}PJþîÍõ„“‹Þ¡¦Ódº l7…’²4³Ÿ>_j!²Æ×W±ÎíZKc3Í,Zÿö‹{tûÒ|(¶†+Ë ßçÓí[.ÞˆïH©z'•¿7&j2Tç Aè²`ÆÄ‘jQ1VÓ,Î:¸%MÚ•™FWšÚü^÷C˹Kdﵜ’t»kÏïå©E—óWbÉÕÑšg_ ùÀ½÷s3 Y°(¢ÈÐì6w Å‚>îV#åÈœËütŽŽf€þ¾`?·€ö3t/_ ô’.®T¦±PŠo¼2V•,7ûÿLM8\YN˜�tÞÓp{àþlî¦,ͺܛi¬ü Í‹ÒIþË•Ÿ¢yö>ð<&·6ù¥ß¤lÏÑ0|øò¥ˆ?óxqø¸i*ô=ßÏ i"a +›)‹3w½Ôš}Û^#ÎW­®áÌ ká¹W#Ҭє3×8ÇQ£dT£Õ¨þ‡ÓÌ?ùÉ"ýè¯0>~cRÖÖÏ?óúë¿ÂSOt¸²oõ8è€5ü[ÛMkž{uðMÏ-|¯±Ø(¶¤FhLÚ‘¦²^U´»š½VÊXíÎ_Üi–€\)‰�}¬æð=ï;�sá€ï¦ŒOùœ¿(i —nF<û{+s©U¶Ódã£0VèK¹fàò¢î~Woýqo`8±èKîBæ(ãhi>½X6ãijè�i¦ªMáTÏ£ìÐj–i…]z_[¡Ù‘̈Vײ½—’¦Ò Ü�Q@àK†@ÞÌO9,Í8 "±ôL�h Ò„ŒG­RAìO§Æ=«†ºÏ•¬ˆB ¨qqêeŠ~Œy­ÏÊ…˜(–&ríf‚v”«²P¸‹7DÜ?=îÞÖ�è�,ƒ­…ÝVÊܤK¥¨)eÙùën- "ù½¨ (³÷YšR„FÒ½{¯Et:qÊEÀFšÒÞÀ¾©pÜ'—\¶†À²GÏTJêÒ57é°¾�²Õ�M³ï‰=îD]3Qsx¤»»®"på²Â›qñR‹�a  ¹›2æ)Vß³hmØØÉ9-HSà+ü¾õ–‹Þ»û°PûŽS�¾a².HÃ줗ii„¢ãfÉî÷8©§v¯tljÀ�-ž§xöÕˆ©1‡ÁVJ”X±#n¤4;†$‘`»Û‰Þßʺ8ã°½gèô �?P`qÆ¥^Õ”2D I4µŠ¡\4¼~=æD&äÿÀ_ê,Ðuöia_Pš#"·µ ¾8þyfÜ—éôe1‘;ÿ¬?x¦ÏxUl˽<ÿ# ÇÒŒs׬—ÓKžØöj1cËNÓê ¼ÿ�vO>ÃŒu0@Á¹`�jT£ÕŸ¦áCq˜r¥ù'ÿäÌÍý8AàÒé¤\½ /¿üxâ‰? Ý¶ìçzäˆFò&¨ÇP÷qàoZ€¯?¾ö=ïóýø‚ûs½¾µk[!DŽ߻_pYßNùã»|ðýeÙÊg_˜ij™�r¨WÊy¶AÖÀ|E0Q¤Ì2l‡¸þ,ëDŸE…�æÂõÇUV…Ú=ø—Ÿmñç>\ÂóÔ[kŽï0t”‹¢éÈ9ã9}&ðåš4¦­=C’’QÄ47Í4ßûX@ïõuV7Ûô†~¿%®D‰åüåk'L«» 19Wýø¼K=Kð&»¯s“–­½”‹×cŽÌ¹ "ìÊF[ŽÂÁï’«xÔÊ wÉ'Õìv›½×Z¬÷ k›‚9ZÓî‰Mk¹˜ s¡Z½ÌxÝyÛÇÁá(¦âT²LΞôhv ®+h�ãÈ=žzÅ´·¢tïÂÀ“li*·_`Ö5a”‰€c¸¶ÓhË�}'"àJQ³Ý0ŒU5Ks.cA\gé*—Ô°ËóNä«}*˜§ðŠŠBQS*+LÍÁl'´Vcúýlãš¡KÕN3%5–A¤Ùk‹û–뀧d(õÐøÍ(3·ì�lð—7ŽÎ¹ÌM9Ô+BÌ©ŒZI3œ¿šŽ†–.Åÿ÷¯\ß©Vœ¹þÀòч 2(8Šk« alyéB4ü °wA9ÞjM�9\]Ixß)Ÿùi—‰LßSð.ÒÔâûŽV$‰å�Óþ~ÀåAjUöZ¤FÌ:=yÿű¥�Ùʶ{† ×÷…û­Ž^K·giúDZb]íŠ>¥XPôCŵ՘ã ÞðL¿ÙsÏÇsÅ©maÚåØ|ARë‹ûA�n†Òx®â±û5/]Ÿæ“á'蜾<�3›ë|aþ·©ª—„òü„:fIS{HhUÍÍ$2ô4ÎôͶ|fÝízóë�3$íÆNÊdf·[)i*%ùQ¾ )£dT£Õ¨þô¡š_ú¥cœ:õW©VÀÃú:¼òÊO=õ^xáb†zä0„¹õˆoƒz䃇=0€Üz f¢îþl1ÐöÆZÄ#g}êe�ïëlciHð_1�/Ú©1ArÏý¼Aö<:æ�x¸'~ÏÝ‚ÍWXÛ.rùâ€öÚ—Äi5a¬æÐl¦Y¶Ã~ãZ-é;fGÜ­…úˆÉγ“®$I»jÈûVJ2 ¦ßÿ!´�àé_û'=´²¸WVx¹ç%⤕džûÝþáÀ7µsÍ®5ð§�Üb�K¦‹ÌЖÓu|0£mxû÷rQQ:Y@ׯðâ&½MC³o<Õ¡ßm1ˆ-{mÃÍŒúÕŸÛî~!ppi �b¬ªÙn¤L�½=J³c˜ŸjRµ¤©V2áxÆÃ·Xn¬+øý¯ôíkÏ6�E†ŸÉºX?{>¤RR"n½7"àþ@ôsS.5‡jI i%ÖZ’d¿!KR‡“‹îP|øŠjMã,¸8=CÔ2tcK{9¥ß�‡ÂßW¯Ä¤&§üì#H¹�y¢&Cˆïå÷n®'LÔõÐ…­ŸÙVßsÄ»«¥Õ5ÌM:”KB¹{è^ŸRöþó¼Lèí ÚT*ib aßHFD ¿ûÏ—½JÙ™“¡~ï= ¾bqÆåésá>ªò^~¸)A“¦Ç%i¼\T”2•›Q°’Ä¢”Ť‚’nï¥ ©¥!M®SôûŽ~w*ß³×ÍœºÉJ¹•²utÎem+es7á}'‹£dT£Õ¨þ ò¯TÒ<ö˜Ï_ü‹f|ü¿£X´´Û†«WSžyæ~ÿ÷�Ãiæ@6îN¹ºuø8x-ù5Ø¥Y×¾øz¨¦]¦Æ5å‚>@™PøžAkc`iVtÂÅN¨�sóT “TÖèv ¼ÀÚ7>Ï^ÂXÑêîÐí‹KÕåeñÉßÜÊGžåÐí-ÂßÙ ‡fÇP-é»nùâÄ“¹OIGY(y^ˆïÊ&q9V˜�d¨CøÿþùlîÆD‰Ë×¾=àÃxŽâÆšÕ s8Ô>ÊñvQ˜‹×c>òp�‰;Yã:’ÅàhAŠS.^µH¹’¢ÊƒH¯·hœ[¥JC¶ÓÌmr ×ÖÒ7\k®ëHR¹çyòz¥¤¸÷¸GœÀN3Eg[újYjä:=C­"ÆkµŠfjLšàRŽÈøò<árðk.eßû!Ý¡ö¼ðzÌë—c'”“iÒÏ]Šyà”‡±°½÷ÞÒ�är[��³°Ÿã(ÑÄ|YŽ¡\²ì&–œöñ|ETT˜õ„ÆË!ƒPšÔ^(ì8í†1o./5«Û)Å�!JÝžá¡3>µ,R^kËÌ„Ãk×"¦³¡´Ó—³ž¤–ñšsØÌßwóÜìy•4¾#M}â(ÂfJØ¡¸ëZ®®ÆCMŒ›QÉ$Á<%\‰ßöðùVP1‹¸Ì�\ôÄpÀÛ×Í�¢6í(Ó·¶ÝªTneœd¦í¾œé(‘ðÒƒâ÷K7’·-ÜwÅÃ÷\¸ãö„‚”¦’˜>QíQÞØ§)ôBÃNÓ°»'Iç®sS.÷ó) $MÝZ“Ùã:*Ë2JÄÔb«{„�­þ4�“§Àu©¯­òêóÔÕKtúŠÔÂ:K«cØl¤œ>âò�çûxÜsÔcs×pö„“Y‡ËgÆ ²tûæ®Ïßudä:ûá��®¡ÞÞî¾§�”Äœcô]=ªQ�jTb‡�}�ÇØ˜Ã'>Qä±ÇþWêõ%ÒÔ²º /¼rþüíÒÌßÊðan>^Cþ8Nþïoþdí'] Tæô“ùÕØÔ+¥I�ajÆk𣋳L?¢üF›Ù{ý&««Âs»t;HIhÝ«Wã!Š’Sæ\x®B+ùB�Ÿ’fL)8±àÒh6w„Þ2;éÛJË5-LIŽHµ$�qÈVØ÷^Ñ¡è{LÝ«Qc'Qª‰~a�×Ö$9úËÜ®ëc­¥RÒ|ñ�úœ9æR.êÛgqðV›ŸLX«àÌqo8x ­q íˆÛ�1ù’Q=ZfîûgPíÍ«!««)Q§K·/ÍS§g¹p-–&6±‡(3wºœnßø–…i‡éñá�ý�Ën+åÚjB[6v¦'\¦Ž-¸ÔË¢¥È©%^voý‚¢ZÕx'\ÔjŸ½­˜½¾a{UG[¡æ6ä*ãUÍw^‰xðŸ÷bîÐJè0óSrÝ6Ûþ ýDxøgÆHZvVr=žè:TdÙÝJ‰zf?q<¶¼|)Îè0û©ÝouPr4ÜsÄãÒ͘Ň‡ï ˜¨‰C™çÊ �¤–±,±{u+a¬*¶¸õʾqp -ÝÍœâ*U�**T_ÖF(yù¿­=ƒ5kí®¡Ó“aD+i�}O1VѬ奈ל7=ãw+ÑZÀöžaaZÜ·ª%•‰ö5­nŠ“g i(”¯õ“ ž™=Ý}vS¥Æ’ZIpï%–k2´öÌÞDüþV™b XßI™ל=é3w0“ÃÍòZ ”¢<“(!MàìÉA�™­ðAš˜ëª¡þdB”Èy�cK3œåç[?Cçä p¼ÕUþUÿ7+¾L»+O&Ma Mr£‘fæfz\ñÔ¹�?x¦ÏÉ%�W®FËŠ�<\ ŒD#×h&êw¯”’Å‹£!ÎÎuo`‡ôÃÛ-r!ÙðŽjT£ÕŸdÔCB(Ã?ü‡?J­ö×(c:¸tÉåüùƒiæ¿ì-ÃGz´#ÿ½!ºñÄå@rÇÿð—êþèœóþ¢¯p½úç)ªÅØÑ›+$©RUž}%æÌ‡?Âö•/³séßи„©byCÙ�¶ºwwxÊ™™ ‡¥YA.üCÏDÝ2VÕ\¾S*}f¢îP«jÊ…}§Ï�ÀO›/àÍÍQô]ta�öö${[«´¾sŽnß²Û²túGÃΞa¢¦QÎ~sV*ª7ÐÞÊ ‘ßäÞÀP/ 5)ð$Á»ZÒìuÙÉõ“÷–Yn†7« u$JR\Gšôí‹]®$ËÄÙ6vu3%1–Õ-±É̓"ït¸nW‹3.3‹ÓÎ𺴖æ'ŒÌpмt#æ‡>Z>”&-ió¿ý¨‡Wöñã˜Í oh=ߣÛ1„ºrs#a·)›Ù‚¯ØØMd¡}žK–Í!W£•2YwÞv.ÄnË05&�z1礤 /Ï©± ü.­œ¦ßZ¦qí&­nÊÑyqÁº¹’°µ-YÝ�¸2½ñõ†JEűO¨H=ÜF“!_"ZϨ`KãU-.OÎ>íΫi¼LtZØkzkf¨ƒèô-ëÛ)­Ža§eœ‡„AhiuS\­Q™(¾PÐxžáÕ«K3.ýÐ2;áܵÁÏÏ÷ÆN:DG}_1U×¼ÿž�‘Jãº0^SÜ\O1Fšû~×ríµèÌ7?{Å’‰¢Û]ã÷´{†‹7úCï½¶Å=>ï²¾rdÖe¢ª©fÔ°üìçˆçJž¤Ž¤É�;C¼—eÙ …è…–(³ ÏÑEÑY6{'ø%ï“\=vB&§•U~=þ'ëç©”\./çK9w»MÕ•„ãó.ZËÀ¤3QÙNÓpjIòSž}%¤ÝÔóV±ú­ÃáܤР•�Þ ³í½ÓëÜÈÏS3B@F5ªQ�êOâð¡ÑZ3=íò©Oáĉÿ�éiI3_]•4ó?üÃ<ͼxËcÔ{ÜŠp°Výý¿òcå#Gç]·àë#¥‚þëS㎭–•[*hŠ>l62X?ë õfö_ðÿìÇøÈ#sò‡”l·_øÚgˆbXÝ‚�½høÅwp3}»�ãv›·3Ǽ,Ø \½/Ð|Ñd¤FšˆÉºÎh5A­L©P?‘�xÇšïÐ~a�õ¦a:ÝÝ 90\¼oˆVņ$:Ež]-i¾óJÈG.Üå ^  “æcqÖe¬’%xb…šr‘´ÂXÉ(ø÷ŸÞee3YJS$_e`øØc’æüå§úû/ø�€Âw²­nu µ²fnÒa¬&È–Ÿ‰Ycñ=�Ö–4³É=>ïâºT4~Ñ¡6¦`¡@š€½Þg÷Z—ÁÀdÍ£lUí”k+É¡ë Í”^h)úÒåÍÛDöxe9fnÊ•M­£nƒÞ…H8X˜r¹ç¨'éóÜ’|73=(k‚@ñô·$©4x×VRžüΓ™© BO>;àCÃp½á™}�ìq¯¯%œX”�ÅJI²‚ƒH6L£«Â섦^wacڂ´ Í�4£ƒÉ¦¼ÛzÒùËIb Ço¹}¥¢"Š¡Ù±Ãôoñò‰y—RfL'ÐêXÂÐ7üy¥FКþÀrtÞ娼Øé–3«ßaÇPÿµ~i�ËË Qbñch§†‹#[*Š@_ ¬æëÏ ˜Ÿv/*NàÈœ ¥ÅŒÒ–Ù¹€_Θ"MeHFÁXÍÁsD“ÒÏ âdßu+Œ,ýŒÕéZЏ´uŒÿyágé;ZS_YáŸ6‹{^arÌ¥T�ϰ—/G\_OØk¥\[K8�é�ÒT^«ÀWŒiM§g(ä\')ÔʆFK±Óúª{‡iajÜ‘ Ë0±~§i˜¿Ã!·°4ã²8ãŒ�Q�jT£ú2|v·2~ñÿ³³�Q.§´Ûpù²æÒ¥ŧ?}�$�}ŠV>H ‡�ÿögj??VÑ¥ Ó³öâ�X?õÒà_lí™Î-¿ À'~°4߉àS‹3Žõ]u¶^Õn¹¨l1Ð6�{®¢ZRÜ÷Užù÷;¤©ˆƒï+»¬ÿæ�ãúüÞ7û„‘áã�•HRËS/ECŠÅ�Ð�»ÞœLŒ{|Þe¬šY÷ƒëT֌ьG–�Ý”NûLž, ¦Àó7±ëm¶>7ÎíÑÝúýPÆâÔéK¨áA¡êÁÆ~fÒeZ’®¥Zqôü”“mÃV#eqÚ=ôj�VÊ‘y—rA3^sd›ZÐÙxßE©ZÕø÷Õpt�Òö:þ¨Gà+ú¡áò�„BÆ@rèô,+› ad qï¶%+Å, œÝÛBFs´z© ¨W–/£‹>N§O{WÜ�‹ûî_{mÃ�õ$»Âã¿Û¶zrÌaýrD¥$ìÙI‡Å�ÀWÃ|‰fǰ¹›rs=æþ“>ÑrL�9‡¹)ÑÎ”Š·j!ª“.ú¨‡ÛN‰š†v–Q*ÊpØÏ®ÝqTN(ƒæs¯ ð^ÖúvB± 9µ$4¾áõz‚ÎÔJK«kHM®�€++ �÷è…–özÂc9a/ IDAT 4ÃÀׯÇâ|Ë@ùæ¨ÜþüÁ{|®¯Š+Z·/¤ûOúÔÊr^e’÷a£•r}M,šç§]Æ«:;‚x �í¼}‡'ß“÷­ã)ÒÌ>¹7ØŽw{Ùð£O�ëgæB “×BPÂ��”£sïñk±“2Y×Yæ�澃Èfz 5lò§,¡­KãµIÖü»®bu3ag:.I¢DÃ0t²ÓÜxMÓÕƒòþiåçèÌ—éæ2_ªÿ6�Þ x^€ëŠ0=5r/ߌ˜¬»ôòÞ²–l°–ëðr?qûuO=M»#Î5{mA;‘åÊò›UÕa!L¥¨86/–¶¾·Ÿ–ÜîKSüü«!ï;Ðê–f¦'êe¸Eõå~Š ØB€ïU(�‡¤n�(‰ /5ØÛj°ÙHéôÌ0ŒÊÅê¶Øâ[w°rQ �¡‹adÅ&כדKÞ~J&¸ö\ OƒvT–$Âæœ†Ôé õku+%Œä5éôdpdîlZËç‰ã@© ˆÅNS(yŸëÛ¡çå¯ån3áÔŸSKî0˜1¯îµÍй ›Ùˆ—Oð[¿þ̵Ύ>¾½�ðØÙ Ó¥©aÆO?´´º–f'eiÆ%Nàc�ö?Ó,ìô�ó�+Ÿ yô [¾É3ŸÇt^¦Tp‡º‘8¶™ÞÂ0;éÉ£|šÃöža¼Æj ¾Ð2]­2]$©ÊŒ%4õ²èˆ:}K¥xø`›sñ=AÃì}Ñh¥˜»|NOÖåܺz4€ŒjT£ÕwóàqØZ÷çÞ'IþOΜÃ÷cÚm¸~=æ«_½Î… ÿ°o­{hðÌ/þåÚéûOù}rÌIJ�¸B a¤©” …@ûŽæ¿ú¹©v*%UÉ… ��ñ\iä\×I§¦‹ºö�YeÓŸB;¿ÊÆÓW¹t³AعN·÷$Q,ö–Ž–­¨±…PòDôo½òᇠoŠnlBµ†nÏ0^s˜ß·ï-eͲÖò;ކÚé1õůn<ÿáÓ…‡[có±õåOÿÎ3ø¾b� HdÃÌ„ªêÍRÑ…§~úˆä=¨¢ØR,ˆÅZ8{Ò§’ ƒs!v Ÿú è#ã(UÂ6×h^íÒ¸1è¶éÄ õòrÌ^Ë`ŒEkácG±¥ȆÞu¾óSî0‘û­TŽ>X+ÿs“™ ¿¬y<£'¾âÆZrhë©+._üÃsìÜìÑÞ³ÜwÜÃ÷d¾ÛJ‰SËë×â¡sÎ;m~óÿÏòFÂîõ™ ÷ó â„Ì] Rã²0­™›t÷QŽ,S¦2ãÀ¼�ÚŽém¤lo¥Ä¹p<Ü.l´ÌEº<0h­8:ïÒîÚað¤Râ†Z++^»ñà=�pû¹{ÞHž}"A�07åpdVS«¨!Úq0Ëb¼î°¼žHrµ±$FñëÿôºÛk¤ÊX;´‹þÞ÷HS¡…#�ÿNï÷íjj\Âêæ&Æ+ûq¹¦Áð]ƒ+[)‹ÓÎÐá)ðå’F»õ-Ý�¥Ig˜Ñ�âØòâ…“Qì’ç¦7aiÆd²gp]G[Ül0.øŠ½vfk¬døÝÜM¹ï¸[ZœÉÌ(Z]±Ì�Ëeq !O¹ŽÉóä5{ú\Hšenôð»¿þ<ëW9î:†R yöÕˆÞÀrö„Ç¥›‰¸aiø�Ç‹Ãж7tã9~rõ“4�`bù&ßXú-æÊ—øÜó÷ŸôyÑÐÏÞÿÍ =É_£É1‡×¯Glí¦¤u‹)í¿WÆŽO35±³Ù'Mžkñ}.w[)•âaG3çÀR!Éò?Œ½ûgb®OSj”2ªQ�jTß�ÃÇ­�‚–¿ù7?Áã�˜±±)’VVÏ>ñÊ+¿Â3ÏlqøóþV�GúÉ*?rêˆÿ7f'\#Vž ”’4`O y¾ƒÐáÌq¯â9 ßíR)»ŒÝ³¤–¯”ŸºÿûÕ‡v.w7#g~jåés^cõ¤Viõ²µ”a’·R°ÝHÙëÊÙf­70( Õ’¢Ói!P·m8mV.iÉöP"2Ï7ÃCk\J…”ñ…€­› i*èÃg~mÕî´ìÿöBËîìN. ÷˜7¢àì Ÿ×¯E¬o§LO@šj>ü~ŸÿèG±;Ñ›AY”ECZ½A«¦Ô+¹þC4gý� 8w«ÉüÜ2@F5ªQ�ê»uøäãç~n‘~ðãLOÿy|ŸLë/½ôE¾ò•¯Ñíšì³^@=nu¶âþþÙÉ1Çä<þÀ“4_“*eH­¦T´Ôʰxâ{˜›»‰^øY’´�Yÿu„»ßó­í÷ÒùÞ`]’¼/ùXÂC�q·n��Í�”ûOyÌLz8 ¢N,Ö¶Rn®'œ>æ ˆ}Ö¶Sî=îqúˆ·/VÍhB¡qðª'©×[Ž•HÌ£´›_åÆÅ]OÓîY6v ¾§lîJõ�ó!WWb¦Å!æîè†:ü¢Üò‹ýÐR*(&jšZIS ô¾5®¯@C¯/Ͻ5ê•Í”ù™3$&ÆÞXg{µM?L Ãv–àm%Ä«‘Jð¾“h{wf'5§ŽxtŸú2a(Ž[IjI2s€(±™dððàY/ ÕÐA£ºÙó®Wîüf™¬Khá( }T£Õ¨¾{8H·Í/ÿò1æçÿ!ÓÓ¯XY�—_^ã›ßüçÎ]b?ÍÜ@<ò4óƒYª^Õ¶à³èå+f°­”#¼lÃøpy»Fê8 ÎýcZc‡NÏê› ƒH¾�oÝVÞ©áœ×Ÿ¨W³Æ sSé ä‹ìæºÐ{_�5ššÇ8(¼•k®Wå¦ÐÞãøÎ·é®”Ùkˆ¾~ƒNë2Í.´»"NýÚ·û’B¬2~¶«(„'ø:Õáÿõ&MPZf&&ÇdËF6ãH OÚ÷“gÐå[/¼F %Åu ßNYþ£Ëô² ³õ�”íFJš ±áí!qºvïq?ã]ïñDZRd\-ÛÞ#³.�œ ö9ùîþÐQwðN•q�ÝiÓÞÕl¯G ^ÙÍ(`²ùÜÚKq¬zK©(�°“qñëÍk×b:ã¿m[ܼqÚi¦,θLµd\”¥YL²3£e¾Ãw ¸¯vúi÷[_Ûš8{ÒÏœÕäz.¿2ˆ,¯^‰MËܶ†[ýwðf=}Ôcy#áž#³“ÎP„-¨—4r¹%«³÷Ÿò©”Þè{ŠZÝÁ™vpCKÔ‘´ôÎZJÿª¦¥¯l¤4Z)ݾ&Ð_]Mˆb›i乿"ã•Í”±ª~G÷>¬sÔk²îP¯j>pf’IJ¶�î뵔Ɗ|ûR‘Íó}:-iP:BùôËá;¿¿Y|9õŠœí©1=Ìäp3ÚPj è+ð,®Ç’Àn,iªXÙð…ß¾H¯oÙj¤ë;éa7¶÷Ø!·(f\Æ2t)_Ì‘ˆÜ¥‡©èSczhõ›kyòûE–8…8–P¿N&âϳˆn½þAd!³_.Û “…e´W·oÙm¦\Y4âÛçCÂØÒl§üÄ�<ÆÇŸ¤=¿€²–ñë×øêÂçY¨^ÆB¯o)5ž#Ãn> ¶»’ÈîÜáÙfˆ�µš ϱØy­®^[�9±è±ÕH |Y$ÌO‰HÞuößÏ;Mùù�êž#^¶ŒÄ£dT£Õ¨¾{P�ÉIͧ>õƒ<ôÐ_ ^'I ++ðì³/¿üðÌ3ÓÌí]�CèÇ+—£æŸûpùëqb?”$Ò(|õé�?üŸH�¢Ý3¬l¦üðG‹$Y’ík×âý ¼ÍwΛ5ý�åø‚£UËzh�‹¥-Æ‘"Ifçf›ìR8=ꯂó¿Ó|î WW„ݺ½óD,o¦l5d«Ævß�êÀõLÔ4½�8ÍN:�w±ŽÍ»ì6S ÄóÕ�v“f�p‰(snRr êe ÏzUæþh …ÕE‹š=KµÑá¯ùqbøý¯ÜnËEÅ“Ïø¡�”臆nÿíQMîTÆŠz¬¦¨÷­q±D±°ñ’D��ÙiŸã÷º0_Gi»Ò`o³ÏÎõ„°Û”#‘<�fÛdÆ·ŽçHÑXÕ¡7° Ât˜R,èÌ×ÐhKóvtÎ6½¹–¥Õµ,Ì8‡Ž¡=kØækJ%Eé¨c>ª³¾“ÐëXB×r}-†:Y`áÚvÊ¥›1gŽzïi³›_{”ÀXf'[ľ7ð%™Ü5鯉¢RÔ,,yŽ{¨FJ'¥Ñ2D=CÛa.ÇÆNÂÊ– 9•ænt0káÄ¢ËnÓà{–ó—Eœ<3årúˆ˜ äÎv�–áæF*ÉîÙ ÿÍ:|äf$¡¾RV”%Ÿ‡çÉ=-—5º¬IÛ’œÝïÛÌ}J†ž¯}{@¹¨3KZ(úÅŠ?øvŸ÷�ôßóÏ\ÄŸ¤–ZYÎì~†vj¹ HR1k¨–ÅN·ŠÍožÇ1L��…ž‡• ~š¾õÁéȬKÁOÙj ¢µ œãu‡GÏTË’ŽîhÑÄ4ÂÓü@6|` ãׯñÍcŸf¦|õÐW„1–µ�”÷�”�Fiù¼ #Kw 4°»!ÍÌ–wÉgÒ0q Ù;7Ö%k¦àƒª:ìµSvö 3ã¢û¹±Óî ýêújÂñE÷ŽK…üìˆFe4€ŒjT£Õʨ‡ Å¢æÇ|†�}ìG™œü1‚ ¡Ý† \Î�û>ÿùÏ>B·Êµ·Ò­â[��<`P¯lÙt§™Æ3㥂Áu4�žfå®Q_ñ¯§ÍŸûÞÒÛ4Ôíšcæ§e3_Ì6Ù¾'ÍB©î¨�ÍÄæœýB ©T5³g?N«{Žî󯳻ùׄãì4EÄžË�õ 9Ðûó �ê ú²ÓL™ŸrX˜v©dAiÆÀ †V;ee+åµk‘ðøÇ4�nʉÅ`˜UP²`:Gø†Ê˜‹³´Hàp‚ �%ºÑußz–Æž ®kùêS=OºGG«¡mí7_°ø.³"rkßzUšüé ‡ÂСGîïø¼‡r»7£¡×àZ6�SIÈà�·éöÄyh}G��8±Ü\ZÍÛŽ\W�̺ÌM9TJÒˆc!N&Ç ãU‡› uâje-[öl ²ë÷¡–'Üù€Àµ˜ÐÒO u=¢óü€0¶llfBq-a$gÍqd8,�žlá‹Á;›@òaÉZ±fž×8Z1^ÓÜ{Üê Ü,¢\TŒÝ¿D²»ÅÖµq"A|…@ñ…¯tøØ#!baš5wI 7Ö“ý�·y©õ²f};ee#味 Ó.õŠ¢àë! ÆšzE6ç×׿§¦Çþë¿01D ò@ו³Z.)¼²¤¦§V®y¯™ÒÛH2ÛWɯɅç iu-®“å^8òXå"ŒWÚ™»Ô»­(£NÔ%»bz|_Äßíg¨Cö9滊©¿UlÒzîE ÙËlh“žy9dvÒ!Š-×VQÛÝKiõì»NOŸ™õu£mèõ-K³‹³ûY(¾§qËW_{¿zò“´gç„'vù Où�7 ²X‘l%ß; ÇÈè_Û Ñ€ÜmX­U4§�xôB�ÛØIˆ3ºØÊfš Ñ‚|˜¨;4Û†ÝVÊûïñIS<ƒÖ†zUÓêªå7þM7{/ä%q2@F5ªQ�ê?]ÔÃq4=äñ?±ÈÒÒ?frÒ%Ž–—/½Ôä‰'þ>W®X pËàanA;b Ïóá#ÿÛöýjó_ÿ£¿5ñQßS*ß‚yN–Hž N}_ј!UêÍžŒµòL¼Œ'<7é0žå” Š­ÝT†œLœÌÕ¯~a繟ø¾ò#½�Ôæ6˜ƒnÊŸûMªe-Pÿ^…•ÍþþßàVžóí]©ò::çrtÎa¬ê ‘Ž|«_ j%¾×§^Õƒ@Øž"À­” Ó”O51ê©Ù!¾¾ÎÆZÊ Lé÷t3aêK#Ækq*âT�Ù‚ê\{(^º±0í¾­æ&Ie@‹c¨UScû`Å@ô;�tøô]µB¿ÛKŸÿb{ü#( ´h^^{jwÛ ÝÿöÞ<È®ûºïüü~w{{¿Þ ±AR¤(R‘EŶh'±åX¶&•Ø™Ø3ñÄ“©J&“JR5“É85™*g9Î$Ž—JìŒÇr¢8Z#[¶6j_(q'@bß�F7zû»Ûï7œ{_wƒH‚´“?Þ©¢($ú½»žs¾ÛÍõkÞ¸û¶Í�‘­ïüŒ4XÅ@=�„n¡),‚„Õ+š Ø 6 ¯êP.j‚].©ïc—{´Ï÷XéæNCÒÈ…±åÕ 1Ijç}µa$´ÍwöËO„õ­Ž¡8÷´Y¿¹–29ê0=îpxï¶´ô,_¦ÕúJ~ìWÑöÞÇ'>ù9ëk” p$ãùW–^< ®å;%Ž¿Ùatßœ vM:ŒgǼ‘$K¤÷=A+¢ÄòΣ¢±òsw'_áeIÞ¥¢Â5ÉfJsÈP9&£ùâXÜØÖrÝl×€tûß3¸.h­C@­¬¸´�ppÞÜ»þL)Ï©yZ ]snJ¬j)Gž¶èy­Žb½a†ÆBÜ=ÍÇ~g…öZGèNmˬa kXÿ5 ;ÓÌÓ~þçÿ7&&£XLi4àÜ9͹s¿ÉG?zuǰ²ÓZ÷v¨Gºí÷·ù0bÎ_‹>îh~j~¶ ¯k¥X\N¥1PBÍZZKØ=í½vjÚöͶÙáì“k# ~ÖØ8Ҭ훕”]ñËW|æSkÖ6í£ÿáãM»Þ4x¼ï�ERk¹t#‹Çö­ww£ºÝ�nt wûŒÕd+¿=©Ùwí ³ ×w˜Ÿq…þSÐT÷zè±GñÜ&D×h.”X~u™þê‹t3ºÌ©Kñ€?½]±º!‚òjIgÙŠõFŠëÈÖÿ¡û|®.%’&^¼s·/¶Ã¢7)J†¹’¢è«mP²±¬N¸$ ICBÎ.\OyöóKE¥(º®âóO÷éõ ï¬@’Zž~9|CˆÖnØ­l|sþ½ØâÊïÅYb¸±–~ä07édPŠÊ¼‡/à9 ñ�„VײùR�n»;à¶Ÿ¹“$2„´º¯åß[D(}}ÙPÎ=­¡›mÉû‘!N%aÚZ˜¨ßyÙl‰‹RžÿððŸR°-¼Ð•­nÁWTkš…ž¡}F¦$Q|ã¹ç>ñëø�‡Vе†á“_érß¼‡ëÀs¯Fo»ö!¿VîÛëQ«ä¿¤Ó n’ÙlËØˆÃd]†×JÕÁ­jœlÀë…–æMC?JNO Ëâ╦w0H°[ ÷ÞY—Ë7’ÌŒÁ¢< ŒØ7·•Vß�ĵéNJÆÀf+efÂe¤ºe@�'×o·†v3áx©¨˜™txæD(BéD��ßý­Ë´{‚Di%)ñ_{®Ïô„CÛ?öþô¸ÃD={.eø(à×¾ù(¿òȇ`F†Î_àW¼�ÃÄY w˜ËÙ}#Éëâp—ç|ßÕ»j¬”b€œ¤¹“Uß`€½³§.EZh,¦(Ž`n–àî{ŠrAP#ׯoÃÚ¦!½ÍѺ ¿ýHô4ÃdXÃÖ°þkB=òkk¯"t+}ÔãV½G>xXnoò£J®Úã¡‘E© yô¨ƒÒÇ""\XNèt …ÌM¦Ó³TËjà39*n3ƒ�ÃUxnŸrYÌLP~œÊþo�¶ßˆÇd IDATC»{ƒÞ™¯Rð5­DDšž²yqífÂÂJB§›‡nu:oÄ•*§LØŒ2’¦–©±Ls2ý“|…$% ªSc¡‰ìyp¥¹.qø qò*½O³Ù°™�z“õ†±/\�‰“×4¾èiü¾åàn�RA6ÒyÁÒZ©KG÷ùt3þ¶lìSöÌzÝ#k&Ea)•5îD�b¡‚?Û#é�G’Óë$¡l.W7SR+¨–cEß²ÑÜ¢™¼]Mp»'âüjIS)ªmZ¡i  =«à -ãÙS!?ó×Ç ñH–;´žmÒí[ÂĆ"nm´�PÁxcÂq? dëö-Jje‡£û$y;·`íô +†—φ;àÓí ¥\RLÖº//û[ÏQ±;îR(ˆ>¬8¤‹ #MËåD4Ž�‹ÁÃZ±µ<ÅhUsùFÂÞY÷m9îmË@p^,È0øà{?C3Ê%K)º}Ñžh‡RòÙû¡¦R2=Ⱦ9Aín½{BG*hª£µÇCµ ÑBÂæf*Âñ,x.Š-M“%“kZ]ƒ1ùæXŽ{© h¶M¦Ã¹÷f×dÇÿÚÍ„¹)G®ñ²„^"xÖ™þAA­ª)>ú¢ë'éžÙZYf ûíg%¦×7Ä Ü\OY¸™de9þúåÓ/œw§c|ærýWA´J‰»”$Œ‹]pà“!�z›54ÄÉ÷ ÊQ„=C/„fœ =,–óÇ–Í–!Må>@)m›‰äåÜj Å@3V«á·:€¤Æ¢•¸‹-®&ì›õØ3ëárAqq!Ak…RŠùô{ùÍwÈðA’0zþ_Üý1ªî5Ú]A6$¸ÐîxÚ­7S¹·<µÃî·Y_ßÕJÚZØ=íÊP  MDC¶ÞH7š8ä'–3—#ÒŒÑتc©<öó¤ßùÇD‰EiYZ¹Ž>ÚÛ,D&Ï»Nß �a kXÃú/4|¼6Íü~á§yà�÷R­NÇpíšâÙg#^yå—xöÙ<Í<ÿ3 wÖz$· ·<Ô-Ã�UZýíÓ—#»wÎc¢îP*l¹–Ÿ>§ÎÀži—‘š4:ž£ð½>õñwþ1ïAüêçÔñ/W—J‘»«ÿíJ£‘Ò�Ktz/qsM¶œ7VÉŒèY6›’Ø›;!¹ŽÐì6C½Î(—»«Ô«²]­i=ê’Ñ}OÑéÚ}¡råîE_új£óÊ7ZÅNhÝ#{¥YX_jðb*nNK«o^ˆ½½¢ØŠù—ñš4_yó™dBÎ<ÅØbyè`–Gà(ßRuqv�øŽÛ¢×,ÓŽ6éç<�®¥A«cXÞHIR¸¶´“‹½Ù28Ù1u21p!�uöz3e|ÄyÃù�žXè&©af\’Þs*H�e³( 7VS¹ð¬\„/žšå…§—Ø\oÅ–ÝS¢IRËW¿×§TT,®¤w°˜}óµÙ[Üéq%çT•|‘ëY>_/´Ýçây"–\E¹¢ñæ=| :²t´W:ßìÒϲ+z¡ea9!M%#Ê�°+‚Ö$‰4ð�oÑÙðøšz þè›m:\àÀ.op�¿î`e¡j%ydÌM¹Ü`[Rw&Üw°$]‰±òY>ÿ©g8ÿü&‰ÉÜÆ&$„.Š-¯œ�¸²xïâ÷»=ôìò„5®3ç;Åç6¸Ij 2ç¬ÔÂXM1;áne£¸2lx~–áa!‰,k› ™S¬®-&±ÅÕ­kiuc;)$®#ºÇKXãzÃÐh%ø¾PGªú }?›¡¾§éöRæ¦$ˆò‡|J™þf‹²õšÃå…>ÿþÌ�ð›ÿ9˜œ˜ùôY>¿÷ÓL–®P*“=Á¿þ\Ÿ')0Z“Ïä¹BƒÊÏwš �ªÛµÙ5ww¬A2F\½z¡åå³}9ZÜÒ"iAXÎ{œ819êðcï+òø÷¯“Üøu¢Ha›Ù_k1ƾæšÍÔÒTÎS«3D@†5¬a ë¿äð!ÍÿßþÛ»xè¡÷3>þ!<šM8w^zé³|á _£ÛµÀö„ªíZ�ô–Ácûðq+ÝêvÇ&£sM�¹ÆsQõª¦ZRšÖ'òâ7FV4g®D|èǧ‰[ýÎü{jåÔý ³Jtý�X¼|š^¿mMi×Éo¢ÄãÔEK’ö°V ^n iÈ6Z†‘ªC/44Ú†ñ=pÈÚl¾w¢ÏãPúµøÀ“ üô˜Ãx=ÏâÈ6ØE)(:x•Qjå Þ}}žþä*Q’à%ðÔ÷º,¯›j(RkyþTÄÙ+1?óc’D(Joeû›—ë(¦GɇÈhTn&ò�i„Œ1„eM”8LÏ UÊú=‡I[DÖ¸¹–ö Ýþ&�ž4^ÇÏF’5²MÄ|kóh¬%‰¤éV‰4 ãuÍxݧZ.ÝH˜u!lyʼn4íÆŠhµ^‘�£T€ÀÓ:LPTx—ZYãÎ{Üü\‹86Äž¥Ñ²|ýÛß8ž% ¼x&âĹ�ó>IbiußúqÞ^Å@ô2"—dkÉ?ÙBo¬ÕYC”05ëQ()Êu3éa6bzW#Ö;v`ÅÚî BpúR4Ð$ÝV¬œý}¤¢Y_ˆ3›iE«/vµSc.ᇫXdˆY\jÒ­ˆˆˆÅí®¡^­Fµìeô6áåçpßSø�¢PP”ÊUÕ\>Ç–Ä…O}¹ÍfK¨}ÚBµW–RÖâ–Ôh™·El}»f÷ÆJÂ{ÞQ ZÝF1Ð�ÐÙd»dc5µÈR 4™“[(¬†^ǰÙqt”ÈØîÊ?Ÿ¿&©çf[ê÷ökiûýP-k®-%¸®Âq­ˆS¹×ç&f³ó`¬„[& ƒàÀ¼ÂHÐDÏ…å�”=3.»¦<ªe‡rѧèk|ËTÁ¤¨ƒçj”Ò|ä•'ù—‡ÿ LNBqèÂYþãÞO0U¹N˜l…†±ÐÈN_�Ö>V RÒ|ñé�Þàe¨m/Ìò?zr�þ�µM#šb ñ]Y.%)´»–w.Þv.4?÷Á*Õ²¢RÒ¬] Ñ:$Måó…±ÜݾÜ#Ö:ƒc>?íxòû¡%Š,ËëÉpÖ°†5¬?ÁÁnM3ÿð‡÷1;û� H˵kpüø ¾ñ�Oóê«yš¹Þö.ßžhž¾Ú[:uÔÅœ'óFÞûHùo¹.ªv‹5n¹ Yë CjÀ�…U(hfÞQæÌWÂèÆ™´Ü]ü5º=Íù«1Q"[ÿVÇìq¢ñÛ49ýÈ0Yw˜“p6¥2QdÏ27é°´fXÙH»Ð±,Ý{´ª)giÒ�ŸYÎfÛÒÒþ]ûY¼Âw0«4×J„Ï/ÐÚ±EM?´\¿™‚ÉÜ,­¼TP‚x¼ eŒ|÷z5 ¦ËÆÜÖ´TTl4¤qÊs ÊÍø}�…€åW›ô×ÏÒ åxžº$nOýp§Ðýõj¢îpi!a´³“.µrîB%Ô‹]“.‹« ®ÇØ%¶œ³£#š±š$§oô3:Qi��Å3m’Õ„f×=ߥ¹’P*(Çð©HœÕ\iÒ=O6νPÎóÛUí,GcnÒÅuiÊÌ|*E¹^6šù1—ã^ ccšf+Wcz¯†ôc¡ðœ¿ž5)…Í7™J¯²L”FÛÐí[vO»ÞëQ.HCf3tlnÒáÆrÊâJB«›°{:`rTøš±G,ª [×ON% šËÇY]‘ª£!î[žú½u&Ǭ7D»qþZBœØ{NîŽbËÞY—}»¶Ûâª,ÝR.ßÅqv _]F  “dw(Ž:¸#Je…3¢ #�d£Eë™¥Ì L4½PèKE«+Mn˜Ø�“ëHc¶ÖH‰â{çÝ÷úV†ŒÌNyϬO­,<{×…ÕM3àÚ;FçGX«MÓ~úËëF(™&æãŸióàAŸ•ÍtàöÔl›·œ–>^×ôBÃ�Ý.³ÎÀòT(wBI •üúìxÀø¨³%~ßæðT ^U4�QA‘®Å%.N,½¾e½)×ÍFÆ¢!XÝÛkÏ]NÐX.jNœ�xäˆÿ†ix·«õFÊHÕ!MÅémjÌáÈ>¡‡• Š«‹ñ€b©³Ÿ]z÷!6o̲öôW³Í¹|6Ï…Åe¹æW6RÂÈrærò¦EðwªZYÓìˆIÀÞ9�C󢫔ԶA'+E *¼²˜rì 7Ð¥¶9Ïåbøü\9P9Ý(Gm„eõ‘sàŸí{?Œ�C1zú4ÿ¶ðqªÞí® •q,:‰Í–ay=EkùÌ=×òìÉ�o¾rl¿Ç‰ó1vYf'6[‚ÎÝXM™¸�c{UKz`³.ƒ‹£ £ð{†ÍVJœê©•kF‘¥Ù•Ϲ°œph�‡ë(n¦”Kбšå™WCîvQÙPjŒ ÃÖ°†õ'ŠzLOkþæßüQþµÚ(ql¸v žy&âĉ_Þ¦õ¸õ0ŽÆ¼ÿ1/­9¥zÕû;ížµk›ñ¿YZKN^L»I:@5r4„y¯çí™ñ¼ZE;3Á?�›Ð”‹z´–‰@ ¾2~æûïeB3Išž'Mec÷±ÿ¼N³³F«™²ÑJi´ ü�iÚµƒ~¢_ç`Üæ½f­lAg'ÆÛÇ­Äsm–î+MÚÞ9O¬|ƒ#•:Þ Øÿíü6Éù5V.nž\£Û:—Q¯œêB”%Q4Ûò³]GÄ�Z+­¸¶ÑéY&êÎ ûáN•§G/¯§ìžvÑTK[Éî�ŸmD=ð §Î‡#ôŸ4…ÿ×évVû†fÇÒì¦üè{åØž»–pa!yÓB÷;o<»§�šQð³Ä½N²]Q,IÚ¥b–|í;Ô*ÿ�Á(:Ú¤{1beŵú¡ljûa–� ;9¦Ù‘¿{žb³m(fZ… {£Õ­\„<÷ånž8•ÉÆuהˮ)%ÃÒ±rFu †4ãÑ[ŒÕ|ô+túô;=z¡¥Ñ1<ùxcau3å;/÷¢ë·zÌóÚhŠ~zÌ‘ Å’¸R9°Š8• J¡ã9L�;¢ðä¸E¥¢ÑÓ.ªcè­¥4ÖR¢žÉº!Œa9u)~�AÂZCNF½ª¹¶”â{z+ÐQËøˆP°j}Gß�®ÿÕMÃì„Ã}{½Á÷+fhM�Ù¼ºŒÕ.ÝÝ—èàã¿~‰ÆÆ*½v_¶÷]ËXà›/ôùéž«˜ŸvÑZ m.zï[Ö›)—oH®‹› Û§Æù3Fì˜{}yVtºr­�a kXÃúãE=¶ÒÌîç¦xüñclì'ð¼„FΜqyùå§øô§?ÉkÓÌ-`”"ýÑ'‚úûÞYü�Ѫóg+%mµ" cØlùÿûÕ¥Ä94ŸüÁ§¾Òýdþßýƒ¿VÿK{g]øêáZYÏ×ÊŠrI§k\ÇR,j]›u õ&Ú,¶*»½þÃ<óÅ¿GàÕxåBÂz¶}ÔC4/� ©–nÑÞ1än¿Üìæ§½AÓ²](%y )-¥Ñ»ûï jOCèÑi¼“Þ¥ÿD÷Êߡۯ&Ò 5Û†ÅÕ”~t÷ôbù–(–†u¤ªyòÝE’D¨<‹«BI˜ߢ3œ»rp> \”mçd]óȰ­ö é)•9gt–B Êë4Z VVC|ÏaáfÄÚj<‡óGsËé^h©*¬Õ”"Ñ Y;¤` kXÃÖ/êá8š'žðøàw±k×ÿM½îE W¯*^z©Á—¾tkš9ì´Î5?þ§ƒÊ“ªò÷κnµ¤/{r‡±e´¦ÌHE›zUÿÈ¡yï‡íñ2ËQí–‹yS@xŠBYáGM- K�èÒ _sþóô¡êOöN|Ñ]^ ë×^Šiµ¿Íf»„ëÙ­-ªÊ¬q3;Èï�yòñÒ›:’tËú²Ù6ì�õ8¼×ÃX:»™;Ó踃­;Ýh))%IŠëÈË÷æÍ /| Ïí†)�îË"¼ŒK?×ßÑpÃs¬«9ìš.w! %LSizGG4‹+)böÎ EãÏ}_™jFO*ú[Z¿ ð+%*¥"Á¾˜T¿ ÃiÒSKÜØ0„aJYš‹ëN^ŠIÍÖY(Išnß¼å\c„ã� ›§Æ³¥p]i²ÆfFѪÏòB/›‹3Ž�-áÅ –Û)Q(ÍI/Kvùl·ç7¸™Þ3ãÒêíq™qĆ5 $ #˜ÓÜ\OYZM™™�ffvÂ¥žoÕq� ¼­´n¿ª)Ju…™,`{½ó­�0´¬\�3;`w{§¬²cE_(w‹«é ÿà­V.Ü·VÎѽ~¦«bàlVô5#SIhØ\OHŒÍ4šo¿Øçƒ#š�žÍøù"îíG–Ó—"ºý»ˆß_§*EÅê¦!Èè½³n¦{�û/§Ô´º–ÅÕ„F[Ænß²gÆe~Ú¥Z»è¶</Áû"/4Öƒ´kh6dÐ닦«à[´]E³c©–@{*£eiêqIªWßÞ$52t¾ba9áð BÌ-~}7ÓÕ1�¨—ÐiYÒÔâeú,ÇÉ2dú’'ùÃf臥۳4;Fr:†y¢Æ/¿ðùÈ¡÷Áè(ôû”O�ä—¢ßcïÞUÇ •’Œz¯'´ºbÝí´ûÛœ>çg.Ͼò£ï+' ßµ(å�¤ŠZ)«Û>’Í»ƒœ•0²ÊÙ1L�»wE»ïõ²D{tÐ8µø.„±aµ!6½Æ’�Êó¦Ó·” ,¸Ž £ÎpÖ°†5¬·yøxmšùÏýÜßglì]ø~š¡š3g~“�~ôÊŽaegšù µüÉwW>xp·ëæ ØyÓ'dºi&¦Æw×´›5h:Ý**ÇÆÕ™ÎçýéwÀ,¾�.^¯Äß;i«íø'Nþ�1½Î]�•Í4(XoŠ#•Và¢ð|.”εo`þà안²9«éÁ&>ÈÂÑÎ]‹vüΘÃo}¤íšpK+7c>âˆÝÂÂRƒë7“,ÛÂ6ÖoÔÆt{µ»–Ã{]¦ÆÊÅ­\ŽÔȆYxΪ÷ÈQÿ¡{ö¶7@�ÂõûÐ\§¹Ðxu“ÞÚSôCèÇpuQš‰|°YYWÜXIÉD• �‹«fà|ôfKšÑÑÔÊ92#ǹÑ2¤Æn]œx{ïã©Ï¿Âæ¥>ëMÇä87Ú†WÎö¹º$ô¥N_šÇü8s� Áf;åØ~Ÿ™ ‡Z–Bï8™�5±kbká¾=BçÙjr·RÞkã.zOA2F6#MX¹Ó?ŠËN"Ô•›k)íž|gÏS,®ˆSR!Ó¿h� ±5®ÅoiÉ3'¦ÆœÁu^-eÈ@ ¸´ ú‹)*,ÁïçÂ÷jœ:þ»´»†GŽƒß¿¶” òP¬‘k5Œí[¦„�ÖÄá)J¤Í–mN® *-¾WŽð®[¹“'ŽC¥¬q+�XÉr‰-­•d�‹%°¾)ú€VW,·wϸ4;†VW sDÊu$¼p½iXXNØ5õÖÛÔ<gtDп±ºÃƒ‡¶BýV62��–óSõ8ÑS§ß}xôþï|tÑŽÖdv4\¹‘R)&ƒP? :lu �–ÁÑðýï*ǂֹNÊ/=ÿc|xþ ­ òñÒq¾°ÿ“Ü\^Âw½�Dš 2I*)ñZÃÊFÊÕÅ„‰Q¨Aý|Ïš{'Ë0q [L TJšéq‡S—dqrkå‹ ´D¬7Ìë^[…ìÙ—gyôú¢ÏÙ;ãòÎ#‚º\]L™0ZX äquŽ„”–¤bú0@†5¬a ëíF=|_E–_ûµÇ¨Õþ!““1Q”råŠâÌ™SüÆoƒÆ¿^Õ­®¡Zº3´ÐéÉï µ²b¼.ߣTÈÒŠ3î}àC±î°ot„翹"N…ï ÒÐh[ž}µÅ�¼·H·oyîdô¶ˆ}óêö%÷cbt+ì/çÚ[«ˆ…×£; IDAT£ Öjú‘Ãî)WhVE�7áR,¹ø%Cìû$ýˆîñ­ŽÛãXôQl9y1¾íçí…–JIsífJ¥$hƒvEðëh e;-f÷´eï–¡�¥@±¼‘²oÎeï¬Ø—Š;Åɹ ÒÌn�“¯†£H ¬nX~÷|,Ó¨ýæ»oñ“ï/‘øÊ3ý×|�·%5]ÁÕ›)�ó¯;™~F ’ã%óGá:rcG±\_ÓÙýŠ (ô+Ï�D+’Žau1‘múöó‘XN^ˆχüãG±lè5"Ð.d­b|‘eÕh9+9zZ-iî4ÿnG?»}C¹¤éö,“£š±M­ìSÌQKgŠzÇ]Š1Ði$\y±wÿ3Ÿ^·(E?MÓ»Žùk¹¾œÐå2=î�¤–xWa°4È!Öj~õćøÅÙïƒÑQT¯Ëĉ|ñþ�1YkÐjéÌBYr4ò,ŽnŸ� ×DÝa²îpúJD+Fªbrør¬ø¾&æ4kKè9âì–#n·+Ï$Ř­œ¡sÝùyS,l!xi–¹Òêöκ¢¥s5W±{ZÂ_'G )à‡~jõ‡ö£¾÷ Q"æ&Ž3@†5¬a ëíûÙK\¸ð›ôûŠ- ž¹eðØêZK2>ü½ZY%ŸA˜U± pq6lEsöëQ“ú¡¥ß—­yµ¬¹oÞ#µòç­7 7VÊEÉD!ûÌÕ’ff‘då²Þ9Ø Ì*Mp¨ˆò§@Ý$:Ó£×7ž¸Œ}祥åx:Ž"ðDgñ©ˆ™ çm ¡Ëm=“Ä26âRÆ ¾ÎÐ$ÙÚêÈbŒ&N å¢bö GíHeÒ+}6—"ÂNJØïÓ‹„š´ÑL¹´°3­ûnŸÛZØ7ë²ÖLñ=±â�¨;ŒO9ø¾ü~?´l¶ ËÂiÏ7è:ËAé…bO¼»¬¨•5� ¬ùÐáe”¼‘šƒÚí¢bK÷Jœ¥¼[Çrc9¡;ž+aoLŽi¾ôÝûæÜ·íøßZ‹« »&��SX!ssÊsŒJ‘E‘ZY³Þ4<ö€‹ªièYºmC£!ô¼(f€t4Ú†óWc,†v"z§¨Í{\YLð<¡çhOqq!Þ²äöU¦£‘|‰…å”#{½×\_g¯DÌMzL�iæ&=jƒDû­ëL–Œnå«Ì"ZqùF2ÐoD l.&\¾’XYöÈs·×·|ý¹>{ç\Þ»_†™[Õí¬Eñ‹Ïˆ±û=P¯C·KýøË|ë‘O2Soòé¯öDw“}®(Î-z-k›éÝ™ïñyátH’ZÒ,‡§àý�'ðÒ)œåOD¬¶ž=·fÊ€ &#U½ ˜ŠÕoµt÷äô‰º¿’ü÷ë="ÛA¡9Æ÷Ññ5µ±üJsz¢î i"K•àݧ>{Âöcq)ISËZà h(úu¶©ÛÉu`nÊe¬¦¨Kj„ç\ÉlpeÓ%áh"°Íšx|×P.¯ì9ŠWø+øõ?âÆéëëýâc“Éé¯0�?rî±Q¯'4;’þÅïvÑÙgT8®Ð‘®ßL˜u¸—¾¬ZŠ�4S® ãu‡w?°ÑJq•é[õiW]‹ÝK{F�}ñõ6n”yìk‡•gÿ Ï'L`m3¥ÑËËkKÉ='wï›s™™[ÜBf#kŒ¸�T Õ’âÌ•˜ùiÜ�ðÇ>È7쎢X°÷pJcŠ!&QtÛŠÖ…MÚ7ÏÒ‹ÄNte#Åɬ7{¡Éœ�„{ï¹’3±Ñ’æç­6À«›)“£�/ÂêÃ{=Ú=³¥õɨ6£ÇÆI=V.uH+âeOñû¿ßæO¤´ºÒì´»f�ÅpuI(x÷’Öí{Šf[,j>06âP ²-t–û0Þ³ŒTRVÖSFªm`"w°ÚAE=‡—eºø3.~Iãv =_ÑYKé=ß϶Úf °ÖpòbD Z˜»Q• ŠvWîÙ±Ú[·|ÊQ�Í–h j;Y�‘ªP =W�²RQS;¨x)²¢Cò2­�QŠvÏÐ^M#A#Ú=§Fî�ÔÜÛù(ø[ß{£™05æpÿ~Ÿ±�ò&:NDwQ¯J&‘10Z“¦¸VÑš/S)©-'´\ïäd.UÙ¯çÞ8¶l´ÄEÌs¡Ñ¶xžAkÍïþa›±ÉÑSðq*ϼ§�÷yâáÂSÒ•Jø�“?Í¿˜ÔjÐíÂs/ð•‡>ÆÔH‹hƒr:­ëB%âbe18¾ó\>v, Õ1ÌÏÈÂbnÂ%½ð šqJ)ÒT,u%],o-½ aŠ3zë $§ç”/…üŒ0²tó!“×.®>ôd™é1±’^½ÞŹÑ%ÉLĵmè‚5¬a kXouøäã~aŽ#G~ˆ±±ŸÄq`sΞ…çŸÿ¾ð…¯Óë™mÃÇíP�ø–áÀ†±4ÆXbÅoÿΆßj›©NWüþ'G5ô±ûåçÂ�@5ÿ°Žâ »Råßéq‡©1á±û^Þ«,X‚0²×ÕÓGUýlüèœø–º-Â0�\l>÷ö·W—„K�#�vÄä¨P‚ðD‹a‘Fhy=å¶o»[j tw¡ÙµÌO»Ûøø r-OèbÖZ¬B¿cìS°¾'Md›»Ñ4üØûDlÿ¥gR\§·…¢¼Iö­›ø0¶Øå25šÙ²zdÁ^ò’Þ¢ƒÁÇ}ÑÞd‚_¿¬ñKEFj ÷HÓ]˜Îzç–YéX¢(¥’¥v[N_ŠÈÌfK¸Þ7× “u= A¹®lÂ…ö"Átoæû@ærUVÌN8œ÷¨–v†çE±PnM�† fý�þßåb’Ø¢1ðý�„®£áÂBB»k8}9~͆ù^ ’”†ù�½3ÎyG°Œ“HæƒçÊ]¸wN®ŸÜ=.wyòKŠ ,ו™u±Cx5fåjL˜å¡´º†8–܃…eAjÖ›Šù)qÄZÙLð=¹^¥1ÔŒ”áÂõ˜±cÁ=?¤’TL®.%š÷8vÀËtW2<¹.ÜXÙr.ÓJ‡§/سï8T¼¯¿Ô¢Ó“͸R°´œpÜ:Y·o9y1zÛÎýí¥3‚¼ÍNHÐh­¢)új›U¬¥ "é¹B·;¶ß“ë+È]w é2ûë mG¿ghµ-al²<j£Î_�q]¡ …‘<×Úƒ«5Z˵á8PI_~¦‡ç*žx8 TÜyŸ¤Öç_œø)þÉÔã02�G�¿È'ßùï˜Ë¦ú‘¥’iζ4"þ_k¤ÌŒ{w¼ÏÊEÍž™láÃÊ5ƒB‘˜<‘ÿ‡mLjµÉ¶¹Ql9}9ÂÍPcÞž‹ÉËh-K/eüÌÈAÒTÓ¯ÉVôá#>…ty·°N²`Øl%ÄÏmÐÝ\•Æ)¶\¸&TŸ8É n9Öùð45ªéö-Å‚3– ‚`Øí²Ù–´¹É»·ë ½×ÊŠJY(a;Ãó*ã�¢ËÆ·Ú$©&I-ÏŸŽ8ñûWÇ7Û²÷S>÷­.ï~¨@¯oyæ•ðŽ×ʽ–5’„½3÷!K·ÂÃw‹Å!ŽåØÝçá{ŠjEãîóp=½ÓŒ-«« ýK1ýH†�(¶œ½“$–ÕÛ\ëÝžåôùýnÏR ,n6z.ÜXI­Š>¨ZùħÙ5áÊVÉÂéK±hÎ¼Ü W’Á{‘¸_Ý·Ç»«¡F' S#vê Ïæ0¶´»’„¾´šrxŸG·gYÙHØ=í þ^>ñƒ�d�ȨŒwËÿÐL�:Yf’Ð)Û=C³c¨–o¿¨hwÅ=-I ~æÜ%º<—n¬&ÃdXÃÖ°ÞÄà±3Íü/ÿå€'Ÿü¿˜�=‚ë67-gϦ|õ«ÇùÊWò4s÷.¨Ç­è‡a§¬ÛY¸�_Zsu¥¤ Jñí—BÆjZ´´# F/z­ïûë ùÿíö-•â6{ÖÚÖÖÚsÅ[~d®LjbÖ®DD±É¶Œ 룖ɛ_±‡kѱ `m˜PXÛLåeØñ¹ºÔß!@}½æÅX8¼ÇcrL¿´:A/”¦øÚRʹ«1Çf.6âþÅC÷ùN{n ø)ÅÑní=TG–¡Þ!ê>I–Î+ŸeeÝÒî õ"NDPÎRËGéÏ|­ËÞWz[š®~d3W$Ñu²,ß“Ín±Ú!é•iv¤) |ùu=6Báè4Éæ"í“çèô„«ž ¯;=Ë…ë¯5¸Ûg.4›­dà¸3Z•�,ŠÁö~q%ͶÛceàÔJ®‹©Q‡æ[õm”0WQ,*¼™€‚ÄaûJ�0– 6kç®F²‰ähV7R>óÕôßÞÁÊh¶YÈP»œ–Sðekn „±ü»ÅÄR*j UÍüŸ¤î7Rºg#ÚmC˜…Ì­lHjz³c¹º˜ì8îwÓ?ø®4µÝž¸9Ùæú]™¦Dg§ÍŽ$²¾erÔèTPP.J.Ïü´Ëþ]îÀuk@A$Ø ZãW‘Š aÛÄÏÓ|ü³<ë{yBº¦V¶,­&4î�«mÃÞ—zMS)Š{Ò �ÃE6ü‰ ¹b,ìø˜3:4 ú]Cs]Ž$‘a#Oµ_ZMYo˜»ž•ýO1ËúØhÜÌ-*ЊN×Ð %õµßS\ZˆÙh>øƒU¾ÔûY~qúq¨V¡Ýfü¹gyêñÿÀÜ„·¥¯Pbe®” QŽ£ˆ“-ýÇ¡ù»J Ò(Ç6Z”íX³mX\K÷¢S×u¸¹žðÀÑÆ|í¹>í®!I%Ûeפ{g ˆE4:®ĉ :w>@ù&Fåü( +ë)I*ïšÕÍ”‹×‡Ȱ†5¬a½yÔcnNówÿî8pà'(—Lj"Õ+ðÝïJšùsÏmO3·Û�ôƒGºm@ €ýÆóas~ÖÿV¹è¼Ç˜­”b”МLlø–ÕÐ�•Z•à>�r~ôÓÄ—¯ró|“°× ßýÈÀªõå3Q w»¾"I…Ž%ˆ4Úõ{äâçÂeI=·ëÙݾauÓpáZ<8_®«(k¡\]\Hxÿcn&@‡^U³Ù2LÔ5ÝL'w»Ÿwx�¤›»ZÑKä3æÃÜ�jÿœÇ¡Ý’�ÔîY4ð♈+‹ /Ÿ yÏC…á2¬a kXoõØJ3ÿ[kš‡þ##?�ë&llÀéÓ./¾øŸùÌíÒÌÓ; Û)W)[É烰K6ýåßmþ»_ýûãjnÒSß{EB£ŠAî¯Ñ¾÷�¶gýÈR+k’Ä2;élÛ6fˆ�£|Ce$ÅÛó/íIÚ%Mg¯Ä|ïZseÛ=˯}¬ÅžÍ;î èö-_¾OÔ[Ës3ã’£P*hAt”4ð¾«QÊ`Œ¦;á²gÖ¥\€Rq�ÂÞݸſ@¡rÔ&�µûi]ý2Ýk¿C·ï%’g§ÐjV³—gÞ´Ÿ¾xØÆÊP�$Ð -¾«¸º³oÎ{Ýœ‘8—°ñºƒµ–ÉÑ×gɱLÕ-‹ëvà Óm+>û«?ÉòâÝÐ2R‘´ïÉQ—«K·´šÞ³àýv×Ãá½ScB¡*"ºµY“x:³e;ܽsîÀÚ×w¡<¢ñæËž‹ãGô[�N—ð»ë´»Y0[l¹º”�¦°¼žÒ wrÆ}_Ü|oKˆ]#‡+7bŽî÷ßt¶ËZ#e¢ž‰ßKŠÑš Å‚è]O46ß„{Н}qceb×üÌ3ßZenÒ¥Ý5ÌL¸¤‘啳ZIs»];ñVËuõŠf~F†£z% t·1Ã‚Ü—Ž–€ÑcýmCw.‚D+up ?²ô›†�ó½PÜŽ¢ØreQÎÇêf ¨A`ÞòzÊĨäi¥båJY%2œ»ŽºçªE¨•ù½xŠ}» ÔÆu+ë‰ »Ùr¥P„â#?ÈæÊç_ù´º†}sŽ’æeC†Œ«‹‚ä5;†µ†y[žE z‹k7#¬…jEqpÞcb$£‡e6Šˆÿoý¯óÅýÙðÑjñ;ÉwùÉ=ÁØÂÿ £'j%Ïš0@ÞˆËF© ׳ç)î±3'CV7 —dø#ÉŒÉy_hŽŸ‹yòñ¢ ¬±ÅqÀ—+K wúábQž=2ÚÖ¹«1‡ö¸w¼?™>ä3h÷$‹èñV7Óá2¬a kX¯‹z8Žæ‡Øã˜cnîÃÔj.a˜pù²âÅ<õÔ­iæ·ÓzÜ:x¤Û³m¹Ý[@훓|‚zU3;.ô$‹@âs“âô…ï´ùþGËx™Ç½“a6Óã#åªJúw«½n×B»›òí—û|eIÉ^fðÍBêUG•·ø²Ï·Õ3å’¦ˆÓ“ç $NÉ8Ïš°ÕRÊþ£ÓI£�±ÿ˜èÕßçz£OÆôÃó™[sòbHœØú�[?¯Ê(bQ&+¯k&G5QâÒlN_ŠÙ·Ë•ítöß§™^ÃÑrÊç&]j•­�#wJòÝŒS*SÕ8óL<Îå�>OTPx©â3Ÿë õ8ž��ÅÕ” =Ã÷=¬‰b ÖÓúí¹È�úŽhPå¢lŸ�Á¢PÚ`¬&J,å‚bj—O±àS™³˜J CLz¶ÅÊz*bÖ¨M«#¢Þ‹×c6[f€¸Ýé¸'‰¥+4›T¬=ÇG4Iª8s9fÿ.w Ò¾ÝuÒx ŠÙq‡»sñ» ¾+HM�‰÷ƒ’Ã�ûßþV—4‘ÆèúBÂÉãñŒóÊEÒNœ�Y^OyÇaù\k™Yð¶��£\ÒLdy•òÖf=§Õä×[j¥‰œs(øà¿¤¨4Ô56�þÍ„õe3@z¡lí£Dl¢-·ê˜,ñUà¾=—’,�PáåèªŠÚ §#;`Œ (¯ûý2½@7´ìžvÙ=íR-ß’¢žQžÂfÔÆÊ÷í÷áS¿ú7×4iÆ¢ zà€�ëÀןïcíݯ±·R…@ñà!ŸK7öL{ƒÜ”rFsCüÆâ_ã×v?2>þ‡KÏrýÒoÁO×nûgvz–J)3 ê$Ô¸ÕêîKš­¿ÄíÊb�Ø+�Õ>p%ȪFèlž›YmgCy±�g�±š°Õ¢¹-�7G‚EÏ!´ÀvÏrpÞÃÞaúPŠ—Æn_–fy0âvúa kX÷C=$ÍÜò³?û÷©×ß…ë¦lllO3¿š?«oõ�”«˜×º\ÝŠzÜŠ~ìx ü£ÿ©þg\G©W/ÆopŸKRÙNuBËÂrÆÑùW¾Ö§Ç�ü^®ˆòÜ’vÏ0=æ ’Ý÷O»¼x1–ÁS%ß8ùâ¶V(jÆF¶’áá»VL"Êšå�„Ñ¡?Óáj¾•säÜJR¹·ö©¼·n¾Iù¿éº¡¼Æ‰Qg€ìÕ^íÕ^ÝÔðߘfþ¿ñõúÿÄðpJg\¾¬8}ú¿ò+ß^€”|¸ÌK)W»�Çn½Ç­@Ç͹" P‡÷y3—®'�÷ª:q±ySé{Vlr-ŒÖ5wñlxÅŠƒ7v�Æõd}ß{�1þcâøÁÆoU·Oÿ+a@˜Øá —6HS˥Ŕ^( ÞKÂÏ ƒP1�ë#ÑsÿaÝŒ`{ãûøìþЉÒ:#ui˜­øã?9ÉC>í®Ë¥ëo<5º %ilèF=DšYz‘"ðw2*Þ}_aÐP»„úÁX€_ž¥<Ú†B‘(œ"í>GçÌ´»r¬šÉeIRlj¥T°D‘Xâö…Þ墦Õ1¯€„‘ÍEÖ¢›™›ô¸¯P.*:=Ñ h-f¾ µköú·½õìju»e$êÔÅ'z¤Yo º^ÝÌXÛzeQïkÙ| U5ã#’|^¯ô�/ƒ@¼zYQ)Î_JÉ̸ˉC’[QÜ%~ïk‚a¿æQ*²²G’âóÛÛ=¢DìWmÃfËàz ¥ ÝžÅÕ"xvvìFûÕé_óÖɈ‘B¥$ÇtrÔá=÷HS«®#¿ßó#³Åê°Ú¼ºfMËÈ×sƒˆÞõ„p/«Ó_ IDATqG Ü E“²Þ0,­g¯û:P ïóxþ‚˜L´:o9Qd´®)5~n¥‘¤;Y§.Æì›j^ µóðœ;Ø´ö7P¾+ï-ðAAáš‚†Ìƒ,´loz±!Iäý|PJèŒal„æ)´ÃÀ$£Ó³Ô*ð�ÒÆ‡±\�“#B¹*;Ö¾žëò›Ëÿ€ÿk2ÛM>Õxœ¿=üÛlµ|*%ÉÖèßÔw»ŠÔ«²ýq]Ù4õ"Ùº6;†có¯6ÓéçqôÍ9’ÄÒh™AcP«hÞqO�sW“œöåÜ1ëÀÛ ðÀþW¾F”Ès£o5ÜOrß]ZˆJiEšÊÐa»e0Ö¢_á\òs«ß^î>¶| ÞË^ß±W{µW{àcð÷ŽÐüÇ<àÁ?Íìì0Z‹Öãܹ„?ÿóK\¼ø›ùsŽiëq+‡«ô¦­‡yàqóæÅÜ�½?º¶’>xÇaŸZeÿXïX¶* Í4Ql±ÊabÔˆ�•�¤ô}ñêÊâæÜÌù©p©[½þ˜%jÿôz"Z<{EÑ<Óãæ¦eÀ%Ë,­Ž8µøžp£gÆ�Acuó$l tÏ© ³“.û¦T.t×äÖ›ú ÏsíÐp@åDª¾Ñ!É,n�?²þ—¿C’Á‹Ë†•ÍŒ÷½µ0°’}þ|üºß›+Í`~Úel(w§ Ô€Š�f×µ( Y¦ÉŒËÜ„‹ç+|ߣ:âᮢÔ!çé�ÛbåTHÜY§Û»B”§_?{F^k’Ó~úu}5C‘Ñî‰W_÷âj…^¸–07é¾&÷°>ýdc;c>׈լ¾! ÍwÁñçr틱Bçøìon¨+—¢1Šf;czÜáè¼Àמ’óäõŠz_€TKš}“.cuy�;™3òYÉÿ =ëÄAŸzE¦ç®§ šjMã PJÃjDs%eûzFÔ�Äp ñøÉ<­>N„æÓh ›Û™dFøGçéמ¢^Ö¬mf¯ €ìÁ·º†éQ‡¹É<¡»°s<Ö¶²¸Wäh²¦~é߯�ÓÝ»Z-ûî-ä6¯Š/=Ñãî£'ÏŤ© âľiÇc~Òe³ixð®â`;¹ûzÈ2K˜[-{®OšIšyß}k MÉ}_î~YƒµDK§chÄvpcqo:s%k¤™Ê³lúšýË8±<>æî£þÞÄšüXaeã63î21¢©•ÊEŸvÏ /Zk~ñúOðëÓwA±Í&¿ÜzŒ�Lý)ݰ€£eKûøs÷õ©”ôà>º°"T>ßë_Š[—ˆº3ì«À)GÃØ�#™%V¨MQbYÙí›í¶Ïy¼x1f»m(}‰ùê%’®ç´Ô,ëeȽîæÚ7é2qúÖÍiÆÀùVçСYoæ³Ì&òþ\w€ìÕ^íÕ^½ø€OúÌÏ¿‹RiŒ(‚ÅEÅc�E<ûì/ñÌ3ìXëZ^šhžqkg+{‹m‹ºÅŸþ×�ÿùýØü´x®öÊe ¹5n�‹Cu©Ac¥N–O¦ÝÁð둳ä‡ûö¥>ã›m¦Ï<§l”Ú`a9%IeÕßwÑzµêSZƇe•ß·íö\Öç$©»(z¡¥VQ„±ezLÜbª7$w+|7¥Rìâ˜U/|Ó^xÛ�×VÂæÖíå§ ÝPüã[Ãõ5á¤÷]©\>ýûÛüè+oÚ `‘F`¨¢Ö¬…@štP$9ý?M%Ȱ^w˜}ëñ*/@äÒnÕÏž¦³¼H7RÄ©åÊbJj`³‘±Ý±¯*еHS•¤vÐ UÊšzU1;î°ÑÜi€*7ŸE±•°µ|û5Rw¸¯äç´‹Ü¥*¾W‡œÙ*�_Á)m³ººMœ ãòfÊ•‹1®«Ü Ùz¼p!a£‘1:äÞP߬ÚjŽÌ¹Ô+Šr.F¾€Èga2ÅpÕarÔa¸ªðg<¼jß‹IBMºßì ½-§‰l63¶šZ;½[ƒ$µ$Àñ Ë)Å`Çj»mð<ç·»b{ººsü@c_z±ì¤Ž�I®ÈpÕa(OO/î dì§§Å�ã>�=Úäq$)üõï/ÚB7½»6N,ò7Ê%ʼnC>ÝÐòðÓᛪuØ]Ûf<Ɔê‡j>ð�lÉrèo\­‘ódnR2"ü|KSª�Í5[HBÃörJ˜‹á“D4 ÝPȵ•…ýÒøcÉKq!NNQ¬”ÃIže“»7õ“ß_ëFj­‘1>ä�ËhÝa¸®¹ë¨#˜rP�º˜€�øí;>¶›üNö(Ü÷û´Ã@#€E[Ÿx!â­'ê=¸û— ù5é(LÞôG±äcøÞ«o© ¾üÛÌXR½ÈJ¦½õ÷ßyÄçÞc„¬…¥…ÎÀY°£ØÐé®.§Ä‰ejlG\Þ.´v‡Žº²™21âÞ´ßÙ©RAç¡…¹…zOh±îMˆc€ìÕ^íÕw;øØùïŸÿùú>††~­Éµð䓟ã¯þêQâ¸/4ï÷�Ù-@HtÜ¼ÑØÝoÞ @ô?þáʾýÓ®J3õÃÓãî½ãÚjI{ÉY°›ÛZí4ãz®LVú4ÉÆ?¡ÝÓ}ÆÂ…%ªÖ›;»¶b£–S»±� ºðÚ…´ýÆxfÜ¥VVƒ<€¾ÛSŸÛ}úr»î)ˆ¢ŸEàíXj�_8HuÂAÏÌc¢0ÉoØcÓÛ¾zÒFaRèt¯ŠÅiË’eY_\jwÙ {Š‘šóm57WªÞéYêUÅø°3hœ¼]áyC£.…ÙwÒ8÷U’Lá¹2Ù4iÊɯ|…É‘Œ(2ô"¡ðÄ)}*ð!âÞc¾$XiòV¶2FëšÉQ‡Ãû„‚T v2iúš” PøMµ QãÆ…ìZJKê¹''ÏÇ” Úö©Ž•²fu#ã‚— œ“¾SåhÅpM4Y¥ƒ¬”þ<ÍòÀL«I ½ïD@½¬pÊ›Z¦¥¹� ‚ÿ$7ÂÐ�,Ï�‹Tî¾FôKgرïƒAGƒöDÅyv‹µƒÎë«)g½[Ú7§™ˆç]—AÈæü´;-ú¹�w_ƒÖîžl{Î{¿ÖúüöÜ]P(Àv“_Øþß{àOéÅi*a‚IjI¢üñ_·ñ\ÅÊfÆÇÞ_&Ž-Å@~~jd›Ð ík¾'‹†Fî ý0ËV×P.ê—Ýjµ{⮕Eâô =dµ:–µ-Ãí}Ú]Ãæ¶¡T”ãܡՕ<š—½–\ÆýÏ£Ù•Ÿ÷’ïÝëAöj¯ö껼äÎý“?ù¿rûí·S©ˆ"Ëâ"<ýô"_üâç¹rå"àñR­Ç€¥ôãß_ù‘¡ªÉ­.ÕíýÒ.€q«MŸø[åïËíÁ�3ŽòuÏpݱՒ²Å@Ù¾óˆïŠ¥áÚVFfD†–ÏÿÖ*�æÇè„C¬lfL�iÞz{cÄŧÙ1;ÈJÝrqËáÕ .¥e?R—&Ñsĺ4M!ðDÔh‘)܉C>�Ï ‹ VwðŽíã_ÎN½÷ƒ•v¡h E´ø%zëŸ#Œ™á¾ûþÛÛgÑú9Z-ØÚ²\º”ññÌýà¾ûGù'·®¨” FkEœÀ‰Ã†{�¿y}5ýãGŸ _¸p-½ ¤ÿú“µæ&\ÝéÙŸ:8뙑º¶•’¶Å@QðUæ9J•j=œ¡{¬ŠG—jwoÍ\ýÖäSw ¾ÿâׯ÷Ÿ{¬'M›;‚ãH*ù‹æ§<šÝoÉè¾G)˜•‡¼è6dò&[ò)¨"N4CU‡™Û«l^3ëûßqh,S…ôÚ…dk¼s~üÄH÷Ä¥ÏåÎTíž!I4§¯„/›ÜÝÿ;Í,ÝPŒ[MƒÖ0:ä%v�÷p«f&Œe;ãhi&Žìóò‰®ЫD8žLTJGXyôBž{bI2ŧÿïUïw‰SM³“ñõg#>ü®"½È²¸–Ürbûº·‰eÿ´Çè�4I…åEˆ7È@q(øŠ}SÂË.îx‘B±N0ÓÆ„ãÄI‹ðü:ÍõŒ0Î�¯¶%<¬.^ibú™Ë ‡f=z‘pÅuލ•¿7· ãï}óÔ -¾/M^šZ&Gn«öÝ�ô@'à;Šk«é >p ÃÙgžæ¡?]"N„–vç�bA“¦ðð3áÀ…ç�˜ÜjÛ79æ°oÊa¤æP.I.t0yr\dóq쀤ÇïÎã<(T¼Q‡’T4‰�øZBëRB˜7æqbYoÈöììå­a}Kt;’Øn)ĉÊqœ šV/cy#cjôõƒÁNÏů¨YodÌO»ÌOù²EË)–«[ŽÞ1�|(Üs˜n{žÍ«M«mHÒ�0dzçc<—�¹Â‹’—d¥¼‘ãS.*.-f¬72n?à3;é0\u(󭬓‰®­VAöÕ¥”cû=Ís \®[ɇ:®»®ú94Z3pyŠ¡ò�ºdø;?÷ßA›[ü�Ë_ç}S¿G',€µÒî­,Ïë±Ô+½Èò•'C´†ãû}Î/$œ»šð®{ 4;Fî‰]ûŠà£_C¹þI)„G‰ØV{7i+n&F%©ÅÕ2PHS °o&púRÂü”;�­–Ásž;óÃß[ÆX¡Íuz†™ ‡ ×Äò÷V[7ßÚ‘SuÃIJ²‘R)ë—fŒýð¿ø±zwzÜ¡RÐ#•²¦TPiÿÁç{à>å ž–îŽt¶ô7³'þÙìê§Ôú…öpó¡ ’Öéû¯ž34; ‹”ÝÙn8z!<!bvâõÙ†îÍöBËô˜#Àc×&¦TÔ”ÊÛÛ)ÆXüTì[‹¾¥z°íµêòÉ%âΦvÍø¹3–(¶öä¹\ü›îXú¾�¤/ÔÖÔJšùic Œ �–áÚJÆÆ¶8Di%“Gߕ̓þ´³T‡­ O­¾_ehÄ¢�ÖPæ‡QÞ‘¼¸ÆüDƵ‹çX¾õbO®jgP*(¾úÍ�£óož-k_7à:¹@—8y7ÝMY¦‰ Ïu˜¿;@OÌ •…æÛ—›l,ôˆÛ-º9©Ý•Æ¢È^�ŽT í®ào™Š‹kÙ±ýI ÛÃÕ¥”;ù74»�ÀÒzÆ�Y—‰‘<×¢$9_çSQD¼hj5�{°@yÓãÌW×òÆ\Ò’—×»¸®ü’0±|þ‘ßÿž’LTÓ7GpýÒóͲ¿Oi+‰Ë–çÞ(ˆ×Ú ¦r�¶_PT‹ Æ…½˜Ðnd¬v,qWšÄ(ŠÞåÅd0 sMÍîÏò겤«¾ÊÏgÙ‚ô)ˆµ²fqMHŸböjÔ�¾9Aßü`|Xt)µŠæ¾B0 Xù¹—çB˜ö2åßÇ |áw.°¼¾A»Ñ#ÊEãÞ%º‡§NGƒàÄ›ßÓ›QÕ²æè>�nd˜�tÚÇ÷¯kä3îƒÆJAsì€7°5»ÊÍd“ª”èÕÂÈç[µ$Qb9½0Ä?çÇáþÛ|4üË…Gxõ¿Ðhû8Ú 2adh´-Kk•¢¢:&÷ Ѭ¸´:½ÈppÎG+¸¼˜Ò‹dó±¶•½,…j7€órûÝ~°_Y¤#Î+ºg U5‡æÄJ¸Ùúä ›ÍŒFßíN‹£VT ŠÉÅ•¥„;û8=q<éÛ0ëÁ‚ç·÷-–m.lCKµ¬oy½î�½Ú«½únß„(>ó™6ÿ¸Ãñã§NÁsÏÁÐ�Ãø¸¥VƒR ŠE#–.å>8êOÚc�e<šüÀ8i·yGkƒf6;Ö-ôt³°ÐYæ#ûþßó(>¥Ù �òó~�pòÄô[–Ÿz×E³øÕcõæ¥ï»øÅOš0%Nl1Š…^ÒlgtBY�§©ÅñU>¡”  ›Oƾ]ÐÑêÆêâÙ>Tuª ÷?ðE®�¾C1n©HPJÉzš^˜Ñ;ÝeõZB'4xž¦Zž?Ÿ0\Ó¹=hN?ªj¾ðõ.·ð¿#7�•�ŒZ%ÏÍéÛÇöEÈÒÜÕÍX(&b�¼Õ2œx{‘ èu-ÍË �ç"¢”�Mq³#›‚«K¯ÝôA!$ CÑ—†p;ŸÈO ;ðÑ‹d²ì{*wÛùáÝÐF–±a›Éq«Wó€Ì‚¢àíÒ;åT»RYãÖ5~ ãÓ_{´K1§ 5V3ž{>¤´äzwåœýâ×{™“ Hó�¼I+¸¼”rÏ1�Ô7Œ‹XÙR¹©ÍCåüò=ÅèP¾hTîø–¤2ù—™îǹUYz¡áÔâ$?Sý1¸óD¾ùØäY|˜Oø#êµÛmÑN\_Í$Ç£+Ô¯3WNòÉ2�®«(ipµC£eXYO¹ãp@šYʉ\+ XXΨ•õˉ±ü}¸^ž’ õpzÔ¹¥}w˜qåü°ýàC;ÐuÔ+k›bP-õƒ EoÓxÅ@ã:☦œù­Ó3cî ¯×Ñ&빊ÌÊïhõ,›y¸èÙ«½Ú«=ÐñÒr0æ0æg™ž¶|íkM~áþû÷ ϳ‹?Â;Þá13c�‘î/¸cO*H ð|(— Z�É ã�YÛ�«…$á?Ä?�êuÑ[-œSüÒü™Ó…U»t-VQïácñÙ*MMšUét#šËVËÒl[¶Z÷ßæspÆå…‹±¬Õ™ŽzŽ4¯æTF–bA±Ý’ÂİC­âÝ��¸J´5½¬IÂ.™‘‰àoÿÉ:Ýhƒn/e«iøÓ/uø{ª�ht,=¾¾Tâ[$dßvÀgbX¨0}'¬¾pÒÏiIêðÖ;ix]ð=‹_qñ‹‡¨N(ô´�‰ß‹�þ€îé/³ú\H]‘ÄîÄÒêxœ¾Ü»a’™”ŵŒzUãç[¡¾¾^q^WÖ@£% ѾI—Csn©)øB]‰c;øÙާ6¦~ë¿.<3U×÷ ”í[�j­¸ö|—5OыŊTå“îoûs¿iR>RÓšsr¨ûtùÜû¦/àòRÂñýÄñ›\Î<ðK¿äQ¯+Ô\€1ÌÆ6í -ÖºB‹cK»gh4 [MÑ`Eì]M%#Aš](е-ÙÞ øë††B éòif™wÙ?í’rq°L€=jEõØ¢k«¬­täšsEÿpùzÂÁ#¢5®…Zš­Œ(fмljÜÓ¢XòZ9·ºaÆÃçöóïnû{pìø>llð÷Ï<Êû¦ÿÇ-H>Ȩ‹çŠùÁ7ž YÝȈ˜v%…Þ“7?�_á8šõ†¡\Rd)Äh¥s:<ñ|È}ǃ[‚±!`fò>¶ÛFÀñ«|øýãžšàF–ù<س^Õœº“$–ZÅ¡Tèg)fU¨×2š­ŒÌ¨�îglè[µ³E‹s Þî˜[Vî�½Ú«½Ú«þ­óäÉŒ™¡_ÝqG‰,ÛÏŋ˻¾çwyüñ 0ÿú“|è-'êã…Ú1[ŽÇ JÜ ÈÛ>?‡æad*U$A ±b‘S•ÊÎXÚZ¾7{·Û½œhóýÉ6µ¨C×nÓl®Ñ{î)þîñ“ÜsÔc|HèD^žZ\Î=æ‡k#Cš«K)×VRæ&Ý—4]Ãõ²<8¥1áÆIµ§¨�)ôþƒöÜó÷^¾óÁçn|ù:í&žáúª‘�ˆÞq¥ÒJñÅG;Ü~(x‰³Íë-k…r1\Í'�E5&cGa4CUÙ&¼ëþî± ýOqÊ¿Ž¹6Äö–!^xšîæ3D±K”Z®,¥tº†�í� ÇÍÞùªi¢ÄR´J¦Ø‰„NŽ:\_M94罪bsÛ0>¢Ù'wõ„Ò6 Þ©Ü­ ŽN¹<öõ©ÉÅ¡|á·.Ù8´÷ž¿díÓÃʦáíw eæä¹ø†×ÿfäf™eßÔ}ªo¿)Û(ð}›g€±.Gç=àHdÃÑéYš¹®ß~—l$Ƈž¹4Ãpÿ.ÙÑ£rßÞÜäwÓ¯ÑÍþˆBPpê OR٠ƱPÛJM'”MÈPÕ¡\€B@ž‰¡ô¦R H%”>c('šzÅppÖ}ÙkyjÌ‘{ß ÿCù«�nsÎ 7§×w4'_qü€G«cYo¤ W²¢�Ü÷ýïÆž{šV{ …èÂúá„7Ÿ³û§äžà8Š4”­Ýz#C½Ì¹±@öj¯öê»­ì-· ŸúÔó¼ç= Í1;ëò#?Râ3Ÿ¹Ùf×ÙèðÈìPÍ·#‹TKËÅø~ÏvþíȦ9¹:º²Òê¤|ñ!Ÿ‹þ{iÕf8>?Ìš®ðkIêuÙœ�ü) R†‰qþ¢ß #›“ÿ�…!t»°Ý„çVù·¨;!iÚÆ†[TÒ³Œ]c´ +–/>œò‘÷�P.*FëÎ@`*Atà;¥²§¼ÑšMÂû;£ÇÏÏŸ_[Ú÷sû³æ/¨‰øÜ¡‹ŸÃªTp­5ad�ŸRÒø¼p1áðü£Æô-%%%:cfÜ£PØ Î+øŠrÝQI7³Û-ò@DE!€Ø¿÷ȲæWØ>ÿ¯èt¢ô[M™NF1œ¹Ò½ ç+<¹ ¾¢Ñ2®L™‹�è1Ú]Ãòzƹ« o½#Àu„ªV.‰K ¦FNòâýÀ*’çA±¨ð&ʃ1‚‰ÆL‘d-zÑEоÅw„´Ù4¾²Ž#ŸA1P\ºž0œ‹Ußl D[FjÒ”— 9íBt©dýÓjáÇÇ–Ò¨Ãèd™rTEÇ>Ùæ6Ûˆ²_« IDAT§Öèä[��Ø:4œ½š¾¬é@¿åWZ>û^d)rì,BçÓJÎå•�ŒJi'ŒðV`¤Õ1’Eà °šu9¶ßÛÁû;ù6¾ ¥²ƒ;æÐðÉzJ–ÒLó…¯v¹ºôeGò`Ú]ÃÏE|Ï[ D‰X ¾–óéuBÇö{ÍF¹(S§ß„nÈL)*�àQ((¼Š€/PÄÌVÆæ…8ožå|Þjf„±åÔ¥d áè¿—‹×d“## G¦ñ:¿þ‡ªšó gÄýèÖÉ·^zö5PÝÈR.(º¡elH3R×ÔʾloúnU®d`dÙ�?à ªê×ÿßÓgFÊî±+§#ÞrÂðª`mKr`z¡lÛšËø�ÎÅÖðÑ÷›*¥,/\›ç{V?·•‹u}“_ë~��ÝñgüÅ¢›»ü�«Ij÷c\—�ïFb <>ìPÍ…‚&p-Ž£p\ÍäáºZ¿¼m%HVáåN6B¾… ½ZÊó8èo$åºz5Úm­¢ñòMy’É5¹±ýÒIQ© )åXOŒh&G]Þyw@ôüCt6mXhú“81XµcŽÍ×.÷¾^(C†áúÞd¯öj¯öê•@‰å«_�ùÄ'`tjµ§w�þ߯ZÛO�îÿIÛFyI·ÒŠ™ñÈŒË'2æ7¿ÌÊFÆ�]ŸFÛp|«ÆF·Êb³À7—¼ì™Ê„åÄ ˜˜€¡!(•4Å¢Z—'¥T‚±1y¥wZ~®N’Â�»£.“Q‡¨Õ¢[Ú$4ç¹ûŽg \Kà¦xNB©¸žž ´Þ÷^õWöâ³ëÝúîη.+Ïlª í¿rõKlm/מ¬l=¦Ó½QÈì8;.2¯gËÑ™±LŽÈDºZÖ” a$ ÕZƒ£ PÒœM͹'†·žØR(+âNGÑÛ:É¥¯�&Š-½Èã¹ó! ÓÎo7÷¤_+bw:=æP)ª]UK7g°ZEsúrÂÛî˜õMb©¯!pûšBP¤6oPcs F z�öÙ›×;DíMÂÈ2\Õù†Ióµo…øyC¢Unê+^¸˜òÎ{œ7œ±›tm%eÿ´Çø�sÃ6ÀËíH‹E‡V+ÅH\;Ð×tŒe*ŒY]7Ä�”(×Ä)\¼žÐhÞ$¶~�¯ytÈáÒõ„RA'†©1—}“�än àg»mXÝÈXÛÊ8qȈ±Û]K½¢Ù?ãæ´—¡ rG®iÆt/!¼š0êÀÕØyŠ8!P8ÈT=ð#u‡ÇNFÛï}çnF¹ð{îl5ú�€¢W²#t²•�Œ·ÞPqP#ªeè52mCšAVFL¼xA ¢Øè{·êe•’÷�eäV¸Zi-ƒˆ«Ë cC�P\Öšm; ´Ýj+Ò¿öÏ/$L�»Œk¦Æœ|S˜�úz—SÕN®Í¾)—¯ŸŒ¤Îäý|õs‹6Y5ÇÖtL!P|óŘv×ð¶;âÄr1ÏYù�÷–È2y/r?°7llŸ[8È­ýÜv<µ±Á¯÷¾Æ'nû+ž9kóA9‡²<¿#ŽEßp³+ÙÌ¸Ëø°Ã©K Q¬¨W,YQSp-ÿ©ýé•^oyØSsÝÐÞàüç{ê–[d�S@=Oåa•ro^oƆ^Ù=ËËͲü‘Ñ‹,—¯'˜ñ^­½È=Ç}ÊÅvÇнjY Q܆4l6-Ij˜�p÷WJ‰Ó–P½ #Cúe7–{d¯öj¯ö äIðÌ3ŸâÃþ-jµ„{î)�ÏIs’]¼žªÛøƒ$Y­am5E­¶‚(1ü8…(†Í¦á�ÿ¦Å¡¹€�í5ZíÒÄ2ÕLWŽ>.žûc.ìÚÊL½å‡ÿöÌ�¾}ôˆ_­³œ”ùT{&Æ ZƒRŠ9­+''õØÎÄxÏÃ;#'t»°±Íïî_gcËkh…ï¡SŽÓÉî¹ðç_·a¸QìÆížÇvÛ°¹�ñÞ·¸°�HC‘)Œ•åÑòF*ál±Í-b_Þžµ?é4Vh #5�£#u}CÓÑÏOðËjè$u¬1‚øN_ˆY ÍѯþÑ5Û-ž'¹ û&=6š†/<ÚCéo_x}«Šq›ŸrªÊ£Ï»O3™Ì{žÐÏ’î½- �.ºŽ"ð,å!…73FL⌬�¬¡�'}ú­ÆiÂXKbúRJ– =h»c¨–[-ÍfÓ06¤±¾ô³ ®-'îö·[&§x¾lTƆî<"Âñ¾«ŽÎ�¿ õ}Uu>)^¬¸ë‡.�ïÙ™q­ü�þf «[’Ñ�¤–+KÙÀºõ�Ôì„PQÏùÔwk…»?\5Ôʲ¡qª� ˆí‹“û¤�Ⱥ®qg .¨ÌÒMíµ˜îé&½H¦Ã�–Ð ÝܭѲŒåtG•OÍKEÅÆ¶pè Á›·ö°®,ÅÌOù€åÈ>—B ñó©{ŸFU«‹àºµ ÆØÁ&Èuî�¦ÓÌè,JÓ�fò:VR2‹«Qb_×urÛ�ë«’cây–ÍŽ¡hÞ~W@© Çœ[MÃ¥ë û&w ¶š†ášl®ªÍ÷ÍwDñ€¸c�[ AIáiáÆÆÒ늣Xä\W“¤–¯<R¯¨Á6(ð‰¯øò“=î:âóà]“#Î@cdoº3)eùÖå#¼oõ£pì°ð¥ÖÖù�ÉCüÐí�±Ø<Á<I*Û^d¹¾’2;þRê”ç*î:â³²™Ñ Üá15êR\Üp+E½o;´Öd²Í0¹cTœHvʇýî§Bw”-�X‹yH’šüñtëûn± º5Ïð‘f̾<…Ô"Ã&rù¢ãÈ7¦©˜]´:Bau´exXhqË��³W\Gô�ŒNÏ�f/OÏÛ {µW{õݾù� ‡µ†‡NùéŸþÏŒŒ|”ùyÃþ�?þ;»H Øo<ÛýÕNÿG¥¤3'·æt5˜Ü¾ÉéÛ3ì›tØ7éðâ%‡GŸnó®{+¤£2IšwgÍùÓw¬¥÷ž¿}i«iÕÇ?P>4?ý�™ò¦ÆiÀÛ†~eâU�{�˜Àã?~¶Jgö­“Ó¸õ!.Rá³nU6%…‚€“‚å"Œ�Âþ}üýÔBÙÔ S(¾�Ú¾ÈNE=LÒÁtDËËü›‘“|ä›EhºÔ‚5.\™W¬o)®¯¦ÌOyš“x_,MÛÓ§"ŽðM€ÍÅ£¾§ØØ6L�:yƒ¨$ùÚßq} <‹_õ RŸ½FR+¥ñ¥ÉÕÅ'š‰SƒêÁS§"ŒÁºžÂÏ,k à ç>þ—0®ú›Q h¶ Gn÷Ê5(_mþ–ß%Ò�ña‡é1�Wõ(S”ç›PÙO–•±«ÏÐ8}–N/%ŽÖèÅBÙ¹¶’²¼qc2}CÐéY:½Œ}“.[-C1í hpÑÆ¬neLŒ¾ºÛæ›9Ï…í–ˆxGë"ä½�ÖonKšs—“A’»1ðü“[ö‘§—ö[…m·-›Û=>ün¡­,of,môn[¿:€$•kãØ~OÄð¹ �ãHîLš� �¥1q˜srµ+^S*9§²²�í&D"–Ú†8 ÓÉmr;¡áôÅdpC¸$™â£d'Ûɳ>Fjš¯Ÿ ùÀÛŠ¯K�Òxª|BÝh¦Ç\Þs_Iè’E¹ˆ6›¹ oNy*¡|׃4×¶‰7OI|"€Ðs—O‰Ýu_4~òV©ão(�C³±-·ÊÙq—‰º‹Àz'5{¨¦ªj.\K@i&FöO»;Y<ùõß×§xy  tÇ@a"K»mhÄ¢ÁŠS¶µ®£Q¹¡Û ähŠŽ#–Ò•’f¸¦yáBŒïÔ+2¡P»@ˆάå}��ñò�×Öùtó!>v÷_b¬7Ð…õA°ë0 °u#ËôØËë6”‚ɇ»�ó|X_ÎP:³}Àç[…^þ3‡ªš+K)û¦v„ý^ž[´“ÿ!iåÓc¯<ˆPy®‡ë¨A®I«#ÔÔ—»X ›ÍŒ4Ó„yî�ÜûÄék½‘q K×QhG Ö63ÞzG@«csG11dÈ2p^¨ï�½Ú«½únê%@$ 3®_O™œ„áaøð‡u_x¾kb._ϺW—Ò¯—‹úAcì`( Tž†Û6¼å�E Ý\ˆ§@QæÉz¼û¾�o) VÖjlH»¦½­5Rî:êÛ¹I�•õ”B q˜�°l5C7ÃSšŸùh›¢ÿYFŽ Ç‡¹þÈi~zižvcŒfRa-,ðß_…ý/#ˆ÷}šÅ"M=rÃæäf‚NQÝ.?ãoÓ›jóx§M»µEsò <ðÇâò¼ ñå¿x=aa9á­w©i �f´æpßmB)äÙž'SÊÊ0øã¸?ˆSú/¤Kl­n_8ëêÆ‹3Ív†«5×¶S:]ÛªÜÊwì=s6zà ݻ«Y¦Ç%G¤Oéë´R„±‘‡±'ÓïrQ1ýÎïEŸ":_cs¡A²u’NÛ'òùœ¹’È$:–Äô’é_¡º¡¡\T$™PÍjÚñ!Ù̬oe¬Æ–™1g�˜Þ¯k+)Óã¢(¤” 6=H~'§<¿âP§2�lqfqM¶w8‰å¯ëQ,(�‘Á°ç)þà‹î;îc ¯»ù~¥ÚlŽìó®‰v©\Ð7ÛÔ0fQ$‰fa)åî£¾è„Æœ¹"žc0ë)í¶¥s6¢×ìåô#ù\Ï/$[-óÝCÿfЧ“H³&ü}­D÷P.IŠûòzÊäè·×F-,‹ID­¬¨–ò-`IšÓઘ"ŒÅlÀ+à+†ÇþòO>r ‹C74´{–ﹿ€ÅòðÓ!¾«´·o7uüÕj¸¦YÙ̘u™s®iÊùfÀÑ ‹4¹…À숔ÜyØ»Áx¡ŸÇQ*h‚ªÆ²ØÐK ±�íˆâó<ŽS¬µ´º;7®«°Æ P/(Ç€šç**EÍן�¸ç˜Ïɳ·ôv à›Woãý[�9øX_ç?Å_á£wÿõà"M3Ë…k)wòú—4“�_«cH3û’ À›+Œ ®#›+ϵ(%4®8…^hhw [MÃÒzÊñ~®3K)ÞÖ†n˜ H¨V4&³,,ßzó²HìË­²µ'b&à:¯ Z¦Fåž^k› «Qlh´,¯%Œ éE6ðºªiwDÇ#á£P*ÈvîüBò²Oà=²W{µWßí@äF‘ùOþäçxè¡¿C¥Rdrò÷ß?ÁSO-åß“¦Ñ!û7ÿ¡ñû?ÿSÃ…0rïªZã{òÌJSè†"^®§PÙç ÄJùh­xêTÈý·„WîA±àP-Y;Rל¾$œürQËCÖÊDo+µÖŠ”1k0J…€Ùá%ÚÝë”Rƒêfüá´eªªh5¶¯Å„f&Þµi( ³I…½Z‡¡œÖU(�wAP*Âè¿ÌL²#ˆ¿7á·âŸ€^ÚmØØä×&ÏÕzøå.Ny›¡±%îž?C© ôßÛLo¢Lg³Ú˜»»õ(i®«qqäùÜÿ÷çœ8X N7XodÄ)4š×V³—4¶/¡½¼L&ŠÖ*EÅĈBºù„9J¥AØØÎ¸x-ejÔÁ÷Ql˜�t92_Èýüw‰­qÛ*Ö]Ü¡2åªF×IT"�6èv V„üq,y$�«(E_p™+NIÍ�T¦ÿ™á‰;•!MEß׌ÜÎû·l˜ŸrÙl<Ï@c¿1ª:|é‰zg‘Ï=Òåƒo/2:äø–OðþÍ�ÀÁýr¡¯®ñï;_áãwÿ%ƺ»Î%�“9ýJaú“VLj}ó«œß�¶|_ÒNÔ;?£�oÖ¶2î=`,8ZœÇ6†ù)¡ö·ƒ‹«)«›†zE¿ªØ¿Ÿ£Še£e^2´¸ùõWe{¤•"®XÎ^Mxþ|ŒE ¶?½X¶×®£ðE­ßx.âÞ["Ió!�ÕÌN¸\_K_²q™�p÷È^íÕ^í��]$C’Ñ#ÈÜœåž{\žzʰ³¹ïÿ·óëŸiüîÇ>PanÒ;Q.*Ïq¤OouÅRq«i0¤ŒôP—Aí2ù|øéᆵ(¶’Ž4œ�/Y Kk“cŽD Šâ´Ô_£'™E'°viuy…n(Ô/(ʃêµ”õm‡Ÿøáa2c)­Ÿ4¾Y?9[]U@9?ô«uÒƒ·ÁøÔê,ÎÅZWn'ÌðÐ`ÌöOÍ[¥K�cH~¯Ûåm¯ÛFomã¬-ñ‰»Öùб%̳[åk'»Ä�GIã/‰ìFÝPh½Ø²ÑÈøÈ÷–9{>ÆsÎ-¤X«ýº“ûê¿Öêg|h KkfÜA’µd ð<¡--od7<Ü›[Û|ወ¶¶-f\ƆÐ 5�<‰÷ôÆ]‘”†/ÄÜ[ÀÌ„K­¢)xBÿéS\ʹC˜£Ìx/Õ>xàÕŠCp[€r&Q4H.wؼ’uÂÞ&a,“ÑÍ팅•”¡š&3­žÐ{ú¢]­Ä¡ZÒ «)s9E©,bøA@c_äï‚ë‰[U­¦Q3®å-¦lo¦læz‡^d(Dr >ÿpOrJÜ<›ÆQr8{%fjì;×ÒY Cµ¾}ñ@ òÍ�ë(ŒÝ ¤™¦T€rÑ2³ßC[ˆÛ†vÇÒˆs�\~¬’ÔòÌÙöôEÖ¯õ:©k.-&BËËm›µ#›‹v×plÞca% öP—,³¼ï{ÞÁÇ6?"–éZ£VWù�îWøÑ;º |Àéæ™²yí¿¾(–mÂk1ሳX¸²$i÷} ßFK¬¸[Ù�]¯lr4—Sf&\†*šÔ v×�fq-ee#c´î¼,�èS·’l—feM\/WŽÞ ©ì§ÃžbrÌÅwg.Ǭ72ê¹ka!èÛÂ+ªUM©¨#yHSMµ$çq?Ë©_®£öÈ^íÕ^}Wµ |hÀàypåÊÏsüø/3<œ1<üO€u °b¯­Y~õ[ÿéî#ÎÔ]Ç‚·<å¬7²·e†gFjÎ;ï=î‹n›”‘YH¥äf|ò\Ä�‡ƒ�Ô眦T.*î9ês~A&Os“f]šmC© ÐZcòæÇæ¾ða®;é…†ñaY¡Ÿº$)Ó£·pJq¨•º@wðµ¿ú—ì@†ÍR>ÿ•�‡.?ÀÜþiªÃut¡Â'Ï ‹ ¾VZWé&p24ÄŸíîü³Œ?ˆx(†°çÉædƒ_ß$ìt ··é¬-ññ;Ÿà®ÙSS%ÐO=3Rs˜sxþ|L7§tó<‚©Q‡ÅµT¦æuç–€$Iå�ž$†ÉQ—Ѻ枣þ –Ä"îL©Ö]ÜùQ|ï£Dßü}Òf‡4µ,6 ÿå ®»BœˆÓÒçéñ–Û}ªeŒ¿™ç0²?à(.•âÅÅXKšÊÃ[å r¤®%•Üo‚⌇[£PÊ@zÛ>�ëë„ çéô,QÎ_ÝÊH3¸²˜.¥$Ïb}ËxŠ�FF©° è»’@í¹j`úZ@HËçÎdõŠÆ*ÒÜ~УT]�ŸkR6¶ Êr~­¡»—Î'^|%ö›;°*ÍŒåK�õªjV62:¡}SÌv7d޲�Ï5)Ey�Z唣„�‘‚ë øÞ‹” ;:Ï•óL²3Á„ƒWuðBCè)z›áɈn¸c�{y1!Í$ˆ°Zæ&\./¥’ëàÉtZi…•²¦Ù6/ã/þú·R+ÃuM)ñøü´G£ešבs±\ÖÔ�ÖT´Ñ±�ëbPá:BÁYZ7\8¨9q¼.ú€¾@þõjS¬…Ûø\¸–à{®¶l®gLŒ8ù¹•o€4ËxzãAÞ¾úBOÕVVøíäËüÐ]_"³î®GÂΖ²Ÿåá{š06$tBËÒZÆü”ûª¯ïè¼K!Pƒl£…•Œ§NG4Ûò9´zB;Œ"ÉÛ=‹œcZ …wnÒ]�«ÑÊ�e°hì­?»¹IÙŒžPò’Lò?̼‚ÝÂñýî@ëÒÉ$ãd³iv»·ò‰bË™Ë I µ²dJizüw?ósx[ÿ™µ‹Í<(77n(¨—œ_µÊÙ«½Ú«½b×fÃ�$†k×2�.££wÜa€ Ðî÷i»AÀÉóÙêÉóÝ/ð-À‰c³¨Tíï>æK§dRFç=PIÞ ëñçCî<ìšL¼ÿmEŠwÝö—K×V7(ŠÃ³_ùfo@*&ꆩx_w29é27ê°¹�¡€_û½&ÿâ“uªå× 6 a溤Æg¨êpïè³ì¯½ÈpYÄË×p�ÅñøŽ"I"Sä~¨¡~�‡RðÔ©ë]Ɔ…¢W*Èkv”ˆâ%]£µÐ´ª%Íü”;hô…_UÔŠvZܘҋ [Kq~|ȧéÎøÜ¹˜4»Ñ"¶Ý…Õ�ŒÃs.ë Cà[Ü<‘ÜuEº|ãdÈ;ïy}›) ˜Lt2­®a~ÊåÞã>ÕŠè<Š9˜R ®­d�§4ÿ?{ïmÙ]Ýy~~¿“n¾/§ ¯²ªTUB*%@²06 ÀˆŒ=¸mc7ÆÓ=íééqXíénÏ´ín�—{ÖŒ�ÓxÑ66c  LF!«$UN/ç÷n>ñ7ìsï{Uõ*HÀ_s÷Zo•ªôÞ»áœ{ÎÞû›Èæy19yËÞìÞo}v­Å2·í¨6¿,tÅ£§A7Rƒ„ÎçêûÞÂ-ÆG-nÝ_Âs¾N ’ôúÒð_~:j%Ͻ;€t«[ÝêÖú5R‹?ù“^ÿúg¼›ÑQ‹÷¿ÿGùð‡?·aÁ¸1˜pcNHœÂÞ—Î$¦ò÷AX|ï7{ €™Žèßê  ×“‚ïk±sÔ!ã)^q“K¥™ðÑÿ¶ÔÚ}S_®·(Ûú(õ°?716h“϶ƒ©„ÊÐða¨WsÛaÉLàÂzwùá¿«ò³ï,Š —Ýg7í¼à»ÏúsâÀ£ÔzSêÚ1Þ¶^(xd&§ø¥7V¨Ö/°Z ™›¨· Ôw-5@ݨDY~}Bœ¸èëƒbêÖÕNÒ¬“TiýA’„§ãûøhŠ�ñ-¨Õø ^ÅjÕ¡V!®ÍqÄz’í£§ñ\‹Z#fׯ“<¾1À̶…ªT²±¶í¶nC{ß"¼XbåBƒ`õó4*?Ž/¬ˆ¾!N 6ê’L޶£L!÷ý[?­Õ²®¢¿Çb°Gôކ܊Œ«(Y$ÀòLL«ŽýêÉ‹7ÝæQ9ºˆ¿²*ÉÌ!Ô[ g&ÃÔÕ&éÐЮ{ì7t Ã}ªGâ6uïmÑb Móþ.“󖦓G'òÿzŠ"®î+jnÙçvØö°ÑÎÕ(÷[¨m9×E5êÔ—«ó!M?Ás-,�¦Mû‰4e–¼î|Fñµï6ٹ凛Çqä@–Þ¢èqr96ÒŠ-°)”’÷×ω½ôè …·ÓÅÊh¬•˜z�°²ãO„44ÂÐpüB˜ÒydhæÈMb ãi‚(¦™Zá¶E×¶­¨· #ýóËb::`ßMqf1¦¿¬)E7ÔÓÎOñ®ÌO‡1Ùø�éäq,-œ{jmß3_ˆ J„ûOŸ8²ß%Nà™Á¦ZŽdívö IDATÞêð½|î¸Ùc¨/]>d…"fYŠ£‹wðÓ™7ÁÖ­òDææxß³_b|û?£ÈcÚƒxÇ%K19¡ÔzþG’âØtò?näõ õZ�a4L­p›¾¡Ö4ô¤×ã}ã"xlD4Tg xöÙ³lÙr7å2ìÛ7@¿ÅÒR´ oø3\ œ¯|78DÕ�ƒy×í2Ê&‰èÝbƒZß"j�<ÝâµweسÕá³_m`Yô�:ºÌÅáçã_¬³c‹Mž?+îO�„îPn.û¶Û,NG nqwPCbçø‡Yã—ÞW¢¯|c®Q�FÂ`ÑÆ Qdˆ"ÕN®=}K‹'½øËk¢Ä!L4õf‚]¹Àž�Sd2Š;gøµK#×µ™ˆî‚ÒäzX¥Àÿ:»AŸÍˆ¾ÄX.Áèb6xÄFïZÏ:Y[ãðÒ<¿;ò©*ÿò½%òY}ÝÍo)'DËk1Ã}ÙŒÁ² ƈ¦"1¤~ïëÎUahèÕœ™ ùÙw/ëjן5À�¿Ç ü–Ê*€ò8}ÑæƒÙËÊ®›È á”Ë,g œËlÄ۶мJ¥Îï9j n uÑjñ/fBœ ?F²¸Fkq™W&>w§Ä4›!õ†O£Y¥ÑJxå�ûwdðôK3>A«Õ„­Ã{¶9$Æðôñàå רÄÈqÙµUÒª Y9¬tóF(�é\XI¸õ&·ãäÚภ/cQÔ¨mE”²aa�ÚlÀÊL„_kàû†V(ZŠ6ý(N$Gf~Y&<Ï•±pmçqH“öÔqÿeÓŽÚ¯S+¡ •‹šÁ^‹­CŠRÞ"—c�VÒÑiYZ‘6äüGü©ÿFý…I:X–âÜÓ-zZ2´‡?Po™NHß÷{Œ¶�Ø,¯ Ê‘Ë(î<èÑS”á°˜{ Ë•˜ Ó'/„Œ�Ù ôXŒåÄÕI,SÅšÙqÖó8²M¾¬!¯Q•˜Z=a±"(T—“”ã/CT³•à::¥„É�žqC½f#ÆG~x­fçø­ÄìÚj_’3⹚Skwñ3Ñ›a똼ï33üÖì—x`çÃ,®º´BþêóUÞÿÖÒú1I‡�‡Ÿn±‡+t&K¥ÖÀ’$ï¹ú†ô6ëée)4¬ÕbÆíM¾Wqx¯K¥.”ÂÛög¸y§ƒ}þ3Ôâ?H�ÕÓIco¥Iö—|þY?žq"HFµ‘Pm$” W¿XY©˜\i¡^ú¡,g®z}S°VO0hÂ(éØûF±Ø]/§ÖÂ¥¼&I ß0¿s×!q.ë ÝêV·º•ÞË6 ²ªŸšz˜‘‘{Kرã>}ôK�ö%ÿò!DÓRâ~û™ðôsgÖþæ÷~Y4»½Û &"úÆ,á?§_JÁ7¾×d߸Û‡l[.ò¹ŒÂÒtr FmšAÔC··›ç¦"vl±�ˆ�a›Ñê|ˆR"~ÿ³�Uø™·é»\˜¾ávqRh5¶¥¸u¿Ëä\Œë(ŒIˆÜõL†¶ö¤Þ”áãU·dX« 5áoÿ±Ê{ÞR„h -­(ç›@“86DÕôÃñ³_bgVÓ—1,®8,ÆG(Œ@®Ì|3ÏO¾Ð Ã2„äs‚œlNŠE>¢°ú ì‰ùXô£Bänµ ^‡µ5þÝÀ?¾£Él«ÆÌ…eX{�¾âÓxvžÃ7Y9á:ŠÑA«3p´|ÑY”‹“û,z Özê{»é³7!?æ`•·’ɹ¨Â"�éQZ/<…ŸÑX–áø¹�¥¥�òþ]Gñô‰€…•˜Á>û‡²]žœ�8¸Ë¥·$as¹Kò8dèÕ0’H„†¡M6¯p·fq³Yì’O¼êÐlùO­P_KðS‘õÅ™ˆ0u*š[Þ\¿§¼�|FÑh²©@×Òë¼úÙÅ�…e›Á^›—2ƒT‚"Å‘a°ßf߸“ÉähÛçÖu3‰1¬-ÃÉÇ¿È7>9GdlÖj wt)æ…'ÿüé€É9á»èÒæßµ• åvXã†ÀÌØ�M‘[ 0Ôg]Bƒksž£Èå5N�ÆMµ~d¨,Ç4&M c9¾f"âX`cäOÏQ,®$ô–À±t*œ¦c¦QkÈ5"ëý`߈J=é4¶Cý6»·9Ô‰¸‹Y ÛJx~ùU¼-~¶ŒÊMÏð‡•/ñº›¿I¥&çsÖÓ öj¾ðp�7Ü“_ÓìÐ-דè-¼ê Éî(®½È±-ê³p,El$™> sË1Woú¹ulÅî­N:LÉ1?ç§"úuZS+z”ëÀ™É�Þ¢¦¿Gο‘K–® A$hué:Ï·¿¬qRFcËR©Ú0×\×¹¶¢˜S” š‹³QÇN¹ÚH˜š�©ÖŠ9±”ϧׯçφ¼õþ\wéV·ºÕE=Ø,”ÖÖ§Õº�rÙpèÐ+�o"¶QÖe?“l@Dt:ˆØ)ñZ5~têÏþCã팙‚�mö%ɼZÁ³'öls³ Bٜ峩à<^·oô\�îÛÛ_ÏQìÅéÆ6 !»]8¤�áòáOTùÅ÷•®*LOC6# Í®½.ß=ZÃÒÐJcÙb“„†fK‚¶Þús=ÔN8s ‡ó3þD…ŸyGù%%d'š Ùn;N­%Ikû˜âæÌ úî\Be_ÍÒcËñƒ†ZËf­¢˜¿ øèc}äo>BØ?BXêeÁ+𯰞sâ¦ÝD>Å ðûÆðûq v^9Ÿ½~§RÇ­¬r¾ošß(œ` ÜÀU>*®c‚†úÖè/+f—b{¶‰"æÞÛ ŒŽ‰Øº�Õd=p]Ý¡¶x…Sð(ær8;Áèý$\$>;Ãü‰˜VÑj.QmÈp¢Ð¼p6 ·hu¶ðŽ …¬æ©ã¯½Ëú�~ü@¬EGR[ÜŽE±»žœž¤ymÚWÖSK£ Gfn™Ê‰U-ÙÚ�¡ÖLCxñ¼PL’xýq¯×¤rš¹å�|NÎÉcg¶�Ø öi~âþa,ÖÉYo]£±±‚”bÓhIÇ`¯f×V'ͱبMIužÂ)ˆˆÙ±˜ùJƒ°%Ù¡¥˜:ñÄ ãzV"Ïï[OùÜz“KJ~ƒÖ?¤‹•�Ó>Ü™§¯dQ*¬‡5ZV»yT¸¶A+Ù”OÍGÜz“+ µ£p2B¹ÊINcÖbª‹1Ë-s‰=n£%CÇâŠØR'ÉåC€ü¹k‹ÍùÙ(M7Wª¢ë(zJ’ˆ~Ó¸sÝÀ¾«U�¢_kõ„BV1Ø{i²ºç‚çˆYÃÙ©¥ÎT_É;xl•7mz†ß[øo¾åq¾�^²åó”õ™ŒÅ§¾Zçm¯Ía[ŠzS7}M(A‚P¨š¥1õ`Uú–ØŒç3ú MÅÆZ­&©«™–œ‘ôn§Hw›*º´–0Òo¥WµfB!«©7 O½ &»· �va9ƹNvO_Y6ÛvÈ�–aq%ÞÔE±]ƒ½š‘‹bN£´âôÅ�³S! Ë ‹k1;Çü ¥aiIº·µÛ»H·ºÕ­n]Úƒ­ ŸùÌyn¹e�þþ¶o/rï½yøá'Yçé ?o@DTú§Å¡º‚äÿyé£üýÂ;‚10 [m,½NÅRJR–O]A… õY�0)?H·ÆK1wö6Ý ¡ðÌwm±1&b`Ðbt— g‚4‰Û壟®òS¯ØŠG_8°Ëåøù€ÎD õY[á§ß^º!$�?Ý¢�—ílœ½@Ò !J ™®£2“„�A«e"”‰QI»–88v†J-bõ|Àà Ç-·Ü„qúÁ.€•aÏGz7â "ˆßHëÊå PàT{=i Üó+Qa-I‰?P_ã«J+[§¦—™Z=ÇïÜû0ù¬Ásõ¹4Åùm.º/Ž“…è4�©,•ã‹øK�Ðl (Óblø²}\© ÿºÙ2”òë2!|!«_V÷fµVMìÕä=Å`¯M6#ö�í�²eAÖ…žÛ1Ægñ{Â0Ý6Û •$ýÜ<O¤T“3“M?!Š$u¸„ærÍOáåÍQI31+çô=¯ð(¦áp i ›)åcj>f°W³VK°´b°OL úË’¬žKio^Êëogä3ŠÌ˜�5àa‡ájB­ž>×¢2uìt•6|éÑ&å¢8_i®- ‚¯~·ÅíÜêJ)Ø¿3“º‰É¿�ªY(XJ ….ÌjJyÍ–Q«ßÆN a-¡ê31­øÑº0þÅs¡ÐeZ‚lÞ�6%¥îÔ›Çq¼¥äZ4¿QÎkVbrM­‘°õÜ£¦æ#2):QÌkúËšy±ÕÍt†a•:ß­kŒÎNE<»v?,½FFÒácš7¾ÀŽ|—¦/(r›æF†/<Òä5GÌžoOá§!YBÿ‘ÆÀ¸¸ÿò½ýŽÊ°°~Pþõ%Q.|å1‡ ­;$!>ßÃþÝ\ÊeF²YQ£:Ng8A ð"ðb[EpoÈýþD_«ÁÌ2›àŽ{Tâ2ÄçQ�Ÿ¥l¥Ø‘&5-ߢHªrµž`»Šá ´o¥ÅŪ¿lá:ò¾Û: ¬Ïˆ³Ž‚—D?ª5Ľ+Š ÅœP7îL›soÝ�kz>º¢Ñ|êùÚj¾ ³ŸþtÕ»÷H†Z#!Ÿ¢p'Î…ä3š“áY/‰&¶É÷z®f×ÍöQ›Þ¢î t(ˆ#ðCM>›�õg&#n?àuÄÈm­ƒ›6ƒ®£Èæ5v¿Ð\¬>Miâù€ê“5~û܂ŕÏU,¬Ä(maŒ4�Ù¬PlÚ)ñYOÓWÄ`ûXóPo²)Ó¶�Êl4tÒ�´8bA•Å˜Ä˜Ž®(ãiV[çB˜ÒˆRúdK�ÔÅÕ˜é…øŠãt£ÇL)¡É-­ *ÇÒ07}ÃÁ]’óâXmäLòm;ØLJͪÔòY¡,ºŽâ¶ýÞ†!k}àp6 ä=IV÷,ÀRÄQDyË}|pùA–)`b’ÿsáó¼îÈ4}Mš�©éËãöX3+ù f=Ž·y\˜I{, Iê-âzì¸ýÖîÒ­nu«[WA@ä¿yäÿáÖ[�R)fË–ûPê0Fo@@6jBÚ?Ë¿çÒ/~÷ÃËÿ•Ÿë}·2Þa5R±™~ªÅÎ1Éxá\L_ÉBiéq[¾4ªµ†áµwe¯ùB2®Ð±ÎN…ìBˆ½ ŒìwáD�"-.ÿ\�Ÿyg‘\*Lô‰&Åœ8ì,W$Ô°�¾l²˜[Š9?qä€K1'üÿ§� ý€ã>ƒû½T`/nNf"þûß­ñóï._³á4Füá]GÑÛ£éÔTÏMPJÂu¾(ÎBÒä4ZbûºeÐæâ\H›uºÇåä:Ó>Tòz_÷J€ïu¾eµ’pÛ¼ËÊ\�sóû¶{ü×Gú‰vÝ„Ä*•YÊ8¾1!ÞqdPÉç¡¿¯óbþEr7œK‘ß§è7y}R'®×‰×V ffx‹ý(k•|�Pæ\Û'Ÿ�9~: Y3 ôZü�ï.òùo7ñ…I ó+r“é·hø ¶wܹfÃ8¿,¥‘I�/oØ wBm±àôÿÏ5nÙëâÚj«emógoQ2“ñzú`Ú³9þÄAVÍ-«ÄšÉóo§zESR¼L¿a8©*Å'Ûwæ9ùbø>ÿ~º •*ÿÊYâ�#«|õL�}ù Å•^µãK,.µÈ8Ð[Ê1:˜Ã²uh¥[ÚÉ9�B†ú,lK,~{‹‚hd=ÅžTó°1ßÁNCÇòY…»%ƒSèÃí©AÍ¡Þ0ÔÏ/Ó ¼À²¤yJLzâ[²--å4ÿôHƒ][xy“³ûÆ�NÆK;ɾƒ€Ä Ë2`tÇÔR°e»ƒ5ì‘qJÅ4[ŠúB@ã…5š¾ˆ«Ã&f#¡œ4Å¥çjIêad�cË•˜Œku\Ÿ[ñ–¥™_Ž©Ô"öïðn™j7¦õVÂØ Mߨ ZÙŒº•²-Y<{ÂÇ$)¬j §¾wÚ}øs«#±R¦ÙJÈ¸Š»y$‰¸DÍ,Êü‡%ŒÏºxp·ËØ EOIŽ—k¯ëS¢ÈÐô ®KÞh8°Ó!㊆õÅEͶ$�/›Õ8Y…c 2B[YŽ%Ý;ErÂ0âhåµü”óF1¥H˜œä7Îÿ¯Ýÿ=êM ¥”dx„B-[®$L-ÄdÒ�AA—4®#ÐÌòZÂ�7;í‹e+¦çc¦"ê Y \Ëy-ŸU�Á>ˆä\kù†™…ˆá¾k&t~Ö•ë®Ø ¾ólƒ#²9�áØiŸV é)Êõº}~Xé RÌ*Z¡A)Ñtd3šž’æØé�á~ëŠûD.+ï{ši1 õY×´o_Ú pË—àÂËkǘ�ÒÒyçÍ~3bñk'»H·ºÕ­n]e ‘äÉ'#VW_`xø CC†÷½ïVþè�¾³að°®2€°òqùpò¯ÿëò§þôÝ:l�l ³-Å–!8?ušíj-a¥špçA÷†›¬'¦g'ÃNhÛ �áÃêy¿Óh}ôSUÞòcyb–­XB¼ ¢0mök •šáGîÈ^róí- æéãA 1'†ö» mHÞ�˜�øë¿¯ð“•6ÝGqša)¦–#—cNœHŒ‹È`Ö¶} S«ÇbNs WaÈcžit†ª�~²ÊO¿«Ô¡x¼”M®çhl{�jfŒ"Áζ=ìüØâÿÓ3ÇEZKøtÖfd=ÂeÅŸþs/çoÅå–í=,XE>šä/Ä·âó9Ѥ2†% Ü r~�‰w4(T«XK‹ü§ÂóŒåVH¢Ëob¹«s“LÌÅÄqÂP¯ÍÎ1—BnC‡«pSa°›Ó¸y�b¯FoÉ“Ä9Ls‘úÉyë¾/�Úr%¡Z7ØVB½i8v&¤¿¬±,•R…Bsa:ftà›Ç„&M°ªa1ý\´3Ï‘Œ ˆfSNÆ86x¡ˆÈ£á ™]6þ)Ÿ¹jLà‹¥h­!T‘ÕJÂ鉰ƒ:´ëFšó\F±°"[bÇ–0ÈrÁb߸×9ßúËš¹åXŸSÍ%¯-åõWê [†,¶9’Ÿ’Ud\V»¬q]OãåÅaÈâ¾]ßûFƒlJ;z&à©«8¶2–³aèí•A^kð´Xm»¶E½•pa6â–}.IB‡6娲LY\•tð«U!§ñù¼5}yÞõFÂPßõÝÚ:ˆ­:ƒV­™pïmùÎõú–½ÕFÂÄl´!#z—(‘çZk$©ló“ÆÒ‚\9özØa½™°RI® Àµã£õ–é„•v�nu«[ݺ1—¡ 1?üãã?A±è±k×zzX]]¸ ¹Üž÷òaDqùýG={ÂOFrÒx8i_êiF‡m²žæñc>õ–pµ·éKš™)/Õ„œ¼°o»‹1‚„ öPÏù€Ø’~ñk þ㹿ç�÷¼@_Yl¤—Vc.Îżx6H <êM¡Ñ5š&µÚ“e)2ZDÝ•z’¦‘Cä¨4Éà6'.„WØ'^Þ Ë�©ˆ"z+usC‰ðB›“<Ž(–ÏEÛú¸ý³J ]u|T25–ÖbÊY=ø`Ž06‘’PÜëžÓ*5 °54‚u”H_ë‰*:çk[´^MÑñÍ*NÄ8Ia$�Õ@ºÕ­nuëz(ȇ>4Ç�ý˜a|¶mËñã?îð‰O(®Nú\¼q!ýÞÐÿËûŠ7• öÛÂX”o¹laßv;³ÇÐ)ïüðž¤ãŽòR+ã*- ;ܳM��¡†^á±øpÛRìwh¤ÞòŽ­:6«Mß°V�Y­ÆÜ;ì]µÉ,5alqq6"IsÌÉ€¡}.ƒ;8/ïÌÄ\̧¾Pã¡7:[Y¥ ¿láÙŠGŸk1>j“ñ4Ž-”繩�ÄÈv.N ·Èpq&‚&B†cÃÐ-98Úè<§�~²Â{Z׸\~ÝX­–¤Û¶b láM_„œNºÇ@UÞ— µŠq>«¸ý¶ ·ò.=ÚrYØ�]×ÿùßl˜s�áëßõ8Û¸�cÕQÊ}=˜l�ÿ£Ò#Iðù¼¤Âg<N:ÈI/g€3ÈWšÿ«ÍÔ°º3Ý2Op¢Aµ2DP_¦¨N’qÖðMÓWÔ›šå ìÙá`¹Š]#6•ÆG†úd˜˜‹Éx � °G¶µõE³é‰µ†ÇišGÎM?0Œ ØÜ¼ÓÝ M¡£áè+º,­ÅRÛiÓó _ÿ»ã,N×h´öl³)æÄNîØ™�•Z™Éè¥ âÕµ‡ÔKP�U¡C õ‹ iÆÝ0€ÄrNdS÷Ÿ‹³¯½+C!ú·sǽç*2�Ûc‘µ )i¢¦!˜�¨žQp”ˆ «1A`X\‹;)Þ_~¬™ZWKÛn* 9ÍÄÜgY\�(æ$ µRO¸m¿ÛÄ»iÎ�›Ò{òÃ6q%¡RIHplƒk§¶Â{­tàH?[éÀáûB=­6 «•˜ÝÛ †·þˆËÑ¥×ð�å7Âà€œóçÎóÞï|œûî=‰m;b�ÒìÚz¡ÙÅ8Î^©&�óÍudhÐis„m7„Z2`rM!o(Ô5�;¶ª#È®˜uTÉ ;ÆliäÓë¯ j#ôGuÒRÌi*õ˜ž’æuwç𚉪=SÉù!BSK߃ 4¬Öšþ:…ÌÄ"Ù‘ák£Vź†Ô¥\Щ‹œè¤ü@Ì2òYkÓMZABOÑF+X\ív«[ÝêÖf•p¹¨üâÅÿ‹mÛ~ƒÁÁÏ{?ð[\IÃÒ—ýìµ�„;Çì¨Ú” œH>Bœª•˜žޱºØHí e‹ÔL-_Žh4—‘›j –b—Fú-\Wqj-&ç©NÚw+€jÃ0»óšÛ¯¿áHE‹sKÑú­òTÀЗ¡Ýœ•>1óÑOUøéwH’ùÃ�7)æEÛ11Ñ_Þ ?‰ }% ?€“ÞrŒd•ø�áÂl„Á†™H��; ¨§j�fóSÿXã=o+^7‡À±¸b=;2êPoÖY©Æx.©­éºÕiÛ“¿Ñ{Ë-Ã69Oqþ\€ï'Ü}[öFÜKñÜ•ðOòíG öhzK‡§=âz‰Á¾,¥¢Ë¯}¼�æø>Ü¡!âb™¹LžS™Ë¬„]Wt'==ë�uë-žN ‚@¶ÅÝ~�þ NäW —)O�â/~î$YÏ€‰Q„Ìϯâ9â<¤µœ¹ŒI]u$åx0¥Ü,®Ä¬Õvn¹RŸ$ëƒÇ‹g[ܲ7ÖA‹òÚav£ðØ‘$õlFS±Xѳ_YKñÐ àÓ;ÛP°w»#n>+–%ÛRÄm}Jê#ˆÐ Üâ±uÄcî|¥l.NE<å´8rKæÚpÀ&ÿor&"‰Á±ÅíèüćöT);š¢eñ‘÷J¹Ç(ØJâ¯ðô××xqò0Mg„š.³çø�µ>Ù KPHi]^Šœx^g8y¼=$I9éY  Ù‚FVVù�ì<ã¦Ay¹FÿÞe&^8FÁ{[Á-»3d3Y”vH’u�ÐÄ\$›Ù¼¦Ñ2Ø–p¾‡z-ú{,ï)‘Í(²�@Õá¨J{»‡ç¸X^HX³hÖņX?û2ü<úl‹X€#±&¶E�25‘Í„?P=Êå冞’EêÈÕ¦QuÂS­ƒÖctJQ§¡mö€�—"­ð Ís!õšßI‰—¤x±]•`½4èÏ©¯l1»’Ë$¸¶î  nšH~nJò=zË}E}ò¥Õ×U’:Kjüî­6ù�šœöÀh)F<Žž0Æ�Ñ´Z ˳Õ-ŸÿÇUÓl4[†mÃ6ùŒ ôç¦"*µ„µº¡œWl±)†Ã{3ëÍÔÁ®ÞŒxxæu¼�×Ã@Ÿ gÏñWáÇx×�LóO‹Eq{Èk4“Ô¾¦#vn@´†»eX^‹931Ø Åœh‹ öÞŽµýV¼•ÏQo(”2�cq-�Á^ÉÿpEÊñ¬§öé×C¢zIJØMCe£Ôz}~9flо*¢¸¸’ •"NÄXB)R×/±q^­&\˜ 9´×#J]ç–bíqè/[(?Ó¢ÖH„–æ];ÿÃiç¤ûz3aÛˆMr•„EK˵ڲD¬nL—‚Õ­nu«[ÜÀ°óç¾È£yñ|Ø ½š]ŠyÓ½¹—õ8Ó ƒÁÆœð¾Éch� §%qr.æwÿ`™}Û]V\¹Aç<�Ö©þ$Mþ]\Md¹¿‰ž#—I‡�™�q0#±aàÖæ¹uMÈ'þ¡ÊÛÞ\ ˜×W p�¦¡\�­^®¨9õ¼OOÑB!ÍÉØ %Ái*r;l°WÓ£!7ê2%¨)±8žšˆÐÚçÖƒÞ�o×�¼Þ\6 Vóô„BaH…Öqá'ŒÊ>Ë–¡ï¨Rá8µæ‹¬VæVc>�uè·=«šúŒæ‰‰~šÃ¯€¾(ö°dùë¸ ®LܶzÕ•¿÷–;pÅooNÜŸñ)5›x�öê*ñô4¶ÿâ(@ù>‰[g·7Åì|Ç‚=[mJyKÄÕž&ã®[~º8‹LÖ¦8ª0å‰Iˆ/VY™÷i6Â4·!¥�˧dÓO: Ù¶Ep&Çð{ÏûÜ{äûÓ£lVíÆmv1bûˆ#:w]¿á¹J\ch4ׯ 4¶eл\< µóKMCà·ßD#0·$«SÇoÔÎ×سÍfj>Æs –¥0Æ05ÓWÖÜyÐCkèçWâ4 nóÔx'?ÛìÞæ¤:A£:!Ž)M³mÝìzPÈjLN£Î„‘ЇB>óõK«Ó±¥õçg"&ç"î»-ÃÅÙˆ¾²Ë[D®1zƒ-÷Æjš7|äž|ýëE7†¼}ñªÑJ�q=aiõúT¸�^KÜéÒl�0”kðèÀµÛõj]ÂJ[Ñl%©;œ Ëkµ˜©ù˜Œ§;Ô<+½ÆœžˆØ6$ešyÍjMlž›-³iaI®Ñ�$·(Tk³Û^ÇmÌKíVW„Þ­nu«[WEA.u°ZZŠ9q"apúûá¾û4_ûšbs7,u¿ú³å7õ”´rÅá=./œ 1F( íF7ŽL'¨î¶ƒƒ£³Žga%~Ù/Ò¶Ú� ¸Ù–"—W”ì¡T�"¡J¥&[ë�²õ²§\ÔÌ/'ë̆“Ã{]†yð¼O¥nÒ­¤áÌ„¤®Û)ÿ9Lõ'«Õ˜�;ñ«[½æ2â6sn*ÄŒ‰}æ�j2t[ëéZ§ßÿØ'«”û4ïÝ(‚WðÕo6Ø5fã8ðè3-ž?0Ôg1Ðã°´špq&Âs„Ï®Sqh½™°u8Ãj%A=Weè@�Ka.ˆ°ÿÂùß7Ü}{憓ày¼É­7¹�&¡Ù[Lùª^¥aˆŸþ#–hRšö×É Mòs-î¿'K¯ÅCoœCë/ÑŽ¥i4à7WF!MˆWv†ÝÙ ã[¡w“„x' bÌd”bñ2ääÁðÍiJ|�·†kØÛjô‡5rõeFWÎò®í�¥” M±×Âڑñ³(U§5 ˳!áóK4š¦#†oS�-¡ÏL-5/Š„¶Óò W‘vc•Í?ý•ïÒ@ö÷X”EoÑâà.­¡Ö0XhK…lFÑwÛˆçÐÏNÅtèPŽ KÏø„A ƒÈpòBH­Ž¿ß,Žvb}ˇfKœìíq)䤡mk˜š©˜}j!¦¯¨©5…â3Ø«Ó`JIOÏe ��CÜéì”î–Ë(¼^ ËVèfB- lÍÇ õZ¬Tbœ‰©7¤Iµ6Pòžè¬Nœ¹ã Ç`�uMº\i>ð¥×óäî‡Þ^C^3}ž?Ýÿ ûë²Q×"~o_×ÂH>~hX^‹Q×xƒ•‚ƒ»=nÙç�Ïky1B-G’(šÎ0ÜNî·˜ZˆˆcÑmØ–"NäuºÎzxlÂJ5éX¡_«Ú™'Š4[##u�“ÃudìµXXI8?¦ié2Øú¡¡¿¬ ÓÓ² £4–e8~!ä�;²D±ÁuÅÌ!Š,NOD›‚ùmû]KC3^§y]í)C‡~¨X7hè ÝêV·ºu”¢óõË¿üÇ|ãw“ÏCOÏ:ôŽ«m‚€èë  Pûw8Û ©µìÑÓ!«U ¼é·ÈfDŒÞNßî·pµ"ëÂð6»s[ø~��˹fÊJPî°ôG(æ4Æ$B!IyÌöËœC 9Åô‚б 6æ¤Ïèþ Ï_ ñl´°,E¥&¢O­Öð*õ„Å•„Ã{¯Ÿ3‘õÕ†áüt8@ÄPÜdàPž_·è=5òù¯ÕxÓk �7¢¯$Û]…bnN ]GèV¥‚f盉و§�‡ì·¥‘óž;pxoj6óB�¡Ã%Æ´BŸo0=ñ~w‰ó = nôß7›�þ²%³ž"ïhÆÇlêMC1oðÒæÀð}MbÒ$ø@¾Z¾¡á YÅÛ,0:boxœu­É¦‚øÿéÒ Îo>áñ‰oßÊð¶1 ½=èB�;W†R[ŸAà Gâ�³( Ôôi]q AÀ¯ù¿�&Ì×àé%ž½ÿ�ÅÍF“°Y!ªœc¤|� Ô4RAüjU³{ÜÁr;Ç-Z‘aÛ�Í者çþñÛ-rYiÚÚFž+Žl+ÃP�÷ëFª½Í•Tï˜-C6[mŠyI‰_רÝèâlt‰Ávb`r¾ß_å3Ÿ®ÒðáûîrìØFäòL�ËQ�:²g‹²z,Ûsáñc>}%ÍÖ!‹ 2<~Ô§¿Gc§A]Õ†„B­UÔDÄȘÍð¸Ó ù›_~éHH’@‚H6RQd¨WáS@HóÅéf=‚z+¡\xùN:=EфȻj³úDƒ’+bNÏ“¡#—•Í\’@˜R¯–WcV*1ƒ½7F©)æR$d:ÄBiÒ¤OW;7ÉÓ!ó™ ?õP‰é™�lvÿæ‹5úJšž¢ÆÒë4†ZÃPm^wwæ’$ã 3!ÇÏ…�çfž«0r ÀÖÄÀE…╇á/þv�_üéJm Æ&7ëo§A© Í¢—UÔê sKWò!,-œz׋L@H7²†RÉbǘMµaøæ£Mî¿'Ëè�}õÉsãY~™ þ¾# aõÛŒ�Ù õY„‘!~Äa×öú¢,ż˯¢�úö}8ƒƒDÅ2óÙ§6&ÄÛöº(¾Tºää{Eò*(†�‰ÀoA®Á’IX#l®âOMñ+;¿Á·¹(b0§WɸBÅ»ïÎûå~ ¡„Ž¢³)î+kIf_�™[йy·»isÔÖ�$‰ðä‡z5¥‚lÿ_±Ï#ë�—Rݶ=®'ÃHnÐBow˜zªÙùœTk Ÿþ£O‹k›'ù� ÐŒÚ$Fl¨¯ºÌV×¹ Ý b3Òo1:`ÑW�›þ"C’!H]ª´R$‰a߸Óɸ°íuw®\V‘é³PŽÂTbªõ„ùV:ð†t¨q�–áù3‰‘Ço×ÒZ‚V0=É@ãH†L›2ç¹ÐS´xäŸ÷?Tdj." ‡ö¸†B›ŸüÒyøî{eø^=uŽ?>üa\«Òyo ðâ¹�ƒ»¥oÓZÃTCq#úµ8�ÅåÓ£ c�c› ˆ¡Ñ׬¹¥¸CA³´Â±eq²Z�97e¸ïH¥ÒM¿/C™ç^_w£�c¦C]£e®9|´«D¨ÑûjMB-ÇåïGOô÷ʱîX?Û–Â+[fxÜea"T‰‡2ÏíÐÅÙ+�á~«£… S*ÚÒZBoió÷xd@4}™”’„†å® V·ºÕ­n]wYÿÒÚÇÿ7Qô« ÄìÝûËÀbsˆæÒÂ�ˆ~×ë‹ýŽ­î«5L´ZMì±PZnB‡÷¸Ì.Å,¬Ä’Ç¡aj>ê LG o·Ùå ÎÊ/~©CˆeÁZ]t%®JiâÄÐô×µ-_(0õVÂ@�4¡ßOõ%œ­Ñ2¸®b°Ç"Ÿ[*é·X­¦MƒoX«ŠÝîC¯Í¿$”'ë)ªõ„3“‚„Ô8”G½Pïl‹O_ ùüWëÜqØ#—n½óY¡¡ØVêBI&ÆJ5!J³G6ÖŽQ¡ULÌÆ±¬z±ÆÐÍEÆ\ Î4PÊFiŇþû*ïÿ©ÃWás+di§ÜùzL!gQ©IÓc ‘dÅÈf_•FËÐWÖÜýÞA[Ã[ŽPØ|å ^sO–ñ­Îõñ¸Ëê�5ȧïƒë)Öª ½¹5Ênƒ²£)Xš¿|ôô|‡ìž-D33<ó´Ï‹“‡D¯Dÿ_*ýWÚ$!>¥uQ*‚R|±�œ¤ÑÊo Þ“¾ 'Õ*:ZàCöÅjƒÞú‡ïœâ±/“„!ù,ìÍ“Ëe±´Xõú!Œ &Ì,DD‰4BQ$á½%M’z$±»˜MSÇ]i¾]{Ýñ(_ÒØcž«Ñ$´BEc9¤z" €ë$X–æ«�70„ñŽ-T¥ÏFœ�Š:A /ª¼Îp'Ò¼öŠ^©�“$ò¶‹™JSãmË •&NüÐby-æ–½.Ù‚Æ.[dbI|BX›‰ÒŒ‘õ4ïÉ9¡%MÍ µçjÉñA(On×V‡gOdÇM[b ÑWÒœ™Œ°Ó,$?ìì’ > Û×/Ƕ¨6$룧h'†¬Ÿê^”âÌ„d]Õ «�ÇaA+�ç_©K `æ¦ Æ�Ú‹ÞE„ë Q$ƒˆã®CsÓ Bi-dÅàÞW–C0ZS«y•žPJÉ€z¹F¨�fxëhFýêÃÇúpDg8òC Vì ÝêV·ºµùmýr†RL’X<öXÀ®]!å²ÍM7Ñú’äÉ ˆÅºÍîF-ÈÆ³.æôpoI'ßz²Åø˜ÝÙü¡¡ÖÁâè€ÅîmëM˹i ¿ÂØ$#F¶ ÒþÅ +1É 6ꎭX­$d½m)’8Áq‰h‡Ö› �Àðª[3¾aa5¦RM^6SÄ 7¯•j®­¶ßÛâݼâpŸÇ3G}æ—cjõäÿcï=£-KÏúÎßûîpr¸9VN]Ý]U�“B+`E`ÀÂÖˆa€µ3c{ì�¿ fÏ fÀ²1"ƒ KÌ�…Z¡¥nµº«såoÎ'ïü·gŸsoUWn}¼ÏZµ¤®ª[眽÷Ùûù?Ï?°°3Ò¯ïÉJµTÐ4Û ¦Cv˜ôQ·é?XÄmÊI1pærÄŸ]h¢•<·ŒØ8)_^h%†ZË0»ñ‘§s7íÿÊEÅ¥ép�Žs¼Áè&w&¨‹^Ú_døü×ùÙÿ®J¥» 1ë)×’cá8 ß3üÑß6™¶Ù9isq: ý‹\fÝîµ;�ž±¨Ÿm2ðL?êÛ+ "Àá¥W:äršáÛÑ¿npüºe ?kÕ�§"1 �µ ü ºþ2cƒS” §¯Ä1ã2èdè¬Y4g¯O Ð^įØEþ0. ­+›YÄ÷6'¥ž >1†Ÿé âÃÊ•ýÿ=´Ûšuìåe>Ñ<Ë'w,`Ë÷PÎåü,3K+kÛÇvL\›Ÿq„ÓîØ©Þ¡ É4¹ 3à’t"¢‹K�? ü #ÃR-¡ÙJ°µ%´£(YçØw›ÓjY4)]éÌw´Tš*�&«²2¹ÎfÖó82®êåY¡4ë‰1d#±>œ´éßíbVcêó+þ:­ªíI„†·O=ׯ©ý�Ôä°E½mp#ͺRıáÄyÉyõxÀ›§%wgi5æ§ÿÉ?õæ'y=ø>Ÿœ=Ïï?ø_°uûÚC àï¿ÕN©Ar>»á¡~z?½Óím¹ î·�`É×O¬6­„ÅÕ„•ZÌ@ÕêÚ)•Ilª%¬Ð¶äÄqj�›ºùÕû,¼À�»�Ô1°o»Ó£©EQ‚˜žíú­jë˜Õ;Ï-O@WãÔ©ÄÀİlDfC²‹ïy6Oµí»á ßõÃu»÷nbÛKz[F“’Q’q5�–˜D¬Ô“ æõ ½ëp—$¢kéx‰8×mö›µY›µYw¼IøüçÏð‰OÌÑß?Éä$üäO*~çwº´«� $¾„(¥ÐÆ ?óÉâãq¢~iv)N†ú­Þ”JBÿ`­i˜YŠyöÑì5€bˈÍÌ‚ðη`£®Ê&dä>sZÜ—–Ö¢øö]NÇ÷–f; Õ²&›ºO%±Xÿ6Z �ʰã‰vš›ô IDATµã~ïѲÖHîù`ªÔ¥ÆÖòà¶4d¨>°‡S§Ï\|`�»c`!b°*�À­ì oWżNùÙ{º'óT›�C%¬c N] ©–c®Í…鈑~Iž·68pµÚ ‹«1{¶ÞþqÙW¶¸4IÀ ŽÕÙWb|�†3íÔ�+Ãïÿi�ý¡}Væ¶: ««1}âÍäRÀ`Uò%[±w›L‘ç–$p,cK²´ç‹¥iÃò…’5úŸê(åðõo¶yæÉ[º9êÖ“ôŽg¨­%Œ‰�h7‹%MšÃ!éïQµ…„œÿEü¦Ð1660Q /µ)-x<ûT–Á‹ïÿØÚ𥾨ñÿneœA°RAüöÁÖI—J© >³¾9é‚“R‰ZúžkÆ@ó¹ø|.Á÷Áë@½Águ�Æ@ ݬ³ÐšãûJ¯±up¡·iʸšbÕÂÞ‘Á¶,T- Õ4¬Î„ø'|iÀÓ4ë /— nR¼*jÍXt(ŽÙ u�&¿˜—†­˜ÿή5r™˜V…6˜Í(ZíDãi·ë(·fÑ#ZÇVX­ìX¥FpñL@Õ;§~h8u1$1†FK¶Ýïî½NÊEÍôBØÓ£t­½Ÿ:�¡˜×=‘|ê�2Ÿ|ó˜}ìqÙœù>Ï^=Çïøãw‚�ôWÖÕé†E‘uµä§¤›¥Z"•·Û kÙÒ:v7ËE�€·Ïøìžt)ŽÚ\ž‹ðóšR^έ“R™´–i¿eu3—eˆÙ„UËšW�yìÛîÞ8+#ÕÞ@7;VëIïùpÓa’Õ¥_©Tô.”¨ë“Ú{“0O�bN@WÖ"T ýPò�:žhO 9ÍÌBÄ`Ÿ˜£¬¤!˜C}Vše8z¶Ãž­Ù^ZÃ@U([q’R}; +µÍ ÈfmÖfmÖÝ0üîïžâßý»-T«†LæÇPêMŒ¹ž‚µ1Ö¸6ú§~ PžÉü‡á>=”Íh3¿3P«Õ¸»šn',¬D|â½¹n3F-.Í„2…·1W"Fv8ŒíqÑgeB¹´z{"ÜbM¥¨¹:±´&¸Nþ熭£6qËG<úÌbN=ºEWØx/G3I I—mc J l]aÏDeçâÉšqc&‰Ðe¬w‘&WÈ)Ö g¯DìÞ’N�49Ó’ x!oáÚ°°"¯¶%ÍG®{÷‡¡aç¤sÛÏ«R1ûåÙ(ÝT�9Ý`øÁ*ãûêt«× üöÔøì�WLþ,-úÇ:Ê /{l]ÏC‰b™>.¬$¼ô¶Ç¡Tøî‡ «’CaFm¸‚U£ïÉAÔë«(6/|«Ãߟ»N˜~]wқƔ’¤êŒ«c#¡piв°Î�7m/=fAÚÀx�ðâ³®âû?^dr¬ûº&åÍHC˜Ë®ñTßåóÿܵ_·ßÈñ»_?ÈĶqŠýU2å¿8[†jeÝ­+³œ]qòJë¿v©]éæä7ƒOKÖI£µßÍñ¾ožèH‡Úr¯µÂdñQ„ /P´=‹F[ìF÷ns°láý.Ï¿Òaë¨M1¯8tŸË·ßòÉe4¶ –ªc&Õ:uȽlBZ Â˺ŠZÊíß2bKœ•æ;“ZO/Æ×œS­ )<ÊìòvBÿ÷ùÒ îrðÙF4Z† Ó!&�Âu°±áº~·åØŠv¹œ½*ÿ~E36`Q.êÞñR@Ã+ñË­ï_žÇgÏòÿú]«yÃ{i-f~%f°Ï‘ãn‰¦'Œ åIÃ[Îß�C‹¾ÇuTOûæ¥.T�Ü—íý½ý;\.̯̈́$T‹)Í-½ü°ëÑÇéËœcéR# ” [Æ‘¼–�û|V¾ûW¶�alhwZsK¢RíœkKøeÉwo­žn@nò£�–ÄXÅI꺥L€4Z’ýTk& Vh­5R‹ôœlC^zÛ§ÝI˜_‰îwozlÈÅ!ÍÃMcYo�ÍÚ¬ÍÚ¬[��4¬¤÷¿Aðg¬¬|˜ÁAÅ¡C­â8áæ4,ý‘§\çÐÞܯ�Z}¥¼6—#ƒÓµkŒ¡ã%¬5 dËÝxbg lµ¹<‚2"´¾24a3ºÏ…t²¸rsbŒ¼ÖpŸPM ÛÔš /ñ(æ4¶#^íŽÁµ±à¸OÿÃYÔÑõ£²Z¿ûMHb¤9ðÓ©²‰h<:æaŒg¼ÔöT&ÎPk*ꎄoVÕ’lBº9ÇÎ䲊¾tëãØP-ë^^H˜>Äë­˜Ù¥˜÷ße¦D_Ysþê:Ë[cd_™ñýy8Ñó€û2|á‹ >ó#eÊ%ÍW¾Ñfë��c+žÍclÐ"›ncÖ©y¢‹ùèÓ9F6PªŒ� SÆ œI¼ª�  ^[:–²yé�÷<�etØæVÃ_¹ÅöQÛg¤ZC€ÇâJÌè€%NeZ#‚Õ´ÁMä|y©SP± Ù=)T–¯½ÐæCïË Amxms¤®)ï}$biþöLÚ T46Ïú¾ôZŽ“y†ú\þýóÔ·ìAáT*¬äŠœØ(ˆï‚Ç�bq=–Ýþ:Žùë+1B)Ûã{“&h5êDKKüìäIž=t“Äs rájƒÁªÐ_ÊÍ÷>[äï^èP.&¸nj+kR BG,{¯ÎEÔ îq{–­7ûžh•­D«RÔ”Š’:žÍHÓë¦YŽ-Mn6«°8~: Nd«ÄŠ?úíçhu$ž(Œáù×=WcÞÿp–¨ <ÌwlܼÁ—�@µ¨™²è¯Xr: „(Îò?Ný ÇyT6_žÇöóg=ñ9Â]>ÎM–¶T/£§›Æëú„‘ûŽ7]w.ÇV=c�ŽgÞj©•ØÊÖ[ §C*%z@pçv‹þýh¯‚¾Ò¸n.º sƒ%äÈ€ B2ŽÌ04ÔÛ ýe}Û­MY¨gqœ/!—½uXmW3F2téQN}º\ž�ÈfÒÍNVþwy-fˈÅ`Õ"1?Pòšé…ˆé…øš{Òúû“PÈŒ£©ù ~�ÚNoR°6k³6k³îŒ@× ë¹çB~îçþ Ëú4 úÐgyî¹ß¼Á$ø±�çòOÊÿÊ–»¯¯,V—ÆÀâªÐ�¢4€:º„(à/tصÛáÐýœë'«é!¶)�tüeÃs/{ öÉvǶS�~(ÇNëu§ –gÐüî-Ìží�º/}­Å‡Þ—gçVçZ q 17ÜÈ\žŠ(DÌ›Ëj"ßðÊ‘Eú3ŠªcS¶,þÓ§ —ùż¡²ËazZñê›{éØ#t¬ M üât_š_‚|ò7'™‚“îæäËáG¡@§­6Ô×ø¯#óÌÛÌ·Z”›ËäO¾Äÿ£6_}%!Ÿ±XZqqœ #;'ÒMg" m¹sþjÈþ�.Ùô~ÐlËV±RÔD õkvN8˜YÈ;¶$u»¶"ŸW8C6¬< V®Fx¡!K1¿²¸š�MµC¶Qr1§9w5¤�¿¹3Û�pâ½Vbä×P¿E¥$fùœèn‚¸Ä¿>ÿ¼~àa(•PžÇ3—ÎðÓÞïqÉ^â÷þJñO?V ¯üÎ&×N��˜¤ô©H†+5 ¼] £1pß[Ë©Ñ2= DŠãôõU.hÚ—¡ÕIØ6j“Ë)Ú›¡uä+$¡ÆH-ÌM:ýMM# ”½æ3ØïÌY©%wô`rÒœ–0u4l¦÷Š�[ä7rŠ}Ûdc´´3³Óh `»:F06$�ÒfËEͱó!ß·Õ•�ƒk°-C’Xx¾4nu�©k¯Óëh±\“DçŽgX©Úç0>tû[³109bsöŠXÀî·á¢ap‹Ãh/i\±¸_B:¾ ³y°Dé´ß°´óôÁL�úÕ_JÖë'|Ù/“ksÄcðÑI:ÖSJ@ˆ¹K«Ðé…[Û$ ©@V’›Åo_\k>òÁÍÕ˜•ZÌÂjÜ㢿›Mȹ+!cƒV/çÀu$€±PÎðL^óÚ1�ÕFB³#ژ녻©ÁêÆMˆ&9Qcøþ ã‡ò¨£PŠ 4üÅ_6I \œ‰bé·Ö×Ó0ÆZK°ßõdnC:úµ×ö1›“Âî`_~EËT� �,¡ðAÙ\¾ò¥ç[üËŸí¿6ÅYɦ¥\Щ9€&ñ ¯õè/k†ú$øðÒLˆˆÓR÷Ü%‰€Gc` ê’ÌyŒ>3€zy¹¦_x¹C>§½þúîíÕ ;Þ鹈|VcÛ '£h5×ûâ«Ä( V>F�üs&Ë'É´ÿ�FóíÔZ1_ÌiVf,íËâ­iþà/û8Q>€å±m}¬:Eþ . 8énNÜ�à¤ôõ¼{?›$0õRâµ÷#ló;¬}Wgm�ÚåËüÊàYªåˆŒöÑI/âZm*Í¥™�¥Õ„ý;3LÛ”‹Ò˜ç²HÝnêxªåp²ŠLAh1fÐ"ñ!œ YnJÆ&Í2dƒB=_ÄñZ­Oú 9ÅìRÂŽÝQ¿{0’$ðÂmž>”à‘ÒÆ²Ž"Q%~ôärì�‡v:<{ù ÿ{å?SS Úý/ñ°mÅ�~¼ ‰ëÀ÷¿Úâ�]nïûF¦—#¤×i·­î6ɶ4aDD:ÞÍ…à&vo³ÉgU X�¥:2? —•ÑêÈFæâtØ3”Èf¦"êÍ„gei´¥IŸ[Š¬Ú·Ì׸oûºíp»#Ï’F+¡¿lÝôT`ë˜�m Ø�ðBxët§÷<Êeõ¦ÐRÝTãâØŠbŽžÀ^îÙ¢¯©%ÐòFÇ´{N¢XìÂsÙm�ÍÚ¬ÍÚ¬;#ë ä—~é<÷ÜÓߟgttïÿßüæÕë7 L.k}¶”×I.u¦É¸"J,.ÏÄ=Pk%Ô›1ÓÀ=s‡tˆ=[�žæ`6\�˜´»ß…Aoã„ÂÙŸ]Œ´z6³]·«åZŒBÜ�6‚‰RAã /ñxú`ƒoy Ì`YëoðN¦u bæb^ª.ÍEŒ…¬pÀ ¢#h¶ ö¸dŠšòu¤ Wb:®áCOäÈeäß:|̧і­M¹hÝö�q×-nÃT¾´v{ázwókLJ½J�©ö¦ÊåµxÝ®7¯%sÔ–{æÈ¡2k'$‰8'º®¸~�¹29b÷î™Ýa[Æ•A‹Pj¢X¾6›d³6k³6ëîH h._>IÿcŒ�&'wS\Jh“Ëè}Ž�ѩ듭¡ºw5ºó�Éç¤Ñ[©‰»ÎÆ ×�€�í㶸Ö$†]“`®·9Lìuñ�ùœ¹÷¸üÕ’¾ÎuËPk’Øð]OånØpöÙb®¤Oæ !#ªËqV¬Ôo�Ê®œº²cÂatÀâøù€NÇ�M§½]€2Ü/+‹—QŒ?�E�ðPwùÝ€�("uqÝBœ(¼yß<³?w y¶cârYEkÚžääÞ…—Rbpaº{ìœnâî,rêbÀÈ€M.#B¥$�z£ÅnËp˜ËpGBx€Ý[N\Ib`2]㙪÷�1j¥›�üúï¬ò3ÿ¬*43#*~6¥E†?ùR‹‰a™îZ)½¥˜S<ù`†ç_ë09"l“†Ð�¹"”cÀœ¯1¢û~ßêÛËéÆÌáùoµq>PØ L¿y£Ûj®LEìÙê¤îDχ•zL.«ñ‚?ç©ní_IzÛ´0”kÊåç`bÌ⇿·˜$׿ÙÙ ì¿.!þHWIé_zéíǯD•Çx«^¡T)ò4*bÛÍ9¹8é~‘' ‡»)ñQOü•ÿ³ÐnC£ ³ËüîØUîlR*tPƒMá,ã³—Xm€jÂHD–L×Cù7ÛbÛ_ç²¶g(äd˹k«Í©Ë!¹¬Â±µ8t¥™¹¬¢TPÔ1ý랯qqêP>£XmÄŒØ|ê%J…Ôò8£…ZÙ‘€ÂNØÏOœû!޸N‡œ:ɯîý=¢°I+ê&ÜC!«°1Fñ…hñO>R ZÒ¬Õ“ž‹–“ZávËZí?„BîöŸA,Á…šæù¦—ð=·3ÒoÝrñÓhVê1a¼úh�ûŒç ø˜[Ži{ }ei»%Å"›Q¼vÂçcÏäÈeD{R.ʽz-5}¸ÙýGò8„š„""ï&§�ôÝü=#› ù9zÂð¾²Õó‰è¯X=§7/ˆ)Lìßëpz®sa"«wªv².rTB/ÛøÞhÿ܉å~†¦7ðØ ›µY›µY·iXëÃå©©/°ÿT*1;v|xžwj@,?0*Že'2k]]&»àyÝf¸ë e0¬ç-Ü 1öns8}9D¡Ø1aÃåˆbUsq&brØ–­KF³Öˆ×]·C£#6³»·Üúq0Ô'ÍÉìR¼>ð<æ3ô`6E aj|ó@ÄùeÉ6ɦÎN÷íp©5%(îðÑ�RAÓñ ƒ•ÔŽÒØpÙg`Üeì`s¤ÀÂjLÇ»7²ÖL褹AJÖj1õ7š&ê>$S+ËïÄdã&äôeÙLt<Íô‰eû-Jy„Z˦£K—“©¤¡Ö0LÍÇ|øÉ;Âw©ÇÏ‹+Z·6É}N Õl¯qTþÓï¯ñ ŸíÃ8vÂg÷¤ƒë(~ó uû$,Ò±¥ËŒÒäcqűØ1a÷® :žPö2òºgWŠ ==€zq9mX\^|¹ÃûžÎ11jßt‚NºB,¤9t]E˜@ËKh¶¡ÞŠê³Èg ¶½>�ÖJ|�ÃÔÕ§ãÉvf°O³uÌâü¥ˆz«Å'Ÿ-¼sªýûè%ÄK=s0äõ:û|“]®f¼hó3Ce2Ù"ÓK.ôך¯®íØ�3<„U©Ð¸>!¾›ŸÍÊFe£-Vó“qQ(ë¯ >£�6¤EÒj‘ÔVñg¦ù©-‡ñ�z3¢Þøì÷* "ãv…ØÊ‹Áªf|8ËŸýC‹V[ P륑K#Z*hf“žCSbÌ9Ï™T(ÿõà Ù_`°ªí—4ùBÎ¥·ñu6¤¬;GÏ„I�5õiÞ¸ïí6Ož?ÅÿýÐø- 4Â$�z;á¿|±Î?ûT‰»]þæ›mþñ‡ œ½®;H96…'Ià·qwK,‰E0ÝöÂX´•Û»ga`lÐf¸_S*h^?`Œ\{­,×bN\سÅ!Šäø[Z‘uÁ¶4®#Àa¸ß"N H“'6'/D‘œ£ë«\LslRФ¡‹Ã}·L»&ÅìÂu-O(W7Òòu·GÎúfû¸�QÜQ öïp8})$6†‰!ÃÒYiÐ 9�ã@’$´:ëBǶ/v�˵˜>–½£Ã|V2I÷Hñ¼_„é ›Ëkñ;û¸ô7„²C�þ¤a[ìr8¸Çí¡½©…8ØÛ0è(ÆÊ£ŽHžÆBš¨~·µk‹ʬÂÒâæYò¢qšÒöäA>: Z‘•ZLœ¼» G)Ñh\šŽhõkŠ9ùÕmÒ,K±eÄæü´X,{�L´g—"žxнmÙ�^ïÀ—“SËæ‰ôŽNÑwÿ8£Ö"\õÓ­„âwþ¤Æ�ÿ`™L:U½:Q,hʵžÑ‹^¨Ñ6Ì,EìÞb3Ü­­h_YÓñ5/½íñôA±.5—š ÛƒïB½¼˜¾A›¯~³ÍûŸÎ±}‹óNj�ÿ'ÿo�‡öfÒp7M£GJ8P±˜]Šz½8V¸¶Fk¹ŠÂTˆ\kÆìzj/#íK,Õäóž»òü+m>ðt~}²ŒÜf3cE.#ÎKÃýmZí9-×ùŸ¸Œ ~�jÉPÌ%¬5³ÌÖ 4>Š×®P‹ üðñ* ß$!~#8æ€?éÄãEüUðCBëê´¡Ñ`ñÒïªÁj‹ÕåÇ.LóOù*§ˆ2þ§Ïäø�?í�Ë:8Ž„å­Ôb¼ŠyÅžmvï»xy6`tÐa¨o�ÔÅHI" ³¯¬‰c ÆüÌ÷ôQÌ)òY�ŽT�ê\ò��×d8Å~¾û[?Ä«{î‡BÕnóÉË'ø�û¿@ÔDL›žÛˆ� Xüù—[ìÛî°w›Ë_|µE± Hb˜–mBšÞuº°ßP´~£Ú:j p3ék‡â‚§ïˆA/류Óìßé05ñÚ ŸÙ¥X˜%!�À5†Ž-`¤�ªYw]å4AA¶§íÎ�/FKKê»Ð¯„¾ºZOné®Fú^›ÞÜ D×52pcHð.ÐWÒ(¥h¶ �N”Þ¿å>ÕH T,Öâä8ÜoQo&L/D¬5«uù{Ó 1cCÖ&Ù¬ÍڬͺË-ȵ ä‹_lñýß?Åðð##ŠO}j/¿õ[§®Û‚¨©9ÿ +îG ¹ÄÕZ<æ--kú®½•r•?ð˜ÃâjBË»6Hên6!_;ÜâÀž»&m 9¡?86”Fl:~Âj]:�fÂJ=á»ß—¿ãõ.™^Ø@Ç:î3ô@†ŠõMH÷Ï•‚“CÆSñ7 ¢”:²Öûƒ»ÝÞ{0Àø�Ж0°}†K>¡aì`ަ›�•亵ÿí+60µ “bä#Úo âj¶v>šc²¤Yº"Ÿg¹Çß�+IIÀØ`U{º4ŠbÙ¢DR†O_i¶ +�„‡÷¹”‹÷æAÜÝ„¼vÜï…#€ã3ôÚɨžB]ñPȱøÏPCq÷yémŸñ¡u+à8µnµ–×b&†,¶ŽÙ7ÜʌٌڽkÄà\�¡8fð™axiE„ÂáÛ¯vÈe#7¦÷[=Z‹•þèïšlw¬jÎ\¹:Æe_“qeÂlLÒKò¬Zì¹o 7y�äí“é¿ípq:äùowxöÉÜ;¥ ·"qL�ÛnÛ`Ù ?Høêá傯Ò­-”Ö 4cCðÈøe‚Ý“�íÕ]:ÜáÔAEÛ·©·4‹sН�diðA¢�QÂR•Z®Ä NqCÎÉzB¼Éd„ÚU)÷�Á/' ¿Ü¥uåÔpÀ_ø?�½Òƾ\£µ¸Ä¶¡#ä2 –fÛì\cçÄb*ð—k,ŒD ¼²–pe6b|ØÂ²ok±o‡Ø?O 9” Z×ÝÔØg.;�¬;E>£È4‰«ˆ ­µ˜¹v™|ìÓ¼¹g¿|¶v›÷Ÿ?Îÿµë÷HBÏÂ|_îQmO¨H÷ïtHè’øâ›;'lK²rN\9~>¤ã†4q—g£›æn\_Ž#‡×¤ÛG?4Ôê ‰QX·¹ï÷‰i@ÖUtmÄÃH²’¶�‰£áØ œ¼àå4¥‚hUÜ †Õ~—ê�¢±’�p#IZ/æ4_{¥ÉûÍ¿ãslµqR|Ŷo>”"Õº¨^°hÇO¼ñwY)¸8aoµÅù.R=kp?QùjMîÃÅt›Ûì$¼}ÚçcïÉF°¼&y&KkqȪM²Y› /' IDATµY›uÏùõâ‹ÏöíOR.ÃøøÆÇÿ�™™dáÏ¿â7'G3oe]õD 9™vyêm/¡�Õ¼ïCy/†é„_2îvð¡' ´Rÿz×–k>«©ìÉÐ?hqîBÈ·ÞòX©' Xú€I§–é¥Ò2ít,°÷f:�5Œ6/W,Ë¥RŒ²¾# ç±2;ôøÝæÍ ôØÎ˜=…ºpe¶�Z¸Žæ«¯xl³ÈeUO�"–¤2a½:±oÛ­‰õZ x˜_Ùð.64†Á§GP/Íõ4!_±ÍS�çØ>y­0ýÒÕ�œÛuäR$�áâLÈĈÓËpyd†£çÎ^êCƒn’u*%Í`ÕbþåÃ�¹ =òê�—Qh”Áþ—_lóÑ÷_· ¹Y\�ñ:w åû§<ú(Ê^Bê>aÀ`0FáušݎÝÄ€¥´òÐ$¨$æ©­+Œ�¥Ñ ©ÍEd3¿ûðnŒ3vmçØõ…>˜˜�„øriœlÜœd2�Íb´æD÷¦‘nNN¿ÿC|9 Á“”ø­:OQÇöZèV ³<ϧ·ý eßPÊÉ=£íÃPÕâÓ­Rȉf¤›ØÝ¥U9¶l=ŠE�UÖØÏày†ÖBLÇOÒ�k‰5ó£¼¹w¿¨V‹GÎç—Çþ~Ð&H—‹«ÐìÜý&¤Ûèj-“}•ú¸/©üÂÀöNe>²ßûp–ZSôæÈ 9Ù„$iØ…90|¿ËðN‡ ß ê³q ,æÖî¿þj]Â+·˜ðOŽØœ»'3é`®Š®aì‘úmˆ˜_æ¶›�$Oä¾²4/Is+1sËâdYª7Eì+[¬.Ç$¯tz<ϰuÁë¹ÃDï$’XÞ�1ëIðÖl˜ËWçs+¾­ËEáž/®Ä׸�ÝkØãòêqŸ86ìI¯buäîî]¼qê8}›\:ÑŸ±(äõþv·ÙHX©Ç|ì™ÜM›•ëk°ª™YŒHƒÁÆ\j1¨aà=¨W怔ÃK/{¸ïSŒ�Ù= Ð阿ßÍ*Î^ yîåÛÇmr©PdËSk&;âù²Iì:ªíßé2·“`ÁáEFOzè)8òm@£p¸8ñÒëÏ<š½1¹ˆ86òZ6X®ÂOÄÉKÀ �‚K¾Ž"´`u5ÂmÌÚ1øQ7B6Ad¸231šáS.­;�™ëñ?µAo /Ësäò(�A¾Šïùù™ TËëà$›y8¡Rc8 íŠÏÂÂ�ßò?Ýsì"¿.ñß¶®àaL ?\fkánÞ&“µqm‹ÐÖÄÍ„úl„ç“6·i h5oˆ_XýŽìÚ×Oœ>Æ¿-ü�צɽ*JíœÛÃJ=aj>b°bau…óŽB[ÇZŸ¶¿zÂã£OçÓÀNEÖ5ضèèf–"ÆoÝêÞ¿Óé¥Ì7ÚrÞäþtg®R^õ\ü¢ô3× q|m.†“‚µá>KÂ)½˜­#6cUÍ�µ5˜^"Œ»y)âÜ–¤÷$/+à�8¤ Ì»”µ–'[e÷6ÉéŽ-÷;/¥ÿÖSg*ç&‡Ikxp—+•Øðö™€ÅUq œ]šZÐtízu^±Öcˆ\VhxJiÂÈâØ¹€Jq3 }³6k³6ëÝnA VûmŒù)FFbÆÇ øuÖ# ºvþâ+ÍÏ=|Ÿ3º{köçû+Úh…ã‡âz2¿œôh2C;\ ! ±slÜñCi£ÄÇŠV'!7U^ë$]'¨ô—¶ï½Á­5³K2ëµáTÀÙ9áå÷•…b0³“O­0»"æZKðz¥Y'¾�Ÿˆ[Œ.¶°½¬-Ñ7wŠŸ~ßEü & #‚0 Ž<:�¸ú5:E~ÕþQŽìÞ'¨ÙdÿÉ£üÇ-ÊpÕg¤ßå…7}’DîM¾ŸPo™¸Bµ,t¡®n¶äÚ´,p‹rAô'ÆGaÙ²€#‹µæí5v7IÞ‚ L"C£e(îL?22`­›4¤þð:ðq-(·˜¶Ù5)¹/å‚fî¸ÜǺ€4…âÔö £ƒ˵˜Z3aÿ7½�.ÏELŒXÔò÷ëÍä–Ãc`Ǥ„Ú–€%?¤—ÍqÓ Ošfî:Ššo¬Z\œ‰˜]J(4—f"¢XøY·«k�B^Q*ÊvY+E'sŠÁªÅ¹+Á&Ù¬Íڬͺ à¡nB.\Xe×.”>öX…/|¡Û=è @%¹2Ÿt®ÌûÓàÿo@å½gÞãûÆzãThýú¿ì?¸'3 ÀeÞn£-@E° �Ö�Ó±Œ‘tÛá¾4ôPu˜#âÄàò�ôCÛƒ¡>uÃÄô;­jQ3·,›”+³Â�¯–t𼬨2j �,¥Å4;†ùå˜Éai¸î„£- $"NäÿBp#OåP¯y(3¿|cRo% ÷Û”º™éûh§– OÌr`�ÛkZ§D@úèþÔœÿ�C—ql8Ûe³´ÅwÌJyÅÒZL_Y“q,”Þv`¥TŠ8ÁÄ«åÉ6¦˜—P°w[JÁ3e¹0rq fcª%Îæ3 ·µˆåVâžî£Ù‘öb× ën_:–˜ؘ+°é{jux”l¶¾ùb‡§ŸÊ²uÜáðk÷º¸Žâäŀѻg¹ªS*_7xma%aï6›|ö� Øø�řˡ¸ª¼½ÄðÇzèÐG>äQH8Ü‹¯uxï9ùÆÞD¢ISÉmpsª'ümvÄÜ`iUlKG¡TBËG+ƒIT/¯¡Ù‰©æaÿv—ÕF¹KZÃ{Ü€ Å “â7ü¹Rpìì ƒyC_Öf cñ‡?³‹/òÛ_œ§Ö0LŒV¡ò¥¡Qòå N¾À�ŸLñ¥TŸÏ‰RúúÍI©Jñw]p’¦Ä~”_õ0ðZ°¶Æ¿É-µ[4Vë|¥°‹s;|¨f“}'Žð+¥/PÊ5Èg%tóà—åZÌÛ§.ÍF\šEÈÜ’áK!'Í­ë-I+zy>J)´Nƒ-Ph¢H4 ÍôBtÓpW7ÍqE�JhüÀ°Z¿³Í£1ÝM„ {ÂÔÚ¼ÕIR7²[Wœ�RÔTï¿å¾,yHËk1Ž-"õŒ«˜[ŽÉe÷ïtCÃW^öh{"Ÿš�(æõ-ï§…T{²1ÿcf1º©ÝØ¿C´i–^­O/D=ÝÈØ Xö.­ÅTŠš|FãºðÀ“ŸbëÓmVÞü¶èS§±œ«(-¬Ížb³6k³6ë®z)6l6d¼ðÂ*?ôC�Q©” ‚,­Ö2çÎÍ]T ×<â+sñÕ™ÅxÚfþîÅÎÙGögvrº`)ˆ;†¡í®K¥±~h¸~.z#¢Òw„2 ŠW ™Â·Ú2B¬hüÔ=æ^+ã*.NG” š¾²4µÙŒˆ-³®8À´;òº‹k1Åœæ¾Î]½F_Ysú’$‹ç²¼íCÿCÌj‚f=÷¡w�c8s%dtPÕZËT¿í Åcµ‘¬�ô$• š ‚«ó¥‚ÆÖŠx9¤º+KÖÖ$^ŒV ?Hî×¾õf‹‘™DBJÃJ›i/�ãTo%TÇlìÈ Y�'ª¿bqn*¢¿¬éK¹èÝóT(k,üô|ÕšlfŒá¡}™wõº…œfj^/][‘´c¬È£òЬÕÄ ÙŒâÔ™€/üM“¾²ÅP¿Å ozÌ-'ô•%9Ú²ÒF-5 XX� c#!j7™à–òš ÓQ/ˆ2®­‘+,SÚõc$õãè$!›ÑLÏÆ¬Öc¶Œ;×ä"vÿÃó 3sU‹RA“ËiÖj ŸÿË¥œfç¤Ãù©­»NCxã™î÷šË„L©�÷æQTm KPà•Ù¥` jñŽ/;ŠwØ…©k›Å©ùÇ+ÜjYÓña¹¦xëŒÆu2lŸpØ;ºÌž¾+ì,�aWþ8ÿzçÛüûCGø_&¾ÍÏúÏ1ðµW½8Ï}ËsìZYbpe…«k ètd ÅòMQj òP­ÀàLŒóÂÐ.¾5²—×¶`eß}ÒíÖ|êÂÛüþƒL§S§¯d¥ô%E£•º¾-Ǹ¶fbÈ–óßgse6ÄÓÈúvK)"£Ã6�=\ âØ…) ž•¹ˆÁê�ÛÝ|V³m̦ZÒD± 0V ož¨noþ°o»è‘úJVšÇbX\I8{5¤˜×·|�8ŽÐÄ’t+&ò<Ô›\¸\Kê Z×�®‘ZíŽ Ù=7=/0D‰Ø¤ç³ú†ÏÛ†mr\£HA +b9|+¨´uÔ¦¿l¡•PÔ×DÒ:¹¬\o³‹1A˜Zgçß÷‘¦ºDûªG¦†+©cÖZ3Q›d³6k³6ë€€â±Ç–زå½hm¸paˆ·ß~yãö#ý™˜ëEìò{±‚øø9ïÄÎ-îd1¯+¶¥ˆ½„áí.ZHÁ½ìÔíAÈÕ¹ˆÅÕX½ncÈJ¿Ù–‡À£�äØÿh–¸!Á`Á»!a}+ ­’P®¾Q›¡Gè3¶Vœ¹26hõ’‡ï¶†û-.ÏE„A B‚@ÿCYÌJŒ…£ÅÕ­eÊß_¶ÒíGw”Pk&L/ÄØíÞ�~P*hi`‚´ÏÒŠx-¤²#K®à·¤Éôî„+õ„C{³=›a p“÷,“SC½i(�¿·Hå¾~ÔR[( étô;q×›†þªœ«\:Îç4ý?Nn|˜|{š\zKy �Sï^ŠB¹¨™K·+®­0�¶©šÀ^kbbÃ…iáýg2Š…å˜¹å¸'0·S]qɱZ®%X–º©‘ÁÆïH!'ö»¹¬Æ¶a½EÖmSÞ÷h¾ ‘ÆuWg"–cv\h¼ôº‡cɆ¯¯¤I"¨· ‡�ù옰©5{·9\œ i{"J�SW¥nsÙhÉt|ïDBÆ3Ú�®/aÂ×Q\¸ᇆ‘®vA݈tÁQ`xáu�‰a¹ÞË‹V;ᕣ秢td§ç\6I®£¨” ¹ƒïÁz‚xú0ûÆ×xfäOdsÐû:;®|™Oñiïß³z”�-åo¾qVVa­Íæp¥k"-”|¶o‡ÕU>øÆ·øó÷ýüÕó‹L Û” ŠJQt�ôžtâ|HÆQ½íƒyÚdi~[íäšÏ¬T&eßw} Ý|‹NSÜìÂh=…|¥f¨–n ²®bÛ˜ÙJ–VVj1ÙÌíÈØ�EÙ¢R²¨7XN-ÄÁ­µIJM´XZKèx¦÷úµ¦lôŽž ˜¶ÑJ6~]P›q4Ó‹1�ìÏô»Ù.]ñü�܃'‡-FúåývAðå¹?¸Åƶ öàýeKÂ;†™…˜z˼ã~0Üg±mÜaÿv‡»]¦Gçj/ìWd“¿¸šPk&j“‚µY›µY›uçu3–á¹çÎpè�¦TJØ·oÛNˆ"ͺäzÐ!û�° ¸—ç�ÿóÿçòüú¿øÌ¡½îV Æ$Ã;Ü”×.÷.-áft¬VG¸•¢æÄÅ�¡ªE¹(“ß$1tÃ`ÅÂ[‰©»Š±2¨S>JIXà½&�k•Ú~¥ý‘R`hÎ] /�;ööR>æ�gYkHê»áÖ“·›Õž­o�ö cÃ}Û…Že ?•Ã{©ÃÚÅ€¡>Kì,�„b>Möw +5q»ê+Ý8hÌî—GäÔüËá#MF–Û]@�k‹«ñm)lJÁÛg&†m 9ÅÃ÷¹=°ÚH¨Å G¥[+?0ìÚ’eé´Ç Nxb^[ì¯Zj]ün*I¯à®Þ¤[–¤ñ2*§IbÙ” BéX­'ßBÙ¸:a„ŽuÙGYSÝÆáÏŸ¤¯¬ÉgE‡ó­·|F„ZÕ�wC× 3 1ßõÔ�…4:¶bû¸Ã™Ëáº-ñ™ÓŒ%5úêè—@‰;Ö•ÙˆÃoy<ñPöæS!§‰ƒc)쌦^�ùÒKmvM:éy”÷ùôÁ,ßx½ÃJ-émmKl Ûžaû˜d&˜«³Œ˜˜êc¢Þ<‰šmŠËÓù¬f÷ö H×±°®ù JC¥dá8²UPZ&ë&µV6ijlS#Û™NÜ‹ß@%‰X¹ÆÇq¢ˆ tÁ…Ì4ãE-tÊŸÈaÔº þðÉo]zPñÄÿÂL¶oI¿x¿þà+”² ¡¦YÙ¬be-éQ— 9‡×‹yÑœ¹²¸*SþJQ¶¨ÿèÐi¢Õ‹økb¿œ0 ½Mˆç‹˜½T½ÅÆwÿNG\鬮ßÐH-ÑoW–ÙŒ¹® š mêv?oiãբŎ ‡…•˜#§æWbWc®ÌGÄQB³-ntn 2,K‘Ñ`Yb¯ž$ؤ9Fš‘~Íáã{¶:ïøNX–J7â’â‡Pkš[Òy³i�¤eAèɽ©ÞJÄÔÃzçÃ1ãJhb”9j%×[-­Ñ6Ì.Åô•6)X›µY›µY÷º¹vÙl*>þq›Jeƾò•!:�£l .ܰñØðßÑu¿_¸ê�˜uöóºähEÜNÚbKs›k&á7Ú„¬ÔÊé†A‚᎜ X«'¬Ôe‚Õ_Þ?!èÈ0¸Û%émB¸'MÈZSx×¹Œˆ„µ†h-¡‡ÕFM&m^íŽØkº¶ºç¦vdÀƶÄ2ã*Th—cNœ è+Èd_hK¢IÑZ>S'¥^]š‰xò@öŽPÖU,¬ˆÛ‹m)âµ€ê¸K¾èw",¥ðCs˰Âz:õ®uo2Z-É#øÂtÈÔ|ÌÒjÌôBL£�ÐW²pHG‡TF¯ˆPÕ$2í¾ç XɆ¬R’&ÆME£þªGk®MÛ3øi�_Ç_=¶õ�A!¥‚f*Í q…i¾ýÒ"DP-[½œ‰fê„å¦ µ„Ì%Ô Ó‹‡öºd3wþž´–föÔ¥�|Vœ¾¢v‹¬iP|àмˆ Mº ‰™_ŽØ±E6!ßðÚÛ>Cýż¦œW|îÏë„2UÈê­.Œ$(Ñó+1Çχ̯Ä\œ yxŸËôBL!'ÓëØká´ý•[·×¹¬bû˜Cµ¤I 4["ÀÿÖ[#6 ¥kõ•®¼UÚµç}æá| $é�Ë u¬»~ûbiصŦZ´°m±Þ]­Ç,¯%·4¸(4#2hy²9žYŠoú3:5 0]Zi”nþ:20˜ZˆD3“Q›¬ÍÚ¬ÍÚ¬{ êš_ͦÅ?¸ƒáá°mÈç[¼üò«Î7ñ ~%+uâ/½Ôyó¡½î¶B^÷;–"ö ƒ[,[aÒÀ)ß¿–Ž¥”ð�óYM>'<à$‘�1bYùä� ;'$õwaE•€Ž »]L;A›{!ç¯Ê”±ËÓñÕ÷:"¬öƒ®ð[\b 9uWˆ×ŸKËDpyM:ÿ —Cªé”3ŸUô—,í”XßúÔ ó+ O<˜¹+ X6£X\�QJ@HÔˆ(Oæ(T\â¦Ð±ºA`7z¯g"†úôu:qû™[Šùè39vN:ìÙê°cÜáÄ…Ç1gÒ6¸xTö bÕÚ#®XÇ¢ʧ™4:5Œ#CeÈ Oš•z+¡Z¶Þõæe#ª–Ä¢7Ša¥Ch¨¦¢û|V‘q5cƒ+õË’sè¥ØéŘ½[�u­ÄÝlê´4Vg¯„d3òùÃv›lÔ¤|ð!Tp@së6°möw¼W}™··¡ÕJ(l�–P—Z�ä†Fמ?ÅÈ€EÆVq’æwDëTŸvJeš^ˆÙ:fã:2Ykˆ¡‚ömw)å5 « '.„œŸŠBÃôbrGú×Uls(5~ ÔÖ…Õ}S•Œ«Ø6jS.ZøéVvq%Ió?ToXá§ç0ŒLª{‘ŸøÃ%¬�Ã3ÕÈ+ym1AèXj-óŽA�Ö°s¡RoÅf'aaU6C·2–xp·K¥ øFÛ°²–pæJDö&÷Î\F1Øg1Ü':“ÅÕÿ¿½7{’ûºÒľ{ïoÏ}©}Aö…j¡ÈnJj�H¹=ÖhºÕã™÷<Œ~p„_~ñƒÃѯ·çÁþ~˜±ÃÑ¡±ÝÖhÔ¢¤–Äá�A…BU¡P{Vfåþ[ïõù™UÔô–'AU™ùÛò|ç| �ºj“ÎE»K#ÎdPƒÔ N B€ÍêßþÛüÅ_¼Ï3±³SÄíÛ÷Ðé4 {7"ýQðÓßuï¾vκ’öXÆ q[¡@�IQ�¦ kgS#¾}ÅD®¥:« BÕ78è9 VjɾëNpଶý õ}´¶• �¶tŸ�0‘KÓà¡Õ‘X«$}]ÜA5”˜701,ÀÑþ¾˜ ñx%ÆÆ¶Ük0 ƒÔ u ² >z¡ƒßÿþ1 Ý9gHä~g—V‡¯Þýn™II#>rspÒz¸¢”(å<�÷ÁG鬇©×8mRÖÏ-S®À›×�—~-ÏáØ¬Ê>ð‰›2Ã6²eQ+„à �àì: _-DH¹4í5 ¦éð=·šÎf:>dàöý®M yâFè#ef£Ý×n¼¨f§ëÓ¿) ¬n%Ú ™õ�¸‚P¡HíL¤ðÞŸ–Q<ã!ÙÀ^)a6k †òdLà9 Ž¥ fMdÏå�U18€õJ‚ÕJ‚Ùq)—Ÿ: ‘3 “æør>DÊ¥óœNÙ×_÷7  Ëâxü$Æo?õÁCµžàçú-ॉj³#±^MpyÆFK'“&GZëN“ÿ]¹ž‰ÃöN‚ù¢s™:Ó†ë�©i¶Í°±�àÖŽEb|à ­˜!Ö« ÒÇlbf'Œ>U°Ñ’h´i£�Hz­#ÁËE ^\†Fg÷g¥¤Íî³ÏiÛb¸mxŸnÄ`Œ¡Þ’ýðCÎi«Ùl=·ÞRXX‰�Ü@�•FÊZ´ÐÏ.­Åãæ”-‘�D§KIék•‰T(fÉp Ö’`|@5¨A ê´dw ¹�7Þø33 Ó”¸{÷M|öÙOq°}¯ˆ{�ÇÞ¿ßiAýìÿ³«gÍ i�Lƒ!ê(”§ 0Îðhžš!HP¸›ê ´µÞac;ÁåYëÀU;×�ÅZEÂéѱ|…Òk6ÐUàŠ&ºÇ��®OÔ˜Éë•„Ry}…nH¢øzK¢RKpó‚�¤› ›È ›HZDk: !g-âb»ÚçÞ²8ºiYqrgMµUœ3LŒ߇êÈáXbÓñbŒ6!Q+BzÄA¶h¡¾bu+A.-ú”ˆb–¾�9ë¥À+Ôê *;¦ÍCß cÀä°��ï…°mjÌU¨`Fd¯ŒÁhw¡tÉI7!­ŽÄâ*¹Je<Žb–cþi‚(–ÔÄ4Em´H0zó¢£"}ÆCªìBÖ|¾–ø*n¤m-Ôî¹§™®ÜT‰ý‡í{y 'ÕpSz[Ã_�Å ¥Ñ÷ºí�¦˜ôâmݾ*G®)æ8î>Šà9$(¯TÜý` Å%°§\×âØÞ‘𴃕Rt¿u|r\ê† ß|Í~áíŒa�åñ�û!5烊$X{©›ÿnì"îlô·C?ÿ ‹ ³‹è–_Î…Lç1³ŸÜ ðó}Œk‡'Ç"cˆXò}…|F@pÏ%š’¡·–I ٱ㈟ ã}�[÷ÀA ûöƒåœ8صJƒ�¬×FÔº…_f'Îq~yoæî ˜åˆ"èü…Å5Æ 9pnÊDڣܖf›@ÌZ…&ú=z^1+„ÔÜ«^²½Ú݆()ñÏÿ«×á8A½CÅ dt‰�¦‚ë°7”åÇpA —¡AC³KC…ãô½íÍpQ Ÿ¥Ÿmu)Y<›:Iîˆ�R–뼺îmÚ¦>~é<ÎzÙ d£kšÀõó¶Þ¤ñþ&¨Ö�RMƒòQÊy�DM½¥ª6ä¡[΀s“& ÞßÈ<^‰Ôø 1¡jPƒÔ«!»Z�«W/bfæ§¢ŒG¿ ê—l'pŽâ¸…¸GÇz "Õnò{Ïý+Jö¸âød):6na¼È¡ѾNK"ò¢ï„‘ÂP�¦äžNϦˆº@M:QÑ*5¢nݼøb©âŒ¹´Ù,[ƒL³ÓFöú!‘!O7cD1PÌŠ¾-q’]í ¶¶ã­Ƈ ” #%B¨|¼õ©QIÅGjV ].#Ùi“£W¼?}þEk¬l`i=î7Þt­2=åÝÍFé55†Á0=j¢Ó•¯Ì•«d‡ w0CeG¢”7�ñvµ)–Eÿ¦gKÅè§;×Û ·.YxYXd[ å¼Àí!Ò� 0¨Úc¤oþx ˆ;+”Ÿ¡AÈõ‹ÂXau#ÁP�¬m×ê þ¯ßÁÔ(mDœž+�KÝ>X’¸yÑ&kÛ,G!+PÖ ïaÔš–ÉÀ™�¨~‡6!WF¡* ´a´î·+ý†öy¢ðþâ%ü²0 Ø6~·ÞÅ“ÿ5òy†fKR&O#Á“õäHûÝg�ÓÌ8}6ÆÈ `§%ñèIÜìëUÚ# àkŠ^ê7c …,Ãõï^‹c´·j}0F@Û—ØÚ‘š–µÿw¸8m"£�|³Cz©GËŽóõfFJ‚ñ,ÞÿÙ¹¥¨¿�9üYÃpiƤ0Ií�µ°ãéf‚Õ­�–¶$׿§`(QÏŠYŽB–÷ÁqϺwîIôœ>бÎŽï¾NK‹ä·ëò@q¾RÀÕ³& YÒr5:; ‰/çÃÃÜdPƒÔ ^Ù"ï¿ÿ%~üã?A6 T«ÓXYùÖ×#<¯‘Ç�}¯33ÊÄ{o§þ™e°ÔPQ ë‘ØÚ5Joä1zn¼Ñ€çPðY>CTнMìI]ÛâXXÑô¬ž xÙëHPõU“ð†µJ¢ó$¨ˆô©(�¶Ä…)㹉Y>ñV!ûUÛf�¾„�(Ì8HêÉK¥²¯mÑÐ2Èy%îÙR† ]ŸÞËÄ��7¾W€'�1a;?8!úY‚‰a�‚„¶MÎE¥ó&ÊB�£Ö¤L‚?xÝyéüÎIÿP©%p-jÒE«…ÜÕ)˜IJ;Ôì¥cõ‚{[†^"|RC¿V!·&ÏaN5]›aî ]†`ˆ7xS2£#PÕ:ѱ4Ø{Ñêø Ëë´Ù‘šVDŸ1ŠU?G «M †¯}ß|ËG²Á4_¬Âý�ô‘’@.Íà9ÔÄÛQÒ²Úèa­")“¤%ñd=Æ� æ‰(uÇmBriŽß} �Ñ€,‘@óWPgþ¨awDÌ4 ²*þàŽ�ÿïï;¸8m¡�åx¸âÿüwL�Èg8\‹÷ãúú£M¦¯ž=¼à�Ëö.†¿û,�_�¿F©è~€ÿÖýÒ. )Ú]‰Ím‰ÛBŒOÖ’^ž1‘ÏP–H7 úQµ.±ýŒƒÔÞ{4íqäÒË1&G ¼yÍÆ­Ëdå)Ú›5¡B‘ X7 !ûò:9ZmÖ’}ŽkJQVÍh‰‚TZm ÛÉ¡ô¤}àe†¬{ïåqÐVô(û^¥ˆv–ÏXluh³[ÙIÐlÓð#åpóI7!)—ci=†gÓÄŒµ$Š×=tw<^ŒtˆMÛÓ)jj¥º¾ÄNCaa5Æ»ßr]×gÓ «”$N¹ô%,‡£8iia:‰z�!‰ž¬Å( Œ• Ì=‰Dz2­-5ë-²åœ1`tBä®`' ½1ðCõÒ“tÆ€j#ÁpAS]´Þõ86ÜÔrùl>«6Ûl(o`´,0;n"Õ©ô B}Uu#³YGöê „l£ÛLðøiLMgx°iÝ9ýôhC$Mà‡ ç&Í#_/“bXX!‘¬)4kZ!;4 µÓ쇾iv$.Ƙ1±UKÐîW¦çÌädÓZ×›�ã›È̾ +ß"A¼`/ V�_ '[à´Þ0Ú&é/Š_»…ŽS¯¦ÂÄ-å8ê ?R¸yÁ>µ+×Þæ¯\øô«íâ„Ѐ}å<ԣьp…„e �*´º ‹k1þþv€³“pçÚ{ÓãUS³²ãÖeùÌÑ¡c@¯ìH�_c l<@Ê›BêòPݤ‚mѹÿõ§]ܸ`=£™`øîùüÕö÷�\ˆcüeó×È{]4Û�ŽÂòÙŸ¤”Ƈ 2¹œ@½)ÑòI»²°rtˆ!cÀ·nظ0m"åq¢EúÐÏ mA¬Ã« º/JYÚì.oPh¦i0”òíŽÄ£å_< ‘ñHVk¯aá¼gmKá…­5ê•šÇ 5~¶©mC³®Wœý¤ïê�XZ‹!%mrT—&˜…³zÂ�ß„„�‡ŒG@,—!açW !ê-…í‰Íí®ÃPH“ ©Ú P¸˜…krŠMcdƒ\ÎH»DÑ1µ~Ø`¹p³ÅZÍdW‡¢5 Ç9å;)Ô\lU%›AJÞlÁ»tþb¥¼@!+ 5ÙÔ^Ý ¹« Ï~óúñÁÒ.ÃW‹R.e)Ä•Þ�›‚ªÕÁ™B,OBÖ6²”ýa™D?ZX‰QmR>AGg+ì4éØM�š€PµUäf¯Â®#©FBÂWBzôªB–ÃuHo¤�ðFlpðp34ü€LriŽvWB*¼ôfë@’øÍg>òéQO‹¡JOG‹†·0m_a(/PÌr|µalÈ@A§�÷RÙãDõ©v+[ ^¿d�HoÅ0‘С¥½MÈ<3�ÔÕYðí �fO�€¿úÄÇׯÚû�ƒâø«•·�¡2 $ÆÔð�‘hu�z3Áƒ¥èÄ÷CÊÕéã©Ý`Á^ˆ¡à8ÖÝÎ6©QgÐŒ:C$wm|wš$žÞª&)ý,?$ZéõóŠ:³&í2l7$juÕ§ö”.ž!šR_'Ñ¡dñãô#ŒgÆ)!]) Ù&Ñùß}ÔÅÄð~-Y>#�Ïp,®F0ù oݰy*èfZ�X§ÝØj´žn&˜cXÛ4Àôc!€†ÎÞiu×ä3”k’Ïqm¥3CÕ¤ È 5¨A½"²_ŒÎ9ÇÍ›o"›µÇÀ£GP©´Çé@úÚ’ÿüO2ÿprÄÌC«£ú�”-�6NÎ/­.¥lÅ�"ámB�òhò-8ÃâjŒRš(()‡œTZ:i<ÖôŽí:Qz¾yÍ>QC_Ì S.‡ëЖªç€”h�m½)ñx%Á;·œ ¦9gÈx” žrhÅ[!ܲB~|j§ ÆÙ±›ÄÓAËg)äŽk+Û|V I€ù§FÊ¿¹ã#íéß’yƒÛ^Afê2œR€d;„a¼ºMÈV-AS#çØl A¹ÑfÑVh´}MÙ i³Ðê¨þ=óªÊ4ÎOšØiQcÜÛv�x¢ø¿ýëú²còB1+tÇÖNÒŸZ›ÚØ©—ÊÞhø¸2kž|ìÛ„„ ÕŽM®Pqs Ží!uùDuJª>ˆøä^€×ÎYûŽÅ_=¸ LNœã;�m|ÝûÍ.mñžnÄûSÞ�(׿˜5�ÏrD1Q˜ê:ÄÐ2�ÿ­. JHÉ%»ç�ÀQ©ê-…™q“ò~8ƒa–E6ÑKk1¾vÕ†m2Ø&kÓ ¡÷ÜR„rþðÖúŒ¶îÍgHGÔh“˜u u¯\à˜6P̉þõ¶¾� “>³g8;aâ;_w15j Ž€n["ŠˆÖèMÏv=ÁÃ¥ÃÛuúî¨Õ,¬ÄàXßJht„B%í2LŽÐ¦Ý¥íÌòz|¨«áø��A jPƒzEØKÃzôÈÇ»ï^Áðð(”2EKøøãU<(�øÝ ÿÖk†ûî[©wËyž/ |ð…�”KôRª>Ÿ—hG]_á{ï¤`ê<ˆft2:ñÞç—#L»aq6ë'‡Ú r§I_¦ß~Ãy!:J>Ãñp)¢fÇæPÝ&c(ž·‘4ˆC4!ͶBÚcpì]ýIÇW¨Ôi:ø½oº.Ò¦ˆ3šæ.®Æpm&T=Dîr!ZÀý¢ $åq,¯Çdm«EÔRƒ¡(Ö)­að…×Î[‡‚ªÞ„è�±Íj‚•M¢¢ø s”r|�ã"%%°7ÛÔ¼ÌN<Ny’ÍK>-(`QçV$;ÜbˆìÔ,’ú# B–VcD±B1/àÚ4eMö¸„mÕ$Þ¸b£�å¸4ca¸HâèÏæ0è<Æ jdf.Â-ûHªFÔtŸ¦Š9�¥µ�ÄÞ† ëG�õ­OI/°ë®Öl«Ãͧ*Wä°eÀòr ÇâùB–#íi�ŠÅ0=j ®é4¬wBš–oÖb\=ûâàcï&$ŒHûåXä25jp,‰ÔÕ¯CÔ¶ “–E@ðuqë2ѱھÄßÜžDåüEÀ4ñv§Š¯‰÷Ñê0lV%Úu"÷+€¨›Ã²Ž®¯Eìu‰/…Çn\{õÚy ãC¶w$Âh´•Öb(llÇX­Èþ}ÁzBî=!†† ÷QΓE­à»Æ A¨Ç§¨ L�Ò†Ê4êm…zCá«…èØk'“â}G³NWé<Ÿ~p¸uïÙ­  ö䆸�BË'‘øÒZ„ña“œ² Ú»6ÇÙI¢‰uº”'Õì(Ì=‰µ¾2KÿÞu8QØê_>áîÙêôž« @1; ƒÔ õ*ïÿç•Êm|ç;ÿ¶­°ºZÂo~ó”:0õü�-HOSbü—?Î^93fþ°”ø|.c ëlG ª¿Ò¯7)@®|ÆB&/�h^ýË‚¦ôFŠdGjÛ ®ÍQ¾4Š©ë¬VHy�h }­¨¡‚À“µq úÒ % ÁP¼âBÖâ~ˆ_Ó_\�a˜‚zú_Oö—7ܺl=ÇWfZP½°#å­LÕ|dg3ð …8 Þ´ÿ „1`y#F½E?ch·¡$!g¨ž{S«£Ð‰�üe b'†Á©Q‹âÓ_€‚3¬m%(æ(µ8å‘HÚ±Ò.ÇHQ í“‡»£°±�`jÔxŽºqÒâœD½w…ýœ�x'‚“QÈÍž‡ªo‚�õ…î{K*rä)ýI}OpÞê¾ãKœ3)½ší^£“Ãæ–#D‰êƒNµ½…ÌÔ$ÜQ‰d;€!N’Xo‘­k"Éò˜“Ü ªoÓªö…÷í4\;g#ãMçUŠâw'ÌÔØ=Y×à-+�NíÈ›$ïéz‰fGb½’àâóÄ.S‡m‡#J€ÕMñ‚3$�lÑFúê;°ês�1é8>¹âÆ ÿÏßwp¾p?-_¢ÖÆ;ÁgˆÂ–7’~XÞ±`L×Ï[H§r)�V›†-Uy¬ø{o�Ÿ2QÈœ™0 é0î/FX^�Ñ h+ öN€ôˆ3ú̆`˜3PÊ‹¾Ø[)†D0MÔs”rãÊ9Ž ¤×­ì�³ÔqÚ‘s“& 9Òý5Û´aXÙJŽ¥ýѳ‘!î_³²¿éY«$ØÞ!°%my‹£Ö$§¾™q¶E¹8¦IÃŽ(:8Äõìѯ8#À»¾-±Y%ÍØAwb)7ÈÔ 5¨W Bv)XJ1Œ�øÆ7¾Ž|>ƒ Èâ'?™P;d ráï¼aûʬ}Í2€ù嘨ÇÆv‚JM¢í“кR—Ê“7ÒVH�›Èfâ.Y‘¼,é@)/àÚdj™ Þä€ñÁF l÷Ëú“ç{óâD!år(_’øŠƒv%ÆÜBÔ§Ot…|Z[ÿ‚6$�¶ÂƶD)Ï1uHöIo*¸´õGoB2óðL…¸›€ñ“ƒ�jC"fÆ ¬Vb´õqã=š�MÉ߸d!�2P¸éAV"�ÿ*6!Ý€‚3Ú¡É6©9õ®güԔ˼fÄÓ)ŽíºDÚc.ŠSYØ‚r3z›Ó`H><ÏGvæÞ6žÕ‚`ÏwµþOÞËü÷gÆ~úÛ.Š9ÑçbÛæ®•éÝùsK¦Ç „YÜ& ¯h Ÿˆ» Ý—!•�Ŭ€mS`C°=�öjmí$ÓkÊ*'œhTÃE�‹!„ j|‰¤%ñŃ¥ G>M¢Ø8¡/Xε½h—ô'=›Û£¾Ñ™¦c=|!íÒ—®Üñ‘™Í"íJÄÚ„tŽ!R«[ Êy×¢¦Þ6�»�#øš¶PkHTj>PÎ ¨V S…×ÓP›=ÚÐé7!Í�¶´N¼î¹£y%ƒ±PòöFÄ¢D‹Ñ-ŽzKžÚ2Vp†|†ãÓ¯dӦɷB8v„ìÅ›ˆ*kxô„t7¶Í†Ô¬dÓ¼O9‰{¡o ‰�¦Ä­+ö±ÍØÄ°�ÏÒ5b[ Œ3Èí:2ÓCðFM$Õ. N›Á!õ¦ÄÒzŒ‘2eL ¸ó0g€TD¿ê�ÊV[¢ÞR¸xÆD*Ú@úæyd�BÔ®Âì÷² 5嫤Ãÿ‹¸k3”.Ã>û§ðøçp½ÿ|–¬¡MÇ:,½H¥=Þ¿ö�©‡0ÙS¤¯þw;ÿFÊÄa¦Á0÷$BÕšÄoG¿Y(Râ/Zw4žà«…èÄ´°ÉJÏehûUo*Ô› Ö¶ÈÂö$Ã�±2�±BA Ñ”hu L­UäÒbßgÌg8ž¬SpªT»‘L™¼…·~ôC°xÝJ¨©–tnš…Û÷Œ2zñŒ¹ë,Õ¡F}a%:t«Ðš0àì‰×£˜6 Õ_=ŽŽ¤PÚ&… fS¼¯�Y¯$¸ý „!H<ßûX ¬Ÿw"tXé¥Y P4à‘JõAý³@ovÂÀp�’Ý-Òä|>’qÂ!Ïß³“Æ€ jPƒÔïi B äòe†™™·`ÛÝ.Çûïßà°QÏl>ØÂþ‹gþ¬ÕU,NˆÌ9­ÕÛ]Êxب&øÑwS¸yцcsÄ ÐjSš±ìHx£ %q‹F³/º i´dŸêAY:©:PCj"{¡b¹Œ ÑîKLØ£`:Ϊuú‚¼?¢˜ȦHÛàÚ Ÿ¬leø´xTâí›ö‰¸øœY�áñSÀœAÕ¤g²H¥�¸E©ò]ÿpòx…ìˆÓ¹$Ií­o[Ôx• ¢¿’’N°m2È®„É�ü�4T%êƒ�ø d«&á:”‚l™ÔDH(D•ˆ·7"æš‚ÑO„§kã´%8C>+ðÅѱL“!n�QŒOï%Ⱥ²iF÷‡(æì=¢s?¤iýÓ�£¥“Mê#1¯ië©?/ +u¤&ËH ¥ «”Ô~Ò�DÆ€O/ÐŽa†A¡ƒµ¦Äâj¬3¨ÁÚ®Óõ‘Ï 0¨êS¤®)sQó Lƒ¿²íV¯=±/d)ó�®é}º7<øOt4]L¢ïTÇ^±<ŵ d‘{Ñ’’V†øwxPO?œÈ pû^ÀÓi%Î/ãÿ>ž–GÆÀ?˜ƒZ½ƒÕ-‰‘òÉZÑá‚@¹ P*ˆ¾¢Z'Ëï“Üó¦Áúù()—£ÞÜÝ <›ƒ�ýôhYÀ ¥4 ƒÔ õûÚ‚ˆøõ¯køÑ�þcär&|ßE|‚ùù¶ãÝK=æò]'ûƒ·Üóßþšû¯.N›b½"‘öhê)¥Ò‰ç ž¬ÇøÎ×\rEêý°nðšÚòU¶$œ’öiïª!aDy¶IT„Dîzç÷6R*¼û�Aœèà!4�æWbŒ• =9Ôº�£Ý¡Ïjáòú6ñö¯žµNüœSZùÃ¥žÃ ´ :s6‡TV!iJpN¦g�SK[ç3¼ï`hÃF•lwo]²‘KSÂt>ÃqožÜšl‹Aµ˜PÈ¿ž…ª„àŒœž¢èåŽØZ…(=:ã J1��}6ÀÍŽB*dõ6é´e åÇíû”[Á9Ãçww�Óà£G* t|µ„Ú¨&˜˜3_èu9§c¹º•ÀÒt:¹ÝDz¦€ÔP²Ö.Íha¸ÍPo‘íöÝùhß±îmM×¶cD‘B>Ãñ­ë.®¼ÝF´UA»÷5OŸ4+#”rÚÒÀøm¦Èåo³JÖçŒãyR±ÎN˜(æ"ôA jPƒú}�Ý ÆÛo×1>þ ¡pûö>üPÿ»Ágà×ÏqñÞÛéÿqvÂüÑ̸ɚ‰$Qð\b#‡Ú‚r«–ÀÀÔˆ¹<ô&ïqBÛ×fP- »$P1µ’¢cí4,“l3)tn75¸Õ¦/òkç,/ºH O—¯Ñ{RCyV;m?ÊgL̘>…¯Uv$âDõê%^#í1Ü_Œ�ò(dOU}¤'3H3Ä5Êè»��j‚í…ržh0Ltµ#Oœo¾öü{. —1•)á¯@Âð÷·ý>mÎéi±˜ÈËÝ$úžóZ£E÷íÔ˜ ¥žw${U•r9ü€íV7¤]®Á¹6Ù6‡e üñLÿ‹|H§`~´ýsئ‚TÀ—óFŠâÈ{tvÜ@&CàºÙVh´H<~€EZ&2)Ž|J ÝÝÕÕ,ï}˜šëSÛ(?ýLŽjƒhQõ¦D)'úÏjÓ$Új È¥uX©A„`x°ú¼pl …~î m¢Bí­éQ�á¢ÀPA Õ!ÍÒòZ ©ÿ¡É£¯E‰µáB¨7Ü­iûž¬Ç)Ñç«5$¦FE?Å>N€�™8ll * Ù~žÉ€ jPƒÔï} Òn'xç�)d³£�’ã“O�yHÈþ锾6=jþñp�ø»žËa jø�u…¨×Λð¶ï¥!’¡ÚHàÚ²)aeÊ#QKõ­gå ¤×8å2Dí¡ôu ôúø^€ÊN‚ŵ›Û1Ɔ ˜ƒ¬ÅÈœs�1�Ø?Ý&¤Õ¡fß¶tÆ;�©p£#Úm‰ ìQM¨©u�—kd²)ŽÏȦ4©úHOxøð·-¤ŽRŽ&š[5²®4 jþ(¿Ba£*q~ÊÀäÈÑÓü¡‚ÀÝG$ulÕ’àIŒÂë%°-Ÿ�©<Ù4Ç—�"HE4«žp½¥3HÎY�•Ùk)¸ž Ù ¸n�O BV¶LŽšúÁa›´òW³ì“§òÎTŠ�ÚœÎi)OÔ´“ ˆ�!Œ^gqM[Ä ²Ò‚7e!=v²ZçÀÜr„$¡íÓ¯H(;T»á}ôv|Öq\;†Ö×ËȨÕ%‰âCÑ4‹Iž×R¡xW9¦q|@ã‘çxƒR¶'GL|>"åò~¥”Zpß§ÙÑÄ{òÆákï!7+àš/Ó ~? $—áøùðÉž6'�I‰~^�c‘cŸayøŸêß yq‚«ó[˜É,Q€j¤�9Ä K)¢åu‚xÕ§Z'ÅI-xgÆiƒ’NíqÐZ�Ñìï åX ¦MÌŒXßN´‹•ì'’?ÝŒQk©~š8ÃþüˤÍÚäˆ CÐF¥Ga’Š6ÌîÎY®Í1=F®g½MËÓ͵ÆÑ›­R^`¸D›ãf›h[÷¢=™%ÏWï÷‘–�ž{·; +1R.Ù¬›à:”ã2=JÖÂŽEæŽMa„{ß_oå¹ ÃRgÆ _Ô 5¨WV= FL¸¸s'ÂÂB€rY`høó?Oã¯ÿZ`bÇæÿC!ËeÚ£Ð?Ó\[`§)Ñö•êú4Eîø Y¯˜¥!…`Å1Ã㕳0�…åK¦oØàw0lí$ˆŸáÊ·» 9­sPÐ�vŠƒÎO¸~~·9«·$¤Šf€}ÖAùº‹I“�?"'¡íºD"OÞ)lï$- xŽê7ˆa-!ŠL_JiÏù ?U#kÀ•Y Ÿ? ¡ ¤Àÿ¦ÏfȦ(õŒšç^Ø[Ó—t­!á£%ëX ÅðÆe_ÎG�Š<ô±‚›Û(¿= ñQŒ‘.d§•º=êiÊy¡…ÀÔðLŽTëKk mgÐîJ\˜2±µ£¹Ù¿©bè[%Œ^¿»Ñ?ÿ§™’3lV#$ÒÖ¢{ŽXþ“¾6á¼Q_ˆ”’€eÐd¸Ù¦ÛåUˆ¤ )qya@J ih AÍ·m3_ÿº¶ üï;„˜bh èùÖ£2öPM{”GaëŒ8&mVŽu²g‰e ’j7'Å�nüŸ-!(Ô3•â¸uÙB¥–àî|„…²–’Äá§÷j[4 0`p@X¤7˦8º!ÑXeBš­B†#ŠäsŸ_*à¦I÷KœÈ~þŒwÄ …1ršs,Ö×1ù!eÉ5dèú “# … Ç£§1”ìÙ›ÓV£(Œ•x¬Î` µf‚3c"©`tgÆL<|¡˜ÛDXÌ ²ùeÿ?å|‡ûI�IEND®B`‚atomes_1.3.1/data/pixmaps/image.png0000664000175000017500000000222115212624223016664 0ustar lerouxleroux‰PNG  IHDRàw=øsRGB®ÎébKGDÿÿÿ ½§“ pHYs11·í(RtIMEÚ;+j£&IDATHÇí•]ˆTeÇïó¾gÎÌŽ³«;º_®íân+èúU™)Ž’A»b]†�ÑEPàEAt—PÝh"DFBE7}]$µÒ­�•™b+3º~�®®9¨ëÎÌžsÞ·‹ÙÝÙu‰ ºŠøóžs8ðÿ?ÏûüŸþ�¿ 5~ê)ÏÿV8 R€·{Ïží÷­\ºÊK$@J0Îa (§ÐN‰àœå°Ê!AÎÍPYÇá9òìŽïÀtu´mÜÿÓÜmòÁ^®£6"R…®b¼Dpfb`ˆ´'”ÜB²Oïâ“«ÛÊŽ²µ#ErÀâ¶¶qôþS<ÿu·½8z\!œ qQÅÕˆF©¸ÑJD\õD!2žP�Ïé¶œ<´�§®Õ³xóK¼-¤ô]ˆö-zB•ªt  FqaX"§\¹è¢oõõ[kËfB…Ò1®êÆKßóDïz.&×ãæµS-ž§ÆçbužEa€‹JÄÇò¬X8›uÝ�ª-y}`ý†Wßšì"­m*8]Cç¥7èjö™•êâ×H¡„ip6Â)ÇXñû_XCGK­;öÛ‰¡LæÁUÓ�¦¢+]a³änÖs:ŽXïŠIâ!àšË²¬µõ¸EãÆ�à½k«ùg~xÉ’«f¬]ûËOšfïŽ30©Pˆ‘ËŽ#Že¥!ŒqDaXØÄØä{òùþê}ï»ü¹÷ný»ä�<¥9IÖ]E+Nni rÍÍ@>d³@6Kà8âX…eQ˜¦BÄ[ P|Ÿ¡ZMP.;ˆãé÷0Öùåýö»wý{ü“€üö·'œU.?ñÃææáŽÖV X …ŒL† “1�ɰm„X,&*ß%ç¢(Dµbx8ÂÐP1ö»xÊ”_ÛÒ2ÇŠ·ä±Çnr–/¿ñú8þÇ1ZZ€¦&!¹œ#›¥ò˜°,€ #�#�!!œ»ð}ƒƒ>úû\w�¿utœû™iÓÎÝü[déÒ{[ï¹çK¿Éf7œ8v,¯�Q(0r9R$—3á8¶!   _3RR@À0€°Œ�½½J¥ÎUcÆœsÂÌ™_Û°³Bÿá�®wþð‡/üXbSG6+ ¶m–˜¦:ÊfRY F €vãL0IžñvÐÛnBkkmm&òùõ{õô\{ï+¯Ü0á=@´ëïÿyöÙÛná¼kA¡�aš€a”BzQêPbP (IÉh– Œ—`L”µhÐÇÉ£©ÉFs³�L¦kÎÚµ—ý¦¿evgÄп˜<ÙýlW×#_3†¡XL=©LF#Ž� Û6`Û,KI‡’�¼Púæ·z茽wz@yä¶ïSZcYB=‘sÏ9ç€PS„ Ô”FÛÔÜ\åUÒˆ”ÆÜàòçÄ{…iRØ6A&S5†‡—üt§äÇ?¾xVW×KŸ°íz08×�º�„˜0 ”6>ñ¦¼ÑLº¹ �>½”¥ÇËŸã DÙ$á8øþËóï¼óÄ#vZ@ž|òþ/Rêg c$I0F¤„P&(µ`(ÍH»‘Õbe–b)%)!ý�a ” c IÂÁ¹x(1<¯ë’��{ïý“38øÆÇm;ƒ1„#I£ "À°¬¬s¨“Õ@aµ`P€2,¥eXJ‰ D’Ĉ" cÒÓ0€ááÕ‡>øàwÆìt€Üwßïæ‡áÀxÛO¨"I€8'I(£àÜ!6 #ÃÈIš¤7Õ¤�¢"ôX³%e L@€‡$ àyÂ0As$‰x ăQµ»ºž;u§d` ûpËbPÆœsBqLÇBB’Ĩ„�F@Ô)Hõ¥TW$Aq%0U.’ćç…ð¼AÀ† qÌÇBB úû×¹³b†¡{„ƒRqKA‰"‚("RJLpn�§�¢L›OzZ¾æþ|pî#Šø~Ï‹àû1|?Arù J¹Ü;s§“�žžµÍ:"Þ7D"@‰cŠ86$(ö(©’6­ ŒT[TÁXßQ©D¨T"¸n ×e^;a(~g’€=kÑ¢Ÿäw* 3f—} IË eࣈ ÅÀšúRQzNJ‰ŠC\-Äá0–ÀóâÚ ‚TU«�¡ŸÁÁ^zûíßÙ¹$Äóªu ( ô+I€ •?ß|_=Áu¡cÃIj‡ó¾£ZMP­&pÝ®Ëàyâ¨÷ô}õ{ žcÁ‚¯uìT’$I-æÐÁÐcåû>ƒë2T« …BŒb1Ò¼(¢I‡']^‘: ‚•ŠÃó)\ 9‚uÀ¨cšÙÜ¿ò ½h¯_ëôáá'¦PN7Œ°�±ad³�$Þúbñ€.ÀZÒÙù}¹\'×€8NŒ ‚1ÔcŒq$ C3ø~ŒJ%D&À²òyƒƒk�¸áé%KŽþÚþû?ô¶2ØæÌ™û=úøã/^(ž\ñÄZ–¸Y">áò0Pš€�€â\%ðý–eÂ0(8'`L¨¶8 DQˆ0Œä¿1yx ÁÛÇu ¥0847·,Úž`Ü}÷Ås–-ûé]…BÏÔŽŽ”3�ɨj)�ãè`(GN=wÇk¹;Ó¬ ¹¹ ËrašA®·÷‘ëž{îðyMMùìŒÄ[dÁ‚SžX¶ìÁÁ èj CQŒ"F0rÂê’�qÌ4f€R*¿Çlj´7±"F’$ˆc&í‘È[逸¾¤\††€j5Íšuà�ÀÃÛŒÛo¿döâÅ×?ØÜ¼¹£© #¸–E´cÀ0T‰Z%UU†"�´J‡f„ØÈç?�sŸlÞüÄé›6u“µkÿtæ”)§°-rì±'T?þñCîêêê:+›YC1 ¯UÓ›.ìŠaD0 *õ)ê<²(Jäa2£Ë¤]JS3Je)ûQ*ýýÀ®»†Æ¬<À]ÛŒoüÊøÅ‹ûP6»¹£PHKÔʃR£a˜¦(ž‰Z�Ý·Ê,E^Â�L :µÀ8›åhnfˆ¢aøÚgÖ¯¿6ð¹­ÖCÆ�›ú£ ÈÄž'žTu“ô¦â† `ð}è¹® ¾U**_ó¨¸n(sU |_xWžÇQ­ )Pv¢T†‡…T �}(¦®ûÄõO<ñùÉÛŒGù“õÊ+�ÜEë:r¹‘ 8D+šé¥j)™CÓ` ™c«fŒ«BòÈç3(L47ÄñÓŸ}ä‘çn�Ÿþôw«ÛÛw¿­\jÃóê#æÔ𪜓ÅóÒtˆëFµãy±ôªØ(A`j/8: ½½Àœ9{íE�Ë �úŸ›{{—g¶ wÜqåWûûWî›Íê1E}ÊHñDu”ÊÛÔÈ Z0lJ€¹£¨Ù™ ÃF&c"›5P(0R.?öý‡>cÊVkê'žøé‹k)U*ip¦§28 ßWÀ0x^¢”À÷Y •§Òß'}¯Ôv(ueYÀW¿*êë¹�a¬=jñ⳿¼-À¸ì²/uöô¼xI6Ë¡sêSGŠÈAkDBg@'rp™4õ¥Ý¨ÈÿV9%£Æ5 Ä„e™°, Ç!Èd*Íåò?~µqãSd‹€|ùË_ß0~üÌ/—J†ŒFSP=(:âk>*ê¨Ôˆ +Òw¾CÑÖ&ô·m ç/ÿ™gÎ=ôÝòè£wþ_BÊ˪gÔÔóHM"(åj¡¦Ô1x®Æè“ÿíÊï%5�)%Ò&‰Ó÷_8réÒËÛ" pýõüýر{þypP¨’jµ>�1Z®I«1AØøµú7==¢‚@ß.¸€bæLRS¦I�Éù|Õøë­k_¿½ý�‚ñ�o|~Šç ž®ƒÑ˜¯Ky [su3™£‘7P–|�>É’ù½Še£r„ŠlhÛ1J¥—/Ù* “&u&W]õ›Ï¶¶ÎxfpP¨�JEÜ4]bÁÙX:£Q.‹ÊäÂ…&:ˆÖR6ê�·,Á°·¬µ“^üÖ%dÉCŸ¡ÔËPªçé깂Ì!T¥6L3JuòŸâ+ÛZ­G%W™c@¢x�dþ³Z‰š¡.]wÝaüãÇ'o˜;wŸÒi§�s|KȨ̈„Á-—ë�QGÝÜÑnø–@PGyYÙ,Å…f1gŽ)KŤ–Ü Õ•³ È«O~ð¸ãN'€ž•ɤ’¡ƒ‘þ^ Î-–RAä D9”±.h84Ø‘’v ¾ŒÉT––¨) ìjõÍ3¶ |á _^¸ðÒcs¹©¿èí¥PÒR*Õƒ£´¥¯õÜ”’åUuvÚøÚך0y²‰$1À•7'Í8‹§‰Ày† Ð—É’ž[¸p�ŒŸýìÒÙÃÃÝ�Ê�«õèDCòFvÞ@“Š)�{„”ݯH‚;Ç‚È ¢HÅ‚aC)0<üÆÑu�á–>ĉ'~´úôÓO}î?¸èɵkŸ¿Úuû›óù4ˆR,xå»ë—®ôPå«8'8þø=4ƒLF¨,B¸dDŠ„¦ F  `þŒ ‚x`Àyóæ›Ÿxvöì< CÛ0MD›6­1[ZúaY«I[۲̜9�Ž;ýô—ÚæÏ�àñÇïÛÏ4㺠¯P&N:: )¬@§¼JuÞ@Q‘Ó@4‡êñ¥MñÁy€(`¸nT—XUc€ëX'Éoç »úêË;xàÎË^{mÅɆá[Šèu�E©Œ fÌ0pì±ÚÛ-˜¦Ç¡Èf9'�¸i L3�a0˜&ÿ7üˆ9‡Ï9†9GÀ8BF°‰c¡e!éèØÌÚÚnm>ùä[¾òÜmŸö¼Ïko ì¹'°ÛnÀ˜1@SA¡` P0á8T*9 eP(ÐÚÚBZµˆ¼(‰¨MÃu’Á˜¨ù~šåaƒërT«å²‚»º >uêÙ³Ï<óÆÞ6 êºêªË÷¹ÿþÛÏêî~ýÿT*½í¢>PïÏëú9ŽI"nÀÁSLšdÀqLض Û6`š†Lo3ØvËŠa óFãW©çq�s Á$JaP ƒ¤µ Æ9"Î2—1T-+y¶Ý)?>£Ô2ëX`¯½€±c!³º…‚‰\NWOB<�Àq,P:FFÞíReYR:†¤DÊ].#Ž+ð<ž'2ÜŠ; Â×嵜Ýà ÐÝ Lž|ÚÇÎ9çÖ»¶ª²F»Î?á?œ·páWÏè�¿jÕ?Žâ<>Â÷«»ww¿�B¡Ðn–34ÔÇ]W»íLŸ´µŽÃ†*kLj)Š  ²ïDbIÌA~Ã�üš×"À$€I¦‰&Ó„aš bÊK„Q„jÇôT[öí#(=ÏÑîÍÓ) Ç(|Æ‚UÌ6DØMòÈf3R¨–2QmzLs}¹ü:A’Ä’I#RKA�hDŽ‘q™JOU*•±oiC¶v]~ù€Gå©]¿ýím¦IÚ¿÷½Ï=Hé„J†õ©|B’ @ù5Gr;A=dchuÕ´"ҳ⠌ÁˆcdÃŽï#ÈDrý1*œc—Í&Z–eA~›.(ŸnlHVºµ5ЇT„Š? ˜ý¡ü÷¸ÆªqÝ”Äáûi©:ÍŽŒÝ‚èéÙˆwÈ–® ôèýÚ×¾pÚ£�Þòp¹\63¨im…€Ò¤Ö�E2™W¡ ?7@–q€paì$œ×$db&’É#“©Ï�«@#Šßu]äªUX® Ë÷aFÖEÐÒ‚»øM°º\˜Z�†øB±-™IIFX£ÃŠ8#„ë Þ€"r@F–©c7ÏòùÖÚ=4¶G­áÉ'—¬ßo¿}¢¾¾î£u@»]Ï骋¿H@¯# ëS áÀ®™ r ˆ\N”÷ŠEaÔ)Q›h Cs€Ã9çàŒ¡«Z…9f “'nXé{ÈGZ §â›$PEæ©{›$T*U”J.ÊeÕj×U†œ×©*=U¤ìÈÀ0yò¡¿{øáç_Øæ¢_cÆt^68ØsøÐÐúã•6)%Râ�EdAƒÈþEÃቤÓ4QTÛv JSSÚ&¬¢¿(ªÏXJPš8GÂ9’0Äš—^Z[1nÊ`c|×~P •šÇ$Ú¸}DÑJd³ÓA)ƒ±aèÂu«¨V= D$mG=‘C÷4õdªˆçLttL]½]T–~ýú×f7ÜpÍùËo>]* �Ysà !}Œ�>•€Ô$ PaOç †Ê9&£ÞÄ4ÅMvœTe‹@K‹x5MH¹,~NGq +IPH„Œ!ˆ"¼øÌ3Èd2h±m « |«ü¨Pa(n´¸Ù¯ÂqZ$w@ðÂЗdWº¹"Lã�щ*™Z.IÒžxâÙ¯ßÞ¾€Àç?ÿ•uŸÿüÉ_^ºôîÛl;¢¦ ˜0ú:@WrP—�ÔHdW/AH¨”›1Lb Í”‚ˆÌÜÈ£$¦,+%)+}p‚Ù8F.Ià% –<ù$ŽÜsO˜žÜYEr€÷ƒ*•°æ5¹.!ëašm²É(F‡’Ì ÉH‰[DOEQvñøñ�îv—uÝpßÿüÁƒö>lpÙòó,¦ e•àæ  Œ ’¤æu…”¢È:}E Î ôˆT~T²H�¤Ë‚aY° ¶a Ã9*ž‡%¯¼‚ ø¾�Ê·BTçFp“4˜ó<Ž(ê…ão BF’Ð!ŽEGqÊ@ ê™PDa?¦<ta‡{ìµÿùË{†Ž^·nNc©‡r^%&€Ž @gÂV¶Ä4Aê ÞiÎ&IÄ'v]•ßWwC¥�UšÕ0`LJa‚ €®R k’YÆà®‰áÞÉà!ÊÎJÍø¾�\®¢ñIäÜÕÞ�’ ë©N:‘cp¨T2ñÔ©{ÿ xbûzY�×3Ë–±�œtÒãë×®=A`™Z”6C‹œcj`L’À6 X†Dz`[ Û®ÚõDG©(=Ó©RÐÒù�£�´%!çt% òŒ¡Â*C•ù¼®þ?<ÌA©�0T¸ÈâªPEãâŒ^ûQÉÕþ~ P˜þÌ­·þõŠ·•\ÜÖ×5¿þõ GìºëãýÃð¥D11I06I`kê‰Z¨eÁÐ�Ð3œzÜAˆx$8*w£€ C¨¢ç\Ky[úC7! œÃ[¸oÕ¸¾vC©à RJx�Ö”Ú Þ@©®††€Þ^pÐwŸzê%¼eú}»x]×\3�÷õ�‘9Ñ@‚QÐ `çÈ`„€S N)ˆi‚ZLÇU.®2Ú*4Íúž ¥†‡ÓS*)�„!X#ælPÞà\tÖGÀÀ ñ$÷öo¾)ŽHÆ5AZºæ£ö¸(AUvchH¼g±ØùÀ'>qêßFð²v ÝqÇ'HµjŽÓr§ª#ÑP�$„€Q F)`š R2L€C'Ré†]çÂ6ZSuÂQ#J$&3R† ÷búU6%šÞÈj˜:•i%_Ôxfz©¡1í„å2ÀX³wä‘ÇüçñÇÏÿe€ tu� OÐbµ,�Ì‚D.]YbÛ0F6+Š)áV¢ëUÅ©±ø¢ßy¢0„ÇCĘ6¾ ­G¼)ãñR0œIùbÍÍ€ïóº:¼îÜ5q=T`”Ë&öÜsî¹7ÞxÓê­Ò€¶çuõ·¾eGÕêÁºÝÐÓvqƒ„$”‚K ¡Ž¢)DDÞÜ,^õ‰ÊÍ(�K�Â<Üó< H˜$9G,O"�!2YÒ » lÜtu}}"m¿5î@cŽJ7悯L0iÒ¬ëÎ9çK7o‘Jº#‰¢hŸáž:®�bÆ5@"Bˆ)3 0÷,ljÄ\N¢f ÚvjÌ=O<šª £ƒ`A€0ŠàG‘�)!¡¬�DÚCÁ¥�ë0XIÙ7ííâWû>TÖèZR”›;sæÁ÷ÿþ÷·-ììÜr§ÕdͪU{X î-Ѫc±ƒD„ ¦‰a€›&¸e‰›¯¢ðbQH‡ãˆ;âºâîø~= R}ň ŠŒ@swÕÌ"”n¨úâf¶´ˆÂ–çÕWEu¢„n?tUU©ÃÃÓ§ïÿ«þðŠs:;;·Ú€´Cé^·n—ÑÀÐË•‰L™DRZbJë€! ¥¾²Ù´0íû©««Ý©8ŽáÆqM*B•Ã’`ò(@8 @¿„%`Ê`×]S“´%@}ˆÔ€7³gïs~{ûØŸÏŸÿÖ½.;��7߬«}�v©º[DBys RBL=g¯O8�ñ–$H’D¤>’~’ˆ Pq^$”.x ’°ŠÀÔ©÷J%ýµ£¢¤Cïs)•€––IŸpÂGÿãºë~²òmwPí@*å2š5O†�rj È'Öç>cðC�$0Õ'W½ J5)º¾zDã,Žáê€Hr¦‰ñ¶�! qŒá0DwaçЀ‰äláêºîèìåaéŽ�øSl8NËcÓ§ïöíø#�\tÑEÿTؤ¥½Iµ:*\‚˸ ‘.©—$¨Æ12Q;`yžˆ=8 $ ´D“úÂn£*AñƒÍ9vËd�Õ+І�V)yù(e +¥A'Å"Ž8êÄóÿþÔƒû1ÆNðýR caÝ,1%QD@ˆµ¶ŽÛÔÒÒrÿûßÌïæÍ;à™SN9…?ûì??À{‡²ûìÙxqýz0©–ôSƒ†$IÆ1Ü0„0<-¦)ø‚a([ÆÒ¤¢ë"ö<¸A€ŠÅK4‡!ưT^KPŽƒ&Ja3Š�I< š$¥oýâ_Ü4ë?Þ°a½þúŸÏX·îµ^yååæb±89ŸÏ6oî}3 ãuÓ¦Mï>é¤�=ÿ©O}j“ ¬.W÷j‡²iÓ¦çj±F êëD�Á9"ÆÅ1‚(‚¢(D)…8FÆó@e5‘G˜ï#p]x® ×÷á†!¼0D¡R�“$p A†sز ¬±žA Až–"SNðßMcýÝfÍ*@gg'ð¢<#®åËWâŽ;îÜf÷j‡rÞÅw]tòɈâX¸QJ"A‰C,¥ÃC†B©ÖÁü0„mY°(å\ä¥Â¡ïÃ÷Dׯ0K%$QOåǤ$:œÃà\HÊ8�‚k!»›(›½!Z—÷´Ü9ü{cg~é’I“¶Ü¸=®ã|m¦¥å�¨¯orÔ�21u0e a"«‡Q$›&9cãŽï×$œƒ' ’8FˆQ½cCCÈ�ØÐ T"cµd¢Sä0¿Î�/p cÔR‹6Úv!0i_ß“õôlžÖÝ}û9&|bpGBvÔ/:iÞ¼{Þ\¼øÄ6�%«šŠU×…ElB`Q Û0à˜&ËǶ…d˜f*5ÒÞÄqŒX�aµ £RIÊ©ýž !pfdn¦pö2`Y¦ÖE‘N.ŠP©„èë‹00Ðú\±ø™Óf̸êu(—7d_{횦|~ü4΃vÎÃÄuŸÙqv«´¶¾xüøûÿ_rÖG>òoÿ¸çž[:8—ÜÀúÑ™¶L ý?´´œúp&3óùI“>ù¿Ï퀽§M{r©e…~Úª»ÂÄÈöÉZĈ.mGd0ãX²i ‰¥"ð“‘ÍNq¶'À.#`À=Ƥ›Í8G0*õ²!½½1V¯æð¼¾qÍ͸4Ÿß¤eÿÅ„oíjróCGvßßu„juòŠåË�¹º£ãs·Nœøö¶ í yâ®»ìÛ.¾øñ—^xá€!I].6¨-[“S2MB`J2µ!‰Õ”¤ôSUõKCÌ9ƒ„s˜R „ˆ¾§6 ÷S Û©æ–(Ò£šÔ@á8& C²idzÏVàûÔÜ“´#:ºl[Ÿ{¢ºuU%Q”u«Õ¥‡çMzÍ4ç_8uêewäó�ì_Èysç~opÅŠ‹7É0¡âIDATržFÚúÒ¨¶ôU0 C*_ !u4“’ä1†r’ÔýÿYJP¸ÈR¿H�¢¶e2bÂö“O&xõÕíí¨›{’þT.°1ašVÃcd ÞÉ©«††B P$É~w‹ŸøôôéTÿe€|ï¿>~Æ+×Üÿëœç# `€5’˜©¤d„AÚTl"ˆòµåΖenªÔÌl ŽèæUõ-µ�F%Š-J�$|T0ÄΊlÖ@6«¦z7’ÖؤÜà0¬bhÈG„JeúŒÍ<ú ƒî~u‡Û�‹/^0óµÕ�üÜñüšÌð†,•6&¹–dTî°Áy�.D$�h?¯¤dX6%Ö¥d(À’—M�ú,0._ 9-J�ˉºGc•XØ‹t+„h•ÖGl¨AÒ� lÄÜÛ¶ÐÖV!.€W'÷õ½ùÐÃpôQG=÷ê«ÞvÛecz{_|ˆä2Ù\úô;Ž&>Ò¶HOþù¾F€PÙW=h)óÆ£¿O-s»+µ‹ l©Ä1<Ìk�ŪO²·—ã®»„ZW-{Š;¡ŽÈ´P9÷DÉž¾ž£YZÆq»R&#Ý—Ò  ¦YDss--š›K“�×^¶láîÛ]BªÕ …uë6úW\qò�Œu�/{`.“†›Á)ÅýIR«r=�¢©œÑYŒ&!U­ ©rdü}�³ó\ŽO©­Çç°í´\ß:my ц쨿®q�rW¨|Ô2ÐGåÚvŒb1–ü­�I›7ßzÇŠ—>wîׇß ==‹�5knžây+Ýûf2t?B†[9ïÅÊ•3 Ï>Ký8®îR,JúÔ!€ý"`ùiœ±»a`�iâ¯A0"…Òh&�B¶ æªzÒ’|,ÀCÔ ù¬VÓIy+Vˆa8ÍÍ)g¢~ R}Ë„`¾ëƒh_­¿±Þ–.2ÙlŒ|>AµºqNoœòŽY¾ü¦âk¯ýâ“Ïðó]]÷^ßÖVF[Ûh“:Im±¤mÛ ÄÆž{šÈd¼ZËF:.�²)¬s ¿4@×ýÀdÊÝb 'š&VqŽÇ’i*í-¤YF$‘&u@â7€dê&Cp¬][ߎ¨“Þ”+œŽÙH瞢â=zR·PÑ#ÍEQ*L_`“ÔíJ!°mÀø!€ƒGe¿÷õm0vÙeé••Ê3ßmk HK‹.*í RÙ¬DZAˆp³Ùfô÷Çô%7Z¨²ÚV·¬ cž2@Àº‘Ö?dí¼À9v—¹[ºÆ‘æ×¹ÁHg'xRA(%QàÇF¶Þ.ı ¾©9‹j‚>kQìÃ2à82Ùl¹\”ê l(�Ó�ÔD‡úõjîI†rÀ[¢Íúú†ÚÎ;oáM#Ù¼yùÓŸÞØÓóßç´·3¢¯[­ŸÖ©ò@jtªÚ_XÄäÉ»à…z@)×Vì™r˜¤jQð9@BâÕ aœÔQtbÎÑ,½yG~µ,Éo¸ùê#Wä÷ÑÒ‚Ü„ /wL™ò›ƒ?7{pÝr³RM¥’�HºPÅ´¶0Óqld³òù,²ÙÑШÄ�Ý@ûÓqëÀˆ¢°6qOµ.(@ÊåØJ’ŽM#TÖO~ræYƒƒ�ž=~<«‹Vë›—„ hTsÓÅ’ÍÍ­8ñÄñ·¿=#ƒ)CîYO§—&œ!>Š!šœ º…!ì’Ä5ÎkO~ ?ú w!;wîuYÇyíÍžž¦=f̘9444´~ýúÕóæÍƒaË.ýáWϘ1c3,^¶ ?ûÙÕÝuׯïÛ¼yÅŠ´’Ë¥L%5é5ˆFl€žQ¶a_о´FŸs¢z×u¹ jsOt0Â��X`³qãâ=êÜú«®úÂÞ+Wþþ±]v©;:„ÑknFCHìÁÍå är&²Y[êV5:Uíƒçž[ŽçŸ_ Û6aš"y$ —“²ÑøRIà?Ê<ÁáWxí£T¤ê”èì´iw|óÒKO=å”S’Æ]¿öÚ+ÍE‹n¿~ÆÅg™fLÆ�Ÿ­©)Uù�ϋމæf­­Y´·ÑÑÑ„|¾Eãí«ÕŒyéì“J͘3&I{žš{×¶BT«¬Ö¦Ð×ôõµ>Û°é³òWÓìÞµ¥% ¾YIätR›`޲é3M¸Mœ8IâappPF¹¤ÖELÂÆ Á.á,ßüàúi·x?«³sí!ÇsÂ…^èý³�ì,b¯¼²ñžÃ;ª·TÚxB±˜Ô>›>VEã–eÀ¶-d2Ž´y8ŽRWÍ0Y J¬Y·t"Pûp]5¡5 *zJ껬Äô¾–15§ï¼ó>xNÿê}‘|K¾¹¾RŒOmŒôy„>ößÿý˜3gŽ !â¤ã'3ïÀ=(φÆÑ„¶à¸“NúÄM¿øÅлIë45e~“Í:#&�¦Ÿ“Hž6A„!E‰ÍBÊãJ‡)7N¶&uþ^‹¹'Õj\·‘îKQó*ë'¿–Ë¥,€ë®û®½~ýª ‡�Øò9Ò7W[>-mºžxÀ!Ìž½ößoÙϯ¢Ïi )3 ”†3¾ëŒ½>uõ5×,{·y¶¥KŸ†çÕÏöo\^£“çÓ^AѺVï`Çhh¦¨�ƹ'ú›F0ô™'å²'bÿçŸrÁÐГ·|6úåé´N†!¶µ¥õ€¬æ—«š€ÊéaÚ´ 8ú轑Ï[u@¨Y £�ŒííöÝ÷è_=üðc·o‹Äç¤I»Á4íQ#wqxí5I„争\F�óéÐË!ÔÏVF�±PJ…Ú(Äj`¨öê-Í® CCÒßÿÆç²Ù-Í#liÉ@I÷<}sC“õ†ÑÑaᤓfböìpžNÈÑÛ¾T§j?`Ûcÿr꩟úâ¶ÊDvØ�ÉFDï�u‘|Të'b”Ë!††¸® Ε›¡ÆÂÔ@I•JˆR)D¹¬¶ 19#‹�:�RŸ] 4�^~ùÅͽ½ësœ”P^¿²B)e†áÀ4ë~¥î Š¯iC¶Sx –åáÈ#ÛpÖYã0k–ƒ8®£RÍ-¶ œ}v¦û´ÓN‹¶é¤OE¶�ëÓGì5.²ÑÁÃXzH>J%ýýe”JÈ¢p.á|I2 ß/chÈÅà ‡áá¥R Èh èGÍ¥ Ck“¹~ýê#8¯”§¡üò‘Ë% 0¦$¤qÓ§Úðijk éØ@óËE„ÑÖ–àÃÎaÞ<K–X¾<Áš5†M� y$ÇÕc/þ�7oÛ°÷ØcVxÔQ�«9Ú®”t� —^` Ï a¾Ü™Â†±ÌÕ™²Å1©íJñ<žçK·~îÉhûRÇår^Xm¾þúÊ=KªN1±T�ÆÅ’ú$6Å´²´Àˆky�Hs }¹�G ë·íûìC°ÇTú啊h²ìéñ§¯YóxQáÛâ²í¦¥å2ŽÔºF]`† (�åè(†Pa!lÛ†!NëØø‚AjÒA4�Sô6CC@[[Û2“óx?½ÿAŸ�(Þ@ßaH‘$”‘%Ì&¤óUÀDëXœ‡2—£ž ¸¶9!Ò‰�êFù~”f÷Ã6\"ÒÚ:áþÞÞ.Ð7‹ê¤x5õŽBbÍÁaµ6¦iÊ jê-ŠBDQ¤½Æµå5oÕò&¦D˜={Öý¦e™»%Ic…lK Ðº�Ÿbɉ*a´˜$@ýŒtÎETž¦bm$uCÏ>{ç6ÛŒ?úÑMÏ~ìcs»|hb6›v6ÔoIÐ+-qÝSRY)U ÁK¬sKlÄÌ“t%! åÀ ”Ží9ôÐO™¥Ò g¤_®ûçzS«ïA:ßeäÅGi6h:�0)<­ú©k:8ãÇï¹» m›kòä]Ý£ŽÚã÷ÕêÐ×ßÞ5@dL3®MÀKwÔ*§DÚžúÕN�¢;1ÃÃ"mÒÞ>ö·ýè©>U ¾Þj¹¤˜\Ák9˜jUð_Ó -�ãI)í”a˜.–L½ŽÔ/WØh3ä9w¶ù.Ü}èÓ73Öj�W£®¥ÇÓ=)j Yµ*æiéËkTZ]M!õ}^g'ÔĵÄfpP¸÷ÕjÑŸ?ÿØŸ€Y(´Àó6�â�7r˜Ä1ªÕÃÃlÛG>_‘LŒé¶h5jÛCŠÅ’år$KÖï2Tº¼q…zíêÚðâ¶äüó/~ù¸ãæÜÐßÿüyŠÜ0ÚúYµTÓ0„§i\VúȈŸK½4¥žø¨c6Tü!Ú¥…t´¶Ž¿úÒK¯X´Zu_IÀÑ€ÐK&Þ \öÐß_E¹\F’ Ê`º®!IʨV…_>4 TŠP.+ I 7úåêVîàûÞwHy{ðÆN;í‹ßÚºÕ®”ÑÖmè»RÔ^±º)Ý™R¿;…�:Ÿ·q}‡>ªÉqvé=þøý°Æ:;¶³kãÆõuîßh�’ÊAù~Ó ¤Û'–NV«2 –%Œxë~¹× jû¨TÚ¤q”Qã<ÂJ‚ɬÜ€œyæû?ùÉ>·bÅ¢¿Pzwµ -K¼êÛê„�á 2úܓƵ€�ChJ%#zÿû9ûª«®JyY'î¾ôµ×ž¨¹œúI R†¡KRPê×<Œ0Œáºžt Â/†j±d KÆ£ê×%ËûæQG}|øþvaWÞrËý÷/Xpàe6,þ¿„°QÓFj¤c#_«1ùÚ8Õ¡ñ³é� ˜.D±÷Þ‡]qÇwÞ[Ç\œ1cïGž|²è…a)«n’:¦)t¡øCÄ4j±X2]�,K _ÌT „Ò7�åpH¦ ü}Ó§‡dYößfÍÚ7Âv¼fÏžÿ�îî7Š›ÎKmAý=hœ¨ª'`•§5ÚFˆÆéPJM ��³3fLÇE£²ß�:jêýQôú‚FfIZœÒ STÒ7k*µXRÔ$ #ª'U¹®nõq~[3ÞÃÃ@¢iÓöþÏOúôï,Z´hËý!7Þxmæ¶Û~ÜÇkÛtÊOÊ2Ñ)2é1 EtH¥Ô TªI7àõ[¢õÈU”6o&NÜÿ{�=¶äØÁ×¹çžuèÒ¥�ÿ¡¯ïÕÉjP¶Î†×ÔÆ8­Q:tɘ0aæëóçñÙŸÿüúGÞVÕÑGÏ>}``ÕÍcÆp(ê�jhÑëÎâ�Zo�u€¤Ñmý�ÈÑž¨FÏcp&T¿ó�+gœvÚiñ/¸{ìQëÒK¿qöš5Ï/Œãá©báÌè`�F0ªU‚ææ Ý­­ã.9õÔÓnþêW¿ú–äŒ Ï=÷”yá…g¾X©¬žÞÚ*¤D‘âj¤éºMD{ZÈ(•F®9¾EÏCwu‡‡E•pþü-¼çžû®À¿øúæ7/qÖ¬yñ“/½´ü´��Móssªóv”iPò³˜f1ÈçÛÞk¯}n�7ï€?^xá…o[íÖÑ€¾þõs�xðÁß-ÊdJ¶’}„¢‡6ÒöÅW/!o5�Pi½J˜Ëu>|Î9ÿqÌùçŸÏñ¿èºêª«Š÷Ýw×¼(ò/•†ö( ïè‡eÙ(š°~ý†Å»ì2±»³sÊÒsÎ9÷Ùc�=¶ï�üž=†gœñÑ…K–Üû£––¤n¤¡.%õ -[ö:¶äyŒ6ohðýâë_ùʽÿ¢‹.Ú€�ô‘¯=ûìzÕª�r¹t¥)`º®Íi”e/¶ä…4ª*ÎÛ*Gqüǯ½öÚU؉¯-vázèÌ+ûú^>¿¹™×TW=vdQkK2ZA÷ª8o«~øüá·>†�üÚâì÷)SvÿŸ ¦ñ ºæ3ÆŒÑTÐhþùhÎF©Ð 3¦9vÍI'ýÛI¿øÅ/ŸÄ{×[÷©Ÿyæ©|®‰ã¾éÊ/o$`�æ6ôÆx£Z5ù´isïš;w¿³o¼ñÆ¡÷ x›€ÀÝwßY¼é¦k.yýõçωãÁœ>v]/}ªK—&]U 0ZZ&-Ûk¯}/¼ûî¿,z‚wˆº~þóŸLºå–_~r` ûŒju`†iF#‚¥Æ@II!yܸ]Ÿ™6mæ�<ð û.\˜¼wûß% êÚ°aƒuíµ?>øé§;¢Têß×óª{d³Ù™®[†ëºÈf ÈdòÃQ”¼ÜÒÒþâ”)Ó—Lž¼ëíW^yåæ÷nùÖ¯ÿ½Ï» }D¿IEND®B`‚atomes_1.3.1/data/pixmaps/bd.png0000664000175000017500000000105515212624223016173 0ustar lerouxleroux‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ Od% ­IDAT8Ë¥“KHA‡¿Y’jÔИԅø@(•RTD¡à /"<ÞD¡xŽâ]„žzóê¡Þ ji® ${$�¨Ä½¬F¨D·k´;\DÄ`B¿Ë óøøÍüùÃˈ's  ¦€;Àf€`ð?ŸV^ü¾n 4;’@+D`;£8né${Up Q 8t ÷ìoŠæ0‘o³X+BöhzZ®E`p(¸æ�~ÕYãÀ›¦“ú‘j`«ˆ'D�÷J¦³Ó{ÙÚ:wè÷×,ú|Ëã]]•ùn%�ÞtúS(¯ ‡Ãg¤5mIŽ�IÙÖ&W…�ÃeeëùºŒÛö´´,¯\X(ÝP�óóAÿÆJ_WÉ$U¹\{¬»;ŠB¶ íÑlVvβŽ�7?64üÁåêÁ4}P+Jêb¿®*ºir ÄvS$ò {’n#…Gבɤr*eBz<™ŒÓi[¾·_vS‡+å±)·ûo6Á0ckAa9�ÅÀ@õ”a¤¿UTœpsón2ü7÷jÖ�¢æ““qIEND®B`‚atomes_1.3.1/data/pixmaps/gr.png0000664000175000017500000000103615212624223016215 0ustar lerouxleroux‰PNG  IHDRóÿatEXtSoftwarewww.inkscape.org›î<ÀIDAT8�•’OkQÅoÞK&#U¨dá¤j©T)Ò(J‘~ˆºj?™…,ëF—.¤Y¸ìBÛ•‰C�Å ¶pQ°ùÓÌLÞu§6ĤôlîåÝsç¾{UµZMJ¥’¬D°ÖÇ Zk”R(•FÀÞÞ‡À”Ëe½ºú„(Љ¢„(ŠI±³óšÍÍ-ŒÑ£ÑÚ¹Ì}ß¿í¤jWáòø…ñˆÑZc<Ïca¡HED±[£êœ³¸ö €ÊÓÇ$IŸ0lbD×uQÊ•£?ùvô“W+E2™ìå[e¥HØjcLžç/Öî™9g¿wFec�¯�®vøñù ïðfw÷ĹNàåÆ:ÇßOqÝ vþ.a«ÍéÉ/Dc­�Úüîí{–—¡»c§œb82áÀ/ä [í™®RXk'nk-¦V«…AÜØÚÞžØßÿx&"– øô—þïb•¤Ñh4ÿþàµ,udIÑIEND®B`‚atomes_1.3.1/data/pixmaps/td-big.png0000664000175000017500000001011415212624223016750 0ustar lerouxleroux‰PNG  IHDRlpûr•-bKGDÿÿÿ ½§“ pHYs  šœtIMEä %/Í&<ÙIDATxÚí�]Œ×uÇwv¸ä~hE[NÓÚ²+Y¶$Çv-mí @AH[@@Qjš&A€}ɪ…Q }‰Š¢`¿¶)¢íK_ú ¨¶yª›¦haypQCVc§Š,Ëò‡lK¢ªjV«år¹Ã¹}¸÷’g†Cî‡Èá‡x€‹g8³óŸÿ¹çœ{νJkÍD¶–/)¥òöópøw­U–÷¡&€u—ãJéG€ øvÔ€ÛÀ‡À¿dܰ.ò‡JéýÀ^`ÈSö»¨ë@\~�hÀ:È ¥ô!à~`β+x°M«ïÿ¼,÷4M»üšRú @ØÌؾËO0lÓîS€öJ)­ûÚ°9bû¬Yˬ0m–gŠ,x¬ÐªÎ¯õùÞ&€¥ˆ30òV Ê&�Ç´†´`Aë§xxìRJ„�![øœmRENÙíœ0û'€eÈ.Õ¡MÙ–ïpŒSªo–ÜD%&dÕª9-šû¼\°ÀÔÇE¢]�0,;¹ µÚ°`hû§†ÝÞ°Nòv[~ÚsjÀõ‰•˜­¬û¬•8�°¥Zç¹.œè•‰•˜½\´€„Ÿ¥8ÎŽuëÀ&Lu~btd+÷�:¥/}ûÛ|‚ 9­ÚHF5¥­Ù¶ Ü„§Îõ9Ò1 M  äç\ðâÒوnjP�ؾKªÁ+À?fKô'@�J}c¿²´Ä Ö’­ß`ý(£h½?*Å´ö çø‹vÿ‰�‡Ýþ#ãñ0T»|¡—*ð;'NðçËËÖ´ÿé÷¾7�û÷'@µKN¨¿WÍÎJ…MÛg]—¿{ø°¾uñ¢š6 T0üÝâbÓÿÂú`uk1^ì:öÒK† ('á(#Àr¡©`Àÿ—?«]º1¯&h• 8}â·�§“×ËP-ú ÄðêP¥0ÌE6ž.•ÚÎËR-ú Z’ìJªCØ e¤#½ `%xD˜ò.f§+•f$>Ž¥0ÌÉk'ON"ýÊÉ/c#�aá`MTbF@%� /aÊ»AÉÍíÜ_Ƈ¯@4‡QHaWxbìÊÂøðïi ¬Ìt`—®T†ÆØpâÝë`¹·ÖëbÎoìä¾Ö÷ò `ʪC¯X à©ýV‹þ½ Ôv}¯Í!{¡ý{¨-Õ¡í¿j»ùŸúh-Ìq4PÁô4ÌÏsøòåXÀ7ÂJ…ðØ.}¯~9Ñþ½TS¦§Áó¸xô(O\¸0ôê0S† P@Epÿý´©)P–ZçŸB½• ¥çŸßõ5úÁ2ÿ^ª)³³ày(%ž«ÖE†wV¦FÇï+¥ïà æyÖ´­a’N~¸ƒ¤“¡ —‹3Ë�åÛØ¸û—µÆGL%WJÄÔ8Í`âkJèóuLÂäeàÇ]€j €Àó`a!]†!\¹BéÑG{r­^«Å&Ã~W)}”VM¯«8t€¹<êÔ§ûþ&°§XÌ ZÍøY¥ ss-“Þ‰õ»øðCJ�?Þ—{ꕵè9蓯€ÆÔ@aû+ù}Þ²o΂üKKÍiÜô³¶O|Xæ‚€|@Ÿø>‹03ù¼Q�ÓÓ$ŠêÈ®>ªÃ^±Ì¯Z«!š3ã̪߳‹ý aî{\/¼Ni‘²±’Ó¨ ¢È€äûq“]öU�F;`ŽaW¯öÄYî·ñáý³ÖjÝ>8Wˆ½I«ÀúŽU�›BÖí_§¿ã ˆO ç°pýbN¨Ü9ë¤ óó…�TUÛË…šr¹`imzºk(ŠÙYÊçÎ ·Ñ��^¬%ú(Wh-?oØcVíñëÀ_-.6”ÚIvÐÞ?|ب®BÁ<ô…‚½{ €33¾ßÕ� ¢ÈœÛ ,Ï‹7×—I°¢¨¥6gf(¿ùæÐªEà€?I„¢)~˜+Àþ›ÅÅXÒŠ±U‰í$xmÛŽQ®/‘Òý�›3ÀD‘‰BÔj�%Õ T…îû$£äï;¹y³u¼ÖæRµè›{Ôê·•Ò2n˜O M9yÍî{@°F˜Ö:±¯ù0e<âP¶|fg €Õj¼Ï’,Jö_± «Öï¹sä äû”ß~›ÒÓOgh à_µV%¥ôà¾Áß*f^À0_,².ukÄBWS ö¥xþ‰'Òf€rÛ=ìz=V¨N€¥]S¾ SS�ËQ~ýuJŸÿ|ÏÕâÝ„ªbÃ+eÌ=®”þ ­Z©†ë¦øúïS½Q±Ï‚ØZ^ ‰¢v€’8ÍH¤�™Iï£v ˜çµîEþÖÜÜЩÅÔñ°W·1æuëå—»}‹Å¦ÁA,bâ�¾ó—jHLn§10é'ÏMÛŸd,@¥Ò~žç5UãPZ‰™\¨X¤^,R-¹],rÃZ›T«&:¾±aT\¶Z£aš38¤a²]°’¬Ùéy}�OŸÖìÖË/ïZçŠE6‹EŠëëWW)®¬Àêj ÀzÝX„�ÀÛ®êSʰe~Þ´ä(s·ó”¢üÆãŰ»­M‹†¡ðÎàÊŠp}½ÅÀÍMøä“ÎÖ_Zÿ7;Û2ûggÛîÖ�î‘ï§OÖÎ÷´€QÔàÚZï.àú¯Èn��‘ª+FÔjÆKKÏÓ:=°[­fimØ*û¤»�4L Êï¾kÔr­FéÙgÇÃèèËR�óýv‡ºS~¥çZ[3ÛI®ÓyZÃg?kÂV…,,P¾x‘òùó”ÏžˆZìy"iV)Áô´‰zȰ”³ì¶cÖ_»–syahúͽ{Û_ wœ5ˆ 7nðBF)Ý£;‹@š`­|�.äÔ‰1�X” �IÐèò8Ï3}¢ˆÚþý¼S.³ÉÎJ“†ÂËL5V«q3?é«í¶ÉßÚ·¯Ýât¾œcµïÃô4W`¸T.s¡\æ­r¹/j±o¹õY¨Æ`jÊô-iÑú­ü³¤J”êpsÓ¨Ãb±{Ô%a¨ºt)VÈîÒ$êÀ3[Lñ%¥ô¼ý¼nc»™–hù||,L¯„a¼osrýzgV…¡ñ÷\vÕV}¢�Ç/^4ØŸ>½!è5à9 Þëå2EàËËËÍ`;öx·jÒ[À›¼Ñ,ŠZ£Í2rïú8÷À�µèû�sìªVÍùssæx·ì\>lÁj�Ö ®LPrÌÛ¤5?œ\^n.ﳊ\¾$â»}/7Ê4ˆ«Æz½õ9 X½nð4°ÂÖ×Û|­òÙ³íù"@àñK—:ŽûuÊoq94¹¼Ü–¸+S4þøðoZ«LêÃ2cš{¨Ð2ù (W®u—V­Fé¹çº^§|î\üåð<~ðA[Ù­êœð�–—©‰Ï"'kªö…¼ œÎ °Lý3/”}�cSÂG™‡ígÓv3ºüÓr™<ÝGÝ;�÷ÒòrÌ09D<óLΉ¿jYösÆq¾D™ÊÖ©ö«^oÕ*¥^ØÕ¥¤å÷v¹ÜÌœö¶žxŠøRWÊ‚¨„Áâò@÷e Ø–ž½’\®³9|²ç—•ó(þÌ‚'™—L‘hPÂ$àþ&õï}–L,�ñL8™8ÕÉñ. VFµ_O•J)•øØöAi‹ïÔhåw* ÈS¶?›¡}‰+�ø´€ã#�*Sl+;–Ù­”J%ž,•8\*qËöG¼¿=q‚ULí‚ë³~N«†!iQF‚•ŒË’Îm2×q@ò«¥Ÿ+•šùžnñ8Ǹ:f…‰ 0ÉÆ†0ó°~�t38®_(`Nd�B=Ñ\æµK›ßû×1•@S‰}-Ÿï;tfü€å™R‰øúò2ëÄÓã7ÄçšjÍúbÿ¤µ¯>,­Ð\öaáàg>|íäIõËËËÜĬ7v‡Ö²Vr™«ªýî6&y÷]{þ@ý°ž›úSS|ÿý¦/ðΑ#-ÀúXN´•ü÷w¿‹Ëø}]kõE¥´ AÉY:ÅœU,1Ë(ȼH—3‹†• —÷ï§ôØccUº}¤ô×h-ßèî;$­?+¢õcé‚€=¤ÏÛ ðàÇCÆ€m5ü¯¿iÇÔeÖ�1–%Ë< ˜ ¢:õV*¬G3œÆ|l¦ßëWæ§Ä뱪C¿*+ñnLý´EÀÌ,ªÉfîÃÉÊ;|óº >ÛGu˜PCɰ»aY§iÌ�Jì—©ž%XC Øn@ÓA�^škÕaÔ'Ve¹”âЫÄ�!9:É»q¥QT#ðݼuI•(ó'Â1kè�Ží²Ìë°ÈF F¨‘aØvú3/ápãFS%>â0�5f}© Ó€VŠh—‘œaj¤ú°n,Ë[°þxi)U%6¶;õÃMõ±4::�æß\ZŠ/’-ÔaÓBÜhƒ2ÕÇÖJLíw––šV⟠–}ë̾ræ ±;°íµ“'Õ0³j¬ÌúB¬øÓ3gš‰-Ï¥´Qªy룸,ð}§N鯼ÂQÌ|‹n 0·|T<‹ÉB:útºú[\T£ø‚Ž$`¿§”ÞOkŽ}_æV°X>VRU°F°?PJ?‚™í;¹‚…,"XÃäC|Ü´ �2P# Øq»ÜȘɡ]Õ¢/ÍxÛwɪW[ÅÈH9ÎÓ} Y@à Æ`|dd¬ÄßRJï%¾‚…[±Bn'W°˜µ}Ý‹Jé Ã2”}ÄW°pªÐÍÒ�£•òì˜ææÑŸÁ,¤0aX†"g7•ÕŽ9«ò~x0qŒœÅ»0,cë(å³Û·`ÿÎìàü‰Jì³ÈªÙÀÿX°ª]ŽÙ˜–­Ü¢}… iÖh_¨ÇÍB³�)(˜¨Ä åU­Õ*­*FYWµ‘²Ïí_ÇT€Lü°È'6º‘Kñ»’ŽsÍF;ncBTã"#šú†�#ºU;…¦Ü„$ßv�$`_UJ?h­C9¼"§üY>~0F`�,`ØÈÅALLQ¯lX°Þ~2f`�4`RžWJ;³þ¿Æ$)ÿ¾¦ÒzýƒOŒIEND®B`‚atomes_1.3.1/data/pixmaps/eps.png0000664000175000017500000001272015212624223016376 0ustar lerouxleroux‰PNG  IHDR22?ˆ±gAMA±� üa :iCCPPhotoshop ICC profileH‰�–wTTׇϽwz¡Í0)Cï½ ½7©ÒDa˜`(34±!¢EDA‚"Œ†"±"Š…€`Á�  Ä`QQy3²Vtåå½——ßg}kŸ½÷=gï}Öº�¼ý¹¼tX €4ž€âåJ�ŒŠ¦cû ðÌ`²23B=ÀH>nôL‘ø"€7wÄ+7�¼ƒètðÿIš•ÁˆÒ‰Ø‚ÍÉd‰¸Pĩق ±}FÄÔø1Ã(1óE±¼˜Ùð³Ï";‹™�Æc‹X|æ v[Ì="Þš%äˆñqQ—“-â["ÖL¦qEüV›Æaf€"‰í+IĦ"&ñÃBÜD¼)ñ+ŽÿŠœ�øRné¹|nb’€®ËÒ£›ÙÚ2èÞœìTŽ@`Äd¥0ùlº[zZ“— Àâ�?KF\[º¨ÈÖf¶ÖÖFæÆf_ê¿nþM‰{»H¯‚?÷ ¢õ}±ý•_z=ŒYQmv|±Åï c3ò÷¿Ø4 )ê[ûÀW÷¡‰ç%I Ȱ31ÉÎÎ6ærXÆâ‚þ¡ÿéð7ôÕ÷ŒÅéþ(Ý�“À¦ è⺱ÒSÓ…|zf“Å¡ýyˆÿqà_ŸÃ0„“Àásx¢ˆpÑ”qy‰¢vóØ\7�GçòþSÿaØŸ´8×"Q>j¬1� ä×>€¢s@´ýÑ7|8¿¼ՉŹÿ,èß³Âeâ%“›ø9Î-$ŒÎò³÷ÄÏ H*P*@è#`l€=pÀ‚0VHi€²A>ØŠ@ ØvƒjP @h'@8 .€Ëà:¸nƒ`Œƒç`¼óa!2D� UH 2€Ì!äy@þPÅA‰BùÐ&¨*‡ª¡:¨ ú:]€®BƒÐ=hš‚~‡ÞÃL‚©°2¬ ›À ØöƒÃà•p"¼΃ áíp\ƒÛá ðuø6<?‡g€¢†! Ä D¢‘„�¬CŠ‘J¤iAº�^ä&2‚L#ïPEG¡ìQÞ¨å(j5jªU�:‚jGõ n¢FQ3¨Oh2Z m€¶Cû #щèltº݈nC_BßF�£ß`0FcƒñÆDa’1k0¥˜ý˜VÌyÌ f 3‹Åb°Xl –‰`‹°{±Ç°ç°CØqì[§Š3Çyâ¢q<\®ww7„›ÀÍã¥ðZx;| ž�ÏÅ—áð]øü8~ž MÐ!8ÂÉ„�„*B áá!á‘HT'Úƒ‰\âbñ8ñ q”øŽ$CÒ'¹‘bHBÒvÒaÒyÒ=Ò+2™¬Mv&G“äíä&òEòcò[ Š„±„�[b½D�D»Ä�Ä I¼¤–¤‹ä*É<ÉJÉ“’’ÓRx)m)7)¦Ô:©©SRÃR³Òi3é@é4éRé£ÒW¥'e°2Ú22l™B™C2eÆ(EƒâFaQ6Q(—(ãT U‡êCM¦–P¿£öSgded-eÃesdkdÏȎК6͇–J+£� Ý¡½—S–s‘ãÈm“k‘’›“_"ï,Ï‘/–o•¿-ÿ^�®à¡�¢°S¡Cá‘"JQ_1X1[ñ€â%Åé%Ô%öKXKŠ—œXr_ VÒW QZ£tH©OiVYEÙK9Cy¯òEåišŠ³J²J…ÊY•)UŠª£*WµBõœê3º,Ý…žJ¯¢÷ÐgÔ”Ô¼Õ„jujýjóê:êËÕ Ô[Õi4 Ý3šªššùšÍš÷µðZ ­$­=Z½ZsÚ:ÚÚ[´;´'uäu|tòtšuê’u�tWëÖëÞÒÃè1ôRôöëÝЇõ­ô“ôkô `k®Á~ƒAC´¡­!ϰÞp؈däb”eÔl4jL3ö7.0î0~a¢im²Ó¤×ä“©•iªiƒé33_³³.³ßÍõÍYæ5æ·,Èžë-:-^ZXr,XÞµ¢XXm±ê¶úhmcÍ·n±ž²Ñ´‰³Ùg3Ì 2‚¥Œ+¶h[WÛõ¶§mßÙYÛ ìNØýfodŸbÔ~r©ÎRÎÒ†¥cêL‡:‡GºcœãAÇ'5'¦S½Óg g¶s£ó„‹žK²Ë1—®¦®|×6×97;·µnçÝw/÷b÷~�åÕ�=Õ==›=g¼¬¼Öx�÷F{ûyïôöQöaù4ùÌøÚø®õíñ#ù…úUû=ñ×÷çûwÀ¾».ÓZÆ[Ö}w> Ò Zôc0&8(¸&øiˆYH~Ho(%46ôhè›0×°²°Ëu— —w‡K†Ç„7…ÏE¸G”GŒDšD®�¼¥Å�êŒÆF‡G7FÏ®ðX±{ÅxŒULQÌ�•:+sV^]¥¸*uÕ™XÉXfìÉ8t\DÜѸÌ@f=s6Þ'~_ü Ë�µ‡õœíÌ®`Oq8圉‡„ò„ÉD‡Ä]‰SINI•IÓ\7n5÷e²wrmò\J`Êá”…ÔˆÔÖ4\Z\Ú)ž /…ד®’ž“>˜a�Q”1²ÚnõîÕ3|?~c&”¹2³S@ýLõ u…›…£YŽY5Yo³Ã³OæHçðrúrõs·åNäyæ}»µ†µ¦;_-cþèZ—µuë uñëº×k¬/\?¾ÁkÑ�„�)*0-(/x½)bSW¡rá†Â±Í^››‹$ŠøEÃ[ì·ÔnEmåníßf±mï¶OÅìâk%¦%•%JY¥×¾1û¦ê›…í ÛûˬËìÀìàí¸³Óiç‘réò¼ò±]»Ú+èůwÇî¾ZiYY»‡°G¸g¤Ê¿ªs¯æÞ{?T'Uß®q­iݧ´oÛ¾¹ýìýCœ´Ô*×–Ô¾?È=x·Î«®½^»¾òæPÖ¡§ á ½ß2¾mjTl,iüx˜wxäHÈ‘ž&›¦¦£JGËšáfaóÔ±˜c7¾sÿ®³Å¨¥®•ÖZrö}Ü÷wNø�è>É8ÙòƒÖûÚ(mÅíP{nûLGRÇHgTçà)ßSÝ]ö]m?ÿxø´Úéš3²gÊÎΞ]8—wnö|Æùé ‰ƺc»\Œ¼x«'¸§ÿ’ߥ+—=/_ìué=wÅáÊé«vWO]c\ë¸n}½½Ïª¯í'«ŸÚú­ûÛl:oØÞè\:xvÈièÂM÷›—oùܺ~{ÙíÁ;ËïÜŽ¹Ë¾;y/õÞËûY÷çlxˆ~XüHêQåc¥Çõ?ëýÜ:b=rfÔ}´ïIè“c¬±ç¿dþòa¼ð)ùiå„êDÓ¤ùäé)Ï©ÏV<žñ|~ºèWé_÷½Ð}ñÃoοõÍDÎŒ¿ä¿\ø½ô•«ï-_wÏÍ>~“öf~®ø­ÂÛ#ïïzßG¼Ÿ˜Ïþ€ýPõQïc×'¿OÒþ˜óü%wu cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¯¯^‘tIMEà ±AÓ ÛIDAThÞÝš}Œ\ÕyÆçÜsï�™�Ù��Áõ®wëõ"/² †Å¡Ørµ! )¤ŠÒJQš~D-��0Ũ¢R…ªÆmUä, ò?±’?)ŠY´È µlXºÅx׎7^¯wv>îÇyûÇÌ\Ï®g?m Í‘ÎÎÜ�™{ßç¾ïó¼Ï93ðk2ÔrßÇwwîÜù{¾ïgÚ½AD°ÖÎ:n�ÖÚäØZ‹µVOMM�>þøã/¯ˆYæû½Ë—/uppðëÝÝÝó~¶`K Élˆãk-q†!•Jåò3Ï<³ÿÑG}ôš€<ñ×3l\Ó…Ì— ÅøøX×éS'·§Ó•ëìda WÀH#`k-±�€ql±qL†8Æí\·nÝÎýû÷o~ýõ×ÿà…^8·ÜÒòn¾sÇ—÷> ßêí¨yJ+”R¨Ö¢’²p”%íù(¥°¶Q2öJðb‰Û�<�ëYH@ÆÍ, [l­ÌØÝ»qÓxž72::úg�=öØ¡åd$=}éâ§ÒVÓ×âvP ¥U�¥œ4.V±QŒÄ‚ˆBDa£‰bD@Ä4ÅØZ…`5¢\lcc‹Ä�G+`…(†r9 V«aµ¡§§ç–Ûn»íg{öìyb×®]ß]*Ç`E�qê¯hU¯2]ǃXtº÷Æ/€É"öÂÿ_Å]÷90âËg©½ó}âÊe0]¤‡ÿ•ë'8ý ÊÿùmÄ3ØD VQ¿JP(b´£(•J õ¤R©çŸ}öÙ5;wîü§¥€0°•㪴+å%�?*ãáö°H­„T˨ÈbÖžèÜQ¼Þ߯ômaêG_%÷ÙÀé$š|wÕl�veª�2Š@‚k\´1T«U²Ù,kÖ¬ÉÞ~ûí_ß·oßÌèèè·ž~úéhA²+A5$˜ pI2Ò$¹jðCâk—ÊkÿLðþ°ÿÖ¯€Ò”<�ùÍmäø"^ÿ�Lÿû7)ÜSO«“B¢Û =q]°`­F`ŒÁõ}*• ©T Ïó°Ö:aîÕZkàÙ…UK)‚jDPªáé¨^mª‘™Ö;Ô�Zó_àmü"µã‰+e$Ž1ëîÅü]â‹§ˆ¦§™9òC2[Â)¬gêÅ¿'ºT¡&/¤1­@l! Á×u™™™!Š"r¹\¢pZëo<ÿüóù‡~øïÚq€T÷ªž{ïí©|ª›’c$"®…ĵ[ ±Õ[‹°µQ)Ò›¾@0~”àÔ!jgŽ¡ÜÞÀÜ�ßÁU.þð1 ¿¤:ú ¶R¢ãö?ĺ›é×¾ƒ�¨«U,4’‚µF0uÙÂÖ/‘Êtýýýd2|ßGk�ã8Ê÷ý­›7ožùÍH­ZŽ/‘�¥EBZ¾õÄó<•éèh_=(EÝ´ô…+�2+ðæÿUTã:ºoÏ÷q]­5ƘÄT6�eE„aØd6lØð—=ôÐöíÛwƵsõî€Ê¤ æJlؤ\­vo¿çÞOÿñŸüi¿ëºsœâ‹Y¸+[±ˆµtÞ°­5J)´Ö-æ2Æu]¬µDQ”€3Æd�1EàŒªQþôÈ»ïXİuÛ=÷mê];Øï§R×oUÔbû›Á+¥‘”Ök-Žã$æ³V«IÇÒJöZcÎçÏŸW«V­j½Ÿe¥”(¥ÐJ-§Tbóç.ênÚ6›_rÜ (ŽãY Œ1ɹ\X=÷Üsó¤– D)ÅÄÄJ)V¯^=kÙzÎf�­ šÏ[�›@šçÑ+Z+µìéº.GŽáÍ7ßÄó¼¶ïiÞíF'Ÿu¬”ÂqœY³n¿XÈSO=%׋arÿý÷3<<ÌÛo¿=+ˆ¹7inÀŽã`Œ™²y¼¤ÒZ,ËÖZúúú8uê‹^§É™Uv"‚ã8 ½Ò;¼X)h­ñ<ß÷“éº.¤R)Nž|8ñKM‚zžÇM7ÝD¡P`dd„[o½•0 TºÖl4,Yµ:ñ|¯ÅqÌÔÔ¯¼ò ™L†ááa2™L²‹""„aÈñãÇ9|ø0ÝÝÝh­Ù°aC{ižÃ�VY¾¦Œ´»�RŠr¹ÌÄÄ“““”J%vìØ�ïû‰Gš»¿uã�7²~ýzNž<É¡C‡˜žž¦§§‡µk×^%Ííª¡É�%©ÖBÜh•F­5ccc¼õÖ[tuu±mÛ6Œ1I9µÛmŒã˜jµJoo/[¶láØ±c¿h™­˜#K5‰…B!é! ñcîÌd2œ={–uëÖÑÑÑÁÈÈ.\h èš8²o•ÏçÉçó³À̧bÍ™Ëå8wî"Boo/ãããœ>}z^£¹b‹²\Ó˜Ë嘜œœ÷[¬VPÆÊårbÿï»ï¾Y½_?ÒŒ´ŽÎÎNº»»¯ÒnÄqŒã8ËòvKFš£X,¢µfbbb^ŽÌÌÌP(–äí>2ù]Œ3]]]ôööÎKt€K—.Ñßß?oÆÚ©ÞÇš‘æèêê"ŽcΞ=Û¶¬òùü¢×¸.åÚv„B¡@oooBâfF*• ¹\Ž|>¿¼5ÒǵùÐNÿ‹Å" ±ÇallŒ�7λAñ‰ô‘¥–Ùàà •J…wß}—ÎÎN†††–¿jý¿ðó‹®®®ÆFzȃ>ø±üòá#7nL$÷ÿ5�b±H±X\ñç5¿&cÙ™žžŽÏœ9C*•’O2p¥”ÌÌÌ”�êJ€L¼ôÒK??Ôê…> ƘÊÐÐпvvvž€eþ^K)åˆHšú×ÚŸ( Ê€ø_Þê�ÍiNfŸIEND®B`‚atomes_1.3.1/data/pixmaps/sp.png0000664000175000017500000000044315212624223016230 0ustar lerouxleroux‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ²d)ˆ£IDAT8Ë¥“Ý Ã „ïP»G`ÿ X {äýëQ0&‰Z$KÖîü‡Åc{%ŽXY=¦5!‰»_R¥Öf,±MJàZg,)pyRg뾯šHPÏÈ·«®ßM°»PûŒõ=Š­â–ÄK�˜Î.ëÈ ’ì3XÅ ¬7/aìAéÎÙâ2qzïÛt»›HÛ²Ù®V9+å§Uð¿óžöw43qŒ/IEND®B`‚atomes_1.3.1/data/pixmaps/ms.png0000664000175000017500000000111415212624223016221 0ustar lerouxleroux‰PNG  IHDRóÿatEXtSoftwarewww.inkscape.org›î<îIDAT8��“ÍkSAÅïÍ4É“J U“b¬©-$Ò•ô¯�.DwEpëÊ]¶Éÿ`H®„ªTºtåÚEi!¡„T»0±…(µ†6æ}]i^óšT<0Ìǽç̽Ì£Z­º¹\N‰¾/ˆ"àû>Žã¢”À0 c8¬¬ÜGçóy•ÉÜölÛŶ†(—_°ºú­Z+”2ƒ5€9T›„ùùNNN'Æ’ÉëT*•–išæÄ„Nç˺B,‹¥R7·›æxÓÓ�Îñ¥U¥Ó Z­O’zT Ñìï{ÃuCäÅÅ9ööÚh­H¼,S*Ä µ0J¾ˆL&E£ñmì\÷û}jµ½Ó?8®ÇÏÃAÂòò››i6ô~w¸5°,‹DbǶiÿÀììMr¹;lm5Áüö:¥Bœ…××ZZDˆF£ÌÌ\+ïÍ«wܾ»4 ¾_ÎK…8¦Ij!‹ Åâxã_ëƒq�°Ö~È'ÿCKg³Y¤X /ã/}kD=$?ë®…¬ÜíöØÙÙ&�^ ìëi¥Î_Í󻻟ÏÒÏk ‚Ôëõæ_|À$jßÉ&IEND®B`‚atomes_1.3.1/data/pixmaps/opengl.png0000664000175000017500000000250615212624223017074 0ustar lerouxleroux‰PNG  IHDR%‘)¶bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÞ  7 S3”ÓIDATHÇ­VklUþÎ�Ù�™�Ýn·Ý-¥Pú¢PZh * 1c©µy5ÁªÔG"RJ-jZy«1Lð¢�11cˆFÓb ©Æ„„Zé‹nÛÝvgwv÷úÝ´ŠÔ“Ü?ßÉwòÝsÏ=çþÃv¿úú¯ê?;%´pRÖ‰Cg·!¹TnŠ,)mÚÚÙÞöæht+pǾö°"©#“Þˆdh’þIL¸g2 84s9éQQÑjßÜÿÊù¹‹jogO§|ö¨^ÊYËÀŠ‡ÏŒ"àN# Q�­  qÁ@Z’eîº.úúô¡qƒÆ‰¦ä¤”"ÉQSº ¯ù…�Ñ{ÕtàÈ®ëÞ§“Z$ãô'‡Qä\GýÚ&ׯ®/¢MßiàO?ëêûþJÉ$ Òr¿ûàþì»ÕÔz¨v@)ý.­Üä1Î1?þ3ruÙ2-kà„×®@{;¿—§èîî^ábÏ×ý7¦'=ćìTòÑO><:¼·¹cƒÉÄÆ�í�·µ©íc1å/Ì€ªg |æÙ—$4ä›ßìyiÏcw+êÅÖ££×ôey ˆAv’x(06Ö{à GõÚ»Zï«««[<“Þoé8:¬-¢ aRá&ªBî—)9ÃõÌ“�:¶¯yË’|¡<òÍ8¿éKïûÅ»´°gJ]x» 3¿Ê6I®5£È 5‚®®Ï3M0%¼Çus�ÊÒB»¡î‘ƒŒÛ0¹ “|è�›²¬(E˜¨®®>$qùw0èèmµE]{úÎ~ßS-ïñ¡ìÊL{��$¼V9Ö ‘&Sj„T‡Ä¥Dˆ|N\(pø4óK•zÚèMôù|,1$Íó‡­¨°:Óy€o;)Öå&ù•Q›†²+I1'àJ wàqRð;11\F·3böô9çR«B NwîgáøµŒÓ‘4È< �Ê“Ô�ŸpÛZ›Èey…-m© §½ñš¿J‹¹iWøk¼cb‘îž*É–k1·¸xÑh¬S‹b?‰sE‰«h(Hå9Ò`ÅT�(OôfNQaA€3«£?Óò.ʪ Îä?3f"hüŽ95–ôäGÓ¶Q_¦:���žÛ¥Í–-Úò²Uý”5Ou l¼¿Èغm›ÿžgß‘÷�%/GI‹ŠfÍ<âÔtŠ3ÝM /Ù‚‘0HÆ(Íe¿ …LÙG¦„ÏG�O>±¡¾ªªêÜœ2ûèd¢g`BŸôF`ª!¸’zÛ@ÌMÃgŽ#˜CeÄ+êÖ×6¯\¹òƒÿmK˜Õ"„P/œ?ßýÃ¥Ë5ƒ±4¥9‘M2€  ¹È(bUõ²diII[ÕŠÇæººüí¡¿ÙV_IEND®B`‚atomes_1.3.1/data/pixmaps/svg.png0000664000175000017500000000575615212624223016421 0ustar lerouxleroux‰PNG  IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  šœtIMEà ±AÓ {IDAThÞÝškl×uÇ3³;ÃÝå>†»$—I­)‰+Ë¥i)²T'´Iµ‘ùÅtêÚ-Ôi  ¤­�>7…�)}h»A‹´¶ M…:H ÄD\´R ¡UÈʵBE–e“ßïåjÉ%÷1;;�~ v¼”—/‘j‹p1Ã;‡wÎÿž÷¹ ÿO.a'ăƒƒ‘úúú3€nÛ¶3_þ¼nqA¨x/¶, MÓrSSSºººæïˆk'Äׯ_ÿ¥†††ïX–å0bÛö:· ¦ü.Š"~¿ÿÓ¾¾¾¯ööö~x¯@À ˆ[HÈþù/®×|©óqLÓ\'‰JÙÓ4Ñ A8 ÿ«¯¯ïéÞÞÞ¾«ÖŸwSûëŠÿ¡z„8öÄ–‰¥a "‚C+Þ¹[w¶¡´ö�± ÎûBÌv}‡œR�Ïç3²Ùìמ|òÉs;"Ž/ãZÊYFA7ÑŠŒ‚‰¦›X�ǰc‚æ’ þ8VÓCh"h€}àfCMÉ Âpð$Vcœ‚Ú£ AÖRÈi:¹\Û¶]¡PèÍ .¼055µ-;v-(˜k£¢ÍÚ V‡ÙÿÊO‘ë�ÛËä_õàé=‹l¬2ýÝ_ÃÈ.Ñòò¿“<ÿ—,ÿàO©æOù�/H.n¼FÒW6dB—Ö„gY+++>|Ø+Šâ[çÏŸ/477ÿã¶�hw€X•pè}ú‘›:øðíW0ri<·“×høâL_=B¨Ñ­°2õþÇ‹ÈW¾ÍüÇ—ùÉëxö=¸L°…Ên³`� ˆ‚@6›%cÛ¶ IÒ÷/^¼hvwwÿÓ–@ t MÄ2@½„´i–¯üÍ„¤¢¹ç÷°}uTµÇÔ2,�ÿ‚ø×ßÂÔ5†þâW©ÊëèW~„èSdS‰€€$Iäóyü~?–e!I¢(¾900�{ì±ÇÞÝÔFÌ;ÑŒÊCÆÿí¯É®,qð?¤ùÅ·1«|dÆ>À5FõáSè™ÙÛó¸ª#d§p»ebßøñWßEjúùÂ&ß0ÁqM*‚ à÷ûQU•šššê@ ð÷�›1¬5ih%@wôÄM~úò!F¯¼Oý/ÒØû…BŽÔÐâÙ‚à¡/²øé…ü*–m#ºÜä�›E=Ú‹Y]cÚ¬< Öš»ïÄI’„ÃaTU †B¡ ýýý7W-sM½*»mCõ¾8¾ì7ÿ¯]¤:Þ�V°H^Ÿ–®¯!W×0ÿó!“6X]œ&Úþ+ˆU*Óÿú:µ¿ó&†¹¶YiWÑEq¹\d2Þxã 2™ ²,�F‰ÅbD"% ]:�Çg7·‘ @Ì<ü›g‰´<ˆ¾š$Ôtˆÿá5 $‡/óà³ß`úÊO°<÷gt¿öËt}û2ù¥9 Áµ%Q”p) UUU,--¡i·oßfbb‚��TUåÈ‘#û8ðýÑÑÑg[[[—Ö±?S«ŠîW‚Ÿ½õÇ4tþ6J LêŸÿ†ôÕƒ #WùÙ^Ƕmr©$¢ ´O/ñî|�ÚãÏâ 7±òã·I\}QÌÊ@L\n7^¯—P(„a(ŠB.—Ã0 ,ËBEæçç±mû”$Iß~w�÷ëÞOCÏÎ×ûxh3c²­2Y)z‹ë]j9½ °qÒ`ƒUÝÀ‘¯ÿ-꾃¤ÓiVWWÉf³hšF±XÄ4M,ËÂåráõz‰D"ÔÔÔ|©£££ß‘ȪNq2ÍpZÃmW%Ÿ Ç]å«ß¨Ù¶6!„u8·“bËÁ(žê>ŸI’ðz½èºN±XÄ0 ˆ ¸ïH.�Nÿð�+s,_™ã÷ÿß³ŸüÊÓ]ßzù›ß-%�•v¡Œñò´ýsFX¥(ÔÖ„�$·Û�Çãq˜/Ý­;›'Š"Š¢°¼¼\uwökÓÛIºO>rðÀþ&gÑ�2Þ­æ+Õ%åõ‰¢(ض팻¿çr¹�eY¸çz¤¬6«?v àîgI’*,• ¥úÅív³+ {ñn3‰l´V)P–€ÜM³# åRÙkÕÚÎóf`ï›jU¢ÙŒ‘�0^Qb{ÖÅ(Yú�(ŠäóyŠÅ¢£•˜*g¼RI¼È=S­òÅË�2ŸÏ³²²B(Ú¶Še‰cy/`#`{ªZ‚  ë:·oß&ãñxÐ4�B¡@CCƒÃ˜(Š˜¦éx¦rð¥4ĶmQ…`0èÌ•h7rý®ÝªS @>ŸÇ4M Ã`xx˜H$‚,Ëd2'¨�ŒŒpúôiúúúhnn “É ( 'OždnnŽb±H6›Åív“H$H$444P(p»ÝÄãñÊõÈnlÁ²,t]' ríÚ5FGG™šš"�¢ª*x<¢Ñ¨“ ‚@UU«««X–E*•" ²´´T*qùä“O¸qãÁ`�X,Æôô4£££ƒÁ URÜ�A§Ói4Möm:::èéé¡P(022‚®ëtwwsãÆ '?òÈ#‚@gg'‘H„±±1žzê)b±˜2‘HðÜsÏqêÔ)æææp¹\øý~~øa¢Ñ¨ÓÜ�»A¹Ýngø|>fffèêꢭ­�x€@ €×ë¥X,¢ª*š¦!¦i²°°@WW’$‘L&Y^^Ʋ,dYFTUell I’H§Ó466®³•]©ÖÝÆnY–£×>ŸÛ¶¤¥¥EQ°,‹ööv†††�$‰\.@2™Äçóðx<}$q’ÅÇ£ë:ápx]dß)T[[‹×ëåòåË\»v ¿ßOSS333,//;MQcM¥R,--¡ªª£N²,sóæMLÓÄëõ299Éìì,�‡‘‘EA’¤Š±êž%Ržç|ôÑGd2Nœ8ÀÅ‹ÉçóH’ÄØØ¢(bYmmmÌÏÏãñx@–eTUuv9 ÑÖÖÆ¹sçH$ô÷÷séÒ%Þ{ï=E¡­­mÃÀ¸k÷+uuud2ü~?ÝÝÝ|üñÇ,..¢ª*ÙlÖ¡õù|Ž«îèè`jjŠŽŽÇpÓé4©TŠçŸžþþ~ÚÛÛñz½ìÛ·EQö> Þ½P©ÀJ$ª««X\\tôÚ¶mdY& ’ÏçÑuÝ ’¦i:@dYÆ4MÚÛÛYXXÀ0 ®^½Š$I„Ãa;Üó¤QE ƒN÷#•JÑÚÚÊ‘#G(?Gñz½ 199É /¼°î] àòåË(ŠÂÑ£G‰D"‚€Ïç£X,’Ëå¸uëG�]÷{Ùëëëéééatt”™™"‘���¨ªú¹�544°¸¸H<ÿÜ»šš:„a¼óÎ;är9\.†a‰DxôÑG™˜˜ ¶¶–¦¦¦½W­Òn;vŒãÇ�cÛ6¦in(þcÇŽ9n»ü`rr’3gΉDÖzeÓÓŒ��“L&�Üë¾DöRÂWʱJ6#ŠâçÒöRJS²³Ù,555x<‡ÙT*E  µµu­o–Ë9qgÏ“Æòt;燕æK™ðÊÊ ±XŒááaVVVÈårÄb1’É$³³³œ>}zÓÂm×Ùn‘µYñ�FùàƒÈd2 DQ¤®®Ž[·n188ÈO>>[( îF¿ÚS¦].÷ìììº_ítËê€V ŠÿÝË&^}õÕ©³gÏÚ÷DØË6ë./«ìPŒÿxª*ž3®¶qIEND®B`‚atomes_1.3.1/data/pixmaps/dots/0000775000175000017500000000000015212624223016050 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/dots/dots-h.png0000664000175000017500000000042315212624223017753 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà q ¼ IDATHÇí”1ƒ0CŸ“°� åþçc`" Q:´K—B RÁ³ÿ—e[†ë!BØÌ÷Þã½?]w×u˜«…¥=Ç1FrÎLÓIJ,ùmÛ" I8ç(¥0Ï3¥”wQMÓ ý&OƬµXk1æ™ë8ޏ½Ž ÃP¿11¥T×~ÖZÉ9šlß÷®WéÝ ÇµµÒ¯ÓY•¾WúÆâø6àªTaIEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-d.png0000664000175000017500000000036415212624223017753 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà ">¿UÞ�IDATHÇí”Á Ä D_òÿŸ+1½´ÅzYÊîÒeí@3ä)Ì&ùš·ªRJù™¬ªÊ2Ý‚Ç-GÄÇˆÙ½Ì w§Ö @Îà8§”‘·ïo­�æèýÜý4d 5êR¿¾Ž;KUæC:u(Ê ¤åêóèefr7ÒÏ/ýèµÓ\h>T:8IEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-f.png0000664000175000017500000000036315212624223017754 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà *f>zj€IDATHÇí”A ! E_TnÞÿpžA2b·ÓRÚnÆE�YH O’ŸÀn‘e,3Ã̞ثùa»Ÿ1FT€Þ;c ^ó9gB¸;îÎqÌ9ßO)QJAUZk?³š?¯ŒZë·æ/áogét¶÷•–úe½–ðï+}ë¿ôB3€¢1ìq3IEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-g.png0000664000175000017500000000040415212624223017751 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà l§Ý‘IDATHÇí”1 Ã0CŸü�Áñ”ÜÿŒíÉv‡–.�´1”@c�F BÁÐ^f†™uçcŒÄ/ï±, înãéìÒ­5j­˜!rΔRóó<# Ixï)¥�RÚå$1M’úJI8çÞd:÷ÜuÛ¶óhíƒ ‘ÿ‰×u¸Ò¾ãÀÔ‹ôëÀtÒ㥇þPĽT‰Jx…�IEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-a.png0000664000175000017500000000023015212624223017740 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà *®çðb%IDATHÇíÑÁ ƒ@#ûÏ\çhä~¼™‘T �/½.—Ôä›Pó6P0bIEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-c.png0000664000175000017500000000022615212624223017747 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà  eñDÞ#IDATHÇíу@´ç™c'߀$5 Ÿ‚×ç’šµ#ÒÁ¬…IEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-b.png0000664000175000017500000000023615212624223017747 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà 'eøò’+IDATHÇc`£` eÀÈÌÌüYàïß¿ŒÈüá&Ï4ç£`Œ‚¡õ ^ ©IEND®B`‚atomes_1.3.1/data/pixmaps/dots/dots-e.png0000664000175000017500000000042615212624223017753 0ustar lerouxleroux‰PNG  IHDR< èß=ÂbKGDÿÿÿ ½§“ pHYs  šœtIMEà %ïšVº£IDATHÇí”±Ã0DØYÿÿ—ZŠmº4Ò¨q—FjrÛ�„î\Q"‚ˆ ûÍ 3ö§”H)�¾§™¡— w›ô*w?lž¦ €ÖµVzïý9gÜ�Z+¥Zk¨*!B¸;˲Ð{'Æøu[¹;"‚ª¾æ”RÞÑ|SG ûsÎ{þŸÔz‚—C:î<0Eú™²Œ" 0ϳœ…ôý¥oý¡»co«y¯}àIEND®B`‚atomes_1.3.1/data/pixmaps/ri.png0000664000175000017500000000145715212624223016226 0ustar lerouxleroux‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ÷ßúd¯IDAT8Ë�“KH”QÇÿ÷»ßÇ™FGñý` ÃpRóQù˜D¥"bÒÂÜ”i‚‰‹°MèB£qU‹|´h'5"E*V0FŠ©)3Yi:Ž£ò�6 ftV‡{Îùqÿ ìZLL"#o‡ŠâÈ Ù¼6Ÿ˜¸ì€°°^ü·IÒ�q½~V­¨ JOW p6ïÅrÑÚõ;ñ¯A¸Bfó0UUyUÎ‡Õøøµ¬Œ¦/{H–¨Ê&àÄ;ÆÜqqäËÊúý188‹í(Êù{~ÿÉFAБª~b’„1�æô©<­]Çûá^õaÇ墔‚I¢ §ó{@²|u¸D¢˜òÄ`ˆËÜ{·é•Ü œ·Ö4MjCM…„Ѐ`4vBB²-@ q~qêê¤#–Êòà@íTº¨ùœ�Âb©–$i¤“±Ö ™å¨ÝdJ=P\œ”ƒÝ.æ‰âsGT•ïC#"Ž@’š+ÊÊÉñ¨Fc/ Õv¥Ððp”0fwœ¥ „��•s±±Ë”œƼÞTRÕ‰¢Ã?<|–�m9¨m¸©A݃ÓÓC¬»Û�ˆÛâë/ËÑv¨Væ(Ü7B6¼eyš}Êrpž?’Â;h<­z? Ëw+Ìæ¯d0¸Æ€É F–ûÞpNkF#mÚl›®àà’Àâ4+ð”,Rë뉴کB�hYd :«•«UfªêÜÊÎ~í²_ŸÍ/¥íŒŒ¾¢¸H……€Ó¹‚��ñÂMû‰Ju:�ÍÆ<ýý4éóÑðÒÒ¹õ�¹Ÿ¯VãgØæÔ/"cFOÏ#x½nâ|4p†"EiO÷û›¢µZx|>Ø3¢€�&óÚö¶®…±5—É4_y`Ig$é~± ÌåŠâp‚^Ÿô¯ß›�‡?VÒ£íp}IEND®B`‚atomes_1.3.1/data/pixmaps/logo-agpl.png0000664000175000017500000123240315212624223017473 0ustar lerouxleroux‰PNG  IHDR ȶøŽ®'ƒzTXtRaw profile type exifxÚ­œiv\9r…ÿc^f –ƒñïÀË÷w‘IÕÔí®¶-©DŠL¾Ä‹á¼rç¿þóºÿà—…à].­W«Õó+[¶8ø¤ûϯùþ>¿¿ß¯è}ú~õ_w«?�|ÔK>/ó¿;|�ÏÃ÷ßö}“ðóúŸ ý|Ÿ•ß¾1Æ÷ëó�_Ÿß Æþç }W�Âç�ýþþÀ÷B)~W”?ÿ^ßUëí·¶×÷�ó÷Ký·ÿrj±–Zæï}kÕø¼GŸñÜZhjïí½ûy§Ÿ/üüû祑5Å“Bòü�Òw•IÿÅ4øØÞßÝñÂ� ÿˆ||V?©!•,� ÛçÂ÷{« æïcó[Œþɯ¿s[ž7¹G/þ]Ö~}üSÝüúìOuc?ßÿ–Á¯¬õú}IúcZ}ýõñ~=”Ÿ ý|#ýzÿøûwîëWÁþáë>ÇøûP¸ß§ûÞÝï»iîbäJ,ê÷¦~nñ}Æë¦¢ø~ªò»ùê¨ÚÎ'úmüî~øE l¿è´Éç"¹¿!‡F¸á¼�+,–˜ã‰��1.GÖõÅN’,®¤bÈúnlÉÒN�ÂX¯†rŠ¿ÖÞÛÚ{»ºßÎïÀKcàbáÙÿò·û»/¼W½ðô—úðÉï 8«ð�ôë/##á~ƒZ^€~ÿù—òšÈ`yaîÜàðÓ}.1Kø­¸ÒKtâ……�ŸÞ m/@ˆxëÂbB"¾Òa¡²¢c �@v4XzL9N2J‰›EÆœR%9tïÍÏ´ð^Kü|TMÙ©MéàN†ÉʹP?-wjh”Tr)¥–Vz±2jªê¼Z[<�–Zn¥ÕÖZwÍÚè©ç^zí­÷n}X´|£O­›Ù¼éàʃŸ¼`Œgšy–Yg›}š›cQ>+¯²êj«/[cÇ�6 ¾ën»oÛã„C)�|Ê©§�~ìŒK©Ýtó-·Þæn¿vǯ¬}Óú—ßÿFÖÂ7kñeJ/l¿²ÆW[û¹Dœ匌ÅHx#kdŒÂVÎ|9GeN9ƒ�èŠYdQrvPÆÈ`>!–~åî›9ÇÿOÞ\ë/oñÿš9§ÔýÍÌý5oÿ(k[,±^Æ>m¨ úD÷­rù»çVÏ-$v›ÍŸ[Ïnä„tPHÇ¥S÷ÜzéÝ¥tâ|&–{×1ºµ2z.¡¿w̙ΦWÚØ…BªƒõÙ>¡Mð(�5ªAbTF‹c/Àªe]<+«ßÞú®gÝ2fk¤m§Õ&!N)ÄTÍ%¾y ¾Þvû pî‘ú&Ž7Ó¢†^˜©,‚â+xZ~»µïÛìžfÆv“k£Þ›<_Hãær»•+Išªž™öØgÕGˆ�¯qÚÓÚŽ¦œcªÒtùòºœ%8O³ ¨Õ¶n&þçÜî›Îf¹»ŸQ|&H ö„4¸š‹m¶P@÷ ?œ�c½ ÕQå[¶'¥ÙˆÙ-‘€uÖßÛ9ñÎÒo˜”Åj6î©n¬9/]uB!ÁËŸþÂ0Ú™¬¥×Måî:ïl\ùBÞêDº¡—dÐG†ý~®µÓ¤�+Þc-�áYi nÝ¢¶HÿÞ6Vš�Òj´Íîm¥°3ká’“e�ÎZáÅBˆ@”jÉG‰êQ�ˆûÚÂî�Ä޹̲¦CrÌU3üs&%€¶8ò¾(į‚Ù�+ld*툾LÈpÁÓT ïÿa_\B C„ô´¨’$ ^aÿz 7ó¹¯å¥JÂ^÷Fwá¬]¨ÄtB Iô4ðSqÏ¥Ó†ÁTûËË—êXy`† [®j _ ûá„IB:QƒÔƒ¡”n,ÀòyAêJ¦Î¿é¤^gW xCÜ·¤ËC‰ðÌbÅ|^p³oT01…øáäNž¬zæT·z¯ÂeVgU@ÍyËiT„ØPHOȳ¸ƒ’p*,bÎ ¡FæÅÄ,´ ¯Âji`Tâ¢å µ$6oEª�zŸIŒwEóÔÐPo[zÎÜG—]0¡€Õ,Q‡7çáBdÍ8hRIœ‡ÿì£ûW/PïT¨¨² óOÃ;,×̃Fn_œÇ!€û–JPC"B·†MÏ{šA°èl@èÚùdÛÃÌ`"ÕIñuj�ž^¼<9^.¡° 4ä. V"m#I‚BØ”*V¨Ó̹ŒuQjÀ�'H�ӥР˜ ön$„qr%d\ÅÑ`¨TOp‘*»µ'¥©s)n  7§ê�È$¿ø…R[ÀÇåýÛ@Ç¡@ÊµŽ†«ý©%äî¬oD¯”Þ@Ú*5DDƒFý„ÖDË$¹IŸOõ©`^bˆšœ¤Õ ]5`bSjú"ð©8Ô:ÆEMµKåoä$—@0Þ…6BD � ˆ²wa±t<:aáy`­Ž®¦,ï¾}d$øÖK¼�èÍ%eqz¢¸�¯ª$ÎÜÜÆ«@ ]äÐ7‡€OÖä̃ã+* uP§ ÇHªôN/G`›ho+1Ù^(yÞ|y®S·�P-Y³å¸ÛŽžëo¢r„Ú¨ѧ¡�`0šd€³'“Z FÿÒAq¡œô5îºÃÆÜ¤#Sø †hÃØœqmXÒFÝ€B@û®Â{pO/',@D‰TŒÍ9�eøaToîÈcEÜ ÷5bˆ°r›@Mx€l†�P�ÄVÔ#뇖%~þQ8N»UwÐKÉÈ6‘ßäl!ê¨RÊàù jÇm´0æ6Áß­€VÁ´îŒá>F N0jàéwDÉ%À'¬3°ÃÃt"T^cD~4s€# ™ #Q¥ x€ò�¡p=A7R_HÀBÉmé3 Ó<ïŒöR¸®iAðØøFBptš=>ët‘®8_–�ìn('.G{ @ƒ49ª;À ™S9ô1.~&­½AÝ�”¸Lraø×ú‘ÞÄï«€âØl²‡û!íï~DÙ8P`¡‹¨QRuµ,/%Þ q¹†ð½Eš°õ < ]¦A‹P¤¹-s\Y]“|±›áoZÓ¡1ÆVˆ\à6ÐQE:kd7 ù#|.Ò�FöpŒ6‡í1_€ ª)€ö¨�!T~±pZ”ꥦ U„AÐä¨0ÒÊ…²QÙID£ù%e‡ÄÚ,Fò .B¤5·B­8°"PÀþ#µA ð0êÎc€°ßg¢ÂuÂèú°¼ÙÓû“·€Å%¼)?rLµO¼aè!,<4�3ÜÉ'Q÷ôe\“9ä…Ím®T“F ð×y³‰)WÍ]"¾NÅH6R'ûä0Ct$Œ’ÂEÍ!FëÙ™�+kH÷ƒžñ¼wÂN®Œo½íãNj*Þ¨®ï�Ak”×B€U¨‚ˆ#£'¹4(¶ÞAì��/0W•�ŽMðÒe¨‘ŠÃãH…ué£%W K—‰D ˜íä¡np®ˆË9Ë àeb¸W”c Žw­8wZ¶ �«†è ºK÷˜Î+žOÓRV9_Új*¸7ï€INuU'üB˜¹? 8¹&½dÁ`¹”1o]áì%gOu] âæÝ³¦(XQCk âèD˜jãeÂÈà*^3é’ÌÂhìb,*¼c™:hS-4(Q8RRډ˛$—©”4͉K3r( .á“Ýô�‰G¢/àYù(� £¨áCŠßÙÅÀ@(x­˜ßÀ=œ`’%¢F«´�À†õ€ÈÔåÉa é³ýázj––õ…Ø,Š`úrÓ ~ „&]5² ŒG½áÖH²cÓLÁZq\·5¬ÂÄ”ç°ÑÞ¤ŒŸ¬ri:ÕÀ�Ú´ƒ³áÚ™©ù$Ô(MY`ß”}tð5š†²¸±;k‡§hIa0y�(!S*‰ LtíI«\£’‡&æ=9üÒkhtòÛL•�Pø *�Ö¨o Ѽ"ð3Òä~Ü7 >âá݆K3à7K=YVËEÄ;B>‹nNŸðX½©ãb,ÈO%ú±ÊUÑOÜAEÙ:ìÛ”)U¨YYÖ{MÀE>Ûre¶z°ˆó¬;ŠYˆw…â„ÓFÀ„BÓV}’‹6û>qÊ0�@øQk Š`ÆA)ÔU.°ìƒ‹Ý²ák‚;—Z隈¼‰JÊÆîkÔH‰„9¬Ì€Uù£m_Ðu‹°å#¼Vì7„À±ªÏvYë©ÐÅ/pôb_´¡¤úÆëâyÓÀ™ÂÔ‹8úa01vHzª†¬M0„WkÑ€¼©ž€*ï<¹§Å[QaTÄ9è€KëgDì´à�ÄŠ/T’‘¬ÊíÓx Ðõà<ˆGÕF9~¤rT÷�¨Â¨U¨)WäêÈ„”ÉT’4è©øLf£,:ÍÂݦ© s#| à¡·‹{ɨb:ÇœÂ�³µ<=Êuí|é•w$�Ù•š²ÑU‡z½Ô« h*„ÀÅ!J‘II£�H“W»‘%ŠÁ†@Añ€9E§ C(7œFÔÐ�Ì�6Ѓm3Í+š¨Œ�_°' ðäÁ÷ÃÎ‚Ò ¶À‰h´‹ABcbB£:Eþ�%wÖxc�†Â8åj÷Œ�T§h°©í8ÍD¸Ý-¹æŽÓáX«†€*]ým�,Jëšlxð¥Þ{‚Ô(þ£ †d½XŽÐ}êY7x!ZØ �NœxŸ5UE�À'ýÉØôA]HnîÊI!zhqj éÇ­£ìæžó#ó ]9NR¥91õ€+#zôÀ¿ñ}â(ù¬¤‚úæ�x˜+. Lì×@ÂV -EO €@CKd ©ÉTC;¼NClÄ·'¢!?b4Ð7ò[h׊$,%OÞ c‰˜:¥CH’]„2ª„­±ôBÛ —©x­ƒ—ˆ¨»YâWÄÂXwš‡œm¿� *­‚ªm­o)öç+µÿÒ2 ¯ø~JM�ìÃã†Á¢¬ÂȻѸ †ù�Â2ÛYHJt(5Ê„w,5ӽǡ˜p#ííÁòIhkt°t™‰üqmaáTлeIJ|ЭÚ`êú´8 йIÚÜû7ìÍ¡‡ú<£=A‡Ã�º_ºxˆß"2S†—–8Žà4#óãm ¡éëÙáœÔ¨@­×lÛ–”«Æ2ȳw×;&ý.ÃH ËÔ‘E@ 3†fÀ3…•†‘ÊF¬ùÓQ¬øø¤cЈÄ>h;®”+4¡é ÜŸ #„¨§ÑöRCª ›‰ Ù´jåE«B:Ñ£1ÏÛî[R3ˆm²�½ÏW¬� §Ÿv¬%„²¶?·çGMÙDC¡E ÓÆKƒ$SŒ—¹¨>rh`ïÉr~b,BvžèŸè Ü0Ý@#S è„ ,кà¶mGÈ®v$±¡R°|`�øt�‹f‚xs:ær_DÕ’¦Ãu® Ò[òþ.Œ7ˆ4(5Àµšh7¤Ôð2O¤}$._Êej¶Äû@ÖH+uúa ’çX‰vÜIlÒé†7ö[oÚ‚=±£a\×Bˆ+cj4"QÚt�µ+Yã$‡�<  înÚ!ˆ¿ñÚ¬0ÍŠ€ÓV¨v")ƃÜ!Ž˜¯‹ÃZ7+Ú£‹‹÷ôHíÌ�#JÞÃnh““»¥†aÑÎ-eõ!ZkhSV²XíÏr‚²��ˆ™µòà®°ÀŒæŸŸÏ»à¹:µ€$Ãå=عa/TÄR‘øæïbë¨|q © ùû, 50±À3†XÓp6 •6Õ¶Ú2Õ\bÂ"è­¬ TÄ ¥¤ã4Ù¨A{ §¼Õ@h5Ä'÷„0`ßÎô]”·Ã’ž_;^‡B¸í§üÐ`¾<¥äûÀj Eˆ½Í4÷ðtS®¤`�â€u(–?Ø€ 9Ô@éTÝØó ©i�‚òé—–…\pH½iô-.†#hÈá䢳¡H*2Bñ¤€ºD7kßE§P‹á�Ô4‰mÚ. ‚E›¸Ó! jD‰*š îÆ.Ÿ4¼.Yæm´"�;ާgþMFŸ €Ü4…G9kËØ�ÌÄñ••kïÁ¢†p¯±�/?M˜Þ èˆïiƒµÁ4[3¼Ë¦#Ï¡�U ÄDT^í"šJÁ—X},!eÁj.„ƒúˆ(/àG´:uƒTrF»s'%P0” žŸ¢©‡U 'p¸Ÿ„(Ðn#ÓѾ؟ƒSf5.Ï…Ž^÷ˆ8j./I€BD—j�ê9âÃ`…�z­eÑ$~¢l¨½V³«ÒÒà°×>̦& .MMÏ3”dˆ@RÉÝ„¨æÐ¸ËE«‚ÁÔ‚Yж�1Cd¸ó#ðÁÓuZ_Ö©S•×éŸ|ê<À7�u`7h]Lú‰Ð½æ‰1ðöe¼ Ó²š’ dˆöï@“€ÕT¡]ˆBØÁF#££QÔ©H^![ÑE,ki·�Žð•[’#Å\UmŽŒB~zÄ"£õ'ê’A�])(DDÕf¯â– Ñ® _‡²¶Ù‘K€6¾úh[ã.…œîÍ�”5™âeNûB§£w¬V¨\ìË“½®)bþÀtè*¡­œ(ßÇ�Ëž®Ž·¹•­]­£#D Eãæ.$åóª½ÒÙ¼ûÞ÷ˆ…Ê´×­9dèž¡Þì´�BG_m`¢ÌW{âE¾R-"³@÷³º4B‰X‚5¼ p=/)Â�6‰Q>hœ©!!DltÛ\Xg:iu&¦A7¤:žÝ5( ŠÙ C(!‹‚¶�ÓE 2zBú*ÊŠQó`7f3�NÇ�ËÐëz *N¡5e… P7OL[7—jŒªj2)}$©j:™;¬šQOqŽf¯˜‹d‡ä·£ ô`–x ÑÿN§</�ÉjülÌ"‡ú^§„€4 ð»2Jx·Š�Ó¨ï@7œë@háœÐ£^ÛXÚRšˆ®ÜË;NÞ _|„‘.Úk×€›$ñÔÊÔ1âíM#VÚ‡I~çô‚C^‰ˆÓÁ¾w Èül ÔLÝq,–hEmZ!SfGhé¸IC<^FSaL!?ê·i¬­MÀ¶ê†è„u¨)íù_.ÆûTב·&°Y·6MÍà剆Þàƒ!Š %ERÕ·ÀØ"Ž×2íü&kíÊ_Yì_~,Q™Òî Ö„ëa|—Ó_ #kм»ë¬§A°ÈnL*ò ZÛÈÝ Q†OÓñ�‚øAqÀö£¹÷*ÐÑÆ z»š¶ ×Ön&¦�±VŠô5ðÈhh7�¬1XÕVéÐÑ¡›¹‚`Ò?XÀE1xíªõ |ùG4®×ÜuÃnQº ¤-�H‡?j•¶uHV¹sh`;€ØMéOê}‡J»ÑËËKóК:½„ø¤Ñ4;@ -$J!dÞµ FßÉ*nu¼’Se¡ä€›�ZÔÆ˜§óLÈ1¸VbB7k `¾Õ…·™DÏJãSž'œ?芀¢2ó„›ðe´,J�y%ŸITñ�Ä5ÁŠ�gÇJ‚[5‰$‚‹ÓÉŸÓG$±£ý¢­C5\,¢ÛêæVÎ ?X©ì ªkŸ.CŸøEs~{—·Ò#�ßx'…š -Æ;œ³ª†v }A_#‰ºG� Ó©�ª«pàùàætÁ ˜>HJØ 7Ú4ÎÃ�Ÿýêó-ºéa½ÒµwJÑ-qò=œìLpEþ†«MøÌ4ïMmiLKTÍ¿£f˜Ù–\IBR$B©Iûh2.•nC—òöÚz#q ZØ:J�›.ãg¶ö uƒ¤ë8pH{]|µC·up* ®¶~tn- ˆoc*èd€«Ôˆ… Ln—¯Â)|À>ܸ:wé5°Ô±€“jË }H=ÌöÕÁ™XLMÔÁOrÝ72ŽF�ªÝãˆo²Ýí«Îz“ˆ¬s Þ+ítpD”¨ª0*øµ¥9"ÁHŽŽ}à×¼éÄãÑ™¹þTq„PBAΈðúÒ€#^% [z µ©s`È_jЀ MÔ©8ÁL®ãg]¦ ´6�’œ)Btû£ôÌèߤ’Ä]`Æð¦˜ÔÙÖuôþÓkuûÞtø]'CuŠ£„ªÇl$™¬{ËÒCȃ64uüâ¼™E!¦AãÜ,øÐPQôÃÀþH_3µy4¢àŸ¦ãïbðbhüNObË’ÜvA¹4KÇF‰é( ¬:¦F!:mhûwòF»Hvt>­atÂféÔš‹+Uw}î:Ö¬2¤\|Ž›¯êÕ¨ýb¢CmüÒþÙQ¸�º!LÒÆÊ²ó9늷Q´÷°§&§S{¸¯M ¾­ýA1˜JŽÈ„Þ·Õ…ûVZIß\Ó&JY×:ÏÐ…×tÆûÉOhJEÍ-ˆñf:×tøUæ™O(IT‘«:„¸Hü<­SYM£äpÒì ”ŽØ�[Nô âèHÒ8„»Ôõˆ�°Ó:$ˆp”ËA‘çHCÃkñkU¼Î­Ôt©ˆc楦“^ƒATDhéÙ‚†›zšvÚ¸&UsŠF§üTȬ¨ªŽ‹¡Zjþ³® yëÒ‹hÅ�Â츸¦¡?t’É�râNòès0K•m+š2Ñ”B~oŽŽ� 2Åäë< mÆQÿ…ª+¥M¢õCÓÜ_×ÓÆ[­Ø ·´ÛI�'5ó0YÆ­½8–‚b"ßölÍ‘dÚòÑëvâ­“oT]= ›Cˆ0¢6I¿eÁþ¶'SXc‡(ìÚ袷ÔðÎÏoXQ"–Ë;Ôch)LmsO�•Z@éb€òR¯�Þ1c ¼yÔ4æQç3³ªõÃçµé °£��(ïr=êG(²%î®6¦µ-Ák@xÄ�@èèÔ·ØOÛ�0œwŽtÉ•�DMj´7‚{˱²Ñë„(Òt>°=¬nh¸XNÔv뀎pgØ,P¬©B]¢þ¼‰Ç¥Ðt¢«y�ËuðuâÿÎBãRQïD2@@@ÕÁyE§ƒoQSÑŠ�zŸ ½Gøu‘KrHfÝ µ 4¹C> U3±•üÔ©Ø÷O|ùÁé4ØÔq4¶ú¬¦ Bx»Ÿýn´ƒjgê­ |äɦTˆ9LG÷“å¡PmoÿðÃLX^|ëГ à‰È íUY[�°â½¸ç©£×ÚD¢¶¨#�âÅVðréEaP—9ƒ©ûHð¢p¥nõœ®C„’£,[°ªŽÄÜÈa 5ënÙ~Þ£eŠÈ»ž…¦Œ'~|çØ¦×QÜ6Q'ˆmÙNd‚¯À¢pj$Exß‘7n̨-9� мù¦U‰#tµtn4jG+#dnp)QûÛ;®™”÷¬!‹¤)5Ú.úA™™½&QÔ ³è�<.§ÓVËaL5rö¨Ü†ZëâÄqÿÚ¨:wCÀF�ñ_ÑBqGòþ†YCÇÝÁN›¦ÀCÈŠ!jŠDs „° Ígí»CÿÐ0Ê é�ŽV ï koºÏÜÚ»‰ªÐÂEçWùiLºtJßÛIxµJgT�‰š^Bµ‘\/hŽX NKš!ñó¦B°ë¨uù†‹³Žoæ0¾�þêÚ:Ô”&¨b`’ïnéiÄÎ�~ÎÐcX =“ËÓ˜š#bÔLÓÈP(½$„X´´áDÐ Ë ¾ÙðúÙ“gC QÓD,CT¸WŠÞÒ;›@JnÎïMI²L'¥*Èá´ƒ|éd„D“Óõw’y‚%¿àÔ¦SòC§¾ G$,a’i[Éò¡£UÄ(#[‘Æô¯×$�Dý�ECGCĆçêhŠâá{¸:íƒ,­[ƒ­ºšÓ€2èˆùŽÒÄtòGñŠŠ. ß߃$xÌÀ€"I2z ÅíSÞn[>hk@� ¡߀CÁÜOß;àÊȧ|g}¾ŽåeÄ�é�æÜØ€Æ4TbQ2�UöN!™]á ÌÀFym¥š}÷¯!ðÕc<”¯ ¸wDFÕÖ€Á…S3Xܳ̕i°³)H”�ÎIë8Á #©´fCó½Ÿìº|�ÚöG zð„År‡¨è»#K%ÔœãPUrÁ“éD%œŒ"“0ËÈÄšµÕ5Ó$T…·Å­±¨Œ£Ð‰9ä3Y‹GB«#)ÁÇ:h�­• —hÊ’û0ËcÓ#2KÚˆ(Xâ;®«÷r�ž5çžzƸêd,àW­­¬ýLŠ�yõè”¶®¥Á¨v¯m°:|»�–!É»Nœhä=µ€öÎiw‡¯ªÆ@7S)k¶Þ>û8 gS…øvF`eìµ[§ê!º=µªÉ$y1MÙÞ).ôšÜÃÖÓL�õuœ‚L?ï‚ù�Ú7&-V¾z=�ÛѯGajB zp:ëgŠÎbXèUrÜ�?ÎvÔön¯@ïð,ÐùJÓù?m šÂ~öA‡¼i�!‚HV¬ ÷¹ß¹)è¨h;T²¡W¿ÀŠÉetüxAk‡²& ‚)HC…ÒºYŒúf¦ã^5�LtŒ~³ÀE´æ›�iWV/ØN�­èñíøLA›NO^€½!ýô(t¨£ê¢t”’8êÅÌÉUà¯Ny¶ gR43G"_“ÆìȼãuÚÇ'ô ëuê™�M³Èƒ­Û„ÅŒ;ÍÔhÓT¤_ÃUíQŠÈKDa¤_‡ô‹žÄ+r‘¡S Úó¨A@0E=…“tš­k¹ÁkÀ2ñ÷{h|K…àµ�Žó�[âD³n¯góº˜ÞöNFcZѸ“<áQà3ͼº¶Mô MÕ…¸Ç¡2Œ/ŠÚZ^: ”âÐAÆ“á¡k–e¢Np$Uó{|×Pº&§ã :5®g;‚ D¿kMzܰmH®`ˆ'|x€ã‹FŽYõ�Ý2j äóéjÂI¨FÇ65Ö'4Ht æàYi++‹ƒäÏxÛ7héü�fœ¸l¤tÐNÔì ½x=lÙ4òX‰ ¶¾/l„�Ô‚øÉB‹å¦CG޵Øu'-Q‡(êP^sZyt„"ËÚqˆš9KAméN‘`Ôœ4ܪíbíZ·â i:==ãºõœÓ]”4="†®ù«¶šË'ƒMàs<8ÕÔŒ~Ũá×ô?vhëQ_çÎ=„džøÐU:dö ÚÚt„ưW•^ž0ׄª1Y'ÙìÜšÕ �¯ã+z`C›+À]�uT£X�4uè$6�JFýQŒûíÀ G‡^úÑ ¡+û#>ðÔo‡bXNZ»«:·]³N硞¼žñ“}º:ÒâDCTˆÎ¸<]f^gÿà󙤗�D(6ѱcí!†ÄX ÓÁ¿ätò/étș۳0HRBø³Ã°õ„ç¿ÞPp?㊡g¦)x„1@oo4~p€Úr€C4¢—m–—.^OéiÃùÿšóÊOë€�ô'‚6èpù‹Ùòò)\êv=Mªõšéñ%„€&!нf{g:HIsZ$Ÿüئ£4Œî•rÕAÔnFùÂã/R÷g¼gý¹?›5ôÀäÁ�év“Ʀ(&­8Q5ïü4ê§o=ÎG÷äòÉ®ÆahX |÷úªÓÙ?’Î5'ýÆ-’ÍwÓ¬ ’-/劓<-/B!®òç�TýÿÈO³¹wƒ–Þu¸™—…­§£¾˜uZý^ Vô=í[/¬»\ ,cK¥LrÈ8íúh2¹$ÒH]��¢ÜœnP·$ýÄ‚¶*ÄÕoúßmj¸5âŒÎ¤ß©4˜ƒh´­Gý!1þÆè¤Ü>á}Wb Ïø½UPÞçÝr�Z£Eø ÷ß_“W£56”azTXtRaw profile type iptcxÚ=IÉ €0 ûg FHâ@Ã:¤Ÿþx°¿p+�-[>dÜOɶ.Èð8£k�?¬[©£1&JMoT®§ø\0ìܧâý«ªò1øà‰éä„iCCPICC profilexœ}‘=HÃ@Å_SK‹Tì â�¡:Yð qÔ*¡B¨Zu0¹ô š’GÁµààÇbÕÁÅYWWAüqtrRt‘ÿ—ZÄxpÜ�w÷wï¡QešÕ5 hºmfRI1—_ï#‚(Æ’™eÌJR¾ãë¾Þ%x–ÿ¹?G�Z°‰g˜aÚÄëÄS›¶ÁyŸ8ÆÊ²J|N†€ð.Ь;Î÷±ã4O€à3p¥·ý `ú“ôz[‹½ÛÀÅu[Sö€Ë ÿÉ�MÙ•‚4…bx?£oÊ}·@÷ª×[k§@–ºJ߇Àp‰²×|Þéìíß3­þ~9´r� —ê ýiTXtXML:com.adobe.xmp ê¤ê‚bKGD©û5õ½Å pHYs  šœtIMEæ 8l2ktEXtCommentCreated with GIMPW� IDATxÚì½y”$×].øÅ–¹Vefíkï-µº%µ$K²dË€ý�a°ñ0ø� �å2xÌ3x9:`àY΀Y o†mÞxž9øy•d ,k¡»µtKjµZ½Ô–µäRU¹gÆ1(oôͨ¨nÙØæ Åïœ8™U••qï�ˆïû-ß�9vìØaŽãn=pàÀ{FGG=UU!Š"8Žض Ó4¡i�Ö××ñì³Ï~¥T*ý=€ÓßÜl6ûÍD"±W’$‚žçÁq†˲ð<®ëÂu]8ŽÛ¶aYt]G»ÝF6›…(Š`aæyÞŽ÷žçÁó<°, AÀ²,X–õ?GöEö§ë:ÆÆÆ°wï^d2¨ª I’‹Å Š"dY†išèõz0M†a V«¡Ñh€çyÿØ\×8þN§ƒÍÍMvyyùk ÿÕó<÷È‘#ù‘‘‘©L&ãv:��d2FQO–eOEˆ¢Aü±"ãE6–eýWr~ëëë¨×ëPUñx|à;A€ªª¸á†�Çñ /`kk ¦iúÇjt]G·ÛE³ÙD¥RÁÒÒÒßœHJèß{žç/˲E333XYY�®ëp] Àad2ìÙ³gùˆÅbˆÇãäC×uhšÓ4Ñétà8ŽOÎ0î¦Ñh¼táÂ…?ßÞÞîà8/¾øâæ‹/¾Xw`C62^ Ãâý¹dà�¥�ü·i F•eY…eY—Ú·ããã¸ùæ›ñÐCÁ0 ^ÉÖÆ7ªªŠ|>ÿ&]×·<Ïû¬¦iX__? @§Ž{à9ŽÃ4�E]×'-Ëò×Ýææ&<ˆ_|Ç�çyH’„L&stllìX"‘ðb±˜$·4™¦C±Õj�)—˰S©ÔAà¶¶¶.ø wnnî#‰Dâ°¢(ùšÔÐsIJìÃ0{dY֟ꟹ˜eyž�§Óé[âñ¸CÖ¹V‚„(H€yž÷¯BdmÛö‰?YŸäsžça||<ÏßhY,ËÂþýû�éºþî>Ék ‚ðך¦¡Ýncccãæñññ7�ŽŽZ©T Š¢  ²2æ¶mC’$ÄãqH’ä>|øÏó>Y,ëLê¾D“gÌÍÍÝ466–Éçó.Ïó;"d½ ‚àϱmÛþ10 ƒz½ŽF£�\.çÿ?™7×u‘H$Ðëõ�L&áyÞ¡›nºéýÏ=÷ÜçúófÈd2†áƒèT*…L&ãPF>è¨Z»Ý®¬­­}F×u €Àn6›Rã(ÀêêêŸ ÿ¯CCCÈ0°�Àúwyžÿ ŽãÔååå§,ËÒú×.ñ¦»²œ3›L& ±Xl¯ .!„H_eß~ämnnûöíÃúú:Ο?ïï ‘ä8’$!�NCŸ0ôÇÛë¿„mÛ¿lš&LÓÄüü@¥�fÉdRN$j³ÙôÈÃ~dddo:�þ°,Ë –u]‡iš~TƒNY ¤/Y®ë>­iÚ]‚ x„ðpç’ýÓ¯Á €Oz<ÏÃåË—ñ¿ñ(•Jþï‰fff�ÍfýÈ÷„|ÐiWÄ;»½½� .ØO>ùä_›¦¹�Á‡Šppg^ g* <€‡< €�ššúá={ö°±XlJUÕÉdŠ¢x’$¹º®Ã²,(Š2I"çè8:�ž|òI°, ]×á8ÎÀgi�/К¦\Iﱩó`B<¶¯…tøäëy^‘eÙW<Ï;@7YgΜÁ™3g~OÖ¢ëºÇùçL~'I’ç8ΰã8H&“#¦iþ¹iškŽã<×ét˜r¹üeÞ… ÄÑÑQ?%Íqloo¦¦¦P­VýuÞ�èv»þº£É•zä5�«««�ö�¯@�#/˲ÜR©ô‡½^ï]cccoõÚí6¶¶¶péÒ%ûôéÓmšf€HÀ4S•ÂòÚé�B–"(,õ7¶¿qÅbñ‘b±Èˆe³Ù˜,Ë|&“y_"‘à2™ h>ÙhÐdÛöÀXÛ¶šúÖ|^©Tòúçæô½Ælà¿�ˆÇÙÀ‰¢(¹®+Ò䃤Çï2½Nhà‹Å�N§Á²¬O Èy‘Ïõ_½x<î8Ž3ê8Î;‰†‡‡¿_Ó4ÔjµO·Û펮ë*C˲P­V¡(Šjû¤ªªBÓ´µ–e‘´<§\.ÿm£ÑØê_OnÈÚ × ¶Ùl~Åó¼§ …ÂýÉd2&I’ŸŽE®9ÚÏ0ŒçyžÄ²ì¯1 Ãï?9÷l6{o¯×û“F£±Ön·µd2™‘$i¿(Š?.Š"Ïó<Dz¬G“°é¹’?²žŠÅ"öïß�ÕÕU˜¦ú9ú;¿ÚgèWš”ôz=$‰�Ä ¤�Žã �N;333·�={ö|?zF?/�N' ù¦š‘�Þ9z=’s¢É}Ÿ¤ÓUkµ††† Š¢333óKkkkH‘{‡Š^yß&Á�,²È"‹,²»Êå²mYÖ Û¶�ë@ ¤aɲì ½§Z­>ÀÛ¿ÿ%‰ÛDQtétäR@äýœy¦V«¹ívûsF18Žc9¯>õz¯×ûSÚ‹®ªê>I’xAXŽã8EQÞ©(Š�ÇÀÉåv]ñx“““ò ·ƒä£×ëÁ0Œ�ÈG­VÃåË—½Ó§O¾ÑhLO¢ Jí¨+‚õ(¯8‰Ø»�«ÕjN­Vã×ÖÖVšÍfutttTE$ X–µÃkK^¬Ñµ6$'ŸÔ¸4›M}{{ûrßsÏ…��o•„ÉÝÈçóÿ{:�ž‹Çãža°m{H’c§#:4�jµZ¾Gž.Þ'çC>Oƒ[QáºnLQ¤Óé�”J%wzzz€Ä]ºt oyË[ I’Ÿ†%Š"R©¶··wÄ÷ÇíÌÖÖÖb»Ýn‡�Qzج¡aÉ8·Z­–ã8ŸÖ4íÃÃÃÃ,9ožçýëŽÌ-:ˆÇã<™÷€§^�$éÃ<Ï—S©T]„C±XÌ%QšàÑdÀ0ŒÐq ×/..bmmÍ�üБµ`-³ SÖ‚¯td+ŒœkR‚$�©K‰ÇãH$Óûöí={ö¬E]Ã0œmÛ?,‚½›ÀqbÌÏÏcbbÏ=÷Úíö@�MT.]º„‰‰ Ÿ€#AäØû5EBŸà»¸R£ÂQQ‘ˆxDYd‘EöÆ# õzÝ5 cƒ º¾€öÆïßðð0HSSSw¤Óé[$Ir (")2𚦉n·Ë´Z­ ËqÏ0 �B] ¤YðîQ^AÛét.t:¦ÿðæ'''’$½™I@<ÇÔÔ†‡‡Ò®HA=€òA@^­VÃÒÒ’uæÌ™/noo7)Ï%)n5û[0‹&"Áó (]ÜM{Eùþ¹9Ô« €___ÿË¡¡¡ßh6›n"‘‰6ÑD‘ŒýnÄ4Í%¬v»Í,..Vúûe©±ÆwùÞ~žçùÑÑÑ_:$˲GÈ_¯×ÅôqÓŠP–e�a˜¦é×ß�÷$:�Çw�ڻ߯GpÉ“(Šëºh·Û$Š€v» ŽãHºáŽãèõzl³Ù<¿ººzº¿ÜÀ6¨uBazþ}e¦n·[êv»cYöŽãÜ£ªªKâëõ:dYP£Ç«^¯£Ùlº¢(æãñxžçy‡×Au'2&„„Óiid£SÉÿS„g`£É-Mèë1øJŠØƒÄÄó¼°OΗNÛ¢�ƒDgû sìûjSDZ‚ xÁNš0‘ƒcÇŽ!™L¢Ûíâ¹çž ý<¹ë©‚ç@9p\‰0îFô#‹,²È"‹ì C@üô z½î¢€,F¥ôJ&“Ù›Ëån—eÙ£ÉIÙ ±×ëakk«¼¶¶ö ”ÙÒab§ºÏBy�9\©TzN’¤›X–•øE¯,ËB–eLOOcxx‰Db ò¡(  Ûí‚Âȇ÷ôÓO¹Z­¶ÇhàU¥%3p.åù¦I…‡� Rtªù,K�7G�')6Ž`LÓD«ÕB³Ù „hÓUúQ%ßsO+{u:lmm­”J¥oRÇCð­ȆE?¸áááßÎf³{ ùà8Ç�Ç-·Ü‚O~ò“~±/}ÜtÄAÓ4H’„n·;à'çJT¨èu*I’_@L¢®ëÂ4M4 ŒŒŒøëT×uT*>|kkkªoÉd’ÈÊ¢Ûíkkk_ët:u *R�µaup- ü™b±øµB¡Ðsç‰DQôIe½^÷%—âõz–e!‘Hìðê“kØq�¨[†a0<<Œ±±1¤Ói]‹±É|„­«`TMÓ4ÿ}X­ÖÕD$‚¿ã8¢("—Ë!›Í¢\.£Ùl�:…J/‘Hü€û@_xõÐ]&,½,H,ËÂææ&DQÄÚÚèz8ÿâ¥þ—Œa0•ŒŽüRu$BàÚþÈ"‹,²È"{cE@¸�?þø—¦§§ßiÛ¶|ðÒ^¿>0cçççß¡ªªGKe2 :·^Ó4ÔëõµµµµoR3I°ÄÄ ´0ÂàmÛ¶‹Å♚šúYÏó²DÑ'•Jaff¹\nù ¶�Ng íŠ��••çÌ™3�PäÃìK­¿Ñ$˜jìC±›*�rÁRçg‡œ'Àv]×3Mó˲öU*Äb±òA<Á4ð¤k@Hä£×ë¡Ùlbss“YXXX²mÛ DaÜ ’§×B>È9ðÃÃÃÉçó{ùày?ð?€Ûo¿÷ß?TUE³Ù„mÛ;T¦úäÀ«Õjç\×%©=iQ§Að‚EÕd³,ËBšøi€½^š¦ù`ܶm´Z-¤ÓiH’Ó4}“N§±¸¸È´Ûív±X|Ķm-d]èz}âaÖ‡2ÿaÊU¨T*Oôz=nllìºD"1NêBˆì,Ý“#ù")Oa^~àJ‘´iš~mF"‘ÀÔÔ”Ÿž˜Éd°¾¾>P¤N÷Ù!ßLI#µS}U8>|½^/T%k7R$´¤öñãÇ!I†††ðôÓOûQ³àwq‡x<žè_7„€Ø®ëz®ë¾bÛöÞ`Ú�ú¥ë:žxâ Ÿ¸’Z˜€Ãž={ˆ�æ¨ë:¦¦¦ü5ÖëõXêš`£GOd‘EYdQ„òÒw:��‚eºÈ’Öþïׂx´G–Ô}Ð�ãZ­–W,/÷�˜IyŠ ¤uûé Ú‚‘€c†·¸¸ø—ÿQQ”D¡Pàæçç‘ÏçÈQ§á8n€|�¦|õzÅbÑ>yòä—Ëår‹òhk}pIˆý #Áè�·K„ üìÈIëá¸}Ù³®ëîs]×Wø"cœ B Iº~!�3�­®®®ÈÇn½%® #ÜÌÌL.‘Hܬ(ŠKÈÇM7Ý„{øÄ'üèÇqhµZþz#ÞhÃ0:[[[�êºÞàÖëu·O*XEQޤÓéù~Z]’@  �®EÒŠZ­–¯xFÒŽ±oß>äóyt:Zõ ,ËžY^^^r]—DêùÐ)ò¡c0ýʹ‘ k èµÛío^ºtéé™™™_N¥RÃ0 (Ê®u „\M ;™L¢Ùl‚ã8LLL`nnÎ'¤ñ_&“ÁÆÆ†ß‡%¬&Œ^w$ªÖívÑjµ ª*jµ(%»Ðã#KtÄ•ŽLèºAüâwú¼v‰N�û¹_XŽãœ7 c/¹�…‰8rÖ4•&t* =t„‘D… Ã`WVV¾éˆ"‘EYd‘½á ˆívûïMÓüIÇq<Ïó°¹¹‰­­-¿7I±2M,ËBÓ4??;ØT°Ýn³¥Ré1˲Š!€-ÖŠ·é]Áô+:¯žuG_YYyðöÛoÿÙýû÷‡‘¢ùOÈñÚò±ººê�>}úkår¹ðn÷®ýpw!׊x�ó£##Lÿ»É9û‘’^¯ç$“IRX�b±èw°&}Cè¾###ø‘ù,--ammÍ/°/—Ë^2™< ˆðÚ7Äs-â$£ÉdòS²,ûäã¶ÛnÃÛÞö6Üÿý0 ƒ.èF¥RyŠçy�aÏu]÷Õúlg ƒ…Ý®çy®eYh4�7�ǰÙlv�$I1A~ Ov¼°¦zº®ƒã8ض�v»í§$9Žã«ª:P{ ( b±Ø1×u/âJ„Î TšTÓò‚ë�Á5Ä\×uWVVþ¼P(üL6›Ù­ßIÓ¢ÿâ; úyžÇÈÈöìÙ³C˜�ÔLMOOãùçŸÇöö6lÛÞQsT#Qµµµ5FÓ4z=zÁ>6Áº 9aªªú@Ó4œ:u ÉdµZm µ)DÞ—i·ÛÏ`g�S,‘ÏçýugYÖA F_èq Fz4MC.—ˆöÒ5d©TÊ_Û­Vku{{[ǵ›EFYd‘EÙ†€ x_5M{E×uÆ0 ï…^€¢(~ÊÒôô´hHJ�¦ih6›¨×ë¾|i�x›››ÿÜh4ЏÒX§À¼��yòtä#¬h—Íd2ü‘#G®ët:Êår>Ø&`ttÔ M»aGä£Óé ^¯c}}Ýzæ™gYYYiô�‹Ž.EBÈ1Ódé[‰\�Œ*BR8Y–G É#¤¯\.ckk CCC~ÍB¡PÀØØ$I‚®ë˜››ÃÆÆÆ@§ï‘‘‘aì,‚-Mí¼]¼·~ŠÉÌÌÌd"‘ø?dYf)ºûî»ñîw¿ÿøÇÈG«Õ²××׿Þëõ¸’¦¦.F¯‘�}Öjµ³ýõ|—ÉdnO&“Ã’$q‚ LõSµóèº*yKhæ}ï{Ÿ÷È#�`ß¾}µQ¢("�cbbŽã T*!�N£R©ø)[Á^ô= ßͼ÷Øc�=Üëõüäóóów»ýÔ¹x,ËQ×¥/¯MËߦÓi_L�€ûF£�V«µC²7ØK¤_#UYŸžiš�T«Õ·§Ói1�(È‘ûÝ\1(„@î½^ÏOI#}vÈZ&b,Ëbkk‹\Ÿk†aׄû¸oDYd‘Eٿ鈂Úí¶»¼¼ ]×Q(ˆ÷w‡Ô+yè‚Ò÷ªC×uض�ÍÍM»T*-âJê•ý0(ÀI?˜Ý à�œœçççß’Ífß)Ër^’$�Ð4 …BÁ×ê'`£Óé@×õ�´«F£�õõuïĉ�‹ÅF êqµÈ‡ƒkw ÿVö)Ý3Ä¿O’¤ã’$yä¼Éض�íímT*ÜrË-�$É÷ì×j5ÜvÛmˆÅb0MÓ÷œ§R)²?7d»Úy…¥’øu,“““êª~RQŸ|>|÷Þ{/~ó7ív›Ž’auuõ¡>ù Ñ…`=���ÑÚ8jãðõzýŸêõ:€O&“Cñx<›J¥þ�¢(ñž“šB@lÛF£ÑðA¹®ë~$›ÍâèÑ£7.//Ÿê§)z�ñz-©kAâæRó¼AqvK9²mŸÿüç¡ë:dYF½^ßQ ÝO r»Ý.Úíö7›Íæ‘£G�‘Ú(’v%IÆÇÇÁ0 ÖÖÖ|’žÉd°¸¸èKâ’럾ÞÚí¶W,­—^zéá^¯§ÑäqaaáK p' «ýf¥œ(Š·f2™1UU9Y–¡( fggÒÉü�¢ àÃzÙD§Óñ:�NØx˜ÍÍͳÙìEQô£¹D~—� ’NE�#9×n·‹Z­†ÑÑQôz=ZRÝnårûöí#bæòåËO�;wnƒJi6vFy#Yd‘EÙŠ€Ð?7™LÞ•Ïç½L&ビ0O!ýð')N<Ïccc[[[ÝR©ôõþ÷U‚Lì”° zý”$†a˜o¼1—Ëå~7ŸÏ'TUu%Iòh�l°_A­VC2™ÄÔÔdYF,C·Ûõ»²°Ðh4P*•ìçž{î‹Åb»×|U¯¾Ý"m¼¢Â„Öl6›•ey^Eo·Òó‚HÌ/q­VƒaÈårÐ4�n(ÉÜ}÷Ýoúæ7¿ùõ]CE‚)qä•Þ¸©©©©D"ñ€ªª!oyË[ðÞ÷¾¿õ[¿…z½îé¶Ûmwccã‘^¯Wße�Б�Ýd�ý&‡¸R°ÏáŠâßjµt]×Û²,7ÇI’:�~#Á9Þz½Ž^¯‡}ûöáᇆ®ë(‹°mÇŽ;°wïÞƒµZmeyyùå………'ñ­÷J Ž¡·Ë:b0–e¹aï ð=}ú´ʇ††ˆ²™¿ºÝn·X,>@{ë[ßz´×ë  /H>FGG‹ÅP,ýôDMÓ|£ÑhÐgÛ6£iÓh4V766Ö^zé¥\‰ Yâ¼Ña*•JWÒ£¾˜Ïçg�9ro.—ó2™ŒÅ¦“…¥‘û©»èõz¨×ë¥K—.Õ±³áŸ Àk6›«Õê_‹¢ø4Ms§¦¦vÔ¢¢EΟêx�Z­QúΘ¦‰v» A011žçáº.$I‚ã8m\鬱ºÑ�,²È"‹,²×-ñäu×]'ONN¾uxxØ£óÂwëDLrÃéèH_æT)‹¢eYmìÞœ/ØÃí“�4¤ë¯¿>9>>þ‡ù|^H$.9¦°æ{ÄS‹ÅP.—‘J¥�ÉdüÈ],Ûl6±±±�G}´U©TjW» ïF>¾“",½‰QeX„,Çq^�xÐ}\×õ¥…I„€ìùùy¿Ž‡ôÍ8ŽcÇÿy IDAT¡‹ßƒ¯nˆ—ž&,v|||XUÕßSU•%stà 7àññ±�}Ìob×�|8Åbñ‹Ýn·I‘::FH½~Â@›O~úÇA“Rˆ,˜¦©w»Ýb,»ŽVk«×ë…¦ià8Õj<ð€ï…gÙl–¬w/•Jy™Lf2“ÉLär¹îÉ“'Ÿ¦öŒ€\­¹œ !NØønnn6R©Ô@ÊQ0@®I†a Ë2FGG}ÀlÛö&Ã0Ö›ßüæ£û÷ïß“Ïç½d2é“QAR—–– iÚ€*ÜÖÖÐjµ Тߋ¥^¯/¯­­½Ôét Û¶i§‚Žp0PkÊŸ›jµz±Z­ÞžL&Ó„°¯ë âM@ȱö븘Ç{ì±]î9¾¨Åòòò™þýŠMBh’Gz‘TS˲µZ Žã ‹AÓ4]ªV«OaP¡KÂß+ò�Ý<áaQ˜úÑ Ÿh4›MèºîëÚ¶��� är9>ICIEQæGFFäõõõ Øq¥K;ƒ�Šd  €-¤R©ßI$,’·Ür >ñ‰Oà“Ÿü$Ò®666î“2îUÆ‚ã,øZâ4˜’%ªÕêÿÇqÜ ,Ë:ÄÓÝh4P.—±¹¹ Y–zmH’4z ÁíW3¢(þ¨$IñÇ{쟮*ì,>GÈ9 @BœëºÿW·Û}³$IN˜# ¬q#‰NjšÆlllœ~Ó›ÞtãþýûgGFFv��|>�T*…ååe_ŒÔFmnnbqqÇahhèÕìË\Û¶=«iÚó¶mÓM9éù ’ö ªªf[­–R.—}YiÚÉAKK‡Í-"±¼¼|¾Ýn“­` ŸM͉­ªªFd�ƒ‡Þw¯×Ãææ&jµxžG>Ÿ÷šr‡l6ë‹r‚à7‹$õCªªr¬k»VšcDD"‹,²È"{ã�ñññë2™Ì¨,Ë.QS¢ó¢ƒ ˜AÀÇqÈd2¸í¶ÛFo½õÖŸêí5ø¯VPªë:r¹œ—L&¡(Ê@ó0�%Ù?}\KKK0Mªªú‘�r¹Œ—_~ŽãŒsÇÚ¯6 S€‚2Áο"ù·ÝnÿV"‘ر?–e1>>ŽßÿýßLJ?üa¬¬¬`{{Û¯m Q�……8p‰D½^�–˜õdYžIw:�F§Ó9ß_1 FÈyOŒ��åA`u]ÿuÝX,ö§ªªþoªªú5ÀG>ò<ðÀxòÉ'ý4–N§c¯¯¯µÙlÖ°3âD6BJì”9+ŠvFmhÉf¿D­Vû žçïq]w¯¢(n*•Çq �9!±a Ô²,úï€{o»í¶îÉ“'O^eÝ«�`0âR¤Ü èºþ{½^ïƒ,Ë þ?„\Áz…­­­¾ù曯;tèÐÌèèèÀuDÈG>ŸÇââ¢O>Häc{{—.]B»ÝF,�Çí÷Úp:ôöóçÏE×õ.ÂUÁ‚„¬'ŸJ¥f …ÂÏg2Ïó<”J¥çBÏ�nI§E5 ¦X,.?ñÄÏbPÖ;˜ÆGÌbYv2‹yôý"([L7Š¢UUýë&�ûµqôutÈôk­Ø7½éM·ž8qâ1j®#’Yd‘EYD@0Ùlö§Eq%Iˆ2S¬è&dÁ‡u,C.—£å?=Z ”öÔÒïwëL\*•Tzˆ¢ ð¥^Cƒ2Û¶±¼¼ UU!*• .^¼QIA6Ó' tgv¸8ïçðÝa²¶¼(ŠÿÅó¼÷ëy*• þàþ•J|Q’£N<¹ív©T [[[~DQojjêž¾¼©mYV£Ùl2­Vë�=ÏkjšÖàpÇd³YUUÕßEQây©TÊ ¹®ûa–eýFy…Bþð‡ñ{¿÷{8yò¤Ÿ'ßét°ººúåV«ÕÀî2Ç´÷|·\yo—1££!6E@ü.Ã0ί­­‡††~tvvöèÐÐ�_ŒMK6ïÝ ®=×u]Ó4øäÉ“/ÈEXº»Ëɽ9ÛÛÛãñx‹ã¸!r,»u¼ïG>P¯×;###×]wÝäèè(R©Eñ#CCCÈçóX^^öSöHzâöö6Î�;ç®®®²ÉdÒúµïÝ—FGGsKKKÛY¤%Šƒu þÜH’”þ@:�ö)r«««~dƒÂ`WvB²Èš^ZZZ8yòä3�ý›!×±•âyþ^"ÕLGwƒ÷4Çq|1ÒÛƒüž¾gÑ]ÛiB‹Å�H$ؾ£$X3õ‰,²È"‹ì K@`T–å�rE7£7öI'b’ŠEKð!N¿†ýn7…Ÿr¹<à­¥IQhØ-"CW¹\ö%keY&)®ªªï0 ão)�s0oÜÝL~·�öèsj$RD6’§~âĉ�¨R£Ñð¥n‰ç¾\.ãСCX^^öçL’$ ÒtŽwg8‘HÀ¶íß1 ƒõ<ï º®;–eM«ªzŒN¢Sòˆ·xddýèGñÿð8uê”ÿûn·ënll< 4ñ õ6A¥1/Þ¯¥ÌlèèàJÇë¯�ØÌÌÌ݃¬3a KË ’Bp3™LìÎ;ïü™§žz꯼+‹8xœtdãZkh‡Â–ªª^6›õ‰¾çy~½q ض͆áÕjµWR©ôèѽããã^:�¸–²Ù,&&&P,ý^(¤ˆ»V«aaaÁ>uêÔ?I’ôQ]z¾ÉÆó“H$|°EŽ+¬±�–‹„¬�k¤š*žç‘N§½íííÝd;¿=>¾UÒAÌO'J§Ó‰x<þkDB–tmöÿ)�:Bš·õ‹�}�m·Ûõ=ý†aø 2‘HøcJ:;²,;Žãü ¢(°, Ç9»�6²�{ï½÷w‡çž{ÎO“év»ÎÊÊÊ—Z­]óF> |k2Ç!…5~@HíÑèè¨;444£(ŠCGÖHÄ/,í�Ú`Ê“$I�e…Ba.™L*ÍfÓ Y3,ăý]Ük‘\.w4‹ qEQ|‚¤ªªO, Ã0ºÝnyssól>Ÿ?püøñ=“““^:�ökb±Òé4&&&°¶¶†F£1  W«Õ°´´dãßx¨Z­êÉdò›©TêAØ`”\󊢸×_ý½çÎ�û®ë2€Í"ÜË/'‰{$IòhÇYƒãããX^^F*•ÂÆÆ†™bYsssó#6Õj•™��-T*•„G?‚…𠀑æ*`ÑsKî_ž˜â Ç„çy¨ªê_—ÇA–e/�N'+•JWj“š$FÄ#²È"‹,²7EqiO^p#é5wÞy'âñ8VVVpêÔ)X–冎�\)z×~ÎÒ¹ø4á _%I‚¢(¾§’&Dôç Eº®³(Š¢$Icº®/à_7-b7ò¡?�ÉdDRøÚívwH”#¢Z­bzzzÀc»²²‚C‡arrív{ Ów:�†a~jIPò•DRèt˜à1°,‹OúÓ>á#iWëëë_kµZ­ùÐñ­)�ßZWö0`o`t]W2™tƒ�Ý:u“q zÉÉøõIœwìØ±w�={öÛÛÛËôø[ýWºÙ£ $i` &“I&‹1AÒMÆ>�£T*�©Õj%EQØ;î¸cßä䤛ÉdÐoQ‘L&133ƒr¹Œz½¾C’zeeÅ=qâÄ׫Õj€ÝjµjµÚQI’Ábmrýô›|NONNþˆã8Æúúúó<ÏÀ«57ÁB|¦ï\x»(Šbðú¦¯Y’êtôèQ¤ÓéBRÐÈ1(ŠBTÄÂúÈÐd–€\.÷¾x<>°Ï`1_ÍÃÃÃþ|=zëëë �@ɵFw§'çÓn·¡ª*#wjjê�.\ø Š#p�È"‹,²ÈÞ„äí¿¢@Ò®HÝ�þ˜pì¾Ûï¯FP^zé%LNNúö !âySSS8~ü8LÓÄ£�>ŠZ­6ðù Ç–xµБ.™L&t]SRú×ðPúu ©Tj8›Íþa:�–H>˲¸ï¾ûðgögÀŸƤV¡Õjù[RbH^?�†eÛ¶ÿs°™ßä3a„ÔâÑn·aY–µ¾¾þõZ­&sL" ßI™cï*D„¤?9SSSH?•Ý0QÁJ&“>‘¢*�¦Ø�²y7ÝtÓžìm6›L·Ûý\·Û­olltΟ?WäŒéT¥°èA Ïó~E—öÖ¤h;µZ­T(bwÝu×÷ÍÎκÙlÖ�|�(×ìì,677±¹¹¹ƒ|¬®®š�?þøÃKKKm À;¥RéÿUUõ—APáÒu«««ÄQà …)( ¿©ë:£iÚg666Î÷ ÔíL&3¥(J‚ã¸ÿÀ²lš&²Áë4�£ßì1´Þ þxˆ¢HÆÔÆÎ¾1AYdŒ��yt­}o¡- À âÁ;ô}’?‘+¦ï;‰D‚Nmmm鸢6·Û=&"#‘EYd‘½¾ !´G/XNRzžzê)$ lmmÁ²¬ŸsçÛ""ÁßÓò¢»¢t†A&“ñßÓ’©ÁÏÑý; EQä†=ÏÓà€Ç ‚‘û]A%'V–e9›Íþ~6›•Hºˆ ¸ï¾ûpéÒ%$ 4›Í] ˆiš¨T*˜ššr/¿ü2®¿þz<ÿüó0MÓ� år9¬®®ú ‰qAày¶··¬ �­üÃq‘ríÔjµ&®t»§eŽ_kƒÇIcÇ`³?€+ËòŽÞA’Ëó<¦§§qøðahš†'NøãM¯#z¬FFF`Û¶gš¦§ëú�öz=ÌÎÎ:G�ÝÚØØ`Ëåòëº^+‹ºçyAiá°þ&˲¢¢(;úÞФÓé@EööÛoÛôô´$ªªb~~µZ Õju‡$õúúºûØc�=¼´´Ô¢H¢ÀvÇk6›§E¹™öJ¥Çq�N§w4)u]×SÅ3 ãçãñx¥R©<©ªê¢(¦AAð ¯}2ö‰D_øÂð¡}hÇý(øY…Á`T)LîÖç-ªªrÁ^Bô½‡ÜËz½R©}³„ªªât„>r£êe¤ÙÙÙé­­­®4ɤS±\\]²9²È"‹,²È^?„x¶iO9Ù8ŽóIlmma{{{@.—BÁÚ„0€q5âT¯ äïŽãàÒ¥K~çïz½>à‘ #Q4Á¢Á�,Ëw���Õ4íÌööö£xU‚6¬ñû] !ÁÔ+V„\.—ûÝ¡¡!•D>†Á¯üʯ Ñhà‘Gñ;]·Ûí�MÓd4Mk´Z­ÊáÇ÷›¦é‘¹"} dYö»¢9I© z¤ƒ€›­‰‰ ¿v€Ì= ʆ‘xž—lÛîagŸZêø»%sÖÔ1Tv5ì3ÃÃÄW•o‰W;€é÷ÉdÒ_»DÙ4MÎ0ŒÂää$ºÝî'›Í&ë8Îêõº½°°°~éÒ¥§©cPjÀ …ÿ‹Å\Ò‘eYØ¶í§¹É²ŒT*¥îß¿ÿ]³³³.]X/Š"dYÆž={ÐétP.—¡ëz°ŽýÔSO=²°°Ð Ì!†(•J_’eù˜ã8\«Õ!8t“Rº0¿_Øî™¦™/ ïÁ¥£LA1… øo4øò—¿ìGz‚ yô'v¦¶…’:I’†¼)‹ÙAJ¾ŸÜÏÂÖ©kºVH³ÙD<PÇRUuÀY\‘…&΢Øv­¾1‘EYd‘Eöú äáÙét|Õ$R|,º¥óáƒ=;ˆW�&ßê+ý~ïÞ½èv»¡d‡�¦F£�“'O  ¸¡ 9F*érQ†aÜ�Ç•J¥òO–e­‡xPíò/Ê¡uóóóEIK’ä+õ¼ÿýïÇÒÒ¾øÅ/úã­ë:šÍ¦ÀeÆó<†a Ùlþ³išµ\.'4›Í¹\Σ»¢×j5ÌÎ΢ÑhøQY–‘H$P­VwD: ÃØá)æy?þã?ŽV«…|0”L2 # ‚§ú¬˜ØÙ¤î{-s¼#ÚFZÇÁÅ‹Áó<677Ñn·C‰-ÙHþ$cNj,ËrLÓtt]ÿA]×133ã?~üg�Æ7z½Þ“µZÍ}ñÅ«ä܆‰% �D”òù<’É$HDŒÔ\yž˲\×u}bBÈÇÜÜz½VWWa†ß;£Õj¡\.Û?üð—ÛlI"iÞÇ5›Í¿`æW2™ŒlJ¯ ]×ý¦}}q—Ž4�h=ÄÙA×^¼ð ¡QÙ ì_Œyõ¸æÚaEÙU‹Ì½mÛ�$iÇÿ“+dni9rš€†1ð;A�L&÷0 #xž'P$Äꓚ(RF$$²È"‹,²×!¤akk ¹\nÜÐ9Ña�‰?ñø’ffWK{ û]ðïüï¢u÷ÇÙ!½K"%t½ úÈ1ÀLý 9ÛT=ÀÍžç-•Jéºîù�‡?Áærx à™Ùåw~ó¼ýû÷¿C–埋ÇãI»úÕ_ýU”J%|á _ð‰TèuÖ××qÇÀ ü©À«T*\³Ù\5 cœŒ “““8{öì@H2™Ä /¼À�~‚ x,Ë‚[Z–…¿ù›¿�¦ižé0o›¦YCxë{@>˜�qfêõ:KŠêƒ‘1ºè¾V«ùòÆAr$á{÷î…$I;mÒk’�r½X–ņ!†ñïºÝî¶Ûm9räôææ&yä‘g%Iª8�H$Ü‘‘‘�ž84ð§¯Åb±I’�Éd°gϸ®‹ÕÕUèº$8uêÔ+‹‹‹ 6$µ9&®4ïã<ÏëH’4Ð 4¬GÐêêªß <¨0E¶T*…r¹ì_ÛôXúå0# 4¸ç8î`:�~ª^¯ïv�ù)Žªª2ñx|`ü‚õ}BçGšèõ](üTúØéûJ¿Q£!‘Y–½C‡ÝvîܹÇðj”5†A•.:ÒLÇ‹HHd‘EYd¯bš¦ÿ ¬V« å)i@F7 ’Sn†ß…Û0 &¨\̹߭Xœat»]xžçÑ}‚ä#h€G6Ó4}àU¯×¡(ÊI"Ű„Üô# œçy×oll,_Øî&ÑûZªîÉgüÈǾ}ûî”eù?Æãq‡Ô^¼ÿýïG­VÃg?ûY뺎z½ÞZ^^þ Õè¾ .¦Ùl64M§‰ÜÒÒn¾ùf$ ¿Éš(ŠH¥RL2™|âå—_ÞbY–ËçóljĈ¢( š¤Æ”Ëå�±¦¼9Žc8Ž£ag_ˆïE�•Pò€ËçóDzìMÓtûD‚ Ðk``�ÑžñàFGÿ‚©HA²Bm:BbY–gÛ¶×�PÅž={Ž6›M¦Ýn»™L©T*´S;1²6,ËÂââ"¦§§Á0 –––ÈG»ÝFµZeΜ9Szæ™gžÇî !MŠl3Š¢ü*é ¦F®'º_ÐÁ@_»®ëB×õ]¯m’·aéNTѺ×ß/»Ëœû?›¦é 즀EȽ?ÚZ­cš¦Lâ H,ÃåË—166†—^z‰x/�N?vìX§ÕjU^ \´“à qrD$$²È"‹,²×ét:–뺮çy|§ÓaTUõU±Èƒ?,Ï›0B@4MC¯×óÕqNŸ>ý¤(ŠíX,æ ‚àpçqç²,ëS2‚äƒ<ð'''PQ‘ŽÈ�ýÓê5A$Eš¦¡Ñh@’$Ÿ%UéïÜɲìctŠ›Û°ì^ƒŒìñð7†a¸½{÷¾UQ”_PÅ!Þå_ø…_@­VÃç>÷¹�´«z½®­¬¬åø†Áßÿýß��F£ÑX^^~Èu]Iú ù™Œ·€kµZÝz½ÎŽŒŒø[Ó4Q­V‘Ïç±´´äòÆãqottôÿ�ÌW«ÕzXUÕâyÞ Jï×Ð4�«V«�ô�#H>v[ß­è €¹õÖ[žþàøø¸Cô™]Ã0vœÏnÅÉD´�¬±N§ã§äÐ ”–™%ë�¬1:BB÷^ #$$2Iš&ÒD€&G¤–‚÷Ù³g199 AÐét°¹¹‰W^yeík_ûÚãØ=òAjtÈb†y7Çq±°è%‰züôOÿ4Ö××ñàƒúk#X<Œñ<Ï4 0 ã7Ø$÷Ã0 Šâ@šS0"Aƒ}ŽãhÒÁ†E?0étÚà=Ǻ®û5 Aò£išN‹vеDä¸HTÓ4}rOË'+Šâ)Š2yûí·ÿn©TúÛóçÏŸ@x¢ïUÔÈ"‹,²È"ûÞòæòåËߘŸŸg‡‡‡ß^(˜f³ ˲|¯+ÝéœöÖjµP*•¼K—.=¾¹¹Y x僺üW{°ú buuµ799y†çùè\wR$OÀ äh°ÞétÐétP©T@K™pHR¯‚^LÈUU�8tèÐÇz½«ëúŸY–Õêt:]Ã0¶Þ±Û œy !¿ßÈüüü­‰DâçE± øú‰Ÿø 8Žƒ|ÐO«é“�ÞÂÂÂW<Ï3R£ˆE€ët:jšö –eyä|WVVpüøqœ>}ÚI¢("›Íz<Ï ¶mwؽ^¯Ôn·yžŸ%s,<¦£–eAÓ4¯ÙlžÄ•Þ ¯%òñÝ þ8ßzë­7ÎÏÏß7==í¤Ói(ŠI’�J¥011�……¬­­Áó¼Ðâj:ê”±���õ;Òä€î™²[ "ðjAÿnéZ®ëúQºc{’&’n—ÍfÑétpùòåͯ~õ«Oõç„®û _énôP;tD#,"±gÏÀøø8VVVv%ýõlõz=£T*=Ïqœí8ÎÍ©TJ%ÍÉg !‘·`:y¥È™o`°;Yª¢(LXSÅ ‘îv»~:YÐ�†«iÚ@MŽÈÜ«ª ]×ýÂü½{÷úÄŒDXA°yž¯¦iÕååå¥�ÝÑàQ$²È"‹,²× qØžçY—/_~,‘HÜ£(Jlfff@1êܹs>(#P’ÚÑl6™r¹¼vîܹ˶m¯àJÏ;�Â:\‡�HÎu]îÉ'Ÿü"˲mÇqÞlÛ¶G@ !D´ü¬eY˜˜˜ð5üɱ“T:ÕkxxŸøÄ'ðÀ X,†v€ÏårL_‰¶m¨ŸrÓqçb§Ó9[.—ŸÀN Ù]S‹âñø„¢(?β,,Ëê¥R©eUUš¨òð<�÷¾÷½˜ššÂýÑ ��V«Õ^YY!äÃ�éq& ,ÖétºÝnw05›Mض�L&MÓü¼uUU™ãÇ�9qâÄ“ýï²*•Ê—Y–}«çy×€FwäþøÇ?Ž|ív›œªY«Õ.bgã½Ý"Fß) %×_ý[fff~yjjÊ#‘Ò#£P(à–[nÁØØ>ÿùÏ£×ëùQ¿0’E§¶Z-t:looCÓ4Ÿ �º°&‡Á�îA¯e:JB}IN°yEñxÅb•Jeý _øÂ?S×f°'‹��=YŒã8'Çù!×u…`Tƒ(¯}ìcó½^o€”†Át»Ý¦iºõz½á8Î6ϲ,g½Ä1 IDATaaa±P(L&‰·É²Ìõ¯YOQ”k*a° ÷\€è{Øl6ûý¢(JWSÀ"ÂÝš³’ˆ�¦i;Šäië«ëA’$˜¦ I’P*•077ç§µ’cð<óóóï\^^þ?©¯pCñˆ,²È"‹ìuC@HtÂÀìß¿¢(‚ã8$“Ißã:44Ã0ðÊ+¯ Ùlú}jµZõÒ¥KÏjšÖÂΔ ÝRƒ¼@„  énäÂã�?þÈM7Ý$MNNÎ¥R©,!!D_?™LbïÞ½xÏ{ރNj‹‹>€0 cׯ†A�²,Óži7�ÃqÙqœ£Édòèðððûu]g=ÏûcÓ4Ýf³¹ÙjµV)ðæÉ²œÉf³ûyžÿå~î¹GöÅqÜÝ´$èí·ßŽ={öàSŸú”/‰Ü'­‹/~W¢JÁœ}�ú›M�) À[__oÍÎÎj¦iJ$m¤Ñh@×uŸ÷’ɤ/ÿKR/É>Ih«Õ2/\¸pƒŠp.¤ÓiáÀ�¹%‹‰Žã�È-¶··Q¯×±¾¾î7é¬×ë¾2™2 /¿ü2FFFP( ª*†ñ�+èÜ#š¶m#‘HøÑY*ò°,Ë/---âJSÊ VD:"‹,²È"{ÝD@HzŒõ}ß÷}?,Ër,˜¢T92M�N¦i/¹M‘ ƒj:F\í�ÊA$¥qÖ××�õõõO�={Vºë®»Þ=33s€ÎͯV«8vì^|ñEßc‹Å�H$°¸¸ˆd2¹£ˆ:¬Sºã8Hñ×ÿ?Ùu]9™L²¬?5 ‚ 8Á¾ t‡gâáýÉŸüI|èCòÁOT5.]ºôÕ~Ÿã䃮µ ÇÒàT*•S“““s¤Äó<œ?7ÜpjµÖ××Ñl6áyÆÇÇ‘Ëå’…BámÓÓÓ·­®®ž~å•WžÛ¶Û­Vë•|>ƒã8c®ë¢ÛíÂ0 Äb1†AÈÙ8Ã0Ï{žwµ"ýïù`Ü}Ýu×ýêìì¬Mºƒ˜Édðæ7¿[[[xþùç¡iš_ˤëºß$‹ äìQƒZ­FêÛ¶ù­­­Kº+++dþ fffÆgffFDQÜ“ËåÉd²,»$:B7ó ‹Ž0 ã§¥g‰î¼óN_îõܹs~$¨,Dz,ú*Vd}ЀàÚ ^Ÿ.´Z­eUU+±X,·›"¦ƒä¿·±±±D9)‚ÅîN€ð†aØKKK«‡§k´vëÒ/gp¥»¸À½‹/>亮E�­â¹&žcš|xÔº¼óçÏ?±oß¾ŸÈd2Ž$I8þ<$IÂSO=Û¶Á²,2™Ì@EQ}úôòáÇ–e¥y у={ö ô· ¯ßÜÇùùëtƒêPí£†ÉŽ^Kň3úýnMÏÈûjµ àU ÏV«Å,..>ẮBìzO» F—ènÊn<ÿ¡Z­æ2 ƒF£1ÐÔN’¤P¹Ù€—þ0˲ì©S§¾•JåKù|þÃ’$¹äü†‡‡i@è¥Óé[jµÚ?"¼?þ…ÝÝ"Ì‘#G~}bbb_6›õTUõ�g2™Ä]wÝ…N§ƒgŸ}½^o  ¼Z­âĉÿŸ½7�Ž$;¯oDfDFDFîH ‘ØQ P{U/ìf“-±Ùê&©c›¤IY%ŠžCK£Ù#ŽE�I™^ŽlI¶ÄcͱµÍ‘Myš´G¢6²O³ÙÕ+—bUoµ/¨*T…%$rßcŸ�/êåC$ª[–E–ß9y€ÊJäòâEÆw¿ï»÷žr%XGGGw7Òù¢îs3 ã•z½~Ë rŒR©,•J�ÕÕÕ?˜˜˜Îd2Š$Id2™©¬“÷Jæ˜J>À�2mÛ¶Êå²ÖétÜ1¦î¬;"‘HO‚Ðuù‹ÅÇk¯‘‘z½ns§ ‚ ƒÁ×d/0Âʬ’„ƒ˜Ûy™žÑ %ù�p ®]»¶í8Nwø0ìœ×ß |ôÄÞ½{¥ÙÙÙ£©TÊ!´$óªÚB“�»^ ûZ­VîâÅ‹ç8Žã:�N!'mÛÆ¹sçð?ñ®l0tâñx¶T*ñèo÷WÖùà8ŽÏf³Â»ßýîÏŽŒŒN¥R=à#‹á±Çƒ®ë8}ú4êõzOç£P(àÂ… h4�eÙýÜ,ß�­ÂÛ¶ Y–¹©©©÷xŸã8œ nù}{{�N…B’$!‰ ™L"‰ CUU÷¼£ÇyžG§ÓÁ­[·zHèì!Cœ?S«Õ ªÓÁz²°ç' @¬ñññŸ—eÙQÉd¢(¢Ñh¸ü˜îërÝéÆêêê)]×+Ìþ%#„4€¦».effæ—gffâv½ÙH @6›%Þ!’(ŠÿëÒÒ’Ëû!ÀŽtw½:¼–eíP¦ÚÚÚrÁD.—ÛQL`GÝ�ÆÆÆ077‡Û·ocii©Ç �ý.ðÚ#¶màÁ÷Ù÷~øá‡~øqÏG’¤Ï„Ãa›¾@ÓÉ1IJu]G­VC2™D»Ý† *€:SQõR=z»;ò8‹º³ÏÁ­¬¬|izzús†aØ$I¹xñ"üq(ŠÒ3†‰DpæÌd2Ôj57i 9$]ÞÅ­ÍÍÍ«ù|^W% Šâ{c±X´›¼ú‘K½‰®ë;Ô�HÒßétÜõ¥ˆÅb¨T*@tô’øé±«]Á'‘Hü›T*•îr@+4±së$©öJ”LÓÄØØØÃ‹‹‹ ívÛÐ4íŒeY�;Žƒf³‰÷¾÷½øÒ—¾äv…$I"#5d”$J•è$TÜ.÷óxÇq>øà¿Ù—J¥œH$âvyTUÅûßÿ~p‡ï}ï{¨Õj;ÀÇÅ‹í7nðñx|øðG$kâA@v¼ÆÎØûÈ¿«Õª[y·mårù|SSS…B.Y�ÜØ÷ÁÊðÒwÆÇés~¾NŽ€#ªxôºD£Qäu;w/¶Z-½ÑhÑ+šÐaÀÙÇ´7˜K¤R)'�îod; ¨Ñ£ŽpëÖ-loo»{�çy<òÈ#ð⸑õ¥;9‰Dõzôž`Í Ùs~vv‡F(rÅX>Vn™FMÓÃ0X3Eüv?üðÃ?üø� n||<-I’C_h‰úËÿhµZôÜrPQ”@«ÕâvI^þ2¦sl烕ëå …Âf½^çh‹Z­Ó4¡ª**•Š;ö ( ÆÆÆÐl6‰Ó1O{š´Z­F»Ý¾Y©TÎp4M³4M³üñÖÖ–@:®(Š#Â~I’”nÂc÷#„ÜJ’žçñ¾÷½‡Æoÿöo£Ùlö$Rä&Š"QÁñk£U¤¬]À€Ëf³Ç²Ùì™�g Ð^~¤‹Á&h].�¼oß¾;{öìÿ×jµdíƒÁ ~í×~ �=ö^|ñEâP�í’´é‘’@÷3�ÄŠ•½[µ×0ÇñŽãpþð‡?;666700àÐóþ|‚€—_~•JÅí4ðqíڵƩS§N¦ÓéòŸï‘[¥¹D»�/hÃ0< èDä�罎ýØ"Ä0±^¯ÛKKK[Ìž±ÞI�`xx8-ÂqA,ú½Ð¼š¦J¥RÉ4M ÞrÑmHÓ²@÷ÅãñÏ$ KUU(ŠEQz€Ýù�$Éýì4`&^@„ßDÖêÕW_Åøø8æçç{ÀÛ½´, Š¢ Ýnƒã8$“I· âå…BŽÁùóç]a€·Äã¼;aô±"£Ÿ­Vër¡PÐýË’~øá‡ÿS�D"!E£Ñ-Ë’Jiþ¹¨w“L‚ ¢—,Éã¿Ô†NJÜ1�î¿M�­­-css³922âú[躎�� ÌÎÎbccà ’$!�ckk …Ba=ŸÏ¿Ù%åZ¶m›–e‘dß‹”kà¶¶¶^À�WƒÁ`0 …S©Ôß–eÙ!,OƾÈÚ±qõêUèºÃ0vK\ê}xIßm¤Í]ûéééwE£QŽv´§oýFÃ蓹u]ׇ‘ÉdxŽã¤B¡°088ø�mÛ²mÛX[[ç?ýi¼üòË¢Æ�.H€Ù#6îŒÝÜ tðìgÀOLLˆøå±±±ýétlçãÉ'Ÿ„(ŠxþùçQ.—ÝŽ@½^G±Xĵk×:Ï=÷Ü ŽãhHƒBžçñÄOàýï?¾ð…/ R©¸�ñ ^`Ã+Huœí’E"”J%ùYÚùœîvÐDtºH@€é𬯯7VVVÖpgÒÄ;ôd‘e9A(Ø©ah6››¦iö“‹n1àƒ•b&Ý�GR©”E”¦X&] zŠþìôž%É}2™D½^wÕÌȱ©T*X\\Äþýû=}Lˆù#ù>E²,»ÏKø6¬t²išØÞÞÆ‰'zº*¬Ë=&xèºNDtô:Ÿ¿Ó¢�~øá‡~Ü;䡇: …†DQt¼øôøU³ÙD½^G8&Ä …B°È$™4y’g�¿ �Ò¦žÇ`†¡ƒÁg;�ÎGH%žÈ¥NMM¹ 6=†eÆ­\.ww: 4ð U�hB'ö¼eY˲š¦ÕjµÚÿ �H$&E‘Çy<� ‘˜®zZ–…ÕÕU¬®®zVR»kÍ5�óè% {9É;èï(ï:Æb1‡Tѽœ´éÊ;�Ȳ¦v„\Û%s§>úÑ�þh¹\n߸qCTU‚ @Ó4<ÿüó�e™T÷EQžpw¤QI'„Q<¼»\œè GT0??ÿMNNH§Ó=�EQðž÷¼¡PßúÖ·P.—ݤœ¸—/..¶¿÷½ï=o†}8p/½ôVWWÑh4Üu¡ÒÀƒÜçDú�ï°¤jÃ0P(zÙéóÑ+ 'E’ÐÖëuloo—Î�;w‚ÙOìþ¾±ƒÁàg»Fšîûa¤¹íÍÍM"µK‹&ì>hò9R©T,�ÎɺÊÓ#ƒd¿².ð4 ‡ÃÈårÙ±öårÐ4 …B†a¸K9W~æg~/¼ð‚;ŽEü\ú�Ʊï…�#<3ÒQ$ü™B¡àœ?þ z9sÿ£Í;ýðÃ?üðãû@8Žã“ɤ£(ŠÃª5yÉï6 Äb±ž µªªN>ŸçÑ«ÁoP Ħ~¾]òvFºì•••Ìèè(è1¬›7objj étívÛ Ý1’øèåVÐ]Ë#IzÚéª~ \._/—ËA×-Ë:žN§ß#‚›Ì³É)ë­B‘ü¹N§³‰^B?�0ZàÃaÖŒÀÍÌÌÄlÛ~BË‹»Bþ …000EQ°±±�V«Õ3–Â&dÑhÔI§ÓÃ�N³³³¨×ë(—Ë€t:�L&ƒF£Aäxíî‰ÝõqÇß`7þG­¹Ã€Ù@4 >üðÿ855u˜˜Õ‘Ä5㡇B<ÇK/½„íímw슀�[·n5Ÿyæ™gu]7XŽãp¦iÖ¨¬âí;sæÌŽÊ÷n�l°¿{«É¿]4+Àrèª?5v…­­-îòåËë•JEï³—vKn] §(JVUÕämJr�N¥R©D�G¬\´—$wàL$²,ËÉP(d÷óG¡•¦8Žs(ÈÚƒAw�ˆò™ ðâå;vÌ—¦iz)R�çy$“I áÉ'ŸÄ©S§‰D\ymz=xv‡È÷'%r�ÑÑQ´Ûm´Z-”J%ãÆ�ÏâN——¾õ±ôÁˆ~øá‡÷.é&<Ÿfý?HRÃ�b±èú�¤TE~xxø§‹Åâ3 CsÇË•›îd8wè“ õÜ&&&þÇqGjµš£ëº›Ä’y:�Æúúz�o"‘˜ð&vš¢Ñª<†G@¿v€¹éÛÖÖÖÉH$ò° ¯¹}¶rK�δZ­sŽã˜è—¡çöû™ùí�éE‘g“$ö�ÇñðÃC\¸p7nÜèNìˆ�$IH§Ó®d1I¬Úí6NŸ>�v» EQP«Õ …¸l6ûž\.÷J|èÝŸô>ð’�åÒé´˜L&¹r¹üϲÙl”xN”ËåóSSS3ÓÓÓ3,ø ®ò™Lßþö·]ðAÀs©TÂÒÒ’öòË/ŸÐß2†1˜’$‰‘HD”$©'qd»ì?©œ³] ¯Ÿìï$yf ÖŽã@×u—w@'°ÄøŽWŒñªÕ*¶¶¶Î,,,,`§:�‰·çFÏà††† …B= Föp÷u¹B¡ð-ªËBgÒ ^ÀÇítI’Ä®«6EwìÂá0fffÀq]ÀLŠ"4X!ÓäØõ´uºÇÏkT’>^_ùÊWP©T\0Òh4\N [\ðúþ$ç6龩ªêª‡•ËeîòåË'Ö×׫ة øŽGåüðÃ?üðãž œh4šÁaù¬?qŒV…5ãÒétLUÕÿ­^¯_ÚÜÜüJ7É4á=&ôvT±¼ÆoÜÑ®ÑÑÑŸM&“GÂá°CˆÅ$¡#nÃétz‡o2™zG›hƒ?­O‚Æ¡@ŸnéþˆårùË‚ |Šã8Ç+9aå»ëkW*•uôv`X¹Ôwâ£Âõã#°I1k´ØïoÇÁèè(TUÝA¤%R…ŸžžF³ÙÄèèè}�NǪV«­S§N=O<à„$æ}÷Ý÷ÑH$òD4RÅ$ wWÞxDEghhȉÅb.ø�eG�ÅØØNž<‰ÍÍM—óÑl6Q.—qûöíÆ /¼ð\©Trg4UGFF~LUÕ íÑjµz€£—ây~Ã0x¤y�=vÜʶmÇ4M‡HÓ]òš©T �NKKK 2RGw*Éš·Z-ŒŒŒ •J¡P(4(PÀ&¶o«"‚ Šâ~:áf‰ïº®sÍf³†^Õ6ÖÈBÕ6î­zϱDs¯ñ´t:�ƒêõ:nß¾ÝÏSÃõm¡A?‰'N  Ýn»Ÿ…—äFжm#™LâÒ¥K®jä„3Bd‘Ûí¶Û‘%Ü9 %IB»Ý†ªª0M¹\®Á¼:ž>ñÃ?üðãoyï{ßû‹ápØaÝ�é™$–ÄcƒM\‰ f0´AØ ÿ~.—ûCÛ¶½’š~sçÎ]:.øÈf³ñ���÷*Šâˆ¢HT¬zưr¹æçç …X9^çðáÃ?|áÂ…g¨ =]±e4–»BKdÒ„j2Ž%ŠÅâ5I’®˜¥ýH2 …�N§±ººêªrmnn>ÓétÊTâaÞ%qÛ|t:žTxÙ ;�HW*¼öÚk�e.ÉÖK¹Ç¶mŒ��õtÇØQ2zÞÝ0 d³Y»ÓéÜßn·1??ÿPµZuŠÅâEMÓž.—ËÖÂÂQhrfggGÿùðð°ØM¶M:ùíVûÒyE’$A–e8pSSS8yò$r¹œ;vE��Î×¾öµg[­–›˲,ÿ¸ªª<1ˆ#€5£Ñhìða}c …B½X,žà8Îá8Îâ8Î`uÁ§ãÕ ÀƒÁl<Ÿ(Š­>G'ˤeÛ6–——¡( R©”kŠGÀÀáÇÝÑ MÓP*•000ð€[‰m¿1¨û(� ’$dÕ¯È~êîݵ­­­ zEX/ ÝÀd<»çvT.­VËåâsÑ~2Çd Ùç%dôP(ä9 Iö0-—í8âñ8<ˆW_}‡öT‘Ã[hÊ5ºìú¢ Z­‚ã8ŒŒŒ¸RÜÝãk;ŽãÕ¥²ðöy:~øá‡~øqï�ÑÑQ‘¿¢ Rå&ÕUúbÏqœ;�Î1g>™ÏçÿsŸäýnDjš€ÌK’4 …>fšæÙH$rippð_3=2^U¯×¡ëºÛ©×ëh·ÛH§Ó¨×ë=cXÙl6páÂÖº_…¸ßl<Ç€½ BŒ.±Ö××ÿÀ4Íã‘HäïJ’$�5VUSSSxôÑGñ•¯|º®#8Ñhô@»Ý~å.àc7òyOç(ŸÏwöîÝ{Ù4Í}¬Q�tiš†õõu’z*ýÐÕÜD"áVÿi2.Iöú%s]@"vG¢h6›ÖëuîÈ‘#o‹E;—Ë9cccG‡††„PN”ˆhBÞc»ÝÆÍ›7qôèQÌÏÏcnn¯¿þúðQ©T°²²Ò~ùå—¿Ùjµ\¾�¢(âèèè'"‘ˆ >Èk‘Ï Ñét<�5Mã*•J¡X,¾hÛ¶Öç¸íƯ¨Ú¶­‡B¡ñoG$À"~øá‡~ÜÛDUÕ8I¾ØJ/㤌V«ÕÓ%!ã4·¡›œ8‘HdOµZÑ4m�J2xxKÜ‚*Édòp ø¥x<êVÛ¶´m›“eÙ!àczzøÀðÕ¯~4„H�úÐO�‰ÇNòº½µµu¦P(,¥Óé�F£R*•Èçó®L0q�D"C[[[6în×t€òÇPU‰DÂâ8ÎUî!ã>´ÒIˆØÊ;mhGöÁ�Ðét Š"Âáp‚<¿Wg„%ÝÇ:†a8ÝDïèÈȦ¦¦`š&¢Ñ¨ëÖN®Ù(¢øtþüy|ðƒÄ›o¾‰ååe—óÑjµP©T°ººÚøêW¿úl§Óqù’$)ÃÃÃ?�Fy2BCÀëÓÐjµ¸@ @Fé¸î}f¹\~®V«<oZÉhW‚w«ÕºÔ•õý :�†®Ø_žf³é&Ädméñ/ÒÁQÅ™˜˜HÞ¾}»��nç4¸î ²“ÉäA¢ŽGm躎+W®±S±Í+�Þ8W*.�Ns¬Ê½�Èž­V«=ɾðízk@YýÁD,s¥°½ºZ„K£i¸ûƒ¬1áâ°ü*úùˆ’Y&“�¢(ƒ=ã|DÆ|zz:¹¸¸XÇNå«¿Œ‰«~øá‡~üàQçDQ´¼Ô¯XùÝb±ˆáááª/ôÜ:©ÂJ’Èf³Ÿæ8®a†Ól6Ñjµþ lضmÙ¶m†aÙ¶m0XnllìÿTåX×wÀa Â2?�H$ðàƒâK_úR�G I@¶··166¶c +‹ahhˆ/•J´Û00Ò/iê7*f3Ý7Á³,ËÙÜÜüÃ`08�FZEÇ0 <ùä“xõÕWaQ£’Œ¸ê‘(Þ |ô$¶Žãð�<òÈ/g³Ù=N¥R�®ëð"“–MÆèj0Í1 cI4Ù—¨e¢Ý’H¯‰aH¥R(•J®ab?³Dò÷48ù­ßú-ìÛ·¶m»#/år«««Ú‰'Nt:ÂMÐA ÿD<çi�Cxô{j4X[[û^(zW—kñ²mÛÍz½®¨t“lväèí¸Ô»ü¡b±øºaÕx<þ±p8†a¸>rlHÒÚn·{º}4H!�!ì¹¹¹#·oß^aö5îÒAãð²,–e9Í&ÚôwC»ÝæLÓ<‹þ†·;:ˆíííòØØØÅN§³Ÿ8`»/0³û�í^�"DµZÅý÷ßUUAä±u]÷,¶²x½^G>Ÿ‡,ËÐu½‡ ßn·] ïå£Cƒ3~h¯w¡ßâ\9cccÇ—w>øðÃ?üðão ‡Ã«8C�ÒR¯×‘ÉdzdYÉÅßÍÌ© n0D$‘EQ”mÛF*•‚mÛ_ «ê¦inƒÁï†á˜¦‰B¡€l6;¤ª*žÉrW üàñôÓO£Ùlº ‰® ß¼yóóóH$h4.QU±XlÀ*î�Èyì4N¼Û…Ÿ$ÓEaUªèt::=òÔSOazz.\ ãÜÐÐ�Øu^§Ñã þñ�ü³£££ÓŽªªtG“Ød¾ß“�­É(R»ÝîQ&¢“3F7ƒîVЉX?þˆ¦iîßÒjO´é�0’$²ÕjáìÙ³˜œœty-ëëëõo|ãÏçóyB8×yž� ÿx"‘zu>hry³Ùt666^¬V«ÛxËçÆ¤:SzÝêYK›îškµÚÅZ­¶�L&ŸP%(˜,˶j\n @褖¬—(ŠH$ìëqocñøááaI’¤kþGwˆêõú îÈÇî>î&8Á9Ž ƒ‰X,†d2 EQ iÚ†ÌßÓ#à£Z­"c||ÜWpív{Çç¡»¤ØB¸dÉdr‡¢—i+û=Øn·Ñl6�ÇûÅ®Tõ;9Ï}0â‡~øáǽ@èñ+TÐɘ¦i¨T*�$É}ÜÀÀæææðÚk¯AÓ´ž +¹¸V*׬{Q¶Ró€mÛ! D"‘€eYEÑ!sí$ñ¤;3�@†aà�þè�‰DܪgµZÅàà ›œ‚j,C.—£Ç°œ���^F¯„. DX¯’~^´œ,ÏÜç”B¡°044”³m{ضm\ºt ¿ÿû¿�ŸýÙŸuÇ1$I’°“gòvÀ€ß»w¯xðàÁ9:::;00UU].Å}÷݇¥¥%äóùžµdÅèR&”†a V«õð%èýú;"Ë2Q±òײ,Ë»¢�¨YÓ=ZQŒå…,,, ™Lbcc/½ôÒf>ŸïéNŒ���$“É ¡!ÏO*Õd/µZ-keeåÙr¹ÌÊ£ÒcF:ó;í#s7hÒý;±T*}³T*É™Læ}ªªfDQìá\q‡jµÚÓícýDÈ1Š¢¡P( i-˜À‚m²Ï{cÆgHÆËœ´ Ònb'�õ±è—8÷ìñx`tzzz$™LÚªª‚¸¡‹¢ˆÍÍMhšÖ˜ÙcOˆjµŠ\.çŽY‘cKºjdœŠ0”#¹¹²²b‚ ×ëu(ŠÒ88Žƒ×Ø* àMÓ,µÛmÁ4ÍÍC¡Áb(’"È;9çýðÃ?üðãÞ l‚G'¡´ün—,é>fÿþýø…_ø|êSŸrç¤Y)L2ŽE'Žäg?•%ò;I^Y…ÚŸÁ0 ”J%„B!4 nkkka|||ŽNl¯\¹‚ùùy\¿~Ý}ÎP(„x<Ωªz ÑhœEW¹ª{cýx*‰â<À›TÒs&óh·Û6qçyßüæ7‡]¢¼$Is÷†ã8œGÂ&aìpàÀ�_ŸK¥R=Îà‘H?ôC?„'žx¿ù›¿‰f³é¶yu@hS;⟡i·¶¶æ�ç$nÕŒ°¦q,(¡G¶h@BöñZèçÚN'Œ^pÒ9YZZÂÂÂÂÕååå‹Tb¬���ߟH$‘e¹Çè@Ï8X«ÕÂÊÊÊZù-wE¢’¦3 à �Ðü‡»�ÏÑÇM£|T,ÏD£Ñû%I Ð’´’1 €Ðç YgY–Ǧ§§cW¯^môÙOšiµ¹@<‚Á COº8¡iZgsss»øx»ü788ø@&“ùÌàà Mï[rœ²Ù,ÖÖÖÜÑ'/Q–«Õ*jµöìÙƒF£�v»�ÍÍMÉfLÐãRÍf�NÇyã�7¾½¶¶VO$C‚ Dc±Ø~"Ô ±¼¼ŒL&³¼Óßs]-»Õj9»§îwÒ`—«Sƒ· úœû~øá‡~øqoÒ9 I¡ÿƒ�1i“¶Ó§OãÌ™3èt:}åZÝê2 >úúw:é!kv†š¼Çr¹Œ|>ÿº$IF«Õâ ÃpÈ¿V«AQȲ MÓÜÏ©ª*·oß¾éÅÅÅr¥R¹J‹Bú…³ q“‰µµµ/Æãñÿ; YÐh4pìØ1|÷»ß%Ä!£ëz“­HSïƒNJxŽãøññqáÈ‘#Ÿ?000࿈.ØÂã�?Ž`0ˆ_|ccc¸zõ*êõº›ŒÑkLw¾º*RÜòòòæo¼qjzzzljjj¸;"3ªªª£(ŠCÀH?@B’ Ó#[Š¢5°7úùÈ{£y.]iÕmPãR###‰Ä»eY¶éÎ TçÛÛÛ¥R©ô-Ü«"NÞ„ÄN�Yð6�ôÅv ñ‚ õ~mÃ0n·Z­ÛŠ¢LÓNÞÇA’$Wõ�MlÉc�“eÙéŽø°£†¼¸æ �ŒŒŒêºþ1EQšÿAƒ=Ã0Ðl6MMÓšè_`×»$Ì<ÞrZç�?þàÈÈGL%½:CCCX]]í#¤»1�NÇå|�Î(‘*ÞÜÜtÜHA…çy„Ãa—ç1>>Ž••gmm­ À.—ËË¢étz¶;AP­V166Ö³¯½|©TªT«ÕA2vÉÊ“ãÔ-°þB,HôÃ?üðÃ�¿9„˜ ¹H˲ ªª[Å#óÔ]~†[5$J1¬l(ý;IŽú9AÓm”x�ôЉ'ízÜåvºtéÒóG�­†¡’×&NØ“““8þ<�ÖÖÖÐét0>>>•H$&ŠÅbåÆ�¿Óh4¬®œ¨Å¬“ÍüìW…¼áº®»ë´±±áº5w?‹300ðp.—[ƒC¯Ñ0wŒÇq~ÿþýÿzbbb&�N;ÑhÔ­ ‡ÃaüÈ�üDQÄK/½„B¡MÓ�ÉdpãÆ 4›ÍWmrÜIE¸\.Û·oß>}ùòå%öâââÅÅÅÅó055�F£¡x<þ·2™ŒMÔ«ðéHúñGVVVz”…ÈM `ß¾}X[[s“P²·X§ìnâ}?€¯°³Ùì}©Tê”è÷As’:�J¥R%—Ë}wL*;è5ªd;nÄÊKïê³��ªGîó´Ûí?×uý³¡PÈf¹ DT€%¢³jX’$9ñxüþ z 3éd<ÏóÉdR�D"ÿVUÕp(rXÆžÏårßfÞ÷;逸@hïÞ½Ÿ<šH$UUݱ+Ò¥ A�ªªÈår;Ưø(—ËH§Ó®¼.½Òu©T CCCn÷�î´ž[”Ò€r3—Ëýy4ý{’$Ù]/!°¾Iô÷Ww}¸Ó§O_…BKº®?aš¦C?²‚‚ °&§võÃ?üðÃ�{€$¹p’䆨J麎h4ŠÑÑQ¬¯¯#›ÍöÈîzÉ`’jr(Ú!÷Úïwö>úýàƒâ±ÇÿøÅOæ".µÛm³Z­Úš¦¹ïgii gΜÁÆÆ.\¸àV=%IB8F"‘àS©T2™Lþ‹���ï\¾|ù«T‚DwAðßBˆ£aš¦®iÚ˲ælÛÆÂÂ>ÿùÏãôéÓ®¯Šªª`ÀG€Mñ–Áç8÷¡}èóÓÓÓ{ÓétOçCUU<ñÄxå•W°µµåÊf³ I’pãÆ ž€8Žã\"x±X4;�Ε7Þxã “d“ñ"gii©™H$4MÓi6›Ð4 CCC®I^<w+Ì�°£Uô�x.°îׂ `ÿþýD&“Áöö¶«bÔÏu\E%‘HìEÉdò˜¢(6Í+"’¶$±m·Û(—Ëùåååç˜ÎG«{#]Þ2³^ÞoWqÊKõz½�Ç ²,'içs²&^<ºBˆèCCC‘>û)@Þ{"‘ø‡©Tê‡#‘ˆ)Š¢ >4M# m=È]¥¨:¼=FîF>çHçnÏž=ÇöîÝ{”ˆ%Ðàƒ üŽV«…R©Ó|kº‘–Ú ®¼.;šÕétܪ$Iîë`EÖ� ®¨@¥RiW«Õ•p8gšæYW:ˆÏŠ êªf�Æ2“4ÒQ>›Í óóóÿrjjj6�NƒÌÎK’„H$‚}èCƒxå•W\/]gðö /¼ðœ 6Ïó6Çq–ã8–išvµZµÇaÍõèªÿ[(<ÈqœÃó<¢Ñ(QFrÕ}$Iµk× ª*Eé!Ó€„ð?ØNðÖˆI¶kµšË¢Ç:a[–…L&s¤«ÊfÓFƒ4ø ÕójµZ½yóæ Üá|´)ðѦˆ±K•ÿn^^û¤/`Ñu½Øjµ¶Âáp’€'ržÐ²Ó¤²NƒxšB�÷Ð $HŽ£(Š¿800ðP45Ùî¥õz½çœ1 ápXÖ4­†Ýý+Яû¡(J|rrò—†‡‡{ºv47‡î~´Z-lllàsŸû>ùÉO"•J¡Õj¹]3Az$Á h6›V­VãlÛæY“C/s `êtÇqÌB¡p)�Žlmmq£££=rÖôø"ùné:¨;ŽãØív»GŽš>N(F£ÑyÜÅ`Iéôè¥<üðÃ?ü¸÷ˆ =dÎ~óÌŠ¢ ™Lbmm ÃÃÃ=Ò©¬‰W£Ñà:�Îù���&Ïó¢(Š‚@“YzvÚ  �‘Û¶ñÚk¯¹ºÒËhîsÙl6‰Dd`‰¬ý¤fé$¸›|ºëGö<ÙF>Ÿ?‹Å“eYd•½D2êõú¢ã8¶ã86‘gÕÊÈqêŽÊ�é~Ðç½…�cX>ñÃ?üðãÞ tRÞ/I'|Xh!¾D²µÙlr…BáJµZ½B%³¨dÍN$?‡ƒ‚ p(%##Äa›N.YÀááqznnîñ¡¡!Äb17¡a Ç4Ø"ݦãcëº~_­V[Z^^~­OBéELçvIÀèê¸U*•62™Œ)ËrȶmT«ULNNÒœGÅ�ø÷Ýd‘žÛF"îØ±cŸ�››;044Ô£v‡ñÈ#� ‹áäÉ“X]]uGPšÍ&J¥VWWëüÇüM˲he'�"ì\?}?AAžç¿è8οb%–»¦}x饗z:­V ¦i"ãÍ7ßD4E<G&“�$I;Œ IÚjµ\Áƒ»™±ºNîïÔiðQºvíÚ³}:dôJC¯Ä®}—nÇÛM �> „뾟€mÛ×Úíöº¢(YšŒÞÏ��­¬wǧ¸L&“:þ<dOÙ²,U%N8äæ%Á*‘)ŠH&“Ê[“Xo‹0í‚�£G�þÐøøø»ˆän¿Ñ+rÜêõ:Ö×× O?ýôÅxà1ÒêvÀðð04MCµZu^{íµ³ù|~‰/Y–¿aÛöOvA�' : ´¯ 9îv±XüãããŸÁfׇþ~ê4»ÇÓðªiš°@‘~MQ¹���T¡Pè0ç|�Ùs>ñÃ?üðão nRFƒ/§kEQP(�H$Üä°R©€Óh4ZÛÛÛßÖ4­D]¼-*qu \.½\.Ó$K^–åd6›}w(³,ËìŒ5 <ºÕíÎØØXzll ‘HŠ¢¸<¯j.=nFÏq“û’É$†‡‡?pûöíKÝ$Å«Âív"à-Çë@Ü.H£Ñ0#‘ˆkŒvêÔ)¨ªêº¢G"‡IBHòˆ¹¹¹¶oß¾=CCCnçƒÌµßwß}Âk¯½æ’µÛí¶ÛùX[[ÓŸþùç-Ë"„j�I²Iå—&D[ ø ɤ•Éd>)˲E›ÒëÌZrì–——¡ª*LÓtUÖhçkv �* AÍ;"²ÁDb˜¨dñ<�z½îŽvIÇÕÅÅÅÝϤ{t>hÞÇÛq7ÿË$ƒ^ „£×]×õo†ñi2zV(ÜsƒšB�4RªoAžç%žç-I’&#‘ÈûeYv4MEÑé§XFŸ‡äõ‰¼v×Ôó=®Â[>ÖëùDr—v(±mooãõ×_?ŸÍfGdYÐ ‰¼7Ê�ÝÉçó7àÌÑ]3¯NnÔ± yOV¹\Ö'''Á:ÃÓû’¼˲X°£SÅŸîqâöíÛ÷áÍÍÍ­[·þ_Û¶Eì4µ¤Å0|â‡~øáǽ @Òé4fff°¾¾ŽµµµžQ,/‡P(„V«å^H‰ nµZýn§ÓYë^,5ìôL°±Sò“�,ív»S¯×/I’4Áó¼M.èìHyMÒuét:\³Ù\Ÿ™™ ;´¡]?âå}BÈé©T*’Íf�¯¯¯¿‰�c6•œpÿïì’l:`Ư†ñï-˲lÛÆ¡C‡°²²‚jµêV­#‘Èd½^¿@`pç?~üŽ;6�Édܹy>Ž?Žññqœ9s·nÝò»âŸ~ú雵Z­Ù=6^‰¶×(–íqüøÙÙÙŸ�D"“´©Ÿ¦i0Ms‡B�œ1‘S­×ëh6› ŸÇKy‰®¾ÓÏ¥ëºëYB>+ña]³;�Y—À•+W¾IíSvôêí‚�¿Šä�!4oÈÚÞÞÞPUµÝétdQÝu"Ç—UÂb» ÝâÁ±éééã”"™ÜýÆžï´K7Çqh·ÛwÚÔ÷�(Š*}£¿Ñ!€O¥Rü‘#GþÅÈÈHˆørôãç�Ñ«J¥‚………3 µÙÙÙCÄ“ƒ¼oV:¼R©,S@Z`’ó›í¨²„ã8~vvöþëׯ‹=ªªZ„€¾›¯a�$IÎd2ó­VËÊçóúž={v˜F²JXƒƒƒ¡x<>2<<üÑ›7o^Ìår¯1ÀŸŒ�bì‡~øá‡?øäرcH§ÓÃÓO?íª Ñãô…’N » €k·Û/v:�B÷âØa’7 ;Íýèj(ùÌçóg‚Á`�ã¸�9ŽÃÓ„Œ�¨ªŠZ­æ&žõzýV0\ŠÇã{%IrhNítÍγÓDfòoâ¾-ITUu²ÙìÇ­­­­m`§ñŸ�;cXvÒ¯Jnkšf뺮ٶ´mñ�ééi\»v�$�\<ßS¯×ou;âý÷ß=|øð‘ááa›$o|:t{öìÁ¥K—pãÆ�ðQ©T°¾¾ŽW_}õJ­V;C�/…'¯d»§â*˲822òOUU�•$©g�eYv;,©œTµ ‰™tÙxžG©TrkvÔ‡p¼’MÖ­½T*õxGÐÒÍk·Û(•Jç(�Õ¯ûñ×>îBlÛ¶·Úív'‘HÈŠ¢¸Àšçy´Z-×Y¾_r+b±˜“L&ö\&œ /aˆ`0ˆßø�ßÀââ"~çw~Ç%PÓ�év,ú¹¬÷ÈEàb±Ø¿™J&“ðâ�ÐÇ•Hë.//ë/½ôÒR—PŸEѦ½¿4MãŠÅâ5Ü©#²Éðê€x¦Óiçúõë;ÎÙH$bÓ„%°ÓÄ÷N§ãÌÎÎÖuÅbÑ¢GåØ. ñxº®# Í ‚0 ·VVVnõùŽñG±üðÃ?ü¸wÈöö6Òé4¶··Ý 4{Qe§G˜º‰înUd€xu@h…!—Ë]`G£ÑOH’dÑc ªªâŸøžzê)×¹Õj :޳LÈÌý$^éª%;næex'Š"‡÷ìÙó¿w:�ËÅbÑZZZúöÚÚÚ•î{ÂÛx®¡³§T*Õ2™Ìk–e½Ûqܸq¿ò+¿‚gŸ}–ö6ç8NqÇ8~üxüÈ‘#Ÿ&~4ø8pàöíÛ‡……\¾|�N‡Ü›o¾yaqqñÓùh1ÇÊÀNyY0 ÙlöG£Ñ9Y–{¼"ÈžEÑ•F%Á¨qårùd7ñ´eY~�¦iœ,Ëán�¿Áëb; 4ø níÕj„@ºeä8Ó¾1Á`�€ƒÙ»ª+bþ5��~€Ä`§Óéý‘H$ÉlŽãÐh4Üñöü% z×��{:$»¾ÇÁ‹/¾Ø÷»�úN`»^ „?zôèôž={†<ÁËûh6›ÈçóÚ믿þ<SUÕcápØ¡ÏeÚŒ°;~U. uôJ)ë8Ó49Vä€UÂê6O'rI’ì~tV4!™LÂ0 \¿~ÃÃÃY–]¾œ—!¡,Ën¤»ÇqXYYùOØé+s·"‡~øá‡~ü`�+W®`yyÙ5ôº@Óã/¤ÂG% º®—qG1†Nlû„�F ær¹ ¹\îêÄÄÄOŠ¢8�F•X,†`0ˆÍÍM(Š‚F£žç!I’Rô¨•×(‰(ŠÁÀÀ666°±±ÑóÙØÇƒA¼ë]뎦iûÇÆÆ033s¨V«assÓEñ?noo/^¼‚^U¤~`LBã4›Mž(5ñ<�?ù“?ÁÔÔnݺE’“ÈØØØÏ*Šòæ‘#GîËd2ˆÇã=àcß¾}8xð –––pþüy÷8¶Z-T«U¬¯¯sgÏž½véÒ¥ ÝcD’ìu¬¼ªýlbÇB¡àÈÈÈg£ÑèA>ع}²?4Mã,Ër¨}Ãu±\áÎ IDAT»e¹|>ÿ¦¦iej­®@£Ñøè‘#G¶m;$¡d%aé1<¢nÕl6Q,±±±A\¥ñùÏ_ùÊWpéÒ¥žD�ªt;Dÿîï¡Pèˆ  °ibšf�h]Ñ'£“Äñ›tž8ŽsÿMßh�þµ¯} l÷€V3 ƒó8—éß]ð‹ÅþÍ[¢9Zä5H‡¬ë÷Á=óÌ3[kkk ÆÐÐÐP(rXŽn;�Fƒ‘Íqž%ëÓݺ  9�®Ž]«Õþ©ã869¿lÛ†(ŠˆF£=û²Óé@UUloo#‘H@UUWñ�Þø�ÏCº}ÔçÚóðÃÿ�S§Ný<Œ*»ïËò» ~øá‡~Üs¤Ýn»êB„[ÁÊëF"WUȲ,×1Ý4M4›MZ²’í‚Љm?²6Ouh&éöíÛÿU–å�üC2þqýúuÌÍÍáìÙ³$±rdY>œ~^#ǹíP(„t:�b±Ã0vHÓÒÀñx¼‡àL¸|»Ýþ?ÆÆÆ¬ùùù­íím.ŸÏÿ§Z­–«T*V½^×àí‹ÐÓùÙÜÜüz"‘x—išœ$IøêW¿êŽÕض�b±ˆÉÉI>|ø¾l6 zìJEÌÌÌàÈ‘#ØØØÀk¯½Ö3vU­V±±±�‹/^<þüôŽÑþô˜ŠÉ€¦žJðððð¿ŒÅb³^àƒN;�Êåò¥b±8§ª*×jµ8žç_Ôu½ÝjµJØi\çÀ�7þX„äÌÌÌǒɤëBË(Ó\¶Êå2†††P*•¦iâäÉ“¨V«}+û”ã=Ù»z•À¬>`ì¯;É �Ñ4`Óc…Äx“ ,EÓÓÓ4§###qÏç~ „¬«8fšÍæi�ŽéhZ8žç¹GyäSÓÓÓ-¹K ú9;�jµnß¾}sssóu¦ ªªFh@Jºn´÷Í›7OSÇД¶mó¤íFD'ëE�`8OLLüR2™ Y–…r¹Œz½îY–Ñét0>>Ã0�F!Š"nÞ¼‰ññqWƒ¨ zqHhîYoÓ4�Ç�~+ŸÏ;ð6zô�‡~øá‡÷¡GT¼$M‰y«ŽsóæMt:.ŸÏ;%+YyמD³1qGrÒ%^¶Ûí|§ÓáE±‰b?![âE±[X–…jµŠÁÁAT«ÕÃ269€ ÷€1šün†c¯iÚp6›E«ÕúB£ÑàJ¥RÀÓëëëÜÅ‹¿  Œ^µ,7ASUu´^¯s]#2$ ‚€‘‘8Žƒ¹¹9˜¦‰‘‘×Uœt>æææpüøqlllà•W^ÙÑùØØØà.\¸på�7Þ8×=&mxó>4&éö:FÜÄÄÄ?‰Çã3²,;´b1ª# ­Ýns¥RéÊíÛ·Ï8Ûh4h÷tZ•ÈÂNqþÊ•+åv»ýg“““ûâñø¡H$b‡B!‡ ÑhÐ4 ™L†Œê@E€=óÌ3=|¿½þ&^ä{|ŸÁ‡‹Å~) ÚlW�Œ|>�¡¡!w¼Ç«ÂOF S©4MƒªªPU¹\ǹ]ºÓDÎy˜Ðþ.ðÑËåò&³WØŽ¦•Íf,“É| •JÙýx´4r£Ñ@.—sþìÏþìU²OÒé´­( OƒQ�ñ+.ŸÏ×ða0mÛæ½¼8XÕ°î÷ 9Gù‘‘‘¿=::z,•JYªªzú ‘ÁÛ·oCÓ4 £^¯#�öH�“s†þ�ƒ#ÝX²G»ªƒ² !!¦@Cw˜,ÿRæ‡~øáÇ=@H…“®b“ñ–T*åV'Ù.©ªæóùP¡Ph£W®•5­c]£YÂJ�öÈMjšö”iš?%‚S.—qøða÷âMÈ›l—N8Ç�¦i8}ú´;¾¥ëúŽj(]M�ÅbˆD";dNY ` �غ®cllLh·ÛÅ�~´X,¢ÝnÿF³Ùlnnn5œªª“SSS??::ŠX,æ&elbC¥ÈÈJ(ÂÔÔŽ?ŽB¡€ï|ç;=à£;"†Ë—//tÁ- ÐêÓ�²út¨xQÅÁÁÁ�Ç÷)Š/ðA;Š—Ëå…ååå³Ô0˜Äi·dŸXZZº¸ººz=‘H¼täÈ‘|ßÐТѨ[Mƒn„xAÄãqär9w/SÝw/t߯Óå-Ù ˆK°¿OàÃU�EÑfý&hB>€xq5 Ãp÷­ qëÖ-èºîžÓ4§�(šÑÂ䜫Õj¨T*ÕR©T¥Š€ÄÆÆÆ¸P(dišf:tè™LÆfÍAi·szôªP(ØçÎ�{w|4´P(ô$Q¿¢º=¤\.ŸdŽ©A� @úù€ð<ây^ý[{“ɤEÞ;-ÀŽ€É²ìºµŸ={###ž|4JA Š¢¸\:Ò¡ac���ýÌúúú¤@Í?£ ýnˆ~øá‡÷!ªWtÄ0 ÎEOVÄ(è' }èÍ7ßü³���•¨±$I:¡Û­ âEâæ Ãh’ùm˲ ª*dYÆúú:æææ000€jµÚˆÉ í]`YšÍæwXȲŒ~ðƒ�$ º®ãæÍ›ØÚÚê‘<íg‚GnÝj®8::Šv»ý…F£�©©©†¦i kkkˆD"GÇÇǹX,š@Ï*@¾z½Žx<Ž™™ÜÿýØØØÀw¾ó´Ûm|p—/_¾têÔ)2vÅŽÄѮކ•Ôp©TêsÉdr^Q§ø c3¥Ré­[·Î£w$ÏËä°q+ç¦iêÛÛÛzµZmÑÜ$vfŸ$Ä‚ ¸+¶£E++u»4f±X\€·Ô°Ó,ÿu€·,‹óêî‘„5›Í"™Lºž 4—€ã8†á&û„äLï³nâ~³T*q<ÏOÓI}­VsMAÙõ…Bœ¦iôŒ›3<<|`ttt6 M)Š#ߊ¢Ø²,ƒî �÷Gó>ÈxØõë×óçÎ�+R{GK$AÚ|�æR�¾Õj™}¥E::l‡ˆí€€,Ë3�<òˆbšæH*•ê‘»¦×�Uà¢e¿8àòÔØ1OJm ùÈGP.—ñõ¯Ý}o¬ô¹$I´y$1$å±»é£~øá‡~üàMÓvÌÖ“‹1mÔÇV`©NH( þ½óçÏ?½´´t»ûx…ÃtA€;Z÷®V«•‰„fÛ¶è8Nž<‰��ȲŒL&ƒH$žçÝJ0QÈ¢Mñت8ë%AÃ0ðÝï~Š¢`ttûöíáC‡Ðn·±µµ…r¹Œng£GZ“%lw¤ HMÓŽ���£Õj�V³bݧéäÊ0 T«U á�p;|´ÛmÔj5lmmqW¯^]Û¶Ñl6¹���oPÕbÞ³õßÏÑ+wï—J¥/>e¿îg_YYÁ¡C‡À&ǬÃv(ÚÄèN‡iš˜žžÞ{ñâů۶-$‰q6u]‡$I=ÎÝd½Ap’ÉdfmmÍN&“£“““?œÉdÂT§À&¯CøLív“““PUÕå˜Ð{¨^¯cmm­úÜsϽLu/ôD"ñ¡p8¼ƒC�Fv:�æÂÂÂ- ü’½f§R)irròsÑhÔ¢;¤ý8 ‘HÄ‘$)›Ï粯èÎ+ÃKž�æD ¹ß7ž—ã TUE»Ýîù~í³¼Ït@üðÃ?üðãÞ $Y£Y–]ÇhºZJ.®„m> ~X„£×¯_ÿzÝ»Ù$s7iú~’@ó¥RéÖððpѲ¬aÛ¶Ñh4\p@œ”£Ñ(.]ºš°ËJd’÷î@h’¹®ëh4D‰W®\�$IˆÇãˆÅb˜ŸŸ‡¢(0M7nÜÀÖÖZ­V�ª ¡_«P(@–åžîG?BþïæÍ›øó?ÿsX–µ£ó‘ÏçqõêÕkßþö·/R µ��cPôˆÍIáAlÛX–e ¤R©ûÂá°Å‚zí4MC¥RÁêêê3º®—p‡ìN�{±zÔÉ €¸Éc±X¼Øh4Zº®GYŽ5³O*ÅEµZÍõ¿`ÍÞDQv*–Ñ��ï'è N· Bºô~q¥li’3Í7`ebIA�>EÁÀÀ€óðÃÿp­V³766^‡Ãï�D"Û¶ÝóÉË·B–eezzúïŒ��ÇA�X±Êeh,..º :«zµ½½Ý~þùç_C Ïd2m>ÈT†�F£a3ÀÖ`qçLLL|.“É$c±XQŸî‚Ðû)™LB×u‚€B¡€K—.¹]¶ •JyʳŸ7�£Óéx* Z–…ÍÍM<õÔS®9&û8ò¼š¦Y¸Cì§y6ð» ~øá‡~Ü“¤^¯ßÉø©D™V˜¡+«4”é„8‚ LD£Ñ�½ñÆ_ í6vsñ¥ù .'¤Ùl¾‰D> …œ±±±R6!´& 4�)KR™¤y,ô¸I€ˆ‚T£ÑÀþýûÑjµzÆ ˆ2O Àµk× I†††�Íf1>>Ž@ €z½Žb±ˆ\.çšñyuGÊå2$Iê‘"íGJ¥Íú8ŽÃo¼�d2‰N§ƒp8Œz½Ž|>�ëׯcmmmßÄÄ„®išY«Õ6[­ÖuÜp¼ºÑht<‰éV¼?á8 ÿ[,û >ÈÈ ]µÖ4 ÕjÕÎårÏueuiðá%ñkÞ%é§æÉ{¶666øÉÉÉDkš”MÀE$ÁíÛ·=G‡"�N·ÛímìôÂßÐáþ| ‰8]àDF¦055å2úCpÒ*Yä<öï“$ ápSSSEQ`Æc†aØä|h6›\p.Ë2� Ãà§§§ã„ŸÃîg¯×“e+++¸~ý:Ž= ÇqÐçnæóù6Ýý�eY …Bó¢(Z´}ëºÎ_½zõôò?,ŽãB333ŸM§ÓÉx<ŽH$â‚0¯ÇqˆÅb=¼àθ\¹rÇann=àŽ¬µ îºâuÓ4 ›››;Š"ŒÒ¿´´ô>àðÃ?üðão) =&rD ‡u쥫�¤B_¸)ÿŒƒ¢(þ/gÏžý/ívÛ‹ïaQ‰ž½K"FW¡ƒ'''?šÉd,"GË&;óóó8sæ �†›ôДЉ4™?' R…BÁ6¬z ùœš¦¡^¯cii ‚ @QÄb1LLL`~~†a`yyÅbµZ �NÇuÿÖ4 º®»k¯¹r6±¡“”íímT*d2”J%,--¡Óé �NÛ–e4MétÚ6 ã±f³Éw:�ß6MSjµZAMÓL¢(ŠN2™ü¬ªª“¢( Ýckw_÷Lj ]M§Ç®ºàÃZ]]}ºÕjUðAÒ#_ô˜S¿dŸgƒf³ùïZ­Ö¿1MÓòê‚�c"¢Ñ(4MÛQ…§TÓœX,¶okkëô@§£áðŠ¢d‰ÄÏG"‡8ŽƒD"ÑÃG ½WÉÿÓ�>²¯Èzপ*`Û¶í¥üÆŽ(â:­ªEw?è"yMÚ×% âÌ™3˜��%nç ßúÖ·.£×›ÅˆD"IUUVº–t2ºêW†eYlÄJ§ÓÃÃÑhÔ&cT¤ãH@€žõb¿mÛH§ÓÈçóPÅýL›››Ø»w¯;ŽHwšHWFE·ÀA~§Ÿ›|GyòwÍfÓÐu @†Çw¤~øá‡~Ü;dmmí÷777€Mƒ‹f³‰©©)·RHfÉYâå¹f%Iúé—^zé?c§#²—òU¿J0À~ôÑG?355µoppÐU£!É; ,ÆÇÇqæÌ™ž 9ͯ AKÇ×åJ¥‚\.·iYÖ`"‘„Ãa‡$U$i¡“=r#£Pår«««®"S:�ÆÔÔ"‘ˆ›´¬®®’Ä¢'ÁgÕ}X?º#B*ÉKKKX__Çq…B=IŒmÛ¼eYb4…išŸé&ŽÓ4o7 ' …E™%Æn^ã:•J‘Hdt…NŒjµr¹Üs­V«Š^�ú楴eïÒmà˜ûL�N§Ó"Êe¬W @E�ªª`Mç(“9ȲL¥Rã]"úBE™c~çØÙlö'ãñ8/I’C’ã_ÿõ_Çïþîï¢Õjõh®QXÊf³˜��Åòò2VWW{:!´ŸH0D«Õr=#Wì)ÔÀú�hš†d2Ùsް‰6Q.£÷Ù•+Wà8Žýæ›o.Ù¶MÈ {Eù˜$Iönæƒ�Fc¡ÑhÐrßÞrNÿùh4j³ç0 úY€O�Rò<ë ypÙl�@ëëë=9r ‚Á $IB§Óñü®¢}?è.YÏv»�R©t£+íí%˜à‡~øá‡÷&yî¹çÞPUu9�Nÿ“H$#úµµ58Žƒ‰‰‰žDŽTOYÙN€8�@`îÑGý� .üA¥R¹èBÈÅ”gRWÎszzZ¬‰‰‰ÇŽ=êD£Q5Ç»#_;öâÕi6›ØÜÜt“Áh4ŠÑÑQ¼ë]ï‚,Ë(—Ë;$:éÏDª»tG?–¼6|ò“ŸD«Õ‰'Üçex$v7aKZ–•ŒÅbèt: ‰-�ÄÒóç�@­VË]"ëU¯×Í\.÷ÍZ­Vôè|´(ð¡Q e?‚7[Í¥ù 3ŸÏwjµZQ×õ8-¥Jï;²&’$!“ÉàÆ�îqw[+wë|$™,‹×±ÓñšÞ£Õe|�ײÙì?ŠÅbÇiÓÇO}êS8qâÎ�;‡}ûöíàbÑ¿ ‚€ùùyÄb1Äãqäóy†á9>I~’$�ì7/yjœ°JΧp8ܳ¯éýKsPÈ}š¦áÆ�Îòòr…$Ùñx|$™L¾?‰Dèó�?úuu]wªÕj ;�“©TªgD“S£Ï9Ô° Ó4w_H$ :tú§êž«^ǃŒ…’=HÎ9òXNùN*•JÛ§OŸ> oõ¸·s>ùá‡~øáÇ& \6›ýl$‰±‰z©TÚá­!IÒŽ„Ž$¼ì8ز,êÊ•+_^]]½@%ydÆ›­ˆo9'ó‡z|~~þGÓéôp,sh¾‡WrCƈrO:�Æââ¢+%J{l�äž�_Ëå²}ëÖ­o®¬¬�j¾Àº}ûö×oß¾�x< ‡Ãa ýÝ��„ÃáQ¢‰—î?$ù|Á`W¯^…ªªnâLW¢‰FFFP*•°¹¹éVýi> �<…B!¬®®"�âWõW‘L&ñ /à¹çžså{Ù$‡T»ÉšÐÇ�N>É}µZÍý|�F«««ÏÖjµJ÷v˜î«´Eßí> ƒMÆi’¸U©Tš–e�Ñ4í1šŒÍò@Ø{ôÑGñÐCák_ûš[Ñ'I&ù¼Š¢ì/Y–ÕOµ�óèÌü�"<€@&“QS©Ô{Ãá°I’ï={ö`hh_þò—¡ªª'‡�¾Ï², D£Qär9×cbÇâS÷‘1$ºØ@?o?Ïúué‘0–¯Ñ�’N§Ý·“ÍfI¥RhÉ^Çq`dYî) X–…N§c/,,,2àÖeù¨$I"{NÒ{…œ?DP‚ÈlÓ€Ÿ|Y–{$žÇÁêêª+ëÍ–lnFFFz¾ƒÁ ûÙϤ+�r¹\vìÒé4LÓÄsÏ=·£jM¯1Yû—_~Çá«ÿ?{o%ÉYž‰>‘±efdF.µdUuUw©»«7µ�M !æX0ÈÛ±}ï`ãã Žñx°±±|Æöx`ð2œã‹}Ǿ ÜaÜÁFÂÚšMkïnu«º«º–îÚ²2³rÏÈÌXïåýåW‘Õ�¥ï9yjËʌ勌÷yßç}žo~’$áïx~ã7~P©T IN�:…|°O†•®³ò­´d1q›ç8ÎÙØØx¸^¯×pUâ—:§ˆ…`©Ý àAÿަaùt“µµ5nrr,!ǃ x衇64MË�ÅvKdYö2™ÌÁB¡ð$úåM‰ ×?E„¥rétzT×õÿ˜H$l²ŽvíÚ…~ðƒøÝßýÝ>ÃA–Å*C=ÿüóXZZò�*ƒ:$‘ö‹ ¤³²°;’´Ó”Br­ÒÔ-òÄ7£„ãÇ�¹|ù²3<<|¤'ƒÛ×ù€z½îÓë8ŽóÕê h¦iع¶ã‰D°oß>Ü|óÍØØØÀ�~ô#†áƒ%¬Ð34žçáâŋ߿O×v»�ƒ¢T*õ� úØ’‚H­VC·Ûå«Õêú£�>ú0®v»è÷îy±Å0Â#Œ0Âøç @¢Ñèkè®+Ÿ �N }7ZUUýŠ2IhI%�N {7pG’¤_¡ë8Î:Ïó¿‹Å$Žã¼Ýà‡Ç=躮722r÷ÔÔ”œN§m"±K± ÊË™®×ë(•JXXX¨ž:uê”ã8öúúºÀ‹Åbž Žçyn·ÛõLÓì ß‚–­e}28ªR™��}hvv6¢ªê�t]UU÷íÛ÷Þ¡¡!/‹)Ñh4B‡iÎy©Tò)AA¤|ÉqÞ–±R`„vy'‰’çy¸÷Þ{ñ½ï}‘Hét±X wÜq>ô¡Á4MÜ}÷Ý8sæL_÷…­N“cL’/I’P­Vír¹\ê+z~Ÿ‘ $i'à�`Ä!§OŸþúÑ£Go7MS �;‰D‹Å�Éd®Ôëõ1EQ¢¶GÏ ÐŽà¢(Ìf³¼¦ií–ΪyÑRצiB–eáÀ�¯»xñâcÞ ä±Ût ‘H¥Rèu6·Ø}fÁÙò=='E>“²Ù,*•J ”=†äs¬T*9.\¸¯T*5pµ»Øìÿ¹IG‡Fa„Æ‹ ív[( ¾iØðð0²Ù¬?ÔLÂq\ºt ¶mcddÄO~ gœíœ03!XYYávïÞý�Þ¹KªÒ½›øÏ¶Z­;"‘&'']Vb7Èø‹Ü´‰„n«Õ"Nà˜ŸŸçòù¼‰D’Žãz7m«Õj9$ûC«è÷Ë •¨Fív;Òn·‘ÅÅÅ/öïß?–ËåtÏóŽONNj‰D‹ÅbDºÔW3b«Ç¦iâ™gžA6›E½^G»Ýî«ô³UkRé®Õj\¯ÒïÑ ˲°±±ŽãðÅ/~ñ�L&ãÁ±2¶¤ºÜjµü÷£«Ç=;9VA.ë&sìüø†~BºÕjµ Í��ÁßT*µw}}})‹í&‰,y.õ<-™LŽÔjµú½kèsÏ1__nðáÏŸLMMý/ÙlVTUÕ#�›O|âXXXÀéÓ§ýäv÷îÝóMìˆÛ9‘ϦÁ)+,À*Z‘yƒ‘‘SÒA·A‰=ýw²^b±Ž?I’°´´ä CÍ ð<EQøX,¶ÍÏ„ 䳆¦J¥R©ëUU=e†O�k4<Ûµe»6®ëâìÙ³èv»(•Jèv»}£Ÿß£{ùÇoffÙlÖï Óź B:³,-�n¤R,—Ö××Lkd;‹a÷#Œ0Â#ŒW&q]ןGà8­V ­V {÷îíSÄ!7û……ض�\.·�SN'ªtR277G|\Ò  “$Û¶½J¥â #‘H€$"¬R Mo 7vâÝQ­V±ººŠÍÍMxžç¥Óé1UUÇ‹Åâ#�FcW¥=™âÑ¿ âYÓ`B"Ì÷‘¹¹¹¥¹¹9 À\4MîÙ³ç_år91•Jall¬�FDÀÇq°mÛ7@¤FpЕl˲P¯×qöìÙo‰¢™˜˜x½¢(®(ŠYQ¥^çщ9N¤ C'”ý×�o~ó›øÖ·¾å'‹ì¹E¿L*!føøI:¬³ À- Ë{÷õ¡YÒ­Éf³™Z­v%�N驪‹éÄWEIÓ´éZ­¶Žœ¦Eê|:ØNÃz9@H`çcttt2‘HüëX,æ’äûÈ‘#h4øÎw¾ãŸo2#”Éd i,ËÂÖÖÖ¶kŽ\+A•vríPJKF³Ùì¥ACÕ;VÑ©Õj!‰ Õj t§×ÝõaEh�zŸzNåÎÄÄÄ{çææþðpÕK IDATšOÃ06Mó-¶mËAt5r,�NŸ>Ý'ÍÍ^gd0¼^¯#�N#›Íúf…¬¨ùLjµZþŒY½^Çððp`‡…+Û¶Ýçž{îiêÚbÁ=«(v?Â#Œ0ÂxåI’¶U59Žƒ®ëصkæææúä;mÛö;!ãããþ�›P èùŽã|ªO&“Ùöú¦‹Å½X‰LR½%ÉkþÇxwxǽÅó¼¿o6›5&a¶@GŸ‹ò€ BX0BYK’¤èîÝ»ß�ÇE"]›Édúè3tRB’V9(ˆÞÑVå*•Êã˲ºKKKpb±XTUU^’$EÓ´wô@ /×ív�೟ý,ªÕêÀaåÞïén‘‰~ÊZ�×ÇO’õ™J’ôß ÃøŒeYM…aiXÄ�°Ùlæ;�NWUU™ö} hXˆÇãop €Ô{°²ÁÀvu®—º?Ü€ßùë(�N2‘H¸xG£Q|èCÂýÑùç=™LbrrétÚ¿VR©FGGqñâž„–î„ÑU|’$ß›jµ žç‘Ïç%¦ÙN;OAƒSUUû„N�:…X,†J¥²m†Œî4�¤?HÀ�ÞÛ<7Ç�$IH&“@?…ޝV«Îðð°½Ø¶í›’²sdô±céiÄÇcÿþý ³%„öHþ‡EøØÜÜD.—C£Ñp�?>>ÞGudÝÜ{^ì;ÀGÀ#Œ0Â#ŒW!s,ÃÛßþvÌÍÍmã�{ž‡ÙÙYX–âJÎz…ð<ï»뺾cGƒ$A”+¶ÂHÓFåªP(øÕPºòÛ{/›Í¾Ó²¬ÿÞívЯ*c AI´_¬Eÿ>þ!MÓZͧÕj�̆°Ç‚Vžb“Fx¥œZ­Ö.‹*91ñÕ¬ÑjµÈ¶ÿ~xxø†x<®‰¢x}$‰°I mÛ˜��Ý6 Ìt�ˆo ë×À¶—v5„�ˆ·k×.β,�®TÓCý´ÈÞð†ë–ãñøI’÷¹ÏassÓ—·%àƒxáȲŒ±±1Ü~ûí8qâ~øá>óÍ oúú©T*ÜÒÒÒüÒÒ’344䩪êõ|a¤H$2£(ŠÇ*¸,( _‰ü.åNŽjµŠZ­è)B¯k²=Äè��F£xë[ߊ§Ÿ~ù|ÞߺóÕ˜äz䈵Zí/ëõú§£Ñ¨CÏ” òý ë�íµZ-ß˃ø¯Ðónt÷£Õjakk cccèv»ÜÊÊÊIMÓn'ÇŽ@§‡Õ©kŠôz54ì~„Fa„ñÊ ÝnŠ¢l(ýÞ÷¾‡Ë—/÷Q°èJ¸mÛøáˆ÷¾÷½¾\/ù»$Ixúé§áy‰„oÈzwÐ7``‚æ=èÊ-©0Öj5lll`uu•T?·uÈϽJñþ|>¿Ä$µAÕ{ýó ¬L¬ƒ«CÊ´™‰„266öIMÓ$V½«Z­"�BÅ>ðAËŲt3:!"ûß3Ü*—Ë5*I¡—Nt …Â…BAؽ{÷UU#¬ Kµ£P/qåËåò÷pU-ÌÁöy€¼àÃ?_.\¸rôèÑyÓ4¯£ý@èYz$›ÍzO>ùä|&“9¨(ŠGdOéÄ•çy$“É#µZ-oÛ¶ @Æ`õ.šöòR iàáwÑFGGsº®RUÕ!s·Ýv�ÖÖÖ|÷ðÉÉIŸvEäŸ3™ Ž;†F£�r¹Œññq¬¬¬ø3!A²·¤ûQ¯×±´´d<öØc§MÓ4—––üóÈqœ§iÚ{ ƒçyž—e9766öÖx<îéiòH$Ðu½¯£Gƒ„�ÀtÏW¦Ïó†¥{e³Y¼ímoC³ÙD¡P4KÂ1Å»T*µ¦§§/ʲ¼7‹!™Lúj`¦iú€)HØ‚¾Ö¶¶¶º–eɎ〨Ò4RÒý0 ±X ÓÓÓèt:0 Ã1 ÃòØîýYêº.J¥RÛ»‹l‘„þL AGa„F¯\B'ôM1‘HøC™¬Ì'IJEQÄž={j÷ÝwŸ233£xžçÅb1t:xž×G©"UTšÂÁ¾]¡¦�+±[.—±ºº Û¶¡ëú@^ºçyþL€$I×s÷¨çym;³c‡›;û³�€:8]×Å\.÷Û‰Dbøð<ÍfÓ—ä¤) ŽãôQ4‚h34øØØØX:sæÌ)\•Ã%«¤B'Ê~w¦Z­>¬(Ê]‚ ¸ƒŽ] ¦¼ ò†a4Ñ?´<^ÎÄÈ£Žµ ÀªT*ñL`iXìH,ËÆb1¾ÝnoÄb±²þ \.Ãó<"‹<½k×®Z–uauuõkL¿s¨my1‹¬>|är¹½‰Dâ3±XÌ!ýŽ;îÀÁƒñ…/|Á¦{öìA6›í»ž2™ n½õV´Ûmœ8qívÛ7¼ÜØØèsÞ¦»½Î¿²²òĉ'fÉq¥A¥çy^½^µíüèèè/t:Ä•J%\wÝuˆÇãˆÅb°,kÛÚ¥MýèµÌv–——û†ÌYšV¡PÀW¾òÌÏÏҸȚ¥Ž/€ËårñL&3£išCŠ ‰D‘H¦iöÂé™Ã0°µµÕ8uêÔ‰ü‹­­-7™LBQˆ¢èÿO·ÛÅØØ ÃÀ®]»|O�V«U^[[Û¿ Ü5ÙWÛ¶¹n·ûƒÞz²ô\UØý#Œ0Âã•@h7^:Q ÕA–6AnЮë"—ËáoþæoôÍÍÍ3�NÇ>räÈM„ž5::ê•Ò34‚$´2 IDh6I� …–——!Ëò6IšÉ��©r;º®´7šwç¾f³iÕjµó½Ä+B%�n@µÑ ¨fÓ —Ífõl6ûG4íŠM X,B€ç8NŸÁbPÕšH¯¶Ûm2Dî>úè£+èW£¢sèAUºC#V«Õ'TU‹D"7sçÑç@Ÿ÷m’V­VWDZÐ/[ÄG9º^Àóx‹‹‹—÷îÝ;cÛ¶w-?MÓ¢º®£Ñh4’ÉäÏóX[[ƒªªþZL$๮ËÙ¶}0�ÞÝl6ï[__�Jh ¨ã(@t­ý䨵’ÉdŽD£QY€‰Dþ­¦i.IhUUÅë^÷:üíßþ­ŸÀïÞ½Ùlš¦!�BQ躎cÇŽÁu]œ8q†aø×ˆã8èv»¨T*I’Éy4 îÕj…xà!\` ^yžÏ$“I�¬iI’ün}²*uìïè䞈Gõ)úó†68$RÂ/‚#ðï½×ä çŽŽŽ~<�N;ÄGˆîÀ’í¦;*4}¬çD^?þüF¥Ré‚€™™$“I�×#×5ñ#‘$É�n·‹b±X’$ÉäÿA]ã;uZôÆ0Â#Œ0ÂøŸ@ˆÓ6}SG"‘ðGi0@ª—£££$éó8Ž;úüóÏ7Ûíö3SSS7išÖ§hC»#³U~š2eÛ6Úí¶oúEWI åjsss›±\,ç?ýiÜsÏ=xöÙgûf)HRšN§ýä ™LŽZ–õ«©T ¹\.o†·µµõ'ŽãØ–eYŽã˜ é«:J’$*Šâu»Ýß�ÇãªeY|·Ûý/ÙlöÿH$ I(YðA’›V«…b±xrffæ–L&ãK èÓ÷ÍfÝn½í[ÃUºFý~ÄÍ�®bûó)÷ ‚°˜H$ÞC’J£§)r”_ƒW.—/2àƒ­Èþ´h!}~ —/_¾§Ñhü;¢‹¢ˆX,æÅãñ[Ö××O …éD"Á'‰@CKÊÏEñm‘H$¾²²òÏóè®……O5ã^X¢‹ÅÄt:ý'ªªæDQŒPçØW…“eŸùÌgpÏ=÷`mm ®ëbïÞ½}àƒÐ�n¹å‚àw>Hw°Ñh`}}>øà¥H$²‰D\žç]Ïó˲ÜF£a­­­ULõ@ÒéôqY–#¤ˆÀó<4MÂFè^’¤>ÃKzÖ‹V®+•J0 ¹\W®\A,óÅAè'ÃçäÿMÓ„¢(¤£ÂçóùGhÐ:==ýºññq‰¥€ÒÎì¶mC–e‹Å¾aðv»ímmmµŸ|òɶ¶¶LQ¹A®ó,=•¼®aܳÏ>{îÀ�oa׫Lfš¦×ét\æúbEBðFa„Æ«€4›ÍH2™´%Ir‰„ïA«ÖФÓé`tt¢(ö—ñ<_]]=šL&kÙl6äNKk*qú&ïeš&¿¿Ýn£Õj¡\.cqqkkk„Z³MK}}Ýßæ¾,�ãP«Õ�ÉdØ¡j¯·_#š¦!�Nÿ¥iš0MsÞqœÓµZ årù^ôÒÙCCCoWUõ_ȲœEÑ!ÛnÛöïpƒÀSYõ677¸±±±^.—ÝC‡Md2™=š¦‘`?A!Ç"•JA×uLLL Ñh�ãn3Ulv„•pu¸:¿ººZÍårJ,;,IÒu²,»äœø¨åj7�ËårÇ666ù'� Äó<·\.óÝn×%�¸�ü@Ž=šÚµk×;K¥’KNVa�TÖŸ†7�ŒŒ˜ù|þ>êø—tú%ƒ$v³Ùì/%‰wÅãq›xµÐ¼Óé€çy¼ï}ïÃÙ³gñÔSOÁ4MÌÌÌ`hhˆÈWC–ehš†×¿þõˆD"8qâ�FŸ ÃÆÆ÷ì³Ï^ºtéÒSI,›ØÒ„V4£ ¢(ŠE'ÐäÚÛ·oÖÖÖúÖ8¡X‘ëœ µÉŸ#ócÝn7°H@9gäœW*‚€f³Y*‹5rì#‘&&&ޤR)Ž�?£;¬¤³X«ÕxÃ0Hq`assóò¹sçVpu&†'Ÿ3× ò9Y«Õò\UU=vÞŠ0½ù‘Í………­kt=¹�0Â#Œ0^=¤Z­þšªªG¢Ñè=Ïã;�ÎŽCà###¾ù �ä÷Y–“4ð iPäw©T 333h4¸téZ­Að+ÙèÔëu”Ëe¬¬¬ P(ø•LŽã|PD¼Kþê¯þjÛ¬Šçyh·Ûøîw¿‹ï|ç;¾\o©Tòig”«±Ó«^NÛ¶=�H$0::úvÃ0Ó4ÿ½eYPåçc±Øë{I¬Ã Ó»¶m£Z­ú®ÊìP«aX^^nW*•+¼ÍÍÍ…R©t)•J�˜œœœ{]<÷;·ß~»¿dȵÓé �*£££Óù|þ¶«xÑ€l°ßØØø‚ <«ªêÐøøøE‰°æƒ¤3‹Å¢*F%Ý?M>z ŽãxÇý×n·û‹¨Ò~ ¬2ÒÐÐ4Ms3™ J¥’ïMÁR‘\Y–ßšËånµ,«$Šâá8ÎOè=Ïs=Ïs ˜u]×# v·Û-2™Ì/¤R©;ø`U˜Èõeš&î¹ç(Š‚f³‰#GŽô�EQ�ÇqüøqÄãñ>ðA:…BÏ=÷ÜÒ�~ô£§vèl°RÓARÊX*“Èqœä"vïÞ�H$‚|>ﻊÓôCº»DºÕjÕjµ�Ú©i�Æ6e8žçÑh4|¡ ºËÅó<ŠÅ"ªÕêŠiš~·RÓ´d³Ùœ¦iþ¼íBNÓ¤�êÔ©û¶¶¶ºŽãØõz½ãº.íä�”Ø*€Œ$Iza:  ŽûNưûFa„Æ«€Ø¶Ý\YY9ÓétþV×õ㪪^/Š¢K߬I¥pxxد@Ò•P:‰£¬ ³H$‚ññqLOOÃq”Ëe"A˜à�އªªÛ(\Du,Ë ”ûŒD"øô§?�÷¿ÿýØ¿?¦§§¡ª*ž|òI|ík_ë“Õd} ÇQzfoÒ3¿óHE3ˆJF¨c•JÅï¸�„¤Ýn£P(4jµÚ?R Ÿå8ŽS*•òÈ#O£ßG‚5‰t˜¯AÔ´¼ÐKª]ØÓÇŒøpœ?###ˆÇã>¥�|†�9�t:M¶›ë]UÓ4g-ËòšÍ¦àu=<×uÑl6}ïZ2œÌh4ê<ýôÓç©õ2räÈ‘ ¹†‚ä®é�üb±¸¾ººÚ2 £‹~À @èãÑ£‘šW®\)꺮²³'亢»ËÝn/|„Fa„Æ+€�d¤X,>W,DÇÆÆÞ"Ëò.Žã8Û¶¹V«ÕI§Ó ˲n2MÓ#EþM•ø\q¥ÙÄ­ÑhøôªV«ÕwSº¹“„�V'#t¶ªHº6Žã Z­âK_ú’Ÿ¸È²ŒÛn» _üâaÛ6Nœ8˲pêÔ),//o“åt]×%Zýdx5ÈO€$–e¡P(@×u?Ñ) �µµµ`’’z«««ÍV«e[–%’í¦“U (Š‚h4ª£žõ«`�’¹*©^µZÍ' ȲtèпÍårSŽãÀ0 ¨ª žç}…0’h*ŠÒ7“@SÉóiº¡ £ª*kÖèÒëyÐ÷½õz¬—p»ì{)�‘�î×¾öµF"‘ðç‚TUűcÇ ë:Nž<‰r¹Ü7óQ,¹ÙÙÙ¥|�€Ú¼ŽVEcAÆNjf}ç²ÙlæÓé´ë8Ïv U’¬•ññqÒuòA­U¯×Q«Õø………(—Ë]f»œZ­væÀ�?ŸH$²ªªz[[[>˜K�eY8xðàkfggŸ€½{÷N�ŒŒHäýiÐýð–——W{àƒ~t¨kÓåy>‚d—éÏ.Û¶Q¯×Ý­­­ÆØØ˜Ìé9ÓW«Õ-tÉ€‡ $Œ0Â#ŒW±Ðïgá­¯¯?„«ÎÐ"akkK°m»9<<|[4}áŸBÓ£‚mHÅo}}µZ�HUöU±Ùj2ÑØ$ßKøã¬ü'Q�":¡·m÷ß?xàÄãq=zš¦áw~çw‹ÅpòäI|ûÛ߆aþö‘�ÄÒ@…çy[HB[( ( ŠÅb{}}�t>L*9$ ˜Ûžiš`gÈ1&Y–‹ÅŽð<ÿ?(ùÑAÝ:qÐ?œî—r¹üý‘‘‘·E£Qž¦"Q®áž®ë·—ËåçÑ/'Ëÿ”Öæ¶}:räÈÔäää41ã�NÇ—„Ve@eÏ97W®\�,˸馛péÒ%”J%ÿh`¦¯õ3Çq(—ˈF£}êo¬+m>yÓM7axxÉdÒ§1E£QÜzë­H§Ó8uê …BŸ‚T±XÄ… æî¿ÿþ§zëªÍ€“e™ßi�Hð>õÔSOSƒ ùª|„Fa„ñª d�™£n‚Nï,áªz’°´´ô¤çy|&“¹MÓ4—$kt2Njz”¥>0BWMÓÜFy ’û%³´©Ýáèt:Ð4m Ü§aíF£!Äãq¥—�¸t%ºV«á±ÇÇqøû¿ÿ{D"Ü~ûíøØÇ>æ¿· øÓ?ýS˜¦¹­ŠÍú¨šˆ(а, ù|¾º¾¾þ çy„ÖAW©.n}}ýɽ{÷¾Ùq/h¸š X‹¢ˆd2 Ax×u¹݈ pÀ@W»aƳš¦ÝLºY4鹆GDQ±,«Ó[<FX‰Ú— ˆp\Y–ÿ8•JqăâyÌ�µ@;¥Óœl6 ×uñþ÷¿÷Þ{/xà�¾Š6Ýy¢“lòA…2LMƒUrþèál¢(722âƒEQ ( Ž;†‘‘<ùä“Èçó¾*\OAŠ››››ÿîw¿ûx/QnSëÊ`iZÝŠ•—à˜¿¡Õjù,�ŒîLÐÅ0ÐÀ�çyò¹Cw,®mÛ^¡P¨ …Ï'‰L§ÓùÕh4ê’"2äó'‹)‘HSSS?;::ê «êF«ÊÕëunvvöô;�Óà�3ð<ï @goW.—lÛ¶ßl†W«Õ`š&DQÄøøxßq3MÔl•pN‚Š a„Fa„ñª `‹"®*E–——ít:ÖøøøkãñxœJ(ü$Ë0 ôf'|µ,¶[@ß„éí–Lxîäuhƒ<2¨N¨¬t­iš^³Ùl¯¯¯ßç8ާ(Š'˲œÍf6�º¢(FEQäY¥.xì±ÇpòäIH’„L&ƒt: Ã0êAð©^4¥†”Õ9Žã=ÏÛɳÃÀ{ž÷p»Ýþ™”€�¾ŽN^%IB<‡®ëÑb±ØD7âZ —9ß¾!£mÛ�Z–õZY–½4¬H6›ÛØØXen8üü$@„Íî¹X,¦år97‹ xô &}™ç îíšMd˲�H$°¶¶†Ï~ö³¨ÕjÛ:N4॓gúûA „„gã9ŽÃ¾}ûðîw¿ŸûÜç ë:FGGûÀ‡ªª8~ü8víÚ…gŸ}ËËË~ç£Ñh T*a~~~ñÞ{ï}’ó•Я|*Ñ•u7 ÉõwNUÕèØØ2™ DQ$ƒö}ÔCŽãü¢{,é ® @hÚXýþ5‘f³©4›MKÓ4A–eÿýè×’eÙ½îºëÞ;44$°³ä¹t7Õ0 ‹ÅÍóçÏW©k²p]ºxŽã„ àÔ i4—ljïÛ·ïm™LÆãyÞ—Jæ8•J–e!™LúÎì ø�Ga„Fÿ¿ @æ æóùGªÕêøMÓFé�SŽãÐl6¡iÚ6þ5›PÓT+*h—d¢„E'”¢W©Tž“$)išæ$é<8ŽƒN§³jÆ\¹\¾Lö©Óéx�NÇ­Õj™Lf2‹)²,+Š¢¼I–eWE�®ZªÆåË—aš¦O1#�={öàãÿ8î¾ûn‹E°JA½‰ïþÙTBH'\€õzÝ"î̘±Cý”Ĭ»ÿþ;ŠÅâÿÓ;7<¸@€‹« »÷<¾R©¬ëº^pg(ˆ†ÕKòx6`}ð×xÏ78üÌÌÌ/ðAÏUÐ3ì°1-ñJÀ1Ò#]¢ÆÔKýÙ‘A`#|uKHrê8J¥b±˜ïž](°°°Y–1:: ]×ýÁmY–qüøqLNNâôéÓ˜ŸŸïóÎØÚÚÂüüüÅoûÛDíŠîzÐà£o�z@‚{MEAÄ\.÷ûš¦Iä˜MLLà7ó7ñÛ¿ýÛ¾‚ÇqÄ£¦�JÉ3 ŒÑ¬.³Íd}F\×5ÛíöEÓ4�ô�u‰DÄááaıÊW¤pAºçÎ�;çyžÉºkäwŠœÞ€Ð‹‘á]]]�Ü¿ÿ¤®ëk€HwàºÝ.._¾Œv»�€ö 7àœ„ $Œ0Â#ŒW q©¤”žI,éŸER§Ó±NŸ>ý¥n¸á#žç�ÐÒ›=JŸ†BnÞô ¶Ÿ S’h×ïz½Žb±UUû\Ñ›Íf}aaaÝó¼sTÍrÙYu¨>Çî­­­ [[[dßž�ÇãÃCCC·öª§ã¢(þ¶G'¤tå­�ªá$÷E¿i P�–––JÇŽ{Ì4Í[è[U'Æu©TÊøI ]Ù¦Íæ¶aÕN§ÓŠÇãCAÝ—žªÔðÆÆFÄu]Ò‹�—+iò_“vâä/‰Dü®²´Ÿ XÈÌÈÄÄ$Iò«úÄð±R©ø‚tØXÌ ª ®Ûí6’É$†‡‡û®…v»�o|㘞ž†®ë}´«£G�b×®]8wîæææük¢ç‡Ã-...}ë[ßzšíàüøx1À�™Éf³cªªºäú~ó›ßŒ+W® �Â4M4 �J?=—Åv 资þ!x˜›Ô6FØ«««_Îd2ÿ!�zA³Qüù™ å+ÚÇÈ0 ¬®®Öfgg×±]¢o`?›ÍNêºþUUÿúg§ú/*j{Òé´—N§·!zÅó<_™­ÕjyÇ�¿ë¹çžûV«Õº…2"a„Fa¼jiÿ“O%¥4¿ŸÃÕ¡uß[`nn§§?ªëz†N �†_ñ%à#¨*I›‚uâ|^*• Ë2MÇò*•J;ŸÏ?èy^ÛÕ}ØÛAÆ^@?e)Òl6ÛÍfs€�L&‡dYލª:�Çß$Šbß,y¬®®â“Ÿüd_¥�þ{ï÷‹Žãt(Â>h¿§R©¸¹\.p�¡C!�f‡‡‡³…BÁ@G‚í„x@ˆÇ§jµúwÉdònY–Ý ƒ?Y–]Žã~Àÿ j>ýs <¶Óz~Üàãc j IDATð¢(rô09;‡Ó”Ç¡C‡055…¥¥%\¼x±�†ÅRèDQD*•B4õi¤ GÀ.Iþ 0)•J}s ‰DÍf³O�É4MLLL@×uÐUp¶ßjµ ˲>:„àÌ™3˜››ë8/—˸téÒÜ7¿ùͧÐ?4M|X€<�ÒÇ쵑N§5�»dr¹î¼óN|êSŸò;J®ëzårÙ³,‹çØÎSÀv'''ß¼¶¶öß©õG{—�öT£Ñp‰OS¼È¹w]™LÆÞ§× MËì™b~~þ,ó~4øp8ŽsUUýýÑÑÑñd2©Ê²ìÑ®ìÛ(EùK§Ó 3JtQ†žM"Ÿy”/LºÑh¤{”0ž¹ž~Z�Å0Â#Œ0ÂøŸ @€þyòÕÅv:kfæ¶Ûm÷üùó~àÀ��¤R©qUUA¼$ˆK²ã8þ ™®Lè£_‘ 41*+‹ˆÇã¾{r©Tz¬T*­0USý^AÄE°Ì(¹ÙÓÉ{¤V«µ{ÕýuÏ:tèã’$Ù´B=ŒLÓ}XZY·ÛeePíÐäW„×ÖÖÎMOOßÊòéÙ9�žB$›ÍÊ…BA@—Š>g�xrLUœ�Í‘‘AUU—¦ÕÑæ~SSSÉÅÅEº‚ïeªØúûÁóŒ‹/b~~Þ¯V«…J¥‚¹¹9çßøÆ“¸*d0ˆvE�³f‘ÞK9濞L&GEñÈ>|ô£Å—¿üe–žœmá¹çž{,‹œ™™9´“YKš¦iØ> ïRŸ1d9Û¶¿Ôív�È#Óׄã8×ì~ÚæÊÊʹ .,¡ßˆ‘>fH¥RŸšœœÜ«ë:$IÂââbßðø¶‹‰ÚGâÓCw?ØÏ<Ú×§÷;o÷îÝï6 ãëKKKw($¼×Ta„Faü³ `€°Ýß�Ç`³,w~~þÿœœœüØÈȈÞSK‚(Š(—Ëèt:ÐuÝ×åg�Öi§ðV«…z½Ž]»v¡Ûí¢T*¡Ùl¶óùü[­Vý&kl7Zc >Øý€�X‹ívûY–océcA�šîÑív½ÍÍÍ'àf1àƒÞ&çüùóOÜtÓM¶m›cÑIGˆªªˆ¾ ‰®5BŸsÿx9ŽcÙ¶ýßlÛ~­†À§:©ª*p'÷ºPêAö‹}ß—’0qA 1KIc?â “Ïç�DZ¸¸Û¶ŸGS2Ø$ÿ¤ÊÆvJNœ8�[n¹‹‹‹˜ŸŸÇÞ½{‘J¥ü*x�:y˲ Ë2fggñž÷¼/^ÄóÏ?ß>ªÕ*–––Ü“'OÅ&V­éål÷ƒÓu]Ïd2oŠF£Iê8žçqæÌ?©o4ÜùóçOðZ­V—¦¼í4"ËrÐçŽÇ\¤"lmmu“ɤ‹Åx²=žça}}{öìñ;M4å‰î~t»]T«Uû™gž¹€þŽ }=zét:=66vƒ®ëŽªªXYYÁ®]»ú|b?A€ëº¸téb±<ÏÑ#G|àNVÆ;‘Hxû–––.apg1a„Fa¼jÈ ›¬»Tu{ÛÃq,--ý'Ïóö ÿj4u ŸÐHEA<‡$I}ߤñk×.Œ��AT*Äãq\¼xqquuõi\•Ël£_³'4Â&^<Bhu'€X.—O+Šr‹ ’@’dƒz踗@rµZí,•îäÃ@o§R©pãããÛ…è®7ˆîÅãñ;ÐUS¶zºðàªÐN§Óé²0²�=ð“Íf³cÅbÑÀU¯‘Näà“ø0Ms›i *虤 ÃÌ�þ/”˜¦ MÓàyžŸ³„~"ÕLdž<Ïóüë¡Z­bqq‘;yòä÷WWWKè7¤éWæøIÀ@ù¨®ë©äÇb1|èC¾ðt»]ŸÒ´±±qѲ,2´}Öqœëlj°tE„ºÜ~šê°[­Öó†a,Ë%ç Óé ™L"‘Hø`�•Ý%@©Õjammm>ŸÏw˜B9f0¡ëúo'“IG–e¬¯¯cddÄ7 ¼ˆ¨}ö¥º766O<ñR©†‡‡155µM™�PSeYF<ŸN¥RÑJ¥Òa@ˆƒ�†Fa„Æ« €°IiPگРä9ËËË žç}uddä]×õ‡~�<òù>>þŸ'&&b###6ížH$�J¥0??¿­{Ы ÷QpH"J’QÃ0P¯×�ÇQ«Õ|€@{а2¿ìÚ¤Gò= HÈ\ëSÒ›{ð;[ä"‘ˆ/ËJüIzÏ¥Aw—yü$à#°ã”H$F5M{1M€çyxúé§}z[³ÙtΞ={¿çy]ôûhp�Ngø`éJ=Ë[Þò�ùùù¯nlltÇ©õK>g¤l6ûù]»v%²Ù¬M›5²²ÆŽãÀ0 ”ËeÏäqÃ0�ËåúæwèuBhiô ;-ÃM>»¢Ñ¨ßñ<²,ceee dw¸±Òç!ø#Œ0ÂãU @¸s0UóA „Z¦iÚ¶msÞ Ñw“5M—/_F"‘€iš)F”Ô,ÆÇÇ…ååeV®“þ>ˆz…kì»ßl‚Nª³6‚iEN»ÝæhšK‘Ò4-ò@=îV*o||¼�†Å‚œ^§ªªN(Š¢t:W¹ã"‚»BîÛàðR©ÔþD"ñ[ÑhÔ¡iDtÒMKö~Ç9Žó+¥Ri–]\•pêþøç�ã8A×uåðáß;tè�FÌåø sA€¢(8}út Ç Ý!”¢*U«Õ°¾¾Î% ´Z-D£Q�T¹é9‚A „í’@H"¸@Ÿ§h4Šn¸<Ïãüùó¨×ëÛ¨Xt",I1ØäWñãЮuœÈd2¿«ë:O«I}øÃÆW¾òßÔ±Ýns›››§=ϳèíã8ÎÞ·o߇u]u@èõ+I·{÷n1™L~àÊ•+žy景�©õÉOMM½cjj*544„D"ѧtÅv¿H×AQ\ºt ¶mcll ¥R ívétºXu¼È¶ªª Ös†ý>�"�Ã0 ߀‘¾&E²R© “ÉÀu]är9´Ûí�*k�N‡3M3t„¼a„Fa¼ªBˆF£)ë…éÊ ã«k%/�ß7�b&“9.ŠbœMÖhµ(MÓúŒÃØä–ð¨[­V²P(,˜¦YÇvÿ� 9Û�@Ç‹MÎѸ|�‰DÎišv»(н�€ÏAçÚí¶bšæÂÉ#½}þ0üÖÖÖô¡C‡ö�[ÖG‚á¸Ë™Læ&]׎ãÚ�F£z @6hƇç8.’ÍfïÔ4m?Q@¢i'ƒŒÉ¾‹¢˜i4óöAÿ¾úØîÝ»õ™™™¿<|øpjdd„vEªÞ‰Dccc¨V«~e¹P(ôzœ¦\õÜ͹••ó‰'ž¸÷©§ž:ýÌ3ÏœY\\\×µ›Íf£^¯ó†aÈÝn—ëv»œiš0M³Ï „€'‰6ý€N§ãƒ¤ÇÇÇ133]×Ñn·Q©T“P²Í…B!wåÊ•³®ëÒŠoACç/vàœ<ÂøøøëGFF~–Ì=H’„÷¾÷½X__Ç<àS¯J¥’yîܹ'=Ï3pµóÁïÛ·ï×®»îºT6›Äãñm¾?¤SADz€Â‹F£™h4:¼¹¹9çyž º®سgÏGGG=²È<†$I>5Š$ú,ht]ëëëh4þsHGcÈl6›ÄXÑŸO£ß‡îdÝ|ó͸뮻à8òù|_!…¦ýµÛm¿'&&‰DúÎ9Y§ívÅbñùÙÙÙEôw¼vú¼#Œ0Â#ŒWdD²Ù쟗J¥†Aÿ>HIŠ­¾Ñ�Z2ÓàÖjµ/I’ôYAš*Áqœ/áIÌÌÈ ™®0Ó7{MÓ�Íf…F£±“1×�:ý»_è%|}IµmÛmÓ4=EQ|pÀvpt]ç�†€íîÆAÇþWI’¾Öjµ~Ʋ,‡í±nÞÄc%“ÉÜœÉdŽò<_Z__ÿ3÷…ŒxPeÜ HP¹H$‰¢øQrèÊ/ÙGÖéš$yétú€¦iÿ{·Ûu ÃÈ×jµ/°\×µ-˲<ϳƒãÈȈ´ÿþ?Ý»woœ®xÓÀ¹\¥R ÕjÕ—¼Æòò2ˆ&¡Ñ�¤�$�õzÝ]^^~jvvv½Z­6p-‹�=üðÃ.$“Éh.—Sãñ8‹Å&2™Ìk‰b±'Ë2OÏ ê’$l{ž‡f³éÓ �ÆÎ ñj×�în ’p~)t+|ÐàOJ&“ÿ†.Äb1=zŸÿüç}[«Õâ–——¿çºnTgfÏž=ÓSSS‰L&ãw6wRÁ’e²,û’µ<ÏÃqœ£kkk§êõú;c±˜#ËòP³Ùt¯\¹Y–1::Šø@‚õä¡?CèAðz½I’ÎôÐÛµk×.‹ÅÀífÃ4Í>z¾'ôk‘×£»¾G�…,Ëþó P&€³Õjy³³³gÜÕ~¼Ùž0Â#Œ0Âøç @Òét†çù¿,—Ëÿ®^¯w¨ä”ö¨x) Äàlnn®)вÀóün’ ‚Û¶ý$¡Ùl"�Nƒ�s “xI’‹Åz– 7â _·¾¾þÌ‹Ê/xøëA„Édò (Š?£ëz†vïþøÇ?Ž . Z­úÝ�r¹¼Z,ë½ãFºyÓCCC¿�J¥Üx<Žh4Šl6ëÏä°^2@П=Çr禛nú�eY.;˜M€Ý™3g044„C‡ °rÌŽã �N£\.CUÕm�|ÇùóBtw‹�g±mçÏŸÇââ"ºÝ®ÿ\òwº³¥ë:víÚŽã|ÐBƒãžG—Ïç …BƒY—¶{…Fa„Æ+€ôfFÛíöŸ×ëõ_ÇUå'—©ú¿˜j+©Ô ¶m›ËËËŸŸššú}×u³¤²JÔa8ŽC¡PÀÈÈH_„æf“¤NQŒ��¹³³³d¶!H¢òå6êºáívÛ£‡v餼7£‘“$Ij·Û´É!»Ý}ÃáÃÃÑ믿þg%IrÉœ ëâŸÀHñx–eõ ÍòÕuÙl›››h4}´ªZ­†|>�Z­Ó4Ñétüd¹^¯w×ÖÖ¾gš¦S«Õ ô;_Qá@ƒKêEêõzçÑG}/PO&“‚$Iüððð›r¹Ü°¦i1MÓ¸D"MÓ| (Èy¤P:É¥ýIºÝ.LÓôt]?¼¾¾þ,¶›eÒË<˃¹6øX,–ŒÇã¯�F£ÿ›ªªb$yžG4õ©F¯yÍk`Y¾öµ¯ùÛÞl6½•••‹ ø0÷ìÙs4“ɸdN‡ž§a�¬ÿABͽ�õ�Ç‘J¥\¢¸Fƒ\zÍ»®‹ÅÅEМ^o¬³eYˆF£¨Õjþq§·�äo„EƒöÃ0ü·a¨V«X[[ÃÒÒév ™L¶mÔëuãüùóßs‡$rê+íŸAÓ°\&igguh A¿w…¸±±ñüž={nÑ4-NÖ“„íÐCÈÔ,òùø =<ªÕ*®\¹‚�� ðéNåržçÙsss9ŽC’d’Ô ¡»Na½Xê“@w#êõz'ŸÏŸÑ4íV:±§�M9"`Œž J]…B†a •JùÏug¢ÛíþR</®¯¯ÿgÓ4=j»vRÃâð²,+ñxüOu]Y)[²^ɶ>ðÀ¸ï¾ûÑh†aàÂ… –e™L÷ÃRUÕ&•ôœë��FqÝu×Áó<,--ùÊPD¼€Ìƒ�ë¼ç’Þ·]l¬®®â†nðéPÏ<óL _ ¡Öj5ض Ã0ÚÕjõ1Çq\Ó4�r¹¼E;EQÄÝ»wïM§Ó.‘Ú%"=P8ÐÅž–{.•J�ëºh·ÛÜìì죖e™žçÙ¦i:+++Eêó‘ mf�:! #Œ0ÂãU@2™ xžÇÊÊ êõ:xž—Ça;ô �g’VÁóÄD�´æ ð‰„ϯ×ëh·Û;º¢“9]וýû÷߸ººú\o`^b“x4¸/#²Ó4‹d#@I’Ä뺮æóyÒ½!�¾êûž={Ò’$ý IìXfZ®˜uÿ¦+ëD=LQhšæÎÌÌ|ĶíÇÏ�;wÀs½§òT‚Þþýû%�ß�F=šFDè^AF„´$-íúÌ«“ß7 ìß¿H¥R>ø ÛKÌâòù<:�Ž?ÛÑjµP­VqñâEÔj5?¹%I¬ (—Ë^»Ý&ó4ø I �k$î`;Bº""ñôéÓÿ�H$TI’núiº IDATÁ£SÚl3¨bÞétÐh4P*•ü�iº[Ò£(q’$ K’ôïòùüŸÕëõ–X“eù-ñxœ‹D"b"‘ÐTUuYYYöœ’ãjš&Êå2jµškšæ®v5}#Оe a#}ÞGFFpóÍ7Ãó<´Z-¬¬¬ôu‡hpFS•Ø® HÒé4Ξ=‹t:�¥¥¥mž#t·M’$ £P(T/^¼ø°mÛ¬‰))&h|÷èè¨KË“ëottÕj†aôu@è9Ÿv»�r¹Œt: Žã ©^¾|yË0 zý€Awê: P$1‘0Â#Œ0^ÙDÓ4ºZï9Ž£/,,8T'�Uc¹͉$çÄ|Îd*—e³ÙÛ\וIòÜjµ ëº_ag+™D +�{ûöí;–ËånÜÜÜôÖ××ÿk¹\~~À Ùe¾¾œÊX}@ëòåËu]_u]w<(qêQ\Þ`©—lHTòã¿n"‘âñxßKi¡�˜)Å$?Ù¢)/„ÖòÆ7¾1Þn·ßzøða§V«Y•Jå�N§ótµZµ._¾¼%wÝu×ýkMÓnë);õUñÉ 6gM#¢e{Y÷N§ƒ©©)Œ��C×õ>�UU144ØÜÜD§Óñ%t[­*• Ö××Ñn·ûT¦èª»$IS¥g«Êƒ<4‚\âY•2>à+鄈äýèGßäy^ò<煮ÓÊRlÅœ œ·Z-lmmass³�EžK:Z½n…jÛöoJ’ô9Çqþ�,ËÉ^‚ì1�žã8…çy´Ûm�™�A³ô9¥iN±XŒÏår¹ÅÅÅ5\íj:Ïó\VŽ9(Z­–/=Ün·ýkc¸`阬 hš†gŸ}‚ øãA]9zØ{kkkŶí.•øÓƒÞÞÌÌÌÔÄÄ„B<@hcJòÞªªªŸ¿t'«^¯#“ÉøªW†a`}}}µ>ºv´g¿7™ÏÖ‹(Œ0Â#Œ0^Ù„(Rõ’WÅß0Msveeåëv§üAÊ;ó\‹zžk�F}°q-I¦UUE<G2™u]G&“ùàåË—O///5 jm€‘—«â1ûiu»]—ì“ ØÚÚÇq¨Õjà8ñxœ�D"¿Ôét¶¶¶¾†«\~ÿø ‚a•ƒØ‡(ŠÈd28tèÖÖÖpùòåÀdœ.ccc$ÝnWh·Û?oÆ¿l4¸ñÆ/•JR«Õº1�º¬Ç›ÔñÞ»Ý.ÞøÆ7â£ý(žþy|æ3ŸÊïv»Ðu‘HÓÓÓÛ>EÁÈÈÇA©T"*PD¢årkkkøƒ?øÜÿý¾WPµ�ªÐ³ƒçä±øê‚p˜æ@ˆÿz–e¹?øÁþï׿þõï»…Ðxh³MºbÞív}ó;ZD €ð<ï8' 1™LþÏó.Ûqb»$9šÏ e–iðAƒ¤Þ Ã$ÏóO»®ëP §Ýn»¦ir¬ó9û}¥RÁ÷¿ÿ}ŒÐò¶ôWBã£åjYðAº4‘HÄW—¢A; nš&ªÕ*W*•NÏÍÍ=G��½DQ|ÝØØØÛÓé´GÓÔDQôgWÈkö„ü÷%Cçñxܧ]õžÇ …³.\xŽÄA³¬I©�p=Œ0Â#ŒW3‘e¹/a!"Âõ’$¥—––þÆu]ÛMϼ2¨Á&u¼alÛöH’äzž‡N§ƒN§³�†ÅšúÅb1Ȳ ˲ˆêŽ'Ëò ¶m_·ººúlõ’Bø¼Ü „UÄò.]ºtùèÑ£“¼ÍÍMŸb¦ë:� )¦iVåß×jµ¿k6›gz¯'¼�—ºR�…c‡F.—ƒ®ë(•Jþ€ì G2™ô¨ÞÃ3MÓëu-^7>>Ã0ÜF£�b±ècÚ8’øЉ1M!ºÿþûqîÜ9Äb1߇EQ”ªÕê…Þ6¦iúï”ÂlYJ¥2™LŸø|ÇÁƒA�ð9Ù†NMMÙcOÍfµZ ù|Þîv�~‡Î™eY˜™™9pãÇSR©¢Ñ(XËÖ`0ˆT*…f³‰R©d�q‘ {ww+++öÌýÉ“'ûÀ(o©Ú;CBœB‡é>ö øã‰·gûiûwT*|÷»ßýëxàž{ï½÷ýétÚRUÕÞw:'�Nº®Ãçó¡^¯Û@–%z‚  ÕjAQÇlŒaßëÝà{ÚééiüÎïü.^¼ˆ/}éKC_ÇèŒúŽ[©T¦¦¦ìëˆH.?Þ5ÌŒáë�I™LÇM¤óJIâ4å”ûÁ Á©{¶¹¹yéÂ… Wѯ³h2à_K¥R¿›J¥&Ãá°Åë>èwÓï­×ëØØØ€,Ë —:'Sˆv»�|>_ÜÜÜ,ãv'Ž4I4Èv=Lrì’·ÜrË-·~8 ëÚÄ�Ç“öûý=sæÌ‡¬ó£H{u lg¬|>ŸO§Óg Ãx@’$ŒŒŒØV™ä‚Ã�ÇUUm ÀίÓJ|«ÕúùùùyÀ9î½Y°ùZ»c€�F#Édò߃ub÷�FG˜‡¨ëúGªÕêí�xãÔÔÔ»»Ý®á°Y�}ëÖ-lnnÚîINiÍôúp8l²Ai,¡ßË’N§ƒN§ƒ™™ÔëuT*|ðƒÄìì, ÃÀÒÒþþïÿÞîj°Aˆüjw§Ó»º ‘L&mq9u>Z­–-È^\\´ÉAvÿX¼®ëB½^_䀜éx%‚Þa¢tþšpw"Ã0¶xcŸÏgÿ?Ûá‹Åb¶`Ýï÷C’$4 ;ƒ‚%vì=»×¿Ùãå$ÔÞÜÜÄÙ³gñ­o}k¨ˆÛ4MÁr`Æét:¾oß¾ãÉdÒH$¶54™0??� –,•J­Ç{ì :¶Ç�Û¾}û’ñxÜ>÷t-ñŸíÈQÈçóÆõë××1èˆF]=›Íf:4‹ÅúF¯è÷³-ÍfÓ¶„‡ÃzÚ>MÓP©T¶/\¸ð C‚YDïï”Eã:^¹å–[n¹õÃO@à[ùôx<Ó�ç“W®\ù³F£!p L`žp‡•å>"Òjµšªªbdd¡PÈNÀæ; ´I Ù)UY×u$“Iã®»îzÓK/½4‡þñÓ0â5$!B4=ÐËC°ØÑ >‚/SUUýåC‡y§§§Ç‰�†MxÂ@ûÚl6íîÃ0RAŸÏUUÀ&ªœRžY2B ‘í�œ={'OžD½^G§ÓA2™�±âu~eš ¢d2‰jµŠjµjw>ØŽËÍ›7Ñl6íUhÖí‹í‚0`£\._Áí Lƒ!#Ö÷@>ð=’½€¢�F£Ójµ„n·k‘Pš7* r …P­Váõzñ±�} Àïÿþï£ÑhôÙåö½‰ n,óûý~¿=Fä”íÒh4ðw÷w6xv êëv»—4Më &•$I>räÈ¿7"‘�€Ý dzúNA„DtÉá¬T*gÏž}šîYQ]×ù|Þ1ì�' l—¢Ñh ŸÏgÏžý/ù|¾ÂÛæV’$!�Nÿ~2™ÙR.—!Š"<ˆB¡0p­3Á�(‹¬s˜æðpráÚk‘Ç-·ÜrË-·~xïiïóùúH�„¤dYþµ'Nün[ñ¶¹•a> ÍI n“�ùùù/ONN>LăϼæÐ£ëú€PVQ„B!Äb±)UU³µZme�p¾‡{ÁákK’¤OʲlñC,8¤ùp–8I’„ûï¿zbb±X Á`�FÃv€6ÎÂL'ÒAàŽh¹\¶WÙižfè‰X°3ùÃÈ mýÌööv_z¹Óyc‰SµZE Àôô4Êå2jµÚùØÞÞÆÕ«W…J¥bQÂ9×9ê;4—ŸÏçŸn·ÛM†t˜C®�×ÂMˆ¿v†é�„\.·Ýét6»Ýî(ßÙbï32YØØØ€$I8{ö,Ö××íó(Ë2êõúð 2ºGF>Ÿ¯ïÓ{›¦‰Z­Ö—ÒMÉät®[­VŸÅ¯ ¾»îºëã“““j<Ÿ„>>>Žv»�µµ5ûúåC2 Ô÷:˜ŸŸ¿¹ººZïr}ß¾}¥Ói1�Z;;;Ð4Íó£k�% L—BØÜܼ>Žt:m�0)Š‚{î¹×®]C«Õrì(ð]àó©ÚÔ)¡|r bª‰�°Ý^PìÔ!é‰líUïaÙ|ç*ŸÏÃëõ"ô�ßT*lnn /^Ì�:ujkvvvÒ²¬8�/ÑïdSáÙ}i·Ûnw?Ì!çù êœôNB­V«¶Ûí²¦i£t\‡YMÓq4 Ï>û¬MZÙàBv �žy‹ÚÞ÷ú¿p8Œf³i±ú"år¹oä‘@4]+ÍfÓXXX¸ÈK=ztâàÁƒ£ÉdÒds\èAݵd2‰ÍÍMG Nãv•JE[XX(<ÿüóçzçLO$ÇÒéô]ªªZ~¿�@lÂ*BŸ¨Ÿ´4�F£šËå¶Îž=û†�]uèccc‡2™ÌOÄb1‹Ì-Ø{~ôªX,"“ÉØdjrrÒ6M`ÉŠ(Šƒ0MÓ¼çž{~üòåË_gþ±Ú¤aBs—|¸å–[n¹õÃO@蔀;Þä0ŽeI’ôsW®\ ìììœÀí0¶®Ã‡*@ŸÀ#Š¢Ç4M)ôÙƒ²ÏôoŸÏQ¡išíÌDy4/O6½Š¢X£££?¹³³ó7Ýn×Òu�wâ´�{uEœÆÏÄP(ô3| –³Ù,jµJ¥RXœšš²Ç—øÙóÙÙY\¾|¹lóã,ì 7ë"Ä p³Ù,êõú€õ*6ü�Ž9 } ‹y2Âv­ö ·#G$Úîõõu¨ªŠ`0Ⱥ ™ßþö·¿}óæÍ €îâââ�‰‰‰…B I’˲@â~öÚ¤ÎN:�¾kqqñÛpp(û’�a�¡w?ˆº¥RÉ$›i>ã‚wz ¶Èšux¢®D¡P s`Y/q t¬:�ÎÍn·{«w½Y¦i ~¿ÿ ,ˇØND¡PAðÛR«Õ I¶··Ÿc÷w|||fß¾}J¥R}a}´ÀÚÒjšŸÏ‡���>ÒCù.ÅbѺvíÚ7æçç+ìß�‰‰‰×G£Q‹ÍâƒH$PžVé÷Q‡buuõÆÙ³g—ѯ¹h1²Ý5'''iddÄv½b3R¸Ñ>”Ëe; “É$B8FµZíÓO‘9ƒ$I‡ÃàH†1äút‰‡[n¹å–[?Z¤ÑhÜþ‚�NÂôÞ¼úO-..údYnûý~ÃëõLMÓÌz½nݼy3à úÓÔ-Öìììþ‘‘‘‡LÓüi¯×«ó™ì#àèÑ£ˆD"¸~ý:¶¶¶úÆGX«Pªßÿýñ™™™ßÍçóíz½þôéÓ§w¼ˆþÜ~îz¯•r§±+›€ˆ¢(X–e;s±ÇL–e|âŸÀÉ“'ñÄOØ ÉÓÓÓvx&Š"Âá0fff°¼¼<0ÿî4ûÎŽRù( ƒÐ4­o´„}ŸaÇ� <¤1(–èЃý½,‘äÅÁìõDÛ[,m�õÖÖVçĉÏܼy³J@Ô0 }yyù«ªª&ãñø�`0˜5 #éÞ{�‹3²,¿ÐétjÿŒ]�a¤„ âÔ766.>|ø.Ã0,¶£ÁÙ_ÛǰÝn÷i>XrÐh4°µµuvccc‘[Yçí²Ù•õuI’ wY–eI’d¾è˜nlll®¯¯o0ûdLOOÿR6›µuD@eY¶Ã&™Ñ-T*accC ÈN§c¶Ûíë…B¡}þüùK¸­“ÐEQggg?422bw%LÓÄææ&:d“zê~Ð!Ó%c5NÉâ]Æ‘#G~ctt4Iãƒl–'ôµZ �F‘HľޢÑ(>ò‘�`ww_ÿú×Ñh4l’M|Òõ`°l¹Cì’·ÜrË-·~tH±X„eYöl3€¾UrzLA@­V3fffÞA+‡ìv§ÓA*•2òù|£\.ÿa>Ÿ¯¦Ói,;�Ç?‹Å¼Á`PªT*:Û-`%=‡B!ÌÌÌÀçó¡T*!ŸÏ÷ux‚tèÐ!t»]Äb13�Nûêõú£ãããæÖÖÖÏV«Õ?ÚÜÜÔK¥RÃmY�ˆOFhìL”$IA!@IûìÙûÏ~ö³¨×ë¨ÕjÈf³öÈ?ºÄ[¯¦R)˜¦‰µµ5ñwö}YAo¡P@.—Ãöö6‰DÙagõI³ÁÔ9eEÐÿ±êÆðií¼Cc�kw®hl®R© P(àúõë­¹¹¹*³rMiÕF­V[©ÕjkSSSo IÊWa�{Ï5Ê ƒþN§ãDÿ9H/L·W½×ÖÖN4›Í� ¢³!“$âæG¬ØùJ¥¢mll, _[à¤)è»vççç¿9==-F£ÑiEQMÓúFäØm!Q<í�(ŠÂC=ô³û÷ï7ÈN™í~H’d[ ÓvÖj5,//ß|æ™gnˆ¢¨[–et»]½Z­¶¹{° ÀM§ÓIUUMVSDä†íü±Ç†¹ˆ€Ð1јkI﨩ñññb±œùÑ«jµŠd29ð¾ìx%oÀþmr»n¹å–[n¹å@@VVVþÓ4Ͳ,Ó²,ÛJ“%!ô�ÚétP,!Š"ÆÆÆú,WÙ•øh4ê‰Åbáµµµÿ˜ÍfÏD£Ñ}ªªÆC¡�)Ë2dYF$±Gªøwzn4XYYA,Ãööö€Ý,û3ì <ôÓ‘H$ÄL&ªT*ÿ~bb¢[©T.¼ð �Ûù ¬ÿ�\“Ð#÷MLL¼# ½Îï÷›¬u§¦iPº®c~~Š¢`rr‰DÂvûâí>�DÛápÑh›››ˆD"6yà_OS�F;;;(‹v7¦X,bgg¢(Ú£&###¶xœÕà8¥e³Ú ö™ÜšØ×¡|�z½Þ7zÆ�‚ÑÏ+Šb1+×lJ5�#qww÷|$¹GQ‘4özc1V4ýÉb±ø¿£?­\øg""{’�Z­Ö§¯q¢“ý.Ÿï‰¡Û«««ÿˆþm'Â[c –ey–––¾‡cÉdrV’¤w†a±ÛÂÓ˜ßïWZ­Vkrrò�ÓÓÓ‰„E×0«¿bGõÈwkkË:wîÜR±XlÀY€MD�ÅbûÇÆÆ~.‰˜tMz<üú¯ÿ:>þñ�¸Ê±6æo�mõ�~‹[[ –N§oddD¸Sà`»ÝF¡P°SÙÙ¿5•J_üâA!ªN™4=�Ë0M™KFÜrË-·ÜúÑ& �?þø©Ÿø‰Ÿ(›¦ù;–eyYpOúä‡åÊD"$“É>ðLÌœÛí6VWW‘J¥ôP(t_o¥Ñ¤ÕR7¡Õ}6í˜V·Z-\ºtÉõ4c;�ѱ±1{$ƒ„°4‹®ª*¢Ñ¨™J¥<õzýÁ‰‰‰s¹œ¡iÚç®\¹¢7�9ôçGðâuvÖ_Ìd2‡ƒÁà§Âá°)˲ɂvÚ6rëRàW�Yò6̲¶ÕjJ¥J¥B¡B¡�­ a».Õj•JÅ~Oö¼¸j6›èt:X^^¶ b±B¡�‡iEØbÉÛá`ÉH¡Pè똰v²³³³8|ø0Z­Nœ8akø«}`@#Åuéi4 ÍfSè |íÑ.Zµ§{I’ÂÝn·ÅE'"âdÉüZ’~䯬T*›�NgôNV¼²,Û×:�?†W«ÕüâââÓ†aAë8‘a×.oµZÕjµZ}bbâõ†a„Y] K†|>_ H¡PH½çž{¦S©”ÅŽ-±lvL£ÑÀîîn÷…^øæÒÒRÃíg † b:�þ…x¹ðÈ#�|îÀ�¿;22b¯ˆív»¸xñ"‰Dߨo5kVWWQ¯×1>>ÞÚ’²Íf³oU˜>¼EQ´W‰IˆËϱ�X,†_ø…_@>ŸÇùóçQ¯×í, ""~¿ßŽÆãqŒŽŽzjµÚ¿N¥RÆîînnaaá�jµšÞl6;Ì*rŸXÝãñx³Ùìþ`0ø?ƒA“ —m |gggínƒ“[”“Å0ë`U.—!¾ô¥/Á²,<þøã8yò$Êå2–––`š&Òé4J¥RŸ3?ÎÅ:ˆÑ×$ž]]]ݨT*sétÚTU54::úºžµªÈÎø³„„ÆËÈ�ˆ€+ `ùïï‰Ú_F¿ì8¥Fk¸­§�Z­ÖWºÝî‡}>Ÿ50Kétzv}}}·wm{HÈÿ/åóùþ‹¦i¿Æ^ëNŸÏ¿ß�ÕÕU“F‚�F¾V«�/‹; �gƒíˆ„è{:^²eYºišt]d˜0¾§·�>üÎL&ãqÒ}‚`&Ò}”ËeÌÍÍå¯_¿^á¶UsØNkffæ#™LÆ`ݨR©Ž=Š/|á Peào {¯õþn´·zÛ/ªªz_&“¹/ FeYö÷î «ÝnÛ÷"»ˆB‡4M³Ç“É$êõzŸ 5-Ì¡fGäX'ºz½Îg9i?\2â–[n¹åÖ�. Ÿ8qbÕ4Í/†ñÑt:-°`dwwÁ`ÐÖ°d‚ÑžÃápßê"ïÀD€}vvår´êÉw\ð„u�Ñ4 333XYYA:�ÆûÞ÷>lll P(àÆ�h6›vGD×uøý~hšUU‰D¬D"!Ž���MOOÿÙöö¶Ùétþó³Ï>Ûð �ŸÏçõûýÿc4�òz½&‰ÍfÓî¾D";v ‰DÂ>fw¹âEäÅb«««þð‡‰Dð›¿ù›¸ï¾û ( ŠÅ":�¾ó�ïà©§ž²É‡!BG_Ó¼~>Ÿ_[ZZ: ÀÌçó:€-טǎ»bbB ‡ÃÁ`0x@UUS–e›$Òï£g:Góóóèt:(•J¨×ë}Ä|«7ªb1`k¸r©×jµ\4E±x+[ÆEj\ɲ,ï$äü†#ŸÏß311ž€°÷íC$ѯ\¹ò�6Ó=`‰Û éÂÙ›Ý6€D¯+•JF,sÌ&^¯×Êf³�NMMY”SC×1=³º�V«…jµŠ•••­o}ë['82i[àF£Ñ7‡ÃaC’$Ë4Ít:�>‡-"�@¿ú«¿Š¿ù›¿ÁêêjŸu0Oôy�‘¢(wONNÞ;22âWU•ºy]+¦ibaa‡‚ªªðx<}¡›ívÛÖNùý~„Ãa˜¦iwÙ{Š]xa� šÍ&¶··Ÿµ,kXGÕt?zÜrË-·ÜúQ' ´òÜ9yòä�f³ùg¦iþ–iš˲�ËåP,Á®~:ÎÀêê*b±Ø€–€»a_¯(Š \x`Ö=‰¬Ny…B§OŸ¦,;v ‡ÆÑ£G±µµ…—^z ¥RÉK²æ÷ûm§¨h4j¤ÓiÔëõŒŽŽZ¹\îÕjõÞÜÜ4šÍ¦>55õß�ŽŽÆ¢Ñ¨M>XPCàŲ,ŒŽŽÚÙN.WTüþ�è5ŸÏckkË ‚€z½ŽOúÓE²,cdd‘HýèGñÄO  ˆÆ‰x°c?\vÆ(nÏÌ÷�Ø+W®<{åÊÁëõŠ©TJ‘eY˜žžþ½�^Ž IDAT™t:O&“ˆÅbC“Úkµæææì1§´åóù6nwœØÀ6" `V«Õ¥n·» ëú>ŸÏ7ÐAðz½ðûý3�GÒu�ˆ—! "þ~Pd¤�ˆŒŒŒ|Ò4Í©ã7¬ã@ûÐë,y{ ÝpèxðîNó%œl¥=,Ai4Ohšö°aK�Û†û÷ï·âñ8H3A.V÷A×~½^G.—k|ík_ûno[l’äñx¼Édr$yo0TX'+A,¶Óö®w½ ßùÎw�ËåpõêUÜu×]Æ|DÓ4Q„·=ztª§µ²x“v!c{{›››¸ï¾û)R–eû¾¢ÀF'+löç›Í& …BéòåË p4Ýî‡[n¹å–[.¹ úDžsçέX–õjšöëÙlÖ,•JàGqØ®KH{ठàS¼ 8„B!;©›^ãóùúÂÚœå]x½^´Z-ûûÍfÓîØLMM!›Íâ]ïzŠÅ"jµΜ9cÛf²d„‚ñz#ZB&“Q*•ÊŽ��£Z­ ###;ÿ΂Ú®N§¿ß�^·`O—+àÔõh4¨T*¸uë–¸²²rÍëõ•eÙòù|/ §ýüࡪêÀñ¾ÿþûñž÷¼üÇŒF£ÑÔ™Õv/úÅßì(� @Ðu]ØÜÜlð.--}åíoûϨª:Nö¾lŸPÎï+Ÿ¨ÞUñ,..>Í!þYg´P«ÕþQUÕO†a±.mtÝɲl�ŽŽ¾a}}ýéÞj?KB ܶ†6_c"8tÄl6O¥R³‘H�NÇ dõKì>x½^(Šâ}衇öŸ9sæ2CÄÚL'�½–ÃÃ×@è]³Ù"‘HŸ.ET«U$ ¤R©ã²Çeu½ûN¼páÂe]×»Ìvi’$yÆÆÆ>�ÇÃÁ`Ф‘*ºçIØmYxàŒ��ãßø ÀßïXì`¯3ú»Ðétü÷Þ{ït:�¶øíeõY,aÐ4 7nÜ€,ËH$h6›v€"�Ây<´Z-;È“ ne¯oº' …BîÙgŸý–eYN&GÝNˆ[n¹å–[?Ò„@“çÏŸ¿U¯×?ošæ/‰µÚd…Éìª$ë Å§€³`�Oï¦ñŠr¹lƒyÊ» ÿcŽ@�v¯×‹jµj$ú¹n·k¯Ä‡B!;v ÉdøÀ°±±�••¬¯¯£Ùlö�t0!áúÈÈÖ××�FíQ1^ÿ‚lEQî8rÅ®˜’]i¡PVVV6¾ùÍo>Û&ç™LæmÑhTò½\É´ˆpÐ1gWÓ`ÿþýv7ÊÉ&´·ÝúíJ àv™•ZêH¼»»»7Òéô8%·w»]GÍ Oé¼9€ÖÓš¦±–È< aÃ"Å\.÷R<ý~¿1d ËRUõ€ §z �%!ì(ŒÀu^- áÇ®èx Ñh4‡?«ªª×ï÷£R©`X !Ý7d;�F‘H$V©TÖ08šÆ’�MÅ�v~E]×ÿ×n·ûo Ã0Ùã‹Å�ÍfÁë>h‘�Ïû(•JÖÜÜÜ‹.\Xb·æõz•l6û›©TÊK䃿/˜.Ž?Ž/|á 6 ç»­üBÝO�N###\²äß©óh$IB»ÝF©TB«Õ‚išPU>Ÿ�@ oqÃ4MƒAìîîö„ö®m¡Õji…Ba÷ôéÓOâ¶™‚It²HvË-·ÜrË­9B¯Ë€)ñæÍ›·8P‰ÅbI'{Vz�v£Ûí"“É ŸÏ÷‘„²@�wÍ¡úH$bwØQv¥‘i·Z-´Ûm„Ãá>àA�zý³Ï> ¿ß�‘‘ÌÌÌà�o|#Z­êõ:N�:…Z­fƒCv¼¤\.#‘H €§´oê9¥‚;��5›MT*looçÏŸznn®n\ckk뉭­- €‹Å¢Š¢ ¼' É^¯W¤UsÞè«_ý*{ì1hšÖt(hšö<Ó#Òb¶�\�HGá»|ùò‰D"ñ¶`0èeu;ìïv:6Dì¨ãÓ;Ý+W®,rÝ~nÞ`ˆnY–ÞívÿA×õ÷�{ë†Õ³õ�&‰Ìîîn /ëx|dƒú^- qÒ{ØäÃãñ£ÑèÅãq/�ìÅãq{ ÐÉŠ—Õ�$‰}¯{Ýë¦Ö××Ë·nÝú¿t]gõ :×õpʲÁº &KÓ4“ «V«8pà(+ƒÏŽi·ÛöýKº�……ý©§žšç¶ÏJ$M&“^V ÅßäMÓÄg>ó躎\.g ^Æ^Ëô³ú²nØ §pLrµ¢ï•J%†�t:=@>èš-—ËØÙÙ1i›ˆX—Ëå‹…Baycc£äp/±–Ò|̵í–[n¹å–[?’Dgº pÿaÇ«|><ˆÉÉI,//ãÚµk}«Œl·ƒï0ñ¨T*(—˨ÕjH§Ó‡ÃH¥RpÒYÐJ'i%Z­‰%.ÛsêlÆëÀÕívÑh4°¶¶f§¬'“IüÔOý¶··)õz’$Á4M(ŠAG:øîŒiš}‹OÿæG®J¥’°¶¶Ö>{öì?mnnÖ¸•n~U[(•J•ø<O<×ôôô,›®Ívȶ˜?LG¢‚~�ëV¤3�²pÕøVWWÿ·h4úII’‚<¨c÷�ÑãDöÂâââR±Xlr Õ XSôf³Y …B�e¹Ä3NRV 8`¡w�û08?Œ„Ü  _³€°oß¾·ÅãqÕï÷›„ggg±ººÚ§‹áu,ä>Õ}‹±X,žN§?|ñâÅ¿.—Ë"÷Þß«–@à~Ö,•Jµx<¾kF¼V«A×uâ ˆ«qË-·ÜrË-Ž€ð$DÁrJ§‡$I8rä"‘ˆí~lç#væŸ(uH“Add||Ü^u\__·íX15u ÈmJ–e4›Mx6 ˜¦‰ëׯcÿþý…B6ˆâÁO·ÛÅéÓ§mת#GŽàÀ�8xð ŠÅ".^¼ˆõõu[§ÂvVøÕ[¶³C#6bîÍû³º•Z­†ÝÝ]ëæÍ›g.\¸°\¯×›¸=¶¡q$Äb:Ô�ð�LÓ<Ýétöû|>‘tüœ<.:�N¡gëÊ‚ÖiIG¿NÂK«¸ ùn·ûé|ð¿µ,K¦sÍ[ s)Õ6é,‹XYYY½páÂyôÇéÄ‹Ú&c}}ýT4ý]×Ãt¬EQ´Ïð²ÒôôôìÎÎN»Ûíþ‰¦iN«ÏÓùp""wó<ñx³Ùì�…Ãá_…B¦¢(ðz½ˆF£¸|ù²=¶Æ;añ�X,†n· EQ (J\–å��>}úOJ¥Rƒ#e|Þ‡µÇöŠx9Ë&fYÖ£±XìíªªúèÚI¥RˆÇã¶îƒÏûÐ4Í>—õz;;;Âã�?þÔÎÎŽàóùd¯×+H’$‚ð/ƒÁ /XNVÎN÷�®ëX^^†(Švhg½^ªÿ`.•Jawwöu¸¸¸�ǃÍÍM<ôÐCPeÀ–š%ätµZ­>Âܳ½¾vþüùKp–³m¡ç3ZÜî‡[n¹å–[?ÒÐÔ{ E3MÓrJ·ÙŠ®ãêÕ«Èf³X]]…a  ¸ÝÝ]Ç\‹žÇ¾ ëºÐh4N ‚`Åãñ±v»=iFŸ]f±XDµZ…(Šb³Ù¼Øh4±Ẋ¢ôq"¬®bddÍfÓ^ íY›ö�“°]‘v»�ÝÝ]ÌÌÌ •Já�ï|'æçç1??oƒ0§‘A´zÝétìÕlZ�¥pFêÜlllˆ·nÝ:uáÂ…› àggû�VLÁt"¼¤r¹< ·}>_†1q²3¦¹úV«% …+{³$„}o¡÷:¨ÕÕU�Ïv:�•J¥äp8lM:´-ìØ\£Ñ A¯aš¦�Aç+§‘" t¨S­V …ì댒޹‘7YUU¹ÝnÿZ©Tº±»»ûsùŠèw&Я7y%äCD¿Ã”€7�þ¦ªª:‘¿ß�¥¥%ÒÙ]^B× 9Du»]V/zðÁýäÉ“Þn·y‚fû‡i@ìm=räÈ'âñøë"‘ˆì÷û-¥#¼»»‹L&cß+Š¢€=¢H ¥R ×®]³�Àñ}ûöeeY–¼^/m³Ùl6û:‚NºNLÓÄÜÜ:�2™Œ��3==m댆u@¨ÓI ´8Âgær9Ü}÷Ý#p^¯×î (Š‚v»m=ôȇ°¸¸xùôéÓt¿ì•@ÏvñøðEÃí~¸å–[n¹åV?ölê­VËÑj•�.,,`iiÉÚ>ŸápÕjÕ^-­×ëˆÅbhµZXZZj///?i†=f”Ëån„B!_6›}›$IV@ =À,¬­­=IÜÛÛÛ€K™Læ]£££‚ßïÏʲlI’dÐ!âñxlMÇÖÖR©�@߬8?¢uåÊ;UûäÉ“vò8ýnL±óë,ð¥n#;*•JX[[+>þøãO¡ß݈×àgÆYIarikkë/Eù¯Ä(ãƒVwÙí¤ãÑU™+‹›ùàõ<ÈÏÞ¸q#777÷oyË[ÞšJ¥Ž«ªšQÅbÍLÓ´5:cccðz½ØÙÙA<·àìxå¦Ç_£¨×ëX(>-˲ÁfÓ°š!˲ˆ8f¼^oÆëõ6s¹ÜÓè)˜÷17Œ| �Ïx½Þ7H’ô~ åóz½ˆÇã:m“¢(X]]E0D,³ÇÙë„®£N§ö¦}¢ÿ7 cä®»îúĹsç>ƒAA9/pæÉ‰�Çžœœüí±±1«ð-"ìqÓu+++ØÙÙÁ<¯×k;x0ïå} V«attt²öM"Ÿ­VËøü']‡¤ÉÊçó¨Õj(—ËÈf³}÷'¹‡‘«[ô÷(�NÛØÉdÕjÕ&£lWãññõ¯ÅbÑ6J`G÷èï… h·Û¨T*ÂÊÊÊ�_|ñ s¯ò¡Š|ç®Ë‘ƒ;7n÷Ã-·ÜrË-—€0+Ü}c.¼Åbñ ™Læßv»]ƒÕjG €€ û𑑍ªjƒÏžÓŒ¹¸¸ø”eYmnµÝ¨×ëÕ¹¹¹¿wżµ ¬¶¶¶þ~kkK …BÁX,ö“~¿_`»¬nÄçóÙÉëårÙ½bçÜY2¢iÚá`Ie@«Õ²ÅÞ”®iš ¾kµvvvð /”VWWŸÁ`@[“!!nÕ”¯é나¦©ommýi­VûÝÑÑÑ€,Ë�=¶#ÀÚ¼ƒÁC‚ œéʼn›CˆO�•,ËÂÉ“'OD"‘ GŽùåãÇ��Æb1¨ªj¯ä“CipzçˆÍ=ˆûÞ쨔>*˲IM,Èe¯Mîû?Y¯×ƒõzý ¦cáÁ+s‘²÷Y!�ÿûx<žUÅ/I’Å®æ“�s�Œ`}}�4ðûýöõFÉô=Ö¼ ƒ®ë˜˜˜ˆv:�ßnµZV.—ëøýþÏZ–eô’Í Ã0ÌN§cišÖe7:�¾cvvö#™LÆ¢ëž:V¼H›í&^½zÇ�·»6D¦WWW±»»‹p8ܧ_¡[–e[EóÐD†ßö¶·áío;¾üå/ãÉ'Ÿì3’ móù|ƒ6¡nµZöñ ®&Û év»v–;¶¥ií{–'¥ïQw¤R©`yyùÒsÏ=wƒš6ƒeywº—\Û]·ÜrË-·Üâ: <È7s¹Üf6›UU5ø•RúÐçÇ|X�;ûßjµ°½½-X–UÃíQzð–«Â�ò\.×èíÇÍ}ûöýX8öúýþ{ý~¿Á ÆEQ´GuJ¥’M6hUšF>øìîîö îYpåñx�ÇñÐCÁãñàÔ©SØÝݵWU鵤Y)—ËÈçó­[·ž6MSC®C·sœº–Ãj7uAtf³Ù4›ÍæÿàÁp8|·išw'“IÃ)ìÎëõB–e+�N”J¥kèuâ8Ÿ—�Þ{T¥RÁéÓ§¿xôèÑ#Š¢)I’Mêh´ˆYËÙlVX__7÷xo8t@�Çß úý~‹·;æ; ,ˆïe< ƒ­n·«·Ûm½Ùlž�B~Ȇؾ=�'“Éü÷‘Hd�HXN–²årï}ï{ñðÃãÆ�DwØHŸB¤Àï÷#‰xï¾ûîQê’t»Ý?¥ûŒÑ-ˆ¡PèÿÑu]ï�@Jívûç‚Á �ÇH·“[izÚí6žyæÌÌÌ  ¢Ñh`gg…B¡�à‰¢çh4Šf³é8¾I¶ÛgΜA*•B¹\¶é|²‹¬n$ô%¡¢¯E�ªªv7–%£�=ö’Éä€ckÞÐn·ÑjµÄ•••—ž{î9ê|° t¯òfNdc/g2·ûá–[n¹åÖ�<á» sss³}øðáÿÔh4~Æçó ¼å* øh4Ë ‘ÃÌçóßî}Pw¸ÕD ƒŽG¶1˜²¢liiiéI’ªªÏ¦ÓéÅb1Ÿ¢(A6@Ó´>7¯z½Žv»���Üu×]ØÜÜD @©TB<X)¥G<G$�(ЇÃ( ޝ#Ð/Izû§s+ªMæXð fØ>‹ ÇÊçóçvvvæEy:RQ“,zÙíñù|V,;\*•^º@rr !Vœ ¬�1nG#J’$‘G¹(s$!‘H$À'Ì# l‡N×u$“ÉŒišÆìÝ–e|B;c¿ú¤ªªÏ÷H�išæ�F3Á`p(€'0üÜsÏáßø‰Ä°&pÍþ<«‡ 2K_“éB °½×Ió†išïçöÇ0 ¥R Éd�@ à³�6‹‡îù••Äb1hš†���>}�_þÙi|SÓ4\¿~^¯xþùçáñx°¾¾Ž™™ ³ü¦í$ç³n·k¿M:žŠ¢ \.Û�‰Tªª¢Óé lëPg677_zî¹ç.2äƒîÓ&úó=ø…‚½¼K>ÜrË-·ÜrkH¤lš¦i<õÔS�?úè£ï‘$IbÉÆ°¤r6«£ÕjÙY+++;;;;;è·©l2æ¼èC: àHŠ-þEOQ«ÕÚµZíó¤}ûöÝí÷û߇UY–Màå¤uVÐ*>ð�à}ï{~þç–e!�N÷höÙ²,lmmaaa¢(bgg§Ï×Þ`fuµ7jà ½ù‘ކ‡Êñûl û˲Ðn·�v»}) cWÒ 4ö·aEQÂív»ŽÁnàìµ ¡�»ÝîCòØcÌ2¿ßo&‰wÏÏÏÿ%œ;^ŽÛ"¾\ÿB’$}˜E4»êÝ#F°,«o\‡9Ÿ2{žX2Ý{ü¬iš Ñºn·k°�²a–²†aØ!wcccPìƒÒÅ}>Ÿ�•ÂZ(³$K’$,//ãÁìÓc9}òÖËô½V«…H$2�ÉÁ7Ã0º"¨Õjv†ÆÀIb² Ñh@Q”>ǯ¹¹9{‹ŠÞ‹?Ÿô ï…Ãa¼å-o�(Šxæ™gì ÿ:"£ìH(›Õ3Œlêº.loo_:qâÄ•!äéû1¬{g¹ÄÃ-·ÜrË-·^9a?@ ¾¥¥¥?�eùSüäìIJéælÖE±XD.—–––.ƒÉÀ øš]I€Í!„F’lB�¥¥¥ ^à=vìØoD"™%´í�?þ8ž|òI;¼�µJåža¨×ë¸té’½²îúX]L»Ý,Ë2П<ÞÁ`¢õ�²,ޤñç̲,ËÒ4mY×õc|Ö�?Y–UU•v»Íº9‰¸³-OB,x‹š¦Íw:�‡h–ž%ª,Pôù|H§ÓílBÂj`VsÁ?EÁØØÖ××ût9LY’0ìßé´zç ­V ­V«oŒŠÝ¶ƒ@ÇZQ”¡ÀšÍÓ9vì<ˆk×®áúõë}¡Žìq£.YÊòäiØxKN,ËB£Ñ@(˜Éw7 ðmqYòîDÐéyß¾}ØØØ°3}È.‰ �–a�F¶£¢ª*fff iTUE«ÕrÔ—�‹¥µG£Qìß¿Ýn·ïæ2‰„ååå¹óçÏ_Åàˆ$K>H¿6l¡À%n¹å–[n¹õ}ZÙëÞ¸q£`YÖhµZŸÊd2" X ¼à`ÊzA{H¥R`•Ëå»çææ61hùê$ºæW¾­=VÆÙ Ô)h0™LbjjÊÖ]$“Éàüü¼d¼ŒBØð9>b¯nk"ö~²Y¥nˆR(þBUÕß“¤—7ƒ†l¡ib±˜�…À;ÐdÁý,uP¸À¶:÷X«ÎWbÓÉ ÃuB«Õz¦Óé¼+„ÈQ‰·ã ƒ†tÐqsê@ìu�ègÏž=qøðáŸÖu=LÇÉõưä{î¹çøåË—O9þýísm½\Ž õÂ… H¥RX\\zñyü×Ã~fqqñxܱ“ÁŠíÙŒ�v»=ÐAcɽþܹs˜žžÆÚÚšŠ7ŒX�މÿÿa„Êé÷Ðu@#`úIŽn,gÝßh¤Šé †a=*¡ÛíÞ0 Ãè-DX…Ba3•JMx<žC¢(ZNÛ'Š"FFFúÈ>?:fš&�Ο?o»U9½†œ°’É$b±˜}x‚EÝ�ž¨ÞXXXXÇps–|t1¨ùp‰‡[n¹å–[n½Jâd‰„�nC¾SÐív±ººŠÍÍMûrÒpÐ5vüøñ�nÜ+%X|ða�ˆâ­o}+"‘^|ñE¬®®�óz½¶±D»Ý¶ …‹õz}Û4MÝ4M£Ùl¶À�&U«Õ%B ˜Ömêt:öÈÛq$½ 倰¦ô­V ¢(¢V«�uïc;:äP·»»k\ºté‰ííí2úAYòÑq †K:ÜrË-·Ürëµ! Ã2Aº èD±XD±XìÞºuëO}ôÑOMLL˜4îC`… lUUµTU½?—Ë­ßXsŽV쨥A ¡±u¦iÅbñ;�ç˜ öj¬(Švî�”©ªj[�òÁzìèuxý u‚òù¼xñâŧÑßõF>¾—ýv"!”d/ðȲüMÓ>­(Šáä†%ITU•òùÜrË-·Ürëû$ }ø�ž]îÿ V½^ÿ¿[­Ö‡�€E)ܼë…ö¥Óé‰[·nÙ`Ã�–¾—r²©eqßckkkÀgLÓüx0ôù|>Ëãñ ÛíÚÂ^6Ç#—Ëõ�˜‘�*k›J«ªd=ÜjµP«Õ°½½����›µZ­ã@ˆîävõjHˆÀ€u½Z­v[­V% †øóÂ�ÃcŠ¢<ßn·[ ù Œ‘ù½Ö$¤�8Z–õo[­Ög»Ý®Á®øèd…èáp8åóù¼ív›%?ÔÐÙ# IDAT 1Øý:tèÐÛÃáðáP(Ô—àÝn·ûˆŽ!ðnš¦Àçº0ÏÖ^bh"žiš†P(„‘‘„B!„B!ȲŒb±hÛí²�4ž€PDZÙl¢V«!‰@UUhš†¥¥%x<„B!ˆ¢h‡’š¦),//kww·Èlw›{8u>øpN·ÜrË-·Ürë5 N Öpx� Àš››››žž.v»Ý­ê²B\¶ ‡Åt:}ßööö ¸óÌÿ+ý€ö #–h¶¶¶5Mû“x<þÆ@ ðÆ—†Å¾•RÚ~J}Îd2‡Ãv€ Qç£Ýn#�’ã�É�a¡w¯†„ ëFè�N§Öív/êºþÖ ‹%‡½Ôi_»ÝfÝü ¶OpØ^ûX7›M£ÑhØ+þN#`DLC¡zÄãpMx^>‚8;;ûSápøXòAÄï÷£Ñh µ“%€Z­V­ÍÍÍoI’d‰¢hˆ¢h‰¢hŠ¢h ‚àõz½�RvŠ“k•ÏçÙ®?ŠGÝŒv» ŸÏ‡‰‰ Äãq„B!Äãq,//÷éqèúq²ñe]š(�|}}Ýòx<k=L]%B5àE�X,֗ͱ¸¸ØG´²E`*è7nÜx²Óé4q{d‰žYC “!Ä^žØP²ùèè(TU…ßï§Î¦¦¦Ðét°½½í˜·Â# üŒD"`»}ccc0 Ùl¶ïµ¦iB–eÖ•�¿f‹íŽ]¹å–[n¹åÖˆ€ðep ³/å7ŸÏ•JÅŒF£}z h’ëQ(²Ùlp{{›õa ˆð*ø02bÏB¡PX/ �xvttôÇS©ÔC¬¨ž%PµZ Õj©TJˆÇã‚ßï7 ±¢Öf³‰f³‰d2‰l6‹b±ˆP(t(‰œ­T*&öNK~-j@“±°°p=‰¼Y–e�Äà\ÂŒÇãªT*†—ÝÂ|pÎ8œ�¯øãmæóùN³Ù\Ó4mŒÍa ÷fǰü~¿¹oß¾÷]ºtéoÑïdf�€8pàQUU?  6|�í@y<hšfÿ~V# ijµZw}}ýÉZ­VEŠuû3Ž÷]—±XìÝYŸÏ]×H„®ëhµZ…BäC–ed2¼õ­oÅW¾òûg|>__æOœ0W«Uloo—Μ9óüöööÁ`0hú|>K’$«w<,QÃ�g’=F="eÒµ  …ú®[zOö¸ ÓW4�æ¥K—¾Y¯×ë´Òn9²ÊöZ–¥Y–e€r¹Œp8ŒÃ‡#�‚ÜõhÁ‚FÔTUE±XÐb±�­J¥‚@ 0pO¶Z-$“Ix<»ƒÂš¸Ýáàm±�Ü®\òá–[n¹å–[?@ÂçL¸½"΃],,,üi*•úw�@ÀàÇKØqEQP(îSåÅÞÈ+|¦{^Óñý�‘aA~¬x½’Ëåþ1¬ƒÁ÷K’d¿ž€²$I¨×ë8þü ]×—Ž9ò`4Múý~Øhš†7½éM6`k6›Ôõ±TUU*• O¾±ý+Ùo¶ B£S€Ó­VëW�€Àºa±.M²,[²,G Ã�t]ïôH;óΖ¹ñ³P(´»ÝîM" üH+DïsëÒ¥K|Ž‹@Ø¿ÿÛ"‘ÈGB¡�Aà”€5owÌæB0bc«\.w¶¶¶ït:uÜÖ+8�Á�#, K¥Ò×£ÑèÏû|¾ž04›Mˆ¢ˆh4:”|<òÈ#¨V«8|ø0^zé%{ÛÙÄqv´ˆôD½q¾Æ7¾ñ�§:�Ž^,O1Ñ^ ðz½b8–$I<�(öÐú�~zbb"‹ÅìñA"Pü9ás2Øñ¯F£�\.—¯×ë ô‹µYÍK@À_ ðy½^û˜˜¦‰ééiÄãq›|ø|>;à‘Œ h£R©ôe“ô‚/Q«Õ‹Ål·5:~ä@wøðáÂØû7ëô×e¶}/«]—|¸å–[n¹åÖk@@„WøZƒe,àK¥R¥Z­ áp¸o,…ï‚(Š‚cÇŽ‰;;;oð ÜÎè ·*ð‘ø~A98€ÙžÛív�ÜŠœº ½UÙ#ëëës¹\îÙ÷¾÷½ŒŽŽND£Q;h�¿š�€966ö®õõõ/¾Fdã•TŸËX«ÕzR×õw[–eíììÀãñ Z­Úûéõz•}ûöýZ§ÓiÖëõ;;;_ ï±}æÇÜÂË]LLL€u¬rÃâò@$æš0fffÞ‰DÞÏ“29 �Ü vww/†1êóù2†a\5 £T­Võr¹<ßÛfV(ÍkX] O>D{VVVþV’¤÷ ‚0M@¸ÓéÀ4MŒŽŽ:’�l6‹·¼å-¨T*xá…ì×.//Ãï÷÷ö~ÑØU.—+}÷»ßýf§Óa+Y±· ¼l!],ùl�$I§TU}§¢(&o)MûÀ‚s~t�²2666ÄS§N=‡~½+ÚfÇ–Øñ«ÈØØØ/¥R©7†ÃaÓï÷Ûݘd2‰`0hÛ]û|>ȲlgðP‡£Õj¡P(ØD–´1Á`Ð&üñk6›8tè�c&JïzfþJr>ÜrË-·ÜrË­WYžï�€ðÄîZ­†X¡Pè px‘-�Ã0ù|þ"n[·:i"X€.|û( ù7ûV­V+%“É»}>_ˆ#cAZÏæuS×õV*•òÇãñQvìŒÈ2c4Æüüü\¨øÕöûûÙWöçD4{{oÎårö¹!p̬:[²,{E “õzý¶Á‹Î…!ïo¿ïæææµ£G�¾GUU�îóBën·‹f³Ð4M+ m æÔÔÔëãñøÂá°É“‡ñ*akkëòêêêµJ¥²X,/”ËåµJ¥²Ýn··1(0n¡ÖŸžy1µÆ�/ݲ¬n¡P¸ê÷ûˆÚí6ÆÇÇ199‰x<UUûÈÇÃ?ŒZ­†çŸµZ­Ï+ŸÏ š¦õ¹§5 ¡Z­ ¹\ΘŸŸßyúé§ÿ±Ýnó±mô³��•üJ¥R…BQ¿ßŸä¯mÞî—\¥ØmªÕjØÝÝ5çææžÚÙÙ©À9¨�ÕM°×´�Çÿr|||:‹Y¡PÈî(NLL ‹Ù„Mxçstòù<¼^/m �t‚º�´Olg¤T*!‘H@–e[×BûV¯×…\.w½\.WŽ%{o¾Zm–[n¹å–[n¹5¤¼ òN²´²Nât€¾³³Ó¥ÕLÖ•÷²‚‚pò,ÖæÒ‰à˜ßö Û^w¶¹µÊå² ûfò¹q!kddäØêêê3W¯^]Ü¿ÿÑn·+ñBk¶ë#Ë2B¡�<;;;}ëÖ­"úƒÿör{µûÉŸ'³Ýn �F±XÌž±g»<, ïýßaQciié/¸k£ëðžC¯‘Z­6Сk‚oóûýØ·oß›c±Ø ;>Ÿo.‘Hü¸ªª–ÓØÉ^ç[[[/®¯¯ßBÿx•Ó3ÛýpÒ�°ûÊ>Dæ¼I䥥¥/%‰ñL&sðàÁƒod;~¿Š¢Ø��R©„S§NÙä£Õj¡Z­bggW¯^}1 ½Îï÷›¢(¢Ûí Åbñ™F£ÑXXXè6�BoûXRÄÞ3:;|´­^ÞÉÉÉ÷ûýþKKKÆÇ;¾ƒ@cW…BA¸téÒS×®]ÛF¿P»Å‘7ö>1‹ýx6›•#‘ˆMÊVVV0;; úu?dY† 6A#ý uíE�¦ièv»nt,©Õ4 ÕjÕ&ì33®·³±±QÆ 1İ\·ÜrË-·Ürë5& ¢È·î0ûÄÎÏ?ÿü�†Ãa…æ»�Ò·É ëèÑ£?]¯×.‹§êõú3xyäÇB~$d`ÿr¹ÜL&“êóùºN‚mI’F|>_¤\.ïT«U+‘H؇wb~ápxÀ% f]°$äµ£Si¡Pè÷Âá°E^Ã:< ñ²Lg³Ù±±±ñwÜvÒyàAO¢„jµz¶Óé¼¾ÛíZ¬}-0�ˆŽL&ƒX,¦Äãñ‰���IEQ,EQö$õz]Ìårç×ÖÖæpÛ͈ï^èCˆˆSç͉€€! ¶VÉ4M+�Nûgggß<11a²äƒ»*—Ëä£R©`ccC¸pá™ӧO/¸…Áq0Ö5�%NÃDÒG˜<¤t:}<“ɇÃ9Bmnn"‘Hô‰¾Yw).%|e~~~õ¥—^ÚÅm±6ßEÒœÈ�$IžD"ñúp8,)Ó4ÍSãEç¤û`G¯H÷A¯‹Åbh·Û®Xt S÷£ÙlÚ.klVH�Ôù|~A{9ò]—4ä>t‰ˆ[n¹å–[n½V$�N¿c{{û ÑF`xç€+ôär¹z"‘PHÁ') ƒ°,Ëòù|±l6ûh±X ïîî>fí•ôöÚ“ý¢z¡Ûíz4MûÃ0Þ½Wz·ªª¾B¡`ÍÍ͵3™Œ�ÆiÈ�‡6«}‰F£EQôš¦É;€ñ`÷ûÙÇ�J§Ó¿‡-Zef�?2ÆjLÓD(ºÛëõŽèº¾Ã�[ü²ÇW „Ãa£Ñ¸»ÓéXº®Ûä�·9öx<¶‚²3ü~¿µ»»ÛG>ØUû8¶r¹Ü™•••kèw1js �´]ô¯v³"îaÇšï‚Ø`ÿÞ{ï=pàÀ�ŸãÉu>~øa ¼ð h4}äcssÓ:{öìsçÎ�[GÿÈ¿¯sŠ%W,`fïO›,E"%›ÍþW‘HÄ¢{2 !�NãÙgŸÅèè¨=‚Çš‚€F£�D"�ÝÝÝôK/½ô÷þ{gû:‡Ã’ßï¿ßï÷>Ÿ­V –eatt¡PÈ»¢m ¢@$¢çü…T*e_»�@µZÍ&øì5ÌvMü~?öïßo Ù‰´öÒϵ˗/_çÈ�SçÃ%n¹å–[n¹õ(ÏÁƒÿÜãñ4jµÚŒy§(á€3o*•z)‹½CQ‹Ö²c>2R©‰·§‹ÅbȲ¬›pÖið_¿Öšû9 íSåK Ø}è�©r¹|% .���£F>§€]±ïv»¸qã†iYÖê°ùZ¸ì°û#ðŒ��½. î#�Çf\°D„ÝOf_-ŸÏwŸ¢(£õz=`«·}l÷ƃþ%�ßïŸÁ`Ð�,ña».^¯×&GÔ¡!kU>ó¡^¯ [[[g———¯õŽ#+ˆn1v<¨³Ð°—vxØÇø�xpÿþý¿511!ðäcrro~ó›Q(ðâ‹/��õõuñìÙ³§Î�;·çð;'� ÿ5ÛáqÔO…ÃaubbâFFFö}>Þóž÷`rrW®\± ˆªªPUÁ`ÐîFE£Q´Ûm”Ëeaqqñrï½XímO>ì¿ >Ÿï㣣³t|vvv099i[îÒ6ùý~X–e�W‘î£P(PN $I²¯�x<Žn·Û—kÆ6&“IX–…jµ EQú‚ …B÷úõëÿÐh4xaºFœˆ�KDÜrË-·Ürë5,ïÈȈáõzE–åÆâââó¸Œd¼âkçõ¯ý‘‰‰‰ßrê|LLLàMozŠÅ"N�:e“ÊñØØØ°Î�;÷â¹sçV{ ·Ãl3ë Å$¾sÃç—°¤Ó «ªú’ɤ�RÅ%IÂÔÔ’É$¾üå/Ûç�…¢ã®ëºŽØ³¥6Ð?椣a ÷÷BmòÁjAhôŠÕ}ôL °»»k§Ï³„™òM¦¦¦ iŠÅ¢MòMÓÄÈÈZ­dYÆöö6B¡�ý;K¥ÒÎùóçŸn4 ÷»CŽ«[n¹å–[n¹õZUU!Š¢åñx>.Šbtaaá;–e±äƒÃfåÀÊd2êîîîÁd2iðcXìSÏž‘HŠ¢€z;€ÐÚÚÚW‡‡ aÇÈ ¼ìdH’„��†aŠÑÑQênLjš6Y­V­v»m‹ïYÂ’.EQ�H$ ¦�{1Øy5û7ÐÍñz½" I�ǃX,†C‡áÒ¥Kh6›v׆^£ª*¼^/+â ðt]ÿd·ÛE<‡aív[¯T*¹z½þ·ívÛù—±XÌ ƒ¶ÈX›dÐöH’ôòÎöëOlÒ‹ÅP¯×Ñét`�¶¶¶Î,--ÝBÿX¯K`ÑÃFk,îZà�!ßMßð†7Ü?99ù¯³Ùìù˜ššÂßøFäóyœ>}z€|¬¯¯ãÊ•+ƹsç–ÑŸ¾ÝzÛmpÏì> å÷ïßÿÎÑÑQIUUèüʯü >ÿùÏÛ·¬.‡Ÿ~¤ë÷ÿcïÝ£$¹î2ÁïÆ+#ßï¬wuUõ»-µlYjÉX²ËcÀHÆfí9ˬÁ‹s–YƒÇ³3,ö0œ1ç003Îî2³ë3Ëà ؇’�-É’-Kj©¥–úUêG½™••ˆŒŒˆ»TÞè›QY-Ù`Øø�“§«³²²"#nf}ßýý¾ï�pw ’8w#ºëëë8zô¨Ovxѹ,ËþõeY.Ífº®cðÙ4Ô©cëö‡ø‡qᬭ­ù¯‡uÈx²R«Õ<]×[[[/-//W9Ò1J@ï"¿ +¬°Â +¬ï=a~üÀñ³„�Øõë×ϨaxÝ;à4>$�NŸà†á�N°]v@°ÝX–—Á�dêyÞ=ívÛèt:�r‘Ýì(ü›ê%‚$¦iþ;MÓþ½mÛ.Äb1Œ²/uš¦Á0 °�~^;¿Þ�öebvvvb}}ÝÂÍÔq8¥[�,¼Îk Zðú7f§ÊÎ30ð±�} ŸúÔ§°¾¾>Dœ€½�ðX,æ¿^β•rIÙ“Žã P(ê÷ûos™LÆeã< hòú~4�‘�à¹UU±X ™LÛÛÛ ”’��� +++K¸)Ò¾U†C°ëq°$·¸ù÷Þ{ïÝÓÓÓÿrzzÚÍf³C‚ó¹¹9Ü{ィÕj8{ö, ÃðÉÇ`ì ËËËpGš˜˜8^.—_9€<ñäõ:6>�ŽD"ïÍd2’(Š¥TÉf³ÿc*•rù§�|ä#xøá‡Q©T| `Þ™lùàˆ é·ïû£x¶m‹Žã`ff…Bü({Oó>:�Êå2"‘ˆ,ü1 ‚€©©)œ:u ¥R ø‡82È?Îó<ãk_ûÚ£ybçš�ê±Q²ƒDýa…VXa…Ö÷‚€ìîîbbb‚ýávEQ|¿mÛïÝÙÙùw²,»Š¢¸¢(:žç¹–eyÝn·M)uY Ȳüžb±HE�mÛPUÕä D°L`ƒº Çq¼¹¹¹û.\¸ð ÄGí\{Cì‚ø$D×uÊÆRâñø�U)0œó!I:�ëŒ Üc]Ÿx<ŽT*Ëf³™V«eSJù9~ždIÈ­^#¦ìí@gØÈÛaVÅ —/_ƯþꯢR© í‚SJqèÐ!üÚ¯ýyäÔj5ˆçÛê²Ç3bâyu÷jÈ݈Ÿßg$(H@x /6�D"ˆÅb˜™™�aT–åãžçwç/MÓ$­V«ç8ΨÎ^Øùð8o>áˆF£ñ\.UEÀ^¾‡P¯×{oyË[æggg?$ªªbnnÎï|<ÿüóûÈÇÖÖ677ýŽO<90Ï@ï(ç.>L2H@…T*%;ŽóÛ9UU¬ÛH)E,s9’e÷ÝwºÝ.677áº.z½ž¯¡Þ‚é胱,úÈœ ŠëºŸ‘eùÓ¥RÉM&“>aSªªé6˜îcss𦠭ӡ7-¥ØØØÀ7¾ñ ”Ëe8Ž3ô=þë�¸Ç‘ÃÉí|zûAä#$"a…VXa…õ·M@&''}€9==ÍÀ ¢(ÊoH’DEñÇgz½±mû\«Õz¾Õj�7™L~Ðó¼ÌÌÌŒœL&ÁÂÆúý>dYöçÉnŽÝŒ ¦+‹âäääÛÛÛ�ÈÎ$äo0¸Åbñ¡L&ã1—šƒéÑŒ@iš†ƒÆ°x°X,F³Ùì{óù¼ ëú¥ííío—ËåÅàØ  ƒˆV�|øÝ¨ÙÙÙS‰DâS,Eœ�ÿ~¿ï›išØÜÜôÁO(ÖÖÖð[¿õ[xßûÞ‡'N@’$ÌÎÎVVVð…/|ívÛ× °Ÿ­×ëûDãføYr<;öüã�gkC9qâ Ãø`·Û…aÓ4«»»»Î•+W–<�›v¹AçªQ!—Íf³Ç§¦¦þQ,;¢(Ê ;6Çq077·<3337==MƒäãðáÃ8sæ *•Š?vÅ\˜Úí6666°µµå“¬AæÉiI’Î9ŽCGûQ· i"’$=X,ïN$³lT0˜¤nÛ6R©Þö¶·ann?ü0<ÏóíumÛFÐy³¬ßÀ:¥;!ÜùH s¹\îW§§§ÝL&ó†tÍfívŠ¢;nþÍu]t:¼ð û¾Ç>C˜Þ¨Óéì·fá‰AQ¿ƒ0û#¬°Â +¬°¾?$›Íúckk SSS œz €0'¢�•囉ěUUm{ž÷¹H$ò‰�Í,R©”¿Ë9Êö5H6FzUU�ÇQ(2ÛÛÛ±`,HB‚6Á#"’Ïç3‰Dâ-ªªÒ`wðxÙkrgßVP|Ï€W.—£‰DÂ5 ãd:�>™L&+›››ÿ§aîøùÀ¿àë%Î÷ȉD,™LþV:�žâAße°m{H›Ã;”ñNeµZ ?üðP''�âïx~û·„¼üò˨Õj°mW®\A·ÛºæAÑ»(ŠˆÇã8yò$$Iµk×Ðl6ýcEXr¹œ¬#;ÞÀ1©ÔëõJ¦iâŽ;îx³¦i¨×ë¢,Ëÿ‡®ëýÍÍM¯Z­^L˜4�ž8tèЇÇÇÇç™iÐñóEÚý~ÿ�(Š”éù˜ŸŸÇ=÷܃���¡±+Îí >Á2 ÛÛÛð<ÏM¥R ”~½Ùl^ ÇÀ5æ�=ªªÞ?55õs¹\ÎÏu•2Ïô§N�ŸüÉŸøéâ¦i¢Z­–mÛNyžç»^AòÁu@Fòv›››;)Â/e2™œªªll‹d2?ž}°ïóäÃ4M4 _T(�L&aš¦¿&y�! ºÍñäò,ayyùQ w?‚Éí¼¥±;‚ô…D$¬°Â +¬°¾$‘Hø³R©`cccÐ8ŽƒÁn3 T*±1Št£ÑøÉd’J’äï 4r´_åÁ/Ó‚°ŸdAœXXXøùÕÕÕ'<Ï»Œýy œ»�tþ�Xõú�Íår÷F"•?~^ÿÁëXâ»çy0 ÃwÊ•!Âܰ‰r¹b±fãñxüŸŸ?þ?€(»±yûQ€ˆß�Åbñ·Óéô$Û•íyžïÄîã­nYf‚eYCÂu6§ÿÈ#�à‘G�,˘™™Á¡C‡‹ÅðË¿üËøð‡?<ôºƒ� A�J¥pìØ1ðS«™CVðñ„Äãq6ÓïƒLþX¹�9bÛ¶gYÖÇMÓdNI[­VËY__¯Z–õ½^�jšæÆãñwŸÔó¼àùó<ïã‹‹‹ÿ·mÛäuË´nQß}äÈ‘w%‰I¶Û|ó`�'I|d°#MZ­ÖŠã8¹H$’'•$‰ò®D®ëâÆ�XZZ‚çyøÂ¾€L&3r¤‡»†a Ñh@Ôj5ŒÚ…ç5&ìÇra¯‰#%”�Ü^¯Æ‘ IDAT7ÙëõpüøñCÝn÷žN§C<ÏûJ·Ûý±ññq—·…eçŒ?/ì9wvv�L&qôèQœ9sår/¾øâùhµZØØØÀsÏ=‡~¿�T*µo„�{4¥±X¬�Fyggç±jµú­Áõ ˜¥T*ýJ&“‘ùãÕa0¤¯*—ËlÍöoܸñ´aÝ^¯·Ï‹×€Œè€ ‘�ééé¹R©ô¯‹Å"aäƒ'püù³m•J'Ožô?O‚ºf¡ËÈ (ú=î’�°Â +¬°Âú^MÓ ë:ÆÇLJœ«Øx"ø@1I’�Íf}Á±ã8ûì2E±X =ôâñ8þú¯ÿþEÐ%KE$“IÔëuär9/�çJ¥ÒÿÞl6_h4O´Z­Ú`ÇTŠñw2Ç=ª"‘ˆ"IÒÝårÙeúÃ0�N§Áæÿï¼óN,..g×u1>>˲Ðï÷}q:rìu±®û>;σñ˜™ÍÍÍÿ­^¯ÿŒNF™µ@K¥Ò{³Ùìÿ”L&‰ªªûܦ‚øÔo0PØn·¯---½,Š"€/“ÉÌf2™7uŒ'8‚ @×uÌÎÎú‰ÖA²À ]×ñÌ3Ï@̆'!üc§§§�LJî ÎþotIh¿ßw®`ïÖuÝEq¨sw+­�¢(X]]Å?øAlmmáìÙ³0MsHp^­VqíÚ5xž‡l6ë�I’4¤§`Ç9 v¥ô!Û¶¯QJ Y–-˲þY,K³Ÿ€zâ8N,Øed›A¢ì8v»]Ôëõ^¹\îðºÝ.å¯ÑÈ7ÇÍŽßPÐd>Ÿ/Ž��rllŒ°îQ°Ã!f¡|öìY9r²,ûZ™ÝÝ]ôz=”J%ðBõH$‚L&×u166æ“” Þ…׎ º)Þµk×¾¾¸¸¸�ý©í|懒�°Â +¬°Âú�v»�íímd2·6h‰ÊklÛÆØØ˜?²Â@R½^÷AË(ÃÅ¢("�î³Íä+›Í"“É ŸÏ£V«a`íªÆãñw¦Óéêt:ç—––þ7ÃüFYh޲Ò$#þ/@,›Îårð<Ïc �†Y–111�_üÅ_Äg?ûY|ãß躎|>�T*…x<î�ೕe»µA€˜Édpâĉ̷¿ýí®ޱ�›!süˆ™™™ùéd2ù!&6¿•憌n·K"‘t]§œû˜`š¦Ön·_ÙÞÞ¾€:ŽãèºîðÚívcmmídllìD"‘eY&ÑhôÞ©©)ùøñãþÚÚÚòÇlø~~·z/ ûHCp–Ÿ}Ÿ'©<9EJØëEHØóæóy´Ûm¬*ؽ v†Ùú�ßùœ8qÂQ3ò±¶¶&8޳xüøñ–eQ¤ƒ#|üõð<–e¡×ëyÿr@$ˆ .o_ÍÖ�®ë>ùàǃ#Žìùyr9Ð_¨Éd2­iZ]×õ‹®ëþÝ«íxAp€H™™˜˜øh±XÓé4x»e~í œ,˰, ¯½ö¦¦¦ ‚/:Ïår~çƒéD2™ Ç�®ëìýï�cñÝ$N›MÓ„•••'._¾\Æp烑�[¹Œ…ä#¬°Â +¬°¾_dssÓ�Á+ûßl6qýúuÄb1$“É} ˆíÀò»©Áqšn·‹'žxñxÜßÍ îz3ГËåØ˜ ‰4Mc䇦R))™LÞ�H$ÎèºþǵZíj»Ý.ãf.DÐÍÆE`\‰'#’$Éñxü_ …Ûb±Q…A#Û©¯ÕjøØÇ>†n·ëƒâÎÎÎÅN§3qÇw›��•‹Å¢¿†b±Z­–oõÊ:<0åG}‚ãTìglÛF¯×c£~þÏò€œÇ�ê�ܪSÂÎ9ëRð„3¨OâÇ™àÊ•+˜žž†çy¾ÛÕÙ³g_¬T*ÂÌÌ̾÷È(BèyZ­$IB>Ÿ‡ ^ðu z¯×käÇÙˆ#;w<`㊢HÉd2ªiš’ËåzÁîGpkp¾ÉÝwßýîF£Ñ]ZZZš™™9Q,eF¸™ÀüVŽ;ëëëH$¨ÕjH§ÓC](F>úý>ºÝ.ÓöÀ²,hšFP¾Ëâº.|¯º¼¼üÊÊÊÊöSZØŸxîçþ„ä#¬°Â +¬°¾Ï„T šÍ&vwwQ,´V%„ ŸÏï 8ãˆmÛØÞÞÝÁùs×u177`/�…Ø1âÓétP«Õ°»»‹±±1šL&&™Ljõz}ckkë3žçù¢RY–‰,ËŽmÛÿv W8+Šâ×ûý¾G)¥„!›Í¾-�Nÿx4�QU•G—‚£$š¦Áq>c™LÆO tò`68ÎÆëGøñ–9‰Dîp‰BR©Ô›ÓéôÛeYΉ¢˜`€ËqœuA²©T*‹Å(?{?jüe0îBkµÚÆúúú3Œ`loo?�ýãkN€Ìñ£_€|èС‰£G�¾jjJâÁYæäÉ“8{öì>R˃ïQBo>ÍÚ²,t»]=z¦iî ´ED‚®MÁq® 9á¯?ÎÄž�?Ö`÷bmm ªª¢R©à¹çž{~qqq{~~þ§"‘åG§" �N±XlèþQ]Až �zÝìX‰~ý×_ûÚ×ðä“Oî;v~pnnîÝsss ×ué­¬xÙÏ=z”¶ÛíEQ¬E"‘±x���H’D{u2�Nÿçn·ûÿnll¼855u‡¢(TE–$É€ñÛ¶ÿ‰mÛφ±"IÒ{S©TZUUOQÊv‰yâÁï‚óÇËîÓ4 ¥Ri¤ëWpD†‘*œÆ2/X^ #!ãããÉd2yfccã­Éd2�FéàšÐ £ŽãL@M§Ó#mX¨¸ÞÊÊÊWZ­–†›xýÉ8èæðäãÔ©S=vìØìØØ˜ÇFpø¼F„NŸ>�7nH>Fpêº×uÑh4†v×ùŽOFxâ0  ‹¢ˆ ë¯£`D)(¢æ #û?{üÎΖ––¶Ë<~.Ø©`_ó#Q<ÐçÉÆ¨û_/±œRŠjµ Ó4÷u1øçˆD"o?tèÍår”9Û7‚$—ËAUUAQ”Ò�7èÚÚ‰„ÿ~a£dßüæ7qç�wún_ìù‚„„m*†±oìj0"ȯ]Ôj5áêÕ«ç^zé¥57–——¿�ýi÷·®ƒ�QIç^øñVXa…VX? ÂïÜ�" Š¢ �Žz<ȉÅb¨Õj°,kŸ�)ß=Šô t2`ÎŽeaaµZ ív¶mûIâìXøŽÈîî.6771>>îôz½÷'“É—eYƒË�:Q×u]Û¶ï1 ãžF£�x<îñÎGA'¡`Æ#Vlî¼Óé`jjjßH :c±æççAÁòò²?¾§l”h~~žRJß9;;‹f³I···‘Ïç} Œïìì`vvvh&žë`.ÞYZZúKcm²b{(s9 çq÷Q˜˜˜H?~üSSS…|>ï±�kÞq‹RB²Ù,ºÝîÐ13ñ=ÿ¸ƒ\Œvww©a=ÇqÉQy­#§�$�"$l-ˆ¢ˆF£±ï°çdfÌáŠ_Ì’W’$¤Å¸wù.Tð÷ªªŠ»îº ÕjËËËûÖÛ(â,Þa�ÝvwwÑét ( >þñ�Ãó<_�Ä“vþ''')Ó,%“É[ŠÐù ¶é0??]׉Dö异€••¤Ói_@>*l”eâ”Ëeÿ=�Édü®[»á<½råÊs¯¼òÊJ`Í×.#Ólmóº6~ÅÖsØý+¬°Â +¬$áw~ƒ`ŽR:4šÂˆ_|F©TB³Ùô�á­vAƒ»ÞìyÊå2¢Ñ(r¹òù<�Z­Ö>" “É$ …Êå2\×E"‘Pùq2<²q'öšZ­&''÷ÍýóÇÈëX \·Û94ê뉉 Üu×]¾Õ±eYC�!¤Ê²ŒÙÙYôz=är9”J%LOO£Ýn£Ùlbàà„t:=D···155¼#iµZÎÖÖÖcòÁƒ²a &‡»oyË[œ˜˜øÀä䤓Édö �yí®ï¾ûnœ;wÎ?ìg‚]6&ÆlY+• ¹zõê‹‹‹‹ 4ÞsÏ=³™LÆpûÄÄDz0öEù‘§ƒº£ »¼ƒ#Œwß}7Òé4.^¼ˆõõõ!Kå i!„L& EÓ4 ^Wv‹D"øÈG>‚ .à3Ÿù̾nÇ­²8Ø}ÌmŽëonn"‹ùdªÕ*AÀìììPçβ,ÌÎÎ"‘H ‹!��Ž"þÚg¿£Ûí‚Ï ½;Ƌ/¾ˆv»í¿ÿƒd�3d2˜¦9¤ùèv»ØÝÝŸ{õÕWo`x¼Š‘Q$¤Ï=¶ÏÝ‚.y!ù+¬°Â +¬ ¢Ñ(æææ`Y ÃÙj7ø,†N§34Âr@åçýA€eY�$ ŽãÀ4MD£QŒ��#›Í¢^¯£ÓéŒÍŠÇãH¥Rh·Û¨T*Ð4 ’ž`­¬¬àøñãC‚xöØ~¿]×ù|ÕjÕ'<,®ßïßr×ZÓ4hšQašæ�‚RŠ7½éM ”BUÕ!r–Ïç}€Ön·Q«ÕüǨª Ïópýúu,,,ø]„z½þÊÒÒÒ"öÏÅ[ÜÿyÑ>ÆFÐÙÙÙ|.—ûÍcÇŽ …BÁá-WGePð;íìÚ=zÕj•J…¤R)ÊË<a¯³Óéøš£íímƒ;®þÙ³g__üNrÇw¼izzz>•J‘H$2Á�ƒÑ`�$O!h4>ˆfÄš¹•år9D£Q lnnî#—üãA°<Ïs¸Á1C~¤É0 |ò“ŸôÃ*‰vww÷­�à×ü¿Ìy‹�z]»v ²,�t’cÌö¹Ùl"¨×a×QQض=D$غbéãì=Ôï÷‘Ïç¡ë: …‚¿öùNοøE|þóŸÇöö64M¹ v†2™ ÀaC#xÕjW®\yáâÅ‹78Òêõ:jµÚ>Ñ8'|'c~i³Ù„çyÄuÝ!‡œ[ØÂ¢P(ø£¬CÁ’’ãñ8r¹ÆÆÆP.—¡ilÛöI#"±X ©T ­V ívÛ'Süï¶m£V«A’$Äãq__*•†\£ÇÁýÑá=ïyJ¥:äïþG"ˆ¢ˆÝÝÝ!Ë×à9j6›xòÉ'Ýnwè<ò„‡RŠT*5$Æv]ÑhÔ?·ét¹\ãããÐu�Nívº®CUU4›M¦xqccc%°+ì�^ ‚àÈ²ì‰¢è ‚@çFè÷ûÔu]*9|øpüðáÃÿfbbBÈd2û„æAR9ª«¥ë:Z­ÖÖÖ¶¯^½º˜Íf�Ž��OFœþ5f„e0¢CÇÆÆîh·Û_ÅÍ™~¿[ãº.u]çÎ�;{îܹˆssscÅb‘¨ªJr¹Üûr¹œ0 $O˜dYF§ÓñõARÝív±¸¸ˆt:�ÕÕU¿;$ÜuÛév»&�u·F½WÇA£Ñ"¸ªª¢Óé u¹Ÿó‚®]ƒ5AE!Ìù+X<é÷û ”úcmãããC¤ƒ×.1÷¶ ™ ’x6GʺáËó<$è%`ÇA³ÙÄÃ?Œ_ø…_À}÷݇D"^°/˲Ÿê‹a–Ä,‹¡Ó錴„å桇Â;ßùN\½zív¯½öz½Þ¨@=ضíÏÌ›¦ ]×Ñl6ÑjµP«ÕŒ��� †5;‹efffŽD"‘O¥R”Y3Â¥ëz½×ë}-�N™ššº{llÌM&“¾Ð<Œ72+†]S]×Q­Ví§Ÿ~zmeeåÜðm Ž 'Ožüh¡Pp™S´lìOUÕl,ˆ±�áñ1ÞÉÈ‘\]]5VWWEì…åýçÁýÂ;ßùÎ{s¹\$�Ç¢Ñè‘X,æ± Ë 3–çyèõzXZZòÇ´xÝŸ1¾gYÐD"QL$„­sÖiã5<™aBôt:�Z­Æ[¥×ëéý~ßÙÜÜ|qxŽÇãQEQ~Êó¼˜ã8ˆD"û>û÷Æ�˜››C»Ý&ªªRž<Žº±(Má�TU…®ëûÆÙ¿Åb�=öØÈ@J~íçóù}ä£R©.\xáÚµk«“›(ðç(øu0ë#$a…VXa…õƒ& ÁqÏóÐh4ðWõWþe6›…eY~¾Ɔa Óé�r¹üôööv³·§Øu°72óR&“yyzz:5??ÿ±XLE1Â^Û0 w{{Û[]]}´Ûí:ãããÏŸ9sæÁ±±±H*•‚ Ë,˜,‘H`bb…B;;;Ðuý~h4+�"�ûD¤R© “É`~~~(�šíÄ:Žƒ\.]×±¶¶†Ûn» ŸûÜçpòäIçŸàl¤'ŸÏ£×ëÁ¶mÿûAám°ó$ý~¯¾ú*"‘î¼óNBð–·¼[[[¸xñ"Úí¶ß%`cWý~ß¿e2 †MÓb‡þ±ÍÍMìîî>V¯×Ñï÷­ñññŸ™ŸŸÏd2r4uX‡×€�—^zé+Š¢H¢(B%Ègç<ŸÏãïxÇÁO<�ííí}Y"|ø#?jÆ>GصcvӣΠ©”$É'•J¥òå/ùéA–O�#ÆàÔð#V£GH< +¬°Â ëï*aÀ ÈG0~xš®ëþØR¯×s9°Ùã@"sŸ!�FÃl45$2àÈ^xá…+çÎ�{maa!y÷ÝwÿD.—›L¥R”× °0³V«åw6º®ûöú2™Ì�%˜öÎ,c™™×¢ÃäxR�Ç}Áo bÇ1¦0 Ãÿ=›››¨T*xå•W�J¥pç�w¢X,â}ï{t]ÇåË—±»»‹Z­6DBØ¿ý~©T ¹\ÎÃÊÊÊ\&“¡ƒ Ã!'*>Ž��ñ#p¥[ó]Ó4™@ë‹_üâWq°*Ódww÷¹ñññûb±X‚u ØyâU%mÛ6/Hw¸çb€“uAŽtð]ip“+•Ê…\.w*�ŠŒˆ²ë)IÒÐ5ãÁ5{­ìõv:ܸqã™ÙÙÙÓQfJ ( &''ñ�|Ÿýìg‘L&Ñn·G^æöT©Tž)—Ë7çËÂ~—2°×#ŠbïõÞ܃¥”º¬»,ž¸°ãaëV�gÙì³�}.ÜvÛmàw‚çϲ,èºîwKt]ÇÎÎNýÏþìϾ1ø¼`Dƒ' æˆu4ªóqà©?êà +¬°Â ëïéõzûªøÙîàØ ¿¬i$I¢™L挦i‰áQ™ ÷~p—š�!òÁpŽçyâ�7Œ7nü·{î¹gr~~þ½Åb1“L& oˈH»ÝF6›Åüü<,ËÂææ&LÓĵk×�J¥†ÒÞƒ%”RÔj5äóù!�G0ôŽ`<9;yò¤ºÇÀsÿbwTF#.©T Ífs_·E’$ôz=<þøãˆF£(‹˜™™Á™3güç¸rå VVV†´(ün³ã8h·Û8(ñž»Î,£��³�Î <³ÝëF£AŸ{î¹ÎÆÆÆ_c8{Á GŸ��†›H$ (Êкc£Xƒ`Æ·®¯¯?Ê­ žˆ8Nid„'"2yqqñ¢(ŠïUU5ÃÛ/ó£`A²ÅÎ's…ët:˜œœ¤þð‡ïøÒ—¾”L&“¾»—ªª¸ï¾ûð…/|Á'…„èºîŸïÁ{‰v:�J¥Ry©ÑhTÒ'BÄ‘ÓI%1õ¿D˜! ”ì-9x¥îªkkO úk:!!„ÐQY"üùh¨èAf l]6›M|õ«_°g˜0êq¼¶©Õj¡X,¢X,"•Jù®pAÝ ¿^t]‡¢((•JÐ4 •J¥öõ¯ýIÜìnD>FÙFDû�ÁsÌð`¯“'A£Èo•ÚjµÈææ&=þü.\xÉÚÛ6çg÷ùù}¶ØuõdY~)™L¾GQ/øû8ðïµZ­«žç×?†óz7ÞŽ•v»Ý£Ñèí‘H$)Š"µîyÁ?Ïl}mnn¶>÷¹Ï=_©TN Êq4Å<€‹/¢\.ûçªÝn“J¥rÃ4͆®ëµV«U»~ýú3årù¢išmAN‹Ñ±»îU³'~AŽO|\�Ôûˆ „€Èà2"½I”£ï%Ñ©÷y$U$¡ïØšÅå¿ ‰Àó<˜¦IêõúN6›õ²Ùì3à-”yÂÅk¼xÂÉÖ0#š¦Áó<Äb1_OuІ…eYþ† ©Ô4 åryçË_þò¶m÷F¬›×ë|x!ñ+¬°Â +¬¿§dvvöC’$ <˜‚¾ëÁÈG»ÝöµË]S×õ5ŒÞù†‚ñ$ľÅc†¼ü766Z×®][ê÷û)Y–S”Ò‘"z–—qýúuX–5r¤*¼Øï÷Gëq°ƒÁÎG­V³×××—VVV^ŒF£ ̆˜�;þñº®£ÑhÐõõõÞK/½ôèÅ‹7VVV–wwwY– &Äód„]Ÿ��¬­­aii år'NœÀÄÄn»í6LNNú#4µZ žç ¥–GËøfË�“]Ët]G½^Çòòò�o}ë[O-//7;ØAápйÈàõz=¯P(d"‘Èô(2x­IMÓ.öz=à ØÁÅ ëQ0TÑ\¿ß÷šÍæ+¢(Þ�eù-„2 l³ëÆ®Y«ÕB¹\F£ÑXÏf³§K¥’È´2²,ãío;´Ñ` IDAT,ËÂÅ‹ýó¥i]__ÿöòòòÕZ­¶Q«ÕÖ›Íæªã8š e n¿CÍŸú¤(Çœâ@à;×2è’½ü&!Ä¡rZ³cSF?šQ[ˆÓgD¼Óé©×ë—EQŒ9räíÓÓÓ„¿c×xÔy?è|°q»D"�d2‰jµ:ärÔʘ¦é·N§ƒb±Ó4Q.—›�=öØ7\×å5]Üì|ð™5üº vKCÒVXa…VXßH2™Ü¶,ë²,Ó F�a,¯Ùlú»í®ë¢Z­"�£ßïGšÍæNH»¯“�ýAaýnA ÿ溮³½½}msssQŶã8Ç!4èÈcÛ6677ýŒ�Q�ô²1)^À^kÁw0*•аººúÂsÏ=÷âúúúZ­VÓ766¶A¨hšV°,K5 ƒhšFZ­©V«ØÞÞþö�7VΟ?ÿ-Ó4-}Û¶{�Ng1‰L†‘èt:Ðu}h´jTgd°ÃŽÅÅE¬­­¡ßï#�ãÎ;ïÄÜÜœ¯‹9èúìÓ†ð]��ÖøtéÒù'Ÿ|òUÃ0øn/æ»Áà8��ÛD"ñ¦h4z(¨5aߌïD:�Îõë'¸~� Ò>½€mÛîÖÖVGÅŠëºÔqœÉ~¿Oy²È´ÍfétÉd’¹ªE™îC–eüè�þ(r¹¾þõ¯û#Gº® Ï-//¯r„Û`ɉ…d´tú¥Höçs€‚YŽ"Ÿ("™š†œž„œš@"^@:š‚¶ë€Þœ>"®'& /6¡F¢(æ"íèÀrdY¶æææî:qâD¤X,¢P( �NÃ0 ÿZókýu2~ i,Ë‚ªªPU¥R ”R”ËeX–5D:4MóÏÓ%íîîbww·òè£�~ÓuÝG> ŒÖ|8!ù+¬°Â +¬X%½øâ‹¯øÅûï¿ÿ£¹\n!‹e³ÿ{ˆ¶mCE?Ùš‰¶ãñ¸Ü‰D^UÕqÃ04 ë;< g7Œ*^ˆN°ß^µ�=1q‘F£Ñâ‰'Zοë]ïúÐÌÌÌX.—‹²Ì ¶ËFDøö5 £ë÷û¾µm�xð£Gù ÍfÓÜÜܬŸ?þé 0Ö4MöÙg=BÈAÙCÔ¥” ž—ß­÷wéûý>¶··¯ ‚0A¡ÌvøÕW_ÅÂÂÒé4Òé´ŸËÁ:PìuÕëu´Z-?€ñðáÃxöÙg‘J¥Ff>‰þ,[…O)g#W[[[ݯ|å+�Y–Ôzð$„7"àݯ(·&aiié ™LæíªªŠÁÐ:A ( M¥R “³¯ ›ðšÂýK0Ú)‰\¸páòÅ‹W¦§§¿yúôéžL&=¶f$IÂ�wÞ9äôåº.E¡ìÜ˲Œ©©)D"<úè£þc Ã@¥Ryåúõë+òåÌÉ\4}ø× ЧA÷º‚  M#/ÂŽåѧðö–ˆÀ…I�$Ç1áô`i;0ºU˜¶ŽC"[Mé„I]ÇÕH¤ï º®ßyìØ1äóy?Ë&�"—Ëù!–|çs”Å2¯÷iµZ~‡Œ­Ÿt:�D"ÁH¦§§�LJ:(ªªÂ4M6ªhBœ�å0¿~ wOƒnW!ù+¬°Â +¬%PëëëW4M[ìv»×kµÚBÈm©Tа]_&6e �çƒð2ê8ÎT»Ý~ûÔüNup$ÆÅëŒË¾7*ñØ[YY¹¢iÚ Û¶ï€}looïÓt0à-Ë2²Ù,ÞùÎwB–e´Ûmþ=h=«T*ôêÕ«g/\¸pauuõµ@¸¢(¥¶çy¶çy6¥Ô¦”òÝ!lõئi®Ù¶}CQ”iBHœÒ4 õz}Ÿo°3bÛ6žþù!]ßù¸L!•Jù€“ï"1íëT«Uòꫯ~û…^¸Ôív ìÏi8È.58.µ�$d2™÷F£Q18†ÅŽÅu]ÑqÍ0ŒÝàµÇ·_u¿ŸªªÒüüü;æççéÔÔ&''1111ªã�·)Š‚l6‹÷¿ÿýøêW¿Šn· Çq`š&jµZqqñ9×uMŽ˜™R|N�åO|‚ôf€ŠÇX~HM¢'EA©ç_‹›lœì0¥°‰¨i(‰Ô…ÙëÔ(ˆÞ££kÂ6ªÍf³‰7½éMdbbÂ'®ÑhÑh“““Èår°m­Vk_È"¯YbÝÏz½îòFìçz½dYÆéÓ§Ñëõöå©°÷•aÙJ¥r©ßï�œÇ®Âó°Â +¬°ÂúH@†q4Msvvvôr¹¬g³Ùz.—;Å@ûì³�W«ÕZ¯×ëˆGPlÔÀð7žtìë[–Õ®V«/K’”ô<¯A™ ”R–—áy:�jµ ÃðC ƒ$¤V«ùy(ü9�$ ±X gΜÁ™3gàyêõú�ë¿ëßh4P¯×…‹/¾Òh4ôÈG0(ާåXäw¸R©ÔkÑhô¼kþý~š¦Ïó„v»}�¥îäƒà�;#ù÷9ŽC¦¦¦Nf³ÙKgçwùùNë„D"üüÏÿ<}ôQìîîúNYÍfÓ¸|ùò_™¦Ùå×¢flâ®ÿY•ŸØ H¨i¤‹‡aF’p‡C1$ûÈÍûüÿSÀ#„XqQAÏjÀ£.(1)«J´}h¦hLMM‘L&ãw?TUE±X„¢(¨V«þµÖ4mßø%CÓ4 »»» „ xnØzd]Ÿíím¼õ­oõí¥GeÆt»]²±±ñêÀ^9øÞaï7$a…VXa…õ³‚c,ì¼wîܹř™™F<Ï "“eÑh…B­V ±XLÍçó‡Êåò.¶§ƒ�¸TgÜÚ¿Ÿ“ìg öÛ°úÚ‘r¹Üïv»¿wûí·ßK)½¸™j=ôÄ”bgg–eaee¶mû÷' H’„ÍÍM†�f³ Y–±¼¼¬_¿~ý†ñzØïôÅ[³ ÚÃÚd±ñ"{uuõÏ !Ñh4úÔüüüGUU�2ˆ`½^G¥R�ã8˜žžF6›E2™ôÁ$/¤gcMìúe³Y@>ŸGÐÊ•·Äå‚ÙùîqÀ±;<Žˆó$Aணk†Ûëõ\UU^‡´±±A˜ˆ~aaa៵Z-Úívÿ¯^¯ç@l[âû¢Ñ(Ö××ñ+¿ò+xüñDZµµåhšfŸ?þQs/ œ'§]µpÛ‚(F~š¤äq5�DñLA¥ž¿ØÉ¨7ÂÐ�„нA!9�v+áѽ7¨ÞOÍæóZ"‘°UUõ#c4�N#•JakkËïr±sÜl6‡:œý~Ýnš¦ù¡ž| %#¬SÈÞ+�<òΜ9sà‡Žã8Î ˜ÄÅ~É[Ùì†äã Vzáý"€(ÝëpK7Y9((µbRÏîék�…ç5¬°Â +¬ â×ó �O«ŽD"H$h6›h·Ûpç] õ-ìuWÒxoTÐ!Øïr44îÕét<Ó4MÖºd1€[­Vñ§ú§þ®,¿ûOA©TB·ÛE$A¥RêõúSƒß7ªãÜmBIàìwnâõ¤Á¹s)¥®an»ÝþÓd2ù³Š¢PÞÁˆ]×uqîÜ9âyÞ+óóódllìŽl6Kƒ£U \Z–…—_~X^^ö³‚�e·Áùd€‘w¼ vp‚ ï×ÖàU*•õB¡°Üív�t:†UU‘L&ýl•Á1¨Édº®ªÕj�­×ëÿ=@ò†Dî· ¸”é±µµ…õõußÝ.ŸÏƒe›X–5dzÀk?Ø{È4Í¡îI<ÇØØØÐûŠ­%]×i¹\^®T*Ž �²i¾•®'¬‘Äãý?Éžüïù4Ndœ€(€ç[;ßls“$�£„ü¡Â¿P³ÇM95¿f·¯iƒ? ÁŽmXa…VXaý­•„›»ŒNÔÓz½Nt]&�N¿�ùàn0KÎd2ØÜÜÄøø8i$�N¿9�NßÞh4>W¯×/ € @¸9ŽÅƒU2x�ùåjÄÿŒ·»»ëe2f]’$$‰�'¼ƒùàµN§³¦ë:ÙüÎ6»½žh–¼BÅç ÐÚív»+Ýn·’H$fƒZ v-"‘r¹jµšÛjµ^;Æ’©Çis˓ɠÕ/ŸÞív×MÓ4ps­�}¼þÜ>Et#‘Ș$I‡ØõbÎ^<øg׌×ò¸¿Ñhˆ@@= ÷øÿÙ[Ÿðñ <À¿ËÏÙ##®A.·€ÍÍQÆN™­�v6›ÍÔ3™ šÍ&4Mó‚qÚív±»»‹ÕÕU_¤Î4_̤ ÝnûÝNžøòͺ®édfgg}BË¿—Ä=þük88ÓåõF3à TêðûePòyJé‡Áž#ÈžC3A%ð�Wêy€gï€bð3ÿ‘â'R }º³üÈà`3‡°Â +¬°Âú—ø3ôÇßóøºÕè^X<ùXø@À „àG ì­!¢’…š�‡’žƒš=„Xv‘ô$Ôä4¤ø$d5AŒÂëiuÙjK‚àÁHæíµ®=5x�7ð¹VXa…VXßQIPäõ H÷_zé¥ íD"‘c;ÓlG8ØI$ ”Ž�.¥ôç,Ëú/�NçFël�›`ô˜Ö¨�ôQÖ®dii©355µ¨(Ê}AÐÌÀ•õÑívÑét`š&i·ÛÙàyÁðîmÿâñzjT ¼>xžG,ËúóX,ö“üH-TU¥étú‡–––þ|ff¦�ÇS>îw=ø\Y–Q*•`šæ¾ñE>ï¤T*ÁqT*ÜsÏ=Á?‡ü¨WµZ]]]]mâfí È�ö#}ø"¢�@ä%ù”R }€XÔ5{ÚÚWÿ³SŸ<üÓ2�÷$€Œˆ R ‘ä4¢™qP¸{ÝôàrŸ¬¢ˆÑäXjv Zù"¼^”ºƒ©>áߤæ~RÔ·Ïý¦gW –°Â +¬°¾gd!ð¸„Z.—ÿS6›ý·ªªz|7�_^Œ¾¼¼ H§Ó°, ãããlgTèv»ÿ´Óéükìï‚0À.`¿xû ûÔà8O`á›ßüæ¿ûÝïvAøaJ)õ<ÏX<a"k^÷Ñh4�F‘ÍfqôèÑ™+W®¼H|I°ÓqP½‘?Ü£ÔþN¾¦if"‘€¢(7E¥c€T*¥È²í�×}t:ìììè+++õd«�[;½ñ �J¥î�F£BÐ*™w[â�‘Á±X Ñh”]Cip2€åQJÿqPëS¯×‘N§½x‰åݱZ£ëßúÖ·žÅp×ÐÆhíÐ`wÿA™é'@è Åí™�(¹É © �]€.)úíÔüO}ÎXùó%ç;ßý½ªôሠôw@Émlõˆrñ±Óeí/Hï÷ûc¤ÕjñxœuNH·Û�Ú¶½Šƒõä °z� ’âc=@X^^¾‘Íf‹¢(Æ(¥ê¨Q#¶Ûo4MC³ÙD±X„ªªìu©»»»[ý~¿Á�Ì x56r� þ `D^ç{¤Ýnoäóù�D"rp ‹�B–hmYV÷òåË×§¦¦Æ%IŠòà�‘.>÷�å~°ÄëZ­ÆÈ"†Ç¯F‰†ßH÷ƒ¿6€˜ÏçH¥RG˜öƒÁ‚ øbt¾A)ê¾A4 ^d(ªªRUUi,£Ñh”Æb1šH$¨ëº4™Lú#GŠ¢øç2•JùÂëƒvÿu]ÇÙ³g_œ~¤È'l5wržÒÏ�Š�˜™´:â  Rh”wÚˆUDØèÖàq^OƒÙ¸†ÁL-¢MQ ŽçyÔ²,º»»‹\.G-ËB¿ßG2™ôµ7|„銎9‚……‚à‡Wf2d2ÿ}Έ+ ±t=H³Ù4nܸ±}îܹobÿ_0xÐà¥æŠ«ùSï&‚ø_AÈ'@Éi 2PÕg[7_½¸GJÈ!÷C ÿTÊ�L©™£›Rõvéë|†ü½,5wò€? RHJÉé7Céž±�ON¹µE¸eE†?†äHcpº•½Ë@!¢ò�[ÿ¯ÔÑ=ìw# +¬°Â +¬ïº¤\.'»®KlÛ{½ñ<<ù ¬®®vææænd³ÙÛ™;ßa;Š¢øàĶm‡ºZ­b±r¹œ¬ëz£3"€ƒsBpó÷³:fëIˆO=õÔ=z´pèСO …í¸37(–âlš&b±æçç!I,Ëb{zèС÷ììì¸õzý2GÜx²ÆK‰ñÈÆ­Ã[õ‚{MGÓ´Ï%‰_–eÙEÑïØ0�.2™ÌT2™œ¶,K?}ú´«ª*–——Ñëõ|€Îw@ø”ïN§ãgƒìÅY u{FÝÞè¸_AEÂ�’ñ7I’ðàƒâío;>ýéO£ÓéøÝˆ ;O†oõ5ÿ/»â¶˜v!Øñz A‘eñxœ]³‘¹4Œœ»ºŠ(ï}A›·ÂM“ÝÀrô œ`�rgšžçæý’Ù{uàº}]CR$Qêõz®aB<÷E!’$уÎ={�‰D<ð"‘LÓÄòò²¿Ù|¼¦i”¥ªW*•šã8/ïîîj�F£ƒáàÍ ~ÊàŠÑš˜¸ó$ˆøŸ¼Òˆ¦ Dd"q" JP·?Ý T%ÿ Dü¨š?ö{rbüwº›Ov¿Ë÷ãßåú@ ï­Éb…ÈÞuñ×öFôöÖ [/ü[ñæú¡ÄC4;§gÀn-î}¼aZÍŸxÈØ¬üÅàýjsŸÑa'$¬°Â +¬ïž€LMMý¥ÔuÝnWð<ï+•Êy×uëØ D×ÖÖ …B±XlhW˜¶caeñxÜßMe;ÚÕj�N‘HäÞD"ÑÒuýYœ�=Êçõº ‡^bò­ï"Dø<J7 –„¸Z€˜ÈBQ’ä(< �àRÀqÐïkpŒzÚ6ú® P ’£À¯‹râT|öÝŸè®}'ðYòݾ7à•>ü�wà^º§×@$=)ªÀs�A×kà F` 0°æˆÀ\Ö$ñÂ,úÚ ¼~D�$ä@”ÇAmö& IHXaý=«ÔÑŸV‡)p E€ˆ{c¼ÿ�½7�²ä:ëß�íE¼xk¾Ük¯Êª’¬Å’ð&Œ��7l ¶å¥=bÜ=Ó†Ææ à 4뙦™Þ†º9Óô �{è4Ãflƒ Ç`·,Ù²äEK¡²,UIU•KeVîùö÷"â~óGÄ�w#ò¥$¬&ãœ'eU½|/âÆ�{¿ß÷ý¾ßOÊ€ ~B;Ëí¥¿89<þvH£ÑMÓ” 'êõzï÷}ÿ�KKKOÑ›¦ù“ÕjRJ·Óé ßïcœ$¯!333)…&¯ ´¼¼ŒF£!�Æwww_³µµõ¶Z­^¯×ÛÐÓƒšR9WÀ !*zÐ{ùòå/ÏÍÍ-”Ëeö<¥R)¥‰©Ì®Îõ/ ¨T*0MS6�wôz½Ín·{Yéݼ÷¸†ùo„èAS ÚÙÙéÌÎÎ>³··7U©TP«Õ û�ä½N0ü‰Ÿø‰òÊÊÊÃ¥Ré¯n½õÖ7-,,8ºT±º�Jzײ,xž‡r¹lã`•.àùû?Æ‘Š„mÛ³DôÇqR¥haÊ\ñ¾ûîÃý÷ߟ1¶ËËy÷LLÓDc¶ƒƒA¦2NŠ×qLOOÙÞÞ~ßöööïõûý6ÆúŒ°T—?{°ò¨Mq§Òu<*}Þ`p<“ˆ )(qS;á,C@˜�2D¯×2 D§Ó1Ž?.Pxúé§qòäI2M“õëÔûgz½>ÿùϧ㒗'Ö½cƒ�š£:èÐ_ýÜÏC!™µ¨|ü5oŒßep9)Ë® \; YtÁ,±Dˆ� HŠ2 Ó‡å–P¨Îc°} íÎ2XŒ&Þm˜ŽçÍ}Ç»×ØÆø>­M]9süÝ rÀ aUà”'bIçtQòŒ�6Ç”š%ÅNÿ©œ3@–…Bu�µ‡Á,AÂz…S9˜öw’ IDATuÇ`÷ë�`¼Bßáqx¼Ð¹+(2PPLž^$R]w˜¸×|æcƒ¿…s14Üðûz-åQkÀ ƒÿŒßøò µ²3Øø2¿ÈÖ‹2Àï!‰_Dlnì‘Á±äÄ퇒„- „åïVN¿ó¿“QðÕÖÕ?í¿×ÈÃãÅs†aÜë8÷z½TŽÓ¶mÓ÷ýYfþ®ÉÉIÃóräÈ÷Öjµºçy©jW¾1[Ï–ëYð��²,ËoµZOb¿T.?G…&^/¤R0®r žçÝ^¯×�)ÙcE«Ê«Hå^dšæÑååå‹Åbqszzú”¢!)À¨_³ê•év»§®]»ö¥\`y�ëû¸kÖ6¾ïŸ›ššú—SSS†ïûéùëÊW:E.玲W'òMçãèVù£ßïC%Pc$„Àää$z½J¥Ò>ÑØ ‡C„aH“““v¹\~™išbww÷2²f’l•ŽJ2 ?¢Öñ²? iXIó¥YiEÎ'UÝОÒÍSÀ•H𦿗˜»ï-¡½ó ˆÇ Š®húý¨Z­F…B!’RÊ‹/ò‰'xrrõz=ßzâ@}·êR÷!oV™ÐöäÅ‹m·ÛŠn¥÷yt1^º:–Ž¿á¨öa2¾B ÿ S§ RF =-J¯YÖqöž`ú5¬‚Þ¤€D ÓdØVÔÛþG=~ÏÚ·ìáÖo6ô›JDvqV±½n4FÉœHæÙȼRŸ/¤I>Ç?nÝõ‹¢x`LÇ ÛË_ÀsW@�Ãã¹á—øWü€Ÿ"àbƇ|ˆ€�ðOˆèƒ½Ñ©ŸŸpʧì]Š@ýM›bVÎÜsàЯøA€^ÊÌ5<<<Ä?OèU ú ˆÞg:•)§râáÁîåà€xä[樞¹§X¨ßüÓþo}€ .À6Ç„ÌÑ’ºI±À¡ÐÿHÂx­S?7ŒÂð¢ Ú"z±­•‡Ç‹€¼ìe/»WÁJËss•J®ëÂ0  (—˨×ëÊ$•@U<}!D†š¥óÊó�üÒÒNœ8¡À ‹Eø¾??==ý&ÏóÞ^.—Ÿít:½¤%ßgñ\ dÜ{Œ1õ­­­/ŽÉþ�3P|¡`ä¹4ý�ÉÉÉÊÄÄÄù¾Ï |<—oFŽßo0ó`8¶gffŽ{ž'T�­ß3h&A&_»víR†md�Þó= ]·>Äôôô©z½þo�†Ð�ïôóU”+]KW°Rý*aRòJÿM½Oÿõ³ºŸ½^QeÆM}·ò·¨T*ÐÑ Òe› X,¢X,r±X<êy^°¾¾¾”§˜Å™Àa0Š–ƒÈ)g�k œ††ÚŠOih‡š„Ñ¢+eq„áÚ#èu6@BÀ1��mÊ–e™‘mÛ‘aÑÕ«W££G�ÊF£ÁÊÿ£\.§`CŸ3U;òŠiëëë[�?þøã9ðÑÕ^yõ«@T˜z¥°ÜÚpg|Ñ&*åc0¦Ž€!!™µ‡‚@æ”fñ%3à8pí:†� HÙ�@ßfº_¶–5¼ü¢   õ› ¿ÈÌ x“7CÊ^Ì׎æ�ÆJh€wœîˆ C� ½¤ …í•?Ã8zá!9<‚­Bý滜úÍÿ�€_p'S\f¶˜ˆM0M ”œèÍ$ÌrêçW�ÊéµÁîÓ½ýR ßÔùÔ õ›Àèe S:" €ñB"q1@¨x5„õÃNýÜeáM^[‹Ï)òw6îç|Š�÷PM»ÁLn±Œ‚_ƒQ¨Ât«°½2œB!^;£Qû-Çz—Uœ>m—Ž~n¸w¹‡ç•C9<�oì0kµZP¨`bss3­†´ÛmDQ”:$+e!6TãnÞU<ŸIשL…B`Û6 …<σïûT­VÑívÿ—F£q}cc#Z__ÿ·ý~¿-¥ �mzÎ÷‡Ð�½F€÷¹Lõã¹÷‡Ç_ €‹Å4Ó](Ðn·áyÖ××E�ô,{Þ'@—LUÒ®:øÐMÍTOA»ÝN¥?Ã0ÔåRQ,y8ÎV«UÌÎÎþJ§Óypww÷ÚâââCš¹,\àøäääÙb±!%f}X[[xq#}’Ø#Ç4Í©gŸ}¾ïƒˆ†!Z­šÍf¦BÄy³ÅJ¥‚ápˆãÇ�Ou»ÝÛÞÞ­Vë£×¯_ÿ€--(WÊHò`¼ë0å€ yž7oÛ6[–¥Tªà8Îóúf(¥2×u½Z­vúû¿ÿû Ÿþô§áû~šÝÖ?Ã0Œ$V«ÕºaNEqæ*Û€¯b�ý44­©©©7V«Õ\.—YUŸòô&ÝgBUÚôù¤yKðêêêgWWWo$c½ àaìç¦[³³³¯*•JœÌ_2 ƒºÝ.|ß?†!)~éÒ%”J%œïœ«žy÷Àðª´_δQ¨ÏÂ.OAÀ¤Œޤ7Ê€ Ï9 ž?†(l¡¿³Œ`g f˜ ¼Û²K’,üCÒ5íï„TÎÜsÀA\‰Ÿ·TCqâ(¤(! #1XªZrÉCÄòP9v‚ÎÚ7žE “<Ýbgþ³ßþ®ÞêƒÍøæ|Ó"4‡Çá1 ®ë¦2´/^L}N�:•‚†áp˜é%P`œ—J%Üzë­ØÝÝÅÓO?� ^T&[½�úý>¶¶¶°±±�;î¸#Íâ+5ª àº.|ß�ƒÁ+jµÚ+&''ß¾»»û`³ÙüÌööv˲¬°Z­þx­V;R(U‰QÚz½ÎÍfóû›Íæÿ>MÛ¶¶Z­²eYžªvè×´··—rþuð1® â8�¢(’õz]6›Íï-‹oLš—yww·5 v´ K>OEdàWÉ1¸†aˆÍÍM\¿~]¹ŸÃqÌÎ΢^¯£P(@y<¨,¶º ¨à›nºéŽ�}ìc)åHeúÓ`%§nV*•fëõº»±±ÑJ@�"!²FeùꇰmÛ*•J¿8===[*•Xï÷Pc­WÏTp«W¤¸ ‚�Ng°¼¼ü[[[;ïÊ®oP½ÕÕÕO¯®®êÕ0€Î�;wÌu]ϲ,\»v ¶mcvvåråržç¥A·Þü®ÒÔøè´¥ä<£S§N}H™þ¹®û{]D¦Lu%p¢“Ô:XçÂhÁ¢’é•Ä™�õ±Ôo&› 3¸»�í�cî‚M}¯à7nÜàjµŠz½ß÷Y/*@}êÔ)lll`ggBÔj5lnn×Ï`0@³Ùä+W®<ðÐC]�\×E¡P€ëºîææ&Çùg­VKAðÀ•+W¢ápø›Z–5DôC§2é=-i…ã8?»¶¶VTFy:`ºqãî¸ã|àÀ'>ñ <úè£cý�LÓD³Ù„mÛ P@T¿nU ²m¥R‰¼À§4bi¿Ð®I¿LOOÿ\½^ŸU óùž Ý�>bssók®ëÞlÛv z½^»×ë=zõêÕ§µ “w¦?H¤@0–——Óó¼÷†Q ‚µZ-JPÁq!R`«h‡êœôª‘ú» 099YP½TA(࡯Ók‡& PtJ܉L ˜Ñn&]+|çË4ý Ð\|A DÄ•¢Ùnµš\,¹\.K>ÔµMLLàèÑ£X]]ÅÞÞ^Z]RTÌÁ`�¡Ç©êÇ`0ÀÞÞž±²²òÀW¾ò•KØßt®«] Ç€�QÑ? ÀdfX¦³<�HÊ8lЂäq Qœdã¤�€tL”kç±µþ0˜$ Ì—›…é£Agq˜«N ¼(T�F¾/̱2œê âTšYï•!hŽ # ’ù·ì˜Êd«æŒÈKˆ  “«~Êà äð¨.¼[øç z…šUf±ûðbª•>×ô^Ë´`Ç0á£rä¥è4/a°¾Wâ˜,�ñŸ,§r$ f"`¨’|SRd N #YÌø©0`Ë(N�� '¡{�ž�ñÍŒ*äºs0ç\´VÂ`"&ña»zì?õ76ohIŒè Ê@eáÝ/ðœá6G8-{ÉÚy�—ÏÜóÂàWšW?Ñ}þä}€wÅžXœÂŸ9‹0”é/m5é™ëK@c9hœº —‚Œ0 â—�ÆKÿb°ùØJ.éwX9<¾yEQêÁ�¯r(r�O3cggW®\Áòò2†ÃáØ÷23Nž< !DZIP®Ê½^ívW®\¥~Q¥U‘ˆp©TŠúýþéN§×uY—ŸÕˆ¢vÙ¶Ù¶�n·«ë36´…pww7£|$¥ÌŒƒª(É^ß÷13™úµµ5977'£(zU½^G«ÕúŽápøkÍf³»¶¶ör IdµZ=V©Tìv»ýžçyÌŒÁ` Çù×;;;Ôétžõ�ææÅXÞ],ƒA¿;ô<7ò}_‹EéyžTŽð333<;;‹¥¥%ôz½|t»]ììì(cKR÷ €RýZßÞÞ¿øÅ/~#Ÿ�çr7×·…Êéw8 ܪ®Å-6À‰E¶(RzÐxGR5¿GÿÊa-ŽŒ&€5ÓÈö^‚nä*“/ J­T“;lææ‹fG�"O°BÀéc¦òÇõÁrƒY ÉËѪŸy‘�à äï÷1àUóÉ,øðgoIÌQ:ÏÆ9 �àq!ˆP¬œK‰áÆRR E†x‰Úψ ‘Õ9öj–R`Úð&OCÀKùœú¸¤˜a9Ux�´Wÿ*ññ4ª–7ùË}à'ûJ€ý4`®.¼û@?ÍàÄt£}6×ÎWpƒn"0Ø´~²ræ]?Å}¬ùÌǯ'Ý~À•SßcÀp|":ÆTgj9ªs œ›ÑJÁ¹dÒêßB.bêÔmXýúC �0MËküÌÐp‚£„û=J®~K¯›‡Ç·(ÙÛÛC±Xܘë?w»Ý}žº2N³ÙÄŸþ韦Ù_]þT½§R©¤ô+eò–TP,Q*•P«ÕÐétpýúõô{o¹å¨&i½WD‘R·ÔùæZ={«ÿ9<Ôynmm¥½)º©Ÿ Æõ*ÈôôtZ¹Ñ3àaÂ0ŒÔ[¤R©ð`0øp½^§ééé«[[[ÑÚÚÚ/%pÁìììOW*•#…BÁ™žžfunQAü3Ïó¢ÝÝÝÅB¡pÒó<×t®Ÿç“O>‰ŸÿùŸO3Öù{a¦¦¦RÐÑívÑív3ýúøèÀ«V«ÙwÞyç?ØÞÞî,..~BJyµT*ýàÄÄÄ×uKjÌ’óÇp8D¬Ìu¥«ü½ h·Û´²²rßõë×W4°j #Â~×ñ!²ÎãùêR¾ ¢2·&s}}ýO¶¶¶î˜ššz‡.I¬¿ôj :]jðU ϲ½Â•)¡¿ÔÜ‚Ò4 £‘� k³öwDy?J5cSÜIïÕLñf¬ÜMô÷Ç�<ϓɋ]×åb±(ççç¹Z­rR­d|lnn¢Ýn£ßïóåË—ÿRJ)-Ë’¢½½=^___ÏÝÝ`ð� a: šfÉ€0@¶Vû˜nîNš|ŠÓHSwR㇑BX®X`š.,ËÇ`°…˜ŸFGø¹ya$ñ-ša¾ÇèiíB2Xr|Û1êÿÈ„M4êÐç ØÕBEqãÑ- ƒØ]žâgµlzÓ¯ Z×–’ă…ý¬‡Çáñkñü`ÃAqnÄI¢…(“  ¤‰môlsº¦Åëi¼^úÕóØÙ[C€ a& 8f$Qœ�§‘ž¢%ÆŸ*Ò@Û›= S¸à´ò¡Dh³Î ÿ“4E‡äc å#®c°¾¯]d¼¡0óŠ»úk?¦= €¨tò{ Âpþ#@ßpyÂÂp@†=:X†�Q?VŠˆÿ®Æ¿'2ÿiåÌ;~dÐ^ÿsÛŸývpLuŽÅÀ…! nã8‚pô=j õÒ�kž]{Ò¡¯4 oâ:›Wcê‰ï6¼#¿¶.ÝÈÝûCrx|㈘õ@VWN"",,, ÝnC—:ÍýºQœz�þºýöÛqï½÷âÑGÅ×¾ö5,--¥êXº–’UFx�<òÐív155•šä©Oy¥ž¼¬ëææ&&''Sº–˜+ 3£ÛíØ bêõ:<ÏKÇA§ßT*,..⦛nJAV†ìû>Ap¬V«annîÿj6›}+ÅbñDRÑ`5¦Ú5°çy¢X,žh6›¬€‘^¡Ê)Õ?aÛv$ë/Ïó011‘þ¹^¯ciiIe·aYÖXÓ½D “““¥éééÒÌÌÌ-//S¥R‰ fÎS‘°X]]ÅÔÔ\×M?W—ùM(=buuõókkkKc*�ôê $Dêd¬¢@,Q¡Pú¾¿OÊ8ï�nÛ6Êå2�nܸ�N§“z¥,ªüÐ;ç:ýÈa`Ô�!ÒDÓXóýÕŵÀ1]Î)#›ª"ô˜gMp‹SØS™A!P,ºQ¡P�®ëJÏó¤ëº‘ïûÑñãÇ¥ïû¼²²)%«{Ôét°±±AkkkÛÍfsåK_úÒcP�âYð7Ž3Ì›tfÙ D`Ä$`™¤ ¤1²ÊŠŽú²A6Ò÷§²Ä:ü4l�é€{A<@2ª –üG£oÅ�´zæ$þ=À÷(•2̘ÈÕ häX™ÈòŽ©éÉÙ? aŽn³0¬âëDu¡5Ø{æ7À2/@qxü=?ª ï¹Àk9éP³'f`�«)Q–jмa¬þÊÍRA¨œ¼á`$È,gh©LA£@^­£¤¼PÈqå#>º¢Ç¾ÊHï<^‚â7øµ—`¸µ ‡€°Š†0ß à’¾n”N¼uJÎïôV]dÀ)Q¨LÁ0m8¾‡P aÀCÈa ƒÞ<ÜEkk=®Å޳'ñ ÇŸ$UÈ\²†!`˜ØN ¡äì¸fF[«•Ž“aÌQãŠõ#h¯}$,À°',·ôư…�b/k”ù’Ããðx>211�n·;Ö4PWê û· ÃȼG÷jÐýÖ××ñÛ¿ýÛxõ«_�w½ë]0 ÿøÇ±¶¶–7ʵ{8fª"ÍfËË˸óÎ;Ó€PÆ¥”èv»xòÉ'S@¥‚«f³‰3gΤªE*ÈVužõz�F�N'å¿ë Lß÷Q*•Ò€sœzS½^Ç•+WpöìÙ}@,¡çDµZÍêõz'”ð8³;UõQ�ñÎÎN  ÆIÔê/E›ÓïG¨T*XZZJjÏóÒþ¥ˆ¦H¾ò£¼^,Ë‚ïû²T*amm-ýûqDÉÓîíí¥¼>úý>öööÖŸ|òÉûƒAû]´‡ÈòMó?ëwPoM^‘K™T±‚<°÷²moxÃàº.VWWñÀdú£ò•Ãg—[�gVÚsñ†f R¬CÚ%pŽbg¹C†@š!dÕ�°Oª@ ÐàW��9  C�°M×u{®ëF…B!,•Jщ'$ñõë×%džÃ!Z­nܸ1xä‘Gî¿~ýún§Óéîòcä@H0t?â’ Kâ …Uš^cúTIsƒEâþÍš¯ŠúŠ`Ä”  ˆÝ˜;IçÓßvG‰'B1©2è“Âð+`¼—  Ìü™›a˜&d¦s‰Å>nK&äË5у®d¾'Ox?v.}<¡gH�å¿Ý©ß¼7Ü[ü aúÙ~(lŸ Û7‰¨ÏR½Õ�¿ŸÇë”À€p]ŠI•W¯¸©ùEÙçƒd½ñ‚ &l»‘©-¨dã�é‚4ŽÒŸSuÁ¤ºÂcxZ¤õE¥Ÿ¡�Ò…U„Y¨b¸·ª*‡¯PRÁxaúåEa~„WÇ% lõé°{2ÙŸûƒ´X‚à„ �7�Fí(Ú«O¡ßÞõ«9H”¼ –Ãp@¦�êDCµµåŸëüZ �åûÒ;§= Ûu1èuã�ö[|#ªYF\ä|/€¼ùÍoÆG>ò‘Là˜¯¨ ´Óéd¨Izæ7¯d¤€‡ò èõzX^^ÆüÁ ^¯ãÖ[oÅë_ÿz†�íím|ö³ŸMýGTå@SÃBâ‚ÅÅElnnÂ÷}ÌÎβ,,..b}}•Jóóó™¦Ù(ŠT�‹(а±±�#GŽdú’&õTáª^¯§€K%Û[(ÒkÌ›ö©`[519r»»»)…MU|tªÚ8v]mIQºTe¤×ë¡R©dÀ¡¢N)p%„H¿bÀÇ IDAT+RyφÁ`�Þ³ Ðëõàº.:�ÊårúYùÆuEÃR�ïºÉúú:fff2V§$©ûÑétRÉ_Õ{²»»»xáÂ…r�lÿ€lºNéÑ>RSjbéòìyÞ+'''3À+ÄÕµõz½¨åEô÷1ƒžºÖ:1 ¥\Ç…[;†¢ìÂ�ñg©Š Õ¢\ ©³BÛGÁ�ÂpØŒ•ͤáÙ¶½W(d¹\–Ç�—AÈV«Å¦i"Ün·±´´ôÌÇ?þñ/cÔÓh@P!jœƒ1•ý=Ïu?’sWeÆ8&8 ‘ß(uýeUF�“È�YÆ�C° �$Ðw1êiÚ§ý­6£WϾgÀÏ8 ÐÏ�F‹³qdzðgo‚Y(BFዊќ Ì8ìÃ~Z�§)‡ñ¨žÁÌ(Nžã{±wùãIo“°ý{½©Û^Jf! ÃŽˆ¬ˆHH±PÛ>sÏç†ë_ýH¯y•A�ƒÃ`äïÃAø¶8~0 E�aƒ#9¢”Ò˜5Ú\Õ )3�F xœ_yôØës�sDÇ5b”ß`¿ö²þ™HJu.R¦"ÁjÌ ¿õ ÈtAÂ8Ÿ�ÀÐv§~àWƒ&\¿‚ÂÄ)D–BÍVqy´GÌ@þìm0öѾñl|«}ºÅ"J�9„ˆY¦í ˆl ef¹ϱaºøñþ}d<˜8r +O~%®>æyÄÖü>,ÇAÀÃãð8€t:�T )8ôìy†ØÙÙÉ4áæ«!ãŒÊTÀÜívSzËúú:î»ï><øàƒ˜žžÆ[ÞòÜ{ï½ØØØÀ… påÊ´Z­}Ò¼žç¡T*¡^¯£Ûíbmm ;;;¨V«8vìØ¾J‚€—J%t:�”b7nÜÀÄÄæææ2ÕÕç1111¶@õ°¨�Ú4Í”òešfšñ¿ï¾û0??�cÇŽ¡ßï§”+ª”® ¥ƒ¿üØFQ„­­­4øÕ«A€ˆ0==�áp˜©B( †á ÙlÚŽãE™RF“ Œ)£›*¢d[ƒ Ø§Ž´¸¸ˆ³gÏfÎ_§¨){íÚ5ÌÌÌ ×ëÑöööÚÅ‹øÐe\ûÚkˆýýzp�ɼˆJ¥‚ÝÝÝäå+QÌŒåõAãÆžœaZ(–¦00Ì$�É¥Æ�Þ0¬µÒŠt™Y�›lX˜š»ËWïH ”†eZ6ÊårtôèQÙn·%3³mÛAÀ­V‹VVV–þäOþäKÚ=ЫO Œè'}ãI«"îÜ·;–S-‘0Ë$ŒrL�އ…;Úep‡í“>¶$‡,M‡3´¤�Òt@“5eï‰�ˆ"@F`’Ž, |ئ7_¶+ÇgÍBm†5OdتÍU;ÿù$3?½�öµ? ÿº‹oíì{ofðÿLÀ9î¶O#ƒ±�±DfÅés°2 b §I犯Y'Ø“N½HlÞ�õLÉ'ªã’ð§Oü}h^ûL¢FÄ‚ ãÖÔO=C]a€è^{úÛþƒ=uׇügÍË][$ÿ wÆ £XÔ*Ú\#Î(`Åÿçlo’bhæ|‘H«P¤°<¥ Ž”àÔgŒæpòË”mT�ÿ¬oúbÃû£è$#ÄÚZl¹5pÐKúQœ*€ €°0ý²óøïÁ ¯ú "¶!ÓÄerž¬Öq}?¡³P2ìÊ ÔD ÊUD(¡?4ÈàXŒ}”È ëO{zÎ êRŸÏ4fƒLïÉh ‰‡BB5p4PÿXL®5Â~ ëaäðxáäÑGÅÜÜ®\¹‚áp˜º;z«ÕJ÷ùùùô=ã*" 0$.Éèt:<IŸ© ; C,..â#ù¦¦¦pôèQ¼ímoC«ÕÂÒÒî¿ÿ~´Z­4à×eyK¥*• ,ËB©TJ{BòMÎê<ÇÁââbJó<çÏŸO«ÛÛÛE)ý¥èJ·ÝvNŸ>�x««« —zŸúþ……ôû}t»]<ñÄ)à¸ë®»ÀÌØÛÛKA–Þ¯W’ôj”ª°‹E¬¯¯crr2½G½^�«Õ*ù¾�~¿Ÿ,Šæ´³³#?]©T×uyrrò�žçÑp8¤ÙÙYT*•)0¥÷À†�ÉÉÉ8Û¢�¯ú¥¤¤\îu×põg5Ÿvvv°···rùòå0jdVÀC9hä!‘÷QѵȟËÜqD^"GŽyëÙ³g_755u¤V«±ïûéœTU õÒçu³ÙLÝÒóïS¯noh~ýjç3 à˜.¼òÚ¹4~À©��ã m&1ñ%ݰ‰9Ù.3–qÉ&Î0KÓ a #˜…‚g4 ÞÚÚbÛ¶¹P(p¬$§¯^½úÌg>ó™‡s€£7€cÀ‡Àd”¤?÷òŠY¨|7“ñ"º“,˜À1q:qŒ‹äøæû Ä�õAІ‰FÆe#3=ÖûF”ÞRNvUJùÐZN‘dØ…´’ÔbÄ,#`CXÅBýüë-oæÍd8/!a•@¢�©=pÚÚ2D Ä«¦]ü½Ê™wþVgýÉkaë8ø< ÿ4€  ÌÚóBd¦!Œ4úbrˆüÙ›aÚ.dò�œ–É(mÈ×mÎYŒ°Aæ‘HÓ¤C�úž¸(H úˆ�æòq�øÉy‘Äç@ ˜Døu€®Wîù�½Kôóc²¢ÿ¿(Õsï%Šc;­–\iŒkyïÒH³%�yU¦0 ~*"ÁI­×‚@,Sð¡íQ´)Pdü8yþ5iõ¼SÚô¡†‘”9ƒÇí 麛å!r òD:6J{ KT!£(²Ué°2‡¦UüÀÒa’0Lþô9„p–Ú�¬ä*Ù’fœ4 ¤*å2ù'ÍžÚâ‚Trƒ3½_£&~$Þ@ê[IˆÑØk=02 (ýýá‰÷é�å$�¤–„Rn¿"ë vxÏ@”lî‘#GÐl6±³³ƒÁ`€ápÇqRÚ•ê˸téz½^jئª:ÑŒÊÄÆÆÆ•G}ôò�wÞyrvvµZm¡T*E:…Ç4M\¿~kkkxôÑGqÛm·áìÙ³øÐ‡>„gžy×®]Ãc�=†~¿ŸVDT X­VSGç¼"•:Ÿíím<õÔS¨×ëȯzíììŒmÄWv h4˜››Ãúú:Â0Ü÷>!Ž?Çq01Q¯×ÑëõÐétðøã�Ã÷}ÌÌ̤Փ<ðÉ»˜«÷)é\"R”*Ñn·—[­Öe'ƒÁ Û¶ÓÏ‚ êõz—›ÍfûÚµk ÓéHüÌ3ÏüçF£qòå/ùë ƒ±jXª¥ UõG£0 Q­VÑn·áû~ú÷ªG]�ª.­¯¯_¿víÚýQ~9ðÑÃx‰qUŽƒ€G|¢T*ÍÞzë­¯¨Õj˜žžŽÊå2‹E ´Ûmt:�ðê½;ú½È÷¹ä{ž®]oMm¶¢2˜†ƒ©ú´�Ämw”ÌlÂñF:2Œƒ®ö”d¤dâ�¡‚lz†«P�m}DBËÚÜÜäb±ÈBVÏz«Õ¢gŸ}öê¾ð…/b$£›W²`¿¼±^}ŠÊ'¾{NXÞ÷ÿˆÁ·C �S†�ÿÿ8€·ôT|O’¬è°—P€h?M(­v$SÎeSc�“€…8xʃAÐÅ { °Œ8LoîVËŸ¾Ë°Ë·@[§u‰$pâ4p'†Éà€€Ÿ'2Þ_œ~Éÿ‹©óÙ»ü±¼ÀæõêÙ÷”ü@ß7š¤d9p+Ç l¦S†°Ì”» M– Óq?¡C0¤¼pâ ‘Ü ÖÕ®´€\]oFv,áb©*ðgÏ@X6¤ìô]�pAV1þ,9äƒÖ.ÂÞ(Y 9ÿ¬ræ]§dØý±ÖÕ?ß3$c@ vö½·�ðnávߦ—Ƙ1ø« ºX9ûî `Ü·wéŸ8 þ&Ž8‚e–䥀ƒ’ù-Óe-¶GØLœ¡9�æ2²êSi,,’ù+´¶0¥ª5êËö5ÄIdØ`"ý]�%ÕΩÃÅÏ~ `HPÜ“Gœ*n± ’F{|Ó›-Co‹‡Ã„?1 ‰òVÊå¢L°ÏºØˆëEɹÅë©Qr“½b¤lGÙá¢Q…˜YWùR¢'Z‰³‰R¿›VJ5ioAÊ/Ò~²W÷¬™ÈÒX)X‡Çóåÿ Àëõ:úý>ÇÁÞÞÚí6&&&2�ßKKKh4X]]M=tÙ×^¯‡­­-ùÌ3ÏüÙîînŸ™£‡~x�ˆäüüüÃçÎ�ûžÙÙY³T*¹ <(@†!yä\¸pµZ wÝuî¾ûnÜ}÷Ý©‚ÖÖÖVÚØ^,3U•|cx«ÕÂææ&æææÆš,ªì¾zÿAÇp8ÄO<�Ó§Ocyyù@¯fN«4Žã¤`I©{©ñÝØØ@†¸rå Ž=šJÿ6�ÔE—42 á¼··,--ý×^¯7`fÚØØøJ¡Px̶m™\¿ ÃP& Åc �?~³ïû¬ú:ªÕjœéUpç�‘ê)‹X[[ÃÙ³gSA>Ô5(5ŸNÎaˆæ#!s•Œ!ãÀG*½[(ÌS§NU�Æ/ÍÍÍÙµZ-R’Ëjþ,,,à‘GI�î8@;N(@ïwjµ{Æ—žÜ=Ï pí"B¯–8újÅq]n—G$cJ²m @Z^š/C[ŠÔxNùñF"–SÅ0XK¦k+›žçN“mÛd% iÁ<ðÉõõõV2Æ=l"8¶úä4î4ÜÚ‰·@˜ÿŒó ˜ª¶/„!,�°@†ÇÐÑÌ!¢h–‰yá§üF¯½»6±/>%M!‡Ò=™2T�”¤rÞéæÌ�[K�²Ä¸Ð°‹çŒBíf¶¥¶_a80mŽ]ƒe—`ÀJ 20ý]a2�`¦óDøßã•Óß÷áîÖS_ v¿=Wp];ÿ^‰_fÂ÷ªàC.¬Ò ¼ú !!ej¦m† �Y‰Ûô9nª<¢¡¤°B¥3żÆÞ*ñûÓjš6 ú~aº¥Âô+>пñpoL–ô›TªçÞ+8 æ_d›‰Q ¸x˜Pså„‚CLwƒq7�$ýêÂ{þ„9úéAçÆRõ ‡R¢ß|D[‘8ý+ÖÜ'ÊòüÛZp‚�3zBƉ™$T¥SU³ˆRÎ4¸�è]ºü/d²îªä…ÔTõR0’M€(jA1 yd|Ê Ä=e@\±ô¬âÄ;!#°`˜†€U9Ó®ÒÅ{$ ¬ò™ ?iYn²'¤²ë#>j ÀtŽªZ9›ÈRy}ìÓI®%~8]JG=8¶ÑIzè"€#ÂÈ”TõÐåe¹�I�ç zö6‚ôÕï÷Ñét077—¾º"ÒåË—qûí·Ãqœ4àT}Ýn½^�¢(ª1óRÄÌ,//GËËË¿€_óš×Ü\¯×_911Q,‹Rª*0ñçþçøÜç>‡Ûo¿§OŸÆ+_ùJ,..â«_ý*–––à8NZýȸté*•ÊX“Eýµ°°€N§“ šu*Txê©§péÒ¥4;ž3£T*áMozüq ƒ L�‘ R0255…v»�ååeÔj5;v ï}ï{ñë¿þëèõzØÙÙÁúú:ºÝ.'Uß“[[[×ççço²,‹¥”6úý>߸q£ÕëõWïÃ~ ÕÀù™™™£¥R©¤‚o5îªJñ�ú^8ŽƒÙÙYP´0˜¦‰½½=¬¯¯c0(°JBÖÎEox§zõJJÏ)ªËîÊ›o¾ùGgff^===V*xžeè¨_ïwÜ�¯~õ«éxèsé ÁUñë÷û¸ðõÍ…VOz@�‰zmmEÐÉöf”OSûšD°ý,0lÂ<ò²ôBG\ääâUb+Ù¨$YðËsè´®Çà»úƒ¡0Í>¢(¢n·;¼páÂ_®®®vr OUžô¾›qÕ'xóßa8þÌ�ô“ *«@@¥â,·.8 ,ɳ%®ÚÔëcÐÝB«{=äY¦ÉÊ@öîÝ€Ù˜K´ùGAâ\ˆ£mmûšô“æJRE€~Û׿˜™ÂtoQ|k…ן‡_=á•a€C¦´Àæ òä`ˆ°µŽ½ö" `†à¥$Œ?tëç~Xv?õÖ45dÆ�ÑPrâdáO½–ç�£!dÈ™^—4é‚�¼Å‡ õXãtkãB2ùŠiŠ—ÄpG#Š[þÉÒ²©@lM@ººŽÞ#‰Ù\ùÈ­´6Ñ^ûÀ}°$ð}¶?ý¯ú7ðãù­üµŒ«çÞWðï¾DÅ4« ‚Fñ�€C‚£‚$XBØc¢÷‰·J31¬7þlgñ/ú›t±ÿ†* i¢=’=Ù ­šŠ`¿ú3(Û>z¼…Ö@Me\bÚ/™›Jå&_G”ÌY¤�tº†jëpüï”齨§’•N÷‘‚T¿¿(¢,G e"óæ¸WJ¢>;)9=_E³JéfÓ4qá¼öµ¯M«'Ê< Z) ÃWu:�NEבUÕ‰àþûïÌ0Œ Q‰·½ímï¨×듾ﻺážjð~衇ð•¯|år¯{Ýëpþüy|æ3ŸÙG§ÒéPRJø¾ŸéåG³R¯<õFÜŠJ¤²ÿãøÿJmëg~ægàû>î¾ûn|ýë_ÇÕ«W±´´”iöîë¦`O™4öz=<òÈ#¸ÿþûqíÚ5ÌÏÏ£ßïÃu]!Ðjµ†!*•ŠqÛm·�PArûAàÈ‘#ØÙÙ¹uccãSëëë7TÛqœZ£Ñ®ë¾³^¯”R—nj˜)ï�‰‰ ìîî¢ÕjeÀ‡šê¥zƒ‚ €”7nÜÈ€¯ápˆ½½=Ž¢¨ `û¥t#l^7NGå@Ó[õÿ›nºé–jµúsÇŽãZ­ªªGj˜3ut]³³³ØÚÚÚ'¬�8Лüûý>Ö7›ÞWÛGh©«è@¦Í¿iÖ^%åÔ¾¡'ÃÚ‹ŸGäÖÑ8ò²}*Xù S Œ$�Ryk˃ Ñ„…f«çxÐï÷‡_ýêW?ÛëõÚqw»9ÚÛAàƒH»z3lö‡ú9Û†ß�F©z ‘k#D’7•kœl"˜EXå¦z³hî\E¯» )ƒôºÛ»—P-ÕÇE® ‘ã)þÊù…éþéî'C´V/ nÇ€ˆ ¢�Ô<`XeÔgî‚S?†Ð�ˆd˜l°:""DÄ Ï„éÃdiÍͧÐëoÄ_-iŽˆ~Í›ºý�­kk��©ØQõì{ú±4Klz(ÍÜÓ!Èh0ê‰Õ'{fü4¥ q*>ù™/Ct¶¯€Ã–Wf†Ë2 ÑÛ¾‚Òì-° •´I7.# �*&9sÈ ÷œç«Ì! ¥:„ùR4¿ ð0•âƒþñ7~¢}í/JÖ%• ù†AHíÜ{obÆ} L�*�Â-Ãt+0†W�e @e ´w Ûˆ:Ûˆí„.F%ý¨å”ßR>õöïi>û§×´þÉäÖνïƒo!ЀOª°\Åì`~œÁ!Ë{—?Ö}ñ°h‰Uæá`–[ÉÌ�T&B{N™X¸õ$~Tëö@êsd’Í—Q&31¹¶–0év¥œQÌÓ©\c7�Tm+ÖGl­$e ×ɪL²È�$ˆIˆ„:µ¯é[_»U5Tÿ®[+½`Ê_;�í�0QÚòÉ À#È©~iÖS`H¬?ûHÊÿb9ØNª xš’ßé÷ûi†_©Vííí¡ÛíâØ±c�1úË{è†wùðF£ÁÝn÷•KKK¿�ß?Ó¬E‘`|ò“Ÿü½“'O6¦¦¦¼#G޼¹^¯—=Ï#=PTU‘�~ô£X]]MƒG]¡J§ ©ÆmÝŸ!/™ªÎUÉŠ~6Îà0ïà­*ê%¥ÄïÿþïÃ÷}ÌÏÏãĉxË[Þ‚V«…~¿�Ï|æ3ØÞÞN+#z³¿ÿjµŠ~¿ŸVF¢(B»ÝNi]õz=¥�é±.+\­VE½^{µZ]¾~ýúÒüüüÉr¹\/‹¶çy\( ¥D¯×먮ÆË²,œ?·Þz+VVVöù^èï5 µZ †a¤@vffÝn�N;;;hµZØÛÛƒçywù¾/ÚíöCÚ˜ÏçÌÇU>ĘРˆ¥uÍcÇŽýóS§NŸœœäJ¥Õë¡Sþô¹¡îëÑ£GŠÕA‚ ƒÁ½n—þ«­…^'îÙqàTç°Ô”YTÃáhÃY4ÃÕ h6¯¡]°åÝ¢l„~é¦?ËöEa �Ýf×íuv÷®^½ú¥^¯§ÊûcÈs‚§qygßàâ¬Á0 ¨ÕÎ@”ëP7J«+ÕÒ•Š0ÆHŽ0tMxΜÝ*v6ÿ R±”0BtV¿†âÑ—–‘Ɇ޲•ŒUzDШú)!·®coå‹I“j2g!°œ¦N½(–È vOUcR†wF†�ˆÀž�Òü­°n\F³u5¡”‰Ya:¿ê4n{×`óÂö©¶ñ�0c„aÛ8ÓAL¹B¾‚1j¢×fÍ~“sìW#fÄnÊ�õ§°séS@Ø�ƒ.³2pЇ] ô6.bê¶÷Á*T´ÏHSìoÜe�=NY�¤òÕŠpÃ,a¹>ÊG_н«&�Q 2˜ŒÒãµ(™‹øFAHõÜûÎø "žRç%Ì" �£(i€È` ¤Â &,¥IMAÖŽ£ßºŽÁæUH9T7à¼0ìûücßõíÅ¿¼ŽýÒ¢ßHªž{Ÿ ð-~ÀMM¦ùÖ{½RŠR@Âzªzö½(Ãþ¿ë¬_lFígy?Ìþ–d`=ð­D„h¯ x­gÍg0§¼†lÀ?ªTpF¢ð Õ¢Ì\c¡è—Z±ŽFÙ~5OÓ>õÄ Î¨ëº[úyȨ�þîò¨Gƒ‡;D¶† f˜Ž»à Ì´“ŒZ´ŸCºÙBw–²›V‡A½Of¤HšbeæX–©¡*"Ù²²¢õ2Ù^B¿µ™Tµ2è<£ã9öéÃãðxÎøå–[îí÷ûœôÐÎÎúý>æææ2Áºîº­ªóóó™?g³" f¶wvv¶£(ÚDÖc ÈQm¢ÝÝÝîÊÊJëÉ'Ÿ||8ÞAàJ) :Í©×ë¡Ùl"NTÖ^Q›†Ã!vvvöýüt%+Ïó°³³Çqƾ_¯vè´5屡*.A`{{W®\Ác�=ð<¯zÕ«pË-· \.§T5Ýi\5{+3Æb±ˆJ¥‚jµŠÁ`€z½ŽjµŠR©”RˆT@­¨TŽã¤t8å“'O�šš*Öëu£R© T*¡X,¢T*¥ý*ù \¯€;v ÓÓÓèõz¸zõj ´ò~/–eafffß5xž—ú¸ÔëuLOOÃ÷}‹Åùjµv:�N»ZF4_õЩTðŠéééÛæææ¦¦¦êõú×ušÍ¦`€˜žž~Ã-·ÜòÃgΜ92==-jµôʇÞß1Töû}†�ÍÍÍLåJUÈÀR»»»xêÊVãé5¾)v‰3P/O‚+s�åOçXËÆ©†JÑÛÅÖ³ŸEôEx3·CØn&;˜6_*um¤�aÃØ]BoÐ íîpgåÚ“÷‡Ã&€¶öj!kÄ×ÇsÈ)–޼ºJ$~À<À†ƒÚÄ9ˆJÂ1éË$«NŠr¹ŒF£�ïú®ïÂùóça¾üå/ãêÕ«©úØA•‘n· ½iZÏÞëçôàƒ*§r4 ضÍyššÛÛÛûzYtp†!¾öµ¯amm ÍfJEI—é«Ñh T*¥^"ùëP×2 ”ä²ìt:¯ Ó`ª¾]õJo:rà#“•&2ÞÈÀ­qüd¡R= *Wq Ñrœ0}ãÓƒë” -�jåÁvÖK³”�ÿ�½7 ²ì<ÏÞ÷;ë]ûÞÞ{–ž`³I@„‚‚DÉHT"Ñâ¢-)švY•Š�²%ʼn]•D‹m•’”ìÈe'.+¶Š¤dK¢Š‹¸€A;0ÀlÀì==Ó{÷Ý—³}o~œó�û�sï"#—õcNUO÷ôrïÙÏû¼ï³´VP™;�ÈJ÷IWSç'PNGƒä÷àû·obóÊŸ! ÛÉôCÄNS$ L ÷~¢:'Ò§Üç‘Ø=�¢¤]K½ã:r"“‚PØþÕ]xA ƒ@ôq«ºüg~óÒ†j1Äs¦! Źà(Èœ!™€F�o2¢fÄMÊQa-£½­‹h\úb n’¿ E)Þ0b�°Ô{l�ýXxëÏÁt*¹“”FútÖæ1餉rAp”øjVE`TïÃ`ë,HF€!a8å¿à—²D·ôœ£7$ÄøöÇ& Vu•ùc€Œ Œö]ÆYUÝ·õnt¬µ²ŒjË� yó9„Ã&H@tØ´‹ÿ-À¿‘¼J^‹vGJVýÄG 0þ6¿  �òüIÀ°‹0ì"D¡áãã�ƒÂA‘ßËHØEþ©áT?>uô'?Òºò¹+Þó¯Q‘ÇߨC@£×»�jýTâȆ1BSzXÔy¥,z)waÀî¡qåK�és|"dèÇ´Élç3¶ŠFV®dk˜ào@3£‹¿¦‘ͯ:}¤R4÷Ã0è¡ñÚ—´›"¿yÃpæh lÑ(y\é­tÇ©ôúfëá0eAXæäýaj¹«¸¬ œF)î<ަY€¤·pNͼU´o~$2 n$h}Uú.踻|oäé§ŸþÇ[[[]Äá2eß=}úôÑ¥¥¥‹E™ÏÖÐ'!sss©F#}AÓÌX® <øàƒ¦ïûŸH:óžçÝÚÜÜä���?Ĉq-´›¼¡¦#kkkÁÚÚÚkÏ<ó̕ӧO¿eyy¹055õÈôô4O¢S)p!„@¯×ÃÂÂVWW3EºúP…²ÝnŽã¤Ó 5íÐé:êuTq­ÀG³Ù¤Á`@‰ã»®Ëù¢W¥®_¹r3338~ü8Ž9‚G}ëëëèv»xê©§Ò@<õQ¡Z­¦Ô+ý5uPÔh4077—ŠÊ'�]x?Q,3à+BÙn·Ñív'æ]¨ß ø•_ùloo£ÕjáܹsØÝݳ²Íƒ‘d¿[ÃáÐ:räÚíöo,//‡žç}÷µ×^Ûk·ÛŸÝ{⦅žžþ±ééé°X,fÏÔ:ø¾oU«UK‰ûï4ñÈï3}Š£ÜÇVVVðÉO~¿þë¿ß÷Q¯×S�Çp8„"56(•ЏµͶ<9$,Ô¦!…?)KªMùǤGÒÆ�k°‡+ß�ÏDh.âÒȨ•ÝäX±wËÃÒl:À ²ÊdK,ÛªÀS�ƒú‡¯M ò´®ŸøX,KŽUƒYŸCÄ¡ÆMV$f‘ã8[La\ÔÀž;‚zÂ÷ZqW˜¤ë$aÎrÉóYA›"†h·x,.¿wô}Ë�‹Žd"ê‹�2‚¾R:ÕcÄÁ¦µc÷FTŽø†‡Êìq oLH˜o1‹3OøMü1wI€øGÁB€ë +éæê| Mù™—q²Æ/i!>úL8BGM>ÂQ°Xäß–Aïˆ|€<€žUÞ÷^"s>F.[¯þæîÿiX…i$£Ž1Â=¥$|†É#÷ÊœŸêwš¡0P˜+úÏ�`ƒÈxÀ,<öVWµsÍG6×gÒTáüt¼2fiåù{c"ݾG¡&š`ÍJÙòK…YV>„Æ•o@F~ÔŒ_.xük½[ñ¢Îñ—!¿Â?@Ì�„Ó© 0³ Ó)'Çž³'oeÌ¢AÃþ¼ÝU€¤ sx�„ù…ê‘ÿñöõ?»z‡bï?{á×¼ôGgjÇæý$˜lm`hOÃ--¥6·œ/´ÙŒ�‘¯vºEaØÁö…?AÔŠß)ÈM§l¤ÝXòã¡ y �×B{ýyL-¾dcš”èN¦ B[‰x"Ã!W¿9ìÄÓD~ï XöA­‹Œ§.dŒš Ìw_Q.8”³[Dúºèj5©DÒü• xˆzk@a°œøÈÓ83´8d)o�úÛØxñ?‚ÈVû™#ï²F1!&k6ï.w—7 ‰P¹€Q �?þJEzðàÁ©„p}¢hC=ôºÝ.šÍfZÐé®išp ‚@&ƒyß÷ç8€Á`ðöN§ƒn·ûrEÏ4›MÚÛÛ»™£¨I‰uþüù3ƒÁ þðÃÿ ”’õ®½úÚó¼TœÞívaYŠÅ"ºÝ.†ÃáX7¾ß1==�z½ž¾ŽJºVt=\®Š†Ól6à .|}ee¥e?úè£'÷íÛ·T©Tê¥RÉT)]³²µµ…��˜¦‰R©„‡~À/üÂ/Àó<<ýôÓØÞÞÆöö6VWW¡DãúëèÅ´žÇq'БŸ`�>}—/_F¥R™˜{¡¦#y×'�†¦ÒÀ?ýéOcß¾}xÛÛÞ†'žxŽãàìÙ³h4¸}û6ƒÁ›‚‘™™™hß¾}Ôï÷ß¹¼¼ŒF£ñã»»»˜��¥Z­*kcµýùmW•år9y;ÝIr5aÚÛÛá×~í×ð©O} Íf³³³é9`Û6*•Jfò4ð"ëêÚà³%˜€‚]„=µ€>dVaHšq.sšË�öÕeˆÆÚ˃žÖ©èôw004]Í¢$GæQw Ì(–¦a"$\2Ý*‚¶º–ÔCC�ŽI)ó¹Eþ$Àªs÷""­»Fº…5�—f£VgÚµO«çTØû�ÃQÅD+[s¶ƒ�WRŠQO†fáÎ.eŠΰÎ9ÉÁÈá”qx¥Ök]M=±œbz ÎFC¿ aº‹ ëIŽ&Ã6ÁüN " †]‘Ì8îÄRä\ä{F�šD#žØhß„Þ�«ß¤š¬pÜŠ¼ÖË÷º]J¹óÛ+—ÜéÂ\ ¤¼}î³XxÛÏÁH(c¶0âŒõ'²ªÚQÂHú=·RE=ŠÓ”…=#¬òá„2)‘ ·œTà×O|ÔøÆY3†[Fué8 ¥æÜÃ)X#=À£°Ê±idò=Ã0Q»ç�Ø{ý«ÉDÑ2„Yøžý[Òßéæ/ŒY,„üM0ý (ñm28µ}(Ί×3±le=í�)€é”Q.Tá”çÑÛ¸ˆpЊOM)î¦õÿ–¾û=ÝÕ'·0Áäà¯AáG,ƒ¿CÂ|/ˆJzë`,À²ë£ýŸŸoåògFú òûhÞ~Qk- ¼ÔÂ[‘03â{F®+�W[�º“�+Oˆ0µøHXÙ©€îØÅÈäq0KD~{7¿‰ÁÚ@ıRF;2h_‹ï§D ÁDQà!ô‡€e�_Û™IøÈ^x @3� 7RpÆ Dàȇßoæ¸Û+—0ìì‚Y¢ºx SGÂ.!ŸôžŸ�Œ-p„ »�Í—Eé9ò{g Ã&F¹]zóê.¹»|ïDëŠ íT—¥RiX©TÒΰ.Ì€'žx?ÿó?�›7oâÓŸþtš®ë-àðáÃé”DŸ:$Å'%a}o‡ xž·Úét°µµõJ«Õz!Š")¥L‹¾ï‡z1;©kßëõÐëõÒÿ+áv¿ßOAC§ÓA£Ñ@¿ßÇîî.|ßÇ‘#GpæÌض fN“áï»ï>‹Å„EQÄA ÛíbccãÂÆÆÆÍõõõ€0Š¢è›ßüæsøþûï¯ÏÎÎÞ·´´ô@­V#"t«a5yòÉ'aÛ6±´´„ÇRJt»]|îsŸÃ¹sç2už§ö©¢ ©‚{m.óà¬×1 î˜$Ÿ·�Õ�Ÿ Zœ™™A»ÝF¯×õk×íóóóxüñÇ1 àû>ž{î9loo§�‡ú”'F|ßÇââ"µZ­ œ”Ï¡^§T*e¦úöèÓ�>7Ñív±³³p¿ó;¿ƒ§Ÿ~Õj5Ís™”�«›½…®oN CؘŸÞ�.IðT¶#ä¬Ú1”ó`­õ3‰¬‘`�AAЇìïÕig[ˆ€ê0¬"¢a à¦]º'à…Õ%š,øß—ƒ˜j·ÿl§Da¢Wí"hMN�+X²K¨|+Úkgv¶’²Ü8f8•ào`dcý5!ìµ7¶ÜÚÁAà_eB¡sû ¦Žü *èsF­OA™k]á² è`÷ú“®¾�©ÒÎû2è_ÈQ¢!˜=€½¤£¡u¤€…åî7Ü©ÇØéÝx~kõc?ˬÄS Œß[ÔebØ¿…½Kß@Ø\I´iD$#¯ý2˜{ymÆ€„°¢HBJ?Î9¹Ó�H©üšpý3@ƒ+Ø»õ:‚`„m vWF™&"}~ ³uƒþbéÄ»@¥{UV òw´‘ý;CFüÍg°}í9È05Ø2輆¬yÉ GßÍ�»@äîò¦$ÔÎÅ´%„ÀÜÜ\J¨ºÏKKK`flmm¡ÑhL å#"e›vÉu��aÈIQxÀ÷},// ?ÑétÐétv¢(zvmmÍB;�×ëu¸®‹0 3¡*HuÊ•¢ˆ)M†îU©TR=Äææ&öïߟ‚,EϺqãvww133ƒ­­-¯ßïÿE§Óé"k!›ÕËsçÎõÜðÍxàÔáÇ—¦¦¦ŽV«ÕB±X”ùÂ6\¿~=Í99tèŽ?ž:RåÓÛõN¼®ëf\Àtº\^|¯>,ËÂöö6Ç+êuÚ™^èçµ/–eeµ»]\»v /¼ðæææpêÔ)<üðØ™™Áõë×±··‡«W¯¢ÝnOLW`Äqt»]ä+'$*W¶®×B�åŒí-û®kŠ7T@\A&Úa2G €è4À𠺨¿E€;^¹(Lå4Y/ I×M>ÆZñWš;ŠþÆÙ$Ùš-Ó*|À~O['™û¬FQÿ7•xJh£°x Ž[GaÎMiÒu’¿®‚LTN¡zˆz»1 "ñDùà{ÞÛ]ýú·’ç å:ÏÿYAÈpói¶ËÓÿD˜…‡ ô^&$ ˜f))�ßä:gGºÍ«ñý°¹KM=däwÏr8¸¥Áà ðX#E†ísdºmÙú «ÂÃö:¶_ú Š„[ܳ4Ã(d®ª(hÃkoaн†ÞÕg@‘™Ð‘DùÝg9ÜJ&‹éïnƒÄȨ@opgA¹ó.0CoÔ-Éý^8ÜÃú‹ÿ‘75«`Ä-�Ž?¢þ.V_ø#Ì,ߣþV«‹`aƒI$ù!2ÎÈñ;v6лýº;ëñ~J–ËÍp¸ó$8#<× Lòä.ø¸»|OZgTƵwä©b 2¹·o߯§>õ)ø¾Ÿ&vç?>ñ‰Oà]ïzWjA»³³ƒ„r56ÁÐ'$I—�ƒ à¤#>íyÞ–——ŠÅ"+½F>›�5±˜þÚ*sCu½;�NÂá/¥E»ê¶ÏÏÏg¨=JÐjµÐétúý~ =„t{á@GFÚ@Wœ={öÌÙ³gÏ-,,|·\.›'Nœø©¹¹9;É=ɺª�¿|ù2.]º„ëׯ§ë©§¸[–•¦Ð+—¬^¯wG]Œu`V.—Sú‘zX–•Nµî”{¡òb\×MÝÃòÙ†aàÖ­[X__O)LsssxÇ;Þ�ûï¿aâå—_Nõ#zK†X[[ËL?&M5tj˜Ry0¥¦7úñßÙÙI�µ:‡Ÿ}öYLMMazzz ðéS+¯^iëd‰™! ÓSKè%|g½Ä`—Z¬rFŽ9l\Ccû"(¡8– Ã@¦¢þL–oÄ"•†X³Ç�•oÇ`äÎÌbäíÞºC�+'ƒÄnŒ{˜$%w¾’‡1ƒà Õ#�ºÒ¹*Ý¡´æœíeÖF2~¤‹ tÅÈÒ™K#-Çä Ö¾â;Ôo–’pC˜V áp’Èb` @™9Œb@*Ó€3Ê“C8Ëþ�JÊš;W&€QÙmÙx½­¤01dR tà±—|´“âÁ°$! 7dÁ"q’ÊÛ �içh:"´m‚ˆÛXúñúÉ  ‚¬ t�ë쮟ü¨ ÆiNR�Ý…#™R»4+×±¯s]eÎ …U„QšFØÙŠÏÃü€?Ê5è2ýäG&àG8ñ„µ«ópK³±ži÷™ómòφ堺ÿ-h\ú8òô„a~BXÓ/É`¯—;@·¯~¡]»ïÃz/È€Q,ÅC¡ä�fïÙU•<ÄÆ™Ï h¯&z'5ù@(ýÞËn$ç®ròÓ»ðú 9Š‚ÎêŸ�áì˜ní#ŠÌqx`ÿÖyôå+€a€È™±v/ò�rö:ñõi8U鵟•aÿFr=)`ßäÈÿ*Ù•OBhlmaqº…�j98Ÿ�‰ó°ÇÈð!ÆK Ù¹„Èë'”4å¢F ˆ¸‘ᦠ‡· ·þ ³‘a£¹~ ¼± Ã*€„•L6,CH‚Ã>¢a/žn6ÿbó^Øßú:ÀM­ä£­ÝG”{¢^óÜ]î.i¢ŠèLgtww÷Æââb' ÃJ^| -óÂn}²ñÅ/~¯¿þ:î¿ÿ~9rïz×»P©T°³³ƒÁ`€'Ÿ|[[[iñ—� ”-´Z­4ÄO�U4çé1:ÝFu½ýʶmLOO#‚´XB Ùl¢ÙlâàÁƒ™‚[ÙÕZ–5}ãÆ�˜žž6 ¹½½}À­\'&Ì]Œª•`lnn›››æÕ«Wÿã±Ç{ V«Ysss�V*Îwú›ÍæõÅbïz×»P.—ñ­o}+"ô �^¤ëûÒó<ê÷û´»»{Îó|Àc�=†��ôz=¼òÊ+ØÝÝM' ºÍ°~Œó®d 0éëœw¸RS���xž‡Û·o£Z­¦S–ǧÀV ÕÌ*Ó42Ý+·ãÚÊÀl¹Žai:7kn'¤' s.Ø € =ôWŸMk!„¬�NȆå±U€°á ;p£Ò43Y ØP.¡Š Sp uxÁ€©-GÞœ�B¹‡¶þ@$ÜT#i;q¶N²Ïtw³åiñº™"•F~ø:8Óѩ×ÖÖmU9óýìkèÂwfäà‘æ¿Ï£ÖÑß&ô.{·uB…•,,° bŨŒª*�Q@�9×3`诙Ññ$2Ög/#ªgl35p¥Î%ékn8$Z7)Ú¤¯Š62\ ›IÊd€hwHE{»t©Wg&8Ì,eâò‚eTPD¬?´‘¸"k½o"c „zL 5aNü:i®N|ÜÓâ6¡Í�ôFš¥q"˜iJ6gF•„ÂÂI´öV ,€„u€)dõSQúV¢À|œcN¥™Ã`äfD¹Ìæ‘íi„¦0ŽÓ*Â�=ŒþúŘ¢(ÌŸ°¦öýsogۃ¿N�gâµ}fmfìVCÉm&¶Ömw8l ìm$ׂ¢þÈvä÷^åhpS;—UÁßÁÈÉ/?=Ëí†ß¼üY9ò»4÷qÃ,ü0³4… À‚£¤Ä,ã�J²ôãÈpxIzí‹ÌaC›.ª cÇïnþ³8ÿ"Q ´6.£²ôv0™�IcŠrUÒï´LÙ†‡Þ‡1 ½�˜2O:˜£`•e¸ÅÑ`�9j*@ÀáàU£¸pÂp*ï 2ªé™JHô“ÀÕ¯q¬q‰ïɳE†{Ò\”Aûj4Ú¹Iªš‚äíwïZðÞ]¾gÂù weeeóСC—ËåòCŽã°¢.Å×�1&þž”�áy¶¶¶ðÍo~DÓ4aÛ6æççñîw¿ûØÇRŠÍ /¼€~¿�«W¯¢×ë¥àFŸ’(‹WÇqP«ÕÐl6ÑjµÒ÷Vö·Šv£S†<ÏÃp8D«Õ3£V«¥n]ù`=å&U«Õҿר? `_EX^^†ïû÷‡C¥;y�ˆž a£Ñxž·®ÝcTZh˜ìw€õíoû•J¥²ojj óóó¸÷Þ{ÓüÇqÐl6Q©T2S µž…BûöíC±XÄÔÔfffÒíËO:ò–¾�N'ºråÊwnÞ¼ÙŠâQ¯¯¯ïž>}úí3333¥R ¶m³J—WÇ"ù{j6›­Ë—/¯^¸pá"&"išæ+'NœxËÑ£GOÖjµ1 …Ê;Q…üÎÎ� Àã8˜��ÅC=„÷¼ç=pçÏŸÇåË—Ó©J>§D*¥Þ÷ýÔ‰m’ÖC‰ÿ¯]»–檸®‹z½>¶ŽÝnwÌêYYOŸ½ïzl A¦ Qß�P‰’“Ö6s–HC£½"€×^FkïJ"ˆ(¹¢oš"0"˜ â~0ÀBØGÏr3¶±"S¿ª˜Ã4mk‡àm]³$aû@ÂË;HMæÞ'…�L*ÁÈLZôɤ…õ'%�Æœ¤�Ç%5évc´“Q²;¥E9åˆN©©+åæœ$`c¤þÈÝ9™”äÓ¸´ì½£¯�%FS1¦Ý o]¤�¸ð$,@  YJŽ' "o£äd¹? #ÖC^²)ÊhP”ý­! ý¤�‰ýú“â §Ñ&ô¢Í‘Ud`iÄC“h¤VÐ�o&œQŒŒkNüµTÇN…(¤À0)xX2d`%àÃà`”ª,ò膉î#pÈ0 È€²ùÈá{õ½äZT`)�D$ûN2gÎ.E‘Ž]KɆ –Y:U, +÷üX‘“$„€UªÅT¸ˆSÕ|òhú©åIÄöÒñ52¢Rb€ÿ¼8wz·Ï€a@d9µ�yÀ?ÕNµ ¾¯Tù7[¦O~t L‹ .# !Uš�¤‚m°Õxí÷ʇÞg3cYís«X�·/ѯA¿G2eýÂ~ª¸–2è½&ƒþU€Û ê sŠ„S�7�Ê;…U˜%aE±Ã`"–ÁK2 Ÿ ½îõ yq�eå±Qع¾vo¾êÔî»ß,Ö– û žgXñTÁ8Œ-Ñ9I2‡mŽ´Ã^Å IDAT‚­p¸û2dØIŠ|}º¨ óvØ[o�Oÿ>Èþ%4hî¡\½.Þ "– ÈkÏw�€H‚ÓûB²§ ž€µqá ßt„iH¿yM› Åzކaoíj4°¾lMyܰŠ4ƒMÈÄ,bÝ]< ’ æ�eØ”~÷bä·®¬ìÚóMŒF~’:aúq„Ü]þÒdeÛxíµ×~¯T*=lYç;Γrô"w8‚ˆ0 Ò²¢ît»]\¿~¦i¢^¯cÿþý¨T*xÿûߟReÖÖÖð�o|­V+¾ï§!wJ‹²³³ƒ½½½Ôù(o—« ívBÔjµ¸Ô¶I/î‰X\\L•>Y‰¢[[[˜��3“¶í'ƒ 8åy<ÏóÂ0ÜT)àÛÛÛß"¢K2^ÒÚÔÔÔ/>|x¶R©°ëºèt:i…¢ƒå3:Ô¶õz=¼ð ( ØÞÞ3c~~[[[ ú¤Ãážç�™UÒ=W*•Ž=ª„ø´ººúäÊÊÊ×O�:5S­V­¥¥¥v]W !R¸··wy{{ûöõë×›½^ÏSÍ+˲jKKK�˜½}û6omm¡X,²,ÌÎÎbjj*#“B}ßG¯×í[·àº.–––°½½=f'¬þF?Îê¥\ä$H07­ÁÊÊJªY9~üøe,?i*•JØÚÚJ_ר\ßNuúƒê ¯µö«baªX»åØ1$µöD%1ŽúÚ ö°}û¥”Wl ŠŠ®è†! "ß4M_’åH¢A Â�ÓÊp¶ÿ¯ZI(Í&.\ Ö=D¦Íìë…žÀ››¥…kí8Ö‚³.R‹LŒ®8)ð(5ÞÏò�ˆG)¾±Z¤`„‰³” Ö|õG ÍÉZ�ž!S&ǃˆså3´É„H-SëßÔ²s$þ)Gq�-eÜQ•¡  ºÌáÁ,13üî-Ø¥{GïH omÂÛŽ;¯b´ÍŒQG*U~ÄóÕ㢠)µ"j`”ù’Žª®e$ì² 2RîZ0 K;Æœ…ÍI1­à˜)ýÞ(¬0kùéöùí¸ð‘2b…6ùȃ'ä%ÿš.„a¥t¶¼.* ˆ0Êj`Ήè)ç»ÄÚë8òÁ±ØX«²_�²¹9 Ó~„�JœÃ#àÖ¤Ó*uþŠŒTD¤àvÔð¦´0Íš!$aŽÂ†={ÞæeH a¼Àïæ¨WåÝçé“«3ðÛ~„}•ÌyÒ"µ™y³vâ#HÊÿ� ‹1€5`0SšØÍ™¼ŠÑ6{£Fs[ýw…=U¶J ?"ÌÂ4N�L;¡™*0Ùߥ“ág­âì®[?t9ènþOÃísWYti�#á5.~ÇkàE£°4g¸µe@GÓ,—eèBJ‡£`À2�v{‹—" ˆª‚¿•¡&qÐóû»¿ëNøy0UÙ°±µrµ}kêÞD§¥Îͬ£¡ Ò‚õÍQº¹áTPš;…Öê 1P±ìýU§dо�£Fõx,ƒÐo\º"Ìò§Ean‰ˆª`YG.³tXF8,#† õ:ñ7¥–r�¶6ÑéowÒÞ]î.o@ ÝÀHë¢[[[ƒ½½½aYÖ/ +U(_^œ¬ŠÝáp¨òˆˆhww¶m³eY¬x �¨) á©§ž‚ã88xð {ì1|èCÂ�põêU4 \¼x1 ÚSÅèþýq îÎÎÖ××S·*µ^A ßïÃ÷}”Ëeض�Ñ6¨‰N~ºÐï÷ÓßU¶´ªã†!Êårª§SÅ¢(â䳆áAM{òsÃá�úý>ƒÁ çúýþ[—––§¦¦R*5q�Z×ê4*½ãïy^{íµLnš&æçç±¶¶–:y)§ÄæÌ ÇqLÛ¶ë*,ò¾ûîCV¿ßjµx{{ûFE;Ãá�z½:�Nà:²úY«Õfÿ‹Z­†B¡Ày7­íímlll X,¦Óš;Yå*ê“#yP ´/¥R ËËËh6›ØÞÞNCÕÄ'qTC§ÓÁîî.vwwaYVš“¢¿_žf¥‚c@kÓkW7goïúûÖ›rnè& Lõü,Ø%Øó÷—šCU†´’u‡JÜ!Ú¾o°›º^UŠFÇ4ŒPº®í•©0lMG�æmLÕ!„1Ù` ­ ŸËõú!ìÉÄ&ˆì²°+‹ÑpwU›À½)É_#b„‚4Ë<Ê•Š¸ùi=5JÚVSœìz“ÆXÔ¬Šµ@¦Ç»X;„Áú¹ÄgÀš2‹ûî ûkW🠋¡~òc |Àÿ �Þo8CÒ÷cDUÇ ŒØŠ}… ;c¦ùT“‘0ê&'Œ8�a›fqáQÃ."Ã�`Ú™„°Fö¼<2Û& 3NõÀ×íÊÒ¿ ú{ÿ{íÛk¸U”èA4XDƒõm¯a”…VL>œäX mÂhBÔ„±`0Ü|®áT÷ý* óŸ“ÃÁÞêyÌ¢Q9a–Æî�£¾ å\‘9ÀÀì‰'ÐÛ8ƒ(ŠƒgÍâÜÃAgø2K?o4¡tUR†]’�îjrþ:ÉôQM Ý’1Šeæ¶³«MZtÝ–¼[Nß]¾_¢O?t >ûì³çÞþö·ÿÌü÷*•Š˜$üÖ©.ƒÁív›¯^½úd§Ói»®Ë¦i¾õäÉ“KI�ž;©®ŠÀ(Špùòe\½z†a¤4ž}ûöáÈ‘#xî¹çÒÂQ­‡iš8tèjµ®^½š®—^@)ª—²ÂU…¾*’QUˆæÓÆ£(‚ëº(—ËØÙÙÁææ&Úí6zè!¸®›R�&dfp†œLK–ƒ Xîõzp]7ãð¤¨EQ¡P(Àó<]˜ŸR‹”ËXÞñK}LOOc8¦–ÂªßØØ€”õz=Ýÿ̬lhåáÇSðEÑ¡0 i®T†á[Ôqît:†áWæçç?P¯×¡Äôùœ]‡±³³ƒÛ·o#Š"ìß¿µZ--öuª–”ý~¥R)ãꥀÂòò2}ôQt»]üùŸÿyJÅS¿«Ÿ“Ýn7ÝÞI€CQ …ªÕ*LÓÄîî.]¹¾YýòSWO÷"·&ã§bBðHºß‚;µ€�HÊÌ@ áׄԪcmwwpíÆ·RkUÛ4B×5†¦iÊz½–J¥Ðê‹fw“ªD&yÁ† æ¨Ok‘ ïR³¨4Ãr ޝUœ}7"oo'á—ä»Î“D¬?hÈGÀp” ÐeZ€pž½ ©…¦ÃÐc-ÿ,�Lц",h�21BcêgÒ©üz:w v´œ/íÿÈhD²‚d}»x‚%°Î‹Â>‚áNL7aqäùlpdF‘w^péÇ öw!ý> ·<OúËjiòº>&óÙØ ŽBô›ë€ôã|æ>³×C6,,˜P¬Ja: Ð $è]àwwàÖö�®]ÊÆ¥¨¤ø1€ÉãQ%j‚"9DkåéQ!β#Ã~7wîîàK@,"_ f˜%ŒÜJd º\æÐÌŒûµë6¾÷E�~dA2"f©Š5')àô ¢«NL³TË:àéM2çg.(›” M«Sû"`6˜£©¤`Ö³Ä0Þ|âqúc‰‡|ž�EJ÷ A˜Ó�Ã<“•g08ò!ƒ!8ò�l5® C˜1IK;¤é×Ò¡&KÝÍÔɉ„i[¥ÅÇÉt„aÇÅLg öì>Ø¥Z|Ÿ�¿³� Ù„ �~?¡ØDâ¿±Ë ?aÝóÁ�·oüų,{ºi^ uO›4°ijDbä:i²˜ ²û;—þ}yþÔi†ø%") ËÅÞ­k`ù:æ�½lï™… ±1sæ®whÆ‘´1sÿÏ`ûìŸÄeÓš1ܹ™°ûR@Zš>#ÐÀ�‘ BýQ§@ª#å&¨í5èˆwÓÐï.ßÉß“õð¿@ðÒK/]—Rþ›ÙÙÙ+•Ê9Ž#õSi†Ã¡H8ö_¿~ýúFÎ_»qãÀéÓ§OÖëu†qjzzz.)ZÓ ‰^ !ày„X]]Åêêj§&¦ibffïyÏ{pöìY¬¬¬Œe]¨"ضí4e\�}ò¡ƒ�#Gޤ EZJ#à8æææRÚÙîîn:ý™šš‚mÛ)õëØ±c™¢X׬Q: PÅð•+W°»» !öïß�D�1& 7 c¢å°Z']ó¡Àass†a¤vÊŠ^5 póæMT*8p "Úk“”ÒɉÙ?äyž,—Ë)€˜”8®ö��ÝnÏ?ÿ|Y,1;;‹jµŠB¡€~¿Ÿ™²åSïÕTJ9aM¢ÑéǾ\.§ï­ö³ÒY–•î³gŸ}a$�/>ßg#¥K 7^”Nuÿ¿#æw‚HDä×Êšr'9wU5¤µe„²™}¥€°Dwó*‚ö%�QŒï)~÷¾‡4o†$UôFÁˆÀ4F@,áà‘˵˄Ìçó€ŽLÒéI"BfŽ˜#Ÿ5ð¡O³g�z ³ºÖ==�õFšÞž³¨Ó¦‡ŒˆÂø�dXNºõzá"«ùÞƇü!'~O$,—aºS¦ ƒ¬ÄÉ6Ö-Hö!Á …ÁÖ ÈÐKѪ°œ´Ô§Œ¶Š‘áõQ úüí 8€0«$,‹„ 2]nSÇ~¶[‡0 €äX,žxXÕÃÀ!ŠúðûMô×/C†>®Þ™…?¨úá÷·¯é‚6ÍкBÔ±¶µi‰>õ×A‹§íÿTŒ4. Ñ¸ð÷j÷ýô.Hü#�aÀ°f¬Ÿÿ.L‹áNß2Š0- ¥…ã�ìŽ{PV¤®&dÅú2„]‡1Ð*Ïý¬ô÷ž“á@Mf:Ñ9M „Ø9¤È�@\zø Úþ(>î.w—E¹ ˆ~±gΜ¹(„X™ššúÆ<ð‹Žã ¡eQÔï÷éüùó_év»3‡Úßë=>þü ½bš¦!„ Ó§O_XX8•€‘Ť�ÍUÀê4)õ177‡ûï¿…BŸýìg3…k~1 �N'!:]H�×u±¼¼Œn·›:téÝrµNõzÆœºT1«èR—.]Ju=ôlÛ€ô½õéÇåË—1 °°°�‚$åÚ5©¨Ÿä¥À‡Ò? ‡CÌÍÍÁó¼´˜ØÞÞÆáÇQ(2Ó‚r¹Œv»�3gÎà‘GI÷½î¨•%²ÑhÜÑ&W�r^yå03Úí6ŠÅ"nß¾�k×®¥@¶m<øàƒ˜ŸŸÇôôôõLÞ[·ná _øB œò¦:U-|ö³ŸMב™Ñh4ðË¿üËØÜÜ„ïûxæ™gâõwÊöõ½Ê[m·>?âü›(–j(–gQ¨LC’±‹NŽ…µZå IM, èî`oíÅDA¨–\¯Tp‡–eE¶m‡ŽãD®ë†Â°dÅŰíQ‰‰ú}<.�VȈ‘ˆ›Ù=Ú<›ˆ#¨�a¨8ê‡epä¿ïo�û²ôþþ¸Rt‡Ìx  ãD„°·§¾ÐÀz¦˜I±ŸoßË\+õâ*[Žº�ÙtmõšœNyÆìƒ2k¯wïIwÜ!Î<ÔS!òXÊ|Ö©+SÉj"l–Z+ß}Ÿy(£AWuZ£þ­– �þKÓ˜úû Bä7ÐÛ¾†ÒÜáØzȸ[MjÕQ\t@BËuØ»úä¨v âp°ûÞ ŸH/XöAÌO‚¨ íµWQ;ò�°³C1Ö€åÓ5²#‡8à[´ÑZy$Üä�e7òš—´&Wt‡ªîÙ|„d„2‰KÔµÚ~âÑI¤ }T3 ¡ä1PìyíäZŽ@l¨ëfR¡Fqê¹FóKIÚÁ `d� ¨&’NÑÊ�—H À‰Ý™B@’`)ZX!)8uÍ÷lÉ;}êã‚ñ§©&KX0Ë3(.†%È0ËxŸ0Giƒ… `Pf¥ »:‹Þú%øÍ­8 Ƭfsá<ñ&Gˆ:·AÖ4†a@Å¥˜:ø°â$ù0ˆw´`íÔŒbç^8(”—`«¢»úÂînòl3Â.~¹¸ÿ�õog[[ƒ`B±mj”$ã9iaØëטnkNÍKüOªG>ø4™öï‚Ì{I0„]Byèn^† ãé‘×ÛEýÞ³¦‘£{çÈ®,\ù�ŸÂ•oÿ> Ñ(:ÓÇ?8Ø>û»ñ˜l,_GŸü˜Ú‡5�Ž«ƒ­;më$Êß]rwùÿEÁÒÛ�R»0[ ‰F£!¿õ­oýë\GHLø[ý¡—ç fAŒ—^zé%¯§N�ÚW(DµZ=655u:.S¯×C±Xœ8ÙX[[Ãç?ÿy¬¬¬dÂ÷�é<#å÷ÎÍÍ¡P(`ss3¥ ©¢9üæoþ&ÇÁg>ó´Ûí´ש@sss¨T*™$ö|À¢î¦@‰"zÑìû>æççS‘Z?µ^­V+Ð딦I–à |è ßÉÄilB°¶¶†|0£áѧ/¿ü2üñ±Äù¼Ë–vßÉ&·Ñhàúõ뇘��…eY8pà@ª§ è÷ûéûìíí¥dù÷UÿWéê �è¿7É~yii ™�É/}éKèv»èv»8uê,§dž¹½­9Àœjá’ébaö0¸2 B�eRàȱhÄ÷‘š“h[â{+OÅÓ2 Á•¢Ù3M#²m;r'r'´m;²mÛŸ®FƒÎ.—÷v�úÁ¤ÕK9Zgy9ª4¬Äò;>‰`ã¶6^M-&™¹f8ÕY>ðèÿÙß>÷[agEj�¯ôÿ ªŸüèWþ€ Ïk¢<ìƒË•,׌ó£ŽÜg�,ÿI¨]fQèA@f<61ΜGE$CP˜ØI&@a�:r�)r˜Ž@3‹£TàÔ�ÚäZ��� NÿŽìÞD·u9mÇË {1ñ‰Mˬaóö•æª&Ã8ôw¯Àp¦àV§GëÂ:¡q8((µu&d yó ·Ï¥âsú×8òvsÔœ|P[¦`h¼þ‡×ë'?ú¯üC°€ èo_Ciî(È0r”3ÖøV:U�2艈"»—¾‚¨{=I³&–þàÀ>rZ”7ì¦Ê`†}@ , Û°Ë¥±ã4&:âq$±ÞO…a¡·þJ|‚rœb§¢:õJ¤¼/ÒÈÉq¹ÂQnʦ½'sÖ†W³ZK- jN  ÃÄ€ µ1žD £ï |œüXŒ�^‚=»åú!p$cM �Àå61­‚-TO£_®¢ë D©œ}�ߌ®¯¡w ‚¦' „�Ê=¡ºø¶Ä-6J¦S”¹¤·B¥‘ *`êÀ[Ѹý<¢V#“$¦­ÂôGFù×8êNš*ÚÑ$§@½¶Ñ"‘öÿI&ܾþŧ܅x·éL=* ëŸ Ã:(W ‚$ý˼†S¿öU3&ËYCh/bæž·¡yëRìögº?&ìÙÿGz›»Ú½<Ô®}uÀm²s'- çj·|-ÇwÁÇÝ寀dnùÚÉæ.@½³fkê¤WO Ï:QŒn˜†Ö½1.\¸p5ùzÀ“ŒGyä'æææ¹®Ë“2G:�^z饴ƒ>3ŶN¨ÇqpâÄ ´Z­ŒÅë©S§RÛÛ;¹dH-\ƒÁÄyR¦I>í[%üŽ…ÃõÔ-JMÊå2¶··±»»‹Z­–·΀>z½vvv033Û¶Sª–¾-Ýnëëë8|øpºN @Ä�@�?þ8<σ뺨T*hµZ¸yó&vvvÐíváyÞD')5i6›xõÕW1;;‹Z­–{º~h8âÚµk0M3uøšššBw4P۔ϟÑ÷¯:>årQaqqqL·ÔëõpëöQñØÉí.æ]¶àVP_8 ß-'‰Æ“¸DYÎ~¤ßW?”ö®£•† ” ÖÀ¶Mß4ÍȶíÀqœÀu�ÀqìÀ4ͰVµ¶nì…³B»ßÄ€(ÇÓà\ÅŸIÚ%¸XGÅòâ)4o>�N{=¶™²@Âú»ÅùÓkíÎÊ¿AÖÎ3©6Lâ(ø û×@|€ho\@åðC€i¥ÂY~ƒ>tÍQŠ›ÄCóüW‰óoù©Ì~ ™Ó^[z}¬¿üïá÷¯!£/%‘;NZÂ(`éÁŸ‡=»]ÿB¡� ÎUjù™3gĄ̀T*¨V«©…®>ÊïIù3yèn·‹F£‘ê?z½¢(ÂÂÂBºoÕçNPœ{}ƒN$–TpÝ*föŸ„oâpAäë&Õ"£ÞXÒŸˆé2�‹ØRÎW�0ŒÞ�Jí>ª{Ô¶Z N±>V ë†Ù5¤±8}:®~×kÝŠ' ”䢅jä5ŸÃÈHYœú‚âìéY}(Ägç aÊ:Î’ÈM×hìS7�‘¥µDg÷2¼�+ !P?n?pšû€ï3‘zúôÏ|ˆï1†[Auß1 �mˆÆgEú´Uå¨èÝ.Ô!àdñ?�™{„èn½&ÌâŒÂÌò,f�½/{Äô›+�íæñûprO4J ¶®+lkVñ°×¼ò­žÉ žP焹I]„ÉÖ³<œfÖ]¨x IDAT4è®­û�›ß :·žrª�’°� »-«Ó0ÜÚàЯ=hû[8U¸æ½æf À��Èo½~‡ DæÈï¬ý/ÎÔò;z+HÀ®„KN§*£@BÄš¡äü‹ú 4V_Bwå)0)ø a@ƒó2è\ÁH€ª¬3õÂþŽ4‘°}�öå?¨Ÿø™{‰ÄÿÊ$„ aX)å�sÅhª£H\ÖÍ5t·^G÷ÆW@ä¤àd òÚO±ô·‘ Fìiëà ¬de|Ç0ío3𠯽‰Òô2`X‰[g)uºËTÊdí:I.9RüŠóÇP8ø0«Ï'/'Jfqßñ°¿v{R¡…Á×„íÆ§ýæj¼^êOE_šÈž~Ö4FÊu £k:ŠBto>›Ž˜ý]°”9Z}_ó/T‰5M6*KGAQ"x×:í¤䦒ٜŒÂ5à@[3c9›¼ÚÜÉÄŽÇ£±HŽBUè¦îFÇ&—~V"ãPçº p—Ž`pû2HH?àLŸ¼×Û»xý ÀÇM’&à|‡ßÑ£ |m¿GÂa{ý7Üú‘ûIs`ÃÆ+ „•ÑfÀ²N±eÀYxöúU„A–‘kºSŸð@/&A‚¾V³½ÑúÓlç›mëÝåîòWJÁBnt—ã…9ð!&ü ã�½ÉÆ}¹u@¢hYëõ×_¹V«½Û¶íŠN;ÊèŠnåº.æçç•-0nܸáߺu뛇~¸^¯›•J¥ªÄãy«Ý¿ µGZÜØØÈXÄ:Žƒr¹Œ{î¹ï{ßûR·®›7o¦`doo;;;©Ín’Í‘‚�¼›”n-¬DìƒÁƒÁ CSŽNív•J%Õe¨íË ôÕÏóÓ¤(Šà8*• –––RÛß0 S qùòåtÚÐëõÐívQ­VÓíQáƒy›a!Dº–——3:Ýå+Š"4›Í1 ¡ÓÄôÄ{]x¿··Ã0`Û6Â0Ìls§Ó�ëºé1Ýj„3­×bñ¥‰}ó‡á¹å„Æ�Ì£VÆœJ@ˆE‘”°r’I·/b{ý˜v5-!ŒDè‹Ø>Õ0ãνaƒ +Y¦�#´ Ðeª�"¥«�HCåòóËÔž 1{ sÃvw®ÅßÖ9•¹Ç‚æÅ¯j£´›ÚۺШ,¼å�Äg@äÀ0ÑÜ>‡©È‡5wd;iBwª5²È31ì{ܾ€­+§ºDÅ"rùi ^jKG~os4åa„ƒí§òrḰ%»zèÇa:G€ï7±öêg°pßaÖ÷�,+Ý—�^]lM±å­ì¶Ð¼öhm½”…‘×y2l`²5g †k‰¤ü2à”-À¸ŸÀHzŸu^¿…Îõ¯ÂÔ&F^÷Œ :—rS—v@ú&wr­!ÿ­a¹Ÿ$‡XÄSºQþJzHÆ)X¶^ýƒ„&äj•& ¢aã» UPšÊ)èäR~ý�eñdP76°ŠuÀpc[^ 4j9•™>4)kghžLÚT�R�2wï{°¶·‚ÈkDÂ,L=!ƒîó2h�í°ÖÕϯÕO~øIfz7AÀkm¢PÝRZ¦ÜxF?�9OäâQʽ# åu7vÖÛV@ƒõ ´0q‡Žû—™S?k0ðH,¤ìÚ4 +¹ïQ 92 òÚe™RÚÒ³îܦ�È<ÚÞØ´!™Â'è‹Al€ÃX/©&à[�1Œ\ì˜$³hHÓåUøë¨AÃÌ(MÆàöEÈ(‚v•ìò)[¹ë�ñÆiòü&E:Þ„(ú“¯OXÂîÍ€¦�~� û¿fi¢½½…Ú¾UÖ= ‘ÐÇG%Íš—“ŸdVQY:…Ýg 8€0Üw¸soùÑáö+_Ì5ôíã¿Dí÷½lëÝåîòW@& Òõ©ˆÐª ‘›‚cBG�' íüíWhŸE„؃Á ¸zõêïX–õËU êÓ5 е‰[®¬¬üy§Óé�9sæËÇ�Ÿ¯ÕjïU ½À×­xõ„w�Þ“-f´ú‡J]___ÇÓO? Ã0P,±¸¸ˆb±ˆz½Žûï¿333ˆ¢»»»xå•W°··—æšäõªÐÞÛÛKÅøwÚ‹E¬®®¦ö³ùìE¯""8p CËÊÛ W«Õtšr'=Ë$0¥kQ I§‹)ZØìì,’l˜œ¨ý¯ÖÃqììì Š¢”"§:•žCM>Ôº3ÿì½i”çu%xß[F.••µW…�$@‚ྉ”HJ²,Q›%/’­ÍÛi·Úòx�év»{,{F�ûŒ§Ý‹—nÏôé¶5ò´mYò"«%�S$HŠ)€ ‚Ø�Bíkî±}o~Ä’_DF@Š–¥æ9y*Q¨ÌŒŒŒøâÝwï»—»e¤Y–•lûÉKÝYŸ!»P�,�DºãX┞ˆ+Du©¸?t0še¬"¦nû`¦ÄÝÏÔPslB;Ï¢ßIп/ xf9ìLr¯Ó¨6ÿ’ßq¿ôš3¶ŽÌ€=qÆæÏ� B·^3‡žÜúf–õô6_䦦®4~ð×ô †0HèØ\}Vý2†&o‚¨ ‡ác$Òø'É0“€ï�ëëX»ø8š+ÏÆ]fTFn�ñ( q{Í„·%ŸU2êkÏG¨‹ÀÒ_ ;êÜR ïøà ð[+lÕöþ m† –X>ýØC»Q�¼Zelq0`,]“Z¿¶Ûh­œÀÖÂQ¸íùD†ìK¯s\ú­ Hv%~aŽ•=÷DëgÚ’`h–Ž^<ã‚Ø<,žq–h¯œŠ\³B+,–Þ‚t['XºK øˆ¥W[ˆÌ+( 3o »:û&"ü6˜w€º°! ;5{ž©àÔÐûݞĈsàž—^óK?–]m*wuû\l3¤[7ü½AhŒâ(,3Sª TÎ zLH¯3ßcá²| >5ÓÆðµoÂÚñÏ@¤WÍá]ßß]yî·ú®aì’ÿ= ÜÏ ƒ�&:ÍE«;+$(\��¡L2"Q:¨/þ,fe2´\�"šY¹Yz­§9è^M·zûë?á–pÝÑ ™ÅÈÑO å XBŸ*(|Û #“C™üŸPH„�¬l±*…LÖ*ÊæRo]åTNiúˆšñKjV 0tp§ Är@%#AÚnÎá•âÙy�´”�¥ß^<öåÙ{Þ ¡�kBÃÊÙ0~`촠¼SŠQÊ;îÄÆ¥cá¬"ùЭ¡ŸÑ¬É§gÉE¾sÕk¬Æk·ïh$/„2@$¯ã’!@ŒÄL‹À¿té’t]÷=xðà/ÖjµšmÛ2.FUyN<ÔÜjµÄòòò©“'Ok4q0WpòäɳãããGLÓ¼[!ãÂ[×õD®“ q§¿Ýncmm� à ÅzVæ%v«3Žã$Ý|5Ã$Nô¾õÖ[qäÈxž— gÔu¶m'à–e¥ò0òaxxcccØÚÚJØUþ$¥ÄC=„J¥‚S§N%…¼úÞ1ƒP.—ûäj/wà^e�âÁõJ¥’ÌydÁ– @êõ:N�:…©©) õɲbÀ³0###É0{,=SAH K¥Ö6;…•º_�;¶ÕÊ5wé"¾¯ù«0 ÙaæTÁL˜¥¨Ã™6Eàl%$h„ºnf } È«rÞ“{€'þÿ¾Ð:å)žUÁèø~ÌÏ�Cã³¶ÿŽÎÒ‘Çs:ƒÒ]{^êöèïYåñ"ú9IZš ÇÙÀâé¿E¥¼ÖÐNˆÊ04£�XÌJ¯¯¾†ÎÆl,>ú¿PDx¡TۗÉœŒs{º$­æ…D«/o)*fë @ ý†têsÿs¡¶ï£B7o ­‰%:Í947O¡TœA±< a… HéAv[póØ\}2pABD2€ï^ûYéÖOdÞ;a ãw” µ]¿.4ó½¤n=¤{5‘^lUûßÌ`wwãt"k’¾sQº[ÇIÓ€u¤g+²$·ø¹ñCU0~�Á¿ˆ˜ƒ"2 Эräø–®ô‰9å|åu:Iñ º‡Yz+Ñ6Ô•í‹·±®0 *Éehô›ÑµÂ´Q¬íÉ µ�úÎ=J›b¥å+ê/8£±gT&o@kí¸+ad‰Ð ·›Õk¯w·N/e®U$ýÎaa–6 rœI »rÅÚlªõ-2Ѿ UVuþƒ™aèŒÞò~¬ýóhÓ†ôÒÔ^ýüI|+ND�€ëâuÒ(–™£Ê8F%=õ­T9† =ð»o€È²"ã’ºßmŽp’ZË2qö4@b‘àaA#�¿"\öxikY™©mäÀ=‡—¹§5aV%8+ž ‚_Õtëw™„îº.ÜæeˆÊ5I&>zëA/„A�ÂÂÔÁïÁÂs_K$ô=fm×Û;‹KŸDhT�uìzíöÚí»B‚ä»#dSk)€\Ma;0(l ÀÒÒÒ†çy¿3;;{`bbâ=ÅbÑÐu݈»áAÀq¿ÑhøsssÏœ;wîÒ~ÖyøðáGxà�6€û™™²º*EŠ‹æh®„Ïœ9ów'NœØ, ¬iZ0;;û®Z­K�È0 +žáȺBů[þv»]lllà±ÇC³Ù„mÛ)6Å0 ¼ûÝïÆž={ðå/ÇŽ»¢Õpüo]×±k×.œ?>T1pÏ=÷àýï?VVVpùòexž—bHÔ¬•€A�Û=4;ƒ’F£‘ Û«21€$Á€¾"Âêê*677“ù—8ÅÝu]¬¯¯Ã4MT«U¸®›JUzU]×122)%V77«Í®_º¦Ã²‡ÑL�¯*™àlú@d±Ûk·Æÿ+‘™ÁˆCëÔÂ(ƒ ’÷‰H$êä©b¥¯JœÒ”DéL%ï¢×\Œ$Mq(ßè^˜óGá¬kzám q<Ò˜gä“Ìí¹‡»þØ-Ÿ(Öv?O¤ÿHß!…0Jh´çP¯Ÿɰ3-Døý^,È JŸ…¡L’iàR%5‡Á}`®W1j5#5…yàĤ¡á ¥÷Hé¬ÏwVýn�íÿ~Í(ý ƒGIÂ@×Ý@gu,ýÐ%Œƒ0w@ölô…fŰ Vüîæ3ÑlC]éî'ÃÕÆðõZ¡¶ë¿’0®åÈ݇tzaå‰ë  °ïö ÎDì­ñ1Ç�N=Ñ�h†=É~ ,ý¦òžq�¯2 ]¤­nSuãè�.3ø¯‰p| Ý„f”a�ìiá e=pans¾gMM$,‹¥×‰¾ƒ¼í‹â v¦'ºñC7Kƽ �ÂÄÞ>w´ôŠSG ”³I 0ÒËk'¥B ÿntïXÚš0ÍÊä¯xÍù'9h«™$tk7 �ÐPÝs[è&ƒt~Cª§äûUçÈR™"ˆç*•±ëнîzèø¦™åûØžøº¿¢v˜P‚r\ØëfI¦*Qœœyùôp¿º½œ Íì}FUÄ&uM í.½@PgBÉ•TÎ!%Ì@:ÅQ|ejû4» Þ¸­®`ýNlR©F¯ K�­wÔ¨ @:õKYÛÿsÄÆA ÂÚ…ç0yh$ì‚SC.ciª‚ú´ê~ŧàuš`éA3Š?+ŒáÏKo3/H¾Æ|¼vûN ƒ€H«ñ­¼r€ �qñúúúæúúú1/îÙ³g×ÈÈÈn]×5)¥p]—ÖÖÖ6._¾¼„þ¡ù¤ÓÁÌxøá‡¾ÿþûÝÑÑчÊå²K²ÔAìX6Ôn·Åêêê™Ó§O_\XX˜S.èòܹsÿE)üõ{î¹ç@4× ŠÅâÅb‘#™‘TåU*S²µµ•škˆÖÖÖ°wï^xž×—žª|,îl:t(I”�‹ôZ­†¹¹9,--Áó¼�@¦\.ãàÁƒ `j·ÛhµZèv»p]7æÄ� zÛëÆw•=ŠogÏžE¹\N£,CBDI¢¹”2 [´m;ês™ûöíƒað|Ͷ_Œ?ñP¡Œ®i%z�¤»„L•{Õd¨U),T]"CµÓäLñ¡‚ªjÊ”O¤„Sœ(_‘)¤ÒAqi›Þdk fuº+'£Î ®'²†™;y9> €ÝÕcŽ»zìÏÊ»<*ô҉ćI3wfH�Á� \ø^',à£ì"-‘è0K$‘fÝ‚UJ]`Ótk*¿£Óš�Ø'À]°Œ»é EŠ´•)r£æg�Ú‹G~Ϭø¼Q}›ÐÌ÷ ¡M°Ô 4HòÀäÒ�~40‡ŸY:,ýUé6_”~kÌ-…yÙTaÖœâø�¡_"¡�Ì *“ûa–†ÁìAúžRXeº·êw(tH¿“HõHè½4}·×¸ô'yï�a¼þ11!ŒòÔ»·ñM:ÙëæUuèIpÁ•ú½íÍr§é34~ä¾OØc�U™žå~+PÖ¯ü iÊìê{$’AwNæóXY/ÁA˜Ñ'4@zV$Áj#�ð-3LÅ•È+•c¥ÞÃ]{nË®íýy¡[_"q ÑY~…ÉÛÀÐR×dŽ“Þ1B˜<ð=¸xäOC––ü¢=qðç[óOþØï*õ�*#|û@Èk`çµÛ+ ÛˆWràmç¾ žôb›×”äùóç/œ?~Ѱzæ9y©¥¾BAj�>úèÃDôøßøÆŸ´m{Ò¶mC «s‡[­Öê±cǾ²¾¾îD)ï>òÓ…ÁÌôÄO‰¶C†qL¡I)éî»ï~Ïðð0Ù¶ MÓÆmÛQ÷Ÿãn•©ˆgžxâ =z4±Ž3§€ƒúïn·›år9%uZXXÀßþíß& åy@!ÎÍ8uêT2bÛ6ªÕ*¦§§“�÷n· Çq®xDM„ϲ'±5±š!¢J°â!ør¹<ÐFX½Ç fll ËË˩ϡ2!ãããx衇püøqlmÕáKÖâN£iXðÕË\ÔhS—zÉñFéÜ8¤€DàÍ©ÎvšSQ/Öé^?«ìEšÜP\RX õÊ»¤lsºÁ´‡!"ìÐO‚ÄPF“W róâÃgIX¿mÖ®ý3³4þa^Od\  YS‘ bŸ˜%CK‹wIúÎ’Q H@3J°ìÑT"eÀXŠ^e†ÓÝè9�IY�_:QAÑDo;fÔóžwãäqwS¼¤™£ÿ—UÛõVÆmL˜!ˆ2éD¤1‘`˜e—wKº�‹Òo¯E¯¼·ùUÌ‚ÔË;^÷ÒŒ‰„ÐaÇPš¾šA`éd¾ê“È©ÎA `÷›þ9æ�ü1üÖ2@B·¦Ìê¾ûÜ­³ŸRd_ \yö#>à>ÌÀCñûè…a”'À(Ú`ßKºÎ¸¤€á}÷Âïl¢qé‰ÈBY�Q{£»Õ=ÊAG•¦52àhPªrÈ~úð3>Ì¡DVeš0ÂÜÎö㑞P¶1Æ®+ 4/=æÃ³hÕö½­»úü¿Ž¶M5P‡cåÀk ãŸP‹¥zöØ®0<ÓŠ�ûl�žƒÅ‹ÉÞݰRóS””—œOÑ`xíš°úìgöÁÒ×ÌÒØÇ�UüÇ®íýQ0O‡Ò3űÝ)ÑQÈŽ5)û6e¼¦œ§½YFyêÔ/<:D±„n }X/NÉo/l!�†.sh‹ô®•Ì< b ?èÀ r¶¯ž³ö(˜„{Ö¼àl—²7|#s*R§ÓÓ©�©­fµù’üàÞñ—¹ø"{Ì2ÃóBûoæÀ€Ñ‚¦µ¡ë Ãaº®A?¹ º.ccƒ!%‹ d;û[òë§XŽøMÍ,¾¤Ù:š—�¡¼û iðFÙ=¡†á†v½—Ï@4¡ÛÖÐô/{[§?–aB]¥Æz¥u›ëFÂ?ìí5ô@¾]_tvÖ-;Ôƒ=Ǭ,’&$•"D�/„ç766ÌÐįG™×RÃU‰ ç�l¶IòxkkëܳÏ>«Ð:4Q,ïµm›ã4òdfÆîÝ»1??×u±±±‘ñ-žéˆ-nãâ\°Ï¶W�¬bK[u6#;'²Ý=~ž®ë0M…BÃÃÃp]·oØ=xŸ™™Áþýûñ�o|¥Ri[ÙYŒÄ@Šˆ`Û6îºë®„õ‰�¯Îž=‹b±ˆ���c[¡ö.|¬„奺ÆÉÕ�²ÕŽ’ÿ‘‚w¨•KWÁ…:+^Ô39©×á4 ¢T牒œ{Þù½@1V@Nï=¨8Ü®&pPPRŠÅ¸“žuÆCôûж烰ȜPŽîE6z‰Í©F ÝDJÕ½`A)`EzÒ»ê†Û/Nc¾× e¿Žtj\€«�³$>GÕpT_úM'êÖ—¢m/DwCinÄkAü~íè„wÒ;å¯û%Z9œ‡0Q¿š¡)Å}¿‘)ÇXÊe-¡ÅB2u÷Obù蟆ÏzÙ(OÞt—�)ka6Y< >€F(kŠãû ™:8ðÓ:³­IDI¾7Æ®ÿøÝœõÃóR³è¥U¿uyNùŽüÀ#Ã~|dà‰÷‰9: �t0¼¤sWš9¡âÉ6»�Mt/Æšncâú‡"ëd ßB‹SGx|žª3(ïºÍKO䃄~myöîðÿ† IDAT�Ÿé¬žþ=xO8× ` �Á0‹ÑÌHæ ”†«Ü÷›ôýôgÝ(aôà»±þü_‡²0FŪíû1¿³ú °×V®5A?'Ñש’že൶`TÊ)7½Üµ‡{NU}f”�Èé—2°:«Fé& ¥hå4�-¨¯Y¡ µhþ.^r¯…ÀÙ³„`‰`jè:Ôf~‚Êå.*Å¢Ûöa„¯çRAt»„¡¡Oò6�3 eü3ü;õîy€ãÝ.ð ’Ï�û ÒÉäœW\o�ùܱÚu?øGе" £ÓØB¥»Ø3éaüÄå‹ûho©�blïÍX=wèºu[aü–»+ǾšS«È«`B®ÆŽ�ϵ^ã5ç5ò²¿0ÊAê*ñ£‹Z61Õ©E¿Õ¢Î‰ÄlŠ®t“T6e�K /ʳÖr€ˆ@?yòä£ãããwÚ¶­g]½â E€H)1:: Çq`YšÍ&–——ä °7›Í$¬0ë0¥‚‘¸pWåSŽã$¯??;·’&ÙÀCõ=Tರ°Ð—º³oûÛQ©TÐh4púôi4�\€•ýw,%‹ÙžT©�Ûí6žz* ó}’eªp�I U|k{íÑ40èó�‹š�yv7”}½¼9ÇtöDÚæ‡2Ò Ý~Tz�DèWLŠt‘£VÒËD>©ß±´ÑE˜•Ìü.>ܨèoGà£�õR+T§„f _…"ƒÌâp“¤Rè4/ÅÉÈÌÒ]SŠoWyiùeÖDC �øëçl»¥l»Ê®Æë…£0!]]{ê.ShæÛc‡.kx7ÌJ-ÔŸ‡¦Ÿgg–­ãïœQ¨ÎÀ¨LÃk,DìEù}þ8l ’Y ôñmšUÝ«RK�£úælH†aõx•¹æõX¬_ ûÞ$Êfyâ{ýÖåg‘3Ot…âç�íf–º «8$Ê¡ ©ßz.šaY}ñ‹ ÍFkîI¸³·‡Ù+©î‚è§ÜT/_)Q™¹�µ³:u°Ôˆ4ëýVm×fÜæYh°†Æ#ïpþ+…32ðÑXzCS#Kç rJ=5þþ%еY´Ç »zÌ Ý~�5ríß8k'+`[C¿¥löòêxÀ,@œP‰'Ô0àØ¤”5õ£ˆœs8ýoº’e ©—oº‚H‚û­±Ô&U´¾{Ý-ø�Õpž Ìì{\7d7®^ŽÅÛ¨—S|;Ÿûƒó €¾ÓHö&sˆÈPÏÈ*2§ˆm =§àP ®,£’=!Å€H €xž×�››û�¥R飺®ëj¨¢:˜­Ê£b†ÂqÔëur»wïæR©”¤› !077‡V«•ªÛ—:ï¿f§ÓA£ÑÀâââÜÅ‹—¢!z6 ƒƒ Ø3222»WE²+Ö4�Õ9Ž<€ÿŒÃ³`‚™qüøqÌÌÌ`aa!Ù¶,Ô¿Ö3*• VVV’ÙUv[+Ç¿KØ’@F­¬èàr;¡½hèÃêT ãP�µ�嬩}F•ºÆ*Ž.I¡—aú€õ_�ã÷é×îW`p·@†®O!wýãâ[•6f'Qeæ"&0ÐQ˜�Ôë壚Q¶I„2"½\ƒŸ�’Ôß•”9†Þvp =,1üîzÙÎù%»6ä54bfÃ@¾¼SmZ¨ïëÊ“‰Ä~&éX•±¨Ö£þ¢Œ1„"ãqJ¦á˜â÷Áz ˜öäíïè,=ó©Ì÷4è:xÀ³`€t…êD4ÔM0 €”–ÊdE/B-ºfyÅÑÐ^{. ™4Kïð¿gšDÛ^Çý01ð« €„½\ ÷/Ú‘°û y�æ2¼Æ|ø÷2ÀÒ±OcÇ}ÿ0Oè ½ ^p‡¦P»æA¬û °Ð@BÖÍÊÿÄ20‰„fÀ,Ö”sS1ßM yõöq8X}ú`>ø/aÍB„ÒªT®€ÕiÚu:‹Ï�…–ž0J¿äwê'ƒöåìÜ�Ä y|�ö @DÎæ2ŠÃû é–rRd¯œ ½dAeå¬S™Ã¬ÄJ^¯('ÕK€4=qUKïîŒü�I|l\z<|¡2pxqåÖõU.6©XÜ@©TG©Ô‚m;(<F]gè:Ãq¦Ðh¼†�ä®ë½»¦õîBôÿ"€CÑãЄ¯?VÀŒ”nkå¬õìÊõ` ÍzvkbhoêZ”dIe)T„QBmöF,�|2d¶uûÎÒìë?ŽRiÅÛ][tŒ-Á0üˆ åe¾î#Ï\7doêuàsŸû:§rÈÕ´^½ù™WcþæÕ``^îë¼Åÿw3âïV’U´Ë)H61 ZuÛd†áð3,EQ»xú-í¶ X¤FD`ž:uê’ïûÿú¦›nú9)e!.œU§(DÃñIèÞÅ‹Ÿ]__¿022ò}š¦%¹&†a`ÇŽ¸xñb*WÃ0Œdƒü¢EZXXXzâ‰'U ­øböl n(ºÝxã�‡FGG÷(6ÄBÓ´±h.„ÕŒ)%Z­ÊåròÞñ¶ù¾�gžyÏ>û,<ÏÃôô4Z­\×M� U’¦þnrr­V+±÷͆/Ʋ3ÕE«b­ø›jv›÷t ;ºR¯3Ÿ-¼"òº']¦þ â¸(‹ÃÙú:ò.ÊŠ�¾*ÃH��L«¾sd_Yíyjš�íæj$˜—`¸Ìlf˜Àìù�]P‚œ"Þ‹Šxõ5td í™%Ã.šnqÁ£ŠÃÕ §ôvû[—¡ø‹µ™ƒVÛ‘e'e¢îL™*ô s™]‡‚œ†„K†ýŽÒ5f¥ΔñaîŸ:F_@žº«•YÝ.¹^s `I¤™û2β·yN7?§Mkz†]†”^渢 ö¡LB<¢¤j%z\érW÷Ü�öâ@XKê¸ËÙ8ùp˜Ë• I˜?`Olžk�íLœ¯RËÖð4¡AʈEe‘¢È|Jf‰Ís‡½Šõ_Àô]? 3]PGR¥$oEy)«8ŠáƒïBýÔWÁÒ‡ú!kxö¡vûòŸ Ø87÷aý…ÿÊ#‡>ø9€~ ¾DkãE �ß}EPÀ^æ»W¥§”mŒpo�SeQ”Ž©gX;óUÔÏ>Úcyâ×’>føïP(Meš5”NUíc¿Òç ³D}ù(:—Ž�4#l>ùÝKÜn^D+–8LD_C(½Tƒ1Õõâ¯F$¾ka†Q T¨�#†–��`hh ÃÃ@© áÝ4Ó€&1ºŽv�.YD#€˜ ÍÄÖüIŒW&áS)ùÌœ HQú`Ì kê.æŽÃéú€ô tûÍ•Ð϶`/z^çÞ]Ǽɡ5.>„èéŠ³ìæƒ¾‰bÙ™zWœ èý ™œÄt:““Ÿ’^ŸzÑï—¯ù~u:ÀÖV—¿ò•KÛ‘«-¼ÿ!ЫÅàÐU’Aÿ� }73 yy$úm ƒ­‚yS¡*8Èë"Êm•+%½ç’¸°ñxçÎ�óMÓüÝ]»výR­V¶m'`A ±îÆÆÆæéÓ§Ÿ¼p᪮봴´tA1«²%š¦ajj çÎ�ƒã8Iq®&‰«á�õz�_zé¥/½ôÒK+HÏ»$ÀËuÝ”Œå©§žzÀ7ÔÏuÝu×MÕjµÚÔÔÔ±×úú:4MÃððp¤Tâû~’ÿ³³³³8yò$\×í³úUƒcåû>J¥Rbí«•‘‰_¿\ÔÚ–¡¹ž˜ßÚ› ª�de l¨éãDIs³¯¹M„\{£¼†aŸœ$‡1‰í%S³0Œ¢¹¹Q¡ª¤&€ÓZN€î õ pжéªs;äz$ I­TšQ–5^tcæ'Il£”j, /º[§�$ þ*˜³sYy©¿WêÈ9@D] DÉ»{âÁxäÖ(ÎäM§Ý ÐçÜ”:ž˜úZ+$t†w­χò9 ¢Rd ÛÛfå¡ñí ±wQ¡º#ìpsû"ò ›ªÿ§ô*J‚r4Ó„°'ÀA,Ò Õ78À“ŠTÍSÖÜÔ÷4zè#AŒÊL³–†¢A¶Ž÷3|¿‹­—þŸ|„Œ›†Æ…ÇQš¾…ÒXÏ݉�~-‘骒1´ótVOž–Xz•`�î-‹iäË��ÓF{ýô×Dø¡»ºÃƒ]žIö[rX0¥w™c$YãÁtJ;Ùq(°ïÀiÍ÷ŒÎ©'¹„¦cùù¿Âôm€aVÓ9 °ì!6TœöÖ_úHhÑÜ„t‚ÎÚ äÏ…ò6×õ )˜{9ç­�ÄÀ'ÑéKK¸ŠÂ0©ü}oV+ ýžšð|~óPÙßÛG’z+S¹zfT÷½Ë/|)’؆Ç,à�:Â(~õÂ�‡…§þ ØwÒÂB¯s*bL�¬tr€tóJ+s^ö mÓ8Ýîß©½ÔZ<öXu÷ë�BˆÛ‰ ,Ÿ}37ÏÂG)ÿÚ€þã¶8¶c7¼RÚèl­ ÓhÒwó†[)nú·ŽmÝ:ýÙŽ™>"à(—““@¹ ‹@¡À°¬4{c s“09®;ǹºžfx¶“¬õî M“Ñc ÀµaR¦ÞÏ0¥ØÚùî}÷�¤üTêâ˜9*èPÁLÈœÂììÉL°g<�˜°ÊܨìM£Aøó?4j¸¼R%/ÚèÕr`ûvK×újòï62è¤ýVP^v&D^E·7Ûõ½š�Ÿ#ªÅp_æÉ'Ÿü2€ÂÌÌÌ×u]·èRJÍó<±²²âH™$U«Ï—G�ýÂââbiÇŽ?>99 Ó4 q11ÜjµœåååÍõõõG ‚`ssÓév»ê¬jÛ³D }C÷GŽyôÀ�í�;w¾¡\.Ûº®£Ñh¤$Rª¼JýwÌ’ÄìFüxuuõüO<ñôÎ�;íß¿w¥R1,ˆRìCCCXXXHÙ ÇŒHÈú€ü@ ×õ´õºSp=©‡]; Ì#R—= VÒ�cîwÌÉ’™1 0ÀNÜm"ås ž¦”F$@º‘t )bPX+€5=•÷’bYRܾò“’*’Ú.†X=…fcÐŒ0QÃk-½ŒE‡,2”ð ÌÚ^¼^P8Á*¬"T»WE᜖ŸÄŸÀi#ðZq !slfØ�¼Ôï«qy¡ç5 â‘uèÅÿ#%é0éÌh•Åâ;æ'ôÜ‚²7I›&„ÆÂ3 „®c ¥È×&'€Ñ›~Ô$e‡ -–rD{˜¹OýÆ‘ûQÂzÛ¥Î7D~ {…©GIò"I_1º«Îj>”÷¼U3‹£¶Ðô3ý¢,hŒr-,rF 8U’Â0´ÐÞœOìŠYú‹øº]8Hd pšh¬�Euê`Tœ*hž2V±è¹Ê1å±½hÏ ¨/l¡4²Gy^úû΂èð;“Ø<õÕð} H¿ƒµ“_ÆÄ¡w‡š}¨¦žÞl3P¨í„=}Ýå³�äCèÖ½Fuözguóô»¡õCKöÐY?{É»î?è€ P` qîð®ìÊ>�f¤×•8%ó}KJeI3S÷¬Jܸ'? à€�&È(D2èl¸«—&‘0+$üõ%,ý3Œì ŠÕ] adYJŽ…³7Òí ¾ò,6^ø*ØwÃ5`¹8›g‘¶ÏŽÏ•˜™‹�IždóJаFÈœu…¯PtÊ =ßt›K¿iVv|š�ÂÀÖüó(ï¸3´LÏ9ȱÃe¸«}©¡0z]´Qæ¡âÔQ¿t^·–A¨4­Ÿ¨]ÿ¾ë6Nù§Ùßð£3áÏÐlšM¾‚²$ï3™0M •J(7³¬1 N‘„D�iuõV´ZahˆP*¶�ô˜&çÎ⨠†¹M#å5ƒ�Ócmb`×éŸû@´o[Ã�,¸QAÎ[ßú~„–ùìM|�goÔù›f¨×ÿ¦¦é­M$)[V¦§nh4€ÇkÀq¾Uûèí¾óW ~ø»‘y9ÐÕ‚Êé€ÒË|ß¼ßo°˜íµåuR%~~^uæÒ2ýQ€$®ÅÅÅÖâââo°:tk¡PD$|ß�F#8}úô©)I�^†Év¸ iYìòuøäÉ“O8pàŽ‘‘Íqœ;MÓ¬jšÆ*øP�ºÔòˆ¡A«ÕÂÊÊ }ýë_Ÿ?þ‰óçϾá†vÛ±\MJI¾ïS»Ýž˜ššÚ_©Tdȸè¼Ñàê¥%g÷ÅU¯¶Ù J’YP„ H316¾ŽnEƒ—½¯’³v�"3—«~í"m�K~›'¿„Õó_‹õ3þ(‚„®;�Ó®AS´YŒêî×ÁÚ}�Â~ä4Ñ”"¡wágå¿Ó™ìÔ­ãòÙ¯'éÚ,ƒMé5û;úWåÏWf, Fi\�˜@‚4ÌZdåIJ×”‘´§ˆÍñœMø^âŒæ²ô®4ÿñ­¬'À°^áyJê½Æ)·dF6P# Kâ#�EÆe9Ÿ)o)}°ÔÁÌ6Ò–ÇzV:FÒ“Ž^,¦ºÅi'£^¦êx¤Ô©°Šz!œÉ¼#¾—:dØì*!´iÍ H¸`é�Üð÷�nü3ÝÌÀ�‹ÐXJCir„ò~É~Rå�Ìi ÇNkþê €V�XÎ%ö:çQÙAºY%ÒкðìʬòDﬠNĬ Œí3�üߺ«:vBÓÐ9i[0¥£E�ú"œµ38 Ïy" Ý•Spš+(T¦z�åŒå¼Ã‘ û_‡¥•s@(±ÑÍÒØÿ´g~ÜoÏ;ÛÈ“Ç�Å'¥QûuݮΆîh@:¶NE§vű}°ÊÓЄ—J“,Á�‡NsíÕ³(�îC±vMòùý6½ÉÉë.DÎNÉÈÍ®tÖ•™{I³ªDàºX=úw„=²æÐ$t½ !ô(?IBʾ·…îú%4W_BçÒ7Aº‰8‡Çìríò¸©�–ò3q±C:/ƒ€�dÆê{î¶?4Z¦F„V—éÄ9÷ä© ÞqEÚéŠSwL‘Ð1@Ü^x|YJ8$žµ.?}Ä80ùç$´÷ ˜èn-£<ÙÕ4�sQRr·tÝÂÆÈ�û!—°|æ¹p !�ˆÄ†öÞÿ±­SŸûÝHkÆAažÔ]hâ¸p]kkô2×[bàQ�lè¶k*1÷¡P00=M¨TBæÆ¶Cð‚˜J³7óó?!ì0ÅL�j:�<=ÕtˆÊ¹²5•ÉQeký ç>ØlÔÇ*‹£Ç!|èC_IP~8<œ \bðÒj««[øÌg>�£ºZ"(’ÇßÍäåÔ/GÖõJ©­—H¶ëd·<¤SÞUAF�!jÈšÀ}î¹çð|΀Õ Ì˹.dWB îÉ“'`Ñ1"ºÀ;¥”"N=�ÕÕyß÷á8Z­–——ƒ_|ñË™n·âĉs„ ‚ˆDµZ}䦛nú¾ÒÐäôå-ûàb�vÊÄ{Ÿ¶Z�Àhe ~y ’â�”á>¥�øö§ XRQ¼”̯Âï¢qîq¬Í=aTW+ŠEÒ$’î]üêN·E÷ gÆìÈ.ÐÐLR˜§Š2Ž]QH äô Šº™¾‹öÜ3è¶–6!p›Ïƒeý97|R¦A,¥¶#¬®FC¹7Á(”á _bBʬA/y™t;`éÇ‹´é53Ǭ?HÚó ¶�œsûs�Ø�;æÒ—`3ü¬á, §g’ï2*Ø’Yꨀ” ©dL†òBÊ)z CéÌ¡ˆV˜I/¥x[$ËpÜ8)°DÑáOi<È*H¡›‹`†Œlp™|€¡g¶O+ï|`‡Y™úEú�3GBÌD.`†P(×B‰Qσ!â0Ñøœ“ÒsR4+9N¤Û¼ð†ßZùK«¶÷C$L�IÃæ…§0vý÷BÓ­�å@”mÁ=R'ÉÑQ(Ó®¡²÷^è…Š"I£|ÅN2¿R«í­¹0Ã#þ‘Рé$°rôÓØqïOAv&”�R}uæË( £rͽØzéëQGÛk�ïÿ‰n8Ò_bOµŽ¿tæÔ�ôÔq]?ûùîÐ5ïø˜n ՈěABFÞæ*Ö—Ï$QÜu# öްi;nw›§#hn€LÕÙÛ¦ŒRÒ-(`,Ü�åsQö�sЈŠÿ–ô; ¯µþ—Öðì[…fMƒB·á¬Î¡»tRz ÝDat'„U€[_�·¹é4ÁF ÝNÖZ¡‘²Zu 2C;ØòÌS€îƒƒºßšëdÀ‡ƒüŒš>ðñàÖ¾é1ã×&F5.˜á¹âùŒ‰šxýî™ÂøæòÝ:›£? 4ó~±+•vÏ «v-^Ë'¯ýŸ�Æâ3�…'êªì“eKNó?é…ê;‰D1tÔ/<‰êµß² #‰[Ìùj1R.V�Pq3 X<ù dàƒ!HèÖÇŠ3÷|¾=ÿø© s“>Wž³¥+Ô@ pl,´-aà)t»À¹s´ X´ O�ˆ"…R#4!Hß{ó/ëë…m—1> !aobÃ�ÔpŸñ@øS ÛÝ9¯© ‡£û ¹Zü{Ε¨=8P²–}œÉE¼ï}ï�èÍüy™,ˆéI×ÓüST«§¶¦g@�HØþ¿@þ¾Ù”W r¶$RQnúÈÏÉ:e„Ì Òö§Ù FÕ!ePƉêð3HS¿]wHS¶#–sYÌì>ýôÓϹ®ÛÙ±cÇ�ŒŒpl�˜ýp]­V‹O>ÿüó§ÖÖÖV3ò0_Ùoê6 f ×._Ò6 ÷¨Ü[›5à ºnÀìÑYtkC¥ƒU!¡j?8UõÆ/ÂÊEz4Ï>‚Õs�D²Š03šˆ$HH0Å]Ð8vY‰0‹t2ZX�J,=ÿyì¼é½Êc`ˆ^_”Ñ+TSב®(cl&8sÏ`ñôW¢w!€ƒMéµÑ˶ð¾E’{®�0n¸~\Ð 0üÌܽèõOEo_ÔÚìõåYv²“À r¾ú655Ä"Ï0^³³TIR¤pññ„t�*S!XD’zNÿ_ôo–!mÏ,A,Aºy½^œØï·—VÑo €1zÓG>à—Á°Âý¯!èzÐÍbï8B~´L€«³œ Pûÿ¾wk5p—!CÓ u4‡ö¾í£šUùq€&cÖ€„Ò Í€94 ½<¾)°F šî™0õdbÎÖeH·…ff;L IDAT8‡%èÖŸ¸ 8Xîz\3Íû!4�::�E”†gÃ!u\Qæd(c–¨ÎÜÔ2žf—ÔïMš Ç£=*À2X•�»¤ë£· -dê Ç1<{'ˆDϹWöäW U,“+7 ½| ~s RxBÓì·‘f½Mh&“Ð7«{ßpœçêsO?´.æ¹bqýÌç륯ÿ£<ùAÚo“`š a”ÁAͳGÑðŸÒ‹f{d”u£Ý.…Ä‘‰‰^ aše àn.'s2ð×" а)Ý�­î†{ÚÜuÃG ¿8C’³JE¸è.ž«9¼4‘0¢ý¬X‡ mú¥Ò "Ëœ(­›I³f›¦ožœæï¶�‘½M?òËÎfcd¯mxý­Ö¾ÝÓæ¯L�i\²L=<`|Øt¦ªóÞÁOŠ¢UeBÊ‘#Σ �ö.ͬ¼³8Z~ÉÞóõ…o~Òß<™˜ìÔÏþ·§j×ÿÐ&Mÿ‚†N»‹Bý2¬á]Qs¢7{“¢*nɦ�¾1†©ënÃÜó�…�(¡Ã¬Lþjø U�Q-’еð]‚hv�ìSnÈò«µ¥Lç\djdjŸ,¨ÄÒ\©ù›’¾�™àû¾ÏÛ ¼nÿ¢Õ"¬®Š«Lœóü½FFå2`ÛIÏ8amzÌ ' ƒÙ¹s?Ë’ àéIÖ[G§ep4äˆ�Æý`' j>˜v¥¬TM €¼ºlÊ+e^8çDR“×5ô[WfOüìb©)ÀCG¾õ¥ ^²Lˆj¿{¥�^ÚfÑrX€uüøñÇ�ÿÄ]wÝõ®‘‘Ý4Í[,ËâxàÞqœ‹­V«säÈ‘§�F½ôiu€02—\,ŠSwÍÚ£×ü:iæ]½g …BÅá)XÅ!hV 2*®º28ĈS~‰R‹:eØ0÷ºõ±HEúê‹Ø:ÿ6æ"ö°ÛÉ�Û>!½Æi�ÆD¤ ?R@BÓH3 ½úŠ¡Ûc· ½pÀp�:.ÿ,&¾ T�'C›¬Œ¤¤)z'ÔûAŒÆÚÙh>”(�ÐkFeçìuñ;K•}죦â�c7ÿØ­ þ0Š¡X¨�uÑ+n#§!J¾AJ‚Ä8œP »Ç±Œ-ð6Àìbð:ãÂz�ù0·^ã2ÄÔthX£°fiw!…å‰Ù eÎBM–Nfx!ð�èo$ˆa™•é,Ì¡D'4³<¦™åº0JÍÀmœ, ïù~1>„f PÛ�Bm4,(cÍ=Q*ß#qAŠSÇ)qª¥ˆ1Œ‹aF˜ïКûȳn€AB³K;îûÇB·ÞÉÅ@Bƒf Á�…VªÂ4‹‘´'üQSü^1$¢$zI.‚ï`káùD*æ¶ ºËQqÛÐp·æ>©Û£× aŒ„úéÃ0o|Ìâp¯��¢6•jNÄ å“–—¬J¹O\;X$Ú›ópWž•0ó!p.I¯yR/ŽÍ�0& h/¼€âèµ°*#½ï>;Å=) tûïÁÊÑ¿gÙÈ‹~ D�„x€´Â3Õ=¯ÿîü��?s9‡Ý“­Ë‡[þÏÒŽû¾bGB{ˆ4}'`…a¤AXº¡-2ûˆ):!,QTfÔXqdRòß�B"è4Ë`3b šê6Ùk5Ý1íÓÞhõ>k®¹C߀ÇBß)H×™4H¡ƒ¤¡ J†Wd…‘¼ ¤ B3@š Ò,Aš)H3«B3«Z¹ø{æµo9ÆÒÿ·['?ûY9¸XL®sS£ú½£Ua”lBÑ"è:Ðrªæ—OÞxèØòÈŒ®>Mè h¡;œn€Á÷°äp»eòn„¤éÿ¦:{çOË©C?Ý];ý‚YÝ9#ôÒMš B#ÍD°u<4"¬¦G%� ¡0ë*u–„JÀ7'1<½›—Ï„×?·g3ÿø cUâï²ï¬ éªÃZ´Õ•Xß žúÓ/¶þ8SKdã ø uBžee­ªÁ�ÈœeF²ž÷~W#ŸU·K 7£+® ít-Ì›#¦«eçP¯ Ôë4`ÛyYôÏ!ß! Úò¶ùV7bï^ V ÁO©‚˜Þü'’4]çÐt:»áº³)�“gJ�/Y#Âk·è ÐÍe‡ºóèÈ<7.Êÿé\€<ú4›—�M�ß®øD±œ ‰ˆ©Ü-æäädÕ4M€�¶¶¶æ:Ž#9š�tÒµ‹þÙ”|Lß=c�^÷û$´[ÂÕY@3J™†Ù –2*ozíÔ¤ÜM†�{ºNdÙP¬Pr¾‹ Û„3÷ VæžBà¶zÎ.$8ðÚ/JgëE{@fÃÃz×P­P,Œ^÷S$ô�±æS c{ï…9y}¤s¦t�Z¼ ¥EœbfÈ…˜{éËð;á':H³ ôBéÍÙ¼ðH¿u¡?~iü—£ÅØÍ?VøWô19j“�_ššŽé“=œª÷HÕ�9..?úà8« ¡#p›‡gó) æ£û2€�¨�q¶‘cý½ÝFoúÈ[ø"…IkÚyÌr%ÝÏpiNæž´Nõ}îÅB�}�åaB3l�n{B/šQ`hšÎ$t‡!F(bÅ„^@iüص©(ÿƒ‘Ó°ïIøT¶!Ó6é�ŠóK´V.cáÉß�0ªšÉnýâï³ .Ú“·Ýe”Æ~Pèš aU`�ìBer/0˜ýž¼ˆ·«z�Ÿ‰=,~g ¾ôq�Q ì{güîêcV,X°bO۪ܲÎþ.@‚e³6…á]w f!²×ŒÈ.q©òEÙ1a–“: –>æŸú$œµÓ Ð•Éóšó`C³F-kdï� ÍÔAZa7¿‚ô~q 2Ù+Ü+¸]·§¾ˆÀé è68 °ïB ;ܤ3Õ9ðßUŸ;ò ¿qFæÈWu¦Ð«E­23fÊwkVù£�òž&¥+ }›e@já_œ¹7~˜VŸMÙÉäÝxî.}ý÷¯ �ÎÒÙx$p[§¬Dçð:€:Ýu×�Ø»÷õh6©ðÕÃÿ©:T‡fí´KæÒ„ DÀ,:®Vhº…’ê¢HBƒ0ŠÐí!« Í(„²%)Á�î—hþ‚@>À�8­•Ÿhžÿò*ÒžRÚM×êæÔ¨V²LÐè°ùï§Çt • ¶Ehº#ö§ž¸ó¾ÕŽa'’=Í€Q¨`hl¥j ]Y‚Œ‡ð` A{ kó‹ð»u¾§he©p ;–Ë3``x|öôíd�>ör½H”y5‡%’�Ìý¾3I_ó.~ñ—ÞýæÒ?�™ÐG†+BÚ±ľ´» «Aë›/vþðÈ Þ…Ùî•@€@ŒTH¿óÆÂwÏèw”l)Aõ }âl÷ß=ó¢ß– µ.�WÑ ¥«¨ÃÔæm^í•e^dNíu5ìË ð“•²ÓÉ[HäÕ]WËÀ 2WÈ‹ È{ B˜‘K`š”+ùw Ã�¯1 ß9LKÖ9H=ØTfájP8)’.- ùV¢ÛùŸoâx%i™jÇ*3¬Šê²eF…¢¹´´¤× ôç´dS§=ô‡n‘5~«m�^÷/Hè·†{MC±8Œêä5 %ø�—Ó’!%£§oWóÒR@ï6ÐZ} 2à9 ÈÖ*6濉€ez%´X^në›Ò­ŸŽ ãf$5h¡ß–4µ°pÐ%·±üÛ…‘=¿@¤í‡]³¥³�`xý<ŠcסPÛ ¿0”Òs’Èøî§ê&‚˜¹ {&÷í/¢~æl®Ÿ ™š( ¿¹8Uí¶žùM8ƒØ„«;| 7&î±Â€0,håÎÉç\©¢}®5Ûp½Í^‘¸Ø�à Ÿ¿g„�‰Ëv€ÝúeåýaGž¶¿ ÷$DýŒ‰ò÷“7¿+Ïh/½ ~³°‘ˆ³–(’u ÃÂÐŽƒ0˵0…¹N =–H¿ožó›J»¸.VN|B�-nƒ6K¿«—wÐŒâ{cúB3Ë(Î\�bu x½Î9]Y¸A9!tÄŒ�s‡AZOÿ¸›/(ìG3úÙên\ú†YÝõ!ôw ¸ë—Ñ.�£<~Mjtlöo¥Juíˆ_Ëm­†Á‘Q×?p[Ç¢µ¯8k8Øùwd–ßB¤�}Ý�9Ø#»â­þì˜>ðÊ0Í Ì‰^nFàwál-¡5"’*ùĬUIh34së{ÖOžy<ç:ð¤¿Õ‘[+ð5„.Ãjöä­ÑôÂ{XJ“9Z²‰ò®[Ò?ÃË‚W_ Á‚€ñay-AãËËÁ¼Ò`êòå•ãwŽšwT�@¯½Á{P××54)ù’°îz¬Ÿ^¾v÷ºc…�ò$ tC×Ü {h´B)\‹9æÒst›h®œAÐj„Òtb�ˆÞd•ÆÿFî~Û‡Ú¾x€üþ7—þÑäˆF¦A{ &]gÛ­¹áaÖq«æ_=}çëV»¦³ìz¡ŒêÔ^Å |©¡éøÁíŒè€}µ½ãð;›Øº| ^§åÉ� ��’ë ¢p°Þ¨î€”ùž94àeŽõß>0<½+gŸ‡Ð¤o¼û¶Ê?*ÓdÉA©@\°t �Ll†8½äùÖ[޼àýQ†á+0!؆ù�Üa¸qŸõæ±aíþJ‰¤¡‡:3¡•§Çõß:°×ûëO}¾õå ´ r˜ï+e´ þ=7c×ï³Þm[„®ÃtfÎýæ#ßtOåÔ4ƒ,®iãs%’ç(ªÖlr›Æ3¶W’žå¹»] °1RºX_'¬¯_é}³Æ6¯�ï0 ’ÇNä Qm‡¨ãƒ#ØI_ Ù^�ÛÄ•çœ8ƒ€ˆ�ÞìA @²Ÿ{Ѐ|�‘`¡4~ý;Ièo ß]C¹4Š‘ס-ô0‘ú[ ªzQÍ>ê—žÂüÉ/DB¬‹Ô@0â!ó,×üÎê“,½µX1 ñÏúsRot–»«þ/'oü�~A ÒLÔ›«ØÚœC¡XÃÄ-?ŽÜó†l’9@ tèµYLÞñ#(_:Šå ßí‡I¡Ûï*;~¡uùé%½-Þ†Bx¿ùÇ&ø÷ÇÀG·Ê¨TgQÙ_ €À¿âþŽ•ïnkAІ˜¹Ëà¬mtv^åe�¥WëæµV7ÍòÄç| t7ÏîMÀ(÷r®ö8Ûö÷¡„nâ¦ïÃ2‰0 €f•¡†ABƒô]ĦšYFeÇõ0ŠUpà¾âíØöo¤�ÖòKZ‹IÒ¸ßÞ< ºUžø!BBX(ïºVy$ÚÆWa¿wh-¿h:„ÿ—½7�²,»Ê¿}Îßñb̬̌ªTó *Jh hÑbX€d·Y¸ÝÝ`ì^«{ÑØnÛ«»é¶ÁË=¬e¦±…Íd� , Y¢4UI5¦*K••Y9Çñæwï=g÷�s‡sï{‘U’À%´ò­•Y‘ï�{î¹çìoïý}ŸV“s¬“}”%Wïô&»çþ§pé¶W‚å‚p€þå'á5—á­oh.®(5+DýmèI/«Ñµ4*èGÝk¿íÖn#éöÏ~c Ò¯¿øÍ—LÕ-וj ÇàÏÆþù‡‘ vÒ§IÌÁq?Ö¾å�¯ÙÿÚ>=#•%| Ý=Y�#¯xI÷‡X' ­@DpçVд4†l’¬‘„7í _�ûžvÇ;R€H°N�S<¡È“ Ý¡¦gv¼¶� Ñ:õ¨5A+ ÍIe¿¯T»™ÁJ!¨­Â=ÙÆÞ…G ]0z:è\ìÝ{Ç-Ç>í9‚}Ÿ°Ð6jW»= ­“˜qa÷ŽÃÏï·Íã!àø-̽ãHçRîÓëÂ"lÝ'À[|–=¬5¼¹›�° ‘r–ˆ™ 5¨rLPå|ª!Óç]11¤ôÔCŒ‡h"Çõfœtû‰b­˜Åʢ䣫’;A °#ßæ¤#.Qå‘Î�³˜Z¥ø»_þ×GVn5j!ôŽc8D®$iÌ+�ÃKî£Gf$(ù€$¨ˆä-VÞéÝ{ç©àçŽrä|Spà!,Ö@«¡©ÒJ-hüìSçºÿ|ày1ÀçzcdÝ'ùcoküèÒ¼¼+ hY Bsôà]áå_þàþÿ%¤9¿æë}î×K¯¨¶Ì "ð ´EÉÌñz¢4t@œYú}y#æÿ–}ýeðsøJ`/v1ñ_Ò5̪®Øý›I¥Òa·ZÙœ�xÑnçÔn~�~IÇÇêÊIL‚V*ÏX ‚ ®øcPJ:'눠T¿…ŠßSzÏ| {[Ϥ�1kµ æmVñE5Þ{XG½ÇÁñf 8ö`x ;Ö×núýÊíXãÊ×$û;«Á@E“gü¹£·‘to3ª%.–O¾Þüšé/¶ÆYÚòë*d€§zÚksh×:èî^LçÂñ¥W;·?ÊÉ(Æ×¡‚U[½ï‡Áô÷@�€D­¶„ÖÚm`O¦¼ƒÌh�*'çÀ öU�€4ïm"Ž» NÐ$é^ÕQÿl è²y´95üR<»£Í'ûµ•{@ß“e:Ç»Wá5æ!Ý$DE^§XaöºM‹ Ø>¹5¤t�’S%(&!áÕš$Š ,'½SI6§Ða£è±Ù öÚÉT¯À㽬?þ»Ð“-Ã}:>ÎÉð¢ß>úvr_8üδÝf$z¹¬œb¯OTB¬âovoS1s лú "@H"é$:œIŸ³ìÌ€ÿ@ÄÂ?w€Ä­D@2êBÔšð‚vqå¥6Ìbî«1D¦ F³¶>Aî]‚l™µKRk5y¬¶¬ñí%ýK�†�Ûn…tŽI¨Ñ.œF®ß8à3ËóR´ÎÑÔÝ#A{ñpɨ—ÙÅ­ŽWûüdïìÅëí×ÁáWÖƒÖÑ?%uÒ­£uê~ÔçO æÒH츒,‡Q‘®97hc¸<î>yrÂu?¢š?F=è«Z¸×j»Q­¾5 êÛc¿¾=öj[c·¶1ô«}/Ü{!„$" é5Ð:~ÂÖ‘´µ° cíÕÅD¹p€‘WÖ�Â�ÛZÀ¸wO0öFAóŽÃ“í£Ë£ ÚÚSØÜÑØh\ÝRØé úÂå»ïÆnÈ$ÔçÑ9utÂ?3€¥©4`vÖäÏP&V,‚‚%h-Òê™H�q E±é|ÍÜM Ÿë™·î [ëDCõÏcØÝaµ5é5ƒÞÀw‰=Gð‘}|à×öùê–æç.'¨­�ÝžÞ<ý\|nFP>+3O3Ú‹Ä÷¾&¼ãͯ ï[ê8¯mÖD­U}ß',Í%�ÂA¢�A°R„(aøÏ]NÎ̈#ª¢>/XyðÈ7óI¤¢'1XgU�±õ¼Å’Éæc‘ßXþï�Úâ›@²&܃ �!¨ÍCz-t™Ìa݄ʷ¸¯Hç-³p°|ë›qy÷yÓ*œP¸­y¥6Ÿ¶ª cf ãÉþ?qëË/q›à£wñ1x·/B ·b‹^¨“UíQlÂŽ¨d}Z7݇ÍÇÿبŸACzµ_”þÂ[Ôd»ŸþRbWbIÖ¹Þ9õ>�h•$µ#ÇQk†VQ¹Bg©.Qe=“•ò‚y}àÇqá¡_�ŠFi€lK{Š\FÙlç”ÎcVMÐé:fõµ¨·×�¨Èòn²¥‹³Ï¦’wL|k®SGûØ}Ø9ó@Ų#?ýÕ¥›&£+O ‚Œµ YA>ÆúèæÅõQmNÀðÚZË+PIªÛF–¨‰ò3%<�?ï)1Üš«¬]Œl-];�ª3ˆÒõŠp¶xƒ­ÚHA [7"[¨$=ÃÇ"�š—ˆÑ„�Á˜uhõÛ¿º§—H: º$>%A=$Äq.±m'ídU)qõÀínxÓ!ÇoÔHúžó‹‡–¤n„Ôáù.a}Gå€Ì‘w}ß�âÒ•�ãÿÏ&V„hÖ„€QÒ«¶BÍ!ÚÜrT¸·ŸtÛí†x}=:ð¾øž€ë› " Ñ@#$Ì·å½w�’úäYµm]³°ž™ƒÌ{逘÷Ü섇—œ|â°ƒÅ9É�Áw BJ�ÇpÀë~dôùí.�*•ô¼Ø™©ö¯SkB|ïw6þçÃËαù¦@à›õÅüžµeg²Üq¯ýáŸ÷ÿÕú.óŒ6´ üòãéùëJþªÌ_Ÿ« " hÅÌ4ÎìÖ°Y_æÍ�`…@¯fB¸ðÛ‹PéóÀ³‚²Ü>Èö®š‘–RíÕpøäëñü¿—Úyx -ÝLj´k}õ,0ÒŸÕ‚i/“ë·¾ø~"šK'@°t +«¢PÞZf’gA•À HB33üµ»Qß½Œa4ƒáz?*¼Îgõd+Ûp¢ ø+·5~ À °q—Ÿ[¼äºHTls•Í\V[lŠÂ!>{c §½ŒC·¾—žúmsç¤ÓñæN|ÇdûÌs/-æ˜^ó{ÏþÑdþ¶wÿ€p‚ô„Xbïì'á4¡¶p ÁüQG2ÊÀ—2*=$@)Ÿ¡êIagT ÙÍëÈÓ‘ð[ò­4ƒ š­G*hèÇ IDATB‚¤Sdi³Ïa�$ˆz[è^9�ÞÙ�2ÌÔ� «Æ;Ÿh$½æ $]„«·  ÞÛ^°×íŒë°²B ¬Ü¥5wÓ«°úÃŽ!¼æ±¢îùÿ˜VÅl›Ê²»vkÕ‹õ­ èÜþC7‘pÞ˜�.KK7A»>X+kü6Ã¥¼²•GS‡“u@º!Â¥<ÿà$¼7H¿½ª'[1f«oäc^º÷}MïË2µÆ2Ðnð�éþtQ  ì&9žÕiÏÞê 4®ÜŽA÷9s׽ƫɩ„“¾]=û–�ß=óëí[ÞñnéÖŸH¼Â!rëPƒ ìí�ƒŽpj«h¬Þ ·QkÆhw½KAÇ=û®Ÿ�Ô‹ #oé@ÙÝ~š5ñ mðF½\~äßÁoAçä+SÏ�—% °sæcP£-ù;õ"XdÞK†›ŸdVÛ$¼±püIäøðÚ«€%Á•õW&®Íà3Löå«s‚Z·½ýç¿`€›¬‘p˜ ñ%Á ÙNrZ,¤sŠ€pà6àMß¹Îé�½gl"ö&¦­(oéžïÇåOý„ç�È©9µ•CÉpý<Ê­¥19þƒDÐò<¸aÓ‘J¶Æ$9ÝÖ4ftÈš5¼öa×5Õx� ¾À£ö Á›¿»–Èåà’¸“ÀÒC¸|(­ž”?›¬¦#[G¹hzeèÜÎÕì¿AcAcõ@ÙeÎ+tÈ÷ëYòF¬Ëg\_ÌÁÛvªZ0¡qø .>°°Gƒc‡ùÌ!-H³ˆÔœ7f£‘LÒA°tJéR¥Z•*�¦s•Já–û” ÃFâ2  ‘¾¨”µ)]+]?å^]›yâM'ˆúÛ¹7ÉÖ~BB++–��h3 F ×!ĉÆê‚D»)x4Â|3V^”ý3ÏOžºí„WgoZ[vîî´j¡�x.Á5`ŽCpS<Ï%D1c·«0Ž×aÄ c a0)|×p-/^K@„úÛ_ëÓã«[jÿÑg’ç+�ež™Çw…'ŽrÏk¾G?µ0'¹’}SipJ¸tMA3C3AiÆ?ýù§àC)àüå1–;†µ 5g¦ªjø¦y”æ�2oYzðv'|ð®ðØ|KÐ~Ÿ_Ûª ö\Jç„Ðjæ]¬_‰ u ÎשÂT’½äÿð[j?¿Ü‘·Ì5%uÓ‚æ9&¹ 4Á‘¦¥â–cîí¯¹Ç=ôÐãñ5«\§½ì¹ñúVB/D¸ÿº@�_‘U:ÍyDBBë¤0 ³ˆ¬`€ÓÓ:k™ÈÊÔy?:Û’EGgS©5–±¿;ˆH8aMGÝA :v-Ò¯ÛÁ]Í(WÏœÙ8N n…k`Àsí%Œ,c8BÖ{œvg=¿ló*²k RÛå>'ư0\ºêìgͼ8$ÝÆÂ÷ÅݳÄõU?Àaw™Š”�`~ÅH…wƒN³ÞLvÚÖr0ÎTkò̧55ÒAsíN ÷Ÿ !dp« Z‹I¿Ó¦�ôpk½ÿÌG®Ô¿ú­~ëðO�äÿHÒm2khãž<ÞÂγ«(UiÓ9è½òð±öŠŸ€ðj(:Æm‘�²'„ÝŽcu5Y9·„mòrÚÃÁ:Á`ãyl}õcàÑ&Fà \^ÿbå¬Ê>ÛI¥¦³õGZÅ£§ôdÿifµ +üŽ'œ )¤éÖà:a™fž·Âd/Z 1£¥�ÒµšµOr~ýEÏ}Ø>‚>}Ѭ!› Ÿ€¤Úš‘·u ·E€8EK¸�NÞ‚6½b8ÏôSjî™Å;…Y"òuÍO øá<œöèq×Bz�U ׫­¥ŠH>�¹ ×Vn� iZEÁÐ,  ‹Û΄ò­LCK¶M ‹'€H×¹!x¸›&UÄwø°u£Çôö·¿§NÞ[{lð] ò|ø~'U»²Ò™})µnq-²@?k«4ý‘.¼]ŠV6¶½óÒ½ X¯”µ’–z½,!æÜQØïk?é},Ú ލÃ[\Áxó*ˆ5úãæ|\ãË$ˆ‰˜‘Ž’N0QÂe0׃븦‚`íoÆ †¬d —2a¶” ãUÄ«9{æËÎÒ™PGÞ^EŸNd­¸ùþ�îõYûWzV¨$Foó"À25vŒX)CBVb®!h¯¯Ès�SG],w$¹ ¼yÂŒT/½ûÈŠó=‡—œNè öÁ÷ˆ]‡È‘€”/$*A\—ñð飡BèPúëÛ ã c!¨y@Ðã:õ%áJõ%5âÈŠë[ã�­Ÿ;¼$[­†ô}Çë¡`ß#î t±Ÿ°ºÜÂhñV<ú©Ïb1<¦*áˆbšcaï# e9)bm‰œ#«î‘ù–¸µY: (ó]S‰DˆS^SèÚ Á/¿-|ÇC�ÇD™÷s�þ�¯äÆë[ ˆ|Ã&Üob:†WkbÂ:íÖ9á. –l?Áâ\°‚šÕ:`•÷…¯±ìž§]Ð(å�dÄs›ð:9x¼¨žÍæÚË¢ûÀL?¨aâ„ùAÄYÙßn³*µëd*C”Š\Äýç… çtöh·V±ßÛ4‡˜ô¾À‡P&“i”{_à-9C’'hA!±�Y°VÖ6™3¥#å`›½3\ºÙô‡3¬á†�’þ•§a|e „¼hâü_ÁÚÎ;ÍW>×\Á¿ Vîÿ-¿µö3$Ä;拾A$ … –±‘Qe#lâÒC¿ŠµW¾NØÊ³¨¹yN(ÏZ ‹{+*±"ûk·©=â¬ô®œÆæô$}o„�¬?ˆ¥“Éùd¼ó8«hj_øÍ9�OÒ…ôkpê-“­žj?!K,�Kk‘*­EœzGd¿§S>tÚb¶r®À2ÅzÔWoLân0ƒÁitrÄP 6o ËB“5¿le®³g�*!.ÝŒÁÅ/›'Az i^;ŸÐæñ7Q˜‘·ƒz;]öóQ8³ç³BåD òŠ•Ýš™Õr þüÆ[gÓõ'�h`º÷Þ5Üu×-ètÞI�,Æ:ÈÓÚòQhmq Ø6À³Z�òÖ#›/có`µ¦|#Îk#¥µI¥üƒ(v6.D(¿6‘úáA9UzÒŠmÇVˆJï@ú;~ëÆ×ÎAƒÑ�ÈEÒ |ffðâœä¦öl’ ,Šs(•%K„§Smz4µîͳÄ`-Lu„ pÄÖÅ_§B^„‰K×^«ô{H«\kVnÄÅÞ‘òÈÔxñ°á·fHFÌ ÍLÌ ÏÔª ZhKj7ê¡É’»NÊ‘PiN b~eQ²+ ~ÚÆ“�s4¶† QÌŽýC)Æ¥ Uªªíõ ûª]'ì÷5„�?ä`.å'HV˜o ·Ý”Ç�¬ÈÿVÖ-9AË´3iSá‡Ø‘€çXyD1£Û׈ 74ÊŒB\¼c86Õ"†”„Z(À¬õ¬ÿdãõJ1 ÇúÓ×¶âÇÿàSãÓ(|×"ú=ß[͉Î_Å¢#éçš‚ë5¡ÏŒÉuHg• •ŽÄÓç#¨„‘$ÀC_ÞÆÃOý'„� " N€�ýžGH”mt¥ýë ÀwÝÜÿà�þbgNø*Áß\îHÕª ½½¯!ÉÜGÇn¿ÿ0”ZÆg>ùFc�z(à:„ZHYû›Ý–XgîA h7È�×_›Ö°+9œý¸ŸýèÄ­•²sv¦0v¥€©Rž§4W�KîÐB^­L„Ðé¦3FA*ÍÚ¯l®‡­¼H¹X'œ¬ù�‰ý\¯–&l3Ea@—M¡ÎÈ��×Ê€em5yGÈYÀ­å—ao÷’ "¤{@eu²jÖ ¼2Ë<aJ¢€°æ¼—Àdf�A—}Ð-µ€Ã$EÑ’á:¨·O¢ß}ÎTXÿŽtCôQxÉÄÖ†øR¯k @�׿¼=^ÿÊÿæÎ½ì×HÈU7h¾ƒï­Dþª A¬±H­]€} Vc\ùÒ¿ÅáWüM¸a0µ“Q¥¢%ƒSºt–¯JmRT¢ÉÌ)Ø:fèdŒýçÁΙ�gë¸R �6ŠkÒäSM4Á’d¸ûy÷/³Ž‡0¾,c€�!=cÌI$I0TчÎ:m¬8˜fÁ!WZ³ì9m&3�aVá…Å;™¢�œQ«l”ïŽW/*…V•)/$äcãB¤‚ì 8Ía »­(�s&8a;�0 v«c#!]3ÃñB�ð*\…ôÙEVÁµ‚Q1]P,'\ŠKwëóàxÈ n‚+:8qs·ÝöwP¯£QB×6 “&$8n=m¬$7¨ÙeMù8`eÙAŬ‚3’:çÀ9_¢h¹¢)1ù¢âÅiðžUΘ…™c2È,O0Y}LÅP8w'»L˜éÔ¡uÚ6ÊB¶®·0—¨ù–Ô­º½‘#”Á«éXE^ÑÈÖ!U–w <š?²*—€…‰ MåÆÜdQT¸íj¥ëM§`‚ 0š=@,Š*ç`Ä– èëO~äÙ©ÁE ƒLy­Ý¨×² Þu�†Aøý¡†Ò¦•*ðKs“ˆ1š0¢„1‰L°Ÿ$Œ³—ÓI 9/v š>ý @§-á8ã±ÆñC.:m�FMÀ÷ÒÛÃ÷RI"�Ÿ8â ô„r¤êUfœ®CPŠ1ŽqĈb`3â˜qq=ÁpÌH£;Є�Àå�B‚(Ñp‰5­ºÐžkö„I̯=¶ê¾ª7Äž$õK‹óîòÚ²û·V®‡Ô¬…D¡'à¹Hiª@R ¸Ò¬õ81ãO®Ã’ð�M@pà$ Ï%x.°0'±½¯pÓªh½ì„ç‘K }GíŸ>§³/Pῼç­as¾)¨QwÞ¶4/_ߪ‹z£&œÐT;b£ô´„Þ€¡��Tø�{÷L™Gi`®)Àeá�¤’ì;H ­ÛÝ 7^�É�h%‹Ãµ�&¬IƒïR÷ˆÝÚ“µg‰²òUéyɾ/ŠJA)¥Àybo–„°-%<«ÝŠ_쵑 bmeázÖ¡m‘Ê«Mò¶*Ù‚ÃE¶V65od@¶Á:+™íM¾ ÊFeÙѾœ½K-œOXÛ¡�JýèÙÀi&1Úú�°~?ýÕÆÂ-èí} Æ�™æÔ,2±@ÒKÙ†U fΘâ½3›†ðk~+�Û€:€šðæWƒÎM? ¦& Á¬Ñ½ô%,¼ì{ŠÀ …¿€¹�å@¾ÔkÎU‘‚BÂU«;g¿ˆÝ§Âid ­¢Ëj¼÷8XõPˆ&ØÜ¥¤’³È@Oº¡OÒ7${!­v¯, eòlUÂÊÛ$�ib8¡›q^K[�] ˜æ:÷¦ÝišP´¨eý:ÙŠ€’Y•«õ‡h†µEþ2¡˜ÅÔØÌ÷ ˆ´ç§BD&ûó¬²B©ʪ"ÙsÌ„�èdr° ûø1¬¬0Âæf‚ííÏÓ_œ}žîüž—ƒ8$)R™gTÈ6c§"V�µQe®%‘ ª’�˜�ªúXI`ZÀ;»?9 ±¥�¹ÜV~3LùIK×3<& r8ž#d».äRGjµ“îHlu 2OfMÏO1†bÏ-W…Š€»Y9èVµdF}Õ’ñ¥jù>ó¡É«AÖ¯§sÍšížGÜ»–¥¶½½­Mö? í¦Ä¡E‰Å9 /ïiîž×¼�ñ1\¸zÌŒf]àâz‘‚ƒkÛ†PžU;³ ó×;û|�0×0À#ð Àñ=Ê?Ã¥ ͺ@§%Q Ì;*mþ}4fìÇQbÚ¾®m+¨„±µ¯§À�†‘û•8yÄÅ…« ÆÆRGà芃ù–@-pÓè9N€Ð'ç­¯®-‚è—ç‡i/=9×Å1ãe6�|œÃ‘S{=…í}�þˆá9 W7¡©Ž²½§0×ú¿zsû'5‚„8fÚèsÏ_‰Ÿøõ�ô?šU_Þû¶úËOqï\š“ Â[Ú ÁõPhß{Ž@вV4" I“XÃ�c |àßoa·ÇðÝâg6v4º��ÌHÚ%jÑVâ¯Úš–e/Ü¿ûÃÍ¿}€Üx}[¾Üxå×lðšEd¬þœ­šB<-?Êi¦¸òËUMò)­m|C&yÅóŒK"Pä,Û,L —«Á—ušXÇÐÚ�0¡‘–��J»‹Óà‰ ×Ï ÓSŠ8Vû×A÷õ̤¡�ôk©b‹ŒIY˜~ÙU�dF›ØK¤ÕŒÊž­‘¥óêhwo´ÿõÕ{þ_“^e4–ïžšKºžìP9 ^üްH»dZ¯úW¿ rêù›ê$:¯Æ;�œ)¸e\¦‘¨íŠ^6þ‰U7l éÂÉ’�= ³³žö(ŽDåØ3®¯X`Ú”{À^ ˜³5a{dùq]6m«Ì­(ZŠJAތƮ ¦Œÿ ›¬4ka�Í 5ëb¢´*ØjUÙ]Æl;bªÌq4é›±¨LØoœ Ñh‚Ýݾüå³<T̽,,2zZ¸ƒ lºPé~NÍíÌýjÖ�Rð>sÝS9ÁÄ3� fÁö¿±V€ŽSgyͤçBîvµM4í tÞ�' !Ie¸qêzlluà}¤2ß°ì4{K¡œÄ"¦on¥šÈà™Ï ÐQë�ý.´J@BÂZ5ƒÑ¸ÓÜiK^œ¼4'yaN¢Ó¨‡ÄëÛ ‰6ë‡~û?ṋ€LëÐ^/±C=X•*½¸¾kÏ5\‘£+&T5½©jÌ™±t·vU«?ä4È7U­‘öŒþȸÍoî*tº4¦Ù㱪„p|ÍÅÆv‚C‹Z �Fh@�›$‰©�$ŠQó…Zœù¥ \Éjœ—ÑDcœþÿs—›ÎƒIdþò²c.žz.Ê�i·ÏXY�X[vÐnøæý•b,Œå±V]ûéÄdqÞù�Õ‡[u¢Z È7Äÿ$CRš1ÉôâãÄT^ℱ×7üGj †ÀcÏÄè´8|†#õ� HœúÑ·†w,vÜ7¶êBÇ ¨?ˆÿå¥ 5ùȧÇgQá·þÈ[ÂùSG¼ùî�ì¦Uçe sÍ:¹7È�×·O¹„y 5@CF(tJä>›€XÒJŸ’„ªDiu€P�ø èQ7ï¸àYlÕÙþ%ß Ù¾0·Êôï S*ž>©q�Ëm §tfž heŒÆ DZa¨øbF8hÞ×V*r,T�àjÛH)#Êe÷iû½´JyHΟ´Í—|Ð •êAÖº—Up<°ÞnØ£(8õÎô­¥ë!ê¬úÇ¥eÀ6E‘!�ô!0­Uj2|RÇÝçRÐÑ…á2e²Ò™ BŒ2ñPY•¿ÌOó�ñ(% k �D¡ÛØÚÒ¼·÷Û�®ðÁÊÉÕ¬´*ö,‰¥�Ÿ"{üÖó=E™Í«…¢VÆçàŠpÂbfì;e#MÌÜï •75@'1„$$ tq]É^_‰D± !ÆÉD{@I¬&€¢6CZ�«T·òº¯$µ²b/[×—�1­èdÁ#DÛg°·yµf�ão g&j7×SVͳ÷]ŽúØûÚÇ0éí¥ï!УÑ\]%ͺäf�t«.ôœäåyÁž+d\ࣘ!øÒSC´ê"msZ �g/&Xž—†kA/�V³þ}0ÒX˜“h×€ò`ßsL…ëê–ïš�Lî~z =W`g_Á‘„µ‰G¾aqN`¯§¡5c0âJõ«Rµ|�1 ´›†ï’µžy® ĵFF¢ {_áøa‰b$Ê�86-hQœ¿’@³iG‹.g¨* LJàö.žøZaaNàð’��´ NȬMCJ‰8ñÞ}ÇI�=ä:éÏÇIÛÕØ€D„8Û`ĸ´ž˜ï%À^× â8aììgäxB¶÷4–æ$¿æ¾Ú›ZuÁžG L"÷çNì)>¶âþæï¢ÿ"$?ñÎöß?¼,¹Q a@�zHxæ~ºÝhÁºñú¶z=â{À@oÞÂÑrv˾g±Kè€*B‰9™P*¸¿Qô#ëdðA2°ß|ÛO‰ Ë`YBµå@~*𳣬ôÎd©ÑTÅçÓƒÏ÷À©6<8¡48P&zÏòmÀ&£6ëâ-5–LI¨,8TR(bÄ|˜ŸÔÑ(mcQ6 f›òRÒg��jû’—ϯð}á„YôWÉêÚÆÕuR|œüf  p¦à£�ãŒ3"y&+½£êÖE™Ó¤*•¾Äº–@$¤» á TƒRàxx�ƒÇ_zXíX¾¼ÚK¥Él*Ó5¢ÆÝ¬õ Ìʘ”Û¯J\5ÀWº ¬�Œ‡ðƒ9K© l<-�jñÄlo�ìgµJ0Þ|6åh°Šûi‹X>¶h°±ç·EÙµ%Ñ2hL��*H­4g\6‘@ÁM1S¥1\?ãM£ Õ8¹õ'¸×ûRz?=’µ.¼K“Z'�4k(Wà›z K¬t.ZF3XVQ&š‘ ²eÅPù^)›RxodU¬R[•íÄÊåg…ʈ’µF4ÙM¢iVÛô�P�f&MC%¡”‚t’x‚xƒ‚i°ocÑ‚ªG¥-݈ŸÀâëdÊ`1âþ:ƽ]øØÂ`ãiì^»ˆx° ˆä¸èj�…qó·¼äÖKj^Å›ÚJyé~ª’ÞúgÿÛçO§¦¨5—“Ãóû{�ºÔ�šP­†Ô¡O:Š™·÷µö=æá˜Ñ0´Öð\ ÛgxŽ Ô%™¶žÃK톀ÀxÂyöß‘E”½³¯°8/¤\Ž…¶D½–ŽB¢×uSSqMLàüÅ'&ØÞã9ß3"3ãˆqæ|ß.­ërû&ªn03€jºŒ43ê�€ `¾%ÐlÔ|�ÍÝ"õÈô\àþïýœþóáÒúñ†ï Ä °½¯ÓÀ]!Qæ:»ƒJU•^\Ès ÷Þêáâ5…åy‰FͳÀ|ÏT1´bPZ£Ó–¼8'R?Ï”KÄ\Ž”k²ÛÕHÆ¥u…DqÙ3Œ€$2;ß]7{8}6Âö¾9²özŒåy‰µ‰N[pÍ7f� N` =zï?üé…Ÿh7!)ßð�× »V†Ä È�×·Ó‹ðgý8ˆÑ›ô± 1öjyÀ•s«IªRB•mW_+©Á‰îFýkÙ¡¨9ï\Â|Ó`Ä e7;ß’ñk“µbëÀ¡²jÛ’¥Ø3Ýs]ûY ÂdãÙôðb’q©UÄne±« ý,8ˆF;ðжb‘²qZ.âi©p•ÎËÒAÎEŸ?Zk wŸ/úü įTgfTh®kõ_„p%xÏ@ˆ@’zÂñ TërK…Ë/—ܨ¹,z›Îq!8ÀÕSØ|Ei5¦—��ô+Suc¶§Fˆ$ ±ID{ª�5âxÇo”œÖór!1•WQVqË®ÊðmI_•Du7‹‡Fë�Y˜–g&ï]ápñÖ‹`¼ Ä{×€¹C–2*\êÏ,ÁÒ3Ï IDATÛ‘U­³ø*Y@¬ã ¢Í¯BóiP?Ü­£hûÉßÓ'`…Alž‡ßZ¬Ëî/™‚_Él/ÛíìyN÷�Ĉº×ò¹ãÉèz½+ðNq÷¹ø5QöÆãá8A"�êrÌQjñ¡J¥ÕJ‚L™;àb·¶±¥r•hÂçÃ6,ME•T’¦­ŽÇñÈ*=ÉÝóŸK7" ÖZ33˜I¤�sä:Û‘/80Ö'{ nå}¥™Œp¶ëÙ•wÎ@Êbvµ�ˆ0Þ¿†ËŸû×P“qñ¾$ ü9äjt‚°{îô·.àÐÝoƒÓ:H¯�8GE÷ÏàÂÆŽ9øp¡×:Ý]×!%Šj4ÖJJ¡Ç¥†cfÏ3¾íB�&F^}¾%Щ\GGV´"wòN”©llì(ôG†¾¶,qlÕA³F|Ï-Ú«2ÎDàÊhÂEtì÷uîL>›Ö!!L î9f-ítMË•ï�P@ZˆyÊ`8åz ÆKóóÍBÝË÷(¯êHIhÕ]líkhD1ðáßü?½"�81f}« Ÿž€Ùªp¤\™Ê/ΪÄaÖÏ+îòATÌ‘ëæ[�ù›ñüÅg ”ñg <àÜåÇVĉ.Èÿ ãì…QbÚÓ‹)Äuý¸ý¤‡GÏL°ÛUXhKZ’˜k 4C†\§àÛHS‘áý>«c«N^}VËW¢LÕ%In�¯o§—ÖÉ>ˆš ÷×!–ާ7Íì\™î3Ÿá�[鯥$B÷êSPI!=°ÖC� öp}Ã7 ®˜˜žeb �œLú¨©J8%âv©M%—ÊD!½Z!…”“‚E9TŒõË�¤Yd N¢«3ZXÄ Ðõ8@ï½þU,ò hšnŽ/›ÍY‡.+I•ë²õýM6voã+Èz¡U2Þ±ÆçTÆGß"+t±waU•„ðêI_›àZ�“äzÕÞØÓ®èbªŸ¼PoÊ›$õ]I �1§$r’Ò»)  ¢Û^0º¨4õ®]vùgtЈz›ëFyvV@™‰•» ^y¦¢®Yñ¤‡Þ³ŸI?ŦñvŠÞø%�m0Àÿ™ˆ~ˆµD<ÜC<êÁ [% Þ~L�Ù–Ö˜•† 0'Ø<óq“©N:ï^±ã�ôO©ãÑ?"¯ùA�Œ»ˆ'¸~£¸Ïˆ`JƇÈ]ë,™fSM‹û›ˆºW31­£Ñ5빱Р&5ÙÝrg Œ¯]E½s€_1Ú›M ãÛèÔ<Ù‚ËÈèú9›’¤F¦»Ê;Õ”6å _øé ¯´ŽFW‘ì^ƒðê`žØïgæq™†Ÿ'QèLFƒØ „�çŸÁÊ]«Ð¬ZÞ0•ªUÉX3Œ"¿­bŒ.}&"% ‹¢ZI�Ì­’Qú Ì9wîv´WަëL¤#ÑH†»Øß¼„xóì]9á„yÛ•ã@jõ÷|g2ÖšÔpÌ H'Ã1%ý«šO¤™M0.¬kšk Ò˜DÇoò°8'l¿ (Åð] ) !ýö>\צ?‰6 LqÌØé¥ª(f\ÝL ´€Q…Úéjì 4„0ÿ(b´‡]ÔCã"%ŒýžFw ó ;Иo 4kžÌ5%ê¡^…4N nQʸ€ÒŸ|è4Z ž<ˆA¸pM¡Q£ƒAÅ œD“ˆS’;¡Q3c S04‰ÃQÑVy옃Ƕވ‡}ž4•§À7ðôùȨ|E†hoË #c»ÿ6ë; sõ@ ô ^*à§*ÜÔC²oÖ�ª�Ö¦m<1@-N—7S»µÞx}Ûàí 7ü�ÞŒw/£Ù>í(„JQ jì>LûÿÉò·B ÖÐݫظøÅÔ„�Àjr%uAŸE6ÿKɶo~åßðâ}ïÿ2�F nŒã doÉ|-ž„}=U‚¥ 4,IÞ¢üÀP[Ï"I&iïy2Þ?;+{<�´á�ô D�Œ¡]ÈF«|ØÏˆÇiªe¨Qt)€0mñö¨x’.˜5Ô¤{¡ŒdeœåØì¥!ÕW°Ûdy!ý–&áL h`Ò[‡Íõ«Ø dÊ…´¨´lÍpK�ú[ÐQ7 Ž4 "¹ Bz(8 ¶ŸMu�—ŒþFW¿ ë+·ÀÀ„ÉÖÄ�£ðüfi4³�Ê©>€òbÍ+ì>÷EvPñpóiÌ6Ì̃lVC0óŸ€Ä.ˆçÁ„áöE´×î0Òϰü€Š×Nù.Øð¯�•6 yÒßÂhëlDª¨ÿXÇ•€·¿ ½æ6€bÆàê´�Ý ·ôî\�" c€§ Ö³O¥ùSÉOý1�Œé€Á±NÝlµ@¤r%ü=ÿ™Í7ÜÄZa´ õ¹SSnõ\¹T™%ûïÙwâIÉ` � I[ÅËtŒ8Ù›æ©eêQ�Å»Ö� ’{)¤�1«¹ËÞ7ÍxTÔÇÖ“Ÿ9^¸+å‹áÄÌp$Øs¼úØ£OþáÙ×}Èpö/žFóȽÉÒ»Z¶=¥QPe;È熢�DZùì#ÆR‰Ž`åˆ$ñdØ[\5ÐÈN<�°{ö3†*r|�.±štQ–�DwÞìžj†ýÚ‘FûR¿¹(ÈÁðòYøáJ^‘á)ÞQÁ­ žUõH É;Ï{O|ÄÚy¥šJ¦—°«7%g¦â�Ç+—±öÀ{AŽ_ºGdñžˆŠ[ªìŽ”V»×¾‚hëk 4ðo8þRZ;R¢Yz¡-x¥#ÑiK4ëƒñ^¼é³;GH8í]Cki*Þ—Ê ¡2W¯ðtœyµhÄ£]\9ý‰¼ÂAÝrww]‡! ¨ù¤|o2ö¼õþ(™¯Ÿß[XŠ´”od¼=mTY�µqŠ-Óµ#…V-··8ÑÇÊw>E¡GqàQì{”x.”ë�–l<1Ê�ɉb̵RÐáÀT¤É€Ï5\Ùˆ¡”6þi»S³&13¢Ü�ñüÕ$W¯Š"¶*cÓ4·ìubÍÅå�¡/°Ò˜k Ôk¦’! 4ÁuÌ}O·óŒ)¡$È´òâ:„$aÄÊT\úÃtL1°×WØÜÑÐ\Hïõ ÇÃu€ý¾©¬Ô‰0‰ËaŽoT°m¤v×·•ñC‰MõfqNf®âE»Wf˜˜‚Ç%ÈÀ%Êp_†“´®-4öFÚ˜ä\‡0×”Øëi4BQjûz¡Ê å <Â|ÛŒ«U/·£9¸º­ ™ÁÚˆô÷�},Æh ¥ÍXç¾ðä‚¥ý!O)n´`Ýx};�ËÁ çÿÈk,‰�WAHlî\ÄJÐ�§ºˆO¥  ‘´ª—È&ˆ=ûil_z$˜,|‰õd/ìù�o„l?þïFK÷¾ï ¼ŽˆüI4B´s ré i®ðÜ ©¶õ™JB©$k.:£ÔÆYì\{"åuƒU<~¬¢Jvt°bĽ+»^ëÈÇü‚@o÷<‚ö! Ù2‡)[ü…’[;JŠFLœù¥ÍùŒSÊ“Ýuì^ülÎ.ÔjrœL*Õ§Y’Ç/ÿãë"¦íKIkõÎ?aàûP2܇Ž'�^0£Äp¤™ï\îÃ*‰Ð=ÿpÁÿï³f•ùÌ’ß庮ÞÕ'w[Gøç~H{èmŸGké”I¥2å@lÙè–])g|PÑb¨â!6Î|<RD”¨IÿL:ÞøEŒ]°Šþ’î�cÂA÷òpï^"hæ> ¶ w•ómS"t‚�翈ѵ'@Ò˜(°V›œ 7*{F¾o¨Á¥uôkR†? B ÂA÷Ü#�7¿~½�,¯òàœgÜïô?Z%è]ý*6¾òïAÒË~hœ 7ŸL?Û¾×c‘ïR"E¬n_¼váê ¹ @ì_~ó7½2M~`ƒò ¦‚*ƒINIЃ�¯aï‰ùç,Ø$²ÚŒlÏ:ØÊž€ÉÖó¸úèï`õÞ„t‹„Œà²µÙ\‘,èO91½­¯bóáß…pMUY è¹Ú`zB/u„ZhI^˜ºÓ–¼Ü¼ÜZ¸×.=|e~m¤@—Ÿú#Ûgý Ô€–ÊãöŒlïΞÆÀüa};Á8J}b(!.ÒJc¾%á§2Æ[{ J¥^é¼)e*™š×J'«`¥ãs³ê‹F±]ì*ıáÁŒ&À?ýů"ôÍç;’'Œ¯]HP (—94ã°£äÆëÛëÅûÏ~4^¼ç'þ> ñGÌ4áâÚ¥Çq ½x™Ö�Ëý·š-.•Õ. •Œ0zö!\}öÓÒς߱šìÌCëà¶�ÚÔ i_ÿrüg$¼G™é•,l_y+µ9pc1'mêì�¯:Hg›@*ç/Dð‰´7œ÷¯àò“AޒΈõd÷Y+@šumy ß}îÏôâ=ïý'$œ÷3!Iì^ú :'_µ²� MC‚lÞEF´¶pˆ¡{{ØxòÃYÌ€5Ú}º2¶j�ÉÖnåïÙU j¬c 6¯¢yøHTâðóIÙº¶¯V€ÏÐè]>ƒñÖc §fN¢Áy+(žT‚cû¾«ÔÔ\GÛ�ƒÝõKäx?N ãBº^ù*j‹Ç!R!…RpY?¦9¬0 ,>-wqíôŸ ÚøHÈ´¤wu2Ø´‚éìZL·�Oz×¶‚¹£ÿ�A?„$ÁÖ™Ocþæ×Àç,3¹rëXE<®i5ÆÞ•'±÷ôŸšÊŒáØp<¸ö¹ÊØ&ÕäÅΓ¿óÄâ=ïý[Dò?€�v¾öYÔ�܉æÂIÀqJ"`¥µ lá>F�Ñ»z�ý„ðL½QV“ÁÓ�Px·d&’#“Áˆ'QÌ|déÉ«KGo¾6 ZIoˆ�óŸCçØ«!½�bJQ¹Rtc¬&è]=�k�þÈMÁ ¸‚ 0±”’cXH¨DÁs’X�ɺft‘ò½„¥L¶/àÊÿ‰CßñH·žr&*ÉÛü0­^©h„ÝKŸÃÎSrÔs!°ÒèŠÃ€T».ôÿÏÞ»ÆX’žçaÏû}u;÷Ó§»§{.=—�Ùû’ÔrI‰¤h‘’-E‘-I(ɉ#™HâÈ d+†(�b bDp‚r¬A,Dˆ#Ë’‹ºX$EQ¤È½�{›Ù�û­§ï}úÜ«¾ï{ßüøªNWŸí™ÝÕ.)qÙtOO÷9oU}Uõ<ïåy:-Åg޲8§Ù:ÈÞ@P�®í…Iê‰ÑÙ!æ[~v$| Ë v{;Œõ‹³ÇCÌår¾Õ¨ÄÊW`ô¾doáeR Ô{é`FègJ”^»aÑíï{àD‘ÿ»FÕÏë$±¿/ÜÝð·ÛSKÁÔ8’àû¤�¶£í½³‘¢°yr]Õ*)|_`;·@.ETkCT°&ÔþC`P«<ðìà†;Ø»øûX»ü‡ù܇H9NϳÝ€ï‘ß-½úØ—+-WCÞñÞ�Ö_šÔ–¿kH„ycÈpûjµ9 ®M‡eË­ 7fÊËŽä*oMPý ¬ã_c8XË�œ— _d;ºŽ}IÖÂb€}Sºû7ZqX[~:$àà\ ‡ˆk @¸ÁJ^$jß ¬p1ž;’@l½úûl_òh¥ vr‘MÿêÛˆO¾�–óhíëkµãü @žf¸†°ÚAUöÏu©¦=�’Åa&„´¯>&;ìbýåß‚Ø  2°£õÏÏËBùjvöoƒÜÑx㥴zìý—H©ŸðÏÂd÷ˆauJéi”J3ÅJöª¤Ž&¾q0naëÊ0ºþ¥¼º ``†kPŠ7ߟb–åÐu›u¯K2ÿðŸ*> ÂÏÉ-Æ[×@:DPiL N¹ÿý€ÆB‘¼`3éaûòc÷¥µ?@Lš]:ø3qã;ØðßÉ¿÷�<‰A6N^×qícu¶È&¤»·`&]Q*ˆ¦@{Š·§Â⇙÷Vѽù¶¿þ/ täI�ÒÞl2Ý}�Bd`§KÀdc—ïœ;~¤šèÚù…Ýõ[{'O¤VD€1Ú»Š#„QsZa¡}ß$*]Óì`&]ìÜüSl}ý_‚iÌU²á±Fww±1´*Ãþ|mØ;Öî5ãÞ^‚n·÷÷b5èÕÂa¾6ì×Ãa¿¢‡ý$àÉ�TH¤C°™`°þ ‚°Ú©0?_3‚Â`›¢¿~ÛWÿ{¯}Š”�IiÌ×̨Sô㈠ì©c�©%ʤf071oì8Þí ”ÙÞíO–Û}ÕŠŒIosn¸× @Jy°½_mœAÖ½ŽÝ_ÅÝgÄ.ÆhDñÊ\w«Yƒi7”Yhk3×Pf®©³FU­aYÈb†#q㉸̈ë3«•±ÌÖ:k¬&kgãÐÙ(7ßÒ¶ÓRv®¡m»©ì\C›JBV+²©aÓnh3ßÖ¶Y%wúxà.œŽxe9àÅŽÆ\CI£¦Ð¬«é°tx€?J÷¶ �"\¼f|%i:ìïøËíÖ=ƒFMMÝµË ²éõ^úÙhÂhÕêU±Ž7ã;w2ÄRG£ÓÔ˜ki Ç‚$òŸ•64ýòÿ°±~w‹×ïX¤9Ù¸~Ç¢?ÜÝp¸±j±¾ãÀ¹[úTå�W¹m¨¼®Y€N+ÀB[{@Ÿ+CUbB-Ù¯›8œóž!Ëó~vÔæþƒ£?¬mYÜÝp¸zÇâöºÃÆŽ ’¢ÒK)`¡­qsÕBi/CüèÙKó^¥Ê“ …$RÓ!àéÇbœ<àØœB»©Ð¨iÔ+„Zâ+HA^%1Î;ÈÇŒÁHpoËâöºÅv×›ŽÆÞ¸ðÒ “Këæ‡z¿%¸–(ë8*Ä™ã!’H!5Sé}¢#Äz´½×(ª�üh\YxøŸBä?6J\— QÑ �ÓÏ€ZK@T�ä}¶u€µ°évë î¼üÿÁ™Qþ '€‹Í.ÛñÖ×ò÷€uùkûž i)#ÿnd㉢yµðøßø?ü¤ˆ%±Ä qüüG€Ö ˆýP¹ì·PI{WŒyä,¸»Š»_ÿ Œz«~?•D¶ÌpýßBx#ß¿µüµ‘•^ ˜ºrváý?¹LJ"�°� Í¡~ö}Е&Dåft(õÿûÒÇ?¯däàö¶°õÊgÑÛzÑ÷gûøºv´ùGÂv5�©ˆo½tfã“o·õ¼ð�ŸZ&R7DÂÂÜ…� ªÔ¦=ÿe f˜m’}”ÈǤ‡;_ùÈö®å-KZ\6þŠKw¾‘¿{ùk=_ß½p·oóXÔÏþµ°Ò:ùOò³Ââ2/Z«cþìGVZSa‡¢e¦X¥Ó�kò†œÎN�í­ãî×þ/ðdσ_¥@ ÌNƦw9_ÅÚ]°YJŒqPÉkëüSë¼ÒÑ¿aá plS8Ó!æù$Âj JG<ç2™ÂyŸ¿³È&]Œvnbë¥ßö¾'9°)¶wìpýs91Ú*ÅV\S{ùšM8"%ñâûƒÆñ÷ý¾°|¯ˆQb38;‚K{‹h�þ‚¨Udï™áÒ>¬cûò�n¾æý,°¯¦ÄÎܶãÍç!R�r[ycæáÓá?øàãÉûO.jÙN/ûÝ×}š!³�¸ ܤ� ÕFãÄS“‚¨ ¥B³H.ÃŽ{�ncûùÏ€mZ¾—b¾f'Kͽn«NÖ9¸qÊ. ÈÅñæ.s�•"ñÆn€Ï0ëü-†¶][ŸœY1¢H®ÚÇ„õsïCÒ^�RUhx0ÁŽw°wåËÈv×ö ¤*:µâÝÝ0 3ßV&Ž(]hé´Y£l8–,ŠÈø¶$°Ö~r^„èÙµ�àV¿}Bœ%v)ØNÀilÇ8vî$�EjC Rf°†õ+/aÒÛȯÝ T!Ôpç�ílµj’U2aàÛ¢ª ™ ‡d•‚ÝÙcÖʇ�c3”u¢¬ƒÊŒ¨»›VÏ5-¶5% Qž…—@‘ÀÏ�ó$WM”;6¯¸QU®^U\MÀ•XI%&‰B’(ô­9˜JÉm\ru#‡F�PM¾ðÜ�*¡Qó¸7dÔ* �!  úFf÷oý ¯ÜTMëÛgODè´=@®Æ¾5¨p<µÿ>Ð~þêmPMn¬Ü^wˆü(Œ¶ºí†Wçš­¶¾éÍ«ôXŠBÂ8e_ЮûŠÇÆ.£Ýð3(õ áìÉË ÏÿÖ+Øí²÷B1kËóF“}'ôË·,à�ù¦±9^¾’á»�pöD€ù¶F½J¨DÞˆPÄ› Ž&‚ÝžÃ^ŸñÌã1”öÄQÀN�ÙÂ=Þ_gÅÌÊë7ÌÁªóL|©¼øz†ù¶—1®$„, DÑ~Ÿ÷ìÙæ8›`|ûUìÜø&ûÓö¥nÜý"ÛÑÍR|k¥ó°[ŠÏ|;�æùÑqsùW!òSˆ"Ì=ôa„µÆý�á!õ;àÞ×ãõ¯O³­5Êw"›%R�¹´¿“cI¨~ú¯V’öñ_ðßùukÀvv)Âú§ŸAR�ó_«}â$vœ™`oõeŒ¶®a¼ú�<ªüÚ$kÇÝ?($ž¨ IDATf;¼•¯Ï­|-kâÍÓçÜŸ:£ƒøŸ‰ÈˆËH\ ¶c°ƒ’:‚¨Š¨ÖAØ\Îsã�kÈÒ=dÝ;pýõü¾Qýfô²ï~�½<–"¾Ý7@ÕO¢7�ÿ7 õóâL Ž̎ÁéÐLTËO9ÃìÞ�رŸã* ó‚ˆ]6¾èÒ�ËéΧ‚¸×N €B�ðǨþé'ÎGnÖÿûg—:ýð©ïêMtU8ÛÔ{K˜!D#÷ ‰}f² ³s×§™I—<-H:•t¸Ðèõ´hra@Ö‰Ø$"W‰É­n:nT‡„È÷¸kß¿/™ñíõª¢Ì5ã[£sç¦R0Àί-—A\šc[ÿs¶9!£sSZ�«zЫGÃAÀ†f1§–‚Œi%¡¬“I"eÃÀ“¥H ýç½=<×ùâ½óÏ8ë4»bóu“�àìpüº·ûi‚½> ó•a¿ú -Ø(ÌÁ#ʬS‰•Q & Ȇ!¹0kEœs(qAB”s¢,CõN-ÎÔjUbO‚¢ùñ N3ávCñâœæjBܨ)iÕ[+b¦ž쇵ǂõ- `8–7€æÁ˜±¾å°Øñ³Kó íÀWM´¯¤©`wàpëžCøYŽ(æÕ M‡ÄÃÀ·E!Ž=ùô€Þ«,¥Æ;y‡¡ÿ›Ï?;Fy"…þ˜YÁv×Mgœ2Úúà-ó5éÍ.ãÔ¢žº¡7j… ­Ê‡î=ˆ¿³aQ«(ÔÂ|[ãË7±võ†o±ÊMO,°ìÍ3+”Å=ô–~Èïõ‡Œ…9�8 œ8¦§­Uõ ¡ÓÐ: Ç‚ñ„Ñí3cÁS磩‡wC÷-iWn0“ÌÓ·_š ¾öj†ã qÂñE�VC£–{…’ÌãT°ÛgÐþhÈÑv´½÷ª ¥ vžüñŸ R¿ l—‘pû‡¦5CÀ W agr}€æH„yÇ¥{ß`3¼•ƒ˜nþÀ.ÀÄv ¬�¾ Õ�•àúéï«%sg~ Ÿg .ƒÍØ 3¿š;ƒ°Ò‚JêàÀëö+—AÆ=LÆ=ÐÖlÜ~ãÑ–o_ÉÁ€¾mQ\ºVªðl”²£åêG:“ŸNÑèêI5wá?¥þgawZœ�Ø \6@¬kh,>ÕœC7@•DÈ:ðxˆ,ÛƒÛÝÄîÍ/c4¸=í‰ÎÍG.í=Çfpµ 6JYî�Ð,úêßUYäoñ¦:OüX]GõÏüAa›ƒO‡¹sÏ ™;S'éiíChj´F"p.Ãx{ ë_ÿ ˜þm¯zåÁ{jG› .»[Êʯ•ªÝw¡šW4‰©pþѨyüéÿD?¶§€OƒÍiq)œIÁnÉÉ›‘”ÌSÂ_æ}‚8{ÏeýKl7s`_´|m”Bdæ*Ó ¦YW6• 4X)?˜]ävX@iÆŠ«½?|½›,Üæ `SxÒ˜åÕçãÈ�‹‚ãŠ6“Doï5*l¢€8‰É:†�2IŒ¬+›Ä”%ž�¸0¯À¨’,.dêYAÌB™iåÔi)jÕUÀ[uæXR#lœÈ$‰#’GÏDhÈhâIžq"iŠ\îÖW9Š>þ7§ý¡÷àxü\ˆã‹~@;‰|[–r©[ÆÆ6ãÔ²'*ÅŒDøïÃ|8[)?+1ʇ³3ë½3+�kÛ�–ÿëw}«P»å[‹ÒÌÏ#à<Ѐµ~ý F W*¾+B>AX씼8B:0'Q(mQ.ýÒ• •ØWDž}5Eo(¨Äûdkœzwôå…à-!ïê3ƒ1û!÷œ˜-´¹RØé1:-ß ¶rL°ü×þ:žûÌg±s×b4ñ²¸Æ'�ilîúYœ­®C·ÏÏ%½5IÉò¹W xþb†'ŠpþT€ÅŽF«æ�]æNöÎW¸zCÆê¦=" GÛ{˜€ìÏ9EÕ“YŒjó?F*ú/Àæ»4`›Ò�‡‚³ûzé^ÏPaa·ç&ý—œéß�ðûþÙÁþüGÌË•�w{þ 'XZ×W¾··OýcþcqYMlJìÆ3Û”0„XåS©ÎÙÖNÀìø~&ÿ£”­ %ÏÜŠC¬ñÙm�›ˆ9ÌÎŽÀœ•5v[vÒ}Aìd5�¯;“I.€ælõã]ø‹XÏóïû�ÒAôYa>_´µùÖ@BûÜ'5jâšo©*P5[ØÉf0ÂöÕÏa¼ù:À£rfÞÚq÷Kl×òs½y™ëÏ´²ýy×sa¶§@:lœýä™°ÚùGùQqiÂÖ_©L!SÀ蓾¯Ä{H ÇÙøu;Ù~Âý€¿]º>»¥Ö«)*Å©IÅq¼ô�…JsééO³ËjâÒÀÙpYjó»\æ•óûíhûKlG[¹PEù¾±[º¶öf*3åêG1©¦áÊcõÝ]Rç/üWñ–ý�ànÿ„¤c%Öˆ¸â yBd!Ì a¶Yÿ²m_¶£ÒÀy¿týÄ£["A&?>ê}tó‡>Úøå“‹ÚÝX³H"¢¹†¢ PzœÕâ×Ïœ{ñJcywìÂ̤Šmv©Ïò³¼“Xel'îv…'©VÂZÁ…šl†ÁTuÉF!Ù@Ãe|¬£eaNI­Bå3.—kŽ»{§–òyBŽCÝ›Ôk/Ü\^ÙØ kãŒÃ,uʹ Ì6'Œ–5SPу‘V޵�SáZEÙjB®“é4•i6TVM”%ÀŽ3vÌäj"b­öç“æ› IL* ˆ ÐcG›{õÆ 7;'zCUëöU53Öed­…FjC51l‡ãZ8ke„pÕXÙ(š…›$öÕ�8$à0W¦"_…™J¬+Œ&LK�€ª !IˆBM´³çP¯*ªU¼òÑ“å§0Æoã×ÿ· yßá¤)dkÏÉ…•ÆŠ8†Ü¸ka�:~ó!ñÙ,=ç>Ÿ§`¹Pˆ*ˆo òÒ¶Ožå*V̾Õ+5ÅP¶¯"ô‡‚[k"€µrhe€xåJ†…9�( ,ÎiœZÒh×’\"×9Ÿéßé1®Ý1X.µTÊ^QÉ =ÌIQxe)?Wâ×aš ®­ZÔBµ¢ðµW&ŒÄ®üó„½#ünŸ1ßÒÐ:÷ ië¢}—·G�:æ \£öF§öb`üκƒV@-¯€üñ«À`g­|Ì£‰w¡Žý1}ËDã>ÕÎ ›V¾R´²¤a°²`¾¥Ñ¬yCÅãËÇaÝ6Ö72LRÆh"ØØå#r´½çIˆ‚W{‹Äñüã'£ÆÒG‰è ü˜°m±M5Øhf«„��ˆØ Ût‹³ñ=—í݃p¡VS´¤Å«È® "Ã}<ÞU‚E*PñBÜ<ý=WAôŸBä‡ÅeUv°™ì· ä™Qäšð…á`î]ÀÂf�ÓákÎ îæ@®_" ;3@®Ü&ò&@Ž º~æÇ¢ÊÜß„Ò? qßÍ6CQ‰òñå1JžôÜoúNìÌ&g㫜õnˆ¸‚• Òl|å¡éo'5¬žïÎSë1Dÿ Ì—‚]6#¸tâ€ÊÒcÐaàç}°Îaxû°ý«^qˆöûÌLìx÷OØ o—Žåf‰„3 ÷s?'‰� ÔQýÜ÷H‡ÉßTÐ?ÉÎ4ü~å¤Èè‹ËÝÚ9w×5›lÆ7\Ú»!.íæds௽Cª’÷#Rª >NЉ“åg ãú‡yÂO ÛyqY l´°ÕÂN±M×Ùf»b']—îÞË?+ÃAcǽCî£ûf´ÖpNÑßý»ßƒjõ ”B·«põz\]ýŠJ-6«‚mUØÆ"ñd§ÇnR¾¹ü3 Ò+ÅÒ+]7#üC©üÀ™Á©V]…ZÓÇU%•˜`,@$”D¤Â�Tý¤R_ú‚�/ßm7Ò¬Ö€ Ü] �J�S½¡!e��!‚h"Q h¸0 …dÂÀƒë(‚ â@ñ€Ï�d®¡¥RÙoå`WFoÀ¸°¢VU4ßVØÙs*Í #«îlp¸Û§°?”`»ë‚qÆÚQiêHJúÀD­ˆE„�ƒ=>¯ÝÒ¼¶s eue« Y¥ÈY+n{ÏI–Aç””]´ƒ€ ò™j¥ *1©q&z{×êÁ˜ÃÍ]tû¬# ¶÷X  ™¡în0Å^QJ´‚+…äUåt(¯~G^©* À^—X0³,v4’ˆP«(4ª„$VˆB�&@i¢@ŽAk[õŠW�I6©0gâlÏ¥½×8íÝqeƒ¼2�Û9Ì¥¥,î·sûÕÌùö­8 ïûÛÿXà~\œ=¾?0ñ›î÷™ç†d.Ûöeâì]3Xû2 ò¹…ý6»n©eivø\ÞáºU®IÕ)¨7«‹çÿV¿Oœ]xQ¬Qà;b7é Û‘é­>/lR@ IÝ¿bp°î—€uùÚ|Ð~ÌVPÃÒ½£P¤›š€4©¨C$¾º$Ï�QK¯t- J×S™0ˆƒ>õ©&Žÿ'˜›ë M5Ö×.^\•çžûa-¨ûØPõ± 4’åy5߬ŸÔ ’f|y0â×7»¼nìtΣ aEWÏŸ i¾­Gú.u´kÔnÑaèûï›5VÀµ›–’p õÂÅT9†N$Øéº ÓÖÁ`ÄÁ$m�hÇPŽE çø† ¤Áé€8Ÿ·(Àµ‹C²•X1‘p«¡d¾©%ï¿—zUáø¹w®Ž1åÙó>ãô’F½¦¨7`Œ&B½!«ñDToÄzuÃjc¡�m¬hë œƒfÙ7KRñÃÜ�$&w|>°óme[ åêåâN±u"½‘p–‰\8"Ô~(¹šx $"ÔkD÷¶œÚÜqÔ‰êYïô�ŽDo츠?dm”u¢­íô˜j¾ME´‚tZškrILjr±ý¡¸JL.ÀqHl¸ÕPXhkñ-B@ªi6<ÊÛ—´* ‘µ¾EéκE½ê½0¾ôBŠz5—jÈhâAp½ªÞÐbó Ò᦮æý‘Ï‚ûó¥P‰üìö­†' -ÁÙüëøíÿûóxíë;xêB8’žo) ®ßµïh6nܵxâ|ˆSK:Í}²¨sçÔø*ÚöžÃC'BT«˜kE˜_ÙȬ'ýÃ_­YÛvoj*Õ1îm:,´vûŒg‹±4¯Ñ¨íû”0ûÖ¬Ýã޶ñŽíÕÄWNŠ L1l(ÊU¦|+Uj §vÿy«›ZµÄ»¦_½m1WìwNB¬ô†Þq~aNC+C5¦C÷§�Å�B‚1ŒåÅÀ+’UI\2),Làõ›vjFYKWîX\¾i¼BZ>¸žDtD@޶ï¨V¬"ëšäéjþЮåðjþQþ»Å�¸p+NKxX"£ˆ0øóI•¾“}Se�¤ÂjK'óÇ(ª� œg[âLUØ&ƒ]ÀvlÄ��øþ3{P*¹^©Ed<“ P;Îaï@U' 7—UŸ€ÒKb³šp#»�ÍØùø2SŠÏ”Žÿ ߬ônÑöNó_ÒŠž'!õ³ß6ˆë?¤Tðß2gsb3’é<@Þ¾T´Baã²Ñ%;é¾.v¼�ŸÇÙªÁv);Ù|§Çò°Ä@ùš,®ÅFþuöº ïs]ŽK×ä`&)P¨wÍV%ñ€}™]»åÆì½£ýqŸÎÿ®L@ÒÒ}£øZ$,Ò™jâ�óMïï}KKOC© €k×/¿üÛòÚkšnRúšˆ;>}|A?YIÔB ½Üœ°HfEzÞúÊ‹é?¯Äd>øDôãV¢¬^¥…VM'õI%&…JÂÀ“޹¦ÂÓˆ1ì2®¯Zô'Œ×®T¢‹×3¤”RP©ÉÁö빦*À¾vŠY¨äÍ(ʃ<4\³·0§Ý\Ó«/5kŠ« qúC–F]I5ïáß Üzy„þ�qöd€nO@äç@V7± ÇBÆ e­(ã¿æäC ó¾�JÞFÂJ�;MÅKó�›k*nÖÈÕ*ŠÃ�X b x8�>ðHŒÅŽB(Ni*è�ü�mš1­m9Õ0¥V¨?m�(c¡­e´c!f�sBÝãXGc¡­¥YS\­Ç!qÀ ˆ³ŒÝæ.Ëé倛5âZU!‰”D!¦m8QDhåÒ¶ÃQ>‘ÊTͨ?bìî1uŸ}ÿâ Ì5*±ò¹Û^%ªYSÃCiz# )ÓJBhT}›M½šg‡ûmAAàýA®ß5 ê…Í]‡W®ŽǾUtb€I®*5ñ*.oølz�Ïòoï9\X‰P©² 8±è¥ikB§­qö™WþlŒœ°b·ÇÐÊûzCíÆxâ´‘Kõö†|ß–¥ûU†cÆ�u‡'χ8s<@§åÉ@”«¸9çÁx(XÝ´xâ¡pjèh?‹h_�q®¨¼xÒ‘ Ûc¬n{ùþ�èÌdFðÂ¥ KózJBÖ¶ Ú–æï—IIniZv{Œ‹Þœ°QU¨×<ÑÞ(Z¿hJ,œXçÉä­5‹f]! ¿þ{tš¾òî+“©##Â£í½¼•ÁÅ,!p‡€Ú¤"# Y ¤­ åìåa \¾ûVÿ3"6#›óÛoÈ öÝ¢ÓÀ/¿Êf‹³ªWòât²f“-q“­Ižm¯—2¸�*9Ìœ«Y°9˜!Gî-d¹¿]׳âÐàÆçnø5¿Y=þÁ‡ÕΧ„T H@¡¡x5²ãÞu;Z¿UZûÙ!Õ®²�Êè>DóÝØ:lÝb_)®¸ÖжªJiÝê$Êfz£C®M~‹äcöÿìL|®t½ŒK÷�"qQ& �Ç¥ŠM†ƒæˆ| êñwþÎyœ:õ âøGáãÞ=…K—nËç?ÿ‹%â–åq• °]£Êãç¢�´ŠÃ�›é°@¬wš\;±þÜ©%Í�ª²Õ q‘ĹF�äÜÙH¢üì,� ðê«)~ïs#L²¼åiè]š'Io †à€¼Lj¨½aÝ8eî á@¢*1)fP®T k�JB’DJ’<×P\¯)®Uˆk‰â$"®$ŠÛ„ù¶–/<7ñ<>÷ìÎyÂ�Á?;ÁÙRã�䂉R ˆ ŽÀZA åp!Që$’|®!‰I¢¨WÜj·jÄ�º’Çû^©'W®¿,Š ™0“ž¾ê<¸òÔHîκC®vÍ,B طÎp€�ƒr ç$ìÅȾo~®©¤QURIˆ£�$Pä"iF¢ñC+�Ä!Ž”Ôò 4‹÷¿M;ÎÙåîÙ™ñmC÷¶ÜØoîòTéhœzs¹NSáÉó!š5ßž%ðªH;{Œ­®óÞ ù°?¡ÓÌ[½’b :¯¼„@+ïß”ŽÇ~Ýx°*XßqȬÎ]» •ÈKÆ¿~3Ãò|­KÕ¹u£ø±c ‰»}‡³'BÌåEõn”2Fc™>Úu…Ÿûû÷nŸ:­ë½3œ²ÛÆ×Wí¾œÊL5èÍHGùÿ“ˆ £ÝШV|LI”Wa°ùú³ÖÏ‹tZz*/ÍùœÓ`Ä0Ö·kmï9d¸zÇ0œ=ŒˆÅ!áCODxñ²ñ7[V…ÓǛӨ×âÐW¯ûjEµÂ¸zÛà¡SÁþ¬I! �Kkí+D…ñ¨s‚Ñd_é«7dìõ}[ÙhâÏûæ®÷‡)d’£ˆƒ·6r´mï¥JˆÂÁ–¬¢rÍ��2ø-ƒ6;( ¶\}³+÷Ë&S)îb_ÊÙÚÊL–6œÙ¿àÏ‚¹ñ!-"og¶e6ã­É&WJq– Rqä�l÷ìkr˜{+@óÛ¹¢7Ó4­4K„³8çÁ̱œm êR5˜% ïæšž½&ƒ™*Y\ZÃåªdPƇü2¸Ÿ­H¾Ý51{}陪MTŠ7œ‰ovÝ–ï¦ô*“eÿwŸøDDO<ÑÁââ/#Š ÀõëŒk×~I¾öµíü½TéúP¥øèßÿ«µÿòø‚>YKˆÂP‘Î鳈q�ñDD)Èéå€ëu%µ*ÉÊBÀO~w‚KÏOäî¦óÙü!#Ë©nÝóÌæŽÌÅÁc FL¹ù™Š"¡4ƒL˜vºŽö¢‚`Í5j±B’@*‰’8"©ÄÄÕ˜¤^UR¯?y>’̈\»c%5^9¨7Ô*„—.gøÊŒ—eìì1VJ˹gy5(_eð/Q¾í d¨Y#Ô*Š’R‰âˆ$Ž »=–jBÒ¬)iTwæ–ðÕ—‡ÒìÈ`ÄXêø¡áNSáöº›fÝYXùãD €y‡â"&1Š@Z'´JêU’J¢¤‘8±’f"»}–§�ey^c’ º}O~Ò,wÑ6‚q&¸±êœ«7€ÓüàæªÁ©¥çNøì|%öd»_{Õ¥Í]ÆÎžÃãE¨Ä…”£E{P%¦) ¥Œ,ó™ý4óqÝ\³ˆ#_)¹zÛàÞ–¯¶Tcß¶µëP¯Zuí��àΆÅBKØÞÕ<Ÿ,d±ŽÊ®UŠê ¦²½e%­W®f¨&P¿z-Ãú¶Cyy“ÌÅy�dò–«‡�~��OyÂ�¥ŽF£JNÇ::o]R8{&Bôp`o|aôGŒÌx²7I�œ �Ù\ª×xr}Õ_ÆÈÛžÛ`<{1E§©ñ�G#œZÒÚ² âça[»VBD9AÔÁ~ëçƒÿ!*fb2#x劙7“®ò†‹s¾¢’“�£ ÈÑöW á™l¦)eÖËäC•®o.e3í!/þV>Ë&K)S+3™Z[ªjÌfiÕ ±3•�ô�êÎÛU”’0†™ËÙîQ Ô%`UþÝÅgÉÖË{p V=(ÿ,}@å L@ÒCª£€ÿf*ˆ¶/\Zc¦_™|¨™ —Î}ÜÛRÕãÏC>»¾Ê~>EÌ:�S—ޱ𩼖¯Åò×rQ}üãÿ.>ö±£Z}Î9¬®nÝú>ó™X-½¿à�†�ôô£áÊ|K·Úum«¢8$Ä¡¿�¥V�e"a 8ýP -T”É•WS|ãõL¬Ÿ!ß’å^²¬´P‚8±ÈÒ¼F­B>«ŸY‘ú„¨Ú¹•å€Ê­9Zš5’G %d»ÇÒ®+¹·íä‹ÏO`ÄZÁ殃ËÎ÷„nߛمˆ >¯qæxë<MĪÃKÓ²¬©Uˆ*‰’( ªVIHxu# 4$ sM�ù–’ÁXäÅ×3!ò’¿ù‡7¥ZɵøᥫN¸Ú³�ËCÛ…«¶Ê¥4È»D ‹ˆ±D�5üp2µê ̾ݦQ#©% +Ë#-7¶¶pz4tž¬…„.¥8¿N‰Gáä½³ç`ó»«*OŒ= ]IçYöå=5ÐKr'l�šD Î *±Æñy_µH"B%V`8ç‰N·Ï¾‚`|L“œxlvùÀúYßr lî8„�f„V]á¡Sž%q^pÀò¼öï•›øušÞc¢U÷îÝž í+S…¦R¹9郱@/—j1ˆ¶º¾Z¥TNP V!ÜÝ´è4õ�ãw?¢�R”ñññUÕÔÇ$ ýº-ÀE€°Óÿ_ßÛh6õ oN¨jÂ$c¼|Õ·[ç¶|ͽ™j•ƒË¿èxøL0Ь)Tã¼úóÏÒÀÛ IDAT­•?Þ…Ln5ñ)óíÀßì\.{<Þ÷ ¹yÏÂ9ÉeŒå@%æ0‘€3ǽôð½-72L5ሀmßIäc”�* …ƒj8R0nÔÖÖ!ßâ}; $ÍV f –žy�ÃV6–fgÞ.�›��gÀf9‹¬g2ÉRŠ¥ 0í ñà¿ óð­^Ï|2Wn)Œ©&[ˆÊDn‚7Î#|3Éœ²³Ä´L<ô ¸—™kxv­ò!•yîÅçdÀ”¾§CÖ-Ï—YÓNEíö<>ýéÇÐlþgˆcÁ`àpûvŸùÌué÷ÿåÌ5;û^ÅûÓbG7“ˆ¢$!.¼ .¼ÿVžrøÝ_ÝÄ䵋Ãmöª×FÄ8àκ�F=us¥û1EÀ图ï™*êUBµB(HÄZ¢(( rXYÖÔii„P‰>Êk× ®Ý´ÈŒˆq"—R�³��]‡ÑDÞËhìAÞê†Å£gC,v´Ï kÀ �f ½¾`m×!ŠÂ✒ZE!Ž€( Ѥ5!‰jR‚…¶„pgÃÊ�5 cDRÃÈŒÆÅë©ç[®MˆCA§¥°¶í0ßR°ì[XÞP2Ëeq9ÿ>I†c¦åÅ@š~Άr� ŸYÞÚu5IF‘?øÊø”R$ƈŒSÁãç¼BÔsS¤y¦¾\qQêÍ3ôÅŒõ*FçN¨%^ª0è«&ÇÀ8õ€4‰Â@°´ ¡ÉÏBlï¹<óí‰_APuÑtH-À£çBÜ^³8¾`y^c±ãU”â©Ï‹ÂaH¸³nñ¾‡#Tc/�[xt„~ö`Ø÷ñdù€yf¼xfÒ´h#d(­§Õ �žW+¾šSÌ|Pé±[ç¾ŒÚ …ùVN8o’åÙEFkB%!\¾i<€Ÿù�©VÕ  Ž|‹R·Ï¨W aŸK7¼§ö7ö`#ˆòAw­€<¡QSè 8o¡Ê“gB çtvùkãx”ÊtîÄ1ÐJ.à œ±‚K×Í�Jß,9zÐ]teÉÏ×ô†Þ ñC�GGähûŽ#"³`˜K`‡�<$ÍVTþ¢2�Ù qVp³@3dê0çÞá~Îf¼#!E{ Íf”•ÌŽw h~;­ašYƒvæX– g8Cªå>¯ðÏžûo6™;lí–+ ö>à~öš<ì%ïâµ9»~g ßìgÏV’ˆ~ôG«8þ±°Ð†µ‚ÕUàk_KåÞ½_B·;ȯ‰ÙëÀV‘$�€)/Jÿæwîbðë aL³ötÿXΞ °¼à=âÜÔŽY`" Ð '‚¥ŽF­Jµ*@ Tbàì‰@ ÜÞpĹÐÅ[ öÊíÜ_"Í]ÖÙù†$8Ô+ ó-Ÿ‰ñ¤¨7ô€7ŠöóÏëÛgŽï÷Ñ×ü€¶xàLÐ@£¢Ðn*Oà çF‚Ï]ÌÀ †ë€.e86¯<Á8¬=óƒñÄ/Ûã ’hÕ÷�”òk%ÐÀÙ¿Rïí}c¤þÕçFõÇÏ…PtG…*• Ë€�]O6ûö¥zzsT‰=lžo+´óy’ZE!ÌÍý˜­" YGãÄb0m©*$dSã‰Ôx"èf~è>3>ÎÌú Îp,ÓØúcoÌÙ¨)¼ž+2Jc§çðЩ�Ò¨W} _uéö½âU·Çhåd£š(´r¿�B· ž¤zRd��a’·3'‚(03ž»˜úÁíªBDþïÛ •“¯(vøñ»ÿÅi­�ùø‚F5Qh7t.ÉìÛãMØØuSþbþéÿüz<ذ°ÖË÷žX poÓâ2›©�K‘P8ÇoV)€ó+!º=/«Ü¬«#r´UEJq*�‰¼Ëàæ›Uå)�ñÿ~;KÞåê΃Àf[vŸåå¿lçâ[MBfÉœ.Uk :ŒhZÜ¿]I¾…ûSë„™Áì¬ûÃä–å]®ÞÌÆÉ‡çwç� ýÔOý4Μù!$‰Ã` ¸rEãÒ¥_“_ü“RE°L@-)¤kýÏû#ÆÝ çí†ÔOž�¦ŠP0­Ä>6…g¶÷®Þ¶âý I (%§ŒÌ"ÿ[ ‰ iFS�Ÿ™ºKߺ¼�&Ž•h5BԚʻú,½Âí54ÙùJÒµ/š¿ó…”>ÿì�ªoO»¹j ³O+aê-T]f~èxèTˆF1,žÏmTB5ÞCÔ‹B1*1acÇâñs‘rðÔ‹c»ë`¬¯Â¬n>8¶2¡}ü¡×îXŒ&‚'ÎGXYÒh×5*I1ã+p_Yò-aû„#Ÿ�É[ÀˆD¾%mœzBšZ?È¿½ç0Ε¶2#àÞ–E£¦üu“xŸë€j… È¯“@2#ØîúGw%¡—¥±‚ZBØí9œ9b¾å«H•Y¥ªÀWŒ”òkuo�“5Kø§ÿ¼K,¨Ä‘÷?Mßx=C³¦`Ý~kÕýªk"ÓlW>7Ò¨z×Î'ÏÇh5½��£í;ž|Ì‚‹·û÷ò—pß«†¨„·æðMö‡½‡››x $P¾‰Ç[%sEK¡);Üäó!„î/â˜Ê}®C÷&ëöAdC¾‰qÒ!1Ë0•®C¢û±GpæÌ/ ÓiÂZ‡ÕUà•WnÊ‹/þ ¶·‹Y(ÂgNfÛ$Ëí\ú¹‹ÙÕ•¥p£Vá�÷¸ ÄQÞß]%×Åý¯?Ž(ž›ÊÐ^X 1;ìt6»| ôà,üý~”A¨ •¡{)á(ð@¾YŒ%ŒR_EŠ#ÂÝ ‹ó+ÁTl·Ïù@¶7x�ÆùÖ»ñ½aMùhÞw!Æë73XKh7€ÇÎ…86—·Æ„@ùÖ´’“L's_ŽÄ—+…¿ òJŒ 3<õ¹»a‘e‚7dDù|Mµâ;A &o¨)Âè�¼9á\SA)B/÷q,ÓsWl7ïœ<¢Ýð‰�Å|?*ù\L\ä31AnàyD@޶£í½ fåPôvAß·âx¿YŒòp®Þí¬|ñ3‡ûÏ%|+Iç;¹éÛdÌÆ<%€ô?q++¿€v»“Ïz^yå¶|ùË¿‚ñx€ƒÒسs0"ìh,îÌñàKíºúî0ôò®+Ë>‹…^¿ß1P‰aà ÇN.êý GÞžÓ¬)45t&¸ðx 1¾öRŠ×nY¤i>˜ê›;Œ ÒÈ\ë|…#|ëS  ©¬nxÎëìŸPñƒ¯žtøÌ|5QH"LŽ£ˆÐ¬ùø6v6w½aÚ�uÂK_úoÖæz#Á͵Kó—o™ýª†zpF¼ü­u’Åù^þã ÑÐU¥s¯`¸;ÂÚú6‚@¦Ä`<¶ºYŒÒ}e¨«·íÔ7áMcÊ·s'C4* K¯RUIo·ò„çáe_ñÛ7+†#Áê–Ãxâ ¶ˆo;<¿Rõ [‰¯pD‘?ß…ƒ»ò*pùõŒóã~D@޶£í;“TÉQŒïÙó|?ÒI߯Çú/{|tâACM?û³ŸF»ý7ÇŒ~¸rxùåß�W^ùö…ðÈÇô3ϯè8‰ècA{õŽÅÒü¾JO˜Ï 8)°02ChÔ½C£Fxê#D±Â•¯Žár±ËŸxO ÜÝðÎ˃±�õ&cc‹m�¹¦oWRÊ·¡,Íklw·îÌ·5ê•ýö®Zµ.~h<Ô@),uÎ�±¶n±—÷þoïyƒ3­|uÇX Ð>k_�;=Á87@»8�ŪÌÞn±£Q‰�fM£šqèIÛÚ¶›mEÀW¯é¦`c#Ef+KÖ·˜÷¶¼TÛ*?oB€Šm8ò`¹0,²Þ@kD!³Œ8T8ÖQè45ÞÛZAwȸ·•K¨Z?œÍ¼ïÏq@6µt…-Îiì üÀôò‚'@õšw´&øêY»®°±ã0N�ªwO¯WÕ�ù?4Ä‘B½ê•¥Æ©À:Áp$˜ß®´7ô-H"Œþ�‘f¾�,Ê3üÍagÏù÷T>þ…9ýfÜ÷°…„NË�þ…qbQAxõš�;ï ÿ«ÿËWÑëùóœ_Ù:ÖÑxþRzÐ�f³gô@Fy¿vµvsßE¾¨ÄTÜÒ̳cG¨& ·îY|ðñhZÕȬo¯ÊrÑ„ë«">Æ©/îßhàéÇ"|õ•„Öæ çN†X˜ó3%IH¥:Aû¹“ŹÜ\±ð†ÉÛÓŠ0�·&ZçÏóÈz ß‚_¾iŽÈÑv´mGÛ{˜Œ¼Õ6¶£í�L‰‡Öç@?ó3çQ©ü––Ö2îÞUxå•ÛòGô‹Ø7 -ËöÎÎ{ÜOR˜!;ÖwXŒ™¤’W5ÍÂN¯ f™Îœ?âÑï¯áö³üÉï1žø™ŽîÀƒÙ½�oÉ8ÐÂ4 êÉ+ µ Ëó¼ø]oN–ÄÈI�àá•q^át4–OÈŒzÍ·™¼vÍüÿì½i�eéYø|ËYî¾æžYûÒÕÝ¥–ZR·™™aFìñ„!0f™`ˆñ< 8ì`‡±<3Œ'† &†°ñfµ!c™5’º¥nu·z©êÚ׬ܗ›™w=Û÷}óãýι7³²–ž ûFTTeUVåwÏ97ë}Þ÷Ypë˃¬iéôuæ¾Diìa¤á: ´¹8>ë€sšòh}À�Áê?JŽíÝ'\T‹9ßR[œ!Ï¿R$î:ѧâ„a}Gá«—®ÂµyƒÐ c¸Õ;É>Jg�8Ò7$‰Ü�éló‚ÌêÄÉ nÝn#‘ŽZ{Ú¦�'ÙÆ¥Õ&ð³×Qhµuvç\� G§G´¹©†@­D�»cý “„Á•ô,,m·ô<úœDÎ'¤hT ¸å}†(¡Ë^Ÿœ–(Í›t4×,%.Qæ¾€½´Yž¨ ì´ÓMÔÀL“t®3¤ÕË[»·–bÌMJÚ"äH§ã�˜%d Éà§ÖÉ¡A/ÐY˜£ë0´Úœ“&§ÝÓp$·40ÏãPZc§­Ñ¨ˆlT Í~Ç­ƒ—2cwûÕé"JyÚvä=dÙ+RR¢ûâª}ΕA´ã�>µSïöµ1zHS,æ¾ðÕ »ÇY {|JÚa¿)%e ÌMJìVÃw<û~�‚€ �x$âOßC$rߟŽÄQdpñfœ5F{_Œk\ã׸Æ5®Gÿ?ÎGÁûÛûc8wî9ärçÇÀú:í[ŸÇg>sÑ×pxÆMü·¾µð=�*çB0ÅÆl¶û½ú¿Žýᇩ]2~ô{Êw¢Æá:ìlÎcÇóÔ(*GRš´#€‰†€wTâ�Èû÷ÖÜ]jÁõ+èZ1÷ñ9-E •}uì!@ã¾+aˆs>Q#÷ž©:�¼O– å\‚VG¢PjòNGã铎�p±×RXY#G£D‘ 7Q@š,Ž*æV»§qꈃ‰* G2;©ºEuD“ò½”zCœô|Žc~J@rXÚÃÖ®ÂNG#ЬÈx‹ÎÔhøif¶vª%j¼cE9(žË²)w?00šìsG¯S 4]ö†JÉ6Í.º{Iš<×J­=…k‹Ifðï_ì£�#÷ª(¦¤øj‰F˜ù môÜXC¯¯aÁ™ëPBødƒšæBŽáØð=,½ÓEÏæŸlí*œ>âÀ•©è™Îµ´AÍô^‡¦ô�B£¿D4Õ?wÂʼny‰F…£à§ú%ru "²ãÝÚQ8}Ôn8l�žï8ÔšDÓadDÈ ×ˆŽ¶Û!†œÏ�s9v:Dô\ŽJ‘!ç“ö¤Ó×hV*ÚD$ hµÉ½Ìd×½• Q¡ g¨Rm„— Çí9í™™Ýê¼y%² �í+Bä¬õuê²%•£Ñ-{ŒïZqB ºZ"z]£Ê ØÄtîtû7ê œé"®¾ð*×4fš[»êŸ{ڳ׸³Bf{�¶Ý–º…fØðñd\ã׸Æ5®w>öi=ØwwO=õ$Êå†ã´ÛÀÝ»»øô§o›Nçw1Luú[?ä=}Äû‰é ÁS ÜfU VßtõNô;5~k¢Î�ïŠ�VËâC•CÎçb„Ï®rC}Î�§ fϺ(Ïz¸þBW^ „äØt{%†ïWÀ9,—[ci=¡é2{TÓ:üa©5µ2G½ÂQÌ9”¹‘P×þÝzµ†“ßö�øÅŸým Ò¸v7ÁÒºBœPHÛê¶^‘Õ=$…=­ 4˜¨ Ôl0\Þ§‘HÀ‡R€# &ëDËñß瘛X^Mpg%AR“ÚíÓÖ¥ÕVØÚÕ÷�)°´Ÿ 2èÛ¿#32ø§ÓÞvWcц¦bë鉴 ì]1¤Æ¹M¡ó>Ãö®Êlg�†#�·®Å68ÒÀµÔ¹z…c·c(ñÚRa¿Vûol ‰Z¢wM5Jy'³íu$ÃÒúP÷Âè‰~ù_ÜC§oðÁ']ÀÅêe�Õ­;6ÅÛ˜›³wÑ$ç®q�k\ã×xò1m>*Á¾ýÛ 8{ö_¢\®"Ž Ö×�W^ ͽ{?‹åå4Í|ÔáÊÐy¯wúýOù?67)E1O `�bB�ÝŽÆâZÂÎuˆáŽÃM– í1œ;ï¢q¶€µ×ºØ5@¸£°²šPÎDBÓÞBŽ„À¯]¢�1j¶èïÇŠÔ:=ÚbŒ¾Âƒ«z…&öù Ž}g´Á¢ÆñíëePx wÖ,­À…‹~@!hOžp0°NL™˜å1�Ïð'†~ QÈ14*CšNÎ#“+öº ý€@ÅÆŽÂ·|À϶V›4aBy(Û{Æ}è` ûaçê Hä~ú¨ƒzÙ6‰r˜Ñ•m¯«qúˆc)LŽus%m?&ª{–²Æ$ÎXG§¯±º¥†¤õè –6T–Æ t{”åÂmddÓÁÓ-ÐÁs'Ê ^�‚€[!£WíÏ )ädÜ]‰Q*ä}†¯\Ð ŒÕf½À`aŠ(Sûüë•Î~èý¤ c“½>G2¢ÕYpÙ¨ T*KË1úÚjmïjLÖ9U·©&J€ë‹”&Ÿfu€±Cïëa¿µ½§°ÑÒ˜�à8wÂÅdM duI\PŠxt{D{[°îTî>>ÑÖ¤dЊîKš’nŠÂÈàúb ¥�~ áJÚÜ\»c¯G%eûu… ÛÜF…gY!Æn®v»9—Ý·½\\MpbÎAÕ:l‘Ã˄㩲°[)è}s{9¡í\ŽãO^îcbßV©; ÝÑdM<Ð8ì7Æ�q�k\ã×¸Þ øàÑo°ú¡C³ù­p]…vÛàÚ5�‹Í\¼ø% ·©È|”NeNuß;U¢\ ºRꯟ( AÓ˜ª 37!áJ`vF¢z2ÝŠ09ï"æ¾ÐÇöKâÄd¢ñÝŽºõèô†SJc f&$ªEjòŒ!JËNG£Û§tp)hïHdnUY†�äæ}†¹ ¿ÈÁƒÒ1­‚Ð@ r©ZÝLÀ… nmW=—áæ½õ ß×,=¨IM�†ÂÈ çÑÀÈ©©”cð}† 4ž3 :S‚»ààö§×ÑéÛÍ^{'DÎçè èÝYUû)^x<ícwtrØç<ž…+Æ E¸(E mºA ÛÕ’€V€gíl×[ k[ ¡Øïu4ÙÒ®%0z?Œ¬›–1n9ä¹² IDATi�÷Î� `êHj ƒˆDÊwVbä}ÒEø. Ãëe‘%È�6ʾG÷’1jB5€vWcmK¡ŽÔØíй*EnלÇpånŒJ�gT³ô!g�8ÂÈ�‹’Õ»4«D÷ÊY÷±½®Þ÷ïÔ&EòÊ:v_ý|¿ÙhÚ‘ì°?0‹ÐÇ5®q�k\ãzàÁFÁû¡z³³ÿÕjQ¤pïðöÛwÌ… ÿ7¶¶z {]><4ö;Z¡Täßœó™Î‚Ðl“ÞíhM”ŒœÇð׿§ 5%qù3»¸si€~Gáõ7„Úí´õP|̆ÍôÁШ�ek£"�óÈò6u­ñ=Ží]²’Mn¼‘À3ßãðò S%Ž#ÏçйáÆõýM…nWcp�,i[m²UUZ£ÐôÞÁˆ‘dè Š9²få÷m7ÒF¿Û×Y†I1Ï­0vÿ™\ \¾MN@‰2ø­ß]§`DM‚ãÖžÂ3g=¬n&YÊÁäì‡5M£.œÑÁi ”¥Œ; ¥‡Ö´qIåNìu5ŽÌHô©ki"B›ž}}1†R$°O�ŒÀp_VJúÑ´ƒµ­…< TK¾K€Q[ú—ï’]mêH–Ú»JÛ€¦ô­¢MþîôH›F:CaLá�ý@À#ŠÉ -ÍGqGx#š†Ø€J‰ß6´"ö(1˜��(Šž‰îÝG4GZA{Ÿ@Y¢~å7Û²Ý3M)(¯ãÂ�í®ÆÑg(rfȨIï¦!ͤ¸·–І(ÇGRÆÉ¡¬X‘趉^ç:´H›ú(ÛÀh+À7XÞTØÜ!:[ô�ävv ;?2-±¼‘ ÕVcŽ3GÌNîw%cŒè}yp„Ä�¥Ïœuá»öšJ6LEtŸ8'šZ*OÜ£¼®&Hƒå ¢ºmí(K©" ‘‚0Ïeh÷ˆBY+Ó0#NÈñ¬aËh¥¢ü8A¦/�q�k\ã׸<è‡ër;æ²�üï¢ÙüŽLëqíšÂ… Ÿ²iæÃ\�Ñ4ó4Ñ÷´‡×.…öPÃmÇö®Â©#™äH{e4§í]…•-•tRš:0Q™¡‚ï�“ÐÇ5®q�k\ãzøÖƒ1c8ûÁ<�™™ŸF¹\CÜ»ÇðöÛKæå— ý~C{]sx¤à#ý5ÀëÒ£4M$ÿð }ìvôSIbÐ顯ùÓ.ÝŽ³ÓìÐ>º™N3 9†r‘“8ÖŠ  V2°›ߣɸ‡ŸóQ<çcñÏz¸ð9Ê #+šUÄ-O·-;ÏT�š“#ÓÒZ©Z�¸Šy‹« ¦ä”Ù94­Íû Åš€£�é)/Ïqýj„ BËí×è4� B�£hx®È(Q¥ÏÆî,å«^á‡\<Úâx¤ùoT©‘¯Ø<ŒþÀdt°JI°ÅõèÂ3©œ¿õZ×0Î ¸�`À­¥A¤ÅÀõŘt vc”þû‡êpiŒ€©G¹@VËÕ"mƒ\‡(iTG[¨HIŸYcêHÚpäs,ˉb % 3ѽÁâj  ÓÕYÎF¤X+q¬m+ Ë_ò\Ž£3ÏžóH¯È–ymKAŠáÁ7[ŠòBJäV•Ná=w¿&¥AJAÀÜu ×èŒR_~5@h0é;Ípo�‚¿f 1R=k‡œf›<{γ®\´©á ð} ñÌ�BŸÁê[«XÛLP*�ÉÁWCŸu²tô[˔ű—¦£¸©�cÙ+ðì9/¿",¼÷ �êЪ×÷蚥4P! ´ˆbàÈ´“…¦)é41c2®q�k\ã�Ó/Ž û‰Ÿ8…bñ“h4âXcq‘ãÂ…{æOÿôç-è8¨õýcÿæ#MäÌzK]­•ùi¢–�kUÎc6 �h!±¢ÿ¬]‡=Pàk€LTš÷É÷©S4™t@rš”WK í.m\¢xáµðèg¿´im°¹«ñüÓ €÷âÌ^s´Iå¤xݪvOcª.�ÏÙP3;™•šRÇV}öI ”f$:-…«×¢K\¢Œôú;ú‘gšŸ’èô5Þsʳ�; ÄSç¢RžÜ²î­'xÏieëò” ì)Ñ›¡Z¦;‰ ÊeŽnWãör’mvÚD·œay]a`Ó´];ùõ}†$�mÊ�‰†Ö€*M›*)€j‰\‹ˆ²D�¾´¶½­Ú�vd¯«Í•[Éù—¾ºa´!ÝÉÓ'(|ùB€~@ÁMBÌ&YprËç†ÚÏ#Š\¬RC)O©ðßþá¸Ý’ušòUb@;m¢*ÝZ¢Ì�QÀuØ‹yŽ\W£Ý5Ü Y˜Ÿ`䜮_­L×íæ½žKázÏœv³çpTºö™LSÑEî^aDçìYí'rìu:}2ˆàŒîGÎç0Fc¯£mnC’ø>{°(ßþA?0Y^0Ù�Y6Œom|81'ñöurõÒ†\ÈV—¿ùË÷ žmhž8î ÛÓxáÕâw“ŽþdÄ=¿Ï�÷°ÑR#›-Úlø.�UÁ ˆrô-1<;ÄЈ¬þd @Æ5®q�k\cà1@¾ù›<ýôÏ›……p¶·gpãÆ×¯ÿKóÊ+ÓÌn=Ràq|¤ý€Ë·¢?.æÙ))sjT;=�¹)ÚpÆ[JÊzK¡”NYS;ÐFU T í¡(ຠ~ž£ì3<ñ¡¤/ðΟuñê;!\‡áõKƒq®€r�ãå·C™hw”|~x—’Šw¡AÙòÕÏ•è hrÌ9‰_gç%ž_À¿ ý€G2¬ÜK`”AïZ” ž—7H¸û¨Tïƒ'’8{ÄA£J�¨çÅönl§³Ú RtpzÁ%[\‡H)Ï1?/ö5–׬n&è ú·ÉŨhÜZ&úJœ�þfgO[í‰Î¬J•æ'eÖ‡1‰uûÆYö:8'ÚR½BÚœbž¡àsxF¬q <úÖÉŠq Iˆ¿ï†½n‚Õ-e|�A2 \dxûzDZK5ã�P8,m�žv;ÍŠ@³&pö(C/0VÔL?&jÕgkÉæ+-¹¶M×"“·Ú¤3IÙýÐàúb²/­�=ØvÆÙ ‰7®„˜Ÿ˜�¨WèšyÎPÏä»B‰’˜i TK"£ôQâ=5Ì @YSKýJÏyáFmH‹¢4°µ«À��Û+1„Hµ[œ3¥Ò— R�0¼Ó׸±c~JfàRØ õ�¶Æ±Y‰c³é6fÔe޶+é5t­¥òÉ›; ^d°¶¥ñÙOߣ×Á—“ ýµETø(�ù¨2 ï/R/½ÑÅ7=[Äщó§tºdõœfÏTË¥gç±ûÆ2vw Ay3Ý>�ôÔ‚8Œ� Ôè‡c2®q�k\ノQ±ù�þèwáĉ"—;†0îݸ}ûsæþà7xºaû®FéV1ö»^íÛ~0WïÆ¯àIogaZÔ‹9Ž ¤ÉnÙR[ÀhšZ.Pƒ²¶­0ÓÈûÜNò hAÍg!Çpæ)àFÕpÐÛŒðgŸî ô-\ †í=¢*9"uÈ!Ǫí]rµaœ*ìev¢ÝPG¥(À9åK¤¢hWRÓ/8°¼I"u­ 6;ÿîŸ^Æ^Ë ?ÐÈû '|ñµê�õ–ÊBì& ?ªwJ?¿Ý£ì�|Ž“s—óMM™Ñ@˜ã(�óg]0 ú\2lo+|ź‹¡Áê6%foîP:�kx0ÃHÏÂQŒ6v4NÌ ŸsP.pxé=´ôµ­…¥ …Ù&5ŵ2C1'�ó`�¥†Ö¸õ2Sö+èîkܸ#´nEƒ�Dð{VG0p‡ÖR�ci#ÁÉyçþ„t<øž¦�rµÈÁ8 ÏËÒæ¤Î–6hc  óœý‹|gÝab>JŒ™¨ñ¬i~ëZ¥èúÅ îOÇ~Ô$0Xà£3ËÞ¼om…] ëSÊ€3rW« &ëÒ&}ZÓ„>Ž)?$Õ›ôkÛ ‰¢Ÿµ¾¿yW PÌX;i µ§ 9°º©plÖÁùS.ª%:Oj0 �ŵ„€©6˜jØ@ 8\×ê`Dªi¡(Y]Ø^Ogá–ý�ΨfÛ»µ ϶Žr9²/®ùŸ+å/Œ ÊEzOÕÞsº¾O˳Ñ"à ØgÀÍ1¼úêðÖçï¢×ÀÊ™©–8¶wu–sÒîìvž>åŽEèã׸Æ5®¯kð±_ëñwþN§O?‰Ré‡ „Áî.ÃíÛm¼ôÒ?2·nþÈß1ØO»£›3>îûºÇç%\‡aQ²x­Ì)ƒC¤.76ášÑôðÔ'›Š×ªnÝAÕh̼¿ŒÁ Æå/t±÷fh ı� î¬&Y£¹ÑR(8:ý4U›½§f¹ÝÓ¸z'Æ‘i‡¦¶öï9Öγ˜g8µ 37›ÑI}¥"à9êC霋ßú¿v%2aø�ر9„ÃZ{ ‹¯p|ÎÁFKÝ<Ø#nbêÜãH†(6˜n�‘ÔÈsj]Épò´—t¶~k)áBÒTw£¥pùfD©Ô5HaDœù02Ùf'ýjü€hª!Á˜ÁÑ™¡3Y¥Rz·ç�ˆƒãó”/‘Š�sžÍëpje�n_cs‡h]ad¬{Ý—»«´�av—6h»â:ÖõˆQR÷3§=x.5å»25Òk«4‰Œ €ržÙ�Ï(i®Ü¿5�’®éÍ¥˜ÄÍÒàõW†i>ÇßeØÜÑØØV8¹ F#Ÿ½» Lú‡qlìk£_Û‡‹Ö¨Ù¦ \¨N±³Ú�îQr¼çp¼v)Ä_ù€�NŸ€G0’våN<Ü®™CÎù€³ž9âàòíÛm�٦ĔÄD�¶�¾K›cÈ7M6¯•9Uß!Jdj],-%Q –åÝtm·¦ãØàÖr‚¶u];:#qõnŒV[Ù� ÍAˆúx°¶¥Ð¨ÈI”AÒYZÿD‹òFÁ‚u�‹7úøîo.Ó3�凰ý:I§Xѵ¼»˜àsŸûU ä$Ž_ÙLpg8:+QÊÓuø¦÷ù™cã�q�k\ã××çÖcHôܹÂózÂ_ýÀdt)ˆ'žf=¤–�‡Þ´´Ûј�}%uÔJÕõmJçN›�?|50|'6÷,­«Y0V·V6‡×*Vl¨ia�ÞŒn^´eK‡óik0´J%¡|¢‰®2QhV9&ëÆ»mj:7w`„6)ûÞ ï÷º÷§�û�ëxíR¦%NÎY{\Á  mHZmg§.Y”8Nö¼ù\ê°„}÷5Ý2¤h0 ×1GÒfÌàå·B0NÀT ÊÅhT9–7š6)ûq€Û·q ŠÙ©ù*%§4CÏcXÙHèóíý-4|¼½-±|!@§OSö'O¸¨¿v7¦0À„Èè}ûZ@ѹã¶÷4f&*%zþÒÌJ §�"cQ´» çŽ;t]]a�ÈDˆâáFæöJ‚N�¶»½”kC&®Ãpî„‹wnDÖ šg4¿Ù ‰ãs¥<}1Öx µGÏV¹È±ÑRhÖ8šÒ?UK6´ÒcøÐyï>Xº•QÚ Ihc£4Á5¾ôfˆžÝÔy–†˜ó8�[K1~ü¿*ÃèáÀ ­1׸Æ5®q}½��Q Ã�ÿø�£^ÿ/ „ÂÞ°¼|/¾ø&ÞyçHhž~¾9|¨sàd ��¨³ÙIQú¶çsšnŠ“Û{JrLÖÅ·žavNcòèßÄ•×~‰bÂd“Èý€˜› �æ:ìÛ°t¢{[¥”ÁÉ5šz»’4 J‘»Pº 96ëdͬ#¬=íiNlP” fÁÅæWúxå÷;Xýn‡\³(�ûÒüâ„xóŽÃÐpf'<Ä Ñb¤n4Òêô5ªE!d4ªÔ\ùÏè+Ž$ËÞú”„+¶^ N4â„cmKãÖ;¡ã8,³È}óZ„çžòpùv4ÔµØÄéÇ¥zÑô˜²7r>�ªB> &¤sÕš¥‰µË”†Ý1,ÌH$12ËÙ4ðÞzrJûšdÁi*åNŒçžö(½»Àá{ôM›³´1T p|^޲Ó- 'Æ�ú/`¯«±¶E¢û02ØÚ£ù½.%t{®Áê¶²Ú a]ÀH„̰µ£”§ÐË(1ÙVï 0;NLº)ÃdMàO‘A�ïò,œ�61Àü¤‡¯^³&þ¥wñö5�C"÷^ 0?)ðů÷_ÇwIýÚŽ4]sÏa6i~h°Pðr¥>Ý<beà» D™L4é"ÂÖ—Þ·I¬·vÚz߆³2ç1Ý”hTèž1Fæ ížÆÊF‚­=…é…4öƒ¹)ºŽ¥|º‰Á>`”‚¶œO q? Ó r! Î?÷• Ó,HI EiàÂ�§�ȺÇ=Ö=·Ïp? Kéj‰g›¡µm.H.P>C4~É•ŸFw…Y÷1Ú¬·TЗ76¬Þ)»¦À¡©‡UÞ§MÈ…ëÞsÚÅD•Óù 9w?q„�¥·Ÿuî£TI«]I·2qL c}meSa­¥'ƺ‚ «Q¸z7´Ï"¡Œ„l´¢˜ÎKT: TÆd\ã׸Æõu<è‡çqœ?ïâcûÔjß™i=®\IpçÎ'ñÒKk€G ,ðßàÍ=qÜûƜǿÙs™QÊ`¯kØùÓê oD_~ýJt ™þƒÉO|_ù¿®”x^ |¤Z¦�c*m¢IŸ,̹h¾¯Õîã…Ïticƒ×.ÆÈùW 5qúÿä•NÌK0ô¡#;Ð5=Œ6Ôé“€7ïQnƒë°,§¡”c8ú\ŽÝye`”&½ë0ÈI�z]âÒåí¯íÔ6uÚÚÕÙæàA‰ìéFàü)7£O¹.³¢a“� €¬tÓ¦>�ʺ6½:ï{ �¤ÆöνÝk!¢˜ÜŠº•½�lr×¶`\ÇÀãH�º†@lî*Ì4o‡Ú]�ɺ f½ÀQ)RººçP cšæ]Ê1œÒÅ^ Ñ´úô\Äò&9(…±Á~¡�ù)΀W/†Í‹=ìÞ=†u¯ÈrL<‡Á³éâm†e¬ßã赊€#H-­Í+Œ�í…vO#QDOËÎÆpßFfô|µG«­á{ ÇfLZM„gi„‰ÊÚh¨»À´´´Ÿa‡ki?žC›)Iÿ¤ i7ö¶†4¥Õ-…�¶¢ð;plîP“+9m`„ ×>ÝØÚUÖ*Øj%8nó_V»JpÏù$试† äîHPæd�DæZȈÖ}üëÿíûÁxDë‚áè¬Äk—Bl¶ô¡éè_ó79FàaÊy¦™¾› ÆmXÊ™OˆŒŠyº&J‘F¬k)jQB)ç-k“¼4šèþ€sÁðüy¯¾CS0ްK”ÑÉ:cßf¼øN?9ó#c2®q�k\ãú:ØzØ4süØ��ÀôôÏ X¬" ––nÞüøÜçþÚíƒ[ÀÒ­þÚGý‰ógrÿ`²Æ‘óXÂ9ƒÒ@3ÔØëðo�’}ãŸvþçrÑù� ?b§ö‚ļ,‘’þÓ/N{(¸ OyàÅV_ÞÂÛ¼�A ÑékHAt™DÀX â0rä\Õ¬Šý*útQLIÜZøÇD�£˜w�÷m‡`ØÚUÙ¤·0)Ù/ÿ›í7›x¯10gŽ:àøâìãø¬@o`pg%ÁÈ€Ÿšþ�›pàlqb0Q(Hhï:ćWšdiÍ'ç=ªyÁИe�Õ+!®½M.UaDáuQlpõn¼-¦¿î j%�»+1<—º°c³Å<½~¥I;QÈ3´{VŸÂ€ 2(ð” ®¥ 5žÃ�/�ˆ¼\`(T¶×,-%„€œ\ºMqœÓß­—9V·&ëâáÓî4{©(ÞuÐÌÖ1Qã IDATXºM1dzI:g4‘Ïç¦ÿ³ãØzqÛ»dFÀÐí AG`-h/ߊ³k‡GÜ×ÃÎ8Õ äù©¦ÀD�¦ð…� Æ©Éu¢wŸ•8wÜÉ6) w¢9~(2èõMžxùv4¼Œ¢àÌQ÷ÖHI"pÁ *E†zÕ…ïÒödaJPH¡¤Lƈ’WÌ D1�àé¦ÀS' ål:ºku1)HrlKgäœNÄðÂ{“:|p8Àrý�ÁkCÌMÉûÒÑ¿ÖRŠ6«› §Ž889ï£ÓÓd5lÓæó9†æ‰„­MloH, èô ´¦<ŽA I?”¼u-ÊÞDé³ð¸[×aøÐ{||å%ÂwúgŽJL5êå!Ø|ãîü�G¾8qb @Æ5®q�k\)ÁÇ}iæø¹Ÿû{(•>!4vw�›77pñâ¯ãÕWoâð­‡ ¿õy·ùÔ)ÿ§²É½mT•66g‚Ak˜…ù“9�™´aq$ÑŽžøP¹é&¢«›XêÝ~Œ/~ª�Þ€¢¶÷4ÙmF¤�àŒ„6FÅÂÈàâ�x_Ãù8hô\JSÓ˜Ò®Ò¸œKÛ„~ )lQ’¶£>%°0'щHX»øFLô«iµ5´6èôÌ}Íúag«Wô›¡É»ï2pºg#²^ÝRè ÎsPÈ‘†ÂsˆÖãHÏ¥§6)¶öúA¨qëžÁàFd]–€í=r'R†¡Ó3ðá=Î÷€AȰ½K¶¾Ó ñÈ/MµŸ›�YòtJIó];�·Ú™»+ ”¦ìŠ 0ø·¿x›‹!”F&Â>¹àà�+Q&Z'Ðò�aücèbh ÃPµÁ‰9Ÿ(8©ómõ€Äç(ÉŽø¹§=öÂØ ß!ó€0¢Æxm3A«­­IÁð~îÛÄØ.Ùw)¼s·£íû4y¯EΕnã˜ìaï­)´Ú*ÛLÕ‰æ—:W¹ÏÄ×®céDœÙ åÁ„mÒÂtû”˜Î Ñétœq0ë•Ï1(Ã+ÚÀ}­Æ šU¢UŠx’6žÃ0 v:Ên ßúõ*>ÿÙeô;åÍ”9¸`Øm+¬oË zÑÇy/?ªÞÿ$%¦¿çŒ‹ze˜:ŸÏq¼xe?\þ>àøq@©1׸Æ5®qý¥È€‡ë2D‘ÁOÿôi ŸD½�ÆÒ’Æ¥K¯á�þèÿÁ0Í|xìËvŸmT…_Ìq“óíd×Nî9£ib©Èá»0O>åÁŸ¬¡ÜoÃ=ZE”(ÜüÒ66Z·ƤÝèÔT ÅÆ£Ç'®65¬ Suñr@× ˆöto-Éì^=ÈùÕ"ÏŸËëö]†é wÖG±A.øˆB…«¯ö±¸– JƉVU*p#‰�+EŽ/¿`aJÞO©:¤QIEöiæG1OSù©9rZSÈ-¥TàpŸžÀÖ+›ØhE(åéu.Ý�ÁºNÝ�A’ÜYUûšå‡�ã`ósCšŠçÈÓp%ÏhBÕ¹H¹’ºÊ i |‡Ã¸ÀƲÂò…`H?ÛÓ$ ÞNИlëÓî’õ˜…ïiÊlqÎ�pà9´=ëö5.Ý 1Y—™n»«I k“&jÏXg-;ÓÚ yJœÑ=¿y�t8NÌðé¯ôF´“6´²Û7ø94pä�ô¨^tPV„à@©ÀpbN ÊZ ;hñP(ÎcíÆM(HI ³70ØØ¡íA<ÙhD1pã^œÙ´foäGø13çO»¸r'ÆFKáùó~¶Ê{´#á{&xö¬7ÌâÝÈ8,Ó~ÄŠ¦ùŒ z}�ÝŽFœ×îÒæ(Nö<†åÍ;mÊê`Œž3)ˆJf´Á 0(ø qB†½¾A>Çî{E1¹¦sA¤1Ó”ôìŽfv¾ô^W%ƒvŸLâ„áîªÂýÖ—àù<Ë&YÚH°µ£±0-÷½Wþ¼À#ûÎeáñÙTDϬïo.�Á—ÿ&pâ þ›�Ëc2®q�k\ãúK<€Q‘ùG?*ñÁ~33ÓàÜ Õ®] píÚÿŠ—_>Lë1êl• – â¯ævw"ìi•ÑrÂ(H†¥ëmÜn‡è¼¶‚ ¢†âÖRLœk�LÄÉ÷Yâîà ˜›˜›(ç™En>g†Z‰I�r‘�âù»>G³Ä°ð|Ð ‹_ÙÃÚõA;AçÍ”Â\[Œ0YHŽ~@Ù‚€èö5ŠyŽ•M…ÙIAmüð‹Ï9påN„÷œö²têBæ4l˜Ý<Ãíʼn6PŠáËB,þñ0†,1ûÈŒ@œ­ÚNóqHú8›mÚ]‡eüxÏM�ß@Žgθ�;w´v‚À`0H70÷¬(ûa)íŒ�ŠÀFKŽãs2ÛIÎ``„õ ÇòºB/ FóجÌì…½‘æØ•dœ÷jU¦��…�=ºn�ÝÃÁ%P'Šô!ŽmªKŽ[K æ&'‹ÞÔbõ¡×Q\�;瑈½Tà(ç9r9–=7îÅY8 š~íßÞCÔ`Ðvà}OxDä�vá:Q~56?�úõÈM �õr�£^æD�³›,WZG'ÉÀ™F¢8b%Ьñlç{Ö²6´”$»™ ,Hzë*¥£'Êd™ô@;ô¾Ë±½Crú:ŒskŠÀ0Ý�(,C›ŸÖžÂöžÎ4a7—bœ=êb¦Aïë”æéVNHrýŠbÒ1P0¥”WïFèà&By�£Ye¸~7Æ™cΟû›¯¶éî[» UAy(y†çŸöà{ ëÛœ_ºuÿ]åoGŽJá¯-]Åÿtä—Çd\ã׸Æõ—hë‘R¯>ñ‰ïÂÂÂsðý£`iIàÆ�Ïáþà70L3u¸ LÁ‡`ÉLþД´Wk`}eË÷bLÖiK°¼–à‹_ µg)B}Ò¤ 3iNö‚„RœË�Bn$OB™ÌÙ(Œ8f'ò.ùøÏ½7Ç“à:%ÁÒ/þ»mËï¥z+ ÕÖõ†1`eK�AÁuZm…¹I‰¹šÀé#HļÛQ¸»’ Váp¬V@~ÊEŽgÎx\& p8Èç9fϺp+XŠ1hJÜXî" É)ÝY@Z�K,®%(Äc�ìºÙÙÌ�Z™ƒ3†fM€�m!èks ǾáÖ/®amu) „d—nň®D6—Ce˜Õ-•mn·1.æÃÙcm‚ ÜÚáRã˜óÒü†~ ñä 7³ðu$YœÖª´ ‰CÍ�nGãÚ­8ÛÂ,®+¨Ä Ó' P?ÐhíÑóÒîi¸YkC êÑ ) $´ö4I9ûÌ£-c ÇÔYS\8$3Äwi›Õ¨r¼s#B¬ úàWþ÷5‘Éô6J¯¼ QXZO¸�a�ñ¶g‡œu¢N CšmkEŽØRö”fð]¢3µ{óSQl°Ù¢ L”hôäú¤”ÁÊÖýéècs๧=\¼AŽ0V˜mJÌ[Ñ}þ€5n9Ï‘óî®Äxú”‹gθ´éÚ·•!°œêiŒ”}½aŸ‚ £˜6£wWi+ í¹Ê1›Â=ÿyŸa~Jf”5iÓíkåÇ{¬m+ÔJ•"g$Ä?ÊEa$)=µ gÐøâíóøÄÄßÈÀÇ»q ÿðä¯ Šúc2®q�k\ãú >ök=~äG&pâÄ“(ÿ„Z-†7öðÒKÿ7oަ™Üz$‡«‰ˆc§ŸnÄX|ñ&´1è Þ¸áÙ'<pùV¼OÌËh—6RÆ ? 4 ©µ+¬.‚Dèí.MÞ=›L}Ù�Ô·ú¸þ¥v»ahÐí÷'ä`Óµ!€Æ~¦ôhŸR¸ç&I¤�nYâ„ÙÅÇÍ¥3óC£”.%}~±Ìᕚ�Ƈ^Šqûjˆ½®AQˆõÕy�#Œ:=¢ŒHNÍ‘à@»gP̧Âeöð›o¯›”d÷yrÞA½²ßב”¾µ«a4mE‘Á/ü³+0ZgÛƒ÷Ÿs±ÛѸ±ãæR<šÛ²2ÿ˜%8×+"£Ïä­¨™‰¥�¡¼’ހ—¡à1äKƒ®ÆÖ®Î²#‚H£?0ØØQXÝT÷ÝW€hV]ä}Ž»« òÙð:’áļ@)Ïá8,kÚw;×)C£�#jšïr4kCþ¾g³.œ4mÛfsø.5ûݾÁn[c§£1IÅÀ�Õõ ‰ð¥`ÈûÀ^×àâÍg�9û@Ï»‰"*— Œ²b.½Žì—‰ÖȘÕ}ðön 0h­XªùvÏ`y=É‚/Ý¢tôTG‘Ö»‘nHâdŽo£A€œÙ4óÈØ„tƒ(:—oMŸ…ÝîÐ#7ˆÌ„XF*çÀÖžÂdMàøåÁÀ ´ù.û¶bIbດ S.p<÷”‹r�´ei(©›l†Qú^¾´ù~|bú¿æç�8Æ÷._ÁOýE„¡Fœ˜1׸Æ5®qý%ØzÔjßû½%<ñÄ'Q(T‹‹‹‹¿„^XÄÆFšfž¶æ�­Gb¤Û€­l%˜�Èùô¿ü­•‚Ss@`†«wbTJü�Í{À+ØÚU6<Žè5¥‰Úã„´œS'vëVðvQò÷ „aœ€Êo¶‡÷ÝŽ3šÈÝÕJ�žZ§>æÖ%ï3ÌN×<ïó¬Q¢äcÂbQlðä ÇN8©ùh”9¦ŸÉ�{ÀÎ¥mC�gûÚ^²wg%A¢h;„Û6·qcG!ïAB½"0?%a 5ïÝ��ï²CóRëÙ‚ÏP*0¼ÿœ7ÛÛ‰qÞ瘞“pëŸÿã¢p$¹ýD¡ÊrŒ>ÿz€ùI‰Ö^œ}�wµ})¥I#1Ý”p䨃å¯ÌL8Øi+ìu(}Ýu ò>Q†±ÁÚ–Bo)¦‰|lpó^Œ8!0ؘûR¼t̳G],®'˜j2�‘¨—‰æÀ€ž±BŽÀÅí•O§õtƒàŒX ç}†R‘C+¢b…1%·!�£(1¸|+‚ÔøKA¹6Ôt“¹‚”ô|Ç ½F)Z{ Ow,�b¼¦Ú¦ÕOOHs6½;oÓÑGÄø3M�K·chc 5mÿ>û;+¸öæ68gYØã3§]¬oÇH”}¿à?�"Õo4+Ö¾×§m–ï±,dSÆôí%ŸÕ2ÑõÛ‘Ç �¬A`ÅÊnf ®Ý�AÃÚnvæQ@úô)—oG”¨Î€Õm�ZIà‰c&ªâÀ �4I+› K jeN”A�¡Zæ(å¸}.H7u0)�32ÀHÑ)?wý}øÿãÀü�$ø«w/ã§'ÿ ºýÄÒÇIèã׸Æ5®¿è[øÉŸüqT*ÿ9„ÐØÞ¦4ó^x—/�¦™¶õý1*>Oû Ùí%?»Ñ’ÿDJ¦óCkW£YHÑK*E†µ-Ï£© yè°M­+iú=Y—8ÊÙŸê-ˆºtõN ­Éië‹Ú3wV“÷Ä Lw`0Ó䘨 (eðöõ{]½¯y˜³;äƒ06˜› ÍGΣ08)Iˆ Ž8Ñ(8ΞÏA ‘†™õÑ»;ÀÅ?ë¢�{QkO#Vä^µÑÚß$ÜM×Ö[ U†é¦D1O“uc€02h÷4–Öˆ¨@ z–eq�Å1k]\­rxMo`àÔ¢¾ÆÒbŒîe�Í–BÞcàœc�N`MÑóШ©+äcàSE²KéiXLÎ#š�66·……‚A»ùýèè��» :=²6þä•>ÊŽ(6ƒ›ÌGe2ŒžÓq(£ƒ¦ð6‹ÁcÙ„;NÁÉÀ@âè¬$Àá’ÂNÃ%Ðmk,­©Ì¥js‡BéZ{”Š=zÎÍ] dœŸØí 5)ˆ:sÔAÞ¦¦‡‘ÁÖ®‚R @?+˜�J�#ˆhÃQ¯ KYº¹6Ã&ÕHð¡û¸×5p¥Á;k ¾z±‹|Ž,Ÿ=‡Áhàó_ 0Ó¤@ÆÿÀ#M /äèÍ÷á÷x6ø�e€=ï3Ô�wcì¬EH4m¦8î¬Ä˜jˆ t†1¹…õƒ[ËÉ}ÏÝc�c‰ë0¼þz s{ ½Wr1êP0À>}É£€�M¬¦%jeº.‚[' „ij‚3ÜY%ŽüÁ,7ÇPò9¦Î¹Ðœaû�ÛË ‚žAÿz„0$Nÿ¥[1’Ä€1¢ ¬n)´H „óáY»}²?N¹k4S-ˆVÀt“Ù¥üС(ÝÂxÃüŒÄ…ke †Åeƒÿýÿ‘™ tú¾Ë0;!°¶§qO«á5â�4û$c€NWc¢6œ^ûžµv© #jös1C9ᘟ”ÈÂ9*µ»Ô\†ý¼ÙRXZO`@Àa´Ñe‡h$je½».½�É:5¿%«…a ¦}¢&°¹£põNŒz…>§\�(iç»ûóBOG7c²²^ßVPàŒ£; ?‚�{´9ó<†FUàÖr‚³GhMþnçZ8QhTˆf•n<| lV·’ì︹qó§ðÛ¿ñßCÅUôƒ�÷À@Ô)­�›K Ú½ýÉó_‹{¯ùùÌQ¯] ðìžè)”©¶$¦Àkf‚Üठð$íwÑ$!z]¬4b»™‰"ƒ 6À«›Æ?šý80= Ä1¾åæ;ø'3ÿ ¥Ã�{ô­5Nˆ6 ã׸Æ5®¿ÀcÿÆã£õðßñý(—?f®Þy'ÁíÛJ3OÁEòàcß×ï ŒÊ»x{º!žrfmpö˜‹r‘þÅQ)ÒýÆbŒ£3ʼn5ÉBu8=ô]àÈ1ù“Mxƒ!ÇÀ8¸öö¶_¸‹ !±¸1ŒFhCÒ¸¥<ä=6ôîØiô•"šUê•ZözÖ(Š)ì-Õ¢¬€ã×þéæV©(¦òV`Z¯ܹ—`k‹&ÖkÛjˆÔ–‚þ€³ �Ó *Å¡ké#™0�æ¦Y˜ª‘zò¨QâàÛ ýG¸–àÂû„Ô Ý[O ”A»g2*ZÖÀrÕò]Ò"ø.�’ɺÀə湠7Ðä0ÕÖ¨•(1z4+41¯–9*Êcð<;‰·átåGqB@$IDv°¹«!¥Æ…ë‚ÐÚÁZQðÖ®†²äð‡M´ÚtÚ�Y­üÿ±÷žA–�ç}çï}OºùöíÜ=90HI�ƒhQ”¨T’ ¯‚%K»¶eIޥêd«Ö»–å°e{k�¶ôÁÞÝZ9­eZ+‰’&‚ÈaLꙞî™Î}ó½'¼ï~xι}{$J’«îS5§Ãô¹çžsúù?Ï?8øž4ž™ðÞu¤aÎyй‡æ°ÛŠ¥ Ë„é&(IàÌ¥�jIì“£H¿äº0;‰÷wJEz£³O?xÂçʵ˜Ú¬Çž)‡ñJj¬à©Ëp±p2µ)ÎÜ©\'MGÏkG@Ÿ±ââV_Oè§Çº¼ÓîŠNby5¡ZR¾hk¶[’Í¢•FùrÞóŒW…VofÆ:=¹þ )°>ïÖ ]r¬,ƒ×Qî Ã×ÁŽh<Ûz\¹‹5nb¹ºäñÅßùïq܉Ծûz—±’ÞåÊön=<³ãîGríV²gÑ�\.P³ ¬% „Ò¸YM•1rvÛ;Ié™CX·oét-Û­„z£Ïæ{ù—'~ææ ùÄùWùÕÂoQzTŠšŽ{¬l¾ùzŸ­†�Q�jT£Õ5[!é/ý'Oþ8•ŠC¯g¹|YqîÜc|éKŸ§Ñ°H®GÖ{Û!à‘»u»¯nw<‡özçsÊ~õ….‡öxLTS­„+?(ŠS=°ÎåÄA_8Ó.TŠþd@µ`˜?R"*äÙxm•7Ÿ\¡×“¼n_~ÁgÙÓín_“T,TŸýs.qbi¶œdS÷á鬣¥ ²ÀÌxš>žÛÉñ=ÉÉOº‡ö¸»î£a�”9V¹ŽÐ•¢Hl‡»©É�늫Z£]£TƒGCµ¤©·Ì`ônT’ýnq%æè>�}³�ðÙØÎÎ�\¹@1v*ßÓÖÉ]þfƒv_tgž«X^K˜¨:ò<ˆvÒèÛ=K«m| ?TÊò=�äøÆÒÇøeûC03ý>~ñ5Þwý_P¼ÇÃs´VÄ¡%I¼¼|¶7 £Õ¨F5ªÿ*¶šïÿþ½|ðƒ¿Äôô½hmØÜ„sçVxå•ÿÈóÏgiæ7 ͇ÁÇðoÜx0r²?Nög¢ª©·dZ.f”–�j'•F9(,{gN| „;1 WWXÜÒl÷.ýÑ­4tíâ’dƒôúvàd“5Ï™�‚A¦Áü”C1›i˜¶ —¯Åƒ†qfÜ¡XД³,ޡɬëB>§8pÜ'8PBmtXY5t;†Ík ý:};°³Íš¤À—ð¸Ë×¢Çýíä?Õ�¬Øw–u*{YqÞQ($3dÿûþ›õßã‰ßz“SG‚�xùþí6S5‡(²\¸§¡†Ã6Ç7n ît|³“âø51æP* ’ èûíHÊXÙçØ~OĶi8àø˜¦°×Ålš-C/²\¼ÑíISÜéY.-Å+ç,ã•0=î°YO<Ç! §ÓÜ{ÄÁK×~$ e¼êÜt.—×öL;LÔ�•…Ö7È‚IßkßGl«šÄZ¶S ÀÅ¥„o<¶ˆˆXÜ÷àñg»¸èˆ�ejLÎ_µ¤yød0Ⱦñ]84—¯Çðj�Óßl™+›�½r¦«¢ØR*(ÊÉG¹¾žÐéÚqÈ2Öòá‡rılÙœôòüâÅóç¼OÂÌ4ôûüä«ü£{þ#�oAà30zˆyf9>öþü€ŒjT£Õ¨þo=|_†.¿ôKáØ±ÿ�jº]I3íµxì±—~­Çî\�a±¹¹p o;Ô-ÀGæ€åÿÈÇò½÷�?µºeNÎhmJ=Ä�†É9—‰½ûYxù"qbÅFÓQ”ï«på¥&×7êô#ùÅÛl c1mÔ-D¥·jð*E±Ì¬¦¹:k”CiÜ´V” Љª¸Öx^ê^äÂØ”Kq®HÙ„¸3.‘v¨¿Ôbé¥uzáŽk‹eg«+ÍX/d(˜*EÍF=!(:]K5¥&Ýê SÊX.'ŽÉšC%�|gM¨ç@!¯ÙìÚinJ§¿õ/þ'Ö¶ ÄVñÆÅ6÷õpÅ[—#Î^Žn¢ÿÜ’òu‡Í‹:]ËDu‡—Oé(:vZƒ±Š~^3VVì?æá'ä5±õ«1Ë/ôRmlÖE�}ùšP‚îtŒÅ¼âúºLðm¸÷°ÏDUÎUK[)j¶­F±eߌËýÇ| 9ÑËø©Ms–’+)<%µ�°r)beMšvÇ1¬o'tB‹ãŠÙ÷ãÍ‹o†ÌNHã¹û}UwuN³÷½”—­`¹¨¸ç�G©¨Èûh™im\ cï£Û}”µ'þ5­–€ ÇUƒÍT£mhuEgpv!ºYg¢ÞÙƒåø�KKâ5\Ml IDATî47å0^‘AB.¥dY ¹‰Ý]‡7Þèñæ›ÿŒgŸ½ÎŽÃ• ÌûO¹9×Áôú˜—ÏÅ-cÐéç�¡Ÿ“ýJUßóˆì�q½këüÒ#÷‡§Æ�TµTÐä|e|O›Û�¯ýÅň'ž_¢¾Òe³a9¶ßÅq¿ó®p|¿Ç¹+Æ2b +u‡30ô¡(±ìŸ•im± Z­‰×ŒÅšÉ1ÍÔ¸ƒŸw¨äaïÃE(ç鿾ÅåÅ.×:1í—ºôú6µv�éGö¦DïzJ¯r4)ÐPì�qÈk=ú‘a«n¹°±gJµ•f�f¾g:£Ú¤YÙ&�9¡ääNÐ×CÞ|¥Çf˜ày–Vײ´^š˜µ”‹Šož™“mÎ-OÙ70;M“v°UŠš=SÂýϬ[=W€ö©±rµÎÚzŒ«¥á\Û2¬]KÐÖJ*z_D·o]‰š™L,|Óûz@´Îei5á÷̦ô¸Œ.•$’÷1<9>~ÀÛo™û“'�f¥¬pŠš¸aØj¶{†^(V³ýP‚ O_ ™wˆ�¸R5;Y@¡ä6¾¢VÖ\\Šét¾'Ûiüá§4¿^(`s:¥X•‹©5n°CUó\E�ŠãÒù7ë¬m~…nSŒ mË}G=ZË•ë=âX¾îlfðN*Ší�nC¶ƒ%Ñd÷“5D¹Ÿ&Æœ4÷D¥ö²†VÂH@G/”káå³áàß¿Õ1g×@¹¨yð¸ÏëB´–€@Ù�ˆöX%ÝÈh…16¥„%4;b4qîJÄ‘½3ã²UÊ^G�¦½gÛwˆ¦€(‘k4ÛÐøžä Ä ”fžu)ºÕlMñÓ?Xùo÷θ𥳐ž«âlBÝhÙ?SÌëy¯ÏOªÇŠyçÏLŽ9ï+k yí ‡$•É~¾Àž½üù£˜h� _^c½¾I?f .µVœ”œÔ­§ZÒ|ýÅ.Çöûoo�;ôcsKyÍxE6ù@µ:us*å{?ð�l]zŽ7_Kˆ ¾«xîé½~›vW~Ñ_\Šoš^jõöͲI$m~Ê¥V½‹›ºSE‰ˆ¤3ýÀÉC¾h\Äæu\SÈk¦'âÙ€þB�å;´;B³iww&óÙñaᲂ½3ÛM¡•¹È„v¬$@ Œ,)Y7F’[+›ŒÍzÂá=ž¤�†´ÞÎ1MÉW¼zºO[âXñÅoôX^û²L†cXZ‹˜Ÿ2¸Žâ•·Â›\‘î¶ñþ’^hS)ô¯|n'e<—“æ½fÓzM!'`yXOÑY‹Y»ÑO·ÍŽl³Î] éöR0uS‚· û쎹ç°Çâõ•Zãî›qSר4yÛX¦ÆE‡rörÌÆõ„{�øšw©”äøsÁŽÛsÁOi?y_£0}Éqéöäþ[ÝŒiv,Ž#ni5abLnùLÐ?9¦éô,…Ü·öPIÒÞÖ÷„µoÖe< ,¦š­¥Õd'œð«.¿ÿdóµûî-ßÿø—Öí¡½ž h8}1bnÂ!Œ-¯� º‰ì«z�b^sâ ÇÒZÌþYwà3 šYQû±¹{N°õÂÂ(NéQpe%Qv–·¹+!I’j �ðÛ;geå9tÇÊš³.cšRºeSé½ÈdÜX8²7¥€y ×ÛIGÏçù’F[èõ$ b};¡×7ƒ@½3#Œ‘éwœÀê¦lyÂÈÒîXmÑ*seÒ,­FƒÄð~h)²Q¹íyWðÜé.ï?•g¢¢)—ô ™Ïù;š£Ád¿êðÆ%9qbY½²ùVtÿ—^Û°Z+ÞZˆhv,'¸ll®¤ï–=î08œs¨åÚÍè`�/Í~b@k‹5šRÞâhÑx9ZôYâx§”ÈÒ�àÍK!Æ }²Ú·=îéqI`_^OAB3s8ºße¬œÒÂÛ?¹õÃü`ò=01�?uñEþñƒ¿ƒRvG¢åBz½8’9“$2¹¶!& #2ªQ�jT£ú“»ÓÌögæ=ïùN*•GP Ö×W®œá‹_|‰·Þz�ÝiæÃâò0ß÷ÁÄþY÷èxUÛR^×€XÂH¡”&IàZ'¶“UË̸GùH�\à2SèQÏï¥}�—?s‘vÇ&–­æQ,ŽF'~ø8NJñèæ&æ&}@´› qÀIŒa¬ì¤v£"BN˜™�FtØÈÓÒ,׎æ‚<“n�îx…êÕo|­�çZ>ûõ…œÆq!0ÒhüáW:ÜÌ'Ê‚ËÞa:¤â‚ž:ì¾2ªÊì¬�ã;,_î' èc÷äèmÆ\úÜ–hBËfC63——Eðªn8·Ý )i|æ&]æ¦%ùÚ÷¤Y‹ ”ú"²õܘR!uË é Ò-TeÌÁ›Ôú ¦]¢žaãBHýlH? R[ßNXÙHÈùŠF[±QyFó=IµÏ¬GµPbï°ÅÊÀ†çJê5ˆ+Y¥¤[ƒ �•Dðk­ÅZŵ•�ßýwO㸽PˆaŸ ¨7 o]ŽXÙHh´oL–WïÈ•*+‹XÏMÊä=Ûùž¤r'Fìj­5„U‡ë ¼? —Ó¸øZ‘8v 뫉h!Ò©ûV#!ŠáÂÕHÒÍo8®,À0(Ö·Üôºâºö�ûqzKõ0Í®áÒR„ëHÆJfµ\Ì �™ª9üÜW(æÅL`p/ t2jWØd·'˜^hq›ol%¶˜×¸¤)ðž#dºæ ÞÇw£º}¹Ç–ñ)GŽ-Í�ɶcãšÒ\�Æâ�†!r-nj‹;3餖ßb=½º™Ç¼¸Q¿ÙìnAS­âpm]roú¡¢VÑœ÷˜ÓZ˜ç„|sûù{û>!à£ÝæØËÏóÏ¿ëÿE+³ë:»¶.÷gv/ÅFì“m3#2ªQ�jT£ú“Ýz|ß÷åùà�09ùk‹Ý.,/‡<õÔUΞý×CiæêÆ�Ç1ÇöûGK�ÏùÒäùž"Ÿ×hRácJqÊù†Gþ›�Qêžãì«uVÚp¶Þ£ÙÙ’©l×rùzŒJ›òlƒp»€½=Ó.{¦J•Nð!Œ R2ll',®ZªE±K¦e–žA^ssP>5ƒêÅ\m�•¥—[­v›zS(K’@-֖Ûk….S.ê;6ǃ4·»–jI3UÓ©u¯L�·)UŦc³šOÿ‡­FL³cøàý9Pг_oã{ŠsW"z¡h†AÇ�ih»iTIc3Žˆîó;yI"ZiÀ\f'&ÇDäêç•‚¦z؃‚¦s6dãzÂZËÐ=Òíú¡4l+›É.áxvœ×דÔ"Vh\żl`2W¨vϰÕ0Ò@¦Ç›9f96ꆃs"$®4Å‚$�EÉSx¾¢(J‹[ [¯÷éÇàÅ–¯}³‹veú�ó¡Ý…/<ÓåäA�ó‹q:5WïhÜî}¿p5âà¼K1·cÑê{ŠbAãŠNË`,DiP]® ˜œph6 õFº‰Ii`ýÈrúB4�Ü©Þ;ã’ -ƒ1Š=3ó.•’4¼™#Y­/�Åë1I"4¤rQ66…Í÷P“<r9èG±èbšý„~(ïy¯/º#×5X£ù£¯u¨U\Ç =>œªiÙÀäd`à¼ÃˆŽìÚ¨· å¢fºæP.ª›rDÎ_‰v,·{\®tÿ*_ùò¯ö¡Ù1œ8ࡵ\¿ÖÀëÂ4¯æîÎõÝÔñŸ¦Ë©Ãs“éu<�h¾±õ#ü•ÊÇa¬í6ßõÚsüœóï‰ã—®ìYùü™�Oøx®˜„i–Èú¶Ùõ3GdT£Õ¨FõÇ<†s=ŸüdŽ�|ä33³¥Öׯ¿qþüÿÆÓOgbñÌ©jxãqcˆ ¹@›,íYiÙ~{ïwsþÌ\xc�=Ó®„óù.¿û<Îô„O7”p°$�µ­s#·[ݾ™—°/qˆ¯8ä5p- ãTH¬$ìKr$v¬qÇ']j÷Nà;wiôÊ4Ö68÷Ÿ¯Ðé[ú1,­ íjcÛÐÏz Þ6 Kc^Ì+Î{øžp¯‹yᯮZmC!¯+ ï~*mˆòÁNJ»ç@ÞWÌôyõBDo=&N,×6 ¿ÿÏ6ñ}E”Xz}øÒs]î=äñÚùd‡Ru»,Ô§ôÙ‡//‡|à�Å|f'ª<�£-aê '">p�ÏÌÁ€ÜFD3§é7 ŸëÑéZú±e«iØn¤báµd ƾ�~c߬˙ ù@±oÆenÊ•Än7³<–sy9¦Ó3LTp “cÂá—€=-à0k„}EyÌÁw𛆞«èw Ë—#¢”﹆NV6Eøìh¡¢åèŠs‹óSî;7‚Ž$‘ ßWÔ*JWÌ+®®îXã:ÔŽçÕ‹âKý¥öÁzðÖÅÑŠÍí„7·(%Æ™Æ`u3¹%8¿Ûšª9\]ésp>`~2ÕkäSG0G6yßâ¹Ò®–òŠÙIg t÷R±{>§S1À�®ec[Ž3ŠáÊõ‘þʆ¼æµ-¹ ïõ8¿á:Z[YRº¦Ù– ÃVÓ0=îà …hoᆰQOÈrŽ�µÌŽ»ÜwtG2L tݪàÕ•˜Øˆ¡ÄKOtøêóÿùüÄàß}æµ>s“——ão++ä¶i%×ÜGß“C;H˜ezÿ‚˜§·~„ŸÏ}7ÔjÐjñ3çŸã¯ü4[!�}=æÇ¾»88¡öå|¡�Z+ôÉÌ}ÏuGdT£Õ¨Fõ'µõͯþêOpð࣠ÝnÂâ¢âÍ7ãK_ú�ìäz˜!à‘��a ŒÁƉ—“DšññÏ¿€1�n³¯õ9~Ð%ïkÎ]µ,\ïƒâÖââ·y% ¡ M¥…L·‘ÇQbç+:](MÌOì=ñØ$qoƒÅ§ÖÙjYú}C«Ý Šáòµ˜VÇ ~‘NÜÐÏß3-VªG÷‰Ð:H§�ýPr–Ö¶ê óS.¾JKèÛÑ}¥‚Pƒ/KCW‹¯ê2^„‘‰ãÐ}¥É¸¶œï<×áÚj$‰mš¤-¿ø?ÿt�ïzo×M`{çI²ºÅߺ}É(¦âìL{à¹0=å’Ë)._‰ˆãÝM~ˆæô³M¶ê�äÒRLb¥¡½ÕTþVÇÖîZî;ê3Sñª›6GQdEx(.X+Á…e½8²ÆÓ…jI3ùÞ<:(à/5Xn*Ö1�Ï6iÞK«¢ãPJÄöa´“Œî»ŠJQ±p-枃þ�Æ�Õé¦j;®?•4U>;ÆëëIª‹°½üág]Î<Û¡Rt˜¨Ê¹7žz±‡±’&Þ í-ÏáÝÊ(²03.”ŸrQ¨@â2^$‰íq* Î‚ìŠyMyÚA�iìõ„F(óÎrL/4ô#Xß½‰±C Þéÿ,®†Îç4ë[ �o¹¾ž0Qu˜¬9Þ㢵ÐXšmÃfÃP-îîü¯¯'ÌN:LŒ‰Yµ¬ÔØ”kÉf¨htlY_7ôØ0Rk8}>�Ê®“BNsæRĉþÀêݪ͆¡R½Aªè¥ÇZ,hª%ÅvÃb1x)Íçʵ˜{y¢WOÒSqþ¥eqõ»LIÏêð^�kë �fB’]jÏŒC­ä à@t•’¢˜/ÒêH¦Lí†í—ïé�5®›%/uÇ#“Ò’D‹Ôht*Ön´MšûaPj‡V«8¬m%„‘Ð9¿ÐF6µ;VTËžðwÀ´§Xß’Gë“[?ƧªƒjšM~êì7ø‡~†$$²Q7\[‹Ù?çpa1èÇG€m (ìõ-¹@�ȨF5ªQ�ê�iëš©)�¿ø?Ìôô§(•,�ŽaqÑðÒK/òÙÏþ[Ddþv[�að‘ ÿÌ7/†«UsÊWJ Bö´:–ïA¥(Ú†rAßòˆo½ÐRJuA ˜¬fÀC4[C�„Z)꽤»Z⯿Ô,ÏMº‚Ž´âÕ[xn›(¶ll›Ü‹î~󒤎LS5‡jYL™C§`~ÚåÈ>�À• o倇ŸÏ1æFÄã%¢vŸëßl³ÕhÑK7'Ý”"qñj¼‹Vsm]@�Î EE)Ѿì�qétåõ¸®4½ÃÕíÛ�‘—Ú¬V²iü Å[Ü�J³.~Ñá>eùÂã-¢X\ÂþÃná{OṊíV¹ňãû]úÑîÀ»o·ûP«c¨”4ÓãNP§Óé®PQbcé(�IÌ Gbÿœ‹¿×#n¶–bZç¸5;b?Å–³ ñMNd·Hù@ÂÚ¶†¹I—s•’•ÅLlU7ë ¯_™w #á=§Žz»‡'ç6ç+ü4 Î׹ЍiX½‰«[ÓÐê™Ì;Š«k S5'Ý4IóóéW±ao0±ït §Žú|íEIN¿ñz}7ªRTL�»T bç< Vºò´‰nzUÙ8eá ®†^ö¦Ú“ìÚh¶% Fn|d i~Ê%ðV· Nš– XßJ80':™BNÂ5c#ÔÃõí„—Ïö¹ÿh0c½ÐŠ[QRÓ ©%¸àp]y¯a ¯F?Éÿ8õg R�FƒO¾üu~åý@«“ ô½¾v4Ú†'ŸïñÓŸ,a-œ¾qꈟZ=+’DÎÉfÝÜ$ä�Q�jT£Õ»½õ�5 çïüåò/P­Ft:°°àpöìüÞïeiæ»s=nµñØåx•þ¹ñgë0LþQÎWÿò༛ll'kyï½ÂÕWJ¨ûf + ××&k‰±LT5Ýžaÿœ—fq¤Ö“.xZ¸ÿ³ä ʇ(×è4stúóÉ2/¿ÖÇu ­Ž4EŽ7mÜž;Ýçþ£þŽ˜ýnäôƒ+ {¦]<×R)J32­vÒbþä8~9Çåç—ˆbR Y¸Ü5Ÿ[§Õ Ì­¦¡Þ”ééµ�!Qvêðvv®ó“G÷yŒW…«ŸÑآȒÏISsi9â�c¥ÔMkRç(ªeMþXNœ› íÒX Ù|¬I7¥Ò,®Äıe£nh¦iÍÍŽè"ä5‹K•ëÈV&Iä=¼ÐÈ®¬nßîr"«UôÇB1O IDATÀºÕ÷d¶,¯‹¨Þ¤zŠ/ö¯~u›8KÞÜ€µ<ñÍ{¦–V“[ ƒïF$®nhÚãØ2?%ú“Rê@ä» ¥!IŽc±hÂH„Õßó�<…¼Â¯j—këÂíwE·oðÅÉTï‚’æs};¡Ó·zÈûQÈ @t]q3«oïÃÂñ‚ÆQ k,ýØáâbL÷t‡û�Àmæ& �º»&›ˆgž I®‰4à…œÂ+jº ƒµÄ’š>6¦™>êo'Ô×’Ô75§çìµóá@Û’�Ú;m ÊEÍùňF[q}=æ½÷L�;”òÏ#µ@†É1‡õí„×χÔ*š}³.GöJsœO-p³¼“ÁÖË¡¶ã)â¾4°ý¾Ð’:=¡‚¹ŽehwÌ@oä)å‚f½nÈç¬ÜÏßb%‰l‘®\�9¼×“M]šÓ’Ï)êM3Øð( ¹¢æåº½plþP÷Å–j÷RAµg/G„ÙF „›„úß¡Z+Ù#ú‘å½÷LÕô4^š�n²Ü ¸ÌLºø.»ÒÒ½t`¡´hQºaF¡ÚINï… /õœO� Je¨×ùÐs_å�þ.­¶¥›R=Ūܰ¾%ŽpGöy$‰¥Þ²üÖ´˜Ó¼µ1vŸ&Œ �¶/�@D'Õ8ZQ=XU_?½õêû÷yô–b›åŽô{–—žî�Ï)úáNvf0˜ò¿ÃÆ÷�c×ÖÞs2`nÊe,¥ïd›Ž8±ä±SµÖçžÃÞ`Û•]¯ž+VÉAQ£’ Öõ-³#ÂŽÄbúÚzL«+i}[²X–Ö&«z@sÔÊŠ³ s“.Ö ˆ9¶ß{[]еÐí¦Ç]¹6Êš‡NúäƒÔ.vÈ©jªæpîJ4pk5 o¼Ò;üÍÏ4PJc£e9¶ß%I,ßxµGó-�ï;•£avR@m°¹ ›ïí$“G±HæâXÎÛ=G´l]цˆ\4a:ÒMM·/rë[ �ó3ü›{>¥loó/}…¿}ê1öN;D±åêjÂ꺄Nn5eh°Ö8Ù• ÐéÁXÉarÜáâRD‰þg«anySŒÈ¨F5ªQ�ê[»ÓÌ?õ©‡9qâCT*�`-¬®*ÎðØc/qáÂiv§™ß |Ü:ìí~®'ÍÊ3Gä½Ó³‰VìJFö]…£ I3’‹¥Ù¿¼©ùÙGËtËs„QÄê« \[Y¥A§g´•K©ÿþMœí¡¿Wв¹8¼W¶.Þ�6£Ñ6,¯Š^ \ØáÀg4Ñs¤î9©SQq…œïPžèÓ³ãÄõ .?±ÂfCè/¾gøìó½�°ÓÕŠÀ¡çkçBæ&Ý»s„jœ2`V)j’Ä2Ys¨Uô`Úêh:ž§ØóàP…:ÏüÞkTKŽA ùí¹ÊûOô#á}÷CK·o¸|mg[ nœ¿ÍqîŸs9ºßc¢".ON~"ô¸,„î༻“A�6”ùœ"7éà—4 á¸K²±q¦O»+Ô™~(´¯FËpu5arL6Z« ½(³H•FØQ ¥% ˜ŠÔ-;ÏôE„‘€˜b^&г“¢ß(Ô®ônß�Ó -Ö=fk»eÏ¿Ø{àõ¯u­¤Ì>òP@ÃS¯ôwÀÛ·)ÂÞÙ<ªåôÚ,¨4“E§Y⢤µ\+�–aÿQŸ\N€¼ç@¢a×°¶"éòaliudSÇ ô7‚â0ØùàqŸóW"ü®Åq,qšU⹊¿'—}Ñ\¬m&iþ#ÖÎî³^$Ié•ÝÛ™a:˜Ÿ|�^Û¤¯K6S°´±|%¢˜×je¥¯œ +éT;ôî>`[ /Ü;ã Õp†H |-¡·éÐí[âDżÑe%„±P$3§°^( ºÕ‘-O­¢YXVüò柅O|ŠEØÞæ£ß|’¿qô÷%ßÈ×x®bªÛ Ã7_ï³Õ4ÌN:éu�m[Å<,®ÆLÔ43ãQb)¥Ï»ó‹Ñ€ 6 £Õ¨F5ªwgëñè£yÞ÷¾£LMýù¼C§‹‹!_ûÚâ iæÃÃíaÚ•ú˜e·À\ÝZ &+ÊùÐ{üâXY;…¼û‹罃U]ÌŠ$Q�„ëÀþ=Å{f¹ôÕ%ºý�f²ß�yñÅ6íÆ›Ba‰,g"Ñdbâ[$¡ßx"Œ�(‚ûŽzŒWò�L¯-B1 ÒŒ�kë ÷õwiL|_ä4ùœËܽz|eël¾ÔázòðZH§Ó4Eo.„Ä1šwi÷ ÚI7J€A¹ ¹p5bf•7HÝún\¯¯ÇÌO»iZóPb{š(ï{ŠK«1ÖX¬aé‹_½ÀéÅ«K}Lžð1F&ª_y¡7 k0,¸}"ñ¬9]ß6¼÷Þ€Z9m"ƒëá8±h%˜Á³K�STÇ4ÎQÕµô.†l/Ǭ¶ ½^ ~ërD·o\úìx6¶  òyÍêVD>§qµˆn§ÆλhEšëayý\Ÿ{�è”W¯�†ùúF¡=.{§*ÅÔ®5͹\ɱðS3�RÍA�9L¬Æ|ãùý@¶CÿùßÕñ\eÝ4ذRT|á]Žîó¾%zÏ­*Ëq44Ú–ƒóNÊå—ë4ð¡XР¡Ó¶k< ‹œ˜r™¨94[†zWgv/…‘å•·Bl*.ÏÄùo×°k%×�dsÈ9=²×crL„ìž«R:˜e²ªYÛNxóRÄô¸Ãô¸\Õ¢€ÕœÏŽðÚÝq^“÷TÜòz}C?Ýʈ“™‘燂ǾÞI51’”ž ó§Æ4�¶¥ZúöÎ}6YYÝw¾ÙI‡½3nJ “!Ææ¶J˜�41SÃùiÔÙßä‰ÇúÜܤÜ?ûZŸ=Óýôµtz†vºÛj¾ÿC…ÁõÆ9þúÂ�À'¾ ØÞæGŸû"¿rêó€PÕäëvœ¬öÏ;Œµ$ÄRö½šBÀ õ¼T€¥•„#{=¡B:ò èM»¬n&£ ȨF5ªQ�ê[»ÓÌ}4LJ?üO˜œÜ$¬¬(^}5â­·þ Ï<³Ên‡+;4bÀûè{‚ËåôÚžé~>ýšL”ž¤ß— ÎÓß^Î÷ÿ/¿Pž™ª9¾µ|rbL›RA›œ¯l–Éa­e³a1V¶W¶ ôwÞ¢ ©å}«óÊë ­®•ìusÃþvt4»†“�$ðܴÉCÕ¢pð•‚(�vÏ0VÐ71æxŠJI1Quxøžaš�œ×ÀSKwÒÁ7–$†^bÙ^Kh-DÒ0vMpgYÛN˜sÐŽ4Ÿy_(d«› 3ηd‹›Õ¹+!G÷û8ÚR«:LT:éc,ôû­¥éõ=Eí¡ƒöúâ•ë ç{sÅœP€#òJÜ¿Z`7Ò¼’w*¾®C{\®\‹i´ ž˜�tnN®#$NH3'äQtÏ!OÓ €#ð,Y ÆZâX,ˆû©"Œ, K1‰‘4󌚴±-×Õõ�G»hmtÇ| IŒáÚz"aœJ6{¦ï®­®· ã±N.4'z ò÷\j¥ì9¶�‰RSKbkku>ûGÿ�úª�V°ð•í®å�cÞx4Ú’‰rÿ1ŸBÎrx�—Òæä ¼Ù ø©åµ÷òyØÞæßøÿó÷|‰Ï?ÝåÁã>®+NVq,[Âí¦Pä&kI"Á©3ÖÅÑÑù^ê@!§è§‹®(–köâR´+Ãd@F5ªQ�jTï|ëšßø�ŸdÏžK· pæÌñøã_¤Ù„�\�][�Ÿþ¾üÔ¾9ÿoOÕã88qŒ}ä¾àÑóW"½¸ýÓ§^ÏfÛ�_üñÒÞjYç¬U¿vpÞMªEí Z¥y ‘—N† SErA�ù£´Ì#<ùÛ�FÒt|å©–Ð-Nò¥å�b!G£m¨·ÓªïÐ(ߦI6\—�鼟M�IK«+ƒÌ2×9˜çÈ©#°¶Àâ+k4;FÒÐ;Û2¥¬qVbÇ~„ö²k¤Dì'pü€ËäX¶y�Ø•f»aYXŽßW-+&ÇÊÙ†cHŒ�Ë+üŠÐÇÊû=¢ @²Zgít�V[„Á­®^?÷TG‚ÓÒ©kà‰ûÑâJ¼«{;Ð1üù(–sÔì蘬i±ûõ$ÃÀÉh8L½g]3ÍÖSÏÑéI‚µë*>ûM>òPŽf[šËvÏòÆ¥h ÄÎêF;Ð;o¥$Çptoê–×ø®|qœ0pª²Xö͸Ô*NH§ͯWÔä<ÈW’ŠÆ.Çl/Êöe˜³²™°´‹=®‘ëºÛ®þ0Õ¥�Ó¬o'¬o'Œ•âDã;NÚÓe”ïŠ+Ñì¤Ã‘)ÔN.KXéÀëdh�4½ÿßÿuV­¬G³Æ@JÀçýG=6†ÇŸíîLna1û-m¬ˆâËE%¡�M)5pÝ €XGÔÑýH=ï=ì§.Vrþ”:åvSèvQ$"ìNWÀÇkç˜ܚ†:"¸7ê­×qÛ™¥Õ˜rQs`N²c”ºÓvÓ 6J™n¦ÊûF×S„cû½ ‡ìq½›\G+–åߎ|EèX®_ês}Ñ%�‚!ù9ϼÚg¢êð3?X|lfïM£[à}Ïþ(Í÷?"›�ÍM~öå/ð÷¿ï Œ�jY§«*}ÆÈ5xu%aÞé ‡Ø�K•šbh|×0{ü$ãsuÖ—›ÄqjFàʀĎ6 £Õ¨F5ªoqë¡ùÔ§ösâÄ_¢Z½k ++ðæ›×yþùOóâ‹ço±õØçþÅ)L?x"ÿ«ãUG¾r´‚8¶ªÓ·ÎxÅavÂý÷ÎÞë1QÕž:Y.j›” |åfŽA�¯ÙsÂ¥°ï~\§‹Y¹ÆÒZÀ…—"¶Ö¾LbTš'!bRß“fÙsZ)^?2;áÜ6üOÝ¡1J ƒ4ôjÊ-ou Ú‘†Àwû?t§õ�¼ñÜ¿E+qŠrXz¡I÷Ü«ôBØn®­IFH½i„Žñv\þ¡�mn'œ:â1?åŠ8ÛM–« ð]ƒRÛ �Üìš{ž$]OòÑÓ¼¸Cc9¡Ù5¬?Ó¦Ù–Äö^d9ŸŠrÃв²!Mp·geRë*\W´Ÿy²ËÏþ@iÇiéÎf[\]�™›�`Å|µª3°ð †¬P—×d:m,X«øüc®-¶V;4;òßÔ'‰…‚Ro’!úœ½Å¼]ècö×fÛðÀqŸ±dfx�ºª¹=„Þi—rêbUwÐÓnÃÐéº]Ëö¥(Mšg@Ë&ð­ŽÝõ~_I�ÁÆ+šVÛxÎ |oªæ0]óp]•&'l5 Õ²¾©ñ_ÝL˜Ÿ’àÊR^2!²pHßWøNv=(Ñ.•5ÚÀvKôýXÑÙLX\q´R™ýs³cxê•Ó5÷¦æýݨ‹WC|O³gÆ#?¥ú˜°–^_a­! …œ¸ˆÕ*ZDÖ¡ÜS’:.çûÍKIØîÚÛßc7Ô̄ùÅ(¥ujmÃþ9—Ù qÑó=ÙŠ$‰ÿͺáüb„£UšÅ!šš øïh:RѾ³ãŠ(Þ1iˆ"ÃvÓ ”Âu%ý?}¡ÍXIãh uÙMÕ®­Ç<ýr—O|Gá–Û±f·ÈÏ¿ògi>ò°l>66øsÏ?Æ?þäShO½Ú£\ÔƒcKÉ4iµ cåÝ'k~ÊanÒáìBÄf]€×Gòøè�Ma/÷aA¾V‰ —ºXFdT£Õ¨Fõö[�|^sò¤ÇOýÔ‡˜˜ø« ’f¾°`xá…[¥™ï€ù¹*ì{ðDþ׿¦¤Ñ”I²"‰-¹�ŒZ¡ËEu|~Ê•&ÔÁøn—±±"ù}(EÆ'®Ó´ï!©¿ÀùÇ_ Ñ2„±b³±N õhy-afÜÁsqª,‰bÑ ” Bͺ]“œed9å‚&±–©1g`•š5pž†À‡VWÑ E;ÒîÁoþ¯¯Ðí?C/,°¶•ðч¬…—ÞŒ†Ö»­[Õ;ØÀˆ˜Ùaj,µ˜Mµ*m„$]¥Í×ü¤CiÌÁ�ªPöûèªKßô.n±vf•nT·±�%°´ÓîØ›hi½Ô6vµc(äañzÈ‘}‡ö¸üÊŸ¯Ò åßÐZÀÃð÷†‘¥TиTKšSG|ŠùÌ9Õĸ’áÏzB_ `ó•>ÝÕ(uîIxó…ó8ÎyX \Ô¬o›�žK§á�“�<ñ^ûü§ÚÇQ¬o–Vcâ„AjüfC@þÝœï;mc9pæ¢daÝç³gÆ¡V–ÀB?M?O ôCÙ‚j­˜ßý¬ð]ÙxéFÀM¸)ú›(6D©KÕÚ–äö¬n&¸Ž¢×W䱤Þnt¦(9o¹@1=îÐêZ¾ðt‡Ãû<¬�ã<,°Þ¨ò/ü([ïÙ¿ôúgù{?øµÁùh¶ UWl¬•"LDľÕ4” 7{8+÷òèö-$Oµ¬ÙúÊK„‰ ,¢˜Ajz¯oS�5 £Õ¨F5ª»Ùz”JšŸø‰"?ü©ÕöbŒeu^y¥Ï™3ÿ;Ï>{£ÖcØÅ*L­¤ìɃÁG&k•‚&Ÿþâ–fZlO�QD±fz\3;W¤˜ 8toˆùÿÙ{Ó`ÉÎó¾ï÷¾gë½ï¾Ï>`@€ �¤H‰”ãX¥%Rɶ$вÌ8¶b»Rq*)ɱªDzˉ-ÇqUÊþ`'‘­H‘-Š‹(›”HB¢!.@b –Ù—»o}{ï³½o><çô½w03X?˜R?USŽì{úôÛÝÏóü·é¿�c>ÇÚ³[,·š\z¡A§óU¢H]®®‰KUÛ¡¨S+ØjHH\šJ€ÛÌ„löŒîþnÓì£":KpvàüÅ�œ-29&Âáji¿õ¸YPa¥Û A›t–¡Ô]¨wY#¿ßˆÓÔì„ñ9å‚>0,)–fáòr<\_ù·WÙÚk²·=ÀA7ÏóØØ‘3G†RƉ}Û÷ûNå¹jØhO�‹ûUnóìy2|#%ZÒT†§{Žz2Œggž'ÔÌA½Pó8±™\ºÓìš¡ËØÁÚìÈGë‰�‹7å=«µF!ï#�- V·Rj%E³+ù<¯^�¸±=ÎïùI?(ÃÇö6?ñägù{?õìðþƒäÐd¦V1L2_ÛN¨”nïøe�ÇîHŒØŠçåI"ç¾Z:}Ëî^Šë)¦ÆôhÕ¨F5ªQÝõÐ ŠÁÀðË¿ü_P«ý5*•˜n®\qyõÕ'øüç?Íá4óƒCÇÁ �ôûõ«�¯?V Tâg6´E_Q-¦4:ÆÚ,lOaR8óèIš½ n¬>ÅÖ“—^X¦Ê605â0dn“2|«[Õ nþl–á茢:LÔ «[ [�”“Kކéq‡Gî dàÈÓÐ(`òž*ní•â�V‘^˜°üõ-vvÖXÞ4Ä©w_¿.›R¡GÈã|5tHz+ƒÆð‡ÛsEÈée)ÓÕ’‘ÅW¨ú¬£6 úR±ëž¾öLÇÎM¹Ò&)OÿÛkø¾C”Hß’Š­Þ)¸õ¿�U5'D{R.êac’XJ�4Z á§ßsÌ ±}Gš¥Ú„ƒ»T @ºÊn¤ÙÛi¿Ö”`·Ørc-!56Û‚ÃnK³¶•ÐX ¾è\WD¯Qb¹|3æôQï­Ý[ Ù5ÃŒ…‚¯˜¨g9,A®�‘çêj’Ñ¿¤Élì~ç·–iîvé õŠæ�Ó>©±¼øzÄ�uùýw#Â>Xížáø‚ËDÝ¡VQ™E^scÀóì°é½¶–ðÈ}>¾§(—^ÍÁÓ`cKh�”ôõ„(ƒ‚Õì~F±eõ6)é ÏqlèôÀs5Ú^›R03ádVÐ"Ü6™ãU¹xx[ÞêŠð².𕹩,ñ=C—"~–4 eáÕ+‘\¯'ÖΗ.¯’$«C‡¬Ý¦á¥‹1Å@ÝÒ´¿·uc=á¾ãþ�Âøç(HR…R¢™)4ƒÐ2YwHMæ´‰ÃVï'°__KHS±Wn÷ì[ÒÎÈ}Ô\¸‘dŠ&§™u˜Ïß“r·:ÓüFðÓ\ºïAØÜæo<ÿYþ—ŸúÎ[Ü• y¿™þÃI>„–ZEßÕð ÝÀ;MdxÉ5RýP >¶vêUM’ z3^Ó£dT£Õ¨FƒÇ-¨Gžfþ ¿0ÁÄÄ¿`~Þ%Mc66çÏL3/dÊ=8lðÆ<Š�2¾‡Í)ZA¥æ1þøÓÿ�_e³1 Š ZÃÅå„òW_¦Û7$1¼~Ã#IBáòß.eø }§oX˜v92çR«(OgM›l=”r™Ÿr8±äeá‚&”«~yž©Éþ±S%\9Ïʳ’†>4èô q ®ÇD‰=4ôˆUVؾ§¯9|ç•|°ˆ¾ÛvØîÛ�vûâª3^ÓTJŠR :�\Ü|ü˜Ë¥+1ÆztîÅÐ>÷Zt…mw ›»}þì ¤)|ë\4¼_9 ÛÑo…Q ^¹ó±Ç Œ×IF/d Òt8Z´a¤¯‰6«:”ŠšÒ½½ê IDAT’Cؽ­‹}6º’ˆÝXúK^¾¿!Q ÓžNÏP.ÊÕõ–‰šæ{ °HóÙH«èC™Q,¯ƒR2¬,N;œ9æí[ç‚|ü‚¯jʞŸuYë÷ˆš†È·xŽâWÿÝÍl› %[ ÃWþ¸ÇÒ¬ËnÓ>›ï¢ÂH®¹(jYP¡¤ŒgO¨;JAšjŠi�-¹¤5‡´‘ÒÚI釆(’çÝîzÃùÛÜã;¥¤[à¾ã>®Çøže§™°4ërtÖ¥ZÖCZMœÈ{n};%Éh€ùãÞ{ÌÛO£/ìx¹þD–¦©EØ74[™SUÖÈ:Z40kÛ©¸‘eÔ£bAr[6v,óïLž‹R¿¡e~ÚáÔR‘FÛ Ír=ÌäÒþÂ{/]!éæ¹ÇQl5Dãg÷>J¤ÑÏ-ißijúdÝáþã2+M ÷÷Ds’�ÏQ´£I>µûÓÄ<A@y{‹'ë¿Í‘}}ˤéyJRï³ç–Y(tû¾X-ßù›í”Àsp• #òœ»}¡d.o¦›wISè í® £Õ¨F5>†¨Ç~šù?ø›cÇÎàûÝ.\½ª¹rå_ò»¿{ƒNÇøý[Q�[SÌó¹Á$©èL*_nßøv—ë_øwD©K³�²×6ü™Ç‹˜ÔòÂk!�Þ- śۺf?Ì."PM¥¨†4…Ô(m±V%ÏûÚé1Må 8Î^r‘ÍkÖ–îù‹tû)a¬¸²"Ûã8±tºo¤xXÅ0G$È,S Í‘Y¸÷˜K³kh´-ã5}è9lì$�÷¨—U–càP,¯Ûwõ�»_«iª÷UÐ…:º½Ã¹Wö‹’ðþ䳪e¥°B_)øŠ§Ï…,͸‡œ Þ sËýŒS8±è 39ra{!´§7�œ?–-ðÌýUæß§ WÚ}ËÞóº�žäš$ðÚµcº=å�Ø¡äÉ[.pzÜa¯m82ërbÑ¥’eCäMûì¤ÃÚVÊÊV‚ç(ŽÎK@ád}_H~PœoÜËs.jÖÅk¤t:†VϽ2î(®ô-®kyõjH¯Ÿ¹Ri¡"• –µm¡Ÿüw?yôCK-;“uÜÚ]ÑBè,Û¦6îRyßi¯_ds=„ ×o<;`qÆ%<`AÜh r¸×2Ã3ûv°¥`rL³¼‘ò�{}ŽÎÉ`\̬˜s[ÜMZÞH¨W4GæÜlp’û=Ô@x’-â6£…±¥Ù±ÃëŽb mu$MûØ¼Ë 4´ÚbS¬3 žëˆ&eINÎÙþ;²'66âôT«ˆÞ«VÑ~~ε†å�dH j%žüºKûZŸ^Oä÷�òIRË«×böÚ)iÊp8}¯‚ ëUÍÉ%—ó—C>üþ"ScšzU5KýtŠ_\ÿâÏ‚ïÃÖ6ÿlóßqîÒ·8þñÚîÑs¯†›wñ²ÀÀˆ,¯'o¸ös#A{¬ˆ¥]-¶¸ž»¯]¯9¢_1âÌ–¤ûv¼·Vn‹›[fO�;G¨VŸùj—³'½Cîfïub:@¥¨Yš½R¹˜¡dE7™çÏ^û‹4ï;‹ò}Š››üfúy*åg¹²ç°±“23q-„2@皸$=Çn+•°Ó»Tµ$ïyÑäÈgÆ—¿ÒèŽÍ¹8ÂÈàûbžP*Œ(X£Õ¨F5B=@ó³?[àÑGÏ09ùw(º]¸~=â?þÇ\¸�§™;o‚zÜ:|ä‹lõì«Q羓…¯7Zé‡]G6ÞÆJЙ£-ž#_J_úF—ï´xç æmD®J‰pöѳá•W4•‚4iæÉ¯²F±·PݘèvÇ÷^‰|k¤éõ<‡—ŸxI†„Œ—ÝéYìQöAzÊÝ¾Š­}ıùlCˆFÃZ²�GÜ|L �Þïï[ãfbìÀw™�Rè{§Á:ØÕM6–Ûl_ ´;ô²!ÞmI3œ»yi%÷´Z’l’Ü1h¢¦3JÔ(ÙýÌï·ãˆˆõT–{‘£GÅÜ©*Ž‹Š8ο±ð;_h©åkqÉ DPP’Ö­áÉçC!v~ Z½ù q§r]Å´ÃXF+øB{É]Ë} ½&ž_�çõ îÂrDk'¡Ù3D=A_ÂÌ©çåK‘4¨‰Þß0²4Z2îµ�è0<°Ù@57åð}PJþîÍõ„“‹Þ¡¦Ódº l7…’²4³Ÿ>_j!²Æ×W±ÎíZKc3Í,Zÿö‹{tûÒ|(¶†+Ë ßçÓí[.ÞˆïH©z'•¿7&j2Tç Aè²`ÆÄ‘jQ1VÓ,Î:¸%MÚ•™FWšÚü^÷C˹Kdﵜ’t»kÏïå©E—óWbÉÕÑšg_ ùÀ½÷s3 Y°(¢ÈÐì6w Å‚>îV#åÈœËütŽŽf€þ¾`?·€ö3t/_ ô’.®T¦±PŠo¼2V•,7ûÿLM8\YN˜�tÞÓp{àþlî¦,ͺܛi¬ü Í‹ÒIþË•Ÿ¢yö>ð<&·6ù¥ß¤lÏÑ0|øò¥ˆ?óxqø¸i*ô=ßÏ i"a +›)‹3w½Ôš}Û^#ÎW­®áÌ ká¹W#Ҭє3×8ÇQ£dT£Õ¨þ‡ÓÌ?ùÉ"ýè¯0>~cRÖÖÏ?óúë¿ÂSOt¸²oõ8è€5ü[ÛMkž{uðMÏ-|¯±Ø(¶¤FhLÚ‘¦²^U´»š½VÊXíÎ_Üi–€\)‰�}¬æð=ï;�sá€ï¦ŒOùœ¿(i —nF<û{+s©U¶Ódã£0VèK¹fàò¢î~Woýqo`8±èKîBæ(ãhi>½X6ãijè�i¦ªMáTÏ£ìÐj–i…]z_[¡Ù‘̈Vײ½—’¦Ò Ü�Q@àK†@ÞÌO9,Í8 "±ôL�h Ò„ŒG­RAìO§Æ=«†ºÏ•¬ˆB ¨qqêeŠ~Œy­ÏÊ…˜(–&ríf‚v”«²P¸‹7DÜ?=îÞÖ�è�,ƒ­…ÝVÊܤK¥¨)eÙùën- "ù½¨ (³÷YšR„FÒ½{¯Et:qÊEÀFšÒÞÀ¾©pÜ'—\¶†À²GÏTJêÒ57é°¾�²Õ�M³ï‰=îD]3Qsx¤»»®"på²Â›qñR‹�a  ¹›2æ)Vß³hmØØÉ9-HSà+ü¾õ–‹Þ»û°PûŽS�¾a².HÃ줗ii„¢ãfÉî÷8©§v¯tljÀ�-ž§xöÕˆ©1‡ÁVJ”X±#n¤4;†$‘`»Û‰Þßʺ8ã°½gèô �?P`qÆ¥^Õ”2D I4µŠ¡\4¼~=æD&äÿÀ_ê,Ðuöia_Pš#"·µ ¾8þyfÜ—éôe1‘;ÿ¬?x¦ÏxUl˽<ÿ# ÇÒŒs׬—ÓKžØöj1cËNÓê ¼ÿ�vO>ÃŒu0@Á¹`�jT£ÕŸ¦áCq˜r¥ù'ÿäÌÍý8AàÒé¤\½ /¿üxâ‰? Ý¶ìçzäˆFò&¨ÇP÷qàoZ€¯?¾ö=ïóýø‚ûs½¾µk[!DŽ߻_pYßNùã»|ðýeÙÊg_˜ij™�r¨WÊy¶AÖÀ|E0Q¤Ì2l‡¸þ,ëDŸE…�æÂõÇUV…Ú=ø—Ÿmñç>\ÂóÔ[kŽï0t”‹¢éÈ9ã9}&ðåš4¦­=C’’QÄ47Í4ßûX@ïõuV7Ûô†~¿%®D‰åüåk'L«» 19Wýø¼K=Kð&»¯s“–­½”‹×cŽÌ¹ "ìÊF[ŽÂÁï’«xÔÊ wÉ'Õìv›½×Z¬÷ k›‚9ZÓî‰Mk¹˜ s¡Z½ÌxÝyÛÇÁá(¦âT²LΞôhv ®+h�ãÈ=žzÅ´·¢tïÂÀ“li*·_`Ö5a”‰€c¸¶ÓhË�}'"àJQ³Ý0ŒU5Ks.cA\gé*—Ô°ËóNä«}*˜§ðŠŠBQS*+LÍÁl'´Vcúýlãš¡KÕN3%5–A¤Ùk‹û–뀧d(õÐøÍ(3·ì�lð—7ŽÎ¹ÌM9Ô+BÌ©ŒZI3œ¿šŽ†–.Åÿ÷¯\ß©Vœ¹þÀòч 2(8Šk« alyéB4ü °wA9ÞjM�9\]Ixß)Ÿùi—‰LßSð.ÒÔâûŽV$‰å�Óþ~ÀåAjUöZ¤FÌ:=yÿű¥�Ùʶ{† ×÷…û­Ž^K·giúDZb]íŠ>¥XPôCŵ՘ã ÞðL¿ÙsÏÇsÅ©maÚåØ|ARë‹ûA�n†Òx®â±û5/]Ÿæ“á'蜾<�3›ë|aþ·©ª—„òü„:fIS{HhUÍÍ$2ô4ÎôͶ|fÝízóë�3$íÆNÊdf·[)i*%ùQ¾ )£dT£Õ¨þô¡š_ú¥cœ:õW©VÀÃú:¼òÊO=õ^xáb†zä0„¹õˆoƒz䃇=0€Üz f¢îþl1ÐöÆZÄ#g}êe�ïëlciHð_1�/Ú©1ArÏý¼Aö<:æ�x¸'~ÏÝ‚ÍWXÛ.rùâ€öÚ—Äi5a¬æÐl¦Y¶Ã~ãZ-é;fGÜ­…úˆÉγ“®$I»jÈûVJ2 ¦ßÿ!´�àé_û'=´²¸WVx¹ç%⤕džûÝþáÀ7µsÍ®5ð§�Üb�K¦‹ÌЖÓu|0£mxû÷rQQ:Y@ׯðâ&½MC³o<Õ¡ßm1ˆ-{mÃÍŒúÕŸÛî~!ppi �b¬ªÙn¤L�½=J³c˜ŸjRµ¤©V2áxÆÃ·Xn¬+øý¯ôíkÏ6�E†ŸÉºX?{>¤RR"n½7"àþ@ôsS.5‡jI i%ÖZ’d¿!KR‡“‹îP|øŠjMã,¸8=CÔ2tcK{9¥ß�‡ÂßW¯Ä¤&§üì#H¹�y¢&Cˆïå÷n®'LÔõÐ…­ŸÙVßsÄ»«¥Õ5ÌM:”KB¹{è^ŸRöþó¼Lèí ÚT*ib aßHFD ¿ûÏ—½JÙ™“¡~ï= ¾bqÆåésá>ªò^~¸)A“¦Ç%i¼\T”2•›Q°’Ä¢”Ť‚’nï¥ ©¥!M®SôûŽ~w*ß³×ÍœºÉJ¹•²utÎem+es7á}'‹£dT£Õ¨þ ò¯TÒ<ö˜Ï_ü‹f|ü¿£X´´Û†«WSžyæ~ÿ÷�Ãiæ@6îN¹ºuø8x-ù5Ø¥Y×¾øz¨¦]¦Æ5å‚>@™PøžAkc`iVtÂÅN¨�sóT “TÖèv ¼ÀÚ7>Ï^ÂXÑêîÐí‹KÕåeñÉßÜÊGžåÐí-ÂßÙ ‡fÇP-é»nùâÄ“¹OIGY(y^ˆïÊ&q9V˜�d¨CøÿþùlîÆD‰Ë×¾=àÃxŽâÆšÕ s8Ô>ÊñvQ˜‹×c>òp�‰;Yã:’ÅàhAŠS.^µH¹’¢ÊƒH¯·hœ[¥JC¶ÓÌmr ×ÖÒ7\k®ëHR¹çyòz¥¤¸÷¸GœÀN3Eg[újYjä:=C­"ÆkµŠfjLšàRŽÈøò<árðk.eßû!Ý¡ö¼ðzÌë—c'”“iÒÏ]Šyà”‡±°½÷ÞÒ�är[��³°Ÿã(ÑÄ|YŽ¡\²ì&–œöñ|ETT˜õ„ÆË!ƒPšÔ^(ì8í†1o./5«Û)Å�!JÝžá¡3>µ,R^kËÌ„Ãk×"¦³¡´Ó—³ž¤–ñšsØÌßwóÜìy•4¾#M}â(ÂfJØ¡¸ëZ®®ÆCMŒ›QÉ$Á<%\‰ßöðùVP1‹¸Ì�\ôÄpÀÛ×Í�¢6í(Ó·¶ÝªTneœd¦í¾œé(‘ðÒƒâ÷K7’·-ÜwÅÃ÷\¸ãö„‚”¦’˜>QíQÞØ§)ôBÃNÓ°»'Iç®sS.÷ó) $MÝZ“Ùã:*Ë2JÄÔb«{„�­þ4�“§Àu©¯­òêóÔÕKtúŠÔÂ:K«cØl¤œ>âò�çûxÜsÔcs×pö„“Y‡ËgÆ ²tûæ®Ïßudä:ûá��®¡ÞÞî¾§�”Äœcô]=ªQ�jTb‡�}�ÇØ˜Ã'>Qä±ÇþWêõ%ÒÔ²º /¼rþüíÒÌßÊðan>^Cþ8Nþïoþdí'] Tæô“ùÕØÔ+¥I�ajÆk𣋳L?¢üF›Ù{ý&««Âs»t;HIhÝ«Wã!Š’Sæ\x®B+ùB�Ÿ’fL)8±àÒh6w„Þ2;éÛJË5-LIŽHµ$�qÈVØ÷^Ñ¡è{LÝ«Qc'Qª‰~a�×Ö$9úËÜ®ëc­¥RÒ|ñ�úœ9æR.êÛgqðV›ŸLX«àÌqo8x ­q íˆÛ�1ù’Q=ZfîûgPíÍ«!««)Q§K·/ÍS§g¹p-–&6±‡(3wºœnßø–…i‡éñá�ý�Ën+åÚjB[6v¦'\¦Ž-¸ÔË¢¥È©%^voý‚¢ZÕx'\ÔjŸ½­˜½¾a{UG[¡æ6ä*ãUÍw^‰xðŸ÷bîÐJè0óSrÝ6Ûþ ýDxøgÆHZvVr=žè:TdÙÝJ‰zf?q<¶¼|)Îè0û©ÝouPr4ÜsÄãÒ͘Ň‡ï ˜¨‰C™çÊ �¤–±,±{u+a¬*¶¸õʾqp -ÝÍœâ*U�**T_ÖF(yù¿­=ƒ5kí®¡Ó“aD+i�}O1VѬ奈ל7=ãw+ÑZÀöžaaZÜ·ª%•‰ö5­nŠ“g i(”¯õ“ ž™=Ý}vS¥Æ’ZIpï%–k2´öÌÞDüþV™b XßI™ל=é3w0“ÃÍòZ ”¢<“(!MàìÉA�™­ðAš˜ëª¡þdB”Èy�cK3œåç[?Cçä p¼ÕUþUÿ7+¾L»+O&Ma Mr£‘fæfz\ñÔ¹�?x¦ÏÉ%�W®FËŠ�<\ ŒD#×h&êw¯”’Å‹£!ÎÎuo`‡ôÃÛ-r!ÙðŽjT£ÕŸdÔCB(Ã?ü‡?J­ö×(c:¸tÉåüùƒiæ¿ì-ÃGz´#ÿ½!ºñÄå@rÇÿð—êþèœóþ¢¯p½úç)ªÅØÑ›+$©RUž}%æÌ‡?Âö•/³séßи„©byCÙ�¶ºwwxÊ™™ ‡¥YA.üCÏDÝ2VÕ\¾S*}f¢îP«jÊ…}§Ï�ÀO›/àÍÍQô]ta�öö${[«´¾sŽnß²Û²túGÃΞa¢¦QÎ~sV*ª7ÐÞÊ ‘ßäÞÀP/ 5)ð$Á»ZÒìuÙÉõ“÷–Yn†7« u$JR\Gšôí‹]®$ËÄÙ6vu3%1–Õ-±É̓"ït¸nW‹3.3‹ÓÎ𺴖æ'ŒÌpмt#æ‡>Z>”&-ió¿ý¨‡Wöñã˜Í oh=ߣÛ1„ºrs#a·)›Ù‚¯ØØMd¡}žK–Í!W£•2YwÞv.ÄnË05&�z1礤 /Ï©± ü.­œ¦ßZ¦qí&­nÊÑyqÁº¹’°µ-YÝ�¸2½ñõ†JEűO¨H=ÜF“!_"ZϨ`KãU-.OÎ>íΫi¼LtZØkzkf¨ƒèô-ëÛ)­Ža§eœ‡„AhiuS\­Q™(¾PÐxžáÕ«K3.ýÐ2;áܵÁÏÏ÷ÆN:DG}_1U×¼ÿž�‘Jãº0^SÜ\O1Fšû~×ríµèÌ7?{Å’‰¢Û]ã÷´{†‹7úCï½¶Å=>ï²¾rdÖe¢ª©fÔ°üìçˆçJž¤Ž¤É�;C¼—eÙ …è…–(³ ÏÑEÑY6{'ø%ï“\=vB&§•U~=þ'ëç©”\./çK9w»MÕ•„ãó.ZËÀ¤3QÙNÓpjIòSž}%¤ÝÔóV±ú­ÃáܤР•�Þ ³í½ÓëÜÈÏS3B@F5ªQ�êOâð¡ÑZ3=íò©Oáĉÿ�éiI3_]•4ó?üÃ<ͼxËcÔ{ÜŠp°Výý¿òcå#Gç]·àë#¥‚þëS㎭–•[*hŠ>l62X?ë õfö_ðÿìÇøÈ#sò‡”l·_øÚgˆbXÝ‚�½høÅwp3}»�ãv›·3Ǽ,Ø \½/Ð|Ñd¤FšˆÉºÎh5A­L©P?‘�xÇšïÐ~a�õ¦a:ÝÝ 90\¼oˆVņ$:Ež]-i¾óJÈG.Üå ^  “æcqÖe¬’%xb…šr‘´ÂXÉ(ø÷ŸÞee3YJS$_e`øØc’æüå§úû/ø�€Âw²­nu µ²fnÒa¬&È–Ÿ‰Ycñ=�Ö–4³É=>ïâºT4~Ñ¡6¦`¡@š€½Þg÷Z—ÁÀdÍ£lUí”k+É¡ë Í”^h)úÒåÍÛDöxe9fnÊ•M­£nƒÞ…H8X˜r¹ç¨'éóÜ’|73=(k‚@ñô·$©4x×VRžüΓ™© BO>;àCÃp½á™}�ìq¯¯%œX”�ÅJI²‚ƒH6L£«Â섦^wacڂ´ Í�4£ƒÉ¦¼ÛzÒùËIb Ço¹}¥¢"Š¡Ù±Ãôoñò‰y—RfL'ÐêXÂÐ7üy¥FКþÀrtÞ娼Øé–3«ßaÇPÿµ~i�ËË Qbñch§†‹#[*Š@_ ¬æëÏ ˜Ÿv/*NàÈœ ¥ÅŒÒ–Ù¹€_Θ"MeHFÁXÍÁsD“ÒÏ âdßu+Œ,ýŒÕéZЏ´uŒÿyágé;ZS_YáŸ6‹{^arÌ¥T�ϰ—/G\_OØk¥\[K8�é�ÒT^«ÀWŒiM§g(ä\')ÔʆFK±Óúª{‡iajÜ‘ Ë0±~§i˜¿Ã!·°4ã²8ãŒ�Q�jT£ú2|v·2~ñÿ³³�Q.§´Ûpù²æÒ¥ŧ?}�$�}ŠV>H ‡�ÿögj??VÑ¥ Ó³öâ�X?õÒà_lí™Î-¿ À'~°4߉àS‹3Žõ]u¶^Õn¹¨l1Ð6�{®¢ZRÜ÷Užù÷;¤©ˆƒï+»¬ÿæ�ãúüÞ7û„‘áã�•HRËS/ECŠÅ�Ð�»ÞœLŒ{|Þe¬šY÷ƒëT֌ьG–�Ý”NûLž, ¦Àó7±ëm¶>7ÎíÑÝúýPÆâÔéK¨áA¡êÁÆ~fÒeZ’®¥Zqôü”“mÃV#eqÚ=ôj�VÊ‘y—rA3^sd›ZÐÙxßE©ZÕø÷Õpt�Òö:þ¨Gà+ú¡áò�„BÆ@rèô,+› ad qï¶%+Å, œÝÛBFs´z© ¨W–/£‹>N§O{WÜ�‹ûî_{mÃ�õ$»Âã¿Û¶zrÌaýrD¥$ìÙI‡Å�ÀWÃ|‰fǰ¹›rs=æþ“>ÑrL�9‡¹)ÑÎ”Š·j!ª“.ú¨‡ÛN‰š†v–Q*ÊpØÏ®ÝqTN(ƒæs¯ ð^ÖúvB± 9µ$4¾áõz‚ÎÔJK«kHM®�€++ �÷è…–özÂc9a/ IDAT 4ÃÀׯÇâ|Ë@ùæ¨ÜþüÁ{|®¯Š+Z·/¤ûOúÔÊr^e’÷a£•r}M,šç§]Æ«:;‚x �í¼}‡'ß“÷­ã)ÒÌ>¹7ØŽw{Ùð£O�ëgæB “×BPÂ��”£sïñk±“2Y×Yæ�澃Èfz 5lò§,¡­KãµIÖü»®bu3ag:.I¢DÃ0t²ÓÜxMÓÕƒòþiåçèÌ—éæ2_ªÿ6�Þ x^€ëŠ0=5r/ߌ˜¬»ôòÞ²–l°–ëðr?qûuO=M»#Î5{mA;‘åÊò›UÕa!L¥¨86/–¶¾·Ÿ–ÜîKSüü«!ï;Ðê–f¦'êe¸Eõå~Š ØB€ïU(�‡¤n�(‰ /5ØÛj°ÙHéôÌ0ŒÊÅê¶Øâ[w°rQ �¡‹adÅ&כדKÞ~J&¸ö\ OƒvT–$Âæœ†Ôé õku+%Œä5éôdpdîlZËç‰ã@© ˆÅNS(yŸëÛ¡çå¯ån3áÔŸSKî0˜1¯îµÍй ›Ùˆ—Oð[¿þ̵Ύ>¾½�ðØÙ Ó¥©aÆO?´´º–f'eiÆ%Nàc�ö?Ó,ìô�ó�+Ÿ yô [¾É3ŸÇt^¦Tp‡º‘8¶™ÞÂ0;éÉ£|šÃöža¼Æj ¾Ð2]­2]$©ÊŒ%4õ²èˆ:}K¥xø`›sñ=AÃì}Ñh¥˜»|NOÖåܺz4€ŒjT£ÕwóàqØZ÷çÞ'IþOΜÃ÷cÚm¸~=æ«_½Î… ÿ°o­{hðÌ/þåÚéûOù}rÌIJ�¸B a¤©” …@ûŽæ¿ú¹©v*%UÉ… ��ñ\iä\×I§¦‹ºö�YeÓŸB;¿ÊÆÓW¹t³AعN·÷$Q,ö–Ž–­¨±…PòDôo½òᇠoŠnlBµ†nÏ0^s˜ß·ï-eͲÖò;ކÚé1õůn<ÿáÓ…‡[có±õåOÿÎ3ø¾b� HdÃÌ„ªêÍRÑ…§~úˆä=¨¢ØR,ˆÅZ8{Ò§’ ƒs!v Ÿú è#ã(UÂ6×h^íÒ¸1è¶éÄ õòrÌ^Ë`ŒEkácG±¥ȆÞu¾óSî0‘û­TŽ>X+ÿs“™ ¿¬y<£'¾âÆZrhë©+._üÃsìÜìÑÞ³ÜwÜÃ÷d¾ÛJ‰SËë×â¡sÎ;m~óÿÏòFÂîõ™ ÷ó â„Ì] Rã²0­™›t÷QŽ,S¦2ãÀ¼�ÚŽém¤lo¥Ä¹p<Ü.l´ÌEº<0h­8:ïÒîÚað¤Râ†Z++^»ñà=�pû¹{ÞHž}"A�07åpdVS«¨!Úq0Ëb¼î°¼žHrµ±$FñëÿôºÛk¤ÊX;´‹þÞ÷HS¡…#�ÿNï÷íjj\Âêæ&Æ+ûq¹¦Áð]ƒ+[)‹ÓÎÐá)ðå’F»õ-Ý�¥Ig˜Ñ�âØòâ…“Qì’ç¦7aiÆd²gp]G[Ül0.øŠ½vfk¬døÝÜM¹ï¸[ZœÉÌ(Z]±Ì�Ëeq !O¹ŽÉóä5{ú\Hšenôð»¿þ<ëW9î:†R yöÕˆÞÀrö„Ç¥›‰¸aiø�Ç‹Ãж7tã9~rõ“4�`bù&ßXú-æÊ—øÜó÷ŸôyÑÐÏÞÿÍ =É_£É1‡×¯Glí¦¤u‹)í¿WÆŽO35±³Ù'Mžkñ}.w[)•âaG3çÀR!Éò?Œ½ûgb®OSj”2ªQ�jTß�ÃÇ­�‚–¿ù7?Áã�˜±±)’VVÏ>ñÊ+¿Â3ÏlqøóþV�GúÉ*?rêˆÿ7f'\#Vž ”’4`O y¾ƒÐáÌq¯â9 ßíR)»ŒÝ³¤–¯”ŸºÿûÕ‡v.w7#g~jåés^cõ¤Viõ²µ”a’·R°ÝHÙëÊÙf­70( Õ’¢Ói!P·m8mV.iÉöP"2Ï7ÃCk\J…”ñ…€­› i*èÃg~mÕî´ìÿöBËîìN. ÷˜7¢àì Ÿ×¯E¬o§LO@šj>ü~ŸÿèG±;Ñ›AY”ECZ½A«¦Ô+¹þC4gý� 8w«ÉüÜ2@F5ªQ�ê»uøäãç~n‘~ðãLOÿy|ŸLë/½ôE¾ò•¯Ñíšì³^@=nu¶âþþÙÉ1Çä<þÀ“4_“*eH­¦T´Ôʰxâ{˜›»‰^øY’´�Yÿu„»ßó­í÷ÒùÞ`]’¼/ùXÂC�q·n��Í�”ûOyÌLz8 ¢N,Ö¶Rn®'œ>æ ˆ}Ö¶Sî=îqúˆ·/VÍhB¡qðª'©×[Ž•HÌ£´›_åÆÅ]OÓîY6v ¾§lîJõ�ó!WWb¦Å!æîè†:ü¢Üò‹ýÐR*(&jšZIS ô¾5®¯@C¯/Ͻ5ê•Í”ù™3$&ÆÞXg{µM?L Ãv–àm%Ä«‘Jð¾“h{wf'5§ŽxtŸú2a(Ž[IjI2s€(±™dððàY/ ÕÐA£ºÙó®Wîüf™¬Khá( }T£Õ¨¾{8H·Í/ÿò1æçÿ!ÓÓ¯XY�—_^ã›ßüçÎ]b?ÍÜ@<ò4óƒYª^Õ¶à³èå+f°­”#¼lÃøpy»Fê8 ÎýcZc‡NÏê› ƒH¾�oÝVÞ©áœ×Ÿ¨W³Æ sSé ä‹ìæºÐ{_�5ššÇ8(¼•k®Wå¦ÐÞãøÎ·é®”Ùkˆ¾~ƒNë2Í.´»"NýÚ·û’B¬2~¶«(„'ø:Õáÿõ&MPZf&&ÇdËF6ãH OÚ÷“gÐå[/¼F %Åu ßNYþ£Ëô² ³õ�”íFJš ±áí!qºvïq?ã]ïñDZRd\-ÛÞ#³.�œ ö9ùîþÐQwðN•q�ÝiÓÞÕl¯G ^ÙÍ(`²ùÜÚKq¬zK©(�°“qñëÍk×b:ã¿m[ܼqÚi¦,θLµd\”¥YL²3£e¾Ãw ¸¯vúi÷[_Ûš8{ÒÏœÕäz.¿2ˆ,¯^‰MËܶ†[ýwðf=}Ôcy#áž#³“ÎP„-¨—4r¹%«³÷Ÿò©”Þè{ŠZÝÁ™vpCKÔ‘´ôÎZJÿª¦¥¯l¤4Z)ݾ&Ð_]Mˆb›i乿"ã•Í”±ª~G÷>¬sÔk²îP¯j>pf’IJ¶�î뵔Ɗ|ûR‘Íó}:-iP:BùôËá;¿¿Y|9õŠœí©1=Ìäp3ÚPj è+ð,®Ç’Àn,iªXÙð…ß¾H¯oÙj¤ë;éa7¶÷Ø!·(f\Æ2t)_Ì‘ˆÜ¥‡©èSczhõ›kyòûE–8…8–P¿N&âϳˆn½þAd!³_.Û “…e´W·oÙm¦\Y4âÛçCÂØÒl§üÄ�<ÆÇŸ¤=¿€²–ñë×øêÂçY¨^ÆB¯o)5ž#Ãn> ¶»’ÈîÜáÙfˆ�µš ϱØy­®^[�9±è±ÕH |Y$ÌO‰HÞuößÏ;Mùù�êž#^¶ŒÄ£dT£Õ¨¾{P�ÉIͧ>õƒ<ôÐ_ ^'I ++ðì³/¿üðÌ3ÓÌí]�CèÇ+—£æŸûpùëqb?”$Ò(|õé�?üŸH�¢Ý3¬l¦üðG‹$Y’ík×âý ¼ÍwΛ5ý�åø‚£UËzh�‹¥-Æ‘"Ifçf›ìR8=ꯂó¿Ó|î WW„ݺ½óD,o¦l5d«Ævß�êÀõLÔ4½�8ÍN:�w±ŽÍ»ì6S ÄóÕ�v“f�p‰(snRr êe ÏzUæþh …ÕE‹š=KµÑá¯ùqbøý¯ÜnËEÅ“Ïø¡�”臆nÿíQMîTÆŠz¬¦¨÷­q±D±°ñ’D��ÙiŸã÷º0_Gi»Ò`o³ÏÎõ„°Û”#‘<�fÛdÆ·ŽçHÑXÕ¡7° Ât˜R,èÌ×ÐhKóvtÎ6½¹–¥Õµ,Ì8‡Ž¡=kØækJ%Eé¨c>ª³¾“ÐëXB×r}-†:Y`áÚvÊ¥›1gŽzïi³›_{”ÀXf'[ľ7ð%™Ü5鯉¢RÔ,,yŽ{¨FJ'¥Ñ2D=CÛa.ÇÆNÂÊ– 9•ænt0káÄ¢ËnÓà{–ó—Eœ<3årúˆ˜ äÎv�–áæF*ÉîÙ ÿÍ:|äf$¡¾RV”%Ÿ‡çÉ=-—5º¬IÛ’œÝïÛÌ}J†ž¯}{@¹¨3KZ(úÅŠ?øvŸ÷�ôßóÏ\ÄŸ¤–ZYÎì~†vj¹ HR1k¨–ÅN·ŠÍožÇ1L��…ž‡• ~š¾õÁéȬKÁOÙj ¢µ œãu‡GÏTË’ŽîhÑÄ4ÂÓü@6|` ãׯñÍcŸf¦|õÐW„1–µ�”÷�”�Fiù¼ #Kw 4°»!ÍÌ–wÉgÒ0q Ù;7Ö%k¦àƒª:ìµSvö 3ã¢û¹±Óî ýêújÂñE÷ŽK…üìˆFe4€ŒjT£Õʨ‡ Å¢æÇ|†�}ìG™œü1‚ ¡Ý† \Î�û>ÿùÏ>B·Êµ·Ò­â[��<`P¯lÙt§™Æ3㥂Áu4�žfå®Q_ñ¯§ÍŸûÞÒÛ4Ôíšcæ§e3_Ì6Ù¾'ÍB©î¨�ÍÄæœýB ©T5³g?N«{Žî󯳻ùׄãì4EÄžË�õ 9Ðûó �ê ú²ÓL™ŸrX˜v©dAiÆÀ †V;ee+åµk‘ðøÇ4�nʉÅ`˜UP²`:Gø†Ê˜‹³´Hàp‚ �%ºÑußz–Æž ®kùêS=OºGG«¡mí7_°ø.³"rkßzUšüé ‡ÂСGîïø¼‡r»7£¡×àZ6�SIÈà�·éöÄyh}G��8±Ü\ZÍÛŽ\W�̺ÌM9TJÒˆc!N&Ç ãU‡› uâje-[öl ²ë÷¡–'Üù€Àµ˜ÐÒO u=¢óü€0¶llfBq-a$gÍqd8,�žlá‹Á;›@òaÉZ±fž×8Z1^ÓÜ{Üê Ü,¢\TŒÝ¿D²»ÅÖµq"A|…@ñ…¯tøØ#!baš5wI 7Ö“ý�·y©õ²f};ee#味 Ó.õŠ¢àë! ÆšzE6ç×׿§¦Çþë¿01D ò@ו³Z.)¼²¤¦§V®y¯™ÒÛH2ÛWɯɅç iu-®“å^8òXå"ŒWÚ™»Ô»­(£NÔ%»bz|_Äßíg¨Cö9滊©¿UlÒzîE ÙËlh“žy9dvÒ!Š-×VQÛÝKiõì»NOŸ™õu£mèõ-K³‹³ûY(¾§qËW_{¿zò“´gç„'vù Où�7 ²X‘l%ß; ÇÈè_Û Ñ€ÜmX­U4§�xôB�ÛØIˆ3ºØÊfš Ñ‚|˜¨;4Û†ÝVÊûïñIS<ƒÖ†zUÓêªå7þM7{/ä%q2@F5ªQ�ê?]ÔÃq4=äñ?±ÈÒÒ?frÒ%Ž–—/½Ôä‰'þ>W®X pËàanA;b Ïóá#ÿÛöýjó_ÿ£¿5ñQßS*ß‚yN–Hž N}_ј!UêÍžŒµòL¼Œ'<7é0žå” Š­ÝT†œLœÌÕ¯~a繟ø¾ò#½�Ôæ6˜ƒnÊŸûMªe-Pÿ^…•ÍþþßàVžóí]©ò::çrtÎa¬ê ‘Ž|«_ j%¾×§^Õƒ@Øž"À­” Ó”O51ê©Ù!¾¾ÎÆZÊ Lé÷t3aêK#Ækq*âT�Ù‚ê\{(^º±0í¾­æ&Ie@‹c¨UScû`Å@ô;�tøô]µB¿ÛKŸÿb{ü#( ´h^^{jwÛ ÝÿöÞ<È®ûºïüü~w{{¿Þ ±AR¤(R‘EŶh'±åX¶&•Ø™Ø3ñÄ“©J&“JR5“É85™*g9Î$Ž—JìŒÇr¢8Z#[¶6j_(q'@bß�F7zû»Ûï7œ{_wƒH‚´“?Þ©¢($ú½»žs¾ÛÍõkÞ¸û¶Í�‘­ïüŒ4XÅ@=�„n¡),‚„Õ+š Ø 6 ¯êP.j‚].©ïc—{´Ï÷XéæNCÒÈ…±åÕ 1Ijç}µa$´ÍwöËO„õ­Ž¡8÷´Y¿¹–29ê0=îpxï¶´ô,_¦ÕúJ~ìWÑöÞÇ'>ù9ëk” p$ãùW–^< ®å;%Ž¿Ùatßœ vM:ŒgǼ‘$K¤÷=A+¢ÄòΣ¢±òsw'_áeIÞ¥¢Â5ÉfJsÈP9&£ùâXÜØÖrÝl×€tûß3¸.h­C@­¬¸´�ppÞÜ»þL)Ï©yZ ]snJ¬j)Gž¶èy­Žb½a†ÆBÜ=ÍÇ~g…öZGèNmˬa kXÿ5 ;ÓÌÓ~þçÿ7&&£XLi4àÜ9͹s¿ÉG?zuǰ²ÓZ÷v¨Gºí÷·ù0bÎ_‹>îh~j~¶ ¯k¥X\N¥1PBÍZZKØ=í½vjÚöͶÙáì“k# ~ÖØ8Ҭ훕”]ñËW|æSkÖ6í£ÿáãM»Þ4x¼ï�ERk¹t#‹Çö­ww£ºÝ�nt wûŒÕd+¿=©Ùwí ³ ×w˜Ÿq…þSÐT÷zè±GñÜ&D×h.”X~u™þê‹t3ºÌ©Kñ€?½]±º!‚òjIgÙŠõFŠëÈÖÿ¡û|®.%’&^¼s·/¶Ã¢7)J†¹’¢è«mP²±¬N¸$ ICBÎ.\OyöóKE¥(º®âóO÷éõ ï¬@’Zž~9|CˆÖnØ­l|sþ½ØâÊïÅYb¸±–~ä07édPŠÊ¼‡/à9 ñ�„VײùR�n»;à¶Ÿ¹“$2„´º¯åß[D(}}ÙPÎ=­¡›mÉû‘!N%aÚZ˜¨ßyÙl‰‹RžÿððŸR°-¼Ð•­nÁWTkš…ž¡}F¦$Q|ã¹ç>ñëø�‡Vе†á“_érß¼‡ëÀs¯Fo»ö!¿VîÛëQ«ä¿¤Ó n’ÙlËØˆÃd]†×JÕÁ­jœlÀë…–æMC?JNO Ëâ╦w0H°[ ÷ÞY—Ë7’ÌŒÁ¢< ŒØ7·•Vß�ĵéNJÆÀf+efÂe¤ºe@�'×o·†v3áx©¨˜™txæD(BéD��ßý­Ë´{‚Di%)ñ_{®Ïô„CÛ?öþô¸ÃD={.eø(à×¾ù(¿òȇ`F†Î_àW¼�ÃÄY w˜ËÙ}#Éëâp—ç|ßÕ»j¬”b€œ¤¹“Uß`€½³§.EZh,¦(Ž`n–àî{ŠrAP#ׯoÃÚ¦!½ÍѺ ¿ýHô4ÃdXÃÖ°þkB=òkk¯"t+}ÔãV½G>xXnoò£J®Úã¡‘E© yô¨ƒÒÇ""\XNèt …ÌM¦Ó³TËjà39*n3ƒ�ÃUxnŸrYÌLP~œÊþo�¶ßˆÇd IDATC»{ƒÞ™¯Rð5­DDšž²yqífÂÂJB§›‡nu:oÄ•*§LØŒ2’¦–©±Ls2ý“|…$% ªSc¡‰ìyp¥¹.qø qò*½O³Ù°™�z“õ†±/\�‰“×4¾èiü¾åàn�RA6ÒyÁÒZ©KG÷ùt3þ¶lìSöÌzÝ#k&Ea)•5îD�b¡‚?Û#é�G’Óë$¡l.W7SR+¨–cEß²ÑÜ¢™¼]Mp»'âüjIS)ªmZ¡i  =«à -ãÙS!?ó×Ç ñH–;´žmÒí[ÂĆ"nm´�PÁxcÂq? dëö-Jje‡£û$y;·`íô +†—φ;àÓí ¥\RLÖº//û[ÏQ±;îR(ˆ>¬8¤‹ #MËåD4Ž�‹ÁÃZ±µ<ÅhUsùFÂÞY÷m9îmË@p^,È0øà{?C3Ê%K)º}Ñžh‡RòÙû¡¦R2=Ⱦ9Aín½{BG*hª£µÇCµ ÑBÂæf*Âñ,x.Š-M“%“kZ]ƒ1ùæXŽ{© h¶M¦Ã¹÷f×dÇÿÚÍ„¹)G®ñ²„^"xÖ™þAA­ª)>ú¢ë'éžÙZYf ûíg%¦×7Ä Ü\OY¸™de9þúåÓ/œw§c|ærýWA´J‰»”$Œ‹]pà“!�z›54ÄÉ÷ ÊQ„=C/„fœ =,–óÇ–Í–!Må>@)m›‰äåÜj Å@3V«á·:€¤Æ¢•¸‹-®&ì›õØ3ëárAqq!Ak…RŠùô{ùÍwÈðA’0zþ_Üý1ªî5Ú]A6$¸ÐîxÚ­7S¹·<µÃî·Y_ßÕJÚZØ=íÊP  MDC¶ÞH7š8ä'–3—#ÒŒÑتc©<öó¤ßùÇD‰EiYZ¹Ž>ÚÛ,D&Ï»Nß �a kXÃú/4|¼6Íü~á§yà�÷R­NÇpíšâÙg#^yå—xöÙ<Í<ÿ3 wÖz$· ·<Ô-Ã�UZýíÓ—#»wÎc¢îP*l¹–Ÿ>§ÎÀži—‘š4:ž£ð½>õñwþ1ïAüêçÔñ/W—J‘»«ÿíJ£‘Ò�Ktz/qsM¶œ7VÉŒèY6›’Ø›;!¹ŽÐì6C½Î(—»«Ô«²]­i=ê’Ñ}OÑéÚ}¡råîE_új£óÊ7ZÅNhÝ#{¥YX_jðb*nNK«o^ˆ½½¢ØŠù—ñš4_yó™dBÎ<ÅØbyè`–Gà(ßRuqv�øŽÛ¢×,ÓŽ6éç<�®¥A«cXÞHIR¸¶´“‹½Ù28Ù1u21p!�uöz3e|ÄyÃù�žXè&©af\’Þs*H�e³( 7VS¹ð¬\„/žšå…§—Ø\oÅ–ÝS¢IRËW¿×§TT,®¤w°˜}óµÙ[Üéq%çT•|‘ëY>_/´Ýçây"–\E¹¢ñæ=| :²t´W:ßìÒϲ+z¡ea9!M%#Ê�°+‚Ö$‰4ð�oÑÙðøšz þè›m:\àÀ.op�¿î`e¡j%ydÌM¹Ü`[Rw&Üw°$]‰±òY>ÿ©g8ÿü&‰ÉÜÆ&$„.Š-¯œ�¸²xïâ÷»=ôìò„5®3ç;Åç6¸Ij 2ç¬ÔÂXM1;áne£¸2lx~–áa!‰,k› ™S¬®-&±ÅÕ­kiuc;)$®#ºÇKXãzÃÐh%ø¾PGªú }?›¡¾§éöRæ¦$ˆò‡|J™þf‹²õšÃå…>ÿþÌ�ð›ÿ9˜œ˜ùôY>¿÷ÓL–®P*“=Á¿þ\Ÿ')0Z“Ïä¹BƒÊÏwš �ªÛµÙ5ww¬A2F\½z¡åå³}9ZÜÒ"iAXÎ{œ819êðcï+òø÷¯“Üøu¢Ha›Ù_k1ƾæšÍÔÒTÎS«3D@†5¬a ë¿äð!ÍÿßþÛ»xè¡÷3>þ!<šM8w^zé³|á _£ÛµÀö„ªíZ�ô–Ácûðq+ÝêvÇ&£sM�¹ÆsQõª¦ZRšÖ'òâ7FV4g®D|èǧ‰[ýÎü{jåÔý ³Jtý�X¼|š^¿mMi×Éo¢ÄãÔEK’ö°V ^n iÈ6Z†‘ªC/44Ú†ñ=pÈÚl¾w¢ÏãPúµøÀ“ üô˜Ãx=ÏâÈ6ØE)(:x•Qjå Þ}}žþä*Q’à%ðÔ÷º,¯›j(RkyþTÄÙ+1?óc’D(Joeû›—ë(¦GɇÈhTn&ò�i„Œ1„eM”8LÏ UÊú=‡I[DÖ¸¹–ö Ýþ&�ž4^ÇÏF’5²MÄ|kóh¬%‰¤éV‰4 ãuÍxݧZ.ÝH˜u!lyʼn4íÆŠhµ^‘�£T€ÀÓ:LPTx—ZYãÎ{Üü\‹86Äž¥Ñ²|ýÛß8ž% ¼x&âĹ�ó>IbiußúqÞ^Å@ô2"—dkÉ?ÙBo¬ÕYC”05ëQ()Êu3éa6bzW#Ö;v`ÅÚî BpúR4Ð$ÝV¬œý}¤¢Y_ˆ3›iE«/vµSc.ᇫXdˆY\jÒ­ˆˆˆÅí®¡^­Fµìeô6áåçpßSø�¢PP”ÊUÕ\>Ç–Ä…O}¹ÍfK¨}ÚBµW–RÖâ–Ôh™·El}»f÷ÆJÂ{ÞQ ZÝF1Ð�ÐÙd»dc5µÈR 4™“[(¬†^ǰÙqt”ÈØîÊ?Ÿ¿&©çf[ê÷ökiûýP-k®-%¸®Âq­ˆS¹×ç&f³ó`¬„[& ƒàÀ¼ÂHÐDÏ…å�”=3.»¦<ªe‡rѧèk|ËTÁ¤¨ƒçj”Ò|ä•'ù—‡ÿ LNBqèÂYþãÞO0U¹N˜l…†±ÐÈN_�Ö>V RÒ|ñé�Þàe¨m/Ìò?zr�þ�µM#šb ñ]Y.%)´»–w.Þv.4?÷Á*Õ²¢RÒ¬] Ñ:$Måó…±ÜݾÜ#Ö:ƒc>?íxòû¡%Š,ËëÉpÖ°†5¬?ÁÁnM3ÿð‡÷1;û� H˵kpüø ¾ñ�Oóê«yš¹Þö.ßžhž¾Ú[:uÔÅœ'óFÞûHùo¹.ªv‹5n¹ Yë CjÀ�…U(hfÞQæÌWÂèÆ™´Ü]ü5º=Íù«1Q"[ÿVÇìq¢ñÛ49ýÈ0Yw˜“p6¥2QdÏ27é°´fXÙH»Ð±,Ý{´ª)giÒ�ŸYÎfÛÒÒþ]ûY¼Âw0«4×J„Ï/ÐÚ±EM?´\¿™‚ÉÜ,­¼TP‚x¼ eŒ|÷z5 ¦ËÆÜÖ´TTl4¤qÊs ÊÍø}�…€åW›ô×ÏÒ åxžº$nOýp§Ðýõj¢îpi!a´³“.µrîB%Ô‹]“.‹« ®ÇØ%¶œ³£#š±š$§oô3:Qi��Å3m’Õ„f×=ߥ¹’P*(Çð©HœÕ\iÒ=O6νPÎóÛUí,GcnÒÅuiÊÌ|*E¹^6šù1—ã^ ccšf+Wcz¯†ôc¡ðœ¿ž5)…Í7™J¯²L”FÛÐí[vO»ÞëQ.HCf3tlnÒáÆrÊâJB«›°{:`rTøš±G,ª [×ON% šËÇY]‘ª£!î[žú½u&Ǭ7D»qþZBœØ{NîŽbËÞY—}»¶Ûâª,ÝR.ßÅqv _]F  “dw(Ž:¸#Je…3¢ #�d£Eë™¥Ì L4½PèKE«+Mn˜Ø�“ëHc¶ÖH‰â{çÝ÷úV†ŒÌNyϬO­,<{×…ÕM3àÚ;FçGX«MÓ~úËëF(™&æãŸióàAŸ•ÍtàöÔl›·œ–>^×ôBÃ�Ý.³ÎÀòT(wBI •üúìxÀø¨³%~ßæðT ^U4�QA‘®Å%.N,½¾e½)×ÍFÆ¢!XÝÛkÏ]NÐX.jNœ�xäˆÿ†ix·«õFÊHÕ!MÅémjÌáÈ>¡‡• Š«‹ñ€b©³Ÿ]z÷!6o̲öôW³Í¹|6Ï…Åe¹æW6RÂÈrærò¦EðwªZYÓìˆIÀÞ9�C󢫔ԶA'+E *¼²˜rì 7Ð¥¶9Ïåbøü\9P9Ý(Gm„eõ‘sàŸí{?Œ�C1zú4ÿ¶ðqªÞí® •q,:‰Í–ay=EkùÌ=×òìÉ�o¾rl¿Ç‰ó1vYf'6[‚ÎÝXM™¸�c{UKz`³.ƒ‹£ £ð{†ÍVJœê©•kF‘¥Ù•Ϲ°œph�‡ë(n¦”Kбšå™WCîvQÙPjŒ ÃÖ°†õ'ŠzLOkþæßüQþµÚ(ql¸v žy&âĉ_Þ¦õ¸õ0ŽÆ¼ÿ1/­9¥zÕû;ížµk›ñ¿YZKN^L»I:@5r4„y¯çí™ñ¼ZE;3Á?�›Ð”‹z´–‰@ ¾2~æûïeB3Išž'Mec÷±ÿ¼N³³F«™²ÑJi´ ü�iÚµƒ~¢_ç`Üæ½f­lAg'ÆÛÇ­Äsm–î+MÚÞ9O¬|ƒ#•:Þ Øÿíü6Éù5V.nž\£Û:—Q¯œêB”%Q4Ûò³]GÄ�Z+­¸¶ÑéY&êÎ ûáN•§G/¯§ìžvÑTK[Éî�ŸmD=ð §Î‡#ôŸ4…ÿ×évVû†fÇÒì¦üè{åØž»–pa!yÓB÷;o<»§�šQð³Ä½N²]Q,IÚ¥b–|í;Ô*ÿ�Á(:Ú¤{1beŵú¡ljûa–� ;9¦Ù‘¿{žb³m(fZ… {£Õ­\„<÷ånž8•ÉÆuהˮ)%ÃÒ±rFu †4ãÑ[ŒÕ|ô+túô;=z¡¥Ñ1<ùxcau3å;/÷¢ë·zÌóÚhŠ~zÌ‘ Å’¸R9°Š8• J¡ã9L�;¢ðä¸E¥¢ÑÓ.ªcè­¥4ÖR¢žÉº!Œa9u)~�AÂZCNF½ª¹¶”â{z+ÐQËøˆP°j}Gß�®ÿÕMÃì„Ã}{½Á÷+fhM�Ù¼ºŒÕ.ÝÝ—èàã¿~‰ÆÆ*½v_¶÷]ËXà›/ôùéž«˜ŸvÑZ m.zï[Ö›)—oH®‹› Û§Æù3Fì˜{}yVtºr­�a kXÃúãE=¶ÒÌîç¦xüñclì'ð¼„FΜqyùå§øô§?ÉkÓÌ-`”"ýÑ'‚úûÞYü�Ѫóg+%mµ" cØlùÿûÕ¥Ä94ŸüÁ§¾Òýdþßýƒ¿VÿK{g]øêáZYÏ×ÊŠrI§k\ÇR,j]›u õ&Ú,¶*»½þÃ<óÅ¿GàÕxåBÂz¶}ÔC4/� ©–nÑÞ1än¿Üìæ§½AÓ²](%y )-¥Ñ»ûï jOCèÑi¼“Þ¥ÿD÷Êߡۯ&Ò 5Û†ÅÕ”~t÷ôbù–(–†u¤ªyòÝE’D¨<‹«BI˜ߢ3œ»rp> \”mçd]óȰ­ö é)•9gt–B Êë4Z VVC|ÏaáfÄÚj<‡óGsËé^h©*¬Õ”"Ñ Y;¤` kXÃÖ/êá8š'žðøàw±k×ÿM½îE W¯*^z©Á—¾tkš9ì´Î5?þ§ƒÊ“ªò÷κnµ¤/{r‡±e´¦ÌHE›zUÿÈ¡yï‡íñ2ËQí–‹yS@xŠBYáGM- K�èÒ _sþóô¡êOöN|Ñ]^ ë×^Šiµ¿Íf»„ëÙ­-ªÊ¬q3;Èï�yòñÒ›:’tËú²Ù6ì�õ8¼×ÃX:»™;Ó踃­;Ýh))%IŠëÈË÷æÍ /| Ïí†)�îË"¼ŒK?×ßÑpÃs¬«9ìš.w! %LSizGG4‹+)böÎ EãÏ}_™jFO*ú[Z¿ ð+%*¥"Á¾˜T¿ ÃiÒSKÜØ0„aJYš‹ëN^ŠIÍÖY(Išnß¼å\c„ã� ›§Æ³¥p]i²ÆfFѪÏòB/›‹3Ž�-áÅ –Û)Q(ÍI/Kvùl·ç7¸™Þ3ãÒêíq™qĆ5 $ #˜ÓÜ\OYZM™™�ffvÂ¥žoÕq� ¼­´n¿ª)Ju…™,`{½ó­�0´¬\�3;`w{§¬²cE_(w‹«é ÿà­V.Ü·VÎѽ~¦«bàlVô5#SIhØ\OHŒÍ4šo¿Øçƒ#š�žÍøù"îíG–Ó—"ºý»ˆß_§*EÅê¦!Èè½³n¦{�û/§Ô´º–ÅÕ„F[Ænß²gÆe~Ú¥Z»è¶</Áû"/4Öƒ´kh6dÐ닦«à[´]E³c©–@{*£eiêqIªWßÞ$52t¾ba9áð BÌ-~}7ÓÕ1�¨—ÐiYÒÔâeú,ÇÉ2dú’'ùÃf臥۳4;Fr:†y¢Æ/¿ðùÈ¡÷Áè(ôû”O�ä—¢ßcïÞUÇ •’Œz¯'´ºbÝí´ûÛœ>çg.Ͼò£ï+' ßµ(å�¤ŠZ)«Û>’Í»ƒœ•0²ÊÙ1L�»wE»ïõ²D{tÐ8µø.„±aµ!6½Æ’�Êó¦Ó·” ,¸Ž £ÎpÖ°†5¬·yøxmšùÏýÜßglì]ø~š¡š3g~“�~ôÊŽaegšù µüÉwW>xp·ëæ ØyÓ'dºi&¦Æw×´›5h:Ý**ÇÆÕ™ÎçýéwÀ,¾�.^¯Äß;i«íø'Nþ�1½Î]�•Í4(XoŠ#•Và¢ð|.”εo`þà안²9«éÁ&>ÈÂÑÎ]‹vüΘÃo}¤íšpK+7c>âˆÝÂÂRƒë7“,ÛÂ6ÖoÔÆt{µ»–Ã{]¦ÆÊÅ­\ŽÔȆYxΪ÷ÈQÿ¡{ö¶7@�ÂõûÐ\§¹Ðxu“ÞÚSôCèÇpuQš‰|°YYWÜXIÉD• �‹«fà|ôfKšÑÑÔÊ92#ǹÑ2¤Æn]œx{ïã©Ï¿Âæ¥>ëMÇä87Ú†WÎö¹º$ô¥N_šÇü8s� Áf;åØ~Ÿ™ ‡Z–Bï8™�5±kbká¾=BçÙjr·RÞkã.zOA2F6#MX¹Ó?ŠËN"Ô•›k)íž|gÏS,®ˆSR!Ó¿h� ±5®ÅoiÉ3'¦ÆœÁu^-eÈ@ ¸´ ú‹)*,ÁïçÂ÷jœ:þ»´»†GŽƒß¿¶” òP¬‘k5Œí[¦„�ÖÄá)J¤Í–mN® *-¾WŽð®[¹“'ŽC¥¬q+�XÉr‰-­•d�‹%°¾)ú€VW,·wϸ4;†VW sDÊu$¼p½iXXNØ5õÖÛÔ<gtDп±ºÃƒ‡¶BýV62��–óSõ8ÑS§ß}xôþï|tÑŽÖdv4\¹‘R)&ƒP? :lu �–ÁÑðýï*ǂֹNÊ/=ÿc|xþ ­ òñÒq¾°ÿ“Ü\^Âw½�Dš 2I*)ñZÃÊFÊÕÅ„‰Q¨Aý|Ïš{'Ë0q [L TJšéq‡S—dqrkå‹ ´D¬7Ìë^[…ìÙ—gyôú¢ÏÙ;ãòÎ#‚º\]L™0ZX äquŽ„”–¤bú0@†5¬a ëíF=|_E–_ûµÇ¨Õþ!““1Q”råŠâÌ™SüÆoƒÆ¿^Õ­®¡Zº3´ÐéÉï µ²b¼.ߣTÈÒŠ3î}àC±î°ot„翹"N…ï ÒÐh[ž}µÅ�¼·H·oyîdô¶ˆ}óêö%÷cbt+ì/çÚ[«ˆ…×£; IDAT£ Öjú‘Ãî)WhVE�7áR,¹ø%Cìû$ýˆîñ­ŽÛãXôQl9y1¾íçí…–JIsífJ¥$hƒvEðëh e;-f÷´eï–¡�¥@±¼‘²oÎeï¬Ø—Š;Åɹ ÒÌn�“¯†£H ¬nX~÷|,Ó¨ýæ»oñ“ï/‘øÊ3ý×|�·%5]ÁÕ›)�ó¯;™~F ’ã%óGá:rcG±\_ÓÙýŠ (ô+Ï�D+’Žau1‘múöó‘XN^ˆχüãG±lè5"Ð.d­b|‘eÕh9+9zZ-iî4ÿnG?»}C¹¤éö,“£š±M­ìSÌQKgŠzÇ]Š1Ði$\y±wÿ3Ÿ^·(E?MÓ»Žùk¹¾œÐå2=î�¤–xWa°4È!Öj~õćøÅÙïƒÑQT¯Ëĉ|ñþ�1YkÐjéÌBYr4ò,ŽnŸ� ×DÝa²îpúJD+Fªbrør¬ø¾&æ4kKè9âì–#n·+Ï$Ř­œ¡sÝùyS,l!xi–¹Òêöκ¢¥s5W±{ZÂ_'G )à‡~jõ‡ö£¾÷ Q"æ&Ž3@†5¬a ëíûÙK\¸ð›ôûŠ- ž¹eðØêZK2>ü½ZY%ŸA˜U± pq6lEsöëQ“ú¡¥ß—­yµ¬¹oÞ#µòç­7 7VÊEÉD!ûÌÕ’ff‘då²Þ9Ø Ì*Mp¨ˆò§@Ý$:Ó£×7ž¸Œ}祥åx:Ž"ðDgñ©ˆ™ çm ¡Ëm=“Ä26âRÆ ¾ÎÐ$ÙÚêÈbŒ&N å¢bö GíHeÒ+}6—"ÂNJØïÓ‹„š´ÑL¹´°3­ûnŸÛZØ7ë²ÖLñ=±â�¨;ŒO9ø¾ü~?´l¶ ËÂiÏ7è:ËAé…bO¼»¬¨•5� ¬ùÐáe”¼‘šƒÚí¢bK÷Jœ¥¼[Çrc9¡;ž+aoLŽi¾ôÝûæÜ·íøßZ‹« »&��SX!ssÊsŒJ‘E‘ZY³Þ4<ö€‹ªièYºmC£!ô¼(f€t4Ú†óWc,†v"z§¨Í{\YLð<¡çhOqq!Þ²äöU¦£‘|‰…å”#{½×\_g¯DÌMzL�iæ&=jƒDû­ëL–Œnå«Ì"ZqùF2ÐoD l.&\¾’XYöÈs·×·|ý¹>{ç\Þ»_†™[Õí¬Eñ‹Ïˆ±û=P¯C·KýøË|ë‘O2Soòé¯öDw“}®(Î-z-k›éÝ™ïñyátH’ZÒ,‡§àý�'ðÒ)œåOD¬¶ž=·fÊ€ &#U½ ˜ŠÕoµt÷äô‰º¿’ü÷ë="ÛA¡9Æ÷Ññ5µ±üJsz¢î i"K•àݧ>{Âöcq)ISËZà h(úu¶©ÛÉu`nÊe¬¦¨Kj„ç\ÉlpeÓ%áh"°Íšx|×P.¯ì9ŠWø+øõ?âÆéëëýâc“Éé¯0�?rî±Q¯'4;’þÅïvÑÙgT8®Ð‘®ßL˜u¸—¾¬ZŠ�4S® ãu‡w?°ÑJq•é[õiW]‹ÝK{F�}ñõ6n”yìk‡•gÿ Ï'L`m3¥ÑËËkKÉ='wï›s™™[ÜBf#kŒ¸�T Õ’âÌ•˜ùiÜ�ðÇ>È7쎢X°÷pJcŠ!&QtÛŠÖ…MÚ7ÏÒ‹ÄNte#Åɬ7{¡Éœ�„{ï¹’3±Ñ’æç­6À«›)“£�/ÂêÃ{=Ú=³¥õɨ6£ÇÆI=V.uH+âeOñû¿ßæO¤´ºÒì´»f�ÅpuI(x÷’Öí{Šf[,j>06âP ²-t–û0Þ³ŒTRVÖSFªm`"w°ÚAE=‡—eºø3.~Iãv =_ÑYKé=ß϶Úf °ÖpòbD Z˜»Q• ŠvWîÙ±Ú[·|ÊQ�Í–h j;Y�‘ªP =W�²RQS;¨x)²¢Cò2­�QŠvÏÐ^M#A#Ú=§Fî�ÔÜÛù(ø[ß{£™05æpÿ~Ÿ±�ò&:NDwQ¯J&‘10Z“¦¸VÑš/S)©-'´\ïäd.UÙ¯çÞ8¶l´ÄEÌs¡Ñ¶xžAkÍïþa›±ÉÑSðq*ϼ§�÷yâáÂSÒ•Jø�“?Í¿˜ÔjÐíÂs/ð•‡>ÆÔH‹hƒr:­ëB%âbe18¾ó\>v, Õ1ÌÏÈÂbnÂ%½ð šqJ)ÒT,u%],o-½ aŠ3zë $§ç”/…üŒ0²tó!“×.®>ôd™é1±’^½ÞŹÑ%ÉLĵmè‚5¬a kXouøäã~aŽ#G~ˆ±±ŸÄq`sΞ…çŸÿ¾ð…¯Óë™mÃÇíP�ø–áÀ†±4ÆXbÅoÿΆßj›©NWüþ'G5ô±ûåçÂ�@5ÿ°Žâ »Råßéq‡©1á±û^Þ«,X‚0²×ÕÓGUýlüèœø–º-Â0�\l>÷ö·W—„K�#�vÄä¨P‚ðD‹a‘Fhy=å¶o»[j tw¡ÙµÌO»Ûøø r-OèbÖZ¬B¿cìS°¾'Md›»Ñ4üØûDlÿ¥gR\§·…¢¼Iö­›ø0¶Øå25šÙ²zdÁ^ò’Þ¢ƒÁÇ}ÑÞd‚_¿¬ñKEFj ÷HÓ]˜Îzç–YéX¢(¥’¥v[N_ŠÈÌfK¸Þ7× “u= A¹®lÂ…ö"Átoæû@ærUVÌN8œ÷¨–v†çE±PnM�† fý�þßåb’Ø¢1ðý�„®£áÂBB»k8}9~͆ù^ ’”†ù�½3ÎyG°Œ“HæƒçÊ]¸wN®ŸÜ=.wyòKŠ ,ו™u±Cx5fåjL˜å¡´º†8–܃…eAjÖ›Šù)qÄZÙLð=¹^¥1ÔŒ”áÂõ˜±cÁ=?¤’TL®.%š÷8vÀËtW2<¹.ÜXÙr.ÓJ‡§/سï8T¼¯¿Ô¢Ó“͸R°´œpÜ:Y·o9y1zÛÎýí¥3‚¼ÍNHÐh­¢)új›U¬¥ "é¹B·;¶ß“ë+È]w é2ûë mG¿ghµ-al²<j£Î_�q]¡ …‘<×Úƒ«5Z˵á8PI_~¦‡ç*žx8 TÜyŸ¤Öç_œø)þÉÔã02�G�¿È'ßùï˜Ë¦ú‘¥’iζ4"þ_k¤ÌŒ{w¼ÏÊEÍž™láÃÊ5ƒB‘˜<‘ÿ‡mLjµÉ¶¹Ql9}9ÂÍPcÞž‹ÉËh-K/eüÌÈAÒTÓ¯ÉVôá#>…ty·°N²`Øl%ÄÏmÐÝ\•Æ)¶\¸&TŸ8É n9Öùð45ªéö-Å‚3– ‚`Øí²Ù–´¹É»·ë ½×ÊŠJY(a;Ãó*ã�¢ËÆ·Ú$©&I-ÏŸŽ8ñûWÇ7Û²÷S>÷­.ï~¨@¯oyæ•ðŽ×ʽ–5’„½3÷!K·ÂÃw‹Å!ŽåØÝçá{ŠjEãîóp=½ÓŒ-«« ýK1ýH†�(¶œ½“$–ÕÛ\ëÝžåôùýnÏR ,n6z.ÜXI­Š>¨ZùħÙ5áÊVÉÂéK±hÎ¼Ü W’Á{‘¸_Ý·Ç»«¡F' S#vê Ïæ0¶´»’„¾´šrxŸG·gYÙHØ=í þ^>ñƒ�d�ȨŒwËÿÐL�:Yf’Ð)Û=C³c¨–o¿¨hwÅ=-I ~æÜ%º<—n¬&ÃdXÃÖ°ÞÄà±3Íü/ÿå€'Ÿü¿˜�=‚ë67-gϦ|õ«ÇùÊWò4s÷.¨Ç­è‡a§¬ÛY¸�_Zsu¥¤ Jñí—BÆjZ´´# F/z­ïûë ùÿíö-•â6{ÖÚÖÖÚsÅ[~d®LjbÖ®DD±É¶Œ 룖ɛ_±‡kѱ `m˜PXÛLåeØñ¹ºÔß!@}½æÅX8¼ÇcrL¿´:A/”¦øÚRʹ«1Çf.6âþÅC÷ùN{n ø)ÅÑní=TG–¡Þ!ê>I–Î+ŸeeÝÒî õ"NDPÎRËGéÏ|­ËÞWz[š®~d3W$Ñu²,ß“Ín±Ú!é•iv¤) |ùu=6Báè4Éæ"í“çèô„«ž ¯;=Ë…ë¯5¸Ûg.4›­dà¸3Z•�,ŠÁö~q%ͶÛceàÔJ®‹©Q‡æ[õm”0WQ,*¼™€‚ÄaûJ�0– 6kç®F²‰ähV7R>óÕôßÞÁÊh¶YÈP»œ–Sðekn „±ü»ÅÄR*j UÍüŸ¤î7Rºg#ÚmC˜…Ì­lHjz³c¹º˜ì8îwÓ?ø®4µÝž¸9Ùæú]™¦Dg§ÍŽ$²¾erÔèTPP.J.Ïü´Ëþ]îÀuk@A$Ø ZãW‘Š aÛÄÏÓ|ü³<ë{yBº¦V¶,­&4î�«mÃÞ—zMS)Š{Ò �ÃE6ü‰ ¹b,ìø˜3:4 ú]Cs]Ž$‘a#Oµ_ZMYo˜»ž•ýO1ËúØhÜÌ-*ЊN×Ð %õµßS\ZˆÙh>øƒU¾ÔûY~qúq¨V¡Ýfü¹gyêñÿÀÜ„·¥¯Pbe®” QŽ£ˆ“-ýÇ¡ù»J Ò(Ç6Z”íX³mX\K÷¢S×u¸¹žðÀÑÆ|í¹>í®!I%Ûeפ{g ˆE4:®ĉ :w>@ù&Fåü( +ë)I*ïšÕÍ”‹×‡Ȱ†5¬a½yÔcnNówÿî8pà'(—Lj"Õ+ðÝïJšùsÏmO3·Û�ôƒGºm@ €ýÆóas~ÖÿV¹è¼Ç˜­”b”МLlø–ÕÐ�•Z•à>�r~ôÓÄ—¯ró|“°× ßýÈÀªõå3Q w»¾"I…Ž%ˆ4Úõ{äâçÂeI=·ëÙݾauÓpáZ<8_®«(k¡\]\Hxÿcn&@‡^U³Ù2LÔ5ÝL'w»Ÿwx�¤›»ZÑKä3æÃÜ�jÿœÇ¡Ý’�ÔîY4ð♈+‹ /Ÿ yÏC…á2¬a kXoõØJ3ÿ[kš‡þ##?�ë&llÀéÓ./¾øŸùÌíÒÌÓ; Û)W)[É烰K6ýåßmþ»_ýûãjnÒSß{EB£ŠAî¯Ñ¾÷�¶gýÈR+k’Ä2;élÛ6fˆ�£|Ce$ÅÛó/íIÚ%Mg¯Ä|ïZseÛ=˯}¬ÅžÍ;î èö-_¾OÔ[Ës3ã’£P*hAt”4ð¾«QÊ`Œ¦;á²gÖ¥\€Rq�ÂÞݸſ@¡rÔ&�µûi]ý2Ýk¿C·ï%’g§ÐjV³—gÞ´Ÿ¾xØÆÊP�$Ð -¾«¸º³oÎ{Ýœ‘8—°ñºƒµ–ÉÑ×gɱLÕ-‹ëvà Óm+>û«?ÉòâÝÐ2R‘´ïÉQ—«K·´šÞ³àýv×Ãá½ScB¡*"ºµY“x:³e;ܽsîÀÚ×w¡<¢ñæËž‹ãGô[�N—ð»ë´»Y0[l¹º”�¦°¼žÒ wrÆ}_Ü|oKˆ]#‡+7bŽî÷ßt¶ËZ#e¢ž‰ßKŠÑš Å‚è]O46ß„{Н}qceb×üÌ3ßZenÒ¥Ý5ÌL¸¤‘啳ZIs»];ñVËuõŠf~F†£z% t·1Ã‚Ü—Ž–€ÑcýmCw.‚D+up ?²ô›†�ó½PÜŽ¢ØreQÎÇêf ¨A`ÞòzÊĨäi¥båJY%2œ»ŽºçªE¨•ù½xŠ}» ÔÆu+ë‰ »Ùr¥P„â#?ÈæÊç_ù´º†}sŽ’æeC†Œ«‹‚ä5;†µ†y[žE z‹k7#¬…jEqpÞcb$£‡e6Šˆÿoý¯óÅýÙðÑjñ;ÉwùÉ=ÁØÂÿ £'j%Ïš0@ÞˆËF© ׳ç)î±3'CV7 —dø#ÉŒÉy_hŽŸ‹yòñ¢ ¬±ÅqÀ—+K wúábQž=2ÚÖ¹«1‡ö¸w¼?™>ä3h÷$‹èñV7Óá2¬a kX¯‹z8Žæ‡Øã˜cnîÃÔj.a˜pù²âÅ<õÔ­iæ·ÓzÜ:x¤Û³m¹Ý[@훓|‚zU3;.ô$‹@âs“âô…ï´ùþGËx™Ç½“a6Óã#åªJúw«½n×B»›òí—û|eIÉ^fðÍBêUG•·ø²Ï·Õ3å’¦ˆÓ“ç $NÉ8Ïš°ÕRÊþ£ÓI£�±ÿ˜èÕßçz£OÆôÃó™[sòbHœØú�[?¯Ê(bQ&+¯k&G5QâÒlN_ŠÙ·Ë•ítöß§™^ÃÑrÊç&]j•­�#wJòÝŒS*SÕ8óL<Îå�>OTPx©â3Ÿë õ8ž��ÅÕ” =Ã÷=¬‰b ÖÓúí¹È�úŽhPå¢lŸ�Á¢PÚ`¬&J,å‚bj—O±àS™³˜J CLz¶ÅÊz*bÖ¨M«#¢Þ‹×c6[f€¸Ýé¸'‰¥+4›T¬=ÇG4Iª8s9fÿ.w Ò¾ÝuÒx ŠÙq‡»sñ» ¾+HM�‰÷ƒ’Ã�ûßþV—4‘ÆèúBÂÉãñŒóÊEÒNœ�Y^OyÇaù\k™Yð¶��£\ÒLdy•òÖf=§Õä×[j¥‰œs(øà¿¤¨4Ô56�þÍ„õe3@z¡lí£Dl¢-·ê˜,ñUà¾=—’,�PáåèªŠÚ §#;`Œ (¯ûý2½@7´ìžvÙ=íR-ß’¢žQžÂfÔÆÊ÷í÷áS¿ú7×4iÆ¢ zà€�ëÀןïcíݯ±·R…@ñà!ŸK7öL{ƒÜ”rFsCüÆâ_ã×v?2>þ‡KÏrýÒoÁO×nûgvz–J)3 ê$Ô¸ÕêîKš­¿ÄíÊb�Ø+�Õ>p%ȪFèlž›YmgCy±�g�±š°Õ¢¹-�7G‚EÏ!´ÀvÏrpÞÃÞaúPŠ—Æn_–fy0âvúa kX÷C=$ÍÜò³?û÷©×ß…ë¦lllO3¿š?«oõ�”«˜×º\ÝŠzÜŠ~ìx ü£ÿ©þg\G©W/Æè$ØDuKQ‰d[ŠHɶ\âhÙ‰Å+ösb;¯ä•¬å8Š_\ôübËz/V;²­Ø–-[T±eŠbI‰,Ñ�¦—;·žº÷ûcŸ{gH ½åÙkaÞ™¹÷”}~ßßï[4µõ„ Ю)¸¾ð�6yO`¹ÝÎ?”ò‚gOFìw^›ÍFÀ……˜C»ÜlB³‘Çád†I BjR%ˆbc\ÙéÐW‘ÈzJ#†µZJ0›w§ØP+���QJgNDú�“®l«£{IÛsË Å¼dtÐf׸Ñ1„‘q8j‡úŠVÁË53娖ÌõUíåqlÐöºS×19~Ñ|Þ�ªäÁ'Ó°4s-ÅÉs“{$3ËiOòÈ3!ýe3){MÂì)»&œÞk¦ß�ù�‹?Éÿ=~ h4ø·KqGî¿r¡ßâé!7ïó¶nêþúÑ{§œÞ>'f:Õ 43ó)û¦_ú^²²½\f¹%ÍŽblÐé%»ï³yþLdOÅlâä·5?'ì·X«™ ×ÖÆ$¢ ™_‰¨n=¦}¥l*g™k+NÌÞÚ¥ò^¸¹æÜ�”}OKÑtï=XÛd{m¯íµ½.+ø·¦™ÿöoßI¥ò¿Ð×—E)çÎ Ž?Ưÿú·€ç{ %k.óbÊÕfà±Yïq%Ðqy®ˆÄž)gü쥘}ÓÕ’EÎ3®":+*]G›\ ÉM{]6œ”\ÑÂÜEíR¼<õVkPÿ”(:‹·ò™ÒúñÅBàĺïôÙ’Dsv6¡˜ï¹ÃO½P1™é#[ðíç;Üv0÷Šp¯óg lG0Üg Ç‚oBé\—žè¹û°®‡°¾ò.¾ð¥¯2œ_¦¿b fK þøO^àÐn—fÛæì¥WŸÝ %i°ºU‘¤šN(ðÜ�ŒŠ7ßê÷ *o“Pßôp šàçƒQ’ö3´^xŒfÛœ«zËä²Ä‰G±&ïkÂP÷,q»BïBNÒh©k A¨3‘µÑÍLŽ8ÜZô(ä­ŽÑ HiÌ \Êw•õ¥óvsíéÅÒzC™ ËP¥Î<Ö!I;=ÑõâjÊÒÚK‹z_Éä«Z’ õ›äóJ±{~éâU ‚b^qê‚¡”ŒÙÚmr+r›Äï]Í€×gá–ò9EZpˆSEt*d}½CûÕZS±ÚPØŽ@E»£±¥<[›v­ùò‰ô¯xꤌ‘B1oÎéÈ€Å[nõIVmËü~ÇôO8äJ}bõÂ’V e¾žD÷€pš IDATt.ųbàv`4)Ë5ÅÜrzÍ÷�°gÊáÙÓÆd¢ÑJ¹ýPŽ�Š$Ÿ“¸™•Fœl8d;15j¨yAh¨�{&íÞ¤µ;�rmóÙˆÌý8Òo(W¾·aíëØ6¿3ÿüêH>Öë|¢ö(ßÛ÷»¬5\Šy“­ÑÝÔ7»ŠTJfúcÛfÒÔ ÍÔµÞRìŸvx¹žN7�£kÎÇšZCõ {€rQò†[|N^ˆ3Ú2Ǭ�¯»ÿÎAÜû¾A›çF×j¸›ä¾yIi&TB ’Ä4Ö ¥5ò%®%7³úídîc›ÁGï³l×Ûk{m¯mðÑû{Chþã?îq×]Ÿdb¢)�Öãäɘ¿ø‹³œ9ó;Ùsžlêq%‡«ä²©‡º ð¸|òböÝo÷ª’»nÜãR.nâË ËV$©$Œ4ZX 8ißþ‚çß-.Ì®NŽŸ æÚ¥K�hÂæÿH§cD‹'Î ší•ez\^´ô¸d©¦Ñ2N-®c¸ÑãCV¯°º¼ÖºgT�‰›©Q‘ Ý¥ rëŠM]�ãØºÚçQ<”ˆ™o¶ˆS�ãO,å÷ˆSx~^±°šò¶;üž•ì³§¢k*|/_I Óc6ƒÕÌ�Ê=*B’jl[#P¤©$U6“Ã6Ž+p]‡R¿ƒ³§„»œ¢sr�…cQk™vç×é_·.#êNÑ/§, ƒUËd–hCm cÍŠ±Ñ¾Ün{ϤÃóg"Ö› ß³øÀÛóL—Î?w�(£¥¦i×(Ãìu—¯©»—‰ÓµnNRzöÈWº†vO8=0Ÿ¦š 6ŸÏ¶·ÈöÚ^Ûk{½ø€O~òÃLO¿‰|~�0„ÙYÁ#�„<ýô¯ðÔS+lXëj^œhžreg+}…i‹¸ÂŸî×­ý�«?:=fyŽ-�‚/´ŸYãz™8TækÔ*¤©ÂsL·Ûëd9´æÜ`j*9ý9W­3öÂ3B‡‰öfæâÄŒú».Z/·º”–¡>3ÊïÚƒ¶;6˵”S3&©;ç :�¦\‘flиŔ¶$w \;¡˜kãîœÏ}KŸ~Ý»÷î –‚úÚ(Íù'üv`üã-Å¥%ÃIïºRÙ|ò³ëüл‹×íИB Z=kVß3E:âŒþŸ$&ȰR±˜¸ãÝ8Åç ´i6Ê'ŽÓšŸ¥ ¢Ds~6!Q°ZKYoé—ÅjLQ'ºW  ’JI01d±Rß(€Š—Ÿ…‘6akÙô«¿bqkÞÍh™KU&|/U-¬‰ž[Äʯ³¸¸NƹՄóg"l[Ø)fêñÜ阕ZÊ@ÕÞP¯×Zk(öNÚTŠ‚B&FÞ @̱P© ¯d12`ÑW¸ãNÉÇu"â@Šö·Ú†Þ–ÑDVë)kuZ[�+Ÿƒ8ÑÄÀ��3ó 9oÃj½©p#Îo¶�íéâJÄ��>J¿xÑl¤ŽTM®H_É¢š¥§ç62vÓÓ}O°ó€Ë#µ{yqõÙYí·“› £Xó'Ý¢�ÚíÒ4<\W­Ãæµ²ž²sÜa°Ï¢R´(e “Mc²ºW­Ìu29b2"ÜlJ“/:›­ ÒŠõù„ ÃDZÑ,´@..löŸžIzà?ˆL^ŠmbeÅb^ÐgY6™{S7ùý•N¤–j)CU‹Ti*}Éá}îV0e@uìL :äwWz|¬×ù½ô!Þ=õYš�g#€Æ¶>ö\ȇ<*EÙÛýó~vOZ•ýadò1\çå§T¾k¾7UšDA'Ô& S_ùõ7íu9²ß!­an¦ÕsìÀ0R´:Š ó Q¬Ü—wƒ µÞ £.¬& ÷Û—Íw6VÞ—Yhaf¡Þ1´Xû2ı @¶×öÚ^×ÁÇÆ¿ñÇÙ½û]T«ÿ)É´ðøã_ä«_}ˆ(ê Í»uczÒ—O46×›—ùO?TœÚ1f‹$²� õIJyéM΂^]O‘b£—“Òü'‰W>N³#{úŒ™Ós”´3ybiA‡1ÌÌ'ze=í=tá• i»…ñø�M¹ zy]·§.·ûø¹˜7Ýâ=D7‹ÀÙ°ÔôŠ×ßEiØBŽO£Â;Qñoëýcë;g¾~T‡Aì·ÚŒÅiC“¦)iW\ª7Ù ;‚þ²õ—¯nW½ÕÑTJ‚¡>«W89›Âóª6þÄ©�ü:q*plÓÙTIÂÑûîc¤?% �ÐPx¢ž9i¦×"Šõ² ŽÉs¬=Gô¦3£ÅZCq~6Ás4¾g2 Ƈmª%‹RA�÷^6YêÒuœ¢E>瓟Pèâ*m¡/­²|²I'L‰Rc…”’µº&Q‹ J1/yîLÂë_?®}éÕÃsè™xNFÑñ¾I íŽéꮇ?ò#?3Br¾Eý…&�ÀP×:¡ÉgˆbÍÓ'6Rº_©E±m a¨™�…'ŸœåË_¾—óçÏ/ÖzôXJ?þýŬ–dfu)¾ôPçW6Œ+MBøðß/|ÿí½›Æ‡-áXâ–¾Š¥Ky¡sžÐ]ç×6–†Kk)©2âà ÐÜû™Ejõ»iUVSF%wôQʸøÔ[jY‰+@.®Ø¼ÚòàÒŒàû+¦Ht,c]š$à9FÔ¨1]¸C»]<—^A¹báìŸâ›“{뻋‡ôLN×j‚pökt–¿H:t"-Oœ�QÊÝŽ·Ö¦`HÓ í‰•å2ä}Á陈ݓî+>Á‹«)¥‚qµòÉ@ÕÊŠDSZR°ÐµfÍ“;àòà“¬�i²²d³wÊé*®¬µ9}^‘(�es¼z ŒeÁ¾i×drdñ.éæ³Ø,¯)írM⸗Ùyf:Ï”‡m¬©~,ËCFk´lV.¶—NG¤Ö)3ó Ad¦?Ã6öõ»Æ�,µœŒo_ʋ֡¾WBmM¥hDûƒU£ÿqmÁzK#-¨)-¨ù#o&]º@tüV¼‘K!”æü×j„‘qvzþlŒV¦ˆj¯î T$‹«)ýeÁÎÝF¤ï{)²"7–ô••¢dv1adЦ˜”ó’Ã{_|>ºl!'È�ØÈA{%¡jj-EôLbÜè·4žc€ =R—v$ºt°¢`v)í¹]ÏÕl+¤4vÞ7î56¿®-¶äqôU$Z jk)JÍ�ë€"mA£¥é¬ÄFŸ%�Ï.¥¬®§¤Š-ßIó`ß´Ãürj’µm‹3#ƇlÆ-s e³4Õì7ô±ÅÕ”áìz=?Ÿ09l@a¹`(–[5ÑÎB Yñ'F‡ÔlÜçÿs~·z“™|ÔjüzíA¾ôOhuD–S¤ B³ÖÛXÜíñøs!wö¸÷Á6ͶâÈÏ\– é8«·ýeë%÷ããv¦Ý ½’vcëþ§²i„ÙC 1&�¦b~ÅØû®±êmu4çn?è1»”pq‚иi�ºSx Jâè€Ý;¦]}ËêºêQ·ÈöÚ^Ûk{ú±yñs?w��|äͦi+Ù6LMAÿ8·ÞúQÖ×O å34°¶¦9{6å/ÿò©ÛÀ~óññƒ{Š;‹y_I)ˆb8´Gqä€÷;—“?~è©à¹Ó“ @ò )ß99lËVGÿÔ® GõW¤.æ¥Îyß©c�ç ‘/w°ª·h Ì•o^¿ðí‘'n~GtÛ™‡Àu_|¤cŠ6»Ë2©äÏŸ‰™u¨·¿'¢—x�0:`òF·a:ofŠ@ÖD±¤Z²?Xbõ¢ZÞñ†Ýƒ©ð“‹§ãµ¡Ö©¡CýíCgïU:Ìœ©šEKŽŸ®šÜÝý;I5íÀ<×ê )a jƺ—÷p¥b&ˆÌtÆ’¦˜Ø;åd]Ù£WáxŒ7\ÄËïeá¡ÓYî‰&NŸü¿ñœß'J$õVÊÃO‡¼÷M9:¡fv)¾bÇöš§±fǘÃ@ÕI~�òbˆÓË@±ð]ÁÔ¨áer{(‡Ÿ«à�7QÁQÜ 8µL}9%ˆ2ç«uÖ g.½81ý…s1»':¡áŠË,Q #ü^]W õ½òÉS'и®)ò’D32`qC©ë†${:×\\L¶øÀ­Ô'žz’ûÿtŽ(6´´›ö:ä|I’ÀO=žWc:p¥ißÈ ÅÔ¨EÙ¢�7E¸¡ƒ™÷a΋™|ìßiÒã7çqxøE gÀ"oEI¬ ºÓ8d…yk–kfzvâ\‚”°¼ft;&±]“ó�•epšó%�NÊüJÊèÀµƒÁVGŠ_N²\K™³™uÍ-£X.®¥XrÃtÂsÁ¿eíæ4«þŠFS'aŽ'NE86=s…çOÇ/ÊJy5ç§�œ�MY®¥Üé21bÑW²(䲩¬•][¹`ÙæöïpØ=™Ë(p™n%kêØö¸êæÐHIÏå)Œ •ïØYÅ÷­üÜv<V×øŸçæm£ÿ•VàƒÖ=Òl+j�4ËëÑTŠ�PsßãRÂ�.§fbN^ˆyÓŸzK™=±­_|tW5Ó? aáall«�Ë´—£âDcKÓPHz °k&pülÌô¨Ý �-À±-ž9ñ¡wPÚÐæZÅø°Å鋯ò÷JS;›Ú‘QuƒX³°’P,È=n¶ÈöÚ^ÛkŒ\¸0ÇÚš©®¤4žîårf ³G¡Ô^”ÚKCƒú�~ô]/4›ÒZ[,{i^ýÜÀ7){u¢(¡Ò‰(Úi¥Ø¸[)ýÞÿáG+í±!‹¢/û‹IÞI÷Áç:àx.¯’ä�`Ÿ=‘ÿë‰Cÿüzñbùt³¯~ÿ qãømN*ê-�–FBoL7, �ž=21|m¶¡›E³�@36hà±i“ÏIò‹õõ¥4nbì[s®¦´«Í¥ÒüÑ9¢Öª´ÕÐÉ4a¤õÑ“™ø7Ù°ô}9IW¨=Ø')ç%Óc6JA)j ÅÅ…”•uã%…é<º¶É<év;ó9ã°åu©žÀuKTû5r_¡>„pþˆøù%¦‡S..hKóíç;æá*6¦y_ðõo웾~¶¬]Ý€meýMâäÍt7¤©$ô5Žm1}³‡G õ%ÖÏÕY™é5´3*R³m ‹. {9:RÎ4Û›®¸q-Û¿Ã!N`½¥¸0—pãnwKá±Ì-§ìœ°îÏr-ò&‡ÀweÖň÷=I¹,±wùV^øúRV˜›´äùå6¶m~Ikî}°Ã÷¿%o:ªÉõ\¿øzÓìèRÚòÆe˱· â¥Ô=ÆÑL íú‚RNàŽÛÐo#gcšµ”Å–&j›"1 EïÜlÜ뙦fó±¼0oÒÕ=Wd׳™‚t)ˆå‚dvÉ�.Åìå¨;]s‚®ùÁPŸÑ¥”‹’[}¯G±r3.dž édšï�bøÒï�f~y…f­C˜‰Æï:ltO{Á‰—¦ë±Jɾ)‡v¨˜±¬nˆã»÷‰VæwAcÑ—ìßéôl��€]dff’*„Ñ«¡&ʦjq<ÂXs|¦ÊOóãpÛA>j5þå̃¼½ôyjMKª^C&µ¦fn)¥˜”Í>a4+6�VJ'Tìšt‘ÎÍ&tB3ùXZK¯J¡Ú àœÌ~·ì„ÚÒ~ë%ݳª%ÉîIc%\oúøs!«õ”Z×íNG­.¨Ìù‚‘~Áù¹˜÷¸p:Æñ¤kÃ,{þ�ßÞµXÖ™°=4¥‚¼âýº @¶×öÚ^×'!‚Ï}®É=÷X8�rì<ó T«CCšròyÈå”±t)tÁIµ<®÷CšòPü¾ pÒlò†Æ wޝ0¸¿íwdÝŸiÍóþ©¿Äu|Ï%?Qd¥VxÖõ F�Ý>ÿěΨٯï¯ÔϾëÌ—?¢‚x€(Ö¹02ô’z3¥˜Ñy’h,WdJÓ´³ÎØw :mÅ`Åx¶WKÕ’áþ{®‚K««Áô ä™-OpéøóÌ/§ìžpL�îH>ûNqÛ!Ï;?×$U& Ñ¾‚øW\¥¿l¥Êкª%‘¹™¯…‘¤œW|É™K Ž cƒF0[Ìot4GàYš|>›ÄÉ}nß3èö^Zõu’ãOÓšÿwt‚a’O|µ®6ô2oÜwÏ�‰˜µMÙ«XKk†Òä»bkFÂ&ÞyeÌÂëˉõS-�$ÊhPÁZ=ef^S9ŽfCÆÐ—SÒÔ|Ž8å;NƒÂpÑ[3>l15j&1RˆÌŠØ$»ŸºÅF«âئð²¨XÜrÀxýMy®e(„þ´‹�ÏáåÒŽ¤¤tŽ·Y¼Ó Ž#éšgOÅô•efšÑ�J’/=Üæ†�îk² ,¬¤”‹YnN×>¶+B–�d®nJC.6öÈk Å¡×çH�N[S?Óz&$LèÙ×[fRpaî•›>LÉJM‘sMA¸žuä‡û¬øè„¦³ì:"sÛøáí@„šÁ> �šóV)e™¾Àw6é�2ª]¾ ±+7�¡1‡o<Ô&—Q�j‹)Ï<�óæ~·Í5ûå‡;ì�4A‘êµÜ¤œ›K¸e¿ÛË êF‹X3¥²�…6šëËuÕ,|Õ“ˆÌñ-NLçßäØ˜î~”¹Q¡¦(ŽÍŽð³¥…›e“�Uþ×ÙøðÎ?¢RγÞ4Ú‰K‹©Éñhê× çcívISm[�—`K‹ZC±°œpã�$Õbs¯`f>¥\�WƒÙç°�,;$1ÔñëŠôÍkç¸m®Ý >Ô=]G¥h±´jLJùnp¡ÑÛt^ΓؖqLœùíã!ãƒö–÷kI&ëØ‚T›ßÑèhV³pÑm²½®ûúè•(nÞÜ ÜL…¬´X>õé'>ý×ÛGl{}€ŽË—…R¿ŒR?ÇØ˜æߨóË¿üÙ±#‡çY8Ž&—ûAÞð‡ñqmõ÷s›o>î ñ}p\(ä¡T„‘aa7�hÝ�«…8æÓÑO":mäZëØ ¿2ý¡1QÏ]ŒDØy`t¢…H•¤%Zí�zK³ÖÐÔ›šµFÊm7¸ì·yîLdÆê–éŽ:–)^Ω(59_°Þ0„á>‹rÑÙ’�îÙÂh9Êr^mRe:‚¿û'Ë´ÃÚ�„µºâO¿Öâ‡ßS$UPkiî"¸¶Tâ+$dß°Óe¸ÏPaºNX]ᤛÑ.âÄâŽ=SðÚà:·hãævSÈ1½þíãÃâ3axÞ$vÇšFËáø¹Î–Nþ9f—R*%‰›M…ºøJѺ¦¬ €ZÃDS#6»'í,$R⻆ºEº÷³- VyP|æÏfž­È#»<¡»V R .>ÛfÉt"cE*²N÷w|Ü/ë”÷—%»'m«Å\—îaŽ{×tÀw<ÎÍÅØÙM¿ÌåÌ7/qó•Š@Lz(å£VÖižn°Ô6t°(Ò4;ŠZ]±V7º´{—“‘`Š]È{‚¥535ð_%øk ß3éòIª™²Ù1f“*2q°é;”‹‚Òþ�„YZh™{Î6ú‡s—bv=fIã�–Ñ0ͯ¤Ì.%[EðßáD R�\\HXoÁrMq`‡MÅ"ŸÛ°Ã�Íø�ÅrMqòBÄŽ1Û2_Ÿ1™*Ý Rÿò€FWàú¦ØôÊÊ资õ…„ ¤—Ûà{F²Y$ïJC ó\Á@Y2¿’26d¿&yÆZS«+FMƒÁ€uC}ó2�¸m›ÞOWÜî»&m}tHT ©7Rˆ^ñÅfO #�×h™k«¤Û¤Ð[ÆdÁήcÏX–d¹¦(äi‘RÈŒ�=pëïŠ ÄØ`¤æs¬7•Ç/sð»ç=QÀ%5ÓY°g¥$9v&"Ž5å¢EÞïf &v©”Sê�”T‰žîg°z…©‹Ø˜¢Eo¶Ô+_ò±;?&´Ò“Û5Î߉µ͇QÜ !Ð;îÚÑÜwÛ>=02 ×¹ÈúZ½úøWßÜÓsüèmý�–cýóßzô·ôöáÛ^ßU äèÑ”ñqC¿ºñÆNu„ú 3$+iÏFÙqà›O‡Ü´Ç5zŽ.àˆÍ„£ÕÑÔ[æ¾~ýa3‘ê³xêì8Ÿ¶€tß>³o¯®òûÉ7h§„ïùœ:�lj™ F‘¡¶å}I+0“�jÉ¢àƒï‘ebˆ½)ï bKJŸRbI¥¨Ø5a_õ^´ÌÞ×Ëÿ0€üå.·Éa«—›Ó 6RÉû*šßØéÐhi–k }%‹4gŒFnýþ7£O>I£¹†Àèºᄗ_³;FÍž`Y‚$0S»åZŠ¸Êµq݈Vú6à[Ûõ̵­ÂH!ŽZÑŸïúÿÃûõú¼äí?þöèð�‡;S»¦¤ç{¥Mÿ»gÖÿ½?ð½Éý_¹¿ñÿú~*�ÓoŸÙ>ÛÛë¿ÓÒWœ‚|âÏò–·ÌP­N21aóƒ?˜çsŸ»ÜfWé@_ÿDµìêáþYJùy|O0´ÃÑ­ß¿ªŽ.,,4Z _¾ßåŒûVåqL÷±$‹üf\�JÅLN<ÏüÉùP,ÀðÙ­„•2““÷~�G‚ÚmX¯Ã3‹üû]3T¬€$i¢ƒ5ŠÉ †ª(ÁÌ‚æË$¼ÿíýr‚�ŠÕ˜š :p­”|ÁÎ@YÇÁm­�'s§N-ÍT§þÕŽ´þËb8:¹ûÌÑ"1¸”’ T½ÂOS¸UÖ:ÃÃP­B>/É夡u9 äó08hÞéMšÕ'q AÀÍa›‘°EØhÐί¨SÜ|ãÓx¶Æ³+&ŸðlGõMzRN½U|õÏŸúï¿YÞÜúöYoá©UáuÂç/üFÆiÝÉ´' +†Ójo2[Ö†‹ÌµL9º€ Uš‘~Ó‘.$yß#MBµ”` ðó’‰:yèPuOã±5�ÐFÜi :kG9û�ã„‘¦:f°jÑ ŒËZ½©{”¶+MEº÷þ©™˜Ñ!›¡>Éè •M ³ PWnrªÚȵ™µyøhhŠáÔ|ž¯qVÇ‹jÿ’Œð=Á·ž�h¶¯»É#Š5g²œ•÷½5OššÏbö½ebûÌÌ.>¸ôA¸a78be…Ou¾Á‡oø*O�ÐY€ ¹†Ò,¿#ŠŒ¾árW²ñ!›¡>‹cgcÂHP)jҜķ5÷üÔŽä|§3ßçˆÉv ·8ÿ¹Ž¸âYfPÇYX¥Ù›—kŠÁêK»g9™¹@š=2:¡æÜ¥˜�ã΋€¢ÖF/rË—‚/Xo)Út/ $ŒºÁ�ŠÕº&NÃvo5M)ã´e¨^Šþª¼êÄòµ oÜ®e®}yÃ÷Áÿö`úßû}!Ôíº½.í¹³sþÅo]<pðÝ[ïÿÈû£ÝûwØd{Å?öЇ’£_8zãö™Þ^ßuDxê©OðÞ÷~†r9æ–[ò@d=G’ „¤g.%â†�n/IVJXZL‹ /ŒUÏ?J Œ`µ®øã¿n°{Òce}‰Fs�$֌֓…}ϳ'ÿ˜Ó›¦2£·è{Çèõ{ÝR…ù¸À'š0<¥2ä �Ëh]89*7ž JÁ[þo 8¡Ý†•u~Ç2+kNcg#(:÷³¬VzËé¿xX‰g‡‘EY4;ëMÅêzÊ[_—àôLl ŠT ´ͯ$&œ-Ò™EìÕíY»�N¥ m¡¿,±¤ ¿"·Ýü×Ò,Ö”ˆK+eßñÓ �Ú÷õ?º¨›�ÆqLnÃÔˆÃJ]ñ¥‡:ù� ¯¯´¢Ø8€M�ÚTKf‚ÑåÝ'©éÌ;Ž¡ŸÅ ¹ÁÃÏmKà9šBUàŒây#Xý ÄK{i‡§HžgR³‹)a¬¯é>¹a§Ã¥E“câ8šÕ–"çI^Ø#ï›s¡•œkuÅÙK1S#† kuE_ÙL®JEÉ»&s¢ø@ܰÇÍy//p¤áFJÓiG±ÐQض$N4÷=P)ŠÞ4Ès±+ø›Ç;Þër×a�‘~«§1Ò—íLBh¾}n/o[üìßcøRKËüçø~>xð/QÚ�%˜g NÌĶj.-$L ½˜:娂Ã{]VSÚ�âÎFlr³+v1'§Ö­Uj¦*sŒŠb“�rãwË~jèŽf d¬Ž�yHœ¨ìñtå}7çÝšcð‘¤<윸:…TcšMdòEË2/LcvÑh «%5}}†§Ñìw8q>ƶŒþc¥–Òê(’ôêô¼í ÈwѲ<+šÚ9%vß¹{úé?ú¿Ë{È ä‚wþÄ;;:ÕáÃþpuõôj`膡Î�ýÂ�©n¾!×®7KÓÔÉ ¹íµ½¾[&f¡µâ�~ægþýý`zZq×]?Ê£�þÞ&’ú›O·ãÎCÞ/ó2µ2kN[‚Ê<á;¡y8µ;Š©‹©‹çÏZ<ôd“7)’ ˜NÒø�=¾{Ò»q)9rêBøµµº÷¼£°{zì›ã…U‰Uƒ×õYüú D‹Gø ãðŸ¿P¢5qÞÈv¥ÊŠ|Á.™I‰ïpâ»PÈÁÐì˜âÇ U!H ÷zÊS¡ ;¨¸…jÕççù7ýGyÿ;: ‘´){Kœ>0>$X^\ZL˜uØ=i à©ÈmO 9°Óí:�ºŽ`e]16`e¢0É×î†ë“çhÜ’ƒçßEeâ"q9ŸDgGg¿Y¿Ÿ»oþ J;=]XÛ= [;ÔŒ ^]·!Œô[ܼ?—åûÀò|Š�©îŽ(›*t²ŸY-IÎÏ%L�nû�,·h#ÿä•� :/ÓH¦§;éæš4Z†šzµýCkX­§$©$ÈroÌÞgœ¾–k)§/pi[i†¥Õ”;nôh´tæ(f Ò¬«õë @>zûG§�mú5®;î¾#¶l«`ÙVx›¿»²£¾ïcïëh­ùâÿûÅBíl­¯{=Þý?ÝÝzÇûÞá:®“{µ¿çÔÑS)ðüöÙÞ^ßÀC¼ˆAÊ¥K ##Ð×ï}¯ì Ï7M@Ô¹KiûÂ\òp!'ïRJ÷:€¦€ÊÒp›ŠÛߘÃogB<‚�?×áÍ·æñ\MÞ‡rAŠÁª´wŽ9ïYª%Þçêɇ…åß“XL kÖêž�âÉÏ~ IÎý»ú‘C}\zð8?37M³6H=.²øü‹s°ã*‚x×¥žËQ—ý[&'ÿ8}´bCh·ùYw�Îh“G[Mš�5ê#çy÷Î/aY‘åM_þ3—bfæcî¸Ñ§¿,ñ=É@ÙâÖ }Äϲ-Çt)‹}àîÚƒeÿ¬üçIæ†Y[\%:}–µçÇëÍ[J.®'´ÚFl+2(×6`ï©á«NèÞ¼:¡flÈäˆt© ]½€‚ Ræaì˜îw!'{ã;¹'O•Y�©¯¥ÕTD±9>/œ�M':2‰é[’é_bµE!'ˆSC5+÷I†ªf2³¼–²iÆ­^bzw]\H2º�¼o AÄ&{ÉÏÆÉ)˯Øícǰ½5^˜]2Ó;¬XóW�tÈùB¢LcØqðå·pQŠk.¾_j­Ö{§úÊF»Tðå`›ØŒiq,™™K¸yŸktBCÖdÇR¨å„fSÓ:Ò©w2ú‘9®§fb”‚µ†z‘î¡»té$¦X3ü})Œî¡�7)îóË #ßY53oL"ÊA)ŸMó¦8õ¶PÅAdÌ´Ò|EðÈWŽñøƒÑX´E³£ùžÛ|4šž pmÑ£½}§©ã/·úÊ’…ՔћÑA‹¾²¤�M,)И"×÷Ô†HYÀM{œ-Æ Ý<޼/ñJ H#E'†Úzº!ŠÏò8Ž�‰ÑZÓhodÜØ¶@+m€º/°,ÝjŽ-(æ$?rË~—£'Bîrì³z à[nàíkï‡�øX^æ¿D÷ñ�›ÿªw“&©æôÅ„w;=ýK’š‰_£¥HRý¢ ÀËW*lËL®[#„¡qE tE³­X«+æ–ìt3�YBÎ3àm¹¦h1‚˜RQ¢RÍÌü•'/›�ÄTf•-¥QlÌlë¥AËè€ÙÓ}O°´š2³˜FŠZCsæbÌ`Uö(²ž#�%I³et<&|ò¾™Î�š‰¯ú¾Þ�×lú±ãõ;¢×¿÷õcò Š?ÿï>_ØüšÉÛ'ƒÑ]£HK¾b SFîÑ/MU¬zt¢ÒD)=øæƒÁµ¼ÏæzSûê1W+mÇŠêÐ[uºÿevÅ:ýÀé+R—Üz@Ê…Æß)Œ’{~æžv±RL?ÿ©ÏûóGç{ £oçã¿ôñxz÷tùzü®úz½ùäŸ=Yþb»þÝ^ßE@d«Èücû"÷ßÿ}‹9FFörÛmÃ<ñÄ\öšPµé¿ùtí³¿øS}~Ú·VKZ¹Žyf% ´#^®$Pœrzb!\¤Yù ôókL‚ø#1Ÿ‰~:h6ae•ß9EXîàÚX…uªƒsÜ<ýyßÐG\ÇØf:ÃZ«¥ÚäÍ…*Þ¢ö[H¢ORê4:6Q|:³Å4´‘ùå°h´�դƈ”M°—)f¢øÚ«+c+º5­»Z4Ý\¥éuS[085�5µ“ú‘¤`ÛÛ2Ž<_üOÁ¡]>Q²Âr-%J VO¹¸˜¾¨°}íå*™(R€PÌ †ûM ¤�u˜ÃÄ+ë)g.&ŒX¸Ž Œ#6{§ýÌÏ“ØÚ2n[¹Š�]-P(IdE‡y’p…ÖSgh¶5µ…”bÁpüx¢Ý›„ÈLoãgÙ3í s©ºS§¬H"Cÿê/KÊ‘�ViÕ3zŽy�¹Qýļ¦\–LÜ™#Æ&iD´žn›åŒ‡^k˜Äñ“ç“-…ùUÏÉæºcÌæ…ó1yßpè…0:ˆþŠÅÛîôIS“}a.aç„CÎÛ*ŠOS”ÃÈÖÑ‹½S9£?¹\›bS·bá$¾ #·x<ø…&±'°cÍÌBÊ#�Ïâ:™àÙD1üáWš|ÏífÆúº â7ÀSÌpŸd°¯4)È{×1…¹ÖF|l[´òG‘É#ñl�Ÿ3‚xߤ¶qJª¯$¦ûŸš <ãN¥H#ŒïjF¶‚óî– Ó£6«u…ãèhìÆÕ’Å×ëðž7æøâƒmÞýúU ÏÕ<7{ˆ·¯¾ví07úâ¿Õº�{nþ JÛ›®a'3ú•@÷ô'�–2öÍ/s}ךæuq78QnüŒf6UXZK9rÀCi°¤q[©)¦G µ°;œ]LX\UTŠòeÅþÝ|)èQ,k õ¢¦Ååï·¯d¦GR¢¢æÄ…˜gOEhDoúÓ‰ÌôÚ¶®%(á›Ï„¼ï­yâ$khÉİͥ¥äE—‰aûº�×Dÿ1~d<øé_úé´X.öÇ¥ —‚Ïóùðø'ÿÛ?Q££9®�þ|¨çÿü�ÎSöTà w¿!üàG>X¸æBûçêí_ý¿*çŽÎù·ïíÁ�|üGz?ë¾{ïk�~àô¿obÇ„™)ÿ-”]êûþå÷5޼áH|ïgïÍ=ùù'·üÎ#8ÒúG?û�ì|!ÝÞË}qŸFÓþÓvÝ»½¾ AHWh.¸p!äðá““š[n±yâ ÅÆä¾ûoëSŸ«ýþÝï(29â*ä„cY¦No´�¥âZ]¡HÜå Î�ØdòùÀ“Þ|kÎØJZ¦àô\“µ0·”22h�¨?gœ–ºcô8ÕÈ–Î. Î-Ð õË̓êôÅ„åu‹ŸüP©Òä<‰”�õ ß4…�MäAAøËჿQ!Ùu C¹Â¬Wä/·AëÊì„é«öÚlÿLÝaªÔ(‚8æ¿¶ÛüÝÆi7‘këXKs|øð2ïÙ?‡zz­pñh›¨õIô5ãÅYaJ;04„N¤Y©¥¼ÿ�NœŠpl‹“3 Z‹Þæne¾ú¯tu3>¤„¹¥”�ãv/ÉÚd àá9†¶4¿’ny¸××ÖùÒ—OÖZ¬­kvŽÛ öY H|:4Þÿá«wEž?qÛ ãÃ6å¢Äw ý§Kq)da–ø.ìw^¬}pÀñ,JE ïa� ¨Ÿk±z>%lÅ�U‚ÈtFW×SfªeIª,CïéŠv¥0ž¥¼ä‰ã!o¸ÙUÝõ®püØ™˜»Æ�¸¿˜´::£<™'ç *·5µ˜¥�ˆ“ [ fŸèY¢ul¦MÏœ4t¤(Ö¤êÚΉÖ&ä²h,ilŠwOؽɤÎòqƇlWSž;qÓ—™Å„ÉጢT0bø^@cWäoƒí·ªrY"Æm”7›°¾š°šé:¡ÂÍ9¸÷�ŽÉ)±³lK�ó`°jqâ|Äèàkí¦5TË]ûâ €èe“Û(½ÑHRIÞ‡BN3¾ÃAjˆšŠfKS‹2�\v®âDóÔ fÚÓY¿Òû¨¿"9;Z^fÛ,-3¹h¶û§fRÐðç÷·ISÍÛ¾ç ܽú~c™.%bq‘ßnßÇÝtÿeà¾ô`;Ëü0“×îû #3Mx%&QlÀ,ÎÏ™´û®…o­a¬q·Ò=»^3É‘œ�M¶©%‰ÂØ]{’Ù¥„…•”�ŠuU Ñ¥nÅé&ÍÊ’ip]mYr#¤²›ï9‚‘A×¼p.b¹–RÉ\ }¯k /(•$ùœ ÍC2—HJysw³œºË¶Äwÿdôðhø³¿ò³j3ø˜93Ó;‚ÿðçÿa4:1Z67‰Öó—æ[/÷sóż]©V|ÓEðÜ#o<²Ö »nصŇ`q~±™&/=T)–‹v©\òÊÕrþÈß;Òš;:ÇžC{¶lÑ'ž:qÕ-{htHTû«à¾VÉ¡¿¨ýÿô¢“Ï�´~釩ª½å:xçÇß¹~ÏGîÉ[–uÝl>fgf;÷þê½ÿîÓO|zq»æÝ^ß%ÀClP8œ?ÿ‹8ðkôõ¥ôõ}øù+€}qIóØø/7ïµFï÷îða-×ÒץЧúËÖ�p�n›„þ ˆ!Ìf|ôdÈM{¼�Ô猦TÈ nÙçrjÆtž&G3B?vÖ¤L\Á)Ų œoíÞ×¾ú/5èÇ€�&Ü{_ÀýçîdrÇ¥¾ Ò/ò‘“}F_®ZWþ2pR­òç›+ÿ4å¢î� è8fr²Â¯ ­´Úëë´–æ¸ç¦Ç8<Ñbt4Òã‰'#úË#ƒÏžŠhgÔ�v–G0:`1»”˜®yź" ‰ó@�cÅÈ€Í@ErË>w‹%±w&”*6öô®óÂo}–¤Þ"I4³uÅ_YÀ¶ˆbã´tïƒn?èR*Áøõì8¡æÀN·Gq)æ6(.Jk’Ä<¼E"û+Ò¤’[Æ› 7î`Wñó)HEgÝ¥ui™`æ­Ž&Ìxà‹k)I çg“Þ� „ɳX^SxŽ`¥–’÷7B]Û$P;¶èÙ…¾Ò�rD™3Y¥(цª’ƒ»ò9£ r3MÊʺBh¶pà—j²}öTìDç#·ÞÒ=«ÒTi¾öH‡jI²°’Ò ôu1#Ø\�YB³o:Ó¤äÌû”"£ÅôŒlËŠwÞ•£àoèlÛ\g&;Cà [8% 'PŽ ³š iö¸çfc’Ô¶Íä°Í¹¹Ää:8¦;-¤…Å‚¤ÞTWñ¿ö©ÔÂJJ_E’÷Œx|zÌ¡ÖÐ=MŒm™k±P�Tö•E¸ÒÒµKƠ¶ gnYqú…¨G͉2w¤ùe£è äÿ?öÞ;Ê®³¾÷þ<»ž~¦÷¢QKV±Š+6›bL3¦Cp$1pC'÷ / ¹7$�²n0M+!@00%¦Üq‘mIVïÓûÌé»>ïÏ>gf¤‘4¶Å{㵴ך%�4gÏ9»<û÷û}Û3Õ¦H kWXô°LC“LO´4èѵ¡€<>u—�¿JÑS5 ÆÆøš÷k^·ñWÒXðH˜G)«Y–©QqC¼ŠÉÈD@O›qÖ÷·¦Ç f‹Z¶ÑÀXÀŽ}¹‚:ù²¢:ŽÊÛQzu�iš¢ðvµJWghh"$TÀb(—>v]­ µMEÉó•ÿ±¢ã t ô5­K1P'Ó¹°f·»n¥…ãJöóð|È$U¦”F™›>ð˜3ßeâH. Ê�Œbâ”ë+“:‡ ÈÍÛnN›Îeuо¹=üÀ?~@Ëd3v†a¥\)T'òûŸÜïGå@ÐÙÛY+֧Ƨ ŸxÍ'ÒgÛ÷}æ�ŠW¼ðŠÚ÷ƒGk”§®Þ®Zâû~ùã¯ø¸�8#ÊÆÿØþ?J¶n¨}¿ÿ‘ýj_+æ÷%¥tž¼óÉ%÷c×Û¥d*™hhnÐÕV¬>æÿÁÇÿ Ð»ºW~ý3_�ºçÐ)T°×þåk½ë^{]Š“¬ÇqŽî?êíßµŸãûŽ›¾ëë«/Z]yÕ[^Bœñ:r*NéËõeDðÉóuïùí¿é¦(Xž280;[¢±Ñfýú•iS¨Öi ›€�‡‚ñ�‡J¿FQ't× ‡…Èܰ©ßR÷RèÓØc‚ð¢Iѱ~·»Â†UV­ÈDÀ5—Ɖ¯·K—ô&ƒãSÄmÁªN“»-×(BqO,šŠWu'­­]�:ÓsøÂm9ÞÿGYÒÉe(„C�bæø¡E]Zgsã“ôföPŸTâå¡K »ÑM“ñcs|æ;iF›¶Qil£˜ªcØN³;žšÏ9Q<,•u¢EÈ kø@ÕúÅ÷Áuù‰[Áž-Á@¦§¸pò0ïÙ¬ì2˜œQœþÕ=fͶ3WP"ÙúŒš>'ãótˈÞRÚ"k'ÙW€øå„A 9÷¹ýßev´¹=i ŒÎs˜ R Áƒ»Oçv} IDAT.Ý`Ÿsº‹”Êá+�œÏã° ®'�„� W¡f]«ê±VH$­„á$îþIFf'Œ8ó xb¿KÊEÂñ“óQN�OMOõ@ÆÇ‡}ê3ªá™š y|o™çmN.Ùü!H©RëÆ}V´´7)DG‰àQÔ*sA0cZ#3höítð#»Õ_=RføgŤ TV(«°·—^ÇóÔ¹j¨�Ãó!ìØ[æº+S4Õ+Š^"¦Þ³.”(^¥£khš¢i¥=mF- Ñ²VZ�‰ëÈvåÆäñ˜q£óC4MWጻºøÁb‹ØB ƧVuLΆؖĈÉ ]· ¤ÃC;+<ï¢g†LI ”N&_ éi3Ø|�E:¥tñ¨™Ç‚Z“'4ˆ'Mîߨ´&¾æž;ÆÑ4e™[uTŸVtÅ]]…nD µûêYž³DL5ƹH`½ªËXÞhŠ:u(·�ÿ½â5ÐÕYk>>7÷knܶù¨.ñž¯ö] išB3ª ßÝ­Æ²Ž«Qì„PëVÕÀЬ°8xÂe|:¤. ÉP!±Õß³cS‰¨�Ó„¢ß: UüÏæÃ%ï¿j`¢¦åv(”3”gnR«H�$Êòp%3 i©æ¶X¦à•�ï«àx:½í:›×f°Í»q5—0Z_ªþ“/GM¨÷~.�Ë8�Ø3ØÒ]éâûþá}N¶>ÛðËÿúå䵯¼6òÞw=a¬ºzUÑ4ÍMhðøà²ößÝ×½èiüįŸˆbL)7µ6ÕЖñ‘qy¶æ £§£¶\¸Ž[8rÿ‘¤ ¥ßÚÙZkŽ&Ç&½À RK½~Õe«D4�¥¡¹!<וՆ—oÈÝôþ›Äþ]ûÍ¿~í_Û'£/}ïKg®{íuõ ÿmèøÐìý?¿_¿ûß~¸è½ïÿÕþÔ5¯¼¦”Τ�ÓSÂð·~CŒîxóöǶ—Ï×¹ç·ÿ¦hHí9Ì—¾4Ãu×=Asóe´·ë¼ó�/â+_ùÑ‚ãÂ`Â…9!AsØ?ÿ�{8”¹ï¹^úÍ_h‡rا±ËDÛߓ€‡wWèk7‰Ù‚‹.°È•CnûìTeÕ ‰ú´šÖû‘‡ýÑ!ŸŽfƒd¼L¥¨ %Zê5¶lT™ Ÿ¯.¿òÝ<ôú´r‚á¤çì’•<ü¤C:¡x„˜/J-#À”Mlpˆ?»>G¾xœÙœÇظK±™† ¨ˆ&Š2EÎ�ó?” �ŽÜºªÍI”u²GdæIòxð|nó=åc|M nÑfÑ+E(ä clÕ£§ý¶¥S(¬ì´kÉã Ì CQ•Ò-z÷J } š}Þ‰ 3ÇK¸³wRÊIœH8>1£ Rr$A(1‹29ªŽ2©Ä³·~š+„Ä-Ac�Ns�ÒØ r+b– Û¢Ó#~ jö«N¸\°Å&·kgfV%3{P¬„ô"W›°FC;ë¹_P-´6¨PµÀWnSWm‰)-ªh^»ÂbpÜGרå¡ú¿º´W7¤56õ[µ¶ÚlTs5²�:¢;�iYˆR‘â”`vÜ£ì„Ø–Ž®EiÓN¨Š2]}îdLðë‡Ëôuþ~ó8¶®‹SŸVzœDL�U*[`Ã¡Ž¯“PöÒíÍ:vŸ…ÓÐgŠnÈÌl€3àQvU£áy’}ǽˆÎ£šf΀܄b¶†ë”#+ܪèÚ0ÅŠ¤­Qg|ZÙŸ¶7Ë¢)ŽL4f5²i¥ª«æ§Ø§æ§(‡153p\YË㘚r9ºc®ÿ‰Ÿ¡„û�ïwÙºÖ"á‰ýî’ZŽs¹­ê2yt�ÃÅÚ´4DǸ¢ˆéº`×äÅÜ{tu©726ÆÛž¼‹Þž_ H"«�xÍ%K08æ#Ä|þGJ‚@Öò?–óyZêõZ3êEV¸eGR(Kê¢õ¸¿W Ï�ùµ¡IÌV´%M¼èMi“:3Ç=YEc”%ôîÃ>«»£š¦ ,]D´6Ù2Ÿ!³L…ðyÞ|–GS�¾¨a¬"èëWÛ¬î6”eyJcì¡ÃŠ�ë+*°iúòE•ÒÖ¤/ú=ç²9gú�lOÖûè—>*ë›ê¾çá™ñ¡ñ¤aq€éÉi·4^J¬¿|ý¢ãytßѳO54¶v´Ö^W,K“û'S[oÜjš¦/@FÎ:Kˆ7Æ+ M 54adpDbÝuë*†aÔŠöÁcƒ§=÷m½m5ŽW¶>k M¸2”Ïž†%núû›Š[¯Øªÿç—ÿS>ô͇–Ô¶l{ݶÜ�xc¶ºÖ=x´|ç7îÔwݹ«ît»î½¼·˜Î¤O«•‘¡ôoÿ·ÛËëá$ð–í;¶?q¾Î=¿ý7l<"¢ÖP<ùä:;/#›…þþ&u¦¦ü%P�`ÁŸ>Š>éæ/v¸~þÛ ß°m]LH@†>õ�ˆù)¢&àþÇ+\{iŒÕ]&wüª„®Ópp×4¯W?ßþY‘�®'yêˆrª%t{êáÒßc09ìÓÜiÒÑk"Nx”�ã­_ŸãÏÞ–¡!»¼9Q©Òœ6p<‰ïK|_Ô„“s�@×”'½ò—×ðC/Ô(–CŒÜqV÷ ‹ .Þã/F’Ÿ?`0à_ ™HÔ1KŠ�.ÄÇcJ _ bÌf ½�/ɱ¾îæ³NææØ85ΧZð#,bT¦¹dk+‰ž'!¸×ñ f~ÃÌá½+®?Œë*­C¥¢Š‚\1¤­Eçø G2nRõê¯PÕÜ Ë ¦-x:[±b誘�Í«Ióª.3*p2006Ÿ§!Dä °v#‡[™žý sy%B­òÄw=:X£â8á×xøË[Ÿ©)MĽíÙ”*JçíV¡”–¤’‚ÁÑ€|I¡N Л“ ØxL`¶XÄm»1$ÐâxŽKp¸ÈätÇS�©¹@Ù­‚bvìuimÔ• ‘P(T,¦19ëSqäÓÒ-gA¨82²/èë´j¡ª¾&n â¯lQ,…„�¢óÙ–€c•…{Ì#Ÿ q"�CÅ•LÏ…xAŽçȧ}~tM¡FùbHÌÖBɉŸ•�õG à‘}6§Ä͆.¨Ï̇ÁU\UØæK!]-:½í6é„rI›×EFÕDõ¤ a0> &TžˆåK ¾ûË"††´"ž¿…Xþòá2ëWZOïú{¦M|>dEGõú‹B4cÊ‘ëà쥼E¥B>„€á>zülkù)ƒcšú,æ¼kWÕª×2©¹|™‘þÔB¾�ig-è“ …˜Ù¦¨¡\Å’²h¯[0J%4Öö™ì:èRq%Ù´†oC]JÒÑýzlëÆÐ·:WR‘˜%N�„P´@èªõÍ÷buº­©.Bøt�㪟ÏT–ÇRa®1K�Ih�2p"°¸*x/T$sulu] Z�3zNüwk@Ò]iÿ#_øHØÔҔػsïÜ¿}ðßêÞý…w×tGj?ß×ß·èü?õàSgG­yáš²išµÂyd`¤öý›ûíïÐS‡ÎÚ€lzÉ&‡¡|GÀº‹×-ú¹#ûŽœv_Ù†¬˜ï^5{Í ×üúÀ³j@×4VÞó©÷ø¦išŸzï§Ý5º¤�n]_]é¦÷Ýdkš¦��–nß~»¿ëÎ]gŸ¿áÝo8íç ‚ øî¿~·t÷ö»ÓÀ{¶ïØþ�óµîùí9Ò�¨f⟸‹Ë.{ ­­ÐÒ²� .0yà/B*« HÀ⌟ªÐC™£X÷ìpwË0ŸÞyɆ˜2U�†n£F©6"OxÄc‘_½€tJÙIî:èÒÚ¤8½1K°ºÛä©C.sEeOëjÒÔÕªlZòhj3èè3áhUw_ÿ~ž?}s†d\;ëä7“PDÓs­ :ñ˜D×%R*ME(‰üÞç�«©ª�o|^ú<€Gæ×‹þ¤3�ÐS l�0¸åkõ̬¼€DK f6Ët<ÅÑØA¼a(šWf~©Ú%%/_@ë¢RáG<Ìã/!œœ£29Íå¡Ãe­û¨¸å²G±äP*ç)UB.ßjsõж­Q**qñL.À÷%�)04ØwÔC×ÔT9ïu¦c)„šºJI®KU‹$mžf*Ê„eë´·&Øw¸ &®¡àØhÀîÏ?ÂÔˆƒëÁl>¤«Ugu·I(%�ïsŸY³q†-”꼬ìRiÕ©¸ºôhòïù(*PÓ91²ù«æd`Z;¦“iÖÝi„0`bŽÂ¨Ë̈�S(á8’Ч´UúQª™ñiÕáÙ–Ê1P®Õ<U¤íØç^¡®¢švχ}G]ŠY é{¶ç¨»Í`zN¡‰˜à’õ6uiÕÖ3}Is½d:p|ØçÀq�Þƒ¦:�Ž„ruR–©ÊšÙ4çó8Lâ1�dVƒ¤†ÈŠ!“9…B¹¾dr:Œ8þª‰*WB,S‹(aªI�Y‚–z�ã£>½m¿?q|íüͬì2åŒØ–ÆÁ¹Ky»ÿJèêPÇ}d„¿½‹kúîcrÖ¢2áñwæyç ™ùs5!÷=^aí KÑ™tY«$yÛÒ–¥·™Ïðˆ–%O2Wèh6–øYÁÆ5¹¢¢nYãÂ>ãØ)Ž9«…²–Æ^‰’ìÝÿÌŸÏ THF¾’/…dR§_¬ôHL.4E½t<5œ9íú&`®"Ñðü°fïëÊîz:²Î$5ÂPRr$ãÓ—nPÎeçäªx×ÅïÒ¤”W<ÛýÄbÞ‡?ÿa·¹­9 pìбҿÜò/)@ô]зdSÐÑÓQ;ì•r¥8ðð@âlWÅÚ‹×.R”?t¼¶¿ž•=‹fZ»~³ë¬ãÂþ‹ú�“šл¦wÑÏ=õÀ難L}ÆjMQÿ–~qàמñ±Ü|ÃæÒÛ?øvýÄ‘Á­ï½ÕöŠÞiqê?ù›?qóû_û¾s×çîJ³ Û‹nyQnÍ…k–lRœŠSþÆç¾ÁÃß~85_<_מߞÛBD�ꇆí*::BV¬x>M­í+LÄ1!”ø}û·r¼ýµiN¦/¸ëO *Z�¡ 6¯µ °L�”!¾5ŸÉPÕž˪ù¸bSŒ¹‚¢&üç�ó¼éUiXFa¨k‚l² ” ‰Ÿ¯ð…—Iö¹‹¾¸FCL29c2l%ÛÔ‰,ãå$oÙS­Íª I&r²°9I§ùº@'4JXð-ÿEŠÈ]©@±ss|¨iŒ—®(3Z)0r|æöÐ�~ÛH²ñ��+LÍZ´4\¹9†&æêƒc>–)hoÖk GÅQ:‹lZC†’æ�º”>Ÿú^-útAÌ Iv˜èÙ.b ‘š¤4ÜNeÏœ˜†®Köõ˜š Ð"Þ¿e ßï21ÐÜ`ü^¦Ëƒ£>ëWZÔgTØ\bQ‡jz5 �*‘Úõ$-uñ¤ÀêŠcÅã‡`Ö¤\qpwÌPœ q"‘õ‰/r*›^Z¿D¼�dLPªHâ‘@W׿yõ£“ÓÍõO§É—Šø’æFƒþ^3:?*“£j_,%œ›×Í„R27 ~÷3~sû¾4˜+„\ºÞ"�T<ù§¹ Ž)¾‹ö{šü[†PME¶Ö¸ 03�Ä#¤ÃÐÐÒ /¢ÁU›9Û$’f�†i3_’›( *4Í Ôù=>⪖Rýi›‚É™�ú ˜º §©™iJj�ˆÛçö@äŠa­°mi4XÕmR,…Ê]LzÈSÓWpcðrèlW/áÖÜ]¼øÂß’+¨ë9nk4×küä¾"/»29¦Y£[Î'Ñ—*ªñ*–TvG6uæAŽ¡CKƒŽ© ©’é]W26³´%ï[Ó¬ê2£fJ5ãcN$¢Ÿ§5U\E�²L8<èQŸÖh¬S×_[“®†–B0\_¡Õ™³¼ßƬ†iV‡Èj¨”/É3Žë,C�N²)�£~ÍN9_ ÈCÒ e)ŸŒÖ¯§ŽxÜpuâÜ4 RÊ À³²kµëlÿ£ÿúÑR[g[`ðØàÌgþä3©Ð õÎm�•L6S+Ο¼ûI�êH•ëê5$cpDCœ½xžŸ1úÍCµF㡟>T=+²½»½öúü\¾8}xú¬v¼Ý+»‹`ç/vê�=�µ/—Ê¥¡C‰Óí#‘L,B'zV÷TüÚG¾–9Ó1Ùöºm¹J¹~â¦OسÇg—u=ô_Û_ºñí7.‰¦LŒNä¿ü‰/[� „À›¶ïØ~ûùºöüö@=Ä(HÈÜÜï¨TžO6+Ù°árà·(Û(ý¤×„ -jDŒ ñ�`.ì¼ùo§nÿxci¯¤‚¦ncQ2¯&àÉ.«»Mz; \OMÎ’ñHpÌÛ7Ú–‚î«Ó_ÛT¢ØÃ>t,hBVYpÔ�~‡ÅW¾“ç]oËœV˜†’xL4+×X<¼«€®Aƒ§ŠÝP69®')WTÐÖ ï¨£pÈÅó˜ñùÊwr¼ýuÙ§•�J(—ÔtÛ4ãhšJÒêé\ÛOÃ%Sˆøó˜zð?Ù·^R¨ÌåãÇ·=Ø@ò­x�mx™z&ìÙ©ùœ+ª&’ H§ ¥€’’ 0|°=H8¬qʘ¹"Vn–c Ã|,µŸ¦l K8ˆ ˆt'hi˜£1+� xðÉ2‚€«¶¤hïPbëT\#nƒei5j‹˜)›t"�ÙR[KÈ ‚##Œï¨¸>•òù’jN{Ž¸Ô§õÚÞ4 ר±ÏåÚKõsz#8®²m‹lqkÅÖ|rzåqTi_q[�Îè´_ÓDà›È±irûg)UÔÔÖu%…rˆçÁÞcŠb.ž­HO%4Ʀ=’ uMî>ìÒÓfÐÜ ñê«Sx�²NŽÛó�…›QlJ•ÇÑ\¯±²ËŒr,jS"�ƒ-0SJÄl´éŒü²„WQÙž.:êóÈžû°l=Tïïž›/°p=•ß i¿§ÅJ¡‡k.IÒ�ÑɤæÃu½Z< ,C¢ 5)÷Ù|�¥ jS`Æå*ž„ 9�Ÿ ˜®ÈEö¸¥Šj:&g”-užÜ¨?Wvõ£tsQ£*Z¦ .£Ñ/è5ÏØwºÍ�Я¹bH*.h®_œ¬n[`›Ê¬áÈ��!‡ó—ó:^]íê  �ð�?á•›~GÉ1¢%[ÝOq[‹é|ÿWEn¼6�¡ ŠeÕàXÑgB(TÀõU3³SæQ%EßR6ãɘvЦbá6›#W3MåŒDO› Bº«TÑ©¹�¶F?r¸*”CRq�bY²c�2qXÕ¥h´ÓæY²{²*`³j‡\ªH&g‚%]«[s½F[“N:¡!4Á¡G†<&¦C&çú:L7¢ai*éÞД°ý\ábÏÊ~7Ö ?¼ýÃ^gOg`lxÌùì{?›ñ ž°ùêÍ>Å©�+Æ÷Œ§.zñEÁÂ"`ðèòè÷~õÞø½Ü»ðŸâíµ—ÉD­á>1¼œ�ŠlïšoZf§gËűb*Û›-gê2óÍÑÀÈ÷eœtgv­xF�òòŸyÇÜå/¼¼î§·ÿ4ÿÃøaölíØ�‡„�}ﱆåþ‚¾çõùö×f™¦yʵ³ó‘�³Û?²=íå==º»_yóÖ›º}Çö"ç·óÛs§™o@~øÃclÚ4Acc==i®ºj=÷Ý÷óœ"mÁ낈ˆˆþÔY TÞü¿§nûâÇ_³{+R 4uèÚ<K•²|𸣥A¯…I9n45ž ¸l£½äÍõÏ|e§�”>MÍ:í+-8ìFIÜ·ý Ï[_“>e*&%ìÚã²n¥Å¾c.{û´4è<±Ïeu�I&)0M " –ëI.¹Ðbz·CÓ…–*¼„ÂàØ°Ç7ïÈqÓk3ËBBð»Ç+¤’j:„Š^ Ò Á!."bƒx®DBú Â�kVN±¾ã0¹‚Ïì1—æf›M›.@š�`¤@�±úëõ ñ)%ˆ_HëJ$ •â`u<)%løˆïƒçAE¥Ä¯+Îq�ž§/RЦš=Êß]uɸĶ´"rU'»-´Æ5˜füC”†âäöMâLÝO¹¢@™jcÉQÓÇ™¼â_—+’LR¢Ÿ$„Oŵg”ƽÔ6—i®×HÚ‚æzƒxLÙwV'ʺq ê¶4#¥Ãä£9e'Ä÷Uê8°ˆærÆ»ðäâ(£10ª®é+/²IGápU–#ÊÇÐx@s½Æ\!D×Í Ê” 1«’ÕíÍŽxýÕ̃dLë0Лl ÏÇ› )C¼�rã~ÍNWh’»(“M+ç+M€e¨Á¯®°m�õ{] „€µ}±ÈMLM𫨚¾€‚%„¢Ðyq�LR£³Ý@o40B‰W)»’âH@¥Ž?/Œß{ÔSt™ŠB6—¥M‰¨;ŲÄ4”8^j-ŸöÉ&5&f1�B)¤kîQCã>±�H'5³ë’ÊV7Vk†Eä|7¯1:2äóäÜÕÜ’¹ÚÚ¢æc˜¯”~Â˶>LÙQ(r•æçù’ŸÜ_æ[mú: ~þ`™—_•àžêÒZ$ W¨�ï+”yjN!gk»ÛôzâFŽr¥²2¶8[~È\dJàEÔ:!"1¹£š�±© Ba Ìt]£X’ ä|V÷ÄU¦Q¨,­gr*]¾PköÕ§CÕ,C¡›ž¯ž3ñ˜8ãmZ¥�z�è¡¢P¦S‚c#*Ó)›Öjnbº¦~>Óþï7 Bî¿øA§{Ew`bl¢øé[>mG‹µ£´zýêZß=<0\£­Ù°fÑpàÉÏÊ=jýóÖ/¢f;xì¬�̾+ûÊ–m%4-:ÀE×^,(N8qäÄ÷cš¦Ç‚ô󆦆D²5Y)ŽcËyïš¡ùþå?/¯Ý´6ûãoÿØùÑg~´,D*?”¯[îñé½¼×}ï'ß«%’‰%¯›�oÌ|æ§Ÿ™ÉÍåb{ŸØ~û¯¿ý¡ÚÀ[Î×µç·çX¢š�{ï�ãÀ—ç=ZZà {¸ï¾Ç£{»ú%Nzí©HJô%£?ÿì“Sßûâ_6Úá*kƒ)OHš»M¤€R$N]ÓcQqC·Àn·T‘ÌäBt êÒK?­ÈûýÈ�O_‡º]›´­²G¼Zý÷¯ßÊñŽ7f¨_ LB9¨èŠZ‘U…Î ¶ÅxêˆÇØ”J*ž¢¬î61Œ¹Ë¡ùB)ˆ€“£>ßùQž×¿"½,:J¡ÒÐj ¥k:nˆç \„£ÇÊÀœ($KÑTa %œ˜€?}sコ2LÌŸ”÷.Šrá—š¯\¬â“uÌ‘âCcYÈfU3�+5ªiÖšD{�½UQ¼ïÃUW;7+A|¡#Ó|½c€‹¯,‘ ²CüîYùe×Àõ5\O£âè”]•ªœ/†– µIM�o¡)«Æ¬ŽeªãnhQ`}L9ëxZô£BI¹wù¾$�PÔ�õ}QqnÏ;p �û§š;ž*Ì&SZü?ÈÛWm�Q(…$#nÿQ�dLãÀ€wJÇÓ¢‰-ñ³¶¥±²S£§Ý >­Õ:>8žF2·‡}¶­³kbäªÖÁŠŠAËÄ“F£¢¹è ®¯Œ»ä+Prª×LÎØ–`b&@h:Rª2W›jJ|ÜÖhÈ(Ä çkŠeI<¢`ºB§b  ͨ!M·éàAn2 ”²¦+ŠÙ³‰yÜ‹hD}²¢�ÔÉÙ€á‰à”ó´Üs&„¢ÉMÍ)T6TÁ\v$ëWªœS¯"gJ _µƒ�EÔ¬\1$W”EËlYk/h²æs¡@ÞVÉê¶è‚À÷Év>Ÿ[¦_m­ª äÓwòâ­�Pv4\OÖhLeGýÞæ:��<Ʀ+ÜxM‚ŸÜ["ŒÐÀ\Aé­*•Á¨HŠ%Il}f6¥Õô#ÅR€ë)J“ç-/ÀP×Õgô˜˜ ðI©¢®Éቀ®V½¦A³M�žRY%î¬ðÚk’ø¡$áÊZá?4qú<»þ#jÈËz;�SMãé¶î½†–+ꞙɩ{0n ®Úbs|$ L¬ÓI…‘·ˆe³bÛæÿ» ˆfhÁ‡¾ú¡BïªÞ€™©ïÓïú´V.,:µ=}=µ#pxïa·Z¨wõuÉùnS;~´ãY�ž«.\µèŠØûèÞ³¾æÂË.\´îÝ4Xµ~Õâæè „š®9¨¬�è†ú¶WlsïùÊ=ËB�Þëûs}kúêîøÖå;?{gâ\Weë^º®|óÇn‰dÂ:ý"$´X<Ö‹ÇhyY †i¾þѯ¿éæ­7xûŽíCçkÛóÛs Q¿ÿþaóæ$“ èì|>BüRj �…š�êk9e?‹¿øÔW¦¿ý‘wÔ¿QH{#€ôHµ ï¨Ðסrö hÈèMÕ¸Gª…’äÚKãg^,EÇ:2ä±2ro ¡m­ûÝi±øö� ¼ýõi‘0ý�GʤÊag:§B «èKW‹ÎØTÀ±aÑ=Ç IDATŸ­ë,Ò Åÿ|Ÿ¢Ÿ°Ï¡y­ ì•›ÓñŸÿîüÆì N)•?¼e êë4›5ò%‰m…¡Âµ(|Q9 ©"§TQ¶¯�Í'Æ<¼@ÎÓ=N&×Éê©RŸ÷Å—‹ ½°#�:(Ô´)«ŠÛcÃ>ù’J›ïiWæ 5 `ûT `eÂñ¤¢ûøÒXˆÎÝîéçñù ho)ƒƒ|rø^¾á %äézUt'd®PŠì‹]_!(ît(–C6õ[ 5JEA+–C:Z æŠá)I'‚¬hò«‚…ð¬™LRªäôö&ƒlZcrV…6îØç0908æÓÖh(„ž×fUí¡1I2!�kH4M¡¹¢Ò`i§ÑžX†òHñ"¤}hüÌô+Õ\©kÇ‹èaA }Žž6ƒãÃ>Ó^Z£!«ñÆëmZ6¸Ï¾¹yÛÍÀЧ�|è"üÀ¿} ²zíꀹ™¹Ò?ðŸ­Ü`nÑSµy]s>•IÕìTv?´[D’ µsÞJwjbªä—üô³ù,]+ºjû ü ²ï—ûÎZȯè_±¨±xê¡§$@wß"]ˆ¿óg;ÏfV~Ê%±ö¢µÜÙ�Ds"üЗ>tõv5üì{?ËÝùÙ;3çº"»ú�W—Þð§o¦iÆžÎëV¬YQˆšª^à|r~ûïÞxˆ%š��ýû'ÉåvÒÖ¶ž5k$éô¥ärE¬¾²pb d@•ò=?ýÍ[ÿgÃ7`o-–¥~Ê¡©^�&†*ýØõ”ƒŽëIŠUäõ¶ëèÚÙ§Þ¦¡<ùxÊ+hÚÖXˆn­ðøêws¼ù%L7te½ú‹‡Ê4E߇QŠu©¢b¦¡ )©eb<ò”ÃÅëm¥GÙãÐÔoѪ‹š¸þøˆÏ÷Vàµ/O�ö� yhD‡˜†ïÂÄl€®©ÂÌö"ž{Wq$sÅ�—$h+ûLåzôíäyÝ«R§NïÄÙWá;Q`Ó ËÈQ˜õÉjÛ_%HÅî#f‡Ô5À°m°ï‘õÌÊ6*z†9™äCõJS’>I¿ 9É ÁíÕ's„œüÌ{ ¸9\†\ž÷˜S\ß6˯èOæHÏŒpÅŠ»˜œª3¡>“ ½9�®+Ô¡MiÇÒÒ cèÊâ·>­�¸-Xiæ;QèX2.°:c˜©¬ºLŠ%IñØ4e7Ävut]O¡Œ.|]MK3 �ŸÞ_be×ï/�cpÔ§¿×¬e¼T“ìkH Ðu R«Y€ê:{LôV›˜)" \'\J{æ(;J\íù00ê+ÊIY¹ôœ.IÝó%°¢Ãd:³ôšë“i(A¼®kŒOä >kWØËF¦ª…i±ÒÑlÐЮ­xL,B¥ ] žÜï ÃV•ày‚ƒ�²îûÑl[ „,WBb–àÒ 6a¨\¢F&Õü÷%Œ�[* pý*‹Žf�ºŒ:_–1¯Oñ}IÙ–XQx£d]ŸIÌRËP.j†®ùâq 3.0%øRÑÄf¦•î!9žç³+w-o5¯W¦aƒƒ|ìØqíÚG)–u„*ÃÃSÔ²é\ÈÐD@, Tè’†e*hfz.ä’ ÍšöE7ÃãÃ>Å’ œÉy-µÆÞõÕµVq$#>­ g6L¨½ÖR뮲A—<ôd‰­ëâl]c÷!‡Š«Q—VëuõúУF$T<‰JÓ�iÔe4vòhmÔOyN$âê¸ûžŒ�IKƒ~F«ñêP�+Ž .<¥ì0š é¼äB§ì3ùëçy&ö»áŸoÿórÿúþ$@!_¨|æ}Ÿ‘ã{ÆOy?[_¼µöi\Ç-úÍ¡$ÀêkVW,Ëš×k>¥¥ì½¼wîÊW\Y:ÃÃFÜö±Û²Bˆ¸7¼¦Ö¦Ú :62æËPžµàîìí\@X>rï‘„0DØÚÑZ{ߓ㓯è¥Î´Ÿ NAú.è«éS–DMLÍýà?èwõv%¼ûÁéüýÎñzÞô÷7¯|ñ• !ÄÓV::§z~·žßž‹ ‰j@{Ìgvv­­ëii‘¼ím›ùÂZÐxè§i@X ù8¹9yï?LÿËÿoS{W«Þ¶0ÌÐ�-plدÛùBÈL>ä’õÖ² ›¸­,L� zµÐ¶f ­mÄSN­Ðºíûy^õ’$Óz B¼LÕ@ø^TìBrÉ /Ž/zøÖgæñ}n ‘û]ZÖZ´,HÞõùÆ÷r¼å5™%'Ä~eEè‚¡iŸÉé€ýÇ\BiḪ1«Ú¾z‘Õc:¡±®^`¬K"Ÿ(ÕšªÛnÏsÓ25ŠÇÓ™äÚ¦†aÌSͤ„˜€Àì^M_óÐéüÃ#û” ´òƒ8Ì�š¬‹ÛxÓ‚/ÿ¢ž£Í›±ÚÛÙÔSÇ„žæ¶0¹X_MˆO&”&ø¼”|> á²@!'®Ë:÷Ox]‰T>�>5É_§ž¢#1Cè»èNÝš%�d`, BZê ú:,R‰y–ÀŠ„ÁVBÃJÚ¤ë5´Î$a�@–')g²èã8ªP›Î…ä‹C)–%»{4f5t]DÔ@E¡9>ÐÞtnó8\OF ÖŠj˜Žî‹jaf›*£B7 \–ÑsTb{JDî·Æˆ­4p:Œå\GYŠJŠ*2› 94àÕP‡Úsu!L̨)±i¨0ÈlJ§¿×®]o�Y�±é@%>G:šEŸ-âõçŠ!�-:]-¦ÊO‰ b–V[ ¬q-[ÃN*‡�ç¯4yô7%âUl×a—{ó˜†�ºlA¾(¹ã·%Ö®0‘áï¯ñ¨5ht·ê´ÔëÔ¥52QU K ~ 0 …Þ„!Lδ5*ú�!p1[‹ BMàCò³®« yߟמU\I¥âsؽš[ê_MMj§¼Ïí\Ù¿ ×Ó�HÊ•� œoØG&}dõõª‘×4°5eµm:ÅJÈñQŸMýaH�6ej˜29«ÒÁO·¥¶©î·²£Þw±ÒÒpv·¶ZbˆZ£U(‡\µ%Y[¯7­±É—BFýá‘jxcÅu™Ýšõ´�9+š=rÕ±êÔA$cJïâ‡ê½Ja¤[ú¢Ñ5…\™Æ|Øa±2“ O¡KÀÒ½í&ÅŠ¬…•ž‹äʧùX—ïþÒ»§.¼èÂf€R¡äÞú±[õñ=ãKûýûkMÁðÀpÕ&“ /9…útÊk_pà ô«^rUûéÞJ±P,~S|3°ñº�®¦iµ†¦­³-ù¹>wÖg¼eYµÆâøáã­ÿšþ¢aµ} :ëmïûþ) HCSC}˺–ÒøÞñS�ÝÒ凾ò!§{EwúÐÞCù¯~ä«õçr!Yý‚Õ¥›>tSØÖÙöŒQ¥èœTbÏùzöüöBAäI(HÀ}÷=Boï«I§mV®ì¤®®‰ÙÙ‰“�“íyOnf@ #N^WÄ“û�°­)¡ 3ªKm�öVƒ¸­ñ»ÝÅŠâjwµh‹Š™ålv¤ 9pÂ¥¿ÇBJ…„´n´;@Ù’þì×%lK…”u4ëèºkV�_¦fCúWK:ü¤“Š"õÀ“ž·)Zθ4¯²Ð,�8ª̉QŸÛïÌó¦[ôJ ;ž¨°a�JÍÞþ­<ô\¹9Žã*qlS�âWs51Áš�±-Z¶&�kÉí?øI�×½*52¶Ô_°9©"C×T¢ï¼`UXùý‡0&?AaF=¬ƒèKÊ�¹œÃÎE\WòÉ?.c™ChZHs“N©3ÛFUgõ×êNÄ'!fÏ âc1H$Ø+ê¡ rrspµR­».”ˬ*¸:œe®µD½3ljÜ8ÝÃóº+G”Hפ“:ÖIt£ÝžFŽÌÍIÜG&©ä*nµ°SEZ¹¢šŽ©9¥'HÆ42I…v™f5PM^3)�].ÙðÌó8ªÃØT@W‹A*®èÙˆ–32á+±s”ÅašÐ°ª­±s÷.¼)åt¨b+w°Äñi7¢ò);’ÉYE­B,¸QÅ鯉35ª3ù€ „µ+,³Êf¹f…ë+¡©Ù€¡qŸÆ:�ቀî6%ðoÌ. ÁÅÔq¬ÙãFÅx:©a¶èuú„JTŸÍ…8C>…rH¥")[Õ,uîTI¤K‰A©CãÁiõbçjB Öõ™5wªX„ÞX†¨„¢ C /®†­zB`T› rã� q TFŒeRT"Êe>ÊÊØ¯¿ŒZs=45Öš�¿:ú=^å²ÊFzj6àÄXÀÞ#ndàR,+]©,#«]EcÒuALS¢î\1ŒÒÈÁ7E”ƒ$q\ƒýǽSìO.ÐU“)ð}ÕôæŠrY‰ðŠ6§ò8ü@ÝUëãêk…PtÕÞv•©15�M©¡ÑË_žÀ ¤/T(îY¯i”Üy”H;ÓԮתh=¡ãKÙCe †ÏW¿ëÿwä–/Ü’¿è’‹šÊ¥ráÿü?ÿG{ðØi‹Üî¾îÚlâØÁcµ¿¯è_±èÈìº×)‡øè¾£¾ë¸3µ)]S}°åò-MÕï:Sõoî—‹/MXÖ²Ü,„ïû•ý»÷óïŸøw `ÝÅëÎÚ�Ò€¸þ’@×导<¼cï§üûÍÿ|óôªµ«g§g‹·¾ÿÖØ2ÈË.ÂÞô7oÊ_ý²«º®/¼>¤SqæJÅR,‘J¸¶mg΂èxwÿçÝ6pÇ—w|Ù9_ÛžßžÓ(Èç??ÆK^"éí…îî/}©Éw¾#8= ëd]ðÂ&„èg]@ûàÛÒdRF§¡#u „¦x¼Ù¬Ž±åbúâ»Ñ"ÞùÆÕaÍåén1KPª¨°ÃÕÝj®ÓBËE6“÷•0tÁš^“Rä-o¢f³Zv$sù€Ù|ÀU­öi‹ÌlZà tNŒú„Qn‚<àÒÒoѼ„cêÈ Œ|ÿ'^ó²Tm*+4fulCðÀÎ ½í1[Ã4Te[ptÈ#”j:„’mëbœñ¡Í€�Ö@Ò²)»æ�ïÛnÏñ¦×Ìk\N~ˆ.Ü*•nl‚¦¬Žãº”%ä4£Ðµ ò길.‘¨UY'ã‚m[blÞ`/>ÛqXŸ&çÿùÏô¹Rr÷Ã6GJ[Ø�o'ÛP‡Œ§ø_¹:•ŸLªTø˜­š“rRÏaà°ZxÕW”ÿÑr %˜�ƒ�vuŽãî/‘ϵà§I‹ÄÌ9W£ìŠe�é¬^a¢[‚•m¹=!½m&- ª  ˆÙ-`›¦šÖ'å’þé )UÑlšêÚt\IG“Á…}Öm 5 GCÚbj.@ÙNK¹û»û˜.Pª„¬î6H'”�ÜîÃ3…�ÃþÓÄ‹37©‹P�YE‡jiT6¤1kA¨k"¹ÿœõ¹öÒ©Hè_-ÌMSñèmKKiXu:qÂŒ†_–¸£>ùÃJìG âÄl€ëJ&ç‚ZŠ÷Ï,GÖÕª€­•©„ÆÀØï§™œõI'T@j®²e­UÄ[QÎ�Ñ{’­A.$— C0 ‰eD¶ÂÇ]šëõ¨áˆî­¨ápE=Í—$³¹€UÝ&É /´Ø5õnž¾š›Ô5ôo~èÛ<ÿª†©,£#š]U/4:DÍ™B†gòaíz³LÕ4hQqízU7xšÊ€IÄ4RII6uæÌ‡� ÕQÈ®2ëÈ—Âe5 +: UÈGë¯ã)ÔFÑÅ)HK:¡‘+Ôe4^|Y»ŠÂ¹„ã¡hjÑ1p=Él!¤ìÌSȤDY$›ªùZ¨UÑÏÀ{ɦ´ÈENé¤W™e$ãú’7�H*nH]Ú@09û,ƒoÞvsغܟ×çÞål¹lKf~ñ[>q ÌÛWžú!ë³5däÀ“j‡££§£ö3NÅ) <2p Å龯ݷÈáé†�ÞPØrù–Ú÷ǯý½gUÏ¢³úñ·üàôÑéåÐŽÌÀ :e kwwïšÞEGç½;Ï:S)—Ê‹ÒÔ«ÛúmëÅ,n@^ÿñ×Ïm¾lscÞ¿ÿã¿ëå©ò9!ßÖõÕUÞóé÷x=}=€©‰©¹C{™ûß'Ÿøù¢4^ª‹hûæ¹yzÛÛNKùÚõØ.obïDøÜù:öüöÜBN•Ÿ8ñÏtwŒææÛ~'ð·œJÃÒNzí™�x}†Ÿ/«…?U>BJò¹€º=»™�,Eö†jŠTŽ,Ÿ‰h4SÕ*àNLN‡´5êX–àà\@µ´ïŠ ù’dt*àÛÎ>ánŠD‹cSþü£ò KËj‹–U&Q|`,à¶ïç¸éuê‘pßïʤ“JÛ10êÓ˜] ?ñ% Ç…Ç]^uu¤Ê*q\ÉñQ‰#¾BB.N!vjÅæ÷\àM7¦ÏšC`,e=ÛÖnR,™ÉØ‘­é¼ÕiÕ“¿TQö–�­ [p쨋ã„\¶%¾Œw± þšKC®á1Ds�F}Fgã°MPÌÐÜ'“¶ø‹o7PîíÇji!Hg‹%9;ÉJز”î¤nÁ#pó&6‡÷@w!^á2§H£[ÄwòxS“d‡òÕw nK��ññYlS9išºþ1¹ê¨”ãæˆr390Wé뚦¬Ä«¹5ÙŒÁXªk¸±m¼Y{¬dJ©šùj°æl>D�놑±DH±®2—éi7¸f[L!qÑ áñ‰çóšüõÐܾ�8q‚¯”nCë?@Ì2kM�ãEîUNH±$YÑa.º&Û[¡.­“IJq­<¨k‚‹6'è^_GîxN9Ôéóá�©¸ÆîC.kû¬Ó®%–)%–Ëʇ©Þ¡¬ZL«õÿtÈw(aÛz›lR§\ ñ}uìýV¨QH®(™™ èh182èÑÙb`™‚Ç=Ž ú¼ìÊ8Ž¥²B"›–.�¥„žVE¿ˆš=ñ‰QŸ®ÈÁðÞR‹íMRJ,óÙç€\Ê2Q”›þþ¦á­WlíX4‘‹ÇôX|yºæ0 ��?Ýi$[“åúÆúÚ GG–šžŒšì|ÿ|¢z÷ü[ËçòÅñ§Æ×<ÓƒÒÙÓ)4¥áLJÏf˜ŸË§A€¬xSÜ+Oª&ã²·\–ñ«_œ¸çg÷öýbß9¡^­¿~}ù�?úÇÂ÷}íž»îÉýö¿5Ìžf.,*¥Êi›³J¥R¾íïnÓ€»¶ïØ~ç·óÛs õXZŒ>44M.§‘J…lÝšá?þ#\¢ù8 ‹%÷ A2¡_ù‚m¶ÜyÐ¥1«a[!𦑠CòÇóx¾ÄY@A(UTÂñ3u­±LE£Ù{Ô¥½ÉÀ$Íõ:‰(À­¯Ó`p<ˆ^Jg1“ Ð4ÎhÉxò–ŒkŒN©ý £&¤ß¢u­…Øç‚€Á1¸ãç^ý²º¦xÈÿõÛíͪBMðªú“B)ä5×$#J•¨=ØJɱ!¤Ê=i‘eZ6&Ðv–j'â{?ÊsÃõiâñ¥œçIrYÓc*7Ÿ]WCU}Jä£E+X·É¦«ÍfìX! N ùì0+lÝ;3°Äÿ Žø„˜†r;:60ņÕy²¦FZ×ùú›$™Äƒ¤×u:3<~÷{7R6Û(hY&ƒ7× ¦Âé ¤"Z—!'¶]kN~Wí°†œÔ͸P®@©3³|,>N¯,‘�.иfš�=»IÙ�cØ´*F<Gh&a8¯óÕd6©QªH ]q¾[êuët6®Î� âµ@Q㨧2F��mZ趇WÐ)¹.ú‰’²~vTóóÀ“)kbCéQ†Æ}â1ïœêQNÞWR—ÑiŒ¹ª4ªZ`¤uÐ4‰”ZDQQN-Ý&F“�J|Mà”BÊG=Ч–¯’â•íª Ö‹ò�Îðž²:£S‰Xˆeh5ÄŠÉ�©|�ú¬NCZ[¶†lj6À²„JTjüª.ƒäBMNµaÔíM6»¹H) ¥ÒT*!Ó£ùÎ;<+Ëe—rEÒÝj�Œ©†þè�O®2W”d“‚î6ƒŒ+Ù¸&6¿hFvŲÏ}#/æF®ƒ¦…|9Êxßâ /æ§÷)‹âj“W*‡‘}9 Oúô-h@4 .Ýcz.àð Os=¤J[dêп±½g3öÌ�(–BÈÚ¹8“ Hs½Êÿ°L�ç©óYŒìÓφD5Õ)Ëb+ •õ#ëõñ逎fã´ˆâäLˆ&A¨Œ%„ rýR6γù�ã#ÖØø‘KàØTÀ†Õ&�Y!à¾'*J¡¢¥ÙgÎÿ0«ù‘À¾Xén3O“°¨kj­Öu%V—òÙS°–E¿zëß¾u檗\Õàû~85>å/k"ßP‡³-€ñ‘ñÐ+z6Àæ—n£‡>G–õf;z:䂆ÆÝýóÝ1€– [ЉÔÓ \ú¡Ûš,dë³54ftpôL4ÁÚV˜+,yUêºn>ÿÍÏ/ýüÖŸ›í›Ú�·¾ç­¶BŸ™œ)Üþ·gÏÅbzÅ\1yé5—ƾõÅoi�|ç‘ÄÙÞïŠ+V¸—>ÿÒÓ:„Ýñw¸¹�œ ¼ï|={~{Ž7#ó:�ý×I®¹æAêë/¡§GçÚkoà׿þñiš�Ó¡ § "�Yý²*…a6/Ñ5I†*}7*t«¼çb)¤·Ý n‹y.û3Y§âŠŽ5>íÓÛa.¢„d’ɘÆÞc^-ôjt*àW%žÑïžð‘H$r¿Cë6-«-8¤BÇ>õ¹iú{,f,õ€NØšéO¢äßÉÙP ÷—Ðs$bQ2âÑ‹ Ò§-�4mN!wÎkB¾ó_yn|eŠtR;¥�+•%Ù”šê%ÒŸr¨KëTqÒѬ+‹à(¹ Ö\¯Q§A¢Ý¢ÍCÊâxhÀGÓ6¯·—?]—êó&âQ°š­- A’0hšN�zµñ'élyHdRû(”÷2›› øAܤѰ)ÍjG4h¤Üz4´AºŽ)#Í7‚”¢pÅb`UÕ«–ú¾>[ƒ+>¹ 9Áu±Þî�)—±KŒÙY‚áa¶¯ÝCà»Ç!´Š¬²‡Ïcê°ºË “Ô•¸ÚÖˆYó–Ÿ– fJ'7H· d6E(C‚yfÆÊå/Êmp=UÀ%£²ì„µ„lC' 8Sçðѧ®Úúìô(KmÕÂmtÒ§§ÍT:k^¿a[B5¸RR*Ï¿Æv5 ]¢­´°5(s™*K\§ø¦4cSÊbuaêørí|¥„ÕÝCã¶%Ñu�”’¡±€†¬Æ%ëm4M5ôã3A·tj¼‰Ÿ Vu›‘G¡QµLj¦Yµn¶lHÅ5dBCvñ|Eò øáݦfs²fKk Ž�ø Žù<KŒ£> Y‹^¨Öm�-÷­ìj¼ìëWòØu×)Ý”çñÚÉc¼hü‹¼öåEe*°@› AðÝ-ª¡ ÉÿÇÞ{‡ÙuÕ÷ÞŸµÛégÎÌ™>#�º¬Ž«,Wlcl00vB $Ä’÷…!<é77¹ÉM`D›0Õw[–›dÉê–4Òh4š^Nßûì²îkŸ33ò¨ZÉ}ßDëyæ±e�NY»ý¾¿ß·TSEeó\±åœA„Ù´ºG׈§\Ü☖9'ýjÇ–ùGmƒsG IDATï~´øäÆ­÷�¯aϯÿOAf;X��ûìÛÐÒÙ,\}µÆc� ævç@øƒ÷7Ü’IkÂ2k–Xìîu‘RQj…®ïÉzPÝ…«"´t˜ Qî=£“þYIC¯‚ÊÍÈÐñ„ aÅÒ… 䋪kÝÜ Ÿõû4¤4F&ëÌ€Wª´-µh[�]ù’ »’’ƒý*uÝùÏn¨?™*ø4g4–õœ˜m�*·™C.²SÙg¶Š ­&Ð_*Öëýo¿@C“Æ�3Eð}²Ì¢NÓ„g¶ÙìÚW¥µI§9c2>pdÐ#b*>»ŠCK•€î¶(Sùñr�ÖIÚu�ìS²·¾Ã.Ž#Yqô´“à7=WáuË­z‘P±•-¦úQT½|Yâ¿ô9áUu¥ ]hj?¯ôUH Û\{eŒl£ÎÛÞ4Œ¦=H-–¦\†?›ì€0!^Q½zº¡qŽ„x3 bŒF© ÁØq““›Ý7ƒ[ SâK¼ÕÍaÌ+’u‹ÄKtLörûüÍ!%H#Õ¨£/ˆc1„(aƒ‰!w×8劬‹ák¤²­è3£Ššçyжc;’¨¥&"µÂ*Uüôs•ïTU™Íè¤MAcJgÕ" MƒbY¢ë é (Ä¢‚¦ /mûQ<Ÿ:Ê4`|›ƒ›TȪ'y¥ÏÅó¦¯ãךÅQK¬·¨ØÊÉnõ‹d\´5 S%³Œú4¥4ŠEñiiÔÂ`J•ž�ªi€Ê�Îénñ¨ Ò¨£­P íŸÖF�ɼ�NbJeU¤ê3¨a±ˆÒYí;ìrɪ-ý¤t9×Ó¸ëÁ7²å¦k¡±\—kŽæ |ƒä%ÕQ×”ø½v_s=u=8®d"ç#N²ÁBÀªÅÖ.3IDkbÌCLx*QÞ•u0\KoËê Œzø¾ÒmºÀÔ÷´ÌéðØª “… n…~²UË<„Ù®22§89,SЖF�ÑɀÃn˜–®€­ãJ² n0u¢BC×%{û\®»$†çK,K™9xžÎ�~oÎ~tÍ~W× âOÓ¼Nô¥¤N?L4œõÕù¡K?$d 7œìwÞú©·Ž^ÿæë[‰ƒ{ïgï-m¾wói%oG£v¶5›œ dÌ[8OL1émûù¶S>/¼éÂYÇ} o ^¼/¼`á,UçÞ-{Ïú°hÅ¢à8ptZ a¨whÎï�ŸÊÛÿþ·ÿnÜþÇ·OvÎï̆à©ò˯ü2vŽŠ­ødïäiýââ«—?üçÖSéÔœàch`¨ø…ßûB¸_Óµ¿?_Çž_ÿEÀÈtšùG?úyžxb=‰d2×±zõ#ìÜYœc¢�|@\°ÀœŸ ­ewp™*¨À«ö¬N,ªÄèµôݶ¬Ž¥ b´Í3ê�…×2 9žk&ôaÝ„®}ƒT\CÊ@QHB³q–8$Ut,‰�|Å¡ã‚(»Ž¸Dtµèèº _T¢OML‡aåKc“k–žZê‹ eÉác.`­~…æÕ Ø5mÑ»¿ßåþÇŠÜr}²¾MiÕ݆‡U¤e*ºU:©±°Ë È㥽.Ëz UÈ9/¿ReÍÒÐlfw‘Ö5i:5�vØàØ�Çÿ¯qþßfh™é¿/ç> Ù]YÌF S£§Ó T‘¤’HXH Ž£È0 ¾ª~lGRv$ɘඛ“t´3ÞgZk2§ þÿ™�Áùä ¾÷Ôëh›×I²1ƒ–Lò{à �® ⣨q†©â�cQhP£¦Ϥuù>T«|Êù”+0R„—ÆÙ~í!Êce*å n%�—?D{CUW£ â§ ‹{LtS°°GÇö$óZ :šu"–ägOÙÄcªh«9E,åÈ6™—´6Q߯ÓYµn®Jõöéj5èn1H%TJü´FEÑ�Ž y³ ¶ GGšpœ)~ôÃeÖ-3‰Xê<ڼæ»Í oЛ8„v’sâL®g¡®�b%ƒì”ÓV,NÂ�F§ª‘ŒÄ£½.+Z¤“‚Dø§¹”^%b¢q�™Ðˆëà[ß…Ê„O©"ì l&sù’‡š&d@±¢ÎM•_ ÍS÷…á ŸŠ0: ¯qYÞc¾êx+·ýô lZÿz¥kr]îíåîU_ÂÒòõߟ,u+ZÓuA»í(x:¡ŸbФ¨R‚€@*°_ ¶t=5ñ(…YHŲ 0tªÊ1j¿KGÖ §C¹� Œ*¯æŒ:¸‡\æµ�ü� ’:‘0;DiW­1“ÒO:ýZÚc*½¦.Ǧ´ÎÀ°r`«9hi‚0Ì’zfˆ%ɘ ·®ÑH'U¸k-¡~æJŵºÛUmK•“ËT“²ZvK¡üDè2�+€Š�ßò‰·än¾ýæ¦ð ?úÆ�ä¦olÊœîë_xË…ÁŒì ¹íá:È�íÝíõ¯996é8SÎ)5KV/™µ5‡öªÿ¹{Awý¿ûžoïyxOäl÷eÞÂy³ÒÙ·=°í´ÈðŽá˜ïûŽ®ë³Þû‡_û¡×¶¬M^wóuu§°g}&øÏ®Â®û­ë¦Þñ�wÄMËœSq559eÿÓÇþÉtKîàÝw¿p·äü:¿þkf€Ioo• /´èé�ž‹�;gN@ŽÏ9~ RŸŽ,ézsF7"<·Ó¡)­ÑݪSõ$ÏípÈf4Œ0¨«PV¡P¹B€è÷hï4hë1ë!#g> ¨ú’ª§:Rž')åîÖÅ­ªâßóÃκ%; !yöC×LJiBÔ®L½P&m)1g$¢@G<¦:sAnH½š˜ò™Ìû´4ž¥&'!Ç\¤T ¤… Ù‹RðR¡þ�<Ðïò­åùµ·¥96è¡¡:»ßúE‘¦´F&¥¡kÓ4†bYR¨HÞ°>:+ɸoÐeï!·þÙäËyÚW$é$q.__ûn޽7CºFÁ˜ãaýÔ³eÒIU,Fb‚b)`xÜ#j©|]SœzËT™ €vd%é´Î‚NƒBYòä3®½2FG«qbä9ó,?NõEná)z: Z›t\Oâo2Y4?C“#•°øÃï5Qš¿ ³¥/ÕÀH,Éþ™ ñ†1-ŠO§g�|ë‚ �r!ê�cC¼ÌMA™À-âV¦pøäÂ'¸äB �Òãȱ)¢–¢â]}iœï>TÆ©ªPBSPï75h*™}ÊgxÜgåbkÎ⨦ Å“omÔH'U÷ݲ±DBj¢U³Ç�(0oÑÑæ› l­Ô¯“B1à‡Ÿû¡rm‹¨ü‰çvVéhÖèh1¤²¡>a3[œâ.tš›ö¬NG³NSZ ükô’$ÕÐ¥J‚ �,ë1ë†1íÎ� ¢M:ÂȼO¡0b‡€×¥N�+Û’]«R½m�ç4ÇF<hL•!S£ÌE,Ȥt6msø�·¥ö¨V%«—X3@¡Á¯>ø&ž^•Õ*W âók¾‚¥çë{#�=‡\V-V…x�ÖꆊÓѯùŒMøÈŒ†ëk˜†œ@$åŠrÍ÷ë4]˜†jœL| H®¾(Ša§ßQ ,b�Zw£ êÇÀ A]Ù–'µU "‚ºè}ª¨B-;[ÔŸw쯒ÍH|­nýlè‚Hƒ.Ûz,Fû]HåP1•vèÈЫH[V¯káÜ�Š6ž hLϽÇíÍJÓ )iUW2ñ]°N˜ÿñ–O¾Å½å]·¤ÃËÉýá7~X|ðß<#±ôÒÕKëOÔ©‰©b¾?ŸXtå¢ÒÌì�£}GO«Ÿ ¶=¾ÍÐLÍmio©Ÿí#ƒ#AàÆY–*~{W{âŽ�ŒÛnÑMœÖßh¹É\ÐÔ<�é8<ùÌ=Ï4~ú;Ÿ.é† 'IÎãß|ÜüϪ¾â­q÷7þÇoTÖ\´æ„à±�+LüýGÿ>:Ù;9 ¼iãÖ�¹óuëùõ_€LÿhšÄ÷ÿÏûš›}–.ý(ð§Ì­ј@8€h·¿1•5 qu±,½©B@KFGhê!´f‰ÅиÏ褯ò84ñêŽy´Í7h_d"zÃ{ׂ]‡\IéJ,„ÐðIÅ™Ö^ØŽ¢À”ì€æŒ*B_ËjL©p¶²-±,AKF'Ÿ*kÏêL¢Á‘ä Ên÷m×'ÎhÊ‹ ¥€ƒGÕ$DJh¦Dóêbw©Þ->pÄåþGK\²&B<ìz'bІbè¡ �§21& ^˜=2s-èP´Šþ!¿.–{Š´®LÑiép°ŒB|ö«SüƯ¥i;Ÿ[ :‘FØÁ)ù$ã:ù¢*z¤„ª§²bTg_*e[ÒÔ ±þÎÆ6çˆLx y¢Ì5WÆèé6O=�;n=±¹L"Ü+"Èã9¬2 ¦FR×øú�ÉWFÎÆ›†¢*íéõèðêA g=ª<8ñU¼¶4*½R2®’Èk.f"L�7t‰&4ü Àqu&r>k—ZÄ’FƒNÔW‰ïUrƒ^˜12�æ}tXÑ’FµçDÉñUW}¸EÝ&Û_©�¨b] ² C�AÙ ŽzÌk7èöÙ{ÈeÅ"“’mñ›�¿™G/Þ Çá¶áƒ|qÕ=Dõ)õõÃ�& �‹êð~R›hËjb‘I�šã¦éÊ@£)­qð¨‡f!9®¢Á�«©OóŒÃÚýË4t e•õ‘Iéø�$愺!8د²ŒNè„UËãÐÁ®ªÏŸ/©@ÀèIL¤$´?Vz%\ð<$@i0.[¡Øãب¢´&cÊàªË\§%êêS žPB(€z¼F¨6͈˜LO3J'Óàˆ:8r\¬xÎÈ ¿}Ãø-ﺥI„„µ¾÷@ùÁ}ðŒ�šæ/™_ÿ6ý½ýõKlÕ†U³õ¯ôi§QBøí]íõß+—ÊÅ‘Ý#)€Õ7­¶5M«Oú÷ŸõtaéuKˆi¤ÎÕÖØð˜œ@ä}_ºÏ¼äöK&,YÐ8 ¹•±Jò?£òºêׯ*ÜöþÛÌd*yÂÌ�Üd®ôw¿ûwÆèÞÑpãÆ­Ÿ¯Yϯÿ"Àãx†’OèlÞ\eÑ"—†ƒåËShÚ%Á–�i›Ý™Z�™-f-×ÚÓZðË-6=�F½ó_u%Ų,v4ë,ž7]´:¦Â¯�Á�ön5 ©½ðè¤Opš…ºi¦ò±H€¦ ?À4Õ$¢>Xª”«’ ¯‹Ru$£S>ùBpÖL‰zxMuJø^ï&kš"lÛá02áS,ŒLø´5ige¥šJh˽. eø¨óË4­M"wÕA‘ðJŸÇ÷z‹hB=絘!_^ÑJ$¹’dpÔãÆ ±Öé¤àð€;MÇÙU }UÝ‹Ä!;¬/"|åÞ<ùÍ µIˆœžHYºÚ Ó8¶äžû‹tµ,ê684àáT%M :±È´Ýk­ÝÕ¦“ß_${Ebó0yæ¹ ±˜Fë©è_sìŸI- LàT•µêÌCH�Õ!}ZþY:š�’Nì›%ˆÿAÄ¢ÙŒP™Ò)l9š¥Ü:-ˆŸ0’|ÓO*ZW42-ˆ¯ONRuA| %® â]ÒUVÜå2‰bc|œ›‹û¹eá2pÐaN‘ŽrlÌcbÊcA§É®Ù)ñSqÚM#Ô;$4â �XVGf-‚Їw¨ÊXÁÇ ÿ\O2– (– M¡hG^0ͱ¯§™´Ò¤Ô¤3çt‰0U:LVODUç:™ÎãˆX¢žgQuU±HIÔSÖÇÍÝMK,ä¤O~Øc™¦U•mUW]Éö}Õ:�kf×þtVw«N¾,±L©Šu!ð}Éîƒ*ä…]U^Ú§rwÆ&}>ô®6~ë¥[Ø‚‡[òõÕ1´òì-ðóMå�¤Žg-<Ô ï§§;½M'4Z›tÚ³*XrËž*“…€B)`t2`"ç“ÍèõC#¤2)›jVhèêø~h�ºùåuìª$6‡Ã””°|�Y§©y^€S•uÛõ“ÖËzý8—lº sP§ ]­j"rlÔ%Ñy˵q2eÇrw;–ãNÛ½×ËvPŸ2*0©2J"–F¡¤L"&òÁˆyúD¯9Ü�ÒµTì@9×½†ÓþUôkóÚ©wþÆ;Bð!þñùÿí�3g|= 1 0ôîë­Îù‹çÏÚÑ oØ`_tÕE¥“wútLËl­ƒŒCýu® .º`Ö‘=¸ûàYoÈÊõ+gýyÑòEÞŸÜ÷'#'û;[žÞbÜÿ÷7 dÙªeµéGiß#û’ñ“¿ÈÏ)#câ?ºòê¼°³üžO¼'X¼|ñISЇ‡ ÿòûÿÛ76¼qãÖ�çÏϯÿêS�€¯|ån¾yˆ¦¦nº»á|ùË5ÚÕLâB„hR¢½ï–ä¥~ >>8æ-Mz½K¥Bÿ`ª(96æsíÅÑY€b^›Á±Å;Ÿ‡�èW“�¶ ,ä>å¾46àù§®r*Žro)–e¡šÖˆ†îS�¯¬ ¥€K×EXxYŒÜ.§þh™*œ= T„.5†¦ܺQ2«–²wß+‡V-µfG<š3ª8™ä©V2®…ül�š¯ºÜ[&».…¾³ÀÞÃ.™´ Ã2èðhkRÉóú ®R9`tÒgéüS?.Ó:‡=ðˆ�9Ú–§è\ªÁ+åÐ�+Â׿�çÝ·§È6êu˜[ªLNú4v)oþ—WiΨ| Ó,ëQ]ä¡181T²´í(KS߇ñÞ*S4]Þ¨@ „Éã¿,sÅúój9âä�ôŠ-ÉMt¶(;ÑZKÕ•a‡J÷<È�Äœàcfãùpèp™ÔˆÍµ—GiÎêÜvÓš>H-|±b þt¢ÌfÐCAü7a~·§R¡ >2=9©�“TŠÚ¸='%ø>wû¯çîª Žvò>¨å(dKhÅ<#¥!Þ–z‘ùÍ#õISÄÒHftŒ… ]Gäª”Š’Éc.ÎnGàašuµ vU¹Õ’âUð  Wô•Å”3´ªÈOÆUÁ–ŒŸ»@À©B@,¢:æÍEŒF¥r ãa·e šçGÑÚ”vN0™—¾�(àÐ+UÒˆú1u\ÉÞC.�”JjêQ»v϶û�Nj Œ¸u=JÍÚûò5’q­.’÷öý¿ü~ËÙ¼þ¿r�cšfÝóqû“ÛëÿoÛæmbźŽi™€æÖæì™¼vÿáþ©{ÿîÞøŒIˬ[ðΧvžµÝËñ9#é†tcºá¤�á׋÷s ü×¾éZ5þþéò’Û/)µu¶Ízßõÿê¬Ì‚Œ÷Ž�¾£|ñ't]?é>Øs ÿOú§¨[r�Ÿ|œ_ÿ­H¾úÕ½üéŸÎ#“‘D"ïAˆ—�òx ÖÌHXih¿õŽDº»-òw­�ZK4¢ÉáqŸlƒ²Zõk£érÀÈ„ÇÍWÅæœf´7ë>æª.d§�<âѶФc©…¶_u(Ç&O B·X£!©Ñ?ì16¥,pÍ0üÏ®Jæ·ø.Œ¿lÓ´:ŠÜ[­Ó-jÂÆ³ÙÍ �5¶�/·t„¥] ‹F÷ä¤e*1f(ºŒþÒä1ÁT!`ÿ�%óÂNàËE^)©x"®c02¡,^ ]®;íÝﺒEÝæ)¿¯Åì}ƒ^8©¹¯@ëê �+b_©^ |ñ9>øÞšÃ°/]SúÓTt”§žµ™ß>�‡âùªû82ðÌv›u¡ðÝqF&U…l7à° zŽÆõ͈-“ª žÚTáºkbÇ Ó�«NêÝX‰*©:b \_ªP¸0EÙ®2Í�—(Ú^¸gÕ°€±«Šµ·½)IwGí}eÈ›Qa, ‹;CA|�Ïÿ;³/·§·Æøêãkéêé$Ù”!’Nñ±Á4d¦Ýº"3ÀIÒRN^áúR�ÚNN>[½Ce�J�Ëñoˆ¿{Û0ÞËrãEìÒÝÉ—ñ|Ÿª+°«‚²­S(+»Ñe=&º!Y·Ââ‰ç*Ìo7HÆë.°Ø¼Í!Ñ0 Ð…¢:FB­S €œÍ$¤TQAxQK� ¹ýóÚ UGUñ ­�FýYÇT$.fp|®óu~ñT•Õ‹M쪚FJ’ÞÀî^wlÌ8¯_ë2 ÁªÅûûÕë75htduÒI­¾_(Ø)þªtÛ4ø°mÞ7ºŸ[÷UL½8çk�Mù Oø47šjßu¥éq=(ÙªàMÇOCƒ¡)}�eŠºöÍ]¨.º`:³nÅB‹ÃÇ\†'2É�æž~X|ñ¥4F0v¸ª [ÄTy-sûxT]ûKM]_R®”*ò¤D„Ú9ËPá—¾§®½©|89Á_-”TŒ•„®[BÖH¡¤²ŸrÅ€æŒZS…Ð"=¦¦!Ïlw(W†'|Z›¬î­ÕD1 óp”¦±)­�õäUÓ�­?ß:±ý‘í^xóÒ …ž³=Q÷?µ?øäÛ>Ù[ûsþh~Qíß7}cSôù<_Yû¦µn$9m°àU=¯o0¸}pÖDæÑû�=“T¢nH9¶wì¬Ý¥žøÉ±žxáŒZƒÅÉbý¬Þöóm:¿�W*–œÍ÷lN|⛟¨¼ªÃÖÒxΫ«X6V¹í÷n+m¸nCÒŠXéS•Ï<öLþëðõ4’§€Û6nÝ8q¾F=¿þ‹�™4¬ þÏjõ{LLÜ@s³`Ý:‰¦™ø~À‰iXÚ�—[æºe±hoÖSqMôy³f×èCŘ**�-6wÇNJ˜×nÐ7ä‚�Jh}È¥¥Ë }¹á$dtâÄ DJõ^­�*€ª«Õ W xöe›dLÃ0U€W¹"•àZê°Ë¡éÂ(bÇô®LæÏ|HU8aWÙô”hÜÛi#¥-íÐöTuœ!W”dÄi%Ÿ°¹’R“�ZNÀÎUbQAc8õ1 Ȥµz^ˆ>Äó%ŸÁ1ŸkÎ0S¢1­q°šŽ%wNѶҽ‡k×õ!Ÿd,\zû 4gý%�ÐxëµIxªB:`Y¡­¬ 5eÙÛ?ä‘+¬^jÕ-[Ot�h"šPZ•¤F*©RÇ£UôZa‡i¨"7ÕÈfuví«âjªQõ÷|ñaJOäúðÄ›ÑIŸk.ŒâÕ€‡<7`ãľjd’]-:M :‰˜‚çGùý£ïd×E«É—m³àà~Úwß�»ØÁ<Áfiº¨gôÔÒÂ]ZŸÐ–5NkpSsç2 Q7¨ØòU¡–šP¶²ùRÀ¡—†u ¸h�NÓÂ&4»íHḸÒUÌ×–U��ˆ©¦ëJò倦´vÊ©MSZQÏ|?.v@,zò°ÚšfÐõTÓ¥N9uTÓ¥oÐ# ';QõÏñ)Ÿym:Í�@Jœª ×ññgÝ“¦?Ÿ …Œ˜9'À©†¶Ó¯�‚õ*R.Í?W'©Wñ’ù£ùêÜ’Ûòý-gú²sº7½ô×ôsõ¹·ÿxûÙ¼Výìr¦œØØÈXáHï=š�V-_ô*ÅZ÷ün³ue«;²{ä5 Ñ»/é.ßüÞ›½µ—­M˜¦yJàåVÝê÷¿ü}û‰/=Ñ|øðÆ­«çëÔóë¿ �šÖûüÎï|]¿ƒ®®€ë¯ÿ ?üÙ9& À{Þ‹_¾.þ×óÚŒÆÆ´²º”F' ÉóÁv å€c£>k–š§,z:”-¬âc›HéѲФce±GÑ¥Æ&ƒ9…ãcS> IcõËó$�-ѬZ¤:Zã¹€vÙ\º2È­6ÙÕÄ4sèŒAH<*›RâʈE]ëhªó^Ë~¨ØŠ_¿¬Ç b«ÿöZ–š„Hv÷º45(§£DØÍ3 Á…XlÛW ]¯ P–ŒN,_ ‚Ïd ¡ ŠÃƒ^µŠ½9ZVfèX£A¨A¾òÍï¹#�)T2øk‚Õl IDATã/”•xyæ4&tà™*ŒMù¬\l¾êý–Ì78|LÑ¿è0Â"gŒÌ번€‹ž|ªÂâ%&ëVF0�st[¬ B: hQpÆ%?kÓܨ¦;† ô]µwš6íT²%Y�µožÇðóƒuP÷‹ÇJ\uœEóÍÙ@c‘sNdúŽz¤JÌ‹jxŽä¹—GiŠ2¦AZ×ùü­‹l"—4,6¼ðÒ2*F½�" >6Ð&ħ ž€ø‰ÁÉ�CpR›œ<ä¾òU¨T T†ü_jf8Yf¸T"]'¾çîü•2�>�èŒMX˜f„¶¬Î¢®pÒ(�6žó9Øï²b‘E4¼ËjªØ�Ôð…²lýC®-jB¢…´ÙtRcçA—·Í·TÃÁ’º$tlG4ÎlÕöÔ2¦éu¶æ÷DÄY�+Ï×#ÿ1«ï@Ÿ±ç¥=þ•ïºRèºn½ékÖû?óþÂß¾ûokΙN;Ü«î¼Ê^Ýz}Þ‚y1N#¥`lx,¿ñ/7Z}›û¢Àïlܺñsç�Öùõßh 2“¢’Ñ{{KttH2Áµ×<ü°þ¿™v¼º± ËL´eõy™”æ§âŠ.¡iÐÙ¬3žS‰Î[2‘—¼n¹IgË©oÍRBw›Áþ#Êva§‡$ÍóLÚëIã‚ÑI©8Jh�¨‹çvû%cS>ÖFêÔ¯¦´¢dmÙípÑ Õ¹–/Û4_#ÛzB("ÏÐ*t`ÄÃÐ ‚€P «’›•ß¾r­¹ñºÅIŸ‰œÏȤ_碿–IÈ�#.Íz=çÀ2Uc"ኸƋ;m& ÅŠÒÆ_(œÉjÎÌœ„h»s´®l s]±£BPu%÷ý¸H áЀ‹çC[“>�¸†1æJJû†õ1æ"ÈJ©@éž^·ÖØW?Þ8 ëÚÐ^Cà€0è;äò‹'JüÁGšf§8 5iI'´Ð@#°%Ïí°iJk´4ªàÃÃÇ\ìªrZª» PàQJÈf,‚!›ö+²ˆgÇë`ú©g+Äc‚öãÏïúœQÌYñ yÄ£†!0#‚Rq:|°&¾ ¤@b¢Ç}DÛïÑ�ÞC¤ü …â^ÊÈ•|~Ó˜8¦³ny{Jã?ndwz ¢­�Kz™4“|ÃO*pR›œX3ÁIh¬{÷~0 Í«§Äkö¯ÑãT˜zCsjŠ\_ݼŸLÚ#¢9hAÍÅÒËdt² ‡�¹ŒM¬X¡»Õ �T…y,ª©UKµfTI(ZŒlÖ p]Æ‹ªàv]æ I"¦D mG‰ã51ÝéOăc CptbDýÚÁHÀS[ËlXSÀ#¤�EMA R¼{Ï;Ù¹êu V*\Û÷ ÿ£á äD�r“γ/Û†àÝoJ¨Äõàû�–XµØª_Ï®'ë9Bš˜Ùæ=E—:œ&º†ë{T=D*ö‰…à2vÏë0ˆGEXà…:2§J=+£TQ™CnÝP"ôõÈ®X¥PVEúИGsÆ8i¾Æ ¦m‡Ëõ,)”šÒú ¥æw†»~¶ ÛöUêÏ£XD�/*Zªj\LC�ŒQØ«{¶Ò×4$U å\{Z;&ž¯ìÂc5:ã;ë]—ÜArɹx²ßø»7暦!ږǶh½O÷ÆÏöõ²K³¥7¾ï�DãQùü£Ïë;Ø9gW?Úõßþûow'F&ÊÏ?ð|B7totïhâÿ ÕÎÎvz»ŸÞ­ßññ;N(öX¼|qê�¾ûGùoþïoý/ôŸr¿ÚVµU.¾ñbwõū͞%=†a©Ó®¾¤ ¶lÚRúò'¾ ÜàpçÆ­Ÿ;_—ž_ÿMÁÈ4ùøÇŸäá‡ï¤©)N{{×\ÓÆ/ÙüD‚ŒEõ¦âZ �i"–%¦&}Ç|v¨’+ä‹>kÃÀ=yštˆ¥óͺæ`!ô{d» :VZ°»ZŸxT]ÅÙõioÖë6³5·«ñœ�@¹Í©„†S xæe› k#HtØfÓ¼6‚®OÀÓéÖ�3'ãÊ¡êð�G[U'Up‰ÒË’5K-"I�ô< ñrŒNøT^#±,õ0Õ5ÅùÖ5HvFųGµëçëkV–™MûäKNXP¿–ÕžÕé=ê"¥¡^kWŽ–åI:.ŒS|ºH©„€Ž ùÊJÔ­§·G'}ºZõ“ŠÀŠE&ûÝYþÏ2¦qE ºPt¬Úôå‹ßÊñá÷ffu-÷Â싨ÊRØsÈ¥§ÓP]ó¸ žßé0¿]'Y³,”×ânƒ\чý´Z¯h…§GÃbQððe®º<ÆÂyæI ÝÙ4­XD@ÈU75�ãªóY“§) ¤¢Uò:Æ+ÿBà¨âO‰âUwéRul±Ÿòù£;JÄ"ý@@{«Žm þx¼¬,èI4#Êâo5Bw745Br† >Q D×!ƒD‚8T»xƒÖ_ÎÇ]WYOÙ6”J\VÉq¹^¤j(W'˜â·®yš‹t"–FÄÒ°L-,øTA�Lh˜�FT åJUÉÔT€}Ô«SÝš@ÞUÆ ÅrP7SÈÊvP‹º>Ú˜Nv쯲f™uÊ)Á™NI„€çw”Y¹8J"®ñækaþ‡æªH‘à“î`çêµjúT©°¾wÿÐý-·‚¦®w¶ê¬]jrßceÞöú8éÄ4©e�ºšåŠÊ‚¶d«À»DìÔ_¬!©À´e1-ƃPOAƒªM(!´BÖ•5±P*̇®~Kç+ÛnÓÐ)”Ž\YŒX˜÷üN‡BYMmÒIý”Ï€ˆ5mq놢ð±©S ×k“_)CêUèLµ,œPŽOùÓv½qMeŽêžÙ¶.ÍÔžA œ-K¹~½rÄ¥»Í¨ß3kͶˆ¥-ŠRàùê²1Îâ|)' 3�áòßúž·Z»^ÚUô=?àTýUä8‰d¦óŸ 㸽mèi°?óÅÏûvî‰÷‘?ùHä“[?é–†Jæñ¯sû§n/÷,éáÀÎòO¾ò'Þß~ôoOyvÊ@BÚœ½Ñ¹>çY®Í÷n6e #-í-Å“ý^Ïâžôg>÷ÿXÿ±Ò‘ƒGÄèà¨_Ê—!„—iÉÄ3MÙÒÑB[G›ŸL'SÀk[ ù‚óÝ»¿ë½ðÝRÀ÷€mܺqê|z~� ø€F_ßšš.¡³SÒݽ8ÊìPB ÈXD[nH-t}24È,kG´/A>ù4ñ˜*ô&rÊ]gf‡ët@È‚NC¹Ö’ÅÝ û%Í=&]Ë,œ�¯ñë\þLJ;ÎuK’+J_ò†ËcsÜÍ�Ÿ#¡Ã€Üª@H›¨qœù“§² {¹,ì2iÏêì:X¥R‘DÃno  ´6)‡•Ѿ*Í:WE»mŠ»üZ@ˆçº8)Ý‚ìaG^±"¶¦¸¿"}bQ�ëk”m•s{ N\B(ã€Þ�ÚÞ ØWÄZ”dï¡*mYƒXDu…PéÔ3-vK¶‡±§%„X2ßdw¯KàÝá£JŽ�YÙA»NBB@ðÏ_žäÿžQ43©2TœhHÿò$ßúE‰®VÕÝÕCzK2&X¿:Â/VènSl†Ð½rDQz¤y0G›ÖHëÕYÄæñpbfòĦ2æë3„é'.tKeÉ‘£K盡;‘Äv`"ï‹jØÕ§ªœ§j´s$¨OÓ\W�SŽ«þ^tuèÜùÖdH�œ¾²£XÒy\Büo‡£¤ð—žÙcWÿZDºƒmùR Iþ¦Ð ¬bk9's€“Ú…ü|ð|-%Þó`C•Ÿ8�r Eç«ý¬l.’JTÍE î �ƒ‡™,€ãj¸ž ê骻îªk¸XVV±M ʹ¬lK15å\<ß`oŸK,*0 M9t…™±¨ •ä >M úYŸãÊ LQ‡âÁdÁ§=kpëëS¤¡åqDSÔÊŠ (¬¸M¼ÿÀíl½`�Ú£J…wÝÃÿZö5<·HÉ«%ÜC"ªÑž5�Rð�K¼ëÆ™”ÆT>¨»h™¡nͱ¬Tp\HœFõ£,Á5Ívd=á{ḩ­I?éà§P–Lä}\:ôQ¢î3¶£ÀÇиOÙhL«²[å èD#‚w;ÜtEŒXDiOÒIu¯ž MNtÿQyŠšWu•ˆ¼–œÞÖxâÏ,¥šL¨¿G]Þ˜Öë>M zÝéÍ®ú¤ L¬Xf²o¨ÒÛÕ‰r0-rŠ^6óžiÿ\ñÕýÌue½áq6³å+ÎÅ“|Ù ËÊžçé?¾± píÓßúôhkG+ûwï¯nß¼Ýzë{ßZŠD#-�:ñ¨Ä0¦;КP>ÈnèêS±Õt¦¹Qc~‡ÎÁÃùR‰[®M¼º«üç¨'ćÐZ—+Äî¢ÈbK£3iðá–4‘h’�1‹{~ªñèd+ÞÂ%˜­-è ŽOˆ¯¥ÄG£j¢2ÓË÷ù€€çªñW¯C{¥Ìu”J%‚Ü$α~kÞó8U›|Ñ#_¨òÁ· À#bÕ„ØÒ �æŒFgk”ï=X¢TÖP«§‘«B4•Ð êM�”§å<'C¡üãϸhE‚æŒF{“J“OÄ,ê_sFʺ©³ã@7Hð©£w°õ‚U |”ˬ?¸—}Ý=T�î a@¾°ñy~ýÖk–Xüì—eÞ~C‚ýýî´ƒ”©À¦bÄ©$ðS‰¸kKY+ÁtÙp}¥¥È6œÚ= Í­M©„Æ–ÝU¤Tç^©ã9ŸÝ½U–Î3ñ<µÿº&ˆZ`è–©€Ck“Ž@¤ªŠt?0Øs¨Šç©ctüJ'Û4UÃÐÅÖÆ“¦ÅÝÊìÂ2%[Q®æÒòÕ¦/ïw¸è‚«›dubeQ©Ô­¶=_½·e Ç”QEíþbΠ’ÚUŽê{þ €¬ºlÑh4òÙ§>ëÜ÷õûJóÌË|ö/>[(ŒÄ'ÿñ“æÏÿýç^ª!¥o¸~C䨡cåëß|½ùÝ/~×Y»~méŠ_¹Âœ @^üÙ‹™ ¯¸°xק ¼û¾vŸžéÌ8·¾ûÖÈ?~êõyËç9oz×›ÌO¿ñÓÆm¿~[ðgïÿ3±á­šu]¯|ñ£_\t÷ w{W}઱žÅ=m}úJW¾áJ¾ý¹o§W]¶J>ýÐÓRÓµ©7Üú � —.ŒÜ÷µû*û·ì×ÿðßþÐØôè¦ÉR¾äÝpë Ñoóísò°ù£Ò)~÷óßÕwÞ¿³ø Jh~ì| z~�_sLAvì(±~ýZ[»X¶L£»{%G�î™>U0{�•lã-¶£I+´/s�Ò¡Z�.v�jÀÀ°Ï‚N)8#"¬Xh²ï°‹/%]-’±ýª@KÄ4L‚  T™:–e×8žó¹î’èi…Æ£ê!Ôvâe›æ•J˜Êbs|ÊuþEÙ¡Nÿª†a[«›¬]jÕÑÞÑ?ØHY¥Ùt¼.ŽxYåiŒ„‰êgºwÊ¢2*Ð5åæâéêMý0ÿ¤l«y{ViE&r>~ðÚN!”Fãð€G©I#S?µ"M×óÚ (‹e»ª:Úƒc—­¶NF6×û­Yj±çPhÙ\ëSí8JãÊNÚõQèw©„àËßÊñÞw¦‰„]Õþa�dB#�Ó ¾Ò Ê’ccKæ´6ͶmLkT�g¶ÛlX«Ñòp‘VC§ùÊij£á4xô—e®ÙcÁ<óÕÔ©`ü·~˜çuË"a¸›F¡èã{*”0Û 38æÕ'z¾/° MSg‘ ‘sEŸÅ—/£­|˜±œú¾ޏ<ñ\™×oˆOOBf‚‘SLfd ˆE”óRkS™R¹DLøxãyþp�EGóãdR’d,`ªe0·ŠTg;v¹�œŸàÎ]h=ABüLp �ª,Âɉð<~R½]Ѻ*e(=<Æ5-9˜,19žcgï¿zÑ£DÌ$BFøÄûbüË·+Ä¢&¦©Âò&r>v’qÁÒ£~-ö Vio6iiœ¦Õ0R(�Ù˜Öð}Œù¾·4’Œ âQ-¡0:Ô X&ÄF\#"ÀL6ñæM·óÂÒ•�H ÊenéÛÍ¿¬ün5§ÄÔ¾¬‹±�ªâmY�¨Äò&Ëz,î{´D2!|èjUÓוõótdÜŸS´>ךßn(à&Ã÷v• žv:@ êY/ɘƊE&G‡=^Üí08æ+¦«�@`V€¡i(0’ˆ)ª™ç×\å4ª 5=-Wæ>uM¥¾+ú•¢¯N惓º«~VÓ >·«J×Õ–�¼ã†�) !Å’¤RñÂû·ºOÕÙ�©‚rrlmÒÉF<¦ ‚ɼú½�ŸŽýÌÈo_öÛ"ðƒ çâ)¾`éñäÏŸ¬Üû™{“—¾ëRo|l¼¼ãg;²·|ü–’]¶«Ë×.7…þ¾û&.¾æâd!Wp/{ýe†¦iîî—v×Ï #nxwýõ]Î?🚥ñ�¿ù€{å�WŠÆ–F¿ï`Ÿqø™ÃÖÊõ+Ýb¾¬|ÓÊ Rªˆñý㉅Ë–úôhU§jßúž[õC¯X{ÙÚÄøÈ¸8üÒáè�¹Óö=ßü¡�!mþeóË€xòKOf×ÿêú))e¹{AwDaìÙ¾§¤ÏÅþò¯±¹ñ?­ª*—ÊÎ#?zĹÿïïO"8|tãÖ�÷�¯7ϯókÖd6ùÁJÜvÛQZ[»hkÜzë2>÷¹½ÇMAÄÑ!çÉ‘ ëÆD,°4MyÌëšÓ×è¥�«üúKLF'Jöì ©3™„<ö|‰5Kc,î6HÄýÁ4 ÕfPq&óê¡S(LäÞ|uü´Ôk d`dk—C˪mÓ“�Úÿöré ÅßðBêÈTQ ØW/±êŸA�-ж„„]vȺ’޵1ØNB&‚ãÆþ§^¾„£#ªS,�¸§„ö3ƒ¸Šå€EÇèNiŒQßg<ç㟋&¡Æš3ʱ§F£H¦ušÚTÊð¾>—bY2Q¸p¹E:yvĵIÈ‹»œz8¢ØuŒÆu‹h׎"ŽØÔ^|á9„Tî>Ïlwèl™¶öC+àR9`|ʧ«Eg~‡1çT¦³Å ½Ù¨Ÿ#Rr´ø>ÍW´Â3£<&›_¨‹ ÚN LomÒë´=ÎÜó@‘�&Í�Wú\ú‡=\_'íhD,Õa–2¨'y7gt–^0…¬&ؾ'|m“C.Ol®píúØ«ùÓ'"¾O�Ûn §ðèóÒ ]ÓÐ4¡i 4:Zà¢Î>ªKº«†ó¨5ö|…½keÇ _Ò<¶§™±æÕxÙvÜT†\,ÅSfrFÎÉtB¼ŒDµ«!]GüU�Ö«"Z«Üç|c¢ŒÑ—£4:FOËËÄ"ªT,³¸yŠE]£¡À_�c®§ÊSG=:[ut]°ug‰å •ýsW‹I*¡©Äu+´6•3—vÖ͈ D�%ð ¥)Ÿ¡rš·ï¼ƒ—–®Pß­\暃»øß‹¿FàÚØRâºà8êU¶iå"“ €JU…$>ý’Í¢nCWY9»{]vt©Ø’Ö¬†ïAß wÂÜ�ã—iªí•áôÑq%¹|@ ú)î»­�Ê4 j j6â®§²’t(GÃŽfØs¨ŠÓH%”VÅš`˜i²È´ �ËSIëɘÆcϹæâø«¾Ç¼v3ÄWž¯Àö©À‡„ZQ­8íÍs_ËBÀ¡c¾¡œï¯[>·¬pQWXIJӪHí'`KiÖ>�Î:tÌC�mÐØ{¸ÊÂN“†d€eihB}.õ0ÖiE’^j¡™tÀØ9!*�Zu/…¦º�¦ƲH¥ª·TÛ‹} ºnÑ�ôèlÑÏ è¹dU„�ªu~7€|©—¦5 è0Ž"z«‚žvËÔxô9›ž�XTÔõ(Ê’TuXû‡=–÷œœX¯ †'f|�Cš¥¤yC♡º&äñ§Ë\~iŒݳ™Ç‡û]bVÍ‘KT%‡Ž¹tµ™õ —‹VDØq Êþ>—–&ehPK²®º’†”FsFgøÙ­—X´\tbë³4„P‚ý‡ž.óÆkŽ›„œˆŒNú؉• ùþ!�Þóe/ tŸ�J*¥À®¸£»]£ì[�] Є�F€|.Ÿ?AgË~ %—Ü�G4bòÕ — Íf0hFŒÅßi„®.•ŸNMƒ“™““H¢Q¤¦±»vÓ''û®¹ž‡\l•¿¦”çròv ­”CŽsGÏÏH;’TLÝ3Ê´dtîxc†DLiFj‰Ý5Z•i¨©G2©¡§5 U[bÛ’ÒˆOЉkŠO{7/-[¡T©ÄE¯ìâ¯:¾‹S-S ‡—¬4ðHÄ%‘ˆ2�pªy9 ç„~%4áïxqGqû/¶×§ƒ}ƒÕ›wDúìCÑÆ–Fgéê¥æ�¿ñcwÓ77%“Iï�§½`ù‚Ô—þæKb×ÏwEfýóùyïš7_ceÛ²Ü÷Õûôg¿õl\·ô ݘ..Y¹$vï¿Ý+·Þ·5uåû®œ8¸ë ØôÐ&'•I™O?ôt¹wgoTÓ´j¥T)÷>Ý›>0ìv-è ,_ 7=¼Éî?Øoèº^y|èq `Û�·5=²ä‘±åk—§ÿÙãÕGï~4}®ªœÇ¾ÿXôŠ®p5M3ÿ#ª(»b_|úEóGÿú#­0PH÷²qëÆ#çkÌóëü:-¢€ÈÝw↠JæÏϲd‰àر™y àïÉýc“‰gÁ IDATïN7/™g.É6èA$¬¹«®â´_}¡Éø�Öew!�„båÌ'!µBWÓTg_„>îc">’]PijöŒ«.Œ’+*ý‡<˲DLMB‚0ìBî®ÒºÒ¢u‘Iï/]Z ,S&cÓ…aÍ_2¯ÂNÒáïn38pÄÅ$²ÛDö+]CÇE1´í6à1<Î)'!A <‘Óªx šðWN@º.ê]ÄÆ´Îä¸Oð\…–Kã´J½vÝÆ{   �øêóH9�¯º±xf86á(¡u:©¸ç£þ,·±³]k–Z¼°ËÁÿ?ì½wt¤i}çûyÞPQ”¥Vu·:çQ÷äa“¹Æ,'ØËZãëõµÏ{ÙµïÚÆ×k–½¶1E0ÎÃî50`‚™fz‚¦ÃtNR·ZY*I•ëMÏþñ&¼8Mç‘€öƒÂÉç�ÍИÇsƒî�,B–Û‚xÌP¬� (¤Š.½ ®òu® ss¡üd¼äCÕ«eC¨ŽƒãI®Møôt…yÇ$�ÎäAüÏ6â¥äè©'¯îƒd7ÄÒTí&>0–‚trœDÂ7�R)�’W�Wkâ3××åOª?Zwì"6W†ùìÆy*HY¤êβ1~™öæ*¡˜E8b²L\ËÀ/äÆ=*Utq«E]X¨´óÁ¹ŸàäÖuðqÿùSüfü38•yO�« üvæ•̹µ_kc嵓ÆE/ýc!>ùÉÇ8pàgÉf%ög×xòÉ�jàᢳ$`lì4â‡vÚ]}#hIÒØUW¹žÙ¦£Å �2iïµ™r™žñ˜ž Èë~±äB²ÒÈ%›×Y¤“1M‰&Mœr@.P,ub[âž� ÊJ¶»]½ßÅ Y–:LOpò‚C*aÔC ¥€éyŸÑI�Çû£«J9¿rÝ¥§Ãbs�MKÒ ¥Û"±-Ìä‹%fç}¦²Á-;!BÀ˧«lì¶H'tjp¥²d*ëó­—Jt¶XøÚJö5ýQöõ)|:eÒq_ŒâˆËÔp•ìBÀ̼w× dxÌ£)f°±Ë¢9)ˆG B!Q§R(^µ¤PXÈLf}ÒMÆ÷$ NJ8z²ÂÎ-!ú6Ø´¦LF&]åï¯é– '.(+^C_åŠd.¯ÊîßZ5øhD쓳>ëÚLº;,š› Z7FiÚÕÎÜó£Ìf=UlNù<ô@„u�ªºpÙaaƧ£ÅÄq%ýÕ:-RMª+"ŒÆôfŸÑ)Ÿƒ;l„Þ™ª`½>é±£7Dg‹A*aй¯�Pò!fŽ}•¹9—Ù…€á1�ÖVƒ7=»q×9 üÍòlé±élQIïåªäܰ×¾SÆq%[Ö[lè´hI‹±–NÁ®‰ãu.Ä\^*˜¦ o“;í¡[¼·\ñOt§e¾ãë/…ÙØ£­%Ìo|¡™+m}\O·á$Sñ&f¢Q;'¦¹X-7 >j´.σjÊeÞæéò‹X•<ÌÏÐl=Áà–  ì:û*ŸÜð·t¤ t¶˜ç32é3:åi-SÀ®Íjÿð|ɶM6³�W�É3Wœƒa¥„}ÛC¬ï0io6™�÷™Ì;W]Qã²�÷Gèj5Õ5#ëóÒ™*£S>M1Áð˜GKR ðktIÃPþ o}8Š!TÇ»f÷~iÄãÒ5ǸÓÈZá÷q|êß|*œüt2»sßΖ{y�j¥ê\8}Á}úKOû'¿t2 €O˜y%sym¦×ÆÚXuu³®\™cëV%(=|8Å“OÖꃺֵɠ|m²: Õÿ¤=~¤Z•æ+ç\ó£¿Þ¼nÿ¶ðz®BG¯…aƒ9ÈWOÇ’R¥Ûv4ëÐCQK`öðIÅQmðª#)U ½Y,›˜¾Ú‘n2˜˜U�”k㊟N:yY°¡ËRt2M‹)”%“³>ë;,L“Uq´·n°¹rÝÃÔïlAçƒQÄË„ð™œ]žŽ•+t´X$j™z;JÚô¡ýöm Õ‹ÖëSJ@Ú¿K7Ú_)Ò~(A§mÁÅ"‹™9Ï¿ó9KÄ3ó>ÍIƒ°m"„âm;¦¦RøUGýÅŠêÆ4ÅT(Ø=#hŒpåºËÐu›öI'”p6V¼pËPbù©¬_×}Ê*�½©æ†uȽ»Mѱ”y�…¼Vkšæ{/ŽƒP�­§Ÿ-óЃ6®³yñå û·‡Ù‚³C]­VÝrÕÐT¾ZðÚT6`û&‹XäæJs]»É…«®rU81CÇžÓ´|7ÆÉO1*îÙ—Ëñw“,ä%=]iHÝG¢½‹X2…‹óSgµ >¡ñ±¨RJ/íœ$ _©���ûf>\q@–¡R„ùyþ}t¯T$?—ãñ­\ÒàC ì8s’ßMT"{ìy¥{ÔNcÑ� Ùd®>I{  ø}¸÷¬‹µ±êaýÂшHŠbOoO …V só¹¹³'ÏúßøûoŸø•O˜/|á…Èä…ÉsÀïï˼’ùÜàøàÜÚ¯�µqW]ÑðcðÌ3s¼ç=‡I¥’8N„bq–K—&–•ÚmýÚsm›öG¥dì+Ï–/Þ·+¼95⦿,iï ©Š^ˆ¬ºrU�¡·ÌqÕ 0¨ 8å ¤VŒ‹% aEhKTµ{ÌÝŽpH04ꑌ4'UQ +±e$¤`Jeõ¾Óó>MQƒ�›ïŒaÚœ48?¬’Å£*FZ†‘s‹¹õIöáÂ5—®6%¨®­ê—*Šâ1—�†þ’qǃ‘I�DÜÀ2þ¬Kzk„ˆeT| !¨::àîÆì|Àw�élµ±ô=Ðö¶Ž«…·:¸,Ým±osƒEø÷b´¤L.]W«–Íš‹^ûžâIƒÖV“ªþ¾ *ØLJÉÁá{zßxÔàú¤ ¼ Y‚ äczR7`ÎÁˆ„ç.8<ùš“&í-&Ï«01МTÉѦ© 5m05çãúR…¨-3LC�ˆ\õêA”þÂ<Ñø,‰­?I�;�D£ã>s9Ÿ ëìrkTª’± �Ö´I"n�Ì/|ú yQƒ-ëm._w1ŒšÓ�¼¾‡Zݯ—áD3¯ùé~Ä ÒWA�ׯ=„€Ö´ysßqs &n,¯Ozض²ÂM' ÊU˜]¿`²ÃôöØlïše[ó5¶$.°5vš·å¿sà$ÿ¡çy~¡ú­ßz�®¡IvÎN°5;C[6ËÈ|ÊeÕñtSWˆE€�A:m­Ð³ŽgÚ·òÝÎí¼Ü»�ìŽ�ªÚÍåyÇ•üùÞ¿¦\ÎÑœ05}I�/j×·YŸ�eÐÓn©ï¿ÙâÚ¸KÕÕ�Åî– ˆtuX>'p|_* S (x®Mx´¥—/wcƒMº3êùjc.pì¼C*~ûÖìŽ^¥GjN˜:�E2� ¸8âÒ3V¼�ض¢‰º+¦ä9já!WPÁ…³ íÍŠ‚Vs£Ëk«Ýîv«î¦Wq$^ lÒccÙë‚eÁ¦5¯ž§‚¦²Êrx¥Â~c—EKÒÄŠ¢6=¯ô 5 �¨ým|ÚÇqµuvLðÎ7‘éJ#W®hǬùB  xi­þø¾�ЗþàK¾úG_åÈ»�äwÞmv®ëô£ñ¨n@ƒçyn~!ÏôÄ´¼~ù:'¿sRÌœ›©Yh�><™y%óêÚt®�µñ=AÃ’dx\¸ð$¿F[[@gçë�ãÜœ0às£ˆÝCAŒ�û>“ý«_ý™–>°=´€a‡ŽÞ�ZÕÊ:$WX]'d:ëSÑ€tR±Õja-�7_ xäÑ]›mÆO©`º{ ù‹F B¡EºDÈ4wYtö¦i=1ËȨÇw^®°±Ë¸˥¬½}!.�¸H©÷�.èx /”Õ}F26í×-ƒ»Û,¢ nNU' ¯ðû¶…–�¿î6“ÉYõ:u'§ãy:ö6Ñe7ÁÅB(Aòj»GR�|<ÉИ²²¬¤k¦ê1µü�tBÐ8F´;…qtJevXÈß{' [SZLQg߄Âæ=o{�mÞwI' š³* ù{5ÖwšLÌú‘+w3)¯“>ÒƒñÒ—óÃ’ílB!ÁÙ+3ó>Ýí*°Ñ4tÁ¦EñÙœÝؾr>²a¨NÈ™ËHõXyv‚Nï»´Ý÷£'þB7,-†Ç\¾ý\‰×?»±û!àÅekméÐÆÒ"pïéTõˆòò™*WÇUÁ•Œ)š]mÛG�z[‹”N]'uø><²¢Â:/»Tª’ý5À'–ë†4üCŸ‰*ŽäÒ5—}ÛBÊØÀä�€W/T)”Bu-…‹rñ¸�½­Œ�D§>Ã{ÏQ®\¡PôÈæ\®^–übj+V¬� qÊ2ÊÏ�o]Ä'âsNj¿oÚ¥¯{éiþêñ¿ço¿2Ͼ¾– á��ëjá·#™œQÝ#SwÚ öo“/Ì.”*¾~ZW`[@ê æžû‰Ÿú ¥Šê4 ¡C ˆ„Œ»‚¶¥@iQç”Ê’xD¬Šö²˜¶m�“S g¡�ˆ­|Ìx¾Z´io1�ZÔáÕLI² §.9lۨܿ l!tv‹É™!—=}!| ´,=_¥²`Ë5_Öµ™„-AÄ,”Õð\Þ_|$₈^œ¨ºJ³—/¨¤ö¥çÍÝ[B$âÍ=&—²˜WÀñ© Þ«ÚêÙóäêEè™ÁÌ ÀkuÇ÷ Ü7pÈ+{O<ÿWÏÿÏÿÕóË¥Öμ>pxxx*óJfxm×ÆÚøž�[Ѱ$O=u� ‰€;ÖaYžW¢ �³Ô±Z`I]�”Õüþì_|ô×ZúÀöÐF$R›Cš×îÔi ·!Ų$�0H5œriO›$›ÔE6$eGÒ–2©d}r!A÷ž0â\!WÿnAˆ!´í—^¨¬VƒK#îð:ÛêMÄ|^{$Â|^]`%w×Rß¶Ñæøù*®/ÙÙ«èXRBǃQ*Ï•™rho6•�¥ÐÓÉÞµtñ²$» Ü®šËë+¤„Žu‰¼>Ù`9|²@çþ$Ý}qÄ¥`® „¡´=ñ¨àÐί^t˜Ë¤›”ŽÐ]«ª#Ùº!ÂÌù mF@ëýðòt}¾´uñ½"hä¢^ê.K�?Šˆ¾*V“qEé˜Ë÷¤Z îF&´?ÂwËd‚zGÐ2• t©"éíV™ rdœNé“>¼qì,b¼®ŽzÄ"}½ HKXX7üC€0 •0±5¸†ZY—ÚZYê T_¢L¤êΔKú"”•«¾oâ?0ÁðÀ¹N<<ʺ&CÑ)ßEŠEAü‹gãÞ«ñq%ˆÿàXz7èÏã£{_ É+ú¡ÎˆDÙù N]ŠG�z1Ýx,6Å”ÆàÂU—é9µÊŸjR]Ô78�77Du^Ù/d@½R©*1{"®ô�¯»k‹­\éÌš_’×–è·¦ ‘°¢Ö\Ъ®¢MÝîù¦¡´é&“Í=6SYŸ“ç&³>Ós>×&=|/ PRnt¡úb� l€i*{õ ÇBçt¶¼xZ—¥Ç„i ÝW¹!U rE:oDIš&¸unÊYª�‘ºžˆ«nR¡,ýWƒîb9 _’ŒÏø4'Ì» "\ßç‘y%s ø9 Fz€M@£8½Ì"¸˜̸k3¶6ÖÆ÷ Œ,ŠcÇJ¥/’J½�-[’É÷’Íþuiì‚Ôª¯@ôm°ÿøÉìŸÿü�6¿ÿàŽp7W:7Û€D V÷ ·!ùRPêîÚl3;ïóÒi‡¦¨�i Šå€C;… ” =I×®0œ®uBî<_%¦–Dì{àš’¹óm¯w>ç/&çz’²ö�w±¸.¥Zõ<É•QO­¤ãR-\¸âÐÙj rÅ€¦¨Q§.8®r*ZÐYo{4¶ªUÎT“ÁõIoqÍùdŽ®�qº·ÆáJ LÏû+R¤ *�"UÅ¡ÊlQ¼÷Ë×ÕŠ·eªŒ�pHé0i"Ï:´Uæh½¿ ñâD�„3w/�¥r@ÕmtkRâßéóYuQ©J\Ñ­©¬·/ºw"%ôtXŒÔçÔ‚+.O?w+ʲY‡¥u·+Ú•­Ã"=-2ÎTHã}»BwÆ,S9«½zÉARL¢+túÇh>ôv䱯!p‹‘ë>År‰×=¤:!åªäêu�­,,K`!ùó/æ±,A{³I4¼’Wr`{˜ñŸ±i�ç"aµŠüÖGb\÷´û›…¸>I{à’<¸áŸÊaqaØá;/—ù‰·'ˆFÄm»!AMQU¬†lA U—èÜUUÊ•j€ã(Š¡ëILÕ@Ĺì�¬9s©ïÞñTA]ªH~àþ0Ýíf=ôQY:/þ~dW•# Ö·EJÁO·Ùl¿üo™îî†Hˆ=ˆßȽR×}Ø–êÆÔ³ %evPKÒ^n¿Ù¶Q¥‰ïß"5hIL�y˜J“åhKdGÿ^©ªàÌæ$ŒÏxX¦M4¬Î~ yål•ÇEê¹*ܧR•·Õ;EC‚&­Í¨:ê8ªT%×&<¶®·WÜ/ÃaASÔ¨?×u%É„Á? –ÙÜc³³7ÄôœÏTÖ'�0‰EQÉéZˆ²í­6¹¼UE5 ‡±¨AWëÍÙ'¦mͪ;íùj[ËÕ Þ¾õñ"ê4^Ïêçø[‰óËÕ€…‚ÀóÅ Z­šˆ~lÚ#�PŸ{ €üó#£ÀèÚL¬�µñÿ3 210>^¤£ÚÚàg~&ÁG>"¹Q/ÒZФXX!G¤÷+�ý“�üjËûäŽðV 0ìÒÑk#,A-q|!# ß9¡…ºµò$d :š-æò>�î ×ݨ.�¸l©]¨ è¬uB€É,w B&g•¨9¯ñß•Tƒº¸³R ¨8ÃTŠ»Õ�jv’ÊYªê˜Ì_q7?¦VÏ›¥ŠZU‚eêTŽÇû#w´¢ŸN‹á‹8W¤sw‚u;ˆóyÐt¬å@ˆ@ ¾{:Ì:r=u±®éqÞòH´¾=RÂéËRªdxyÅ¡=˜¦õP;Æñ©ú‹Îçï®"¥²Ç�Ï$› B¶T®5ºC„TBiõ}©nCÅ‘uÎïŨ%Ã_ŸTT´qí6›L)Ñ}Dk5Øæì�{C!SÓ ìÔüû;–©2fÎ4Ìq04IWð ­ýcœz®ªäçkã.Ï«ðP¿Ju‡åÆ2áÏÿ!Z“&±°¨kz<_Í[® Bûw…yÃ7®¼GB‚ã\öK�ÒDŽei7$ÉÃ}ˆ×£ ,‚?yr�ÿó]‰-a—!øÿ˜gÇ&ÛÄ#§ª Ûª£Þ4`>/I'%Ñp€euG)SaA| <*UÕ‘ˆ†}ë-ž;QåõG"tµ™75`njÌhA|º©Œ95¥P£mú �C4öÕw¬,‹Õ y®ÜÒ ö†ïOLèúCuj^ÅAe�”Õ±~pGHèÙŸª«ì�íTçÂ3C.ÇÎ;”«’t“`>/IÅWá<'­uK•@ej”%[zìÛ—†@g4 *޲Á-•%}%Ô2aC§ÊAš]ð)U)M=³-Áá7&˜îik�˜^W�rët3ÓPÖÐ5#³Æm�†�ú9·fÛ›/Ë7ÔFï: ¥>–uG¼™ùà–Ö馱¨äJŸ¥t9ÅŠJ¦/U»KæZí°6ÖÆÚXwUÿ6Þª.Ç—¾4Ä{ßû&b1›ùùŽ;C©”çFê•ßð{p‹ ðµç˧ön íjЉ„m ¼¢¤m½­8Ü:K¢¦ó¨ K±¤œ“,«æ|¥V¯Oy¼îÈb‘kè‹çÄŒO$,¾DT%m;#E%è®­&®vt´˜ŒNùDµØ;@þžZÙ/U %‰Œ™Ü·ÕÆ0Ôÿƒ{Y̪ ¹:®œ\RqƒhT7‘° XV«ûeGÖ/ˆ…RÀÎÍ¡;~¯HH0>ãa`›oÞ%Ù&™°pË^]˜Þ¸¢(%\›ôhN˜4Å4 LJŠ+É”XßFëjHm._:]%Ñ!|e‰TIîéÆÌ•A*êDÅ‘w5gG<ŠI¼Nm‹bxmVPªª9«‚v…‡ާ:Xß«‘Œœr°mAkJÑljŸ9RÁw2€|q1¥~*л΢½ùîKÓ¤“&ç†Ü:�Æ+‰•³4í; …I„ŒOøÌåUÇ.› hI©Âý;/WènW€7ª­ª+ËÑ\A‰ã÷o “XF̲é&ƒsÞ/‚ ZÅÌåIê#T,8j^baƒ¯ŽÆ§}ªÎÊ–î›{lRMª£R(ŒÏøTVxN{Ú¤w�EO‡‰a*Úß«®ŒzLÎ�æ«¡ôüðúeîúŸ™ÁÌWþ¹T ýïþà³™ÁÌ/ÝÅó xó2w})3˜ùÜ÷ñs|xðÛ™ÁÌY«×ÆÚøßÖý 8¸\¿;wÂÆ�‚7¾þæojv¼õdtntÆ À¤ Büñ“sû…KÿK›% 4Ëh¸8^Q+ÿs9ŸtòÆÀ¿bY’�رÉ^¶�G Î »ìÜdëS¥cWqÆAà1yIã3óJ qmÒÃõMšb’�µÈ9®TwøM¯‹!âœ*"„¸eç`µã°úvK¶J%‡-›c´Ý£G‹ŒNy\÷0¼öpô®5mi²Ô—hÁ¹<]ÛšX¿3 çr¡4#óyÅý?;ä’N¨Ç4“ž‹eÅß²Þ¢£Å\v{Žì 3x¶º¸³�@›?EËþNÌãõÊ/»pg®T–´¥Uá42éHÇUöÉ5 ‘ë«4êbYòÖk'5™ÔƉÓsʾó{‰ä#¶Ðb`EûY‚æÍ6¡Ö&¢çˆF\^½è0­çì{A3 ؼÞâøù*VßÁhž.y�–ûú1^}F\¯º¬ÐÕf±Pð9;¤ri ¿š…j¾09§:4±È­·3ô®3yùŒCÿîZþG yü<©ƒÛ1Œͪ9aþâ ~êM7»+ ¸xÍÅÒNI¶-�:þ¿ö\™™yŸÝ›C´¦Mü@ruܲäWx IDATÅ4”¸¹ÉC§X ݽÑt™|…w¿cFs<û—ºp´øæ e»/BGËÍÝ!oì„Rð[oÍòér ž±¼8|�·cY`›PÔâärEråºËþmáU›ÓsªãPë:�{QãåseÔ£5eàKê¶½FX`Y’pÈdhÌãðÞˆ:û’pHÖ÷ÿóW]±•ƒÔà ™ž'õ{õ×X ¼lÙ`«ý]ëtª®bËu€„P€eóA‹ ]­)“©ik¶l(w<¥]©jÊY¡`*$¶%¥(Œ@]?ӻ΢êÜ^×ÕÝfbÛê¼�/8®Ò]­ô[›�ø�µ®z|4 é&“bYe@¥ÆQ°~xp9òϬ`øQ  ¥£¸›ñ³·b_þ~}€'ŽBk«�mø¿–cÉókŽZK; �”Èá ɯÿ·¹Ìï} ùçúw‡{‘– ®¸tm³ñUxt¶šõ(¢Å̵€¶…¢²•ÜÓºÅJ°¢]ÑZ H‡ŽaÄ@øLÌÜžŽU£éô®³¹4ââz’¦¨ 1ê<ïB)àуQ¦®VéÞ*X·3Š8_ÖÅ݃�Ù…€õ�jETè ¶aæ¼êLÚÞ–jŠžµÛ›M^„¹å€eÝCºxKÒàÚDC¦Å…]»’¬ß™ tó…€Ý[oM×0 ¸O˜NU $ôv+ú�!'HíïFžž¬sû²¹Õѱ ¥€«ã>=�¦²ðŒ Î {ä“j…?d)÷•b ‡w…(œË{ …΃-ˆª žžã®tBË57Ê�iÑý(œH‹£gò§6›{’ñ@Ú¦o£ÍìB°bÈÛ�Œ°­2n ¼�ÎÐíWIÚƒgÉ�­ €¾ 6![ð�ÊlÝ ºV!Ø‹BÛ™yŸRyuBæxÔ`çf‹ôûKFKÈà,©CGè2®Áõ‘ú¾ýñÏæøW?œ$•0n*†cQU×5 > �9ìì ÓÚ¬ôG»¶„8z²Âø´G©¢ìck©òµ$ïREÒ·¡‰©S§{ß¿¡ãÑ÷ Ž~V ô±øÖKeÞð@ôfk[¡@È +3nŠ%h‡ùX ѼÛ¾Šm „¡R¼]OÑ÷l ¯za �0Ø·-ĺ“™¹€óÃÓsj¿˜Ë+Ñy8¤DÚUGê µ`BgR˜ ž®òxÏG‡¸žrŒ�òoZ #Q@/®%‘£õe²^ð¯@BºSÓÅU´=í­ö)¡)®�®ªž³#\±0ŸW´Îõ*›cbÆ£§CcZ–`>ð܉*³ój?mK›·YÉ&u>°M pÉÈ„GúéðBPÏT ´Ö¯XVç»æ¤Zd‰FLŠ�±iu¬'úŸˆÿEÙúmào€Ð?_¬þs©ú×õ_À¿œ¹Ã®ƒüJ(úûÀ_4ÌÃ? ŽV¾/Ÿ¡»ÿðAÀCð‹ƒcƒkÂóµ±6¾ÿC,ùÝ@Jƒ;blÜø&’I�2à«_ýö’.Ért«`  Yú»uδ7[Û“Mf¶^Aræ²C\‡þÅ¢¥Š$R窣¼äG§|9Yñ¢(„âµ_�ðˆG Z÷„!`ˆ•éXBÀð¸G{Ú"Vüß°¥Dàç†]²¹€™9倒ˆ+§ ¯¨ ÞTO/¯èK•%ô¥ÕŽŽu±MÕ]ˆ”¿~Ø%V�̚Ţ¢UI¹,ÉæƒÛ ·ѰPQC­úy9CJN�¯Ò’R¾øù¢ÒVÄ"‹)ðå*Zïóð�ðª‚ýºÛ,¾øO9Ú[l"!Aà‚Y©�Ú·«P  ¿\¹}õ61ë«pCíÊdJ¸úÔÑ2Ž#™ÏKfsJà±UBºe ü™*ñMš:›ñ³% ¼;¤èÝê ›ñI5™Ä5•ÉÖÛÊôDE{aÆ­ „+UÕÁñƒÅàî{†!hN?ï�©\Ïu å‹T»¶qî¥ë´¤L’Mª“U(Kšf½cÈZWKÑ~²¹€G¬^cT£c½rÎQ`ÕH'@,L’8tˆx¥ŒS)ê@:ƒ§Ëìݶ¸ï¾øÍ"Ým:Y»ÉÀñ$§.:T]u|$tÒ½a@O»E2aò�—+T´È<_T…ûTV7´5›†À�Ždü±�½“—0„r~:}YCÞtÕðôŸÅ¢ÏÇfáµwð®âEzcçIÄ ì� —W #>ÅŠ\õÂÀÎÍ6‰¸ASLû†€‰ŸÓW´#^³I6§ŠñF·b„:7(0"hk1ÙÒcÕOç*a]i´®é󡹌gxO‡EG³AkʬSKgæN\phI®\Z¯ë0él1iM©üŽBQ25ðÒéê-�P*«nD-Ò­›(ã‘Ù…€‹WUg.d+ÊY$"X(LÌÜ&QT3µ0¤öå[Íyw«I[³¢óKÊòz¾Ô –ë(îèµIÆ ©2CƦ}JUyê[ªÉ •0VGÁ’Èp„ÿåã/¼º¤0 °øð`{f0ó¯õ}÷?¥ï¿üaf03ÙðÜ×ëç´§€ÿšÌoöéÆV †f��g3Çú¢ÀûQVÁ!àTf0óÛKžß ì¾.…¼¨ÿ÷~Ã4>øÁÛ€=À™Ì`æ–Ù„C(÷©ø¿3ƒ™ü’×£î¬|x'p_f0óóú¾ýÀOëû¯É fFžûðc@pFÏÓBÃý‡�×Ï_§ÿýræåLIß~xTþçôܸúþ‡ôgû6ð0ð=z� ü¿™ÁÌZWem¬�;ï„(@ñ±�eyÓ›žÇ²¢§Çäíoÿ!¾üåÏ/é€,¦×~jgv�%ÝÿË×ñ<÷'¿ý é÷ÙéUV»É&U´É@2µZUª¨‚"«¢«´&MÎ9ЫSÁOWißFœUÂô‰[$�Ë’t“IX»ËxÚEÇuÕŠûÎÞ0�ÚÙflÚ#$›ÖY0R¥cK„ž½qÄéb]È}§«ÛáPM¢Ü“,Í=v\Y_!¬º’jURªJZ’*�ü^µ'�-&×µ0½P2˜:W¥=m‹ªUÀM]‚áqO©uŠÆôœOªiõ©â†ïú�#“ª¸Ú,U'DÈR»ºÁWîhfüeW‘kÔ0ÓT©Ê5ªGÍëÈž¯¹¤êý,CÐÝnrnØU;§ùÂíGZè<Ø�8>ŠÀ€¹ÕSôn…@¦²>�-&•ª�V·Bø9�È9ujS-̬â(Áñ½t±–ËìÙjsâ¼£œe±˜ËçyæÚšmbmk(1p$LÝÚ¹~¼å”KУ‡"wl/ +Ǻ_­rdoX»ÛVáØ·h>ôCt[WÃÇë¾?û\ŽŸøÁi-¶4íÐ2•;Ó±³U¾3XaS·J�¯Y©ÖÀ’ãHîÛ¦\Qy9¦„(à'e=ki™ÏÐÍ/Òúð�ÂóŸÕ_›Å7^,óšC:[—YE×Ý�žÖY~}aŽÿìû`Ûœ.·ñšfA,,p*R¯þC®èë3žXÍ.C4¬€šÈ:ýÉñ$»¬:ðÛº^i^&f}Rqƒ¦¸Ò…lep ƒ€ú™ƒøssÌ\žÆó–©25lKu§n"-- ·¬ÅðÓ…B@ß†Û ÐkÛ`ë<ÇSÖê{ûVvtóI4bÐ’dsÅrM°P� �¹D¢Ì-K3%Õ$ɸ�çKå¦eªŽi®¸ü±[»‘�PÇ�¯\Ên÷ÙlKhÂEG1Óà&.[È^½ Ö#úö•¥àC��èÂþ5lü•.zø]n¤<<8ðÀ€ÀãcÀ ÷½Ø® éÅÌá'L)åG€_ZfïüÛ�þ�ð4p¸áÿåe¶óuÀ'€¡O¼ü‰OôôŸF?xJSQ+øÏ fž^òüGõí©¥àC�ßú�×ïþN¿Ö/ë9j„¶oöéû?üë%¯µx·¾ÿÃÀ¯-óÙŸÑ÷÷_Ó£6~E™«ÍåÔ ãyࡆÇí×€ÄnY»×êɵ±6V:–BNž\ ³S…t9á©§ §æve.!Ë™›Ö¥~N".Î�¾ìôíí ‹Dê0²-ÁæK;B)úô\ÀîÍöŠ>ï7¬`™*%û̇]›µ;Й*mû£ˆWË `bæÆ‚Ó÷ÕÊãºvSdš“\(I¦ç|>!�0ê®î6“á1m¹ÓmÁå íìß…s‹t¬;!ÍIƒÙ…@YF {ÃH©9æU%Ð\¿!DÒ–ÌÎÌå4�êF[ÚäÔe‡Î“žN‹XTW![�ŒÌæ|Ê©ÆTþˆmÝ>8o9±±KY��¹H,uMÆIíÛÆà€ n¯Ü8F&=\ÚÓ‹šO›ä “Y�×¾¹SÖÝnrvHуÀ„—²t<”¦óàz81VßA w B¤„GD¸pÍ%•¨‰¹i`éîJ-¾–  ºÛ,&f¼»ê˜­d÷õ…8v®ZïÆu¶(ðQ£–˜&ÞæòuWë¬4Õ1¯:|÷í Ýõû'ãw„xùL¹+¤(‘£�óZîÿ%º�bèh½Ãð—Ÿçý?œ �š.c«óÀ¥ —¯=_fC—¥;Ž£,•5Xª8n‘n?— ó4ø´‘§?źÝ?AÛ#oD<ÿ”>+Y<{¢ÂëG¨]V /`! ŽÑ(hnä–‰ä³J3VvJUê`ê¶£�*üÃ!�¯m¢+Ž:¶jà¢6ºÚ,:[a2ë³�(këÜHØ -%�±ŒŠbúÆ®ÎU©ÑB_Ó2U‡Å¶ž§4Ž+™]ð·PE½²-uîTÏ ˜™óÆÊÏŽ†�-Êf·5-¹:îqæ²ËÌ‚¾JJwVªHÂz_0´+VÀ\Χ³ÕÄq•M²ë :ZL^½è°¡ËZ$ ®©yeí¦¶PT¥¦˜Xö8ÞÙ«u-–Àõ*UÉTÖ'¹Ü÷*¹crp `²áÿ÷S¨”t€þð¥�þ�·^~^¯®[¸àñA >¾üº.‚?U¿ÿ†&? ü20ŽÒ`8À×õí º˜? ,ôE¼´Ìçx¼±poôv~øozéZav,™‡Çâ¢Dîm˜‡_èxðQà¤Þv¥ÛØóÄá'l)åû4øø:ð+ü­2 ô|@ÏOø—À+À1”Žå™�Geþ? >¾¡çú_ (b?1Ð?ð+Â3Ò—5ÐQÕß×ßé÷ºx«žÿßÒkuåÚXw5iUúÐßräÈ[hi�––سç‹;æ/邘,ê?V!®~ŒÑÛ%¬dÜ|À÷Õ RÈR+qaKÐr_šÒDŸ¾Â|> 5КRa]µ$ïÕ€!yõ’ÃÞ>�“p¢L뮈JjF§Tk½%e0™õiM/Úþ*š‘â"W¥Y:z×YŒM«Î�\g!¯Uiߦç@qRçjÌùwäð´�T«_\—:¯=�‹\äõ_›&¥€ÀEÈ.Üò%Iï:•0\KEކ Ò[lî0¹:ä2x¦ÊB!àÚ„Ç[ŽÞÓJ} %—GÜ:ì ^!µgÂºŠ¸®’�gæüE.ŸT`£9iÑiâ¾Î=(”&³>·‡—¥¥™tµª"BÊ2öùy:Ž:ïÛ„ñʰگæT·ëNG©¢xåA lœMCàûާļBÔ,”U÷¨cÏöô]fòÕBXwVo›“ׯ=ú6ÚDBúX³U‡!¤›Túê%We’F&=ïÝóûGÂJ“òô+;AJíÎ=øaìíïË% /XR±Z‘ü?¿Zàê„Çc‡¢„lÁ««<õB…Í=É&µ][�®i¸p9²'¼" _ÐÎTRªõIqæStû?FëoÇ8ú„¶ÛýÖKæó>ïgb=�A0y¶T!‡–lË@è…�šþcdÂ#Ý·ºùëÛ`a™ èÊʽ«\Q�‹åºbB¨}8LÎ 9t·ÙÞfc·Enð(ž£¶Ã÷%^ ,j]WQýæsŽ'ÙÝàšçë�½õ¶ÀÕ\•ª\Õ9Ö4u‡­ò8|�±#—¬Ô/WàoYoÕ5>ù¢ré²,µè³¾Ã¢\‘œ¾âÐÞ É¸¢Z)Ð,ˆ5Ü÷†8sçd) ¤¯!±° •¸y£ � ´4E=_¥T–7 ,ðáúœ(ëÝæ¤�pùhqϸÍxâÈFÊù0£Îe3Wu[[Ùwf0ó;™ÁÌ«Àoêÿ¥Qº‰'õßß|âð&ðïôßë�ÏÿUÿýTãûôliè¼'3˜ù2°KÿýRf0S úïð'€•Ì̬@¾£oӷϦñàÓ �=·iœ‡!Ã0ÎKä~”(ཙÁÌoe3ƒÀoèâ!¦�Èçõcž–!é5ÌS—`\›‡�Ã1à?é¿!3˜ù" 4¶é"å»”y£ît8ÀOf3—4˜©�í”ôå>=7ðÓú1Ž~Ìïe3ßjðÿâZ¹6ÖÆ]�yxº„aÀúõ==} çÜøK~–!5»^W€›jNkÊ쪵Ø³È Ò{g=í7Õd�N˜7»W+ð´LuÁ>;ä0• ÈÎûÌ�­Ðº7F,­œÛ›M„P4¢hĨ q+Õ€|AjÛßÈM©ÆµÑÓa1<î2tÝe.0}µJeÞ£gO”¶f“öeýy»á*¤£Õb׿C£.ÃcJä81ã39ë3>£,Q fO/д-E÷ú0­iƒ–´yÏZ‚š‹�0¨‹©í°`Ä�ŽDvtÈ–¤Á{# �Ì|[¯Þ»(ÕÑ�þ�ö%@¦Y¯øƒ¢k5nûÇÿôÅ?•z;�†8µäù}$Hàá†yxðO_úSÙðZ§kú‘�Ã6Š–†î:<ˆJ-ÿïÀ»¨Ò§»/èm;Lÿøe$¯š5Xø;ý¸šשÌ`& ü€þûhƒ¶æ€¾-!†¶íŸ2ƒ™­©ÍÅ_ëÛšÃÙskµäÚX«ò]‰ã|žjUÐܰgÏéÇ6�Æ„tq‹×®ÛõJð;ÜôDªÉð ee‰¨VÕJöô±a&_üª¦ûÈzâøÒ ÛjAˆa(zÑñóU&gU¡:ör‘s—ºÚ,Ú[LÂ!õ¼ÑsfÁgg¯uÛBbK�ÍȤÇШÇ\.`f¸JiÖ£{_ŒÖ”IG‹y[±¸ëIíá¯hÛ{U¾ÈñóUÎ\q97är~ÈQ´´‚¢^Íœ˜£iSë»C´¥”�Ô¸‡ÖÑŽC�¯Q@µÐS¬n(Ÿ™Ž+ñƒÅŸRõÞyCá�À¶áòˆ!“³ó'GˆnÞÂå«ëÚMºÛT"|:ih݇Ð+áªóPsÌypdUESO»Éñ UÆg<æ ’ÉðÌ:îë£5¥D¹Ëe^ÜjÌάkWE´eÁŽM6s¹€‹#Ãc#×'=F&I'L¦³3¯`âÌ7ð®ÏÑòÀ}´6[4'MÖwš´·X|òóyÕ X:™¹Ú‰/\×óñ¨:JµÚ� ¥k³•îÍÕz–\1 -}ûÏT*”*’r% TÑ¿—%¥²¤TQºŠ|Q ʳ >шÊ+éi·ð|ÉåëÊV»«Íd]‡É†N“±Ê'fý)�RÂÖ ¶ÒëØ¢®[É—‚[j1»8µÎj¥*ëݬÓWœ›Àæn›mm&³ùb@w«ÉÁ­¶™›êÎ|ü†ó”§»9'/:7\LSu?\­ç+–%Éø­�±D\‰húU-“¥*oÙbu¬Zñz¢QÝ0jö×·E_\%°Ybäã/}†¡‚Ö¶Êqð}ع9Ää¬Ï¥—}ÛB<{¼Rç–_q뇅ñò ´Ü·ŸÎƒ×à•…:m¯\½wภP*{UÙ@•̾r!«š²£Eü®§�©ï!ŠEo| Êô|ÀÕq°�xt…í­ŸùÜüЦ{s{Ú”‘°—é¤ê~Æ" С !j©ìc3>»·Ø«²^Ú q=ŸóWkVÅ\8C‡±�ôýýˆ—^Ñm\õ=þÍW üø[š0ŒÚ ,€ÙYõ‡B-p�EmÖ�[Z¦êD"‚’±W•© ÝþsM̘¦Ò?¨‘¢Ny¾êä “³>¥²d‡6ã •×aÛ&шÁ §ªüðâúû‡p(À6’³W\¶oºµ=Q ¶-êæù¢¤5µ²sV[³ê`ªpU�º^ 8¼;²ì{…,ÁCû#ìÛ"är…‚‹ dÝ„ \Õ¦YŸõ&£S¶%ضÑâ°ù+°s‹Mv^Ù[–¸åç2µ“¢Ð‹BU'X‘’ÙÝfÞyféOyÂ��|déý™ÁÌÄ@ÿÀ°xErh @×3ƒ™œŠ@³Dž3ªÆè@ÿÀ73ƒ™»ämjÔ è8�rËšÖ”³ý]Àw�ù†ŽN¥•X ÔÀÆ#úTq-3˜¹¶Š"üÑ%Ï_œ‡Gž²"[fŠýgP¢îïÊ@^Öó0š̼¸ ·; œõ¥?¢çáhf0óËÀˆ~©’³(Wm/=¦o¿ üðð@ÿÀ9 ¾Z€(=Ní³6~®¶UÏá]ä¬u@ÖÆÚ¸7¢@ÈW¿:Å�üÈmmèèóøãë4YNŒ^ë‚È[��÷Z¡¶´i‡lØÕkóùo‰„�4‰†$¦.ÀWÑÊÉ›_gvÒczÞWZ‡àÎAˆeŠºy÷–�¶qT+ðIK�]0Ȫ®ãÓ>¯;Yõj°”JræŠrÚ²Þ†¡ ­NˆîQäÉ2B–—Ž£¸êö úåþµPxヱ>c[º&¨V¡‹Á©Ú6Ó#@Œ(§¯™yÿŽ)RÝí—®¹¤š´…ªÞC'5;^-Ô/Àu%ý»C·Uw:"a%0¾4ââùJç’ˆ5Цsy“b)¨'°J’©9Ÿ�›­Uƒ�ÆÎË–û†Ü NÎѹǥãà‚“—(Ê­Vu‡G=ü@ÒÖl*�tƒ&%¯³ 9!¼óuñ:eä…S�½b#¥�ÿÊiZ拾ÿ*â˜Z�ž (ßc‡©oƒÍàY‡b9 )&Û`‰¬Ûû:<®ªóªÎÊ4¶»�„V­µº:á!¥ÉõI_nhuNÓ‘IDAT·{Ó CÆ£B[OÃkû#œrh:*•=_ ˜žóØ×wçà£ñØ™™WÀPyÖç.Ñ)‹¤x ⥀‹±)��ÿ]ŽŸ}WË+>»&®qÖí‡P'ÞŒãú¸®¢AEÃÆí–©VÚ‹¥@uwª’é¬ÏÆncUÞ�Ýé„ÁÐu�ÀÑ"ëz8¨ÇĬÒÏU¥+1 bh(zjØV`wC§êŠ˜¦8žIg«*¼—›gÓTT¥HHh§@¨VÕ¹-y›Î¡i¨Ï\[Dp=å0åyÔivK‡(3�@J–Ðg‹×ˆ\AÙmïÚB’°­(zŲd×f¥û™Ï)ç@?P瘭ëí[Ω]½ú<<1«‚Ïõµ še Vó­?r+"y¥-ðQîJ�ãÝÄPtŸn½ˆÌ`fNߥgاo—Óm|T¿¶§;ošô}×40h¢ìy¿¼>3˜™º ©w;ž8ü„Å¢Öåé; ²"·�z^—‚—AiNÂ(jÔ:”ý-™ÁL x0¨AÃ~ ¦uOãk(—®Š.V~8«_÷¬~�ÿ�ÒÓ\ú4øú=à±Ì`fAwQ6¢èiGo´j`ì´þnÖÆÚXw@jÝ Ã�|êSL¥b’JAKËㆱL÷ÃXDnX,®=þí�5õEÃb}8$8~Á¡9iréšËø´ÇÔœrQ™�÷™™÷™™ ؽÅ&ÖjÒ³-D{ZÓŒŒ›‹ÿÕ C(êC¸–Vm©¢§}g¿³�Ý›m¶öXlßdshghÕö²�c÷–£S—GTnÈì¨CqÒ£ûpœÖfEǪ¥J ”î#@ÙqÖÆ«N@¾01ãspGè¦âZho68}Åaj6 ›ó™9ž%Ò£gc˜Ö”A{ÚÔ�d«BÀè”G±"ŸQ@o!¯.î¹¢þ)(@TtáÍïk£­Ù¤»ÕZ1%ûNFÈdTÑ£\Ñ”P5¢Cl ñ¿Ú»’¹®ëüÝ{ßXïÕðjèê¹›' ¤$KŠ[ñ[Š8Bâ!‚$‹Àú YxaÈ2ˆáÉOÈÂ^A'q`G±"Y¢H‘E6Ùl²ÙdO5Ïoº7‹óªš»›-²•U€ QRU½zC�ïœoÈg)¢×W£4äùIí‘ÞO`aZÇ—}ÜÝŽQoKl\êÀoUP~þ<Ê‚ÙÍýF* Õ“ð2vBZ%“&EÂåÈ:Zð üò3Ö¶"\»Œ(2•.°J(¿˜C.Í1‘ç�­Åhv(‘ºÚ”hw:}‰î€’ª‰ÂCÔ�^ŸšÖf'Æéãæ''¡}·"›b…sW¬W"¸6‡m%Ç6Ù(ð²è‰{Àº�jŒãó�>†UÊQöÉ••[‰«ÔÖ•»ܼˆì‹ß@¹ÈṜ‚ï&5ü씨ðïõðöt�&œã]åa«=‰ ¤†·}@ó¢mjd�ËÙ(‡¦ÓW˜-ë~ž™:ƒks¼tÚÄü¤€©7ÖB|zƒ®«z+Fµ£Ý“ø’êŠèDºFßyÊb°­ä>3è�åº�%•OL l3ÙÞDDû2tv ó?|Ý0ÚѬ°}Ni+4ÚDk&Ï f›³ª Úˆµ»Š²Œ’mi1'°]�±ºÁËä“gâÌ„Àñy}Ïm•eÐoÂp+Øé©ÑsTíñ aãža\ã׸»†ÏÒ!˜Ðèxùe?úÑߢ\žÂ… o¿ýO®'?ù$ÿ'î{N_ïÇog¿÷­Wœd]¦Þ¿è#ã’»ÈV�&öŽMÓ±A °0©áÈŒ†\Z ô¤ ô$Ö®RšNø2¯4$ŽÏëÈg8R6yÄμðel~p �ÑªÍø‘­Q>¾`qFéEù GaÁ„;§cåý.>87€cÓo½ÓºA? MÃÝ­nŠáÔ¢¾'¯M*r\:¹ c¢ �OsŸËÃßèâî�~œx°ã¨µôLä–×B¤,޲'`Ûl”á‡$ú~éiå“)Ø :6ÓF­c£ mèîvŒÉ‚@¹ �u©ArS©Óé�np½ö~CTZç¯BI È�ù¶a¤pýv„3Ç Lr.Çä‰, o[?Aµ¦pw;B«+!8C$–W#”<�´ÃF�W‘�o¥£Ó“x᩽±Þ»0À‘' ”<Ïe(¼tQ¯†­óU4:dAý(IíÍŽÄí�EOàÆZˆÅi�>o*q”J\–"™äÊ ¾òƒ/#Ónâî�«¤�©ÄðCuè °ŒplÎ@)ÏGçÙ2‡Cw$ÖVÖ«¶jt]nÖbLÅžw�RÉñ�\Ð1‘§ë­t*‹ÔÜwÑþèß°½½1»×[¦ÎpS¾Ž¿~þ‡Àä$p÷.Þiÿнˆ�—ü]ƒþv½o%ð»/˜(æòžÀÆV„JCâ“åÕ¦<�è䢎¹²ÀtIƒ’MìíÍï|4@É£Óõ* t¼ åaèi#tƒã¾™àj›tÿv{õ¶Ä�Ík›ñIõB>{ÂÀLY Ñ"ªêÕ›!6kñC›ñ¯=!°œhx:=ÚŽoÕc¬oǘ*‰ÄM‹�6¶Q¬�²¾þ¢�0VøDÛ¨’ÑÁ‰ã`øõ—,ÌNhè HÓóñR€VGŽ2„îxq¼rÚâbÜ7Œk\ãס�û¶¸s‡á;ß1�Ï?Î�0Ìãòå±CÕŠq"ú½£ûëòFúÇ S¿x·�|VÀ2)¡×Ôw¬L/-‡¸v+Äü”† L“!nI¤òr9�¨/ÁÀÐ ”z©4bä36¨qâ{ûÕetïÖÐP“Ýz=~äiëD^àêÍ€œˆL $âŽÄÅ«> iŽ\¼¢˜\‰8OìEû Õ¦Ä�;¾üœµïx�1J'_Z áÚÔTÊÆé#¸¶DÔ“àŒ¡çï¼%5þÅœ€m�§¾©—n„ Ú=²<­Ôc€�Eu"èðžs¡¶ÎF†�Síž‚cóQèÜÐ)+UÐ $ïn†,Œ)ŒÌ4x2å¼¤à ¹4ÇGŸúȸI.B'€e†Èœxae×W#X‡i2‰NižISÚ͹EÔ«çŸ4ÚŒÍLhøx‰®Ó``œAV›HÏ—�šÔ×úÐ8ÆŸ/©½Ù–¸µ¡\¤¦zfBÃù¥œR±Ñä¹7Pèt)üíÄ‚'Ü„ûì1¤á ìÖ  F9"ñá>d(„‘ônŠ\®ŒÄy¨pjæÑ?FŠ_€¥èóç2^ZPãÌoÞì¦øèÚ·Lºâf�­Á}êG�ŸK[L×®­†# V—xwòHϤğuÎÃo­âÓ•ð¡ô£aÍ–)A<›¦€Àf[¡Ù¦Fš3v AÊTQÀËxž@«-Ñé+lÖb¬Wbd]qß1æÒ«ä'ÕNNl:gàÕ·¾-£_ F”¨A@÷ü¹+>¦JnO,èȺhÚ=ÚN­Ü †¹WqFf^F Œ0–ŸÞ Úç^eê S2‡¡óx2£a£d÷V‡¶-®{n‚ŽÎjl @Æ5®q�ëpA»„œ:۸ø*LS ßçøÕ¯Îƒh•÷ZíÞ @†àƒÝ@Ø¿›þ^§¯X“p—sògïö)4l³ã­¯9xö„ ËäänÒ¥© ìI¤&5x Q‡¦ÂƒÏ BZ €3u6JKCâú5‘ݾB­#›£éÿ£lA¦Š8'Z‘RÀ•åyW ãˆÄñŠ( œ“óÔÀm‰ÍªÄkÏšK~g@&Åpc-"*gPuîbŽ D .€þ`orãNˆ\ZÀM±$ŸƒjÓ Æ«è‰Q¨™L¼ðM�Aö%täθP•pB¢Ç!Ûu Ûb£vÁIVBÞÝ ÙÀ'ü °ÖêÊCqŽœ!—¡œ7Eô“¨ëC†>º#c‡È¸Œ.ß�Ïîè>¤D"üUXÛŒ0Y æð ×ÈBÂ9ߨÈäxYi™-Â)9�µ6¸  ¸à „1à£+f&¨a3“©pɨ·å(à³Ó§«Ú¤ë#—` Pµ58§Ž>�°½ ]# Atˆ ÄOô;^FÀ±è3êÉç´S\Ka°¹ ¿Gf ±Šèñ¹µ>+Û$�ug‹’Ô5ÁwúÐÄ¿ãjÓ]šIÃ;wÙçnŠ£˜8:qWù7±V,Œ�¿w êîyÜÝ–(ÖŠNxEO à ôú”aSk*¬Ü�tÏëÃü$é?›�Â#×6#˜Ænš †É"mE 9Ž|V`~JëOëàµóènDð'+?z™èÏb´{¤ ºÂ%Að˜™Ð`Yl¤uÚ®ÇP�Ü'uxY�bŽ£ÝUhwI¾Ÿè^)`¶¬¡œÈ8ímÄV7i�d[dãìäøuï�–’1¾ò½oaf*�^uqŒ$ìhut¶š. Ê61è}j-‰nOíºAV :Ùti @Æ5®q�ë‹Ú‚ˆxç�:Þzë÷‘Íê løþY,/wî»mAþG_³2o¾jûÝ쟞˜×ÅFEÂMÑÔSJZ�7:Ä×ýê 6g£xöaƒ×îBv$¬‚†bN ì«Ï Bˆ¯­`êDQˆ Ì{7R*|ë«,(Åà'[�ôe&õËw"LµdrHº7ÅÑíÑñá�çN\ò§Ž< ŽsâÍ/Ý ‘²„Æ7|¤�fádâ¶ç´aúì÷ÔIDݹ4‡‘lüh'ØÏž?i"ërx�\šãòr�ègT7†…Üs¨JÎ9/="ug½�1Ç"!<ãŒÒŽcì¸o%Óûv�\p†4¾Ç-]c(zç®H§_¸Ô@6ŽMÜ÷R^ 7PÐĎ輕LsgJóSúçz_Î黼»Ã0¸`�Õ6ÜEN)Yo'9ûƒ¥€•;¼,mFa�‰]é�Úøé ­®å>›Óéž03ÄÛ+HŸ~ i#‡°}š£,–è¾O[>/Mú=Ifg :ú[«èuè|}ænŸ&לþÏMq„iŸ,3!m`fÎ,üê7=nphnŠÃµ9þ³únMÏš†•í.þÂþ/¡£Ù‘Õí0”‹Å,G&K࡛虖nE²NY Ép(I[ÃFGbi5Üwh¤yê %O@* ßgðƒ¡Ã *Z]…­j S§�ß` °´¢\ à¤@ÔÑ++!>½A›�­ZüÐMäTQ$[/†f¢-»r3Ñ÷ª“‹´q±M†fG¡Ö’¸´Þ÷]·¦ëÕa¨�Ks¼rÚÆ“¯unWÐmFIZ;¬J#ÆÕ›! YÒ)Ó%ÚL)•r«&±U�IŸ¢D Ggtä³b @Æ5®q�ë  ;Œ×^kbzú%¡pî\ KK¿Mþ»]Ágà§Ÿàâ�×Ü¿;2£¿µ8­³vO"ŽR6C‘ÃÉv=†&€¹²~xNÞ£˜¶¶É :fA _ÖvâÏEÇj´ ¨5%O‚°’ H§K?äO?a †+€( �÷Ác‚©Hüê¤x"öd(µ0³¨C n®<ŠQ¯á=ÜÕ›!œ‡.Tmw6 w‚!ªÇèû;�ÍZŒjC¡˜# cD÷é÷) -ŠI0ýÀ7/pývƈ·¯zšŒ‘{6là ° „,¯…H»šàÄñ“dÃ:¤îôú>t�áÙ“&8'êÜa4Èœ“ ìÿ~<€” …œ@Æp,�–AMs³-G@«Ó'.útQ`zB{äkÄÐÈÖ—R¿âíœÙ4œÉ2dµFú“x÷ï•1`éVM°DOÚ�¡}2Q ˆ~ã¥N,è86¯ãÔf„WkJX&W@\? ÷É7á8g5/@×9‡´  «riÊ=òö‡ö0P":N?�è÷šÝǧÚíWi‡#Šn­Gp,!Î~Ðe'pîÚ¤³MŽýd 7�=XRýþÿ0•xWÂςÜ Ò‡m0´:;Û‹ƒšXÇü¤†l†¶SÝ>m²ªuùÐfž †ŒK�u©ˆ^ÆÃíïp#±^£c1ue»)Úä¶{Ï3I¼nÈm÷èÚ1u¾çàgH£Êgx2ø ±Y�÷¥Õ)OÌêÈgù=´-²-ÿ¬è]$>ú¨�çO™È¦9ú·è6‰>7<ÆfWbm“S«Câ|/-Ç;…µ 2ãhv$:½½3@æ&5”¼1׸Æ5®/„ÜOÃ:sf€¹¹o#•Rðý,~ýë_$ÿîÞ´óùË?L¥¿ùªûÓ£³úd¹ ÔP÷Ày2eŒÉ=¥Ö–X]�ðµí]ÁÃh¢€V7†ipÈ®„5¡!_Ôu%»¿¹Þíu®Ü á¥)YÝ–oGC —$+×Z†Fy²!}Ò†#€x ¡ÛuÓrÐ #Œ&¾†Nº�^IÛ¶óY•ž(zäÐR̉GNœÁK‹d‰NÕðáÌeàL0Dµ˜¸ÚÀC»«F\nžLó¾D£#q{#Æ„Çﳟ¼·ŠžÀå8§†Hõ%tÃ{6ÔC in>Ù®Åèô&  ‘l Âäu~>ºÔ¼ùWS°,²MŸÃ„:Ã'ËŽÌeĵé|Y�)ä¦læY$¦®6hšÊÙÞªþ¦NŽŸ,SÆÐ~÷è‘i é4�ëv—L/–n…XJ§�éH;9‡r{†ú�ýšå{¦ºÆFÔ¶0VðGàƒ@ÁÚf„f[&Žƒô¬Ö“„p?$@�u9 ƒôYºF×êÕ›ážÏ Ë$âeø(ûc«&w¥BÝ[ó“d%¡lÉ£4v]Û½½ë(ž~­/eq¡B½IöÁL1äu=çxÝñ„â}eéÚÞ[˜�ãÍi‡c¶¬ãµ€BH9]R&‚ûÍŽ&Þ³g¾ŽÞÈCnUÀ¾Ìa8®íVÙ4Ç/ß`~JC!+�v| ·_NŠC3Røûæ+€—ƒÅxjy‹é[ðºÖÓ)¾'x8¹¨'¢zŽ ªO­I: vÀ‹‡I9\‡ïlP6"´û «Üž0Ÿ×±8­a££Û'{æv—¶(k[ꅉę�tN‚È0tڬ͖uh‚6*C “T´a¶Í?ƒmrÌOiȸl´iYÛŠQoí¿Ù*ä& ´9n'và—WHo¶××5|=™8a à ‡Û�•;›l®u °-†­šÄü¤†|–¶ÁdÿÍÑíßÿù†¨”Í03¡ÁIq¦�û…q�k\ã:´J0îOE?>ÄÊŠ�bQ T¾ÿ}?ù‰ÜÀD–ÉÿÆËpé&�rºئ@£-Ñ(Õй7PÈ$?ÚŒ©=A@¾ëQÄpãNˆ#Ð�•Å“æÏ˜à—|0l7â|Þ»}…l¢sP ݇Tätl^Ãéc;ÍY³#!U0 ìãЧmÌê ü:9 U›±Y!“lÜ Àõ*НM@|Pc¤ itâ=·GCíB1'!05<³e�Z“’εÄΠۗ8>§c»‘p³SCé•&O—Á/mŽÎÿãLɶj!bi&¢{ŽHƒÕ^˜±¾Ô\ •’”]bê í.Ý.‡!’Ö4 \฾î»�Ò‹ “Ï?ƒ‹?ûEO eRRødQƒc¿ßHä'QD‰òÍm¿ù²u àœKsT1®­†À݉Ç|MWKάèyë˜aŒr:]ù¹Àøí�½�J²p8^ÞÂ{}!PÌQ¢ž„ÔÑ6NÁËpLEÿ Öy/ÛžMiqè“—$+hhé: ï‚Á4òÏ}}Sþ¹AˆÉ² JsÐ@Ï·!•q¯‡ª›btÍX í®D‘6+ŒË8سÄH²q¤ÚIP„»7þŸ-!›ìŽŸ?e R�qi9ÄÊ�íéßÚ] �Óg5 PhÐ8 Ò›eŽ~@4V“fËKs„¡|àø¥Ž/hÐuº_¢X’‘„¯öÍbŒœæ,ƒ�tLƒpíý5_ý�Âl™ÁKs\_‹ ’gl«K[�ž¯0Uà#°"8ƒ®)ÔÛ1¦4„RA×è<.NéXZ ‘ÏòûÎA>K¶¿œAüÈ´ Ô-Üx)IEND®B`‚atomes_1.3.1/data/pixmaps/convert.png0000664000175000017500000000116315212624223017266 0ustar lerouxleroux‰PNG  IHDR;Ö•JbKGDÿÿÿ ½§“ pHYs  šœtIMEà  22ÞVpIDAT(Ï�’;hSa€¿ÿ¿yÙ$•b½"]¤iˆvRëoi"‚,º(¸Ù¡‹.¢›ƒ˜¥ââ,B3(—ºx‹…:XuÚZ mšô‘Ç�÷þÞ†êtÏrçœ�óøb*ËDˆ/h}©dç§ rËÒx8tüHG4yn*ët`ØTV&Ñ;å‚2NåT<‰Lee·å5 Ô�[ÿÀBO.žŒ:®f³%ÉæT"¿0•¥ü¼ €CÀý6l*køÀ¾]™þÞƒ²ºÙäëÒ*MW’ËžH„Bá)SYǶu°DÛ°�Æã‘³'w¬ÕZxž ¸T!Ù™$s¸/)„˜2•&üÖñõ„¦ßÌ|¨wD b)éžnVVÊ|œÿ¼¡µ)ÙùM` ˜öái`ÌX_œ}YOôîý¶ô3�;š ¯ÕZTÊ+ž=3·æºn®dçßù€¼RÀe f¬/ξníìë,.”úkõ¦1÷~¾¬=o dç?ýw�ðÌ׈í‘ýƒ7îWµç©’�ÿ±å¿ 1×BRŽ£5¿µ~ á©ò w`t`ôú£žîîðêd�·Åb£ê87� ð�”…Áá3]{L“®J•¸ã„¾—ËéP­©LØ�J¡]ôß‹ª<ίj5›hµBååefu×½hæö„Ú û­ü÷ò×:IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/0000775000175000017500000000000015212624223016526 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/bravais/Tetragonal-P.png0000664000175000017500000000515115212624223021533 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  ,6¹’ úIDATxÚí�}pTÕ‡Ÿ›]B)bùAÀ%m†O‹�‹P(0‚…‚tªP-mEäÛBÇÐ Ð ÕÖ £ Š@Áò!Ý%¢€-b±(Äòe�J I›ìéY–w3N©÷œìyþÙËÝÉ=÷þÎû{ßsî¹{AAAAAAAA„h8.'›8¼Æ~CÎ;™  Œ—yÛFÙ P(‚L7¢=I¼jQ í‹� > ®¡7ǵŸõx–…?_¦eæâuáC">{8dXô¦’a’m¹!Hù [ïò¹ö³Î¤KÄV–Ñ‚Š�c+ÊH3 Eß%nÑ~,d_†N¹!-™p…â-ì,¯“9ÃI¾ä<©f4hm‡å*ý4Š~f]¨—ŽSI%å¼@37ãÄ›ºð‹s줖¥\f�ŒŠ(èq‘·Jw{¹ÀK´0j(–̰W( ’$é?ñ |¼ÃèŠ`Ëù‚´e‚þ¯Q¡yŠEx ™ÐÑ",¢Š§I4æ læ0¹´¶Q�Úy³“¼L{6!B”( Hbª½Ï`®+“6u Œ8µ]d ¥ü’fö RÊ:1ÚÓ °„&Û+, †yšŽ}sRXÁ9¦ÐØ^Aޱž®c™ ´7B`0WŸ ÎÍ]$Oÿ +½‚øÙÃô5Æ´>`;ô¶GwUñ,èé“©7WY×bfÙ,Èv0ŒžFä€bö2œnö R›GfUk9:cD¿ oð>£Èpû°�è[8Ì8:Ù+ˆ"Çý¹­ÊªmÏB<.I•eމÞÃßã³ì­·pk „~‘þÛÜgWÙ‹¡‚lä)N�Ä~eß8ÄÄð,¥tç8ƒ¸ C†ŠU¬²1©›jY.c÷\"ˆI–%?[/sˆµbÚH],+î;€ä©²âɲd‘ƒX–X–"U–‚¤RH+Z‘Oª—gosß﹓¦»5M.7&=좳Èd(AÝ–µ3-àsîP+|̵Í$F±áúƜՃNFûÒ‹™ëç¾1áˆ+'Ý‹ûÃW:d�‰ò¥ ª#žëu„t‰Ü¸2>zh´î wý $Ö¤sÆœ”ï† 7,.ûlŽ:ÕÕ‡2µ8ïþ¿º!�0."�–Ö§¤ÿÿ ™CïÍT¼³Œ˜„b¼; ÚÕÆÿ¿ ýÛãK¯s9^«¬J†°†Ë€%1Rº«ýñ§œþD�sÚ›kcÙ{Šñ4!ƒ SÍf—äôò¦±Mµ®É°w`x”"ú�mÊÀ°ßežfš•AÜ©/@1ǘ©rö8{Õ_7{§NJØÅ`z˜Ó#ƒù8ÎL{�ü˜&¡å•G9[)aœ¯ƒ½‚ìââ.r€£œ¼ ÓìžÇà s’è¯rLMôµ´3©ñ¹´7ò`L�ZLCç7öFˆ¢€L1ò*Wrš_û¾e— éÜG*ÍiÊjJyŒÛͰZåÒ$á1›iÃ~K&Ŧ–�ò•Åý_,™ôG.ª©û’mÉ!‰ìÀÇÏx�"špXÁ9ž ±–÷^âEZTåÚ!“hIMyŸJ ‚Bnc¢–P½„rg¦Ïk‡ cÙFýØú¿e”1-ô°˜vË‚�œ•tL£¿‹¸!È=| À÷褌å´å§fX‹¸ªfG¼À"ŽsHÕ@2óq( ߣ\ÌžÆc†eAö?YG†o¨ –uˆQäð'Ö™¬#€³¼B'FšaY*�`‚Q+P¾)ÒYÏJ:“ÌjVr}’âN”„E‹âq½ Ý]äWþþ¡�unþ\€)¬E1(ôù'ú)îíWþ7ÃmÓ"ˆÞ¥¤ù(f›bY�õ>†w·aê$:°�ô5E ‚3ìòˆ¼a¥]�œ�dôî.ö ²‡½Œ Æ,K æãQÓ±ø��|fcY ØÄrßnmk„ÀVJG3, œ ³˜¤ê'íDQ€—i欤MYÅçLNJ²Ux•cL$ CžùëPKIéØÙ^AjXBC¦@”;íZHýó¿/8w“H;,eÁÐêø#¢d¤· …â ¹6ÊÑ� áǵ·§åáÖTÑÑ݃›ðfý¹-bëuw~¹­.Ç¢Qøs"Ã)´-‡ŒŽßöYV"§",«¯öö´¡"ÜšjºÚ˜Ezs>túf¬²Í¥6©p}E£)?.‘Â�Hc¥·ü—ó.rŒN·ô&ƒÎ C±�£·Ä$Ž0›?p”b¹úÃyÚU¡•`‚F<”2/d[A†ËÑMŠÚç¤Yý<‰xzÁ}7‚¡%yøXûðR¡!5�dQ‹ðê•ïÆI<¿HçûTà¡%=8 ‚èäWø!g˜OÙ”ð’¤UAAAAAAAA„oˆÿÜÐõNüQƒßIEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Trigonal-R.png0000664000175000017500000001266515212624223021224 0ustar lerouxleroux‰PNG  IHDRÈÈ­X®žbKGDÿÿÿ ½§“ pHYs  šœtIMEã  +„šý¶BIDATxÚí�y|U¶Ç¿Õ� `A„ ‚¸ò@�€8I”�2#.à7\€Æ Å�­Ø\p|:£õ=}ÆÇå‰Bw@�‘ "ˆˆ *Œ,²…M!I×ûãÞ†¢Ò I§;ô­>ßϧ?ªz¡OÕ¹÷þî9÷\AAAAAAAAAAAAAAAAAAAAAAAA„ÃF1�¹4ž~ÖO Å,5ÆF›Xô³˜E&°D_@÷cóÔˆÑ1ìZ œç×ÖÀ�\ Ì®àÜ,à+¹Ïã"LŽŒqî] ¯ß~p†O/ä©•œ»Mîó¤pœ”_äÛJÎM¾”û9îÇ_�cbœ[&æ1k(Kƒ|"¤Æ\ ”yìº h/¦1‹£´Öp€=úyŠ˜%!ü±C‡Û[·nÑýixÌd ð;jÊw+°];ŽP ‚ápxw8þ xR7>—úñ·úÙëë§ë±ñfÔìU#à¹ÅkFvvöi@}`)jV«x@Ä,ÎŽŠô¿Š�»€,¹Íã'‰tpg©^½ tÎ1‡.úy©~Þ®‡GCå6�ÇqºX–µíT=̺_Ä<)r›‰šq Ô“[=>,Ëê”8޳\úxè t ™ÁgÀo¨´7ëÖn¸˜¨ÆÝMwm××¥I}ê€Ï�Ϲ‡´ãÜ«…¼¿@w³ø•¸xš8HjÓQ÷E1ÎmžZ×É-_#�îe**Ú~·8Hj“ãè±.ä>-*3䶯‘@wó®îµ¯Ž1K »Y ¼œ\•´ÿŃÍdšû\ {™¡{ï¾ø½>u�eÀɨÀ`i¯9 µØg Е_”l®& ¢÷u€Í4á"v�M)«�ÕØœn¢@oÖ¬Ùà›¼¼¼Î¼,¨íz,е`Mz�¢>*qî³Jœà{à�S€ÿLØ·�gð"÷cÓ�ötš²�Á”2JÛ|ˆÏº›2Ôtz}|°´À�r¦ÖEUxíd ŒIˆ-lzá0 ˜Ê8=Ý9€2`×7`1›O}(ÐÝ<‡Zæ|«îÅÅA ènV¡æíOC­B¬¹ê€ß¨Ã#1Î�,¡úT »Ù <¦�c¨8ˆY=V/âck¤É&Ñøæ¶xÎ6vd îQü*ÐÝ<‰Jï¹ ƒ³üÚƒìVWCÐÿèô‰û[Ké©l±gØÕ•Ä·„1¬1Õ¨ATèŠüüüß«ð–ÚIšcp¼Éo’´ÕëHµ¤õ�^$Îæ•úy£çÌ  *@i,Uè^Ee-܃¡ñ&¿9H'Ô4cQ5ß÷0•O_ʶ£SZWî—MÐ µ¢q“Ɇ­†@w³ xoº\Ä,�«U÷)¢… .g �Ï%ÀSd2H÷N­±i†Í[Ø4ó±@÷ò*î> Œ»ùÍAª+ÐÝ|„�| gµßm³•jÑ‹½lÅá.2èÇ(6ó�þZ`›×›TS »ùxEë—?÷»}æ «€l=æ�Äñþó€�ò!cX„*oÓ‚Uò.TE7™À㨬ê‘Ó‰ç{¿öùEÊï/"�ä>N’$ñ4N>Hðçî®äÜTÝ×4nܸQÇŽÏß²eËšåË—'ªwî£5c¸!ᜯ[Ÿ‰ þÜsPù\ÞVîót1l‚"è^έÀ®¯‰H7G ,Dígèf>Ý(¦–:À<NrP;1G GùA?ÏB­7?ø)]$�t/Q½øªvÖ¥©:¼òƒÉ6ë’è|/¢ò³Ò†8Ö Çc×WQëERÓ{�c€ÖIê=¢²XNš‘„º·Q+FÍ>"’|ý‘  ¢ªÄEE1“„z”F¨²°ÑmºÅA è Ê—&«MW�í•IìõÅAjI wI¢ó¥³@Ï1É®~èA6 êÀšä|é,ÐsL²«É’ ´„¤‚�ž<�¾Ê¼1¨«�ž�Þ÷0¦Wöƒƒ$ÃØ"Г#л¢–,©=�þY?[z t?8ÈZ’SZºt£ä8TÅC‰ ›'Ð7ÿ�.ý`šë†Í¨œ6S$™C èÉèÆé:ÓDºy½H¤väG’³·ô䦸K’dŽš‰@7N wA­ýØ "]úÁ´"¹³Žâ "Ð�èÆMwGºQÝX]gšƒXÚØ? *¹‹@7C çèFMz�$sp´tãzg` °EDºôò�Ú1¦öʦ9ˆtóº‘t“{�d•ÿ�ž\�¾D$ù½3j«µí"Ð�蟋ƒ$—“�£D %У�Úê$5jâ "Ð�è§$¹Q�n´@76‚nj�n”@72ÅÝD  ö ü†ä”É�ž<�Am~*’DNŠ@7J €3�¯+hÔ¢�^?Ô¶lT1ÀÓRÉ>¦ì"Ý<�ÞµåsQ ÒÓ¨ÝmßNÔÎ’<¡¯…8ˆôÔè–e%S {¯Y'`.j#Ô�À>}|5j!ÜBbÅgì²$�eE ×^Š{xø ìr€m@)jzq�8Dz»E #лê~™ëØ…¨Àáß�]n?E푾Ìs\¤ŠcÙ,èF ô ­ëVèÞ"ÊeúùÏë; –1|œŠ­³t艶m ^ŒF­3*/Ë;T¾R?/�žR]ë�ÚŠ 7vè;JKà/úïOÄAâ3¶w,+Ý<�*R¨£ÿ]xøRk�uúØqâ ‡¸vÀTj{w=üé =1¼°°px(ú8˲¬�™™™M’Ш틡ë bc€\à TÜ#:¼ýðp^*݈©ÈmD7;´³|�ÀïY¤/fÃtÑ ápø!`¤çð¿ƒÁàé={öÜ–€¯¨£¯Õr¬&ŒrœvŠ®À*àNàÿôk°¼™*öJÅ@á‘À]1Ž7ÌÉÉùÇôéÓç$âKÊÊʬ>}úä4nÜx[AA��&CªzÀ­1Nµ,--LªðÍ6Yº�:(Âf%iK­€/°Ù¬'=Ž ö Âu@7}~¯ëø_�g�=©f³Tt�zœkÖ¥“eY�ñ%?ÿü3¥¥¥tëÖ­™eY÷’æX–Õ®çÌBX¬ÀáAlî ³YÏû@c2i¯_ÝY?WV·loŒc{RÑ.©è ëtݰ܉uëÞˆD"&âKfÍšu0nÍš5S#‘ÈkiâÙ�@àí ´çw1ß1ž!8<�ÅMŒãií0�Ѭ§ ªjÉ5ŒÚ¿wtXµÄ GŠþ¿F=Çv£"êß%è;×cßn~¹˜U! =oYÖõžÃ›322ºôèÑã烎N¦%¬æcs¡«GéÌ6aÝÃDùh«¸Ó핪³X“�áÀJ¤J/L s@šFÐ4hp£eY3P{•;úð°rÎPÂ@�zÎÔGÍF•R—á®ãuQ±¥Ïýà©ì ð_¨µ Q¤óPëBAÚFÐsrrJrssGæææ6³,«¯>|q/ïì"›°gÜÑRÿõgî£Øu¦“vßL››’Í;]ßÔ#ôyiA×¢ÜÉÍÍ}O‹é«æÎ�{’G˜g¡Š.¬ä&Ooà0€#ËE¾�.g²ƒ¼¥[ûë�Ö ^‘Îâb ƒ#<}lsý×V�h¿Lë¶]Œ,—]í»À«)âè^$¸=�R”îÞ±iÓ¦TÆÂàùóç·Ø¢l¡éQö‰œ€ÃºÁRu®þF&³8":‚C¥Œ¬©}^~nšŠ@O  (³,k&P×qœÛ\C¬íúFÏÁf㹉2ÞnÔ½J Æs!ë™Í6ú£–$´ÕC¶2q�Ú§xi&=qìÞ½ûyàÇq†…B¡£\§† 6K�ŠÃù@lVÿvãð8ðãx J¯|x©�š{ߢ[¬x8]Ùžs � ‡ÃN(º/Î�¡ízµŸìbZu÷=¨¤¶&ÀŸE 'ŽŒŒŒ§€m–eݹhÑ¢zq|„ñEâLq�¦Àu¨lÞ!ÚÎzéó�Ũ„Æ:"ÐC�=vZ–õÐlß¾}ƒât�bÌ=ì¤ZªÉuº‡xU/étT:ȨÈúßôë¢)ÛCPY Õ!íRÜ«ÊG}ttFFÆ�À¯ŽãœšŸŸ_ZîE“hEy8ü‡nÌJÙÊ*fñ"…Ör$¤gM¡ÿËÀsºçp'$^ŽJˆs×Kz•¶}ð<ª¼eòºÍQX¸õ)¶.[cÓ† Fó“É7CïÞ½·„Ãág�ÛPëÄ_ÔTîz®†RÊñ@Xgõ.Å"“oè [ßõÊ©â �ÇP‰nS<çJQÓŠ+]Ç6ÿ úUÍÆ�/‚®n�I¨ZNÿDí¹×‚‡éɺ…”ò6p‰ñC Ëšá8ÎÍ–e=à8ÎKÖx+‡õ¼üˆÅ>Ä.× Ýë×akª8ȵ¨ýp �TeŒ€bôÓô ; xÝó¾Ä ô‚¬ä � ç0F¯h´YÆNêY›ÍÀ-~¸!rss׆B¡—-˺þŠg¯ ÇâÆUºÊ/ǯ’*"=ÚòzW æj'ŽUŽòÝsœ ôNš@_É  ·ïwÅ2nò°ŠÍ/>º/¦‘F�à²C8GÔA¶¢b&â I =j‘Ô:Ïñ躅…•\H¸¿RõºM¬ÃáeÏÙ:Z�ø=9E;äbìÔª%›(òòò–X–5è3oÞ¼.Up�¥â Éã}óþ5}ûp3*�¤±þûMT–—¨š®Syí,u‘Ϧ 6ƒ±«°øÊ![ÿµù ãeLÒÚh#>&‰LÕ½È= Õuâ Õæ>T¶nwàlà*­~Õ"~`%Zdjþв+QQù6 Ï�ØÔ­à=ÅÚQ¸tÉuD×HX:%Ü6fŸ•êj‘�€ÅÀe ,¨¨Aéªе~´�å£ß±y?¥‚Ù”ƒ#èùš>zu\Gà>l^9HhÚô>à"\ ‡VýQkågcñ8Ó�s±Ùá·¤°°°¿ã8¯Oçåå õœÎÖ£2úJ’º8¨•qÄ.:W^  Œq¼‹Í%¸�M!¶«.¬Í\Tt¿;BZ']ŠÍàm �àF?:@¯^½ÞÔv»¡°°°UŒÞ÷Ã+¿D­ŒûM·lnª’ân1ž‘ØüÂx.ð àP@°Ü;Tê‰ï …B7èTøå, ìÚWn?3¸Y_°Éžã7è㇎vO '6ë°,æÔÝCQQf8þ1ï …BM=“+jÊÛ—|ö{žÓcâ¿ÀA­{ÕgZƲÈlOA´´%''gÿjN˲†yìºNÛ\Äö¢’¢Ö®»/du"èßä`šêiOVVÖ3¨ÅÛC¡P*.•íwýðáozUqãNT²c|)îcø‹�À3…ÆÒ‹äìA-Vk†àÃXéâ ;PU›k푸q„€Ùìe´ô!PRR2 (vçŒnU¶ )G3ÔúõÍÀ{ZHÞ×'Ùdc³…©4³Âœ9sfŽ;ÖÉÊÊÚ íz¬XÅ­þÐdpAJRs¤Zä¨ î™•¨Jü¾#çò÷ ¤µ±zdÒH;ÈÖ4w�N8ˆ…`�xÆÉÑÇ1M�x±»NÓ˜E=Tõ÷E|�ø Í ÈæÀÒÚèãØ_Ý]4ˆaœ‰Jÿµ-˜Psêç'+À³û”8ˆ�: ªDž„ŠÝ¼†š…ˆrû BZq�žT¯å\T6€ƒª&iËuÚnõÿ@ï%&Ò•¨ªËc u Q™ÉõÄLBºr-±sĨ¢Ÿˆ‰?1ÁaãBýò? Uêh¡˜H$�‰æ4}ï9]±÷±˜HHg¾ÑC,wºOo`·>ÞZL$¤3sµ#´wõ(£ö=Ù§…{{âß‹QŒæzí «PÛÈ}œ¼ �?‡Úsü41Õá#(&8l,CU€¬‹J…Žª²\‹ô_Qñ‘ÄT‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚�fü?Ê î_k…ΔIEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Triclinic.png0000664000175000017500000001267115212624223021163 0ustar lerouxleroux‰PNG  IHDRÈÈ­X®žbKGDÿÿÿ ½§“ pHYs  šœtIMEã  +1XLðyFIDATxÚí�yxUº‡ßêN²*bDYTPá:F£¢\Pï\·¸‹‚sÙT*€ ˆ2îƒã.‚Æõâ¨#(ébd‘M¯2 ޲¸‘IwÝ?ÎI¨Ò‰Õéêªï}ž<�TwW’¯ëWçüÎùÎw@AAAAAAAAAAAAAAAAAAAAAAAA„dðÿž ü ì•Ka?Z}�ÀV GpÈÊ ØÜ&a©Â TÇÇ>ZKX‚ÁTÛoÿºJB@.‹Ÿƒ #`ÿoøAwœìÞ}Ð h_Ís��ÏE þHyÿo·è¬�ø›%@Ÿ8Çç7‰¸˜çø¿�6ú#ø˜S€Ÿýë_€o9âΑЇ ô¿ øØ )a©$ó’K.ynðàÁVóæÍ7éX]$a ×±oäêfýý Ë>"‘ÈœH$bååå� ìÑÞC¼[@xL‹¢+Ðø5a˜-¡©Èg‘Hd‡eYð´Ž×™A‹C( ŸÝ­Z§g�Qd�§¸¸¸pŒa+ ðPsG1`œ$&ôwºËP¦�=Šš¹ 8$è)--=Y–µBÚÌr€ÿ�ø›®@°Üvlp?Ð t�„B¡†a¬°¾K?Ž�ø›žúq…ãøƒÀNà y�bYV€òòr{Œ–…ÀÝD þö8Z€ŸµHnHÚoŸB;LÂd“èµßó&7a2•|ú¥8F;sss¿t¿5’5Jâo�”è~µ“ûQ“†#�&®ÿf“n”ó¦¾È†ã%ìC§“è<\IFÜ¿/ÝÎ}cùpŒÄ4º Ò·ã¥LìA­…¸ÆõßÞ‚õÀ˜ ÞÚaÒ¶òù¦þîr&¤f FƒîdjÑHˆÿèdÆé^Ù™�šäêoÎL¶èŸÖéÇ–ºué f`òO�t;¯ë�+ @öAÐR�A·³ xh¥/‚d±Se¶þýRŽ`‚ º�p/j¸|„$ÝÉtÔŠº[QCÂîc°G_n»0 ô%Ì¥\W)¯t;Ï›õ`Æ!"µ ¿ŸÕ𺭨ôжÀ¥Iú[öÚ§·s;_¤285t;ez@£)p£Ä4B­ˆ[©» 51U_¼ãQëØ]îË�©¿»ø‘.ÜŸê%`ÐíÌÒÝÑ¿ ÒtD iÎÉúB_žàë7³�ލaM·»Xä1”hÊ/†š º�]ÀÃÀ¡@ž$ÝÉ]¨áà ®ÇÊ¢�þn&fåˆVJIÀ ;y@wYG'Í«‰@&Ïù˜”Ts¾ÿ®¸q{æN õ°,+Qƒîdºý8à5iA‚aÐí|ü5ÙéX~Áä¯dq’îÊ­fR¥ïq²x“Í^ P º�Ï´0zýÒŽ9ú®ôo8Çïõ9–$ôê|ÎÇä»§­'Œc z]覻¯ïJ ’ž-ÈNm$ëÊR`>ªè\ÍýD^†b1—|z98µ˜A?«P¥[û¿0ŸÄ£4G­]Xaóu%_?&V Þä}Bœ‹ÅSL¡�Wô º“©úq´$½ ºñ º�%@ªú© ½ã>Â`åÌeVåì¹·.‚ÚÍ ˆ÷ô Åy¨!_H º“)úq|Âï˜È_�¶&5}>UÝÉ=ú†4!-xQw­Ú»xÎÅúœ½~‡É©˜¬õ©A·ckP‰žíÒýâ J ²øÚÅsÞ­ßF­m˜šV×™|4ÇtU¨^1èU$TŽV&°øx •} ñ-PUÛ—¹`ÐítÕ�‡¢RèoÔ­Êa5\8Ÿcx«Š¼‹ÝÎ`ýØXÇä ‚ÛK˜ë¿Ï¤»iÐ+hq—Åv@­gî³5|M;`€WôòË/_رcGV­Zµ×¥¿ëXâo•p*¡ñIéõ{‡[õ�ûÏÙ‹ø{ÊWÍ_wJ â=ÿ�îb¹Å Jü-´£RRÒ†Ë.»lTFFFã§Ÿ~zR,s£ÚVÍs›äží-¾Ò&Ñmž‹swüYw#Ò†âââf‘H$ZTTävzÈ[qâ³�dã“^gZ¢†—%áÜW¡öì«`90RS Ñc`jInØŽJ‡ÏE­>”.–ǺWË“pî˜6ë£òŽö¤c€~cŠ{M7§ÆÀ+¸¿SZ—²" ç>5d¹<]ŮϠ×WìE .Q—5èµ=÷ Ĩ6kÐk+�e"o· ßAe-\ˆÃ ãî º3öª™ăŽ*&�¬;XT®Ñ§é $tCÇg*ÅGâAz%ñŸœ„JÈK[ÿábŠ»“¨œå~¸�ü*�dú� ƒžÖþC º$Y’ôÄ"-ˆÇ ú7Ú¤‹@RcÐ?�x“Ö¨¢lɺƒ‰A?°AïŽ*ô“Ä»­‡ôÔôN¨]‚—ûåbò£@Ä §Þ ‹@Ä ‹A¯ç›“ÄÅ»Ø×À"�z7è½P¼«D Þä( [ zJ zU~t*Õ]"] º�.¨QËýtAùM bÐSoÐWˆ@¼Ý‚$+‹T zÀ ºÒø?Hp+41ènߜʀÕ"oÒU¤L zýôLT1½5@©D ºôªüNû³eø ? D ºtˆt1è"�ÚS‘EºøQ’ƒ¾GwAE ähT%w1èõoг´ùDÇH"] º�®@?v¯ü$1è©3èÉ,�!q±‰‘œežbÐjÐý"� ƒþ9ªÂº¤þ z *‹WâA:¡öBƒ^ÿ½*‹÷c \"] zUºéù²{å�ˆAO�A÷í ºßZ�ÉYæ)=1�ø¶Éð�À»ëIÎîE¾0è»wï>Æ0ŒÂ$ô_Qu°ìd§¢²«¿E¥Àÿ"-HýsÐT zJ zÔñ+t ^AT>\ýÙ,bß¾òÒ‚ˆA÷žA¯õ6k“9–(Q0¶�É+L¨²'cÅÍ#ä¸9µÞ.ÞÐÇÎJç8Ý[1ènô˜ÜK”%dbð10�261‰Þ Üœn×Ý­7lÇ."�Qù¡‰¢åÄüVƒ¾Ž‰Àp 7õ²�i̧”‰18/N|실Îð“IOç$¬û¶kQ3¹"�8�DgÐ'ÓÌÆ´­©é@ j°•ã½Pª7韎ԟ‡ÄtAm5,Ý ƒe�AÈÑl '*¥Ý>ŒÞµÄ`j‘Zu×T'ÔvxiKºv±²€ Ä WÏ[o½Õ  ¨…Alá› ³Ž»P•g8ZÃqsÚ |¨[¡ƒPE4Î×DZ�zäRà߀©þ3j±”tM$¹±Q£F[,Ëš �ú€‚‚‚pµo˜B[}·_PÙ"˜tdoí�³0ÙXƒA ¼ DÍ{ô6K RôžÑw/û±ÙÀÙâ? ¨¨èb˲v¾&;;{+0±šîU_ >Ä$Kÿ߀éÂó %ZM|œÝÛmÀm~ò é&�«âPŸ«a œ={öê6mÚ¸²äóÎ;ïÓƒª9Þ¼°°°a¿~ývÇy®j$p�î^m®Ådð*&1+G [ên×;€tÈ"àÜ8Ç¿ÏËËk�;R¨…W«Ï8ãŒiè?žþ+ÎSŸÄÇ}ÄÏt>¬²¦Ã–×éã}›A‰óƒIÿ[_`·àÞlmZtÃ0Là{G [‹Ån‰û†Ÿé�ü(γ�ôcVƒ¾\â=v9ÀH @��¨¥oÐrrr¾ÈÈÈè…šÑþT‹fannnQ|Eiÿ_ }P“„«0è‚é­[�ÿuñœësöôC€"‘ȲH$R¾hÑ¢Nq_`ò*&&'W9žÏEúølÇ;¾¶åK÷dÅ�tßxªx™[-HZÏ Û‰ÅbS�p4UÍK*Z�™˜ä2™Îä3 ‹§€hÀͶ׶BíC¿L’>LÕݬ±.ô´Oq·Ó¯_¿×PG®(**j[åI•Õ 5�ôðg¢Lâp5GÐ�qì´½Ã×5°ª» Ò�·Q t.AÍ®o ªA¯Æ´Ç"‘È àÉX,6Ø×’Äô!,ÀäYàÙN(ƒî—`:*»÷‚lЫ£I“&³�͆a\_XXزò «²{µ$ÁSù¾Hƒ_ò2ð�!q\Õ={–Y–5hlÆ�ÿ± 3áV·'ð/à;HzEe›6„*¦2ÐÝNÓ¦M~F6ák¿õû§¬Ç#Ù{Ћ@’Ì3À`p°ôýZ‘à! E(ºŠ]”Ò€lâϺ‹ÿð¡@ö3�fÀõbÐ÷'++ë!à˲F­½hmãØi˱�ÄäðÙÿÓ5«E%ÔÕ&ý$5Ôy=0˯xaaá Ã0Fy§Ÿ~úSUž4 a�ƒÅQÁÛ£ÒL¾b* ÙMT­«íAH:ó ŒAÕÄÚ�š,ì­» »€GPÕ5®Ôß'ß ›…Á9X´Vbòª>Þ5�9Ó3©á3t7t¬eYφ㰃aÀ,¶o¢2 ¾Ô1îÄnž'y{ÐK â‡`žACTÚÃÔ*¶Š×|ìŽAmnŸÅú®Ù¬V$Ÿ±XLÐýû•Àx ^Áâ^Ôž‰dq"ãùÁ+AŒD"�×Äb± sç~NŒ—€ „˜Èq+Ä­ÿ—àâ $ÝZ�)¨¥œ·é‘—TéKû8þvàIÔ¡‹a¿\"÷ z>£±˜ ©l5òÙƒÅ,ýw‰Á /‰ O�F£y_—~=‰-€‘˜ÌIÀ¬@ð,M´§¸Âv¬%ªìe®ãµmô…¾.Á�ˆ®Zp�ÕBªí0)­F“誓ü¶cÖª‹Wß­È‹óÞ�g ybÈè^>]Ç'7h]:�bõÕ]ªlÇiCîLÕþ˜�*fæ¾ÿ(gÐçúïfúñ{ìi#‹ÝÕ,£™uóÑ7Ÿ•ÀË{‘¼=èE .QQ_i›~lŒ*1ó©6çN¦éÖeB’ ú` „CX\õÊ£ƒþî†Z ¡Ö;¹¹¹Ÿ –ÍæF"‘>5øÔî¨L…E Þ¥¢ßU^ÿ>ÔBžMú®}©ãõPëDz£YÕ$�ÄgÐg‘  ldxÏb7�åýÙxÃ0îÖߨ›ÕU(n$�²UÝï 5g±8xU´ÌIÅ0®Fƒ~e˜¼ŒÉ&ÕP®-tìªnjr9jX·Œñìðz@srrÞ7 ã༅ ž =½²ø=ðm—“€SP%ö7ÆyÏ2T!³3mÝ('j½„70x\w“^Çd%&WSÀþ׎e›hm3çÝ�Ë€ô`‚…IÌýjÚzÍ‹LU�‰1º†îg —Øø *¾ �óüþ3èjF¹ã�l F1ÑQæÆd�>÷ßPCºÈà\mÞÇbp+÷bRàÕàX–e­NˆF£Çöïßß¹¾‘ 9˜4Ý%*(-H]y5 8U^³fƒnc"ïaÒ˜€Å˜<Á}UjN]…Ú£7&‹?rÿBÍÁ,Å¢?·zYÚ‡X†aÌ2Ãá°s=MXôõAGPZP…®_œ•kžA¿‡ÆìâQ +a.äv¾ðSp ÂÙÙÙ€#C¡PûÓN;­b@äD=ò U矤ñ¯¡ö­¸µ®¡ªA¯i}4»0¹ ƒGˆa2�ýœ¡C‡FQ£‚�,Ë.=x±PIz™Àˆý z¢ÀDf㈲€Éí§•””< lµ,ëæ 4wt?—‰@üÏó¨TøëP)*ñýGM˜<‹Á�Dù‡^•ç Î>ûì=†aÜ4ÏÌ̼ÖÖ‚”“œ-îD £ µ ª1*Ý»nÙ×’³«ržÅ4hÐàQÔlùÈ1cÆ4µu?KE Áàï¨ùá¨äǺ¯AÏbp1&Çø%8§œrÊϨ54‡‡Ãá1ºûè£AH j®£…¾3öBíVUVë3�g;jTì?¨¸¸xÖ /¼P6wîÜ1¶˜ !•¦b9¾þ^§³©Ôöõ~êe‹±‰Q‘_@Œ€ý¿ƒP«ãq1µ­Ê˜Iˆ+YÂSô¥Œ˜â3„øyk¿¢’D·#øšIqZùJìëAír‰•íø¶–.D+:±… ~ñ騑«xH뚣Êf:S4`q(jñk©:ß*:ë g|Þ—K'8�*òPa@ß„”¥¤„Ú¾ÁÚz$>uK[!ަ0>BŠ[“¦ø;F-K* ¡~µúE’àÿý'�ü=PCÏ^"FÅ–Ð'$!H9}€"àdÔ|L>j>BÏ‘ºŸ=ð(jÉn ^C/�áBԨѽ¶c…¸»k¯ ]¬´¥/*{Öt|&删üÇëì[ïm êm­“ÐA§!j™¯}‡§ž¨¤n!蜪 z[ëñ&‰U£ꉰ„ eü µå0ý³‰*Ä}¥xAP3ÕMQ©/ƒ�.AAAAAAAAAAAAAAAAAAAAAAAAAAøKJL§Fô¯IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Orthorhombic-C.png0000664000175000017500000000766015212624223022064 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  -KÉ ŠAIDATxÚí�yxUš‡ßÊT6e_ì@¥dÐV“(<.ÌØÓÁe4¨Ó¢­Œqa O;hOÛqìyÚ´Ø>™}Œ>J'Ò.Qš@}ÂÖ„V‰ì²/-!„�äÞoþÈÍÍMr³Bî-RçÍ?©ºu«NÕ¯Îï|ß©së€Á`0 ƒÁ`0 ƒÁ`0 ƒÁ`0 ƒÁ`0 ƒÁ`0 ƒÁ`8kÄFè8ñÏ\ÅÊ]sæã¹—+ÙE™e¿“2å$·»¤D¿GQ”½'Ç*§¯”ÒË%š,�²—x7]¬¸ãŽ�SîÆNDý¬/ ùãXíAb"ÞNurÁYk�%¿×,ërü!¡lá Šj‰ )Í®ˆ6.â© $‹É¢ÅG!3è…²ô ƒÓA9ʹڛáõãl#Ž He)~”ãd3+‚�ÊA”bRn½ö?ôÂãøéÕŒg;ß°åÞ`ì•Îö€idðƒ” ‰ (¥Ì£3ØýDŸqPÞð² èäë�@"†ëÉâDÐÂÎk·£&ÅO6ýªWä÷µ²ž †zWx%¥Þ'íma]™Ç)”µL¨]¹²�¨ü‰»Q^öª [�øø*l°=„t¶-ì‡gé¨)ìBùŽÔºB\$*9IJ•“uò� ¹(ÿÔh£{v-l…(ed4Ü“}¡¨ä� <ïeAFãg]“¶Ô…”€…•‘Óf @>”<.÷qP�Îìåç{WøåÖ4Ãé|‹¢ì&ƒa­:V'Ò8޲ŽÛ$¿·¨ó>Ï Ìò² c𳪅yÃõdQ´°–ÝÇS؆r„´¦rðU½Deçówö“à]A` Jr‹¿Ù »œÏP*Ȥ{Ó;]ÑSTþXø5Ê ¯ ²#D�kQ–µòûƒH§EÙCÃC¢³‰  ™T¢,mIöm÷• }8ɶˆô|»T”ëÛ°—± SŠ˜AOÞćRE�pe ÿز-í.ê|\|å./ 2eq÷”@ yT¡TÖéE>FzË;÷×\ *…„lŒ`¯š+)®³\ˆrÍìoéu)¡Ok¾^x¾¨|²"uÍæ¨r;Êg¸Ï’A*Z…U·!ç‰J^ÈŠøÜôä0ò‚Àçø¹ªÍû‹!•òAü(§ÈaJË85>jc»Öa¹ea÷6žÕ(§8�cHg+Šò\ÒÜ–tu>©·OåS/ bñ7|Œjõž’�?9 ¡?sy�9\ŒÂ29ˆÂÒšáRÔUTê_~Aã]Aà.”ìVí¥ éœ@ùœëš‰Â*ƒ6¿XÕETêÇy· ¼çeAbÙBUóöÒ)²e/3Z0Zf é|´°K´! ¢òYÊӪòt8A`:Ê[ôý1 œ&³U=³cÉäHÐÂz×~°¸³¨ó ¶Ÿ†’åA¾ ³6–âÅé5x¦¬N+÷‘Éè��ºq„#í8$Éõ‚À,”êtŠDÙÚ`ÀÐYDcDeY­…QDZ°&>�’æeAºqˆãô ™�('ªÇ¶£ –¨,±° ”ròH!žÞœ`_øÁ^äs?+ùÅGv@œvETì�Åþ¤ñEÀÂÞäŠòW.ïÈ‚lkô³¼�^ÛÕ‘êMuFYãy•c!¥9é¶Ä Ï‘G19dé8“˜‰Ã¾«%CHo°z7ŸqOp©/Ó:êpìÆkÈmuĺío¶÷jÈ|!i_&ŸDæ°¿]rjó/Ÿ óÁ%ü!di­Û�ùÁûñK.ˆT�¤Ò)lä£Áò,긚Äâq¡¼Óº� g(H…¬lä£â(>sÅOT£ HM-ÉÉéFXÆ©h\¦¼Œ í(&‚'ßôékÄ/�z[�æ/Oı¬fÊc‰ìÕÔcYF�¶ b,Ëemˆ©!¦ 1–e,Ëe‚àíâ>ƒ°Ü'˜±,cY&1‚AŒe¹_ËÔSCŒ F�Ž“‡¸-14aoRGcY®Â´!&ì5‚˜Ò�1�‹Æ²Œ &1‚˜b,ëIÔ<þ×ráå1–e,ËrŽ5êqF�Ѓ»¸„£,g�©!Ñ·¬q|A)¿ãîÐz:B 97ó�î|È ¼ÌåKcYÑä~XÀǦQwƒe%²ŒÓ&ÊrC ©–dÛM¦î¦L½$ð:æ‘ü¤#…½}èŠÒ›£nIÄ T�§�‹âÇU6³áÿ2�Á¿vœr/{èEov0Õ–åïq1‡£-ˆÜ ¿ÜŠÃ5GG[MϨ¾¦ýÓÁÈ 25ä�!]g ?cÞ"^áWÜùvë ûjÖ¹§c%‚Ôy�Ké·ì ·Ñ‰Á\Vò7Eä¬G¦«ví®xŒøj^w¯9~YáüÛš†/aš‰ò/jAî þý}qø—m~@i4.V$õ¯™EÀ¥Ç¼ÝçS&èëå%G¦ØqÑhCò{s�UÓdû­é·ŸvÓÝ™(ëw\É,ÁÚýIS|[³ÙM [;팗FR�¢x'-n›>®ßð¼5ŸRJbmw„áÑ ž]”УzaùXÉ”#¢¢N‘“–ß›Ÿ£Lkߨå+Q9æ¤U×Mg®¨ót#ÿ9:–YžB™r�$Eò¤RTNÝ·ítOûzÅ¥’'*•’Uœ=}iwù^öÛ Þ¤‡9B·ú9³“&ŸRôÇ$³àªv¨=ì )•eΕõ2’Eå¡FâpóPf†M~�Î=QcaöY›AcœT9 *ÅæMòù}¥L¾Í‰õ® ½8Áî°¯–œ�&¤-¬\ò$Å>ã,iy¢|!*¥ö¼FŒ ç5QgZXANtÜ(«–cü‘Áa§V(¯JÊMš7Ôz‚-L&ÇÚ%™ËG·Ù¨IvŒÍhÞÖáÉó’ËÙì¿©Ò9a^C£x„�œæë07ÂÏÐÐþÔåc%S·ÕŠºÚó¤LTþ*×6·­¼+j7ìÏyß5öò—‡éõ­—‡Ü´.)­lSÉÕÑú²õ]Ë-L-I)Ýlý'Ǭé‰ÿ�Ôìü¶1hÌl<Ì0ªÂ¼ÀûA”ûÂm^ÐßI“/DEeŸdÚ?j¦ÕëŠJ™�QØâéõœOD—ÿ¸ÞÊÜèÔ�HõhÞă([�¿°–\~ÊMÔÍ‘à ¦7>ïçòQÖ}Öƒ\l¶²­7n<N:ÿ<~F ŸX�'¶âé…=ÁZM^ÒÔz‚ÜÚªÏ)žä.ÞD¹ø~êOYw?Êô¦w³¸³L‘©¨‰ÂŠâ Ø å””Êö…Nš•õÎ�­/ ˆ¿^Ž¥‰î÷+y‰ »ØËN`ùLbE­«¯·Ÿ&�¼‚þ:Mïg2“KoU?ñ~ ænMà¨õÄÁùÓ|m(ãoX¬ÏÔ±Ì<¶÷qÖ.ýV/õfæhñ¸qbfÒÕþ+ôE«Kí|КÀ‡•Ã3Û$IŸ±ž»— ‹¾™DB�›Y@ƒ‚جâF6e5Û(mJžmÕ™ýPö,;ƒŒþ%bcŸò† 8¨)½X’�ÅðtÛ;ÎWg~PëáÒ’å\ݶBÎ¥˜ ú{Á²ŽÑHbPÌ�ÎÅ�ùŠûÒVAœ›¬õÖÃZkP…Ö‹T1C×Ë&'}e«ç!™æ³~K‚>î…ò�²œÉ¼€ŸO¹”“^"ž'Û"ˆ=\rt£x»ÓešÉv¶ò›ónIœ}Ñ`¦’Ë%šQ¹O–JJQ|kŠyò-öé£v/¤‚£Ón�ª3ýv<;8IÍÓ‰{Pj~WKºÙó䔨#�õr­êåÌ�u¢¢rT² Z1 Ÿ=KÔ® 5þD‰÷rö™(Ïþ¿eFs�"Nªì•=Njso¥^>ÊÎ�ƒ¢¢-·°%Ýäˆ\Õ€…Ñ$ºc{_ç3ùp³–%×8+õ-.Ðç:]š˜mióQØ¡:‰\†×Xئff”ºå$ OŽ iœræÓ+¤^4*Ȳ�’ÍZ&�ë™<ïºÎ5Í—œŸ4-¶Ÿõ°µ†‰ä> YöõM}£*“RfÙqx–î|Ï~€;Q~¶Mèâ¤K‰¨SÔ °Œ´3ä@�…å7:×®dŠÚ÷ïyѲà8Yôã¾Æã~™R±I3(µ¾qüM+Û~ 7'Ï>4°ÆÂâö6faúÖõð‹ÝúRÆ·Ä’‚òh½\ãjqD¥B2לÅé&Wôtf8…¢¢r,œ…É›¢2%Z5Ä ¿Ô~�G¸?¹ÌäÕš•ù½ãžå1bùÄ÷ÄÍÛÎþA FúR­éô6[Ùþ·’ã³Ëb6[Ÿ'ngräfu?¤’ ü´vùÞlC¶“ËhF×ÔW{béú2~ë ½2é³ö<ð4_r~Rª¨ŽÂô­Š}Õfý:t$æ”*”/ï�Ôp|adpFز_TT6¿ÿìÔÝ]?¯Dzz{·�[ós…^þ�ÂŒ/ŒcO”ìe'Ç×Φ¾6Òâ†Fý2¶Ô. r¾{5ºÅé6æd裳Ÿð�×êÇm¨‹ÿæDöb¸¡“`+þcXˆåòŒ"ô©H±Û�Áûq+ÑÃÚ`y6ÒÅ‹‚Ä2—b¶³ ôǘm édpækwÞ¢„RÞ=Ãòxeð¹|­­ÛØcqSŠiŸÛ'Ðѹ‡ÛXÊB.4‚DŸþü€!ŒçYnŽtþБò�³Çu( < ¬f´©!nä/Ð…2#ˆZ��(,F²ÁäÑ&�rRÂøe.H´ù1ÊT ‡WÏÕ“ˆí@‚ÜÅP®¢?ϱ�§ð›;4Úô!žó¹Â«C ƒÁ`0 ƒÁ`0 ƒÁ`0 ƒÁ`0 ƒÁ`0 ƒÁ`0x”ÿ=‘( ñ¢IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Monoclinic-I.png0000664000175000017500000001572215212624223021523 0ustar lerouxleroux‰PNG  IHDRÈÈ­X®žbKGDÿÿÿ ½§“ pHYs  šœtIMEã  -8wÊï[_IDATxÚí�{˜SÕ¹‡ß•dFD±¬h‹GÅRÄ&“� /x+жâõx¡Þ F©Zµ•JÁ =J/¶§¨ ¨¥X˜ÉÞ£x«rDÑŠR¨ä&Ì=ëü±V †ÂL¹|ïóðdÈÞIvÖÞ¿ìõ[ß·¾‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ 9I!ð-i†¸t“fÈ=žZ ¬N“fÙI_à5Û6­Àbài–Üa‰=ù‘ÿꀣ¥i(>‹Ñ>ï^iž¶¡2èX¿¼kC§N�B�:ujÍåY__ï©««‹'„‘ÀB¹Ü÷_k—xššš_ 03ÉÛ/ Ø`¢íãÏmßÿÆ”™1×í§”zجµ>sàÀ�[±+À`“½ÓV‰r@ J©�Ïç»è˜cŽY9wî\_^^Þ6 ?ð!Ð9å i´m£Š2`ÆPÅŽT™r­õ< £Rêâ@ ðÏ}xù›@)°˜ ÌÈ–ë@² TçõzÏéÖ­Û– ø|>ߘ”ZƒšJÂQº`:ð ¦ðNªM¹Öz’ßïoK„ü` ðŽí¢= t9d±@üa(º°   oÑ¢EM>Ÿï]LVë?�RØÅ wå.:pHÜxÍþ2å‰ð¹}Ÿ—€s1©(]DY,€òòò•RS}>ß‘‹/Þª”zè,'Ue½S ·ááR®ßÙå:�¦<¶˜ ér I“Ïn�”––Þ­µž«”ä8ÎGÀï�|ÀÁ“M¾}üSx3�Ly"4Ú6yÔú¶W�o‹4²X J)Ý¡C‡oi­¯ ƒ/wÙïûgà¦$dð1pGšòDh®nzÛnW?‘G�^”””Ô·¶¶Ž6(¥rçELŒàà×Iù GÉÃÄ<^ Š†45å‰r/p�ífÕÚî—$[2dÈšP(t!&høduuõß0yI­À ÀSínƒ/¸3ZöFš›òD™œ‡™ ñ¼xÈY|ÙþËËË«ǹxÀëõ>½pá²#F”Ø_Èó€¥@"~ý«8øÛuê´àá+|¬g"_Eô±ö¯×2À”'Ê3À€gm—´ð°$K)++›î8Î À� fcò’¾‹Éþüƒs9“ÿä! �5®k0ÓywŠÅ4QL…€ƒâY¦ò<&¿émªø$Ù¦\k� Sž(fÔïoÀCÀQÖ£ˆ@²­õµJ©€±®ë¾á÷ûgÙ®ÑJàxž¡–|Ærµ{¦­¢ ?šQÅTàVªX’BS~~YYÙ?P³­°"YÜf½É•@‹x�,#4x<ž³�Ï´Ö¿v'€ÉIê|LˆÃù_žæzzíñ�ªØÊTž§ŠÑ˜„¿_QÅ5jÊáLjÊ[À�01“ƒD YHiiéçJ©ó­IÊuÝ^@=p,ð²õoÛ bïTñàÆÛ¬L4å‰ð¥ýž/gÙnW‘$ ñûý¯h­oºi­ç/[¶¬€]ó¶ŸÂä$ÕçDtCO²"Š%’-˜áãû2Ø”'Â6àLà/V,Kí@Fð=²4Ÿ“Yœ�@àk€OÞ¾}û´Öá¹#`æo{�yÖœ~lï*¯GÆÉk€�*z·Ç”§(RžLš€‹€_aŠÔ½‹ÉéZ†™@ö[ö×Hjéܹó+¥\­õ¹®ëÞ±i|ÄhÍø(A °†5V»½�â¤$˜òTDÊ“:ÞÜŒþíáGò¬'ûE6]'YK*lZ±bEц ÚUtbÉ’%Å>Ÿop„RjT”!~“å‹•À7áûr0ÛiæS¶ïë9èÕ«×w¼^o—Í›7¾qãÆvÏ_ïÝ»÷‰ÍÍÍ k×®ý0�ÝóÛøCyT³^g»]Z’á wm´Ö/�Zë¿Þ÷· ´…Ž�šŒæý�/×ϤßïÿG0¼J)õG¥Ôó‹/XQQñ5&«5!LšÊ–ö~öˆ#NïׯßÕ ŸÍ™3§jÓ¦MõqvmÆŒ¶%Ä´iÓæ644¬»ë®»~’„&Ún¿s47cæ¸Góz¶ˆ#“Mö¦C=4©µx]×�î8Žv]÷Y­µÇõÄ.íIÂçõsg»ã8›‚Á`RÓËÇ©sçÍŸ†XáD/“ž…|ùå—7‹´Ög¹®û3L¬äRVVö &àuì Aƒžˆ±Ë3˜aà>˜Ô‹½7gH¤|OôÃÌ[ß Œ":$É-ü~ÿÏ€<Oyœ]&Zƒ:Œ½T(ÌS>߸SF H®Ö¨µþ ???:jЏX&çg±)ÚšòIäØRn"�=0hРº5kÖ\PXXXTSSó½¦}füÿqb§ËS¾óø1E�;¹úê«?²wåñxæÕÖÖv�Ú%lXw3íŽã\’á¦üLè}à²\0å"�6²cÇŽ:à¨P(4ÿ½÷ÞË�ÚülØÔcêÜz]×Ýij³À”Ÿ™+¦\ÒFêëë·Ù‹ÐW_}uŒ]~ü¨èҥ˯´Ö €jÊ‹�ç0“ÇÆä’)�´­õå˜B׃Áq1LûEÀuuu7ƒÁžjÊ󀹘ق·c¦×"öJ ئµ>S­qfMMÍ©Q»l�1cÆò‚‚î¹çž–ŠŠŠLñù5fJí|à—¹~ÎE û.’OmµF¯Çãy¶ººú[‘¦üÄO3a„uMMMÞ¦¦¦çÀ.Ë–Œ®Ád ŒÍES.IåååÕJ©Û�ý^ïr×ußsçà1`syyy³¦ûј©©™°Üö)˜ùø›0ùfÛåL‹@ÚÞQÏË›£”Ú k­¿ œäi­ÿnMùàLèŸg€)_€™~{1¤nU^HŽÐØØx¥Öz·™”Rg/]ºô°Ó¾S•°2�Mù“֔ߖë¦\’$”Rñ*˜thll ×Ъ³Ý•­˜ôøSÒð«ÌÀÊû_L*» I ÿŠó¼ÖZñÿU˜H{LÂ_:™öK1 ç¼Ã®µSHûñz½Á8›¶mŽzn�õ!GÛ_êt0í1‘r1å"�ä²téÒÃZ[[g[Ÿ± 3Züе®®nvŒ—UÙ;ÈPHÝ*¸ r8&C×g}Òj9«"�¤ }ÍÍÍs�žJ©‰eeeÇ–••žÔ*¥Æ¸®]rGcª£¯ÄÔÛºð}…°)ÿ–=Ž嬊@’×`1Ò×û÷ï¿Ã>6·´´\¬ÓZßç8΢^iÚÇ}ÞßÌÄêþ3&•]�$‡DÒׇú¥Çã9 S<íO1j^­ÂD©„i¿ ³ÎÛbÊE IÅçóå‘`úziié[öb쪔zîµ×^‹Ž—<܉©oûöO…ËÓ€��ìªÌ"ˆ@’CçÎ�»Ú_ý1‰¤¯—••ýcøNCCÃï#–Xs§5ÊCH}ùœÃ1µ¬¼˜©ÁŸÈ�$…SO=Õg½‡×šò„#ÍZëŸ`ã9ÛVkŒ6í?ÞÃÔ¹½,…¦ü)kÊo‚rVE IcÊ”)÷4555ìëœò@ Ð’ŸŸ>fõŽšššsã˜ö-˜e–SaÚgƒ€'lK�$Ï”{½Þ«¶mÛ¶¥-sÊKJJ6…B¡ÑÀ�Ç«Z㇘!ߎœUHòÄã™®µö“‚BoJ©P‡ÂsDnƒÑé&Û0ËOoÁ¬°Û¿ 3sÕªUÞÁƒo~#gT’TSn#å+/IE¡·�nµ¦}«RêñÕ?ÂL®j‹i¿wÌ1Ç„&Mš´FΨ$¦|³Özô°aÃR–þ]^^¾Êšöqª5þ˜ŠY‚z>f*ìÞ(¾¼ûî»ë;vì’³*Iº)'ÁHyLûsØ‘«P(4oÙ²eyQ»Ü�-T‡YjaOôÀDåPY\\¬å¬Š@’²eËò¦øé¾DÊ“ ’iVƒëêêî�aÚ/ÇÌ1¹ÁøXtÄ”>íܸiØÌGbFç†Ç‘U^D Û·o lÊý~ÿýûó³•R:\­Q)uƒëº—Ç0í£0±ŒYÀ÷c™r`ðG»O:Ñ3жSß÷QL±ï!"1å Y­Qk=³¶¶v@Ô.Ÿ?Œ0í£1ÕG.ÆäV]„³‡Ó‰“€—1%„ú7?ÅÌÂ|C"¦|_Dò©Öú‡€/ }£Z£e±5í=­H~aï÷€³0S~Ó…<àO˜ùî×b–Ô“(y66;A"¦|_D²DkýS ‡×ë}jáÂ…bt·vë¥_ëÒ¬‰Ï¶Ý«ß Ï6—D  >Ÿï<`½RjFMM�ßnšç%oØ‹1�8XŸ ×LÎ$�LùÞ4hпl:ŠöxÇq £6×c‡ìzjšv=p=fI…ÎìZg]"¦<©Lhmm½4//où„ þ Īָ3§Ýk/Â#¤�!É*Sφ`¦Þ~ÑÜÜ|VÇŽÏš€'bTk¬&b³z[ZZäÊ�d—)�"\¼Ac‚nÿލÖxHœj�÷c–V8íÁì —¶$®)O×Hy‚Ä®™„×/…7Øj�¿ÁTkü]Œj�—ËŸþù¼¹sçv—Ë[’u¦œ]ä~½Qk=“ôwNmmíÄæøÜ¢¢"={öì#1UÜÈn¦üÝ 5å7c–E{“¾�@ ¥¥¥å|`µÖúNÇqFE›öÉ“'7Ø2^áu@„\H¤)ommÍDS.bý9¦–UÜ€ÚСC7ÚH{=ð§èj�ýû÷o;vì:v­O’ˉ6åC† É´u¾£Mù^ƒ’{«ÖxÙe—}‰Í ¶Ý5!’%¦|>f!�k0³ðÂï÷ÏÇŒ^õñx<‰Q­q<° S9þJ¹ÜsP nÊf)¶S0óÉÿg_ßÀï÷ÿT)õW­õ°îݻߵ¹8“í;SL{n¤ÿG}T°mÛ6UYY9]k�ɦ<¼˜ç+˜2¡û®0¥B�çà#¥ÔDÇqî³]ÍžŽãœ†YÏ}´Ý]L{–3“òNÞÓ�‹-úv ?3UÉŠC�û¾íN ƒÇ»®Ûh“2ÃÿZ]×½Öîr£ý¯&Ù´ÇJV”;ÈàL�ìÁ±Å‹ç>üØ k÷£1QïfÌTÚv‹Ok}”Ö:z^ˆGk}ÿË/¿|f)„9À@`¶üÖ&†/ƒŽu0¦HÚnTVV.?~|J>´¡¡�áÇӭ[·óæÍÓÉx¿k®¹†Õ«WsË-·0räÈ×S=ÐÜÜ<S\îÌö±öN"£[Y$�mñ6455­Æ,s–tZ[[½@ ¹¹¹‘ˆ´�6þÊ3yòäÿ\½zuñСC׎9rUµpLœÏ­�0íçaæ¼ÏÀT™¯ìy%“Äü‘ížD3‘Ô­[lÇðÚën·Ç¹“­Û”¬ƒ ƒG+¥V5ýV)ÕÒÔÔtJEEÅŠˆ§OÇ,.ºSÔ­=eƒúbʣήràhFDÝ)¾Þî¤i¤3˜U¤ÖbF•š’ùæ¶ø\%°5B_i­=yyyŽÑ ³3‚VŒ)ÍsBÆ à}àXL©ÿ¡˜k§bæ@ß�©8˜ŽwÅHS~.)ªøž-,,졵®PJ� …ŽÐZ_Йշ¸¦¦fXÄî3؃yT¤�Ýx­áÔ˜ôŠdz«öó+صÄÚ~' þ—ã8ÛÇit]·2bSGàu{l×´£‹•µÃ¼ÙÆmöd%³ÛÐ�(`®}ý¯dÃÔÔÔœê8ÎÇqBŽãܱ©‡ýnM€_’ý„‹%;@ÑÈ$ûÚ—HƒÚUµµµßug­ã8: þ"bS &{ø LN›$˹Èþ"® ý#OmÈv`a ¦FTZP]]}”ã8ØHû,­u؇^g¿ç[ûx÷�d(C0#:«­±ßŸ93„ZOìEo(¯¼òÊ!Žã¼jE2? †°¿µßõ"C6—ý©¶")´]œ~ûés 1éë[ãûfº5LIIÉ&­uf±Ðs”R mˆë0/! c"�Ýy(µýëZÌÐp* §¯ŸLÇä>¥%�@`[÷îÝGa2| Õµµµ]Ø•6SðM’å|€™U÷ ð&Õ"Uü S3·¸5ݦoß¾Mëׯ¿H)õÐ? ½Z]]]`¿C_ê%÷‘Ü +&‚Ü\‘2̾÷§¤ß‚6{ÅuÝÛ¬'ù¬¦¦æ$Û=ÔÀ?lˆÉzb*�W 1¹O?þlMó¶ßý(P•ÄÏ탙SŽ”•i ç÷ûïUJ]{<ž`0|ךö“‘H{V0Ø'ÐZ+×uï¿êª«tŒ¶Ù„™Â+¤'aâS1óÔÁLPª²Ï§ ïyEŒ @c†;»åzƒ÷éÓçí8íS�MßS‰¶âò(ñ+¢×Ù>x.SDì,„²¨JŠOt—Í{ض•=,p“#t"ö4â-réäÇYDw!–àãŽIGÇ��­x]œ.Ö�réä#0û:Âð÷8ÀÇ4“u ã0 ˜† –jûcòL &!‡ðbR¾�K£c bÒkz¤Á±ŒÉ&(–KEH>ÃT™RŒGš ã8ÂÞ9‚Ò"awN·�®}<3‹±¯4� ˜äË&Ú?Sá¾Õ>7NšGÈu^Ǥå߃É/Ë·ƒ­˜5L$ø+ä,a†S7` *Dž«!£IBÎ2ØŠ`-&k9’wí¶#¥™Ä¤ç*%öña"V’²ô°>ä i&!WY`ïÇG=ßÓ>ÿš4‘�«(ÌÒmŸÇØž—›4“�«ç.áÃÌ€ü‚ø¥‹„6"éî™ç?¢ëäÞ‹)}43OE�ä¬@6[¿1“‹5 “Dy¦r½�‚~­�œ� nÁ, ô-àcL þiAAAAAAAAAAAAAAAAAAAAAAAAA2�ÿT3‚bâ¬VIEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Monoclinic-P.png0000664000175000017500000000714515212624223021532 0ustar lerouxleroux‰PNG  IHDRÈÈ­X®žbKGDÿÿÿ ½§“ pHYs  šœtIMEã  -)zÏ© òIDATxÚíÝy�ÕÇñoϲ ,rˆ ¢à±(ht•…Q%*D(H$Æ#¢xU4+Ê B@ŒÔRL¨…°Ó‹^Š‚"Q®a–ÙÎï-ŒÃ2»3Ó¿OÕÖ,Ó˯û×ýŽ~Ý """""""""""""""""""""""""""""""""""""""""""""""âKu�cU )5ŽV1øO`<`p�Še�B`Ž-›80 h®bñ�évå'þlZ©h¨¬­¤|>òT<‡ÆÉ¢Ïz.0¯²åq?¯È�;w¶nÝš*=€©ÚÜ^�,ú¬õR-ˆÅbÇq?¯ÈX,¶¿ÅMµ©ç¾c€]•T!<àF=R”�tTñøÃ�JV~9ÐSECÀV£* Èg@ ‘?ômذa,??ßæ²·Çæú*ÿ$#hÄP Ćqò>ˇҟ¡ &DQ}¢ZÀ=………»Ûµk÷=ð{à[Fß§kóñ�`0¸¹qãÆ�ò{íQĨ²â4B|Jˆ‰„('Äâ-ÆÉ„ØMˆïƉUY>®ënu]÷ƒ„§î´;‘ÍÀ…Ú‚î°œíF¿¶!yx¶ŠÞw p !zaàTN¼Œ3ÈÃáf`E5—ÑcÀÌë»¶½"> ÀËÀÅ@pðéîÂñ!–Ù- œÆ°¸xÓ&>À6$cÎjýh—Æ*VEUîZ G1"Kv$��Y@/ÌJ=EÂØm«YoÀG¤kDÙÛ�ÁÀ{ª\™n Ð s†t`:MÞ71›.\¼Ô\ oÞ§¦}ǃ|�ee´Ë–ÉX»Cy8IÑðG@*ün¿ïËÀ݇ùõë+€¡YZ>qàà>[5�œ¥xø«÷âϘ1€1ÀßË«Ž%3æñ&!¢Y^F£€A¶š5ÓV¿y¸Êî1ï^ûÙe°ž~˜Þ²y9RFO½1S!Þ°¾UÇßùu Èî!{³� $ìýC4޳U§zÀnl¤¸Ÿ�I­œëìosr¨Œ&Ù¶Ûd[%m<­€øÇ<à4`>f<àzÑ“Óy hk®«0Óywå4%FSBÔ\&3„70ç7Í'Ä—9VF.¦×ï-à) ¥m£( >±ÒV�§0‰™Ôä:.`æ~»iCÔá×bðGBLÏÑ2ZdCò60ضMnÆt¡K¦J:Ýýçª�Hô€ï�Sø†8› qkFíú÷=ÝýçjŠGòlµ«¶éþ±h”ÚöÆ|̹J���NÀ@{V®úŸýžï¿´Õ®ú ˆTÌÛ~ sNR puB5´½ Qe!Ù‚é>~$ÇËhfjólXfÛŽŒúÀ9äè¼òc×Ï`®#5Ñ6NWØ£Ê2Ìßã+ É !ZçxùÄ€~Àß0©[ˆ9§ëC̲稪) HµÈÞÞš�I�8Ï6X++·y8´÷ÉÑöL÷oÄöH>fÖÈ\ú²Yy-©`0¸yÑ¢Eõ7mÚ”Î+NÀœåZ™Å˜3†÷*¤Û)ã+¶âûÕ:\ë£uëÖg”••EW¯^½ìþ¼æ!î([¦h¬oµÕ./âçnÞŸ²r?ËNÛç™Ï2胯\ f�óÌjxû#mèv) ¹íýÏÇ1Si·Tág)Ãô¶�aƽ�F× >ü‡á½·c.ˆ‘ìÌ÷dss%Yë0�ƒ¤’‡¹¸AòEØîÏôòIÃ8Hª*Ö*ö½�xQ.mkj¤§Çœ«5Èþ{§ÝcŽPÑ€ Çùì=Gk!f>É{ ˆ”/Úß·`Èd¯u˜³ÁÌ!Yšk_PQ@DDDQ@DDDQ@DDQ@DDDQ@DDDQ@DDQ@DDDQ@DDDDDQ@DD$Óè.·RŽN²;äÕÀ˜{@ê"¾V¸˜»÷ÆK€®ªb‰ßµJ�˜»ßÞü sÏõy ˆøY>0Ø Ü–P� Waˆo]e«WOÑ„ç7odÓQ@$®µ�S²ý‹( ’ç٣ŗ ˆÈ¾rá‹( ’k�&@^ÂsGC�Ú ˆøÝàhà1 p#¦k·°+›¾ˆFÒ%Fõ�k€ÀGÀýÀ¤lû" ˆ¤ÃNàû£6ˆH®R@DDDQ@DDDQ@D�¬Ðaùòåu¶mÛæ`. �'p]÷J ÐÂuÝ T"þ È�À¼5kÖÔŠF£fÆÚ €£U ápøyàuÌœð¦@i$¹M%ã�€…™ãœ†@w¿¯È’’’Kǹ!yýzž7º´´´¹6õC“MgóvލlAŸ>}¦80-o�FéÞ½;�5j6qâD/ ×qí²²²ó€ÉÚÜs; ÛR-ˆÅb+�•éxÓx<žËÊÊv³2¸|NN¬l�çy;µ©'˼hUɲû�¿¤é}ëÛ�u@ÆVUÂáp+Çq–5´‚gw,;»[·n‹ÒôÖ…À§À“À µAªÏnàò¤#Å÷À`8p�Ÿ÷tÁ`ð+Ïóú?$„c£çy�üü|W=Z¹€Ï�6@p1pð ÌèÑÀH|Ü£ '×­[·™çyÝǹ°¼¼¼¹çy0L˜VRRr©6yÊž<`Üan[Õ±¯»6[ '_áºîv×uwE"‘>i¨byÀ?tÉ\qàà>L·ïD²ìò2i>²¼Y^^ÞØêyÞ¿]×½[¥â¯€TeŠWoa®¬!@—.]æ�bà`L8©Rñ_@Àô¦üƶSJÉàž§ªV\\¼8�_,ug°ëºOzž§Su|€—�Ë€–6$m´ª�®]»®ªY³f0¸5‰L‡ÃG¨dü€˜;ÕÅ ð�¥Õmmö<¯ð.pµã8SçÌ™SO%㯀|c.w9Ó5,¦á¾­I“&W¯Áh4:cæÌ™MT2þ ˜{â]€¹ÿ›@o­v£°°0¶aÆ~Žã<t(//ÆŒ'ªdü©!03"ÓAü¿¬9‘Hd°ëºžëºkKJJÚLÎÐ8HÖhŒ±í�©˜q‘Ël£ý;à[ï „´ÏØ«S§N£Ç4 áp8|‘J%·ÒXŠûˆ8¼Âå(û7Û1³ÇC€ÇÑŒÄÄ�—aNq�$=_ ómÛ#•—l½ûtÌXI ÅcOH–�ó�…À‘Hd\8®¡€d—ìcò-‡¯·Õ¦Òx�)6hÍíߟ¢xÅÅÅëòòò:;Ž3¸Îqœÿ¾÷Þ{µ�ìQ`oÙlÿä_'\„™K23¸(@ÇŽ¿+((¸s†ô•±XìíiÓ¦ÕW@²Ã×ö±�}¬‡é™zÁþ{¦›w ?=ÛðS’o�i˜.áŠAÅú˜s»|©C‡;<Ïë ¼ççç—öíÛ·p—ý“"R\4BªW ÌO¶c¦Þ.±m�þ˜ÞªYÀ"[…:PÇØ¶KܾFÅO9¦kØ·<Ïs"‘ÈèñãÇ{ 4Ø�T>›�³µIfžö˜q�!˜yê`®î²ÏŸz¯ySÒʯøÙ�¹ß·¯µmÛv~Šò™‘KßS—ìLm,psŠe[1ÝÇ~V?E=JMwÖ}ÒSûn?Ë~Hê𣒮ÁemѦã'Û$W!>ªæÏÕøæBÞçVã產Šõ�6ÿ¸sš»—ÐàoVÍŸ©?°Æ~ž¾Õ\=fÛdžÝ™<�¹“øHp¦=¢dŠ0¦G­Y|–À9˜Û-ˆd„µ˜«LJši.Döin�a…"ûºÐ>Vœœy<Ð 3õUÄ÷µí�c€1W¸�ÛçnTñˆßÍcî‡23q¦ É:4ø+>VÓ�º x.iÙRLw«z“Ä·:ڬƜµœh¡]v¼ŠI�t¿*²�O“p')«™m‡¬W1‰_M±G‰ä�-ìósTDâW°Á6Ä“ ´¬b¿j“â(Qs°õèÒE‡�NwϾöG�¤çGa.}t fžŠ( ¾ Èw¶½ñ"æ\¬K1'QöÆ\¹^ÒP¯•ìp f€p æâÇ+0§àïPñˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH¶ù?Êv•º5 2IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Cubic-I.png0000664000175000017500000001141015212624223020444 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  .g‰œP™IDATxÚí�y|TÕÙÇ¿g† !$bƒB5*²[EEK)03!¸µ¢@Á]ûQÄVÄ…MEÀVoQZ5¶"AQÄ7HIrÏ ÑRT”·ÊD([Xٲ̜÷�™$3ÉL6’™1÷|óOœ3÷wŸ³<ç9ç€F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£ÑXžDžçK6ñ q1R¢N¼Çav0»õä°“ƒòÿ,�‰�Çîò-ŒµÇ%=‡É ¸šÄ7Qÿ΃¸£üwØK‚4kô®ºšsö›b5Av]½Ì×QÿÎ7qK€…X­ ‰g[Y��´//@Í$´! ¬ØËjÏ ¼(”ó”¼1 ôÔm½O$)áåZXµë»ƒoÙ"JÞ>`vŒ~aäZù°Ti›QÜkÊ¡|‚éªÙÔ¯Õ ãìè~eãV’â–ÃßrŠ {1&@ß}Ó»`�XbD±%Q61YŒ/òÀùEdÐ…�Ö¤„™4~ŒR1#z_8ï~tfy(Á J™hÍ6¤€-@svsª'¹Ù�blŽ“Ûs�°6Y*¹XŒ"ÕªEÌ">ç~ï`õ¼áŠÆ×=øG6§šàQ~/Å4¬ÙËÚ@û9N9@îËéñæÇž¼Qî6/hìì×t’Öü¬â:?I*ùaù¥�­œà\«ZbmàZ©æªå«Z6n†Þ˜Ù÷H€Ó@8[êa6 Œ²®…ÀyœdÍýýŸ…滪'“�žr÷†„À”U-¥2? HhÎ~ •U-ö±ˆŸsŸÿêQÕÞ|¦ûWÓ˜Òód`JëÀ6ÄçCx‰VŒ°’…l«”rEìÄá‡Ï“;ÍÛ'ë\§ÜRÙ¿¼®…T2+(é,Ž”µkV´ØEr§ï½OÝ¢æ=>%léâwipjQppŒWh{V�ÅwU,.¡„­¡jæ`¹+¿]ƒÛÇù…ªòÚe5—Êü¸Rb2'ÙíYÿhΗ°˜KZvé\¦^+}7«yCf‘i·Mc…·rzJå6à¯sIEy¬g!БR6W¼JÈÅ2£!³5�f¨ô ©ä?«$_L _F x0F-¶òݸµ¼7¤âî§‹l0ß«¯&1>Ô�«¶!¾®Ç.ç&ëZtÇÃç��&¿�ü^ÞÜ0™ÊÇå²pU™Tfvˆ]ñð‰5ÙæÎ(~Ô _-÷—5€}$Ê=¹aÜêÊ&•Ì ykоVäJ¼¬¯ôfß# òÎØ³$§È×Ãw†¥’¹!oýE–•�•(Ò*=Ìé2oó­&É;W\sI5r)S†ë  ¸Êš�º�)@%ljsG ç�É?õ>#Þê[] µ ë=KÆZÙB ÅB® JJ’›ŒGë›]NŠ<˜Ý¶Ú Í#óÂÞü/±Ôð‚„[¯§Ø‹>+°¿e\$÷Ö78ÛxØ\C S*ׄ¹5¶<6>ÝŠ‚Äs¸üTjKŒ>rïšNõ�£‹Ü[SD‹,1óCÞ¸O@yzFúAEjTº“RBÇa pÄ\D�›ÜòG¥ê–Y‹DOiñéê?“ô3OéÉCÜhNB�µÌŒ¬ Í¢.}IÐÕì¾Ùú‚Öñ»¶ÕE’-Ûµ,øoõŸ:ïªâ¢�¡¬ö.¸:ÕT«¬�a«,GÅz&¡îbLý¿rv�Æ9æýµøÔiùI¨㛿kQ\^a�ä|ëu{KÌ!<=Žx\f#À0Oü\_ûàlãÚ{kã T¢’Íg›£Ím�ÿÃl±€ƒÜÊ^ëY@KV¢¸ÖŸ%çÈÝÆ­Á·s;Ëýµ ÎVBþÛ\+;:)? r×Ì—‡e¦ÙÛoµ(ŽÎìal¬:ÁV`/ô:æ­né2ÓhSq;õ[îïÔ&8;oÞ~ï×*OåkÕŒxó^ù¹íQPÚÑ5̹ÎoµGðF§ýˆ•]îpw~Ü•ª@l2¦S}ÁÙ«kˆ É´«ÉÞñBÕV�5�Œt±KÝÃ$g'çô´C±ð bPè}Ê=^ Vã䊜öåΔ9j�cqõÁÙm‡³+5§6ÙeÚ±‹N žž®®BÅÈsˆB°u-p¯Oì!òíÍe>§¤‘Ä'?_Ms¯žö>[‹jí|s\ru81Å=¾ÿΰåќԳÄ9]¤©áy+sR|×¥C>8[ŒâÓÔOkèƒõ‘™Þ¯Õ%â·œàHÏ’Øëýİ ίToVÚÿeŽS¶êƒ³W·â 1)|ëÏ2Gȯīb­Jq=äüª¬Q¯¦6¼t‡ºY=áìâœ^½ƒÐóœZèÞêŽëuV‰LßÎ&B93lWŠÎ…BnÙ¡]'áØ'‡Þv?€¸Òu³;»&¡ÙQ ivoì�Sb+_BÐo¯kÏ‹Fº¯-¤ä·3Çn£ >…¿¼^y6ÌË;•Ùá-h˜'þu]`p¶k©ã ÑN|U):¸.‚ü‚hÏ9\Ô„ñujK7©K¼78ûükSm}Yy—Ó¯è¥ê>Ñë˜}PðÎÙ¿>àºW�r¾‘Xç*«59Là\þÁú4A’I �Ö�)ó+1]d¥¸JÝLœ‹Þéü98â¤*}·T Îv¤.±IðY&-Uó ŽZ´|°ƒ;y‹×hÍZšwq…â·TþÁ+ÓŸ¬¼ŸChd_YP»õëæh¹¹jpvîõò;™™÷”¾ŽÃkìæ^å&£Èäç?ý6ä?ªç¼uÞJ6Tpv¿LÞ)«¯Ä}7UûÆò¿å/d1�+Ëî¦ÑÏêÆ¼WíV£P ª¶5J®¨_ææ8¹1xçl%Ì�y/Çå‘ü¤0´Œ4qìä(áŽÌ‰¢šÕ³gãÔ‡Ð;g›OKe>k‚Dn¤^ÂÎâáúUYb 9¾³qê×ÓSíÍ*q[Ås9ªž¬âã²�/k>MBÝÉnÍ(Ïäúgì>­g0à(ó9�»kp�4aANðW’¹¿î‚Ø'¨%ý·ŸIÖ¾�³å5Á©¥³9%ÆGòØ¥Ø^â8cqÔM�œöâ>þt¦Y»¿ñ~NûÀ´´ý*ƒm‡XW�Ã,än¯› ¶)j~ÅÙ8õǹL-´/ w4›A©šb³?ËLPÍ¢8ä�ÀaYÓI l6«a2wMag«�)} XÊÆuVµØÍßéÊ͵Äóg^ <çLµs¶-eŸKÍz¤éŒ‡ªËûD•]4‚¨r6ΙRuçló#©r]écK9Þ”-$•¿ó“x–^|Ëû\‹»v"¦‰©Ágãœ)}öx±ÐüEEŠ÷O`‹…÷tÞ@q1Ð/•O&xUuD�ë”[j1«Wg*ïœ-×Ho¥ÍÍ›°…\ÆLîf+°ƒ=ì¾ ›•öû i!¶tñlcìGâzKez—UÌ<Ši1Î*½¬Qlä_t£lcÖiÀ¸šÉB‹~K§P®‰.|¥¼CœÅFîˆüéÕÑ$ ßÒñ¤±®¬­æÓ­:A2í¶©ÞqÂÛ8…^u=åÈòìgb·?n i‡o5àHÎ)f`ã‰êi{‡RW5^±ÜÇÕ@&–íœ]¸”­ÜŸw¾,ä0í—Û¸ßÌÄr¾æ. 'ˆ¯žã·`ÁÙ0Ì#^$Þ;Ò ‚Ìãar¹™ðò]üó Š™8Nñ0�ë»hî|5Áó¡q6À‰7ÙÃ#ÆÙV^Žï�îA›�;Øp ðÝ(Ê70åÞÜ+"S89GþÓœ-Ÿ’Ê(³ÊwšòÀp“ÏÞÍAGV”0› i!OªU©_FæTgý�Cb̺(ŸõÍ`ëWÙÇH’* b´�6›©Bøƒ³‚ëOˆy$ÿÞ_e=AN3—sx°Š…<£þ^íÙ8 L¯cöAjªtCÉ_8ÎSF3«ZÌå(O(HNЏÛ3-²Åè»…»YœÓ!틸Øv›u©˜Õ.Ä>™¿¦í�tA\«yÁ¾bu+5“bõ´²YwÕlN1{™ ¹�¹1~V4 âzI˜ŽÅ…{y›®æo¬j!°Ÿ :0¤L[:3z‹NQZŽ">ùyo:^ñ´u�”2Ñ7”×Ð3n^´ âÛ9[\Ãrõ˶çZW�–r—‚tñ\ï(2”vH /²Rºca®AQŠJØñf�õuóÆ +ÿ{Ë®…——I²¦ ™eËâÓ&ꥱ¥|S¾|â3"DýµÚ� Ü"ã,�ryº2%àjË"›}ô·Ö>@ø.îŠ)ëíé £/ȼ]‹%äF¹<Ý <ºo«Û�×Êëì-ü,ꥬ//Ï&¬(ˆ�§ÙJ‹_­hÅå8oG£<¢II›È(®ä9\ÍX4Q¦ _ógš‘‚—·õãˆ>¬ö[ýéò™HMÔh‹Ç¿Ž÷R=ô‰6w üû �æ(öŸê×°5AÚQÌ! ‰1|†G mŽGkìÌf;[8‹›t¥í>Ö^6“˵¼ÁnVÑQ?’hs}h $â´æ[£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh4�F£Ñh"Àÿxæ5D ]ÝIEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Cubic-F.png0000664000175000017500000001357615212624223020460 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  .'Ñï±mIDATxÚí�i|UÖ‡Ÿê,„5Hd‘UeaT\!.82:Î/:ê^QÁ PgFœÁ™É¸â2£y]FÜÁí5 ‚( �ô©ATB€€,"BXC–NŸ÷CWWW'Ý!!�0éúçKuU/7õÔ=÷œSçÞW®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹ŠyµàaVò ’xŒ´¨ÓØÅ2ˆ‹=qÌG­¿™ÇD‹:°ÙnÑ«ÇÚé2Žú/ g¶ãÕßù¡Áÿçßr½½]Aw6K@â�ú/œöê¡c®ÿv‹5 ?:_4))›­KØÓ€ÿ±Ç¸Kû9zÈúXC’(Zìf¾$E© ›tš6Hk_¢†ÚcÈ˱èeub~m2íãUñŸ´?J“P¯íhC&†^ªOÍoþIK5´Ii]Ç€6PF9e—�)+ÅÿÌ›d°EYÍÚÕ‡¡"�h§½/øÍ—%,ì(ú{?Jz¬YÏåÅܶ²Rüòï´8RÉ¢¥”Y¤‘p4 _ ì¾é‡¿ùá²È=AtÚþD?ßã‰U E([(¡S‰ÀqŒæ+e+™œv´ þ„w²D,àí jný�¢\«@~Fy åCЗIüŒ¢,c<)GÚP±"e¨Ì á€yíE%ÿ]5|,�U [P2ØÌANˆ€Aå(ÉbÄHj ` Jã_h޵•¢]¢ �M P¦p/Ê$ˆˆàƳEù‘It¯«¡b*íóšVƹmE½ E~?Ù±éeåSÊbš±�ý_ ’Àµ�ÉNË„�¦Åaª¯9"áïñ¢2GT^f6ʹ± ä{v üÓ¾N£!�$Ò˜…eSI­qÖÍ6TÄGÃóRDÍéR!9\ˆ2-6�ÌDI¡;ØMë èÌ+Ò_CÝj`¨|CÑq@^Q™&e°?}cÈZžFüe¢ÃšW�<\ÀdöÙI—fQ ÕÏ(_s�uÒ£âokQùHæ‹?¯)W¢¼‹@Æ Œ’)âZÖ @+Òɶ“.�“Þ‹çÉæNæL£ìªCá€ìdQs†LÍé‹ÁrÊÙû!�‹Qà1”?…ù<5AЛ ­¤K&{¬aqУ²MRµ8`I+Q™)÷‹æ\܈’{@:¡¼@ ûøÉ™Ø«ð�ÊTŠQÇßž ¡ª XØRT>6¯5ÿı–´=NT}fr¶²Ÿ^ìäeÚskèÐàžT¾åó_5@âgét¤Ì±ÏÇÂ޲™¤Ó›_?°<ÚW”+` Ý� þM3ÆÅ¥€ž–ûú¹Ÿ&‡‰À 4Ì¿²’.5Áe †Ñ¬µ‚Ï×ÙÆX’c äÓœŽüÄëtf¤ó`-�¤³&ä_sϲ%nÚ¬¼ŠCâ€5ó=(åIft,�!À#([{ºPÊÆÊI÷�%ýÉCÙOORlmAÆß hrqü“ÖiŽª¼¦¢2$W|«-/®(|\‹ #QÆØû^±ÜàÚ 9ŽL|(³èb�Æž´ å/û/^Ë/‡Nºx“Då3�×Eô²v>ÖºF®B €A(OÛûN¦œµU³ºQ‘¤³å.‰xÍ=«&vÒ¥˜¬ÈI—ÙMDÍÏÁœ(j^aílG1ëê¡ìã’‚ò±cïT”ßW}sD$!C•X-Ž :1�µ(ÊF&qRøûW'ŠÊ0¯•�wõê¨ÙŠ °“ï{{âcu$Ç¢’Ö• Õ¡q„R�“.ËDe.ä •PHx嬬‡âÁcÈbJÃŒÂû(×Dú@I†Ç2Tk¸4ê]}Ø”4+é²;˜tñÆ‹J¶±êxïÛ(¿Ž% SlÏ? ¾T°"ò5™ÛVV¾êï´%º¡ªYTn©l@Q¾cÂñEÍyò³8‹[ûPÁâØ²€Q†‡™õšlÝâe�í¹.©[5îkÍp8“.P|ô�ß’²XJ³œŽÅ,” cÈu(ã+E~–D ý¶£ž‚‡×Gw‚k‰#¨dF³EÙÅä§>5�Cþ9hXyx#ÒåùJÇ>CI Ûs‹P�Abô¸ä0qXš¢#6ñŠž¨§½¸©lÉD93V€4ÇÏÜJÇÎE‘�¡²=ª®ÕÅ%uÃâ“8R»|¯(%Ì"Ír7†£ü_¬�-l¨rt!Ê«œ�A:?¡¬á²êã’ºâ©�\ï¹ëµsY�¢la=�ð3µq—Úeÿ^**eŒ.£Ìº«±Å2TM¢9Á zIšwÈÊæuÅⓨ?1g(ÖÛ�¢ŽùU“bÈd4¬¤ ‰]ŽM^:Eþ‚ܶ²Ò«â•}uÅRnZwPd—|k·å÷ä†ÝøXß'ª¾27jm­z±Ú>r!Ç9Þ7ˆo#Á`š$§àµPÝ?”íuiЈøŠsØpE+OëÀ@¥Þy1Ë'�ÐlÆ��Âï[ìfs´/èÐÃaéŒõ?úÊëÒœg–•n\pÜÉÍ�Û°¹Qõ?;b¾J=ä>kËO1rCÔO:kp¼¹ŽíPÃê³Æ:°oh%ò óú W³­ñ)c=Ãö Vù�=L�Œ$¯©r…+Œ”ß{� Äþ|xº[8²¸ªÃª™FÛm”ÓµJÄÔ(�@>å­¸‘M,¶±œK"#ÉkZ6S‡Ó�ßéúçø¾Z›rˆ(@‚£š§´Gsß,nV±oþÆ;~„�!�‰:¦{Þ‹r?™¨5êLvâ GR5 ¬UWä1d¿|ioï•$2eΔ³Ee&Ù”4̉jˆâô³ nç ¯¡¶V¥—D*ì©uÑP5c°Þ×#Ð;¸ªë(0&7Ü•[@Œˆ@~M/Þf§H%$Ñê¬êŒ$4†Pºá-8¼ñÆõlÚ>ÇŽšbd ÁÖÇÏC’êÊÞêˆÄCH¼»ï"’—r%ÆM´â¥k+b¡‡8Ç“«‡ôä„oª±‘¼ÿEuUˆuB’HÖÚžgñö+”·QîyÓjOÌñ³Þ2ƒç¬ÓSye¢å�®læîW|Y]b�ø1‚žU›e�Ò²+È úëôÁÛ ¶zä“L;Zr›¬² *@òš¾óÏÌø&e/ ˜VÝW6Ått»!z€Žq èÚ¸�F‘[hÅ‹ø" Œ½¦'T*Ö‰–y‚žÕ˜u¤‡·µ‘Æš‹¤!q4TY ôæÚY­0 ¡¡|ïÒh¡b]‘øtb×J ?èiŒ¢“ …Ø0YF% —Ó‹wÙYH%ÏjùQA’ø·–_¶ à°Ò'­u4§#ÚD¡½Ý‚WP*P†ÙûÎ�xs6Bô^UµˆÞ™�ž¶Ÿ¤ÀKó:ïQQsŽýŽÏwâ$È\;½½Ê.{,0C7ê½ò#‰$‘hÿÒ9V�œ\o݇T)ÏÖÐ@ê 9ÏQ»Þ—4§Éª& j÷`€#)[õȸ8B=äj:ñÆÀb‚ËlÄ�‘$ó"å‡÷†7mGW©í“j†dψ-‹Èì5ZZé�‡cÀó*´[O…Çi²bˆÁ]”2¼­ ¡è ÛÑ­=�š I$«ôòyôÛfwWq‚ÌïÎP¼ƒ¿ƒ¾eü¨1g².åÞc;ä5}d,¬Ú`LJäPH¬¡¼|xÓaâÅ€øÛñ/ÙbÇeÍbˆA ¤á…€gÕûCÚŽîᩉóŠ**Æì&:’íÇ[Á©Q€±ïäX2YÝÎ"–<«¤éºE{†ÙìÃ+牌¤’£‰b4M£-¯õµêÞ� ?«>�Ü�‡çB]òél¯­pø@"!‰wTA¢žÛñ¯†eÙ"ù—Ó‰6œØ¸LÖÍlÍøÌ‘ÑÍǰO@]€„�<ÍÛLc Drt+!Qô|>¿ÈžñèYg];MV óù my‡|ç2‚GKõ3a§ÍhBó¤Ì!:2ºk�ž|s€�,ä�\dW‰;€Á;rSýó¸Ç$ï_e͵…/…Ž&”i?Ë`k¬Å§²¨qô�ÙDšÃ¨kÂìù„îEÔ워öRäbé@/1î)-¤‹ÑŸ:fŸw�­ULÖo8‡¿Y=ek„ùÃÿ…@ºñzðT½ÖïçO ö@9R@Îû_D�ÞyÐoËo¼§ŽOt�Ý$,—•ÆRkÒÎàúèõa²F„–�)eù•íÊÄzåãrN¹ùù›²x‘Çf�W‡ŸYæ\˜;þzÝ_k’X£Ÿ·?_ÙÁ{�qQÒ‰¬q$Vú°€N ç�Æ$lŸ=ß±5ôÓÇ�WO.À¾®ôÚ»’‡ÿ3}ã—Ù‹È”¬ \_˜ú8§^{¡ 5¹mMXëˆãaøš&”ÑÀu[uW*‚U&ñþž×ÞqìSÔš}ÊUuÂ>µVºÞÌ^|ÑW†3Ç8&�ÍvŒ<’&j–Æùˆ+Ëf®â®@G�ÿûÇ�ïùþÀæ­¾SŒß"Ù’f­š˜P·1$w´§}éÊÅìå­HH¼ñæx}"”`4F^áH:zÖUÉøÞÏ ®äYfó§s?›ÿûM<Æs×LyáúïI×TRwɞɃÃúÒ:q†��"…¯¸„lÞÞs¾Q.äy=�"Ͻ…qÃ*n6Êã¼a_TP ƒ†i'w[[ÐÈ”ÀFöÐÌ>ÞIò“¨è£…hò“Œ�¶Ô_ �•}¯Üágír®y)’)â—©¹ÖïæDkåw'²í’ÀtËd5j݇bù>YqÞTÉz¯ Z!³$-aÊïŽ Ž0$ê1ÓåQY.ƒB‡³“e·ló†}RIù²„XÒœlw>ŽezJ\Ù‰DEïÜ�¸ïˆâ°‘œ=Q–ŠÊ.s|V¥5‚å Qï­a{¦ˆÎïL‹ ��Ú69 oØ›Ó×;éî}h†šËÌÑ [1@ß¡MJ<ú _¦.Šð€×yí¥X œ˜äï¢æ¥±¤ ûضÞû4”Ðd,:v±”‹ÊAÉò¦Ö´‚½:Cõ²6óÑœ`ïK¢æµ—øQ¹³!�ÔïÃ]¼J—°µ¬­|Vi9<÷l|7ã~$ÍÈ67y'-8¹†žUäS=Ð\¬Sˆë}ƒtOd'âŸÄ§ á7 Ô÷*1¢Î”ò�ã2…r 0&´èxΙ,{E¥Â\hŽžÓ¼ö½#¯MУ² U%�+lÔxW4ç2‡/¦2ø06LV öuÆäX é�_uÝ›$i’-~QÙ#S+™°jq¨ÇL—¢²Âd¬éM_دڣLnC«Þ7»˜d�¨¨üàÍXØõÐ8¼å Q)ªêQEGb~"šs¾ d©”¨‡7�¡¼Í[ü�¿q.ð¡ã±.PÄ*àV”#_ñÞ d²ì• ÉþdTܬh8ª*j†Ä{®e¦l¶°kãr/kè ¼‰rpFØÚ½K)!Ž[Pþý+²“ÍtÉžç?_Ñ?¾;ÈÑ#Ò¼ýœ†*t­×‰,¿·Ÿµý�¨9´1é‡�³ø[¬}së}¾ƒr"£Pn:”£ÛbzúÁ¹**«Í ÞÎ2ËZîož,�b¨j„ļBTÞ²¶GŠÊmd5�£ïöŽc9�•©Nµm÷80ÁÚ¬ tèäb"Yû‡17>%á> ‡N2 ¹Ò2kÃô,Þò�rQæ!—�ùŠKªf‚/šÍr®Ÿß ¢�k|�>�ÔÀ-(’H%/hiXÌ5œjG"= ÄŽ;¾*¾xÞ�kã:cÔ+x¶ IO­Ù²±‘èSÄÅÝà/O�Æ\(×ÑZ_w,ml ð$«F¤&@ª„�]ô²á �7ÇÏK©a‹" Ùñk•{¤ng_CÖø} »è ¡PÀÕ½™¬â&ºÖÈdEˆÊóÚH&Ž�Ñ¯ÏÆo–,qÈQ$"’k+Œ§Iò�`�ȸ“Fð~>á+Vž"�{�=l¯Hê1ÓËÖ0ÎøÁ¾—¯ý�{È'��Ûz'Íï^{$¦°•»¼­�š7MjÌQÈi²R}Ãv”Àë�À¹øø+…rÈ$IXTv›ã½ñÙÉæhï$sL0½’3@2eg0éâmQ;�Kþ,ê}ÌÇEÛÍ��H=¤±ÖJÖ¯¡üåÖCáXpœdŠOü25¬T"<Ì«.éR-’9ÍåÙž×Ô{«è‰_Ä"�$¶±“–<€ò4ÊmÕáPÃL—ŸEe¥·¶ÞÎæ)•5ÞŒùÝj†Ä|XTîðí³Š}Ä &¢ÜÇ5(o£• †Ã2TûÍ Þ—e„']Ìô(“qHæ¥È>Yï=Q´ÿÆØ’Ìn¶1e^¥çÐ:pX†Je–÷0ª¢–´2Ó-V$“#ö.ÉÍýƒÚ›@à ”;¨`ÊíUq؆êoj]~&§·7C ÅJºTI>ÚH¼�¥T¾Ë]5¤,V�´§˜ Ù‰rGe¹gJž¨ì÷f¬N¬ûO©Ç›*S¥XT|’-ia yØHä QsÉ05ö£z e%~”;�8žì4Tu}RH¥á¾µ9Ú\(**Û$3çôÊHrzK…¹u˜zŠcÈÉ”[ãº+„ãã[†J.9:?š{ªw’l5—ÙI ‰LMÕ¸ƒÄ¬ÞµŠ±ïàh™÷ù’#g¨¢ku¢Œ�,)•+é¬ãÒTM(�] gY@¾%=yãÜ£`¨ª1aÌñòµ¨¨löNºôjvá뿳™Ês´ŒM Y¡gPýªlîQ4TÕxa$S~ÍüÎðÙíYJ\}·¤áæÞÇã³/öuûèý�ú¢!­‡žÓ}È®~o8ÏÉï˜kýcx؃�µ¿z_¥4¾Á�äãwÜxŸœnO_Æ9^­%õš}=æ‡=õ³ad°ÄnÏ74‹E qLd-ëyýèÏà«‘’y“=ìç݆h�Ѩж`ý)b>¸W ¬ãYÅ£ÄÓ ?ﺧ£á5Õz8«A w¹§£¡Õž  !÷@9Ã=! ­ëQIÂñì©ÿûHÉÓh€t¤Œ�@Kîe).�†V‰¤Ç¿YG>­¸Â5 ícmc59œÍ›lfN¥G„»jµáš-¸(6#lW®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹råÊ•+W®\¹ªý?gâÓÝÄ£IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Orthorhombic-F.png0000664000175000017500000001666615212624223022075 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  - V~îGIDATxÚí�w`UöÇ?óBB¡7‘º ˆ¬ˆŠ®šØUjÄEĆ‚ ."«²Øp±ÅºØ iA„d΋ˆúT”–Л!�´÷Îï�W2ïå%¢ æÍ7ÿäÍ�¹sg¾sÏ=çÜsÏ6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lünˆ¨¢û4ã Îfù'Í“ŸÏº±�¼p¤ýjòP”\úŸ$-zEQ²ˆ ?:ÚRè}|%‡Æ'A‹úÛ£ì"òdzYµªàC,�\—õdWûS7³ü*=ùúä!ÄQåãTÔIðÔðËn"ëLÜ¡¬g"­«³Aun·´f[•)6'îóQr�þ㈑‹âb9£©[ mièx:Âå£Ã(àœðT¯Ï" ÅUÿ·T]°ºÞ­,Å�r„ôŨB=’}h+½íи´�â¦K¸Z<[Q¶¡·¦‹Ê‚äÚ2�L¯Ð˜J‡*hAN Ã/Â:þNw5Ê6”�ŒLë*‡¤Ðìë)Ho&j§®f#¹vIråbf£$¦w‘CR�Ö§Ô ûûаž,GÉc*±é-e«¸�#}EfSQçù�ÛQ¦„'!ûPFÒ7«1Òâ$_§Ÿâ̆zEXÉ',ÂNe:.”´‡åõä;QóÁ’b³©¨ìýï)ìâõ‘��(“�ù(—ƒy�¸e§ÙºÌax›Q”íL¥ÓqÝ+ŠqAYÍ%«"�Ÿ‹ÊëÖS–5•M¢fOþ…2> Ù‚2è�›2QT~\Ú »áb¦{,–3º‚ßñ 2P0Îcƒ«!o‹:š~»�EÍD�èÇoì!:üÙH�‡– $8_•Ôuåû·ŽG„�Éb”B’ðÓlN••K‚¼_6•¢2xet¸²…�lb/¢¤$Gȧ¢æûzìq¢5Ø„¢ì`*§Y´³¾´ 1I¡,µZßΛD%cY‹àê̆¢æ2QyhN.Uâù>ÉùõŠA¹`EŒ¬5'W°–s½"LYÅhñ.”b¦s;ûQÖ3Àzº³·È�´3JW´´�¨s¾¸$ €—P® ?B^AñèU}QRüúÎFQSᚢÊŠQŠ¼È‡˜èÜwv“Ã’ç¼(T%ßÔ•y²]¶zUˆBÖT¡W­œa³ê`� ^“o_Ñ�ó¸úñ+Ii—U°ž|f3ˆö<p4›3yšB‹Pj­)Ô3FÄ­UI±†‘I›”ÚÀfq6ý‹È¿û$ð�çß> ¤Ð1Ûy<®ð�<ÍÑ€~s…U [ÚÀH¡5÷Æ}úò" ÍÀQÏãËz 7‡!þ)¬"Ñ+Àˆ_Épêè¢ÔvÇÑò‘ªÓù•d뢢æÐ�iñ/£ÓfB±§E¿°�^žq-<{<‰áë#¿À¸ƒ–‹WT,â|¾â=”¹ˆÙÁPæ³�©_&k’ã,»‚BÃÐLpøZô01œõMÀ>6ZÆ”qÑÕ2O•tóX&Z+fàÆM2miÉ$Þä!šúµ°$¢hÛìÚãË‹pYUGT¥Ÿ/*Ïú J�ð"d…–9ìkPf”œ¢†Ì•�ÕQŽ‘8�l”•\TÖ)ó=²)B9J2ƒBÛ+bD%eYQçgþƒ—¡|^„ÌDiï?ÁzŠ9½ä¤uQÎe¢Îie:E¶ ìbtÙ¢VI±ìNmG+&°EÙÉTþRÊ0Œ•Å ¿É�ÖŽØžšOÈPz[ŽÞ€òF�Áö£¨Ü]êú¤£�TžGKΓɲhkç’į!9Ž&%g¦Ôu~ò�äZüÃP¦‡ !›½Üj9Á¦àIT³µì—óJË¡&$QŒ² ü‰«ÔN²O KÙ3C²%¿D„­‹•% ³EÍS,íÙ@>§†‹–¨ø¸˜F$XOIØiô'[ß÷ZØ‘Œ#ƒ»ÙÈå "³ìªÍ¦‹ifÜÞ{IHC²÷°Á«…%qöQ �æçèhiÏ3ÔæÞpè![Ù ´DI8ÉÖÒߤßÕ—u(}®ô²áñ‰9=¦/,‰ý(j¬¾Sç8G‹L&×f'9VáV³ 1ÈeUPÉ](ÏŸî¼i¦öÈE)bº_©-É2·‚^c¨Í ’)Bk¹XÐgJj°kó~ôd°Ù«†XËo¥dü.rip¬SÅh—#Ï«HåšW @ã6wj«lm¢q¿ÐÝRT—øC’N2Bæ¡¥ ¶ñ(O8Eö¡l›Vz¦/¤nu¬™ÇP‡¨¤r®ãÅê×Â|=q ʸp!äy”žAeuù•#x&‘Xƒ’Ídj‡š 1˜_#nÙagø¶¢ž¹�/2¦"™B”|0”Hš�Ín‹½T£ ¹ åêR„¬DqóóP\Ìð’"Z$žèg·ão�¨˜²DÔŒ¥%ãøEÙÍ;üŠ¢ügÖdB2è�–¸½X`™fú:ЛOˆ2â»*HˆSœ¯‰ú =ŸW8diÍÞªKª~9Ø�® ´ü:Âßù{ÉÏKi7§Ï˜ˆ·Ï¾ôÇMÁU5«ÿöب?&Ó³”¬>Ô¬¶L€ÉmOgåx~öÞÎb®õŸÔ‚a55Û×Cjã"- ¤_ÀDìÉö÷`Mï!ì {[�Ëbö%±°ôE×ÇuŸä:øÁÝ?î÷;µx¼Þ¹ûNM:ц<³äèÏß Nß;ÚKþ‚ÓyÕrÚ·5} µÊ^ö�ù´)Câ? *?™ ý:Ò;Þu&' )r.0cE%ÅR`xÃ�eNU>8ª�šLAk2^ €õÔfFY^ÄOãEÎr,2—dyV^e+ ®æªD;Ôc×'ä°? Ï>Éi±¿ÕÃPîdxÐÑÙCBƒâ;&¢|�Ò�9(†þ*Õa¦ˆúÿv~Õ¼r ’ùÊûß×Ràïk·¢lþdå9îêÉ:Q==„ Q$‘"¶nF°‚á<ê2ÃÍnËÏÃûµÒ-ñ¯D5ñ–x•}®oÚãèáêéUGˆáÿîƒßS9Ÿtòƒ£ f“¸#d³*Ëë*»â]}-22!¢#Г�)dÐÃgáÈ:P=‚¤ºzˆ•�ÁÌÃ7?q�~ì#‰ÄWZÝ’YG+û«áë!™ �èÀB¢¹–oŒDømør�Ã"+Ñk«ûDÈ’χô*ÕC>°üø¼gQe ñ9ë� ØÓ•Å´`óÌXíÚ£GÇȤ£_€ÅÏ÷lµ«¸š(憘Ñz P†Ûp æi¿—Ère0qgð¯€^F4óªK÷©.Bêà›Çîï}|+!°ˆ±4cqÉrLu3¹˜Y š»{ºÛ1F›‹Ó›ý>„üoïc®mMùÈ3-åHǼš«îú°Í2>Å7@€Òx JsñÊ·Ôñüp>/ꔿ�bNu~³ªN%ÔÞl§oîòôì"�ý“!d§,åh8õŸâI?¶ñc©â±Wfp>³ˆ¹WïágÇ�þ~Cq"3õ‚œ�*a«ûÆ�ñŒ;%ûÉZ_Öh~)MøÔÐðY%Šo�ø Iˆr KÄKÎÁLc·«ÿ%-ËÐØ›YÆàæ/URd åivO™KQGM·O„†Uéè×°æy_¥,ô"®b c>šMžè³-°°gQô?ù‘1æ='L\ rèÿ—5Ñ ÀÌ‘_VŸd¯Ú;>l§Ð+²rˆò?ëö;šº§GM~5á‡Ò…½²\ýÙae�BÊ}¢²îËFã× ”dë(»ÄŸÄÀŒ5‹KÔ²`4¥z¶zqTS¿<›CÀA\Vµ·ñeü_ìð ¿½Æ tanAuÏ/ÐÅ=·d:‹§¹ž/ ,µDíÕ®FÖBDv@yØÒ‹SXL@ìÉ= p—c`ÏŠ~—÷ó q¼ú .½ŸO4®Î»Þ)¨Ûx€_¸"(ôÍBˆ#XÚ©zé¨.B�Yä•Äž¤ è2æL¼´âÁ7n®g9WóDH ۭ׳œkœOy…=ôçPÐIB¸‚œÉ,!ŸLÒ¾ìh,$úûd8îHóCôg/Ï3$Ta߃F¿]ûßoÄ0<䢂’ÈÅ!`Ì+ÞN‘–"Ë7 ’tZÖÄ•B cÜ¿œ!ž º£|À…¡ ã²o:z˜»]Zú_¹‘ˆË½(¡˜íÚ)|zˆU`¹X dBýεæs†ñxÜ+'üE®f‘Ì/�ï‡æ´íúáƒùÎÓËnÓW͵—±<á�I‹%uÃMdµàÒ9àé!}'p]úeLáV‹¹�¦¤¥ˆà.äÃu#t MuqˆÅ ^‘U<ˆ�`d`Du7‘5‡w$ º"y7Z)Bà-ž  ö´zž!˜Üˆ&¼©OЩha©oßKˆ&‚±üA×aÖC�ù‹†8Øš«C,®Š_>ö0ïr³ˆ 6õ€¹‹µ\éIÿ°¾ÇyµgùVÕ¡?Åmòökf 4ävžå¡Òáß~Bbéö€sXÝÇ»ÖN8l'Nˆ2š/Èr9ÂZž`ýñÖmh½[YÊÀf¯”&$ç2êø¦mÝ™K¤Ddõä{rxžá5�¸œh>¹Dß#çè®–~çGå�"†’K'"0èŠÁ0v”ö,оŠŒÛœ÷â�T"3Bˆ¬|Æ4Þg'“ª"&ÞQ kž³³'@-w�eùge �³-cˆœ]´WV­l×iæ+!ÉÆvůö¸8;hù'À(¢y €ùl©i„DÐ�í_ìÓÅ42n‰_°Ú°ò„¦Ÿi\|ñnwoùq(FÓ‹iÊ7ƒÀÕ†•'dm€ª"ô´÷:÷Ô1Ç›ÙD1,‘Šx5¿¨S[Œ"�ËK+øg'$&žË9¼‘0Õ§ø¬6¬!,«t Kå­óPâÔQÔ׳µ÷…'r¤©XNÈ€â@¡•åÍîÕ…+«âUUj�æÔA¹¢váßz‹ÜcK?@dUNex�V¬#ƒl˜Ë%)}ZÂ,éÀ“FÊò¡Å±ÄЂ�ºZvTÐL£#¦å‚×yµéÌu5‡�¼EÐäL"Wå_}™/øÍºü³²"k £XI¹¼Ä�Ìårëö>Ä?å¯:ª¦‡ .ÙV¢Èh±Î*²ÅɧîÆÀ^â±¹—œÐ ¾å!by¹cK`]÷±îºQ×� q~ÀŽö�ÍsXícv;��¬Ž•ªFU�q!g³uª(ö4Úo\Õë0d·áŒ¬9�t?Ô{¤§Ã˜´ºMÀˆQ›)‘cÎ{·ŽcýÈ�¥.élUŠ–…£†Êª}’ê�FgüÊGj²[¾tÞüM}oÙhOã;Qþyµ·g®ÐSTtb…\|Øyµ%‰Ío)�²@ôËFÀ\rjªsñÆû¤D�™ÍÑKßÌß'É2Ȭe1 Ol iÌbNáæ†,Í` …$.·^Ö„‹ü¦ Û¸¡€Ù§x—VªÆyžnŒg|»'~�«½ñ ÛÊ|cë«ÿô["'BH³9“§){%îÊÀ ºU‘Îqµ2ônÝÀãerÈŠ0ƒ|_.ø(‘l#Ë9›v®$É�4­¥§g;Ç-k”aÇiy¼�2ë˜Õm(?Ó̾²VT9ÇyÖ‘8'‰¸s 7-í§Õ#²ª÷¦ˆ5£ehÓÜÆ**G¯_�F]{\µ=‡â *„ihÌÊ%‹D¥H¦—$äXÚ@ËžÀ-–œ�½©›Ã‚�ºìç�3wKÐ9ÿ’5÷):ñ�$…ÜÐ;Ê & ÄÂFÝÖ¢ ššœpYž•[zH´¸$˜„Àd”;޼ŠÒ Îz�”-*ê\ågk?„A³› l²§çHÙ»T»å¡”ÚJiY É“Í�3‰²C¶T!U=ò"9ü+À2ñ:×nƒgï` µ»¾`ì”2´Ìƒç3‹<°íX·K‹s®Ö÷ˆ­õŸæø‰ñÁ)öûî3Þ£S‹@u;“6뢓ØÞC¼A›€m€}НB~qüìøAµÚ÷°ž�$Û$)­{ëb!‘ åûòoe¶–“îÌÔÓ&§î£?;y®”Ïö¿ëCûŽdq ]8hY´¢€_,Bw”—�[P«?5í\I’ý!DXS6âæÆòo²ªŽ9YòDåÿÄB×�Ãäo¸'ŠšãÑü·¨y9Ÿ�=vñ>g2Øò=ú{ˆÕé½:~\^k3;@„Õa§ó(ï”3j24çgãQ7Ä]ÿµ¥è'®$‚ùlç혊:, Å�Œ“!èº*щâ€XÛ}lnò;Q‚�ÞÒ9N¾MÛ}FÊ›åŽç:—‹Jž9uyèíõ®ÃM&Þ;Цù3ž¦] j>Ãìêé!U…Þ¼ÏLæa.f£$øË¾¦€nDY΋îjN”‡^ KvN�Ü/½¥L—¨,pv8†¦·Òª|›½De¾ÿWSQ™[³ ¹— œ¼ãÝçó¯¸ý9Nà}”vŒB¹¡ÜZ&¡õ6/øT E%_ÈÐU‘ËO5gÉQÉ‘·Í¦ÎqrDT¾s^zL ÿm”…VO·¤‹»ÄF‘#²¦º©Š1¤Ó¸ŽMÀ6v±ø�eüÝ¿çGÉÌzy¾¬á<ÆÖì‹]éhgÜÃ/ $9gGñOÆÕDS—;ôŠŒ{~=/.ýX¦ ·±„{ <…¡ÿ²h~krlïݬöN”vö¯ ü;sxßò_@<ï�Å`öÂ¥{â’âÏqŸ¥O1%Û‹i4ŸuŠKªÐ Å"†ò=·–ì ¿˜ïžÚÉ?¬ÇÆD×\Búx—>GÓ×OˆÉ †Ðůgu,×ÛÛ•¹\ÉO–Ai]ƒFÀ¯QÅ×Íf3€m)´eñl*9Ìe¡;ÿã¹€¾qš$k*]™u†&‘ÉFžŠ½,îÁfmÌlNשE»e© ]yŒ–¥s±,ò$ÃÉ}�Ý:ÖlÕØCªݽZT×€‚H¶�K3`>Ê­A{{´®÷Pæ[7&^Rל,GE�ÂËÀŠÆÎѲZTTÊôôÇhÛ(k=ÓfæxÏä”YK ÏßOa‡;Qþ¼€òÊè ò'­ÉÆA çHÙ#*;œ#�µ qZWsªì=¦KB1© KêÊÙ·"$ã’¼p$$š=¤w¡¼€r[@é­(›KVÊy²BTrÍÉ+b*V}r„ÙW’¥@TŠe© -c GÉFK2ETÆ‚|‘ 5ÛuRŽõÍý @ùõ&¼ô ?Eì÷mX‘ÚJfˆ[Ü’œÚîxoñe#çhçrQQ9$ÓCfø�á+”Ç`YÉ–L³–óµÞêÈ GBp˜=tGIEã?Þ“lò�Чªí‡šd‡ü~¸%šG€¯én÷�“��_y€òlBN†dù€A—P)þlT-¢É÷O_ˆ‹®ö ©nü e0‰“Wþ¬Q“æÄ®¡gÓ’ÿð÷f)³QhN$õ8‹úö«°aÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6l„þÙúEý|IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Hexagonal.png0000664000175000017500000002274315212624223021152 0ustar lerouxleroux‰PNG  IHDRÈÈ­X®žbKGDÿÿÿ ½§“ pHYs  šœtIMEã  + $¼h IDATxÚí�y|EÚÇ¿Õ39 !WTPT'ÚyÙAå ¼ ìíõ‚/yÇk[½%=Z¼Oщh \öFïï XÜü3ŸùpÛùúU”u°‚賑ZÄ+Í]¨ÖØÇûû�ª®ªi¾fAë9À¯½}G\ôjçu¾ÙÍr¼à Y':ÄÛœRï¯NôHËÞc¸×K~¢ª«¢=èžûS œÞ…åØÑ(Öžh¿$ú줭Fê¢ÏA†·8w½÷Ý÷©Û­z�ö’êý}žö ±v”8G{ÿ>Øû{ˆW¡*½˜á!ÏM[ÆO£oÍYCt4îO^ð^<è¹S#�3ÖùBˆG¶«TBœ§ëúãÉðýJ;ä ZŸu¦eY?H)«»µû!ÄÌÖŽK)gJ Ý d·}J¥iZ— DJéõ]l¢Ì6Žç$KPiƒÂÂÂ<)e†­z¡ßéº~ŒBvWûض=YJ9^‘׊x?N–ß©))lçWçX–µ %%¥iùb¶�Ñû•”ò#Çqºå*>Çq¶m/Bì …~X-ºVK1Ô²¬ëU�žD¬\¹2«®®îJ!ÄÑRÊE¦iþw#„ÒÒÒ½ÂáðgBˆÆŒ³�Žã\4†qk7é1ŽfK)?�D"‹Æ�·©é\qqñMÓJ\×V¿ù曩©©ï_†qJ"÷´Ý^ –e¥kšv¹”rp·®ë¯·vCmÛ^oÆ-ZÓÓ€Q}ûö�>dÈ�Æ$í1~ Üäºîg©©©wŒ9²¬ mgÛ¶_�Rþ*%%eø¨Q£¶(+�(((Hsçr!Ä?¤”ßèº>Á0Œ¥íiít]ÁuÝg6nÜølaaa^2Ù§¤¤ä Û¶Ÿu]÷BŸÏw±iš³ÚG[†qš”ò©H$òõòåËUI–,Yâs炞={.*233�5 ãE!„»+ßgšæJŸÏw™ßï  þ&ÑíSTT4ضíç"‘È5RÊMÓ¼hÔ¨Qßïê÷�y‘HäOápØ)..N¸µôÝÆÅ’R Çq& !^èÛ·ïíq‹Zs!ZºjD·zÃ4ÍWÍ>¥¥¥{…B¡9Bˆ^®ëÎ «Û£ìÐ>EEEƒ|>ßr!ÄÓº®ÏR‰¯s2p©¢ ¾¾þÞ &ÔîÂwì°4áÕ@º®ë7%BpZXX˜çóù®ö�R.ïî¢�Ö>i={ö,•RÖ†ØÕ^[ ¤ãÌ€”òj!„íºî}¦iÖì†È~¶4ëM& !~—ššzɈ#êâtp"˜¥iÚ¡‘Hd~ X¾›�ÐNÛǶí'�QRÊá¦inT1Hç÷£mÛ~ËuÝcÂáðT]×îŽ8v!.yÉuÝ»Ÿugï8s¥zY–•/„Xêº~Â½†q–”òvà3˲†ª¤“ƒ¿q]÷)åjŸÏwû˜1cÊ;Pt;ÝB6k¥û !îî0 ãý.î1Ò5M»/¥¼«­áìN¶Ï(!Äߤ”W›¦ù„HŒ(..>XÓ´¹RÊê”””y»3êÒ‘ ÉïîÑ£Ç]@©išOw�0üš¦�+¥<x@×õ—cáûïª}Þ{ï½=êêêÞu]w™iš)�t EEEƒ}>ßÍBˆJàV]×ÿC·m—*@³Ï_ì¡ëúõ�œ.Y²Ä———wpðdFFÆÿ6,�ö±,Ë !Ò233GŲœÝB »;$Ùñ¾ã8`RCCÃe»2’¶3ìîpvWÚÇqœ{€ãÓÒÒŽþío»Aéí¤°°0϶í‡"‘ÈÝ>ŸïqÃ0þØâèÀàt™”rqZZÚÓEEEƒbPIOtç !Äþ 'éºþp"M�Ñuý/Bˆyõõõ«mÛ­z��ï‚s€YBˆ!®ë.èìQ—Žj!› ½�ßï@q¯®ëÁ(› ÌBØ>Ÿïþ®˜÷Ô‘ö)..>BÓ´eš¦Í3fÌ�J m°£¶‰\šün!ÄB)å§»:‚cYÖ0!Ä)åçÀm]ùL¡£íSXXØÇçó½+„XaÆYJ ÍX±bE�P(t™”rœ”raW #V ™ß}�뺆1cgƒw˲†jšv³”r�×p¬MFûH)5Çq^öÊÌÌ1lذ­ÝZ iI)'Ã!Éxˆ'’c¤”ç„B¡?�?¾jï;PJy£¢2/;vlÜìøKûض};pº”r¤išßvæïêŠ%·ã‰fUFtwÄóóó›¦Ù4VÿDffæ„xêë„àô-˲¾IIIytРA÷ÝwçóSF©%%%G"‘ÙRJWq£®ë_Ð�0 cºmÛ+�U¶m;DÓÎõÞB\«ëú§ISˆ¦OÞf�Ú &|ç8ΫW¯N�ׂ۶½>Ö×ÈÎξ–Vöð½ôÒKƒ–eÅõzŠÎ°�eY¶m۲ūª¨¨hp²¸X¯Í—±m!„�yyy•ñ<û5###§¶¶¶2–ר°aC®ëº¢á¬yíµ×®‰g�!–R^ÃïßGJy[çnÓuýêdp±²ÚÆDMMMF< ¤¾¾^„Ãá˜æ lM‘H¤—"7ν-–e”Röß�ÝbvÝÎÈ+ü”W㿤¤¤T×ÔÔìAÛ‰,“:mµ›>}ú´U«Vm·t·¦¦æ#]׎sëFÃ0bRFoHüÏ=OkEÿIOO߯Kîî¢®É kYVºã83ß’R~óå—_Þn~ï‰fÐ:†h2ž”îœ{üg !ÞB„]×ɶ)ñꤔ×�×’¥ ;vì�EEEóü�5kÖœÐØØxhCCƒ­iÚ½{÷>ióæÍouJinä0\|¾ÅG€Ùü4á1Ÿs�Û€o$²#…ñß¶RÊt]×› g3uêÔûÂáðÅ���ç¾òÊ+/OMç¶/ÑtsI. á8Τ`0x!°¤_¿~Ç5M™‘RXRRr‰ëº—†B¡á;OÄ€ÜÜÜ*€^½z5ÝèÏjjjNKKû²ªªjÙ€®è”‚¸œ Ì@p°/þ§™8²ˆG§¢qžè€ñ oȳ„odffNhmÈÁƒoÜwß}9øàƒËˆ&ÿ<Xèõ$ïM÷–”� ƒË„û»®{rËùdBWñ…”rK¬ÅÑ=ÈŽØTQQqDÿþýŸ\·nÝâ½öÚë·?þøã‰ezƒ|®àfþ�0wû7;;è œÀ>ÆÞý¸x¡y‹¸“D€YDÓX?¬¦’D¶¼É‰³¥”ÿLIIùÈ#6ÇC¹âmoÞpYYÙz÷îýþúõëoÏËË;dÆ cˆ&ÅŒ×ñ#7 ÿëãçsp)p ùÛäÜ•b0¼Da¹®;Ñ0ŒÝYúûÑÜ…ó<®óz–„¥ùÆt>Ÿï�¹ 4ÀæÍ›§¥¥ý«²²òo999kÂá𨚚šØ==Hòi š�¼i0¡ˆ¹ä“¿Ë®‚®iÚL)å{©©©Ù"®$: áoD…Î%ŽG[£¤¤ä H$’Tù|¾‹u]ÿ>Ë·»»744,KMM-‰D"õë×ï”òòò‚X^ØB>S€_Cí�̽©ÚùRÊÕRʳb4Ãv0xÄsµ&?$@�±Ÿ”rN$q¥”7†ñ¯x.o¼§?ø÷–-[ÉÎÎ~{Ó¦M¯8ð†µk×Þ£k¥xöXŒÆiÌ¡¬�Â8ÜçóÍö*éņaĺ²Ö]Nû™7˜°’hrÓ÷âñFZ–µ‡â×u3€¦i~–=]"äÙ\UUuTnnîck×®Í0`ÀëÖ­û=ÐÑ“S½ w7s(iÇ�?@q“¢ÒuÝ«:y¶©ôb�O½ø$\ü5Ž\©Üp8ÌËË›ºaÆvëK#Ì63›2§Íwi–e-BÌ�SWaч‰wÞõ‚÷N „ǹ Ùì€ ‰°÷nÒ ÄãëšššÃ²²²Þ,//nÀ€G®[·îª]ú¦›Ø��e­�Z5¹ Dó²&@‹öz�ψW/Nb²l¹Ùþ[¹@}²-vKä$žÕÕÕGgggß½nݺéüåÚ³×>H £�‰®ÈsÙ~ÍK‚$PJ„ã½÷l³SJÓ Û&W8'ÖÆ·ƒ‡�/€—�7èà‡Š-g•º®?I’‘èYn#UUU—ôìÙsõ�?þxOî²Ü¡Ã+¦³rß1¥• 5Ÿ�H ¢#V÷"xˆúÓHü´.¾±±ñ$àÁ&WÁ¶íD´O p´¼/.vk¯,˲ƃÁ«„V}}ýI&L¨µmûF’�¤H½uëÖûý~ÿ§[Wo]–õuÖ£@ ººú›VßœÏZ¢³cŸ&Ÿ¾HfÓÈóC²†L¾ß¹R3z|2øÐÀO$Oç�èx*Ðî� ›Ïˆ§ùRJ ;¼—„ÃáÃ}>_q8^¾Ï>ûœ÷ý÷ßï¸ËÏg£”rÚq÷з5ß~Ýà6\; ÿ€c“0!ç¢çz¯UÞÿWí̇›ïš¯iÚÙñ6_J ¤­åÖ­[ÍÎÎ^úÃ?üuÀ€G­[·î2`°ð9ðß­JmÛž /¼æ×,ëŒÍ9&xLsiLÒ{-�|¢#Z�{î×ùÀ«@€èL‚ ¼Y�q°¦is#‘Hµ¦i�1;@ ¤3Z˪ªª±™™™w¬[·î2ŸÏwN$éÙìüKÏ<óÌÿ0à/^æ©“MÓ¬!Ÿ�½ÑŸç’üž?|éÅ%O�‘д›L˜^RRò�H$r Pïºî �@àKº)þ$ý]‘šššË…ÇG"‘–[ÂLzì±Çö¼ùæ›OÚÆ‡NåSùE7¹ïÝ]æ£fâÀëEî.--ýÝQGuU"m žTLš4éb@:ô©^&›Vö˜jó%�d´ãýÉýÊo¯±;c_¬&JJJÆY–µª3®åObÖµ°ý† ~¿¿¬wïÞ¥­~ª�íŽ8âˆã?øàƒtFÁûõëwHFFÆ/6nܸ¢¦¦&&¯¾¾>¯ººzd§7©f<ùÒ@tìÿ¦ÇÃáðÔ²²²·Ûóe3gÎ\oÆï;£àþóŸohhh˜#„¸eþüù±Z£yAùˆÇ¿žQÒøÉHÉÌÍDç$5-îÿ„è¾®o«[�  ÜGt¢Ï‡F›•yº‡@ :©É�ºÁk5Q¶]{ßÔ`\ü¨ÌÒ½¢P(�(J …ˆB¡¢P(�(J …ˆB¡¢P(”@ %…B D¡PQ(”@ %…B D¡PQ(”@ …ˆB¡¢P(�(J …ˆB¡¢P(�( MgìÍ;èëý{=°N™]¡Í‹wÑDö'¿Æ(³+º»‹u`Mïu p5ÑÜxõÀ{ÊìŠî,�¾À“À;À¼fÇ—MK Pt[�\ä‰äÖÇ뀔ÉÝ] §[�be^…ÈöüøV¹R %�Ö©%š²%‡)s+”@ÀNzC€g�;�terE"‹ç Ó€\¢ùî|Àààn¢‰êŠn-�µDe¦ML_«Ì¬PÙžFï¥P¨D¡PQ(”@ …ˆB¡¢P(�(J …ˆB¡¢P(�(J …ˆB¡¢P(”@ %…B D¡èüÊ;¦¸¸x¬¦ió„ýlÛþxª¬¬lá”)S"Ê:`ÛöÅÀtÏ>ï!éºþŠêAº‡8FjšV —RjD·4º¥_¿~w)ë€eYW÷û{öù­”òeÇq¦¨¤;øŸšvѵõÛ „¸¨´´´@Ó´˜¬·_±bÅ ††öÞ{ïÃV¬XÑê5Âá°_J™Ñ×;í´Óö\¿~=�>úè±x`ÍNU¿_„Ãák¥lm‡'fK”@’ŸÜ6Žû"‘ÈMáp8&kî³³³nܸ‘ÜÜÜsOŽõ�8pàAëׯ§OŸ>Ó¤”á�ùL(Èi휔2Wõ Éï>¤ÝO¸5>ÖuýˆX]{îܹ7s>ùä“égœqFA'üÜ—�SO9å” Àæ�µ�â}àÐVN/W1Hò Ãï8ÎBˆ)å³Àb¶Ý)òsàÇqºež“‚‚‚4Çq.B<çºn>PØÒ„RÊcKJJÎTI"–,YâsçMÓl€ÌÌÌ ¦i¾`Æ•RÊ}\×�$„©ëú¡RÊS€Ç9»»5/¸®»Ú0ŒS�ÀˆaŒw]w(pªëº‡†‰D"smÛNøÁŒnïbI)…ã8“„Kúöí2dÈ6±…išk‰nˆ÷߸Úqœ ,˺Í0ŒB7Y޼¼¼ó¤”§H)×uýÔ–¿5|L4‹X“½6J) ƒoض]¢ëºž¨öéÖ=ˆmÛ“ƒÁ %„Ø¿¾¾~¢®ë·ÇŽÐuýa!Ä›Žã<õöÛog'Yá9ŽsVÿþý_‘RVèº~¼a/îlEB¸º®¼oÛöš•+Wæ)�$ŽãlÛ^&„Øßçó�¨ëú &ìÒ�­aoK)禤¤<ì8Î~ÉУڶ=Ùqœ¿y®æ¤ö£û\ Ì®¯¯ÿ( W‰c�À!¶m¿åºî1ápxª®ë G�µew¿×4ͯý~ÿùRÊ9–e‰jŸGyd¢ã8BˆÜ~ýúMÖuýÉaÆ…:À>OK)Ç»®ûªeY*�ÄYYYYƒ>"%%eªiš³Æ�·©#¯1jÔ¨-eeeç !¶mÿ)‘ìÓ¯_¿þiii9[·n=¹½®æNŠä³P(ôKà Û¶Q‰Š‹‹¶mûÙ=÷Üs�×B>5räȲX]oÊ”)Ã0æH)}Žã,Z²d‰/Îc0Ó¶í¿geeåœuÖYýÝï~³Ì`ãÇ�¯2 ã!DÛ¶ß[½zuªH`YÖ¶m?çóù®�R^ûå—_~Ú™×7MóÑH$òjÿþý�Çà= ·mûE!Äp)åÖ¬YóUg][!u]Ÿèºîëåååÿ*--Ý+žëRR ó Ð4m¶¢—¦i7�3æó.Œw–;Žó½ß器¸xn ø2zÔ#4M»6‰|š––váˆ#6w¡}n,))ù0 ýÓ¶í3 ð”@b×"îéºn¾”2CÓ´…º®åÒuý˲Î×4í.Û¶ŸîªJ`YÖP!Ä5Bˆo\×½Ð4Í�ñ`ŸÑ£G/ug´”²Ø¶íņaÜ¡Ò�”””ä†Ãá™®ëÌ7Mó�x+£iš5RÊómÛ¾ÎqœCt]¿¯3c0MÓ®Ö¦¤¤ü%–ñ×n4"ÿ^µjÕÁµµµï8Ž3\×õÓ•@v“·ß~;Ûï÷_‰Dæ†1+žË+„�ÀÍ–e�nYÖ�½zõºº#†Owƒ !æåBˆët]ÿ!ží3lذ­Àá¶m?eÛöƒ ¹ß~ûÕ« ½�¬Zµª§ã83SRR^ Ã8Þ4ÍÒD)¿išÏÏ×ÔÔŸï~˲n4Mó_»û�¥¥¥{…ÃáëÃáp*pkG|gŠd¾eYï !VƒÁóÆŒó%�¶…á×4í\)åiRÊu]?&&Ž;v�eYçj𶍏¸øÕ@ P´‹öÙÈ…B™RÊù�@`u2 º˜¦YXZZ:<Ç9T×õ…ÊÅjFÓÔs!Ä[@}ffæ±»3(N+Aý˜1c.óù|C-˺´=Ÿ]¾|y˲îBÌ×4í>Ó4§&‹8š5jÔ÷eee¹®{¢mÛK¥”¢Û÷ MSÏ�‹€úõëwlGOyˆÃàýv˲&9޳8##cÆŽ‚w/n™ …öî6 c%IÌ”)S�Q¶mÿÕqœ�W¯^=bÈ�!5�z�ºàwߣG�»ëêêöOII© …B³�{lÛžì­ÉXZ__ÿè®Î®mƒ×�ã�ßq¹%Mqqñᚦ]U\\üu(š&¥Ì>—R^5nܸ~¿š¦i‡F"‘Å�@ £—´¾ œ ôa'—Üv�»}‘âzÀñîePàóù®=zôWÉ"�〥À6s”&Nœøõ•W^ù¨ëº÷™¦‹"î0gΜ;§µìX;ì°{íµ×¬ިŽ@<ïâŸÀЧ*¥”¿4Ms}2Äôíü<¿?_LbŒ'žxâØõë×ï3vìØ·�<òÈÿÄið !ÎRZ±Ïª@ pQ¬®}ê©§ÞZYYX¸paàÈ#�¬ŽGûhšö+àñ6\Õ|]×oH†$«µƒápØïºî$ŸÏ“¡Ûž={fdffކÅkHÒš8|>ß>BˆÉ±ºp^^ÞÀÊÊJ 4QQ§öÙo�Kïdq±®nj¥…܇÷¦ímv’ÚÅjÎ^¹rå-}[©¯.\¸ð”!®],)¥ƒgJ)aû�ü¤ëºf pbÒsuòo½x p›u�ÿq]7777÷ !×-ï*͆³—I)+êêê~ 4�3$P#„8yÖ¬Yåççw»M6lÛ>Ñqœ7€=#‘Èql»yÆVàŠX‰£+z�&ö*€ÒÓÓu Àï÷G\×»uëÖ÷“¹‘RjÁ`p*0X’‘‘ñ\óáÝ3füRÓ´®ëþàóù6J)_ !Ä›iii§çççW&{bY–!„˜)„°}>ßýMK£-Ëòû|¾ßD"‘¬ÔÔÔOb=SÄQc1833ÓillÌËÉÉ9§¬¬ì™dH³ç<ç !^îÛ·ï;óœ'???µ¾¾þà\àßBˆ“æÏŸÿ¯dˆ·f%_J¹¸­«§æÇ“@zåææTVVŽêÛ·ï]åååÓØvWĈmÛ“=addd<âÍ`m³fͺ¸OQ-„˜2oÞ¼¢dH0ü•·¦§LÓ´[âe’e¼ À—��}wUUÕÅýúõ³ÊËËOð|Í„ˆmÛ' !‚õõõ÷îîЙ3gNžBd !¦ÏŸ?ÿîDHQQÑ`ŸÏw³¢ÒuÝ…¦i~O•1@ffæÅuuu÷ôêÕkmeeå(à‡DˆmÛ¦b:PÒÑ@¯¾úê}>ßR/Ž{xóæÍ—>üðáDHiié^¡PhŽ¢—ëºóâu.YÜ Àï÷�ôûýoø|>áºîغººwã] Á`p¸ëº3¥”Ÿ¦¥¥Ý«ußÓ¦Më�ššºD1(Bü~þüùåñ.�åË—÷…B×ûzÂx7žë`\ Äc`vvv°¶¶vŸœœœ‹7nÜøp< Ä .çJ)?ï¬à2??ß___;pðµëº'Ýzë­_Ä£@šV�jšv¨ëº e¡[" 3;;ûµêêê@ÿþýÙ°aÃE4{–Ò•ñ6D¸Nñµßï_Üë¾½àý^ ^ñ‡ùóç¿/Y±bE�P(p†fdIDATt™”r¬”òVÓ4 I D"•5''gQUUÕôÞ½{¿»iÓ¦c€ê®ˆ·!Â\!D0¯«G]fÍš5ŽhÚ³,ຠ,ìJ�¤edd\!¥<¸[×õ—q¨ˆÃòœ Œ÷nÖÀ³À`%`¥§§O ‡ÃOôêÕkCEEÅHàÛΈã8J)oBTÅۨˬY³þüx4==ý’üüüÆÎH³t §èºþr"/t‹'�ô^öñ|êÑ<æ�RÊ© .|­#bÛ¶ ÌBØ1\ì¦B4dØhîWmå»YYYù[¶l™Ý·oßËËË@Õ® ¤°°0Ïçó]ã•åNÓ4zÝ÷5×\3RJù иqÁ‚ù»+˲† !æH)?�D"‹::•„ȶøˆ®ùÑ'ÃÍy88ødG_’ššzš”ò©=zTUWW�¾l�@š6DBâºî¬ûîÊždà5¢)›Ÿkhh8oñâÅuíHqqñá>Ÿï)å/[K’Ùø?¢ë F7;~¤7rUéÅ;3DxxÏž=‹¤”™ééé§TTT,û9�4{€5Ì{€U˜Œ7:???³¾¾þi`"ðN$9uÑ¢EëwF ÞV¦7 !*Ãáð‚±cÇ~G7!Ò¨¾~áÛxlF]rYÛÂk�¾999ÅÕÕÕ‡öéÓçúòòòDÛÿÖ»¢Û˜ÖÖÖþEJðZÃÂîp¿gÍš5˜ ¬&.X°à+àMàhà`MË /�Ä-]™N¢»Ç o}öq;°øp°hîð\­ÿvf)-;;ûÙªªªS5M«q]7³éDJJÊ3K—.ý<==ÝîÑuýõDÝÆt7\®3€Ç¾øâ méÒ¥¸®›æ�j..,,ü‡ßï¿QÑGJ¹Ð0Œ÷Qt)}�û‰õÞ äzÇÏÞîÚ»Ù³BüŸçšmó:ꨣž”RvëØ'žxâÉš¦mg!„ûÀØŽãŒPÕ2±¦š´—l»~ù§QŸ/”žž^Õ•…“RºtÌb°]" õ …B½Z;§iÚ ×u)y$Y ¶lñ\†´Vº–ÚÔÔÔï»´eÂçóùº¬«¯¯ÏjK ®ënTÒè,hÅŪF*Ó�|ØŠ}¾2•yº� 9�è¼®5À2à¨..Ó`à¯L+‰Î8(!:z×™ä}fô5ðÑŠ E—0žè�ö=@ïØù^˽‰$Ï[¯Pìˆ}=q¼Ä¶ƒ#‡zù›2‘¢;óÑU�-§Óœè äre"Ew%Ëø°•swzù•2“¢»2ÂÁ£-Žg€r’û™T¢‚ÂΡ¿÷·åžº7yçVÐ… J ]ÍïoóÓ€š¶ê9‹è´…¢Û5Dÿ$ºÚq Ñb·{zùœèó�;HîÙ ‡ò{;�à8‚èŒæbe&…B¡P( …B¡P( …B¡P( Egðÿ£Í,|¡ ]…IEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Tetragonal-I.png0000664000175000017500000001246015212624223021525 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  ,+‚oÁIDATxÚí�y`SUÚÆ'I÷–Š€"#ˆ3€Ã(ˆ”Ú4…O, ‚l‚´P–Q”åsÿ@TG„ ¢²‹"([i’RTF”‘ë R–‘­tKî™?Ò%m“´iÓ$rïÓz—Üóžóœ÷}Ï9ïY@ƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hÐà ÂOéé‹`=_I¾#HÅÄÞ![�´ÏB"‘(<ò„‘Q"‘�ÑêÓ�Ž,ûßÎü+à¹Æâ²ÿ/Ñ‚ ÁCˆÁi$;ý¯ç« ÓÞ:“Ùò!y®öñSÀs݉¶NWP®çJ‰Å–ºËÄ�D·R\*QÐ43üŠ»ùÕ‘}Ó™õú`¨ÏÜkt\äzu6¯#ø…á… ä†)Á ŽeK†\&Û�D\¥óS:ùä“òúEvÎÊnèLïnN²þë¶Œ=€d†: q´0g 6†_x%à™‰^¬�ÛÏ“AonS-!œS–üÊöA–ä@fY ‘Jža3s€'ÕKÊË¢p­,\d ÿèAkÖ)�™ÏX¡¬.BÈ•o�;ÚˆÖJ‘"Ý.KÆ)^B$:~ÆqŽp#�m{nŒ�,ù–ÃR˜›Z¤e ø4S£†8ÆÍNðÎY}F˜}q€†&FÎ[BÚ%HHæÆ$µš,€Ù/¿b¿Ûü@@rœJ‘î=ˆ� Ud59`XB,ìáF|È/òYk«zuè­HÄjü¡š×¾a&âÔK¼?M�S‰”KêÙ¡ëdºó�˜Ê­¬R�ij&d_rŸé{2I¶ö­·º�T.Älr¾ç‡d±—>tP/!0 ˜®˜B¹Ø\O£Iò^š‰w;_©ÑËó�Ô‘À²…¿Óÿ®0Ð’§ë)“i ¤W¼WìZC`+ß2”Öê%D2ÁôÐYS²n­ƒÕ”d¾4}]ñn‘«V–Cžy虬^Bà¾ep\Kù(e‰õ ‘^ùn#×N` ÇÅ ê%Daz¦™¶ó!ñY#|¬€B¦’¯¬óâ'v^!œ ê%ÖðÑïø\– Ì�}j°’hÃZÓùÊ÷‹Üù€tN1�!D©kè¤Í ÅÀ‡£ö­Ú@#ñb};t€BO„t¥‘¬á$½¹jñ/Žº%ê`Ù•‡-vK7_%šÑÈ’oùÞ•¯0‡[¤e›ËÅr¾LžûCPu'Ëþy8âN]Á6‘!_|zlÛ–á' Žºð =uwq©ë]ü¨¥Ó–0`±Ú4¤WY} Æ¿©W«†¸÷ _’çä>GŽÊê·�pk׿Ô5ÉW;·ÞYôÑ€Q.ÝDèÓ§ŠÍýT}Ò»ûö�á4¸s•âG·� 8êc7ÛÆ[Ášf‘–õuOÒ²Ì"­w»~¶?Ä"-;«ÞÏìn9=¾\?žWg³÷ ù:­š©k¼>;&ámae`æ½ulðF3˜çîvýô’ËV–u”.“Ø#éB6º«•È _Ï5¼J;ÛR!•ñë^«ã¢…!İ|�ÝõÃ3U†N¤0?/Ó¹,{™V²ŸcØøL­CLjèib/CÍ£MßÊE´uŠÞ‰4ÃÊš¾½#ʺI<ÇJœÉÈb2B:3”³b±õÏ1Ïò#ÓÍ·ÔÚ`uàN¶Ç»]?°ÂXVv³p+ýØ%ïH:ØbBJ`ü7#•ë SÕ½YëÁÆÑÀòê*@ y�l_ÈÛy+úÞªC,ê:©P@‰Û˜K›�eÆMl•FËàÚ$u(T #7zk�té±—fbzâ¸ò9)%òh&«DKž!ƒ�–Çìãɯ˜¯ñþcgÐX®¬PÀ•k‡„ÖibvÙÏ8/8Š!( Šm8¿°@ߌÙ4ÿ_+‡Õ;t½u¥œKŽÒÍ´5XŠ!è|HÉHS®|ku+8Ì£Ywx÷kk+iVÓ÷ÕV�[Áç¶nI‡‚'çA©!& /ÐR.Ó=ŒP–x·CŠ’VyÒ�ËV˜ V® íÑ37˜ªbÐÆÙ.ïUºò>�¯ëEƒ× R¹ý�§w2{‰l ?%�Ë÷ �f²*ø%t9¼(6ð+s³j—É4—ïyšôc«ÛJ˜Ná'!ƒ-×A¬!÷9E.óh ¼äMD—î^¬‹åRÎ� e0Và&L_ȧh*{É} ·&ÕÈ`5%™ýÆ®ŸfLjÍr< w&~‰B#Äk$.àCLº¯±Ë¿~Vƒ5Šw}wkÛ>zó©!>þ'@zÐ:†®ûòBÊQ—cÄVnެvó3)I>k]:òîúÏù‹Œ}â/²Èƒ…QÓ¡“*fë¼ÒŸBÇ)žÞó{ωd™hÃ:W#RŽH‡™8Q(^ æh&Ë’¾OÒ„KDØ«Y´ Ó ªÁªép.p͇ÔFCŒKx�¶ç‹‡e™æk¸Ÿ#‰{+Þué�Á§¿B@>ÌaZQÄkî-ˆDÈåûž"Z+«0]–ƒÈ— -tîwHEQèª :ã)Ò!¥FHí5LߊÇD8<žù'—­¨®ü‰ÍÝO;Ñá:Ò`£tÕÆ·YI¸4è].Z¨8‹·F‘­RgÖæk�ݳFV~²#ŠÁüûl†ãêÓ°D:´VV]5Lb—�ʬ&Ÿ„¡�HwLúÉh¹³‘mè¤î„€ñ1!b+6Ê4ÛJsÃ~jéÐ|ˆ/ã:ñ&ÈTs¢S?ütcG�G¤ƒßÉÄ7½ í÷ÈBšçÍv\ •ÃÈ ÙVé0®®qŠ!¾ z䈑Àäìö§ûÓD¬)ÚXéð»Îª¶Ù[ŽÄ5l—:ÛöŒFYMDȾN‘ŽšV� ô!†ß¦†D÷Í;'o4œU¤ÂÆïYdœ$/SÔ4Äw„„ã4 ÆVˆth&Ëÿ°'Kç-ô/×¢ ¨šák ©´`ùŸ¢E ½#DVpßòoµ2’ªîúÔÅš;ñšÓ�¥^ÖwМº':‘ŽlŽQ,„}�×{¤¨¾§.|ScË# óhG¾ì,žÑ\¼ãePköú¢xœ#ÖDÚÊõ¦óÊqPHzgMõaÑ|HM4¤b¤£ô4“MyD‘œe¹K3Y~$¤b¤Ã|�¸Ÿ³LÙÊ**ëÍM5“å'/S9Ò!"’²I?ö)œÅ4«½XÜ£iHíë«‹HÇ(Šå»¥Ï{žOÎ LMžñ‰ÉÒ|ˆû[¾¦£<Ò‘u�Øl:UþVÂr>çFyJ<ãnÃÍdùÄdUXÓQ¥Ê,^¡ˆq‹b å»»›k&«žLV¥5%ØÅNœÙUñ]ã?ÄZˆL®Óo¨ÁZ+Ë{“UeMG ÂÓ@¦WÝéGÿ,'dO>¦Û¥™>ô!z’ÇþØï:¨M–Ë5ŽÒJCQVTý@ü%9‰0Åa1ÕÜÏG>äwü�DþÉË TÓЉ¬<@ârM‡ÃÉßB7vöÈqõÓFñ‰èÁròÅÛÕžIR“ÆV>áYÌ,òÇvAj²<ï^%Æ"Üo `›H>Oʉ4”ë<®J¬™y�›˜À+P©Éò¼{Õ¡P†s6‹»�ô8ÆšêÚ³‚.‘/ÕÚd•>í…™‹ªneU·{ÕÙûiŠޅî?ÕdßËÇôKùš ÖëhDÛó½?‹!èB¸Õ¬é dHq…§Oµ/Rþ‚ξØ0„‹r©Û]éjf²ŠKdmBwÕu õºê×t˜o¢{Œ‡=)ÉÊZºØ�b ÑbýþÈ:´²61‚Ç™Ævìª3Y&V¿{•…N¤Wÿ9Û$Î˹ oÐñò«uhe½ÈD~G>wó…ªi �MÕ­é�:R¸µ¡úïõÌ•Ïаè¥+“ÅWŒ±¦Ôºc(y—I,✪œº¹Ã“áLvuk:ÌÉ´duÍŽ÷J|Cì#"ãl8'—d¶×†NjŒÌ^";¬!,^XÝšÝh×§�¸´GŠýQ^�=)S‰ÔmÊŽ©eO]m„8"ߥZ¯™q=÷r0髚~9é+–òǼɦ­r!7ÛÞª•¹Š qu¬JY¤#kõ¤IK½I2|'å³ÖVL'›!Ö±µð!jÒ�*‘�„H!F‘¯_ãM w^S‰”KL69”3òµ¬Û4“å•w¯ªî}‹‘¶l¸ëWïR1¾/v“lík:¡ %DY·+V3Y®¹«Ý«<�(™ôã5JŽuMÚ-æÐ&dUÙt:­•åäÈ]G:<ЮXúóÏ„=Þ§eüAÎwëšð»è›5¡F&K=>ÄíîUaxˆHÒk·‹hØ‹Žc]…b{ˆ“òekœf²Êàq÷*áÑ`ÙtïÖ.͸|åDZ®=s•r­¹±f²í*Ïçt¸- K:‰Í µ>&,i›ˆ·¤@’U‹ƒ9qzg]„0�ÏÓHÌ!åDŠEw ‘Ëͳ‚KCüaEûã´ûŒ÷ï>áê¥7:m蕲%õ;—Bv¤·ÜKv:] Mx_þ,ºP¾)s‘î&—¦ðî&Æÿ„øc�z[ç‹‚a®ë@K eÑÇmÍé^׈]IºÃ+¥joÇ/.56 .ß„s¾8>CîwõÒÞÞLÊš“”Yõ‰ÒBŸÎWr†O Âd’å›"–¡NV;'¸¼Hý#Âé4è}n½Ö$Ã\¶°X¤ÅGSÔ>»ÖrÚrÑÜÙrÙ"Kþ6¹yu#—®V§žO2«¹D1°Å»úx(”‡8{åc߈÷1�1MÜÅ~$ˆ“†56{f èˆÂ$�ÍLVûl?šˆ•ž&ýx‡„XxÀÞ,±‹!–í²™½£z;†Gøˆ®½kóU?éÇK/Rr¬ëgñ—˜ n�çVÅXÖ,$3¼Ñk z��ð�/…H:$^£uÑ HÜ#öʾæê:9Ànzq{Ík¤�¾n=tWˆzŽ™f¾”¹1U½„À\·FÂ…†H©\,Úàk!:_a²ãX×ÄO8ÀPóMê%d7Ÿ3€›kæC²î¡¥XÝ+Ï÷b$~Èi´RÌÇ ›¢^BàeôcëÔ%VyìçÒyÄAÌ'™ßÚ+ÌB1ǘ#ð'Oн‚ìa=w0Àq ‚…üˆ_Û+¼‚b¦îŽ'+P5~º„ÿò"Iö ò›èM_#rÀÓ†§mÄ©ã#ð{½¯V6-ä"S̸† gº?ýø¹nAœZA YÆ-¹lT5xÉ^A �ƒŒ¢‹Ž¦+¢ ²‘] ×c�‚˜�‡É:š.»<‡ÔÔ#2±‚¾Žò_ùT급º¯¡Où6F±ç å´³ÕC @6‰:âvY´�æÒȬ›º×‹£Q=9ªãœô6ð)ߦ(ñ %´°ÕC Šy4âE·›==‡@ hÂ8{=’8A)©îš³ÚãSþÍQ75á,g¹ÁV�r�ÌïÜmtøå…a-¥,¦¿´×C  …ÑÚÕªÔñ)ßÖXe<8I'[=àM9ÅV÷ž´u¢�²jhJ1m)àSºÆ³‡޹íŸá—θ—K|Ê¡!_‡íùÖí\bÂ}ät‡¿·äoxÝiv¥*îõJZ:�Ãß[3´DZ¯¿‡ Œx}ƼÏTû<ä�ˆ·˜²Þ�fçn,ûêåh5yGüÚacÉ Ÿ�{iêZ©òcSnØž5=ôê¢ (D±ÂÍòÐWéÛsì9–sx�†v޲j½ÄÕ»‡¾Š˜‚l¡Ìæ:D†#7%½r÷•ëHÙ-ÈÕ�ë‚8ÎUìAÜmQ‰‡HÈA¾« ² Ë!â!’C$dIÈ2Lìöó„cž`²$dI"‚ˆ ²ÌÄAD�ø©CL+ eØ«¡t”�e’CdØ+‚ˆ‡Ä‘ rqQB–"uˆ""!«žj–ßÂu <<²$d‰ õ,©7A®�fŒ¤ çØÊ'â!úCV/>§„<ÉÝñå!õ³¹‘ud±˜Á^ Yúy–$rxO’º !«[¨�Q– R#IG¤R7©R/-8Þ�ÇâiØ›J2Šœ3¥û¨]õ ªÑÎÄ^UWÙñOä i<?2šã4§ 1#dù_¨Î§½Ó¬ä+ÚUN�\úò%yô¡ ^<¤#¹¡)*Rø�8£[ß½jQèT¼U­VΕWTÿäú—ƒî 2$bÆ�ä©…EÝi oðǵ÷ºŸ·º{og—9VܤÎ.Åû8m§ í¹­ø ]éu7EDíd,#�@xº£rÚÇØk<Ê­e‹ýOøTøóŸ �¢î´–Ë�¤¾ŸLj£ô ŽëOê÷­fUèkÐyfP…Ig¯;£¬ô “5p…ù°\ÄQ}F9�:9”Pìñš1 ×A"Ç(¦YŒ­¿A1Â]ƒü3|Êk’ówâ7dÕRÅBR®8«ºËãšÊŠT¦7ɤ³ÖÝK'K9Ë$š˜",b)mœ1&…,w)åMZðœþJ½–êù”1eµÇV�E”09êÔ’ZéÚYNçÖÃÌñ·9ÏŸiÏHS^§ZM�2 �5O�Ì£’iQÚÕ$HŸòÈð °5dÁ VÐ5ÊU_]BÂTÂT{�,Q–8Õ&È}_8TŸ­÷˜²ÜºAÕ�çQ>`kyœ¾—¬‚ MÎrN˜r…{5qÇDÒx E'à'ùà’}žEñŒ.}ú‚þuþ•Ç…x Y=Èæ)ò�cœà(°›Í\²2‡Ö‹y÷¿Ïg<¹¥³Iýþ @ýÂxù˜¡uVœRZ=•�Ç3ÉAÚq:ä)ÍÙQ�%ÔYNR³ gòÈçùÛÚ²ÎÓ¸Ÿt Ÿ¡¡‹‹ïñ%cè`Š #Î\’ÔeLÁc†‡@ßoXIšÿa{9Ír:3ÌA 8‡ 3Ãæ‰²©fºI ßAÖ©Ÿ¦¦Ú+ÈòÈ cæqf¡:vÃbîDQ�b/·aOÊ#ÉŠ o¸½¼½)ä…_W8IKíÖxx?lÏ·cˆ Aâ6Düú;ïj¶'�W#~=ÆZÛüc`ø|4ñ3Ý݃aÂÔ‡F†Ux5Û“Nä]‘|sHnø|<„þû ìÛ³‡Æ6 âaù!7òeÌï@¦0‡ï?`½‘åSÂÊïi�À8TÌ×Jëñ¶:BCÇ|­TÑRbzëwâM�ÞøÈ&VP`Š ´åf:p3yÀíú!žê�ŽŸ¡Hb&°� ñ)$ €Æ\ALÈ ïR8tc·ÔºI¢œ§CÂH—¢›{P ñóf}í„'ŽIGzÒ–WÙÍ$‚r†ê&•DRèNS9‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ XÄÿŠF¨dÇ÷ûºIEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Orthorhombic-I.png0000664000175000017500000001171615212624223022067 0ustar lerouxleroux‰PNG  IHDRÈÈQfbKGDÿ‡�Ì¿ pHYs  šœtIMEã  ,8nÑÞ_IDATxÚí�y|EÚǿՓ  +—àë²Ê®UTDÈÌpˆ *èK‘Ëp¬Êº ( ûÁ%*ê²ÝeYHº;Ø#ÈáË‹ŽEäX\ @H2Sï™™Ì$3É&“1]_þILU÷¯Ÿç©ª§« …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( EİE©œFô§=‡È�™+¿�¡´ã ç­(ûÜG"9Gß©Ñ$ÉìÖ“£žË—äQ?jÔÏWÉaâcéfÅE¡Œ~—\‡o8[íWÝÈïïkéÄ–ØD«Aq*|dÀ–Ûj.«n¯ƒÐäÀŽ1P£ž~.ë` >0Uί$ívk¥VýºýsQ,G>¿²fóº-§8Iû3²ÍÔê®LºÍØ3ã™É²ái\´±j�g?ß’†löœq4ó®ê­Š1ØÈÒ›òÉ»±u›¢ë>fRôÝ(÷SÚò ªõª'3Ë%¡ÏQ¶1”æÖd+hÕ=‘Oâ—IQ]—œy/šý¯WH‚9Ä3Þª‚à5ܼ¼sš¬Ÿõ\µ]ò1KH—éäòt@¿ÄR»YMÒs÷Ä ’SõÎÕqÁf2M�}A\Ì%‘±Ö ê{耛­ˆÌ‡Œ½ë¯ª†€¾V @ohHc%�ÀaNQϪ;XÃ-ôuñˆzüè@Û B±…\d>W3Òº‚À $/Áù üÒŒò�Ц3¯ïE€D ž†Åïù/©m]A¾b=wâì{Q¦ÈßêQJÉh�C¾Sü·'†œe1MxÔj‚ˆ�_ƒs¯+Ò³£æ¿µ©b‘3¯øï"éW§ùœ'5*#ß1i!°“îtû 6½�BõëŃîEÞ­"o 8λü‚ÿ±® ð*0 @>Kó±¨\êDù®ó¤w«^I xƒB¦"¬%ˆÿån`}¸ œùî!rŽÙºª ß\_sÏ+ÙpYpˆ�iOëZÌôÚH÷]ršLÏI¬Úâ Æ±ºÇá’íBYê™…›­,È—äðíœKÙ~vnU¶®ψ9Œ!¬¡3]­+ÌDÛÈQÂn>RuEÕE¦=7Àbüƒz1¯S­3tr€Ü21e'.’Š7ÌvÆñÌ–UdŒ Æ÷Y·îËI4¤ñEéq$·X×B$3Ñðäí_‹ßhéz•ô—ë<.¶'U*¦”Ž!Åq&[WXÉ· á&�$‹ØÅìÈ’n“Ýe~÷b0AÖ±•�ÞúXQ³°ñ‚ÏdF‹ûŒ‘.¤q ?8³Kï½P6†÷GlL²J Ùd¯�\ J’¨ÆmÆ1ýçõ‹ÂøÊÒ¿ØUË�ƺ õù–|®µª…€‹9Ä—ømÇ¿ÄbÅ®Z‘+À¸Íþײû/sYàâMb+©[Uü;¨…@<ÿö&¥0?Ó#IÌl3%Ø~=Î�Æú øž<XÕB �·H`¢¯-,µáâaã¾É‘,›[ìȉà1.2�:Œ¶®…@msŽÆ~OogãpÆuqXž„m°¶—!Í Á[Éœä$u­j!�Ï<y¾d‡óïb±myúe¿s›Ù�¶�?~l`àh¯?çXLž´®…@ŽsšküÚFš±NŸqÙö‘nŒ/§õ%�Ìp–#üܪp�+9J¦÷M[áŽ&žÔ{^ÎOf´À!C¾F!‚·²Š¹’34åÿ¤UM¶�}!�}î›p¢$–èã°Þä2ì#Í|¹ÜãÒ4‚¨Å^_}~ˆv,‰…{ÿ¦XÏB¾ÁU2‹I[àþÜïamøØ"ó·_üoe²ù•cÞ{䮓å�óæº ÿ÷b� Ýí‡_óÛü‡cÈBïóxÝùOWm¾"ÀÓ÷1ê +?^1–TxN¡YfÈqs}}¶q²ãŸ}¬Šö‹±ÑÊË8N¼ºåÕù›ü:‰Žµ¬•œ¼°®#Å›ž&5'ÑL-øF\­µÛþ+Fp 7c\j‚¨E,Äk%I …>ÃØ—Õ&`Ôi“1¡Rö1ÙøSg]46ùõ{ŒÏÍ’\H¬Üñë8gÈénÃô­ùà,ƒxÁ¸3Ü_ø2�çµ9á摼§¹�ñr˜ã>{nu_4_%-ßíøuÔœ‹þr©ù¬÷�ý�|Š?ms ˆ:�‹m¥¶!J�y‡iˆ¼êèR6‰em è9Û7ÛºÊg�ùÞñ,çþRÖ+§Á¶!J¼ÂH×V²üx;ÇÊ õQ‚”lvÛo»‹¶�×üýÊâíó“å�Fƒâ×<ÌÑpžõ¬FÄÉ$±µVKû;)®ØqÙ1+tûQö–ûò³3šô½èJáe³‚iþRÈIrVEEéuÍT÷n_Û_ïr�˜"†g‘sŒH³m2nè±OŒ•é^‹ Ñrºͱ®¼3râÍb�¼UÜÆE\ÔG Rv·}>O³Æ`OG¿Pn$Ѧˆ™B†¶c`Þn9Pöu¤Ø … æˆyAÀ±Vë%ggGäs¢•ùD¨ŸÈ´‡JØz·9LæiG/çö`ÃØ .ö�ä�Ywºÿl´”Ã�ùS\ÙY9É;ƒ�g›Ê¬à:3I›ÍÍüÚþ‰ŸýÈrâÊe…’�ÊdY�ºí!Õ½<Øä…Ì2©á‡e÷g73–h"û|{ÇÊw“ƒ"Õ5a§Ò8óíCäz÷³µã=¶æÍr)Ó™›T¸oC}vÑWòÇÚ7Û_/ž}[‰U‹`q? )Ta†qPêæ�üÑ ÿÒ‡:?ò?šÑ» ˆ.9‰çÆÊI¬–m�?„î©+—uÉ‚8Þs?$?JxL¦ˆ¹z@¾Û6 ß [�šùhÞy«¼Ó12„ ¢‚zxN­û¦Œn¶5¢%3Dúæ;¼Ý:ýzÈ›ýÚSs9ë~¸û¦ JT‚\¾ Ðc߯.®UÜÄ7…ox—�Ñ&’æ8  w¯Ó�AF§~.+z‚ˆH Ý~Ôï èÆ­z¶øŠöËaqíAo%^¡³xõXZX£SÊB"%8‹mŽ“/‹åh—çμ(Œ%ôsÝ�:òÃ.QõÔ#%€X.â<õ¯+îŽÛI¾liÝ™_‰-n!"²‚¸î¾URDmù’cÎ%<ªÙ9A´:ÿ½0Ú]Õš.Hå) xˆ·_Â# ‰”…è�Ì röí8ÃR½UDQ.+\A²›KÄ>—m�ýµ78Êbí±Eì†áTeA¼ƒ…q7Ùç;‹¤p÷’O8žM^'†Ñ‘×YnŒŠ  R Rî ÊI4Sã¾W%9§t= `öÓ°M>áÊddœ1?ìÅþ•˺tAô8sD^nñ`aÏc¾FRjI¶»)ßa¦Ö�öæ'ëê(—U¥ý½§Ø&ºïw¤8ý¦Å•NØ:^.×ÈF½9�°É¼A RE¢w6²ÄïxÅÑ«ûÖÀ#¶©" a+Ü…�ˆQ'»:†‹÷äæÌ[•ËŠ¸ ™­�t±B|t¼CÙ±[½cÙ„mÏcòIù¾ÞÐ>_ŒÓÖêý/«§^ã-DTîöd\g,‘†Ø*C¼Y(¦Ë·J'lÁùW¹\| …}µ¼[̯p¯rYṬìzú ÛùcèÁÂŒ$³4èïüZ\iLçö¸;µ~FZN¼rY—%È®Z戢=¢�ëVççC�˜° °‘"‹‰fèzÄí ò2CοRA½"Alš1ðÄn9PëíHéq°œ�“ë ‡:j?ä~J.ß\œyÉd†ØbéÀðùÏðÓèl1A^\(&ŠáŽ^Á_ƒóc’Hs–3¡³ûò³‚eRx¦ÿ¼®™ºã2\V'¶‘Ç<Ó™Ä!¾ }иmH.2ef8/wnh`œÌ®`‰±œxc‹>¦¤cü ?^¦Ì=Æár~â/œà*¾÷¬ t?7ZÂB2šðé÷; }“#”Æ�“Ÿt=Rþ9� ]CŋޕH�dW1¥Ì Jx.ëqj“æ‘è@�Do¨Ï¶m•GâZgm ¯º®#µ·*>¯Ç>ƸWx'/8÷Öê":d®ŸžË²“ÁEKõuuÌT±Û7Xæð{Âh2›šéX)3ò}‹Ït9Õðny.ÏP%¼ÑÞÖì·@++'Þ‘°GÞêêì?XX± _&ð¼?wþ<7—,`–TàxL¼ï7¨^OãŒçƒãmx°& Ò˜D½+÷åí’µû)=öU®#vÅp¾²o ·Pg¾H33;ø5‰ç»Ÿ×Öf>Ù×RW&äTü-õwx”Ť±”mÔ†r‰ä ÷›]Œ�Æ×z¿ O³ä�ò&ÝfäVö³­ú ãÛÀoødÝn1¿0ÎÒ�FnÈe|†·ãÙ™ÑÜC|Í‘£¹G‰Œ/Z}È4…4IÃ�æü„†ÃûFZàžÌuixÿ}"¡U"HT‰ÆàÁX”lLáž '­âm~K·j¸îN¥öø”»©ýÚDãE¹€e‘Ïìâh°“ÎÞ@Ë3;9^N£§‘ö yi‹%Õ·È­žŽ^qËÉoÍS-‹Ñ—o¹£|BåòÆ y¨\‡•m ¼Ô*˜#��%Ë>™%.ëÇ/‚þ—O«ÇeE£•µ›Ix—é›Î¡rZýå8ÐL»lr|õ¥VÁ¾Dî,ð-Ø”œÎÇ^%ë{1–žÞè4{çÑŽI¬ÿå’+'Hé„m¥y†Æ`Oà”ö!â±�<ÎØô zê5˜xr†Ÿ…8: IJÈ–RGãÐå.ÑŸÕÞ8ºñŽlº!͉!N_]s]–—BæS¯ÜUÕCZHð„måHÞ)f»¾¼P°�Ór’^;–žÚè�,á$B4&Ëq™-±‡HØVN’:á·4M¯Ó,¡‰K.+º‚œc ^Ù¢¥²Ð"¤|‚™~ãEs¹@êå¯2ÿS�Ç ÔªŒ úõô/Z™â�ÿÕiK2|_ôéyL,£Å5ÅŽ�D[�Sü�T) ™$Òzþ'RHþ§˜·ÂoPñ Šä´ ™J˼uòL RnA64Cmó"Y�ä7äñ¼¾ÊVÒÁèmU—‡ùˆVÜ® ñÏWœ°­l$ÑžäQónß-˜�Ô¦`aZPdï'�”iïd×3N˜Uð]A3Ù8Rò¢„¹Æ�e†õWr¶&[Hw>âC^äEî`Ÿr;Îp,¤hë«b-]{–Xâò}ÃÇý*h©V²‰ñ|ËMÀ{H~tÄÍßJ�ó8’Rºÿ2Á8\Ѳ——ŠÔŒõÆKÞ-#Ëp›í¬b!í˜Ã#ä9Ì¿�íl �*ê©W.a[ÉHâ.ʈÌžÍYù‚UZYϱ•Z³Éw(õeŽ27 Ý&Â]ù’èyŒaÚÅßðq¬å+g´°F+«¨MOŸ :›@›òbÈ5ƒÄá XºL:ËÄ{Å)\9›m‚5¹–cK©Ï¿™ÆÄЂH!S]³ªºjò%êš“N¬$—'²šZÁe�¢)à Èe€gpñ/ü/ÃhJ³nçߪºjÎ"9˜ñ™wAŠK¼Imùœ,ä÷Œ&“~ÌÄÍÜìÉmKæï÷àR‚ˆT^QxJ�ß‹'µåÀ¹e‘£õŸY¡ÙÛ�âÄPþ ¢xpŽFž­!HžöÒÆÞè�Ás�Ï¥}’!uoScgjnÇp‡çýØ]ïÉò‰Œ f!bª˜½oÔM¥�9 ~ÏÄxÏË–œÒ¶”C½Ò‚èiÓð£èU£SaÜ ¦eÞÑû‹i\0¼¦Ç�Ðä³�úŒ(Ý1ŒD¶rtýNŽÑþ¸þª¢ùä1I�³ª °�ÓL¢¶¿…D*a[Éàþ ‹ÿCÏÿð.72ËÎÂ=Íš0Ìÿh©¼í¬†7>Î�ç—æ9‡1MjVµ˜ËR±y-D¿žþE‹«£"}/Êù* YNkó^ë rŒe´à!¯ b2K#—°­¤ÛÚ+ÆŠt×Û¸Åt+/0‡"¦Gó x$îwÕWû 6ÚÆò™¼£qcë ²Ÿ•t  "Ÿ°­,òYna;²y,ÌmHŠ�Ú®OUE¶rd&}qâ�ï%nÞŽöçíc…•Þé uÏÓ°ÚkckúµoúÄ?¢íCbaù•–|ã·õG¿Å_«‡ÖüÆoëA>µš}ôñ=�±øoZtoF,|an?Çð1z5×' ÿ¬H.$Í÷<î¡úóÿðÕgWXQÓÉe?iþ“1/�&¤2›Ëo°^Å2Î�Çòˬ�‚ÑHnø)_€Véž�ÓJ• ÕÒÅÔÚPÓ¹“>¬çãè`*AhÊ�4ãv^¢G´û5©9º ©ÍKÀ:( ‰AŽ3€+8¯‰…ògòA›Kø&•"ÂÔ&ŸG=¸HR7¤º¹ Éý@<&‹~ªa«A‚ ¢9íiÊoØÎßúCŠj£1ñÔ£-Wª[¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …ÂBü?Ð�ÉNg²"dIEND®B`‚atomes_1.3.1/data/pixmaps/bravais/Cubic-P.png0000664000175000017500000000621715212624223020464 0ustar lerouxleroux‰PNG  IHDRÈÈ­X®žbKGDÿÿÿ ½§“ pHYs  šœtIMEã  . ”0í IDATxÚíÝyp•ÕÇñïB”Š 7”VQk©ÒX TD©:Z¬ÔQ¨í(u)E ±êtQkh©µnµX·©âÂŒV‹ÚqáÞ[б¢E¬XeÉ‚!¹§<'�ÜûÞ�VxÏï3“IÞÜeæ>ç>ï{Î{6‘ë\ ¼ ,®:),-< |¬~tPX’¯ð<àr~þ¢Ðlµ°*&Fw)4­‹ðNž*ðØO�7TÌœ œóÿ,0xG!Š×1Ÿá¨Vû¹Š¸UE@?%H²du+�ݼ¦bf´¿ŠÄ]AV(<ÉV,�©_/MÈ `WµAþ£Y Múss ÿ…¥…ƒJKKç–••¹(вÀz ³Â–•À»À[@=p€B²Íüùóû§Ói7räÈ%þ$r�¢²ýFZ’8ÿû ˜¦"Î7a„¥ÀfŸ"E$œir¿¿’|Ø_ÅœSíׯ¸88] /Aê�¾Ž=UżUC³¿gúã …%¼¸x¸ØWE uuu5ÍßæÇ#�ðd³?K–STÔ±føv›®"&À€�K€*î<‹�§�‘À—Žð¤ø-6Úw²ŠÛDQTÚì°ÒÿÖU$À¸ â}°·Šh9ÂààEà `�B^‚lnº—ªÈcUúï‚ú�L€ß}5«›Š=Ï“Ød³ïýŽðd½¯jõ&©Øó8ìŽV1p…Â^‚ÜÔ`·|KTôyÁFEߟH$°Y Ü� ýþžŠ>OÛú�tÇ/Àø Pç£ZÔ!ß½ÀX¿Q™Â^‚¬îÆæ�LTñç©ÃnhtW[-ÌÁ7Fë�éhÆaœßc75&]” áY… õ>8/¤^RR’mÃÓ6ø$éLÐù"YÞõ?Ûs°›·ÔâiétÚe2™¹ÛyZol˜ÎÛ¡_eC�M¶x8§óJžÿbÓ†Ÿ�§[^�-{ó4í4NÓ„ªé$c�A%H;-Å& Æê…¤-�ïÀÃÀ�S• á^E¶Øu0gIç\[—û©$ð U¡'È¿€Ç�c€1ªUåy [oìD \ îUàj…¢àU„P¯"JX„­?›z*--ª°õ}‡(AÂôKÿû…¢àU$Âîh)Aô"0ß׳ÿ§�´ðWl9×qØ(„‘J�°œ |Ùÿ}!ð¬ Rh[|ï�ó�g›µM” ×ëU/ÎùÿÀ7(� ÓCh“$í Ù4k@;^3 x¦ÀcŸ`c’£¬¬ìs��� µµµ›Úø’Î@×�U`££Ký¡±•ÇÖï%éÃöéÓçØÍ›7o^¹råò6¾¤6ò9Nµ¾>{ÞäÝv¾¦¶†oîîKY¬ƒ,QÒéô†t:ýB;^Ò XŸlH¼Ú W��ÅZ—sUù1vw+i\;Ÿ_ œ†MÅm²Ûópµ$ }côY|*6]ÌKØzY/ùãþ­´Û” U�MÂW¹+Š¢âxÙl W°¹ë(A$‘œs]%ˆˆdkTD Òz;DD "¢Q‚|*:+¢)¬‹B J%ˆˆDÚ®F!P‚Ha ;ùú¬D¤°MJIº �D Ó^ñJ%ˆˆäÿh‹B J�ÂjQ‚ˆ(AD” Ÿ–…@” …uRD "¢‘›%ˆö‰BÐvÚþ@v•/ûc[k×{ïè "¡ë <\ ì<,†©Šµ{Ù(ÅvCê©ïm¾ªªª>@ÐsÑ¢EÅ»à-#à1`0øpЋ„l‘”¬ò‰ÑËØX¥Ä6©TêÒl6» Ûæ¡´ººú�L&3h'ßv,¶¿ü59W”÷}(Av€{hÙwQ<ä/ùÁ›7oÞ‰QÝLËÐ�ιGœs;ó8ø;-7Ò9‰m<”„FúXâ;öºVTT|8zôè6¿ÑìÙ³™5k•••s‡Bî N¥RC€—wðõ‡‹›ïŒÆ6÷T‚ì& Ö¥7lØð:íØ §¶¶¶?pè¦M›^Á¶KŠ#€¾±�ˆ(Ú™a5�Ù¶ˆCàZ_¯ø“ÖÚ¿åÛn% Û@–Ä|–O€ƒiß.µ“€Û±=ùžLJvd2™qι‡cú¸¶¶¶Ï˜1cÚÚ72»;ÕÝß�m£}™�Ùcþ9?¾ üˆ=|—à$´AÞ¦‘¿ÍU$l çU^^>'7Aœs�Ùlvb;’#ÎTàqlOÇýIåWÀÑþ±=>þIé(œ <íë¿_ÎÂnûŠU£œsîܪªªÙÀ(çÜÄ(аþ‹�ñpiÎÿ¦')vIêI_â:Ë�‹�€õ;ð^]“˜$ÀÀ™LæçÜuEEE¡Ý|_ÅÊUï }/໺áŸÙlö6`£snÊ’%K4´?°¸XLF“Ÿò >|=pÐwÍš5("á%H5p+ÖQx¡Š9¦à‹Šn†¾OkGg¡S‚$Ç­>Q¦¢QËyÊËËWGQt/ppUUÕÙm|ÙF%Hr¬õU­ØX-ÉÑÐÐ0hpÎU8ç"E$¬»7_�ÝzÔ Lj#–�CÒéôÉŠHx òp?6Ôâtwl[dàŠŠŠ*�ð`ÖË®/@|[äÕ(ŠžrÎ�”ÉdNPDZJRãõkØ+¼åÿ÷,ð7àQàlàëÀ<{K���7�ꜫ¾©ˆ$ÏàMà|¯O”ýñ±þø™í¼Ï$ÿ¼àõétº*�NgS©ÔàVžö;62AU¬ÏÐ`l€ÜyÍ®Ëh9«íeŸ£|²ì’8QUúªŠ&,A.þ ,ÌIšÜYm•þ÷•­¼W°Kâ”——? ¼EÑ9™Læ@¥FrdðB³ã.ÀȘIaÓCÏÄfÂIË+ˆsÎÍ::ç¦*"ÉI�>À‡ÍŽ/z bž[é?ó4}¾5kÖÌÞ&>÷Üs½‘d$ÈGÀ~þïáXŸ¾ ÏÀ–jò8ðºo¯|¾•÷ r“ËqãÆ5FQôk ¤¸¸x²Ò# r;6¬=…Íl«ÄîDÍjš=×aý"�°;_…»MrMMÍ}ÀjçÜÅ©Tª»R$Žjv|$0°Às;bKbVckh57Þ'Ѥ�ƒ™J¥¦¦Ói—J¥rïhé6ïj16‹°ÉìVoœlŠn©o¯H¾;€õQM^°`AÐóiB]›÷.` 6Ÿº›ò¡¥áÇW·½ëëë'*AÂSÜ„ÝíºH)‘Ï9w3¶ëïÔT*ÕQ žÛ± @SЖkqW‘µÎ¹;±á:ßV‚„gë¼là|¥D¾âââ�ú(Ц‡:¡*ôýAšæeOW,ò 6l%0œÉdNS‚„g56ò÷`à[J‰Ø¶HÐóitÖ´[¾ hZn¡¶È¿�?'ôîÝ{_%Hx–s€!hc!• 8R¡ÓqXzÓrý‹}µKLÙØ±cWtíÚÕùêÖ­¨ÿ((s|b4ÿyŸü¡(¡VÃŸŠ‰ÏÂj ªsáخ¬qfûúwÈ~Qà±³°ùþ‰¥·Íc�3-:ךAIÿ€JÛ€'[ ºð6Œ>dGbӚ㼩¯Oc¿Å¶­ÆBaS•sãó* ÜGEâu®Æf!.ÇöÞë«°lµ7Ö¡º›G3èÊÙAvOÝ|ÕæhlÜØóÀ1$l‹3‘±ðp½o'ö÷í¤¸�–lFØ–K ]o [‘¥É@ß0>Zá‘Ð�ë“¡g³ÿ]l àÕV>+¬¸ûé‹� [ç�÷Âf=.ôWQ‚íclêžþŠ1qü&v»õ…HBÖ ›Èõ:¶—ÉñXÄ*l…úC" ]`Û–M-NB=×""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""²{ø�éÝsTПIEND®B`‚atomes_1.3.1/data/pixmaps/pdf.png0000664000175000017500000000623115212624223016360 0ustar lerouxleroux‰PNG  IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  šœtIMEà ±AÓ &IDAThÞÅškŒ]ÕuÇkŸsï�÷xðŒÙØØ,c…Š(r ¶ÀVpêÊ&QH•TåCÓ§ˆU‚RP?ôCš: €%JS>DiÕ4i�Ôâø�‹kì†àd�_�ÚØîØÌØ3žë™{{­~8ç>æÎ{Æ©GÚš³÷¹gïýßk­ÿzœæxíܹ3‘b’$! |‰Hc7noo�zè!›Ïá<[•$Éoºé¦nU½ÞMN»Ì¬ÖªsúÔŸº<~yçž½{~ºéáM•¢ªw üñš5k¸�Ù6Þj\UIÓï=iš’¦)W®\QïýçΟÿ‹ƒþðþûï¯,( ½T*ÑÕÕIšúyoºy\$¢j5I’P,]Çwˆ“¿9uê”?pàÀ«ëׯ�®)ùêÍ �¿´²xñì§#KJ‚!Î3œb]«ú?ºdí­Ÿ³üE1p¢Ò¨7yOšÀ µßš)æ·l€þ_]I±Xäĉôõõ1<<Añ–e„é$ÑÛïPÞ»�(öö²èw~›`q?æ=•×_grï QPø\6V“‘sç²óíííÅ{O7§ÞãÌ™3ºgÏžÛ´i&›¹™FcÓ4[ ,Ié¹÷zî¹—K»v±ê…çxüsXª |á ¦¿Åä¾IÏcŸaù~€ Hw]�}–Ê›o2õÚN’ïá0Á,È&®¯R#ƒ ‚çýýýôôöpÇ·÷ ¼4::º}×®]íWa­šùÖÀ4RŒ¥žÊ™3œÿñk üë�èùøƒŒ|ûeHSÊÿwú$Wvþ˜Û�£óá‡Hú6Z.3ùï¯á5³ç‚|n³Œº¬ÈÌœs|øá‡ á½'Žâ8¢P,,ü«K—.¥o¼ñÆ�6nÜÏ”ˆÍ¸iêÅ%KXö™ßdðó�sþ[߯µµg 8¤ >%>~‚Òí·aIŠëëcÅ{'Yù‹!:·nÇÔƒ€YnòfÓVT•ŽŽ¦¦¦8vìçÎ�cbb‚J¥ÂèÈ(ccc+�s/���?¼ÿþàê~Ä겑œóÅ ´ìºï]ÇÐæG¸räÅŽ®ªkoˆ8Š+oeôÄ{HX@/]âÜÇÄÇSà$À Úä¦;ؾ¾>6mÚT³UÍ%S.—[:44ôÕ®®®G�“³É̾Áöå#?çÄÓOÑÖÞEP²�£08HÐrÓOŸ:ÍäžÝ´ÞŒ ¸žl$žé½¬jäV;;5«ÙG†5uSÕš3íîî¦T*Q.—ׯº*�F&àGtê4åR‰ Ø�E$wd—wïcà÷—VˆŽüœÑ¯½ˆyE+¢ƒÿ…%qk\=1£.‘†MWí¥™ªãaFªZiE¿�{ôÜ § Å"^}§JÐÞ†hö‹"N?ýNS:ü$¸\¦ÿ~ä£O=•Ï’C Áùl½š�‰5“�›®@u¬JÑfægÑbÇÚ Îñšò†xÁ,Á’„Ôƒ˜ xp†YˆXBj%PÉ�\pÞc¡æÔÀ÷DHîGÀycª³qnšU%SV”ƒS™ ä…8JÑ]NãApÕ—3–´¾åËo[vçê�½Ý=ˆâ@4‹Ä1mð fY¼% Ô:Í>êœ(ɲåÜ}늚qÏ|VÁA AÌò·;Ÿþ(µŠâ¿þÌ<¶öεW¯^]?!@œLóÍ‹VOTê,Rkè‡A@GGÇ4iüM«(ºq½FcW œ·×·Ý^î[´ˆ�þþiùȵ§k�5ö«÷�êÕ¨Õo¯'±’f#œm³³mp> ›Õ«ñðmæz«–b½ k�Íå�ælt¶ƒ›ižhš¸U³$ɘfCˆ`ªu)æaHk5ÚQfü".ëcu–ºÖ\WE¤™)•лîÄ #pŸ]ª�æýH¨÷«÷Í-ÉŸ_Üþ(Ùñ׬lI7 dÆé˜ázzzÚq…"XîTÕ²¨T‚l{“qÂïBœÎ‡XæŽÕ”åø/OÒñþû¬¬©X+ÿn ­Äë‘,ªU¼�Ác¤$øÉˆ¶'¿„ªgꇯ ÃèÓ,{4ð&¨Š`*†6”‹f³�Y«¹hE¡‰A„#T0bŒÍ™EŠ[?É¥ü¥Õ¿BdIþÌH• °eÀ¼eï�ÌºÞ ©ÖÕ&LMQËb(SÉótÃòÍEI >Eƒ�ÊÐÞ9R”Ô$“œ*9u†Î£v6‰Ø¬R1#U%Vˆ½›çRJLˆÌ‘jBtú ]¿¾…ñR;©‰ © �ˆ™’¤H®ª6'�˜·j5NÒ¬»‘AdFD&$fÄ1‰‘Žñÿø ƒÏÆ‘öôÐõÈ~¶}K÷ ø¥7SÁHDˆ«ÎÑ{RË%CFØÜB™–Hõª`ýšPQ£bšõ½1ežE›7óáþýħÉѯ~�ÛþüY|ï⌂TBGjžX2¿’Rcšµ ™¹Â…�ªx5b¯ˆø¼� Y6‹ƒB�âðÁ·^æŠ éÏ1ø©m¬{ùïÞ½‹‰J…dlŒNóp~”ÿ=°Éi»šÇ·²ËëŽ~g5>3"ƒ ‚CPs ™ÐTéºï.Âþ%tßw7½�|‚ÉK£ÿûï ê¹eÃFVnÛÆè;ïpvß>Ê7¤€¢¨åE©j ¹@ßGZæ Õ(7Î)X <§B¢PISøò޼ø"çöíC§Êˆ¯)Šgø�×IŸ�þ�®cñ¿Fçè(K?ý)ÎüË+Yý¹ákÖ‚©hNr2c÷TLL�înúî»—µÛ¶süÕWxïûÿDXp`Fâb N²@kâ2g_ßÃ{÷`NJm¨OIpYþß$.D>rUL¬.ikãÎ/þ Så˽½¼½cA¡˜¯e_©¼¯œY‰' §Æ¤V0Œz~ÓbM¹!ÕjB€H„H@Ϻ?ûq°híZ~òÌÓhàH5%�³y¤ZEËþJ,æ9fYü%-Ò†V¶zÝôÛ|UT©($¿øîw‰Ëe<ûå³ÃLÈ|ŠA„y,–ù�H-sŽ)RsˆÖ°ùìån8i®&fTò Ü•÷ÿ‡á¯|™¬èîòO9Ö¤ UiX-$­IÉ$ÿâ ¨÷³9a1«Wÿ,±ŠROpªY|e*˜T³ïl·ju}ÌTª^ÄF²‚­C1Í¿gå%Ó%(Y0c¯ýU…5k¹x‘X}‹øß5dÖÂd3Q©Î*�Ùø,ô»àñqÌ£ßø&Ëfbb¢ù‹tË÷ja‡Z­ú2=ì0 AÀª+ZzõªzÝkµª5µ…!>¶¾e�«ù~6¿ÐŠ[…'�Eî1öV塹ä³ÅN7¢áüÞ›[!`®)êÕ6­g"bÎ9½žÿ·‘‘ß*Dis«M_­Z8_iˆˆLLL\ÃpbÞ@ …‘Ç?yôèÑž…r¢sÐt@.oEÑé 6œ™7�J¥r~Ë–-ßœœœþ.3#II’D¢(brrRß}÷Ý´úüÿ¨)sG®ûòìIEND®B`‚atomes_1.3.1/data/pixmaps/field/0000775000175000017500000000000015212624223016162 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/field/an.png0000664000175000017500000003060715212624223017274 0ustar lerouxleroux‰PNG  IHDRÄ”Ì(†œbKGDÿÿÿ ½§“ pHYs  šœtIMEà@Z´a IDATxÚí�wxTUú€ß{§÷ôBZè], .*ØÀk¯è® ,¬Ø]»+–UQ׆ETX WA�j¨�ôžéýÎ=¿?f‚nq«à¾Ï3Ã3so’3÷�S¾ï|WB ¡¡‘DÖš@CCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCãð@¯5Á�'àó±aÉR±cÍêwìÀ×Ò‚ÌN'ù½{ÓóÈ#9âøã®IËÈxIk­‹¤•¡9pl^¹R|úô_Ù¶h1VO†T7­q Š ˆJÀe¤çIc˜xã 5z´¤µž&Ä!CCU•xyê4Ê,& ;2$ Hè Aˆ!ˆ  âE¥�EãÇpó3¥sq±&†&ÄÁÍêE‹ÄkWLÁUã'dÌH˜�Ð:’×x«­½D�Ÿ^TšHИmåÚYÏ1î¼s5)4!N¾òŠXxóítò«d ã@Ɔ„ G¢õê€@Bvé"�;ÃUp“ �UfÁ9ÿ™+nºI“Bâàâ‡Ï>¯Nºˆ¢ d£Ã…Ü6T2¦æ:¤vË|¦tÙ�2±å‰ÇÙS^Åκš1ZP¨#Á®yóEιøbMŠ_m•éW vï^ñÚ•S(HÉ�¾_ïÐ*DR9%ƒ„„Ý` =7 é¨a˜-ú­ø�HhJ$�ª¨©!•àù©7ÑèPѧMŠ_-ñ+ðòuד^$WJ†¤û$¬ÈXRÏÍHþ 44B0ˆQ¯'ÝhÄ©×áDƉL:²ÜQîÿÃPUUklMˆŽÍÚüCÔ|ö]ÛÚžê,©‡¹ÝC<¨ì!A B¾8ÑŠFÔï×¢þc¡íe¨�(–X‘±#áD&™Æekùâã�µñ®&DŸH?ù™)Z{K»•%Mé:ž™Ž²f>]½›-*ÝEbõ6�}"Õ{p—VÐ\ÙLÜÀÀœ:�5µl›ŽŽW}LkpmRÝqi©¯·téM¯¨ŽNèÉJM¦©áQëü¡¬‡ƒ‘;7  �PUt:]Ûy–ßÿ�î}•Xk�? ZR±‰jJ‰ñúÖõôîÛW›Kh=D\Yúò+Q° ·E¡[—Wõ©Œdìö¬\ɺß_ȶnØÞe«gÜÑvžÁ7M£Ñ �Sïm=Þ�Ê”r9ÐñÕÂ…ZÃkBtLv,_–êZ/~ ]*�\bM®,uÞÀ6ú"|·�Y™ôè^DÁ¯hlhÀîpvéRBì;^×ÌKÊaFb{É­áA´e×_�†={Û$�Û-«Ê©ð›”zîBBgÕC§ ¤¡!+“æ²2ú¤¥P[VFV“’ZŒå'�Öø…¨ØµKkx­‡è˜=ž¶m?¨ˆvÏS¯ê$°Û /—Ú4'–›§b0B°kú ÒRgúñ Ojû7)�ÏíÖ^¢c"Ú=ÔýÛú\E "@àñ±§¼œÄ©§Ðcøp„,½þFЬþÉ9Ô”Vûž‹Ô¹4´!SÅ`µ¢ H¤ûžK$Ro �ìM°KdÝ9ƒüž=‰E£¬¾êúÎYÚ– žh;žÔ±íŸ'ߣ7™´†×zˆŽ‰« €(‚‚8P íyPR¯— Ï¥`á|ò{öÄ×âfÍéè;ç;DÛ±ûŽW©c“犷û…Åݵ†×zˆŽIñð#)ûc¢©G ‘ZzM.£JH”åòõçØÊ7mÄzÞÙ”Ÿ+Ú†WM?InE�Xê±v猲o#QïÁƒµ†×„è˜ ;–¿s!áÔÄH­< ¤Ôű™Úd8z4Œ½ß¹>žõQ)h“+‚ ŒJ�•cO:Ò�±Ù�È' ÆŸ•ÁÓs>@Žª8Séàí èÿ‰ñvB„RB´ö�$Ù%Ÿ©~=þ–>^‡Ä.”5„>ó.&Ýr‹&…6‡8ð(±³/¸Pç/¥FòR©ÞÖtòÉÑÒÓ°~¶„IQ+¯à#‚À‰Ø·;®] šä„zß�)šZM ¥†KžÔPi°ÁÌMöL¤®i8K+�ÂH~AO› ]\bý­ákjW=ò°&…ÖC8"�/Ÿ~¦È\²•èÉE� KŽéÔQ ×£|þîÚ-$(!ÊbÂmûª-mó)›Ø¿‡hß;øPi&Azî"� ôX{g@§,Ôm•jƒøøl{qJ"!²®=Ÿ?>óŒÔ~�…†&į‚·¾^¼|Êx:o¨¦9©I³¹À†<þ8D8Lü‹•¸›Â4§¶†–£ðšI$‡T©¡Óþu™’B´—Zç-$p s.:£'z¬=Ó�Šr;«Tð¡â·H”K B!LŒã¦7^—ôzm  ñ+Q·k—xãÔÓé¹ÛK7ôd·ÊÐÕ‰tÚD]=ѯ×áöDÛdØCœ�İM:•îÆñÑ˯ÝU‰=µ‰Hß6dÚ—ÖJÍô]ó™xÙex¿ù–´%é‹‘ô©âzlÝH]ó{j îõáGÅg‘¨JI:å(îX0_2[­Ú‡§ ñËR¶n�X0a½*ƒtÅ@2t˜z¥#�?±³ŒÈ’M´¢4£RƒÂJˆÒåÚ‹¹+5„Q…¥ß|#Vþãl\¹Šª½{ˆE¢@g2’STÄ�#u≜xÒI’Ñh$ òô%— ±àúb¤]j{ª{gR�DE¡]^ü$ð[$ªå›‚a�éÃí|�+#]+œ¬ ñ˰iñbñå—Ó·1AçÔ7´Æ�9H'�(ÙLhùZ"±6vgQŽº÷n¼ï¾ÿy’«Äã<}õ5"øú‡ôÃHQ[¥ÃÑÉŠÜ»jšooÁK‚€Q¢Ö�`s0BýQÅÜðþ<ò;wÖ&Ûšÿ+Þ�'V]{3ýÜ‚"ôd ÃŽÃð¤Ñ#+ÖX¾—â4‘ †»ˆ³Öª0þ±¹ôú뱋PÁ³S§Šúgç0¨�.dœ¹Vä>EÐä!²¥ /  Þ.س»w6Ó}F~—.ššÿ?¾~þy±å¦?Ó?¦§éè°£GlW¤ÃP¿ýÿšjÜ(4’  …�ÄÙ�.sÑóÏqæï'ÿ*ßë÷ß/Jï}ŠÁ˜èŒžœV)²Ìèú�/HtK>%މ»Ji Ì–"Ó>_Hw­âŸ&ÄËÇ÷? ªî}†þ鄞4dì&ºã{# ì‹úåR|›hA¡•Ê” [òÌüá�ÙœpòÉ¿êE·`Ö,±üæ»3Ð5%E:œi&ôý !#¶¹_TÁ� ÉÛ¶t2qñ»s8â¸ã4)4!þ3j"ÁÜn¡Þ§oûè³Í€|â ¤n]H|þ-Þ�nZPh A% Û‰³½³‹;æ¿Ï�#�< Û¢9o‹/þ8�A™nèÉMý®N‡CÿBPUâ[jðãø4§¤Ø”)q2jüxM MˆM4fÎåW ݼ¯é�¡í³¦™�ÇCÊÎBùl ž½^ZR%êËQØFŒ²Ù<úùgtïÑã€^dK?üH,¸ò lIÐ-õ;§#ã´1öË�ek5>_ ?‚–TþÓzk‚3_}ž1Úý&4!þ~�§ûœÉçïv~¹Žž©€› Öl3Ò©#ÀhBùü;<5AZR1† âl!Níà®<ýÅçääåý&׆åËÅKÎcp“Bw äµJa2`êŸÊ–*üž(~n;ì ÇX�ˆ0úÅG8ëšk4)4!öᩯoœ5‘¼UemÑg2æNVäñÇ#¢â_¬ÀݘŒ>ד`/ [ˆá?n0Ï|ö©d·ÛÓ¿açÆ�â¹ÓÏ¢we€âTÖm2NƒsßlHs�ØZ�¿)’,‹i—Ø‹²NDéwÏM\r×]ššаw¯xkü™t+mÜ?úÜÅ‘Œ>76ýj nO”Ô¦¢Ï›ˆaœx3çÍ“ C‡ø[voÝ*^8w2]Jëè��NèRû1ôXúeBNjiþú~^›ÄžxŒõ±0�ÿt5W=úˆ$I’&ÄáJùÆ�bÞééS¢Kª8±¦žiÉèsÙ^"ßn¤ÅŸŒ>·ÊPB”Âk.àÞ矗d¹c.©«ª�Ÿ~&…*è…±M :¬½Ò¡ uG�ê`2Õ#•¸!Æ5å\®{~Öa�ÿtØ ±ý»ïÄGÏg@³ºôy@v2ú¼©”ÐwÛpGb4µ‹>¯'Æ�;nàæì°ß¦Þ÷ÕžvÚßrVî 7†ýòŸ¬Å.¤Î¹ˆÝ5*üø”¨NÃŒwçJ£Qâpa͇‰o.¾†A¹-úì@‡áÈNHcF!V®%¸lO[ô¹º5ú¬�1îɇ¸ì†:ü¸" ò—s' Ó+郑Bôd!ãD‡½«©[>¢¼ŽP™_*ÿ©RRØ øÝPnûûÉöÏ‹4!ß¼ô²ØtÓÝôé(H 'ìèÐÓi䑨KVX]E Mí¢Ïë�pá‹Ï1áüóšAv$æ‰K/êû‹é—J lË*´!õ,DT5ÞéIJa’¨Ñ'“=ÇõçÆ÷ç‘•›+iB¢|üÀƒ¢êžgè—F´EŸ�í‰4d@2ú¼©~ßmp[S12õ\ÿö›Œ9唃îâPU•™W\)‚o|DŒtn#—|[2)°®™ð¶æ¤©¤À-Á•ƒ ˜þÙBr $MˆC!s§NÁgçÒçGÑgݘ�H=»“øì¼;ZR©û¢ÏÛ üéýy9bÄA}Q¼8ýO¢bæ+ ÄH—vI�Ž º>EÐâ%²¹  ~’I�[a¶wsqë—ŸSt€Žš¿ Eáõ‹.r*úœ×}v™�ÇEÊÍAùô[¼©ès= *RÑçŠ>�¸ûƒ÷8Tn;oæL±fúC ÆHW d#'óŸ2ÌèúB Dts>%™)›L ŒPZdåªùïÑøpIâ &0ûÜI±h-=Si .tX³LH§Ž@²Xˆöžê@;’Ñçú¡ÝyôÃ)(*:¤.‚ÿö7±ôæ;ÒÑ­}R Ëˆ¾ÄbĶÖá íŸÿ´9×À…óæ0lôhIâ Ä]_/Þšx.9+vÒ£ÝÞgK¾iܱ (Ä¿øwCˆ–T½£r6#8úþ²`þ5‡ä.³¯æ¾+>ýÃ� öA×öùO#†¾ÄK«ñùcø�l÷G(IüþÝ79ú œKÖBÔîÞ-æM<�¢Mµmß‚dÌ�ȧ�F´¸‰}¹·;Ònï³Â&¢H§Ï¼/™ÍæCzhðÃâÅâ­I1Ø­Ò­ÝPÒe5bì—ÊÖ*|ÞdR Û!±#a­!Æ©/ý•S.¾HÒ„8(+)žû{Šw{éÚ>úÜÕŒ>ï­ òÍÜþÍ©TŒ2âl Fæ%yøµW›ò-[V¯;ólúÕE)FO^ªê KoÀ4 ìV”­Uø[RùO©¢hëÌ1Ž|ä.&M›&iBt`¶-_.žs}ëã©åE;:Lý²�N�ز�ð’Òýö>—¡°Ž(¦ÿ‘?ýå±Ã.‘gû† âoçL¢xw =Ú•ât¡Ç<0Ò�$¶Uh'+Ú$Êâ1ÖÅÂô¹o*—Ü{¯¤ Ñùtéz1ûÆ»˜²aýþÑç¡ùH'ƒøa=Á¥»²÷y�Iá¤‡îæªÃ¸dåîÝbæigÐ}{#½0�ß–ÿ¤ÇÒ'ò2Q·ï_mO·44´ ®oF 6óUiÞI°z §vðök•î¸ãéÏþ3S¦Lá’K.µµµš?BQžzê)qÌ1Ç0jÔ(–.]*åååI“¦M“†üíEA¢-»‰ûë’R4z©[Go�ì#Ì].$ƒ�%[§þ¨®�œ?c6ß®X/4!~!–¯ß.ν{>1sÌéÅl9è­NÒúY8f<”Ÿ„ˆ654óWiÞA j5�Ô�×þú�dLížøà>ÿüsxà�ýª‰\~ÁÙÒsÓÏ R»šHË.bþ:a7ÑõkcHä 5aLw¡3:Ñ›³±å÷ǘ{$Ýõ&_´ä �¢COª?]ºNÜ4kú´~]Eè­™è-v2‡˜8j4lYKƒÄ|-É9ƒ¯†HËNÂÕk¹éüQ̸éÚ9_())Ó§O§¢¢‚»îº‹ /¼ð�‰¶þ7ìØ±CÜ}÷ݬX±‚;3)S¦üÛvX²j½¸ìî7�3aNïŽÁ‘‡ÞœŽÁé"k° £êJâÄšý¨1?‰˜›pÃNµë¸ûòQL9ÿLIâÿÁ› ¿÷¿Q‚)k@rYÕš�Þj'÷(#C�†uß jWú‰ÜÄCMļUDšw«[Çý×�É”KÞÞçO?ýTÜ{ï½(ŠÂí·ßιçž{X$÷íÝ»W<üðÃ|üñÇ\~ùåÜvÛmÅiiie?çØUë6‰KîyÅÚSF�¶Å ƒÝEÆ@3–4¨[¯mLJ¡Æ=„w¨ZË´Iƒ¸uÊï%Mˆÿ‚§ßùR<»`æÖè³9ƒÃNѱzú „ÕßÖùˆ[’soáæí¨Mxî΢pÆ}VU•>ø@<öØcD£Q¦N�Ê%—\"™L¦CN„-[¶ˆ'Ÿ|’… 2yòdf̘A§N�þë tëÎ21é–ç{bÎì‰Á‘�Þ’�Áî"­¯g.ÔmP×’RļDšËðW­áòS‹¹Ú¥²ŒO‡BÁÝ/ü]Ìý¶KNŒÎ|tæt NÅ'èéÞV.Rqoöµ6óTnÞ†ìÙÄÛOLçØ‘GIÿËÏ_¸p¡xâ‰'سg—^z)W_}5………õR­ªª,Z´H<÷Üs¬[·Ž‹/¾˜iÓ¦ý¿DhOUm½8ýÚÇðJÝ0göJ¥Îd ·9qõ¶‘^uUÂ5~Q?jÜKÔ½—@õ:NêdÖýS%¹ƒIÑa„ˆ+ ×?>O|½IÁ’Õ'56MÃ�f§ÏÉ2yy°ò3ß7J¨…x°�¨§’pãVŒÁ­|òòÃôïÛûkÝÕ«W‹Y³fñé§ŸrüñÇs饗2~üøƒªª]yy¹xóÍ7™3gF£‘)S¦pùå—K‡ãûÍÍ-�Nœ:ó¶Š@kl¨½-½Å…£‡�Ìî [Áʤ"î#ê)'PU¨^o>vK‡)Úa„Ã\õð\±¶ÜŒ9«×¾ès–��ã$ìvøá“Á½îdϨ'æ-'Ô°•tuŸ¿ñE…¿N©”¦¦¦÷Þzë­óÞ~ûm8묳˜4i£F�ê�s�ššñÑG1oÞ¯_¿^Ì›7�?ü�H$ÂØ±c7ncÇŽýE¿uÿ‰k×®‹-⫯¾bË–-Œ=š³Ï>› &°ªäÑh”ÉÓë+MÉ᮫½5+)E‘ƒœþÍeÿ®`J ?1_5Áš�tOkaþS·§¥9Ëk!êÝbÂíoâNtƜ޽-½Å‰¥ÐÂðÓ$B~Øði”H�›x« ž=„ê6rD¡Âû/=.Ùlþ›EÁÆ�ÅG}Äâŋٲe }ûöåØc�eäÈ‘ >üŸÿë!Jó£%%%·­^½šåË—³fÍ\.Ç<ãÇ�çw¿ûÝoVš?‘P™rûâ«Ía¬¹1ºŠ0X³ÑYœX œä ”qW‚o{%äCUüÄýµk6‘.—óÙ 3ÈÍΔK!vUÔ‰³o›˜¹¦´nlYè,NìÝ-}*4ÔÁÖ/"DÝ(áfâþZ"î2Bµ%ŒäâÕ§h ¸ýÖx½^¾ýö[±|ùrV®\É–-[p:�ôïߟž={Ò³gOŠ‹‹éÚµ+ùùù’Ífã_ ·âñ8^¯÷½ºººó***(++cÏž=ìܹ“;vP__Oqq1Ççè£�æ¸ãŽ£¸¸¸ÃÌLUUeÆã¯ˆw¾©Äš;SZg ¶ltfæ<ùƒõøêÁSF úPã~”`=ÁÚÍØ”Ý|ðÄõôêþÛÝ)õ7b]éqþ=ó‘ÓúcJëš ¸9pö13b,ìÝ ;‡ˆyÜ(¡fbþ"Í» Õ­ãüzðÄý·uèXA<gçÎ�bÆ lݺ•²²2*++©®®¦±±½^�ÕjÅb±Ð*u$!  …Ðëõdgg“——GQQ]ºt¡_¿~ôïߟ¾}ûËÁ>÷–xñ£R¬yƒ1¥wIöþf¦l'yGè { es„¸?ÙS$B�k·`oçÝG®bpÿÞÒa!Äâ•›Å_„1kFWçdÀÍâ s°‰£ÆÀÖ(_òãèó.‚Õk˜6y$wÞrÝA½*„ ¹¹ù=�Çs^0$‰ Ë2‹»ÝNffæo6ù¥ùëks×bÎŒ)½k2íÆœ†1ËIîñ04mˆ÷ûq?J¤‰P])jËFæ>vG î'ÒBÌýü{q÷쵘2$']– ô6;¹G9b$lX Õßû‰Zˆ‡šˆ{«“©5kxðú³~vôY£ãðî'‹Å­OŠ%ohrhlÏEgIØæ$gˆ¡Bã†1�¡øIDš Õo'R·†—î:ŸSÇØ�\Lˆgß],žž¿söŒ®dôYo·SxŒ�C`õ·‚Ƶ¾d*F°‘˜¯ŠHÓvâ�ëyþî+˜pú©š )Ÿ³B\óð<ŒYC0¥wOf+[Ò1ºœd 6¡3@Ãú8QwrN¡FÝ„ê·m(á¡kNࢳÜg@¢Lw½ðw1÷›F,¹ƒ1:S{ŸvºŸ §¸'¬øBвÉC<è&l æ­$Ò´Ù»…·þr#'�>ö�•AÁ²eËÀÀ�v>ÑÁĸFJsÌ&qÅoQ T„ q½“Ì�fò†¨ßà$Ú$!!aËï‹$ë¹ý…o EbÙ(W”IDATâê LRà¯ÚC$T•ë{[,Þ˜À’Ý'™ï’Š>÷+Ó©¬ü\Å»ÍÓ.ú\A¤©Kd'sŸšÁ°#Ò=C<Çh4 €/¿ü’±cDzïúÍÛĤé/�°÷ÜÙ£=�%ƒÃEF? ¶,¨+Qˆ4øQ£~TÅK¤q7þÊÕL›<„[¯šô«·Í¯–ïŽD¹ðž×Å×›e,¹ýÛJijí <]&'–ÿ=�·4µÃ-PKÔ½‡pý&2e|öêC‡¼ ‡G è#-zq:–H)‘ÆíÄ|ÕÉ`kÀCËæþ:è4T�%ß…lr"Ò0g÷ÄÑeý` 7?ü‚8(…ðxÝϹ}¶XWnÇ’Ó7U"&sž�agÈX­ðý‚8þ²fâÁ&âþZ¢-e„j7Pd®áË·Ÿ¤GqwM†C�î] ¥E/Í [·—pS)1oJ°™xЃ»4ˆ»ò‡ÈØŠ\èLNd£ Kf1ŽÎGñÁ²f®¸m¦H$�Uµ�â¬Ûߨ½Û�‹%»w[’žµÈÊÑ$ ü0?F¨¼ýÞçÝk×Ó/ËËWsŸ“rsr4a óó¤OfÝæîæl$ܸ…˜·%Ø„òàÝ i· o „­‹�É…dtaÎ膣óp¾Þšà‚[¡p¸ã ±»¢NœuÇ;ÔG;'säí¹èÍiØ‹­Œš ái�õE×45÷U'c 5k8®‡ŽÏÞžõ›¥hXr²33>yþ©o–‡Pý&¢Þ â�F”°ÿ.?õ¥‚œ~Žb;z³ Éà”ÖGá0Ví1pÎÔ¿ˆ`0Ôq…X¿m�8óö¹„ô½’{Ÿí9è,.œ},s:T—ÃæOÂDšQB�ļ­…~àì¹Ì{ù‰•ük’H$xþùçÅ1Ç#rssÛÆÅgŸ}6 ·ß~»ðx<Ýõv°Y-|òâ=Òˆî ¡º�Ä<ă (aÁ½>ê7 ²zH8{ÙÐ[]É¢hiE8 †²­)�±WÞ/ZZKff&»víbâĉ�C¾M ÏÝw½tј<‚µk‰¶ì!l ñªñR³NÁ™Ÿ*ŠfOÖ2Øó±Á-u猟fëŽÝâ7âåKÄ­³VaÎ=SZôÖL v'£Œ «— ª—y‰û›“2x*7–©YÉów]Ä5—^eè—.]*Þ{ï=þøÇ?òÌ3ÏHlkƒ¢¢"®¿þzé•W^ ´´”§Ÿ~ú°©õÈm×H×OèK¨vÑ–2âþz”°›H½�Úµ ÖtÈlÁàp!œèm¹Ø 4öâ¬i³Ø°uçÿÜVÿqȆش½L44¹qجæeÒ£[gé¡×ŠÙ‹j±æH.«ZÒ18lt­§W_Xõ¥ ycrï³h$šŠ>«Í%¼ñØMœ4æ˜Ãn%éŠ+®³gÏ&++‹�;w§¥¥•ý«Àܘ1cÄ’%KèÝ»7Û¶m;¬ÚêÕy Å=/}ƒ5o(¦ôn쩤ÀŒdR ƒ¦�QbÞT¦l¸™P])ñ¦õ¼ùàeÔ�ÿw{ýÓÔ UUY°h™xùÃïØ²£![‘dBUHDý˜äˆ�3‡`/:ƒ=½% ƒËN¯“d :ÃòOT<­Ñç@C²@S)Æ@)¼t/G xX.«®Zµ €£�>šÿ”¢1~üx–,Yž={¨®®‡M›]9ùt)ÝeÓf~Œ „H¦{ˆf•ºµ.r†Éj¢¡ÄEÜ“JõèÔŸ�NÏ¥÷¼ÃÌ©qθ1Ò/"Ä®Š1å¾WØYÇ`ËÆ”›�¬3Rò—‹GHD}(‘$� ½5c¦�§È¤§'£Ï�²ÔÞç`1O9áÆ­¤‹ ¼þ={–2¨ªJmm-½zõú�ïïÓ§±XŒòòr «ö:ûÔ1’Õl|ä}"ªBÅ�Í4¬K&æ 3R¿ÞE´EBF–ח�¤gÚŸ±µ¬FT6x(¯i"O`6ÊdròÈAœ2f¤d4þ³«6lçßö ª¥Kv.:³YoA’õ€¨è 2ˆ(áæjüåK±åsÄŒFø~~œ`¥%ÔLY-¸�ºõ.¢�2*Ö¼Þ‘à¥Ow¢3Ø�ti€@Ublªl⃼�í‘×ÄŒ«Îâòߟù“�fmBTÖ6ˆKî~aëŠ)u7aÒQzäKXŒz�DØd&{Ä1”|½—½«WÒ\2ŸÐIRò½…pm²DL,�Üû®ßÄ€Üï>?ó�½ úÏž¬I.— ¯×û³VŽÚ¿çP,˜ös5l�ôÉ3SÅ„Ÿ"Ü6|É�V\¤÷³�?LO]‰ƒH½„PKfdƒd}2³VU‰JÄK,ÐÀ�³>gá7+ÄOÞ%¹œÎŸ qÝC³‰ÊÙ˜ùè­Ù¨‘V?{*öm⟽´„ª™Ìî�¨Ý‘O¨1·¼ƒ«×8Ñ྽Ïõ8¶—‘9Ï=}Èßýg-çÉ2999x½^vïÞýß¿sçNÚ¯>ÎôíÑUúê¥â¬ŸÀÓØ:|RA¸7 Ô>V:¡§v½…¦µ{Л2AHj‹EEP0“Ók"¥vëF$½™U;öræ·ŠEsž•Ì©{ãé–¬Ú(ÖnscÍ€Þœ�ÞìDI°Ûløü~ê›}ôìšö4«üãƒ0Q�!™�M.â±jš7½‡%w1w9ÁºuLYÀ¬Çî9ln‚þs6l;wîdÕªU„Ãa,Ë¿|ï×_ @×®]éÒ¥ËaŸÛÕ¹0_Z8kº˜|ë_©jT°¨*�ÜWá)UIĬ„êÖ#é Ý#Ê £°S~Ûñ±h”’² ¾lŠñ†RU‘`[ÍN¦ßÿ„xöá;$HÅ!^ÿx){6:“ÙdC6Z1¸ºrÜŸ×2æázîù¤n߉•þaO$#:£ Ùh'õáÙþ�ªU\5¾/Îü³&Ã�¸ð ¨««ãÉ'Ÿü—ëÝßÿ}[$û¼óΣ#Ö@ý-(ÈÏ•>}áv©«½žpãf¢ÞJâÁFâA7µK–ª £3§Q�—Ia§|� •UÕ$ Œ&GõíÉu»÷Õ£·¤'ƒÈö|ÞýìV¯+mB|_²Ù`OM �H:#k1CLYÝ0ÙÚ—{‘@’‘d=’l@Ò‘ufdƒ•D¸…sŽ)ä¡;oÖ>ÁÂi§�&�xâ‰<úè£<ùä“ÂçóµÝ 0�³páB1yòdb±………Üzë­n­åöár:øâ•û¤AyÂõ›ˆy*V¯%  3;Ñ™ì|_gÌk8îÁ&¾¤cÔ=ëÙ[Ý@zš“kIgAgt ·¤#[³yîչɡmSsË{> IgY‡$ë�$d$§LNÁþ“CI–“R´=tIAôf¢qEûÔþÍÄúí·ßfРAn¹å²²²nk}}âĉœqÆTUU‘““üyóÈÉÉÉÐZnÌ&óŸ»S:±Ÿ‘`í:1?:ƒYoFÖ›ðKË}1gtÅ”•ƒ.k%{ÛŽF@Ò›� dƒ�ÅÉ¢¥k‰ÅbÈ�pô<$� ¹ß’ô†Ÿ¬!¶½ÞzDê§©©YûÄþ yyyÒ²eˤ[o½õ'“åX,Fff&çŸ>ßÿ=£F�ÒzÚ�Á`àÄA¨È:’Έ$@Ò#Éz1Åé¥Ù¥” nã´½øbE)5ž´ä¸®u„c"* lÙZ*ôzYB$b5ž\²R &’Ï q�JcM{jBI¾.ˆ„"õÿD —+Kû´þ‡ƒÇ\züñÇ©ªª­b¼óÎ;œwÞyU…ñß’&O )�,ƒ$%Gó©•@#s¦ Úïý[v”qï‚rt¦b”ˆ„”�#T%‚ªD‰(ªE  zâûΪª5†Pb¨J5õ>U £ÆCôìZ¤}Rÿ¹¹¹m½@VVš ?ŸDBA5°K=„H TÉ`fö×[xÿ‡m¬Ù–Ì’éß«;_Üy &Q‘ ð‘ ôµ®X!’Ë®GìÂÊ]ô1?²Á†ª7�ª’ˆî@’ôèŒû"¥z5H¬y3j<ŒŠ5&  F(a7';Bû¤4N+B‰"ÔjÛ('ŽHÄ1Øòxi�½CO"äÜmë¹y¤§9˜x„•·–¥ŽI¤¾ÜãìVkRˆÉ§Œà»’è­é©•&J¢‰% !;;g¿_búù'0ýüäóaS^Ä•ID<ÄCͤé5r„6îÕ8 ìÕ%²�D4€ÎJŽrT�$»1Ø !…DDF•²æ}‹=Y6 5I~©ÇC$âtJ€úK2ÀÄq'H]³!î«#lD ·$ÇXÿ ¤ò–ˆùª¸íºËÐbŠáCúKÙ�q“ˆúHDýDšvð÷iy\0¤Š¾™»(²nãwÝvsß„žmÇ­-kIŽjbþd¢jØÍ1GöÇn·'{�NÇs÷\ËYx˜˜$# :‹“Q×ÏC–� §.r‘@¨ñ”]A”x‚xÈCÌ[ÁèÁE\zñ…Zïð_¢×ëÛR9òóóµöû/¹ì¬ã˜ùÎJt&;’l óÑ­0�›‹òÿéû?úf _¯i!¡((aw² ’¯†¯ºøÑ¡wæ"¦=4}Z÷äýŒN$ƒ99“Jr ¢D<©;€V2 ÀÌÂ÷fKÎvIR‚H$ʨsoõá Œ®Bd£•QƒÒZœI÷\VƒLDì¬óñÍÆ:¶íMÎ3âÁ&â�Z"Í»ÕÛÉÂ÷Þ’~"À?–®WÍxœ€ê@oÍ@6Ø’ëµH¡ Æ£¨12«ÕWŸQýxùÙ™‡L w�ƒ� [·‹3¯þ3бƒ#Y]\§·¥‚Ír2;VU’+¨± JÄ�l$ê)'×äç›�æ´­öýÓ-¤¯·ûcϼ²{îÇ_ã‹ÊÈ HÉsj<Cú2ãÆ«9eìï´n^ã7gMÉ&qîï#¢ËBoËFgt$Ó¿%Ý>!â!±J°‰¸¿†B§Â¹¯Ð¹sQÛ5üo÷T+ŠÂŠU«ÅÆÍ¥„¢1*Eù¹;êèƒþÞ͇U5µbê]�ñíš]è¬YȲހ‘ˆ¡ÆÃ(a7"XÇïOÍãÞó“ÂxêÆí¿%6‰7ßÿ„U%[)¯¬Åë÷“á´Ñ¥ ›FÉ¥œG÷nÝþéº&„Æ!�Hí®“åŸWqIBC£²Öššššššššššššššššš‡ÿÍžB� wIEND®B`‚atomes_1.3.1/data/pixmaps/field/td.png0000664000175000017500000003410015212624223017275 0ustar lerouxleroux‰PNG  IHDRÕå¨N@ pHYs  šœtIMEà 3'ËØ IDATxÚí�wxTÕÖ‡ßs¦Oz¯¡÷&E¤*‚~6Ä«R�‹Ø¯¢€ X@@Š]±Ñ¤(RDé„Hïe’LŸ9ûû##—ëU/HKà¼<óLœÌiûwÖZ{­½·$„@EEdõ¨¨¨bPQQÅ ¢òGhÕK RW8–™/¦ñ3{R �…‡®ÍÃxfø-Ô‹‰”.Ä÷Kj}uãr8HùåQrò$B£%±SG·m+Õ¶ã<�ž%îyy5q Ñ4o�[Hì=^Neú6VÍ~”&‰ ’*•¿…âõ²öí·Åγ ,´aDÂ… /r—æÜõÖ´»öÚZ#Š^cç‹¥%#z ,†z<Ø%˜ s™þášø�dÍ/�÷±ª1ÃUˆ‚E'ž~�…n:b -ºp{ãz$>ÅüþƒX¿ô«Zñ¤Ì-(Yù Zs_¦·cq¤Xñ ­9œ}iùTVVª´Ê¹³fölaÿlÍÐÑ-õЋ†Æ~´¿ùF®�‹¢…Uæ³Ñ�sêøñË.«Ã’B ¼vLÈ%H/±`“£æÿ�°X,BƒÊ9át8Hžù h‰DCœO% cöÏç’±m'žìr¢Ð_îáÓiÓ.û1'D‡K’»·­˜GºpC¼?_ÿšAB` [1~:qqqçí&©½IWiÛ¶ sNAðCÆŒ„}êLJåYD¬ýG÷kÐìÎÄ™`dv­ûñ²s¥Õ^†Ë‚­à {F‘_XJ¸QÁâ-ÄVp�‰÷ôA–Ïÿ¹®Šá*£$3 Ÿ[ #á4‰\» £É„åÇM˜  C‘[FqIÉžˆððN—똟˜½ø@¤Žz–¶èB¦Á!\ľ6žÁÏL¾h�rùæd1~ÎnôAõPÜvÅit¯oçË÷_»èuRªePùCú>ü°ÔbÁTàÆ‚‚?­Ñ“7eæEs™ÊÊ«FM™¿�4OuëqÞ~ù©KrΪTþRÍç½ò_‚Èf&+/BP=þÝeóÝšX$�¯£{I*SÇÞATd„¤ŠAå²Óï‘G¤f¿D+ôäM~‹UP»Ø$¶´¢1"Üœå™tM21ôÎA—¬Œ\ƒÊÿäFŸ öŸ!ˆ–èɽ@‚°Z,l|ì1Œz·µÙzŒ9¯Ž¿¤ç©ŠAå¬Ñ|þ«ìÃ…Å×ËÔÊ'ˆ•çC,ÿ´ˆÍ(eôÆdmÇ“—ÌŒqwsI©½I*çÄú>)£¦Ðýé^¦Ã¸~a ÷¼|î£Í’W¬ÛnI=´8¤ã¦ê¶žÌXöÝ%e§ŠAåœùiÁ‘òÈs´?£Ûõ0.´Oþƒ‘³fžu#®ª¨HœßþšŒ§*Ñ ‘‹‡]ѦíÞAl|ü%ƒê&©œ3}G�’šÍ{…}¿‹!¼³?eá“O�õÓuåÓ2"OYÐ!aAá(n¾òÒe‚*•¿Í€G‘šÎ{…½¸©ð ¢z¼oÆ¢³ÄÁ~¥‹WˆŒA64ºs÷C]¶IT7Iå¼X·`�H}äY: 'ë.Óˆ?q™lUUÌk�HÈ(ÿ·{¥gÚž�—Í*¨–Aåü-ĨQR‹ùSÙ‹‹ ü|.“gö§,yjü>iWLœ$Â3ÊN»Gé¸ôÚ+—UªeP¹pâƒÄáQSèx†…HÅ…sø­èìŠ÷ $¿C\qi…$ Áåë=*Ð…™k×\ö9šT1¨\0Ö,X Ž<ò|½L±ãB�?d�Š‹fèÐ"‘‡‡íáZ^ß³ƒzõë_v1¨#ÝÎ!(.(…99x<¢â㉎�—$IR¯ pó¨Q’ŸŸ¿ØûðS(v/ŸË†# aG`@¢ÜçµúÇýµBªe8KömÚ$6/ù�ã›·àÍ®ñuÀŽ‚DÃ×rãÈ‘të×OU°jölqð©Wè€�8´˜�q´�ÁŒØ—NN™•tÜìʼn96”÷�–ü.ûq«ô_p2%E¼Ü»�ø¸÷íØ>ùžÆÙÕ´AOKô´DG 4ηa[úóo¼ƒÇ¯»^9p઺XNœ$-¡È!ãl†ß+ÏÓõ§µø…úÓMÐq3f‚ò*YÿÝwµâš©bø¶.[.f÷ê‡~Ó~š£§!:Ð�–84Ä¡%‰�ÐÓº­‡x®WV}öÙU-ˆ¼ä}ø!a@B$¦Y�gÌ@'Ëø!QßGø!‘¶sg­8n5fø~þr©øîÁÑ4tiˆ@KÌHè‘Ð5¾�„)ÒDPl8•niyEËíh+<,9§Ó)î1âªt›ª+-@9ã…â…Ó¿ à·'†ÃfWÅPÉ:zT|=fI. ÑhE&™ýaF¾�L$5¸N�Ùc§�«ŒÛ‚Ñ4¿õ›ñ¤�@± ¥¹SK821h (SÈ÷ o¯ú^Ü31 ^ÔŠê&��qºÜ£ùwFˆšžq}ÅQ&ÄkhÑ0ž×ìbÑPßç¿Yt ¾ïðÂô§_‰¸ìvVßyOHÓ”bb V9IÁÅÉž-ÿá’³òûMf3#gÏ’nY÷5ûš„p 7Õ(ø#Óñë°¸óuü8¾PÅp ˆŠ�Ç~Æ"— áq ú€×U…×Y…×a!¤º_ÂI‰¢áE6ï—‹U£ÇˆèU»ièoÄRéæ(.v7 bâÚÕû`2›ùöléÆï?g_ã`ŽãÆê³ÍÐûÃ^¹} ¿Y/®Z1L›6M >\,_¾ü¢™ÊF=®ÇâËŠv./ÆU‘‰»º¯­ŒÞMµD†‡ðă·±ý­�lcs†7Ám-Æc+Æ]•OÛêª}ßaA¡E·®èõú+N?LyV˜~OR€ kµ—c8Ù«gôÊeD_€•7;÷í+MÙ·Gò޹‹Ý¸(ôY‰(td7½‹×¿:ÅàñïŠüÂ’ ÖêL½~ýz6nÜHýúõ¹í¶Û.Ê>ú�z˜w>[A021Õ­²w’f A’e¶ððêwÍzÄøbá!';w•§%MQ×—{¨B¡/Åx1lØ'„_ß{O¸__B³ —C!'¿ †,ýŒ¤-.˜4ûù1jÎi÷àÁbåcãhx¼œu×ß…7¼)&¯›#eEô|lÏ=ÐE<0¨—ºôí…¤c�Rhß®¢è§]�¸#3‡· ¿RéõpÄ˱üBd�$ áuãuU㱕â²d£bX~6Ne(£Úµƒn¿ýŠr‘¶¬üAä>3�®F# 'ÝN~1»¹ùÃEtºîº‹r®�o¼Qj¶{Wâó¯ÏÍØyLÕEhÍaèãðyù“t–m>(Þ™8„z1‘ûÔ˜áw<þî;dkÉÇK5^Ƥ§Ñ }-Õ9{°Â^œŠ½8­æ½è0Öü}x3·2,ë(ÁnA1^òñ’¤ç_ï½wE]›-û2Ä£+ª™9j»’špÊé`+®yg½_Ü ‚‚OÌž>Yš?±7ºêdeÇñº­h ˜"[�ZOïÇòÙªŸ…*† 74k&�šÿ>Ç 9x¨Ä˽9ùˆª%G©ÊÚAÕÉ_¨Êü[þ~\å' °äáçV(ÄK.^NcßœAûޝ«�’‘'�³cT¤�8¦öx–ÕazêO}šÁ#G^²óÐóië¢ Rï&6¬9{p[‹@’ÑÆ¢ ïÌóážÉï‹âÒò=çúݵºPÏív³lÙ2±mÛ6–-[FVV�;w¦OŸ>ÜtÓMôèÑã‚ßEQ�e™µß|+æ<:š¨RáhXܦºÐFÈz?$IBqÛñØËpVd”»�¾•.ŠQÈ 60þíY }à�+F™ù%bðË?!¶E޽$›ê¬ÜÓ¢š×_™tÙÎóû ÛÄ„÷Öà57E�¬7#¼nÜÕ…`Mç¥aݹw`O©Î‹!55UÜsÏ=¤¤¤üé6ƒæ“O>‘.àøÙ§žª™ nÖ¬YÒ‘C‡ÄŒ±ã(üy;[÷AV#�ngÎòlÌy{i`±Ò¥-ÿz÷]:vî|Å¡¸¼rÏà—Öv´éZ`�ÁQ’KuîºÆññ“.kÉ5@YyŨño~:Ó!;¦ˆæhÍ¡H’Œ×Q…£ì8]’à݉÷~|w�Cnn®èÞ½;YYYÄÅÅñÐCñí·ß’’’ÂàÁƒ‰‹‹ã“O>¡ªªŠ~ýú±nÝ:I¾µ+6lƒæÛo¿¥ÿþ§ôOk׊¡ÏÌGÒðÅbÍ`Þü9ôí×ï²7Ž ‰Õîä¶—WˆBgcÌõp”`Í?@¢ñ+ç>' †Zs¬ßoÜ!&¾·�©)úÀxd� áuãª.@¶¦ó°îT» ·ÌJ°QæÿnhOý¸h©ÖÇ “&M"++‹˜˜6oÞÌK/½$EúFCµk׎9sæH}ôz½žõë׳xñâóVtYYÙ¨Q£F1räÈÿ@ß›n’$ùw{©fêI‚€�PúpE Áãõrÿ´U¢ÀÞSD=œ%ØŠÒSRøöíɵJ{w•~]8~z÷úåXóöඃ¬Á�ډ疤2}i_íÒ°x»Â £°èëu¢V‹¡¤¤ä«U«VðôÓO“ô'=n¿ývéæ›o`Á‚çß‹ôøãóýýý™6mÚîÏl6ñgUFâ Ì/�ž½F¤—Æ`Žh€»ª{ñQ U»Y6ë)üýýjå1‡…†Lþèµ±Ò›�vF)Ù�³ìŠÛ�Æ„)º5õºaŽnCó�ýo{3//ÜÂîý)¢ÖŠá×_½«ªª €!C†üå¶wÞy' ¢¢"ñïîóرcbãÆ�,Y²“Éôg]{ÿ6 Hÿe!®$ž[¸^l;€9ª{5ö’ãˆÒí|óÆ£ÄDGÖú“½ó¦žÒöEOOïS„5/n[ ½?†°˜b#8¹»§U‡.¨!ó–®«½–!##€˜˜âþGZ¿U«V¸\.2~ûÿAãÆ�¥ôôt©C‡¾¿¿ˆ­®$)¼óͯâÛ� æè&x]Nì%'päláã—†Ò4)±ÎœjXXÈä/ß|Jº©½ wU>Zsº ínÖ¢1è@Ö i dç—×^1X­Vüüþ·)>³é·¿;EaèСâ—_~�ÿ«°Lþ»³Ág®�é%¿øi¯x]~±-@Qp”œÄšµ™y“Ó¥C›:y’-7@Öù¡¸­8‹+Ùóy5îjKMq¥ÃB°Ÿ\{Åð››b³Ùþç¶ÕÕÕ§6�缯™3gŠ 6G,]AÆ=éâ__œÂÝ Y£Å^šIeæ^}èZú÷ìZgOðî»àµÅY~gEöâLœÙ¸Ê2q”åÞ›®­½b¨_¿>yyy•ýÕ¶G�=ýsƒ ÊÏe?S§NeúôégWbýgnÒ`ö§çˆ±s÷aŠjƒÆ`Â^’Iuövž¸-‰û︩NŸaTx¨4mô TŸú™êœ]X󒱿î¡*ëî¸.–Û8}~µ®PïÚk¯Åd2a·ÛY¾|yȨQ£þtÛ+VœŽ"##CÏvN§“áÇӯ_?† v–7[œñ“ø7©®ÍÂ-„`Åæ½bÍÎcØì’碯?�9[IÕ9{¸ãF ½"ü¿»oî)5OŒs?ûž9™„†ëúðíÜzSßÿ8¿Z'†¸¸8©wïÞbõêÕLŸ>�Ûo¿}ODDD§ßo·mÛ6ñ›|ðÁsÚGuuõ´¶mÛòÆo|}ŽÍ¨Î›·ÇÃÐ?û3 èü£ðZs�ýb(O[޽î8+2é‘dãÍ)¯¨.²ÖÍKï¿òÔ_nS+“no¾ù&œ8q‚^½zuüðÃ…Åbàäɓ̘1CÜ~ûíTWWÓ±cGÆŽ{N7.,,lò’%K¤ððð»Ï^â H5q³ïŸR‡,Ã[Ÿý$æáÛ�¤¦¡ùø~FéŽ1¼)e‡¿£Yp‹^U®9Q+ÅЬY3é믿&>>žÔÔT†Nrr2ü1ÿüç?)**âšk®aÅŠœm6´¬¬lÔ“O>)~Ëcœ ~~¦?�Ÿë�•øúçãèãÑ™túè#¶nÝ*Å�ÃñcÇÎß´iÓߺÙÁAA¿›ã7O©n=A‹ Ê‘d-û¹X‘ž…G ÂeѬÕsâT6W+µú6yÒ¤I“úôé# 2d/½ôÒ9·ÀÏ>ûL¬^½š 6üi–ùÇ Ü£d¨C.ED˜»½œ(­›[Ú6'"ÄŸÖ1Ñ|»ásʬ%´lÚHÕLVV–xúé§¹õÖ[ù»åÞ~^÷ûHHø×!ëðÀ�­˜½,•ç¿i�öûSÜÓ±œS¹å”WÐ8ÒK‡vm®Ú¥¸®Š‘ncÆŒ¡Y³fX,f̘ñ·¾#®2ïw¹†š6£AP’ŸUg®Å¸Ü"õhì¢êÔfªsv²pÙÖnÜG 3•�Þ|†«™«Â2̘1“ÉÄÏ?ÿÌ”)Sp8眱6XKh*…# {à6†`rU“Px˜\§¥Î\ I’øhúxió¶d±bÃ6ìv;í›¶áÁ{^�þN_Ãe _¿~$$$Ю]»³þ›ƒŠœœn¾ùf 22’)S¦ˆ%K–ˆÑ£GŸ“; €Ù§h“��+È„G(8*íäᆠ]�»ñ½ºw”zuïˆÊŠ+u±§ÓI·nÝDRR_}õÕé†?uêT±`ÁöîÝ;=,,lòÙ~ß„û ëú#£AÂé›$,G‚t«¨P—½Uc†ÚÉ”)SDyy9sçÎý�,ó„ ¤ÐÐP† öO¯×{N–á�Âç?ûLEC­`Æ bþüù¼ÿþûü>Ël0øòË/Ù¿?÷Þ{¯°ÛÏn¥IóïJÊ¥ÓïªAPÅP‹ùâ‹/1b øÃ–Ú´iSiÍš5ìß¿Ÿ®]»Š�7þχ{PHÈÿ´*ªj|ð�ôÖ[oýemݺµ´cÇŽG:wîÌ AƒèÑ£‡X¸p¡(((çê*©bPèZÇÖ­[EëÖ­¥Àsœ=--MÌ�;—åË—STTD“&MhÕª‰‰‰ÄÆÆJö�ë9ñá·#£EÂ… …|¼ ÒrT  U1Ô²²²D—.]˜ü‚ áøþýâ¹kºŠ-ODdäÿ©u𸊗|Ç+×öfÆã� —Ó©¶,5f¸´¤§§‹&Mš\/eϺuâã!gQGæ.¬B‘Ñ!áFPå‹Òp1–Šp“ƒ©{kÞ\ý}£ ààjS-ÃEgãÆ�¢cÇŽ¤¥¥]p5ïýñGñÙ�I´ê¡%-¡üy,"é5´OŒ Þh ZĶC<9ঌ³Ín«¨bøÛTTT$Ž5ŠaÆѼyó jÊ‹ŠÊ>1Šx‹—(4„#†ŒñOÂd   U›–Ôó3�†84xvæ� ÔBÃÅå±ÇË0›Í̘1ã‚»HŸ=û\HhnhE&™ßÄPàôÂé¿�}km0¡äàï…@dBщ†í‹?!yçNUª.ëׯ«W¯þ˳ÿ.%yy"õ‹o C&?ßËŒD' 4¿¡3}>z‡‡R·ñøñd:Oý'�ÈŒªÖPt$©ÂƒH#é€ÅÓ¦©­¬®tÆÔµîÛ·¯´~ýzÑñ",øËÒ¥„ZÅi˜�0 ¡÷½_{Ó’ú߈Çn'ºArÂ#èCz‹‚��Ñ·­‰dmÜL¥ÅB`P�ÚÚTËpaP…êêj$I¢óEZ3-}Ë/˜‘0ú CB ¾w Óó©nÛ“ÌeË0K¡hÐ@ëÛNï{‘0WºØµc‡ê*©b¸pÌš5KôêÕK(ŠrÑöQp4½O$d@ö½k�hî�‰m\9´fZWI–Ñ"#ù.ä¿_@�8ž–¦¶4U †ƒŠ©S§òØc�q!2ü3J Šþ°Ï¨&ó,@+ƒ¿œ1ƒŸøÝv¿Gò³sÔ–¦ŠáüùmÆìÞ½{_”,ó™üýð^ÀƒÀ{úUóJ¥2re53å !ð œÞ^ñmwæßxÿÀµ¥©ôùóì³ÏŠÒÒRÖ­[—|±÷�+»Ò×mZÓuêöý,SS§¤;V�ðÍÕª( VŠ÷–x`Î{R€šsPݤ³å‹/¾+V¬à†n¸¨û9‘œ,–t¹V-YK'ôÔGGçØ`:]Ó‚b¼”¡Pîkàì>è7WÈ 8|.ÑoÛ”á¥/UþZ&¶oŽ’R‚ùX÷µkE³í{y³Ã5bßYÌÆ¡¢Š�ììl1~üx&MšD§N�.ŠUŠÂºiÓÅÆ^·Òîp ÍÑƒŽ€ÎõÐÜ?˜’ ‰B<”à¥Ä×ÀËÎH™¯á—ŸñY ^ŠQÈÃË-²‰Øð0̃;`@¹ù]‚Cx 2†ÍwüƒÅãžN‡Cm�ª›ôÇ(ŠÂ€„Ãá`Ó¦M%V(ËËËEÐÚdš # �z´7]ƒ†sÅJsª8‚‹¯±ŽLšÓ1„Ö—„«éF­±6_œQŽB!^LHL!˜P´4 Cnßqø¶ƒ…oBn\�-ÇOp0,€»@“öíÕXBÃÍï¼óŽ8p �5ºà dÿªïÅöÑOÐ,×A‚oŒ‚9)yP_”ô ¬Rls’�— ÜlÀŽA”/v0ûÄ 93ÔÄ Ö3b…ü ý,‚îI@K‚Ì軶EÁµ# ‡Ýƒ©m<™n+OeÒè©1ÜñÌdI¾„ã·UêP}!ñ¸\¬œ0IT½û-у† ´èû4EêÐÏÚM”§RŒ‡,<ÁMZ=îŸ7—ŠÒR¾øòÉ‘O[á  ³ ÅzA³¾½yqÖL §òýOÑ,ÛJz¢ÑŠÿvÑHÍ“P’cK/Gn€·~4Ž##)ž>ZBÜEÇ­R‡Äàt::t¨x饗hݺõm Y‡‰µÃ">9›D_‘¤ í ^·Çê_))±Q€—“¸9ˆ qkžž?�¨˜ Àãñ°fÙr±uÝZŽìI¦¬°�ªÂ2BÆݰ!­ºucÐÝwӺͿW½).( G�A^¾…–èIø­w*Ê„®[k¨ªÆ¹ë. Œ­8ZUÉšü|:üëYnzä‘«rµMU À„ Ä7ß|ÃîÝ»“/drmóܹ"}ÊTZX$âÑ‚c»hä{âÝ‘LÕ–ãá&Çp“(èñâîòIé¯j „x½Þ³Z(qõâÅbóÄgi[¦�ˆŽ(4„¢ÃÜ¥Rƒx¼»a;Y…®YöÈPÖ¥¥äš6 _²¨<ôzW¹İiÓ&që­·òÕW_�^Tä|©(**[õøØý×?ÓÌ$ùéÑÞØ©^®U(;YA!^²ð�Š‹ÌVñ<ùÉG´l×î‚?’3�KF=JÐæ4GO¼ÏJÖ @Ûµ5äbOÎÄc–1¶jÀþÂB~ª¶Ðûí·¸þŽÿSMÄÕ †ŠŠŠÄN�:e 0€÷Þ{ï‚Üô´Í›ÅÆa£hši¥>ZÂÐ`nˆfPDNÖõÉ”T9ÉÇCöâ$ö‘!Œ{óMÉÏßÿ¢ö”}õæ›âàÔ·hS)Ñ-Qh1ë1uJ„ˆP<;R°çÚÐ·Š "È�ïS�âГ‘óçI~j±ß-†É“'‹Õ«W³sçNÉl6Ÿw�¼î_¯ˆâéÐÒ£%-Áh1\ŸˆÔ­žõ[¨Ø—G1rðp£ Ü5{&· ¹ç’=}S““Åç�Œ&&ù$MÑç ®¡éÜ‘‘‰}w.J”]óvfe³M#¸uþÚßpƒj%®T18òòòÄù΄W|ò¤Xþ�‰ÚvŒFèˆ@C@¨ÍÀk‘ôzì«6SVh£§ðpö¾�xzÑBâ¤ËqÞŸ½ð¢Èš³˜66-õщ†à@=Æ.MÁdĽã0ö"'Æ1è4¬YGstD£!РC×· RÓF¸Wm ìX)EgÉ'šF2zÉb:vëVkR¥ÅÂGOO‹¾£�¯ ö?u^/®Gp¸¼˜ZÇsÊídå©LšLxœÛ&M’4j¢®îŠaÖ¬Yâõ×_gûöí;Ë|bϱnèƒ4:VNCt„¡Á/ÎÍàÞˆ²rlkwRbqPàË$ïljyÈMüsþüs^ÈäRñówËÄšqOÑ,×N’ÏJ„ Å¿} R³FÿNÔ%àMˆf}Z:§š$pÿ‡‹ÕD]]áC‡DÏž=yã�79rä9ß@¡(¬{}šÈ}í]ZÙ4Ä¢% Æ. H½ºãÝ´Ë®,Šð�‹‡tÜì Ópˌ׸sĈZß` ssÅâÇÇ"/ßB+ôÿ.#�6×$ê,•8w?�¨;RiamQ!^~–›yDD]çŸ~*Ö¬YÃçŸ~Î7®8¿P¬zðABÖ É—; Ò£¹¥RP Ž•)Ë­¦Ð$ÆEi×fLøô\„:§‹Éò÷ß;^x•V%ž'êt:Ìê!Õ�û+Û©šD�-2”oŽŸbËñîs#‰Š SEQ{“Ζe›’Ås‹vñØ–ÅôÏ.ª)°kŠ|ko”´cTo:D‰ÃEžÏ-ÚcòÐdÌHŸúª¤?c&‹ºDÖñãbáð‘„þšJstÄûr&� h»´FäâHÎÄë§aÆäyüb3R‘²‘—‡_Ë�7õTQ[ŰuëV¡ÕjéÒ¥Ë9Ý$«ÝÁ”ykÅÚd¦Èß}ò“�ڶĽz#åiÅùri¸9R?�‡/¤{ïÞu¾A(ŠÂ—Ó¦‰”éoÓÖ—¨‹ü-Q×¹„‡ð™#šyÝ^"¸ž=å]»ŠM%Þ¯¤ÎÊQ»Ä`±XèÔ©“0`ï¾ûîY7ÐÃÇsÄCo­Áâm€!4�9c\Ãbvñ�¥ ±¯ÞJi©ƒ<œÀÍ\Hƒz2~ÞûDû ì®Ò’“ÅÇ#¢ÞÁš¢' ah©è˜È{_®âÔ)EÉ6´…˜™»·ãÎÚÎÛãn¥G—6ª•¨-b¸ÿþûÅþýûÏ:ˬ( s¾ùY¼·âú°VèƒâÑšƒ‰ho¢Kw‰ý{z?;‚^;6‘ë+°Û"qÃËÏó�±c¯Øït8øäùD曋h‡žzèxvØ;XÛõ§aO#z3ßèÂUj'<ш¨ÎçØ�+¹£{/޾S2�jk¿œbXºt©xøá‡Ù°aÃYÍ�ZRfùê±Ù«îÚŸí‡)¼ Z¿( ¡�´è£#2¶­qR™Q†§ì$£–§´¤”¼ö »xÑE)°«�$oÜ(¾~d 'LMH½~ºÀt~a„¶ ±³Ìɽ‚²+†ˆŒ•ÈØò3fË!æN¼“¶-’T+q9Ä�““#®¹æÆŒÃsÏ=÷?oÂ�Û‹ ¶â55Åœ€Ö†’×ö“ÉͤýT�£´wU>޲ 8ú=#º„óôÌ™’á*{êUWV2öÕĆT'~ÑíÐÕCç�1:˜¤Þ<.8ù³oµƒÈF&ì'9µå{�Èøaƒ¤³)=WÅp±Ûí¼ÿþûâ‰'žøË,©ÛãåÅ…kÄ׿”cŠl�> ]@0õºhݶoòR¼¿WU.Kö’4dË!fOÊ ›ú\ÕOºoÖl“çþ€Ô cX:ÿhtþ!Dt ¡•ım •Ǭ˜C5„†¹Iÿi=±šLÞf(‰õbU+q)İeËÑ¥KÉð?º5�žÊ�Î\C�=ch#´~£ýéØ_‹ ìZcÇž[Š«ºgÙIlûimcÁÔ§I¨¯ÞL  ¨DŒzisM˜"[aª‡Ö/s|Mzë©*‡ì-„ÛEt’‰òŒTrw¬aÊ}�~Ç�ê5¼˜bHII=zô`Þ¼yÜ}÷Ýz±—¬Ú*f|uMp AñhÍ¡„¶2Ñ­§ÄჂS¿XpYJpUæâ(=†=7ãîê̤ÇG^ö»Ú†‚EKW‹W?Ú†>¼ †ÐFèü£Ð†ÓÕ�¨†G·x±eZ ˆÖ`¶qä‡Õ´«`Î?ï#:2\Å…ƒËå¢{÷î¢~ýú|ûí·x�+«mŒ›½BlK×aŠh†. }P MnГP¶þàÂr¤wu!NKö¢Ãy3Xðòhºvî Þ´¿àØÉ,ñðË É¬ŒÀÑ}P<:¿0üiÒCGq– ‡IöÓPOÁ¡}”ú‰£ûrkŸn’*† (†I“&‰¥K—²{÷îòÈ?¿»u_ºûÞfº$ ! Ðù…á—àO·›dJKàÐ:+Žâ\Uù8ËN`ÍK¦o›æ¼:A PGz��—7}-æ.;„)º†�†èü#ч�p½™ÀpHßäÆQ`#$Á€N)çèÚ•ôl&3sÂ}R€¿Ÿ*†ó%//O´nÝš�?þ˜[n¹å?ž2Š¢ðúG?Š×`Šlíë &öí;®­ »ËqWãªÌÁ^|¥lSÌ?î¤Zƒ¿ÁÞ”£bÔ+ŸP¦ÔÃÑ }`,ZsAÍ‚hÒ]&;MPœlCkTˆ®¯#sç6<™;xwÂ`®ëØJRÅpžäääˆøøÿ lOå‰Gf~OfEdM�‡_†È@ÚݨÅl„kX³JkÜ¢òLlh\ΩO‘Ô¨¡*„óéÑs8xaö§â«_ò0EµÃ\­†°{Ñáø&®2; �x«ò9öãrî¹>ŠFß)®²uD â�Æ&,Û´WLY¼MP ôA èüB jf¦{o‰ãé‚ã«pVãªÊÃQzkÎ.Ø’Ÿ~TÒétjk¾@løu�xlÆWxüšc k‚. º&Q×:€ÄN2'’凭$"cáøÏ›ñ³bÁ”!´lrõ<�Î[ K—.cÆŒ!55•¨¨( Àæpòô»+ņƒ^L-j.~`�zèIJ‚­ëÝ”.Ç]]„Ë’�½8“ãs¦Œ wÏîª5¸TTT%>ùú›;1G·õ=œÂ1Æ“tÙ‰:'QIFlù'8¹y%�lÂøaƒ¯Š¼óÃoYæÑ£GóüóÏKŽfЇf®ÃJbMðæŽ)>€.dlÕ°o­ {a îªe'°åï£K#™^Ÿ4=,,t²Úl/.ß®ýYLzo rHkŒ¡¿%êB‰èäOB ‰ôí UéVüÂ5„„º9úÓ�ÄJ§øà¹û©#©bø„ 0@Øív6mÚ$ɲ̬Ïó׿ k‰>0�_‘íMtî{w)äî°àª,ªÉ”¤ã.ÞÃä{ó؈ûTkp ÉÉ+c¦.æ`®säoÅ�á˜ëùu%�ýkM¢.¦±‰Òc‡ÉÛ¹†çþÑ…nïsÅN}ù·Å0{ölñÚk¯±mÛ6‚B#’zcyÇ£ÁÃ×$|ÂhÕWGX(l[í¤êdîªBœ™Ø ­Ëå£7&м‰ZÞ†>¢]M™¼/QÛÍ�ˆé¿%êbtø­ýa5-Ã+˜ÿì°éa¡Á“U1ø˜0a‚hÞ¼9qͯaÂüm¿æBКC Lò§{?‰¬LÁ‘õÕ8Ë‹k ìJ3°åíáŽëâyëŧÎ{š•ó'íØI1æõ�9U†)²9ú@_¢®a0M{j(Êäí´#Ëb äØKyÊO¼:²eU6ì9J©ÅŠ—È ý»µäŽ=$??ó•'·ÇÃæ�‡ÄΔ ò‹J‰ñ§c³ú\M[^ýx+¶WcŠl…> ]@0 Ý ´lÛ7z)9P†«ºWe6öâ4´•)¼ýÏû¸åÆÞª5¨Ex<f,øJÌÿ> cdûš„èïuG7ºqúuÞ2R–}†�uh ÁH-Bñ 8«qY ñ£”7ž ëÖðÓ¿ÃGË7‰×?ü »ÇYï�$É({ÂYN`“�C£õ ÇãOçþZ„»WÛ±ç—âª*8]`×2ÚÆ‡oS²Æ’„, $É…µè$:ÿ‚÷%¬µ‰n×K< ÈúÅ‚«²øŒ»]L¼ïzžu¿Z`W°Úl<7ûS±lk!ƨ¶§uÆðö2‚×MòûтЃ�´F$YFg2Ñõ¶HôŠ—l¤2û ®¢¬œ;‘NíëÆÐÓ?ÃËó¾KÖfb kŒÎ?Yï�ðzÔ<‡õÃQ¼.ænW(JO§ÕÐi}m[×¹¨oëÀžý)§·«.®FÖùãªïþGÉ1¬¹{pçmfÖ¸~,˜ñ¬*„:NDxX§%Óž”¦=ÜOÁ¯Ø #kŒHZ’V‡¤ÕaŒÕÓd€–À&d­IÖ"É:$­YgB6±mgr�8ßÿïN 1"ëÌÈZBq1éF ^æl=úo“"é�´Fd­ WU.åGWQ_Œ�K^àžÛoQÝ¢+ˆ{÷“ØpFÂM’$ÌЪ)ÆÔü>OCH IH²LaqI�8Ïÿn©r"ùkAÒ­ÂŽsW¯^¼þëšwmp†ƒå;yYFB‹­0…µëÖH&“Im=W �„ð:Š áu#‚³ì.K®Êl\–œ–œ•Ù¸,Y8ËOa/9Âàëš0âÁûêvzÉÒUâ™wWc o‚Î/ �ÁI£Çë¨ÄcÍAqÙAkÂ]Uˆ½è0/ŒÄ“cÔÅ2®ìv;Oz]ü¸;]@lM×»ì«MrYñØJqUœdHÿN¼ûÆ+uj™­?­Mš³ä+ñÊüUhë¡5†"i�¾Û‰×YY“i.;Îã÷öá•ç'«B¸ÊXóã&1ÿËUìÜ{—¢A( 8¹®S3žu?×u¯{SÏüe¡Þ¶]{ÅËï|Èž”l4†@�d„Ç�ÛVJ›¤þ5a4½z\§ á*Æív“››+dY&&&¦N�]?«ñ ™YYbϾC8\n´’ cû6$Õ±¥¡TT.ˆTT®þ燼"Ñ–zIEND®B`‚atomes_1.3.1/data/pixmaps/field/bd.png0000664000175000017500000001071715212624223017263 0ustar lerouxleroux‰PNG  IHDRÂ’oÆbKGDÿÿÿ ½§“ pHYs  šœtIMEà;ù”p°\IDATxÚí�yp]åuÀß]Þ¦íI^…mð^ÀrØ—€KJÊVBi! Æ.SC “�Cap˜ Ò’IãÔŠ—²†-mÜìƒå‚lKÞekßÞv—¯ÜûÞ»ÂX Íéüf.2ϾW–|~ï|ç|‹”ÖAëò-ADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAá0Æú´˜ÏåØÛÒ¢;[[ÉôõK&0,‹i³f1yÚ4%ßraÔŠ°eãFýßO?ÃÆ—^fÓØ. ø€‹&�ÆW¡g�z2'œw.ç\võ"†p˜ ´ÖŸøæ—ÿe¥~ñ¡ŸÐ½¡‰* (b(¬È˜K.à ) É À§Ÿ†¿º€+nù6'œq†!|öDؼv­þço¢ç­÷HcP‰*I`£0!Ìà£ñ¬P3CÍš|ÚñX°ènzð&Ö׋ÂgC„˾¯ßøÑCŒÐÔ`P�"‰A°B Œ’AFðиaf(à“ eèǧŸ|2SÒÜòóG9û EáðÁs]þ~ñ½sÕKLĤƒJ ’(â‘!‘‰ÂT(�_’AáÅ‚!RÖ×d\Ÿ¼A2´V,¾ëN®ºñF‘A8üŠeÏu¹oñ½wÕËLÁ¢ƒ*©H]`ÉD2‚ÂÀJ[Ø)bŽK{&Gw¦€�wCyF¿ÇÊ›nÐ"ƒp؉ðãk®Õ»V½D=µT…C¢ñP…fƒò䄱‹t]%é©“±&ŽÃ)8ìß½—ö´btgPy7Ì ‹7ÝFõøñú²+¯^]³A¯~}o¿¿ƒ�»Ûp|ŸdÒäè#'ræñGó•‹¾@ÃÜc>QÌ|ìÐèÙåËõs×ÝÊ4Lê"C¢TX ™aøEP(RãbŒŸ6³aêØyAý~;66²e÷~Úûòô¸=xtâÓŠÇþñIyý5æ54ˆ c˜çßxSßý‹çر7ƒ™¨Á°’(Ó¥À÷𽾓ÅË÷âö·qú‚©üð–kh˜72!*ÂÞæf}û)gPßQ`"&i ªKòàN‘�T)”EHÔÚÔÔ×bÌ?uÜ\HUÀ¶Ó³±‘÷šw³¯;Co!¡;ì$íÅ#vZO¬ù�²,K"bŒÑŸÉòõe�è××ﮜH`§0Ì8f8îöÑžƒörx…¼\N¦ ¯o77/½ˆ[¯ÿÛC–á öëÛn§º#G U¨’ÉH6ˆGZ¦ÑB¹X,�óq»ˆm߉Π"�]¸}Ø®&©ÁU@Q‰AÍηÞá©•+õ¢¥K%+Œ1 þò†ûuÓ.‡DÝ1˜ÉZÌX†•³�˜�a€a€ïdÈ÷µaÄR8f’ûý {ö·ëŸüàÖCŠ��ÌhlÔËœÉ ,&aR‹YÊC‡EÉP,”u˜Ì”‰]icWÅÑ–EÎqhÈÒÞ—£'ãÒ�G_ØAêÆ§-Ì ÙyGò¦M’Æ®çqþµwé­{±ê)XÉq˜ñj ;…²bA\yhÃŽS5q2ÓŽ›D2î±}c û›ÉõìÃék%ßµ�k.=�{n¿éceøÈèzáᇩŠ"Ò"�±0ø‹D‡EÛkÀm˜�Ñp,æüãÐÉdI÷ê;˜�ñÉöpMÈ¡É9*ïc¡±Ãg&0ˆ£IbP‰OÛûͼ°úßõ%_ù²d…1Àm®Ð[v9ÄÓÓ±R°i @ô^N›UÅü©5LWGÜR ä}>ØßÉw©“æbÇgÓßÙƒçÀ÷Ð~�åO¼ÊçOjÐ_p®qF(är\5uº>ª£ÀdLê0HcR‰*‰1\Ûôƒ_ÞÉiW-ö½¦¦Ð@¬´Ü"äñÉâ‡Ë.‚ ¶¾0#tâs�=¸TϨç´3F}l:b­éi£ð+;ô÷°ÆÍÛˆÕƒ]uvrF¢Š„ÞÃú‡.9è}ϬYÇŠíÓÙ³eý­-8ýmAVèia‚ÝÅï_zL%‰‘e„wÖ¬ÑñŽ IìA]!«ô‘p(TÙd€l6K2ÌÌ-Ã&� 4Fä~ >¿˜q Ö#“šÛ©oîõ"üfálv¨)c:#X•9Ìd3V…¯À´+P~0$Êår¼úûm4(P—R\¾p).=ëTžzóœ\†™Ä´+ñUXù:ö¶µñÄÓÿ¡—.ùª‘�¿ýO’á»=¥-·HU)°‹X(zŸ^Íúç^Dmk¦gáé|ñ§ÿùDå{Н²Pº$˜™Ÿ˜„ÅìQ5•“IN˜3¦Eðr]˜V†�Ä0(+Ž_°¸ÿɵ<±ÁĬœƒa'ÐÚcÕúu¼ø½³Q*ˆïÏϪ`ó>eÅQvÃJbÄRXÉ4+V=ÏÒ%_YFرi±Ò�G Úb1lP^ST|ýO^Æ%`rš�uµƒ?QÊÀÌ(¼0#¨ÈsÔ g‘,�¡:”a´“ˆ×`WNÓ"v%ÊŠcX1”ec˜6:5Ÿ'›Xé$f,†‘T6t´Í¡µµ•úúz’– Þ’M;¸¬8†•À°“lh|—?K×Ö¼zÈ"hn¡rXϨÈèÏ@AÒ„qU0ë(Ô„ ƒG‰¶Qg轃…P¨HÆ0Q¤0IcŽú ˆ'RXé±-‚G6&J™`˜A0[1 ÛÆ§?*ÒÐñ?{™0ás¥{7îÉ£Œ”2P†‰RÊ…ˆUðæúu¯\pÞðEó°"d{{©Q‰†sÌ€Š$jÂxT*5ø·Mã�ž7Tköxì£ÓbùSìeÍ;g*ÙSbcR€â·ñ�fí©`¸S¼Â?aX•õpÜ ?°‹³Ï¨ ØVßÒ¼›ß5Ù(»x�e€21L‹Öým#uì<ÀDb¥ÖgùÒhÔ�×Ê—ò58º·�Ë üùø¥Õ¨C/¿ôQz@×բޙ9êƒaòÌjŽš>¶Û§ïš =Кà?¾f}Z£]EWÓV–¦';€Öí\ýèVÌŠ™øùLñfÐ~$ŠÔAßµ†!}äDü�Ýøa€~ô¥ñQ¥_Y:z¡e̤u½6"ï6�<¦Epú] Û ç¼`Eøk¿à0ðÞ®�—¦!Œ¯–ÝûYòH9{.ÚÉ¡µ‹Ö>ø>Z{hß-]�#!Q]…Gn$(=t°§ ¤^¤%ê Q}>¦•gº³kð˜ñqñÃçDŸQx÷C¯i\4ý½:ÈŽú èîè"{ cL‹à;9”Škˆ|ß+`( E¼ð.+¾6›éS‚†ÂÛM-|íWûб¹h/Þ㢽¾W×!9h7X˜7uJýÈD˜0cÝ›wà–v–iÜP…¶8‹­Ðò6}°ºÌœÙÁ�ëâã†Û6½’XåË�¼æ†—ÊÑN®�vr¹^ܾ‡S’úã·O (ÃÆws(7(œ}`’ù�Ýx:ãjƒf‹kßãög2˜É™h¿€ö ¡y´[@»y´›Ãw³xN/ßÇÉ'�8kD"µ`­Ï½A>Üg\ßñƒ…qº4¡f”Æ^Aí°îœY¤ž J‘\°`°w^˶p(”yxSÚ\¯bà—ƒß�ÒçX‡&ŽÆ.‰ "5x´È=Ä/vˆ\ùaþ?9í¢0s"“¦�þµFÓj’¤“mc»k´e®G1Ðh�¶±>Ô/ßd�\^¶ w �iµ6½äŠ‘/º¸çºëôÿ._É,ÆcRîL+žZ‘(íE ´ {w¸”:º!Ú-Ö“±ˆAI²,š >}húðé§�ýá�èŽÇW°hÑ"Y}:¸ã¾‡õÏž~‹Xí‘Ø©‰XÉ4 p³�Áä˜a–ç´F{.Z;ønP,[‰4n®7ÓN¡o/¹¶­<þðÝ\|ÑŸ2¶66êo.8�XL,íG(¯>M†û•‹K1>œ)¿k¤8v|¾QQ„LD„^|ºðhÇg.ý3�`ý–-²a¬ �\� ¯¼^¿Ûœ%V}Vª.Ø�`¥‚5D†…2‚êTûÅj|7‹ïôãæzñ²�z÷SènáWœÇ=?øþ'ß�0»¡A¿èÝüÄs$0°ñ11(OPøa)�ÁŒÐC7æ”ù*ŸxW¬2¥ŒÈ0€O(D>7÷»ˆcË2Yý‹©¿Xú-ÝØÒŒïf1˜±Ê`ži[Ò ˜+ð|?�_ c7Û…“i£Ð³‹¿»ô‹‡$ÁA3À®æf}í©§3¹=Ë„!{–9ÊÅ"BqÞÀR‹ñ�P€^4]áþ}¸TžvȆuA'_|!×ßr g-\(ŸM¢¬[»V¿ü쳬}õ5vnÙ‚ÕŸ/e…bë4�Æ_Ã1 °ðÜs¹|ÉÉÂè!J.—cÛ¶mº£½�ÖÖV‰5é4S§Nåè£�–ÀƆ‚ðYD~ภˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ ˆ‚ "‚ˆ "‚ æü©ªÀ´ä×&IEND®B`‚atomes_1.3.1/data/pixmaps/field/in.png0000664000175000017500000002544615212624223017311 0ustar lerouxleroux‰PNG  IHDR“Ü3ÆcbKGDÿÿÿ ½§“ pHYs  šœtIMEà;2Å—”a IDATxÚí�yxUºÆUÕ{:I“„,$�°ˆì;2̈¨¸1ê�q½‚¸âu—TTTFEÆ PQÜEÇ�ÁA@ ²!„²ï[wz­:÷�.b@ ’�zŸ§ŸSÕô9}Þ:ï{¾ï;GB`À@G‡lt� 0ˆ`À€A "0`Á€�ßÁdt��c�²Šªå_®I¿lsfåUµÄFÙvrWÎ?s´äŒp´‰Ï(qÇ î:/�-øP¼ýÅf0wB6; ¡úy+1k•L¾ðî¿íjɤ( œx(*­¹û%JÜ‘˜ì1ˆ��§Œ$�×+a²wÂW]„¯b7}’ï¿øPO—+j·A'ÔL0nÊ?E©7ž˜N ³'�ä�Czc·Ûðxêxõf^]ã¥0s7ÞÒ�ôO ðï%s$“©uÔºa– ´8žXø‘(®�ÄêJ%!!–q£“�_Ê;+7±;·�ˆל÷& 5a‰JÄ�Â/Ù^ycy«=•�Á@‹Ï/yD˜ã†`í”F´­„.qdV¦aŽˆ'X“Á÷v'¡s,;2³¸è© Bu•øÊ3°Ôn#ã»wZeV0f-Šo×nª…l�D6ÙñZ†’ã�Օе³GêIä—TPP‘Md‹ÙIµOaÃÏ›ZåÉlÁ@‹bÛî|d³Y6#Õ¿LQ&ú�¥1¶ç&†öëÀ’U9ÈV'’lB6Y�ͶîÈ4<‚�ö��~   !Dø¥é´}Œ�$IÌÿx-«vÅéw…¯(.)m•ÏmÔ ´("¬ "èC¨�ðK  j¨íà±sÇ`6›yò­Õ¼ýs ²ÙD¨®-@„üh!ÝRºD0Ðþ1¼OwBÞP}5¨6Bhœ×§œ§n>MÓ¸ýÅÏY½' $P}Uh7ZÐ�¨%TWÁð! "hÿ2 wÏ »(+X×Åê$ÉQÇœ)¨¬¬â’]¸dD ,\ûÄ&$ÙDÈ]Jï”(úö9Y2ˆ` ÝãŽç>ÊŠL; _ÙNdÅŠ9ÆZÿ·¸¸XN�‹ÝßS¸—_e6ÞW«}n#Ž` Å°àÃÿŠ9ïåáHŒôP±íC,v+ÑÑ$“ äp>‘PCˆ�¨¥´¸ U.—ŽíÍ‚æH ´klÚ¹W\öп±%ŽÀ•‚b‹BõUPüÓBD(€b‹BR,a"„ü¨�Z‚î2ü•ÙL=C,øt¶¸Þ˜ì± |A]ØÔâ+Ë -²œ§œ&µ—vÒÈ@“QVY»üÿžû[ÜÌñႚz_PMÀ]Œ¯" ª¶°téã´f€Ì ‚�c†f¿{YÐÚ+ì ¬N³­�/TíÁS°�ù÷_M÷n]¥öÔ6Chš/Xú•øµÀ‰5º&[4Š9ì T_m_°…kÇ÷㢠ΕÚ[û "8¼/Ø”)|šƒ-®&{ƒx�¯Ž�·Š@M¾Òœçáñûî”Úc id Q•VŠ[Ÿÿ[Ü`Ìñ(ÖdE÷þj‚žbüY(µÛyý•'Û•/0ˆ` I©*7Îù€€¹'¶È$K$²Ùö¾‚ž°/plàõÇ®#5¹‹Ô^Ûú»ìÓÂÂBñå—_£ÀÛk|¸QÂ?³3< A¨®š »_ù.ܹ?08¦„ËÏ?½Í|î±cÇÒ½{ó‚x¿›222xüñÇ™8q¢1:0~Í-'Ý3{Òðýâ!o­î ñ–î wl-gž2€œœœ6ñ¹W¯^MUUS§N=:i”’’Bjj*3gΔŒáÐA}AY¥8ë®·°ÆõÓg‡î êùó�¿bJí¯¼ñÊlRS’ÛÌX™?¾(**jö}¿[5ŠŽŽÞ˜››kŒ†í >B³�„%* Åâ û‚P ¼Tê)Ã_•ƒ¯8��LiS$p¹\ìÙ³çè‰Ð¹sç555ƈè xâ�¯DFQ$WWk4²Ù†ÐöÅ Ê TçRW´™›ÿ:Œ³Ï8µÍ©†ÄÄDª««�žÆˆè€øbí±äó\l1 ãªßCÈ÷›/œâ�©7µIéÜ¢DˆŠŠ"''Ç(fî@È+*wÍû{ÂÌÎÎ(²bB x ùôU¢Š]Xê2XôÔ}m6^Í‘Hûƒ!&&†²²2ctt _pÝì âd,‘ú‚šý|ÁËÝDRbB›]HIJJ’ŽDÚ”]ºt¡ªªÊ!¿ú™ØS‹%ú`¾ õ^êŠ63å¯CÛ¤/8V«µeˆàr¹ÈËË3FHGðë¶Š·ÿS‚µSOLöNûûo�Ú|¥ÛÞUðÀ´)íbIýH¤ýA…^ll¬!�:‚/(.wÍû/öø¡˜�q¿ù!_AO¾ŠLì�,ýóé�í%�(>>¾ÙŠæ 3BJJŠ!�:€/¸òÑwÀÑ[÷zQÈ�ê×}Ae¾Âtκ•Îq±#ÚKÛš=~M‡’Fùùùm®�™{òÅÊ6S\é!ˆ�´pΩÃ9)-Õˆ‚7Ó_úXÕ%a�OÕ}�U÷n‚žrüÕ¹ÔýÂÔ+þȘ?ŒlWýÝì”�ƒ!..�ÇÓf–¾=KÜ7÷}¶fUa²Ç )f„¦¢ÜÌZð {F‹Ù÷\ÃÐþ'„h>YµQ|¸¶ g—á˜l1È’,éyD•ÝxKex7Áß︱Ýõé‘Ì•F‰‰‰”——·‰F½÷õâ¢{–�YÞ‰ˆ.#°' À×{\oœ]™:‚%üùÆ'x÷³•Fìã0(ÉÎ_ßz'ޏ“15Œøë~‹”gâðïbÑ?gll�mLLLliMaaaë¯h|Ÿ.î~ös,�úbŽLD±E!+VzFíâŽsÒ�e™m™ÙÌ[C�bâŽYo`3KâÂsÎ0f†ƒ@ …xw•\ðkÑQ‹ùê¼§ø‚ZBžRü•Ùx æ­¹Sé7¢=¶3..Žõë×=ô D«>]}þw?÷fWO,Q]09âP¬Nðíå¥)cHJD§˜e;5|5µhÁ:¦ýccF ë኎Þm ýýññ= ëw“Š…;ø–¡žë™sÉ«„´`ØTí¥®èî›4ŽÑ#‡µÛ‡I\\\³Ó,Y³¬(J«6æµ¾ž`æˆÎ˜ì�PìQ Á½vÛ)šÜ¼‚A _mÅîÂìèLmÐÉëo”e ûýñÃ[ËDåóKé�™NÈØ�¿e s_:�¨�_¨ÍÇ[¶�?ö¶pçÍ×´ë5%%¥åˆEnnn«Í +þ»ÅÞ Ùâ ŸÛ«Øè»› g ã™OÖ³»@÷0 ²ÉŽl‰Àd�áÓÿ¬7F~efŠn¿—>XˆCÁ�Œ ™:4¢Kk¸ÿíûýíL’Ü›X8ç�ží½½GRJpH"ÄÇÇ·ªaÞ™SŒ¬ØÂW+&ðîâÙk†°uw½±ÔGÑ!o%¾² ¼e¨þ¶í0&„}ø|¼7á*úUh$¢àD‚Œ�TJÐÈ!D 4‹Oßω )�¤”@nÉ%¨–D�»Næ‚�·šûÇÛ‰Šr2ëû¢SRaßä­i¨�› Kd2Š5 Ÿf&}ÛNc øpÚ]"iã^R1…Œ…P‹J9¹„ø…gÏzˆ!#Gž0‹ Í-%�™^ZµÕé´ ©áƒ«-¡l.>c(;²ö2ı?l&)&l–»¥$pÕf³«+{B¢ºŸÎ·½È­3_U5µ=:* Ö¿µLxæ¿GL¸t_ nT*Ñ( ÄD\v“¦N=¡VÚš›odj«3B¿ñl.¨A ¸Á`pß^ î»ÿuÝ»&óàäd>úé_øD4’bC1G Ø\¬ø±�//»?ëÞkÏâúË/�L&¥Ã� 83S¬¿ý^Fà <„¨F¥ˆ™ÙÛ'‰—-:f$˜8q¢ÈÏÏç»ï¾;®D‹‰‰ÁívsÔDHLLäHŠ [ —œ1Œ�ó¿Ãd�Á£ÊÜôìgHŠ$Lß‹¾½ÒØž¹›g?Ú„/`E²™‘eI1#›í('¡º[¼ž7?ûA̹çJFpÂǼn7ïO¸Š¾ ˜‰@‚¢û�Trñ‹Kbú[K‰p:�!‹‹[%&ÕÜÄÑCJ£#-‚n)üï…gJqöZÕ¹„«·+¬ÙÁÚ]Q¬ÍtR\Zîè’ Vm¡I‘5ˆ„„l²"[œ˜qX¢S±Ç÷%ÏÓ™‹§.`Òßþ)ŠJÊNhÿðÁíwˆ¤�{IÙÏjQ)C%—›ðóç'#®K—²¢££›UJ 76#IígKÁfµ²pÖ­÷nü» Tå¨É'X[HÐ]ÌŒ××pî 3ý¹¥jóÕ•¢úkÐB^„¦"É ²Ù†b�Æ�Õ•†#i+·}Õ#<½ðRÕn|¿h±,ù”´ƒø‚ T PÙN�è+ÎçâÉ“¥!C†põÕW‹‚‚‚8ÔÖÖâ÷ûQU•ŠŠŠ›Žg?$''7KÚ·Y"ŒÜOZôè�H5Ûñ–þНl'¾Š]ø«rÈ+ °½ÀDfV.žü�øÊw¨É'TWލE ùB )&d³“½–È$l±½�¢úñì»[8åò{Å׫:af‡½[¶ˆM÷>ÈÉ¿óªî Ôz_0ãÕ’ÕjåÝwßeçÎ� :”ùóç‹–8w{ï޽₠. bÍš5ìÞ½›¤¤¤WN;í4±uëÖãÒßqqq-#�Ž´º¥qöØ?Hß/šñÃ\Š6àÉ߀§`ž‚t<é(þJ.Õ…¾�k©+üe6ÁÚBTo%ZÐS/—$Å¢Üb±D§`ï܇ ­+×>ôîzRdçæ·kBøÜnV\=™>‚D”z_àC­÷Ù„Økâo |Á©§ž*­]»Vš>}:3fÌà¼óÎ{÷î=⾨ªªêqÎ9çðßÿþ—[n¹…�œœÌ}÷ÝÇŽ;8÷Üs�ËÆqqqÍ*%�{$&&Š¢¢¢6c.Ý߬üNä–‚”ÄΜ~Ú©=].×n€·?ü·˜ùÒ»Ôh1X¢’19â0Ù¢‘M$“Im¡©ˆ�5¨ƒZ[„æÞË-—ŸÊ]×_*ÙŽ æµµ±lòu¾äsú`&; PIˆ"Bì$È|œ½è9.ž<ù ßé®]»Äõ×_OFFóæÍãâ‹/nöwÿàƒŠY³f1wî\n¿ýviܸq"77—�;wJŸ~ú©¸ð ¹æškxýõ×�é¸Zµj•˜7oË—/—Žšݺu{öìiW«,n�‡ÙóÞ‹>\‹Ù‹3 Ńb�D6Ù‘Lf$I!Z-äCõ» y+Öæm©æ±[/æ¢sǶ›v¯]´Xì¼~:C°�ˆ‰dd$=rb7!6àÇ<é¯Ì\ÜøR©¦iÌš5KÌ™3‡ÇœÛo¿½Yý0lØ0‘ŸŸOnn®d±XhH€�Š’’ŠŠŠ$I:v]¼cÇqë­·òí·ß6éiô �ö¸¿‘3"‚Çî�"­Zú(C»øñ¥ã¯ÜMÐ]HÈW‰ð Ô±¿\ŠJÆÛ�©'·Î^ÁÿÜòˆØ¾+»Í·=;=]lœö'c&;’žG¤R…J¡î Ї¤qï s;(dY桇’æÍ›Çƒ>ÈôéÓ›årrrèÕ«‹å ïß¿?%%%Ó¾mn)A£D8’"è¶‚“z¤I+Ï‘–™x ýj$ä5ô9„Økâž7^oV¼àꫯ––/_΢E‹¸ùæ›…¦iMº/4ºù—Ùl  Ó¾iîþF�¡µ£Ë-�ñgŽ‘~üð%éÖ¿@-ߌ¯,ƒ@u.AOYx¹5èGˆ}Ë­vL6fg"ÖN=°'åÍorù¿÷‹}üM››–ßx³HÛQF2ÊyDe¨ì%D:~þ:ç ú ØlrÎ9çH+V¬à“O>áöÛooRûããã5©yyyDDDÌ¥gsJ äÃM/meßû£�Ífå�;o�Ö¾3›ÓûYñ¦ã¯È"X[HÈ[~€\2#›ÃéÜæ¨dTíå²u±ñŠ ü}Üy"kË–6AˆïæÏâíoôx�‚ Ô¢•|T~%@¤K¸äæ¸)5j”ôþûï³lÙ2ž~úéö}ôèÑdee±~ýzqˆôôt† vD›p5Í)%8ág„†HMN’–>ÿ°ôΜ)ěçÃû«ötòU…å’ª�NŸ¾ùmîøásWø蓈Y¹�gFŸÎÜ[n5UU­–Ì—“ž.¶þýÑz_à@BÑ}A5E¨ì$@Ùð^<ðò¼£~òþéO’^|ñEfΜÉ×_ÝèÀš:u*N§“n¸�- ÙÙÙâÊ+¯¤ººš»ï¾û¸ôS|||“ca�áHŠ ÛÎ8õé‡^’¦_5 ª¶à-ݡ˥RÔ@ Zȇ½,ƒ ?­ÄŽD42ñ˜HÃÄ �Båüw˜ÞpÖ§ ŠP(tÜ}ÁЉ×ÐW÷º9öé$Ø/ØkæþeoaµÙZäß�8q¢tÓM7qÝu×ÑXœaäÈ‘Ò /¼@~~>ƒ båÊ•dffÒ£G6nÜÈã�?Î_þò—ã²"—��Ðä Z£Dhí|£c “ÉÄ�7^)ýðî?¹`¤ Oþ|»ê£Óƒ3>Ã�@fÀ�D'd’P艙>u¬¾ñ^î?uŒØ²nÝq“KÿºæZÑM÷‘ òˆjt_°‡?ã犹ÏÒý¤“ZtÀÍž=[êÕ«7ÜpC£×Mš4IÚ´i/¼ð½{÷&!!�gžy† 6pß}÷·eéæävFhKû“Õ…„xé•'¦K¿t]#JðoÁ_•C§²,ªÐ¨C$\dE‰L )˜èƒ…Îë3™ÿÇñ<3ù:QVXxL ñõsÏ Ë‡ßÓí_®/øÍ¤M™È…'HÇâá1oÞ<Ö®]{X‰ÔµkWé¶Ûn“RRRˆŠŠbÚ´iRŸ>}Žkl¦9Ò¾Q"ÄÅŵ™ý�Ž5F�"­yï%é±›ÏD©ÙF†,‘KˆR})Ò‹@ÀV/—ºab0æá¡#yï¹ç„z äÒîŸ~÷=Iïñ *Uh6ðw?ûì1p}ûö•&L˜Àý÷ßOS—T[ ‰‰‰-#�ÚÊþFÇ7\y‰ôóÇ/öp奤GËì"H�¾S‹V/—LÈ¥˜è[ìgã´G¸kèpñãaž˜Í�»²ê¬O'^KŸB< ȘQð5¨/È&ÈæX3,{ [ ù‚CaæÌ™dee±bÅŠ6plŽ´o”©©©RGI\ô�YŒ½ø"iÞ›ñ å+7Ð 2f}–Ñ€‚:6$ÎÂN &"õú·^i–£Wše�êÍË߯–Žçù{öìiiilÛ¶�~ýúµÉ±QXX(ÆŽ[ŸðwTD7nœxþùç0`€±Ÿ(°'3S¼pçT*?_Mf:£àB& ›>+È€ x,mæ"züŸè6hé/, ¡ŽzØt"í#Bðëdꋉذ¡àE¥¼ÁL°.ÁÂë¾§k÷îÇýûéÑ£‡˜1c×]w]›M-%8ì#Ä8=gt;é$éŸÿþŒU+Vˆ7ÿ6�²ù$×Ë¥ð Þ'—öÍV$º\Úøù÷x>_KOLÄ ©“À¢ß£?Ÿ�#M˜#­Ôj*µ^~öŽu?_ð3~®�· UHн{÷6Ÿ‚ÓÔTùp4·º£àô /”æ¥o”>vé.‰�É×%˾ե}Ë­v$\(ä"™4L$¢Ð…XýƒL':¡«˜èïbèé£9íÂsÙ#™ÂÁ‡¸ÙMp?_pŽ.µZ±±±TTT´éï©©¥‡%Bs‹ ;¬67̘!=õó�Ø®O:~² RˆJ4úrk)*eh¤`"Nø.d¢‘‰D"²þ§D¤*!ÉÈÎä^=éÚ5…$[8¿ÿGü¤àL¸óŽVmLLL›'B||<>Ÿïèg„æAwD¤vï.Í\ö–tãWï³w@ Û°‡ %z°Ë‹à'üõ;Z—DNÝ[h@N¢™½ç b盧ș|&?%F£®Ùˆöï¯ñeça ‚S—_ ‡ÌüGkÕv;Ž6ŸyÛ¤ý¹K„¶zžZ[ÄŸÎ>[z%ýgéÏÎd[‚� ]ÆüJ€¢~•)B÷vÝ`LË™™Œý|c¿ÆØE ±œu5™e”§gQ¾§ ©&„C÷‘ºŒZ÷Þûä·âŽåDzܲ%Ý2D8’½æ;2L&WM�*=�¾�¨Iñ3¶Øou(lŽÃÁ8 “Âî­[YóÚ¢†ËyP ÕÑ<*fÀ¢p»«ˆr«|õñÇ­ÖÖÊÊJ¢££Ûô÷ÑTiß$iÔQò�ZT›&%I3/’îZû%jB$v}õÈ‚„0#aÒ—íRß\Eô.FzðÉý¾E_IÚ÷2ë˳–�»ŸV®lµ6fgg“––Ö¦¿‡¸¸¸–™:b¾QKbèèÑ’ìÖü}±™p4ZB" Q�È}ºÿ6#Èò׆ÿ{)L:1öfîj•v !رc hÓýßTiX"tÔ|£4U¾ú�|¥ 6 Äv:@{7vG8pòû[¥M�@€)S¦0zôè6Ý÷M•öG“ïß¿¿hª�zíµ×5jTý tP£'Ë¿çç‚ 8å”Sêï6l˜hÌÀ5ü /¿ü2#‚1bÄјÉkxÿK/½Äˆ#ê/5j”�$é ŸñÀûŸþy†.©„#Í*áÔ‰ „oWL ÄŠ ¹Æ Ù{ëßC‚�‹PõŸZƒ÷Ñü?€3Î8£¾?žyæ†Zÿ™Ç�'럆˜3gC† ©ÿã¹çž{Ðïw_ûüñGðÄO0xðàú{Ï?ÿüC~Göß?þñ Tï_þò—FÞÿè£�2ð›4UÚ7‰ûŠ –o4mÚ´ß]¯bsÝÔÔÔý~¿å–[zÝÁòÜ“““÷û}òäɇü¼ÞŸ””´ßïW]u�¥–!êÿž��°ßß.¿üòÃæákš†‚Î�;ëkxåátîU‰Öcy¨œŠ�äB?Â[´ß{Ñ!�þ3ü "è¤2E8ö¡þÞN�:í÷yÆŒsÈöL 7ÄÈ‘#ퟆˆŒŒÜï÷ÆdÓ�}xà 7½zõ:lïƒÝn?ji/5eó&#ßèèpשc„{Íf AO¥¶éñøãm íß—R.ýæKÖ-^‚ûÍ·p×ÔÐuc>uªÑ¨@¥T¯FÛE�ä ÿÃËo½e|/�Ë#‘——'õŒÐœ"hû£47W�‡Hdbô šIO® ?ÙƒNfì·_îwßèÉ“`ò$~^µ ÷WâCàEÓ <úa€Ÿy¦ÑÉ-€&ÁÈ7:2üwù»bùÓp×�RŸ„‡.uüzºveI Ÿ/YB”>9‹¯¼Œ bôë<jõª´*4ª]vþzé¥=�ž>rißìÁÈ7j:¼n7¯M»Kd,\®o¹ò›RuÍïCP‡F5å[³ùiòÝüa½¯êD qú5:jШÐË3Ç_{ûv7ph$%%Q]]ý;�Úl"´öyjí »ÒÓÅ+×LBÞº—dý°³.…ƒ;,mܪôD¼ãÎ>Û A3ДR¹©D())1z´> §N‹ÏŸ@|�›X=½ÚŒ„€ýP®oÌ›MˆŠ“’yñ«/øè§é>éR¶»2’I�,Bdë¯,‚ì"H2\fFßy3ŸmÜØÓ AóÑ”|£¦J#©¦¦F]Æî-[Ä«“¯'´1“Ýï‹ ¨ºò¢ánð4Ï%ÈÀ óÔ¼yõg¾=¹x1E�Н>þ˜W®$73Ÿ§X£¢èÖ·/w&½ôRÉy ?ÑÑ”|£&çù[)¹«­á³ùóÅ3¡S¹ŸX}Ÿ¡}�Ô¥P]]_Dˆâ¸î~fW\}õïžæ‰IIÒ5S¦pÍ”)FçCit¸|£&!**ŠÂÂBÑš6µ&*ŽQƒXöæ›ô:;Ð8ôªÑáò�šL„ÔÔTª««—ÀÖðŸõ›Åm³Sí�Á4òz6gmû�!Y™¿[æ¬ÔW…òœ ¾õV˜5ë¸n¼eà c÷°Ò¾Éßо"è>}út˜ ©*Íý—xý“ (öΘ#¢�MV„¬ðõ°k1æ‘–›§Ï‚ ýKO�D7VwÚä¦^ØÔ"èÙyEâŒk¯º “3ÅÖ ÙlYAhZÈÏ7=Ï¢ �24òõC½/:—~øa£A‚¶‡ÃAa#çW4™i£¥Ÿ¬§OšEN™‚92Å…l¶B ¡…¼¨þZjMf #Íì!Ä.—…ë^~–%| uîÜy„1ôڜʶ½AÌ‘Iº!¶Õb±�ÞJ‚îbüU{ Udðà-—òÅGïH Ú{�7' vBä¹ë¼üýé7ÄßþŠ9"³Õ‰¬ì“BZX …|¨AOØו¨É'9*ÄÒ%¯1tÈ`ƒí‡+%hVÈóPÛ´´¤oÏ7<´€â*KTÊ! ±/lˆ}U=%*÷rÅyà™Ù�‰oÆŒF{Î7zþ��Å?—|¶8LÎ(“ý÷†8X6ÄuåÝEØCe¼üÔ߸쒋ŒYà BcÒ¾YDHJJ¢¼¼¼Mæ…T•­»EUMN‡…>=»IÎE¥åâ¦G^aï˜]�ÍÎpp¬Þñ�zC\F &�¡=bXA±°ÚÏÚÌ*~ÌI¤Ê⤮,wîzœ]Gë«Bû"ÄÕaC\µ— Æ bÞ³Oö4v†8qÑX)A³ˆÐVÎSKß±[Ì~}5¶¸�¨þ¾î¼ß]sõxxþ½ïXà醪¨óo¦®h3–¨d=B\AÐ]„ÅWÌœogòµW³À ŽÆò�šE§ÓIFFF«7è±WW`Žì†ÉÙ“½“_XÍÖ<¿âc,¿c1�¢8oH*¯|•�ÙÑkt îü È& ¡º ÕùôMqðÆüqR¯^ :¹9o”––ÖêÒ¨¬¢jùúô<{'k$¶¸Þl­è‡=„ˆ”‘TiiWTPRãE2G X�(6&«‹ºâ_ñ–nçÆ‹ÿÄê/>” t4–oÔ¬ÁårQPPЪ�Y³qÛeŠÝ…l¶!Ë$ÅŒ¤˜ñNÔ…þ©1ôíÙ�­™9<ô~Š%-àAVlÈV'qj/¿0›³Ç�i ƒ¡±|£f¡µ˜®òx‘d“~pÒocyÔÉñüïCë—“¢&!$�$$Yá´14HÐAwHiß\iÔêç©™$ ¡Z!BzjDˆ¹«g=ý37¼ö#Ååô?)�%ÿ7œ`mBÃ×kA¢#�4‰ŽŠÆJ äæ¾YkŸ´~r÷.„|Õ¨~Z ÍïA y‘ì=©ñöbKa–}Ÿ@rb<6¥-X®'ðÕrr÷cDtàáPùFÍ�FEEQZZº¡µêrG ê+EÛýÂWWŽb�¢kä^º&$°!¼A\,\0¬/>ŸO�UõòV"¼¥œÞYƈè h¬” ÙDHMM¥¼¼|xýAy­€)—Žå©¥ë‘-’OŠbþmãzÝ£ W j&‚îB5ùœ÷§þ¤¦¤þ ƒ¢±RÓ‘°ªµ÷7ºõš‹¤w¿X-r*³XÿK4�¾ú Ò:í°Ò ³ ’�×îbW®Šê¯Ä_•M¤(åɇg£¡ƒãP¥GL„V5̊»sgðçëÀÃkkÈ'’lI¡¢<áèqMö@!¯¿ø¨1ÀápTÚ7Û,®úx!)¡³´zùóÒ…§tÆ[øuE›ñ–mÇW¶ƒºâmÔmÆ“÷ÃR$V}¸ÐH¤37áóÔ†õŒp¸"èã g„ƒOÍ�îÛ³W,ÿèßü¼5“Šªj¢"í ê=Œÿ?Ž¡ƒ0°Ÿ¢ÉËËûÝ�æGD„¶�oÔÝ»u•þ~§±­º�ÃãP55Í–Fiii'äþF:UJÐl"ç©hÏp¹\-.;""ç©h¯8Ôé9G"�Z=ßÈ€�#Å¡J ä#y3ã<5íY¬”àˆˆ°¯ÚèVí‘+%8""îÐÚ°4:¨´?¢�{¢££™={6ݺu3fí»wÿ~£Iˆæ�åuëÖ‰¶T3` 9˜4i’tÔD0`àDƒlt� 0ˆ`À€AàÿÀY¶´×Ò(¥IEND®B`‚atomes_1.3.1/data/pixmaps/field/di.png0000664000175000017500000002456315212624223017276 0ustar lerouxleroux‰PNG  IHDRÄ•tU9bKGDÿÿÿ ½§“ pHYs  šœtIMEà;$1C!0 IDATxÚí�wœUÅÝÆ¿sι}ËÝÞ¶P–®¥¬�±`� �ŠÉ ¶XÒ5ÑXbIPcoh°¡T°/ ½‰°ËöÞÛÝ[ϼÜ»5¢t™¯ŸóQ¹ç^î™™çþfžùÍŒ�R¢P(ª‡ïn”ï¬ø  ÀÄ!œ=u¢0t¡"„âpAWÎ}I~¸Ñ$*>†3ÇF±fK1Mu¼vßoEt” M“âpá©7?•}iàJÅŸ/ÊõgÅO§Œ§¤=‰[ï}JJŠÃ‡W?݆-6‹±’¸D+ëÊë J�%*�·>Úˆ„â°¢­Ó‡¡wrËI <¾¶ »UÃ*‚`úðx|x<5¨V>$FYtmåï'dÃÐŒd²†¢z N§S Bqx°ð£õrkcqƒÆrÂݵx˹ç‚d6•ÕóÙÇ+™wõ)€r™‡«¶–É‹ï^ATÎÑhºNkñZÚ‹ßMGóÕróe'ó›_^ @ÍC(~äTÖ6É_Þ÷Žô1XœZ¶­ÇWý¿~*)Iñ1|¨p¹\½÷§ :=ݼýárCQ%u�-d§Æ3aÄ@¦=J†®JYqHÐéñrÁÝKÐb†áJJ¢yÛf:+>ã�ßžÄS�ßõžot™‚¡>ÿùÈ«Ë 7šÅÌ ‡`W#nG¾ê4Î>ù8¡Š[Ñ— …Lοc¡ü²9‹øüÁ´o£½ô~=5™ß]uáNÛo¯ ‚¡ÿq¾ü|K7ÖØl {,f ‹ÓFK¢ìd(À³ï¬£³¹‘‹~:ˆ»�…¢ÏrËü%òÍuV�¤½¢‚޲—ׯcwÝð½í¶·ËtÓý/É­‰ƒ1¢’Ð ''äUò×_ý´÷æ%›: éÉ<ýÎz†~[^4ý% EŸã‰E+äë+ƒÄAW}]Õ›È�®à‘9üÁöªlÜV*_]Z„ÍÝKt G".£–Û/9†ÎÎÎÞ›¥Å…%: {\¿¿÷):»ºTé+úKWm“÷,¬"6o$�‡Îª-Dû7ðâ¼kgZ,vIO½õ)º3݇n�Á tqÏyÙøüî~þ½Þ›ýA‰n‹FwÄãq¼ôïEʳUô¾*«•×üc5QÙ#Ñt�Žò­„ê yá/W7W>C(ÜXŠn�F³ØšÁÉC™0j÷º#;ó=,¡ÛÐ,tk …k7«ZPô šZ;ç^Ç�5}¯Ûä7–�Ž=R¬~ëâ¢iCBBš!Bh†ÙBiAqà‘¦É]"s¾¨¤_F,Eåm¬ÂKþ_nØ'bøAØm6.;çBþvd(ÒBÓÑ,6tG,›¿,Vµ£8à,¾åV¿ðsf»©¨mg^B—œÊŷܲÏ~¡¿s“�üþ"èiÆ ú�f!h:B·£Ûb(®¨Qµ£8 ¬xü é»ûi†¦»ihéb“¯›ò)øî±ùû´»ò�‚0t�Ä$fȇ”¡ð`CèhºÝMqUƒª!ÅcÛ²e²tÖŸ•C·×Ï—Ýl(HæúW¼²+ {{-€þé1È@8BH)šŽ0¬h%5ͪ–„ºmÛäŠó/c”Å�¡k|ÙÜEaŠÁUÿ^@|bâ9ûúïÛ© rRb0¤ ‚”á�µnA³8(®jR5¥Øït6·\ùÞ™ç0¢ÜQv¶Ö¶óyT�³žм‚‚ýâììt“�ÜÔXÌu] F"„†Ð tÃAm]»ª-Å>¥|ËYøìsÔoÞBPJ‡ ¥cÅJFon&£Ÿ›­e-,ÇË‘÷ü…£�?~¿Ùœ;D^Z‘«æÝ½ß€w>†ÈL"Ô‰ úÓsDæ"tº=†¯J*Um~ )%Õ%%²xãFÙ­–Öî›>üPÖÏ•|,d``<1‡ø/^ñð Ú† "K3ÈÂL¸ì2ö4aoŸ 9ɶ^ÍPøVMGèV4k;ªU�¾înÞ6[Îî—/ŸÈà #¦ð‡ä~òÎSN•_®^­–Ø~ËÿÄ£‹†õù—1/¿ÃëÃñ‹óð–µ�FËžî€|§ïDv² 3Ø�4ƒHi"„†Ð­è§²^�¶††U3E6Í~˜ÑÆcg<N�‰#õÓ5,#DKi)qôÈ@ÌÝ Á~ÙèB E^3m~â¼E’¦ãš‘TH“!¥éŽFKJ@$&`KIÁž‘Ntf&±Y™Ä¦§“”•%¬} w{}¬ÙZ.W|UÍšâ6—uÐåu`q&ò·'­-€ ‰$ø‘´!éĤ“FBTB É$eÌ‘qÔ8>ûÇ|Š6V’UÝÁW“ÎFG`"é@ROˆ"´ Îä‚_ýJtA¤&'«á—2äGÊBž‹Ðmh¶(Š+ëÛñƒæráCâCâ|¡¡%açÉ4 E^ó!éFbT{�hØ d КZ0ª;Ь˜º ¾HCªA²\š2Åò1Ó¨ÉMr¬…ôx'éñ.Òâ£ÈLv“�–(\NÇ.÷¦–¶¹o~²á¦ê††öKâgÇŽë=–¶‡âò¹rk+·Õ³¡¼ƒŠ?º# ÃîF³ä!bm¸ât íNhk£“.$í˜4cRG�†$;IGŽ"uÌh†OÏ¹ãÆ½’ðµ¤1'œ ÿrêi4m«# ‚ ІI%Ajó’¹÷�×q:�?B¤&9hzÁ !% ih† ý0·^3ŽÇÖgß& '&õçM"í×3ˆzòvüånZ ¿¢™~$%pD*ÜqO,,Ý&zw0iZ¤omb€TzC+ñµKY§„öf±ðbJu¯“ÍOŒ]ï$G[HqÛH�w’‘Kf²›ÌäøC³ºÐ,4ÃŽÐmá”|ÝŠÐ B^#ô_ëUˆÈúj«‹íåuª!Ž5D.¸‡÷?*” MÍ �øѣT„ßA ÊN n‡iÃ6Ÿvšt‹‹¢J•~¨a³Z9åÄŸ(|ڮܔ“C(øXT©õÕŠÃMyiq˜þ.d(b½j§I·ã YihlZ¥ŠRqø"3‘�¯ý¿Ö+áõÕÂbǰÇR\Z1Z¥â°ÄàÜlô¶„§ðÍp’BG3ìè¶X¶î¨P%©8|a·Y‰‰Ö‘æ×¶¶ÔÂ[[j¶(¶•ÕÐÑÑA(R%ª8¤1võÆþi1”t{#[[Þ¸L·¢[¢ØQ]Î5×\#_{í5ÒÒÒèß¿?yyy 6Œ‘#G2räÈÃbÚ_q ¢_JÅÛ»ÁìqšôH’Ÿ“²š6ž½ã÷œ~úé”––²}ûv6oÞÌ›o¾IEE†aÈ#�<’±cÇ2iÒ$Ž9æÒÓÓºíw饗ʉ'rùå—+ R±{‚˜™Àû_zÂ;pøÚ‰­ß‚¥­œÖ–rZ+ÉÏÏùùÿ›kSYY)×®]ËòåËY¾|9/¼ð­­­qÄrâĉL›6�Ÿüä'%‚<õÔS\~ùåª%(vOyiqdl’+–Íåä’t-˜lÅÏ"ÇáppÜqlj;î¸C¬\¹RTVV2oÞ< Ãà†n ##ƒéÓ§ËO?ýTíg¤è»‚ÈÎËí�IIdù 6ÑhÔíÑHKK3fÌ .eeeâå—_¦¥¥…É“'3uêTYXX¸O…QWW'¯¹æ9jÔ( ðöÛosÌ1ÇÈÇ{LþPæ¯B ¢Ý0pä¥ãCÒc®ê„×G¡ÑX´÷çι\.Î:ë,±téRñÉ'Ÿ i'Nä /”•••{ÝZ«««åäÉ“yüñÇÉÌÌ !!�¶¶6®¼òJþïÿþO)B b7lN¼‘!‘½‚p"¨ß¶mŸ~±I“&‰wÞyG¼ûî»lÚ´‰±cÇòÈ#�Ƚ™ë¸ñÆÙ¾};óçÏgÑ¢Eàè£�fõêÕâ”SNáÑGå½÷ÞS¢P‚Ø5brsèŽì¹# ïaAàD£µ¤t¿|Á“N:I¬X±B\qÅÜrË-œ|òɲªªj·­Çãá�wÞaܸq\xá…ß´†Á]wÝÀ³Ï>«Z…Ä®áÎÏÃ$ˆŒ"lS9´ïÇíñm6sæÌK—.¥¦¦†£Ž:Š>ø`·D±uëVÙÚÚÊ„ ¾óõáÇ‹””¶lÙ¢Z…Ä®‘\ÜtÓMÜ~û픕•©®“bÿ "nÐ@º#Ǫö$ùY"iàm¥e}æá®»î:‘‘‘ÁM7ݤjZ±ÿ‘4h]HÈH’½N“YÞDWI�³Z­ÜsÏ=,X°€}½òN¡ÑKâ€|:#ÖkÏújƒðúê8tŠ·ní3�ïøã�'žx"·Ýv›ªmÅþDj~~^KÄz Á7ÖWÇ ºõúmn¹å–,YÂ_|¡¢„bß "ÆíÞJ�Æé2A�õÞp ¾¸o bÊ”)bìØ±ÌŸ?_Õ¸bß  &¿ÿ7¬×ž¬W'ZŸ°^¿Í%—\Â믿Î÷eÄ*{,÷Àx1¿¶œTô:M Û·÷¹=÷Üs_iiiañâŪۤØ"¯g}u8…#l½†×W·•–÷¹MLLwªÐ„ X³f�ªužDÒ€|:{ç"þk½:¸Ñ(/.îs§ �;–uëÖñCËMJ»MF~¾h!YNú¿[[–nÚÔçvøðá„B!¶o߮Ɗ}+«ÝŽ–“ð�[[F£Q_TÜç6''GØl6ŠŠŠTÍ+¾coÞ?x Õ%«ÙN€L Ñ�I'&bÁ+�¦ŸÉ°±cûDF©®ëäååQZZªj^±o#ÄŽ�åÖŠ >¤›b�$¢‘ƒÁ`¬ô+iaÛ_ÿÁ¼qÇsÝñ'È/×®íÝ”´´4jjjTÍ+ö� ?ö˜¼ïè)$lªdVò°�ƒA?,ôÃB r°0 X`éjþ<ù8ž»ÿþƒ. ·ÛM[[›ªyžé2½uß}ò£ëæ0ƒtbÐpDÖCè„{F®ãJtbÚ­”6·ájö`ï ²èÚ?R_['¯›{×AëBÅÇÇÓÐРj^±÷‚ølákréu³ÉÇB :nt¢lˆ·²()—m±´Z]8ƒk]œÛÏÍÔÖzV,_-L$Ÿüõï 1BþìçQèºÎ®l}©P‚ø^:Z[sÿ}íõdc�„N<:�ßƶìñèºW´�d]ÐÕàK¬ü¾¡ž‡Û›™e³�’G¯»žÉ'OË�u»w A¨ó´{-ˆwz¨8ª¼•x,Ä¢¡£ñ›Ñ“ðe åלÈäÑCˆ‰ ï¬í÷ûYøþ îxy3µ¶(nö…ø]ëJb½qhÄÔu0îÜâçÎ=àQÂï÷£ŽÎRìõ úó=MÑh8Ñxp`]ý�!*1•SŽ=ŠæöN,]˦íåX­VÎ;y2·_4 {l2u$gäô¿‡ÆÒ_:(]—`0ˆÕjU5¯ØsA”}ù¥”% ¸Ð°#h´k|Ño"Ö˜tBF,W<ø>§ßßȼOs¸è±v6l ¯«ž6i¡€KT*Í)¬‰Õ±#p *o`ãºuü§º¾¾ž¤¤$UóŠ=Dñºõ8#éÝðAR‘Óz`¶“Ü´iš¦1lØ0µ}¥â;»êÉ_ž›/³KZÈÂÀ�Î cŽÅš=W4¬ÿ×UhšFWW_lØB€” ×½Xƒˆ…Ðt�&Ò ò{y[ tÖámÙAN¢—?ýrÇ=r¿6ÔÛo¿].\¸�µk×*A(öB´·¶æ^9xHqN]7鑾—3X™5–Ä´T4« tK؇2ƒÈ@7fw3]–\l‰X\Iè¶Xt«¡Y@hH3„ ùù; v·h¯Æß²�©G¥rÛÌ3IMNاÂÈËË“³fÍâꫯVB±w‚Xô̳ò¹K~M’щEããÿI-ÀŒÉF·E�¦!~‚Þ‚-%d˜&-ý&aOŒ5:KT"º5ÍâˆC eðòuô4áï¨$к�ËNÁ5¿˜šçމÞ뜧òòrÙ¯_?>ÿüsÆ�¯¡Ø{A\çôIDATÜ{Ã�rå½ÿ ƒx4bÐÖÄê”Ú�ø5-ä'Åçah[ ø*Zçãô¡„úMÄ‘8KT:†3Ý�f±#D¸ç&Íf¨›�·�`W#¾ör¬ÁJ~sæfž;Uº¾Çº`Á9sæLjjj„ÝnW5¯Ø7‚xè¶Ûä’{ µË$ Zïz „�ø‘t"i�,--'ÈÄY³XY+¨jwa�ÏÇ•ŠáŒG·F#tB7Âs2€éï&èk#ØÕ€¯¥”XK=˜q{êHÍš5K®_¿žeË–©è Ø·‚XùÉ'ò¾k¯£}õÜh8ÐzGèAÀ‹I’FBÄŽÆMóîæ'Ç+‚Á Ï¿¶DÎ}æ=<"{\.–¨tGºÕÆ~p¤Ž8âùóŸÿœÙ³g+A(ö½ zøèý÷åâ—_fëªUTíÀìô@’6lC�>ЧOç§S§þO#ôú|<ðä¿å?__‰tæbs÷Ãp%cØÝ½ŽBib†ü˜þ.‚Þµx›¶qT�‹]u¤ª««eff&Ë–-ã'?ù‰„bÿ boimïÈ�óÐsů~X„;klÖn:RiÜ6óŒïu¤~øa9gÎÊËË…ÍfSµ®è»‚èaûŽ2yç?ÿÍ{_ÔìsGêÄO” ¼ôÒK*:( Aô°vóWòæ¿=ÏæJsŸ8REEErРA¼öÚküüç?W‚PZ‚èá?Ë>—s濵ŽÔñLÿé$1þ|¹hÑ".\( ÃP5®84á´ó=q¤‚-eŒXþw Ò­¤N;‘ã§OgÀ€*:(mAô°;Ž”ìná·¯^FÿÒrj ±�QgLáŒ;ï » @‰Bqè ¢‡o8R1°ºÿב:yÙ\ñé"|H:1iÁ¤š ENIÚ/NgúœÙ$¤¥)a(}Aô°SG ƒ—î?ƒ(LáR½H:0i"D%!Šb#gýŠ©³~›sö…R(Aì7¾íHå4nç/Kž$:r’QÏ:tcÒ™9¯ HUv4co¼–iW]%t5ØVüÑC�#¥mù’_m($5’x�†-²SˆHº‘´aÒ@ˆ2‚4 Ná„9·1ùì³T7Jñã„©W_ySþáÒv4’Ù¶'ùÐÙéC^îAÒŠI!Jà›PÀÉwÌaÔ±Ç*a(Aüxðy½¼zÿýrÅý‘Sç%;²vÃ�†+r–¶FøäT?’.$-„¨%D\Ê‘R‚ø1ÒÞÚšûÜm³‹·?õùm&™‘MšcÑz7]Ó"ã åH)~ô‚è¡lûvùʜ۩~î-c!ƒÄÈÂ&GDÊ‘R6‚èaëÚµò¹nÄ\º†XHG'ý©J‚Tî¦#ÕÞÚš[YTTÜÝÙI|j*éýû ›Z¥§Ñùü?ÿ‘oüñϸV“‹ñƒŽT;&õ»àHÕ””È¥Oü‹õo¼Ië¦Rl‘ÈãCâq餎ÁسÏâ´Ë/WâP‚è[ƒA?÷œ\2çNÒJšwÙ‘ª'ÄŽo9R~¯——o›-—?4Ÿä.Itd‡ôžå´ÁÈû;zNiÍŽç’ywsâ9g«±‰Dßbo)ûSh®®A[±•”Þ{x}¹Ö»¾VA§0iöi HAFüf7ÜwŸÊÀU‚8ô©.Ljñ:]da�ŽN:Q‘èÙ� Øâ¬$f'tØØZVIqMµØA€ÁW]È}TE %ˆ¾íHU=÷&X¿×‘z’�õ-ñôŒCDäw†‹Ø& F £ãƒe|öùZÊ[=Td.~æQN»è"% %ˆCË‘ŠG'&âH}‰Ÿ÷èf0R#¯E£!€êœ(ìGG/„Ôu:»º»¬�˜�¹øÊ«X»¥˜ò–nj#]§â'/lÝ’çV¶®Ä¡êH- “xtúaDŽ'ÖˆBcN–ÕßøŒÒÒRüC�#Îa¡Í Q×â£� õK÷+{×ï¹êæ›U”èhªv΄iÓÄ�Ë?G>y/+sbX…—/ðщ$6âH9Ø#]%;‚¯ Yóàß)Z±¢÷s¤'„·ÉG %€�ĹׅF,‹ŸA¶Ä¡�aülÆ 1oËF‘u×�,O±±fm€52¶° ‰•Ä 0ô¶‡iÙ^ôßÏôÈ¿�Ƚ¶ÈåDмi;•*T+A:Øìv.¸ùf1á¼sz�$=â>õ\QV‘— .Wï{õÈøBûÖ¥G>ÃŽFIq±*d%ˆCO[ßÕÙïýy· ˆrÁwÌ/|WèJyi©*\%ˆC�áÙçáM�Ãÿ&’³Ó„²ðxzßóíû¿y…ÿ,ÆíV…«q葜—‹7²»yÏ!”ÁÞÿ/!%]àõö¾Ç‡‰I€pŽT ÷ýá÷uc’ž™© ·/ŒUìycÆð&]Hº1ñ"°!Ñ0éJΚ@T”‹Ä¼\ |ÌØ¶'"€î7Þ'º%œ4è�¼¿ “n·“¡ê È>�š‡ØM|^/WôÏ“ùu^²ÐIÂèÍ}ò"I+ùt§ç`?3`( E-4Ф–‡(&@ü'ñ¯… • T„8ô°ÙíŒ>ïŠx’(BÀD`«ï�bwì7Òfd¼ào邏LZ1#‰‚A®½újU°*Bº474¬úÕð‘£ûG ì9Z¬'—I�ä<õ¤û#k+:" �šQÙÜ nÚžçm” m–.|M>:ýbr1zSÆ�‘ »p¶«@" Î�펜¨ÔÙ§‚ Ù‰¼üé'dfe)A(Aú`˜�'hlQ®ùüb—�kªŠçœ› H®.´z£Uþþ/¦•sîÿ^£Ñè‡axñwQTa¸ûãæçƪh«Õê|}Ãì_õ3IEND®B`‚atomes_1.3.1/data/pixmaps/chain.png0000664000175000017500000051362015212624223016676 0ustar lerouxleroux‰PNG  IHDRÚ„¶&ƒƒbKGDÿÿÿ ½§“ pHYs_�_�@)ÕtIMEá   ‘ÖN° IDATxÚìÝùdÙuös«°ô2;)qCŠ;%n"eÊ¢-ŵÅþäÏMb;–wÇù8^´P›MK²d'’í8²Dqfzº»n~¨*à½ûî½ï¦§Ñýý~>˜ª @¡€Î9uî9)çÀÍl<ps í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+(´À í°‚B;¬ Ð+œy€Eúøs<|3b{±ÙF¤MÄf³ÿ7RD:¼\¿Çáß|}QÎû—È»]DÞEìžF<}ùßýóäQ`ò÷'çìQî”ôùŸÎqvq]P/‹ê)EÄf\XO)öÅöˆë{M>ÔÝ÷<|ß�/�Eþ·ÿ‡"<ÀËúwI¡xž¥/ütŽ³Ëˆíy½S= ŠëiX\/‹ì§Ú‡¯×Šî»¢ð~,¾?‰xúx_|ÿ½¦øð2ü­Rhž'é ßÎq>,¬7Šë›Í  Þ+°—Åö\V¹ùê?‡·óõWÅöãå»J§{ÑñþtPxÿÝ¢ðð"þíRh>HéÓßÌqïaì»ÖÏÚÅõMÙ½^Ù‡Ýêµ11©¬qÅöQ‰$�_ß'ÅöZ‡{­Ó}Øíþ^äßúûŠî/Êß2…vàYKŸùÉ—cܹ¾mÌ[oŒ†¹šÃE'{QXŽ�¹º jÜya±}ÉX™^§û“÷"þûŸDþãßRx¸«×Ú^‚_ö?úû£·›mDÚ‰I£‹gÒ™sHž>�xüNäÿøÛ’N‹Kßú‘ù̾sýì|_`ß ìÇÎõmQX×7ã¢zµ“=n62¦”'¯TÆÈ±ódqj§è>\¦úôñõx™ïþªXà®ý�ShxA~¡áÛ9ÎÎÇGl'II§£§–UäJÑLžì;rž¼ùþµÄ€q¬zq?âì¢Þ½~r{¥ Þ“¡o#T­Ž�iÄÇWuºÚ#±ó‚‚{>4µì]î�ÞŽü;ÿXl pþÖ)´ÜÁ_Þ_ú™¼ORή»Ô7•d¤–p¤NrÑK&N:ûtP|?ÌŸüý)Ax™bÖO}-Çý×#.îEl/"ÎŽs×Ï®»×‡]ìÍûfz"sÔÑ~Œo�%µ{:14­Ž�9¼¾$f^³}é8™«bû®Òáþ8âÉ£ˆü™Xàyüû§Ððþrþ±ŸÍWs+k3+»s*#šK %×yÃI³('3Ýs½Cçªè>˜CùÞ;ÆÍÜõö³ß:Ø�ËMŽˆé�Ì\4�½,¸—qï\'{š Š1rž^6· µ,¸Ç`´Ìnןá>ÕOE¼óýÈ¿÷ÏÄÐÏËßA…v€çäò�ÿ�ç÷ ÉöP`ß´ÇÂTÇÔs*‰ÃI#c™D¹*/L"ŽÅö& ùPhŽ˜9vº?‰xú^Ä{ï3p—âØa�ýêæÙ¸È^;‘yʘ˜jÜ[�Xî"ZThoÅɹqÑ\W{ôOƒF¥³½{:´\šúd_tò^ÄãwÜž—¿‡ íà/ácqýع¾,2½ZhšêKM—&1|»—H4’вk§œ?YÛ»�:»ˆ]kžû KçØ©óÞÛ:Ýž×Xö3?™ãÞ«Óìeû0¶Ý,)°cËX·l2™]€Z„“iEx9©¡4 íÝ©­Ó  æ·ç¢ØþtPpÿËÿÏH€òï¢B;À3þÅûÅ¿–ãòaÄÙå> uúÜF�}nñS%Ù˜fEÏ‚c±Ç×›Ý:»ö¿»§Ó%ª»§×³(?Šx÷û‘ÿø»€:žýÔ×s<8,9=»¼3)°žì7SžÜì�äœéjŸÄÊ L:Ù˘¹Vhïœíí;Z:ŠqÔÝþøPp'ò¯ÿ]13Àñ÷Q¡àýÂýòÏç«nŸa"R=FÛs“û�ÆÆD‘,Dô;vææ¶WæP^%yÜá^Ž•&ï½ù÷ÿ•äàYdzùlŽ7>qù ®ö mÏ"6Çч�.ö«875ºÙ;]ìs3Ùg»Úo)&È�¦”܉™O˜Û>Á8,²W›T*£¿ñè‘¿û«bf€gùwR¡à}þEûµ_ÊãDäl°Øt;3£2ݰÈÞ›C¹xêàÍ[,¶G¯Ã½Ö­sèpz-s,¸¿ñçÿ%òùC ÀûÓ~î§Š9ì‡e§›í>ÆMÛëwR`Ÿ+²§ˆØtNpFc\Ì‚Q1µ‚ûèÕcã¹SŸs3Û«ãdÊÆ”Ö™r~ûÓùq2ï|?òïücñ2À³ø[©Ðð>ürý·sÜõÐésÑ>F»jTÄéEö$µä¡¼¬š8Ä‚¢Ul?¾>˜ßžwƒbû àþøÝˆü÷Èÿ÷ïJ n;®ýÔ×rµ"{ïèì0‘XPh¯%ie,�[ÉD™H´fQÞ>9‰ØÕGÊÔ:vž>Žxòh_pÿÓù/þ«$à&±í°‹}Ô@rˆq·å²Ó^¬»4îm�‰9añé(.Nʱ17 s¥/å6GÈÄ>æ­Ím?^¶ku·?-båãøÅC±ýÉ£ˆGïDþõ¿-Nx?þ~*´¬üEúµ_Þ/9ØÏ®“Žæ¨âßf'O4 í�£™<¤åùD«[§v]óHlœ8‹²Ó±³ÛÍ$OÇ;OE¼÷Näïý IÀ)±íçþêxû0ÆŽC<މéu²7On¾Ÿ�ìµÎöZ,¼¢ÐÞ‹›s9n±+¯_:B¦² µŒ‘'£d1skôâÛùwþ‘Xà6ÿ†*´ÜðèW1ïgU^Œ;|6K;{–&ƒ£úz4’‹µID‘LôŽÄ6»Ù‰ÃèòV"qÂñØaQín?ÜßýAä?øW’€^lûñ/æxí‡". O‹.öZ'û⥧•¸·9.qf&û¢Nö^Jå²Ô…+oqp+—Å÷™‘‹­†”ZgûñòÝÌÜöcsÊÓ'㱋O£d½ù7þ®8à¶þ–*´œø‹óÇÿƾËçjÔycFå±ÐÞYÕí≨.ê-zªÍ¤œ$ ç³çÞå¹’X´ŠìÇëŽÉAÌ$»i—û®2NfWv¸—³Û‹®�w¾ù�~C"PÆ·ŸþFŽû¯FÅ\ì籞–Í$©2q3×Å>S`¯ŽŠ©Ú« '½%¨ ºØ�‘Éõ:{ëÔçâŨq»3Û»sÛ§@ÿÍÿ*F¸�¿§ í'üÒü‰ÿ)Çù`LL9‹=•�ì3=Íäb˜H “Œ˜O.®îì‚®�^"1y37�Nò0J† Å0qˆéÜÉÞ8™¹#²ÇÎöI×Î>‘ˆïÿ×Èúû’ €ŒŠ¹…x>=­¹]0�}éˆÄf³IÄisÙ[1qó¦[X‚Ú “˘¹Sh_2:f;ßt¿Q.ŠìÃîöÆ(™÷Þ‰xûÏ#ÿÎ?#¬ù›ªÐ°à—åW~!ÇåƒÁ2¨Ê²Ó«Ÿ%Çf—̤lt±¯=»¨¡=·¯lØ£(¶·ºv:³(WÍm¯tí\%ÃîöGï~?òþšDx¹cÜ/þµ—㺑ä¼ÞLR‹u7Kæ±×âßÍ‚�D7íf/NwöF)¦5¡àÒ…¨±¼å¤y®«=Wâã"F6¥O€¾û—‘ónúwU¡ óKòÓßÈñúG‹Ÿ³é¨˜S@ÝhdLô»ØW��)’„âÕÓÇÇDeå’Îö²À^Îovê /{º¬»ýxLöÑÛßÿo‘ÿô{’ àåŠqÿ‡/çxøV\5’L江UbÝm£‹}A‘=zÝìÑõâzk_Ñl|\Þ.ê×õbãêÅk»Ú£?:¦;¯}7·bäá¨ÅÝxÜâ®Ò�òè‘ýïˆ�nò÷U¡ ñ ò+ß9tø\^�ŠÙ,-²÷:y6 ’‹ˆé⧈jÁýꟴ"�X’HÌ�Ži%7èloÎl¯-G­Í¤¬%ÃÙíï�g·ÿ‡_—L/GŒû©¯çxøÆaûå~ûÙù À~6îb¯ŽGļe±=ÒÂnö8q6û\|Ü‹‡kKOß§Žöf\\ÄÃ�F”F|¼dAjsŒL­)eç¶?~ñÞÛæ¶Üäo¬B;@å—ã×e?*¦ì$sóØß—NöÖ,ʵÉÃ\2‘OH":‹Q� Æ¢£±ƒä!†öÆò§Ig{ë˜ì¡sçßÿ_’ àÅŽq?ýÍ^?œÖ¼¬Œ‹)JŽÅöÃØ˜Ù=D·¹üô”擘6¢”ׯ{?;ÚçRª£dN˜Õ^�•;3Ûwµ¹í•¹¶ÛèÿýãÈôbd€¥gÚ¿¿ô³9¼6�SÙìì©u±W ìs‰Åä(삨Wÿô:ÙׯÅï÷RÔXÖ©S+¶çF¡ýj&e£k§œÝþä½ë%P?ø³Èÿéw$À‹ç~ö[9�s�{‡ÎÎ#6çûe§7™É>ìf�bàj<ƒ8xɸ˜£»3Ú×ÄÊ·ÙÑÞŠ�ceŒÜiH¹Š•�÷'ƒ%©ƒQ‹ï½ñ—ù÷þ©ø`ÉßZ…v€Ã/įþÂõ¨˜áÚ²³gS›K¹tûfÙÊÚÔ2y¨víô†Ô~³—(4“Š.|Z•@,èÚ™,J}:?·ýéãˆÇÇ%P¥/Xœû¹ŸÊqï•ý¸˜³Ë}œ;šÉ>(´�æ±×bß´0þÝœV`ïÅÁ7]~Z��S3<^,wâærF{/ŸÔ”²0^žì8jÍm_:³ýÉugûãC±ýwÿ‰ø`îï­B;ÀpTÌ1ñv±Ÿµ»Ø[  FÇd7§%‹ç²—…óN±àâÈ ³‰gÖÕ>¸MÞEueäNQ›IY$W3)‡£dÞ�x÷‘ÿ_J&€»ç~î¯æ¸ÿÊáÄæ°ÈÞèd¯->]¼�hÓ™É^k.iØ.@½­Óž‹ºÛs'f>!V^ÔÑ1-ªGœ>>¦rò³VhÏ�øøÉ{‡Îöw#Þþï‘û‰�zsÚ�—þá7þVÞw÷´Am:KO;£bzsÙËcôö0ɈX×±S¹lñ.Ô\¿ÁâYí�¢ûI³Ú#F:7#33“rRlñè툿üo‘ÿä{ ànƹWEöûçûS›½™ì£˜w[i*)»Ú; PO3)¦7bánóIkÑ N|vÃâÖÜö™nöVl|uygn{n]¶[Pt¯�ú¬ÅÈ3cßþóÈ¿ýÅÆ gà¥M<¾ô39¼W�ìWIGëèì)ãb6õÅOÇ࿼l.¡˜\^f'Ìfï%Í�‘‹Ëjo§âƒäÊ¿åíòøòtHÒ QH9"o¯—ï³».È_ý›ö/»]ÄfxŽ�ñÓëïÃð{Ãî«ý÷:}âdz¹íÀ�‹ukEöQSIqrsûVOqÎŒŒ)Ot¶¡–'9{ñð’“ž³…õÚÔC»Ôº èdO©ˆ“{¯—ÿ×câÑå9¦EþÍõå)� ù£�{Œ‹ÓuL<Š‘+ùEL/O_þù¬ØP§Ð¼œ‰Ç—>Ç+oU–žn—u²oŒ‹©vñDtg³ƒf·N+¡è% 3cd&Eö<“LÔÞÎ “ˆ¼ÿZr£Ø>z;W‡âí<üvƒ#b“Šdb˜T¤ˆx:È!É`ÚDúÔ×rþ£ß”Pw#ÖýÜOå¸w\|Ú+²o+…ö#cZ]ìÕýD�“�µû⑊3 (é6Cºt]ØÅçÇ.õ4.–ç\ËGEúZ<Ý(¸OšPîWÅ÷Ãë)_…ÇWks¼:U íi&—ú¹lŒ À”B;ðò%_ù…^Û'Û‹ˆ³³"é8&Û™yì½y”e±=f’ŠS“‰2^Ù©“z ;uŽ÷kIwÎM.+Þ®&ÃˉDªuµïIE$ƒB{J»a'{»Û*ýèOäü~]B<ß±îg¿•ãþ«÷§6O-²o÷±Ól‘½<ŹdtLô;܇חqð)c'·)¯[Oãáò¢Qûàã\Õ×�[Ž×/ènás?žÏã÷¸³ÙŒcåJ=~ô±ªM<×ÝòéÇ~6çßý§bc€…vàåJ<¾öKûÄãüÞ`ÔÙt Ô1É8&WÅöÚ1Ù"Á˜›C¹4™¸ÑüÉ^‚ÐK"òümG8s�:§•mÜ�_k9Jfp›4œI9N"âP`ßMŠvï4¯â ’ôéoäü‡¿&¡žÏX÷³库ý¸h2“½Wd_8—=æN–Ìh�ÓOy¦"P+cßîȘ™®Û鞦³Ö' .ŲԲo¥YtïÜnK—ñrç%í®Ç/Vcä¸n8Ù¤A±=M ï“û™#¾é‹-çûÏÅÆ íÀË“x|í—rÜ{%âür¼j³½þ÷F3Ù7',|ŠèÜO™?Y-ª§»sZ×çJÐ_ òËN�QðßJ zÅø%s(‡rSt¼—IÄ`ŒÌ°«}w|½öØ «ì×ýc�>ó“9ÿÁ¿–PÏW¬ûéoîOm^ÜßÇ»ÃñˆÛí´©dn.{Jý�Õf“^Ñ=Ú—�ÜÕ^‹—×_½yâˆÅêÍR=VŽ84pTSÊ8zRt?6­ôN}ÖâåòÎíŠËÊvõ<½ï›¢»}X`ϵܠXöúʇü�0 Ð¼‰Ç×ùPdt²WÇÅt�Þ¸˜^±}I�}ÑñØ2˜›?yBâÐL8*Ç\«ÅóÃë“#²ƒÄ¡z½ÅMµ…¨��Óº¬Zp¯}ÞÔH"ŠD"6‡|ŒGÇ �ɶæR.ý9ûô7sþÃ#©ž½W?|˜É~ŒuÏ‹11‡˜7µNl.ÓÚM´YØÍ^‹�£ßÕ>‰•—_ýó�Ž©}˜îbÔÊÛµâzîݽFw{5.Žë"û°)esµ8,°ï9¨à¾=¼zŒÑÿ^¾é+ßÉù·þ�¸xi)´/¤ôÕ_ÌqÿÕÁLöAWÏv�tl¶�#³•ÄâVfQÆé³'Ëd¢š<”ÉF´¯¯^žOLÒUg÷|òP7Ó\ˆ×÷ê|øÚH™áؘA–�ò ™8vîDQt�q‘}4B¦—T]ϨLŸþFÎøk’ àÙÅ»Ÿý+9î¿¶ïdß–‹OÝì›Z7{ZWd_ßÖ΢¹‘Š©÷Bµ´¼Öž„×'w¶Ç‚‚{癦£ÏÕ!sôâä]-6Žil|,°o…ö¼‹¸ÿj¤�}!ç?ùwâb।мxIÇW¾³O:Î.¯;{ŽãbŽÅöI‘}{�0œ<—½L2¢’`‰Å0˜= »2yX¼µX€:ù°•ç€h# IDAT2³ÉÃ̼ÉêÇé�މ™®ža"Ñ#S$KŠV†uH4Ò§¾žóý†¤xÿãÝý‰^ŸÙ¯Ÿn'7;ˆz�í7�ͧtµã¼[žÍÞ‹�SZ ÏÄ€½ØºW`/ÂíÉÛ½×çâåjsÊ®rÿ6©VM?ÄÇ©2FfshP¹ênÏy{ýyó¡à~,¶ü þ^Z íÀ‹•tüøÏåxøúõLöc7ûp&{µÈ^v°¯L.n«kç”äauâ°àæ­îöÚÜön1½¼|0n¦\öÔœS™Ge‡¯wÆÈŒ’‰<9M;.¶Ï•½Î.ö/÷s¤O~5ç?þ®b;ðþÅ»?ò¥¯~xrs{qv6(²—#c£cš…õÖ˜ÄÛ^€º$>utÌð²%ñqZóžÐ¢ž‹7Rê¼Û!˜=µ«}v9êð~çÁÇÍ8V®Ík/ããM1³ýx¿S îÛA8�Çqù¡Øž¾ñ7sþµ¿-&^: íÀ‹“t|égr<|sßÉ~œÉ¾vöÌÙç–Ÿnn1¡(.›K&Å÷Z�NLN�gòŽÔ¹m/™˜\VaSíÐéiŒ‘™$ä¢sÓõîöIOޏ¿‹ô‰Ëù?ý®Ä¸ýx7¥Ÿû«×;ˆÎί÷mŠýCÍnöÊè—Í šMª»Š¢±øtéÔ ìÝ•Zü|Ó¸8-¿¸Û˜§wµ—1qkLckGÒÕíÁmùvônvûQŠqø¹ØmŠ› ‹ëÛ¸*²oíù"ââA¤¯þBÎßýûbbॢм8¼q1\|:3Jç?ùžÄ¸]Ÿþæ~ùé°©äØÍ¾m,?�ÝE´™Æ»eì[-²·f´Ç²ÝE£ÛÕâåV| ãÓ-†i¹BS˜vcæ¼µ8¼~Ñè˜8­_ÆÆ£˜=¦Aoåá¼³ËWߪëQ2yÜ€r¶Û/Gý·sþwÿ§˜xi(´/„ô�¿™ãòá È^ŸÝ\w÷ܸÈ^›Ï~ñ1³IÄܱØJÒ0›0,ˆqSgzoñÓ$�8$ Ýc±EÁ½›,T–=]Ý& ŽÄ£cr¾o3ËŸºÅöÃçÝåñlÊá×]›}øF¤”rÎYbÜN¼ûɯîOoG$nÏÆM%i¦›½72&jKO+±ïl‘½5�ý6ºØo8>¦¹èô–´ZüœËÂû°è>13[p/bêÖ蘹Büd1ên'ï�Çfß8R›Õù�? ?Áa¼â1λýÏd¾ˆØí"^yËÿ¸ÀKE¡¸ûIÇ×%ǽ^‘}8«²¶*u@­ýŽ�Eög1sò(W®ÏsID4ˆXp,¶RŒ�‰Ã¤ø^tÇçMeå(KˆnËú$gË•ñ1żöí ¹8?üûéoúŸ¸�x÷‡?�ã��–ŸžO‹ìWEõc7{e6û¦Q4ƹÇâz4FÌĂ始Šì§t±ß¤À>sòsé©Ð®A�Û›Õ^%3?Æ’ùì½ØyI±ýøzÙw×ß›>¹2È †/›í¸£}»Ûçfù~¤¯ýRοù÷4Ÿ/…vàn'_ùNŽû¯íç²�ŽÏn³*kÇfÓÂ"{£[窻=:s(‡ÉDÔ—Ÿ6— 6–žÖ‹Ñ«7�a߇¹“µà>âôc±µ��ñ3#Ç„¡H*F¯§ñë›Mg^{¾îp/çR“‹óÝ~Ô§¾žóý†ÄXçÕE\\Žç²—‹O'�ì­x··5õGȤÞÅÆè˜g5Ÿ½U\_\TïãóL Ü1nV9vºŸ26fi¬�¼WlÅÌ�%EÃñ1»cgû &ÆÅÛ]D>;ü{qù0Ò—~6çßû§bbà…§ÐÜYéK=Ç+jwö ;zÏ¥ì$Ý#²·;›ý9™9y•OÜ`îd+iˆ™#°µËÖ�íÛ#&ÝíWÇ¥ó¸ƒg“ >ÛÁ\Êá×vèh?ÛEÜ{h9*°.æ=ŽŒ©5– GÆtç²Ït³7‹í›˜t±¯.²·æ³Ç³‰•›£dzß„ÞÇ›‰—s¥ _ž ]4§}8r¦èx?¥›=·¾žá‰Ú¢«= –ÇÇ\Íjß^7£äÃ被Ũ»ýÏíƒ×ü� ¼Ú�»ëþë× Gs&ûfZlß,éäY8›½›XD¿èÞMjËP+Á}³¨ž]4NZjÍÜÉ<þZ†IEùú\‘½vŸO9›sD*[ÕËdb8>æðö¨«}8£}8—ò˜$íÝ;ç×÷{¯EúÈgrþÏ Øœ$}ø“9Þú‘FÆôH/‘:öÖ‰Î"Æ=u êâÎö%±r<›íiA¬|3帘"Ôk +åØ˜ãû/™Ó>¸ÍÒb{D1£}r”sÞ.ÇÇl6ûx¸<í¹9tµŸ�GìîEúê/æüÝ_/4…vàn&_ÿ•÷^¹žË¾9»“Š—Í©Geß§¨µÑ1‹ŽÄö’Šòº$Í›méîí“çNV î§‹]ÚÍÞ»|4¾L&IEÚÔŸãBÖ”Gc+÷Gg·Ó2yqñ4âáþ§N÷ê‡EöÖȘMcdL¯£}Õe§Q¼Ô®+ç°§ǺݽE•yìݸ¸R@_/W‹ë­˜ù„‚{+VžÌh/cèÖȘΎ£Z|<šÝ^)®ŸÔˆr|{AW{Ýóu¼|uÚ3~ÅöM1BæìiÄåƒHŸüjÎü]Åvà…¥ÐÜ9éË?—ãÁ‡"û¡«gÛ˜M9YþTëìIíΟÅEöJ¡}”p,I$¢~ÝäúˆeÇb£óþ ¹H&ŸòĹ“Q.qš+¸·:vÊã± DE-¡(ÇÈŒN^'©¶j0¿=•�í‡"ûf{8&›¯�Ìž=�¸xéS_Ëù�~Sb,‹yäÇr¼úÖàçvÜÉžjÝì©ØITÖ[³×£Ñ½ÞZ€zµ«(¢~Ò³sâ³6�}ICJYT_÷Õº::·Y=£ýø~E{DelL4Šë�q23ÅöÚi€ã²Ôa{Ñ�’òáºÃ8™4˜Ý~!³ÙísµÝùþ £·>álà…¦ÐÜ=W�ìåÑÙm1.¦6«²7—ýEö¥³''‰DÄíÏœI"j…ó™Ù“Kf»G-¡8Û�¯§Ê™ÔXuu³a÷ÎñØìàÈì±›ý˜XœíöÅö�}>ç?ùžb;0ïþ+‡"ûÙxLb4˜¤¹ö¹·g–¡ÎÅñ66¾éŒö51óMãæ†Z£J\–�jJ•8¹7£½Ö„2ìdŸiF9eN{Ž˜ŒWå-å÷{Pp?Ž�ÉÛë¸8ç}¡ý*&¾ˆ¸¸éÇþÇœ÷Ÿˆ‡�’B;p§¤Ÿø•—¯ìgýmÏ‹c³µq1KŽÎÞ ©8itÌ 8]5Ÿ½ä§´,H “†Ü̦Ÿ«6§½šHœ86&:Ç`kwmé8™Öâ§\éjOE‡ûUÎ1\ŽzœI9˜×~<*›�oç}‘=ï"v÷"î¿)¥œs–\í˜÷“_9,@½Ç¼ÍÆ’Ti ÙÌǸ­ÛÄ ãáÙk±sTTŠ8®¼¾v›I|½8Pž‘럯ºµ\ŠZv°oӘѭ&”Åöj>ÑZŠº¿ÿd„LÞ75w# ïywóùtÿó|ÿUÿƒ/,…vàî$_þù^ßh›cÂq6>>;ê^/ÇÆ º/zÝìå±ÚxFóÙ—$·=o²›gtf´—AykdLµà^9 [½<ŠQ2e¾MÓJ&".~j$ålÊê¼öc'O1«}3œM¹‹¸¸ñɯúŸh‡co~<LJ?yÝÍÞ*²×Æ%ÖŠçssØ{sÙG…ðÆ™Éh˜¸Åís1sŸ7φ̵£šÃ‹] sóÙ‡ï{Ê>£ÑŒöÊiÐÑݘ)¶�>w«±§ìf/¿�µ2ƒ˜8o®‹íÇyí‡2é+ßÉù·þ�Æà…£ÐÜ—#c†K 6�îž4³ufþäâ"{- ‰÷ñ8ìðýf3„Æû×ó‚úfÓᛕ¹“µbúUÐ]+¸Gç(l#9(“ŒS¦ž´øéøï Èžkß÷C7{*‹«£³ƒ.žíYÄîÐÅsñ ÒG?—óŸþ{É0õÚ‡#Î/® ‹íis}z³ã–Í#›úHÄT)¨7»ÚcÙØ˜aüÛl8)âàS‹ìÍ1½{ª†Ñ§5¥ÌèË11ÇøwpÃæiÐ^cJQXÅ»ƒxyØíÑîl�Jl=iª)ë\ŽW\‹ì›±tµo/".øÿx!)´wBúú/ç¸÷ê8Ù¸*®o;sØkõC²Qþ;INžåÔ¹ã°åmZÿŠÚíì|öÚ}hŒ‹뵂û°k§wù¤“ýÄ¥¨Õd"ƉPmñӨȾ™Îh¿ºi¾žÙÞ!s5¯ýü0Bæ©2@=û¡Oåxóc×Í%£nör jíÔfñú’e¨“{4.‹q¡|Ò§PÆÌqB|\‰•O=ù¹zjêß,O^i¼o«èž¦quªÄÒKO�ÖŠíe�±jµ¹%Þ¯ñÄD®å+‡—<,°Æ*ŽŠí›¢³ý�·mÏ#Î.#}õsþ…�ŠB;ðü'_úÙ¯¼u˜Ë~\u6-°WÇÁœ8›½w$vI‘½:gòý:�ÂúmŬ½ùìÃûVvº]5Ód!¢Þ�sõzm”Lô‹íåmk·LÌr#a;vï¤]T@]%±�ã²1èh?Ž�Ù�ºÚïG|âËþçÆ¾±³v²WFÆtãÜÍ cc"º3Ù«]ìõŽöT)v÷æµG粈æþ¢“ ì·±µüЩ2Ÿºµ6Ÿ=* #Ea½WlOùúäæè¤gžÆÊ娚c¼^=é9ø~^5¡ì®càa\<ú9lÌjßžïãa€ÌÆC<÷î¿r˜Ë~6�É>ÓZ �eO7Y‚Ú,²·n˺äG·‹¨Ž¥Þ¦šÈ �ÿÆôð¢—w,M’±Ú}h�щÎ×3OB4:¢zoÏ}/ª�ï‚å_£„¡<‚ÝS´ÙŒO^lÏö/g—÷÷]k‘~øÓ9ÎïšK†]ìÛÆâÓÆÞ¡jËNÊØjvùiªw¶�ÞŽJü· &¬5²”ïeç}»Žâ×É#¿â%ÆŸsòyÓ|L_‹“Sã1©Îº_+/�™�Åì‚Ü2.n=tŒ‰Ïö?ãg‘¾ú‹baà…¢£x¾ޝ|ç°µH8Ò¶QXß,+ —…øèÌ�\\d�þñع$b�ßhN{Äít²×ŽÚZ`ZKQk]î½¹“‘:�çµQ2�¥NåÑØhÌ¢lu³×æzNþ=t·ç]‘TDÑѾ,€Ú]<‡å¨›³«#³ñàuÿ“{^�8?¥›½ò¤ÌÐÅÓ^CǨp� elõxøÔ"{íòZìQï`O©ëÞ4ŒÎ­wj-C­ÅÈãq1Íùì£.öa=7b1×7ââ\ËA†_CåI‚É£Á™tèz߯'¦ÍxÑfw=Bæâžÿï�ŠŽvàùvñ`„•ãb6�žÖr¨Ñ\öVçrÄ좧ÙgºØ‡ GÙMÒëO�®šˆ˜_zµ`>ç8ÊÑLÎn×Ó XO½Î¨h?Ýd¬Õ5U<ù�R»;~q{9Ç¿õ¤Ía?À$&ÉEWûa1ªÿÑàå–RÊq~¯¾�h®›=ŽCL�NæZWsjÄW“×k�íé}*²×ââ˜Æ¯½ÓŸ£7{cu:/åIÐîç©t¹�N�F¥»}ÁcÑz|[Oz4»Û+±}ïôC³!©ÖøÔêj?ÄÄg—‘¾ú baà…¡£x~ޝýbŽ{¯ ’�Þˆ˜ÍÌLÊÍ ³Ù£„Ö‚ÔI‚ñì¡.�59»Ý©~_®nRl­vå®ÈƒÛ.ZôÔêÚ‰™ÎöÞBÔ\™=YÎŽ|­¹Hä&ß·á¨2±v¶.ßl�샞¼ÛÿLïöGfãÞ+þg€—Ý'¿:]€:I—–u³ÇÜh¼è4m¤z{šµ"o¬(²Wâãê Ð^{š�oOŠ™ç– n7Š)‹S—qjŒEú v.?Îh&{±õx¿&íå×Pܧ¨<±1_ovµgµŸEœëj^:Ú�çRúì·:3*‡ó¯gÆÆDŠ-?�˜îˆêÍ__Sdov}G;á‰âþ4;ij‰SåeíìÉSçN6“«%�ckeù1,·íÍkïÎñ?Îi/ÝHõ9í£yíÛAÏ~Tú‘/é䀗5î}óãûnö³óâç±Ñ$�ëF£k½Ù�]‰5S#¾ªŽˆ‰h/Y�"¶‹EöÚ¬öFü<ºK�›s;‹Z{�ª'J˸·v*qt´bä™…°©õØVÞnž°­�J­=§äY•¹íµ=F‡qŠéË?'^:Ú�çÓÃ7ÉÆ`Fe9§²ÚɾiÏ`ïýœ <'—E»ø=›@ô.�8mÖdê¾¹¨s§ì½š¦×�ºÀÌ�¼º]¥;çøa‡ï›â�íƒÏWÎo�Êë×3.#ÆFååˆÃ}>&»uî;‡®æS»yrDÚ]wð\™=¾æµ_<ˆ”RÎ9'ÿóÀKæ•7÷»[6gÛm»£½|éîZ0>¦Ú(�Q•˜±9—=¢=ö¯2f0Zcc;×bæÚ\ñf÷úÜ)йP,WnšŠ«j±qø–;ŽRŠÉ~£Ql[ÄÀ­yôñ{m^ûÕ»4ââ(ãâ<þ¾çÁÏX.~¾ršŽ‘Ùl"v›qóÉÅ}¿€‚Žv๓>÷Sƒ•­‘1•±0±pDÌÒY”ÝE¨Qï¸éÙScÖû$�X2k²3g2zsÛ}¢=²Öéžê�9µ÷êõ±ü4@«S)jÝíÑèÔé|ß{OÎ,^°[ûù,Na”]íç—ÿ¢ÿùàe‹{ᅳã¢rгµshrÂnÁi¾Z�»wÖºš{ÝìÍ‘1�e¨£Û–±àL‘=U®+»Æ[3Ñcé)ÐâäêéϘ9ýÙŠ�ËǤòø,‰‘çvÍ=iR�Ñ3'=+»�ª�ìƒØxxjãØÕþÅ¿®«¸ót´ÏŸ¯ïgT»Ù��ì©2Ÿ=6õ9쑊ëfŠ©µY”­âmT–€6‹ìs �¢}$tr}LƒùI”\IN­µ_u°Äôó¦Áu¹è”Iµ÷aOÑ�sò|öâ²Ñ¬õ<íÒIƒû2™EY<6“nöÜNFs‘HæÖ2îöÜèj?wµ¿öC9ÿÅÕÕ/‹7?~ˆ{·ƒœ�&“X0²£61Z 'ͱ„eØ[†œµ‘1͹ìÍže¬;7*¥v»(ïK/NÕpy>¦ÊÅ›iz›ÉLöˆz‡{+>Ži¬< h'qóà²QLœ±qªÄÕ×G§S‡__®ÿ¼”]íÍŸÑÍ8�T<�¸÷ÐïàÎShž+é³ßÊñÆG÷=ÕnöÔéî-*3‚Úí¢=V²Ú-�®‘ˆ“GÈÔ’ƒ“–¡¶’‰›|*¿LF�xLÿˆñ×ÑQØcâqÅö¨,~j$'��™lU�ê¨IÁý°ü4KQËã²W‹ žŽ»Ú_ý�_ð2¹|±.A­Å½Ã¹×›za}®ÈµS‘e7{qì’QŠ­.ñèÄÄ�x¸Ú[Ré—¢C·ÆÉÔ>öÍåâÍ<Ž+»KP#êÍ(µø8±rLãæˆñõµ˜8Дɸš"NµX8¦±q®4 äÎìöɼöã)ÏK¿€;Ïèàùòðõ}GÃl7{1ª#–.æIó#cbfF{ë(ì­ÙŒH)“—ÔêØYóR~¨TŸ_툊þQØ¥�Móˆlëñ/º©RÄìÑçîQÙ–èÎ&iz"c2«ý~¤WÞrl^é‡~4ÇÙÅ¡¹äl×µSM:"fçO6—;o7Š%ÉC¬XˆÑ? {¢Ö1Øáçn…í-BÞ¦ÑÁ¾¤³}øñG];Qu\wü’j#d®þ)îÿð{6êÜ/~>FÝ;­®öÍõÂÔcWûn[Ìk¿ˆxíÃ~ÀËàÞ+ûnöÍÙu±±·�¨×ɵ"y£©àänö"nl#ªM!£�}Ã8¹Û _|ìî8™Zœ=£7~¦5r±¹5£`¢ˆ�£Wb×ÉH™˜9ù™+qp±5ò‰]íî•®öÚ2ÔØµ—¢nÎö'<î0íÀs#}å;yß;½>:{Õ œn¡›=ff´qã(Ž®%1•â}oIQ/y(¯[´µrF_ÖŠnöáÔE]AEb1÷ÂI Uåã4»v ¹š�^iºd¶uò¡Öé�y©Ñèj/—£¦Í¡£ýlŸl_Ü÷Ë^ô¸7¥ç—×#cÒ1ö­Ä±äD]+η31f«%Uö¥V¶ ~[ÚÉ>‰5gŠìK–¢Î.F=õÔgíägyãXxÿO9ù�˜¹Ñ™ÞZŒÚíj�ÆÏTm×UÔf£ò¤Ñ¦séó?­«¸³Ú�çÇùý¸.´o®GÆÔ:{f»ÙË@º ×.O3³(Gq-™H7<;3¯=ZöèÖ»éÝ ·)’ÞãQŸe^¹Í)ÅöT[>Ûú>Tº¯Z…÷ÑCÚ9 ÑJZç–�UGÉ¤Êø˜ã‘Ùý|ÊôÑÏJ0àEö‘Ï\Ÿâ5˜lÚì“ø7æÇãÕ VããJ¬ÔÚÿÓìf�þ©Ï^wz,SkæX2N¦l¬™-ž÷ÂêÆ•Í&”Ö8™ý±8·ØŒRk"j�NHµÇ­õsTÛu5oÚ³Ú7gû“w”B;ð\H?þ7rœ�]'©X©ÝÕS-pF¿èž:÷æÈ˜˜ŸÓ1———ÉCµ‹½œGãˆnØ·ºûcfþx#©hu¹/í.ºq±½LÆÒü÷¥•(¦ÊcTëêJ•ûµ¤«ý¸¨,6íbû¦˜KyÜKp˜Õ¼À.– n+sÙãbÒ‚Óz©QÜný[�=+ñ_%Ô�Æ\•÷ińը¬V@nÄÖeìX-^GTGEFkÄNjŸmÅÒQù¸½‚{,‰�ÄÇ1—Í(ÑÏqª9QÔgùO¾�sû­ì3:æ|ÇQŠw”B;ð|8¿wÝÍž¶õŧ周éf�¥ Ÿ:ÉäÛ#Ú�ÔÃöäÑ(­�ÆRÔ^—}s9jt ÚÕ­Â{ïHiÌ/zºI±½¼,u¹˜9Ò\}½|Ì]í‘bñ¨ê™�<Ûóˆó{‘>ô ]íðJ)åýlöáÔJG{löZÌÙ8ýØìd/‚¥Ú¨˜I¬›Nèf�~a¹5½Ùøì·rœ]Ôg³ÏuôôºÙÓ >¥™ù…½OÍÂ{/¡hól&@µã­­Âú’Ù’'Ο¬Îžì$1�¯¿–,ôfOv–ÍÎŽ�i%o•Çp®«½v {ô8´fSŸ(j,8v¶oÅvÇfàÅô‘ÏÄÕIÎQ‘=õ»«[ccÊîê¹%¨�†ŽÔ¯+—¯ŸÚÍÞ]h:7e¦È^mòXGŸz4æš]*�C³yd.6nĬ­Çá”ø¸ÕÕÞ%“R{´ewžküѦ1VñðäÓåC¿'€;I¡øàÝízÔ¦ÖéÛ)¬WG¤hv�—Áp/y¨¥­‘1iæsߨÈÞ Ð£ò¤AD9jT†èÔØ;síSoÙÓÒ%¨µ„bÁìÉhÍk�þ“#«ºÚ+�í¤“©ö3±à¨l*ºxŽË ÎïEzø¦nxÑ\<(öUâÞ8alLuÁ{%þ�\õf�Ù˜é„nön‘9*÷­òo:¥È^ÆÑØ%Ô*ŒÏ¼”ñt«p_~m‹G,ÆLl FÈDý~5ßìœðM ~†šc‹'…º§>‹Æ“³s¿'€;I¡øà�_^Ú›ÅõM»È^= E˺ÙÓ\"‘NOÙSçlk¤L™Dg9ê í“Ù“­ÄlÉÝÛ£sB µè©•ètŸH)¿žJò™:KÅjs,ggS÷¤ú"¨³‹ˆWßòû^ û±1ƒ%¨©qÚ­Ù õÆ‚j“AÔGǴ⺹yì£0­{Í�üŒˆù‘1�XmòþsóÍ+�îµNÿjCÊÜ<öÔéØ]€3÷yò`׿þ¹F—E³Ú?­¦šÔÊ­Ž�éÆÉãQŠé³ßÒpÜ9 íÀ›lüØÏæënöítFåh&û&ª#AªnçõZ7{'¦�=ÛSû€1½ýìÒˆæì͈Fq½ûÈ/ùîD½èÞJÌNH&ÅöÞ]Lý'5š#cÊÇù&]íµŸ¥ˆê1îè×[Åöæ‘Ùë®vàòáOí»u'㋽DÕqelÕéjo.±Œ™'eÜÙ-XƧ'u³Ÿº¯§ÖˆQ‹+sèkct�„©ÅÄ�Nøj—{š‚a.n^4Êç”®öSžÜX¸µ9>&ŠñF�âzóÚ�y¡1ŠÀ¤Ð|°Îïí Š©ÓÑSíài%Qé´ˆú¸“VwEsj4F•”IÊÜ|Åtz‘½—¥h'Ý™“33ï› Fë~,INLªº#d–&7éj�ú÷µ{Ís¨ IDAT·H,5Æ¥ÎÏVª,ƒÚ »Ú/#½ñÝ<ð¢¸|pX€º­ŒŒ©4•”OþW ¹­e¨5½±1�¡å øÉ§HýϵX·¼í’åŸ13~0¢Z´ñ.yé6ï¤âø^Ü�¯}Æcžæ¾gsÍ'µ<#5êTy õDP+>vµNwÜ1 íÀk{¾¤jÝìKŠÄ½ ·¹<©Õ¹ÓÊR?yhÞ—vç,)²WèÎ}«ÎQ/¿žNç{Š~Ñ=�2“½—ü,xŒš'ÒÌ¢§¸AW{%ñHQ_6LÖRã±O•ÄnnVûp^ûö,âÞ«~OÀ‹¢ìfßtæ²G%Ž˜ÄAQ9y8ˆËªM3§õ4œ8:¦Û;ôó¦åEöÉ�Ê­fˆèÌůÅÈ­÷X3&&bþ ˆ˜Æà³]íõÑ0±àI—Ö8¢Êø˜¨4'¥Zœ]ŒMƒ¦“­9íÀÝ£Ð|`®ÇÆ,,°×Ž"¦F'E/¡˜ÌÖž)¼Îv³w‚؈Eö¹eJ�Žêj´à8lëvs P«3Ùç¾ÆVRÑK$Ò鋞Nîj/�È–÷¥ózêtñ´ÆÇĦ2—r8ŸÒøxabß7>šcs>žÍ3'âʸoRl¯-¯Oí˜ê&ccj�Íø8æãå4//Š —ŽÒ‰úBΘi|ˆÁK3'‰ÆxŸˆê›Ö“ õ¯uQÜÚ¹as6ûL SýyˆJ^ĽÍ'GŒ™)Ç'Šíé­O8Ù Ü) íÀçì²SŽ„ÙDsvê™kÉFT ÂsÁkqûÖ�›Ýì3Qì¢nïˆú|ÄN`Û[Žºè%êK¢&‰[qß-ј=Ù üÓ‚Î�EGd£’ŒÕ¾/­¥¨�×c扛Eãc*�<›³ˆ³ó}bÜm—bÜdRéè�ÔXÖYv´Gc¿}wñP'~Œöؘ2æn]·$^Ž^¼ÜŠ [±{šÞ~®ø^mxØÌÄÆ›F“Dm&|š_Ú�¯£÷µ/™Ußíjo}Ž›Œ�Yxz¸9ö¨¶w`xÙ éäãŸ÷{¸[e.ðÁýº�=̧ŽV°õÍõµ9‹Ý®ãZ²Pë*ãÇF7{óXh« ÜèÎ9y1jÔ;Ì[AûI†ŸóPßÍÃ�—¯?w΃ûœ·Ë‡¯W¯O‡÷^•ËS ®¬_¹¸ÿ¹’/΃›¦Ê»æñc|¼?Wï›7>ܧ8~¬ÁÏR.>Gë¤Fu6åàØì½‡~_À]w~ïÐÍ^›Ï^„c~wL³ã|f”âÒ±ŠKQªñq?ÌÇœ½Q0½8:ê£czã—ìš8t9�o–‹°sGãÙ2.î]WƱ­�7Å8®ž¿aåqÏÓ«ªñs-ήý;øzbøi?£9bÙœöAã‰ñ1À££ø@¤/þõfT`¯Œ‘Ùl#ÎŒ�€;o{6n2é͟ĸ­]>щ +/17Ê唀~&VNKæµ7?øü¿³õâ¤lm ý(æj¼¤Í´ÅòÚa‘?õkʇcÁus3ÚÓ)ãÌlöîýˆÊ|öhŒ#š›Ó^Æò•øØœvàRh>ç—×GgSc>{4ŽcÖ6Ú·–;E#a©’KgOÎu³/̺ÉRïs4Š»“¢÷Ü(˜Þò§¨Ÿ˜ñŒ…OD#)š{ŒRç{37«=uÂÚ8©ò®�D§Œ�©&„½£ÌÃdî0§ýì<Ò+owTzíÃ96gí¸·¹¼³ÒÅ^-j/š+N·‚°™ýEÍw=ulL/ø[ÒY?3šeTø®Œç«� œ{IÛFÑ=Õçå§¥3æ×us‡h|ì^ž1ûMšÙé”R?±éÍi¯6ñ4âæb|Lúì_w†Ñ1ÀôÛg¸ªw„0¦sÙSolL+ ‹~§Et:åç¢ÜSºÙÓÜLÃòþÎ}ž’™Åãdr1Ne06åj¤KŒÇ©¤Á‘ÚÉõÃ#²“£¦­Q1å±Úãc�Çc¯>ìàho.‹<¾ “×S}¼L´>om|Lñ±ŽÇ�S:ü f€–‹QÏ"î¿î÷ÜUM&iÜ]íîíèi5žÔâÖSæ³ÏèÎp_òþщ™£òq.nÝ¿¢ÐEœÕ:mØ �wû80çC¬š±în:AåKoÓ‹¸dLLkTKå¡Ê½ñ1íÑŠ¹þ½ÆÄÝQ5Q‰×�í(.¯�¨Ïμ\<ðû¸;¥.ð�˜ëè©ÎVï-¸, ˜ÑÓø«³6Š$v³Ÿ°¼hv1Ò\‘}áÈ™Ö}Í­DhXtσ û8§½5w=*ó'‡×Ec&äÒäa°ç¢ žë DkDeîdƒ£äc.±&ïy˜d¤ñ“QKËΫmÄv»?ÜM÷Š&“Mão-@�‰…«�Ã�øfož2Ÿ½ñ>Ý%7�™£ÞÍ^;ù˜KcSå‰�Öå-yW/¶Ç.öCòõKÙ°1ŸZP_ÄÖo:ú\qÂû§…sÚ‡_oÍ'iºiò=ŒÊøsÚ�»E¡xæÒ—~&Ç+oEöM†u-�Ž^Q½غG0çŽÄž8{rnþ{D¿HžNý3×/9²[»8W®ËqZ÷ú$(—£¶ÞgIW{/á˜ëÜé½{n$>E²4L,ZOŒ¾äƨêqãòXóYÄÙE¤”rÎ9ù-w̱Ⱦî&ŠÆºh,B¾ÞZ„Zƽø/V„s£IÅ  bæÞ2×Ú“Í›‡Ç>*3Ú7ÛJÀ;°Û ŠíÇ‚ûnëív±/¸7béQ¼•nöS—ŸF¥ˆÝˆ•k�*‘êKP/]íå�¯¥ü^Î�Ý~ï¶ÊVÀÝá7ðüæ¹(Am¢ºì´vtÑܿʿÕEQµü’±1•`?ÅL³¤SgḚÔ7ÓZ.�dmA¤Ý ¼s§{=UŒh|¾‰=& eBquyEî‰Lõí`4ÌdŒLy]*¾îTÙãúòêœöÍtQ×q~èëñûî¢ãؘHí�DµX4Uöâ¤èÇŒk¡Þê|öÖŽ]=©_׺Ù[1|«È>š³>œÏ~Ö“#ž>�Ø=�ÈOE÷Íþ²«†öÝ4´¾ ó´k}XìN•ØrÑ¿­ÇoáuÕÓž­†–Á;´ž0}�•qH£X8¦9Jª5žfäÜ•r—‡xö‰ÆydLê,øì.ë™[$ÔINÓŠ?{ÉA'Ñ(“ˆÉÕ3EöÉøEùæß à'³']éí¤`R„¯ûÕ¾•(œp´vÉ)ÛÚ±ÚæÜË%Ge‹Ÿ©\K£3³}ÐÕ~~Ïï¸cÒÃ7süð�^ÿM�ʉÍnÃIÌÇ—“ëo¸u6Æ=ù«ïÝáéu7êfïŒà›Ô‹··‡—´©ß­œ#6�#ž>ÙÖÓ àQ4³ïÆAs9›<·ö- cg¯lž$=å{”£Û�Ó-ÄW®/ãêÑÛ©�¿ßÇôñ/æüÿü[§:�çžB;ðìmŠn’ÔH6&3)g’ŠáñÛË:gf›×O½ä`¦›½Ù�>Wd¯Ü''Êe²WÁñqÖä°c{ƒ×ŠíQï^Ÿ ü;EõÚ‘ÕÖ1ÖÙ·‡§éMÊ£´£E¨“G½ðÞšÓ×Ýõ£|ÔöË$q»ÝŸî–‹ûÅ|ö¢¸˜bÏMæ§7FÇTg®wTCÖ¥õËÆ­æ”EŸéÕÎ2ØQÃBe±üæì°óæ¬(°Ÿïc«ó‹öþ¢OEG§ˆ~õxnŠÀµ,îV;qò¡È~•a3ˆÁíªÅöãçË�eOKæKÖ‚õÞÑÕvòœÚußœÓ>ø>å"9È©žà–]õµ'š†]Y‡dÑBT¸c†c«§×ʘ¯·KhI`yƒ`4�úniþFiiüÝ»°úÌC£›½v*ðÐÉ~v,®^ÎÏöEö{ñ`6Wí"âíˆØÆ¾Ø¾ÙF<ÙF¤C‘}3ïre¼en,=a¬a5x�yÇ&+.Š‹›#c–ŒSlœæì½>i:Qhî…và'û€7õ:Êk3û¢¾0ª¨•‰É ÉD¯K~’èt’‚ærÒ%30{‹NkEöÊ\ÊÚeifg>.yÊ×/WEôÓù“©ˆ±+èî±Ø¹Yï§d ÕÌàô„¦9®fî,oª�Ÿ¹ê¸/—¡F4wÔ î›mÄ›÷{î’Z“I4âÞZüÙÜáó %­?˧ìOº�e,ÝŠÑ[ÝìƒèÍv?zo{¶ï^?¿·?]pìb¿¯DÄÑ.´?Žˆ??TNÞ‰ë14é°u3§Á‰Ç«†•rTagÄá’‘1·ö ÉÀÇHÅ8šÊ÷µ<í:Ú�»E¡xƉƶ˜ŸØ[„ÑžkÞèî%KŠtÊ Òò£®Í3·Àµr»Q—}íñÛ´ÿ&z59® í»aÁ}w¸ƒ!”y7N&ª#[Öt³/³p®{3?Üçîý(ß±ó55ÇÕ”?ËE'[Ìuµ›ÓwΰÉ$Í�ÐX´\ôæAïÊ89nñã§þþÖIÜ´¹Ž›Žcb.îE\^^w±?Œˆ×"â­ˆøxçs¿v¨žl#âQŠØÜÛÇŽ»§ƒ˜ys8ý8,çë;Z¡p/–�™ËŒYœ{ÌoÒ€Rû¾­I“Úût´wˆB;ðlm6õùì£ㆋP‡Ë¤Ò‚€?5IÝ$aH'Ÿ·­¿Ù*ÀOžtèÙ7ãe³›á¿‡ÎžVwþUÂð4b³Ûÿ{,´ïžÚƒ(�Ý;‘*Ëž¢X˜Z èO™?Ùét/ç´_ýl䯇­Íjo,„:5a¹úÜåBÔâ~ŒŽÐÖïÚi„Í>aîXüÛzb=¢þ$|o´F-><1v½IÌzÓ8¹yÛSf½·ºñ�]*泟WŠìŽˆ�ÍÜí{ñɸ.²o÷!ð¾ÿäÞ~1êîéusÊp„L.FÈÌ.0=1Þ\tóÚIÏ|»?ù”/©1¦G/{ ðœQhž™ô¹oåxí‡+ËSgœI-±¨çkïÚZ2Z›y¹àã,ž%Y~þÖÌø™12©‘@\=�"ûñH뱸~•hœí_Ò¦ˆ<ížîow,²GŒ=»Û‡]áÇ·‡óÚužÇ‚ä£ñŸ<§=b~he™CëΦÁ s÷£‡”[ßßr^ëà²ã÷¸ñïŽÿbýôf c¨JGoªÄ¼7nz_rÚ³5ÒñÆ_ýÊ›¤öýkŽ�ï¶¹îh�q‘ýC1_d?ÚDÄGâzuÑ1†{’"ŸGlGl�íéØÕ¾›9áØsƒ}F·÷;Ò3:'W'§@SçëìþÀqðÆ/àN�­ÏÎÕ"¨Æü½c0Uv-Ô‹”Ì{Œ¡Ft�ôÖ’ž¥â]®½Â|¥ð:J,Š"ûf{˜!¹Ùÿ»=$Û‹ˆó‹"XMã0OEå¦ý0åˆxt/âñ»Ó‚ûÓâÆ»á+ƒâùU|>ÛÒ[ö4ÈϾÿ ’�5ùJï ƒÉŒÊá™Ê7¸ÌgRe1jy´v³‰xø¦ß'p'2î‹£/ÖÌZïÝ<ÝèCÜRûþèQïI%v:.C=‹}GûýØÚߺá翌ëbû.öóÛÆú=}<˜¿›Ætù†qð3ý¾ÝVsKí}Ói?#ÃùûÇ ž¼ç÷ ðüÿÙ÷ÏÌæ0Ô0mGfÖK:Ùß÷x?ÝðœØÊÓ�Q_+¶GÄ\Dœ‹ì‡P—±ïæÙD}ë."ÞŽ}±ýÑyÄæÑ¾à¾y|�$ …ݱ¸^›AÙlûnÄá§“=¥ëæ–…î¼öáíjóä[Çg[#‘¢Ò­utfN;Ü�Œû<ªO 7G ¶BÇ4R¾ŸéÏkqg¶÷UgûÙ~®úE\ÇÁ÷V|Êû‡—·ãzn{¹ƒ*¥÷?<}ž5ÇÂ/y\�T)"Þø˜ß'ÀóÿgßC<» kÓ92[YôQYu“ŽŸtâÔoÐ�ݾt>û’îýJ‡óh¬È È~ì`?»Øw±_œí“‚‡ñz\ÚË—'ññƒØw=zñxñøÑþnìv×Åöt\„×sÊ£XŒÚ ´ó Ž¥sØóüç:éCŸ’ užL˜<—ÐH{ o7›ˆ�B;Ü ›íàïx#¼[ˆ¾„¹Ã’+[§7×£Ïb_d¿¯ÜÂýzy¨¦lbƒ?gs4Ð TU¿¾”Ô»ÀBTànPhža¢±,€Jõ#�i&òJÑ\Gå·ݯÿ0iîõ4É#&Áf9›}{vXútqqÿ0*&í‚W"â͈øè!)8¾¤Áë�"â?GÄŸÅ~åÛñîå>I‰¼Ÿ×žwû—8v·çÁx”Ñì”" ?õHêÌòÔ¥Aÿìû´–Ÿ.ù8�.üæç­|Cçö—Éãvë÷ Ü iùßþ[‹Ao» ™ãy"à”OÛŠ›6éztÌeì›NÖzû®øfGûIÁäÝ“oûÿ�Ôˆ¯rG…vàù§Ð<Ã<£LUŠìWÏuy7b´%‰Fµ`Ë9Õ­|ŒÊH‘Ú ÊQ±ý°ôéâþ> ¸¯Å~åÇb?›²åâ�<ü?ñß Äv‘D<}:(¶çˆMÞ��9v·‹éÇ@8w¢ò[;N{“ê{ëúÁ²ÓÜ»í©UýÞ΀㲬ÊtÙ7ìÐîHü{“€qM0ùÆ?ðÏ=s·nËöð²‰ç¨œŸ£è¶“©´àÿ%€çƒB;ð mÚ‹OG�ÔÜ ÊÛÈIn°�gÑ…·Vao<.E�v8Ÿ=…öËØÚ_‰ý¸˜Ž~‘}ðmŠ�âí<ˆ»ŸœG<>�xz¶_ŽºÙ Äå“%µùäå×’O|<òú7¹Ý Åò7 ¥w½W’ïá2¬Ôúñ,GÉlü:€» œÛýR)âŸÿŸ½7 ’ì<¯ÄÎ3kéª^Ð��X¸‚ر‰$H�@“‡¢LÍH#�5ޱCáðÄß쇡Ã21¯~t8ìq„_¼„Ç)Dj!EŠ.¢¸`!A \Ä At7º«*ó~~¸Û÷ÿ÷/73»ºøNDEfÞÌʺy3«ê|çžÿ��W]Þ…?k?¯0o/ a‡QòxÄoßy}¿ÂÏ-œ ƒáÂ&uƒÁ°?3Æï$Ï…-ɯ“d¸0T]˵›µîß´¯C‘+¼KfPŠÔéz“ɾ‰Æ�~Àå.±+S4bû 4âü·ût£ò'Ó!¶Æ[&ëò/Ë�|íXÅãÇ~ÿŠN˜hi7â{¼¾0‡{çÙ_ƒÁ`0.Jf|~ž–Fn—RÅb:Ï;·OÏ' $Ë`†FdçB{wüˆVð3¨ì5ÒùüÑêÞšUí§9Ú ÃEÚ Ã>ýµ™7_˜‹w3“$Äú•p³ Mðœâp®˜ØÞ íÜÍ~Àe ü¨5W¢Éu?Œ&‚fm½Ú;aŸ‹íÚ‰wŽÏÅ2X»’â[ˆß'z ƒÁ`0\4ÿû‹±*‘“|*ç—�{ZŠlTÅ;¬ëFßpM‰é²ØƒïhŽ—&VÓjŽ!-{Œ ž éΧ%v4·Í<$ƒá⇠íƒaŸþÚTŠÈ~± ;hN N>p±�¢v¥O�«}Ql@8Úшù\d—yâ1ë¶+y/ÜEøˆæ½¬ài#«/œ6·íïŠÁ`0 [cÝ̤ßG‰o¦Üu² ¡tŒðJÊë!u#°wbûÀ€³N­`÷~àLûœ{h"û£Z8Û)˜(óziÄ1§U½™Ÿ?úçPþõÒª?KƒÁ°ÿ0¡Ý`0ìÓ_› ¼Ø˜"ѵdpy¥:{µã¤”¢òãÐ íUãFï„ö£KîÊvû<]1j%#c”ÂÖèû“{¿èཫ™– ~–Ë|x¾kNx ƒÁ`8ØPEÅñ´`”G “ïwtKDøO¹šÇùAŒt´SëhŸùŽö3^Zâe¿€F¬¹}Î9¡½®g=_àÅÉæ×PîŽebehÅ ¶OT²¯có&¸ †‹ &´ †ýAª¼ÑR09 ís“W�ÐŽFhß@#’/{|7Û¯5´BûÄÚµ÷ÐÞS¬ìäó·—ÕÄ¥Á`0 ‘(–@ƒ\ LSݾL´Çyx鱟U*ª;†ÝRnóRR3gBûY4Bû‹ ¾ü—шô/cp³Ïf�˜¸Ù)²ß‰÷Œ|¿²Ç¹ðø�]±@ÊWê{hÉ™èn0>Ìg0öN”:^ÐaÇ]Àï?Ÿ?G!Ÿ«ÚÕ�ö?F…0oß‹Œ¹ö4€–ÿù×�KŸ¼2 ƒÁpÀ©‡p9�¡'Ž_ÏqÆÈýò{cO£m'j¸ˆw_ÁsÅž¸¿šøFõ®n£ØkÀÍ¡}¶ìíçÖJåZN{íˆ÷ð4€gЈô§Ñˆö»f»ztŒ|ÕÏ%"€2ÎõÒU±§눧yò¢ÑôüA¬Lh7 &´ †}‚Q"+eÇjÑÉÇdžº°Å“%³“Üßn;¡Yκ Ì0>QížÓhÄ2⥄ìJ­ìç®þ×%ÿûdB»Á`0 ÒÅL#¢1ˆ„¨®q)7‚D’籜9Þª=9qWêD€r¿<Ñ€Ž«óè–Ï^Ï1|wÚ®ÈãÈ5ïá žÃ�Í~­£}— í±œv*¤¿ûchvÑ�#Îîüü‰6§=�Ñ}ÍgÀî@y鯗ä 9Û,FÆ`0\ 0¡Ý`0ìÜ¢Än™I ÐšS"¦']4ʶ…ŒïKºå9om{ P¯è0ÏØóñå°1Ò«m^t9ìR”û2AïÓNÉbTËç1 ƒáÀƒê�Åœ¹Q1‘"D+á*�rL)v—Šï´`?Ré~òÇ¥^‡| ÇxiÝÞf®öù ˜ï{;h²eç€ChãÛK~ýÏ£Ée?ƒ&ç}�›}o§yîz6”¯r‘ÝËj—×Åk¢Òc©]Æ>+…qD|žyš½V*ÛE?pí×�m�ó ˜ïo~[dW(üLÉ �âö'ö»d0 &´ †}2%#Iüjmî«Ýµ¥Ÿ§}"QŒ%Ý;hœì]å²èžoŽ0ÿ2ûV.’É9öã±ÈÒUZÕ?Ÿ/,^†k0 ƒásàˆ³™‹ï2&£{¼‹ð‡¬$Á‹£Q0œdŒ!³ò¾4¥¯£ß»�h��£n�á¨]›Ñ¾Ó>¤h¨§>_^C�¨|½„&*¦Ëeß°W7"ûl·Úç~j¿ú3åf32Ÿ=Êy#q2ÏÿtØï~Åd{g…ÁÀS¡9¦•‹‘Óæâ©¯µ‘=瀛ßÿ¬g)2ù¿Cµ íƒáàÄvƒÁ°�ƒÆÈíËüWº3nÙ'ÊgF¦–»º±?—BÒé‰ì3`^»U³¬õ4€_8¾Äñüuû<;í02ßcŽ�Z¸Û០eÞð‘"ýèŸUêÃ>¸æÇþ€‹%ß`0 †W;ÿ­7’æ\$1ZI ›™1’Ï㠲е¸š—M‰ìRW©.ÏXW"e¢û+�!‹Žeç�1aæ†÷¢žõ0ßhxí^«ŠÈÊ¡ª½<‹ÆÅ¾ `�š¸˜y+°ó|v-6Fs³«%¨#ccJóÙ)òx"à…Ÿ ûÕ›7*0E½½ìîrƒÈÎ�»s¢»Ilÿî�ݳÀ­÷‹ÝK-}UæŠîØ Ã‡ íƒa?'�4'Œ 1.ßp‰Q¹�c÷¬Ë§`û£û%µÂÍ^·ÃÃ|ØÝh„ñ—ÑäI^‚ÅtÙ3ò(wÚa¤[Ê—•j"{î½V—�Žø E"‡‹œ H~–:A°Ú_•øn9•ƒÁ`0xÔÜÝ,ò¦)Öy“àÜ«8‚*nKÎI.Α]y©¢"’­^ä4A2f¦î)bí.kvÓ5ÜØU�¨Þ ð½à¾ Ì«AT—ùí�ÀÞ—žî²ˆ”‹�a"{-óÙ¥!…½¯Á¾/rãÕÊóôÓ• IDATõ_ÿB×�жÞ>Þ‹¡$ñ0§ÓQ'ÎXt«0¿óyà¦w+û%ãbHpxv ë¹ý=1 &´ †}BNx=Ïv÷E´ðÑޏv’ß× Œðzfø€½d´_ZÌsÛ,ÊÙF3t®öç\6ò˜ÍД?�°\v¶Û <³1êÒ‘$z�ÏJò#@ãóœz ¥¾oáÜDvƒÁ`0. Ôs…+EÄF¹M+@ÕvÉE%çŒ9ÐeOQ±6ž(DMÒþ˜V�öncÝ8°»û:®\q¡}Þ8Û]Å\Ù�»ãÃ{CD w¯wœ[ºÙ{%Z›}2Ùì _ÏÌY¿ùUä8ËÃÊ”tWµÇ«fŽZ< `Ÿ7q¦Âsº»æùžüpö%à¶÷…ÝRêìàŸ¨ §±åœƒáÀÄvƒÁ°? 9 pb¤\{Âû_E(zÁsæ~ÌÒ®yÅÕÓ“äÎ±Ó Œðïí;ëÖ†¥¯UsÇJ‡B¿Bs �`ß»yfá@!]Z1WRÁˆ\ÊÜ¿ˆˆ�+k-:AD™Aq›=¦³ ƒÁpq æ«ºÚ=n@¾îÎEv�Gc\d„aŽ7EŽ-J&Ë›sñ1‘ Å®v%~…ÇŸÔ@_4D­xÜóæv%(¸ vƒ{� êü²¿.âÕBTøœ«ºTH"¡ØÁ;žJgÃ~V¯Ã·Çªr,aƉø^:Ë#f*àñÏ5Ùí¤qe9O€åÞ ÃÁ‡ íƒaŸ@Îg tð(¤Ñ��pDnõjn)¬æÆQ÷ƒò?sLN;ÿù^áS›™èZ¡}¾ ìžk_òÚðÒ»¯£™·ê €g0ˆì/£É¦ÜÙiJ�¼ö«$¤m]Él¯H$ÍðÅÙ>—q2ðä—�ëßE§Awœ ƒá"€ íƒa@™ŒiU�¹ƒK¬šÈ½`~Ì襰±çÌ\¦âc¼Ýb¤ØsÍ0Wûl‡ Sÿ%�0iÿÈË—<àE4‚{³;oÄû.:Æ[&KÊ�8r òÅNYGùùíe^”½(98¡|‚çV†hîrÙÀa0 Ç»îÂí6/ü\`K:m˜ê ÜŒ'sÑcNñ\V:w˜G¸vÖŒÛ)EMºÚ�/ö“O“ÔÃ…k÷͵ǎÇ.r¡½¿h¯wÑ?²èÔ»�Ù•¼ãÅ…—j/§žköÝåÊo]¤ø– ìü¶²�ï¼þÔá`F"ežúð¦»"î9ëï5 Lh7 ûƒŽ‘ˆÑvéJI®xÍ,�¥˜[G:oY [2¬ü`!êJ’DÜuä¾sµÏ€YÕæ*vÇy õá0¿ŒFX¯ÚK~ýe4bûËhâbvìí5q4³ù,ÕJ| t²\3">F»+&Ö§Dü¨V99”-¯Êü MDGé 8 ƒÁ`¸àn~7á’×[ÀÚ&ðÚ“À¯žò]ìZa¦ŒÏp n#9n/f¦:�€À·£šxJ,�ðr¡óžoãjᆵwm ±ÝCÍ^c'´wä­»ZØùq ¢Iô$)'PÔˆ ˜HN ÏĈë­ÀÞŸl'$€ò$¡þy«ö½á‚»ânÚ™6J†»Ú½œv ‘2üëG�§žnzWd…, %¶ƒÁpÀ„vƒÁ°?øåSÀu÷ p]xd1ãz/"ù…|¿X\/ƒDIñ�šÁ·"d\í¢ì {íݬìi>懀=ë-7vâ²ÂP º`¯Í{ï  övšXš¾J¸zqfQìýN¼¿Þ°¡‰Ö™É#Uû¬)÷-úí±o¦Èk–Éj?H,£­çöwÅ`0 †wí­„WG.ÖkÀt˜®ox+ð³'„éDá/p oõF Q=Ê+Ýè|_\‚w³ÇÈÕ—òùÔø�ïÊ}JqiÞUäØqQø²wxkôâ/¡-?íž«VöEr"Bz°�=¾ç¡q�"”1.÷SÏÃs±C‰Á”јÅçJ¤m½ý™Ž•£zùíhw� ;!ÃrÛŸúðÆ;ýψ·rÀx¯Á`¸8`B»Á`Ø\zmºü)œ4Ø€!sÛ z^c&ËqLrŒ*ä—dN=1ÒN|Ä_ƒÄú˺=,óFtŸ»ÁýÑ ã³Flߙв"ö5C³w˜í5Âú|Ö|ïl/t´×uèæ)r³§†ËÂÌöâ¼ôT¡¨²¯cJJƒo×ð%ÝÊñÑ2=ûUuó~ ƒÁ`80p7¼ƒpùë�Ím`í°¶Þˆì“µökªdµ+Bm¡�!î¤h¥'ò\SÍiG¸ªtxu Þ’‹¯‘ÜVò݃J*r±;.NˆíäÝÎÕŽ9s¸;vbB¾^1»�˜K¢ïôm©\öÔJI�‚²§žowÕ±÷SŠí¼ •B·»Ca—SÒ][*[UÃqP“f¸HÆÇ€ж«qüMàš[¹‚êfþ0 †‹&´ †ýÁl7=H9•Zf ’ÑÓ-]¤, ‘Áe††’œö’òÓØÏͺÚ)¢Ç³%œu÷çÃóxN�Vt¯¦l§X¾9Ÿ5ïÕl¯æYû|¯Ø±1ZÉ T#zJO=fL>;•?•z_ξ>2+^¦cÔrl‰š“!ƒÁ`0ÜÉǮַZûFãbç"{5®ðôCÂý,�Òœj¦a@‰¢Æz�8·œ·„¯ªQŒÊƒ“•ˆ¨žÛÿ@˜|Q\ùVù¼Ä3Ì#nv'9,éNºØ½m‚+"û"|‹ÓÏû/PŠíü{b;D”"¶÷xtLwW¥»ó{¾�/*ÇfœÐÚ…Ï�í¿x¸ü�í1a†žÙŽý‘1 Lh7 ûúéãÎÝþ~òYï~¾·ƒN*×NÎ.•Ì0Q´Ž²À�S2»Ú•�3±½çÃ4,³¬'L,Ÿ5îð¼DFr»ÇðÂÓš‰ôõŒÝ®8¶½¤“\Ñg‰ø^£Šùš+~DªpŠãn�mDñç�‰ïÞ0×ÿ×ÝfX ƒÁ`¸Àpoº›pô2`û¸ÃöNd¯&Í× ÷?øFd5 à‹çŒ?8M`w‚ÿHsˆà¡PDr�{Gx²|Œ÷ÔÜQŽD)joæñ0ªÛ="¶.n…›qÑY+_…8?‹q9¹*’"«5S";÷‰ç9ý|÷ºöúäxAâCbÄñÞ²Š�ì©Eiª’Ù^‘HšáŸO&°³ûœžÿ pìJ¿°vÏ„vƒÁpqÀ„vƒÁ° -Ã�‘ÓXñ¤#Åá>Â2®•EE—GºÄ\q{t|L|ƒ× ڠŸ¨e³uÝò]V”ꄣݵDØ17IGp‰EÍÈhmêDd Å|’,�Ò>7ò>*ü¼�M¹ÇµÇQdðÉì{�¹®þ>”lVˆe³ì¹¨Ž_ wã;‰žü²³?.ƒÁ`0ì?ÜÍ÷Ž_5žN×#"{+°WÓÆðPM€ß <õUý¿äQÞÊFJ¬üdU#¥ÚŠO)4Çx²Ũ­]ÄÕNe…¬šhÌÍ(žË~”L”„k½MSWÓvÉ])ö}Êý9þ̯ÅIþú؉†~\¤U+—MÌ(=x;¿­ðaí^;¯?ÕÿÜ(Îö—ž6�´1˜3ÐO7¾k0. ˜Ðn0öõ½0«9¡ý)C)^â÷iîņ]ÚZ€ 4H)’CD¶È)ãjÏÅɨŽ! NçNlwJžº�¬®�jΊˆ:nËH.�„!Qvêå±×…ePÐÉ7ô9Æ¿žÍsÉ£&žCÍ‘b8)?“�/§J¹ßÕà ndŸ¸è~ýÛ›ˆŸÉ´Yªþøç@D6€ ƒÁ°p×ÜL¸ôZVxº9ìÓµFP÷Döî²Üd¸~Ó»€ïÿCø¿Ÿ÷²ñ0œòRÔ”2­lë5ò‘ñ1œï<}FšHãòJÿ<ò%2羚&ÉÜýàû_ W°ÅÌ'�À.8™ãùÚSG6>a±(ç¯äsµ†m›"®‰í¹Œr¶›žNM‘2T…¿ÅL£xDVk&DöÓ/ˆ¡"¶CDèx�S’Šäùÿº´­ÓpLkö¼‡¹áó%_“-Ó~UpæEûÃc0.˜Ðn0ö]Þ7´loU±.1P@,�äßD­ Ìi’‹²øÕ­#ŸÔòÔÂ!Ãs ‘"¶3׺܃×+åR\Õ�ƒþrgR娃=’E‰B1Z&cccyJï³yÛWí3®dmzÇ”}Ÿ·|œ=æ–÷YûÝ >™“5¸[ßKxþA¿|ÊwƒÁ`0V wëý„£W�‹}ÃØ{‘�ÇÅL†¸Ç/[¡½/—Œð-îdrÚ1¢$ìÊZDJ3ƒºÚK"drÜ9!¶ƒ".v…®yNö—Œ¼9&b:o$ j2€Ó¿Ž|�øÞÎ)Ni±}©’ÔZ%ÝÕ�©‡êæóÝqY5iFÄÆxNwøR®‚»í}D�}Æø­Á`8ð0¡Ý`0캌o.*Êëˆ,‰•¼UÁ3Ëc£ù“.N cñ1ÚÏŽ-ƒ-É–Œž(ÛSûíü%º<&‰× MøMÅÃ�.²#' ç–èjß« 3‘|}ч.“ωž‰–ž*ûL±È˜öÕdÍϰì†÷Î97]‡»î¢|݆ƒÁ`0V÷Æ; G/Ÿh]ìÀšÈb¯dûDq°O|�½»~ëýÀ_œ !s²¿Hq¶#ãhçÄ„˜8ëqP-�]rèT¾ˆ¢n{¼WãΤÿÜTüb¿¯Â­Ýó=%V¥ßwÎ%¡v>ã›%{6JFáϽÈîô}àF¾qU%©ê¥Ÿ¹šýìHf{ïhoÅóʱ„¶OÞçŠ íhVäºÛ?@ôÍO¿5 •ƒÁ°o¨÷Dî·’KÍ =RJ‘rI„d®¿T\Á@&þ÷ùS*�$#,§ B“÷ñâ˜t‚,ÉLõ6g½n O©ûe©Á¶ºÀÑÙcâz,Jf”›]l“¹ðòs£.÷UçÑÇ¢ ;a‘™W–¥½ÖHü‘RˆZ·ýú°T}m£qÕ­j–±: »îæw“ýÑ1 ƒa9¸›ÞE8q5°u °y¸ù»Þ¹Ù7Úlö.:fê©îöÎá.÷“è+Ù4ãE8-ÅVâiü!?¦GRLêêF„·µÇh…ŸZÄž|düÖ`0h˜£Ý`0ì~ó °}\)Ú”‘J&¥æ(÷«t¸p‡N"RC° ÂåÁ]î%ÎQÞšŒ�ÑÜë@ÜÙî]Ö–ê"Ó5„)±-ú}¹�*u=–}™ûfí$ •½öàgÄòÙ•ÁŽ?W.•è˜Tê[?Ôœ áŽö¹pÅUU?¨¸·¼�pêÐÓ›ûÇ`0 †pWßH¸ìµÀÑËÛÂÓVX—…§Õ´ Ù/<•11Þm!Tž|øÎç#±}`Nvø±Š Ÿ“RÆÑ.£=~\°2SFÄxDGqµG‹Q3ܘ„C=Å‘‹ÜëN¸÷]!)ŒEe&Ñø´||Æé‹‹â„e%©âý)*Gô‚TžßÎ^Ÿ¼«vŠTq¶·_î®ß!zèÆm Ã�„ íƒaß@ÏþعÛÞGÃðPëi­Â1í¼Á[2 eiªƒx¾%RCƒRîD‘RÖ+�FÈhƒ"%OP  ÿvâ¸D‡ ¹”X(]j:JdQˆ %#JPÕçH­*àŸµÈR`ùšIÛe©~†Õ�H$›•jà­l.åPîPK·P7àO�É:ÜMï"úî—l 1 ƒ¡îú·®¼®-<Ýœë]»Œ‰™L‡X˜*£ ìüR:É�¼ ½»(£ñ+çó1¥D¹² y"jåmÎg)Âc‘+AÍpä `ù¸·„9:)Cúý%q2I‘=ÂÛûÍZnûØ’Tþ­‘’ÔÈxÓ@ÜkqÙÝåZ‘Ý 'BºýsÂiÏ·¹ îîß%üì; _|ßø­Á`8P0¡Ý`0ì/ê¹ïhG¦•fR"VVšpîŒrêp½pê$Ë�à;àSåN�Ëåb»VÒc1=c ÏkŒN ‰á ñ’¸� ��’)RÔåÊ4"6FylÑ2l t¯ËÏ5ÒE¨Q‘½ýšL›ß8À W;Ý»áÞ±á2…;ù áÔ³ ËƒÁ`0"p·¾—pì `c«-ã}O{RêηÙû­È^;ÀÕÂÝ£DÉTÌáÞ¥Þð¢ï}ŃÁ`08UzÃ�À~øR‘Á>¶ð” í½Ø^ °;Vüø–�}ñHE /½øbå—âÒEJQ�ä½ ®¬EÆ$¹270ªDxrNlGÌt’ˆŠ‰ŠîˆÂR¾ù~µÛ'&²¿ÀHû¨O.FEÉû¯$Uꈕ£*Û“h•tWT5|¶ªÎ,“fú™¦ÛOßéŸûVî¶÷=ö㶃á@À„vƒÁ°¿˜ïµåšµžÕ®™”À¶D¶d�HðfîÄñâ^r®vÒ�@Áódž$ÄvøK;ûAúcEtÏ1âÔ0À�ã>êXGA” 2yí1á‘T*ÿ"D–“RVŠP`'Jì)?2Q8[MÚ÷Õµ—óá¶ælŸK�’™ÂÝz?á;ŸÙPb0 †W=šÂÓkûú¡ÐÅžÙ5»t²«nöVT—B{çÞ½ýý�Ø®:Ú��ñL(‰UŸ^T‡à+9W»×cÙíQ®Œ2SJ*—=0�0]Ü%Ÿsñ’ûÑÚ{nõe„/wWϼ  "£>Áú~‹íü!¼ë yqÝûh±“<ŽÇÇBI.{G{û¹¯K˜aûá�‘å¬Üí úæ§Œ× † Ú Ãþb¶Ëâc"î^îN PÈ;nq>HĆ-ÒËŠO¹ÚO˜Ë]/Û4  î€"ºç¬í”qæh9å™ÇÄDvf¼Ç²ÑÕA&â& I#³Q`†#¿Gs°C�H‚pËó¡úžßm~_º%µ½àÞÆÇtƒ‰çp¯Z×»ôYœÌ[Þ÷æß"zêk6” ƒáU wÕõ„Ë^?žN7€µu`¢‰ì±²ÓHéi•Ëco¯'Í™ˆ˜��Ñí1Šèëñ8£˘tµ+âºäÉž‹B@‡Èk#¶#mJI îíí@tW¸Š+'7šVº}?ýkEW_Dl�ðü’’T­TV+I•Ñ•Nüì`Õ0Ë…ñ"eDœ T$’f˜È^óȰߙîzóûåîøÑ#e¼Ö`0\XnADv Ãþþá9ù aóp»,W˽™—%N¡JY‚ Å! 4 y‰ÂÛHlcÄ�o÷n‹ëòûb�é/\H´âFTàÊ‘âøB.÷‚í©mD‰Ûäg¶K9Xñhà.ç'†j±�]Ö|[í¯ÞèN0Õóf{=_3`Þ]î³=àŽ‰ŸS‹Ÿ3~F÷¼Äž³¾™ÿ¼³]`oØ= œ;<ó4蹟Ø`b0 †W½þm„Ã'ÚÂÓCCáéd­‰‹ ìSQ8¾DáénúÍO �_òâIøsÕýP.qÓk¢¿ÆîŒÄmä·¥8´Çm5¬¿ÞU—æÅcYPÌ ¯reñØŽ§ò¸˜…y{)—×¶�é]âÛ¼[ãÞ‡¦8—–ºç¶µÂ›»¯ŽÛžv^=ô ã´ƒá‚ÁíƒaÿQÏÒ±1�sl "#‹Ñø¯"œèžëz!©æj~(wÍ,‘7‰„s�\褗™”Ýk€tIrŸrï”2Š%çb×Èyޏ#Oôå6ïg•ºÙµTýyÎXlŒÜ�@ȇÈx×òÙ…Ð_UÍûK­ˆZ{Ŷ�¹Ü]Íî¼%éµpµW“æ¤Öd \½÷¦»ˆ~ø� &ƒÁ`xÅÃÝò^±+�õ­Áø1YoóØc…§•0�tåãÒɞأâv¥‹×oýíFlçîu¯UÉh÷VÓÅV|B_ Yâjbá»ÖÕÛ¢µ„+E§JÉi²Hç²kQ…‹"YXȱÕxËU:ÛÙÜâÍ+.IMî>o>ín×â²»‹s^öž9éfO¹»?BøùwA?ÿžñZƒÁ°ï0¡Ý`0ì?f{Ì}Éj—12N¸�ݘJˆhøÃ�G•ûeñ‰e”±™`PÀ°/ê�H¹“ös Ä}’,!5fCÃJ£d´¡$òø Z†D:éÂ:J Qµœv¹ô:vIJ6{DÔïzEd§¸ç£m*?ÙRñ1žèÎòÛ»�£ž#p¥¹Hv{W”zó}DO|цƒÁ`0¼"á^;á’+�#¹ÂS±º2[x*ÿÇæ O#Âzìú[?|óo"b{ŽÇxKIV;|ž,¾ÕçÇPºŒÛ!ÊQ3š¿&/—‰"T„'TÑ]ræe8²F.¡¯ ÊO%¿‡8ø£?íú¾,[’ê‰íÈ縫׹à^ ï/GõòÛÑüŽyóà��’«’¯¹î–÷}çóÆk þ„vƒÁ°ÿØ;WîjçY“Z&¥šCsì@�o „-êjw iV„õÀ©Ã�6 QV> (ޤrÙÅþIG¹+"bCCÁÀPìt�ˆ÷9ž(þü�»XÌÍ®•  Q\Vy¯€·oÊþiÏ!îù¨ÿ¸nøèÜíuû^rѽËk÷JRëpy:_Þ^I—ûî¶ §žýèQL ƒÁðŠ�»ñ�„K¯m£b6ý¨˜Tá©×)<íc[b1†#Äuél×rÚ¥È^Ì�#®v­ ˆ‹§r¥(\‚/#’§¾@j°ÂÓé�JQ®,ù²ÂusµF)žìqNåq§ž÷ŸóÇ•‰í‘²LIª“3�KÖd¥Ñ‰ì5@íõN\碻ף* Q=§;‚“Yû¬qZƒÁ°o0¡Ý`0ì;èé‡�;ù5™ÕwµÇâcW�""¶9<ô¼µÔÕîÂÛÑèIŒ#îõh¹“âØÉ ©xrñA`Càbç·KóÜs¥¨b›Z:µ¬›�?Gä�ZlŒ&šG#d(~r©?©Ô.¡u•7?:&ånÇ\ÚÛës¶­RÜí7¾“èÉ/Û`b0 †‹î5o&\Î O×xGÐÔw²w±jKžj½AÙç©^ ;? <ú—íÿýL)*�‘)vµ#4¦¤\ÉÜ}Ýsõ_–.vÎ{Sb»,ïLqå`u§äʾÌSâTW’‰_<ý<;ÆZlŸ…â’T$V18e r¡y*ˆ�á÷ö›ûÍíïAåØCØ~Ȭþîõµ'¾Üíï'úæ§�Ó †}� íƒáÂ`>ce6uÛ4߉îU">Fsí°!‚/•%A,“®öØ�ÈX$fM"#¶#‘ÉŽPp÷Äg™ó¸`ðd2K2òü+Ík/�ŒQâZh7»Ü7Ò…n¹Ý>jŸÛ À5óõ¶ßÄv)â÷ŸebƒG;¤pw;Ïm'!SûC~­” wy´“5¸“ÿˆÈ†ƒÁ`0\tpoþ-Âk®6»ÂÓõÆÉÎ]ì\d—_ZáhQá©r=Ux mÂûîü0ðÈ_Ź1¤«�bäÖç3jìJGî·¹L^»æb‡ “ÌfG|%(iyó‘Õ _–w�áÍÉBÔØ N­“Ihœ'±]ìP�ÛÎf 3T ¶‹Hï5ºt^»!ÓÝfq2*I3ì}ëVy"“Û~Ço=òׯg Ãy‡ íƒáÂ`¶›ÎiÜSñ1Ò±C©2Ô”«=6@P‚ F„u�d¦²&Þ(%¨«Êd/á–”¿¯H`—û°‘=ãí�æp§ð˜ÄÜ줹ٕLu"ÅÕ®ˆ(a IDATûZ)ªV„Ú�hr•¸¿�*œüy¨¸«½�í]œŒ›¢|2Jfâ—¥VSàöÀ]ÿ6¢ïÕ†ƒÁ`0\4p·¼‡pÉkšÂÓµM`­+3È¡‹‹íÉØ›1Q2‰’TRòÜ��¡–çz"»p·C¹«v¾»½ßw~}ø�sw}˜è¡OŸ5 ç&´ † ƒÝ—�ÍÃ�Øî‰ìµïj§G;‹‹qJt ¸Ú£„,xB¾5š×žp¯—” –f²GóØ™"H¹JÊC2.v¾ÿÞcFˆìÒ©.Ýäj!ª&þ—¸ÙÆ�x *Ba¹Øö¹G ¼ý÷•}f"»:€tvž®,~¤ŒŒ‘©•aß9`.—·î½I'ãny/ṃžyÚƒÁ`0X¸×ÝF8~USxºvXÛ£búÂS^zZ‰¸˜XLÌy*<í9žpµk÷S=\:7ÂÕ¨‹N¦“e–œJ|Œv[Û¹©‘.%ΗÏŽñe-"FF)®¢ U¥Ø ç~éYv¬#b»|-Ýë+¶Ë÷)ü-ÁÒ%©òuxb»,PEº$•s^_I—Ýø±„½wý‰-DßÜÝ!üæW0‰Á`8o<„ˆì( † óè–÷6�´y™­ËÈ+¤šˆ¥¼JÕƒOIF& ÜEb ÿqÞvå>íþþÂ…„X%ÎùMcf‡èFJåµËÛ©¼ö1"{w¿C‰ÛÂÕ®æ¦×A¼ö/AíJ Šœ$ª‡•ýå|¸¬»KŸ4Ÿ¿õ{ˆŠòrÿ‚mÚeíïg]712|Ÿ¼ýj÷£ž5—ó0ßkVŸÌv�ݳÀÎËÀ™@?ø† 'ƒÁ`8xÜòÆ{ ÛÇ›ÂÓµÍVd_kù%ÏbçB{Ç-•<öϬš“á‘ȘÑQ1’WfxæÃŸö;UÒZe"nPPÖšÛÿ$ŽðcçnãÌ)-ù²$¿.Â…—q…—ðd±íÔsî{ ò~í.AøK 4QóŒÂÙ‰"·KzŒj¶ÒYãß1®=÷¹í|¯å´{ÀÞNcø:ýè‰/Ÿ5 +‡9Ú Ã…Ã|Oä´KѲs0°ìé¢%²œ *oqÑ“‹GÈDËd¬LªØ Hç¶³�Òr&9Éu Û ­Li/(D÷çµ—¢FDöXd Æä´óýL¸ÀˆÂçG¦ÜT+I…"ÔœKŽÊÿœ“̰쾹>ƒ¼4µû,t12Ý@\×bPVį(u îæw“ 'ƒÁ`8Hp'$½Bžj"»’ÅÎÿßeÅêÈe LG¢c ¸nSQ1Rtï®ßõàáOfµ'âc\,f‘q^v·wÝQ„? 7»Z†*ò¿‹ÊPæÉgËPe”Ë"e¨Kf¶¿ô,{/3ôZgS0@^wEÇ„ÂÜö $UvIåJR ÿÞÉYŽÊ¸¯ëf®µ½-{T½÷ß±¯îª âÝɉ¾ýY㳃a¥0¡Ý`0\8ì¼Ü8޼ø˜HtL2§‘aB\=¹0o²#n|Y,’-G݇b'Ut9ŒÆìÚóŒÙS¹ì±ÈMXOEÇDËP)ÌŠ'E\GBl÷\èµß;þaé_�ÈNÃg³Ïpg»—Û^Kl»X™® µV\mó*tɵ™¶î¶÷N?zúP ƒÁpÁàÞü[„Ã'€ÃÇ™‹}ÝØÇžzb»‹Ÿ¦œá G¸t¬kÛq´ËÇôn_‡¤…—©Cã\lç¾¹ž-îQïB±=ˆŒ‘ùßüç�áÌÊþ—ô¹Ü™r�kïûÍ3,ò'6 1ɹó2©Q—~.JfÑ’T‘?ÏKRÕ8™ŠÅ€J%]d¶÷›Ûc[9ö.°ó+ì«Ûßò~¢o}Ú¸¬Á`X/±èƒÁpAÿõñ1›À”/ï�*%Uri¯Š\Úu$ Õ}T!|´!¨ßèËC�BòSËE�r5Ç]ÙÃJ‡†h!ª¼sÅ…¨ËeÏ,MMFƤâcj%B&S³müäQ�XÎZÏ�·ýS}ß“b=‰âàDÔMt?eÄÍ\DÛ°x¾ìv¾ìí{çš8™³/�¾û%P ƒÁ°ÿ<òæw¶ŽmáéT‰Š™Äv™Å>QbVÚˆ-v%YxÊïâ±+Hßæ0ætÿÆŸ¸ñ ù.Òá‚1ñ7È;ô£‘8)Þìâ|8àÍ.�½^Ì�Ç"‘=7{æõ-4d^�Kïnv£Úwãö)^‹vÌñóB.îñÛ¹™ØqÚywÙÆÈÌv>{ö4èÑ¿6.k0Vs´ † ‹ÙÞ æÑ ‰B¢ª°U:vœ$rŠ«=WôDŠz\¸ÿÛþðµÿ^ŒŒ'²·ü èu‰ð4͈M4…bVQb£±3É€´Nj¼YFűÂgi$?.y/��PPÅv¶ßªØ.f‚±=%fGÅvñÚœ¼;’ÛNì‡yï?ÿÜ }Ýg©¤Ë®" |·�Lä¯Gùã¿gÎÁÝý‹¿=õ5㲃aa˜Ðn0.(èÇßrîæwSãBšKÿ\û¥åµ{Ž6PôäZäi;„S€,FåÙçA)RÚ#ˆ¼CÚ�“Ü® 0 H©ÊŠPÕÔ1–öóYˆª‰å¥Nv Þc®v‚šáÞ/UåO§|I7;û™±È—þóÊãiRC‡Óvo0«…Q§ÒO€}ŽkV˜ª¹ÛášÕ%ÂéÓ séüãîö5¸[ï'|çó "R ƒÁ°R¸“Ž]¬oµ.vÓ¹×§aÙ)ÛU'{F`OFÅTºs]ÍfGyáiÒ /Db=.Î…"{ŒtÁ㢌òzA²ÄaQiÔÙYý©òcˆÇŽÈg÷œÖŒ;GKQÇòã^ àÅ_*îmMlWø]lÅ«ã«ÛÕ— æ­$Ê*Þžo»HF»R’:ÆáqÂÈñrÔ–ãzš<ûý©ÙìDµ_ǯ†»ù>¢'¾h<Ö`0,Ú Ã…Çl¨7‡\èjæJ“Ó#d�ß�.^‡ìÒXPÜA‘,z’å¨Ëˆí€·ÔR¥ö$9Rꤺu–‚!‚RÓÅ��)ÏQ(²“!ƒˆèο'R^*÷›"E¤”p¹'ÝëŠøþÎ?RÓ¤¼€Ðµ_éûÙ¹|œ Äâc0pàNdïËQ¹è¡Ék}WÊ ‘ö÷Û�|€èÛg<Ö`0Œç,V†j0.ø¢kn"\r°¹YM]v´Ë?办’Ë}3N$m`ê· •äÙE¤Ùs UÌ–¡òáE* ìÚóR"ÚGæ¯�_  Õ»¯Ng§GKP#å¢}ª(aòŠPEÓ;þÁÊ Š½¾XyÔˆëÙ×3æu°¯ù¬-•âÅR»ÀÞNS”zîð˧@/ü̃Á`0,ƃÂÓõPd�ž*védWÝì��·@9è¨ÂS /ºkB;ÛçþõNþüÙ—x­.Α±ªxœOæ¯E;c¹³ä¸.Ã}]òfyÆ9%oâÅ_¤�ƒ¶r!õšWõzK_bIQêJKR#|>ÊmëˆÁEpÛšòœ¶/H%©»g�³/�¾õ·Æa Ã(˜£Ý`0\pÐϾëÜ�÷æM|L=êI&>FËhgù“©â'µ,©{w\”fOÆ–Ã*ß[öš*uJºt¡u)½Œk§´u áΑîÇ8‘ÝÛŠºRíÚ7Œt³{‚¶ÈøïžvÌÒYoÅCêKXz�Äá—np¸÷/S‰‘©¹›¯ò¯sW{5i–ïO¦Àµ·À½ñN¢§¶AÅ`0 Åp×ÞB8qM[xº9ˆì²ð´š¶‘1\`q1Rt>o…§@³‚ÂÓÀ"¢p&kͱÙ84¬V“1zNY-ˆHÔ")üRÍR‡ÒE„t^2£]ËaG$+áêÐX)*l@e]œÛŽåÉœ§Ž‰Ø•â•°@ÔÙîm‡8ØéMá/ ¢d"¹í •¤b‰¼öî¶’Ù^‘ëNNyïÅÉq¢É½õƒD�þ�qXƒÁPÎ_ÌÑn0Ä£7¼µY¼±Ý8Ú×”åÀE®ö˜CIL2c3çTÒ'„·ƒû€Õ;t ¸ÜµÇ,ù¦¬´ U s ;^Õ¡8¾�Qð¨;Fss‡Œ¼-3µïç¥�ìK»öcùð…'¸Ã½móÁé^sw>ÿêÜ@­#h¾×8Û¹+Èò. ƒÁP oxaûxà × .öØŠÇÉT¸»/dá)âBû"¢»\�É_[çbŸn4+C·/¶ü»ÃÄx7âõ»„«¿ÔÁŸàÍÉ×]È�û‹ö®F¨‡[!%áÜõ×?G<«_¾Ú¶ íl/ž2«YcF›QÜw,¿�ñÚîR㳜Ëî«4Ï�=ü—Æa C‡1¡Ý`0˜?H7ÝG8tX;ÔdoŽ%¶46WjU’¹‰„Ci‘áI#Å«bÂË..<1Dî¢øãG—¡æîËl[™Èž êd½Nw�ÄÇDvùZ _£|½©×¬¾ÖZ)fMœH௩h8‘q2,Jf¶ìžvN/=úñ7mX1 ƒÎ\n½ŸpèhãΖ‘‚Aû4RxÚE *sµhá)ž�¤ÐìñE +®–ž*%äX?:loG\àMþÕÇÒ2%B{鉆l\NI}„'g…æ”ÅE(ñù¢!¼ðóL¶~÷ósN‰Ø® ìÁq8€b»÷˜^ÚX’â¶’ßr.ÛÞžÏ|Á}¶ÛpÙ½sÀÎË ‡þÂø«Á`È¢c ÃÁÁ‘K�­£À™›è˜ª"d¼ø˜zˆ¹pü’-�%­ìI‹��¿4•?L]ºè"ËA)8âÏYËßm”Kb»ÇdËP倱‚“©ÑÜö‘Yí ¹Øåöˆ *B´v=u@4ÃÑ>pÓ�²D¶û, ³äšþ ,¡uþ Xq*/� ~?€z(G•e©è.çáðßÝž ç�' ¬ÃÝx/Ñ“oÊÁ`0†ÿfoº‹pä2àð‰ÖÅYá8ªðÔ%DæUžâãÝüˆ6þ°a¿{5{òäNûåîù]©çAßý’qXƒÁ… íƒá` WwþÂö%�séò74ÃÕ ÿ¸y;`tyíN|1·®GàXNŸB¢'3�›î86£=™¹=cRæKfwAÒ% N®TZQe,«½(§�Ï Dvž5ª†ærÙIyŽÒ/MlWE÷¸ï_÷uCu0Ý;¡Ý¹Æõã\û{*D÷ZÆ8ù‚»»õ~Âw>"²aÅ`0^í<ð¦ûǯj¢bÔÂÓI\dO®nÔÜìÜ™^¥3Ø‹¢b–,<åÙК{¾wê3ûÚ&pè0°u8 àR¯ðÉj…·µ";ÉLëî²×%Ë ìÈq.¾öy¼\ã챌vÁ£%çW©°É�5Wwwìhx/i�ã"çŽ@l‡èxÚ±]¾/Ú9æÄöIÛI?Vrçä1ëëê•r´ï绪ö¶¨/ê?[Áç@;Öü-q' úöß5 úŸJ‹Ž1 üÑÉ Ç.67eWÓ�!‡óW?&ë¢ìj*–'rÚ—Yœ¨2K~ûëˆ/í/Æä.B‰Š‰-‹VC¹Á¢@`÷G™å¤ á]Ù;�xT”Š¡’ˆŒñ–›R"6f泿ë�¡ŸÀÛ2Klcâ¿v"`L.}ìõR.JfÖ,¿�·y—í2\œyôÔWmX1 †W#¼æ&Â¥¯67.öµ�†r;ïê™ð²ÓL_O´ð4Öß“q´k‚x ',u±kQ1+ŸL~¼¾l¶×�£®@ãb_�ä�~l|¼b,f±Äá_£#œ‡ØÅ ^&«�sÙç~2b†(=9“Øì"j25;,:2Pnn±²5à»Ú<�àýZÇ2™íuª_©ã°<·½‹Cܺ‡¾õ·Æ_ Cs´ † ;`½ñ•×5¹ìSeyðµ·6—?ÿnëNp,:¦½ÞGYˆ¥±ŽBw;'tŽ“;A2‰/yD¡³=ñ ãÎQÜëšÃ�P§8oH2eG ©x£.®{›Ó¾@ª*²# S±1¹XJÄÌD³!™w÷PÒÝ^¸­hi­t¸K×�jù>ÿÝr[@w·c>ÜÖ2^çrÀç¢ÁÜ-ï!<û#г?¶�Å`0^-ðú·®xS[xÊŒ%=2‹½H`_eá'tøg‘žöYìmáéd­9 ±¹ lµ…§Ç\à ™ýgÿø½� º&"6Jc�2g»Üà:™ãÏÑØÎÕ…+^r^�Âæ"科׉Bþ¦¹ØIÌÒµŸt¶ ¾é‘Éô¦ô/0âQ2Á{ÂW#p;û¡œ{q‹1·{ •ຕò9P‘øpÊ<ÅOœsoý Ñ£cÜÕ`0x0¡Ý`0\X\öú&_r� WÜ¹Ô ¯{ ðÓo·$±Ëdç{-È›&²+$+68.t#¾¤5£å¶«‘1 )µ–íkT_v† øp1*§ý€¡Fo#S <ûB­‹ìu ¼÷?>Ÿ@B<Ë‚½ÇiÛ’�¿�dÌP%~ODf+?pír[°]ðsÛyŒLÝ &µ/Ì—^/œ4.=÷¦»‰~ø X ƒáwëý„cW²ÂÓõ�…§‘}å…§‹”}òÛâzÉ÷Èüät½9qè(°% O/Ãá¤ñ@ãÈZf;XìœB9J„dÜÛdwñü�è.v‚bœ K”ƒ"3*Šzï“=y`ÄveC�Û.g&~²ÃÅãKÌ%rßIö‚.hw9Ÿ¤”Øvbû�ÿ„èá¿4îj0˜”dÑ1ƒáBýºãC„ÃÇYçFã`ò\íßÍä&ÀO¾¥”`‰AK��‰-®âK†SË`Õ%Áç{)¬|\ád0fYlöÿ˜œv-—«+B]Td�-3Õ®#£Å¨ð¸˜z<ð'Ãc¢û ½&±Í{m€ïœŠ$âc ,­�¹óNý RGÆÈÔbù-[‚[wQ2íRܽsíRÜS '¾`‹Á`0¼¹ßï$½|ˆŠ™® þ§ENüÕPÅq�¹8”ßÛïÂSÇ\ì|Õ×FcHٺ؞4…§¯pãÿ£ÿ&ž]_âü/uÿK§ÿ"‘:ç;6Æ­˜f<óô>#þš\A å~ÇÈ(Š:œ–�hA^+ù¬ˆ‘é¸ý|Æ"÷;kãw΀ú„qWƒÁÐü 5¡Ý`0\�?>' ½¢´D.ûd-^xÕ ê?zddVfˆò9«Å3'“‹©¡aIrû<Ìhÿ�þËðqªè�È_çÇ¡8»]¹=êø”ä[*™íü¶ÌmçCJ-3/»ìö]`ï,pî pê9Ð�µ¡Å`0^)Üï¦w¶.i„ã^d_³Ø%ÿs¼—'UxšËw™\ö1bh© yŒ4vx…§“¦Ÿhm£áÉÛG›ÂÓh O¯Zð ¨üÓ�é'$FRJ…d mN‰3É‘G É.·KòÚ…'´æÚ÷Û2s…úy{Œä±Èˆí+©xZ2·½DlÝKÄ»‰8—�i¤�¦Úç í8ìÞ9`÷eà¥ç@O~Ù¸«Áðjç;&´ † òÇçíÿŒ°yÄ/¾RÝLʠų8Ÿ~8RŠ:ER…XH a¥ÃVÉ€•"Ç¥Y%É f<†ò-›Ó¾Ÿí¥"{2W]¢Ö™ò¤„°Ì ùoÿW�‹Ûsy+b{aƒîöĶbw{&³>åö/qù{Jí íÝÀ‡înù76° ÃÅÎù®¾±)<=Ôò¾é°¶Þ–Ý—žF„vW51fnѨ˜J8³…§ðïç¼,ë„—ŽúJ¸Ø×›ã´u ØÚ O¯°¹à›ð+?ð<€ÿícåQ; ­þÜo¾<¦T>Ç’=óÃgŠÌ ‰Ôç+u|ÛWtlÆsF‰í þŸÜVg¸­\¡™â±ÜÙ>cf‘�†»žyôøçŒ» ¯bXF»Á`Øÿ�ëžß%:¦ä²OÂ%Âý—¨ZâzÝ=À¿ÑŸŠeêËãKfQb¸îÅ ÖmI$#›ÉüIQV¤æ¶'ž‹‹f´»HÞ¤Çq] #N<éwd3Ú3v~[%Ø#…äR‘Rd§‚|öÜcjà£f;€›5Ùä¼,´Ï€¯‡—¯Efj•êý(,D•?C¤Š/GþïQÿ9æî"³.R–ÚýÎÖŠÀàØ�/–ÌO¦Íê—Ç?"²¡Å`0.6ÎwýÛ Wv…§‡Dá)w°O3±€“««ˆ£¸‘ÃŽó#³Ø'CáéÆ6°} °íš ök¼q‰7áI?ð"€3;Ãÿí•è5b—=™í=v‚/Óðß+¹D>¿=Ç‘cÙìѬvdÊPc8G7Ä7ýò©Á鯓¾[ªŠ¼.6Cð}p”Îu:Ÿ´.(É#A 2ÛåýXLl›Ûž*Iåe¼AIj‚ó™Íò6Ïlï73N˳Û1JQ¡��k~¯Ýmï#zì3Æ[ †W+÷1G»Á`Ø×?:w|ˆ°Ý沯�Èe¯ œLO}-R�å"Y”©a,çÔŠœNªÃDq–ŽAô“Ù“¹¡À�t´ŸïŒv!Ì/3Bd� î#ÜìZ\Š·¬´þðß¶íY#¶w9äõ<\ŠJ>ýÚ¶…Üí Äì$ÝíÎÿÔ\o).�“Ùm¾vÛå¸g^}ÿlh1 †‹…óÝú^¡£ÀúVËùZût-3�¬RäB»Ë¸Ùe´I5²ätE…§Ýõày»}ž„…§k›�ë{»‰Š¹ �À~bÁ7à€ïx¦½~ö4°s¦qÝ~ö)‹�I9Ûcñ;‹ÈjÇultL¶×(G#\Þ¨íß�Ì2²HÌÚgdL4åAw¶§fuÞ�3�6;ÐrsAr%kß—‘õ¬Y½:ßkÝ팻ž{ ôè§Œ· ¯B˜£Ý`0ìãÀu?áØ•Í°µ¶.bb¦¡ƒ)¢œþ…–¬^ÿà©h –kHÐ:H„«ÝIâÆ ½ñBqºwŽÞXqPÌ™£9�!�'œ‡r»p¯.öƒUñ�ŠMë v<ž,GI²F¦ÌdìîÓÄõ"‘]ºÛ•¯Àµ^GÊ“Úû×3~b§ý<Ï÷׊ÊÎ1±½Ž¿?)÷z]s¼³m�c‰­”ðž;ápwÝ>òß% n+¢ÁÝ^·Ï¥9Û»×-}Ýï÷\žDãîöµF´yî§ _ýÀƒÁ`8¨|ï omøÞáK™©bcØû..°¯ªð4’Á‹ïHŠ�X¬È3Ó½¾ŽÿN×›“ÛÇ�-VxzÓoÂ�üÀ Îì5û¹3M4Û|x翾üÂ[éÙÿŸ/t¶ÇRª|˜óì�«=µˆ ÈYÎ,9p;opG;ª–;9„+Úãè:Ž™JWÏöÜ/âl‡¼O�É•8Û#™Wº}"ñ&ö+" ^ƒ|7óyJqgá gÅÝ®= lõ4‘í VöåÜ"z䯌³ ¯2˜Ðn0ö‡O ˆ¹ƒ}¢,–ƒUôK 07Ü |ï+m”ŒÆ‡+‰‘zòG¯t IDATìv1Œ Ñ!"² ðcfRD º‹N„·pnÈÞQ$®#�Ïž,ýìî?Ÿùì%¨¨…Û…}É,Çý?»`bÁns}2öZ±}Þ‰Íí{^w'…:&ÏÞç~ ¢�Ü;vŒùg([FÜÇöè0ÅöNx¯DüO7”°8)´÷¿CóáuK¢Ö~ÏýìZwÝ=D?øº .ƒÁpÀànz'áĵmáé¦ãe±küo’ˆ‰Y²ð4ç¾Vw ¼ô>•·íBg~wÂams(<ÝFã^-š¸˜EPxÀ/üÀÙ—��—¡}¶®°ãÿçk*)²{b¹Ø ŠUH'ŠQ�íÑ‹®Ð·iܧÿ¤ Ö*…e¢r´“h$Y&Áß¼ãÇ�W•Ÿ‚m\\‡.¶Cl“b{·�çUl'”‹íóŽ%㙎±Ý;N¢;b×5Á]yŸ«–¯W…v¯+€ýiïÝ]¿CôÐ'Œ³ ¯&.dÑ1ƒa_þØÜý»„­cÍàµÖ.Ö"c¼ŒÎJY:œs4±Œ¼ï}9Ö‡¼,ÌŠ•e•,‹Eä¶6�1’–Š� Š�\~ù«;\Ž(=phKi‹vyÎùó§Š=±¸È*‹BI vKHÿ‹ÿ©!à€9€½ySŒÔ ¶s¶¤´‹IáÃn÷|Ñ×Qr¬ W¤NRD‹¤(,rÕ–Üv'-êHaj#Ó]ÏEÉtE©mÙÔÙ—@O|ÁƒÁ`8<ïªë —½¾�×1®·>ˆÊÑ,öÊÛW^xÊù°p´II)j'Þ9(Ñ,Jáé¡£Àö&pMáé›l-ø&<ƒ¦ðô9§kà‹Š™í ¼ƒÿ/þêÿ«¬p+(FŠ#y´ãÉùl´µ�7”¹ >FòÜ~ö„Œ*y¼*½›&cT¼²B96KÈjÑ9¥12™ãv¾KRùêÔ�íÌ �%�Ïf⵼�æd×Ïžýâ{Æ[ †WÌÑn0ÎÿðuÇo¶O C—t4I'“&¨W1'»Ø9A½é>à»_ ‰%œ:�S—sÆâe±¤Ðé÷•\ïos—»ƒ#‡‡óvUsÎgHrQ“s¶Gí%‘1%ÎöXÞx*B¦#Üó�ߣ°9ª­æs½7Üîð9ßÛiœí]AhÍËR¥»ÂÁ¤¸ÛUÇ;Ƥzßs·w+B”(&âï…k\qZaj%bdºß×Ú/’ £dxQj#T¸·¼�pêÐÓÛàb0 Šç½ùm„+ß lv…§ëíêÅ©âdWDvÏT1yužnµ…§W¸n‰7á{~†¦ðôå³Ã\ìó0úîž�_ÿ³áyj4û«ÅÇxíH1*DjŽ{«ó·r eÉqs$žËeøn–‹Ø˜É'¢d¼ãT•Ï<&&v›»Ø£‘)¢<Îç�=ß–b{©³�ß©¼©èK`dIª(}%±R!¶‚³�Û©†•£œo»Š­zîVj¶³!«‰ñsù]!ç€×Þ wëýD�Î8«Áð ‡ íƒáü_j.ûZè\_4—]#2Ü­qó»›Ë'¿(øsŸ1±ÁAf*f 0üe±�¸É3àày… ® 9³�؉"=TPæqYqiw»êPQÜÚ‹FÇŒ*A¢L9’âЦøOÿÇÆ½BUûÕ~|ÖT­¸^ b»«€Ù¤qº¸YKþÛìrr­³� -/_毃…6,!Ÿe©®ðöu÷÷Káb�?|÷â;˜è>÷kׄHdT/ÌL�É:ÜMï"úî—lp1 †ýæy·¼‡pÉ•MÆøãzÓ5 â"û$üÒV-V‘˜À¤S¸J¯BŒ®HD\h_Dt—b?Ø«isLºÂÓ­Ã�‹ýRo@S|ºNxÀ³^‚_xÚ¯ ›«ï´"v·ØÑáN,Dw'®ŠÆ=¹p !‘ªˆàžêL[ã„p¼ ¼cçØ\‘Š’AÚØ“ë|RÅvÁ×H£»�ŠíÚN§6Ë(!¶{Ÿ-6¾ØÑOT!#z \$³½büµë"âÙ혳¿ˆþ-r·½�è±Ïg5^Á0¡Ý`0œ_>1dtrWSëHõ­j�LvÇ–¨®vFÂn~7ðć¡"Z~¹ž$À”ÉmçÄ/ÃCsîN¤§ÛF#/$‘ÎÜ[ú©¹Ü‰”Ç òÇ,3Jd¯ v¾d”ÝöÔ°Tž&­ØÞ~&&ðE†Ù®?€Ïv±}Þ’ôÞÙ‘û)„h6{Až»:$¥&;¾]äµ#ãn÷.Ý�KÏEwðüöZ8Ü5g ÏmoÝí'$œzôãoÙðb0 çîõ·7û‘K�µC�KÛ‹”e÷Sf¬PL¥ñ€j”IÆÑÎE¯dá) Gš$“*bõìyÍm_vlᜠõ6ñÜvÎ[»®¦½sÀ¹Ó GþÊøªÁð „9Ú ÃùÂÞúAÂáƒÃI+Áâ¹ì]sPxžd ��)!ø÷»å=Àwþ[ äó'[—-±ç¤HeàÒAø$¶/›9éò¼vÜ!7Sx‡/3*›]n_¤À3&Âxªä9–ÇN™þà¿n Æj& ÏZáAq·OÑF'µ9í|›µŸÿùàæ,·}îï[wˆb.ï3X˜ç^ânçñ1É/¾Z„§™çj¯Ãå·Ä²Úùeçpw.¾Ò¥o÷¤»õ~Âw>"²Æ`0VÉïn{�pôrQxš+·—…§œói1‹ž–ˆ½ÀÂ…§+(µÿM¼ðt²Ö§­cÀÖfãb¿ Máéá߀E O=þ ð§~{­Ä¯»ÄeÊÑÞñ€öRãÍAœ 7³æÈF�^£41;3ùâr1gî8MŽý¡‘™‚¬{_éͱق9Ýã†ÂÁ®ÆÊ ¼¯©4ÒÙ;ÖÊð²Hn;!òÙP"fÜ÷~{¥ðZåCRu+5Áö�í?”¿íß w×ï=ô ãªÃ+�+™£Ý`0¬üË­ïmrÙ7ûˉû蘵v)í4]ˆ-AM”¡z¤s9ÿ|ÄÙ¾ S^ÍûDÚ%I˜‹4~?�w›hÄv (?\h�M¹×åý¥.”œ#¥Äu=Ê¡qªx®•9ðÀŸøËÂûÁzÚ|Þ×6šeâžÈ€ák�Ø>Ûm†ãy; ÷îö™p¤ÍõlUï5óã„òüûóán—':JŽwìX“tµ_óÙàê\|{�»ýeà̯AO}̓Á`X–Û½ù·Åæaæb_÷öÑ…§nœƒ:·s¼ HGŸ©£YîJT /<�®…§ÛUSxz‘}Q,ZxðÄÍ }¢°ŒÖé&˜U�ðÐV‚¹±Sf‘«±îöÜG¦ÏíL8Û]7”ðLwöù§z¸¬Ûkçlïsê»Ë¹æÙ߆¹p:æ&œ®5E}¿ú!èùŸÚc0 ÀÝòžÆ@±ÑžjQ€ÑÂSéd/1RD"J¢¹ì2à�¹|ö„p+\Ì¥³�EÉTSàš›àÞtѲÆ`0J9Ýën#\rÕ` à.öé+;<ÏŜ셽;EQ1UF_ATŒ*ÚWJ;w±¶.¶Ö€c®@Sx:YðMø šÒÓ_8=vN/Vxª í1ѽž7¢qGTzúë”K)²ËbÏé|Mpg×q]rãS (äé�“eAÔ-ä"{Ma9*/•­Ø¬Au{ �¨±'7;¨—ŠØî}O©Ø.ŽßJÅv…O¦¢døÉ‚þwW˜—ú"U’ªðcWÀc=îÊO’ÛÌ"û‡´Ü•ï¤SNVÜm=öYãªÃÅΟ,:Æ`0¬ìJ—˾±Ý:Ú×ÃȘ>G9RŒ[v‰§¤“)2@9<ö™0Þ�]¦œ쀰\‹³ÃEKžrÃÂÈ2Ôäݤ?^âcK9å}T"º§"LØ÷hv¬ªuÜ÷/•Ò*ál«˜»�—¡­µ¿ýpî†(™9š¢ÔÙÎ%Ë“êYã�÷kíp�+8Ó†j~¼KVdWñ‘%¸òäD)L­#E´Ä—ä²Â©z6ÃÙNsÂb÷,pö%Ð_´Æ`0rœîÆ{ ÛÇ[;ãt�‰¢.öÉTD¨°þ�±{£±L„_*Fãd…§ò„ît­qùo¶…§Ûh O¯ðº%Þ„ÇО¾àåž–þd¢Ü3ö^Uº)æ¼Çž®ìÑÞóÁ•—ýÁ×G®Þ(,ú]EÙ¯v;z²I+möHEò,#™?ÆDÉìGIj6‘Gʈ¢/JQ2ý×î}xö蛟2®j0\Ä0G»Á`XÍ@vË{—¼fˆŒé…õiX„U¥– »ˆˆžrµ Âç$¡v!×Hê[>ÐìÓ£38 ¢ŽöJ!‡%Kb»}K6)×cßã9?V3&6F’_�ìFˆo êf†À¢2Ô1¤x¬ÈÎÊPûCZû8énŸLýïí¢dÖ6[·X'Ó»Û×€Ý àvÂrµÙN#3ï Ry´JçngË’¹»]‹ˆáKmw»p5%ãeœ?¤«3îj÷ÓU¬ µýÆªÖ S«HŒLÍD~Ò£c˜»ÝÝö áÔó =jCŒÁ`0hœîä„£W0»X¥è‰ìSÁñR…§\¨V2«‘ëàÉ·9¡½HÈ�ž¢Ûç‰Ù×›ãtè(°}8‚¦ðô:4å§‹ +<}À©±…§üÿªRxZZ6LJ€GþŠQ_îÐVŠQÉ…¼›ÜàÖ&ÉGK#d4§{´ C »E¤�ì׆c¼¸‹Ž˜«��§Jœˆ%ƒa%`ÉŒÐ}~½ˆÚŠD„nw­5ˆ˜ÇråÎvåEQ2™’Ôîµ­²$UÝuéjîví!�F$:Æ;©XÁÝñÛD�üµñTƒá"… íƒa58r)s±¯ îõ`)±׫Uæ²»x.{Tt‚r­»?|ã/FÈ(¢»c ä‚‰Ó„rÊ�¡N5>¦„èRfó~ÅÆy§‰¶Mq¯cL.;E 9['Ê}<ìOÿuoDåç£w?s"ÝÙ­‹eýPû{B­ØÞºÛ×+ :ÔŠëbeÇÞn•Ò:Ùx–y·|™ç¡ksNl€�ŸY ŸÝ.sAƒ§×û»+ø÷öÙù¿s½øÎ‡ù6FÆñX§¸ì*ey#Œ¸ï%zòïmˆ1 †î¯ï›ï!¾8|"^xZÅòØ111±=Y®¹èªÅL L ¢b´ÂÓj8Ó�¡ðt‹ž^¿Ä›°…§©ûøí·~xä¯cÀ˜jãOÔØEILr2)B¢å¨(Çß�¨àžŠf$eÚù÷{2Ýaq2þƒ‘Ž­¬âºt2N†‹íB�–ü�Äl$Åönn9ïb;;Ø£rÛùû\"¶C9”Ù]o;ßHÿ�Tnèf"ñyã« fYçàîú0ÑCŸ4žj0\„0¡Ý`0,?˜u¹ìÓ 3U†0žËî.L.»çlª”\ç pï?o–KþGÒÕ%’‰bÔd “v€G<õ® ”L #@ú�á=mD\ï‡:å¾¥cc–Yæ)Ü쵌+aË=ßùŸ éö§zøŒuÃU÷üþóÛAymcp·s·OLÖw{P”ÊÄvpÁ,]ùøeÝ퉙¶h^J¹Û¥«�Y}ùîvïÒ±ÜvEtG+¼§þ†p¡½ªú7îä„Ç?"²AÆ`0¼º¹ÜÍï&{ +<]WDöIÈí¸Ã{¡ÈŒÂ8ÀÒ¸Œ’ìõ±Q1^áé¤ùÿ¼¾ÙDÅl O_àÊ߀3h OŸA¢ðt¦¸Øc¼£ ïµÐz‰qbÅÙ®¹Û‰Sœ]åΔ¹žq´jyì¶àÅ�Ÿâ»-æ3ŸsV“áñžQ��¬¨¤P˯ w{ÏÓêanIf·‹LsMl‡Þ¥0íØq ncÄvåuxÇ>–Ûž)IåF˜èŠNí#Õ� ÐÌ#̺ޕ¥v=L]ŸÏo¯ØlÚé²ùTü-tw„ð›_�¾ÿUã©ÃEÚ ÃrƒÙí ¹´u>­ûŽ'9ˆõ_Uâ+U6êôò­àTÍ|T¾Ï#5Ìñº¶lþè¿þ¯�OÊ—ÁFËQ5Rµ#éº@&^’<Ž%²¥Ðr3y‰òqɼÄÌH%቗î,èW|h�,07ÿ¤~Gúc�Ä<4¶«@›I´cZxœ.HÕæŒÄŒ²PIjêw§Àà“ä­þêõ?;ÚòüY[’º{8ûÐcŸ5Žj0\0G»Á`X‡/65NöÎýTMÃ\v76—}DlLI.»+Èeï\Z“µÆ]|øÒf)ð•­Ðþïÿ´ù¶?øÍk/r´ómŠ['åf�FÈ þøîµ.|N5•¢e±ÇÄõ7'ÜfsÙ5Â[’Í^+ÙìípûÎ?ö[u²GŽ¿÷Ù‹“©—Kçn'F²×f�S®êö›¹ÛSE©{;�³½Ë.ïâdxnû"îvž]I.þñV/™c* +ãÄgäºø˜œ»Ý5%bNN´¿G<»ýº»‰~ð d Ã+[d?ùáØÍÿœE O¡ÝEÜì±rûJÏC/1Q«sùì@ÞˆÁV�…§›MáéÖÖPxú&4¹ì‹àY?@[xJÀ¹Szái]‡«ðb…§‹ ‡)!±»¬ç¡«½ÏgîvRVŸ¦âcˆõõ—Ä“ŠŽé8.w\ñÖÐX{¡«]xg{MÜ_À'쩇ìŽ!w3÷Æu%£¤²ëå.wñ²4ÎêÅÆH¾¦d³Îv@-P ¸¢˜Cv¶‹ì½�«(IÅø›AgQÅVnF2Û+ò ReWÿ%Vo°Dwûû‰¾ùiã¨ÃAçXæh7 ýñ¸ëwÛ—4ZçÄ햧ʲ’Ë‹g Æ8ÚQæ&ÜJÓa9ðÆV#²ŸØ^à-ÖÅ‹ÿƒ�—;uR.�`ù2â.ÍÍ®:Ù�>3Ä7æ& ±i™2Ԅؾ ·Õè\vŠ‹ì�ÓäÞލ#n”»] 2¾„»Û»Üöéº/`Tí2Ó9'vçn¯gÍõÙns}>ÎöÂÂ4þþ,¼-uBãÝíž{OÆûPÆÙ.îÌÙÞ;†ö†c·w®w·Û]ƒÁðŠäo×ÝM8rYSâ¹~¨áokZáéD¬H¬”¸˜ÒÂÓ·Ë8Ú»ÿ½«ŒŠ))ÂéçAO?bÃŒÁ`xeð·›ï#\rU¤ðt7J¸R¡0#ºöümd&»ärEæ… O�_˜ÝDŶÛÂÓ^àª߀•ž–ŠƒüªD<<ù>౿VÇ9ánw»tÃõ±®vp7µcJæãLd×ÊQ%+K•<%Ät#‹ð™´“¢÷*8Ø¢E¨á]sŽ”„±¡0&¶nh%ã;sïú"´cDØ‘>´¨ q&`c'h÷û2ö½ß�Y››»Ö>¶Û°Þ¥ª'³v1¹žù±*u�°”42óx¥¨bHâeX©"ÔäÏà¼øêDvȸbÇà „n.É™y+¼Ï¡ÇD¢dÚ¸wÓ»ˆ¾û%f ÃÅËÝ®½…pâš¶ðôÐÃ]ìËžª9ÓKžfW,êÞ÷!¾ºQ-<=Ô¸Øyáé 6|~Ò~½€¡ðtç °{¡ O {Td_=B;)2Ýe'Ê SMLp÷yè¼™‹î^Ä D +EDuMdwy1=Å‹;¡}ÂÄõXj@eRQ¢óTv *ó=WR^žÊM�ÎmcÂúÅ,¶‰’Tn(Ñ Q3†ïsÆ�+¬ µû]èM#Ý¥ä®ðËQ;³ˆŒC¿ÜÝ!¼øKÐS_3Žj0˜Ðn0.j¼én–çÉrÙµˆ—*ƪb{A.;Èew©\ö-àð‰Æ±tš\öü¯ üÉÇ–œÆ»fó’ IDATˆíc,ÄPÄwmÃÃ(¾½t™fIQt[aûª"c¤›ýÙ‘v²Çµ?8ÕZLŠÈn¯7›“[îö €É°[³I+°»!cÖí6ÎözŽÞÝÞ}6»ŸÅó@“®}e[î£ê¸À�¯¤ÈÞººøÊ†>³Ãkêó/¹àÞ‰ì5^ª6×^FIUþJ—É´É2~éYÐO³aÆ`0\\"û ï \þ†6*¦�úëøÛt-£žÆŒ…§(Œ¼(.•ÂúÂQ1¥ðt£9VÛ—Û®YáxÍ^¨¡¸ðtÎÌš0^�½žËa_¤Tžs«“�}ÆÚûìv§;Û{�µ@p—.öÀÕö}Bˆ–YíÄ2º>%¼�àÉ„&vZ¿ BÁ½:l×ßÓ îÝI ÉݹÈ^ànO½¼€—i< eb{ÿ»Fâx»ýÛû·¥TlTw»ÖOu»k×+Á¯W{ÕŠîÁCœ/ºó×̾püj¸›ï#zâ‹ÆO †ƒÄ½,£Ý`0ÿÁ¸ëw[—4KŽ×»Ø˜õ˜ËŽÈPÅK®”\öã,—½Ä±4ðU49›ÿþ¿Gyf;0.{á@‘ÍžLën}=ëjׄuMx_q¾·V|š‹Œ‘¹åµÈfûïG>[c†üØàÏ3gÅ2úJqÕñìöéFó{7Yó�×®%ä3fçšÁ}¶7¸Ù»A~.‹ÕØ@ŸË~ÕÞŸäûˆH9[*HƩٗ™üK/Ë]ÄÕ2s6äÛ{Ùí;ͽó2ðòo@ßûŠ 3ƒáâàm·ÞO8t´-®/ámSö¿EÉb¯"ñ—C1O$²ºK¢bJõE¢bøëž®7ÇèÐQ`{«1^\Ö ì'|žðCÏaDáiíÿ_\Yáiêÿìq|�.äÊrÛ‹¢‚rüKî¥�FËü7—<øëî›�´•"ÁW¥ÿže#™ Nfe³Û•Y)û{¥lÓæ§ ç5³]¼QC�¶úVá´E¹í…† `N)‰²œ3®*yê|àô³Ý¦×a÷lÃO¿ýYã§Ã�9Ú CÙ°vûû ‡/c;/ÍJ8ÙU’8&—(ÏeGBd—ÎÕÉPrÕå²G“Ë^º,øÛ~àÌ‹À{ÿ³†èüýÿ�âìIo‰¬f‘ÐrÝS IPI'´T*´/âj_ÐÑ® îc\íJ�¦*¾*b{OhÛë LÞ8òq1©x™þ1õð™p\M|'S¶oíþ­m4_4i[uîvLµQ2 Úõ³Û]›ÿêf�[¦‹Uéy'ã¹õ'OÿºK–×b w{5—Á®ÎŽ”K'rÛëá}!þ·¡Vþ>Ì—{wrn­®žÿ)è—OÙ@c0&g{Ó]Máéámáézëd× O¹›½ò]Þ.%º%¢b*=ÊeU…§š˜èMv…§ ZkÊ`×·�ícÀÖt(<½i‰7a? OK‹ä‹Nl×™RGÁ©æ³ö8¶÷U�Ã]sµ{ÈçÄ�(Ü;‡µù€½¯žÓþ6ðÛŒûRDè»è3•Û¾û2s(éipµK£ºgR—sOÊÝÞòKç†H™Xœ $‡å­‹Wá|�oƒ?§y1>,æ²ÄÙî½ÄEœíâ…EsÛ�¿"òµrg»Ìs‹RDºb+¨ÏªX¤L$³½"�âŽ{'Ædi¼bQ2oy?Ñ·>mÜÔ`8<Ìíƒ!û‡â¦wŽ_ lfÙžRlÏ•g-àz)Í·­ª¦ÓÿŸ½7û‘,ÉÎü>»×—Øs¯¬ÊÚ+«*kߺzßwV7»›# ¤æo`$@‚HzÖƒ"3Ba8’3d³6»IvWWWW×¾wUu-¹gÆî~Mfvï±s�Ù5÷ðˆŒÌ4îá‘é~×s>ûì÷5Î¥ƒ7GÜà®Ä�ò&€çœ^VÏ‘}kÍ8”~ñg‰ïé�Y9Ú§j$¿èt†¢£}Z7VÔ1ÂYì nö6f |ê¿a®óÀþ¿&s·G&ƒè„]Öî–¶æ˜ë°4¢r`{lœØÜÍÎ|:É ]ëÚôx˜ÄÝ ds§#®{q? +Á}?fwòåVŒÉª€mân_= ýê?å†&�<òØg5Ûç5$^-² �§žÐ¾“ÀÓX 7IM‡ôDZúiªÀÓ%`aÅ<=1åXð"Xàéš­ *&vïå÷Dé>ªV¶êª.j¯¾\¿ ýÌ_äÚ4�<®ðÈŽö<òÈ£{¬#…cŸpÙcnv5—½˜’Ë¿ˆS¼XL×X–6èjé0° ÃeOÙ/x Àùm`ýR#¾91óÑo¿úËî°'‰É^¿.ÕB-ý,•j2 ¥Ž)îG{ŒÑgw!5ˆÑm™{üÉn›K *j‚ TÔ…pP*u·+®T² ²:(Õ®0Ñ…qÃÀòÛ{%P.˜ór›¸ÙaÑI£-rlŽáqÛë&›íâXj}Jîv˜%²9ÁŽeÍ8ªœ×ÎÜí^@ª˜íªa¶»í\)!$•]«ÆlÒC•¾»ý�/jýüsC“Gy\y�])�‡¾ ¬ØÀÓÞÐ8µËA#*1ñ×%ö ø3¥vn˜ÕTt›’k¿š­<=, ›Zðn Sî„ßx 3<�2<~¢ÀÓª]_Õö>+òø¾Ï/üÈ®¬£®vân/4«q©Ã]5Îk`´óçÀîLìå,w.öjVïHcg…â§þ9ðÓ?moçRZùY²ž…¸±󞆣Šw” ´ÂRëQ5ÛW6×z˵-8Ø[!©´ÞKp¶³wælgÛs"n;«cy}+Õ¹�?Nó²šÚ[‘ å‰€‚°Úµ4!ÁV{�V=ñm­Ÿþó\›æ‘GÚóÈ#�}Û¸}ì; Œ W’ðÓ’9¡ŠÂÿ ‰ë(äàS0—R0ð4„ˆ�߈ñF« ç`Z8,õŒ›ýž ë眰vØ^·";q(i <üuóós3YØ“WpÆ–Åj†ÝŠH.º§Ö¬:áÉ$Fû4|ö »’Üìœ}XµyÝŸø¯ÌÏ’À.† ÅP*ˆ,Íeá©â a©5N¦2ÁI%ãš]çhÌÛmPÚå§ÖÝ>ÁdTØ T"6Œ6 &eì2·R‘ýFο Fí%¶Àd8žäöÀ‰ìRÙ)EÕ|>)ã®c’* d*%£dJ#Ö¨G¾®qé ôOç¦&�<ò¸2µÚ=ŸÔxì)›¡3ïž–½V4çD—.ÚîvÌÑÎë¼Y b¢+Å ÿóÒÀÓxz×vÂsÞpÀÚºØ[�§c–ªsb:&ÃííV˜|mVY‘½°“þ¬Ð'S¡Ò;†ˆÑDIÈEøû¶ ÃvM{Zºªd½¶».¶�×/¢Nëý ­sí¼®ÐŒ ÃÂQ+4Ù<-„ŒŽšb²‰Öd,•öûVlg=‘âbµîÛ�hHª÷ëèÿ_o«‚ÔÓ,ýTÙPTí¾£©GëLUŽêŒ"±ë©RPO~WëŸÿ‡\—æ‘GÚóÈ#�}׸=òuÃøt\ö^Ÿ-}Lá²Gëˆâ`�“ä^ŸŠËÞk¸ìó3à²o®5(Žq Ìê�/¿ù>¬vîjÇô®vϨ¬µJ CÕñH¯ÓV{§¸k(g؆–aê1[BÊ7ab¡ßÚU'»øzân§McÐÝÎ\ùý9sŽ:w»¶îö>™múnnµmÎ ‡I¡îúú8Ž å’»]h:’Äô84òå&"<×;Ùžºj¾WNx'¢;¯ž70ÞáÈž˜3RÝ÷y­_üqnjòÈ#�½­Õü²Æ�íÊùÆÅÞëùæ)Œ1VŸ$°wžNŒŠ‰a`€ž*w­îýyS.,û˜ÀÓ#Sî€Ó0«[�§6œ¼3ð4¡’ê¨] <í¨©*!ïæÞÏ/þØNð[±]ÙIU‘c‡ˆ±õ1£»�—¨A…Šêw;Ø©ØÚ…)éØCYE_ø—Àþ(Žã+é߸}\¶ßŽ4t'ÒV•=% k&(Ìöîr·w-Žm‰ë³ÛÁò¨®¤ØÎŸÄv÷~CÜöVm+˜oBqZªVÏ}Á�Gn¶^¢|Ñð¯�ìZ©>þ—NC¿øw¹6Í#�½®Í2£=�<ò/÷~FãÈ- \öÒwHí„Ë.º¡Røæü¹‚9ÙmØUÙ3“sËÀ¡ã†Ãy'ÒLo[¡ýôªÚ·Ö.{5j+]Ešßümb³ÉÈÝbµO4ö«›]j…¥Í]\îOþ×H^Þ>“�6tÿ Dgžc|öšeðý¡Z<�Á�ƒ¶·Ìר¢dÆŒA.…³%³Ûcû<„騲SMÀÐã$ŒK�‡†rÜvÇÅÛmºµn0?‚~ëÙÜÔä‘G»[§Ýù„ÆÊ1`nÑw±÷¾ƒ]Ù•ädgf‰b§�§;¸—Æu~ï—”Çî\ìí_<Ì“ÀÓûw°^ð.€sè<­ªpÞÈ,OÅû%|A=¥žêÄï ÷ͪ^ùidòF%òÅùñ…î€×ÆbÍ«›C-Q»êc©þáîÿ`ÁN€Ñ0âH•œ— �œyÕÂ;Íh"l¢¾Eø�Ø·ÌšÙêc¤ç¹í“"0£5k¹ç­Êûç]‹Û¾ÝÔ§Û›¦O]»ýÜ÷s]šG{8²£=�<ò�ÇÁãMãVƸìe€Ë®\v‰á‰°Èä²sŽ'Ðvǻղ½pÙW¼ Ãe߸dp1”ËîŠ T~ñ努¾h~~áGðÝíˆ;u¤å°k’¸/ÀÔô¹�˜“�>Þ#6{Jøi«…>ñϬ+ˆ:€=—çnWÝ=ZÐÉÎøîâÿö‡Ù÷´ñí±bÜ¡dæôÉrn{¾ö–ÛNQ2ö¼¶@·ÜrŠW©Ü±-¼µ�{gÖîvºJ ènw|æn÷î`Ër¹»}ì_GªŠ\[„Ü OÌéåêÞOkýòOsS“GyìŽÈîBê‡\Ę[yµ©‘Bâzjh}*“˜<~RT C|ÎÅ>´�§€E£Å­n™rH�§[kf¥c4ð´B8@1$¨#�ßžœk3Aˆ|°žb“Óãmó½(-ŠÏÖõ>¡wþ�îG=¹Á�:Ù%‡;Ø=¢šHŸ•Y¡ö€Ïÿ àGX½Àþ†ÿsËiwÁN¦.¢8J†»ÛÉãyRªUƒ«6™Û=èlGûwÞs¼ÀÄŒ�ídCOËmçÎv¯Æ%Ÿ#¥F®?VA�2f{¡Y,›ÔP`|ÅxõÈ×µ~ö¿äº4�<öªNËŽö<òÈ£uaøØïk,´ ÜѤ fän¯"Ž= -¤ÛÇ ]ýà}�š‰6· G›M8òÆeàì»Ðï½”›<òÈc6õÙM÷h½Í¬Ì.;wÊ .ÙÎÀS*TKõZ¯ÙROBb¨÷žK?�§ì“ÀÓ¹ÆdqÀÒ”;aâÀÓP]ˆÙž&¹gCõý]ªÀØ ÁWÿ1Àýïè �‚!‚P7#²j�ÖV¬î ÖÇ“ÖÆ «;øÇÀÒ!ÒS +„ƒù Û2ŠxŠ­î8ëç'Çfâl‡¼¡õ²®Ò�ÆÙîýžŸ»×Ä“L€¥d#„ Dµ³�¬¼mšëÓÆ%ègþ2פyä±#;ÚóÈ#¿Æñ¸ìCÃø,xð©Àe/fÍe‡ÌeÇ\vÏÑ4æ—€•%zuÛ"» ¸º|Á8–¶7ô†ÄÜôŠ,¡é¹ïóÆÙN�ìJp!8ÛyJbaGЇRO�� §A,Iê2g©ÕV¦(W”Ž'{ëø*Ò7¤�$ÈnÉÉΙ˜- :<—{ò¹{íIÇnGÏ:fІ£:úçò˜žÓ[ÆÙ®ì¶rÇS5FÛuÃÞrнžÀsŸ$°× –¾n»÷³"ÛÓ¹÷)“^1ž½’�žã‘¸ì®›}¨»?©õ«ÿ�›<òÈcgõÙÝŸÔ¸ñnâ9˜'˜˜Á.EøLë‚ÂzDg‚]P�*¦$85k°˜s�§…©ýnp÷v‚xºÆŒ©�§©“ÍðkÊ+xš$ð��ÛÞxÚáµkvœ¹Ç’³]ñ`òb2¡�ºÚ%A·z?éíyBÜÈçÿðÃ?–Ž„Co�€¡Å>ç\íܨî™Ô¹H-¸Û• Û¬+³/‚mgµóZ–1Í[U;‘³í×ÌÜÙÎërÌ>$U©ÄšX±zÕ�Qw;`êUÇj×Ò1¬ü&šàTÕßÖúé?Ï5iyd¡=�<òس&îžOi½µ�Œi5nÒòc%¡ÆÐ1h£a<­9Ädd —$Ä{lvË®.ˇ�'OÜ(ïÀ¸—.­×’s�GLÐvÞÑŸïûœùù¥¿óÅvÍ—ÁFv.®k¾=¤À&Šš‰õ)a¨]¢û„\ö¤F1‘#Z üPMšÁ'ÿ€h’NEƒ„I1á] “­†-PÏK¼Ò‘Bœ/ÙÕ~pg}¹0PÉ•FàÞи¨´öƒRkçã¦EÇ0Ñb´E*c«M+²ºò?¬8‘�ØxE{aù2ØC=—*È1g÷µ"BEë»Ãä„ÂRÝv¯Ú¢{Ń Ëf…A¯õÀ—4N¿ýá¹¹É#�<&¯Ïü’6H¿»ZÉÖh½~“A#™"vxÊÑ0;å<#�µ=Eੇïê7y<‹Kƹ~ÀŽM¹vx¬w˜`.ÕKû%ðTW¾K¿‡Ñ£MÖ3TæY@%ô …äjˆî˜"ãÈÃÇDDv•ª­OÊõÖÀçFæhÀ�ÃjdÏ4Púﯰ¯¡9§•ýl…$ÖòòpT�B®ßø6jÕ´¡BÅvA€§›®…˜!pÏÄv4ï˜cÈÿ•’J2>‘×ËÃÇ Ù•�¬ªëT0ô!üpT%˜Ø<3—™´Rû®Ö¿ø¹Í#�,´ç‘G{2Ýdš¸mà‘] ŽözÙnÀõ$q=EtÊ,¸ìEó¾%.ûÉÄí±tu~¬_2 Õ¶€‹ qÙÅ¥½ðÙœ÷~xé'¾xJE½f»'®óBV(.“ˆa‰Ëd£¢{‚“�7Žb“Xµùì®Y¬bÒR~ù“ßµî‚laò'(¼“I‘–¨ph·8í¬IQ:ð»Ø>ªüf�Nø”Úo’]#<˜³Žv÷{{N绽Ôvƒ¦mšíFùå5·�7„ì¢ÜM�a¹w{hÃHîvÒ´(-4²´a³¯¥";ÝkÁ}É�D,â®T'ŸÔúµŸçæ&�<òH“ƒî|Üž.öOi�&‰ìŠ™!‚X¿ûŽO¥Ú-�½ú�t½-ˆÈÞÃyãb_èsÅq÷5zåÄ£3ð”cÖ¦ <�ÕH@'~¢®?«n¡}'�§:!(ü–€·že#'²�·Ý¹Ûù±W!Š9iW†Ï«ƒC˜ÅD¡Ý+s»„v^Ûç>÷‡ÆÙ~à8ÛöïJaÂ¥¥ 'v¡—»{Rt¸Gmðíš²v¹ 5}3^Ý*¸Ü=žˆëž»� Ô{*¶sa]Û‰(^C]ÜvÄ9íÑ·]´kWo…&|^;} ”/ºƒõÎLˆWÿžÆÅÓÐ/ý$פyä‘…ö<òÈcך¹'~_cñ`¨å5pBãtEEÜPAlL(�eÆè@ÆØ÷é°Ë}ãhšdÉð³ÎX»l­û"»ÄÝÔ�`#Í pí î÷~ÚÛC"»ðÄÃ�‚w`ŠnBx8¡‹=%à+eù³Ä­�ìtYóßö‘1J“ã¾ÈŽ€³=X§Ç¬ÙÂëSƒR[¯'îv:ñâÜínr¢è%Û6ÕÈ dz}s>ƒ¸Û{}+¶oœŒÅ¢¨íæ1F¾ðìþýÖa™@–ÕJÏMên/DÊ(êh§®öЏ„g»s÷#ú\cd ßYÚëCÝÿy­_øqnlòÈ#�x]v곇nöO�À^ 5š4='ûO%�{¢,�= <íÙÀÓExz&ìô¶)w <½xºy­žrãB ðÔeÜкjLDvÇ…ÞZ'+bÇÍ$�ÛÝñYIØ"Ž+ª&àˆK?sA]É5q’£} 7;ÝÏŸûCà>á›r¸@ï™wPÓëç]Xj(µåpç(ø‚;Òk—{¤víªi©HÍiIlw"ö~ÛimîM2ìfHª$¸³ ÔÑîð‡Þ!* Wùj ÔC_Ñú¹ïçš4�<²ÐžGy̼™{økÆ1ÕŸkÜìâä..;Ћ°¸®Eï4\v„¸ì³t˜rÙç7Êóh¸ì›«&Üp'\vÝÁç¼çÓÀËDl×1G{D`o‰ë!»’kÓdl œ€ug!Ø•âÀJ`‡>ö{bÅõ¢uÀ5M‡®Øq Ax—¾��[=/ÓÚ=•ÿÿW'SùîöºA¶A©Úž/Z7?çÍy4rb»jÜíŽÝ^�Œ}ç7È~Sº=ÛD înŸz*‰ ÚÚ |€ºÛÉqéÜÊòeÑÚë'cû¹Çm¨ž  Hw]*ûæš{é4ô›Ïäæ&�<òð¯\ÇïÒ¸áN`å˜q±÷çXà©]%Ãðë°SÉQʈ˜¶£#”2è\Oqï4ð”³ØKåâ 0?o\ìGaV/®L¹fxšÊ^ºO»P{Un; <õDöQ[dmÇOï¾h�Ù0æ“Bd"¨Š¡ŒBŽöHPj0µ+ 5™ÃDv¡ŽM’|î�¿ý¿€cw4ûB£m@)YmM12BÙÚ¦ÂÖX»}3Ÿ;Ú+YltèàjÌÖcŠF‘ì‚Øå×ûBl'û KlçoEw¬ÒLB)rG»àæ¢÷í|±J®©ê‘¯kýìÉõhyd¡=�<ò˜YCw÷'4ŽÞn›¹.{á²SpÙ9C®ƒËŽ«ÝkÀ—}X™‚Ëþ€·\\6fÈeGèõ¶hºçÓæñ+?õ?—šS͉�Ã=ØP !ßÃO¥¦R×»�1!‘]7º縪X#8nDöÂþû•s³»ïŽSâl×\x�Õêº-¾Ç^߉—‰4>ôÿÒðÝún›–d[Vv;�ÇÍ e]íZ[çõÐo„G Hèçx»Ü=çw劊 …„�AϽ³¯Rþù¥h£Ò–êþÿúsPDNˆÛnEöªj‹QãBÆÉPwû©ÏhýÒßçæ&�<òhj²›N™Oçbç�§µ¢< 2Ù#�§�¨˜BpF&žÆu^ãHA«tÂÀ¿ö†¦Ö[<,”Màé=;Ø ¿ð;\™ÀÓh½”xÚ2+Ì8ð´ÆÄP'û60Ú6Ûh´e&$–çÞ#™O=¹·pÇl%­¸ Çf‘æl�ñÚ©B­ºÄõ@A¬¥ÇRÁ"~á_?ú€£·± *ª ÿ¾w± îv Â�ÏWÑmq·ÇöXÝzMˆí@7·}’�Tòœ$Æw½ýúy.¸Ó}§eMdõ3b.+¶?ö{Z?ó—¹Í#�,´ç‘G3‡N˜eÉ5ó3R+‰ÏhÆD‡û ¸ì!�]MãÙë7\ö%LÆeßð2€sc`ýâîpÙu¬AÒÀÉO¯þLFÉðBI³B Ž-܈ ·jün#c‚a]!Ž(g‡V~0×x<þT#´×‡�fËm5©T xv!íœ}´!éø !_D ŬNö˜»ÝÛw•ÿ¾+í îœg_»Û‡öu6tÉ�óÃ…%ÃR•�|R#�ªš%¬¢»]„w@æ¹KÂ|ÂÜä~‹Šììxõš‚“áÜö:$ÖýL'h$ÌA;´O=ô�óïC¿ó|npòÈãzÙø’ÆÁ;7?8{Ë\²ëËNO¥Ç‰NâÝBÅÐÏVö€rО.�ÀÓÛ‘nªàcWOcað@<·¦ËŒÐ‘eBÆ´\øSžR'ûhÛ¬øm™zaËšT.Ÿ.|hp>ƒy2a$ôÁ8^éqÚq ÒzXÜ%­5R‡ì‘ý)Õ¹Ÿþo�Ÿþ;àð-À‚Äögµ4Ü>š!d ãdÄ€T&°Ó`Ô$±]ÀùÅvø¬ö‰íDHž©ØÎ…uì0$5Pçv†¤JYC´n%;H Âj×ÒAÍÎ�Úd¤ ÿ¶Ö¿üó\‹æ‘GÚóÈ#�•—}Ð c¤â7Äeç8tqÙ_rLÅô©¸ì=Ó .¬LÏe? `í¼iF»ÄeG@dwÏŸü8ðÊ?È�w³SÁ=&°Àó'C¿KÛ\í¡¥Îb“q^Qv(uZ=ú ó¸ÐDh' ˆ£%W;)@‰B�¨ó¡ÆŒ ĤЖjü¤ðTé ‰ËZ8~icmÙíºg—¡æ{Q˜ç‹²AÉ(ëfWEƒ’Qã†[®íÿY±AÄgàn�î) •})'Jm¡½v¹£ÁãÔ/£¢û˜]›ª¶gMØ IDAT¨U)ÙÙ^š8êžOiýÊÏrƒ“G×[-¦”ÆÃ_oOû‘ÀÓ¢l°~©�§5"& °ÇB'»O%—d— žŒŠ)üÏF®—,‹�ù>pÆPq @Ê�ð*€wpO'Ì­MU3ËÀÓjŒ*f´i‹›ëƤröè3ï¨úøž[2yINpï ÚÇuQ´Ew/°7²ò¢Uˆ™F1¨¯OÈd�I*àÉ?~þÿ™íÙBQB@È�>B—þKϨn�-œL, •¾°õ‡‘2KÛ1L€�Šíð×ÛÁDù½Û‰(>uHj-ãýlWÞrÁ]UM­^kò¬N­§_ ¹žÙ­€úØw´þÅŸåZ4�<²ÐžGyLUB<üU�•ö'u™p6»‡>Pq.»êâ²óÂm!½…Ü4{à\v†µ ¬,OÎef¹ðå‹f™0EÆT•мì�ËÎÿ Þ(�ü¸yüÚÏå†U«vã@±2¼‰ÐÀTËd;›ŒÄ†#&´O„‹‰ìµÈnª}Õ|/,ÛÒ¹D\(Ø š8¥I“!„£zœK&¼·‘€ ×iƒ�žZôUã¸Vh– KÛ¶"Û±GÝí®‘Ó¦”€‚R‹Òœ'Ê îîýUlb©bÂ7àù²b„Eöþ=wREu·ÛæE³É Îlw°šLtQ~»tmT£p˜_Ù‡zðËgÞ†~ÿµÜää‘ÇõP‹�úŒÆãß²�§ó@`ÜÚÁÀÓRæ\·œì*R_$0Ø‹°s=“,º«pð*ý¬eßÔ¬s‹ÀÂA?ðôö)wÀ:Làé˜2ð´«ÎIÖC›x3&ìrà©çbß0“«çZÙ#Z7E©RÊôÃSoô:p•ª '#MŽG.º{=H×-WGò‰:&WºêÙG¾a¾¿õ«0Ž’ÿ?Òûs®iIC¯KTR曪¢©á¼ÇÑ=Vyµ[ªØŽöﮈØN¶í4ÜöhH*&\‘)¤jR„òÚéK<ã�Ð[»ÏbÏ%õä÷4.~ýrFæ‘GÚóÈ#�ôÒáä“Çî4Ën]S,t‹¶›=™ÉÃÆ �Ë®"\ö¢ƒË~€7Êû0\ö ŽË¾aÝì#a‰p…™qÙÅÐOV˜ßñ8ðÆ/"M*ä ê ÞQÑÛgÂe¯:ÄöÊŸèðp1¡FpxàKvÿ‘mZ�xì„wÇm¯ ‚”qa©LxwOd·Mˆ�2t‚ל$Û­¿¡NöŽ×{ƒ ÜÖáToÛ^{;Wcën/}w»*Œ­”ê8îvR Äá]3ÎY�S¬¹˜ÔÝ BåýX‡Ã݉ì-„ }3d?S¬ åø;WQh2RBÉÔnÍ>ÔÉ�kýÚ?å'�<®Õ:ìØÇïVn .vAx¬Eöž¿† 롆A�½#ð´ëg¯éx,Õ-I�§…öêOçW€…y`&ðô.SÅ4ãož®ŽLíÇO½ÕŒWQà©«SùäÀ,OG[¦Vv¨˜ Bÿîåè}ˉîÆå¾Ì­˜^ÄûE$45eâ(„6ŠÖʤ^–ÀÓ:ÙèCn©ÆÀ w¿{ÐÇ3�ô^hýR6Z¹\ÃNÎJ†ÿšZF“Œ.µ¢xÄ–ØÎø}'¶“ä}Ön;3Ùˆb{±õq$Á�íGêhwµ*øûgý5?ŠêÁ/iý›äZ4�<²ÐžGy$�÷ÃyP4ˆÕ_]\öb‡\vLÇe/(—}XÞN}Ö|o¡~ˆÈî‚?Aˆ´�2RH*|‘g{PûMLBŠ¥2·PðõÚ€)›>ؤÛíêðŠNRè†ì„Œ Õ\+Æ#c_p¯‚Êÿ�-~':Üíì9 .À·öØàÁ© Û ÂwÕæ¶kr­ªø5’\Cë°T†~pîöû¿ õ ?Ê Ny\k"ûÉ�kÜ|Ÿ1pTL4ð”\/ZnߢÛý›x œ ëñÙAÅ8¥u±÷†Æ½p° <½3íØiàiHhOAÇtºÚw!ð´…‰ÙIà)EŬk€×á9×»FËå>¿bXîÞ¹À°2ÒäRgXªt Æ÷è›î®wcNviR£ÆðØ ÙápîwÀÁã¢R%_+ÕóoBƒRÝ“¢Ã�Yß9«�ŠîÜåÎÅâ`Kk"H+=�Øîõ8{(¶×›81$U ï-ˆ�pŠ*ôq¸£]à˜R‡{büQLk—²ÒÌ9¦þšÖ¿þë\‹æ‘GÚóÈ#�h©ðÄ·-—�!cZî‘—]¸ìb d"—=Et—–—ÖÚŸ3üÇåÁô\öUËeßÞh˜œ»Íe¼Ñ2¢FëFlOvê$í*ôv ´·–K Ë«[�§Ò’Z�渢ûh˄Ɏ¶¬8Ü3�I`[±Ý‰ì-Œ Ý)R¦`Û‘,ì�éIÂR;Äô¨ÈŽÄ TÊŽ„¿ØíŸŠïæ²�ÍÝ.pA©óÀ¶p=p׉ñ¶šÇD�®è,â©üs áQÓ¡jÚ\Hîvû>UáŸËÞwÕ¼ŽŠìTt§‚»ªÚ×°1àkg»˜Ô#_׸tú�§s““G×B öÀ5ÝÔžr{ËÉ.ÔeI�§*Ñù[tˆëˆ¬<œqà)u²»ð×þ0¿ ,,Åa$àMSî€30<ö¤ÀÓq»ÛQàiê*¿”�øIOYx<¯«vxªûÜŽîO-Ñ}¸höyωèîPIÂ}Ñ�’IÛ¹‹œ‹ìQLŒà\wÛØ‰ë›kÀ…üí0˜Ó8t³¿�! (é{ªKU݈¬†…£¶îÄ<¢]È,ßiÉF]îG6øJLÁå®™c¼•yªd±�1öJlf’*­ØëÕÐó!Á� ì%P>RFƒÑ�ÔG¿©õ¯þ*סyä‘…ö<òÈC,úªÆ�c†Úâ²÷Ò¹ìE€Ëuµ£�„ÐÀµD÷..{Ï8`æ–€åeÃë¼ ÀBâFy ÆÕté¢i¶F{Ìeýû­à*ûuÛ#¦Qzû×a±]1A˜'ÚOÞ¥‹ì]�eÔÁÙI¨«¶ËÊ5+Ûf2b{½ù›Òþ{eÏ~× ‹�;ܹÐî^Ç‘2õwŠ�!n Í…÷X½®»Åwïﺜìì�›jM�Ϭ+¶mt³½ûsF ªÝívÛõ,(Uù8çv¯ÆMCV»Û«pã�‚�Ýí+TùÇkë´(šÏJ»÷ÿÕÇ(ÈcÈÎö'3–' «¢¹®JÁeê¾ÏjýâOr““GWký¥”ÆÃ_³�§ ²‹�žR¬<•\½¡ÀÓ Ùå\9Øc`òÀSEœú=x:o]샼À½†Sî„iOcnó  Ž€Ó=$´ï4ð´ ×Q-LÌ$�§c+° �§�3ïBŸùíLïKܯ”ÒX<Ô„¨ÍA8KÄp2±ÚX¨;ìÒDƸ1„lmë— ×/·�ÞÚPJ)�cw˜wÈ'f`ÝílÀadZ½äÌSæ½*ØíX± "†“éDFjXQŒ\ì^(ªV8²âWÃw¿S¹Ú ±hsÛw’ZÑÙzÛn[¦IMW0fow«& µBƒ”¡ÿ='ÈuZ=þ-­ùŸršGYhÏ#�<¼[ç]OhÜpÙ.»J`²cZ.{ÓÉeZÎ'�˾¬™œËþ!€·\ذ\öÍs¥¹ìÁßÙ0«›ï~û&æµ#UtøÖ³Ù[®¬ŽeÎ]vÇݸ ½X¿Ô¼¶çÜ["¶k+¾!=„‘¡.wÏ D«âÂïdýnLT÷W«)aÕµ$Çœì@û�MT'c'$Z+ Fp§ÛFÛsq° ¥ÒÇÕ¨ÙF©BWq(Žv‰…¢ ËkC�\x–#ð<4”$¼‡–éºÀTAh§!©•¿,·ÙF’Cµ TUãÂÐo?—�<ò¸šê¯{iàé\ãÔí¹¬/`bÊdF9ƒÀSú;t;ÛÑÁ¾k¸*¦ˆž�á°xXTs3€;§ÜSžVáyR­Cë¢iOS°zØëÀSgdˆžîÖ…÷…�U¹‚ÓÝ;˜@ Õà "{kÛ;cÙ†Û›ÀúEèÍ55égWJi½­��á+íB!©ŠºÛ… TþÙ+znKìvf" ñÚ%1=ø˜ Ô\ŒÅvV+sÔ ¸C|–b;ù€W"$ÕûÙÖ¦\pwyCYíಃh@ª–zl ”�¡>ö­ñg¹Í#�,´ç‘Gõ8r›mò†aWHÍý,Ë‘¥P¿€¸㲫"¾èÞØ9—}X0á° €…pfuâ};Ø ]�§ã±�Rñ¸ç¸JO¡ñ3<½¼þó‰O¯„ð.Šð=Ëúo Âê ¡®¥Ûr<2ÛfsµóÿŸågTJéfBHXIQ sºôKT€Õí/[8Ý¥,¢"\Ÿú;CX™¹C±Ê_áx%ÅvïÇY…¤ æ‘”�TÏå.L˜Ô¼=ö>FKF!È×òâ&¨¾¨õó?Ì5hyd¡=�<®Ófh¸¡Íe/X°ç~¶š¸�›=Âeg÷i™Ë.‰îÜ /p‹—}eÙ,+¾é\öW¼àò%Âe§|Î}Æeo9½™“æøÝ潿ÿšà&¦ãµstŒÄ÷Ž`/H(œ@HTWÈéö†i�/ŸíllôæªùÔ·< ±tĬäŒ=d�iÏ4%{�NdwüvWœ;ç�syîvç "«â"{a âJž â+äf�2ÜYó"áe‚ƒ¼¯z¿2óÕ{ÎÅîRkwûâŒág¼Õ<ÖãFì×°<É*ÜTHN©®æ#.ÞÁ'SØ—r"s·×K‰�«Ý52UÃswᨚ3Ûù„æÈçÝÓë_QåêîOhýê?æF'�<öSÝuÿ4ÞDP1ƒv.NÍbïùâzgਗ਼ßë <¢LöNÑ=!ðÔ­LìÏ™zna¥ <½3ÍO×Ì$ýD�§©ìu 3ðT|nÖ�§‚“ÝÃïMxº¹ \>sU"ËöÛ¤À,>‹Z9¦±\!jà ad@êY®�{º¹Ø¸ù/T¶žm=j´$‡;¥ésW…ØNë?Il'ÿorHjDLGÂï=‘=„:¤/a½bÝÇW&©‡¿¦õ¯ÿ:× yä‘…ö<ò¸Îš½;×8~Ræ²—eã¤j1 c_³â²GD÷T.û²å²Ÿ€a³§ŒÓ0ˈ/lNgÍeßn³9÷—ÝûyÜð5©@}äàÃ7"�1Û»j#Í4÷�‹‰|Q! Ë[Êl�Uãm³zoOÜ4éwžWêð ³ävLÜí=²L\DÉè†mXcd8N¦ Fâ ¢:�äu2RFÒz;+ëŽæe¢fÇ5,dEŠcuÆVWTcãDì |f»Ö�€4*µE‚RU³bf<à\… ‚4]ñ¡Úb6]R ÄÝíâssB“{°€»Ýí»‚âd&°¿C³Í¿]šÐ¬ø5˜¢úÙU”Gû¥ær�§ËGŒ‹�¢b<‘]â±sLLØ &°#€ŒÙQàiä±$®GO•¿jÒ¹ØëÀÓÀü° <½éÆ >®dàiLhß—�§ö{+ðtØZ3™7gß…>ýv¾¿ìÁýâGJ-ÒÞqKö: •M¹_¸RÔÕM"†]‘ò4„�á6øÊ Æ1‡»TsI8?´Ýîû^l'Tâ¶O’Jë]!$U³žÙÕÍõó!£Ûû¯E™!õ©”ÃÁ&NÕ£ßÔúW•¯yä‘…ö<ò¸ŽÆÑÛÔ í%kòŠHꌹì!b˜èä²—„Ë~Èð;'á²�¼à¬¶\öuÂe¯ö—]Z,9•¸ üàMÀ™· {Ñ1ª•ã“Æf�¸´$äHýYØÁ˜ð-�¸n¹ù;u$é³ï™O|Û#‹­»}Þ¢dÆ&àÓ±È]Xª®œŒs¸s~;ÝÇ=„“ÑðY¹MGÓñÕ!¦EvÉÉ–µnR—’{²B`RÈ6õã10˜ó™íÚ^_sŒÕnƒRëÇÛv ë˜ Ò¬1?o,5Æs—­à�øWÍ—ç®!†“�j#eà·«nAq”ŒqƪG¾®qù,ôë¿ÈÍNy\ ‘ýÞOk<ö”ÁŸ Hà)Øyø|gàiÈÍ>cTLHXŸˆÏžxj¯Yuà©EÅ,Màé]Sî€�ž¦b_’D÷«9ðtËÔÅ«ÀÚyè7~™ï'ûQl¿|N©ùe�9É…uZ»³²†ºÚiP*­ùZa©Ìú®ìjÄ¿�\�xM&ÖµTlgŽïd±þïöƒØLÁmç!©ˆg6ÑÿWk&®K@v»c½•—î%vµe}\„zEÞ÷P�Kë_þ§|½È#�,´ç‘ÇuÐô=þ-�EÊeﵑ1Š-SÙŸœcØÅeÂn)`g\v»Äx~XšåÅ''Ø(”˾µî;œôxqÙ«sSB­ŒÉàå£À¹÷"MqDl  �å„x¸µ½a¸ëãÑ®,÷Õo?«Ô±Û5ÞhþßÁ¨æü T]ùÎvú™œÈî„wOh·ŒòЇ¤j"4-†»æÂ{¸foªj×9+2žÚ å4� Ð ��ïcº<½74“aõd„Ü{}²zfË¥RÁ}´Ý„Rá¹Þ• |# ¢KFK= äû�º êþ/hýÂ�òõ$�,´ç‘G×Pó÷ä÷Œ[·o®é .Yæ�]¤q¹ì˜ —]E¸ì%ã²pOj ày+¶¯]$ȘQÓ”´¸ìØ;.»ž—]Z ¼½a¬6.›¿•V*ðeám…½Ã½Î„uúÿ¯_¬›€}Ùœ¼ÿš9"ï|‚¸ÛÇ%SÂR‰C›bdÜsŠ`[já½`bµûΊVϤ|Ç»ädWª{õj¬‘qçmXÄ×;—MÅP7•/ k‚C*èäРq·+r Õîv”:.5jPQ#ëxW6$Õ¹¾kG¸ýw”Nk2RÝí©½–&×´ »� ï<ˆŠ¼¡‚¦‚ãdÆäg{£`×JÑPöÍê¦sïA¿ûbnxòÈc5–R}Õ Úœ¡¡oQ1ÎÅ <­Eh*®—TTLhÄöèÏ@·«“£bb�§µIž.Ì55ÜÝ0ؘiƬOƒ‚::N±ÏO‰Èîž’1ž^;b{5Løðc~½R”ÖɬBmœŒQäÃBm}¡¬ü`Ô$±�çr…(2¦ŠªÅvRÈM,¶k¿ÿ�Xlg!%ÁLxÛÉwÄëÒºte+¡âè°¢€zø«Zÿúoòu%�,´ç‘G×@øøS‹‡Yø) ßânö2à`/Ú.è —]Äò„t 5žÂeW”Ë>4(”•)¹ìX=gšŠíMëvG¸ìÚ¯9¼Ÿ÷—½·i Õ– µÚ0"û™·¡7×MXaÀ.g§«<7c;rA}´m¶%)ò¯Úå�§•:qÊ,ÿŸ[4Îöjl‚R»½¬g;Ýw…ãNŒŒ{ìð1•ޏÚÁò ¸³½’Ï;--ÁM`8Æø`Pª´Õè„|½,ÑB"9”LÑk¶SínZFû0¢nmÕ d Ì¹ 'F»íZÉq¹ÛÙs¢h/9¨ºîŒÛÒØÖ wâj§ˆÑÝ>nö„ ¶‚R‰»ýžOê¼”7�Æj¬Aƒæ ‰ìªdƆrÂÀSg>H 1¦iPÞy^©C'4ŽÜâsN{ì¸)$Á½lóÛ[a©¶Á n÷-ÓZ‚$g»W§kÿ<�!#9ÙYxªØeÆ|EB›¤cß˽�ïnw+Š0(Íòv¥HPª½>Œ¶„J-@WísSqá;ŠÊ¬€XŸânïÞáOÔ 'ÜVXª$ºÓ°Ô²�’)û9¨*�מöçL�å\ìQLL—“=…Ç ég-ûfÍ-‘} À!˜°ÓÛ¦Üg¼à#ìbà)¹þîIàiÕ®gx:ÞnBè·7M ¼y9ž^Oµìê9¥æ–4ô�×µ\z: Ju/ðp2ü\/ió}Züv÷{$âd!¨-Û=Üa($•‹íˆwô`K0OÛ9$•L@@ÄèD±=’Êù0+Þêúrð T4+]Ç_ù¤žü®Æù÷¡_ýÇ=¹©÷jôç,Ú�N€3�ãèm�û Û/DtW�~S·`ô=[Ðo?›¯·YhÏ#�<®ÚFð±§4–Y‘}(pÙÉÍ¥þÚ .;â\öVó&¡8—}X™3KŽ'å²à²ã²oø\öj†\v�Êe×ÓqÙ½w„˾½i¸››—�3¿Í¨˜�4(çÞ3Gðm�h,´<^{ÜôlÀ§ãµ—=6�RúwÊo÷DwŠ” àdœ“]E˜íâyŠxPjjžº¤·õÞH&ºö*'£Ø„DQçè¨ðƒR�‹Ò±Û«Q#:×îö*.”§„¢‰îö� H¥îv‡¾)„¦×ýv›Rf;Ú)¿�_OÇœÝî‹bêá¯i\>“½yäÑjÐOi¹X>fQ1ÌÅîBOësªç‡€*ÑW„ê­€À.ºÚwxÔÑñoDÂêyàé< <= ãhŸfˆ�§¶žK < í)¢ûµxzî=è�ÞÊ×ú멖ݸ¬To`Œ#ÞªZ´{šº×YlI\힆NM#®ô+Ì*ëÀÓûÌO©ñbXÍ�§×u;Ú2!©Çn„ÃÔ°Rp»ãˬœ*Bº¹b¢»3Œᨼ–¬]î*RorÔ!u…óz ±�ýnGb{ÄÕNÛÝBɈ!©t²B·ãÎyƒ€«Ý½‡5¬)AÊçö5�æþ¦úªÖÏýÍT×%uóýº¾7—}àöG²-&®�3L ‹íèè¯$C^+§ÃŸHU�K׫‘FÛÀö:ô«ÿ”¯ÑYhÏ#�<öÕX:BA×–mN¨š—ío&\væ¶ì ßsù¨qEMÂe¿³ÌøÂ–qðì{.»ŽsÙÅ/ÚTmù\öµóÐgßË7ëY6)Ö¦îxÌà™Ü>ÐC¿Ñ§ÎvÚ´è¢q­Sw;u¹Sw�§êm¡�‡¥jêzäM Ô;+W¤;ÙÅ×Ó¥­<=Ë­Ü�Vtpw»u{ƒ Os�“]m[��¡d”Û�]w…‘€Ôw{«iAtq=£Æ&ô%pÛë¬"ßá»ÛyXªC÷x÷‚l;.ü•µ3W=ôU� ïCÿö7ùú‘Çõ+²×¡ò æzT£bú@Ak,aÅ`Ñxª¦DÅ„xˆ»ò’u´‘úuRö1Dô瀹e`aɘ!ޏ†É>ÍO-*fšÀÓ${ŠÐ®'Úsàiû¬ŽÕÚˆíGnõÀJäœáGçj'™†] ¢;JE@¥O¬MC"¶'¶ ¼'¶ÓºnÅöúº³Ëb{k» ¸÷"µÈóŽ Ýí@{A¦»ÇTª}Ïá‚* ù†ÖÏþçÎ듺é^�¹ÅÆ”sðÆæ,­ ®KXíåMêtëì¾�á{ˆˆ s×úP�?¥kóÜæ*rŽRÚóÈ#�+Ù>ù]Âe�å̽°“}G\ö.G|1}*.»mÜ5K�'qE=g´µ ¦1ÛW\öˆ«=Êe¯â\öѦù¬ë—€ßÈ'Æn5*o>£Ôñ“n0«-ª1Ðûû¯$‚»CË„BRk¡�4.ÜÍÞúÎD2Å1Oœ””Џ  O{‡ŠL�b¾%4èæ8ïÛkYEq;…¹ÆÑ"ºf·” FÍgÖÔÝ^ Ap··>³än8ÞÅï�Ë ìÿW�늛dÐW{Õ,Ý-8å0:Bx¡ˆ’±îÜ^êžO鼬5�뮞ºó �•£ÀÒ¡f… ««z,ðÔ™””SÆö‚‰× c’O�nW;v€Š!u#g±æ�)bi¡ <= ?åN˜yà©„ÈHAÇ\�ÀÓ�Ð>màéúEàÃ7 /~”¯åyøb»—g �>;ŽKa’ªÆ Úç<„ Ú8™–HË¿Ûú�£†xí±•„A¤Œ À#€bÙ+±½%š§ˆí€ošÑ˜<$é¼vCÕt»2ÁÕ¤ž¯W{…)ÃEk!L[=ö”ÖÏüEÀx냺¾:!he@\�ÜO;3K±áÝݪï=¤L,Ë£œîäš?¿õØïiŒ·�­uè—þ>_dzОGyìYSøØïi,6ÍN”Ë^˜ì!±=…ËAX‡ð÷`�]*—}Xžc2.û³0K�WÏÛælø]gÊeº¹ì›“=ž„Ë^‡}I�Õ–u.]ξ“¹ì»Ý¨|ðšªE™ÚÝnÑ't?– ]X*A¡€óÛb„àc Èäüvf!r ÷®°T)(5|uAËEkxZá©h4Üq�ÊÇÃh²M4™hêÙm*qíkv{Ñ8Û•²×9eD(;aâ¬!"H°é\OÜz®½Z(©øq¶+)° —îr¡½ÆÉŒ›Ÿ!¸b9;º(š Ô¿¬qæ·Ðᅳ¯'y\ûõ” <òÀS‚â+C�§EÀQW6F‚`Í@ÅLxÊ—ÀO…Ša�[�§dõ‹c±»ÐÓ¥¾q±ß àŽ)wÀY{rài%‹ÝÉ�§Ñ=Æf—܉­^”&’w9ðtÛÖ‚9ð4�N±}È4"ÍJQ%©[µÙ2ª«€èÎÝíäq’Øž(¾# Êë±+!¶{¬°Í$n;ýL³ IÅÇÀŠìÄÝ^/´Æ�ªÙgUœÛßÙþÄïkýôTF\_0÷™•c$¥™Ð–&¯»î™Ò4SÔ“2 ã‰ð‘û Ç‹‰“­c`¸dP3Ntñïòµ= íyä‘Ç®5…|IãàñSöÚ";wZ]VÁ�ºg%W»wóÜ!—½¸ìa¸ìˉå-˜%ÇW §|{ӈЮ9™—]'pÙ+�Ë®§ç²�ÝW€Ë¾y¸tzýR¾ùîU³òÆÓJ�8¥±|˜[4ÎöÊ ÄzÐàcjg;Ü™Ã]—{Q4Î 10Õ~×üÜ´ JKx—¾xÓ‹ï@1r²Ó†%&b{¸w»�\�P2½¡¹®�!vz†D‘ë“EËT–[^ Ò°"Õ6™‡8ì`Ûˆ|þHÓØ#��'²“¦¦f¸W{ ÁÝÎ…³Š]ïGMX*6´×cu÷ÇuæFæqÍÖR7Þm¸ÅËGñ˜žz"{Ï?WhÃ/¢bb¸iI{‘ ´c¨˜Ž®5g·Ah¶Ó`ÞÕp#€Gw°^ð[4�§«†Ç¾ÕxZµW^/�§µÀÎO/ÛÀÓ7ó5;�¨Øjù¨Æ²nê 0±!ñDô2žnÎáî-…žÕˆ…¬;kA¨nÕ›,U3aZI¡¨zr±½þ(;Ûéç�‰n”LJHjÀÙŽ®šVÜìvº›©àø+k�®0&÷¥Wÿ.B�úŒÆò1 çôŒ^xB;*° ÷MA\W]Ø%œ#üa#Ãï1:¢ð¬÷5\€zâÛÛ›ÀÖZvºg¡=�<ò˜ùX>Ü誃¹¸›�4x… ®]ælL�ËŽé¹ì%å²1K�o‚qH¥ŒUÛ¬�ßn¸ì£M"² AY{Îe¯¸ì|™pÕ^.ì¹ÙíáÕóÐgßÍ7Û½nVÞ{I©á‚ÆÍ +¬Aî7(™ÚÙN÷¹„‘¡.÷‚ô40Ub^òŸ#Îv¯V×¾3B¦+(5TÉ+Ò€¨fRéÄÏ w�S,(µ(�AiÜíc”Z” »½žyÅ„ʦDãý>Æs�ntAÜ—îU[x÷–q»¿«X,·}Lp2cùZ_ñÕNTpïC=ðE­Ÿÿa¾¾äqm‰ìwBãÆ{ìDéCðÍ"ð4Âc—œãɨ˜¦‹½DO¡ÚEÏL<Ô¨˜E`Ñ®8¼Ó»Ø÷cà©ø\lÙbài%˜-fxjëÀ7žÎ×é<ÒkØK§•Z<¨¡oO2•’�hk×ƼøϨNq2!”Œj�$­Ç¡Ý掘؎@HjŠØîý8#±½¾nM#¶qn{Gí*Ö¥RO‘2-8;ÑàݽLh'ýÊOÿÔ bóÀÊ dõs¯‹x˜HÆI§›2F�?/jìÂÆçHô„ìöP¾Gà~Q�Íýx¸hœîÛÐÏ}?_û³ÐžGyì¸9t\vÊ-R¸ìE ø4°Œ,«‹Ëž"º¹ì¶‰[<,«É¹ì¿FÃeß^·B;å²óàSì1—]‡¹ì—AùlºŠ c6 —ýbæ²_ÉFesÍ”_·< ±tÄL¹PO¾¿Ëž0áb›.¼s\ŠçjG[\wM…ÂRc_‰ñɃR P=*ÿ3Tä3׎Í ËaƒÖ¡<ûþ�\×HP*e·W£Fä¯]à•Ü`„„uÚȨ”¿éøNöÖßè KUš±2]sCÜî¡£H@¬ M®r�­¨WK©G¾®qù,ôë¿ÈÅ|Wõà—4ÞØžº€µ:ç¦<-"îº�žrѰÙÑvªK¯ áfø5€žæ�¾u±/À îCúŠC>Þð&& <�ºÍC‚:fx ·ÛËÀS[n\¶�§/äks“×°«ç•š[Ô8xêI$Ïɿђ !ã‚RëúBXjÔßÔ*Z0ŽDq2¼ö$b4_]¨»Äv&Ð{3j¶b{K8ŸµØª]%Ü :Þ3wµW~oâjPÇjwìv(àïÿ­¹�¹ÕÏ–£÷ÛΕbÒu‘˜aÈ­LHWÓ^N'ÀÈ «¤÷ÒÞ?Æ# ?õ±ïhŒÌŠ0ýÒOò½ íyä‘ÇÄÍácß4b^® ”ÂOUø’ÄuWĘì-ô ÂB:ÿ‚ËŸ)—½g>Ïü °€Ë–˾½Ùˆì[j|Ÿì•Àe×m&»†2 „Ÿn.ûªY&œ¹ìW¾Yyçy¥�Ð8r‹¿Ô»7Äv~œ”m~»'´;q™pÜUA¾ Âí¡9‰‰]áI1^ÂË„þ>APëΔiÏ‚RÖAiB¢ì‚Ra¹;C1¸t.#!0 Ýîö`âÚ{ý|il´/°»ÿ´`8ÎÌôBRâÅE 'cÅGußçtæCæqÕÖPw>n–¦/ÚU�’‹=xÊ›ÿ2xŠ˜Ð.ˆíÑŸ�xàiHPÇ�§¤6+IfÎ`ÞLH,,¤ßÍîßÁN˜6ð4û2‘¸$c÷4ðT`±‡O?zú‡ùšœÇôõëÆªREi0Z­>‰ÕDTLÔhjW §¥pÔÚûQ!¶®w$<_‘)¸Ü©¢U�¸ì-Ó%¶×Ÿ‰cZx ;k±áb{/BRéÿé­úÔ¬>¥ûN·÷}úGbVC8. Ù(ò¶+Pœ;Ø‹ î›Â}²þÙ9í­‡‚£ˆ£Ê1íÂý£ì­ÀܯÕãOil®!¯DÍB{yä‘zï}à‹n4®"> ,rÙc¢û´\v5—ìFÝì”Ë>4K·)—}%q£üÖ~]\3¢³ „ !cö”ËÂÄLÊe·ÝìÛ¦9½tzíB¾‘î—fåÜ{æh¿í�Ѧ¨ØFÚ±Û+Ën/ySÎCR FÆspS¬ U| x]µÈN¹ètb-$°ÇÖ‘Äõ® T)p´þ¨óÞþ=oz‚«ƒ¸Û;ƒR 6Ë¡d”ÛµuZµšLîn—>ðߣ˙ùFÕ¾¨Î¿j¾<_¶Ëp2P>³�†¥RÁ]Umño,Lˆ„„zø«>Ìa{y\]5Ô©ÏÚÀÓEbVp<öPôLLWàiŠ0ÃÀÓ$ ­¹B¯Os±;T <= ÃdŸfÌ*ð´SP‰î䱄žÅŽHà©fÁ{xºzú­gó58�ÙÔ¯ÕØ„¤½]˜Ø²çHÉÌ ";Õ]]ÝW„tsÅDw²©„pTϰA]îª-ëTZ‹N ¶{yBJÍ'Û1Á©êž ‚ï^‡¤z?S| ­E«f"¤^e àÿ·¹ç.m ì’^Q$ÞW'å±·V|iNv~¨;÷‰ÅvtÜHÆGÁ'lû@iï!½¡q¹?ñm�­5èçþ6ß'²ÐžGyDÇò`8ošCŠŒ)zi\ö"²dYt°OËeg�[M]Ù8ÅʾAm,5âú�H粯ۦíÜظhš�í�}Äe˜¢É\ö2fÛ-v\öwòÍs?6,o?«Ô±Û š`¼ F@5g÷¾Ýÿ}ÂmçÇ›Äo'¢»£=W;üI2ã¶KÍJ¢˜ÙNöWJ£fâ¡ûNúIÝíRóÌÀÝ. &Â+ò¾ëÏ@¿+§g‚»ûìÒý`,MÐRvûêÞOkýòOó5(�ý-°¿KãØ�ÀÊ1âbFOK3Qài ?¶ˆˆë˜Aà)Ú‚}ýºB<µ5™CÅ ÌW›=ìkj�‰OÇ‚sˆ:ÓS… `:TL ‡}OO×ÍŹßAøF¾öæ1ÛÚUk#¶¹52,‰ˆô‚K]íZ¦ÂÐB§’r‡˜»=e5fWM êrç¿Ãî‹í~&õæµ”̤!©b{°µŠº²“%îùïÿŸ¶¿?ÂÌ�,O.4�ÄÄ$LV'M@Ï@hOÝÞïôwb0jäþ&‰íÇ‘•äÞÒ³‚»½—÷‡POü¾ÆÖ:ôs“ïYhÏ#�zËœ wiHjÀA`ç¿ÿ³ÿÝôôK‡…cÒDvÊ ±IBO;�1!¡½þÆô •¤ª‡vÐ~ EhgZD0?¤2Æ):ù«È}¨(í}µ4B{eë›± yï Rfsú7?È÷“,´ç‘ÇõÜ(~ÁrÙçš@‘Ë^0–¨ Žˆ¡¨‰Ø ݽeYªq}9~ohS+Mw Ò¹ìï¢á²o^¶"û.sÙÑÁe�ìz.;[>ì¯q5mYGÓå3ЫçóÍñjjZ>xÍ”qw>á»Û{C”Jœí^ (ç·ñÙ ì…ö»q9. K�9ÛyóÉ£™1'{¨Xåb¿jÄsi‰›°èõ}w»ãHòÉÈjl®C£Â >D`v¢³Û'Õ"}v Š „Ýí1ñ¾þ�baT’³� ï¾+ëzA'cÅö·]ZEW'•ÆÝþÀ—´~>îy\áºI)�‡¿f–¬no(žJ<ö A`çîñN¡3@Å�ŸCâ=�ÈGZ«Jxaã\®�{ºyÑÔ1àŽ�©_�)<ß! eÐæ¤K<÷=ÛÙûá ·ÈmïIåõik› lwþÿûÿXX1 ö~è>›€b‹å›$…‡�Á§‰í1Á½ëä¡Ç>ÙÕB»wo*Ú÷&ÅîKEa9îe£1= YÁÝÔDêñoi¬_„~ñïò½% íyäqŽ¥£À`Á2Eû.{Ù-¨ï”ËÞr¹«.{Á¸ì½¦±Ìæ¼cÞ’¸=¶¼Ãe_¿dÄçí�¶3jÖ\v= —½Jã²k!k<FÄÙ´½aœûk Ïd.ûUÛ¸¼ñ´R'Ni,5À»ï]Pª®Ìù¡iXªöEvÇoo…¥R†Ú‹ix(j—³]ùEyWë–‡— IDAT3�êdïz=ošL0Ä&³z{mtÛÅ¡dMƒQ��ÀT³ÛG€Ù ‡•Qaœ "B¹÷¹XãEÈÜV�¾h&!8R¦f¸W»û\g» GÕcÈXšH;Eœí�|CãòYèמ¯Syì½È~ê3�ˈƵ‹ÝšjÜ^/-ðt’`¶C6ÅÑžäÆKAÅ„OùŠëpsµØ`Πu–&ðôN¤gåðñŒâ,€U—/'ûöæt�§I.v°:ôŒ$^Ta¡}×O &&žæ±ßëÖKg”Z8`Ve†Î¹máÐ!ÝÊK'èŠdŠ“ ¡dT¶Ùz¨'¥ºS DÕ,L´X¯LàÛéç ß% IU ‹ÃEøØªÕ?ùï€Ç�Ç€72‘]E&±EG¯Å2MÀۆØÞ%¸³×„Õuáe,ç‰ŠìŠ ð]Üö˜è^µÃR�Ë]g{U’û¯ÎdQ�~Së_ýU¾Ïd¡=�<®£†ñcßÑX8Ø0EË~ °Kಇx¢`cxPVðf´Ü¦I\öÂç²/– à(&ã²?Ëe¿`¹ì› ãsb.;ÅÄì—�²Ù+¡sÍãs:.û¯åãjoZÞ{I©Á¼Æ-È€†¢õæžîùa©›â…¤Ja©ÎÑNq2š°@Ë-®¹ðžôIº‹ñ˜ O )Ø”1ï3Øm~Þ�³"¡±4(•:·‹P[+c÷@œÞ•ßXÒëƒ(å5e¶ñ–çNØlQ4OÈÙN…wï}»Q|Œ€”©Q:v{H‚ݘ¤2~{¯uÿçµ~áǹpÏcoê¥cwh¿ X¹Á<-ûáæ¿å²ëÚ'uÜqá½HÚåÊCÛ©ž‚ŠQ’Ù�Õa5*f˜_iLL¹^‚Aú]°:VÏY´ßÖ”�§LxŠˆóÜCؘ¨‹}�OÇÎÅžOó؇uëÚ¥† ‡n’ÏQ°:ƒ?ÝÒÐu”êêϨÎQ2ÌÝ^[Ãé‡{P0F·ØŽJæjÛ½¿ …¤’·Ø’úïÿ7àèmf’¶ÇŒ€1{!!n÷U¸Ûhv\ÈÅ>)—=°:²3¦}P„LLd¯û‚„,Á½FÊTM0­v‚»íŸŠÂ˜�ª1Y‘jM2O~Wcc5¦f¡=�<®ƒ¦ñÑohãfg³ÄîVNÉe—n^JhôR¸ì\”Ýð…�Œé-—}ar.û h¸ì›«ÖɾeC¤¦á²c÷¸ì¡åÄ”!ï‰ì2ÆqÙ·× "çüû™Ë~­4-[ëæì¹å�¥#ÀÜ‚e·[”L)…¥–m‡;ç·{¢;EÊüdnšÇpwMKËÍ^ö¼±£¹iýŽ5¢`_!ˆ“�uõÓóÎ�[ýa3¡­¨^ºk$‘‹Âœ{Jù¼r‡YAe·®t`Fîv„Ù÷ÁY‰�a©Š¸Û+r ¯‘2h&œËcù~Q NÙ‚¸ÛþšÆ¥ÓÐo>“¯[yì^½tòã7ßgptƒyßÅî\[«�j— c‹,g/BB@GàéDKÝca¦HxM §æ±;ûœqû�Åyxz+€»§Üg¼ c‚¸ àòª1l¯[Yr±ï$ð4Õù‡ÉOEdÌ.žr4 <];ýz<ÍcŸÕ­›k†Û~ìvþ²s±$5a]~’_8Q G­Ë¼ÂÔ$¼^Ùí°b"é;S‚R[Nwæb÷ò†ö©Ø^oûIÅv`â�T àßü†Á^sØLd…�ò l•Àc/f°Lº‡",¸‹¨˜i/Å CÙì1‘�ßÓ¨ðÞån§b{-ºsÁÝ9ÜÇþ¾r‚ûãßÒX=ýòOó=( íyäq 6�÷}Þ¸ÂR,‘Ë^$pÙÕÞsÙ ‰Ë¾d¸ìlcw q£üÀ[.¬«Í2äñ¨q‡ÏŒËŽ�sÙ« ¸ìU—}c¸túòÙ|Ó»Ö—wžWêÐMGnæ‰Ñc‚DiîüXs"»Þ©Ðî˜íwµ£qU*%0Üc Œ °wŠÃ`œöSú»PcBâhÎYʳ§Û¯×7Û¡(MóæÄ7%¬ê)ÊæÚâÝE«(F*†¢JîöŽçZ6ÁöO9¢¢»�ˆìŠ^Ûìï †“áÜvºß«ÊðxcT°•T%q·ŸúŒÖ/ý}¾~å1ûzÉžÖ¨˜ �Oy¦MÐÉ®Òxì©‚€  øº¸²“ðÙ[ŒxºÒ¤ç»Ø]àéQ˜ÀÓÃSîxzsÎ!6›ÀS-˜!‚nsàú <¥¨˜uƒŠ¹”OóØÇ5« I=z›ÎôÝŠA …qòÕw‚c×a£:@r†œèNܺž*ßúCâr×u«„•áuê>Û[â9kÈ q­Åß)BRµþßÿ8xèÏ'²ØKyu½¨W„̀Š'©©P¡Únõ£}Z­]³èj.ÄK÷*�ØNóª¼ì*wL2±½’wÉ$cë¤Þêá¯iýë¿Î÷¢,´ç‘Ç56VŽ6®¬2Äe/—½Là²aq}¦\v–'pÙ—1—}àeçÆ&jkݺٷÁz¦\ölÌ´\öÊ_Jì\N-V'YB¼v8ûN>/®ÕÆåÜïÌ™uÛˇ¬+Ó׎Ý^Ù€T'¸£"Å I%ÜvŠ“ñø—š°…_xrDK,,µnHhxi@| óRPj,¦Îv†—q ƒwmûîPÇn÷¸ícÔÜöÀÛ“ÝëÂÒÜοA˜%êm°Ž/·lÔ²Ãsµ»ÏSÎv’ZQ!…PîúžÐ‡zð˧߆þàµ|mËc²:顯h¸,ø.vÏ” ÕM)�§ªÓxŠÁ‚¡aT {Ìq�uà©ÅõÕ�§ËÀ²ŽxÀü”;àE x:fÙÂɨÀ�Ú´®o&ÛC¤>¯6U>ŠEÛ¡ÂÆ пå…â¬Äv*ž'ˆí@8$õOÿg`ñ°1þõC«Åºî±*~*:Ø‹Ž‰ëÈýB»Š cDá]ú}b$í_.®{û„ ì\x—DvD2deà]¿¤‹ÆÝ^)+º»}1²‚;5Ìô {Jëgþ"ß«²ÐžGWaóx곇on#cJC¿DûqÙ¹èÎÝìÖÁˆá"pÀrÙop0q£|Ãe¿¸NÜRŒË^̀ˮc\v=9—½ ‰î‚ã‰6bc²”xs¸|úÒ™|S»˜7ŸQêøI#(Í-™c¤?ç;ê ‹‘)¸à#ƒÆ!äÜBÎÝ^"NFÃ/|Èa©ÂJ�ØÝíÌQ Jåîv¯Ñqa\šl³ª¹¾Jîö²OV�ýëÚØ!RF„Ûn]îU…6#=QxÒÜíA÷ú$îv˜J‹u0W»å·KÜvM¶�›|*+Õ^ŽZ‹€}¨“×úµÊ׸<º/'ŸÔõòõÁ|³|½µ„½—xØ ÉeWÄCåƒ?c¨˜.ñž¼çúü˜IˆÁ¼AÅ,,˜ÀÓ[`xìÓŒ3¶ žR”ß8€gIq§‡D÷†¿¦SX¿‚�§£M“»³¹ ¬]€~ýùÚ—ÇÕ_¯^øP©åÃúëÅàŸ£¥$¾�:ìõ(¨ÀNÏwû¤b»ädׯ2¡Ø&®ï¦Øî‰ç“Šíþø_KG`V×3TLÑ“u š}2Õvâ}UD°uÜ7EÁ�«æá=*ÀwMxèv67"Qw»Ž`d&v¶“‰!ÉÙ®éj`Û¿(.¸3­©( uáÒ锚…ö<ò¸ÊÆ�|‘½ã²—q.»Já²c6\ö.¦ K·Æu¶D¸ì©K•5€—œ« »r{£ ×ÚS.{%;Ý»¸ìU—}Ôv;9'û¦å²Ÿùm>/®çæÅº}Õ�OwûÈ\#ê€ÔÊGÉ8·s³ëBæ·×;,R&€“ñØëÜ=ž*¦ nö‰2ˆ»�hKó—Cq:ž“½v·;ÑØ‰È.(UmY¦»=—">Ûƒ Ú³r·‡D{Q`ïr¸Û÷© ¿1n}Wv‚œŒÛ>UàÄ¿J"ˆ îÿ‚Ö/ü(íy„/#÷AãàM¦ž íö¾uØE01-—�„‰‰ Å O±CTŒŠ×\*†žöçlàiÏžÞó}š±[�§!Aîj <­1cÂbÏ�§y\õꥳJ-¬h8.÷L¥öEäºÆ°õ™cµ;¡QÔÎ)NF²ÁW͵Z ‚;±� ÓQ±Z†?Û%qÝÃ´ì¥ØŽpHêŸü÷À [1Ö#YqeÙÅ•b "{JÆIê=•ÞOg„ª¢JzDÀ`σQkA�‡Ôr��êôœ¡¼ôœ¢Yr\p¯ˆÀ®üŸ¹Ð.‰îE õÐW´~îûù–…ö<ò¸ šÈšË>ŒpÙ‹ ¸ìnS%Í3.›„ˆá¯Oá²/VÊɹìOÃpÙWÏ·ÃOE�{Àe¯&ä²6»çd‘¦ŒsÙ7Ìrâ÷_ÍȘ<ÌaûÆÓJ�8¥±|Ô0vö8rA©µ`Ìœí4$•óÛ=†»Ù Ž‘<·�vŽÚÀ°2­àRI%ºÞì´Dö¼ {ouáÊ‚bÝùêíTt)«sÒpÛ­ƒ»?ôQ2-œŒC¯®vDDtqr!ÅÝXóÜBËðQøK a©5Ã�åε_ y\ç³½±YÁ^ÚÀ¥G¾®qé ôOçk^D'P}Õ±QF¬küëU% =-Ù¦ <ípÞI‚xŠS=Ó$Xà©Ãô æ�H²`Ooðð”;`OO‰€�ÂaŸ›6ð4äfŸaàéh˸Ø]àé™·ëô<ò¸¦jÕµ‹J æ5ŸVƒ‰ëðE`Z~ÖÚ¹n‚R]mãád$” ÐfÎT .CÒKuªØN‘}ÊÇs¨¶ÆZ ٞ؎ÉBRg!¶ómM?8u·ÿ›ÿ± ¯'³Ùêú²daâ‘û¬Rá‰ltÜccnvLro„vÕ;Ânö©¶½äˆ×d9è[ÎvÆúÑ1Tp�¹Û[ÅÅÂnk³LÑ0Û[Îv%ÔIVlì÷´~æ/ó½, íyä±�ÉG¾n´¾ ôê⋆¸ìQ�#†Œ!÷… +$ÈK\vÂ�[V'粿 㞺t±qM�$.{µO¸ì:ÀeïhÊÆ—ý2páƒ,²çá×Úï½d˜[V±�²ÛJ¦äî½¢ÍoÃR‹†ã® !8•‡8pq½j 7I`ºÙ‰Ó‡TIn"±)Ò2²Æ¹Vªy]8�{[pÌLÉÄv*ª«²É‹›+‚]�ÐpEt¬å}^a;Ex¾b÷ÊÞ5kˆÝ÷S‘?SÍþÒôÞ"8cÆmgL-–}¨û>«õ‹?É×¾<�§ÌÅ^‹ì“,cï <åŒØYž2a`G�§Vdï L 9˜†KÀÒÐÔ]·Û¯iÆNOCBûÌOu7:†ÿŒ½ {£XÖÁ\xº° ¬UÀ}ž°<åp×OïZàiÓfgžÒ0ûTàé xZ‚ŸKÝ#½ªÖFl?~ªo†cµknI\ÿ$aØ]9EE¾@7ìôek«s¹+âðå½kÏéÛà¶ïU±ýükÀñGɆ6Í=‘p1•�{2Ç6•›‰u–‰ê½µ}1>$¼{îô²­dÑ�ÞF‘1ž¸Y`ïõèÚŸq‚‚»"ëžÞ“þÝ™ŠT$øÝ>ÞêË?¯õ7§¬oEh/Uj�Õá“æˆïˆ ‘uŒË.yž%—�-.ƒ¸ìDd§\öûœ8à]ÒÀMÇe¿%pÙ›;Ïe×;ä²Ob\öM`s£pÙKå 1G©#h{X$®ÂÑÄ>Rg»÷<·™'Üí­à¶+%0Ü«Î= JÅŒƒR·…„xÝt«çng"Ëhìß—•¶˜“±ù¡#ã±Û•‘Ýç(Ã\rtõÜ(*C‡Âh@jLØÜíŽáH…wÅ7$á‹ëZõ¹í-NFù|{º6Mn»bîö§ÿ¢.�K÷˜Àþø—Í ¿•£¾³ÎcÄ’©fa§üû`‡Ý@n¬Ì Í}¯3E÷¤ã;wµQ^Äv'´ó &DÌ™JAý…×à¿÷‡e½+B{©R{` üòÏi,¶\vëfçG )—=xäy'\vv�W!ìCŒË®ˆ“Ý~ŽË~ùìç`ÜS›˜Ë¾í‹ìÎõT¸ì¥r[7ËxU§^ÔX>beûœQ�x쇥‚ãdªNpW$PÇÞ�Û™òÛCƒLÄÙ.+¾,(UN� ð)¼Œ×¬òkw·lŒž˜�ƒ‹9ÎÝÞŒ+ ÚêØí·}‚ ·½×_ÇBQ%w;»-uì9ên¯ὂˆ‘?~ªä°T‡îiîvÍj8F¦ò‡¹ÑÔ _׸ø1ôgo—ëâAýQ�#6ðt¼Ð�òë‰ìuzðŸEài6*f�§±>+x:^4âÈ °26ýÖ0æ†ijPàé$~Z0xšÁkŸIàip´Ï"ðtÂXìRàé%è�ß,×­RElo&“ºÞ”¿ö«š‹D|¯´Ž Ò‹ò>•g eô§½>R8-Ø2¶Ç}Ï‹íþ—ÿÜdŸÌ/[t-Í> 9q;d²÷�lJ¾-7ïDZ[£|ö»÷á,í!�q‘�ž–àîõпS‚;ÅÇÐ÷4ƒ‰ŸNm":*`MA=ÿ5­ßüƒ²î¡½T©»8PJ\öö-Àe¯Rnö�Ã=ÆeW3ಓ²Ñ<°h¹ìG`¸ì¹—Ûwì�wãz>—{™ËÞ„¹ìsëpí\ÙK dμ¡Ô‰G5Ÿ&«»½™Xw CÉÔ–=Ž@Hj+´W�‹Ècµ»ÁƉôÌåŽXXª°¸cw;ˆò´šnà¡7½>4–s·« PÛ̽]ÇödÛ|Žº»zE…®=üwæüÏÔ} K_Ç&G?PÕ¹a¼�*¼7d3Â{pÄ�Ç»id¡’‹¢UE†½9¨'@ëwþ´\b?ÔžžrFìÈß”x:S%œëRÛ4¨ö±øšp.öyÓ;Î/™~뀓¾8¥&°k�§‚ žÅeÏt±ïJàéDèçžÞ¼\øúò§åzUªô¨v®Q‡îÓí)8>Äq-œjæ­v^ døÒŸº^Fj�†ô— ')§ÛÁ>w‡Äößü%{jŒmjK¡§t½ mfGÃÅC›Ú™(¶ä)±B¦'˜„u¥d�|Ç®vøþ§=0øôDw° TvZ5èj'.xŽ�Ñ 3Ì€å/±Þ†=&êÅŸÐú�ÿ§¬Eh/Uê. •O}UãØ)ãDrÜQ‰Ë®vÂe¯d»„Œé‰ë˜ŽË>¶\öµ#fð{FlÏ©‹0nª+›ÀÍ\ö”£ê®rÙ'a.û6å²o˜�¬«çÊ¢TjºAæü‡æúØKK‡€f™œ!"qíÂRÉ󚇤¶÷o+°·AU;¢ËR�ñ—ålGØÍÙ%'»‚6Ùµ?t¡!ÎvJ„™»½éŽÕ*ÊlŸt¼Ð–Gn¯€îìc#qÛS§G½á/àdOôéþ×J÷ª¿Ð¦ÜÙÎ]1ðÝíà8æŒA(À›©u ŒÆPÏý˜Ößù—ò:©ݯ1¹ yÐßܦâ¤ÿôgß?0÷�zê5^úiëª[4}Äh.0ô�"&ÃÉrØ!pœ=+” P1ѽ7¤²×CÅO*fÑÜ_Ë ]àécS>Ÿø³<� ë3r±§O�¨·Û�§ÛöTâæ:p£ž–*%ö©WÏ)µrT‡óµì5 ‰ïu'xM©ûŸÐ8tŸÁ 4Û@³ÀP2NlgÏùŠ9Ü]sßÓ­R&€“Ñ s·‡œí• .‡’>ÑoDùpC'Ÿhx* "¿[Ë;×þßO_ïŽ[ -¸ÛGþß§'ÀÈŠ|%Ó† ÁÍZuÂ=ICÿN#¹Û·…w72ïBXªÒW»mÐ%‹î˜È®]ÉÕî±ÛÇæ4Ø�Kû†{¬zV·n1/s…­Û�¼ÐæzÁeæ>V/ü¸×§¦!h²Mè�¿»§ï#õü×5Ýß…ÁsW�»ÏBÇ׫ÊÔ ¢õB&¡wÊ<ÅQ1±ÀSå ì <]\Vmàé30=×4EO7&38ð4—½Lx:ˆË~—O¯ž…þü�",”*êQo\RjqÕœÀôæ,ûú¯%f»Ù[ �ô¢vNq2’ ¾é®ýZÜ…vSríò IDATÕ —Ð2’ØŽ@o·bûoýM`ép_d ù'ƒÑl¡ éÄX•!´#¾îzë'⢻÷qDX¹Úw¢³{ãŒ6‘X°nô8…Šˆíüßüë%W;™óÚ>ž¹Û9 Òõð½û©o*P_ü)­_ÿ½²&¡½T©;4X¾òsËŽË>G[õô\v•Ëe‡˜õ‘Ý#\vë44\öÃÀÚÈpB‡q½ Ëe¿b–=Ãe×¹ì�ÀewÃáy¶ÇŒo·®gß-ȘR³dξkZ�Ó¯Xw» æ�à^“çpÍ…Ž‘©ˆ³]ûLÃp2ªêÞ‹Üv~L— D´Êf €æä)v¼7È«±¿Sën'8zše4gîîn¯GDP§‚rm„™É6¼p¡¶qmú!¤À@w;ò¾‡ºÿ=wM )aµTÕoÖ½÷Ô#5ë³3‘1h&¢RTÈhê ?¢õ÷þhÏ\7Õáû5?hÙtP=ú`xÍV‘£Îâ”"HBXÿü׳zþëÚC^lo›ëw�w¯N¿¢±vX9â£brþ$&fh[Âeç®!Q{J8óz‚¿x:oÜþóKÀÒ² <}À³S>³< êžJÏߨçÄPïÜÀÓ2fv�§xÿ[¥�+U*§G½y]©¹�#ù¯_~Æc¶“›zºî‚RÝZêád$” ÐgÎ4D|�i�´Ÿ ‰í£e¸ØÞŠé»,¶ÿÖß4ùiTdY³_E´ˆšàbhиèf�mj'Äöì `zdLŒÓ.ˆ"* ²÷š˜—z­…Ã:&šb;5&©p¯ééTÖË{Ìvþkó“~ýû´8Û‹Ð^ªÔ�._ü†.½£Z„Í·È`Šw—²«}¨CË»pJ\öqŸËþ²ixæèòuÇe¿µ‡¸ìÍ@.û„=v§˜åŽ_=ÝLÊpVjöÃÌûßRêÁgLÄÂrÇnM=×ae*í£dZ‡{ÕÞqDxH™Š5ˆ!SôH*,•rÉi#EÈðï§Nvaøé ORPª"|t²ÑОhìõ›2�mجã(S; æ»ëõÄáchX*mr›°Ö:µ» GÎw»'²“°Ôï± ,µA²�¼Ž5U?²"îö¿¡qíô‡¯ßñk¨:õ¢îÖòððór®Š„Æž7PBùY\|ˆ…Czk–Û> õÜ�i#¼ß¶nBŸùó;vÿ©/üˆÆ‘»a_ <­ó\uIg{/9ǧöca¦Èøöó+!ð´[û0¿¬Ì#Ãã˜òxÀg.ð٥ÀSêê–0zž€®…¾+'ð4âbŸ*ð´ ØÏ0ðt²Õa oÛl�¡?*�§¥J êOoß2!©'3¯Óyáz¢µ5²;Á�ÎjÖá®´¯¡{f�¼¡J†a[óGÄážt¶3—2æsÄvp´ÌÄößüÀ2w²Ï‘“c)‘=´îªL6{"ø4¶‰��cKí=�<‚ª"}òЦGr±“Ÿ%¹Ù½‡˜?W¢»@ˆºÙ½ªäÏ+á”jÓ�×™5ͲIª÷�.b{ÚK•ÚåáòÉÐ8n¹ì£—½ Ž1Á=p$:ÅeGApÙGsfáv\ö‡`˜¡9u†Ë~uÓ ,·oÙao›óÝ \v�æ²ëÓÓ½9‘ÝqÙo\†¾z¶ h¥vo˜ùô-ãzø`i­Ûµ ùô¸í\¬¨ûüv*´»¡§á®vø›}=†»u ©DXjÌxŽH¯™{ò2)ÜÛ0 'C¯Dp§îöŠ fÚk¦”aïÇÛ†Ýî\ï-Ã7QCäÎCØ,˜©»=Ô¨sÌM•æ=VÊGʸ]“a© ¡dTÇ٦ǖ]P×h õôiýý?ÞÕk©zèY�…•.¤óÐýLfëµè”†‹}§�§IÑ}hàiÛw!ðÔëÝ"�§?†¾ôIéáJ•š¦?ÕÚˆíÇOõ2¼�õ‚•¶¾-cØÛvNuÙ9ýDÕÐ7ÁGÌDú­d_EÄRÚkõLÌÄõ¬Ú~~ Øþ›¿dDvºîÖc`d�ìâæv•™�BOÛ‡6¶«´‹=¸æ&6´%N{Pl>'Šê*"ï¨ ê îüñÍÁÈð š!ø˜h0ªÍaÒÂ)U§É·'SÁ„v–Ñ%Ü_êÅohýÆ?¿g×Ë"´—*µ›u„pÙCÈ~$ºªÂ®uT2[Œo= È\ö2Æã²��ùE`å° à~˜P®ÜúÌæ�k·ö —½IsÙ{¨˜ s³.ûÍ«À…Ëë¢Ôî3·o™WõÃÏi¬3îöfbn÷\® ƒœ£d¼�Tâî¦8�‰éîî=s 9†{ÌÙ.‰‹-féàTQdíÕÂÿÃ7#¡ NFØ€«G‚»Ý9„JgÒ9ÜGÖÝ>ÙînkØI78†œíA} »=è^WÝßm‹+™÷è9c¬ÀÞ�õ¦¢¢{ŒßNQ2Û}´†êœ¿ê…׸üéLEbõè5æ–Ìš}äA¶fGÜ]Q—4aùÐê´ð\s¶q7°€=£îÞfX\ƒzö/iƒ™Ù€>óÆŽïOõÔW5N>aO:�žG7Tõ€¶jzGÝàÀS¤ùìÁÀSf^¨ÇÆ�1^°�§‹Æ¼p ÆÉ>MÑÀÓÖ#�§M#cZbB{pÃ'õq‡]B#eòØw+ðtý2ô%ð´T©™‰íG"=jŽbkŸÖaýÒñÛ%£ºû¢d>¦'-Ù7y½!u¹“>Th™d¬ d±±�TÒœq”̱ý7þºÉNkEöyÑ:96äôØ\öà 2L�i ‰î9âz*uÖ—z%àd+¢ðž<ÖÛØÅ¯Dvdâ $¿ßÂ÷—zèY­?ùî=¹v¡½T©]*õÊ_ÑX>ÒGÆTdY±ÝãP@\ŒË.†¡b†\vÊÈ™¿gñÐt\ö×`¹ì.|Ë[n¶—�k·ýãÆç>(<ÏRwv ùø;Jy@ãØ#õäž«#ö|®C<\Îo§";¢{®v‡¡áH+/½*þ& 6Ñ‹.vz=ªžè[Ñtƒ�•«À†\ÔÝ^ŒÌ¤Ë¹˜8y» H…c# ×=•ën§YB\Ïà½@r¶3áÝûÝá‹ëRÈuµ·÷{›„P2VpÍA=õU­ßþ“©¯­­¸>žÖî g¨D�Ó WVtЋíÞ?¡qI—p�Æ1“E`aÅ`f¶,Û} Ñ]=ÿ5xJ}êb§§úêË©©ý�•`àiÄÉ~WOé©*Æcw.öãb_XVkà„í­Où„îž^n¯“ÀÓm?Ä]â¡Ï,ð”a!ž¦„öYž:Ôß&°µÜ,�§¥JíšØ.ær�!dØ5¤5‚ØÏ·—cݹÝ=#ˆ¨È6ø@8j@3�¦R”!乨>TlwgHlÿŸþ`õX6N7·©Èî¹ÙC";éy†œ"‹mlGQm‰õWZg{ëqH\�œ"Œ…¡Æ5dö��…rþù×´�yDx—z~-ÂÌèÀïV¡wRÕÃAÚ÷³TÊN ‰ëžc ˆ»ŸCC`–2á?$”Lï:´¾µ‚¤u¹Ï- ËÆé¾uظýé[qâÿé—Mï³|Tô½lšQ˜Å Œ|.ûU˜0®+·�[×�Ⱦ/¸ì:ŸËÞp.ûmËe·Gޝ|^µRww¨9ó†R'Õ8|˜¬vûhæˆÈnQ2-S5è˜í:w;:×PCD÷ÖIÄSU×*~l—¿Uá;$Ân º‹BŽ#Í‚~²1Àð9`umÀTÝ}®n:Q/(VDÞò?§`]îMçÌÒÜÝ®û›=a�¸Ûc¬úì'îv"²÷‚•¤ %&ºƒÓv÷˜C¹QLhgîö'¾¢õ»üËÔc/kÌ/G’3SRFA“®áL‡{3Æ“6˜S=óÛëмÖ'ûá‡5Ž?0ð4&´§p1; <ÅQ1©ÀSÅ6ƒæ»ÀÓExz?Œ‹}~Š‹ú€wœÇÎO ê`=„ž »xÚÄxì³<½\ü¨ž–*u'{Ó—•Z\Õ8Ä®OîZS ÙNdo5tj‘´sŠ“‘lð<5€“‰á C™@Òç�Ù‰í‡î³y(lý­xJÆ&wÔø—X‡ckïL°1È CåŸó´�˜°®"­Ù�%AÂÄÐÿ“‰áR6RÓs³wŽ�ì ïœ×N{y) ¸åê.ð+‹Ë^1qÂÂ…<.{ïH–´ 2dÌxX:¬� —ýéwÊë0¬ÐŽËN‚¸D�{ƒË®C\vA`—¸ì[ÖuáÃrì¸ÔÞj>xM©ûŸÐ8tŸqT6Û@³`Q2c"¶Ó°Tí‹ìœßî1Ü­È^qW;{¯ §"·ûVÁáBˈ=Âx™Þ×IA©ª»UºsRyA©ÃS9—fã»ÛFÆ ë#4UÇ$ÇÄÜ'R r–»]Út`ŽwR›R1„ g¸·Ìv²r·O{%S›uK½ø �ëÍà9·,v–“’b€g ¶ÈÙ§YÇ裼vÈk)uW–£¢‚ûÈ<' ±\ññ¢a¹Ÿ|Ê„-»ÀSêb§8:è+éôÀ”»÷xTy§ o’¤P1ô6†Ši{©9û\\ìO�xÀ“S^ÈKàéŒO¯ˆ§5J•*uúқוÏÛ�T-oÞñkm‡zºCþ¡sÞzÈ %ô¹ ß#mÑ,Ÿ„– Ší@ß(AÄößþ“�6ÇpµuB`¯„JDĄ̀;ÁƤÖá\óBN¿¥ÒÂzV_¦žr¡-]Ï|ÑÞCÈ™ˆàŽ�¸žêÙC®vòºqM:Ò·véêåŸÕúÕß½'ÖÙ"´—*5+‘ýÇe_ì‡�PÚL¸ìjw¸ì=‘}dÃÂelÀ•ã;^_ïŽ0oßö2—�ºù’\v6¸¹£Ç×/@ß¾U†¶R{s¨9û®yõŸ~źÛÝsÚ²Û'¶ëÎáÞ¾Vê¾Ã] Kå®vøÙ=†{fXjO4pP¢îöŒÛ¤¯Ñè6œKÊm6pa¨Þ§ã·7º‚Íß?Øí[†Iîn§.owÿK}¬'˜ÇBQã�mIw»Ô¸G®¹ª û&wzÕÈH™vX!a²|}œ°Óa­³Ý"Ïš‰eèGìUÆ0‰Y:Ùw²,è)œí±@JAä¬>­"8ŽjbD÷zÒݯ“-#�æúC> çM¸¸¬ŒLàéS0Șiö[Þ NâcÞÊBF2W»Ë-h˜ #Šíô?ªû›öc³^«/þ¤Ö¯ÿþ�_o‹Ð^ªÔ,DöÇ¿¬qßi3Hw“Ï‚.°ï&—ý�å²?4`(¼à]W¶Ì³å�1[Œ�¾×¹ì“—}Ùoog” ¡,UjO6ïK©ŸÖX=aœ©ŽÝ>r(M02Âë§â8-ˆîôè!å·3¡]³kSVXª–Å÷AA©¬I]ñ>ÎFuGc1:!v{{_qw»EÆ´|vr-ž�Û©øÜÀ²#wI+ˆ)•p·Ãwñ{ gLNÃî‰ìd(vÿOëjw[CŒ5î91ÂdÙº5¡kXí‹î·ouB»rZ%\Ó�Ä\`“}ˆk*çùŽ„«=$�J®ã* zZW{ãN¯4¾�ÙLÌs{bÑrÉÀÓŠ¸ÙCfƒGÔEa½ò‡uè�r�sÙ�§ªß×¹�çbŸc�§/Lùðgž {Rh�=o0ÀÅ!Ð4xÚwxêv1ðô¶u±o7¯ï•ÀÓR¥öLOªµÛ�=Ò?ùÌ7íC!©•îz%tëyÅTCm�!ü›Z^ù.÷^¿…ˆØNË‚0/‰ííæùÜoüu`õ9EσOÙ)2U3»ð6møøTlö!)H‡ÌÏ ÄüåµnY;Ðg®ë¡‚{à¹<Ëg "²·¡¨Ttçb»&/•ºÿ÷9éX‹kP�½¬õ¯èu·í¥JÍ¢Ž=â§|·\RÎfÏ䲫�pÙÁ”�pÙ—:.û}0nöÜzÂW:Vèžæ²k!.Æe8ŸÎµq 8ÿAy]”Ú?ƒÍ§ß7GvyXZ#A©Lܨ‚» ?ÕUßÝÞß ¹ÚA®uò—p¶·ÂwHi–Ä_$ð2¡ TyžƒnÈßK­sM¥îv·9Q�;·v3éšÿª¶•ï|§â³f¬d.€‡xíÞßp²>?¢šãno|áÝû½É”Añ1ι¯ ·^Y1»¸íªîîK ÝÀbOñDSǘw,¶ó�Kû�UHh�²´ùÚXùë§¢¯ÿÊn†ÔÝZ^�€ë€ã�pyÌÁ.nrPžy•v¯ ;Äk§ˆ™`�ΟŒ±1)„�ah¥*$¶ /É9n€�øëXÚK•Úa©—Vc9‡Ë^˜ì‘�aH®ó—=7 U粯.û1Ï ÙÏX¿bC[·:dÌžå²'¶‚\ömÂe¿i†·‹gŠ;ªÔþl¶6Í•âáç4VŽw{3ÆN¸ ÜvÔ©#!©ÔÙî„wÏÕN»L…>Ã=×ÙŽ0«}�»ñðÔ^—ªü˜‡¥¢aA©Âµ§ÁDH‡2›·çnŸtB¼&¢|ÌÙÞk¾…ãÇ)a^%ïðŒ¯«:´Nï¸7ôucÿK8î4 Vn}ÐQlßô$좎­ÃCÜX½Á0WlÏÜu`(‹¸Ù•€�QB;ª°àîž«NxoÅöÚ¼�æäÐ5ÅŽ«'Oõ…NH}Ò� <…,DOŒ²°¬)xú€Å).Îë0'ϸ`C<�L|:xÔ10ð4¸8EˆL{ëÇb"{fàé¥�¡/~\ú´R¥ö…Ø~ÔŸ Ýõ¨f½D/OÈ~¾½¼ëÎí®`û.0Å�mðM¤m c âz##ð¹¥ðÔµûŒndsQªÐ&w%h�>¨ ™þ2Í€jˆ¸>à„ÙPt ïÁ¢}˜šBLO,JÇ¿nˆ³=†Ž‰ óˆlìdácøëAx-Ð,-š‹tÙŠæzÙ·Q7ôpÔ"´—*µ‘ý…×f±[pÙkyÁS©à‘]ä²+a T4DÎqÙW€µÕá\ö3>pm݆rÝm.û@'»4ÀE¹ìv€ÛºÜZ7\öÍ�2¼•Ú¿ÃÍÇßQêðI�ã§€ÅÕî¹?b¯êl¯ék�…¤¶B;:g‘˜ê„>Îp§6 þV„ï°&,ÞÖs²KA©�ðT:h¹ŸAÿn¾±W�цÉò¡°ù˜”VX®ÍõÆÝ'ÍÄü ¢¥kàLÝí‘Æ]¼Scîöª�ê¹Ú ³½Çm'0Î鯡ު2×gU2Qª€#«’…XÑÁžq„¹7¸©ü¹­7”qá]÷Ýíˆ0µ2‚+‰ÈŽŠn|‡»ª,R¦.}œ|b@੊¸çR›UþIƒiØë¡á¿'ø“ „š˜æ voi 8 ã`zÊ r4ðô6™sOghÒéžÖMž6ãCfàiÃÝì�ÀS.²{�§·€Í%ð´T©}&¶€Z;®±z<>÷…02@ßÕiçR@*«=tÚqPÏ)ôVpÛÿþaÂÝÇó6x|,œ¤§È˜ÊÇê)~¢O%BçksOdÏÁíån„s1}€Àž+®+•ÓU®è.¨Ø:C§¢cB.ô9CBs{ˆ˜ÄT³¸£+r{-T�yýðþÔ{=Õý¿Ñå~�40×@}é/kýíÿû@®ÉEh/Uj'µ|ÔrÙÝb7êkq‘£G£UüØÕ]å²/kÇ:.ûñÌûcÀ; \öM‚Œ¹[\vç¸�¸Ù=.;c›�$SdÌ-ãÜ_¿ }ùÓ2À•ÚÿÃÍ•ÏÍUäÔ‹æÄμc·ÏÁ]ûÎöZwXHÜv' R��¦ªþF`ÏÝ·‚ ÙeÇysO‡¥ŠÕ� áúÔL¬»½ö¯Eî:Lu*.N*[ð\»ÛÐgÄ]/Iw{ÂñÛÉÅw>ñJGS…�T·ÁB‘2`ÿneÝóƒ „õ8“ÎרЉ«¹ƒ`l¨S‘#½•=8”i?̶½Û¨‹}7{®`Ú:Ü�»ÝÛ6]®‰ÝÕ¤C¦T�\š¡�§±��Á�§��søìÒϯ�§cçb_VÆ&ðôI˜÷ƒ/ˆžnv'ëfxšݵ�|Ú��§·®WÏCöýÒ£•*µßzÒk”Z>lÌmhú׳65”Z÷5t‘  Hd¬aÕ×2S½$˜H -sÜÛ0TÒ«ýæ/«ÇM°¶Çe¯}ýAq\LÂÍ=áÉIÉÙ¹&I _ÄÄ�%°çöa!¼Ë4K…ʸ‰˜Z¤¯Ñ$w Ìä¹Ú“'z‰8ßûƒøÆSÕØþ»ê6³Ú— ×hì’L¹ì7 —½Ônμ¡Ô‰G5Ÿ&«ÀüÄg76ØÓ îuã‹Æ wE\îØy`*j"²KÎöJØ©Ã] ûŒ?€—!�1}Ó·Ý»Ù�Š”»½’¨±¹Ÿ&[&”ºÞ=ôŠr4ÈÝŽ°Èžjà{M»àpWTN IDATÄ-íÝ#Õ{Ïœíôïv.3¾1±qÕÞ�™ÜQ ಇÄv¨>‡}ê#ÊLXï e’ÀNDxM6¸¸ðÞnBiëÓÛgb;Ý÷ï‰Y|Æw°Ï<ð4ÐsP1g|Oä\ìóFdŸ_2§€xÀ§¼ð cWdãɱÛÛÓË|T#ý�Ci6�É:<€U„öR¥¦Ù_þ�å£ý¤oŽŒIrÙÕ0g;Ü£n»� Ÿâ²Íû�£Îàs7$.ûdÿpÙCìÏPøiËeÿ¸ q¥æpsþCsåxì%�É!ãno&&ÌFOŒ#A[Á]�ºdùV4&!©œßN‡7ä¨JNå.w{t—6xbP*"®óˆ¸’¸àu¹Ûß­aÁ°ôZÔ� TÉÝ+¨·È"ø9ÁÍ î­øÜta¢b·¯fãn¹cÚ�uä¨"Â;ýÏšî}–Ê02m˜á¶{"»ê†MTEöÔ ˆ<Á=9ØEžŸtêò†tA`—XíTp ªšáŽZì‡"H*º+"¸WfSè³·�‡Ÿ�0ñUÝS…Ýq)Æk®Ð.ï!;üçJ¥Ø À±q:TÌò‚ <} À´9_ïøÀì�ÀÓœÝ]<õp1Üø0)�§¥JÝKýè­J�ÆÇ o,¶×;²ÒH O3Ô� XÙ5ÀC±‡P2ní‚a©9FŽX?ÅÙì‡O²Sô\ŒÇe¯3œë*� ‹ÏÙCÁ䱓dÒ>P`"®ç dv$%°2)�=(¸#îvÏ6ÅH?#&¶Û羪ä»Ìmfy›`ÌTT768~êåŸÕúÕß=PkuÚK•z�|áÇ5ÖN ä²ó3WxŸ!—]:ââ²¶ƒâ8óNù–˾a8å;t?qÙ™Ë>™¤¹ì·n”A®ÔÁp>xM©ûŸÐ8tŸ¹V4Û@³`Q2c"¶ëî½J%ðÛ{a©a¶ƒLGLhוTC®ö˜À¼Ó T¤ÄuúÿÐ� ‡ÑñØí1wû¸skkŽ“ÙîDxêøöp2ÜÝ®#"ú´.™œÏ)ÿ÷ðާRá�ˆ{ÜÕîøí¢»�Ü7×Îwº#ƒ3šÐ5ƒ£ÊÃ^…ÂðEocwînG†«½÷oÅÖ]EÞSÁÝ>çT#¯©¼Sˆl~ BÅ Þc�§ªïb¯ÆÀxÎŠì‹ÆÅ¾Z÷xÀÊí ÀÓ‰àßAàiTh�>‹ÀÓ†�œxêP~7¯—>�¾øQéÍJ•:H½èö– I=þhÿä.{u!Ó2fº�èV3䯨�%” �èÈøí’è.†¢†NNÚÛÿÞ/«Ç¬Á�j£~ð87øóà�ðRø8ª¸»=×° n|ï€Ï>Uø© d …Ú´öm#‰ï6†öÎäërDöœGå ö¶7×MßL:‹UD›×�»]iÿ­ªIŸ02óâxh– žû1­¿ó/Ìš]„öR¥†Öò‘)¸ìœGö’Äõ$—�-ŠãdBCc=.û-o¸² ܺf†œ–:¹Ã\v½C.û$ÀeßsÙ7®@_*\öR÷È€sö]Óf�~Ecé�ÿ:9”Œ&Îv*®‘Ý ÈThï1Û¹«ä_d×Mÿº)á·ôe8Z ²BÀÄmY†-N¦&‚2 ™w÷Qën…ƒR« Øfá šˆûí51ò§gce¸ÛypjÐÝ^ù×teÓ"·�ü2U##eÜ}Ó¢KÈ`‰âbDÁ– ³ÆÆ@Õ½ÿBû›Ñ�ÄÝít³§'²#"¶ÓõS…wÇlÿô{À©˜¼l|OÕÔƒ‚;XŸ”ÔS›)½ÀÓÊÓ·§ÿ*fiÙ˜ð…)/¬ŸÀ˜.c`àiCð-˜}ài24whàiÊÅžx:!ý<]7y9%ð´T©ƒÛ‹jmÄöc�0¡�™¹b!©•îP{í¼í9+æjׂÈØu�`5rØí6Ɖñ¿þ'ퟢ¯G‚©¯–×ÜJ%Ì}”¹^õÅu¨4Bf¨È]·½Vòö€ŸÅgO-1^vñë9«]û¿?݇ºÚ5òÑ„*çv÷»ºç=Áz»S$O«eµ³ÜòÚI¿0š–¨ëTÚK•Pê+¿`Ä¥!\v•xƒ’"•ËeÂPDùàèŽ>Ï-š „UGÖéwÊ·\°~epÙ›;Ãeßv\öëÀ¹÷Ë £Ô½7ä¼ÿ-¥|Zcõ°°l®!MŒ&L4va©µìp§p×wµrzÕPg;¬ö¬ TæFêÝÆ•vÎo·¿uzÐëZcÅöºf÷[ã³Û[‡;€‘2“m@mwLwm]Þ-·�:³ìýÆÝí¢°žp·Gú\~O@x:w}+ô6�“½iÈ·ØûøâG¾Ð.¡b¸ƒ: A†¹¡ŽªÁý!@K×{<ãµOíl§âzHp'›<½ <ú’Œ‰� WwLÉy ðÙ%ñ>xº`Oç€cžprš )Làéç°.ö‰Áï <"¨¿†£ûfxØu:ð´ :•LÄøpÛbü®�ƒþ´ž–*uψíÍÄ¿öŒ'vøÚéÚŽF á¨d¡¢»â"»„�iºõDW~_ÕË’ÞÛµõðýÖà7Ö¤ðÓ*´Ñ�p³‹ZDè¤}5̰08uF{¨›•BléTxÝYí�EwŽªUZp×ìûc³ØóM‘YAÂÈöùܰ쬪ÿ§+;¿yXÐÚGŠVvæ5!óÒÏhýÚ?=kxÚK•ʽv¾ô3+G­È>Ÿà²'œì"Û,8B5ôrÙ«ª[¨GóÀÂ*pd~8—ý;v@¼qÕrÙ7;÷Õ�å²ßîØŸ—>)\öR÷î�óé÷•Ïk<ò"°´ÌM€f¾¿‰U9Á�¿6+#C±*-7“ºÚ�øn7Í\î…¥òáG£-èÂÓ¥¦~FîªûøÏjO€‹í£ŽÝÞ¥vû¤°�¥â~O‡\ÑXªeá<&¬Chä‘à{?_Hí½Ù†^U�{·Çp‡��qÎÞªŽ¸§s˜¢!ÑVp\õ†2ið‹ n-G*2¬i˜¼Àu ìl§_Ï™íM@po|¡]Uæpæuàô+»xŠ]BÅPÔ_Ý<�[–V�5+®1Ï« >Ä>Öß a7®)Šë9n*>ðåŠê™Ã^ïùJO$hákÈ}¨4;y!� ÐþýOöžàÎ]íÚ-&Q1Õ|�šNP ö½ß�²Ø]à©EÅ,,Ë‹¦_zÃNÿÑš6ð4*® z—}·O›î¤ŽžQàiëb·ýØ�KÐgÞ(ýX©R÷¨Øjõ¸ÆªîLcsbH Õ}W»›Šm¦†R9B#c6Ö;þ÷ÿ>ðÀÓfí :Ù«@à©’Í~ˆ c†dÅñ~³Ù§ A ìCÄui»2—kªÝŒÞ{¢;u°³S�SsÚ÷Þ Û#Á¨_¢û¼vÇj¯´ÅcÚ>a<õåŸ×ú›¿³ï×ô"´—*•S+G»c[#~Z×ý£[)Q=‹ËŽôÐ ä‰î½0¯QÇeŸ[4Û1 ŸË¾àû.o|Êí½Âe× 7»î‹ëM—�…l­_�¾ôIêJ•r=ÙÇßQêðI�ã�‹k>·Ý¥jê\Ð�›] IuX)L‡ºÚ¹ÐÞŠì’³½ 8ÚâRÍh0(UùrH¬æ¿u·C 8™¦;ZÉÅ­–Ý>ñÙínSu²LÓݧµ<ˆæºÛi㯘JŸã áâ{ÔÝN„wôXW»®+aíÍ ðš†Ë~Ç‚P…�­÷Äu)ඇŽQBH.Ù‚{+ð7²ÐþákÀã_Þ…ÀÓÀÇ9|öX�Ô¢bƶOZ0½ÒÂ*°Z¼Þ30y6C«xzظ²óÀÓ¨°ž#´³×ÕLO¹›}�§[ÝGO/ }áLéÇJ•º×ûÐë”Z>¬¡ï“7%µs·ó‚¤2�P$ÃH®^ ¡!ˆ�1^»×3hàØ#}d ×*ÔíÞT #˜ÿbˆ˜B¦‡¸åh70Á|€È.aú²z°öcƒ�~©¯Ñᯗzåös4ô4%¸ w©ß �@í ëR¯¯„Ö3ÃÕÞ3†r| ™çteQ™Î�eô)õÂ�kýçÿb_¯íEh/U*u)ýÊ/h,­ÙðÓ9"²gpÙ«—1.{àØÓT\vŠŒ¡Ç Lèı 8ãfÏ­WaŽ=o\noØÀ.�ËŽ;ÍewNÙ—½idWUï¸rˆË~˾ž{¯¼0J•â}Ú•ÏMK{êE�å#Àü²ÁÉèyÿuçœí5yíò�TPg»mÎÚÙ…ádÚá‚Ëݲ1ÆÊ¨áñ$^&”BÊ4N†¥:w·»k}3! ¹s·ÛMP'¸·¢{Ù±Âp"è¶G›…PÔÞßšhîÁ6'‚%pÛ¥°Ôs� oá²gŠºƒ„v>Ä…Ž/O+ºëÀ÷¤ìL@8T–݇­Ø®ú"»bë²ÇÍwÿWÓ½¯J&z¢ Š„¥e ä*2”§œñõ׺Ø-*f~Ùžº øç¦¼@î(ðt€€c¤ÀÓ�+Ðï¿ZöR¥Ju«áú¥æ—5Ž<Ð]³¤€TPÁ�/Éäd—sâzÚ9ÍŠ dÚ¾¨ÉÛÝûÿù?5B;u³sd =MŸÕCx‰Ëž#¾÷>FØì·#‘}—CP£âºÚ�/"Åg—~n’PBë'1Ú3±1@ØHÛU åŒ¸ÚÛ™‹ýޮϫØW;Úù°™½mqmß_�ŠÐ^ªTì2ùÒO[.û0ž‹ÝŠq٫Э*cCd±BšË6@:Öèâ*pt± òÊ­ï‚pÙíQg'²s.»Þ.;†pÙuœËN‡½IHd·žã²_þ´0@K•Š :gÞPêÄ£‡O“UÛ4M|L@mÑ1•îÐ2Tdwww›çö¦ÍZÅšZ&´kX•–ªáq4“©’»ñðT¯ãåwîb÷¯…uá¥NŒ;”Œû\£:!ÔÃÉ�k¬ô7…´\ÉÝž<ÂJîqƒ½)Ý1Ø�ð®ÈÓºÙ…5;t³'ÙìwÂÍ€�z¸˜€«�Þù6F¡�’‘„wÁÝÞ~LÄö^`­ÔÞxâ+™|üÜ`ÚÔPr°Ûç?Z_ÕÆUUÛÓ~cxú8€§xؘÀÓ³0.öõ‰ �ç�§B€|ÌÅEÇ€õ\Du <Åö€ÀÎÿŽ©O¶Ïž^=ýY <-Uª”ÐÁm®+U�4ŽŸbó#ä ‹ÖñÎZDOCÔ¤…T¾øCi¨Šˆí±“•¬GZ=nÖ Ùëº�§ úBÛÑ·j8:&„»,²gô[¢Î�8BFÌÏ õT1a}F'ƒ|vúÿsDŒ„Œ‰„¢M1¹¡¨ôg+Ùã¡¥pY§9‘™KSG»�Ûš€«]W{c ¡ê¥ŸÖúµ¶o×ú"´—*º¤:.û8plk—\v ¾hÅBO¹èNŽ;BÖ†ŸÎÎè¡ÃÀQ�˜Ï¼S>‡á²_µÃÎÖfwÜÙ;漋\v=„ËÞD¸ìRøé¤Ï¥ª¡×¯–á®T©TKyþCs5zì%�ÉanÓL€±ÝÜÒs¶¡jºÐÏöuìDv‡“A«Ò6k`�©, •o:ê&ìÞA$¨*f¹öÖ„“Èp·Û&µ¡« ¸{îv‚%û‚�¸dž¦Äõ»xºMrq6�‹½ž–*Ujhÿ©µÛ�=¾®zË©Àtèè¨vÞ®csµ{§*©¸n7£%‡ûÒ!_d§ºƒª\LÁåEòPí‡3Ð1R†RŽvL)²ïrªÔ«õ>œa¿¦^ ¯ŠJ>/¶$‡ž–õÄõ˜Øøwïþ‹xÏ�ŠôêN`·ÌÖÙ^„Œ!0¨—FëWÿé¾\û‹Ð^ª”tiüÊ¿£±tˆpÙG;ä²'Ü“ƒ¹ì’èžËe?d¸ì÷a—ýmX.» î²\öÉã²7‚«Š:«ôpá›6²Â̘@/áe€³ÝNp�êœûî³ã³» ÔјñÄÝ^s” Y&€m´ˆmeMN'A¾%Áœ4þ=7MÂñÞ›@†¸c³ý󷺵‰37d3ËQ$íâP7T|×áïÓÜ•:NÀŸp’ÀÎÅu•Gj)V¦ ô=!Q=ùØ =¤KùŠž’`øñ"°¸¬ŽL0ü30bûÐxš2(0ѼÔ‘p­#âb‡Œ‚AÌÌp7Ooš\œËŸµ§¤J•*Uj°ØÞlû׺1»ÞÕšéˆZÎ=u_DEwÅEv CÂ#uüƒ¿¾Ÿh\o b{»–ÅOCF>Éù6Há§È3e´§2WxŸ5«`ú¬ T•ß²õÚ6ù9ÔÔ@Ÿs*!¸ƒô€ªûœdt�Yb;Þé&�t·¿7yœ9B¦�ßl_¦µß›iןíoW{ÚK•â—QÊeo‘1S‡¸ìj˜“=z ‘£WÑ=›Ë¾ÔñFsë¸~ ¸µî‡ŸjaPÜ \ö&ƒËÞÙ·ýA¯å²V¸ì¥JítàyÿU¥|Fcõ¸aÏ-˜×㈽V]X*EÉx®v–ªë�¸Ú›ª/„ÒÓÆ¯m,éУdñ<Ä@‰ºÛáãe 3RÙ0Ö€Gr”LÌÝNp1ÎlåÖ›‰CÇLÌÿ£a—öBݰ?b¨»=SóMáe4]çèïù¸4Rb;E•ÐÁ-ÛÑ.Ma™G“ã�IDtWÂ7„]$Ý&¡cÐx' *È!©°®%WûÞT ï‹F¦Ï›[0ƒÜÒŠ <}3M}lß‚�§ÛDpf­300À� <Íà±Ï2ðtb]ì[·L¯YOK•*5+±}2V¤kn ßhÍ‚èNƒR�±£­H@jÛÏUÂÒÝ 5ùq7»"ÚC%dŒH½NȈ' çIlŒô½rk×0v ²÷„ô˜‹=fvÈDûe­<*¬°‡D}Íÿ¡�¨`¸Ip§áõj£="¶Çúy~ŸiIhçÙXÎÍN~/U¡‡Õ•Ïk¯:ƒzùgµ~õw÷]/P„öR¥èåáù¯i¬.û(Åe�1ÒBG¹ªŒôn~ .{è˜&Gsæ8ôÚaãÐzÀBæ�rÀ;®Xg·70î3.; ÞjÂdwb;q³·\öKÐë—Ë WªÔ,žOß2ÏéWÌ@1ç6ë&þë´â‚»fw� ÙÝÞ L¥.wæ2âÂ{P`gÇ,cC¡ T¤Dy #£üM…vP#׺� ?ÜíÕÀ¤s¸kÒO¶}ÌŒûÿÚ@KÁYDÄLén—8÷48µ'úÚFýÓï…Æw¹R¸˜˜«}�=6Øi¶ù@ÔÖÕöXäâe´ðyAto Ù™ðÎJ4ÀÛÿðôe¦%õÐðîm´#„{Œ*faXž7„Óžâ!¡�§WlÜÁÀSît�¡gž6aß4�§N\Ï <½vúÓ·JïUªT©™ˆí V�ièãýyÕ›1Ùõ û®öÊÞÞT¬u ¤R±�õ›ÿÛßanöQ_k¨b¿*Ž©�‰éQl ÒzELÜïiØ™È>ÄÅ. ìƒÅõ�#„çïC�¨TÄwænçÎu>O¨±ý½÷oéuN»F'¼;LŒ×£é>:F×@5!Öþtµ¡½T)Z+GÍ‹9Êe§G¶ê8—9\vÄ�^yNõL.{UYî(å²5ƒä.û†/4,ÀkkrÙ©ÈÎÝìÛÛ�ȾuËrÙ¯B_ü¨ z¥JíÆÀóÈóËGÍkp¼`Q2Ãås¼v‡”ÁRiÂmo12è„çV`—Si“â¶7‘á×y ßŽ¥&ÂSÅÿÏÞ”SO¯‰ Js¶W5Ò'ðŽ;v{3éwhÉ]䞈‹DSÄ-£rïD¡>ù.qw9'Í¡íÂ� @ ð?Õ”ƒ™x3ȤÇ#‹Q”s ƒ}¬„ÍïÞí€Çy×ì½w2cJŒOÒÅ®dûhÞºØmàéªîð<ò ´v;ð4Kt�°ÙwxJ…õiOi¯5 ðôì;Ð7ŠÁ¡T©R3î?¯_Tjé�Æ¡û›‘5ú×^/ •iè"F Hð1ªé‚Q{nöºïf—Ð0¨ò͈abâz»��¸ÀŽ| ¦†)ú¯,‡{J`†ºƒ{-}¿â: ¸S¤Œànï™\¨�Îï1F»ë/¨�LÈ÷ö"B»†ðü¨X0*íÕ¬¡JƒP5êñ¾tµ¡½T)wIÈᲫZv²W*ìdOrÙ…<„ˆ‘¹ —}äsÙ�×F`?=àNyÆ¡µ~ÙÏNdßk\v=C.» ߺy8ûnya”*µ[ÏGo*u䤯±SkE¹ííkzÜqÛÝ{* W:w{MŽó2 çj—šA~Ô1',Uw×àÁA©H„§&‚R©»�:ùÁ‚R1 ³Û¹ƒ½e·ou®÷FYÖ½cm¢»9Én‡ìÚOºÛïÛ¡c2&¼) ·S…oIƒ[hhË�6FKƒ_Ã…÷Ð@†”ã=…�a!µŠvÒ÷•Þþ7ÀÓ?ÐSî¶ÀÇÁÀÓq‡Š™_––º~OMy{Àg˜AàiÌ­�ÏÕ í{.ðô2ô™×‹À^ªT©Ýë=7®*5¿¤qäsM›g×a°>G¢µµx‚�ñ¼®?•DwÁÝþ�þKëfËlö,\mÅz—[“¡K„Œ%=‘,`<ä^g+B·å„›cÊ~lˆÀ¾['‘É. ï™lv0Œçnç(‰¿žˆªedLˆ×î}Bè§5{nzÁ¨ºË4h9íîtsmYí‹ûîZS„öR¥¨/ýe�ÕcŒË?U!�}§\vµ{\ö#KÀQ 㲟±o×—}³sgÝ).;2¹ìM.—�¹Û[w•sUmÚæ àÊç…Ë^ªÔn<—?7W±S/j,–íësÞÜF¦&ׇ� ñÛÝ Óêç,íÞsô°k©nòŽÖê�øŽ°ó½çdO¥F‚ŠÐô�í\X¯GÝýÂÝí^PªûÙDlw\wçn‡ê6:y_í æ�ã«ÜeÙ£"²>z3"´G01Cöœ®Á!¨*úat_’‹�Šèˆ¸Ù…¯—v|8v&ˆ�‘*!cßÿ__øÄm)TLfàð6ì IDATéØºØV€Õ± <} æýкà=„O�‹=xšÚsD÷ÜÀS÷8ìZàé$Üc%O7�Í àÖuxúAé¹J•*µû½çæ†ÁžxŒ]Á›Ú�+¶äµdM|Ê×Òƒ(Û¿,23»;�è� Øì¢›=¢A@Å5‰Þ{A ç‚»ÔäÐ|½“ùÈÙ§ ¤�¢×ïT*2Øì‹ê´çöÄvúù6&–³Ôk)ucƒ íîßZFÕÜÑ®‰«�iZŽÕþÒOkýÚ?Û7}BÚK‘ýø)�§~°ÙG,€¤—ø�b²ïA.ûQ×VîfàEßpå–€—½›;ÃeQ2!&»Îà²Oº¿Á‰ìÛŒË~kÃpÙo\*_©Rwjè9ó†RÇOiyÐ¥v»Û,s™šmºµ÷º;vXIa©U7µ¢ÊoE‘=ÃÝ>”Ì1(›’áe ñÛÑÿ{é5³"îvïv{úÉ ê°×w5& ¶l[„ :w»‡“!?SäÑç„,é¾(�rµWΩ% —1û.ðô¬‹}Ö�§š ß 4Œ'¨ïåÀSËbïž^…~ÿ[¥ß*UªÔ�í;]HêñSá|‹šo.K(Ý-w°ë›s³7´_á(Û_þÿ}¨�«m3áT‡½ h !LŒÙÎÅua­žÊ(ˆÈZÎû¦‘}ˆ‹=„ù õeEõ¬ž B*ÿÝB¨&¸kÒ÷ÂPÃ�'¶“~‘Šë1Ä ¤~‘nÀß  ³I’åÏ÷†ôs–Õî ¤ûÌÕ^„öR¥ÿ 0·d†±Ñ8Áe¯Ã)ßC¹ìâBÅ/ü¹ìÔ½5·èsÙï˼?nÁpÙ/j`㪟{\v}ç¹ì:Åe—œì.û$Äe¿i\i?.¯‹R¥îôÐsጹÊ=ú%�åÃ@³ Œ'ÀXØT«JF7BHjÝž[ÄŠäj‡pâ(Æl¯5Sõx)(5*ÐÂScædú;6N†ž w§(ëÞ¥:v{£€Zuª ùœ&�ëˆ�=°1a=çX« .S7;Î-ä J¢®0Ƙ É£È³Öai ÷‘ˆ}òÉB¾fYÒÕNvûüSy®T6ìʆd½õÇÆÕž<>ä9*†žRTÌò‚é‡pjŠ»[ <ݸBP1»xš�‹É D`�‰ë³X¦RA¨L¬öœë¼ç#ý³€Ê{ë�‹=”t aáLvÍNXrÑ]zÌ$| ᵇ\íº‹ÿkjãjÿâOjýúï¡í¥îéR_¶\öñ }LžgùšÕžê«I;HDw”ª`ôo}l€•ãÖìgõ*ªW),mè×±3Üìèí— ZE®†bw‹œv¡ÇÊéóÚ3ú4•Û¿%4…þó¦÷ Ãf„uDP2CÄv�9C…}!F{Ï`Dxqµ{¬vÖßUÖÕN© ã9¨§¾ªõÛ²çûˆ"´—º7Eö�j<ùÕ>—�³ÙU.—=qtkæ\ö*Âe_ÖŽ.ûÃÈç²_‚á²_Þ´\öÍÀeo+4Àeߺe†¿— ¯_(Ã_©R{iøyÿU¥|Fcõ¸e·/ȯy–JQ2m`jå»ÛQš¤[5 â;mÜ©5)…”a{R•å '{Ìß–ÃÉ ÛPàÎÖz³£­èî6o5JU@Suëu¾{ÜöÆ‹Ew{àß’»Ý½ÿðõÌðÓ*pJL: Ì#�bÈÚÅ›Îvú·ÈS<[¼Œ„– <Çø¦OÖªÉXíÞ¿Ñý;vÌÜÃQ1‚ž. «ÀŠ <}ùè— DÍÞuø{ULt�pÙ{üvÕ7­$Åv&Þ{ýœŽ øŸ£‚º÷{’¾Ýk3\í=V»fœvŠ´Ù;«Ç÷Åõ¤í¥îÍ:ýes¤xä˜h.{•Ëe¯äůwt a2—‚P rÙë.$bå¨.O•ΩMöèX.»$wÀe×w™Ë®—•wœ™c¾øQy]”*µŸOß2ÇzO¿b�X“ K¥b»u¸÷D)Îo×ÿ²×)R&€“ÑäHã� TêèÈq·'�ì¬1îítrç H­:× Eɸ�Š»]£ßOTçnoT”ª›ŽWŠH8çw»ç̪„õ7~š‰�É CM tAQ]%f´�Ú£N|«>7Ã7�: .hH8*Û¿û¯€ç¾–p±+r’�žÎ-K«ÀL6Í—¦¼èdžR<éY²±/!qx*~|—O©‹ÝÖKài©R¥öIÏyã’RKk‡îϾ5_‹y@*Yò(B†þûÿúï€#£_ @Mõ=‚¸žãfW 7»J8ÛEщðÓD¿5µÈ¾S�=Õ»eŠñƒBP¹�Íp2ž ŸÓÞã¶s±}>{CÛ?.¼ƒ} GÜäºÚ{EU“n^/¡½T©½XêË?o¹ì SŸì|¡Ëà²{¡"‚à® h òA.ûظ¸–ÇFFh‚Œi¹ì—fÇe�¡Ò¡q§\và²7�à¶"¼PÊeÿü�‚Œ)Uj/>îXï#Ïk,5¯éñBÇnoæ,NFûH„Œ��³Ý ðŠ¸Œ†“ñS¹ë§2מP.@Bîöœ<Ê^)¡ÞýÛ^¿)»�ã$$w»ÛÌÕ„ÛîDuŠ’QVl§\wÍÝí‚è;ÄÝþÁ·åãÓIT 2Spq˜‹…m!28fNh!ǻΛá’{Ltÿr­ ™˜¾ý¸ê‚y=õ�‹íøÎÏ�=v¡ÀS‚ŠYX– *æ1û6´&0'ûfx*¹"žFøì=a}ÚÀS.°Ï ðôúèO¾Wú«R¥JퟞsãšRs‹Gô¯ß=c½nó5Ú±­ B†âZ\5:D=²zC>-/ �Ãgg®bd¸Ù�>† ÄÚ6ð½ÒÏ�…Ò{?#SdŸ¦G ö^³ EÕ·©„è. î 'ÓÔ‰ØîqÛ§;dL¯I$ÿOp¦ _®÷{†«ÝCÈ$ÄvG˜°¨äýŠZ„öR÷–Èþ¥ŸÒX¡\öQÇe¯#\vïß¹\v5.{ošsÙGÆÍµ° Y6Ș!"û' \öõrÙ�A\v å²ë>“½w´Ù!cì¿·©ÛÊrÙ¯ž+"{©RûeøùèM¥ŸÔ8~Ê )Nð5€ž³×ޱå¶;ѽ1�‹¨ O“bdt'¾;a½Ò¾ø‡Š +’ÈžánOš J…N dt_ô×è‡ÃRñÍáÓDvûÈâb˜ ®*–Šm+Ä£s·‡ÂR�0"Fr·¿ÿšìêB¦«+~:ô¨rT\Ÿ%:fØ,—%°#%²#Àzç=;Ø{U%Äöb°­×‡YûhÎôrs‹¦ÿY³áï_€q´­©OÖÿİ/ÀàÀÓ(6&#ð”þŽM#œ œ6ðtÂö-‹Š±'o^Î}õ\é¯J•*µÿúÍÛ7ÍiÊ�ɪîZ]ÿ¶·í£ ü&"{cû¶ü_<ÕýÜ)Ë*‚¨EDSˆ!c<£á=“Íž#¬BÆ„ú¨Dàê ‘=tòPj°„¢æ©NrÃÝC˜÷õœÝθë1±]‘ï‘1¡�"»CÍÝìlx¡ØI`×NçâøÕ9ÛÝ<2·¸ç¯!Eh/uïˆì'ÓxòúȘ—]I{ŠË®rÙù^É‹—’¸ìŽK:Ì/w\öGä2_†AÆ\Þ4üÌ­[Ld×;à²ëa\v=k.; ?�l‘}‹rÙ/C_;_†ÀR¥öÓðsåsÓržzQcù°° 4ÎÝ>×GÉÔäã˜ìŽCî02 øËÒ]íî½îB8EŽ»$Àsá›ö Zv�x 5Â.ð˜ëÄ+Çmç/½�lP*´ìnWÖÕÞ�ý·FNœÏp3îtROŒ 8§%„NPd9Û¾Mb²ç8¨rC¶¤õ}êÙM……uégéÈíƒ\킸û=>«EŒHo5@c }Kìd_ ƒ€Y ×Íâ·‹š†d DD ™R"{âç*„ÿîXƒ6U0ªþ©dÑ]+ApO¹Û%îz@l—¸î�ÂQGÈÿ-lx�½"§Ài×´Ÿ×>ªÓ™-4cµ�æŠÐ^ªÔž©Ó/û"»s³‹\v‚ª2ŽqMËeÂPpå)âìò�1‹ÀòQà “4—Ë~æˆ4å²os.{³K\öf .»ŽpÙ›þÑfÌÕ0dÌö¦å²_.ž)¯‹R¥öëtæ ¥ŽŸ2G{V€ù CH5�£½ KÕ>B†óÛ=w»c¶»¦‘rÛð¦&k·[§kܵ¤€²ÏKNvïká©ÞÿSu7¶ŽòNÆ1C)j§e·×ŸÝ9×ë±ÅÉ8!~bDûö²OÃR3ÝíJ[7{‚ÍÄÇ ÓÕÎn‹ yIwû€ámšRõ\ ¤BðTðt®vá9DZ2½ŸA…uZU\lãŸ/ýtçô«G&4nnÑ¢bV€•9Óû,52ÎË3¡ .¥}qu~‰äÃq7;ÑPÅ™ìÜ!N{Ú×H¨A,"¸Ù%Ý‚7,„ŒˆŒ‰õ_jö"ûŽBQ4kY¨èsÎCîöž Ž°¸7e?�›Å^Fù�µp_j1`©ú9§=ˆŽQdsw²Q}é§´þöïíÙ~£í¥î‰ê¸ìó–‡6f;ç²×�£[ /¦yϘËÁÉÞrÙ×€ã#sdz2æ×�KÝP¹½›\v½C.; 'þ[/ ‹ †”ËŸ¿]�1¥Jí÷èÂså|ôKˇ�Ãu<ÆÂI˜Ê îî6"²;™ ϯ¹í-£ù°"9Û«„À®òR“Nv!<Õû††üçn‡€“!ùaªTlwîu0GŠc·7”ëÞt›®º‘Å\þw½÷­a¨QQ=‚ŒÉAÇô†¯À�s>©.9Z#Ôe³³M�Á}ÈóS,ûÜQM¾Øîú4wzoΞ.®<ÌI/N9Í|ƒÎ žN¶}Ñ9xc¬CೇXë&´{ÂúnžN|�Ý <Ý´.ö+%ð´T©R[lçF4°kxÍ7YíûªîöšÿÉk°1up²KýM•ÆÑ*¦)¨@ð¨ô>Š�‘D|á~OËÀôȘ�ˆì)^{'“Ø3N&êÔ 9¨`¦AÏÛ%\ŒŽEÈÐÙEÂPÑm•XíZûÏÍž»AN»bœvÛŽ÷6>¦í¥¾ÈþÅŸÔX=n¹ìó]º·—ò] à²W3â²#ŸËNEvÎe?¼b�1§Ü)ŸøÀµÀ­;ÅeÇîqÙ‰ËN�W”˾\+\öR¥Ôôá·•ºÿq�C'�ÓÕ]F“ŽÝ^� ·]ËwŠ‘¡No'D;GxSE‚¤Twì‘ Ú„f‡‚R£ ÒNv ÁpÜÙßKݱw·üŽ¡”ªŒ³]Uæ± \÷·Ý¡F¨»}G"{†ÐN‡²(:&2 ¶Ìa-ö)|ÆË?¿JEuú=C]íOÉà׋Á¨9b»^ý]à«ÿžéß*Æžž‚q²­ 2ïºÀÓõ+ÀíiOsudºØ‚{OXß+�§ëÀõó%ð´T©R^luè>íÑ4ËàRuíŠF¦Ú!»Û«N¦ÙÎö˜€Êñ)Z%‚RY°‘€„>r†óâi“«4 í¢b^ÄÝî¥Ú?½›ut¢å Õ¥¶×ñÀ]ñîŸM'²ÝëtŒèhç·ç pC†µÌ%HÅÔlô8¥d‘>ˆ�ÑþßÜÈ5†FÅ‚Q“b»b¢;y=ýÉ?¾ñ×€Å`ÕžÞ{†Ë>´†ž6M?L4W@ßÕÀÓF>x·O/œis3J•*UêÀ÷šWÏ)µrT÷gY°5@˜a\¸5ÃÖ* GÝÏ£A “ù5*Ö˜¨p�Òs¯Dõ .9åÕ°¯éýüûLQ‰ í~–îZ¾ù×s¡\ÛÁCá¨2üÿ‚ÀaGÂÕÎñ7îï s‡öEõ:� ‰¤ úâOjýúïïɤí¥v¾ß3v¸˜ÖÅ>%—Ý b acè…3’ÎÝs¹ìVd?ißrj†Ë~†Cz› —9\vìC.»CÆÜ¼ \(\öR¥ôôþ«J=øŒ9É´°bܰôÒã¶”Œ&ÁŸ-£œø"°K�©š Hðv +,FB©$Ž;]"BŽô';0ÐÝŽnCÁmB„Üí4\Ö‰è˜t":EÉ(+¶·îvÊmoÈ ¢…Íì¡"»äh’Îö¡»R a]Å•ôÜñ ÄóWìv‰Õ®ﳇ�!Ÿ§î÷�"d²ÅöÊü9Bfõ°Öðü”†w`Nó]°q'O3p1üë³O›DðéŒO'[À6GÅÜ2ˆ�õ+Ð~»ì¥J•º÷úÌ—”Z\Õ8|2œÛQs�]¿ÿëÀɧº>J:IDЦz®ƒ ùoÄmÚËpC€Š¹ÚclvþJÿïdLèWŠù›‚×.ý©fM‡~–€^¡Âv�á.˜e‰íJ`¦ ©¦=ñ} eÏÕ.0Ü¥0T­ü¿Ob´ë”Ø®d|L52šØ­"´—:°¥¾üsÆÕH¹ìµÀeW!.{äØ:r�1tá ,F*cñr¿£ÙÇ Àâ!àøØ8»†�~–Ë~™pÙo›�Jï.»–ÝìÞ°È\v*´;.ûÙ÷ 2¦T©{aúô-ÃÓ<ý °tÈ æJ†‹î#¶)(„¤:¬LÅöž«ýÁFƒ�zÊp¶s7{Jx êÄiÙµÏJl…nÛHÁ‹£#Sqv;|!½YWÊ:Ì |w{CÄËwÿ´¿±=XdW�ì“g{bpS�ãÖÁmÚ³Ç:=䉬v Ñm$°1 /t·X2ƒÅvzßE2ÿø×€ÿæW�‡¦¸džnû"4fxšóñ@&»(¶ïVà©p*°ž–*Uª”Yn^Wj¼`BR)Ú‹Ÿî¦ëÃÊ1ƒ» ˜ë!ÇzCôœTÚ#!®Ë‹Âz–›=€‡I!cB½rDöˆ9BtºçŠê�N…„÷;ýž)Åvé½Äk÷01ªßwÒû4èÄg½§–æfoj4Bñž×L›sóF½wñ1Eh/u0EvÇe/DÜì•d«ÇeÒ¿S\v[ð¡§¡äî^ø© [\ŽX.ûcî”ÏA¸ì7ÌñßvȤ ô»Éeo.;;âìqÙ–'²['û¦å²O¶Ê`XªÔ½29žæÃÏk¬5"Òx¡c·7–Ý^é%S;ᘅ¤¶M1 Á\í ã9‹$¤ àÖÅë•%´ ØñP䥊®vWvplÈ߯E¾zäcv »uK§ m¦ûÙ©j¤L¼ýÇ\ÒiÑ1ˆ¸Øw"°çðÙUÖMÑ/�xþüÿÊæ´óc½Èç´÷žcÒï‘#¶;܃³¶Ï½_ù5à·uØEà#¸ŒéO¹Øc¢û,O#<ö™ž:ôÞ:°qú½xZªT©R ·nSljÇÌ5xžgv¸�Tû sÓüTÒÐ7 H¦½ ˜áÅT•óUXtÏùX…„rÈý˜äš)²O…’¢˜¡%ë äÀPOpçH™TjHlGÿs!v;ÿ¹Þüsµ#ðso5ÃÇ´}!á¶Gõ6¢ÉUP� žÿºÖoþ¿{®7)B{©ƒ'²?õƒÇ±áYsŒË^Û”ï*Áe§\¨.;2†}dˆîBèªÇe_V�dÌCV2ï”k°\ö-ãFÚºe†§É–:šÝá²#—Ë®§ã²kæÂrï9GôÆeè+gËpXªÔ½8}ü¦R‡Oj?,®v×�Qc‚R9J¦&ךjÏáîádhxheur˜ÚâÅ€>Ã]r¶7q|LŽ&Ë�ìS¡dèß :73uók”êœÿÜÝ^×*ÆcÁ[v{£ÌãQY±UÓM‡Œ í‹ì{L`ßQ˜Ö–"% p:"¼÷DwD‚Qµï0×ìrÎs'×Íî‰íô÷\í¹ô‹ÿ5ðÛ+}?9LÞYÛÿllëWIàé–Àboò]ì’¸>(ð4€�OS˜˜Ý<½lÞ®]€þ以�*UªT)oÖFl?vJžukûþ_ÿ6pßã}lŒªÒÆ=QL§Â;|�=‰�>/†œZ—�IÐû\è¤GŠ"cTþ× à¥ÏOÛ·©P¦Ù:Tl§®õ€ðÞ O‚Q£®v©_D_`÷œòLاø�Ñÿ¶^_Ï7¤¬F6·°'¯ Eh/uðêÈF�Í5GÆŒ¬ÀΜìRð)ÝeFdÁS*�x�0—]d›±�l‰Ë¾r8à~dÞoÁ›^§\ö­~à׬¹ì)l bÎö .û„‹ì—ýpáÃòº(Uê^„lXŸ:õ¢Æò`ahº TŽ’©éõˆ‰ì½°TMÂR+˜JŽCz£Œ°TOøæÇ+‘÷ž6Ø©Û<´! ˜ã¶ /½f'ÝíèPì•Û·¬ËÝâdÞüƒ@ÒP‘=ƒÏ>ÎB\Ï,>;†!e¸ÛIßU$U>…„Љ ²Í/¤WíM‰í 'x pÀ˜ÀÓënÚÀÓÛ7�K{ªÀSAPÊaß�§[æ>Úb�§?†¾üiÙK•*U*&¶ë‡| k;È�)l ª~¸)×”dŠ� ô(\Ó•d)'&òù”›]ê«èÃDá_%DöTàjÂåÞûºè�Ýÿ\tÏEÄ ,ˆ÷Äv0Á<…�A˜rµ‹³ ú3„þÎÞï@Å~D…��Q!3ª}Í¡½T©Ý.õÊÏi,‡¸ì£j�É^Åàä¯�ÀR“¾Xj.—ý؜ڟp§¼Ãe¿~Ùm2.»ÞE.{粇„u)ÄKä²;±�y¾m‘16°ëü…Ë^ªT)Ó¶žyC©ã�h;ç IDATyȥγÌ1,•âd*†“¡";Aʸ&¹©§ Åb¸õ#eTñ¢3„\¤ñ2Þm!Ýï¨Ù&È5¼æîv‚ß©Fæ~†ê‚R1îÖÕoÿ^Ëv·BPsPgÎh×yƒçkª„èÜ{¡¨è£a¢sÜ@±½ýX%„v²1õ‹„Ìnžö\ìxªeÄÞž<]Ö/—ÀÓR¥J•"¶·ë [?Ö6F0ô!tj>ЯOÍAÀÆ_ÂÆHº7º(ìs­ƒõ@¹}RŠ×ž�’‘ú¶˜3^Ez6lÏz}–ûXsÑ=§!±=‚‡î)W»ðq/²“]ð%�¸Q€¾ð.öþ•L(B{©R»(²¿ø �µ}.{EP+'9˜ø�Éd�qÙU—=°[ǹì +ÀaËe?=àN9 à}W×#\öæsÙu€-㲇ØìdPtnö­Íî¨óõ Ð[›eH,UªT×ú^øÈ\‘ý’Ù˜�_Æ`L®;uC02#r­YÁ]vt+$K¢; M­üá¨u¹g8ÛièS"g*(•6Ç¡ Tú»9·IƒþßÛnH4fý¥®öÖÝ>B†j¹ìî—Ä'�¹È. a³AUá�LÑsnV‘�þ�‚.Fû©˜àÞ E•Üíšñ;Õ Ävé¾BQ¯�‹í×¼ àòOuÄXÔïhài@h—Üì3<½\ýúì{¥*UªT©b;¨µ«�?�ç6&•ùÆuvÖ‡¨?=ºq Y|ŸÓÉSÙ4‚�Ÿt³CʳQ2±ï� ì*ŽŽ ölÚ7?(Atï îÊÇõyÂõP±]âµCà²+Æ‹×a6{Ï¥Žˆ“Hãch6s³ÓÇAóžZ"@tô‡½Èi/B{©ƒ!²?ùUÃß�£"» @unv‰Ë®.{h×LØÕÝ.{ݱm—}ÍrÙF>—ý: —ýÒ–9úä²ë;Ìeod7{bµKÇŸ…a±EÆÜ2ÖõËЗ?+Cb©R¥ä�èÃo+uÿã‡NšÍL'D�&†Ý®@�mXjã£d—]ÃpÙÏ!ƒËÞÜE.{ÓH\ö ã²O˜›Ý‰ì7Í }¾pÙK•*•¸TZǦ:ý²ÆÒa Y"‚û MåÜvÆo÷¸ív­iÅu-¸Úù{IdÏp¶s12ûîÞç2ÂS[¡•›Úÿ¿B'¼Ã¡d´ÍFÜí.(õßüï;;96 ‘=kÈ ì*ÆM —ˆ ©ž�d{¨òxÌå.îRVÌéÞ{Nqw¼N5¦_Ë�_^ r®Á/þð·µxº¹nNïí4ð4KtÿÿÙ{·`I®ëLïßYçÖ§ûô @@Å‹‚)j$ê6$%KcMX3c;ü6~t„Ÿ=;¬ ¿;Â�Žðã„Â3ž°g,™3’Æ3ÒÈ”@H€$.Ä…¸öíœ>ת\~Ø™U{¯½ÖÞ;«êt×é^DÅ©S•••uË\ûÏ«Ôð4|l›á²ß͆§RŠ=˜ø¶5<5™L¦…ë˽Î�»àý7Í¢1š? %­s|vÎeMwC™Ü bcxÝR4Þkš‘*]EÔÚÚ¯¦7O±Nê(°™‚Q=–1Û¡5HE†×ž¹.¦ÚùS ÷‰MQQ‰�ÑÞ2�Ï>}~�νŸ7ÚX¹}€í¦3/÷•¿ï›ÛM‘1k22¦O‹á²»Z.»[ŒËŽFà²oÛ�kÀÃÆeÿ€wìÝôÓ€ïK.;0ö\Ñ=àã·ŒËn2™êD¯¿àÜcŸ#ì\óéö�­x_4bÍR©íL¿!ùí½ïš™_!eB´Œcƒ¡î˜@­’ljXÏ8î.gˆ²B½ºy*ôðÌ4ÝŽÙkëq:=~§Y› *¤t{taÅw8mZœE†9MöŒö¢Á.Û#}БÉé8)yä‚Ûs¸˜ég! öréöÜwLBÑ(�U£ë ‘Säµ™ÿáŸÿù_Ùð´E‘îê’Z Oûí\¨á)K°×4<½þ6èº5<5™L¦¥Õ–{έoÎ]œk°1b90€ÏŽ| 䠀ˤÖçÆÆ+rZý͹&Á.ý-õâÔÃGx¯xœé�4 ¯Hu ¤Û™Ù6I 뱨øV2ƒSíP ~Ô7E�®ñ ëGŽ®3ó#“ŸëPÐ1APu´zœv3ÚMgZžË~�qÙ×™É>J푉>„Ë. ö—ÁeoÜ 3Zó¯eëpyÇsÙnÀ›òb.{4}ú.sÙ±$.;I\öqÊe?¼ãYGû6X4™LÃDï¾âY=ý`û’?¡·Ñ£dBÓ�ázƒ�n»ã)÷ÀXNw® ÔÆ�b²½Íãcj¼Û!Iv5Ïù혽Î(ÝNßž¥Ûÿã?K™ìÈáÚ¤Á–tÆF;€Sk„š3Öçùü.;ÀIÀgÐ0`Ÿ³„’É™íÑ÷†ƒ�$Ã×!½¿.¸��Œùã?~ëÏÙð´ÖPÇrž–8ìÖðÔd2™î�Úò䨹+�QüCߣ§QzÍHuôp�ÄUÏ�ð/Õ/5G„Áؘ¤xÖ3OšB}¦ÌJtÌÀUgC‚ö„X�F¹‹ÑìSžn'Ýì2Éu!3(ÕÅÄGf;2ãŠè=§´ù*_BŒ¤”^O’ïÒgµº QÍh7�Y¹Oÿ2áá§<^Eä²÷gŽG©‘ÞH\4W™`GfÚ:d.;€*.{Ó!c6Ï;ydÌãv*ß”=t\ö±O(Î�14T§Ìe§¹ì¤5? Lö~Ðx¼o\v“É´Ø€¨odõij„ Wýþf}kÆno;vûh=hü$¸‘á·O›‡MR£T;ÿ+™î‚ù.ßZš=‹’q1ò#,ü“bœ„QV;[a¼¶0õOAºýoþ…Þôt06F›EÜõF¨®&Ù…ù|öèlv 5Ó�rCÔ Ýî\üqOW[0ÛÕÙÐÓïâûì`ɹ`ªñÑ~¦ái›I±cñ†§4µÇÍö{Õðô8Ün¾zÿ'V3™L&Ó©:në,Ð× e†K½H2µ ¯'¤&r#Sx¸œ)/Õ`J=SÄÆ°ÿ¥e´")k¨+,ö$$)µÚ¬�éNq­å‚ºÁQê›ðY¢|a΄¦Rr=¬«ü¢Qϸð">&x¥PFiݧ]¼ÛA  –jÁ=÷ÛD/~kej3ÚMgWW÷�B×+¸ì“½™‡Ë®5 É4CÍ™ ýY¸¦K²oœÎ_®xÀcÞ“)—ýFÇe? ^ªe¥¹ìÂàq6ò MöbáÃ7ìwa2™½ý’s—õM¶ÏíÌö¡k­o”Úv™ÑÚ �ÒïÛ¦ wÆo�Òí!³=L¸KSƒ{C±Lma0&±,i4O£T -À“uu¯…ÚôÄ?6d¹ì(£Ú\©ªò8œbb°ké°Ç!&4¡CÇ:4È!¥×»ëQÓªŠ†¨7“5Û3ÚKü÷©éí SÂó½ÿÿú��_üýå7<åI÷Skxª¤ÙO±á)^ÿ[Cì™L&Ó)Ë9Gxä™ÙŒú¦É`c´AªK¸Ç ,ï„ÚF;¡-òÙs…ˆ+ô5uOqã2÷%µ÷^Â÷„MŠ$QÔBíÐßÖë¹áŽ´L‹k'¡SMë æLŒx¡ÎOª ¢¦¨€Œ�ôf°bf§= 9%)/4î}¼µÍ•úí›Ñn:›­¯ü}ÂùË.û(c¬»,‡Ëžœm¶i´æÏv¯oç.×6½Ñþ™oÊ�á¹ì»7}º«O/�—spÙ©‚Ë.Lƒž„S »Ë”ËÞ%³>~Û�&“ii¢›ïù=ö“Ïù> [c Ýš5J%Æm…û¸Qšp�ö†³�ùàd(("s½)²Rº˜×Úµ�R‘Y>J¨ÛÙ'úDÀ÷þT8¹ÍAá±Tkúår¨¶%˜ì®†)šcµç˜™ûÅÈ<ç²#ܸ¼á^Íg¹£.e°‹Ivbé$èI¨„×NÈíá÷€ðÂÿ |éwï]ÃS‘¯™íw»áiH8Úv?½ý²ÕJ&“ÉtWܶ�›—™1Ïë˜êF¨¼.ÐÌtÁ­ ”øìü¸œ­mJØéa.³¥z+×ĵÉôåã8¶,eê‚ÖÅ'ù]8{ qÓ÷¤v’ÌöZ„L©°Ìxñ6u01à.nÔg8íêká5_f ~n£Õ²¶Íh7�9¹ç~›pñášìNHµK\vpã]h€Z3}}n.{3;ArÙ¯`—ýC¯¸µßqÙ�ü¥=M.;ÍÁeÏ¥Ù'¬yYL�>¼ãއ{6p4™LKýôEç®}Špåq¿�ÞœÄ�š£f©kéþ¯7ÏCŒL˜lï�w4�GÍ02RÁI à”T;ÖaTgÌ÷E¥ªµxp‚·%à‡^è…¢LQ®f´¢ -Ëo–Ò 5k®»Â`µb°}1Á>dš¡vwòô: 7=„F§Ï=1Û‘&Ù‰F{x»z»jI7Þ5øìû4;„Yxµ)v�î²Ùs‰öLÃS‘ÇÞ×D´Ü†§ÇûÀþn×ðô«•L&“énic;ð"ú�DY"Õµ�PsÇNá¾"½¦>QÏ“å9£>Û5Çf×ÒìÊÉ‹Ä8|Ÿ&`}‹žPíÒÌ5'ͪk1Å@&AÉl‡ŒpÌ™åÕ¬ö�ø˜Òz³·ó”|Îøg³rXCT^þ9¥9êjqÚÍh7�)¹g¾JøÄÏ1“}mÖH4—fÏ6;­à²‹gÒø�m(—=0Ù7·c.ûÅÊ7å<—ýã °ßsÙ�f¯•ᲓœÎÊeŸ"c}rÿÎMÐ�wmàh2™NMôÑ[~/ÿÔó~6Õæù®Qj°?uû»ßÿ�f ÷iÒ½7ÙÁÒí}3Ñ N&1Ù›ºAQ’î� ÿ9¥N�Ý ¹ÇÑýût¶犺 &¹eÒ KH@«&»Ö<‹�W¡*dæLwÑp›–JÍP¥Æ§H—�SNùAa´#MºG5KÜG³&4F ¾gßÿðì7–Ðð4—bt£½Uj¡EžN„ÚHhx:�íw£bîܽa OM&“éî»më̇@ŠÊKŒeÅSHê�¡�P…û]iy%¸¡D­yÞêÙ~¹ÍΠý¢Ûs hÁ`çRz6ÝmQ}ÏŽå“IW�´¾&i[V»)f{X£QSH¶Óé…¹‰Ïƒ7ü{(ÕuáGA”4NuÂsH¿ ûÓ4«õÓ·½ŸéLé¡'ü™áˆË¾63Ûs\öF1Ýk¹ìB�ªŽËŽ—}ØØÎ_ñ¸˜Gá�öZ½ à}t\öý€Ë>^1.{» —½Hž„\ö]àÃ×íwa2™îŠèÍï:÷È3„K�“ Þlï¥R€“i” ÉõÞpw=Ã3Ó¹†©.E�õ¼sµa*A下év¥°“ì™t»X¸gøÑÀ¬ˆ®@µ‰ƒÁyLv¥¡–6 Ó¦+»ÂÀvžq&I t€ËM÷Alvè(™2&�¹# Ì4^;GÈDÛÍß{†Žéÿÿþ¿¾ðu”ž¸ì÷²áiÔÐuÁ†§·Þ½g OM&“éžh´sÙ¬,«YOQc¨óZB1æ‹‘r­©ô<Ó]|W±˜v›º>-É vîõþÑhÍ^Ód{xßhFG¤ðxt'¾~ŸŒã°I?SMJ¶‹ òÛ•&üP|LE1Ÿ0Ø¥Ï&w¿–ÖÑ“êf%tÓV+$3ÚMgFîË¿ï9¹Kå²7KಣÀegÆÇ”ËÞíÐ×·<—ý¡9¸ì¯xÀî-ŸZº«\vºË\öpyà9×�Ën2™î®èý×|9ÿô— Û—�v{¶ßêÙí9” o’Úcef°G©ö€Û>=¸p“�'9Ú Y¾ÈÁ—ׯ’ŸCÎtÿüäÛú1W:ÉÍÇ{ÒõâÉnä9í[ŽîV;¿?;XŰÁbqìª5B lÐ,> NK�ãb |ö2Fëpª!e€´¹–sÂÔcÉ4 Ù–§Ú�^ú·Àþ®�bG™×~&žž¤)vkxj2™L÷Ö»pŽpíɸ'M�Ÿ�ÝR-RQNˆáøxÝ!?O0<óKá>WùX¥ ªËÝÔ‚QXE2Ù×fýòÖ6f·5 0ÂìÒ·Kj`ÒÌȈ-u3ÊFþXì\—nŸtÉö®fšN ‡D„ ¯—æ1ᥢ‹'ॻÂíHÊU¾ÝBýÈý ’sH³ÏÖ=û ¢—þíJÔ=f´›ÎÆ�ê‹ß$\ü„O~g¹ìM™Ëî–Åeç%Åtçéø)—½k~ºu¸|¸ à©oÊGð PoîûÔÒ]ç²O�.˜ŸËÞÎÁe?è¸ì�vmi2™î‰èõœ{ìs„�k~?¾±ïßF¬YjÈ*§ I*Âd;Íš¢Nà<Õá„°Ô,•™ï >Æ)Í+ݰF©aBFBÎÀkßž5C•RV¥Ü(àc’“݈¥ƒMöRŠ=×@lž†¨ƒ*"v58~‹M¨ØˆÎÕ¦Ûs º€C¬¥9j2tÑfÏ^ß~†�ÑRíÓíæ)v@M­#ƒ…©2ÚO»á©Ðž7< ë#kxj2™L÷^Ó Ô �׊yí¤c¦ iÒì”ñ®¥ºdHH½t§PÕ67Í�(Óì­@3Ù7¼/³¾›ëkÝe½û `Òým»ë­Æë³çœŸs,=I¦¿Í@òlÆ¡MIKËh޼ËlSíóI&:{-ɬÇple'ôpNY[_™Ÿ¾í¦•—{ú+„O<lœÖ6ýHå²�ê¸ìRiH\v¾ã†ž^d ÂÅ4—}=å²_ª|S�á²·gˆË>Q¸ì–Øb\öý› ëÆe7™L÷Vôî+Î9Gxú+Àö%Ÿ`ÙèQ2Áþ°ç¶÷›ÖWìa½7Þ“f©Mç—÷©vÎoF40 §Å¼‚jIŠdBŠ–QjçÚf¨Óû2ÍOF;2}Q„�h®ù�$½ŠÇ> !jÕàÒ-€h'y”:M¤‡ÏË“ëás;QÂ@³½ˆŒáæ;R»v�¿G�§ÀRí?ø àó¿×7QÃS)±Ô=ÕFû*4<=òèÀƒÛÀõw@¿mõ‘Éd2­„‘¡ú¦åÌP‹T“ a®£oçæx¬6s¯ØuÀk²ÝÙ{ç#�Ö�Qg²on›¾<ÇzpÙì.kŽœt—1fÆû1·æŸã„ÕÜ}m4­­XØaZ‚‡õ•ß"5­> õ^»ŠÚ�MÄÒä–×´B`´sËMÀM6«co›ÑnZ}]û”7¤×{“} \vW`Ä:Áp†ÉTun ]_Âe?l_ö&û#Æe—ý K4�Ìdg�Ë.&¶Žü …ƒ]àã²›L¦ÕP�fpOëNìYÃk“Ú:£Æ´vú¢CÊ–ê…\Ýs‹3•L2ØÃû’àcŸf_Ÿ™ì[¶13×·œënÛén?è.GÝ¥7Þú�´ÜÖìù&ˆ}(¥ÚÅ™€óºáÙFJȦÙUc(»öÐ|lZì³Û }WˆÓnF»i¥5ã²³æ§E.»›ƒËî–Çe‡Æe_c\ö­á\ö×¼…€Ë~$pÙ•ôùÒ¹ì”Დn¶—¸ìI’ý؛쇻À�w�9j2™VNôöKÎ]~Ôó8Ïí|åÖ¿Ú#ÓpÃ}4Û÷6 ¦™©É eú¢¶mäFZáuj—iB eª²Ø(•LvÌŒÙ7^èNxc@š½ö8ì^;?.UÍNù몆¨@Ñ`wóðKk–©h‚ ˜p°ä³=XÆU˜í|]b#- AØÔôŠšmU¤Ú‰}/ˆ}w~øÀçz³P9ì5 O“@Áª4<ýôÞ�­.2™L¦URØ5Bºh‡}W¨!œ^"H�€\M±Pº|‘år‹9Œe¸öáûÖ�¡ÉÞ§Ù×6€õ `ÞP?�™Á~Þ`¿<í¹îï€}‡ð†û.B¤h#>ß¶³ÀLXŸM*¥ÚêEN{á1Ù†ï/ÉØBÔ<·TüeêÄìI$Á§[™ÑnZYÅ\öM¹ùiÄe×ìMÙ\_6—=1ô›Ù¶¯o›ç�K—½vŸð1:.ûp°çÓLc‰ËÞÞ%.{®é©Ðð‹óG[Ál–á€òè°û1hÿ– &M&ÓJŠn¾çKú'Ÿó'‰·Æ@»Õíç6fûÃÞp…ûÍ Ijo¾÷©÷Ätg©öé�¨K³S �l�ê^B‘©©1ÙûûÞüNܬ”fw>FxTj¦ºšB—îj²K<ëÈ k–á#’–e¦;7Ü#LLw]ä²^ÉlŸEÆi@5½‰†§Ú]p�„ ¹BÃS’k kxj2™L¦E4ZƒÊ Oü†\Á,¯×‹«¨=”šgp3๪6¹öä¯C|Ï(& ¬u&û9à1¾½ÁžCúžÃÌt¿Ó¹ª=·½…ºÐ†¯Úh&Ým-Cõ9ÄØÞ>Všcá¡�ÓèY L-'Wü;ån†arÍÊüüÍh7­®Î_™™ìkBóÓ„Ë>*pÙ›”“Vä²óßùœ\öÞd_Û6¶��k>Éþ8€Ë•ïÇ!:.{ ÜòM¯ÆGÀ8ÄÅÜ+.;ÕsÙÛ—=L³Ç\ö;7A×ß±Á¤ÉdZyÑO_tîÚ§W÷�RÛ °Î°^#JQ2<áîÂf©4kŽÚ#g¦©vŽ–á)�®¸—°iRòǽöoŒ$ŠMö¤‰«’f�±5 P³.-’4D’ªÉ.4+âdØýs5FÕ‘RT f²‡|ÉLï— ÓTÁª6B•¸îì9rÉxW¹œ¬‰«ôåK¬¡ÉÞ=÷+ÿøì×p_5<ÝûôÖKV™L&ÓªªYKëµt©5³sõÅÀcH“Ó"K~¨N©‰|dº"å´÷ýòú4ûFãìç\ððofêYÁceNàQ1“®,iG­ûc¹ùðK˜j§Ê¤µ}Kõ‹w-÷s¥ã”»8Òí&ÓðŸèWÿaûRÌeï»B�xš�sÙÝ.»+pÙ…Á}ÎtW¹ì£—ýüeo²?à‰oÊ+ރ粭—=“d﹤‹pÙw�^³†Éd:3¢�ÞòC«§ž'œ¿ìg2mL€vXkc”ÌH:iÙÌî¡ÑÞ4‚]BÊ(©q I<íÑÈ õÕ ª¹ñ #j46;2ÍP…\=.‡ÿ³e�õðú“½8½{BFœ�›k€ÚÝ?OÔ~ÛII %¸fØçxíÒ‹)6F%öðàñääïøôûA16†ØßÞl×øëY\L«`ò¬á©Éd2™EاðÅµÚ Ç1×úÒTÔU÷»Û¶ˆá³Œ]æD«;�‹i£5ï†ö‰öËn²÷Ú€7é�Á’íë3£�Ì<¢hž†� 4ÔáRQ>„¡^»þy?p…X½ú ^Éí&Sáçóåÿ”pþjg²o曟:Í`_2—�®µÁ½ÄeŸž5ÝôÜÞžËþóÞ”7ÑqÙoû$ÓøÈsËÏ$—½ÆdïŒöãCàp¸ñ3›m2™Î¤èÍï:÷È3„K�“ �ÙÎ¥Rë�qÄP2a½ÇÈôˆ×Ì<ó) e’ô8o”*˜ïIšØ ŒíÐ`eµó›/f•*Īf¨5ÇeIy­!ª2xÂkçE~•Áîæ@´ó¨€Ú51ܵt;_FÁÈHƒ ^»ˆ�aÛžŒµxŠI2ì¥/]ˆ‘ nK¶W5<åx>{O3Ú¹¹¾Œ†§'~VŸ5<5™L¦³§¦a³ ‘Ö?¹ã½vÓࣀ[î²C’ðËLÁ'ýxøûéäZLj„:ZF˜5>íí‹è"€˜±ÛGÝeê[1ÿ‰ÂÀ@ S3­´æñXò²ÒÃÃ�ÇB6ªÑ‹Îí&Sþ'õì7—z.û†l°s.»›“ËŽ\v”Mw…Ë>ê¸ì[€K—f\öÚn×üÀÍCà`׸úæ§÷‚ËŽ¡\va`I¥¨]’ý¨›}ç† ,M&Ó™½ÿš?b<ýeÂöe Ýž±™×ÖgûÌ&0Üù‰Ó°Ij”rטíýuÁ঩@6ß�RkóäM°ÌO¿ c›º+ý…p\-ŒÏxT"½1¼ IDATÈr¬vÅ|/šìNžâ¬5$«b²¿Iñs&¦;3›ELL°\–ËÎÇ[¯B#ÔÒh—™ -`qšÁ÷ZkŠJøÑ_?ÿ+ó5<%©7ÍÝjxºÜzßžšL&Ó™26Fr}’Üæ õB¦vpóÖ¨¯»ª¸ro~êí4Mšf_‡GÇì`9ÎèøÆ¨˜¥ÛNX`õPUâ|µß꺓•·Ïsa¿…%ËŒvÓjéÂU�WYÛèŒöžË¾Æ’ì—½)qÙ�ÌewsrÙ¥)í"—}pÙÏ;x õÓ’Žà¹ì‘ozuÒ!c&'÷ŽË®&Ù)\Òœ\ö“xŠôþM›m2™îÑë/8÷Øç;×üÉ×� @›3S®çµGHJ›¤r~û´Y*g¶C1¹Yº�*¦[NÊN.|ßzQ@µÅD»„Š)²Ù¥Fä¨DÆH· 4Ù�f¤çÒîÚ97h%vUâ±w·KLsÞˆÊ 5ÛK¼v@DÈSí9öhø>÷õLM¢�RF{x½7Û_íÌvdŒõ¥5< ƒó4<Ý÷µß j[«…L&“é,ɹ<Ò.&À"¦áY>\¸å¼  “ÂDûÎ’6ÿ"€›ð©ö5t‰öµÙóBH´›æøp˜1z—dF»iu~2_ý„í‹]óÓ�YÑ0Ñî³½šËÞ@å²Cá²c —�¯»ïf= ¹ìÎsÙ?5àM™rÙ¯ûWŸršLî—�2\v¥ñ å²û×Á.ð¾qÙM&Óý%z÷çœ#<ý`û0Ùö†ûZ¸O_ŸqÛGkAâ½3×{|Ì#¦ÛCf{˜p—˜ž!:FIµ‹Œõàá½ùîžz¶ *+˜—™fç·ËðÖµ©ÆÑò%“ÝeŠýEÒgÒ6Q¡ ªÆdï—+˜í �]ãµC¾�ý º…T;ÅËñBNØVrl»�`ÞßÁý%ðóÇžšL&“ét| ç=¡›¥Yn§²çw Þ¿Êo¸T %b4Û²+{Ã}Z‡O³¯u—¦·¢$ªBRPgþàQÊMi-ï>û5¢Wÿòž™Íh7­ÆOçÿáÂU`}k–dïÙì§Ée/&çPÇeOšŸv&ûú&°µ\=çÓìC¸ìou—Û—}|FÌe?>¼\ö6“êªá²MOk¸ìýtéãŽGzýmû]˜L¦c¸pó=„yò9Âù+ÀÖh·ºýçFlè5 %Ck�‘Nu3ªz¾oŽÚr¤L'C`Æw˜noÓ‘ƒh²ÇÑhª.„»ÄâTfšAë¡‚iv·)準r—Ö¿PÒ½b°À'wõ nÑpÓ툓çƒÌö ^;GȈ�½xªÚEº.4E�rØÃ�vø Ï®‰ ´òÿO%Óð4¬m–Üðt¦Ø»™|·?ýìG椘L&Ó}¥ea@”È2Rõ|ÂÌý³ËdÉ/¡Q¾¦¾ïtæ~&f´›îíaç«@ؾTà²726Æ9=ÉÖlBå²;}P?ˆËΑ1[ÀvÇeÿ†qÙ_ð3{7¼ñ<>ò²³Ìe'Íd&{7Ð|ÿ'†Œ1™L^9ùÓ�»ö)•Ç�sf³—"” ÍRûýs¦I*F�gÞ›îZÃTÇÒâ·½QŽƒá�=‡�‘–d£^*´$ûèøÐj“Éd2_ñŸÀ­àº–°zb%†“½ ÌLö‡¶–°Ý“n]ãîzoæO}›`[îî‡z_Ä{µéD+¶A±Ìh7Ý3É\ö5Ÿ çØ˜)–¥a×9“}E¸ìç.�®a—ýmoØÝŽöü@¬o~z_pÙéÓ}ó¯Îd?2.»ÉdzÀÇXy&³{êyÂùËÀæØØÚÍ%Óv&ûÚ¬Yj´_–¸íÝmm›îà SCC¹3Ù)˜H$T­^J“»»ü>º ,`³þy¢}oŠ/Ëh¿àžPЛíÓYoaØQøÌ³ß ªü‹Êûkžó‡ªž‡–ó[YÞg©2£ÝtOäžý:áâ#—�!cœÀdo„4;N‘Ë ê�lîG\öóÀ¥KÀUOø•Ý„O³ß<vdÌã²'¨˜6f²·cÏ%í�Ç]¢kï:h÷clšL&n½ù]çy†péQ`rØè¹ílVÓ”Ûî—%nû(f¶·Zªæ%H¶SwÜûÙ«³Ç)ú%:æ†7-‚�Q–‡ò1Íî ! ]†˜ìš‰/=†¿ÁHÎ�]ZB¾@1Ûùó–P1¹Æ¨™íç¯1'‹'ÄÆªBâ>2âÙÉ„©ÉŽÃ¯¿<ù¥|€€hñ†§}Ís¼ïë¼ï‚>ú©Õ=&“ÉtÿVtˆÂmáí´"›çîʃ2«)­/4Ï)n¬®>ž‚“ûÜûè�Ý#o†ŸÀ›ãËÐ~·®(ÑÞ*¡Höý�^ö\oêi<Žîîw²ø”™ ÎŒvÓƒ¬ W�͞˾®sÙ›ŽËÞH;3¼ÅAù¸ìZнç²7—ý<—ýjåû1†ç²àÎMŸð^e.;e¸ìÉ4êqŒŒƒÎžMzp øØ¸ì&“É4Ý[¿ÿš? =ýeÂöe Ýf8™ ã¶÷ûóQ°¯¹í#¡YjÓ…Õ3Üöþzo²¿÷J`²;¹™©ƒÜXÔAÆ¿ä’탚  VÓì™ç‚°ýN1à‹ÉøJã]| †%2Ùif<3ÉKf{ø7‹�•š¤:!µÄ–‹Rî(7EUñ1¿w’ñ?m|âd\�úÖ'…2Þxxò¹Ókx6|¿sôÆ f°›L&Ó}]ÈQ]°8yâFè¥íN3ªù±R}¢ÊÛ~CPà»ÌñÔAíNð>ºãödâýˆ“‘Ožï¸àKµ؃7ÚO˜íAH/'ùŽ30ໄ–Ÿû3žcÒn «#Ö×çÞÊŒvÓ]WÄeÍO«¸ìMjv'f{³|.»ƒÎe…\öKÀµÆsÙŸ𦼂ŽË~½ã²¯6—½U˜¥IÊ‹™ì­À'=ÜÞû±!cL&“Iª_Á¹Ç>Gعluéö¾Qê%C )C3„ŒÆoŸ¦Ûn{àd¦ $à½Wg'½%Ûi¼t�sÎ�ó!GãRŒLôœ.z.ÕÎÿu5Éu—¾ü6'˜ëIï.RÌAŠ›7%' d¸ÙÎÆ£(5@eËI|ô$ì^Ñ5ys3 ÷)“aÈsÃ=ÄÈô÷sN{ÿy¼ñàS_\¬ái &}нkön OM&“éAªà�&×I9ÆF¡“Žÿl�Ñe^˜yí¢|V�SVµLl ež§fý�×á `xÌ^NoŒïøÞlß™s“?p³Tû €q; N¶mœnbn{‚T>þÜÛUº.ÝH?ªÝˆÚ�Š´¡Œ)ï¯Ókß^‰ËŒvÓ]•{þ÷;͸ìk½É>„ËΛ¡æ°1Á Wå²‡Ç §à‹\öàê6ð†qÙß…ç²ß¹ìG+Îeoe.{ÀÚ4á5ž'‡~Ðyë3ÙM&“)WV¾ûŠsΞþŠ?¡;Ùö†{„’YgÍRÛØdçüö©É˜îhü²-ÃÉÀïÿă#½–Ï.=ñmƒ±1ó¦Ù�¾™€ŽŒq.s{ÁPûÄ@ÆÎLjÁ ÌñiÆB <òœ3Ø—ÄP+6記 >"5ŽùAì³H qað”ýÚöIœv‰z—øìÓÏ& 7,Úð´O±ïû·€w~:ܳzÇd2™î÷º�ȹ«�WD–4Ƭò­ç1Òµ;¥ioç)øø�G2C2œ¥ß¶€›³Î6ãT{Ïl¿2ð5}�¾Ÿl?†7Ú§&;Oµƒ5G­}ã}ãsweLq¾¯ IaÞM-ásjï Ÿ¼2£Ýt×äúá³_‹MöÑZÀf¯á² ¨˜b‚JŠl€Ì¦Éá²ož.]ö&û.ûmxdÌ�ŽË>m~:–“ì+Íeo—},˜ì'ÀIg²uMÀnhƒN“Édª´€{âYßH¼ûãé%ÓsÛY²�ÚØdïÍ÷>õž˜î�Ð0UHq»‚ù�ðÙµâ b—]¦â2$Íë(›ì.SO€½—¡ÑòE§i²6žM+»)F´Lñ-k]3ᡘêŠi.6EÅbø˜$É, �D9íÁûšìÄíÝ}o¿|ò³ 6<=Ƈ*fÏ×:?µ†§&“Éô€n)—]ºžC…oÇÖyá1óгøš`!rÂv²æ¥ÃžTñáYJÜqôídæM4#àhÍí#xsü>‘~Àfa3N¸ŸŠç&ûä¤ O2t q€Ï~�¾7Ä¿ µF}Κ§$ð«žGúþSáûOq}¾O´z?3ÚMwOŸþe`cÛ§¿G%.{£pÙYšN¾8-5†4½”å²#5ñ§\ö‘7Ù7¶��«Þdÿ$üßMü~šÒþ-Ï*?9йìí=à²c—=€NR.ûD€vÍO÷o¿e¿ “Éd2´xû%ç.?J¸ö¤ŸIkm€“ ›¥—¦K­‡™Þ¸œ&ÛYÃÔ�ßê’ñý12Ü"³RÍg’íN_µ<ëŒm“Ë®Å4;*¶Eb«;f؆Añ„½°|ÄE< #|õv6päƒÉlGƒŸ]y_¨ÔUZ±†�É=�ð8¸JN;ãžÏxDüY¼ý2ðÉÏT6<å)vkxj2™L&¤Ln‚0FÇðÒ:¨£®b\$NûˆqQfzWïO­Biˆ¾�ÑK P{S£;ŽÃ“îøâ:ª{ð¼Y¾oœïÀîÝê»eŽ03Ô�àÓì{ð¦û€““ <9žy$‰ï"|' |?¤·(¹>Ä€Ï|ßÄuV~lü*,¤ùïa Cóó‰ù_–h7­ªÜ#ÏÖ6³Ûh”$Xx°è§âtæðd Œ�£�…ûêÎ]êLöÓh\ö‘ÂeW«Ñ2ÀeG�Ë.ßÈ\öó—€k#ÏejÀrÙ�ögÍO'“”{~7¹ì4„Ë>a\öVæ²�.ûq‡Œ1.»Éd2Í7¹ùž·Ÿ|Žpþ °5Ú­nŸ<ñ™):¦7ÜûÂ>H³O“î}š½3Ó]€”¹þÎÌdwÒ¬/ 6,“ê"ý·&Åž]�+,àdü‹Ó3ào‚žQNÖK}d¦·�Ò@À4@€Ìñ¼?ÖºÙ>œ‘�­³Ý ¢x³TÔ eŒLÿ�65ø' ðæÙú¢ÛrÛ„4±ÝŽÙ÷•€¤W�sÀ;?ùôü O÷o‚^·†§&“ÉôàkŒÇú'‘™H×1RN~2f>çUÍréß"bFÁ½”z±F—’õsrÚ£÷*Lµ·@ëLüC&]Ýur¸s~ñÌÌóxÌ.|“Ôcx¬Lßè4¼ôiö#øÙû½¯“3Ù¹1œK³×¦×‹(([q¥¨ôÞÃç)˜úÙÇSá²ßµ+óó7£ý’»òIÂÎÃ�ÉÍ8èÎ}JiÒåÊ?>$‚ûì×hjÂ~ò3ÀF�ŒY›qÙGB’=Ëeo*¸ìÕe^Û<\ö5o²ŸÛ®ÌÁežË~k8¼pÙÇ3óúžpÙ‡ïœË®L©–¸ì·�Ën2™L �á~ú¢s}ŠpõqàÜ…Y1¡dÖn{€’¡€ËÞî®g¸7žsýí8É>=>ª•Ô†¢%~ºÆgw cÔÅœºYúu…Ë.âbùo$˜Ö;ÊòÉl³ Ð×Õ îƒ<@ž"[BK0ê �ëyæé�e|Œôõ3âÌu*mœòÚJ Q‘¢ûÔºÔðtÂë› áé­A?{Õj“Édz ‹´V0TI7“ÙèH£ö¦qx¬O iÍáÖð-žBŸ&í‡:û%§= „¯¯œà‹´þöÖ3,ñæÌ82‡�kÚóÛ'Ý¥ ®÷&ûøˆ…'dz™q‰¿èMP©ÐGt(ßý´¾ãÂ÷Úw;ô¤$_Q]iüþ�`°ƒôç¾G2£ý>•»ø°ŸV>ZŸaNû|Ì;WÓÞ¨ØqRúƒáS�û�YKÀ�ŸO|a†ŒI¸ì£ .»4ˆÍpÙ¡½.T˜î—½K³¯mz.ûŀ˾^ùáìÂ#c®·½ùÜ›ì÷œËÞæ/­t›Ò¬ ¦SG\ö [ØÔd2™–Qã~ü–?â=õ<áüe`sìOl·› %ÓsÛùIUÖ$Ý`ëFŸdw *%K}X xåÕ¼—xý9ráÅU*ˆÌÛ5·ý%|ŒÔ• ^³ýçÔ/2ñµØäw¡ˆÑš7Ù›`5S[%@úõ�Ð#ƒ�‡)Mµ“ÔTTB EŒLEß]冨×ã½s^#*@ÙÞÌ6ç¾+ý6‘à;JïÅtæçjÈŒö3*÷Ä[<Še´\|˜±Î¡áV£7�x‹£Uá‡4Àl÷Uà©çºf$0Ù x˜ä‚Óá²£™mch²oÏÉeÀ»ön̸ìcÆeoO›ËÞç²·œË>a\v†Œ‘Löƒ]à}ã²›L&Ói‰ÞÍåŸþ2aû2ÐnûéÐlïî=ϰitfûíëÞðM+¡ñ¨² oˆêP×p´®*ßïrËÄÆÔ¬“›´}’=DÅô5ÄÚÆ¬)|o¼�üÛ�µn07^÷—I7ðë§Ÿù÷u2îÏ\Kš¥2†7?Sëg 6 ÐŒ�I‚p™€bàH5w[è»G$ûjÒßEÒìƒùì `X(·žÒk¢ôñZãØé �à¤ÇŠÈŒö3$÷sÏ6¶ý íÊcq Š'×]#›ÍaÚ›7õ ìUáGöE�ÎÀñÛÝå�—ýߟÿ;q¢½é)öËt^.;*¸ì� Èk~p¼u¸zÞ§Ø?=àüÀënïy†ç}Åeë\öãCÏ¡ßýÔ¶65™L¦S½þ‚s�}Ö÷eÙêØíëýIÒõ'CA³Ôîúþu¬ë�‰Î 8 �vÎU44Í­7wƒ«|æÇÆäÒì"6f$›ì[=7ê¦%÷—uð¦ù1‚f[#™lÌš¥òú¥ š×J °!©ö膾*Ÿ_‡Ø5Ó`5‹­qi#ÕEaj= 6øíÿÞxØÚ±†§&“ÉdP� 3ÖEF7R”Hh²OSæÁ˜?B£8!YžÃ¸(�‚SØ1Ês¡â> 3çm<‘�àv 3Գ½Úh&ÁŒÄ“ný  žéOBp2k²CþìÕë ¤ÙçÂÆhiõÒº©.I/b�•ç1ÕÁ{Ú’÷¡VDf´¯¸ÜS϶ÎûÁÙÅO¤È•„gÞ@ƨ0ƒ½ØHƒÇº£Fz&Œø«�pýà3¿éýëhæå²³ÁQ4^–Rí%.û(å²_º2ã²oT¾]{^pãØß½»\vœ—½ÍsÙÃÄ×�ë ›ïÛ`Ôd2™îÖØîÝW�sŽðôWü,¬É¶ÇÉh(™ã[±É#§\8ÖÆTnªi¨ºìC†~_²­Òë)ôtiÖ<*fmÃ7Qß:lÃë½¹¾ ` À9x£ý³ÆZ½é~ ÙŠë˜1â�º#¤|ÖLª=¹Ž‚o> ‘^‰z×W"æ¥çÌ~Ÿ”ÏÛñÊwßyûñA×ÔýCл¯X]c2™L&]m«à`3MRÃã¹ä¿DæwM:]h| aÙ¡ N zJ½ÆàSîjcW@M°OÃ,Õ>]–× -¦Ä‚þz‹ v ¼¦6 zŽb£>A»©ujÓ`£h²Sf½™™ jš=óy%âÏ>òóøÃ* /©)‘|‚€(tÞÉ_”~/z­ˆÌh_Q¹Ïüªg®_úkÚÌ0+�KÓÞƒ]â‘'éšaÚz'mqGìd^ûà3¿š6BåIöj.»+pÙ¿Ü<¨á²?à“ð|öZõ\ö;7ý@­ïF}7¸ìt \v Q1ÌdŸø“'=2æð‘qÙM&“én«Gu¹'ž%\¸ê÷Óëçüþ|-Lîøã Ïlã5ƒã÷å é ³Zj¬ê*Ìñb#Ô >{m¯VŽßKÖΆc5Äzw²þ€‹˜™ëÛÎØé.€7ÙwÜAlºß‚`¸�7KbMèý€²Oy…ÉõÀÀÎ6EEá½§weÌôìs•°f\|qY¶Ê0I…Q„`Šs>Å~° ¼ûCÐÞ 3ÙM&“É”W;Î$Úƒ5-æ ŠdÐ'Ú�’jO.JB<òÆCs:§�ãb¦ëªÀǨ'2 öÈ”Ñ5ü9¹— ÷. íºÛ]ã¯O}¡‰ày±Ï­íYü­Œ÷MÒð(|2 s³è•ç¨2çÕ¦¬²‚ú<ì+O&)Çu' ƒeÿŠ^þó•©ÍÌh_!¹g~‰°¹í“Óç¯t»–^ow�Þ0.»Éd2ÝCÑÛ/9wùQµ'�s;3v{;FãÎd—ÌòBxî‚gÈúœüå†, $ó§'è„aF\—fß„7Õ/ÃîàÍõ lÝ[Ýå2¼á¾`JÀd3®!šhG³�a?0V§Ž‡/‚–ô-+5Aå‹»º„ÔÜÛÈñ*.FøÌ“š™ádöl§b2™L¦|íEäÜ•O’7aùX‚ ˆÙÄäfË8á8OŠq-6"­hbÊk¡ä!Ò2” LTba²Iw)~b�ÇzaYÁ wr³Ú$ q¶éëäAGd õž /}Î’oÆSçZÊ\º¯Ö¿KËW}ñQn„*y‰¹Æ§$¬›½ï+ÄgÌh_ ¹Ïü*aã°sm–^lÏÄh²œd IDATXÏpØ<Š”`ÏìEF»Â[JvwŒýßßöã¿ö×á7;ü͹ìN0 ¤¦°®ÉpÙw€+spÙ?„ç²ßºã§��dÌ}ÀeŸ„Ș.É~t¸ýh|l&»Éd2ÝëßÍ÷œ{øçÇþdþÎú¬ø¯&µ¸S¾èã–î®|.m–ÝÈ×qaóÓÍ5Ÿ^¿àáîïù¦¬¸ o¸ßÆ !3ÐnÅ'뛎+êÚÙ .hŠŠAáñºÔú< Q3 «^ýÞ{ñþ &¦_‡°Ö\!¨Éd2™VX““ Ȧ¤Ù#Ÿ$¸[læ‰LoS‚Ú4´ª!jwÐÂiWq3µ|x­±©°Ý¡©Naô#݆L_tlv$â]`º þ˜È:Øí¨ÄĨ&{ÁcƒðY@Yg²íÂ:y#Òd›•÷ Z')Ï£˜íb#ÔŒ§…‚µB2£ýÊ}î×¼ÁÞ§×û öF0سö�]2ÙÝ�Á*U4S¨M¶³Û^ù÷À/üVšÒwBJ]ä² £…¸ì~ª÷ÅŽËþ)øDZ�îÀsÙ¯Ÿ·=¯üä~á²OR.ûÓqÙ÷n€n¾g&»Éd2­ŠF#_sl]`�N ‹CZ/dz„ UNM%4 hª\vî™z®nÓ´*¬#"lLg´oÁ'ׯÁã熨�7Û{„Ì €I´›ÁñøÄ?/f;‚0Í ;‚”É=~Ñ¢Y[Í2¶�×ÃB½^äçm_b2™L¦²Æ'ʸŸÏH‡>†�Œpžf| lˆš<uœöeã„§«ÅÇÌ›jÏ`e¦™�ÿN :�âc=Íҧ漫û+Èäìm‚O&"T$“²÷¦ýÙælÝÙd;Pü”¾'Râž$þºÒ Xõ ™÷ÕZ¢ÝÀ}þ7<}û²O;�F3ûÔX öF6‡±`’}PTå‡>8ÕÈfr“ší`ìÖ,—Ý-ÆewœË¾ œ¿:?<à=ú€ÐqÙî.{ì‰É~pÙo½i?v“ÉdZ©d”otZË,ö¤u7/å9ÝBw‹à|v %‚à>ñ¤=|:ý€K ¼•ÃsÚà›¤Ž×ýer⟫Ç5M‚�›Óm¯lrŠe|î¢a¯2ã ·IßϾfl,C`2™L¦ �(»0£½ïs¯Ý÷%Þ¹À`O{³åˆcdºƒ\–ÓÝ\ý ~•ŒõéúçMµóÕQ<“/ìO† ŠçåÃ÷"œX4ÆòMLI»Èšì”1‹¨™ÜõLš=Z˜ê{­&ëgÛ¢’’m@º=@™Ì}¬‰÷¢VHf´ßÍñíçÃ'Ø·/y·€M öã°»¼ÉÉlž“É>$Ñ�ÅÔvÈíÐBP�l§xö›2Ÿ]K-Êe�—mÛ�‡;.ûÓ>ìxÀÞM�P99Zm.;e¸ìÄRìœË!c="ç£7�Ën2™L«¦¦‘“ì`µ‚\Åÿßíݼ;•E?&y«x «'š5`mÝ›ì=ŸýÊ/�ŸÙ€_ç]X£Ñk RcÒE(,ËúHé.~}²ƒìÒ¬†`¶¥Éd2™L%�ORd¬fº‹\jf²ó4ûÔfØÊ d$N;O²/£0Ö³©ö0•ÙT2ü~ÄË 5�ÖϦ²0b¢×꜑Mºk÷Õ4VU^‡hš§O�,G…Ʀ|{H9Ù)9á7øj㣕úé›Ñ~7êúÏýºorÚìQ“S†‰qMšdç ñÈl‡�ÔÎ`c¦2iiÉeÒÎÀ‘°Ã¥ôL¬Ä©›¥6ÀË|ñÌ`G›Îeo:¦êšoH{n¸rÁóQŸð�à50.ûñêpÙ%C¾ÕÒì 2&4ÙÇ']’ý8Úv?šÉn2™L+W�Œ‚cý"r7ç}§ò¢îÑ{ɯkèçMñ-øÆ§‹j§[×zWŇ3"]#4ðä½dW=aŸÞMç¼ö5N éOà0·h2™L¦Z“1ãH³Ìs;†Ié—qJÊ]J†³ceòØŠcC ÁBïœmß f§…¿¡é>Åç¹x[µ·˜!oŠg ™e:&%·ŒxxE2æQñøÂrÉmt 'QÔbc ¼–ðþ"Ÿ�­/ñ°èôò_¬TqfFûi–úŸýaóÑîF,Œ�`�ëòMÀî‹‚{ /Ïe~¼Ž¶D»Éd2™*DDÎ]z„b@ó (Ù)óœâëN0G#lL¿’L3Ô~ò9o„Þ6#™ô|Áó¸L³SiÛõ ÷„Ù.˜ðRá‚÷gH�!á•ÍB‹.“a¶S+£$Ô“¦¨µiv¤Ìõ~}¡ß%âcr|vá÷Ñ{Z`þÖŠñÙ3ÚO§Þæ—Û—|ñµõÃRìQ‚]à°çP1ƒxì6™Á³4ÒÈüÀ¥?\Ç~Ô.0Ò�–pg? Gñõ—ÿÌ_îw âs–Âeß6ή̸ìŸðáÿ—ýÆ)rÙ±—½Õ¸ì“4ÉÞï¸&=—}2ã²Oz“ý°ã²ï¾a;“ÉdZÙE:ö?çF §sB@9ñfx÷—�÷z%¿ü§²¨Éd2™LY��b|¬†w Çøb3TXãÜ\ýƒÀP�g„û2ð1ý6:½)ªšjϱÚ3ÍNUãy³.>‰&û€R&Y6×°©§³ˆÉžàhJȘ9ÒìÓõkLu¤ßUy!¤†—–Œ¯@*sÃd¼r?{3Ú—]Æá·ö©èSK±Kiö`§¨šíámóŽ(HærqC ©q‡„‘qÂÙYé@Ó_é[Àsÿ Ä„úÜ\ö&沟»\[÷MdžpÙ àm»7�£ý€Ë>N¹ìX„ËNËç²ç²s\ŒÀeûÂáä8Ü>z˸ì&“Édª¯'î G“ãùƒ=4Û,Çhwó¼Ï§ü1>0E>o†k2™L&SAGû3| ǵr_@ß'ÍPÏDÂÈp÷™Ó=<ˆs|Œ”^ç~B†ÍèÎü‚\ö,�=`Ô; +Ó×gÇ�á•Ô˜ô !#¼‡Ùe+§&÷) X5^¼˜f‡pR@¸$=©!æúPø> \!Ýó/pý*Èv&“ÉdšCá,÷¶Õ‘²ÜxäØn¸ƒ3ÛÆž¡ÑéaÂ�yB¼Éi2Fò–r©v¶-NHໜ‰žI¸‹†zˆ‹a¯›ãd¢÷Þ™ÂB׊ ­27NFÁÁPÅ2ü¶š4»�."FÕQ‡�!Åüïog^WßGp2½òV΋2£}¹Ï~�°µãSÐ*FI±çXì’ÑÎÍõ„Å~ ÈW;¨ ¶ïä;£‚ÁÞ^2ÙC³=J¹;à{Ú™í.ß •7Du�ɾƸì�xdÀá‡ÞGÇeß÷8•Uã²çŒ÷—½Õ¸ìGÀÉ�oøj\v“Éd:û'ii_v¼rR×£%šêÙÁÜ<+~÷bOEÌàî�«Lœ7ǖ𼻜ÀíáÌ9iàƒÂgMs}iîá—÷ÖI¨ ƒVã­0™L&ÓÙ)½ˆœÛyˆ<>F áQ<û�'€ B†Ò¤y﵈MO øü¢$Éί»´&ªJµ³Æ§Ñ29„Œt]k‚ !õŽø~��\—L÷¡uˆVg‘ôå�·ˆÉ®ý•˜îÄý'ö)ÍΤám¿=üN'~Xn†G›á³Ÿ¬äïÞŒö9åžý:ùf§›]ÃÓ5½áiØø4g´çx쑉^Ó5ØùiØÑ|OIwÂHÕñ¿+ìáíY“ F¦3”¿÷'�ÙÎRûI¢=ä²�üg·¾ l_®mx.ûdÌkè¸ì·€£;Þd_.;˜™.&Ù'1›�#c&—ý8Ø®¿m\v“Éd:;Ã=”›�Æsºê›3#Õ:Ü]Òhk‘í¤t°a 6 è“6ýqt¼æ�ñCø$úÚoåG˜íÓéèÄÌväRÅæ]s &ç^æ.~ý“�mn[sŒR“Éd2™*u¸œ¿Û8§�Z€eÖ:R/$j†JH å ~œWÎvj£QèȘÄ<*¤ÚKÍHO¥2}’^—Øì@”\wü¤§þç¨5Ô¨T£ñÏB:áŸ1Ùµd»Æ{— v^פٓõ‘`º‡õu©Ù)÷ÄokEùì€íƒåžþ aç*°µS‡Ši* v5ÉÞ7Ñb íÄlv`‘©Î�ô% c8,ü±ÌƒŽ7ס›ì�ÒíÝò{|é÷‚×%œ¨ßïÑЬûÏpk¸²\Å0“ý:|Ô›û¾èI�ŒY.;ÕrÙ' —}œrÙÇÇ]óÓŽË~°g&»Éd2�‘Ðpˆõ‚é:WÒ¼†§>GÄ\jž5σՇJMºøílPˆ V™_ûcçp¼æÓì·ágÀ=>çÇ÷¼ÑÞ'ÚÇã´æYñÈ¥ÛsCäC•· Z2ç€j¦dÓ §ªÚDqàˆŒQo2™L&“ Þ»MÂÇ” G§ñÙ)½ ð1S/‰ñÙ§žÊ&{è)©©vé ­Uœöbz�#]1Ü#-7‹Í ,4´:&c°‹MO1ŸÉ>CŠé.]g31ÄÚLð²’p)R†»ô[hƒ&¨“±?‰µ‚2£}€Üç�péÀúV—b_ïøÞ£.ÍÞÌŒöÚ${‰É>o’]L±k vW·s—MLõšSžÐ�÷þ‡¤adPÑ$õ{êt_þýøýI’ì2fó¼ç²?àS¶+¿ GH¹ìã³ÌeoS.{h²O“ýhØ¿ ºñ®™ì&“Ét–DMWÑlÎ ¶*�ïä1¥ZDX¯Ø¬KágªM¶z3ã�lt {œœø“ðGÞ$¿Þ=ìò€šð|÷àÍúƒ®99R𬅳è xí‹€ÈK -ªü..òÞ/r¿öe/-|Æ&“Éd2 Qä�0&¯hˆ*áu;N%ÍP)Mwó".ôgúš¬Æd¯Jµ3“Ûi¸d2¥&¨¨0Û™gE<ÉïÒúD%C,Á\�®R¦FRê«yLödV£4Ó•äÚG …²ÇFßa(>ôpi õA:ýè¯VÒ“2£½RîÙo¶/¨˜ÐdxìjÓÓ*¦¶jÂgwNÞÑ-ÔUÙÁ8§ c‚· _âÙ­~=ÂAÁC㵃%Ü¿ó¯¼Ù.acšî¤Èں粟Ÿ“Ëþ¤\öñ½æ²WtfV¹ì“6@=雟»À¯ÛNÁd2™ÎšÞ~øüoÆ©g>k* PÔJ3Í¥Û©0Èq zæ”LÖDùÃ�OÜ´þXêN€æ8Þ˜¥Ú >•~À£Ì&îÃô·ÜB€Ž NðO‚™iœñªMN ‘ò[µÐg>ïJiIÛ�[‰ô¾h|Óî³5™L&“©öÈCäÜö%¹�Ùx;k°·–fG>ÆÅ(;Ç’íI˜ãQ«¿0Gª=LÝk)v@5ű,³)·¼Qjè§QêåÂnHmBÊMBýAZýCú2T*í¸ÉÎ|'RþÏqÚ92QL³KMPÁ‚¦ÜËj…ÞƒmJih'Àäxeóf´WÈ=÷;„­ žå= xì£0Å>ŠìZãS0„‰h² >&AÇ„;…>&\^Û;Ì;HÉœ­t`�7‚e;«ZLµ»4É­5Hí×ù�åÿÿ¥?Lö.;¶æg%„\öOxù¯x ÀížË~œrÙé^pÙ[D\vÉ\�n¸ì½ÁžpÙ�=—ýp¸ñŽqÙM&“é,ê‘OC<Û«ÝKæ,â�JÓ~Q0ÆI¸ÉOX¨SÜ€ÇÛ©Þ8›©×úú¦�Ì꺉Æ pÜ£mßÌto´ïØp Þpï5†7ÔïÀ›óᲇŽOf�×'ù$2Ø�Ðüª0B,¥às�O6�ôuV÷r£Iá>’RYl{R7DØ6Š×i‰v“Éd2 ÕÁm`ç¡Øho[  ½ƒ6fµ“’fç½í@©á.bd×;NIs»BÍ&5%åæzT×¹ B†/³ Ùް‘ªð:%Ã=¬ë¦(ïŸU5Q—n&½þå /Ò•´õÔ c ÷§Iü)é~(…~F Ò’]$ òÔ·{ÒŠʌöŒÜãŸ'\{ Ø:ßñØ7f,öiãS�ÇÞ�Ð0{Î`¸ìƒŒvv=I³í|Z±ƒA%:Æ ¯!tÀ^$ÕîΨþö__ý‡ŒË¾ l].ïxdÌÓ¾7ÐqÙ:.ûQ7u[b¤Þc.{«qÙ'1—�r\öÀd?ºì~ Ú¿m&»Éd2�E��3V+Ø…i¬ÑÀ‰ÿ_Ñ`}îF¥¨]±°Í®jQq!í±AÚ¶3ÜÛÞ1j:×nËóÕà�ô]7áùë;˜ëGŽá—=éþ¿ààØÏ.뛯÷õG6W¨íïZ1ê‹õá¼�v¥zhÀÓªI1¶néû!ý/܃÷s2¶}‰Éd2™æ«Ã¦Çmˆk¤1~“zNñÃ]J³ #Ǽ–�˜«pé,H‚À]g+ËòÚç1ÛÃõrj� wõïq8 ¶¡šÇdšÓ—LöJ&AǰŸ£‘[e¬ ‡÷èx “>ƒÐ/ƒ8ð%Ó_bxÖ<±‚™â)Ýh�ÖÁÇÖÃZ)¨÷Æ›¾¦XÃÌp߃7Ü{c}\&Ým‡­g³÷3ÐB“ÒgJÊ  õŸ{n¼X=î¤9' Þs8°$�`Rx¢ýí“Û—˜L&“i،ȹ�‡<)! ¾…cv­Aj.Í>ýH ÷œÙÞ/�Øk‰l�JV;7׳�QY�!ZF3Õƒcvx;¤å2(d wÑKÓNü»y !¥N`°'Ëd xÒêçÈiõ–†/ŸM³g˜ì¨–ò€èøx¥ïf´ r¿ð[„í+ÀÆæÌdŸ¢bBLL òع驔fÿ~ÐQ3Ôð‡žc³Ï“f×v¥D;Ø\=õ™îè¹Á>�B$,”‹£tÀôWÿÌÿ@ï¿Î_ö¸˜G»K­~à={7¼ñ<>žqÙÛ³Æeç&{0'J³ù ‡·�Ën2™Lg}�wë}ç>ûk$Oý”Šj6¨“ŒRÞdTj@ñ/�¾‚=  R=øœ©^Ô‰¯ ²á>­Az„ fuÛ³‹“10^óõåqãM÷CëðËõæzÛÿmg'¾§&ûI�dÏͨSê:R>OõzEº�r+™g0ŠL£0e ™{]¤ ps�Y…ÚÊB&“ÉdšK{×�íËÁIò ÃÇcx4)F&4Ñ�„�q, �¸G#¦Ú1€Õ.™ë`�O! dj¡B¹.Õo½'&1ès†;P6Ýç­e¨n6žX¿”š¢Ö˜ì$ÏVÑ-�gjiöébiö*¹èeQìg­860£=‘{öë„s=�½&ÉžM±M³¢É>Ýá )vn¬K‰ödq/íl§^¼�ïaÓŠR²lj€ÿûþ›?òiö!\ö7á¹ì»·�£½nÊö‘?Hò�À™à²k�O“ýä¸3Ùw�?3.»Éd2ÝŠ Y©8Óî8›¤ÚÌðVË)_S›hÍR]¾�©dÊÆÇh·IïQ÷¶? ¼ ¶µ¿4Ç3 áh­û&í£˜Pl ÷ žÉ$ಇÓÎC\«×Ù[€>«!Ç-qH•ç"Ê?¦h„ ýD“?3%;ÁÉ�ð;˜ïÆg7™L&Ó"eð1ÊxŸšÙI|�ºNBÈUè˜bª,U.ÙÄqÒým¥“å�ùÎSìᱞrMª�ùŒ)?8¤š¡²`¶ñ¨¶�Ò÷¬´AT÷]åØää»�„z¬5£Ýd2™Ls–`>f�Ñ›vÖç…XST&;÷ÔþubªXü«¤ÚDH P¨ivöX[eÙì€n¼ ËIéö—½Øµ¦ j©ˆâ7—š¢j8™\CÔ\ªMõ¤.j¸ÄÃBêYA¨w‘ÁÅL¯·éõ0Ñ…Jº€èÉÑÊÿÖÍhï:_ü&áÜŽo”9M²�X’=0اlv'$Ú�Üu�Áê.{1ÑΗSvóì$H9ûWÄÇh8š9Yíáôê·N`›»`gð�ÿÐÿýç”Ù'ð\ö�Z`ÿ¶o ÚŸ…¦ c³à²˜�ËÎÎúå¸ìTÃe‘1ŒË~¼o\v“ÉdºßÔŽþ'Òi¤`¦­cE¿Êé,ÞR“RŸ}áÿ,þE[¹Ö(LHQIéþÄpïîh'{Ü$j¸8ÀA­Œ‰k»æOý€#„„•6nLÅSIT‘f§évÊòfʃÍìÔäÜ ´âÌ€èÉ+'’“ZÝ5±}ˆÉd2™æ×ÞuàÜ%`]jfÞ fc“bc¤¦¨¢á. y‡¤ÚKð‚\cT‘ÏÅXG€•É™íHo/¢bh„:OÔ¬�V2×!lK‰×>‡ÉΓè’�^…ìcIT2Ù¡!�'³ÐÉÁîÊÿÌÍhà¾øÛþ¬âz†ÉÞ›ëb’]AÅ„ÆzÄibDŒÒø4‹‹©i~*Œ&çN¶»ôÎwÆà;?~ŸÒ%Z½]y¼hìç.]¢lÚµ»cž�€øOòf{Ïe¿sÃs Nz.ûx1.;ÍËeoëYVm —}¬sÙv�^³„Éd2ÝOšIh( “T/↟¢�&¨2£0mÀSF'�Êÿ Û â_ˆ%°Pq]©Q’’¥7Ù;ãÜQ‡‘éßÌ®lûÚq<«!Å´â“å$¤~øç–EÆT¦Ù³ƒÆ½b´9O#Ô,ãTHX%Ï•i|Ê‘IâÀ¯›Y`2™L&Ó":9&Û�§°Þ�ËG:&H´Câ´·3ï„#dÀ12AMà2µ@ïãDŒr¤3ÿÅd'9åN9€b¬£ÂlW|£0!¿ÌF¨TòÅ*kí¾,jož†¨•&;o~*6CUêÊį‚Ð`•m‹j¨s*„p¢©?Õ{WãЫÿa僠¼Ñ›ìë “=h~š5Ø5lŒÖøÔ x©ê@\Œj¦»aûuŸ�I²GS¼%Œ _^1ÝùÎX5Ü+FjB¦?‹ù�þøß”ÌO»ËíÛÀá�ŽË~¼â\v¸ìm�ËÞ'Ù;£ýø8Ün—Ýd2™î;EÇ0©èE|œä©—°éV8¨K¸ëÂÉt ÅÌKåšÝøœ©¯­¿‚]*�&Ýy¹25Ü]7¼ÏZ¨={’YN¦+5)\MP~†ÂàL\ JFã~òAœ2-¡j¨°íÉ •”×/|�H™bÏ|&“Éd2Ík§9·}Ñ{P“M`4‰ÍÄfÄÆñ¼)j;3Ä‹œv� x/ fylLTF pÞ5A;% Qi¶Cã¶#Ó•¿Öðõ²“ Å~…ƒL4=¹ý«ìRMV¨×T“�”f¨RPA@ýI Pk’ìIý¢,¹Á.ÆcO˜8z �v1É>M±¯åŸæ¸ìULöLóÓ,£�Ý>ý£™ïÚõ;µ©Y.ÉȬ,Ét×6¬d¸u‰vÆnŸ¢e‚³ÄÿèýÿÿüŸúEn¡ã²wÉî“îùô–’< IDATé‰Àe§{ËewF<½žã²÷iö.É~tØû´wÃLv“Édºß4>I±$ÈÙ³‘¡Ì­LÒâ�©®–"7]Y„§Ø£å…QŸŠ™É!aÂÅ(å�ªa—Pòº{ŸnÏÖ�Ú l@"�ЗTB-WK{QÇŠ4pEÚTé ¶:) L¥2�/ás�ð}ÄßçÌlÁñ±íCL&“É´˜v�í+ÀÆV7._KMöé zÞ •5D¥vV£p„ Oµçí«œÊØ¡¬Jk¶Ÿq-U“`ϱÙ)dÌk†; §ÜûõE„Ó ÛšÆð™;µÐi¾œÂjWÍö!&;b_* P©2Á®y\’§Åš ¾ø­3áQ5ê¾Í}ñ›„­ó‚ɾÆ †fû(FÉh—Fb·sf»+pÝ{ôLÃÌzv{„¤aËÃ)ÏËp6hfËG—†­Ûɯlû´4²��òZKïI¿L“ß.íýV?ŸÆ£dÆè¸ììßšqÙÇc�¡V“bÇérÙÛ%pÙû¯Çûþ5_Ç “ÉdºõÞ�‚c™d4*É­HO (ƒ8* "P"¥Ùf®Y'å°%÷D3©Ù@F°$S`[½±Ÿq50N–ó©Ts¢zJ=÷wHš]lzJƒJ`>>{í÷KZ§6#RèMÀy¡m Ø>Äd2™L ‰ˆŽ÷}øa2Žùáq_èâ…ðP2C+ŒPÊ4¯ä‡ÙLnÑØe+¢Âì»d¦_XCð:CA­�R+PnF§v‚?|o¡œüWÖGRá@ŠÞ©f¡R¿Rfjÿ×FQö¯r³/¥Æ§j½Ü7A=<3¿ñ2Ñîžý:áÜE`}+5Ù{ƒÝeÒìË@ÆdíÝß*dŒ”t‡°œp{ý;&šH[•’@ÓìT± %Ö{²�ü‡Ý ›jç¼ö~ÃþËâØðßy.û˜sÙÛû�Ë~ {Àû?1dŒÉd2Ýǃ;÷™_%}�f82#2iˆ¤Ø]ø8iz2�bdúºeNºXxä£*MQÅT{!1¥õ”áÉvµ<Íj»i�¾v§4支PRë©êr(ÕK0vÒO€”°1êí$¤Öµm!ñ«›l�dª‹ƒÇÎäèê)ºþ¶ÕG&“ÉdZ\»çv<>¦]ïÐ~£€Õ.ác\|qÊÉv'çÈcñ˜ÏÖ(<á®^šÅ—š¡†)ô¤–b OIHÛ'(@f·“Èegh`9ÍP�|¤Èk_°*'(¨5e&0ª�ÄA‘!çsAI³·‚É>>>|ãÌü¼8£Ý}áïv&û¦n²‡F{-2NN•'F;ÊMPEÓ]ødÌÜÍPÙ+Z ßyAž®þâ ñÎÐi&{`°×˜÷‘ùšìýõþ/€ÿã¾þ_û¨÷—]4Ù{dÌ�ç²ßzÏLv“ÉdºßÍÎ ]¤Í�ÂÄNÔ•{¨6˜+rÚ3µƒŠ�á�«\¦)ª‚ŠÉ>'�ï)ÃÍv !£Ì³ŽN`ÂÀ)Çá _2Ù‘Ü嚥AyÞìè’}NTX”2ɳÌkÔ ôäýfl¨ƒÇ~à7¶}‡Éd2™–§ã`㜟ÍÖ³Ú› 1jÛú¾.Ä¢ÇÆ´iCup^;�ÅÇp„ e2¹ë¢¹ŽÔH¯j† ÅÔg�ðzJÀÉäš¡&8å\³ø«„êî§ÌcŠ{¦Î[ÈdçÛ „p¨"ծκl…P©DhLöÖíôî+gƧz Œv÷ùß l_öIöQ…ÉÎ1�Síw’k|ªîP˜ì9sÝéŒu§}ݰ}„´Ÿp…å\ÅmÕ;OÄ;ûäì(7ØKÌö6Xa&ÕÞëÏþWàWÿ‹3Äeou.»Ø5ä²_í~l&»Éd2Ýïšœtf»�jGeÆM˜-ï˜qž$ÙÁ öp¶¯* n¼KÆútÙ©öR?ËÍ$¯H{~>RÍ Ä†¤ÒkLöȘbš�O=û_Tjß=¤¯�þÉ×3Ãg×Þ'>˜ÌÕ[“Ûw˜L&“i)""ç¶Îûž�k'ÀdÍ{SmÛ™ìï7Eæ£Ë¤ÚÛ þ�’í@Êl�ÙJcÔÈÏÉÍ@$¡„’XíCÍöšf¨Bz=× UL¹/v•š¡J·ÓÀºMC÷äP?b`õ©vPÆPWÈ ¢§Õ¥Ù�ß÷c´»§ž'\}Ü7œXÛÖÖ;s½ÂdORì C\k‚ÚâZ’½”jŸî ÂÛÙ?1Ö�°o˜ÓCÍ5@�þ~%c>FÙ1«û$­yj“{žhïok»‡‡]½áäõÇþ¶_úÏî!—�*¹ì“ —�›ìÇ—ý ã²¿m�Éd2=wFû$8±[ډᩩMq=L¹Ë�±ÒëЦC$ÌÌË5EÍ¥Ú™¯¥×““Ȥ¨ $¿\0àÕ^ VÛƒ/1åTÑ+;å¸r쨮[ºNÊÒ–2ì÷!|v‰ïš@&ƒÀ‰í&“ÉdZ®ŽöýemÓûS“>Ñ>ñT8öw¥T;eLvb³Ù14I³ M@¥ð@‚y�„ Ívd¤*f»X{ h†ª¦ÜÃת* Ú+ûÐHAƒ\ý—�åX2Ù¡›ì|®"2F3ÛI6Ý[…Ì0™acèå??S�Ð'Ñ~å1?-§ÇÅôMO›yMö¦SÍe/`cÂû�áØ˜…�1…ýƒSîÇÁB’]P#M¸ó�3À,C^¦”hg™þ‡�ø› |ù÷O™ËžÛ-™Ë~rä½î—Ýd2™$¤Í¶´†X½ù¥×YÑ?üô‡eí ÆÆTð1êÉr†}™¦È¥ÿsitøÍx‡�^GŒ‘ ùô1#î€Òþ†ò…WvÚ0ÒÁó “�”û”4»8E™?û_l´Å_º–l× wa•Ï.4<Õfq$ˆ¾ ðÎmßa2™L¦åY*DÎm_$lž÷¬öÑh׺mäÍuâc”T;úÛÛY}îèLú:&—fÏ… ’r/ÀÆ©‘ù7‚Ï“à÷X UÃg/îHë´¨.Õê17 ÐN…»¨®ÖãõZb°kµ[®j£ñÚ©€„)5êÕ ö„ÐzXêøŒ¥Ù{§ñ¾—{þwišdïq1¥æ§bT©ù©€ŒQo/$âã>×\µ�ØpÊ:Á.nà¥æñÚ}¨ý¿‘·…íÒÞgHŸŸð¾‰ŸGð· ®¿ðát¹ì­Àe§\öŒÉÞ2.ûIÏeßLv“Édz�v¼îf½Gr3„Ç ë‚9®ƒ $ iX’ZkÔ …eI”_e›4ÄÄæ¬pJï/žd¯HI³ ¤„Ú“•&;xíêçšk‚Ê¿Gȯ[ü^I&<•’| ´4@ì}“‰ÕJ&“ÉdZ¾vý¸||Ü¡ýƳq|4[½Íôr|„éíCgÓp·%σϵcqt_ÆNjNv;OmKÛÍk“¤NCú:‰ÔKí%|ˆò¾ò‘׸bм¢'þø5o+çi‰ß¥\pTò°ÚY(J³�^ú³3WÝ÷‰v÷Åß&œÛñÓq¦&;K±÷fªj²»Ùÿ¢‘ÝRì™$û lŒpßô*[†ß$ß0à�¬üÖ&Û�r +#"_\ å06€Š�!òg‹£¦¨B²ý;ÿÚï žÿ½»Äe¯aYMârÄeïwR2æø8Üön€ndG“ÉdzÐ4§‰ö\ÁíxÂ�”c:ÇÇdP2Ñcú»”T9ŸJWJµóçqΧ+ñÚ!'Û6XUrMk9ªï{#ÕS5S‹¥“%“=IF)O'-aʱ´ñ~džSšXH´óAtô~dN0dë±~ÀgØ“Éd2-_>Õ~‰°ÞÑ&c�¦Ú;V» 2<Õ®™§mì8ƒ0í]ÙUóo’4ºÓ›¢jÉvp_G㳇Ï�ÁÅ��ÖOê4Èæ-ýj,¡^ª­ãÄ“5ŒvéÿyC£¾UÉdïO*õÖN³÷¹Ñî~á7 ç¯Lö5†Œ öÐX×Lö(u­ðØ—…�™ÊÂÛ¥ûÂÛ2£¶¥¡cB¾h¸nÆ\öQêNyú¿0¥[駦ßçÒUÖÈïÍôþöF7ÛºëÝŒ‚ïþkàK¿{Ê\v’Dð{‘Ë"c=6ààðñ[VݘL&Óƒ¨ññìĬ„�Ѧ‹††»c·qŒJ !àú«ÚÔd§ï™Ñ_²-„Œ†Š‰šm±ûÀ‰Ñ4dÇøóÒ@nèŽôFZ53>8ËM?ÖRî &/ÔIÏM«�ÊI,ðš ò¶%»€Ÿ©™öŒVžiØNüïÅd2™L¦ÓÐÁm`û"°¾9£/´£YCÔ&0ÙÛ¶«‰8>¦CÇ8'‡&\p¬›ûcf;Ð;�Á!'�•_œ½Õp‚Ù~7Ö¡ðà1«'#v;hˆ*xI Ws=p´¦ìÈ×qƒíÚms˜ìjR�*fÈ*„†¤ jç_µ]HôäðL¦Ù�û=Ñ~îb×Xb#ÀŌҋkâd{ˆiœš ¤ ~¸’áŽ|ª}z?„ÛÃwÆ\WMuWu“öÛÏ>Fc¶ó´g jcq>.Ï�)Íýåë„ô¼Ìl—Lv´þ»1]¬»ý»âw ½á¾t.{»8—½eÍOO=—ý½Û4h“ÉdzPu¼L.É'p5V» Žq¡ÉÎÓì¤%ÚûÚ†˜y“SõNlІBª�›á|ý¬h ÍP—ÒWJj>2úÃ× “�ìÐZŒæœñÇLö,2Fj¸Š”ÕÎkA*¤æ¥^7âôj¤èÎ^�{>­\3Û…©Ì'‡¶Ï0™L&Ó©(Nµ¯“uïSµ] ´í¼©ˆÓÞ Q3œvn²» lž”fï½Î`ŸS2È%³�óØÅu¢óÀjùìÄ ¬lSÔ“¬²f㵑Z¿•j4^¯)µ›ˆê©`³£Äaç-Å.ëšÉ>™Í"œœÝ4;píîÿžo*%ÙCƒ]H°×˜ì ã›ýŸ\²)ö)ÛKDÇ„�ß�Š7PÛ8aŸAlQŸj‡4˜Ìø¬ñÎÎ8æÒì¹ÛDÍP©û_J¶OùøÁÃZßûà¹ßÑ·Ëâ²S�Ëac‚³�ããYšýp¸ý�™ì&“Éô êÞû‰sŸùš%Ú+9–nŸÌÁŒ7ÃæQªHš¥/’jÏ5FÍu ƒØ��fßÕ$§ÂA�2ˆr…AZJF s›ì¥¦¨|›æN³³†óœG/rPlL‰3š ?„õÔû?±�†Éd2™NO·}Pt}hÖ;ÿj<3Ù§— Ðv P{_©u>õ>M·‡Ø#dœp:üë”YpŽÝ¦¦ÍCdŸlÓ$¾SuCTÉ?Ò5X‘X«qÏmIܵnãõ”TGI5^MO-Ù®¤Ù‡6@Møì¹¤»ÐkPB ÷iöÉ8>½üçgÖ¯º/�v÷Üo¶vfÍOf´÷ öÐpOp1%“½©@Å,‹Í.¡c¿�ß'½I¾³¤@ØÕd;3ÞEÓ�%Ë´�u–ÙÎl(`f\`´Êzƒtû4yßÝF>&|]/þ?À¿‰ùšžUrÙÛ—=d²·ŒË~rèÏ î]ÝúÐLv“ÉdzÐ5ÏÐ1aª,Ù.5fr| Âz |<ç–‡W1ÃMJµSú¿„�©á²‡·ƒ ú¤äz8}:a·#.jJÝV1�£Ür”a}–il�]c²‹MQ•A�8U93ÞŒ¶‰›î™ô�l�š‰UÕb 39±p‚Éd2™NUDäÜÖòø˜ `²ÖyT}_ÁI—nw§½3ÖÛλêÓìSŒLŸfï|Œäø(!dØÁÙ 3Ñ’9SÜ è™ ¯}^F»„“ùì�É·Uƒös˜ß„Ÿ—Ñ^â²#5ÔÃÛriöj>{Ø`W�B#2H¦û${^ÖøyÃÖ}g´»Ïý:a硘o5bIöFH¯'ÍM0Ù³lvÌ�މîcR°å’eµDÅN ·bNu 6FÚ)½>èoh°÷ëi2f{ÿOŸ ž~}¢½�?g8àÅoùÇpÃý^sÙLJÀÑ>°Û¸ì&“Édò:9êŽA"n<¢Ií">&˜ž¦Ø‰˜�ÐA•Xr({¢Ý¥Æ{d¤C6ÖT7A%—šé9³=1äÃÁ�&§´�Ö’iÙ�¼6XSV�c€Šév !“àñdzr¢‡ýMRí|�Âó†¬QhÁ†®¦2lŒÉd2™î†Žîø^j«} d:f»ÚÕùûš ÷ �‘ÓÎ w�×>-o2ÍQKf»Š�A¹�*0€Ñ.l[XjVGûeùì5ÅÛ"Œv ŧác†$Ûh‚Jó �%?+{$iöŸfÿáÿ{¦÷_¢}ûâ,É>êØV ?8Ê#cæ1Ù¥4;OµÏ�Ž ØZ¢Š!^‘BWå û C±5êìîRC2è8™dð- mrÉxê§NµlûBf»Âk—í¶õÅoÏ~c‰\v>Å&’Âe\öãóÞ�,•e2™L&¯Ã]_7µc€Ö»ÁY+˜�5øăÇ Pv§°¦aætöD;)'Ç Õ™…ÍvȘ’úÓíÐoµ‡dª¬ÕðÚ¥]MSTR–×-5DU�Éu^;A0ԅ眗1šÃòMÆÞô0™L&“é”EDέ­w©öŽÌàšŽ× cz\L®)j‚� ›AÂ}t`;!¾­ŸÙOM\ÂÌe¶‡k±1Š©^b´K'DF»†ésš6¬~K?lyÙlÍV‰�Q“í|vÕdoËä›�÷Œ�Ç]½5>ñÞÕ�›gþ·|_íîK¿ cÖf&{¿sRÓìR²}A“}HÔZƒ]l|ZÃf_’¯*1QyšÊ±æfÑ Ú¥)÷ÄpçÍʘŸã®×,#^ÌùÈlî‘É.$Ú{†{à¥ãw"½á^Åe§2—�O±i.û„sÙ?4“Ýd2™L³CÞ‡o:÷é_¦Yª½UŽSÁLJ·'‰öÐXfèÌLàÿgïM¿I®+ÏkDäRYY$‹d‰)‰âh¥8šÖŒÎœéîiõ2gôuþàiM«¥£­[==7QÜŠÅ"Y{å;à6|Á³gï™™#"3™÷w€Ãáp ÷gׯߧòÝ ûm�Ÿn�rœ ëÎ÷…b{vúq)&F îfÆg(;Ñ÷´í5`S³ùª”ËÞ˜ê5@­f³×ÜìÑï' ßj³K\ú˜6åÚ^!¾ÿcÖN„BžOm¶¹ á�·"Öwvé Û•Ò¬FG{ß§:„Ž‘™ë++S[Çʨý}pê‹, b; âºQÖ˜±1pDõàÇÙ̵˜—Ñ.îgëp]�]?ýç³ïÓ$²W²Ùµ“}r³' PG³è渋æ]* »®v êbwãbâc²›Ž³ýº_ט�v•øü©æ†¯”Ó.hzmå­£cj®y#“<¦v ÙÑ¥Ÿk2ë¸ÿöŸ¿ÿ§ð›¡VÜì})*¦÷sÙ¯¦\öSàäÄGïq H!$es±Ëj—gMur¿ÔÙnv]¬g‚;PÞA#Øç§cíx¸b„Œ*$LQ¾ã=‹Š±bbBšo5׺©›Y—˜ƒ6o· ¯½6Í|�zpçÌê¹ÙQr³Kq>.sl™ è·¢ÖÚ Î*B!äyòø}àø.°>ÚéZýjØ/iýjŽŒ‘"{ýÁiŠ:•4 ñ1Áƒ½è`�ØÞ8°°)ª˜©UtÏ$´àn¤p{Áùì�Ñ1¦I¡ohvjDÅô%7û&é)ÿñ?¾šÕËãh¿ÿÆÎɾ�Oµ“½èf/‰ï%‘ÝÕ Žöæ¨�ÝŠ�ÉæÍÜo£`½–ß3—×ô\«ilÁÝuž«ŒwOT/E̸·ƒu#ø`\�îÒÑõéâpš×wþðûÿå\öXÏeïå°³¬¼\ö‹átçÓGÀ‡?eÁB!$çì)p÷uE&âc²B{Ê5ÜìZd�ÚÍ‚åj=ˆJŽ÷G£¶YÚÎí¸° *ŒƒÁAÕyKJ±¸ßà­)¯½är÷šŸ™ãÜÍE:ÿ7»Ñ“ÛNÔšK †ànÕ[›«!/—ByŽÄCxí3qg"]9ÚÕxÀ¸!3 îhiŠjä³OÓæòMÅÉ4‰í†mÝÍd·š¢ªùJ¯ 8�Qu)r“‡µ°ëȾMÙì 5š®»j�ëÝiFsx´:Ù=Á½OÏ tsÙ Óèd�Üì·¼ªä¥ÚÃ7þCĽ‡Cwf-²‡.Íe×ñ0]çˆêŽè^Ù…Xî íóm´å³ëÇæ«g�Ïn,ËÌh·’žèÞ*¸;޳ÌÕêâzrjyIÌNäŒpµ‘Ñ»ÝN ]º¡Lþ]ãg"ðÝ¿66¿÷¯ áÂɳ2�NbÈÆÏeß\"ûÙàý32†Bˆ=xÿGc|ÌFís¦SŠ W»£³ÛKÑ1%W»éTBAx� YŸ^\ œÛ¡!—]8§,Á=;5Î@êZÿÁJSÔ†ÌöV‘ÝÀ¡ã Ýj=c‹›Ýq·Ç%M½Jgö;#Ãö ñ½±~"„òü9}ÜympµK�«7L¢½2þ!ˆ†¨2FÆ*´È®¯�¢Ø®õ¦èL³üµÇ¥PŸôjÍi—ïµ$ºKMÍËjoÔ*ÅÝ�Eý]':F=nÖLŽ{… öL`�ª¶2"�·W£Aôñ»ùÒÔ\/‡£ýø¾Êe"»t´óØ+nv8ºÕôôZùìâ\ؽ|ölpípÏ–àÿˆ(Du8¹î1Ú¢º>E=y¯òýXCdŒŒ“×âØ%|¾ûŸ�ßýW…F\1ßPe¹ì}z$°ß›Í.—ýò 8?ž|€¸½â ‘BˆÏ•Œ�q\íQ8¡ZrÚ£%ŠV\íåš ;Ë B\‡rC!ÊQÛáìO_†»ÝÜ“Ú!åØbK{a·�À¸ÍN½A\išÎJ÷"c’¦ªV¾ºv¸k7;œŒöÚ©Ï¥†ó1�ŒÙ26†BÈ‹#ÆBëã4Ù2†ÂiŒ¥fœ³É¦3ø�¬v]gèìöšp8ÆÈB“T·öCYT÷²ã3=ÊŠŒ©ÅÅ SÝR-¶ÌÔ&®ëe.ŽŽ‰¾é!jÁ½/GÆ ÖU‹íÛô2F·»>8Ø^õÖ“_ªßï­ÚÃýYÄÝ"2ÆËf¶¸ŽŠ›] ìú9Émì—Ï^Š�‘‘ùMï“Ñn=wñÖÞyMKxwDw)–gêJ“²,6Fl°åV¸ÔDUf¨Æ�‹÷z[g~ÖÖõ¸3 ² ÷ôžD¾ÙtùÞ_¿ó¿Õ]Un.ûF 3ÙE¶ÕœËþ)sÙ !„T8{ Ü{0ž)u$²ªWÊÑ>^#ƒXÈiopµ'ûÜJ3T-®g˃�ò3à–4BÕQ1Ew»ô;Þ&{ å•n±a�VÜÝ`CTSd—ËvnÉÇk®s=7»š ‘1nÔBžè4ø;Êm!„�FŒ1„‡Ÿ�;Si'’T^{/´¤^hN�Ìk·ÊéhǨ]è3ù�ÌÅÆ:0qºkí ‡»ßÍy¢bŠ.vãq]syëm­Ð¢3KÎøVsÄMDÇ(ã–ž‘Ý«¡¼lveÝŽi WÀùSÄÿ¿/•nu«…öð»ÿ*âáçÓ&IdŒÕÕp³£³#b¼é7&²{;°,£ÝØ4 êaÙÎZf´š£¶f´G1Põš¢Â8šiÄÆö‘R ì|/ºÙ¡èæ¨Bh�SSTén— D¦8Blÿ§¿66¿ý¿Š “jÈUÊeŸO· n.† ÕåÙ š|ø6«B!õ¡À? á·þ爣»ÀjÚ÷¬”«}`Mû4ø™z•,vµ‹o01æYg±!Ó�YæbG›¨®§K1=s·ÃÈÿÔƒ1Gt×õXuðK#q{~·ÙV˩Ȱ#b²ÁŸŠ�‰Þ}Ç�¯Ýíú;cýRÍgïýlÑ>Ú�¹6ˆïÿ˜fB!/–'ë;»ô†0šJ·Ê(Ší(²ow¢zzÆÜ u\®ÌnŸ4Ž ê½9.fªÿ;2¦ßi¦–SÔµ4µO3T«n”µšëj×:—wÖ`mÅ÷¨Ý,a]×DÍõZKtLc“xrا8™Þ8C°/4B•õUÒ[pÔ¯.N¿ó/]½u»í÷Ç\öî(?�&‰Œ±2×�§°ì¡!:‘ý¦š î#®‡¦IÅ™ba£¬F_:kUž6Ý�Ñ.ÝíRˆ—ÏqóZc~ ¹çl/mœõg�ÿI‚»ŒšÝí†à>5H•ެïÿ ðµ?ñ›F̹ìF®Õ,²_‰È˜§À?a.;!„�v®Î�íýñ`îz·ÿéÆëÐåYíÁˆ�™Ev ìj7ÄêyWÔ¾9ÚÍPµ¸žDÊX.v,ÛÛÝÞÜ5æ¶Ð8s˯XÐ-Ø[m­ƒ9øÍP‹MIÕ4zj€¼±|ͽ.N�/:±DmuyÎm!„�N!#4®­Ò´úíXlE-FÓzP5—ÕÇ}d�aÙV^{èÊÍP禬�Ðo2Sfl¸Ö²T³à.ÌM{¥ ×ÙQˆ¢‰åºN7¡ß§&ssØ­iÚµîÄÆôÑï-¨Sz#ò8ÙÇȘÇï¿”¿Û[+´‡/ývÄ—¿¬dsˆN58µ®KQ2NTX÷Å3Ù×z"¦ß�ÀÞœÓnNhü°­�àÒ|öXÜ­8ã¶ž?À൳݉‘Aå¶~O:¯=×Åí$B&ª&ºóÑâéÒuÀþø­?¶O³‰rµÉ›GÌ Sj-Ó IDAT$΀‹àñˆWÙ !„´óè}àîëÀ‘8 ÛmǦ[Ó¾iºÝånöÌÉ> ÊJb)�e^j‡x1«34æµï)¶ËAÖ�5B½©&¨0a°GŒÕ¼Oõ¹±f[ÈEw”"cÔéÎpòØ£:Úu³÷NS/-²+§Õæ8ý”ÛB!AŒ1„Ÿ‹C’ÃJÄÇt;±}Ö%¶F^;†8™N\gåÂ#n/Û!"e”Œ’Õ)¡¬?íãjo¹¯õ¦’dvízÍ‹�yÑ1±á×Óêh×"{£ìÊ$*Eö³Çˆoó¥Ô­n¯£ýK¿36@•yì+'—½+d«{MPûüã³ÄuÕÕÔe´�Í“¯‘ÓnmI² JCX•9°œ—A-+ø‚{)NÆÖun{‹ØÝ �¹£ÎýÌUCÔYdŸîw»užOëŠùÙ]~ø_‡�ÏWÿEêd—ƒ¿¬Có#sÙI‘�BȲ¡ÀãBøÍ?ãcŽv{;�e-âcæŒö^ì—�è˜à í:f%ûc”›deâ:TœÌB±]ÇųÙ�Œù¤6ŠFµï®Ú;µÙÊl÷vc€V¼-Ù“×/¸Øå|Ñq©G+›}‰›Ý‰�‘Ž+)¶�MPãÇ?g-E!äp8ù8º³Kr�:ÖVû°Ëk—XYíYL·«ë‘ÝzB/´�‚ÔdÖmú:¦g-&µJØ3:Æ(�¬¼vS Ó ß»ºv&ßttL-6hÚ{£†*8Ø“ZÊÈe—qÇ2òøü)â÷þꥭµn¥ÐþðßGÜÃh~Ú9ÙìNdL)"­Ùì­"{cTL6]ýò—ä´gËiý€+À�uðÜ\¥|vØ QKb{²¡nÛû”rsm53ƒ:˜”/cb¤è>¹Ü'û”ý�ËøþÑ?¿þ q4°ß5ŽÈDöË4—ýæ²BÙ“·¿94êÞ«Í�Óždµ÷y|ŒŽ�ñ¢F+§½$ZË},œ~-zqa¡Ø.j«¬‰VÁÝž<®ëY«UÎ,•o ã´º¸^¼É‰�12¥i–“ÊŒ��%£ï{®v”Åõ¢›½ÏŒúôæíf¨«ÎŸp[@!ä ˜#dVÇ;¡ÝìA¨ô¨(š£N2R/ŸµŒ1«ÝŒ�Áî A6HŸ0GÆúŠY»Ôz†=]í†0ŸÔv°k¯XÒÅ®õO+×oK›Õ›õê®öjlL_p´×DvÁ7]´›½k¬1î8~ûÿy© ·ÓÑ~|Ìf_—›Ÿ†NÅvt¶Ø¾w6»Ó,²v9ÀÔã€+›óÞÔÖ"úËϲ٧°vr…tÞ ÝaF{¶Õ"¿vgè1j½Jnv+j¦d”\£–åÊe±¡>[P»-‰øÛ«‡NClÌ"G»¹m'»#Üì²§à£÷_úßê­ÚÃþ»ˆûŸ"cV«üh^DF{È�ðµDÆèxKXÏ�baF;°¬*PØo´jë °Ò5ˆ‘±Î6ÅväMQ½Ø˜Ö†¨°cuö¾!²Ç rÚ;;>fÜWÃÆêÝï_øj~4ðê¸<N>EüäÙ !„\Xðî÷BøÚŸD¬��íÑ7¹ØÃvØGY®öàDx$¢;PlŒjegÖNÖQ/Mb»^†‘Ï®s×[³ÙÍf¨ªvxžÍP­3®›Ó~UÉÑž¹ÚÑîf‡lÖ¥OqöÜì"?t40Äw¿ËzŠBÈasòɨ‰­”öÕ¥šŒ <‰ì¦f®ÄöÐ)Ç»v´kQ½+×o‰ŽR걇T;ZÚLÕì èh\µ˜›¥•AŒ ê¶ÖØY‡é:­Öœ¾¥ùédˆ1Ü콬©¶y\Œ4-hƒ¨ÙÏŸ"þÓ_¿uÖ­ÚÃ×ÿmÄkŸ6(³›}%rØ»<"ޏ/6FlŒÚX™öV‘}‰‹½%FF?fL+o�œ�Ll|Î 6CòÙ+G6õ:»qŠy(¸Û£ÓUnÔK×Rd PeVšy H÷è†Söù`s|öË» ÕœËþ„BnŽ‹ÌMQ§¬ö錫ÄÕ®ãc‚p·[ñ1@ÖÕ‚K Êe/•lÿm4E•ûvKXÑ8«ÍÊg�yQ1Y3TU`…J]Uµï–OC–Ÿµ7¨[Ò~¨¾_ÌhG½j1¦wšžN§6ë¢×h~ ^žò·O!äàÙåµfSˆæ¨!Õ”d|ÌìnGYl|À¸ü^hµ™ÂÅjzjé;Þ´jÔ°§sYË�ð «K#d®“èg¥:ÍÝ­¾b.»Õü´”Íîd²ëºj«j«É zq‚ø�¿xeÌ ·ËÑ~|ô%nv«D°ï#”ãbJ¹ìóÊ×­ø`±Èœf›€ñ8ÐÖ Xt®¶¬l@ÜØ µ–Í>oD±]¸Ö3±…ûHÅtsò�w–;¯þoQ¹Ûg'û¸³šEÿŠ«]ÆÇLb{·¾÷üxðÙñˆàࣟ1—�BÈÍà~ö�þ‡ÉÕ¾º�Èißû±¾ßÅ¡%N˜0ºÝ¡ö�ýnß'ÁPÀ·e¹�—ûqY#Àˆ�‘Ñ/¥(™¬Ž±j±²Ñêgã ïΠkŸAœ9`ƒ˜nº¾+ŠìÞ´ÆŒöØ�ËnEÄÌÊ€å¾ê�¢raÍ�º”›}ÌfÇã÷ùã'„r;jµIlï~]õ&²È­ó触Ø.Ÿïå´Ë'iÁ½ 7ÝH|Œ¡eïÙÐo\»?“L¨5q-þÃìù¯k‚¨�eØt»PGEÇ´�¾íV¥0\íDöoýù+¥YÝ¡=üú7"Þúv�¤©œÀåŒö–£kÍ�PaÄÇû‹ì�ÍPõÆRo½Bmë¶ç€N¯W´DwKp/e³W6˜-12É <8�5¼Aº½MOwú´!y ¸>#vnQþŸU3Ôš«}v®†|Ün5|ÿ½?ˆìç'ˆçO)²B¹y.NWûv=œEØoÅ™VStLo;Ú“œöq`6‰ò¥è˜¤†�5M,8˜d3t´‹ír¿_ìÙ¢³ØÅ:Éû%Ñ=©ãn07ÆÍkß·ªúŸd§(/‰�Ñ/ͱ1W{Õáî åýmž:e³_œ">þ�5!„�[CŒ1„ã»qHy©àžh7R“Ø�UÅv/EA:Ù…Î1?ш‘1ëËÝîEÂT˜ÂÑnÜÇÕ<¹VUÓÅöÕÓGÆ �É^¨ÃŠŽö¾ ¶/ÉeŸê*)²�ûvLa¸8EüÇÿû•«¯n�£ýs¿6ºÙe.{ç»×Íæ¥]š½‚}_þà,{±*p-‘ý:û³hˆáoìôkZ¹ìÓ Un åFÌr·g¢:Ä º&¶ë «sô±”×>Ï®óW� wùÎ"B}g&§œ!°'Íy'W{oDȬv—Õzø-ÜlÈ+!„²Û¥¿óíÁÕ¾:³ÚÇú«÷KS¡��ÅeÄÇhquÍB;¢1è�P\ ërž�©�iK¢êò¢–ÏŒA”Q˜qÕö÷ûæ´?#÷”'²ÇBF(j¹װ«6¯&�º6I6;½Ç=!„�ÛW¯]ž‡pïõ˜DÈÀI_ÐXb{ÐűރÐÊ=W»26ÇÈèš%ÚŽáŒl1g&ÚŽ0Lj!=é£Ð\¨Ÿ5ÕoÑ®×L³ƒW—•LKj°Þß{»·Mo¹ÙU\̔ɾ�ú žO?z%—·Gh_ 7ûjçªÒ‚$ ñ1Ó€(8ÍNçÁŽ!¸g?²B6;B>pº–È^jfQiˆšÝ]x0)x¶…�PçhL·MÙìÈ7Ž%±Ýl†j5GE>(On‡¼1jò‘â¾ü?ª#´ÉzÊïÍèî›Evù½í�Ìöñû¿>Žï!„C!ä™p~¬ïîbûºÑÕ¦áhïÃà~šÝí}.hC¸ÛÁ]بô™r!æ‰unö:r·»Œœ1›¤BEÉX¯ã îN4^R+ņZlIƒÔg�ý©s(8©®9À«å²[2V^hkžhTƒÃífȽ8A|B7;!„�ÛI<{ƒÏÅÜ4ÚðäE©0Voºñ qŠÇmqµ+½Ä‹ŽqÍ” V¬,§è~×½xÿGœçLKÓ× 65A]#3Ùu-ÕoG�].Ï€“Oô¯d}u+„öð�ÿ#âþióÓÐÙ±0–›½© ª!¼#cÔÁ:EÇt·‹lkV»\f2øtm×Ö‹[+ySŸ2-¦•w³ósK\ŒxÏf—$WóÚ¡Üò¨DÈDµ¡U ^¡òÙ3W»tÇ)W»!3ÅÆL×½tµ¯‡ƒNëcàÁ›¬,!„<›�ÛϾÂ×þ—8œIµ¶S ¶Dõ^ìÇb' t±ßƒˆ�A‡,¿[_CvcÝÔî7„yëq3JÆÈh÷÷d fœWjŒº¤T‹Í÷h‚Ú: ƒ}²œ¾Td/‰ë–»½+ã‰ì[áh—ÃÑuµ¹>~—?vB!·»f{úq¿熨ÍJ»˜­‹¦ï£)êœ ¡Ev/NÆ[¯¨« îâ:1q–„kyú1äuèþÅšóW3C47¥/4<�æ³j(ÄÆ7Rl·"ø¤È>9ÙÏ‘ýÿÊšn‡£ýènšÍž5@­4:Íu\í¡£~€ÁÜoJd·\ì!Ø?øÐ²{F´G{kl6Aò˜˜éµ­&b­Ùìâýëù…|v½Ž(»à’û"€‘9_sµk‘=ÛåK¹Ù¥ð>GÈwîÓÕN!äÙqþ8ºlÆø¾¾œíý¸ÏêÇý–ÌkïûÑÝ.÷ñã%ˆ&–f|Ì8=Œ·c—–KÄvó>ŒÜvg™@.ÄÏu˜×’5€×µW\46k«Ñn2£½%>¦Qt_"²ÃsWyƒ@=HTÎ+yÑÃífwÙ\gOO±†"„rûyò¡¡35hD“Àޱ4룊’™j‚N-¯ûö‰¦À^É Ô Rƒ2#d¼eim(àF‹µgÝÕŠî+:ÙûBìžçf÷L ‘Ë~ \]NöÓOÿùï^éÚêà…öðûÿ&âõ7…›W6@•"»álOv8?dG\×ۢ䶕yeÜÏXÏ !ª5Ÿ9¸»Î?ÁX~"¾ëˆµE+6B5¢dš¡*>¨S¸Í|v/BF?Íè:meÎ]ífv­wÆE Btèí©a:Ø4æ´Ýî¼Æ¢‚BÈ3!¾û½¾úÇcVûtfá&­»ú€Ä±Ôɦ¨½ÁžìïÁ] :Z¢c?FÆŠ�qcãTF{2�ápŸk+"O­pÄþuZ¼nF»çroܵ8Û ƒ»¢ÈÞWêÖüVdŒsIrÙ…›}s \ž#þü{Ù !„¼5[Œ!„3s¨U$šÎ*� ¢ëâ ¼‡Îݵ¶¦Eö®!õ%¢,¸[·­ç[Ó*) ²[ìb¯ÔeÙ]Ëì ë¸}Î.l¬Á²ºËÚ='»Ú縘�Èd¿.O�³Çˆßÿ›W¾¶:|Gû�û£›}mDÆMP-sUÝìhp³ëf¨€Ù °…÷f‡;`f½' çÇ ¢ûõ6ÝjQ^DÌô#7"e´»=.llQjxÑœ×n ÜçõÓƒ÷˜ºÚäÀßuµ‹f²**®öLX·š¢êƨGÀݬ*!„<;Î v»õÎÕÞožjÌkŒ"£=Šýæ,@š¢†~7Óá ¡kÛ‘ïŠqÝæ=w»>ãN¾˽žµ¯ñ2Ú‘Ö.Ï"Ÿ=©ÏœA\u ,k‚Šv‘¥†¦^&»š¿ï˹ìývü^nÓ¨Û1?ôì1Û„B^*f±}ª5bC]‘˜ÕcÁÕŽTt—±1:J&s¼ÆÃ¢¸^‰©º+Ðx° šº¶ íõ™~,>÷Å5Ùuê/ë¬A£Žê�z*¹ˆzj3Æð]ž§�¿ÿ×40à6í«#'2¦ó£b‚¾Ý²r³{Í#ôíd¢v™ß„È^q±{1¦ÀÞÚ19”7±°á ÁØPÛn沋×ßWl×q/żvØùì¦ÃM휾PlŸ?#¯=Û IQ¾ðžÜv\í2^1Or�ÜÑŽzSTëÀR§ÅöcàÞCnÍ!„<;ž|8¸ÚWkcß4åµËŒ2ÊÕžåµËèádOîªÖXƒ†Çƒ?ö²îzÞŠèžÔuñæþ'7™Ïž àŒAxõ4e}AÔjTL¬ˆî†£=n�\ö˱I×ÇüMByi™ÅvKÌ�Œ¯`Ô «�†“\CÔµè®\©1îv)¨w;#ds^ûR±…‚ð�€ÛŸÐÿ´ÖkÖÁmpÿ¬ØZ‡y¹ì•Ƨn&»ÕøT˜6£È~úñŸÿ–"»à°íwî¥MP“]HEwK×ñ1U7» éåéßšcEÀÜ„È^mŠªŸßºQ°æ‰õùÌ&¨V&û´þV~é5ÅvóH¥š–¸Ö�»Üå{v·ÁŽ«Ê�ï^‹™, ÖhŠ «�¯Ñ5¬vYíwîskF!äÙ Ø>~7„/ÿÁàjŸ"dL„tµ÷Jh‡ašÒ"»Œ�‘ûf)££kÔsÚƒ㼆u¿:. Yë{ýgŒ×~ùì…û-®öi`çÆÇôÆ °ÏãbúèGÆô[`+ˆ›Ëáôæ‹§ˆ¾Ã!!„�—»v›ÅöÙYiI3z½?Æàb—ÚG&‰I`ŸE÷N\Cég†ÈžÄÉ ­Gô™ÿ³™²”Õn‰î@=JÆ+âZõ±†ú,¹Ùj~0ÄõšÐÞ\sUj¨éŒ@Ýütv²«LöÓOð_XS)[hŸbcÂÊvöÂÉb·œéÚÕžü a<F3Ô�7LÍ–3ÍìÕU?&_;[–±!¸‘ƨ¡°­06@¡ ¸GµA«6AÄ%q1¥™Ò†t‰«j¾äÀ‚ÞЋ'Gã M4âcBËEÅÇt«á`ÔÑÆÇBy¶¶Ÿ}'„¯þ‹8˜ ÆýPo5FÝ»½~ÜNÍQ�4¯½�@7NODvu�ˆí2(Ô(_²ºõXs¿ï4F•ïÁÌi—ÍQ³»Ñv9îàÏ×ÅüÍñ1�§+×¢c,W ͸jÎõ¾·ccä)Î[ÙüTDÆü컬•!„¼µÛ¨„×ߌx`ì£Ýh™ÕXëŒw3 Þi�¥ÛÕGZ¿›Ì ÁËl·\î†À.Ø{ZÌ$Ü×íÊÄzƒŽöEnv]“-t³/�‹IúÝ”¢÷¦ë±–ººDöýâɧ¬© Vhð§ÞT¹ìZp NlŒ'®¢d’oi€Š‘17(²[¯aÍ'(~õ[~Ñ~ +"f€Â„¶4AµF¿ÎhØ��A.¾'�Q±ÜÕ®7ˆÁj†j¹ÙÅm3£éuÖk Ó±)*!„�çÇÓ��õ±pµ;1~S>ûänŸµó�êäQ;Úu^¨ÛÇi²Aj²¿Žiós«ìiÉs_pÌÞ�&ëo­ÃšqÆ -›·–ºç oZŽ9ðë §2÷G{,7ëJ2DûtP8EÆ\�'Ÿð7L!ä•#>ù(„ûoD<ü<2‡{ŒÀJ4�ˆ«±f#e‚Ú¡òÛ;ÃÝn¹Ú¥ïÅvil”æˆPtR ~ª¢®Ï–8Ú­Æõ±P·5˜–ºÙÝ>7…¸˜D`ïE\Œj|:‰ì�Þ£È^àpíÇ÷†üé°jÒÉ«#5 sסLæV7SåB×NuS϶ÜìÆÌ¦ðãõõC{ˆì×iŒÚ2Ækj‚ZÉdŸæ�†îº×kƒ^cþR³ «ªéjÿÃdÐn|¶Ñqë�z Èœl‰Ø¿1js|Ì(´ßy�[4B!Ïv öÁÛ!|åëqÚ3DoÔZÝ´ÿëÍž[;»¼=)òžØnÀÖ&ó˜}tš¢ï1»ÖÇJ„/~ð±mP×|z²7¨ÓÓK§-ÃwRM�̓ùR&{ÁÑž9­ô´­jØÕïrD{‘˾¹.Nßÿ …„B^ÍîôQwîG¼ñ–±‚{Ö¤|5LëV©ÐÞu;—»Ù§h™IÏ\í1�´¦f12J7qÔõìV�é:é".jýíºqÑŽõ+Å÷ÉûîÙ……3 ‹{´Êë<ö¨b÷¶ÊÉ~q‚ø�¿`-Uáp…v3›½ ãDÆÌÎu(;òf¨zÚb7{KdŒˆ.wý˜³4·=¹ÛøÛÖ€Íi*Oמ2Ü3纜çšMPµxoEÈ$"¹Õ5/�,õd€í8ù¡³âÕF<dÙ¯^|L,LR¢û³>f| !„�g?P{çÛi„Ìl„èT}¶ã´`ǰËÛżö16F:Ù­šÅt«G»îIæõËÞ®ö` ¬ü’lù8.:wkñ1 ƒ»¦è˜h€Ú,²×š�nÓÈ™#j /Nßù6ë#B!¯v wq:ä¶¿ù•üì1âß:%39ÛWÂÁ>ºÛ!Å÷ j».Õ8ô4¢zÑÕŽÝŒY¬LÅÕ®Å÷Y¯AÁ± ˆóê3³6«ÔbÅÞ8¥fóF.{ïÄð%†…­:+ðjwVàù â÷þеT)´‡ßý—ÃQ6/›=¹-¾ôÍMPÅ´Lp nv¯ª±.-‘1Í"{ÉÅ^Ëm÷60F“• ‹ß›bbÄò“ õ�»ÅµH]ۓשŒŽ¹ÚQp±•²é�f¨ó‰†øÔDvñ{脳}}4œÎO!„9pf¬¼ö u¿¥|©%ÑÁ)®Û U—^qIÝ…ö]6x“5õ¼æÓ•�ü´åë6@-e…"{ï e\LܪؘI`vm.€Ë3FÆB!s)06Iýì—†}ç±r:¯ÆÛ«µoWƒ˜>]# óŸÈp7cdâ.�bÜ¥k½·»¯œy¢ÝÕuæV·n«þ:¡¥È³j.§nË"dZj0`y.»<“PÕWn]%ÎÜg^�g�ÿùï(²7r˜Žöãû¾›½$BN?«Ë±t²gñ1¡�œ3QŒ'”"cöÙáˆì%ûurÛCËVÙXNƒsH›‡EOP‡Ñ<¬0 ÚEŽ=\íP.ýÂ@½¹)j->F|~ÚÙžœþÞ"¸�¿æ´By^ƒ´¯ý^„v'BFÖ.s*ÌX#ȬöãiÆ%±]4A ý¸Ÿì*ûmå|‚¨M²šÅo5‰ìûÄzî3T‰Ky�âº7¸+ÆÄ½éñ’ƒq¡È®âcz£ù©t³o·ÃÀ°‡Ûñ4ç󧈼ÍÁ!!„2ïúÇ&©¿ñÚ6�Y©~*óíQTŸãdFq]ÞžtSl†à.³Ö­Ìv!®›®÷±°’MMµð®#cb,kfQ§”Ë/¿èkè™St²[5WÉÐàÔVs]µµ�ìR`Ÿê¨«�Y!þ俳ŽZÀa íëcìnNãS×Å.1Á×Ñ]Œx¬Hšù×gä~Êyj‘1-£«¥�Q—DʘâúÒßJLEýĹ$‚»lF‘8ÊAÝ‹„)沫Ñm"à;£aStÊ�PQnŠZkâjÆÇ¨�‰Üq$ß]ù}OËŸ¤ŠÆ¨ÝjhLwt—ñ1„BžÏ íÝï…ðÿã�×®ó7u­f6FE£Øà»ÛC!«]ç°¥fùí1ïýRŠ’ñ¦y%×^ÑŸ7ãe‚ZNªEÙì­ƒ¿’Èýø3&ƈ‹Ù^íDöw¿ËšˆB±*‹Ç„pïáÐ$µ-?¸Ý gûªÇ,°Ç1‹}r·ÏÙí:¯]ŹÔwëv¡p^n IDAT#Åó‚À•¦f9Û“yŒÂíÚ{ôÉi‰�iv²Ou•ü¿n�zÊÊc?EüÞ_²†ÚƒÃÚWkÃ%› b'>ÂøÑ'ÎÅjD,½0@ •f¨nŒ �ÇÒ8.wýPÙ[v+¯}áïÆPÊlS!4›MP ëKòÚ³F«%W»t&�ë�,8"»s³8>°ãc v*zGb9Ûe„Ìäj_s«F!äù ÐÞþf_ý㸋2ÓŠ!š£ŽÌšyh۵ȮÜí%’}|´ë ݵeYÖüIýc”]æéÄ{¼éž£j¯¦[Óã¥Ó—}‹ccÔ`ÐlÒe4BÍ\XWsÃ.|ú þH !„�Ruqöxˆ’ùÜ—�{¯ûÖ£;£³½MRG§{§ÝíãYö‰«½5xµ]îëÁéW©àºñv·×gñ=¤Nöù,ÃÎŽ� F|L–Ó¾ÀÙ.µ¬èô>Œ 42³ ‹…Ú­"²»b{)¢¯Ïk®Þh*ßk7»Øûí(°§}mâÛßdýt Ïþz|_ü0;{Ðfe´[y" ‹‹ã6A•?45_&ò—Üì¥�–¼]q�·ˆìÕõ(4NµœÁYFc ä†ÃÊ^w2Ì]÷:ÄFqW»µµ‹½&®—þa:³Væ—n‚ª÷äTw¨ÜöÒA%Kl¯»5p÷5nÙ!„<¿ÁÙ? áK¿3æµ ñ;X!pwb7ªÅöÐ ƒ8¨:Îtµ÷ÈÎk�� 1?+­ÚŒ~Í�¹ÝUôŒ90kÁ5 êP��Ñ¿Å>qßsZy™ìÕìPãÔæèÄÅlE.ûöjÈdß\ƒÄ³GÌe'„B–ÔsSnûñ½ˆ7¾8ôë·@Xo�þhÛW=×BÌ÷0Šìq4NÎöY|W‚;BêjŸÅôÎÛ‘k‚Ò¤˜è;F,/ ö ¢Œ­d±ÒÞ^‹µ4 /ž=¨Ì Ú¼`úJTÌ â÷ÿ†µÓ pxBûêÈh¨UÉý”?–,*¥â/ á¦KÞšP‰t)¹Ùƒ÷B¡¡32ì Þã¡%CÞ:åY ×ZdÏòÙQΑ ËV¦¹+ª×ìÞ¬…îe–“Þ\Wk~£Ù«û}Ò‚»þ*9íp.Í"ûjp®�™ÓN!äùÎ~ñý¾ò‡1­át=f4G”›]LŸ¦*W{ìÆE Á½é@¹v�[}d1zg,×{ipÖþ©;‘4¨;Û«®öF7{Qh·�ã|½1 LNu¶Dv5@œÝì£ëjÙŸ þüû¬�!„�}ª‹Ë³ÁÝþÆ[À½‡À�IlûëN8ܧKXíDõ)Ã]:Û§8™®ÑÐ1×ým³­'ºK‘]GÊŽÀ®Ó‚+‹9*|áncCz-¬gµê�æÝ3Uo›hÄíM.ö«sàôžÞ (´¯DlŒÈeTœ†øÂ5xsc]ŒØý+žÆŸµKËušg£-ÿÇJ?äZ&»zÜ|ÌܽhœYØ�Nþ¸7v�*½æ ¯W=ÅFcT¤ï%6�ç ³ Zân³fµ²ÞáDÕx×hÈi‡rÛë³4 ‘]^˜ÓN!äE ÌÞùÖÐUfl"Øgë™QìQ‰íA˜Õ­(@± èE îö,:ÆkÜœƒî¡\£è¸½Òó®÷‰«›zÐWÜy¼¢À.§·6?ml€j 3‘}cç‰În¬sàüñgßá@‘B¹N…‘¸ÛßΚïïý1°>V£xÛ­wQ2sœÌ$®w;—û¬Wô*Ÿ] í±ÜÕj�jEð¹»]‚ŒŠi‰‘YX—µÆÅ¸5 5Ö‚¸˜¹Ï�ŒŠ‘…ó¡áé?ÿ-ë¦æð¹nmDÆ œÏžü& Çz2@òؘÖ&¨î$-rÃ^ßbdŒ%²\ô®{ÞÞÍ;ÄG7--F”š‚¢aðS‰�)þ(CÃÈÊŠ¸±Öê3|1ÝùŒœÏJŸFS'÷,®÷©Ð,ç›OÝAÚ4568¾Qùx¬Fªòs�±¡)ªšVyØ6Å!õ³ø®sèÅg4/@;í��ÕYíú÷`ý§œö;÷¹u#„òbøô—£Hê¥�'¶£SQìrF%²gQ2¥‹9®öÒÁÿLt/EÈÂ}ÒÏeñp7-;ôtoÐç‰ëf&; »¾_q´'CçÚs±»¹ìÓ@q“:Ù/N€O‰xúˆFB!ä™Ýí!D|î׆ìö£»CœÌj;œQß ·µ»½ïG�]î“ÀÞ9b;:_ ô¢dJÂû¬³zWÌòªáCÊk³¬ý¡½Ð煉ÔP›]TÌfìesuœ=Eüñc½ô 9,ëëñ=d§»§[no8YJNtL¦//‰�©4AMÖ­ÕÍnÍ·Àé^r¬‡B¾wöù†´ª5Ð *ÇÓÔÍb{Ì›šzñ,ûºÚ�V�焆�oˆF¦{-§ÝÜ�×Nvãû* QW+àè·n„B^Ì€ìÓ_†ðæ—#>Ó©3 Í×§}ç“õ:•w‘¹™EÉHá†ÖÝêj÷"b´èî=n,;‹—)|&z°æN* ìÔ`. z™ì ƒ¿iº>�9ÛÕ)ÎÙéÍqAóÓ�¸\ ‘ýxòâ§¿ä ‘ByVõÝ$¸ß{=âÁ›ƒ¹ïè.pt<Æ»I±}µ»D#œí±KuŒùºW™í¡¢gÁÞ•†"µ.O`�{hHY}åÔ`®Ð^h4ŸÕWS�£‚Îb¿Úe±_œ"þàïY+=KhïVF#Ô�Çfd⻕¯5€qy:ÓÝ4¢‡†�P¨d¬7RjŽª§ãµ³¨˜ÒYÁ‰èÏ÷ލ!MÊÐ#Û§&Ó†DG¶X±.füKmûVkŠêÅÇX÷‘»Ó‹føÖ×¶Üú¥Æ°Æÿ×jˆšÎ`gµ¯ÖlˆJ!äÅ Æ>úY_üÍhdöåƒ�ù~µ‹Ã ¢›jŒÎÎk7ãcjÎv ܃ºß(¼›Ñu€Ùt5<ƒf¨Ö€n¾Ú§êŽöjÔ‚ûÊmØ¥…öÑ‘¥3Ù/G‘ýéLj¾Íz‡By5ÞÙ“A™xýó÷ßîÜÖwÆìö£Áá¾Z+Á} ôc?ÆézÒ¢:CpG£à®Ó’þ‹B+‹NÿB­§ÁÐeÐX¿¹õWcóS·ßMíl@£Ÿ�Œ×»<ž|ˆøË°VzN¨Ðl׸©£{y¨Ÿ5ì9ÛÝßVhûñ¹b½ñà š£†Úò "{–éÝ]Hl˜(ä?lÈ�TØýÈçíI'Äv1MòÑ ‘1KøEñ1€�³` ÛšÓn¾žº* Q£éã0 éNª[qëF!äÅÄÞÿIo}-¶ígÅ~k:KLDZÏËQÎv)²Ç¾p†bMp—÷�rÔ]©‘ªžwíOÖ¸YÖõàoQC®}"c´óÊÊd�v&{–Í>‰ì2.æbÈd¿<N>F|ÿÇ8B!Ï»Î{òá˜ßþEàÞëCBÅúΘÝ.wánïGÑ= “­ël÷¦ÌvøšV(í¦b¡Ýꕳ§ÈŽXèiÓz)öc£ÓmZ+]ž§�ßý.ë¤çÌ íV³Ó†F¨fÌKÉ;0Ÿ];Æ—ÆÆ´àºÙQçUî¼'²Ë�•d»rg´p´'Ž#ñ#ÛÁÕƒr·÷±F„LCVûµãc*óì�ÓîÄÀ虣嶇ᖷÄ#—]Ïäÿ�B;!„�C„½÷Ã~åk~ö‰•)>ÅÇ`lº>¹ÛCkì¢d¦3Õ—û!3™  LæeÁݺÝ(¶gYï0¢d– äP©oŒ¨ës•¼æ�Ÿœ„�ÍOKM»²Óž•“}j|úôÄ÷~ÄÁ#!„ò¢ê<™ßþÆ�»�㻃»]:Ü»UîpŸô¨¾3\í]®OÁ»oè!Z7 Nür¢ß”„¢JMVlH_‰å+ž¨Ì É€ª^šÄŸ§�)°¿@Kh×?¨Rœ‹•CÍ=CÛ�Èõk?4=iI£ÓpÍåÁhøPÙ;-"�*®ÖyôÈ4rú®üqoÇuÛî—EŒ��´¨3I=g¹§RÕ±<>f‰8oºÉQ$ïÓÕYŒÎK¾Žâ3usÊèh'„r@ƒ°_:b{°RÄÁå4Åɦõ4Jfr¸«g‘Ý‹‘‰•i­b»Þßv”ŒWÓí³ ªž§šÑîe³åSš�û¦À>:±t®¨v²'Î,Ñøôò8ùñ½rI!„B­'÷‡_î=úÆÝÅv!¸¯ÖCsÔnÒ¥ºACÒš•åpwÅvKƒÒkb»W«Uê±RoœENöBý”ÕKºNk¤ÓGˆ?ÿ'ÖG/˜ƒÚÃWÿ8â ¿¡ížp\r}£0˜Ó“VATwóÙ'{16S})Ц¶q¨‰ì«Ý†kØ�v—®ËïV»ïܱX\B¶ãëô£àìNíAÈÇ—óØT äÀ"Q]¾UñZ_«œöìPø»!*be]õc�!çK¾ Æ#(¡ýè.·p„BcöˆðÖo‰�§ÕL=¦É0³Ð®�íÝ.Ç}šy:KN÷ž�hŽ¥oÏ뱯؎Â4î×jUg ×:À›¯¢1�“ ü䀰Ҡ+ÖK.ö€1�O'7ûFÅÅ<ý˜NvB!äë=Ñ#.¼þfĽ‡C¤L&¸¯�ÕjܧÌv/»½óÅõ–(�׎ŠàžÜ •º«V{5œ!XËb·ú×H�}Ê`ÿ€ýj…Ãq´o.T†¸øb‡–˜Kå�L(õ‹›!„Æi-O¯¬·£>ídïäÃõ°�[¼£;B\_1©Óe ``³Ý�¶»>Wãkl¯v¯ß‡]¦ê0AmxÔç�ÌõÝšß^Œ�q¢ZÌûz]ŒÙZ¢šãàB´Lô¦W¾”YV¿µ“é†ÿ/!„r(ƒ¯÷~¿SQV\´¿ëÓµÜG÷v{æj�é ÌÜ'�^‹íó¼1_nUdou´Çë|šêf-£]ÇÈX2ÚáÞÚµÏï[{ß;B»t³+‡–tiM�O™ÉN!„~Ý÷ä£AÖ¾û âÁçFÁýnšáÞ© ÷Y\_©ž‚^†{kf;Ê9íYïÆP¯¿¬¬æ`òÞ‡û8ØGóA|û›¬‰�ÃÚ?ó¥<_3X¹•SF·4ü~JÏ7óÙQø‘ûÅÆÀÏmOÖAmX Ï ˜Äöq#¶žDö»À�ûÀññNX_�—£ñràÀå Ø¬€«»£»èrXö•±þSŽjÔÎk½mrDílZÉé^œ°àÿ÷˜½$à7<æÎî4CÕg6Ãå.�ì®ÖÜÂB9¬A×û?áó¿ñºl§�ÆÊpøLQh³Ð.Ë?™Û®¯[]íR”†Àî岋çóÚÍha!ÚšÑn ô°g>{k£®V7»!´g­�ÈeWq1§ƒ[ëßr@I!„ܦÚïü©Èq ¸ûÚ(¸÷•%Ó ñ}Ì Ž»ÝŠ�ÉîR_i­Éô›ó¢ú–œ¨ì¦{}lÇ>5g�ñϬ‡˜ÃQâf'’ŽÃ°"Zl7-Õ¸õ=Üæ "Û«óí³>Õ#lFÄN�.védEöûGÀ]ìÄõãñrw¼œ8¯/0ˆîWkàr­Vòlð¸ü&2†°^ÌUoýPK9í•ù>læqÁsöõƒŒ—±¾HºG�ØB!‡6àúð§!|îW#¾…¼‰æ(¸k¾[!‹’ ÝÎÝ>7‹‘×�®v7·}¼Å ­!��Úì˜÷ê·} 7•Ï^Ë •�U²Dáˆì½'´ëLvÕø4ÙO€Çï#~üs* !„�ÛZÿÉX™»"^û¬+³Tp¯9Ü…nR��±j5§ó¢bÌzªdL°Îô“ñ0ÀÅ)âϾÃ:è–p8B{g4AMœÙð£Ô‹_·†ü¥dö¥1µ&«û èÁ=+›]ž 0]:£Eö»¯÷ÖÀC°×ïxm¼ÜpàSO0îgD÷sñµt ,k1î²Ú£r{%´ゆF§­ìÙuÑ,µ¬µ|y-–ÃÕQèO v$ãÿ?„å�B9ˆÁÖÇ?!„ˆ_ÿÐ?H#H´¸ÛÉ&©£ˆV»F¨5gû$¼{"{g’IW»%°Gk_\©>ÞÔ'hg³Ïƒ;~hp³WœXŸ˜è»Ø­\ö­su±Ù?~w>ýœB!/A8ºÜ ¼öFĽ7€ã»ÀúNžãÞ­Òüv-º‡RƒÔB”Œ!SÔ u$r¡É|t²Ø³X=uvŸjnßù6ëŸ[Èa9ÚC°¿Ó%W»u¿tÚGQ¨×ÿµÞÐõŸ–eq«Jñ4ÉÑ>‘Ë~tg8jxw=ìŸðY Âú b»äÞxy À'x:^zŒb{︜:qZµ8m:Šõ�•ìôÖi¥†¨úi-ã\OØ_2Fz›\ÉŠO\ë ËM¢–Ôw?„agD!„ê k<¾òõ˜ î«Ýí0¹ÜÄö £a ‡{"ª[â»ØßF10ÓÂûÔh½¥?Ls½½0ŸïºÙìV£.À©õttL_Úûí(°÷i\ÌÜ踺®Î€ó§`B!/{=xòh§ÈÝ{=âþƒfåFË�+ÉlWQ2èŒhj'³=)É*ùìf­UÙ+îuÕØ4þüŸXûÜr/:&ÔNß娕êWrAþK¸nVÌsý‘8ܧëic´Zï²Ù��AýuobÑk}3»qÞ{ž»Âàj¿ ÀæÎèFÚ �°M7p1 ìêÆîÔêE:{£êíŽmÅ€ØmbÊ^s]�>yj‹“>8³ûw¡/£c!„Ü‚Ö;ßáW7¢ ±våä€wv R¥£iã…‹}nl*ÏœÍNC)NFî_‘æ·Ë&ª‰¸;.f¬ƒ[´|RÆS¼Ýhvz¬pjótßÛ]WVÐýyJ¹ìÒÁž5õRNö˳!”MB!äÕª Ïžì*¥"~aˆ<–Nw/#�î2R¦9N¶©Õ•lZ]ìFŒž>›oª{Ο²ÍKÆ íÞ)5wy1øÜž¾(}é÷=ž² !juÙJTŸ'©&¨ADÇ̱1ìŸðkã8´•ûãe àƒØ~ugÈÒœM}7\d¤Í4ðl·“7LÃ˹‘/+öŽ›izkÞi…J™&Úb‹!„�CXýüŸBøâW‡¼N)ÔÆ~¨aGP·ËmŸÝíQ4L•÷iÀe î!�‹ ^”̸ƒ•Î÷ÌåîåµK1\ÄèíõAYÏkq²‹A 50ljÚ¥vË¥¥[[;w4q²O§H�"ûÉ'ˆïÿ˜E !„ò*׆*7„ñúçGá]»Ý;'Ͻ)#„”¦f¨¥vQ%µ�êC3 ë¿Ë:ç%f}x«TÅ�Dp¾nƒÑ™'ÜÀk\ãc’»nˆÚu»Ø˜õàN7¸Òbp²ïkzþ†ìöS R7wv§ývÑŒ³ëÓÁèw÷¢&‹]šùŸñw<^㟭oë>áÙ}ï!„�g5 zÿÇ!<üBÄg¿ô¯ ízlWRp_¥îö8 ®DÄŒŒ‹1w1ðJíP9íJt‡u0›¡FU³B?VÙ]GÔÈš¡ÆBóSkpØîuˆÛꌂ–ƧsTLÉÉ.DöËsàâxòâ'¿`C!„�´ú1zÏ…£;CÔÌÑÝQ|7„÷Y|ŸâdJ12Vaæô·1ca„c}s5DÁ|ü3Ö5¯‡åhO¾Óû àK¾Ãáúë»ÏK¹¿á}�îz!í¾<7D] ‘/G\í¯ù?{}\ΆXšé눡¼Cܳ±©ó~ã =qQÃÕZ޾ãØ÷ëZ²´C „BÈ-D=þ`¨d¾üûw_+G[ �îöˆk!莧 O¢{˜„÷ÎÚ…àåý`Gɸ9í•Ìv}bT5ìñÛ‚OÉŽ�1£cZšŸªAcSÔ‚“=ixÚç.ö~Ê"½6ƒÈ~þñÝïr J!„�öŠèê¶憰ËzŸ«®Sá]›T3¡NÕT–¨>N%±7äÕæÀí^“Ï^~í5îçÚV.ÈÁ]H»/OVk yì÷±¿›}â5wÆoQ•�e9¸¬Æ`{�0ŸïG[»�ƒVÃÖ€Bd|Øï;N!„òÀégߣd>ô÷±½Åönr·K±= �}ÛCEp/9Û§³-ÑR€w¸ISTù˜Ø!'¦ƒ}>«f²bcSp/Ší…lvÓÙ>Þ¶\ìÓàS;»zÑôts9ŠìgÀɧŒŠ!„BÈÍÕ‘†û��çÅa íI.»œd·« Úãµo+:Ë~ v©È¾ÿãw0í×åÑ~�aÙ+åfO´¢=³Ü{Ðuœ?먗öc¨1Í“:ZzB!>HzÿÇ!Ý�ø•¯w^�íÛ!/ö£;Iˆ¼a%v%Ó‹Üv!´Ï¦„hœ‰§N'ž›»ÃÞ!ÎÞÓîv¹o–ono¥]Ý�écµØ˜Xh‚ê6òÒŽvÃÁ®EöÞÈ%íÇÓ¨7—ÀÕ9pq|ò ħ³`!„B!/$´³Æ~¶ï8ðëÆËÑ ýË&¡½ƒh8a4BÝgÙ‘ÿ¶¦ß :„B^RâÕù [¿õµˆû�þÞÐsf= îSçèt—Q2“£=v@èE�Ò«Z¥%Bf�È�¼Ï(vØaéN<7­f§ãô&±½%2ÆÚcI`ÍOuTÌfÌc¿º®Î€ÓLjïý� !„By©Xó#xUFªÂéloh¹[ ýN#v3í®Úk}½i‡Ô¤”B!Ï¥Œyï‡!„ñå?Üíý(¶÷GÀj;Ší+Ñ«Eö•ˆ�ñÄöÞî/ƒàôœÑ»˜6Ǿ©þ4óU¸�R#ÚuQ¬ä³—\ì:*&Ú ‘½·œì[3ÅÄ\�.öSàÓŸ#>ý„";!„Byé¸eB{|~/sÛËK”ž4ð~¼ÜÄklÅr³<ÏëþËâËùýzpøJ!ä%cÊÛ _ø�!»ýèptXïÄöÕèj�=Я„àÞ¥ °,±]Þ+”\í'{æ`7ö–¼y»nÉòÙd³»B{oˆíVÃS-°÷ƒ°.³Ø'ûåÙÐ(샟°B!„B!/-$´Ç^VX0ËÅõg=ÿ^ïÙÈéLM؉ì7áh¿Ë‹Þ °ò¿�‡öÝy~‹¾±  ŸBÈ+DüàíAºþÕ߉¸ó8¾;Äɬփý[ ·»Õ º÷Sf{§D÷ ®ûÝm8‚; Üî@Öˆ^7=Õyì!ì¿ÿŽ^3TK`—5¡ÕaÄÅ4DÅÌb»ÎaWyì2‹ýü)â/¾O��B!„¼ô–£=‹ÙwÒòZ29÷V¿¯ñ\ùÔd1z™Ó}÷ é´é=Í«¸sm7À¦.;à Àco]ó3|„aY—6OÞ¦N(=ÀËÖ;^ÿÿxã_Œ}g�×_'3{U?ë yæ1;„BÈ .þýî?ŒøÜ¯ q2ëÉÝ~4Ô#“ØÞ­†ûÝ$ºwi_™NŠëRpŸ¦£+;R&i/ê¶`EÇ„e5IŒNí¡EuYNõ�—Ç®Åu)°Gåb·DöQ`ßnvûå)ðèÄ'Rd'„B!¯‡÷œq/í»åIµy…ðf§ýuDü8Šír€´Ý |6w� '>ð™küŸ>…Ú¯v§ K±=Ær“®çöå‰õùâ3ù’î9¿ñôزØx#ù„BÈm ž>¼äŸýRă7�ã1Nfu4^„Ø>‹îJl7îcy)ºÃÙµ£}BŠîÙ4I­Æ4j=ýx,8Ú«ÍO�¨˜wñ0®È®öÍå °Ÿ|‚øñÏ)°B!„�WŠÃÚ£v—\í± ]×Dïçñ^j/[Þ Ï‹Â!¢ ÅÝò¢ÊJï…«ý ƒ0~ŠÁ‘¾¯ÐþÀSç–¹¹ÚårJ‘]ŸÊœ þ ÿß–�fëwj¯àu÷¾Ç ÞJ¬=PSÓoàlB!ä–?ùÅ u¿ù•ˆûoŒ‚û1°:Äv)¸óÈòP IDAT‡ItöDxWq2ÒÅ^sµCÞë³I€ŸX$´7:ڭƧ^ÓS³ñ©ábÏòØ=ûÕs\ž9ì½C��B!„¼’XFû>¢¤äkŽq!VמçÆËB·T“÷££]ÆÆÌ¡¸ZçwGûÇÞ/KÞÎ#Bí`{¹s³÷}.¶ïëb/jîqÿeÈÁhlý>–Äë¸à++Oõ<”¦k·®q �B¹�L"oxóË÷?#òÛ�rÁ}Îm]î!¨XélÖb{cA­ûžÈ^‰ŒIDvÃÁ>¹Ø'Å\SNÍNÇöË3àô1vB!„òÊsXŽv�%éæz�$§¼Zƒn í„B^MâG?ÛEʼöÙÁá>å·Ï‚û:m’: îÒÙÞ¥yí^ŒLã‰íF]Ù$º;gÊÚÇÖ]¡½/4<�BXŸDöí ®Ï11ÂÁ~ò)â'Œˆ!„B!8¸è˜h»~µpXÆá8Ñ#eØÅƒ1榖—5çÑñ2òu âcÄëÏb{?8÷§AÒÔàëêbçÞZuÃ7àƒhþÀk^Ç ¼C“ÓOÇÇO0ëç¢gN\œ›óÁÑ´]NQ5DM„ù¿tÔâÍp¿É˜¥3Dõ6cyàl~ï¼^Tw:Ú !„¼âÌ‘2!D|é·�ãûcÓÔ£TlïdœÌt­Åö.w´×²ÛçÛѽ¥ÖÈjÝxå¨+‡}Î_—×F£S™ÁþøCħS`'„B!Dp`Žö‚+ â9^Ôù_.#Vp=“¹%Ó$Ä«ëA½¸¹Ü=Á½Il—ö…Ñ1-Nö¢ƒ]g°O.öÍ®ŸÏTß�=™cw!„B!mŽÐ¾ÝØâlÍÕÞÔ0´&¾—2Û£3ržcæ´OÓ”Ó½5>¦ÙÕÓÈœ):$ ÐØB ÔâαխĩÓëaÚVˆë[u:ñädŸdi‡Trð$ÿ×ÝXÌK¬äõg/ó鋈:ó57s-¬sÖ°5ÞP4Ö]¸×ú-·p„BHËž]ˆÊá�·"î?Žîî\î+árOî±]g·ë(™„°+­ ª3ÜæiÑé‹Ó«ömš¿>%¶—C4ÌùSŠë„B!„\ƒÚ¯Ô ©™¸ÝcšG^:¡*^£´,Ãí£Ñj5*¦a�¬Yª®vù…]¤�dû~çöZŒíwD™KÚ­†é2«S7ÉÚ^‰Ç-�]8É¢Gs0i 6[¦·kq4rК=?ÂÌQÏ–ï¹î­uˆþëÅÊkG¨&Âj`½Ýp G!„,$>z/)ÎÂ~#&ñ2I´Œp¹w€!¼gMRÇú²ÉÕnÔÑr²÷Ž‹}kGÃl.�Ë3àßòì7B!„BnˆƒÚã÷þ*„?ù¿â®�£LÈiÓí©9©Œ�™æ "c¦E·$Îhyâ`W Y$¾C5[-¹Ú ‡|ÒV4HE¿Ðõq÷yIQF¼v"ŽÓQˆœÑâ»å°Ÿ<@™Ýûq‚˜GÊæÓ›;`«NužšÔÆZ3­˜ø žg5¹µ�Ð7cCf{iPêÍ ÛfEíµÔr­á«7Ae¯ëÏÎk~{`C¡�B¹ÑRõâ4+üBo~ep¼¯Çl÷Ltop¸{E޹¯ï•¸.òÖ7cÖúÅ â“�(ªB!„òœ8,¡½ßî£!dæî†38 ©hk Ú- QÝœvãõ®=‚ƒpµ[ëcDÇÌÂ=ŠÉ2ôQX—îö¤Q—jàå:Ó£í`/ºØÕéÏ™öÜÚèÔ˜×uÈÃi´Šw½?æµúšÓ^;ß½ƒI0„ùh?Nã3æ³B!Ï…’C<¼ñÅ8GάÖv®;`Ÿ‰iFèŒõÍðøºÔ !„B9PhÝÐZ´…Õ$"Ç\EÈÌ*s¡ùiæ w‡IÉÓæ;IlKÈEr×½? Æmºª\ëU—¼zê|grª�óáhŸÞkrPÁ8UY‹º^#.ó4g+ ¨ÁÍK"üÂ(™ ϱ2äÕãÑr�»Ý^QΊ×ï¿"¾Gýù";…vB!ä ˆ�Þ§N!„BÈ+Âá:Ú-ñ6¾ Üa4•·¥S|ßœö¸ËA/ÍK9ñ¥(%š[縉×n‰íãc�Ë—‚;Äã¡=Î�ô€Œÿ� ôòóÉ–¯æñ>ºL|‡±\½¬F1>êe•¾ú=•ÞG!§½ä¼—MN“Ï éºeB;¡B!„B!„ò¼8,¡}»qbH€\PŒ"�Üjˆ:�Š«á 9íÍñ1Ff{Öµæj/5?Õñ0@žùŽ\lŸbrf±}šå;'¾üL¢áª×"²þŸd�9ÅãÙsôrÅ{¶^/VDø,ú%Öccc}`./†xO`·ÎÖ°Þ¿Ñ›Às´ËF¨Û O#'„B!„B!ä9qXBûé#àþcNÕLÓSK Q•h\Ëi×HeZ¹Ë“¸T Z44?u…øŠØ®íëˆ�;ܧ’·ªíb^ÓáîˆðzZ¶c: ™ü¬ôÄ&×¹×øÔiPjæÈ[â¼Û¡zŸ™<8‘E)A‰ícC´~;4B#„B!„B!„<ºCZ™øãÿæè‹mgû< ȳ¬ áì¶ãd6Å\f2–o‰¸žCÛsZ£1%:ÞYä‹—ç­"Gb?4JµnG};:Ík "{tò˗Ο| Ñÿ¬Ýï@ÁÝ^ë  ŸSÌg÷¾#Æki> a¥Æ´=ÇiçO¸u#„B!„B!ä9±>¸5ÚnWnliˆŠ¼ñ' œÙº1ªŠf™çêñ12 Þ‰‹YìjWËÏæ·òÚk¯!3äc3GçìÞr³“}8¨4í¯+_|©˜Ž79ÚÝìÚ½že£7ÆÆ¸šyK>»á>w£ã§zò\C¤Ÿ.ý.6†B!„B!„òü8@¡ýªÜÕÌi�yN;t«èä­CÄÅ·a-C-OŸ‘áÇòXg#Äíð"„B!„B!„<7ºƒ[£íÕ}Ñ÷vcT/&ÄÔduä`º�[a&O/Ä‚ã]DÈD+ÏÜ‹¨Ñ¢¬\®ŠÑ ÿŸ[Ÿ‘÷¯*ÆÆèïŒï™ñ¿1óÙ­ •¨˜,[ ôàêœ[6B!„B!„Bž#ÝA®U¿1pzB±Á!…ß$ÆÃØÅbåsMqÖøÍ,�inž7ˆí%½'£,º—.ZŒ‡'°G{�Jb´{,¢òYÕ>ëêÙr~ë@ ŒÏ<–?o«ykòX!ÿÞj*›|ÆÞÙBhßn€Ë3nÙ!„B!„Byެr­6F|L-£=‰H× C�Œviž9vÏñš¢J6„rVû´f£ÓJ^»•ÉÄzO© Yn»^ØÙìú9‹ÑbtAô/ÎcÅßì³Sò‘7=Õ‚wöÖ¬ uc¾Xjz ûÄü¸söEòúÖ¼½ãf…ö óÙ !„B!„ByÞ¦£}s1ˆ†q»Ë�ýî:�r޵xêv4ÜÉV¬G'¾A΢iœìñR£QÛ1`”óÙM¬ƒðãi²÷­Öw/‘½á³ÔÓjnvýÿ®6A…ã|�öz¿o±ò]Cê€oÎgßWçÌg'„B!„B!ä9s�B{üÎ_lE|L_È«F, ˜Vì‰çF®Š­ž0måÀÃÉ{W®%¶G;’(î–ðŽBN;òè”–ƒf”Ì‘(|xöünŒŒáf·^£*‚ë½áR÷bŠJ±1ò �ã�Í¡óÙC!„B!„BÈ ¡;Ø5ë7cFŸæµ[¢cæ`‡“ÃnågbrÉiœ<ÝqQnú)çkÉ·Äv++¾&¸›Ï[rÑO+ ìÖzÉùà|hw¹·L‹Þ‘ ÉÍ8ëå5Ûu¾cž«½v;–ÜìFÔí¡B!„B!„ò8\¡ýêbÛ·FST-º™û×t³C][ÍUÅ:T]ízŒ™=2Çõz™br)Æ‹ƒqÜê^rŒåt·Þ{&°[.vçs)Å®TóÚ‘f®ðŽv7»{f„u…x¢Âÿ¥x0Çkzªýî÷±Ý‘K„B!„B!„�çÎá í�ßGã‰ìº¡¤'ø.m•‹½ÈÕ �·i²Xl�G¯©&Ô{„ù¢) º±ú ‡õÚ¥8ãsiýl¬é¥†«ž»=â¹u¢Av¬Àù^yñDÖ��h­cbÄo@f³o¯€‹Sæ³B!„B!„ò8X¡=þô[CN{¿U2“Ù—3ÛaDÊx®v-H{Ùê™À¯§ËûjûŠíV "êq2º±&4@5–Ã_tmùY…¦¨ñ:Ÿ•ê-ñ~žç†oq³{9*ñDˆ¹èÕ÷eQlŒÙG¡ýü)·h„B!„B!„¼Ö½v›Ë1c›GfÄN] Œbde°ìA\c÷Ødã4=Ké´y™!¿ãø2ãzÍӯ׮NÇn=§×ÎÖS­à¬c§õÒr\ðqæ�Ž[¾ä4÷æY*²G/ ¿v ¤ÑÍ®ßgtrTäÈõ2Du÷~ïÇÆÌùìWÃo…B!„B!„òBèzí>ýÅàÔÕ®ö^ ’½µ¡šOF'BÆrµkAÕsÊOO1#d`äµ£]H®EÉÌ«[Éb×Ó¯uÑ‹r^#FßyŸÌ§æ)6>­|fnæ{)Kþn|ç~)žÈѽ³0`‰íF6ûtÙl€‹ÆÆB!„B!„ò‚8h¡=¾óí0 íq¼ôZxtÄQÀÐclˆ9Aq’éܵ™=¡º™åê ôtø™êÑxß{ý3`ä·C­oÁÅ^kðÚ’WŸÅø~~í@H´›£º·�ÜúheÏë&N”Jq1}þ· Î±1—ÀÙnÍ!„B!„ByA¬~ ¯.€£{ÀjtµwÚÝÛ‰¸!Ó§q,“ÐÂn~@< ‘+B�MbcÔív33FdŒŒ}Y#±îHcbâx;yý�ŠÜA¬SÂ5Äv½ýö-‘ß}m'ò%›ç±¢zÂ{á~²^^ó[/›Ýk† C”7B¸îù¾ º«È˜)›}sÁ-!„B!„B!/�îÐW0~ëÏ…«½7ܾâÚk&éÆƒnćép·šfêÇ –%“Óœí58œüïÄån­óÞÿ ˜MV�|ÙI³Së=Dã3³>KP‡=6ŸÓ<6;Ák| ç;�ô�Ï…Ø¢,¿½Ð5ËgïwJýè7³›�±1„B!„B!„¼8Ö·b-7—Àúxtµo�®3𢆴ª¼ÎD^ápŸo‡ñÏl—÷�ö?�Ýëâ±ÌÅá¢_àlw»v«Oï­µª|Ÿ Ę™ð¨4Eµ²í=ñ\ü-QÞÞa îÞA'‡^�nv}°¦–ÏnÅËd�Oû1>i¼l7ÀÕ%pqÊ-!„B!„B!/�Û!´_œÇwÓ¦¨¡q1]*LN6z v¢{G"âc´˜­gI"d´¸;2fZ@«Ø>¿~؉½A¯#vÁb~ù‹ Ð'|ŒþüE�°£d¢ýXQd‡#¼{÷årKq1VSY/ç¿äfoÈg—M}aEÅHGû(²o¯€«sºÙ !„B!„ByÁt·a%ã÷þ2`s9ˆ‹qëçVOQ5!Ó½¦( øñ3¥f¨Ñˆ‚YÜU,[GµÌ«Wi‚jª .úiÞ² ëeÅɘQ2Æc5‘ÝŠ£©æ´k·;òc0æ÷ÁøìJnöäÿïÄÃ@»×UlŒ٧ؘÍ%ðäCnÅ!„B!„ByÁ¬oÍš^]GwwBcX �Qûnp·—\íÃãQ2Ò¤Bp!�Ø(';r×ù¢±Zž»].C>!ŠûVTWl¹s?¡%Ó½ÒÕÍQ×ÏÝ#Ç~žîDÈD/—]¯[ÉÑnÌ—ˆêú1§?@r»ÒO ؘۭÍsÎ-!„B!„B!@w[V4~ëÏw®ö~»-Q²(r64L… b:Ú§•ӹߎàk6áÔb.lw{¬4ÙÔÂpSTç½×ž“‰Î€�Ï©ßÚµ6ÝËi·Üçpš¡–"cœïCòžjÙí…ï,a=æq1±WÙìÀÙcÆÆB!„B!„r¬oÕÚ^]ŒMQ׃øØ !2„ÔÕDƒTˆæ¨Z( ¢™¨´¬g.sØyí™cÊ¥n9ÛÅ´iyrÞR6{POJæ“+ •þ° ª¦ÕñÞÚuqV{Md‡šOÏØÑ?p"cÄ󽃱ñÀ�ëfï »ˆŠñ ŽÙìl‚J!„B!„BÈap»„ö“O�ã{Àv t›16f¼Ä0Š“aw‘ÍP¥ð”XÆÛ:B&Äa4GcX¦åµŠíK›¡š�Põ:ò`â�*íùkËù£óܨšÑFçö"‘ÝÊi·îë\ö’£ÈcaÄ4×9¯ÄsSX÷Üìú² PG¡}s \œÐÍN!„B!„BÈ�Ðݦ•�?ú¯W烣·ŸH¯‘EȨ&Ú¹ìÞY V“ÕÑ=û>õvŒL4¾ÃÚ;¹®Î€“O¸å"„B!„B!ä€XßʵþäçÀ¾:4EíV@ØŽÎö~×µ@„£=ä9í‰PÝc>îtCјæ³yCTÈvý„Ë]æ®Ão¶:¯¯Êz×®õ,›]»Éo !js#TkzÍÁ.牕Ǥ�nMkq¶«ƒf\ ÊQB-ÑCæýÞw´÷Jl7Ýì—À9Ýì„B!„B!„Ým\éøÎ·wYíÛÍN”ŒÓÅÉj7§ÕDÓ¾ìn/:ÛaϠͽí5æ„árG97Ýͯ]*™í1Üë-öJÃSóóUŸE)iF{±ªç`ïëb»îàÆÅô;�=q³_ÒÍN!„B!„BÈ�²¾µkþè=àèΘӾ²ÙC78Ú'Wût™ÝíJ�sÚÇlw-~O•Cn9Ñ-g{öxá1sùA¹ë­i†Ë°sÙƒ6BÇeŸy,ͯ³ÚcṆ˽Éán4B]$²{Ñ?%Á݉ÕqïB0God´‹û}LEö9*FˆíÛÍÎÍ~ö„nvB!„B!„B�î¶®xüé?\ží\í³Xe\[NvxNã)¯]»�„Y72°›o"€‹®n8�:�fŠ”)6F­Å‚ômÎö艾–Ø ßÅÞä7be} —·ô"Ÿ^Yv¬¹ï-‡¾Ñ(¶–­¾ÄÙ¯›ÍÞø½°¢‰ä÷Ί6’¹ì[!²o¯€«sàÉGt³B!„B!„rÀ¬_ŠwqöX MQ»Õ Vf®vq„&=YË¥«½W×#‹š¢:XóµÜžî'îõ ÖIfØû~Ôҧؘi„ŒŠÇÇGÇÀŽ’ÑÏìØ)¤"ºŒ„ ZäV råZ+§Æû°« —;R1}ºövOp_ÔUß_ÚµohÛòØc½ùioDÆL"ûfl€úä#n¥!„B!„B9pÖ/ˉßúóþèÏ"º1«=¡}r·#]uÔ°3«'Z±Ü•«=»ÛÅâ æï“Ó•0®vé^7Ew5¿ùxé‰(=Ñx(ÚóGãùZ„�Þãû<ï ä³/v±÷ âºÊdw#c”Ⱦ½¶£È~ò)#c!„B!„B¹¬_ªwsþDDÈŒb{£è¾Ý Û=v‚;`ÄÇ`|ŽÛ£ÛCPÓ¦çal-•;¨ùPpÇ«¸)Æåf©Ó3.Æh”ÚB,=ÇŠ‘±u1½I`GÁÅnM»)‘½/7B­¹Ù{¯1ª%°‹¸˜ífp²_] M~Ù•B!„B!„�[ÁK%´Çúë1B¦SBû¨@éj;ÁÝŠ�‰Óý).¦…n™Ù>MÅüI ¡-BFRܭؘD`WóXnw9ýZqíѹk¸Ú­ìö½v=}Ï|voš'²Ï_”›–{Ýj°ÛÛ�y“lö�ˆŒ¹.§À£÷èf'„B!„B!ä–°~ÙÞÐ!óŽ2":&tƒ°‰QDV;òø˜èÅÇÑ1Óô š­N´ˆëKš¡ZvKtÏÞ“zò 76NŒ¥™Öø˜›Èg_àj/6Bí Ñ1}!·] ïÛÝE ]䲟|B‘�B!„B!„�[Äú¥|W§�€n�fµÏʲÈMï…ànF±«ø˜Ùµ.f¶ôlºˆ�™¢eBXàj‹ ;ÊýL-É6^÷CŽåƨVÔLT f[v3ŸÝp´gBºx¼¹joˆì¥¨V,L!—}v³+'û$²_]OC!„B!„BÈ-ã¥Úã?ß$`Ä-IDATÿ]ð§¢1ªp¶ÏåA$Å_lÐyÎöIÀ—q2¨;×݆¨Æ2öqµËé@ší~³Ÿ´qÓËf�•íQ;ßFÇ”\îîíÞq²{.ö¾ÓO.våjOâb”“}3Šì�Þ§›�B!„B!„�[Æúe}cñ;Â7þCœ…vB;Æke\Ï’aúñ9³Ã½�Õ>«÷ADÉ$ª7Rw»š>O‹¢!ªž?îrç=�ÝÓÕ¯+áF÷ÎnÚÒlöä>n¦j-«}Šrãb¬È˜¨„u+.f+ÜìVÓÓé2‰ìW£“ýxüEvB!„B!„Bn!ë—ùÍÅü�!üџŤ1j&´�t"Ê%ÛG�½Ç¸ GpŸŸìi¥¦èž¸Úµà#:í{0Váæ>a?>Ær¸_;›}ºVÂzITOì0šZÂ{ÉÑîˆî½Š‹IâcT\L/DöÍpuœ=B¼º ÈN!„B!„BÈ-dýÒ¿Ãw¿ |ùëHíBpŸ´Ú~œßíyêÙÞ-‡; Á;îv³9ªà ,�މ�Ëô(>¿ƒ\\Ÿ¯žE6; "{©ªÞ+±1}¬DÆô"‡}›Þî•“}s9Šì��§ŸpkD!„B!„BÈ-å¥Úã‡? á÷þ÷ÑÕ.…ö‰qZÄö`\[™íÞe^«Ý´%íµ¼v`ô–EÇ,u¹ÇÒ÷ˆŽñ„÷j6»t©?‹lvåpï{§ªÎa7¢c¦¸˜~Ù·£È~Î\vB!„B!„�ÿ¿½;é‘äºÎz3³ª’"KÖB¢IIAK%Ö%Á …¸¯lxkÀ†í…a‘"%²Ùs�™Ï‹ŒÈ|ñâEõšCw�cJvwE5¸øxñ]xÙ�܆o2ýÇ?ÏfñÛ´]Šš=ÌÏûaõþ<¢ÛkSíKQó_È�G½+>ŠóÚ½Í! ù71mÄWCûYõô iï�¸QmLy=¹u×T{eŠ}gоO´—ÏV«ú"ÔAȾ†ì«U7¹Þ->]^g�ì—ÛŧçÏ"ž~ééBvxœÜºïøóÿ‹øÎ;1 ®{Y<ëÎçÝÌYZŸêaj#ï«néé‘]íýï9pÎ Ü‹gµ‰øM}ÌÄç_H…LÚ¼eµ1Çv²ïšh_M/@-Ÿæ!{ª…ìËmؾÊ&Ù¯.".Î"ž?²À+äÖíéãÿœÍÞûeuµo>ÐçiO…Lºgaù dŸ�íY~²£«½OÌ«�íµÏF%¨¯uºç›U�~{;nMëÙ³©¥§ƒÏ×–¡îëe�#‚öÕøz_Ð>Ù—Eؾ¬t³÷ûõ¶“ýú"âò,âìQÄ“Ïý—^!'·ñ›Nÿóo³Ù�•Fa÷ ^lsò~ª}PÅ>Ûfé)[²:ÙwM·÷¿a~¯Ô³p}ª»½ Õ§&Ù§úÛ� Ü÷Œ¿�ꇦ¢�í{§Úwìùý#'ÚGõ1SìÕIöU¥.fY¯Œ¹î–Ÿ^õ!û“ˆGÐ˯˜“Ûú�§ÿþ×Ùìý_âEÄ&à~:«E/*dúÐ}´õ� ™}íQy>1ù¾ù½³û»jdjß[Lä û‚õÑg™j¿Á"ÔÉóUqï&ËO—Å4{Q³édïëbη!ûÃß Ùàtr›¿ùô_ÿ2›½ÿ›²\<†×)"ºéöUÚVÊÌ¢Ýó =Æ!{š9x9Íž‡èSçaûl6Ô«52ÙŸ/†¿Äa/lòb{¯V%S ×óó"Lßœ×îáû!í7íe„ìËÊ4ûDȾY~zquqö8â‹�…ìðŠš¥”¼„÷“âµ7#NïGœÞ‰Xœ®¿æ‹ˆÅÉú8[DÌçÝù|}>Ë¿f•ãl{ÙuäǨßÛæ³â<*ŸÉÎϳëêå±¹oF÷7§­‹P§zÚwõ±GŒÃõU%l?$h/§Ø‹iö²�}´w!ûU²_žE<²À«NÐÞ¿ˆ÷�âþ[wîEœÜíÂö“mО•Aû|GØEð¾+p¯^wÇjŸ&{6x>ø.o¶µfj êäT{íüˆÊ˜þük©ŒYn�y'ûj¹žb_å�ìë¯ “ìp[Úó—ñã_¥xí­ˆÓ{§YØ>?‰X,²ÉöÅ6\Ÿœl?pª}¸ÇÄu ïí›hŸÓíQ^¶æ¾µÉö]Síµ®ö]=핉ö›,A­N±ï™d¯N³çA{^S©‹¹ºˆ¸|Þ…ì:Ùà6´—/äO¾Ÿâû?™˜l?Ù†ì›ÉöÅ0\/§Ûc6®“Ù¸GV#SÞÏ®÷bø¬ûÞpjšx–ÒøßMµàý˜%¨µë}“ìµ ™¦Ùû€}PSL²o:Ù¯#–—]]ÌEWó(âá'Bv¸%N¼‚¡ôà£Ùì�S¼ù§ÃàvÞ.ÖÇyvœÅvaê,uÁzÚ†íÑ-MÍ—¤ÖÎÓl»È´_r:+—¢FL/I�ÊyÄ0/óß›üÏ–´§«ýíÕŽö}{Ôkb¢6Á~`/û`ééT'ûUÄõu6É~¾ždþ(ÒÃOìp‹˜hßõr~úÛwï¯'ÛOî52'Ýôú¢8ÖêcæÃ ™6Õ¾£§½Z³«£}W6|ÌD{Y+S™h?jjo_À>Q3ÙÉžêázZ�ûØÓ² ×óIö«m'{_óì‹H�?²À-#hß÷‚~ò)î¾Þ…í§Yo{¾µ¯“)ûÚû{}h~`à±ã:b:h? §}ß4¾iGû±ýìSÓìÙóÚôúÎiöC&ÙûÚ˜=�ìW]È~ñ,âé瑞=²À-$h?ä%}ð·ë°ýô^¶ç�{9Õ^ék¯-EÝð±;xŸ\�ÚËû›Ã1SíG˜êgßY“?/žm*zb÷âÓÉ ÷ráiºWºØw-?­†ìWÃNö«óˆó§�>�ty&d€[JÐ~è‹zï—)^’º¸qr²ÜçY�L>Ý>šh?$p¯…ìe•Lí¼;n,E-N�Zˆzp7{÷ìEO³�î­*Óí{&ÙWA{¬oêbºå§}UÌ&d?‹8{ñà#KOà–´ó²¾ûÃßy'âÎý®³½V%SL¶�êdÊÎö¢Rf¶Çtèž?ÛœGq>êaúî“SìÝýr’=¢¬ç绺ٳ }rj: `O†ìÅâÓMÈÞ÷±_¯—ž^ŸG\žE<éá'v@Ð~£—ÖWÉä½í›%©}oû|{M¶»u×d{wŒØÝÙ>xÛÏÝXñ÷¦¬‡Ù*çµÉõê{voؾׯ4;w²/ó¥§}Оõ±?ù<ÒóGBv "í7q?úeŠûßêzÛﬧÚG½ív¶=ÙÓìeÀ>«O³ïœp?ÔŽ…¨ÕP=~L/{v] Ùwì• }²/·U1ƒIöëaÈ~}¹þº<[÷±?ø�ª`@ÐÞúÿüïÓºJ¦›nŸŸU2‹q…Ì|¾?hM³ï Ù§&Û#&Ãöѳ#¥c¡–Õ1SÓí»žNœçÁzä¡zª/=-'Ù—ý4{²oúØ/ºª˜G‘ýAÀŒÚ_ÄK|ïoRÜ{#âôîvº=Üû™Q_û˜d_Ž—ž®²�}SÓ/<=_WÅ<ü$ÒÕ…�¨´¿È—ùÁߥ͢ÔÚtûä’Ô©*™}¡{V!3®Ï*÷öJ•Ó¡{°o®§ÂöÊõÎIöÕq�ìeML^³éb¿\÷±÷ O}*`v´¿èú£¿Jqï[ëéöEÞݾ×ÉìëmÏÃõêTû‘ R³C=XŸUO‡�륲«}"dß5Å~èâÓÉ }bš}°¯vO±_wSìçÏ"¾ø8ÒòZÈì%hÿ²^ìû¿Nq絈Ó;‹Óõ×|Ñ-K�×»ÛîL·S#³9ì«’9P5|OãûÕ°=Öûc®G}ái²Ou±o&Øó�½˜bö0Ò“ÏìÀÁí_æËýÞ)ÞøvÄ�{]wûéÄ¢ÔŸ³ýà%©1qÝ£vû¾|yâïÊQýìŽÚôú h_KO»0=àWeûrØË¾™d¿ÎBö«õÂÓëËuÀ~þdÝÅž’�8Š ý«xÉï|˜âþ›§÷ÖÝ틾¿½¶¿°*™î¸9ﯣ>Ù^ímϤ=7ʰ}ß"Ô½Aû!ËO§¦Ø+{­‹½¯‰yð;;pc‚ö¯òeÿà/SÜ{=âän7á~ÒUÉôîóáÂÔÙ¬^'3¸G}9ê¨BæÈ�½T]‚šÆ÷«{L1Y³oéi¤a°>èc/jbFûÕ:`¿|ñø‘.Îì@Aû×ñÒð‹wß覞�ûTûž ÷£¤fçQÞ?@5h�a°ž_OVÇ”U1«¨O³Oõ°§íäzÞÇ>šbÏzØ/žG<}é쉀x!í_çË÷ç)î¾>¸ç“í‹#»Ûc|½7l/ŸU¤É‹ªcöL³—1£‰ö²�=›`ßt²=ì×Wë�ýê|ÝÃþø�‘.ž Ø€JÐþMø!¼ý“u‡ûÉݮýÜGÓíå„ûl÷„{ÄŽ™ì|û'šø“î[†:µõˆÊ˜>P�© öbz=¯‰ì—WÏ"|¤ƒøÒÚ¿i?�ýu.M] ¿ò°}^ÖÈ”•2î›Óóèr‚}s8¦.fbùiZíXxš×Ãä!ûÕ°ƒýüi¤‡Ÿ×€/� ý›úƒù³Ÿ¥¸ûZ·4µŸrïÃöÅpÂ}^[’Ú_ÇD�LÑÑ>ˆ¤÷åÓ©8ͯwìùý4^pš‡ì“ËNkKN/×ì—gϾˆôü±€øÊÚ_†Ò»¿˜žrß¹4µV'Ñ¥ït¶oþ1Y3êcïÿ1QSv±OÖĬêSìË뮇ýz®_�Gœ?‹ôèSá:ðµ´¿l?°wžÖËSï §Üµ2³Ý¡{D%x�O¶Çö~-hL³°uª�½¬ŠUÄô Nûj˜u÷ºjà›@Ðþ2ÿðÞþi7é^„Üîãð=¶÷'gR%l„ê«==ì«m°ž²å¦}÷úÕźwýñ…ëÀ7Š ýUùAÞÿVŠï¼qrwº÷ÁûTè¾+p�(B÷ iß4{ªWÅT{×WëÉõÕr=µ~}quñÅï#¥$\¾±í¯ò÷{¤mðÞ/Q]dî»je"†ýí™Tœ¤JÀ>US­…é‚õ?þ¯PxéÚoÛü»?\w¼Ïóð}>®–©.K�¢5fª*¦ ×—ëã²[bº¼Š¸xéÉgBuà¥'hgøâÛo§míÌb8ñ>�M±—¡úò:âú"ÒcA:ðê´@ƒ¹W7'h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€‚vh h€ÿù�ÓSÖ¢IEND®B`‚atomes_1.3.1/data/pixmaps/jpg.png0000664000175000017500000000660215212624223016371 0ustar lerouxleroux‰PNG  IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  šœtIMEà ±AÓ IDAThÞÅšmŒ\WyÇçå¾ÌÌÎîì²/Iì;¶·Ž!/$­�@7qˆB¢R $i(¨ª(j�¢Pµ�* ¾Tõ¢´U*¤B[”$¨“:/œDQëhÝ;ëØÎzw½žñìÎÛ½çœ~83³³³³k¯½R¯twîÜ™{Îó?Ïÿù?ÏyfyìÛ·O !Â$I4ë|!:ß62™LãŽ;îpkC¯a²-I’|ahh(o­½T#—ιöÙÓ¤fò|éü¾ýÏícï�{këÄZ{ÝÈÈÈ#;vì`5 +Þë¾µ–4M1Æ�¦)iš²°°`�1�™:óÕ<¹{÷îÚº2Q‘Ëå0ƬÙè^÷[žh�H’„0 e£ÑØ.¤øöää¤yå•W~|ë­·Ö/èùÖÅ_|é‘ͧçÎ|Â$&BtM*pW_uõƯù­FÇFqÎ-3JÑ1€!tßüZëyçÆZF #Œo' CŽ9Âàà SSSg§§§Íd2OÝwß}•‹òÀçîÿƳoüü1çü]!%H„+‰18¬7B ÿ*›I‰€M`€’ËKÑœ`1–­³ìÚt_ùÔ_sÓM7ñöÛo3??ÏØØSSS'O�:õx¡PøÑ]wÝU½ µÎ•Š¡@8!Há�o��)�Im‚R©%KjR„è @kÕDà�3Î"¤@)�’Ò{Hˆ¶·Àƒ1ÎR©U)–Š(¥‚­5c6&Iò�éééÚ«¯¾úô®]»ˆ):YÑy)šK,|òßà�¿Å¯ßù ¿wómÜù;{HLÊ+o¾Æ oüpDaÄ®÷ý6·\· k-¿8ø2&^C+Í¢»\5›VH‰”ÞÍM (¥®H�ù‡“'OÚýû÷ÿtïÞåj&/:ˆš«x÷÷²ùªÍ!øÐ ·¢”æåƒøÚÃ_æïüÎ9¾ýØ7ùìqøÄÞ¿e§ˆ6Í]ÕŽ3¥J)¤” Ó?ÐÏöíÛ†GFF¾uöìÙ?xöÙg3«xÄ-_žG’$XgÚô9<ùk~üÂOøàõ»Ùºq ¿ã£Œoçwÿü.êiƒÔ„ æ ~†ÞèT1!RJfff˜˜˜ÀC£‘ÐhÔ Â`ÃØØØßœ;w.}ñŲgÏžÆ2�z¿rzõj³uã5|æÞ‡xðîOò³—÷±kçÍüâ¿I¥VåÑû?Ͼ¿{Š'ÿó•ùæ ®÷ÈÎ{ÄZK6›¥Z­røðaNŸ>M¹\¦V«qvö,Åbq³”ò[¥RéΗ^zI-óˆ[Ád!=äœCJ‰±M�Xà ã×ÑH<øøŸpàÐkܽû.n¾ö()ùÞϾϛÇñÄ—¿CbÒ.®¼DƒƒƒìÝ»·+ÖÚ¦gÌÏÏS,¯š˜˜øf__ßÇ€£K€ˆUhå¬%“Ͳsëµl¼bS³gAÆ<ùüÓüÓSß#úsy¾¿ïßùôGþˆGþê6�m$P\“:Vp>Öºv|h­—$Í–Œçóy¢(b~~~çÔÔÔ–e@Ú£;·Œóâ0æáþŒ'÷?ÍÑwŽpìä1Ε‹d¢Ø‹žœž}—�é!>ý‘ùâ�$Mùâß…lœi&M±Š´,Ý™t;E u_k]·ÖÖV.QÚÁ(Úø„PËE>ûÕÏ#¥D5óÅ¿=óC ¤j(©˜œ:Áןø[�!¼œ†AØ¥X«}§Ñ-褷”çšªÓ $—‰òÙ>ѬÚY[��'|ârÎ6³¾ÏøíòDJ„Xô¦�þ9––:‹™¾ã¶u–L#¥\B£–gZÀZ€šà¬b9�Ø„?ˆëZ&µdăq‹“ƒÛx冭;Æwìéïïoº˜ù»ÙØéÕvMÕ±ú½|1VaÓÕ›ÚÁ½RñÙ£”²J©å@þõ_þcø:õŠÃ¿úÜ_Þ¿sçÎ=ããã8ëÚ+*[¼wË•¯×Šzñp8ß9‡RŠl6»$Fz§tœ½bÄóÍsÙ±mÛ¶ùB¡Àððð’ýÈ…6Nº×ù¾uÝI¯N@½¾{)+Ñùp÷Àkü¥<Ó \÷"®yÿ-¥¤T*Q©TVœ¼—ë»Ë�^Ÿõ§SÁâ8¦§—ºC­‹Å"Û¶m»èWòHgüôzí¾n4=z”|>Y@–'ç ‡Þ5(¹JœàUÊu•C¤‚P;³Žj •†£��ÁÇLÅquÎÓËZÛÓ›kÒÉË_7|íM6\-Wƒ’>=ëï()ÈÁÈl…‘Ø a¶§J0> ¹Ô •=›ðÈöú’Êæ’ƒ½×ÙH°aPë’ƒðÆhåW75`¬ `÷6¸ñX°P¬Ãø{àý((ÕàØYˆ|‰ÆPÆ/D'ÝÖ…Z­ÁB…Ø‹ûôîy„)!”`XaFÂÿLCbáš!ˆ,¤PK}"¨Öa „ 8>Æ:DW]2�î‰4 å!ax³�oìLÉ£Úƒ±Ö–É@7K£È‘¤PªÀ`a*5ˆÍM“sVH�k²l¢À±aDðÞÈB&ð+:’ƒ3e85õäc¨&P­5­R�$°uúBÿ\j`4#(7`ê¼=u¾9sGWrÝ<Òh´·e@ ('0S�þꮀ«ú¡R‡¹ÐæÊP®ƒ“„Þàº�Q ïÎC©}ä#Ø8s_n(ÑÔºuŠ‘Tk½d %h¨[°rYO!'=í¤€� @µWF0l`!¡Áài— a(}J BO¹f«ðvQ´�¬KŒt{göÜ4‡gÊd³è@37sœíÛ®Gé˜yëYT®A=ñì52p…%½0Hgj@ ýꩈj s v ‚¨¹U«�K–_ÌLŸæùž£¿/CR­ã\•ÙéƒÜùá?¥f©ñ1gü¯VZ{ªU�÷f6ò»DT­Îâ=,šs/z_¶ü:kI ÊsE¤uH �²œ8~Šÿzö»Üvû§ÈÆ9ßaDÐÚsiá¥6uÞøPBÔ¼í¾°?%KÍòÖ­^—•­k`Ò*Õy� ¤4dò!ÓÓsüè‡ÿÌÈÐ0›®ÞÆÖÍ[. j…µÞ;Æ�3žnÖ8ÂÀw2­õ`¤o/#…§›rvY�vÉÕ¯ë’Àj¥ÈlñÙ\Žz©ÊõGä)ô�Q{'arò]Mäúkw²ûÆ1ñŽÏ5&58¤t”Ëú2‚+ßó¾�Y®¹ëlªµ–ô,,/K~;¯ÓŠ¡4užpK*_ ^ž'™M¨�Ÿ¥2’ЗŸ#§‡8}æ'fŽðÜÁÿ¤R/#´clè:òñV„ èËŽ3;G&g8zø·i°~rµå«oød}ÿ!-#í´Ž�~ëTÚ8Ì㳘† ákAG’˜:Eš²— sU�Ðìx· íé¹õH¤nLv„èzàdº§*‘KMì­oRl4£(� xáå M}“¨ kñ¸IH–�§+E(: CsñÑ?¸bÓŒÛ6MËhòÌ%^ž_G‰y}ñ³¿¥gnè’"£”ì’5r˲8Ú±EÒd¯E&Ÿçêb·mš ¸úIÍ.§ÙqÌý=8Û’>Šv—¯É,ðpL!ôx# Z¤A–_€'XfàÜwÂÙv>~¯uÝ{ÀÃ-ì,[ñ­¨8õN‚ZCMwâøØ¿ÿB‘á×'ok˜fëiðîóIEND®B`‚atomes_1.3.1/data/pixmaps/png.png0000664000175000017500000000773215212624223016402 0ustar lerouxleroux‰PNG  IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  šœtIMEà ±AÓgIDAThÞµšy�W}Ç?ïuOϵ3;»;»k«Õá]Û:lù’°LÛ0ÆP $ $˜PIQù#)’� !\U®ðG’�PE6ƒEˆ˲% Y’ÉÒêÚ•öšÙÝ™�™îé÷~ù£gF³ZÝRºªkj^w¿þ}ß÷w¿V\æñ“ŸüÄ©ÕjqcŒ£”R\çC)…ˆˆëºA*• î¿ÿ~¹’çÝ˽±V«­ÖZ¶§§'c­½¤P—sˆ͹DÁs|vvöÙ;v¼²mÛ¶Úu†á†ÁÁÁO aŒ¹ ÀÑ~­ ƒ1†0 Ã�r¹l­µ¿=>>þÅ—^zé{›6mª]W @2�“J¥. äJÆ›`š êõ:±XLA0¬µþÚÈȈٹsç÷ï¹çžK‚iÍüÅùêªéûˆñƒx4®@)�(¤7�¾}hùÀoå{{‘óÍ ´”€DÏ+ÚX@�ÆÕ¸&"X±t§=Öôõãyo½õ¹\Žñññ©ñññÏ%“Éï=ôÐC•Ëb¤8Ãì;$‚u«¥QhD+ÄшÀÿê$V�@”�T ($tÁÑ ‚ƒUÎ9Ë¥@4Vë& Š[—UøÌ–·oÜH*•¢P(000�w]÷Ë£££ê¹çžûÎöíÛ«—2_öãˆn­]S Pˆ@Ý@ãh…ëjÐ+ŠPYbŽ‹8.+¸®FÐXå`D0Ö‚R¸Z£•ƒhÕŽ+ ¿f(gp‡X,†ëºd³YŒ1ËëõúWÆÇÇýÝ»÷ÃÝÃ7ðÔ‹o�Rx®Ãæ›úY¿¢¿nøŸ£ŒŒÏƒUàv± i­[¶ÔÙÙ‰1­Õcì'Ž3;v<÷̶mÛÙŒ>«¿çZMcµP$ã1>úŽÛùåþc,íÉò¥ßÛ†1Â@o'çí|ðÞuøAH.Å;ïX "t$cüÕG6óëë–òÒáqF óôçÒÑüZξ°EŽ 8ŽƒR ÇqÐZ“ÏçÉvæ¸qhM¾¯¯ÿñééÂ#Ï>ûlòÂ^K-r1 Ô,4–]¯�¤ì<þ™‡[�üüà >¶}=/¼q?4ÔÃh™ïîG+ø›ï¼B¹à×-žë�Œ{œÿ�‘ h­™œœäàÁƒkü€ àÆÜå}ýý_.‹áóÏ?ÿôÖ­[ƒEŒ´æµ€"Õò7pÏú|ò}›xᵓ @kÅèT‰ÇŸz™¿þØVbŽŽîTŠÁÞ,oŽÎ„†ßÙ:Ìw¾ð Ÿ|p…RM,íª�YkI¥RÔj5:ÄØèår™ZµÆÔÔ³33+]Çù‡b±øÀÎ�;�EŒØö ¸ÌÈ;)„{7 ò‹W�ó£=Gpœè/¦ùÞ orïÚA>úÀÚÖªÎV|†—õàjÅv§V7ܹ¦” h� Í®®.xà´Ö­Xc­%Êå2³33K¾vð+étú7€Ãç0¢0ÒÒ,y~×qøûoýœ'ùÆ Ø³Æ™ŒÅøÚ“¯°~0OogDxùðkºxïÝ+É¥=º;x®>»HªÝ>äØ(Mq‡D"�çy­Óu]<Ï#“ÉÐ×ßÏŠƒk§¦¦V-bDTÛ $Ò”@=4ìÖ¾Ý\U=b­UÍ—ÌÍÍ]²ò»ÐØù¼ÀsÇ:;;/ÊÈå–¼h­Éf³gYÑ¥�†1G&ÐtLJ©h…‰ŒßÙF» rV-ÛËèÖ=V,õz�S§N‘L&¯©BlÑë8žçáû>ÌON2÷ÆAMGVQ/+â1MU,~Í�Ì¥©–+€¦{ý:âÉ4Ò¸T0�ÓÚÅsâS(*A©Á$¼$®[àÅ®‰‘À‡¸ëòúóÿË«ôFO[n‚ÊÈ(˜T06 C7Á¾7aeŒåŸø[?óç̼º—z¥‚¿yˆŠ œIt±<3Œµ…æxñV,"–LÐK>»lAÊÒn'W ¤å1DŽ&Èåxás�b‚ÃK=F %–¯ÖLs Ü€î>°Iè½Áã°ÿKOìÚÅøŽ=dn[ǺïþJëF`RXkB6'݈ת‡®ÉØÛ À†!;>ý)z� b”� I:)rñNœÞy¦Ž ñ¸KßRá̈PõëÌÖêôd<¦_ÜGÿÚ>²ø(ŽBk@lCpiÔókÁb±çU©ë¢ZÅ™y^Ý}ˆÎ�óš7¦ l¾eÞ‡ô`ë é�úÑ2“¾°ÒÓĵ�éÔœörô­î"çtâ¥3à¸øa…‘É(QX±,Í µr™Ð· z`× ¤5‰‚eƒôbŒTá(08”f÷±Iî½5ÃÒ‡^B𠣞fM�¢>/̈fzÒ¢Š'8ùÇÊXªŸ•úßüõЧR›C¡±²¬k¨• Tê• ªÕUQ ÿzz¦NXƒLÂÁ ,ˆaÕ–jxŽßk‰wÀÜÜ(N<¥HvC%€3…­AíÀ1²ö(úŽ�¬”oæÀX‰´Mi�ˆi©õuñZ‹Ú›ÚcÂ×K‚“Ö¤j¯J×z!PŠ´’†ìzÅÚ0…WL¡†Ò 3­96{vËú~óªa‰Ñ—ÿ oÍ;ðâQªRªNS+žÀëZ¡ƒÖÉk¢” ]×=ˈÖä6l$;ö™¤O€Å· BqRQ÷ <Õ SpfW•ÙC‚« ‡„[ÇËZ†~Þ@–±CÿŽyõÏ?ð$w|ìhÇ0ûã�LìŸ"Øòzoú0q/y}ldAïÖª{^@JT»âGá{ГUyIˆ ñÌÏ@rÔaÃ’8ÎÊ�Ÿï)…„uÈ‹¤öý‰ KµZ$w‰…û©�=Cºþ ºSÄÖg9žÉ!¡ß(øÎï¹ôÕº_´¦ó‘2�ëaÿŒ°¯¨Xq·fþlšO’>ãô‹¥7b¤'XRM¡÷'yÏÍqÖ ¸t„ЏQÌ|†ŽÃÿH07 º:â¥çq ?†ºk…Ÿ‘-¿ˆE_�}µ®WŒaúÙg9^À¯*¹Ïef§bM¹ƒÞ‘nÞ~¯f{1Æ]7xÜšÎrdÜǯùLî6lô<6¯�“L(ÆN)f÷ì%3÷:å"hÑ„§w`‹ãˆÎÓŒ²J¿Œ[Ÿ‰Àõd¤™&”f+¬ÈÄØ¾>Æé=�ó‚Q(ÝZàÍk‚cо˜b~Y�`Â2‚É(ŽÏ^¾�ò»st¿¿D"[c©÷:SÓ†°n)ËÌÍjIbªNPˆ"ý9)ÿ51Òª§¨UË îßÂ[Ç]RU°óEÈÈ+‚[R„¾"h¾°êfEP‡Ó݆ìól»÷¶mdø¶<ñ:žç0ïkªµ�§ê ¦FNc ÚõðmrQ�vÍ‘=ª»6ö³Ä’1^ÿæ·9ùÃ')׿è�k:NkTŒQÔÇ„ò¸0žÕ,KkÆ&bܶIH8'¹!8E)ÙÃÄ„¦P™Fe<~¸×£ìkæ&géê�\·b®àåËÔõ‰#çVo7o¸ /Ç{¨Æ?ÿë7¨‹Ãf^¨ˆyб0KÜ+rtBX™Õd'…±×5Æò¼Pš›$tR|óg.Oÿ B±8ÔyÆÓüþ&KPƒu«¢Ö@x‘ xÕª`LJ3ò³ŸRó ™åyL-‰Ì{½”~�ñû>N¸lÅ‚p¤Ëg~¨‚—LÌ|”Õî=ð£}šÐv#º—Љs¦äð_{'¦,Ê‚1¶ÑèVçí»We­š $j”Kúú»ÈàÝ”wî"4o�ÛöÖ}èÃ$ÓY~Uø.'ŽZò�Â]Û*d`-QTª0S‰Q©&HÅ¡P.SC<¥X¿T±¬Òåxr#点êìWD8Q8„¥Nòþ ¬¿m˜Í¿önÞ\û'nßCêík)9”jS8Ã7³fÛ^º»4K–(Š`æ!—RŠèLÌ1Y L@6’ô,§f,$Akƒ­Wi_Ðë‰ö—ß´šl²‡lgž ÷ÝÇ-[¶0Z>½”�Á-ŸÇI߃;ým½ ×)ã‹P­Ç)Ô]n¹¥“·O”xùx@œ€_Ø:dxôAE!èfº:×èM/pÿêšiM$±«Mc“3ê_Å<×ó�²ÅŠÅZ!•Òl½i?ñÑ瘟‚yÜŽ$u›gi}Nð¾ !K“q:Ò>¹ ôÄ ×ýK§ìû õ�äÎvH¯# E6Ù‡±uDWÌW*ˆD•\‡ÛÛêªHc’·ëZB�ÖÄ’q¦*²Ì�ÄuM5{ä­¢ þ®Ž|kß´ @ªÝî ­Ý.+R"(<@¬%ߨªŽØ…�Á&«�i´R@Øhß»†õs¿–¸:F¬µ¸®ËÄÄgΜ¹âÆè¶·ÿ^¬ig­ÅqœhWàZt±XŒžžžmÓ+t9`/4îºnk¯äj�HsÅb±±X슄:_4¾XWäR×Û öj*Ä™ÙÙY399)ç~t±=� uÐÛUèB_�LcoD•Ëå9×uKW $‘H¼º{÷îGS©TçÿÇ·ZU…(~46kpD„Z­vrË–-§®†‘3ïz×»¾^©T®ûGg—ëhÂ0TA(ß÷©V«öÈ‘#aóúÿxºŸÎ%�MÈIEND®B`‚atomes_1.3.1/data/Makefile.am0000664000175000017500000000314315212624223015453 0ustar lerouxleroux## Process this file with automake to produce Makefile.in atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications install-data-local: if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(atomes_pkgdatadir)/pixmaps; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$pixmap; \ for pixma in $$pixmap/*; do \ if test -f $$pixma; then \ $(INSTALL_DATA) $$pixma $(atomes_pkgdatadir)/$$pixmap; \ fi \ done \ fi \ done \ fi if test -d $(srcdir)/library; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/library; \ for librar in $(srcdir)/library/*; do \ if test -f $$librar; then \ $(INSTALL_DATA) $$librar $(atomes_pkgdatadir)/library; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$librar; \ for libra in $$librar/*; do \ if test -f $$libra; then \ $(INSTALL_DATA) $$libra $(atomes_pkgdatadir)/$$librar; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$libra; \ for libr in $$libra/*; do \ if test -f $$libr; then \ $(INSTALL_DATA) $$libr $(atomes_pkgdatadir)/$$libra; \ fi \ done \ fi \ done \ fi \ done \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_pkgdatadir)/pixmaps/* -rmdir $(atomes_pkgdatadir)/pixmaps -rm -rf $(atomes_pkgdatadir)/library/* -rmdir $(atomes_pkgdatadir)/library -rmdir $(atomes_pkgdatadir) atomes_1.3.1/data/Makefile.in0000664000175000017500000003333315212624223015470 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile install-data-local: if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(atomes_pkgdatadir)/pixmaps; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$pixmap; \ for pixma in $$pixmap/*; do \ if test -f $$pixma; then \ $(INSTALL_DATA) $$pixma $(atomes_pkgdatadir)/$$pixmap; \ fi \ done \ fi \ done \ fi if test -d $(srcdir)/library; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/library; \ for librar in $(srcdir)/library/*; do \ if test -f $$librar; then \ $(INSTALL_DATA) $$librar $(atomes_pkgdatadir)/library; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$librar; \ for libra in $$librar/*; do \ if test -f $$libra; then \ $(INSTALL_DATA) $$libra $(atomes_pkgdatadir)/$$librar; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$libra; \ for libr in $$libra/*; do \ if test -f $$libr; then \ $(INSTALL_DATA) $$libr $(atomes_pkgdatadir)/$$libra; \ fi \ done \ fi \ done \ fi \ done \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_pkgdatadir)/pixmaps/* -rmdir $(atomes_pkgdatadir)/pixmaps -rm -rf $(atomes_pkgdatadir)/library/* -rmdir $(atomes_pkgdatadir)/library -rmdir $(atomes_pkgdatadir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/data/library/0000775000175000017500000000000015212624223015062 5ustar lerouxlerouxatomes_1.3.1/data/library/force_fields/0000775000175000017500000000000015212624223017506 5ustar lerouxlerouxatomes_1.3.1/data/library/force_fields/amber98.ffl0000664000175000017500000016131115212624223021451 0ustar lerouxleroux AMBER 98 k-calories per mol 54 83 0 0 191 0 83 0 31 0 51 atomes_1.3.1/data/library/force_fields/charmm-ethers_35.ffl0000664000175000017500000007400515212624223023253 0ustar lerouxleroux CHARMM 35 ethers k-calories per mol 13 22 0 0 55 0 106 0 0 0 13 atomes_1.3.1/data/library/force_fields/charmm-prot_metals_22.ffl0000664000175000017500000054230415212624223024310 0ustar lerouxleroux CHARMM 22 proteins and metals k-calories per mol 98 139 0 0 345 0 452 0 43 0 98 atomes_1.3.1/data/library/force_fields/charmm-cgenff_36.ffl0000664000175000017500000372537615212624223023233 0ustar lerouxleroux CHARMM 36 general k-calories per mol 163 506 0 0 1561 0 3937 0 125 0 156 atomes_1.3.1/data/library/force_fields/charmm-na_36.ffl0000664000175000017500000035704515212624223022370 0ustar lerouxleroux CHARMM 36 Nucleid acids k-calories per mol 42 89 0 0 226 0 502 0 15 0 42 atomes_1.3.1/data/library/force_fields/pcff.ffl0000664000175000017500000113537615212624223021135 0ustar lerouxleroux PCFF k-calories per mol 133 627 126 0 329 302 216 492 0 83 94 atomes_1.3.1/data/library/force_fields/oplsaar.ffl0000664000175000017500000154764715212624223021670 0ustar lerouxleroux OPLS All-atoms for RNA k-calories per mol 145 242 0 0 593 0 2482 0 131 0 145 atomes_1.3.1/data/library/force_fields/oplsaap.ffl0000664000175000017500000075640515212624223021657 0ustar lerouxleroux OPLS All-atoms for proteins k-calories per mol 78 159 0 0 437 0 1446 0 105 0 78 atomes_1.3.1/data/library/force_fields/charmm-lipid_36.ffl0000664000175000017500000016413315212624223023065 0ustar lerouxleroux CHARMM 36 lipids k-calories per mol 29 50 0 0 131 0 180 0 4 0 29 atomes_1.3.1/data/library/force_fields/charmm-prot_metals_36.ffl0000664000175000017500000062466415212624223024327 0ustar lerouxleroux CHARMM 36 proteins and metals k-calories per mol 53 132 0 0 364 0 706 0 35 0 53 atomes_1.3.1/data/library/force_fields/charmm-silicates.ffl0000664000175000017500000003307115212624223023430 0ustar lerouxleroux CHARMM silicates k-calories per mol 13 14 0 0 27 0 34 0 0 0 13 atomes_1.3.1/data/library/force_fields/amber94.ffl0000664000175000017500000016073115212624223021452 0ustar lerouxleroux AMBER 94 k-calories per mol 55 83 0 0 191 0 81 0 31 0 50 atomes_1.3.1/data/library/force_fields/charmm-prot_36.ffl0000664000175000017500000062267315212624223022760 0ustar lerouxleroux CHARMM 36 proteins k-calories per mol 53 132 0 0 364 0 705 0 35 0 53 atomes_1.3.1/data/library/force_fields/compass.ffl0000664000175000017500000013662715212624223021663 0ustar lerouxleroux COMPASS k-calories per mol 45 0 54 0 0 94 0 95 0 22 46 atomes_1.3.1/data/library/force_fields/charmm-carb_36.ffl0000664000175000017500000110444215212624223022671 0ustar lerouxleroux CHARMM 36 carbohydrates k-calories per mol 59 153 0 0 438 0 1354 0 14 0 57 atomes_1.3.1/data/library/force_fields/cvff.ffl0000664000175000017500000111746015212624223021135 0ustar lerouxleroux CVFF k-calories per mol 133 776 0 775 563 0 295 0 41 0 45 atomes_1.3.1/data/library/force_fields/cff91.ffl0000664000175000017500000072336615212624223021130 0ustar lerouxleroux CFF 91 k-calories per mol 93 667 58 0 330 155 216 294 0 70 40 atomes_1.3.1/data/library/force_fields/charmm-prot_22.ffl0000664000175000017500000047522715212624223022754 0ustar lerouxleroux CHARMM 22 proteins k-calories per mol 47 122 0 0 324 0 445 0 34 0 47 atomes_1.3.1/data/library/force_fields/amber96.ffl0000664000175000017500000016101715212624223021452 0ustar lerouxleroux AMBER 96 k-calories per mol 54 83 0 0 191 0 81 0 31 0 51 atomes_1.3.1/data/library/force_fields/amber99.ffl0000664000175000017500000025127615212624223021464 0ustar lerouxleroux AMBER 99 k-calories per mol 64 116 0 0 281 0 164 0 38 0 62 atomes_1.3.1/data/library/force_fields/cvff_aug.ffl0000664000175000017500000117402315212624223021767 0ustar lerouxleroux CVFF Augmented k-calories per mol 172 798 0 752 640 0 342 0 41 0 86 atomes_1.3.1/data/library/molecules/0000775000175000017500000000000015212624223017052 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Fatty_acids/0000775000175000017500000000000015212624223021304 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Fatty_acids/lauric_acid.sml0000664000175000017500000000604315212624223024263 0ustar lerouxleroux Fatty acids Lauric acid Dodecanoic acid Lauric acid --i--n--I---Dodecanoic acid Vulvic acid 38 atomes_1.3.1/data/library/molecules/Fatty_acids/cervonic_acid.sml0000664000175000017500000001034515212624223024614 0ustar lerouxleroux Fatty acids Cervonic acid (4Z,7Z,10Z,13Z,16Z,19Z)-Docosa-4,7,10,13,16,19-hexaenoic acid Cervonic acid DHA Doconexent 56 atomes_1.3.1/data/library/molecules/Fatty_acids/linoleic_acid.sml0000664000175000017500000000761515212624223024610 0ustar lerouxleroux Fatty acids Linoleic acid (9Z,12Z)-Octadeca-9,12-dienoic acid Linoleic acid 52 atomes_1.3.1/data/library/molecules/Fatty_acids/myristic_acid.sml0000664000175000017500000000656115212624223024654 0ustar lerouxleroux Fatty acids Myristic acid Tetradecanoic acid Myristic acid 44 atomes_1.3.1/data/library/molecules/Fatty_acids/oleic_acid.sml0000664000175000017500000001007315212624223024075 0ustar lerouxleroux Fatty acids Oleic acid (9Z)-Octadec-9-enoic acid Oleic acid --i--cis--I---9-Octadecenoic acid 54 atomes_1.3.1/data/library/molecules/Fatty_acids/arachidonic_acid.sml0000664000175000017500000001026215212624223025246 0ustar lerouxleroux Fatty acids Arachidonic acid (5Z,8Z,11Z,14Z)-5,8,11,14-Eicosatetraenoic acid (5Z,8Z,11Z,14Z)-Icosa-5,8,11,14-tetraenoic acid Arachidonic acid Eicosatetraenoic acid Arachidonate 54 atomes_1.3.1/data/library/molecules/Fatty_acids/stearic_acid.sml0000664000175000017500000001022515212624223024433 0ustar lerouxleroux Fatty acids Stearic acid Octadecanoic acid Stearic acid 56 atomes_1.3.1/data/library/molecules/Fatty_acids/hexanoic_acid.sml0000664000175000017500000000352715212624223024606 0ustar lerouxleroux Fatty acids Hexanoic acid Hexanoic acid Caproic acid --i--n--I---Caproic acid 20 atomes_1.3.1/data/library/molecules/Fatty_acids/palmitic_acid.sml0000664000175000017500000000740015212624223024604 0ustar lerouxleroux Fatty acids Palmitic acid Hexadecanoic acid Palmitic acid 50 atomes_1.3.1/data/library/molecules/Fatty_acids/decanoic_acid.sml0000664000175000017500000000523515212624223024553 0ustar lerouxleroux Fatty acids Decanoic acid Decanoic acid Capric acid --i--n--I---Capric acid --i--n--I---Decanoic acid 32 atomes_1.3.1/data/library/molecules/Fatty_acids/caprylic_acid.sml0000664000175000017500000000427515212624223024617 0ustar lerouxleroux Fatty acids Caprylic acid Octanoic acid Caprylic acid 26 atomes_1.3.1/data/library/molecules/Fatty_acids/valeric_acid.sml0000664000175000017500000000325715212624223024435 0ustar lerouxleroux Fatty acids Valeric acid Pentanoic acid Valeric acid Butane-1-carboxylic acid Valerianic acid 17 atomes_1.3.1/data/library/molecules/Fatty_acids/linolenic_acid.sml0000664000175000017500000000746615212624223024772 0ustar lerouxleroux Fatty acids Linolenic acid (9Z,12Z,15Z)-Octadeca-9,12,15-trienoic acid α-Linolenic acid Linolenic acid 50 atomes_1.3.1/data/library/molecules/Heterocyclics/0000775000175000017500000000000015212624223021652 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Heterocyclics/isonicotinamide.sml0000664000175000017500000000302315212624223025543 0ustar lerouxleroux Heterocyclics Isonicotinamide Isonicotinamide Pyridine-4-carboxamide 15 atomes_1.3.1/data/library/molecules/Heterocyclics/nicotinamide.sml0000664000175000017500000000314715212624223025037 0ustar lerouxleroux Heterocyclics Nicotinamide Nicotinamide Pyridine-3-carboxamide Vitamin PP vitamin B--c--3--f-- Niacinamide 15 atomes_1.3.1/data/library/molecules/Heterocyclics/1h-indole.sml0000664000175000017500000000311615212624223024150 0ustar lerouxleroux Heterocyclics Indole Indole 2,3-Benzopyrrole Ketole 1-Benzazole 16 atomes_1.3.1/data/library/molecules/Heterocyclics/benzothiophene.sml0000664000175000017500000000306415212624223025413 0ustar lerouxleroux Heterocyclics Benzothiophene Benzo[--i--b--I--]thiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 atomes_1.3.1/data/library/molecules/Heterocyclics/isonicotinic_acid.sml0000664000175000017500000000304315212624223026041 0ustar lerouxleroux Heterocyclics Isonicotinic acid Pyridine-4-carboxylic acid Isonicotinic acid 4-Pyridinecarboxylic acid 4-Picolinic acid 14 atomes_1.3.1/data/library/molecules/Heterocyclics/1h-pyrrole.sml0000664000175000017500000000221015212624223024364 0ustar lerouxleroux Heterocyclics 1H-Pyrrole 1H-Pyrrole Azole 10 atomes_1.3.1/data/library/molecules/Heterocyclics/furan.sml0000664000175000017500000000215315212624223023503 0ustar lerouxleroux Heterocyclics Furan Furan Oxoline Oxole Furfuran 9 atomes_1.3.1/data/library/molecules/Heterocyclics/1_2-thiazole.sml0000664000175000017500000000202515212624223024564 0ustar lerouxleroux Heterocyclics 1,2-Thiazole 1,2-Thiazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/picolinamide.sml0000664000175000017500000000301315212624223025021 0ustar lerouxleroux Heterocyclics Picolinamide Pyridine-2-carboxamide Picolinamide 15 atomes_1.3.1/data/library/molecules/Heterocyclics/1_3-oxazole.sml0000664000175000017500000000202215212624223024424 0ustar lerouxleroux Heterocyclics 1,3-Oxazole 1,3-Oxazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/1_3-thiazole.sml0000664000175000017500000000202515212624223024565 0ustar lerouxleroux Heterocyclics 1,3-Thiazole 1,3-Thiazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/1_2-oxazole.sml0000664000175000017500000000202315212624223024424 0ustar lerouxleroux Heterocyclics 1,2-Oxazole 1,2-Oxazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/nicotinic_acid.sml0000664000175000017500000000300215212624223025321 0ustar lerouxleroux Heterocyclics Nicotinic acid Pyridine-3-carboxylic acid Nicotinic acid Niacin Bionic 14 atomes_1.3.1/data/library/molecules/Heterocyclics/benzofuran.sml0000664000175000017500000000300515212624223024536 0ustar lerouxleroux Heterocyclics Benzofuran 1-Benzofuran Coumarone Benzo[--i--b--I--]furan 15 atomes_1.3.1/data/library/molecules/Heterocyclics/1h-pyrazole.sml0000664000175000017500000000214115212624223024540 0ustar lerouxleroux Heterocyclics 1--i--H--I---Pyrazole 1--i--H--I---Pyrazole 1,2-Diazole 9 atomes_1.3.1/data/library/molecules/Heterocyclics/thiophene.sml0000664000175000017500000000217615212624223024360 0ustar lerouxleroux Heterocyclics Thiophene Thiophene Thiofuran Thiacyclopentadiene Thiole 9 atomes_1.3.1/data/library/molecules/Heterocyclics/pyridine.sml0000664000175000017500000000237315212624223024217 0ustar lerouxleroux Heterocyclics Pyridine Pyridine Azinine Azine Azabenzene 11 atomes_1.3.1/data/library/molecules/Heterocyclics/picolinic_acid.sml0000664000175000017500000000272115212624223025322 0ustar lerouxleroux Heterocyclics Picolinic acid Pyridine-2-carboxylic acid Picolinic acid 14 atomes_1.3.1/data/library/molecules/Ethers/0000775000175000017500000000000015212624223020304 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Ethers/ethylmethylether.sml0000664000175000017500000000247615212624223024432 0ustar lerouxleroux Ethers Methoxyethane Methoxyethane Methyl ethyl ether Ethyl methyl ether 12 atomes_1.3.1/data/library/molecules/Ethers/dimethylether.sml0000664000175000017500000000220115212624223023663 0ustar lerouxleroux Ethers Dimethyl ether Methoxymethane Dimethyl ether Wood ether Demeon 9 atomes_1.3.1/data/library/molecules/Ethers/tetrahydropyran.sml0000664000175000017500000000307415212624223024264 0ustar lerouxleroux Ethers Tetrahydropyran Oxane Tetrahydropyran Oxacyclohexane 16 atomes_1.3.1/data/library/molecules/Ethers/dipropylether.sml0000664000175000017500000000367215212624223023723 0ustar lerouxleroux Ethers Dipropyl ether 1-Propoxypropane Propyl ether Dipropyl ether Di---i--n--I---propyl ether 21 atomes_1.3.1/data/library/molecules/Ethers/1_4-dioxane.sml0000664000175000017500000000277415212624223023043 0ustar lerouxleroux Ethers 1,4-Dioxane 1,4-Dioxane Diethylene dioxide Diethylene ether --i--p--I---Dioxane [6]-crown-2 14 atomes_1.3.1/data/library/molecules/Ethers/diisopropylether.sml0000664000175000017500000000371115212624223024430 0ustar lerouxleroux Ethers Diisopropyl ether 2-[(Propan-2-yl)oxy]propane Diisopropyl ether 2-Isopropoxypropane Diisopropyl oxide 21 atomes_1.3.1/data/library/molecules/Ethers/di-tert-butylether.sml0000664000175000017500000000456115212624223024564 0ustar lerouxleroux Ethers Di---i--tert--I---butylether 2---i--tert--I---Butoxy-2-methylpropane 2-Methyl-2---i--tert--I---butoxypropane Di---i--tert--I---butylether 27 atomes_1.3.1/data/library/molecules/Ethers/tetrahydrofuran.sml0000664000175000017500000000267415212624223024253 0ustar lerouxleroux Ethers Tetrahydrofuran Oxolane Tetrahydrofuran Oxacyclopentane Butylene oxide Cyclotetramethylene oxide 13 atomes_1.3.1/data/library/molecules/Ethers/dibutylether.sml0000664000175000017500000000455415212624223023535 0ustar lerouxleroux Ethers Dibutyl ether 1-Butoxybutane Dibutyl ether Di---i--n--I---butyl ether Butyl ether --i--n--I---butyl ether 27 atomes_1.3.1/data/library/molecules/Ethers/diethylether.sml0000664000175000017500000000304115212624223023511 0ustar lerouxleroux Ethers Ether Ethoxyethane Diethyl ether Ethyl ether Ethyl oxide Ether 15 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/0000775000175000017500000000000015212624223021756 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Cyclic_alkanes/cis-decahydronaphthalene.sml0000664000175000017500000000461115212624223027423 0ustar lerouxleroux Cyclic alkanes --i--cis--I---Decahydronaphthalene --i--cis--I---Decahydronaphthalene --i--cis--I---Bicyclo[4.4.0]decane --i--cis--I---Decalin 28 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclooctane.sml0000664000175000017500000000377215212624223025007 0ustar lerouxleroux Cyclic alkanes Cyclooctane Cyclooctane 24 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclodecane.sml0000664000175000017500000000460615212624223024752 0ustar lerouxleroux Cyclic alkanes Cyclodecane Cyclodecane 30 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclopropane.sml0000664000175000017500000000201615212624223025170 0ustar lerouxleroux Cyclic alkanes Cyclopropane Cyclopropane 9 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclohexane-twist-boat.sml0000664000175000017500000000322215212624223027067 0ustar lerouxleroux Cyclic alkanes Cyclohexane---i--twist-boat--I-- Cyclohexane---i--twist-boat--I-- 18 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/norbornane.sml0000664000175000017500000000341015212624223024634 0ustar lerouxleroux Cyclic alkanes Norbornane Bicyclo[2.2.1]heptane Norbornane Norcamphane Norbornylane 19 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/adamantane.sml0000664000175000017500000000405315212624223024566 0ustar lerouxleroux Cyclic alkanes Adamantane Tricyclo[3.3.1.1--b--3,7--e--]decane Adamantane 24 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cubane.sml0000664000175000017500000000305515212624223023733 0ustar lerouxleroux Cyclic alkanes Cubane Cubane Pentacyclo[4.2.0.0--b--2,5--e--.0--b--3,8--e--.0--b--4,7--e--]octane 16 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/abietic_acid.sml0000664000175000017500000000771115212624223025061 0ustar lerouxleroux Cyclic alkanes Abietic acid Abieta-7,13-dien-18-oic acid Abietic acid Abietinic acid Sylvic acid 52 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclobutane.sml0000664000175000017500000000233015212624223025001 0ustar lerouxleroux Cyclic alkanes Cyclobutane Cyclobutane 12 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/trans-decahydronaphthalene.sml0000664000175000017500000000462315212624223027777 0ustar lerouxleroux Cyclic alkanes --i--trans--I---Decahydronaphthalene --i--trans--I---Decahydronaphthalene --i--trans--I---Bicyclo[4.4.0]decane --i--trans--I---Decalin 28 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cycloheptane.sml0000664000175000017500000000346215212624223025156 0ustar lerouxleroux Cyclic alkanes Cycloheptane Cycloheptane 21 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclohexane-chair.sml0000664000175000017500000000321715212624223026064 0ustar lerouxleroux Cyclic alkanes Cyclohexane---i--chair--I-- Cyclohexane---i--chair--I-- 18 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/camphene.sml0000664000175000017500000000437115212624223024260 0ustar lerouxleroux Cyclic alkanes Camphene 2,2-Dimethyl-3-methylidenebicyclo[2.2.1]heptane Camphene 2,2-Dimethyl-3-methanylidenebicyclo[2.2.1]heptane 26 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclopentane.sml0000664000175000017500000000270415212624223025162 0ustar lerouxleroux Cyclic alkanes Cyclopentane Cyclopentane Pentamethylene 15 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclononane.sml0000664000175000017500000000427615212624223025014 0ustar lerouxleroux Cyclic alkanes Cyclononane Cyclononane 27 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/r-camphor.sml0000664000175000017500000000452615212624223024372 0ustar lerouxleroux Cyclic alkanes (R)-Camphor 1,7,7-Trimethylbicyclo[2,2,1]heptan-2-one (R)-Camphor 2-Bornanone Bornan-2-one 27 atomes_1.3.1/data/library/molecules/Alkenes/0000775000175000017500000000000015212624223020434 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alkenes/1-hexene.sml0000664000175000017500000000316415212624223022567 0ustar lerouxleroux Alkenes 1-Hexene Hex-1-ene 1-Hexene 18 atomes_1.3.1/data/library/molecules/Alkenes/z-2-octene.sml0000664000175000017500000000401715212624223023036 0ustar lerouxleroux Alkenes (Z)-2-Octene (Z)-Oct-2-ene (Z)-2-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/z-2-hexene.sml0000664000175000017500000000320015212624223023026 0ustar lerouxleroux Alkenes (Z)-2-Hexene (Z) Hex-2-ene (Z)-2-Hexene 18 atomes_1.3.1/data/library/molecules/Alkenes/1-heptene.sml0000664000175000017500000000347715212624223022752 0ustar lerouxleroux Alkenes 1-Heptene Hept-1-ene 1-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/propene.sml0000664000175000017500000000207615212624223022626 0ustar lerouxleroux Alkenes Propene Propene Propylene Methyle ethylene 9 atomes_1.3.1/data/library/molecules/Alkenes/z-3-octene.sml0000664000175000017500000000401715212624223023037 0ustar lerouxleroux Alkenes (Z)-3-Octene (Z) Oct-3-ene (Z)-3-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/e-2-hexene.sml0000664000175000017500000000314415212624223023010 0ustar lerouxleroux Alkenes (E)-2-Hexene (E)-Hex-2-ene 18 atomes_1.3.1/data/library/molecules/Alkenes/1-butene.sml0000664000175000017500000000243715212624223022577 0ustar lerouxleroux Alkenes 1-Butene But-1-ene Ethylethylene 1-Butylene α-Butylene 12 atomes_1.3.1/data/library/molecules/Alkenes/z-3-hexene.sml0000664000175000017500000000317715212624223023044 0ustar lerouxleroux Alkenes (Z)-3-Hexene (Z)-Hex-3-ene (Z)-3-Hexene 18 atomes_1.3.1/data/library/molecules/Alkenes/1-octene.sml0000664000175000017500000000400315212624223022561 0ustar lerouxleroux Alkenes 1-Octene Oct-1-ene 1-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/3z-penta-1_3-diene.sml0000664000175000017500000000251415212624223024256 0ustar lerouxleroux Alkenes (3Z)-1,3-Pentadiene (3Z)-Penta-1,3-diene (3Z)-1,3-Pentadiene 13 atomes_1.3.1/data/library/molecules/Alkenes/z-2-pentene.sml0000664000175000017500000000267315212624223023225 0ustar lerouxleroux Alkenes (Z)-2-Pentene (Z)-Pent-2-ene (Z)-2-Pentene 15 atomes_1.3.1/data/library/molecules/Alkenes/e-4-octene.sml0000664000175000017500000000402015212624223023005 0ustar lerouxleroux Alkenes (E)-4-Octene (E)-Oct-4-ene (E)-4-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/1-pentene.sml0000664000175000017500000000266015212624223022751 0ustar lerouxleroux Alkenes 1-Pentene Pent-1-ene 1-Pentene 15 atomes_1.3.1/data/library/molecules/Alkenes/2-methylbut-2-ene.sml0000664000175000017500000000300015212624223024222 0ustar lerouxleroux Alkenes 2-Methylbut-2-ene 2-Methylbut-2-ene β-Isoamylene Trimethylethylene Isoamylene 15 atomes_1.3.1/data/library/molecules/Alkenes/e-3-heptene.sml0000664000175000017500000000351515212624223023167 0ustar lerouxleroux Alkenes (E)-3-Heptene (E)-Hept-3-ene (E)-3-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/piperylene.sml0000664000175000017500000000246615212624223023335 0ustar lerouxleroux Alkenes Piperylene 1,3-Pentadiene Penta-1,3-diene 13 atomes_1.3.1/data/library/molecules/Alkenes/e-2-pentene.sml0000664000175000017500000000267615212624223023203 0ustar lerouxleroux Alkenes (E)-2-Pentene (E)-Pent-2-ene (E)-2-Pentene 15 atomes_1.3.1/data/library/molecules/Alkenes/trans-2-butene.sml0000664000175000017500000000243015212624223023716 0ustar lerouxleroux Alkenes --i--trans--I---2-Butene --i--trans--I---But-2-ene --i--trans--I---β-Butylene 12 atomes_1.3.1/data/library/molecules/Alkenes/z-3-heptene.sml0000664000175000017500000000351315212624223023212 0ustar lerouxleroux Alkenes (Z)-3-Heptene (Z) Hept-3-ene (Z)-3-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/e-3-octene.sml0000664000175000017500000000401715212624223023012 0ustar lerouxleroux Alkenes (E)-3-Octene (E)-Oct-3-ene (E)-3-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/z-2-heptene.sml0000664000175000017500000000351415212624223023212 0ustar lerouxleroux Alkenes (Z)-2-Heptene (Z)-Hept-2-ene (Z)-2-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/ethene.sml0000664000175000017500000000152515212624223022424 0ustar lerouxleroux Alkenes Ethylene Ethene Ethylene 6 atomes_1.3.1/data/library/molecules/Alkenes/2-methylbuta-1_3-diene.sml0000664000175000017500000000253315212624223025133 0ustar lerouxleroux Alkenes Isoprene 2-Methylbuta-1,3-diene 2-Methyl-1,3-butadiene Isoprene 13 atomes_1.3.1/data/library/molecules/Alkenes/z-4-octene.sml0000664000175000017500000000402215212624223023034 0ustar lerouxleroux Alkenes (Z)-4-Octene (Z)-Oct-4-ene (Z)-4-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/e-2-octene.sml0000664000175000017500000000401715212624223023011 0ustar lerouxleroux Alkenes (E)-2-Octene (E)-Oct-2-ene (E)-2-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/cis-2-butene.sml0000664000175000017500000000242215212624223023346 0ustar lerouxleroux Alkenes --i--cis--I---2-Butene --i--cis--I---But-2-ene --i--cis--I---β-Butylene 12 atomes_1.3.1/data/library/molecules/Alkenes/e-2-heptene.sml0000664000175000017500000000351515212624223023166 0ustar lerouxleroux Alkenes (E)-2-Heptene (E)-Hept-2-ene (E)-2-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/3z-3-ethylhepta-1_3-diene.sml0000664000175000017500000000411715212624223025457 0ustar lerouxleroux Alkenes (3Z)-3-Ethylhepta-1,3-diene (3Z)-3-Ethylhepta-1,3-diene 25 atomes_1.3.1/data/library/molecules/Alkenes/e-3-hexene.sml0000664000175000017500000000314415212624223023011 0ustar lerouxleroux Alkenes (E)-3-Hexene (E)-Hex-3-ene 18 atomes_1.3.1/data/library/molecules/Ketones/0000775000175000017500000000000015212624223020462 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Ketones/acetone.sml0000664000175000017500000000230115212624223022611 0ustar lerouxleroux Ketones Acetone Propan-2-one Propanone Acetone Dimethyl ketone 10 atomes_1.3.1/data/library/molecules/Ketones/methyl_vinyl_ketone.sml0000664000175000017500000000242615212624223025273 0ustar lerouxleroux Ketones Methyl vinyl ketone But-3-en-2-one Methyl vinyl ketone MVK Methylene acetone 11 atomes_1.3.1/data/library/molecules/Ketones/cyclohexanone.sml0000664000175000017500000000324315212624223024040 0ustar lerouxleroux Ketones Cyclohexanone Cyclohexanone Oxocyclohexane Pimelic ketone Ketohexamethylene 17 atomes_1.3.1/data/library/molecules/Ketones/p-benzoquinone.sml0000664000175000017500000000256515212624223024160 0ustar lerouxleroux Ketones --i--p--I---benzoquinone Cyclohexa-2,5-diene-1,4-dione 1,4-Benzoquinone Benzoquinone --i--p--I---Quinone 12 atomes_1.3.1/data/library/molecules/Ketones/butanone.sml0000664000175000017500000000261715212624223023020 0ustar lerouxleroux Ketones Butanone Butan-2-one Butanone Ethyl methyl ketone Methylacetone 13 atomes_1.3.1/data/library/molecules/Alcohols/0000775000175000017500000000000015212624223020616 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alcohols/propan-2-ol.sml0000664000175000017500000000256415212624223023410 0ustar lerouxleroux Alcohols --i--s--I---Propanol Propan-2-ol --i--s--I---Propyl alcohol --i--s--I---Propanol Dimethyl carbinol 12 atomes_1.3.1/data/library/molecules/Alcohols/cyclopentanol.sml0000664000175000017500000000311115212624223024201 0ustar lerouxleroux Alcohols Cyclopentanol Cyclopentanol Cyclopentyl alcohol Hydroxycyclopentane 16 atomes_1.3.1/data/library/molecules/Alcohols/cyclohexanol.sml0000664000175000017500000000344115212624223024025 0ustar lerouxleroux Alcohols Cyclohexanol Cyclohexanol Cyclohexyl Alcohol Hexahydrophenol Naxol 19 atomes_1.3.1/data/library/molecules/Alcohols/ethanol.sml0000664000175000017500000000220415212624223022763 0ustar lerouxleroux Alcohols Ethanol Ethanol Absolute alcohol Ethylic alcohol Hydroxyethane 9 atomes_1.3.1/data/library/molecules/Alcohols/propane-1_2_3-triol.sml0000664000175000017500000000300515212624223024725 0ustar lerouxleroux Alcohols Glycerin Propane-1,2,3-triol Glycerin Propanetriol 1,2,3-Trihydroxypropane 1,2,3-Propanetriol 14 atomes_1.3.1/data/library/molecules/Alcohols/methanol.sml0000664000175000017500000000167015212624223023146 0ustar lerouxleroux Alcohols Methanol Methanol Carbinol Hydroxymethane Methyl alcohol 6 atomes_1.3.1/data/library/molecules/Alcohols/but-2-yne-1_4-diol.sml0000664000175000017500000000253615212624223024371 0ustar lerouxleroux Alcohols Butynediol But-2-yne-1,4-diol Butynediol 2-Butyne-1,4-diol 1,4-Dihydroxy-2-butyne 12 atomes_1.3.1/data/library/molecules/Alcohols/2-aminoethanol.sml0000664000175000017500000000247015212624223024153 0ustar lerouxleroux Alcohols β-Aminoethanol 2-Aminoethan-1-ol 2-Aminoethanol β-Aminoethanol Glycinol 11 atomes_1.3.1/data/library/molecules/Alcohols/ethane-1_2-diol.sml0000664000175000017500000000234215212624223024104 0ustar lerouxleroux Alcohols Ethylene glycol Ethane-1,2-diol Ethylene glycol Monoethylene glycol 1,2-Dihydroxyethane 10 atomes_1.3.1/data/library/molecules/Alcohols/propan-1-ol.sml0000664000175000017500000000255615212624223023410 0ustar lerouxleroux Alcohols --i--n--I---Propanol Propan-1-ol --i--n--I---Propyl alcohol --i--n--I---Propanol Ethylcarbinol 12 atomes_1.3.1/data/library/molecules/Fullerenes/0000775000175000017500000000000015212624223021156 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Fullerenes/c78.sml0000664000175000017500000001272715212624223022305 0ustar lerouxleroux Fullerenes C--c--78--f-- C--c--78--f-- 78 atomes_1.3.1/data/library/molecules/Fullerenes/pcbm.sml0000664000175000017500000001453615212624223022625 0ustar lerouxleroux Fullerenes PCBM Phenyl-C--c--61--f---butyric acid methyl ester PCBM 1-​[3-​(Methoxycarbonyl)​propyl]​-​1-​phenyl-​[6.6]​C--c--61--f-- 88 atomes_1.3.1/data/library/molecules/Fullerenes/c32.sml0000664000175000017500000000474715212624223022276 0ustar lerouxleroux Fullerenes C--c--32--f-- C--c--32--f-- 32 atomes_1.3.1/data/library/molecules/Fullerenes/c50.sml0000664000175000017500000000721515212624223022267 0ustar lerouxleroux Fullerenes C--c--50--f-- C--c--50--f-- 50 atomes_1.3.1/data/library/molecules/Fullerenes/c80.sml0000664000175000017500000001314015212624223022264 0ustar lerouxleroux Fullerenes C--c--80--f-- C--c--80--f-- 80 atomes_1.3.1/data/library/molecules/Fullerenes/c36.sml0000664000175000017500000000535415212624223022275 0ustar lerouxleroux Fullerenes C--c--36--f-- C--c--36--f-- 36 atomes_1.3.1/data/library/molecules/Fullerenes/c28.sml0000664000175000017500000000433615212624223022275 0ustar lerouxleroux Fullerenes C--c--28--f-- C--c--28--f-- 28 atomes_1.3.1/data/library/molecules/Fullerenes/pc70bm.sml0000664000175000017500000001567415212624223023000 0ustar lerouxleroux Fullerenes PC--c--70--f--BM Phenyl-C--c--71--f---butyric acid methyl ester PC--c--70--f--BM 1-​[3-​(Methoxycarbonyl)​propyl]​-​1-​phenyl-​[6.6]​C--c--71--f-- 98 atomes_1.3.1/data/library/molecules/Fullerenes/c70.sml0000664000175000017500000001171315212624223022267 0ustar lerouxleroux Fullerenes C--c--70--f-- C--c--70--f-- 70 atomes_1.3.1/data/library/molecules/Fullerenes/c180.sml0000664000175000017500000003025715212624223022355 0ustar lerouxleroux Fullerenes C--c--180--f-- C--c--180--f-- 180 atomes_1.3.1/data/library/molecules/Fullerenes/c30.sml0000664000175000017500000000453715212624223022271 0ustar lerouxleroux Fullerenes C--c--30--f-- C--c--30--f-- 30 atomes_1.3.1/data/library/molecules/Fullerenes/c24.sml0000664000175000017500000000372415212624223022271 0ustar lerouxleroux Fullerenes C--c--24--f-- C--c--24--f-- 24 atomes_1.3.1/data/library/molecules/Fullerenes/c26.sml0000664000175000017500000000412315212624223022265 0ustar lerouxleroux Fullerenes C--c--26--f-- C--c--26--f-- 26 atomes_1.3.1/data/library/molecules/Fullerenes/c60.sml0000664000175000017500000001063415212624223022267 0ustar lerouxleroux Fullerenes C--c--60--f-- (C--c--60--f---Ih)[5,6]fullerene C--c--60--f-- Buckminsterfullerene Buckyball 60 atomes_1.3.1/data/library/molecules/Fullerenes/c76.sml0000664000175000017500000001252615212624223022300 0ustar lerouxleroux Fullerenes C--c--76--f-- C--c--76--f-- 76 atomes_1.3.1/data/library/molecules/Fullerenes/c320.sml0000664000175000017500000005263115212624223022351 0ustar lerouxleroux Fullerenes C--c--320--f-- C--c--320--f-- 320 atomes_1.3.1/data/library/molecules/Fullerenes/c20.sml0000664000175000017500000000331215212624223022256 0ustar lerouxleroux Fullerenes C--c--20--f-- C--c--20--f-- 20 atomes_1.3.1/data/library/molecules/Fullerenes/c240.sml0000664000175000017500000004020115212624223022340 0ustar lerouxleroux Fullerenes C--c--240--f-- C--c--240--f-- 240 atomes_1.3.1/data/library/molecules/Amines/0000775000175000017500000000000015212624223020266 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Amines/isopropylamine.sml0000664000175000017500000000257215212624223024063 0ustar lerouxleroux Amines Isopropylamine Propan-2-amine Isopropylamine 2-Aminopropane 13 atomes_1.3.1/data/library/molecules/Amines/triethylenediamine.sml0000664000175000017500000000350115212624223024665 0ustar lerouxleroux Amines Triethylenediamine 1,4-Diazabicyclo[2.2.2]octane Triethylenediamine 20 atomes_1.3.1/data/library/molecules/Amines/methylamine.sml0000664000175000017500000000200115212624223023310 0ustar lerouxleroux Amines Methylamine Methanamine Methylamine Aminomethane Monomethylamine 7 atomes_1.3.1/data/library/molecules/Amines/r-sec-butylamine.sml0000664000175000017500000000301715212624223024164 0ustar lerouxleroux Amines (R)-sec-butylamine (R)-Butan-2-amine (R)-sec-butylamine (R)-2-Aminobutane (R)-2-Butanamine 16 atomes_1.3.1/data/library/molecules/Amines/piperazine.sml0000664000175000017500000000307315212624223023154 0ustar lerouxleroux Amines Piperazine Piperazine Hexahydropyrazine Piperazidine 16 atomes_1.3.1/data/library/molecules/Amines/dimethylamine.sml0000664000175000017500000000222415212624223023634 0ustar lerouxleroux Amines Dimethylamine N-Methylmethanamine Dimethylamine 10 atomes_1.3.1/data/library/molecules/Amines/triethylamine.sml0000664000175000017500000000367115212624223023670 0ustar lerouxleroux Amines Triethylamine N,N-Diethylethanamine Triethylamine 22 atomes_1.3.1/data/library/molecules/Amines/azepane.sml0000664000175000017500000000350415212624223022430 0ustar lerouxleroux Amines Azepane Azepane Hexahydroazepine Hexamethyleneimine 20 atomes_1.3.1/data/library/molecules/Amines/ammonia.sml0000664000175000017500000000142615212624223022427 0ustar lerouxleroux Amines Ammonia Azane Ammonia Trihydrogen nitride Nitrogen trihydride 4 atomes_1.3.1/data/library/molecules/Amines/trimethylamine.sml0000664000175000017500000000254715212624223024046 0ustar lerouxleroux Amines Trimethylamine N,N-Dimethylmethanamine Trimethylamine 13 atomes_1.3.1/data/library/molecules/Amines/piperidine.sml0000664000175000017500000000327315212624223023140 0ustar lerouxleroux Amines Piperidine Piperidine Hexahydropyridine Azacyclohexane Pentamethyleneamine Azinane 17 atomes_1.3.1/data/library/molecules/Amines/s-sec-butylamine.sml0000664000175000017500000000316015212624223024164 0ustar lerouxleroux Amines (S)-sec-butylamine (S)-Butan-2-amine (S)-sec-butylamine (S)-2-Aminobutane (S)-2-Butanamine 16 atomes_1.3.1/data/library/molecules/Amines/tert-butylamine.sml0000664000175000017500000000323115212624223024127 0ustar lerouxleroux Amines tert-butylamine 2-Methylpropan-2-amine tert-butylamine 2-Aminoisobutane 2-Amino-2-methylpropane Dimethylethylamine 16 atomes_1.3.1/data/library/molecules/Amines/pyrrolidine.sml0000664000175000017500000000275515212624223023354 0ustar lerouxleroux Amines Pyrrolidine Pyrrolidine Azolidine Azacyclopentane Tetrahydropyrrole Prolamine 14 atomes_1.3.1/data/library/molecules/Amines/ethylamine.sml0000664000175000017500000000221215212624223023137 0ustar lerouxleroux Amines Ethylamine Ethanamine Ethylamine 10 atomes_1.3.1/data/library/molecules/Amines/azepine.sml0000664000175000017500000000255715212624223022447 0ustar lerouxleroux Amines Azepine Azepine 14 atomes_1.3.1/data/library/molecules/Amines/diethylamine.sml0000664000175000017500000000304015212624223023454 0ustar lerouxleroux Amines Diethylamine N-Ethylethanamine Diethylamine 16 atomes_1.3.1/data/library/molecules/Amides/0000775000175000017500000000000015212624223020254 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Amides/oxamide.sml0000664000175000017500000000234115212624223022417 0ustar lerouxleroux Amides Oxamide Oxamide Ethanediamide Oxalamide Oxamimidic acid 10 atomes_1.3.1/data/library/molecules/Amides/urea.sml0000664000175000017500000000213215212624223021723 0ustar lerouxleroux Amides Urea Urea Carbamide Carbonyl diamide Carbonyldiamine 8 atomes_1.3.1/data/library/molecules/Amides/urethane.sml0000664000175000017500000000256115212624223022610 0ustar lerouxleroux Amides Urethane Ethyl carbamate Urethane 13 atomes_1.3.1/data/library/molecules/Amides/n_n-dimethylformamide.sml0000664000175000017500000000252215212624223025245 0ustar lerouxleroux Amides N,N-Dimethylformamide N,N-Dimethylformamide N,N-Dimethylmethanamide 12 atomes_1.3.1/data/library/molecules/Amides/n_n-dimethylacetamide.sml0000664000175000017500000000275515212624223025226 0ustar lerouxleroux Amides N,N-Dimethylacetamide N,N-Dimethylacetamide 15 atomes_1.3.1/data/library/molecules/Amides/acetamide.sml0000664000175000017500000000220715212624223022706 0ustar lerouxleroux Amides Acetamide Acetamide Ethanamide Acetic acid amide 9 atomes_1.3.1/data/library/molecules/Amino_acids/0000775000175000017500000000000015212624223021260 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Amino_acids/d-glutamic_acid.sml0000664000175000017500000000345115212624223025006 0ustar lerouxleroux Amino acids Glutamic acid-(D) (D)-glutamic acid (2R)-2-Aminopentanedioic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/l-phenylalanine.sml0000664000175000017500000000406715212624223025064 0ustar lerouxleroux Amino acids Phenylalanine-(L) (L)-Phenylalanine (2S)-2-Amino-3-phenylpropanoic acid 23 atomes_1.3.1/data/library/molecules/Amino_acids/l-allo-isoleucine.sml0000664000175000017500000000377515212624223025326 0ustar lerouxleroux Amino acids Allo-isoleucine-(L) (L)-Allo-isoleucine (2S,3R)-2-Amino-3-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/d-histidine.sml0000664000175000017500000000356215212624223024204 0ustar lerouxleroux Amino acids Histidine-(D) (D)-Histidine (2R)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/l-aspartic_acid.sml0000664000175000017500000000313415212624223025015 0ustar lerouxleroux Amino acids Aspartic-(L) (L)-Aspartic acid (2S)-2-Aminobutanedioic acid 16 atomes_1.3.1/data/library/molecules/Amino_acids/d-arginine.sml0000664000175000017500000000441115212624223024012 0ustar lerouxleroux Amino acids Arginine-(D) (D)-Arginine (2R)-2-Amino-5-(diaminomethylideneamino)pentanoicacid 26 atomes_1.3.1/data/library/molecules/Amino_acids/l-arginine.sml0000664000175000017500000000441415212624223024025 0ustar lerouxleroux Amino acids Arginine-(L) (L)-Arginine (2S)-2-Amino-5-(diaminomethylideneamino)pentanoic acid 26 atomes_1.3.1/data/library/molecules/Amino_acids/l-glutamic_acid.sml0000664000175000017500000000344615212624223025022 0ustar lerouxleroux Amino acids Glutamic acid-(L) (L)-Glutamic acid (2S)-2-Aminopentanedioic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/d-phenylalanine.sml0000664000175000017500000000407115212624223025047 0ustar lerouxleroux Amino acids Phenylalanine-(D) (D)-Phenylalanine (2R)-2-Amino-3-phenylpropanoic acid 23 atomes_1.3.1/data/library/molecules/Amino_acids/l-isoleucine.sml0000664000175000017500000000376015212624223024373 0ustar lerouxleroux Amino acids Isoleucine-(L) (L)-Isoleucine (2S,3S)-2-Amino-3-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/l-glutamine.sml0000664000175000017500000000355515212624223024223 0ustar lerouxleroux Amino acids Glutamine-(L) (L)-Glutamine (2S)-2-Amino-4-carbamoylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/d-alanine.sml0000664000175000017500000000261115212624223023625 0ustar lerouxleroux Amino acids Alanine-(D) (D)-Alanine (2R)-2-Aminopropanoicacid 13 atomes_1.3.1/data/library/molecules/Amino_acids/l-tryptophan.sml0000664000175000017500000000450515212624223024442 0ustar lerouxleroux Amino acids Tryptophan-(L) (L)-Tryptophan (2S)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 atomes_1.3.1/data/library/molecules/Amino_acids/l-serine.sml0000664000175000017500000000272515212624223023521 0ustar lerouxleroux Amino acids Serine-(L) (L)-Serine (2S)-2-Amino-3-hydroxypropanoic acid 14 atomes_1.3.1/data/library/molecules/Amino_acids/l-histidine.sml0000664000175000017500000000356015212624223024212 0ustar lerouxleroux Amino acids Histidine-(L) (L)-Histidine (2S)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/l-methionine.sml0000664000175000017500000000362415212624223024372 0ustar lerouxleroux Amino acids Methionine-(L) (L)-Methionine (2S)-2-Amino-4-methylsulfanylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/d-leucine.sml0000664000175000017500000000375215212624223023651 0ustar lerouxleroux Amino acids Leucine-(D) (D)-Leucine (2R)-2-Amino-4-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/d-asparagine.sml0000664000175000017500000000324515212624223024334 0ustar lerouxleroux Amino acids Asparagine-(D) (D)-Asparagine (2R)-2-Amino-3-carbamoylpropanoicacid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-proline.sml0000664000175000017500000000323415212624223023670 0ustar lerouxleroux Amino acids Proline-(D) (D)-Proline (2R)-Pyrrolidine-2-carboxylic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-glutamine.sml0000664000175000017500000000355215212624223024210 0ustar lerouxleroux Amino acids Glutamine-(D) (D)-Glutamine (2R)-2-Amino-4-carbamoylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/d-tyrosine.sml0000664000175000017500000000417415212624223024100 0ustar lerouxleroux Amino acids Tyrosine-(D) (D)-Tyrosine (2R)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 atomes_1.3.1/data/library/molecules/Amino_acids/l-alanine.sml0000664000175000017500000000261315212624223023637 0ustar lerouxleroux Amino acids Alanine-(L) (L)-Alanine (2S)-2-Aminopropanoic acid 13 atomes_1.3.1/data/library/molecules/Amino_acids/l-valine.sml0000664000175000017500000000343515212624223023511 0ustar lerouxleroux Amino acids Valine-(L) (L)-Valine (2S)-2-Amino-3-methylbutanoic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/l-threonine.sml0000664000175000017500000000324515212624223024225 0ustar lerouxleroux Amino acids Threonine-(L) (L)-Threonine (2S,3R)-2-Amino-3-hydroxybutanoic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/l-proline.sml0000664000175000017500000000323315212624223023677 0ustar lerouxleroux Amino acids Proline-(L) (L)-Proline (2S)-Pyrrolidine-2-carboxylic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-threonine.sml0000664000175000017500000000324215212624223024212 0ustar lerouxleroux Amino acids Threonine-(D) (D)-Threonine (2R,3S)-2-Amino-3-hydroxybutanoic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/l-lysine.sml0000664000175000017500000000414615212624223023536 0ustar lerouxleroux Amino acids Lysine-(L) (L)-Lysine (2S)-2,6-Diaminohexanoic acid 24 atomes_1.3.1/data/library/molecules/Amino_acids/d-allo-threonine.sml0000664000175000017500000000325315212624223025141 0ustar lerouxleroux Amino acids Allo-threonine-(D) (D)-Allo-threonine (2R,3R)-2-Amino-3-hydroxybutanoicacid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-cysteine.sml0000664000175000017500000000277215212624223024051 0ustar lerouxleroux Amino acids Cysteine-(D) (D)-Cysteine (2S)-2-Amino-3-sulfanylpropanoicacid 14 atomes_1.3.1/data/library/molecules/Amino_acids/d-lysine.sml0000664000175000017500000000414715212624223023527 0ustar lerouxleroux Amino acids Lysine-(D) (D)-Lysine (2R)-2,6-Diaminohexanoic acid 24 atomes_1.3.1/data/library/molecules/Amino_acids/d-isoleucine.sml0000664000175000017500000000376315212624223024366 0ustar lerouxleroux Amino acids Isoleucine-(D) (D)-Isoleucine (2R,3R)-2-Amino-3-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/l-cysteine.sml0000664000175000017500000000277715212624223024066 0ustar lerouxleroux Amino acids Cysteine-(L) (L)-Cysteine (2R)-2-Amino-3-sulfanylpropanoic acid 14 atomes_1.3.1/data/library/molecules/Amino_acids/l-asparagine.sml0000664000175000017500000000324415212624223024343 0ustar lerouxleroux Amino acids Asparagine-(L) (L)-Asparagine (2S)-2-Amino-3-carbamoylpropanoic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-aspartic_acid.sml0000664000175000017500000000313315212624223025004 0ustar lerouxleroux Amino acids Aspartic acid-(D) (D)-Aspartic acid (2R)-2-Aminobutanedioicacid 16 atomes_1.3.1/data/library/molecules/Amino_acids/d-serine.sml0000664000175000017500000000272315212624223023507 0ustar lerouxleroux Amino acids Serine-(D) (D)-Serine (2R)-2-Amino-3-hydroxypropanoic acid 14 atomes_1.3.1/data/library/molecules/Amino_acids/l-leucine.sml0000664000175000017500000000375615212624223023665 0ustar lerouxleroux Amino acids Leucine-(L) (L)-Leucine (2S)-2-Amino-4-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/d-tryptophan.sml0000664000175000017500000000451415212624223024432 0ustar lerouxleroux Amino acids Tryptophan-(D) (D)-Tryptophan (2R)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 atomes_1.3.1/data/library/molecules/Amino_acids/d-valine.sml0000664000175000017500000000344015212624223023475 0ustar lerouxleroux Amino acids Valine-(D) (D)-Valine (2R)-2-Amino-3-methylbutanoic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/l-4-nitrophenylalanine.sml0000664000175000017500000000432415212624223026275 0ustar lerouxleroux Amino acids 4-Nitrophenylalanine-(L) (L)-4-Nitrophenylalanine (S)-2-Amino-3-(4-nitrophenyl)propanoic acid 25 atomes_1.3.1/data/library/molecules/Amino_acids/d-methionine.sml0000664000175000017500000000362215212624223024360 0ustar lerouxleroux Amino acids Methionine-(D) (D)-Methionine (2R)-2-Amino-4-methylsulfanylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/glycine.sml0000664000175000017500000000226715212624223023436 0ustar lerouxleroux Amino acids Glycine-(D) Glycine 2-Aminoacetic acid 10 atomes_1.3.1/data/library/molecules/Amino_acids/l-tyrosine.sml0000664000175000017500000000417215212624223024106 0ustar lerouxleroux Amino acids Tyrosine-(L) (L)-Tyrosine (2S)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 atomes_1.3.1/data/library/molecules/Linear_sugars/0000775000175000017500000000000015212624223021650 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Linear_sugars/d-gulose.sml0000664000175000017500000000422715212624223024111 0ustar lerouxleroux Sugars (Linears) (D)-Gulose (2R,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Gulose (D)-Gulo-hexose Aldehydo-D-gulose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-altrose.sml0000664000175000017500000000411715212624223024262 0ustar lerouxleroux Sugars (Linears) (D)-Altrose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Altrose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-erythrulose.sml0000664000175000017500000000314115212624223025172 0ustar lerouxleroux Sugars (Linears) (D)-Erythrulose (R)-1,3,4-Trihydroxybutan-2-one (D)-Erythrulose Glycerotetrulose 16 atomes_1.3.1/data/library/molecules/Linear_sugars/d-xylose.sml0000664000175000017500000000354315212624223024136 0ustar lerouxleroux Sugars (Linears) (D)-Xylose (3R,4S,5R)-oxane-2,3,4,5-tetrol (D)-Xylose α-(D)-xylopyranose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-sorbose.sml0000664000175000017500000000422115212624223024261 0ustar lerouxleroux Sugars (Linears) (D)-Sorbose (3R,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Sorbose Sorbinose (L)-Xylo-Hexulose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-glucose.sml0000664000175000017500000000417715212624223024260 0ustar lerouxleroux Sugars (Linears) (D)-Glucose (2R,3S,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Glucose α-(D)-Glucopyranose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-idose.sml0000664000175000017500000000412315212624223023711 0ustar lerouxleroux Sugars (Linears) (D)-Idose (2S,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Idose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-galactose.sml0000664000175000017500000000417415212624223024556 0ustar lerouxleroux Sugars (Linears) (D)-Galactose (2R,3S,4S,5R)-2,3,4,5,6-pentahydroxyhexanal (D)-Galactose Galactopyranose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-ribulose.sml0000664000175000017500000000357715212624223024446 0ustar lerouxleroux Sugars (Linears) (D)-Ribulose (3R,4R)-1,3,4,5-Tetrahydroxypentan-2-one Adonose Arabinulose Araboketose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-talose.sml0000664000175000017500000000415615212624223024103 0ustar lerouxleroux Sugars (Linears) (D)-Talose (2S,3S,4S,5R)-Pentahydroxyhexanal (D)-Talose (D)-Talo-hexose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/dihydroxyacetone.sml0000664000175000017500000000251115212624223025746 0ustar lerouxleroux Sugars (Linears) Dihydroxyacetone 1,3-Dihydroxypropan-2-one Dihydroxyacetone Glycerone 12 atomes_1.3.1/data/library/molecules/Linear_sugars/d-mannose.sml0000664000175000017500000000422615212624223024252 0ustar lerouxleroux Sugars (Linears) (D)-Mannose (3S,4S,5S,6R)-6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Mannose Carubinose Seminose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-arabinose.sml0000664000175000017500000000346115212624223024555 0ustar lerouxleroux Sugars (Linears) (D)-Arabinose (D)-Arabinose Pectinose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-glyceraldehyde.sml0000664000175000017500000000252115212624223025573 0ustar lerouxleroux Sugars (Linears) (D)-Glyceraldehyde (R)-2,3-Dihydroxypropanal (D)-Glyceraldehyde (D)-Glycerose 12 atomes_1.3.1/data/library/molecules/Linear_sugars/d-threose.sml0000664000175000017500000000312715212624223024262 0ustar lerouxleroux Sugars (Linears) (D)-Threose (2S,3R)-2,3,4-Trihydroxybutanal (D)-Threose (D)-Threoterose 16 atomes_1.3.1/data/library/molecules/Linear_sugars/d-lyxose.sml0000664000175000017500000000354715212624223024142 0ustar lerouxleroux Sugars (Linears) (D)-Lyxose (2S,3S,4R)-2,3,4,5-Tetrahydroxypentanal (D)-Lyxose Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-allose.sml0000664000175000017500000000416515212624223024073 0ustar lerouxleroux Sugars (Linears) (D)-Allose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Allose Aldehydo-(D)-allose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-psicose.sml0000664000175000017500000000426415212624223024261 0ustar lerouxleroux Sugars (Linears) (D)-Psicose (3R,4R,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Psicose (D)-Pseudofructose (D)-Altrulose Allulose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-erythrose.sml0000664000175000017500000000307415212624223024636 0ustar lerouxleroux Sugars (Linears) (D)-Erythrose (2R,3R)-2,3,4-Trihydroxybutanal (D)-Erythrose 16 atomes_1.3.1/data/library/molecules/Linear_sugars/d-xylulose.sml0000664000175000017500000000361615212624223024500 0ustar lerouxleroux Sugars (Linears) (D)-Xylulose (3S,4R)-1,3,4,5-Tetrahydroxypentan-2-one (D)-Xylulose threo-Pentulose threo-2-Pentulose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-ribose.sml0000664000175000017500000000357315212624223024101 0ustar lerouxleroux Sugars (Linears) (D)-Ribose (2R,3S,4R)-5-(Hydroxymethyl)tetrahydrofuran-2,3,4-triol (D)-Ribofuranose α-(D)-ribose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-fructose.sml0000664000175000017500000000422115212624223024437 0ustar lerouxleroux Sugars (Linears) (D)-Fructose (2R,3S,4R,5R)-2,5-bis(hydroxymethyl)oxolane-2,3,4-triol (D)-Fructose α-(D)-Fructofuranose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-tagatose.sml0000664000175000017500000000424115212624223024416 0ustar lerouxleroux Sugars (Linears) (D)-Tagatose (3S,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Tagatose (D)-Lyxo-Hexulose keto-(D)-tagatose 24 atomes_1.3.1/data/library/molecules/Alkynes/0000775000175000017500000000000015212624223020460 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alkynes/ethyne.sml0000664000175000017500000000132115212624223022466 0ustar lerouxleroux Alkynes Ethyne Ethyne Acetylene 4 atomes_1.3.1/data/library/molecules/Alkynes/propyne.sml0000664000175000017500000000172315212624223022674 0ustar lerouxleroux Alkynes Propyne Prop-1-yne Propyne Methyl acetylene Allylene 7 atomes_1.3.1/data/library/molecules/Nucleobases/0000775000175000017500000000000015212624223021315 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Nucleobases/cytosine.sml0000664000175000017500000000276715212624223023703 0ustar lerouxleroux Nucleobases Cytosine 4-aminopyrimidin-2(1--i--H--I--)-one Cytosine 4-amino-1--i--H--I---pyrimidine-2-one 1--i--H--I---4-amino-2-oxopyrimidine 13 atomes_1.3.1/data/library/molecules/Nucleobases/uracil.sml0000664000175000017500000000273715212624223023322 0ustar lerouxleroux Nucleobases Uracil Pyrimidine-2,4(1--i--H--I--,3--i--H--I--)-dione Uracil 2-oxy-4-oxy pyrimidine 2,4(1--i--H--I--,3--i--H--I--)-pyrimidinedione 2,4-dihydroxypyrimidine 12 atomes_1.3.1/data/library/molecules/Nucleobases/thymine.sml0000664000175000017500000000316115212624223023510 0ustar lerouxleroux Nucleobases Thymine 5-Methylpyrimidine-2,4(1--i--H--I--,3--i--H--I--)-dione Thymine 5-Methyl-1H-pyrimidine-2,4-dione 5-methyluracil 15 atomes_1.3.1/data/library/molecules/Nucleobases/adenine.sml0000664000175000017500000000304715212624223023441 0ustar lerouxleroux Nucleobases Adenine 9--i--H--I---purin-6-amine Adenine 6-Aminopurine 1,6-dihydro-6-iminopurine 15 atomes_1.3.1/data/library/molecules/Nucleobases/guanine.sml0000664000175000017500000000333615212624223023465 0ustar lerouxleroux Nucleobases Guanine 2-amino-9--i--H--I---purin-6(1--i--H--I--)-one Guanine 1,9-dihydro-6--i--H--I---purin-6-one 2-amino-6-hydroxypurine 2-aminohypoxanthine 16 atomes_1.3.1/data/library/molecules/Aldehydes/0000775000175000017500000000000015212624223020754 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Aldehydes/acetaldehyde.sml0000664000175000017500000000200215212624223024077 0ustar lerouxleroux Aldehydes Acetaldehyde Acetaldehyde Ethanal Acetic aldehyde Acetylaldehyde 7 atomes_1.3.1/data/library/molecules/Aldehydes/formaldehyde.sml0000664000175000017500000000147015212624223024136 0ustar lerouxleroux Aldehydes Formaldehyde Formaldehyde Methanal Methylene glycol Formol 4 atomes_1.3.1/data/library/molecules/Cyclic_sugars/0000775000175000017500000000000015212624223021644 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-glucuronopyranose.sml0000664000175000017500000000366215212624223027472 0ustar lerouxleroux Sugars (Cyclics) Glucuronopyranose-α-D α-D-Glucuronopyranose 22 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-psicopyranose.sml0000664000175000017500000000403715212624223026567 0ustar lerouxleroux Sugars (Cyclics) Psicopyranose-α-D α-D-Psicopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-arabinopyranose.sml0000664000175000017500000000344415212624223027066 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-α-D α-D-Arabinopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-arabinopyranose.sml0000664000175000017500000000344215212624223026722 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-β-L β-L-Abinopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-tagatopyranose.sml0000664000175000017500000000405315212624223026727 0ustar lerouxleroux Sugars (Cyclics) Tagatopyranose-α-D α-D-Tagatopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-galactopyranose.sml0000664000175000017500000000405415212624223027073 0ustar lerouxleroux Sugars (Cyclics) Galactopyranose-α-L α-L-Galactopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-xylopyranose.sml0000664000175000017500000000343615212624223026275 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-β-D β-D-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-lyxopyranose.sml0000664000175000017500000000343615212624223026275 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-β-D β-D-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-ribopyranose.sml0000664000175000017500000000343515212624223026234 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-β-D β-D-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-arabinopyranose.sml0000664000175000017500000000343515212624223026714 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-β-D β-D-Arabinopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-galactopyranose.sml0000664000175000017500000000406315212624223026711 0ustar lerouxleroux Sugars (Cyclics) Galactopyranose-β-D β-D-Galactopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-galactopyranose.sml0000664000175000017500000000405515212624223027064 0ustar lerouxleroux Sugars (Cyclics) Galactopyranose-α-D α-D-Galactopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-fucopyranose.sml0000664000175000017500000000374615212624223026414 0ustar lerouxleroux Sugars (Cyclics) Fucopyranose-α-D α-D-Fucopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-lyxopyranose.sml0000664000175000017500000000343415212624223026445 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-α-D α-D-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-talopyranose.sml0000664000175000017500000000405315212624223026407 0ustar lerouxleroux Sugars (Cyclics) Talopyranose-α-D α-D-Talopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-galacturonopyranose.sml0000664000175000017500000000366215212624223027773 0ustar lerouxleroux Sugars (Cyclics) Galacturonopyranose-α-D α-D-Galacturonopyranose 22 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-sorbopyranose.sml0000664000175000017500000000404215212624223026602 0ustar lerouxleroux Sugars (Cyclics) Sorbopyranose-α-L α-L-Sorbopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-fructopyranose.sml0000664000175000017500000000405515212624223026602 0ustar lerouxleroux Sugars (Cyclics) Fructopyranose-β-D β-D-Fructopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-xylopyranose.sml0000664000175000017500000000344015212624223026300 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-β-L β-L-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-xylopyranose.sml0000664000175000017500000000344015212624223026452 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-α-L α-L-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-rhamnopyranose.sml0000664000175000017500000000375715212624223026756 0ustar lerouxleroux Sugars (Cyclics) Rhamnopyranose-α-L α-L-Rhamnopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-fucopyranose.sml0000664000175000017500000000374715212624223026425 0ustar lerouxleroux Sugars (Cyclics) Fucopyranose-α-L α-L-Fucopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-gulopyranose.sml0000664000175000017500000000405515212624223026246 0ustar lerouxleroux Sugars (Cyclics) Gulopyranose-β-D β-D-Gulopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-glucopyranose.sml0000664000175000017500000000404515212624223026410 0ustar lerouxleroux Sugars (Cyclics) Glucopyranose-β-D β-D-Glucopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-mannopyranose.sml0000664000175000017500000000405115212624223026404 0ustar lerouxleroux Sugars (Cyclics) Mannopyranose-β-D β-D-Mannopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-allopyranose.sml0000664000175000017500000000404115212624223026374 0ustar lerouxleroux Sugars (Cyclics) Allopyranose-α-D α-D-Allopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-allopyranose.sml0000664000175000017500000000404315212624223026224 0ustar lerouxleroux Sugars (Cyclics) Allopyranose-β-D β-D-Allopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-lyxopyranose.sml0000664000175000017500000000343615212624223026457 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-α-L α-L-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-talopyranose.sml0000664000175000017500000000405615212624223026240 0ustar lerouxleroux Sugars (Cyclics) Talopyranose-β-D β-D-Talopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-fucopyranose.sml0000664000175000017500000000373515212624223026240 0ustar lerouxleroux Sugars (Cyclics) Fucopyranose-β-D β-D-Fucopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-idopyranose.sml0000664000175000017500000000405115212624223026047 0ustar lerouxleroux Sugars (Cyclics) Idopyranose-β-D β-D-Idopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-xylopyranose.sml0000664000175000017500000000343415212624223026445 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-α-D α-D-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-ribopyranose.sml0000664000175000017500000000343015212624223026411 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-α-L α-L-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-mannopyranose.sml0000664000175000017500000000406015212624223026556 0ustar lerouxleroux Sugars (Cyclics) Mannopyranose-α-D α-D-Mannopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-glucopyranose.sml0000664000175000017500000000403615212624223026562 0ustar lerouxleroux Sugars (Cyclics) Glucopyranose-α-D α-D-Glucopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-rhamnopyranose.sml0000664000175000017500000000375715212624223026574 0ustar lerouxleroux Sugars (Cyclics) Rhamnopyranose-β-D β-D-Rhamnopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-rhamnopyranose.sml0000664000175000017500000000374215212624223026740 0ustar lerouxleroux Sugars (Cyclics) Rhamnopyranose-α-D α-D-Rhamnopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-tagatopyranose.sml0000664000175000017500000000405415212624223026556 0ustar lerouxleroux Sugars (Cyclics) Tagatopyranose-β-D β-D-Tagatopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-gulopyranose.sml0000664000175000017500000000404615212624223026420 0ustar lerouxleroux Sugars (Cyclics) Gulopyranose-α-D α-D-Gulopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-ribopyranose.sml0000664000175000017500000000343115212624223026240 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-β-L β-L-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-ribopyranose.sml0000664000175000017500000000343715212624223026410 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-α-D α-D-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-idopyranose.sml0000664000175000017500000000405015212624223026220 0ustar lerouxleroux Sugars (Cyclics) Idopyranose-α-D α-D-Idopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-lyxopyranose.sml0000664000175000017500000000343615212624223026305 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-β-L β-L-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-arabinopyranose.sml0000664000175000017500000000344715212624223027101 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-α-L α-L-Arabinopyranose 20 atomes_1.3.1/data/library/molecules/Sulfoxides/0000775000175000017500000000000015212624223021177 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Sulfoxides/dimethyl_sulfoxide.sml0000664000175000017500000000235415212624223025621 0ustar lerouxleroux Sulfoxides Dimethyl sulfoxide Dimethyl sulfoxide Methylsulfinylmethane Methyl sulfoxide 10 atomes_1.3.1/data/library/molecules/Alkanes/0000775000175000017500000000000015212624223020430 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alkanes/dodecane.sml0000664000175000017500000000561615212624223022717 0ustar lerouxleroux Alkanes Dodecane Dodecane 38 atomes_1.3.1/data/library/molecules/Alkanes/propane.sml0000664000175000017500000000224415212624223022613 0ustar lerouxleroux Alkanes Propane Propane Tricarbane 11 atomes_1.3.1/data/library/molecules/Alkanes/pentadecane.sml0000664000175000017500000000702515212624223023420 0ustar lerouxleroux Alkanes Pentadecane Pentadecane --i--n--I---Pentadecane 47 atomes_1.3.1/data/library/molecules/Alkanes/tetracosane.sml0000664000175000017500000001240215212624223023454 0ustar lerouxleroux Alkanes Tetracosane Tetracosane 74 atomes_1.3.1/data/library/molecules/Alkanes/icosane.sml0000664000175000017500000001075115212624223022572 0ustar lerouxleroux Alkanes Icosane Icosane Eicosane 62 atomes_1.3.1/data/library/molecules/Alkanes/butane.sml0000664000175000017500000000264715212624223022434 0ustar lerouxleroux Alkanes Butane Butane Butyl hydride Methylethylmethane Quartane 14 atomes_1.3.1/data/library/molecules/Alkanes/hexadecane.sml0000664000175000017500000000726015212624223023237 0ustar lerouxleroux Alkanes Hexadecane Hexadecane 50 atomes_1.3.1/data/library/molecules/Alkanes/undecane.sml0000664000175000017500000000534115212624223022732 0ustar lerouxleroux Alkanes Undecane Undecane Hendecane 35 atomes_1.3.1/data/library/molecules/Alkanes/pentane.sml0000664000175000017500000000305515212624223022602 0ustar lerouxleroux Alkanes Pentane Pentane Quintane 17 atomes_1.3.1/data/library/molecules/Alkanes/octane.sml0000664000175000017500000000415315212624223022421 0ustar lerouxleroux Alkanes Octane Octane 26 atomes_1.3.1/data/library/molecules/Alkanes/tetradecane.sml0000664000175000017500000000644315212624223023433 0ustar lerouxleroux Alkanes Tetradecane Tetradecane 44 atomes_1.3.1/data/library/molecules/Alkanes/heptane.sml0000664000175000017500000000367515212624223022604 0ustar lerouxleroux Alkanes Heptane Heptane Septane 23 atomes_1.3.1/data/library/molecules/Alkanes/tridecane.sml0000664000175000017500000000612615212624223023110 0ustar lerouxleroux Alkanes Tridecane Tridecane 41 atomes_1.3.1/data/library/molecules/Alkanes/ethane.sml0000664000175000017500000000172715212624223022420 0ustar lerouxleroux Alkanes Ethane Ethane Dicarbane 8 atomes_1.3.1/data/library/molecules/Alkanes/nonane.sml0000664000175000017500000000446015212624223022427 0ustar lerouxleroux Alkanes Nonane Nonane 29 atomes_1.3.1/data/library/molecules/Alkanes/methane.sml0000664000175000017500000000151515212624223022570 0ustar lerouxleroux Alkanes Methane Methane Natural Gas Hydrogen carbide Carbane 5 atomes_1.3.1/data/library/molecules/Alkanes/decane.sml0000664000175000017500000000477315212624223022377 0ustar lerouxleroux Alkanes Decane Decane 32 atomes_1.3.1/data/library/molecules/Alkanes/hexane.sml0000664000175000017500000000336415212624223022423 0ustar lerouxleroux Alkanes Hexane Hexane Sextane 20 atomes_1.3.1/data/library/molecules/Alkanes/methylpropane.sml0000664000175000017500000000263015212624223024035 0ustar lerouxleroux Alkanes Methylpropane Methylpropane 2-Methylpropane Isobutane 14 atomes_1.3.1/data/library/molecules/Steroids/0000775000175000017500000000000015212624223020646 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Steroids/cholesterol.sml0000664000175000017500000001301415212624223023705 0ustar lerouxleroux Steroids Cholesterol (3β)-cholest-5-en-3-ol Cholesterol Cholesterin Cholesteryl alcohol 74 atomes_1.3.1/data/library/molecules/Steroids/estradiol.sml0000664000175000017500000000703115212624223023352 0ustar lerouxleroux Steroids Estradiol (17β)-estra-1,3,5(10)-triene-3,17-diol Estradiol Oestradiol E2 17β-Estradiol 44 atomes_1.3.1/data/library/molecules/Steroids/testosterone.sml0000664000175000017500000000717415212624223024132 0ustar lerouxleroux Steroids Testosterone 17β-hydroxyandrost-4-en-3-one Testosterone Androst-4-en-17β-ol-3-one 46 atomes_1.3.1/data/library/molecules/Thiols/0000775000175000017500000000000015212624223020314 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Thiols/methanethiol.sml0000664000175000017500000000170015212624223023510 0ustar lerouxleroux Thiols Methanethiol Methanethiol Methyl mercaptan Mercaptomethane Methiol 6 atomes_1.3.1/data/library/molecules/Thiols/octane-1-thiol.sml0000664000175000017500000000437615212624223023567 0ustar lerouxleroux Thiols Octane-1-thiol Octane-1-thiol 1-Octanethiol 27 atomes_1.3.1/data/library/molecules/Thiols/r_butane-2-thiol.sml0000664000175000017500000000306315212624223024106 0ustar lerouxleroux Thiols (R)-Butane-2-thiol (2R)-Butane-2-thiol (R)-Butane-2-thiol (R)-2-Butanethiol (2R)-2-butanethiol 15 atomes_1.3.1/data/library/molecules/Thiols/2-methylproprane-2-thiol.sml0000664000175000017500000000311715212624223025517 0ustar lerouxleroux Thiols 2-Methylproprane-2-thiol 2-Methylproprane-2-thiol --i--t--I---BuSH 2-Methyl-2-propanethiol --i--tert--I---Butyl mercaptan 15 atomes_1.3.1/data/library/molecules/Thiols/pentane-1-thiol.sml0000664000175000017500000000331215212624223023735 0ustar lerouxleroux Thiols Pentane-1-thiol Pentane-1-thiol 1-Pentanethiol Penta mercaptan 18 atomes_1.3.1/data/library/molecules/Thiols/proprane-1-thiol.sml0000664000175000017500000000254415212624223024137 0ustar lerouxleroux Thiols Proprane-1-thiol Proprane-1-thiol --i--n--I---Propylthiol 1-Propanethiol Propyl mercaptan 12 atomes_1.3.1/data/library/molecules/Thiols/proprane-2-thiol.sml0000664000175000017500000000254315212624223024137 0ustar lerouxleroux Thiols Proprane-2-thiol Proprane-2-thiol 2-Propyl mercaptan Isopropyl mercaptan Isopropanthiol 12 atomes_1.3.1/data/library/molecules/Thiols/hexane-1-thiol.sml0000664000175000017500000000361715212624223023563 0ustar lerouxleroux Thiols Hexane-1-thiol Hexane-1-thiol 1-Hexanethiol Hexil mercaptan 21 atomes_1.3.1/data/library/molecules/Thiols/ethane-1_2-dithiol.sml0000664000175000017500000000227715212624223024316 0ustar lerouxleroux Thiols Ethane-1,2-dithiol Ethane-1,2-dithiol Dimercaptoethane 1,2-Ethanedithiol 10 atomes_1.3.1/data/library/molecules/Thiols/heptane-1-thiol.sml0000664000175000017500000000413215212624223023730 0ustar lerouxleroux Thiols Heptane-1-thiol Heptane-1-thiol 1-Heptanethiol Heptyl mercaptan 24 atomes_1.3.1/data/library/molecules/Thiols/ethanethiol.sml0000664000175000017500000000221415212624223023334 0ustar lerouxleroux Thiols Ethanethiol Ethanethiol Ethyl mercaptan Mercaptoethane Ethyl sulfhydrate 9 atomes_1.3.1/data/library/molecules/Thiols/butane-1-thiol.sml0000664000175000017500000000305115212624223023561 0ustar lerouxleroux Thiols Butane-1-thiol Butane-1-thiol Butyl mercaptan --i--n--I---Butyl mercaptan 1-Butanethiol 15 atomes_1.3.1/data/library/molecules/Nitriles/0000775000175000017500000000000015212624223020643 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Nitriles/acetonitrile.sml0000664000175000017500000000174715212624223024053 0ustar lerouxleroux Nitriles Acetonitrile Acetonitrile Cyanomethane Ethyl nitrile Methanecarbonitrile Methyl cyanide 6 atomes_1.3.1/data/library/molecules/Nitriles/isobutyronitrile.sml0000664000175000017500000000251315212624223025007 0ustar lerouxleroux Nitriles Isobutyronitrile 2-Methylpropanenitrile Isobutyronitrile 2-Methylpropionitrile 12 atomes_1.3.1/data/library/molecules/Nitriles/propionitrile.sml0000664000175000017500000000225015212624223024256 0ustar lerouxleroux Nitriles Propionitrile Propanenitrile Cyanoethane Ethyl cyanide Propionitrile Propylnitrile 9 atomes_1.3.1/data/library/molecules/Nitriles/Trichloroacetonitrile.sml0000664000175000017500000000164715212624223025740 0ustar lerouxleroux Nitriles Trichloroacetonitrile Trichloroacetonitrile 1,1,1-Trichloroacetonitrile 6 atomes_1.3.1/data/library/molecules/Nitriles/butyronitrile.sml0000664000175000017500000000260015212624223024271 0ustar lerouxleroux Nitriles Butyronitrile Butanenitrile Butyronitrile 1-Cyanopropane Propyl cyanide --i--n--I---Butyronitrile 12 atomes_1.3.1/data/library/molecules/Macrocycles/0000775000175000017500000000000015212624223021316 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Macrocycles/phthalocyanine.sml0000664000175000017500000001035515212624223025045 0ustar lerouxleroux Macrocycles Phthalocyanine Phthalocyanine 58 atomes_1.3.1/data/library/molecules/Macrocycles/porphin.sml0000664000175000017500000000600215212624223023510 0ustar lerouxleroux Macrocycles Porphin Porphin 21--i--H--I--,23--i--H--I---Porphin Porphyrin 38 atomes_1.3.1/data/library/molecules/Macrocycles/ni-phthalocyanine.sml0000664000175000017500000001160715212624223025452 0ustar lerouxleroux Macrocycles Ni-Phthalocyanine Ni-Phthalocyanine 57 atomes_1.3.1/data/library/molecules/Aromatics/0000775000175000017500000000000015212624223020774 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Aromatics/xanthene.sml0000664000175000017500000000416315212624223023327 0ustar lerouxleroux Aromatics Xanthene 9H-Xanthene Xanthene Dibenzo[a,e]pyran 10H-9-oxaanthracene 24 atomes_1.3.1/data/library/molecules/Aromatics/1h-indole.sml0000664000175000017500000000277415212624223023303 0ustar lerouxleroux Aromatics 1H-Indole 1H-Indole 16 atomes_1.3.1/data/library/molecules/Aromatics/isoquinoline.sml0000664000175000017500000000320315212624223024225 0ustar lerouxleroux Aromatics Isoquinoline Isoquinoline Benzo[c]pyridine 2-Benzanine 17 atomes_1.3.1/data/library/molecules/Aromatics/benzothiophene.sml0000664000175000017500000000310515212624223024531 0ustar lerouxleroux Aromatics Benzothiophene Benzo[b]thiophene Benzothiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 atomes_1.3.1/data/library/molecules/Aromatics/nitrobenzene.sml0000664000175000017500000000273615212624223024223 0ustar lerouxleroux Aromatics Nitrobenzene Nitrobenzene Nitrobenzol Oil of mirbane 14 atomes_1.3.1/data/library/molecules/Aromatics/cyclopentadienyl.sml0000664000175000017500000000215515212624223025062 0ustar lerouxleroux Aromatics Cyclopentadienyl Cyclopentadienyl Cp 10 atomes_1.3.1/data/library/molecules/Aromatics/toluene.sml0000664000175000017500000000277315212624223023175 0ustar lerouxleroux Aromatics Toluene Toluene Methylbenzene Phenylmethane Toluol Anisen 15 atomes_1.3.1/data/library/molecules/Aromatics/uric_acid.sml0000664000175000017500000000330115212624223023430 0ustar lerouxleroux Aromatics Uric acid 7,9-Dihydro-3H-purine-2,6,8-trione Uric acid 2,6,8-Trioxypurine 2,6,8-Trihydroxypurine 1H-Purine-2,6,8-triol 16 atomes_1.3.1/data/library/molecules/Aromatics/naphthalene.sml0000664000175000017500000000331015212624223023775 0ustar lerouxleroux Aromatics Naphthalene Naphthalene Camphor tar Naphthaline Bicyclo[4.4.0]deca-1,3,5,7,9-pentaene 18 atomes_1.3.1/data/library/molecules/Aromatics/benzoic_acid.sml0000664000175000017500000000304015212624223024117 0ustar lerouxleroux Aromatics Benzoic acid Benzoic acid Benzenecarboxylic acid E 210 Dracylic acid 15 atomes_1.3.1/data/library/molecules/Aromatics/aniline.sml0000664000175000017500000000274315212624223023136 0ustar lerouxleroux Aromatics Aniline Aniline Benzenamine Phenylamine Aminobenzene Benzamine 14 atomes_1.3.1/data/library/molecules/Aromatics/indene.sml0000664000175000017500000000322115212624223022751 0ustar lerouxleroux Aromatics Indene 1H-Indene Bicyclo[4.3.0]nona-1,3,5,7-tetraene Benzocyclopentadiene Indonaphthene 17 atomes_1.3.1/data/library/molecules/Aromatics/phthalimide.sml0000664000175000017500000000315515212624223024005 0ustar lerouxleroux Aromatics Phthalimide Isoindole-1,3-dione Phthalimide 1,3-dioxoisoindoline 16 atomes_1.3.1/data/library/molecules/Aromatics/2h-chromene.sml0000664000175000017500000000324515212624223023624 0ustar lerouxleroux Aromatics 2H-Chromene 2H-1-benzopyran 2H-Chromene 18 atomes_1.3.1/data/library/molecules/Aromatics/acridine.sml0000664000175000017500000000403615212624223023272 0ustar lerouxleroux Aromatics Acridine Acridine Dibenzo[b,e]pyridine 2,3-Benzoquinoline 23 atomes_1.3.1/data/library/molecules/Aromatics/phenanthrene.sml0000664000175000017500000000410615212624223024171 0ustar lerouxleroux Aromatics Phenanthrene Phenanthrene Tricyclo[8.4.0.0--b--2,7--e--]tetradeca-1,3,5,7,9,11,13-heptaene 24 atomes_1.3.1/data/library/molecules/Aromatics/acenaphthylene.sml0000664000175000017500000000353315212624223024505 0ustar lerouxleroux Aromatics Acenaphthylene Acenaphthylene Acenaphthalene Tricyclo[6.3.1.0--b--4,12--e--]dodeca-1(12),2,4,6,8,10-hexaene 20 atomes_1.3.1/data/library/molecules/Aromatics/anisole.sml0000664000175000017500000000313215212624223023142 0ustar lerouxleroux Aromatics Anisole Anisole Methoxybenzene Methyl Phenyl ether Phenoxymethane 16 atomes_1.3.1/data/library/molecules/Aromatics/phenanthroline.sml0000664000175000017500000000367215212624223024537 0ustar lerouxleroux Aromatics Phenanthroline 1,10-Phenanthroline Phenanthroline 22 atomes_1.3.1/data/library/molecules/Aromatics/naphthyridine.sml0000664000175000017500000000311415212624223024356 0ustar lerouxleroux Aromatics Naphthyridine 1,8-Naphthyridine Naphthyridine 1,8-Diazanaphthalene 16 atomes_1.3.1/data/library/molecules/Aromatics/phenol.sml0000664000175000017500000000264415212624223023004 0ustar lerouxleroux Aromatics Phenol Phenol Benzenol Carbolic acid Phenylic acid Hydroxybenzene 13 atomes_1.3.1/data/library/molecules/Aromatics/coumarin.sml0000664000175000017500000000323415212624223023330 0ustar lerouxleroux Aromatics Coumarin 2H-chromen-2-one Coumarin Chromen-2-one 1-Benzopyran-2-one 17 atomes_1.3.1/data/library/molecules/Aromatics/acenaphthene.sml0000664000175000017500000000401715212624223024136 0ustar lerouxleroux Aromatics Acenaphthene 1,2-Dihydroacenaphthylene Acenaphthene 1,8-Ethylenenaphthalene Tricyclo[6.3.1.0--b--4,12--e--]dodeca-1(12),4,6,8,10-pentaene 22 atomes_1.3.1/data/library/molecules/Aromatics/quinoline.sml0000664000175000017500000000327715212624223023525 0ustar lerouxleroux Aromatics Quinoline Quinoline 1-Benzopyridine Benzo[b]pyridine 2-Azabicyclo[4.4.0]deca-1(6),2,4,7,9-pentaene 17 atomes_1.3.1/data/library/molecules/Aromatics/cinnoline.sml0000664000175000017500000000303615212624223023471 0ustar lerouxleroux Aromatics Cinnoline Cinnoline Benzopyridazine 16 atomes_1.3.1/data/library/molecules/Aromatics/quinazoline.sml0000664000175000017500000000320315212624223024045 0ustar lerouxleroux Aromatics Quinazoline Quinazoline 1,3-diazanaphthalene Benzopyrimidine Phenmiazine Benzo-1,3-diazine 16 atomes_1.3.1/data/library/molecules/Aromatics/4h-chromene.sml0000664000175000017500000000324615212624223023627 0ustar lerouxleroux Aromatics 4H-Chromene 4H-1-benzopyran 4H-Chromene 18 atomes_1.3.1/data/library/molecules/Aromatics/caffeine.sml0000664000175000017500000000430015212624223023246 0ustar lerouxleroux Aromatics Caffeine Caffeine Guaranine Theine Trimethylxanthine 1,3,7-Trimethyl-1H-purine-2,6(3H,7H)-dione 24 atomes_1.3.1/data/library/molecules/Aromatics/benzaldehyde.sml0000664000175000017500000000300715212624223024147 0ustar lerouxleroux Aromatics Benzaldehyde Benzaldehyde Benzenecarbaldehyde Benzenecarboxaldehyde Phenylmethanal Benzoic aldehyde 14 atomes_1.3.1/data/library/molecules/Aromatics/benzoyl_chloride.sml0000664000175000017500000000272115212624223025046 0ustar lerouxleroux Aromatics Benzoyl chloride Benzoyl chloride Benzenecarbonyl chloride 14 atomes_1.3.1/data/library/molecules/Aromatics/chromone.sml0000664000175000017500000000316415212624223023327 0ustar lerouxleroux Aromatics Chromone Chromen-4-one Chromone 1,4-Benzopyrone 17 atomes_1.3.1/data/library/molecules/Aromatics/tetralin.sml0000664000175000017500000000371415212624223023340 0ustar lerouxleroux Aromatics Tetralin 1,2,3,4-tetrahydronaphthalene Bacticin benzocyclohexane THN 22 atomes_1.3.1/data/library/molecules/Aromatics/purine.sml0000664000175000017500000000250715212624223023017 0ustar lerouxleroux Aromatics Purine 9H-Purine Purine 13 atomes_1.3.1/data/library/molecules/Aromatics/carbazole.sml0000664000175000017500000000375115212624223023461 0ustar lerouxleroux Aromatics Carbazole 9H-Carbazole 9-Azafluorene Dibenzopyrrole Diphenylenimine 22 atomes_1.3.1/data/library/molecules/Aromatics/benzofuran.sml0000664000175000017500000000302215212624223023657 0ustar lerouxleroux Aromatics Benzofuran 1-Benzofuran Benzofuran Coumarone Benzo[b]furan 15 atomes_1.3.1/data/library/molecules/Aromatics/acenaphthenequinone.sml0000664000175000017500000000354515212624223025542 0ustar lerouxleroux Aromatics Acenaphthenequinone Acenaphthylene-1,2-dione Acenaphthenequinone Acenaphthenedione 20 atomes_1.3.1/data/library/molecules/Aromatics/anthracene.sml0000664000175000017500000000411115212624223023616 0ustar lerouxleroux Aromatics Anthracene Anthracene Tricyclo[8.4.0.0--b--3,8--e--]tetradeca-1,3,5,7,9,11,13-heptaene 24 atomes_1.3.1/data/library/molecules/Aromatics/fluorene.sml0000664000175000017500000000402215212624223023326 0ustar lerouxleroux Aromatics Fluorene 9H-Fluorene Fluorene Tricyclo[7.4.0.0--b--2,7--e--]trideca-2,4,6,9,11,13-hexaene 23 atomes_1.3.1/data/library/molecules/Aromatics/benzene.sml0000664000175000017500000000234215212624223023140 0ustar lerouxleroux Aromatics Benzene Benzene Benzol 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/0000775000175000017500000000000015212624223022314 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Carboxylic_acids/formic_acid.sml0000664000175000017500000000161215212624223025270 0ustar lerouxleroux Carboxylic acids Formic acid Formic acid Methanoic acid Carbonous acid Formylic acid 5 atomes_1.3.1/data/library/molecules/Carboxylic_acids/oxalic_acid.sml0000664000175000017500000000206015212624223025266 0ustar lerouxleroux Carboxylic acids Oxalic acid Oxalic acid Ethanedioic acid Wood bleach 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-lactic_acid.sml0000664000175000017500000000251615212624223025505 0ustar lerouxleroux Carboxylic acids (L)-Lactic acid (S)-2-Hydroxypropanoic acidd (L)-Lactic acid Milk acid 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/trichloroacetic_acid.sml0000664000175000017500000000225015212624223027166 0ustar lerouxleroux Carboxylic acids Trichloroacetic acid Trichloroacetic acid Trichloroethanoic acid 2,2,2-Trichloroacetic acid 2,2,2-Trichloroethanoic acid 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/dichloroacetic_acid.sml0000664000175000017500000000223015212624223026762 0ustar lerouxleroux Carboxylic acids Dichloroacetic acid Dichloroacetic acid Dichloroethanoic acid Bichloroacetic acid 2,2-Dichloroacetic acid 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/isobutyric_acid.sml0000664000175000017500000000277215212624223026215 0ustar lerouxleroux Carboxylic acids Isobutyric acid 2-Methylpropanoic acid Isobutyric acid 2-Methylpropionic acid Isobutanoic acid 14 atomes_1.3.1/data/library/molecules/Carboxylic_acids/propanoic_acid.sml0000664000175000017500000000241015212624223026000 0ustar lerouxleroux Carboxylic acids Propanoic acid Propanoic acid Propionic acid Ethanecarboxylic acid 11 atomes_1.3.1/data/library/molecules/Carboxylic_acids/trifluoroacetic_acid.sml0000664000175000017500000000231015212624223027203 0ustar lerouxleroux Carboxylic acids Trifluoroacetic acid Trifluoroacetic acid Perfluoroacetic acid Trifluoroethanoic acid 2,2,2-Trifluoroacetic 2,2,2-Trifluoroethanoic acid 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/acetic_acid.sml0000664000175000017500000000211415212624223025237 0ustar lerouxleroux Carboxylic acids Acetic acid Acetic acid Ethanoic acid Hydrogen acetate Vinegar 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/butanoic_acid.sml0000664000175000017500000000275415212624223025625 0ustar lerouxleroux Carboxylic acids Butanoic acid Butanoic acid Butyric acid Ethylacetic acid Propanecarboxylic acid 14 atomes_1.3.1/data/library/molecules/Carboxylic_acids/d-lactic_acid.sml0000664000175000017500000000251515212624223025474 0ustar lerouxleroux Carboxylic acids (D)-Lactic acid (R)-2-Hydroxypropanoic acidd (D)-Lactic acid Milk acid 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-tartaric_acid.sml0000664000175000017500000000320415212624223026052 0ustar lerouxleroux Carboxylic acids (L)-Tartaric acid (2R,3R)-2,3-Dihydroxybutanedioic acid (L)-Tartaric acid Threaric acid Racemic acid 16 atomes_1.3.1/data/library/molecules/Carboxylic_acids/citric_acid.sml0000664000175000017500000000370115212624223025267 0ustar lerouxleroux Carboxylic acids Citric acid 2-Hydroxypropane-1,2,3-tricarboxylic acid Citric acid 3-Carboxy-3-hydroxypentanedioic acid 21 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-ascorbic_acid.sml0000664000175000017500000000344015212624223026030 0ustar lerouxleroux Carboxylic acids (L)-Ascorbic acid (R)-3,4-dihydroxy-5-((S)-1,2-dihydroxyethyl)furan-2(5H)-one (L)-Ascorbic acid Vitamic C Ascorbate 20 atomes_1.3.1/data/library/molecules/Carboxylic_acids/d-tartaric_acid.sml0000664000175000017500000000320515212624223026043 0ustar lerouxleroux Carboxylic acids (D)-Tartaric acid (2S,3S)-2,3-Dihydroxybutanedioic acid (D)-Tartaric acid Threaric acid Racemic acid 16 atomes_1.3.1/data/library/molecules/Carboxylic_acids/d-malic_acid.sml0000664000175000017500000000310715212624223025320 0ustar lerouxleroux Carboxylic acids (D)-Malic acid (R)-2-Hydroxybutanedioic acid (D)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 atomes_1.3.1/data/library/molecules/Carboxylic_acids/maleic_acid.sml0000664000175000017500000000250515212624223025245 0ustar lerouxleroux Carboxylic acids Maleic acid ((2Z)-But-2-enedioic acid Maleic acid Maleinic acid 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-malic_acid.sml0000664000175000017500000000310715212624223025330 0ustar lerouxleroux Carboxylic acids (L)-Malic acid (S)-2-Hydroxybutanedioic acid (L)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 atomes_1.3.1/data/library/molecules/Misc/0000775000175000017500000000000015212624223017745 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Misc/water.sml0000664000175000017500000000125515212624223021607 0ustar lerouxleroux Misc Water Water Oxidane Dihydrogen monoxide 3 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/0000775000175000017500000000000015212624223021762 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohexa-1_3-diene.sml0000664000175000017500000000271415212624223026124 0ustar lerouxleroux Cyclic alkenes Cyclohexa-1,3-diene Cyclohexa-1,3-diene 1,3-Cyclohexadiene 1,2-Dihydrobenzene 1,3-CHD 14 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohexa-1_4-diene.sml0000664000175000017500000000271315212624223026124 0ustar lerouxleroux Cyclic alkenes Cyclohexa-1,4-diene Cyclohexa-1,4-diene 1,4-Cyclohexadiene 1,4-Dihydrobenzene 1,4-CHD 14 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5_7-tetraene.sml0000664000175000017500000000306015212624223027315 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3,5,7-tetraene Cycloocta-1,3,5,7-tetraene [8]Annulene COT 16 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_6-triene.sml0000664000175000017500000000302315212624223026546 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3,6-triene Cycloocta-1,3,6-triene 18 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/z-cycloheptene.sml0000664000175000017500000000334115212624223025431 0ustar lerouxleroux Cyclic alkenes (Z)-Cycloheptene (Z)-Cycloheptene --i--cis--I---Cycloheptene 19 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/z-cyclooctene.sml0000664000175000017500000000364315212624223025263 0ustar lerouxleroux Cyclic alkenes (Z)-Cyclooctene (Z)-Cyclooctene --i--cis--I---Cyclooctene 22 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/e-cyclooctene.sml0000664000175000017500000000333715212624223025236 0ustar lerouxleroux Cyclic alkenes (E)-Cyclooctene (E)-Cyclooctene --i--trans--I---Cyclooctene 22 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3_5-triene.sml0000664000175000017500000000302015212624223026715 0ustar lerouxleroux Cyclic alkenes Cycloheptatriene Cyclohepta-1,3,5-triene Cycloheptatriene CHT 1--i--H--I---[7]Annulene 15 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohexene.sml0000664000175000017500000000311215212624223025002 0ustar lerouxleroux Cyclic alkenes Cyclohexene Cyclohexene Tetrahydrobenzene Benzenetetrahydride Hexanaphthylene 16 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3-diene.sml0000664000175000017500000000313515212624223026276 0ustar lerouxleroux Cyclic alkenes Cyclohepta-1,3-diene Cyclohepta-1,3-diene 1,3-Cycloheptadiene 17 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclopentene.sml0000664000175000017500000000243515212624223025173 0ustar lerouxleroux Cyclic alkenes Cyclopentene Cyclopentene 13 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3-diene.sml0000664000175000017500000000344015212624223026122 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3-diene Cycloocta-1,3-diene 1,3-Cyclooctadiene 20 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclopenta-1_3-diene.sml0000664000175000017500000000235115212624223026303 0ustar lerouxleroux Cyclic alkenes Cyclopenta-1,3-diene Cyclopenta-1,3-diene 1,3-Cyclopentadiene Pyropentylene 11 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5-triene.sml0000664000175000017500000000320015212624223026542 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3,5-triene Cycloocta-1,3,5-triene 18 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohepta-1_4-diene.sml0000664000175000017500000000313115212624223026273 0ustar lerouxleroux Cyclic alkenes Cyclohepta-1,4-diene Cyclohepta-1,4-diene 1,4-Cycloheptadiene 17 atomes_1.3.1/data/library/space_groups/0000775000175000017500000000000015212624223017554 5ustar lerouxlerouxatomes_1.3.1/data/library/space_groups/81-P-4.sgl0000664000175000017500000000234615212624223021056 0ustar lerouxleroux P-4 81 P -4 Tetragonal atomes_1.3.1/data/library/space_groups/43-Fdd2.sgl0000664000175000017500000000244515212624223021273 0ustar lerouxleroux Fdd2 43 F d d 2 Orthorhombic atomes_1.3.1/data/library/space_groups/55-Pbam.sgl0000664000175000017500000000406515212624223021376 0ustar lerouxleroux Pbam 55 P 21/b 21/a 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/72-Ibam.sgl0000664000175000017500000000535615212624223021372 0ustar lerouxleroux Ibam 72 I 2/b 2/a 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/26-Pmc21.sgl0000664000175000017500000000204615212624223021374 0ustar lerouxleroux Pmc21 26 P m c 21 Orthorhombic atomes_1.3.1/data/library/space_groups/158-P3c1.sgl0000664000175000017500000000173315212624223021310 0ustar lerouxleroux P3c1 158 P 3 c 1 Trigonal atomes_1.3.1/data/library/space_groups/63-Cmcm.sgl0000664000175000017500000000526215212624223021375 0ustar lerouxleroux Cmcm 63 C 2/m 2/c 21/m Orthorhombic atomes_1.3.1/data/library/space_groups/166-R-3m.sgl0000664000175000017500000000477715212624223021332 0ustar lerouxleroux R-3m 166 R -3 2/m Trigonal atomes_1.3.1/data/library/space_groups/160-R3m.sgl0000664000175000017500000000226715212624223021237 0ustar lerouxleroux R3m 160 R 3 m Trigonal atomes_1.3.1/data/library/space_groups/60-Pbcn.sgl0000664000175000017500000000304115212624223021366 0ustar lerouxleroux Pbcn 60 P 21/b 2/c 21/n Orthorhombic atomes_1.3.1/data/library/space_groups/10-P2sm.sgl0000664000175000017500000000406615212624223021330 0ustar lerouxleroux P2/m 10 P 1 2/m 1 Monoclinic atomes_1.3.1/data/library/space_groups/79-I4.sgl0000664000175000017500000000147515212624223021003 0ustar lerouxleroux I4 79 I 4 Tetragonal atomes_1.3.1/data/library/space_groups/87-I4sm.sgl0000664000175000017500000000354315212624223021340 0ustar lerouxleroux I4/m 87 I 4/m Tetragonal atomes_1.3.1/data/library/space_groups/70-Fddd.sgl0000664000175000017500000000460015212624223021350 0ustar lerouxleroux Fddd 70 F 2/d 2/d 2/d Orthorhombic atomes_1.3.1/data/library/space_groups/195-P23.sgl0000664000175000017500000000470215212624223021146 0ustar lerouxleroux P23 195 P 2 3 Cubic atomes_1.3.1/data/library/space_groups/127-P4smbm.sgl0000664000175000017500000000642415212624223021742 0ustar lerouxleroux P4/mbm 127 P 4/m 21/b 2/m Tetragonal atomes_1.3.1/data/library/space_groups/117-P-4b2.sgl0000664000175000017500000000367715212624223021372 0ustar lerouxleroux P-4b2 117 P -4 b 2 Tetragonal atomes_1.3.1/data/library/space_groups/193-P63smcm.sgl0000664000175000017500000001047015212624223022027 0ustar lerouxleroux P63/mcm 193 P 63/m 2/c 2/m Hexagonal atomes_1.3.1/data/library/space_groups/212-P4332.sgl0000664000175000017500000000524415212624223021305 0ustar lerouxleroux P4332 212 P 43 3 2 Cubic atomes_1.3.1/data/library/space_groups/21-C222.sgl0000664000175000017500000000420015212624223021107 0ustar lerouxleroux C222 21 C 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/211-I432.sgl0000664000175000017500000000761615212624223021217 0ustar lerouxleroux I432 211 I 4 3 2 Cubic atomes_1.3.1/data/library/space_groups/23-I222.sgl0000664000175000017500000000327515212624223021132 0ustar lerouxleroux I222 23 I 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/165-P-3c1.sgl0000664000175000017500000000371015212624223021360 0ustar lerouxleroux P-3c1 165 P -3 2/c 1 Trigonal atomes_1.3.1/data/library/space_groups/188-P-6c2.sgl0000664000175000017500000000525115212624223021373 0ustar lerouxleroux P-6c2 188 P -6 c 2 Hexagonal atomes_1.3.1/data/library/space_groups/30-Pnc2.sgl0000664000175000017500000000205015212624223021302 0ustar lerouxleroux Pnc2 30 P n c 2 Orthorhombic atomes_1.3.1/data/library/space_groups/4-P21.sgl0000664000175000017500000000107115212624223020765 0ustar lerouxleroux P21 4 P 1 21 1 Monoclinic atomes_1.3.1/data/library/space_groups/32-Pba2.sgl0000664000175000017500000000157315212624223021277 0ustar lerouxleroux Pba2 32 P b a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/97-I422.sgl0000664000175000017500000000434015212624223021141 0ustar lerouxleroux I422 97 I 4 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/219-F-43c.sgl0000664000175000017500000000705715212624223021361 0ustar lerouxleroux F-43c 219 F -4 3 c Cubic atomes_1.3.1/data/library/space_groups/25-Pmm2.sgl0000664000175000017500000000270515212624223021326 0ustar lerouxleroux Pmm2 25 P m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/73-Ibca.sgl0000664000175000017500000000366415212624223021361 0ustar lerouxleroux Ibca 73 I 21/b 21/c 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/37-Ccc2.sgl0000664000175000017500000000247315212624223021272 0ustar lerouxleroux Ccc2 37 C c c 2 Orthorhombic atomes_1.3.1/data/library/space_groups/130-P4sncc.sgl0000664000175000017500000000531715212624223021724 0ustar lerouxleroux P4/ncc 130 P 4/n 21/c 2/c Tetragonal atomes_1.3.1/data/library/space_groups/229-Im-3m.sgl0000664000175000017500000001536415212624223021470 0ustar lerouxleroux Im-3m 229 I 4/m -3 2/m Cubic atomes_1.3.1/data/library/space_groups/109-I41md.sgl0000664000175000017500000000217515212624223021455 0ustar lerouxleroux I41md 109 I 41 m d Tetragonal atomes_1.3.1/data/library/space_groups/113-P-421m.sgl0000664000175000017500000000266515212624223021456 0ustar lerouxleroux P-421m 113 P -4 21 m Tetragonal atomes_1.3.1/data/library/space_groups/174-P-6.sgl0000664000175000017500000000346315212624223021144 0ustar lerouxleroux P-6 174 P -6 Hexagonal atomes_1.3.1/data/library/space_groups/115-P-4m2.sgl0000664000175000017500000000415615212624223021374 0ustar lerouxleroux P-4m2 115 P -4 m 2 Tetragonal atomes_1.3.1/data/library/space_groups/114-P-421c.sgl0000664000175000017500000000251415212624223021436 0ustar lerouxleroux P-421c 114 P -4 21 c Tetragonal atomes_1.3.1/data/library/space_groups/95-P4322.sgl0000664000175000017500000000235115212624223021231 0ustar lerouxleroux P4322 95 P 43 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/50-Pban.sgl0000664000175000017500000000613615212624223021373 0ustar lerouxleroux Pban 50 P 2/b 2/a 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/131-P42smmc.sgl0000664000175000017500000001050415212624223022012 0ustar lerouxleroux P42/mmc 131 P 42/m 2/m 2/c Tetragonal atomes_1.3.1/data/library/space_groups/128-P4smnc.sgl0000664000175000017500000000555115212624223021745 0ustar lerouxleroux P4/mnc 128 P 4/m 21/b 2/m Tetragonal atomes_1.3.1/data/library/space_groups/208-P4232.sgl0000664000175000017500000001257315212624223021314 0ustar lerouxleroux P4232 208 P 42 3 2 Cubic atomes_1.3.1/data/library/space_groups/150-P321.sgl0000664000175000017500000000246115212624223021216 0ustar lerouxleroux P321 150 P 3 2 1 Trigonal atomes_1.3.1/data/library/space_groups/28-Pma2.sgl0000664000175000017500000000222415212624223021311 0ustar lerouxleroux Pma2 28 P m a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/41-Aea2.sgl0000664000175000017500000000304715212624223021261 0ustar lerouxleroux Aea2 41 A e a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/199-I213.sgl0000664000175000017500000000263615212624223021230 0ustar lerouxleroux I213 199 I 21 3 Cubic atomes_1.3.1/data/library/space_groups/146-R3.sgl0000664000175000017500000000166215212624223021064 0ustar lerouxleroux R3 146 R 3 Trigonal atomes_1.3.1/data/library/space_groups/126-P4snnc.sgl0000664000175000017500000000724515212624223021746 0ustar lerouxleroux P4/nnc 126 P 4/n 2/n 2/c Tetragonal atomes_1.3.1/data/library/space_groups/122-I-42d.sgl0000664000175000017500000000264015212624223021346 0ustar lerouxleroux I-42d 122 I -4 2 d Tetragonal atomes_1.3.1/data/library/space_groups/49-Pccm.sgl0000664000175000017500000000676615212624223021416 0ustar lerouxleroux Pccm 49 P 2/c 2/c 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/189-P-62m.sgl0000664000175000017500000000513215212624223021404 0ustar lerouxleroux P-62m 189 P -6 2 m Hexagonal atomes_1.3.1/data/library/space_groups/186-P63mc.sgl0000664000175000017500000000247215212624223021474 0ustar lerouxleroux P63mc 186 P 63 m c Hexagonal atomes_1.3.1/data/library/space_groups/120-I-4c2.sgl0000664000175000017500000000401615212624223021342 0ustar lerouxleroux I-4c2 120 I -4 c 2 Tetragonal atomes_1.3.1/data/library/space_groups/18-P21212.sgl0000664000175000017500000000161115212624223021277 0ustar lerouxleroux P21212 18 P 21 21 2 Orthorhombic atomes_1.3.1/data/library/space_groups/66-Cccm.sgl0000664000175000017500000000573715212624223021375 0ustar lerouxleroux Cccm 66 C 2/c 2/c 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/52-Pnna.sgl0000664000175000017500000000335715212624223021413 0ustar lerouxleroux Pnna 52 P 2/n 21/n 2/a Orthorhombic atomes_1.3.1/data/library/space_groups/98-I4122.sgl0000664000175000017500000000354515212624223021231 0ustar lerouxleroux I4122 98 I 41 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/129-P4snmm.sgl0000664000175000017500000000657715212624223021771 0ustar lerouxleroux P4/nmm 129 P 4/n 21/m 2/m Tetragonal atomes_1.3.1/data/library/space_groups/88-I41sa.sgl0000664000175000017500000000351615212624223021406 0ustar lerouxleroux I41/a 88 I 41/a Tetragonal atomes_1.3.1/data/library/space_groups/40-Ama2.sgl0000664000175000017500000000323115212624223021263 0ustar lerouxleroux Ama2 40 A m a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/161-R3c.sgl0000664000175000017500000000211415212624223021215 0ustar lerouxleroux R3c 161 R 3 c Trigonal atomes_1.3.1/data/library/space_groups/8-Cm.sgl0000664000175000017500000000364415212624223020776 0ustar lerouxleroux Cm 8 C 1 m 1 Monoclinic atomes_1.3.1/data/library/space_groups/162-P-31m.sgl0000664000175000017500000000514115212624223021367 0ustar lerouxleroux P-31m 162 P -3 1 2/m Trigonal atomes_1.3.1/data/library/space_groups/139-I4smmm.sgl0000664000175000017500000000742215212624223021750 0ustar lerouxleroux I4/mmm 139 I 4/m 2/m 2/m Tetragonal atomes_1.3.1/data/library/space_groups/1-P1.sgl0000664000175000017500000000063215212624223020702 0ustar lerouxleroux P1 1 P 1 Triclinic atomes_1.3.1/data/library/space_groups/167-R-3c.sgl0000664000175000017500000000415615212624223021310 0ustar lerouxleroux R-3c 167 R -3 2/c Trigonal atomes_1.3.1/data/library/space_groups/228-Fd-3c.sgl0000664000175000017500000001541015212624223021431 0ustar lerouxleroux Fd-3c 228 F 41/d -3 2/c Cubic atomes_1.3.1/data/library/space_groups/118-P-4n2.sgl0000664000175000017500000000375315212624223021402 0ustar lerouxleroux P-4n2 118 P -4 n 2 Tetragonal atomes_1.3.1/data/library/space_groups/196-F23.sgl0000664000175000017500000000375115212624223021140 0ustar lerouxleroux F23 196 F 2 3 Cubic atomes_1.3.1/data/library/space_groups/83-P4sm.sgl0000664000175000017500000000405615212624223021343 0ustar lerouxleroux P4/m 83 P 4/m Tetragonal atomes_1.3.1/data/library/space_groups/148-R-3.sgl0000664000175000017500000000305715212624223021143 0ustar lerouxleroux R-3 148 R -3 Trigonal atomes_1.3.1/data/library/space_groups/67-Cmme.sgl0000664000175000017500000000644615212624223021410 0ustar lerouxleroux Cmme 67 C 2/m 2/m 2/e Orthorhombic atomes_1.3.1/data/library/space_groups/54-Pcca.sgl0000664000175000017500000000363615212624223021367 0ustar lerouxleroux Pcca 54 P 21/c 2/c 2/a Orthorhombic atomes_1.3.1/data/library/space_groups/64-Cmce.sgl0000664000175000017500000000514415212624223021365 0ustar lerouxleroux Cmce 64 C 2/m 2/c 21/e Orthorhombic atomes_1.3.1/data/library/space_groups/124-P4smcc.sgl0000664000175000017500000000751515212624223021730 0ustar lerouxleroux P4/mcc 124 P 4/m 2/c 2/c Tetragonal atomes_1.3.1/data/library/space_groups/24-I212121.sgl0000664000175000017500000000202715212624223021350 0ustar lerouxleroux I212121 24 I 21 21 21 Orthorhombic atomes_1.3.1/data/library/space_groups/152-P3121.sgl0000664000175000017500000000163615212624223021304 0ustar lerouxleroux P3121 152 P 31 2 1 Trigonal atomes_1.3.1/data/library/space_groups/191-P6smmm.sgl0000664000175000017500000001247115212624223021757 0ustar lerouxleroux P6/mmm 191 P 6/m 2/m 2/m Hexagonal atomes_1.3.1/data/library/space_groups/35-Cmm2.sgl0000664000175000017500000000272715212624223021316 0ustar lerouxleroux Cmm2 35 C m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/220-I-43d.sgl0000664000175000017500000000555315212624223021354 0ustar lerouxleroux I-43d 220 I -4 3 d Cubic atomes_1.3.1/data/library/space_groups/9-Cc.sgl0000664000175000017500000000643515212624223020766 0ustar lerouxleroux Cc 9 C 1 c 1 Monoclinic atomes_1.3.1/data/library/space_groups/46-Ima2.sgl0000664000175000017500000000324415212624223021305 0ustar lerouxleroux Ima2 46 I ma 2 Orthorhombic atomes_1.3.1/data/library/space_groups/203-Fd-3.sgl0000664000175000017500000000633415212624223021264 0ustar lerouxleroux Fd-3 203 F 2/d -3 Cubic atomes_1.3.1/data/library/space_groups/48-Pnnn.sgl0000664000175000017500000000560615212624223021434 0ustar lerouxleroux Pnnn 48 P 2/n 2/n 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/136-P42smnm.sgl0000664000175000017500000000641615212624223022041 0ustar lerouxleroux P42/mnm 136 P 42/m 21/n 2/m Tetragonal atomes_1.3.1/data/library/space_groups/121-I-42m.sgl0000664000175000017500000000402715212624223021357 0ustar lerouxleroux I-42m 121 I -4 2 m Tetragonal atomes_1.3.1/data/library/space_groups/154-P3221.sgl0000664000175000017500000000163615212624223021307 0ustar lerouxleroux P3221 154 P 32 2 1 Trigonal atomes_1.3.1/data/library/space_groups/59-Pmmn.sgl0000664000175000017500000000405715212624223021433 0ustar lerouxleroux Pmmn 59 P 21/m 21/m 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/123-P4smmm.sgl0000664000175000017500000001121515212624223021743 0ustar lerouxleroux P4/mmm 123 P 4/m 2/m 2/m Tetragonal atomes_1.3.1/data/library/space_groups/102-P42nm.sgl0000664000175000017500000000232115212624223021461 0ustar lerouxleroux P42nm 102 P 42 n m Tetragonal atomes_1.3.1/data/library/space_groups/69-Fmmm.sgl0000664000175000017500000000575615212624223021430 0ustar lerouxleroux Fmmm 69 F 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/216-F-43m.sgl0000664000175000017500000000547515212624223021372 0ustar lerouxleroux F-43m 216 F -4 3 m Cubic atomes_1.3.1/data/library/space_groups/111-P-42m.sgl0000664000175000017500000000516215212624223021366 0ustar lerouxleroux P-42m 111 P -4 2 m Tetragonal atomes_1.3.1/data/library/space_groups/187-P-6m2.sgl0000664000175000017500000000542615212624223021410 0ustar lerouxleroux P-6m2 187 P -6 m 2 Hexagonal atomes_1.3.1/data/library/space_groups/12-C2sm.sgl0000664000175000017500000000557115212624223021317 0ustar lerouxleroux C2/m 12 C 1 2/m 1 Monoclinic atomes_1.3.1/data/library/space_groups/74-Imma.sgl0000664000175000017500000000572315212624223021405 0ustar lerouxleroux Imma 74 I 21/m 21/m 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/6-Pm.sgl0000664000175000017500000000133515212624223021004 0ustar lerouxleroux Pm 6 P 1 m 1 Monoclinic atomes_1.3.1/data/library/space_groups/214-I4132.sgl0000664000175000017500000001047115212624223021274 0ustar lerouxleroux I4132 214 I 41 3 2 Cubic atomes_1.3.1/data/library/space_groups/62-Pnma.sgl0000664000175000017500000000305015212624223021401 0ustar lerouxleroux Pnma 62 P 21/n 21/m 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/224-Pn-3m.sgl0000664000175000017500000002021715212624223021464 0ustar lerouxleroux Pn-3m 224 P 42/n -3 2/m Cubic atomes_1.3.1/data/library/space_groups/31-Pmn21.sgl0000664000175000017500000000166015212624223021404 0ustar lerouxleroux Pmn21 31 P m n 21 Orthorhombic atomes_1.3.1/data/library/space_groups/215-P-43m.sgl0000664000175000017500000000633415212624223021376 0ustar lerouxleroux P-43m 215 P -4 3 m Cubic atomes_1.3.1/data/library/space_groups/39-Aem2.sgl0000664000175000017500000000342615212624223021305 0ustar lerouxleroux Aem2 39 A e m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/108-I4cm.sgl0000664000175000017500000000230515212624223021365 0ustar lerouxleroux I4cm 108 I 4 c m Tetragonal atomes_1.3.1/data/library/space_groups/142-I41sacd.sgl0000664000175000017500000000614615212624223021766 0ustar lerouxleroux I41/acd 142 I 41/a 2/c 2/d Tetragonal atomes_1.3.1/data/library/space_groups/217-I-43m.sgl0000664000175000017500000000610715212624223021367 0ustar lerouxleroux I-43m 217 I -4 3 m Cubic atomes_1.3.1/data/library/space_groups/206-Ia-3.sgl0000664000175000017500000000515715212624223021271 0ustar lerouxleroux Ia-3 206 I 21/a -3 Cubic atomes_1.3.1/data/library/space_groups/22-F222.sgl0000664000175000017500000000342715212624223021125 0ustar lerouxleroux F222 22 F 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/112-P-42c.sgl0000664000175000017500000000540215212624223021352 0ustar lerouxleroux P-42c 112 P -4 2 c Tetragonal atomes_1.3.1/data/library/space_groups/149-P312.sgl0000664000175000017500000000345715212624223021234 0ustar lerouxleroux P312 149 P 3 1 2 Trigonal atomes_1.3.1/data/library/space_groups/210-F4132.sgl0000664000175000017500000000710715212624223021267 0ustar lerouxleroux F4132 210 F 41 3 2 Cubic atomes_1.3.1/data/library/space_groups/230-Ia-3d.sgl0000664000175000017500000001527215212624223021431 0ustar lerouxleroux Ia-3d 230 I 41/a -3 2/d Cubic atomes_1.3.1/data/library/space_groups/144-P31.sgl0000664000175000017500000000075315212624223021141 0ustar lerouxleroux P31 144 P 31 Trigonal atomes_1.3.1/data/library/space_groups/65-Cmmm.sgl0000664000175000017500000000650715212624223021414 0ustar lerouxleroux Cmmm 65 C 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/68-Ccce.sgl0000664000175000017500000000607715212624223021365 0ustar lerouxleroux Ccce 68 C 2/c 2/c 2/e Orthorhombic atomes_1.3.1/data/library/space_groups/137-P42snmc.sgl0000664000175000017500000000543415212624223022027 0ustar lerouxleroux P42/nmc 137 P 42/n 21/m 2/c Tetragonal atomes_1.3.1/data/library/space_groups/192-P6smcc.sgl0000664000175000017500000001145015212624223021730 0ustar lerouxleroux P6/mcc 192 P 6/m 2/c 2/c Hexagonal atomes_1.3.1/data/library/space_groups/85-P4sn.sgl0000664000175000017500000000330415212624223021341 0ustar lerouxleroux P4/n 85 P 4/n Tetragonal atomes_1.3.1/data/library/space_groups/145-P32.sgl0000664000175000017500000000075315212624223021143 0ustar lerouxleroux P32 145 P 32 Trigonal atomes_1.3.1/data/library/space_groups/155-R32.sgl0000664000175000017500000000304415212624223021142 0ustar lerouxleroux R32 155 R 3 2 Trigonal atomes_1.3.1/data/library/space_groups/204-Im-3.sgl0000664000175000017500000000567315212624223021306 0ustar lerouxleroux Im-3 204 I 2/m -3 Cubic atomes_1.3.1/data/library/space_groups/205-Pa-3.sgl0000664000175000017500000000402215212624223021265 0ustar lerouxleroux Pa-3 205 P 21/a -3 Cubic atomes_1.3.1/data/library/space_groups/96-P43212.sgl0000664000175000017500000000163015212624223021312 0ustar lerouxleroux P43212 96 P 43 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/58-Pnnm.sgl0000664000175000017500000000361015212624223021425 0ustar lerouxleroux Pnnm 58 P 21/n 21/n 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/194-P63smmc.sgl0000664000175000017500000001003115212624223022021 0ustar lerouxleroux P63/mmc 194 P 63/m 2/m 2/c Hexagonal atomes_1.3.1/data/library/space_groups/222-Pn-3n.sgl0000664000175000017500000001502215212624223021461 0ustar lerouxleroux Pn-3n 222 P 4/n -3 2/n Cubic atomes_1.3.1/data/library/space_groups/201-Pn-3.sgl0000664000175000017500000000677415212624223021316 0ustar lerouxleroux Pn-3 201 P 2/n -3 Cubic atomes_1.3.1/data/library/space_groups/143-P3.sgl0000664000175000017500000000136015212624223021052 0ustar lerouxleroux P3 143 P 3 Trigonal atomes_1.3.1/data/library/space_groups/135-P42smbc.sgl0000664000175000017500000000620515212624223022006 0ustar lerouxleroux P42/mbc 135 P 42/m 21/b 2/c Tetragonal atomes_1.3.1/data/library/space_groups/53-Pmna.sgl0000664000175000017500000000433315212624223021406 0ustar lerouxleroux Pmna 53 P 2/m 2/n 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/198-P213.sgl0000664000175000017500000000204315212624223021226 0ustar lerouxleroux P213 198 P 21 3 Cubic atomes_1.3.1/data/library/space_groups/169-P61.sgl0000664000175000017500000000113415212624223021145 0ustar lerouxleroux P61 169 P 61 Hexagonal atomes_1.3.1/data/library/space_groups/138-P42sncm.sgl0000664000175000017500000000673615212624223022036 0ustar lerouxleroux P42/ncm 138 P 42/n 21/c 2/m Tetragonal atomes_1.3.1/data/library/space_groups/157-P31m.sgl0000664000175000017500000000167515212624223021326 0ustar lerouxleroux P31m 157 P 3 1 m Trigonal atomes_1.3.1/data/library/space_groups/93-P4222.sgl0000664000175000017500000000616115212624223021231 0ustar lerouxleroux P4222 93 P 42 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/29-Pca21.sgl0000664000175000017500000000146215212624223021364 0ustar lerouxleroux Pca21 29 P c a 21 Orthorhombic atomes_1.3.1/data/library/space_groups/19-P212121.sgl0000664000175000017500000000105415212624223021362 0ustar lerouxleroux P212121 19 P 21 21 21 Orthorhombic atomes_1.3.1/data/library/space_groups/5-C2.sgl0000664000175000017500000000377715212624223020707 0ustar lerouxleroux C2 5 C 1 2 1 Monoclinic atomes_1.3.1/data/library/space_groups/172-P64.sgl0000664000175000017500000000163415212624223021147 0ustar lerouxleroux P64 172 P 64 Hexagonal atomes_1.3.1/data/library/space_groups/91-P4122.sgl0000664000175000017500000000235115212624223021223 0ustar lerouxleroux P4122 91 P 41 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/71-Immm.sgl0000664000175000017500000000510615212624223021411 0ustar lerouxleroux Immm 71 I 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/2-P-1.sgl0000664000175000017500000000221715212624223020761 0ustar lerouxleroux P-1 2 P -1 Triclinic atomes_1.3.1/data/library/space_groups/84-P42sm.sgl0000664000175000017500000000425315212624223021425 0ustar lerouxleroux P42/m 84 P 42/m Tetragonal atomes_1.3.1/data/library/space_groups/141-I41samd.sgl0000664000175000017500000000636615212624223022003 0ustar lerouxleroux I41/amd 141 I 41/a 2/m 2/d Tetragonal atomes_1.3.1/data/library/space_groups/78-P43.sgl0000664000175000017500000000101415212624223021061 0ustar lerouxleroux P43 78 P 43 Tetragonal atomes_1.3.1/data/library/space_groups/7-Pc.sgl0000664000175000017500000000161115212624223020770 0ustar lerouxleroux Pc 7 P 1 c 1 Monoclinic atomes_1.3.1/data/library/space_groups/33-Pna21.sgl0000664000175000017500000000147215212624223021373 0ustar lerouxleroux Pna21 33 P n a 21 Orthorhombic atomes_1.3.1/data/library/space_groups/147-P-3.sgl0000664000175000017500000000246615212624223021143 0ustar lerouxleroux P-3 147 P -3 Trigonal atomes_1.3.1/data/library/space_groups/51-Pmma.sgl0000664000175000017500000000517315212624223021406 0ustar lerouxleroux Pmma 51 P 21 /m 2/m 2/a Orthorhombic atomes_1.3.1/data/library/space_groups/159-P31c.sgl0000664000175000017500000000153015212624223021304 0ustar lerouxleroux P31c 159 P 3 1 c Trigonal atomes_1.3.1/data/library/space_groups/75-P4.sgl0000664000175000017500000000145415212624223021003 0ustar lerouxleroux P4 75 P 4 Tetragonal atomes_1.3.1/data/library/space_groups/16-P222.sgl0000664000175000017500000000530015212624223021132 0ustar lerouxleroux P222 16 P 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/61-Pbca.sgl0000664000175000017500000000217515212624223021361 0ustar lerouxleroux Pbca 61 P 21/b 21/c 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/104-P4nc.sgl0000664000175000017500000000177415212624223021402 0ustar lerouxleroux P4nc 104 P 4 n c Tetragonal atomes_1.3.1/data/library/space_groups/171-P62.sgl0000664000175000017500000000163415212624223021144 0ustar lerouxleroux P62 171 P 62 Hexagonal atomes_1.3.1/data/library/space_groups/47-Pmmm.sgl0000664000175000017500000000767415212624223021437 0ustar lerouxleroux Pmmm 47 P 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/100-P4bm.sgl0000664000175000017500000000215015212624223021361 0ustar lerouxleroux P4bm 100 P 4 b m Tetragonal atomes_1.3.1/data/library/space_groups/225-Fm-3m.sgl0000664000175000017500000001431115212624223021450 0ustar lerouxleroux Fm-3m 225 F 4/m -3 2/m Cubic atomes_1.3.1/data/library/space_groups/103-P4cc.sgl0000664000175000017500000000213315212624223021354 0ustar lerouxleroux P4cc 103 P 4 c c Tetragonal atomes_1.3.1/data/library/space_groups/132-P42smcm.sgl0000664000175000017500000001032415212624223022013 0ustar lerouxleroux P42/mcm 132 P 42/m 2/c 2/m Tetragonal atomes_1.3.1/data/library/space_groups/56-Pccn.sgl0000664000175000017500000000311715212624223021400 0ustar lerouxleroux Pccn 56 P 21/c 21/c 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/77-P42.sgl0000664000175000017500000000160515212624223021065 0ustar lerouxleroux P42 77 P 42 Tetragonal atomes_1.3.1/data/library/space_groups/119-I-4m2.sgl0000664000175000017500000000364515212624223021373 0ustar lerouxleroux I-4m2 119 I -4 m 2 Tetragonal atomes_1.3.1/data/library/space_groups/213-P4132.sgl0000664000175000017500000000524415212624223021304 0ustar lerouxleroux P4132 213 P 41 3 2 Cubic atomes_1.3.1/data/library/space_groups/44-Imm2.sgl0000664000175000017500000000253615212624223021322 0ustar lerouxleroux Imm2 44 I m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/36-Cmc21.sgl0000664000175000017500000000305015212624223021354 0ustar lerouxleroux Cmc21 36 C m c 21 Orthorhombic atomes_1.3.1/data/library/space_groups/177-P622.sgl0000664000175000017500000000613715212624223021237 0ustar lerouxleroux P622 177 P 6 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/125-P4snbm.sgl0000664000175000017500000001005315212624223021732 0ustar lerouxleroux P4/nbm 125 P 4/n 2/b 2/m Tetragonal atomes_1.3.1/data/library/space_groups/45-Iba2.sgl0000664000175000017500000000230215212624223021263 0ustar lerouxleroux Iba2 45 I b a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/209-F432.sgl0000664000175000017500000000745515212624223021224 0ustar lerouxleroux F432 209 F 4 3 2 Cubic atomes_1.3.1/data/library/space_groups/180-P6222.sgl0000664000175000017500000000575415212624223021317 0ustar lerouxleroux P6222 180 P 62 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/11-P21sm.sgl0000664000175000017500000000236515212624223021412 0ustar lerouxleroux P21/m 11 P 1 21/m 1 Monoclinic atomes_1.3.1/data/library/space_groups/223-Pm-3n.sgl0000664000175000017500000001663015212624223021467 0ustar lerouxleroux Pm-3n 223 P 42/m -3 2/n Cubic atomes_1.3.1/data/library/space_groups/156-P3m1.sgl0000664000175000017500000000177115212624223021322 0ustar lerouxleroux P3m1 156 P 3 m 1 Trigonal atomes_1.3.1/data/library/space_groups/34-Pnn2.sgl0000664000175000017500000000161315212624223021325 0ustar lerouxleroux Pnn2 34 P n n 2 Orthorhombic atomes_1.3.1/data/library/space_groups/200-Pm-3.sgl0000664000175000017500000000754715212624223021313 0ustar lerouxleroux Pm-3 200 P 2/m -3 Cubic atomes_1.3.1/data/library/space_groups/221-Pm-3m.sgl0000664000175000017500000001605615212624223021466 0ustar lerouxleroux Pm-3m 221 P 4/m -3 2/m Cubic atomes_1.3.1/data/library/space_groups/185-P63cm.sgl0000664000175000017500000000257615212624223021500 0ustar lerouxleroux P63cm 185 P 63 c m Hexagonal atomes_1.3.1/data/library/space_groups/173-P63.sgl0000664000175000017500000000152215212624223021143 0ustar lerouxleroux P63 173 P 63 Hexagonal atomes_1.3.1/data/library/space_groups/82-I-4.sgl0000664000175000017500000000232115212624223021041 0ustar lerouxleroux I-4 82 I -4 Tetragonal atomes_1.3.1/data/library/space_groups/27-Pcc2.sgl0000664000175000017500000000217115212624223021301 0ustar lerouxleroux Pcc2 27 P c c 2 Orthorhombic atomes_1.3.1/data/library/space_groups/57-Pbcm.sgl0000664000175000017500000000332215212624223021375 0ustar lerouxleroux Pbcm 57 P 2/b 21/c 21/m Orthorhombic atomes_1.3.1/data/library/space_groups/176-P63sm.sgl0000664000175000017500000000432615212624223021513 0ustar lerouxleroux P63/m 176 P 63/m Hexagonal atomes_1.3.1/data/library/space_groups/227-Fd-3m.sgl0000664000175000017500000001450115212624223021442 0ustar lerouxleroux Fd-3m 227 F 41/d -3 2/m Cubic atomes_1.3.1/data/library/space_groups/89-P422.sgl0000664000175000017500000000545015212624223021154 0ustar lerouxleroux P422 89 P 4 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/106-P42bc.sgl0000664000175000017500000000210515212624223021437 0ustar lerouxleroux P42bc 106 P 42 b c Tetragonal atomes_1.3.1/data/library/space_groups/110-I41cd.sgl0000664000175000017500000000176515212624223021437 0ustar lerouxleroux I41cd 110 I 41 c d Tetragonal atomes_1.3.1/data/library/space_groups/202-Fm-3.sgl0000664000175000017500000000653615212624223021300 0ustar lerouxleroux Fm-3 202 F 2/m -3 Cubic atomes_1.3.1/data/library/space_groups/20-C2221.sgl0000664000175000017500000000227315212624223021177 0ustar lerouxleroux C2221 20 C 2 2 21 Orthorhombic atomes_1.3.1/data/library/space_groups/183-P6mm.sgl0000664000175000017500000000320115212624223021407 0ustar lerouxleroux P6mm 183 P 6 m m Hexagonal atomes_1.3.1/data/library/space_groups/163-P-31c.sgl0000664000175000017500000000432415212624223021360 0ustar lerouxleroux P-31c 163 P -3 1 2/c Trigonal atomes_1.3.1/data/library/space_groups/90-P4212.sgl0000664000175000017500000000317715212624223021231 0ustar lerouxleroux P4212 90 P 4 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/116-P-4c2.sgl0000664000175000017500000000416415212624223021362 0ustar lerouxleroux P-4c2 116 P -4 c 2 Tetragonal atomes_1.3.1/data/library/space_groups/197-I23.sgl0000664000175000017500000000344115212624223021140 0ustar lerouxleroux I23 197 I 2 3 Cubic atomes_1.3.1/data/library/space_groups/14-P21sc.sgl0000664000175000017500000000275215212624223021403 0ustar lerouxleroux P21/c 14 P 1 21/c 1 Monoclinic atomes_1.3.1/data/library/space_groups/38-Amm2.sgl0000664000175000017500000000367215212624223021317 0ustar lerouxleroux Amm2 38 A m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/181-P6422.sgl0000664000175000017500000000575415212624223021322 0ustar lerouxleroux P6422 181 P 64 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/184-P6cc.sgl0000664000175000017500000000260715212624223021375 0ustar lerouxleroux P6cc 184 P 6 c c Hexagonal atomes_1.3.1/data/library/space_groups/80-I41.sgl0000664000175000017500000000140615212624223021046 0ustar lerouxleroux I41 80 I 41 Tetragonal atomes_1.3.1/data/library/space_groups/17-P2221.sgl0000664000175000017500000000217015212624223021216 0ustar lerouxleroux P2221 17 P 2 2 21 Orthorhombic atomes_1.3.1/data/library/space_groups/190-P-62c.sgl0000664000175000017500000000431615212624223021365 0ustar lerouxleroux P-62c 190 P -6 2 c Hexagonal atomes_1.3.1/data/library/space_groups/175-P6sm.sgl0000664000175000017500000000516115212624223021425 0ustar lerouxleroux P6/m 175 P 6/m Hexagonal atomes_1.3.1/data/library/space_groups/92-P41212.sgl0000664000175000017500000000163015212624223021304 0ustar lerouxleroux P41212 92 P 41 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/105-P42mc.sgl0000664000175000017500000000264115212624223021456 0ustar lerouxleroux P42mc 105 P 42 m c Tetragonal atomes_1.3.1/data/library/space_groups/218-P-43n.sgl0000664000175000017500000000773015212624223021403 0ustar lerouxleroux P-43n 218 P -4 3 n Cubic atomes_1.3.1/data/library/space_groups/134-P42snnm.sgl0000664000175000017500000001066315212624223022037 0ustar lerouxleroux P42/nnm 134 P 42/n 2/n 2/m Tetragonal atomes_1.3.1/data/library/space_groups/42-Fmm2.sgl0000664000175000017500000000312515212624223021310 0ustar lerouxleroux Fmm2 42 F m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/86-P42sn.sgl0000664000175000017500000000346715212624223021436 0ustar lerouxleroux P42/n 86 P 42/n Tetragonal atomes_1.3.1/data/library/space_groups/101-P42cm.sgl0000664000175000017500000000244115212624223021450 0ustar lerouxleroux P42cm 101 P 42 c m Tetragonal atomes_1.3.1/data/library/space_groups/140-I4smcm.sgl0000664000175000017500000000717315212624223021731 0ustar lerouxleroux I4/mcm 140 I 4/m 2/c 2/m Tetragonal atomes_1.3.1/data/library/space_groups/168-P6.sgl0000664000175000017500000000167215212624223021072 0ustar lerouxleroux P6 168 P 6 Hexagonal atomes_1.3.1/data/library/space_groups/178-P6122.sgl0000664000175000017500000000253015212624223021312 0ustar lerouxleroux P6122 178 P 61 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/13-P2sc.sgl0000664000175000017500000000331715212624223021317 0ustar lerouxleroux P2/c 13 P 1 2/c 1 Monoclinic atomes_1.3.1/data/library/space_groups/164-P-3m1.sgl0000664000175000017500000000442015212624223021370 0ustar lerouxleroux P-3m1 164 P -3 2/m 1 Trigonal atomes_1.3.1/data/library/space_groups/207-P432.sgl0000664000175000017500000000744215212624223021230 0ustar lerouxleroux P432 207 P 4 3 2 Cubic atomes_1.3.1/data/library/space_groups/133-P42snbc.sgl0000664000175000017500000000770115212624223022007 0ustar lerouxleroux P42/nbc 133 P 42/n 2/b 2/c Tetragonal atomes_1.3.1/data/library/space_groups/99-P4mm.sgl0000664000175000017500000000274615212624223021350 0ustar lerouxleroux P4mm 99 P 4 m m Tetragonal atomes_1.3.1/data/library/space_groups/94-P42212.sgl0000664000175000017500000000334515212624223021314 0ustar lerouxleroux P42212 94 P 42 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/226-Fm-3c.sgl0000664000175000017500000001501715212624223021443 0ustar lerouxleroux Fm-3c 226 F 4/m -3 2/c Cubic atomes_1.3.1/data/library/space_groups/182-P6322.sgl0000664000175000017500000000430715212624223021313 0ustar lerouxleroux P6322 182 P 63 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/15-C2sc.sgl0000664000175000017500000000777315212624223021316 0ustar lerouxleroux C2/c 15 C 1 2/c 1 Monoclinic atomes_1.3.1/data/library/space_groups/76-P41.sgl0000664000175000017500000000101415212624223021055 0ustar lerouxleroux P41 76 P 41 Tetragonal atomes_1.3.1/data/library/space_groups/179-P6522.sgl0000664000175000017500000000253015212624223021317 0ustar lerouxleroux P6522 179 P 65 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/170-P65.sgl0000664000175000017500000000113415212624223021141 0ustar lerouxleroux P65 170 P 65 Hexagonal atomes_1.3.1/data/library/space_groups/151-P3112.sgl0000664000175000017500000000164415212624223021302 0ustar lerouxleroux P3112 151 P 31 1 2 Trigonal atomes_1.3.1/data/library/space_groups/3-P2.sgl0000664000175000017500000000162015212624223020703 0ustar lerouxleroux P2 3 P 1 2 1 Monoclinic atomes_1.3.1/data/library/space_groups/107-I4mm.sgl0000664000175000017500000000247115212624223021402 0ustar lerouxleroux I4mm 107 I 4 m m Tetragonal atomes_1.3.1/data/library/space_groups/153-P3212.sgl0000664000175000017500000000164415212624223021305 0ustar lerouxleroux P3212 153 P 32 1 2 Trigonal atomes_1.3.1/man/0000775000175000017500000000000015212624223013260 5ustar lerouxlerouxatomes_1.3.1/man/fr/0000775000175000017500000000000015212624223013667 5ustar lerouxlerouxatomes_1.3.1/man/fr/atomes.1.gz0000664000175000017500000000613115212624223015661 0ustar lerouxleroux‹9Ë"jatomes.1ÍZÛrɾç)º6’@'¯w£²\Á€%v‘D@ò!²Š43 ´õ�ë¿a_ôw*æUÖ>k4G¬ö¬ÆÂX�Ç4ªÔb»¹Ãš*šÇr2MØÁÞÁA �l°xq�H²®`}•>°—Z¸©z bÌüYFÞL×ÓPê$æõqüªJ0 Ü72Ö ‹xÌg"q•�7ÎÚU¦§* |6Œóx¤Íî�ðTè—·ÚÍËÎÅyùÄ~íû*›ñ9†÷»L§#-¼DªÐ@PÉTÄÍxlp¨{á1-N†ÛßíTÍ÷þN¥~yÊx¢fB³}öÍ·ì6•!ñÿÂÒß ×€àߦà#™JÍ|žóT„â¨bq'µ 'X3°#>õœý3#è÷b¥«l¬èÌXÄ"ôÄ‘ÙT§™’|©ù(l:�€€çlÕ§ól ¦7îà> ìŽ@ŒFôÊñ<_Ù57ÍÅF�•ÝË!s«ø�'2ÔŽ¬ñ*YcàÕ.�å IK«£8[<' K‚�bÁ?Ù :b/ÃW¥ á÷™˜EÉÜlµ4�´œPk:žK/e¡ÍJ}pÊÎ/Î*N“k,%ljñèjñ¦ÒDšE*�Á-暌 šKy 1f"a^¼xñîâÑ—°æÎLù‹Ï‡-‚l-½©À+!’?¥Â`|8¿è :ƒJýµ³¥J½ßa×ì¢GÆ;`7 ¬Ho*a‘`½ÅOívÎ'í'_«=hö;fw¥)°HÅ$ŽTÌW^:aB—‹Ïw‚^XÀ™§fØâ‹2î^ψúR¼g©&—�o‘ŸÍ\ ƒÄè÷^Â`ÈÌ?Ž_¿¼ŸÂ à¯>Ž{d@ÆÇqgyAhø¶€¦ *Ø»&»“á�òI9pç1÷„1?™@ž6�þAºNä�æõ °YR-Àä7«v÷ ukÞÝ5D&hFx»ã2`‘ˆ^˜¿¥Ò»X“ÅcL‘'Hµ)¤ÅêV$šý”JìOïH„‚‡g]¾ CÐ¥�ÈÓi�pl÷·0pO©›hON”&K`†²%Á]¤©�X}§!Ós�,>#�îÐ[<°Q€¤ÐÁ8ºÇ/…±æÏCnÐ@<¨M.aF¸kNäˆÕaªÃúÆò[ùÙ³òY/àZÓ46vú¬Õí]t?T 1óÚmœ�õp¼ßþ0|T“¡ÍL³wÖ" ̽ü¸ÆÓ9Ü\nÿå¬vv¶ó³�Œ£9�„“‘|'H*%1Ã"ñÞŠ”Œ "Qj¦# B„"¼Fb>ÞcBLf7š‹Ü«iìt¼ªämñ€4ý0ÿ;2•QöŒ#õèT"Z§Iœ;´ž‡ ìäüŠMùH&)™púž1²Œ¸@…L@„‹ñФevÀPº¶ÿVÛÚÙdYBk>‡í«ôV‘ös«‡'Èðq†²€Àj°®a[â!¡vLJ܀1V’|–A‘…d¢b€áU’¹§ºÁdÇÜ`¢ÝqLnc[Sž$a:V®Bë]3cü…<ˆò Ab‰Œ›è§S¨ zdEkÓ*øATiŒ‰aØÞ±8ugO!óÅA¨ËÍ1?- ª8ÈïÇt´ñîMåb]ÄkQ¡Â…ð@dô6°iÃ)X�zÿᯕÎ,B´wñé Óäi¦":‘Cñ}‚ÒÄ>Ÿ“4LV¡fóØû25×;aF4kôÀ'^ƒ Q+Y…Kó^4sCó…Ç:<ðÂWÌÞqäp1‰(ïi2‡»4‹Wÿ¾X²c3ÀcŠk�{c Ãeâe8ôâ9-2Yy/¶äkn°,£A4]|Ž×…“ýé•iÎÌ7=ð)€4ç ÑŠg–QVó¡ÑŸNOÉ0y’D· ðÄ£ðŽ8KÑñu¿ÝË<çà–Àæ.Xö‹ï"N¦T¤FSs[ŧÜò4"s0oUŠª9¹"Ž´½Ç/å� ·èìž_µ/U¶Ï ÊG–ò‘zȽº…U€›ì”â<·…µ úÜu w™×õx£‚Xqu¤ÀjB„!Ða�ãßßy«îóÒÞ ƒ?H�KÃÄãu‰Ø^âÿQõÿ#¶Q_,á$à©@ÅÇ×½F·}yim‚¸3F!ðQ?Ìd Dxj[P¢Ì 6òé-�¸P›k[Fg÷÷Ïž [$үɜ4›þ£uuáY/{“2¯´ Y‘(„”€yšô,‘挻•æð�ûOƒƒšIW{ Ѽ®\šÅ+@”4ó ¥_@x¶Ac·\5#<ñ9,NgÍñÄñ™ -WiD�*{nN?#�DAâQ�š!þ’ÅÚf´S×O…¨<’Ò•8q…òªÒÝ¥ÚÖ1*˜/> ËJ '¹jfúOG©³PàlæqgèÐ6/®ºí+”ÅMwn9ä¸e*Ô<å“ûM�܇½Ì(¯R™ü‚vã&¦9ƒ)MµÔ Ä'1÷> Wýãë“~£uS¹tÕÍIsËØâ15vM1 Y®8ˆ½\—O¬),T!K»Æºj"=•a¨/O7j|Æ [•±ë°=ãì:¹5FÆ&3Ž_—8~RÖŽÙœ×ß*n’ÑRØÌJ_Ó™Ù¢;SfiXtó‚e:(¥-ɸtýi•ØÂíðøºÕC-sOtíŸ5]®¨’åâ=Év¤SEgn‰ÕVŒ;�i„Ox vVT°WÚJ—$ÚˆoJFû¥�¯‰3lVlJ ð«0K[»´óp� /7–_ÇĉÙ@[ ÖÕ­û_ÌïÁ ¿Ø85—Ûµ¿Ã/–Ìó•�v¥´Õ¥�ß~± _¬î,eäÐÎïÊuW'˜2¤¾ê™ß¦Ú+™j¤P[ô.7•žÒ2³ÔˆªN6Ã]Ú5•Œkè%#68Øõ^}¸÷ë{7‚+‹€¶’‹ù7�}NUió÷ «oW(m Iâ‚ß4ÆÚO7Æj¥Ö^lÃdÿO�cÖæØß;xÎj*ë¡ÑÆ¢�VôÊnYí³'O™=“µuf*ÌbÔ§É[pÔ.«i*¶X Ñdz?z¼½èôYãj0è@|}6M’HíîºV€ý­ïšE{¢qu 9mþ)’³Å#5Øé'¸Å£í�´âú¯ü�ß srŽB Ï®ÎÛ¬Ýïò�œ�cóó¨&lz™Ñ?‘É4Õ=5ÛJ}ºã©vr~µ+µÆøU½ò_\Qw�Q!atomes_1.3.1/man/Makefile.am0000664000175000017500000000031615212624223015314 0ustar lerouxleroux## Process this file with automake to produce Makefile.in atomes_mandir = $(mandir)/man1/ atomes_man_DATA = \ en/atomes.1.gz atomes_man_frdir = $(mandir)/fr/man1/ atomes_man_fr_DATA = \ fr/atomes.1.gz atomes_1.3.1/man/Makefile.in0000664000175000017500000003703715212624223015337 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__installdirs = "$(DESTDIR)$(atomes_mandir)" \ "$(DESTDIR)$(atomes_man_frdir)" DATA = $(atomes_man_DATA) $(atomes_man_fr_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_mandir = $(mandir)/man1/ atomes_man_DATA = \ en/atomes.1.gz atomes_man_frdir = $(mandir)/fr/man1/ atomes_man_fr_DATA = \ fr/atomes.1.gz all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-atomes_manDATA: $(atomes_man_DATA) @$(NORMAL_INSTALL) @list='$(atomes_man_DATA)'; test -n "$(atomes_mandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_mandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_mandir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_mandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_mandir)" || exit $$?; \ done uninstall-atomes_manDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_man_DATA)'; test -n "$(atomes_mandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_mandir)'; $(am__uninstall_files_from_dir) install-atomes_man_frDATA: $(atomes_man_fr_DATA) @$(NORMAL_INSTALL) @list='$(atomes_man_fr_DATA)'; test -n "$(atomes_man_frdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_man_frdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_man_frdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_man_frdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_man_frdir)" || exit $$?; \ done uninstall-atomes_man_frDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_man_fr_DATA)'; test -n "$(atomes_man_frdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_man_frdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(atomes_mandir)" "$(DESTDIR)$(atomes_man_frdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-atomes_manDATA install-atomes_man_frDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-atomes_manDATA uninstall-atomes_man_frDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-atomes_manDATA \ install-atomes_man_frDATA install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags-am \ uninstall uninstall-am uninstall-atomes_manDATA \ uninstall-atomes_man_frDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/man/en/0000775000175000017500000000000015212624223013662 5ustar lerouxlerouxatomes_1.3.1/man/en/atomes.1.gz0000664000175000017500000000537715212624223015667 0ustar lerouxleroux‹šÌ"jatomes.1ÕYévÛ¸þ¯§À™þ¨�Rô’LfêçT–d[ËVEg'G…HP¢C€´¬¼QŸ£/ÖïÜ´d9�ü©|D�¸ îŽ Øýðû®Ï¥X9¬?ìt½Ö~Òf‰’aH£– {Ý}Ö•éJE³yÆŽ��Ûxé”$c™¢Š+X‰ì™*y™öô>LÀ3”¡„‰GÎ26Ïø‰•ECBÈŸÇ‚®X×—Rò(¸¦�µ¤¢(à̃{Á.Iš£$*AUŠò—é•ÎÄÂ;ÔñóØLëVn ËR D~JäjÆ‚ Š«„C 9Àþ¤… 3ÑÙ�¹Ö˜°aÅe0f½«ÑÍÕû©mÞ¯:Ãá¸ã~IÓ™¶£$ŠMw4ìÕÝÑñoMüÛÃá·pM4Án#¶˜¡*S@’g´ 71õH.à£1yɦ¹‰m“!d–GГyvXOa«Œ*amv°B3¬Û–Zã �Ê!h…9€Œ�oDÞüО;xàGÄi˃<;XÔÈ"“ü¿x!üÂÉ5>_†DÑy{Þº1æ°õ¹ÎKR¼�žZôÑ:z‘©éZãÃí„ÿîýï­Á"EUc5"ÿi@Dݧ½’¨;‹º¦|‰.S÷Dw;~UÑ!ø¿EõˆJâseÄìun»�qIý¦ã�¾E�S¢õÎè.¤ŸþõmÉ€oª›vç•Øƒóm¢5$¬YéràUKõ®&TJÁ$ÂÄì7ÖŽ¬?£jí�ë¹üuñ[úÕâ£`ôßõ‡£«¾ÇÌLÙ@¬�‹1k»p>#ÙlŸØHB”|�H£àª"‰"Çj°År˜ÍºÜ«×¼HÏœÒ9>C¨¨!Œ´¥ vlL蟔0É*;›ÂujäbjÓ+Mfv€.1ŠÞ[c3d£ë »VMtoqïÓu"¼—D¯F[DÒâÊ<Ãntzw>¸ê„�H l-‚í"äØòN,¡›R¥QÅ X7œüÖ²ZFA6?½{7ñ¿W¼Ì$¶<–F�°„Ã,˜-¨�†_²ÃšÑeY‰¨=½{¿ÆÉÎ6Y½ßÁ �OO rØÊ˜Ô»5¼hÅ�=ò¿P¯yT  †ð-1 ÃƒœfNÂéÁk³sÚ‰¶ÍÅöžP”îŸÔþ^cqèn2\ákÏ/f#¨cik»£Ðor§&�j|q¬Ðd¥J:7]Ä�ÐöF‰mû}N»°¦ÓIÃEl/$u™Ð+QÜZ˜¤Ø~Ö6Îbw8©=¨­u¶ŠÅé�wûž¢ê�é㘙t Ú ‰Â(½Ûì g3mš2œKüOú¤yd�pàÄ3SOàݾ`@ßž`û ’^ë ígY�zl‡Å =ñ­ùuåÒ9ɘâA”o0õ àÄ�jÂŒhÖ è�¯ª¹dïîbI§"V,«·bh~ðhpC{É(Ùßrôž›\œ8Y°âº6‹×`YƒìØ ðhJ�@ t¬pé¶èQ2)€µ56Þk” V Ö­ãါv:m�N10¿ôÀ·áµÂúíäá—@§š=ð­¹ôdö!ð $ ðÄ£NUâôônÜ}D.:°¢á_K»Ì�ÊæÔ<¥óÈßZNÀyJ®7o•»’x$TªíùªªÜû%—J‡/Ǿ8ìˆÕÒN­´8~U){«¢Ù ±DG2µ&;¤©V96iÑÅŽQȈãíPí‡gãŸòkÕkZµùc¤+½i‰Rwl(_él`ÿ�J‹Bi_ÆR�Þ ;N ™wŒÓê˜e«ò‡ŒfF¡Q6ÇKsJ£ž±!��39)|›Œ�½•T1ª­ ÖlPgœX Olœ5æð†G�x§sٗإ¸Ánm¯`x\3> /dev/null` if test "${COLL}"; then # $COLL is potentially multi-line; concatenate lines by not using quotes. export LANG=`echo ${COLL} | awk '{print $1}' | awk -F/ '{print $5}'` fi fi unset APPLECOLLATION COLL # Continue by attempting to find the Locale preference. APPLELOCALE=`defaults read .GlobalPreferences AppleLocale` if test "${APPLELOCALE}"; then LOCALELANG=`echo "${APPLELOCALE}" | awk -F@ '{print $1".UTF-8"}'` if test -d "/usr/share/locale/${LOCALELANG}"; then export LANG="${LOCALELANG}" fi fi unset LOCALELANG # If there is still no locale value, then set US English as a default. #if test -z "${LANG}"; then export LANG=en_US.UTF-8 #fi # The AppleLocale setting may contain a currency-related substring. # Attempt to act on it. # First strip the string to just the currency symbol and the language symbol APPLECURRENCY=`echo "${APPLELOCALE}" | awk -F= '{print $2}'` APPLELANG=`echo "${APPLELOCALE}" | awk -F_ '{print $1}'` if test "${APPLECURRENCY}"; then # The user has set a currency different from that of their locale. # Search for a locale that uses that currency, and set LC_MONETARY accordingly. # First try to find an LC_MONETARY file that combines the language with the currency. FILES=`find /usr/share/locale/${APPLELANG}*UTF-8 -name LC_MONETARY -exec grep -H $APPLECURRENCY {} \;` if test -z "$FILES"; then # Otherwise try to find any LC_MONETARY file that uses that currency. FILES=`find /usr/share/locale/*UTF-8 -name LC_MONETARY -exec grep -H $APPLECURRENCY {} \;` fi if test "$FILES"; then # We found a locale that matches; set LC_MONETARY. export LC_MONETARY=`echo ${FILES} | awk -F: '{print $1}' | awk -F/ '{print $5}'` fi fi unset APPLECURRENCY APPLELANG APPLELOCALE FILES # Has a language ordering been set? # If so, set LC_MESSAGES accordingly; otherwise skip it. APPLELANGUAGES=`defaults read .GlobalPreferences AppleLanguages | awk 'length > 2' | awk -F, '{print $1}' | sed s/\ //g | sed s/-/_/ | sed s/\"//g` if test "$APPLELANGUAGES"; then # A language ordering exists. # Test, item per item, to see whether there is an corresponding locale. for L in $APPLELANGUAGES do POS=`echo ${L} | awk '{print index(ENVIRON["LANG"], $0)}'` if test $POS -eq 1; then # The language symbol is a subset of the $LANG variable. We're done! break fi # NOTE: the following may fail for the alternate Chinese localizations. LC=`ls -d /usr/share/locale/${L}*.UTF-8 2>> /dev/null` # $LC is potentially multi-line; concatenate lines by not using quotes. if test $LC; then # There is a UTF-8 locale matching this language. export LC_MESSAGES=`echo ${LC} | awk '{print $1}' | awk -F/ '{print $5}'` break fi done fi unset APPLELANGUAGES POS LC L if test -f "$bundle_lib/charset.alias"; then export CHARSETALIASDIR="$bundle_lib" fi # Extra arguments can be added in environment.sh. EXTRA_ARGS= if test -f "$bundle_res/environment.sh"; then source "$bundle_res/environment.sh" fi # Strip out the argument added by the OS. if /bin/expr "x$1" : '^x-psn_' > /dev/null; then shift 1 fi cd $bundle_contents/MacOS/ $EXEC "./$name-bin" "$@" $EXTRA_ARGS atomes_1.3.1/misc/macos/atomes-workspace.icns0000664000175000017500000177002015212624223020713 0ustar lerouxlerouxicnsðic12Ö‰PNG  IHDR@@ªiqÞsRGB®ÎéDeXIfMM*‡i  @ @FQB°8IDATxÍ[yŒUå?³/ovf`؆EY\©Q£qi\b4H´�bMLhê£ôÿ¤M·¤ÑÓª1Hb›ÐJ°uI‰GE:´PE„a`†f†™áÍþÞô÷»óÎóÌåÞ÷î} ©_òÍ·ŸïüÎwÎù–û&kttT‚„,„D?Mƒ Ë´�Ãx Æ\¦³`\Vº9À³Ñ711‡ã¯dˆƒx qq<²|E¥ _¸dÉ’Úêêêšþþþ¢x<ž ¦®ˆ ðQÐ�wuuõ;vì æîF]?æ£@&<Ñ€|ÌZµ}ûöŸ544üÄ‹ƒï¬Ã«5\°Ëðð°ôôôD·mÛ¶aË–- ¢ïJ�«ëêO•/éíí-aG‚uG_6¨ŒŒŒDzè¡_®Y³f9ÈLE,Ƽ)ùÍdº &@U/Àª¸_HÕæ7Æ]Oओ�=†³¯¯/wÅŠ‡††Fßyç�wÑ¿ íQô›0ŸTÙ´{ex"À*-›*ÝœœÉÏϧ°9÷ÑG} ‡î@™B 9Lˆ’ ,#~y2¨LzõÑöLR¥Ç±Ô €ùŽŽ©¬¬Ì_¹råÆ|ðô›‚8aæD”·KR28QÁÒb>//Orsse``ÀI'MšT!lÂ|ñ;vÐ1¶¢w‡ËÒ„P°L¦´ŸÒ íÛÀñÔ €»|€TUU1_sØ„rìý÷ßÿ;Æœ¹\!€(¿z (]Þ‹ÀHP@¥¥¥NåbhÂËHc~øá Ý~9B,áŬ¶¹Ót}Ý+ï5ž}è#‘ˆ#–c±X „°N2¾k×®�0Žš0€¶ÐæJ~€üêÝ€ÜåTã´� »‚  Ê{ì±ÍØžÙ³gÏ?@û,Æ„B((eNËAR“nÕ½hq,…PPP fàh„S±zõê_ }º±±q7ÆRƒa4!°h� Â�I¯zw]*¶¯í×ÒÒ¢gÇ/Pˆl///§@ªV­Zõ+8ÆŸîÛ·¯4Ρ-° À2ǼeÐÝ–®LgOŸv¼|yuµ³ºnz,«êãR$GŽqVŸõܹUÖÔÔ¶Èšµk×þÂXßÔÔô9æï@¿¡ šê D`d€Ñ+h[ª”àw>óŒ¸ûnÙwÏ=²ç•W$�&ÁéL ¥¢¢Bp u€NžTzäüy‰cÕ–/—83 J‹+¬ÇamÓT5AËšj=hT ®1y¾yŒ?jê¤iÇ+£†Ö¸¬mçyþO��òûO>‘>Üðî»æ™|è�üóé§åGÓ§KÑÕÞ.£x©„SS»¶4¼0øÕAcˆ‹OxëˆÐ2Ų¯zªîÎÏ>“?"»xÑéš[þ|Ñ"i¾öZ†Ý�:ŸÞ¼Y*>þXâØç Ÿ|R–=ñ„£þÔ –¾×:-³/ë0/üÄ €„uBNÄà.�Õ¶¡q{¿üR^ݽ[šÎ�Ój'-È,ÄÎ)S¤ 4¿ln–û>é·lsŠõõ㜢%¢ó*pwÙöM—ÏÈtÂA¨v'VŒªm3ö÷?ìÙ#ýê+JhÜüxU‘<ÞêP_„mŒ! �`Hç�Nø£ YV>´NËÚ7HJv‚¶ãÇeïúõ’ûõ×Ò³p¡,}ùeùËáòœ@.OfF¹ÍÁ³ãµCr±ÇÇ`Ç»ºä(„2ÒÙé8ÅÁ‡–ˆË)*@ÒPÜu¶Ì~AC(X¢‡q€©øZTî‡w_÷öÛ2P~�n¸Æ ‰\ò]VÇ·ßbéãÒzÝuR §ø±:Eœð§ˆw€J~T»,H· Üe?>Üõ¡àžˆJ> S(…*g#óqPz>†ºQ®<6e§NI¿‹ªSp;ÅÃО¶M›¤œN-2N‘‚pèš]í~@SëœÎiþ|çfÓut]†¦=òˆ´à”Ö8uª¼zÇ2Œ‰ ±š¥ØÊ†áä†Á,5bjOð%(—<(#­­2”°{N™tŠÓ¦9ŒÂŇ;´̓@{èOœ|�IrH€n�îr²sšLh =NÖpà RôúëÒ æºáô†ª —aŸ?GàP_ÚzåNzq{1p;^N±/!œ¤S„PûpWÄxž ©j Ú]7IšB(脤ÉWÛ)Xµb¬p)9yÝݲz×.©îé‘ã••²�¾¢"Áw.qÔÌž4‚8Å¡+¤"” \ó¶_�|(X‚<¤pE®›5Kj ¶‹žN1p‚÷ A�âJ8N ›Çb{0"] B�»…â7¯»>´t"e «¼Ç×®euŠ•�§x‚ž GJÕ·ðNþl?7`w9°HØ‚Wp²™ØÚÞ�3G¦Á»‹ü–›nJ:Å<8ÅóÔø‚îÜ*†N1‹N‘¾Á„¤SLœ@�wc¬֮ʋֳ¬yí$ ,KL'gó ¡¦'kkåwxä(ƒ·>‹íŽn"œ"ùä œhÅ«4MÁµÀmÞò›*Z¼  à'aeÏcŽÒ^~2Ny—ë•ñ&€_sâ @yPAXàÚ¦cÓ¥¡`‰Û<_cfaÕ; î <Ýßyà@æNÑ€$½¯ Ø£ØeøbDŸ£6î®ᘠ!ðAÈ´àYOÌÃ�KãØwörÝñ­S,Æ*f›Cw‚!Œí¨~\ŽFËÊxÛ‘2ì"6°_#ΡUÔ;?óZ¶y;>U>´t2Õ ¹"õ‰Û]DÀÔn8ÅÃp~AOŠB‚¾xÈq|æ¯Dl8šmØfù¸Âwˇò¢ýÝmZï•6‚´„Ýùkà ~½=„q »�b>ÚbðÃøÌ$ÎIF-Ðkçžà0�@‹´@s°h Y}Š1³yþàGåAUŸeÍë¸tih A�X‰sÒA¼ üpï^¹ŒÏÅJeXl¶ ÛbVŒ¤0Í«r_‡¸ÚË-oÜcyÖ±Œx�w —üÚÑŽë3µÀË�ÍÛ>~ùа0ÏøéoÈ™µkå<‚,øè#‰|»Af!{òc�>!—Àc±”c«O­ xÖ¡m1�±�oÜþâ iÅ£ /Gn^lß ùPðš0ŽUù7¶™˜qâtÄe¨[L‡F0E§è !|€wKÙZÂèu�nÆý£é½÷œ_Žð\àÅ“ï\ ¡ ãí¤™tY\!®Y ì|~â£NQÇ2Å� ñP€\qÚ?À!S�ööJ¶¿#À(¶ÛS Ò�zÞ,?6ï4¦ù“‘”&'£s¼êÙg¥yî\ù/Ô½õæ›eî½÷Êõ3g:N±«”�Û¡³ª‰�4ƒ|2Oµg @!œÐ� µ¢þTþb[›Ä&ц'4š€õ¸žƈ§þxP2v"Ö±¼øöÛ¥ï‚ígÎH TŸßôºÏžuœb)v‡fø„.¬¶õÐô øõÓ˜`¨þL!ñœ0«\…x{ÿ98¼œê6šx";§Ù M©A=wÎG>íÊsª4”,x›'Õ¸–<÷è¦mÛ¤ÏZ`æv8ÆóëÖI«y1¡²Z€¼.x%4!†º\äˈÇ]†ZЫA_Ž>ƒ6Ôá=q?¾0õìß/rã�rçÆ�Raê8gpÀ?�`{å¹<¦ò#æ©·Þ’Å€H(?Ѐù,ñ� `K¶ ª®ºJ ¨ >!šSŠCRŽb| 7Îåø¸Z�·E¸YiûàÙýõrãªUR†9ôÝЇÜ%Õ—í”"…BÛcôrŠ ¨îTñWý *x¥íŒƒUBK/–á™�¹‚‰³�ûÜÀ>éBhØÕWâ¶Ž+°ø¹ç¤žšN±í–[dÞ}÷�wŠ8 ñûW6U ^,@¼ B}fñ,LíÇØq–ÁÑžÄøÿ ­§Å*”ÃÚ¾ÎØt€¦´»nÑm·Éä­[¥ž[�âãOÂT:¯¾züö"TéÙÐŒ<‚¬è|DÚ¶>‹QÀµ¸~Ÿã÷E<¨4ÀùVák3�Ƽ”yñ¥üy¥¡àEܫ޾€?]ÑßöÑ)v¿ôRÒ)và­?ЬG; ¦"NPš„‚%pFÓHãjócS±ÕÒé²�>ˆ}¼xr<þ„€Ž÷šÀÖ1ŸtŠðÜ'ß|sœS¼ ~`&€Tƒé"¨5WOAŒÍgTúªêÓ @¡0f2€N¤Li™©­sV Ìçò¤¯�<)‚ù:œù+/ Ê‚'XŽS: XSÖ3Ï”ÂÒ íšj}º43±¹¨*³š²Yó´äùçådÂ)ž¹õV™wÿýxþ ¿w~Å×µc»šJGS;µW�m’ÿN„Az£O�Imæ�“"ü€ã±êôܳé#ì*²¯® Í+kZ§©ÖÛ”maBh(ñ i=)–pÿ‡úÒÆ­Ó"M/à TS�Û¦Ú¦©m ’ÏXJœ§ TiuŠìkm\ÇZ6¯íšj›¦ZŸizÙ:1ö²mŽ÷Z}¥«@5ÕúT)úò5PâI,æ½Þ'’“�Á ÁÝ×–5¯iPšì§c¼’ß´‚*€AØñØëƒGºŠ>ÍžÕÊ0mÞ³³G¥ŽÑT»`7ÁýZÓ ð?N‚ØlÄzÄ*Dÿëÿ��‹Ô‰x";±0„oâø Ç3L b"Þ°œÿFò½ ä•?%éF$Ï)#ÑŠDhÜ4´)0<ä%?ü û½ Ty‚æÓ$Ÿ)ãЀ”f�V âØ™z9Mµéû–:€ÓW¦ÿ ´ˆELXÀIEND®B`‚ic07'‰PNG  IHDR€€Ã>aËsRGB®ÎéDeXIfMM*‡i  € €HŽw&tIDATxí� �GyÇ{ïCZ«Õ}­,ɲl°Á'Á•ƒI*Rœå¢*¡œpU|PNAQæÇ*|°#Š€M 8à 8Ìa–mÙ²-Y².ë>vµ»ÚUþ¿Ù÷=·F3óæÍ›y»J©«z{¦�oºûÿﯻ¿éyÛpôèQW”k�+JöXÉU×acШ†¼Úã�=|?ÍÌí‘>øÁõ‰Nˆ\P߀nTwã¹÷}n(Œ‘ Ç�”žOh×ðÀ'G)Ëøšk­¢¾ß$™Èåžðÿ | «]GJ 3Û�ˆ$¨™ÀÞ"ß*ßæ]CÓº|¸mpp°udd$ €FuÂ9µ3_õijj~衇6îß¿ÿ€rP¾Oþ°•£ÓÆ«yQí�?räˆrÛ¶m{æŸøÄõëׯEõÞ' šÏlpB¬ ¯Vz¨yÓ]j{,¢€öµV ÈòVWž¦�`Ê”)Ëoºé¦•³gÏîUt�üdùNy¦?úAÅÆ1«UAsµ ñ¾˜èÀ:ÐB{ð‰>Ú`xxØiZs“&Mš~ûí·ß;}úôjK˜Áâ÷D A­GŸŒ€›0OçË­õ:k½L h�㺺º&ÝqÇÿÜÑÑ1Oò Á$y4‹à‚y@m=ŽÄerIÀfS(é9¤…�Ÿ :äþ¤{ï½÷îÖÖÖ¹*c$èÐõ A‚¼@! ßäO$Ä9¿Sí:.o½ã­>���Î÷Úk¦ír\ss³SÜ‘à…a ǵ&È‹6dŒÇáeê‡Çeç€àxë�]»v¹‰'º––HðUåa:˜.oÓÁ¸&A^ ?ÌŽYí[b¡Oª¸ëZŸ‹\Ó€k´ÀÀö Mü��®­­múÊ•+ïÔílyŸì Æ¥&(‚eàÕèÌ.Ȩø4‰*%Ëχ0o Â;v(‘`†4Á’3G`aa8.IPÔØªœßÁv]•€3Ûóá=‚x#qh�½{÷2$˜0aš`Î=÷Üs‹’�6Œ;Œ â:×:y<†Ôµø¥…_y1ˆqˆ!@» t=ÿî»ï^Q"�o'€Î$2b»QçÆ×…´Ó÷unc®�£~h�¾¾>F~~‰�¡÷ë_ÿúͪ€í°²Eda8.HPòÜ—WĵIåìÙ�€kÖx¦€ooovA$8å®»îú’„³04M0nHP蘬Î:8f•—¶\øyvoåý{»&ÄÙn@Æ €L�°E”Åp™,†ÿ ¬�`š jT&çˈºÎ$4T(J®Å…²¦ºµí!!D0-@hSÚ@ç .¸ñƯ—P#Æ¢1!A!HÕ[^&ët?ô’ÇäÒ¯‹]GUÄ4kóFÓ¶($´é §§ç�>ÿùÏ_'™³äÙŒ ƌ֩„'Šóë̵�Ohí|ˆàOL ¦l:€:Qô–Ï~ö³W«ýa0Ôe:¨Â�Wèáç0E<Ï—í_›µ2˜6°éÀ¦BÈ \và 7ü�ê7S¾[~¢<ÓA]HP(|0Ô ÌΗSé:ê!•ÊøéQå£âõ¾C†9®ÃZÀ¦Óh<¡>ùð‡?|àk_ûÚª( ð|�z”¼zFMD(Œª`EÕ¹ eÈð¬Ô>#ð1¼s`Ÿ^ƒh‚�÷Ýç6Ÿ¾›'�€£^� ÊÙÈ,Ô6£Ý´×þè÷Ë#Ó<2ðÜ›�.z@òÐFªnÓƒÿ¨ª®ëN�§«$@6=óLùs^½-–gY½QžûŽW^qÛ¤ ¦ÏšU%ì|Ðl…ï�~ò3(ÃÓêIhÞH`2ý{›–/_Þ¦H×j�°ó›ßüæ/%žÑÏb"@€š\]`�ÏZÓZÊ_ôÚ.�‘ozÔ×�G”Çu&õ0`ˆ)ÕMD³4BóÖfk¡yä“Ïî£ò _6‚î«®ºêjàqɳÏÑ!�ŠèÛu„dt…ÀTMݲ”I’OßÌ]¶Ì½ LŒzÔ>×ôØ€|¿ü!mÃfj;èþ<®‹õ³-@qj_¢gåìÞäÚµ¥ù¡¥J œ¢4Ž—£´ œv 3»B`O[«¤NH+#*ÀÒÊz·@Ú²h‘ëxé¥@gÚðwRðòËÝT TX¦µ‹|ÖÞ$€‘“&y�#OcÞWýˆ©ÉJk`ÚV›¹¿eëV÷³Gqß}öY÷Š4€oÏmV\¿Îã jßþèi§¹�ÓOw Ó§û©µzž:y·^æ<~ç�®û‰'ޱN~ï{K!{}H€±(­óÛ“DË—ÇÒõ\H0Êê´•¨�¯Pa¯Ò‰UH›/JÈ€Fï}?ù‰ûöÚµ£ÀGdj�úgÒl�ª—éÌ=¢°QæÖi¥=þÓŠ;Gyž¿ýv·@ÓÃq–ÂüG·Jºä=òÈ8àüêX;“ò¦ÉãËÌãºTª˜5´R¾¸t~�ã׬q÷üêWîñü@W¼k‘†hÖ¡‹†’e�©aж}V¬*ëe(šV?ÒRøÝïºÍš2â,…&+ \«aš¼äI#ËdÖÖ•Öøj+lål�·òg?+/ð*ÉjÑèfô##°›j~o!ÊNÙú nž"زCX,œ¥pÆÀRˆˆQ–B«§ŠWÐòÆ])�gäáêBkLÚ ‡ó3ÏoÖý æùð/If#ê_ó>£Ÿmèbô—Ô¿•fÝPr䋲bM„€f-Œ²š BkCÀ–·R>K·üy‡… ©ò€º ¼^Ój™íN;óL×XZ�SŽ•w°ÀÛ¶-XàÝ·n�ÛPJKëš1Ø”F?ePÿ-Z ú€è%Ð!E&Y gkÑøä7ïˉ»öû ‰ ä«”÷ŒZâ !�ñ®à¿úÁÝ«ßþ¶k•jed>þº×¹®w¼Ã]®wóÍZ™Ñèý�öò÷ ø`e’â¾±4ú¡ £Z¿óêZ}õ/0Gd$zQ6ýyÚîuhI]–Â,…:¬v~“À³r–?.o¥t““gX’*ˆº}Jà÷}éKn¾2²©¢ÓûžzÊm•L{óaYíþM¯p×è´LV7,°/XàÚ¥iòˆÀî’lSÿG¥Ò^|Ñí}þùÀ:x@#|—¶Ž\q…;ã­o ´ùÞ¯›�G\À–ßòÆå«”nròëJöjv”ÀgÅm`Ôí\¾Üݺj•ÛTÚ²ÕÒÀ‘h@¦Þ~A¯Ë\£_¦¸£Ò,ƒz'°Gše@uê)£,…MgŸí.•Œj-…i$_ h{¥ôZúÇÊÖ…Ö!<´Y0 ³Úæë‡Sä÷É¿(¿S�½U†æZ,qYûý#¨l­#¸¦“'HX‹4ÊŽM›Ü^T½âm=‘h)Ô/‚N‰0!çYŠK¡î§Í›X ÙDY ­Ý•@¦�qyLFÖ¾¨T®PDUž…�ï̶¹[‘sŸ~š�$Ü^�Ö!FªHÀ¼�ä‚U»ÀDå“Àõ¢^G¤_tÝ(кwïvÚE¼$ éÞ€7¹I–§EÈ^eÜ¥Å(–©ššØDÒŠµ½½nJÉRˆ…�­!a¸Ýv²D•ËÄå1äÍÓB*Waý þ1+îçÔ6aCê¸Cóçó¯7Ë]³ˆÒª¹{P£xH£mX>ìÈ IŽ¢-”/ðŠÓYkß¹É葪?¼ð=\žûJ–Âu’sŽ O/Ýv››¶jûêM7–ÂKe)<¼¦Ð¦õIÈA}Tÿ¤t_^×Ç÷jRd,Óvï×:×ùè£ÁÞœ5À.Íýÿ­­Ø:}!3¨„eß@Ÿâ‹$MÒ ¤A ¬{C £ðµòo–œ©ÚiÔï÷Ôt’äÒZ §W°nò,…la“ÞT"B¥ô¤öT›†®›£amRÏWÜpƒk¸æ·AOÞ,¿¦»Ûý�ö绕n‡ÝPíMG´u; 9}Pyëz@€à3ò�ŠÃŽ0Ssv�Ôt¿ÐP|‰v¾¥�g•Œ°¥p‡F:j_t Ö.K²ƒ±ûŽÍ›Ý6åÁD�ÁÏ(6 •5Ò‘ž”')-R`†Èºh¿!,˜æhñÄ[¶Õ‹¹~v}ëVרßÜTûÿ0T®Q�´_À ŽŽføÄÉCÀnÖûÿC’WiÝÒŸ¼-…Ïb�µ€Y ­íIj�0ù½ÞeÌ PýŒ~´@(`í�"iQñÁƒrþS¬qQu�K öÎjø48#�:›Ÿ™}ÇÚRÕ&‹ûƒ.Εöê”™ðñ¦â�;.Þž•WX×]@øÖæÏ÷ènÙA´‚gU [ —*ó,yH™B³–ed¸@ëøg yÕ¦8Î2$9´À#"0¯¤ |B\RÛãÒˆ�K „æð§nHjˆ5-Àbðøò]R­œï ¦/ À—-…ZŒM‘*n'¿¦ŽJâQG³èìûr?§’Kg ƒò’9MñIm°ç¬S]÷è6¯¹M øo>ãdX˜?Œ+ãçÉz]ÈàW¦Råýt°@¯Uç ÿcò1™õ´ ñQ± �|)?;³V£~ª¦^vÙZÀ¶„ˆ =Y¦„�¯:K¡ðÁ ×,* Ì’Ix/†Jª“rt~§Fa“Ôk=,…N <í¼ð²–rn¡Goÿ¢êî·ï7"ð™"?øˆ°“B´Ï\XÙ<ÃÂ�ÔIqiÄã1 û®M�Ø¢! Šçç±°é ^¯~€³zÏ—Î2CóÚ˜I„®f ‰âL¡Ê3ê4=ð¥Ð°VꞣÇʆÑN¨uDpâHå‚éÐ¥mÒA•&…ÝäIp|°þ´êܣ砘 ‚¯(ný¥ H‹ŠOxl¦¤B` ‹ªQ¥´uöëÔÏS²âšX›@hÔœ|X‹«ËÛR€8e¬'Á=|H�›4¿OÐ*¿Ò‚ðaå?[õå§á™Øä9!v\|¨xM·¥ÖÕ$#uáJà“Î"pqoo s’FÍYêðfF¿â;enÅR(f)|Xu>%Uk@–ByH#¯O�ÎÊœE^&RE¨`„lØK“¨£ñ”1ïå;¢ôWu:©’Ã0´M€“ÂŒ~¶ƒþK¢pù¸¾‰‹—Ïz_7$5ÄOc”4ªÃ&ªÃþD¿ù³Lçþ:h—â‡J§ƒ!Cð‘'¡üQvGÚ Ôü!•mÔ|Ìô!4F‰ 2eð dF¿¾'(ƒN¼oyJ÷»´Â稓›¿ÇÔ†ƒÒXüd�­(ã·×—Qm¼_6ëu]�Ô0?�N}B?ê¼K�þù�~ä¦ëhX£>ëúkýr×Ußÿ¾ëÐÍ%0°6…h ,…Q"ð=b»€h‚nà°„Ò2eÀš8s~>¥ñ®¢_$¨äÖ(ÃF=—ÿ ào )ç·Û—Sm¼_6ËõñC'‹”„2iÄù¯o}ËmÓG#=KžQ´O =n›Ž…·j‡Ð£>¶J½P`.V9æf³ê2Ò'lçs²cÀ%7 Bæ~4š¡Dœ²óʱµ½}9=â‚ú߯¯“®‰›–, @g'`æaú&j¡ñˆš£ ÕiÁ§Ojäïø|q3S~F)œ«�•þ“:Þ¢ÓÀGõCe§ ´#6‹Tœmû ;ÛXúh®Ñ¿Ç1…;¬uÅoï½×½¬ß"8TÒ¬ ÌUÓGV&Ï0cÏU®B5 cô¯úêWƒÿ«Î¿ÏÄK!!×h„…êÀ·jDž«ëcàË—-…Ç$V¸DÖŒ~®ñ,ñ\G�lqF„ �©ôS´égèj=Ó¯�D`Qh®š¾²2y…… ê©S;Ô1(_Ž�ó-ÿò�€{üDuør…çj[Õñ<Ï,…ÊëøZ8Õ@$'£G 0·ã�Äû¾”—Ï×£Ôw +ôç%½æîÔ´u@`-€ga軪ûÌ/\Ãu!ˆªORÕÅnHàŸvé¹A³ªÅbHÁRØ"€Y '‡:UEŽqM2!d@+soDñã�¤ üMzÖ šßù5òJDД²S?5³Mß@øLáuDRYUòëB€J #}–>¯Â‚èXû6ÊÛ={ê�ùüc',kØ|g–Â&Ôy‚cÆoÒtSÝŒ~T9 èt˜ þ½ÔúQÕcŸÂuÕ/Ф֓Üf·ZE6€i8Š”¯ÔWIÏÈ’VDUÌo(Û¸s4On×oìTfÞìí)ù] ·ë+âó>ò‘às2Þµ¿¹ô¿}”tŒ¥�ÏÆ*9¾<Æ8Vü‹3à£È`q„ˆr"htïU¸^[½Wõó3ƒ Ë2G%1Pí–Æ1{!ÞïËgiy‡… McÈ3W¿òvýÚFÃu×¹�ºÞ –nÔª½H±ô“Ÿt³z0ú¥ –è׿p‘–B4ÈqüŒyY6ÚÑÕ>@â|�£®¥öù u‚´LðfÐÖ%"°˜ÑQö½Ï=çöhÁ&ö~ƒÏßYâ!@œu0M¿�V¼¶¿É:³6Ù‘ìFd¸qܳ7æ·x»¯¼ÒmÒw‚›õ�èT½ž¢† �ùß^¦‹Bu –Âuê«‘|ê½K¡TrfBÝ%Oÿ¥ñ5£€C �Òcd*‘ëä<™œyˆß¡‘¾›yYw‚Ö­ÊÃz`D¦â½2a·hŠ™ 5 ª�ñ‚´ÅnåáCX€‡L´ û@x-A¿„㎩_7… ²Õ5.žN`T0ÊôöºÙú­~û¥ :‡i‚²üçσúlKáD�ݧŸ~ÇRØ&õ{×;ßüN@IÁÛ#� %cPŸj\ru­ç �Ñk¥ðåÙ9ð2j¡¾ÿŸXšbø²y�|�v.»E„} 'é.‹Òh´„O„f‘g¢dì�ü…zÖVýRmæÐn®­�£ý[4 #€ß»ŽŸxjÄÒ§Ÿ£ä ¦G„‰º~§~2È/Ú°ÁµKshâ Èü ­q.RÛŒ<Ç'A¥:DÕ+m\!Hûð¨†1҃ΣV!Âï¾ñ ·H‚± :º‚Í £�Ká©Ê¿A×?–?ÎIN»ÀæÇ¢•:áÓ-¹ZgðξVG[Ú$»Móý@ˆ|ðrúû½Ç`z¢Î¬c ´kÐûŽŸ~á îýwÜqÌgøZ'ª¯T´fWÒƒ5ËIPMåÉ‹§ñhæF‰´W²jdŸ®rç „°¥�ʱý `¨{=‹¶i¼ÌÓ•ˆ0Maª´Rƒä¿ª¶<¡SLJ£Ã¡Û,ëáÆLD‘"*ŽN`^®ÚR(m`Õß!߬9—¹ðéÞ)Únú£Ìòç–ˆh©ûêùüײÅÒtúBùíòûå!'�¶ë×Q8i„ú‡ ¦Ã"]áˆ5*.©‘tÂý¿Ú`¸eqµQ±ú–BdOÀRèu\›FTp¦P‹cíЪ…`;G¿ rLQÔó4ù9Ò<ûS»¦Nð€kÖ/vÒazit ìnn»Ôíýhy.ÇRøœ¶…¸ò™B-úpè~vv†VÝqÏ 2VùUÞªº^(mÅ/žÍ�çSqˆ”1¼[uâc׉úyz¯‚ÐD˜½±z¶^z)+b])^2,¤ŽvDæü§PDupÚ8Úiy ±¾ãæ›ÝêŸþÔmüÞ÷\³VÕÃêÐ=ÚÓŸ-ðg)�m#dY¢Îv"–Â¥Z‘oÔaŽ�Ñ­a~¶ÿ�µ? ð‹[È%òÍò-z>[Hê�æÂSÿ Zv~úÓîÉ/ÙõˀŠfÈÈÐðÁº7êׯPý~®‹v… –ÊøÈàšÎ™+p÷>à^¾øâ²¥�ÿäÁK æK@^>ã²3…f)ä7�÷�e,«q¦ÎYdÎUAFøRÌèt~ܰݼÝSkK§Nµ|îsn׆ î÷²ÌÖÿ#è^¼Ø-’1‹¹?Xðª>y¨§•¯¦ÎióF€¨J×gvÔáB½ÂRhó%rI'\«ó„´­ [ Û¥þé}ïs�RýʘØ?Ç®¼3n·B€pÙBÛB@âÌ1¯÷ pˆ|ª~0›{s ¬=–^TXò®0�JA€¶•2÷A'+|H–Â]_üb¬¥°ESF”ê7u~±*Ìß­§¶�nSÏ®�o!u²4êƒ'Î<õplÈhL<޲€îû ¡ô9E¸º ªÕÆÑq‰Ø+Óat¢‚3…{~¢¥PFœ~‘®[ÔRy€n•8’0ì \Ëãç§=þ=×8â�ö™DÀ[ýÉGû €MeFÒŠr… Ø4 HSŽŽç…‘u(!ÿˆê7+WºEzH¬¥PoÏP‡³`;UãR›<�ŽL X?ô¯�¶ny¢Ú` “—ç<£ß4€ÉB>JFšþË’§¤©HÚFF峑Egáøò'|¦ðÅÿAž}6f×.åY.Ï(Gs0ÊLÝ"'‰*^Ö 8¡GºïÂ#—|~Ï£¼i0ʆóÄÅùÏÉãº.ˆ1MåÓ– ,…U,©ðØ 6Èûg 1þ2Úð „Áó–݇ëä«G¤v¸/ÏâR É!c]®§ßhK‹Š³4?ŒÊGÜí£“,…»´7àYG Ð~ˆ\ÿyQ`“ޝ%Îo+×Q²Âyj¹m�R‹”Êúoâ£âHcŸ'KáŽ7¼!úL¡ ?oúØÇ\»€7¸‡¼Ä›f`ćŸ¾OªW\^+f-'¯R|á MƒÒä‰kˆ•�§½õŸ­X1j)¼ï¾²¥p¯Žd�#ð±®oëÀ¨;ä†G6yª�÷åF•�ŠóË}]8òjvGˆ([ /¹ÄmÖùÎb)ä÷üm{à€oˆßžcòÃD >geü0*_Tœ_&êÚê•Vkܸ$@–°m«ze)œã�)D1Ð ÑÄ™K4 ´´q&¿š0Jv5å«ÉûZTSª†¼4.–Ü ¨8ÒÙ °Ü6Þ4�¾•!Œ#2ÂiQqÈð]^y|™y^×�Y*O'¦q€Ê‚ðÑöNݶpFŠ0ø¾l{Vl?OÒuQ€[½’ž�%mÌ �WÃL £ ßÙB|ÔÊ>®Ó¢€L–U.œ'|Ÿ¥LXFšû1'@šJ†óÐ9IŽtO锯ÔÉQéQqẤɓG™°Œ,÷ãÖ�¥1~@ˆrÄ›'Ý®“òGÉñãâÊúyÂ×YÊ„eäq_Fßof¬]–ŽI[¦R¾JéÖ¤´ù,?a–2~ùÒuM}!/8®_mœUÌÌñÕ–/<Z¢òEÅUªp–2a™2èg;Eb}.VÕ}žÀÀ×±»†\*WUK¼Ìç¥V¾ÌR>K™pM’d(�>å ±O‚°ˆªïó"€UŠ ò2nÜ;:Û|–Ê&�•V^¼Ý¦�l¹ ²<Ÿ·°™]Öýwæª` Òä©¥•Êêùô3§È9Qž jépUŠ¥6oR8sÁI+¾³âG½zäõ~pœÀÒ5ù¢—æJ8éŽéÀæ`óÝ §Çù±”�òü€Ê^yÈ€¶†™µAv«,ê‰�^È£Yh•ä�-ßqw’ꄎ>EÍ0$àûH@ߢaékú73ð*¸¼@eQK¦þ¹§âTí`£ÿ$Ô)ÀâéSX &´ƒ,·) & zJÓ€SQœ‘� ø'GÐ5Uý1-`$ Th®ég^PÕ¤j"�³  Œ€Ž|F½y]žt){€~5o#žÕO[š.³»š�öØ’0õð6â xK³"'Ãt=` [ðxƒŸøš\. %—¡�?Ô!UÞ†Aîó?+ŶÇ#Elž“ •{ /°£žôJˆW°qÌÃIEND®B`‚ic13n܉PNG  IHDR\r¨fsRGB®ÎéDeXIfMM*‡i   gêI@IDATxí½ç“%¹•åé¡E†HQ•U$‹d’E-ºg>MÏìØZÙ?{­Í–+ضœîíaY,–VY•™‘ZÇžß ?/HúÅSá0Ãå×q.àÞÌååe1©fFfRë~ê­¶5¹�ë6¼ =ãì¤>g þñsõ;š€w4î$ÝA#ªµ€ñlg•½­Œ×Ëš7¨| ðÔoIV…ù^íŽNUà0»EM£{A”„Ùú·&‚�ÂðƆð§@ÆoË|…ï9,½N¥çð4¬öß¼rÐìi¸Ã.Êê¤÷j"¸ùwt­„ùkW#ºÈÀoðä¾Ý<<�ï'p˜¯kw8¸fi°ÛôøqyGÇÅ\ÒêaÁ•0†ñ;P>h Zƒ7·ÄKÜ×þ2ËÚ‘€Vù)èñcÏK7¿§àš°ÌÈ  ìý \ƒ�Ï%.~_§÷Ò4ö+jmF$�üø zð§–pǯ5Kä†Ý‘@ò|¯{w~þÎ�; ?úÑ�–gggÎÎÎææçççÎÏÏç...f±R±NßȲ k\מ›‘Z{šóéé)¶½Ð»:ÛÞÞ>ÝÝÝ=U<ìYb!Þ�µy¯´:‡z8€8nÎŒ”xÁÙ£qíÞ�º…}ç�wVùË_n.//¯žœœ6'"˜‡ L £±„•?LM–ÄͺàÔ%àà þp÷ööŽõ.v���õþ €Y“®É°‰ám¤&‹dðîH y7€×zÅYø‡ø‡ûÿüÏÿü«ÕÕÕ·ÔæÕÃÌ«‘Í¢àt[çɵý�ºÒ0:�ZÇ“D¾ 9¤$ Ù7 áýáÖÖÖöãÇ�Ÿ½ÿþûO>þøã—ûûûGJœé ¿»š,‘rÇ�ü²s n ²‹¿ýíoðë_ÿúüNׄ7@/¿Óó ©áWx×F�µë4·9�äÝ ü‰¹„DÎñY�ž_€öÝwß}$ÿ¿OŸ>ýLñ÷•Ƥï÷ŸdÞšr‰ ðz€ÇñËÇM‡A‹‹‹÷¤þÿLð{5  €Ê ‘UM Qtäô~êü¶�€Þß‘æm¶¶ñ»ßýîLr^úóŸÿüå_ÿú×-isÖRöÅ_:z ýEÈÁÿH…\Pã©õóþÞõ�¤†4¿ÉÓ„@aø!™™»ëëëïþô§?]Õ¤î›þÿùù矟I ˜“ßm€¸ÍL­ 4“Lá£&€œõ­6¾èÙó÷Cnœ}È©NÚ¥¬”n¼O‘_tî¼ù曳¿ùÍovy§ï½÷Þ—}ôÑŒ&tS‚oF5 tùÚE”¿_¶]“uc°` @�)IÖîÑêû£�@üÆPM@÷fEËkkkïüìg?û_å>ðÿ�/¿ü’¯�€«ì¶ák&<ÉP“€¥2wd�ÕÝà·›j|ûŸüYšÆå+.iÕž1�d€üå„`�»æ65XUøŒæ¶uoFó_Hp­›¾ë2BM–TŸî¸�að[h�€È\+èSuò”$`[’¥ÍÎÍÍ-ˆ¾÷óŸÿü¿K¸‡&ðÙgŸ%Z@»ZÕ$ÐNBÜ5ô¹›’½?dêÿ$õöãVW€8*CÙhXÞ¥³®)�å‡ÿø�ÿø\á—|ðÁŸ~úi§Õ¬I SI5‰7jÈ«•�IÀË}¹W›1—¤—[WÙ$`Wá¡ Hxû¿øÅßØØ¸+‚øƒæšiU V“€܃;nÀ#¼Fj0^ëßÃ#öŸdÜzò^Ÿ¨ß縩!?ÂR—û\çÖé-€83ìëÐÄà†HMàR«>_÷Ã?L5 ¶uV©[“@*�.üãF)øí7ø¯­óïâë¨7(€ž›ü¾v<“€†¤%ؘŕ••ï—šÀ=ÍüAC– 73×Ù¨Þ@ÔLN-ÃÇ�\Yƒ?\õ2¯·2Çìíj¼}d7õI›É+Õ,ƒ^À.°¾æ>ñ˹€ø: û3²sKKK"…eî3' ÷Rš€F_F2çÝ­5�©º5N�ƒ¼Ajù½ªg©ÃÆD»Áo7%@ÎŒ?D !Ë… �moQK¾ù:ð¿hN`S�ô‰Ž»x´šºÖ8Õ6èýq tCiCsFµ;\ ˜pM¸~7àçÓ F½?sº'ìo,ʽÔ:�—Äùä“O¾�ÉÕþfU“@3ÉdáãFYõêËI“€N½sðµŸ)� €¸_Î ðhYŸ s þÛÝ»w7D"€Vsd›DMt w¢ ml-žqbnõû<€h”†ú§uà:µÖüœÄ… h¿Gh €î3˜eN@iõLh/—9�¯¿ù曪ÇäásÔ$P%©$l¢ yŽÚ;&0¸©ŽÁoàã:Œû)r4@Q¨×�9üºÏ І&°)£ëÿ[�Î ø9øÉS“À•*'ŠÒÆSù4C Lù�Šì¨˜A× €vb\nU|¿3»&ò%>–1¾ õÐÚß M@qÀ>Êßÿþ÷œ+p©S…šiDËMM¹DÊë‰"€&ÏP�‰yN>®Á�߆ø  ¾`ÊyG‰ ýèãÀê´Nà¿2C¨ëÿ'Ñ:aªšR‰–þ𡤠3 ¾µÞnåQ~„—‚¿Š ¬? ?%åë9�»J¿@9Z1ø’¼õu૯¿þºpœØS®<|M6·ÖÔpk_ýÍ54ÈS-€x&€ä)b¡�·¼§{¡ èëÀ¤¡­ÄhD}5¾H&ÞšaÔ@"ŒÚ{sð&ƒf$`ÐÄñd`Z«’,Ø".E`í‡Z1x‰&@@œ,”Æ/ý¹º_“@)˜©"€´W©huЈ$`ð箫“j¬`.€¸Ìp/5eÜдNM Ú0š€î]jNàëo¿ýöz¢4ƒWþš$‹©"€Wï¶ö�‹rR6 TÕ�ž_ç?Æ¢ î£`JÐ_s W^h*‚&p.�àÑEùœ@3B¸õ$0‘�7*Ã8™q¯_3Y´Až?Í‹ëf–ò p†hñ­8¯Ô-Óð×pì)¾§ø¸—ú™ò”&ð�ˆ/å³K¸Í­&�‰!Dm&G~_-5wXîçºt€"` ýHÇõµòeÁ†¦~¬¯ì$ZÓõŸJM %'ÉÝ[KC¼1PÚˆò·xS×£(󦞥U¾Ý>g nòMÓûžÃR×þ¼.ŸÞ—8&çE|ƒ? S0K†±D¡ ”ÿ;p©¯Ì ¸¨Vdp+I`¢Ào±vÇ_)ÈíÇÍm hü@:àI ·ëøPþ8L.ÿ uWs�Þ}÷ÝKÍ 0'Pˆø:Љ¹u$p« À ³“–QÇy]ÍägÀ:…Aïë*×ièýñ“&×·%û74Ýz -ijÊãR*»§ûú²Ç"‚VÀËܲÅB·šªbvs0àV™ÈAÌf"ÈÓpÏ&õ+Œ-Ä÷D&?)¿¬èúßZh91ÜM`ª  YCs£©Ýñ�€�Om dÀ�me7O¯k4�­|à<ÑDÌ <Öß“çÙ¾b’Wwn L5¼z—µoÜ$PEδ5…V�‚ÞÏæ0» Gx ¯ú/ M   "€zNAÈLT5¦«ÇÏßQ××@Oé\Õ µ#€´þ èZ„îó¯Òó:nü òSœË_ýêWšd¼üꫯ?yò¤ªç'Û4|ª5�‰!€Qƒ&mlµÿf%`ðç�Wê§6\§6 “I÷Þ�&p)M€¯+*ãR�jé<þÆ_Ë?µ$01À ¥aŒŒC�G¯¦×úç ëµü<��›†û]§® �øùÄ`ž‡¯K—%ÃXÚ[�ÑbN@ˆ¾PtÚëÛ?õ$0Q�6�Ú?¾´€­“ÇKŸú þª<É#Í'½NÕvIö!š€Ö œk’�k4�Ó$_*žV~ªI &€äÍÓàjÓ\�Ê']dØ*­ë8©‹ðçy: nª ¤áöS�ÒoMàá½{÷.v¹¿¿È×ýùÈwÏŸ?ÏÁoaL- ÔàW\»•€AL¦öãÚOx P®«ŒÁ/�FZk¤Í�óËïU„/+íÛ¤×:� M¢ "€T (5�…òmrjæn%¤�0}õ8h%“„]׈kÀ˜|�£ üiK\Ú=†ÞRMt©cÉ•&4�­­-k)ËØOü©!�[Iz�µ ¤ mWǵF@üÐ׆ŽË}Û<>á"“e�4ü}ùgø:à9_ øHš]O L%¸ðæ¦Á´{ó´›\\[HAn94 ã¾ïÉe1g bbNà@Fg\hÙð“&š€‹€ÒI£‰7U.€¶áYòçñ5õ±ŸzU‘qÒ¯ÍêO¼Ä¢X8•Ÿ9Žãx±'Ïž=CUÂpØÄ’ÀD@³—[‡O¦ ~»Íž¢ èf†{¶ÄiwU·~$;Çy‹‹‹ *ëRÐJð'‰$�‰ ˜Þ�"}ù¼Èa˜Q”9ŒçjWF·ÏmP‘Î~—ÑI^Ìðs"°†álØ ³ôiþøSK>¾ÆŸZ©K“G™àH1ÖŽÊ9�gÛÛÛf»®ÞÄ’ÀD€¥\»“#�ð©?‚ô'ñ/Á,Í=::*ÔGtâ¤j½Àát „s?Í?÷RK<ÇÇ%N³ÿКÀ�eçT§3ýgaìKXÈ €úL$ Ô 7—6Þdmz“€åh€æ¹p¿•%ÀÞÞ^hÎ× %Žó' ûžóæÀ§–x¶'žós^eÞ0Ï¢ü<8’{)B:a¡†O_¼x‘~_§$@_ Æzb°&½¡ÚܼR0¨vS[}·[òZæôU®óÄ­²�„ Þ¾a¹N�ÊY“ý©òg‚ð\÷çÞ{ï½ @ª ¤`"h€_ù�5 \âôé§ÈO¹MÆ9Wozª?Ú@µVW×ò˜¥‡¤÷,UcßLe•ú}¿—ür›ƒ“º{ÌŽ?·.ßÏè:æù¶ºv™ü9ò!?®qI[’šÀ}Ê”&p¬{—š8Ñý S¶JM Š\M&d t3äá›ãàÞ A»€èXãéíçÏ‹#Mª©å Ðþþâêj¡epaçÕðiô¹½©:»—™:c¸OXªPïVØqž�ºä��˜o€<4üÌ?à’Ÿ šÀÏ”†¯çº7óþûï_–š@ hûqík˜J(_/n,̰ê`hÐÇûûÅþÖV±«É´�o¾)Nvw ý™^�€–»³jÜ‹ÅÒ½{Åêo+wï+kkÅ‚Ôa€A}s;(A:_ÊÁ¦ àÜ7ðíüí€::ÿ*7}6—OÊá‰\÷0Ô "P^‹ »¯kV Ê¢ œ*üâ»ï¾ÛÒ&"@n §à'�]ÂÆÆL%Œ�t‡\À ðo}þyñå¿ý[±ó·¿ñ—¹ÅìÎNœý†­S@¿ØÜ,æ¾÷½bùÝw‹»?ýiñðÑ£b]„à!�‚ ˜aRP’o~Ê Ü@´ ð±©ñu^·´ŒÜïgq8×Ã¥>¸˜6ÉE À2<�Ë¿ÿBé!„Ðä¿°w %]† qËÇ=›ëâйM¼ÈQ˜Q•ÛìY =?àÿîý÷‹-Àá‡KÒ5 Y#-Zß…ó©z|�„Q½|YœkÖ�¿Ó¡Ñ¯J3XAƒL·ÀÀïçOïnÃýV÷ 6Ê\C8uÈ�O^¶.£Êu½R?ùâ¦Öa©›úÉŸø&ê)ÿ’–ä^Ê*þ…H÷XÊÀ™æf^¾|iÀ§®«j«¯M–ì­w@ƒÚÿ•€ø‹¿ÿ½XÀ—��ãh\^tƒ¤)œ ô§rO¶·‹}ÙÇÊãP×o?zTÌÞ¿€£ñ§€tjÆDÀ5é±ä‹¥WðÄá¾ÁߌҲÓ|Óp—K~—k¿Ã©‡ÃìO]ב0[êËWí\×ý_*ý zŸË!àë@OmÚã¯AñÇbBp" @²ã=Þ˜¹éü]q€s¤ ¿=ÆüRûéùÿªz~N¾`*([jçܙƼZâV\h~àD×;ëë…öÃkÒ49èE8i]‘K*›ÔŸÆ38 s»€ pÑ£b†0ésˆHåOš?Ay=ÒkƒÚå;>×ù=_ãæÖ„@:ÉMà Õý\á;¸º>S�ϵNà… ™ þT#ðkð½ò©FãL$ŒFTã[*Ÿú^2é§ ¿�ù—ËžðsÔ� €þ›VGë¼ö![DqòÙgÅ¡†{?øA±¨ù�B„rA7†øäpqÉÃàwàÇV�?|~�×Çש‹¿�¥nŽc¿]êŒKÝù Ó…7þßÊ¿(ð#Òó>øà¼\1ˆ˜-nûM!>ÊÒ³Œ”n5ð&ÝÐ~ €Ý/Š=þñF.cþXʦ‡Ã…°h´D–«]# ´ø¾8{ü¸8‘,kr�yºM ·ÙNä—ÆÁŸ‚ˆ^¸Üûç=¿Ër=òk‡ÛÍË#œ°ÔV…¥÷ñøi8a%(84�e¹o•Àކ§Šs"s*M€�< çàÚÒèF z•ß0¯Þp#¨öLšÎDŒã5¡§ïY1ãÏ‹ð¸h²(Û´Æ#YZ DÀýy�ýDúZÀ¤à�æV¥ @ÀKx§Æq�ù@.äƒ?N.#~ê÷}\—ã0_§n&,µÎ›ºÚr_þ.:«3ïi^à·úWâY=‹>ÄìéžæV÷ø:�€µ€± �[A~ÉnãæöZ?áBªó‰³œh@h àÓÃÛBÖ=]‘ç€1kf™P§ä#Ë'EÀh@¦~Êí¤ÎŽãzr €èEæë´îù¾ªÆ×vž».Óá¾®rÛ…Uݧ¾„—vF×3ÒVDhoËžHnÏv wÿ“O>ÙS=¹•.^ âGìc¡ Ü �°§Ö,hÞ/§ÝMêo&�ËôÎ�üñÓðí§ñã7@šå•‡8ä…À5~ƒßÏb7MO&wÓ8y}|]å:Ìé}�»ÜOÃð§×Ô_³¤©€7d'�àDŸÿË¿ü ÿBÊÜ|‹E0øå%«ÑÎLøÅ ÙQ˜Q•¯n¨˜géªTö3ùie©ÞI÷ƒÚO×C8z©5�˜ªj:;Ö™ù´” JPY45–C—p%ÒáǺ ]†ý±üq^v«îæ²}ß×v'½Îã:ŽÃók§Å-­ÖOÍÍŠÔÖõ|ïhðTÃ�ºb”¥<ª´€‘¦ŠÒv›ü¬ígϾì‹|ÊÖF‹£Û‰³­J?-Žp“þS�ÿTŸõ§yÅœ>B$&—öЊÞsïOZ $@¾�¯¹—<õs¯™iÏ€uz_ÛÍÃ}ÝÌu:ÜÔ¯ç/®k2pC.S/L»€1k•Y ù0`âÀçå¤~®oÊ «œNëïϺþsTv¢@[¼Ç++Åký5†×_ã6š�­ ×7 @'ЦÅ?sÚ°À:€rò�r\Vî*YSù;.rÃoù¥~§w§!“__…6ÿmßuHsÈÃòëVy:nêÊ�ˆ¥ ðg¤¿   üTg¤$0Q`a§/ñ¶úiœôÌLÖiæ)TüyO³÷² šÉשùKíø{ªÅ:_kÅÞçüGß~[|£<ÛŠsGëúï)Þœ\hB�¹� ]“^ Õc–ÿLá§êåÏdg4æ_’Ú¿,»úöÛ1‘È×ä“’ò±ÌpíïTny|ž)ë4¯I‰§g4èS×ÀcØ�;²¯µ0æ- °pb =þ—êñ?ÔzÿÏÔã#2Ø’ÝÕ2Þc�›ï÷ËZ̳¡aÁ¦¿òàA±Ä„žÒ]ˆ4Ž5l8ÐÜÀ®zû“wÞ)f>,Ö4ñw_ëþ7EK"†ô,7%ƒ4ü&D׌�C?&Ï·×ü:ÉGy³Ó`ü)ØûyŒ�§�jÈ_ÖÀ¥×a†�ÖÃ�5Ÿå±Úh^üO4ÆÿD=ýÇR÷Qù¿T�¿¥û°`%ŸŽ°-ÎÕóªßð�¤ÞßQœM˜•w:o»8Qø¶zû©ûóo½UÌøÚŽWp$Xœ¨ô)Ø©G¬ É0/0ÏçBâË?W¦)ׯ7$‘>kêoD�§Yx'õ#—nÓ¤ésÿ ò«Ê‡z–Ö�‚ßþ¼J#»žj™Tû(˜FÅ$ޱ% ­M%WÏÿ"€/D»"„Óßö)*&öäîêóÝgö–€Uõ© €fdÐà .ÉTÀàÄ2¼œh<Ñã d/ÔK£‰½ÏÕë$À­I½- õÄ»šÌ»¢‹×ë-KùàêðúPÓÏzV>8ãSŸ€º'ÀžÈêH›âB@> _È]Sº ùWþ3•u �ã¹9Ösß}WÌ‹ ‚(Zñ88„3ç9SPÉ8SðÇ?.ÖYL$R�Rk �üšáöJ] xâ mL©¿Ëçî(úMåè±ôøûþ–/ð?f¢Oð…ÜOuý´T÷YÅFà»f”†Ã>ãÔ_îÓÛKСu…­+ž¨gÞUoÏüÀ©@{¬kâhõI,Þ– ¼)»¤òŽTþþ§Ÿ{ï½Wœ‰VT—y‘†Ò°>SðXä�ž)ˆ&ÓìLAd9(y6Ë™öbòüºÍÇé�N®'{©ÎPÓL X­ªtn¨0 `ÙÑøú3�àó±Æ÷—ªý“{áŽzá}‘³û¬Øki”— €Y|Ôý@€×¦ôâ™üÈNGس?~LMc –mYþoé¼üë_‹Ó>(t¸è�Eš[‰i(ÐO€†�3•fOC–$sÄØÛúÊPu¦à4½?‰ajÌÄ@*q3nÖ�ÐùåuðؘÙ öð—êù™àûðË/c’ïS�è‰zZ&ø=~žQÅ5àÈ!zwvô õÑëï+ ¤0Ç]š€¶¬ÅXž¬XHß¾+ÕGõšàÕûϨç_“ÿŽÈ¨ë3¥e´;S0—7²„T¾ƒÊgÏtÓyL$Ü´P�¿{üXÁ§‰½/ü¿©×ÿD½>Ÿôž øû`G=~R9÷üsrô°ôþ%øc¬®¸@ b`y06H¢Ì#zsùŠì¨'_ÐØNvYà_V}:>SPs nÜÀ™‚eukç$p« gö�g#K@mŸzügkö?Ó8ûC-T~�ïP½~¯&Nó�Pí!†êý}ªîif®˜Ó Vùé^Cª#ñ8SpOu[9­‹�˜ ÐÞÂPý}’׬kõNB†&>r¦à©Ö(p¦àІ6Úë- eb!*÷ø®‡]Çõ}_÷ê*_ç3¨zõú<7‘îVÀM°Yž4–×Vð üß\Ïdã{¾ÆÒ'}€Ÿ1y øçþÔ0Ù„ê/íÀ�¹Gõä;ÿ¡¾8Én¨N4 ,€ÇíôLÁK‘Gœ)¨|âLA}- <,s?²y­*§6×ÀTÀ°YìÏ×xš�zû9+ø>•ªÿ+ø´„7_Á'ôöÆ L€òˆÉ?TÿDý�"´VíAAeÎõâÑ“«þ±åÚš“’h„Q~ÔAõáLÁ3=ó©†3±zP×ä›[Àߎš½7Òõcò|»Í¯ßôýÔý¦ÒN5ܔЪò¥1ñ=Ÿ ;[¨úR‰+ø¤ZW­à«Ê§Ó°˜üSdÀà.=¾Â� Ã�yõÂ1ö‡*ÀOyÔ�½ØÜ�O•ÍãùÀÇ!%MÀÏ}€D™9 œÇ¤º“ø¤cfÿ¹züÇüçšûH½}¬àSø¶H¡Õ >òëÅ4To@ aÉæàhp¿TÿÓû×ÊÔs\ˆðø³Ð¬iz,Tè}øÉ—ðª3Ù‚<ÏçFiT@ zü»q1e?n“òXG©€S+�‡Z*Ð3Û} ðXþGï@=5“V,Å, ÚL³¬å³|7_”]¥AÓƒªAcpcŸkö5ñõ­òaßçr?㳞ÆÂ|Ï(aÊ´¾„K=PñSõŸ0÷‰1p?â¤u(�($c=€Hd_Ä·/ð®)Í¢4›yÝç©ÉR@¿Ào­@r>Spž3µÃ0ä…àrHWúí*¨oãw’gÔkί×ôy=&ázb |Úˆ»�.ª>»ëvÐçZy·£….ûú÷Üù/Eš®¿ŽÀþXÀ÷홿û£ßô¨ØÐúyf°14Žm©ùŸkbïS‘ÈÇe�ÿB`òOZßóQ¡oÌ”à�oþ+½»/eÒtöŸ­¾éýF½¥€~ªúž@"� 6 ÉÎK^³’yñ,4”+ ¼º†Üz¦à¬¶/r¦ ÓòR”JSYŸÊ˜uàMJ`b B§�ÇLÿ�øü­¿ü¥ØÕ¿çž~òIq!Ïé›õŒ€ ]½ß)¤ Ã2fðSõæ+R¡™Ýl|²ãŽoú�ïõúi�ßÍ ¾ôy:õSÇ0êù/Ö†åÚ=,3ª©þ{ößqý%³ôzîs‘ß™ÀÎìý¬žoO28�&Àߊω«3�×g ®jÐ’4Î €Ò÷d¿]ª™ú¹nÔ�‹>L¿ùö›¾�ª=éD@7RbÂïXãüìs�ÿà_ÿµ(´jmEaóe#·š{.@œêÓݱÀpÌA=ý3 öŒ÷\÷™Øû\q¾Ò=Nä9({ü†ºßMåzˆKÏ~)`Ÿ©^>ϵò¹T™D�Õ¼€é¥¿BÚ«’$� =7 ~*{" èDÀÉÂsr�D&œŒË˜¿Õ™‚gÒŒÎXù÷“Ÿ›?ÿy±Ž_å¦k“•»¯*UûF%�©&€X{/�î ÌÛÚà·Ë�?Ž%¯ù÷Ðþ�ã´q÷•nÿ«¯®¶Ø l[€4‰¯¥5¼`ލ°»÷—šÎ¶^@.;'Ь[@üK�€è?øˆpÔyÕÿ\à?—L?α\æ@Èb Nþiy¦ È'ÎÔã% “–4\âLÁ�ÀŠC€n =×Ëe×,¼_Í Ï·ÛüúMŸ?ç8]O5 ú¿P�ýL ßùÓŸŠÓ?ÿ¹XQ�ø±¨¶ôr @~Âv×y�e÷zäx¦0&Çø§Ç=åy(�ô³‚OÙôdø\‡&r¡º°'ÿL ?Pôú¥ìËðä ç ñðEZg<=>¡Ldž¢âËÅ0á×ñ™‚êé/þ;:`äž6ÿlø‹l4R¹ßàÏ]ê’Úž„P'¨¦š.ÔÀiìG³Ÿi%^¡Ð{�;. / |ïfÖüB z_ÀÒÝ/š=zM…«_YÅ–iŒýK¸T½ )†ÌàcøÕYÔÅœ,‡}ÄwÕc}Æù¶„ºO¯¯kž•ñ=y³œxN¶Ó3÷ß}·˜Õ„g ÊMÁÐ9]è˜:H³@«`nú B&'=AI|ŒÝÔŸ†ÞmNšÔ8¿^óé7}Z—Qû§š.=#�{A–y|  p–ǺÌh0 #� àT�]3Æ�É@5Ô«¦ª€!Ôÿ À/‹?%#3ÏdzЛ3�w) Go¯ÞÿXÀg¢�/"�ÖÄÃ]wz¦à ÎäS)2álJ>üÀp¯¯ì®Hiˆq!ò™‚h |&ä±%‘l|q(5§%ƒŒ|&ÅLb�§Š*_€À \}ÄSo§ÖdËã@„1á0XʪU>ñLÝMžò0ºV+¿�j»WWÿ€NиV~ ?7¹¦Lz}À/Ë›x>õ´ ÷¢ê�@ïÎGšìdôðë:òÍëË3Évz¦à༪ÎÊÜTY«ež±ºRijO™Ò:µõùBZ“•*Ê;Š35t¸v¦ æüù°øýÚõó÷Û“÷šÏ êáòGáN¼&À²a·j ¡:+!.ààÛ6jó²ﺷ®†yGcíØ«¯üÐb‰+€Äæ`Rún å†U^1Ë_º|2S9¾~Õ+Ât‹z3q·$5{Q _�esŸž^6Æùø‡2ªLÈ@Ï…ÛÍ™‚Èj[u[W}ïÊ2ég êóèsMºúLA>µæg ^ŠæôOD+>SðÑ£b]_ò3¹Î�Võ ãF]!°I1GicHýU§ÁÓoÛÒ+Ú�ëÅ,„Óû‡¥!ËO�Ï¿ë2tÀ€ÄªBʼn|OH Aºßʈ9èù'@h·Þ^clfýÃåZ÷óÏ‹¬øœÉ¹}³²,jb¦à³O�z6Œós€ê� Bþ�§È¥Ó3Mœ)øPé! Mšr8È®¾¸œ¦3u=G½dâyåòïÅ,=¾ÔœÌ‘ˆöL�>I­j^�?'ø&n…õuþÞókÇ£ÌnÌ òé¦ÌQÇ�(È_P'ÂÚ“^€ë ?%|Mœ}„?Í4PþF‹°‡Fûï>Vá¡ à*]Xn'†r#=édÑ& W~”–Ìèñ?¶?Ásêé—4AÉ©½Œ÷Ñ\NééE €àøIPeÏÀø<¾èù©O'g ¾T=ï(�]•9+0ï¼ÿ~q¦…Vœ)¸&ðs²[‰ihÐb<7š‰@Ï^ † û²�•Þg 21È�$æ9’:ORÏšT{¬½A¼øü©¿•tiÐlìYÌêYN4n=¦·HÜ!€ÇN¸]5ü²ÛþžÆ¹,:R¸�´iÀ¤…$ ð�™÷5ñpD¡ûŸ™÷¿�MºÔê~€Æý±®_@‰¥ËréYç4É6#`¢-ȨI™Í‚€ÊA^Ýœ)ÈsðÕdOòä ÓYþP½þ¬4mz¦ ê~&b8’eAÒ‰êð’/ "¸5 ø¤È|@Ú8yç�Z'ï>�Ó¯FÐkúf2§ðTÆãT¯�ÔeA`fÿžf­/4Þ<Ð1Ö š”šÕ¤TôD*à“Ú‘¿¥Fø…ì·"€mÇK5ÂÝC;°ÖØœ8—�x|—ÐÑ«—F+×&‚¸[,êàX……KDü‰Õs°NŸ‰4Ôì��Ã7.qegÔ£F¯•ªã_÷üýž)È_˜í¨Ÿ×Ø^2æ(ñ®ÏqIJšPï‚a…�ŒËü&ï "°þéYSM¨’+óš¾Y¯k©* )t ï‰Æž,ŠQ„ÎoOñ¾SÃûB=Ð7ê�v† Ð ÈÈø±&´„·ËöÚ 5\Æé •C�Ï=â¸Sðø¥KÃp*�Y�Ù}Æûh|Ûw¯ŸÖ+ éâ'†4*Ç{z:SP°§ž|E$°)·§3õNg *�8SPä‹A¶ž àºS“Çí¶Gï7}§õE¼©&^“IkZ±öÎþÏñV{œ^«�€GÚ0#m°n[=ìcõú_¨×"ðR ¿4µ«+B®®¯|¥ŸÆ¨4ªqªô,vBXÆæ„•äп €Sðކ_ç ž È9Õf @þSkh04n�¼¡­ª±AFËVgô=5ª3íøcÏ’Úc‘Ä�ÔÿxW >z^I†ED4d FoIÓK­.Cåg²�ÉðJFeTÀo  1Þø¶nХÀ©´ôúsôúÊÇšùó|=å�!5ÿ÷“ª¯g òŒ,»f8ÂNCž´嚉@­^¸rÉ%Ìr -DÏ_/ø’ |8´Å ç9±&?_+‹žL.·^5‚nÓõTÙN4Õ€ìxÙ,=å`üËêUøÔ´¥¹ްöøyI�xA�—=ðô¬1Q§ôDl¶)�•|e­ -œ¨ lh;1ÑPL ¸>®ê„%?Lh *ÒÀ„ø†¯òã¡â\Á7¢÷üã¹ À†ˆèý=yIÃ>S9¹·OÏ$¼Êæ@îYJ8nõéä±¦Šª^a ˜U¦�Ç?ØÊ©^Yj+‹e™ÐLú Í ÜѾ�]Çä pã(é-é‘!ˆY–ܲV‚ ÷07=u•{€n¿,!A(ÊÃóVíg~zSê�ßi#“þ(/zê-âjÔ½Ì:@òú™‚&"Õ/†:‰›’À•8L›W•æ~/Æí¦ÛôNç2»Mït£t§ŠªÉKb€õâÖŸ?Ðn¶uMø±t•c¼7¥vžhNàc©¢ÏeYã~ª½®ò—F>Jò[þ7oEqûéd_jìÊßq+,ˆAa¡þëÚ½½Á™ yÌ+€UZiÑ:"MÙ {kÖUÒ¸ 6A>z–q;S�£ØØÆŒŒ¬ò§Àw�ÑÞrbhþ&Fg¢  Aû…¤$À 3d°$à1Îd,@¾'{G�oQ/ñÀÚˆô˜ Vg]ãÔui krWEŒgûˆX^ˆv˜càZ½_Îd›w”OŒíÉðËB(1I( Tö5Чuq�útC.™úO˜Ë�¡€ê]9ù§º‡‘ q¦à9-.RŽ3™üCf.G…Ù�k.‚¼=4‹—§óu¿é�Ï$¹GùKêDؤI5ÀoÃ=š36޲Òu^F, Hþ÷5lxS³ÕwYè"XT8…Œý�zÖÜ lI»xª Ç'šoØUXÌ)(oµÞX»¿¬t,Hb¨pV6j×£„—«8x—g” ÆåLÁcäÃ÷MÔ.in†³ xGù{¼ ê'Žxe�6Œ4€I{î;áìYgÓ B‰Ø Cà„Ü �ÿ¡æÞðß’Ý ¬êÓ½xÌ(Þ™Ò‰îIXÓ'1íÄò•}¤¼èòǸ_ÀŸž–4@/÷&MƒXTÏÆy‚ªo,HRý0ñK5/0”3%«sºøèQ±ª“…Ò3SYø=¥ï,½_åwßKß½ÃZ¹NßmºVyŽÛ½‰"¿�n…˜6zy_{uY€_@^0øTµ(0@À‘Þ}Mjÿèøß×J·ûL*,ÆïºO<€s¦<˜X°™XäóÝ™FoöR ý@à †È€z�î z|ã?1—!p�Ë™‚ç}ãLA­ÖŒ“…Jù=åî� é0QÐï{A pcÊó‚VÖ7¥¾¿¡‰¨mõîœf³¢žú®üoéëÀ÷ôÙð�À¿©ž�ÃDø¶Í`ÂÀ¤›qø: ‚bKn¨ú DlÛ¥bŒqv^‘›¼†pÜû‹�Ø\„öŸ9U7¾nJ¬™Æ™‚Ë:S{‡35lŠ0V=ý®ìú½¥n·¢"-†gìÆ8�Ót›ÞéÆÑ½UÀ àeÒ¨RMÀ/fSàÿ©âKö±þÔóH@Gõ uÿ�–ª2î_cæ_ V¶]#]#PŸ)xÁ>�ÌËŠÙ'À˜T†EHãt¦ +4ïkùuœ)(Ò彨ú=¥.~ÛQÉpÚÊ�j ±43443ú²z¾ûš´»/"XÔP�zÔÿ ©ókšð»#2ü1L(]ü”°½Å˜™sÎ䯶¥ö¨×=!øý]Iãr¦àŒ&I9åˆ^ŸÍNUà7à›¹ûÐ{t·+·ê0©fª  ÕKá%Òàx‰ŒÑÃÕ5ÇV¨¡ˆ%Ý7èéñ?Z@«3?_˜DÍæû~4d¥…‰}ªÓX�)(™°c©|~/!'…5sG!¿i,sª€ÆÒ‰IãY€ `ZÆø)èQ÷![„‡@Âò3ù¾Oöøg«1ÌÕÄŸëkWq»1�ž½LÔ¸V~ ?÷¸¦Lõ¶�cÅô|6±*PuÉ™‚*·q¦ ê™>ÕÒp×Ûnú> ë¶gvú~Ó9×kÜ©"€^n@ X@Ö4ùµ©qûºÈ`O 2`h›(Ç–X“UŸ)¨3$KNT~¢1þ¡dz®E>{š9‘eò1ÖMH¾/DL>S0ä¨ëìÍüM^Çȃ'�¦‚zºÓáB j°º.{G°H¯©{ì à{>–±¾-ážðúLÁ«á ' ±*’áÆ¡ä÷D“{»|ë—ÿT³üǺ&rEf)öBö­RÎh]¼¿]6®f—{UÆ÷{íÑ�g§éóò¸vÇâ¼ÆÕ� èW¸¼0,C€À¯»¬FÊYö9@g’�k¬'üèõQÿ!�úLÁÏ”ìw¥eI7ˆ!•œJÐû=q¿6ƒ‘ÀÄ�À&õ;¬7M�Ÿ @´¾Ðû«Æz~ŽÛ—e6Q_øÎO-?dÀ˜¾>SP“§Ì+HNbÒ� ½>£ØmÈ&ÿY)›§0±‡@.¹¶/™Ê®Éb:í}#r“Ÿôýö’§Ó¢.Mª8òà‰!^†_ÈMH-òWƒ W°;/zu�W/Õx Hµ]`ó�îÑL @õ™‚W*ol+.Áy"#,İ ùaƒ$†± Ùu Qˆ\ñ³ 0îËoðáÚ7ëŸ�H`b }Ú^‰ Uº¾-½_6öU�ÿ…„>Õø•�?œÀËaœœ€K�U±úLAÉM½<66‰HwÉSßYã_ƒc•_I²¾M<†WÛ²Èú¾ÀSÛ€ó÷ß)¡ôšÎÏ8ÎîDÀM Å”m¨+ÿÛZ¤ò»ùÔÛïŠë`Qþ•—ÃDOµ2pC`®j�¬Ï”æ„ê/¹!¿ÔÄrg@å¶â2"ðD–õo‹ØSÁ&+÷úUnÊ2«ÚéR·‚Ú5ßÇE`ð�ÀϪÀymb1Ï V­I½å_mØçW‚¾£=,âOD¶EO•î¹,Kë3% ‘ZÁœl;9 d†U’; CØáîËÆ¿2e$`Í€÷dKV�öäY±‘G/éÝ^z-7¯Ç(¯ot*à 5R Ùø7dù&³ÕˆÏõuðoéþ]­¨[“°¢FË› ^¨§;•eÌ~ê3—¯Æþ’Iøy7Œøù$ÈDàs�þ®`Y.Ö Çp¸|bÃo ’Gmz“ÀT@? ƒ´±"P_–åËj,Àf3Ï‘2$°/ËÖ_)iNtŸð ùIÃø6Î €$h¸ «Ï¬n¨�À�ìSÉj]²Ú”]“åpPd–AJä–¿ïn{f§V:ê<.f*  WáÒ°•‘lÜ!¹€šOW�À™´þJŒ8€œÌê7ï÷¿J$õ´L®â¡×g Z:×]澓ŒVe¿'-àCYþDŽ¿5�qÔL$ןj¼¯¦Šñȃ“�øÀŠÀU�}Y×'jˆqr�ÌçÁð랺&¡áz¼QåF÷!‰úLÁÖ``qsÛ’)ÿ7x¬¯.hc̤À·6€œ²N²ÎÃ:íÙûM×i9IUGî�*èWšnPÌÜ×g¿‡ZÇþ†H€}4L€Ï¹ýôæôäþÄeÃÍëS\Šª4œü[Ÿ)Øú 1db]ǧˆ°ÇÆâ«THÉ mënþî¸Õ§ÝO4ô+ì<½<4Ÿ}+Rë—l†ênÂÆ‰µj”ñÉ‹Æ ¨ÑÆ_.Ä"?„PŸ)X=ûŸ7N’…¶ü—²+²ü=Ç·1ùçÞ·ÓÉ@¿g¿ß¼Üf×½¦k–ß8†Oø¥Ü”0ÉÿšM rÏ_;þă^¿=;ù~ Qði M¡>SPM ¹u` æRøïÀg’ãº@¿!{G–Õ—>·!Õ&eÓM�?’(GH©_h—ÞÀD 3ÐŒAiÂÑŒöU%^�]Ï}´Ç�dÿm?S�¥¿íäÂ*�°%Ë×€‡:m(ÀŸÏ@¶�”‘ÇéT#pºNã—�2ÎÄ/Á/â&%ërpéÑùÌÇ’_ÀÜ0ôh¥ÚߘÐMz/z~z1îíÄ5s;'þLA-�æ(oMŠhBCM`S#"þ1Öð«—FŽ€Òòµ›&kç'ÏÆºÉXSÞh¼÷þv)Ã=±Ë³ëðveú~¯éœ~Ü© €›4/ N ,i(ª­z•¡×£_äÀPÜ5T ²#à,MÁ™‚~ˆ Yï¯çæ$ó`¦à²RrIij?x¢rù'¦·ü{ÒÈw�Ÿû©ß$§íïÍŒøÉÍÐÝV£Ótq˜¥€Ï)Á "&¹²~¯Q4áÜG-eÑ$À0€­Ã“z¦ &Žù⨯8í—k@ÏUe ÆÀ/�òüd�M5�«;�ÿ2¬ÚUt½Tþ÷E2ñìò»çO]—™—à÷^k¯$3qà—øênÆ�HYÛeI0'ǧ¿¬H¸ Âà80µÌ*0†Ý—0ig ÈÌ™p`ŸïJ¶«zl2ðun‡ÕVzy¦qI3q€àz}±Ý¦ ð Ì º0'oësT€›Š¨ÑaïÓëÇ·o«ßèÝ8'âLAH ƒk‹êNï�… ç*æõ_îpÉ�çF`4¯”ÉÙ³ö–éõÄí¯ v ²G`CysXȺdÌð"Ÿ   O’sþÞóëN5§ë4>e�»™(ð –P)�lUø¾Îx,ûD§¿T£¶aé+6€ø"µÈ8ÅæBcU–ó)pÜÏl€[Ï~”Ïàæž�ž©‘ÆavËžþLqXÁG<>§2‡Òëê@²f.à;YÎaäÄ û’-ë.ò­Âÿ°Û uœ43À íU}ä…tÛÒø”Ë¿sJðº¨ÿ(t(Ê,kýù¯&þÈŒÃñØq>€î¡ �jñ Î ÂQy”�þ$ù^ÎQd,!ŽsFá ƒ«8 0;Ì.‘ñ~€OÏ ´ëý]i‘…VHƒO.2IDATž�2b2På´#“ªüãuïÅx.€ÿ`²ñH` 6ZG>à:}—ÍÊtœN{önã7+wÂ'‚F%(^4–ÞkC›‚ÖeY‰F¦Ñ­ªaojH€–p 3O5VŽcÁtŸ]‚�±kÅ�k¯g Æ_Œ @žsðЃ5L8b€¸ƒ—0À�ÛÌ’†{¾ÙØŸ¼Ïù^…¼ú%Œ\ MàHrBˆ/ä߃aÀœÊ±òƒ$â5vu æª1UI¦šÌÔݾ±<Z“Xñ)P�zI oC ðoÊÏppå SŒ‘®ÂâðùÑ,DÀÿ Do �DMÏT|È#µâB\£ y‘‡@Ñ0º�¨a­,‰‰@éý±N×ȸôPžËÀņñuYµ:’œ¤XæTˆ“Ë9Ò¶ø!wò‚øÀ‰A�ð²,C kŠÈ"ປ2·Sòè6~‹GÙ­©&€�I•†­ÅL?=ÿº€ÿÍÜ—»¬FÆß`³ŠïL�(þi ôX4&l�€®ç,å+Ýfg ^{å øÑìRÞ¥À ’º–‹ü¹Æ(NÌøsKê„…˜àr�Ò‘'n;S–�eY¼Ãé>gGyde ÓX¤:0ÈVáU À$l® @Ã2&„a•7ˆr¦’z}N=€Ø™×�Æüú;°ÙYý%ØÝçÏ‹YýYÈÃ/¢÷ŸÕ"!z´3ýK[{é•�týLŸþø¯€˜PXÀ°„5\@ÚôLÁü ' K5üä3«úN÷¿,·ô.Ãq¾Á¯ú¿ÒüöãV™2OŠEB§²g"æB.Ui:c –¯üoÀÿšäh°À»Ä�, …n̵vÐAÂnãw�åТL%ô-½DGõ–¶?{ü¸Ø•�ûòËâ\Üÿê«b]÷þù½{źÚ}‹…þLóg?úQq €¬ @Ew�=ªò§ÿlw¦ ÀikÊ8±ô`‘7åaU/öð7€Ofį²Ü#.j?ãÿ<÷mªOž¹!^YVh+º è”iÖlœbQЪž÷m‘޺ʈÞ_® Àà‡Li7å§,ÂM•1È|§Šº|ßc¿©öûêñ_|ýuñäËmÿP=ÿ‚€ÿPöTÀ¼zþŒÙ}¬\“¦ÀRÕy}!8¿¿XVãgÂKýiôBLDÔ@¬ „&Hh¤+&âT,îf?Ê Ó€žÒA˜N$eˆáFŒì‡¼Lh&êU–ª¿ê†rOÝ,ËÆ}…›dh(e=ó$�\3À.ÁÊë± þµYïíË„ì·KÆï9.Zü¸}t¿EVc{kª`R¦qîïî_ª§ò?ÿgñò�,Ž?ÿ¼˜),©w¿¯? ½”Ÿ†&÷XsŠÏ$ ³ûóê=9 `FC€ù/uoF�”޸ѣ£òhÌ ¨ò@+=S°×ç�RC„V™üûCÔ àb$›kn ~“ÄUŒ«ß �COƒ5ÙS}>á2´@£€”ù"cðS @̵ÁOXm^I`*ÀLýê±ZûšÅ?P�tößö7ßOþ­?ý©8}ï½bæÛoãTzs�&i€|Þ:VôVßSÍJýß—{�ú/» ͵7> –ÕŠ^Z 3új¹Ñû+/€Áp!zÎÖ�PyÐcÈ×þh÷C™€ßÖ Ï €x€‹±{uõú¯Ÿ¥t#•Ó·Kûzn¯…ð5€ÃBôÎî‰h9Á 9ûýâbM¾öýN‰¨Ûø¯UtŒ¦‚%ß­ð{Θÿï/vþõ_‹³?ÿ¹XVϱ]‡:_ö…2¾I;œuêÇê9·µ`è¹æÎäÎjå`|šXÒ 4‡Ô iذüiÙ�^?ýìGXj]/¯H-ˆj@vÖݺÌoœ ôzGß}òIÁa$¡HÞ>yÚŸºÝ–5­ñ'šÌÌ�¾œfñÝ©·~òÅÅ“¿ý­8Ò`V=?à_•è  w   ó5$€šO�³¦FÈɸhÿ�S…mŸÌ5M ¼f2�^,&ð ®2~$ôyÓã~«þƒ.ã†òchs.9óµeWÚÛs&f5_ƒtYt´ g2è™�á½pí÷íöàëvÕì6~»üÆáþÄ€_ …ÇØÿ@Ÿù¾ýë_‹§|P,J¥ä”^&ö¿{út€ßàgbêŽá†ÒÍÉÞ×xuG–ãDÕÿÇÄ•œë&7y¥g Æ¿â^�=¸+È…²±àǺ>’GøqmðÛf‚òý¸\ç:¹y_„ýÍgŸgšÀ]ÕªÍ-ݦ½0?ÀÄ.þÔŽ ºcWäÄì–ÚÆ§!Ëži<¿ÿôiq(»¬á€AÏØ?dàÃÁYŒÂØŸq-àç> ²ª†6/ËÿÎ'Bf䟪ñAÀ‰4aÖ0*Ÿ«)ý�{½xÊgj™”òÕ3†…TO ÷°;ª>ya þNò&¾ã%.95l™oÛ÷C^U¦”ß™&\�Þ|³˜“p* ŽÏƒhs€ž^Hm:'@¶.ÿ6jE~QUmaa¨äü‹oXüÊ”^¸#û†, }.‹Ð|âKãáß�¥¡q”؉ìWò¿TƒeK+ÄðšÑ=TÚôLÁQ¼¹³€b2l•ðîùñcÒ¸c—{øÓ<ßa©{•ºñK-â3 ât ¶Fâž3=Ãó-ú7çE‘ó,â‚PýñcãK�®=h‘å­¹5QÐí[é†0"4^5ð˜I– §ˆ 0\@žÞ³?î©r€( …‡¾”]áZi˜Ì €´©á:æTTܨ[¡�?êRÖ¿VžÍVy†I ÀaΛ¸ƒÿêêU\;Ž]DZ›†Ëø9'àP`,4D‚^â ÕÐÚtóÞHŸ`5 ˜×Äë郱ê�¥Ç|¡aó–IÀ.D™„\ž]‡»>ÍÜnã7Ëg”áSM ¶l|¼xVìÑ0±@À–kÀ‹OSEýÈy<âÓ0èeÔ3±D•aÇŠÑÈ£WVœÜSº¦e*Ÿø4˜'hsÝ å Zn\,àÇ¢¨náÏótš4¼*ŒûÎ7u³pÎE`ß©À$€òÇ©«*Ù°U™õbx2&MOõÙõè�wŠÉ›÷Äâ¬E‘/$l-àü\äb÷Rnžf�yåyßÔõT@¯/‚½üóš8š“½Ô<Çò¹�Ðs6†9TÇq<1Íξè}‡]„,æÜ€Wýœn$†pʈ±ªâÖ4‹Ÿ$­ôš˜[\ù…�ðT¿>.Ã}î¥ñ쿊qõ›†¥þ4~î%m&4 …Å’`E�øÖЖT�Я+5]ñy2æ5p ù†]œP'&ÐÛÆ0De"ë*ãös4�©$€ª—Ú.Œ—>/5rEÿ¸¤å ­ý?Ñ÷eÔv„ä¾  c ‹Ÿ†}"àªáq~[}çd1ѸÕÐÙM€VY©¡÷¯:S°*nš®l �åÒèqUÇÆwg¤z4 q¸ÆM�ãT¹„5³ä#ù@:ôÖ&Žg— G®ó�B+ªWŠüš4­Nêg.`_Ài±;RéÑèèý?À7 îAkÔÅä‘ÖkœýSEÝ ßñÍô úf¿!ðþð‡Å�–jÇK€Dz‹€Ÿ†‹A=÷õ‘4Ë€O¥9Ì¿ýv±ôÖ[y¡f %¹œ'¸®º«† !À"ãƒ=¢÷SœØ# FëzE¤.~ Yˆ%†jø4~ï: PS7, ÄP@šºWw®ÿ–uŽ@ûqí熯íF9Z.õàÉ'Ëx‘éiéGëYQXhŠš€\dâçŠz’gf‚X¤ÐûŸI `èÄÎÃüîýC*« äí#+®é%uîu8Ó4Óº1UЫŒxÑØeioˆŽüãbOî‘`V–#À;²Ò¸ç§×ß×wç ¥¹÷Ûßë¿øE±ªÕ€ó€Yñî¨Q¾¥û[Z ÄbþâÊrÁVž) ¤„áDº”MÞ4ï> •`¼ºY‚?.ˆœ\ã¯2ǵ%žývËòü” É`mÊ^úDñ‘'vM×+ºÇø}^vV2ö†)'}Í-óøü� –óÝó§à·R€úÚ³(àV€™=•!alÞÙÔ,ò¡¶òîüú×ј/µ/àX;Ï4¡4§^…=÷4_fžÙ È*´S©�—ßû^±ü³Ÿwß}·X×0b™}4Z廪|9Oð¾`Q…¾O]Mø -ÏTÚ€ `Âèº[CŠÐTnhªó5@:S—ãëV®ãÚ%.`ç[úC¿P½ùÄùÚ¦¤òyxºè­•Žs ½É(ÈVà¿”�ƒ TÕ=´�&e0³¯x:½±¸£< öÜíTÃr{é4>¢˜s+  êåð’QÙWÜšI¾ø/ÿ¥x!U~W+˵ðHî…&gEéBÚ›ŽÔ»Ï«çßTÏ¿ñÓŸë"‚õö‹=ù‘ï²âlˆÖ•v^« EÇg ª,@\R@UÕ[†‘ÖgÌX]¨zYR)�)NGÆñR?ðËòœ¬Ï§ 4¨8Áq(ÄåÚ%LàÕ =v\žKS:–Æt¦úÎ"O¬d>'·©F ¼ €—"‹uÕá®®]® Û�Ë;2È©Âm2SAƒzy¨ƒ|6Z“ú@Úùw´¿_þM ^À¨Ò3ù¼È‚ž~I ßøÕ¯Š ¹,A5øÉ�º1©µ¢|± ëöLÁU­ðc€4þP¡Œ˜üC PÝ “‚?÷›™<®¯¾üŸg],{l8¡âc—Çú—Q–Ci�F ‹DhJ­e–‰½rr�ãÖ[iÀŽòaáÕ¡Ê`^�¯ ??ù{Юùþ4iSAz×1¼`,ßïïÈÌB¯h2oSŸ–v5,ØßÚŠ�gRQQñ™è“]PÜe­D[Ä/�Óó»÷'¿ø´‡«¸ ÛË™‚ý< ŸK•ºú“Oi$áW� W½‚ˆp¢p[ì4‰Ë"*ÀGeñ Ëê­™ÜDµ?–Ü8”ã¼Y¨ƒÚÃÊ’A³šGý—�¯"® ®È€íÚçš�a“U+�’ÙUžq|¸òd.€ZLv­0Iè/Èê6™‰&€n_V³øÇ¥7¼ñ°´tI_’&°¬M>X€ù=i±4&\4…SÍKõ?—]PÚ{œ,ÔË™‚€¬G³îîùžø¨ú5ÀO¾äÐ :š�ÁuÁ--àeÌΈÉoMå0÷á¿dì�€ˆЙùgh�Ü8tU@çô`NY"Ï0rc2Taôþhv oh¼7åÍ׆:*‹š¬Ù`R‘:œ*ÿxÇå;Šw_–ã÷wUè«_·‡øz4�‰# ß/c�.y»'p/� È×tw]~4$â†Uc£áøÚ�ˆëc5¶}Ex)À³ÁhAGŒq¦à±&{:S°×‡Ucg΂]sL¨é!( €Û•Ÿ>œïø>¦«SÙè>äÊÑà'Xõè1ë0U½Èò]‘&+!SCþÐ$_3*4†,æÂ… OU›°±�Í™òǺLJàynÖl0OššÂü.q§ÝLðBº}1�Æw<ƒØd@™„14HVqmHkK#ã@Ñ].òBë öÊEEKrßø{=S°ì]d[7â«^œq)@h6òJõ׳äàÄÑãÊ PèÙ^›µ/KX@‰z½ºÊY�ÖTàè©üB6ćdYü³¨4¬�ÄBÔiQåò�K?¯ah7ÈJáÞßÁ…Þp®òÑ öä¦úT!ÀO½¬®9H„ðžÎTºfuÞŸã¢gWÃGà9NÔëÑðùCQ€Ã¤Ü…qvê9Ÿ |÷þ.ÇMßÄâÞÞ²r¼n\Ê3!Ì©^1_!Y²œ÷L‹§Î©{I”oº ®iÈwEÀ?Òd+Ùv5ˆP ÞÝõüojòu�½ºÇ— Ây~öo\h¸¶¥2Øû¤'9¤š@ª š\vê"ƒI3CݶۑÇO¯ý 3èM uîÆõBcüšè;•Ê9¯žðw}¦ @Ⱦ>uUž)ØLª&@"?½9ßâé­™UDôì�‰Å4ºGïÏ&>ÛÑØýÌäÕ‰IåÕI|ÇIÓágÎ�:ñ ñ©Wõ¡§NI ×x^žuMÏ÷Mº¾%•Ÿ±>ï‹ç]Ð5à_Ð9ì…u&`eóÏÅl âø6Î@{˜Ñpí!?õÎ뜆¥í�ðI0SIƒPƒäô ´´ ãþ¨‡Ò1žŽoÝ©4 @(åðÉŽÅ:ŒåÇÕ ´˜ÎTh"Ì#õâ;šÙúða±¦ëûZtµ*ì< ]Bc8Æ5ª¿t¡@êº$ò`ž€/ |Î5ØqcUqÒ0%›h3U`€ú�T囆Ñ0|L\ÓÛª"©uCĤé=û¹ÇÛŠ,Ÿ×X|Ä™‚«êé½h´4ÖkFeaü*›ž?Tàq݈CL®Q÷Y×àü4ñÆÂ¨ž˜�M+�@ÏÂWƒC=ûc�vIêþœ&ýfÑÂÔ³CÊÈ-LùÂÏéNÈYaâBŠ€^éN•îXn�O)C4$¿k •ìš|¹ž$3U0JÁ{(À,rXU°Ù¢šÞNÎT‹Šž»q¦ "§ A K•!ÜßóéÙQ›cû¬­�몿Ƹ‹ãBc ~WºÂ}M#Ð & ÏD”_#�—9v\®k"vQ_ .[…‘D`ò�9©ý¡Q(Í¡4äYº÷Ç5øyç“&;=î5s+  Ó—ÖiàgŽ [’K˶Ÿ§FŽXüL¨êߊ;"6 AzÐÂvëUɾÐ0àBãy“0{¶dQù=€k¢ŽCI åÃ×40Œ{ky©;Iò‹‡É~¦‚:} �ÆËdÔö’|±¬-ßø9Sp_kÕ»:SPšÃBv¦ ù2KŸž)ÈçÁ0¥cùcQŽâ6 $ ÷p¨þ±}YDÕ˜ lûtÃ�°miœ|9ñ| .�Äâgžä®Üu¹üÃŒ@Ë-ì àsŸÙ† ÈM�-ù#€Ï½†Uº í(ôf!H‘AÄ-ålà+ÉÔ˜© €Q¿ À²€g >zTìj}9‡ŠÎŠ::SP ï’3÷»bCg ÞÑöc÷@l«}K÷9SpKãÒ]5l›8<ƒÞP…•P­œ¦[ªþrYÜÂ…ŒûcìOœ13Ô˜ ¸¬ X<”å™¸ÇØÐÇú ¹l&" —tüSð‘ät ³öäé}pǸa}J �$C³8æ] /DÀ³²3øøS“_§÷&É_@ÅÛÐÝÒ¤g ¾,Ï,´¸“3 �ùç?/îùLAÕ sVÕ9SðžÀßêLAÆóñÍ_`O @]Y|GgÜ¿ÀØ_=%÷{yÎnå’ÇG²¶4>`æF%q  ƒä¾¥kfîC¾rƒÎ1â±–A®ó£G?–œôÿâÑ£øk0†U…ˆ8>ëA”ä%‹!~ ½$�cýH{[Qº;z±Yˆ´ä_ZÒXfv ›dcÙOò3ŒEÝi¶q¦à?ýSñ\=ÉKí 8Ô²`V™]hFºq¦ z§Sû@ªÁÝUϿə‚ò¯ªs4™gè9UgSaš™ž×²VÀQy¦ ÒÄØŸ†+cÕbàx3z~ÆÉ4êQJ¥Áå=<�OŸr7T7@Î5D€?€N:ùcY³Ü˜ï�›‚“%ÄñO@:Ó‘ÉÁ]=óŽâpúЩöd,éK�˶6œJ."ߥ_þ²Øäh7æqô•„Ù~çoWÑ+ßD3ÑÀKéÄ :žËt¾Vi0陂 j€ó>SPjé‰ö p¦ “Jœ)¸ FV°äTg FÃüº^1Ä*>åyªa¯ˆâLA=s³3ŸÈ0ôn>n‹=_FïßX±÷ã7� ÈèÍi\X°øÐr0*¾{x®Ù“Àx~Y‹ ä�<ÓµÁ˜ºÊªab}ƒžò=Ÿy�B‚N${NwÖ ˆy†JçÈL‡¿.Ic»£S�ù_¿(«Yy.»Qè„z&šÆMæn4@¥ñp¦à¾TÒþk@ŸØq¦è3˜Š[u¦ é1±°G�Ÿ—µ¨±hÓ3i°ŠŸ±_ˆ†Îz/¥5A�ï  à¤\,~fçcrN.¡ døYáh€{LOÈÙ•ˆŸ^žøÀÄoùú.Æn\è‡ÞŸw0§s™ì2ÇÌ+"�3C½þ�ïÙä„(™ —Xí§ùïw�‚ß„ì{®KZæ¤ú'Ž4/½3Šx4Œ{»„£–rbM¾°ÄÏB}‰ÇÉBê±vµµ•3w5wÀaKrßøÛž)(U5œ?ÒXÐø—uLX–¹HÔ–F‘ÎÎÓ㣮ÓÃs�^ÝßßïÈÏu€î~âñѳËïçjår/½_uMž„c|ßn–?&@ŒÌÙäÃA(L®nH6ø'MG^”à›Ùx.ÅÁ¸.i“æŸHW!»A¸QO€*÷ªÀ÷Ig ~ñE±Å™‚úSqÊ™‚ ,Ku]èðLÁKõz³RiYü£–J¶M wiž!O'稺oôòòû3=<»ôèåƒ äòŒ¤ƒ==þôžãd.•Lãá·u¾ŽC¸ýá) n\Ëš´X€í0¿§MË©"§Oëá´v[Ýsœqrk¸�·AC¢!`hd\ûH±´ñ¹¡�8 8Sð@cü:SðåüGq®3g¥ B, Åĺvå]u¦àžÀ¡a«ÙÔ⯤4ÀÅ`wïkÀùË…Þ–ëÏs€õ>¬ž‹k÷înð~æôÚa¸¶¾o·*Žãæ®Ó¨z‘_•kPãZÖvIŸ†§òw^®q!»&„´¤™tSÀ ½A 5”HÃrCÄM*ñ¸¨~Œù_p¦ zþ �)ÈÁ€€^å*b‘ŸUmOÏ|¡±ÿã~=°Ažöð¬°ã“ù~ÏÎÓ“3NG­èÔ+zwQúqݳÍ\Ò§ÖñÚ…¥÷íwZU¹‘'~ q0©\-oÈ×2w˜ÁïøNO”ckðü€ëB¼i0SIéËlõ’n:ž¬MÞø¨› ~¶´r¦àsí#8Ñâ¡9õü€ŸI¶ƒË°4õÐäò} p0 àÜñ°A†²ù;²k=¼ÂÞVÜ ùWˆ/7fçK æºçÏâëv®Ó·r�G«8¾§j7ê„߆ûË—|‘¹Ý*pz\ç�K[“×Óf&†Ò0I/Á�É. Ó–çˆ[†�jÿéßÿ^<“]Ò$ àwïïž>à7øYøã3ç•–c±ØßΧE—‡hÄŒßÙµ L »a º<¶íòÏ4sZ±Æ©6LìaùÜGÏÞ陂B}l NÁo°k0àíòL0þªk‡ç®ªØ ûSj†ÝƒR_ŒËõuZ§ÔïxiØ´ù§Š&ùåÐç´roU»Ò–e/µsíDkû[íçù  ¤à£¬ðûLÁ#‘Û‚Õå_­q—ËrXß® Àåøv KÃ}m—z¤~®k3Y¸U@cíÄt¯“¼ˆÓ.?ƒhQà3÷8SPg jR�¡àèT}_IÕøgÒ8SpYûÛÙ`O†&k¿{߮땻”Ÿ>Sêç^§=§Óµ‹?ªxn|÷ ÷únô|´:«1–ÀTÀ í òéõ}B´€5©ïü;ÇU- Êë ‹}õòÇœ)¨ÍAô¬³ôð" ¯\èïêL»M´]s¦`§àwïϳ·{~ßtÏnyu›¿Óån§ùt/Ïš®§‚¦å…Ð ± :À#=Sð®Î¬ÛMÏd™¯€Î¡¢üѧýr¦àaÌøËºÇ7¸Ç·k­À=ÿ´Èp”ÏaBeº-»&€n%ÖAüNB�k 89> °r¦ U.K XÑ&Ÿ}YN JÏ$~lÏ-Çó)È ô4Ì~ƒ?¯G»GÌã·Ó¿]¼våú~§ùuÏùöꫜ^ë×*]M­¤3ä{4$@ P).6=Sp]ŸúØßŽ1èIç´¤7Àqspñ°µ¹Ý¨  ‹÷o¦ï"I×Qs “A„1' ¡�Ïô¹viN ÈM)àÇüùóôÚC;Ÿvé/}ö›ôwZÃMå]ÀMI¶Ç|il ºá9+®±ìäÖ¸ï{· À®‰À÷�gíÞn Ü È�4êWÞ¬>i8@ŸWåÀ'<6 ÉŸß'÷í¦š~_§åD&åOî²Ó8­üNß.]§ñZ•Žq˧]}Çñþ­ €q|«:Ѱݸ­²û\;ƒ?íýÉËi캧O�oRiUv}¯? Xþýå2¼Ô5 PÖí ²toîF•ƒß$àrÏéLv¯ÓúåñÛõì�æÛi<—ßo¹ƒÊ§ÓzOR¼šÆümÑxS@ôvÓê7�ïkÜÚÔ¨’@M’ʸ¤ª>„¹'¬?/—8¶¾N]üý×Ëõh–× ã5+Çá�–çø½ºÃ*§×úõ’®&€^¤6¢4n€v«ªÑê^Uü:ìvK &€!¾ÿ^ÁÙ,]³ð›~$—;(M ]};-¯]>ívõæýz)Ø0¥]—UK`Ì$PkcöB:©Ž{ªNâ§Ûøízv—ë|;�ït¹;¨|ò|óë!–s©²8ÄiìM­Œý+ª+XKàæ$0n€OÁöÇ5l:JFuÏáJÝ”;èrzÍÏéúíÙ-§Açç|swXåä嶸®lÏ-âýÖ8i¹Êdá�üC#u�S!‘‘Ûs£'æ{IÐh¼ã¦X ©Ðj°T:tÝv½i4çÓNè4^Ó‚:¼1¬rÚU§“z(m˜ nËí²ÉýqÒ€…•ºúÇëÆ€ðÚÔg D‡U€Û1õµ¬Úð8j© `Ð -… ç·>Œº¹çFYi.·�&�¦éÅ?¬rÚÕ­ßz(ý%mV夀Ûu»â‡zœ5 °&€¡6‰º°~%�G7¹›j p*”Ôo¡!@?wŽP“tCõºçsÏ0ÔÂo °ü9ü|7PÔµ,]î°Ê»VxrqÓõPþ:Ôy޶›Ú*mÀm>©Ýp½ã¤X)øÇ‚†ûJêÒ&Y€«sü÷�¸&‚”Æâ1ÇeÀà·k�…_Ê<{öìŠA}ù¿Ì9í�ŸÅª7™±-%zmï«Ù¾™´ÛÝOÓu7M‡¿]Úv÷;É#/³êš­Å­ gôk:éáÛÅiw¿U»IÛ.nÅ}Ú(ï3€îù©rÌO»=ÝÞÞþ˜6+?í×�‚ßí\·GkFF,¬†]k~Ý?ýÃþðÍÙÙÙÿ¾¾¾þÿ�žž.Ë¿$wQ„°)¨ÑÎ);È ¡é5"„˜;é Êi–G;ð6K7ìðA�H?uV;è'y³´‘i |æ¥Î±Rõ¢žªÇÇëŽvww·þøÇ?~£Œøç”*I@õ½‘ 7{�4œÞ3½ª¿$º$[÷ð‹ [NìŠüØÕÒåÞ’,ñüÚüo&ù|[ykSK` (¶×4T…ó§ÍDzG²‡™%Ì–x&wt£$€‘i„�…Šk¡ `k&÷èÄñ½ü98ÿÚ­%0( ¸­šÒv Øxü)à‰ëöí|pGjÆ�@*„dÁ¦=ºã™nÌÈ5øŸ¸& üµ©%Я V\·QíÑÖDPEi[ï·N}§@ €Õ‚1K"Ôļ…�öþ©–à4vûR�A-I€ö‡q;u�n@µ·5¤àvíôÎ wdf€‡·pÀE¨¸1÷ͺ™zcéùÝû;¾ÓØU”ÚÔè[n£°ívIÇdk"ðµIÂiœGß•ê7ƒ‘“åD ŸÃ@O¯fAôv­öçàMÏìØZÙ?{­Í–+ضœîíaY,–VY•™‘ZÇžß ?/HúÅSá0Ãå×q.àÞÌååe1©fFfRë~ê­¶5¹�ë6¼ =ãì¤>g þñsõ;š€w4î$ÝA#ªµ€ñlg•½­Œ×Ëš7¨| ðÔoIV…ù^íŽNUà0»EM£{A”„Ùú·&‚�ÂðƆð§@ÆoË|…ï9,½N¥çð4¬öß¼rÐìi¸Ã.Êê¤÷j"¸ùwt­„ùkW#ºÈÀoðä¾Ý<<�ï'p˜¯kw8¸fi°ÛôøqyGÇÅ\ÒêaÁ•0†ñ;P>h Zƒ7·ÄKÜ×þ2ËÚ‘€Vù)èñcÏK7¿§àš°ÌÈ  ìý \ƒ�Ï%.~_§÷Ò4ö+jmF$�üø zð§–pǯ5Kä†Ý‘@ò|¯{w~þÎ�; ?úÑ�–gggÎÎÎææçççÎÏÏç...f±R±NßȲ k\מ›‘Z{šóéé)¶½Ð»:ÛÞÞ>ÝÝÝ=U<ìYb!Þ�µy¯´:‡z8€8nÎŒ”xÁÙ£qíÞ�º…}ç�wVùË_n.//¯žœœ6'"˜‡ L £±„•?LM–ÄͺàÔ%àà þp÷ööŽõ.v���õþ €Y“®É°‰ám¤&‹dðîH y7€×zÅYø‡ø‡ûÿüÏÿü«ÕÕÕ·ÔæÕÃÌ«‘Í¢àt[çɵý�ºÒ0:�ZÇ“D¾ 9¤$ Ù7 áýáÖÖÖöãÇ�Ÿ½ÿþûO>þøã—ûûûGJœé ¿»š,‘rÇ�ü²s n ²‹¿ýíoðë_ÿúüNׄ7@/¿Óó ©áWx×F�µë4·9�äÝ ü‰¹„DÎñY�ž_€öÝwß}$ÿ¿OŸ>ýLñ÷•Ƥï÷ŸdÞšr‰ ðz€ÇñËÇM‡A‹‹‹÷¤þÿLð{5  €Ê ‘UM Qtäô~êü¶�€Þß‘æm¶¶ñ»ßýîLr^úóŸÿüå_ÿú×-isÖRöÅ_:z ýEÈÁÿH…\Pã©õóþÞõ�¤†4¿ÉÓ„@aø!™™»ëëëïþô§?]Õ¤î›þÿùù矟I ˜“ßm€¸ÍL­ 4“Lá£&€œõ­6¾èÙó÷Cnœ}È©NÚ¥¬”n¼O‘_tî¼ù曳¿ùÍovy§ï½÷Þ—}ôÑŒ&tS‚oF5 tùÚE”¿_¶]“uc°` @�)IÖîÑêû£�@üÆPM@÷fEËkkkïüìg?û_å>ðÿ�/¿ü’¯�€«ì¶ák&<ÉP“€¥2wd�ÕÝà·›j|ûŸüYšÆå+.iÕž1�d€üå„`�»æ65XUøŒæ¶uoFó_Hp­›¾ë2BM–TŸî¸�að[h�€È\+èSuò”$`[’¥ÍÎÍÍ-ˆ¾÷óŸÿü¿K¸‡&ðÙgŸ%Z@»ZÕ$ÐNBÜ5ô¹›’½?dêÿ$õöãVW€8*CÙhXÞ¥³®)�å‡ÿø�ÿø\á—|ðÁŸ~úi§Õ¬I SI5‰7jÈ«•�IÀË}¹W›1—¤—[WÙ$`Wá¡ Hxû¿øÅßØØ¸+‚øƒæšiU V“€܃;nÀ#¼Fj0^ëßÃ#öŸdÜzò^Ÿ¨ß縩!?ÂR—û\çÖé-€83ìëÐÄà†HMàR«>_÷Ã?L5 ¶uV©[“@*�.üãF)øí7ø¯­óïâë¨7(€ž›ü¾v<“€†¤%ؘŕ••ï—šÀ=ÍüAC– 73×Ù¨Þ@ÔLN-ÃÇ�\Yƒ?\õ2¯·2Çìíj¼}d7õI›É+Õ,ƒ^À.°¾æ>ñ˹€ø: û3²sKKK"…eî3' ÷Rš€F_F2çÝ­5�©º5N�ƒ¼Ajù½ªg©ÃÆD»Áo7%@ÎŒ?D !Ë… �moQK¾ù:ð¿hN`S�ô‰Ž»x´šºÖ8Õ6èýq tCiCsFµ;\ ˜pM¸~7àçÓ F½?sº'ìo,ʽÔ:�—Äùä“O¾�ÉÕþfU“@3ÉdáãFYõêËI“€N½sðµŸ)� €¸_Î ðhYŸ s þÛÝ»w7D"€Vsd›DMt w¢ ml-žqbnõû<€h”†ú§uà:µÖüœÄ… h¿Gh €î3˜eN@iõLh/—9�¯¿ù曪ÇäásÔ$P%©$l¢ yŽÚ;&0¸©ŽÁoàã:Œû)r4@Q¨×�9üºÏ І&°)£ëÿ[�Î ø9øÉS“À•*'ŠÒÆSù4C Lù�Šì¨˜A× €vb\nU|¿3»&ò%>–1¾ õÐÚß M@qÀ>Êßÿþ÷œ+p©S…šiDËMM¹DÊë‰"€&ÏP�‰yN>®Á�߆ø  ¾`ÊyG‰ ýèãÀê´Nà¿2C¨ëÿ'Ñ:aªšR‰–þ𡤠3 ¾µÞnåQ~„—‚¿Š ¬? ?%åë9�»J¿@9Z1ø’¼õu૯¿þºpœØS®<|M6·ÖÔpk_ýÍ54ÈS-€x&€ä)b¡�·¼§{¡ èëÀ¤¡­ÄhD}5¾H&ÞšaÔ@"ŒÚ{sð&ƒf$`ÐÄñd`Z«’,Ø".E`í‡Z1x‰&@@œ,”Æ/ý¹º_“@)˜©"€´W©huЈ$`ð箫“j¬`.€¸Ìp/5eÜдNM Ú0š€î]jNàëo¿ýöz¢4ƒWþš$‹©"€Wï¶ö�‹rR6 TÕ�ž_ç?Æ¢ î£`JÐ_s W^h*‚&p.�àÑEùœ@3B¸õ$0‘�7*Ã8™q¯_3Y´Až?Í‹ëf–ò p†hñ­8¯Ô-Óð×pì)¾§ø¸—ú™ò”&ð�ˆ/å³K¸Í­&�‰!Dm&G~_-5wXîçºt€"` ýHÇõµòeÁ†¦~¬¯ì$ZÓõŸJM %'ÉÝ[KC¼1PÚˆò·xS×£(󦞥U¾Ý>g nòMÓûžÃR×þ¼.ŸÞ—8&çE|ƒ? S0K†±D¡ ”ÿ;p©¯Ì ¸¨Vdp+I`¢Ào±vÇ_)ÈíÇÍm hü@:àI ·ëøPþ8L.ÿ uWs�Þ}÷ÝKÍ 0'Pˆø:Љ¹u$p« À ³“–QÇy]ÍägÀ:…Aïë*×ièýñ“&×·%û74Ýz -ijÊãR*»§ûú²Ç"‚VÀËܲÅB·šªbvs0àV™ÈAÌf"ÈÓpÏ&õ+Œ-Ä÷D&?)¿¬èúßZh91ÜM`ª  YCs£©Ýñ�€�Om dÀ�me7O¯k4�­|à<ÑDÌ <Öß“çÙ¾b’Wwn L5¼z—µoÜ$PEδ5…V�‚ÞÏæ0» Gx ¯ú/ M   "€zNAÈLT5¦«ÇÏßQ××@Oé\Õ µ#€´þ èZ„îó¯Òó:nü òSœË_ýêWšd¼üꫯ?yò¤ªç'Û4|ª5�‰!€Qƒ&mlµÿf%`ðç�Wê§6\§6 “I÷Þ�&p)M€¯+*ãR�jé<þÆ_Ë?µ$01À ¥aŒŒC�G¯¦×úç ëµü<��›†û]§® �øùÄ`ž‡¯K—%ÃXÚ[�ÑbN@ˆ¾PtÚëÛ?õ$0Q�6�Ú?¾´€­“ÇKŸú þª<É#Í'½NÕvIö!š€Ö œk’�k4�Ó$_*žV~ªI &€äÍÓàjÓ\�Ê']dØ*­ë8©‹ðçy: nª ¤áöS�ÒoMàá½{÷.v¹¿¿È×ýùÈwÏŸ?ÏÁoaL- ÔàW\»•€AL¦öãÚOx P®«ŒÁ/�FZk¤Í�óËïU„/+íÛ¤×:� M¢ "€T (5�…òmrjæn%¤�0}õ8h%“„]׈kÀ˜|�£ üiK\Ú=†ÞRMt©cÉ•&4�­­-k)ËØOü©!�[Iz�µ ¤ mWǵF@üÐ׆ŽË}Û<>á"“e�4ü}ùgø:à9_ øHš]O L%¸ðæ¦Á´{ó´›\\[HAn94 ã¾ïÉe1g bbNà@Fg\hÙð“&š€‹€ÒI£‰7U.€¶áYòçñ5õ±ŸzU‘qÒ¯ÍêO¼Ä¢X8•Ÿ9Žãx±'Ïž=CUÂpØÄ’ÀD@³—[‡O¦ ~»Íž¢ èf†{¶ÄiwU·~$;Çy‹‹‹ *ëRÐJð'‰$�‰ ˜Þ�"}ù¼Èa˜Q”9ŒçjWF·ÏmP‘Î~—ÑI^Ìðs"°†álØ ³ôiþøSK>¾ÆŸZ©K“G™àH1ÖŽÊ9�gÛÛÛf»®ÞÄ’ÀD€¥\»“#�ð©?‚ô'ñ/Á,Í=::*ÔGtâ¤j½Àát „s?Í?÷RK<ÇÇ%N³ÿКÀ�eçT§3ýgaìKXÈ €úL$ Ô 7—6Þdmz“€åh€æ¹p¿•%ÀÞÞ^hÎ× %Žó' ûžóæÀ§–x¶'žós^eÞ0Ï¢ü<8’{)B:a¡†O_¼x‘~_§$@_ Æzb°&½¡ÚܼR0¨vS[}·[òZæôU®óÄ­²�„ Þ¾a¹N�ÊY“ý©òg‚ð\÷çÞ{ï½ @ª ¤`"h€_ù�5 \âôé§ÈO¹MÆ9Wozª?Ú@µVW×ò˜¥‡¤÷,UcßLe•ú}¿—ür›ƒ“º{ÌŽ?·.ßÏè:æù¶ºv™ü9ò!?®qI[’šÀ}Ê”&p¬{—š8Ñý S¶JM Š\M&d t3äá›ãàÞ A»€èXãéíçÏ‹#Mª©å Ðþþâêj¡epaçÕðiô¹½©:»—™:c¸OXªPïVØqž�ºä��˜o€<4üÌ?à’Ÿ šÀÏ”†¯çº7óþûï_–š@ hûqík˜J(_/n,̰ê`hÐÇûûÅþÖV±«É´�o¾)Nvw ý™^�€–»³jÜ‹ÅÒ½{Åêo+wï+kkÅ‚Ôa€A}s;(A:_ÊÁ¦ àÜ7ðíüí€::ÿ*7}6—OÊá‰\÷0Ô "P^‹ »¯kV Ê¢ œ*üâ»ï¾ÛÒ&"@n §à'�]ÂÆÆL%Œ�t‡\À ðo}þyñå¿ý[±ó·¿ñ—¹ÅìÎNœý†­S@¿ØÜ,æ¾÷½bùÝw‹»?ýiñðÑ£b]„à!�‚ ˜aRP’o~Ê Ü@´ ð±©ñu^·´ŒÜïgq8×Ã¥>¸˜6ÉE À2<�Ë¿ÿBé!„Ðä¿°w %]† qËÇ=›ëâйM¼ÈQ˜Q•ÛìY =?àÿîý÷‹-Àá‡KÒ5 Y#-Zß…ó©z|�„Q½|YœkÖ�¿Ó¡Ñ¯J3XAƒL·ÀÀïçOïnÃýV÷ 6Ê\C8uÈ�O^¶.£Êu½R?ùâ¦Öa©›úÉŸø&ê)ÿ’–ä^Ê*þ…H÷XÊÀ™æf^¾|iÀ§®«j«¯M–ì­w@ƒÚÿ•€ø‹¿ÿ½XÀ—��ãh\^tƒ¤)œ ô§rO¶·‹}ÙÇÊãP×o?zTÌÞ¿€£ñ§€tjÆDÀ5é±ä‹¥WðÄá¾ÁߌҲÓ|Óp—K~—k¿Ã©‡ÃìO]ב0[êËWí\×ý_*ý zŸË!àë@OmÚã¯AñÇbBp" @²ã=Þ˜¹éü]q€s¤ ¿=ÆüRûéùÿªz~N¾`*([jçܙƼZâV\h~àD×;ëë…öÃkÒ49èE8i]‘K*›ÔŸÆ38 s»€ pÑ£b†0ésˆHåOš?Ay=ÒkƒÚå;>×ù=_ãæÖ„@:ÉMà Õý\á;¸º>S�ϵNà… ™ þT#ðkð½ò©FãL$ŒFTã[*Ÿú^2é§ ¿�ù—ËžðsÔ� €þ›VGë¼ö![DqòÙgÅ¡†{?øA±¨ù�B„rA7†øäpqÉÃàwàÇV�?|~�×Çש‹¿�¥nŽc¿]êŒKÝù Ó…7þßÊ¿(ð#Òó>øà¼\1ˆ˜-nûM!>ÊÒ³Œ”n5ð&ÝÐ~ €Ý/Š=þñF.cþXʦ‡Ã…°h´D–«]# ´ø¾8{ü¸8‘,kr�yºM ·ÙNä—ÆÁŸ‚ˆ^¸Üûç=¿Ër=òk‡ÛÍË#œ°ÔV…¥÷ñøi8a%(84�e¹o•Àކ§Šs"s*M€�< çàÚÒèF z•ß0¯Þp#¨öLšÎDŒã5¡§ïY1ãÏ‹ð¸h²(Û´Æ#YZ DÀýy�ýDúZÀ¤à�æV¥ @ÀKx§Æq�ù@.äƒ?N.#~ê÷}\—ã0_§n&,µÎ›ºÚr_þ.:«3ïi^à·úWâY=‹>ÄìéžæV÷ø:�€µ€± �[A~ÉnãæöZ?áBªó‰³œh@h àÓÃÛBÖ=]‘ç€1kf™P§ä#Ë'EÀh@¦~Êí¤ÎŽãzr €èEæë´îù¾ªÆ×vž».Óá¾®rÛ…Uݧ¾„—vF×3ÒVDhoËžHnÏv wÿ“O>ÙS=¹•.^ âGìc¡ Ü �°§Ö,hÞ/§ÝMêo&�ËôÎ�üñÓðí§ñã7@šå•‡8ä…À5~ƒßÏb7MO&wÓ8y}|]å:Ìé}�»ÜOÃð§×Ô_³¤©€7d'�àDŸÿË¿ü ÿBÊÜ|‹E0øå%«ÑÎLøÅ ÙQ˜Q•¯n¨˜géªTö3ùie©ÞI÷ƒÚO×C8z©5�˜ªj:;Ö™ù´” JPY45–C—p%ÒáǺ ]†ý±üq^v«îæ²}ß×v'½Îã:ŽÃók§Å-­ÖOÍÍŠÔÖõ|ïhðTÃ�ºb”¥<ª´€‘¦ŠÒv›ü¬ígϾì‹|ÊÖF‹£Û‰³­J?-Žp“þS�ÿTŸõ§yÅœ>B$&—öЊÞsïOZ $@¾�¯¹—<õs¯™iÏ€uz_ÛÍÃ}ÝÌu:ÜÔ¯ç/®k2pC.S/L»€1k•Y ù0`âÀçå¤~®oÊ «œNëïϺþsTv¢@[¼Ç++Åký5†×_ã6š�­ ×7 @'ЦÅ?sÚ°À:€rò�r\Vî*YSù;.rÃoù¥~§w§!“__…6ÿmßuHsÈÃòëVy:nêÊ�ˆ¥ ðg¤¿   üTg¤$0Q`a§/ñ¶úiœôÌLÖiæ)TüyO³÷² šÉשùKíø{ªÅ:_kÅÞçüGß~[|£<ÛŠsGëúï)Þœ\hB�¹� ]“^ Õc–ÿLá§êåÏdg4æ_’Ú¿,»úöÛ1‘È×ä“’ò±ÌpíïTny|ž)ë4¯I‰§g4èS×ÀcØ�;²¯µ0æ- °pb =þ—êñ?ÔzÿÏÔã#2Ø’ÝÕ2Þc�›ï÷ËZ̳¡aÁ¦¿òàA±Ä„žÒ]ˆ4Ž5l8ÐÜÀ®zû“wÞ)f>,Ö4ñw_ëþ7EK"†ô,7%ƒ4ü&D׌�C?&Ï·×ü:ÉGy³Ó`ü)ØûyŒ�§�jÈ_ÖÀ¥×a†�ÖÃ�5Ÿå±Úh^üO4ÆÿD=ýÇR÷Qù¿T�¿¥û°`%ŸŽ°-ÎÕóªßð�¤ÞßQœM˜•w:o»8Qø¶zû©ûóo½UÌøÚŽWp$Xœ¨ô)Ø©G¬ É0/0ÏçBâË?W¦)ׯ7$‘>kêoD�§Yx'õ#—nÓ¤ésÿ ò«Ê‡z–Ö�‚ßþ¼J#»žj™Tû(˜FÅ$ޱ% ­M%WÏÿ"€/D»"„Óßö)*&öäîêóÝgö–€Uõ© €fdÐà .ÉTÀàÄ2¼œh<Ñã d/ÔK£‰½ÏÕë$À­I½- õÄ»šÌ»¢‹×ë-KùàêðúPÓÏzV>8ãSŸ€º'ÀžÈêH›âB@> _È]Sº ùWþ3•u �ã¹9Ösß}WÌ‹ ‚(Zñ88„3ç9SPÉ8SðÇ?.ÖYL$R�Rk �üšáöJ] xâ mL©¿Ëçî(úMåè±ôøûþ–/ð?f¢Oð…ÜOuý´T÷YÅFà»f”†Ã>ãÔ_îÓÛKСu…­+ž¨gÞUoÏüÀ©@{¬kâhõI,Þ– ¼)»¤òŽTþþ§Ÿ{ï½Wœ‰VT—y‘†Ò°>SðXä�ž)ˆ&ÓìLAd9(y6Ë™öbòüºÍÇé�N®'{©ÎPÓL X­ªtn¨0 `ÙÑøú3�àó±Æ÷—ªý“{áŽzá}‘³û¬Øki”— €Y|Ôý@€×¦ôâ™üÈNGس?~LMc –mYþoé¼üë_‹Ó>(t¸è�Eš[‰i(ÐO€†�3•fOC–$sÄØÛúÊPu¦à4½?‰ajÌÄ@*q3nÖ�ÐùåuðؘÙ öð—êù™àûðË/c’ïS�è‰zZ&ø=~žQÅ5àÈ!zwvô õÑëï+ ¤0Ç]š€¶¬ÅXž¬XHß¾+ÕGõšàÕûϨç_“ÿŽÈ¨ë3¥e´;S0—7²„T¾ƒÊgÏtÓyL$Ü´P�¿{üXÁ§‰½/ü¿©×ÿD½>Ÿôž øû`G=~R9÷üsrô°ôþ%øc¬®¸@ b`y06H¢Ì#zsùŠì¨'_ÐØNvYà_V}:>SPs nÜÀ™‚eukç$p« gö�g#K@mŸzügkö?Ó8ûC-T~�ïP½~¯&Nó�Pí!†êý}ªîif®˜Ó Vùé^Cª#ñ8SpOu[9­‹�˜ ÐÞÂPý}’׬kõNB†&>r¦à©Ö(p¦àІ6Úë- eb!*÷ø®‡]Çõ}_÷ê*_ç3¨zõú<7‘îVÀM°Yž4–×Vð üß\Ïdã{¾ÆÒ'}€Ÿ1y øçþÔ0Ù„ê/íÀ�¹Gõä;ÿ¡¾8Én¨N4 ,€ÇíôLÁK‘Gœ)¨|âLA}- <,s?²y­*§6×ÀTÀ°YìÏ×xš�zû9+ø>•ªÿ+ø´„7_Á'ôöÆ L€òˆÉ?TÿDý�"´VíAAeÎõâÑ“«þ±åÚš“’h„Q~ÔAõáLÁ3=ó©†3±zP×ä›[Àߎš½7Òõcò|»Í¯ßôýÔý¦ÒN5ܔЪò¥1ñ=Ÿ ;[¨úR‰+ø¤ZW­à«Ê§Ó°˜üSdÀà.=¾Â� Ã�yõÂ1ö‡*ÀOyÔ�½ØÜ�O•ÍãùÀÇ!%MÀÏ}€D™9 œÇ¤º“ø¤cfÿ¹züÇüçšûH½}¬àSø¶H¡Õ >òëÅ4To@ aÉæàhp¿TÿÓû×ÊÔs\ˆðø³Ð¬iz,Tè}øÉ—ðª3Ù‚<ÏçFiT@ zü»q1e?n“òXG©€S+�‡Z*Ð3Û} ðXþGï@=5“V,Å, ÚL³¬å³|7_”]¥AÓƒªAcpcŸkö5ñõ­òaßçr?㳞ÆÂ|Ï(aÊ´¾„K=PñSõŸ0÷‰1p?â¤u(�($c=€Hd_Ä·/ð®)Í¢4›yÝç©ÉR@¿Ào­@r>Spž3µÃ0ä…àrHWúí*¨oãw’gÔkί×ôy=&ázb |Úˆ»�.ª>»ëvÐçZy·£….ûú÷Üù/Eš®¿ŽÀþXÀ÷홿û£ßô¨ØÐúyf°14Žm©ùŸkbïS‘ÈÇe�ÿB`òOZßóQ¡oÌ”à�oþ+½»/eÒtöŸ­¾éýF½¥€~ªúž@"� 6 ÉÎK^³’yñ,4”+ ¼º†Üz¦à¬¶/r¦ ÓòR”JSYŸÊ˜uàMJ`b B§�ÇLÿ�øü­¿ü¥ØÕ¿çž~òIq!Ïé›õŒ€ ]½ß)¤ Ã2fðSõæ+R¡™Ýl|²ãŽoú�ïõúi�ßÍ ¾ôy:õSÇ0êù/Ö†åÚ=,3ª©þ{ößqý%³ôzîs‘ß™ÀÎìý¬žoO28�&Àߊω«3�×g ®jÐ’4Î €Ò÷d¿]ª™ú¹nÔ�‹>L¿ùö›¾�ª=éD@7RbÂïXãüìs�ÿà_ÿµ(´jmEaóe#·š{.@œêÓݱÀpÌA=ý3 öŒ÷\÷™Øû\q¾Ò=Nä9({ü†ºßMåzˆKÏ~)`Ÿ©^>ϵò¹T™D�Õ¼€é¥¿BÚ«’$� =7 ~*{" èDÀÉÂsr�D&œŒË˜¿Õ™‚gÒŒÎXù÷“Ÿ›?ÿy±Ž_å¦k“•»¯*UûF%�©&€X{/�î ÌÛÚà·Ë�?Ž%¯ù÷Ðþ�ã´q÷•nÿ«¯®¶Ø l[€4‰¯¥5¼`ލ°»÷—šÎ¶^@.;'Ь[@üK�€è?øˆpÔyÕÿ\à?—L?α\æ@Èb Nþiy¦ È'ÎÔã% “–4\âLÁ�ÀŠC€n =×Ëe×,¼_Í Ï·ÛüúMŸ?ç8]O5 ú¿P�ýL ßùÓŸŠÓ?ÿ¹XQ�ø±¨¶ôr @~Âv×y�e÷zäx¦0&Çø§Ç=åy(�ô³‚OÙôdø\‡&r¡º°'ÿL ?Pôú¥ìËðä ç ñðEZg<=>¡Ldž¢âËÅ0á×ñ™‚êé/þ;:`äž6ÿlø‹l4R¹ßàÏ]ê’Úž„P'¨¦š.ÔÀiìG³Ÿi%^¡Ð{�;. / |ïfÖüB z_ÀÒÝ/š=zM…«_YÅ–iŒýK¸T½ )†ÌàcøÕYÔÅœ,‡}ÄwÕc}Æù¶„ºO¯¯kž•ñ=y³œxN¶Ó3÷ß}·˜Õ„g ÊMÁÐ9]è˜:H³@«`nú B&'=AI|ŒÝÔŸ†ÞmNšÔ8¿^óé7}Z—Qû§š.=#�{A–y|  p–ǺÌh0 #� àT�]3Æ�É@5Ô«¦ª€!Ôÿ À/‹?%#3ÏdzЛ3�w) Go¯ÞÿXÀg¢�/"�ÖÄÃ]wz¦à ÎäS)2álJ>üÀp¯¯ì®Hiˆq!ò™‚h |&ä±%‘l|q(5§%ƒŒ|&ÅLb�§Š*_€À \}ÄSo§ÖdËã@„1á0XʪU>ñLÝMžò0ºV+¿�j»WWÿ€NиV~ ?7¹¦Lz}À/Ë›x>õ´ ÷¢ê�@ïÎGšìdôðë:òÍëË3Évz¦à༪ÎÊÜTY«ež±ºRijO™Ò:µõùBZ“•*Ê;Š35t¸v¦ æüù°øýÚõó÷Û“÷šÏ êáòGáN¼&À²a·j ¡:+!.ààÛ6jó²ﺷ®†yGcíØ«¯üÐb‰+€Äæ`Rún å†U^1Ë_º|2S9¾~Õ+Ât‹z3q·$5{Q _�esŸž^6Æùø‡2ªLÈ@Ï…ÛÍ™‚Èj[u[W}ïÊ2ég êóèsMºúLA>µæg ^ŠæôOD+>SðÑ£b]_ò3¹Î�Võ ãF]!°I1GicHýU§ÁÓoÛÒ+Ú�ëÅ,„Óû‡¥!ËO�Ï¿ë2tÀ€ÄªBʼn|OH Aºßʈ9èù'@h·Þ^clfýÃåZ÷óÏ‹¬øœÉ¹}³²,jb¦à³O�z6Œós€ê� Bþ�§È¥Ó3Mœ)øPé! Mšr8È®¾¸œ¦3u=G½dâyåòïÅ,=¾ÔœÌ‘ˆöL�>I­j^�?'ø&n…õuþÞókÇ£ÌnÌ òé¦ÌQÇ�(È_P'ÂÚ“^€ë ?%|Mœ}„?Í4PþF‹°‡Fûï>Vá¡ à*]Xn'†r#=édÑ& W~”–Ìèñ?¶?Ásêé—4AÉ©½Œ÷Ñ\NééE €àøIPeÏÀø<¾èù©O'g ¾T=ï(�]•9+0ï¼ÿ~q¦…Vœ)¸&ðs²[‰ihÐb<7š‰@Ï^ † û²�•Þg 21È�$æ9’:ORÏšT{¬½A¼øü©¿•tiÐlìYÌêYN4n=¦·HÜ!€ÇN¸]5ü²ÛþžÆ¹,:R¸�´iÀ¤…$ ð�™÷5ñpD¡ûŸ™÷¿�MºÔê~€Æý±®_@‰¥ËréYç4É6#`¢-ȨI™Í‚€ÊA^Ýœ)ÈsðÕdOòä ÓYþP½þ¬4mz¦ ê~&b8’eAÒ‰êð’/ "¸5 ø¤È|@Ú8yç�Z'ï>�Ó¯FÐkúf2§ðTÆãT¯�ÔeA`fÿžf­/4Þ<Ð1Ö š”šÕ¤TôD*à“Ú‘¿¥Fø…ì·"€mÇK5ÂÝC;°ÖØœ8—�x|—ÐÑ«—F+×&‚¸[,êàX……KDü‰Õs°NŸ‰4Ôì��Ã7.qegÔ£F¯•ªã_÷üýž)È_˜í¨Ÿ×Ø^2æ(ñ®ÏqIJšPï‚a…�ŒËü&ï "°þéYSM¨’+óš¾Y¯k©* )t ï‰Æž,ŠQ„ÎoOñ¾SÃûB=Ð7ê�v† Ð ÈÈø±&´„·ËöÚ 5\Æé •C�Ï=â¸Sðø¥KÃp*�Y�Ù}Æûh|Ûw¯ŸÖ+ éâ'†4*Ç{z:SP°§ž|E$°)·§3õNg *�8SPä‹A¶ž àºS“Çí¶Gï7}§õE¼©&^“IkZ±öÎþÏñV{œ^«�€GÚ0#m°n[=ìcõú_¨×"ðR ¿4µ«+B®®¯|¥ŸÆ¨4ªqªô,vBXÆæ„•äп €Sðކ_ç ž È9Õf @þSkh04n�¼¡­ª±AFËVgô=5ª3íøcÏ’Úc‘Ä�ÔÿxW >z^I†ED4d FoIÓK­.Cåg²�ÉðJFeTÀo  1Þø¶nХÀ©´ôúsôúÊÇšùó|=å�!5ÿ÷“ª¯g òŒ,»f8ÂNCž´嚉@­^¸rÉ%Ìr -DÏ_/ø’ |8´Å ç9±&?_+‹žL.·^5‚nÓõTÙN4Õ€ìxÙ,=å`üËêUøÔ´¥¹ްöøyI�xA�—=ðô¬1Q§ôDl¶)�•|e­ -œ¨ lh;1ÑPL ¸>®ê„%?Lh *ÒÀ„ø†¯òã¡â\Á7¢÷üã¹ À†ˆèý=yIÃ>S9¹·OÏ$¼Êæ@îYJ8nõéä±¦Šª^a ˜U¦�Ç?ØÊ©^Yj+‹e™ÐLú Í ÜѾ�]Çä pã(é-é‘!ˆY–ܲV‚ ÷07=u•{€n¿,!A(ÊÃóVíg~zSê�ßi#“þ(/zê-âjÔ½Ì:@òú™‚&"Õ/†:‰›’À•8L›W•æ~/Æí¦ÛôNç2»Mït£t§ŠªÉKb€õâÖŸ?Ðn¶uMø±t•c¼7¥vžhNàc©¢ÏeYã~ª½®ò—F>Jò[þ7oEqûéd_jìÊßq+,ˆAa¡þëÚ½½Á™ yÌ+€UZiÑ:"MÙ {kÖUÒ¸ 6A>z–q;S�£ØØÆŒŒ¬ò§Àw�ÑÞrbhþ&Fg¢  Aû…¤$À 3d°$à1Îd,@¾'{G�oQ/ñÀÚˆô˜ Vg]ãÔui krWEŒgûˆX^ˆv˜càZ½_Îd›w”OŒíÉðËB(1I( Tö5Чuq�útC.™úO˜Ë�¡€ê]9ù§º‡‘ q¦à9-.RŽ3™üCf.G…Ù�k.‚¼=4‹—§óu¿é�Ï$¹GùKêDؤI5ÀoÃ=š36޲Òu^F, Hþ÷5lxS³ÕwYè"XT8…Œý�zÖÜ lI»xª Ç'šoØUXÌ)(oµÞX»¿¬t,Hb¨pV6j×£„—«8x—g” ÆåLÁcäÃ÷MÔ.in†³ xGù{¼ ê'Žxe�6Œ4€I{î;áìYgÓ B‰Ø Cà„Ü �ÿ¡æÞðß’Ý ¬êÓ½xÌ(Þ™Ò‰îIXÓ'1íÄò•}¤¼èòǸ_ÀŸž–4@/÷&MƒXTÏÆy‚ªo,HRý0ñK5/0”3%«sºøèQ±ª“…Ò3SYø=¥ï,½_åwßKß½ÃZ¹NßmºVyŽÛ½‰"¿�n…˜6zy_{uY€_@^0øTµ(0@À‘Þ}Mjÿèøß×J·ûL*,ÆïºO<€s¦<˜X°™XäóÝ™FoöR ý@à †È€z�î z|ã?1—!p�Ë™‚ç}ãLA­ÖŒ“…Jù=åî� é0QÐï{A pcÊó‚VÖ7¥¾¿¡‰¨mõîœf³¢žú®üoéëÀ÷ôÙð�À¿©ž�ÃDø¶Í`ÂÀ¤›qø: ‚bKn¨ú DlÛ¥bŒqv^‘›¼†pÜû‹�Ø\„öŸ9U7¾nJ¬™Æ™‚Ë:S{‡35lŠ0V=ý®ìú½¥n·¢"-†gìÆ8�Ót›ÞéÆÑ½UÀ àeÒ¨RMÀ/fSàÿ©âKö±þÔóH@Gõ uÿ�–ª2î_cæ_ V¶]#]#PŸ)xÁ>�ÌËŠÙ'À˜T†EHãt¦ +4ïkùuœ)(Ò彨ú=¥.~ÛQÉpÚÊ�j ±43443ú²z¾ûš´»/"XÔP�zÔÿ ©ókšð»#2ü1L(]ü”°½Å˜™sÎ䯶¥ö¨×=!øý]Iãr¦àŒ&I9åˆ^ŸÍNUà7à›¹ûÐ{t·+·ê0©fª  ÕKá%Òàx‰ŒÑÃÕ5ÇV¨¡ˆ%Ý7èéñ?Z@«3?_˜DÍæû~4d¥…‰}ªÓX�)(™°c©|~/!'…5sG!¿i,sª€ÆÒ‰IãY€ `ZÆø)èQ÷![„‡@Âò3ù¾Oöøg«1ÌÕÄŸëkWq»1�ž½LÔ¸V~ ?÷¸¦Lõ¶�cÅô|6±*PuÉ™‚*·q¦ ê™>ÕÒp×Ûnú> ë¶gvú~Ó9×kÜ©"€^n@ X@Ö4ùµ©qûºÈ`O 2`h›(Ç–X“UŸ)¨3$KNT~¢1þ¡dz®E>{š9‘eò1ÖMH¾/DL>S0ä¨ëìÍüM^Çȃ'�¦‚zºÓáB j°º.{G°H¯©{ì à{>–±¾-ážðúLÁ«á ' ±*’áÆ¡ä÷D“{»|ë—ÿT³üǺ&rEf)öBö­RÎh]¼¿]6®f—{UÆ÷{íÑ�g§éóò¸vÇâ¼ÆÕ� èW¸¼0,C€À¯»¬FÊYö9@g’�k¬'üèõQÿ!�úLÁÏ”ìw¥eI7ˆ!•œJÐû=q¿6ƒ‘ÀÄ�À&õ;¬7M�Ÿ @´¾Ðû«Æz~ŽÛ—e6Q_øÎO-?dÀ˜¾>SP“§Ì+HNbÒ� ½>£ØmÈ&ÿY)›§0±‡@.¹¶/™Ê®Éb:í}#r“Ÿôýö’§Ó¢.Mª8òà‰!^†_ÈMH-òWƒ W°;/zu�W/Õx Hµ]`ó�îÑL @õ™‚W*ol+.Áy"#,İ ùaƒ$†± Ùu Qˆ\ñ³ 0îËoðáÚ7ëŸ�H`b }Ú^‰ Uº¾-½_6öU�ÿ…„>Õø•�?œÀËaœœ€K�U±úLAÉM½<66‰HwÉSßYã_ƒc•_I²¾M<†WÛ²Èú¾ÀSÛ€ó÷ß)¡ôšÎÏ8ÎîDÀM Å”m¨+ÿÛZ¤ò»ùÔÛïŠë`Qþ•—ÃDOµ2pC`®j�¬Ï”æ„ê/¹!¿ÔÄrg@å¶â2"ðD–õo‹ØSÁ&+÷úUnÊ2«ÚéR·‚Ú5ßÇE`ð�ÀϪÀymb1Ï V­I½å_mØçW‚¾£=,âOD¶EO•î¹,Kë3% ‘ZÁœl;9 d†U’; CØáîËÆ¿2e$`Í€÷dKV�öäY±‘G/éÝ^z-7¯Ç(¯ot*à 5R Ùø7dù&³ÕˆÏõuðoéþ]­¨[“°¢FË› ^¨§;•eÌ~ê3—¯Æþ’Iøy7Œøù$ÈDàs�þ®`Y.Ö Çp¸|bÃo ’Gmz“ÀT@? ƒ´±"P_–åËj,Àf3Ï‘2$°/ËÖ_)iNtŸð ùIÃø6Î €$h¸ «Ï¬n¨�À�ìSÉj]²Ú”]“åpPd–AJä–¿ïn{f§V:ê<.f*  WáÒ°•‘lÜ!¹€šOW�À™´þJŒ8€œÌê7ï÷¿J$õ´L®â¡×g Z:×]澓ŒVe¿'-àCYþDŽ¿5�qÔL$ןj¼¯¦Šñȃ“�øÀŠÀU�}Y×'jˆqr�ÌçÁð랺&¡áz¼QåF÷!‰úLÁÖ``qsÛ’)ÿ7x¬¯.hc̤À·6€œ²N²ÎÃ:íÙûM×i9IUGî�*èWšnPÌÜ×g¿‡ZÇþ†H€}4L€Ï¹ýôæôäþÄeÃÍëS\Šª4œü[Ÿ)Øú 1db]ǧˆ°ÇÆâ«THÉ mënþî¸Õ§ÝO4ô+ì<½<4Ÿ}+Rë—l†ênÂÆ‰µj”ñÉ‹Æ ¨ÑÆ_.Ä"?„PŸ)X=ûŸ7N’…¶ü—²+²ü=Ç·1ùçÞ·ÓÉ@¿g¿ß¼Üf×½¦k–ß8†Oø¥Ü”0ÉÿšM rÏ_;þă^¿=;ù~ Qði M¡>SPM ¹u` æRøïÀg’ãº@¿!{G–Õ—>·!Õ&eÓM�?’(GH©_h—ÞÀD 3ÐŒAiÂÑŒöU%^�]Ï}´Ç�dÿm?S�¥¿íäÂ*�°%Ë×€‡:m(ÀŸÏ@¶�”‘ÇéT#pºNã—�2ÎÄ/Á/â&%ërpéÑùÌÇ’_ÀÜ0ôh¥ÚߘÐMz/z~z1îíÄ5s;'þLA-�æ(oMŠhBCM`S#"þ1Öð«—FŽ€Òòµ›&kç'ÏÆºÉXSÞh¼÷þv)Ã=±Ë³ëðveú~¯éœ~Ü© €›4/ N ,i(ª­z•¡×£_äÀPÜ5T ²#à,MÁ™‚~ˆ Yï¯çæ$ó`¦à²RrIij?x¢rù'¦·ü{ÒÈw�Ÿû©ß$§íïÍŒøÉÍÐÝV£Ótq˜¥€Ï)Á "&¹²~¯Q4áÜG-eÑ$À0€­Ã“z¦ &Žù⨯8í—k@ÏUe ÆÀ/�òüd�M5�«;�ÿ2¬ÚUt½Tþ÷E2ñìò»çO]—™—à÷^k¯$3qà—øênÆ�HYÛeI0'ǧ¿¬H¸ Âà80µÌ*0†Ý—0ig ÈÌ™p`ŸïJ¶«zl2ðun‡ÕVzy¦qI3q€àz}±Ý¦ ð Ì º0'oësT€›Š¨ÑaïÓëÇ·o«ßèÝ8'âLAH ƒk‹êNï�… ç*æõ_îpÉ�çF`4¯”ÉÙ³ö–éõÄí¯ v ²G`CysXȺdÌð"Ÿ   O’sþÞóëN5§ë4>e�»™(ð –P)�lUø¾Îx,ûD§¿T£¶aé+6€ø"µÈ8ÅæBcU–ó)pÜÏl€[Ï~”Ïàæž�ž©‘ÆavËžþLqXÁG<>§2‡Òëê@²f.à;YÎaäÄ û’-ë.ò­Âÿ°Û uœ43À íU}ä…tÛÒø”Ë¿sJðº¨ÿ(t(Ê,kýù¯&þÈŒÃñØq>€î¡ �jñ Î ÂQy”�þ$ù^ÎQd,!ŽsFá ƒ«8 0;Ì.‘ñ~€OÏ ´ëý]i‘…VHƒO.2IDATž�2b2På´#“ªüãuïÅx.€ÿ`²ñH` 6ZG>à:}—ÍÊtœN{önã7+wÂ'‚F%(^4–ÞkC›‚ÖeY‰F¦Ñ­ªaojH€–p 3O5VŽcÁtŸ]‚�±kÅ�k¯g Æ_Œ @žsðЃ5L8b€¸ƒ—0À�ÛÌ’†{¾ÙØŸ¼Ïù^…¼ú%Œ\ MàHrBˆ/ä߃aÀœÊ±òƒ$â5vu æª1UI¦šÌÔݾ±<Z“Xñ)P�zI oC ðoÊÏppå SŒ‘®ÂâðùÑ,DÀÿ Do �DMÏT|È#µâB\£ y‘‡@Ñ0º�¨a­,‰‰@éý±N×ȸôPžËÀņñuYµ:’œ¤XæTˆ“Ë9Ò¶ø!wò‚øÀ‰A�ð²,C kŠÈ"ປ2·Sòè6~‹GÙ­©&€�I•†­ÅL?=ÿº€ÿÍÜ—»¬FÆß`³ŠïL�(þi ôX4&l�€®ç,å+Ýfg ^{å øÑìRÞ¥À ’º–‹ü¹Æ(NÌøsKê„…˜àr�Ò‘'n;S–�eY¼Ãé>gGyde ÓX¤:0ÈVáU À$l® @Ã2&„a•7ˆr¦’z}N=€Ø™×�Æüú;°ÙYý%ØÝçÏ‹YýYÈÃ/¢÷ŸÕ"!z´3ýK[{é•�týLŸþø¯€˜PXÀ°„5\@ÚôLÁü ' K5üä3«úN÷¿,·ô.Ãq¾Á¯ú¿ÒüöãV™2OŠEB§²g"æB.Ui:c –¯üoÀÿšäh°À»Ä�, …n̵vÐAÂnãw�åТL%ô-½DGõ–¶?{ü¸Ø•�ûòËâ\Üÿê«b]÷þù½{źÚ}‹…þLóg?úQq €¬ @Ew�=ªò§ÿlw¦ ÀikÊ8±ô`‘7åaU/öð7€Ofį²Ü#.j?ãÿ<÷mªOž¹!^YVh+º è”iÖlœbQЪž÷m‘޺ʈÞ_® Àà‡Li7å§,ÂM•1È|§Šº|ßc¿©öûêñ_|ýuñäËmÿP=ÿ‚€ÿPöTÀ¼zþŒÙ}¬\“¦ÀRÕy}!8¿¿XVãgÂKýiôBLDÔ@¬ „&Hh¤+&âT,îf?Ê Ó€žÒA˜N$eˆáFŒì‡¼Lh&êU–ª¿ê†rOÝ,ËÆ}…›dh(e=ó$�\3À.ÁÊë± þµYïíË„ì·KÆï9.Zü¸}t¿EVc{kª`R¦qîïî_ª§ò?ÿgñò�,Ž?ÿ¼˜),©w¿¯? ½”Ÿ†&÷XsŠÏ$ ³ûóê=9 `FC€ù/uoF�”޸ѣ£òhÌ ¨ò@+=S°×ç�RC„V™üûCÔ àb$›kn ~“ÄUŒ«ß �COƒ5ÙS}>á2´@£€”ù"cðS @̵ÁOXm^I`*ÀLýê±ZûšÅ?P�tößö7ßOþ­?ý©8}ï½bæÛoãTzs�&i€|Þ:VôVßSÍJýß—{�ú/» ͵7> –ÕŠ^Z 3új¹Ñû+/€Áp!zÎÖ�PyÐcÈ×þh÷C™€ßÖ Ï €x€‹±{uõú¯Ÿ¥t#•Ó·Kûzn¯…ð5€ÃBôÎî‰h9Á 9ûýâbM¾öýN‰¨Ûø¯UtŒ¦‚%ß­ð{Θÿï/vþõ_‹³?ÿ¹XVϱ]‡:_ö…2¾I;œuêÇê9·µ`è¹æÎäÎjå`|šXÒ 4‡Ô iذüiÙ�^?ýìGXj]/¯H-ˆj@vÖݺÌoœ ôzGß}òIÁa$¡HÞ>yÚŸºÝ–5­ñ'šÌÌ�¾œfñÝ©·~òÅÅ“¿ý­8Ò`V=?à_•è  w   ó5$€šO�³¦FÈɸhÿ�S…mŸÌ5M ¼f2�^,&ð ®2~$ôyÓã~«þƒ.ã†òchs.9óµeWÚÛs&f5_ƒtYt´ g2è™�á½pí÷íöàëvÕì6~»üÆáþÄ€_ …ÇØÿ@Ÿù¾ýë_‹§|P,J¥ä”^&ö¿{út€ßàgbêŽá†ÒÍÉÞ×xuG–ãDÕÿÇÄ•œë&7y¥g Æ¿â^�=¸+È…²±àǺ>’GøqmðÛf‚òý¸\ç:¹y_„ýÍgŸgšÀ]ÕªÍ-ݦ½0?ÀÄ.þÔŽ ºcWäÄì–ÚÆ§!Ëži<¿ÿôiq(»¬á€AÏØ?dàÃÁYŒÂØŸq-àç> ²ª†6/ËÿÎ'Bf䟪ñAÀ‰4aÖ0*Ÿ«)ý�{½xÊgj™”òÕ3†…TO ÷°;ª>ya þNò&¾ã%.95l™oÛ÷C^U¦”ß™&\�Þ|³˜“p* ŽÏƒhs€ž^Hm:'@¶.ÿ6jE~QUmaa¨äü‹oXüÊ”^¸#û†, }.‹Ð|âKãáß�¥¡q”؉ìWò¿TƒeK+ÄðšÑ=TÚôLÁQ¼¹³€b2l•ðîùñcÒ¸c—{øÓ<ßa©{•ºñK-â3 ât ¶Fâž3=Ãó-ú7çE‘ó,â‚PýñcãK�®=h‘å­¹5QÐí[é†0"4^5ð˜I– §ˆ 0\@žÞ³?î©r€( …‡¾”]áZi˜Ì €´©á:æTTܨ[¡�?êRÖ¿VžÍVy†I ÀaΛ¸ƒÿêêU\;Ž]DZ›†Ëø9'àP`,4D‚^â ÕÐÚtóÞHŸ`5 ˜×Äë郱ê�¥Ç|¡aó–IÀ.D™„\ž]‡»>ÍÜnã7Ëg”áSM ¶l|¼xVìÑ0±@À–kÀ‹OSEýÈy<âÓ0èeÔ3±D•aÇŠÑÈ£WVœÜSº¦e*Ÿø4˜'hsÝ å Zn\,àÇ¢¨náÏótš4¼*ŒûÎ7u³pÎE`ß©À$€òÇ©«*Ù°U™õbx2&MOõÙõè�wŠÉ›÷Äâ¬E‘/$l-àü\äb÷Rnžf�yåyßÔõT@¯/‚½üóš8š“½Ô<Çò¹�Ðs6†9TÇq<1Íξè}‡]„,æÜ€Wýœn$†pʈ±ªâÖ4‹Ÿ$­ôš˜[\ù…�ðT¿>.Ã}î¥ñ쿊qõ›†¥þ4~î%m&4 …Å’`E�øÖЖT�Я+5]ñy2æ5p ù†]œP'&ÐÛÆ0De"ë*ãös4�©$€ª—Ú.Œ—>/5rEÿ¸¤å ­ý?Ñ÷eÔv„ä¾  c ‹Ÿ†}"àªáq~[}çd1ѸÕÐÙM€VY©¡÷¯:S°*nš®l �åÒèqUÇÆwg¤z4 q¸ÆM�ãT¹„5³ä#ù@:ôÖ&Žg— G®ó�B+ªWŠüš4­Nêg.`_Ài±;RéÑèèý?À7 îAkÔÅä‘ÖkœýSEÝ ßñÍô úf¿!ðþð‡Å�–jÇK€Dz‹€Ÿ†‹A=÷õ‘4Ë€O¥9Ì¿ýv±ôÖ[y¡f %¹œ'¸®º«† !À"ãƒ=¢÷SœØ# FëzE¤.~ Yˆ%†jø4~ï: PS7, ÄP@šºWw®ÿ–uŽ@ûqí熯íF9Z.õàÉ'Ëx‘éiéGëYQXhŠš€\dâçŠz’gf‚X¤ÐûŸI `èÄÎÃüîýC*« äí#+®é%uîu8Ó4Óº1UЫŒxÑØeioˆŽüãbOî‘`V–#À;²Ò¸ç§×ß×wç ¥¹÷Ûßë¿øE±ªÕ€ó€Yñî¨Q¾¥û[Z ÄbþâÊrÁVž) ¤„áDº”MÞ4ï> •`¼ºY‚?.ˆœ\ã¯2ǵ%žývËòü” É`mÊ^úDñ‘'vM×+ºÇø}^vV2ö†)'}Í-óøü� –óÝó§à·R€úÚ³(àV€™=•!alÞÙÔ,ò¡¶òîüú×ј/µ/àX;Ï4¡4§^…=÷4_fžÙ È*´S©�—ßû^±ü³Ÿwß}·X×0b™}4Z廪|9Oð¾`Q…¾O]Mø -ÏTÚ€ `Âèº[CŠÐTnhªó5@:S—ãëV®ãÚ%.`ç[úC¿P½ùÄùÚ¦¤òyxºè­•Žs ½É(ÈVà¿”�ƒ TÕ=´�&e0³¯x:½±¸£< öÜíTÃr{é4>¢˜s+  êåð’QÙWÜšI¾ø/ÿ¥x!U~W+˵ðHî…&gEéBÚ›ŽÔ»Ï«çßTÏ¿ñÓŸë"‚õö‹=ù‘ï²âlˆÖ•v^« EÇg ª,@\R@UÕ[†‘ÖgÌX]¨zYR)�)NGÆñR?ðËòœ¬Ï§ 4¨8Áq(ÄåÚ%LàÕ =v\žKS:–Æt¦úÎ"O¬d>'·©F ¼ €—"‹uÕá®®]® Û�Ë;2È©Âm2SAƒzy¨ƒ|6Z“ú@Úùw´¿_þM ^À¨Ò3ù¼È‚ž~I ßøÕ¯Š ¹,A5øÉ�º1©µ¢|± ëöLÁU­ðc€4þP¡Œ˜üC PÝ “‚?÷›™<®¯¾üŸg],{l8¡âc—Çú—Q–Ci�F ‹DhJ­e–‰½rr�ãÖ[iÀŽòaáÕ¡Ê`^�¯ ??ù{Юùþ4iSAz×1¼`,ßïïÈÌB¯h2oSŸ–v5,ØßÚŠ�gRQQñ™è“]PÜe­D[Ä/�Óó»÷'¿ø´‡«¸ ÛË™‚ý< ŸK•ºú“Oi$áW� W½‚ˆp¢p[ì4‰Ë"*ÀGeñ Ëê­™ÜDµ?–Ü8”ã¼Y¨ƒÚÃÊ’A³šGý—�¯"® ®È€íÚçš�a“U+�’ÙUžq|¸òd.€ZLv­0Iè/Èê6™‰&€n_V³øÇ¥7¼ñ°´tI_’&°¬M>X€ù=i±4&\4…SÍKõ?—]PÚ{œ,ÔË™‚€¬G³îîùžø¨ú5ÀO¾äÐ :š�ÁuÁ--àeÌΈÉoMå0÷á¿dì�€ˆЙùgh�Ü8tU@çô`NY"Ï0rc2Taôþhv oh¼7åÍ׆:*‹š¬Ù`R‘:œ*ÿxÇå;Šw_–ã÷wUè«_·‡øz4�‰# ß/c�.y»'p/� È×tw]~4$â†Uc£áøÚ�ˆëc5¶}Ex)À³ÁhAGŒq¦à±&{:S°×‡Ucg΂]sL¨é!( €Û•Ÿ>œïø>¦«SÙè>äÊÑà'Xõè1ë0U½Èò]‘&+!SCþÐ$_3*4†,æÂ… OU›°±�Í™òǺLJàynÖl0OššÂü.q§ÝLðBº}1�Æw<ƒØd@™„14HVqmHkK#ã@Ñ].òBë öÊEEKrßø{=S°ì]d[7â«^œq)@h6òJõ׳äàÄÑãÊ PèÙ^›µ/KX@‰z½ºÊY�ÖTàè©üB6ćdYü³¨4¬�ÄBÔiQåò�K?¯ah7ÈJáÞßÁ…Þp®òÑ öä¦úT!ÀO½¬®9H„ðžÎTºfuÞŸã¢gWÃGà9NÔëÑðùCQ€Ã¤Ü…qvê9Ÿ |÷þ.ÇMßÄâÞÞ²r¼n\Ê3!Ì©^1_!Y²œ÷L‹§Î©{I”oº ®iÈwEÀ?Òd+Ùv5ˆP ÞÝõüojòu�½ºÇ— Ây~öo\h¸¶¥2Øû¤'9¤š@ª š\vê"ƒI3CݶۑÇO¯ý 3èM uîÆõBcüšè;•Ê9¯žðw}¦ @Ⱦ>uUž)ØLª&@"?½9ßâé­™UDôì�‰Å4ºGïÏ&>ÛÑØýÌäÕ‰IåÕI|ÇIÓágÎ�:ñ ñ©Wõ¡§NI ×x^žuMÏ÷Mº¾%•Ÿ±>ï‹ç]Ð5à_Ð9ì…u&`eóÏÅl âø6Î@{˜Ñpí!?õÎ뜆¥í�ðI0SIƒPƒäô ´´ ãþ¨‡Ò1žŽoÝ©4 @(åðÉŽÅ:ŒåÇÕ ´˜ÎTh"Ì#õâ;šÙúða±¦ëûZtµ*ì< ]Bc8Æ5ª¿t¡@êº$ò`ž€/ |Î5ØqcUqÒ0%›h3U`€ú�T囆Ñ0|L\ÓÛª"©uCĤé=û¹ÇÛŠ,Ÿ×X|Ä™‚«êé½h´4ÖkFeaü*›ž?Tàq݈CL®Q÷Y×àü4ñÆÂ¨ž˜�M+�@ÏÂWƒC=ûc�vIêþœ&ýfÑÂÔ³CÊÈ-LùÂÏéNÈYaâBŠ€^éN•îXn�O)C4$¿k •ìš|¹ž$3U0JÁ{(À,rXU°Ù¢šÞNÎT‹Šž»q¦ "§ A K•!ÜßóéÙQ›cû¬­�몿Ƹ‹ãBc ~WºÂ}M#Ð & ÏD”_#�—9v\®k"vQ_ .[…‘D`ò�9©ý¡Q(Í¡4äYº÷Ç5øyç“&;=î5s+  Ó—ÖiàgŽ [’K˶Ÿ§FŽXüL¨êߊ;"6 AzÐÂvëUɾÐ0àBãy“0{¶dQù=€k¢ŽCI åÃ×40Œ{ky©;Iò‹‡É~¦‚:} �ÆËdÔö’|±¬-ßø9Sp_kÕ»:SPšÃBv¦ ù2KŸž)ÈçÁ0¥cùcQŽâ6 $ ÷p¨þ±}YDÕ˜ lûtÃ�°miœ|9ñ| .�Äâgžä®Üu¹üÃŒ@Ë-ì àsŸÙ† ÈM�-ù#€Ï½†Uº í(ôf!H‘AÄ-ålà+ÉÔ˜© €Q¿ À²€g >zTìj}9‡ŠÎŠ::SP ï’3÷»bCg ÞÑöc÷@l«}K÷9SpKãÒ]5l›8<ƒÞP…•P­œ¦[ªþrYÜÂ…ŒûcìOœ13Ô˜ ¸¬ X<”å™¸ÇØÐÇú ¹l&" —tüSð‘ät ³öäé}pǸa}J �$C³8æ] /DÀ³²3øøS“_§÷&É_@ÅÛÐÝÒ¤g ¾,Ï,´¸“3 �ùç?/îùLAÕ sVÕ9SðžÀßêLAÆóñÍ_`O @]Y|GgÜ¿ÀØ_=%÷{yÎnå’ÇG²¶4>`æF%q  ƒä¾¥kfîC¾rƒÎ1â±–A®ó£G?–œôÿâÑ£øk0†U…ˆ8>ëA”ä%‹!~ ½$�cýH{[Qº;z±Yˆ´ä_ZÒXfv ›dcÙOò3ŒEÝi¶q¦à?ýSñ\=ÉKí 8Ô²`V™]hFºq¦ z§Sû@ªÁÝUϿə‚ò¯ªs4™gè9UgSaš™ž×²VÀQy¦ ÒÄØŸ†+cÕbàx3z~ÆÉ4êQJ¥Áå=<�OŸr7T7@Î5D€?€N:ùcY³Ü˜ï�›‚“%ÄñO@:Ó‘ÉÁ]=óŽâpúЩöd,éK�˶6œJ."ߥ_þ²Øäh7æqô•„Ù~çoWÑ+ßD3ÑÀKéÄ :žËt¾Vi0陂 j€ó>SPjé‰ö p¦ “Jœ)¸ FV°äTg FÃüº^1Ä*>åyªa¯ˆâLA=s³3ŸÈ0ôn>n‹=_FïßX±÷ã7� ÈèÍi\X°øÐr0*¾{x®Ù“Àx~Y‹ ä�<ÓµÁ˜ºÊªab}ƒžò=Ÿy�B‚N${NwÖ ˆy†JçÈL‡¿.Ic»£S�ù_¿(«Yy.»Qè„z&šÆMæn4@¥ñp¦à¾TÒþk@ŸØq¦è3˜Š[u¦ é1±°G�Ÿ—µ¨±hÓ3i°ŠŸ±_ˆ†Îz/¥5A�ï  à¤\,~fçcrN.¡ døYáh€{LOÈÙ•ˆŸ^žøÀÄoùú.Æn\è‡ÞŸw0§s™ì2ÇÌ+"�3C½þ�ïÙä„(™ —Xí§ùïw�‚ß„ì{®KZæ¤ú'Ž4/½3Šx4Œ{»„£–rbM¾°ÄÏB}‰ÇÉBê±vµµ•3w5wÀaKrßøÛž)(U5œ?ÒXÐø—uLX–¹HÔ–F‘ÎÎÓ㣮ÓÃs�^ÝßßïÈÏu€î~âñѳËïçjår/½_uMž„c|ßn–?&@ŒÌÙäÃA(L®nH6ø'MG^”à›Ùx.ÅÁ¸.i“æŸHW!»A¸QO€*÷ªÀ÷Ig ~ñE±Å™‚úSqÊ™‚ ,Ku]èðLÁKõz³RiYü£–J¶M wiž!O'稺oôòòû3=<»ôèåƒ äòŒ¤ƒ==þôžãd.•Lãá·u¾ŽC¸ýá) n\Ëš´X€í0¿§MË©"§Oëá´v[Ýsœqrk¸�·AC¢!`hd\ûH±´ñ¹¡�8 8Sð@cü:SðåüGq®3g¥ B, Åĺvå]u¦àžÀ¡a«ÙÔ⯤4ÀÅ`wïkÀùË…Þ–ëÏs€õ>¬ž‹k÷înð~æôÚa¸¶¾o·*Žãæ®Ó¨z‘_•kPãZÖvIŸ†§òw^®q!»&„´¤™tSÀ ½A 5”HÃrCÄM*ñ¸¨~Œù_p¦ zþ �)ÈÁ€€^å*b‘ŸUmOÏ|¡±ÿã~=°Ažöð¬°ã“ù~ÏÎÓ“3NG­èÔ+zwQúqݳÍ\Ò§ÖñÚ…¥÷íwZU¹‘'~ q0©\-oÈ×2w˜ÁïøNO”ckðü€ëB¼i0SIéËlõ’n:ž¬MÞø¨› ~¶´r¦àsí#8Ñâ¡9õü€ŸI¶ƒË°4õÐäò} p0 àÜñ°A†²ù;²k=¼ÂÞVÜ ùWˆ/7fçK æºçÏâëv®Ó·r�G«8¾§j7ê„߆ûË—|‘¹Ý*pz\ç�K[“×Óf&†Ò0I/Á�É. Ó–çˆ[†�jÿéßÿ^<“]Ò$ àwïïž>à7øYøã3ç•–c±ØßΧE—‡hÄŒßÙµ L »a º<¶íòÏ4sZ±Æ©6LìaùÜGÏÞ陂B}l NÁo°k0àíòL0þªk‡ç®ªØ ûSj†ÝƒR_ŒËõuZ§ÔïxiØ´ù§Š&ùåÐç´roU»Ò–e/µsíDkû[íçù  ¤à£¬ðûLÁ#‘Û‚Õå_­q—ËrXß® Àåøv KÃ}m—z¤~®k3Y¸U@cíÄt¯“¼ˆÓ.?ƒhQà3÷8SPg jR�¡àèT}_IÕøgÒ8SpYûÛÙ`O†&k¿{߮땻”Ÿ>Sêç^§=§Óµ‹?ªxn|÷ ÷únô|´:«1–ÀTÀ í òéõ}B´€5©ïü;ÇU- Êë ‹}õòÇœ)¨ÍAô¬³ôð" ¯\èïêL»M´]s¦`§àwïϳ·{~ßtÏnyu›¿Óån§ùt/Ïš®§‚¦å…Ð ± :À#=Sð®Î¬ÛMÏd™¯€Î¡¢üѧýr¦àaÌøËºÇ7¸Ç·k­À=ÿ´Èp”ÏaBeº-»&€n%ÖAüNB�k 89> °r¦ U.K XÑ&Ÿ}YN JÏ$~lÏ-Çó)È ô4Ì~ƒ?¯G»GÌã·Ó¿]¼våú~§ùuÏùöꫜ^ë×*]M­¤3ä{4$@ P).6=Sp]ŸúØßŽ1èIç´¤7Àqspñ°µ¹Ý¨  ‹÷o¦ï"I×Qs “A„1' ¡�Ïô¹viN ÈM)àÇüùóôÚC;Ÿvé/}ö›ôwZÃMå]ÀMI¶Ç|il ºá9+®±ìäÖ¸ï{· À®‰À÷�gíÞn Ü È�4êWÞ¬>i8@ŸWåÀ'<6 ÉŸß'÷í¦š~_§åD&åOî²Ó8­üNß.]§ñZ•Žq˧]}Çñþ­ €q|«:Ѱݸ­²û\;ƒ?íýÉËi캧O�oRiUv}¯? Xþýå2¼Ô5 PÖí ²toîF•ƒß$àrÏéLv¯ÓúåñÛõì�æÛi<—ßo¹ƒÊ§ÓzOR¼šÆümÑxS@ôvÓê7�ïkÜÚÔ¨’@M’ʸ¤ª>„¹'¬?/—8¶¾N]üý×Ëõh–× ã5+Çá�–çø½ºÃ*§×úõ’®&€^¤6¢4n€v«ªÑê^Uü:ìvK &€!¾ÿ^ÁÙ,]³ð›~$—;(M ]};-¯]>ívõæýz)Ø0¥]—UK`Ì$PkcöB:©Ž{ªNâ§Ûøízv—ë|;�ït¹;¨|ò|óë!–s©²8ÄiìM­Œý+ª+XKàæ$0n€OÁöÇ5l:JFuÏáJÝ”;èrzÍÏéúíÙ-§Açç|swXåä嶸®lÏ-âýÖ8i¹Êdá�üC#u�S!‘‘Ûs£'æ{IÐh¼ã¦X ©Ðj°T:tÝv½i4çÓNè4^Ó‚:¼1¬rÚU§“z(m˜ nËí²ÉýqÒ€…•ºúÇëÆ€ðÚÔg D‡U€Û1õµ¬Úð8j© `Ð -… ç·>Œº¹çFYi.·�&�¦éÅ?¬rÚÕ­ßz(ý%mV夀Ûu»â‡zœ5 °&€¡6‰º°~%�G7¹›j p*”Ôo¡!@?wŽP“tCõºçsÏ0ÔÂo °ü9ü|7PÔµ,]î°Ê»VxrqÓõPþ:Ôy޶›Ú*mÀm>©Ýp½ã¤X)øÇ‚†ûJêÒ&Y€«sü÷�¸&‚”Æâ1ÇeÀà·k�…_Ê<{öìŠA}ù¿Ì9í�ŸÅª7™±-%zmï«Ù¾™´ÛÝOÓu7M‡¿]Úv÷;É#/³êš­Å­ gôk:éáÛÅiw¿U»IÛ.nÅ}Ú(ï3€îù©rÌO»=ÝÞÞþ˜6+?í×�‚ßí\·GkFF,¬†]k~Ý?ýÃþðÍÙÙÙÿ¾¾¾þÿ�žž.Ë¿$wQ„°)¨ÑÎ);È ¡é5"„˜;é Êi–G;ð6K7ìðA�H?uV;è'y³´‘i |æ¥Î±Rõ¢žªÇÇëŽvww·þøÇ?~£Œøç”*I@õ½‘ 7{�4œÞ3½ª¿$º$[÷ð‹ [NìŠüØÕÒåÞ’,ñüÚüo&ù|[ykSK` (¶×4T…ó§ÍDzG²‡™%Ì–x&wt£$€‘i„�…Šk¡ `k&÷èÄñ½ü98ÿÚ­%0( ¸­šÒv Øxü)à‰ëöí|pGjÆ�@*„dÁ¦=ºã™nÌÈ5øŸ¸& üµ©%Я V\·QíÑÖDPEi[ï·N}§@ €Õ‚1K"Ôļ…�öþ©–à4vûR�A-I€ö‡q;u�n@µ·5¤àvíôÎ wdf€‡·pÀE¨¸1÷ͺ™zcéùÝû;¾ÓØU”ÚÔè[n£°ívIÇdk"ðµIÂiœGß•ê7ƒ‘“åD ŸÃ@O¯fAôv­öçà_g€D³ÞÝ®� °à‘DKca�½àß°� ³á¬JIdƒ›¬Úà°� ³ãQX]g—”£³á²� ³äÝYPož¥•U¨²� µåæÁhv²¾Ë±Æ²� µåçéš¶çêèçå´� ¶åçéêììêéçå¶�•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒ ªØØÙÙÕØÍ®±€‚¬�Ú3¤Ö»»Äš� ¬ÛÙ»vvM±ÛÛÚ«� ®’@_ku\oÄÜÛ«� ®Ûc>_g€D³ÞÝ®� °à‘DKca�½àß°� ³á¬JIdƒ›¬Úà°� ³ãQX]g—”£³á²� ³äÝYPož¥•U¨²� µåæÁhv²¾Ë±Æ²� µåçéš¶çêèçå´� ¶åçéêììêéçå¶�ic14d˜‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATxì½—#¹‘µÍòmg¦Çì~ÒîJ«•Vçûÿg�Ö™qí»Ë±Ü{Ÿ`^v�I²ªË°Š�sÀ“‘IÜ€IäÆÅÅŨÜík`Cîök­KCê·ªãz·²®â5°y‡uWÕ¥�Ò@i 4P( Ü‘ʸÅ×èÿ”^U>( ÔèAÝκ˜;Ò@·¬øê¸nYáU݃Õ@ý—ì­­ »% lÔRÚ—iú:¡Ú ðe· r¯—.µö_{Öëᨫ½œjàrúš‘.ðŸQGEJ·¡�KÌ×ð½�kª:Jw¢�šXBíKt"—ê”R•WÍ—Š¨`i`í4p™Y€AÙšX»ç¦.¸Ñ@�BÚè%Á ¥ñÛæT¼4°ÎhÁ¼�·ºiÓÛø¨Œ€Ve_' ”0çn_ü3€ç°Kïã‘ÖÇï㹜¢¥�uÓÀg -d^·ºÉiCá™q\â…pý”ÖD˜¹äwx%Ížÿ˜Ã”Õç\V¤Ñ'”Ч¦â= Ô @w/ þk¨=%9ljž©ùPóº`o¼O&ËW¸4ðÐ50ȺØw8Ó6L¼Ï£·,ëx˃_ûB õóÐ4P3ýwÔ�S ÞðúÂæµ4Ë÷¥9j‡œ]›W´4°.0 ûzsœ°ã}aó ç�læñß"Þ:x3i5Ъ¨âAeðO—K7³/ Ï|‡‡(§+¶i¯M3ŠCÆn(ìô¢¥�‡®�œsÜahöè„x øüŸ²é¸Ì›p>ÿE&ú‰Zø\9Ź¿X{`øû®¶@L<û ê›f9‡suÀÇ ÑIjý–Ö[ÂI-p;nàçÏqþ_mÜF@*ö³ y¦®f¦ª¨ÀÐÀÚé€ÍÊq­Ï@î04‡‡òXÆu,¢nSÑÒÀ:j`„¥Ç¡­7àÃ'Ì‹p¦–{š‘1@áʰ&ŠÞw ”Ð3 n½<ÓÍgÏžm=zôhëüüº©éB6YâžRÊ$­+›MFÓ°y¢æ,WX; l§À«‹Ÿ wi¦ãñø|| ˜yÿÏH' u¹ÐìýÌ…lŸé¥÷Pe|~Óèpî(2Í€Ÿxø§OŸn}ýõ×;ß}÷ÝÎãÇ�·å·ÎÎÎ6ñ€;T†A„Máø;:|ÇiˆœÛ4‰Õoi`=4``fýý³°�ªÿ×ùÇ�OO÷÷÷Ï>“ŠðÙhãÙà?fcÚçhreôi§x÷Nkm`Å/¸c¤·Þ ßáM�ø·¿ýöÛ]¼fö¶å6ålØü³�ôÅÀo Ï®�ç´¢¥�‡¢�Øg.Ç<èééi™§ÿÆ™þrcýåN4p²»»{ªÎ4#`ЇòÍñüß6èÛЀâÍW0<ò…œÚ€áIrý–î�ÖÖà�Ûs›ÌsÇ€ˆÃS°ï³°~{oooçÉ“'�ž?þXР¯j6Õa±,°aðïhÄ)`·§B™¶sšãEKIài{=æAõŸÊ³žþ‰zrrr¬ÿ ~SÀ¿©8`ooðç¿/Ó\¥ë7ð“ÏaËY&âjWÖLÑ{¥�µ5æÜ¥_¥C‡|6¶$·ù›ßüf÷OúÓóßþö·_¿xñâkÍ<ÂØÇR xÃË”0i´Çànšy„írºy×M5’ºî"«¼ÒÀTzæ§a ôŽC3OÏ}¯y*cÇÐôÿÑÁÁÁáû÷ï�>|øpŒûöíñË—/áŸt³Ì ðp·F€ã¹a”Oy‡œqnC3j©È}Ð@“»dÐ÷=s./ ­ŸÒ@i`±„™S# ‡ûrbàl(Èn[ø.†� ð¯dü ÿ$£ú�o¾ùæk-¼þñÇ_iôÿúèèhĬ�Òx[ ýŸçxžð¨Þ†@kÀ'oÈ• M”[i ”ðéöðǵË@6øOGÿÊ4Ýé¯Î‡ôr¥�ÒÀh�>Çs8•Á~gðÊmôg2¶d\èuÀsíØQô¹ö|¥sËØøå—_Æ¿þúë)GuÈhÿß¹pµ~�þ¡Ó,KeX#EWVën´vw¾aŽô‡(@ÍXkEK—Ð@ ôm<eð7¯gC`GümþŽ–ž è¿“ð•þ£›:!p¬ý:ïµG€ ƒâotû\dµ�ÓSYµ§–¦Ú¨À*i`Ý îEk˜gð¢6b&€Ñ¿:žxµï¶o2�f¹ÒÀCÖ@¢ñ¿SœÿåHÀ�Ûøïé¿ñT ¿¡ ‚ûZ ØÿÃþ°/¹ � °¯½ûZØÔ[ùÞªÑ@û'›gP†óÕÆÀV£_ ¬¥€EÞhß~ØNËÔé}Óé2€g¼@óy5M­- ”jÀ oAâÙ9½¡üÿ€¯%�'Úð­^ÓeCà¦^ÕýêÝ»w¯´!ðÕý×½ÒRopj§ÿë¦®Š¸÷¶sc²1à4Ó�¡Aj‹å�V´4pgX;€?a§mÓ¬|ó2%œ½Á†üžèäY›LÕåj*\( \EÆO¨=å8 Õÿ0þ{bcÐÇñ_}¬%�o•¾©YMßÕÃ~Öù¡Odl*üD³ßñ–€ò± p¤³;ÞjOÀAw@@ ÐŽ÷ý·�F• g¢Mª;çƒ]®4pëXw +<ÿ¹sØ2ý>º¥ÿsÌH8Ö"�iYª>aYÑ’+ ¬½ZütÚyp=M~‰é€Éž€˜Êמ€Zø¨s>j oC‡q|pì ÐfÁ«ê#`èÏ<}§vNãW­¬ò•¾DeÌþYó—ð<�!@zíôÿ—Ü”Ê[( ,¯ãhü6‚º”NÜÅià‘–^hSàoÿøÇ?ŽDŸk3à+Î ` @€�¼¯Op±Ðœžùärüe ©§ø·¥�2&šÎbÂŽ;ÜÒð—|œùÏkFêhø_ßÖý«zJk­ƒ¿•��x)�7K#^ýÓ€V½Ðf@6~Î�þãŸþùˆ³”}£ÛÐŽÔç�ΆÇœqð[C`F¶Œ€}Uä–5PÀ°Â�â Á_EL7ª“¹ÒÀp3*¥4PX¤?rCïŒrðã=ftPÐ Í<–ð­fØÀÈÿHvÀ[ r2ÚM¼M#��gÏtš¯Œ€¬– ߦÊø¤íèI2²l,¨ó˜9 ëpØðþS5º X¿×QÖC,Ãà÷¯mÞ5ùº¡Ù+sÿdo¡Û€¿€Wá§¼9 Í€ïõí€øÃ>ˆw¡W÷ß¿¿¯×7¾`Ouµ³ðpeLôP¿w¤�2†ŸÁßR™Gxº Î¦FþÖRÑÒÀ5h 6 SœãÐÄ?£È9OcÄë�9ï¤ÈO{ôVà‹ï¿ÿþ7Êw!úL‡½ÒrÀ«¿üå/Ì ÖþÿS Žx˃?v"�2Hyµ­6Z[EoEeÌW³ÿÜù�îð UŸ130¿ØJ- ”nR€?jŸÁ°eã.2š Ø`S Ü ²°'@³ÏtpÐé:'àHéã9çô>Y[‡\kÌä¥]jï ¯-¤â¥�ëÒ@‹5i#ÉÐïâ1  ÿ¬Ó—X¥�ÒÀÒ&†,¸HØøh¾i[ rx¦÷�ä»<1þFkÿ�Ø #à9ùô á#Í ¼UþÉø�  ÏÔaª´«=ÖDÑ•Ð@Ë݃û\ªN"– Ëûp¤†:á‡s…÷ëJîú~¸óíË2CñÌwŠÇ™öÕEù­·œòÅž¨åß·‹îŠ>!Ÿf8'àÃüÇÄ¡‡‡‡°ÿêÕ« >'<Çùâ‡ú�vÀE9í©™k¥è�i  €««ÖÆ%ðç¢Ô�ðά —JIü?Z;ÿ_Ìszæ›Gó¡Ù»¼–º\ó‰;<…µ°y¡ÝÿÛš àèàÚøÛ?ÿùÏ#ì xÍ·X àÛdqY]ÏâCF2¡µ§Œ€¬± _»ÊV©~ˆ:§ÓéÌ>3,T´4Pø\°�Ú<tæ›g¨½Ëqšã䱇×W†ØÊ�Ù‚²Ðí é˜àÇÚð\že‚Ø Í�œÐç>Y4Ÿ>ÔÊ!ÃÒaŸ�óG£ÔÞ^[XÅKWÕ@WÕÜÄú7øÏ¿þ¯ŸzµÏG W¯±r–°&ø;h.“¸Áš¸ÃÆCÒ�Çò9ÏŽ<Ù#§Ñ¾“#¬tö8cø_x&@ûž#Ì9ì Pð`šy2b'_ëÉ<Ç þ¦ð[G¾pjSÍXE¯Ue,¯Î)Ø+Køi ê@zùS� Ж+ Ü”.û|ÎväÍqóMI·‡ç0´/LýP¦=<6ùáÉ'> ;öˆ¿£½„weÄž€gϞŞ€?üá•ç‚=Ú$xÀ9Ýž€öOÕÆ)?;fÊÈ©ð­j  €~u/úã’ ™ÖGGÒ_dqK¥�/Ñ@ÔQDØÃ³ŸWOôþœöG¼�  ž`OÀ#�ü¿yñâÅo´'àB{ž ø9'àõÿ÷/»'€fµ}‹-Ÿ¾å_ÆÄ2Q£ÔVË;­hiàÊ(àsÕµÐÏ%>ÿ‡Œþ›Ëäí+¯x¥�ÒÀ˜qà Á~ÍÅ’ÏÞåþ­WšŠÝØ��°¥4ö×@ŸëäZ8úÎtH×Rè=.}”[^«®/áòW4_²½ÞeË'_Ÿ,|—é°)-!OëÍÇÀq02äÃÈõ( ò´Ág‰@rOD·5“çhÀG½¸ÿïÿþïœÀ«�:*à ï ˆzôc#`ÑŸ¹¡™Ê*#-”[Ze,­ª, ”nK€nÜyõ"‹ƒfŸy!0çÇ@øðm¸Lx¸¾vu2›6Ž´ {´)ðèOúÓÅ7ß|óäýû÷o´,ðúþç¼'À-2p÷™g¹yF@4‘µ©f¬á¢½( W-Å, ”îZ€jØöµ Y;‡¡­·L¦üÍ·àú þN‡:­ãÑ€˜º— ñͧì àÛ, 蘀'¯^½Š=únÀ±d¯òí€ ü9Ü5!ˆ�„ˆèúËÈÚ©ðŒʘQGEJ¥�û¢À=ƒ°Ážö; u<Í�óCíámÏä²ú �®H*ŠsÈ×Í\H~OûØÀ9#½x$ÃÀß0XCÛpŽ“Õ>uM.ÌÜÏ©ó×LÀçº)N§�2êQèÕ€;ÎÞÄb®½núù00/R4í@Öí�fOþ6m¨LPƒ¿y¹œ>#@rŒ´cOéªsGyž(¼-#ÿñx¼¯×cOå±'€o謀�Kž@v ßÎø1¦=5€ÆÊÍh  €uT¤4PXE â€q¦´³å‘nOºÃÐ!G}#Àžt\[^ΗËW>^ dI úXm(ä´àì øÏÿüÏ‘6>Ñ·Þh9àõ_ÿúWï h™ã„ñ|>ØÎŸ�ç!-‡i{Ö\ÑÐ@õ ”J+«7ƒ/á–Gãá]Ö·�Á¼ cP~7ºŸ1r9n+MR˜%�(iêÿ[í `ƒà.{ä÷È«3òž€ÛÀnG,;§gàw¸ÍcÙȯk(# krÍÃe¬ùP—_Xu ¼V‡¡Ù7ÏaS䜖ó¦\û6îÑ?—‡Ð:·/ñi 3€ÿô½~M ìê\€çò|ZøBçì HE}Ì N˜º¬S2YžÃ\Gh§Üdzªôðð4@gU®4ð5À³Ý®ŸwhŸGæéÄeBí³`à7µŒó5å²ø(k²0ºP¶”?öè´À-üþ÷¿ß'oÏž9ïŽÑÆ-Ç,Ö‰gÌG¾Œk£èT50UEJ¥�û¬>;Ç ü9n9ó7˜¸¡ìYä\že�w¥q̰9�C†ž>yòä[GþóŸ/ØðîÝ;ö¼éöÚñV�(yí çxû9áEF™Ã€ÐuÔLÀD—kû[ÀÚÞúºðÒÀÃЀl068Cq}ñEW�Á?Ïä:˜pÜåå:ÍKeÑ ­.βç|«<ùœ€vOÀä"\X?í› 2(aF^õ—Я׵à–°·¹.²4ð05è¶@ì+%­õ9Íá!šÁß3.¯ÏhË¡]ÝÔ?I6Õo+mCé:"`7ö Ôí ð·È`Ï€vwz+ÓgXÆåª¨0’ÊM¬ßO+zÏéhÊ•JËiÀÀ¼,mKíFæaLä0ÀÏ@^pÞ Ð–åxÊdñQi*‡s¶ôV@Œü9'€=ÿöoÿ6ýv€ ‚�°ÉÁDs\ö,Ög�Ž|YSk.`Mo|]vià¾k PoÂQ®ÁðÅp]Ô;þ–�fŸ�Ú«2`úßsä”þìñãÇ:&àÛc�p.úXç¼Õ·ÞüßÿýßèÍ›7€ùШÀ€žÏ�x¸EFB¡DÚ¤¶ÜŒB'm©ßÓ@+vCª9¥�ÒÀõiœÍ~Ù’ Þ6<@~Êë3Ècþ8 ز)pW~S³Oõjà·ÏŸ?çøà�9'Læœ}ß 9¸E =d|–Wõ•*]�Ÿ2Öã>×U–¬ä>À…ߺ>^+ã¸Áß3Ä©‡2 ô–…Ÿy}í±lGi\œ ÊÙÀ†À¾ ÿ¹nOÀ‰wÀo½Ó N˼>#À†mq8f'Ôþi<Rᇥ�2né~^¦ã¹¥&Ý«jJ·{»V­ÿçþÏké­·ÆÌoãðí(»Ïú6\?@ï2M3øS¦e]~¦]=Œ´ñ!+àpù`�ŠÚŒ='''¸ßýîwœp¡s»=µ' k´ÂWÕ@WÕ\O¾¶è)Vi 4pE ¶ÖžWrv9lÞ50C=òÏu_ö¿žËØV­ÊóŒKü\«ß}ÿý÷còjOÀ-¼}ýúõ›ÿýßÿeOÀ2#ôOÿ©Æ¾™R)ÏòQ¶ôUËŸôö Ce<ÈÛZUx˜Ä Ä‹®°ðûxm9”ïz2p#?ûe —ÓÖå¸ölÊ0pÌygl Tzì СA±'ym 7{ì>ƒÀ‡µiCFÅÏÈêZË@+Ôù�{ —w7—EQ®4P¸ ðÿPq9œk›÷œ—ær Ø^ð,€ë4ðÃw8×ïp.¯å9U›˜Ößáœe»ØÐ¦@ÞÐd@lŒãƒ›sÈŠ"t;âÙß(ËÚgXŽÌáh šÍ^±‡ �2nè.ÒÉdCÕ¬L±\k¹‡£�›¾Ÿ‹ð¤¯þ62-�;Ðæ%ÞòÝ)ʵÏàïò)ÏÀOzŽç²Ý¾–f™.Ìçƒ7˜  Ün™à\ånÊDzÀW_}u¨¥€ƒý×=à­ïxÿþý²{ÚjûŒdû2Zm=Àxð¦Ö%•¢Yé2at€œÝPØefêòáá³@ Ý'Ÿ�„\¶Û5?ó«¦Þubðv€¿è˜=2Æüã/¾ùæ›Çþ7zEðíßþö·‘ö´sQŸ.~ÂmãpÈÄè¿kSÍ ‘âÊx 7².£4°|3h:uØz ŽsšÃÁøqÙP< nð'î² ÷øÛ8U¹Ü\mænütO€fX8Ók‚lœî Ð>€0þcù¡s2`÷D“†ŒÒr~&3<„ÊÝO ”p?ï[µº4°¶|Ë–f…�†3ÍáÌ !ýPž�ÃP|6�!ÿ23.ê23oA8f$³©¼ìà‚ÿm…Ÿèœ€ØðñãDZâ•v”Êãbú<"æ'ñöVJÔí ºþÚheÜsZÀ=¿�Wm~_'xÕ²*_iಸìó·@)/û˶ù¶âÙ»Ì\ϵào~Ê{4Ú#A0~F»Tôëì ÐöĆ@ÅdÊ�ôá¡TÔ e÷ípFÒ˰6î-àݬjji 4p·0øÏ3h¡Ó3Íy‡f ô¦íÕ¶|ârÌì*þžFý§Z8zñâÅi÷í€=m|Çž€¿ÿýï£wïÞ´s€ø �w‰Èâæ¹¼�×õÖrÀDo+û[À5ßÿ᯹Ø*®4P¸c d_ô?wzž ÈÍo�ÜiæÑ,‡Lþ°cI Ë·Å«ˆÚpª8{¶ô�=±, ½cyO€‹55à;n:oS efòJeX3+H˸�›2dÝß@UUdi 4p0ÀU�ÓmÀsßÐõgÙÍ7m†ø’³çhÀ¶d½'àÑ{n{€Þ@nžãó6ZffA×]F@{#W$^À ÝþìÙßP5÷¦XtQîî4pÛúŸTw§„/¬ù2ÿçVßÄmdÚ6Éz3Íé™G¸ñÞë¤ ôŸwmÆéÛÇú^ÀÑoû[Î àÜ€Cm`OÀÆ’{òŸ¸öä›sOÃeÜÓWÍ. ¬“2@ì:Ý2åu:]Ó§~ó.Ó– ú>)JYyVÀá¶ìÜVÂ9ÞÊvñ˜Pù�‰«®S|øÝwß�(|þìÙ³=};à�>)üîÇôž€¶(f4ßpC† Òl0Ä�S[j& Qà]G˸ë;Põ—JKi°\ø–*«2¨š¶éÄ©?俥9Km�wüÉãënÛg>2� žd¶µ)p$`¬0€½¹···«óâœ'Ú0ïµ€!Ë+ÊRyCF@TÏ��®³Œ+ch+pª ¥�ÒÀÝi`ˆF£g¼]7Ÿr²œù¦û>j™–ºm-måzâlú£�ç ‚qX�ª~sGûüµ$0–1àsú>À·F€ã¤}RŽ"ÉY†t‡ÑQIIw,à.µ¿ÂuÏëÈV¸ÙÕ´ÑÀu??Àe.ïºëÎu•=ÄÏy [®�b´Î×½ˆ’™äcO€â¼`þsÄäcŸ€ÖýÇZ8Öž€8'àøøxÑž€ès<ÏPGNs¼Œ)f•\«t7ª-¥�ÒÀR@;SgÊñ ²#g�tØyÑ\²mžÛD¸Ï9Oß,À¼=”;Ï-JWÞMÉpNÀ“®œSÕw,½xþüùž6¾Ó²Àû{æ6C‰ž0è[>Çãb¤‹š °vpGНjK¥�Ëk»yi‹j¢Ìì)+»6î´>~n_›žã}F嶆¼\&ñìrZ¾†Ì—¼—0\¢ßWú™ü…Ú±©sv´À{8'`Þž€\}ü­¼ ú– ðwDm)#ÀʸZÀ(½ª, ”®®@pË”ÒàÙ‘†35?SË›æ´Ë„Õ‘Ós˜:Z#€tx­jcæÎñ¦ |;à‘ê` ZáùÀ‚nOÀ¾ÒŽ»td>)V‘.ÞÇ›¤ÎÊG]‚ópsæ•`ÍÝ2-à–~WÕѱ”+ ”.§þ7}ÿ�–×oN'ÍqÀ�8£|;xyÔï0yìYÇwØeå:s˜r{ât€~¬ÿ«Œ Õs"¹s…ÃâÐÙ'Ú0þÍo~3oOÀmðêTHÿt�ù,K:q—õ• …ܶ+à¶5^õ•JV±¸6Øá¾‹mÓˆ·†@Î×è9y^$Gz'³ÉW~JfçÚÀk‚±,ðõ×_óí€÷ì øùçŸ/´$`@Ÿ‚¶²ePŸ¶AË@ñä…fù'\FJ¸eWÀ-+¼ª+ ”îV_ÓeZ³Œ,2€«es¸­Ã2æ;ÍaŒeeçxK-c~ŽÃ3_tS³ ñmÉ€ŒÀÏ:ù8'€}j˅쀼'`¶!`oyÓjü üÈ9œe.#`ª‰Û ”p;z®ZJ¥�Ð@×Ë6ÇyçåC�]$Û¦;õL4öLµæÏ0iùmÜòÿØ úÀ€Gò±PTÕ29°Í^� –tN@ßžÀÜÀïpK þô‘qÜù‰;\F€”q[® €ÛÒôÖãâ ‹©ì7¤�/½?Cõ 5·Š½A ð,p?[š«lŸÇMm�ÇaÒìáµ.?C9ŒñÆS@Âþ‚NæD`?³'@›�ÿùŸÿùˆopNNtC߈<Ý�ÁÛÀžÓöñVžxÖÔ-Ò2nQÙUUi 4p·h�q™Ö”‘Íáyy‘£®LçÉäM‘ÍaÊé}—y•ërÞŽ2ìgI ö¨ÞÈ<âäïó6|½¦Ë´Yyöì!¯0˪ïTaf.ô-�­Ç�^hCàÉÇ�½_` Ø]]Äûx$Ã÷²qœe=`‰ª»Œ€ÐÄÍü”p3z­RK¥�Ñ@p_Ô@÷*Ž|Ôïü9ÜWžŸ4‡M)o°ïËÿ¼8)Påƒ |A�oòâm¨ÎX.Ð Ëâ·çdà7¨KlÆüû”Iƒ¿id¦~µe¨Ì™ *r9 ”p9}]›´žék+ë!´nú¹o×»Nýñ2÷¦•Éú!�¸er¸ï¿kÀ'Íy ~Ï ôå�Ç£Þ9ž€éžÉáŽå=Ò±&0�OtNÀ±‚#­,Ú0¯9^È2edmÜB¸ €[PrUQ( Ü? |i9á¿ìÕ�W`ÙžWžÓl dJ!óŒê±±à:M/Ñnfx;à™ó`¨Þî§OŸîjOÀÎ àÛÝž‹šö�r2…´†@ÖÞ-Ð2nAÉUEi 4p?5Œ¯ã rY€rŽçò3?ƒþv^Ê4øÃk�¿�;_K%·¥M�±'@iœ€ApN~…7vvv¶µ' Î èöô}; ƒ}®bb MÀŸY‡2²vn1\À-*»ª* ”îŸãÖ_å*(×�ègá`t?–5o#€r3ø“ÞÀüHíäŸÈó%AÊã"TÍæ¦xGGGc ì wõP¡=¬îDfàßg(�~¦‘QõÖž€ÐÄ—ÿ”ðå:Œøãé¹ô×TÍÊõ—[ Üôýn�‹úZÞ�¶¯«mà±öÍz÷Hëß#-z�´>¦à‡ê_ÄÏ×áp¦®wˆŸÑ¿åÎÔa—á6¡ú*œóP^ ÜÔµO1BeÆQÁäU9“÷��½'àBËGÒÑ–Î `I±Ë¸v€¼üm D™ª¿Œ€Ëhw@vzsÒ‹]( ”VB€—ÍaS7°�›?�’§uÔˆü„5Òi¹; |xÚ ßf‰4˜mynógÈ:_K]N¿åå¸ÃÙpYC”äp–w¸¥óä²,F@nióœdel=Òy´aWži>„@⦠$”r!#ô÷Û³J˜WÉ$­Œ€Å:º6‰Ù§øÚŠ­‚J¥�ÒÀÍh�3(šRá/qO—ðg#ÀàÏL€GÑ–%/~[N_»²,y\^ÎÛ†Û<Ä[žËr;·íu¾¾vùz ¤Ûðbù›œ¸£4†ÿúràTñ§š)8Tº×H³W0œã™: ZF@ÖÆ †Ë¸AåÞ§¢éÊ•VEíó¸¬Úvä2E&—ë°©Ó‰ø\/†€�5çqÝ9Íe�æ2,%ÝàÜæsºå‘µoóäx_XÀ=m³Ó]íâºÚkuÛÈ›ÿøHle»8R~€>†ttª=„¾µ'`“å“fI€äyàÏÁ§òLCNmª=}[À+`�‚*¹4P¸_èê³F›ÍaÍ3?g®M£f+C:<�†§å8CÎkž)€L>SøÄsù›oYÓ̇gþ¼°óä²]·ÛFeôµ3ZaIà«îú•eãByxUðBçìh©äƒ¾ðñÕ«WCç¸:üIÉ“pß,òYÎÆ@”  1å–Ö@K«ªK¥�U×À•1€¸=m'lç°ÓÛx.ÇaS—ÑÆá»œ¾4Òáç:& çü}Ô²-5ð›?/î4ϘÂÏáIk>µÇñŽrT0GÓÞ]å%Î{t>@L!è¼ f ò9üL»bƒÄ¡‹ �2²æ..à’ +ñÒ@ià~h0ÌÎqƒ$i¥ ѦE0úÇ™×R šïx¦9-׉Œã9l^¦óÂmñ>г‘Ñ^ëöF–4(An aÚßy‰mùœ€g’眀léÉ Í'„OTv>' Š¡(�ËaXŽSŽo¢y]–RFÀŒ:–�”°¼®VZ’?l¹‡­�Iÿ:¹Æ®]¨¯ýÔß*-ÖgÚH` >zÖxn:þgòs«þ¼åövÜ”K3ˆZ&ëÝ*1oµ|¦Î“Ûâº,ç´ë }׸óÜàÝ·yƒ?iNÏ|ɲ€sør NbGò'*Ó'Æžm ä� ^ <Öžm ˜î ˆ|¤H®�c`�ذ°h–+#ÀZ¹-àÊ*ÑÒÀ�k€Y�ÐöëØ”vª÷­ñtäa6@î¼7º aúêKtðtòëso3—Fgo—ÃæÝšÛî0´ÏIs¸BôI:4‡ÍË´OGÎã4ä[gÞuRÊj½¯Á{h<ž%_w_Ûo8p=Äv®=ËŽg¨ã·é*ŠoL÷Hž·xUäù¹ ƒ �°�=òížšc÷é!6ç°· leËø¤³…¡2ª¨J+¢½ó:‚- €#Js¸¿áè•nJÏH§NFÿÛ:Äe›µ^¨üŽÊ§N]½}éèñäƒÚõñœ¶ªÔíÏ´ ïóüEr}ëÇq§ezU½P†ë»nJÙö”Mû|_׊1`°ÏÔù0s»ºrØð÷X2ÄžN Ô U,œ)@Ýí ð9ñˆ*_¥XœÓ¼`:IýôåwQ8�«îš ø¤§™P3êX݈žáÕmÜ ´ì¡éÇ2T½stÒgšê×ÙcÊ ðø0:’?ÔÙô§:=ž€›û!= €Ž¯Åoþ�}ò��©]–‚Ê(¸hÀbÞm^Uý»]Ð6lžAnFçÝņþC�ut.ÀézÁ˜ÎøžvÚ€»Àß~ëÉ“Ñγg£myèŽâ»2 ÂË `¦ ëÈg(åÁ·ËaóV�æ6æk2ðÃ#̵Ùs ðÑ=Ô|(Îñ¾pôü8o›Dù}Îü«Ð¾<ð2ßqóÐAæ9œÛ†>¬øÈxO€õÙ-!€-OtÍßtrÛÒV“¨ãâÙ³gì Ø×ž€�Ý· ÞñØ’GμIlö·›¾ ¦Áߊ$Ÿy³¹*6£�2fÔQ‘ÒÀjh° #e:–M~GåÐ�*ê-ÿy3:økA5èH3?½^PÀLáiÊH�Øä¡›OŸŽ¶¿ù&üŽèîW_�ž<>:e€M�tîÖMÃÚæ0Ú"¼êÎí…f 3hqMÙs=¾N�°y–s|�LKþôé1óžGsZÓâÙ÷ñrz#ëë¶@:úÃAáC1DYïŸî P×à¯íØ£3fú¼9°¥|¼M —´GÛ;òM‚I´§Œ€¬!…ËhRÑÒÀ]i €¡vû³Ù�‘ÿ[MûïkäøŸw#À?|gÐÛe€ëðЉ²™U —Ôô!÷0Îüç*ëLÆ„†at§êäÇ ?Ñ~\œ0Õ} ¤«_ P lï&å@ûÊw:4û Z„%ʱ§¬,oàGÖ2¦ÈžG#±çÇùœD�ó\_ºy™æ0å9žÃðìñ-çr è"SËP.ÇѯõÌ1ÃÚ˲¥ødäxU�Ï ã”tÊ€‹½½½Ø ½�'|VÁÎÙhãfÏ£ßg�™¸aª·Œ4Ò¹2¬‰¢¥�Ѐ:ÄÖþ�;à�Öüý3òÇo¿};Úbô/ ç]~(Ã&z9ùR¢÷4àþé3ÃÀ¨_s±£sùS-3èüÖщ:èCÅ�EÉÇáA̰' I¼¥ÔÛuò¹ צ|ô„ËaWbžÛÍžv·>—gYß SÊoÃæeJ¸Ï¹Ž6ÍílùŽ¥»�ȵᾼ–qy™¶á¾8ˆãF{6ÀqóÉgâ�é3H�‘U=eLtV3�nœè™»ñ:n²‚ûÞþ›ÔÍu” 8Ä=£tyÞóÇ`·?þXógÚ‹‘¿Òv4C€õn�@ïg# mSŒü©CÙSÕ�£g$Dýgšî×\l¼%Àž�]yuÆ£½&ÈÙMònÁßñ tCÏÍŸ²û\.³/½åQ~ëÝþL3HùšÈG˜:[O=æ9œ)á>·¨ý‹ôÑ—n4‡©ßq·¥•qzí“5oµ^³ŒÛ"=óh2ê�A§døtð¾x‡znÆJ¿à´@Å5u8–=p.»@Qgš U|,ÀH¾;XSxÙÁoy9}-Ã5°–·½.zÕ4ÀG}õ³!Ïô?ï÷ë©Øå¿�Öüc³ž.ÀàÍ3ôtî¹Nz=�0|‚;|ûSÕ?]оƒS�ü5�eój  €Ø(£À΀™)@gCÀrÂM8Ê¥¾¡òá·Þ 5øC‘£ÝP_eãqç¸ù™îsÎ×—�zç¹¾tóÑ\~–ÍaËd^&ÞçÉ‹ÎH3µ\.ˆ¿¡½ZÐQ;O¥ûoüz9eoKûØ'€®9:xSÀ £}Q];?¶9N+Ò4ËÀ‹J;TÏäæZb ikxÓë’WOôEõÄ�?ï‹p*ðg}žWýbäŸÖü[ð–ó €{?÷pPƒ?iî �Îf@–ÎTŸÎm�:+`¬×�õÆÀ¦fâè`œ`�l)šÍ<â·éÔ¯GuîÛi Ž8aû þ¤“ŸÛN{—ár‡(r}Îò}iðÜîˤ;ÏÍåÉôñáÍã·éŽ›¢C‡Û6 wÿ€ÜSyÎØ_Naˆiû˘/ êmÕGþoÞ¼iÏ àQ¶%Ê#lŸíɃоdüÈ›ÒÆµ7Êà -W¸c 0Àº<'þiÊ“×ÿ>›�LŒþ¡j/ž^Дž�Ó†ÀÜÅ#ÌÈ¥fÒeœ©nŽÿ=—!ÂÞ€�ÿX‡±±¥·ptîtÔå· 3Ï Ü”£lêq7Ïa¨ ä¸;§¹íPröŽÏ£¤õ9ʘçÜÖ!™6}(nþ¥ü¡4ø9-‡�ožŒÓ2m�ëAGÿbðV¯ >—çœÍøŸ�|õÕWGJ?Q^^ <‘!pøîÝ»Ø((ÉÍ�ÚŸXzž8ÒÛ°yеwe¬é#ÀŸ´ÜÝkÀ"kó1  =Òˆ#àDÀ{.¿!`æ}}àjž§t:w×=O:F@¬ùw<§ð©ŽÈ'c€CƒÎd„œª-68ÐTÇ=:ïFÖtðM®%‡‰óœùUåÔ]çóç:\¦ëÍ|´•4S7†4Úí¶›ºÝÐ&_wY™Z&ó®öuå¼-Ïñ!J^§å°y™æp+KÚ2é–ƒ¢oÑèpÌ�Ç‘ �;òzœ6Ù -bOÀ‘ž1=‚�8:øLo°'ã`Sá ~lM)‹0u8ì¸XÓ¿árIe$eT°4pWˆ�¼ã¿}@÷LÆ€^’m@j=Û�øù3ãéQs/H^@Ÿ÷ªlô–#ÜT}”ÅÑÂ:¦-Ú mÚ£mù½ @3XðœfÚõý”zcŽ:\¿ÃøC'Øó©)Nƒ?ïzÈá:L3ïS‰ŸBYîwùmës-ßqSò8lšy9ìôeè²2Èõy×˳ÄRú‘ÞuúôkÏä¿_ûQŸlê{útÅž&¤&¯ øuNÀÆË—/™ȳ~Ü)ÞÀoÅ9žÓà•“ʨǠ4° #äõ<¾ê§Ï£…pªù…Fãê%{�ßÃz?@àgH…w�HOGOééÇ=g:5¨CuQÎ&ÓßjÇÔ`#@#ÿ3NDd»Q5í7Ø9œ)²Â7娃z35嶺þœÖ‚{=äÉ<—‘©ÓñrúP˜¶ ¹6-Ç…—M·\5�ö9ÜRô Ͼ•ÕóâyRxGÿžþ¢úhåž¾X½ËãzòñãÇ#þ©(òš;”�<Æž�>¾ #‹Giö FêèÀóS@IDAT4h¹NeÔ£PX 0ÀÚ{ž€™ØPZîégðwfÀŸÅT€ˆ¦·ƒz•0Æ€óL)õ@•NÝì àHb €S�?Ë%žŽÀË^Ygâ $�»nçöôQxxŽ›×þn»¯�öfÞPû-“Óûx9½ Ó®y®MŸÏi›RÇ¢°Ó‡¨Ûét—I¼õ9�{!Ç,À†À^o¶Ž™àí€Ø 4¶¾xñâ£N ÔÑzQåˆÍlHáçñ^äQ$2¦ –³ʰ&î9;{~)wÒüÛÖ_ Ä}T/¯²!�Ñ¿�ö3°§'k½�œ^‘?µ ß=Ÿ‡LÄ[åÐx%bxØÇÁAŠ3R£�€e´·Ç@�¤åësø:uÜ–å:|]n‡å ö6�…×gÌ�æëpÙ-E¦ÏYÎimÜüEÔm’kÓ—�g¹¦žwØ4§g^æÆ‘ž½y‰Æèß2ZàÀ=ÝN ÜS˜G÷ƒž¹ý}éP/ż×Õ�S-*�ƒ‚�ñ£õã�³â~Ôã‘V¼\£�2…T´4pÛ0@0LêL�‡ðÔÏi”‡@iãQ¬/IiÛÔwÀïx”›Ó»0�z›–y_²)—ÏõîFœÓ¶¹�¤ùšL�FÜáLƒÙüXÖì6¾ˆïthn{æ;ܦ/_$×Ö�å6u[Ú<Ž[ê°ÓL�ƽÁŸqj _äí€ïÄ×YTÏF~Êÿíoû 4N ð3ècpÃ2or?Jþ4# ò˜�° ikåÊX«Û]»ªˆ¨Óÿ n{.âæå0Ř¿ Èi2ýb”mÀ?ÒR{£üÏéNƒª¿…ܺs½6Üççvf Ìq‡3è"²ì2òCå˜ï¶;ÞÒ6}^Üi¦n«ã.;LJ–…f™7ß´Mƒß¥mèu{â¬62 ð\tÌfAN¤$¬·>Èð6—<úoÁßq8|~üÛ8ÍZKWÀZÞöºèUЀ;ßhKž¼Óñ¢ËºëN8ç /U.õ7m£ÝÙSñÜÉç²}�CéYö:ÃCõ2n¯—3ÜFêwxˆµÑòN_·Ü<:t ÎӦϋ;Í”2r3Ÿ´EqdìæÉæ´6LoàWyœÈrÓ#ñž üGÚ°+žVÄÎ>|óÍ7¯ô†@^åò¶�ü[ð§™} <Õ¿¶³eðh¬ ãO±Îní®ŸŽPÀ¤aÐHßxåŽóøÕ3NçÑÃàùN¨ÁÞÔiô„løË2„Yÿ'ÍrÎ7CÕ†È'JÝz1;ê§ áýL6 ²Ès?‘¹ê}móeàÒe}ææÕç´vã_.Äå›’–ÃYÖá6½�/S†ËÊ´½öœF¸MoãY¦/­-/Ëç´EyûÒ[^ŽNq£ÏóÞ}�z#€óûC½ð\3�eð <?€Ÿ=�1…eÏ£îN•p9i  €z Jw¨ƒ�À¯w¡âë{§ú¯Üñ¥¾s¥¸[J�ÏÀïŽÞ0ƒ;€ÏSmˈüÔ! ÇŸÉë°öø�Îl�/N? LšÊ¹íP‡')w÷‹Ý‡¡}ŽQ§Ûî<ÈvžÌwZ_Yæµòæ/“7Ë.v;-߯[þPºåL‡ä†øÎ—iŸlæ9ÜRÊC€oö²G· ÷9.˜“ñlp“y?º~ WÖõte¬ç}¯«^! h¤âc;:…ïTþDá1§îjjoÁÄéÉäqÄsG^x¤·3Î øÏ08T§>ÍF€æ_G›2ø,0³ê™%9IÚmßÇ›†QÈ ýP¨Ÿ°Ûa~®Öé–q˘ï8´�—ÓÛðUåûÚÛ–�ãóäsZçü9¼ŒL–ÏáyysšÃ¦.ƒ¸<Ïô?ß@a0 ŸÁ?�þö߀r²_{З>¦® €©**P¸; Ðß1 ÓObàD3ú$ ¢½Knz¶oQ €<|÷tP§õQ–ê�ÕwÆ «êÆ3€32&ýò'4¸AíUÝÔåtç5� ÝP€z¨¿¯>§9=·37ÇüÌ#<Äoå.¿j¹}טënÓÛx–%¼(½•_6Þ–›ãMXÑ�m�ø¡"[�„ý»šàÃA€¿�¾¥ìs˜&:y9om\·p«õVKï3¡{Äxh×sݪïëØáÍxžú6FÛ]¦á�ŸKòöôz~ª ô`æòæ)Žt 6�ÃÇÌ€ê>S]ú.k|`CŸÉÑY¬±°¥6` °OAè0)SíÁµ×ÖoŸ�6ÍùiË$æµå9Ír™æj2Ÿ<Ž[†xë,×ò¯+î¶_¶¼¾¶¶e´2m¼•¿‰x[ç@œ%��uΫ„cä/YByÞ‚¾ãÜ,ÿ ç›GØ@ï°éM\æ½(³ €¾MíÃ}ÃÕUñ÷Dtòx6¢±ãÿLôLô/ÐѧÐF:òl4Ö(|,¾�ßÐ!<׋ç z3÷h}= ªp:4^`_@ì ¸ŸþúðH_ÜÐW7E·d0+ÁÌ+¯0(Wõßµã¿5ÔŽœæ°ÿ‹Î“ùðœnþÐõYn(ýKø¹_RN_Þ¡vñûʸn^[wÏõI7ìØ÷ãž)`>Ï»(ƒ¾iðUïZ¾ P€‹ óæ¨®Š¼' “·üã@ºÀùDà6àê%èÑ1€öè3h“yOÉÚð%çž §w³ªû ƒ¬ÿwÀÅ×_�F26dlbˆïM€|0—í:ÿ1ôjç4x‹ÂÎcjyÇ¡¹ìÌ¿Îp_½¹üeÚ°¨Œ\^_5ß2m¢žEå/J§ FÿÍ �ã= ¾Ó8ep팀2>=×Zæa¾Ö «°{¡w–Ѐ¿ó1ú?FçÝ @lÄ„u…|„g[ÇòøÙe MC.�þ {À”‡xë@31 Ó×¶´ °Å € ‘é €Œ;_�ãwMùßµmò~Noù‹ÚnùEr7•îößTù”{Ùk¼®6-S¯ê ñíãnpoi\—E`À‘Ög ˆ?,v·t?—yÀo©)KUsßÚ»ÔEÝ¢cvÄú˜òÕ×ÍGc�÷¯��Œô±óÑ�>¸óþà ¼?ík´,¾zr,ð�×ñ$ëéèѨÁÀî]Qôfô޹ÇCβgÊ€ÿ#Ïô¿Àþ⫯F›ÿí/F;šØo€õÉ1ýß>m\U-%ƒÜe\_=9ÖwŸ,éðMÉë<}ò¹ìu /«�¬ËëÖ‘Û`ªº þAUŸs?ò6 rSHó_ÁaÓÙ?hεFá2Öèf×¥Þ¾è$ñ|HçDnÐ×÷MGû}ç?Šüï;:~ÿ^GŸè›'Ê'äi;ôH¤Oöè2èÅr€Ÿ�|6r¯(öÔ!Ëk~¼R¯ûiMŸ)ÿÓÎ�ÿï¿m~÷ÝhSÀ® �=Í0ý›ÿ”�Î8{îNšxçxËwÞÛ¢ÔoÀ‚æ¶ µÁrCé·Í_¤Ãëhï¢:ò5[§™wÓa]£ y~äÍË”&ïsð×Ú( ï±(^ià4@‡l�p,Ð×—ÍF‡òîoö÷Goñ?ŽÞÁÓlÀÉ@Ï>|í‰÷HFƒE=’p*ÏÞ½55Zð÷0¨íÙø•/ÞógÄ/`?À³éï\#ý Fþ2vdì~ûíÄÐèŸ €ÙÈjiÁâ²ñ\Öm„ Xm;‡€³•»�6.SÇ*µw‘Ž†ÚºÌu¶2*˳~Ì/þ6 \lû1­hku»ëboSt~x¦ýcÊ_à~ àÿ(Ð#ÐÿU£ü_Þ½ ú¾Œû �ÿ×â}-à+73L×þüié½ÿÜæ0é8o<€¯û Øÿ Mõã™ößøe<†Ê(àÄUÖþcú_õâèðíÏ”0n0L¤nÿ—vµ ´¨­­üí·z¶ÆûÔÞ>}Ï^Íåbºí fŸ§`ÿ L3�ðÚ»2ÖäXÔi¬‰®õ230ÆÇ¿hLù ÐOàLý�>°Æ/ðÿ� Œü[þ� …å…îH~WÃåe †:¬Á �9 G[–'³ ’�z]¿®0z;Òö>ÓŸóØäÇ!?0t¡ÝýýØì'` #@~G;ÿw”Æi„ì7˜¾ûO¹Wç»Vå7…-z¾ó½Z$ë¢�gYyç»+ºjí½îö¨¼eÁß·"ƒ¿o <ÛÆæ­%-`-o{]ôukàèÙÔe�Ÿ�}ûòy¯ñШžuþ÷¢ïd0õÿNòûð1†ƒ¼z¹8ðgGÀ¿«òÉïI†¥¾ûÄÛ/¼Âœ@‡‹�· é ÄÏ4�ϱÂçò¼JÈA?P^ïìÙèÝeÔ¿­4^ù3h÷QtgPÌÔ²ÖmÏù,³Ê”öÄV¹�nÛªµ÷¦Úƒ! kîó¨"~[ME“ÊHʨ`ià*$Øá?è ì½Æëû¬ñË¿àP³Æ�g—ÿ�ü¡x‡ï±òþ€·Pgòº€@þ‘äØ  sPG;p6n+mSÆÃ¦êc ÃŒ�(C4ö üÇÚÜw"Ï.ÿ‘@ŸÓý Û¬ñË?’ß“gÔ?ÝôÇlCñ;Œ~δ�?ă_×xw×âöÞvû®«=€¾½îGø›ÇíÊáËܾµ“-`íny]ðuj€ø²Ã?FýLñkß/^ã×:ÿk �ö9ôH>Nþ´å)ƒ‘?~³ó€<À^gÎxŒÎ`z>vÿKîBqôQCb§?ÀX ~$ð?Öæ¾3Þí—Àá>P ñoOËúÆêäcDýLJÿÆ xƒ¾Ã¦}½y9òÙq­ÜËUu«Ö¾«´Gú5ÀgŠÊ_Uõ¯\»ÊX¹[²\ƒøã”û¤�ëÖG_'Ïž‘:ëüqˆ�(küïØÍ/Ï®þ×2~ðc@ß° pþ(ïé~Zo¨ànúœßY¿²Gë~3¥Ïg‚ñÛª_ßE�Ù ®Ÿem:ˆ=€;Sÿcþ�ÖöOµ±oSÀ^¼‘ŒˆÇ2Ø#à³Ñ/6û)Þ¿ukj­côH!a|pB Ë0åãB)PÊŒòi'q(A;ïr—¡m[幬ü¢òÚôü¼Üt]mÝËÄW­}˶Ǻœ>;b–ãñ±wŠ3?ÓIJýÎh  €uT¤4Я�XW{Yç?ÖˆŸµ~(kû¯ü¯ùxÅ�5~ñßJà?X2JgG>Îà?‰Mâðð|àPëýï™®ïòn±>�—°+ÞÉØÇWRÕŽ ùM¨äΔw¬�þGü1à¯ð¦òò�>÷ûXéXžW w;Ž£~»0ír<¥0å˜qˆ}¢„éiø•7¨Ê�N»£„½©£ ø#ñ¿é€ðf¡úâ{’ß�̹ÀþD (ð?–àßzÇot¤2ÇÊËqÀ»]€oöùÔƒr òg24ÐýLghù»2)‡öÅ…º¥6F¼£”ogàwÜtˆïô¢_Éàb³!�ÃCŠ(# ÑL�B*ZÈüqÐxµO€Çf?Þççu>oô{)ðÿQþ}/0>Åh�ªüî”%ÎþÀ ßÉñÎÿ‘ÀR¨<â{;€©@}Sa €§*@d€Y}$}òaFÔ-C€€C�?³‘Ÿ2äõ…õ0Jxóà„kSœ1Àë…*8gÀ…F¸ã“àŸ øÇºÎ± fEÂ�ŒiäS»¡ñƒÚÏáB„™AІ¡�ëD×Q_´bòC¼�ŸD*øÀ4 û̓—.WØ…3˜çðÓÂÍ^N7«ß+—Þv€W.hE3Þõõ&­ƒ^ 1â@R±Ã_`;üxP¦üÿ˜êè¿Tø'Íü*úR”ÓüpÓZxFB§=]›È³ö¯yóÑ9£f �fxø…÷±üSåa$£wÉ_tþ„é�ü™ |"c€36ñ€±Êã̓cåOª“ï Ø°>Ð�õÁ™l4dÔ¢ëKÐsFü]9Ü_{À=fÔ‘·vd¨ÄÛ´K×:ýê`g8,ûœ,+§æÝˆ[Tßóv# (tÕÚ×¶gýH¦zâæ9t PýHÛÅÃPàÿ µõP È+€¢|IPóíaL°œ@»8E0Ê=�g$ÎÌA¢Ô�N¼÷áBz8ÕµžÉèŸüP=:aÆÀ•ÇÈ3[j׎ ”ðš�ðáC¼ŠˆQÀ „€† Ôž6eðÈáI…õû�5Ðcp¹ÝÃö�¯üf®­ €›Ñk•z�4@ǨVÀϱ½Ç€¹À.>Ö##~Qvó³¾ÿ�t�ïóC:#æK^ÿ̰�#¿€�Ñ83Œ�pÖÖ™_8ÖŒ'r@³qÐ�ÚÎìÀ±F׼ȇÿ°æ�Á’B¼] ü”q¤¼úäP€¿$£NÚϨ߆ÀüöíèèÍ› gz»aðwž�‡áUN,Cˆ†ƒR·€�· [j'Æéƒ¢{zMñ± �'j3ÆŽ÷po†Œƒ¿é¤²ú] ð`u×\í ^b7¨Ü*zõ5Àà ±^/€÷ù9̇5~¿Ú÷Za¦ö_ ¡ïüGHñ�žÈ{­ß3—ºzÚÑù˜ MÎ0Úh€?à(àÍ €ä8c ŵŸd1¦3’Å ˜’‹ÉˆÏ †oÄ[ â{êŸõ}¦úþû?ÿ<Úÿé§Ñ©Â[ZúØ–‡nJq&�ÊñÇŠ²ÄÒDœF(º¡¶ññ¡m}{`[esØúçÚâ4B µðÇòÙ³ã;\tí4PFÀÞò2¾P�Ëdï¡ôñ–)kUdî[û ôÖŸ§úõãôu�ìÙ½Ïÿwz—Ÿwúño:ðÇÀs èìýjŸË°�FzÊÛ:k¦T ÇˆÝSÿS#@|6í�–ŒÞÉ[<Ïðµ¿Xûp€”ô®RÚËîÿcñè0S¦(Ë€ñ ,]àcôÿêÕèø×_Gã_~�½~£ÿ ée“YMv®ƒ¸Ã\3|‡€¶�”ï\yN1äYbàuGf!˜þç~å·˜ýÈa®›ûh#ÁõCWíù¼l{Úç5_ÛM„µï¦ÛÓÖÓõÝ„ïc™eÜÀ]Ësß@UUä%5@Ç(1ÍÐóy^@Ÿ3û½¶�—çÌ~(SþŒú9Η�õüñJŸèµ8Ê‘÷i€<7árŒŠc çM�C塌¾I‹5~¥ØjÔÍ×ÿ0 ÿp ˆà3ÆÆ , ®�o œØOd�hºŸÿ‰€$àßQ|GiÛÒÉNÜÔïÊ£6kŠÞ™I8S¹±¨K—º§òì·Ø” ²¼]ÀñÄø8ºXíšêDá þ9MÅ—+ ”–Ð@K(é2"y4B§Tnu4à/p�ÆúxÙ{�ðù0kû|–ÊÆ>Þá�õ}QÖø�^áË”? ïÂëò tWºR•ƒãIÉ>6Ñö�y„»g å~€”3ݘ!@ž|i³îƃäÚ'q: l´€Žà©íACψ™Ñ¿ÂçÓ˜M _räc­­‘Â5KW¦z b² Ýœjà‚©é&FþJã3Åtöžþ§,Œ€Ö1ãÀ}À#Ë=ÀQ´C|Ž.æ{'2^0 vÅ9Ï`K3½Gúô½À4? ~®M£ÒžŸœ§'ùÖY«ÖÞUkÏ­ß�ZaôÆ®ëe¹#gº™iþôHô@ÀÅZ?¯î½˜ñÁÎí‡Æ´¿ÒÞ!§¼áµ®ñ÷ÜCr€¾Ò‰è«îAðï)'@\€Nžxß^à#f(@9¯ó¶Ùä7 ŽÑ•<›ôN5Âk~ìòg³kþÛJ‹‘¿Úað‡æ€¸ŽÔNêÀ(#@týð' Ïçš8—QÆþ…SµC`,£€OcÄñÁ2 ìúŒ€0üT– dç]¿Ë*ZXG ”°Žwý�^3�¿=ù°ÁozrŸ@Œ3ûÙÑôà x>"'p;»‘pÌHWÉ›P›Á#€‘úÔÐÙ€2êŸú¾†$ð€2ðäíq¾.(×ʨœC�Ð׆€ÿ¢ó[Ò׎tú?o´àßθƙ:Tà×(JšÓµA 6žÉãP£µ;N1ø«îMͰÔÀÞ†0t$ã¦*2Àß<âåJ¥�~ ”Я—âÞS Ø0˜qfÿ¾ä�F±? \ø<ï/ŒüÅ{/0cªÊ:¼ú&p»ö5þ]ü%q�Ø}� Ðì“§œ0DyÀ>ŽÓµÐÍôå¡(œ€™vßIgŒøø»¦ÿ½æŸgþv€Ñ>×Ⲍ°ÁŸ™ÜL:úgO€®ƒ=\÷‰ÀüâEœA°¥váÙóUA|Kó aÜ�‰õSXc ”ð@oþCìôÜ¡sË ô@ŒÔAʳÎÏ?^ñc�ÏN €?ŒQFþûÊ»/y<ßnݩΙé@/�‹‘;T÷ýl[q¥#r¿|l$¯.Ìù§×Ø\/zxO4p, Þ’~vE7ñâmÉH2Ðú}à7?´O:FÞ<ÓrÕùt?8,èL÷ŒW9„€ÀŸó8——Zð'Îuçç&2é§ÕG·œi_N» ºjímÛ³júº‹{tê,à>Ü¥jãg0fÖøì꟮ó+̹ýq^G=íÿN²€œà'�ðˆô³Jn‰F@�Øpyôßv®nà©L“h—7Œ‡ÎpˆòœîL”›úÄþ¤¯y@G`ì wÈ{&€…3�3¸C}Þ:°aÐ[Žî ¯RÖ†ŸÏsщÚÂþƒÍnp¢8ŒÇ&n?¤¿È\?¥�5Ö@k|óïë¥Ó±3]ïõjŽíåä>š—“ûø8Óûöx¾Îwˆ‘ Š?îFýl>£¼ÛvaxÕ� ¦¾côo#`À[ðCYƒG§üyXJì›àd>¿£0ïêo*PnA›ö›G:À¯ÓÂg˜öô?í&ŽwÞ ªƒC€¢€Ý@×–-QFþgÚ@;·$c°Ç À9nàÏ”ô2ÐB¹ÒÀ' ”ðIºp§N§Ïñ½Œú÷™âg}_¯¬Ùs ÏEx–$;Ý4^ë6(owsñQ(`3šæf Âòñ¡æ)O¼ ˜ÁŸ¼”EFÉC¹QÀ$ =0 ÐgÀ®<ïêcô͸ÝÄéL0ôÉŸòЯÂP 6øc ä|SPW;ˆ3úç„@ Âa àTàÏò÷Þ /ѹÀÏýµ#\F€µQ´40Ù¿Sz¸‡X‡ŽÌ`À€ Œ¼EYãçC=1ÚåU>ƒ?ïöóÕ>¦ù?Êï«ãçµ>ÜÌÛt ˆ¢ZÀH�©7ø{äðüik_{áI†‘/€”0eYÞtÁµ†®Vt,à�#{ff 5¦mNí7 cv`@~<òè�%䈷.ÊD'�^x+�QA‰ãÕ¦é³!ù¡°ë 7Õ‰.A/›×u^¢Šk]ÔÞ›nß]×­Ê|À…Õ À¾¹÷ùÒØØGG�¾h¼Ë¯Ñ)çÅózçó¿øå¡o4 ÀSÿoÿ‘Ê`ä á¦à?‰ÞéïDk@;ù~Å[Ðwûƒ:#}M�ç÷þ#?W·$ø[.ŸxÀÙ�§eú(ùfò6qòätâ‹õgÏó�ã‹Â”Ÿe Hð^Ô†J¿; p�¸WånVeܬ~«ô+h :îü~v÷Ç{ú¬õïËó.ÿ/~{võÇ¿fâ]~uìì�Ã|Ô†•éJ N'aäóμ퓧×á<Nþ³ûzò¥"†ƒj[Íe:ài{ºR‰›—Ã$›ß‰.E¦íÑó°¬u¥kqZà�î‡+#àæïS7¯ãªá0è@ýÇ»é¬õ Øy�ÏŸç})ðÿQþ}Ï1Fƒ|P@õ2ú¿ ð\¢É— ðWÛ‚âÊMGçé{Àß³Q°ÒÚö£�iû;5È�pU×§,�K—@ç2¥�¡ð¢ ¦àßµ‰åˆÏxNs»©/ñ¢~Åq_¤—(¡~JKe¬èýüÒΊN°uîéÜ©.žå`:0é;K~¨}Cü\6á\/mi§üÇù3¢ÇOOòØó>?FÀOšàÃ=|À‡]þÓr ´ ØÆCú–º{ Mü4ú÷¦¿ØøG[{Ú‹Îfîªd�çðŸxï¿3È»è>̔ө�Í„|;€sø¡¼kÏg‡½–Ÿ©Ûbê46øyÙ%§±þOšåœ6C»ºhm�@»ëš^S~~›g×ÏuwIÓ眼¤M˰À ÑEõЖ»twݾ»®ÿ.u¿Ju—°JwãÛ¯y1�Úm¢ŠÍ^)LzF¤Œ*yõ Èd×þ�_¶“ Àïê�Q»Ÿµ}¯ñü4ªçˆÞ�Z×�wú5ÍÏÚÿ{yÖúß(mŸ%‚®3½Û.5k§?À)9¼@)FûÒmìڗΧÓÿýE7®Sy§ÀHþ$çäÿ,Im2èžë^Ÿé þðºÿg*ûLu¸[ÊuÀ3ðDZÙ/ƒ;†´-#òS‡®ÏQÀÚñ¡úÛå žÑ(—6w÷]E΄ûâðpË>Ÿéú- f˜ �UæhÛ �Ò €<|—uÚP9±Ô öÇ DþÓ=‹| 0f¡$å©íùyRáÌkãùytZÑû¡�¥Ÿçûq9+ÕÊ2návô=À}¼/i œ=å°1Ý/Àdz?x Ž5¢æluhœø† pn€:| €³§OGgúû©èŽ!¦©;°¢3¦Sf¦ D~å��d¹‹ç%Œ¦ü~¯ï Üã$?ÿ[ÎéÇкþ+µó•ÚöZôÆ‚®‘÷ùñŒg\Wï o#jgh `㥿ét>×Aš¼Ô—a [®Ëﲬç™Ré¬×‰Ï�™ê?¥<Ý×�ðXþDá±Ú·#>Óú[’ÇžÜéO`o OZ®‘0÷Ìû˜PÝ| ˜ïlè™ÛЧ€7f)*69òœqÝÉÑöÖµ<âm¾6ÏmÇ/Ûžöšnº½mûn»þ›¾¾*¢�2nàIÈž¾�ª¦Eò�QµÓü€»½u,`=ÀŽåOçëkœµåÀ• ›2ŽÕ ÊØÝ~ü8:ãM uÊÛ¢{â±L€ßV'ík5�6N¿Êس©�]ý^ß7emŸ©ÿðj£~Žó=À`ÐõÅ+}=~®g¥Ã¯€/¨u:âw¸·Yˆ›\Ñæ$C˜){ç7ø£÷>Ý÷ê=ÊGÇ.ʳ)<LÅSæ®wO ¼§gƒpC÷�ãz7E9°'ÚÑøÛ0% Ôà Ðe_@ì P]Ì<œëY=>Úøæ›Ñ¦ž½-=c×z®Î:–�€ r5Ðùsn?ëûÔ<`ïõý8·_íh×÷�Ô¦ð� ¥² *Ëkg$¥›p舀A¿ÛxV�±ÜD:~}½±QN'úV~@e”‘ŠûðñÒoÌ)…Y€(×à¯çÀêÜ™°àÂàÛðÝÕF2íÇ·€Á? µßÀÅ×_‡°¡gkK³[2><Û×Ù££¨h‰ŸÐór%RX ”p�w9:§®¼»èhbä¯N:>é*€ÝèèXÜÿÑë×£ñË—£“_�ˆž‰¿ð xƒ*ŽŽÇúë…@ÿB@�ÎXßfßÒÈ ÿXa¦ò¹æ]¦i5R àè$ʈŸÉH‘Ýýûšux«6½ÆËáõ=¦ùYççƒ=^߇ŽU6#R�L¡.Óm Æ}ú18£#¦³¥»˜ €O˜k!Üã¦×¬ôý;ù(Kw™ç.ÊìÀc�8ž�øìˆÑ¿žƒGà B¥ñ: ÂÙüMsá þy`: :Ùx3ò›ÌˆÏ Àt©i@Gm�CñËèh¨Œâ—‚ʸ¥»xÝ�ŽG×n¾§ýYÏ?  d5Ò?ؼz5:==…Ê_h€O®nbນu¸g©Ÿ ¨ÏÔ 3-»)ÀÞÊGZv{… €¸>uÌj¢tò>”‡éÿ}µë¥Úô /ã#ŽñU;YãÇø(Äëû½kü¾Ð{B­K77ô#�‹Qz°Ò1@ž4¹þgÊé@£+”=}¾�‘kŸ�écDá úÜsyö\È@c9è\4–ƒÄ;V9cÕ{aå;Q|[uÐZÚf`Çü€Gí¦ †Cβ~¥�½xÊ;‘Økr¡¥MÀ_ÆåŽŒÌmñ¶0.1>$çg«+6Èôº³åµqDûx©ˆÏõ—ï |×í½ëúï@åkQeá6«S�/¹ L�ØwÀÿèçŸG'¿ü2:½Ð À†Àw[gä¿©Îàç lv1⎱ JÄšË]È8hKæPóŽÀ�7¸ÑQ³f¨ò$å=~ñaw?ô�ò3ê¯4¾Ôèßû5~+±‡^H'±Ë^ ¯álìügéÄ|!Ò$—ôÎT‘àò’�‘¾h€¢Ê‰•ÎeLb“_—èôÌôt4À^ú‡òJh¦º7'’;U™§ªïTu…—A�Ìû½å-Š«©åJk­�2îóí(èÜåé¸OÕi3p¨5¦ýùŸüÏþú×Ñ…xLánI.¼Âñ™Wåõ'XÝaCãµ=�1]+ã"ŽŠe'pþÝòÀ1@ÖÐå�cz•ʆ?^åcW?Çö²Îïõ}¯õs+¢îû|OzÚF€ô / ÝÀˆ x3tßÝ“˜iá¾ÂØqôT€ã {•³ã�S^ž�úcÓ§ž6~Æ[ º�saHŽ{�@÷È;ôcô¯ºcêV}kü–ºEq]’ó @œ,ȵ«ý±ÇD#ý �ÿ†@?FþšxŒ À}¼]Óÿ=ט>‡QE‡W®4P˜Õ@³ú¸?1:j�çÝþcMý3õ¯‘ÿ±Àÿ\þÎ5õ?øo*�‘7ïQ5�·]î°Ùðåé]ä#¦q‰�i�7 x­ð� …‡8Á­£œÐ÷²è;jgx•ËÁCwÞ:“IàÇ1·a Hè7vÔºÀ£~Ñ~SŒ=å·Q⥂xõOü-]G´AõsBŸ “(›|òaˆÒVyž®7¼®'øQ¾8]�2ØXªµ~FþP6–nãµ×dG#ÿØXªüq�è#ŠœŒü3¸ÎqËE†î§O&§÷…Û2ûd2/fâ2ã–ËÚ{Óí»ëúoYݦº2îé­¤Ãå]ÿ8Ñpí¦ý�~úi4þÛßF§?þ8i`C ½­Î�.Ô࿬ЙCü�Î�µ À&1â•Â8ÆUiŒð-²®Óý�÷ªà�ü:°PÖ‡í2ð`Ò ž�S* pÙ‡31�Šãþ1êW€qÔƒŒôÍŒô}]χiìçнŠuþDÏ$Lj߆Fª�WývTήÊx$¿'¹=ÕÅ~�mÕ½-^¼(¾÷’2aˆ2St¦ |l =åpòs¡g‡C~vÙåàËïÉïÊ(`Ê?®±vƒw¦ècQ<˶[T–+ZX €åî¡èh1Ž5‚c×ìö—p,àD3Ûfvío©“æFg�A€à¡v¸IÀ¤F©lVØ·è tæ‡ê¤? Lö5 à®tNŽcÓÆ›ÿU7t,0ña>®Ãu>X 8ÜÒÇtô/ýL�@N³¢6tø6 [*'ötùc4NÙÔ�(€t­#c�?Öøe|M×ùÅ�S%T÷£ ÞPù~J£ñº€dé?ÝU}ô¶è¶ÒØSÂ[$Ì&‘?¢RÞx#E×|"ðk-ÿDžS%/ú#ñ ,ÅHŸ×üXë$ʨ[>¿î—�Þà�yªv:�ù}²æ‘§\i 40Á„ÒÃ=Ô>þ` ä÷½ñ�­ùŸiúŸ£¼&]g–}<>ÔÎàì‘)”tfâ܉}§i�?;ÁSöµû9ð!?ÌHò{�'òé¾c` 0=KI’ãyd¿í`ÃFàXÏÉ‘ÀÿXûNy½OFÀHkûLÿsŠ$K!“4ôHú`½?Öü¹>•›¡�§x‡}Ým»VÆü¢¥�ÒÀD5pOŸ„˜jUÇË.Ël<Õºü™FýçzÕo$PžvêºF:jn6Ô`�\YÀßpbdŠÇEG«Ž9¦¯ÕaŸª³>(í«Ã'ð§NúXm #@rÞ+0ÉLƒ1`ÃizmÒÇô?écæ�ôˆa )öS–iHl0@…ª”‡|Ü ñ]FÛQ·ž…鿌Âóøg •ï{j#Ìí¦~܌ع¯:ã{ª—)ýS7~[õïÐvÑX¾ ]jFH,Cèù`ꬩý­íŸj�CàC@i¼ÿ�^0fbs£h6P_gGiÓÿcïL´äÆ‘,«}ͪ잞þÿœé©ÊLíRjî}ŽGÁî±Há!qܰ#ÝžÁºá.ŒÝñ(‡G”ó1Éì=ÐH¾Þ‹I—áð–Êè³Îss_,·Ž¯ëÚßÛtëþÝtn»ýÛ”ý]n{3îòÕ9§oUØ US¾ ®‚oüø½øõ–±N½ŠUÞª-ú ÕG‚‚ ܃b|à#ŠÔ÷ã�)»(Òt»ßïÅOÀ¹döfÙyù8@Љ¯$†Œ”ÙZN^Ó¼^ZÁN øñÎä3ëÆËÎ~ ÁPŒÂ¼Þ§a@¯K¯m¡¨”¬8ãõ^K_ñüÃåzÚy�Êã=À3Ò^Q¦ÞÕ ?<ÄgOå¾P÷#`ÿ#@C ÷¡®ß’p#aîdä«…¶'Hä:Ãkßt©c÷Ü©ÞZ‹`]xÎÆ@ /4¼ä“Ö¶ä]gš®´é=½”ù¢CNßܽma3~öK�ìlQ*Pè â5—úX€ýèñ– .ç ÆÍМQ¹´›! ßsâÉsÉ¿@–—G=ˆ4ä^ý0æÌؑѼôßY|d±–‹u¸†uÿ^; €¼%`=Â>ów(üÞåãNæi�^[9—~k¥­íhÊÀÛ×ýb°„ß�퇠b@_�þôCEý ïÆ==ä| Ê?¤Ì߀ý' ?(õA€ø#À_ÀoM°# {Eòª!<|Ó ý‚t¥³oocÔ8f¼{a4‚:Ë׈0¨õ~ÏNÐçXaÃô9aÇfŸ)§+Mdú9–>Ù‚×(å=ÿ®‘õÆjH`3~ò[A• @yÏÀ͇š?ÌÇRW°×{>»| úH—Skd€xŽ‹….„àTeº«~?‘ÉòüÀÉF@Ò@˜�W*CNÇäuèu�€l]j÷õ¼¯c–ŸÇ?†} 4eƒŸ×¡~4pð›—òPgåïé3Èøà³õ|P÷™½A_Ó¾ ÚÇ®<`]åÈr¾mò®¼ü]Ð(Ј�‡³pO’ô›nõˆ`ï½ù±ˆüg/Ûº¬üù¼5ãÖÊ ub¬êìi7û2ôœ� eu¶UÚpFže×éÍßè&�ŸQ›pG¯Úe�À�Ëj¨Â  ¢5 ¼ô5ÂŒŸÎü�Û‚àÞåfg[yÞ ];û!o´àaÛ—rCù^ªì5ÚIíꌎÖkÿ¡)ãÌŸñ/€I9 ú½ž‘!òsCž›í²áÎë,o|ö`þ€¾À_ƒê¬_·ô×vÏsò×ãüµ <Yüíl™¾¸o@Ü·^â_S‡ó%3ƒžW:>¹üÏÌßþ�/LÂË·|däi‘©+ý@Ü �¸AÝìs -ï;½÷–�7>±Ïá#û^ü´µO ûB]ÿ?ýI]¡øc˜t3ã3úô”øS¨êã�ҙǮS—ÿmÛ­±Ž7½4†H#7@o»?·Ýþ ˆø§hb3~ŠËt¸“Uî*�„‡?\úlj!a¦ [Zž]p7¿¼¡xŸ¡p}'\ï7㟡<ý0�e…iú£Â¦L�‹äee +¦Ý%—~OZ÷s_ŠÎã4,p:‚¢áÅkpý¼ƒÜ|οœÚhXùã»"ãF;—ÿ]þÎ)~„ó8@€üK4w<‰6jˆXÈñjp8³�1㸃�|>äo1þòÚ“¦¡ð@ueâ ÿÎW¡¾÷ß=1Šà+O½Ç¿¥nÞR!,�éO_öÆ�ágC£›Ýì õXj¤úêÇ1l¡¹�gÊuÈêý“>¡_O1PâY�èáC¾Š¨a b¤y²–ô†¥›;�.2N×ò¯Íy3~•ë‹Âü…_À/U «xõ‚ޝôi€‹×as×+�͸^yÞ8·�Êr´\z•ŽDYRAÚ°õåuhà)íeÈ q€‘Ïs³“*�lôÏ;þÀ¡„&ƒwþ܄ܤ ÛoÃС�4ÍxûÐ� ’Ò ˆfg¾¡Ö5¯<¨9¸…ºÁOÀs;£Å»£>»êI\—㟑s6÷AøƒÚ™Že×±KþR¿`›ùŒñ:ã×øCH ÷x„'j Ø��ÐO­À²@ÙŒ{ðŒ@]—þ5œù þ�òȘ�G*‚ºÜÿàÃWo8ëâ3áÇñ®Lu@#@¹Îrp%ÆÓc¤hÐ7?<ô„o<�÷Kê+O� ¸YÐûSб/†o¸qšÚÜ % œ7w lÀiäºÇõÐ |(m¯Òe#(§*:©> t„›¶¦QÔ”)À£â—°ig<Bëd¦J›Ý�Jºõ]¦h …Ù·æ¶)–>6- oãçºTÇø7=ýmd vÆ~µo#œ>ÎávZ�¬Dø€Î²ôO�3àà(O}fþ‚½3þ‚>ÔWërºà¯àg—cŽ´]ßn,ÔöÎs´¹vÖØó£Ï]ú_ŒÒ}VŸ¯ARG�Ô(Ô¸S^™á3Ûγ¨�:ö¶*Õ`t@ ÷÷õ>ÇÙÓ ¥™ùsÒå¸úÈ·.¾ø� gþxO»Œœ¨«ksØ1ä(búã—øèÙºoâ1>��©F„àï½»¼%ÀutŒî-ÈZð�Ñàu®ÿk�†Ù5}N›Ãå¯ùÍuO¾ký9Å7ž¨©M×+�õg¿®ÖT/ñ(#i½Ô4A¼ñ™š®Êr§Â·¬ñ‚¾eUÄæ«è�çÙ-Š0sa¶ç×Üúñ•þì "òÌLÎ>¢m'í6­~Äåa™ï ’S8Ûi¿Ó±?¥„u)3¥ÏeR ?‚€À__ð7]^ƒ_Š3ÞRÎôº€¾À�÷=zŸwg?yœöfüö­m_¥Oc5H¼oãé¿3þŒË±Œñò¾)ðÎkGûκÍË}B^ÀÖû…º•aº9äà=ålß#£mÇ ã~ZY|ØýØÔg¶rÆÿ ðð?åÔ˧äùYk¿I�¯\RÏ>xÏésŸAuöÏû/+(”ïýì˜ÜÌê¹ ~é=yî½°ìGuyZ¡>›5 _öh(\Á_Zy™nxs›~ lÀ ®R@é šXXF¹¡p¤*6½@ÞøÚ0®z’ ð-gZëK3ƒ¯³´ÌìPz¾³9gPùž»Jq(xù ùÂ[^õ¦«Pu {�Ì#Í|e¶+m�]ú.t=¿åÝöBmoÿ“ß°T7hËÌi û#(”¿Ù„š6ø-e H9gŸú.óç$=A aâ©P‚>áÁ¬ã™y_)<®M¯W©³ÝeLWÇB¹G(ãÌÚ3‰„óØCY` *ƒ”’\ºf¿³_Ävp® Ä€zïi}d‰ÿ€ÿñÿüŸ_˜ýň€Aà¬?à�¬¬+øËÉ~èÛ^å£Ì²_‚<Û}Ù`詉¾IPðwo‚ß®p?€.ç0¶ð'ϱ{Ÿº*Pð7<»›øïÏímáMß#�Íø©]¢ÎM(•[½Jií×àÅ5Ê™§“Î÷ÊOã`YPé©ìP‚™ý¯W(SWE,¯¦†¯J—4•q€ÞøP¨ —‰åžx7éGhú ø¦ýAԌӴ„m¤m£í²Y €ü†8„- ä,7›*!7±9ó�ðÉWNüì(•"ãmóºèhǶ¼^‹gÌ9:ƒ&@>ÆR™åð§QG9=¬ñƒ,ÜiŸCwû aîƒÊpŒÅ{ϱH]zw5Á³*€ð�ÿ€ðž/[~Åxð?ÕØ™ý##Á¿+¶Q€àâlCYjTü‘sBîY± �~ÑÒ2Žé=q�ã>È[\Syû?p¯†×tÃ5nâ¿¿ n lø lÀï*U¯[)ÈO…£‚Ê @ö=m?°òEpFa9ËÉyTNt6JxP•¢�é5–™>¼s ü=ïÿ ÑW¾|—ÛsॡàßÓŽÏ�}L% ¯º¶Õ¸Ô´–S¹6l^ÃQÔð[€×<ã”O9Ãßávµw¼Ò–}ƫХiCÞzÒâ ë.C­ƒ,fßkîl?ýw cÎp²Ì,ð—î}Îw’Oû¾ëÌ5þÒ†Kþ:Gjó@Êxê#ǧWøÈŽ:‘› ,¯¡ ,ñ†5³š`½ÉY¯€÷á'dä¡@zÏP&}ÀrÿgŸ÷k8KÇ þ~¦XåUï €WÍV¤kg®žäÙ>a÷doáöÃ/úùâÜ¿µI@IDATÛ®d<£ÿ/Øø‰7<'Àÿ››3Vêð þÞ»ºRý ÿˆ»ˆÏÜæ�´sÙºëþÜtû—íçVî| lÀùò¹³¹þ3;AY½ä�æÏ(©·Ê«L_Xºôµ©n&Ëò2JUõT0QaÖPaF¡£ð¾¨´ñ~Õï þ/Þ_P�…ýH[õoÿAÚ[ò\–WyŒS7­á}°Ï{hûײÆÃ×<Ë„ë7žFÏðeJ–:£~ø>€6[.´L(WjÄðì†á�-<)–çû‚�cð ï³}A.§ùi L³þÊ¡4mŸà§² è;$½@N_�‚ÿ�~ØOïGëxàŽà¯Qš°üf¹­ê÷úäRdòÁ™?Ô ~¾çÿÿ/ð?E^OÉsÆ_à/õ~¶ÿ5:6›³ Óc@|]å+Í+•ügü�–ûrÊ¥÷;ÿ­üŸ4®=6Ø� ùhÇ‹yÀûwm8nÓÏ:²ýl¸% lÀ- þG›UÙúéÔg()•Œ³”7øøO*MfJ*F7š9 UÑÕ®RŒ??ò“çû(;ÿ/ø ò@ßâ�ñûêW(eßá5\6U¹êæ6ŒÏŠØx�é–�W©6q¶>Ö;à–ëCž×ø2ùÈŠÈ{WFü¾ãŸWýœù þÈ,ËþÔ™ÁßûܻŖJ .÷£my� þãÈk°|åÿò`9îš��€ÿÚöoº;Žï*€×kÿ^¿–M¥íg“À”ÀfÜÁ‹r™.©|œ‘xÊšJHÀSÍÖði©T©PWLU|U”R—ÿ5>ò.ó¿Cá9Ëÿÿ/¼Æ@¥.õügþnì Àª‰3Qû`»s_6]Å… u|þ.K'oðh[îO’°'&Í#h �€7ñ3ÔÚ¦ÏtÛO· 2¨° §Ls”/À"p¹äïI}>{ÎNÒ: cÑÍà‘„þ8ÂxÚî½ ˆ+ûŽiŸãÔU.»X~í¹u¿ ¿Ü'Y&?P§Õ{M³€Lb¸z5fþO4dñO5�“3ðyÀ{\%&u,ö²c)o’r_ü«>~ñcJŽ×ÕiÀŸÏ?§?îÕÐÅÈñÓ—cà_c ¬sÎø[f£›nC›pR¿†6U**[¢áa ø?óT³ÿþïÌ6ýh‹Ïc}žåt¢¡ô«,G?ïû‰ò1Þbøœÿ¨ÀŸ¤»9*{PŽ‚¾ V…:”œJøš#Pp&o<@ØçÔÝý¿�c|çÔ_úŸ1Èó¦Ý�]úOÛŽ'ÙÌ+ËX)3ƒªÝM|’[Œ�o8uoË/n}­�‡Ò'VüÀOžóºoÞ”@fzÁþ�WæMwLí«To¾F€¾i¥›^›€}â¾ÿ‚í«ˆ‡à IþsŒÍÿT 7ùzR__ð7¬Ë=]Ç“y�?mç˶,ÿGÓo»ýíÿ}­¿?é•�ÒVa«¬Q6nRz�ðàï,ê¹àϪxéWvNÿÍ,ÊGž¥0bì*¨ î©lÎì}þïsÿ?ðÿFÑéÿÄ»10¯HQÎò;Gàˆ³�ç¹YI§¬|ñnÚê›9gžø<‹—¯Jͱ—HsI3¿¼&* iT„®·æ:n#½a)åìo?Ï+ø5‘€¨}ÓÀç•>hwø§Ÿöµ~æ} á/ŽI¯l¸îy¤aر)—.ÒnÞ¨›ûÑ:£Þ±ºkv^þ§ÿ Ð׻ܯÁjÿzŸ£¿ÊLï™–³õ‚~ßv1í Û -�ye}ð ‹Ÿ4Hìÿ» ò3ÐÛ÷ôŸôÙ€MÒsVN&nn“À‘ÀfÜ‘ qån¨p‡Wé,Ç› ¢ÏÝȹéñóõ|"Êlm¸“ÿ|œå×øsÿ‚¾!=‡QNZ×Péœn[ºuÞ.u÷Û¼”•¯ž~d¦N›nHô0™ìÖ§Júo”®^pXÓð²,åOyOkjwL+mx—ò-�¸¥”}f›´ß¯õ¥/ö j¿ºé/ AZž#�¼Œ¡üo˜f Žƒ>Æ3ž€5rÊì¿FÀZ£Ÿ‘qó¤õÖŸü’~Þø†œÜ#áÉ|®_:ôq‰³q -e½mÇÐ4ó~¿) 7Ý>ê5V5,߸i­Jù“鄸8ïÊ™ýyŒ÷‘ÛS mÁ¿ _à§Úø[Ư nn“À]–ÀfÜå«s‰¾õ+g&®Î�x†ÿœ°g±û-ö¯ì Èæ>ø9£q£“® P5e½w(n_ù{�¢üõÎþÿ…÷‹m*s•¨®ÊW:ûæ©h[v›ÐM€6þôÁWÉ\��.%-p©€Ò¾jº+¶ÿÑïÿ/ Ô6¥ºct—›üŽ©²Ë3iÚ×è!>nðè]VhêÓWyÙç;â�cɸV�·+ WfÇúK�Ũ¢lÀߺò�oez¬~e¡¬{A¿+Õ{l ýîu�ªÌÿx[WîJZ §%¬10×K˜ö}¿?«:ôã+ÿ}W|ñ™Uµ~qQ€¯›gý5ÖiÊ¡Ì6ºIà%°7(ìëlJ…¢Wùªt}æêGL^ÇÈkXМȆâR¡û®µËÐ~Ký+y*Ç*Èœ �±ðÙÕx}¤Œþu]°½YqZ׸@,5®b®oœ¤Åh–Ø~À±8óÏ�C´)]â¤ÇM€Qð_ÕñÙÏ¡œÃžvë7|ˆÊÜôº9<Ò§.ã#œ™3qAÃ¥~wõ/»ûí<¬?øí8˜5µ%ÓS»Ê­íØg‹§?üR ±=™µn©c Œ`—gÿR½¼:¾ÒÖ9B½–1š4¸GûÆ„i½¿¼ôKŸ§pó~•Z aÚòÊÝG­OpÏ…§2ré^��lÞôc¿èÏz }·ÿÃ˸aiã‹L’r³?µÝ~žªWëöOÝÞ©Æñ«ñÝ €ŸüŠúÇòϤvÉÑeÊg,S~õ@”© /iÄ=ÐÇOµºÁ)ÀE]•Ÿ‚�ž`,¸y0D:´@0£ø¬Xåcú¢D Å—4â‡\Úm†ãÀ»Ôïl¿Ëþ=¨'íËó ÔréÝp\û]jú!oáÖY‡+‹tLÒá;Ó—ÚvŠ]Hæ>œ s�5rŸ­ú;—M›S¾ñÈæÂÖ·••òÜÜé$°§“í�p®BÉ XÅk¸¯+ùzàg–1Ÿ±¬ÿ˜™ÿC7ùúûïyÕ*³UA ïf«Ç,q.ߣ'즨ìd'`€VåîŸ3 âŸc�Q'M:ÒŽ Ârº(jyÓï¬"ó @ÚTÎsÍ|RÔ4MzÈ[¨éƒ÷ÜJÂcl1”q1ä1T ˆüH¯²ŠÊ’/¯Ž)”>J½‡¼g þ52òÖc0n�,û;ë×°ÄçÕ?ù�÷Ý®rTîWtÖh­RY _†½×4³~¯õèÛB½”ÏH/-ß9nø‡äR¦Ý$p�Ø €kæu²ºHY¨Pfgy•xÓW)»´¯²v†íƺ¯njê²µÔ÷ÕýîºGÓz>ý{ü Ê<‡z“<Á°ÅyV‹F#à#]•Ÿ•�ž¸AÓœ!ëj´Œåôɵÿø‚¶›µÚ†|t;. ~û¼“0ú´„ ˜VŸŒÝÏŽ#Yí›É£ïÒ8éð3ð'­à­Ü—þ�þî˜Ü‘ß1&ÇO½OüÎÜoå@VŽÀ±-ã3aÔÕØ\ÀÔ¿ðþµþÊå± ¼ò޽÷+¼rÏR3kÏ·/¥Í÷žqßñ9Ïçÿæµ\óö(ãI=¨}è½X¹ô~ñÚ{½×öqMŸãÊÃôÊ¥´eÖÔ²7éÖý9uûëöÖc=uûëöîk|3~ò+¿þ#Ÿ½F�.ûx¶ß¥Ë!,p ÿÀ÷®ýÈÊ ¼ßHÿ“ǯ97à%àÿ…T*íT5e{³º2ìãgJ|óiG#@ŸG Ò‘f\eû”øçzÚÌyìäå„BÛÄÏŠÝ™7!qPò§½ÅÍaG|6D”P xÅ�'Þö§ÔxòF[sØ|[L9ËÞQÐwô/YÜ; Ä^ÀÏBÆ©)»Ôox-ïó5OS/À��ÚÏMaUÁ• ¼~JY¯ýÚ;Ó üÆu^SûY¯ a ]óH}Ú�ÁÁ8òƉûh4œñ~ Ž2²Ÿò¥ÏºÒ†�ÅMÏÿdÐTÞ~.-e·¹ë—Àf\¿LoŒã¬Pª`L«/øÛ!÷ø³Î[w4 ÌÆýÐÊ üGüßœ~öo”ák€ø«ÏH‹E�©0wê�ÀPˆòÕ™nû–$üðÊ+]¤ ü9ΚGPùôË…RßXÐèp7·éä™rRùër£Þ:Knú# ö53üA•§c‘³>Š�´8Ë®7—ósüÚ[ùp/ä¹=ÀJÚNÚ%õåS^ã#2¿ˆ[gÿy…ûÔ/Z΀_´×Dj_÷þÔ5ݰ×EošùúC|Ìïþ“¬’a|<Àwƒ{iüßdÌ”Íý�gJr\Óæxë5m£—“€rËïrÅ·RW”Àf\Q`w­xÿ Òó|6R¦†€ ?{Ï?Ž—ºàÑþ‡ðk¼d%à¹Ê…E)ð­�TÓ øüZ �t ûHái=í¹b ð·O~VðÏøh[€Pq(lÃ>Pfñ£m‰}ˆOd?^pÛë‹}„W ú$•Æju¼áºŒÓö2ç8öyÔ@ÿsö„à�’ÂîqÈç�é‹2 ?ú^`šiÃ4™üuüÒ²‘Áæ"�Yfó¤fÏ�K`3~\†ßÅa¾©¿‹ÁT©¼¤³_ÿYÌ3Íx�VeXàwV.Õ¿$üEì7ÑŸX‡º²`G|Ï5�ÄÎümÇÙµ|{/<�\QxFš«æCQ¾y÷Ÿ6=à™+(bWx:¡G{T±´ŠÜoé•}"ïŒ}³Çé´³ÿþBÿ€pŒ ꤼuôc¼¶cüŒ[ËãL�;’@?Ó)²ŠÀ–°ã0?®ôÒq㋜[NÎŒ/ëtãœÉ#Ý{P¾.õû�‰‡^k®¿÷€��>Âÿ)é^Yï'½á¶$µ~Ó¼7šF0Î|ï“zËÔge€¶ó)lÙ#óˆÍ²Ù4ûÈý2܃ë€0ågøci}î=ÔrçÑ‹Êj÷<~WÍ»íö¯Úß­ü÷I`3¾OnWªuÑŸéJÌÎ)l;ú¿À>§5Þ|YU‘D±ïÒB6v ¥®2­²�‚G™r‚k½3üøç¼+ ÿó±©Pª ðw%ÀzÝüå~À3 |}ñÞÏkÔ úÐ<·¥SϺö}Ú2¬O»PeCåÄ­[À�v´¥æÿ”ÎûÃŽK‘qŒ¥™’žìüîÿ,c§LdbÙQ·àß{m¿æ‘²VÞ¹^ʯ1gß¼–ò|Æu}Î5ÎõÏFV 5î™kÖ…µ^'ø×(5½ùÒ‚¿´�Ü�½ÞC‚?¯È>À?ä£Z�8ë1oÏä| î?WÏüï8κ9Ü´�nøY$°'¾R7¥ lGeÚö¤õ*­üg�œÃQÈÈCeéY.ËëÇ´ojï°ÐÓΨ³ŸÐÍ,þ7èKÁŸ�…/ðRWÿì€Ê;ÁhWÀ¥_ €œD(øï†�¢~KZâPŸ»t@À@§÷:é²~V$ ßk?ë”Aä­3´öÍû)iåáõtȸ>n~ýj€•J®�y£\î ï“áÃï�Ë]Tyë¹>"Êóyê‡oÁŸk[ _V¤f÷l´_2« õÊÎWßrúµPð�à=Ç}õ•™ÿ^“Ý3Hwí!¶›Û$ðÓJ`3~ÚKw¶ã*κy–¿ãÍŸ €*Jy˜_`WyOÙvJ;ó� k¼üÿðÿà¿üÙKð‚Í…R—÷ ÈÒÌÄi#Jê,0ËÀ(^—�ú,ǾaYÖO{ì±ßï¹#×Pä—wÞ)¬Lf·ÇGyR?Æ!uþÄ{Ÿ¥žep½¿Ù%˜¸ó\gü>¥÷#@_¹®~xdz÷ýQ| žÆ]öÎî%¨=±Ò{Ѿس?…¸­÷>%g¹–í+…î5ÐËÏû'Kÿ|<둳ÿÿüÏO1žò(À“3{,vÆMÛ‘åà}ˆ¬ó÷äs¨Âw¤­ÛX³8#ÿu�Œ¯Û?u{?ØÝ­ú lÀÁü¬Éós~ÇÓ?©´†@ióÁ<›þPv*Û~ñNÅj^]ÁBjŸõ¿D�;óÿmÿ?™íÿï @ö�ŸÍ(syÅS¿¼Ê=³4Ê|¶}a7¿¤}Ò<±Ðåà(vò1oäåÜøfO€yÃÛwÈyÌá¶k±_Ñy]³ÇÐ÷ì~wþ»Ï£é‹Áƒ|âJ‰$Y-3}êÍ'ÿŨ°eθòáºð¸ûQª€½€�÷+€3õ0ªOÜO^ÿÏ´c�~{ª¥i^O¯£÷…F` €‚ÿº'–õžÈP7ü-o°Äÿ@ðÿïÿ~ðø¿þëÁ£ÿõ¿<ÃxÎjÀSòæ×ÿ`³¸þ×fÚ°… ¯ãKå-°IàH`3Npú§/=A粜ÛÕ˜�ߊýÒ9?Ê¥m=Ÿÿ«X½Iôyö �•k.å��y†€Ïû]öwæ/ðÿƒƒ„ôîÈÎÊhä9¼íèáYW ¨-“×GØY¼àÿpp3X—ŠÝ`=7à#Þ™£K»™Ý3†<°A"`(#ó'ú˹¬„8*åèù:Ûß̦5”Kî�!‹ÌÐ-‹ -gXG<3~x¸K¿ÀŽ-¿+½ûm]hfüÜÎô=mÒS'ý*åßÜR ¯u> }Hú'®µ×1`M¿ó©`®³÷¢½ ¨Cgð÷^ª0zNÊî^pöŸ× {6üðÎüõÎüc<ýßÿûÁ3 €çÄŸ»p2¼gêÔŸþ×JM?V¦u6ºIà®H`3®ùJT”^3û£ìÖíØë­X 7<ƒ¿aË/ÆBÁŸ´‚¿`\Ek}�J8ÏÖ¡æ»ëÿ7”ùï(ïß]öÇø ð×{¬ðSÊxÚŸt~•k­° Ê9ˆ>Hó¡"á)ñgö�p>ìL@svZž‚ž}Ër¯a|Á@Ä €êšžÈ/ú#™ôRO·s@Õ+ÿÈÁû@¹@5LË ae¨�·Càá«q=ϼ£N~zî gý_¹}Ošü¢ç>ù,Õ \} êt‡~eé޾Р†œ}?äÛ#Ç ‹±@ÿóˆÈ±Óÿ¯ÿWfúú§€~fþ¬¼Ô σ³ü€–ÿ‹õçxÃÒ†msŽ7½ÔüÍm¸m lÀm_�¶?+•X�Þô‚} �v£FÂÕW°^¢_3 ò™þgò|>„²vöîÌ_àõu?—þ_¡Ü�ù þ¯QîÆó ÞïÖ ¨1¡¢V�×Í Û2B@ šñ0Ê“Ÿá5(Ü–×Ãè³ÏøíW(eåW0Økã<ÐjÁŸœ¼§2SÈGà÷€›Œ/«!ÈËë€G~Ò€¶é”‰ •-u{:žàföOù¥|¼NYö—rý ü™õúþR :ê{­õ  ½ž>’Ê#9‡ô·ÏYY°žáQ?×Û|úÏxrÀãÎé‚ò`öÿˆgý>ï—>Æx¢!À£€g.ý³Á4»þ·òÀyÿÕ¯ã¹7Sê[¹ÝÝ·£~ÓNMçþØVÿ×§jwÝÞº�S·¿no‹_N›p99ýÔ¥úç” üº(Ks ƒ9Ýü§‚?ÀÿO–Aÿ7ïC»ëìíþ/­_ t7}@*È¿D™¿ø_ºä?fýÙ¸G;3ø{Ó]ÆTæúîRp€G ò ú—óPÒï—Æò̘²ÎòSÏ~ãï�cü ð{Í•þëLŠ2ÒÇhòºÏ âM²GîgÃÔ×È®ùÚŽeØg¦ÏýÐgü¥nìË’¿3} Å<ï‡zµFž×¨Þk®QÙãü6EΓ ­ÌʹÞ~·"¯RÿaïGïéÜ×PW‡¾°�ï ÷Ég¨‡ûx¿H¿Bq_ì¹·ŸáŸKþcKþþwêéÞžÿ[sþ\¦aéæ6 Ü% lÀ]º'èK”¬g°¯E^ÚÕg=ÖÑx…¢üEùåèRìþŸ(×(^¨³Ÿëûìß™þ+ � ~ù×_ÙñŸÃPÎÏ(»64Cô*{i�  [€‰°³T7«¹ üXåÍLÎSÚ|Ž[À¾}¤ßy� :ò»—9Äàš.³d¸ä+ÿ¬@gð7=Àε“æ\ €œ·0 €ÌŒmâܸޙí îÜËs~ÒsÊ$eBl�‚¼¯»œâm~10)ã·(¼Ç|ôã¦ïÏ3 x¬½ìç´CqÓêZÖxÃÒÍm¸+Ø €»r%®Ø�«*íºŽñ® ÌaÓ\ p@ÅèWž~JzN„ŸÊÚU€çz”p–i�ñ£°³ôϘ:ó/øKë£ð‰KU‹Îâê'g¦z�ý˲³ „Âvöïæ?W|�»3ÿ¾ç-ŸûäÎŒy-¯ø!Ÿ€¿tø‚‘~¸o!’½_ðªTP•Ÿås-Ht5 Ó6×yÆàû5I�Ï �^S¯¯®ý¶m}ãæÙf„⻺ã’þg€[ï¦S7„jœäñ…ý¢!y Á½êÒÿGV¯Þòlÿ³Ïûÿx yÁ×G>ÒÈæFÃúaØdœòµܱø:¯åRiÔk¸´<ïJ\ã×M×í­ùßtû§no=¾-~X›pX.¿tj•ÁLk”š¿R†³`îÌèUÆ„ öó ß2‡| ‚Ôe…z�¢€P# €€‚ÎŽp”¶³¼ìê¦�ù–;}@T.‹‚©ò&ý>¹îüà†YöG^ÎÞ¹°;_� )³Ô5ã›qæõZ6W ´¿u2ëÆðˬ¿³ŒÀ¼Þ§a@¯a¯mA¾´­åÚ‘º—ãžÿp¹žvÞÃ#‡òÜ�1Ü{òŠ2õ®Nøøá!>{(÷…º{ai<$‡ä¹‘0���G�Gïw�[Ýrÿ_oÙTZý”ÇyeVU¶è&�•€úws÷H*¥º† ú¥¦«ÀfÖOÅÖ‘‹À.0øQÐÞLÆ×~6$S=ö£?ÐËO€(P¸œ+7O@äóleŸC”•ϘMc&ë~8Æœ;7/ýw!¬åb}8¯[¯s®!yÄ”{€°ÏüÝÄ— ~o^ëó¹¿F€�y ð’sé·VFcƒ¤ ¼}œ€ºöù ù�\²×€úxé?è¯}y†ws¢›T=@Èûø!eþì?a¼cæÿA€¸_÷ÓxˆQôžÙ7ÍáBŽß~ ¾Ë½~$¾+ª„¬2 æ‰&cäµLÓ6ºIà.H`3îÂU¸…>Taµéü›wˆ¶|€E- {3fðo¸‚uæc1&{½oÈ_°0¬ 0 \]®°¬r](øgL½�z‹û÷ƒ¬–çÿža—þ¸x%bøgîþx—Ú}=Ï}œåx?Ôx6øQVƒ"~´qð›×²ÎÊý¤ýýÄl=ŸÔݪðšö½?} à*€�¦\åp ßþºÄ¯à À;ÀßU��y¸ä߃£Ü“ à}œû†°¼uó`Ž7qgýº¥¿íߪÍ%*=Î_�ØUYxÒcÞB¸õ€¸í¿Ä¿¦Ž3yïÕy¥ã“ËÿÌü]0ìÎú= Q¯�ñ‘>êßãŸÓž÷µNÕõ¿p(Þ¼óè\¯ácT>ç9ÿ¯§tëöo»=ûsê>œRž? ïÍøY®Ô ú¹þÓ×øQ�ÿ3”°ݘo³“î’ë'ü!ிLw«òfÚ°õUy]p÷¸¼.ÏxÕP…­÷›ñÏß6°¬°#�º„(Sà"y7Û¨iwÉ­Õ|W2ÚÇu¼é{ãţËâDó쟴K¥o�‚~ÞAn¬ôxöÊß7Ú¹üïÙü9Å�pP·c(ýÖÊ%B´QCÄҎ׽ÎìcÌ8.îAï??ýcÀ·SrÎ?ñ¯Ìü]™xè¿ó@¨»ý»"F|½G|Ìô>ïð®$ø˜ËU)Û›]ÿý¿4n™¦ÍåžË]T¶u6úMÊo6Γõ·Z[è*Ø €«Hë,;ÿ© ÷Q€´€à#0 àRÎg§Þ<θ÷ÕåÕ„Ôº¥ÖnX0× :¬ð˜åå¼€?y>JÈ+fPë[O¢"^3l™á»â ˜ }[@ß1ØÙ©Ï-›4®Y oÙù_#`Ο­jô=ëÁï.ôÃKʲ¯ò¹ ³¼ÏO^žó[F@Oü/LìÇèK®ŠãÅ�~—ípwé Þ0üÞÒ–† «‚¾,H?>0ã÷@x�¯=öH6“R?Fô-üò8 >> XdLØÿD=E–êúßiþšîJíʵlÓ6z9 (7ï§M~—“×UKmÀU%ö –ïŸkÿ¾ 8ÏQ–9�9ôQÀð3—;�½%]R•õ%‹oÅ® �͸‚°NYô¦oòCíÍ–¶Ë¡9 åêùéÏô€Š{r( ù¨å¸(]Bk#ýmÙ¼¼–žñ´g�ÌTQðnF[<éÖ÷\‚€ÔñÅ }nŸè~œ²*xËœë(ó#îÿ¦Köƒ&Ý~µo#œ>ÌávªÀ?À2€ÏõZ–þ©süóLÈ 3Á _@Ÿ¸¯Öåt?gùx…r5FðOŸíoû0SÛ;Ï)÷•³Æž}îÒÿb�îy¹o�U�B�» æ3ëϳ¨{:ö¶ê½$Øk8jȺàfB�Wœzú?ÐõÿRšÄéÇôµŸ²—úsÚUÂëvý¯žÒ­Û[·uÝí¯Û»nþëþoñ�6`» ôOC¥êÆ+߯ö$? WºÐ<Ë«pUÆY¦‡S�[j¸Št¦¦ Ø*[Õ«ª¬@ë|ùËÁ>´ç’v>æÂlϯ¹å7 Pà¤J\ADžŽ% *%žöš6úß2VŽZ5ÝôTNþíwúgCS»sÞœ¾ž;‡|°G&ËÌßtÇ1�…ñÇ�r‰@_ÎÔ'î{ô9¿Ÿ°íB³£€~Œª!ËÈhîÃ�„áé @ ï­xï3Ç£w,c<‚½ùÞ�¾�›¼<ã'/çþ{¿ôþèøõ~ôžõQ–†¤+~JÚOJ²/„Í[»þOÖt]n‹o¸ëØ €»~…n¨*³Z݆»  Ò÷#,.·ú6€³¦Ô� Ú*ÓË–U±J5T¯*cÓf#AÀš>3;Úð�ÍåÀ1³ó$·@å3{ùw\ [~ï�eH3?c‚ÖˆÿQjº¶jÛxA:ù Kuƒ¶Ìœ–°?£ ‰Œâ�õ6mð[ÊÈf? 6Ìé»ÌŸ“ô}Àßçüúõ‡vb0 fÏÌûJá°ó53œ™wÇÔqu,ä{¯Þ®xf£ÏXûœßƒ~òåÂQgHÒRqö;T¹ª}›@ «ú«ŒÑûç�‡Íæ6 Ü9 lÀ�»$·×!W�a7]¹¬î»3+CÑ©gà�0»-·Ž®u›.?½JXŸÚÊ{þôG ³ÿõ ÀÜwê òéˆÂ—±”:¾ÎüíÏÄ„ë,7ñnÒ�Ðôm³K×jÀì зkÚŽtzAAT¿r‹à¦J¿í€àÌ?ðïf>g峕øŠ×G5†÷z-ž±æX^Æ”U€1哨ïðç[¶ÆrÈ¡AÈAƒ5«Uv’2u^ï=ß{Ö×ÿjd€´u í}°þ�°—êæü]Êö»IànK`3nàúR ‡Òn +Këö«ä[Àü¬HC‰ªH�ù;+R•ªˆ�} Îîðs¼>—uiÖÖ–«‚ª~S—¸Àkz��e¦OÝ?òóž¾òå»Üž/ý‹€÷¶§‘PP…]\Ûj\ÚvSV`#­Ê½aå`?öÀ¸eyÃßá–vÚW)^ÙIÚvI‹3®» µ²˜}¯±`_€í8\êø ü¥.ùç} €I>íû®3×øK.ùë©ýÍ#)ã©_–þ£²ÀGvÔ‰Üd`y =÷Šïúv…(« Ö›œõ¼ïlÝûЧÙû@åãpôqý!ûÖ\¯í±œº¯ëöOÝÞ±qné?&�Íø1ùíÕv3ÒÚ­ÿ(ëü»o¥ š8��¢Pp™�£`ýBœÞW_ tßá}\ ð¨Ð=HÆz*Û‚‰Æ�\”˜> �:_ð.õÀ¿Áÿÿ¿  ûЯCøÒÞ’#DøÙµMÓ–î9ú'@̀ײ‡äYfT,5z†ßóo}r|Ö 5<|m¶\hyQ6®ÔˆáÙOàïl9àI±<ߨgfõ\ ©Ïöþœæ§10ÍúÓOê–ÚÜ)\eЧãé7}= þ:b?s"G�üãÖ0˜å¶ªo]�÷¢�ÀCêÆB_-� ³+à•š7‡ç²[x“À]•ÀfœðÊœ§xNØìw³¶¿*±(Ó.UÒ2�¢&?£ ÎÔ?£l]– õøV½_T|ÜåUëÎ*Ô°À_#ÀÍ[~ä§_ùðÿ‚� ÿô­| ‡¿T£¯àjÃÎ$Ù�–}­›ûß4©éQìRú¦[ℳG€>é6 LµlxP÷X;®ð¥^xïÀ_*OÃὦ»ÖöÚmRÊÛ?ëH‡ðÀrŠŸ€�_Îæçšhdw¿Ïû54¼F“<–öNPvñ´©!–0ãYŒÃgås¨/Ö¥œ /øÇPzëpËõ!ÏûÇGú®<§O¹þÐÈgPŠt—)s°â–¸Ià$°'ú 'à}j–5–¨MéWQwI9 Ög§îÎ×x%P£„=5ÐY¾Ÿmý¨ì ô[ïU¾¦ÉSê²{¾ò¸»ÌÿŽ÷¸�åÿ‰ÿ^c €O{R78óÏFAh Xu¶e»×(ÕpZån:Ô1øcøOžÙzâ)7âåCtÏèI‘æ‡|èïQЗ¯nMw©ûé–�W €ü‘‘2õñ‹»ü}¯ß%OêóÔ¾ìô'=ËýxÇ¢+ø'râGOÛ½2óï¸Ç2>Ç©«\v±üÚóÜ£Ž¿Ü'Y•;P§Õ{M½ÖY CÀ•€ìA�Ô[§´²*mzé±ôæot“ÀmK`3nè ¨ nÒýH{Q¦(¾PúmÏ��¹ûßC€\æà_¨³&_Ñs†îѬ/pgŸn(Ë'Z©ãóå.© 8ªô*~ÁñÊû@ÿQ>>çÿªð§†ùÙ?Áß¶õêë.’òeòçÈOž¶SO|qó8h Ä•îbùô�²1¤ò².4`fX¯k¸ñ¦%sü4Ú>Z;F ru&o<²ìû^¿»û~wûÅg‡ÿè¿@5z0·tú°í޶3†1¦\ëÐ!§Œ• I/}K\™ ¯”¥îGæ—÷Ré@À{HÀwS ¯:û÷xi �<€j$¸ú¥¼ î3mzÓ`sk®ò:Ö�ëîãM·wl\[úÕ$°W“×½+]åéLʃ€^Îÿ”ßòüØO¾ª0BÙÓØÞþO!7:ÛüÛÝåxgŸOñÏð†ó�ªÖP@Y;³÷ù¿ÏýÿÀÿ>ú?ñÝ\èë_–_ƒI{ξŸçÌ/�”•/>`M?úæAΙ'nzóå«ÀJ•ƒ.iæ—×DTð*`-4éeãJ›¾K]ò,%yzŸ×&À¯€ÌUÆV�|^éóš ÷lô³Ÿ³ŸyßB8}µÏzeÃuÏ# ÃŽm–ÅÔ¿H»y£n�†PÓš?Õ;¬ ø«5P}ûå%Þ7 öÀŸ4]A´t—ºûmZ霷…7 Ü lÀ]¹w¬QÆC�ö gý¯‡ð@À~è*~š×€'‚SÞÙü)÷@úï2«gÈ{òZÁ_êã„´á,¿ÀŸÃøô éÙtH9i]C¥sú¸7cE[oyÓ�ÌÔiÓqx˜LvëS×r™Á¼Ó™¶Ý=ž Ñ®®m¬½ý2­´á]Ê·<â–Ê5�f™_# }аOPûµlü›ÂÍ‹Pþ7L3Ç1úÝû-€�¼óJt‘ɪ‘qe4Ë9ÏFÀ"çUýuTÀ¥ �ÀKúö>ß?€¯Æ–÷AW,W€—Î~�gÜ1nn“À]’ÀfÜ¥«qWû‚âªÐ €7(=Ÿ/»ÌßUœ;ù¿` üYº@YgÀ_%ªA@¹*[Aýe|åÏ=‚¿ÞÙÿ¿ð~°Ee^*µ¾töD Zv›Щœõ¶ƒw#àO|•ÌU€€•C»à0<7t4`ô;FÃ/ Ô6¥ºct—›üŽ©²s�…Þ•âã?�ßY«ÀV_°ºMàïPJO¯c®¯2BÞú¬Tf­°¦È,²Uv” ø[W¸Ë‚®2ò€ßð‘–}ú ŸoL(Gå ÿä+ÏRŠ/®i¥f¾lF[`“À %°'îM²þQŲ®_eeºJ:祣T_ì¯yðPÐxR eHŸá?$_E9+pÁÔý>.x�ôìO1TÑ™ÁB5Þùœ~nòsÆÿƒ~®ØŽŠ¹^ 6,K ôöWß8ÁÅ™~̰üzWvL:Ú*�r7Þ4ÆeùáGŸéxÀ)´ñ5•©iusx¤efOØRËÌ™pfÿ¬ªd¿Å0È4ägoã¿Ñ{²¦¶(srWµ!âñPúSÀ/�1f?ë[·Ôtä�G \³På//ót¥»ØÑ_¯•À¯Óàû�9fø=ýÔðp ¯³²öžõÚ×[§ácÔ2KŸVaó¬w“nîËM´Óíݤ,æ¶6àg¾z7Ðwÿ¸z•«`ÿ  ~‰ð‚Óãž2“â)räé~Ÿ— þžÑc€º>»wvÿBOž›5¼ùT¦ROøË'\á/Ø[ÞG ÙhHXE¯2WMêUÒªxÃY’ñ£á¡P-3 €Ð¾ÛK—7>+´ÕeÿÌúH�ÈÓðgÝÈA# eFŸÛ÷Ô-¯™Ê¯uÖaå8Ú[Æd?†ïL?€/èëq‹t„“æÏqŽ)žq+·ÙG^•ÝÔ_Ç¢ m=î'÷ Ìïý§¾g™¿ÀÉו)�«>ÐÈ'‡½®„½×\q9ôM—GÃÒÙ­ÁpÎÛ›nR›p“ÒþIÛš €çô wúc<ü£|s�ÊÖ r> ‚ôª½œè‡’vÿ@Á߃<'À›Ï7¤®ä�ø{ºß[xÅ€Ÿ³êD)k;êJU°s úò*¿]Z)p8¾áì·° „÷ë|1‚ æëüµß¡#nú­;û?:!­�yƨ|*›Qg7ºTÜ ÜWžüW ¯B¶î¨sR9-÷-•œõûŠë[äêç§]Ùü};à<#ÀöfðÏý¹‡e6·Ià¶%°·}îhû‹bVñá—”­àï €«žµn¾`–Mz‚5ag§3þÅ žoþõü'Êz€�ÞSß•€¼îG¸@À8n~��–w _:Ò,{Èí¸L`I{YÐÀÖ;žøCLš6úd¹,¦›6×/ŸÒ–1>Ü·Ðn,tÆ`¼@”Ç Ð¼Ã-àÈfOFe|GhÆçxìã–öþÊ òª1�.Sfý$ìÆ—û“k´>ù/u'yŽ*—"‚åïãY¹àÆÀÈXЮ̡•÷šRt/oŽÖåÿ² n¿›nU›p«â¿|ã·©4¢lQÌùJ7ŸØIËsסp;ãtTRÒÍw&åi€5 œá?㙵 U¯ döMy©à€ô–p¦À·_(m�½ûBGZ6uÑæSâ¾òOÿ\‘𠘜POùv‰Øpž·“¿PÓŒÓÞâæ°‰#>"‹AB]ÓÃjë5�þ­Ã–³Eé]v¹o�ŒGmÁß{ƒk°¬˜œ3�ŒS9R~©ßðZÞçð9/ËëìŸÿk¼z¯ºôï«�îsÑèÿ£T~¹^ä@çxîÓ‘gxsÇ%PY/±å\‡6à:¤ø ó¨rÛ£(±E‰wì*4Òg7Ç ê¦i äùà;;7¯«}ïªAgß3ï%LþÜŽaûª/ï‚  n¿}eÎÇú• ˜Uêõ_ìîo¿{tòL9©ÎñZWÈ�zë¬Ê®Æˆˆ}Í Ð¿œõÛÓ�òi¤Í2غÿö_ÀV>üó?äí¤}qÿS_>åá5>"ó‹¹í—Pžntùßkã5šÏð~^ Lòf Ïµ¢Þ:ÍxúLÞæ.–€²ª,/.½•ø lÀ÷HíÔ™ÿ|† Z U™!‡ø‘¯Ò4^WL&©¯Ó èQþÔ/€Y'á�Q›eV)uâJw±ý_òRsЀ?a•´@ë €\:ó÷´Â§õìGpÅ@ðÏûÞP_Uü#‡Ñ Ø ’(&Êì¤ÇI6aŠ�û}±�ðŠ ‘BXþ¿mZÇp]ÆIþÏæÇžG.Þ 5®²àuQ®¹—à#@jšy?è”·+ºœ €¼=è×&]¡Þ>âòZÍÞ:s|6s›î‚6à.\…}¸%v€í•’Ú˜ŠVe÷ÆFÀçøì þEè2©J3@EyÝ܆‡�’§ìb–åCG<À0z=uöÜ:^êÌß™¾3·lBX}óà9^ê&D÷!x<±†0´;½�ñø]ƒ�Œï¯9ºÑño=x:¡›=ªX*0;Ö|-šñØ'òθÑ7G�¾A;ûÏJý\ Â1*¨“òÖÑ�ñÚŽñ3n-�3îHýLÿ¥È*™+·„‡yøÈtê¶ñEÎ-g=ê——u¯Ãymçs|À!½«C5dc\’¶ùcqûfž®×4‘ ~.*[ž°¹töm·wÝã¹ôÀïYÁ͸gü{†«2p†,à? _˜ôš°_ÿ{Iº;üóìå&UÅ v³°×¶JpVÖ«¸õ®ªÊm¯Þþ üsþ¹Tð§ÏÏuiÞB ½+é+cp••?JôïñÆ~ãÀÏkÔ»‘Q£êc Ç|Lq9–ôé§a}Ú…f7ÿˆ+'y BáiÎðOízM¥È+ÆÒLÇýpèº/c§LdbÙQ·àï}zp]E~•} =*úìß=!®ù= 5 77Ç^ưmï½ý,½JŸ¶²›®S›p�Òü…yeö ªh®¿¤‹zÈ�K¦y/]å8\®é”'Ÿ£qËÍegG¶Õµ3û€þkúùô¥àÏ«‹¾¾(Í9Œ%û öX££�܃ àJ€T#àÝðï1|Þ’–8ÔCŒ<68€DV«¾»¬Ÿ ¨o>ØÏº‚Bä1 >3mùŸ’VÐÜðÏ3ÿC×<òdй>^^òÑ ¾ÃGþ#ï:dd»½J®Äsí|;@C@Ð÷Zú˜i¹†”3¬kÚ1ºÓ¹?›ŒÎÏgnÀ‹ð×gàŸ0 ÷ð3,°z$°ßxå iª=—ƳKzKÀµq•£JºnoúPä—] ü@×xIÿðÿà¿üß¾}ðâÝ»P—÷ ÈÒ*´Õ Í[ ûGÆæÛ}Æë×ýTñSü#Â* (“lV$nŸg0wHí›+zÁ£3üeOåvÐq–V,?5×4à��Õ™{îä—»Â2\åbÙÈ×rÖÑË ¯ó^½g{ú>êÉ ÷І®+Þ7îY¼í›Vð:–o¹ë꯼~UW•þªã¼�qmÀmH�6oûf¾¨}•–ÎrUf‚\þ!Ý}Ýàóÿ¼*Ípè”O8ò3”c£Æ£Ô—„]@Uo_F–r#Þ*ªÏòý8‘àŸ™? ÿü?ýßþþR&Êò-õ¤¶ÓþIå¼þ°h|À`pÕÀz©KÊEƒ'¯7R^�ÈÛ òR“��b;õ”µÍ‚¿åm·}H]â?«[Æ1�û�ûGÐÖ{ò£{-B ›ŽS&³Ûã£<)ç}8?÷—÷r?[æš\¯‡F@®3×,‡q =ÀûÆ€gRÇDXïãœþoìJÓgºô÷šúºæg[§t7ÝÞ)ÇrŸyoÀ \ýõŸåš¼–&ì÷ž"™íE-PĪæE-© ¦2kµmÛ¦ ìzŸ· ’™5�z­#Uû¬ÿ¥Ëý€õoøÿɬÿxW²€ülþƒ_y =åÕþÙNö4ЖFÅn~I¨÷˜ø# ʸ0ÿH˹ô%{¨›|hà�tW 2Êüå1<ä—uy´‚œò¨àwç¿ø4}¹�O\)‘¤ Ãe¦O½åè_ ½Ž2×íFob8ó÷A=(F'÷ƒ§z†DîYû‰/Ø®ë©yMŸË4m£›nB›pb)ÿJ¡à—ñú£bœ e,_¥Š–<«´GšåTëîâtUò§®ÀiØ2ήÝéï× }Þﲿ3�ÿoÞÄ» ;ÿ)ÓSg@^ºöM Ö¨ø‚QáÒ¯aÛüŸ``<"ÝwÁ�ÁºÀYi¿ç,ÑçÅé'ã—ÆÑGù;›T~†gŸ2¿Ø�Pœrø¹_‚ÇFÊE¹ÅH²ò�“¶^Óˆg¹žP@#"ÿ±–ßq¸–ßÑ›åší� ȵÌ=íë£ùO0ï«y`ü†k ¤ï×ÒÛ�É&�«K`3®.³{W#Šm(بsÃõçIãˆR–G•ëºzø£@m3M�̾Q´  �nÙ<[‡ ÐnPtsâï>÷wÙà7 ý ÒòÝøHcX 1"·OR}¢Ò<âü}åñ™Jžp> ù)cg§åií[¾�`¿ðˆìšNñ_Öåš!³€>€_‰ì‰�uÊ?r@Î^OW{”�i1çTîÈY#â1 L–é{þ¶•ñ d(yß÷Ù¯K¿nsE ³QÖ•RV~«QíÆ}ÎØÚ—Ÿ�¼§2S€µÀÿµ+ÊWù ¯"eP�”„oF€ezê>ЀÀç#@¦Y–6®ãþ>OÞÞž èyÞ‚¿-çØwú’ë>Æ´ýcqX.î:Ær�õÿqiü;ëö®›ÿwvk«v�6àÝ÷lÿØþ™û˜©pL˜7<Ò  wÓ„¡‚üK–ý_ü/™ñë�õgãŠyÿ˶goÒ.ýúx"ßà�ˆœ½ˆ|Àbz|qûë8î�ó: ÎølðSfx7þ-¡(#}Œ&ï³áÀ{Â|y à_Ž 6mÜ/)tÂ{¡àãï Ö0ò�÷¼÷>´ÃxÉJéÞÛ—õýÁvs›nLêÂÍ]£¢¨¿_åO}ÈP ¢~—“ö4ªøÌ;êV Û²1¬`|ªÔ††¥*b½mitø\ßgÿÎô_a¼Ôøë¯ìøÏá?nú£ìÚ°ïúŽƒ`œ¼u 0v–*ˆùVÀc_ƒtÉàËdøá"_ Ë)�£¯ò(?‚÷Ï!‡HËì1ÈWþY€Îàozîï|ÛÁè&BWr„°mèOì¼–îëÐðšz?y4ð;îAWÜ€ÚGÞ—Þ/‡ö2¨žÿÀ¯¢/Ïæ~ lÀ ®“ä_íÏÜñ,¹9k C³0ÒŽŠôˆ¢V}(áeMœòQëáMK:Ô:.½ÇKÿ/Yò�à a¿áð‡ª°]ºõ†×_Ö°}˺œýð*ø/+Æ €gÄ¢œÏþµöy6jL¾79d@ÙÍÞÙ¼²]î'Ërݽ®‘—aï‡áŸ"Û'ò ^€ž]þ¿ yzßi”zßû¥À÷Ü[/é¿÷£ÿƒ¼éul‡N³ï‹L¸ò0}s›N-�Í8µ„oˆÿu+Ž5?•TÓ¤ÎÈž¡�_¢�c&¬÷Yè;fBÙµ¿w”yÓ†blTZÞsZÀÞ²s"q�üº àkX9î—•€œõ�A�¥Êuæ_ð—Ö ì†»`;õ‚“  ‡Ú¿Ì:!@ßÙ¿›ÿ\ð€Îü³ñoð�Ü·w�µ×�{$3ÿÒácx-ÇõL•IZÿœ›Àµî‚öZ@5â'‹k :>ï…Òœ@¿üZà[ï?úÐÓ×çÌ€,|èþ¿Ö¬˜­Û›��UÑšÿwuj«tF›pF$[Âyð�ícgc/Á¾~ýà¿~ÿ=§£}fþàûê§w/t³âF™ Öô&wfôÔè öó ß2‡| ‚Ôeýz{¯©Q…O0� <è'1þÏ„ûÙâ|–ñX¾JÞ:¸�Ù’”{ñÓ�ÿ|gíÈKðŽ÷ºÏ×~„•[å¤c˜‘§1�kHØoRd©]Š¿ig¿tÞ¾øšs04|ݪ!ìJ€c´�õ½/JåÓ°´î6ÆÕ¶7z¿$ þÛÜ&�KI ŠLꉀ/9÷Ÿ¿ýöà¿xöîŒèKï@ñÜýB@å]¥gXg¼éMÛåœùµ†  �ø©ëÍl|ígÀ¼¹ž›¹ôòë¬_ê†/UòbÐA^ÐÏ�?Îüƒ� }ŒjìÈ¿yeóòš—þ“Ök[Z�XgÜ•]®3éÀ_:Íüo, ѽ/–ƒ�ƽ'è»õßçÿÞ3>*;ôsÚ2nÆ·¹M7%�͸)Iÿäíü»ÉÑ€WcàKï‚¿òóüýR®ÊN¥¿ 8Æ'À@Ý›ø˜0ƒÃ5¬#ø¿À›'Øë}Ö+ Ã:•¾›=á¯FÀ²ÈuÀ:Qìc<÷Z�#«¬p¯øì>�H˵îõ.UÈœò˵–RÖû¯Þâ7iØ^�_�@Zï=Áÿþ3«_Þ'öÍ�cåQå òkàoü¦Çâx6w¿%°?éõ¿MeaÛîx‚RÎsðW¬蟳?ß 8¤ÔWi÷´ŒàOØ2´çî R®[ó ìkÚüC´eýè5 ,W×™¿ñ€?ÔÍ]¾ê•×½Üõ=õO™X_¾é«åã—qûeÊ^C™ÙUY­×þCSÆ™?ã_ âÊÃ뉆s�(ïµqöÿßU€Û¼ÿíº†^Îà°ž ðškî¹!í ’öÕC¤|4 Ñ"Ðwe  ŒÞôøÖíÙ¯ëtkþkÞ×ÝÞšÿ?,�Í8,—-õˆü#çÏ ÜŒ/´á#u&SGÀ (TéŒ4ùº|ª×ev-ˆ7O·gH˜P†/p �QÎxÓL²Õ®8ã{ÀêÆ#7bè¸éKÿ `{†äÛ–µ�ÒôÅ_ÀË3qÓÛD¹C?;IëPûÛ”u¼é{ãtŒ®Š8óÇ/Ïþk,•V�^;h®|WOaô-€¼ Hx¾F+7UN®å«€ô×5/O üÈ5ÿøgɾÚoÒ~]ÿ?Ç€ˆi‘Ó.¶ýžJ›p*Éþ‚|«¼ö@ßq¢è~ÈY_å_>h ”gÚ$Þ�éìµgÝïtíy©lVeëUæÎä4ÜàØã€ð'ÏG  Qü£„aíÆ%p<‰Km#½î˜-|Ë®R\èèÛúŽÁ>N}nÙ¤iœ™§à߀sþŠÏ2ôéZºà¬?Kì)á®,åo)ÐûÂÇŽ×ë¿ã>p֯ђÇCã>ø þ¥Þó÷ÙUßÜgœzì›pj ÿ"üûg,�’wl()Óê“þ=ŠË:Uþ#œ%`Ò|Ý/3}ÒUŽ KgÙÿ^W>Ò†å%ÇC+9ž¾øøÃ#ˆ}ö뇀<°�4T úQúöß“ åYÚÐp•ž4aûkê5]Ҍ뚶‹%ž%~A^¯àŒ¿+Rëš'-ŸÖŸé¸¶PÊåsÓÔ«0½­°òðÞÐÐÐðÈÑÀ„5kø¦HŽ8f,ýŸäÚ{�Lž*;ƒÑ.÷úyrÚÛ~7 |·6à»Ew³U7éÖí©ŒfgoªàüºÏþ³/€~æ™í(™+6¼Où›ÞpË6^ZÞÄË_%¼öÍ;D[¶¯±Ñ°ôŒ§_ÖàûXb¡¤[_C% U~1HŸÛ'º§¬`h™s�rùwŒÓ¥ûA“n¿Ú·Næpû$°×ø þÆ©³€ë\@cLQÏY½Rˆ—ß-:åâ=¢œ¼/|%Ð�°1¤ä?äQÀcÿRdã=áfýcaX¤¼T·þ?îR¿ý®ÿŸßr¾/tÛí]÷x¾O ¿~­Íøõ¯ñµ�P¥à³ŠL¥ö%ÿÌÍ€Ðøç(¼ç¤{6º¨’TAhÎí uð·­Q·Ê(G�tùdW>ÔÙV–é¡nÛlÛ†goº€í&.aÄvj´Ž3;ó—ƒ}TÜŒï cõ ?i›gÜŒ·ÀIñ¸!yFÁÛgda;iϰiõ#nåÈ©c„žÊÙNû�~ØÐÔîœ7§ï…çÎ!Ÿ½gýÈêà²ÿ\gF¹þRý‰ˆgÕg—z§~íiï5ï�OtOˆcqæŸÓÇ#÷2TîêHg×ûN»¯ae·¹ë“Àf\Ÿ,ï§Ùˆ àŠ/4øgsÊ[PV ªÎöUÚåDU€TÁ Òð¨ôÄì—1,/¨HUØò�¯iÒz €ùÃ>îhðÿÖð@¼a? ܾ°äU/ÿ*ô†-¿÷ˆÀ2c<‘/ñ:Ó¯ÓÙ]Û µmÛ}�&,Õ Ú2sZÂþÔøõÈfYþüÊ·ü–ºfÐ3l)~À¹Ì^åÛ‰,²¤yï=ï÷høX¨àŸ“YpÇŒ€ÙXÆ|;C»3­æÿpÇ®û�Î5td3®Aˆ÷�…J½Ë›®8û×F@¾Ž†`Ô=å~a 寂µ~€Çz¤°Lìgà�ÐrR!Mª «Ñtùê5–ÚÍF.ÆÐ?´`Ÿ‡3”Ù?´©á‹"+­bs<ö'ãr|ƒ‡d O¼§ìï¦ò·=ÛTù ä¦%l †Ï£»Üo³ÿ5økè˧åQ}•½tªS9ªv[i•£íÇ ¤Ï>ˆõYn -ðä�÷°~Ó×aã–»ÏÎñßwœêúoÀ©${E¾·}ƒ_µ}ŸÉæ™? ˜G~à©F ß�[îŠ/£¾.*c¾ 7Ï…ák\àt–îgxý �ô#Ôsùý(�{ò½èÜ�ò²¾é5„Ô•ÊÃOüêßÁóãûÄ?㥱ðCÀö|L0ƒ,޹í¦,c˜ë4,Øþ ~dÒu 'tµŸ]í]ý´eŸñ6Òðm»¤Å×]†ZGðŸ=²ÙÿòÙq=üë8;Ve!€R2, ç�z¨.÷,ºàë€oð¾¹�Í¢Œ¡Ù÷¤¹¤ ŒÂ"c4íÖã[ÇÕYóø‘øM·÷#}Ýê—Àf—Í–sDþùõ1}À1žp6š‡Ï+[ò8 ÀްÞ%S^¥^Ðp´ã#/|(mø!ž÷´ï¡D>†pÂ;û„ï‡d|[~¾Ñ°ÆA ù ©óïRÿüü_ðÿ úN°ôëßþƒ´·äù@y­Õt۴Ɇ¥{α0Ž€òhYÃáK™€ô¨8·s†ß(SÒ²­j{ÃÜoâg|™˜§+mx®#ØÏ¹Ü0óS~Æ5mÔ¸ývæ¬!§Ñ7Ë'ù´•oÐ÷Üg‡ø. O°¿öU@¥êýå>�Î"y�M³Ä×§flcŒ‡VÖ` ëÍm¸ lÀµˆñþ0Q©°¤~•Í#�UZ®º}@¥ÅlÙ+ŠÇòõÝiðRù ì‚vfêô!@ûeB�½_tö#¼«‘©*ìðÔgü~ä§_ùðÿ‚� ÿô­| ‡¿”²*xû “ïìŽ�ÝtËÆ;®†Í�×· ¦=k„Ç9òÝq¥�Q>'óž¼<�‡÷š¦u£(5Ýp éeÀ¿üf:Æž$ÕÔ¤Œ‘¶*ƒeLäùJwS_LcG~¼þ>2z7dä½ÿ’¸{ü8�ÆLÊXHŸÁ~mØÌ¼YÐøf(…Í]§6à:¥ù‹óšÁß°+y×@t@c €+–‰Ò‚V±Ÿ+¢¡ð-£â´…ÀxÂ�§ÀÐOñ>ä}| €W5ýp?‚ðàsXðJIN 1M>R�‰|å�±¸ÌÿŽ£��åÿ‰ÿ^c €èH}ÜàÌ?¡5`uÔ¥ÏäJë¶?�åfœô§ —ÇÄð³ì�é!žå-]À_~òÐÓߣ /_ÝšîR÷Ó-¯øÈ&�Œ›g™c¼ÊsM¹fÊÂñg†aû Õ)e”0¼ïÂÎp¯¿�ì•÷„Ào„kx<°€FÍüVÀ ü‡Â°Xœùù?-)[`“À�I`3~L~ß]û¦ÿÈ×Ýžü²‹¢w–ž÷�QÒYúG*ÂHö²B ô¨äêmc(Ó´7â–SÑ h}MïÀã ý-`ýWÙ~Å(xàJ€àÁJ€ÏdUÀμ4ì_ûØÕ„OýGù`øœÿ¨ÀŸŒ5{à'øÛ‡ôZ�ËŒq—Éœs½ ‚h[J|qóK@W:ÚØžë,à¿ôY>z]Ã�7-™ã§yRyè¥õ¦Ïüñ™y^õÝ$AÕ{!†×,÷×qôvéoVš,;úV*�›rʺ{I¤=0g÷ˆ`÷d€1ûuš}ošá«Œk]V>§t7ÝÞ)ÇrŸxoÀ \íõŸãš¼‘&ªˆŸáw–íUØz�þ²N>e©³»ƒAÛ4*W½' ¸ßþO W&¾þsvÿWüŒ�§øgxÃ*âð§¾T°ñð–l(Ęð¹ÿøÃGÿ'¾› =ÿÝò�jî+ÅÏ8óË#eå‹p3ž¾yà—åºY¯ù2S©+ÛRi#iæ—×Dòð %}¡Öl¼a©ÎôÙ—‡¹Ä#«ÅXóŸëÎáޥ͛ÚsDÞ_R�õ“ãõúv|:•�÷Jî—©~ ÜÐ�}ò¾Ðí½Hü9ýóº¸)õé0ì«ý®OÅé§éÒÙýªúdã¾ lÀ‰åü«ýY£ŒUH”¬ŠX%·ü+åuž¸S×úø´a{ñ£¢y]U¢T¥ë§y]x‚`?òξàÏÙý4 Ïñ‚ˆ_js—¶À_ïJ²³|7jü‰×øþ éYm œ´®¡Ò9½}\経´y)+_½À §MÇáQ²1(o¹ß�Cå1Ó¶»gÀOÞ©ÛvfšÎŒÞ4Ý´:Óêš/Oú¶ìü7<ÚÉ8æ:­{]×! ¤^fØ€gŒ ù�×ûÃ(­ÇÍi#éäD™ü /áw\+ €‚¿û“+Q5ìà øë°cÚÜ&�ë–Àf\·Dï¿(XH<ÆJš@�r ½¤<¬¯ï¦?�9í(ˬnðÔ�·Š¶Š·+òp'¿§õüYºð  x¸*`¸à/pêï(ã+î!üõÎþÿ…;€-ã¤|ú:¨áz‚ Û¯–�Ãæt*x½íàð§6ä*€|t¡•4ò`\ ÝÛ­Œ~øG8í´½Rë>Dw©ûùò¢_ç­wˆÚo]é.öí·})‚k@š÷ê?a}®ãˆû8à¶œ#ªð™þä` ÒÞâ5úZ`Cy_ÏF@A¿ýo¼´é›1PIlôG%°?*ÁKÖ¿é?íM´U‹Â PCý&À3ü €Á×ñÜ|çR»`}Æ­Óˆ×`…ŸÊ<௴%ètx•¢à!g½é†À‡¿`/0ùè `êÆ,ŸÇ¾ ŽÏcŸòx@àwV€zï|ÎO[nòsÆÿƒ>®8΀ õ¤¶+µ¿�ÛÏzóÓohÝ:Þtifì´#à×»�04޶J+ƒD•‹ýTF¸®Ø­Oÿ�z+˜?Ó]ìlzùÈ“¾îyÓÚVë_–¶ýCå·#wÌî ððí ßò’I?󸈼õý¿Žjâ:ÒÆÕ‰�YÀs|%°¯Æ€¡�ÇÀ¿€oŸε†OÇÑxûÜôÆ×ô¢ü5¿uý«Æ×í]7ÿ«ög+X›pX.[ê%% dèwÞ¿fÃÜï,ÿÏÝ?ð¼ý>À}ˆ'Š1<&ªB׫D`T†›t„U*Q,P�ÀïÌK@rÙ5Æe}vïìþ…ž<� oþä è·�{Ë»'@ÃAP-¨Ù’^ˆµß†]µ�®ÇAÒ.ÍÀgùÅÙ>+´×eã¦;î½ô€³L d”ò–±ß–/5|È[Öô™ ÏuåYßkÔøŽÓù¿òòZ¢Ö\ç­¸9FWqÜ]?z^ÊÀ·SrïP&y¶qÃÎûCÀÙ Mh ÆÕ× ¤Q`ß{o¯Ã°Ižé›Û$ð£Ø €•à9õå?©c›½J×ã€_ o0>°ôþ…ç,í #O5–¿aË_žÿ«ÈõŒ OÅ8|žkP'+¤›æ£•¯^PΉ~Ô×8)ø{`�çxó»,+uÉ=‡üÐO÷{ ¯ð› Ц�¥ßÖµïÐŒC:ûæ�4Hœe쟮aûïJ†à?oü[�ü£Ž¼ðƒz]®ÜŽÒt¾3ï9ÜüRóôô3ž¾.+Í+=ÔY¯W�匢-s„ÊÅ¥ôl „/øû*jÈ—~ò{ãÎû/猖½Ç^ÑÏ|6šûÖU€œjhß {�ô×´z¤é�ßø ¶9 lÀ‰.é}ù“:N} €±ðOß¡àÿÜ%ZÀö�S1Ïà¿„M|k„á%ü¡*ý® "Ù¤'0væ.ø?¦O¾wíŒ1yßüëŠO”õ,€œ.H}Wòºá€Ô6寛�_ ÓxɘJGše¹—�!Æö² €7¬O{£ÍC|’Ö|ûh�is}ã³oÓÞ…ÎÆçzòÔ þ3=Æg͹,Î:Æ/C—J;™ix 4/¥Þƒ‚¿³hïÉû6þ‹®èÜè*@Πo98Ê>Ò·ôuPûY�?Docös¿®6àš®­Ê&Ï«ù߯õÔm®ù« L«wìžøp}�ðà€ý„•€ÌÆ(¯P³›í“–YÊPȪOø þ˜¶Íð”Æ~¦DS‚Y:u4ì—ßj÷4ÀÎðŸÙ7ÓñòÊìÛzxÁ?éjÆO8Î4Æ©kØAgψ!Í>¹¢±^ k©×pV.(Cº:„Ï8Óì÷ÚÍe ò­Ó<ãëz-Ó¼–EËŒßðì[gæÕ4iûÛü9nØôÒ¹^ë¶^XíÆž•�|Ãó÷½ç,á¹½W×,O÷ºk˜hHßã�ý{/úÀ¾æ\â­2`‡¸Üf|‡[óêí;X¬rjþÝ/”Àf\(¢­À! Ìhí³/�~Á>€çø§€¿i-«ºäÃ<{G úξ3tÓ³ ŸPëŽW‰[Ïú*ÌÉ ¦'”#º8Óõ‚º3{_Y³Î'ÚuV–M€ð“‡€ÛU_+\VÈ[’2³;ÔnÓj {ÀhONõéçèÃK;”_Ú_GÀ<ä·€kóígû:‡Í?ozë¯ãÖA†d¸œö§L×üfsØrö·nŽ7\j™†¥ºÖñp²ñš:£X?±ºc O¦ì½iõ›vö¯÷§«îOñ‘…F€Qs¤5T#Ô{zýü¾ÏÏäþ¿nz|[{?¿6à翆·6O•O n �€gï߃;@…,Èçù>ÊN¥çwÒý\ª³qó�Å À‚¯ï¿çÙ¿ 3µ#�Fª0ñÖÓ/`ax¸ j²" _Ó4úüU~öIçoWúÞ>iuäÍíV&¡öoð®�ÕËèÍa�"í¯(ÑÃN¾kß’öwöëôCqË×ÍaÓÊë�0®Oª®ë™8ÆŸ|,3§Íñ†ËÇrMk]éTßë•$~²ÜO]ð:x_žž©|¢Ÿ^O¯­�ô®äñ´ÇŸþíÞläƒWÿ-³ÑMW‘Àf\EZ[Ùƒˆ¢EÙÎ+~ € ¶Îº= Mð÷1ÁKß ¾Kó9eO ÆÏ@ê�Öóš<¦*AyãU¸¡ð2¬›©¯Ó èYU ^€dÔ/¨,`!pÔS'®tÛÿm›ƒ:Ö€ÓÄßþ¶�rÔ ŠL ¦/FÀàašþBßô¿ý“òeÔ¼9n¸õ×éÍì‘áуZo¦ò´³[§ÍñCaÓtåÓø.u‘�€›ëÜqùÒß =ÊÝ$éµë5õ1€+>p@#Ø>kÈÎà>‡íóïý)ÝÀ_élîG$°?"½[¬{Óþu{UD‹PÊζü~ÈWûm€‚¾ÀðøþR _EŸÌÔê§]>yºü0o@ÃÒ�]¡�QÐÙaë¥.<º„åYŸBßâÝÐö×ã?–û=ØnÛ²Ÿ‚AúL›ŽUgº!ûjâºO¦ÍnŒ¯\ó›×øLÍ›óçø:½õš.Uv^—ÙyîñmÝ1Æ%¯qóåw,¾Î+¿öe®7ò”]hh¹@ðïòúú~=s=ÛÆ5ÒÝÞ1ÔpöïYîð#Aé}ô±…+¹7èw©}^¯ È­c9åÖ¼Û¦í_‡;5ÿëèã}à±÷á*ßÄQV à:»íó~�þ¥»ñ¡‚–ÿ)'UàÙ8… x« §¾g)Àq&°¤^6PY†º ÐŒ:5(&ß‚ëò«¸íÏm«xÅ|Ú·äâx*'ÛËlÑ~ 0èx*‹´\~–›ýÜ-Ëò-Ó¼9~,ܲ}} €óÀ_~Öµ�u‡âæµÌœßðšZÞ´• X’æŒZ õ� ÚCw\ÍÑ­�'‰'ú™FžkëÊ„àÿýs㩆J�a}éìßì×ìkX¶ |“c²Ý›pŽ©ã»‰öîk›p_¯ü©Æ�ÂÔTꙉIiKE÷ðÍÆÀßxCà%€çñë½ ó쟲*Iw컋¿Š�¤Å ðù½¼U®õÙ§%�J_\Œ€%F`Î_—Ÿã–›ËÎ<®†�}µgR] Ú‹ò†Ïx첊›@k1ÚGiý®ô·ßö}Ýÿ¦·ä¡ü9¯å¥öE/ø7,]óhýRóígÝ\¾éM3¾.ßz¥ÇòI04 u5Ì(4 B^džR§ÿéÈcØÒœTõdÀ€?ýz‰÷íû¥Á"�}úO½RÇÔ½ 79–ÓKk¿Çæ˜7w: lÀéd{ÿ8ûg¾3[�€.ÿ;óü÷îÁ+¾·]ï}Ÿ‹ºDêc}”à�¢j  ©Rp@Z ÓFÒ8á(ŽæAgàMÿ¨»8û;Ç›ašmà§ÒÍý.Ú>†Ž~.ý¥�À¾ýhaŸ}lÛW©nM-§×ÍtNoÞœß4éìZ¯€_ð—êu-³‹þµLû:—hš×r—¡3ÂEWP û@0Í3vèm¬´‹^-ûÖ Wü>€àï¦E à|D‹¸+Cø‚þEôW6*Ç�^¿6àúezŽ7ý_·§š�qg-~Z÷3þ#Àþ ïW÷ô~€ç1o<ìß¾}ðÿšðëA]xäNü#ÀÄ nô¾_ñnÊêU�žÌç«yY:'<ƒ�å °‡ÀfÏ( ï{ã#¾Ô�Ù¶»¢aÖ¡rS•oAûw�«DKSܾÙ€`á /ÒoÊ–·iz]Óæ°iëô9žŠ~ZOºÿÆ[fnoͪ};Tf�7Ç×|.’Ø=J‚Ÿ�”œ-× ªÊkïÚ_’÷�› M' Áÿrô^÷M¯•}Óx±Ï†gÈøÑ~]¶þZfk}pY>ÇÊ�šÿ±vï{úfÜ÷;àŠãï_ðÿÄr¾Àï‘¿ïö·üñàýŸ>ø„ÿ›ð“ÿûÁëÿ÷ÿüÇÿüσ�Äà ð€ çоáAySàÔ•€—¡ôéoÊuF$õµ©?y³@ÿ¯A ¢D¥/JRå^ ñÌÈLYò);—Y—Žâ¥|c8+ü3Ë<ÀûLc—M�ת/ÆW÷7ØnœöC' ixd|& ¯ü�Ïcm¸åKçrs™9ݰÎ|ÚÈ €àÿ#+òb,—v--CËéhÃVFñóc€\SÇt ξ¸ Õøÿì� —9’¤™ÊSRõÝÓÝóÿÿÙÎôîô=¯«JÊ;×>#,ä„‚L¦Dæ ¼:àG€n"‚9õIíeà\í?SÜíÓÿ ãØgD«ñâ~Ñǯâ“#ßkrôçµõé¹\Ÿa<—+ѵcßþ>ù±ºÓ,‘ï÷ëþ<ôü矟´ºÿYþ'ùÏøKñ.µp#ºð‹ÿ^» ·âñU@ž}ö×(ùà ”­v>Ðã¯öig�ç·ùˆ��QvNøÁOp›€sÈÚ EáÒp¨òôý¡ÿ䛜ʑoÅõñ•ÄïŒÌÈ®µO} ]Í9�þQV4×p2JàÏÈMù­hÊCË„k}¸VPÚM[]®ò(»)^em W9-ìS¸JÄôó`“è]¦Ñ&ÏSQõÜïàSÁ?i³ëåC‹ŒÿÑzî$×YÙ|͇ò¿Äeu\ÓœÐ~vÝïÔ“:v-?rÝï `¿ãû*¤óç6è Üϵâ¿`Û_ÿéo[üü׿š^è}PÛø ùw|nÜ üqœ{ùl§[¹‰"óFi<"uØ7�Á 0ÈïÓÜ(x¥qnàƒBe¹WŽâÌ#`([ƒ@}ÊvŽWÒPÀ-^u·rQà�˜G‹º½ª-=Yécúð=­AFäôàÏ5i×Çy’·ÒZ7c‰�+c;ñ)[óÔxÂë(r“–::^®aZñÔ •vÐLæ*[ÿ?ÊcȲâçû¼ã‚[^޽Ӯe*ØÖ0rpðÒ7è\žeÎñ;F`u†°:#Ö� X_ü¨ÿ(øþ¿ÿwñùÿý¿Å¹è•x �¸½òj¯û‹wòÇ ßa ìQPò¬Ôm¨>ƒâ©¯b<<ëϪ–¸½Â(Ìé#A€¿$o|X(Bù�÷è•^±(OÊÓ>Sñ½¶Jþ"·*ò*ë1Ânï}Ñæ´û¾¼sé€?塸 þIK5^e1Žx�ÛŠƒWr*¯�×¼5¼)ŸÒVj‘üéWON»x-0Ûÿ±ü¸-àw_h<�åùŒµ�ú  š¦�|ù¿†—|ƒŽ˜�aÌ�Êày¢L Üógõÿ“€þþ? ø/þë¿ÿçÿ,.åoµ#ÀJ†CsÞæoÊí`–÷*]R£ˆÙºäñAä²C€BoŠÛÛú¯òÛjÀyX!5F†JM; )Aƒ—{ÐýPÇŒƒkŬ¶»¬¨ãÊïUi[øŒ˜½²¦6ª–ôb¶-µ�5¼MëZ?=Œ#>à­é„3Ö¡µÆRרy 8x8Ê&¼)ž|먅Ýÿ3;N÷Û[ÚÃŽ;€ÿ9€ÂÜüßC5Çq@CŠ«ÀN¸úü·œqüŒØb†°Å =F–úÇÞG}•�2aÛÞ¯ReÛÿœ•ÿßÿ¾øYàÿéÏ^\‰^ÿå/‹k �`;pBU%œ8}BñÅ  Œ"/o�5èjÄNÀ�! ÄÉÿ+ù[m‹J;.Dß–ñp§¼¾µ…(hsÞ}˜"_¶L¿°héª3pH¦i’ ××BàÕ¶ôñïjýÂ4x?á¤ÝGû�ð¯à¿Ì±·ßi¼¨³ú½Õ¸�`æ8¯,†²ÀN€ß úAÿ ¾§q'À6ä•ïŽÿBsð0ž{ç¼Jë��þÿß§÷rß·ü‡¶gäßn†°Ý8½¹\¬Ø¯´¥Ÿgý9ìǶÿ9+­ø¯Eïd ¼Ó©ï¡ê™LñÕh00�?ƒ‰êŠ¡€ aX t-�¿Ö£‚ŸÞ¿_\ˆ^ë y €ÅÙ]ðJ“-Sµyò(ûû\‰|ä'ÞÓûd¼ÄôÚïÚ~ø€>c‰#þ6¾Ê"œzR¶^x5Þ—ÝUü1êø–¶ªÿ¹¥åÛašÇ· ó¼>àïçöÕ &`ޝàßàU\éûæÙú̪Ÿpò'¥ÅÓ—ûOÙ�!ÀnÀ´ ‘e+ï´]�²W›¶r”ÃQ¦?WÐX¶øÛ~ÓGJ×p¤Á‹�]âðãS6ñJ#'´OÛǘRGäÖpÚðL)çUØ`î3æ¼~¯†þk‡ÚYã–ÿÎÁiÎCW^æL@ºGZ<a\hò :F ŽÀ0êhXY*îCRRl(N¶H¯Y9I1j•y +à¿Vš *wç:Þ와äP¶–K�v6¡+5¤ì ó…Dh;ž±ÃoÚx!]z Íô<Òxû€(fë¥æ×¹æò^Æ÷�Œ`œw”ÎùÞ…Áÿ#žó€ €z+ÀÊOþ[aõÿÿð¿•î[þ·¶k”[�a¬ŽÇ^býŸa/•ìP(ÊÀ�ý±õ¯•ÿ¿µÝÿ‡ý¾áþ¤€€fòÔUÿœÀ@E+À‡e'€4 �P^ÄÙ‚mçóí€;m�iGâTŠîZJŽÇ¦ì•ÊwÖ#ëRadnå>É0Bq�‡¼é[ »}R²“@Þ—äÒOÚœ0}­¾‚?}%­w'hü\ž¤…öyvGv\ ‡÷Ì©[¯1æ —·º­u«·\ÞýêW~§ß øYïÓÀ¿–1p÷»ßÙ`>–A€P¯ :#Ÿ®ÏÝ2HÚ o{†°çëÿÁ߀€÷Bʇ·ýaü,ÀÊ@ЦsFÀð‡âPvy` & 9ÉÃÇRøBß ¸æq?§j«|V8œœ¾�ìñ´Y„SŸ‚Û9@ð€âvûDm´-UvX­Õ‹e�WðKß||5ʘ¬ô2|��]âɤqò�̇Ÿð.\•9'¯oÛ\ž'àÑ{ô”ñ‘«»�·Ìyý÷.4ÿïDù�o×d^þïõFÌn…©¬ç©hVþ¡yBÀò5>Yá¿4}ô—åMU9 €7u¹7w%ϯõ­À‰Œ�ñf¶ü™Ø’k×Ân»x¼ÛÀ· Äg|³}K=­Äƒ«{Òj¿�úð¯4i}c)OáÞ%½Òšg®LMßU˜>$Ÿø=T˜“öøäPñÔ¥ü”¯ax”Ãü|7Ãþ±”&«ý+)H^üA>;€ 3uÁÚÊ©}OûPÎvÈÃ+‚ÇuQh}³ƒ6þÖm¢O¯ÉàT9qø½‹ìÔGž„É›ôZ.éОË^òOx­yR~ Ï€ä0Zö‘YË=q8ÀDeÊ8);Ëîi>Ëèš ]3þ›þÐÄþi ù«Ÿžø:½¶ê‡ðB¯ècü�³Pi† ˜¨~ŽHãà„k™>\eîÓcXúì ØøP � ^ÀNf7€Õ?yþþ¬rçumr¤‹”�ÿ¨„q„ãNZøs”õ§>ä×p­/üФÝO¾ûh•Ó…ý|½x(å½ûBÉi»œQã?Ä(BïÅ}ÿߘO¬ä=¯ÔV¾sq#€Ãwz4ÐOŸhŽs¯Ÿ31¼¦›6å?à…Ÿ0Ô}mýdHéou}ÿúxŸ¿–ý–ð¾åK›Þb™a¼Å«¾©ÏRQæ¨{) @ŸÒZÐ ðúÅ&Šç}îËÃËaÀ¬Ì#KIvÄg�ÚEfŧLä…ÇaÁc)H9-ùÔf+šNÙÍÊ®LÊ)ƒj‡œæ9$i¥­ºÖ¶7åvHi—]k£ëN»Ô–¤©ã˶.9ËߤWJ#ð�Pˬ Sgꈼ>/yp¡ËØý¿É�$òÕ¼ ûÚˆò•=Úé[‰2÷8dÇÙŒH^¨ccRáÌ-Ï™È~DêÑ¢­ªó°ø_ë‘¿«_ÿÚý¸ÔÁK]«KÇÅà�™=àú•GØÿaÆFþ©ú¸ípÒ¾]ÛÖý–ò à-]íö…Ô{DXQu²ú|(±¬Æ�¦Œ@™ NuÕpä³kŠ…†bGQú'RxG¢(ôCñ Þ¤£ìRvKJþøLÜNJ‘6âQbx©KSÊòÎÞŽ†€"w^à!Nù‘‰ƒb<Ðv{d‘.e«J *€5ðtÀc9j¢N·/TíšÀƒvöí�‡ ¯>L·ÂK¾e©Í¿sõ¥DêMü!4e×Qd‘V}xNZnýû6€®×ðç-’yräXs…kHÿ­ +äS9®#W‹U=·¼ 6]±í¯8ç]Ø8áŒíf§@qÂøûp ÿ‡%/ÿwèpow†ðB®ýcÿQ  R*œB>ÔJä�”Ï�Mâ•¥Þ^Õ¸¡¨ªôQ'Poµ¶¸ˆ]ìo�9Ð>ì¯JIêZ”4q¨åp?Š=«Vî´å!êÍy)¯z‡É hñôÑ�kÁS=imÙ·K;WÀOm6¨Ck˜Æ¨�“#Œgüâà %sd¤ ñêÈ×§…_é¦<›ÒªŒûÂ�ZŒgÞ0[?Ï1VÌ '=ó™>ùšBUÆÿê$,ž)q¹�ÿëxJ>ÿ³�¸Ö¶?ç}Àÿ¾Ò{€°oKéÃC\ß_êÙ¥Û·ü]¶õ5ÉÀkºš;ꋟ  ¨7“ëÝäÇ|öWJˆWòrX %„G±Æ xøP?JVAßø§|@¿Ò¤ñ64<Š�­}¿.Uô@Þ+É GiÓ–(rÂVÜ¢Û:ä¹\£Èu}M@ê ì·¼‡|´Å^ÊØ ¹�”Á;áÔK{Õ—iµ¯1]1’š²Pe{—<=.9}ZÏO|JžÞWù¹>�²ÒgŽM=�¯ò)óíP4·�B=Ÿ”�¸ÿ Ç0¨Uí#ŒQÂ.ï �ìpñ_À˜q[¸– ûÿÕúQ�æC�öF|éÈ ÝG†Ìç?Ãxþ×èIZhГp„ CH‡ÿ…hop�? �‚ÅÇ¡nP¼¸;ñ„7R)(¾î‡÷=QQ9m³·ÔåO”uîÙûõ½JJ{JÖµÁiå/åh9Q¶ÐVÊESž(P”𓺦ÐÓ.´©ñWÚ_cg#@[Ǧ}û)—òI«²ÂCpò®TÒEjٔ鲬´µÏ¿)oŸ–8mŒ§¿xÅ™‹Ì·jlrK€¹ÂΑ�¥û)•ñŽ’(cêùÕdÙH]{¢Þ•Ð5âÀ"áKµÓá6>¼(}ª@O[ñðë”f÷ÞSv!6FÊ.d _�À0¾“7Ë©6–Ï�éR À!^5ÿ(T”kuz©_»ä‹QÐ+ã¤Û(�Òó€ÚqE[äý˜”¨�Ñê¾Ú`Å#<+¼É‘Š��tÆ#uYQJf€Öt“ÀGH£ i7 ŠB‡ÚSßgâŒàÑïôy)�,\Mƒ·)¾,±üMùðOÞž" ^ïSm# ¯>¢ô†ñ"ÝsS”¸ßu!šÇGQŠõœcEçyùæìçÇ;2B¹p£ù°óz`À­¯\÷9# €Ÿ´Äi1a÷e?ÍߩԗÒÎ�vú‘„ à‘ú¡Õì{Ò÷òQ8øV(=íœhà=Ÿ'eåÏGItÙÏ&k7`z9J©ë`”­lKƒ¿öâsk [þÐ�=¸ÓÙƒÕwø‹_,Žä «MïÔ6rÊ��À[y@¼ŸB@ÑMK õwâ�¯å5•̬ú¤ˆ-ƒ:ÕW¼ÇKyËÍÕTÇP‹ŸÚ–>¦�Pú 12% /éé å*o.NÞäI=)ßÓ¹ôžWã5\eÁß”–¼éSí_k+c†3�ì$Ãã@õžèËg‡¿ùÍâø÷¿_¼Å agb2TÇ!ÀSõ¥ýBíæSª(?NOÝn§g(íuûQ:€%^a”¾)á¦h]ùý`¨0–ËP@q¼•1m Ò>Æ©úšF:eI_çæÒçx}yòô®çÕø\^ϯÒÚ¿¹pd�F8ýõõT;™“´Ø^yW^¼Ã˦ü® æ•òû°©ÆÐ;DŠC‘g`Ý…£ Hòî…dR/í³¡,ªYéÿQæb(óžð:ðO>_¶—Àpor†ð&/ûúN[�)™ÇŠ0Þ p¯ð·ú,é­ùR+qMâ½DA±%‰Ôñ(.¨¨ÓEq“bU8ycĸÒÊÿ’Û 2<Þ©¾ÃßýnñîXœ`è,©ÚÃRl p-¹â��p)…ϳ­¿ ­ <·Ú¼Á_aß>h >÷[Qð“2nJ¶*Óˆ}LJ»'§0íÉ{ ÜgÒkõa2 ããÈWãá‡Î¥WÙÉ·‰öùk<áPäôá¹xå¥O1pj&Â¥­™»Œ(Þà¯ë Øó¬=suÊ#ù^�6Ñó'F@ê.²¿9ØÚɼ£n¿ P”ÿ F �6ÒÎÌÃmÁßóD2B¿¹}£à‹�a¼èË·ÛÆþ(ÊÍ;\+>�ýå?ÿ¹8h;|§Üà)ÅøN@«ýÉ/Ê‘òÍ;å¢X­\øC'@à)Ã〕>;þÓ?ýiq*Cð?‘a`@Š·@×W;ç2Z>Iî±úEÑç¶‘Þ{åb,ì5~^\}´"fœðò+ µRÃ~#SÿÛ5³2§MPã­´@m6ðA¿¤�Kùoq}›j<áPä' M8üÄkZÚ•¾ÕþÖö&_áùzJ=P¡öO¨o ˆïÿT2x ™?Ü–Ây'@ño#Ki?ªÃ×TQÿgÏ%OÓØ ií"ïC} þZí¿�À¹Öù£“ =Ñ}x¯„´òÿ¬ø™€øäÇ=j‡¢kÇ\‚Q ɽJVÝVŒ�RÀJ¶Qog6…æU�€ÿZà~+�ç¾ÿ;mýËŸjÛÿLþc@ua”Xñ¢ä›£½Ü8‘B>“œ�ÊóIÀ™êæñ)Vó”9.mó9)ñ,Päù�u4OÜÊ¿• �N㪺Vu>’sMeœéýM{ÓÖ‰Ò'Ú?×ξ?äIŸæÒæd¬ãõåû8åà…_iø¡Êš‘f~Mm¬aò¦í}›ÂoyrMÅËØÒ?% ¹âùM9À_óŽÃy<·�š[Ôë9Òµ!mžš“vLŒ/ÿo”Îÿ„±ª�—jqh‘�^}�ð¥–ï Mÿƒ&fš{ß'v”Þó `ÏüRÅó‡ö›Æ0¤pÎÌÄlýóç¾P|ñï/¢œ¸Už[œð{P’a+Óø<ÖÇ#~pºåÀŸ@žmÀþHàöÿ±8mÛþ�;o>«‡£x|Ë‚¶ÊŸÉ8•ørNA}Áñk€G™Ëû•°Ê…Ÿ¶™J™Ç <€àò*GÿmìˆfµàP¶Gu´)uü€… €Ö ƒ¢Æwöà_—­,ùv-— Rþ¾8ù’·Òð�¾Ç´¨Ã)K{ ojwòж„kþÔ­ùr‡Wœívæîs½xâž?¡\Éó\¬rJDœ@IDAT©o“kmÁ`f—ŒWŸK&_Æäà+Ô·D=/CÕ>Ç{%NZxŒŸ79Ãx“—}}§ vR(/Ÿ¬àJsøôÿµ@Åq �=×­€k ¼Ö“W< #à/ƒ]|þ¼< KQ"ÃÀŠÖ!ÀÏèÏÿú×òÉÑ�ðçK¥¤85�‚´’†*Ž3I)ÞI�ù]Ç‹w(ƒâPÆ»?þÑ÷üÙö?ÑkP¹ç�?°ÓŒ(@”U<_ÄxÏö?€^]Œa0åS0Xýs¢ð?SÛȯLË/­‰ú�ƒ”“�@ûüMMnstIGQ?…sÝêWÚ8�€ÆiþV?éóŠŸk¸dN.aÊ}‹Kù”]‡Ÿ´„{*¨û!‚@ëhµ�ÑÉ¥ÝÈJxJ,�5iSÍïhμ8‚ÌÇø¦„5¿x9·Q4ÿ¥�õ»Äêuy@mó€úpÖx“ x®û& ¯iÔBœÿH(¼áÞÆ à™\ç€Ô3iŽ›‘U6˜Û€"ÏâûûâqÀÏë‹ò sNñßIùÝ ¼Ü àûòVèJçEBxc@c€ø‘ €c¶üµúçœÁ™VþÔi/ÙÞú—’¥MÿŒÔÆ�Úæoˆò¡Œ?®¥ô€¾åüü(€ògÕÈûÖ¹— pº•wû5†Cârü¦ IwÂ#ü,[ð¥"^‹Naµ3F».ÓmÚßúðEÂL Ä…¦\�Ã{¨«åçÂáAãUGÆ{~µÅoðk}ü«§õ¾Å7¹¾-’:ZY%å\_ã27ì5wlЊ¦m–‹ñ¼s$ê�‚ÖvÒ‰3G¿õŒmÆŒæ€ç²d~Pœïp #Cd2¨³óÊò¯æa.Ÿæ4¾Ñõ2�;Üó�a<¿kò,ZÄ8b‡Qn`(°2ºÅÀóÍVýö sÏŸºìUoVòk €Ö^”¶¢ÐÜïèßkg ø{û_í‚F�ZÉ¢å;äÅ.Þ!ÓÛÀ(ûdxjš6·vþld³@Ë?Ûì(lh³¿‘Ye&‚¯s†ð:¯ëÎz…"À¼Ü÷cu…øŸ ø/µM)àü/´•Ïc‚×2âQެúÿCÑxvŽUþ˜í~¨â€¾ïù£ê\À2HÞKQ£Dñü |ï_yù€§«¹§›zÄš }Ñ”l<+¿ðÈû,œúà¿ÆÐà#€öãI�«axêŸ4~ÉùòÛ—ù’²>¹ä˜ ‡W©Â^y««}ÞöèÓïêWv{ \+¾òCýé_QÞõp·§jy_¯ÚÂÊc§pVüàKŽÃ¦òá§üËR²,–óÀ|¥\Ú§vOgb 4:ñÛu‰1±PZÆ-êÅxaÞj_miˆGãc£ƒ<ô1ø�á(_ÿ_fŽŸW7Ãxu—tw Bm4E›íöc7Ÿ+½aÕ/P½üuøïTཔ�Ba5ø5#€°¾ñQ„xxÔa�âl>툒ª ª?*Ì^uB1ØúgåøÿJmû °W’’ õ[•¥šme÷_q Å �m\ .ЖKÁ'.±ÇujÀî6ªOÉ´ú×˜Ú �OM#ܧÏÉèËŒøþG`ûã¯&ÿ#T¹“*ò§…¢ªâ/ù|€”rþØ(®†á1&ø¸ÄCÃÿÚËGVã¬iãÊNŒïóC5_ª@<ó'e2'™ìÐ×ð¸ Ä®ŸÔåÚ×sÞ9�žÛ0PØ@~즒‘öREuiýPú;yè¹úà Q¼ê×…â¨HçƒÊÇ!ïÑ�Ú‹øóvÆ••?ýUºüÅ×Fq M¸¦'_(2çÜ\™ÊKX 1ç~?÷ü½Ý¯ùè†r½˜gÓ<*màšÐO(é€"ï}ðy][Ÿ¨TõÅ è¹öø3Þì4çú[x³#’²ô[ÞµäÎ�˜ õ•°ÁYa®)ýb€¶Æ€â™ŸöªËà�ÑB~Ê2”C&miŽ+�gw„2ŒYhòTêñ­Œ~±#0 €{éößðúG�R€¯:@Ÿ4Œ¶:Qpñ({ (l§¼¸Ô3GSWÒ’ lo^ ÌþsÿÊ€ €½ `ñ�,®µp,e‹?B™«ín›äø%.ŠóV5^ä<(BÉÆs;ágí 2Ϭ?ê "å]ñ…I�Ò§ôOüÇrVâwVý€¿�1…}€ë„§mñs £Ý›ü\™ûúÛ�E�'Ü(³Á+oQ’ͧ�yÅ3žy5­ü•æ9míÊ\!j9ê3s%Çj›s ¼¶×^s';¬œ³z¦|õ›À_»L„§[­¾ž¤=ßqÉ¥-É¿ïŒ@žµa‡ ú«~ÙPÔ€xÜ ŒQ�ÿó›ëI<»%>÷¢±ô—öŸ€e5ËÞdL+EžÇžŒÃ½èÀ#]¾}ÿav-yý=€?ÃH<ŠÇ Kù¥Lï)/.}˜£.+¹þºè¥îç_hU.�ÿ,!À¿'ÿN¼c�ÿåy§´[¬àü(—¨4¢WB€?+"V?'2 ø¤ð™vX1ò‘#¢Ô{ªÃŽ€JÔ!iýmý€z[7Ú#�FMõÛ©MyõÅ+ŒÂá“/yûv•k@ÒdᇒØÂSýÄ·�;ÉD†qÏ•7U<·T0¨rÏàçšøduÞ)û×Nmªu2rÛÆÆ›JÔú¨Ó+j]Søô åèÇÿTÖgZ-+s¶ñÖ‘´�ñ"<•e܈7¨ëÏ2�ø™£6”æÛ9”Qdð>¬òÁ«SyÚJi¯ òµ¼>#YœÕ¹Ñ+·Ù•ãNvKæ3‡sí•6Ä%­yUáºóÿ$Ž#>õkÉ2¯gI/£/?[h0w>ÃØù�¾�ý›8…°WJ¯Ã#ÌOþ9# y Õ‘?.ah¶ûÙòçÉÀÿ³VöçÍs�Ÿûö·Z­óò!ý±p þ¡x¸·uÕnVy(RßFP÷R{”®ú†A †{ÅǪï­aÚ¦4¿Ë@JÒ…Ê¢`-¯5ÜJ½ô#ýÙ9M¢¬(i;íËÖ?àÁªŽ¾ØÓ€”Ic תó°}5(£4÷«åm¥ˆù:;Ðý¸lãŽ,(€kVûLUG¥ÙúôüÌ…Ì‹&zkB�î?cÒÂÈbûs¿í:ûã>ðÕg{ñÝv Gñ=ÖJ«Žôpœ·&–pÒÈ›°)òðªÃ`HXõòÖAß�qz‹gþÉ ‚÷3m¤=’ÅÛ7¯5ïo4ŸyñÖ©æ³·ù™›J£�x¯åÑ]Àz®0ô_†Á™nqÅó0Œvõ ¸Œ{®AâN,é‰úüG`Ïÿ=i çþä(\?^,ù1j¼æ¡LïæêôêLÊí³VóŸêÿÅ_þ²¸øŸÿY\Šò-îés¿èó=‚Cùc)D+Ò¦d:Vê6T9Ê£ÁýRßü�”«Âö c$ä» #`«4­ß‡2–gW¥üÎ`¤úPâ^ñÓ&6ž0׊ô-¹¸²xÂ)eJ¿4fô«zE§|„ç\dq]½’eîíèPµÓ;+äiaŒƒ‹S¾ŸsõÍñÒ÷ 9ÊxR'ýbüP¼¯ŸøŠ,Ç‘0ý‡ªá9‡Üù”ÕÜnÏ*kYWê¡^ê¡}´W”lyg@aæ"mçúó�€kÍw‡Cÿ ÀžÉHfNÆ{LYÙ7�áƒ�* åõÞ¿Ð[8�§ýx ;Ú!çë§ü¸ü¯ûëÑÇ�yü<ÛÀ³½4Ï«aùc‡¢Ppÿžö€Ÿ8e¬Dghd“§:ó¥Qrç2~ÒÉþOýëâêÏ^\ý÷/.åïd°ŠË–­ŸÝØ›÷*]BS7íåp"ç¼C€’“Gñy[_JÑ/.b¥/�PÍ�¢³£`ðg\šÂTÒ~]ÚL»©Oûš€AàÕcÚšVÄD³úŸV½ð”ÏžrŠ ’–¾…IÃeL—±/¿õz2[ì% Ê!L{µ‘ƒ~YåÛ/† �œø/ÒŠ ®±WÎê‡ÁJŸ4'˜'¾Í¤<ÄG%iÊÃ8�‡ré?4ñP±V\ò®0k¤µÁsùê3ŠLøæi¬ 6Ræýç¢Ü»ÕÓ.w2Œ9óò¡Ýòâ £‰D„æE<·ØéŠç£[ì®q�yÍ7s<õr-2v˦,¯á9GÞá^Æ àe\§¯Z¹ï?Y/?J¾ò{# y sžNÔ<5^;Hä‹Bfõï­VþÿÏZñŸkå##àæo[*=¥¡v­{퉇§ J oE'EËÁ)òðù–f)ÅÇG‹UNþó�^_ÌkŒy“¡_i,£„¼> ¦vÓö½¨?�Au#1ÜGÆ«%ºmü'°"]}ñØ–Ÿrå3N^™+C*¼äöJY|ÆÎ×7u"cÆe®Pž0 ëëƒ|µÇ§úÍJßg+4ÞGå›d(ü÷UîRž4ZÙÈu”Ç»7Pñ|ÛG}‹ñÇãzGdiî0nxÊb@yà—v¸¾ÂOpJGÌVžqBf 2'©Þü÷l8‰ÚÈ“€|«s/72x7íeW #ØFªÆ5;C5|÷Âß¾Ð-³OšÇ>p©¹Í®Ö�Þçq'O»xt’:é¿ êU{ª§�ë\ëuyÿñG`{óãD?©È¹?qúа­$¶B-”†‡—p:?.ux&ÅÅsþWòŸ¥Üε¹ð³ê¿‘ÀJçP+�C)9”“9P‡¯ tjB©ÇXðéiÅá%ìO£¥ ¯µ"ú¤]ˆ^ëêBÞ¯2VÜ; €�”§A�0¾ôIbwîÒ¯PW@�ìxT€…ÚÁ.€·î¥°½³•÷8�¿yäääý±Ê²:‡ç¸(aõÊ×ÐTa»ÖÏŒkØä·“\dØÄC®·øÕŒ<@fp¡îVÎ…맵˻)7Ɔv`u}¹Ÿ/zGIcí1Î5g¼UoÀ-íFNÆh9"%‘:ZÔõ)ŒÆ«â‰kP¦9ÌøxÜZ›ßËø¥@üùÚþç@cô£¬È×øâmĈrë€k€!`ùš×¼ìêGÕ{£ÿÕ}›ã†O€«è-O¾h r& בvࣨ&î{®!e«^ˆÌAw;ÃØíx®(®ïùì¸Y;7×§€>•Dö´¦% ]ç¼ý*EÄÊÿ\Ê àB€Ïýþk·Zý¿üÙê”bð+ø£ ¬¤D£\Qdñäðñ„~|'Æo¤ð88u!ð¯À+$ µÏ`O! *“GaïÉ. Ñ 0U—Ï"F\vP<–4¶{IqËÔ?]¬És]m N0xÅ®0—ùÚš³ý�Û+9•Òv×!> ¥ñÛKÿþœÓ¼V·‡va@éÚøu½1Lc8¬±ž åg>8]MZŽÚjÛàek ü:_OÔ†�ªëšS?Èóx*妲Œ“â«À_ÿ…d` ðLRUû| @ò¼óCÿTc#ðg®3—1 .EoTöJ² \kït)�3Ä)�KÝ\GæqÂÕMãZ™[†)ëú¶Ì?²=|†ðð1ÛªÄ÷Lü­*xÂLô-NƒÊÅ Eà’‡pòõaâsƒ‚½â¾¿”Û9;ÍðÀßÿî•?«?·¯üLfÀ_•éR]‰)%J cNþ¤ÓvóRJïSvd°0í ôª¼¬¬ì‡À$íÚeeI½´9}uûU7‡¾0ˆè‡Wþ\y¶³qæ£XÑ/|yÏ÷äÕo‹ e<â\6‘Ð/xPVráG~èÄî,«ë¦=÷Q}gÞ²:f¥ð‡ú<9€RÎà*¾ç9c¥2½£Ÿpë8$�Ç@®#ÀÇøµêø­þþdµø”§œÃ�±òhóÚkvŽc0ä1L¨V…×x�ð+b¥dQ l«ª â¾ÏÍHãy µ‡6±ì«jô){¾øVò*—þÁgµGkéo}ôŽGðÖ)·Kš±Þ¥ÌM²6ÖÇõcÌDs%13î�ûd}®3yñŠçŒóÀ€‹Œâ}ÚµHÛ"¿Æ¹2¼‡‚¯WæãU|ÅÒÿ�&�°Ïd(/áC÷©îûó!®S�ù±Êüö´]y\?ùå=7Dcóò#^&Ä¡X¾àIžs¾ë!ÿNÛÿ6t`¡§<ßÔߌ!4†€Š9 �#½ÿo§lÍ“0´Ï_ÓFxw#0 €Ý�囕Ôÿ™Q¸ü‰+­á~À’f> IŠˆýü¤ƒ~œú¿VøV ÎJM™˜¼uÕ?gÐ’(Y”Z|xP”`”b( ˜�H‘²�z'�R=ä•6}ˆ…°ÊómöÈÒˆ–)²sg€W�>&錽·Î¦J¾ÊÃ-úOŸÆÅň©ùýÊ]ñr_žkhÙ’?œF€q�g\Ï8ÆÐ· š˜Û>€!¦k@ØaÆžk#_]bŒ6i*õ|cK_\YÕ³M�ñáízd)o€œV�ÈX>V~Ê)ŸßaÑêÊUL=”cÞ3?ü¡=.2pÚà0ágíx±ÆNÜõï~Ç䙾ê™ÿ}¨ÇFéìF Ëýóˆ¡xvnÏî’¼¬åÏO« GÁ'¼‰Ö´v9)V"lýÿ$ðÿ$#à@À;)8¿¢UbÌ“bS>¸(L¨­(J9Ééç)Q¾À VØ"UØÛ¿´My/•'ßd`‘ø§>wçT—Wþ¢ü Ô üÿéz´ü�WŠ{+[-"ÎJÖŠªr^ýÇ€W €Iæîzóâ$y 4&  Æð×ñ[úD=7ˆ˜†úP&|•±A@˜ë07 \7ñyŒõXó�=o³ä+–Ür@ï¹È9ƒÌ×¼ûÂ_ßT9¿ºYò¾Î’I^CjÃÙ û Í�íº}ý¬öòÊmÚÎ÷=δ ÀòPþ³¹õG¼Ñýe~ÙÂ!‹]‰áö3ÃØÏ¸¾9© hýÃ'¼Ž2Psi¬š0xͯwdœhûÿDÀÌ– €ºò¯a”™••ÈEÙEiVµ¥Ê=ócÕÇ¡Øbõ‹X¤$ÒVþPêü?·°ÈN�³$†Î€¾ÕŒ"7èW{íDÍõØb*³bÀ“Ï5]¿ÆWcÇŠÇ”‚ÄkÍ—|žZ9=Zè•;y%cºmXÛÕùr}%ë í|ä1WÅã‘Å|Î|Ežw|Ä7%.Ï5Μ¡ªÔ“ÿÿϵß;*/´wû.þWŠûÍ›ê¯ æM�?(=`�̸j$LZþßß:Ÿ¾µ\Ú5èúÀú±yÕ)ßû§ÚTž´ú§'^¥àä…:¯PZ(МH¾ÖýM¾Ö³µ Gy%ÜS&wx z…ŽâCéUð' Å¥HjïþçM�^a‰ú[â“÷\ý<‘‡¢Ô¡¼ž•²´kRÎ —S}8ÆÄÊš°ê¸ Ô ¬áõÀD#Ÿúå±S8/á™¶ÿ›\|£?sc9 …ÆÇãÊ86‡Àã•~w?ó�ôxÅï=#Ðæ•ïí«׊yæk&ùžƒÚ‰z§ÿ�wZÚò «*ÅӢ̓Pøä‹G.>g#*ÏkµÚuðö¿â: p¥ÿ F9oÐÄЉË:FAÀ¿þ¯“ºqlkÆÞû `ïCü6+ˆR ÷ ç�ŸxF¦Æ£¨ V^Rо— `Æ'­QòNùÀs0Ð_øké¬Ð¹_�'?. ±–ïåQ'ä½ëÐ(€ož;æxÞþ“ÂgâcPW”l,õ=ÔhZŸÝ.Õáþ«>ƒ�êd<¶¡]%ô1y1 ò:ÞéC;È–ÏuJ™A·�Œ}»>)±íƒ¯æ¸¿C ÊÇ~εâþ,àýY«n QÞÏÀ®·˜ã+×Uñ~ÞÆø…’f`oøŽ@8iä…å o×ô61j}yÀŸv2ïp™/øÿܰQßòºÀøy6#0 €gs)^_C¢æiY!ÐóÄͤ”Žz1àKÙôF€ÓHï<ŠË€-ÊWÒÞ7/2m×FáÅ£ð(ƒÌ^.òJÒv äâ¬�¥¨OÆÜSÿIá3âÊçg¬Õ\êqä?ƒ6mhž±ñ£Xª €!®Ÿ¥ïä/[ð…é>2¾òô‹U?/xA�SÇpß07¯ú¹æ 3Ž�å6g ¬*Ãõb>²ýŽÀû'~ÒŠà Yi­‰¾ž ‡æÿ`?·ÊHGnüb¹Nò“žú9/â×i«^ÎøP¡¨ocˆ¸ç?Ê;óßÅÏíôÿuêîéG`O ^} P3½¬üª Èj°¨zð�’‹Òƒ†�ò¨?Èëá%+HøQ„UÙQ¦Ê¨aÚA9”:ÊToð*>À‰@“ÕÛ¿ÿ–¯å¥Œ¢Êô@,ÖV޶Øk¬pU‡@Ôàß(u‘o­£¼¼´SeôX©ü±ÀŸÛ‘_¯ËZy#áëàà5Æ=#àW è¹>Ì™i@�àý¬¸_Äö¿¶åý àR{®ûÜ ;a¤þñ™Wˆanâc@ñÓ€€ß‡ 1Q¼e´þôUÌó“>ôž´1·…çã†ð|®ÅJK^Úegí•☜Â-£}KŒ M™Ä¡Qˆð¯é}¸Ê ܧûE9Rx¼ �&+%å…@ôTq”3ù¢LQ¸[9ú×9úŽ÷.Hê„ÖxÕðãæÆ?MÉ'OÀ¹÷ï•¿øÈ˜“Ó5kD—¾2Ë«ÐXŒ#ד1on«3º$ä0‡Ly+ßÏ\}çÒ/wâu¼|º×/|RZ5Ž©Š3ïQîÂðxrO8-cn` ‡—²Ì9Ï=êìi—<ç8À‡´p™3ÐðûxæüÞ%­ç�ø~G`ûß!ý!#Ðê!J"a+øMžù-I(3<À‹Šâ^<'õQx„á‘–|UŽØvU^x¡Qx€& O^x~2AF€Òx”¨h5\"ç>ê²Êd…,968� PÇhF€ëX#0ýSC–åø�+~m/óiØéVín#Àø3ƺ~\Ó8®'×€5àÊ5æ¬Ê'ùÉûT>Ì£CxþÔµÊñ”ž'ò‰\êè æ+¹8æÿƒ\yh .� õ- €_‡py'ÀO8�‡~ÑyÿG5Wï£›æ«…ŽŸG�a<ÚP�ж� ¾/Š &ŒŒš'2§<-Å¥‡bË!À”!_äE†X_êla+­¦Ä £ð ª ³’æp–?”¢°ÁZå¬1øð÷ ðWY|ê� €Ö†9ÑéK¨ÛBÛþ¼ÛýPß2ˆ@{In�#Às½t=™7sÅû÷äÝ1Øþg7àF€{ ŸTq~ãN»8 �–ã*â™/ÌûœYIÜóH|%¯W?2hkÀ߯‰ê¥|œ  óÑ †mR™m<õ�9Ç(<­ÀÓŽÿ¨½Œ`…³é¨ßk_y„7ø¬SPr¸u;¤¥î>L7¥£ÈQàRÞV´¢¤y@;½–—|R†u)30=ù€LêU=ö «1K_E”ÅЪÿð—@8;÷é;®�äÚ1?d�y¾ @§÷heUúm“€ÿgù+ñþïelì”÷w�Uœç¥âuc€ùpgfbóÿ€‡Kš#’í¹ˆa�W�~ÕµÚá"ÞS;yJ€>ä`à}€åë‡|ÃÈh< ÀÓŒû£×ºë?Ú®åõbEÉj�Ò=ÏCî{òl2 SJ€G‰U%Í-€(7±¬ìPxým€È‚®„U�¿ (ÊŠÍJ[4[žÈ¤~\}”eë{¨¢µ~òmrÉðG­ÛKÁ£lmtˆÚ@é«-ö�дÉlòà(‡ÐÆtZý‹ç±N¾eîñû½#Ð�'W!××× ðVž‰Èê1Çì•ßï àÞê?À“U�窒·koþ™ÓÔ/ñ¤×b=/ñ‰ªÍ+àÞ€…×ç)ñÔ5€?#ñôtO F ÚDQ€ÛÔGzíèɯ½àE@œDÖ·�­xü’ G™Â' ØGy)hàø§|b¥I‹¢½¢-R¼(_”s dSeðs(ð7UÜ«(2lãTŽüYñ˜MÕV…ŒËüª³7hÎTm%Ýíøã›ø}ùeéñ»«ÈœD^æ aæ-ÊïyÃu’ÏÎךùÏA>¾ȇ~Ùú×{ÿï¾ÓV<ÿ™: 3‡Yñ#›z©�¹Ï#ÆpÊæ¿â¸Ú‚q‘ú=WÔ&vŒ5�üÔH›?.§6àhË:WÓò?_—wðg†ð8ãað2¿ŽW¯DE)¤Ql(9âQ¶Pâ8Ô —2Q�‰ÏR)?Vÿ|ÝÏ‹~øôk âŠBW¼7h[ÚäÜóã¼R Ó€êŸVýRºê•7p+½º¨^SÒä]FmçàŸ ”8axÈjùªœÞÍäÚWŠdâÌÙ¼¤ p·1 k�¡ÉS$6ÚœcòmŠ´à#@Æ0O ¬¼ÁO²2¿1pÄ©3|æ;†aøÌ™üW6UÝÞqcÎ1gäëÓ#ÈêøõM~™©Ã=—Às¹£ÓdÅû®íË8æ]èò ñØ h£HQ`Qn“�ˆqÉEå~hdO;R~6:D1ت˜«Ë½¸y‰Šû‘L(õ ŽT¯þE½ ü.O]€3Ö�DGy7Àk¬¸m­”Éh€ „tç#àk*©Ì‰„©„0Š /ªÂð{%Ø3¿0<1:ñÈ8‹ Õ?;ÿ¶�9�læ1�K8üä ?ÿ�ðCý_P[² àyG;4Ÿ˜�ìØ8UÊø©“ðœ jóåMx®Ìàíw†°ßñÝZú®ÿ»–·uGv”EÃaµSí¼ÿÕ¯7ڸч�ntúZü;Îè¤ÁRW*^èó�a<¯ëñ¦[S�”̉€þLüQÀ�V<çÚ 8ÿ׿7:p­SÈ|…O¤B­5zöª 㪌²‹Âô¹×ï/ IÙ^ ìTïéo»8úÍoÇÿñ‹÷ ŸªnŸ oš6sðTÊñƒü/ÔîsNMKAó2—Ï¢Ò„ËFô¿â �ÚŽ’¥®<;Ž÷2º¾±ek­2~µÇÏýsò9(îáî_å ¥@F °yÑÔÀ,ŠK~x(X(ÞFT>åXùøÈ o¼ æ¡æï­ü�¼wÀDá[®æ gc0qu–e¾g>%N¾üO2ÿ¡¬“×\»üõ*âƒ_þréõŸÀ`Úuó(à¿L¿/a†ð®Òh#€BØÏÖKÑaüÀ6§>‹z+ð¿”2ºÑjœ¯òT€•­ .J E¥eLz 4y)iå§:1®¤à.¥\oUï;G¿ûÝâÝÿ¸8ý C€‰#”/@ZñS)ì*�ào¨«Ý<©Í.ŬP@?«Ú½rЧ.”.¥‹/ŽþÄþ6(§öðÌÿôØŸâÈŠÑ’2ƒÎ�@æN?—àà¬ÞyÕ4”8.W†2s]Ò˜-Äý¦¤A•Ð'å Üjbõ­ëw-òZ+p {ñX™ûV“æ>2S¯Š:Ìœ@V<é™'P<óžÿ�ç¿hÀßgT¿ aýßÞaV½ÓsŸóZJˆ[Ÿâóvt)YêlçØðih)E>UÊù€•Õô´=*¹JîqúÉñi)»kŒ V9¢‡ªç˜º´íÿ^+ÿ3Œ)_ÚS@¹!úÁ8V;Î$çƒò}àÀ–êæ+j;…q(y\Ú6½Ë]¼€MúP¬C]0ˆ,�%«?xåeìüþ>°¥vAíÈ'÷˜×Ó>áÏ×#¶¼ï€{šH~<#Æj<Þ|�ùÙºøC‰§FeüÈ �@¾ÈTò—¹¡0 ìíQç×¼¼“á{‹¬ùè—îhî3�Ù!À¬þˆÂI¿ ½#˜ÿ;`7ÍßjÕ�±}¨yÿNõ�ˆó¿ÐÜöm¤^ â™S¡É².Þó“ÐÇ�a<ÞX�š0(¶ÕmHÁù,€Àøºý¹”áB‡ï0ä9#p«´[n ˆ.xSF,�c[Õ^rsª?'­o¹×)%‡Â;’¡q¤ºÎ´ú?SØ+)>VÑ~º�lU`¾e!�åÀ™ŒNlóvÀ¼2•úQöVÊRÐlßú[ëäQ;áOí£�¶Ú ¨v¡ËØ´Û‘4+f•óÊŸ¶Êû ‚” må_; ‡Òß6’hVíx€ÀN”ëQWð¤{G¦å£_~d� —/åîý܈¬Þ�˜eùÈenùœ‹€Ø¯ýÕœ¸Ö|]è–÷䯔çF�ò¦¾øé=’ç9'º4A©¡Å ü’y#o#XóþÝþ°8ÔÙŒaÅ=ÓŽ]9æs¿÷È­ÿ‰Mñ>y‡{üÀã�ù¨qà¼E(%ç“õ¡ÀÒ§ÿ¥Iã¾ögõÕÿþ¯ýµ ü-ï�H­X9 ¨ºü>s•3À"Ož“Õœ²=@¹¡èXù øO0TÇ)^+Ÿ¬üyß? �Uv”Ô€ÀÿDm;“’ŠÒc,Š<€œôz€ÏsN<\òô1|ý%Ÿ¯-tá×aæ*×ß;aˆÌ{÷ý¡(>Ú\Á?}0_í°! zLXíGi,èü¿ÁŠ üàc +@Uj@aöÒpn‡ÊØ8‰ ö÷.2ZÞ©ì |�ÂecdQú]<9j~Â(7Vßñ¾N-«÷_ÊÇ nùm¼ÙþøáÏ®›¼ñÊçú‰+Œ›ÒÄK|­i. Ÿü/ò¢)æì‘æ6†Å�æöµü•¼çoÄóÄŒxìð{Í­œ'Qæ·ûqïŸsœ/8Ààè?À.رŒìSý/xôõDub„xŽ1¯T¦úÚöÊO¸O¯qÂÃ=Í àiÆ}ÔzÏôŠàeû¥f¥•‡ïÃwêK)©+)«K�7ßð™€v.àÇhð£L sxÐ¥ªv¸çÏy€П>ñ«z¨‹v…Æ™×bV|€I€?÷ûú÷Z�Aoÿ«]P¯ÞfEÆ.Àtùò8ç�L%êT›Ô åJŸÕ¾<«þ þ.üB~èkúJÓK”U|@Ýc,~-§¨Aå>cÕòq�XÑs ·Øðœk”{öð"ƒ8®æq8rU†e=5 O2/q(™½c¾{^‘žy¨y~+ÀÜÙ)â�ì�€?žÇf9/s-š²>ŠaØæIv™ êšó‡}î÷óè+oßžÁlX•¹Å©ÅÊP¼ìäQ?ÀßÏö£ÔQÒÍ›×dH�$<G+{O«á1–¾çÞhÆ-”qv/ésÉ?ÝÃoüŒ)cžû÷ÈE~®«¯ŸòçàÔò« Â%Î»í¢¸ÈJ8~Âè'¼žŸt(Æ.ùø°]Ï™ßæRÜg8ÃÊ_ž/À:s¥²ò·šoG<Á"ï÷Bh~g'Œ�3ÞréWn ø�õ:Ñ ð?¦ŒþÔŸ]%âégOÓ—ð¯”ð&GÙal¡ïOÀ÷�á�°§ˆò€¢l8�/�ãUaŒÀŸCPWZþR€çÚ½½”"ŒG�zûTe|?ÐÇKŽïk*ÌʈxVÐUá%J›ªsimÅ+Ÿ•ª µðÿ•ÚÆc‚~µ+ý’÷[ÕFmæ.ïõVå*žWýRúqnƒÀ€UÿÊÊ€PyÆÊ>ž9¥gxƒm ÓdxlÑÚãÞ<+ôø¸XËüê;yÙ¾ç^>å/×!:]…)Ë5Kšóµ<¾ž]YÆ´Ê"ŒK¹?4yˆã’wû:>;BwyÌ£#Ï€®¹¥9…¡ËjzË“1ÿø‡ ~Vûn4ß0ly�Å^ÿ n‰Y† ¶úíYùüíÿàÿõw>}�Ÿð­ý¬ý­áôsÐÇ�a<îx¿ÙÚîû³Ï¥cýÃ�7¨i‰F rKpeUã³Rl‡RpGZ{)ÃC…Qœ}ßT Î[ü€> 5uQG§Ô¢äBQù¼Ÿ€6"ûF«{<'±ïäy ñHuŸö2Hø„ëG…?6Ê@¶b]·êç0 2øÄ+· „­M<¶x¡<ñ~Ûmü›1yn»ò?µ[Ââ—VT`7Ø*)4€\iMc¥ŸÇî ìŠü5>PMž.¤wVÿxÊs}q¾Îë¨òÔ|Éš9²m<ùBkùð q©;ñJ=×ÚœãëO°<Ë¢9Ï9ÎLgôàp+gbðÉ€?;\~™•(ÿŒ<§û1¦íÙ Pê`¾ßçÓ§M”~Ô¾ÕpŸF|¬ü…ý»aìŒW&þ#T÷jª@IôFÀ:%ƒ1˜óŠT ¸•V^ÎÃý|@:ÛãPoë‡6%G¹(&èö�_y¼)žò¡5/<\xËØ×qøÄ.£yež2×ýá Í%^ €ÃÐ?hEÃ-€øþÌ6sFyò´»b<ã�ϹŒGûÜg$�6U?÷?J_}Úà?4ÜGÀÔ=Êí¢3~(‘�NÊð˜Õ°2‘€G  Ò+†„Ò­ PlMÁ¥žJ ÷Ê‹6$JõR€nð×êþ\ÀÏ+Н1øÇz7Ào0d ø vNÙ�l5ÎO0°½Ïì°ºÕ¶ÆRé*�Àðü÷9 ][½¬ü/¤¤93`ƒFü¹u‘ö!ê1�TVJýÄòÙ{øêGŒ‚:”ü¡€yòøŒ]ŸæÙ!>}§>®kòAû-~eùR-,Ʋí¢5}.\yo×�ŒR>ùzš<•Ox“«F@ú“¹hóê^¶ú1LyOÀ©ŒE¾�q©Ã‚œð!@å3Åx$,j¯pÝòÇøÓ'ê©>ü9š|5 ÞpÏoø 7FàYŽ ¤ºªP®ŠE�ÒB‘KáñJ`¯ÔöÊ a¬¼«›©ƒäȇ¦ÂICÑâ18sø_ÄPü.;zGÁ� €kÇÊ�?’G¦Û&�lï÷–¶Úìµ0Æ)ÍÂö­)ñÝæF‡nó‡|Œ[5ÌS:óßÇÃ?ÇKÚ†nޤG�a<Ò`3ñwéÞ’¼ô5ÊŠrÁ¡ôNº¢Àñe( u\ÔF@£”­ •8n®.x.+y¬¤�Ç!Ãs­ðñŸå/øW~»â$ö�Vþ'òÆ:ÐnÀ­Œ> D›üq µÏo_S? œê>‘²æ‹‚g2*xSà;ÝZ°À¹•=åp–ÊûÝ”QÞê[LPòßêæJÂ3 6Úç©i § PüóØ÷æþþP¯ò•·7r}M•^©¢ðÀÿÖxÊ…¦ÎÄ{Ú§÷u×ü5\óU>á9×ÏUÏGÀ¸›×ð3ß¡ñί4\dÍÕSyé4`� 'OÒR¶�G>éÃ=ý àé¯ÁhÁ†¨Š"J†ì(6”K WJŽüð Q€•RvN¦N¨½ò±›ÀA«od;”ç•À~f›ú0Läy‚À·$›Wc4¸_ê ¯3f»Ÿ¸½Â1x�±þië߯@3¤©iòw9$àQµ ‡àY½C‰ã2VoÅà(–€wåðáð¡ää Çh�öØh}ô\Ïu‹ç6BKº’wÞÂß&ž²ëèºzúü}¾š¾)LZï2W+íçr�çÔ�ÿù˜GÉ©£�ß'dÀ¿�Ö<‘š:·¥”‹«áðý¾À÷�ß(½§˜û³WJ(.ŠŽx¯èPn”«Ê/á”�ŒüФ£‚¸Çz%P?—ð#ßøË_Wþóâò¿þkqõßÿ½¸“Àö>oý³' °7Oy\ê¢Í¾?«tï èh§òð¬¿_öÂýýæÙ%°a  ¿Õ�pSÊÈþg•ƒm£ðb °úøë«s'òànÀà �¯€ Ÿ¨Ò-*ï6ÐOÆÇõ•<¾V%N[rýÜ>ÒäÃo›xò¸°~R¶Ê«y*¿†kù¹p•‘ôžfÞTÚ‡©³7È3ç#?2­í'ðïãᇒ^ÃÄq¡©gú-e¶‘;òÈ`ƒ0Fौ@¯ˆãQ4¸9E·Ž—ü.X~jV¦j¶ÿYý_²òøøŸkõ-zó·¿-nu €Sÿ¨8Zâ­(ñðüò?…10XÙ“ßßø¤ñšVŸ�é´ßâB”Ǽn‰³ý� ¸:�V]Q¬KU+!Å¥´_óÆ{Õ.:µŸ±mi¼xçŠçýùlå§œ¯�âþÐÉP9dúzõ´´=cï|�Ÿ°ŠM}œË·mz/ï>Y½Üš¿Oëã}^Òqá/cëã=8'ž9Mù„C+¯†“š4è:G;ÓÖ„{P¯ñ„CS&t]=ƒÿt#0 €§ûQóG Ê(ÅP48”ZhÜ&š¼.¤Ÿ”�|¨ûiu~­Uÿ•îÏÖa>î÷_ øYñ߈.?ä?Ûþ’ß)Þ€§x@RÁÉ àÓzòaÄHØŸð_ ì¯õ8×g=Öu!Ê3Þ¼ë`ºÿ߯@"¦ºj�„qÔ“{ø¬ÒÓ>Òè/q¯Þeû�²6ö€(»¹@¹Ègµ>mõ+Œñž&d¤¾AŸÏ àù\‹Ñ’-F W&(�(°ªì¢#’r5üÄ“ù”Ǹ”Àë…1.øÜ÷¿Ò¶ÿÍ_ÿjðÇé~îù«l€Óà‰LyfJ<ùú„~|Ïùßh…!°÷§_‹ ,wºûÿW ¨õ†¸Üy �8}M:@=ÐSqÒÜô�ƒ{Î#J›I—�)õæ¾=é”õ8@[>çoa×OX—x ÏñjzÂëh_>ùj�•7ÇO:·)OM«áeÉ/e«œ¤…¦\??‡nò”¯éÈ­qÂá90ó“6$‰xõûð‡&œ4dîù�À0žß5-ºg¢XªRƒç-{)7(J¨¦ŽŠL5‰'>ê €“ÿ<çÏ£~ü»äÞ?;Úù sÇ#¾IDATúgå�÷sûÊÏŸ à3ø‰"#^A»¬Ñbh'�¶ðxॠ€OZùjÀMv¸Д²©dP—·È‹\Vð€îáó^Ú8Óv^µËV}w~€ ¸»¢–+Š£­–%­ÆgÒ§ö¶üwËi¼Iî=ñä[G#s]zø}Ÿ£s¼¾|�“7Ç[¦,“^y„3?k^æ;áu>ejzxPi¸uõ'�ôê{ ø‡ŸrÐážç ày^—¯ZµéÏùUæ-/]J«ïC@ŸîW…šáéãá›J>Ûÿ¼Üçg=Ïÿ³îýc\óbÅy¶³uð_gÜ‘ÐGÆrÃVmV8éOÀX¹¿þ^Æ çpÉÃóà”™¶Ü6HCU†•{îßcL€Òȇ\¿7¿¥M;âSGÞà^âÊ>µÁùZþžŸxòì*9ëhÆgÚ·mNæoNvx›ò“6çR6ó³Æ ‡ŸùN|Î#»çWÞ\Ýá¥ÎÄ¡ðz°‡_Ãs嫬~#0 €=\‡1ù÷0¨Döã]#Å¢#‚xu}\„Ê: §­^ôó“¶û–çQ¿íÓ΀ȟ_�?á |•¾\'wjÊN< �P^t¢zNtþ€oÜi'‚0� ú ‡JO¿‘A½1D ´‹tÒí¯îᣰ[:ù0|F@ÔåI«>òÂkq‘)ß\xŽ7µ;²Dk¾>}]Zø÷Ñ*o›¼÷埓1Ç‹œšFWÓ–œ¯ÉSçfâЄ3·“¯Æû05TÞ×5~á ¿ºÔ~â=è'½–áç;ÃØãµ†=nÝ�1ñ(9²ž£•×2|UÀÏàû±?/[ÿ?j»ÿ“ Þîw ÀoôS¡sF@5\Ÿ~ò¨W<à�£•ȉÀÇ‚0N}�ÿ�¼¿2¨[îSëWäÔ{ø¬ö‘å4�@Oœñä>¾ïñ+Îx¹­äÁSžO�oÊ—´MtSZ­g›ðœ¬Ê#Œ‹¬eìëxøÛÐ*‹ë^ã”'^ç8áÞ“¯ç¥ is®Ö“0´÷”íyÉ?'wðž×ðnG#P'~ ïHü³a¢„Pl„«‚K¸§·Âo ´ßø$#àDÆÀ±ÎÌYeóʪ¿§@_ êʶ@>àO¼êoÔÎ°ê¿øÊñ«�UwÞ&è>«õÐîñû>ñ¦¬ä´`÷}üF3f¡1R&ü©ž&“8®¦'ÞÓäéù‰÷é}¼æ› ‡·‰nJ£¾¤oNÞJ- üDNa=(˜ùØêå&žüÐ>Þíå×xdÏQxñ”éÃUÎ?ïÀó¾>϶uQ OÕÀ¾þ(¾ð¡=/ñд=q(ž7õáü¹_/Ÿø½âq?…�ÈpÀÐL¸§Õ8@€�­à¯è´ò�<Êr€�ñ vŽðªÛß P:y�¯ÉPŸsˆ/ã€Ôì¡IÛ†ªšIÑ“]<üÐÈN¼§}z•}_Þ>}.>ÇÛTGò×<5œth\Òÿš9HÙ‡Ê#¿çm£‘>ñÞSOò®®ÖŸp¥ëÂëdÀ_WW-3Â�?Ãxü15>ÒDQQ (qhUH5´ÿL¨Êå}ü¦ÄáC€9Þ÷ÕEÉ£—/®š_Bè².ê#žòUž� µÛ÷Èܽ…ßÊÐ~âNÍ£xúܧ�âÊC™‡xUµ’]<üÐÔ‘xOïKO~òÍ…ÃÛD7¥EîCó�WË/9Oÿ»®Mð3ïCim ÷e%Â=%m¸—5ÃxY×k´vÍDÍ%£àútâ½â#žWöV@ž €þ+éª4à `æ�Žø½—UËõyû´È�Œ>Þó“¾-�ÑmË’¯¯ÿ¡òÖ•ïù‰Wùá=¤½ÍÛ×Q먬‘w#0 €Ý�å�ôÒGð—›¶çGQM¾ôoÊÓò')«{ùñj_îû³õ λþ“¯ÊQ²Ý²¥âF;@6ø‹ç]Võ Ô¡ñ(Þ> /ü„{JCz^â5m.^(åîi•éLú™Ëßóz9sñÊ#Y‰:Fà­ŽÀ0Þê•ýž�€/‰œoc4~_¸æ% ÀÇÈÖæi€äƒâ"£†kš3µ'€ß|@JZ�W^Ò\¾åK¸Rª©ñ„+?áPò$|­ykØôÓóˆ÷¼ZGž‹ÃnŒÀ�/#0 €/c1Bo|&°ì5ÓÊ?ñÆc˜Öëh Ný³õ�[·@ZêîÉg@(8s¶ÿ{°¯€_ÓКP /ñ ´ëx´«Ï×óî‹Ï•_W¦æ%.¼eìëxøƒŽ#0?Ø—'çöÊíÉ´ã<ûþ´úß�>ÆóNãy§�ðð6¾…x·Jà{ð‡PCs `¹&C.�ö·" º¦y¾ (ävØ€Âm¨Ò*Èo 3æûPx÷yÚ^ó$ÞSòô¼mã}ÙMåja\Ê/c÷ÿ¾ö{ÐýxôýíÓï±Õ½¼ÕÔ{)#0 €—r¥F;mPŽl­ ô�>~\œüú׋k^¤ñ,ô2 [¥ðøô«üà…~Œ}K àŸòýJ“v­vØë«€wª“z¡Ó¶¿Ò7þ\} ø‡º¿ô¹ó´¹òj<áPò%ü=´–íÃsqxÃ�#ðm#0 €o·Qê•�À�@—Uÿñ?ØàM€ïþ¢·J HüÜãèƒxâ8 À—2Ä^K¨¬ü¯øW¿ê¤Þ…<`Û¯üÅŸüÊs9ɪÀ_ÃÄ ÇÓö><ǫ哚´Ä¡¸ðC—Üåﯦ�ð�1ß7Ãø¾ñ¥_Ñ8ÙÚœvdkàXÀ¿Ð'€2 êàŸÕ{@?C Ï€ä‹Q@þð*�QàÕ¿ûàåÀÙ°Ó΄·¥ô³´›´øuñðCûüᇒž°í'ü¹´š¯çõü#0Fàa#0 €‡�׋É]•ë.½ky»hS•±«öEÎ;�î‘ÀþD·Þ˸‘p£�]ø°¸ÿîøxùr ä%AKˆûÒ"@>»IËí€1|n L[þÌ�=¸ÓÙƒÕø‹_,Ž~ùËÅ‘ê>äL‚Î!ÜöýŽýªeˆ‡—0Wã=/é=­ùú´ïÃÄq)¿Œ}ý[Aÿ¾¼_—þšÓ˨ò¿Î}?ç­É»D6çØõxm®m¤®�a¬™ÁÓ#€žèß €øÕ¯wú й>|+ ¾ óiÞ}¤ç@‚òöÀºŠ¯g²ÐYéSð¿R�—òWø�ý;Õ{òÛß.Ž~÷»ÅÉï¿ø ð©v$Ž0>´ò¯«jø>\Ó†öa.zø=MÚ&ZÓúð\ÞpcÆ<Í àiÆ}Ôú GÀ‹càXÀ€þVŸ¾ _ȸ‘pÃy¼ p8P.@_ €Hí €•€f\i…)€¿eå¯�‡#ÿ»?þqq*úþ7¿ñŽ„wf¶þæ=øÛXhBÍÓ|Ò§O ‡†ÅÁ¯Ô‘ò“ôÂÁ1cžÉ à™\ˆÑŒç1¬i@+nõçÏ‹ ï0ĻԎ@ÀŸ•øBFùòÕ wIƒVð÷- ­ü¯þ—mëÿHõü§ÿùŸ‹3í`ŒœÊ{@J€ž6'¼Ž&Ï…c!ñJéñ¸uá¤C¿wk½Êá1cv;ÃØíxikF ‚Åš,bïC^À Ù€:@{*0æ-€×þÏZ�Ÿþûßnë¡ò¤çnxG€Œ€;ù›öñ ¾À‡ƒü •¸“\¢y¾ß·¿ÖÊÿZà~ËÖ¿è;¶ý©KÛþ¬üϸ ºŽÕžÃ-θô£ùÄ+È×pŸ–²t¶†‡Æ‘^]ËÊÿÖð:ùß*¯/·kù»–×·÷©ã¯½O=¾�Uÿ0k¤G=Ï~Pj.³càH`{"pö­�ñµ¶ýÉs®]€;  \@µ#Àm�ÜX茀Ê È-NðÛK®Ÿ$PœÇü|ºÿýûÅ[þzü±ê:ûÃgVý€ÿ‘Úað/«ÿû6”þð{JZMçb…—p. üáÆŒxù#0 €— Gv8€ÏÀ±V÷8îÉ_ ”I{' >׎À•^É€^‹ÞiGàVÆà.ô\TÙí¨àüePð6Á›æyÄïZaNûsà�Ã~Çlû+|*ƒ€•¿ €¶òÇ 9”üu€Oz@<üÐÞHœ¾¦LÂPüáÆŒx=#0 €×s-GOv4@? (™ÄïÐwlíË àå@ŸΟÿõ¯Å'yž ¸þç?7ÿø‡Wô×íVp ø8y™à'â†Ûò×Ͳò×–ÿáŸþ´8“÷�?Ý8•?‘ç@"í1ø‹àç(õÐkzøëÒÒNhÂ;Ò!fŒÀ�g8Ãx&å¹)ÜçÖž§¸LeܱVðìð&>^Œg'€-8´'ʾy¯ðµ¥¿à\· äíÈ/ïï ˆrv€ýðŽeDœjËŸCgxnH&· ¬ü+˜÷a®WåÕ8á>ž¼I«”¶ÿ×—Ï­•ï‘Y˾tùµ/Û„wÝß]ËÛ¦#Ïó�a<¿k2Zô F% 0¹ÿÎÁ@ÀŒÝïˆÏm‚3�ô¥@ÿR�^ ¼ùvÀ­€?ž[< �`¯0ßða?üi‡áDFr©�[ìM4íLžô!qhÍ“pò=ƒaM#à`NîÚhCûõ àë1œ1ÓÏœ €‡ã  } ð À/xGwÈ~Ñ#€RZ1þÌ=ß·æž–‡v 8È?«zŸæg…/O¹ð�H+ÂVOê‚Öpö„“žxOkzäAq¡ŽŒŸ1cÞÌ àÍ\êÑÑo�€#€ZAŸxï8Ð'4õÊ=àÏ—¹EÀi쀑A8Ôé%_ç“§RÂñ‘“ô¹ò}Ú²ªÍ+ó¾�#>F`ŒÀë�a¼žk9z²ãD«@«ÐMž<ª½Ñ»¸=pªö«€¡vM¾kI¸Ð9O�¡½Ðó“Þƒ?ù†#0Fàm�À0Þöõß[ï_À¤/×:hÞòƒ´¤ülíCI%œxd¤|â©‹xdFnâóÜçøÉ“²•¦Î9Ú·k.Ï.y´«ºï­ÿ¹Ë«}} á]�÷k“—Їa¼„«4Úød#€b ŽXq€;áu”²”©Fq\ä:R~’žºBðÄ®´†SfŽ–ªFpŒÀ�7<ÃxÃt}»Dã¾¼{ðO4žr ‡Fæ�îðôiKO“M8eçê¼1cÞæ àm^÷Ñ뎊PçZ>€^hd¤¾AÇŒ#À à•̃ ¯¤K;íÆCǧÏH÷<âx€Gž‡€€¿ïhê‰üM´‚<áÄCkÙ¾žMñ´a]žum_—ÿ¡ü¾þï­o×òÚŸ>ÿhO?"#þ#0 €§õQç‹�ª¸Y\À J:FáÞ'oò'�‹üJ oòûžFFd:FॎÀ˜Ëû¹rÃØÏ¸©¯xª2tè|ºžp¥•_‡'å#wŽÂ‹§lÀÞº0ù"‹ðpc^ÚŒù»ß+6 €ýŽï�þJF WDÄ+¸ÏÊŸ.×´„ï”pu©gŽVá(¼ê«Ü#ðRG óžö×ðKíÏsj÷0žÓÕm™Fà%üÑû6ÄYÍôCéXM«ñtºÊK¸RÂ5¾øk¾ÈÞ5M;ÖÉM_×¥¿t~ßÿ§îïskÏK¿¾o¥ýÃx+Wzôso#Ð+ßÿڸȫtS˜´ê«¬#0F`ŒÀºÀº‘ü1[Œ@€9Y‰ø³*\GS&és²ÂƒÖ0eÃëù‘;è�1c6�À06�ÎH#°åŒsÂõûè:ñÔ#›¼•Ÿ²á%>è�1cþ{×ßÜ´’拓âøþŸŽâ�»*àrUp@ÂKÂM¯Õ¢5^I¶,Û²Õ[µ™»;»ÛšÌŒå<Þ.¸Ø¥Ìq~Ècø0Ñçy�µ(PyhGÚUžk¨ë“©?Íç#>Sϳt{SïÅusß�vÏE¯í>çÂñØûº86¶¿J™ôr0Ìò@œKйÊ­õ˜0F`CèxÌ€u_!0fšë9/ËÔ›#`¦ à` j^cö@@·ò{˜ðT#`ŒÀ츘R\§N´ûî·ïü%`zÈò}ùVdªÍ¹íM=×-í<<×Tzm÷™ŠÃµ¯Ûücæ×~KßÏ#`Œ€è à ‡#`Œ€0ë@ÀÀ:ž³oiŒ€0F ƒ€ÿ ‡#pòwªsïrlû‡~gŸï›Ï;·ý¼ß˜¼´óŒ�wlüÚî3v_�OCÀo¦á¦«~Sˆ_º–§ÎÔ#`Ž‚€ãí�°º8Àfùo'ÿy€´#`ŒÀM¬uòiÇ1;åiFÀ#p^üAk^üý7ýx¢ÂÔÞ?Ó#W÷ÏÓF YôS=õùò~çþÎ>?œ¥Ÿ/ŸwL¾¶ûŒÝ÷ã»ý¶ `¿èf@Mgê8XüÂR?°ÔCFÀ#0�JŒÕ<Åäê׸Øv�]yuNÅA·­[cŒ€0‡"�c°yŒ{õé9¾:ê þÈwq”ìpe�‹€: Ö#`fB Çç,×¶ÙeNmÝUëü7»?^8�ö­•Nþ[�X1á[3YšÇL>Ï¡0·½yn9ÝʵÝg:›•sáv˜Ès,¦þУ®j½ßLÜê€�ÿ PœgÇœŽ±W#°R4v‚§LZ�ű¶Ê�Ê@?:�Ӳ̕ԗd?àœœojŒ€0�B€q—”Ö(gÊqSAÀ€€±'Kò¶:¥ DÂÔ#0ÆÒžä?ݰWþͰ›0ÙR:(v7Óžu�„\ãµzï”ï{èßônt¢�k»Ï¡°��رWß²Æâ˜Zæzïk_ï7ãOX©ætÏp68(�tܤg#`ŒÀ>0¾6´ÄÝX_‹É4«±›:SAÀ€€Qaé@t2L!ß¡á”ÏpL:iÅ–UFÀ#pM|íÄÞ0§2¬S&êVAÀ@”F'B#UžÆ*ÔÉ¿@åFÀ�ã pss£oZs fœ&Å!È“ç`lÕðçáÁI´c„Ž£úÌ£@PŠ8)®­åï|�µA°èûŽ=�üü}™—ï{m÷Û‚ΔKÇ#Î_â*hôsã‚ü–c2e`ÀxLiŸµ ~Ðÿäû‡N§Nø‰]+Ô~Ë1FÀ�½@ò¿½½-±6vâ¯ÈLð¤Øƒ±¼› à`†:HvÊJ·Š€¦(o_³FÀ#0ÆæöÃbm˜{Š®E€ÆçÌcwêÀ£ÑîFZéO]GP§ ÃôÑN€×RÍë)µ±R·òµ�€0ó €¸ Kü�”ÉŸT ò9nó0Ÿ•çøª¨ÿàÏã†3ð‹ëšcбjôéááᯛöõçÏŸŸã;Ç›p\ؽ�Œ­‚r�Âo¦tõ˜§Mרž}º{ûöí?ãëæõë×ÿzc·áÈ(@ÿŽ1PíáøE޹m�€qÈhÊo4óýŒ­ç3&–ŽQTˆù^öX÷éÝP޵÷±ìÊÑ�†ß^”Ý]{¬;�í}h²î³Ìû„ß¶@”|ìÝy­Ï1|Ò�óâ»þ§˜Rhÿýøñã¿c¿~ýú€ñÔ±t}1;†ª¯ýÛ3bÂÚÚê €Æé�õðàsö£ŽNš{v¼"ùòåþÝ»w_žžžnîîîî_½zõ�Øë6~q_€>>>¾@ò�ñR4…@)Àã,1¯í!£•óA¿ã0Ÿ+Éò,C4~™‡†=¶d\÷n®g>·Ï¶‹�¿g‹=ÛØÁ–ü W&wÜGøâ@�›Îÿbª$l$|ô+4þÐï =ä§Ð?‚Fð¿ÏŸ?ÿçýû÷wˆµa¾Øa¿Øªq;Ômò¯9sÑƵ1¬½Ú¶ºO:œJ3|¸�_„»pÐû7oÞ|yùòå«�‘ü_DÒÙð¥ Eß ðë¾(Å@ìѾ�t#-øgÞÔG3€@Ä‹ 8e{D¶Ðˆ ˆ¹%Iƒ²‡¾|ÂÉžI¿Ð(þ ý#è¯_¿¾ÿþ#>\ýˆ·(r,¦\öÂ~M²•üu ã%'fe?�dVvåÍuñ�L™PÉ·É7ÆÀã>)xLµþ²ÑƒjÇ\ƒL;åë��iŸ{“òLzƘ^u”M�€0çF@“ y&[PMÒàù žüc£eÇ÷ýàAµS§ó`�r¶�=xåC]ò?Ï y5 iÍ ]“)�€:uèà8µgÃ8{°¥ÑžÚA⇠P${XËäOª-›˜çfŒ€X"Œy8ãx&ݾøÉ„MZKð9¹s.hÍ®î�3d™:ÐU¶µúÐáL®t”¥£Áé˜ð¹Ž2íb=(×±`òWŠõLþjKíÞ›0F`©hÜÃG52&‚j2ÏdŸ©Žézå¹_¦a¶4èÝ7€C ɪcdç� 'Ã<¥pH6&jÊ \¬±Öð Ö°O™¶2�)nFÀ�E#ÀXJŠØÇXH õˆ‰¹3ùCO4σ¬¶`¨Çp'ÖC^esÐÿ؇렀 Çcc¢¦ÌõtpP$}v&}~â'…í°—mgsÜŒ€0çD1OeÆBP�‡”¡C¯%vMø,t×fª{‚w« à  Š: ’¬:LóPÎë ÓÁùÉ6XdÛ´OS· èÜŒ€0KB@ã(yÆDÄAå)3>’j’Ÿ ÇÚ¡m¥À&ËЭ¾¹Ø8’,D“-euðp4�b§é|:&¨&~&}~ê'…]í4œ÷Ë2ç™#`Î…bŸ6•5QgI�1SüÏù¤Ü‡çÑs¨œõ[Us°yÜpMª”•‚‡“¡éÜ�fósr§c‰‘èY0铦ö·öéÛsÝŒ€0K@1PePÄÃZŒ„N Ì£œ €<ÆKJûa¢MþÐiË²Ž­†w°ý¨áH´t¥àÑáhÚ¨GrG£ŒyHð¤àY`&ÒPµEyP6DÂÔ�¥"€ø§�2ã¢RÄFÊ൳€Ž<‹�ž6úhL)s@ÝV[Ä?€”ÿ5@@çÑä¯<œL[v4ŽA�B‰kÉ3Ù“²ˆ)½É߉è¸#pI ²‘Í� \)øÜY@¯|m÷Àþ™‡®mÈ­°2fµžsO .�2œ ­–”éh LøLðY†¾ÖÕvmïfŒ€X9^òLÔ+¯]“8ô�UG¹�r�Ú$ÏslÑ5'€±ê`Ë6 8 /hnp>&eR:™RÌã'ü1Š=`‹ö2å8¨›0FàRÐJ^©ÆLðˆ›Ô‘¯QèØuçÒ†R`ÙMp ` GA"îs8;(¶:ׂrø\ pí�¥nFÀ�‹D€q´F5n’¯%rê@•ZÃ1€Þ-!àà p&bhU®9œ�I�<×!Ñs=æ°c^.¸g…M7#`ŒÀ%#ÀZ£ÐíÒ§$~`Æ=‰_–©_]}�þŽÁDLgP]Íq˜ü±ãµä[×äÏ}H9­O¿õO#`ŒÀ²ÐxYã©#e‚‡LyÒ<‡z¥DºÜZÝÚ¿ÿ0«ýßg¯hþ÷ÀT×’/tÔ×xê2…ͬ£\Û�óûƨ75FÀ,�6áÆA•ǹU_ëœW£NçÔxèÐ0¿4'ÿ «ÐøC&p$im­ó4Ê<‡2“;×+íã>œK´¦ÓqóFÀ�¥"�ã&Ιu”Aµë\Õ׿ç¹�µq�êVÏû €¸@z €&_RÕ‘ç(;Ç2Ís1ÎÆ1Ê 5�Ž›7FÀ,�ZòÍ:ÈÔe÷ËcY&Ôç5/ÿùw+¬œq�` ÀÌœ�)ƒöñÜAdz-Žå¹”M�€0—Ž€&gÜEeò™ê<Œé¸ò˜ÇF=då�ü‰PC]$@ Žº‚‰[©òµ¹e à|ª²L½©0FàÒè$丌Ê}<îÌ1Påu ¼6Î+:ï¯ÐlxÛ˜M¥È3™¨I1NžTuº^Çksò¸®5oŒ€¸D: 9.0&ãŽ:‡<©Ž«úNsòïÀÑ .Z(¶™‹5Ø—ÐkúšNm™7FÀ\*µD]Óá~5½êÈ“V1qò¯ÂR”.ú±ÙUÀØßg®,kߨμ0FàšèKÜ}zb¡ãÊs¼¥Nþ-UÆ@–®r�7Ý…ãÒXÁ0nÁ3Œ€0—�À`¸Úà:'ÿäš!ãõÎØ¡0è]KüÇ&xÜ#på &ò±»;Ñ�!Ô?ŽšÖm"38ÞAŽ?ñØ^fŒ€X ÅÀbðRp8Ë9üàİÏðÖàÄ'övFÀ�Ó à„~œ¹‹ß‰Q;ø‰€ö6FÀ\Ž�§\.N�¹ÿ5ª3`î-�€X.Nþçy6.΃»w5FÀ#pVþ¼öq/éѰIEND®B`‚ic09d˜‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATxì½—#¹‘µÍòmg¦Çì~ÒîJ«•Vçûÿg�Ö™qí»Ë±Ü{Ÿ`^v�I²ªË°Š�sÀ“‘IÜ€IäÆÅÅŨÜík`Cîök­KCê·ªãz·²®â5°y‡uWÕ¥�Ò@i 4P( Ü‘ʸÅ×èÿ”^U>( ÔèAÝκ˜;Ò@·¬øê¸nYáU݃Õ@ý—ì­­ »% lÔRÚ—iú:¡Ú ðe· r¯—.µö_{Öëᨫ½œjàrúš‘.ðŸQGEJ·¡�KÌ×ð½�kª:Jw¢�šXBíKt"—ê”R•WÍ—Š¨`i`í4p™Y€AÙšX»ç¦.¸Ñ@�BÚè%Á ¥ñÛæT¼4°ÎhÁ¼�·ºiÓÛø¨Œ€Ve_' ”0çn_ü3€ç°Kïã‘ÖÇï㹜¢¥�uÓÀg -d^·ºÉiCá™q\â…pý”ÖD˜¹äwx%Ížÿ˜Ã”Õç\V¤Ñ'”Ч¦â= Ô @w/ þk¨=%9ljž©ùPóº`o¼O&ËW¸4ðÐ50ȺØw8Ó6L¼Ï£·,ëx˃_ûB õóÐ4P3ýwÔ�S ÞðúÂæµ4Ë÷¥9j‡œ]›W´4°.0 ûzsœ°ã}aó ç�læñß"Þ:x3i5Ъ¨âAeðO—K7³/ Ï|‡‡(§+¶i¯M3ŠCÆn(ìô¢¥�‡®�œsÜahöè„x øüŸ²é¸Ì›p>ÿE&ú‰Zø\9Ź¿X{`øû®¶@L<û ê›f9‡suÀÇ ÑIjý–Ö[ÂI-p;nàçÏqþ_mÜF@*ö³ y¦®f¦ª¨ÀÐÀÚé€ÍÊq­Ï@î04‡‡òXÆu,¢nSÑÒÀ:j`„¥Ç¡­7àÃ'Ì‹p¦–{š‘1@áʰ&ŠÞw ”Ð3 n½<ÓÍgÏžm=zôhëüüº©éB6YâžRÊ$­+›MFÓ°y¢æ,WX; l§À«‹Ÿ wi¦ãñø|| ˜yÿÏH' u¹ÐìýÌ…lŸé¥÷Pe|~Óèpî(2Í€Ÿxø§OŸn}ýõ×;ß}÷ÝÎãÇ�·å·ÎÎÎ6ñ€;T†A„Máø;:|ÇiˆœÛ4‰Õoi`=4``fýý³°�ªÿ×ùÇ�OO÷÷÷Ï>“ŠðÙhãÙà?fcÚçhreôi§x÷Nkm`Å/¸c¤·Þ ßáM�ø·¿ýöÛ]¼fö¶å6ålØü³�ôÅÀo Ï®�ç´¢¥�‡¢�Øg.Ç<èééi™§ÿÆ™þrcýåN4p²»»{ªÎ4#`ЇòÍñüß6èÛЀâÍW0<ò…œÚ€áIrý–î�ÖÖà�Ûs›ÌsÇ€ˆÃS°ï³°~{oooçÉ“'�ž?þXР¯j6Õa±,°aðïhÄ)`·§B™¶sšãEKIài{=æAõŸÊ³žþ‰zrrr¬ÿ ~SÀ¿©8`ooðç¿/Ó\¥ë7ð“ÏaËY&âjWÖLÑ{¥�µ5æÜ¥_¥C‡|6¶$·ù›ßüf÷OúÓóßþö·_¿xñâkÍ<ÂØÇR xÃË”0i´Çànšy„írºy×M5’ºî"«¼ÒÀTzæ§a ôŽC3OÏ}¯y*cÇÐôÿÑÁÁÁáû÷ï�>|øpŒûöíñË—/áŸt³Ì ðp·F€ã¹a”Oy‡œqnC3j©È}Ð@“»dÐ÷=s./ ­ŸÒ@i`±„™S# ‡ûrbàl(Èn[ø.†� ð¯dü ÿ$£ú�o¾ùæk-¼þñÇ_iôÿúèèhĬ�Òx[ ýŸçxžð¨Þ†@kÀ'oÈ• M”[i ”ðéöðǵË@6øOGÿÊ4Ýé¯Î‡ôr¥�ÒÀh�>Çs8•Á~gðÊmôg2¶d\èuÀsíØQô¹ö|¥sËØøå—_Æ¿þúë)GuÈhÿß¹pµ~�þ¡Ó,KeX#EWVën´vw¾aŽô‡(@ÍXkEK—Ð@ ôm<eð7¯gC`GümþŽ–ž è¿“ð•þ£›:!p¬ý:ïµG€ ƒâotû\dµ�ÓSYµ§–¦Ú¨À*i`Ý îEk˜gð¢6b&€Ñ¿:žxµï¶o2�f¹ÒÀCÖ@¢ñ¿SœÿåHÀ�Ûøïé¿ñT ¿¡ ‚ûZ ØÿÃþ°/¹ � °¯½ûZØÔ[ùÞªÑ@û'›gP†óÕÆÀV£_ ¬¥€EÞhß~ØNËÔé}Óé2€g¼@óy5M­- ”jÀ oAâÙ9½¡üÿ€¯%�'Úð­^ÓeCà¦^ÕýêÝ»w¯´!ðÕý×½ÒRopj§ÿë¦®Š¸÷¶sc²1à4Ó�¡Aj‹å�V´4pgX;€?a§mÓ¬|ó2%œ½Á†üžèäY›LÕåj*\( \EÆO¨=å8 Õÿ0þ{bcÐÇñ_}¬%�o•¾©YMßÕÃ~Öù¡Odl*üD³ßñ–€ò± p¤³;ÞjOÀAw@@ ÐŽ÷ý·�F• g¢Mª;çƒ]®4pëXw +<ÿ¹sØ2ý>º¥ÿsÌH8Ö"�iYª>aYÑ’+ ¬½ZütÚyp=M~‰é€Éž€˜Êמ€Zø¨s>j oC‡q|pì ÐfÁ«ê#`èÏ<}§vNãW­¬ò•¾DeÌþYó—ð<�!@zíôÿ—Ü”Ê[( ,¯ãhü6‚º”NÜÅià‘–^hSàoÿøÇ?ŽDŸk3à+Î ` @€�¼¯Op±Ðœžùärüe ©§ø·¥�2&šÎbÂŽ;ÜÒð—|œùÏkFêhø_ßÖý«zJk­ƒ¿•��x)�7K#^ýÓ€V½Ðf@6~Î�þãŸþùˆ³”}£ÛÐŽÔç�ΆÇœqð[C`F¶Œ€}Uä–5PÀ°Â�â Á_EL7ª“¹ÒÀp3*¥4PX¤?rCïŒrðã=ftPÐ Í<–ð­fØÀÈÿHvÀ[ r2ÚM¼M#��gÏtš¯Œ€¬– ߦÊø¤íèI2²l,¨ó˜9 ëpØðþS5º X¿×QÖC,Ãà÷¯mÞ5ùº¡Ù+sÿdo¡Û€¿€Wá§¼9 Í€ïõí€øÃ>ˆw¡W÷ß¿¿¯×7¾`Ouµ³ðpeLôP¿w¤�2†ŸÁßR™Gxº Î¦FþÖRÑÒÀ5h 6 SœãÐÄ?£È9OcÄë�9ï¤ÈO{ôVà‹ï¿ÿþ7Êw!úL‡½ÒrÀ«¿üå/Ì ÖþÿS Žx˃?v"�2Hyµ­6Z[EoEeÌW³ÿÜù�îð UŸ130¿ØJ- ”nR€?jŸÁ°eã.2š Ø`S Ü ²°'@³ÏtpÐé:'àHéã9çô>Y[‡\kÌä¥]jï ¯-¤â¥�ëÒ@‹5i#ÉÐïâ1  ÿ¬Ó—X¥�ÒÀÒ&†,¸HØøh¾i[ rx¦÷�ä»<1þFkÿ�Ø #à9ùô á#Í ¼UþÉø�  ÏÔaª´«=ÖDÑ•Ð@Ë݃û\ªN"– Ëûp¤†:á‡s…÷ëJîú~¸óíË2CñÌwŠÇ™öÕEù­·œòÅž¨åß·‹îŠ>!Ÿf8'àÃüÇÄ¡‡‡‡°ÿêÕ« >'<Çùâ‡ú�vÀE9í©™k¥è�i  €««ÖÆ%ðç¢Ô�ðά —JIü?Z;ÿ_Ìszæ›Gó¡Ù»¼–º\ó‰;<…µ°y¡ÝÿÛš àèàÚøÛ?ÿùÏ#ì xÍ·X àÛdqY]ÏâCF2¡µ§Œ€¬± _»ÊV©~ˆ:§ÓéÌ>3,T´4Pø\°�Ú<tæ›g¨½Ëqšã䱇×W†ØÊ�Ù‚²Ðí é˜àÇÚð\že‚Ø Í�œÐç>Y4Ÿ>ÔÊ!ÃÒaŸ�óG£ÔÞ^[XÅKWÕ@WÕÜÄú7øÏ¿þ¯ŸzµÏG W¯±r–°&ø;h.“¸Áš¸ÃÆCÒ�Çò9ÏŽ<Ù#§Ñ¾“#¬tö8cø_x&@ûž#Ì9ì Pð`šy2b'_ëÉ<Ç þ¦ð[G¾pjSÍXE¯Ue,¯Î)Ø+Køi ê@zùS� Ж+ Ü”.û|ÎväÍqóMI·‡ç0´/LýP¦=<6ùáÉ'> ;öˆ¿£½„weÄž€gϞŞ€?üá•ç‚=Ú$xÀ9Ýž€öOÕÆ)?;fÊÈ©ð­j  €~u/úã’ ™ÖGGÒ_dqK¥�/Ñ@ÔQDØÃ³ŸWOôþœöG¼�  ž`OÀ#�ü¿yñâÅo´'àB{ž ø9'àõÿ÷/»'€fµ}‹-Ÿ¾å_ÆÄ2Q£ÔVË;­hiàÊ(àsÕµÐÏ%>ÿ‡Œþ›Ëäí+¯x¥�ÒÀ˜qà Á~ÍÅ’ÏÞåþ­WšŠÝØ��°¥4ö×@ŸëäZ8úÎtH×Rè=.}”[^«®/áòW4_²½ÞeË'_Ÿ,|—é°)-!OëÍÇÀq02äÃÈõ( ò´Ág‰@rOD·5“çhÀG½¸ÿïÿþïœÀ«�:*à ï ˆzôc#`ÑŸ¹¡™Ê*#-”[Ze,­ª, ”nK€nÜyõ"‹ƒfŸy!0çÇ@øðm¸Lx¸¾vu2›6Ž´ {´)ðèOúÓÅ7ß|óäýû÷o´,ðúþç¼'À-2p÷™g¹yF@4‘µ©f¬á¢½( W-Å, ”îZ€jØöµ Y;‡¡­·L¦üÍ·àú þN‡:­ãÑ€˜º— ñͧì àÛ, 蘀'¯^½Š=únÀ±d¯òí€ ü9Ü5!ˆ�„ˆèúËÈÚ©ðŒʘQGEJ¥�û¢À=ƒ°Ážö; u<Í�óCíámÏä²ú �®H*ŠsÈ×Í\H~OûØÀ9#½x$ÃÀß0XCÛpŽ“Õ>uM.ÌÜÏ©ó×LÀçº)N§�2êQèÕ€;ÎÞÄb®½núù00/R4í@Öí�fOþ6m¨LPƒ¿y¹œ>#@rŒ´cOéªsGyž(¼-#ÿñx¼¯×cOå±'€o謀�Kž@v ßÎø1¦=5€ÆÊÍh  €uT¤4PXE â€q¦´³å‘nOºÃÐ!G}#Àžt\[^ΗËW>^ dI úXm(ä´àì øÏÿüÏ‘6>Ñ·Þh9àõ_ÿúWï h™ã„ñ|>ØÎŸ�ç!-‡i{Ö\ÑÐ@õ ”J+«7ƒ/á–Gãá]Ö·�Á¼ cP~7ºŸ1r9n+MR˜%�(iêÿ[í `ƒà.{ä÷È«3òž€ÛÀnG,;§gàw¸ÍcÙȯk(# krÍÃe¬ùP—_Xu ¼V‡¡Ù7ÏaS䜖ó¦\û6îÑ?—‡Ð:·/ñi 3€ÿô½~M ìê\€çò|ZøBçì HE}Ì N˜º¬S2YžÃ\Gh§Üdzªôðð4@gU®4ð5À³Ý®ŸwhŸGæéÄeBí³`à7µŒó5å²ø(k²0ºP¶”?öè´À-üþ÷¿ß'oÏž9ïŽÑÆ-Ç,Ö‰gÌG¾Œk£èT50UEJ¥�û¬>;Ç ü9n9ó7˜¸¡ìYä\že�w¥q̰9�C†ž>yòä[GþóŸ/ØðîÝ;ö¼éöÚñV�(yí çxû9áEF™Ã€ÐuÔLÀD—kû[ÀÚÞúºðÒÀÃЀl068Cq}ñEW�Á?Ïä:˜pÜåå:ÍKeÑ ­.βç|«<ùœ€vOÀä"\X?í› 2(aF^õ—Я׵à–°·¹.²4ð05è¶@ì+%­õ9Íá!šÁß3.¯ÏhË¡]ÝÔ?I6Õo+mCé:"`7ö Ôí ð·È`Ï€vwz+ÓgXÆåª¨0’ÊM¬ßO+zÏéhÊ•JËiÀÀ¼,mKíFæaLä0ÀÏ@^pÞ Ð–åxÊdñQi*‡s¶ôV@Œü9'€=ÿöoÿ6ýv€ ‚�°ÉÁDs\ö,Ög�Ž|YSk.`Mo|]vià¾k PoÂQ®ÁðÅp]Ô;þ–�fŸ�Ú«2`úßsä”þìñãÇ:&àÛc�p.úXç¼Õ·ÞüßÿýßèÍ›7€ùШÀ€žÏ�x¸EFB¡DÚ¤¶ÜŒB'm©ßÓ@+vCª9¥�ÒÀõiœÍ~Ù’ Þ6<@~Êë3Ècþ8 ز)pW~S³Oõjà·ÏŸ?çøà�9'Læœ}ß 9¸E =d|–Wõ•*]�Ÿ2Öã>×U–¬ä>À…ߺ>^+ã¸Áß3Ä©‡2 ô–…Ÿy}í±lGi\œ ÊÙÀ†À¾ ÿ¹nOÀ‰wÀo½Ó N˼>#À†mq8f'Ôþi<Rᇥ�2né~^¦ã¹¥&Ý«jJ·{»V­ÿçþÏké­·ÆÌoãðí(»Ïú6\?@ï2M3øS¦e]~¦]=Œ´ñ!+àpù`�ŠÚŒ='''¸ßýîwœp¡s»=µ' k´ÂWÕ@WÕ\O¾¶è)Vi 4pE ¶ÖžWrv9lÞ50C=òÏu_ö¿žËØV­ÊóŒKü\«ß}ÿý÷còjOÀ-¼}ýúõ›ÿýßÿeOÀ2#ôOÿ©Æ¾™R)ÏòQ¶ôUËŸôö Ce<ÈÛZUx˜Ä Ä‹®°ðûxm9”ïz2p#?ûe —ÓÖå¸ölÊ0pÌygl Tzì СA±'ym 7{ì>ƒÀ‡µiCFÅÏÈêZË@+Ôù�{ —w7—EQ®4P¸ ðÿPq9œk›÷œ—ær Ø^ð,€ë4ðÃw8×ïp.¯å9U›˜Ößáœe»ØÐ¦@ÞÐd@lŒãƒ›sÈŠ"t;âÙß(ËÚgXŽÌáh šÍ^±‡ �2nè.ÒÉdCÕ¬L±\k¹‡£�›¾Ÿ‹ð¤¯þ62-�;Ðæ%ÞòÝ)ʵÏàïò)ÏÀOzŽç²Ý¾–f™.Ìçƒ7˜  Ün™à\ånÊDzÀW_}u¨¥€ƒý×=à­ïxÿþý²{ÚjûŒdû2Zm=Àxð¦Ö%•¢Yé2at€œÝPØefêòáá³@ Ý'Ÿ�„\¶Û5?ó«¦Þubðv€¿è˜=2Æüã/¾ùæ›Çþ7zEðíßþö·‘ö´sQŸ.~ÂmãpÈÄè¿kSÍ ‘âÊx 7².£4°|3h:uØz ŽsšÃÁøqÙP< nð'î² ÷øÛ8U¹Ü\mænütO€fX8Ók‚lœî Ð>€0þcù¡s2`÷D“†ŒÒr~&3<„ÊÝO ”p?ï[µº4°¶|Ë–f…�†3ÍáÌ !ýPž�ÃP|6�!ÿ23.ê23oA8f$³©¼ìà‚ÿm…Ÿèœ€ØðñãDZâ•v”Êãbú<"æ'ñöVJÔí ºþÚheÜsZÀ=¿�Wm~_'xÕ²*_iಸìó·@)/û˶ù¶âÙ»Ì\ϵào~Ê{4Ú#A0~F»Tôëì ÐöĆ@ÅdÊ�ôá¡TÔ e÷ípFÒ˰6î-àݬjji 4p·0øÏ3h¡Ó3Íy‡f ô¦íÕ¶|ârÌì*þžFý§Z8zñâÅi÷í€=m|Çž€¿ÿýï£wïÞ´s€ø �w‰Èâæ¹¼�×õÖrÀDo+û[À5ßÿ᯹Ø*®4P¸c d_ô?wzž ÈÍo�ÜiæÑ,‡Lþ°cI Ë·Å«ˆÚpª8{¶ô�=±, ½cyO€‹55à;n:oS efòJeX3+H˸�›2dÝß@UUdi 4p0ÀU�ÓmÀsßÐõgÙÍ7m†ø’³çhÀ¶d½'àÑ{n{€Þ@nžãó6ZffA×]F@{#W$^À ÝþìÙßP5÷¦XtQîî4pÛúŸTw§„/¬ù2ÿçVßÄmdÚ6Éz3Íé™G¸ñÞë¤ ôŸwmÆéÛÇú^ÀÑoû[Î àÜ€Cm`OÀÆ’{òŸ¸öä›sOÃeÜÓWÍ. ¬“2@ì:Ý2åu:]Ó§~ó.Ó– ú>)JYyVÀá¶ìÜVÂ9ÞÊvñ˜Pù�‰«®S|øÝwß�(|þìÙ³=};à�>)üîÇôž€¶(f4ßpC† Òl0Ä�S[j& Qà]G˸ë;Põ—JKi°\ø–*«2¨š¶éÄ©?俥9Km�wüÉãënÛg>2� žd¶µ)p$`¬0€½¹···«óâœ'Ú0ïµ€!Ë+ÊRyCF@TÏ��®³Œ+ch+pª ¥�ÒÀÝi`ˆF£g¼]7Ÿr²œù¦û>j™–ºm-måzâlú£�ç ‚qX�ª~sGûüµ$0–1àsú>À·F€ã¤}RŽ"ÉY†t‡ÑQIIw,à.µ¿ÂuÏëÈV¸ÙÕ´ÑÀu??Àe.ïºëÎu•=ÄÏy [®�b´Î×½ˆ’™äcO€â¼`þsÄäcŸ€ÖýÇZ8Öž€8'àøøxÑž€ès<ÏPGNs¼Œ)f•\«t7ª-¥�ÒÀR@;SgÊñ ²#g�tØyÑ\²mžÛD¸Ï9Oß,À¼=”;Ï-JWÞMÉpNÀ“®œSÕw,½xþüùž6¾Ó²Àû{æ6C‰ž0è[>Çãb¤‹š °vpGНjK¥�Ëk»yi‹j¢Ìì)+»6î´>~n_›žã}F嶆¼\&ñìrZ¾†Ì—¼—0\¢ßWú™ü…Ú±©sv´À{8'`Þž€\}ü­¼ ú– ðwDm)#ÀʸZÀ(½ª, ”®®@pË”ÒàÙ‘†35?SË›æ´Ë„Õ‘Ós˜:Z#€tx­jcæÎñ¦ |;à‘ê` ZáùÀ‚nOÀ¾ÒŽ»td>)V‘.ÞÇ›¤ÎÊG]‚ópsæ•`ÍÝ2-à–~WÕѱ”+ ”.§þ7}ÿ�–×oN'ÍqÀ�8£|;xyÔï0yìYÇwØeå:s˜r{ât€~¬ÿ«Œ Õs"¹s…ÃâÐÙ'Ú0þÍo~3oOÀmðêTHÿt�ù,K:q—õ• …ܶ+à¶5^õ•JV±¸6Øá¾‹mÓˆ·†@Î×è9y^$Gz'³ÉW~JfçÚÀk‚±,ðõ×_óí€÷ì øùçŸ/´$`@Ÿ‚¶²ePŸ¶AË@ñä…fù'\FJ¸eWÀ-+¼ª+ ”îV_ÓeZ³Œ,2€«es¸­Ã2æ;ÍaŒeeçxK-c~ŽÃ3_tS³ ñmÉ€ŒÀÏ:ù8'€}j˅쀼'`¶!`oyÓjü üÈ9œe.#`ª‰Û ”p;z®ZJ¥�Ð@×Ë6ÇyçåC�]$Û¦;õL4öLµæÏ0iùmÜòÿØ úÀ€Gò±PTÕ29°Í^� –tN@ßžÀÜÀïpK þô‘qÜù‰;\F€”q[® €ÛÒôÖãâ ‹©ì7¤�/½?Cõ 5·Š½A ð,p?[š«lŸÇMm�ÇaÒìáµ.?C9ŒñÆS@Âþ‚NæD`?³'@›�ÿùŸÿùˆopNNtC߈<Ý�ÁÛÀžÓöñVžxÖÔ-Ò2nQÙUUi 4p·h�q™Ö”‘Íáyy‘£®LçÉäM‘ÍaÊé}—y•ërÞŽ2ìgI ö¨ÞÈ<âäïó6|½¦Ë´Yyöì!¯0˪ïTaf.ô-�­Ç�^hCàÉÇ�½_` Ø]]Äûx$Ã÷²qœe=`‰ª»Œ€ÐÄÍü”p3z­RK¥�Ñ@p_Ô@÷*Ž|Ôïü9ÜWžŸ4‡M)o°ïËÿ¼8)Påƒ |A�oòâm¨ÎX.Ð Ëâ·çdà7¨KlÆüû”Iƒ¿id¦~µe¨Ì™ *r9 ”p9}]›´žék+ë!´nú¹o×»Nýñ2÷¦•Éú!�¸er¸ï¿kÀ'Íy ~Ï ôå�Ç£Þ9ž€éžÉáŽå=Ò±&0�OtNÀ±‚#­,Ú0¯9^È2edmÜB¸ €[PrUQ( Ü? |i9á¿ìÕ�W`ÙžWžÓl dJ!óŒê±±à:M/Ñnfx;à™ó`¨Þî§OŸîjOÀÎ àÛÝž‹šö�r2…´†@ÖÞ-Ð2nAÉUEi 4p?5Œ¯ã rY€rŽçò3?ƒþv^Ê4øÃk�¿�;_K%·¥M�±'@iœ€ApN~…7vvv¶µ' Î èöô}; ƒ}®bb MÀŸY‡2²vn1\À-*»ª* ”îŸãÖ_å*(×�ègá`t?–5o#€r3ø“ÞÀüHíäŸÈó%AÊã"TÍæ¦xGGGc ì wõP¡=¬îDfàßg(�~¦‘QõÖž€ÐÄ—ÿ”ðå:Œøãé¹ô×TÍÊõ—[ Üôýn�‹úZÞ�¶¯«mà±öÍz÷Hëß#-z�´>¦à‡ê_ÄÏ×áp¦®wˆŸÑ¿åÎÔa—á6¡ú*œóP^ ÜÔµO1BeÆQÁäU9“÷��½'àBËGÒÑ–Î `I±Ë¸v€¼üm D™ª¿Œ€Ëhw@vzsÒ‹]( ”VB€—ÍaS7°�›?�’§uÔˆü„5Òi¹; |xÚ ßf‰4˜mynógÈ:_K]N¿åå¸ÃÙpYC”äp–w¸¥óä²,F@nióœdel=Òy´aWži>„@⦠$”r!#ô÷Û³J˜WÉ$­Œ€Å:º6‰Ù§øÚŠ­‚J¥�ÒÀÍh�3(šRá/qO—ðg#ÀàÏL€GÑ–%/~[N_»²,y\^ÎÛ†Û<Ä[žËr;·íu¾¾vùz ¤Ûðbù›œ¸£4†ÿúràTñ§š)8Tº×H³W0œã™: ZF@ÖÆ †Ë¸AåÞ§¢éÊ•VEíó¸¬Úvä2E&—ë°©Ó‰ø\/†€�5çqÝ9Íe�æ2,%ÝàÜæsºå‘µoóäx_XÀ=m³Ó]íâºÚkuÛÈ›ÿøHle»8R~€>†ttª=„¾µ'`“å“fI€äyàÏÁ§òLCNmª=}[À+`�‚*¹4P¸_èê³F›ÍaÍ3?g®M£f+C:<�†§å8CÎkž)€L>SøÄsù›oYÓ̇gþ¼°óä²]·ÛFeôµ3ZaIà«îú•eãByxUðBçìh©äƒ¾ðñÕ«WCç¸:üIÉ“pß,òYÎÆ@”  1å–Ö@K«ªK¥�U×À•1€¸=m'lç°ÓÛx.ÇaS—ÑÆá»œ¾4Òáç:& çü}Ô²-5ð›?/î4ϘÂÏáIk>µÇñŽrT0GÓÞ]å%Î{t>@L!è¼ f ò9üL»bƒÄ¡‹ �2²æ..à’ +ñÒ@ià~h0ÌÎqƒ$i¥ ѦE0úÇ™×R šïx¦9-׉Œã9l^¦óÂmñ>г‘Ñ^ëöF–4(An aÚßy‰mùœ€g’眀léÉ Í'„OTv>' Š¡(�ËaXŽSŽo¢y]–RFÀŒ:–�”°¼®VZ’?l¹‡­�Iÿ:¹Æ®]¨¯ýÔß*-ÖgÚH` >zÖxn:þgòs«þ¼åövÜ”K3ˆZ&ëÝ*1oµ|¦Î“Ûâº,ç´ë }׸óÜàÝ·yƒ?iNÏ|ɲ€sør NbGò'*Ó'Æžm ä� ^ <Öžm ˜î ˆ|¤H®�c`�ذ°h–+#ÀZ¹-àÊ*ÑÒÀ�k€Y�ÐöëØ”vª÷­ñtäa6@î¼7º aúêKtðtòëso3—Fgo—ÃæÝšÛî0´ÏIs¸BôI:4‡ÍË´OGÎã4ä[gÞuRÊj½¯Á{h<ž%_w_Ûo8p=Äv®=ËŽg¨ã·é*ŠoL÷Hž·xUäù¹ ƒ �°�=òížšc÷é!6ç°· leËø¤³…¡2ª¨J+¢½ó:‚- €#Js¸¿áè•nJÏH§NFÿÛ:Äe›µ^¨üŽÊ§N]½}éèñäƒÚõñœ¶ªÔíÏ´ ïóüEr}ëÇq§ezU½P†ë»nJÙö”Mû|_׊1`°ÏÔù0s»ºrØð÷X2ÄžN Ô U,œ)@Ýí ð9ñˆ*_¥XœÓ¼`:IýôåwQ8�«îš ø¤§™P3êX݈žáÕmÜ ´ì¡éÇ2T½stÒgšê×ÙcÊ ðø0:’?ÔÙô§:=ž€›û!= €Ž¯Åoþ�}ò��©]–‚Ê(¸hÀbÞm^Uý»]Ð6lžAnFçÝņþC�ut.ÀézÁ˜ÎøžvÚ€»Àß~ëÉ“Ñγg£myèŽâ»2 ÂË `¦ ëÈg(åÁ·ËaóV�æ6æk2ðÃ#̵Ùs ðÑ=Ô|(Îñ¾pôü8o›Dù}Îü«Ð¾<ð2ßqóÐAæ9œÛ†>¬øÈxO€õÙ-!€-OtÍßtrÛÒV“¨ãâÙ³gì Ø×ž€�Ý· ÞñØ’GμIlö·›¾ ¦Áߊ$Ÿy³¹*6£�2fÔQ‘ÒÀjh° #e:–M~GåÐ�*ê-ÿy3:økA5èH3?½^PÀLáiÊH�Øä¡›OŸŽ¶¿ù&üŽèîW_�ž<>:e€M�tîÖMÃÚæ0Ú"¼êÎí…f 3hqMÙs=¾N�°y–s|�LKþôé1óžGsZÓâÙ÷ñrz#ëë¶@:úÃAáC1DYïŸî P×à¯íØ£3fú¼9°¥|¼M —´GÛ;òM‚I´§Œ€¬!…ËhRÑÒÀ]i €¡vû³Ù�‘ÿ[MûïkäøŸw#À?|gÐÛe€ëðЉ²™U —Ôô!÷0Îüç*ëLÆ„†at§êäÇ ?Ñ~\œ0Õ} ¤«_ P lï&å@ûÊw:4û Z„%ʱ§¬,oàGÖ2¦ÈžG#±çÇùœD�ó\_ºy™æ0å9žÃðìñ-çr è"SËP.ÇѯõÌ1ÃÚ˲¥ødäxU�Ï ã”tÊ€‹½½½Ø ½�'|VÁÎÙhãfÏ£ßg�™¸aª·Œ4Ò¹2¬‰¢¥�Ѐ:ÄÖþ�;à�Öüý3òÇo¿};Úbô/ ç]~(Ã&z9ùR¢÷4àþé3ÃÀ¨_s±£sùS-3èüÖщ:èCÅ�EÉÇáA̰' I¼¥ÔÛuò¹ צ|ô„ËaWbžÛÍžv·>—gYß SÊoÃæeJ¸Ï¹Ž6ÍílùŽ¥»�ȵᾼ–qy™¶á¾8ˆãF{6ÀqóÉgâ�é3H�‘U=eLtV3�nœè™»ñ:n²‚ûÞþ›ÔÍu” 8Ä=£tyÞóÇ`·?þXógÚ‹‘¿Òv4C€õn�@ïg# mSŒü©CÙSÕ�£g$Dýgšî×\l¼%Àž�]yuÆ£½&ÈÙMònÁßñ tCÏÍŸ²û\.³/½åQ~ëÝþL3HùšÈG˜:[O=æ9œ)á>·¨ý‹ôÑ—n4‡©ßq·¥•qzí“5oµ^³ŒÛ"=óh2ê�A§døtð¾x‡znÆJ¿à´@Å5u8–=p.»@Qgš U|,ÀH¾;XSxÙÁoy9}-Ã5°–·½.zÕ4ÀG}õ³!Ïô?ï÷ë©Øå¿�Öüc³ž.ÀàÍ3ôtî¹Nz=�0|‚;|ûSÕ?]оƒS�ü5�eój  €Ø(£À΀™)@gCÀrÂM8Ê¥¾¡òá·Þ 5øC‘£ÝP_eãqç¸ù™îsÎ×—�zç¹¾tóÑ\~–ÍaËd^&ÞçÉ‹ÎH3µ\.ˆ¿¡½ZÐQ;O¥ûoüz9eoKûØ'€®9:xSÀ £}Q];?¶9N+Ò4ËÀ‹J;TÏäæZb ikxÓë’WOôEõÄ�?ï‹p*ðg}žWýbäŸÖü[ð–ó €{?÷pPƒ?iî �Îf@–ÎTŸÎm�:+`¬×�õÆÀ¦fâè`œ`�l)šÍ<â·éÔ¯GuîÛi Ž8aû þ¤“ŸÛN{—ár‡(r}Îò}iðÜîˤ;ÏÍåÉôñáÍã·éŽ›¢C‡Û6 wÿ€ÜSyÎØ_Naˆiû˘/ êmÕGþoÞ¼iÏ àQ¶%Ê#lŸíɃоdüÈ›ÒÆµ7Êà -W¸c 0Àº<'þiÊ“×ÿ>›�LŒþ¡j/ž^Дž�Ó†ÀÜÅ#ÌÈ¥fÒeœ©nŽÿ=—!ÂÞ€�ÿX‡±±¥·ptîtÔå· 3Ï Ü”£lêq7Ïa¨ ä¸;§¹íPröŽÏ£¤õ9ʘçÜÖ!™6}(nþ¥ü¡4ø9-‡�ožŒÓ2m�ëAGÿbðV¯ >—çœÍøŸ�|õÕWGJ?Q^^ <‘!pøîÝ»Ø((ÉÍ�ÚŸXzž8ÒÛ°yеwe¬é#ÀŸ´ÜÝkÀ"kó1  =Òˆ#àDÀ{.¿!`æ}}àjž§t:w×=O:F@¬ùw<§ð©ŽÈ'c€CƒÎd„œª-68ÐTÇ=:ïFÖtðM®%‡‰óœùUåÔ]çóç:\¦ëÍ|´•4S7†4Úí¶›ºÝÐ&_wY™Z&ó®öuå¼-Ïñ!J^§å°y™æp+KÚ2é–ƒ¢oÑèpÌ�Ç‘ �;òzœ6Ù -bOÀ‘ž1=‚�8:øLo°'ã`Sá ~lM)‹0u8ì¸XÓ¿árIe$eT°4pWˆ�¼ã¿}@÷LÆ€^’m@j=Û�øù3ãéQs/H^@Ÿ÷ªlô–#ÜT}”ÅÑÂ:¦-Ú mÚ£mù½ @3XðœfÚõý”zcŽ:\¿ÃøC'Øó©)Nƒ?ïzÈá:L3ïS‰ŸBYîwùmës-ßqSò8lšy9ìôeè²2Èõy×˳ÄRú‘ÞuúôkÏä¿_ûQŸlê{útÅž&¤&¯ øuNÀÆË—/™ȳ~Ü)ÞÀoÅ9žÓà•“ʨǠ4° #äõ<¾ê§Ï£…pªù…Fãê%{�ßÃz?@àgH…w�HOGOééÇ=g:5¨CuQÎ&ÓßjÇÔ`#@#ÿ3NDd»Q5í7Ø9œ)²Â7娃z35嶺þœÖ‚{=äÉ<—‘©ÓñrúP˜¶ ¹6-Ç…—M·\5�ö9ÜRô Ͼ•ÕóâyRxGÿžþ¢úhåž¾X½ËãzòñãÇ#þ©(òš;”�<Æž�>¾ #‹Giö FêèÀóS@IDAT4h¹NeÔ£PX 0ÀÚ{ž€™ØPZîégðwfÀŸÅT€ˆ¦·ƒz•0Æ€óL)õ@•NÝì àHb €S�?Ë%žŽÀË^Ygâ $�»nçöôQxxŽ›×þn»¯�öfÞPû-“Óûx9½ Ó®y®MŸÏi›RÇ¢°Ó‡¨Ûét—I¼õ9�{!Ç,À†À^o¶Ž™àí€Ø 4¶¾xñâ£N ÔÑzQåˆÍlHáçñ^äQ$2¦ –³ʰ&î9;{~)wÒüÛÖ_ Ä}T/¯²!�Ñ¿�ö3°§'k½�œ^‘?µ ß=Ÿ‡LÄ[åÐx%bxØÇÁAŠ3R£�€e´·Ç@�¤åësø:uÜ–å:|]n‡å ö6�…×gÌ�æëpÙ-E¦ÏYÎimÜüEÔm’kÓ—�g¹¦žwØ4§g^æÆ‘ž½y‰Æèß2ZàÀ=ÝN ÜS˜G÷ƒž¹ý}éP/ż×Õ�S-*�ƒ‚�ñ£õã�³â~Ôã‘V¼\£�2…T´4pÛ0@0LêL�‡ðÔÏi”‡@iãQ¬/IiÛÔwÀïx”›Ó»0�z›–y_²)—ÏõîFœÓ¶¹�¤ùšL�FÜáLƒÙüXÖì6¾ˆïthn{æ;ܦ/_$×Ö�å6u[Ú<Ž[ê°ÓL�ƽÁŸqj _äí€ïÄ×YTÏF~Êÿíoû 4N ð3ècpÃ2or?Jþ4# ò˜�° ikåÊX«Û]»ªˆ¨Óÿ n{.âæå0Ř¿ Èi2ýb”mÀ?ÒR{£üÏéNƒª¿…ܺs½6Üççvf Ìq‡3è"²ì2òCå˜ï¶;ÞÒ6}^Üi¦n«ã.;LJ–…f™7ß´Mƒß¥mèu{â¬62 ð\tÌfAN¤$¬·>Èð6—<úoÁßq8|~üÛ8ÍZKWÀZÞöºèUЀ;ßhKž¼Óñ¢ËºëN8ç /U.õ7m£ÝÙSñÜÉç²}�CéYö:ÃCõ2n¯—3ÜFêwxˆµÑòN_·Ü<:t ÎӦϋ;Í”2r3Ÿ´EqdìæÉæ´6LoàWyœÈrÓ#ñž üGÚ°+žVÄÎ>|óÍ7¯ô†@^åò¶�ü[ð§™} <Õ¿¶³eðh¬ ãO±Îní®ŸŽPÀ¤aÐHßxåŽóøÕ3NçÑÃàùN¨ÁÞÔiô„løË2„Yÿ'ÍrÎ7CÕ†È'JÝz1;ê§ áýL6 ²Ès?‘¹ê}móeàÒe}ææÕç´vã_.Äå›’–ÃYÖá6½�/S†ËÊ´½öœF¸MoãY¦/­-/Ëç´EyûÒ[^ŽNq£ÏóÞ}�z#€óûC½ð\3�eð <?€Ÿ=�1…eÏ£îN•p9i  €z Jw¨ƒ�À¯w¡âë{§ú¯Üñ¥¾s¥¸[J�ÏÀïŽÞ0ƒ;€ÏSmˈüÔ! ÇŸÉë°öø�Îl�/N? LšÊ¹íP‡')w÷‹Ý‡¡}ŽQ§Ûî<ÈvžÌwZ_Yæµòæ/“7Ë.v;-߯[þPºåL‡ä†øÎ—iŸlæ9ÜRÊC€oö²G· ÷9.˜“ñlp“y?º~ WÖõte¬ç}¯«^! h¤âc;:…ïTþDá1§îjjoÁÄéÉäqÄsG^x¤·3Î øÏ08T§>ÍF€æ_G›2ø,0³ê™%9IÚmßÇ›†QÈ ýP¨Ÿ°Ûa~®Öé–q˘ï8´�—ÓÛðUåûÚÛ–�ãóäsZçü9¼ŒL–ÏáyysšÃ¦.ƒ¸<Ïô?ß@a0 ŸÁ?�þö߀r²_{З>¦® €©**P¸; Ðß1 ÓObàD3ú$ ¢½Knz¶oQ €<|÷tP§õQ–ê�ÕwÆ «êÆ3€32&ýò'4¸AíUÝÔåtç5� ÝP€z¨¿¯>§9=·37ÇüÌ#<Äoå.¿j¹}טënÓÛx–%¼(½•_6Þ–›ãMXÑ�m�ø¡"[�„ý»šàÃA€¿�¾¥ìs˜&:y9om\·p«õVKï3¡{Äxh×sݪïëØáÍxžú6FÛ]¦á�ŸKòöôz~ª ô`æòæ)Žt 6�ÃÇÌ€ê>S]ú.k|`CŸÉÑY¬±°¥6` °OAè0)SíÁµ×ÖoŸ�6ÍùiË$æµå9Ír™æj2Ÿ<Ž[†xë,×ò¯+î¶_¶¼¾¶¶e´2m¼•¿‰x[ç@œ%��uΫ„cä/YByÞ‚¾ãÜ,ÿ ç›GØ@ï°éM\æ½(³ €¾MíÃ}ÃÕUñ÷Dtòx6¢±ãÿLôLô/ÐѧÐF:òl4Ö(|,¾�ßÐ!<׋ç z3÷h}= ªp:4^`_@ì ¸ŸþúðH_ÜÐW7E·d0+ÁÌ+¯0(Wõßµã¿5ÔŽœæ°ÿ‹Î“ùðœnþÐõYn(ýKø¹_RN_Þ¡vñûʸn^[wÏõI7ìØ÷ãž)`>Ï»(ƒ¾iðUïZ¾ P€‹ óæ¨®Š¼' “·üã@ºÀùDà6àê%èÑ1€öè3h“yOÉÚð%çž §w³ªû ƒ¬ÿwÀÅ×_�F26dlbˆïM€|0—í:ÿ1ôjç4x‹ÂÎcjyÇ¡¹ìÌ¿Îp_½¹üeÚ°¨Œ\^_5ß2m¢žEå/J§ FÿÍ �ã= ¾Ó8ep팀2>=×Zæa¾Ö «°{¡w–Ѐ¿ó1ú?FçÝ @lÄ„u…|„g[ÇòøÙe MC.�þ {À”‡xë@31 Ó×¶´ °Å € ‘é €Œ;_�ãwMùßµmò~Noù‹ÚnùEr7•îößTù”{Ùk¼®6-S¯ê ñíãnpoi\—E`À‘Ög ˆ?,v·t?—yÀo©)KUsßÚ»ÔEÝ¢cvÄú˜òÕ×ÍGc�÷¯��Œô±óÑ�>¸óþà ¼?ík´,¾zr,ð�×ñ$ëéèѨÁÀî]Qôfô޹ÇCβgÊ€ÿ#Ïô¿Àþ⫯F›ÿí/F;šØo€õÉ1ýß>m\U-%ƒÜe\_=9ÖwŸ,éðMÉë<}ò¹ìu /«�¬ËëÖ‘Û`ªº þAUŸs?ò6 rSHó_ÁaÓÙ?hεFá2Öèf×¥Þ¾è$ñ|HçDnÐ×÷MGû}ç?Šüï;:~ÿ^GŸè›'Ê'äi;ôH¤Oöè2èÅr€Ÿ�|6r¯(öÔ!Ëk~¼R¯ûiMŸ)ÿÓÎ�ÿï¿m~÷ÝhSÀ® �=Í0ý›ÿ”�Î8{îNšxçxËwÞÛ¢ÔoÀ‚æ¶ µÁrCé·Í_¤Ãëhï¢:ò5[§™wÓa]£ y~äÍË”&ïsð×Ú( ï±(^ià4@‡l�p,Ð×—ÍF‡òîoö÷Goñ?ŽÞÁÓlÀÉ@Ï>|í‰÷HFƒE=’p*ÏÞ½55Zð÷0¨íÙø•/ÞógÄ/`?À³éï\#ý Fþ2vdì~ûíÄÐèŸ €ÙÈjiÁâ²ñ\Öm„ Xm;‡€³•»�6.SÇ*µw‘Ž†ÚºÌu¶2*˳~Ì/þ6 \lû1­hku»ëboSt~x¦ýcÊ_à~ àÿ(Ð#ÐÿU£ü_Þ½ ú¾Œû �ÿ×â}-à+73L×þüié½ÿÜæ0é8o<€¯û Øÿ Mõã™ößøe<†Ê(àÄUÖþcú_õâèðíÏ”0n0L¤nÿ—vµ ´¨­­üí·z¶ÆûÔÞ>}Ï^Íåbºí fŸ§`ÿ L3�ðÚ»2ÖäXÔi¬‰®õ230ÆÇ¿hLù ÐOàLý�>°Æ/ðÿ� Œü[þ� …å…îH~WÃåe †:¬Á �9 G[–'³ ’�z]¿®0z;Òö>ÓŸóØäÇ!?0t¡ÝýýØì'` #@~G;ÿw”Æi„ì7˜¾ûO¹Wç»Vå7…-z¾ó½Z$ë¢�gYyç»+ºjí½îö¨¼eÁß·"ƒ¿o <ÛÆæ­%-`-o{]ôukàèÙÔe�Ÿ�}ûòy¯ñШžuþ÷¢ïd0õÿNòûð1†ƒ¼z¹8ðgGÀ¿«òÉïI†¥¾ûÄÛ/¼Âœ@‡‹�· é ÄÏ4�ϱÂçò¼JÈA?P^ïìÙèÝeÔ¿­4^ù3h÷QtgPÌÔ²ÖmÏù,³Ê”öÄV¹�nÛªµ÷¦Úƒ! kîó¨"~[ME“ÊHʨ`ià*$Øá?è ì½Æëû¬ñË¿àP³Æ�g—ÿ�ü¡x‡ï±òþ€·Pgòº€@þ‘äØ  sPG;p6n+mSÆÃ¦êc ÃŒ�(C4ö üÇÚÜw"Ï.ÿ‘@ŸÓý Û¬ñË?’ß“gÔ?ÝôÇlCñ;Œ~δ�?ă_×xw×âöÞvû®«=€¾½îGø›ÇíÊáËܾµ“-`íny]ðuj€ø²Ã?FýLñkß/^ã×:ÿk �ö9ôH>Nþ´å)ƒ‘?~³ó€<À^gÎxŒÎ`z>vÿKîBqôQCb§?ÀX ~$ð?Öæ¾3Þí—Àá>P ñoOËúÆêäcDýLJÿÆ xƒ¾Ã¦}½y9òÙq­ÜËUu«Ö¾«´Gú5ÀgŠÊ_Uõ¯\»ÊX¹[²\ƒøã”û¤�ëÖG_'Ïž‘:ëüqˆ�(küïØÍ/Ï®þ×2~ðc@ß° pþ(ïé~Zo¨ànúœßY¿²Gë~3¥Ïg‚ñÛª_ßE�Ù ®Ÿem:ˆ=€;Sÿcþ�ÖöOµ±oSÀ^¼‘ŒˆÇ2Ø#à³Ñ/6û)Þ¿ukj­côH!a|pB Ë0åãB)PÊŒòi'q(A;ïr—¡m[幬ü¢òÚôü¼Üt]mÝËÄW­}˶Ǻœ>;b–ãñ±wŠ3?ÓIJýÎh  €uT¤4Я�XW{Yç?ÖˆŸµ~(kû¯ü¯ùxÅ�5~ñßJà?X2JgG>Îà?‰Mâðð|àPëýï™®ïòn±>�—°+ÞÉØÇWRÕŽ ùM¨äΔw¬�þGü1à¯ð¦òò�>÷ûXéXžW w;Ž£~»0ír<¥0å˜qˆ}¢„éiø•7¨Ê�N»£„½©£ ø#ñ¿é€ðf¡úâ{’ß�̹ÀþD (ð?–àßzÇot¤2ÇÊËqÀ»]€oöùÔƒr òg24ÐýLghù»2)‡öÅ…º¥6F¼£”ogàwÜtˆïô¢_Éàb³!�ÃCŠ(# ÑL�B*ZÈüqÐxµO€Çf?Þççu>oô{)ðÿQþ}/0>Åh�ªüî”%ÎþÀ ßÉñÎÿ‘ÀR¨<â{;€©@}Sa €§*@d€Y}$}òaFÔ-C€€C�?³‘Ÿ2äõ…õ0Jxóà„kSœ1Àë…*8gÀ…F¸ã“àŸ øÇºÎ± fEÂ�ŒiäS»¡ñƒÚÏáB„™AІ¡�ëD×Q_´bòC¼�ŸD*øÀ4 û̓—.WØ…3˜çðÓÂÍ^N7«ß+—Þv€W.hE3Þõõ&­ƒ^ 1â@R±Ã_`;üxP¦üÿ˜êè¿Tø'Íü*úR”ÓüpÓZxFB§=]›È³ö¯yóÑ9£f �fxø…÷±üSåa$£wÉ_tþ„é�ü™ |"c€36ñ€±Êã̓cåOª“ï Ø°>Ð�õÁ™l4dÔ¢ëKÐsFü]9Ü_{À=fÔ‘·vd¨ÄÛ´K×:ýê`g8,ûœ,+§æÝˆ[Tßóv# (tÕÚ×¶gýH¦zâæ9t PýHÛÅÃPàÿ µõP È+€¢|IPóíaL°œ@»8E0Ê=�g$ÎÌA¢Ô�N¼÷áBz8ÕµžÉèŸüP=:aÆÀ•ÇÈ3[j׎ ”ðš�ðáC¼ŠˆQÀ „€† Ôž6eðÈáI…õû�5Ðcp¹ÝÃö�¯üf®­ €›Ñk•z�4@ǨVÀϱ½Ç€¹À.>Ö##~Qvó³¾ÿ�t�ïóC:#æK^ÿ̰�#¿€�Ñ83Œ�pÖÖ™_8ÖŒ'r@³qÐ�ÚÎìÀ±F׼ȇÿ°æ�Á’B¼] ü”q¤¼úäP€¿$£NÚϨ߆ÀüöíèèÍ› gz»aðwž�‡áUN,Cˆ†ƒR·€�· [j'Æéƒ¢{zMñ± �'j3ÆŽ÷po†Œƒ¿é¤²ú] ð`u×\í ^b7¨Ü*zõ5Àà ±^/€÷ù9̇5~¿Ú÷Za¦ö_ ¡ïüGHñ�žÈ{­ß3—ºzÚÑù˜ MÎ0Úh€?à(àÍ €ä8c ŵŸd1¦3’Å ˜’‹ÉˆÏ †oÄ[ â{êŸõ}¦úþû?ÿ<Úÿé§Ñ©Â[ZúØ–‡nJq&�ÊñÇŠ²ÄÒDœF(º¡¶ññ¡m}{`[esØúçÚâ4B µðÇòÙ³ã;\tí4PFÀÞò2¾P�Ëdï¡ôñ–)kUdî[û ôÖŸ§úõãôu�ìÙ½Ïÿwz—Ÿwúño:ðÇÀs èìýjŸË°�FzÊÛ:k¦T ÇˆÝSÿS#@|6í�–ŒÞÉ[<Ïðµ¿Xûp€”ô®RÚËîÿcñè0S¦(Ë€ñ ,]àcôÿêÕèø×_Gã_~�½~£ÿ ée“YMv®ƒ¸Ã\3|‡€¶�”ï\yN1äYbàuGf!˜þç~å·˜ýÈa®›ûh#ÁõCWíù¼l{Úç5_ÛM„µï¦ÛÓÖÓõÝ„ïc™eÜÀ]Ësß@UUä%5@Ç(1ÍÐóy^@Ÿ3û½¶�—çÌ~(SþŒú9Η�õüñJŸèµ8Ê‘÷i€<7árŒŠc çM�C塌¾I‹5~¥ØjÔÍ×ÿ0 ÿp ˆà3ÆÆ , ®�o œØOd�hºŸÿ‰€$àßQ|GiÛÒÉNÜÔïÊ£6kŠÞ™I8S¹±¨K—º§òì·Ø” ²¼]ÀñÄø8ºXíšêDá þ9MÅ—+ ”–Ð@K(é2"y4B§Tnu4à/p�ÆúxÙ{�ðù0kû|–ÊÆ>Þá�õ}QÖø�^áË”? ïÂëò tWºR•ƒãIÉ>6Ñö�y„»g å~€”3ݘ!@ž|i³îƃäÚ'q: l´€Žà©íACψ™Ñ¿ÂçÓ˜M _räc­­‘Â5KW¦z b² Ýœjà‚©é&FþJã3Åtöžþ§,Œ€Ö1ãÀ}À#Ë=ÀQ´C|Ž.æ{'2^0 vÅ9Ï`K3½Gúô½À4? ~®M£ÒžŸœ§'ùÖY«ÖÞUkÏ­ß�ZaôÆ®ëe¹#gº™iþôHô@ÀÅZ?¯î½˜ñÁÎí‡Æ´¿ÒÞ!§¼áµ®ñ÷ÜCr€¾Ò‰è«îAðï)'@\€Nžxß^à#f(@9¯ó¶Ùä7 ŽÑ•<›ôN5Âk~ìòg³kþÛJ‹‘¿Úað‡æ€¸ŽÔNêÀ(#@týð' Ïçš8—QÆþ…SµC`,£€OcÄñÁ2 ìúŒ€0üT– dç]¿Ë*ZXG ”°Žwý�^3�¿=ù°ÁozrŸ@Œ3ûÙÑôà x>"'p;»‘pÌHWÉ›P›Á#€‘úÔÐÙ€2êŸú¾†$ð€2ðäíq¾.(×ʨœC�Ð׆€ÿ¢ó[Ò׎tú?o´àßθƙ:Tà×(JšÓµA 6žÉãP£µ;N1ø«îMͰÔÀÞ†0t$ã¦*2Àß<âåJ¥�~ ”Я—âÞS Ø0˜qfÿ¾ä�F±? \ø<ï/ŒüÅ{/0cªÊ:¼ú&p»ö5þ]ü%q�Ø}� Ðì“§œ0DyÀ>ŽÓµÐÍôå¡(œ€™vßIgŒøø»¦ÿ½æŸgþv€Ñ>×Ⲍ°ÁŸ™ÜL:úgO€®ƒ=\÷‰ÀüâEœA°¥váÙóUA|Kó aÜ�‰õSXc ”ð@oþCìôÜ¡sË ô@ŒÔAʳÎÏ?^ñc�ÏN €?ŒQFþûÊ»/y<ßnݩΙé@/�‹‘;T÷ýl[q¥#r¿|l$¯.Ìù§×Ø\/zxO4p, Þ’~vE7ñâmÉH2Ðú}à7?´O:FÞ<ÓrÕùt?8,èL÷ŒW9„€ÀŸó8——Zð'Îuçç&2é§ÕG·œi_N» ºjímÛ³júº‹{tê,à>Ü¥jãg0fÖøì꟮ó+̹ýq^G=íÿN²€œà'�ðˆô³Jn‰F@�Øpyôßv®nà©L“h—7Œ‡ÎpˆòœîL”›úÄþ¤¯y@G`ì wÈ{&€…3�3¸C}Þ:°aÐ[Žî ¯RÖ†ŸÏsщÚÂþƒÍnp¢8ŒÇ&n?¤¿È\?¥�5Ö@k|óïë¥Ó±3]ïõjŽíåä>š—“ûø8Óûöx¾Îwˆ‘ Š?îFýl>£¼ÛvaxÕ� ¦¾côo#`À[ðCYƒG§üyXJì›àd>¿£0ïêo*PnA›ö›G:À¯ÓÂg˜öô?í&ŽwÞ ªƒC€¢€Ý@×–-QFþgÚ@;·$c°Ç À9nàÏ”ô2ÐB¹ÒÀ' ”ðIºp§N§Ïñ½Œú÷™âg}_¯¬Ùs ÏEx–$;Ý4^ë6(owsñQ(`3šæf Âòñ¡æ)O¼ ˜ÁŸ¼”EFÉC¹QÀ$ =0 ÐgÀ®<ïêcô͸ÝÄéL0ôÉŸòЯÂP 6øc ä|SPW;ˆ3úç„@ Âa àTàÏò÷Þ /ѹÀÏýµ#\F€µQ´40Ù¿Sz¸‡X‡ŽÌ`À€ Œ¼EYãçC=1ÚåU>ƒ?ïöóÕ>¦ù?Êï«ãçµ>ÜÌÛt ˆ¢ZÀH�©7ø{äðüik_{áI†‘/€”0eYÞtÁµ†®Vt,à�#{ff 5¦mNí7 cv`@~<òè�%䈷.ÊD'�^x+�QA‰ãÕ¦é³!ù¡°ë 7Õ‰.A/›×u^¢Šk]ÔÞ›nß]×­Ê|À…Õ À¾¹÷ùÒØØGG�¾h¼Ë¯Ñ)çÅózçó¿øå¡o4 ÀSÿoÿ‘Ê`ä á¦à?‰ÞéïDk@;ù~Å[Ðwûƒ:#}M�ç÷þ#?W·$ø[.ŸxÀÙ�§eú(ùfò6qòätâ‹õgÏó�ã‹Â”Ÿe Hð^Ô†J¿; p�¸WånVeܬ~«ô+h :îü~v÷Ç{ú¬õïËó.ÿ/~{võÇ¿fâ]~uìì�Ã|Ô†•éJ N'aäóμ퓧×á<Nþ³ûzò¥"†ƒj[Íe:ài{ºR‰›—Ã$›ß‰.E¦íÑó°¬u¥kqZà�î‡+#àæïS7¯ãªá0è@ýÇ»é¬õ Øy�ÏŸç})ðÿQþ}Ï1Fƒ|P@õ2ú¿ ð\¢É— ðWÛ‚âÊMGçé{Àß³Q°ÒÚö£�iû;5È�pU×§,�K—@ç2¥�¡ð¢ ¦àßµ‰åˆÏxNs»©/ñ¢~Åq_¤—(¡~JKe¬èýüÒΊN°uîéÜ©.žå`:0é;K~¨}Cü\6á\/mi§üÇù3¢ÇOOòØó>?FÀOšàÃ=|À‡]þÓr ´ ØÆCú–º{ Mü4ú÷¦¿ØøG[{Ú‹Îfîªd�çðŸxï¿3È»è>̔ө�Í„|;€sø¡¼kÏg‡½–Ÿ©Ûbê46øyÙ%§±þOšåœ6C»ºhm�@»ëš^S~~›g×ÏuwIÓ眼¤M˰À ÑEõЖ»twݾ»®ÿ.u¿Ju—°JwãÛ¯y1�Úm¢ŠÍ^)LzF¤Œ*yõ Èd×þ�_¶“ Àïê�Q»Ÿµ}¯ñü4ªçˆÞ�Z×�wú5ÍÏÚÿ{yÖúß(mŸ%‚®3½Û.5k§?À)9¼@)FûÒmìڗΧÓÿýE7®Sy§ÀHþ$çäÿ,Im2èžë^Ÿé þðºÿg*ûLu¸[ÊuÀ3ðDZÙ/ƒ;†´-#òS‡®ÏQÀÚñ¡úÛå žÑ(—6w÷]E΄ûâðpË>Ÿéú- f˜ �UæhÛ �Ò €<|—uÚP9±Ô öÇ DþÓ=‹| 0f¡$å©íùyRáÌkãùytZÑû¡�¥Ÿçûq9+ÕÊ2návô=À}¼/i œ=å°1Ý/Àdz?x Ž5¢æluhœø† pn€:| €³§OGgúû©èŽ!¦©;°¢3¦Sf¦ D~å��d¹‹ç%Œ¦ü~¯ï Üã$?ÿ[ÎéÇкþ+µó•ÚöZôÆ‚®‘÷ùñŒg\Wï o#jgh `㥿ét>×Aš¼Ô—a [®Ëﲬç™Ré¬×‰Ï�™ê?¥<Ý×�ðXþDá±Ú·#>Óú[’ÇžÜéO`o OZ®‘0÷Ìû˜PÝ| ˜ïlè™ÛЧ€7f)*69òœqÝÉÑöÖµ<âm¾6ÏmÇ/Ûžöšnº½mûn»þ›¾¾*¢�2nàIÈž¾�ª¦Eò�QµÓü€»½u,`=ÀŽåOçëkœµåÀ• ›2ŽÕ ÊØÝ~ü8:ãM uÊÛ¢{â±L€ßV'ík5�6N¿Êس©�]ý^ß7emŸ©ÿðj£~Žó=À`ÐõÅ+}=~®g¥Ã¯€/¨u:âw¸·Yˆ›\Ñæ$C˜){ç7ø£÷>Ý÷ê=ÊGÇ.ʳ)<LÅSæ®wO ¼§gƒpC÷�ãz7E9°'ÚÑøÛ0% Ôà Ðe_@ì P]Ì<œëY=>Úøæ›Ñ¦ž½-=c×z®Î:–�€ r5Ðùsn?ëûÔ<`ïõý8·_íh×÷�Ô¦ð� ¥² *Ëkg$¥›p舀A¿ÛxV�±ÜD:~}½±QN'úV~@e”‘ŠûðñÒoÌ)…Y€(×à¯çÀêÜ™°àÂàÛðÝÕF2íÇ·€Á? µßÀÅ×_‡°¡gkK³[2><Û×Ù££¨h‰ŸÐór%RX ”p�w9:§®¼»èhbä¯N:>é*€ÝèèXÜÿÑë×£ñË—£“_�ˆž‰¿ð xƒ*ŽŽÇúë…@ÿB@�ÎXßfßÒÈ ÿXa¦ò¹æ]¦i5R àè$ʈŸÉH‘Ýýûšux«6½ÆËáõ=¦ùYççƒ=^߇ŽU6#R�L¡.Óm Æ}ú18£#¦³¥»˜ €O˜k!Üã¦×¬ôý;ù(Kw™ç.ÊìÀc�8ž�øìˆÑ¿žƒGà B¥ñ: ÂÙüMsá þy`: :Ùx3ò›ÌˆÏ Àt©i@Gm�CñËèh¨Œâ—‚ʸ¥»xÝ�ŽG×n¾§ýYÏ?  d5Ò?ؼz5:==…Ê_h€O®nbນu¸g©Ÿ ¨ÏÔ 3-»)ÀÞÊGZv{… €¸>uÌj¢tò>”‡éÿ}µë¥Úô /ã#ŽñU;YãÇø(Äëû½kü¾Ð{B­K77ô#�‹Qz°Ò1@ž4¹þgÊé@£+”=}¾�‘kŸ�écDá úÜsyö\È@c9è\4–ƒÄ;V9cÕ{aå;Q|[uÐZÚf`Çü€Gí¦ †Cβ~¥�½xÊ;‘Økr¡¥MÀ_ÆåŽŒÌmñ¶0.1>$çg«+6Èôº³åµqDûx©ˆÏõ—ï |×í½ëúï@åkQeá6«S�/¹ L�ØwÀÿèçŸG'¿ü2:½Ð À†Àw[gä¿©Îàç lv1⎱ JÄšË]È8hKæPóŽÀ�7¸ÑQ³f¨ò$å=~ñaw?ô�ò3ê¯4¾Ôèßû5~+±‡^H'±Ë^ ¯álìügéÄ|!Ò$—ôÎT‘àò’�‘¾h€¢Ê‰•ÎeLb“_—èôÌôt4À^ú‡òJh¦º7'’;U™§ªïTu…—A�Ìû½å-Š«©åJk­�2îóí(èÜåé¸OÕi3p¨5¦ýùŸüÏþú×Ñ…xLánI.¼Âñ™Wåõ'XÝaCãµ=�1]+ã"ŽŠe'pþÝòÀ1@ÖÐå�cz•ʆ?^åcW?Çö²Îïõ}¯õs+¢îû|OzÚF€ô / ÝÀˆ x3tßÝ“˜iá¾ÂØqôT€ã {•³ã�S^ž�úcÓ§ž6~Æ[ º�saHŽ{�@÷È;ôcô¯ºcêV}kü–ºEq]’ó @œ,ȵ«ý±ÇD#ý �ÿ†@?FþšxŒ À}¼]Óÿ=ט>‡QE‡W®4P˜Õ@³ú¸?1:j�çÝþcMý3õ¯‘ÿ±Àÿ\þÎ5õ?øo*�‘7ïQ5�·]î°Ùðåé]ä#¦q‰�i�7 x­ð� …‡8Á­£œÐ÷²è;jgx•ËÁCwÞ:“IàÇ1·a Hè7vÔºÀ£~Ñ~SŒ=å·Q⥂xõOü-]G´AõsBŸ “(›|òaˆÒVyž®7¼®'øQ¾8]�2ØXªµ~FþP6–nãµ×dG#ÿØXªüq�è#ŠœŒü3¸ÎqËE†î§O&§÷…Û2ûd2/fâ2ã–ËÚ{Óí»ëúoYݦº2îé­¤Ãå]ÿ8Ñpí¦ý�~úi4þÛßF§?þ8i`C ½­Î�.Ô࿬ЙCü�Î�µ À&1â•Â8ÆUiŒð-²®Óý�÷ªà�ü:°PÖ‡í2ð`Ò ž�S* pÙ‡31�Šãþ1êW€qÔƒŒôÍŒô}]χiìçнŠuþDÏ$Lj߆Fª�WývTήÊx$¿'¹=ÕÅ~�mÕ½-^¼(¾÷’2aˆ2St¦ |l =åpòs¡g‡C~vÙåàËïÉïÊ(`Ê?®±vƒw¦ècQ<˶[T–+ZX €åî¡èh1Ž5‚c×ìö—p,àD3Ûfvío©“æFg�A€à¡v¸IÀ¤F©lVØ·è tæ‡ê¤? Lö5 à®tNŽcÓÆ›ÿU7t,0ña>®Ãu>X 8ÜÒÇtô/ýL�@N³¢6tø6 [*'ötùc4NÙÔ�(€t­#c�?Öøe|M×ùÅ�S%T÷£ ÞPù~J£ñº€dé?ÝU}ô¶è¶ÒØSÂ[$Ì&‘?¢RÞx#E×|"ðk-ÿDžS%/ú#ñ ,ÅHŸ×üXë$ʨ[>¿î—�Þà�yªv:�ù}²æ‘§\i 40Á„ÒÃ=Ô>þ` ä÷½ñ�­ùŸiúŸ£¼&]g–}<>ÔÎàì‘)”tfâ܉}§i�?;ÁSöµû9ð!?ÌHò{�'òé¾c` 0=KI’ãyd¿í`ÃFàXÏÉ‘ÀÿXûNy½OFÀHkûLÿsŠ$K!“4ôHú`½?Öü¹>•›¡�§x‡}Ým»VÆü¢¥�ÒÀD5pOŸ„˜jUÇË.Ël<Õºü™FýçzÕo$PžvêºF:jn6Ô`�\YÀßpbdŠÇEG«Ž9¦¯ÕaŸª³>(í«Ã'ð§NúXm #@rÞ+0ÉLƒ1`ÃizmÒÇô?écæ�ôˆa )öS–iHl0@…ª”‡|Ü ñ]FÛQ·ž…鿌Âóøg •ï{j#Ìí¦~܌ع¯:ã{ª—)ýS7~[õïÐvÑX¾ ]jFH,Cèù`ꬩý­íŸj�CàC@i¼ÿ�^0fbs£h6P_gGiÓÿcïL´äÆ‘,«}ͪ잞þÿœé©ÊLíRjî}ŽGÁî±Há!qܰ#ÝžÁºá.ŒÝñ(‡G”ó1Éì=ÐH¾Þ‹I—áð–Êè³Îss_,·Ž¯ëÚßÛtëþÝtn»ýÛ”ý]n{3îòÕ9§oUØ US¾ ®‚oüø½øõ–±N½ŠUÞª-ú ÕG‚‚ ܃b|à#ŠÔ÷ã�)»(Òt»ßïÅOÀ¹döfÙyù8@Љ¯$†Œ”ÙZN^Ó¼^ZÁN øñÎä3ëÆËÎ~ ÁPŒÂ¼Þ§a@¯K¯m¡¨”¬8ãõ^K_ñüÃåzÚy�Êã=À3Ò^Q¦ÞÕ ?<ÄgOå¾P÷#`ÿ#@C ÷¡®ß’p#aîdä«…¶'Hä:Ãkßt©c÷Ü©ÞZ‹`]xÎÆ@ /4¼ä“Ö¶ä]gš®´é=½”ù¢CNßܽma3~öK�ìlQ*Pè â5—úX€ýèñ– .ç ÆÍМQ¹´›! ßsâÉsÉ¿@–—G=ˆ4ä^ý0æÌؑѼôßY|d±–‹u¸†uÿ^; €¼%`=Â>ów(üÞåãNæi�^[9—~k¥­íhÊÀÛ×ýb°„ß�퇠b@_�þôCEý ïÆ==ä| Ê?¤Ì߀ý' ?(õA€ø#À_ÀoM°# {Eòª!<|Ó ý‚t¥³oocÔ8f¼{a4‚:Ë׈0¨õ~ÏNÐçXaÃô9aÇfŸ)§+Mdú9–>Ù‚×(å=ÿ®‘õÆjH`3~ò[A• @yÏÀ͇š?ÌÇRW°×{>»| úH—Skd€xŽ‹….„àTeº«~?‘ÉòüÀÉF@Ò@˜�W*CNÇäuèu�€l]j÷õ¼¯c–ŸÇ?†} 4eƒŸ×¡~4pð›—òPgåïé3Èøà³õ|P÷™½A_Ó¾ ÚÇ®<`]åÈr¾mò®¼ü]Ð(Ј�‡³pO’ô›nõˆ`ï½ù±ˆüg/Ûº¬üù¼5ãÖÊ ub¬êìi7û2ôœ� eu¶UÚpFže×éÍßè&�ŸQ›pG¯Úe�À�Ëj¨Â  ¢5 ¼ô5ÂŒŸÎü�Û‚àÞåfg[yÞ ];û!o´àaÛ—rCù^ªì5ÚIíꌎÖkÿ¡)ãÌŸñ/€I9 ú½ž‘!òsCž›í²áÎë,o|ö`þ€¾À_ƒê¬_·ô×vÏsò×ãüµ <Yüíl™¾¸o@Ü·^â_S‡ó%3ƒžW:>¹üÏÌßþ�/LÂË·|däi‘©+ý@Ü �¸AÝìs -ï;½÷–�7>±Ïá#û^ü´µO ûB]ÿ?ýI]¡øc˜t3ã3úô”øS¨êã�ҙǮS—ÿmÛ­±Ž7½4†H#7@o»?·Ýþ ˆø§hb3~ŠËt¸“Uî*�„‡?\úlj!a¦ [Zž]p7¿¼¡xŸ¡p}'\ï7㟡<ý0�e…iú£Â¦L�‹äee +¦Ý%—~OZ÷s_ŠÎã4,p:‚¢áÅkpý¼ƒÜ|οœÚhXùã»"ãF;—ÿ]þÎ)~„ó8@€üK4w<‰6jˆXÈñjp8³�1㸃�|>äo1þòÚ“¦¡ð@ueâ ÿÎW¡¾÷ß=1Šà+O½Ç¿¥nÞR!,�éO_öÆ�ágC£›Ýì õXj¤úêÇ1l¡¹�gÊuÈêý“>¡_O1PâY�èáC¾Š¨a b¤y²–ô†¥›;�.2N×ò¯Íy3~•ë‹Âü…_À/U «xõ‚ޝôi€‹×as×+�͸^yÞ8·�Êr´\z•ŽDYRAÚ°õåuhà)íeÈ q€‘Ïs³“*�lôÏ;þÀ¡„&ƒwþ܄ܤ ÛoÃС�4ÍxûÐ� ’Ò ˆfg¾¡Ö5¯<¨9¸…ºÁOÀs;£Å»£>»êI\—㟑s6÷AøƒÚ™Že×±KþR¿`›ùŒñ:ã×øCH ÷x„'j Ø��ÐO­À²@ÙŒ{ðŒ@]—þ5œù þ�òȘ�G*‚ºÜÿàÃWo8ëâ3áÇñ®Lu@#@¹Îrp%ÆÓc¤hÐ7?<ô„o<�÷Kê+O� ¸YÐûSб/†o¸qšÚÜ % œ7w lÀiäºÇõÐ |(m¯Òe#(§*:©> t„›¶¦QÔ”)À£â—°ig<Bëd¦J›Ý�Jºõ]¦h …Ù·æ¶)–>6- oãçºTÇø7=ýmd vÆ~µo#œ>ÎávZ�¬Dø€Î²ôO�3àà(O}fþ‚½3þ‚>ÔWërºà¯àg—cŽ´]ßn,ÔöÎs´¹vÖØó£Ï]ú_ŒÒ}VŸ¯ARG�Ô(Ô¸S^™á3Ûγ¨�:ö¶*Õ`t@ ÷÷õ>ÇÙÓ ¥™ùsÒå¸úÈ·.¾ø� gþxO»Œœ¨«ksØ1ä(búã—øèÙºoâ1>��©F„àï½»¼%ÀutŒî-ÈZð�Ñàu®ÿk�†Ù5}N›Ãå¯ùÍuO¾ký9Å7ž¨©M×+�õg¿®ÖT/ñ(#i½Ô4A¼ñ™š®Êr§Â·¬ñ‚¾eUÄæ«è�çÙ-Š0sa¶ç×Üúñ•þì "òÌLÎ>¢m'í6­~Äåa™ï ’S8Ûi¿Ó±?¥„u)3¥ÏeR ?‚€À__ð7]^ƒ_Š3ÞRÎôº€¾À�÷=zŸwg?yœöfüö­m_¥Oc5H¼oãé¿3þŒË±Œñò¾)ðÎkGûκÍË}B^ÀÖû…º•aº9äà=ålß#£mÇ ã~ZY|ØýØÔg¶rÆÿ ðð?åÔ˧äùYk¿I�¯\RÏ>xÏésŸAuöÏû/+(”ïýì˜ÜÌê¹ ~é=yî½°ìGuyZ¡>›5 _öh(\Á_Zy™nxs›~ lÀ ®R@é šXXF¹¡p¤*6½@ÞøÚ0®z’ ð-gZëK3ƒ¯³´ÌìPz¾³9gPùž»Jq(xù ùÂ[^õ¦«Pu {�Ì#Í|e¶+m�]ú.t=¿åÝöBmoÿ“ß°T7hËÌi û#(”¿Ù„š6ø-e H9gŸú.óç$=A aâ©P‚>áÁ¬ã™y_)<®M¯W©³ÝeLWÇB¹G(ãÌÚ3‰„óØCY` *ƒ”’\ºf¿³_Ävp® Ä€zïi}d‰ÿ€ÿñÿüŸ_˜ýň€Aà¬?à�¬¬+øËÉ~èÛ^å£Ì²_‚<Û}Ù`詉¾IPðwo‚ß®p?€.ç0¶ð'ϱ{Ÿº*Pð7<»›øïÏímáMß#�Íø©]¢ÎM(•[½Jií×àÅ5Ê™§“Î÷ÊOã`YPé©ìP‚™ý¯W(SWE,¯¦†¯J—4•q€ÞøP¨ —‰åžx7éGhú ø¦ýAԌӴ„m¤m£í²Y €ü†8„- ä,7›*!7±9ó�ðÉWNüì(•"ãmóºèhǶ¼^‹gÌ9:ƒ&@>ÆR™åð§QG9=¬ñƒ,ÜiŸCwû aîƒÊpŒÅ{ϱH]zw5Á³*€ð�ÿ€ðž/[~Åxð?ÕØ™ý##Á¿+¶Q€àâlCYjTü‘sBîY± �~ÑÒ2Žé=q�ã>È[\Syû?p¯†×tÃ5nâ¿¿ n lø lÀï*U¯[)ÈO…£‚Ê @ö=m?°òEpFa9ËÉyTNt6JxP•¢�é5–™>¼s ü=ïÿ ÑW¾|—ÛsॡàßÓŽÏ�}L% ¯º¶Õ¸Ô´–S¹6l^ÃQÔð[€×<ã”O9Ãßávµw¼Ò–}ƫХiCÞzÒâ ë.C­ƒ,fßkîl?ýw cÎp²Ì,ð—î}Îw’Oû¾ëÌ5þÒ†Kþ:Gjó@Êxê#ǧWøÈŽ:‘› ,¯¡ ,ñ†5³š`½ÉY¯€÷á'dä¡@zÏP&}ÀrÿgŸ÷k8KÇ þ~¦XåUï €WÍV¤kg®žäÙ>a÷doáöÃ/úùâÜ¿µI@IDATÛ®d<£ÿ/Øø‰7<'Àÿ››3Vêð þÞ»ºRý ÿˆ»ˆÏÜæ�´sÙºëþÜtû—íçVî| lÀùò¹³¹þ3;AY½ä�æÏ(©·Ê«L_Xºôµ©n&Ëò2JUõT0QaÖPaF¡£ð¾¨´ñ~Õï þ/Þ_P�…ýH[õoÿAÚ[ò\–WyŒS7­á}°Ï{hûײÆÃ×<Ë„ë7žFÏðeJ–:£~ø>€6[.´L(WjÄðì†á�-<)–çû‚�cð ï³}A.§ùi L³þÊ¡4mŸà§² è;$½@N_�‚ÿ�~ØOïGëxàŽà¯Qš°üf¹­ê÷úäRdòÁ™?Ô ~¾çÿÿ/ð?E^OÉsÆ_à/õ~¶ÿ5:6›³ Óc@|]å+Í+•ügü�–ûrÊ¥÷;ÿ­üŸ4®=6Ø� ùhÇ‹yÀûwm8nÓÏ:²ýl¸% lÀ- þG›UÙúéÔg()•Œ³”7øøO*MfJ*F7š9 UÑÕ®RŒ??ò“çû(;ÿ/ø ò@ßâ�ñûêW(eßá5\6U¹êæ6ŒÏŠØx�é–�W©6q¶>Ö;à–ëCž×ø2ùÈŠÈ{WFü¾ãŸWýœù þÈ,ËþÔ™ÁßûܻŖJ .÷£my� þãÈk°|åÿò`9îš��€ÿÚöoº;Žï*€×kÿ^¿–M¥íg“À”ÀfÜÁ‹r™.©|œ‘xÊšJHÀSÍÖði©T©PWLU|U”R—ÿ5>ò.ó¿Cá9Ëÿÿ/¼Æ@¥.õügþnì Àª‰3Qû`»s_6]Å… u|þ.K'oðh[îO’°'&Í#h �€7ñ3ÔÚ¦ÏtÛO· 2¨° §Ls”/À"p¹äïI}>{ÎNÒ: cÑÍà‘„þ8ÂxÚî½ ˆ+ûŽiŸãÔU.»X~í¹u¿ ¿Ü'Y&?P§Õ{M³€Lb¸z5fþO4dñO5�“3ðyÀ{\%&u,ö²c)o’r_ü«>~ñcJŽ×ÕiÀŸÏ?§?îÕÐÅÈñÓ—cà_c ¬sÎø[f£›nC›pR¿†6U**[¢áa ø?óT³ÿþïÌ6ýh‹Ïc}žåt¢¡ô«,G?ïû‰ò1Þbøœÿ¨ÀŸ¤»9*{PŽ‚¾ V…:”œJøš#Pp&o<@ØçÔÝý¿�c|çÔ_úŸ1Èó¦Ý�]úOÛŽ'ÙÌ+ËX)3ƒªÝM|’[Œ�o8uoË/n}­�‡Ò'VüÀOžóºoÞ”@fzÁþ�WæMwLí«To¾F€¾i¥›^›€}â¾ÿ‚í«ˆ‡à IþsŒÍÿT 7ùzR__ð7¬Ë=]Ç“y�?mç˶,ÿGÓo»ýíÿ}­¿?é•�ÒVa«¬Q6nRz�ðàï,ê¹àϪxéWvNÿÍ,ÊGž¥0bì*¨ î©lÎì}þïsÿ?ðÿFÑéÿÄ»10¯HQÎò;Gàˆ³�ç¹YI§¬|ñnÚê›9gžø<‹—¯Jͱ—HsI3¿¼&* iT„®·æ:n#½a)åìo?Ï+ø5‘€¨}ÓÀç•>hwø§Ÿöµ~æ} á/ŽI¯l¸îy¤aر)—.ÒnÞ¨›ûÑ:£Þ±ºkv^þ§ÿ Ð׻ܯÁjÿzŸ£¿ÊLï™–³õ‚~ßv1í Û -�ye}ð ‹Ÿ4Hìÿ» ò3ÐÛ÷ôŸôÙ€MÒsVN&nn“À‘ÀfÜ‘ qån¨p‡Wé,Ç› ¢ÏÝȹéñóõ|"Êlm¸“ÿ|œå×øsÿ‚¾!=‡QNZ×Péœn[ºuÞ.u÷Û¼”•¯ž~d¦N›nHô0™ìÖ§Júo”®^pXÓð²,åOyOkjwL+mx—ò-�¸¥”}f›´ß¯õ¥/ö j¿ºé/ AZž#�¼Œ¡üo˜f Žƒ>Æ3ž€5rÊì¿FÀZ£Ÿ‘qó¤õÖŸü’~Þø†œÜ#áÉ|®_:ôq‰³q -e½mÇÐ4ó~¿) 7Ý>ê5V5,߸i­Jù“鄸8ïÊ™ýyŒ÷‘ÛS mÁ¿ _à§Úø[Ư nn“À]–ÀfÜå«s‰¾õ+g&®Î�x†ÿœ°g±û-ö¯ì Èæ>ø9£q£“® P5e½w(n_ù{�¢üõÎþÿ…÷‹m*s•¨®ÊW:ûæ©h[v›ÐM€6þôÁWÉ\��.%-p©€Ò¾jº+¶ÿÑïÿ/ Ô6¥ºct—›üŽ©²Ë3iÚ×è!>nðè]VhêÓWyÙç;â�cɸV�·+ WfÇúK�Ũ¢lÀߺò�oez¬~e¡¬{A¿+Õ{l ýîu�ªÌÿx[WîJZ §%¬10×K˜ö}¿?«:ôã+ÿ}W|ñ™Uµ~qQ€¯›gý5ÖiÊ¡Ì6ºIà%°7(ìëlJ…¢Wùªt}æêGL^ÇÈkXМȆâR¡û®µËÐ~Ký+y*Ç*Èœ �±ðÙÕx}¤Œþu]°½YqZ׸@,5®b®oœ¤Åh–Ø~À±8óÏ�C´)]â¤ÇM€Qð_ÕñÙÏ¡œÃžvë7|ˆÊÜôº9<Ò§.ã#œ™3qAÃ¥~wõ/»ûí<¬?øí8˜5µ%ÓS»Ê­íØg‹§?üR ±=™µn©c Œ`—gÿR½¼:¾ÒÖ9B½–1š4¸GûÆ„i½¿¼ôKŸ§pó~•Z aÚòÊÝG­OpÏ…§2ré^��lÞôc¿èÏz }·ÿÃ˸aiã‹L’r³?µÝ~žªWëöOÝÞ©Æñ«ñÝ €ŸüŠúÇòϤvÉÑeÊg,S~õ@”© /iÄ=ÐÇOµºÁ)ÀE]•Ÿ‚�ž`,¸y0D:´@0£ø¬Xåcú¢D Å—4â‡\Úm†ãÀ»Ôïl¿Ëþ=¨'íËó ÔréÝp\û]jú!oáÖY‡+‹tLÒá;Ó—ÚvŠ]Hæ>œ s�5rŸ­ú;—M›S¾ñÈæÂÖ·••òÜÜé$°§“í�p®BÉ XÅk¸¯+ùzàg–1Ÿ±¬ÿ˜™ÿC7ùúûïyÕ*³UA ïf«Ç,q.ߣ'즨ìd'`€VåîŸ3 âŸc�Q'M:ÒŽ Ârº(jyÓï¬"ó @ÚTÎsÍ|RÔ4MzÈ[¨éƒ÷ÜJÂcl1”q1ä1T ˆüH¯²ŠÊ’/¯Ž)”>J½‡¼g þ52òÖc0n�,û;ë×°ÄçÕ?ù�÷Ý®rTîWtÖh­RY _†½×4³~¯õèÛB½”ÏH/-ß9nø‡äR¦Ý$p�Ø €kæu²ºHY¨Pfgy•xÓW)»´¯²v†íƺ¯njê²µÔ÷ÕýîºGÓz>ý{ü Ê<‡z“<Á°ÅyV‹F#à#]•Ÿ•�ž¸AÓœ!ëj´Œåôɵÿø‚¶›µÚ†|t;. ~û¼“0ú´„ ˜VŸŒÝÏŽ#Yí›É£ïÒ8éð3ð'­à­Ü—þ�þî˜Ü‘ß1&ÇO½OüÎÜoå@VŽÀ±-ã3aÔÕØ\ÀÔ¿ðþµþÊå± ¼ò޽÷+¼rÏR3kÏ·/¥Í÷žqßñ9Ïçÿæµ\óö(ãI=¨}è½X¹ô~ñÚ{½×öqMŸãÊÃôÊ¥´eÖÔ²7éÖý9uûëöÖc=uûëöîk|3~ò+¿þ#Ÿ½F�.ûx¶ß¥Ë!,p ÿÀ÷®ýÈÊ ¼ßHÿ“ǯ97à%àÿ…T*íT5e{³º2ìãgJ|óiG#@ŸG Ò‘f\eû”øçzÚÌyìäå„BÛÄÏŠÝ™7!qPò§½ÅÍaG|6D”P xÅ�'Þö§ÔxòF[sØ|[L9ËÞQÐwô/YÜ; Ä^ÀÏBÆ©)»Ôox-ïó5OS/À��ÚÏMaUÁ• ¼~JY¯ýÚ;Ó üÆu^SûY¯ a ]óH}Ú�ÁÁ8òƉûh4œñ~ Ž2²Ÿò¥ÏºÒ†�ÅMÏÿdÐTÞ~.-e·¹ë—Àf\¿LoŒã¬Pª`L«/øÛ!÷ø³Î[w4 ÌÆýÐÊ üGüßœ~öo”ák€ø«ÏH‹E�©0wê�ÀPˆòÕ™nû–$üðÊ+]¤ ü9ΚGPùôË…RßXÐèp7·éä™rRùër£Þ:Knú# ö53üA•§c‘³>Š�´8Ë®7—ósüÚ[ùp/ä¹=ÀJÚNÚ%õåS^ã#2¿ˆ[gÿy…ûÔ/Z΀_´×Dj_÷þÔ5ݰ×EošùúC|Ìïþ“¬’a|<Àwƒ{iüßdÌ”Íý�gJr\Óæxë5m£—“€rËïrÅ·RW”Àf\Q`w­xÿ Òó|6R¦†€ ?{Ï?Ž—ºàÑþ‡ðk¼d%à¹Ê…E)ð­�TÓ øüZ �t ûHái=í¹b ð·O~VðÏøh[€Pq(lÃ>Pfñ£m‰}ˆOd?^pÛë‹}„W ú$•Æju¼áºŒÓö2ç8öyÔ@ÿsö„à�’ÂîqÈç�é‹2 ?ú^`šiÃ4™üuüÒ²‘Áæ"�Yfó¤fÏ�K`3~\†ßÅa¾©¿‹ÁT©¼¤³_ÿYÌ3Íx�VeXàwV.Õ¿$üEì7ÑŸX‡º²`G|Ï5�ÄÎümÇÙµ|{/<�\QxFš«æCQ¾y÷Ÿ6=à™+(bWx:¡G{T±´ŠÜoé•}"ïŒ}³Çé´³ÿþBÿ€pŒ ꤼuôc¼¶cüŒ[ËãL�;’@?Ó)²ŠÀ–°ã0?®ôÒq㋜[NÎŒ/ëtãœÉ#Ý{P¾.õû�‰‡^k®¿÷€��>Âÿ)é^Yï'½á¶$µ~Ó¼7šF0Î|ï“zËÔge€¶ó)lÙ#óˆÍ²Ù4ûÈý2܃ë€0ågøci}î=ÔrçÑ‹Êj÷<~WÍ»íö¯Úß­ü÷I`3¾OnWªuÑŸéJÌÎ)l;ú¿À>§5Þ|YU‘D±ïÒB6v ¥®2­²�‚G™r‚k½3üøç¼+ ÿó±©Pª ðw%ÀzÝüå~À3 |}ñÞÏkÔ úÐ<·¥SϺö}Ú2¬O»PeCåÄ­[À�v´¥æÿ”ÎûÃŽK‘qŒ¥™’žìüîÿ,c§LdbÙQ·àß{m¿æ‘²VÞ¹^ʯ1gß¼–ò|Æu}Î5ÎõÏFV 5î™kÖ…µ^'ø×(5½ùÒ‚¿´�Ü�½ÞC‚?¯È>À?ä£Z�8ë1oÏä| î?WÏüï8κ9Ü´�nøY$°'¾R7¥ lGeÚö¤õ*­üg�œÃQÈÈCeéY.ËëÇ´ojï°ÐÓΨ³ŸÐÍ,þ7èKÁŸ�…/ðRWÿì€Ê;ÁhWÀ¥_ €œD(øï†�¢~KZâPŸ»t@À@§÷:é²~V$ ßk?ë”Aä­3´öÍû)iåáõtȸ>n~ýj€•J®�y£\î ï“áÃï�Ë]Tyë¹>"Êóyê‡oÁŸk[ _V¤f÷l´_2« õÊÎWßrúµPð�à=Ç}õ•™ÿ^“Ý3Hwí!¶›Û$ðÓJ`3~ÚKw¶ã*κy–¿ãÍŸ €*Jy˜_`WyOÙvJ;ó� k¼üÿðÿà¿üÙKð‚Í…R—÷ ÈÒÌÄi#Jê,0ËÀ(^—�ú,ǾaYÖO{ì±ßï¹#×Pä—wÞ)¬Lf·ÇGyR?Æ!uþÄ{Ÿ¥žep½¿Ù%˜¸ó\gü>¥÷#@_¹®~xdz÷ýQ| žÆ]öÎî%¨=±Ò{Ѿس?…¸­÷>%g¹–í+…î5ÐËÏû'Kÿ|<둳ÿÿüÏO1žò(À“3{,vÆMÛ‘åà}ˆ¬ó÷äs¨Âw¤­ÛX³8#ÿu�Œ¯Û?u{?ØÝ­ú lÀÁü¬Éós~ÇÓ?©´†@ióÁ<›þPv*Û~ñNÅj^]ÁBjŸõ¿D�;óÿmÿ?™íÿï @ö�ŸÍ(syÅS¿¼Ê=³4Ê|¶}a7¿¤}Ò<±Ðåà(vò1oäåÜøfO€yÃÛwÈyÌá¶k±_Ñy]³ÇÐ÷ì~wþ»Ï£é‹Áƒ|âJ‰$Y-3}êÍ'ÿŨ°eθòáºð¸ûQª€½€�÷+€3õ0ªOÜO^ÿÏ´c�~{ª¥i^O¯£÷…F` €‚ÿº'–õžÈP7ü-o°Äÿ@ðÿïÿ~ðø¿þëÁ£ÿõ¿<ÃxÎjÀSòæ×ÿ`³¸þ×fÚ°… ¯ãKå-°IàH`3Npú§/=A粜ÛÕ˜�ߊýÒ9?Ê¥m=Ÿÿ«X½Iôyö �•k.å��y†€Ïû]öwæ/ðÿƒƒ„ôîÈÎÊhä9¼íèáYW ¨-“×GØY¼àÿpp3X—ŠÝ`=7à#Þ™£K»™Ý3†<°A"`(#ó'ú˹¬„8*åèù:Ûß̦5”Kî�!‹ÌÐ-‹ -gXG<3~x¸K¿ÀŽ-¿+½ûm]hfüÜÎô=mÒS'ý*åßÜR ¯u> }Hú'®µ×1`M¿ó©`®³÷¢½ ¨Cgð÷^ª0zNÊî^pöŸ× {6üðÎüõÎüc<ýßÿûÁ3 €çÄŸ»p2¼gêÔŸþ×JM?V¦u6ºIà®H`3®ùJT”^3û£ìÖíØë­X 7<ƒ¿aË/ÆBÁŸ´‚¿`\Ek}�J8ÏÖ¡æ»ëÿ7”ùï(ïß]öÇø ð×{¬ðSÊxÚŸt~•k­° Ê9ˆ>Hó¡"á)ñgö�p>ìL@svZž‚ž}Ër¯a|Á@Ä €êšžÈ/ú#™ôRO·s@Õ+ÿÈÁû@¹@5LË ae¨�·Càá«q=ϼ£N~zî gý_¹}Ošü¢ç>ù,Õ \} êt‡~eé޾Р†œ}?äÛ#Ç ‹±@ÿóˆÈ±Óÿ¯ÿWfúú§€~fþ¬¼Ô σ³ü€–ÿ‹õçxÃÒ†msŽ7½ÔüÍm¸m lÀm_�¶?+•X�Þô‚} �v£FÂÕW°^¢_3 ò™þgò|>„²vöîÌ_àõu?—þ_¡Ü�ù þ¯QîÆó ÞïÖ ¨1¡¢V�×Í Û2B@ šñ0Ê“Ÿá5(Ü–×Ãè³ÏøíW(eåW0Økã<ÐjÁŸœ¼§2SÈGà÷€›Œ/«!ÈËë€G~Ò€¶é”‰ •-u{:žàföOù¥|¼NYö—rý ü™õúþR :ê{­õ  ½ž>’Ê#9‡ô·ÏYY°žáQ?×Û|úÏxrÀãÎé‚ò`öÿˆgý>ï—>Æx¢!À£€g.ý³Á4»þ·òÀyÿÕ¯ã¹7Sê[¹ÝÝ·£~ÓNMçþØVÿ×§jwÝÞº�S·¿no‹_N›p99ýÔ¥úç” üº(Ks ƒ9Ýü§‚?ÀÿO–Aÿ7ïC»ëìíþ/­_ t7}@*È¿D™¿ø_ºä?fýÙ¸G;3ø{Ó]ÆTæúîRp€G ò ú—óPÒï—Æò̘²ÎòSÏ~ãï�cü ð{Í•þëLŠ2ÒÇhòºÏ âM²GîgÃÔ×È®ùÚŽeØg¦ÏýÐgü¥nìË’¿3} Å<ï‡zµFž×¨Þk®QÙãü6EΓ ­ÌʹÞ~·"¯RÿaïGïéÜ×PW‡¾°�ï ÷Ég¨‡ûx¿H¿Bq_ì¹·ŸáŸKþcKþþwêéÞžÿ[sþ\¦aéæ6 Ü% lÀ]º'èK”¬g°¯E^ÚÕg=ÖÑx…¢üEùåèRìþŸ(×(^¨³Ÿëûìß™þ+ � ~ù×_ÙñŸÃPÎÏ(»64Cô*{i�  [€‰°³T7«¹ üXåÍLÎSÚ|Ž[À¾}¤ßy� :ò»—9Äàš.³d¸ä+ÿ¬@gð7=Àε“æ\ €œ·0 €ÌŒmâܸޙí îÜËs~ÒsÊ$eBl�‚¼¯»œâm~10)ã·(¼Ç|ôã¦ïÏ3 x¬½ìç´CqÓêZÖxÃÒÍm¸+Ø €»r%®Ø�«*íºŽñ® ÌaÓ\ p@ÅèWž~JzN„ŸÊÚU€çz”p–i�ñ£°³ôϘ:ó/øKë£ð‰KU‹Îâê'g¦z�ý˲³ „Âvöïæ?W|�»3ÿ¾ç-ŸûäÎŒy-¯ø!Ÿ€¿tø‚‘~¸o!’½_ðªTP•Ÿås-Ht5 Ó6×yÆàû5I�Ï �^S¯¯®ý¶m}ãæÙf„⻺ã’þg€[ï¦S7„jœäñ…ý¢!y Á½êÒÿGV¯Þòlÿ³Ïûÿx yÁ×G>ÒÈæFÃúaØdœòµܱø:¯åRiÔk¸´<ïJ\ã×M×í­ùßtû§no=¾-~X›pX.¿tj•ÁLk”š¿R†³`îÌèUÆ„ öó ß2‡| ‚Ôe…z�¢€P# €€‚ÎŽp”¶³¼ìê¦�ù–;}@T.‹‚©ò&ý>¹îüà†YöG^ÎÞ¹°;_� )³Ô5ã›qæõZ6W ´¿u2ëÆðˬ¿³ŒÀ¼Þ§a@¯a¯mA¾´­åÚ‘º—ãžÿp¹žvÞÃ#‡òÜ�1Ü{òŠ2õ®Nøøá!>{(÷…º{ai<$‡ä¹‘0���G�Gïw�[Ýrÿ_oÙTZý”ÇyeVU¶è&�•€úws÷H*¥º† ú¥¦«ÀfÖOÅÖ‘‹À.0øQÐÞLÆ×~6$S=ö£?ÐËO€(P¸œ+7O@äóleŸC”•ϘMc&ë~8Æœ;7/ýw!¬åb}8¯[¯s®!yÄ”{€°ÏüÝÄ— ~o^ëó¹¿F€�y ð’sé·VFcƒ¤ ¼}œ€ºöù ù�\²×€úxé?è¯}y†ws¢›T=@Èûø!eþì?a¼cæÿA€¸_÷ÓxˆQôžÙ7ÍáBŽß~ ¾Ë½~$¾+ª„¬2 æ‰&cäµLÓ6ºIà.H`3îÂU¸…>Taµéü›wˆ¶|€E- {3fðo¸‚uæc1&{½oÈ_°0¬ 0 \]®°¬r](øgL½�z‹û÷ƒ¬–çÿža—þ¸x%bøgîþx—Ú}=Ï}œåx?Ôx6øQVƒ"~´qð›×²ÎÊý¤ýýÄl=ŸÔݪðšö½?} à*€�¦\åp ßþºÄ¯à À;ÀßU��y¸ä߃£Ü“ à}œû†°¼uó`Ž7qgýº¥¿íߪÍ%*=Î_�ØUYxÒcÞB¸õ€¸í¿Ä¿¦Ž3yïÕy¥ã“ËÿÌü]0ìÎú= Q¯�ñ‘>êßãŸÓž÷µNÕõ¿p(Þ¼óè\¯ácT>ç9ÿ¯§tëöo»=ûsê>œRž? ïÍøY®Ô ú¹þÓ×øQ�ÿ3”°ݘo³“î’ë'ü!ிLw«òfÚ°õUy]p÷¸¼.ÏxÕP…­÷›ñÏß6°¬°#�º„(Sà"y7Û¨iwÉ­Õ|W2ÚÇu¼é{ãţËâDó쟴K¥o�‚~ÞAn¬ôxöÊß7Ú¹üïÙü9Å�pP·c(ýÖÊ%B´QCÄҎ׽ÎìcÌ8.îAï??ýcÀ·SrÎ?ñ¯Ìü]™xè¿ó@¨»ý»"F|½G|Ìô>ïð®$ø˜ËU)Û›]ÿý¿4n™¦ÍåžË]T¶u6úMÊo6Γõ·Z[è*Ø €«Hë,;ÿ© ÷Q€´€à#0 àRÎg§Þ<θ÷ÕåÕ„Ôº¥ÖnX0× :¬ð˜åå¼€?y>JÈ+fPë[O¢"^3l™á»â ˜ }[@ß1ØÙ©Ï-›4®Y oÙù_#`Ο­jô=ëÁï.ôÃKʲ¯ò¹ ³¼ÏO^žó[F@Oü/LìÇèK®ŠãÅ�~—ípwé Þ0üÞÒ–† «‚¾,H?>0ã÷@x�¯=öH6“R?Fô-üò8 >> XdLØÿD=E–êúßiþšîJíʵlÓ6z9 (7ï§M~—“×UKmÀU%ö –ïŸkÿ¾ 8ÏQ–9�9ôQÀð3—;�½%]R•õ%‹oÅ® �͸‚°NYô¦oòCíÍ–¶Ë¡9 åêùéÏô€Š{r( ù¨å¸(]Bk#ýmÙ¼¼–žñ´g�ÌTQðnF[<éÖ÷\‚€ÔñÅ }nŸè~œ²*xËœë(ó#îÿ¦Köƒ&Ý~µo#œ>ÌávªÀ?À2€ÏõZ–þ©süóLÈ 3Á _@Ÿ¸¯Öåt?gùx…r5FðOŸíoû0SÛ;Ï)÷•³Æž}îÒÿb�îy¹o�U�B�» æ3ëϳ¨{:ö¶ê½$Øk8jȺàfB�Wœzú?ÐõÿRšÄéÇôµŸ²—úsÚUÂëvý¯žÒ­Û[·uÝí¯Û»nþëþoñ�6`» ôOC¥êÆ+߯ö$? WºÐ<Ë«pUÆY¦‡S�[j¸Št¦¦ Ø*[Õ«ª¬@ë|ùËÁ>´ç’v>æÂlϯ¹å7 Pà¤J\ADžŽ% *%žöš6úß2VŽZ5ÝôTNþíwúgCS»sÞœ¾ž;‡|°G&ËÌßtÇ1�…ñÇ�r‰@_ÎÔ'î{ô9¿Ÿ°íB³£€~Œª!ËÈhîÃ�„áé @ ï­xï3Ç£w,c<‚½ùÞ�¾�›¼<ã'/çþ{¿ôþèøõ~ôžõQ–†¤+~JÚOJ²/„Í[»þOÖt]n‹o¸ëØ €»~…n¨*³Z݆»  Ò÷#,.·ú6€³¦Ô� Ú*ÓË–U±J5T¯*cÓf#AÀš>3;Úð�ÍåÀ1³ó$·@å3{ùw\ [~ï�eH3?c‚ÖˆÿQjº¶jÛxA:ù Kuƒ¶Ìœ–°?£ ‰Œâ�õ6mð[ÊÈf? 6Ìé»ÌŸ“ô}Àßçüúõ‡vb0 fÏÌûJá°ó53œ™wÇÔqu,ä{¯Þ®xf£ÏXûœßƒ~òåÂQgHÒRqö;T¹ª}›@ «ú«ŒÑûç�‡Íæ6 Ü9 lÀ�»$·×!W�a7]¹¬î»3+CÑ©gà�0»-·Ž®u›.?½JXŸÚÊ{þôG ³ÿõ ÀÜwê òéˆÂ—±”:¾ÎüíÏÄ„ë,7ñnÒ�Ðôm³K×jÀì зkÚŽtzAAT¿r‹à¦J¿í€àÌ?ðïf>g峕øŠ×G5†÷z-ž±æX^Æ”U€1哨ïðç[¶ÆrÈ¡AÈAƒ5«Uv’2u^ï=ß{Ö×ÿjd€´u í}°þ�°—êæü]Êö»IànK`3nàúR ‡Òn +Këö«ä[Àü¬HC‰ªH�ù;+R•ªˆ�} Îîðs¼>—uiÖÖ–«‚ª~S—¸Àkz��e¦OÝ?òóž¾òå»Üž/ý‹€÷¶§‘PP…]\Ûj\ÚvSV`#­Ê½aå`?öÀ¸eyÃßá–vÚW)^ÙIÚvI‹3®» µ²˜}¯±`_€í8\êø ü¥.ùç} €I>íû®3×øK.ùë©ýÍ#)ã©_–þ£²ÀGvÔ‰Üd`y =÷Šïúv…(« Ö›œõ¼ïlÝûЧÙû@åãpôqý!ûÖ\¯í±œº¯ëöOÝÞ±qné?&�Íø1ùíÕv3ÒÚ­ÿ(ëü»o¥ š8��¢Pp™�£`ýBœÞW_ tßá}\ ð¨Ð=HÆz*Û‚‰Æ�\”˜> �:_ð.õÀ¿Áÿÿ¿  ûЯCøÒÞ’#DøÙµMÓ–î9ú'@̀ײ‡äYfT,5z†ßóo}r|Ö 5<|m¶\hyQ6®ÔˆáÙOàïl9àI±<ߨgfõ\ ©Ïöþœæ§10ÍúÓOê–ÚÜ)\eЧãé7}= þ:b?s"G�üãÖ0˜å¶ªo]�÷¢�ÀCêÆB_-� ³+à•š7‡ç²[x“À]•ÀfœðÊœ§xNØìw³¶¿*±(Ó.UÒ2�¢&?£ ÎÔ?£l]– õøV½_T|ÜåUëÎ*Ô°À_#ÀÍ[~ä§_ùðÿ‚� ÿô­| ‡¿T£¯àjÃÎ$Ù�–}­›ûß4©éQìRú¦[ℳG€>é6 LµlxP÷X;®ð¥^xïÀ_*OÃὦ»ÖöÚmRÊÛ?ëH‡ðÀrŠŸ€�_Îæçšhdw¿Ïû54¼F“<–öNPvñ´©!–0ãYŒÃgås¨/Ö¥œ /øÇPzëpËõ!ÏûÇGú®<§O¹þÐÈgPŠt—)s°â–¸Ià$°'ú 'à}j–5–¨MéWQwI9 Ög§îÎ×x%P£„=5ÐY¾Ÿmý¨ì ô[ïU¾¦ÉSê²{¾ò¸»ÌÿŽ÷¸�åÿ‰ÿ^c €O{R78óÏFAh Xu¶e»×(ÕpZån:Ô1øcøOžÙzâ)7âåCtÏèI‘æ‡|èïQЗ¯nMw©ûé–�W €ü‘‘2õñ‹»ü}¯ß%OêóÔ¾ìô'=ËýxÇ¢+ø'râGOÛ½2óï¸Ç2>Ç©«\v±üÚóÜ£Ž¿Ü'Y•;P§Õ{M½ÖY CÀ•€ìA�Ô[§´²*mzé±ôæot“ÀmK`3nè ¨ nÒýH{Q¦(¾PúmÏ��¹ûßC€\æà_¨³&_Ñs†îѬ/pgŸn(Ë'Z©ãóå.© 8ªô*~ÁñÊû@ÿQ>>çÿªð§†ùÙ?Áß¶õêë.’òeòçÈOž¶SO|qó8h Ä•îbùô�²1¤ò².4`fX¯k¸ñ¦%sü4Ú>Z;F ru&o<²ìû^¿»û~wûÅg‡ÿè¿@5z0·tú°í޶3†1¦\ëÐ!§Œ• I/}K\™ ¯”¥îGæ—÷Ré@À{HÀwS ¯:û÷xi �<€j$¸ú¥¼ î3mzÓ`sk®ò:Ö�ëîãM·wl\[úÕ$°W“×½+]åéLʃ€^Îÿ”ßòüØO¾ª0BÙÓØÞþO!7:ÛüÛÝåxgŸOñÏð†ó�ªÖP@Y;³÷ù¿ÏýÿÀÿ>ú?ñÝ\èë_–_ƒI{ξŸçÌ/�”•/>`M?úæAΙ'nzóå«ÀJ•ƒ.iæ—×DTð*`-4éeãJ›¾K]ò,%yzŸ×&À¯€ÌUÆV�|^éóš ÷lô³Ÿ³ŸyßB8}µÏzeÃuÏ# ÃŽm–ÅÔ¿H»y£n�†PÓš?Õ;¬ ø«5P}ûå%Þ7 öÀŸ4]A´t—ºûmZ霷…7 Ü lÀ]¹w¬QÆC�ö gý¯‡ð@À~è*~š×€'‚SÞÙü)÷@úï2«gÈ{òZÁ_êã„´á,¿ÀŸÃøô éÙtH9i]C¥sú¸7cE[oyÓ�ÌÔiÓqx˜LvëS×r™Á¼Ó™¶Ý=ž Ñ®®m¬½ý2­´á]Ê·<â–Ê5�f™_# }аOPûµlü›ÂÍ‹Pþ7L3Ç1úÝû-€�¼óJt‘ɪ‘qe4Ë9ÏFÀ"çUýuTÀ¥ �ÀKúö>ß?€¯Æ–÷AW,W€—Î~�gÜ1nn“À]’ÀfÜ¥«qWû‚âªÐ €7(=Ÿ/»ÌßUœ;ù¿` üYº@YgÀ_%ªA@¹*[Aýe|åÏ=‚¿ÞÙÿ¿ð~°Ee^*µ¾töD Zv›Щœõ¶ƒw#àO|•ÌU€€•C»à0<7t4`ô;FÃ/ Ô6¥ºct—›üŽ©²s�…Þ•âã?�ßY«ÀV_°ºMàïPJO¯c®¯2BÞú¬Tf­°¦È,²Uv” ø[W¸Ë‚®2ò€ßð‘–}ú ŸoL(Gå ÿä+ÏRŠ/®i¥f¾lF[`“À %°'îM²þQŲ®_eeºJ:祣T_ì¯yðPÐxR eHŸá?$_E9+pÁÔý>.x�ôìO1TÑ™ÁB5Þùœ~nòsÆÿƒ~®ØŽŠ¹^ 6,K ôöWß8ÁÅ™~̰üzWvL:Ú*�r7Þ4ÆeùáGŸéxÀ)´ñ5•©iusx¤efOØRËÌ™pfÿ¬ªd¿Å0È4ägoã¿Ñ{²¦¶(srWµ!âñPúSÀ/�1f?ë[·Ôtä�G \³På//ót¥»ØÑ_¯•À¯Óàû�9fø=ýÔðp ¯³²öžõÚ×[§ácÔ2KŸVaó¬w“nîËM´Óíݤ,æ¶6àg¾z7Ðwÿ¸z•«`ÿ  ~‰ð‚Óãž2“â)räé~Ÿ— þžÑc€º>»wvÿBOž›5¼ùT¦ROøË'\á/Ø[ÞG ÙhHXE¯2WMêUÒªxÃY’ñ£á¡P-3 €Ð¾ÛK—7>+´ÕeÿÌúH�ÈÓðgÝÈA# eFŸÛ÷Ô-¯™Ê¯uÖaå8Ú[Æd?†ïL?€/èëq‹t„“æÏqŽ)žq+·ÙG^•ÝÔ_Ç¢ m=î'÷ Ìïý§¾g™¿ÀÉו)�«>ÐÈ'‡½®„½×\q9ôM—GÃÒÙ­ÁpÎÛ›nR›p“ÒþIÛš €çô wúc<ü£|s�ÊÖ r> ‚ôª½œè‡’vÿ@Á߃<'À›Ï7¤®ä�ø{ºß[xÅ€Ÿ³êD)k;êJU°s úò*¿]Z)p8¾áì·° „÷ë|1‚ æëüµß¡#nú­;û?:!­�yƨ|*›Qg7ºTÜ ÜWžüW ¯B¶î¨sR9-÷-•œõûŠë[äêç§]Ùü};à<#ÀöfðÏý¹‡e6·Ià¶%°·}îhû‹bVñá—”­àï €«žµn¾`–Mz‚5ag§3þÅ žoþõü'Êz€�ÞSß•€¼îG¸@À8n~��–w _:Ò,{Èí¸L`I{YÐÀÖ;žøCLš6úd¹,¦›6×/ŸÒ–1>Ü·Ðn,tÆ`¼@”Ç Ð¼Ã-àÈfOFe|GhÆçxìã–öþÊ òª1�.Sfý$ìÆ—û“k´>ù/u'yŽ*—"‚åïãY¹àÆÀÈXЮ̡•÷šRt/oŽÖåÿ² n¿›nU›p«â¿|ã·©4¢lQÌùJ7ŸØIËsסp;ãtTRÒÍw&åi€5 œá?㙵 U¯ döMy©à€ô–p¦À·_(m�½ûBGZ6uÑæSâ¾òOÿ\‘𠘜POùv‰Øpž·“¿PÓŒÓÞâæ°‰#>"‹AB]ÓÃjë5�þ­Ã–³Eé]v¹o�ŒGmÁß{ƒk°¬˜œ3�ŒS9R~©ßðZÞçð9/ËëìŸÿk¼z¯ºôï«�îsÑèÿ£T~¹^ä@çxîÓ‘gxsÇ%PY/±å\‡6à:¤ø ó¨rÛ£(±E‰wì*4Òg7Ç ê¦i äùà;;7¯«}ïªAgß3ï%LþÜŽaûª/ï‚  n¿}eÎÇú• ˜Uêõ_ìîo¿{tòL9©ÎñZWÈ�zë¬Ê®Æˆˆ}Í Ð¿œõÛÓ�òi¤Í2غÿö_ÀV>üó?äí¤}qÿS_>åá5>"ó‹¹í—Pžntùßkã5šÏð~^ Lòf Ïµ¢Þ:ÍxúLÞæ.–€²ª,/.½•ø lÀ÷HíÔ™ÿ|† Z U™!‡ø‘¯Ò4^WL&©¯Ó èQþÔ/€Y'á�Q›eV)uâJw±ý_òRsЀ?a•´@ë €\:ó÷´Â§õìGpÅ@ðÏûÞP_Uü#‡Ñ Ø ’(&Êì¤ÇI6aŠ�û}±�ðŠ ‘BXþ¿mZÇp]ÆIþÏæÇžG.Þ 5®²àuQ®¹—à#@jšy?è”·+ºœ €¼=è×&]¡Þ>âòZÍÞ:s|6s›î‚6à.\…}¸%v€í•’Ú˜ŠVe÷ÆFÀçøì þEè2©J3@EyÝ܆‡�’§ìb–åCG<À0z=uöÜ:^êÌß™¾3·lBX}óà9^ê&D÷!x<±†0´;½�ñø]ƒ�Œï¯9ºÑño=x:¡›=ªX*0;Ö|-šñØ'òθÑ7G�¾A;ûÏJý\ Â1*¨“òÖÑ�ñÚŽñ3n-�3îHýLÿ¥È*™+·„‡yøÈtê¶ñEÎ-g=ê——u¯Ãymçs|À!½«C5dc\’¶ùcqûfž®×4‘ ~.*[ž°¹töm·wÝã¹ôÀïYÁ͸gü{†«2p†,à? _˜ôš°_ÿ{Iº;üóìå&UÅ v³°×¶JpVÖ«¸õ®ªÊm¯Þþ üsþ¹Tð§ÏÏuiÞB ½+é+cp••?JôïñÆ~ãÀÏkÔ»‘Q£êc Ç|Lq9–ôé§a}Ú…f7ÿˆ+'y BáiÎðOízM¥È+ÆÒLÇýpèº/c§LdbÙQ·àï}zp]E~•} =*úìß=!®ù= 5 77Ç^ưmï½ý,½JŸ¶²›®S›p�Òü…yeö ªh®¿¤‹zÈ�K¦y/]å8\®é”'Ÿ£qËÍegG¶Õµ3û€þkúùô¥àÏ«‹¾¾(Í9Œ%û öX££�܃ àJ€T#àÝðï1|Þ’–8ÔCŒ<68€DV«¾»¬Ÿ ¨o>ØÏº‚Bä1 >3mùŸ’VÐÜðÏ3ÿC×<òdй>^^òÑ ¾ÃGþ#ï:dd»½J®Äsí|;@C@Ð÷Zú˜i¹†”3¬kÚ1ºÓ¹?›ŒÎÏgnÀ‹ð×gàŸ0 ÷ð3,°z$°ßxå iª=—ƳKzKÀµq•£JºnoúPä—] ü@×xIÿðÿà¿üß¾}ðâÝ»P—÷ ÈÒ*´Õ Í[ ûGÆæÛ}Æë×ýTñSü#Â* (“lV$nŸg0wHí›+zÁ£3üeOåvÐq–V,?5×4à��Õ™{îä—»Â2\åbÙÈ×rÖÑË ¯ó^½g{ú>êÉ ÷І®+Þ7îY¼í›Vð:–o¹ë꯼~UW•þªã¼�qmÀmH�6oûf¾¨}•–ÎrUf‚\þ!Ý}Ýàóÿ¼*Ípè”O8ò3”c£Æ£Ô—„]@Uo_F–r#Þ*ªÏòý8‘àŸ™? ÿü?ýßþþR&Êò-õ¤¶ÓþIå¼þ°h|À`pÕÀz©KÊEƒ'¯7R^�ÈÛ òR“��b;õ”µÍ‚¿åm·}H]â?«[Æ1�û�ûGÐÖ{ò£{-B ›ŽS&³Ûã£<)ç}8?÷—÷r?[æš\¯‡F@®3×,‡q =ÀûÆ€gRÇDXïãœþoìJÓgºô÷šúºæg[§t7ÝÞ)ÇrŸyoÀ \ýõŸåš¼–&ì÷ž"™íE-PĪæE-© ¦2kµmÛ¦ ìzŸ· ’™5�z­#Uû¬ÿ¥Ëý€õoøÿɬÿxW²€ülþƒ_y =åÕþÙNö4ЖFÅn~I¨÷˜ø# ʸ0ÿH˹ô%{¨›|hà�tW 2Êüå1<ä—uy´‚œò¨àwç¿ø4}¹�O\)‘¤ Ãe¦O½åè_ ½Ž2×íFob8ó÷A=(F'÷ƒ§z†DîYû‰/Ø®ë©yMŸË4m£›nB›pb)ÿJ¡à—ñú£bœ e,_¥Š–<«´GšåTëîâtUò§®ÀiØ2ήÝéï× }Þﲿ3�ÿoÞÄ» ;ÿ)ÓSg@^ºöM Ö¨ø‚QáÒ¯aÛüŸ``<"ÝwÁ�ÁºÀYi¿ç,ÑçÅé'ã—ÆÑGù;›T~†gŸ2¿Ø�Pœrø¹_‚ÇFÊE¹ÅH²ò�“¶^Óˆg¹žP@#"ÿ±–ßq¸–ßÑ›åší� ȵÌ=íë£ùO0ï«y`ü†k ¤ï×ÒÛ�É&�«K`3®.³{W#Šm(بsÃõçIãˆR–G•ëºzø£@m3M�̾Q´  �nÙ<[‡ ÐnPtsâï>÷wÙà7 ý ÒòÝøHcX 1"·OR}¢Ò<âü}åñ™Jžp> ù)cg§åií[¾�`¿ðˆìšNñ_Öåš!³€>€_‰ì‰�uÊ?r@Î^OW{”�i1çTîÈY#â1 L–é{þ¶•ñ d(yß÷Ù¯K¿nsE ³QÖ•RV~«QíÆ}ÎØÚ—Ÿ�¼§2S€µÀÿµ+ÊWù ¯"eP�”„oF€ezê>ЀÀç#@¦Y–6®ãþ>OÞÞž èyÞ‚¿-çØwú’ë>Æ´ýcqX.î:Ær�õÿqiü;ëö®›ÿwvk«v�6àÝ÷lÿØþ™û˜©pL˜7<Ò  wÓ„¡‚üK–ý_ü/™ñë�õgãŠyÿ˶goÒ.ýúx"ßà�ˆœ½ˆ|Àbz|qûë8î�ó: ÎølðSfx7þ-¡(#}Œ&ï³áÀ{Â|y à_Ž 6mÜ/)tÂ{¡àãï Ö0ò�÷¼÷>´ÃxÉJéÞÛ—õýÁvs›nLêÂÍ]£¢¨¿_åO}ÈP ¢~—“ö4ªøÌ;êV Û²1¬`|ªÔ††¥*b½mitø\ßgÿÎô_a¼Ôøë¯ìøÏá?nú£ìÚ°ïúŽƒ`œ¼u 0v–*ˆùVÀc_ƒtÉàËdøá"_ Ë)�£¯ò(?‚÷Ï!‡HËì1ÈWþY€Îàozîï|ÛÁè&BWr„°mèOì¼–îëÐðšz?y4ð;îAWÜ€ÚGÞ—Þ/‡ö2¨žÿÀ¯¢/Ïæ~ lÀ ®“ä_íÏÜñ,¹9k C³0ÒŽŠôˆ¢V}(áeMœòQëáMK:Ô:.½ÇKÿ/Yò�à a¿áð‡ª°]ºõ†×_Ö°}˺œýð*ø/+Æ €gÄ¢œÏþµöy6jL¾79d@ÙÍÞÙ¼²]î'Ërݽ®‘—aï‡áŸ"Û'ò ^€ž]þ¿ yzßi”zßû¥À÷Ü[/é¿÷£ÿƒ¼éul‡N³ï‹L¸ò0}s›N-�Í8µ„oˆÿu+Ž5?•TÓ¤ÎÈž¡�_¢�c&¬÷Yè;fBÙµ¿w”yÓ†blTZÞsZÀÞ²s"q�üº àkX9î—•€œõ�A�¥Êuæ_ð—Ö ì†»`;õ‚“  ‡Ú¿Ì:!@ßÙ¿›ÿ\ð€Îü³ñoð�Ü·w�µ×�{$3ÿÒácx-ÇõL•IZÿœ›Àµî‚öZ@5â'‹k :>ï…Òœ@¿üZà[ï?úÐÓ×çÌ€,|èþ¿Ö¬˜­Û›��UÑšÿwuj«tF›pF$[Âyð�ícgc/Á¾~ýà¿~ÿ=§£}fþàûê§w/t³âF™ Öô&wfôÔè öó ß2‡| ‚Ôeýz{¯©Q…O0� <è'1þÏ„ûÙâ|–ñX¾JÞ:¸�Ù’”{ñÓ�ÿ|gíÈKðŽ÷ºÏ×~„•[å¤c˜‘§1�kHØoRd©]Š¿ig¿tÞ¾øšs04|ݪ!ìJ€c´�õ½/JåÓ°´î6ÆÕ¶7z¿$ þÛÜ&�KI ŠLꉀ/9÷Ÿ¿ýöà¿xöîŒèKï@ñÜýB@å]¥gXg¼éMÛåœùµ†  �ø©ëÍl|ígÀ¼¹ž›¹ôòë¬_ê†/UòbÐA^ÐÏ�?Îüƒ� }ŒjìÈ¿yeóòš—þ“Ök[Z�XgÜ•]®3éÀ_:Íüo, ѽ/–ƒ�ƽ'è»õßçÿÞ3>*;ôsÚ2nÆ·¹M7%�͸)Iÿäíü»ÉÑ€WcàKï‚¿òóüýR®ÊN¥¿ 8Æ'À@Ý›ø˜0ƒÃ5¬#ø¿À›'Øë}Ö+ Ã:•¾›=á¯FÀ²ÈuÀ:Qìc<÷Z�#«¬p¯øì>�H˵îõ.UÈœò˵–RÖû¯Þâ7iØ^�_�@Zï=Áÿþ3«_Þ'öÍ�cåQå òkàoü¦Çâx6w¿%°?éõ¿MeaÛîx‚RÎsðW¬蟳?ß 8¤ÔWi÷´ŒàOØ2´çî R®[ó ìkÚüC´eýè5 ,W×™¿ñ€?ÔÍ]¾ê•×½Üõ=õO™X_¾é«åã—qûeÊ^C™ÙUY­×þCSÆ™?ã_ âÊÃ뉆s�(ïµqöÿßU€Û¼ÿíº†^Îà°ž ðškî¹!í ’öÕC¤|4 Ñ"Ðwe  ŒÞôøÖíÙ¯ëtkþkÞ×ÝÞšÿ?,�Í8,—-õˆü#çÏ ÜŒ/´á#u&SGÀ (TéŒ4ùº|ª×ev-ˆ7O·gH˜P†/p �QÎxÓL²Õ®8ã{ÀêÆ#7bè¸éKÿ `{†äÛ–µ�ÒôÅ_ÀË3qÓÛD¹C?;IëPûÛ”u¼é{ãtŒ®Š8óÇ/Ïþk,•V�^;h®|WOaô-€¼ Hx¾F+7UN®å«€ô×5/O üÈ5ÿøgɾÚoÒ~]ÿ?Ç€ˆi‘Ó.¶ýžJ›p*Éþ‚|«¼ö@ßq¢è~ÈY_å_>h ”gÚ$Þ�éìµgÝïtíy©lVeëUæÎä4ÜàØã€ð'ÏG  Qü£„aíÆ%p<‰Km#½î˜-|Ë®R\èèÛúŽÁ>N}nÙ¤iœ™§à߀sþŠÏ2ôéZºà¬?Kì)á®,åo)ÐûÂÇŽ×ë¿ã>p֯ђÇCã>ø þ¥Þó÷ÙUßÜgœzì›pj ÿ"üûg,�’wl()Óê“þ=ŠË:Uþ#œ%`Ò|Ý/3}ÒUŽ KgÙÿ^W>Ò†å%ÇC+9ž¾øøÃ#ˆ}ö뇀<°�4T úQúöß“ åYÚÐp•ž4aûkê5]Ҍ뚶‹%ž%~A^¯àŒ¿+Rëš'-ŸÖŸé¸¶PÊåsÓÔ«0½­°òðÞÐÐÐðÈÑÀ„5kø¦HŽ8f,ýŸäÚ{�Lž*;ƒÑ.÷úyrÚÛ~7 |·6à»Ew³U7éÖí©ŒfgoªàüºÏþ³/€~æ™í(™+6¼Où›ÞpË6^ZÞÄË_%¼öÍ;D[¶¯±Ñ°ôŒ§_ÖàûXb¡¤[_C% U~1HŸÛ'º§¬`h™s�rùwŒÓ¥ûA“n¿Ú·Næpû$°×ø þÆ©³€ë\@cLQÏY½Rˆ—ß-:åâ=¢œ¼/|%Ð�°1¤ä?äQÀcÿRdã=áfýcaX¤¼T·þ?îR¿ý®ÿŸßr¾/tÛí]÷x¾O ¿~­Íøõ¯ñµ�P¥à³ŠL¥ö%ÿÌÍ€Ðøç(¼ç¤{6º¨’TAhÎí uð·­Q·Ê(G�tùdW>ÔÙV–é¡nÛlÛ†goº€í&.aÄvj´Ž3;ó—ƒ}TÜŒï cõ ?i›gÜŒ·ÀIñ¸!yFÁÛgda;iϰiõ#nåÈ©c„žÊÙNû�~ØÐÔîœ7§ï…çÎ!Ÿ½gýÈêà²ÿ\gF¹þRý‰ˆgÕg—z§~íiï5ï�OtOˆcqæŸÓÇ#÷2TîêHg×ûN»¯ae·¹ë“Àf\Ÿ,ï§Ùˆ àŠ/4øgsÊ[PV ªÎöUÚåDU€TÁ Òð¨ôÄì—1,/¨HUØò�¯iÒz €ùÃ>îhðÿÖð@¼a? ܾ°äU/ÿ*ô†-¿÷ˆÀ2c<‘/ñ:Ó¯ÓÙ]Û µmÛ}�&,Õ Ú2sZÂþÔøõÈfYþüÊ·ü–ºfÐ3l)~À¹Ì^åÛ‰,²¤yï=ï÷høX¨àŸ“YpÇŒ€ÙXÆ|;C»3­æÿpÇ®û�Î5td3®Aˆ÷�…J½Ë›®8û×F@¾Ž†`Ô=å~a 寂µ~€Çz¤°Lìgà�ÐrR!Mª «Ñtùê5–ÚÍF.ÆÐ?´`Ÿ‡3”Ù?´©á‹"+­bs<ö'ãr|ƒ‡d O¼§ìï¦ò·=ÛTù ä¦%l †Ï£»Üo³ÿ5økè˧åQ}•½tªS9ªv[i•£íÇ ¤Ï>ˆõYn -ðä�÷°~Ó×aã–»ÏÎñßwœêúoÀ©${E¾·}ƒ_µ}ŸÉæ™? ˜G~à©F ß�[îŠ/£¾.*c¾ 7Ï…ák\àt–îgxý �ô#Ôsùý(�{ò½èÜ�ò²¾é5„Ô•ÊÃOüêßÁóãûÄ?㥱ðCÀö|L0ƒ,޹í¦,c˜ë4,Øþ ~dÒu 'tµŸ]í]ý´eŸñ6Òðm»¤Å×]†ZGðŸ=²ÙÿòÙq=üë8;Ve!€R2, ç�z¨.÷,ºàë€oð¾¹�Í¢Œ¡Ù÷¤¹¤ ŒÂ"c4íÖã[ÇÕYóø‘øM·÷#}Ýê—Àf—Í–sDþùõ1}À1žp6š‡Ï+[ò8 ÀްÞ%S^¥^Ðp´ã#/|(mø!ž÷´ï¡D>†pÂ;û„ï‡d|[~¾Ñ°ÆA ù ©óïRÿüü_ðÿ úN°ôëßþƒ´·äù@y­Õt۴Ɇ¥{α0Ž€òhYÃáK™€ô¨8·s†ß(SÒ²­j{ÃÜoâg|™˜§+mx®#ØÏ¹Ü0óS~Æ5mÔ¸ývæ¬!§Ñ7Ë'ù´•oÐ÷Üg‡ø. O°¿öU@¥êýå>�Î"y�M³Ä×§flcŒ‡VÖ` ëÍm¸ lÀµˆñþ0Q©°¤~•Í#�UZ®º}@¥ÅlÙ+ŠÇòõÝiðRù ì‚vfêô!@ûeB�½_tö#¼«‘©*ìðÔgü~ä§_ùðÿ‚� ÿô­| ‡¿”²*xû “ïìŽ�ÝtËÆ;®†Í�×· ¦=k„Ç9òÝq¥�Q>'óž¼<�‡÷š¦u£(5Ýp éeÀ¿üf:Æž$ÕÔ¤Œ‘¶*ƒeLäùJwS_LcG~¼þ>2z7dä½ÿ’¸{ü8�ÆLÊXHŸÁ~mØÌ¼YÐøf(…Í]§6à:¥ù‹óšÁß°+y×@t@c €+–‰Ò‚V±Ÿ+¢¡ð-£â´…ÀxÂ�§ÀÐOñ>ä}| €W5ýp?‚ðàsXðJIN 1M>R�‰|å�±¸ÌÿŽ£��åÿ‰ÿ^c €èH}ÜàÌ?¡5`uÔ¥ÏäJë¶?�åfœô§ —ÇÄð³ì�é!žå-]À_~òÐÓߣ /_ÝšîR÷Ó-¯øÈ&�Œ›g™c¼ÊsM¹fÊÂñg†aû Õ)e”0¼ïÂÎp¯¿�ì•÷„Ào„kx<°€FÍüVÀ ü‡Â°Xœùù?-)[`“À�I`3~L~ß]û¦ÿÈ×Ýžü²‹¢w–ž÷�QÒYúG*ÂHö²B ô¨äêmc(Ó´7â–SÑ h}MïÀã ý-`ýWÙ~Å(xàJ€àÁJ€ÏdUÀμ4ì_ûØÕ„OýGù`øœÿ¨ÀŸŒ5{à'øÛ‡ôZ�ËŒq—Éœs½ ‚h[J|qóK@W:ÚØžë,à¿ôY>z]Ã�7-™ã§yRyè¥õ¦Ïüñ™y^õÝ$AÕ{!†×,÷×qôvéoVš,;úV*�›rʺ{I¤=0g÷ˆ`÷d€1ûuš}ošá«Œk]V>§t7ÝÞ)ÇrŸxoÀ \íõŸãš¼‘&ªˆŸáw–íUØz�þ²N>e©³»ƒAÛ4*W½' ¸ßþO W&¾þsvÿWüŒ�§øgxÃ*âð§¾T°ñð–l(Ęð¹ÿøÃGÿ'¾› =ÿÝò�jî+ÅÏ8óË#eå‹p3ž¾yà—åºY¯ù2S©+ÛRi#iæ—×Dòð %}¡Öl¼a©ÎôÙ—‡¹Ä#«ÅXóŸëÎáޥ͛ÚsDÞ_R�õ“ãõúv|:•�÷Jî—©~ ÜÐ�}ò¾Ðí½Hü9ýóº¸)õé0ì«ý®OÅé§éÒÙýªúdã¾ lÀ‰åü«ýY£ŒUH”¬ŠX%·ü+åuž¸S×úø´a{ñ£¢y]U¢T¥ë§y]x‚`?òξàÏÙý4 Ïñ‚ˆ_js—¶À_ïJ²³|7jü‰×øþ éYm œ´®¡Ò9½}\経´y)+_½À §MÇáQ²1(o¹ß�Cå1Ó¶»gÀOÞ©ÛvfšÎŒÞ4Ý´:Óêš/Oú¶ìü7<ÚÉ8æ:­{]×! ¤^fØ€gŒ ù�×ûÃ(­ÇÍi#éäD™ü /áw\+ €‚¿û“+Q5ìà øë°cÚÜ&�ë–Àf\·Dï¿(XH<ÆJš@�r ½¤<¬¯ï¦?�9í(ˬnðÔ�·Š¶Š·+òp'¿§õüYºð  x¸*`¸à/pêï(ã+î!üõÎþÿ…;€-ã¤|ú:¨áz‚ Û¯–�Ãæt*x½íàð§6ä*€|t¡•4ò`\ ÝÛ­Œ~øG8í´½Rë>Dw©ûùò¢_ç­wˆÚo]é.öí·})‚k@š÷ê?a}®ãˆû8à¶œ#ªð™þä` ÒÞâ5úZ`Cy_ÏF@A¿ýo¼´é›1PIlôG%°?*ÁKÖ¿é?íM´U‹Â PCý&À3ü €Á×ñÜ|çR»`}Æ­Óˆ×`…ŸÊ<௴%ètx•¢à!g½é†À‡¿`/0ùè `êÆ,ŸÇ¾ ŽÏcŸòx@àwV€zï|ÎO[nòsÆÿƒ>®8΀ õ¤¶+µ¿�ÛÏzóÓohÝ:Þtifì´#à×»�04޶J+ƒD•‹ýTF¸®Ø­Oÿ�z+˜?Ó]ìlzùÈ“¾îyÓÚVë_–¶ýCå·#wÌî ððí ßò’I?󸈼õý¿Žjâ:ÒÆÕ‰�YÀs|%°¯Æ€¡�ÇÀ¿€oŸε†OÇÑxûÜôÆ×ô¢ü5¿uý«Æ×í]7ÿ«ög+X›pX.[ê%% dèwÞ¿fÃÜï,ÿÏÝ?ð¼ý>À}ˆ'Š1<&ªB׫D`T†›t„U*Q,P�ÀïÌK@rÙ5Æe}vïìþ…ž<� oþä è·�{Ë»'@ÃAP-¨Ù’^ˆµß†]µ�®ÇAÒ.ÍÀgùÅÙ>+´×eã¦;î½ô€³L d”ò–±ß–/5|È[Öô™ ÏuåYßkÔøŽÓù¿òòZ¢Ö\ç­¸9FWqÜ]?z^ÊÀ·SrïP&y¶qÃÎûCÀÙ Mh ÆÕ× ¤Q`ß{o¯Ã°Ižé›Û$ð£Ø €•à9õå?©c›½J×ã€_ o0>°ôþ…ç,í #O5–¿aË_žÿ«ÈõŒ OÅ8|žkP'+¤›æ£•¯^PΉ~Ô×8)ø{`�çxó»,+uÉ=‡üÐO÷{ ¯ð› Ц�¥ßÖµïÐŒC:ûæ�4Hœe쟮aûïJ†à?oü[�ü£Ž¼ðƒz]®ÜŽÒt¾3ï9ÜüRóôô3ž¾.+Í+=ÔY¯W�匢-s„ÊÅ¥ôl „/øû*jÈ—~ò{ãÎû/猖½Ç^ÑÏ|6šûÖU€œjhß {�ô×´z¤é�ßø ¶9 lÀ‰.é}ù“:N} €±ðOß¡àÿÜ%ZÀö�S1Ïà¿„M|k„á%ü¡*ý® "Ù¤'0væ.ø?¦O¾wíŒ1yßüëŠO”õ,€œ.H}Wòºá€Ô6寛�_ ÓxɘJGše¹—�!Æö² €7¬O{£ÍC|’Ö|ûh�is}ã³oÓÞ…ÎÆçzòÔ þ3=Æg͹,Î:Æ/C—J;™ix 4/¥Þƒ‚¿³hïÉû6þ‹®èÜè*@Πo98Ê>Ò·ôuPûY�?Docös¿®6àš®­Ê&Ï«ù߯õÔm®ù« L«wìžøp}�ðà€ý„•€ÌÆ(¯P³›í“–YÊPȪOø þ˜¶Íð”Æ~¦DS‚Y:u4ì—ßj÷4ÀÎðŸÙ7ÓñòÊìÛzxÁ?éjÆO8Î4Æ©kØAgψ!Í>¹¢±^ k©×pV.(Cº:„Ï8Óì÷ÚÍe ò­Ó<ãëz-Ó¼–EËŒßðì[gæÕ4iûÛü9nØôÒ¹^ë¶^XíÆž•�|Ãó÷½ç,á¹½W×,O÷ºk˜hHßã�ý{/úÀ¾æ\â­2`‡¸Üf|‡[óêí;X¬rjþÝ/”Àf\(¢­À! Ìhí³/�~Á>€çø§€¿i-«ºäÃ<{G úξ3tÓ³ ŸPëŽW‰[Ïú*ÌÉ ¦'”#º8Óõ‚º3{_Y³Î'ÚuV–M€ð“‡€ÛU_+\VÈ[’2³;ÔnÓj {ÀhONõéçèÃK;”_Ú_GÀ<ä·€kóígû:‡Í?ozë¯ãÖA†d¸œö§L×üfsØrö·nŽ7\j™†¥ºÖñp²ñš:£X?±ºc O¦ì½iõ›vö¯÷§«îOñ‘…F€Qs¤5T#Ô{zýü¾ÏÏäþ¿nz|[{?¿6à翆·6O•O n �€gï߃;@…,Èçù>ÊN¥çwÒý\ª³qó�Å À‚¯ï¿çÙ¿ 3µ#�Fª0ñÖÓ/`ax¸ j²" _Ó4úüU~öIçoWúÞ>iuäÍíV&¡öoð®�ÕËèÍa�"í¯(ÑÃN¾kß’öwöëôCqË×ÍaÓÊë�0®Oª®ë™8ÆŸ|,3§Íñ†ËÇrMk]éTßë•$~²ÜO]ð:x_žž©|¢Ÿ^O¯­�ô®äñ´ÇŸþíÞläƒWÿ-³ÑMW‘Àf\EZ[Ùƒˆ¢EÙÎ+~ € ¶Îº= Mð÷1ÁKß ¾Kó9eO ÆÏ@ê�Öóš<¦*AyãU¸¡ð2¬›©¯Ó èYU ^€dÔ/¨,`!pÔS'®tÛÿm›ƒ:Ö€ÓÄßþ¶�rÔ ŠL ¦/FÀàašþBßô¿ý“òeÔ¼9n¸õ×éÍì‘áуZo¦ò´³[§ÍñCaÓtåÓø.u‘�€›ëÜqùÒß =ÊÝ$éµë5õ1€+>p@#Ø>kÈÎà>‡íóïý)ÝÀ_élîG$°?"½[¬{Óþu{UD‹PÊζü~ÈWûm€‚¾ÀðøþR _EŸÌÔê§]>yºü0o@ÃÒ�]¡�QÐÙaë¥.<º„åYŸBßâÝÐö×ã?–û=ØnÛ²Ÿ‚AúL›ŽUgº!ûjâºO¦ÍnŒ¯\ó›×øLÍ›óçø:½õš.Uv^—ÙyîñmÝ1Æ%¯qóåw,¾Î+¿öe®7ò”]hh¹@ðïòúú~=s=ÛÆ5ÒÝÞ1ÔpöïYîð#Aé}ô±…+¹7èw©}^¯ È­c9åÖ¼Û¦í_‡;5ÿëèã}à±÷á*ßÄQV à:»íó~�þ¥»ñ¡‚–ÿ)'UàÙ8… x« §¾g)Àq&°¤^6PY†º ÐŒ:5(&ß‚ëò«¸íÏm«xÅ|Ú·äâx*'ÛËlÑ~ 0èx*‹´\~–›ýÜ-Ëò-Ó¼9~,ܲ}} €óÀ_~Öµ�u‡âæµÌœßðšZÞ´• X’æŒZ õ� ÚCw\ÍÑ­�'‰'ú™FžkëÊ„àÿýs㩆J�a}éìßì×ìkX¶ |“c²Ý›pŽ©ã»‰öîk›p_¯ü©Æ�ÂÔTꙉIiKE÷ðÍÆÀßxCà%€çñë½ ó쟲*Iw컋¿Š�¤Å ðù½¼U®õÙ§%�J_\Œ€%F`Î_—Ÿã–›ËÎ<®†�}µgR] Ú‹ò†Ïx첊›@k1ÚGiý®ô·ßö}Ýÿ¦·ä¡ü9¯å¥öE/ø7,]óhýRóígÝ\¾éM3¾.ßz¥ÇòI04 u5Ì(4 B^džR§ÿéÈcØÒœTõdÀ€?ýz‰÷íû¥Á"�}úO½RÇÔ½ 79–ÓKk¿Çæ˜7w: lÀéd{ÿ8ûg¾3[�€.ÿ;óü÷îÁ+¾·]ï}Ÿ‹ºDêc}”à�¢j  ©Rp@Z ÓFÒ8á(ŽæAgàMÿ¨»8û;Ç›ašmà§ÒÍý.Ú>†Ž~.ý¥�À¾ýhaŸ}lÛW©nM-§×ÍtNoÞœß4éìZ¯€_ð—êu-³‹þµLû:—hš×r—¡3ÂEWP û@0Í3vèm¬´‹^-ûÖ Wü>€àï¦E à|D‹¸+Cø‚þEôW6*Ç�^¿6àúezŽ7ý_·§š�qg-~Z÷3þ#Àþ ïW÷ô~€ç1o<ìß¾}ðÿšðëA]xäNü#ÀÄ nô¾_ñnÊêU�žÌç«yY:'<ƒ�å °‡ÀfÏ( ï{ã#¾Ô�Ù¶»¢aÖ¡rS•oAûw�«DKSܾÙ€`á /ÒoÊ–·iz]Óæ°iëô9žŠ~ZOºÿÆ[fnoͪ};Tf�7Ç×|.’Ø=J‚Ÿ�”œ-× ªÊkïÚ_’÷�› M' Áÿrô^÷M¯•}Óx±Ï†gÈøÑ~]¶þZfk}pY>ÇÊ�šÿ±vï{úfÜ÷;àŠãï_ðÿÄr¾Àï‘¿ïö·üñàýŸ>ø„ÿ›ð“ÿûÁëÿ÷ÿüÇÿüσ�Äà ð€ çоáAySàÔ•€—¡ôéoÊuF$õµ©?y³@ÿ¯A ¢D¥/JRå^ ñÌÈLYò);—Y—Žâ¥|c8+ü3Ë<ÀûLc—M�ת/ÆW÷7ØnœöC' ixd|& ¯ü�Ïcm¸åKçrs™9ݰÎ|ÚÈ €àÿ#+òb,—v--CËéhÃVFñóc€\SÇt ξ¸ Õøÿì� —9’¤™ÊSRõÝÓÝóÿÿÙÎôîô=¯«JÊ;×>#,ä„‚L¦Dæ ¼:àG€n"‚9õIíeà\í?SÜíÓÿ ãØgD«ñâ~Ñǯâ“#ßkrôçµõé¹\Ÿa<—+ѵcßþ>ù±ºÓ,‘ï÷ëþ<ôü矟´ºÿYþ'ùÏøKñ.µp#ºð‹ÿ^» ·âñU@ž}ö×(ùà ”­v>Ðã¯öig�ç·ùˆ��QvNøÁOp›€sÈÚ EáÒp¨òôý¡ÿ䛜ʑoÅõñ•ÄïŒÌÈ®µO} ]Í9�þQV4×p2JàÏÈMù­hÊCË„k}¸VPÚM[]®ò(»)^em W9-ìS¸JÄôó`“è]¦Ñ&ÏSQõÜïàSÁ?i³ëåC‹ŒÿÑzî$×YÙ|͇ò¿Äeu\ÓœÐ~vÝïÔ“:v-?rÝï `¿ãû*¤óç6è Üϵâ¿`Û_ÿéo[üü׿š^è}PÛø ùw|nÜ üqœ{ùl§[¹‰"óFi<"uØ7�Á 0ÈïÓÜ(x¥qnàƒBe¹WŽâÌ#`([ƒ@}ÊvŽWÒPÀ-^u·rQà�˜G‹º½ª-=Yécúð=­AFäôàÏ5i×Çy’·ÒZ7c‰�+c;ñ)[óÔxÂë(r“–::^®aZñÔ •vÐLæ*[ÿ?ÊcȲâçû¼ã‚[^޽Ӯe*ØÖ0rpðÒ7è\žeÎñ;F`u†°:#Ö� X_ü¨ÿ(øþ¿ÿwñùÿý¿Å¹è•x �¸½òj¯û‹wòÇ ßa ìQPò¬Ôm¨>ƒâ©¯b<<ëϪ–¸½Â(Ìé#A€¿$o|X(Bù�÷è•^±(OÊÓ>Sñ½¶Jþ"·*ò*ë1Ânï}Ñæ´û¾¼sé€?塸 þIK5^e1Žx�ÛŠƒWr*¯�×¼5¼)ŸÒVj‘üéWON»x-0Ûÿ±ü¸-àw_h<�åùŒµ�ú  š¦�|ù¿†—|ƒŽ˜�aÌ�Êày¢L Üógõÿ“€þþ? ø/þë¿ÿçÿ,.åoµ#ÀJ†CsÞæoÊí`–÷*]R£ˆÙºäñAä²C€BoŠÛÛú¯òÛjÀyX!5F†JM; )Aƒ—{ÐýPÇŒƒkŬ¶»¬¨ãÊïUi[øŒ˜½²¦6ª–ôb¶-µ�5¼MëZ?=Œ#>à­é„3Ö¡µÆRרy 8x8Ê&¼)ž|먅Ýÿ3;N÷Û[ÚÃŽ;€ÿ9€ÂÜüßC5Çq@CŠ«ÀN¸úü·œqüŒØb†°Å =F–úÇÞG}•�2aÛÞ¯ReÛÿœ•ÿßÿ¾øYàÿéÏ^\‰^ÿå/‹k �`;pBU%œ8}BñÅ  Œ"/o�5èjÄNÀ�! ÄÉÿ+ù[m‹J;.Dß–ñp§¼¾µ…(hsÞ}˜"_¶L¿°héª3pH¦i’ ××BàÕ¶ôñïjýÂ4x?á¤ÝGû�ð¯à¿Ì±·ßi¼¨³ú½Õ¸�`æ8¯,†²ÀN€ß úAÿ ¾§q'À6ä•ïŽÿBsð0ž{ç¼Jë��þÿß§÷rß·ü‡¶gäßn†°Ý8½¹\¬Ø¯´¥Ÿgý9ìǶÿ9+­ø¯Eïd ¼Ó©ï¡ê™LñÕh00�?ƒ‰êŠ¡€ aX t-�¿Ö£‚ŸÞ¿_\ˆ^ë y €ÅÙ]ðJ“-Sµyò(ûû\‰|ä'ÞÓûd¼ÄôÚïÚ~ø€>c‰#þ6¾Ê"œzR¶^x5Þ—ÝUü1êø–¶ªÿ¹¥åÛašÇ· ó¼>àïçöÕ &`ޝàßàU\éûæÙú̪Ÿpò'¥ÅÓ—ûOÙ�!ÀnÀ´ ‘e+ï´]�²W›¶r”ÃQ¦?WÐX¶øÛ~ÓGJ×p¤Á‹�]âðãS6ñJ#'´OÛǘRGäÖpÚðL)çUØ`î3æ¼~¯†þk‡ÚYã–ÿÎÁiÎCW^æL@ºGZ<a\hò :F ŽÀ0êhXY*îCRRl(N¶H¯Y9I1j•y +à¿Vš *wç:Þ와äP¶–K�v6¡+5¤ì ó…Dh;ž±ÃoÚx!]z Íô<Òxû€(fë¥æ×¹æò^Æ÷�Œ`œw”ÎùÞ…Áÿ#žó€ €z+ÀÊOþ[aõÿÿð¿•î[þ·¶k”[�a¬ŽÇ^býŸa/•ìP(ÊÀ�ý±õ¯•ÿ¿µÝÿ‡ý¾áþ¤€€fòÔUÿœÀ@E+À‡e'€4 �P^ÄÙ‚mçóí€;m�iGâTŠîZJŽÇ¦ì•ÊwÖ#ëRadnå>É0Bq�‡¼é[ »}R²“@Þ—äÒOÚœ0}­¾‚?}%­w'hü\ž¤…öyvGv\ ‡÷Ì©[¯1æ —·º­u«·\ÞýêW~§ß øYïÓÀ¿–1p÷»ßÙ`>–A€P¯ :#Ÿ®ÏÝ2HÚ o{†°çëÿÁ߀€÷Bʇ·ýaü,ÀÊ@ЦsFÀð‡âPvy` & 9ÉÃÇRøBß ¸æq?§j«|V8œœ¾�ìñ´Y„SŸ‚Û9@ð€âvûDm´-UvX­Õ‹e�WðKß||5ʘ¬ô2|��]âɤqò�̇Ÿð.\•9'¯oÛ\ž'àÑ{ô”ñ‘«»�·Ìyý÷.4ÿïDù�o×d^þïõFÌn…©¬ç©hVþ¡yBÀò5>Yá¿4}ô—åMU9 €7u¹7w%ϯõ­À‰Œ�ñf¶ü™Ø’k×Ân»x¼ÛÀ· Äg|³}K=­Äƒ«{Òj¿�úð¯4i}c)OáÞ%½Òšg®LMßU˜>$Ÿø=T˜“öøäPñÔ¥ü”¯ax”Ãü|7Ãþ±”&«ý+)H^üA>;€ 3uÁÚÊ©}OûPÎvÈÃ+‚ÇuQh}³ƒ6þÖm¢O¯ÉàT9qø½‹ìÔGž„É›ôZ.éОË^òOx­yR~ Ï€ä0Zö‘YË=q8ÀDeÊ8);Ëîi>Ëèš ]3þ›þÐÄþi ù«Ÿžø:½¶ê‡ðB¯ècü�³Pi† ˜¨~ŽHãà„k™>\eîÓcXúì ØøP � ^ÀNf7€Õ?yþþ¬rçumr¤‹”�ÿ¨„q„ãNZøs”õ§>ä×p­/üФÝO¾ûh•Ó…ý|½x(å½ûBÉi»œQã?Ä(BïÅ}ÿߘO¬ä=¯ÔV¾sq#€Ãwz4ÐOŸhŽs¯Ÿ31¼¦›6å?à…Ÿ0Ô}mýdHéou}ÿúxŸ¿–ý–ð¾åK›Þb™a¼Å«¾©ÏRQæ¨{) @ŸÒZÐ ðúÅ&Šç}îËÃËaÀ¬Ì#KIvÄg�ÚEfŧLä…ÇaÁc)H9-ùÔf+šNÙÍÊ®LÊ)ƒj‡œæ9$i¥­ºÖ¶7åvHi—]k£ëN»Ô–¤©ã˶.9ËߤWJ#ð�Pˬ Sgꈼ>/yp¡ËØý¿É�$òÕ¼ ûÚˆò•=Úé[‰2÷8dÇÙŒH^¨ccRáÌ-Ï™È~DêÑ¢­ªó°ø_ë‘¿«_ÿÚý¸ÔÁK]«KÇÅà�™=àú•GØÿaÆFþ©ú¸ípÒ¾]ÛÖý–ò à-]íö…Ô{DXQu²ú|(±¬Æ�¦Œ@™ NuÕpä³kŠ…†bGQú'RxG¢(ôCñ Þ¤£ìRvKJþøLÜNJ‘6âQbx©KSÊòÎÞŽ†€"w^à!Nù‘‰ƒb<Ðv{d‘.e«J *€5ðtÀc9j¢N·/TíšÀƒvöí�‡ ¯>L·ÂK¾e©Í¿sõ¥DêMü!4e×Qd‘V}xNZnýû6€®×ðç-’yräXs…kHÿ­ +äS9®#W‹U=·¼ 6]±í¯8ç]Ø8áŒíf§@qÂøûp ÿ‡%/ÿwèpow†ðB®ýcÿQ  R*œB>ÔJä�”Ï�Mâ•¥Þ^Õ¸¡¨ªôQ'Poµ¶¸ˆ]ìo�9Ð>ì¯JIêZ”4q¨åp?Š=«Vî´å!êÍy)¯z‡É hñôÑ�kÁS=imÙ·K;WÀOm6¨Ck˜Æ¨�“#Œgüâà %sd¤ ñêÈ×§…_é¦<›ÒªŒûÂ�ZŒgÞ0[?Ï1VÌ '=ó™>ùšBUÆÿê$,ž)q¹�ÿëxJ>ÿ³�¸Ö¶?ç}Àÿ¾Ò{€°oKéÃC\ß_êÙ¥Û·ü]¶õ5ÉÀkºš;ꋟ  ¨7“ëÝäÇ|öWJˆWòrX %„G±Æ xøP?JVAßø§|@¿Ò¤ñ64<Š�­}¿.Uô@Þ+É GiÓ–(rÂVÜ¢Û:ä¹\£Èu}M@ê ì·¼‡|´Å^ÊØ ¹�”Á;áÔK{Õ—iµ¯1]1’š²Pe{—<=.9}ZÏO|JžÞWù¹>�²ÒgŽM=�¯ò)óíP4·�B=Ÿ”�¸ÿ Ç0¨Uí#ŒQÂ.ï �ìpñ_À˜q[¸– ûÿÕúQ�æC�öF|éÈ ÝG†Ìç?Ãxþ×èIZhГp„ CH‡ÿ…hop�? �‚ÅÇ¡nP¼¸;ñ„7R)(¾î‡÷=QQ9m³·ÔåO”uîÙûõ½JJ{JÖµÁiå/åh9Q¶ÐVÊESž(P”𓺦ÐÓ.´©ñWÚ_cg#@[Ǧ}û)—òI«²ÂCpò®TÒEjٔ鲬´µÏ¿)oŸ–8mŒ§¿xÅ™‹Ì·jlrK€¹ÂΑ�¥û)•ñŽ’(cêùÕdÙH]{¢Þ•Ð5âÀ"áKµÓá6>¼(}ª@O[ñðë”f÷ÞSv!6FÊ.d _�À0¾“7Ë©6–Ï�éR À!^5ÿ(T”kuz©_»ä‹QÐ+ã¤Û(�Òó€ÚqE[äý˜”¨�Ñê¾Ú`Å#<+¼É‘Š��tÆ#uYQJf€Öt“ÀGH£ i7 ŠB‡ÚSßgâŒàÑïôy)�,\Mƒ·)¾,±üMùðOÞž" ^ïSm# ¯>¢ô†ñ"ÝsS”¸ßu!šÇGQŠõœcEçyùæìçÇ;2B¹p£ù°óz`À­¯\÷9# €Ÿ´Äi1a÷e?ÍߩԗÒÎ�vú‘„ à‘ú¡Õì{Ò÷òQ8øV(=íœhà=Ÿ'eåÏGItÙÏ&k7`z9J©ë`”­lKƒ¿öâsk [þÐ�=¸ÓÙƒÕwø‹_,Žä «MïÔ6rÊ��À[y@¼ŸB@ÑMK õwâ�¯å5•̬ú¤ˆ-ƒ:ÕW¼ÇKyËÍÕTÇP‹ŸÚ–>¦�Pú 12% /éé å*o.NÞäI=)ßÓ¹ôžWã5\eÁß”–¼éSí_k+c†3�ì$Ãã@õžèËg‡¿ùÍâø÷¿_¼Å agb2TÇ!ÀSõ¥ýBíæSª(?NOÝn§g(íuûQ:€%^a”¾)á¦h]ùý`¨0–ËP@q¼•1m Ò>Æ©úšF:eI_çæÒçx}yòô®çÕø\^ϯÒÚ¿¹pd�F8ýõõT;™“´Ø^yW^¼Ã˦ü® æ•òû°©ÆÐ;DŠC‘g`Ý…£ Hòî…dR/í³¡,ªYéÿQæb(óžð:ðO>_¶—Àpor†ð&/ûúN[�)™ÇŠ0Þ p¯ð·ú,é­ùR+qMâ½DA±%‰Ôñ(.¨¨ÓEq“bU8ycĸÒÊÿ’Û 2<Þ©¾ÃßýnñîXœ`è,©ÚÃRl p-¹â��p)…ϳ­¿ ­ <·Ú¼Á_aß>h >÷[Qð“2nJ¶*Óˆ}LJ»'§0íÉ{ ÜgÒkõa2 ããÈWãá‡Î¥WÙÉ·‰öùk<áPäôá¹xå¥O1pj&Â¥­™»Œ(Þà¯ë Øó¬=suÊ#ù^�6Ñó'F@ê.²¿9ØÚɼ£n¿ P”ÿ F �6ÒÎÌÃmÁßóD2B¿¹}£à‹�a¼èË·ÛÆþ(ÊÍ;\+>�ýå?ÿ¹8h;|§Üà)ÅøN@«ýÉ/Ê‘òÍ;å¢X­\øC'@à)Ã〕>;þÓ?ýiq*Cð?‘a`@Š·@×W;ç2Z>Iî±úEÑç¶‘Þ{åb,ì5~^\}´"fœðò+ µRÃ~#SÿÛ5³2§MPã­´@m6ðA¿¤�Kùoq}›j<áPä' M8üÄkZÚ•¾ÕþÖö&_áùzJ=P¡öO¨o ˆïÿT2x ™?Ü–Ây'@ño#Ki?ªÃ×TQÿgÏ%OÓØ ií"ïC} þZí¿�À¹Öù£“ =Ñ}x¯„´òÿ¬ø™€øäÇ=j‡¢kÇ\‚Q ɽJVÝVŒ�RÀJ¶Qog6…æU�€ÿZà~+�ç¾ÿ;mýËŸjÛÿLþc@ua”Xñ¢ä›£½Ü8‘B>“œ�ÊóIÀ™êæñ)Vó”9.mó9)ñ,Päù�u4OÜÊ¿• �N㪺Vu>’sMeœéýM{ÓÖ‰Ò'Ú?×ξ?äIŸæÒæd¬ãõåû8åà…_iø¡Êš‘f~Mm¬aò¦í}›ÂoyrMÅËØÒ?% ¹âùM9À_óŽÃy<·�š[Ôë9Òµ!mžš“vLŒ/ÿo”Îÿ„±ª�—jqh‘�^}�ð¥–ï Mÿƒ&fš{ß'v”Þó `ÏüRÅó‡ö›Æ0¤pÎÌÄlýóç¾P|ñï/¢œ¸Už[œð{P’a+Óø<ÖÇ#~pºåÀŸ@žmÀþHàöÿ±8mÛþ�;o>«‡£x|Ë‚¶ÊŸÉ8•ørNA}Áñk€G™Ëû•°Ê…Ÿ¶™J™Ç <€àò*GÿmìˆfµàP¶Gu´)uü€… €Ö ƒ¢Æwöà_—­,ùv-— Rþ¾8ù’·Òð�¾Ç´¨Ã)K{ ojwòж„kþÔ­ùr‡Wœívæîs½xâž?¡\Éó\¬rJDœ@IDAT©o“kmÁ`f—ŒWŸK&_Æäà+Ô·D=/CÕ>Ç{%NZxŒŸ79Ãx“—}}§ vR(/Ÿ¬àJsøôÿµ@Åq �=×­€k ¼Ö“W< #à/ƒ]|þ¼< KQ"ÃÀŠÖ!ÀÏèÏÿú×òÉÑ�ðçK¥¤85�‚´’†*Ž3I)ÞI�ù]Ç‹w(ƒâPÆ»?þÑ÷üÙö?ÑkP¹ç�?°ÓŒ(@”U<_ÄxÏö?€^]Œa0åS0Xýs¢ð?SÛȯLË/­‰ú�ƒ”“�@ûüMMnstIGQ?…sÝêWÚ8�€ÆiþV?éóŠŸk¸dN.aÊ}‹Kù”]‡Ÿ´„{*¨û!‚@ëhµ�ÑÉ¥ÝÈJxJ,�5iSÍïhμ8‚ÌÇø¦„5¿x9·Q4ÿ¥�õ»Äêuy@mó€úpÖx“ x®û& ¯iÔBœÿH(¼áÞÆ à™\ç€Ô3iŽ›‘U6˜Û€"ÏâûûâqÀÏë‹ò sNñßIùÝ ¼Ü àûòVèJçEBxc@c€ø‘ €c¶üµúçœÁ™VþÔi/ÙÞú—’¥MÿŒÔÆ�Úæoˆò¡Œ?®¥ô€¾åüü(€ògÕÈûÖ¹— pº•wû5†Cârü¦ IwÂ#ü,[ð¥"^‹Naµ3F».ÓmÚßúðEÂL Ä…¦\�Ã{¨«åçÂáAãUGÆ{~µÅoðk}ü«§õ¾Å7¹¾-’:ZY%å\_ã27ì5wlЊ¦m–‹ñ¼s$ê�‚ÖvÒ‰3G¿õŒmÆŒæ€ç²d~Pœïp #Cd2¨³óÊò¯æa.Ÿæ4¾Ñõ2�;Üó�a<¿kò,ZÄ8b‡Qn`(°2ºÅÀóÍVýö sÏŸºìUoVòk €Ö^”¶¢ÐÜïèßkg ø{û_í‚F�ZÉ¢å;äÅ.Þ!ÓÛÀ(ûdxjš6·vþld³@Ë?Ûì(lh³¿‘Ye&‚¯s†ð:¯ëÎz…"À¼Ü÷cu…øŸ ø/µM)àü/´•Ïc‚×2âQެúÿCÑxvŽUþ˜í~¨â€¾ïù£ê\À2HÞKQ£Dñü |ï_yù€§«¹§›zÄš }Ñ”l<+¿ðÈû,œúà¿ÆÐà#€öãI�«axêŸ4~ÉùòÛ—ù’²>¹ä˜ ‡W©Â^y««}ÞöèÓïêWv{ \+¾òCýé_QÞõp·§jy_¯ÚÂÊc§pVüàKŽÃ¦òá§üËR²,–óÀ|¥\Ú§vOgb 4:ñÛu‰1±PZÆ-êÅxaÞj_miˆGãc£ƒ<ô1ø�á(_ÿ_fŽŸW7Ãxu—tw Bm4E›íöc7Ÿ+½aÕ/P½üuøïTཔ�Ba5ø5#€°¾ñQ„xxÔa�âl>툒ª ª?*Ì^uB1ØúgåøÿJmû °W’’ õ[•¥šme÷_q Å �m\ .ЖKÁ'.±ÇujÀî6ªOÉ´ú×˜Ú �OM#ܧÏÉèËŒøþG`ûã¯&ÿ#T¹“*ò§…¢ªâ/ù|€”rþØ(®†á1&ø¸ÄCÃÿÚËGVã¬iãÊNŒïóC5_ª@<ó'e2'™ìÐ×ð¸ Ä®ŸÔåÚ×sÞ9�žÛ0PØ@~즒‘öREuiýPú;yè¹úà Q¼ê×…â¨HçƒÊÇ!ïÑ�Ú‹øóvÆ••?ýUºüÅ×Fq M¸¦'_(2çÜ\™ÊKX 1ç~?÷ü½Ý¯ùè†r½˜gÓ<*màšÐO(é€"ï}ðy][Ÿ¨TõÅ è¹öø3Þì4çú[x³#’²ô[ÞµäÎ�˜ õ•°ÁYa®)ýb€¶Æ€â™ŸöªËà�ÑB~Ê2”C&miŽ+�gw„2ŒYhòTêñ­Œ~±#0 €{éößðúG�R€¯:@Ÿ4Œ¶:Qpñ({ (l§¼¸Ô3GSWÒ’ lo^ ÌþsÿÊ€ €½ `ñ�,®µp,e‹?B™«ín›äø%.ŠóV5^ä<(BÉÆs;ágí 2Ϭ?ê "å]ñ…I�Ò§ôOüÇrVâwVý€¿�1…}€ë„§mñs £Ý›ü\™ûúÛ�E�'Ü(³Á+oQ’ͧ�yÅ3žy5­ü•æ9míÊ\!j9ê3s%Çj›s ¼¶×^s';¬œ³z¦|õ›À_»L„§[­¾ž¤=ßqÉ¥-É¿ïŒ@žµa‡ ú«~ÙPÔ€xÜ ŒQ�ÿó›ëI<»%>÷¢±ô—öŸ€e5ËÞdL+EžÇžŒÃ½èÀ#]¾}ÿav-yý=€?ÃH<ŠÇ Kù¥Lï)/.}˜£.+¹þºè¥îç_hU.�ÿ,!À¿'ÿN¼c�ÿåy§´[¬àü(—¨4¢WB€?+"V?'2 ø¤ð™vX1ò‘#¢Ô{ªÃŽ€JÔ!iýmý€z[7Ú#�FMõÛ©MyõÅ+ŒÂá“/yûv•k@ÒdᇒØÂSýÄ·�;ÉD†qÏ•7U<·T0¨rÏàçšøduÞ)û×Nmªu2rÛÆÆ›JÔú¨Ó+j]Søô åèÇÿTÖgZ-+s¶ñÖ‘´�ñ"<•e܈7¨ëÏ2�ø™£6”æÛ9”Qdð>¬òÁ«SyÚJi¯ òµ¼>#YœÕ¹Ñ+·Ù•ãNvKæ3‡sí•6Ä%­yUáºóÿ$Ž#>õkÉ2¯gI/£/?[h0w>ÃØù�¾�ý›8…°WJ¯Ã#ÌOþ9# y Õ‘?.ah¶ûÙòçÉÀÿ³VöçÍs�Ÿûö·Z­óò!ý±p þ¡x¸·uÕnVy(RßFP÷R{”®ú†A †{ÅǪï­aÚ¦4¿Ë@JÒ…Ê¢`-¯5ÜJ½ô#ýÙ9M¢¬(i;íËÖ?àÁªŽ¾ØÓ€”Ic תó°}5(£4÷«åm¥ˆù:;Ðý¸lãŽ,(€kVûLUG¥ÙúôüÌ…Ì‹&zkB�î?cÒÂÈbûs¿í:ûã>ðÕg{ñÝv Gñ=ÖJ«Žôpœ·&–pÒÈ›°)òðªÃ`HXõòÖAß�qz‹gþÉ ‚÷3m¤=’ÅÛ7¯5ïo4ŸyñÖ©æ³·ù™›J£�x¯åÑ]Àz®0ô_†Á™nqÅó0Œvõ ¸Œ{®AâN,é‰úüG`Ïÿ=i çþä(\?^,ù1j¼æ¡LïæêôêLÊí³VóŸêÿÅ_þ²¸øŸÿY\Šò-îés¿èó=‚Cùc)D+Ò¦d:Vê6T9Ê£ÁýRßü�”«Âö c$ä» #`«4­ß‡2–gW¥üÎ`¤úPâ^ñÓ&6ž0׊ô-¹¸²xÂ)eJ¿4fô«zE§|„ç\dq]½’eîíèPµÓ;+äiaŒƒ‹S¾ŸsõÍñÒ÷ 9ÊxR'ýbüP¼¯ŸøŠ,Ç‘0ý‡ªá9‡Üù”ÕÜnÏ*kYWê¡^ê¡}´W”lyg@aæ"mçúó�€kÍw‡Cÿ ÀžÉHfNÆ{LYÙ7�áƒ�* åõÞ¿Ð[8�§ýx ;Ú!çë§ü¸ü¯ûëÑÇ�yü<ÛÀ³½4Ï«aùc‡¢Ppÿžö€Ÿ8e¬Dghd“§:ó¥Qrç2~ÒÉþOýëâêÏ^\ý÷/.åïd°ŠË–­ŸÝØ›÷*]BS7íåp"ç¼C€’“Gñy[_JÑ/.b¥/�PÍ�¢³£`ðg\šÂTÒ~]ÚL»©Oûš€AàÕcÚšVÄD³úŸV½ð”ÏžrŠ ’–¾…IÃeL—±/¿õz2[ì% Ê!L{µ‘ƒ~YåÛ/† �œø/ÒŠ ®±WÎê‡ÁJŸ4'˜'¾Í¤<ÄG%iÊÃ8�‡ré?4ñP±V\ò®0k¤µÁsùê3ŠLøæi¬ 6Ræýç¢Ü»ÕÓ.w2Œ9óò¡Ýòâ £‰D„æE<·ØéŠç£[ì®q�yÍ7s<õr-2v˦,¯á9GÞá^Æ àe\§¯Z¹ï?Y/?J¾ò{# y sžNÔ<5^;Hä‹Bfõï­VþÿÏZñŸkå##àæo[*=¥¡v­{퉇§ J oE'EËÁ)òðù–f)ÅÇG‹UNþó�^_ÌkŒy“¡_i,£„¼> ¦vÓö½¨?�Au#1ÜGÆ«%ºmü'°"]}ñØ–Ÿrå3N^™+C*¼äöJY|ÆÎ×7u"cÆe®Pž0 ëëƒ|µÇ§úÍJßg+4ÞGå›d(ü÷UîRž4ZÙÈu”Ç»7Pñ|ÛG}‹ñÇãzGdiî0nxÊb@yà—v¸¾ÂOpJGÌVžqBf 2'©Þü÷l8‰ÚÈ“€|«s/72x7íeW #ØFªÆ5;C5|÷Âß¾Ð-³OšÇ>p©¹Í®Ö�Þçq'O»xt’:é¿ êU{ª§�ë\ëuyÿñG`{óãD?©È¹?qúа­$¶B-”†‡—p:?.ux&ÅÅsþWòŸ¥Üε¹ð³ê¿‘ÀJçP+�C)9”“9P‡¯ tjB©ÇXðéiÅá%ìO£¥ ¯µ"ú¤]ˆ^ëêBÞ¯2VÜ; €�”§A�0¾ôIbwîÒ¯PW@�ìxT€…ÚÁ.€·î¥°½³•÷8�¿yäääý±Ê²:‡ç¸(aõÊ×ÐTa»ÖÏŒkØä·“\dØÄC®·øÕŒ<@fp¡îVÎ…맵˻)7Ɔv`u}¹Ÿ/zGIcí1Î5g¼UoÀ-íFNÆh9"%‘:ZÔõ)ŒÆ«â‰kP¦9ÌøxÜZ›ßËø¥@üùÚþç@cô£¬È×øâmĈrë€k€!`ùš×¼ìêGÕ{£ÿÕ}›ã†O€«è-O¾h r& בvࣨ&î{®!e«^ˆÌAw;ÃØíx®(®ïùì¸Y;7×§€>•Dö´¦% ]ç¼ý*EÄÊÿ\Ê àB€Ïýþk·Zý¿üÙê”bð+ø£ ¬¤D£\Qdñäðñ„~|'Æo¤ð88u!ð¯À+$ µÏ`O! *“GaïÉ. Ñ 0U—Ï"F\vP<–4¶{IqËÔ?]¬És]m N0xÅ®0—ùÚš³ý�Û+9•Òv×!> ¥ñÛKÿþœÓ¼V·‡va@éÚøu½1Lc8¬±ž åg>8]MZŽÚjÛàek ü:_OÔ†�ªëšS?Èóx*妲Œ“â«À_ÿ…d` ðLRUû| @ò¼óCÿTc#ðg®3—1 .EoTöJ² \kït)�3Ä)�KÝ\GæqÂÕMãZ™[†)ëú¶Ì?²=|†ðð1ÛªÄ÷Lü­*xÂLô-NƒÊÅ Eà’‡pòõaâsƒ‚½â¾¿”Û9;ÍðÀßÿî•?«?·¯üLfÀ_•éR]‰)%J cNþ¤ÓvóRJïSvd°0í ôª¼¬¬ì‡À$íÚeeI½´9}uûU7‡¾0ˆè‡Wþ\y¶³qæ£XÑ/|yÏ÷äÕo‹ e<â\6‘Ð/xPVráG~èÄî,«ë¦=÷Q}gÞ²:f¥ð‡ú<9€RÎà*¾ç9c¥2½£Ÿpë8$�Ç@®#ÀÇøµêø­þþdµø”§œÃ�±òhóÚkvŽc0ä1L¨V…×x�ð+b¥dQ l«ª â¾ÏÍHãy µ‡6±ì«jô){¾øVò*—þÁgµGkéo}ôŽGðÖ)·Kš±Þ¥ÌM²6ÖÇõcÌDs%13î�ûd}®3yñŠçŒóÀ€‹Œâ}ÚµHÛ"¿Æ¹2¼‡‚¯WæãU|ÅÒÿ�&�°Ïd(/áC÷©îûó!®S�ù±Êüö´]y\?ùå=7Dcóò#^&Ä¡X¾àIžs¾ë!ÿNÛÿ6t`¡§<ßÔߌ!4†€Š9 �#½ÿo§lÍ“0´Ï_ÓFxw#0 €Ý�囕Ôÿ™Q¸ü‰+­á~À’f> IŠˆýü¤ƒ~œú¿VøV ÎJM™˜¼uÕ?gÐ’(Y”Z|xP”`”b( ˜�H‘²�z'�R=ä•6}ˆ…°ÊómöÈÒˆ–)²sg€W�>&錽·Î¦J¾ÊÃ-úOŸÆÅň©ùýÊ]ñr_žkhÙ’?œF€q�g\Ï8ÆÐ· š˜Û>€!¦k@ØaÆžk#_]bŒ6i*õ|cK_\YÕ³M�ñáízd)o€œV�ÈX>V~Ê)ŸßaÑêÊUL=”cÞ3?ü¡=.2pÚà0ágíx±ÆNÜõï~Ç䙾ê™ÿ}¨ÇFéìF Ëýóˆ¡xvnÏî’¼¬åÏO« GÁ'¼‰Ö´v9)V"lýÿ$ðÿ$#à@À;)8¿¢UbÌ“bS>¸(L¨­(J9Ééç)Q¾À VØ"UØÛ¿´My/•'ßd`‘ø§>wçT—Wþ¢ü Ô üÿéz´ü�WŠ{+[-"ÎJÖŠªr^ýÇ€W €Iæîzóâ$y 4&  Æð×ñ[úD=7ˆ˜†úP&|•±A@˜ë07 \7ñyŒõXó�=o³ä+–Ür@ï¹È9ƒÌ×¼ûÂ_ßT9¿ºYò¾Î’I^CjÃÙ û Í�íº}ý¬öòÊmÚÎ÷=δ ÀòPþ³¹õG¼Ñýe~ÙÂ!‹]‰áö3ÃØÏ¸¾9© hýÃ'¼Ž2Psi¬š0xͯwdœhûÿDÀÌ– €ºò¯a”™••ÈEÙEiVµ¥Ê=ócÕÇ¡Øbõ‹X¤$ÒVþPêü?·°ÈN�³$†Î€¾ÕŒ"7èW{íDÍõØb*³bÀ“Ï5]¿ÆWcÇŠÇ”‚ÄkÍ—|žZ9=Zè•;y%cºmXÛÕùr}%ë í|ä1WÅã‘Å|Î|Ežw|Ä7%.Ï5Μ¡ªÔ“ÿÿϵß;*/´wû.þWŠûÍ›ê¯ æM�?(=`�̸j$LZþßß:Ÿ¾µ\Ú5èúÀú±yÕ)ßû§ÚTž´ú§'^¥àä…:¯PZ(МH¾ÖýM¾Ö³µ Gy%ÜS&wx z…ŽâCéUð' Å¥HjïþçM�^a‰ú[â“÷\ý<‘‡¢Ô¡¼ž•²´kRÎ —S}8ÆÄÊš°ê¸ Ô ¬áõÀD#Ÿúå±S8/á™¶ÿ›\|£?sc9 …ÆÇãÊ86‡Àã•~w?ó�ôxÅï=#Ðæ•ïí«׊yæk&ùžƒÚ‰z§ÿ�wZÚò «*ÅӢ̓Pøä‹G.>g#*ÏkµÚuðö¿â: p¥ÿ F9oÐÄЉË:FAÀ¿þ¯“ºqlkÆÞû `ïCü6+ˆR ÷ ç�ŸxF¦Æ£¨ V^Rо— `Æ'­QòNùÀs0Ð_øké¬Ð¹_�'?. ±–ïåQ'ä½ëÐ(€ož;æxÞþ“ÂgâcPW”l,õ=ÔhZŸÝ.Õáþ«>ƒ�êd<¶¡]%ô1y1 ò:ÞéC;È–ÏuJ™A·�Œ}»>)±íƒ¯æ¸¿C ÊÇ~εâþ,àýY«n QÞÏÀ®·˜ã+×Uñ~ÞÆø…’f`oøŽ@8iä…å o×ô61j}yÀŸv2ïp™/øÿܰQßòºÀøy6#0 €gs)^_C¢æiY!ÐóÄͤ”Žz1àKÙôF€ÓHï<ŠË€-ÊWÒÞ7/2m×FáÅ£ð(ƒÌ^.òJÒv äâ¬�¥¨OÆÜSÿIá3âÊçg¬Õ\êqä?ƒ6mhž±ñ£Xª €!®Ÿ¥ïä/[ð…é>2¾òô‹U?/xA�SÇpß07¯ú¹æ 3Ž�å6g ¬*Ãõb>²ýŽÀû'~ÒŠà Yi­‰¾ž ‡æÿ`?·ÊHGnüb¹Nò“žú9/â×i«^ÎøP¡¨ocˆ¸ç?Ê;óßÅÏíôÿuêîéG`O ^} P3½¬üª Èj°¨zð�’‹Òƒ†�ò¨?Èëá%+HøQ„UÙQ¦Ê¨aÚA9”:ÊToð*>À‰@“ÕÛ¿ÿ–¯å¥Œ¢Êô@,ÖV޶Øk¬pU‡@Ôàß(u‘o­£¼¼´SeôX©ü±ÀŸÛ‘_¯ËZy#áëàà5Æ=#àW è¹>Ì™i@�àý¬¸_Äö¿¶åý àR{®ûÜ ;a¤þñ™Wˆanâc@ñÓ€€ß‡ 1Q¼e´þôUÌó“>ôž´1·…çã†ð|®ÅJK^Úegí•☜Â-£}KŒ M™Ä¡Qˆð¯é}¸Ê ܧûE9Rx¼ �&+%å…@ôTq”3ù¢LQ¸[9ú×9úŽ÷.Hê„ÖxÕðãæÆ?MÉ'OÀ¹÷ï•¿øÈ˜“Ó5kD—¾2Ë«ÐXŒ#ד1on«3º$ä0‡Ly+ßÏ\}çÒ/wâu¼|º×/|RZ5Ž©Š3ïQîÂðxrO8-cn` ‡—²Ì9Ï=êìi—<ç8À‡´p™3ÐðûxæüÞ%­ç�ø~G`ûß!ý!#Ðê!J"a+øMžù-I(3<À‹Šâ^<'õQx„á‘–|UŽØvU^x¡Qx€& O^x~2AF€Òx”¨h5\"ç>ê²Êd…,968� PÇhF€ëX#0ýSC–åø�+~m/óiØéVín#Àø3ƺ~\Ó8®'×€5àÊ5æ¬Ê'ùÉûT>Ì£CxþÔµÊñ”ž'ò‰\êè æ+¹8æÿƒ\yh .� õ- €_‡py'ÀO8�‡~ÑyÿG5Wï£›æ«…ŽŸG�a<ÚP�ж� ¾/Š &ŒŒš'2§<-Å¥‡bË!À”!_äE†X_êla+­¦Ä £ð ª ³’æp–?”¢°ÁZå¬1øð÷ ðWY|ê� €Ö†9ÑéK¨ÛBÛþ¼ÛýPß2ˆ@{In�#Às½t=™7sÅû÷äÝ1Øþg7àF€{ ŸTq~ãN»8 �–ã*â™/ÌûœYIÜóH|%¯W?2hkÀ߯‰ê¥|œ  óÑ †mR™m<õ�9Ç(<­ÀÓŽÿ¨½Œ`…³é¨ßk_y„7ø¬SPr¸u;¤¥î>L7¥£ÈQàRÞV´¢¤y@;½–—|R†u)30=ù€LêU=ö «1K_E”ÅЪÿð—@8;÷é;®�äÚ1?d�y¾ @§÷heUúm“€ÿgù+ñþïelì”÷w�Uœç¥âuc€ùpgfbóÿ€‡Kš#’í¹ˆa�W�~ÕµÚá"ÞS;yJ€>ä`à}€åë‡|ÃÈh< ÀÓŒû£×ºë?Ú®åõbEÉj�Ò=ÏCî{òl2 SJ€G‰U%Í-€(7±¬ìPxým€È‚®„U�¿ (ÊŠÍJ[4[žÈ¤~\}”eë{¨¢µ~òmrÉðG­ÛKÁ£lmtˆÚ@é«-ö�дÉlòà(‡ÐÆtZý‹ç±N¾eîñû½#Ð�'W!××× ðVž‰Èê1Çì•ßï àÞê?À“U�窒·koþ™ÓÔ/ñ¤×b=/ñ‰ªÍ+àÞ€…×ç)ñÔ5€?#ñôtO F ÚDQ€ÛÔGzíèɯ½àE@œDÖ·�­xü’ G™Â' ØGy)hàø§|b¥I‹¢½¢-R¼(_”s dSeðs(ð7UÜ«(2lãTŽüYñ˜MÕV…ŒËüª³7hÎTm%Ýíøã›ø}ùeéñ»«ÈœD^æ aæ-ÊïyÃu’ÏÎךùÏA>¾ȇ~Ùú×{ÿï¾ÓV<ÿ™: 3‡Yñ#›z©�¹Ï#ÆpÊæ¿â¸Ú‚q‘ú=WÔ&vŒ5�üÔH›?.§6àhË:WÓò?_—wðg†ð8ãað2¿ŽW¯DE)¤Ql(9âQ¶Pâ8Ô —2Q�‰ÏR)?Vÿ|ÝÏ‹~øôk âŠBW¼7h[ÚäÜóã¼R Ó€êŸVýRºê•7p+½º¨^SÒä]FmçàŸ ”8axÈjùªœÞÍäÚWŠdâÌÙ¼¤ p·1 k�¡ÉS$6ÚœcòmŠ´à#@Æ0O ¬¼ÁO²2¿1pÄ©3|æ;†aøÌ™üW6UÝÞqcÎ1gäëÓ#ÈêøõM~™©Ã=—Às¹£ÓdÅû®íË8æ]èò ñØ h£HQ`Qn“�ˆqÉEå~hdO;R~6:D1ت˜«Ë½¸y‰Šû‘L(õ ŽT¯þE½ ü.O]€3Ö�DGy7Àk¬¸m­”Éh€ „tç#àk*©Ì‰„©„0Š /ªÂð{%Ø3¿0<1:ñÈ8‹ Õ?;ÿ¶�9�læ1�K8üä ?ÿ�ðCý_P[² àyG;4Ÿ˜�ìØ8UÊø©“ðœ jóåMx®Ìàíw†°ßñÝZú®ÿ»–·uGv”EÃaµSí¼ÿÕ¯7ڸч�ntúZü;Îè¤ÁRW*^èó�a<¯ëñ¦[S�”̉€þLüQÀ�V<çÚ 8ÿ׿7:p­SÈ|…O¤B­5zöª 㪌²‹Âô¹×ï/ IÙ^ ìTïéo»8úÍoÇÿñ‹÷ ŸªnŸ oš6sðTÊñƒü/ÔîsNMKAó2—Ï¢Ò„ËFô¿â �ÚŽ’¥®<;Ž÷2º¾±ek­2~µÇÏýsò9(îáî_å ¥@F °yÑÔÀ,ŠK~x(X(ÞFT>åXùøÈ o¼ æ¡æï­ü�¼wÀDá[®æ gc0qu–e¾g>%N¾üO2ÿ¡¬“×\»üõ*âƒ_þréõŸÀ`Úuó(à¿L¿/a†ð®Òh#€BØÏÖKÑaüÀ6§>‹z+ð¿”2ºÑjœ¯òT€•­ .J E¥eLz 4y)iå§:1®¤à.¥\oUï;G¿ûÝâÝÿ¸8ý C€‰#”/@ZñS)ì*�ào¨«Ý<©Í.ŬP@?«Ú½rЧ.”.¥‹/ŽþÄþ6(§öðÌÿôØŸâÈŠÑ’2ƒÎ�@æN?—àà¬ÞyÕ4”8.W†2s]Ò˜-Äý¦¤A•Ð'å Üjbõ­ëw-òZ+p {ñX™ûV“æ>2S¯Š:Ìœ@V<é™'P<óžÿ�ç¿hÀßgT¿ aýßÞaV½ÓsŸóZJˆ[Ÿâóvt)YêlçØðih)E>UÊù€•Õô´=*¹JîqúÉñi)»kŒ V9¢‡ªç˜º´íÿ^+ÿ3Œ)_ÚS@¹!úÁ8V;Î$çƒò}àÀ–êæ+j;…q(y\Ú6½Ë]¼€MúP¬C]0ˆ,�%«?xåeìüþ>°¥vAíÈ'÷˜×Ó>áÏ×#¶¼ï€{šH~<#Æj<Þ|�ùÙºøC‰§FeüÈ �@¾ÈTò—¹¡0 ìíQç×¼¼“á{‹¬ùè—îhî3�Ù!À¬þˆÂI¿ ½#˜ÿ;`7ÍßjÕ�±}¨yÿNõ�ˆó¿ÐÜöm¤^ â™S¡É².Þó“ÐÇ�a<ÞX�š0(¶ÕmHÁù,€Àøºý¹”áB‡ï0ä9#p«´[n ˆ.xSF,�c[Õ^rsª?'­o¹×)%‡Â;’¡q¤ºÎ´ú?SØ+)>VÑ~º�lU`¾e!�åÀ™ŒNlóvÀ¼2•úQöVÊRÐlßú[ëäQ;áOí£�¶Ú ¨v¡ËØ´Û‘4+f•óÊŸ¶Êû ‚” må_; ‡Òß6’hVíx€ÀN”ëQWð¤{G¦å£_~d� —/åîý܈¬Þ�˜eùÈenùœ‹€Ø¯ýÕœ¸Ö|]è–÷䯔çF�ò¦¾øé=’ç9'º4A©¡Å ü’y#o#XóþÝþ°8ÔÙŒaÅ=ÓŽ]9æs¿÷È­ÿ‰Mñ>y‡{üÀã�ù¨qà¼E(%ç“õ¡ÀÒ§ÿ¥Iã¾ögõÕÿþ¯ýµ ü-ï�H­X9 ¨ºü>s•3À"Ož“Õœ²=@¹¡èXù øO0TÇ)^+Ÿ¬üyß? �Uv”Ô€ÀÿDm;“’ŠÒc,Š<€œôz€ÏsN<\òô1|ý%Ÿ¯-tá×aæ*×ß;aˆÌ{÷ý¡(>Ú\Á?}0_í°! zLXíGi,èü¿ÁŠ üàc +@Uj@aöÒpn‡ÊØ8‰ ö÷.2ZÞ©ì |�ÂecdQú]<9j~Â(7Vßñ¾N-«÷_ÊÇ nùm¼ÙþøáÏ®›¼ñÊçú‰+Œ›ÒÄK|­i. Ÿü/ò¢)æì‘æ6†Å�æöµü•¼çoÄóÄŒxìð{Í­œ'Qæ·ûqïŸsœ/8Ààè?À.رŒìSý/xôõDub„xŽ1¯T¦úÚöÊO¸O¯qÂÃ=Í àiÆ}ÔzÏôŠàeû¥f¥•‡ïÃwêK)©+)«K�7ßð™€v.àÇhð£L sxÐ¥ªv¸çÏy€П>ñ«z¨‹v…Æ™×bV|€I€?÷ûú÷Z�Aoÿ«]P¯ÞfEÆ.Àtùò8ç�L%êT›Ô åJŸÕ¾<«þ þ.üB~èkúJÓK”U|@Ýc,~-§¨Aå>cÕòq�XÑs ·Øðœk”{öð"ƒ8®æq8rU†e=5 O2/q(™½c¾{^‘žy¨y~+ÀÜÙ)â�ì�€?žÇf9/s-š²>ŠaØæIv™ êšó‡}î÷óè+oßžÁlX•¹Å©ÅÊP¼ìäQ?ÀßÏö£ÔQÒÍ›×dH�$<G+{O«á1–¾çÞhÆ-”qv/ésÉ?ÝÃoüŒ)cžû÷ÈE~®«¯ŸòçàÔò« Â%Î»í¢¸ÈJ8~Âè'¼žŸt(Æ.ùø°]Ï™ßæRÜg8ÃÊ_ž/À:s¥²ò·šoG<Á"ï÷Bh~g'Œ�3ÞréWn ø�õ:Ñ ð?¦ŒþÔŸ]%âégOÓ—ð¯”ð&GÙal¡ïOÀ÷�á�°§ˆò€¢l8�/�ãUaŒÀŸCPWZþR€çÚ½½”"ŒG�zûTe|?ÐÇKŽïk*ÌʈxVÐUá%J›ªsimÅ+Ÿ•ª µðÿ•ÚÆc‚~µ+ý’÷[ÕFmæ.ïõVå*žWýRúqnƒÀ€UÿÊÊ€PyÆÊ>ž9¥gxƒm ÓdxlÑÚãÞ<+ôø¸XËüê;yÙ¾ç^>å/×!:]…)Ë5Kšóµ<¾ž]YÆ´Ê"ŒK¹?4yˆã’wû:>;BwyÌ£#Ï€®¹¥9…¡ËjzË“1ÿø‡ ~Vûn4ß0ly�Å^ÿ n‰Y† ¶úíYùüíÿàÿõw>}�Ÿð­ý¬ý­áôsÐÇ�a<îx¿ÙÚîû³Ï¥cýÃ�7¨i‰F rKpeUã³Rl‡RpGZ{)ÃC…Qœ}ßT Î[ü€> 5uQG§Ô¢äBQù¼Ÿ€6"ûF«{<'±ïäy ñHuŸö2Hø„ëG…?6Ê@¶b]·êç0 2øÄ+· „­M<¶x¡<ñ~Ûmü›1yn»ò?µ[Ââ—VT`7Ø*)4€\iMc¥ŸÇî ìŠü5>PMž.¤wVÿxÊs}q¾Îë¨òÔ|Éš9²m<ùBkùð q©;ñJ=×ÚœãëO°<Ë¢9Ï9ÎLgôàp+gbðÉ€?;\~™•(ÿŒ<§û1¦íÙ Pê`¾ßçÓ§M”~Ô¾ÕpŸF|¬ü…ý»aìŒW&þ#T÷jª@IôFÀ:%ƒ1˜óŠT ¸•V^ÎÃý|@:ÛãPoë‡6%G¹(&èö�_y¼)žò¡5/<\xËØ×qøÄ.£yež2×ýá Í%^ €ÃÐ?hEÃ-€øþÌ6sFyò´»b<ã�ϹŒGûÜg$�6U?÷?J_}Úà?4ÜGÀÔ=Êí¢3~(‘�NÊð˜Õ°2‘€G  Ò+†„Ò­ PlMÁ¥žJ ÷Ê‹6$JõR€nð×êþ\ÀÏ+Н1øÇz7Ào0d ø vNÙ�l5ÎO0°½Ïì°ºÕ¶ÆRé*�Àðü÷9 ][½¬ü/¤¤93`ƒFü¹u‘ö!ê1�TVJýÄòÙ{øêGŒ‚:”ü¡€yòøŒ]ŸæÙ!>}§>®kòAû-~eùR-,Ʋí¢5}.\yo×�ŒR>ùzš<•Ox“«F@ú“¹hóê^¶ú1LyOÀ©ŒE¾�q©Ã‚œð!@å3Åx$,j¯pÝòÇøÓ'ê©>ü9š|5 ÞpÏoø 7FàYŽ ¤ºªP®ŠE�ÒB‘KáñJ`¯ÔöÊ a¬¼«›©ƒäȇ¦ÂICÑâ18sø_ÄPü.;zGÁ� €kÇÊ�?’G¦Û&�lï÷–¶Úìµ0Æ)ÍÂö­)ñÝæF‡nó‡|Œ[5ÌS:óßÇÃ?ÇKÚ†nޤG�a<Ò`3ñwéÞ’¼ô5ÊŠrÁ¡ôNº¢Àñe( u\ÔF@£”­ •8n®.x.+y¬¤�Ç!Ãs­ðñŸå/øW~»â$ö�Vþ'òÆ:ÐnÀ­Œ> D›üq µÏo_S? œê>‘²æ‹‚g2*xSà;ÝZ°À¹•=åp–ÊûÝ”QÞê[LPòßêæJÂ3 6Úç©i § PüóØ÷æþþP¯ò•·7r}M•^©¢ðÀÿÖxÊ…¦ÎÄ{Ú§÷u×ü5\óU>á9×ÏUÏGÀ¸›×ð3ß¡ñί4\dÍÕSyé4`� 'OÒR¶�G>éÃ=ý àé¯ÁhÁ†¨Š"J†ì(6”K WJŽüð Q€•RvN¦N¨½ò±›ÀA«od;”ç•À~f›ú0Läy‚À·$›Wc4¸_ê ¯3f»Ÿ¸½Â1x�±þië߯@3¤©iòw9$àQµ ‡àY½C‰ã2VoÅà(–€wåðáð¡ää Çh�öØh}ô\Ïu‹ç6BKº’wÞÂß&ž²ëèºzúü}¾š¾)LZï2W+íçr�çÔ�ÿù˜GÉ©£�ß'dÀ¿�Ö<‘š:·¥”‹«áðý¾À÷�ß(½§˜û³WJ(.ŠŽx¯èPn”«Ê/á”�ŒüФ£‚¸Çz%P?—ð#ßøË_Wþóâò¿þkqõßÿ½¸“Àö>oý³' °7Oy\ê¢Í¾?«tï èh§òð¬¿_öÂýýæÙ%°a  ¿Õ�pSÊÈþg•ƒm£ðb °úøë«s'òànÀà �¯€ Ÿ¨Ò-*ï6ÐOÆÇõ•<¾V%N[rýÜ>ÒäÃo›xò¸°~R¶Ê«y*¿†kù¹p•‘ôžfÞTÚ‡©³7È3ç#?2­í'ðïãᇒ^ÃÄq¡©gú-e¶‘;òÈ`ƒ0Fौ@¯ˆãQ4¸9E·Ž—ü.X~jV¦j¶ÿYý_²òøøŸkõ-zó·¿-nu €Sÿ¨8Zâ­(ñðüò?…10XÙ“ßßø¤ñšVŸ�é´ßâB”Ǽn‰³ý� ¸:�V]Q¬KU+!Å¥´_óÆ{Õ.:µŸ±mi¼xçŠçýùlå§œ¯�âþÐÉP9dúzõ´´=cï|�Ÿ°ŠM}œË·mz/ï>Y½Üš¿Oëã}^Òqá/cëã=8'ž9Mù„C+¯†“š4è:G;ÓÖ„{P¯ñ„CS&t]=ƒÿt#0 €§ûQóG Ê(ÅP48”ZhÜ&š¼.¤Ÿ”�|¨ûiu~­Uÿ•îÏÖa>î÷_ øYñ߈.?ä?Ûþ’ß)Þ€§x@RÁÉ àÓzòaÄHØŸð_ ì¯õ8×g=Öu!Ê3Þ¼ë`ºÿ߯@"¦ºj�„qÔ“{ø¬ÒÓ>Òè/q¯Þeû�²6ö€(»¹@¹Ègµ>mõ+Œñž&d¤¾AŸÏ àù\‹Ñ’-F W&(�(°ªì¢#’r5üÄ“ù”Ǹ”Àë…1.øÜ÷¿Ò¶ÿÍ_ÿjðÇé~îù«l€Óà‰LyfJ<ùú„~|Ïùßh…!°÷§_‹ ,wºûÿW ¨õ†¸Üy �8}M:@=ÐSqÒÜô�ƒ{Î#J›I—�)õæ¾=é”õ8@[>çoa×OX—x ÏñjzÂëh_>ùj�•7ÇO:·)OM«áeÉ/e«œ¤…¦\??‡nò”¯éÈ­qÂá90ó“6$‰xõûð‡&œ4dîù�À0žß5-ºg¢XªRƒç-{)7(J¨¦ŽŠL5‰'>ê €“ÿ<çÏ£~ü»äÞ?;Úù sÇ#¾IDATúgå�÷sûÊÏŸ à3ø‰"#^A»¬Ñbh'�¶ðxॠ€OZùjÀMv¸Д²©dP—·È‹\Vð€îáó^Ú8Óv^µËV}w~€ ¸»¢–+Š£­–%­ÆgÒ§ö¶üwËi¼Iî=ñä[G#s]zø}Ÿ£s¼¾|�“7Ç[¦,“^y„3?k^æ;áu>ejzxPi¸uõ'�ôê{ ø‡ŸrÐážç ày^—¯ZµéÏùUæ-/]J«ïC@ŸîW…šáéãá›J>Ûÿ¼Üçg=Ïÿ³îýc\óbÅy¶³uð_gÜ‘ÐGÆrÃVmV8éOÀX¹¿þ^Æ çpÉÃóà”™¶Ü6HCU†•{îßcL€Òȇ\¿7¿¥M;âSGÞà^âÊ>µÁùZþžŸxòì*9ëhÆgÚ·mNæoNvx›ò“6çR6ó³Æ ‡ŸùN|Î#»çWÞ\Ýá¥ÎÄ¡ðz°‡_Ãs嫬~#0 €=\‡1ù÷0¨Döã]#Å¢#‚xu}\„Ê: §­^ôó“¶û–çQ¿íÓ΀ȟ_�?á |•¾\'wjÊN< �P^t¢zNtþ€oÜi'‚0� ú ‡JO¿‘A½1D ´‹tÒí¯îᣰ[:ù0|F@ÔåI«>òÂkq‘)ß\xŽ7µ;²Dk¾>}]Zø÷Ñ*o›¼÷埓1Ç‹œšFWÓ–œ¯ÉSçfâЄ3·“¯Æû05TÞ×5~á ¿ºÔ~â=è'½–áç;ÃØãµ†=nÝ�1ñ(9²ž£•×2|UÀÏàû±?/[ÿ?j»ÿ“ Þîw ÀoôS¡sF@5\Ÿ~ò¨W<à�£•ȉÀÇ‚0N}�ÿ�¼¿2¨[îSëWäÔ{ø¬ö‘å4�@Oœñä>¾ïñ+Îx¹­äÁSžO�oÊ—´MtSZ­g›ðœ¬Ê#Œ‹¬eìëxøÛÐ*‹ë^ã”'^ç8áÞ“¯ç¥ is®Ö“0´÷”íyÉ?'wðž×ðnG#P'~ ïHü³a¢„Pl„«‚K¸§·Âo ´ßø$#àDÆÀ±ÎÌYeóʪ¿§@_ êʶ@>àO¼êoÔÎ°ê¿øÊñ«�UwÞ&è>«õÐîñû>ñ¦¬ä´`÷}üF3f¡1R&ü©ž&“8®¦'ÞÓäéù‰÷é}¼æ› ‡·‰nJ£¾¤oNÞJ- üDNa=(˜ùØêå&žüÐ>Þíå×xdÏQxñ”éÃUÎ?ïÀó¾>϶uQ OÕÀ¾þ(¾ð¡=/ñд=q(ž7õáü¹_/Ÿø½âq?…�ÈpÀÐL¸§Õ8@€�­à¯è´ò�<Êr€�ñ vŽðªÛß P:y�¯ÉPŸsˆ/ã€Ôì¡IÛ†ªšIÑ“]<üÐÈN¼§}z•}_Þ>}.>ÇÛTGò×<5œth\Òÿš9HÙ‡Ê#¿çm£‘>ñÞSOò®®ÖŸp¥ëÂëdÀ_WW-3Â�?Ãxü15>ÒDQQ (qhUH5´ÿL¨Êå}ü¦ÄáC€9Þ÷ÕEÉ£—/®š_Bè².ê#žòUž� µÛ÷Èܽ…ßÊÐ~âNÍ£xúܧ�âÊC™‡xUµ’]<üÐÔ‘xOïKO~òÍ…ÃÛD7¥EîCó�WË/9Oÿ»®Mð3ïCim ÷e%Â=%m¸—5ÃxY×k´vÍDÍ%£àútâ½â#žWöV@ž €þ+éª4à `æ�Žø½—UËõyû´È�Œ>Þó“¾-�ÑmË’¯¯ÿ¡òÖ•ïù‰Wùá=¤½ÍÛ×Q먬‘w#0 €Ý�å�ôÒGð—›¶çGQM¾ôoÊÓò')«{ùñj_îû³õ λþ“¯ÊQ²Ý²¥âF;@6ø‹ç]Võ Ô¡ñ(Þ> /ü„{JCz^â5m.^(åîi•éLú™Ëßóz9sñÊ#Y‰:Fà­ŽÀ0Þê•ýž�€/‰œoc4~_¸æ% ÀÇÈÖæi€äƒâ"£†kš3µ'€ß|@JZ�W^Ò\¾åK¸Rª©ñ„+?áPò$|­ykØôÓóˆ÷¼ZGž‹ÃnŒÀ�/#0 €/c1Bo|&°ì5ÓÊ?ñÆc˜Öëh Ný³õ�[·@ZêîÉg@(8s¶ÿ{°¯€_ÓКP /ñ ´ëx´«Ï×óî‹Ï•_W¦æ%.¼eìëxøƒŽ#0?Ø—'çöÊíÉ´ã<ûþ´úß�>ÆóNãy§�ðð6¾…x·Jà{ð‡PCs `¹&C.�ö·" º¦y¾ (ävØ€Âm¨Ò*Èo 3æûPx÷yÚ^ó$ÞSòô¼mã}ÙMåja\Ê/c÷ÿ¾ö{ÐýxôýíÓï±Õ½¼ÕÔ{)#0 €—r¥F;mPŽl­ ô�>~\œüú׋k^¤ñ,ô2 [¥ðøô«üà…~Œ}K àŸòýJ“v­vØë«€wª“z¡Ó¶¿Ò7þ\} ø‡º¿ô¹ó´¹òj<áPò%ü=´–íÃsqxÃ�#ðm#0 €o·Qê•�À�@—Uÿñ?ØàM€ïþ¢·J HüÜãèƒxâ8 À—2Ä^K¨¬ü¯øW¿ê¤Þ…<`Û¯üÅŸüÊs9ɪÀ_ÃÄ ÇÓö><ǫ哚´Ä¡¸ðC—Üåﯦ�ð�1ß7Ãø¾ñ¥_Ñ8ÙÚœvdkàXÀ¿Ð'€2 êàŸÕ{@?C Ï€ä‹Q@þð*�QàÕ¿ûàåÀÙ°Ó΄·¥ô³´›´øuñðCûüᇒž°í'ü¹´š¯çõü#0Fàa#0 €‡�׋É]•ë.½ky»hS•±«öEÎ;�î‘ÀþD·Þ˸‘p£�]ø°¸ÿîøxùr ä%AKˆûÒ"@>»IËí€1|n L[þÌ�=¸ÓÙƒÕø‹_,Ž~ùËÅ‘ê>äL‚Î!ÜöýŽýªeˆ‡—0Wã=/é=­ùú´ïÃÄq)¿Œ}ý[Aÿ¾¼_—þšÓ˨ò¿Î}?ç­É»D6çØõxm®m¤®�a¬™ÁÓ#€žèß €øÕ¯wú й>|+ ¾ óiÞ}¤ç@‚òöÀºŠ¯g²ÐYéSð¿R�—òWø�ý;Õ{òÛß.Ž~÷»ÅÉï¿ø ð©v$Ž0>´ò¯«jø>\Ó†öa.zø=MÚ&ZÓúð\ÞpcÆ<Í àiÆ}Ôú GÀ‹càXÀ€þVŸ¾ _ȸ‘pÃy¼ p8P.@_ €Hí €•€f\i…)€¿eå¯�‡#ÿ»?þqq*úþ7¿ñŽ„wf¶þæ=øÛXhBÍÓ|Ò§O ‡†ÅÁ¯Ô‘ò“ôÂÁ1cžÉ à™\ˆÑŒç1¬i@+nõçÏ‹ ï0ĻԎ@ÀŸ•øBFùòÕ wIƒVð÷- ­ü¯þ—mëÿHõü§ÿùŸ‹3í`ŒœÊ{@J€ž6'¼Ž&Ï…c!ñJéñ¸uá¤C¿wk½Êá1cv;ÃØíxikF ‚Åš,bïC^À Ù€:@{*0æ-€×þÏZ�Ÿþûßnë¡ò¤çnxG€Œ€;ù›öñ ¾À‡ƒü •¸“\¢y¾ß·¿ÖÊÿZà~ËÖ¿è;¶ý©KÛþ¬üϸ ºŽÕžÃ-θô£ùÄ+È×pŸ–²t¶†‡Æ‘^]ËÊÿÖð:ùß*¯/·kù»–×·÷©ã¯½O=¾�Uÿ0k¤G=Ï~Pj.³càH`{"pö­�ñµ¶ýÉs®]€;  \@µ#Àm�ÜX茀Ê È-NðÛK®Ÿ$PœÇü|ºÿýûÅ[þzü±ê:ûÃgVý€ÿ‘Úað/«ÿû6”þð{JZMçb…—p. üáÆŒxù#0 €— Gv8€ÏÀ±V÷8îÉ_ ”I{' >׎À•^É€^‹ÞiGàVÆà.ô\TÙí¨àüePð6Á›æyÄïZaNûsà�Ã~Çlû+|*ƒ€•¿ €¶òÇ 9”üu€Oz@<üÐÞHœ¾¦LÂPüáÆŒx=#0 €×s-GOv4@? (™ÄïÐwlíË àå@ŸΟÿõ¯Å'yž ¸þç?7ÿø‡Wô×íVp ø8y™à'â†Ûò×Ͳò×–ÿáŸþ´8“÷�?Ý8•?‘ç@"í1ø‹àç(õÐkzøëÒÒNhÂ;Ò!fŒÀ�g8Ãx&å¹)ÜçÖž§¸LeܱVðìð&>^Œg'€-8´'ʾy¯ðµ¥¿à\· äíÈ/ïï ˆrv€ýðŽeDœjËŸCgxnH&· ¬ü+˜÷a®WåÕ8á>ž¼I«”¶ÿ×—Ï­•ï‘Y˾tùµ/Û„wÝß]ËÛ¦#Ïó�a<¿k2Zô F% 0¹ÿÎÁ@ÀŒÝïˆÏm‚3�ô¥@ÿR�^ ¼ùvÀ­€?ž[< �`¯0ßða?üi‡áDFr©�[ìM4íLžô!qhÍ“pò=ƒaM#à`NîÚhCûõ àë1œ1ÓÏœ €‡ã  } ð À/xGwÈ~Ñ#€RZ1þÌ=ß·æž–‡v 8È?«zŸæg…/O¹ð�H+ÂVOê‚Öpö„“žxOkzäAq¡ŽŒŸ1cÞÌ àÍ\êÑÑo�€#€ZAŸxï8Ð'4õÊ=àÏ—¹EÀi쀑A8Ôé%_ç“§RÂñ‘“ô¹ò}Ú²ªÍ+ó¾�#>F`ŒÀë�a¼žk9z²ãD«@«ÐMž<ª½Ñ»¸=pªö«€¡vM¾kI¸Ð9O�¡½Ðó“Þƒ?ù†#0Fàm�À0Þöõß[ï_À¤/×:hÞòƒ´¤ülíCI%œxd¤|â©‹xdFnâóÜçøÉ“²•¦Î9Ú·k.Ï.y´«ºï­ÿ¹Ë«}} á]�÷k“—Їa¼„«4Úød#€b ŽXq€;áu”²”©Fq\ä:R~’žºBðÄ®´†SfŽ–ªFpŒÀ�7<ÃxÃt}»Dã¾¼{ðO4žr ‡Fæ�îðôiKO“M8eçê¼1cÞæ àm^÷Ñ뎊PçZ>€^hd¤¾AÇŒ#À à•̃ ¯¤K;íÆCǧÏH÷<âx€Gž‡€€¿ïhê‰üM´‚<áÄCkÙ¾žMñ´a]žum_—ÿ¡ü¾þï­o×òÚŸ>ÿhO?"#þ#0 €§õQç‹�ª¸Y\À J:FáÞ'oò'�‹üJ oòûžFFd:FॎÀ˜Ëû¹rÃØÏ¸©¯xª2tè|ºžp¥•_‡'å#wŽÂ‹§lÀÞº0ù"‹ðpc^ÚŒù»ß+6 €ýŽï�þJF WDÄ+¸ÏÊŸ.×´„ï”pu©gŽVá(¼ê«Ü#ðRG óžö×ðKíÏsj÷0žÓÕm™Fà%üÑû6ÄYÍôCéXM«ñtºÊK¸RÂ5¾øk¾ÈÞ5M;ÖÉM_×¥¿t~ßÿ§îïskÏK¿¾o¥ýÃx+Wzôso#Ð+ßÿڸȫtS˜´ê«¬#0F`ŒÀºÀº‘ü1[Œ@€9Y‰ø³*\GS&és²ÂƒÖ0eÃëù‘;è�1c6�À06�ÎH#°åŒsÂõûè:ñÔ#›¼•Ÿ²á%>è�1cþ{×ßÜ´’拓âøþŸŽâ�»*àrUp@ÂKÂM¯Õ¢5^I¶,Û²Õ[µ™»;»ÛšÌŒå<Þ.¸Ø¥Ìq~Ècø0Ñçy�µ(PyhGÚUžk¨ë“©?Íç#>Sϳt{SïÅusß�vÏE¯í>çÂñØûº86¶¿J™ôr0Ìò@œKйÊ­õ˜0F`CèxÌ€u_!0fšë9/ËÔ›#`¦ à` j^cö@@·ò{˜ðT#`ŒÀ츘R\§N´ûî·ïü%`zÈò}ùVdªÍ¹íM=×-í<<×Tzm÷™ŠÃµ¯Ûücæ×~KßÏ#`Œ€è à ‡#`Œ€0ë@ÀÀ:ž³oiŒ€0F ƒ€ÿ ‡#pòwªsïrlû‡~gŸï›Ï;·ý¼ß˜¼´óŒ�wlüÚî3v_�OCÀo¦á¦«~Sˆ_º–§ÎÔ#`Ž‚€ãí�°º8Àfùo'ÿy€´#`ŒÀM¬uòiÇ1;åiFÀ#p^üAk^üý7ýx¢ÂÔÞ?Ó#W÷ÏÓF YôS=õùò~çþÎ>?œ¥Ÿ/ŸwL¾¶ûŒÝ÷ã»ý¶ `¿èf@Mgê8XüÂR?°ÔCFÀ#0�JŒÕ<Åäê׸Øv�]yuNÅA·­[cŒ€0‡"�c°yŒ{õé9¾:ê þÈwq”ìpe�‹€: Ö#`fB Çç,×¶ÙeNmÝUëü7»?^8�ö­•Nþ[�X1á[3YšÇL>Ï¡0·½yn9ÝʵÝg:›•sáv˜Ès,¦þУ®j½ßLÜê€�ÿ PœgÇœŽ±W#°R4v‚§LZ�ű¶Ê�Ê@?:�Ӳ̕ԗd?àœœojŒ€0�B€q—”Ö(gÊqSAÀ€€±'Kò¶:¥ DÂÔ#0ÆÒžä?ݰWþͰ›0ÙR:(v7Óžu�„\ãµzï”ï{èßônt¢�k»Ï¡°��رWß²Æâ˜Zæzïk_ï7ãOX©ætÏp68(�tܤg#`ŒÀ>0¾6´ÄÝX_‹É4«±›:SAÀ€€Qaé@t2L!ß¡á”ÏpL:iÅ–UFÀ#pM|íÄÞ0§2¬S&êVAÀ@”F'B#UžÆ*ÔÉ¿@åFÀ�ã pss£oZs fœ&Å!È“ç`lÕðçáÁI´c„Ž£úÌ£@PŠ8)®­åï|�µA°èûŽ=�üü}™—ï{m÷Û‚ΔKÇ#Î_â*hôsã‚ü–c2e`ÀxLiŸµ ~Ðÿäû‡N§Nø‰]+Ô~Ë1FÀ�½@ò¿½½-±6vâ¯ÈLð¤Øƒ±¼› à`†:HvÊJ·Š€¦(o_³FÀ#0ÆæöÃbm˜{Š®E€ÆçÌcwêÀ£ÑîFZéO]GP§ ÃôÑN€×RÍë)µ±R·òµ�€0ó €¸ Kü�”ÉŸT ò9nó0Ÿ•çøª¨ÿàÏã†3ð‹ëšcбjôéááᯛöõçÏŸŸã;Ç›p\ؽ�Œ­‚r�Âo¦tõ˜§Mרž}º{ûöí?ãëæõë×ÿzc·áÈ(@ÿŽ1PíáøE޹m�€qÈhÊo4óýŒ­ç3&–ŽQTˆù^öX÷éÝP޵÷±ìÊÑ�†ß^”Ý]{¬;�í}h²î³Ìû„ß¶@”|ìÝy­Ï1|Ò�óâ»þ§˜Rhÿýøñã¿c¿~ýú€ñÔ±t}1;†ª¯ýÛ3bÂÚÚê €Æé�õðàsö£ŽNš{v¼"ùòåþÝ»w_žžžnîîîî_½zõ�Øë6~q_€>>>¾@ò�ñR4…@)Àã,1¯í!£•óA¿ã0Ÿ+Éò,C4~™‡†=¶d\÷n®g>·Ï¶‹�¿g‹=ÛØÁ–ü W&wÜGøâ@�›Îÿbª$l$|ô+4þÐï =ä§Ð?‚Fð¿ÏŸ?ÿçýû÷wˆµa¾Øa¿Øªq;Ômò¯9sÑƵ1¬½Ú¶ºO:œJ3|¸�_„»pÐû7oÞ|yùòå«�‘ü_DÒÙð¥ Eß ðë¾(Å@ìѾ�t#-øgÞÔG3€@Ä‹ 8e{D¶Ðˆ ˆ¹%Iƒ²‡¾|ÂÉžI¿Ð(þ ý#è¯_¿¾ÿþ#>\ýˆ·(r,¦\öÂ~M²•üu ã%'fe?�dVvåÍuñ�L™PÉ·É7ÆÀã>)xLµþ²ÑƒjÇ\ƒL;åë��iŸ{“òLzƘ^u”M�€0çF@“ y&[PMÒàù žüc£eÇ÷ýàAµS§ó`�r¶�=xåC]ò?Ï y5 iÍ ]“)�€:uèà8µgÃ8{°¥ÑžÚA⇠P${XËäOª-›˜çfŒ€X"Œy8ãx&ݾøÉ„MZKð9¹s.hÍ®î�3d™:ÐU¶µúÐáL®t”¥£Áé˜ð¹Ž2íb=(×±`òWŠõLþjKíÞ›0F`©hÜÃG52&‚j2ÏdŸ©Žézå¹_¦a¶4èÝ7€C ɪcdç� 'Ã<¥pH6&jÊ \¬±Öð Ö°O™¶2�)nFÀ�E#ÀXJŠØÇXH õˆ‰¹3ùCO4σ¬¶`¨Çp'ÖC^esÐÿ؇렀 Çcc¢¦ÌõtpP$}v&}~â'…í°—mgsÜŒ€0çD1OeÆBP�‡”¡C¯%vMø,t×fª{‚w« à  Š: ’¬:LóPÎë ÓÁùÉ6XdÛ´OS· èÜŒ€0KB@ã(yÆDÄAå)3>’j’Ÿ ÇÚ¡m¥À&ËЭ¾¹Ø8’,D“-euðp4�b§é|:&¨&~&}~ê'…]í4œ÷Ë2ç™#`Î…bŸ6•5QgI�1SüÏù¤Ü‡çÑs¨œõ[Us°yÜpMª”•‚‡“¡éÜ�fósr§c‰‘èY0铦ö·öéÛsÝŒ€0K@1PePÄÃZŒ„N Ì£œ €<ÆKJûa¢MþÐiË²Ž­†w°ý¨áH´t¥àÑáhÚ¨GrG£ŒyHð¤àY`&ÒPµEyP6DÂÔ�¥"€ø§�2ã¢RÄFÊ൳€Ž<‹�ž6úhL)s@ÝV[Ä?€”ÿ5@@çÑä¯<œL[v4ŽA�B‰kÉ3Ù“²ˆ)½É߉è¸#pI ²‘Í� \)øÜY@¯|m÷Àþ™‡®mÈ­°2fµžsO .�2œ ­–”éh LøLðY†¾ÖÕvmïfŒ€X9^òLÔ+¯]“8ô�UG¹�r�Ú$ÏslÑ5'€±ê`Ë6 8 /hnp>&eR:™RÌã'ü1Š=`‹ö2å8¨›0FàRÐJ^©ÆLðˆ›Ô‘¯QèØuçÒ†R`ÙMp ` GA"îs8;(¶:ׂrø\ pí�¥nFÀ�‹D€q´F5n’¯%rê@•ZÃ1€Þ-!àà p&bhU®9œ�I�<×!Ñs=æ°c^.¸g…M7#`ŒÀ%#ÀZ£ÐíÒ§$~`Æ=‰_–©_]}�þŽÁDLgP]Íq˜ü±ãµä[×äÏ}H9­O¿õO#`ŒÀ²ÐxYã©#e‚‡LyÒ<‡z¥DºÜZÝÚ¿ÿ0«ýßg¯hþ÷ÀT×’/tÔ×xê2…ͬ£\Û�óûƨ75FÀ,�6áÆA•ǹU_ëœW£NçÔxèÐ0¿4'ÿ «ÐøC&p$im­ó4Ê<‡2“;×+íã>œK´¦ÓqóFÀ�¥"�ã&Ιu”Aµë\Õ׿ç¹�µq�êVÏû €¸@z €&_RÕ‘ç(;Ç2Ís1ÎÆ1Ê 5�Ž›7FÀ,�ZòÍ:ÈÔe÷ËcY&Ôç5/ÿùw+¬œq�` ÀÌœ�)ƒöñÜAdz-Žå¹”M�€0—Ž€&gÜEeò™ê<Œé¸ò˜ÇF=då�ü‰PC]$@ Žº‚‰[©òµ¹e à|ª²L½©0FàÒè$丌Ê}<îÌ1Påu ¼6Î+:ï¯ÐlxÛ˜M¥È3™¨I1NžTuº^Çksò¸®5oŒ€¸D: 9.0&ãŽ:‡<©Ž«úNsòïÀÑ .Z(¶™‹5Ø—ÐkúšNm™7FÀ\*µD]Óá~5½êÈ“V1qò¯ÂR”.ú±ÙUÀØßg®,kߨμ0FàšèKÜ}zb¡ãÊs¼¥Nþ-UÆ@–®r�7Ý…ãÒXÁ0nÁ3Œ€0—�À`¸Úà:'ÿäš!ãõÎØ¡0è]KüÇ&xÜ#på &ò±»;Ñ�!Ô?ŽšÖm"38ÞAŽ?ñØ^fŒ€X ÅÀbðRp8Ë9üàİÏðÖàÄ'övFÀ�Ó à„~œ¹‹ß‰Q;ø‰€ö6FÀ\Ž�§\.N�¹ÿ5ª3`î-�€X.Nþçy6.΃»w5FÀ#pVþ¼öq/éѰIEND®B`‚ic05 ARGB�Š Œ |Š¡mŠÑŠÿþƒ‰Ô‹ÿþ€ˆÔŒÿý}‡Ô�ÿüy†ÔŽÿûs …Ô�ÿúl „Ô�ÿø\„Ô‘ÿ̄ԑÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ñ‘ÿÐ… 6Q�TQ5 …‘ �¢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰ÀØ…Ù ÎØÙÙÃŽ›�¡¡cˆÂÙÙƒÚ ®§©ÖŲ̀  ¦¯¶w‡Â€Ú�Û ÖŠ¤›ÐÛØÓÒÑÒÓÔÂ‡Ã€Û ÜÜÛ›+%O”©Ç€Û€ÚÙÁ‡ÃÜÚÔÛ³= .n¹�ÓÜÜÛÛÚÚÁ‡ÄÜ¥™K %=|¤ÉÜÝÜÜÛÛÇÅÝ |  0w§«ÙÝÝÜÜćÅÞÑe2L€ 1Z¤�ÓÞÝÝÜćÆßßž‡¥ %N¤ØßÞÞÝŇÆßàÄ14 .qÖàßÞÞŇÈàáÝ l”€ 3>Áààß߯‡È€á>m|  23‚ÚáàßLJ Éáââo7  �3FÊááàLJ Éâ㼪| �33wØááLJ Êãã¿ —F €0IÃâáɇÊãäâʽˆ\  !- 2•Åáɇ Êääåå´·“0 1�31^·žÕʇËäåææØ¦¯g8-38Ro’µºž¨ÔʇËäåæççḪ}u�½ËÔÜáãÛØâˇËåæççèéà™ËàæééèèçæåäˇËåæçèééèÏÐåìëëêéèçæåäˇËåæçèéê€ë íììëêéèèçæåˇÎåæççèéêëìííìëêéèçæåå΢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰ÀØ…Ù ÌØÙÙÃŽ›�¡¡cˆÂÙÙƒÚ u{ÖŲ̀  ¦¯¶w‡Â€Ú�Û ×SmÐÛØÓÒÑÒÓÔ‡ÀۀܯmZp‘^»€Û€ÚÙÁ‡ÃÜÚÓÛ¿x^^n DXÓÜÜÛÛÚÚÁ‡ÄÜL{€^ kˆ‰J*šÆÜÝÜÜÛÛÇÅÝDT]ajwe^g”\}ÙÝÝÜÜćÅÞшC4cb^^`w¤DoÓÞÝÝÜćÆßß± W]^bz�fZp²ØßÞÞÝŇÆßàÉ>CV_gke^^n °ÖàßÞÞŇÈàáÝbY [€^ k‰©©Æààß߯‡È€áxZT]ak‰”¨©²ÚáàßLJÉáââwYXT\em}™”›©ªËááàLJÉâã˜0eZ^_p�Ÿ–—©©‘ØááLJÊã㣠Tx€^ p–—’‘™¢¢ÃâáɇÊãäâɳ/A`^”•�¥’x„p³áɇ Êääååƒ2m`}¨�©¢b8ÕʇËäåææÓiœp]�©©ª®´»µPŠÔʇËäåæççá”2­·ÀËÔÜáãÛØâˇËåæççèé§ VËàæééèèçæåäˇËåæçèééèÎÐåìëëêéèçæåäˇËåæçèéê€ë íììëêéèèçæåˇÎåæççèéêëìííìëêéèçæåå΢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰ÀØ…Ù ÌØÙÙÃŽ›�¡¡cˆÂÙÙƒÚ u{ÖŲ̀  ¦¯¶w‡Â€Ú�Û ×SmÐÛØÓÒÑÒÓÔ‡ÀۀܯmZp‘^»€Û€ÚÙÁ‡ÃÜÚÓÛ¿x^^n DXÓÜÜÛÛÚÚÁ‡ÄÜL{€^ kˆ‰J*šÆÜÝÜÜÛÛÇÅÝDT]ajwe^g”\}ÙÝÝÜÜćÅÞшC4cb^^`w¤DoÓÞÝÝÜćÆßß± W]^bz�fZp²ØßÞÞÝŇÆßàÉ>CV_gke^^n °ÖàßÞÞŇÈàáÝbY [€^ k‰©©Æààß߯‡È€áxZT]ak‰”¨©²ÚáàßLJÉáââwYXT\em}™”›©ªËááàLJÉâã˜0eZ^_p�Ÿ–—©©‘ØááLJÊã㣠Tx€^ p–—’‘™¢¢ÃâáɇÊãäâɳ/A`^”•�¥’x„p³áɇ Êääååƒ2m`}¨�©¢b8ÕʇËäåææÓiœp]�©©ª®´»µPŠÔʇËäåæççá”2­·ÀËÔÜáãÛØâˇËåæççèé§ VËàæééèèçæåäˇËåæçèééèÎÐåìëëêéèçæåäˇËåæçèéê€ë íììëêéèèçæåˇÎåæççèéêëìííìëêéèçæååÎÂic10þO‰PNG  IHDR+ƒsRGB®ÎéDeXIfMM*‡i   ÓÝê@IDATxì�‰vG¶lÅQ”dËînwßÿÿÂ{ŸÛ–Hpz±è ™U)Ž`äZÅ3æPÙUqj:¸½½ý�Þ jïe_³ŸA � ðzÐùVN¸^ÏÏ‘•� Þ-‡ïvϳãA � ‚@A � Þ)¼£;»‚@A � ‚@ï�ÞïoŸ=A � ‚@A �w„@ ïèÇ~ﻚçÿßû¿€ìAàåÈ1èå°ÏÌA � ð�~`m�ȉ×ÿ¸Ùµ ‚ÀA Ç¢7òCe™A �=Fà /¥Ýã_7»ö!'[ùG‚@¯�|à5þ*YSA`ÿH`ÿãw¹‡!þïògÏN� Þ)¼¹Ÿ, A ¼iRxÓ?ßþ,þöƒýA3{‚@/ˆÀíSÎ�‚ÁS¢›±ƒ@û�@ ûÿ¿ê= ñÕ?O‚@G …€‡c—žA � ðD¤ðDÀfØyBüçñI4� ö�öæ§ÌŽ� Þ>ù ÀÛÿ ßÜ„ü¿¹Ÿ, A �‡#ð¤�˜½‚cêÑIÏ ‚@xvrÀ³C¾¿>ÂIÈ“ž$Í ÿRóÎ,)¡ ‚@xÃ<åUÿ��÷¼áQYzAà‘Hà‘€|ïÃü$ù*~ßqï›ÿÞöìA l"°+9ß5osô»Ö½ÇIà.ˆñ� Þ)¼§_û‰öõÈÿcó]ÇÛ5ï‰�ͰA � ðÊØ•€ïš·ËîN�5厙BÀ–8ƒ@{�@ {ÿ?í>ù¿/ñ¾o¾A¹o¿ûæ{žÈ ‚@ØîE²µË»äï’3Bo®ß\lc¬6àˆ‚@Ø{RØûŸøévð ÈÿÁž‹Míä®}vÍ›š'þ ‚@�m|[¼ŽUõQ¿‘Ï}æbÎÙ�)lÀ#� °w¤°w?éóìÐ3’ÿ9r>±-[|4f|A � ŒÀ6Â=Ÿò{Ü‘ìûô¶ûLùʆ°Ä‚@xó¤ðæÂçß�Ÿ$ÿ,¸'Ú½=Ê™òáw�ãX•Ûò¶ÅëXу@A l#Ù£øÈ· ÉQŸÞ×ÛŒ9òm›«ÅSØ ¦$� Þ )¼™Ÿêu,ô…Èÿˆ��|=HÛr~6ÞÏ;� ÞÛˆõT¼÷÷ö6ûüm6ãõ9ÛæXÇSXC%� ðæHàÍÿ„Ï·;�ÿm„º_lŸ?g÷1�5å'þÐØ¶¾ž;2� ‚À6b=Š÷¾ÞžCµÏ�³ûØÜ¸ÄfóSØ_âA �×�@ ¯ÿ7z+ÜBþçˆöhý}~µ«NßjW½Ž{ÿTn?Wßú\_çD� ‚À~#0K’µësñ>ÖÛ¹©Xï¯ö”θ5Vç铹)ŒàŠ/� ðvHàíüV/¶ÒG ÿSĹúï«WzÍ5½¯ÚSºûZÖ<ûªÜ¯¹Ñƒ@Aàý 0"ÍuïGñÞ×Ûôï}Õ¶nYóG¾G¯­æÛ_}Uw¼É6àˆ‚@x¤ð&~¦ç_ä#’ÿq®¾‘¾«¯3êC|ÊßÇêXÖk_ûFr×¼Qßø‚@Aàm!0IˆW»1ïc÷±k®uK¦¶ÞË[-q�k{[ŽÇ¬ùMOà$q� ^5)¼êŸçe·…ü³¨žðöö(§÷Õ>#ݾ^öã`ÓœWõm¾Ö±ûSût¡µ¹KÎ:9JA ì5“äxµ×£xï«vÕ¢ÚÖ§dÍŸËY-mcìÚwNwßµL` E” ‚À«G €Wÿ=ü÷„Ù¶%;9ÒíëeŸßÛ}~o“_›ãÕWõmqrwÉ©cFA �·‰€‰õÔêçâ}lÎvÌ’ù¬?TzÍî?²klJw¿µL` E” ‚À«F €Wýó<ÿâ¶F$·÷U»êìLµ­[Ö¸}Û¤rÞ}Æpß*ë8Õo}.>sÿÈ ‚@xûTR<Ú›¹x�U�qªmݲÆíÉ‘¯öíõÞîû÷ñ‘�¯µŒDdAàõ"�Àëýmž}eOHþ+9¶nÉ~ZÉ‘ÏØ8VǨ:qçôÒcX:nÛrÊO|.æþ‘A � °¿˜0Oíá(^}Ûô>n{$G>Ö…ß1ÛHÚȿͷì¹Ù×¾|`�D” ‚ÀëD €×ù»<ûªž�üW²l}NŽbö��uË‘Ï1dÕɭͱm>â£ÜÚ/zA ¼O*q!PãÛtÇçä(V}Ug=Sö(¶ÍGœæ1—ÖêoîØ€#FAàU!�À«ú9^n13€)Â[ýÛôQŸý#Y}#°ªßàáëý#_Í·néþ¶‘#Ÿãs1çD� ‚Àþ 0$¾e÷¦âÕoÝ’îÖçd�ÝWße޹b4ÏÛë-Øœª¬�(A � ðjHàÕü/·�G$ÿì„Éð}ä(·úЫ½ë<µOÕéïfÿ®öTžý‘A � ð¾ØFtû¸mKв¾‹$§æõzo{üê·ï>²æÎéÄZË�F"2� ðz8~=KÉJ^=1ÞeyåTúœÍzj¼·kl¤×|tšó–Ö]{”ãÜm±š=� Þ&&ÑS«Ÿ‹×˜õûHr9N!½U›5MÙÄF­Žé¾S’þŽõúhì\`H`MœA �C €ƒþuL…@�[Ÿ“5†Îñ é­·�Ïü5†íf?¶ÇœÒ¯’\�ÑKb“-E€IhA <;)<;äozBøn#ݾ*çô>†}gûòå ·“¬}X‹óùô�õuNñmäb¨µ¼2æÚ×¢«øJïcÅÝTÏÙûc� ‚À~!PÉv¿g»ÄZwǯ:W¹Ö/..ÐëFzµçtr9.õ9øiŽ-­Ýÿ2žûŽ$#‘s§¥p’8‚@/‚@ /û›œ”½ÛH·¯JôÞf û«¬þC‘þÃÏŸ?7âÿñãÇ󳳃›››Céë"Ä]¾ Û󫃫õ¹Í×"ú3Sècîâ}³‚@ï �!Ù‚Bð+"-¿ÄÖöåå%ú­åéééíb±¸Á7(´\b?±©kkËÚ:Vö” ǹS’¾>6Þ3E€)hãA <)<Ö¯n&Ä;.j*Ïþ‘ÄWýS¶ýk ùÿôédÿP'@GÚONN¼5ßÿQ1À¯£ØkBoÒoé\ãRüÍÕÛÎHïû WA ¼!îÙÑÚ ©ßwþõXö[^]]ÝJ¿‘¼¡ ãÞ�Ž7*Ðç¦+´Â€üĶmäºqlå÷qÛHòûcš}½t>Ò}ÈY7í#Çñ ß:%� ž�žâ7?�àÞÛs’X�ÛžòÕ¸Éÿѯ¿þzñWAàH�»Ž®¯¯MÂ���7ŠX$ñºõ>Û½ô¸øiÛìeVûëý*®¨A � °ÇLXzö]d¾AP}EocØFŠäßÞè˜wóýûwÖnnt¬ƒü_sG€s4(Çú{›*àç:çµ9e�šÇÅèçøÜ1¯æ�Æi>íGŠ“è$‚@xZRxZ|_íè|bqî;’øªß¶%ÓZJïvå_'=GºàHw¬7�Bô!ç½dàêGg³d;6’øhci-ÿŽ|5^ô6±£� ‚ÀÛ@`Ž,¯÷.»6Š‚_ǯµ§æY¯Rîv€®øK½†û_ëX�¿V1ü@wÜȾU!à`uWóšøs¬©6º×e}©n[ãx¾m’Áœ³1°ö=E€ Db� ž�žç·: íÚz›˜}HëöÛ·³ÔsÿÜúßnû—Þ :Ù9V!àX'@GøâÏ�p6])¹S p I®‹¶¯ãXGº9ß¶d¯Øku�»ŽE A �·�€ ûÄž˜p�o)}¾mK’¬sÕ_ú5…nžýWãŽ7Š:þ]«Àñ§‘oî ‡î+_-X÷z�Þˆ=´µ¹»ÎöÍÉ®ËSû›"À8¢� ž�žæ×5 ܬ¨ïƒmßH·ï^R':\ý?äê¿Î�(«p¬£ctÍ)uIø+©¯:'KÕf_ñÕ­úzÝ6Ò�¾Ö«œòל•>ì?È‹+� ^ÈìÖw%áa_‡°]Àé~–«DNn[€Ëÿ:6¯ã`+r+öA>îà.Ž'õNLü’µy}Ö‰÷�»OQ€ü6ÿJJ,‹;Jò7ûÃÎo8c� ‚À“!�À“Aû:^�8üÌâz"[môŸÞ¸ê¡�öÌ¿¤Éÿ‰T�S�´Gt~ÄE’5Ñ—ƒà»ÀŽê¼b#†]ý#Ÿ›ó§lû«ìûÔXô ‚@x;ÀO·­¶æ@ö«M_¿ÖcÔXÕõ¾€kÙÜûÅ1D} üèÿA:�ð•Ža š”>%='²'ÿ•ôS¨¶Ì�ã¶ã©¤õ‘Ü:û¢}¦oZA <1)<1ÀoxxÔÙ…ªÛ®>ôj“Ó7çLIN@xóÿ?þñ�cm§l_¿~=ÕKuñ¿µ�:ù9âĈ€I>’b~ûÐÙXÄÈWãµ_]´ûÛ×Ûö¯ä¶ý¾K #fA ¼ ðЦŸÌ¡¿Ž9ë!úñ°)Ðjl¥ó²¿+ü¶éÿ+¶¿ÿþûêüüß5/ TÿÖäã‹×¼,�X÷HÇ$ÒKÖîõ['otg€óÞhø}Ì«º“ìsrí#Ç~ç7) RØ@$FAàiHàip}«£ú€>µþ>>²ñÝgkÄß}xþÿŸÿüçÉÿüÏÿœýûßÿþ¤/œýòË/Ÿäÿ¤¯|Ñ?1yçdÁä©1«mûm›¼÷þ>î<ü´Þ^z§ýŽ[Nõw<2� ^'ðQ3¶.޼Q’þÿ¿áwžØ{K×ñl'&?„þJr]@±¿ta@dŸØ¥ä%E�ÿþ÷¿—þ÷ÿ÷RÓq n„~U@çøX¥çEöº}äO5Æs¿šƒ�m¤»OÍYf¯þjý)l #� ðø¤ðø˜¾Õ}@î×o/�‡ßÛÈçX/7ˆ¿:6›Oþ‰ôŸªp¦;>ÿöÛo¿È÷E€_´}Ñm�§�j~äê„ÁWü™g}Û¿uäù¯9½ŽíƼÖçä®ysc$‚@σÀÏ�ü~…úÿ¿In ylx­sI©6~ú)—«ûÔ®¤^6EÄ÷Q/)ˆô«p±øë¯¿Ø.t\\¨�p¡ŽOÔ8(rGÀ�î›kÇ]õkRñZÀ‡íu!ÙLü9&÷>¹†Íc0&:’6§¯yØ­­ŽéÓîÈ ‚@x$Rx$ ÷l”§v‹ø(§÷ÛÞ&] h/ÿÓÿÝú¦í‹Š¿ŠÿÕÕÿ¯:™ùªg!ÏtbÄùÁšð뼩Ù�}õ?;BžwȺeÙî[eí_ýу@Aàõ# ãéÿ÷ß!ñu �»âŒå¾«¡Ö¿ãžÓ>'Ùž£åqP×>ÌæxÀÈ ‚@¸)ܯ}Íö�ºß?û-Gqb}¼ú¬WiÂ�Ïz“ºÂ$²Ïsÿg\ù‡øë€¿KþCW:~וŽO:'àÜ �‡®­õEg�½¬¾]uòjó˜Õwýgûßg®ŸÍÆ?;Dú� ^=&éýBážöéÿÝVw’S侎#½ Z}«µˆïÿ(@þÙ¸ü¯F!àB¤ÿo'¿éÿÓ|fàPþ=p«¯å\SPŒwä@Ôù××Ü  Úëçi_%1ï(’�8ëR×6úT#Ÿy,ɳ>’Ä��¾nç�ÕÚ%� ~�~Âw5@#Ø{LÌ)Öçd#îÊ]K} '"ûŸtÒòE'5¿Büåû§NlþÐö™±uR°�VüRuƱ*4ã¶ûí"û¹véóšsRxÍ¿NÖ‚ÀÏ"0Eþõÿò­CÃK�4ʯc;nI_ëγ-)î¾,(ñow¬ŠÎu•ÿTcœ(Εÿ#ù—ÿRÇJn!àXx£±˜¨½l@ý¼\d‹¯ëý�miò�¤qŒ¶Þƒ?ôclšuË‘Ï1ädÓ¾þl2+� ‚@¸)Ü­ýÌõÛ{gÛÒ~KüÞì«Ò±)¹&û«q6lÏ#]á8Չ̙®üVàWm¿kû—üÿÖIÎÏÏ :­óɼ[hÎÕŸUß꺣ï’s§Ó9–°îÑeW‚@B@ÿo¿ƒÃÈw'i¢oÍó8–tq|@ø[ȹŠS¸”l�¨àí"À%_Ûwýùòѱ¿åE€:6^*÷BÇÏöù@ Úˆ¿ žºJyޛ։{�øLø-‰“?jîGÝyÖ-ék}N’·Ñ8Æ #ú¤� ‚À# �À#€¸çCø`nYw_¿wn•}öùÇñ?Ò�þ3�Ôðý?žýÿ]'7­ ó€_9Xͱ–ŧвé|�xÚO °„ú'H× ‚À+C ç’½]—;s^Ÿc{Nö±Uq€7Rð­ÿ�øS  ö·úBþ•w«ãåµ6®ü/tœ¤8p¥"A;.*÷`¥óf@/Õ’œJþñ›ø£›lÛW%q7yÛÈê³nYãö!·6ŽñÚ÷�r·–„ ‚À;G €wþà vߤ»�„hü]e+èÄy¬+üÛäVÇ�ÒÏ$?iû¢šõulÅê< ¥=K˜Ÿb䌂@xZzþØÛÌ>òyUs±Ú×y#‰�ÿ�ÖºŽm|©æZòRq;—ï[1¹ÒyQãÿ+=w¥;å®ô®Ü«?þøãRÇÊC>HÁ€;ôÜÿ•Þ@>È'!ólõ˜i?­më.`;¯Þ!Ð:®þ�صUŸu$�\û°íG_7á’"À�(A �‡#�ÀñÛÇž>`ÏIbs¸8>¥ûÊ?yè¶)èdˆ—5‰ÎÆ@iA � ž�JÎûyæb}î.6ÄŸ�f)•c^;.j¾#BâõrÝ~�<™çî¸O�|‘ÿëPUøÄ7EôúRÀâï¿ÿ^¨pñÿ÷‹ùgªv|^ÙõXMŒ†Ï»’qô¾ÀZk>}Ãý�Ø´mºûÔüeÏÕ_a’"À"1‚@÷G €ûc¶O=|�ÝeŸvÉ%ÇcZI“~ÇÚ �NfTh¤�A�Ö±Ó‚@A ü,S„~ÊÏ|s±¹õè¶Wg±ÛñPs²)tTÈÿWÿ•ûQäŸ÷ã\ëXiB­´ÃcÝp¦+ÿ窜ó©@™ßÿüóÏö¥nyl@cÞHÞp�tß u}¼®džõT{Šü�ŠŒ9j^3±9�x;Xåa·&lR0‘A � �À@{g]|f·{»n5§ú§ôFúëÜÀÕŠ.0hZA �çB@³óO[Èýƽ¿Ø>^Rhk¹o>åÜèJÿÙª ³}‡<›ÓSÏDþ¿éªÿ7޹+€= p«G®Uà-ƒ7ôW€1yœ€"kÃvó*ùw¬d˜ô÷’¾äÔV‰>þjW½Æú1êxíí¿°áŒ‚@;!�ÀN0½‹¤zðg‡«ÝëÕ68øì·néñl÷Ò…€�Ûþ9qmœ¥� ‚@øYL²GãLŦü£1æ|ðׇåÇ1±Ým bÏ»4e»+àV¤þZ^Ý~�ÅNW…ø¨8çvíe�*´—ÊÅ ¹êÍ`H$ÖÇmt±ñoAý1éöݽtÜù–øëÁ»ÚÖG’þô#¶ÑØ€ØpÆA �­¤°¢w—PÐSºA!îmäsçl•¾€“oØÿòüÅžÈ ‚@��Çš‡pÌQ|[üí¸ÇN­´G\áçÊ¿Iù­È<ÇÒ#ù9‡ãe¹g*|–ÿLyÇôÕ•~Þ¥s«@ûR€ ŠÁøñSD�ª7 êNÅF_ hñÁ~BÖ‘>Þº¬]&øvTÛúH:ÿŽÔ¾¦p•8‚@ó¤0�O¢›ôÞÑ)?ñ>ÖÛë«ÿÊEo'@õö�05ƒ¹áS³‚@AàAp,s6Š�|Îß&™k4>�Ëão�þF„åã%€í-€H�Í�ÙÈ¿\ å¶ÏêVþ3¥ikŸ ”}­G.!ÿ"ü'*p¯;S O~ÕÚ»˜�¶Ë�ÕÄŸ|“Ö„¾­™à;¯ÚÖç¤û­%˜i_è“‚@; �À ½ƒ”þ€_íª÷P«qëöÏIN|2ã¼õW8âä¤úɉ«õîØA � î…Ç’9¹->7ÙÔ¸øëƲ9®q`k„Î/Ÿu¾ Àƹ·óóÉ?né¿Ò±òJ’ÇÍ[È¿žùoä_ïø.ò¢±xv`ã  ù_ ¯á6ÚFÞFdi˜ø“gò¿­�‡1ÁÙŽUé¼I fS;2Ù)� ‚À;E €wúÃk·w=PƒPŸ‹]}Õ¶~¹.prâmŽü³¨}l:‡ÙÇÝÊ>� Þdz§}çØG"cT½t†çº‰Óñ@{±Ÿ$·õs{ÿ…®ú_ˆô_è3�¿üòËŸüã�?.‡Ëýj—ü‘ÿJ/<ÔcW*p×)>v£Óv9(¹À±âζín|¥¶VmëHk°Û~ôuá6Œ­“¢� ‚@«"†w‚Ç-»ZãU§›mKUíª»¾~«Wþ7t»×_à¨ß<©%ñí»åìÈ ‚@��€ŽEw­¾ª×DüÞð×<ë–î'›ãÇGŽŸVw |P=@5€ãSÎTø¬ÀB¤ž›”z{ðõë×3ݰX~)ðb¡O.(èS� Æ‘ŸG®•ãc¹%á] ˜ø»`{×þž“±zÝ WÿƸ+\œ·‹‚@KrÀ;ù—ÀAqbW§ü¤÷±9Û1¤7Oi{N¶B')uó‘A � ^ :NÝ{)ôé·:ˆÇt±Î׎�+’‹ ñ¸äŸÜ#Ú(Àü‚$îøüù3€s‘þïß¾};W�àû_ýÕŠº à†;´ñ^€ö¥#X­�c7­?†/½?þ$äÿ¾…úy¾‘ŽÏ�¼j7?û+,îøÝ)2� ðÞHà}þ ðÁu—½ŸÊ­~ëU¢{cëU6Ò¯ØZê˜=ü ¤� ‚@xíTîYõ]Ö]ó­#­¯Æðq´}!@¤ßE€v€ryÀò²¿È°úÀÿOT8Ñÿ[�œêÅ€¼°ouåÿF&dÿF0�\ËwŸ¯Я'üÛ}@ÕÉ�k=ñ'—ý˜óoŒ—"À1‚@¤°Ç~wس¹œ>Vmë½dJ|÷ÞtâÒ®r0z•èiA � ^ :NÍ.e.N¬n d»êC’ãcûZÀjÒöÅÞ™£v Ñ—~&"ïEñž^ˆ�@#ÿ 诛nô(À•È>_ °þL w< À¼.TÉtÌIÜ›‹ÄÜ|.áõW½úGºÇi +ç¬ýQ‚@ï�Þ÷¿X+ #qû-G>Ç�sºãHNÖ’“�¼Ü¹ €Éˆ±©aÖvÇQƒÑƒ@A <5•kV�ym#ëÖ¯ÉyîSmçr ”ߟ ”*C7ÈÏN±9PÊ×lIÈÿ'‘yäñ*ò««ÿWz€¯œ«pÌS’Ä>(•G<휬$»’~_õ·ìÇ»«ú=6>Çz_?îÚðX;¢� ‚@^¸ïÿ8øuûØÛ]¸™S9Õo}N›ÚLü‰[‡øo�/Žóë‘A � ^;=ïìí©õ“ç�œªËlw¸/ÇxµFpU<çª÷­<ÇKÈÿ‰ì�"ò—"ô—’g²9Þ~Pî�¾pÍ‹Eþ/ã‘€KbÊå�­€½*Ì‘è>f»FÇð‘�)Ý¿ÆñaWI®›c¶×Rûœ"À�(A �å·dƒC¨Y£1òõ1çì"Éé7üM׉N»ÊßKOŒ$¦V]у@A <;�óÚ¶Ù5�ü~«95æã^9ú@Ø¡+ý>Æšü_Ëw£íZ„�wp—Ý /øÓ»ÚÎõn€o_ßÊ´Bþsªm‚ðãò)øßßòïõo×y•üã«öÔÍfÚ÷~�³} A ì+ëÿÙïëf¿~ °>ðî:�ûÁzŒ±2FA �)¦ø(þº¹¿x{áþöê ýãÀEuœ[ø9þòì?Øn!ýô¡¿á??;ãuú2ÀÅo¿ývñÇ\×-ÿ4Õ.ÛÝ%p¥í@� ðb@Rvm¾úï|ÛµÀ1¿ÚÎí¥‰;ûUIÿȦ¯ó7Æ)l #�÷Š@ ïõ—¿ß~›ÌÓ �ö3²Ï6ç;�ÈÇqÛó-gÏß ‚@oþ®ÍÅò·õ[åúxÉ¡sý¥éª �¨À»Äý?_p3€ˆ}«|ýúuY¸¸ç_\èå€ }1yù×fòݰßÓ{rï"ã8¶k ÎáuŒ$yÞâ @„ÑÿFRŒ ‚Àž#�ÀžÿÀ3»çdMùæâÎßE’³uÓq™ƒsÛ˜½. zA �÷ˆÀˆ·ŠÏnVÇÌv'€�ŸÊi$ö¯¦GþOtçÿÇOŠ_jkä_·ÿ~ùò壮ôŸ‹ôGê.�ïþùç!�(ÿF.ˆ³É??ÁèøŒÏäžœ¾1F_ص@ß~Nûªôœäâßh)lÀ#�wˆ@ ïðG„]®`ës²Æ¬³ ô;›OZV±@*-� Þ:6RßËÑΓSÛÊnÇYŠnk1~^ øY�˜¨R�Í‹ìŸ~ûö�¯*÷ƒˆ?ï¸RŸFþË£?&ðDÛ¥Éÿznué}ÛGY{Ï_Éõ1ö&H8Õ„Ç?Ò‚@ûŽ@ ûþ oß?,�ÙÛö÷²æYÉêëuì�MÇãÙ;tÌnë°Ä@·�ãyƒ'‚@Aà�!Àñkî¶-VŽƒ>ÖúØØÈ®H¼ g&ÿ\ùL|à#wˆì+tz,?_¸ù믿®ä[`j;P!€÷0/€D{“:ÙÈicJšx»àõîr'}�?Ò=69#]îe^)ŒÈ Þ)¼«Ÿ{ç�åÀY·ÚÑ^|#Ý>÷w^ïwüŽÔIo)n…€Ö¹\ÅÀN A � ðVù‘ÏûGÌqKÇ,‹Ÿcêš»(Ï×q¾ÙoÄ[1l®ôsGÀ™ülÇ8¹ò¯Þè1€+ݰ�ë\sðbÁ6¥òýN/¡ÊeRõ,×T¯ô»P}ôÀÏú]À×·õþ)Г|ï?}ªÞ�ÑlíOŠCdâ A`ŸH`ŸÝûíÛè€íˆyÃWsGzŸëû'¥N0Lü›´�¤yA‘A � ö÷ÖÄŸýÄv«z“ͱ²‘äÕ±³é:„Šß��/�—røQäþR~¶3È?q®üó½ }*P„Ÿ—òÂ@ßUÀnËã?Ç?ˆ¹õág�ø!ûýñ½·§¶¶OÅa»Ê^cR}M)ÜA%Ž ö�öù×}Ú}«gtÛ–ÌÞûmï"Ÿvõ=� ‚À+@`DæG>–Zý#]\¶í¤凨xY äŸBÀµäµˆÿµÈ<òŒ1!ÿ"ö�üëÖÿs PÞ±bGÊãÊ¿Ç5éG1ßDsžÃ¾ê�mòïB€szÛþ*=îr§WE%àÇWeíwG×þ¥p•8‚@ØWRØ×_öyöË]Ïfi�XoWŸcUr’³¾€ä]›Žá»¦&/<;ù÷ùì�ïÕ„•ðíÕŽegfðïÞK:UŸtx¬ÉùzL|«¼v^ùÙ™?Ò­þ7"ü·òÝ�#²®[þÏuûÿù§OŸ.ôe€óß~ûíâ?ÿùÏùj>îà»�—ºC€þ—zqà�Þ°žoG¥èbé¶K€ÜZ¨¤Ÿ‚Þ®ùèëxÂÀc­ýQ‚@û†@ ûö‹>ýþô »·ë ú¶7çÙ¶\“'D� ‚@x�rÝ–·Í&i—œ]öÕ\Õ’>U÷ø˜ÓM¤¢ëc-wýS@ê&€#Þp¦"€øÿ§/âú—ÜÀÐ*|é_Ⱦá_ˆø_èk‹¿ÿþû‚±WE&ò§LJÂ�æã}%ûD]€„;¶kàÇèwI-�çuÝ!ûÂ)E€Šdô ö�öòg}ö�òÁ”‰«nÛ{/ÌvÍm>�”pðmþ^ºsdA �÷ˆÄ�V¥õ]ð€üÓ}• ßõ˺inùñÿÌ 5v#â ~þüù£8ÿ¹¶ï"ûçÿýïuÁq»«@Eò×ä5ÅÁü&÷w‚r0ñJüÛ9Á(¹óѷϵ¯Jw«XØG±$E€5Q‚@ØGRØÇ_õé÷©?À2cõ¡WÛ+êý¶�k»]™ “N>ó‘A � ^�éJÆ{».¸�U»êu<÷·Yuâµ/6qû,I#æ¦+ÿ­ ø‘ôöI@=ûÿIqÞÀs‡0}(ü­«þ§"üíS�ÄU ¸QþÕªàa*+ùwÀò>cšðÓǺ¥}H°À¿Ñ´_)l #�}B €}ú5Ÿ~_êICÕ=sïÃöædï[Û:Y¹sð#Ó‚@A ¼&Ä×Dü¹ÖeâÏ|èÕÞ¶†þxŠ ßõ#²?jkWéå—û�/œê±€�"ûè�ü3�ž¸Ñ£WºC`!7¯˜šþÉ» $GE€]Ïz’ï~ö{øGúzY ±vD A ì )ìÉù »áƒh�jä«ñª“ëÍþjW=„ßE� ‚À›C@äqƒ”cÓ*Ÿìs¶ídíë±F>ÇêœE÷•í¶ ü^L_ãµ;C~\ÇÚ>ŠÜŸé*ÿG}ìFÔy7€ Wª ,xy úRh_  ÿL[‚±™Ñ6ñ'bIþ}î`,Ïa�mïShÜ„�ñ'Ä‚@xƒ¤ð´X²¤£©û¶·Q>¾¿£ë$_kèÕ¶?2� ‚ÀK!`Òü˜óÏ�©ã`› iÝs�|ŽY’Ãø«†b2ÜtÅ�í€U<²*ÒÏ‹!ù|pMþuõÿJï¸àÆùù¬à%óLLºWﯾc«WÿY‹ ?:ÍriÍÿõþ9Ëv•Ž!›Ø�6Ú¯aìNrA �7€@ oàGzá%îrÀ%g”g/Ù%û†ºŽµ!þ “‚@¯qÄ51¯: ¯vÕûØ}v>Úo»ôgþUkÊÊ®:áCù�õR@> p�Ô\Wú4àAÞ(ýJ·þó€sÝð�b�BGÄYWW€<·ñA‘ëzåŸ.¶Ý']×;��>’“ƒ)Ì"”`o �ÞÒ¯õú×êƒì¶•Ö<ëHëÛú'¾§¬NF÷tï²[Aàçxïÿ}@,¦�ßÜ÷��ò{_o³þÞ×ÛÝGïãÑl{<Ù -cH6rŠâÿAd²‹~Ù—}#› bá¿Ð ÏuÀù—/_.~ùå—‹ÿüç?íS€Jç=—HÝ5p¥î8У^Æ}¥‰? ç®þà»Oó?Æ‘ÿêg\çoÌ!sÎIz{]äm4wüI1‚@¯�^ùô—Ç�snó.ùkÙ|œxô[MŠ‚@Aࡈõ®sêŠÿwýs‘ÿó¿þúë»ÞÐúª@ƒ™ü3î¨�Î œWÉ›WÆ·î¼]$ka®‘tÇm7¹Â¥³ˆ‚@x#¤ðF~¨=[f=À[·îªOH†Á8ƒ@A ܹÖcŽ,Oåà¯ýª]u&¨vÕCŽÆêsɵڷêε�ñF ¿cÊmI«¹ù ÏüÓ­= »}%@Äþ“r—9U8ÖÜðMäÿo‘ÕŽù×]7ÿïÿý?¾x¢>^ì’°3N%þUg­sÍ„Ÿë½t É:î�}á“;@'-�7‰@ oòg{ÑEs0œÛî³8à-é[õ�±|b²áŒ‚@Aà'0ùe“å~8çÔ8¾jÓ§÷õö(§úvͧ­Î¿‹¾ìµ\§uKæf+íPäòÛ6ÅÚWDö?ªÐȼ|�ü‹ìŸêŽ€3]ü?mÌŸÊ�šî¸Q1àJ� ,dR˜jwH¶G¾Jþ+ñßXø`ÆrÎH·Ïs’;Ò×CkßSX£%�·„@ oé×Ú�µúlY÷ªùtÓ¨ëÄÔš9¥;72� ‚À}(Ç—a7â•hW»êtîí: 1Ú®c‘;7q7�i‰¿êÇkp?¤|í¶ÿ>GýY° íkÊÍ?ä��þO* ðhŸlä_Ń®ôÂÀ…\¼ð¾çœ&à,Íݤ¿—K@ÉÜlƒ¸Ç c¤Û×÷Ù±X+¼œ_"Qƒ@¯�ûþÏøõîIVöZà ;·õëôAÛrç„cuÒ±öE A � ðÔ@€i•8{N“ã)ÿ(?žç©±Ú·êäÔÖ�E̾)éñê¼ôöO²ì×X¸ˆiã„x$àDÄþ£x>ÄÿR€�•üëêÿÕçÏŸºúN®ú\Òq¢m#ÑŽ�îàÇrA ¾?·`ûFº}žÏãѧ÷µ˜ö ¼†1wŽ A ¼&RxM¿ÆûY‹¾#iß N>ÖF” ‚@Ï„€¸]›©çwø«¯ÚU§sµÑiµos¬þô¹Syµ:yέ²êÎóú1<÷*.ÑöѲí÷5f#ÿ’׫íJE€k½ý¿ÝÀ•¾ÈWô€s=ðMý8ßl•ƒ~^Ù�gÇL¤«Dow¬úÖ"€šü÷ç ôë} Qýž‡<ûG’~“ �„…ÇšÌK � ðHà5ü YÃ:†ŽØ91†'tiA �·ˆÀSÿÿkŽ¿1÷\| Ï©~u_x¤ÜmÜ ÐÞ  ;ÎuÅÿB¤â®"Àů¿þzþ?ÿó?íS€Ê½¤>ÀÝ’—×××Wzqà�êÓUcBw€0:;âB>Zo/½Ë¿&ùöÙÞ&É}@Ñþ cž$2� ðHà5ü ¯w OÁ=æ”lhèêøëE'+ A � °#â‡k2^»à§ÁÑk^µíïe«òÏ^w?ül"àë®u¯ÅAb´®?N¶V`<ÅýŽ^¨»ÿ?_ˆàCò¯™K…€�R/ô^€…¾ °Ð×TX\è%�‹?ÿüóêÀ˜sŸ ô¼È; ce³H¸csEúÔ¶�ü›Ü37ÍöÒÒ_a�"À�(A ¼VRx­¿Ìþ­ËíýÛ³ìQA !`’ #_m•¤÷ù½]sëszí³"ékòÏíü.0—×Vûxlǰ¥ÐÏR®V�­×ñRÀ�º àÓŠü+õæƒü¿üòË©®ö‹ÿŸŸ‹üŸóx€Èë+?� @¨çÈ?ӛأ�c�S ÷)xLÆáÇIç8n»Ip†ôK A ¼JRx•?ËÞ-jóŒgyPe'í_K3­×8',Õ¿we‡‚@A`?l¤{´wÄÜàŒØ5d;¹K«yU_‘ø6„×±MªO{L`µF>à"ïXß "À'=À;Ú© Èþ(¢ÿMüÿ›Ú±Š�üë.€…!þÛÈý.»kòï±Lþ-·�aÂOžõ^:†ä¼óC‹@'-�W‰@ ¯ògÙ«Eý8»Ù}·Òg÷Ñ“‚@Aà Xä;dÞSV"nŸû`£OÙ½¿«·oäÃO£@óœHÛ–öAø‹MýµAð!ÀÈcm|%€¯ðnºÊ–y|J@ä_¼ÿtý©@È¿î¸Ò¸ åRØåø?Êa²VP�4!wÀùÄÛZWÒq™­9�œ^·ÏcéË‘`V ¬�Q‚@¯�^Á�ðJ—àƒ_]ÞÈWã½>Ê·oJöcÄA � ð¦Ü áØ}ƒ+⯹#Ûœ²æ�Æê}ØîkÝãc£CðݰiÎAÖ;œ¿* Èüq€æ¹ÕX홑 8ã3�T”×&Q¿Fþå¿TQ€—n¼ °M¾ûÈ8„ž±-ém½'ûÄúÁ$ŸØH·I£¿õæèÿ XôþØA �—D €—D¿çî¬ìíÈ7‹‚Ž›÷î3;`‚A � žqÀ â=5uÍCßfoã•Ľ1'ºÇ¬:>š%EëU¢¯ ~€ûµo�ÈÙnû×;Öwˆä/ÄýO•ÓÈ¿æ¿ÑÕÿ+ÝpÉ“òs>:wN ‰î‰tµ­WÂϺ\�KŒ|ŒcÿH·Ïó)½5úô¾e@;§ýÆ–]ó7� ð¼ÌýÏöyW’Ù^;> >t�µ¿õ‘l>+{è|é‚@AàÙßÛ Û,ß¶G$ÏýݯÚöÝ—O:ß’q¬{mU«q¸Ú_‹FÝ~ì¯b'+·ù_ñè¿Æá+M'&›þ]éÖÿFþ) ¬úñ@m&ÍÈ£ètâ­°°ò»€‰ø.às›úQÏ1¯Ûþ‘ô˜C HÚo�5̉3� ð\¤ð\HïÏ<ç¶ýÙÓì 'BiA � @Àäx4j.úÈ®¾:政æLñOûëœöÕþÒ7puNôU\œÿ¨½@6/<ÖX7"øííþºà‚ÛýÙøL Š¿ÿþûÅüÑÈ¿ úBàåRÛ_ЋVŸd޾M‘êZ �m¤Û¨(à˜I~oÛ?%É®IX¤`4#ƒ@xQRxQø3yA � °@‚'ˆó½v¯Žƒ^md¿åCç­ý:>U`¸(a™"À™8ƒ@xJRxJt3ö£3|wüœ?Ì ”XA �—B nÖ0eãŸk:֭ãJtoëÄ*žk$ñÙÏðU÷zð£×†-âßœ%†ÝvlUàºÉ<<ÉÇþ¨çû?‹üT¿FÌeßèêÿ• Xh;ßR¨Ë¨ú@WkP°~ÖfÂ_w¦êŒWÇq úœ¤¯›sm¯¥ö9E€5Q‚@xRx”3GA � °·@x§ˆ2;ÝÇG@8gJÖ>äÔmÛ•Ô{�½ÏózçÙ®Ò¹ÈÚ ù,‰iœF É•ÿTRâðXy'’g*\‰ü_Q ]›Ôkžù_èêÿ9��/ÿÔ Í6Æô]°ÎN¸€¯êØu'Møñ[ßE’?Ù„IŠ“è$‚Àc#�Àc#šñ^5œ€¤� ð0Þû?s„èaˆ¦×[B€ÿ/ùo€ù§þÜum^¿%ø[GNm"ë�÷�Ÿ«Î¹ÒÛÖ~$Mr}àe æ H â$ûšB€|×äŠð_èêÿ…ž¸øüùsûÀ¯¿þzñÇ\W.Ÿ d»ä jÚ�ä|Ôj€¸m$m½æN'fÂ_uû¶I÷An4pSëÝÈ�‚@øRøôÒ7� ‚@x7Àe§8Zëí9�œ»M29Þú1Ý¿÷�löÃûR¥Èu#ûøÐGsás³Ž$ŸÑ·î¸ó%åj·úkŠ[¾ÐBês¬­½@Ÿü,R¿€Ý«µ¯üãÿ8é_諈…¾°ÐK›üóÏ??(ÏS0`+(¬?»$öØl&û«´�"@½  êäÒwDÔ·‘÷ñzl{þ  ¬Q‚@O€@ Oj†|||‚ðø#gÄ ‚@»#Àñèg8ÚèxÆxwJŽVHnݼ.�1êãǪ�Î6"þø=}Ñݬ�ˆñÑ¡mòqµ{MþGcpSÀ ïПtuÿR9×Únå?ÐEþõdÀy»3àï¿ÿ>ño·%H¿UÀÄùǼÀ„½'ý?2–q~K"£1—=~ŒMkØ&ÝÏy¶›¹`‘A <6)<6¢/� ‚@Øk ¼â¥wö±÷o³ûœ?’ø¼õýªí¾Õ×ëýÚ«�Îæ"}ÓR_mÇíCâ¿qG�B ÆV ¼`}·öëå&ë‡* Ëþ(îÿMÿODøqµE¨(p£WüÙ·^ý—¹nË�X›kŤ½­IÞQÀÅrîþðË¡<Î6I¶ÇŽ'ã˜è»¿m“üŒç†Ÿc2z�U�¸oÿ¯új<¥Ü*ÞVüPd�ÛüÛ';¹o·ýËOaàHï8Ñc§*œêÖ �üóxÀ·oß®»D*Šü3½Û��ZzLƱæÈ?sÖÜeïÍ¿ÛÈ¿û³†‘¾­ÐiA �GF €G4Ã� ‚@ï‘´;…çÞ×Ûb4êm²öµÎÞæø"±QÜ~¯Ó6Rä¼õéû9×óZŽˆ?1·•¾þJ€Æ½—G´+ÞÒÛ#Êã–~‰eQ@üÿŒ€®ô¯É¿Öv«bÀ•ü—êÇùìú%ž¯ÈžHW»êt©E/Þ² ¹¡2†s¬ÏI:“ßÏ�ÝpÖŽ(A �G@ €G1C<>«âþÆÀ:nØ1‚@A ¼4›îËÑ|<ëûy¬9IÌý²ïÌÙÏË8ö›ÄãÍãµwóš8v»¿ûÚ·²ˆk.™í�Æ�Ùî.€èò)@�@ö[A@}>é®>Ø®üË¾Ñ ¯õXŸ ¼�›óÙÑg“m“»Å|eŸ“Œ6¾¤‹ä O�€˜œ›Ì;õ�lÆvs®íµl@PZAà‘Hà‘€Ì0A � ‚ÀûD@$mƒTÏÙ} ÄðÑàyŽ÷²%”?Ľ÷Î*sÕ�Žæ™Hˆ:ãW¿çƒ‡;×>çZ’Ã4ç“ÞU™Ku%�WqÈÿ‘úžèŠÿGI®ìs•ÿ#cɾÑÝ&ÿçºýÿ»b' - b@IDATˆ—i“idÕéj²O!À:‹´MŽ}—Ù³Ï>Çw‘?FhÂ#w p‰+�‡!�ÀÃpK¯WŠ'iï�üþï÷·Ž=Ï¿¯ŸCÙ„ñçFyºÞÛ~ß§Z?óî26ySktl$wÛ¨:W»‘vüèži2ï>HÏkÝ1÷ÃÖØ2—ûÚÉæ'Gc±†U.:w\k §ºÒÏ# ’ ‘þ‹OŸ>]üòË/‹¯_¿^üñÇL¡^QPÛÑJ^ª`ÀðsÍ…ç@þ}7>ÛH·QQ€˜ ÕíÛ&ݹÑIxôëÜȉ‚@Ø�vA)9A � ‚À»FÀ¤õ1AèÇ´=%™›˜·Ç\‹Ç2Ç4ñ÷\^qoîƒ$^%:ÅÆ©º}½lIm˜`0îà…�¼'€q¸#€BÀ™ Ÿõ5€Ë_ýUÜÎóá·ß~;Õc Ú†Îö×_è«v(°æõVÉ>1 áŽ�Šôõmäß}èO³½´ôWx¤°F#JE €‡"—~A � ‚À»B’k‚ü\;>7'1o]OOæûùˆ{ˆvŸÏ¼Äݪ>ëÉ?¶Ç•Ô&ÿÈ6Œr¸à”ÇTø¬;®”ËÝ�ùò…¯œ‹ôÓÎEúÙÚU|¹y©àB½Zsõ›Ø{wzIn_j?�ïÂÀ6é¾Î³Ý$àh¿=æF,FA`RØ¥ä� ‚@Aà€øšç¡×m´ ÇG±)ŸÇw|d{–}?ÍÒcYšìcWÝù– 3ä–¯ ×俚 |€[üMÖU8RA€O~ù׿é¥��ü뎀…wýD ¦šm&ÿ빕]}CÒ¾Òîøœ$Ýßy«!–0„�s6b1‚@ÛH`B‰� ‚@A`…€¸×š˜?(uüª×¹ð{«~tü»´)þØûm3n%ÿö{ιy+ñ·ÞK�ù×<�üËÇÎ@°) ‹ÈŸŠØŸiî=ЪŠÁÿOdŸÒTÀnäŸÇøT ìKåQØ¥�„l·1%M¼]p>qǦæ!Nþœ¤¯sz»5°ÛæszdA`�@ k(¢� ‚@Aàé€Ïš³õ:³NÅð“?jøûXo÷ýê�ĸK uîЭÿ׊-äç%�[ßÈÚ&ó×+ý.TßD׿6áǰ>'É«Eì; ¼VØÜ‰Å‚@˜B €)dâA � ‚Àxê’“‚Oàò|Hoý4økëmÇF뮾ª»’«ÿÛîpß©¹WÄ~ãQûV}¸úߦ•Mã%€ì3/„0Ÿ2‡î v$ß©¶�²?i;•¯sõ¹QAàZw,T ‡ó]�qjÃöÖûm»O%üÎ|ø6Áw¯å¸X&óÎc¼êÙ?Fù‘[}Maâõ݉Ç‚@èH G$vA � ^q¹ua¡ê£¥÷æ8ö}›¹£%ý­[âózðU?1Z�›xµ—Ë¿ö‹”·‚^t÷‘Þ¾°Š7b»ê#qÀýþÜù?ÑUþ�²ÏøÜŸä)ciœlgggç*|W H«my&î+þôsÀ: »€Ï�~ýR}Öw‘s(FûÍ8iA �­¤°¢$� `8ùJ A <�·þÿ�§âWàRÇ®¶1#Žn»Ç¿ú§ô¾Ï”íµô’+ñøúm4k ¯®Åy+bß̪+_é?ú­ú7ÉØÊoWñqj=Ž%¹í¿=ßÏíþz @ÛDþŸ?^üòË/‹þóŸ (8ðÍ@^ x¹’zMÀÕ�6/¯—S¤ºèc›|tÚ¨(€ß„¿êöUI¼6Àć L„Ñd|Ø)Î Þ%)¼ËŸ=;‚@A <&â_�¤zÌ9Û1K÷±ÄO3Ÿ«yèÞœ�tŸ^¯9½îñí·='‰y£Ÿu÷ñX^³×J\¤»…GkµÏE�‘ÔJkàðRÀCÙ8Ž ÷2×/ ùÿ$ßv¯9™ôöëׯ§2ú*@Ûôµ€…¾p¡—ès�|&ÐKGÎU»‰±™è“Oƒ|ãƒøW½Ï£ïˆ¨ãs I«>ìêÇÞh`&ÎA ��:@b� ‚@A`ðÐm\k”3åó|uLriøÐm;×>û-ˆôü#‰Ï~ƶmÙÏׯ§'õä;DZêÄt«»ú¯9ÛûÈW_ '<ÀWt'Àg®WäŸ9t'À©Hÿ…ž 8ñ?çkº[ ,7€JœM´¾6ü=¡w|ŠüOÝ à~ž—±G„¿÷ÑÏës_�ÕölÖŽ(A ��:@b� ‚@Aà!@X{îU}#½ú˜›VÇ©9èÎi‰«?öMÉšÛëÌUç³ÞK÷s~/‰{~çNÙö�ˆ¿}–Œ…¾šO]Û•îö©@bØŠ·;DþÏDü¯” !o· ¨0pôéÓ§S}à›¶ŽþüóOˆùÝpóßÿþ—GêgM°I¹Oƒx»0’&ù£1+Ñ÷ü½¯'öÃñVøô¹£9ã Aà"�À;üѳËA � ‚ÀÏ# ¢µAœqŸs,Gýˆ¹A|«íüÞçü]$cö­ú¬W‰>·y¼®^2ŸI½%>çmñ[#þ«ÜæS|7ò}Ôv­+û7²ù—}¤»Nô2ÀSmH™Ç \žÐ�WʹԸ<ÏPÝd®¯¼£�šA‘?0êgýYƒÇ±^%¹Ž£›ö?� ‘‰3�òo � ‚@�ˆ€¸×da`[Œe˜t{IîƒôVcøhSÒ¹#ÙÏUmë–î�=Úˆ�Öà5/Ççxl÷)_¿3�ùÔ¿í¨rÚÕ{ùy €«ÿbÎiùL`#ÿË¥pWÀ‰ÿGx<€¯´¾zGÀÍ—/_®þú믅r.”__°�`/W§®™øã¶ŽœÊwwæsÎHï×C®}U÷xM §6‰‚¤�A � ‚@x VÈiߦüÎsÜÒ~$>7�]}Ω¾ª»¯%16�eÿ”¬yÖ‘ÞÜ϶sì·ô¼^[/áâ,é7¥—„ŸµÒWc>Wûé{#’��îü‡üCü?!q3ŽúÝè¹ÿ+Õ.õÈÀ…r9n_ ®Öÿ ½½Ìÿ5ñ'jòϼè}ó¸&ñþá{?ýœÓ�1kƒ…°òx³¹ � ð>Hà}üÎÙË ‚@Aà‰Ç’kü4ó/ç�¤—æ\Ûu tÛ}¼·û<ÇG’9ûy«mÝy–ŒeÝ9øêÜuÍ÷žð;×’þΫ:qõmä©ùéw?Iß ÀãGÊ᥀—ºÒ&ò©í„ñÔíF¾+½ p¡·ÿ_Èÿ}Kò\‹ ã6E¬Müù`òor_ûŽ|Äí÷øØè–Îéãøï4°¯;�8‚@x—¤ð.öìô[E@Çð·ºô¬;� ðnàÿÝ»ò¯úÿùÚ§úÑ{p«Ï`�|Žõ²ÎG¬Ú½ŽÝoô©óY·¬qû,+é'¯Ú+]©K‘Í(ó­|�ä².ÙÜ!p$y,»‘]ñçÓ€ ¤^¸Ð#‹ß~ûíâßÿþ÷‚9•ÏgÙ(\±©h#LóAØré�ÿëb€ Îîmû‘&ûöÙ®’ØTAÀýÖ¼„CÃg팂À»D €wù³g§ƒ@A �׎€8[[¢y›m¯Û¾*­;¯Jb¯ú§ôš‹nÛz•ŒaÛk@Z'nÝr@ôIkm³oBrD÷Pä�;(ÜJ§ p¢í#_ Pà³ÅH~»5_…€S™ }€›úTà‚¯ê%�Ü)ðaU0ñŸ’^úHš|#ý8ÀCŠuìQA€¸çª¹`Ÿ"À"1‚ÀûD €÷ù»g¯ƒ@A �W€€8ÙšTO-§æ ³ÕfÛÒ±Þ¶NBàûV}&ø½ÔUóºå¾ïÚìºë&ð$ô:c3žc¶�gé±,ñ+÷PÛ­t/ <–ñå‘€SmgúÀB6ä¿í¬úò™@ñþs‘~Ú¹ |*°-ûFrý©ÀÍ ­´ýÁïí‡w©±C&üHÆ«¾eÖö¿ôcŽ‘to¯�œ�¦}M`‘Aàý!�ÀûûͳÇA � ‚ÀGÒËæVu|½í¼]¤Èñ�´ê³Ždƒ¬¯È÷�b†×ÑK& O%úÖûXµë8îo©Ø�Æ@˜`·«Þê�Ïw\jÍÜæßv’€ŠG«À·óóóïºâϧナ· ó €¯Úãþ<ÖîÍÀ"ÏãXö#9ßqlô9YÇpnõ50„�ÇÞˆÅA`ÿH`ÿãìaA � ðÊïÜ Ë½Ý/—ø¨á¯±Þ®}ˆíÊûFyøì·ÞKæsŽ×U×dŸ×eòŽ�N_z›¾Î·ôx²MþÛcãHcYGòIÀSMs&#óꋲ¢»Nu»¿ž8!¯�­«þ7ºàZ6ï¨Wÿ­³ìû´zÅŸ9|GÀøÇý1² ?ëU:Óãl%÷ì»pØšç�#ƒ@ØRØŸß2{‚@A ¼aÄÉ6Vßó3âu«ÉöWú”¿ÏÙýüÎÁ?·9éù‘¶›Rþ˜ÌÛ5eÛoɘÖWcËÕîàK¼€IÍVîG­ûF„žõËüñ©@ÝæÏã<.Юüóx€î¸æS�rñAH?ãÝ—ü÷$ÛE µ¾ À…|SÍ„Ÿ¸uKûÜ—uzÞª;Þ$ÀçmÄb� °¿¤°¿¿mö,� ‚@xeˆs­¯�{i#1ün#žFÜ›ó,§ü5>ÓqKr¯e] ú¨Á»™gêê?qbî�¬>û•c²±å.ðŽ_ùW×C>ÈÕþ�"û|*ðT¾¶8ùoô2À+Þ ;.äç|yô‚ƒ6óŒöiåÅXs±™ü��Y ²Œå<ë¿õÍ^3–pK`Ÿ„‚À>"�À>þªÙ§ ‚@Aà]!®[¿óÄv!ü}¿‘=W ¿Îü´^6çà�Èöº@¸ÚŒaÛÒ>æ”Î-ýôo¤–�Rq |àD}>Šø/Tà*?�З¯\鎀K]ý¿Pü\±Q²=* 0LmÛHy-Ô~S:ã-wêáǶßóÙÇ8UÇÞh`#,Üo##�ýC €ýûM³GOˆ€Ž‘O8z†A � 0F€ãÏÜ6îõ¸^8¢y¢u¤HsÛD”×ñ:s=vV½æT�qÓͶ¥Ç@Ú§uÈ\9�ÍÐè´•Ï$—0Ÿ à=ÇÒyÉs.¸êϧõRÀÅ—/_.~ýõ×Å¿þõ¯‹Uœ—òõ$ŸÔk®´~h3qçNt¶;?Õ}µ]%±Jü«î~k ‚þiA ì9)ìùœÝ A � ^'â\CÂü:W»\±nu¶ê³NöÑÛ}ö‹>µÙFšôWI.먾Þ^�ÑåN�CŹ‚ÏËx<€¯œêŠ?Ÿ üD@ä¢O»ýí·ßNñyÓû.u—ÀB/\è«J`sá«Ig„I7ÒÄßÅÛ£î&ûŽõ6~û�4¯ÍöÒ»ú+lSØ@$FØORØÏß5{‚@A ¼# ÆÞžb·+©·.bÜHw•Žõk`m»6ÆèómÏIˆØ^ Èzi€¸#à„ê€OŠ5ò/«(v¨‚À©ˆþ7qÿïºC€O¶qTà«<`Ò¾ ð>n²Mþz€} ßiîë1±ÑçdĹ՗"À1‚Àþ!�Àþý¦ïv�8†×Žw Dv<� Þ >v-yèô²§ŽoôÛÖw[œYncŒ>‰î7çxO¼¾]ÖàuŒrí3Á'×ú6¹ê Ù•Ú¿º¬ïpQ€À©ö‡/ð©¿F¢•Nî±^x"ò¯›Nør¤œÛþot'ÀµìK™÷ý< CÐL⫎�‚€‰½%9£fÂOÌz•îãqˆÍ6pÒo¹5ov�ƒ@x•¤ð*–,ê¾,�ç÷í•ü ‚@oŽ{lÏÍÑLð!þ&Ñ.8Ö¯ÉkÝé©ãyõ{^Ƴ>%éGŒ5i�"ëzy^¡e1@‚+ý7Êãnû_¾QPoùWƒð‹ÿŸž(†N7¾p£;®x\@ýxIà}ßhrmÉîÔ» ë¾úoIÎTcœJðÑ{Ÿû:†]uÇ›l;Úÿ˜1‚@x‹¤ðµ¬y 6ìA � ^3·Ê«è;êÿÔǺ^t¶QŸãõ7Øe}ô›Êëý&üÌa½—ô±¯äÉÅnyþ¿‘_òV¹�ü‹çsÙÿH„¿=€TN»ò¯~7zÀµ®þ·O’§ñGŸ„€×�e`Óz¹ôþ(`ßç.òÓ'EÖ=Ï$ѧãTÓ>çN€)pâo�Þè—e/ÐA7P� ‚@xÓ@>!¿ÛÚ¶<âlOÕXc¿Aø½.Çêü^Ó¶uÑw.gã€ùiÖ-É·Žd|åBì›”ÍUþæGj#¶¾ò/ýXäŸG˜GÝxáß•ÞÐÈ¿b§ŠMè²­�~xŸäØÞ6qëH“Ëêëuì�6àµáŒ‚À›E €7ûÓeá#tŒ¹ã Ï‚@þý= Ì™ä…Èùÿ<ðü÷ÿ”Í�ßÿ¿{ÊçØC×J¿Ñ÷˜–F¬_‹ýUnË™ŠCè™�ùÑ‘äZ·TŽÜ›„Ÿù=®òÚ”w+BámÿëV í|Yú%›^Ø>èÏþóŸÿ\0–b|6°mèljÚ�Ú6RmâÏÉ Åò—�Ñh?|µ€×v•ø§ Ä6à�͆3Fo�ÞäÏö¾ÍÁ{Ô|ÐÅâ A � ðÜp\šâHs±ŸYçܸ�}œì÷ ÛûPuì:Չݷ™ÈOõóøHçŽ|ŽõRãBøÑÖ~ŠÈIÞ–<ÞðQÏüŸé}Ÿ?}ú¹Ç¿¾Ñöáëׯ'z,@¸”X\*¶ÐKß¿?Ôçya`]zµbbmâ¿k!Àdßóö6~û<¿×eÛ}›ž)l #¼MRx›¿Û»_µê@¯ ŽOámm×¼¹qvãg�—ìK¿?Õg½Ïñº™ß›}•&ã£þÞÏ*�¿«\õ…äB²ùÌßä^w€·úSà3�—Ú®åã�~ýõ×Ý@ï?¿ÐûŽ”Û®`ÈÇcý?ŠÞíVï£O-Xïól“oRßû«Ò9îCl£ “6‰Þ)¼½ßìݯxu€~÷8€ ‚@x�pœ‚>e»Ï=nŽöÁ>d¯W_Ýwæèê8èSãØßË]É?yZ¿º·ý¡´—úAîñKÞPÐ]—²¹Íß?0_8Ô;NEôuÁÿû‰t¥7ò¯;èÇ'§È:ã¬ÇbgcÔ;ЧÆõ0Œ] =º}#é~HçV¿AŠˆÄo �ÞÖïõnW«cMÛwËw Dv<� Þ¯ ĵ�|5>¥÷ýz›~ø³õkglûªD÷6š¿_Wo�úÌùLèû�kYózŸcU®öDîZdËl¶?Ø®üë1€F„I„íó™@N$�d¶CWýot'Àµ —‡"ÀCÿ�ZAAÒïÜR®Éf¢O‚õ*ÝÑc›mÂ4E€Y„ ¯�^ïo“•� ‚@oˆ§ÉòCw££·ë¸Ä£�ÖlßHâóÆüÎñz�ÖûØCÖë±j_û î"ì-4ò9ÞKåBüÛ‹ÿèŒ.�›Gn´ÝŠØ_£kÚ­\ù—ͧOã‹èíGà–®T¸¤F ±6^Àjíº5çÊgIޝþ›üûêÿ®?:c8׺¥ç@ÒÈ#F«úÒ³ú«}O`‘Aàm �ÀÛø�Þå*u\y—û��A �ýA€c™Iï}÷ªïÛÛ£ñ~öØ9Z+¾:·s�Ö½–Þöz,û¼Þïøœ4y¯9uë5o¤Û‡dÝê×N1¯Û}l#{ݶs-Y;Û¨Ñg*6Ê·¯ïSmx¸ïئ;¾ê™åN®ð»(ÀKþ*qnw (ù‡ôTþÖ&�¯\é=—Ú.x4€;ªd¿fto áæKûMüô¾w0ãùÇðØ&ÿ–äMéÄ6š°H`‘Aàu#�Àëþ}²º ð®à„+-�׉À[ÿïsŠœîŠö.ûß9sÔgÊ?µÖÑÚF¾©þ»øë:ѧ¶~,ÖáµXö9{*Þçc÷¹s¶I>ýFúʧ!Ö¤¿é}®ºsÞ¬å6ÞLN{@œÿ¤_äÿ’ÛþÏÎÎ.?þ¼Ð׿ÿþû‚»”Çc¼@�¯ ð A=)pÕ"P);·Z ع“k€~¶«ÄŸ"(¤�=C €=ûA³;A � ‚ÀË `9š}.æ|rh&ÄöOIòçÆõxô¯z?žç³t|dOùì·ô–u�Skqß©¸Ç"¯ÏÙfW2_s­;>%™[¹í꿈û‘T^ Ø*¬GWùOeŸé–ÿ >‹ä_ŠÜ_ÿë_ÿ’zóA…€S}`!}¡w\j[è=)°8øûï¿]à€_xߊ8k¡ °k3Ùw~oã·Ióšl/½«¿à#,†±�ÄA ¼()¼(ü™<� ‚@Ø'Ä�¶øšcÝrW,ú|ìQ«þª;wНMùéGljséù�ÖGq|µyîÚÇqb#ï3‘w?¤sj¬êŽOHÈÿúE�ZWñÛŒ-›ÀG>é®ò_ÿòË/PÐX8oô%ÞÐÈ¿ÖÚ¾ IìèÓ§O'"þ\ò?ÑÇýõW{±Ÿì[>¨±w!ìÞíñ½Iüý~÷™’&úÄ­ÏÉ:ë¸ó<´ßwüµcô ^�^ûÌ‚@A ì)â@wŠÕWõmÔܪ»>·ªÛ÷3Ò<ÉVÇ·Ï9Ûæ©}k®û?4ÎX£¾&ôž«ÚU¯ý=N/É×:úP$ß/ TÚD›wÜ*‡G®•×>(?ñ#ùØNtgÀß*P8h?˜®úߨp-ûR¹sWÿGdzäó].&ºç¢OÕ=>ožÛ¶¥s‘äx#n_Sº?Ûâ]ú†É£Öû«]‹Ö§¤Æ†Ðª{k¼ = ÿ¡ül¼ ‘Ý Ð˜¿|íS�²OØ`þ¿]ù×�·º+ }-@.ÎÇç £]«$Lø-é7†Èfóx­[ÚçŒIŒVõ¥gõŒ„�ó6b1‚@x9Rx9ì3sA � °çˆmé)¿Û®œ©ŽUû3No{쟑¬Ëã¢Û¶Ž¤Y:i}o�ÊŸ¾ MªuüšdBoßœí1FŸÖÅ�¤!–ŸÔ�íÊ¿|­2 ?�4Ò¬|bp~Èÿ©$çÜ�ü«ß�ný¿–ÿR}òk/�µm$Úñz€‹?þa�FÞôµµ¯\Ö=ö$ÑßbÓ)lB+¼8)¼øO�� ‚@ûŒ€8К³ŸÛì»ô!§¶Þ&V}&Úµ�õ³î5`W�>αô8–u^ûœ;Š‘³-îq�ScÉþ Î�ÚÚ”mÿH²ùÛK¥·G˜S>ÞЪ²i±ç�cÈ¿¶�ºÚ&ûd5ý�ìk.õìÿOh ÎÇ�Vñ^0¦c&ãU¢·Âªc-´‚…ü?v~•4#Ïÿ�<�É¿%ݧô;CkßS¸ƒJAàåHàå°ÏÌAàÙÐ1øÙçÌ„A �×€ÀSÿÿÏdõ5ìëC×pŸ} L«õ'§b_u¯ÓýF1rwþHNõunŸ²íï¥Ö ×r_V…€õ~á—�"„Mšé£ù[1€uȾ÷¿Ò».ÏÎÎú2Àåׯ_úT wÐÿЏ6ú ù” ?HJßêî€3½øï³ˆýÕ¯¿þz-ÒOûðåË—IݰXè³€ÿ…>x¨»ÚÕ} «Æõ}?~ü%!Çfë¯úCÞ{Ÿ\“�|šÇ¯ääës[çúG˜äN€ Hô ðB¤ðBÀgÚ ‚@A ¼u ¾�á©FÌqKrçÈþ¶1§æšó×¹É3ywŸj;×Ò1KüÖ-!ÿÒyD@B/Ðg%Úãçmÿ|% Ý âÀšü³½ðøòòò‚M_ ¸ùWúQ#ÿ¤ªÐr/éØÁ'Æxä²Íå*¼n›Ý’ë–øhØ4÷]Zú+ìRX£%¼ )¼ î™5� ‚@÷FòiòLçÞ¾÷€ƒuüA¸¹Èanú¨�ãäÔuV‡<·)¿ã÷•uN÷í}¶EÜÛ;,É·NŽõ*Éé§ùGø¹ýV™ç�ã€õ§•Ç×ä;ÑÅÿï"þ|1ðH¹ \È¿îàŠ?„_½ú/sÝLº×Ž�R‰?Å€]‹ UÉ¿çê}=á'¯÷¥šiAàHàÁÏÔA � ‚@؆¤sD°·õ{Šx%æUg®©5šX[:oÊöºûñíˆô\µ/ä[„|íª¶ó{Ÿí‘TŸvŠGŒ+ †hó™@ªg"ö�üËn/$¦nGtëÿ±äšüsÕ_äÿJ©—Êc¡Sä_¡u39_;¤@ÂMø-‰Wû>í±WgÏ=ŠmŒ V`°áŒ‚À³ �À³ÀœI‚@A � pÄ“ÖĺêŒTmt·)Ýñ]eågèwJ¯ã:·J�g_‡¾½=å«óìª{Î>¿÷Û6Á'ßúÉà;ùWàF㱩k»Òï+ù�øâ×á?†ü«aCÊ?på_�\« p©;xIàùßF¤‰S@0á·”kgÒÎþ1Ž¥ûö¾êïuìuÓ¾¦°F#Jx>Rx>¬3SA � vF@ühMþwîô‰&îSCß–C_ö‡V‰~ÕûXK~¤?ž»ΤÞþj�tû&ä’ékWÅýo•Õd#ÉRoØ_}°hä_äžò‚Àc|¬ƒ<=p­Gx\à‚˜Üë·z­¤®6?nPB·Þ“G–?Ê�BÀ2óîßJôݧ÷yž»½'<Úç&°‰;<)<²7� ‚@D@¼hƒTo³8ͽºA^Y­êuünÎEzýöÕþU§ï6ÛãßGzÞQ“yǪ=Òí«rµßMuàÛûy¾¿½Pc\‡µöy@]éçÓ�‰×8¼ðïZ_ ¸T`¡9Nµq¾Þ“|Æê}rÝiäµÂÂ*R‹¬Éw˜Ôß 8k½E·Ï’.S:±�Úï†ÍF FO‚@ Ok ctŒâ A � ðÆ€³m;®Õ8zí3¥C��ìûBU×1êÛÇ«m¢O?û{©õʵ,t ô}°•sCA`5'í.¥·óq® þ*\~þüù’ÏþöÛo‹üã<Àû ®ÈYmôUê�Ú©v€>èm-’äcÏ5r|2c}$ƒ6÷5Ï«>t܃�lb£9Üg$ûqF9•°ïmÏiéx/‰÷¾b÷Ÿ ä<\Ë»åN�+=p¦[þDò¯%yd ÝAðõëW¾p©"À‚€¾°Ð;.õÉÀéº"Àô´$âÄ{¢ùvaݶÔÙFžÉ}/éhŸu$}î4a—"ÀTâ��@ ��iF A � ‚À«BÀÄu´((mJŽúMù¦æÂÏøŽ[·ôüŽ�ì)ßÔZêØS9ö×yñU»�øõ—¯²Ï«6CjkWý%¹eÀDÿ5üK®%[sÎÙÙÙ‰øþM_8ÒÖníù¿eÓÛóôÄß}*ùwŽpŽ%s1–›í‘$‡Üº>÷­¾6–ö7E€†Dþ�§C €§Ã6#� ‚@AàÙwZÏ5¥¯žXaþ~ &ãHñês¾}^boãùœo¹KŽs‘&ëöõ¶××Kçm‘<Àt(f$½]Ù·Okåñžû¿‚ù+�mù\�úèÑ>ø]Û±®ú«[ëƒî à.]ÀK·¼C°˜�ä»°K€aü�޾è#é¼~=Î'¾nÂ7E€5Q‚Àã#�Àãcšƒ@A � „dÙ„¹2òUÂ^uúõö”ÏsŒò›“ýºªm]ä»Ý`ÉxŽMÉU®ÂË·ÿcÓmµi½·ºàJâFw@”ù'_þCùÚ§UP�਑nruûÿ�(ÿg?è«ý½ÔÐk’�Þ7“z“ù)I¿¶nI÷éÇZÛ&kG”  � Ê ‚@A �ýD.&NÖvnJß¶çôõù«úGö}|äîÒ*©'¿ÚU7–ŽMI ¥ÔFþÛ˜Ú7À„ló&ÿöy@Ékù×�h, À§WbIþõŠ€[>¨;(ð’À]¾ ´5 Gwƒh×+ÿ}ÀÄÝù#ÉäÍI÷svÕoÀÀcÃ#�ŸF €Ÿ†0� ‚@Aàí#`®5%fÅåÖ„Þã÷>lñ‘ÞÇZr÷§öíB;›žÛªm½'úäNÅÈ]í3;xˆ®»ü•ÎS˜··’Ø­ I>±ö©@1>xL>ó@þEü¯uWÀ%䟘ÜSŸ€@÷$ºÚèm\ÉQ ­y“¸Ó<–‰ü6yg€9 €Ï\NbA Ü�î‡W²ƒ@A � ð&€HÖÖÛÄž’[1Ÿ7æBg>¯Ãz/½®>?ÍùKë‡Ýû¿¯ñ^¿è�¾Õöšð[wܲö±o•Ë—d¶¯hÉknÛ*"óÄÈ;R¤ÿDòT�ü½ð�+ÿ¼/`¡íBsp>ßßÀÀl½_®�¶^ÀÊ[‹¬ÃwlþcZŽMû}é~žÛýðßiÚïî Gx8)<»ôÜCtŒÙýÊ.½òï÷½üÒãý,Dbœox&øQÿÿ#lþ�Z²ë#IÜù½¾‹MÎÏ4ÖT›mzbUŸ‹¯ò”².ˆpé]dÀ/[»{{¢a©4b,}uÅ¿‘xůtÕÿŠÛþ?}útùåË—+½ðòŸÿü'�0Þ_\Iˆ»jWÚß§¹@tÀp!­·ñíBþ+ÙŸÒk£m8c� ð Rxlé‚@A � Ð# žÖ»ÖÅbp8K­÷²�a›ÿ‘kÛzs<âŸ~Üj�ôJè«î\û°­[®|\6nà+Ç"ò<ÐH¯ôö™@nû‡Õ‹èÓxd@¡›*œè�—ò-æ[� }2ðRŸ <Ћ©�»?�#?$9ÿÚ\`=Ž�Šî³K1€\æ2±÷Úl{¬&…KŠˆÄC €‡á–^τŴ ‚@Aàí!À1ÜÇq$¾—ìÕ}|ä{ëHσþ­¯ÚU7‰gΪ;§÷Ùv‰�}‘—ÙÞ Àÿc|ÄÔôhÀµâŸøL Š¼,ÞÞ ý@w‹ï_¨ îq!ÒÄçé,òˆ®6wbEŒÍŸüÚì¯Än¼‡˜ÏczÍë5�ö÷Ž�%�­¤°¢$� ‚@A lC@Ül�2ÒñÁÝzI'ûªn’æ¾Ö‘5†=Õœ7ïý}~µMâݧÚΫ>ë–äX·Ô¾ÉÝÈ?ÏPh$—«ûjnU¸Ò yù_#ÿÄèÇ{ÎÎÎøL xÿù‰ˆÿ‘ wð€Ä²* )ùW…�NøZ€6¾Ø¯;nT¸VìR¹Û^È’ûÆIß òopzI9öcÓ웓ä¹y³Mûœ"À,B �iR˜Æ&‘ ‚@A �{"¡¥�¤ û}%ã¹ÏœNì1š×î±zÛäÝñjWÝýì³´‰oµo|! nÉu1@ž+ø°|È÷�®îƒmkêëOŠ÷šüó~]ý‡ü_iã%�ŒqßÖq“_õ·4q÷ø&ú¶‘öÍIç3žç®ºãM€psÞF,FÓ¤0�M"¯ŽiA � ‚ÀÛD@\Í$÷A’½öUÇG3´Ýœ?ñ§§·ÚdÞÓTÛù#1û-5d–ÛöMî:„pó–¿cŒU€é”ÖZ#ÿ �h;V¼�ù×3ÿ<*À# bê³~ ¬äÙ›}Uš\#Û'c¬«’ÿÿÏÞ™hÇ�#kZ’奪«oß~ÿ—œ™îª²­mþ/’*2.™’mI8{RIã#[óœÈ¯Aëo‚D¡6…ª•:ûôÀ>�¼öèÿÚ»Øýët:�Ž@G@ðÿlC‚N¢~ ÄÞ¶Ï<ó�¹]ècKµ¯´ý)¹ÞΞõ2ßød˜³“^ ÀbB'ßbÅ„(’¡•ø’Nlñ—ý½î´ýÿV;¾«~•Œùþ–GrÂO*]wxQÀ|læ ¾Ö’Ëñ1‡?ñO<?÷õ‰¼�ŽÀazà0M½ñìþ'¾ñAt÷OŽ@ÿ“C׆ï ïýüïùýë(Êå÷þ�‰ÏÛÿ?Iô ;ûû¯h ”÷ßÊF7ÿooµýÿö÷ß¿ùç?ÿùý_ÿúŸDÿV~ø„`T©aw)Hs£â¤ÚÐ:Þíä_èAÏäNì× >¬SqèƒBð›ÚÏ�&:�]z Ï„Ž@G #Ðèt:ÏŒ Ú{Ï?ã•ÌϸuŸ—„øÎ}Êx•™RF}ÜI}š—{ó2ÌþŒg›Ê³l¢Ÿej+vˆG¢wÿ5Þ‘‘ôjAàNwûS’CU’Ïgãs�‚üñǵàß°> ¯Ü@«^ çS�y8k8'AMôMoYÀÿ–Åôê"€m�E1ëE€ƒˆ4ÑG ÆqinG #Ðèt:�£"@ÒFú‹û=·Œ‰ñ×2âU�J;Ž[ ¶ôÙí¸ÿs´Ûªzæm›yàNÈ+:ÛŒðlk¹¡e†ð�gH3ª<"ðAI=ÏüÓ4m³8p¯E€Hþ56åól¸¿Î;.>þÌÀ7ª¸VÒÿí¯¿þºúïÿ{!œä}ˉKûT'ûB >,Û²pÊ" úD{ÒgbÁ˜zÕDG #p�^8G�Ž@G #ÐètÞgr^4‡3råZ¡n˜m3Ï8�v× ~Öt²}û§ŒhøØå’õÀ)U'ëÏÉ2 ÏI=É9Å3�ÍÂÁ� NMš±Ã ?ƒ1å0àæ>BÛ/A´ñSû8â“^xŒoc�'è€'!iFG #Ðèt:�Ó"@B6å]§9xãVŒß%ãæ­Á?ã[ ~w·[é‘Îþ¨8)¯2· ?ãY?ãÖ©<Ó’Ä‹w¥Ÿä=š‡§ Û/¼#™�D<’eµÃ¹ÒÀÝéçÎÿ>ùGOt|*P:¾s¾ËOM¼-†¿ëÌaòŸ2Ž6�' œGže#ˆží�/Æ­ñ­ê-:iaGà�F Þé�íau:�Ž@G #ÐøØå”‡ž3/ãÖ‚G>¶Ñ·NÆÍ[‚nËíÌÑð«Žu·@úPKæe½L'‰¯wÿÍAü¨Ï‘Ìc7éDòÏÝÿKí8HþwM_ÆÂ�dQ¤¯.\òXÀƒîþ³`p+ÁwénùJÝÈ¥&Øy@NükÀœàW_èY6‚Ö·tÆ-å@wét"Ð áh¢#Ðèt:�ŽÀó"@’÷ó÷yÓ¨d~Æ­;âYV!ºn{„›7ñ‡Œ’ýŒh󬽵LÉ÷�zöSås²¬g|rG›Á‘XóÌ?‰=É-Ÿ ñFÆB€@”Еú×Òa ‚3%ÿ÷z/À�¾Ë†|€·†¿(ö“âÆ€îÛh /؉mMco?KÐú› ÆÝ;6Eª•Î)½pNG»ÇÚèt:�Ž@G`Š@JWc‚®r©¡ÞˆŸyÆ�ö3‚8·ŽqàH×zf]pŠmwÔ:m½5H»¹,ÑNê­Ÿén^†ŒC‰;·ïIø/”Ìó8@¸$¡'»!µýq"éf»?_ øDY/xà%ºû£Ç¾«~“)ùÀ–NÚçà(ùw  鯍,%ýØf9öæUú hü½p‘&Î=½pîg@�¿#pD˜ttét:¿"¯ýúCâõR…±¾¤¿—ê×?§§eœî³m�¡�èck» 5&±.‘sç?˜h?ü¨dþ^üƒ�˜à[ <"Àçoûí·[-Üþþûï7ÿú׿n$Ž…éÞj} ª^ È?ýKAÌGÅ'½!:ƽÏ8²Ýªܧ¹û5ˆµu*}P4®^8ˆHç�^8ç£ßcït:�Ž@Gà§D@ùÇ>1¥ÁJ»s|ËG¶Øl-NŽ­_ió4ô8 iÏãpŸª ¾yspÎ|ÛƒSF4|÷|Tª:ÕÆIºí×hÛZ+ÄNUêz.@[úµp§¶?‰÷ Ïþ]|üø‘ÏÜHÆ—nÙ ô>ö?þøã£èïJöo¾}ãK�77ì êE� ‹"�1'øNü‘™ÏbÄÚBúy1šâ„ß0óŒcL ¹(½�ÒøÙF ÎöÐ÷À;�Ž@G #ÐøQP®q�ðoiç›-~·è�ÔRæàšú^ËÏmx¼Ö«|üY'û6¯ÂªŸýŽpôiÓ2·‘ûažáHYõÏÉ;8e‰¶Ì}û¬Ð:¢NUÿ”ûëamûUÏù#»×vnåGòOæÿÏþsŸ(ë³�|&ð›ýïJø¿ýý÷ßD_þç?ÿ¹Mò¾×>Wœägy^À‡uæÐñÉTqü"3H1oGÚ›PqéE€ƒˆ4qŽè€s<ê=æŽ@G #Ðèt~zHäœ\Òx¦3¾Ô±ª7¢mŸÛ2Xù•κ?Ï}>Ϻ£~Y¤0®5¼ê…áô㸌|d=pëT¾“tó+�íŒWhÃÜžu‘©¿WÊýy7ÀµpVBU?ñ€`< �8yŽ… -°ðQõ«pü\þ÷¿ÿ½þÀ§µ0°×Çé‘ŋڅ“}Ӻݜä7Ä&ãö1âq¬zÀjx–耳<ì=èŽ@G #Ðèt~tHÎRžurs/åçäiH×J“õ‰Uå×øY¾i?ë@ÛÅG4<÷seI–wì3�qû0Ï›9YÒá5ÿ| ^ˆ�p]^èüÕÏF2,Uþkmýg@.¯b z$àAwÿï$cç€ïÜ㺖œ¤W™éœü³ a·®ýA;èðÀ-3nXu¡g‹bÒ‹³ÑiÁ{�@/¼÷#Üãët:�Ž@GàÕD€DÎ %�ªtíh–g|‹mö•Û„_é¬û³ð¹ñd¾qÃÜ7óF=Ƙe™WqÓ@lŽ-k6)Q×YßxÖ1Ïp$3ÏPŽã+¢™ßGò¯ä�ýu÷€bBI´|S¤®O¨è=WÚúƒ—̓îô©À[‰¾ËÆ‹BO.s‹KwÂïFkÂ�<óÐËtÆí# ƒŸâqÀo¢#ðÞ#Ð ïý÷ø:�Ž@G #ÐøePŽqr²}Œ-ºse—óÍIùÖÁ%ÿö°EǺ†Ù†v¡3´p$«<Ó#}dû¯x'9¸õÍ_‚[t•gÇÛûñ“ñlkÜrÃl3Ã#™e€€ª$õÊãï¯å3o-ˆ½Ë§ÅC—ƒØ! È@ˆ—jë?«·ª¼8�|�]ÏU‰f‹“tßퟃsl¤ÐÏŠg^(mù!û l1h�ŽÀ;ˆ@/¼ƒƒØCèt:�Ž@GàõF@9ÆÁ"ÀÍHÖtª|Ëè�üY·Òæÿ*è1ÍÁÜ/ëÀ3ž!|Æ—y¦³¬âÐ.Ž>ÖÊ|d=ã9¡7/ëŽä™N_•ìÇÙ’ü?ˆÆ�D‘+óbÀ@¦6®tÇÞÙ_«’”_°í_/¼ÓGnµð]~ø´ ù±;œ ÷àh€ƒk(µ}±'÷†(Œð¯êî�Q zÀÁhx耳8Ì=Ès‰ÀôOý\†Ûãìt:�_þßäºÖ�µÿON¶çü`�Ž!z#Ü<`.ÙÖ2óÐsû–UÛL�p'áøÕ)?¸ó��ùn7ó2¾&W›R¹Ä?ïˆ.bOq$¿ïžÅ�è#^ˆžòÿø6à-Ûÿÿñ�Üþõ×_·ÿû¿ÿ{ƒ›ÞÝÝJÿV¸Þ xK�/ín÷mM¼€}Ý �}DõABóŒÛ?ü9>-R‚Æo_OäÍè¼§ôÀ{:š=–Ž@G #Ðèt:3PŽ3#y}lúJ>fH�f^Æ-Ïù’?䔜bÿR%ûá9Ùϸu3/ã#¹yôÝ86 7� \k!à“ oùgÜ|à–»ÿ‚$ÿ$êZ¸geáá�?þ¸VÒ£jsÀc�Ö‹fæêÌÏ ^ PÓQæ@Nôѱ?ã†8©8<ëƒï ñÑØ‡²½R#�w�^x±‡Ðèt:�Ž@G`.»¼oNú2ü—j?5Ë<ãnÝŠ›—!£œ³ÍíÙús|dÇ–ì7ã9™Ï¸u2/ãKò‘žôInãyõ�äŸÄ[¬ˆ_$¾ÂoUyi`|&0„»�^jaàZIþw%ü¬|×˯´; ’k-„¯…˜Ô¤ºÒs‹uA`Ô¾j’?dz=ú”Ú�X$IãÞiõoGà�E ÞÙíát:�Ž@G #Ð N+îèd¹yÏ…/é_JÆ¢KÇàÖÍ'ø2Ú8Ð%·gpŽŸu–ðÜFNбɴõ2/ã[åU*$úñÌ?9¾‚§;ûWâó΀;í¸×›ÿ㮿|Äs‚—zÀ%þÊõ¿^«â#‚&[^Èó$ñµ§ØNùgô?Óöky•Á7/CeôHŸ‚Œ’Û ÆÄ³Ü¼5Xõs‚Žm¦3n»ÌËøHnÞÆ#ØÓ$U:| €ä=e} ’c�[ì‚Ôù¨À®L<¾pÏ‹µ@òÏKIêkÁ—k–�p÷=ŸÀ"ÃÖ|hJöãØ±wcžyˆ2�ñÉl«â�}È›è¼ÕôÀ[=rÝïŽ@G #Ðèt:ï4äž9÷‚¦˜—åYf~…Øfž}™g9�’Û1�® òL›?Gº9‘Ç.ÓÖϼŒ�äæZ¨þÒùx@rpn^x`AHAÅ%>¨ôŸÅJ(hËÿ�¸UåS�ì(8æ3�5©vR_ïþWZÍD©ö0“ù#<óÂÉ–x‹nëtÞJzà­©îgG #Ðèt:�## fh1Ç*od¾´OûSƹï<ÓUnÙâ;Ë �)Õ¯yYn< Žø™³s’nWÖËüŒ/É­gˆOëO8·òyÖ_*WTáè«D/9Áˆd¨Âœ†2c@IDATóþ,„’bÄÿïôN€Ýý'ùÿ(9ù;ð¹T%Žòx@wúá[#jÒïØpçáé/>ѱï>âá)ó¡ŠÆÞ;"ÒÄ[�@/¼õ#ØýUÈÿh_UǺ3�7�_ý÷ãÉÿUw±#pVàÚ�ÿ>×è¹àØÎ×|š‡MæW:Ëæð¹v³¯‘Žh¾·¢9Üm®É­W¡Æ*y.à ;`Lq qþ¨ÊVþx€ e'ÿÚùåV/äS�·|àŸÿüç�¸4ðAð Ùh�àö’Š“…â„Ý*yÀm›‡î.PÖ>„ÈÝžñê¹ysø¡Wœª(N¶{"oFGà-E ÞÒÑê¾v:�Ž@G #ÐxepBù#»E9ÿš£Í_ƒô5ë@O‰0h”LoÁmw ¤/.#|.ñ7+¤ ë‚»-�/^¨…ˆøJ€è�º»'I¯À½Þp+9ùýÝï¿ÿN’�\¬û-|P²CuÑ;®X Ð'sâü8P:0.YßÉ¿#�›y@îä¾BôÍ«¶î[n¯£Xõ"À>�¼åôÀ[>zÝ÷Ž@G #ÐètÎ2S^öËÇîòWt„¶Gq0 Ò_l³Næy<Ö©²9¾íŽ…ôÃ%ã9Y_Ã-_ƒ´3£‹jŸÇÈ>i›ÜýN¦«q“ôßI'Hþ©|&PÉÿw%ÿßõe€ïJüIþcPâñØ€\Ì–špWº.àÈ� Ì:�£ÅD^0Ì~F¼�kܽ�#Õø›Œ@/¼ÉÃÖ�ît:�Ž@G #ðR—9Üò•íÝÎá{…üæ±á&ó2^›°Ì0Ûš¤Ð†ñJgYÅøüd?Et@f='çVÈônùÄ·ÛœtE^Æëþ•Ð_kl>¡®„j3À‡ -Ä™ÆcèP¤¡Ý”ðS²Ïg¯DG0Åz}¯û‹¦ù™Jæ/ñ¼€¾ïþ/- ç“Òx†n ˆ²\F¼�(Æ�•ï¼¥ôÀ[:ZÝ׎@G #Ðèt:S~u¢<è§ Ú¬ãÎ<ãÖŽ"¯¿ægüT=ìj_«/Ónw íäÝŒÛÇ´n…ø‘Íþ‘~1 ‰îþ ÿ½p/<’ü)á¿Ò.€k%ü"¯"¸Z à±’unÿ;ie”@cGe�Á¸aNöçðpœ~Ü>Àç &–�»Œx!#^ÄÀŠ ;o)½ð–ŽV÷µ#Ðèt:�ŽÀ™G@¹×“Äz‰gY†„�ümޗ坴ó@|½Tq’nK´ek_î£a±û’wÃÝ^H¾@ÂKOÒ ‚Q0’ » à]þùç�ø7R¬ “uø«‰t¥ÑÅ~.ñÏ�Ç6ÓØŽüÁ§ kyÆCXäædÜŠ‰mdMt^szà5�î[G #Ðèt:�…üªüC¹ÏB¯~¼ˆöëØÍ3¤Æ+œ“ÁÇ/úKx•™#ýØÞô)PÉôþëØ/Ñ– ñ;õ5’xh[’í‚$¸9ù†µOz…Êü±`,Þ½îþßiëÿ­êMÓ?µ—wÜÏ"}þ¼ïÃÜÇ÷ÇßžÿØøþJïþÛ1<¥/k¶Kç¶–¯á#¹y2|Âáð²,Óà¹d?™¿wBoý%Ú}:ª�2¹dLìØï<€G*ùÿ(ô“tÙÖÏ£‘ô¢ÏU¡yáßÝToõ À»ÿûßñ éßjq€Ê3þR¹½¤ ¯%'ÓÏ;F‹Ñ~u–häNîç Õ-Ÿ£Í¨±õ"ÀADšxÍè€×|tºo�Ž@G #Ðèt^Y”ëì{dÜp/2âeùKâ´µË?wí.á#]ó é›q %û4m™i`æAS°ñwÒåß‘mõeÚÉû�€ê¥¿p­ö>)y¿×þHÐuÇßÉ÷½ò{uyWxI t~ÿý÷ké߸~ÿþýF•OÞh‘ |LQðÉeXƒcÝÑbº, ¸/Õ6ÓèÐF…è¸ ËáQÜ'ËwÜéWãìE€ƒˆ4ñZ#Ð ¯õÈt¿:�Ž@G #Ðè¼â(ß™íÝ’lÖè è‹ÒÑðnܦqÃ%2|¡[ñ`¹ysºY>Âs[YîöÍsÂm™¡eÏ„û¯ÈŸ ü¤]TµCâË—v–û”Œ€ïz7@|*�¯è�Dñ$;Ð϶Â-CŸÄßÅü¼`™w˜Aìñ™!zæUš’å;Îô;ÅÂý:�5Ñx-è€×r$º�Ž@G #Ðèt^y”à<éaæ�gú‰òdЮÒÏh!ã02mÜpMŽßkx(]ó€ÙGæ�ð%]÷#Û™W}t*ïúRwöyÓÿµÃ£hálã¿R‚O�ø:@|!@0 mS´SàƒîøUý ;þ|. ‚Jâ/� �Ä?=¹¦vÂÉ!Ë6NöëÝó'ó!ÈÉ?í;yŸÃí$ËÍ HLü³‰ŽÀ+Š@/¼¢ƒÑ]Y�€®©û¾Çº¯·ë1l�Ž@G #Ðè<7üÏÍ¥þOβ_…»�žäy‚qC÷Ñt…È3¿ð*Œ"7oN7Ë·è¸Ýl礞å#žeÇBùâîþ?h šáÅ�ÂÉ'œlGâ‹  lu§ÿwþUÔôåŸ äe�RÃ>ßÙÇ”R“è‘zðÝ>ôŽ Ÿ‡'ï#Ï2·‹ÞÇ%Ëwœé78Åà@ÐDGàD ^ÁAè.t:�Ž@G #Ðx‹pùZúNjÞ•y#ܼ%Èøð›u2¯âÐÛì¨Çß9þ’Í£õc‚Ÿyàô�¢${ÿ"?ãÏ„ûGHþ•¼s—›Lž÷Ü©‚‹å|9ºCìËKÙ\}ýúuç_|>x¯�·’ÝH;VÂê1éžÈ}nz—æþì''ÿ9±ŸÃm›åædÜ5  Mt~Qzྛít:�Ž@G #ð–# ü&ºoøZÆâþädžénÞdl#Y3m ·¥ŒtG¼‘¯¹6œäc3ÂÍ;^r·²Só—WÚº/–V./I¾IàÕýÇáèÕ‚É?Ÿ ¼“�›i;jÁÙ£Ã*ÝÑNÜ}×ß©DæÙKõëD¾BëZnz2x¼¨ÔÂŽÀOŽ@/üä€ws�Ž@G #ÐètÞr”Ó<é><×'Â_Äp?�A/á–� CÀv$3ßÃ\£­—}V<ëŒpú1WœÜ#áæ§¸]‘ïËŽ»ýìxêäö §�þ¥¶÷K-:j+Üùgë¿n´€‹y]¯Åí˜MHî)y€~CäóCº[h@Ç~G0õc½9Úü€ ^ñ¨ý?Ði¢#ð3#pðÇú3î¶:£ðϨVþw¸Žl2½.o7}üÞî±ëžwÖ"ðÖÿ¾×æïŒoMg-F–¿¤/û|Ièq]• ^ðywW½ÔíB‰^T½øíÅbsÊ8Ü_ÛÎÑ™o| â3ëlÅ«ôZu[¶õxF0ÿ½�pó¶Bµ)ÕKæhìˆ&™¯�§r+=¶ô£ÀΑ�yïDÜëÜà¥w¿ýöÛ­>xû?ÿó?·ØëÜÞò²AÉ™Ðñ‚AD[ËÒ"�¤3»Î�=Ž’~'û†¶\£­�àã@ÚDGàçF ~n¼»µŽ@G #ÐètÞiH�r“‡Ye•¶îßò—€´qja|T'�öCâO²F²¯0’B·ƒîîF¯µç¡mæ5¶IæŽÃȺêfÚ¸!ö#|‰gÙˆNÖ˸۞ãeÛ<ÎSã†9‰w2¿ñkðìGíKŸôgã«èáSr�û{%þþR@@±¾|ùòAr­E¹Õyt£sêF/ ¼ÔWpá²vòzÅa´€�¼+À>Gpn1]·1ZÈò¿ŠU/D¤‰_�^øU‘ïv;�Ž@G #Ðxw !";¥<Çö”öªÍRûŒ)W%m{sø$ÿJÝ"ùÇ>zȶ,ØÎŽ+mþ¤½SŠÛ©öKô’Œ>TyåeùñÖ|ØÆ}� œb:'ñÆ·ÂìÇþÔ¦Ðx /úû(:’ûé¸{‹'MTÉ)û=ðAçÏw*E/ ä«q" >èªwn! ë�²€½}Ï0†¯·ƒ®qd”o'P�xýÓøEè€_øn¶#Ðèt:�÷’¢Ñ¿ò3�ñׯERïdœJÔwÿÑ3Ÿ]K…ñ»Ìá–ŽblÙÌþÑ«ô’ß*«ôR»s²c},é�dy|÷1¤_ÆŸIlù$ šü"’\µÇ��wæä_껢ó„Ï ’ð_+÷ß*ð¯¿þbA ?^8ðIbèDÚPªO’ñ^ *]:)½�‚ÑhG #Ðèt:�—ˆy�Ò›—p êKùÚÒ¡¹¾ç>�Ü£—u3�œ;ÿT%u±3`kÛÖÃÅÐüÜóæ uíÃ}ã†s>F|ûɪ¿JW›‘ü9<û·újÜÐ:Nø¡-;Ê/ Œ“¹Š]<ÀW É?çÊ´É¿^™Î¾ Óè–D>—üÇ•q'üY×¼ ‘/=€Ï¼ÐnžÛ3_‡¦Œx;�C$‚蟎ÀOŽ@/üä€ws�Ž@G #ÐèœGH¤ê¿ò*]#³&¯úk4þjñªt 8vÙÖ8 �ß À®¶�“hn)ö‘}›Wû�ýå¾e~Æ«Oû­0Û‹W_¦ñ³†[¾fŸ¶q3=‡[׋§ÂÉ¿@| ¶z@ÈìÊ›üØÀ–’p_¡»">;.Ùö/¯úÐŒßüì3÷wMŽîÖäß¾2œl#û×ñ¿í�÷;T'…Ô×(²5 Œ® н;`êÎ?Ÿ ¼åS�ØN5t§ sòœqTh“*Wø»“ì)D6*ö‹x…ÕÆòÊÒŒ™ñ…Íìü ôÀ l»ít:�Ž@G #@Èkò�Ùü¨HÒ—-%÷?ã¶Å�ïüƒ“f¸¥t¬gÜ´ÛÉpÔ�,¯xö9ÂÑÏíe¼ÊF¾­3òm_Y¶¦�®ã˜í*Žbß>M[7ú±Žé i‹c8±­2û›øW$´ÞîAbÉ­xÚr´púÛÿ­C_&Þ�“ù¿ÑbùÊò™²ogFnv¾ûïíÿÛþÆÉ¿“}C·³F[/ ÆØ‹iâGG ~t„ÛGà EÀÿÈßP—»«�Ž@Gà§D`íú¨Äå‡öƒö—ª¯ýÌtÆÑ¯´yu,ÖËüŒc� $0Wû.·c[t3nÛQÛ–ÍAûY‚Ø"w™Ã-7´Þ’o˰1¾’X¯é¡³ä7„Ó±s…eÜмI=ÚFæ>À7¤mŽùŽüøqŸ°�ÆÀ–þÏÂo•üߊ�îÿp@¡åï^��PïþùÏÞýùçŸ<ð­�h—‰º¡Õ=b’ÊãÁKÌ‚æEô½PÔö¤û‡.ø´¡õæhó2Æ~Àl¢#ðƒ"Ð ?(°í¶#Ðèt:�ŽÀ)P.‰Ù)¶Ø`Ÿ ôˆ—uÀs»Æ «<Ûæ¼%룃¬ò²mÆÑ£dh<ë�ç6«lŽÆ×\Å&·5‡gßYÇöÕÿˆ_y•žæÙ¾Ö6LW?îŸ!rJŽ]Å¡Í3nû é'ɆØL {þÔf<" œG>jà“pîêÇê:ùâYáH†ñ¥ú E€Jú•ïß°xpóíÛ·âßè½ÿý7¦9y>ü@zX¼|I¿ÊhÞ”xXl72pØ¥#ðƒ#Ð ?8Àí¾#Ðèt:�ŽÀ�Ž€“3·Sió�YîêÜÜ0Û®á[ìÜNõE{” Í›³›ã‡³ôƒß\í×¼¤ºïƒu²lÄË}ÎþŒW¹}T~Öáٮʫ,ÓÆ�[K�kî«}ä䔸'›X�Ïkméÿ(ûœüÇËÿ¤É¿ýІôIˆ>þÌgoôn€ïZø G¾O‰?ïœ`w�r̶'þ~\á`!"9ðÀÈ¿y#ˆ‹QÂ?âí›S z`�F~TzàGE¶ýv:�Ž@G #Ðø‰p²å&+ ?ó2žmȹ�ír¯G›ÊÇÆ:7�ýÀ•‘ßÜ·ŒcŸÛù3/ëÙp·�åÐÉ+oÉ¿}eXñ}*ÏýÏöK¼ÑX*ÚI¿e¦�Äœ>ó éƒªØWä¥GÒL!ÿ ‰o0&}T¢ˆæ�WÊýuãÿ[|*�w¨ðX:y1!|L?n#ó*žF‹^ÈvNøáA䣄ÄC7Ê‹-}·IÃŽÀQ耣ÂÕÊ�Ž@G #Ðèt^O”,$©Ð¹dz G®d*ü)æeŸ#ÜvÈlk<·›eÙψŸí²nÆGvYžqû[ƒ#ólk˜yà¦3Ìx¶ñáeþ¾$s;UzK­öÐ.Nð3ͱp²?·+}NÌHö¥÷{Éá‘ü“�\鮾ÀEìOjñi€xQ v \é‹Xà ýõ×Å—/_âkâiÀ­y|œR°½ ÿA9ÉÇÿ7/ù¾à½a!6Œ(lfGà™è€g°Í;�Ž@G #Ðè¼T4ï?H ñ;Çñ­ŸûƒÕe„Û—¡ýädNfC·c8â�xÖ.œóíqÒŽqÃÜvåU:ÛgÜznÑ©6Ð/Å›’î¸;o¿•—éÜߊC£K¬]�üÃ7œúŸsé�Ð_ë.>™? rµKúÑŠö%U|ĉ,Þƒ’þ;Ѽ�ÏÖ»÷Nž3Äv©JüdàñéÓÄ:nzkY´SgŸuHÈkEžyÄ šÌt�c(¥Û9aÚ?8.¹{/œ“5îü ¿!/D' ¸+ÛüaÊWœäâÇx€vŒ>øèè11ϼ]#O½ˆ�wþaílð•ùö ϲ|ÚâÎ�íŸÈ³Æ;+bÐŒŽÀ†ôÀ† µJG #Ðèt:�_rÏÿ3>ê ò\*='C/ûžÃ³}ÅÝGó3�qäkôȇyk°úžÓÅfij}•C/éfYÆi7ÓÆ ³Ü¼%ˆŒä;'û™ϱ³¯:~t² •$š6*.Þ¥x$ÖB¯Hh#©•¾Lã®ä$¦ƒ™~à[¦�{½ôïNÉ?Ÿdà»ü± €’“å9|§ù˜¬ó‡C%þ‡T¶|l'Ëi:ÃG‹yÌ6C �»†‘iæ©è€S#×v�]ã€×vÙèü´0^iLsÚ�FÖ5oÅö(qºžì¯,‰‡¯àÞQm¡Ü×·#‚5P%~ûs§Èsl3ŽZ¦�V¹iÚA‡jÜJí‹uwÒùßjw,=ïùQR}>J1tr�T»,·Ì¼chëÒF�“ý!£l¥³žñ%ˆŒ~8ÑwŸ w­?¶�¾«“yt¬_a¶Gf[øà€i< €èÚ—úöY¬Ñlëçí~Ü‘¿<¸¬Â×"À�vÜýñÇ·úDàí´Kö�Úã{�——,ÐŒj-ðv[%´çEÃýåóQí³oëAƒg¾yšžK¶ÉüÀK�Ã¥ft6F 6ªÕ:�Ž@G #ðœ0‡ÝWÝ)ÛãžÎq×›ªú»I¶'Û;8Ë™*|ZNzs�®Éçìšÿã#À±á\Ê¥/hó Ñ7n9_fÜíÀÛZìýŒŸB¯µyJÿð¹6ž*ÿ•tn{„›WáhœÄ‹J‚?’ÃC΢þßPžd·?óÜ%þakû¬Nû,¿R½þ‘Å^ _,Ð>Å û^¼øÀo¿ý†í-�(égAàF_ `‡À¥>¸×wß`]@u #‰hÃ#Ü}È:Õ#2ëUYÄ@cœ•?1hFG`&½0˜fw:�Ž@GàE" ù36æmz�uLv ™øÍë §}.ŒÞ €l©àÏÒžÛC/Óö;ǹÆÜ;©†'G N]v:�Ž@G`!L²-frvÊÇv2 žõFøä.@ÖÏü�PãeðOÍèlˆ@/lR«t:�Ž@Gà¨x^ÆDÃiB­‡Y㮿“=¬z¡­ª±Àd=σN|è:ïƒÖ|�olí~%ô‘øWZüñ´Ï6ÚBG†;Ú ˆßÜ4Å<Óæe:ûçÅ#0wLÜòÑq0/ËÍöò}^Uèv€–™Wió ³<ãÈ×hûXƒøÉ%�q ?ë€Wû×D羟ƒu\ÐŽןlßÇò,Ç:ó2ŽœâÅûÛqÛEGmèrÄé¹ x|*P~y¦ßoù§_`€ÖMïþñ�è²öáBwú'!¼×c÷Z¸•Z¼TÐmOÐ'‰a�^ 0óàò,¦i|G×¾áYVyèÍÛ åŠK/ #Ó̵ø�lM¯å�Ž@G #Ðèœ�)Ñ$ôq€îþ“øGýþýBw§öÛp5£;lE´g”!±?káW8“o˜C$ùW;Æá“üG?)̰uë,j0Ê>ѧ€S �o¡Ã¨~X|Œò1qcðr…ŸõŒ[ÇÇÖ0ËíÓ2Ó[à›ª3¢·´…Žû½UßzKvUöZi÷ká×ZkË�‡¦Xf˜y\cFzqíá:•ÚfQ>Ÿäb]‘›ð.ÞæÏ�ž  FÎ"~Ñ1Á�x”XЂÁ�žàS�7ì"�x¿€€®Š‘!ƒœ«tv´ û]p„¨Ø_åA[×:a ËLg¸$‹1{üÙ¨ñŽÀRz`):-ët:�ŽÀ ˆÙÞÉ–ù)•‰.wÿï¹ëÏÝU’ÿ-À�ãn.–•†9ÍuAöþÁ5›Þ}ç›E€\™h«r‡,ú1%ÿSט5ï&íÓäÝþ5‘Þ·µ„»Oè¸à#Óæ7ü± æKq·,ë™GÏÀ}ì*Ì=·Ì¼JÃñ¬_åUw�Î~~žc’ýWþk¥Ý¯ óXˆ1%ÇÚ8vT®WÆ×`NòÑ¥däøËʼn?<µMF¯K•TÒ³þb] ß_B¡Q£Ê÷ç2!ß�„ †®¥Üý¿•üV¾®Å"ù�õNAŠýf<óB©üÐù¼à žaQß·a9þÁG°ÚVÚv•´âÑ;†‘iæ\z`.2ÍïœþÙuéœ�>N�ÜϱÓ$ò°!Ñ™ƒœçø£N¸æ¥{šçýõ]ªHöõ­ª=NòOeQ€²¿ŠÈÇG ÚÅ} ÎÄçü¹¿¾>Lþ­a/ô€lÈCOø= @øÓ€fíwü²K žŸÁOm»OÖ›£=† mWùMÏG ƒ¬ßÕ|Ç7ó×xØZÇ~Î.�¹Ê~&½µ-ëÍÁ|\­ÃßkÆ�=ÎØ»V[ûu»ÐT®9\#'9�Ä%Ï׎¬?ù¼Œ-ý<×/œ»ÿû“ýþüqÏ.€ÿûß\\Y8Ðeø–�W@ôY€�ÊãÖœGˆÌÉ¿¡/φ�Ú‡˜ý¢^¡µÍ7ݰ#ðÃ"Ð ?,´í¸#ÐètÞ]˜äjP1A-8Y’øx£?wø wü•èßjà8á†ØQb6Éd<¨ÃX1›”|�"Z“iîü_NI}àSÂoÞ½UûJ52„�í䃉y,àkÂ5K'dð‰Á4q�¾Œ~�G¬&ášþÈGó#PcŠt)®È,áæe�ìÓüÜ xõ¸fÚöæUý5yÕõ!÷§ân·ò+}¬ßªÿ3é­mYÏ�1¯0ËŒWhóÐÙRˆ­¶ó±±O טÌ÷¢2ãè(i'ùæŽþGÉ>«Æ"¾…ë2 `!!h·)Ñ×/_øL`,h÷ïÐzì·Kí¸ü믿¬Z!Z.ÅNú G¼j[iûÊ|Á£€SLï¨ÝoÖËüÆ;GG ŽYt:�ŽÀ¹F€YYLl¹³_&¹ñFÝMrrOÂøÁõPêŽ7AÓ@í[ÝÍþH¬§@ñ)û™!íOz˜¨+á�dŸd~ Iü#ùÿô)à•à‡Œ³X Ê£Þ)ä½øbR=µï~åæ×pMÂ÷“|t¡»œ�Q<á­UZ´NÆá™Áê='kÖ›£«nÕÏr·o_•vû[ m·ènÑùÛ«:ÇÐKº[dÖ©�ñš—qó2̸uá�*ò¹â$ÞÇ=ûvòo™mÀá‰&Á�ñ>©î“¹ãS�±ƒ`‚Ñáñ¸€lYà3�$ý7Jþ¿ó¥¾ðçŸ^hà^‹qyÃÇŸƒK¬Ø~ ãÀ­3ü¡k(t�ç¶ì/óе-x—ŽÀÉ耓C׆�Ž@G #pn`"Êí/ÝÁi!€É* ÜÝ¿ýú5¶÷@ñHòïµ =©¸y± ¿fyžîñI–g„ž4‡ º“õi@ÙüãBwü?¾ ñ¿š`¦Ù@½6$ùW›LbgÀ4פšU1ÝÃh=~�¹OK8Êè…¯GóÆNˆ@Žó’¹c ¬¸yù˜X‡�ó{TÐY;Þ¶Ûª›õ°­´ýýHH›Ke$¯¼çÐK¶[eÖ«�qmá¡SõÌ3œ‹çD®Ö«çJö� šsÍx�_ÆW”Àó™@Ÿ”¼00žñGÁmŠÅ%ó�d_;¾kàƒ¾»þûßÿòî•{-`z¶›h(Èð=Ú�ùè®ûR°¯¼$™é†�‰@/¼HÛIG #Ðè¼û�ôzb«I*Õ\¹ãÏ3þßYЖRÝb:€,/pIòÏ–v9Q~ûí·xGïЦ‹iˆ�½€NÆ9�¼(`ÆåùdË´qCLÁç ~–äsvÍïì#Ð ûP4Òèt:�ù0ãŠ:MN#ùW¢|ÇB€`¼Ñ_‰4‰ÿw-|ÓÝ¥oÚ^ú}‚wâ“ô_L‹^¤fw®ôÆ8Ÿ¬³¾L“”Ç@Z€Þoág€Äÿ·ßv\íO‹×Z€ø¨qxâ­, �¸û/?ñ€ú? ýAgG­þj2¾O˜àCwy^rLñíZ=g¾qÃlk;d.7/CäÓ\2o ŽmÖÑÙÿŽŸ\Ü·ÊÏ:[ð9ûÊ�mçpúše•¶Ì0Ë·ð¬3‚•gßæCSsÃ÷°ßÙ]×-ÖåÉ}¢Åb€’w’ÿ[dªÑŒ`$ÿèªì_È#Z”ôß}úô‰G x ¼}£cÜ…Eª ÈF‹Ø£o?>93m”ª_å;­þíœ�^81pmÖèt:çM&÷Te'ÿÚFº[Ðä’_•ø³ðõÿý¿‹¯ÿùÏÅ7Á[^4%¹nC�¡|0ë›­´�BžqغÅ $üÚïºÃ§ÅèKîü“ü«—Àß¿¸RâUÉ?wý#ù׸¢ðH�*ïˆøg’.!‹às…‰8±ªÅü «NÓëpü²&¼Zà¹ZfÚ>x†K¸e>¾Ø_“!§d·mkôÎÃq¿ö¹Õêý‘nåCgÝ-8cZÓÉ—x–m…5®>–ð3Ž?h +:n™õ�rw_×Yìké_ g1€<† I>|¡q‰ �麌]Òá»�|*POe}»Õ¢À�ذ{ +v>h‹‹˜!ΩÐ|f4%:±C‡t\B“ÜJìŒ'ñ=Fwè ™ç�^8ïãߣït:�c"0MP™OFUÒ¬yäîù%Ññ€îôsçÿo%þ,üýþÏÅßÿ÷ÿ^ÜŠ§ÛO±pI.|Oƒ˜iz†©™ñAO©˜ÝFâO²¿¯Ób@,°@ÒOÕ�ÿË”üÓ¶>º½Ÿ|Gâ/[^_6�L·Û’Ú¯3݃"OþÝ|ü�‡>üiâ^Í›>1Ä3ÇÔt…¸7¯‡lOò…ÜÇpÔ-ô-ϸu+ïÚ¾Ö û±¦GžSFö•w*�íæpúže™Î|ã†Y/ã–¯Á‘ ¼Q©Ç¾Ñw…¶.°â¢9XÜõ÷¶­u~ð�~^^ÊN.K¹Æ€x÷“ ¿÷Ÿ?楷ºû«Gøª Nìm/Ö>!‡çRøæ�ãÇ‹Ø�N²ìÏrëZ„‹Ý¥#ð¼ôÀóâ×Öo,ü£éò~#ÐÇ÷ýÛŸ12M›ANÒŸ÷S²ŸõSÍÖ½\êâ;Ûýyö_ð†ª7Z0¼›"égëý´€d<Pîâ+Uîш‡þ^‡ÌÉÿ”øßçõ‘1ÄK IèÕ�.ă ü«)Ñg«×jïê´ €vø‹Å� š(ÞÖ‚¾ã N1 nøÖ²f“ýoõyŒ^Ó1vÇèæ6Œâœšñm½ Iò9¿]*m>6ÄÒ0ãæ¹}Ë 3~*�Ý–B?^º¬ùÉ+o‰Î²-8ãËz™Îü>â�ì­Wá’.²µ‚¿ì3ã>O€C�›Úxô°~?·¡;ø|J�»ú_ä‹íü<U8'õ~@üX4Ð5[—¿Ý.€ÿùŸÿ¹•Nì äe�œ@qAÖB�ÐÇË,D*NüÑω¿OÀÌKf¨/áØÄev‚(™Wq胢qû:�5Ѩ耑¦;�Ž@G #P#àÄyJü¹ÓUÉ»ñxî_wúoØî¯äÿ^ ÿƒ.µ#@¯�Ž$?ž¹çλüDâ]’nf{£Ê,2—:Ë3Í]z’8ˆ„^m’ü�‹wÉ� •I8óE’>TÑ屆۩_—È»ÿHŸew¥E…¨�—æNœöòü´Ò¨Ã£XÏt0ßÀÏhLîö’Ì:Žl2Ï8�JáæUÈñ$Ö¶­I¿åè䊾íÌ·hŠå Ç÷É}<Æ6ë®Ù�ä•·DgÙÜ}[Ó]“ãÇ:k0ëf»lkz±£X߸ÏÃPš~|.šg¿ð§óV—µ(×úÕëLî> ²°;!ÕRí†dÒã]z÷é'­ÞëÒw¯�¹|»?ê_ý¥ÍR±à¦ç ‹Nø ÑÝýaÎY=òégÕ5o?éŒðð¢ñô"Àc<[ˆ@/,§E�Ž@G #pƘ_G  +‰ŽOü)©�þ*áÿ®äŸ»þ·ªy ž»×¢AÝvŸï¸3ó«•Y¤yg�™fâ¼_�|À�ö)y׬;L"ùgq@‰ý…&¸± „_ßX@:“v>ðH@®´ïÓ–Oð—*šÇ†«Q"ðRmü(?ô�~¯•­z#?Ù¶âèãfܼ � ±pD�ŽóEc0/úÁÖc³NåAS²žyæCÛxJ¡¹½ŒŸâoÍ~Nžù§™Þ‚W�ö†Uo�o¹a¶7Ï0ËŒ#³ÜøÄ.t玗Ï7ëÛ/ç(笠Xñ%ÞðIõNuwR+Ä$þJäw'çäD>yw€žrºe€¯½½Ñ#Z«ý®õRíÎÒ©¬ÏêÃ-ßñ…ýREßmTˆlKáâ�íboYÅ¡‰/D$úg)½°�–u:�ŽÀyF@IÃ>…›p& <Ï@<ëÏ›þ©Jü©lûçÎ?ÉÿÝ´àÂ;”ü󩿸óÏ�tU½Åêp˽"ÍÌn®Žľ�‚GU?YX`¶šy,Ä×p$îüï“õMÅÆÝl#ñG‡1K�½°¼#àúãÇ}ÕÌù‚I„æ›»¤q0y—8äÄ®â•Æz†Yï-•<†cú�í*ŽÇ¼Ê¡Í7„wL é'/Ðv>>n¿ò07ϸ]f¾eî÷ˆžãÙ߬íY?·iÞ1pÍ~Nžù§íLÏáUÏ}žÓ7ß°Ú¯ñ-7Ìös<ø–7íþ.Á%]%ñûóyJúc‘ŠEë¸Ã¯ÌX�œšb ”OꩦýuDêÊüU¤ÿ¯ýKOK}¸Pâ£D?’+�¾.‘·,p ÄÏZár‰^†ûF׌%çB‰þÄ�uÀŸõ»žD¥9½�£Ñø›Žv]¤ßôºó�ŽÀ+ˆ‰Ž»a¨I&wÁã™Ýõ¿ásJôãmÿJúÁ¹ëϳþÀº€çüÙö¿¯,¤EftKÕ]ª0÷•¤œë`lÿ—"²XØM�Ã4äj—äŸ |šðA‰½öÁÆdúNör¶Øë6Ú®Š§ofí)˜ä\wc"ÎÄ|ÚV�¼À¾ßrýOñÖÆ˜mÿ¯Ë4øs*Ç1Î [ªZðm¹qCtÝ' |óFx•�è9ü-%÷c¤ï~�d[x[ìG:™7‡Óþ’¬ÊÝ_ÛV½cø#Ý-æÅ€8¦ã‹;óÍR²<óŒ[g‰éÀÛZèCö?g·EgÎþ1öYw ^ýg›Ü§ÊÏ´qCÛez„oåå>ÚèjùœÌý1Ìz#^=çÐ1�E+�·Üåç,Ptùº$×ù¤Êâ€Ô£H]ßÔ�}­ëÞùL —aú»Øö¯]wZÐ×RoB†<.†™Ï"ðF¸Ø³_»?¢Ý%¼ò0Îüéb ûi!Œö©¤9ç�^8÷3àŒ_×·w0ŠBG #ðª"@ÂC‡2Ô3Pâ|ãçþÙ »ÿ|ê�íÿÚÀKÿ¨�OþÉ.’ù$Q?ÀEs%›«tÅWº¹Ù|*~Ùî¯ûaAƒÇŽxJàïY P_⎽ðxa ó^˜Æ‹ì¹¾2'¦r Œ¹$2øØGò�O&ß’½DÁ·ç¬ïáúžÇ³5>#›Ê˱!^¦�ÇÔ)çÞõwñÇ~jÇíù8eè~Œxø³­}Wz¤cÝ-päoÉÎý]ÒY’cŸu·à´›õÜ�/ëfùžõçð‘íˆg{Ë€Çද0û@–Ï©JK&õËX�ŒËeìÿ“*ï çá"%ò�gþc€ä_I>/üÓ¥ñ ;øLà½vÜéÑ­oÆg¹æ‚/'ÿqYL´“_¶�Ƴ�ŠÛ|ã@Jôm‡>ù�•üÄ¢g�^8ëÃÿö¯ëÚÛD� #Ðx=˜æI1[¾‡àª,ܲ€GÒ€¯¼ý_ ¼ì�7þó‰?ð¨ÆÙò/Ì£N8wÏ¡¹š¹ã†ð\F³9xôÑ�Ïø.>³Q¢-˸ƅ>Z1{�d$úT=X»‹‡ Ic$ÿzt@çHY˜»&ÃÏsÐ-4}µÍœ_tÞBÉãÍøZß­›!6Ž‹í³œ¬¸y†G7óââ<*Õ>á£;ѳÌ8�’ùs4|üŸRªÿ­>NmÏþ�±Ïº[pÚÈznÓ°Ê2mÜðT›loÜŸÆ3œÃ³þŽm®Y�c<*âsÒpÇŸËiÜí; ÉþG%ôÀ{ÝÑדNq÷?ÞôÏ‹ÿôwÀe wýï¾|ù¢W»ü)³k_¶Q¡Ð x”ŒÇ¥S<úBE'óD®_†Qô`ñeþ.:ULz`1Bç'ì€ó;æïzÄüÃèòë"Ðñÿu±ï–_&̬4ÜUî¤äùÿ;Ý9ç%€wJêY¸Ó�þ;-ÜNÏþóœ?wûùÜ^à‚ñæÙ~P¢ìYäô èÊÈÌŸ+Ñw óÝ|ì¡]Àè0·s¡güã}‚Jîãñ^†¥mþìàq½Mëâ–mÿâóR@â; Äã�«ÛÂ'ž.k´m¬o[ìN)§ÚmmËýÛª�^�ÁVÛ<·›yàK•ÄŸ’“xöå~àž+|ëÌÁªã~¡oÜ:K4:Ç”êÿ[ts_޵=ÖÞmŽì³l$¯}Ìú#<óFþ²|„�xÙ�åf|M×ãÁ¦Ö%[ÛqüUãr6áq±·½Îñ/¿ òzÿÉø¾ŸžzŠz"êÃ¥=õ�GÄ~`'€.ñi�àG¼h@ÿn.õ¯ ¾ vä»?¬‰!�“dУ²ëäîrŒ|ŽÙšÇØmg^ÃŽÀ0½0 K3;�Ž@Gà#  _l—'1¢²uÞ�çþ¹ûOòÏóò¼<�$ßIÜõ_‹îÞöOÂ/ûýV”àR%æNÈ�æšF6W˜õyöÎ,“vÀ]…FÉ48Å<Æ«[ú»Ï2¹Õøô ¬xW»x,€G´/öBûc¹M/dÀ;˜¼³û èi2ï„1vÑÑŸ¤“u³ Û÷T‹5XÇì8Wð¥êãÀ9m=óâÜçü/•öÐ5ß8�¿Â*ËòPÖ�íæhó·Âêo«�õÜgÓÇ­öU/Ó§ý5:÷1ënÁ×üÛ‡aÕñÍf<ÛnáÛ>ë÷˜G4ç²’÷¤rÉs»G˜îî.•ijCà£v-ñ™À/ª·²aë¿Ö:¯ùLྠE^ȧǃôø4 þnbÇ€hÊ­>ˆ ¾„æ„ß—n “C÷ˆ­/f· HAÇò´ùAÑ8zÀADΛè€ó>þ=úŽ@G #И" ΔðÇm%Âz3Ôîî¶p}*^þGòOb<Õx¾_8¼Hþ뀤¥¤ß²<[ôl0óæ”g‚ÈÁGÉ¿gƒ@Ú•Ø1 ñòu¾À;bŒšs÷Ÿ„Þ‰ÿAò/]¾ŒÀ.^"ÈdýI"ô”$Ү桋´u€Ùš‚=™ñ`¼ÑŸ†aÞÎ ݵjßèqœ(^ búq»ñ7¡8;Ö>ZH±l ¯² Û=ÆÎºî¿écáVûª—éŒÓ~¥çx•_í2�ñj—é¬w n]`ƳïŒ�tªm¦±¥ØnGí~}N›' wöyTI—°+m\º¾VÒþYx$ÿÜퟒýxÑŸp=ÝôÝpƒ½þFøL ºÔíÊ·oßv'¼´xY €/³n>C/ ÀÃ1´ËÞÏÄÈ~² >t†öQ¡õøŒçþ¡xlâ­F Þê‘ë~w:�ŽÀ‹G€¹ Q¼íŸ%Ú8î>ÿ§„ØÛÿc@ô~Ïû‹Ö qw÷(»cîþ3cse`Æ GƒõLв¹äß3JCô�*sÛíxP¿/”Ðë›Xz’v—üóþ€xy é|çÿóç]L4Þû”ìÇ å{ð:çÔDô€Wi�~ô_*YϸuBá�ü¸ïî®iCó��Ø.U'û§ŽQ®ðÜó¡)>žfÙ^e#Þ1Å}9Æ&ëzl™w ¾Õ¾ê=—v�ñ³¤›e§âØÙ¶Búk^Æ«�u*4^ëZf¿œçªZ—¼�íýJ⯔ÃóIÀOâóbÀ� êɦXிÈè¿N)= —*Á� ÞˆÖf¯o±C@z\˜´^ºßà.À÷¥Û0'þ»?¤�vÆmo¸»ð=êe.¶nkN¶³îߎ@Š@/¤`4Úèt:g'@ZàÎ$ÿJl5a üFwøã%Ƴ�(y¾$ñ§±À,ŽÙ¡g‚ÀZë‘ñ¬Ï|h|G=ø.7/Dõ�]±€„^“áxPɿޠu¡Whï¶þ+¼�±Àg1&ÒrŽ&ÕY¶F»OÀ‘n–¿'ÜcÁ¥qæØf=’ Ê\òËñ“«ûaÿ@ó€”* fâg�‘l$·ÞVè>lÕ¯zKåo¥·ÚW½ciúSmF¼ªs �u�:™6^aî×’ÌzYg„[oáù\ÇÖç4Pç†.Ë»¢ùL ¼íŸ;ý|9à£øB£pyä%ú³ˆÏê‚ÈkQâs€qÒK+tíC�ç|—ùî�£Çb9äÞ°û#:¼<›÷hý(GFÿ ­SiøOxŒNý]þí§áD Îà ÷;�Ž@G`=̈˜‘y‰-ÛÛ©~ Þ0mùg‹¼`7Àþ™’*€òÉì�_­ÌΨæ Ú|Có�ÏþvÔî7ú?É*žwd›œ9¡úKòÏ‹ 5ƒVgvI;1'ù¿#ùçÎÿt÷ŸØ|� ã¥]qïVsÍÝçÅ#¶Ðyî9¢w.}Ø™u�Ö1n�·=÷¹ÒðÍ3´î¢3ªöc™i%;q®gècãö ëq³N†èSÌ ¢ÐK²‘­}l…ÕÿV;ëy ¦�…[í«^¥i·òÖè‘͈·æ'Ë�®ù³žaÖ7Ï0Ë2ny†_Óå@Ÿsœë�:máçN?;иŒwÞHN\|Hê#û׳ÿw¿ÿþû­|yÁ;pmûÆ£|1 À¸|ù2äR_øÖåépÇϺÖ1�Œï,Æ<ËžizàL|»#ÐètžF &‹š4Æ€’Ú¸»íä_w»wHî„_·Xöx|úZÍÕÊlÍ<ðQ¥—æƒ×™"< üQÍÉ¿gŒa0éïq&Ê;;x@3éÝä™I´xñ@%ÿ÷SòÿÛo»íÿÒ%Nz}öŸ4Œ/È–ÉtÔi2Nl)ðŒ�hó€YÏ|óðcãÁxC?s±ÈüŠ/ ÝZÑ7�Ĉ¤h‰k®n×<ÓâÛÇc„£ë’õªîˆ¶ÝVXýoµ³^î«yÇÀ-ös:•¿FÓ¯-:[ôæüdþ^ý[Ï0Ë3/ó3n� 3¾E×çPÉùþüÔy/W±ÕŸÆ�ùc1€Gx¶ß9ŠR¿¿×gµ|«÷¿~»ýí·ßHö‰»\Ç×´ê“^‹ò�ݾŒÓE.t¾dÃυ˱ÿ(€Y7ëUÜz»‹è£Ô>9;ÿU/ËCï8ˆÈù>ÙÏoä=âŽ@G #Ðèä� ªjÞ·ñß~€’{vp÷ß;xFžŸý?vÈÞ3ÁHüåÁSeæVix¹Š< = „_ ²Zsòo¼ÚÑž ,~h~,èHþIðÅaë¿fÅñÂÈ1‘Œ8ñÛƒ ‰fø˜BaÒñDÝ6™ÎzàYæ¾™ŸiÛ½%HÿóøÜ÷Ì÷çôr,ÐÍ™iãÀº`m¸bgMw1žåUçÚþ·B÷c«~ÕóØ*+½f¬¼êKç~c›u·à´³¦—åÇèÛ.ÃŒÛ<óáÕ‚Œg÷'(°»ó/½Hö�ª,è4zˆ­ÿº«/“»[%ù·Úp£k\¼@ÿtIÓçDë…�ú"ªV/åüaä¤:.‡ "÷BÀîj§#v\Â�µ ç?:ã†èf| �N—3Ž@/œñÁ_øç×¥#ÐØE`”0D²J¬ªÉßîå$¸T%»@}:j¼)_¸²ßxÞŸD™¿0'õKx•™.UÏë14ŸY%8Õ ¿é‘�Û¢Ïă·øÇ&ÔⱓAÁØ}PÏÿ³àÁ ãKà? ¼/�G4 �‰8×|ÇX�Ÿot2Ï×§ÌsŸ-ƒÎò9¾í2̺™ÿpúæqÍṟy,svèX/ãI^ƒ@IDATNüñg<#tñéši÷Ám݆yUg+m½%XÛXÒý™2Ç`©Í5�*?–¦íj“ûSeKt–Íá£ö¬kXu2¿Ê2m½%˜eÎ%kËÍÍ¥mÔºŸ.y\àxEÉîs�¿éÓÛO/¾‹¼}C¾¯¿]þ¾óò?>�H¦ËßÍÝŸþÉê'/”Ù% Ñé �²o[TNþCO< u ýÀwÉzæ›g�†�ÕôÀjˆZ¡#ÐètÎ!$Q§Ä•;á~€ÄŸDW·}ö»X,�Á.IV€˜…­U⸦ÃÌ� á¹xæmˆÐ3L •’Û­t–‘ôó([þ5™}´ã?I¾j|*�øLñˆáøÁŽêäR·Óbmß\ðOÉ|ó¬—eðªÜzo2®:Ö:&�}N¹ýǸ�´þº@ƒ_ª}¸ó±¥dþŽóÈÛJg?¶ÙÝöÝŸ¡C¬¶”5½*¯4mT^¥Ý�­üª—é9|­sv™¿Õ‡mFpÄ«~­c>ç½*oú÷…(>÷‡ž*x¼#@òÏ"“‰?Ûü´ @¯F¹¹úúõëÕßÿ­'žôÈÓôH€þŽØ À¢ñúÚ@¹äÙèU1ßÜž/;är™Ï<ºš vù3mÈF8>² ºKG`�^؇¢‘Ž@G #Ð8÷�\�°Æ¶w%¸$¶$¹q—{ºÓ y,x` œ“vÏØÏÕ<›óŒ�f��ð£ëÄ�:ÜíÉŸ«Æv §1³Û!*ãŸb‹ÄH5&Ò»Iv,”h2¼{€˜âWíQߥʳÌ:†YwIÏúoæ87Ìc¨cvŒÍ¯�ãAÒïÇGÇžý;¦ÀŽmæÛ—y[é9=ó—`mkI÷GÊß-m¬éŽä•WiÚñæø#ÝÊËtÆG>—äY–ñ5?Y·â¦Gмêßüéœ!Éç“€“ZÜù—J,�ñˆÀµêGé|ü"=’ÿxöß/úŒä_0vÈ‘ž†úÏ?)Ùçe�¼3 ¾:@#*^à�/©5ù¼†Y\ÚÍóez„ï,:éw®D VÔâŽ@G #Ð8�0AŒªdˆ„h¿@‰<0%¹Á—<� ų4à\µ^–W^Nþý`©!vžù� «¬ÒÇèVÛçУx®ù[³™“�ø#í�ø[y#ûj{ �u3žãTùK´e#h^CåsΫˆ½»ó¯ä]—§{^ùŸ TÿA•lå�;ÿZà‘ôâοlô¯áöN‰>_Pî£W¢ÜpçÿB� Ј6IÝÞkÁ€— êŸÅþ倾T�.Çô�?4_²�û�/óÑ­´yÖ‡îÒx�^x’ft:�ŽÀ¹F€„"ª&qq§_Im^ðvwd$ÿQI<°çV¦¦¹zÈ?kü3«óÌ®âÌ*™eæbà¦þi,ô� 1“çHþIêE“ôÇ"�EUâAòϤÈ›—R5{?ñHÅ×Ü·9œvsYJòFº•—}½5œ±äñ�hÆd�,ÏqÈx��mâ¼×qÊþF¼*·?÷a+m½9Xý=WoÎþXþR,—|­ÙÍÉ_‚?ò1âÑÿ¿òŽ¡«î\#~¶5¾«ëçp�Ò¹%öîÎÿt޳ ÑÕµ* ±+@×5ó> aÀÛþ¹Ü*¿¿½ýý÷ßo”ð“.�è ªúbŠ|Ë_ì€O³ªK‰¿/ÏR‹K5ЗmCó€ÿKØQO鑎užyzàÌO€~G #Ðèì"0MwhîÆ@< ‰�_~wÀY aRõìí¹Ð 5ùÏ ô–a­´í’e[f�û~ç±€³@Åñ”ìG „Ç€âÃc$ÿ±8BÒ/šwþY8 ÊÕŸs%롳U×zØŸkã5óé{Ž�iC÷½Ò™oÜ]ŠmðŸk–�[f}ó€÷Ï0óB!éÌÑæ¯ÁÜÆœî�9ÛcøŽã16Ö]³]’Ïɶò·ê¹¯À‘MåCWÝcÛÊ}—ýUh¿ægžÏA­oƵBà�]$û$ù•×ó®­cò €$ÿ7 ²ç"Æ}žõ¿áó€_¾|ù®÷|S�õWtd÷ ZLùÆ3\ι´ï/³ ¸D»ËíÒv¾p>^Pwü%¿]:ûôÀ>�t:�ŽÀ¹G€ ¡&lQ¹qã-î~ I¯·ÀK)’[î’kV¹iv—g€Ä:ÓÆ™)z€Ò®ð™áÍU} rì�ð°;zÀãÑ„Ùöû»ÿ$÷®Sâ‹âéØx3¶c$¦®ž”CÏëX^u«Üzb³E/Û¼&œ¾çqo¡—ú�}õ�¾y´å˜eˆŽûa¸ÆCNÉú#:”6þT_#³-:#»­p$3o Ú�õ²¿Ì›øq`u­ŠìŸë¾tÈÿ㋬Pµ(ÀeõN²[�k7Òcà»’üoZøªGø àq€;ÉoõÀ•®$çRêÂЗü ‘C[>‚è¸DßEø‚j[Ëv†è€aXšÙø5¨ÿ˜~M/ºÕs�À{?ÿV’Ò©úîu$²šÆ]m%³$ýNüŸôó .ãKçRÖ[™5º2Ë›«´e½œðÃßRÜëÍø\ÒøâDŒ �ì�ïü;ö†v �wY¯Êçdð«nnçWãk}ËãZê+~¬kŸ¦ç쬗åÙ|ÓK½g·›yUgDÃ;¦¸�9›ÚþœÞsù£8ãsÍþ¥å##^Ã’¼Ê*�ŸÊ«´Ûšã/Ém3çl'}.iýË~”äk}÷ÖIºD—|€»þúªé%—T.†ßt®}Ó5î›t¿ëÙÿï@Šø÷¢yÙß…’~!ˆgÿY�~}‰º|f~¦%z²`�’.Ð;Fÿv¶D ¶D©u:�Ž@Gà]GÀ ³©:£2/trBü‚qv™û`ÜÐ:®É«þ³iÅ‚˜x‹'£8:n–i2}дù™Yu²,ãÙhÛf<Û¼eÜcd θìk â?ÇÔ¸¡Û_£­·â‹B¿FeM>²y)Þ\Ÿ¶ú_³?U^í*=êßšÎH¾…7Ò¡ý9~îÛHÇ<Ãì+óì§òLf{�Kb?%ðNÌ�¬³àZÉÿ'é~Qý&íßUoU¹Û©äÿƒÞú©< �;½à†]²¥rBÛï”ÊAâ�ží�Í]곞õ³®åøàðD–¿Î#½pǹGÙèt:)[æ=è„s$×äã¥PÏÔ–üYXk¶CöS ±QCÌ()ѧ)F9fŽsî—yØi X-¶Ù¢�î½ÕF߈cu|èò–±W›ÑP­chßnË| %óƒ1ñ,7o ùÊvkò¬û3ðSƘûµfмÚT:·?—ô«¬Òøñ–øµ#ûÌÛ‚Ûçš®å@UÞúÏIíÄŸ±@¼�ªŸDÖÁo‚·‚ñÅ”ì_ ^üùçŸØðØÀÍþóŸk��}úÒ =ªYžq©/–|™ÍŠ´1'Ëz�ŸQzàŒvµ#Ðètæ#�gHN0Іò)É-0Ëzn9èÃFgÙ“Jot³]mŠEŒ\5v¤¶éCÄp’¯Ð+ èHW“åƒöÍ7Óò9>zsþmk_ï2&�×Ð㪴ù[¡}£oÜ1̾çp·“åæ­Al(n¯ê¯ÉÑ·Nµ})z®o[ý¯Ù?G^m+½ÖÇ5ý‘|+�¶Gºs}éfÞnY^yYf¨ÊÃÿzzéžEÌD^ñxÛxàZ5ãοôÐÕ]þËOŸ>#ù×;ø< � |-;òN€Œstå¡â[.íØ,éÈ5†Þ €�cé€s<ê=æŽ@G #ÐØG & ™œäí)9ÙÎñ– Ïòæ´�{6g8Ò­²J�lNâM±`Izœ§Øb³fÿÒò5KãX³�“Ë?¥µ�J/ÅÚº†Y×<%ö|0Ž—Î›¸C.»ø*Àµ*‹Ÿ•ÓóÝÀÝçÈðã+�—w²¹ÕÝÞ øUïø¨],�ðs™\ªÑ�¢Ã™mê%Ý—]ì¬7ÒYäi,½ €žYé€3;à=ÜŽ@G #И‰Iê$rÂÐü)á áûÙ×ÄŸñ:ËÆÏÞGÑBæ¾Q�krÛ,ù°Î³ Ç.x«É©ÛßÃIß“mÔëo­oÕ™¿æã­É=Fúm|‘ ûÁ–M©Ç(û­²0ؘ¿Îù´íš=ë€{à/QžëoÍþ9òj[éÑø‰ÕšÞ’üTÙ¨/æësN¿ò3m×בfмÚdÚ1Ì}Éò-|ëÌÙm•[o—|?W–í�ª/B÷_qr‹fîþ+„qmQο[ÐÀGHþu×ÿÛÍÍÍ_ÚúOÑûÿ>æ9ùÏ8! -j\Vm¾XûËyô+ÑÈj±¯Ê‡>�iL»A�4›÷.#Ð ïò°ö ~Tt�üQ®Ûïˆ@ÿ7p�^¢‹ú;çXkoç­WBíê¤#¦‹Ñ*³¶¥ê®YÇWÓs�Pß©z¶ˆŸ¬k=ב<óÀk±Ü|ÓzøuÇ�¿xĘªes+N>,¯´Û>NóSÍŸeç1Í9ñXçäk|üg™6>‚k~Grû©²ÊÑÙ&÷7óçpüåRí�•ã«úÈþOÅk?Žõ³f¿&§½9�ÊŸ£×âRíê×äK}¬¾æè—h£úÈtÆÕ‡ƒ“/Ë„ÇËÒ»Vìtwÿ»Äÿ Ö�îöÖ³ÿŸ¸ó¯mÿ‘ü ¿šð%œvÖª/ÑYžû˜åb, XŸ‚Må… Î7½p¾Ç¾GÞèt:9J>4‘ÛU%·º£sq¥IÞêÇ�÷‚zÅó…^ù|¡·>]A–/fYk•&³N¦�À“ð{¦‡œâÙ£grö� Ü šoÝ-Po±Úõ/ÁàiÌšÉÆøõŠìXˆEøŠEà@Ùéç±Ný£Ÿ.$¡71 sɲÌ?'œŒâ’yYÇx†Ä˱6œãåØfÝÌ?w_޵³>ö”d�‰/VÜ-çrÌ;¸ÜÆeUI>�Ä ÿEÆsÿ<p¥ó}NfW_ÎMÏÁ|aDÇ48e‰¶l§¹k»ò,kxfè€3;à=ÜŽ@G #pî% {ž'²$»ÔXPâ¯EÝöÙU`ÕºÀìj­ÿ¬Sif”ÌîXpA¿ÎøàQ²/l¨øpÍòUœ¤S•„ÿ`!>ãeÜ,|Lãg!`¿`|ZÐÄW½x,ޱù•~ÔԘʂ@–�ÛGå¿7šqÖXT^¦�:Vø0xj±Ÿlo¿™—ñ5yÖ�ÃÝ狪o=ó×ô­÷\XÛ=Õß?k:#ùˆ7×Çctñq¬þ\»§øÚÒöH'ó2î¾ÍðøÃ‘(v�À“Øë‚¸+$ÿTQ@>‹¨ [É€[“ÿlÎåH§˜¿£v¿™—ñ¬¾$«ºM¿³ôÀ;; =œŽ@G #Ð8=š¬Å„V¸]ò¯¤6vL;X¸O¯ŽD˜d9'Ǫ̃<»ËüŒÓ»íĹX·ÎÖàS ±wòoøœE€ýB€ÆãÔ¸cÑH’?ÑûEx®$™¹¦„¾&‘•ŽA­üÔÄŽã¶äù[-[îåeÚ8�â¸f?ÇàKönsÎßš|ήò=&óéÓR©úKº#ÙœÿçúµµÅç|�ôF¼Ú�-:Õf®½‘Þ±¼Sú³dSekô ¿2‰;úº$^rwÿ`€ŒŸ2-肨«¥Î# �þ÷~J•Y\òwÜ�¸ÿà�pìºtöè€}(ét:�sŠÀìäÞI¬ àyÏ-Ü úî·>‰0‰®“wf^àžåA×JŒ3/Óö�‚ž}å™|ãNö ½ඬoh½ #Ñ'™¦j|†±à¡„ß�?D 'ñc·„iOp`*ÄÛ<ǾÒV7ßô̾×tߢÜñpܼLçqe™ñì£ò²í©¸}ÎÙ»ý99ü¹ñÌÙÌù<ÖϱþçôOåÏ�ÃþÖäÖ3Ü¢¿ËMmñ2pK»/ÑÒ1íŒt+¯Òµ�–ë¼;xi_àïPëžñ9@¾�ÆB€üÄ#‚\ ó¥zk•jô¹œÂ4¤øß�ù;îãïÿQ£±³ˆ@/œÅaîAv:�ŽÀ–h≓ãƒGÒ;üîvKy—$OÎ�l“T{¶gž!ªÆ�”Lc›iã¡8ýØÒ80'óÆm¿îÛö¸4ÆX`¬Æ§;ÿ^Ùßõ�ËžØσ>¦E€à:”õS8û±ü\!qȱɴcdy¦Gø\ ±·¾uF<Ë2ÄÎígþV|ÔîVÛ¬WýdÙü9cØâÿ˜þ£ë¶·Ølѱ¿SáÏh£öm©Í‘lijÏ,Ÿh.j\ÞuIÔõQ‹Táñ€tâ‰ã1´€Í±•&(¶ãnˆÌ8ÐÅ:¦�#^–7~fè€3;à=ÜŽ@G #Ð8Œ@žìÇ$O“:Ùƒ¶þó€é.8� CRL¢wÊå–Y!31*Ét¦Í{¯ãY›eNÀ³<Ïm t™óa_†ncNãˆçÿ5.îúGeÌÂ;1‰13nb�«x±0M”§É²»¹‡Ž·å•Þ+&d‹NR×(qs<è=lrÌG8zÏ-µ?Ïñç>ÎùÈq˜Ó9…_Û­íTù)ml±9µ�-v[t¶ôñGê¼Dç|ÌñÏH¦s@ìÝ 'y\–Í›œôOOp¡¼¸ÒN /ã[`tc`Ãå{_ö�],3mÓ ;½Ð'AG #Ðètˆ€+*“»XÐÜ�îßÀ��K��ŒQ§’lçä~­¨fžéœè#gÖ–yK³8ô)ÀÍ ÿ¤Ÿûcñ˜4FßýgÁƒ„ß ÀHö¥ãXªEOúEÉ èŠú™&Ø&÷Љ؜|¯øÎÆïX0ÔíXïÔ˜Õãf¿K°ögI÷9²SÇ´Ô¦ã•u~D;Ùÿn›kökòQŸÞom\Kò 2.Ãüí±µ?VDòŒ¿.•ñ€ý#’ó~€ü¶[ªÔžèÁ£øß@ôC´ÿUø_@(¥ë'ÖÞGæ5~fè€3;àïi¸Kê¹qžb3ç«ù/�>>/Ósò8š¸Ï�ߺPwH)ñ«ˉ, nàÀ’ïdd²a¶Å³÷@í Ý'ð’.°_ Q§ ˳7ð°Ÿ ÀžÎzðsA¶Ti/Wëf^¼ù_cñÿHø§E�ËOŸ..´B½ŠIe1ÀU¶,Äâ1¤RÛtzÇ~¼+zÓÇeéz°&ϾŒ/ù³Îs Ï¥9´¿¤³Ö¿j[ýUÚýÈ~íÃ6§¶¿æcM~j»¯ÉnmŒGÊ¥>]×4H�ëÐ,p)�„_h\ÂC0=" YðV ÄzÐÛrÙ.t([ôÖtvžú÷]E ÞÕá<ŸÁä‹ïùŒºGÚè<7$&TJÅïŧ"5¾OŽ5á#9¾3Ô\�íñwJ|o•ór@vPHüïT÷P<è\ ˜-æâ<ã†è¯ÍèÐYªû±Hϸ_ô4¶øÊã™vl›x[耷u¼Î¾·kÞ³P #ÐXŒs›'Uðâîÿc!@|'Ë@îþ{@ÜýŸvp÷ß;.IöUIx�sÝŸg\£äŸN{†g½L›‡žK�¥A/Õƒ±H×´“ÿ ª^ˆä_wü/¨¿ý¶ÛPw�ü»Ê–…j$ý{'ÿ>b‡ÐÿÏŽ�oc7²™ó7ÒŸãÑÃìÛ>{¾NehŸêg½¥×¥ñÒãþ‘qû‘¾�9*?»[ÛéÁ«Ç8�U2.Õè8é\¬z9Ï´]„í¤[y¦G»úï`¤7Ç{®ýœßæ¿âôÀ+>8ݵã"°va>Î[kw:ï)uÒv�(+aGNÝ/hðA :QŽ·ãk¸ß $×;x ž‰gàî.’ÿ°“Oë˜L ŸKþ‰u�f|Tê¬�6Æ–h�à ?´qÃx€’ù{v4LwÿHþ½ý?ïàî¿êê#£Ž7o�šhÔsu¯˜ÛŒtG²­<š°®›µaÙ¬>æôÞ k ^˸_¢/ácéøn�é’�-²SÆ1²ñ–Ú×øöwÿÁ¥;ª¸0߸¡/û†æs‰‡—!²¥²Y_ãì]K‘|'²^x'ò܇qì…ùÜãÕãïœS<ÑŒÄxJô•Ýï“~äQ§…'îN˜#QVt^P¢ì€ÿÏÞ™hÇ‘ëÊV–Ügüÿ}÷tÛn[²_ì(…¤²J³¬\‹ÎHVŠÉÿR®½ÊõvxQò";åf¾‘¨†Oå¥_qðÔå¾.Ôíñðý¡6pȨ‘#þì![ÿ‹žc ˜à_}Ϫ?ýõQ€= ª ‡Žó®>ÆR~ì¿UG·i"iI‡N«#ä[Ó#¯u$Ý{§«Þ³~Wß~W½·�ÝǶKc'¯<~á¡«§)Çdi暟9²í�ý¦,ùRΚù^9Ißô�k  ïü„î=öeýtÔ}l |T l&ò 1²\a(Þ[þ %�3²Á¯Gr  �Èà;”–Y•½òj)…k¡ŸÕ êælÐ}S˜6‡M?ŽQhk1p€¿Xù_�`øç õ€�*ƒw³ßÏ¢íî¯�üoÛŒáÅì¥G¶æßK—b—ðCéZçCËù]ùžJiÿCõñÔíH{îCŸº ÕÅ}ÚüдOÕWõqs€°ÚT=M\Ñ…æÅ9¯ôÊ�¬¦K'¼ÃŸ”á¤ÒC︃ÒÞr’6¼å§×mÿ�+ýØ[­�»i`o¢i™@¹A1ôˆŸUµÌ¶óÀ²[ü™Iø¤µ«`m™è)—4¡™Ñ%|*/qîS¡« ö#«þ:ÀÿüôŸ¶÷çò?ÎÿªÛÿþ¹Ðž~cPíðªÉômý~ïñèqo,ë÷š~ '_}>÷)?ùOÑZö©tï=.z}Kúxî¶®åGG¿{,¬ízŠö¨o1ä5¾G©*òð©9.ñö„Ã;Á=þ<&ï=ªé¤¯YmxÍO§Ûvo <Ç üÞ�xÇZ¿ïøá¾�®Ýe¢HÏŠìéWxQnä”àÎýqyyö÷�gÿ~ðâ¿F.ÿ]ÛûÈ_*í¥Êú¡¢/Î.1  ýÚ8�mð9ûïJǧW�^Ù᭔.D�Û›ùÕ²ÂW#€·ø+¯/û£=â‘…þdµ¬ø{«ÿ8÷ð—‡ÚkGÀ¼ý¿€Þ~G„ªü»¼3öÒìÉTÜt·ÅÏ„/È<¶M§Æ÷]Ê®ùI¿†QE•UÕÜ¥üš¾ù} ¬ú}/z}ª~¬úA‹OUöþy9©úf°ŒÒÕáiÔY(éöñùPù½´-k ìj  »jiak 5Ðh ¼ dRiÐ+pNØ—ùîÝ„áîð€~hå¯þÈðôÇ0d?¾};û)ãÀ•ÂWJû“²Tv4€ öÀ&/Efg: 8¯ ^ÓdX)yO¹”gÐTâ_ƒZ†�Baoñ?ÏüÞ—ýý÷¿gŸþóŸ³3yoùgÛ¿ü/ù þøÿ,#Á…Vÿ/Øþ¯¼xÍâçD>úc”>$n¯?§ânË[Ë»­œšö=ðô7¿…詆#K_׸ț>\u̽ýÖ>=\3‡œë}lyo(}•‡§ù•O8”¸ðƒuz^í8â÷xGöŸÖÀ) ´à”v:®5Ðh ´^­ê _WöÃòYÁg¥¥—c…ð�!À«þ õ÷ßg¿ð’ÿRš_2$Ø£!0@z€iƒkÀ¶¢²ÊN2fk}ƒóAþ¡™ îQEßp™ý1ËŽºmOÛ´Saú%ìËþ†àJ¬2ø¼ò÷ø¤%oÒ¥hÍùž,qMß±ÚðŽnw­5Ðh ¼W dòJ?á1øûx¯òóê?€=«ü^íô�Y¶û›’Gù‰»Ò€OÚðIy>)ìÏý©NfPLjYñg…}®ü‡W|À}@zf]üg€Ë£CráC‘íÍì"7ðW½ø‡W­ÚsW�?ó7¨yŽ0à³úÿ©Øp.�à¢ìàì ™ØÓ–¸ÈB‘ß…OþJk¾*oþZè¨þ&ˆÙ“]ç8p�ÑíZßZv‡·cþ¾úxiý>f,ܧo©ç¥ûwŸ6>4­úÄ+Ûnð çUJšÄUþX|ÒäßéÂWËD¶—&i›~@ ´à>ôîrk 5ÐxËÈ„q�Úð@÷6ÿBYùÿ&ðÎ*¿©Àü&¬xÎùã ú+¯8¶ÿ_à•ÿ\q2*\È`/àÅ€¹½^ Üs<€™à—ÕÿÐÌÞ 1Àïyòs™ÝQ<»V#@>ï÷K«÷þÄŸhå1\”•€?þ"´nÿ/;0xeΦeb:#ÄìÉjü1þ¶|·Å+÷=ÊÑE~é_ÕÏ—4¥µì‡–ñžòµ~ï÷4ï;~žZ¿÷kíí©Õ¾ù2 ?h^ë’4•V>­2ÂyÝW>é�Ñ5í>–¯åïTmx§¶»Õh ´Þ³2 ¬t^ì'pøðcø!ÀÏjÿWøøo…Gæ�zƒQJø—Òü�W9ŸUÞªã³âuW¾Á?Yo÷Í.P4†3· þ™…eüž—xÊáã2 ¬áºÀF€q$ÁÆñÜðoðŸ ÿBî¹è�³þìàƒÀgŒ”†sÿ9ÿ?wŒFd2Š8|hÚ[ÕO|è©8Ò$>4ùj\•}]ä·±öwOOkšcáceKÿå­ßç}êÑïk‹j¯s~‡¦b+Ý{ÕGF¶•�,¯}âïq„ÛµNj  'ÕÓ‘­�Ö@k 5ðš4P'}á¡öã9�Õ@?(·ûÑ~ûÊ#S˜Ýßþ*Ï~ø¿Ùê¯ø(í?Dÿ)À?dø§ä8&¥|/wÌ/(.F€ÌèÈ>ô¶Õÿ¤«3>ê­Ž8i ˆ@àŸíÿ¬úóy?.ýûè‡Ê³ÚÏ…¹ÐÀ¿üPåðøûÓw<PÛ ŸIü*_÷¥»-~-ï#…ÑM~#OÕïªï§.û©Úø–ËiýÞýéEW¯qªM¼²WðŸ×¸ã½R²$ <.i¡Ã_dõ_A¡5íÊß%Íš§ÃïPmx‡µ»Ôh ´Þ³ê„¾úyþŸ•< ^àÞÛþÞ¿ê?€?EÿýK4üWÒª¼ò6„£çþÿ¥²þ¥tþ €äªÜ3´ @÷Úü„Û ‡‘#̾ê�=ÓÌ¡Ó >í°!`¬þŸ-¶ýcÈMÿМûø³ú?=ÛþUÎ'�~hõBô³y™˜‡qŒ_ãf!Kž*_Ë<%KÜG¤ÑQýÍ<•R6å=GùOÕηZNë÷nO=½–ñ§vÌaxhxõ(ñ{42:¿†#Ï+ÿXyMC¸]k`£�6lÔÑ�ÖÀÛÖ@�0¼ížtëß³4:Ù½Ä;ÕH �œ[÷½Õ¿ðÈYùgÕŸU~|VüF€¯ÿú'ø'<ü7üjÀ`c€ê†ž+!ÿ‡êË×lP¼fy‡Y›&¤¹O(ùìl¬¼ëVÂC¿•WûGÕÊ 0³@(`gºðúÔ5À> xŸý‡× >€ß«üƒ²í?Ÿûƒ÷¹(ž]òÞò/ðåc#@ú¨rÿy÷¬”¶F¶ò{ad¸šç Ùþ=*n[Êë =¶ÝùÝìõê±e§Ìcuçý ü9Ó/>à�à³h.úó%ä¥�´ª¶AdŸÖ¸=Þe¹Še�ð9–&òÐä%WùÈš>\Ñg®ÃS9[¿§´sx_�â5�?µ­®ü§Cy)£IMšÈj¾Á4ÓôAhÀƒÔÖ™Z­�Ö@kà)5`° àöE~Ós¥^rnôÿ^½€©>ÿJÀÊÃN€ÌêB©ÛÛýE½#a¬ôç3~P{ âmø¯”Õyïà(€ü'ùsy~Qƒ~èàÏ•ÞÕiP’v ²RºÙ)~�#Gþê#M\¡µÞÈš>�¢ë× Äž§ç/Sjë÷´žß‚~0¨ñtȯú[hÒ�WÃðó߃cûOkàhÀ”ÖYZ­�Ö@kàé4xø ç&ÿ¬üs¡à�|¯ð/¼eÊÇçûü)¿Amr ij[ <é9ãÏÖÿ´° o/>«ÿP€À?Ûÿçx¥õª¿¬wÄ@äS.ôð]Â*—ú \d>ã�@ÀþJàü§€ú•üO­ÚC}»ÿùÞ0xvøè‡Ì»Äç|ÿçðJk^tÞö�`Ç@3 ßÌPÕ§¸?}•'™õ0ÒTyÒWº_eáCkÞæŸ^O­g~í®5p_ý~4ý½”~î[Ïõœ\^Œ·Ñ™ALÒ"ƒïšh÷h ´àÑ*ìZ­�Ö@kࡨ“Uølûø÷MþȬþs¡Ÿ·ð _þÄO š} Å àã’]â†blpXu³ò/>A7}òl ¹Ü<ÿ¯0[ÿã½ú¯öAYù?��T¼oËÜ*—LC‘©ÜRwŒÔéÕ¨¼oõ×vü+¼ûÀ¯³üx_ò7>+ü€þéÐû¨yÐÿ,Š÷½ÈT‡ïðﶪÍjø¡ÝðržWÞÒ!Oü�AÖ‰ô.Io°kZ‘…ÞÈÔ‚7¥�<ÇúnxSøÍ�mý�~/©�a½Þ7Ç/M½G+C×F#?·¦ípkàÞhÀ½UÖZ­�Ö@kà)4P'øð€\h>å7?ã§•~xŸÛ×%~\äW=·øöÎóïò¾Ôš°¨¿Ê÷è¨+”º=㵃Y@zŽx[¿ÊôÅP�xƒ�R(`Ú£€x—?VÓ=ã|òIFý´ÅGÐ�PØzk€Ò] ”c¸¨ø_êS}Wò?¹ÔÐø—g‹ÝòèÇÀ}|™ÀŸóC&þóð6Vˆ¯íN{7Àÿà§Ù™d‡Fv*Lš8ÒíùÄCkY‘ïÉ×ômi Ï’ßE»ûk õwZgÏ©�Yÿ¥ô+%™ÿºdmcÀª�?Nmxœþ:wk 5Ðh ú¹ÿÀÕa ¼ÃJC;1\ Àå0\Àåÿ{öK¼�¿vþm(<Æ.ä‹ÿ¢ìTüÿE.ïöŠÌà_õCqLž3�NØ#î˜lMSÃ)³–›ø•®i’7éyÓ·§žá|G¼½æÿö·þN?‚§Öà§ÆÈVJÒÈv²þUìE´¬5ð ´à1Úë¼­�{j '£÷TØKþÚÇÇ}'ákzÂöz®“�L”mù>ÇÏMýòlù¯žU~Àÿþ„åÿô+•³ç1ði¿êöÖÿ´ ÐÇíÍμ/`òSào`P˜æü=óø‹f«½Ë$ eS.õÈücp�õÃmê�Q^õÔò9÷ÏŒ?äj@n÷· àPvò¯F»óAêÊ6ÿ€Æâê­‹!‡Ç%Í!t‡?EmìPYw>ìÔ™òWj�©/n¯ò9<Êóó¢,0Ê4;Â�¸¤Iø9)}xN÷Üå?gÛ)›ßÝ1÷Öûv¬_O)oý�Öæsë‡1šÝR6ó~’—\öVn†™ÿJê‹ òµÈ׸ȎÑã? Zró­i  = Z­�Ö@kàÉ4�Itë@@Ï«ü¡EÆ¥|ÿcžóþs뿎|Á+ÏW¾©¼ÿ\èàÇÖÕ·]¼ËL‰4Ì´’6+ð—šÔýЄî»õ7|vä9º0Á>ÀŸÕÿPx•Å?Ý\hªI#—¨ª\~•õ.€AÙ%Àgÿñ10`d˜;ò1dåß”ºñʇÇx�‹ /U'ýø,c†/TØÆ‰Ñoúo'ù ÂN…g¾ä—~¬G(eE.žò6ž¸U–ðab}<^鹉§J·ù!pMIçüwH×IZ­�÷¯ý�ãÅ‘üÏÛ¼HÖ𢑚6<4ü’üÞAÊ™m»wîÎð®5Ѐwýx»s­�Ö@kàå4à?å}Ö^`ÝgühYñÏe|r±_½ÜÛÿe ø U¾¯*+Ÿòc›?Ÿó»”÷çüD™ÕYPåµëHSgO¬Ð#cõüR@ú‡€8 ü“ëþ+ðO˜OòOW§ô ¼ÿPY¹äÐí~õÅF•#Àüt ÊŽ€ÿóîø�`lû7èø�¶„bðþé‡wŠ!€uÚd�. ˆ¶§}Ô [N¾ÇøÐ ±!j'}§lrO^e™Gvà¿I³¤§/7ÊM�´™ôqnƒÖø%ªƒ­�ÖÀÕ€Þ×/Žkœ’íÅ]çl®5ð„hÀ*³‹j ´Z]1öYñ'ÌŠ?°è÷mü¢œñ÷müðò|®ï «ü€ûAkiò @ó„É«ò½ò¯ðÇ€À;DÔœôØs %ÞyT³2x< 9;þÈÎj9À`o°#@à0èZ>oƒñ8Êgeží¢èLŸ&°1ÀTaVdð6þUž¿ ÐoÀ80Á?€jPÞlP�ÕÀ. <®ö7ý¶�‚¸†�v ï¤!åØˆ"d\0&0$L:÷5TeÓËà‹W`žqÒá<Æ0À¿·áÆPe)õȯŽrÝÎ%yñ5yÓÖ@kàãh@ï�ùR¨<á/Qå?Ž’º§¯Fmx5�¢Òh ´Þ®Axœy×\è—-ÿYåϧý0À³òï[þÙÒ/�ÿ×ÿÐÊó™¿™^y�ªº~ÈúÙò�ÀžöÈãB¡ã“.3´„×#lû' «åÜÀ?Ô옆ïðŸG»(‡2É Xü{Õ]eÈ*2/êcG«ÿY�§ Ó €Ïªÿ¥Vÿ½€#ŠŸÀ1Pž·þ«^ﵞT?”vdiŸ�¯¨˜é+È…ß “þˆ«ã ŒxÆŽÜ)ûO›fšÑ>§Uÿöo£´Åi”?»/Ü€ò‡:2¦#NŸ#?Nú¦­�ÖÀÇÖ€ÞëK±†+JQwMwªŒŽk L ´`ª¢™Ö@k 5Ðxˆ†È ?Ïù Ô±êo`/�pÿ.Ê >4a¶ôÿ9@?À?|(ïP™ªrþ³âïmÚ¢6áâiã�œò®yç@]ùç2=Îçs¦ß`€~Ÿ½�ËóY= ÿ€VÒ>åùGLÙºî[úÕ +> “òr€óÿ> ʌРþG½6À“WåS»ü>&1ꎎÜÉÖ¾K4]ÚÁŽ|�2>øªŸöŒñġʛ´ò#N iDÍ'O ê+à>Ÿ2D�áÑ/¼Û¡úHG¹ð1m¦ ¤©®ÊÒg·™v ·†#oÚh ¼} è÷Í�=/†É¹;xŒßéýõ‹Co¡%žpõKôn�ôi[ìÉ×ôk  øáw×[­�ÖÀc5੎°žh€¿ÏùÒj½‚/ ï[þ1žKýûñÿ+<2 ”é³ý+¥>êVchC­ÃÈj#ïÉ'/àÏfUG@€òRíñ ºø üáøfgÀJÃj¾³êéù' §\>ÉHüSvÀ-éq”•ÕîX�`H}ø‡§<Ž)ü þ¥'êvý¢ÿJãÝ…º-Š70§]íáÈw)Ïfø9.ÔOv…þ¯ÄOé.÷õ€‹7MZé.@ßTúŸTºÏQ ø8ÊÈsAæ°ÒTWe{<²8÷£„#oÚh |x \¿(®U™_'|�¢¹ÖÀk  O¬Ð.®5Ðh | tª À3 Çðbô Ìã}‘ß ð¬úúWÿCÆYjtù•ž¶¤E¡UWWósvÇ_>÷çÙ Qü•€$àßJ¶ÿðîÎ?(GiØ=`ð/@ή‚ ºU¦wHFZ|fƒ)«~ÀG´òÏRç¨×y† ã‚ïFP; üõ® ñ!²´¯ö_AË¡qð"#lŸD¡£ß³õŸñ`�`x ä­åL~è�°Ý¨Þ2…窿ú‹¾ùô†¾ à°Úá1+yúGié·�/.|û‡ò�oÔŸv„MÎ5yÓÖ@kàch@ï€ú*ô«­ô¼Æñ£YÊÍëíÑ…uïWmx¿Ï¶{ö ȤïŠî"_@ýùJîãÖô Cí)¬ð¸ÍÅ~vlÕøg«ÿz»5dÛÿŸc'á¿Ä³3€ãÜô_Ý�ÞÖDáOÅ%ÍÐ害3dñ¬úÓo÷9 �<ª£î / øýCC@|..dEžüÿ^‘Ž1`PÀ>>[ÿæ(ÀðW*{S§€®oÄW~oƒWùþ¢92AØ»Dáé7 Ú0ưç2¢'‡ #±å 'êÝzŽWx@ÿ —C†~¬C¥%ý/á¡LÑ ¯ô6øðÇ8cú™T<)rt#|Ž¸Þ”_êC¾:dô=”ø¤›:ù^ËH8ùþhô±ý¿M¿ï]Ÿ­¿ÓOø6ý<ÅøQ7_7›UÓTþfÊ­„´§|^¿Û\j ìh  ;JiQk 5Ðø¨È$Zyôá-öi^1.”tÿ’y›¿@?[ýñÌ‹rÞÿ[¼À}øèð+Ÿ÷ãr?V׳µ¿>“g›éÐj�?*eÀ�™àOññÒ^à›•e=†åS‚Þ9 àù]eû~ê"-^ñÞî/]È‚rÆ–ÿòßÿõ¯³ò¬ösðÏŽ§'�òÚÓ¶ÚžÑN@½ŸŸÂ¾Pucø!9`ßyDé+aÒ#Ûè[y¦,&ÖÞ%�\ÏKƒÁÞãG|d?Õ<Àÿçðæ‡Œ|›Ù-厶¸ñÖï ÄmÂê{?†�ðPïÂ�ž.¤¯ À>TðoJ˜t”!ïüжq@<}¢-¡4á”KÚ¤!Ü®5ÐøP¸Ë�þ.i>”Òº³Ï«�6<¯~»ôÖ@k 5ðf4¨¹áÕúÈù^Å Ýlïòz«¿/ö°Cj°?èü¤ß�wœòr»?gþ8QfåŸK¹ÌÆ<#SÝRÀ¡šPB€ÀƒÔÔ¼âà€EyW€¬<û8B€Ç@ߨð]rþ¶É? TÄ_ ¤~ÿ÷¿çvï�ŒÕk"PySê¦�8Ú‡§ n‡äþ\¢Â€Œ~\ÚL˜“òé'qŒ— <2jèÿR;ù¿ð+/Ðÿ«€Œ5¼1¨M”Ïe‰qDmòn€¿ôá�Pùj8× ~¨¼ P¼ÒÚ8 2&ïg�¶Ô:%sßYÚ¹RÚmý�ˆÙ�5a‡[­�� �ë—ÚGèm÷ñUi  ¯êqtcZ­�ÖÀïÕ`�‚웈ËÏ-ýR¼€ž©xVú}³ÿ »¼ÒÙ 41 p¶?2Vþñ–QõÒ–¡– FŸMSª/.4÷Dj} xÓ>ƒT@ž|@4À4aïþ ¾UÏåÃÐfw 9+擲KÔ¹@€5TUJ}©Ûà¹êÀûÀ Ù€€68­ˆÁ¿d´ÙÚWAìäÑÏJ;;¼º?èðÛ+~òÈŽ€º­?èð´c˜K{h3Îé=äâÃ�öϵsâBÞ€à™â?Ëc øŒ1@”�ŸU>uÇAŸ7mqí‡?È£“S<©O•SŠl¶5ÐxcÐoûú…¹mû1ù6U‡ZϬ�6<³‚»øÖ@k 5ð41p4«ýÙî(ÍvþÜæŸmþ¡€xnêøCÙâjƒ€Àìwyï ü�°êBf¹Úã´ë%©ú¤�M�>0Àf@' ²EÞ+÷ñQâü f…ß;'†€Õþ ¼¹ÐVœÕê†Ncúeû?þ]á1¨Î#Ô;êöN•éºi¤½H»*ÿ´ƒÙ)mÁH�´ä‹¯:ñxQ\d¬úû\ÿ·og—ÿ}v¯0üO@>>€_Æ€OzæÔOû ñ6P�ä·„­w òhå?I_ÿÒ! ÿ\t†Õø?”æ³<÷,p,‡m\�né3áû8?ƒRV-£ò÷)³Ó¶Z/«�ú;~âšóB }â⻸ÖÀM ´à¦NZÒh ´>”&�S¯áñþ1dõ°ÏYþòP¯âžíýláø{+¿(†€ÈXÕ÷1�Yo'«ý>¯úÃgÀнüc1èW{ÖÄ‚PO ÑÀpxoÁ0Ê�7 V8«ÿ> |\V—9ý‹9 ò„Ùðƒ#;wxõÐ;ê�Âí¥�ò´#»¦@2 ´#@òItíÒ&$£m3zÖ—Ò€ÿ˯_oøŸ’ ÿIcÃÆ€ÂÛ ú™ôÃÓ^(Þý‚VGŸåеõ0€¿ Õ Pè?—+½P[Îå/Ô~.¬ü‡Æ¡u®2 üU_ø„u¹>õ½†‘�r¤¥ÜJO¥ï¸Ö@k€žß@IDATàui ¿Ý»¶J¿÷ÃËéf†ûÊo–Ð’ÖÀ#4ЀG(¯³¶Z­�·®��ôƒ0àŸ•gŸ÷‡ Ù €dà/ÐØçS~òY?nêÇô/<üaàöy@¿?G' 0ÆS?õ™Ž0@ô%³³u†¶†i�Wÿ…ò¬à{‚(~C‡|®¼+ß¼xOi}{½Òd§ ÚÀ:xd¬ögÀ¥ÀlŽlîm1ð§�rÑÔF¨ÒÙ!>Ú¡°?Q8Ò�Þ† Ñ8·Iíq;Cy~h=g ?døñ×_×þË—³Ÿ’aüŸC«G¦ñ½ôWC@ê7¥Ÿ‹³@:Ê‘ïŒÆ.IüĪÿþsv® 6¨~Úq®vã?«~{Q_¬3ž›òq€wcÐ×áÐÏø˜;"¯ôX-o ´^ŸòÛ½gËòj»K¶ã/–»äî4­�;h  wPR'i ´ZïQ€˜êìþëê>å—•@ÿ7=>ãÊ'þæMþtæ¬"Ã`Щzë÷èÃÛð Ѫ´Ím²ÚÖçä7³/tØ«º0ðÏÕu€` ïxž�Æ©¿ O�JðÇ8À%†>î¢0wOØ0ÀX �üì �þ§WðÈÄ{ÔF.<Ϲ‚¤5œä 4m ´Z­�ÖÀk  O¬Ð.îy4P'D•žÚºÔÖÀûÐ@ ÂÞÊ/€³G}3¿@�/úõ„•>—ýùì¿d¦ªG®´þTþo)Œ6¨~À'+þÿ´)àíwkÝ€p4"|€(âð¦suƒ¾ð¡€ÁðÎxHëg p ¼Ë(‹20ÌäðÛ@9r–± �@Þ”|ò3= GzØ=Gª€Ò5 ø{w†â³CÃ=SƒinõÇûSðìˆ@F€_2|b˽Àÿ…âYåÏyûih�¾Óÿ´'´Ê½q븱~)KÞF¥FFgÒôí>«n.ö3øÇ¨�Wÿ|ßEâT–2»~3ܰñÄã¤wê}¬cLäwÛÿë«ÍÎßh ´Z{hÀžVZöj5ТWûhºa¯L†$˜øR=¯ô 쬟ó à÷'ûöÃ0?áÀ²™VéÂs“?€|Âà¿îðéÊ t+Úøxèôˆ°·âPJ6¸Þó”6„®iJÓ*øvÕm�ˆ¦}êÙðøþ}á�ê; þ)§¸èʪ>±ñÈÊlP{Ø¡�ÕÚí]#d€²€4+þ€~î^«ý¬üÇÿbËÿØðYF”ßFÑ �oÁW]1¤={TM¸á긙ý£<•M›«ŒO N‰âe;xäêñôÑ·ý?e\IÜðYG0âÙa€ãÿ;ü,xŽ‹Þ ç÷XùäÝ‹Kºµ,WØZ­�Ö@k 5ð ´àÊë¬/£o­¼CU™0Ý!i'i ¼k P �„Ú ÐàïÏø øø&�Ÿ¬î³¥ŸU|oí‡Þ@_ùøsW@áýI?ÂFþœŸ¨ejCÝ@{h Ômû�OC혾†GÄå}³ñÿP`õ£Dñ€ê8jF�×<â þkycÀQcC =AS}J;"ÃÀª<+ÿÕÀVÁ}Û¿=€+|ÎýsæÀ–#Js–WÊŸ­ÿ¡9°«gµ'r±»ŽöÛ©}W¢Þþ/aúæsÿ’ãø}¼k\ú ÔŸÉ{GƒÆ,ý¦¯¤&-zÂ`ˆŽøH�ä8�=#ŽøFK÷'ÿË*}\‰�»5Ðh ´Z×hÀµ.š{Ã`¢Ô®5иրáÉ1€ZƒÀ à\À‡Ûüýù>�3nòÏy~ŸáWŸñøçs~ÈYýøàšp¨·‹SÀ©Pƒ(5/ Ê4áëf¿,7@\­ÔoÉ€¸]ð™÷ ¿‚ÿ Ú]ˆKuy^3ù©�À%+à~�‰ßÿ”dÊ›9 3ï¿ëZ(xrÝü¡NÚPc#Ë€|@íʳ‹àRcƒmÿ—ôsÑŸ?ó'#À™älý7Uþ“Æ™?ÿ§11WþÅ{TõP?íª^ÁMøðT�n]ä”3�K*O온ÆÎû{'…Œ*èÓ_ PŸ¿ü^ðè Ïg1„|F¦q?Wþç‹1ÌŒº¶­ÚØ'¶†ÃWštM[­�Ö@k 5ðhÀSh±Ëx6 0 ºÍÝ%Ímet|kà½h @( ? Àp€Õü úиÙÏmý¾µÂC1쳺¿ò^!M=P)Õuz¦�igå‰{1§6mÜVdŒ¤› Tï$ó¼›ðñÆ {8qƒR“� Ò¥tª �o N…‰÷»Œp-³ðŸ4s��o¢Wyæ—(G;.º†RwÂïøØFzï`ü0bÀÇp©OýùÌ¿Ægþí1„‡*Ÿ�¾ú õÊÿ ðO/âÅš‡Òî=7û—¸kÁ2(õ Sû}‡�t‡Q}úó�„ÕFžý�ÞÆÅ¡o !ÿè_`WÏ”>=…óXQYÔYø§(¿Ëh ´Z­��­�6|ìçÿæ{Ÿ Ò›ïHw 5ðTX˜0dðˆøºà»@œA¿€Ú¼Ð_’ý%°à‡ÚKF˜Ký U^¶ôÛ ¶CA8×eNü[>d+_Ä¿‡íøá*|Æ�p¨¶ ß?¢ î�ÿ¤¥dò[ä©.áµ,•9�”/°º¹�:òà]jʪåžúþIo + �ÇðŸ•ÿÐìà€øÔß ºüï—(—ýqã?gê¹pφdx *ß^z­”O ¦ P\ Gvˆ9è1|¨u«rCÑ�y%pŸ£›¡3Ç…‡j{?}%-Ïvúñl?KFËѽÀÿG0ÈÀ€÷˜PšÕ!çww—0iÉs¬Ì”Õ´5Ðh ´Z÷Ñ@Nûê5Ð¥Ç=¢Ößãô÷ØÜ œ*+é 'à¼öíçâ½Ê<¨y�Îúÿ%pf àª4ÿ+å‚?ƒA•Z·‰_ÛS­eqêKÀ¥©Â8x‡†IS@¡PHðÎÙ¤.éú�·ö�`tj1åXâmL€èøÏ€¾0õ’¹ò£Ž„4rµNx<1>¾Q¨�< çkéÿpþ_c$·ÿû"@íàâ?Îÿó©?�/9DÏñÊø÷Ö•gà„Zxh| +xÒ¥/¡÷Ê‘þÅ@E!ÈhGâ¨Ç¿«üÃwp/À'îÈ·;|@Ï…Oÿ}fõ_i¸ÁFž•t\½Š�y~»o 'M H^òí¹cò½´{²”¿ײÃózŒÞ»~{ü=fttÞÖÀËj  /«ï®­5Ðh ¹Ì–g•ß2õî…Ýž1áãH‹Kþ„ß´5Ðh ´ZwÑ@NÓh ´~ƒ2ÑOÕgà{˱@B¶Cù\ÆçÏü­TqÜòï-ÿ6>óèU<ÿ±ÒÏv<<àÏ«ÁÔ§ÆÄ`Ð$Y@TÚù¨¡”ÚŽÛš€«™&<6|å#›4J í·«·”]€~À¾Ïœ xB.oÔw¤®ULÝ´¬Rxÿ1–¼#`ð<@ñO¼Æ�oÏÏ6oõ%ÞÛü5†6à_yðOQÚS½‚7ÂÈV—> wDWð�%nÏÑwŸñט§6pÈX–]èü C@VþÿúÝ`àbDi¤/ž;4ÜWž'á1Ö¨—qs*œ4КŽ0ÎãN”¸ðŽè?­�Ö@k 5иƒÚp%u’Ö@k 5ðÒ¨ÿðgû)^é/4—ûÍÏõ ˆ™‡*Ÿõc¥Ÿ[ÿ¡öEF<éýP{šïòÙî6HÙ Ši=E}N!)e^\@(BÖ”œªH؈ÁÇã_è¡v –ò\·Àã\ýø4ðG¦´ñ¥¨{±ÔK‹'Ëgœe|qé#Þ�À±�â‘ÙªqãOýiÌ™*Ÿ·þ«ÜSàŸ8Ú/vòU†¼º´=²½•Òàq¡•Ÿ2ú¯örI ÇÜG�}À<+ÿè{®ü³õ?«ÿê;Ç>ÉüÓWy�+ 6”K¸8ʪ²5œ¤ÈqI[Ó…OšäiÚh ´Z­�ShÀ)ít\k 5Ðø ÈdŸªÃCñÿ€}oíèÿC< žÛúMÅ{EPdÕ{Å?2åñgþ€òI?Êå“ë ŒWKi�|cî©“¦',@õèOžN3€·9]¥ðö.p”8ÀÛ(îÎÄ€Ž:¨oxg¾®þù¦ w¬�g6Zx þ%ËsÍnn·ŸcK<`?+ÿð^!— »|@éüi?hxéõ.à?FºAûV�¼ºÚä„)ºç%¶Š#Íêèû'µÛ;¤oƒ%b¼ó\~ øÛ üÿÔ¥�—òÒ;0x·€ÒNÇsT€ûØw[8é {ik|ó­�Ö@k 5и«ÚpWMuºÖ@k 5ð嬈ٻ½:)€2�™ ŸÏ²AÙâÀ¯+û>ÓÏj?ryH+�qÀ‚AYñgÛ7«½¬þzÕJXõã ¬”fX´ï-º|ê¯ÞöO?� °Ó1�8¶sÛÃïùšÖÍ’³¡�ŠPRô\ç¨@¶ü›Ž]æ•v¦ß”z{ õ‘²¶!F¦šXÙ¶@ ?�¿ÆRx€ŒYí7Õ¸IøØ=î³Ú퉬ÒÈ¡¸ÚþƒdŒÍG|õug@Òß wµù}¥<éØåHÎ.À¿WþùbÀ¿þuv%�p'þ\q¤Å�Çóñî~3ò{@>¿sòøyŠVY-+e «|Ò4m ´Z­�ÖÀmhÀmêøÖ@k 5ð4P)<+‘Þš-�èÿ!à�g«?[û¿àu.™ÏùÁûÖ¨¼wäçl?[ý«gµßÛ¿G={<ª0 :©üoPÓƒ« ð§€f\@'Àï/™åG¨Ë îî".‰©·”ï¬üüwÀ?iïVãR�‚µ ”‘ñåçŽ1hx L>ã®qf°Õx²ÏNxV ô5~¼ :<Ÿù ȯ”z†ßóO9<í&Ýê2WZÁí3ùk˜þcdc€�Òmd> 0àŸ•ÿ+<çÿÕoQ:bÀ…ÊðWx.ñ2$¸âä�Ž[ÃI­é"�Œ|IÞ‚þÓh ´Z­�hÀ åtTk 5Ðxi drO½á¡ñY™Íª¬Á¿€×ß"6”ü‰ª Ìàã½@‡3ý¹ÝR�_ôF½µî…WÐî¾Dò6hŽ+O82ó`\Áˇ˜¾áQÃÈwo�$ߨ'Ûÿ½  hƒë_Ûpï ¯3ø™+È8Û¨�w>õçÏû•0ËU†Á¾Ê À_):®2ë\²JÜ„i'ñ{nöA‘á+ø¿æ­åy—�~ Pë·ÂW¸ü�çjð¯•ÿŸÿþ÷µ#€ôÄp~>ƒúNÊF'qù}##O ×tð5n¶mÈk8ùš¶Z­�Ö@kà˜ÚpL3-o ¼B ôDï>”�&ÕÉúNôœÌRp€¾À+°”1)Ba@?@ÿûülùÿ®047üOð_€ |Ú�Uþï* #ÀJHÍlJ¸Áú;3_9 0² O~ÅUw(µJöy§K^(^€‘òìá㑉'MâSêZ䓎~ÎðÂÌ1¨tì1 á5Ƽ ȕ÷ywxÅáçy•P�6Žñk\ÂÐSþ˜N#g »¢ü K´qÈSíä7öIýöôKjt&}üÅ…€ú]ýÒoŽ ýEéðoº(Ï…²Ð¡�*g}/ð¼ª,ϯÊh.qð5þ˜œt««i×8·Åï婲ڮ*oþ �Öïé‘p›~z|�Ö_Ƕî£�6ÜG[�¶5Ðh Ð'©'£ èrÜt€oËOúYÒiæºÆ‘Ž2â oé(?m ¥î:Y®|Šz•><>5V²þScŽíï¸K€ÿ~c¥Íý ´ù6O»nK'ÍJ‘ÅU=†‡’ ø‡‡âq„ã×pä¦ÒGróÿŒ}·1@ì£ïŽ·Z/©&êö€§\°–ߺ/ �?©€<Æ€„}ißÃ#·A@¼oöWzhõu€oöWÇCF€© ¨^R/¯¢.=›8ŸÁõ ðö€~ŒüO9ñqK>&nÔi §ø“ô!uÞ–g£6Nöå1ð©;¯x+ŒÀF@2À¯òOywoI³Ê*øÏÅ�¡”�'µG‘­O#²´k­/rÓôº‚dê?«ÿvWÿ%?×søÛ�ßúüí« ×¯4¸[¨?+€ßK“´¡kžÈ›¶Z­�Ö@kà˜ÚpL3-o ´ZO¤�L䡬ºü{Å_ !+ÿ\èÇv~ßÖ¿òÚÖoP/Âçú þw(Ž �oã¼ÀˆAÚ ¾ñÉ?Ú0õDÝ}ýŨÏqJ0…,ß²þ�púxz]ûHc@(bxy×�ñaÄMyÍ3Š{‰N+õà?Þ«ÿOÄûÀȇïÐÇzÊôÇ'L¹¸èZù¬ò;Ñø“4É{§¶1ðê£Ó'¬~üÓéäÆê¿d¬ø££+¨.nŒ.ùíç=@Ó2Öª¬¶»¦YåÇ”•r�¥iyk 5Ðh ´ÚÐc 5Ðh <£ê>[þþý)?>µÆœãÇs£ø„¿)�Á¿€‰ 匿˅�1 <» IÞú¿Ð©gTÅ«*:+ÖµQ‡‘dˆÇàŒC¾C“ñt=à2SÞ¨ƒºj}•wUI�z7I5.qŒÏé+x�ï�A*Ǽú&ßðÑÝch]ýè�€É eл½#ž±-ˆ¾qI½SÛÔê¦ïÖ»ÂPŽ;ø}A ~‡ì˜»Ä£›�@?€ëOùmdµ¾6­»6Tñ^º_y�…" ï*+ÑͶZ­�Ö@kଠ=Z­�ÖÀ3i Näá FD³íßà_ÀŠóüðýútßÝ4ŽçS~á¡Üâ¿û ?�nôÇà¢YÝ7è§Nù DÔß#Ëž©ÿ¯µX€ �t€�ÆÂr~|+`À5°ÂPãà™ôÄßCéJ�<5mÊD&þF†ÌYFþ'z£Ï³) {õÞºý�{ðÅ//”;õw'€M÷Nøü¡LTª@Á9~3Ž¡ãI½‰Ï΀SõÎ8ÆÃ(Ëã"Ï‚BÕ{ú/>žcðñ��Ÿ€ÿEOþý¯º¦ÌwŸçZß1ɇ,üNñ-j ´Z­�®�6|ðÐÝo ´ž_s’®‰yvp €Uÿ¼õ�ð—€O÷…†çb¿¿U†�Pù\-þD¡êš�G¡émÀhhäï�V� GŸ'Ø‹ÙðuÀˆK<ô¾ÎzO¾P ?(@ÎÛÿ Ù¬oÈfø>ŒÆÉÆ1nâì=V°Íêîàþ1 T# š¸«§î½´uõ?àŠœó}ñ ÈÈwo#€úå¶I¿ÉϪvLð�¤#zÿßÁî.¼" ´à=ŒnJk 5ðú5À$Ê�`¡–Kf°*@�-øÈ³Íð¿ç9ë?·üÃËXðE«Š_•÷›Ê 诟òôvVw [Ö˜�Ðm z ö²Ú'¼'¢#=§ŒZöªÿMxä­åPŸ ZA6�19éW·'[Ó<&¬ñfWè’9vÄmúöÀ:)£–³ÇWÙ^5·Åïåyz@'Ãïñ‘=¦¾½q0Ÿ‰ &žpÒUþ1õvÞÖ@kà¦ò{»Ó’ÖÀë×@^ÿ3ê¶Z¯Džà«-¦eŸ0 Ÿ ÷|Ëÿå†þz±_xŸýà_Ã\ú÷U+ŒùŒ_¶ùÿP´éøp®Ÿö /b÷Û€PðZ©žÎp`M:ÚË„ÎàIùI?ò8MøAWýoÂµŽ±ÂŸÿOü@ÚPç*hÛ3¹ÚÖ]žqÿÄuSÞm=Jèêksˆ{.·Ö» 3–ÐMÑOâiüceÇmÆC„ƒ’îTü’¼ƒ­�Ö@k 5ðÁ4ЀöÀ»»­�ÖÀã4à ¾À}.Ô3aVûs»¿©À;«þáÙþïU~V÷‡¯áúù?ò�ãÊÿMåþ½ò¯æs¡çý1x‹¶h AèãzùÎrKWqš¦€qâ $XÃïøÄ¥‡ ßw]sI@ú|ŒÃcà3rÞ@’¦–_ùRä³°Cox*<ûSt ð}*WKªü©ò×tkøTÞÇÑçâ©sÖ+¹u6âÃO=Þ£Òc@¾–•4ȧŠ=Yâš¶Z­�ÖÀÇÔ@>æsï^·Z÷ÔiOòE º üø÷êÿü€~Vû}Á_¡ü¿ð‡VƒñΧr’ŸÏþáý‰?ÕÉ– ¦ðò¡÷ìÚûN.]á*Do Ðñþ춇7° ø^©k8ü©Ï òŽ]Ë`߯xvÔ]Jï6‘9yÕ<ï_Æö¨aÍÈÐçÐ)I’î¡ "žÇ^ħŽÐcéªüTÚšîAüèÚµ!  �ŽOmÏÔÿhè ð]öhO�#_ �ìMZ­�Ö@k 5Пì1Ðh ´Ni`3g¢ÍÄ/àïóý…²Òpç³~ñ¬úGÆj? ÿÏA+�ŒÕ~ïP™¡?T&Ç Xñ÷yQÎüÛþ¡ãTßß|œôƒ À4H³àúk|@¶Aw÷J�p¤MžÈNÐ<F™9ëVAvˆzg@ê?Qö³D ݹlñn•)bOöm‰®jYÈÐt/¾¦ ×tIšöð>Øû®½ ï4‹þNÕw ¼×÷Ñ^â÷ä§êê¸Ö@kàv 𻪿?rìÉn/©S´~¿zÀïÝ‚Ö@kà�h€I}&ôÞ0À¿ ¬Ò�Õ~À¿oú4<€ÿ €_ÃXÝg7�WùE©g^$(>mÀ`¾Ð7¢Æ—i¦t… ø€mÂ%. œÉœÁSúv~âGÉ«ôPÛ!aåW#CŒYýç€�Œºg›–:_$8tæöž°'ÂCöжPΪ·”å:Ø¡·Å' éžÔÕ>‹O;0.åÝÀX«<õß·Öoi¸Çe »ÌÒâÉSé’¼ƒ­�Ö@k 5аÚС5Ðh ÑÀ: ÷Ä^iþ½ý°.ð�gÕþ _>·üýûï/ÊŠ?€ÏÿŸä+¿BõD@/2�D•'M»ƒ&¸,@‰˜)d'<7Ý`K4`=t‚0âwßg0�Yñ�`Æ•6̺—zŸ#˜¾˜ÝÁû÷@xÑçs´!eºÞp{qB¶$™¿™UþÐ0í0à4ïS馶Óí:»ñ>9Ò€½g]ó‹_åäYeGªlqk 5p ð{ª¿Å;dé$­�W©�6¼ÊÇÒ�z­øÝ“©{ÿãY&£Öë*cr*W'­ìü™°g ª�Êïd½—è)Ë:V±û;úž4è7òðÖù�³ ï-úô‡gåŸUþoûЀÿÐlùÿSéæ1ñ‘Oþo•_Ý�g²gŒˆz<„î<¯µì>Åç=ìyŸŠ'îX¾Su¾…¸Çö+z{ }}Ž6~tý=¶ÿÏñLºÌÖÀïÒ@~—æ»ÞÖÀ3i “Ó\+ŸU*ªŸò‘Ž8Oj�´� »ÿ‰ŽI0üÆ“�‰ð\ýçœ>Ôbj|•߇O¹P&÷«.�ÏÕ}ÒŒ-ø¹è€·ù³Ò?ü%Ûþ�€‹ü²ú>G¸è°ÿEyø´ßw•Çù~êt{JgÖp‰jö¨£pÃ�1ë"Â3fñ€¹1¶ {Ì!¿§Û{vÈæN™ÐáS´òŽ¿gýJ>Æ ÁîµÿâÉ8ñóógSx{äxµ×^•ÒÇ»xÚWÓÕp@<€Õ| äÅ¥Œð1TJšÕ �|ÇèOúDù…Z¦¾_ Q�QïÖõÑ�„•&Ï�¶Ù¡_ùꜦ žô§ÒÜ¿×ÁÖ@kà4Àotým?C5]dkàI5Ѐ'UgÖø½àŸ�ÿ šð.ð\åìw@ÿàpü£ÃçSe“™Á“Ö”2ò%¸Ò:¹u»—·Å×äI»WNÒ¹¿ ¬ýNxné—n¼­:xâ&Ѐ÷íüƒúÖ=à_2Žìù¯Š‹÷gþ0P>Ï+�¤}…oöþ˜—ý)kÆ"²ŒJ4Ïø”7ˆƒŽ0à¹ý!ñ!þn÷9R.®ÔGý—zg[œ4½pΧùsì·®Ò |Õ|�Ú0üTØ^ñ€âø –É‹§5ͰÓcŒq¤�¢×JSy𔟸;Qõ‰¾Ì~©÷ ùÐÔF€Ac0•^üìÆ³4¯2ö\ÞU·¥yLü^½-k ´Z­��­�6|ìçß½�ÐÄÞ+Ê–L07<²!Ï'ì ~%#ÝQzÒ˜‰hVºBçŠI˜ôÊ1Ñöd�2•gÏQV&À5¾Nv÷âI[Ó$ï±´Ä׸ô?z1U;‘ö³�êíþí‘a0pÀò€þ‡€[ÿ‰«4<+ÿxÒg€/þAwížFy¡”jž1)Ï8 øö8¼Uà6Ò<¶5y¦ów1êOLK½ߤÁ…BÏÿWõM€WíðŸËÇ0 Š 8ئռèë1O'j\Âþ£çˆí’9|\øPòü‡¦])ãN4:µ! ýDòüKž{ò>¬F€úžr½¼媜pÞO«œ8ñÇâj|MwŒw�ý§5Ðx°ø-æ7›BNý>“¦ikà5i  ¯éit[Z�Ѐÿ!dUü¸€{ùþ]^`Ôr&¨úçvÌ1ɽ h%zAz&Ä8å;W=ÉO;\ÒN™§þ�®ÿXEoÛ´¦Yÿù®ñ”�Cާ¯ègêbðþÜä¿G'ˆ¸÷JÿJG~'Ï&ŒLõO™êöQtÖî 5 �V—Qõ˜a¬Ëô{å_cÜcxÄe<×rž„/å§-¡µþ´ùIê§}Hî‘g¶•v©-s¥_¿õ_çÙ€ÀqJõ*¹ê!< :À=²PšŠ«aòÖpx'’�`xhóá“ÿ.tÖMßFÿÜWÞmèƒ'žp1°Cbþ•w3nÆ»§Êx� �®N²¦ŸÍ´Z­�Ö@kàhÀ=”ÕI[¯QL «#Œ¸Øä œøïPâ‰[Ër¹šÈÆ1É5ø§Ž™èT Å©iÓÈGºë’éš2N½ëdø:Õ�Û‹¯²š>e®²ÍÎú :ò…~ôsqŸÏñCÏ¥~.ñ«£ÀÉ1Ø«ÿœíÍYo÷W¼ë„Ê»Mµ¡Í?©r'@Æ!Ôã†ñÊ8àÎãYõ´†ð=Üü}Ô<)c”MÝöª3ü¬·æ{AÐKz ðºðâ-ã7/o�LzyÀsýk�D/á×pøZÚÏHž¨%á”™2Všø£4ý /£¦£Ïs€Â6 ºÙ À³¾>ËÙFýÞ=æFãyO� §�¡kúÈ›¶Z­�Ö@kà®hÀ]5ÕéZ¯P+È%\ýð¿X웲ª^”�ž´®}Õ„‡À» F¼'åšì²òeÀ0&ÐN­¶Ì² Ïd7í>Æ�âMÖÉqâ"¯e—pÒÕ0<>; þé¿ú�N|™Ÿtâ[ûýúœŸoô”[üÿ€}|nô�@)oªFL~Ô;Á‡Â8· êPÿy¬)g�·Œñ,ï1XKX¼Çlâ†Ü²Ç6lÍOÙ¸R‡�c ϸCÊçù;Æ¡ mš žß5¿y¼À¿·þÁºúè®à}ŽwÉÃSWøŒ{(yÑ ž0´Ê"—ø†[Ë!ü /lú?ÞmôÐ?ï<ïç•ßìc*ï¨4–ß:2(n�_Ó%¼Ò”³Ê¾->éš¶ZÓ@ý?¬„ÎÕø½hÀïÕ×þ ›<�*ò!yN•÷Ôq™Ör72M=©e ª ð€óû] @Åð‡.a€ñ 7@rþñ�³_ø?þ0ýYÂÜ h™zOƒ'nõ5îFýw¸åC'™Ê@?ìRÈ…~ôÝüÐ<Ûýü_à#@€¿©ò­ÔÕøçüñJw´»ízj÷t`¬éY0¾ø½Ø!ƒAºþIæL‡?s\+xìYîÉ-S=¡©;Ô¿‡¥þüFJõ·³éãm)wÒñû@W´1pï>Ó6y~ÿW¢¬ŠCãVÚsÒ+?cß_] €Ç(�‹�` bº¥œxäá÷ô[ó¹ýìQê«>iªÌw¨o6p¨¿1~@?é]w†×»�gòÿ¹ÀÇ¢·BÓÆ=jÝ+mu{²ûÄ×´Í4P¿Ï¡žÙ{v·éï½÷ÿ=?ÛîÛÇÓ@>Þ3³=®ÿ|*ÿf;t¢áü#Í?SÓLÌ¡±Y¯Ä¯<€^ Ö`~Pƒ~É¡1„7Uy%kÛÆäÔM~ý—ÃVø‡øÏò6hòÌÊ€a¥LŽí™L‡‡*<'ÎÔ]&ÃôßSã"#IôCZÇ�¡›l¯‡Ÿ^ñ^å—ŽXéðûœ~á1xõ_Ð>;|@é¹Åÿ«ü7•ÿ·¼ÏôS¾Úå݃`¼ïi!Oã•9ÆŠž‡]Ƈ~ow?ºæ16ø»·€ºäà×÷áÚ¦5L>çe~R‡ŽäÝNèà󿪛xŒ´ïBþ‡~³¬„ã?ë·{)!0|®ßFô>�]P–<¿�ê(C@uÔ™zÇ’>qnoÍ8x·Sü1ºúJGØ¿ÙÁ{7ƒú—�6rôõŽìŸýë_ggÿü§ Î%ç�#À|¿I/Þ ²ki·ªù-Îcì·ÔÜ•¶Z­�ÖÀkÔ@^ãSé6YÇ&-ÇäïEmž„3ßñ³žÙÚƒj~%àºúŸ�‹ú2/¥3৬Á#Ǩ€c²¿çê€ÿ+ù M~1\ Ê„x^Œ¥´€P`À0yõ• 6hOîv F;�í·ˆÆ#à’•}ïnPúæEø¹�ßÛý õmýÒ�ÏýKO6ˆ&ìOþ)œOø†÷�þÔCÝò£MðÓP!¾ÝËh Ž�ÔhÀ, lPš= ÃC úÏ�·àŽ<†GÞÉ'o­cð´)ž6PcÚ™p²?šjlÚAÇ8…ÆM#€Þ 0öê¾h€ÿ¥t o:~×ü¾)Ë«ÿ£|÷EedGõPÛ þ‘'måWq¸ë‘!?æýÛT|hÿ“WŸ|É¡ÞG þõnóÊÿ¿ÿ}öIF€OÅðiþ üÇ8ó3¥aÒ[»Ö@k 5Ðh ¼ ´àµ<‰nÇ�4àIñ�R¾ÝDø Th½â*Ùf ¿@èÜÎÈ×öuüÏÂOY1ð Àb0Uùq{F¯t Àà ?àßMˆÙ;} ÏŽ�ÏŠ7€œg멲&ÌL⽊8&Ϥ#Íœø0‡�$Ûúó?_ì§~B'ȇ— ŸOûUºI·æSù„Ÿ©ÂëZð¿4·ƒÏ¨��‹qtÄ{ì�¸™�p\å#Û¡uDÞøýŒ2,Ÿ:�QŠ/-Ø©í¢ñÛq{á4oê§½´#úc~øÏN—Å{Deñeʲ'Lyò{à_âiH:hõU¿¤ß #;æg[”fþÂ_©_gðöÿaðq'~¯ü�s€Þ_ì°—bˆ±½ùùªŽ—t{uîÉ^²M]Wk 5Ðh ¼ ´àõ<‹nÉ ÜeòBš€ÉE½‰(úá­äL åmõJ¶@ü¥|VôÍWÙ·og?å¯â1 F� öl ',„¼1 (O°¥×8ŸseÒ+àï•/è0@‘M:x@d þÞý€ƒgÇäÙÏ�I3rž§*Oöž¯Û8ÈÖ~@»tR=Ÿôó*¾âø|ŸWð oà/�@Ù-à�#>·ûC+Ÿ´ ágmkò(c•Ú®GxÆ×B‘MïŒ#'r¹2ìOžshM7�£<Ç•:iÏ\9&²Ä™¯…=Ïolüþ\äç7ÆÆ¥ï¦j×þú½²ƒ';8À@¿û# ÐwXe§œcà?u‘.iÇ’fu«¾ýÛS"ä«�`ü+½ãÕÇͽ¯üÞþÏêÝÀ»Mž~OÏ{L>ï3žŸÇÛÚð·Z­�Ö@kà7i  ¿Iñ]íÓjà½L°˜|O¯ ´·üCBáYíÈ^ Ô_ Ìßðý¯_à*ïð�ýR>¿Á>Tå&¼gà)m&ØLðÐgKlx¨/ÆB¦É² Ù&;è¹è…ü?T/ý ÐàÙ1y¾Pÿ ‚Гf‰(õÔQ3ÛE:9þZG*}—~ؾŸ³üœã'Ì'û8Ë�ÀüÃW�ïãjS¥ù¬Ÿ¿ z û¢?xêíð3 ?¨H»—Öã(uÂË3¦„Îy•8'ºÿ�ÌQ&¼KL]£ŽÙ&É󛲚çþÕßÌÁo¥ü^œ`Èü{Lœèèý¡Œ´YôR~ný—}þP~ÇèÒ _9Ï)GaVÄÙAàßôÍVM uÆ# :.Œõáüœèý�®²cÙ£ç´{ÏàŒÚ@Õ§yû¿Þo'wðOc˜Ïtô'}:Öþ–·Z­�Ö@kà¥4Ѐ—Òt×ó` œšŸŠ{p…¿9£'°š4gÛ¿w˜úr;ÕüßþZÝ7 Øÿë/~B‡·Q@ü/¥ à7-‡tq™LG3ÌÄx~ÓÂÛ0ð×*Ù9ð?øOàÈþP}*Ø@A€ðÿYrïr@ÐwMÂ'íÉÚm!ÍlÜ5O¾Ý_zÊ�þÿ¯ê÷¼Ú±ùtŸ@ÿ_ò�û3~*#@<+ü¬î¶Q†zÅSÚP�?ѸÄBý÷·h@ãhúÁû�ÁøJÜJi(²á®¹HŽÓúÌͧœP²†/Ô;_Ùæ½–tÇ«}šÆô:®U2ý°W;ÆYý¯[ÿÙ€àJ>àŸß/;Xýçlý} è�z¡ñbOºÙV¥‚_�øgÕCÕNß ~üÔ{)Ÿ:Íê?FÍÍ—0ZâOüLUnžíÉáUvå¹sàBuh�ýgMŒù¤˜W5‰ž LñáóL¡´Á =‰7 ‡a@¿Á¾úùeÇ�@éú+µ@åz[ÿ €ÿ„W�(ªÝ jà6ýo®€¯Aý=w YòoSÆÖˆw¥OÔ™1qmGåO9r¯â Ù O�;td¸Q�ŽÊŸ[ß× œ~ÓÁ�ߊ)ƾ„Å»lÞ=úÍæ^ÞEÕëÅ4 `¸¿R¿ÿ1üùm²#€��VžóôvÏK<åð¸Ò³ƒ`ÈÖ²«À[ü•ΗýÑnñÈBùÂI½ô°�!óÆÌÁû(“ÒåTß‹‚á#ÏVåñÜüä „oq{iödµ˜ÛâkÚðÉ“¼Ð;�¿šéñ]¿½ÿh¨wWß�ÚðbwáýhÀ@vLÂùd~nû‡ü ÈWÏvƒ|Ñ_€|ðŸäÏᕇx¹Á¾@ø'¼êaBÏJ�}Qã:¹NÊäÞíT¬–1¹àxâÍ„—‰°ÒyÚKJ‡qáõËÛ¨!¹WÖ•ž•Äï”ê›Ê®“góJÅSo€E(åøì¿(—÷a`Õ€WÿÃK|ö_mú*ÿMíø[þ»ò²Âpy¢”ð `»7 �€øŒ¡²9v,#,?A¿øjðS?»Œg�á;ö›ôÓ�ñê q¿‹þ�P·âfš™y0仯ӘÕ�äÚ+¿A[dëyÇðÛ7¸'.<”ß*¿mùyIèàùç÷k#¥Ê7¨V[yøò<•g^eMJ:ùô]­žøºK€´«—è¤K™þݪMj™Ú˜›þݶÑnÆaÀÿÙÿ{öé?ÿ±?Ó®¥3ñÐ_òìbÒ.§|ú´®ü3v€ÜOÂ'Z›´{INÅ‘þ¶ø”y×tIß´5Ðh ´>†Úð1žs÷òµk€I¸œ.g&àL¶ý­œù·€Ëö~Vûáø•ÎÀ_à÷\ž•z LàÿþªÇ—u‰âö&«‡V9Ú ˜à+àá` O®GFB×A}ÿÔ¯v°{ÀÀ]‰Û¬"²ÀhiqL¤ã=�-aâ}_u‡úhÄs›¿A¾ê‚Æs€åªŸUþoòþ"Ty}æ_eü‡Ò7÷Ù�ê?oBŒÀÜ Ó Yx_ŒÕÀ¸óÑu”ßÏßTcº:âq¡›qK}£ ÇÿyF\ü”“WùÈŽQ~3qðx�iÆí†—Œ°A=ññü†ÃC ïßy cÌ›•ÅïÞ^}1€Ôà^åÅ@ðvýÊЧÕñ”� ŠŽyEÝp”—òl�T}”·ái†Æê%óyɸìïy€¿ ýeÂp¡]Ÿ•æ³ ÚñÄñ¥Ü{0Áöγ˓�iÒàz[šÛâwŠlQk 5Ðh ´6hÀFh ü 0)Õl2if¢-0Ëy`}៾Wÿö/1üù§=€Ÿâ1ö½Õ_”‹÷¸ùŸ­ùs«¿Êð÷.Õ¿î 9iS4’0 Ü—õ ™É{Œžä« êCŽÐò“'·‰üÒd£ÀD1™Æk’˜ûV~Õ=oì/¼?ç§ú|éß ¾ñðÄWÛÈ;½Â¾èOeSÚGáéc¼Øv¯Pójà(À>+û;Œ<Æ�ÓúÂ�<Vâ7NÏß.ò16iÖi‡§ »ÐÍÒ KÚ”Cø®.í#=<íã·‡¯¼Âäó»Å#[yɼò_Ò×0¿i'o#™êÀŸ«èêÓ\]W_øñ»àÓ³ü–ÂO\(òx±“¯²ñTˆÞ8—M�òø‡WÊÜîÏù~Ÿñ_¨oøàÿ|ìð}&þmø� ;üœU�Ç-‚ߣ鿝Ÿÿ�T~“èŽñ{yZÖh ´Z­�UmX5ÒáÖÀKj€IzêŸI{ Ù�³ÿ?´ÅŸ-ÿüÿïþÿâ½@`—‰ºWüÅsn¯ À? anÿu3m�ííªaøðê aò h0°P þ5É>“ÿÅd[í0 HàÜ0—‡üù–6—r7ÀLcB]ÃlÓg›?«ø^Á�oñª‡­þ€ËF˜¼¾Ù_mÍMÿÐuý¬àŸfµ{�ø§u<7@”e€kVuE þ¡òI€N8ãÿå÷� °SxH&=$)‹´´aÔ µ@tî MÒ~SΩ@ÚDšðÐáù ò¯Ô _¿dö¢þ­&<~Ã󷬲&¯8Þ+Þ@zÅÙ`¦êm�®½²®t«Ÿ1˜Ž¾ø}!>´êšwác~±Kò<(ž:óŒÃǃd½¿„óÿ|Âô—VþÏÇêÿÅà1°ýßÞSñ¼»x‡ñly~ÅmC%Bìšv»º-Ïmñû¥¶´5Ðh ´>¢ÚðŸz÷ùuh@èLZ3�gÝn&ØL¶\½@[úsÑ_>ñ—Õÿ+Œøÿû¿ë[þ•?—üAÙºë°&ç€~€Áø_3Û7"²ÊO=�§´P£:ØJëBµÛ<Læm¶’“vÿ|>�Õ7îMЯ´à�OöyUZùò«q`nõW:äì`å’r þl ¯>âé³û~P‘v¯Ló³Y'ò7þ¢6Œ1ÈXš@ð~Þâlð)ž¿'âýÛŒ,!Ç)]\8òŒQ7žÚðñžy÷ø5h€ uÚÁÄZ.“l¯¦T5)¿ÒÖ}Vÿñ|êïR[ü}éÛÿǶþßÿ;û5 LüÙ¢Ÿ•þÊ[¦ú<ɦ^ø„ÓÚRxØ„¡´ÓGD=Ѧ¾1ÁXxÂ9AVƘ„{"@ˆÕ3|&âܲͤOúAkØ•ñUÞŸó+¼ÏøKg¾ÔOí°!@”-ÿðì ?ÀfãÕ§N7}FØîUiÀ㣴Èa�ÆTðo@åÇïƒß¸ *tòÔ¡´›;H§4Ó þÙ¸ >ÆÀÙ~פó{‡2 Y��l�zªvq”óÜ5¨}6H ¼ôë�ù€?”ÿ}ö_`Ÿóÿ^ùüÿ�@ï* 8ò¼¿LÅûy–çH»W—ñVå{²[šÛâ×ò:Üh ´Z­�6ôh üN Ô‰;íPxn7wŒ]ÜøÏ…lûÏÊ?«ÿx_üG™òLBýnñ¬®Á¯`ÿF˜&ÈWWÃð1T0ÁÎJž'ÜŠ›“Q&ä-Ô¼úämš<_ÊŸ�•&ßܲmC �|€µ…g«>@ÿ¯=¯²Ùà3þJ·G9Bàv‰¦_é“åŽ=üI|5ûJ5�qFóàdŒS4`¼!ÏÞÏ]é+XC–°ùŒÊtáÛQ‘�ëiIÆø� ´ƒ°WÿŒ4Ú8AÚá�÷®R_¥âé_Œìü™à_¿ ßðÏoÐ?¨�‘éwcÀ¯6Ð7ƒi•gª0ˆz‡Ï0 ç=`¯þy€úæ4‘‹²úÏ»‡ê]ÀΟù7Û->mãù¤m>Ž$À|÷úõîáýÃ9ÿæ¶É1سêÏóT¡Õû�•¶©>Ü|F~DV¢7ì^þš`/~OVó4ßh ´Z­�6ôh ¼°.ëÎã¼ÃâSoÒ2ùŽ,“RßÀ®y.+üILJsõÁé4±¼ü›Ž0 þËð�Qú‘®Òð–vï@`ºcØšÐx‰›1dŒéâ+È¿Îqøí’?†ê¬ˆ„úãç¡©|¥¥]ŽJX4ïÚˆÏ{Ä€?@ÿ­àåm|¤/” •øwƒFùÔ Íïœw�yú6ô�gÀoŸöÙÑn9ÿ¼Ë³ôð‡¸” ÅAýBUÎ2ñPŸóWÝü•ôÀï›ý�€ÕdàíÙò�—¡2çþyv6ˆÎ>ÂËãVZeN0þ$Ý]âk¾ð5d¡§â’æ!ô¹ÊM[æ8ŽàƒÑÇê÷­ëï£÷ÿƒ ÷îîoÖ@~óèê? 4á͹ZSM¦½ÝÐ*0üƒ•~.ú—ý]ê|?Ûü¯XåÅpÆ.€¿Òû²?M¬/ÆDšI8—é­À?á:™†¯áõi¦é×R‘…‡RFÀµ'áL’åm“cþ¹ÛÀ ¡x €�$¨pY Ÿ ´ü›.av°õ?G¸à«úÎYÿ€þõB?˜€ ÕÙî�k€1ADíoà/À3Æ#ƒPÉc!ãžìË1Ô*a_ø:É>ÄRÀ0g•c ‘ú�¥~Úë0”öË…:Àê¬Þ¢k™ë×ï`C©_2oýøë÷àíý¢^õ/4òº’OYþ�P×✎û=¢ôº�ÿ¬²/䡟‘)Ž÷Ï…úçíò#ìÕr¥©F•ð´{£ûY£å�žyÆ~/ ÝVüK÷¾o„÷ éJ˜‹Fø7üØþŸÏüð×3þyN¦ãùmdjꦑU~O–xâj<òên‹¯i›o ´Z­�ÖÀžÚ°§•–µžQžlk øŸ“pMŒ ÇÀYƪ?à?Àÿ™vdÅŸs¹lÍe¢<'èjÿJ| ñt7rø¸L¼k8²c@pÏd¿R&ç WLÈ™È3±WŸ PØ ezÒNZÊ€*md¬äo.Tß} úï³ÿ*�mþñóSe*7íN_š¾a hL%Í•_÷™Æ ž±>c0†ªŒwÆ…¿l!Ь‚þü¦*¥.�%�³8ƒq ÜJÝó S7± ø}¨e¸M”Ëï:x¨Ãȇwš‘n‚ý þõöÿïòLC¤áß#t4(”`tÀî£EÊ� FT.&8#oc$ýWÜæ>¥Ë=%µ*ËýE/ô[Îmªañ~/è=°Ÿ·úÃïƒþPÞ7ƒçk#ç€}yŸùº¡2ülÓÎA²WŠþ"«üž¬ÆÃÇ‘¶úÈC—ph­#²¦­�Ö@k 5Шh@ÕFó­�Гm&Þ|FËgþÀò—òGÆ€K¶ÿËðS¶ÊãÏš9ÀöyO¬™�«ý§<“쀎ð5¼vNÂGáxDá+ŰÿLžå „˜¬‹¿Tmü?c»>Ÿæã²CúÀðå“�ì&°€€4#ýœá¢ôÂû&àŸíÿó¼2áÑ…w¨¯6Hðg'€?IŠà•ÎáQÇÚ4Ù4 ˜_ñ.p¿’ÿ©•{¨?ï'ù¼èOé�Å(àU}…ý>/Ïù~ Ê“óþ›å™Y?<;úêÐáOd›ø‘®Ê*o= ‹á%íÿ­å'E•…Mš¦­�Ö@k 5Ð@mèqÐxa 0™eâͤ�p€¿oûþ.PÏó€¿ïGØpàWž_¢¬þÛ«¯Ì©/¯Â I¬·Í†²Š&ÊD þ»ôàmûêËßê÷wÉ1ô‰7ðUy–©€| PÌjƒ ºUš¬ü{G�¢íÞ‘4&„–&è¯à? {5Æ‘ø�Ì`IãçëHtœ'} •º\Ƽêaœóp�…R�ë¢ý«S�.Oczüõûæ=oïç·/~žå¯aå ¨ŸTeüý›5˜2êšáÑZÅïeê†6�°ß- {E_emލ¾@}5øU?у�#äU:C y’Ûà"Jmü†iÎÏ*oC ï¼ÀúÀ¯sýx ûxƒÿàž¼‹x7Ù ðÇûó~¢Þ±À3”�ñÆ:á¹¥Ýðrõyš·tÈ¿È&mèHr’¬i Gz²€Žl ´Z­�¯�6|ø!Ð xQ 0ÁÅ3!×$Þ[ÿ5Æ`ð¯Up_È€q  ßDz`A¶Òú|­ÊõÊ›:Ä´tÏà ìèpøÃö�gÕÅa ~-%�4ü¤šŒz¢¯ ?“æùÙ3M™lç;´Á.òó¹~¥g;Àÿ ª<9:˜ñ*ÿ6 »Š3€ }èz´S¤Ý{рƂ�¡(`Ì^ã°m94áAÄ Ò¥Æ…Ç>ùêÁ³‘'š C]öŒ^ýŸvP¿íI›GÝ®ˆüÔªßB@?÷|xµ*oð?(ü +��¾Ê€H›åN`­ð¬‹87â “ƒF$�|Ã+œ#1øâ?ýs +ÿPŸŸD«Ï~PüÐe£Gï �Œ¶ÑV¿×¨ž6) Åg'ЕÞ%.øþ—º½ÿJž�¾éÐc@¡€zò~V›|LC<íBŽ Ÿ6s�yÚ*Ÿgæ6çù©Mtïñ{2e›ùj<ò8ä{>ñн¼{²š§ùÖ@k 5Ðh ´ Ç@kà…5àI®&Ì^ýׄÝÛßeøÁ*x1ü`õŸ#:ÿÏîàÓž03)–÷� ³¼Ïäª/þLTÇzò:úŠ =„=/‚LÄ¡¤Ÿ@[|â<ñׄٓ|&Ñš\þ³*—#ìàö~ _4ÙÕÕ†g‹¿TÞ€ÿð¡›ú”?u*«õAºòŽì?oW^•ΆØÞ£–i<â<Ö)c¸=ÐäX�±�Sx#'¾È00î}A´´m®"×¶—6Ìz(Sï‡l÷߀½'|i¦¨�?´ò1ˆ©0Z#@èì�êšúyWவ#~ô1ïÐo8b ˜¿t1~ÿÞJÏ{€r¤ÒPþ,Oùýô‡ÞÇñ®s”Ïï•u9 —Ãpùßÿžýïóý€þá7aåãý3ÇmQøBÔÂÃÇP‘þŒ u»Y3<YÇPøP’ìñ«Œpü(ö(©yS~•…=ZPG´Z­�ÖÀ‡Ó@>Ü#ïÿN 0‰õd– -^“Ü`G@�ԳşÉý/|C¾ŒиLСLÚCW>áÄ×|𫯀`åÝ~å�2=§ìðb'hð¤Si€“í\†`4ïPžÀ « ½²ÏÖ~&úþ¦š³hz]ÿ=&¿NÑÜ+Ö@oÇš¹IÃó–ϪÆ›e5~Œ§Oć#ì é `uZQxêÁ`O9xÆ;òâ7 Œô¸‘ß!Ò™¾ a¡6Œð|?(là_Á?ix‡¨œxÊ5S“ÝF4ºpâå�WãÕîzW;tø�{§�º�¿¨oßøæ} ¦l¿—¤Œ ¼m  €ÿÐ�)a9<Ç»$åsîŸ#~ÈÿÔ.€ øÃ‡²íÿ³ÊàÝB»ý¬D7xžÓ4Ô$,Yâh‡Ó n/œ¸cÔ}Q$ïþäGfÃm¸ƒ·ÎÔÆäq˜v‘—ŠOÐÚ®¤­²çâé×)w[ü©¼ÄE¯·¥{¯ñ·éï½ëç£÷ÿ½Žëî×óh  Ï£×.µ5p h˜éÔ~Èp„ üÏ 7ØP°?6Õ/Où‘“ësÆUµK£Ïu_€½Ã›ë˜ ¹O ôÿQ@ý_øœ`켇cûþý�µ€ÓÁ9Œ‘ew^È||{@r€>P�—òôž >¼õœ¨÷Ð?OÿôÓ7eµñ)$Ao>ªßw æ~tä~ȸYcEÝÍsÙçó¨¼ kŸ5G}�E}D†á\®þv<¡i3]„;*D_`+wòC‰~VZXØ®×ß}SeÍóïk�µðûÎíÙ ´€�<é5 Â v«(SØxã�޶­î14äôLÛ”ÁíôØ•$𧞀½§8Í8Óyš§„ãªK0‘ €‘?œráÈ$ùË6¨l„SÛÓ¾Ôkþ;Y`L\¬£àßôbÄQ¦˜º�ê Í™§p¡�“ìø^€fªúÞ'ôfÀä9ø›ÍùžƒŸ�<3²“ea/œÐ@wX4ð•Þ†*`ÉZKÐï§ÿ ð YZ_^/ð“ªÝV¸îs ѶëmnQRMî×�q­QE@2\¬Û‚<¹§L0•Mãõ9ʬì`¿è>æ_ÁN 9Ù×L+‡^½oA¨9þ€/cs›Ò?r”sàoÖÜ?Ì/:�½ƒ}Ýg@¿Îwîà_8‰öþ«@Í™mCðÏüe@²Ùð_‰J¶ƒAÿ€‚~oòs?ñOÀ ÎF€ÖNO6¸ÏŒ{Oé€.Ø0A­mÀÚ©:Åïåðï`›sÏ»ÖAÖÐk…±&W)#+ø)”Ýò3¿‡e.#ZÁü„ÀöÞ){W€×úÞ‘vc·îâYiY`Y`Y`YàuX`m¼ŽyZZþn�³×®Îß.©œà<xãtϸåÏYãnÉ£Lú8 " 'Á}B†N€æ§j@9œýèÿ(«n8ààj?ÚtY²Eß°­Äï„Ý‚o”õù»Z ó TöšÐÚÚm¨Üƒÿ±Q0Û$² w<åv=²¦M.px�©�ƒ+ s]�7Ûü'ð6|<ÝOð¯ ×§TN�ùÓ.mÕW®Íqý©ïàÑ7ãHù †¯®0Ë�—k“ë8þɃè¾ÖEÇ¡È €ýïtÿ =s�Óò @ þÇ\2ö6§þÔÙ¦ñ•½  àž§þŸøûU?ÿÚ€NàËO�òpìæ{Náž3ôQÙvNrÿ…§ìŠª ~@ÇÆ�æÏ×Xó©({ô=ÜoúÀ…Cóž_ãcŒ üd:]ý¹¬þ¸v~ <ýDwªÝ¯`hgåQ‹´,°,°,°,ðB,°6^ÈD,5Þ®ì^âˆ)ù °gœÂ* |Wð9=øï8õq|qŒÁ7 ïêS™bur{œÆÊ>  š7&Ð�þŸïa‚¬±$×Wù-0í kžv/~­¹g~™S·ó–Nè�&Ôïtp�Ïÿb€ÝÁ]V½Œ�Ù¼¡?RFw¨³9¶ê³Î¬ƒÈ”ƒÃ5—·–ësYàõ[ ¯ÿŒæˆ–º—^²ÖÀKž�¥Ûoo;^³¦Q÷ ÁŸhvH©«<åk mzÆaç&ˆŒÜ ÀáM¨n#´ÔA¤­ÝIœD²Êqö½ §óÞ)ñÍ›´u;Ú—Ld%Ó‰rpÖÇ›±€×—Ö AP‚}à.øO=�4Ã�zGO9þº6Cê°¤šžÌ5‘:C‚¯Ò…뚀�£íþm?Á>Y´í'èßmPŸ´EFeãh@¨4ÃN3Ã>"ÓOÊ5Nxl½±§@“îàI¾Ÿø€|7ÈÉ€�Œ[(ñ ?÷ßÂù;>ϧÆëùBÌ•ÜóôŸ<ÿ€Mó´~Ç&4Éÿ,[Ñ_à—*û¯«?æ0÷0ôÈø{ {†G×À·œ<ýgŽù+Ø/5·@æ‘ñÒæ¢Kä6>úA¾Æêà?Pvw™9ÍÿÔ�5#/2z¢�ügôðD/øÖ&@·Ö—––^žÖÀË›“¥Ñïn9^$;¶š�?xÊ!œƒŠ”_Éëå3èd‚þdndÚ£�wÏðS&QÐÒ'u$;¹@œG9Ü÷‚Ñç ß?Pó]û^.[!»Ø1Ç>*¯ôF,À\·œ5Æ:sð¯àÆðLfmÌ0æ =å k³¯6ðÃ\×í\G€×ƒÿþ{ý-Ø?*{ó tL`†N=Íå^÷¼Ëñõ¦ÆÐ¸vmÙ›‘Í þý@ÑzÐß7@?Öuëû�xý"@d"+9s©ræÚý‰/²û¿ø'zòÏO¼ÀPî}\2 üü r¿aÀÁ¿pîgè†.ÆÑIe'ô©Ôï9Á�ÁÃwª/oÞÈ^ücAÏÌ/½X°ãÕúÄFÖL0Oÿý÷‹²Á¾m¾ð/ þ¥ïbð‰™êCÀ›À³D ìá ˜ös9ô—^³r¼æ1,Ý—°ÀÚXë`YàN×#Ú\Å*‡ÌI0næC~;ˆ ZFû˜ëçrùè71Ã1¾ð«£ˆÃlœq‘ql•Á½©:�€“ppÉIЫœ€¿óvš[ÁY‘ñXØûlÛWÀ_–~šj*æÂ4èd|rÃ]ßéá}ìˆû:îõ%Y»ùí;eãÀªÏšbï“<=ç˜û<öa„ã$›S&¨êi_B�hÚ¹�—|äÎ’<Ñ�lêùZ¿é*» cìÁwÇ„à~ä$€Ú%³qÀ‘|²�ëšÓÌ¥7v�¯L°OÎÑ—ù)@å/’}¯µãÉ8Ù�êÏOýé7}ô Æ]×=»Š?´Ì cCgÚº Íà«�“_>}ºËšïÏ­ì €ô/~ìa]N¿ÐÒǽ@°Oà/ˆ=‚üSPøWxD¿×Z£½åÓÇ”=6Ñæä9Ó87Õ6¾Ø†:RÊ.<á#rΚ>TÖ.ôïÕ/r^*|ëöùÞñ¿Ôy]z- <Åkà)V[m–~ †ËØœÇÑÝìÊÍåô �Œ^áï™�ã….½qdyÒé¿ï’“‹cÉñ^žøñô)'|˜:h•q4w²‘MÐN/�„S)Ü_ê¡m5ã“v+ý8 ÔLœwðû[fo×p줅 Á`Ïc3@t¯ ÚåsMGÍÚX[µ® )‹küZãÐG\õðxÕ©Æ’kÃ4ñÌA=ÇÀ;�kÇ¿¯¯%Á£tL=â|$MýYWšµ¾ë Gd�]¬Ï‘Í™æKuý4ïðÉŸÿH¶ß€ÜÌ­êý{Ý?|jBAþ'åþúëæ“2Oûù Á?'üD›6Õóïõ�JGæ#s⟨ÌK?ѵ²“ÊŒ•ûÔÛVãO�•{\d ²¹€�|ïSpàØ‘yÕX¾VÀ?`£±ùÃýŒ¾½– §lÛWÙý–>#¨¡NcOÀÏFˆOÈ6¿•½ ;Îß6²90dHÖ=œ¹a¨¯3ˆZ©+ï�¡ó½šEXx}è×ÃëÓ~iüV-°6Þê̯qÿz àVºÃB�#™ÊŸí\NýÄ鼤Gœéq€N¢^6ÞËÁ%øÇù'à¿ü‹/Áÿp¸ÕÞï@ŽÚøÎ‘kçx!¹VüÜÄ7¸‘±Ò£-0ìwÒòÁ�– v¿'»ó/ØŸg3 Áeü¼Fh“ö'zŸ‘ì²ÆX•ƒ�€Ÿõ­:—…�—PÆEæÚI<öÅt°Ÿ hÊ>$‹?yÈrÏf½ò™ð\ÿŒÛ¹àI²mJ@ãºÆÇ<,*sý&c ÿüGt6>iŒœøGtœ®yÏ'm 汑‚ÕülⳂÔþõ¯qÜß§DãI¶¢×þ³¢#ÐGÿÕ'Á?ý'è’ ê¹g¥­Hž )�®ï*è®ñäÅ�ü¼#¸a• ü¿)ýçoŒ²hÞ4•äa+ m×p¡[*>è[‰€=ï^ ÈLùV'(약 $Þ$˜ ûP_w ;¿òƒñÐ.‰òJË¿‹Özþ]fò÷ßy+- , ü ¨œ!œ"Óšs„Zƒï'éh§óB¿ès”³ àqÈÆö€œRoÈÑKðÏI€¢ãhÞŠÏYr½ ñû¸4öÁ?_ª»M€‡l!~y™æBF\ÌáxR¿ÒE \Zw®;°áhsPçÎD‚þÐC+D2NÖl’מÊúÅï`¿ Ÿø wÐ?Ã’I�‘ûC`Ó›+ŹÑzŸèüpýóFlïkNÐÎp+ÃÃÁ?Çð9‚OðÍ×>›„l€`î/Úg¨ã€Ölx“@2½ Ðú‹.@tAWtàþ’M€ü à“hü�•Í+þ؈-r¯$yó†'ü î9ò?‚}• þ�pß3%y#—^éÃc¡³$Õ�$ûí^z({qŠ"þïur‚ì�€¡«þƒ2›@6V8™Abs�yeì¶eAêŽhÐç”vн6Óvæ]åe�—j�¾Ž£cÖsÊ . ¼t ¬ €—>CK¿·e�r¶âpþŒÁ7÷qsnO:í|è×se ެ�Y9î|1âXãàsÃñÏäLr*àVõÞP›ü4¹Z þqx-Stêœpzé§Õ¥ÊÁuJÁ]/c0^mÍ´>îY`³Þž¼£a¥™¶+ÃP| $×O´­¦}Rž™Ë÷c# 4­%×Ckm›ôSt‘š‹ã^°¯õâ-Z× þ½ ò ƒÃWk�õÉx½qE¯Ð¡‰Ï4 2k;›Á;L;‹àãg¥Ò·wçñØ•¹a¬Ì ™`Ñצè\ÿv˜xkÌÙàé?÷î ;û5Ý4ê ?ch�¡sôõUåØ?†âƒÇ÷ ÍQžþûgjG°ËSw6v6�M{™Ÿø €Öù~ú_Ajt¢ãÐOýpÁî> œl>° €àlRrü?�ÿÎöÌ¡ø˜—ÌMp^èøY�4�ÿçÿüç^ö€êßUðo�MÝ3Ñ�õGß^‡}ºBøa’®N¬‚}ÙÁ§"*ðÏÀ;6öeÃÛ‚.«ï[2?S�Ù˜ŠÙÐáç> qcOs3ã�f¦ i{�eU- , , , ü ¬ €`Ô%rYàj Ä™l vÎf£ÿ´ÜÆCÑq>�ô�Ö³{Ñì0ãËqÇyôOà…¦<6ä ú鿜ÍñûÿªOÀïþEÃa·ƒ�œÂéÛΣꃻÑI¦ª�ë"GÙðX.ô•-`UÍ!^¶s]³ãÞÓ¶Õ�Ž&Ú�}Î4‚F€C.|þ©›Ûõòèx�̳OyÿZ_ÿø òß³±E°ß`6¼žX“¸RÎÚî²ú™ËƒÓ¶ø ýÌd;Lζ¢Ú›egžàs]Ž [¸ËEçZvð¯v<}÷±{ÑüözñP7ì…ìØL8öàiN|V0›ŸìÞ y¬ë@;¥¬-`îUùG^è§ÿ@ÕSF7œ#o K8)pÌM×W8Á3Gþ?ëIÿ'm|úÿoËÿû¿†_E#è'Ø7Wæé»Ëj�~±}6(‡î±¡ÌAòõ %øï�w*¼ã©ÿ¿ÿ}ó^·Ú _gþüLëýkíz@ò øýWÉdl”´37Gø�Z&yT›£¶�v&cÑ—^‹rm¼}—žoÏkàíÍùñK°€¡ž\mOmggþxwìã|κ¤ÛÐ�dÓ@㌃I޳e©œ'¨Üp>Èý g“'Jã÷ÿâñæ€êÓÆ�¿Ê8ÛN8â…åž½6Æö™6袶L‘QºENkñ¦Ñn�C{ÆB ·]èØ™´«°ÉdÚœe ó&À½rõ¹“1„ï‘M»FÓÚèO¼øH”à\9Á?8_>¹"ȺíOøTõ5 {vº5b�þ¢´³ z(c—‘˜æNÙ�]Ÿ¯ÌQÑ�èÜü@A‚ìüÖÞ6T=÷ ŸG™@ÿ3Oÿ•ó€þ/¨cÞ‘�JqÆ#=ÈûÞàd|܃¸GAÏ;àK;¡Û=H¼»MÍ7ó—Ÿ`ÿSÿüßÿ{óÏÿù?Îl$èvà¯�‚]™5¥>ÈÿôÝË*îzõÄ€Q›3~Àtcà–à_άcå5d:ø×½Ú/äd€ê°ãô½½l›2m:Nù,yÍH)ssÆ»èË/Ñ} ¿Dý–NËY`mÏ#óK®9üÒŽþÑSÿÏd�øRù«ÊüîŸ#ÿþ¼ ™ ¯#õy”F»„o”kþelÚ�yæÔºK‚~o¾Î8¼ÙU¶Éüø„rÐA}�¡,zt „gÜŸC,9�>óQžSçŸë(µ9â;£}oû‡ô;ë÷µÐ—}^ËL-=—¶ÀÚxØF‹ãZà{¿ˆ^à�¬Vœ¹àv<‹�2®ÎYxŽ |g<8¶ÈèðÓ.}Î8Oíf§8¼ò¾ðÀ¶ ]N¡ŸFqÐqÔ팖úɽ6¡óHrTÝo)w¨:Ú0¾@ØÏpê’h³“ŸŠW=®6†yœ£žùì|Í)OPGuǽÒæ„?Õ÷l ÏZ7£ ~”[Cîäh3Ê�®Ö u㈿‚"6F€/œÀ)�þ½ ‚ª'HÐ�í(;ƒ—^3¼ îÏ­*`×Hø(×ù> >ÍË «Žµ1ÚIeÿ@8OÚ-W¹_e e]�uïøÂ}D¼Î%+öŒ®ÁÜ×€ÜÓЗ¹ç=ÿ�ÜëxG@~.ÀœûMÿ ¤ù›¿ñW<Ðáéüà¡Ñ¦g;å�ßcÐÜ�à¿ð<¥#è7Þy°EÙC¢îRÙzmÖ¹Ó3úâ(²&¨‡F2Ž£ ]ù†©3×å·�¥9¬‘�Üט†þ ‹Ô8ý <êhÓÇ-|ÔõvÝô¾(�Ôy!R&sýA­Ÿl†w†‘3:is©ìà=PAk#´¾ÀYè@??¡­²iUd³É»M€®BáÃv­îW£}Uθi±{æ*e`§1¨ªcÌäl亅{å®ïûAÚi'è'Ù¹‡i§<øa,~У´ÓA}z,0ªý'ø÷ߊæû�ø€¬~ Ïßø}%ë©ýÈ”ì牿Ÿö«üNÁÿ;ÿløÉÿyúž ND—Ñ)e¡»4¯¡Œ ™ú±ãb³Bºƒ¿ã"I4¯iêkLÿ_Ôþ3k›úÊȦÎ?ÝÒiCÉ’˜KîûIȧ Éuș𣲙Š<÷÷Ð\XXXø~ ¬ €ï·á’ð-€#ñ»&Ü£k2.VøÌ{9t ©—ƒÓ&%NmRè�/8�z;Ã…ã`B#ÛÄ,gÐOùå$æ(*Ž;´î¸3¯´‘Œ9uG’ºÃ€s‰ ê…ÓÇM£Ž>To™ÂCwÛrPigG¹ÊC'ø©TBFúÛ(/ûsŒ¡ÔŒ}»dÙu¢'¥½ËEŸybŸ{ô6™C42ÁDàŒSî´YNï#xÍ»ý Üý„sÂyÚyôûé¿x�^7ÕÎëI¸%êÕ´Ã\ºØ&xTýé°ÖzúÍLB7ž¹™aæ#p®�`ÁÜ3|ï�_}ü“Ó‡×WÉØá¹—Ôýƒ5@ýX�´éi*{nºªg.“Â90²êòR@oh~ý–|Ëù[¿¯ ðy»¿Ë ø ü�ëÀM�ðßüiÃ`<ùWÐ=6Ô�¥¾ÁYVÕ½t§ýv�fÝ�MµÍvâ§$Æ­µÎÏü·„ƒ754Fÿµ¦c3NAðŽ€ú Fò7á$î«lÚ�y؈[æØxÐc«ÚîÃU5À¸?KÞÌû;÷,dY`Y`Yà'Y`mü$C¯nžf�Ç|éÇyxZO¿¦•�Wu'®Ã8^@ÙÅ~ô÷6bÛ‚‘ Ò¾»É‘Ÿ'P½¯.'˜zœA y ·ó‡ãFÆL.§½ŸÈñ?1ª6w—D›S§ K/›ç2í„S�. ò]ž…”»lã%3)}XVïï@ÎK!1†žtxž±´œ†G†é|ôº†wúà�øM§�ÖÍ.¸O¹CøŽò‘ÌÞ!sÆÚPvð¯(Oü ˆää‰~ ƒ~ѽ*0BN/{�•|ìB]֌˥‡mv€w5*ŽÎI¥Š�¬÷{Yöçž;ò¥ù)A¬+zã>’DÙ÷AßïÛ¼z"746u?k¤×ÁsE¢¿ôivtb®Tà¾Ê €± œw /™9ö›þ4Q Í‘žú©Ì‘ÿoÂ{ÎO8àÿ±æ´†ü çE¨×ÿ—F‡îNèÇX*Óø …�5L]=ù¿‘nóœàé¿×=2Ä[ùgªûªŸø2”<ÿš^ˆ}Ð3útÜÌíƒv¹>:ÞX¶õÐ _XXXx ¬ €g1ãò«-`ÇñW+ñÈþã$¥YÊÀ£¼¹[wÙ¥Mxçú´ïýÑ|dêã°õ a ³œ8`{C9ƒ»àŸò¼ Ðy„“�O �>À«’P§)C„ÖÔÈÞ´ÏâC’וÚ·tdŠÇí o­_j}›F)\u_Ù-u)ݶêaujåÑæ nÈI]`k?äA#³.æ<ÔwO2ÿd‚±ÊïêilÞäï§þÌ-ANåœ` ÙÔeõ—ÀÆ�Xõï6M—¹Üª~ŠþSb]û:©:ʦu¾ØHîó”rêh^‰ûEÊôN Á%A°¯7á^K™Û5ÿ>Â,zÿkº»^îú¶Kôi•þ £Á6¸×Qöúi-ð¦þê�'þüôûØ?Á¿ò Gþ•yòo(ü½x ²ýÉðÀ %Ÿ;!cèYÅ]ùþŒÁ¡)Û€Çà€_ò=.ä*³~Ç‹(+ø÷ e˼›…Ÿ30F~þ€<2¶â}œ„ø úüûlÌÐsÒ“Úxc¬hg�þ¾É¶1�ït®¡´ ­ó/|Y`Y`Y`YàñX�·Ùjñ ,pé‹ÿRÝ/PõÑ]ÚÑ’£DŠÓu âbõz;híHV§ÅŽœÈO`êS¶#¬‚7¤3íâ<ãÔ”3è�9˜y u~Û½�q:*[€’° zô´Y«S6<¼q:]–#/2¡ÃÛ�ÿç= üáµó-gçÒŽ¦vŽÿç'ã÷ÿª·ó)ÑíÓÖBöèv”Ð鬺ëË¡eèêÓAGñÜO襶qF Åeg¶Ú{¬÷[¾8 v w™qRǘHÀÂ�hƒÇH}¤mh•/ñ±v¢C­£›ô‡žÀȼÐ2§ ‚È>PÁ?Og³à@Fõý þMc-)“f[²ž’î°P^8Œîk%Xil–r`æÇ÷ߨ_órü‡›Ð8Ö•{ ¢$ϲ2× þwo¡�àŸöÜ-%²"{‚ôŸ{^Çi‹Œþ†{Êl` ÞŽÿYk峂úl|æÍÿÚàÀ­6È<ñ7ä©zál2ч³dòó+ptH:ðNƒNB÷9Ù¶’ˆmŒ‹‘1Ûî±� ÷r'øÀ¥§7gŠŸùõ&KÍí‡â‡Nðïê§~/דúNBò(!§ôJý }íí«¯\o^ks£U^XXXx’ÖÀ“̶½T ¼ 'gˆ\Îk¬áØÊÉõS.Á~t>4NÎÜ€ÂqÚp ¡“Àq¾ŽÊq&ËõÛ9™´%ÙiŒF¹pF;ÄÀ)RÙÑ%‡ÐÿÏ­§u_q]þ�ðOÊŸ56þü Yí�?œEkpü±s*Å’1„¡u<õÆÑT¿N½ =´j4ä¥�ÅcÇ5‚ç6‘ŸúŸÑ•dX: zG/pø(î±Ó¸h ;Ü„¢ÂßÓCex�xÒ¯Ö†ë; d0ؽ۾ãð$ñÄ_Ù/úS0f˜rÁ<é7dYÙ (9ÖS9ݼ*¨ñeæ Ëvà.cëð÷½+ö¯²ç©ÑFy2ÄXw¢Ï64+2˜ceo&€s?,÷ÈœÊæ¡û¢qú· “x”Òwp¨d?í×XÇSÿàY/ã' ìyùŸ³žôós¿ðOt~Kï—þñÄ_e¿ø��&‚dõs)onúD/ô ü,1®žÌC£=å$0ôHõÜϾýñÇÍ�²_ð§{6§.nÈØ^óp+Þ rg€bo0WªïyÌ sXýûžy‚£_‚~px“Bï´Ô½ø½ze|/a,?B‡‡ìó»�ÿGØtÉ\xªÖÀS-·Ú- <Á¸2| òd&Ç'?È©ôo3åâ|}U¾Uþ¢üNÙÎ/^Ræ¥M~%Þ<‘êå®R¼NsÿèÐrwáu0ŽÓ¥<�`�@ÿ`ÃMS§0ÿ—ü÷ €ÿˆ‡ü·ò?ÈQî›èÓ3:õ„îÔ¥^w„‡$ápÄ)qN©ÆaGU°Óü«Õ…§mörá×} »HÏà†½Ìª<²¢YspR‡ßjï>SÊ\†ÞiŸë¨?ƒª+í¶ ŸöºL«€’禠ǟ`ƒ ŸÀ¿eþÞÏÿ펮AñòÔßÎ(8‘ÈSšáF}eŸ±GW»ÑbcæÜepæ¦òžú{…dž½*4÷—>´ügS4¦ƒ^zYÇ.ð§ŸðOß@‚d2/ÃãÞÊñùMü'eŽÈsôŸ·åä'Ð÷ñ~Ñ µ¶ü¤_늣ñþ½¿Ú^ ú{jÛMÏ”©;K},‡‘ žœ¶½ N4�×ÿ À5¢1}ÓæÆ�îål¼øD—ìí�[•¹¯ó=Eþ,þ17̉æÎ?Í`%;@óu¥2ëçG—Ü“ÁÃÓé¡u>êWZXXX¸Îkà:;-®e�ç±@œUœ#9P·8UË=Ö›‚¼4Ï•Ç&Á±2AòØP=Oû�[ðïßû«¯èáèÓ³Š÷ÊÐæ”1@ç^Š|ðžUt™º£ä¬®68£N9ðîìÏ÷À¸¯³ÁË÷•ê? ~້¹ášÓ¼øçÌ“:b¾Ðƒëð,Ñ&×Yçñ+BêC£¼·Yø²À²À²À²Àe ¬ €ËöYµËÏn;²rвLJ gê}åùÀW9—µ$�Pú€`Zܬ#'¯;—ÁàÀq”ýò(œ69t þÙ ài=A~‚~òß}´_õú)wœ¶ÿ(ûé?8òÔŸ7è[ºÄE D¿³„Þ¤™zh�'¸õSõOrÛr,‘1‚ô‹ okGt@Kºû°.%ê�#üT§»æ§XÆCïãpýal0c~4D©�i#\AK›#¨õ`™ ÚÁ¯28öÁ?x/3'ʶ/�Lð¢³IÆ1îž½ :A_N i¯>bë@‘ üµ&¯?죔µh›Ö€bs×3gÌAAÏÕL«v®;ÂCkpØ´Éu¿ô¥¹OÿuÏ›ÔUn¢…Ò/cí0'X¼ðÏ/ýÎoÿÙÈ“ÿ@hËõg#ÀOýÅ»ÛP{bîÉ—rì$õrh[ÍÝgtå,ø��áèu/]ùnÉé†ñ“‹²5?Eó=�£ÿúžrÖø}€ 5ÍßoI`Èç{$›¹ÿ1Áá÷ºQêô�rWO]çMý‚ËËËË×Y`m\g§Åµ,ð,°C‡#…3$GŠß„GGôlð6¼�‚<}â÷–8?ÍÈËOpüHw®×VC§2txüçe}À¼€€ÞÁ¿ Aÿ ðô”5fÊú…#Çü‚Œ'19:Ç4„˜qP�6¡•©ƒÚáü:I§³²*ݾÆãy -26Ix®›Èjërµ½§GÚ<3.ØŒ«�ÐvåÐt›Ò ]²a=O! Ó¼§#úLKx ¯z;ùŽ%³àS/*;°@ÙÔOòu] ¼h”ÍO G=AŽ ƒþÐÚõèù¤­²Eûóî#¶¾£¼l[�²c©hÉÞ);ÎSàÌÉ =Ÿ}N‘�rõs-²é¯2÷K?an4êè#ü×Êgî2®à@gÍ·ƒ­ÿZ†ºïúoótNpìßùWàÏ&€7ÄÏq÷± üÚàŸ{wôŠí;œÇÝC§œ€{ŒG´àð�'u<4o„ÕX}ÂA6ö¦0×�líŸvå鿾“¾�ó½¤vljsÍìd«6ȵ”¾€ž;Á¹.txŽê ÁßJËËËË×Y`m\g§Åµ,ð<(g5'8ZÉ I83¼4ÏÁ¿œªü#ø¯§-8½ þyZECÐMÞÐ&ìä3Îaw*Ái$ùÍþè¢~øKGoz@^’ÏÓ|gñótßA¿ðgœ2Y}¢;Ñ>Ð =ò#ãI³Œ+2SßéÁÝ&Ž¥ æ¥,Ü6’žÀá�ªì„Ý 7_ñSG™4C;¸5_i³q>üYCnéårÓ�Ì ½àЗòD³3-å¨7—C>T—zàœµ6 %¸A§è¶vÍ›üôñ}]c@¸¯ àIö\V�qɳÍs=�ù®1vû÷a¿F;’²©’1ÔÊÞæbEe~jŽîÍ]æÕKB§ENƒ±%�¾.2ÿ̹2÷Ëu�8|È6™× éÞ¡ƒláZ<÷ µ<ÝþTA1Où}ì_A¯Ÿþ§,èþ©­~ ²_ü'¹g›³tàÞL&…ÖaèfÐG׿Ӡeî¯ÈÏXÓfY Òyü˜#î?¹Ž\¦¯–<�´�è°ôº´ ­‰Xè²À²À²À²À•X˜(L%@IDATWj±- <—p\È<)!ÙɃ&'— ÿƒòÑ oð¤^µÃQõÓU䒅̇Rxá÷“Éwð�>ÒÑ™'>Úðû‚ûü¦Ÿà߿맬ì ^móûþÀгYÁ8ø7¸w ïFqF¿ãØcŒ…ÔÛuZð�ëîÓ6pÃÞr«�ãé’tÁ!Ê$͉ù¶Òø´4ñporó#�.—f.é«t2letM;wU|c ge˜Sç†íãŒþPÚõ¬uC™kÁtAì™Mp?Å—�Paï ´¶ú‹7t}dCÀOüÕÆ›@eh†È¢ŒÎÔ%Þ(©yÕ0ë�AÔêõxÀ]ÆÖ3Î\@?�›·6zéãÔž“|Ö‚ŸüëÞ⟨ì �âóš¸ÔÑ…º®ZS&ûÞªuá“Z?løˆ;A®²ÿ2R�/›~ò_8tÖ¥ó¯öY£¦I.øœé74ð£,ò ƒ£#|sŠþ3ìÁ?u=õ2Á·¯6;¸• ySDv`î½MðOÖïÿy)b?6µ½V˜?Ñ|m &y •üЀ¡ƒÏ›ÔA OÇá_iY`Y`Y`Yà: ¬ €ëì´¸–žÅvîäÄôßHâÌø‰–\Žøüï6Tvð�Ã…£)Mâ úé?Žr®ÐÜ0ëR�f¡û€d² �>üóäçs‚Áÿ ç¥~~±ŸÚè� è¸ôã©¿ƒSõG?è�sÚ�{(â3¤Ø£Ë í!ñ±Gà.(¤qéoyql‹f^áN£cMð­¸Æœl�þ´¼ô'öQî4peë $] �x- ÉHy†éãˆ^úX�#\kÆu‚vôD£™ +™Ex~ÓŸ#þ<ÉwЯzæÆ–tDp•AçT«ÀCœñØ•Jã5�ž‡š«àc“fžC7î’ÝÕuÕóO?þ™åüÀ´ªs�J›äëz9äb �ìj�ÌÁÿg‚Ý ò9ä©wNøé?tÉpÖz"ö&@hÄJƒ_¸m>Awtt<³nÆÐaþƒ#³§.� ¿_†±i ¹¦ønÂÎþ_õäÿË¿þu· qçÈõÜäúôý]s8ôá^ªëõ^Å„ûҲÀ²À²À²Àe ¬ €ËöYµËÏk�rT‡s+é8€8VÐø_å[ÚÞ�£u+GëVŽÖ‡ÿûæVÇ„sÎpb;Á8WjÏKí´á¸‘IÁ¡ÄÙ›�M³ê'ÑOæ%““c#@}~RßãÉ?¸2ÞP=§ò÷€ÙpYr€È-­ ;îþUOŠŽ.<ÃG——>#v®K9¶ 4?ú—ŽißévtkŒÑ‘üT¬ê�ï„Û!mY3ÁÝWµ5�:äV6N}hÁ�`§uœ¶géR]—qÐ~–êÍ­Õµæ-BðPømþÐA¾‚}¿ÅœvÂÙ$Ëf€q„µkÃöªò¬ ¬¿{b̶5°›ÀŠ¢qÍoîY¬¡ÐvxxK 병ѬYW²–Ⱥg¸OúO®rú¶.%µãÇ]Öˆ 49þ)'ób?þŠUÑîöOà¬1Á÷‚ÞŒRÇ ê±ç>×¥ ¼”ÏF:W 8œþSºKÐÓ—ù¸î¸®rí„›ëƒëJ÷zþ€@Yvá½4dlÐç9Ø‘ ïø�Øçîˆ'õ©ëåŽG0ôN{Éø÷êÛ¼ä1^Òí­�ÿ’mVݲÀs[`m<·E—¼e�k,€ƒ‹³Ä¡ÅÁ*Ç–Ÿ° ðAÁÿ þÿüŸÿ±ó‰ƒÅü÷rÀœµ!0pÑÞ)û%U8j8^8c‚CàœèSú‘IÁq}4¿ �ëËyóÿ> ò¿žÿ«ò¥·³ð¿…ÓÞÇý�U–&7ä8§B�è�¸•öå蚺ï…È›û‹Ì{uÒ?‰6 ªp«.Ч4þð˜^üî ^3ׂ–Ws6ÒÐþ–̧ò�7áî½K¿Ñ´h.ƒ“fØi´¤#Zê€'õ±è=È8ÉZ³®Ã.²)rD,<•ô g�{½ ä:p}d£x‡[éí|bW�66ÎÀÇ=¨¹7yk²Ùhó›yv–õï8ú:i¸õ+ùÑ%Ðk¢ó6üNð1Ù‡u“̽3™{0Á?ëo¬-Ö˜Rlú¼†—`93´M Ôí­À�›†{E>×Y6`ŒÜ×¼Ù^��26 Û.@eoºOµ£­ä »*{é\é,`½Ä3×õò&u}. , , , <¥“aÚÐOrñ¸ ÚQ¹Ó.án<}DæDN1Î:=;×z¤Þe‚)ÉH0Jðî6ÐJˆÚÁ[Ù�DpAgØ®²ëSFxRÇC{#°ÏApÛŸñcsæSk;sÍY4`æsÐi·¬Ý4ó¬¤�‚é{»~ð=WÒZ`­8k%ðàÞàÖ†ÀØ¿¯&h·=¥×c!íÏ2²²rzp`~xøÃ](¿3 l€ÝO‚A¾gȱ�ÿöûˆŸï1¿G*c+®9_‡t^ÉsZø\w Ooþ—–––¶ÀÚxØF‹cYàÙ-€ãb‡çJŽ´�,9Nù€O$øÇy’Ÿ´p£“7ü@l ¼6ü×Ml(û÷©hOrÚ†#'ÒŽCž§ö�y¢?6¤#�¾7ÄÈ&À?*Ó&ލñ¢3†¤Ž‡D/RêSî4ðN§ü”ékÈ�¾NÀW;ñ×@þ…›®†@r^4æ¢Ï¿ç†ºZ†nÝ>¨KoJ³l—S�Lð‚nN:ƒ½îN]Rd¥<éž±£ëþ=8ö \9ã·¦ÕÖx«wðO» ,h“ ßOn«œ@Î2Es ¤Ðñ­öm~6;Äî�^+ָ̃7€”{~ŠÕjnÓ”uš>ØQ®>a>7”-¼†´¶€þ)�®2±lø=‚c]©Í¼ŽËœQõ!Zþýµ ¤í¸ö¦ÔËàðôZú¥.ø=˜qhÜ»ºÐe¾GØ\¶ €ÊØfœМñ]‘M€oÚ0öuˆ]•Ï’ç¸UñÎ<�}¡ËËËË�°ÀÚx„±ë²ÀsZÀÎ NN®Ÿ9À;8à'ÿðÀ §Š“_+ø÷‹µ`�—² ŽÓ…£N"H’ƒ–´sìDìeúÉ{6¼ 9yƒ?oôïOþÁýô¿ È (f€±9@†FYy­�)…f3_èO�½/æÅ²äH`‚h 3ã/è§]©£müYm[¹Èœedu8ËL_á·®ðu¼Ê�Å´6»rxM¬�ð†6—C<¨���dVgßHÙ"3õ|Ì8å);X(šƒ Öüă¨Èº‡›ð†>°M¥Ì‡Øš7Û\Ù÷)­sî?#W�×<v%¼ë=J”ä&UîŸ>Ô¿ B=å^Ÿ6ßeôòúNàff7O¹9�SÙ$`M%ø÷F½ïÌÈ!èON9Ö‰ý¬¯øHàÜcÃ�žÐ¯Ò-cÊF@Ê?ï;ð÷‰àüû]š'Þà{¢¾‡°alºi´Ù8øôüV¥¯ï3ÆFïmy¡ËËËË“ÖÀd�U\ø‘°ƒ"g*œÙÖ!n~@ðÿGxq~õÓ€OÚ`à‹ò×ÿügƒ üo”ùoæ�ð‹šÄO²“ŠÃƆ³Òìv§rþâ¿å—¼Ï’á ÷OûÓÞÀ ’ƒã š®��ƒÒ-6IýQ9un\ðÑ;ϵøÐƒqÔX …Û~а-eÁlg³#)úG–5`‡šÊ–ß¡ %í-/í"œúÈì°pë×p÷ÑË‘s‰Oêgþ”;œy[�­¢z`Ϭ½¼%}бEËW½ nÛ=x‚Cx*[ áÈ1/áo=%hívÈ„æûóÊܱîkíGÌæ>²Î`Öñ¨¯þ\Nßôßè|CÀ�¬`eß;+øOП߹�àŸ�&²Rl÷=Ð׃dfˆ³†lVnV ?áê)<À«tÓøéŸÀ;»� Ã/{8øôO°�¾_ÆÓÿn/¾sþ“%7רç¯+Ùðð4Ò6÷�°ðe�e�e�e�ï²ÀÚø.ó­ÆËO°@9UG-qŒòÀ�8N0ál+ø¯ŸŸ|&ð×FÀg•y8Oÿùæÿvúh�£¦Ÿ|夀d“ââä�ã4†F;NdÀPýóäŸÍ€]à¯rNðò?Nð÷Ö[rœªßQ Y>úNOÛÐ;Ï\—v�'´g�5Æä¬1bG~æ%~ÚUuô=gܶ!À@^Á]`JƒÔ¹qñô<¢4 ü¸å}‡‡æFúhíC2 �BÇ;Ó=<ªÏ<†„– '^�ØDyü¾Ÿ²Ö1ÙvªzÆž ?8ÉAÿ†/âF¡íJ¶À˜“²çØ (9ðcn“YïÌ%åÂG4RàV:ü3pÄ -tÁ{:Í‚‹Ïúöôâ´.¼†¸wŠþØXâ{s®‹9øïŒ.ë¿Ãš ¾Óû=þAý4îÁNÆöHe39Áþ<õ/GîSl þoÙ �û €£àÞʶ�>§ñwÞ&b¡ËËËËX`m<` U½,ð³,€ƒ•Ÿ|�ÓåÀNŽÔ;=Õ'øç/?(�çÀ'm¼í¦‚ê]?‰§.<•IðÿUô<�v?â™�BOh$ zNô{V}ʱqï ½FÒ¼ZfÁüÓ´£$:Žnj‘“àß$àžú/ásÝQZOé[´ÒhÔR&'ØÎ&+{ìdŒMá¦AW=k´§ØØñð„–ò[‡}N2Ødè™ ZÍ¥ƒ?æ”ÀŸ Þ²ƒ0Ê�Lž—´ L¿ ºõÛû1žþzÛЮ…¬·ž(+�M‚]å<ùçT�íS߀•z¦ë^Îõ‘ œ´dèh|–smPO{ 4Ú#ÿA(x=ÐFöM{_—ú^¹· ›d#€¿§�ƒÿ¾ ‘W§>ÏÙ ˜i½|µàŸ,°,°,ðÆ-°6ÞøXÃÿu˜œ5ÿ@”"QÔ“ݧðãˆ)WæwÿæÅy#Xb@Ùã$ÍNm”,טš„†Œ¯l*(ûD�6€_µ ñU§È_Äã,Yþ‡Á¼#€Í‚KÎ%]yœ‚éÚY‚§ë¾™Y�7´´¹P�•¬GÖ8>Ó©«ú­a×Ä”Ã�™Ë½2ïÕ?� Åùµ�êÛ8uð†ÿNƒÎG´Î¾3Z¯—þ¤Í‚ æOÖ¦kE.|@XkÝŽ€Ÿu �C;ÐÞ=HnìtÎXª�ÔWQª¤÷P~3X¶¿fTÝƱMeì䌠F¿‡ÏÁûP*ä³via®kÈý º¯@dR¯¼KsyWùÄ‚lè €‚ü{Ê8ÆÎ¬uÈ:÷u)­€s¾¤ÅÌ{Væ®�<Öºh3N_áë?ôkRú¯Ë_Ò¸>g›èúOûËFú §ý�”H;‡»û]±eîSwT¦.ôsé¿oÍ÷Ž=¶}­zhü¯}|¯u^–Þ/ÓkàeÎËÒê [€/1rŽRò¥u‹Ã%›à|òW€DFqØÂ«v_Ä‹Ó:þŽON4'Ø@ø¦£�äÅÁ �Í„÷œ8¨S9}@Ü›8é-Ó&Ž;NúœfÇŽ™F¹·t¹ÆÜé³lʳ¼ð÷>B;jD£-AÉ€Âý2Cl }ÊÈèýݳƒÆâ¤v®? Áe]S‡\µéúS²Àç2•¡u<´À£:h¤Î³QŽi©kpèZc ÀOr]•ãŒáS©umÁ—¬zxF–~ÂGϦP¿ÒÞ{ ©Nv ˜{�çŸ5p’áKvŽŒÞÛlÿ]¹Úw9Èó}$÷î1Ð*wÙÆ‘ñ#S­S¯Aúa�6šÇSåÝØž¨2ºœ#¼ÓŽºy¨þ¨Í“hŒ»��~}‹ˆ\Ó«þa?*/$¯‹ õT!«ó¥xÄó€ÈU½,ð( °þ®]Ó�¼˜—~‚ÖÀO0òêbY`¶ÀüÅGHæïÑx¢ì/ òdž#�7ñHd%\`ó‹Çïd Ý—Ÿ|Q;ø¯úk@·¡�øH.ãLQ Ox•�3ÎñNœtÿ}º ·î‚B¶ŒœJô`¹‚#p­~yàO=òZ²¬Ô5zGi±�j£FBh)÷6w`û·Ìoü)g uæ;e�¿ ë8õ$ôœi°(Û¦Ô‘Äý7‚>«¿Aïý§¯3Z„t¾™–r`xSœæ£ÛwÌ£x=üÀ”32Á³¾k�§+CéÁ˜ï墇wØ%„7 `w%χlæ9nµ^w^{¢e��ÂjãúàgûïÊôùußà>‚œw=ømð¥Mú¡ýJ]×C¼ÖísvO?�(<À9w]¨ûi‰õÔsulý}\ãДv÷·jsæ«·¥®—#㌞ú—––ÞºÖÀ[_kü¿Ü80ÝÉÁt`-ç† ñ�–* á¸ÃG ž“· Øoå4ó¿ü3oîw¯àŸ x¯ R‚³ÈÁ‰³Š<Ú$ÐÄ!WÁ¿mÎ|Úvg Wº]>Éí¸�FÚ·d~Æ×xÝ&ºÁ«:'Ñæ4ä«¢¸¶¾Ê´ ø.©ô"óÄ¿¿è/ÇýGà½#pÖ“zh�ðomíÀ¦.²áSŽ]Ý>mgØe¤î!Zú ìíŠfÛÍc ¿è½>80ëÎ6¨öŒÕ™öýÐ[×zÀ+¶dšxüF¶Û¥•* `ÏJžᆲ©çH=6?È©+1{»Óî$ÝõÜàO€/îr»ÏX‡ðtùo"Zvk°ÖŸûj6íöý^=º½:~IîÌ7—/µ}Lr/fìƒ] ŽëºÚ¥¯aÏ.Àþ�m;-² ÍuGüºZUËËËoÆkàÍLõèK±@ô™qÊÉ9€3•d7» ø¬üQ�?6àÉ¢óäŸàŸüUÿ@²Ó� È®¢7�]ÎwÊîýhß²P'ËRý½$Úݪ>õ ý ÅÆ„^¤ÈL9´Òy–�¼Ð"û¨Ÿ™±$èÎè]9›Ùex£_ B’fc€_p ©Ú¸$šÇ0Éq´NïåNߤÞ}¦.°õyÇ$¬×Sì•Ñõ€– ?p¬­j“µ7æ_t÷dè»Üú( �ù¡ Z§7ö…b�ؽY#s™µtÖœs�{î'8èÈÉÚl²3�:n–&Óò¸Ç$øÏ}«èð8Ó8m-è°«‹˜ØÑ´¬ÏÔ§*Èô<œÈ¡~èrÂ9f"}OÙ' É¦÷6ºž]vt¤.8�ÔÛŠæñL´]0D»dÚGNàí¨®ó�·td·Vm�Í“ùv\ÌY3¦«Îºè@hy€ë=e÷'½mêM¸‹¼È”5¼ù.;fNͺ ®²×RÑ^²\.Y!]‚™/úó=�>*ÐïIàºà½~/uòœue;‹ný;MG´çP!¶ê² a;àQ}ç ~-_ø±EÙ#:¥?®édxŒ÷µ@ï¤|txÚÎõÐgÚÜv•—žbÖUÖ]ÚÑR·à²ÀK¶ÀÚxɳ³tû­-п8:ŽÃë£ö5zê’süž`”§ÿ¼•ß¹Toa¾ÕF€Oô'ÿ¼Õ_Áÿ·ýëæK6pÜz¦¯rÔxÓ3?=è9ÁÛûªs9?E@NŽn#GúŽÄfâ¼R4m+�…èD}ä ÷Akãº^®f³œ.–!¿øSOÑÁ} ú+'øº¾èÁÝŽ�¤èœr`Æ=xÆÑÛÑz=ø\Fæ%ÚQÝ܆r¥ÙV¡] :È>‚ÍàÔO»wš�+x’ o×R8€Õ§ |Ïž&[äšÇ&Ã.àêxôŸºeŽÖTØ,/Á™÷¨ÚÌ×D,tY`Y`YàÍ[`m¼ù%° ð«-€£Ò–8.8¤Ôü€â0ûïútó>žœæ/—ØØûWð“ þ€ÿpŽ#&Þ3òÞ×_®ðªÎ)xe‚‚NÒs¤†,;ÑgK”ÒÂ8õâ͸­ü´¯ºAkr�Yºi«£œzð$hCGú¯ò8îíB¶~v�ÆÐi´‹} 'eÜ)S— mÆCëüg´™ž6‚MƒAÝÑ¢kÁ�M�2´A/k‡yö˜�-¹ÔhûÚÆ¸ÐS Œ¹jv„yеnÀ]¯u8ÖU§[À�@Éé±ó3ÿº§¹|ð€è�ûbúû‘0cékül­þh]vúL�¥n"ïŠ×ðì\*ÔZBf®gðØÆ8edˆzÏ�ç¹t[**Íõ¡Ã{‰'üð^Ãþ—²ë)kð!ÞU¿,ð’-°6^òì,Ý^œ¾×™¸æ‹£÷Á&mðyIOå©'(õFeÕA·løe5ªàÊüà7m �³ æ�_þ‡Æ÷Zçmé½,ð ¬ €§XmµYx& ð…‡¥ÃY|ÿâ <§ìßïË‘æÝþü *ø"šq•C„þE�/›<ý'°7�ÀŸ€ŸM€O:Eð�òßÊH27’Õ>N#ÎàÀѧͣxéߎ%:í…#‡: ¼ÔÝK­Þ¼b€wdÕ§>8°—éŸsœªÄŽ·*}ÚB<> çèSˆiYèNOë,Þèf(™÷ÊnX#¤þ,!«§‡Ê�w´”üà†Õ_h4q°ÞÛŠghý&ÚðÓ^õ�ÖÄ]DG?¹Vå™vóØ˜¸®Æý$8ë‡L@§ìú^×Ú_ƒÍ´Þ¯å¤ßÖ×ЯѮéó»yj;Ø­Àvü\ûúY'¯FO6hÃø®ÍèÚy{9<ŸCx¸'¥åÏFA‡ðPï5Ð÷7Úd\‚ÐxWãg³Üë…²láŽ)Ü:ð““°/÷‚N£ÑH3ÝD}<¦¾Ë?Ã#wÁe�ç²k·¯·ç’»ä, üH ¬ €iÝ%{YàÄùÂèÕ¡ÍŽP ð¦þè ÇŽX9c¼ž´§]6LK]ƒ· öwGÿ ükà³à7‚½Gàõñ§òß’©ÿØNÿÌ¡ÊÉ8ž¤ÍÅÛðñ)^)ç:»‰UŽÓ˜ñÑ–úY†ŸÓ¦×Kží#:|pùôDá¡Í�¾äË‘Ýý*Cçïý> ÊÆ%û íD£×dë,:eãâw&CÞë7έ.ø kì3ùb¹ú@2iÆÑ'u3‘TñŽßsÖÆ�}ÓfÈB>ôÔm»Ï.W± WY`Ø]Ü™K¯õ¶f|�PVNÀ6hZ˾ÃOð«4ؘç1r"XýZ'øŠ÷)}?¨æ¥õ§~{ðïŸ\é~Ê&€7¹p_ò–Õ1㾔ѭ×Ïeî›Ì›Iðg.ÁIFmÈÈHNÝU�±÷qÑOÑüsŸÓø{ðŸ—8æÇXGj—9”§|Qèóz§m-¶ÏkêÏÚv9 _øYXëñgYzõó ¬ €§XmµYxF ð%çæHìÑ—üGth8Ñœà8{ä:OñÕºë&ÈO ²ÀfOý ü³ à Éÿ[ÙOÿÕÞ? (^‚fœLO œä²êw ±Úع-[ \Ì.8 N´¾$r•má)üH½d‘M+;¾ô§²|áãÉ¿lêMѾ�eÆf']8²2nÚ[gÑHÛ§Q�—1;{.–QŸrà<ö^îxø'ˆ-vY}÷2ýRî�"csÌX€±uh�/ü³,ÊÎ0D.¨2}G–Е¾ÓžKÉDœqÖŠrî ¾¦ ±Ž•S7àwê‘9Í�þJ÷Óúõ½ }H�[éǪ?¼Ò‡@—�îyé*¸7‹ŸkŸŒÖýI=cž³H;ZÊi_#‡ì”öÐÁ“‚Ò>Á`ôŠŒ«`l è l�1+ûé¿`^Ü8 øX?#KŸèì~u½{nk¾HnOþ^¢ÝDÏCõðÉMû—¾×¬Í¬ÃÈ:[¯©_pYà¥Y`m¼´Yú¼I ä ¥‰Ì_0Ý0�o¦û½rÂ8@‚‡ º_XòÝGA—Èó3‚à—:`\åŽþKΟ’ù§Ú}$‹þQ|·¢}PŽK�Ú%5V�ÍŽ­]AÉ0ŸhvUîÉ´"§ŸÆ3¸iß2�~2ô#9è�-øwœ§~œ¢H[ÿQ®t@÷l$¤ÊPõ±·Ëêƒqïò®ÁTȧêQ<©�]€ÎêÈX: }(F?ÚglÐ=FPÊJ){,&¤†Ê nÐF©µÚëóû,Û—Ï«pÏ7ë¤r‚~?ÕÕ}ÀïÓâ¸uï?z4ZúŽÎÇBž‰Úìä�;é‘M€ü'ö½�û)^©Ñ3÷»K›hÝù{9÷Jh$ø" [P&vœ¶=g }ÁÛSç îq·ñ;°.j€ oô÷ ÷E•üÏóØ:õ=På|‡Í尞ѯ­ß‚Ë?ÓY×?³ÏÕײÀS,°6žbµÕfYà,ÀEœÄ•Û�ƒœY9c8ÐÈ„Fö{¬»Oñ“…gƒ`ÿÂ)ü¿éøÿ_Rê¿*ÿAí£6>¨¿ô¡²vÕÑ?Žçø. F¼¤ØÃ¥jŸf@‹}‘Oâ“~H¦PW‰²³h ÚóW†Gexý„OüÞиƆ€ÆG�þGaÍÑÁ°ú¥wœiœv ÉAEÓËúSžóƾÿ̘;µÓ:Þyn»¨< úwð/]±/4ϸ2úZWÕ3¾9‹´%Ú$=O»ŸÅc®KÚ(³^jÍØY­²7­qê²!àzµ|ŠbY@ë�þVøèSý'€¤Ï®ŸyŸ¢À#Ú ]ÑKºŒ'ýüœJ÷¹þ׉è§äê‡öɹ¤Ü!*]*Ó¶×§]´¤à@ÚÎ9í¯�£oÆVãóXY؄=_*ï øÆÜ %·ï˜¬%îõÁa™ËwͶÑuÞÔ¥0õgrz›…/ , , ¼u ¬ €·¾Öø©pZô>‡"È#Ø'�çø¦�¯ÀËéêY…]™Ÿ èû¨» À†ÂqþþR™§ÿªü‡œâ�rŽ?jc€§ÿdŽÇ«s<ºÍ‰î òšÒNisù¶ië z#9�ØñЦúKß›$©"zÜÿlTx@�±B’øDV;ø74Ɔ<¿ËÜÛ‡eénG¹è8ÒÖ¡Æ?ôU{ls˜#³ìà"¼½žk }O|Ö_´üK>öI½lóHãA‚pÊ¡  š“ÚÜKG´{L‹ð\ð|JXÖÐ냵UÁë,Á¿×udRàVzðó`Öïd”\úv®€1:=¶¯•yƒï3Ò+Ao®þ^õ™{�ôõÓÁqí« ××c'ÏåÐU5xb§ÔåÚšåxÎh¨”6[é®<ˈ¬ÀÔŸBÆÍ8ÈmŒÞU9�l�òQðŸ¹Í\FggÆÑp�k*g|©¦m¯»T?÷1·[åe�e�e�·h�µðg}�ùEY Ís9*l '•Àv²r®èãb®@˜�€øÓ&räüþGåÿlüAð¯¾|@ý’â`"£;®O1¼òƒ†Èe,q0]­øÓ7�~Áÿ@ã5fðȌӿ³•Æèãÿ’�}=oŒWô·óœ Ûó€Ž$xÁ/åΘ„Œ¤ŽŸÐw8¶ù�Ý&}€¿•DG�ŠžyEn‚ ) 8|sßeªWú�èv?ÂMcí({ kýf-÷à?4¯Û£µö½cˆÌÒÅú4]F¿áûÞþÎÚs=&U_#¨çÚ&à'+ø÷Ñÿ‚Ü#|ŸP›\ Hϵ@ù(Ó]§§L[æ‡L=°ÓBù^‚Ÿìúô~®Â5žÝø3NÙ€€Ÿ1ß üEÏI3o@Ã-ËžV ݸŸ ¿ ôާ ôú™ü¤³úÎ>Ëîu _ø dÉÈC˜£ºE[x)X/e&–?Å×8 ?E‘ƒN.}¡tö‡Æ98?8rrÆ r{Oú ” Üûætø>)ûi¿œ`ŽýßÊÑKö_J°eG’tDRùb’üK YHâd»Üh<Åw`Ï; ¤3™îh´ ­A?—Ì8öß$ÃÎn9Àà¼øï“ÆÎ_$9Yá¿K„Vö`üþWÉšqsÒNºá„S=¶Rýƒ6 „À¯4ֈʱ¸íF´2rà1”�,š¥«ˆå]UóÛùªÉh›ò=øÐÚ¸×`´€lêyÌZ¢´‚Æ©ƒ¦µ ì4³ñQi¬+•·•–š;xD7M²ÓO ïSÿ¦¡ÏcköštÀÇý [!!°7óÐÝ”¹ÞóO Àd¿D|ÜјßÞûLÏýÊ׿ 8ýÌe‘œ¨CN2Äà—FhÝÅ{é¯çðíhƒï�kßüpÐÿÇ77dý½,'"n”9 …]ú‹½ -ûŒ9ĆS²½‹Þñ°ÑR|¨¾ó>Þ×ÿSd¢ókNo}ü¯yî–î˳ÖÀl‘U~5øÞ/£—>гñu'âˆ'õGu�ÙA€>»krÎâ´âØâ$ÚÁŽìdœø8§È¿ïê=Ôëy½ƒ—TËyBŸ<É'ˆ÷~êÀÐ+@ç ø{ å´Ú¢ûØÐ¸Æ@áœø¨üYùP0xÊ Øð&@AÓ…ÛÑF–úïxp‘€8诓Ɔ�/ÒŠÇ-4.`22‚3V'#ßë•)' Jûè8C˘>àYéY k…î…{MFÝcr !2ªxð /%ðùžÔï!Ö]»n´¡qÉ}Ö”µŽPá¬yôÌÉ%÷¥¾¡y3U8/;ý¤à6Ÿl„rýóÒÕ÷:åëGü¹wåZÛ½0yÊÜÏzb¬±sð@Û¯˜Á�’õTÅì�~ð¼(0÷&6=|ä_cú¦@Ÿ Ÿ€ßù/½æÏ?oÞU~¯Í€÷ª{ÏØ±›$þ@ÉÉ\fLG:/Ú²À²À²À²ÀÏ·ÀÚøù6_=. \´@œäò0‡67¼Ä“º³¶³,Êøå¸ʉÓ�ÿ7‡§¼œ:;tàjœö³£7—á¹&ÅyÆ™¶Œ‚ ÔÇ“~Ñý”¿àø ö³ РŸÖ/²¼Р�w�ÕO òä/ežô%à?ƒþáSNà¤À™Ïà"ƒÔ ×LÊT)ÃO*îÓà"õ�× ×ÇO·€çlZ3¦i ú~ º@¯£ð“¥õ‘œk3Ö‚d < #¿Áq_)ývý¬GÚ/Ìú*[¿Ð$›kš7èJ®Í´ ü¹žÁ ~• ‚‘™ ß¸dy<ÐKwäsMÎÉ|E 9íÁ­7HKÐ.åý�=ø8÷)�ƒ²ð­žøóäÿÝ¿þuóN›ïÀɪç$9ãgÀ¶ô¼¢óºÒ²À²À²À²À‹±ÀÚx1S±YØœÞîØÃN°`h)ÙêŒú¥v³¬ðÚe“ã×-Ov¨OƱ£>™2N/Ér ïtW^ñ‘MÃržÙ„pÀ/ÈSý{¹ûô4Λ‚> @YmæÀ?e ã ØGßý-œÈ€ƒû*›^AÁ‡�àØ �±\ìÜ֜툎Ð&ˆþΪsÐ_còØ §~&EËÚÉܪèþiS‰rrhÎü½ná?ÏžçÞkå${ÍUÝhG9©ã¡À>÷¾Ž:OÉÈõ•>Ï M›]Ò÷ã¬m%Ö:w¹èÈ$úG_tÌ'Èc@×5ÁoNøÚÑ}Èý*ÁvNÐçQðŸþèÓýL94ø’º½¡Q¾”‡.âý)É}ˆÜ7ØÐSÿN°À ÑüôŸ¿³Ú}OŒ1ÈnIž÷*t<õ . , , , ü8 ¬ €gÛ%yYà»,€S”À,Ò\>êàž£v¡åg8©¼<%±tBgÕ[¯æÔ AžðÓ4OÒBK°N ÿQÁþÇ èø;ø¯À¿—½ 6–#=?#ˆ\«‹ÝÓ¡ù·¾²I‚{`dz)�`èŸ vÁv¶­U‡Ã�½ý“ ú²ÃOQeëvÅG·Y6vä Êv-™”T44�4AÆ^¬ ü °n[Ú—TA=kk‚¡Ò>r Þ“Óúêu£B`è@_O ‘¼é‘ëÁ}}èÿs'Öø¼ÎYÿE÷¼ê7z�À_×,�¿Ëu}�“RÜgÔÖeÉŒ ¡�%x’á xÔn¶7zC;ÊÙ8 þÕÆõ²½P<ùÿV�ÿMNÔ€7Ä—ŸxüÜË*{Nû\ `Ñ––––~ºÖÀO7ùêð9,`v-ÎÛTõêŠKÆÉ¸‚3˜³qÎ<)Ïí/ÕO»q<9�KBÞ.Cëô* |W²LÆ<åüfß�>Ê(ÿY�ò-ÿJP›†*ßfS@õ þ‘Ý7ÜWi=6(³®pb•ú€ŸÞËáïpürŠ üyQ ï žzÿ� èŠ ì¨c]ÛU:á¸Ó›!} IõèãÀå Î6cœ•cÒVÕ…v¶¾àþOðŸ ~À 6¿Úú~&y¶p¥e�e�e�e�c�µðb¦b)²,°YÇ){൶y,ÿ™\?™®'X8‹8vþ‡éÇ.0Žú™¬'ÑËwPŽ3NFeÿ@�¼ƒöÿÎÂù[ÂÙ&ø/ZÞ€<;çÈ,ù†RÖÎ4s€âå¸�ƒì'ÿ² Á¿7äü‚;À'øŸò•Ù´øGÐÁ¿ �r±/Goý´L4Ÿ¸Ì[©á¥<\(Ó&Pän3Æ4or¸)•ÒÇ -wâ™Ûœ•C_ðY ¯á¬%®W¯“ †îëu{Û+ÕÏÚ {6Ì(�:ÉôÆý„F¥ƒu£ü܉k¦å9ø§;ô¶îÑ»tþ$¸û €®ûÿ÷pÕûÉ?מê|¯‘,Ó|!yžT$õrh[ÍýÏØ9zs_ ˜Àÿ ròñÝÏò¿õ¿68àŸ¨<^Ø7j`œæ�¼6‡÷M°(ËËËËWZ`m\i¨Åö²-ð»:Œ+A}àC3ÑùÎð‡dØÙ”ó:^¨vfË¡C/Û¨º{Ωè=€|¨¿]½ç!œ¬@ÝŽ4 ¤ùíÿxú¯ ÿ¯Êc€€ÿŸ¶Í€Úðf€ÚZNÉ�£ÚÐYúÇ¡F·à0ú+à÷Ó2Ù)lü#‡˜ €Ù¸ÅQ¦AúAf‚ÿéüN8ÁOúÄÁÑÅ:bߎW;ÆA}lÈF'‘…¼dúK°`‘¼}ìú­6­z¡/ݬ“¬•ÂÇu›º2¦´}Äûz19�]vh‚»£âî¾õ¾Gèñ$V]#Ü/Çu!!Á ¥Áqžþ÷£ÿ\÷l°18ßSxúO`ýØ €\«À䇯µÓW̹®Cï�žúÏ�{÷µlø%€µàí~ îm»jë“’“ï‰Àèï5˜Â‚ËËËË?Ýkà§›|uø#-ðÒ‹‡ôÃ%Á7ã�6Ûp–ûÔÀ?rqVq š+n½ò6lèvj‹'nœÕ#˜1!ú(Efž\�VÁ+A2Ažüìÿ¡àþOÁ‘[°ï“½,>ಱŸö "ßz­ë´ÍÄe8Ñrp¿J?ùo™@ §vPü”ýS õE�>äÉ~œ,`!4œð‘‘§Æ²Fžñ@c|Ô¾BÜGkO™Ô$ÞáUWMøèórÔ½g�yJ†)xAþÛ�€›`v@Õyî·p'�>ïÝ_îªïÖGhô£äûUÉC6åú3¬÷úÁUùxèþ¾qM´µmšÊ–ÔõÍeá�_uŸø– ½e6D¿¨ A3?À�"¸çÚÍû@¸ra3ï‹ø¹_ú'ð*cϳÌh�²ÈƒN:Z Gr¹w„îL*£³ï9ÂC3ÌËþø•9êŸÿÝêéÿ{²h·Êã€6˜Ïyƒ˜¹óœ >%Íkn–ñPýÌÿÊß«óÕëÿ% ö@‡‡ÆÿÚÇw0äEZx±X/vj–bgxèKä¬Ýk£3Î|!ÿÞ±#¯Ë˜Ë±£ƒFœ¸AÜÚÒ~üíôŠo@úAFÚ^€�‡>ý´Z�'Ö=¼ó{?íW`èà¿6>ðËyOÎi�’Ç©�þ†¥}F×è2;×)q¨�KW~AçÞíqxÉU¶|úß¼O/2ìÇœàŒSŽsîBe¯d‹Ç}´~ôAŸÐ*C¹ÚõòÀ‹Oà0°€¾ÒË·@Ö’×ó­53ð”YGʾ§[^Öë(ðÚQÃ?})û^S¸Ël>ÔÄØHýh\ôǦ¶ö} ¨½¯™Ðu Rvð^eûèü³Á§ ôf@á7ªû"œÀ>×½¯Qéê�@��Àß8<²íà“.Ñ|ÝQæÂõàœEº˜"Y¬— š&}ü£9z gMøiÿ¿ÿ}só?ÿsóNð=8Çþ ¾×Óÿ�lh£€M·<ýט þÇ|—†ý{¦+=Ó�Ê3mn©~æíå…/ , , , lXk%¼ \û¥ÿjt…¢ŒÙ¬xƒ?ÅÈH»Ž£Â\†f'T}ÜH=Ñ¡^u8«gùÇu“ŽàêOy·Ò•`Ý¿õÌ ÿ|ì_ø_ÿðÿ)È)gÕy@º_úTv{äIîØ OlR}Wq—p {Š£n'_J~l¡m²éCudÿ>XeË,8tæYN42,Sež4ÚI/ˆ®ðh«zMœûÉü!Ë6…Þ3í�[õà „îu=Íå^·ðjÖÁ\Á± @�V�šƒ=ê•ûf€×-ëKCc- (š×Ö4ä¬�@Ú[Fú.è{�ðñ¤Xzd`ðÛÔñÐÎ k=)ë^××…¯ƒà‚”ÔCKÖõ:ph”+¼rm� ÉâšrÖx¸V±¥¯Ù@µÏ�·ûW®s´NF†¯}A¬p–Uu/µÑy¾¾Õrw8z±IQ™Ó Á­¿‚ûwü³0²6Þñô_Äó¡6rôÌ¥úË÷Ì=E3ï\îM¨{Jý¥6]þ—––Þ’ÖÀ[šíW:ÖþÞñ 爖ºß2>;³ÌŒ?u| ÏÚû)2«’?q¦ËC‡8¨>Þ*œW‚kçVŸå‰ž´IÞJÁÍ[2ÖÇ_üÉé&ˆÏÑžøóôŸà¿g6>Šž ˜>IP²égœÍýŠ=¢cw¬¡ÅYg,qÖÇõrö-»Io* _tŽÿ{@0sÇÜÁÁƒœql›À‘ï÷ H>' &˜Ë(˜5$u[GçíÄg¼`pÚ'ÑR·à˲€ƒ}©äµÀ:P&(# uÐÔú2�ù§ðÊ^?ÂwIëÏ)t•\ðVF‡l:ýôŸuO ðÑ3ôkSôƒýt�ñD‡sÝ%ë¾à žòŒ‹æ'ÿá�Ê\×þù�è¾NÕ_üÿ�¡síqírÏ`dØ�<×f ôd¡ï´³9°lÙ�¾3¯—,‚}~ÛÿUy†Ðø�?OûÙàéNpôŸ €Û:� €œÈ|zNѹæð z\Ó<‡—ºž ŸÕÁ7×_âír¾,°,°,ð–-°6Þò쯱¿ Ä©é�{ǯÈÌßË;\ÂÒrqAÿ@åð{ý±¦h_m²ŽîÁZWð9©œõ #ª_‰üûZ ®úòwÂN щêàÀÊ~bÏõ¦kÏGü½   Ú8â=eø•}]ƒKÖÀU?€_u\—Ü|ýkl~šN{�Ë'€Éè©Ä}›v[#‹òYVÕiÊ<Œû“úÍ£x6¾éø~òW=ÍÎïýÇSmÜj€à?¿ÿÿ zŽþ¨œÌç£æn…çÿ€vDu—ê÷à²À²À²À²À} ¬ €û6Y”b;/D——¢OÖ«×5mýYý$õ2ýã¸ÆA?Ëá ò étËÈ•SM�î‚þålçoþxúÏf@‚þµ0NÈ÷q`á�Ö]rIî_xôÎ)Nuè”qü Á•ƒc[o0 Sýðx£¤AèNÌ£è#¨)ãDT|Ž,áÖ‹ù -Ž6ýÓ~‚ÐIæ/œ2|¤êÙ8õvÚ`ZÈ‹¶ë`—Xʬ=þ‚Þ`mÕúr½y Á_8’ÀÇ=†uƒü‚¾w¨Þ :©¯³�âöÌè»taÝæé¿OÂPn¹š^Z¿C‡Ðs ÀÁøàÎõŸßöû…ó½  kÌ›’áë ™ÊÙ€æ÷Hc×˽Ÿhì=ø÷&žø±1÷!ÛZKrmúÞTeh=«8ÊàIÈè‰2ó:~ᬃ”}¿áé?þ:Îß!Güý{ÿÊÙ`€ãÿ<õïyÌg)â¹>îgê u<å™6·½T½Í—–––öX{{¬Ò²À/µÀCŽÍs(gG^Ž!©ã‘Ýu°“Z¼ÔS—Lp‹×9çUNóÖ­ïR§�à_ÕÈ!x'`Ï ‚ÿ¿”ó¦ÿœ:ü· €l xYÊ¡ÅÉ&h:ªÏàÑðȱ¦:2€”qÞ±£�xlB� �ý *ôòÿ†óßá¼ÈP¼ üåœø;sWåÏâG_àÐKm’¸©¾ÃÜ›Sõ$>)o%([z¨¾_®˜ÿž\�ë¼o8øg€õ¦F^Õ>e·a]©>’ÞÖ}Bw*\O£ �þÉêÏY}g`Ш+>øŸ”ÒoôêÞANÀOОÀßA>å þóÆ qµ�¿d1*_ÛàÈßî¢qí�M�Ó' 4¶œà·ÿÜàc”däìõ¡AÚž%ê�Ã\&躉–ûÌ  æyÓÿ7ýÆ�µÀqNŒÀŸàŸ¬Mþ[åñôŸ¹ísy¢sýPºÄ3Öʉ�KmOš,ò²À²À²À›µÀÚx³Sÿº~öå~F]£{œ¶Œ9�{àã$sÛÁUU·)ÁlwΩ#'�v Keh~NYír÷ìÜŸñj‡ ŽëûrÈ9@ðÿ/åœà/ü›àÚàíÿÖC²ø•‘zô}Ò¯2 8;ؽ N¶“-™Æ Ç>ªw_e'žü¡ÃÊ&r–G&`H–î~R*^Û]�„3‡ž@Ë 4pAã3ŸKõ!iû¼ƒU»Àodæ> œ€Œ5f¨õå m0y€µ"æä»–-eê³-“jM�’ÆÚ¢ÿ^W:ì‚}éã§ÅŒd•чûKî+›Ô+?Ó_‡Â}Óuæ�Ý;Fð¯ëËoô×½ÂAo„Æõ)¾¾¥F®ó”ßI^ÞÀu�kÐYcñ)®gøBäÀ=�„}Ÿš-ààc̃êÀ£ot`þ¢›×B�`Àó§àžàŸÀßïô_þåÉ¿ÊUï �“¹c.9¥—<O fÿ.¡<§^ßñÎ÷ÐÚèõ]ÆÞe/|Y`Y`Yà­Z`m¼Õ™_ã~ÕÀ¹ÁQ�“Óñ ÌŽp �ø�Ú¦YøSvÀ¯¾oåø}¨üQŽà•ÿ$È('™e%O0�¬là÷Mžú;Ë�ö‹ÿä´û÷ÿ@9éùOào(:¿û'û¯ÿÔÞÁ·ä:ðGþ”é“Ô�ð”]Ñ>âX‡D™LÛàÈ�Ã�1¦UmýÈfØ…� ì‘S Þ˜P9Ðï /v·�T×!2<'‚ÊIà®séäž•~ d.½ZY d[Ðt�ާÿºF]' І5ëTk|\—ДûÚ˃o[u`°m%¯GúSöÆCÁ”ô{m£›ò|Ù$ÖgÓË””Ý'åÊÑ�·ô;È×ýà öàÆýûÿ£"çÚvùl(§o W™{�qÆÖÆÏðÒ=ôsBo%ny¦nÔEîÿgï\´ÜÆqnÝ—$ݳþ÷Ö3�JzÎþ¶°iˆ%_ªRIœ2¹� A�) $Hz±cÃ)ó{þj;(Á6“@IDAT‡¿é¾ßó'Яì _Á}~èÏ�?4™GþU'û÷‡øð@#¸2i†�×ñÈuxå]&üÀså—ê¤î¯ ¯�m\¿è¯�ïÚ°~õñ_ß*_xK ¬€·´æÒµ,ð“,À'_~ßú:wÖÇÝÿü üQí_rÿ’ƒø9ŠŸœã€r—Û�à æ]Yx¤8Ë |ô;¨¯`ÿƒàÝÝÿÈ~påþ7¼.@ýðwÜíÐVåîLƒwZä.m=>± Ã DG*;áØA™;pØ0ù7‚e‚ÇõÝÙ”_úÿ"¹dÿW·è@ô ··I¯Bƒ¯ô ¨u EE´µ ¸ÖQn O„7è\‡Í\YG9pPË~Ù†w'›zN*Ï�a^öŠ<…0ú >"C¿³·–&-jiêYn³xÆuÍï í‹ç}‡à_�¶éÏ�@ƒá÷;ùèâú�:ý‚µ½�Hž=ͯ*I·ÿmD�ÃKðIίüÈ¡}§\2Ùÿ:¤ß;Û÷F[ÑÞÊ®ã)¢¢±±ƒµ™×Šü‡æàwíÕ÷üâ?98�_ùÿ3A¿övÞõ7ÒïÕÆÜÑŸƒ9Ì\nb–öÂ<*§¬—»bû¸VÞD/êér _XXx4 ¬€G›ñ5Þwc!;Á5¢#úÖÁ¢çÈéšyµ¾û/Çð“2+–cù$Ç‘@Õwáäèâ`ó¾ì“x8Í8õqríD—³ìà‡Z™¿úãN~îês—?™CÔÝ~ò ÿ¾£®&.þnS2qG�ÉB<)Žw§ÃëABxÈaœýqÎøÈf~ÿV�¿ÝÂa÷¯þ«ü YuÉþ#øGgåq r·)è$Ûá�¯ô `®Y=jp­!òø‡ÇÌAUV ëˆk�k”d(Ür Rf‰’3�:­Yó Tsç˜~{_é}GgoC{ƒ÷6ô gï0 ¿²ƒý’Á¿öÿýøÿ�½‰:ù�?ÿ´‘±5Èøb+ï_’Ã^9È!‡—dö"+8,õž$»óû>U»þ‘PÉBcAƉ} éƒhÏ1|h•aOÿ�Ÿt;à×>âÃÄ‚9\��*û]{5�>�þèû0@Ðwú‹ç¿øã®?²ª7~ä�~ÑO:ht³N¾+7±­¬ã×Ê‘=J¶}8“Îé�x/oÁe�e�e�GµÀ:xÔ™_ã~À©±cÜFG~ðV<й|¦œë@ø@N%Opð7Á¿‚ñ/rp}§Z8wÙÐú½|œÜj¹;Ñ8ϾCV�€$Ø÷@=nG[ú ©o‚üKpôƒñU¦káƒ'mnw(9àBÉÈ:h(:<ãÜù÷!€ì„ÍF–Smg¼rîБø'øä�alj»¶¶ÒàJl"ö€‚—R†µX»¬aÖ×JÖ¯¯ö ñBg;Áið±³ßhÍówŽ LÁGÛu-ÐgÒöitû�öäi×Á¿öˆK0Á½ƒÕtðVßâ³÷1Ž1–êR§½o‰ïà_ò>tT]îö#ɱOú)�•:ÜM÷€Úwàß¡dl ú2·Mß°— óæ=C6ý—½Dè,ýÀñ„{Œ2öÏžÃ#üÿ¿kÏöÓ‚ì‹—Àßñ_²9`/cÎÜÇé—R¾';¯ã×Ê‘MB¶çðgø]äŽx)[pY`Y`YàQ-°uæ×¸ß�ppp`IÁãôõ—=‘Áñ³sŒª Í]-¿÷/ç’'üË�‹%î^Ä~Vdê¥O¸ŒvˆÑWåy÷ÜùW€Ÿ×òØ ä<ûqÛ@ôH/ùZ𿹬²•d“…nÎ-HKqÆÃ‚N†¼C/wçø•ÅAí»v‚<þß_ÈÝÿ9ø‡Ìw:T}häBß»4ÿº˜žg­#Š‚=àîO€gÍÖZê<M’Ÿh>r¤±O”l1·÷Ãk½{ï OÕ_ é7ýlɺ „•ýÎ|Ãø;¨×µŸ;ü�A½ê�;ü¥Ãõžrïq­ûím�]äÇêÇx\z¼i\~ @cõA€øþ< ð»ö7Û\r¦Ë–s_¼·¨ÌP²>ÐÞûU{É¿ Ô¿*ÿËþ+è¿÷Ë3CÕ!¨'ø÷A@ùÛï ä Ï>À|Ñg còçþ#e.�\ÁÎë¸íPz{ý½æùg�Ý¢c_cQËËË�c�uð8s½FúŽ-gç<�!w|6Á¥²Yz¼ '?¿À�‚;×’!€å±ÿÏÂù%uÿý�èÜý�í»÷ÈHry`ä€þ¥3u}gŽ>^È8«qXƒwZÅ»Ôm 서é”ù@ã÷¡Á�j¿G+èß�s͹ñ €¨‡&úÿ9ð]?ñÐOYÚÅ Oÿ]¸>ìÖPk(иè$íõ£:¬¤dxÞCØ? Hð”Ï�>ä�qÀ¸F»…ÓŽÛ¢ßsR›´ë;þºÎs@ ?^-Rð =Þåï´ê$¨PúÐãÏ@'tñhkÐÕzÅõ4l#´÷Ñ9¸ÌÞÓŸJâÎöIC�;€{ßKð„‡né$»?¢¹æéÉó Tæú¯ iùJàOÖcýdxÅ(™�àyõˆÀÞO²7q—ß‚ÿ¦áUÎ|ŽyS?<@e|žxE_ã�+‡)õ~É¥oGe‹·,°,°,°,°Y`¬•°,ðŽ,€óƒãØáµáEþšå8²ù@ÿÿ"'’÷üq¶q^q\Ÿ” þÿ�îŽÙù�£(9ë‚8Ðãî¿ä| ǘ€ÜñïþsÀ+ª×³�pt©Mßyκð~ `g[€X ʾµ†¶Í†.˜@œrÖ<ëÆkŸúÁäzîüÐ�X(9 usèUí³ÆÓÚwpFÒçjÛ Q]�Úôÿ¦ýÀwû�Êþ ‚š½¨êçoúÐi¼ønÃÝnmQæNl6Ù,²�m‡K.{Wü$û˜Úöa§Æ4ýç¤B¼¨¾÷…²ºü«>{kúêWhž>UßÀ½7Hî«öžø¢€ŸÀÿ‹~Ñÿ«2Oø—þUv êóûìC÷ øùaW²û+È>Ÿ¾ûi…¬“;®þõà;x C9Â;™$øG9å3<§¹Ke³žE/ , , <‚ÖÀ#ÌòãCYgG²Ãkˆü59œTÿýŸœG‚õ¿ä¸æÎ?Î,+�ýÿWù“Ê‘ñ1ÞR§×´äæC€ÜMÛ=П�6.ÿv@ƒ=Ч�#Þ®%'0úž”  ÓðÈèa¼¡9ð?ÆŒ�£­ì;q‚~LW�Àÿª3ÞûnGýà Ò†&–ϰ˜0C¥U6x y_`~ç¬u6‚ûÂtwh\kŽäÔÖÊQ€d]Ÿ»$zǧ¼ñ8p ËÚV_Ò>ýKé¶úv ˆ@göí»à_€þ{?AþÀŽ«Þü¥*xà�Ú˜n°g�<Î Ý‚txŒU9Á¿ÕGïY@ù²�a]ÿìÞ¨/[ø�°ëS=‚~?ñ >vƒNb¦Ÿì~ZHú8|åàK|ù¿ÿûí_áy¿ß*ßÑµïø·hƒþ)çw]ØÛÇÞÕpú˺Ë: ¤Á¯ñ.•£#¹[R—Ofx‹ž%³,°,°,ðHX�4Ûk¬?ÝqL¾WGpI´Óƒúà½|îÃQYêE½8°y·Õ‡r ùMî,ðó)?üç;HåDzÜÔ¥oÊ»»hêsóTÀø•é8õ•s·ò¡ÝFÉ…HåÌ8t2î9º¡ãªÝkÊìpËFþ1.l•,ûø�^ÁñÈ¿ê:ðt[�Õ–$ô¯ôî,À|_K;Öë¨5DvÐ /t/GNÉòiˆòà‚YYæ•|Š ~ͧm¯ÇÂÑK»ÖOYåݾ‡,)uÀ‘#‰ç_ûG ŠA?wýçàí>0“* -Í´X#UO 0¶Ø ‘kt\¿7×°Ÿz ÐV€îÀ_п¾/ûÁ4º½/i¼ì…þ>\@7�ÙÆ°¼?cÛÚGÐÏ{ÿ¼À!À“ò¿z  üÁ¹ëÏ“F•}@ƒ.áY;Ùßw�¹‘Læ°ÃŽÓuÒ%^/·p}¤Nç]éóÒz×äóx­í{-¿6¾ký~ïãÿÕÇwmþVù²ÀK,°^b­%»,ð‹ZÇ€/¿8ý‹0¼ ­ËÁ‹läìÇù*ØË(OŽÎ#ßQ“ñ-A=õì<78t‰w„G>e¡£SÕ�pÐ{ 3¼ðÀIÔ�¼Œ¼É :HÀÙžûKÀ0`É9xJ]ô�7švFJ€0 y hM°Æì³>*€sàÝp¯Ãȯ¥’ñõF–5>k $˜u Û`‚XʳO ~\/W°›ÀÿÌ#ÿùu^?�øKW®Oôw\ä.õöw�Èx#›ë˜ úIÁógÔÿU ÎÁ%cç·PF°OàOÐX~zIm°×9Ëî¨2_®ú@z€~   ?:ÈÁ!A¼CDz9OÔïÐ~~៧ŽL«N^?âI#¿n¤¶v‡ŽêãsdodÜìAÅó×çñ?â¡÷Ÿ²[:ºž¹Þ¥²YvÑËËË�j�uð¨3¿Æýî-€#”à�Ávº;IsÀ�lêÊ5l8†¥y×$ñ3ê#| ŽfÏþ{­‰¹^ïµxo <ºƒÛé?N§Á‘Oà/Ô?ØL²¼Æ�3�»¡#ØÇéV¦ldÑÈEfüG?`/Û:° ^�Ó·•Þ¿X#ºÐ|Ì!@îäF&0f�Nêxã�ë?¼ FpÆÃÛ §õë5‹®ZËn~x r{àïwûuWǃæN?� XõÉh!÷ ?<ëoÕbã$øGöI2yå§þ9`oÃéRˆþÛéù¨ì¹ÍþãC�ɇÒ�C€ß…ûwÔfü€<ÀkÊOún uÕï$øô~¤.°3Ngá#Þ¿Žð#:nå#w)�þLH×?·7‰.rY`Y`Yàá-°~ ,¼g àÅ™Ï8;/NSdBGöˆ—в嬄„¦®eÄ;Jp“{0~éî䨗@=0º:<*‹Ž{›à¤áüžÁ-Te½Mø ÌF/$°?üK.u|pºÚa(ìñ±ýJdæ»Ö‡ç^‡G� ð|@9tÉÚ:¿Ñ\\ ¤£Öy໬uéýHF kµ ßuíu ?8A}å¯Çþ¡ì¿ÿ>àÐõ•�Rææù¸��ÍØÀéttp}æ €X³ŸX^|{ûuÇ=‡áq ßé÷!‚ƒá$êû‡5g¶ Á?ó—C鿀ùõ€Úå•+~pp CßñOÀ ÎA€êãôù€q(s�àH_<^á$Û üâÁïßÁÏ•ßÊGîÖD›i7°×=âõò…/ , , <¢ÖÀ#ÎúóCY¨òàqŠ:ŽQf:†êõ©»ËŠÓhXN¢ÝÇŽGÙ$��œ€ÜPýŒs}ÒFÊv}˜Úèe½-Úém"‡Ã{.ˆ€Ÿ”€€:=…OÀnÇ(gþð€’™| ¥v¾;”Mdüínª Sñ6b}¾k dÎ�Ê^'Š•ô ïÁ¿ŽR¯§ó:Ž 4ëªR°y­C?˪çýHyéñlÑp ÚÅw.Ü�¾]ßùŸR6êôºªŸk“¾ÎY,§Œ#ô9¹Œ74×3×qüʃ”øZ‡júý7z ¾áóï% ã½/ ýü&Áÿ˜KÆ]óɼøSf›ÄWö9Pàï'8¨òø×|^1ø¢6}׿ v Í^è9£=á·p§@dð#õÂwÿêuð[Ó¬¯×K›�·ðe�e�e�e�“ÖÀÉ [x·ˆC”¿ôáeð) �ºÐå :Ë"WŽžå›Ógr‚ õÚA¹øÀä Ô�è™aç�¿$'ðŸ!:è9‡�[¯Oå‘I»ªâäú³zAßù”ž b÷DòUæzÒ4ôD/v“�™‚ÐU¾Àû·@Ö„GÊZКaM°vòËî=x4޹§™îe/ÀÑz˜µ6¿á>THàN \0>0�þw˜rö'" 7N²�ŒmøÌ«¢ëÝ“4Á2¯d?Šýy?ß´mÿå·x¼‹Ç×?×/‰}’1ötÏ™lÀ�šVùØO¥/¯ðþÿ¿Üõô¿(øŽÚo™»ÿ9à`wPíÓ‡üH¡íXýìë'}‘è©_‘k¼så�?ãÐ×í÷>\“_åËËËËÏ-°žÛdq–Þ­pœp–ã@<8e#Åùš`œ2;ý*#¥��¶2Ê+ãH“Œ«­Ðyx½^ð[áÐÙÚd¤m zðí7žP',ÒË`R×–ÂÆdd O°¿{ @e9p—z–ÎÌ�vHß8ëóQ,àõ¥u¢‹l;à Ácð”I3ܸ'~è@äûµ~ÁÒj <9×(–Qpï½@úü½hmçQþ<ÎßÀQ^¼]àOß”}mªMÓ Ò�ðÀ_“RŸë™Ì´ð¯ ®¿h\ÜÉwПÀ¿Ažø(™ü«#ȳïä©þŽÏ‡:¯ç }­Ã îýW¢Üý'+è÷oó@kwÀ“þ�²•ƒÚî¶…û·�pæ0ý k›G¥±¿«NRx—Ê�dz}Ê/åÈÎ0zçòE/ , , , œ,°N¶XزÀCX)A}ð/!®^‡Çi…NXsÑë² âlÞšSùàçà9™´åéIðŸœ}œàž©M¢<:à¥}ÊH”;cg9Ü=øè@Éæ°À<êFO œuå~¬ñ†­]º>Þµ4ç\cÉY?>@"xT�çƒd �¤nÜ?ôÈ ,�–?̬˃2(´à¿¿ïï ¿ÌÔãð Rö°íªw»öNÔë±®7¯1ÀãÏ6�M±{‚ÿ xã®?wr=@ðÍ\°8øÎïðTÁ¸î¥½™c Û“\t÷<Àk íy ´t}Q| è }P{žäè#}©áÙs‘9Â�xÑ×Ëæú‘¹¢'ºSo¦Ã_pY`Y`YàÑ-°}¬ñ¿È÷îP\ë_œf�lÈ/¤œ-êò¨(™»JTÆ©5žòjDzàEq0Éæ½JÜi®~à\>ÓéC‡§#Z6Ç™‹¿Ê 8Çá'+pñ_z '˜Hv ÐB�<_‹’7_´ë0ÆÛ3T ÎÆGžP½dÈÉÞ“Ñ-=™K _™`ŸœGÿMó*@å¯=ØOûªÇMö»þj�À< vó$åÞÛ£pæÍãžä}*DÁÎëxÄ:ü�:×à¬çšü-å½_·ÈÏ2óúœËï�¾6þ5¾ý b¯_Ý&û-ê‘,°i¶×X—& ä ¬ÃIdG"GNÀä±Õ8—@9�à»,yÈ8”Üqw° ˆ[Ù³È-ÉAýÞéäÒn-ÍtÚOÿìàÓN±ð@Æ•;h8¾S©ÀÅߥ fØ ;¨8‹ÆVæÁ§®xÑ ô_œÁS��ñƒ3ƒ¿%�^èÛZ€ù¹˜˜›&ëìõÞƒBÂäq ž×uŽò }ñÁrZoÁ ¡Å?‡Zâ \åÈxÔjßëW4׆y’Øm>e\;¼àu/ùsöUÛ«ÍW%µé¾RYxcüÁÜ_«‡6gN˜+Ù#Oþø‡µWòÚ€ÿNPºýûèͼªÜïûó:vQ�ÿ¤üùï¿{Ræn?¯üóD€‚:Õ}ñzÉ:�jF“9aÏò¿>Ufþ¨ç}^(´ŸL‚?%ï;ðÐ_iðÌ>ñ�ÊáuùÈ\ƒî[kóœüktŸÓµøËç,À:;·G�«³øË÷`�up³°ú°,ðƒ-п´‚¦+Ðs‚ç»þ@9šÿÉÿ’/�^î0áTŽ'D»•æhÏmþúùH·€þ)xÞœè]Ö8ì , ÉqÿC<6Áù·=TgüKnT{è°ã�Ù(‡HD÷Àäy¯ªÏØVõIc Ô]éÅö;SóêAË»?ÓÝeƒìwƒs�à²~ʨ“úgú}Ží`—µÃú«|ü¬o•™4^J™ëc$Éø@ò#ØÏyèòÌf½ð�p®_-êcw „�mÓ q]ãc„3_\¿ÉØ"¿Â >iŒ<ðY|œ1®yÏ'u æ üÜç7¾pðŸÿøÿ}ÀÓ ƒ|k?mg ¤�Þ¯ÔŽûWÛ~ú@4‡ìÍ7{tm3Îè’ØH¶‘(ƘtO9°Ë„Ž�.Á®£ã]_ǻ̗¾‡XoìSGë?i¥e�{´À:¸ÇYY}ZøÈ—Mï_`|¡õDY²xÑã€À_άïü 7T¹€ÉRèÚ,<goëgâéÏ~ô§Å‘ža°È~ìŸ9>ÀRCþ ÜwþËnØ.eÔ' ¸ò]Ãr,v‡§îcªŸ Œ‰4æ”ò•.ZàÜüSÉe6uÊܘøCæ\ë©{ûÀ+èó�u �s>×^ã'ص>OøúÃ�µªLâ“5›äµ'zÜáW�Ž÷pð_åhHF×Ic4ØúÍ•âÜx½E÷M6çúg_Äî¾æ½Ÿ6™Üý÷cøÒIàÍ×?‡„€0~ö��ï‹ýñ@^¨'|À!@k/8�¾ÐWúà~Žà_ýÀ¤ÿÈ}@ ün‘ÛÚjÐãtEXkK·àHv¹ªz3 n¯ßñ›•,Áe�o´ÀZwßhÀUý‡[`üp“¯—îÇ|i%(œñ¹—ÈáÚ9 •£:‚á³8¯ý‚Ýü;ȯœÜÅjñŒ£=÷ç­èÞ>ø¹£ËÅ!ŒS ´=Ë�÷+5^ÆÎ†k›È6>‘cï§&4æ¼€N‚¨ÿònÇ�¾‰'¦ñÌŸª99ø(w=Õ㫺©³àÞÃÎ�½ãa¥™·£(9P’Ë'ÞVÒ>)�LƒÌe‚ûqžÖ“ˀᵺMûYt‘ªKâY°¯õâ'Z´®üCÿ¡<øàÈÕÚc}2^\Ñ*|x’3¨ÌúÍA@ðSÏ*øøQ©úÛ›óøìÊÜ0VæÅwÞk|ý©Ì{« {_5æp÷Ÿ=!û¢Äû ì2T�'xüÿ‰ÇÿÉðø?™à?ë@퀧}¯;úG¦Òí_¸P�CˆìËî�hïk*£ÎX“â'eÍ ¹J= :‡#ÚËR÷H½¹îLߢgÉ, ÜjÖ×ü}{®îZ‹ç,³ø÷b�up/3±ú±,ð“,пÔò¥•/¹Ðé4™;Dö8²~¼]Îç9¨¾ó_<ßá–ÌRæ,w19müxrSO­ñ(MÿâD§†�isðïà†àAÁý°UU²c]öqà/›ùî¿ä]&è»ÿèE6**ŒÐ¸ø€üƒ{Pövömd�ßÙ^<¯A§‚Œ/éÙ.—º× u^SïšÞU¾,p‹X{Þ£n^2Ëwl�upÇ“³º¶,ð£,‡Š/¶à´�/ºð€dœÄ<à»V8®$‹æ€ ‡~ @úFð/ÜA�\JêÏ÷L'—õy+éßQàõ<ðø® µý²ŒCyÈNr÷Ÿ ?Y² øÝ¾ø8áÔ%9(å9ixæÊr”#_r.‹úUeÖ ¥C lVߊñ²�ËšGð^ZgÚì&=ôß3ðt]9Þ®iž}èük}üà'Èÿ£‚~?Ý"¾碠×kRtÖ|‡à#«��çoUÚqë0óÇ}ØSs³­(fn=¿‚ì…\—Ð;Xüt«�ß?I.{)û)kÙcØÇ é®=õÀ—ö Àî7¤“µâ>PO)k Hý�œ÷ú!¾÷'á ä€Ô‰‰í’m"ycö¾T/ÖsYê^ƒCÁ„Ìú¦âE. ¼™Xkçö¤µßÌÌKÑw¶À:øÎ^ê—~% ô/¶þEÆ—4‡5ýç»ÿr\ DÈþ!@A?þ”l²ï,ÉÐvz…ãtâ::« œþŸ‘6÷uk9ý9דð�äÜ!Ë!€�v"ì¤òL‰Ç†ëC~Pμïþ‹ŸÇÿqÀSÇ�¿èaé‹ÓÑû€ÈÙ”:ô… BÐú U)zÎÖ°‚n�C{Æ& ·]øZæîÊ#l:›:ç²®©ùà]mît å{dë]ãq�·œÀÀüƒ+û` p¾üäŠ ë¬ßá÷ãþjª¯a_+Õ|盥ú?+íìB?Ê&£?Ìs§ÌuîùÅîäÌQÑCF|öîò\sà}Pr¶¡ø¶�ø<Êú_¸û¯œWú¿°/�yG}P¢�$tfŸJ€O°ï}Xm³7³G¹L8{ò[¯„´d�*'u<"ióˆ¾Tù[!ºf}·Ö]r˯µk.{Öku¬zË?ÓëàgZµ}wxïŽÄµñå ­¹¥eàäḠçQvÊÈ ü}ç_Î(´3ršmêá,ÚáœfÿÈá=âõjsy/ŸËg:Îp }‹Ã^`¯ÛeàG&ü´ $T%ˆH€å;«Ø”ŒÌ” È^#I‡žöœÐYö̼AÓ΀μ¢Ñã¹Eo—mB÷OLÇ ÛŸët:*_c|†O¼!ßíÑeÒÇ^úR&Àë9²á…Ž®´3AÏëD98Ðk1A¾‚øq—¿ã)OÐ/è'^w﮳®ê@€õ9Þ÷¯¾Ä†ÀàS7Ÿ“Œï[c¾5!«l»´:ÙÍŠ½�5^3¡‘Ï:r@-šCù"yöA™wöÈØ£_ëÁ9à¯ÿœÁ•ÿeÿUNû£_Fô!½ut{¿߯"HÄûqµÏ£ÿÅã€bÏÞÀ>;\:zÚÙ¬|ŽÎYïLƒúWU½Öþا_¥ýçWº6¾k=¼÷ñëø®�•/ Ü“ÖÀ=ÍÆê˲ÀX€/Á|Qw<]ƒçŒK–“ì×x¬]ùrÊ€’8¥É8·qŒ{ }„ãtÂǽÄiíÎèŒ#wNÇ=Sù´›¶ ƒÇ)ŽL å}"~§,iŒ+Œw=®6–yœ£\¶¸äÈQõÎ|Œ:mnºühº•›Ý3ë#tÖÊ gCù1rtå@Wk†²ñˆ?A¿2¿eá_¸ü ôý[Âó›À<úï;ÿÒ…ØKœÁ«K3<îéOà– °‰k$ |Ð5'c/›ædð%Ǽ�zÒÍ~ÇÄÝwëdÈ~•5”5tÖÞñ•}D²Îâ£+öL_/AdÉ´ï}Yce_£ü#�ƒé„çýNåXd¯{$êDzN¶Ec^£›èYtÖqVp, , , , Z`še1—–f àtÙñ*ˆóˆÊ@žðÛ‰hÉ’qqrã(â4’€q0»cy„#‡ù¨Êz½I»ô¶ Gê²0¡ÉZ‡PëÇe)�|‡Ñ3isÉz!¸ì¸xý€ÀY I—ƒ€@þ˜§ú øw‡½ …Ûµ²Ÿ�æ£Á�3n^l~4�geª!yÆLÎ@®[æ{±Ÿ‘¼”þ¬9óê1ûI†<•©w!¹}•³§±—y_VÛ$Úç }¯ îý@mÐJÆ#ô»¥|ïtøÝ[Š—––ÄëàA&z sYà àd9p”ðYœ29¬¾[Ø~ý P€y€Çÿü¢·;©Ý!Å)M°<0r=觬ÓqH�¤N§Î+§6)ü.Hyœ`p?µP|;àÂãˆjìãN¿lâ¿êê<åØ;ö—Ž9ÅÑúYÂ�G�RþŽ�àŸ6$k�ÂÃwÝ ¨GŸ(3îO}À+<‡ )ºw8ÛÕ6W§»dÛeâ'¥¾éâÏ2™�gü(6�C<²ÖÇ€3Ýy³žÞFðš÷ì@¿{^A|pÿ{ÅØ‹öÝÿ‚^7%ãõ$Ü�!åjÞa®¾Ø&xºúÃa[û´�™¼ÌÍ 3�sy�÷ÑÞ{�WÛÿd·§º»=¡éÚí'Õ²c="ÛÓD{nTž>¹ËÏ:c¾Ø£sç¿Cï{ôÑ¢Û>`œ>S7$ïýMn¦)‚×s_è²À²À²À²ÀY`¼‘!—še�÷d0BÒŒÇ9ÃYô�näJÖ¿Ó@¿ ¹ÿ@\Ô8ºR¾ âu§´ãÝi§ì\ÐY ©ÓÁí¸nÅCïßÒ/ðÈÎG˜òþH,ηëz<ŒI6™à_9wí†_2©#µ§„®)uýê´E™ƒÔN9}K�ozÒyDvÝÆKgÖmXWoïHÑ�ðCO –Ì×XR>²ÏØ ZOãcèïe ó2 é2° +°Ûáá"w”££Ô?ÌkC9?Þ—;þ†u—?wýs§ßk Á¾ttÚë¬ôcʲfLWgl³üY_ƒ>'UÿC²ÞŸeÙ?{¡aæ8ÏM)b]Ñšƒÿð½§¢§×õ:ìúêq¬‘^FÝRæ"m¦ m±¯r÷ÿYð/ž»¢Kì7Iÿ›hZJ––––.Y`\²Î*[xp à�ʼnLðÏãÿºIy À�¿øüUÏÎ#P™ˆC:çΟe/ g.‡×Sô!G¦œ^…‘É!xžˆco¨ñî‚èù Ë'Ñ)<ýÙ¬çJJ0SöÕä�*ÀÝu¶Ògr”yž˜ãÂ-�NæP<¯�´uÒp7˜ûÛzèàªCäj,) tÝy¬�uÐCje;|+Ý>»LêÀ#³.æ¬uôŒ×ut¼·œù's÷^Á>A¿ý+E?ÈãüyÔ˜'XC¶ëà(«­ì@ËÂK ÎôTücHú?%Ö5ãÂN$hóLÕGì $÷y �2ª€Wò>T4-PÂ�"{©¯7á^KèD®CÍÿï¬`ñý4Vé;µ‚âU­oó�½&} Ãc'JðŸ€?Ðû�Ê¡Ñì½¿ÚØ,%¦RööKø\vDÃ[iY`Y`Y`YàûX`|».­ËïÊ8u8óÀd‚{œÓîüñ€þÕñw‡’õa@ÕÇ8qqvã�ÆÉœaTø8©ÐÉG<�òÈuuf½áÎuã çà_²ãÎxœ± Y6�ÿ÷TY¯cœ†U¿'(úÑÓ^âTYß�Û´ô2â¡+�š‡ž“åSêÓ?áôÓu Ÿëýlz¶™iÆ¡Ž9Àš`ÊÝï’sÁ˜Iw²[É( YÓ©? ™ùÐdÖÆœ üàÖú±|êÍúèqP‡¿üó·”Ê 8Ð×œŽ€þ™oRƒæ„vQÉÌ8õî%µþºK3-f(g8ËÖ�»¹ª9H`Þçkxµ"íwjkì{Ô�}õ™Î¬ÚÕþÁm°¿&øgoÍ~JÖadÿA?’ÙÂge|’®ù)€/ê‡ þýÊ‚häÑñ#Rì³ç�hxµ±,°,°,ð-°Þ᤮!- |‹p°쟃vÆp@Õ��Wx~ÿ_ªŸ('GÕÎjÉ çYu(•qB{¯Ãà8žqZáÍY¬¯Ë‚ÓêC»_ŧŒÔ!8²ýñÿÝ!€ÆçÔ˜Éþ‘.ÙƒÇÿó €¡Êò”ÎzìpÎq/Í›þö™14Ö@©ãr‚ ჆O :JFày¢_˜ ().Týsý}®ìçr?)0¸iÆIc" ?â #õ‘ºá]£/ɱvÒ‡ZG» ?¼ÈFç耖9%øWöüÿñô4˜ïÜýÏA€yâª�Ù–¬§¤Î�Ãô½`­wÚ&ÕýÁ/›;�ý5/GÁæ›P8ÖUéÍz‹,{‡ue® üû_V€â9Wûì‰îô…DûÙó:N-æàzÊ6Þï zªÓá…fwE¶[ãÌt+’I¦Ã ^’ïu¾,°,°,°,pl�upl—Åý,ð'à5u~SÜÜÅkã�sN!õ‘Ú1ÄiÅy„×ïò›_ç4*4)N0N%8§×wš„óY_½»¥úè‰# D?�çv¦{¿(›ixvjÕþŒÓ?"[ý£�ÉÜ9ó_tñ?ݺSÇ_þý+ÜÿÝ]øgÁ'å/ràùðŒ�ñÓæµD�ºÜÖÃS-ÊÂëøI¢° t˜;§NƒÃ/U-�2ú,¯‰’yV'úSþƒ`ldX}<ú�~�«O¦ 6A¦É œZì‡._ÎááìxØ©œç$N¥]NÊ+Çù4D‡2w8Äȱý ÜY8AòtáÜñ }"¨‡ÃêvFáæ”6i—X¾dƒÓ�à1ž~D–þ4Ü<Ñö ø¿¶àߢ9ø’!ÿ£ü¹Æ…^·AûS¦O=Ñר°óÁ{Ù�”¹w™lɼ:˜ì¼>×]†º‘?×/Ëü€�Ñ>ö¬ö ;ÍøŠö<#W�¹K .hnÑþ ü[æïýÈÿÖS¬ îúûz/Ñ>Ã4ùKÁØ£wºñbcæÜ48sSùžò{…dž½(<·—6´üûÑíÐÉ>(¨~¹�]áœv"W‚‡}Üù39 e$ÛÛØ1¯ŠXXXX¸Áëà#-‘û²@wî«gï§7qÞúˆbw;d8�qúpö$¸¹i›sé`žÊ”U9xRêÜí²N9¶ÜÝJð? ø�ù}ÚŠNãEã�ž\Ð=žv‡|ÉF>|äÜ7µÓ!�òsÇÍO>‘expCÑVì; ‡ðDsð_Áÿ r@]?  ºq¼±ÒÉR{œþ‘Òï.·•leá#7ãáE‡çEí�ÄŽòà 2Î�œh�EàG°ó6‰í3ò—x‘ ìºà‘µ&fèk¯ø¹s Œk¬túZbî”Á‘3®¶8pÖ€ÿ@ô´ÕÁ>§Ë¶ˆRÇ7ίñéÙÅ6J5Ó†—=‡Lp v®ÜñðŒ�=“mÝšïú9ð#ÿÚ7€.k}9ÓÄY6mÓ³ÁÉìE=•�| öøñ¿?•ó;Ù·Te[ogÆëµx¦Œº×RÖ r¹®ÕYåËËËËÇXÇvYÜŸh�~—·ã|é¯/þ?1ؼ;_ô ŽãÀqìäöùA†l>e•ã`æÀï«,¿”ÏÝþÿåì:ø/È€“ä‡^1Üúi®rIZ<éS‡”…Æy§_~-Amѧÿô“¾ä'è'ð'ÿSÐ�ö«<ЧîgeßýGŸÚã`Ámª/ôŸ¸QÇŸô›4˯Ëw¥þ�=Õ’ëbKÑèÁ?4r$d[�8÷nRãÓµJ?Ì¡GøÙ>�Úç‘ê�z‡‡5Ï15èOúôR˜.¥^èèíôÌK�#¨õà>5èkªhpì5‚ðN3'ʶoä‹ï¿õS°Ï£ÿÉ>�l`èˆ.µ[Š5xà¿jòúÃ>JÆ ¼lîræ º çjæ!H‚ŸÔñð6mz=×¢èk¯xöe•›ª¡´K/;'ç wþ e§?Õ&8¿ý’àŸõæ5§2 ýš¡Äw)åaÎtø . , , , ¼½ÖÀÛÛtiüIˆÓñ“š×ÍvÛçÇO�€¡'»¾Å Ž,rq0høúÇò(“£KðÿQÁ3�ö …û@rè$䣈3Šczø‹í”zR<Á~¬¯ÿ€_úDïÀ_ÐÁA|ýÁ]crÐ/œ±Y^Я¨í؆~�öVÝxGŸô?)uÂ;¢)ƒו�˜OÒ9ZE®ßç]8¼ƒž@+©�Ò9Úlu¯Ë߀Wo-iœ>T½~ƒˆå�€>wÜ*Ä;„0S¶Iœ>�ø3/4ð^å\k– NÏràóí¿�£'²½ïä+ xñ -OðOyÝõ‡Ç!€yàÌŸU R7´¹§�ØúÄùu°šÝ±þCÛFغ†b[7<�Ü3'c>Úy®�‡×áFÝü9tkoÈS¼ÿïlÆõ#¹oIèòØ_¡äµõ^ÑÔª²,°,°,ðË[`üòS¸€Ö—ÿÛ¯lç¿ÛØ<œN¿Ölæ Ž¥�gÉØ©nrÐÔÃÁô�oࢠDø Œy O,ƒÿ©r?8Š V| ¾G$ü\BŽ¶Ý·ãž$¤3¿àÏ_øù@ÐÕ¿ÜÉçn¾³úÏA¿ðgš¬6mµM?H�õ²OÆÖëg>ÂKyçwKØV}C޲Х3ü±.$—: zF½­dô%íz½H7)uªÊU©KÛá%1>°ú8ú ¿ÊDñÌ �ÞÍtø½nç§^êïPkƒòw#èßÖ®ùðÁ¸²×>¶$€oÙA}ñàÏÐs©:®‹¬²mW8Ýó]cpyÆó‹CìGò¾ÒÆR+{›‹ð™'æ§æÈóØç<)x`øŒ-�Ôöu¡:žæ\9�üj�<äМô^#Ór£²Eü;>�!«MÊ©;²øÞ#®@Ú$±®Üÿ�¼F>+ïe _XXXx�ÖÀëì¶jÝ‘f⎺öËw%ÎÜn 8›rÜì4â|6go''Â-™Êvq+ǹ$Ð&ðOÀo(Ú�² =ÿªïÀ_�wTÁou‚G¿Zx‡î—ÚÊ€ƒÿúA?ß±×AÐOÔ»ü~¯¿xé+} ýüÉ¡�¶©ú1§süY.tìÐëu^ðÈÚ²çœvkA}�Œ%¡IÌÍÁ8"dX¼é1ó…]otÒ‡ê“a£Õèií"\rWa—ï)::/ø¹2øsÖz�wüÃ'kícC‚~þ\ •Ä ç€Gú}Pwús0`û«Ìó'ðÁŒé·àH…7Î(ú•‘¬CÆP«×Ã7�­g\<Ïϸ)pm£—>ÎÚ“v›~ÖBþþϯˆöA@ÉyM\jèBYfî9ûòLðÏa€ˆX'êÓQP¡ W‹¬»IÙ6�=âM"‹\XXXhXÍ ½O \úr¿TvŸ£ùõzÛÃéÄác8©Âã8šUÃë.°mäpÉJ|&ðŹtp,}-Üé'ÀNðž'| úDv¤úÿ8¤äk)ý&S'|úåà_޶ÿÖ�'È:ø’à_�ôó�A~ÔÏ?ì§:ú¥#�ÿ×îú�fü†j;¼Í:ôæmc"u½ám%ç?c�ÀÌݨQã°¾šWÖ„Û‚îT0}`¬ ¾à•”ëm\@¬/íInÐ�®ì~I·Â#Y+h:BÏ0mñ«?îÇ®5ä2A_{ ¢ŽQŒ¬k!ÁÿõÞéÏ#þÿ¯2rͬQ\4è{Nµ <Ä�])4^óèy¨¹ >iæ9tå®ÙMÝöQí1ÿ´ãàŸùWÎ+æUÙ³'nkåPÊk@%Àì¥�ޣڧµâ§X3ê uœEÛ>Ð 9ÒÌŸé!xy©ü5‹½,°,°,ðÐX=ýïoðq>ÞßȶýÌñ¹m>º‚Šƒ'ÔVáÃqU9?å,çÕ?ìWç‘;™8°¡¿B«Žôûq{Ö~%@�€Û�#rd5Ö!ÜwE r¤—À ð®*ú‡ƒJוIvð„‡œ4Ÿ^MPÿ8 ðA‡ôCÐÁõéA2Op �¿ÌA€iér×ßö«¶:.ÖfKÁôÞ[¤®/mFï\9ð@ËÓåg©øjŒ�|ñ£ÌgôŸ´4ìÇZÉXÜVÕ5�2Ú­œ6B[”2Ò ;¯ã‘ƒ7§KeÈ^(ŸÇè5Îõ¡ÌzöGEe~ÿ’ÿÌuÁ!€ë5È�þèB¯“ ±¢ç¾lBïûÓv�Æß÷Yãš?`‚þð˜×�ËLÆ›¹ÊÊ�sŒZ.kHÖžá6i<¹hdR­sûáß éÙ{ `ýqäoOÊd'öVöuœÇ~ À>KŸ¬C8}ÙáÅS5ïɽ¯Ôí42+=·À·ÚÈsô\íÝpÞûøîÆÐ«#˲À:XË`Y`Yàõ�“ç E²p¦y4þ ˆ¹{ÿIò_ÊOº‹î DÁòÜñçñ}ó •¿ÊÑ%l «Î?’#ðÁ)¦w5ýˆ³àxÌYíÀ³ƒ*�@:Íá}$“‚â°úÑü‚½?ô‰ðëù¿¢ÿ«>; ÿ‡þ+牆ý8Êq–i#)xà̇N_Sö­}s{Ñù¬LcI¢N‚j`ÏØÉÿæP2. ŽÊ5'Ð#øívÅ�)U”]ù–܇”•Þ¡9xè LÝâ™'Ͱó:9xIG¼”Ï”WËc^Í8ÉZÃæa­)ô ˆZÖ82•‘'ç‡üüH?te—G7ýïp£ç»j´±qîl] #Ì!¹æÁ0xÊ€J©WÕÏ‚²þ©¼ê›Ñpë«6Ò—@¯‰.Ûð“â—cô�à? ü9HõÁªÚ¡_àðø;@öo?5%Ú¦h_ÿعãSç ¦¥îlšegúlÅU°,°,°,°,` ¬€µ––^lœÀ8²Æq qø} 'Ù?â'øI�ù_Êó}Ý‘$Xqp�¼pZ;�‚æK>Oü©zñv&¥oþÿä?èþ§² ´êöúM&gLÖÕ¨=H@ wð¯¾ñËÿ=ç €r×K}AœèÄf�´Mšixé[/ �òoIÑÓu?Ó§¾;Bwp­qf¾ Eû€òÈ º¬Ñ èp:CNš;Ë7vúì~ˆ? 2é_úQ<렽З`/»„S6§´1ó‹v'œž8³®SO땾&ÕÂ) x‘ƒG=d+ \<À«ìòÐèOêxxû¶ÆæØ^k;s@™³xÀÌçà¿ÐnY»©æYIÓöR!í#÷†‰>Ì}ßLðÏÓÔ6ûû-kŒzìÕà¾öÇZV™×¡`ì\ìQ~”fÙKôQýÅ[XXXØ,°ÖJXXx‘pºìÈဖ£7 x»˹ûÿ7O(´;HÄyt0ƒz¡úÚÜAÿSu‘wð_=ä.3wÿôû®§h¿ã,Hü[O!øÎTá8¤ÑegŸæ¦ŒLîÚæŽþ8Pô} ù@>W›ÔÁ¶#]<È5@ ÁwëS/ïî}¯Óù;/ ¢£ëuuõyÀmç^ãz\…›¯Š@z=åôg i1yÞwеÛ2I´_ø¬ÛtÊi¼ «€“ÎÁ^v §,)ºBÏp*çú¡¬{®¯èʶCðª[½Þ°�ƒà ú}m��Ã�ÞÕÆ‡~Ô$;%ÙÖ5G^'ÌYk܇ÀðSù%�º-±NGÛ¥×.ü#ºÕ}KKxßdNðOô�;ÿ8Žä�Ê<àý޵¦~Rßë®ÓÅó8.à*º˜ÐÎôÅÊ«pY`Y`Y`Y`X` S,dY`Yà%ÀÄÙë|(€çñÿùƯ ʿș# 'ûî¥øØå`óÎ=?¸—€Ýý¹ÿ_¾lwþ¥ÃOþ&Îy¬G|ÙáŒÒ7eúx.3œ^îØsàCéõ#ý‚ü°_¿óî»ÿ9@‡ÛÄ!7Z™¶�RøÈ�ÎÑ[馫˅ÿØÛÂÁvèHa‚h;ø”3Îý£‰Ð•éCÆáº�¦ì¦Äº�>©�Uq脯ùC!dKràáö2 6Ùstø�]Wñ¶žªYÑd¯EÖ¿d}Ÿ1“ ºÎŒCO™5ž×{„}¶6ÜÞ£}”MvæÃ15o¶;8sÔzßå*óBæ…ö«Y>ÕB)08ºáÕ¿ ReƒßëPö ‰~õàŸ^el”�ç€àŸ=|ÿ¢Ç^«>!ß×%c€v¿«ìWÑÅÔu ØéŽ_T² —––ÜëàÁÀþ²À«,€Ó‰=A:þ¢ªÿ€_P0Ï+Oþj�Ì#¤<žïw™q•q> ˜Ô—¢@IDATý€‚ýܵóH9ä úÇ8èâq8À?ðhjþýÚ€ttuFà/ã]~éä•ÿ p¿ Øïþó;<@b,v€4_q¨¡ƒ‘'…wD§l“Ü>‘;âw™[ñÑÆQc1dáiÜžÁÝA€hæ.)ý7,~t õA)ýʶÀ!:a'ÐßÁ´/~úoHÅÈtüˆ×ËÁI]nãœ>/”Ù**öÌÚó!Xçc“–}(ÐhÊl‡â·M¥Ç™ÊbYz†ý¨ûàiì-Í™›°d3ï¾kís0ʾ0÷ÑuŽutE_á´ÕÛ븫E>:¾²2r€=HáAã4~ÒúáßMüj“p :Yc-3ê:‹O¿)wÿáŸÁUt1õzvºã•¬Âe�e�e�¶À:xàÉ_C_x©†§Š8u8„ʹ£|< 'ù£2¯ä5é'ø’ã—€ü¸Ÿïæ«>Á¿ÿòJ2Nâåoù,“Aßùç0‡œ'$›àý8ƒþÅÇÍô;�?Î.tÆâ Éæ €C€ü¥ß.ð?Oðã< €SL;Õswº§Pi/42áƾÁ{8©Ëlœ7ú¬ñx à#6&ð7^ô˜ŸkÇm湂»À”n§ <²ÁaQ®l½@hÒ„[Oñwxx@R«¿1ê3ü.³Ñe沪W½Û•ÂsðÔƒ'Øï÷3~îæ+ÛNÐÊŒ=94 °Þá“À ÙÃ�zèÏ1'eÏqP6cs�Êü’Yïán~ʱ&ø•”¹9”�t=ëCÚ§�jË}¼ÒæKŠéûa¨ �L�ϹóÿY™C?!%ÜuD{oíµ]YÈ賊ÍOß‘é8åçRä(ïõfz.;§oñ—––ÕëàQg~�{Yà-€3GËPúp9à)ÿ ‚t^ð?(øç_p?Êéó€díØ©w‘&y´T`§Ñ�õKwÿýþ¿`ù·c®€<‹Š3êà_ºý>tvú¦ì> "žLYßÿôàó€@ü¼�D}¤g§:|ä{J9¼à]ö¨î¯ë|1®ñ9ÐhÐÁ¶Æè;ÿ�*ÝŸH{ôk¤GðOðŽ’ø^kU6¤h—zJ†…�>S¯óÃëð>—ÑðzJ{âm½;B“½WáðhµøYÓÀÂs€�X£=ÅÀŽG&¼Ð�ûœd>°‰4w£¼ÖkÏûû¹ø�Ù»^jWÏ ºH�/žÛW»½ã®8Õ ï ý"Ø'�³ÞÈ^³‚Ÿ”ùK@”j=úî¿h˲¦•¹¡É¤àù¾0Ù>nK^þèõ¯é˜e/k^¥ËËË�e�uðXó½F{çx©CôÖùÖ>NÕQ¢^.p¿ @�ò¿ àÿ“›� j>(óC}=øG/Ž#A$ýpBÑ]| úÝOA!#[F:¨7²úë©*È?Ä‘Åõžqüïj¿ßùÏA�øä�,:‡�è=—Udg8åЗrGŸùФ.ÞVò‚ÏØ}ÂGÖ¸>ó)«r·tf�̽èý¥Ì}V]ÚIÛ­»j;å–�<ðN…^G¼.¹s¼^^c#(ý¦U¾N‰ž ?Pë5‡”ù£ eÆû�3Ê•R¾QTIëá¼3xãºcÔÝƱMåì13?åÎæ»Å¾%C¬]Ú0×5ä¶ÝF ;\û^o³tuÖ·àô#k‰ ?8�½’À?Ù¢;äàÕëŸu^¸×wøè§¬ú¢û è]°ÞûøßûøÞÅ"\ƒ¸ ¬€»™ŠÕ‘e�_Ã|ÉÆQšqhÿ¨™Wÿ€ ‡t7d‚²øÈ%ã/îr ±‚OÑ> ôû·âs§”§~W];š%‹œ­_�WvYúy�Ì¡wÿòû_>}úí‹+øB¿²Ouý$€tçî—üJ4m� Tøœ6wõĵÃ"�!ÓkšÖ8gþTÍä¬/zz»áÕ?âQw5>�SvÈx]ž±#ßÍv(§ÝA 8åúZcp Tr}l¹†€Œ›¿Rs°DðOÝžUŽÌÈËÀK÷gÑ”¯´·À˜›°eÇð€ìCc/b½œÉ];GGÔgûïèÒÛõЖ´ßêZK,וƒ£ã;%úšþ9 ɰæ `xŠÅë¹Ö4&½dŸµNÖ¸ú�LÆx-¥r‘¯ë™y×ô®òe�e�e�G³À:x´_ã]xc tg Õ8¯»à_í²ê�(wð_rÔ�ê'°t@¤2Îðíã(’¥ÓN¥ ‘! çN=›š3x²Úò€‚«¼sÇ4þ|à#PÝ~�;ý8ÁvˆÕ†ƒRÁÙ)§[ï·q‰ÜúndûØÉˆ5Fôµd¹+N25�KІðB§|†¶=ÌÓ˜ Ù<‡á[NâÐóØwº3úˆPð›Çù*Oÿ‡Îjoð‹vyêžãEI—›y¡#:°ú²ÛwÌ£ ?ò@eúOàâŒp’áõ¤~¸Žx;XüˆR¶Ò�°»’çC6óKtìEây�^‚UçhÝÏößÑ´½º®¨Ï¾f؃ñ†\ê\h3Eß é+öHŸ{ðÏÞìCõË¢¢�<ù…¼ëˆç-AäÙ_cÔ%ê1†})!GÚ}_4^ô"Ûqè•––––6?yÙaY`Y`YàEÀ‹3–Šð’ó;úyÀÁ¿¸ ŸC~±?¯Ä G_LœN œÞå™ÀÊŽ¦Ú$(u€.9ßé—Œh•åîÿ8(Ü•JF'8�±ÕÝ2Oø@cà‡ }À ™¼MN?pnwŽ)í SÙe 'ЛúÁØSÏP¼a•9ÔOÊ#ŸVfºËX_ÿ`LÕÐA?P6 {n‘K¶Ò´T ç~" /0uÂÕjÌÈÍ©ÚóØ ·>ä"øÞQ{ϽšÇñ{yp`Ö®mPõ¹Žœ©p÷\gŒ Y‰%SeŒÙD­·ÂˆQ¼ZLx>„ʦž ¥Øü §ÌJ"‚zgÒ©å&€¼®!ï‚঵×x?¬2x"Ûõw¼©|K´÷™=˜Ñ‘û!Àxô_k’=ѬéÊÞS…ü£ÏY8cfMg¯ >Ö¹d{Š\çE¶—u=s½î—–––ÖÀZË˯´@œ¯8c¨�GƉ}öwÿÉüU%ã:[e÷$ΧƒOq Ñå;£‚¤”9øW{ü¦ïå;؇Þ!mJ y Àx£} >~íY:ìû7$ÏÝ/x´ŸYß;ê’q?c ˲åãX&•;¡—N4lè–:¯jZ&xDSïˆO™}ú®œ1tÉYgú™€3�1À D&8�TuL‰çþMz\¯ó;Ýù›ÖÓgÊ[›'!a½²¦¯¼ù�™'�=Ô­Ì8 ¹†’S6`kÃã d.HÆ�mx¡ ÄØZ©Ï_pCÙè Ž]òà[™knrÐ-eŽ`uÜ"M¯õioñÝÿ‚¼ÚäºúãÖR·µõ=Ñg}Wcø7UÔ? ÛúÕ(AÐ!ì­<öVê»ö@qìôœ(ëÉv+F/ëü.¿ðe�e�e�e�çX¯<·Éâ, , ¼ÀÝñwÿåÄúî?�7�¿îü�§tÀ_ýYVu¨7œÜj»ßyÂÄQÆá§ŒÇM¿* '¨ço�ã@e»CµÅkã@õÇ!€êÆYÅAå®ÿ¿&s盀?wÿqzý €àÄ„;Šp¿‹6^¼Mðôé2Æ&Y´Ä!|ñlgÉŒ„Þ¢]åHáðæä6f¦tÓ—žý<æ¡•QÚ)°÷s+9•S†\d‚ÕÏã‰,Z�K>G‡$E÷ {ÙŒCW:²[Ê Õ?ËT?G�¯Â_¸çXåbD$�òÆv¢!õ?ó{"¶RY@6%eþ2ØqðJt—²ÊàÏrä)#nÔÙÏ̵|-Ó†®%h¯ Þ¡N>OíŸÕü¶½ŸÁ�ô»?�ƒ~“…}ñ³ ÿÉBrì§ðÙcÿTξ=ö5ñlÉužÈ‘R>…øz>—w~×9ËÍú½,°,°,ðˆX�8ëkÌËßÑ8\äñ@‚ý''˹�Œ�4Õ!Åé”’AoX9 ÔShÌãlªlþ´ZíõÕ~`šÖЫ:vUǸ`üƒW’ñ²Ê¹îþŠN¿ÝyÑcØáȪÏI`‘:QŽI8�öbàM:`‘f=]wÊ-X)‡tp(ýÐ þ�./~p×ã#‰~¥Œ'™à@R¯{Äëåà3=ëHù ÏÉÁoéÌH,á²ô±`‚ø1Oâ‡ç±"WÙ#îtð´­T– ÷*=)Û�ù›iÙ&eÀì[c/Òz Ïk¬Ö�Ë'»2?Ñ•¢>g�®è¿öîþ÷=qÈdíFùw†½¿ÐO²÷ú·P}( ŸW®XëÙ�s`@]è*ïÁ¹Ø¶qxÐI–!8Û½—÷²#]MÍB—–––d�u°–Á²À²À7Y ;_vX$Ú‰•3ë@_0?È€Ÿ ¬ä\§\;›8‰ôHŽ$¦P4Υ nçY‡ÓާtŽ ?´ŸÃ^@^õ¹3Õ¡u¨�ì:À—Îð ýˤgÐQúINjø‹ÚíÉc.†qÊUo8²‘GW•v%Âi5º:D¬—A§< Þè#í�ñ%Ø?wãŽÒ�¡ó�ïãMýŒ;4u’áÍxx]þoæ§Ž v›ÓŽ—¾d Òÿ@ê÷‘Õzt Sõz[ØØ´.ü& Œ¹Â¾- ¾Ö ¸iðZG�c]u>z §´oa*< Gà¯ýeàÚ«æWÒ÷é@Ï÷bõñ÷SOjЯ@ z/”m þ9àoÙGÙ[9Tå €ýšŒŽìi�bíxФ£±ú:ÙŠŸ••µQÕXXXxx ¬€‡_Ëoi�#Çå-õß“®Œuv¾ìPËÌãý¹KOÀï¬2êÚé ÔàÈq6íøÊqì�2·+~Ú!H2.H[ÈäΓ¡xþ?µÿEW;ª’í´EÀ› 7xî|û}W•ç ËÑgñ¨›€�Ôq˜¢=Fú]e¶¡pÄ„…¨Ìza—ŽèKZ‡ç ³˜¶Q(k|Pב}Ü�)}£­)£»’8@éô›K_øA;çRúByÙlˆvºã8⥬ óIÎöi}нl�ÔOyƒ òg;†í ¥àNoéf‘©�鯂,PsÃü�9—-McÓàã¡ º œ¸Q7}ÍaÚ°î(øçà”}QȾÕRö‹›þB¹Öwïÿ«æWØg9È¡Aö¸T=Æäë ÙÖ2­ÿó¸/•§l®ƒº”5Õ;ô¨ÎNà qMÿ•ê?½øÚø×ø~ú­, ¼™ÖÀ›™r)Zx à(œs(Žvá¦ËÇJÐɳÕà§§�z Ò.2ðŒ4-œ 'š»NÜ�"Ee~u@<‚×ÿ�èuP_z‚­2? ݆èJ¹Ê^“èWÆÂ8i�Ñ|á¶±`l€lƲk�qRf�|dñ‚SØiÚÇ.Ø.ð_žÖ ôÝ<ÉØ&Øœ`5- ÝõÓ}–lúf(�ÏhW´ô© ÞœÐÕÓ5ºÉŽšeŠÌ£?Á�‰_¼"ÇܘN™`õØ}>º�QŒž[àÐy‹ð’yf�1Ï*ÙáZ+#Ð Îú!k-? ¾á¿0ͼޮU¦]A—ì¸ûõÂö¿§xW ìùíûÿG8û–b­çp“Cï‘ãš°�T7{œ!eJÃN¹É>—Á>W7ü£:¥n�e�W[€u•5öj%«â²ÀO²À:øI†_Í. üª8úÒ‹ƒÕ]e;ƒ5Èà�}콎�]9‡Gmô:ÈñŹÀìÐÜõ—Ð.0õÓR„ƒJ»#ðmÇTÃû̾HWô‡Lšqú“²w•×HŠ<É{ÎÚ8°oê ]臟²Mb÷Ùõï q“†Ý%�¹ôZokÆ× ´rÉןֲaä‘ ~S6¡ÃyŒžèV{�îr%ûš¶_ÐÍ›E¹¿À�öUìLfåñòGe]¹6œ8uf¨z$ä’æ±÷2dærx‘9*£|¥e�e�e�G·À:xô°Æ¿,ð àPŹJµçN©;^gsã˜Ã ßòS�ðNn ì8âÓ‡´>Ž%A94wóâ´¨öÀŸöC§ÝüG�‚Ýž£ŸºnÓH}ЇK‰rœ`ÉXR´ÇFp@9ɰ�}Ö† ª¾E¶€4-ü(ž"é‹ €¶Påã®]îüçP@å8ô> �Á€ïšŠ‡�©ë\c£z$Éy0‚Fú(¡³§Nw¼Ë4œÚ»¬v:MÜBƒTϺ¥<=f®ÂërÔËø¢³ónD¢‚ÈEW±ø Øîªˆ*ã¬eöŽt{'o2ßÐWÍœfŽ} wý­îS•¹2ø¥<ÀûÿùñTöÛ³x¾ó/ü£2{Eö®2Éø†lkŸ2ÑŒ¿§ÈÏüȤ<4ðœl—Yø²À²À²À#[`<ò쯱/ |£p´â€ÅéŠûìxš ºã)Gg1plˆ�E¡›;¹ñzà‡2ßõ—ߥ’>Útð ìx9¦´G=gÚn¸ä: ­dø¯NÔ�ó‹ÑSõuÖMK.Gœ~·öGO¨ß2Nz2ü#=8ëèÌ#ÿ÷ˆR×Á¿úàT}ˆÝгKŒ ^øÁ;ÜU˜ˆŒ1p*ä™òØè¬v�Œ¥óè´aúFáQA�9¥�#oFÁŽWzv2¡Ålµ6™õùmh¶E‘çµ ÷+ÖŠò8 ø¯_SUþm�8S;ºi¿ðÀÞvú|FËe³>Éy€wÿÓ?®mð~矿ôSâûpP´÷�ÈÞæë¡hÆïrÉ“l� Ýñç²9 ¢³ë;+¼ –––Àëà&y qYà{X ;kÁí âÔµƒÏá§Ü¯œC’icõ!Ýòñ ‡,m–C ÏΦyן@�>"�Ü(4ÌÒ½µ.žÒ€Ò‰®ÿªÌ42âïÒLï '¢d‡£J1í4±ŒÏ¬ê§Åô¹1†ªí,ùíèþ¿ÑÈøÓÔÝÓŒY4wþ4{h‹þÓ'%>±?�Icž6r“E~Î)ïðÈŽ�×ñ^¯áŒ‹4 Ú÷8„Ó×Ýz ¼úØÇÇ{¹%ê$½O½ßÄc®KÛ Y/µfÍ!@ìr¯ìUVÐ}H{è+è6«Þ«àµòôù•Ýx³j\ÓdöÆCεÎ]ò'­ò{ˆ÷fA®;×)eŒ5PÕ� I¶ƒ±ÓGÊNœóØQýóÒ«dYàØY£½ôˆ×˾,p¯X÷:3«_Ëwl�þ¥×qœT;¹ê;ü�·±„+x`x›Û‡€JpH ¯`‚Lû%ƒSM ë Nrnšò8—…§n»Ê\ÄG%·!=À‘)£=Ít/»„W½1~ɺï‚n»êÒÚNZ}6£øÔO€›`ÿÏý‚þW„‚¨Gºò$€;êPg}üUYOòwúE�`«¨?Ô ßv}£´ÛÙNGæHÛ“œû/Þþ¥û„¶íªÈvœq06`Ïðz¢Ì s:âÍ2‹~3 x¥-kÈþĺ2ÔºÍ�ÿÿ^s%㎀¿ Ìúi·¶½Oø§/½Í´÷#D³ÞyÀ6„ÇÚÏÓ@¼óOðÏßrHà×…D³Ÿ�¹Ö¼W©ÜP<ï‚ØÉóbl“ŸyU´À²À²À²À²À+,°^a´UeY`Y`³Àì°ÅEîÎÛà©Ê9m)Û4|Æ9$s Þ %n™8“ Ïõ£'fÇgšv€=[Y}ÀÃÔÿ®–Vì,W{¦Ã+AxÎ.9Á?ÐxÿàÑÙƒþá¤kÜ_øãÀc_Û˜¶Å2ÒïA·«ò8ô¶—ø¶ï9H¿ÑIyð {N#7§‰w 1ìAP›0¦ü.;ÐþüçWdôæ �¿ñI‘Ù¨í³FÔY ÿès~„›Ç:Qö®àÛt»¶Çú.Ù7ïjÖjôÓŸÖ_){óÆ_¯�õŽ øYÓÐà rÍü¥>îÇÿEó @‚ï¢Ç~Áø$ã\|Û]õ³o„kðÀ/¥^ç’Ü*[x©X[Y›/­»ä—îÉëàžfcõåî-° üæç_€�Nö»÷rhùoë?[þP8åð]yAœAßb5à†'ÇÓ�TñIy‡þ‚F¦RꢓÝÁÍ,~çµ¶—Û)xHGÏl}:*vŸ 6&6£rðZ°ó¸›ïÀþë× *hý ¼ãI†'Ìkаtü;KÐ~ñøá¿§~ûSeÀ?t þ)TùG9Þ |T=2A#Ž�sáðpq˜qèq6ÁÍë– ïìõ"Óy?(§Ýé’;x¡O$�;wª}çZöú~ÊÀÅK°ÿA¶8üЩ,ùÔelã@ã…ósöEù ¨9Í�³äíô � Áó ¤­Êk{ÝAãñ›Qø%^•y~4.`2*‚3ÖüS†mí|££2ôXkU?ý�¡uLȬô“, uçy¤yáÌ=É e/É[Õ¡£È›€×m)�ÏTöËôg¦©çÚ¥úg¦yÝÏt®c_çê¨ÿŸ ç…ñÔõÅ¡€¯3ñ|ÍÅ^\‡J±™¯Os®¤N$S~ÇS¾à²À·X ¯«oѳê. üH ¬€iíÕÖ²À;²Àá—ž¬ÿ¾#¬@Œ€ñ q¼8øôñãoŸ>Þ‚•q�C€ªç÷/¸á8o‚#0Ž#iºÆaâ¹,4Á;¯ã”“Òtx°•K©7K/ÚÔ®õL >îô‹O�Ï/o? þek4è»õ%‹.4èqj>|W® ŸÐ˜9 à_ðŸƒþ‹D䔸¡ÇÒןÀ¦>ä¡õÇc.ÜF¾K’y6‡ÈÀWÂ~ÔpÎÁIðK6u€ÂW�>¿›æ�~”ÅvŠl謘ã~�šäCkÐÁ¡ÖJ å²¾€É¨pE‚ÝœÆüK×ÀS;ú¤/É´O‹½/ïAû~p^ÿ#ø×õõìÇþÕ|îþóš¾Þ=^ñ¼—‡¯zs€îý@ü—¤è ŽíxPù5zÔ,Ö²À°À¹µ6²,pGXw4«+Ë¿¢øÒ‹3Ç5�ýó@‚Ææ'¸óŸÌ@¤§øG¥p ѯºvêp‹7b´Vf™ð;Œ ¼à��w Oð;¦â0«-GwÀOД[°ÿáËßõú ZuæÀ?4�6ü›²Ilÿ¢sÀ“9pp_´ùìïpxÈŽéô�xnC�y¶¥¾ŽùÌ\��¶:TßA�Éc+ôY¶àD;+gãSµåÁlÈ,ߊú-àyîí±fÎd¯¹*õ “:Þìsïë¨Ë”Ž\_ió¤jëA×ôÓqÆIßr-üs½åÀÖÁ¿ÆkZבƒ•ç€ë3™ãèÉ÷ˆDuùI&6k8e¤qÍnäøL�0"¿ë¤|¦SgÁe�KÈZê2}Ýu¼Ë,|Yàž,°îi6V_–~u ÈÉâ]Vü~¸7œ,;Æ*û˜'8 ð'Kv< '±;¾vÒ° ΠÊ:ĉ´C ¿§Y×E&e?⥘v%GKîu¾CbLékœäð¬ÈcË�$ÐwÀO°_�§}�Cµ“ˆ^‡12¶ ÂãÀA{‚yÁúýP Á>Я _uýƒgÒ§ðÓ~娶°næÞýqç®t›å`wÐÖŠíZ*=¯*óJj2™ Ä\Vð^êø`ݶ´§T@9kk‚áR?z >ÓÓÚÚ×Cx�cýF/Õ ýÉõà¶ZÙèK”Ý d¼ôµ�Âo,£]®ËDWà\oÑËËË�d�uðH³½Æº,ð�,€£eÇJúÁów*p«c~ü¿îþRYúoàúá0Æ‘r' ÇqÓ$¢%;¡8Œå@¦½!rTBÁÃV߇L/›qè7JŒ©²Áóξ}8PQþ« ôŸú�…ý†¢}À¡€Êìk\èìn£úï€Eö°½�ØF©ä  ÃðkŽ üù¡@æ8xÊý7‚¬ å1¿jƒ>@{N�é�“˜úr ª,öòE÷1oФ"H äÂëADЇL1f:r Þ�XSé8k‡ÌÁSpʃ+Y¼ñRv+ôÚ¨úàÖž¶¬ºõIü´9úÙëÜÚèw–Ëzg,ÁirÜý?Àç®K?%ÀµÙô$8Ïõ‡:N;sJyø±!tÊ:/ü™—ú . ¼•¸²Ò²À½Z`Üë̬~- üèÝ…ö#�úâã=õ¤ð?qÇZA¡°‚Ã<à§pŽ+Q›ìàú(?€;gt–¡î%Þ\�¾§^d ƒoئ;ø[AÚWî�,�ÿ÷ÿ ê þ�…⮀ þ‹—€ÆÖYí$;jœØÞvîw{5·ÜíÏãû>(Ú>Áÿ”?ˆæÐâ³ ƒAƇ^æ—×|T<Ÿ£/�ý-$)hê"Ë8*;ðoO<ÀwUn§Æ(Vè±:¯ê ™3t±øYèëD8kÉü)‡DÎå/ì÷³õ@•F™x9H;êƒÛO½‚î[Ýãjý‚7t­ùÚ.^¸&óû”¤'cðŒû‡×SdÃKy燇LçC÷6 WZXXx ¬€G˜å5Æe�7¶NTwªPpœ| ÇÎO Æx À¿  q<  ’÷ÿÉ$\<;“rö8C‡kÇ ç™˜ö%zJ‘…<°ó®á”ÇñT}úæþÀë¤v<^ô‚“e7 Hóþÿ¸û¯ ÿïÊ _?´èÀ:ða€êZOéµmƒ ÎcÌÐ/‰†Àÿß ø þóT�€Ïš_:äàOñÿ }AÚAg‚ÿ<‰@`ày¢-TÂÁÍh2îoæSоÊc«@‚^ˆ.ô%Óž+ß·µkwîGÉ/pÇ`m�I…ûºþ€‘u¥mýzôõb¼·�Ú3�¾èÚý‘Üno‰|êß ìcM—r9ÀW¿ôëÚKðô¡œ 2|‡¢/Áx zÏá”%!“Û…:åÑþ‚Ë/±ë*k¬×›×[/[ø²À=Y`ÜÓl¬¾|w <úæü­ã?úÂ듆þž üý¸­„àó?ñ=S>gÜuœD`úëÀ®7tGÞ}¤Ý8… ·>ø�×qß¡ëõhg¦Å¢o¤Œœ Rb±ÓG—9qF-‚r;É-èw€\AîüìRpÿ—àÈ-ØŸƒ^p®>ؾ‚Ø•6(O};¹Ô[÷ì  uЯ@¾þæÕ@žRØAÉCs�a{ª­¡OsáPý𘇑Å'°8L}hã�ôº�ÇØÈSr�ïù—L—8m­ôS-0æâL/Ѽïï»ý ôü×AÀGè'óÈ¿ÿ-@ý&ð7T“‹Ê2¦ô¥;õô,4gÝYõÐó¯ôBswÏõ±%¹è8û~ŠA²¶«ê �%O@Æá¶ã@À;(ˆn‰8d°]‘—̘3diLrÈouFŸÒ~d"OµÊf�W[n¹µ M0ÂHŒSaJ®S¼àq† Ö ú¼ÄW ÿQÁýßÿðÿ%ÈSÎ*ó€dó>¨º8Ùã@íºïÀ†Ww˜gßwù:T_é;ù7µ‡-‡^•ù·~Ôë,n;a+EÔw%ã' ¢Ïu37Ôíu¦rÛQ´×J õÐ[å£MÑs¢¬§™îe ¿S °6ê ŽCñ‚³Ö\ÎúîõC¹è¬Q¯7 Ñ�5v0ܬ�@ê[GÚ.ˆ~óÕ¯Gù €jwÈ#“Ôñðî 2fzÜ!ø8î;ÿKؼ? ‚s½³/ùš/oÌ�xÖ/ àU|1ÙÖ%Ñ넟ý⢒U¸,°,°,ðÎ-°Þù¯á- ü Èa‹7ÚŸ�Ú™FPßÙ„|/ïôn§ùƒ2·qÀ· >óîíŠDnd•GÔ):ãpö‘¹�ˆ6ˆÍpŒqŠÇ_üÀ+çÑîøs÷Ÿà¿g8 HÐÌ~Š tÓ¶i/}ï}¢K½¿¡á¹�‚»ƒä ôdìê‡u£ŸÃ2‚qÊ À¤9 £\<îøÓGÿæ€Ôò„O ß: fžãàÓn™¾X¸„zÁ š/¼§#^/_øýXÀëHÝñZ¨5’;ûúµžü�$*³ŒhêD>8kk—²–Â}u] [™>äи{x‘MÃпHÂô¶Ãì ü°ç•qÀÜõ Þç|½c×dô 'uh;™{ù#ufù™™Ž_Ö¾J—––Þ‡ÖÀû˜Ç5Še�Ÿj©8Xt$N¡;…C«ì€XåGÐò×>ÐW¢íŽSºdF¿n­Óë6}s¿ãÔÂ'áºÚ}M›‚›;ëâÝGtÁL`Mðï;ÿ –9౿~ýÐ_ ymÀ�ƒé±.Ýé§ç£ÚM?€s_; ŽƒÈãÿOþwÁ¡‡vÈ*çŽ'¾ó‰¼êcOê9ðW¹ïç@Eþ‡ÕE>¯©Óû‡žäÁW=‹+oœmZ¢èÒ+ü‡^é~-À:Jb}ÍÃ#¸Öšb�9ø*GÞë�5…¬2tÖÑ3Xë 9'ÑY/�éƒ!º�¥Õ®ïú³ÆE�§�‰lá;=wJØÎÕ·à@2û×+�¿_ÎÞÃ!{%9O#y¯S}|8«Üß%’f7Oe=ÙÆ�Ñð.ßåÂï¼Vm¡ËËËa�uðÓüþyôå /_îïoĿΈvó€S‹§îã:ÁKê¸änN¥×òÑ‘ú)+8ú>•ÎÕIÙ¬+|WÝF1î¤K_jߥFÕŽ×eá=pà’5-8žîà_Ásþæ�»ÿ$èPã Ùv°�…â|ÓORÚK?ÒÖÇ<#ÐvÖ�•ÍÎmA:3ÁŽè‘`H|'ñüçî??Ά½< ÛRÛQ—`Jú¼MÐöFy•%eO¨–Ãëñ$©j£t!¿‚Ì�¾²®”Y{üYs°¶j}�@¿d™óÁžýÂ× ëŽµ„¬à¸Fà“ú:Û8®�ÿ‚ôŸڧ/~†~µ\U)€Ýb�\7\càÀ\ÇO²Aîö³ÿdc�âèÀ®Êè2.¶?vmÉeEÛæ­¬£—äŽôöº _XXx�XïqVט–~€â(_k —Íâä¼]«wµ}8ŠIÑ/eG_» õ"˜ú ïA³EõÁ¸’¬–.œ\›¢Ý;ésûT¬D½¤À£.ޱïØ+àå ‚ÿ¿9 ðç ž:ü·€î`PúÝ6}*¼C±œšUw4|�Oõ�ÐvúE ô�~õhç¨Ì¿`ó£àÿú«@‚"¦¿ÀôÍó$šD°†ÓÞ¡í½�ñYVè87žªò¬<üï×ÌO¦ÅóµÔZÊ!€ƒà©9Rhê³v]æ’’³ÜÓ:Ú(1JÇØ‡ +£ùüû€ø[&uܯõ1ì€)”¡¹ þ} ˜`ÈþÆdÊràkûËØîý7|é!eþ6JmK¾§¹¼—�GþšÜ\oÑËËËïÁëà=ÌâÃ3g`™äÇ[ ŽT+á8ÔvŠqÐpvI�õúÏèéμ´Õ ýë}³LïKt¤¾»9é‚W½elè4ç–ä@¸ ei×%ûÊR×xÑ¿8Çþ Ñ<@àÿŸp Ìþ�Cpø¯þ¤'޶!´ô�“Gÿ OÛ"‡žÔûNfŒØÒxAãØCenKøÿgïL´Çun]sŸûþ�z‡ÿt ÝwÛØ,ˆ‘'•ªØ¹�‘ Q2@I6�D€àÿ´æ3'ÿÿ(9rÕœ|§Tºø%Å �ÚúÉ ñ}§P4ýçi æg½4–�X ì* ¿pìSÀ“ü’øSµÁä ÖŠ”S¶<ñB#Ï:´M:¨5JÉšrÿ]Vc•ôûî6Äc<\ }is8Y¿­Ïø“k• <Î{þþ�ë@® ¾ˆæ_’üúšRÇß羚ÙW@x”|ï˜h‘7Ö=j·QZÄòÀòÀòÀ�z`mÜé�}«Ózë_êW3‚Ú äp œ ë$gývݬgx»¥‚çK‚¾¡“€»ÉŒÓökÌ<úbzEŽiw '&¾ÉüH^� æÝÿê¿Þé÷ûÿÀºóŸÄß��€ªþë? *�vð3ÞôßéÓè~~&Á 'A>m‚cÛ‚I˜b“vî§üÉÆ†Ÿpô¦Äý›ÒeÛG’wèuT¶œ”INIÖûµ Ðn•ûð@Ž¥ W@£9�½à‘`gXú´aͺÔç%¼iíe�¡wZu`¨�(¯ÇJêû„7µÄßÜýglª^çàU®æú�=Æ·ø7Op�`–œû\øW~€M‚þ›{øÝE°oìágüÇW3}jü¼ÏØš[§¯™ÿ§é_ÇÑüþô<Žú{l~×>þ£y-þòÀ5z`m\ãQYczàÞ#NyìK"z þ~p,ö¾” ö*Œó L÷@—`N’$wÝ9!ŒÌžúA_’3¤OÆŒ=ä”è\ŠKÏÉP•@—GÝ�P”mð²> X.™×ÞœýkÿIê•ðûoý?éîþgîðƒ«ö¿ùãu|×þŽ»õˆß)öÁÐÀ^2‡ð Ã Ä–ç�_¨Ú'‚ø;Õwau'–Çýy/ÛwþunóKÿN¤ äıŽÝÞ§º4ø*oĵ|Þ w©õᄟd›ï Õñ @§ë¼Ïy@û¬«lpmÈyмãýzG;éû¯¼°!æs AÚŽñ›¸ý|“ó5›ñ5×§‘üË$ý®âÙÌô±ÂŸUýýÿª$Ùïß5+y·kÖÇòÀòÀòÀEX¹i)ýiô;þé›/ø½/ù=^Ú,øg<À1 ( L¯„k§púÄ�ÞTµIò?`é@G×ÁàÉÄåŸ‹Ž”Û$’çt´5ãôá¶EðfÒã¨ø¥th©Ì/¿ÎÈ@6’ì{ žðµIà×HþkÀ› ê$‰þdÞ`jh`/óØ3/Ú1çÐ@ÛÕ|sçŸs˜Ÿ¤gÔJþÇè¨&ñOòHÁF‚Ÿ˜úKßb¯òV=ÀùË9V�ä1É~ðP¾òù*Èâ<Éúõæü�ë a�ëEá´uAŸqÔ›¨q1–l0î\3bâÖaÎIü˹‹ÿìCÁøšwÿ?kî~@|? ø�ë~’ܾǟU¹VòýÒ5ÙБÁJéÇ ßaOi¿t—––nÑkà�ÚóòÀz€@ªaš`W\JC`Uß½–ŽiAëJ/�dlBõ¥�œÄ3Yñ±¹Ù8µ:}ÎmÕÎVá÷Òiáèô꾚>­�üË^6òîÿ¸óŸ§ê‘ÿ<úô›Ì�²…ÿ{€¾3úà�nÃ4êù6æf^âw:8›äŸM€JЏûÏk<þŸWxü¿¿À�WÙïÉÿØ(gXóÃ_ðN= ãïsj†ZG>—I"[íOø‘|¹e¬ýZKƒÆe\Tr½ „Ÿse\çJ× „û.­÷¼�þ½ ÖÆìijè�ÛÐmä:�Mf×ö<àM?Ñy€ ~ Ðþ.Î5[´M‚ÿÛo�/ôÉ%¶h˜ï¬Ø}²±Õ`y`y`yàF<°6nä@­a.Ü’HeÌÎ�=Љ~yz®ÒCFðç€[ðÉ…À:íÀ)�/¤c ·£M§c¾ŠGU¼ÌÍñ -/ÜsRßls÷^0wóóÀØÈ+ý7Ðomý€èî;ûV}Ï�¹–76ÇBìÁOɸ;½7·ð€Þ�H€üÃgJøýó+Òó&€Ú��è;BËf’ ÅãnÚ’õñf<ÀZ` µ†�lxc€õ¢6¬¤T|æ¤�s‚r�|†¶Ë€úçéÎ÷Yp< Scgü£?»ýÎIÎÙèð˜ëÕlýC€ù�@_§ëÉuÒÉ¿ uù+ {ÿŽé¸L]T|¼4éãœü Ùb/,,ÜŒÖÀͪ5Ðå�ÛðÀŒ= 5 ÞYÂ�¤ '�ÍSá[¯ôŸ<{‚lÙš/²‚H†fdVÖÇD[O¼mJ?òa/v :ùÏ|+™'¡Ÿ“ÿq×?ïþ³ ÀjÛëx@öóc›“høTJðNŸ$??ç9@§¢|@ùÅwA•ð�쌿=SÒÿž�ÕñC€J�ü#€‚~@úÙð&€lüg€äŠ~(�3náú¸°T}nV’m¾ðÜyL"î$]b yíÓ>xƒ¹väüÈyìÒ m×ýúI—Wú÷˜á©ßÞÿÉØmâjßw/È5ÈÉÁÜý›øR•ïþ€v$㽊%×�6’¤?'a§M//a³Û[øòÀòÀòÀ5{`m\óÑyãcóÝ“G|�àµ%þCH•îfzð|üú®µp'«À†#OM»'à î´»=<õã@¼ÁÍX£“;-¼‡Ž=¡°ÍÖfèѾŠçTså½}øñ �ô×;þ›§ú²Ã…Ûm´EÒOð@÷->%8�x¢NŸcüÅ„NEßzã!Ë+yàCÿ<þŸ'j`ïñ6œ8LÐã)_W£äXÆBîÎû¹¶;Éþ4OkŽâµ^ëÈtíÖT/¢Ý6|`ãq-`Ýûõ`[^à:“:®;ý÷no Çc¹.¹öñõ«êùÌš÷ø ñèZˆoò½àMéz@ò$úŠí6sBÿ¨ÐÇ\ºÍ=ù¬¿èå�å�å�[öÀڸ壷Æ~w¸öÀã±ñõ Ý™†—‘|ú¤€œúYõ/%Š_õî;Á"ï‚R¹3D08î¶ín} ½Î¯v}<³ÊIM�¡úsI_3] ÑŠ?ªEIŽA‚à¸À¾ Ð7òŽ¿ïðkS`üâ¿ÌTçn’ûég¦ÃR2–ö¹Ì8tj‚{hpʰ�ï*ù! "!âÇÑÆ�ÿ ÷ÝÉø@jÞýwò¯ö@÷(ûÐ>>Ø_åî<àãûȬ6:¬ÖPkˆê¤^è.GOÅúéypÁ¬,óJ?b®/æsMPõù¯pìz½Ó.UãHòï1†ßa:¸ØýÙ 0ïùûýùÌwþå‡ü  R|Y•ëcßð±�’ky¾gr-¾Ä…iݧ´M›[„�Ísö˵ÍñÖÇmþ\ãyÛXoûø¯Ù/üðE�`<_Ü$ÿIü?+áÿ¢»ÁÿùòåÝÿúë¯wÿç?Nßë.Ð;ÕUó×P¸3ÿ¥ŠÆAï ½CìG–¾fºóƒ?’h¸ªÿ$ë—$õ´A¿Ãa+6'ýè…Œ-5s!ÄNß!8G!¼Ú‡ç Z~s2¯è÷üÁçZzNž„cǼÑbÿ,9f?9 {+Кð9ªu”„;‰ÿHú%ó:Œ.ð±R:\·Ž´Y—‘m Ú:i-9²\÷‚3ã]Gø½•î£à@ �k•Í6’üód×#op ¸.Ve“4èøØŠ÷"{¤ä»¨«å» r¯�»î—––îÁkàŽâšÃòÀ•zàA0¥Àœ÷Â}×_µ €¯z¿�»Àït·ûժߨâ9Q%à£þJÁþ‘�.ë8ýíÑ¿0Žž0·^ v;í¹—No÷\üÈvúÁéL1x ý&ñGN ß‹õä/ßÁ¯$­'ýlxc t�‘¸EçÁF@'(Ƕ��ãÈqieK5ÁBïʬ{­`ÿ<°{§=èk¦ãMž„ð±õy‡àNþ«ó„züÐé÷Î ç*sëÜÉ¿ÎÝ<À«_å~ׄkçu€ë!Oƒ!gSØÇ¼tm¿h|ûXɱ�ÞÜ&Éä .,,Ü£ÖÀ=Õ5§å�+ð�U¦ Çu÷ÿ‹îþÿUO|ÓãÿþÁ7 êwUÃ�‚<ðâ…`Q�£q %¼ï4:¿Ph�Ú“ñswÿ£G;ðc«ÃèÌ¼Ø ì}‚SðĹj¥Òéöá'1I¼|•Äþ:ù—^Úxã tõÃ:²mwRÇlÆ¡W¹pþÕúðùÊ&@m"ù5“¾)PºvJÇ/ôR]ö“tìi]rPƹ ¾ñ‚Œ‘k_ªÇ™¾­M€Üý'©gs× Fù~À§ýÎ?$ÿÿTòÏ“È96løº!˜ï\Ú üsåhC wuüœ­%[XX¸¬ €[9RkœË7â�ˆ%øJýà=þÿ]wú©~\O|WOò¯�÷;ò~ ‚Ã_vÞ�Î;ÂéÙ '˜SM2LBnH Ût¢ÛáŒC?VÓ}¤¦oÚX¤çÚ·a"£M/á˜�;ý:ž»¯”μ à ^F±EP>áø�cÑñ“úú¼Wäüªz��ðWÍ“†Mg¬•î—Ø‚×ñЬ«*Á²Ö#‡ÞTÙ³NA®{©ô5dÂ]cðÆ!þª™ù܇Çõ#Õ¯ÈÇlˆþ­šÄ?0É?›ãá|Ÿ`Ïß+àò_¾cÄÞø{%ßM³,úGòYÑËËË·è�µp‹Gm�yyàÊ=@ð”@Š¡&˜â²çW¾ë 'ÿºÃÃ@’BÿÝ�ø´9/:uà/й“W|¢J kXxñ$é�ÑépÆ¡/­IügH{Ö‚ÙL9Yúêb9Ç¿ªïü O÷kZ �·Ù�¥a'v9NjËñÂöf t¸odMx–¬AÖŽh¯jߨx†¶¿X²î¹.±MƒË®­¶ê5ŒŽx”Ó§Ñ»úàXenà ׌¼ÿïßÍuÈ×:ù1É?×~ÿ$ÿ|Ÿlªü:ׂ½ï™Þ-]·+丄‡ÞÌ‹lÁå�å�å�[õÀÚ¸Õ#·Æ½áºâ§¾t®óïlô§ØàšÍùŸ¤ß°|y.i�L]\TÖuå"7-¥å�å�õÀڸѷ†}›xKAÅm�3oª6zü7ŽÂ9©èÅ—>Æñ�ØŒulLÇÁDzxÖíòÑð‰Hëÿ‰-oB�cr+eœ;mÀæqŒ¨º~Œ$¿ð‘øCGï7SÖܨê#‰lÎ¥!kã¿ø:ÖÚÜÊú£rñ:¯»¿ÀùÝž `ƒ`Nþ¹>SÙàüÍ5<þï%üÎ[øC<æ§Ù¯-¼.ç±ñ?6ºkŸßcã_òå�§x`m<Å[Kwy`yà"ðE¼ûe*þ&0žƒó™¦·=ÞE£¸@ Û=XìtÇ'SÌ�’¹`#¼zfÜ’í%3' õÙÇk¦7Ê/Cd¼±6Ó��ŒyE¼×ô@Ž;×Åß9¾§ÖÞì‘Oüˆ¯ôü‚èOl©M*¾ÚØÆ<|"8|S¸ƒ>d;åQ¿ï´Y¬Ë=°ïõÖžcôÄb›½]Ã}<µ^rÇ?pl̉?m{}ÊXæ5ÕhfEå‰&’V’QãЪ¬É@ð§{á)½-]Ž/× _3äó·Å#é‡îõ‡®%l¤�P—øÿö �È‘ï~EáHûU–ö<ð«kkÏæâ-ü)¬ €?åéÕÏòÀñÀÑ—âƒ@J�¡•+AÖ^ µÇ{i?ÒG î7Ifúj:Œ—âq«Ý Ëô&1ª9„ýMŸ¶øzcLmðÌ¥ÉA”(8ØÆ/Üõ×Àm�üóØÿGù‰¿Ú‚;ù—^’dø ~%;Òóû¿øQôîñQ›^ìkéû) âûÝ5Ö.|×ûRù—cs®œ‘?°Ýuƒ$á'Ùwâ/tÃ}Œ¡S�Æ…üÒºS¡…«Ú²¶Bg#€5��Ömzè¸ ½ámvdîLü¡sÔ{ÚîÀ¾06ú&m �s=êï|VO®Oܽ¦²v“üûîÓz�‘·ûÁ±§æZAB_r¾&ù÷:~~}]Ø( �ý.]6ÇuB8çù8¿K/ôƒïÉÏôWYXX¸g¬ €{>ºknËWà�|�`/ãê�xjäÒw’Ë#¼�Çs!ÏwÓZuNtfz˜jíÌ›é¡ø{Æš²7î. ž@>0=ÐA·òlpü“ ñ…CòŸßø¨ ~ëa~ 'ÿ¬‰òÇ9>M6Æ&í)Nþ…›‚Ï}bc•]œ¼·mxå»™·¡i>ùØò‰·í¥ÚD§AoþTr?6�×À€áµ¶»}<`0úù(<É!«‡um¨¾¼T ˆ>p•“XT®¹£�„ãË&Êf tÐó5FוøÓ°%þ\#r�@6ãð.-i‹~o¿Ó—Ú[zËËË׿�µpmGd�gyàŽ<Ð1O«‚°wüÕ§Îøðw¼ Ìã-Ú8A¡*?FI€k¢æ{’˜sú M#ÿ4º×÷�qyŽ‚ó2Oæ’ �ý¸>¾àýÍŸ„ˆÀžÉ¿û/}Ëh/}úÄŽ Ø·ð(ÌÁ%Ëx�·R}ôä¬Ã²mý²ßÛ,ü¡/gß:oŽzŒæR6vŠ×ÌüD‘©»E[¡%ûÙ°n㻿´¦t<¼#ÈÚ˜KãaÕU6�ø‹îwÿçMÆÔF2[~S4žåZ1û×ÿ€`îþ“üƒs ðµ_R³(�±ñWÇ*ç} L=ZÐí%›á¯M€î�·…ï­£=ÞÛòÊší­z`mÜê‘[ã^¸rÌ_Œ  <ìd5ÜAõkÏ‹ñ´`Œ^“e¬ÀÜ Ü´“îQØã=hø|Æî8Ê\æ·“ 9™ƒŸ:op÷ßI¯ ÇиæÀ¿äÆ7î~@Éÿ'~ðÓ§Ÿïÿ«�7dËý‹¶Ewÿg õ1 rXäóøžqd�uvnއöî\¿2Í]Æ ß$ü�ïó[âí–®t�j6€èìÑð)ÝÆ‰sâ ÔÚIÁzj¿Óï¸TŸcÝ7o–dSÀÿ�.Ðï\½¡Ò�~Í\ð·hûœÒ|>ŽßÌ+š^ÏØímÁŸ[°ýŠ¥¼ð¤Ìm:Ý÷Á×à�X§û£ëd„]ú\í 6Ð?mc먟ðŸÛº;uS×3¹fûJîõöœ>ï¥�ü’µÃµ¿PásÇßI?t«¼€|<]$œëˆ$Tðƒ6³^}�EW%‰z ™g>УäXuú1isÆüYQú:«ôŠÂ5¿Wtþêzyà…=°6^Ø¡ËÜòÀòÀÖ #°!0V‰½w’ÿGm(sÛôÁ8³ `ÅÒõø[;ô±ØïÈ�;ÙoúN À§JòŸ¤ßx—ã¯ò™Lý,⥀…b<àV`mŒÀˆ�O`d(=R“ûÄN•�µ±Ev pŒ_ƒ5^óüzÈhÓç-|Èz»I¿ô¾ Géº0¡©Z»PëȲȣßá0>!è<·´50L/Éà̇þ…‡¹{Dƺ©Éá'xT®5ý:Ã&À7ùš ¾œ˜ã{UÎmž"ñ÷ï†÷wCÁ$fáÉ„–ÕñQ±íI§óÀc3vÂÃö*ËËË·â�µp+Gj�syàF<�‰áÎ8A=Ó({3¼´›·¤Ç:‰ŸÆš+äz’k�Ÿ�¿½ ~,”Ây‹ ’ÿTÎ뽚s>‰:p.èô�Îïíc³Ë{û…ß·rüû,áõõÀ ޔއ·àòÀk{`m¼öXý/¼ä “0 <Éÿæ)%‹lô§üj€x¹û$ø#@$÷ûŸB†t(¼`Q_€2?úFGšr”Î�¼`x�pÛ“>rpàQÒ] ¥ÓÁißF7lòzüôýÙ@þCsZ·pÏY8pó@mô§¼1 ãŠÇqã/Ù…7—ÎaL�¶.�}Ú GŽÝ$ù¦g£;t·m¼l&) ÛêýíØ¹sè%¾6_s‰<|tž¹´�†Çưße Çe(Òu`A³&j] <¼@ôöêlÿ¹4Ç6eÆç1—ël̳·‰�7ÀÃó9 �š�FÞùÏãÿ<àk” I?þ²)À÷šót®IÌr‡Î€Â‡î²#~Ú-¸<°<°6¥c;…�¶W†x¼mL¡�+Ê€/4ÐmKŽªK£c'¢ÑFÓò=>z©¬‹¹j=àuÛÁ�à¦ó¢¯—#|§™¯GÕçÉ«{J‹°–|þ„QÐ×á¾ÎÈÿù €ïÂý í„Ó–d??È&ÿ<âëøAMr.±�,º54Û‡ï³àòÀòÀòÀ­x`mÜÊ‘Zã\¸1$PêÆ—Úïþswø£¸Ý'Ô†�.VÀlä‰g{Â_¼¤¯=ÃÈTz¯'~ä�$7à½ö ÷G?2Òå¹ýÌ“ÊF}JÚa‹ÒéS~âuYo;îÌIaNþ=7æ—š$Ÿä?�ÿ÷$¹‹®`|ì*c«®L”îæ®¿ì™¯52äÍfx?­l1úÎZ¶.ãc½5»ó˜·^‡š}fZc&Yï0r�¶ôƼ˜3¥àF÷$²�Ñ5�öCXÈ̇¦Î‰?t’ÿÀZ?ÖO;ÌÎ6ç>ŸK×1÷±Ÿmìôé'f½Ex ‰bermrbTMòŸ'¸Nåοûï§ô’s•ëñ^Usô(¾ncéœx�ñ»^5]`y`y`yà¦<°6nêp­Á.Üž�%hî½àGÿÜç7¸ëŸ;ÿ�<àŸàNr‚·$³¿Ý3‡$UÀ¼GÞdIDÜ¢ÉP�×k’û‘Cwœ °Û .ö†ßuÁ3n`hðð±CéÝþøÿf sVÇSlî¤ò$€_?O à'K:Œ ðV×^aLG²Ìe³PúN|u,£³gÛãB‡ñÒ^xÚ�w×Þ+2ûqÌ0à™ÏüÀã{`á{<·�nŒ=•>×®'öµŽFòºë´ñfÜ»cLŸ�AßQ:zžëPÞ_‹Gë³5{Óhó¶×!×_gIþ7?(É?•ð†¤ É’}~0çlx@JÎãàÀ|/ñ:¿ë϶ºôV¹od�íÍr­…=¯,Þµy`m\ÛYãyU¼õ ÷oŸ¿‚gbú¡²À£þ$ŠIþ�UyBÀxô :¨“�9q}‰…óRÁ:vØÚf N j $WvIªh¾ßU�‹þ^¼Ð†j‹½Ì½Ãl `>È)�¦}*²àÀÆžä¯ãŒÁ�åÖøcê7ÆK‚ÿùó»ºÓÏ_þ�M ÿ*ü›êwéy®5_úŠ¿2†=È»^3úÈÂë8²MÉñP¿.�‡^5ö"cÌÒa#s™Û û %ã1¬1 ã͸À5>Ó…{îŒ�¦7ðÌ'²çÒé#íCcWëâ°f\Ñ ÝÇs„÷¾.Å9¦ÓqMÓ\‹ìC1IDÑe“¼CtINñãsWÅo¿>gb¯ñ#×,ªïþ æ¿ ç:–Êf0O°à»ÿ‚>E{£®xRýy®ŠG‰/iÓiðð,ÐGt»,w‡ÙpÒ_ÐO (Ð4üq×™B€'C'hÎoþH XÝ$ˆï#ðøƒ$‹ñ£KÈIe.$þÜÑâW|á' 46CH’¿5ù(Òwß‚Ëó°ß´ÝÌú¥½à(9ÇǪÁÙ ÑÿÆØnžhû$ü?Zòß7þG:Ô¿U¿Ö±ë>誌©ÆŠÎ^é²=<< ¥ï–É—Ì[ÃÎsBÑdÑ)C'™x½�áüYÃ0ì4s(Ÿ»oà çdV¬�è…7Óð;¯ã³Œõ�œ¼CðÔè¥ß_…ó”ŽO<´¨$©x/ɪP¿‡NbŠÜO+.`×1æF;J¢À÷í~Æ·¾³/7ø£cáïAüF庆ý€ø¼2�M€$þÙ€±MÉ9ד@ãïŽËÔ ÁçãÝ. oÖEg•å�å�å�k÷ÀÚ¸ö#´Æ·ãŠÍà 2Ï�žhÏ�6à{°óN§ÏèŸãE'°Û‚GÕzpíxx�ÑM{蔎‡÷ä˜ÏÞíœo$«YC>gDöäßxÙAîk˜t²V2rèUN~õƨ|æ»ÿøL¸ý&¼'ÿ~úH²y€ï É8/“¬Ç¿¡} $§tÿGý=Øõ‘Ófæíµ[¼å�å�å�kðÀÚ¸†£°Æ° @ÍŒ�0ô½|िàgAÿ<2�_\vúÏX°C-Í“~}züÂ;DZÎãʯ÷'ù‡Î IúIü©ô85æl@wœ ‚¯ª¾û®v~u |‘±3&ðÇŠ})¥Y~x]'ø»øSc ¸-Ç _@ 7„F�‚nk“àÀ“Öøt«²sØ~8¦Ñú©ÑX¡÷ÁÚ¢„w3ç'C[×G›SX�òÒfj=¸=2ðÐÁ;�N*�w<ƒ�÷«…ãœã.èóVËldpLý#¥Õ>ÏF@±|MÛ\ËÔ_`¤éæf!>£âW’{¿ï/Ÿág|ä;ÿ‚ü+Àgñ¼yÔw -×T_ Å㘸Š\èÉ^ñB#Ÿ‹û�™�îmÓmͺ<°<°<ðêX¯~Ö–îÛF›@IӅ窀ž /�Ÿ_PbèMdÒóF@éC'Ñ%tm¼‡!Ü ùVc¤/MÄGߢ:naû`¬½ÄFæK°J’íÀ• Vóÿ,É3‰ö …{ Æ‚-’|ú4s7ü¨ô±G·ãŒƒd??Ö×À/c"‰wâ/èä¿ ¾“þ‚àƒ®99éÎܬ/èW4Žø%ãßz/܇�ñ§¤Mx{42øÑqÛ+Ž åˆ–ÈíÑk:^ãáņ Ñàdsô=º){Q½f^è—Íð6tø º c Àoxx»°ô-›?b£óg^hà®õÀ9a9:¡Óv†½ß§à9†´éølC2üÊq:ù�<�Çrî>‹?'ÿ¨Ò–ë×>®ež›ø ÚÀë?ä:Æ&@®¡¾>JFÐJý¬êß#‘OÑçxŒÇþ9Tñ C âcx”ø:¸õ½ÎëøÜæÈNo³ðå�å�å�kðÀÚ¸†£°Æ°<ðF<@À”JL¢©hlÌž €‘üKÖƒe[Âcoîp¹µ†^™Ãrè½J· X=ÍqæÅ–“ ™=wÙýt€ ?‰1Oä ’eð�?~œ6@XyzBmñ'p<] ü¨ GóØÃ£ãrUŸÞÐãúÞô@�/wò¹›ï*}xNú…8ãÐTõØ_` ?WÔÓ sëíãïð"ïüàî©’�øÄA}ÙÄ×ðGb :mt N¨>ÁÒßÄVÖ~ú²� >bUã5.ÓmŒiÈÃ/8Æ =ñ<„™ÚB}ÌtøÀÇd‘�ªÖˆäÀ#½ÞoÇÓGç]‚Ÿ»ž “]|J²Iá3ôHêunî–“�½æõAz¼þC{óv½¦ý¨éf3“óÈþ–¯áá£ÏTáüf O�üÏ\ƒS¹.æ<“ê8w±•ó¸ãèÌå)ÇfmÌÞ[ôòÀòÀ5z`m\ãQYcZ¸3ô Ü•˜y*@#ð£ô'¦SGÚÜI×Áaƒ´ÿ%ý`»÷›¾Â˸X­Kà™R㎠¶%)A¬~&܉~Cùɉ² O¸’µsâ/È;°à}¬˜;*cÌRH Ç${lH¸*¡wò_?èç;öÚú)€z—ßïõ/ceìà�á³¹@ŸØ<¶ú£ÔˆÌ©·ë¼à­‰Qû¬»RêkØÇ±t܇Æî"žõªM@t€?ŠqÚíôe… >ºÝØ4Ä—5&ÃF3ö´s¥ç9Á8¢»Ì ÛGÚ4Ö@�dðçªõ²Iú¡£Yh e¦Ã³ð‘�#ßßk™JÒé¤Tz>–¢7>/}€ÏYìièróú“_³Ÿ5³ÊÉø'pLË?¾>Š&ù§~Qõ‚þ AŽÍƒ:ñEÚß=Qï8ò¹ ¿¤ä8>fï[Kgy`y`yàwz`müNï.ÛËoØ›„I~´‚9ß)Kà®Ä‘ 9�±«x~ô_´aµA‡P9IÔï›m'øóG�Å~ѧñi¬7"ºl�DA|‡–Ò5Ô¼¹ÓO‚�ä`0/T˜¥Û ï$9þŒ?sìF‹š‡íe�ϺÂ] f Ì5ë^i�c2ì?‚Ø^ú“î ;\•ó˛ЗÀ=�SËŸ6BÏ0}ìñk<Ç%¸ÖÔfS›i¼÷sÔw×yžs7P6rs }·ÛŒYçi çj/¦Ð‘-l�0öµÐuߎâ¹à$ÿ\ç($þ¾û/Ÿ~—ß�QiãWjsÔ>m¾ ͱH‚¤„gâ‚�ùxî5I{²Å[XXxm¬ €×>«ÿ?ê�K¾¸ÿè€^¸³kŸãsÀK@ N• Áwÿ‘÷ª -tÜý¢¥úè6wïwà™ƒ”3æ�,ó>…œ§„m$¾Ò‡Ïœ}§\I¿·WbíWI¸±áÄ‚ä‚×€ªÀ÷¢I(”³1À{È|�UÇxDƒ§ µ�´É×±à/ yÀlJ0A'ÿ5¦¿©<À†I>I6LË»›ùÓ©ÊàINÉM¼ÀG·—¾bv–…F<ÐúŒ¿Æ˜ö�ïãYsxô‹›´Ëš¸�ýüÈX~r~úŠó'sÉ:BÏß³‡�ØŽÍ—––®ÅkàZŽÄÇòÀz`/°ÚL3Átc:p�àÙᾂ4‚nó B»¶¶/�ºoÆR†ÇØàiìƒfM'8Ð’’ƒ' EÞ+‰¤“n² ðQ$õÌݿΟğ¤¿mðDUð¡Õ.°odìŒ#8cqp­qx#@I ‰p'ÿ¿üßk6�[7í¹S— €Ì=�¾)3 Ï~›dá!ÿ•;{ý»»K „p'Õš'pTÑÞ€=AË êd‘µ‹Ý-œ>"oìŒÙã@t2¾Œ£xî‹þBŸƒ]vG6—ôqÄG>WùÎ<à\gÝØ¤ŸŽÏýþ*Û t?&Âñ¿=[8:$~$«åq7%ùç·Þ zC{jŸ4×ÐнݽâYãø$8sÅk¹–¹ëï�Fál|*ßãc|èëP•c’„üÊÌ(èœ+{Çc¶KûðÎÙZ²å�å�å�?í�µð§=¾ú[x먷‡Ws 7\D¦ÚðM™é�ðùDúqߘaeŽàoơӵȫ‰é>r㬥$™ áæñy~‘ 'ÿÑŸ»ÿ㮿pÿTdlðoÜeô†BáØŽ-�U6gˆNîÚú.›ú�Ÿð€ôÙøZ}ÒfÜ­+žäš ón,£ñ[ä¡ç6�?Û¸”Ž�ô5ÚiÌ.À�Ÿün‚ž—æn|5§lðây¡Çº…·ݺ}ô5NÛ�~ʶéÈá�tpÊì²s8²”Ø Ýáž U>Û<0ÓÑ Œ]蔎‡w ìþD¦áa»óC6ŽGBsÑÀ‘æËŽùSâ�‰¹ØÎ4¯Øžuï�Æg G=>Í&€_�oý;#’ó]®u®Â9×zE'‰ù ‘]Rh7ŽÓsíͶ½<°<°<ð;=°6~§w—íå�åÆ{ÁÒÆ5=¨n¹^]Yê¤\82—�`,¢§ÂaS Ó7ýj¬á÷ÀÜíJÖûì›ðÑKèìÕ »!Þ¹ç÷’°ÓŽ„„Çüÿýþýtç_‰½Ÿ|'ž1V[¿ ]CìkÌ®Â}G S•±ä޽ï¬ÉN6$üN¿ì÷;ÿà¾û_�'°áy’|&ñ'Bf? Î%|t(GôIz²ÕõÂì}9ˆ·aq5~J’h +ó/èLˆ,mܲÚb£è‹k[Î6ÓWA¯‘=œvð# ½;œÒÛíÑVj³~Úd ʇc3 x—Ïxº�ÿ§ }õã�¾ÃÓ8|�Ÿãü ñ/ï°ÛíªŽk™hÿ–‡lð[(œ«)ý:Þ=Ã~®€çHgS˜Mþ 0 Èñ'þãúé' „�ë ~æ8 RƒJÕå­ù<ó^py`yàmx`m¼�ã|w³Üûrž¿ÀïnÒw2!‚9x Â‚Ýæ�Š<5�Ýà—Ü4øK•“ÍÑ¿ŠÇSüôÇz3È\JÏH·a†>Šw²æ :™êW¶œt+Ù÷œQþ’Ï›•ô³à»ÿ$Nlh#€ÇŒ „±• —Wè— Øcn°óh3Ùðªoÿ ìçwúÝ~€'(™O‡æëã¤õ‡¿D¾GGæÆõ�Þ¿ë\Š�q0�š‹¡pæb_C f 8›)¿añ{Âa[¬/dÊVÒÞöX;ôãÈc³ÃÂ=¾†»�NÇÎ9:‘Ïú¡;œu‘ñà§âÏsõÈFïû)8¾îe¦» œþûñÉxÂC§á±îóO"’PxœË9f4IáX�*ÛNþu¾²©äsS¼¬›´¹gh_i‚ñcæ �O“øûî¿è@6x_âs~€Ýüpü(*zå×#ßÂï%×øðfyø±Ûad .,,\‹ÖÀµ‰5Žå�;ö@‚¡LŸ™+œK`ŽÁ Ú$ NmÂxè~e§o< ^’ö^Óo�²�-#Εà– ùÿPÉ?íñ™ï0‹ï;þl�ø úÎ?¸dïy2@ºIþóƒXNþÅÇNž(`LIüé7óbL¨¥›�€ÜùnÑy€ÿãIÅ¥ŸÌSæLÖ}Q€è…î¼àÀ®»½Í¬ýb¥æÃœ\5G|LŸ'. ÇñAO%ãœqû†µ�^A'†nU‘¹qét)÷DŸ2áî£ø<< ¥µ?1ê3ü®³QÑuºl�/üàø¼ü¹�Ñ™aïç¥ñvMÙ5ÍX¢NÉñ ]šŠ&Õ8úJðÃ#I îk‰hü��ƒ£µ{-ñ�Úɼh|FíÉ¿7tLð‰¾ïü g#€vØHÒì~�i©>(iÇj¯t»{òÅ[XX¸¬ €k8 k ¿ì�£/ã_6¼ ¼˜|Œ*‹QÅ-¨!•ô `opxU¬ßèðîØôF€ 'H7dìTìc 2ÞÌ)v€áMƒs`*0¯ðãVú ·!Ùäο+wù“ø'iÏŸ(Úɨì8ùç®?=úVIÒì‰?ÒðXKŸ ÿ�P6ú$ýy ?ˆÞ©'uI‡*À‡f¾á Ý”Èaïº{m÷x£O%4?û­A'ÛšcîøJº?�î×(}¨ÝHþé#ke(">ë)v[’ClP€GxäžÃgÙ ¯—ô^§36 üèqvÞé®ßíÄöSáì㙎=úB6CäGÚN4ÇÂI`lIÏGF� >ÍÑ�ûcN•sÑç£øNü¥ë¤[’¥Vkqu^S…ŽŸ²0opÝã:FòÏ&4mìËòi®ÓG<©»D/ô9ˆ­”´ƒ·‡GoÁå�å�å�×ôÀÚxMﯾ_ÜùÂ}qÃWbðnæ§Àv$?å[Ï ¾he*�³» ÿ$ü³*�•AAîî —äüÑÃ$ýK c°Méo�B3^W�Éc¢Gs?Ò ¯� x‡$‘$ô·'âÁO¿BNÉHAdø¥Ç~ Vc ü ÍäÌaÆÙdð¿¨ÿ~ç?<âO’?ªèñ¤@á±½=ŸÖ?ô¹‚�ø¦ëÍ|hJ× ï$y§æaßbOø¨š÷Àg>²’»§ùøtßÇ‹ŠÇ¬¶ô“Ö ÆÖ寣<Â1Øe£ƒê+²™D‡x®}—�ÏU¾sâœeØOûÀôù' }r<ÓwŽí™Æåc[t?~ã‘tép^ú:SO0�¾&82^sØQí2tçâëÐ̼#šù÷MžàÎÿWUßõìO°‘êM|7U|…½ÎïþëǬóÕÄm€)]žv�½ÈBÏp¯Í¬sŽþÕö��ï\ßBöØü®}üÂG«�å�K=°6.õÔÒ{ì]ð÷x¯2¸Õé³=àÀ–Ö ÂŒ)@ƒÿAI€ßcü¬„ô‹ê_ºþýÞ7w¯@Ž@Ú žEÿjIÒ;Œ'<ãC¥B@í‰ ã¨ê€$´Ô�¬‰vàiƒIØ–Ë®7Ù ÜÔ¾ç)ìªð‰ž­_�W6UmÙ<¡òïŒ<‰ÿ yºàû—/ï¾Ë×ü!ÿBÀ†›y"€€›ÀÛ¿ô¯¾²11|!Y/§QþäÐÿ̃†ŸbºüÔù‘w8Û‹~ï#¼ÞîN['^�™§ü�ùZ.¾�)zÝ ø›RÇÊ>G¾ÃÆ[F&ûÝZúþN_ÀŽg3/4òà�s›#:|àܶóº |®òçæÜ‰~pàKl5ߺ�#ºëá™klDïJßkK�D–k ¯èðÚ¯ #‘u‘ ä~]@xOnìúxcÿd“3ÉÿHü%ãzæ*¿Á'ÀÍæg6^|üñ«ªŸ¶h~Üøø€/“Z6}Ÿ¶³ þÌÃÆ*ËË˯é�µðšÞ_}_äÂUîÈO`‚¸Nh*H"PÊ�ÿOJ<©_”„z€„T‰©e˜Վ@ð›Ø|N¡ïÖ[±gÞ\¯Ó:ͼpºª�y²ç ±Ñb�OñX±O¾õßíåfLÍw깨»‚§jlÞ�Ÿz9£°Ú¡ƒa’ý¶à#PÛ¾�;þ'ÛA®:øEÈÏJ%�ÞÌ =˟§ÿ¹}Æ4Cùôð €®Ûû)ûåû1ÞÐ]6ã(w½ÐÑÛƒî@ç�Ú᪟ôÑy¹9wh[<οʯÚx½•�M;kÜ÷k~ÞØ\Ç$wò/ÿ|VõmðãNå†ßu_›Ë•�_,· œuÒ~æ÷6 _XXx-¬ €×òüê÷IÈ—h`o¼Çëò…_—c�ä4^ôß�ü³ ÚŸ &ùÿ®»Ùüç=‰«×@î§L—¶Ñ.H�Ÿd48ýÒ_¯$1µwðWvF’†hª¨£o;¥o–ì:á„ áÔºøE aû%>A—¼Ú#™mw^lïõ“vÑÁ,¾+ã®Ê<;>ht %ðD�>gs€ˆVð̯Úx|âÙúdÇ2x�ßéÎïã�,°ó¢Ûeçx‘uiÛáŒC÷ª5æµ Œ­¹Mø'�óŸñå‘¶g�™×éÇnÚ#›idiÓ!ͪ’�FÇɨôrq]ùQ›lv²1jw¤fe=ìÕJz¿€¹&ùçÄÓ_™{ü@Pëïù—×¥ú+øÐ›.‚ögƒjf0×xtR Øuà�Ó;’ÅÖ‚ËËËÊkàOyzõ³<°<@täÀy°ò‰ƒ^ZGÔñ €’�üÀ%þþ Ã~]íHþý«Ï´ÿI…6i|‚é§ ÐÁó©qû=}áeË�ðJ/!$pSÑ¡`c§0#÷#ˆ&ö´ GöQíHHê¿ÉplH¶ÙPòÏëc@í“ô(cá®ÿ?l¦r÷ÛOH¾y@tàÀ>�[:ãÍh–iØ@›yâßÁÏþŽÏh‹Ý¢Ý–*m({8¼¹d\>}OÕOÀã84í̽�³V;�9Yp ¥·Ïó™xn}`*í;š2óBwÙŒC§týð÷dág<< |éÚy]Ÿ>f:ýžƒiÓý6ë£3Ëg^§;Ž­std3T3Ž'ÕW¬êß�'ð„�ó‚¾Þ@‰ïHþSÂÃ$ÿ_å›/ò:c_ж_%çúŸÒ>סÆ�ö-ˆ ò½Òuöäðºí#�Å_XXø“XÒÛ«¯å�7î¯å'FÐ ÷€hX~õü€6ø@‚:’ÿ¿�ùØÑÆ�ØA�F½ŒPYúÆ A"òl`ôúcÌôéÄŸD¦xé‡DQtež½n6ÐiePØS�>a§¤�D”ùØy:ÀI¼èüx¢“ùjlL<&;ÚA«2÷w²Ë8‚lØ÷@ôªænø˜¿ø£Ï|ànpôÚÜ3Ï@Û@{½AÐÚXÖéê8}e$± ¤„¢¶>vr/AOò“ü;?8vbÛ63fí#ó D<óèm÷x]>ÓØ<ÇÛ“Ím )]÷Äùù¹'ë<ðÐÁ;”/-¯Ósß±ó³÷˰´‹çVÈgÙÌëôlo�޽´kÐkDr®R0Ö#w¦�KŸMÎmŸ[¥ïë‡ô(è³ö€ŒàÐw\ð>£ú·j®¡ñÇUþ€ïžàšåÇÿû5¸ãöaùYjZ–öì8N�~®äØv�Øë¼…/,,¼¦ÖÀkzõýËX_¬¿ìÂ?n€c– iÆ¡¼ Ô�ÿ×+Iþ?+HæÑw’Þg­|  ÏByy¯8Í}(ªO#»”=¨ô;üjCKñ]d�ݸ?N>±eŠ€û ãUõ#¬° ™» ɼ¡è‘ôg€ä\þÃ_Iüýê„ìÚ†úéÉ.I¾iÙ%É&@6Œ‹¿§èQ>t4Ö^<çbGŽMæDûèìF„ÓkluˆZ—AGžoŒ‘þ‹Î²sÕÇ(ÆŽ`ƈ^p ¥Ï÷Ä9ñ"‡žÚéàv|¶�ŒrÄ?I·Ÿ]w+9Q³ú±šsØËl«Ëž‚c'~�Û¥�.ŸõŸBwÝà�ô-|sÃSß>úœŸ’³î}žŠï�A'¬èV±¾pÖdðÈîr^&ùç” LüðE¾úK>á©(¾+¼Q‰ÿ„ãCûºñ:îë¯d)¾UÛðÎÁèŸÓY²å�å�å�×öÀÚxí#°ú_h¸õàá±ñhÍ%m��ç®¶ïf“¼ªæ·¾(‘%ñÉ¿hë'Þ±ßû#@$QNÀí$ºÚ·ŽôHE‚3.ã‚ðsƒðFíÆ6r•>lxÎð‘K­á¡âÙ.vЗÜ}—î_ ãÄm=Ñà£t¼dŒÑó-™ýB{�Á¶Fã†Ôøh7ìÏxSŸÂïxèè36W�g@áñ ãKM›'Aµ÷hÔñsFº85¥Óá¢ÓñÞæ1<òÀ=;‘»ü¨’ä'áG§ãÝF·=ÛŸe�fMì•Ø>'ï2ôg»áÍöºþ^ ê¦êœÍyè§�¤3ŠlÒæ­Ÿwš,>Â3ŽIÞÏ߬C¯/�Yßà÷>(БÝî·ï%�^àØ�œ»þô—àè� }þ(ûØ@7�æI€<þŸä¿ëÙ„Ú_TЫñ¹EÑö� $Pf,È;ìø,tl_:žêÛ”#x’žäÑ ïb¨±m tx�…Fôùt<*�ñ“Ÿ³pÏNäÈze-Bë¼Í94`Úž³�Ç 6Îùñ1y·¿§;ó:ÝñØ™xœSœó>½fÅ˹�d•sÀy\£¢'èë£`®¾‰~+eø¬&l $ñï•MÏl°.|­tâ�npdAÊŒ›yáGltõ'dÁ»|áËËËÊkàOyzõ³<°<°ë�B Š ©¹ÙèO|ä)ɲI�M€'˜¦]̉I¿x~Š@ž‹t .=¿Œk,$+¦=^A!?ƒ8t «m‡b©ôà3Aè^ ˆrlœÂ;‚ñU‡á3N’rë3n5¥÷Äû¡ƒ‹µ™·ÛÒ_ñÙ ñï5öië>�Ôã8W�kNذ&}Õqð|à#��š¿MN8:£·.“²íc'ýØÀö#m}œK”~i—ñl[�lϼ‹hÆHí¥Ó/? ÿÆ´½OGº‘Ïö:?x·^‡È©uŽ‚Ï5z3ì¶~Çn÷álëH¾Ç¿„÷˜N佃 ö dTÓT?ÍSž þ”<¯ýØÞ<Ç;¤3O …ó6xOúÁGâ^4~öÄ?6r=æ:¿‡«é¦øû`Ãy:ñ6žÞëj±<°<ð–=°6ÞòÑ_s_øÃèAÕÜu‚ ñø¿\^à7Æ+¼ §Ø@†.í\›A‚BWyç.Z’}ਠ¬Á)ü@Ÿïj ª:¡î }B R3vÚƒ'‰ „ŸddŒÝ^«ª.ØfL�ád´´Oà »'þÐÈìOÙ°¯dÏ}JN mè�v®ôÝpûBóîwÿã#+>ç£æGî­úgîÐIÂ�L�v¥zÀ²c?ƈx{%\`ÇÑítð=Oæ1–Ô4Þ_‹1�дéøLϲsò=]ô)çd‘£Ók?g:ŽN;.²íAÔÇžº<8ýœÓ=’ïñáQº½==t:¿ãÈRÄ÷õ¡ä¬©QÕ2'ÿº6%±õ5G|ÎYäT}ü¬Øz?¥Ì8´ý”?ì;ù(¾ÞAo³ €/Ur ïx¿Æ[©>| :£ð#ýÕÅZXXøãXÜå«Ãå�·í�\Íž@–úà €Úø¨M€�l(�ÈÝÿ9ì…‰má$ÿy€dÿ“ª7`¤A#wŽ€¡ èIzIZòòÑ�Ÿ®¶p%-݃ô È,OÛ¢�ðÒ&´±ú(ûî[:C—qí$]êldxâ{.¥“>‡Z_§ôN½Ÿæ@σ–Ml�MÉL£#þ¦ÌôF8¥›`Ú–è§©e~�õE?z¶ÁÜší1Bx5ïn„öésÆÑësŒžùþ§ú‚|VÙÓÆNìÏ¥ðzƒÎëxt:¯ã‘�øÑÙ“ÃëUëæìégÏVúé0z�ù+vÏéakO~)¿ëá{ä�Ⳏ¼.á /‰©X]›¸k�}¯u1ûZŒÎ[�™»}¦Iã·\Áó迟�Ïø@f]AÚfC¥?ì>Ý\÷» ð\Ë"Š�´C<: .,,ü)¬ €?åéÕÏòÀòÀðÀ^àã€HÈòx?wúIôÇSí7¢Ã�í‘lО^\QÀðŠÏ/ß'ùçoñÀ …c‡ÛÂfGx”ýŽúó<$ -Ó£xƒ:�…€ÓcŸqQB›(ú$��½À(Ã+èäTºÙ¸° ;}– � !<•à†°a–Ì(U܇úŽŠŒ1ô2Ó]v¯vcþÒ�ŸÜ÷AÛè3 ðŒ&x¶³Î†ÿJÝ^E:x‡à¿\ðs¯G»?ƒÏ0mà 켎GçR^ôg›{|lRIþç�€èŸSÒ®­×]3è�Ó9’_ÊïzÏ`öxÈŠïµ­ñeý‘ô³a™ëô{]—ð’«Úq^°–©o­Ì3†Æ/@o˜å?©í×–„ãW6ØÀwèÅ��RÑ¡Ñ5N²á§ ëÅß�1á±5±¹<°<°<ð*X¯âöÕéòÀòÀì�$Ó@?¶®dÁOÔ�ÿñ_öµ)0ž�Þ|�@YAÁ2ÐUxž ùÏ_ ² €ÿÈ]ažïx« Íü€Ž?±b©E’®ôï@Z%É­q}œ¸P;¥R÷UíNÿðÐQSû£úÄ’ûI›@Á;œÒeôƒ€½ž4OŸð_°ì&þü¹'Ͻú7ãgL´‘lø½âåC�TÓÒ�6~‹}9`LÔ^:͸öJø�AÚF§Û鼎ét~ð£vÈ‘õZç‹×LÇ£3¯¥ôñTˆ½î¿½ö�éÉáSfû³þLÓ¦ó‚Ÿ�^wê褪$¬9ž¬_Îg_ÓЭ*µ7QðM‘q^fâø,¾óF€|³Ù�ÍÝT�qÏ62Žà´kºà©|C[ÚQŽðȬ4}¤mØÐ{¼Œ10ú—ÀÞ¦ãiÛyGxt»^xÀ=>¼^9oRá·óhÓ~ÏVï |öUäi{$G�çÊk›qÌý<¥]ÙÈÚc}ûÚÃЩЪ@ßÁ¯Vâi½Š®ø|=§pC2fŠO:Obï;þ¢ÙÛ~ŒžÇý#Ȱª ׿Î�µ– ’V6¨ÞóÁö){ç"¾ò#ÿ‚ßU¿©~•>Ë/|à§ø2›lðÝ@[6œÿLB;C©¹$¡Œ|懎ý��è.x;èÇóvF½Fºcú�ÇúH_G°·ïø‘~ã³–\5~®?ö—pÖòœøçZeØú‘‡~®#ð;*øÆó >|&>#©ç)€¾ ðÿ¨øûBòlħøÐ›*Ò™qÚÁK™“?è”®^`ôÐÙã·àòÀòÀòÀïôÀÚø�Þ]¶—–žç�h�@Ÿ€ ~U­^ó€}ÝÁá7x¿ÿsAÿ†€Ú:éW[ ?Ø¡ƒHñüIæÀP�@ûN⸵€Ï¡ãBÇŸ¥ ɿƓ=æ3pôÊN‚þi¹ Û›dÃF—w�ŽÇfç�Ã#^Kés`L¢` Ç ?ã7xø˜6…sõøð3zg ë2k¯C®C’Z’Ö$¬@·iÐ3V´ðõ’þî°x~5¯Žs…õ€àwù囿ï§Ds­Ç'Iü}í??èíß|i¸¯%øT<Н ‡xJüÐÀèíɺÞ—––~§ÖÀïôî²½<°{±èlŒ¹Œ½¯ÉÌÈq«~è#z¦Nlôi{T�¥îéTCz†CAHdð:þ�£v{6¢ ìu¾ÛßeÝxlÌüs4mÎù6m»í#ýèÌòKûè}ÅÆsÚÊ뎓«×pÎw_—�WMòêO}¢‡?ázwÅó«Y�SñS ›Þ알ó6×{`þõ}ÚÙ†Ö¬7ð%¼ò³¯¢ù8Â%Þ”èuæœø£3óºþ—––~‡ÖÀïðê²¹<°<ð$Œ@‰Àµ—Nƒ,U¸ô� d �þ;ù×_þÅ&€`6xŸ?A`pÙw&`„ïŠLՉРƒ6h•Óç &h §Ncv$FêgÐÌ­ì†<°ë DzûBO'¼@Úïá3½y i ¤ÐæÚŠÆ”õäÑA×Y;9.ð’Gèfø ü`_—­€=^d?‡Ùì…u1Œ¿{ÃÇx]Þñn#ø‘<ü@ôƒ{=—üÏmÒïs ¶êø\Ô<}µÙ³7ó£û@ºnð#¨v^‹1ãë‰ÆÊ:c½ö§Xç®(‚ËnÖøfm#¿Ó1=Ÿ»‚ÙÈãÿ}“7›Äü ›ÁÙTâGtø˜_ sè¨mX8}ô?צ¨tYx ^§ú1Ï÷x‘-¸ 6¡!m@ÑI²9îü˦Ë.ω“x”áì"SAFxt_Ö´ò©]tNŽy³ºúõ¸:ŽMJàŒ[x5¾“÷NãIb4F7û�Ú%ù§m*þè>îxì=à1†ø®lohd]C{[5§c³Ã�­´Ý“wÙž<6f8�)ôd3 µ÷‘¾ç>.¥i©/c3}îµ{޽ØÎígºëîàcÝÖØ|=ÎÎ5*ÐkT|_7€ê+kÝ×Mú¾óñUßÈ&@®åÞØ•Ÿòc°~Z üŠÇõYëÕ4¼ªã:¬>ìoÁðòÝ Öƒ]çô4\Œå�å�å�ßä�µð›»Ì.,<î�m´p=(ðT j�ªïî(ùÏ&�þsçŸäÿ?Úà¯þÀHþ�W°’Ž74‚GGWɈ Jyl0NÚê#:pˆ[˜�ÒņK úõ¬¡…YáôaE>Á!?µ|ÐÞýa+íиG·�‰ÑeΈn¡ŒÍ?dà�fnåý1çAG¿ GpWÖýŠn§é+¾DÖqèÚÌ¥ó:½ÎëøžÞ¬3Ói×!:]/ô¥pî·Ûêý<ÇΑ/ÏÙJÿsÛÙÞKѱsÇzÒxÀ}­cüŒOÕw§‘•Ü0´ ×¤lçÚãU$þæ˜�óÇ Ëð5¯yÿŸë7~wÿåîþç:ïÍ}opíöF~T�}ëë/¶Ô|†4¿¤ÜÚµó’9½�ó·2ß5ÏûõÀÚ¸ßc»fö ¸÷/öÇæ—éÈõ# "Ø"Àšà%ìÔ¨JÚ©ÿEÿ[U ïÞ‹÷Aõ£ê'ÕÏ$÷ªïU¿¤6~x<À_¹1Ãàs ’ó#‚¼ÊSÿ|üxº+$züŠ4ÄFM4~!øÌݧü5*ð£C; ú5 T‰='«Åër+�ù ƒØ¶ÑêûáNòý"ïã€VÉ870zVˆÄê/÷Á¸¥dŒeg¬×n7²Ö�“�¢��gAØ��Ï72†ÀÒw»ù£�«Ë:¿ãÑ鼎Gþ8Û�>ªu.íÊÓ÷ž½ÈÎÁî·Yo¶9Ëk{N>ÛúÍô¼Æè.×O®1ÈCwˆž×£|ÌZ4}ÇŸà›\ƒû.óçî?ßtœ? z@��·ãøWåœ̆€ÔEÒÓC8®ñ–¤}4.mýk…�Ícž÷µÍã±ñ_Ûx×x–~ÅkàW¼·Ú.,\îMüDz+ÉuÃI¸¿+yÿöõë»oÿíú]8õ‡h꿪ïTß«~üïß}Rýò?ÿóî/Õÿ¥ŠN÷ú½A6 Ø, ¹çÏ{%õNøÁ©à|Ô¸Ðÿ§’žøDÕLá%�Þ@Ú#—ÞwªôøõéàØýVmÁÝŸôƒÛ‰â»”­Sˆyb=øDWzN°:”"6hE‡Æ{ø/º@ìR&=Fé‘2NÉ([íç˜z ·I„±wM¥ÏmsÄ⓼©¤ur\Šþìú{>îrpÆxIyLo–?F÷>».ø\ë\�ùÏòn ¼ÛÛ£gýN§m|×e¿§ïÞïSéy|i?CôÄã<êë¯ÎH�Ù^MY5œÁ#»gˆ�æM€ÌŸ'üè¿|ÂÙðf�¾Ø$ˆŸÅ>ü µÎ÷V‡¹Þ¢®pÝì%íf~×Yøõz`|çjˆ¬‹U–nÁkàŽÒãòÀ­z€ µ�ZÁwôs·ÿ‡’íÜõÿÖ6¾+™É¿6þ©ÊÀ6T?+égà?ª_ÿßÿó@ùz€Ä¿*�€’ü+‚Ù`˜ï5.¾À?ñ%®6$ÿ„\(¿¨­7)Ù4NbÀÀWÙÿ¦úQ6Àéï_Uî2Œìþm’gh ©Ä_=¨8IôIàXý?à!£`¿úÙè÷¶Á[ëV{Û‰DéyÜžÆkHæž[¿Ðž+MÁ«ÍU‚>ϽâïÒÁ¯.ó1H»ð›^OÀõíÒ66�{¼Îïò#¼Û{ ~d>•s%<5òû˜3äÏ)´‹¿ŸÓþ’6/ÝGìŒÁk&s+]¯áÀsu6ùLïÎfn†ŽoxüŸT¬Ïz“ø‹&ñÿ®ï6m‘s}æ2¯-AopOòŸ¤Øq™xPÆu£$Ñ�bäᇎ|Áå�å�å�—öÀÚxi�.{ËË'Å…à@9ùW‚ý]• C%ßÜýÿªê'7›JøÿQõºó?žÞŸpÒ/[�ŸeßOˆG2ïäŸ %åò€U¼xÀO€‹OÀH0éW$:饽æb\›à?$ÿûÓ'ׂðð¯øŽ‘púp¥tñ<–¢ã7dÆÕ&r±N¥óvpúp@¹#³�¾ƒå™�r�õÔq�Y„Ç.™a„ÀØd K—_ÞÆ»74æçãPsM‚Ï>£>b¾ð&}JtmËŒpàèQ"É$÷½�àUõ&€ ržÈ&›¶^O¬)®ñUð ¶ápÇ×}# ãÕd€qëö˜`�>tðÖl¡Wâ�£cºwÌÖWrÐÖ0x`m%²ÀγÂÎGtg•Îïø¬wDµ�ß+IÓ\»<øÜü^fºË:Ÿ…G»™ÙKÀße?v3Ö™¿_6ç’æ ÍZKÅŒ=+;Ö•,kÙ½æL¢Î¦mJxøe÷ ñÙà1ûŒ†ZÓ¾®Élþ\:'ñÏ €îþ·‚>|ž«-¥t{‰ þÞu¾<°<°<ðX/áÅecy`y`ã�Þ( 1^ÐA’(?Pwþ�øçÑ’ÿÚn6D³ 0?À&¯ü«W¼ $Þ?ä'È?üGòï ‚b’ÆC°¥Q{|ðU ¾>H7Ar?’y'úÌ28zÂ;Í£ÿ¼F»¼2àßíDY<`ú¢–âe,(9c}P:œ½È Ò‡ÎðѧÌmàÍz]Çb�¨êW*“<^ƒp¡]á£ÿ“ä¦>k6Ǧ5·$eLÆkigÞö¯øAŽ3mRÀ:~|fºéùÒu;>ëϲ™F�×í ß«}# òØë6;y·§-k«—=^—¿4>÷÷zÖíck²¾¾Pé3gÍ ^ÕºeÇ«Møf}¢pÇŸ�¢{î‚¡ÃãU.~Ÿe¼ÿ_¸7ð‹ä¾æäZž¶ØÌñw¿û/e\wÅè8rè^Ò.z‘¿¥ãÖý±ðå�å�ßï�µðû}¼zXx›P0äp¨C‚)Õ¼ÿOòŸ;ÿ_u÷>I¿¡hÿ€’~ÿ `àƒÿüà¿ÚxWO�ü;᪒Л'Ü– Acóø�Uý£€Ò%A§ò( îl¤ŠO‚Ï“ÞV…ç ì«pçßÉ¿6øá)oÐU4%a` ™GjǸGÙ£¢YÁ–æG½à‘ÁoøÞxÑHõF@Ùbžö€h�Vãqÿ6x»öˆæâ9inñɘQü.Fwt­W¾À†ÛÓ ÛE²QöðΊ…̲™žõgúœ>²Èƒï%ý‘ö>Ò>¼™ÿ¤ þþSåwõ»�™OÑ^?M�Yǵ&YsI$½þÐUÛ¶’býnaüsºŸ|Î5‰'ð¯ôM?þ/ÿàWêú�.mÙÄå ®qñ1�ï1ʼ!o\o/%Ç)td>nÒ DÞñè/¸<°<°<ð«X¿êÁÕ~y`y`ëG4™ø<8ù=Àûÿã‡ÿ”à�wÿ…çýÿläGÙð¿ò#€$ÿïU?è dNFÕÇHÚN’O@•Ñ%0#è’Œ@Œ÷þ©þµhéúiÙài'ñóØ(Ü›ÂùÑ?æëà±=mðUm½!>í‘ ö*rЖ'ßþCa¯0vJùÜ8<è ö tÈh0ÛH;‹&[ðh£Bb‹MCÑÌ�’€h]éœ�ƒ[Ý·çÔüíã•áÇïÐ…gî´‹nxnÿCáVÜùˆþ £þsé´›!v{í›ï:Á»-xÏ-´mÇÁãéôsíµ{¬¿§Êç~æöÈÅãzuBú*ëè*ô’,W[Z„g#oà#¾áú“k~Hý"<›$ÿ¼š•M€ñ7±ò¥¿G¹¾ñ][Rw™ÿø!8%×Ü@3‹x¤O»U®Óó1ÝåzÿÏ+‹w-X×r$Ö8n·þ…ü«ãO rî`ùÇòñkÿŠ úÎ? ¿’ôoº{ÿµªq%ðÐy€÷þ�øë ð$ÿï¤ó^‰þéT%á÷†€t> '}‚5'¥‚Ù H§�}6ªr‡‡;e¹[Æ—¶Ÿ*éç>qZísÇß›}@ºÌ™Ì+ã)9 ßûÇÁe‡ß}ŠGÈè •1 §Â�Ü‚ù£ÅÇŽÏ&h©6øÄú});,-Úø<žk¥ÛÎ ñhN9½m×µ\>„DZµ?9Þ£-4òn¤ã{cÜãõ6¿ïýƒïU�ã·fùÞøf›{:G¼½uŠ.6#Ûkû«ò=›Ïá�Ç�ÌëE2¯+õés�uÅ| úz+<×yèàÏæ-¶ÉyÌy¤ðO,IöIüýƒ€âõó²ö‰>mãK|;®ÛâüÌwß�>6jHÛÍ5xÇXä{Çm�×Mô~:ÿZð[ÿµøq�cyà%<°6^Â‹ËÆòÀò€=à¿øSÄþÔüÅAIýW’}%ñ†à­r×ÿI¿*É<õߪïý€l¨ò/$ÿz„àÝ{qÙ§'ÿmU}ל úqNt£‚5ñ}Ø €£:èTÄös³@&Æ£ÿÒU¤wÚb[rÛJ .è¤HØgyœ”±�€•1ÊŽƒÏ²#à�Ð�Bú•=ƾ�jèÈ)ѹ—ÞHB„3ßøÐ¾*^Æ(ö›(ß>çNw<ÎØãEæc3ˆW@X½@÷ZkzÃëòŽÇ¼”#<ò=˜u�lÆáÅfÖ7¼^�ÉÐ;'ŸeO¥û8ž‚ÏýTÛ¬³Àn’d𱄫ëß#Ž_Xmr½ò�ù‡ÄŸ'½xâ =^àõ€/ºÑÚÆ‡|§øº]kÝÄÈtMïë_÷äŸï;JçAÃ�.tJŽU?n�Þ‚ËËË/á�µð^\6–Þ¸T(À<Þï¿öSr>þæOI: þ×ÿûß}c@u@ñ ‘ÿ#½U½P¸þ&@Q›’|Éß+ñ÷‚þA@m*°À»þ˜¼4Žljl �|KÇwiÔŽ0�DÜ¿ô,þGrNþ º+è#áe³€â €²ï p‚:æ.9ž°7Ô†§ bã=›Ô²‘'lUm³Ÿž�|ŒIxÊÉá cÆV/á)’ƒ�;Ôð¢óN;tT† ááÁÇî¨0TºüÄyŸöÑÁTÏÉv›äøî*½ ³÷¸WÛ: gH½Mè µÛïÈ:OÛà}íwÙlY×}ª|Ö¿”Þëw�w`/çQà�š¦ö¶“üÃùE ¤ò‰>?øUÕO‰‰f=ÀGÎ+\¾ó]¢µÍõ�ë5ÿ ãß ÄV/Ià{ÂïïCÚʆ¿o8Oª ëe¦‘Åæ[?žÝO _Xx¬ €—ñã²²<ðf=Ðð± Ä¢Ÿól%‹'Gá�œEÁ¹NQùÁ?6üJë†ïA~¸•ÄŸký¸ó/×6o £«ëxJ쳖С&ÑRzòüŽCç{4×Ñ#üU–––~ÕkàW=¸Ú/¼a$hÁàžøp÷Ÿ¤ß¿ì¯D=ð›÷ÿö¿ÿ·“þï$þÂÙàoüHÂIþ”¡ ¦ý¨¿6>È6¯¼î×ÔïÝ{à4'IÒa�öqr?†0�»@ØHÌÄeÀÁ˜è$ôèÂ#ðK ˆm÷þÿÙ;×í8rKË–ì:=Ýýþ¯93?¦O•%yö·ƒ›FRŒÈÔÍÖ…\‹ AŒd Fd©—Ç :lmH‰$·ä�úÑ ›3ÚÛÝg:¥ÇiÄ!Âkt÷¹Êlµ¶ÏJo¸µ‚×TË‘©¹Ž±VûL¸í|nÀÕŽUö±ôZ÷%ð´_!ø˜ úÇÀ”Iª.h‘ ÿ,×p®å^%ºóèŒ ‚ì‘Ü9þDåŤgêöwQ�2ÖŸ¬K÷ã b›¬VY“üÙÉwþù]Án‚üvqÀÁ?sC�ßr6°ñÉ5#6G†º5à÷o :ô½HÀˆÙ­ D©â….¤÷¡,¸,°,°,ð2X/cÇ¥eYàÓY :,Á�ý€t^ø÷·îêó‚¿¿ þ9öOÐOþ¿ÿ÷Šv/9œ.2wÈGÜwÍì³À)îüû‘�lTç \©n@ÁÑË[��Óg9Zç8}vº€®¼9‚óæðœ%ÛåNr‚Dèå®QNÄ!”<$úè Æ,:ý¤}·Á8D{TBžz¤Ô­åèD3ýµ| +¶ºµ^èÔoºÓ_³E£ÜZ?ÁÍÿ¶iç ¯4‹5;ÆžoÂDé� 3×7y¤§\Si{x•¿ϵŒl®Upô§\qx5ñ�›ñGÚc˵ýsø ;ß«sÕ³@]›ÀYŸ½ ÀZ«ëƒàÿNù(ž×Bl®ìÀ_4‚ÿeN P‡ïo®w¿V·ÓÆâñ„Ö ûˆüSRêÅFè€Fy€Õ í¼´ÙVß6j<ÆIïLC.Ix—«ôð?ìvÑX+Þ‡~©].•늟‰ŒíQže‚~è�‘¡y𠃇^˵ž+]ø‘ë::ëuýU&øL=:Ãå[žõá´þ]{†Ž�^ù.¿æ™ß¬ÜùçD��±À:È•ë»ÿÂq’¿ òÏ}@¸å�%ëú'˜¯Á¾ÄNÊáA¯¿™Á©_qäVZXXx ¬ €×°êÒùn-Àð{N¿£ÿ8(ÉB:Íoü×]ÞæÿCÁ¼Ÿùo/ú#øÿ‡àŸ£þÂïZ¿—ÌO�ðËý&à�Ñ™�ÌÐGx¡¥Á6z ØÙ€–EÞèýàÍésA¶»œÀ[mÜ ’ï…û‚œ(™M€Z>Ù$@WÓ×ç’k2×e``6r¯çò¿ܦlá”¶Ær“µ-›L«Ñ807GÉ6‘À‘=r�éy<æv–umOé‘¥óíºx3°ÈVzðܹY‡NzC«ø‰Ðû-œŒ–q2FøQŽÜ&ýé>±y[Åál*³1€í¾‘…>€¢9€ÿ&.¿ÍÎXžuÓÙ*¶ßDdkJðŸ»þ�¬ÉÁ©—µ½Á«¾îõ{Æh´Kõ¨xUÖ{ïÿ«g)_xa ¬ €6èR·,ðÑ-‡%Çý ›CÐÏ‘žõ¿UPïãþ¹ãß‚ÿŸ‚?Å»’ŒÿÖOï àîK‚×û� —·“‚v¶š�G¼Ú'�œrê¡G0e |2ôà)‹„§çì;ürðü777W?•¯”´|+'ñN8ÙÿÝ‚þüCljLÆ™$q: ¥FIñe!ã ÍÒJhiq,Wzðß¾˜ÇK²c& Ù þ«Þ´3ƒ¡Uyð´5ÒÇrêçûRù#�ò(7£U ÿà:Pöú­kÄP#÷Z¯5Ù§ØóhÀ?¿ñ¥ëÿþû÷«ŸÊ†¬×¬á¹Î¿j­w  -ôbU6èç·t¤!ž`=0ç‚äÒÔB—––v-°6vM³ËË£pF\Éwr~â(Éþó²?6¸Ë¯€Ÿþq䟻ýÿ?¯$Çoôçy~6QøÏ |2iÂKð<ƒÑ/x6øC‡O™¾Ðíx¿œ8œFßåÇáS@¯ ÿ‡2Áÿm þï¡ì+³Aà;ÿ@ÙïKƒvðâ(J'Ncœ>;�áÒ‰§¦£¨ò*N[³òSû°êý 0gGi�:�Ì5YqÊÉ¡ŽíA'�ü-üÄ�|?Ð|¦êVçµiéSà¹ö²5Íh•¿pÛ̧·d; 6$¨ï¿²!§Áüh€ÞcÿÙüPþGùF™ë~拾 ÌyLÀ ü.›'€?ü‡˜ß`tDmÚLyÁe�e�e�K-°6.µÔ’[X°pDðã ±ÀÑ¿ø�£ÿmÀ'è;ø/Üùÿ)™lðw~Üù¶ƒ£¶÷r\^`ÅéXÊÕé ^aêB; ü“RßÍyä­ÏlÜ)'Ðï'ܳ Ð7$“wü{C@vì� 8 g\2æVÙMòùŸ8Àè Dã^yȬô±-�9’u]¦\aµtRàVÚ>g´Ê?'“ïÉX/eê×kz,Gî­Ãôû­÷ó�ö�ÕÖÁ³ìì�®o%‚nÖølð"Ûý>Ýþ­ÌõÉ¿Ïø÷*k³äÙDàο¯_]>õ…B%¾´ÅËI{�Ðvåƒó[à߃†C#%ð÷ofÓ»qÖç²À²À²ÀeX—ÙiI- , `�æ�à¬$ðgàVN’ï–ðÀp oýç%<÷ïcÿÚ(¸R¿R]ÿ•’tã"኎› µñéN-o¡ôÉÝ—JCŽl'P�6p½ U\ÅžÂïN£>6ü¼¿?ßño'| @Á€;ý8‡l·ÓÇN›:ŹÄLƹ«xd{Ïž€ sÔSi{8MÁ[éýY`œ·±<25$%WzðQtR`ðÈÏ +|T]3±ñºžÉ@CÏ¥²{:^‚þÜ~0†s6y‰~~4²™W]lÇ5Ý®ŸêÎ@ÞgÃ_Ù^ëwÍ¿U²§Õüø–ä¸ÂùM ¨Ïë;�­‘àõ,xäÜÝaxÔÍF4R úÀ�¡7a}, , , \`�µp�‘–ȲÀ²Àf\œŸ“ ðÜ)a >À €œÈ;Ú#ÜñçØ?°g9Uþû?é'OÆÅq‘NÿZOÚÜ&õ7Ap;m�vè uÚ\¬”6¾F³«ê°@½¶Žºƒ™k²âµLýðª.hc -ò{p¬wi™ë�¹®Çz#o,�ò¯Yžµ=£]Ú‡ŒýRùÏ.'[g]·)¸¦•üh›l™G®µ±ýU¿k_õØÚ•~»H¬ß$õªGàÿUkÿ5ÚZß“ÌW;úÙà®Á>�þXF÷^F�;&0m.¸,°,°,p©ÖÀ¥–ZrËËvšpBp\ú#r|8@®'~Èazð@œ(Õ÷ÿÇ9âåI¸aÉ„à‚“I{^œ»ÀÐ('S<�¶xô uªòáùN‘8ÈÀ?r¼P!ïÈ#> qbC’Û–C׃¨ü#CV2ø&Óê¹òs?h7ú‹?·íUÿ÷Y€¹Mªxh3ˆ\Í\ƒc¿Ö¯úƒ"Wñ±Þo”£œëvä…Ž.ðÀ*÷Öñ÷Øç·nÓÚ?Ù7�4dŸ¾j× 8¿y€ß´/ÿ׆¶ÿ¹¦é!ϱÿ¾ øÂúMßúÎpç?›æÞ Pyüó›ZS~úš~x@ROd\XX8²ÀÚ8²Îâ}8 äó½ìµû�#q˜pFphäèÔg$ üÿ–“ô�î”�ý7€*ßµÌKÿüâ?ÝMÁeI&èNæÞIpøà3(²é3-)# „Ž›D7xà(GyÌÈÖ¬â4Eæ«´ke;™‚”ýò@9†y‰ 7@Z™ -Nø”�ä™sô]”${”¼ñ²' º}þÑ“kaÄ©/^m©ãÔI¸V nztôa�µè¯h�ÌM€Ï2׿Œ^i¯ØÅ¥zYà%,ÀšîßѶ>±vA#±^‘ù]H¾“Ü­2�<›Ôüeíµ~ÿ~ðx@Np €�^tj#À¶’G7Ù¿¾?¬ÿ^ß%GÊz[!89ô54Wj¡Sôx£§‰<‘{Àh„sõ÷êý.ú{ïÿï²ÓjgYà ¬ €K¬´dÞ¤Îý¼ÉN¿óNÙ1‘tü+¸ÿ[Aÿ¿ þùË?îüø+Ø¿—ƒä#ír†èIÀY¶£$Þ„G&�øFÝ>íä „'�¶ÁqðÀ¡‘ÃO¹B6)œå á Þh\œ„ˆSÈ¢y´Á�4ÀS¶œd}g‰öpGÈ=¤Œ1mÃFùE©úÓS-W¼ lHú4.¡umÔ'‰×76Êúü�`~Ë\t<}�2øQžmDÏÓn üŠWyè¤Ú—�rú‰\dO9§ôÈ޲o¹üûü–í¹Ó7®8V(C]w²�\ã æyo‹³úŸýuuõ¯m'ßtÜÿV2>±Æz¯ß¹õ÷Úø&Yä]GsIl\sLð«~XÏg§ÜÕ©0ªâ:À¤êQ§–#³à²À²À²ÀÌk`f•E[X8±ÎÉwÿÙ�£s«àþÏûø+èÿ[Ïüÿ£|'ÜwþÅÃ!êAqÓA€½—í,‰é|2©âesêÀ·^7'¯•¡Ù+°ÒÀg›"oõ4?²@p¯Ì&'"|Ô‡P9ï5ð£ðU‡;I ò³ PxGÁ?í¿J"èjscýcb¡�Ø]õz¹é »w}#ÍŒõñÇ-À¼&U<4‚¡š‘©¹Z�k –£^»N*ëbœº{9mì)ÛË{õ^ƒ>k{F»´í=›_Zÿ3ÊÉfš5vÖ+ÏØz6ìûŽ>=¿eúíã½.¼Üï‡æËGþõ;ˆ~ëØðæ·9®S¾]ÜõçtõúIäõ»@¹ÿ¶Š~.ïMÕ þ÷,³èËË3 ¬ €™UmY`Y [  p^”Ä €;9;· òùÛ¿¿ôÿ[Á?/þ»×†ÇýïÛ ÿo2ÎŽê’ö‚ÿÐí4In¢™Tñ�²9tà[‹´“'ÚQðŸ:ÈŽ›ðúÝ‚zeßù—=np eN;üc#6�!Ø·Ýë&@þ¡KwúE;$ú� ƒŒÕŒ×øÀñmós¢¾Ò n›K~„vžOüšd3ƒÈ*þi 0·$àcóVs»~¢‡k |„‘݃³kpOv�#Ü“ËôŒá-÷ñö�uÈW¼®QÖfph~€ ¼l\q€ žÌÚ.>�jù­þÐTŸàŸ²àà_ë>: Ê}ç_ ù-¨'\W²Ù |”Ñ�NäÇ�º¤µ0Zg•—–F ¬ €Ñ"«¼,°,Ð-‡BoÈá¹U€Ï$³à:þÏ#~[²h?µ9p%‡ˆ Øoü—s‚ÛÒ�Ñ ·“T |h{°ÊK¬×$Ù™D>Î^hèN° ­â”áI©³•Äc Êÿô€2ÿr o4NÆÚEÑ81áS’O[û΢u¼Ñè/ YxØ*¶O¤×Ir 5É›î=¼´Lx§@‡© ]¹iê5(ÛIí”…ü6 07ÌiM)Ï ´1t�GzêWÝ{x¹F¦"çtQÿ(O•Nˆçú1©ò*¤çö㜽^¥ÓC©×#†"òÛæ5 \׸ÿµEwì¯Ú ‚zÿZß½)›k�²rÖñ{És}¢‹ �àŸ„á·�ßMÿˆÎoˆñ&×[õ{q”ø×ßåûC»*~¤oñ––>¯ÖÀç�ûw=òüèÕA8¸à‡y¥±@u2‚qdpzú#à €/: àÿLÖæÀmpL’»%žÕ3Ú½lÇIü#�LNHâ*È•YððÏp‰ôúô³ê¡ìà_vðóýØBÙΗÆÊ_ÚaÄ™kØÍ¶S}NÄaäÈp`Ú£_¡ÇV"½~b êŸSÅKˣͽ  :Ì/‰ÏØ,Ag/‹—y@v¥7f�@<òg�ízêAã:ȵ3ƒµÞˆçÚé—–S^ªçOË¥ÿº¼}Ö%Ö#od¬\ëå@Öroær§_ë{_ã…SæÔ×­2èóË_¥ãF›·:Ap§G|€ßAñi×ïÐ<÷ßxj;å=H7á%}"è#-u\XXXëXXx`�80‚}×§‡y@GþyàoÝýÿ¡Ì&“¯uÀoI–¬_Œ§ú f� (µ;ƒÐÆLC�SqøÝ›àð©™”¹#ïà\ÎZ?â�ã'ÇíFÁÎWmø‘ÑpÙ�·L]áúdÎ&�q$ð‡÷C™¾Ôñ©øº)A[m%´@ñÒ'`ú豦ždsíÄŶ$ê7a}¼¼¸î˜¯£~…à{™àˆTå7Êñgí øsõg9:Ïé?Ç�žß Ó§ÀsmÇþUnF«ü…O-P¯Æ“GØà€ÖpÿöinüÏ,œjÍïqas[å¯üÆ òœÿ}G¸óÃ�ÿßôò@™c=Ôãúõ)t¢K=»$øGr�¹éȳւÓ^-C[iY`Y`Y ¬ €u| ¬¹×™Æpú94>PÈ;nøßð€x78F8I8.êbŽ´ƒ�™P… ýF.Pâ=�CñÐìp5~p`ÚzR—2‰ú8nyÀΡ};Žâù=*û‘ Æ�³è¿ßS=Ú À'Øw-›Ø†ö³@ð{Aÿ#‰ B}t*xîúà ^OÜ7Ù|/}ý  cÊüü‘±}¶F™ÇaNL^…àýR)2#~¢P…Úf½ŽfrçtÁGGôÌtT^Å#;£…·à§·ÀÉ€‚ùüË2¬U¬k¬w¬ó^÷yÌ�oWúÝãE°¼ð�;ÿþuçŸßIä}r®ý¢+y< ÀZY3Á~R6 (G&x]kƒ§Þ‚ËËË£ÖÀh‘U~×xï?|o¾ÿ8Ð8(½Ê~ó±‚|Nð·äÜñÝpÉ$¶Ã¤«+>àˆ§|Rw¬O™ÇjâN¡?nUp ‰zÑ ½Ò(÷,[øfSÀ/†jãU�6 ü ì�åPRFß5AU+ÿÔÓ¤WÀl SǨâãm%æ—„\ð�2ý<ÑùÔ-¹¦yªçC±ËžÝ�x¯iú“>¯0AÿL¦ö+üJ¯ãªxä Õ=#½ÊT¹š+¼ê©ø(÷^ËŒ©Ù¬Zü(ŸØe2ö7ÿû3éó£H¹Îö*ÁWÎ{ü7€²µïö«k¹ßi£ 9—ù�cC@�þ­èþ-Ôï!A?�$ðÏ ÷œ`>øíH0?ÂÜéét?4æ,8ô”3—ð‚Ã?JçäÐõ–Ó{ïÿ[¶íêÛdzÀÚøxsúáGtn‘ÿðøÓŒÐ`pq4’ÕÇ8´ƒœa�2 |tÃ>Btdã¦g¸È¦S> �qmÒ~è)g4èèŠ\ð§ è·rÚü÷P”…üCã�LðÏÍ£~¼ Õè}MŸá½xRû8ª'I4;��—¾“‚»r…g�Oø‘¹ŸÛ6ÛMù/‘Ù­|À ÝìW^ò�ŠVíç ‡FÊxSÞ¨—}R'95j¹êÜÃS¯Â*[éÁGþsËÑûDhKÒÙÜÁYìúD�«šìˆ=õ=àn>8ïzùÂÑ~l¬€Þ8eñÉÜñçØ?~ k9rõúö:©yæn>¿ž3Új¼DÕ%tÚF.)åå+Å" . , ŒX£EVyY`Y`n�â`ÈÛØ^hà%sGÃeiÁ'`è�3™‘–;⾃®Š8S¡!ËúÿÁ£#¿DN6„?ÃCŽ>e?àInN¡ùâ县!òÊü¯40> ²ƒÕñX‘N²ó¸¡ÆéÏ/÷¯1^Љ¶ìd5¿”±-|ŽÉ¦G}:âIÍÇJ|d¾+=8¨#œÑŸC«ºGœ~$×€<9|êV|Ô5ëã(“r•'¡;øF9ÿ‰|êTœš¡Ÿ×r*q®Þ9þ©¶ãÒSuQ{•„mÉÆK9°ˆ.ô Øn²1ë°ÿî�à^¶�Õy'ÀWr üý²@‚ÿdÕc]Œ ^ðÀÐ+Lÿ²!A¹âÔ…–à?�?0�$øÿ&ºsÓç¾nf<œ!ZzÝ”6q`�4×vfUpEO_#ûº=z[ÚíèÇ6t�ï6$�Ãj±‹qè¤Zg£¼Î'í$øƒ†|ljãsµŠC¨c þý©[aðè«åЇxÄCfÆi�-§íKàL7ó½ÁDšÞêäúº¤™%# ÈžØÒÏåë»À)þµ…Ä'ï¸æÝÊzÐßÙ4ã»=ú"þ®«~—›Ö¦�6w<6Vç¯öˆÖrð¬#)C ¤nú>´•–––°ÀÚX×Á»±@~ÌÞM‡?bG›3ÄÐ$øŸÂ&‡ì˜OtLø£| ®ô³€%øR‡àš€?P¨“8a£Þ±Œð%´*CßRîý”ƒG?³$™/^6&rüŸMŽž~WÖ{¦ý€:>ëAFs€‰žîL Ug_íÖ€CÍõÔÛEFÉvn¸ …îr“ þ)!ߣj£##ìÉîÑ�t…GÛcNð ™Ô›Ásý€OªãM� 7©óŸÑ7ÂÔ =å#xNöÿH÷9Þ+éö÷�¶Ñ¯Ü¬®7‹ è:Í&À¶¢‰‘ïÏû·à?�°fÃÇ?I¶ª6¿5HçdLk�¿Oìl §Ö¯øŒçvõ_ yRÊ.¬�e�e�eYÿr¥e�7o�õö¦¨9cËúq.§A¿ø¦«b烟ɴ™Š‡Hà›ÀšŒ—åR>Áä¡‘p…Fg˜r䀤”+Úi+4pô¥o�ô-¸PõG6Ïþçîÿ�Iî}—ƒHþ[9Ïÿ×wàœbÿº 0Ž‹v^+¥ý=ý¾›Õ˜—ºWåãÒù.hÜÓùá{´g“#Þs¬E{cNÀ_a•¡½½~îõeÖÿÐ*Ü«D§>)°â•f¡A.´Z§Ò*>Ó5«7Ê�+×6ŽðQ�d¹³xþn�°èkV²�:^ø �[ÀvÕw!›«¶�®¿� =À&€Ÿÿç;ÓÞÀw$¿YéjÀNðOÙï@–¹Û üS�áŒ7ŽhùM£EVyY`Y X±Ä‚oÖëGìíMMwtäÄàÈàŒ÷`\]vXpFç¨ëˆ Ì–f ¿=ùÞĪ™Á~@úò—‚Ì׃w´:¨ÿ”g¼4¹|¦XbÁe�e�= ¬ €=Ë,ú›°ÿ{{”ÖÝ‘u^�'‡ä$QMð$øOYN6(�qJGefÌÁ ¨ üüg zÄr€JÏüçj‚¬òÁÅ>äG.}D<}L?³Y�<�¿eä(øÓ7Ãæ|rç?Œ­¾€z$÷[rØ÷·%µ×ç<}h0ýI_Ü+ä?AËoìmºò6 óÔì� Y·º-*oìío”}L™¾ÔÌ:KXs•?J{}…NJýZžá›ôñgê!UñYyÔ4Ê?†?Ö}lylëÒòØõ É¦��¢O¼à�‘�È‚s °à�Õö�À¾÷é¼�àÿ«ò5Á¿r¾/|§ù†œ|KÚ< ãÁ €a �}…ô°–+î5ý%Ç‚–ZÊ . , , `�µ°®ƒe�ßh�ñc\œ ;•²_6R6Œ\ rÍÖ{vœ¨È´*' Ê<OQ˜vCß“«ü¯}!XïYÎ!›žEœÌ@9—ȱ1p#œàØ•»ÉàÚQŽ‹7ë·ØOJ/¥ ='ýË5 ±Ô™Jû°86`Î5Àãn<�½â1ÆŒÞcaæX³®¹“òcõž“ÇPËàOIc½±<ê|.Ô÷ÔòQ?Žx´'¾ïR %(åÄÐA+uKö¡Ê�ÜÉö7°]ýÛ¨²¯Kê>#}ˆß·f,‘»ôØÆ¿q øsçh\›~) Pràœ àE‚Ôg^8²Ág=#�:¤Ìü”ƒ›0ùH� ˤsüsú÷ôþ.ú{ïÿï²ÓjçsX`m|Žy^£\xU Øñ¹ …Í‘SÓdG9ºŽ �*Éú}�Ô-2Ž:‘Ÿõ:)¼7sòù8†rÒâtSÎßýqW‰@¾'ñ®å¬ù/¦ä(rúÅ2­N×UœtÓJ¹ëz $ŽdÓ�àÁÎñ¤=…NÐxM±[¥}œQ2¶:Hk6Ï4Û`ïàÐg)2#œÉV]à—æ™®§ÒÒÏÔË¡_©[ÓX®¼—ÀGýÏ-�}õÁ¯4pÍ£&Ðb]ãûŸ·ÔƒCg ~Up‰,k ²ÐsL�k]À¬!‡—ÔdRü,»Å.^«d;ìå�ûl|ÿ~uOþ׿®î~üØ‚ý¿þ2íN¼×Å¿Gª§ùøÚ6bÇØÜz£_²Ì9sšò ºŸRºS/80úÀWz T;¿ŒÆ¥eYà÷Y`mü>[¯––Þ¼pHp~fé]JXÏ8/¥™—€Ñ‹C‹cÅ]u ÿVO�”·ÿ×�€Ô›Aê@Oªø-¼](‡ŽäOiÊ úÑ9„>>Š t•9Vz-§‘Œ ›æ›.—qQÞRÅC{6,ó;êJ_ ûβ¥Oc€9`w¨MÜôÍìŽÈ{L³ñ< 5{Íl…-¹Vœfx¥�šñ¢ x”uÍ�ðÑ�ºc;/Užõ÷œnêüÎôZíEo`ÆTËÎÈ0 rg™«„|+œõ�@�àŸÀYž]'û¯í½~ˆ>BoLBWvÒ¼óÝF²Ÿ%y¼m°ØÙ6`üØBÐ/ä.?'t×ÿž€ŸàÿöÖ›1w*YJ„©@IDATßAg“@ÙïwQ]6®µ`»£7Yß¹¬¡n‹vJF®–÷ðÈUÈ0�‡¶Ò²À²À²@µÀÚ¨ÖXø²Àg·Ž‚§îIŽ|sZNL­É‡Þ´›mVN�$øO&ÈÇÑ%ø“ø³QDW`m3¸Ø½/#NùI *ã~9—²7dœ³¼ªŸhÁß ~ÓSû½•öš¸Ûc¾[¶ãJßZ£Ÿ%�Á¬x|‘ƒ6“ý 4l2Ž/v2=¶’œšMàwÿ³ÖÛ—zÈ!èO¦éLj?¬ù4ʬŸ3ÚžvdÇ4£�2/YÛ{Ly”­ýª¼=\ò|‡XËœÚ|å{å€_Œ~@|¯‘ª“ Å%ǺB}|Ÿ3ÿ¹nẠ2c–Mê&€ƒ}WÜä“s@>2ÙÈ à”Çÿý€Ê$¯ç¬óªg½’ñN`æ`�zäÓΧ›?[x}, , Y`mYgñ––N,0q½Í‡^ð”£`,‡^!2- ªdë®zqV“³ �zlÔS‘VcjùuÔrú@çÁ“íTËñ3_ÐwÛäèÉãëÎ5N¹ûoH�ä¢Ï4êÿ®¤¶Ü÷ÖfÆ5±;( ±÷XcbìØ…qÛ>E؉±'Àêv¨m¶í¶8g—ð«®#Û?6é{ oÖghOIO­wi[¯¥?zÓŸZp,ä¬ùc=sj2”ès÷ŸÀRe¿½^²Þ€NÝÑE™ë�5Åë’h\¯Nð¤ÞgJØ…1;pžÍJ ')üöNü·Àž@ž@ß4ѳÐ7¤áó€t Û›¾¢y./Ù`èÓQŽ pœ7�Gm¯´,°,°,°6Ö5°,°,ðÀ¸8A¤À­tú Ïüæ„ö2b8*áSV²ì´PûH]`úSi8¼8WðâÒãpÁO®õöp‰?HÈ&U<´çj’qÄ’Íoö²Ã‡Nʲ�MøÉ©Ÿ»î½mÚkú:í…‘Ø7j)Ï2ü“ Ÿ¾šm/wʰCuH/²¯µ½�F^ÇÔËm쇣˜É„8SpÄc.Ú|¸jÊ*¸é¼™þ—¤õõÒvÐñ»ÓØæcË{ý­zöpÕeÄ|oH¬o. æúr™€Róš@ßkˆêðbѬ'ðt¢H‰™Gz²Fu\¤ú]Eä£'ìÈš[§¬cý>þŸGÔÌû·F6æø¿ßïPŸ `£@ß/ôø�ªÃc_ÆU�MÚ:—©_Ó(Ÿ>G~¥¥\u,ü2 ÄŽUzF«ü…/ ¼U ¬ €·:3«_ËoØq:å­¸—½ÜúŒ“QÓi©râÑ7§–ÁÔë@䳬²ÑSáÃÖ7‡z¤Sç’´'Gßœ›ón¥8}r¹K'³ýo#NFtP…dÎÝV|µÏªìƒûA_ÈéKÆX¯úßÆÉœ„øùå&ëë¥áèü( »L¯‰j› –ñ‡>ÚúH£^è�Ñu¢kÌÿ¡Q?8ðµÒcû]ûAÝ×N/ÝFôõ¿Ê€“Û\ð}aôÌ 9¸¿[*ÌP²F$àw€¯rN±à$ˆ�� Ó4ÚlÉ2)|èÑc�<›&y€¬cðÅ÷ 2Ïÿïà€_Ä”^Öyt83§OÈu^RÚˆ�rµüI¦s sY`Y X`mc,tY`Y Y`pþØ¥8†qã”Iv˜JÅ.×h³2´æ–öúÝù*õØÃË&@c÷Ùˆlú“v‘i#/:Ÿ éŸ-ì© îñ¢¸Ø+'¼€C.9²õ´NXG±#¿  Ýô¯6�þª/ þ-/AŸP¿IÆ�h­ßÌI·´&‹ØGK± ×VpÆX¯5�yÏ{tW*U®â£m)‡|„¨�̈—&_¥¯¤ÚÞF™F~Î}]êØöcËcïR„‘ ½”±�(×R®!_W’&ø÷º!š×èªCf}f Û]*s7š'©µsBû„…Ø9ý@6d“ÜÕ'è÷ËÿdKhþ’Íy ¬í‘õÉ�¦#ûs kjꃓ(7¡}ìÑ«ÌÂZ 6~ÈY”e�÷e�µð¾ækõö�[`öCûÆ»üøî5‡‘;FzmýÕ²îx|U~‘“#OÇ4ý!ŠŒ³Ž/v©´>PÙª'Ù÷A‚zÅ#/|h)ÏàÈO¹BpÒ¬­�³}Ö~WzðÚ§ÐÏÕ�Ü|ŽŽçÔ=êÓcyc?ÆrÓW®�íº’më•B€—€Ygt±n+èœAîDg�ÊÚãï¬êx J_Ú<Öö¨G›G©® GrŒwt}ªSØÂ�M´ ÿ^¿w¹ûÏØäe/ù± ùà¯cãè®åà¯eßsúéÓ[Nçúÿ–û¾ú¶,ðX ¬ €ÇZlÉ/ |2 ð£Ø¸…ã8ôðÕóŽ_õ£¯ú룯ÿñW×ú;$E?Õ�½7ô÷H8NË8ŒdÜ€”¡Å=]•™Ô»'xè&ø‡O®xhUÇ iÔ«´èIÐï2ãSÆV8|v…×À žm)}ôs–,#F‡à%cWÚK0.´o€¿TêýcQ:ÀðÓOD*ž2�¯!¬ŸáUÚ'³¡Ã�¹Îœf6Ñœð(Ïä6©_²º-‡lÅ)×\ë�xmkìÇ({T®zŽäžÂK¿[w¯ÞH©rôìÁ±ÿÌQdë|ÍpÕõZ¯á†*³n0ßæ¶!ÇÚî5LÁ?�\� þùÞÍßïVß:F\2'úÇö(€”µ��ßég3û(ß ÿ]¶!#[¿s>i�Ãü™€}Ñ‹äûš+itRŒ®±ú‚�³@l[kUûWú—ÞŠÖÀ[™‰Õ�e�w`\~Øú]ÿ¶p­ €ëýëêþŸ¶àŸ;I8F þ9%à»&ÍáÁÙ´Áà8Bà¤1è‡Z•³pû€Î`“�ßË©?80xè¡UXyvðhGcJæÿžqðRèN@d¶Rÿ¤�ÐlÛ&cÇÎ[`ðV»��ô¢ ÷+í º/ÀÖO—[K¿°�àrácçTø¬PséTmSm~h‘ƒ<¼ÆÆêÚt0¬ôsºFÝ)§�­IÿÓÆ¥0}¹T¹£:G¼KÚë�ås:fò—Ø¹ÉøÊÞ®°¾Î¦Yèd9²¾²¾ñ&{¾×õý.‹Wצ¸ô˜†>ÕÏwžõ ýð>DbÊlòú7�q“58þyÆÿ_™q¶:¶AÃÑ‘„Ü%Aÿ(³gÓQn òÇrú±àËY€�´•–ÞºÖÀ[Ÿ¡Õ¿e�·d9.¾‹¡8ù/'¼ 8•v$yÑ‘Êu'×ÇÎÑ?¡à¤Ð¶Òé'¼d8 Ô�5GGd«\h�#¯–à£[¶H&ø·SØh'Á¿h8|v�ÁK¢½J‰ŒaãaœL;å�§SÅWK´Aêm5G×4Æc.CÛpÊ©c™Æ°|©W�à<>2Ķõ@@›Úò#{¤ÞD&õ€É ú�5#”Ò2¯u “ÒîV:þÜÓu\kÎMûsîCê9ù¤�+×V«lðs°ÖǶ©“9݃¥.ëVý~†ÅŒ9Pd}q–~d³ñ˜S^&t®Õ./¾×  è5!C{#½Ê¼'ܶcLú±æóûF‚ÎKû©³6n3…“<à­l¢>fA;¼ý�6Vz] øšÎ÷±5»¾n–öe�ç[`m<߆KòÀç±Î…œžé =pÏ#þºóŸà?G íŒÊR�¸)8M)Û±j4�ÎÃ…GŠüVÚÊ©‡RdŽ`ê<Ò>мe~üƒíèJÞ®e%ÚÞ0ýAù0ã¤È ó¹©ö)m|ªÿ¡WgÇõ¯ö¡n ˜>‘©ò·�ÆÆ‘”]2ÈÇö=I梄ܘ VFÚX>§œ¾Pg–ÛÏ#]3ý3ZmsÆí¹=™=zt�°ÊW|”»¤Œ­«ŽÑöÃü±.%¯]`3Ñ›”‚ÐøŽæ¨?°ýðZy¶! =•G¡¹'‚$¯ 7á�~ðM´Ýþ5Îÿ|' óì™MË·±b ¯—’«¶! 'ÕÀ~,GÆ‚í£Ê_Šg½F>xÕ¹ðçY`ÝùžýVíßk�µð{í½Z[xóÀ1ˆÃ1âtÞ't×Ã/þË ÿÏ# þ¿èq€+½' 'p’ìlJG£±:ílnÑ‘Ã)­~6BÉ2ÑÿŸñC!z Õ@œS8ÂàvdÜdl§«;ÈÒSSd ŰÓ(è»ÿ8mäB¯u�ÓÖsSkÃj„“ÜfiÛ4ƯŒ«·^u LBWú×êöò&ñ9>«F¼X[Úú±Yx©3Âð+¤.�ÿ˜¡×<Ö©å§]ÒØ¯�º}^"ƒdÆPë^Ч�#ùçÊÌê�´±¼×ŸÈ�ƒ{õcïqÞj¹É´êš(s=%»¬~°Võ5Eeò@ÉV\òÐÉYãÀ¹€Ö'H;¤ÀÃke}?ŸŸÇÎ&€©²h·²�ƒAåð…;UÇ¿’%5Î&›:hÙ�n=Ö²}d � ³ÀF{Pq––>œÖÀ‡›Ò5 e�׳€ƒ=œ˜òÀk½0ï¸Ó îü;ø×æ›üe’u ‡ ×§fœ š‘I`/ô—“DA©ê ^tÙS¹ê:‘?âW^d�'YŽNorŽ…RŽƒ ´ØúÊ@À~<Àé€ú¶æÏk¨äÆï óÓ³äÈb¯àG0kòLcB.uFÞ*/ , || ¬ €�?Çk„Ë/g�æÀøNp€(ÿpõ÷ßWÎâõª‡£„›Ø��œÎ"ƒƒ…|…qV�¤”ƒ©Kª°â補<–CV^Å‹ƒ~Épç?9wÁüÒCœbñ’q¶8\ðK²ŒÊèÉØ±EtÓZÝS EÙsP9‡cê›é�>�5Ö>¶8–èˆ rᡜògNÍ&Ø5¶ÁêX8M±Y©óÀŽ‘&çZ/ò4XñÚ�´WiÁá‘öêÂ;ª ™¤´—ò_“?ê>WÞë[ê�ùÐj]l:xl]a¡Ü95¾K¢qm%ùºKA0ßo¯3”U7x‡¢]+£?›¾žxá+méÚB–ä@¹µé y#¿ûO�‹Qh¬=ˆŽmý7€³78 œÓž»f Û [‘“ÄC&óæzД*ñJ„£lÊÈõµ:Ämlˆ-WZx¯XïuæV¿ÿˆÞûç¹þïý åÇ迊j'®äsàFßtçÿ§Žýÿl?Eÿ)þON”“¸=q6GœIÅ�$ØžAøüäÆu!|R~–gZ æGœrÏoÇ¡kÜdŸjИØñ&…Hf#(º_’ˆ ¶ÂA$W§¯âÒMò]6Éq´É7*ß[Nÿã”Û†[õóŸ:,}^p¥5v¦�”‹sÆD€6Æv$ÛiàIíÃ2²é(r=ÂŒìH£ /ôŠSÏvÊ�å#ÙÌuF<´è«6ŽNÑ|Mµr®/Wi´\kðØlždhºŽüڻƿ"ÐåÚB¶á”ÀYǼ) œ Óºþ�\Iµ¿Ö4ÿ8©3¹PϬêÅ4µÑm.;Øn‚>ùÅX›mb�lôÍ5ÖíY`Éô'劇Vm0)´Z®uBÿ�ð\ûµÿ¿³_«­e�Ïh�µðg}�yYà ðc=ûA&�½VP{­àöF�î7¼ßø~ç/ÿ´p¯ €ûÿûê^4òO²dî•ãá4Jùì~áÂØ�œ@­8�Û)nÐ ÐC'W—–>“ÖÀgší5Öe�'X : àÜÍþZ6nÚÀ�Þþ¥SwÚ¸Sð{«M‚‚c WÈüg á_Ä΂º§ HÚƒ8T¤=ˆ3ÇkÄí¨‰ÏóœÞÐxï„÷ÍóÙøJà¯@ÿJð‹2/A¼ÖÀ7m|dÀïG`@öò)œFrIµdÇYíq¼–M‚o(øÿž €âøy@elûÕ—¡8…Eöü®Ñ- <Ë88 I”}@Á^àÎÿ7eß!ÒÁ?wý þ9"ïl°ÀÁ¿ôøÄ@'ˆU9�DëÁãVXñÈïÁ8Z³à^?î¯þù€ÆéßÂy—>ò¯q²p¥€ÿJwý�Þ� €oâûßÊ œâÝ$^ì› €µ[ð¦e+÷SðZÙwÙpìvï0j�à Ž�?Ðï\Æ@Éçð5$ݺ˜ð47X»ý“%l'œÑ÷MpxÊØ«ã”k*óPÉÆáU~Ê>¨T™§Bz4ú¯5ÿçôîñgôKiªÊV|�7Ê —ù«ðhþ"G]RÊ£î‘^Êý[šÔäÚä:$“úu+ÝÞ�5ÚY4êä®?��À8k†¡ÖT k0|·éZ­}ñÞd¢_ƒ}Çà[a#gɳ!Àx½i‚­¨ß qÉgxµAdF™Ðk“àÁe�e�Ïe�µð¹æ{�vYà" ØÃ1)Ƀˆñ÷ÿ Díààóü?Á±‚ž“¯'îµA€î„8ረn¥¡'ÿˆã¾$SsgNiéõ B#g 0´8i9ö߃6”y©!/ùóóÿ#wÿ¿(øÿªüå¿þk{@c&øçù�ð ÕõÝÿæ€Ñ÷“Ôèl®øø¿` þ9þÏ;Ø`ãäVò²´�lì�8’%ìÁà<Ù �–©fœ>·Ìü1>Ê8—î‡æ•”O2rÔ~æ„ݱ›l›Ç"¡cl:åÝ„M“ÀS>Â#ÿÒ0süÒz/ÑwîºÚãÏè—ÐÎÉTþ -óUǘ¹;‚U¾âU_Ú€zh)‹åëLt_“M6x ×*Á,�+ȺíÀ¿éHð�Ф¬ƒ¬uþî :(Ì5nˆn*IoO¥��ö'ú¡~Åî‚hîi£3&ÖÂüÆPöï‹„�Ø ùd¡N5pŸá¡±6ÌRøáÕ28i¯nê,¸,°,ðñ-°6>þ¯. <ËBŠãà h}@Až�£Ó�(øõ;² è*xæ@u>p9ÖÎdÓUÆ1"᪌8.OÜž§NÒææl: Õ2xwʯ–qÔ|‡]}"èï™»ÿƒßüÏØØäÐwý¯üU¾NПÌ;øGl…ÝêØé—Ssä<áÜê'T''n¥ãV¶"ð×9 glŽÝ¢7v±Î3]–ºÈîÀêÜGeú©F·vÕÇ“MÐo—^;Ê‚qDã„nÍŠ/=NÈ~’Ĉm`ìÏÝCv'�µHlgéá#<à G<ô¡ª‹ôáˆ?«3£½”ž™î=Ú¹ké¿ê�ÉŽ´Z®xôœ£ÍøÔÍÜ�0z ë|¦Í�Ö¯ËÐ%—ë�«s»B7˜ë4tµMž:ý»ÞÚâúÎzåk^keÖ·!>kk:¡M×LÑßJò©…6>úäq3ÑúïŠÊÜñ§\³eSGün/h¥ü¨ªN‘­å·nËôuÁe�e�×·ÀÚx}¯–Þ¥ìˆÉ !’ó@œšoÈ@ljÓ@‚^’ç –yÁ?'|÷_uüënv‚ÿœ ˆS4ÿî}Qª0øÆÙœ0ð­÷§°;e�_ËàôÃwk4? M€{î¾+!�×8òÁ¿ƒ~�¸þïÿöÛÿ¹ãÏ¿#ä ÿ{'°›ÚKòq~µëÌK}÷_¶õ&€„ÿQfñî�HÏ£s@¥sP"ÈÕL5®æÝsT]æzh9N¨ÿKuê|tÙOœ°+ +$ ÊFtóe£n¥:×±]¥Q))tà,Gîµ!ýL_~G[GmÄf3™‘7–©3ÒjyO[•?ꪼs¶ªsÝ�…µ�´Ýh¾Ö­_‹*çZÍ5I“�ÖøþÎà~ÓÑ!d­¹ûïwP†NÖ%N…e€²ƒl�·”°U_Ý� “K$7 üóÛƒ|¾Y33Ô±úåk<Éëw . , |: ¬ €O7åkÀÙ¯ù£Ýú8p¼¥ÞGÿìâVàøp§ÿ‡²_€Ç1xÝ!¿Ñ#’õ�ܽþ*è¿ÅüB`¬Œ³G¾W�‹ ÈÆÎzqíÄO€„Ó'´ã¢%ÅÍ1Ä!k `œ.³“2<õ…@Ÿ—ýù…Â9ößïüs䟻þCö8«ÆLÀï,]Á}jBíņéçX¶\±o¸•®oÒû]ŽqþeN ä%€±GtÏ mÕl¼ÛTtðØ“yN?� ⨺ßÚym¼“vi =ð”\ ­•álR Sa’šž çÝ‘NÆ­Þ?(7[Ø"mܶ¢è|×zqÊÉ…Ø+>97?µ½Qý%uÇ:/Y>×þ9>}©2?âEn„[è)Ïæ)óÙ—‚i³öe¤©œïo¾¥ýšmõÐ ga�†f(Z_Ï‘iü¤ªÌõêà¿áÞç7B¼råÿº¶±ýEî �Ô�É¡ã‰É�?uÕzáßCéóc[‚<¶åǵÄcm%#—ß#×)ýï6‘ )åsp“þ%_ËY‡£Xi‘ýSð\_ûJËË/c�µð2v\Z–>…ø�®¹¬ PoôãLðÌ¿Ü*¾ÓÝñ{ùõ¹|§`š €/ú«@oü‹ð«&«�o.øN�p › Pq”íª žIH€d¨>Ûmh°þ*ÛùªPãÈ?ôóþ?ó/ø…¬ ÿGýuÇß›lrhÃÃ÷×ÿåŸôý¼«×<÷ZœŠ§ßÐr ï`£% xCæÎ¿ƒt«Žu ÖTKÁc?Ê8â½,Üå¦ }s=ôGq ÎxÚ ÁR]V:{om80.²‘ªx¯÷Á‘Ù˜m?Ù*×°M r—móa»eÎ�šÏøcòKÛ˜¹&¥o[éÏ}¦?{=Øã�ôZ®8zky†‡V ç™ºØ ú޽òý@Ô©ÊV<üçÀô¥êi)"<}Sfí7¤ Ù,Ñ Ÿ“VYSX+Ñ—5óNdrßHݲé²[ée?i»�+ŠÇÀŸÇÉØøîmíô:/z6lÉ:À�2Áǽ£¼õÅö‚Ý^­�È�ôÒ……. , |@ ¬ €8©kHË/eœ‚8щ{…s–àŸàÔ2r.8úÎóïß'ø'pwÂ"ˆVðï`¨|Õ6Œó/z,à'�° ø¥á†m@ :xe£ÀýiNÚé�¿Ú´È8Èð€pÍlÐN›x~Ë¿zÿs� �0�*óRCžùw🠀Üõ׸8úŸãþu;Ù™mŽ}œ9[ÐØè@>Á=¶å€³‚ÿñÙhrçßN¤ê�N.6!Ù6 Ø«•q8 ü ø�Ñ¿Ét]Òk;R?m¨oqÔ; "Ê–—ž”�´2}ȼeã�ë&ýÚj¹Æ§ú°ÝÚˆ+‰²íÆ\´rìÔe37{mŽ@¤ÔGuFÙY9óþ\=3Ý—ÐÒþžìäÕrÅÑ]Ë3<´@Uñ¼ˆšÐ2¿Ð<çÍ~•ïABÿKØ¥¯n'zC�L¥‡Ö:–ß뢞Ö'á^‹�u˜5è5�5\�Üqô7™ Á“ûï4%¯³´ÓÊ&¾ôºiC‰OgÑ�“eà‡ÆâuVtÖmè×ÊÈc™Ôj}õw¼–-sð1“‡ÖíÓêÚ> ÿ@íb- , | ¬ €4™k(Ë¿ÅrZp² €ã@ Jâ5'x`îüãEþ–`š _ùÔ£WÚøÉ&P@6:�³! }üÑK£r, ¡·ä@çJÙuîÇ Þ7¤ÜN©‚x^î7fþÚš�þóÜ?�¿à54�É/ýãî¼ìЃ>²t“mARu¼jÙò­º’±«ƒ�õZã¼–²I`GÙZ·�­µA;äfðô££þÐÐiçT2qDmÊôY}rYÐ}òkÈPnõ+Ém ¼š¹~z�`¡Ï÷{ÅFÝ–ØÛ F†ù´ÍÚ\x~šýs­»Nh{p43r¯‘éµôoÚ}¦½_”Sì±ü*_q´Öò -PUê÷¶ºlc:PùdNi¦ÉyÞcGtŽxi§óhä± ½UWêWúY :ÈÿÊŒÃýR]Ÿ @‡r þ³¾½Юóq3A3 Ž~¥\É´g}ôA2¯–ÐÝÚ`Žèýû"˜lá¿À•ý¾AÛEwqRFæLF©Ê¥l{˜»ñk¹‘XXøXŸ`’×—žc;žRžŒ#óSAê‰Ã¢úN±ƒ©®GÉñö| øÉßj€Üq‚ÿ¶9ð“G” ÑÏ&m1táL6—.45¸ÉŠ�Œ×¬ö÷ ˆÎ‘SG¿äO¸�5äÔGßéW?¿*À÷ßü)ØçÎ¿ßøŸ;þ�’ë�¨.'pJ½ T¦ì¬öâlf^Rf �ä€_Ø6¼Ñ ûfƒ�z±…Í„©È²‡aÃ5Âì{#A|CÙHê›$*gcˆ-{¦=ÊÐÁ�-�3ïPÍjúÝ'øM¹däêõäzŸäÃöÒX�¤þÝÁn±)P¼È"gûe 6pRä·Òé'¼Ç¦6¿Ö;«þŒ÷;hçÚŸñg´ôµòfxh#T}¬ w|°y�gdü]’Œ¿èŒ|ÅÓ7`Ú�\å]‚§^ô¤ôЪLpäà—ì`ŸurÊÉ^·„Û@r[W²n";Ãû:“uˆv›l„N’qÑ_=© æˆßÚd|''TfýåwÓÁ¿`6 �O]ld\4§VNñèúغ$h±dptRx¡›¸>––>¬ÖÀ‡�Ú5°e�×±‚ƒ9^848,N¢ãèq€£û¦Šæà_�+ÏÒûÝ öïZö_¶àÿ^Чä8¾7Ы6Ð'&î\¿k¶õÀ N NX‚UZð¾ <�‚Ý”y査úþWÊ_tÔŸ�ÿÕ_»óÏßõoÐx þû¶aìÀà”é—RàˆG6w÷}@ãf€÷+ø€pÓG½M·uÒ°áv>EË%Hðo\í ‹SÊ‹«€)cSެbG;è‚ÐÈu,¦µv™êûú-pì"5Q§]Q•ü)ðq콌Mek_ÿÍ>�׿Á¶?ÂcÁÈÔrð§Bæ7)8í¼…”þìõe�?ÒkùþG‹P®™9,–ì=®4ä{ý±sÅ{M„‹L¥_ŠG?òOhµÜðÚ7—ZW¨—õÛͦ>áÔ± ·5ÆëJð¶Þd# CÚ$ÃG‡`tùdÄÖ/Ðn+^çƒö þ³p«>±Îæô§Ø¸Ì d©G ´Í6ÒF—ÿÀ"~R'ôü~R®x-{ÎD8Y×XiY`YàCY`m|¨é\ƒYx $ø@»595›ËÕÚ“3c‡A�pwô µ;ÿÿÖ·ºë«ÿöþÇ›àyÞþ^2WÿèP°ÛïÒ7‡ç^› væéÉâ?pVÔ¶7€8‡dõ%�>oûï¸x)ç™6&|@AÿW½ôïšgþyùŸè~áŸúȱ?÷È&ã•>rßÀЀÊîwƒ3¼Ÿ�.Žéôüß� öãÿâ#[õZ²IplÄ\ ·ó Tö†B ŽºúE;ô=w¯ Ù™V[à5{<•æV·�ÌQH”yë7ЛÂIÆ�ýú@¦;¿ȟÃNØ Ú ?1Bl1ø9ÈÍÒ}& ­Íãvè�Õ÷@Ñ i¯úäÕò9<üèë_}2”mjÙ]Å^Ífõ;€\ÊwÚ¢NÚlõÍã#üNx"½µ�õðȬ-ä&›q žñd=Éê͵IÙ8뙵/ºÓ}SþÞ Ýésä^ª-ÆC@ïõ³AŽÿ³üƒãx÷à¿Õ¡ž¿ï—q•±WrŠç²ÉU6´¬)¶³ ¯ò _XøøXŽ×—^Äqrg…2(ɸÊvºäTàŒÚI#(nÁÿ�Žõß*ÿPðÿC�4ðJ™ìüó–}ÞÀŸà?Ç#y‰ Á?�؉¤=ÚÀyÁ©¤-åžÀ•½ þy@cßîàXqœFµŸ—ý])ø¿âÿÿýßWߨ g\À–ù[CãÒG_jÀï2´’Ó×Úop;dêvÍ#l*d`vÀ Ø$JNÙA�ÌV=À�ÿo²¡õ6ç™gVqN“쌪?Þ�Œ#ÄÎ=· µ&µ¹b¾hßcŒ,<’ õZɤ±lâ'ù¨cg±‹¯ðb«.WçáÇ~áŸAh—$õålŠ íþŽ”ööÚz,¿ÊŸÃÃ߃¥OXcÌž›È öê–F·x¾.�iå©ZtíÑ*ÿ1xÚ¥NúYÛo™ëµoh�9GkÓ2V¥ñh]ñZYÖš“ ­‡¬a¬ÝØ�5ʼn~PG‰ßÖ}ø¤üfm¥×ûdlÎêKÝ èO_qº)÷ €Ô$Ù>Ø,8°•M¼ðƒ:É©B¹ÿδy -2�{ôð\XxßXï{þVï_Øv²_XçGS7:«8 8<¸_y–ÜŽ!ŽN›‚d²�4•}Ô_t`ÒUï®eË · Êùw€þoЕxl=³œ»G>™@Ÿ¤³Ê9øWÐÏÿûú/ÿÚsÿöU×ÇðSÅ鯫½Lÿê56âô�€¾ŸHY0á[&m¡XÉN¦æÂÇMU6le÷N°ÿ-Px‚hÖ!˜ (´ÃÜzLê‡g;× ß*ŠÒt¸œd&)õÝ2³º“zï™4·Ä¯aod<̃ìrBƒ {%3'³>0©â¡=ŽóU˳v*ÿ©m>§ÞQû3ÞH«å^iê§­ŽD÷÷]4͘!åŠ3§Ì7ó{%âù÷uÒdMk¦§?â÷„Jï—#Eë6VT¶1Z xËþnÓ6™Ô ¿$¯�îM[©S¡ÉM�pNaC'ä°‡¾}]á»]ðÁF@µ8r©ŽyOŒ6èk&›Ø·Â™sêêWi þEË ˉNË'¹õ%=ÂV—d©y�RÏkGëO·½úœŠ¾V›èµü@ño&œëKÇoîÚjnYàÝY`m¼»)[^øóÈqýÁ…†“c(œà:w²uv}snäP|ã(¿Oœ­ÈGÖϺ+ æîÇÞïu§ýNwå9!ÀËýb@úþ‡~t¥ .�5 'ØÍïP¿Ð?Ãyà›‚gþßȺëÏ‹þø‹Cîò'à¯/ú£ÿ÷dæà'Uܼ_ŒÍ6*ÛF3¨±:xh<ðüöeãÀñyÊü+Ävô GY8Ž'Ω!ó©l:ýlí 8!ï¿ÕA'‰ÇCÜFÓoš?z-J+a�bßà\/¶” qì Μ�×Lý1W½ðjy+]öɵ’Tñ-í„÷;á¬oi�7Ò÷Ê•^ðÁͺž'pæ+�oeoâ d¾°lßñ¡¬â&¢äõ¸épy#ò¹]7 â;•>wÚÆ9û™€Ýš¤§B�_4�^ãz�¦Ñ�·Ò/Z肬­×­J©«kÞ�!#œÌxŒ3Öo4+‚G™Ô`/oÔNOñôüI(ïRñïMe2I‘©¼à‘YpY`Yàý[`m¼ÿ9\#Xøã8qä<áèØ¥â��@Ÿïᨠº T™Íþ«·-¸wðŸ²xÐ üü;ðWˆ#〟¶pòÈÜzè‚ýÎ>8ý%¼;’á � èõo�v4Y¸cÎèhxäSî�±F¾áØ�M•lpôŸ;ÿÿÿ’íø«?úI ’þocí©ä,pRiÃYuph©§÷OE'ӄѷȸŸÒcg}Û>©O!²çO´O—šm=òØÈæ‚ä”ükþ¸F�©³—1&¼¤Š‡Váhÿ±Œlh�ÐЛrðsmQï¥RÚžéyO-«ž-™ú@�ZýÎx@sÓ7À•Y—Y§À©ë€-P:kÇIÀøUßq?;.œ:>Y%¼Û\4p…²þöÔæÃ×NèãAç+²(n� ²îô`À#k~:!™šNK›þÎ/²'k‰úwR�þ’±£àô›�ßédÛ1WN­.8§ÕüN��³ý†5üHŸb{äƒs-ÌNôM€&‹ þÃa5¼§¦6Gž3tPžÑhzÚ Ù§¶ÿœz³¶GÚ…åX°Ã6^®oû&èïPsvø«ìMêGgÖIæ»fìI`Jòwœ:•¦1$ÐF—ûȸT—}.´2<ècêëŒV¿ýcÀÏ:N†Xûbýôe’¶ÞmŒ¹ÄÆC_øµ¡ÙFÈÈ.N´7f1j]6Ušô&‹=°+õ7ºÀÝŽhµ¿±ÍÖ`k¶ÉDHöÚ(ž~•Y¡%S¦/)iÓY}è×FpÍ=25q=�kòÈq�Öñ׺§¿o#ÖzYË£'åZÄ#;Òkù=U~ÄÏÕ¿¤£ÎU^ø¨Xuf?Á¸Î-öŸÀlˆØ¾þ˜Ö¹¨t:Xyé023:4œ[o òN’'™/ˆ£í,™;²ä�EÊŽ4:Z¶¾ï´´'>4ë�”þÁÊÛ«[e¬8ÎÛå̱âÇxß�wþõ€Ç €þá_ôrįÊ×úW„åïÿó?W þ‡ ²9îôsÿ‚l°YÀéÙ<ò`œ2óAÖØÙX@žG5D°�où±€¶YG,¦Aê—œ_r%¹Gï�V×vjòÁ­J2N�W�Ï�ñI>±CËÞ�ݲ!࿬ä;!Zrx©³ GóÅÞ#=eÍCO‡XËÁ+DwÊÁϵ×{$mÏT�¼3e_•E†²³Æ3âÞÐÜ$àç{C€ï,˜ÙÌn…uíöuÕ:z_'hKý¨A?eÓD–k p6ž�ñ¤OGüXÙà‘O›¦«l^V™ŒÇרæ‡M÷_86ÆFù=q—i¨ÎQpê™UZ+<úJÛ†Â=W‚Þ0¥,ÙÐès`[4œþº¾Æƒ\ïKè®)×Ë\‡©µWFáv££Ö…{†Ÿr•[ø²À²ÀÛ²ÀÚx[ó±z³,ðæ-°÷ƒŸÿq3g`OÇÄH‚ÿ(”£A=gÉÙ‰æ.¸äœy¡ *wÇÍÎ2ò’ÝÅÅGOtFÿ¯&7:i+­â3yhqs·?�APæÝlìm\± ì m|c@ù_ þoÙ-Gþ�Þ ðoÙwæ°«ÚÒÀ½Ð!㓱Ç�2�T8 �Šï²­7I ‚c{ؤÿ‡2A8› Ì%ŠZA¬‰­ì¨ƒ·Œ®MûFsÒÚƒ÷áS»Îdœ-è— m Yvd¾Œ "ç2p–«Áà_šªÍƒ#K;�´¼êûñ˜¾Eç¨ã¨%ÃØ=É`oìË5l;W\4_ÛðP�rp“~É@ÆÞ]–¶T¦äè7<›\Wäð=7´Õêáag÷S¸Û�ß²H'‰qÕÀ×jcU}ʽßÑÒè)¢ƒ6IÁe�e�·k�µðvçfõlYàM[ þà>'QŸLjg¤9è„N€‰cŸ`4Á^&hgNôèép¤”ÓVÆ�ŽJ›•g´Y;KSúpóÞ60ú€üÙ&ÀOÑÉl°p3lÜ• €¼ýß/T ïjÃç)pÉ“ØØãà€�_pÑ¿)û¨*ýÆn‚v>�-£œÓk#†Ì¿)@Ã=äeÏ™pÚp�„um¿RÞ8/¸…?Áη ò+°—M{ÀßpÏYðÈW;…–2Ú¥©Í‰Åƒ÷páÑFd‚µÙKûuNîHßÈÊ\³IÝR¢�s�&@3ž2°åúõ®¿74_–LÝlª. º×°V®8|ÚNr/%—ï � œà°ÿèH™:ð¡�wØÚ5 záÑ3Ê$·¥ïz‚ýø‡æ €¶¤oýZØÔ<é3sÑûÒ´Œå(§ížXï°)4ÆÍë™æ^pæ€  ç§âð I­lšŠœ#�œ…ڇʱwŸ#±ŒO ½'{¾î~ Ob^�ûÚôSN =ÿƒú¤�¾®š�¨}Òoé{°!�¤�ª»Ûg�[Åe�e�·c�µðvæbõdYà]Z þØW'à)ƒA—ƒ*7GÆúE·c _Ž Á?ϦãØ$øOêu$ç¬ÒÀ“ͯå¦ÄòÚ¥�êUû�í�'ðW€î ‚¼àÐÁ¿‚|ÿ ‚N̸VðÏ#œø‹À_ùþÿý¿«{Õó;¤›àÿ¦£ù¹ @IDAT@{;züœ–�½<_ÍÎØAùȨï8ƒÎ­ß¶•êÅÉgŽ:.:×ú+ǯzoƒõ«¾_,¨64[8(O¦]ô¨L²³I{[Ñôà�ôñ6!Ëžþ™3pÁœ |’SëT<å Á÷’lÿ …ˆÀ ‡FÛ�‘ mT ý9©öáHÏLn¤ e÷L´ôèkW}N°Ì]ãš“ù5èϦkëÁ˜±YÖ‰ c,‡Ž~ìËw—> ç»Ýו8[6/2À–#G¹âáS¯'á¶AYÆ2}M n«Óu<É|¤W'eÚõÓÙÌë °õ k”¿WàÊÞøä{u€›×ä­Yåèg¼þ^F}J–¤ß5çÎ ›®ÌCŸ tK'úÑM]C•=ÖÙXöæ ´![}›$ÚBW²E�•�kRgFÊ5[¯™Ðfò‹¶,°,ðç,°6þœíWËϰ@‹ÿÀîüÀ±…¾€bëü¸óƒü¹êÑc'— G8šŸ�”3•»ç†j·—ÁÛü÷¾P¿¥Ð Ñ ½Â&¹�ý°~¥Gv„UfÄ)Û“³æ=PÐM°Ÿà¿þy�}Þ0ž¸Ó&À½6®Øàd€ô±)tî¶àþ'Á³£³K¨±Ç�õ‹c ñqðq”íÔÓùàÒ­–9úÏcÐÑËFÍ­ò•qƒiÏ� vO–~èéËÅú\©ÍóAðŸ ß­ÜéM–ë¸g¬E¹Â߸ǟí»Äµr’jy†C£ýð‚§OUYd*í%ð#½#o,«}_óÀÖ`²|•øçN òg›'Á?ú°‡rô¶¦L¯ëØlmE¿×Uú;%H°„^aÇ[]Ê~ýÔ€púâï- "ç”ï>P|²OðýnÙô—¢­n`SõX�¾¥eRÓÞçj#–6±3Ií;ˆÆæwÐŒ t ¾c9Õq¾wð›|êøûØê#ÃÀówWm¡×öŠ…=O²èÌGßž÷¤^ï?}G?z�IèVv»¬Á¢÷5Vt®?tí&x©ß Ò'mL*gl�ˆ€'¥ÍJ oÁe�e�?g�µðçl¿Z^xרûÁ Ò�œ;*ãàÈ‘p;8Ur*ãÄâ´Ù1’ wþƒSçÀÅٺМ»(ÅQ©}ÚÃQÞÜù%WË´é¾2²5?÷_îüûùÿÉ{Øð;äç%€œHðÿ¥� øwÀT& 7M8}¶ÃÛìd[AS¶s+YœW2ÏçXoœ{èøœð†°ehÞP;$îü;ø×¦À º¨K;d•IqMü̲� t’ø÷»ÿlŒˆàЫ¼�Ú¬ ½–·Òñg›—©På�xÊ@Ú DQðÈ@KßÀ_"UÝ3}3þHS¹YÌÀ]ntðÿ�lœ¼èOóÁõÍ–M€ á1vëE?å](eÖŠÈDÎëÇVðZG™Ä'ßWÊY'CKù$øT=íè n+kÙó(¾e�¬-¬)d}÷�‹î‘ƒ'Üu¥ïÒûŒò•¾�ºÍQ¤ÏØø¤Mh¤fï(‡zû>y¼Í§×Fðð‘o<ëb¼�†JlÇ5›¥OôÂYòãü�´*O;Ö#9'éh£Ú åôOþkHì¯zô…ß›~-IÖ¶ Ï57ÕtW{Ö.ýégÊ»cY`Yà�Y`mü1Ó¯†_Òë‡æ%­y¹®Ø½þà�–Ȥ DfFï2rXâÌ"‡<ÎMh8VvŽ€-‡¶ ·†{Fp~vÒØ¿ZˆŠŠÏʽ™Ö_²~ô_ÁýÝå¯/ÿËI€~÷_2?•ý@Éòïø©M€/Ê_uà'›Òç¼îj˺lˆ½p4{j öe A%´“}š@õ9M —vûkFáÞÐÆE6øKF^úǼp÷êVø�6øGu½!:õãXbùd¡7_õ}�4yøŸ.i>2ÈÌ��þ·à?Ž~ø'N<óI q3Ï|hÞ�ö Lxá§HÛá¯ý yRåm”ãϱþ(}ÄyCÙÖ+´\£rüûî¿æ†—f'Øâ{”M‚F6TÒOð±¿;åqMÙªë»Qäùž$�ùû­ïÐxƒÁÙðæ£dÁ ¸3‰è§.íX߀‡¬ò‡·Ò²À²ÀŸµÀÚø³ö_­¿°øQzÏé­÷¿þèW;§ßG?ò#o,G_Ú€?fdB =xàŒf¡á#r�3–ˆ•+/xtå”zBóÝ~}²‚õ“ÜèÜéïÁ¿pýoÁÿÁ¾}‚}þÐe‚~²ê³A�;qÞÀ!”ˆc ]q0‰Cë R�cúvLõÝáÛCàâ@9÷77 <ä O´dþ) 8�1-�ôSÒ‹}¹?8�i!C¦�‚¤@èÁÍx§»c�œ€%{^d‚�dÿ)Ù^EÑ7ândçCv¿(�rc%ÐÒ‡àU.¼4Xy¡=^Pß.rÍ⽟á}­‡L0•@ßp,k^¨[7¬ š2øsRf¨j©:Yg�á{FÀNÙß§à¬�ïu�þŠÖ7ÄKðÚÇN]úNÇ…Ãg,†Â#ç�GÊ’ñü '¹Þ†öïp¥5Ö³@ôÅ>{ÊNÖúÙRÇ'ãåûEÊX™?ø‘Þ’eÝFÞÁ¿ä²��>RÆÖ·%ÿ GœMW_#‚Èúº�Öè@úéßÕÉoJ-sÝñˆ—O [¾o�w´äz á”&_¿"CÝY}õ©&ô¦o{8òðÆ”z#=åY�ð.�çêŸkÿ’6–̲À{±ÀÚx/3µú¹,ðF,PÔÓ¥Ô«?ÂüàÖ2úf´Ç´Sek›UïøC?ö!:FúQ9mi¾ãâ 9†Ü}¡= �ý­÷-Wš_ø§úžLÐ/H�í@[å/úlè¸?/äŽÿ•èæÓŽ2lÍ8Ž.3(ú¡ÌfÀOìÿ8�8¬8—Þ4(ŽŸ�Z:ÑÈÈ9p`@:4¨m µ ߺ¨ƒƒGV=^Le]Âqûr’#N­HÛ¼Ó/peô$Qþ� û”ä±c;ìÛa¿’±£ø5=�FuMô\нˆNjZIÖ ¹¤‰|éA¤¦°h™òCå\þÿì�‹vÜ0Žm“ØIº{fþÿ;ïkÍtbÇ÷ì#EKUvì}"ØwÀ^A<ße!øXG_%‹|Ïó×­Wú—ký“ËÀ¢¯Åcðd˜7�5®lúPûz^ÕxÎ!Û�þWrD3Ï’ÂK~áe�e�—·ÀÚxy›.�ËïÆ¹P÷‹w|Ê;ÏÎ&ŽGK�åµ*?EÒŸ¹¯écøÉ÷ÍS%ôØ�“ó6>è§@Ûwÿ°ßèî½áÿý¿Aßï–;úÍé í÷íÅÿ¨»ý<îÏÇü‚G �“(Á¹úqBÓ7'NvàÝÝhKÖ¯ˆ—`ÆcÆ^röpz©cg½Òƒn’Û(Œ>y;ÊÔQ}C9 –Ç1V?T²%tÄ tßh}‘{‹[e\Ø«vÂþ±!˜røÔë²è ßÓœïeÐu ;yak:ÂUá¤5ÚªúŒ‡²1®ÑÀÆ;©—6›ÌÏ�]ghϵ²<ƒò3fbÏÁït+ãÜð×ÿ…³îçŒõP¿àgÆò³uè¿çDÙ”>$¹LŸWÂä æ°‘�—°7…ð{-£¼x_ÛTØtÕ‡ç9IcÐ:·çD®S΋¾ï¡Š«¬ó`ÁŸy%ú$„޹�9…S2Œ[6vŽ�…9O³©’sÔ›w* öü‘^�§ê¢ ‹ÙîZÏÙ,öæop=åŦ‚mûÇÖÉK�ïôk­e ƒ7Ô¿±fˆf<#/š¿oýüõë‡kÁçücÃ\'Ô®þØõÃ�Ê™ë~Å@m2_'ç�íˆÎ3‰ù˜ë,b=ßç*2=Få*ZXøI ¬ €Ÿ4ܪ¶,°,po�\¬sq?ʧÆÞ~�ù#L;i³Ë„?cdÒ7è^·ó)KÚãïñ�·$ç‡ÉïûËqó]ìþÈŸîÚßøÜþßÿk:<þÆÏžœ.c¾FèóÈ?Þý‡Ÿ;Ev,qÌp¢À• É1fMúˆ»†ãé»}´%ޱùlj� �…G±Ah0ºÝt«wr¬µ!%’ÜýhÃIeôs´'æýhJæµ¢Œ1†Êš|§z†”U½!ûö¸?"ê]+@uÊ‚;º�ƒ¹€\?fн.U’º\x{ø¨>².“MÀŸ/ó›ùÏüJÞuvòžƒÅwÀ­c’zÆ•w?T>Î�FSö;RìÀØ9&äc_Æìs“ã#€Ï±êÁ謑ɣõ¢ÌÍ¢süf°”µ”œûHq•%Oö¯Ä¥�¹ çϬ™þˆ=P¶ˆxcœ¡µ†"—`ßsû4wÿ37¢—5�÷±&û£¯ZÓïaƒh¾¯b{JŽcgû³nÓoxÒÁcÿüÕ®Ù¯|Ö`o&J.ãÉ/}ù¤»ý_þùO›×_þ¥ÛdL þýQRú@R]úà ��sñ—¾2¿H3 ÏëzWZXø%X¿Ä¬Ké²Àû´@›~aÇ{óÇðödÎY¶;‘ oîå{¼^/tÇ©Óy¡Ý–1‚q6¸ëÿ]A=ðMÀ�‚ýÛÿó>Ü(øgÚX4väºS×h6¸sÏÝ!¾ºÚw‹JGÌ)ÎUòbR‚CÇÝ~œNÓÊsw?žÇG%8`œEä)3à\V™Ëâ[§ä�·ƒ‰ó È ü €Ú&xòS´¡äÀŸþÔ…Ðý¿Áä#•±�qÌ=fl¿ìˆ­ûÓØÇò{¶¡Þ¹Ôæ…Å’¦&ÇdÆÈEkpçAçØ�=>˜gÒX+ÎÈìynLé/63­ò,~xê˺§yê$¸OÞòSYd‚‘!ÍØÌßôC˜îÁ­Ý”asÏ0ò ÷àß|ʬN•÷y �<ãfŽF¦ì@=Ïßð¥ ý)m'ù”m I]“ïžëϲi~dÃKÞuÒßôf§5>׫qzŒÈ�§ œs·xÌ —ÊSŸ¼¿þ/|MÀ­k€¿í"ÌS^|èÕX4×_è‹ÖJŸ£¬™Ê›OXgÕ¶ƒÿÂÉÓ'ÚLÿL7Þ'Ýùÿúÿá'×¾Ò饟ÔçõêóaWÿâ;Icöøè×#R— &1göèG¨]"ËËO°ÀÚx‚±–è²À²Àã,°wïöhy,/òG8ND/ï¼™FÎÎiUH{ý™~Œ uÐë;9rÖr÷ÿ›œ8à;øÿøßÿ{ þöcý8@¾£ÒòvôØH°,lZ<Ï’MLl™FnwØ}÷_²áÐŒ� ÆŽ!Ò匹zÑ”!ggRŽ &¡û °`§²tXŸø–‹cZyÚË&€{MßÓôp mwøÕT¿…4lÍ`46Û cc§‹‡�]·—¥^ 3çÃ?Âe÷¹Øö³cÏÁ„OÇH4ãðX(¨„\?ß`G&:Jôñ¨úÜëC{ŽªÌ˜üúÅã]ìÜÅg.&ˆ7ÆÎ�g]â¹ }*Ðò"Í“�ù‰V™#n½Î�ÁSÞó'Yd CBd'o6À“�¼eÜ`tSŸ†”Ü7aò�îeнœüsRÚAÇÜ�èµ-ZÍg $ñSï„îeÔÝlÎÜs=ôXÿæ îü;è×ÓbüÅ«¿õÂ÷^Ÿµ¡œ ?`ln>ê™»p­¹¦‹çvEƒ9^ô!O\i€ïÐøû5\[¢�ï èéôaÎ�¤œÖ+æÑœ‡oÛ¦bÉÂëe¡£'å­Ú"—–^ÀkàŒ¸T, , Ü[ p8¡s1¿—º§âœ“¹—¾L¥M$gÞÜ^ò”í¥'÷K�?þÇ@=@ðÿoÿß¹û/ø¡»þÞPðÿãý¯·…Ù èÇQµ³(lǵø8zvªé,¼)›4ÕFÃ㮎AzÝ–hï‘ÅY ÝqœJKO0€t yê Ä–ãiÇY6+(06·SãðXÂ+Ýʾ�ÄØ“Šö±m›5lû!ƒÝ°*£~Ç[îi¿Ì%¥ž_-?øðT›¦}Õϼ9Á¥×ôc§>™Â[Ës'›v{QÎQ÷…¹¤¾¸¯Â9(ƒN°ïw±)ô÷ú±³}t„Æþä hÛôFŒñïõ ‘?‘F_Ôç$(æ˜Ï³â»×±ó1$ø#ßÀ|Õ÷]áÆwžµ}žÇ4š¼ä{r?Šœ„ô¹|䞃gýÑe~õ×½n}ã’pFt‚cÓŒ¥�×ÏoÿšWÜù¿0 ¼}÷_׋;‚~]3>êza,š×øËÞ}€'º¼ÓœtÎënÖú*§m¾ÿ@ÀÑ×zïßO!dÌ*ûXÁ?ßðG« ;ù mÕõ¹’zŒû !ëóSe.;P³ØËËÏ´ÀÚx¦Wõe�§X€‹ßkN—úÏÅ;éèBOùžž\ø)ï4ùç¤ô#:.å»\è¬1f”c¼ÅKàÏ_øñA¿[9r|åŸGÿ þyìÿG€�@ew�|*Ù¹jØ�KËw™™}£@©ç¡‡nõ½ì8ñð)ß±7>Ž>t9|ÎèÇÇSÎ"ïŸò_ÓÀÑv8…ó @6 zþÄYEWés„s浜7²ãÙÔÆ{36è‘*Ÿc5cä<ï$çó„91ϰù8ú`wä)Çþ¢]'|‰XCé,m#±>7€à}[°è�Au™†F�ò’º¯#:}G«Ï p€þŠž“yéÇ\x”WŸèËœÒ÷,!Îixc€1É^{yË"¯òд“ö.­Ⱦ…äñÊŸŒÝó»éx± @bŽx>J–yšóÚÇ?ó¶Ïc*Q7Ç|¦)'Uù$�ä;<¡¥þ±!ÐóCqÙ�üØÍÜ9™s•Ïf�øÕ5á+Xð¥>¼p§?wüó@ònŸã cäcÕiñè wÿ}·¾èlPæ 0®KøZ£ÙÄå ½”à±òz­^¸ÕÓüUàÁ�hsÉ` ë   �Cý\r?Ïü ËüÙÃgªýö¢ôï·7¼\x ¬ €0âR±,°,pj�~a Ý1Ò¹ÀŸÖ<Ÿ;W'úÏkØJ÷dá]J´ï$ŒÓ“ÿkæ=zò|ìïÐÝü[îüë¿?òW�ü³ @ðÏÿ�uÇŸ¯ùóÑ@^z0¯šòôòÓ¿8Ç{8:( M›ù üáS^ÊŲé;Irî|—_N¢�E9�ßÿ7üÿÀ‰$ØôûÎ?X¶âÑR Ø4vÅqŶÉ÷²ðèÄkMŒÇx§ÿ'óOr¶ò²•�9¢d~9ó�vŽ325—¡Iä V’ߘ•£ RaúAÿ<Eg œ²Ìª™®:äÑF¿ÒÖœG†äò´½±žþÛÚMåÞŸNSžà¤a †Ræ1¢w7ñzBæ-%Fã¹f`:>ŒÚ#­ó““ù�¬AsÓr¬ƒSpÍ[Ï…F{ž!S`ù–§Y—™(;#CÖ¿ÛO¬^ò9â§ü1¸ëô9¡~ð!¼Âm“RŠ]HîCÑä3Ï<•Çn™�׺øÿ£6Æ@ÿl$ØOðoLÛØ˜D[Ç*taÖm?þ¯<ý &ïñiýf�F–ïÜh¬~òAǘò÷€·‚‚;@å£ä±  l®y\Ô%/=îÏÖÿž;ÈÒážÂ ¦ z¥e�e�çY@ØJ˯Ç{ ÿïõŒèíöt¾`sa/Ç,¼?a…ôå©mãžÐoèON—ß™”sÄû›þ«¿£'ôžÿ*÷‡�¸Ó"‡Š¯ùóu\Ü;a8n¸ÓÊŽ|wŸBwœºðÎÑåN¢z8ÝÞÀIøÎ‘Å[Aýñ€‚{6Æ�dü­aÿ8z€(,gÑ Î,eÁ]v«ñ*sÌè|è��e̱C9ø¾ë/ž7aÊæxØn²ÇÈyʪ�ðFB'iÂHžƒ’ö#ËðÅ‹LÎaç‹/‘1WÜýœyªö¡•NsïÜ/mž¤[øé2¦Áé»°ÇÑ0eclÈ °�ë$Òà¦ob½þ,ãΜ`ÜŒˆ<ü$Í1§²Kæ?s°þÙÈ9í2dÐYò.‹v[”)y¾m¾¹ÛOz“ys”Oä"Þ9ÜeCƒ¹Ã�Ó| VŸÁŸÁESž>a³ÐÁð°^Ÿ‹¡™WlLOpç?�'æàäÕ¾�•tÛŽ•‡¦�þ�¦ÌcdmfAN}½Ñظ>ñO3þ‹Âý미åog›ÇÀÚ-šàŸµ‰¿"$Ù~äéÛ:=OÐQ4˜?´ëgY`YàÉXO6Ùª°,°,ðX äÂ�|èŽá?æbþt=5¥/�©‡,A?‰þàÌæ�‚€»ÿßkàVwùýÁ?ýùÈïüóØ¿‚h9S8X~œTºí vÖèÍý)§Jüž7+Xb'Ž(rå`Ú`T3-ÖH)Ç:�vðØðûþrô|Ç¿žðSr"Ç+8”8ƒîúûXb?Â-¡W6tÐ��Úë4ò¯49ÐÑx°3 ¼G»,v—pò=zñüƆ٠°mu\8^ÈÐ$h?t’öpõ9ú–w•Á|¨ì$HFÇ$ïãE(S:Ái¯ñ-ô?±#ªçBÊ=у<õ)+»Ò'ñݿʦ_s#ŸrÄ못¨Ë‡î˜µ’»ÜŸ ¾hÝfà‹L)mÏvÌܳí$OðØø¢k‚�Íò^àé€Ã ì¢öÓW·Wdžþ��õ �?Ç™|žàäî=}¿UžkÓ®ojŸïÚü“÷ñc¼Ì‡ZÛ¡yåËÇ\õÁl ‹¶æäyT6KYçíÑðHè�º / , <Þkàñ¶Z’¿Ñ\„æ´ûÙ"¯#tμ×ÝÓ�eŽø³Õº\/ƒ?'spX8@Ùàkÿ7rŠü€œ¤6j€¿ýËWÿÙð;ÿ’WÿløñQ5؃þžMŸÜ�LYN)84uø÷�dIigËU0)»ØqÔ9ÊÝ‚>þþÆ&y~2‡PôØ�Ý|ü°aµ1œCl^N§ŸŠ aì½s,Ò§×€ü·Žb×=@IJŒ™ù€-4vÏE9â$l…Ý‚)yÑ8ôæAãœ#k–äÐK:À´M[Ô!H¼ =Ù H¹ûT²æ]-lÍ´¶:ß…ÓÏ¥òˆÓ·sÉåê )²‡ßû�ùV6êμÊSþf¶Ð<È9Û‘ïs“9f9®ÕœÓ`êÌÛÂ'tç!C=AæRd½”�ÇœM¾0ýÊœ �¾–È6ï“y$î: Tg�Ì]ÿ¯ê7�?ø«ÎM`Þ Nú=RÍ£Þöô€®úÙÝßÿßÝ�MücÇj Ç�ø¢é‹ƒý ³f¸ŽÆàcQÇÉO·é:Å5˯¶©O¹ó¯*›n­ïü;È� üÝ ²õÁs§x—urÜ]_ȇ?ó.é{©ò´ßõíñzù¢—þV ¬ €¿õȬ~- ¼! ä‚ý”!å‚ÿ”:?+ûèþáÌ(Ñ7žè�ÿû€ þyÿ¿mðÀ­þîÏ_û—“…õ g ,=W`éÄÁh¥ãÐð·l¸Ó*©;�¡Á@tãô¡·ã®_EN½¾ÛÃ9“³ï'ü~ô¿ÿù`Þÿχ¹Sä㊓( �d"äp⬎„\—¯ƒèŽ/4s-vöñ->£òè‘­±g#€²~÷ß6”ÍÀ>&±Ç=è‹oYÊÑIÚÃUŸþd€ÍXîþóUpxîáÑïÊ[oý´£;Ø{¼Qø„í6é<úXe9ß�/~hD:í¼dÞUŠ­˜#¢9n±@æsË|dj2§<µ¦= Å#À7h½#E7 =#QWú¼9³Úó– ÷)tô¤¯TOôcõ÷€5:OüÿÐX¼ �”¾�7��*�= aJÙø¬ ÛA þ³ pŦ±Úðy î´ôç˜Ä®VûцhÎYzɹl\|h‹,½µÇ‡ÿüï4zߟþ™/ÚðGþ´îüRyžðÊFÈ&¶­3ÇÕUk=rnûɼ ë(>˜Ä| �º / , \¶ÀÚ¸l£%ñXàh�?âÿ]^]8°Ç,íàÑöSdO*¾`&ó�¾à�< 稀WòÀ<à�ÿáà°9ðÆiÂ= àÞ@w§”!mîÏCLY\ÍàðȨL[ÜcŽ^‘N]>e8sy ßtèÁGðó€Üý÷k'ö#¹m¹@þ‘*°LÕsåWðÃñ}�Äc1ö_ò¦±ƒ’|ê"‹“oæVæ¹W—ﺪŒãAKÑ‹¸í¦úæW›±»íŠ m4L úsò€Úä)·QxÞð1²Â¿óg³`õ�1LÝdl+5 ”=†UÈg.I¬ÏoÏ$æ›æ+2ÁóÅcÍdž°ñi𿔝™¸5®2ŒÊSw+ñ1ƒ¦O{<ÄRMšó÷ü/úgàœðûÿêOîþÿSãþ¥µ«o Ýýcü¡ƒk<[É&Í�v6®kÀ�ýÃC·àÁ€ôôM€q>×që톦û’1V~ðÔ†¿m£ñð˜¿ßùç±¾ø¯Mí+õ‹ãé5@ëÿGý ÀUmðï þÇ:Áú¥¶ü1À²}yLÊù˜u‹|Ú~Œž—”I^RçÒµ,ð',°6þ„ÕW›oÖ¹`½Ö>·ÿ—êï]ȱU.æÁϱ߯¼@ÛéÄyÃAø½9E<ùM�ý—“äoˆæ_pšü?ÎÊûã’ëN¥ƒ, Ì»’É#½‡Å6ÃKêÎeçÅéC7tpä‘…Þd; »—�ñXä°4Ú‰æn2´9àM�âñMWß冧:Oôýé lŽÜÿ8ÎH·!ãó±®q¦Œñf#Àº¬”l$ì†}$ʰ¹Ï+ɰ�´33êÐ'Ç®ÓWÒåã!þú_!Á˜Þrzîø¼~—�l©f/òY¿½ @sž9Z4ó”9æ™<ÑC²ÕuJž9‹Î�»õyÜhŸ’ˆlò©~ò÷2è@6kýÑ?õí‹‚dà|€þ‘l«�p>%�9�ü'é¹Ö5‚@›M€¼÷Oð­ë�Ÿ“\úÇ¡¶é§[¯>¸ù­uÿ¦íÈåXÀ‡ç¿v”­�G‡tú‘µÏ»ÿ¤[ù<áuÅ]ÿ€òESïZô� ›>ÔaÞ±á“Mx{ ¹a·&�y;æ6(Ù”!¾W·©q�žŸé®k.[ùe�·f�µðÖŽèϲÀ+´@¿˜ç"Ï0:݇ùðæüÿH&²�ÆrdüË!â£Hüßt·ÿ›‚ýo|ð�;ÿ¢oåÀÙi’ó„3„óHAÖDã€QvS�fzãn¿vàDÃÝZßڀƵކt:¼`6)  wzp„y ‚W¸;ÅGüüZ›#ŒY`9Éòt¦1tå�EÃd­1Æ´‹ ã%ÿRŽ}5­qçxuL Ã¼ æ.tò¡�—.ÆïÍd¤Ó)X¶F·þÐ›Äæ³@½J¦’/œ÷ü{àŸ ú9Ct-¼,pbæJ1ب"`ub~k¾f��Ëü"Èôú,9oj!/¹AÃgžG4@ö9Q´y�¶TdÅý‚÷¼Æz@:Ð×›µÞ±æ�»ôÜ©ßýJÿÒnåCõÚ:ïÿód›º| 糞xjì¾é³.y}£]ú.ÉÇ�6+…ïãf+KÝ`Š:=Uù-Ùy ¿¥ÑÕȲÀ3-°6žiÀU}Y`Yàç,0_4“ï¸k¿óžJ£#iÏÁHÙŽ<‡•¯"û½ÿÚø·>ð÷]ðCŽÑ­xügò�dìÜ⼕RðÐ;ÊÎaÔPž‘tš2Rܩޑ#àüÑNpçASÙ`±6y�GôJcØðã¢<êÏ€€;UqZý­É�à_4�>mÏø\ðOû¯&iŒ$›ÐÂÎ7Ç—ù¡ Êã(‡&ß mÍ¥ËE²¿ëRO42UIÈ'ÏÀ8 «on·äüS—:và‹Žp í-ü~-�ùi¬¹A2ÍÜd®1WE'9ø—ó2Á¾×YÉ%O@ÝiòæN~`”S–M_Š×Jƹ5óÈÓïmÂU×Á¬ú–ï¶Œ Æ<ºÏÓ£Œ•z Æ5Dº} Hn“uS× ƒ®ÞŸ6÷A:O°ê§¯VVúBƒÑßyÖ`·[t遲ì(Ùê߸ãÉ6ÿ|èõ›Ž'Oj±–óDܽà PŸ]Oeü% ߃É&¸ .üd�‰Í"^pÚ/r / , œ·ÀÚ8oŸUº,°,ð -Ð/â4“üž»™ð{þˆŽ,™žfGc.‹<Ψ^6ä ù±îþ+øç èOù;%&‚b9Cvؤ÷÷Ð+Ê�°ŠN�ÓÊÃO©#uÜ=ôãü�á‡9œÄ”Q=ãî?68Èרx<›0V‚ž�°��“³f¨vì(Nt6h3)ý¢ìôHEâïÄv”«ÏƒÆa oÂŒÂA?A’æ¤çY° §Ñ—.ìsR"[»~ô‘m§;As¾éΜ¶ñ Èòô€Ö·Q§éÙºyÒX+½7 hNŒTó”ù6R›‡Ì#þâ%À÷¬yë¼ê³aì<|tSVtç;ˆUƒ~Ú…rRð–çM•Ž|ï"Fp>9×— ¸Oë=ës[ô•6…ýôCÑðh³�1xÈò>¶7°ÖTÖY·)9¯)…sMIßÐÕ:{"ÏZŸö©—üÐ!ÝôÛÇMí:…Ç+[ÚÜæ‚6süßH†Âá©7Ž•û¦cÌÆá•äÙ(ö8é{ŸjÀs�6vRd}¬«<ò½,EoÚ /â=[€yåyVFs”y¢9JòÜ%/0ͼg­`Nvþ€‡žl˜F—d­Ÿ2Ú* J<÷¯øÐ$ÊC›Ñ~rþÂ2­vü„“Ö9ÿÏûúŸ³ rýô§`äé›ôxœÕ†óE#ÏÿP衟îG�…q¦�}lQ9Æ.FÆ fÝŸó¶úè7Ç%¥ßǃãÄÆ¶‚ùÏqŽ]| `Ó úÆ�¾ à'¤“ëAÖT÷¾�]/(šò^Ö󡻎Ð;ª~ëO´ù˳¿y ¬ €7ˆ×—þ~ ä™ |òsÏáG†²sùse³Þäç:áwLûý¾ð]A?wÿ¿ >Šþ¨'xWò#wräÐÙqS=‚Ùs€ÃEù9l§¬d {^Y';€9h?Ú8¢U4êD.<òþ5ÞñçΛ!8~þ[/aÅ>v%ãã…ÍT7¯HjýÜ9Ê@Ú£��ÿµ¥›#Ìx˜o0œ™x0vÄá¶ó-즾R‚„±P|Ï[9í~ÚGgžö¨Sàã+^ü?Á6hƒD¿“:ÞÂïÔÌ©šŸX ³Äó–<�£Ê‡ ²Ìßâ›®uÛYC&ëKÖÏ?µëMtQVÉú’¦$úµGÃKŸ‘K‚GŸó€Ÿ~Òzçoü ¾ðÄmkýs]ëà «ô¤Ýš~£¿ê‹XziŸNŒÍ½ïwôûA{”S+A�|õ�~ø€ä“Ž�×xÿü­+ë�ë"£r6~Ù ¦.ǃàßwþù×d�½�²–ìÉÎe=:ê©?óRö+ñŸhóWŽgé~»Xo÷Ø®‘- ¼: ô‹g€Î{ꀨ=Ô�ó—ôí98™y 0O\ià“6>É!äîÐø0ž¬K€c†Ì޳×1cH‹¼�³‰VöQÁ?íÇUë˜;ò8�þ± §�»AüW<›~âGÀéØ¡ÔøÑEðï åÁ\„œ¦ß üáóÝ騂²¿>iLN8Ç)Yæ¤A6tP^<1Í÷äÀ ™0i ™ÂèÂf8ë`ë©ùè…çëtë{ä_§­#½|û`¥e�¿Ùkào>:«oË/l�~Ñ|aÕ�R÷Üöû…> ÎüKùÔ{ žuÚÁÄ¡‘SÇG�Ø Àúáùn8Ž`Á ØãpÍtò—pœ¿È%ϘâÐa‡’³³W}/õÓ7tÐ8<òäöïìÞ­’LêÒA½~9i¦Æéd#à»°þIÚ8›«Øîø¯IcÒ8ƒ�yÃŒ�s 2¦‹—2ôŒó¤d£{£k$õcÜm3ó‡”yÌñÊ\ôqIŸ„ýÁ.pAïŸû,þJï×c^þ¬ 8Oú*:³ŠùérÖL•‘'è7¯ÊX¼v©¼ÓÖ�¾Ô%…‡AÚs¼½$~‚]÷C2HFú.ÝÖOŒ�õ_׈eê5�½'}¬‚ðÀ{�úiƒüL“/tðI}Æ“TýæÕ.6y?ò €®uØ |×åƒ^àpò¸\Ù,w=tp<ãÌ-Ï�´ÛpÊaÍ2)ƒŸy3óšªE. , Èk`Mƒe�e�Wc�\Ü{‡g^¿ð#—vÈ(y½©³¢;ê2ð#=÷z‹^X¸·ÀÚ¸·Å¢––^�rqï]�CG€²s¼^74u{Ó8%åüá’âhÙY¢Î ß5îi×)£,2�?Ëõ|îˆûî¹êàJ…‡�Ðãà¡S^4uÁ)Ff�LÝ[§ìDYÀï”W/upܳàGÎq þ<@Ðÿ¬:«hÆCBÏæ.n�ÉSþÛR;Æ8¼ô Zýí Zc¸É¹^ÉzÎY ÑÆCÜÇŽtϧ_Ñã¾T;Ù� …²ÀægYà—Z`Ìßš£Ìeoèürß‚Gÿ’cmN°ïk€‚Ìä™ÿ�&o^áä;¶>Ê•²f’Á¿î€ß²ð� mB°æ�oh¨>Áî/eêcO›ö�3Æ\‘ÜôS=zÁ3½Çóš-Y0zèG>m…N~ý5ÎüM!ød€c!™Òi[ƒ•ÐçcæÜéO®Çp�d(ëräWZX¸l�µpÙFKbY`Yà/³ü=‡ Ž@/ oB—¡,rðMã´¨œ™àÈÄI2Fžúà�gýä!”Nê?"ß�=è‹&8N^äx‡ž`Ypg‘'ivúæ~!^èàð;¦=oFÈnÙ”è'G8�Ç8ÎØ™àø&ÈÝo”î8±ô= ÞoOuÜÝn£cM¢a;óÈO€L䜯Ád¾UöшyØõ¸"<%Úà8qL 箿7`QpŸ«žÐJ˿Μ•¼îŠfþ1s]’à_<ó)/¾×tÎ :Ù0 vžó€ó52ä‹öÚ_åÛÙ²u†;×´Ïzu«öþ y@þ7é`­c­ø'øgcó~d*ÖKÊH} EyêC“2ö9?ú¢qž\ód? ûÛe—èÆî¦ Cc§™gÆÁOä{1míñ»Ì¢—–ÖÀšË˯ÜóÅÞÜ4¦Yf*Ù8ÁvRpJp^À8q€jÄù¡,ô.Fö@'"×éð‚qÈXó±¼`êQNðyx$Ü­ÍårÖ?ä#&%ßéðfL[æÉ&ÐØ ô>BÓGev¤ƒU‡Ú޳è/¢¿³0^í UurǨ;°ó¸$öKcvâØCöñW_I‘ñ|�¼ç¡Æó e®iÁQ?¬ŸÅô)Éí(“ömSõçä ú3C,¼,ð«-À9Áù$œõ‰&C³‰æõY2Y ¼æß´‚O°7Šv@ßxø)#P¥MÚ�ÀŸÍH?% ¶9oè«»O¨ì›Ê¸;~]mðw¨þøzè*s²î™©<ü²¶{STrYoQ“vÀ¬‘=Ÿr0©¯¡{mQ7|Ú ï¶5Æ�¡e·<à5›Šoƒ9ÜùGî`®Ÿe�ßa�:7hÊgGò5‡Ý…>·a(?‚ÿ :gKÇ9J°jšzÊŸ¬$Ô¥=·ÐÒ�µÊïÿ‹ï×T�MKÀgúüëŸô ›kè÷ùXXhÄNbÌ{@�¬³ä¡#ßÛI€&�Œscù7rCÉE>uÁþš¿ì1‚ÿNË.=øÏSç6ПÀ]ä³RÖ®(Éõ<ù…—–6 ¬ €5–ž`�ùâò„ªKôøÓö�³`¬þŽà_4N ŽbOÎÉùqwº �ÚG1ÊUíJùÏ`”Q/)tpøàÎët—é42†r†¡sÇß*öpœ}GLŽqßœ`àP9ýî¿Ué‹ZV?écïËOÑ9~g*'àG„ñ‘àyÜÐ�'c5h\žßÁÅÇI.OæÎø#6çá£Ù�2÷>о€`?}ö¡]ï'ûDÝ•–-ÐæÕžÌý™°W*çg×Qtê9ˆ„G*LÞwäáU]°¨¯ÓÖ�õ®/=Ná+óC<à@yîüóÖÿPGewú[@àƒ‚ÿ�ŸØ€V�¬çz#5NîK£Éèó 8òÙ Ç æY¨—|èð£³c‰;uÞ��ùŒ {c+@yãÊcÛ¬°m.[³IÞ›-èÁÎ/�<JO×Ùù{ÍtÙ½òÅ[xKXoéh®±, , ¼¸p–HàÙ�HYÊÁv€L<ü‰üvuT\:ÀwÓ9x‘éxÖ‹üÜxI)#ß锟Å8İK‡cG^@°iç¯+ßÑŸ;fP…©c@³’¶–ÿWã1.œV5f(Ö4ý¤Õwî$º¯Áá7ŒìϦ{‹œ¶éöÕ¦ïdÒ–îFrG2¶ ýtõŸïÇÏöÕ[xI p®åœ`³Ë) @ë�ë:N[¤tK©ŸüÀê#e2ÊC`\Ì›CcGŸ ×Ó�íND6ó«ôþlV½e�¿Åkào9«Ëˇpl’Žè*�$G£;÷*ÄO¹¢Ïaë+Ù™ÆÁ èÇÄ%ÍÁ?yäÑÜÛ­âÑ·™&ÿœdg2�&Xʼ ›dr—œ'(Ã1NðMùìZïs:öÔºôWu �¯ãôYG×ÁCÃæÑ>åOH{Ç«ó¬ŠvÐK€_ð��•öme¶íÔ×B¿–è²À·@›Ã*Õ!æ1ç‡Ï2Íy'ņ̃L¼´êœf“ y‚ÓN;X—ô±®ò×Ö+쵕@ž»ÿ| ÿWâ_ÕÇ“ä97ý„€ôð¼Û}i5 Ⱥ¿·@_è_dƒÅrßé eཔò”YŽþ’À?  ñ%ÏXúcÿÜýÏ[ÅíwéàÚ™5gï:Úë=…ŽÎ§ÔY²ËïÁkà=å5Æe�e�gY ÜëˆsbŽKiî™äÓðœ¿cdö1øpð8z8ƒ©ÇFˆ¸ë€î©çÏÑ³Žž·³…^6ù Ї#m;6Ç�¼7¤æo ƒjàIþw¦Ñ^µ{ÒñzÞã§¿ôÀÙoØ�¹òðH¶‘©Çÿdô[í Wm:øÏÝ~p‡”§Õ—ŸíÏã{¾$—~­˜ÿœœÁ>×rî û½sÉy£€ó“À>¸‚Ù™Ž^ÖRÖV^ QÏkmmä±ÿÜý'øÏkån_õÜ>mV_6�÷¿Û ±�`½zð �~D®Ób;a�ãˆ,…ÐG©ËYF}'y]„°c)Èãÿ<p´`›r¼TèÉëXg<“FÿKë|f—Võe�?f�µðÇL¿^Xø-Ð]�™Nþã¸Ô@À¡aíåÃßÃð’RŒóÕóÐqB»c�Ógg´d�›ëîå%ö !—Ôéð‹ÝG\Awij`çOÊüUi9È~\u¨7'®7ŒÎÉqìÅ/A�à_Ê<–(­¾˜M?K†qŽ>Cãø àQp>úž‰9FÑï¶i;øó2á<àÍ€ê‡eS÷™}XÕ—þ¨˜Óu.ú|¨Î„æ|p (™á<‹ü#“ �’!eí…¦.ë-¸ÿU€óLOð¨ÿkéø,píœû’g]ñ7à�I)è ôMx”§ÐÙé„ ¶@LB–mÆ™Ÿ“à_cÁî þ�eƒñ$›Ø²¯9²§m z~ bjËÇeâ=5;¯¯>öìýÔ6–ü²Àk´ÀÚx�GmõyY`YàÏZG§z`Üòv‚¦ÞEvbïf‘â„õ<4[ Î]wÚà"ŽžŽÅ~�(ŸÓo–ÙÍËÑ©âŒÑ_œoë-Ûá˜qwlÜýÇ9ŒMê·F´ªNçµâ#çàߊ«]·Ýh;³€?úU/Žol=òOèiŽÃªh+ö«»þÞ¨ ÛµÊ-—>‹XxÅ`>s^‚•ÆÝõâoL•KÆåàÖ!¯…û“>oá«OYño·ÞÐ pÇ]ÿÚ øÿ¨œ`Ý:ÀÊüs^úÛÕWŠö#é@›¹ëÆ™O9ë?iý=†Gß�ÿ©CYO»|õ9v²íZÞ|�œM€<�W°�õj¬¾�àW0¨£Æ�þÇÞ¿ÇÒ]gôÀ ýX=KnYà­Y`m¼µ#ºÆ³,°,ð¢èŠqTœÊi�6�üÄëuSï¦,Ntò¡ÓV{d³ @)Ápd£œ4óæ²È=§¾Ç€“Wíl•ÓÏ9˜rÙÌH?¼€C|E ŠƒXuŒ-%ûÀ«:ÅúeèA;j—þ{\�Ï8ã n�6O¸¾°8ôF[w;[í´Mÿ ™ìzüWožÐƒ%º,ð[ �S'ç[�·îy­#9‡Fð*~6Æ#íÈrþ*±¦"ËÀH¢Ùð_þé îþçÎÿg•åo‘g]!ø÷ò¤“õí± IzÈÙ Èõ9èžèmêQÞ¡Ëu:2á�'ye/�¢»ëïý0ß?[ÀÏ]&dLÎWÐÈ;süs8:ÚPB?2n_m� ¿Óé×Ô·ôÑŠÖϲÀ+µÀv&\î¼Ï‰Í˜šáùœ¨5Åk…œ7ýœk z‡úªûUðEò×¼ õÿÓ÷ï> >èúð,ž�®/9ÏÁçÀë¯dXÛy Ák¥púOyÖýàðÈ¢|®=;uÃ�Ž=ÀØl¬EÊC�!�Ì”°ÃÌϵwæOU³]g§+¬‚e�wb�µðNôæ²À²Àó-€b§FwyüªàÿêŸÿô€?d'§Ž�@ÙÉkw„p¢p¸º³>=Ä¡#O ?¼ä·Òû_ø<JêŽÝL§~œ¾à™O~†²²…õƒ<ÚéÇ:…q¹ûeZ´ÂÂݾÍ´‡}Ña;“/`üØ5áÿŠà_MiðôFí“i´Û§ŸÈ â@¡9¾Î» ~°)x¦]xÿ³õb'_6ryÑ–RÛ'Žwëˉ3^u†SÝûsßÜ¢–þj ÔÙä>vz¯Ó)÷Z"òÐC[ŽóCt’iÎ-­¹»Ÿ˜s94u‚>ú÷¹o$øg@À#ò~RŒu¥€ó¹·K¾ƒ×[ñâÓ÷.™`d;�|0e´1§Þî\~RÖÆïu�µû×äuºÊžNÀ{¬O¢;ªr’íuRpøñSoáe�·l�µð–�îÛ²À²À“-€gc¦QÏTÓcÿl\é €lð€U9u—Çw}ÚÎNÔ�2¼8^á‰õ Q 0¸CtD¶Ë…<—õ¼ïðG·l‘àìÀ¿xqŠe°ÍéS�=çL쑺S‹�€Á““^óQñ´Er›8è¡Á“ó [®œ]Æ X®Ó[%×-÷ôDm-Þ3G¾ôE?vv{M�?6èCõ‰¾tp�âÝ·²¨e�×a�í ÔœoÝítcÊYO€¼3Ÿ|02ΠѤð8g¼®éœÊú6°ä®Tþá/Z/Øð ô?åZ�M€z Ëãz“µ·cÚíyhÖb‚÷ô)}¤ šò“õºñRwþç6È'�”eü8öñƧd¼öÿì"Û±0'Û€5¾•ýL€~Tçˆ?÷cå—Þ‹ÖÀ{9ÒkœËË?mœ’8vjx 6æW¸óïàgO2ú¢�<³íny40€s…S:ΖX£ Ç4Yä)'E¾óCŸÃ½ÞSi;—ŒgÍâå.ÙpŇfœà½·¨ä»ùr í ã †·ƒËsú�Ò–0)Od£¯.¬àZ6pyaÓ5öMÉÐn9óñ³;®Ø4ú…G°Oû�=H=µ›Þ?¢+KdYà�[ óõ÷Fž×a‚ÿðdžç²œÿ¢)#ïó]¼ltŽÀ_2YÑAðÿµîþ_+ÐÏ+<þÿ‘kBÿ¾ûÏS’õªKš×cÚî<Ú² �2x‘…†ÙN§îÞ&€ªœ´E=RÚØÅlÁz�ï›yô<Ýź$Àu¶f¶¶²ÞR¦Äu—dYS—r­Þ“ü—×xÿ߯èÑÎÜù÷kÀˆRÝî¤áÖÌù8Xt|s{6ŒŽhǔËh2ÑÜy{ô9^Ê‚ÓyãäÆÚ�d;xØ­€>ÎNŸyf—œèáxË4-L>øÈ§b°Úxv¢�(MrðŸ1�/pY9³´:Ø|úÕûÖi”œI[š@t§=åÇÜL? ›�LÕ󣣩_ä²Àk°€ç¯:z„3†”“‡î�?0ùà± Áª_ç“p�õMçS_ç ‘ñÝ­¾Pwÿ¹>Œà¿6J 4!Ⱥ,ÖXç)'xOŠÌÞ†@ÊÀY¿ÁsðŸ2ä’z]x=o[”û€¯;`A6²yªÆÐAêÁy§ç2 _ø™ë__ÅËïÎkàÝò5àe�e�ÇX'¢';-Rí >Ø_àýNßéÑ«~@òÞ�"-¸v Ä FG2-ϸë ,ºà“¢çFþ’LÊ# 6È68¼xEçÛÄXòôÙypKv•wŠ ¹ûž±SÕº ^8¥�“¶k€¦ÜW�‘q˜f^rç=üŽ¡“°ûœ:Ïó°µ�»mi{üô‡þUßÜ?òQ]+- ¼ ô™Üé #¼äYK€ý8À²9Àú“Ícò\ „Y×Xï`é¢=ôùñÿ¼ €ÿä#€Üñ'ðOðOPÊz‹žÐ9ï“G2ã‚Gž€ž~’"×qøÈ©×ó]šÔygûõÚžrl-<Ö¥¬;ðÚړײvZ¾'`†ÝéäKüíé<^ËïØkàü5ôe�e�ËÀ¡ŽHš¶0^à#€|àIwzîþõ}€ñ €œ œFœÏîTíÑô>ÎòãøD> áQ—Ôq§ãÂæ|øsÙ�ÃU�1qç?€ã<6DÇavª|wΤb7�LÆÈøMð Ï:Qò+Î~Oi»õ�b÷•q–“ë>‘G®0ôϦô"xÖÓÛ°£Íë&ÍáÎ7ýIK‰{õŒ¾Í}Yùe�ße�~FAh.KŸ"“ fë†?@çG§u!ØÿZϽ ùlp>²Q`PP¥ ߯hÀ›Â\ð �¿D¯€Ä/@÷hÖa˜±d�d )õÈÏtÖñÏu©GJýŽ_ãõfÀ„½þÉF}-ò’k¦h˹•í'×Ù`·#»x�krçÈ^÷¨þ,sNß*[x«XoõÈ®qý”žr¡ù©žYéoïß3‡÷×W·)ÇÆw2ôx?®õ Àg9wwÿÿþ÷‡»ÿùoÜiÀ Yþš/ãÇÁ,ŽF�pèâÜ͘r±ÈΘrRwÞæ;MIðüè­0Ôò�8áë‚ÏÂésúxÓpá·œì RÛñà¸LÇfäÕ÷¿ð ›Ó‹ókW2à—?W=Ì£´Uö¥½q‡­ÊcwÊè£ûyNÿ*[ø…˜×«äi²ÓG]@æt]ÑÌšâ _çµ¶g Ù Ï:3~ågšó‡5<›œþ§ò9½v©>kà�µé�þ�;P\Àš†|Ö¸™N9˜1u9xIðI{^ê…N3ïA^6 èg¬þ¾�ÖotsMÀkëRÖž`ÖÂú¹—z�Þé=ÙÅ[XxºXûVZXXXhÀQ‰ÓÑ1Ž‹ƒ,97Wrv®ä~VÀûY�ïîî~hà‡6nµ ðCü;@2·‚�Üý‘ógètxêW¿ã4Åqê8t†€ÒîN^§‘%ï»úÂÜÕ7-lš2�ÙO7è\ Ôx? _ýë_¾üÇ|ø,̦ȵƌ�°•ƒQé¶GÉÁ¿Ë+ÁµlüYðPý¯‚ìDÂ�ú!Ì�/° þ3“ü´!]ô4¼ôÚ¼”1–1�<}é4ùG¤½cF5ó¥ÏöC¯Úò·(dÛV˜§ðÇ)ÃC&uÑöYxŠrNô:{¼”SÆš>¢#»‡S/¸ë ¯ctô<ò8½ÞPvОpø‘M>4ç’ƒ�WÞ Õ~oˆj-÷ÚXç Ÿ�ÉÞVùÉÒ'ÖZcò¥××ñI”%Ñ>òÁ}L‘ ¦Î¼†„¿Ã¼þSækÀf�õ5v6�³üAë¼�ë×9ò*7HÞë¢êÿ©”køŸjµ»,ð7Z`mü�GeõiY`Yà�XG ga/%�"غ’#GP{]_ôˆç-wÒÀ­œ ÁÁø¿ÿÛAóœ¢zïslàüª]œ4øÔ¾õâñh¬<áö�Mày:ŒñÚ¬_�Ö'“ðS:·À±]iYà=Y`m¼§£½Æº,°,ðh d3 ˜ŠÐý 6¸ËýY�ý-Á½6¾+ðuð/‡ˆ»ä·ž`àN2‚~°tp{C'RYœ½`/. ¸ÓÈ$Goà ÄÙ#ÚNŸú19zqv½ °³ðIÁþ�îøß ç €/õ€_‘`@Ž¢ƒÕ NÖÉjûZ� ž¸•Ýü ßÊVl|–@ô““êÄnÔïz O6(Wÿͧ º@„ÚŒ›&O*òRÊ‚-O}%x´}îËÁÎ�? ~x€þЇ׳¦õ³,ð< l3RSQj:­á‘ï4ëu‚pè¼®OÙ“=èÀ›iÏ÷âG_—K{'Xçùè:œCÙ5& ×úCðo ø'(.8¡‘ÔŽÖ�£Ô£ÏðçD?:¿�§ÓÔ#ŸÔ×�™&�Np yp‡Èžú™àßc$øgc[� Óðdo†hŒ¬��]z�~D«›gS¯Á=^Ê^x�Xïñ¨¯1/ , Zg g¡§ðì\Ê™!ÀêOØ ”#èÿxæý~müsw„»æÞàIœ!6 Zò†@åqúhLêtœ¼Ž;ù#Œ.‡n�và�3 ¨ŸÀ­ÆJŸßíÁéÓ˜ü?>êŽÿü„½ OøÉùépÀ*½GɶU9»¯Ð9•Øš~Þ_ÔÁ‰>R|ÄïuBžT «fLçÀB—8=9/½ƒßÚÈ�}°ƒÙÆAì,~dÒ·'Û§wfÑËe�Ì£œ °g:¼ª2ÎM‚lœÎ=àqü¬ys½žGæèÜ�¾@Ÿ`•'OY‚ýà΋\p×åGà¥+kãØк‘ ã¼à×tNúÎ?±hÖÞ±@½êü½Dû)ƒÞK\Mè/@kÆMЯÉûêo6üˆ¿®~ä_k½_#ø‡Çu¢ÆÎZô IÏSÓ âŸj±%¿,pl�µpl›U²,°,ðÎ-�À3@L9@•c“ îüÛùCH>�ý'øÏ]‘<ðƒ×€r~ì´É ô¦¢qÆâ.Í´åé m)uš:¤= ˆóž�?õ-¿ƒ�Õya6ò±??úÏ€‚ÿOÿùŸ^ àÑÿ@¾°÷€íIG[²mÕ¾7ä4öïø l%{ßHF_\p �­°cS•?*I.öêwþÍ«²“MÚÐNA6-ìàâä”!ÛäÌ8óÓ{=hÕí�nmJ7ýjÇ¾Ž‰ïú+¸ÀÆyÀýª¾X®út¦ «hYàÑȹ@…ÐÁáíaÎÕlðwPØ8Ö½í BÖ’GØO Ïù‰æ<èüÔïõ¯ê’ï@ýäÇ;ð:·ÿ’ó%ë¥À› úY; |ÇŸrÖ­ùÞP?Y{�}`-@&}é˜zÉgÍ€Gêyè}ý?<ð`MbìŒEcó†0ÿ`Óÿ*7H6ë%ýynZ›Ïµàª¿,°Y`m¬™°,°,°,0YÇ1OÌ´�J95ÞÀ�ØÉR‚ûzçßß�3Ä+<™'nùP äì¬Éä‘ö8GðH8{$tÎtœ<Êg^’û£Ì†×�¼9�CÚ_pð/g§ÖwvÊáã½ÿO þ¯¸óh€'ø("�?ïÿ� Õ%%À?—l[Édà³h^ðÕîúkûdÿ¾û_6=§»—ÅÖGÁølØÎ¤Ô3�6 úM“O_ŠÞ*¦¦s'?9F�9~˜èQ<ôÓmlSÙÇOÈ>Þ¨vÓph+Z?Ë/dfæ ~›µ÷åð8ûûA‡î�¦>õHiÇ:4§£ <Ó=ÀOyxц×ó{toÛÁ/k¾Î=?ίuÌxÖT® 7œ‡`ñ úÙð¢�YS¨Wç/×ÎOÖ]Ö�si¯ðH)ÛÓÐyYûá=}ÔÏù ¿ õ~<À5‚§4fÖ(¯‘ÒíÄ8Ÿ™Ö&À3 ¸ª/ È}½]YXXX( à”Í›ðbó wq®qÚÄÇѹÓôñ„y€;"lð/làþðþºv þ€ê祀8f8®$ò¡ãäÁ�ÕyðIÔ!íá8|{ž�Yõ‡t8ºr主…c˹ãÃÿký× þ¯ÿë¿>\+Ï#ÿþ6‚0±?H=^é<—ì¤KŽ >´Èü δAzØø&àâÅ+®sAïn›:îÍ%¬ÊÝÆ¦Óž°ÇD^}¬3å4Üé©#9>a÷¼iÕ ¶ ºÚd à!'bØûL¶ ëwYài`žŸ´¥<ôükuü° ŽCJ½¤N³æ/öÐå<¼F'ЯçÝŸ:Nú&^Ú™±T�2ÎE¯‰Z3üÔ—Î7ÖKÚòÚÉù§5Ê�¾0Á?ç§ï–ƒøuîŽ;ÿÕ6õ/%ÆKÒ÷`ê¥ßÐ{Éëˆ <†ÂÐ=Oö ¹&œ|°]òÄ›ÿ;”-¼fýätìñ5§£ò=þX'Syáe�w`�¬·ï`¨kˆËË¿ÚoùBš±ù®«8TßýçqG%îÐòÎ?�¿ßó1@bä+ý5àõ7ÂV9­’ÿ$Ú�lÓÀw—´�€“‡sÉÝ œ3îpã´@Ï�¥#Ó�@‰8!K2V¿z�<ΜqòðÔ�[õÇõ‡0�xæ½;uwýyÿŸàߌQ�÷þô«~°ƒS‚Uµª©ÝdÛJ.O°�×>Kç�÷ߪɅ‹�oÆpMy;Àâ�K–CFzØ^øRÂqˆ^÷�|ÆÐ0έÇÜ; ÞcÓèyÕA'sÊ8m'èw��’?iojßý<X™÷d�ÌÆ#|d‹ÈSžóbÆÈÀ#A§Žiæ±xœ· ö¿ê\Ë@pR×­¹=ªjý ìûFÀà!£zô0¿åÝ¿Y¯ò½�NKÅI™×KÉ�M€j'›¦¬‘y,žM_?ùņ°Öùê{ÓŽ'Átþ²vX§láMa$)?R£]_ô1ý �ü¨'¢i1›|‡\ à…v�Ožq¸œ¾ìt�¿ÆÈ«ol|_‰ï×Äd 6ŒÇº¤ú�Ió5ç£ãˆ©üR½Ô_xYà­[ ëí[çß²À²À²À³-€óÐÁ¨9‚\Rî’ó ü0Ÿ7ºUß¶— H±û¶P“KÜõt~§£·ó½,°,pj�µpj�•[XXÀ‘°Ó78åpÉ¡A*ŽQ9†ãoåò¸¿ƒ9�”£‹'>ÈácÜiÃòcmðŠ€Éàjkl°A/‰>ãh5~úíð•œùrØò!§`LJNà 9}ל>îúh“€±sן•§#Æ�ÿæü�sÌ(c££Û5¯_K6òø¿ƒ`Õí)9°iì_4ö"à7Ð&å%ƒ­œÊ.¡Í¯±8( /c ò›–Ýßv´N6zÛ´�-ÀiÛ6• |Qü1öÖ�Ç´¿Û©Å|U¨YºÍïêyxÈœgîrל|häç:è ü ¾æÞ\¿Ëç¼€‡\>üGÐ?Ӕ爳øQrûj/}xâÑæ(£^å£3}ŠÎ½6GDK>'•Gzü”k0 5ЬóZ»µ+0ÖêñTÕGýKŒß�k�äüöÚËú£k× þÚt¬M¢±‹¯!i·°ÐÖ�–‡×Ó¼Öô€¿Óc€þh�É¿øi0ú)oË¿¾ Ð&0�å_`À\ xÎ߀©ë�¯¬U²é÷>w¹ð©—ºáíá#™=þoOçâ- ¼E ¬ €·xTט––~�Ê!øÂ©Ã1ÃÉ! ò$øw �cGÉðŠÀÈ]ŸÚ8ÉkàŽ;GÔ-ì;I8“äÑ#‡P�n'4ÎUñÜ ÉŒ •Qð�a;›`•e <ß¡R?*°÷�pøø±9z¾ûÆÙ“|>öç é›Ð‚ªGWøÈ¾ó/Ìãÿ'Á?ÎpÁ'mˆX7ãk)9°A¶"A� Ÿc&=És×Í›’Aڀ͠ѯ¾€±!tlz‚%ë4õ'ì=¼õl+ í¹Rí`7‚ÛO4sÈ›ð:¿·Ùé½FïÕ[€¹LòüÞHÓEÒšM&qüX±€NSž”6ȇs÷�zÑÕi×Wù^¿˜×i�6 þgÌ{RÚ{@«œ6dLW{ƒ_2)÷ùÔêøœ­úBR´õ×tý¸}ñ{"ÇZïóTeü•gí¤ Ö"Ô•õSk“7TÇeœ·º6ø¯`u} ¸æ¼öšL#èÑzä6„yê‹k‡×Š•ÇîÙ¤D.½ �<êzʺ/úF°_¼äS¾ðïWÀÔ×ñ*˜è¾À† þóZwÿÇ€6X¯¼V•�è6éø=—¹âÁOôÎÅáÏx–[ùe�÷dÖß•––––,€Ó€ãG‚à¬ú±ÈVg çç‹cœ6'êੌW~hà` <6ب'&œúà;Kô‡ÔŽÉàH’´ºõc@´~pÑÁ¼ßÉ×ý¹“Ã6pì Êû�•øwÚrjÇ€ô:˜Çñ…Æî`ûqß+íÇv«~þ?kœ~gXαï,± Ý]§hlsâ0Ë6 öÁÐÛ•M8æÙcÃ@ì<šFîBêyDOxè`LjÏó†¹Óh oˆ‡m‘=�(]øMZ 3 |D3ð”uºà8=‡æüØ«gžæ™ÏÉ çTF¾×OptR~-YÚJ_:ö¹¬²¤Ôs^õȧ ãÎ�2·Ye£Nå£ÛçØÈ¨�*ŸÓÌA†s•uÅ‚Âæé¨hî´ð7�àwäå@9@—;j8—r¹³D²…“™v$w’”Ç™s௾ò¸)Ѓ}ÿ�µÊOåþØŸú‰£‡c—»=W|ô�Møê£ÿêÜi�}l¨moNyúU©Ó°Èü£gÿ3Á?�×ú•œKÙ‚×ØTð]îEØE‰–ü‹OÀ‘à?Ì“3ÚA§¬½ý¢±%ãÁž}ÀÇXràǤ8â{²”Y ºª=‚þØÃÁÈ1Ô�‘döÚ^¼×iÏïš7�f4žK­ žç¾p~6:Ä!ìuÇ—,k2¹‹oºxy5@Ù1�»÷Os€Ïõ¢ÍcÎ+O Þ2ùÔµ>dkÞGê&}æ7ÙèN¹óÎl¢gðEЖƒ~Ѿh=ñ9]Øk‘h÷�s Ö:Éka7Â^GJk�ïöë/ÿK€Ö5áè°aÉ:ç åֶǦrRèà½5&<0ÀUÄו‰v9kœúí3Ðu‰Çþï¸úûþ¹ëOðÿYà×Â4¾lPúi0éa#×kUl_XM�c=§×ðmSÕ ÿïÕï²sy/[ô²À{°@Öû÷0Ö5Æe�e�e�Ÿ¶@ƒÒBžàŒdçD´Cèrþ>éÝ}ß1þ®»ûWld+Ðÿ@°�s(G‹à§ËÁ¿êú.½ôùñP9†~DT#‰vr½ ^ú[C¿óï õÕA?º÷hñøà_^°ÃÇÿúò¿¿þ¯~üçîŽqËãüÑ— Ðíøº{î}uõ”Æv¾ûO_¤+ïû ³ à@=Á?2;—èµÆíÚ€>èÂ4Dó¸?›@µ€~ßþ“â{C¦ÚSöqlÙÇbt’fŒ¾a»Œ ›jìyôßãMY°ê­ô¾,0渆½Gc�ðC3ÿû&Á¿B¼8„™IÆÌÇÆs]ñøû=þÊCû\«¹8ôLy¯¥Ós½Ñ"GûÐ>Ll?tvÝ¢GyÕ5JýV¾Gz /G©—y}� Ö�œÃ°üÔíèœÍ�ÿ+÷·0ÿ¨BB‡ßù�o»üóTk<6¦ÜÀ�ô±¹âuHeô2 rÐ�×û„Lòà½Àl`õÝü£¯lhÓ—k_ÿg#€M€ñW°øó°Þ°¬u)48ký!u›Îùse®|áç¨þÌŸÛ½ v/ ¼) ¬ €7u8×`.Y`ïp©Îï,_ýûµÖ¾dßçî +è@.ºpnÈãDÙÁí„3…ã#È� ÿ/2|p9[~çRAùÜ™ç1Ñ{ÑãG3qÁ †ýÁÀäÕ0ß%ºE㌚'ýÖW<útÒåÙàqÿ€ïêÈÉócžrðüî?Á¨düƒm�ê¶Ùì»íÑô/`ÀwúÅχÍ/9Ë6�8ÁyÌŸc1h“¼ïÏ&Âgå�E{S¡xî“ʼ±"Ì‘¤ Žm�20 }<ÔOŠÓ}”7=E¯ÆÇ±±=8.ŒWxÜý—œ�eäÑ�üJÔýÑé`//ø¨ŒyMÙ¦>åÏ‹Êãðõ€ÿ«æxÏSîv™K¢IÖSóJ+ÆÉÝÿ¾@]ÊÓžÉ3ùÌÕ½öБtOmœQ¯ËÐ[ó§RèouÏñΕåº�î@ÖoÖs6nY«UÎÇ]ï´^;ØÎæØ¶S9ÿ``Íø°Â~Z ë“:”uÊ#„ßÉP[›É©ý±@_ÄOž�ž@sÀ¯µž§ÀÆ]] ¹.äcþ ¬6„ó*Á?¯�yüµ>g� ¦±Ï}—N×-Ê{šó½l�žåç(OÚ~!¶5qð*ßÛ8‘©úCÞĽ²¤Q¿Ë7ºËÌô^þˆŸ”ö¶ËöéY�ró)+ð†/c8—µîóº~õF×­C±3ÿÀclî²`º6>Õš�¼_3+Üé\O¼yˆ= Ü¿¢ýŠÁ\¦�y}Sûù‹?^ÿ <>üª1äKÿy2É›±Ò뱞Á±gäöò��”:O˜ Ïü9ßD_„Dÿ<^DñR²,ð,°6~ƒ‘WËËoÓq0†LJ NšŸ ØÖð Fýa%ñí¨‰‡ã76 ðß”øOÁ?ï�þ—€ üüCãTÏz¥#A6‚áûŸ pF¡…�/šGTý>'wûÿÜõ÷_;åQɲ�àß8ãn˜#Ž}:„&Å~¡‡,e€€ƒ;`¶aÑð°sîêw܃ËHnƶ‡øO€»c€Ûª±¨Ó§ýVùQâ¸Ó?ðHªï.].'ÏqaîLpÂkõ¢§Ûq´³ˆg[ ŽÔfæ Ú"Ë\ñ|)ÜidfHyê§™9^¶©;ò¢£K䘣i²üŸ5‡¸{oš|å>…I™WÑAÞ�¿Ê²�öÉGn®ëyS©ë<äo‚ÖçJõ“º[1­mé1|$»Ü^~ÓöP.üàYOøÆ9‡+!7€uŸÍ_Ïþ‹×Úö†œêùU0­åã ÑÜýwZàWÁjÍç»0^û…ý�­Y}íx°n¨ ßéoØÇ@í[–;øÚôå+ÿà<îÌëaÜñÏ_ýåu0®n·Æ1Æ\ãÇ�·— o–�nøIðzJ>¸—-zYà=Z`m¼Ç£¾Æ¼,°,ð¢ˆS¸â`²µ2Ü9‚Ð9N¾›Nð/ç‹¿‹â¯ýµhã8„ãŒûCQrqúpø;‡RÁ9Á½/ì¼ÚŠö«¡é‹Ú&à÷£þÜå ­¾ø¯�Ô¿“ÀŸ:‚áüÕøc†:¸™Äe=/ƉüI¾‡í”wÀƒÓ[´?š%û:ð—=x¿ÿsaÿ{€dôKLðÒ1�øIð/6øÚJ N{îXÉù�´Lø;�HtP?€m¬¯l9wì�ò`x‘¯ôK,ËÓH§{£áƒ™' ŠgÚóµd"Ûqô »ÓäIÔgmñ¼�vœg^ˆ¹éh|êû±}aœ¿ÐÁñ$ÿ¶zæU>mõ±Q/cëuSLò¼o™ Ÿá#æóÂÄö[ÑÖßsô\¶—?âÁ'õ67Îö;6~ÃÔ9ŠHôl|û°î üe}­«lÖ:aWÖiÖ~}#Æ�ûkmOàï'¾´ à'¼j3`¼F ü�ÿ‹€tfÝ÷+C¬¹Í:2€¶+ïuFëüøÛW]o ü͇lçÀò„[6„³Va¯€MŸ±÷6Äwð�^ÚʘD+ãö†%ð¼PYO}`ÐÈt�-�/ÛÚ.�Ž5r$Ú¯úÆwý¾�r�po&2ð2�Næ—øš {.•,t‡®«Ó>Þ’…]¾¯9�|ÚÌ|H}cæKµ…u]¿cÉв'zª¾u”²n³å{=ëQ™ñ–±ÞC~—�ä{�™žóé÷9>e¤.»q¶ß#~—�žå¼v?Á?Áÿ?j�Êë_¶ŒÆìõSëîG­¯~ūָþ¬÷Ùð°^ãI0hàе�×ÇØT`MÏcùl*x# ¸®¬ùYû;¦ùÞ ØŸi® \#�+m¡“ñ€ l¾^nFÙk�TŽìQšËæüQ½Å_xoXï툯ñ. , <ÛGN e~Ÿ‡¬<ƒò)Ç1ãÃO~ä_AªiÝ78tµ`:N˜»=ªcYê�åÜÙñ«À~Е?qúJÞA&Žb9xvìÈËÑ ÏÎe9z¾óϸ”¿ôþ'fˆ Ê$Fðz6‚ÙmVBHï–öûÿ…ó迃Ùæ+›ÂÙ ¿{Œ7ä¬ëÍÜXY7zUÇ�ÏÒ/åÝ?°RFÆÑ§,Á>¼ÐÈRìñË~æaWèÂ)óq¡Í’6K?ºÎMóú} ôcj—ÎðÓDÏCg¾ìÙ Ö#“ �<ô¬kÌ•*‹ÇühCyhÊIÖÓæGò½Ý´ 6”|dÓ—Ì7òÐè€6ÞÉ«èaû’KêúŸK‚]¹xU!ò[ѽž9$wÄ/õF]¦óC_*÷ÆŸ„‘ó;öZCLëœõw_„YŸXWòÎ?å^OYcµÞóý‚ùÜéOwÕ†€ó”ëß>(à¿ã_ØÖšþ]úù÷ÚÊz�5›ÇBóe“€k€ÀO…5ì¾°ÖøèO؈¥ŸÒã»þ¥÷ä Æt0Á,/i.#¿—f9dfÙ9ßõœ+ër�¦NŽuø\ùG‡•–^›¸f¬´,°,°,°,ðÀA°c!§·Åqˆàðñ=î q7eüÍŸ‚Tú9|úàkpþáì篥 üƒqNöðÓFh0m7L_"×ùá÷ú¢G0ÚÇúƼ³Óµ—� ±Ÿ½¡/à<À€ý—M þ¿ÊŽ_eoT?³ `\<‚wà¶€ Ç�Rú ¬Axô‰4°êàüSÇwû�U: þÍÑOét,FàßiÊ9n@«cÍ”­ôâèV þÿì� wÜ8’¥åGU÷Ìîüÿ¹3Ó¯ê²-{ã âR‘!�ÌÔ3%]œÅ;^¦iÈdV^ƒJ'™s¯ÏŒŠsQ³_‹íâ'�b3ç:™å�x|(þ•3i‘ù,Ë7i‘ÉD<Ÿ#�%*1=.?wGŸ~#·bd“_Œ˜Ô-†u~|îûX«®ù’»¶*W~ »ó•Mt+GÕ÷Ý6“k~®Á¹ ”;òõ½"øå›û¡ü›¦(§èŽ‚ûs\çóq~®ãÑù¿€Gý“JŽ‚ýù؈có˜;ÿÿßklpwž�~VŠ,žëznšO PÐãE~þlí ùv6èÌ—ÿbLòœü_Á1�Ù…áÌ_¶Ki=ÄîÉÝvéXö7ïþÿp3FÀ�G PâY$±DfAÈÂ/u¡gáÆb�â?ŒƒçEN?b±GÏâ?è—X®E?¡Cæ­Ðtîü#ç�#Æh ´ºXK~,Þ´ÐuÌ7�!üÄß“Áj²Ø[ÔÛ Áqæ-Ê,&"ïIžEÈb!í!Wª"&i?�ÿç÷üƒòè?wþ)þÿØñ󌙅ҘòãXù®¿ŠîÖªwÅRØò±^æMs/ʽ ´ÅXœ÷“†\{Œ«*žs³òáŸÅsD¯ÖsKoúhêYËs¥e�Î#s†TÔ³À¢ðWG–M´êòìŽóÚsGh¾xÿÌ~I‘OÎüw MÿÆ”Š.)|“ [cê\F̉!Ú꿈«ÌF…—µ¯º’ï$÷˜ËânŒ>æ™ñÊ­cW½ø#»üÖë}üÛ§!WÊÆ/¹²ˆ¦˜ŽëRÞùªë¼žêêß|G@æóùäXäËëTŒó�ÿKâzGÁÎ{xªŠœ?ï1l6ðDt}" dîêë‰âòñþ zÓÒ�Uðs ü¿‘×%ŽGÇAOpÆŸKâðÝkÝ^åÊï娲¯óºåc½x ðÿ‡›0Fà] ðÿ¹ïQÿã¯cmé×\±@âî4~Ú Èï†J7(¿Íâ°.óQ,þr±ˆ�Eãèð’¡1ÀéãjC€EZá×�|FÏ…“f7héÆÂKÇÝãe¯>«ä9vòGÓÓùØlkþÂAÐü©Ch,r?åøy "{öl–ü�·eÿ®vttéx2`]¬‚�cˆ9ÀsÜùkáw�§øYÆœOÈ_B.õ˜¤ãܲI� ÏàÉ›_/�|3>ô9.cG_ÕÌ«tâé¬Üæ$¾Ã´Å+²ÚÑ!uùÍ(¸Šý•ÆyÏ‚K…¿hÕå@øä¼8çâ“[bUìó&ÿ­ €W?3Ê»d¾g*óyãžäó¦{ŸIùŠæ\JŒô¢µ?tü>žòTZçVõG¼âî]ã"�ìü[æß;�ágñת|tŸëMðêü š…ı‘°öÈuò—è\/óëñµGÁ�œwøKÁŸc™;ü¼‹¦w}ߟÇýóbLèSö#l»½�-{ÎOBÐ*W¾¸¬ì‘}u4cÞÞx'ñ£‚/ÖõÌ¿þqóÙ«‹¼§ú,’‡Â�B�ü,¸ú8,ÊõØ:~,þøhúbñÊ#ªâ²Ûu<í1~¬˜î è£åü ?Ó ùV9“ÄŽiíQX‡�ò�XÀò•¾î�_y_È^…Ž—_ÝDÿ�Â~‰ïÀþý÷èýã�›oÑù­÷‡æ÷þƒ~�Åsn0Và“›,A“GfqN�c£ÈÇŸ6X€�Š.6$£s\ðùùHnÄò“Žâ9ÈÙÂ'1a\ò1tô,‚×ùZq\¢?ä_a~tð:{”Ê'?é$C㬬ç·ÊÝ·Ê|V(öYX­Å9üЫèï”±ÐAiú7“|j–¹�?}C?ÇG,vµ{9Â&kÒá+¾ÛîéKnÆ8É¿aÛò™égº:NµW=<­ÚÏá—¨åoõ¯úÊŸã£k5¾�GÇ'ÿ®µáIþ÷°§~áCÿÌ@\ ²Gqε"¯SG®ùY´GqÏOóõ¯è«¢ºÓŸ›Âþ\sÍ'‚'Ÿ6 ø0Žþ`ŽêÁ¬¼t/IûùaìÚº\mæ�ÀGGÀýàã7FàQ°È¨‹½Ç$cÏ]äú½Q_4–6Z\±Ë DìÜ)º�Å…t.#G.ØX0ÎøÐáÇxé/>älèa$'»Ø4‡Å<×á3³'Nû±ί?@‹ÌW¾Sü�Ÿ‚žïÅŠ²ð)ŠÿÜÊÀ_Fñÿl„N�üCs@ÅPžÂ ÐæI‚háE9ÆÀܾFç+kÁ¶ß#–E9GÆ"œ¦Å¸d6¾Çyøcˆ²ÀÎ'8Np=Çרá³nD¬xÎ ~µ-Ÿ¢åè+?ÃCö,„ùóèzÇgK—¶8_ò­þ¾Ægq2E9‹+uíP:yf”¼ü›K ‹L:dŠåŸùŠ�üklò™jÉšûXE®9ôï™[üžm3ÓÕGv|iÕ¯ËÕVùî‡Ü[÷ïö™LLý¿ ó\[z#†žØUü'e :?× Ík~$€Öâÿ{ÿ¿ÅKûr ®%YèÇ�üµàG‡y²èß Yì‡ïZø‹�ñrlæ?æ›óæ`ªü|ÅOØmÑêkÞ�S¼pЇ%#`ŒÀ.,6úÂMúÝ;Æ,Æ£P̯ Èo,ªx¬<‹öX„q×?k±(¤øç±õ\(Flæ1¹0 ß“ÒDÎ�Ž�¸2.¬ …äñA7ò‹›4ùŽ<8±XÍG\ÇÜ×÷´ €üåƒÐé'°ôÀ×öÀmYløU@IDATÙÐÛÿóE€QÈçàÄD)þé±މ,}4æ��ùŒðçŽ.ß³Í� ô`<:ñü¶·dÎËŸ3=9SGú6FµU^ÿ¦wE/#mÙ.ÑùVûCç0‹[Ž˜O�IúK©òp�ëüúÿCØhŒˆOö¸^Pdgáϵ"®WyM=” S݉W¡Îwó°Å?”kj½£Ïõ_6Äë“ÿ—píá:ƒÏ 9ƈ«|ÚñsŽI/óμt�¤¤Üj+^eŒ-_ë�€ØFÀÛØØbŒ€ØD€…ˆy¢›ÎXheaª:Á3^~G>ì¹Pda µ,þÇ"1CŠÿºH Ý ?òÕÅ”ìë°0Ä�†/­ÒÊwÛLÎeo,~õ Û|z!Šth}ôýÕƒñ€6x€þ……ïø ÅÿÏý+7 (öõ _#'<”žb+ ÿX³ � ò±ÏcÅ'Ž“NaÅ|³3güBŸ? í�Ås¾àó»¸q7Žâ;þ,è)þÙÔá �Š9 ïu ø“Å9‹múˆaê¥éS·E+òA§¢šsWù,’C'=1Ø×¯|Õ‹/vÅB+¿Æ‡¯ÆÑ&¶Ô�<ŠSŒä<×á«¶þûB±ò#¯bõY­?ü;¯œKJ2.Ç¡ü‹b+yì‘KíRž¸YÌLW}�ì³ùÔø=~+VúJë<ª~‹ÏëD‰›ñy}v|²�ëÅúDTü›çú˜wý¡²Åµ‰ÿQÐ ú#ŠžŒº¥ø‡Æ&)㩠ϼõš¯kÊŒÆ\r³`ؘ§døÌÇç€9Ó`ÆK7¡„œÓ2ÿ$¾êkžªßãkŒy#ðÑðÀGÿ¼Ñãç"ß:ý‡Ûm–�Às"pîgoö¹íóÂ'‰|Æ£#§n,s¡‹¹uÁ¨b,þôù_Ç!–È•¤Ðb“Ïb½óϘ%�¿Ù4„ÎK—ŽÃ^yæ§ÎüUüç/pç¿ô\ÜŽ;ÿ| €ŸÄâ`€§~§øú ŠŽb?rC³OñŸq̼;&‘óàx)ðÁG�çó½[á‡= ùÈ‘Å>rðl¨øçkâ¿ÇyQñO^Šÿ|@ø«`KÌB'ùn±Îâ<æµnpn°Å�ù}´¦#Þ¢ÂCvdxáÌâ†Ná- ¯â¿ZHW}Úž›AзŽÁ96앯q'<~%N1PéáiyîvåÓ¿Ä+7¾šC8/ÿæ7rÔÜ9Vñ¯±Õï!ü¥1³ã­9ª½êái{ö=Û}?^úK)cÕëpç‘Á]›�¹1ÿƹnäµ]_�ÊÍ®W踎Åu‚¯JýƦ)=®‹Ð|I ¹¹^ŒkG-øóÜ}•+¯B_±|ÆÄslëg¦ñà”vôýŸ½XâÕf~²™#pŒÿ/º#`ŒÀ°øÈ…Ü „¢;ju1¸åKñ%æò}õ äM],ó«,c¡—, Â]Ú½ù›tw� 7;é [|Í#Ÿªƒ×œó €X¼ÖÂ_w³Ds�;ž¨ïÐW(þo¢øç÷±Ù øÏ‚ f,šÏ|XHƒH�ÿ,œÃ—BŠÎO ‚7 óµ‡~-øÃÿ”¡áÇëcÿ±Xÿ¶oä!và–”Å8}ÿ<¦›OpnŠŸxèGhõ(ÅC+/¤“¼ž»P°¸©�¯rh@…ÿ*‡-Ϲh`}"£�6 Wc­tÄh®Y8 ¿<ßâƒJ–o•üœÿdNùêÏØ]GXâöÊ/ÆQÄ¥±té½ü!§ZåÑUY¼è,fËVõ3~¦ëã_*ל³¹J÷XÊ8ýZ�,}n6r�ˆÿè³ø<òÚãš²òèãZÂu?¿ß:¾y~9£ç17^8lÙЫ+_Ê ài[ØñþÒ)¶Ó#ûÌŸZ·I^¬Ë_éD«Í¼0§xàKo.ønFà5Ðg�Å—ø£yäB-œ¶ü)øsáÇÂj,WÝ�Ó>øp^ü^Øâe?“ÖyŠ‡ÎøšRvéò_)sba;¯Ü½bà{ùùØÿxœU…?tú+ã+*þ?ÇW~…Ž¢�b|-Ú OÁ nl°¬�kGtãÌWEá×ð£çÓ‘ƒ§ ²àŠù®Eã¿QÄGÓcÿù"ÀxT77"˜Wز0;Æ£øÊ£¶z 0§h+~CNåø³ýr ðêhºmñºóá­ç0xýŸÞίÇò«�ø¤�uÍÑ7 °q“Â�NlÎ3lš#çïž¿ÐÓÒ–ÌðK-†‘C´ø,ì©=³_å—/tÍ™ì2þ¢|‰?Ñ#D›æ,újïþ]®¾âE·|«½û<‡L·´~m¯2<Ç•>ù¸ÐVý°ç&eðaXmù$2×Ðè'O lM8Æl«?|´Õ7üÔ¤{IûlìKÆŠx·h+ÿ9>5ßÌ_¹BÉ­ë�rK–M»l3Zu�GžuÍYþ[²ô—Ra7£Uß;cu�dÍCr§²oå�]qUžñÒ™��Š€7>ê™÷q#ðhXlдؒ¼•¿îÓuçæ"�|OòÕÜäWeñ�â«vRİÈÃ0hn)Ä1æ×¢î”‚þ{îê? �N?÷Ç÷Yó;­ÿÁó“|Ÿ‚ÏÆÀîö¥ø�ß \ ñ�;bYüƒóègÉ3Oæ=¹�‚�⟻¹lS0÷Ü4@WŠrŽmÝ,>ë×��€1.y21щåû¸õE’¡‰+vüz›éºÏ3Ë“Y­Å÷lhüïB«n–¯æÁÞý»éÀž¥8gQC׊ü•>̱? �…}ø®þðIßà¡ÙÃgå›n�KøÐNþÝH—–;[z†M±5n_í•?ò½Ä^óv¾ËGyñ§�ãwäSí=gÒÆ™ùô3åº&ʼëõ¾Ï­Úëÿ)Š™wÏq®¬\3Zu𵓿Êâ÷ôš“|+•­ÆK‡ŸZå¥{JJ~á\ó>÷¸u,óFàR¼p)bö7FÀ4ô}_H_ÝëâLzÅUÿ™Ÿü;%N9º­ÊݯËÝ·Êâ5Ç•bÐb+Škæ¡ï¦æÏüE�œ/©‚Æ]úïQ¸ÿˆþ=Šø¤’ƒòþ,ü)Î£è§øç«ë&@Äs÷ÿWtžÐÀçðã»þ‰YãÁ¬*þYRäë= lNGÁNAÇÆ…<…aÞ‘ç˜(ΣS̳Y@S±ŸyGá/]>Ž>z¢€�娛ºãŸ6ÆQÏänñ*ÕKSÍ@”ñ+?“AH]…´¨ôÄm5òãwB 䪓¼ÒáC¬6 ŒÍ€tšËô®~ø/Ÿ{�ù»æ‘ÇSÆÍy‡LË¿�_,aúô«>ÄMlÕ¯òG¾�µ×±ài[9÷l5æ\¿sßó"Ójì¢9_'ÿ—¢Ìµ_Ãgº:Ù‰Ëkßȡ㖎˜ž»æ¹„WnQbÅCÕ¥—<óÙÓÍâå��VsË&*{:ú�0÷ðÀ=H¬0FÀ<�º© °šñ\ý–_ÍUyÆVÌŒâ+Åi¾øË.[¥òKŸÅ1͵؉Á×ï¦RôëûýÜùçMÿÜñÿAáOÿç?ïñ·Üѧ�]<4_¸y>Ç&Àúè?Ñ'ïê« çX¢ë)€äc¶a~o6pbàÿù�Ðq÷_ßÓ°–»ÿAyk7òº¡@þÈWeòá­›ù]ÿø›ë†›#g¸ß5t¯Ü4ƒ<¾1é·xŠ`ÞÒ�Wœ(¹jC¯Â;yäÑ%Cù,fÁ _í¡gÜ“±‹}æñð©+ræÛ�×±†}&ç9�¼Øòó¥ELê’]¸./nÒr>äûPûÞœº­ËGcvÿ.Ÿßc�i5vÑœ¯“ÿKPæ©k/ãuy6ù(®Êð4]ÿ;ŸÆòG9Šj“UnÄÏ(ºª?WžÅH§I)W¥ÕVç&ýSSÆî¸õy>õ˜Îgžo<5¢ÎgŒÀ‡E . ´ ¨ ± Œò“mË_öNë˜Ý¶%Ïbú<ˆ=G—ËM-: ŠÂx}»çùr?Q6þñ�›[Šÿ ¹ üíày ‹ý(äãû'<�Úç&@äúÂcÿlDç}ÜÉÏM6ƘŹ|n0?zøRR¬óT2Å9Ǭ €<~{£ã‹Ž1V:ø KáTþ'Å>/úSãèI劤¤yÕ¦ä1Ž™tµü*_‹ïúØ= dðV«ñ:ntY w¸H/Ÿ¤C/�64búÝþÌ3Ρræùcr.ГSc(ꪽäYÏaÄq<øªa£å߯ËO>é7|2ˆ¸"‹íþÒ‹>Ô¾‡žVóÉÕ÷¾çÛŠé~È´ê¿h–¿3ýLWcÄËO×mé_‚2¶Æ�ñú?C>’™›xÙú|u\]¿'+F_ñPué#÷56štP5ñ¢Ò›#° à Œ€0g"p´˜Ðb‹t[|ª.Ì”¿Ævdüj\ÕɶE•¯Ž%�¨l’¡SÝ©CJÌ+¿Àÿ(ÎÙàûýߢ¸×�ÿÛ¿ÿ})ú¡…çÎ>�ÓÇÁ-”‚¾òíûÑÙ€JæÎ>qÙ™ |´º €Fï ˜O>üò7¹ÇùPŸÀ^;c^AãØé4ñ¢ÒÍhÜa Ø¯ý÷!S˜×Ö?SkANÉ6ʹÚBÇ\ª,>õ#Fº¤E'å`�GÎ^mè†\m'|ØÕ’òŒ_=GNâ:U>âŸÛ>›ßLw4bh[~{¶Óý�iÝgÑ^®W\ÏIþ~í­¾çòGyεËOÿgˆ2ñ¢unèÒ�&Zyé ê²w[ÕwÛL–Ž8rï‹åtnÒ½ísdLž(s3׈€7®ñ¬xNFÀ¼IXha%^‹‚Ù"¬äÌg¦SœÆ�|DgþšßVì̾/-}>bŸÿçMÿßbàÏè|ýYôGáÿóo»¹¥³ ”ïögÁ‹Óü9?©£#ÃçÅ?ÿèÜýOæ0è’HŸ…Äå]ÿ8_Üùç¹ œ;ŽÁ«IÅOßß×OøåœØˆž¹#P_Pñ¯Â_1¢ig¬2žÆ½ ³ÎÜ„�ìè(ðYTèŽ?…ÿ_¢CéØ3®¯ò„館Ǘ¥³(ç§ò[¾î擟¤ ]{•wø9‰YeÅíºE±Œ'^>’—¨È=â9ÿÒ¥¯ô!¬>|'WýŒŸéjî#û–ï˜Æ½yUÿsù=¿nër�·!×Ö}ϵá7‹Ewr�© Áå•}‹2´æ¥ÿ7*­S#GmŠ«ºÎ×ñ¢øÂK~(ßã%×üÊ]m²CÕº]zS#`–ÿ§�ƒ0FÀ<ZtÔ…—tç ñ�8ò÷¸™Ìøš ö½&?ùt™ÂwÖÈKAžq÷ŸŸøË €(þ¿�ÇýŽ‚ÿçÿþïÍmtQ^êGaNáFvñ¹T =4ïèkltðEÖœêìÄCó.}øç]òE§h¤xÇž¾à)¾R }=ÆÏæƒøðŸ5ñtîþ¨ßú€Ä4ü"xé‘çZZb“Ù¢ÌS6ñœ7Št6Tü³ žwâX‰S«<ñ*ôUìëmýÊ�½òé7tè3ßCóÓg7å2>z�_yÎǪg¢!'Ivð;ºÅù.G—5ŸÌ9òÔ1OôÌ4£9ÿ’ö1¥•Ô±ûÜeUÐcä£X�ÑçRõG¶#;s8º†öñ¶ä½\{6Íqv­W\¥6oüÎmòÕ<:•ú¾ÇÔ<š«tò­s�ÏsPÆ{,ŽÏ1/ç4ç"�ÿŸël?#`Œ€8-:�E×ÅËÌþ:�yÎ"F¾9�(ž³H!é(Àáõè?/ýã…~·qGŸ7ýóèÿ÷¸óOÿI��€•†ígôõgýÆÁ²UϰȸÈÖù“¹…±ÊðŠc〼y×>xôØg=Ô‹ž¢ž-…ýh‰OÈ·ô(ôùÅ€ŸAóçƒj£€Í=A ��Šmå•ûÊ1жèb=ý+_iUDoQüˆQWáŠÌ‚BÅ>ô¯MÖ‚#ÇGòá§|ý;û›ÏéŠ�×|’Ý“9‡Ø£UÜ+¿e“O§ÝOVl÷©ún«rõ›ñ3]�¯ü‘oµG›éº^>¢8‰½Ä~ä»5†ô¢=�ô¢GvüðÙº~V}õ«¼Æº„*^´ÎCº-ªq°«ÕyJ·GkìŒG'}¥[Ø*NâEg±U§xùCkgžø(F¼æÏ‚B�û³ÐyÎ¥|ƒ=É“rä_ÏwðŒ]åʯó~ÈšŸr%åO4�›sÇq¢]mò¯>•—½Så�¾ÆtÛ9>=¦çSÑ-û9úKshn¢‰¯1}Ž]>òíþš—h�—¾Òs|fþº~ÊFžªë²üC÷rÊÖi;­ÎµúÈ^uðUßyÉ•V^ñU×ùsåž ÙÍ�c¼pŒ‘=Œ€0!ÀâE *ñ•^”¬8“³æÙ’KÈê�N±Õ.[o]G1–]ßõç;ôyç?è�ñÂ?Ýõçmÿù�ÿø~?�ýç&@ènâŽÿMl|Ž €_±�ßáçØ"ýZØMxìšå —µðÏù6Y9°‰gÌ|`ø¢Ç.�ì¡:)þUܳðsÿÚ`@v½@OœÜýŸàÎ8ýøªž&ŸE:Ån-–Ã(^Ç+hÍ_ï¦sÜŠÕyIÿ˜sÍ•|èðååþ÷è°‡étÌrüäÉqB§ñôÈÿT¿³ÎiäDŽý:Þ‰\õÃqO/Øü÷’Ìø£[´ÇÈO9ª|ßóUùœø‡úœ7;¦™®æªóŸùvû^ìžM¹{¾ªï|Ï·e×uý;9·ü‰ß²Ïô3]�ƒì¢Õ&þÈ&¿#JžÚª,Zyü»nË^õŠéºž¯ÎǼ0Çxà#{#`.F€‹âEI¦MO\}dS¡/ù1Tãjn[¹ä×íÆkñÏwýGg ò�§¢¸¿�"?‹ù§øç»þÜý�;ÿÿŸ¢ßĆ?ç—?ýwæóaù©%h§*úñ_©bÑíñë]ÿ’'78¯Ñõ˜>òO±=Ÿˆ�€|`èê&@> …qÐøœv&�yÑ4?ñ©úO‘LÎìÐÎc§)òÌa4ÙŠ…fÎð�kF„®Ï�ÍƦøM>ôPr­£�øPeS.>wšÅ?ú” /Ÿ´U=™†¼°Ëhù7ô©[ ë<ô9­qf6é:=7¾û)ÏlÌ=_ʼnîùîÙfñ3ÝÖüfúßÇ>’÷b÷l³yHWiÏQm•ï~’·®ŸØ«­ÊâEë8—ð—ÆWxZ�ã¥cwåD/ZyÙŽt=Nò,Nó�M²©0Çxà#{#`„ -´Äk±‚^üƒ’_¤±kˆÆÖüf¶ª[ù˜71ldñ?Å—/ü ºùÞôÏ�þÇ=‹x¾¹"éZø±D]‹ÀÂ/K×»"²Êâk±¯9W~tm0…=ºÊ‡¸6Ù3Î)ßñ�®ïügÁÏ£ø_7⑞ø´¿ù?ß!PÉLÇ¡y¢ï¼t=F?ÿ±««GæøÖü16M2<ö,þÆò…f|‰ÓgH9ô}}��9F.�éî}î3>ü t�£ù2Î_ý3D;™ÛÈ= Ë1�|kÜ9¼âDωé>]®¹º­ÊÕïR¾æ9‡¯ù»?2í)|jŽsøÙ¸—èðÝjuü™�ì[×ϪǷʳ|3Ý9q{>G6Æ<š9öZ·K®´òäB®º=^¾ÕG9ú¼äÓõ–�€¸�ÿ'»#`ŒÀ3!À¢D‹,ñ×´PÑ\êgPàÇ]~¾zôŸM€QüÿˆB~ó+<ÀÏüñø??wýý±Ÿ#ïP1G±§‚¯óŒ¯%i§ØÔjÑ_uÄе Ê8*ôå¯ü’±ÇÊu}€»ÿû?åñÿü @lðý½`}óøŸ˜…_»aˆÑQ‰•nF9mè1|6Ô±‘'ç�–ò z~�9*'ùiúÌäœ8tÑó\ b²¹ú+&�!šìICÖ]OŽ1ÐÑêÜ”;mÅý=ÿЩ)GÍ·ÅËWt˯ë»\ã»­ËÕW¼(¾´*W~ÏVýÎá{.dZ�]4÷uݧÊçðGóÙ¢uì-Ÿª—¿®Ÿ²¡¯:É¢ò»„ž;ó›é=Ms•œÊƒ?3_é*­<)‘·tU/?QÅjZòízÙM�€ØFÀÛØØbŒ€xêBå± Y¨‘o‹*¿|ª ¯…žô¢{s\mc±IÖ¯äÝÿ(æyü?Ÿ¨_à£øÏ¯„L±Ïwþ¡Üù‡~AŽœY@Æ„X’‹ŠG^–« ­|˜Ö¦â…xh/öÉKQ/Zó‡:[�ÏñÀ^OPøGÏÂ< §Tüs÷Ÿž¿qqòÖ®ùk¬N5ŸNñS¬lèT¨«à×KøDó?üÿ^ìÐ�CýÐЭüЫ qYÄÃDÓ烼ÚD |Røâì2‡°¯|2ËÜò˜Æœõ©^1=üÄËÎKöÐ^s�êÒu�º;®ˆW[ã‹ïL‡¿ô¢{9f¶š£ÛkÎ-¾ÇW¿n«rõÛâ«?<­ú.šåïLßuU¾”ß»æ©óÙòï>UV®£ëgµSåžoËVýàgy¢›Åh,lç´#?ÙgôHWíð½k~òÛ’¥75F`olcc‹0FàÉ`ñ¯R "�äJSuáµxºdñ©qjìÏ8žÐOä&?ýG�wä¯Ä÷þoÇW~…ŽŸßc�ž?Å”âÿ 4Rg9šEc¡è´LÝ¢árRô#Ó(äk'Y”±x¾AyƒÍ¦ô²é|@ßt÷Ÿ'¸ûE?ïÐWÖ§ÆÂ6“kÑ-º ¹˜Æx·Sœ¤Ï1ÔM ÿú³|õ=Fç}Ɔ }uà·!£ÃÜb‰«:mä8Ã�>]óoü™È‹¦â;rÔ12OõY'óºfdUžZ#•±F¾š»òšSÕUþ{�ƒ§Õø#¹úŠÍdæëã)—h·Ÿ#ãC«9Í}]÷‘,ÚóT}·�;†üŽèÖX[×Oü«­Ê•׸3�lçÒYŽ™Ž|èiuŽ©Øø#ÿ ó=µü÷hµUždÈ[½¦¸ª3oŒÀùxà|¬ìi¸öÿ”<¿ÃS¸ëðXü´è"¼ò‰Õ$º,ý¹TãÌüëØ3;:ùÈÎÒ‘9åKùîý<öÿ#îú‹¢ÿ[¼Ø/€—†ü3èÏ ¿øÎоóOÞÑUì«p•Œ~FC}Wè!Dï7 wš¨xîø«ð×#ÿÒáCSÑß©æ-ºx—¿,®YÀ† ìt7œ dÞ Ö±EŸ"ÐÑUL éE3ß1&ÿ¡×‚¿óØ5·56™eÎmŒ1—p²¶Ü;x,sMçñ§ã Y4óF.µªï¶*W¿?Ó½dü¥Ç3ó×1ˆÎ|ê1�c¯¹Ä‹ž¿å³¥ßË]m[üCò*æªñ¹þÑ$÷ýš]åÊ÷¸seÆÕsNž­cÜW1{tf«:xõ:–|ªÎ¼0CÀÃÍQ/ˆ@¿èwù§â¡ŒÀ³ ÀgZ‹C-îÎýœÏbë$•Gy« ~Ï~WvÝEeñÏ�Šÿ(è¿SøÇ�ý?£ØÿwûóÎ?aû>¿b£àÓxÄŸ,*ò;e,º[Í©óäVS�/Š~Y¶/cÀ×Gÿ½òÒ‰R g�"€'¾ò"Äè|…�žÇ:ÞiðeØnñ‹žOLÞqÂ?2žã׎G•埑,”G<”¹é®ÿïaÓ£ÿlÀcOÿâ²Ð†‰vï%~á§cÎ9„LÓ1¤¤\¢Ã¾x–üÅ^st¾Ê§êàiçØ¶|fú™®Žsd¿Ô·úÃÓêGrõÝâ�rìÙ·rVý^<¶Þ.�­þ•'o—/ÑõyÉu,ø­k©æPíŠE§Øís˜ùÔ¼³±¶t=÷¹²æ~©¿âD5/Qé+�ñÝÿÜyØÏ�c¼pŒ‘=Œ€0OŽ žº “¬…P_0ö ȽxÅ¢«¹å3Ó££ÕØ,NCGá{Ò(Z£°ýE.Å}ÞýßâûýßøÉ?~þ/t?Ùˆ§â �CI«Ålç)ÑíQr`_ ÌÂc£iÞ•â�LŸÿÒagò ÕäW(ü£�Ÿ¯B€ Ǫw¤¬¢³  § ò+qîi:†âOŃÂ[råñ%Žó¥xÉøñè>Åþú€ð“;í$¶äá‰øé'ýrìÐC5N°ËØŠ4ç³§#.ìj•GWåKùKã�òÙ·Æ»4®ç¹T®ã]Ûýk®Kùž ™Vó,šåo×_*+W�;Ò˾E·òUùôk¬|fvéäÓ)özÍïö*Ë÷HWíá�欜ÝOòCh�¯qL�€x:¼ðtX:Ó 0ûa¦{�©x#ðhøìÖE¤ä§øL+GÍÏ„·ô'C‘F±?i÷žˆ»ýùÑùžÿ¯ÐñØÿú@Á¾”~*j·¨|¶(SÂF§U~Ñ,Å;¼Ž@E<¾*ôE±‰W :æ§8(- ã8îþSسÀ�ÿ¯lˆð¢¿ <@ñN‰Uørx 1Øæy@²6„IŽ3ÆC'žFìzÜ…ÇÎwö×ïï‡ÌòÒa×ùÏøð¥‰‡æX¡‡æØ…׸£ØNÉ'Ý⸜«Ð-£ÝÙ1Óäÿþ!1³ñfºšûÈ^}Ïå»ß¥r�Ó¥±GþÊ-Úý«¾Ûf2:Z�{¬.“nä=Ç&Ÿ‡PK¿Æ*×ÌŽÙä»GkLK¶Yüžmæßuç̱ûTYüC)óé±}Ž–�€xÞxnŽ2FÀ< ,pê¢Nr¥u éÑu]ÍÕ}�Õˆ¥uÙïQ­ÃŸ"—¯ð˜?_øÎWâî?_¸ ^ß÷ÿ>ù@ÄzË¿ŠY(ùjÏ5t[´ú†Û+JSážó Y=¹Uð#W^v( *9�!p ðÏ Šÿèülð“†üÂÁÚÃ�'&À¸æa>jâ¡ôõ|ð`TåÄeœ·ôoW+ Ýê_ì‹Z3¹‹ëú.+ï¹ú-¿£~³|ÄìÙör^b;šçÌ.�¨æúzÉ\íkŒÀexà2¼ìý|ÞxQVýå¦á!ŒÀ‹! Ï¶{ÈðU/¾OJ¾ÒËO¹ÐwùÊ­þÕž|Ì%’,,Åo¹z`¾ îøç@<ð)6>…ü96>ÅWøþ??÷§Üea™f4 аíQ•ŒPu&&=|-ÜÅc‡¯ÿŒ¯ñÌ‘TÅ0wóó»ÿ‹Üù@è)ü³ƒ�z&ç5ty®DG~þS^‹øÆ3¾Ž“ØÎ#ë{üí�'žóˆ_Æ*‡tA5†Šÿ”‹^Ÿ¯MZÆXØe–ò¯º=~ÏvN®Kã�rVûcr÷ا�Ÿ"G=¾?Ó=d\bh5ߢYþné/õ©þðçäÅo÷:ˆÃAëãô|ÕŽ­ÊJ�n'ÿnSœè,^¶KèlnŠŸÙªN¼(qâ·ȩ̀êàÝŒ€x¼ð48:‹0FàÑha¤…ÞVBüê"°Æ)æùB»µ�ð½Qìæ;¢Èç­ÿ|€ÇÿyàsðŸã©6¾ÄŸ)Œ#†BòœN¹¸¡ÁW¾÷P­:x u| �UæF¿Wü3>>´J)ª³ø�…»¾�ßõ�cäŽ{¾€ �è7Úø`#€…~ô¤áG[þv}_›P=Î�½Æ%?tœ?äÄ8x()—X}VV¶8ù«¢ÄŠ'÷þ´{ò¢\æ8rV¿-^y°Óª\ù-Û9>™¸ä®13~¦ëãwy3Óõ¹‹Ï •Ÿh¸,Å+L´Z°w™>+þÑiÜ`Oò ÓˆÕ ù @>êO,% ŒØ È'8Þ°ëɽÿ`�3á¯ïþ£§±Á ¢_…¥ÂDç°Råμ‘G›]æ\æx[4b#ß]ÿžgÄÉVçØuÈ3{ÕïÅT?å™ùW¿-¾ÆÏøªë9º,_Ñn ™´:Æ¢¹¯ë>{rµñ[öÙ¼ª¯æ9ó«¶ká™ûìzùÐùmaQóÍÆ”®Ó÷”üÖ<»~K®zñ¢Ìs‹ï¶§<&ç2F`AÀþ$#ðbÔÿð_lÐ+èèøg‹Ì#Ÿ®ÎäðU�™*~£ÐͧâQÿÛÑyì…?wÁy > `ŠÞȳ±^¶#ª¹ÈO2¨Èߢ*þ¡4rH‡¬cE/ª¹#gçŽ==Ž�Î{òI‡!'/Ž�±êÁÞãÉ»üQth3€§ гA ¢\TŸh溸ÝÉ]/û9ôÍaæ[u•ŸÅT;<­úU¹ê·øêO“¯hÕmñÕ·ût¹úŠÅ—öXy–#?Aî:·#~Ë>›_õÕ\+=²Wßçâum�å‰ù1¾Æ©¼æ#�¨ô¥ŒE®YÓ<αUß§âÏ·ûlK÷³lŒÀr³Á8#`ŒÀA .°f Ùe“ÌáI_õÈ4ì©ú‹‚²Ð0¤ö,(CZ {âÔ«^<ô ‡9[÷£(F§Â»òÒ‰’€bž%-tƇz-ø±ÓÈ©e°Æ—^2´ê4/ôÉ.šôäñ{|†½æSå‡Ï'‚Røg:ôõŽ~æ±™£òa\ÏQ諯Îù¹T±—Ðê[y�Yu•¯öª‡§UûŒ¯ºîßåê+^´ûv¹úíÙªßßã"£VÇA÷”rÍUù>N·u;ro³˜îó‘eðѵY<Äw:ÃJ9ºMØ“ƒ&¹ûIžÙ»®Ê•ïù«­òËÔ�çCÀO<¶ÎlŒ€xVê¢I 8 ([ÕK'ŸJµˆDÇR�‚>Vƒ¬2“V;>*\³ðþë&›ÒU߯‡˜~¢kÎæWõY ‡ZyäñÌÁZü‹W¼ þp9Ù�]ûŒ—®ÒZüƒ[ŸS�§æ®ÊQyŠ|üù�Y/ðÓÆAú7b׸¡‹�Õ–çyøÉ_çþRª¼çЙOÕU^ó¨ºÎïɯ¿7·nÛšk÷ër�ë6dZ÷Y´÷õÝï¹å½¹mÍQzÓåüõk·®ÁÒs¥;3ùÏ|ûçaæƒnæ×u]žÅÍ|¶Æ´Þ�§GÀO�©3#`^�º Ò‘IT}�Tõ©~uA™aUÑ ¥­2ÿ¬ËGUâd? *œ¡ô,�ƒª¸–ªŠ~u|Åcë� �õ&<þ²W^:QÍ^Å»æ'¹úʼn¹Ë=ø{±¡'‡6 k1ÈÑ ÙaÉ‹®ËÅ_q{tÏVÇ®~[¼üϱwŸ.ÏrU]÷ïrõ/НZ×U¹òøWù¾Çt¹æè¶™ŒŽÖãfºîÓåYÌL7‹›ù¡«m+®ú˜_Îe½NƒÛÉõ™ëêø7½¥WŒð¬þÒ�K[ýg:ì—è·|ë8æ�€xZ¼ð´x:›0FàÁœ»ª‹ÂÙ`=ÏÌ¿ûœä‰…åô+•ê“‚?¿z Yz>=²©:º¥|½ÓÉ6£Ê©¢šÿ¼ÔÑÁoÈ¢_4ÄlÌb¶‘ÑÇÂyOWíÌ)ñšÇ;h�£æMbF�à~=ÆÐï_#�Ÿ°[Æýškø,.#èV¹ðÒíÑ=›>C¢3ߪ«ü,¦ÚáiÕ¯ÊU¿ÅWxš|E«.Š�dÑ­˜-=qçÚö|kŽî‡Lë>‹ö¾¾ûuù’\[cH_élœj7?GÜêõ»Ê´ÿó,÷µ5ö¾õ¾Fþݲ¥—ßcíÊcjŒÀÓ"à €§ÅÓÙŒ€0ÏŽÀÞ¢ª.5‘=ù@µ�T¡œ6 ø±]ÊÈÃpÂSôG¿÷Àð“ÿe,Ù+/�hÆá Âz}iAѰSüËM‹´üÕqVß/ÝŒªh‡’Owë×M€ÀnݨPñ~ʶâ9Ok>ñ…bO_èè‰xè*ýš¿Ú /ÿ�éê3{ÕU^qUWùj¯zxZµÏøªëþ]®¾âEñí­Ûª¼Å“ã\ÛžoÍÑýf2:Z�›éÎñÉdíÏ,®¹LÇï>–ÏC@xëÚ¾%“M×ðšÅV=|Ï%»ô’·è¹~5þ!15Þ¼0�GÀ�ÇÐŒ€0WƒÀ¹‹«Ù‚0cGÁ+Æå)€82-*±¯Åjè“§ð‡ŸmÈ6|ƒ¤¯hÏ…žÖõ’U«øç?06è¿G§á#dþ<î�M-‹õú&±´šcƧn‚ÇZøGÍoÝ ¯Šï:yF.6àó8 M¯qÃi‰öÌ+]äN»Æ«>C·Î#l´-yÏÖcf¾UWyÅV]ç÷äçŠgLµ:†tЪ?‡ï1GòSådµšÝ‘¬¸=ÚsìùÚöx„·®Ý’É<ÓÕå+¿jƒ—½ë�䇯åµÝ�çEÀÏ‹¯³#`®�­…› â¤m€Q\¢[E-ü+O|é™�?Ѫ^¼ þJk�]‹m(–œ]Å¿6ÐÁç1%†¦XѪ«¼ìÐ:·'åuŽ!×Mô«¢[2É£�íš^òŒ—.(ã*ïz~†]y«�tÕWºJ+ä+{�©ü%öO{éøeÔù_ÍEto~Ýv‰¼•ÿœøÐjŽEs_7ó‘¯éõ!PÏ— úªÛ›±ü·ç{dS®=¿§g/¿mFÀ< o< 7G�«Dàœÿ�¯râW2©kÇï¹çÇb�1’Æ9Yß]_m[¼bºýHVœ(þ´=¹ÚÄ‹.Ñû«¯xÑ£±•¹ú÷˜jÛâ{ÌLÖX{¶šϯæzNþµ‹ÅŽG?ÖçžßCÆ?Š©ÇPçI\Íq)ÿRã0¯£±êñ_zö7ï o¼·3êã1FÀŠù{º¯ë�Yp%ó©>¨º,�b¶(wôézÿ(ñâåSiχÿlèi²U¾æH§­?Qį�‚>¨¹HT²(þâӯɲu?é{Lõ›ñ{:l´šsÑÜ×uÉ5þ¾Æuÿ.Wß-¾ÇTy/¿Þª?¶*‹Ul—{Ü‘Üã�ä½qe›�Ymæ�€0Fàý#à €÷Ž}„FÀ�‹¨Åo N=…=wõG×�ÑÔ× 'âU|«øç‘z ~^ú§Çûõöÿº ¸ejèÕ*¿§ÃVóIΘIñcšø£§:Ň"¯öôo:Ù·lUÄÏìèh*8Eg:Ù:­¾�å{|—5v×wy˯ê{ roÕÿžøê§|çèºO—÷rÉ&º+»©0FÀ| ¼ð1γ�Ò#põj¼âeߣ—ÚfþèhÌ]m‹ï~Grͳç[ý¶xÍM´úõÜÕVùî·•ë¡ú£8ÙM�€0FÀT¼PÑ0oŒ€øàÔ·óÈ3�ååîÿ cyŠ@±[t�!_锊U†§°ç.?6•’P=°Wø÷\ȳVõ�?Ì¡—¢žäµ¸Oq^ìS@ö¾„ß×w?ŸU_c�xÙ÷èÌv‰®úîñÝv$ëØñ£íÉÕ&^t‰¾û;ÓWÝ?›Ã–nO¯™Ôq¤;—>&öÜ1ìgŒ€0oo¼�så™#`®�ü®?…ýèzü�\Ù¨…ójßaTX«¨¯2|-ìë€üµ­¾ÊSélØ{›éºÏ®¬MœTà'{^Q¯zN_†¹ó­ò/ûŒ>•Ž<4×"�Ê{¶£Ø#»r‹ùÏæwSsÏ|•óÈVý*ßóW›y#`Œ€0{x`ÛŒ€0�,ö+ãŽþ¬�NÝ(þ3¤ø*…ŠéE§B>s Y<9àUØã«Ml´ºP7”ªÖuÝ&¿‹hékk£UWùZ�Š­~ð´jëòž­û^*×Üçðä§Uß#ùÈ7Ž?Ý·ÚÌ#`Œ€x¼ð¨:ç»EÀ‹µ·}j}þžàüE‘zóùóÍ'ú—/wýë×›OôÛÛìø¬=bj±­B»Sf'? eñÒSø£§SÜצ\øh@Øà•¯òŠ«´óŠ;¡ã˜rŒàFçó•>ACX¦7ôØÖŽ¥ÊOÈ/©ïÆÚ’«^ü%tæ[u•ïÿîöä=[Í O{Œ�ÝâgcÌt5~fßÒ¡Wë9¤*zo3ï©;Ï‹ pôù8:¿GñÏ}Gó{îñ�ß�;¼p‡…9#`Œ€h°h¬ ·µð�bÿóo¿Ý|ùý÷›ÏýëÍ—ÿø�›Ÿß¾-oå�;ÿŸ~Fi›7?~ÜüŠÊ*Þ)’%‹ª¸fxÙyÃ?ÿå/7_؈ÎÀ—8¶OcàSÿ7áû+b(ˆkñNAL1 •>ØÜ@@¦I¯�É‹õî/zÆ¥e�¾A¯¢^´ë‘{_}ã8r híqŒ•*þóxC¦øWçXñQGßu²=–ÆPë8ÊUuâEñ_iå»Oµ=–ß‹ï¶.k^èÕºnOî6rÌtÑïÅ`s3FÀ#ðÒxà¥÷xFÀ�7ŠEQàs<ð…MžøþýæsÜùÿÌ×(þã �›Ø`Ó > ‚›’³ó’Uô•t3ذ©cW¡žEú�«N¾3Ý–­ú&8@³ÃG¿�þ9Ž37ÆñRà«'v!¿$�>^Õ‰ÅWM|§ò­ô±ü^|·uYóCOëòL×}ºœ‰6r�c›�©8S#`Œ€0¯�€7^û x|#`ŒÀ[A€–;Ý<Å=Å?OÔ¯ð€ÏQüŠÍÞ ðk<@±Ly)ºUüS„Ó øîm¨`—o�“nFkÜ¥|ýÌ-°è�b?7:…GG�©¾Ê‘C:Q6Ä?”‚A�íº*‹ß£3Û‘;�¹¨]Ê÷ø.oåÓxÝ_ú·å³å+}¥=_µ™7FÀ#pmxàÚΈçcŒ€xE(fô�ÿÎ3-tùò?^ø7Þ�OŒ¯pç?‹îü‡O~€"0ºŠÝ]–žqàiPmTŠ^›Òã¯<¢U7ã÷t²‰j>*ôu÷šÇ8îþc×zzb÷fcUýŒ—®ÒÊ“SmÆW]�{ßcº\Ǫ<~´™nK¿å›‰vrÉnjŒ€0Fà-!à €·t¶Võ«¼üf±çÚªßcxÍË�AѱFÀ#ð”xà)Ñt.#ðÌh1ùÌÃ<8ýµÏïÁöB�׊ó¢€�² _à'¿Òã €ßâÎÿ¯±À&À¯ÐÿŒ§~Ñc#€wðy*Úó—וŒ{Ñ_e\(ÌUvv:RœÿŠ=,ìÃ1 |hïÊ#s ¼Ó€� zã§èù.(›!Ð8æü•„ðI¬8n°{d?zGǸ7Fµ‹%N|2ñGºª?W7ËQóœËw¿.ÏæƒOoÕ¯Û$Ÿã#ßÝ+ò›{6Þ¥º£9ìÍÿÒ±âïù=µ»˜kÇïn¦¯ÃŸ×ÁÝ£^'Þ¸ÎóâY#`^K*úE£"Ì7ÝSÔ~�âökºlü…ï�ñèÿÏØ ¸ý÷¿o~ò@ôÛ°çf@Лø…€Hz×»GL�®':ÕæÀÔâ_5ŸbD÷lò15FÀ#ðQðÀG9Ó>N#`ŒÀ# �¢�ýí—±ð[¹?âÅ¿ó³± pwÿ?ÅÀmÀ¿¢Š"ùËüµ“/äìl DëE?2MÅ¿JÈ-ºd™ÿä©Eç‘)þyRa-þƒ_7â˜Ùà˜øåƒŽ/Š}ý —ÿüÏ›ßÿïÿ½ù-èoaË—#ާ¶6Ó'Úàøz>¿U_ýÄ_Bg¾U×ù#YsÄOm¦ÃÖõ]VüÌ·ÚÌ#`Œ€ø¨xࣞy·0FàŠ+Ýýå1tîh× €Ûøé¿ŸÑÙø1 cŠ~ eî–ë €_üBøf�üÜùT@ðP øº �æ¡«Eåñ‘¼·€M½ÿèÑ�þlŒž›í €ÏQèŽ €_Aé¹ÀSÁë €ü:@àµ>¾ùÀõ¤3ÿ®{€i¦yº^²(c‹¿„Î|«ž¦ü‹t,oùéϵËÏÔ#`ŒÀGDÀñ¬û˜�€0;P°QðÓÄCéÓ €(êR¼ó@ÜýçÎ~@AÆ�sì·øPpÒá#.ßÀ“ѶŠl*ò+­<>ˬçt¯øÇF‘¯»ýkáÅ;oøÏ·üÇ@~ï?Ž/ŸˆâÿSü7Ñ?i (_¸ä °¾PZ•Ïågq]Wå/Ý%t拎¦ãY¤åo×uyÏ·Ú*¿—£ú™7FÀ#ðÑðÀGÿøø�€0(¨¦›Q ׯp÷ÿ÷qçþ/Å?߉ïOüä=¸*rGñKñ�näÑcÿå•§4VgÊ𴪻d ?°>0 þ[Šm½‰ ^úÇqå£ÿ<þ?›ŸãÑÿ¯ÿqüô¯ásÎ;Àù©zbÑòu]•Å‹ªˆ~,%Myiù{®î(¦ÚÍ#`Œ€0ç#à €ó±²§0FàC!@±V7�õ/ü©;ÿ�Jþä]ÜÑÿùÇù}¾ °nŒ'nÇ@ìQìßFÏwP´dkÁßùZèw¾ž˜£Mþ3Ú¿�wÿãXÙ`€_>ÐK)þ¿Dñÿ%Šÿ/ÿõ_Ë@Øó— qÜz àú€Q ³áž[�ãÙ²mé{L—‰“Nô¡:ÅÏhÕÁÓ4Î"ÝýÝÒßy˜3FÀ#`žo<%šÎeŒ€xgP ÕM YžøÉKÇ{™—Üå#þQøSüç[ñ£æ‘y½€ JÐ,üGñ¯—ãå»ÂFñNïŨNîô/¥ì©ÚÞÀ¬èÇ?ïþÍ—Æ1³�_àX£ßÆñ~ŠÎÏü±±¡ÿå]îþ³OPðç¯#„/|vb+˜öμ»îR¹çØ“«M¼(ãŠ�éd«´ó3M9éqõ}\G#`Œ€xÿxàýŸc¡ø0ö”—#Ö¾÷€àzI/‡8e{.œª®ÊâEñ›ñ{:Ù20þ(G×ÏìÒUZã«^üì³)ÛQ¬üž“ÍaoþÏ9¯ss_ûü¯}~çâüQý|þ>ê™÷q_#޸Ƴâ9#`^ i[… ¶,¸ƒæ&@í< ð+¾ @ wÉyìý÷(„o£ø¿�"Ÿ¢>íq<·Ñ¡ûÌONè'Þ!ÀûøjAt~1š2?›£ðOZxAÆfDT£Káß(wö±×�€ÔE0<­@:šd�<ýIDATÏ—ý呾÷ŸwþùŽ?wûéñè?›ù¶ÿ8fÝé§ø§èÏ®ÍhŒ™ø½‹:^•+��dÑ=�|*Ýã±Ñ”s‘ü×#`Œ€x-¼ðZÈ{\#`ŒÀ•"@±¶µ @a�}}@›q,<úþ[Ë·lÔ⟢=b~PLGñÃÀ '< æ¯ @ù¹@~)=©6DÙ €WcîÑOT|þCÏÀººä£xçûýêù²¿8¾ÎÀÏò“¿EáOñÏ£ÿy÷Ÿâ?ŽKù‰±ð¥ÿ‰WŒq)å�.�ÁWu•ïþ²�C«Oç‘Õ4†dS#`Œ€0FàõðÀëaï‘�€0W‹EÛl}ÿÜ�/Å<Ȳ°ÞùÅ?�ûóõ þ_üT tlH¾‰Mƒ6¢/>.=cǸyçŸÂ>æ ]‚ɼ£gÑ6¨øu ôüêùõüxB! þµGÁ¿òl°@ᯮ'b€ÍÝýÏâ< �hbã<'ƒž¿ëödÙöhµÁÓsÖ¶ô3_대0FÀ�çGÀÏ�±G0FÀ¼I(Þê&@-,ù 6:Å?åwìo£Èÿ½<ö•a~×ÿsÜ]ÿ¶ŸcàglÀ'•›Ñ¡É3N™G”ÿcL¾.�: Ðñ$@nDcSÜë¹@¾èYüš~QÄór? }¾ãÿ) }øìÁ£ËGþ+�¹çq|¹9õŽ}Mâ1Å?œŠûŒÇG­ÛÑéª�ø=ŠM�ܳ¶¥ŸùZgŒ€0FÀ¼Þx9¬=’0FàÍ!@!7Ý Ð7…vnDý3�å£Ç�»ãÜ%�Âù6 ÿµ�Ÿ ä‘ûõ)€ñt@~?b³øÔr³!(_Pq™¥gÌa-A)F™ï *ü“Æù,üÉ=ßðß(ßõç¼ìïWüŸâQ~ê�Gþ¿h ìùó~±Q�y<P¿÷¯;ÿl0ßçèú0måÆ>³u}•ÅÏhÕÁ÷ÆXnFÀ#`ŒÀu#à €ë>?ž�0FàÕ °«›¼ÐŽ¢:|ô,þ¢Ï—è±1@áËcðÿQ$¡`Žâþ= ÿ¤¡¿¡àù'|Ð|ó~ÜM×]z6xàOÞÀ#ÿѲ̤ðg��–ñ'tz ïìÇ<øµý¿ ŸoþlðÈ?wüo´/üû¼ü/ŸÐfFøê»ÿlðm€Eþ£øì&@ó8ÎZdÃoõ#¿#½ì3ŠN­ÎC:S#`Œ€0FàúðÀõŸ#ÏÐ#ðê¨àKJaÅ8…-MÅ%…yÞùÇNñÏcñÇÿñH??ø= þo!Šb?ïüSüSx³EôM)þóE}QäSüë�9´ ¯ £EQLÏÂ?æA±¯ŸÌb?äu€�zøAyÙ_ Ð?Ùø¯ÿºùJç88&6 �Ï å` þ èrh¹õ±›71Hîo(ÇÖ¼d¯9f¼t¦FÀ#`ŒÀÛCÀoïœyÆÏˆ@7Ϙÿ­§6>oý >~þ|x@Ÿ6êÓ_¢ _×§ŽÂúSÊl@‘õt@æ¡ûE§ø§�~KLÄÞFÇ7 ú—Í^¨_È—ò²@u/b×¢Ÿ<Ä ]nJOÁŸó ž¢=çÜíÏÇý¡Ñë ÿ~cs ò“Å¥ÄG—‡v¦¿»gÇFÛŠ?²É^é�í¥Ƕ×êçpÏïµlžÿk!ÿ2ã^ûù½öù½ÌYò(FÀ€€7ü90FÀ�‹ÐB²\è(Ïêwß¹ ŸÅrl䦛QèóŽ€P,wñGÁŒß�ð×ÀmÚ·áËÓ·ô(¾ó—(ö‰Eþd`ÛPA_)?y÷cI–îsŒó;�û«Ç“¿Ç¸ü´¡Þòÿ%bóÉ(�cŒÎq'�Ø®—äщۋÁgfï±ò“ÞÔ#`æpM­ÿν¬5׉€7®ó¼xVFÀ�«G€m]•â7Ÿ ˆù …~Ðüj± @ñŸ›«š;ê?Â�Âÿç(þ³ð�»òÿ·|U€_ˆbŸ¢_½Ê9™È‘OÊøÒÕŸ§ ´ €¼¨ð·èÜùOŠs`€Çÿ³èÇ7zþÜßÿ*Òó8â�ä}ŒO�­²x¨ÎoÕ™7FÀ#`Þ6ÞxÛçϳ7FÀ¼:*×B5Šb~! ïúG¡LñŸÿÙ°ÀwöC^Ÿ �¦ø�û‡ ÿàOŠÿxoÀmâlPøçûÊ&€d€P¡Ís©ðþPŠñ¹ãæû (øcÓA�—æa׆EÒˆOÐõøËFÈct­æX4§ºj‡WëzÉØ;¯ÑšG:S#`Œ€0Fàí#à €·}FÀ�A@EázÇ¿�šE=Åpô|üŸ‚4ÅÊ9ï¢GÍ£þØlÀ×âÿG¼8ðvôŸß¿gñOÁ¯¢_<4Ÿ,ˆ|*ü×M邪àç‘ýÜ À6øõ¥…QðçË ã‰€ùæNÁ=7ॠJC~ª> ÜÍ{Žó¡i^â+í<²›0FÀ#ð~ðÀû9—>#`ŒÀ‹  B²ÆOïeqIaÜŒ©” Šÿ[ yîúÇwúáù®ý�è·q§ÿGáP~=àGtøÛ²�±c#€âYYœ�¢ŸqîmP°�ÂʦßüÙÂØ„`3 ùAá3so¿6ò…APZ×=µœƒ\0Žæ´G•ÓÔ#`¸v÷Íï™Îx�·€€7ÞÂYò�€0o·øÕ4ÊàÔS4�Î[ø?ÇWxôÿgÐü™¿ñS?¢È§Ð‡Šÿ2ŠŠüìaû"~P~€ÅYéä}ç…ÏBŸy T>Úè4sÊ¿øëqu]“‡¦V¥ä¤]/ÿ=ŠÍÍ#`Œ€x¿xàýž[™0FàE UKž|<þŸOPhG¡OÁÍW¸ëÏË)þó=ƒGÎÂ?Šù¯Ñg|Ý èWGŸŒ= ~ƻLJNÅÚð~¹AA¡Ž� öàC8Õq°²º¨¶û?²¯ãµ¼]OZן#+.Œ]'›©0FÀœ"Àu¶?pêaɼ ¼ð6ΓgiŒÀ@€ÅÁ5·Çί.|j®-}ü± ;47 ÝÖúàù*@ßvþúœ¾Ö1Íÿµç÷Z¸œ;îµãwíó;ç÷êwt~Þëqû¸>&Þø˜çÝGmŒ€x0,”j1²µp:ǧN‚<ù8þØ øwòï^#8îzG~k>·tž*ˆ¸µØE}æ;àùÊBn<„ŸŠ~Qæ§ã«´òòA§>ÓɶESsÅË¥«VyéL�€0FÀ�÷‡€7Þß9õ#`^  Gú•g—•ïäÊ>Šþ“¢LÍcå GAÿ…'‚g€÷§‚Ÿ±³¨'†Âž.~ØR_uÁ‡Ó«m³œ;ó¸°oÅ£§‘O­òÒ™#`Œ€0ïo¼ÿsì#4FÀ<޽àW1™x)25¨ü%oQòе€_–¬COŸ/ ŠÏÏ(üyJ€âÿ6Þ[ŠÜ⯜+gÕ�˜H�ÓÓ¸9év(yä[sÎtÕ^ùK|kœøY|Õ‰‡ÖF¼›0FÀ#ð1ðÀÇ8Ï>J#`ŒÀ“"@Ѩ‚_´P‹þK L {5ÊÒì1ÖÏèürô,üõòÀØÐ s¬ð՘Ъ“|¢cù1xðI*/ÝÍœ~z÷~IsªÓx•îùa;j5WŸ ±ÒÕ<3]µ›7FÀ#`ÞÞx_çÓGcŒ€xq("kÁÏZXw² Àû(ôóWTðóõ€Á‹²pÒ"O–ñ£`_ç4ô9¿âS}ûÜ«,¾Ò=[·Kשæx®¾ûU¹æ¥áçfŒ€0FÀ|L¼ð1Ï»�Ú#ð`( u×_…ÿVQ){lËŸ“ÇÿË8ÒgÁÏ{¢à'7]wÿgcÕqWž¢\Â(†ûœê†À�ë%ßEWõ[²ô•2N•ágºîÓå#¾Rx7#`Œ€0Fàc"à €�yÞ}ÔFÀ�'A@E*Åwå•\:ÉPê݆ŒM¹Ä¯Åÿ°I/kÜú«è–Áî~I tÓ6 í©-”užâ÷(¶jß’¥e|ñÐ.WÛ¯¸ͤþcŒ€0FÀ|X¼ðaO½Ü¼=T½½™¿¿s.(ÀÕªüTçI9×B?¯±g2s’¾óȽ)—ô{ó—mF«®ó3]팿'WÛ¯{ÛCZÇé!9®9L÷Úk¿ç·wvl{ë\ûçû­ãëù�Š€7*æ�€0FàlX°]Rõ±Uw©\':›KÕiœÙ|e«ù:_}ÄÏhÕu~&£ÛÒ3ÙÏ¡ò¯ÞÍ#`Œ€0BÀBÂÔ#`.F€ÂTEµ ÙK’<¦è?wœ­9jÞ[yfÇ#Ý­¶ÎŸ#Ï|¤Ûš+zùˆVÝ^œmFÀ#`ŒÀÇAÀç\ûH�€0Ï‚g/¦kz4èÑ&ÀQ|µk.[´ûJÖü÷æ-Û9t惮ê·ä™Ï–N9ª]Ç$�dS#`Œ€0FÀxÀŸ#`Œ€x4›µ�?§ ®ƒÖXôU®|�¹”WA¬¹ÕxÙªN|·IžÑ#]µÃŸ#oùU=sU®Îë8L�€0FÀ#à Œ€0FàI Uq]‹Ñs“ŸSèÏ|긌%¹SÍ£ÎMó•M´úH•~�žkïúnÉ{zÍIy$CÝŒ€0FÀ#Ðð@GIJ0FÀ< ŠQê¢ç&¬þ•?'^ãÎ|·lµpžÅU�|Bg1誾ó²‹2ñÝW¶:_óFÀ#`Œ€èx #bÙ#`Œ…© wÑ'+�—æêó •Šfxò�Ój þ’Cg±U?ë¿ûJu3FÀ#`ŒÀÞØCÇ6#ðÂhaÿÂÃz¸w‚Às~Žò«¨Æ¯ìâeïp÷¼òï~•5Ÿ¯1Ï�“b÷:‹­:øÞ_:ñ[s’þ©©æøÐ¼[X?4ßKÇÿkßµÏï¥ÏWÏøtDNeãsЇ%#ðžðÀ{>»>6#`ŒÀ+!ÀbR‘ø£¦¦*ÉÏIgcmÍSzQæ%þ!´ÆtY:�#¹ÓçÄǹ�€0F`®Çú¿/]Ÿ·#l1¯�€7^ÿxFÀ�w‰@]‰¿ÆÅ‘æÆIØš_Õ‹­qÒu*Ÿªßã»­ÊÊu3FÀ#`ŒÀ%xà´ìkŒ€0!@᪻#�¿(Ñ™Î}ŒÙسT*°Ï±ÉW”ñ�v[µŸËW¿š¯óÈnFÀ#ð|p=Öÿ+E×hɦFàÚðÀµŸ!ÏÏ#ðÆÐâˆEÓŒ¯‡7[\Uûcø‡äÖ|5n•g¼t¢Ä‰¯¾ËòÝÒË¥Éo‘ü×#`Œ€0Çxà#{#`ŒÀ @ÁZ7ž åÅ)4‡s{�]åKxùV ßeæÔõ]§y+V²©0FÀ¼õš\ùÏŸ?¿Þ¤<²Ø@ÀÀXmŒ€0—!P=—EνÉ×µœ{^¦='o?–=¹Úf¼t•v¾Ê òLwÙ‘ÚÛ#`Œ€0§xàKFÀ#ðŒPÔê)Q '›ä§ [9·ôŒ‰­¶Käê;ãÑ©k¬.K?£u^æ�€0Fàåàšý›Ó/$ñ£"à €�zæ}ÜFÀ\Œÿé»=-ž„§6D5B—¥?¢Ê/¿.ïé5'ù@»nO®6ñ¢Ê…,]çå³G±½Å¦c~èܽà~(r×wtþ?úù5>×ñ9õ,ŒÀG@Àá,û�€0WŒ _û*ŽÃ:œY,6黟dÑ£qº}O®¶/]¥•gN]Ö¦e#`Œ€0FÀ<Þx �Ã#`ž �ZHmÌŠüZÔw{Ÿd«Û¶dňâ·Åw›rVéL�€0FÀ#ðÜxà¹v~#ð†pQò†NÖNõ±ŸŸZ¸ëðjNÙ»îYyCëxâE•·Ëèg:ùŸc¯¾‘?ÂOŸ�×ÂÆó{-äŸfÜk?Os”o7‹ÏÏÛ=wžùõ!à €ë;'ž‘0FÀL`Ø‹¼®Ó"Q~’'饪y+OÒ.oé5#`Œ€0Fàxà 9Ä#`^Šk÷š� N>Õ&Ý¥´ç<’•¿ûIojŒ€0FÀ�—FÀ/�¸Ç3FÀ�G!@A=+è{¡]}ºí1˜åšécKÿ˜ñkŒ€0FÀ�‡"à €‡"ç8#`Œ€x5TX×"¿OF>]ÿTò^þ=ÛS�ï¾çÎÿ˜sëØÇ#pt~÷ÞñøÑ�3\ûüŽ�ày=ŒÏóâûØì>?�EÐñFàzø|=SñLŒ€0FÀ#`Œ€0FÀ�çBÀÏ…¬ó#`Œ€0FÀ#`Œ€¸"¼pE'ÃS1FÀ#`Œ€0FÀ#ð\xà¹�u^#`Œ€0FÀ#`Œ€0W„€7®èdx*FÀ#`Œ€0FÀ#`ž o<²ÎkŒ€0FÀ#`Œ€0FàŠðÀ� OÅ#`Œ€0FÀ#`ŒÀs!ðõ¹;¯0FÀ�—Dàèwª_r.ë­Ïÿׯ_9ì‹9Â÷ÚçÿÜ@ŸçFøqù}~‡Ÿ£�€¸CÀOÜaaÎ#`Œ€0FÀ#`ŒÀ»EÀïöÔ^ý�ÍnýŠî{ú™îê�Î4FÀ#`Œ€077¬mï­o7tÆË<;Þxvˆ=€0FÀ#`Œ€0 ßÀúHgûm«7ÞÖùz�³�íˆæqúÂùO·�É#`Œ€0�͵ï‡FÅÿbxàÅ ö@FÀ#`Œ€0FÀ¼g|ë=ŸÝ÷qlÞxçñ=źê ç{8�>#`Œ€0FÀ�‚ÀºÖ-:³FàÅðÀ‹Cî�€0FÀ#`Œ€xïø¦Ö{?Ãoóø¾¾Íi{Ö¯ˆ»—{ý§æ¡ß:ñå[?„w=ŸŸÇ�Þ÷ŽßÑñýúå›_{Ÿ ã·‡ÎëÛ|~^ÿ| Ì.–{kï™ÿ‚ˇz)~àRÄ>®ÿc/.5^üŒ¦.þ£•íã"î#7FÀ#`Œ€x�h�+ªcì²ôçÐÇÄž“ß>ïo¼“y…‡1»Ít»S÷FÀ.<6#`Œ€0FÀ\?Z‹ö£ß²u_ËFàQxàQð½ëàÙEh¦Ûaæ/ÝÝËg›0FÀ#`Œ€¸:êM«ÊÇDµæÝšó‘}+®êg9fºcþƒ"à €zâ_ð°/¾ø´‹æ NÕC#`Œ€0FÀ�gE@kcÑgÌÉ�@GÀËÏ�@¿ÀIžQénêF@åŸc‚ÎiŒ€0FÀ#`ž�u�ûŒc8µ8DÀ‡Ùá‰à¢ç ß�é4FÀ#`Œ€0o­‰+ÿfÊxàmœ§×šås\ˆ”s‹êXe—ljŒ€0FÀ#`Þ ç®e«_åsœO•ç1spì•"ðõJçåi}`ü¸ÿ>ù>t#ð†ˆkמýóOýŸ_¿^w½zíó{þ3tÝ#øü\÷ùyíÙ]ëç#æ¥ [§@&]‡ý–­ûZ6#à'.†ÌO€€.j÷h¹P®ÃÌt«ÑŒ0FÀ#`Œ€¸X³öuk‘ûº÷hÆø+æÈ×v#p6Þ8*;ž‰€.V[´§Ñ…MtµÏ.¢«ÑŒ0FÀ#`Œ€¸B&kX­s·èÞQ(fÏÇ6#p6Þ8*;>ºˆ‰Ö´©›\4WŸ²‹ê_ XQ1cŒ€0FÀ#ðœÞø`'ü·_¼º¬)Ì.lÒå.ª.ž.þ™©0FÀ#`ŒÀE@ë\¦_ù­ÃÁG}ËÇz#p1Þ¸2<�zÁ/JêÊï u®ß^ÛŒ€0FÀ#`ŒÀC8\‹êfV$¯¾[üCæà#p1_/Žp€ØF ^ж½æAbÏ�ßËm›0ï�XH½Ó#óa�ÀÑùýõËÿE¼æ'Åçç5Ñ¿þ±ýù¸;G�Åú$ë�6¹¾Ö½ä¢v‰oÖ¢8EÀOœâaé>ç\púMY¤ï»t'|½hÂ+‘©0FÀ#`Œ€¸fúÚuȳ5o]ãÊÞi?TÙ»¾Ë5w·Y67Þð‡àö.$ݦ‹S××qäƒî_/žðU®IÌ#`Œ€0FÀ�kD ­_ëz—éJ†nµ-Ÿ£˜­|Ö�DÀþ œ‹Àìb3Ómå›]Ĥ#¦ò< zIî­1­7FÀ#`Œ€0ÏŽ@]»Š‡Š8Yï6Ý%kß™ïL÷ìÇíÞÞx{çì5g\/,•לºY]>Ю[åz¡¬ÌÊ×Dæ�€0FÀ#`ŒÀµ  5«hÌKë\¨ÚL‡mO¯XÑžOzS#°‹€7vá±q�zÁ‘KÕéâ%›h×KV¬äõ €rñTS#`Œ€0FÀ#põ”u¬Ö¸¢š»dho²I¿å#»©8 oœ“�¨¤Ê¦‹WÕoê¸PêbÙéÁl6FÀ#`Œ€0¯†Àlí*]™ÔlŒyO¯ðºž–ÎÔ\„€7.‚ËÎ�@¿ðt¹‚ÔmÈêò“,šwÿ'Kù›#`Œ€0FÀ�«F€µlYÏj� ­mO_ý*?ËQíæ�À._w­6�}¸ÕæÖI3Ew½t3š›Ÿ?®Nå2}ÇýÎwüGúŽ�Þ‡f‡Àcÿ}ýû{ÜìýXŽÎ¯Ïßc~Ûñþ|\Ïù‹sñ«­agk]éêÄ»®Êðµu¹ÚÌ�]üÀ.<6î P/<[¨®—¼K¹pîŒk“0FÀ#`Œ€xu´f…öÎä†}wÝn{vÒh],?t4éÉ�À™xàL >€ÛÞEDùˆËŒ—¿ìò‘~“êâ©�SÉ¢à<ø�€0FÀ#`Þ8e-û3esíÛlµ|ÅWºÅ+ºÕöl[1Ö¿C¼ðOêR½ˆô‹E•g¼tÐ=^ö{TÅ>ô ŽÅ)Œ€0FÀ#`ŒÀ£˜­M«¾þð?‡ýÞz7&ÓuÌO:ñ3Zu�—¬íU¯uìЭë܈�?z €ÔøÑD+/ÝŒJ—Áþcf|�)­3]D.ùñubÚÞÞÞþúþýûí�¥} þÏÑÿú¯ø�cæ’=.ª4¦ºÊÃv¯eàžÃ¹¶3Ç»—nÌýžþ¥¯=þ9ÇùÚs|íñÁèµçðÚã_GŸÕ�„Ñ5üÖü5Ìaï3q ó{í9¼öøœŸ×žÃk�¿÷•íµçøÐñãš«õ©åA”<çÌAã çu�[åX¶þ+úÑÿͺ5è·è?‚¿ý-&xTôë˜ÖüSu—£r\cß„€7>ÐÉÞ9T.½ žé”B¶=Š/vtÖ¹2.¶äãyûÇ|ÿç?ÿùïèÿú�ÿø�¿ýúõ÷¸ø~‰ í§ß~ûíŸÄÐF,Wo:O³|Š—žl` ý‰nK^Rb½kŠ¿ÓÜçÎñ¹õzšÙq¾Þl¶Gæ\^C»¼®eÏ}NÞÂq^Ë_{qí{î�ÃYù¯e{“} sÜ›ÿ¹¶k9Îk™ÇR÷�‹Þëù] ^ç"׾ËφÏI\÷©rç9—¡Ë"~ØÈÐÅB3ôܤŠõëÿû׿þõ?ÑÿÎ6Ú¿YÓ²¶Å7zݨ<‡žù EGÓœ�èâ}úW1U;ÓU»ù€€7ÞùI¦ZÜó¿Ê3¶|ª^üŒ’ý^Ï‚øˆçš\4ÿþ÷¿ÿë/ù ÅÿW®¯<› þsèÖ €¸°®2~ôœÀ/ÛÖf�ìP5å”\éž­úñË!y} ûµÿBû#�›k;Ök›�>¯E¯�¸¾$W9îµáqmóyΓvmÇúV6žóœ(÷S�›¸N/8]_åóÉ<²íÑa#$Ú/Ž) døX£F­ÿÇÿãÿøßX¿ÒÖ €oß¾i }ñßéa:±KÞ£Õ_[cULøŸqL7«Þ Þx/gòaÇÁ?ø¾0Ó‘]zÑ™N6(�6㥃®ÅðŸ¸HÆóÛßþö·ÿõ¯ýgÜñÿÿyRüÿ Û�/_¾ü5.Ÿ(úñç: ¥�6Dó €ð½'GÜútväÑV¾ê+/Ç™N¶=‡±gþ°¶k+þu">êùú¨Ç­ó¾G�Í:Ïo‹kïóòFGø¨Ø\ëq{`þé¡ç+®½÷þñW]åcäô•ZyfÖuþÆIŽõIÞµ‡ÆÜs`Øø +wûÿûßÿýßDÿ×ÿüÏÿüO|�õ+q[(ù·z˜Nl’gtK‡^-�E 3]s±ø^ðÀ{=³å¸ÆEê¨ÚäB°åÓmU_©FGwQÿóÏ?oã¢ùý¿ÿû¿ÿwûóÎè~ýûßÿþñŸÿùŸ†ê/úqÁÍ‚?Ží3×àç3zøI?Ñ3¹êCÁ)Y6èh‰ v)*�®Ëòkt�oú«Ò«™ËGžˆÏÃrö¯u#è?›/ý™‰kÞ5Âp•srá·œf®ããùFÎÃá&®y'>U.|úH†Š’¯ºÂŸØ¤‡Ž €ŸƒžÈñë·¸�õþ?ÿ7±þÅÿ?YËÿ�µm|˜Ï%]Å ç1Zuð4ù,Òéß=[z‚Íiˆ¥÷ˆ€7ÞãY=>&þqŸ[ímùV½øJáÕ™‘øJOîþ‡ÏÏx_ÊϸXæ×gvMã‚ú#tÆÀqÑý�B?|³à‡â}Õ!k3 ì+_üjÁ²aþ´ÄÑ®ÇF+öEqú÷\œO£^@ŠÿÌ^`ñX\?Áç�÷¿¥çǸŽ×Ü*š¿B¼ñq…'e2¥+ÿ·´ù�b¼N‘S�¼¥ú“"?r�È#þäW©Tü‡-7»“ €¿EñÏSÄãÿÄ� €ïñt€6ôóì]‡´§Ç'�q8W^ñݧêgüVŽ™¯uïo¼“yt\¨â¢5«øø‡?Ó“²ÛödÙ êä IÞ£¹À.i\0¿ȨxŒêW\8ÄW¾ÅËÿà}<@q?ú—ðc@wÿµ) ¢¿n¤Ž¼@ÑéL>´ÄFöE46†|¿fWØ uaw‡…+EÀŸÓ+=1ž–ØAÀø86] ç|N)Æ'^uÍ®Â?íÃvÂ�B~õ“4ºŠþãg±��øáw+oü�5ì·xbõÏØ૬ßb#àÏXÓ~kÜZüWžùծíº<†áWíâ¡ò‘®ËÒÏ|Ók×½˜oþ�#@1ôÆÁÓ¿�¸X©X%¼ó’¡êòC^¿w?ìUÎ;ñÃg�Ïâ}ø�ðQì�bÿk|ßÿËï¿ÿþ•ïøSÿY~ ‹~h—CG®õ‰|£POnà«>+?t*ô¥õŠºl#N"tµU¥y#`Œ€0FÀ�‹8)Vb=XeñЕ>Ò­ÿðÉb¿ó£Â<‹|ìè†^…ÒØ¼È ÙCþëÁÛø*ÀÞYEçÎl üˆ �‘‹§È/ ?“¥ŸQ6ñÐ*‡xb«2<�µäcîU'›é;EÀO¼Ó{ÆañýÜBµûê"¡ø*Ã_Ú¹pÑÈ÷“ etrp‘¤�®MQ û-~oã�1°CÕ»,}¸¬>èh�V]ç‘kSlÕ™7FÀ#`Œ€8-L;ÿ¿½sQn]Ç•èÌýÿžëNv'|ÈvœÄZ¬’4À‡–w©DƧŽß5¥w~¾{º&5û¹Y®¾cY_êg_67ð�o­Z�ãutq檟÷$_Í5ïÑû§´Ýv¤vwLêþþÀ—ô„%ê�›ÓŒÓ¯KñƒÃ}]+»ºôUS_צ–¾ëdkS_7�3³šOcç¦_±ôîºÈ_tÅjªu³ok=í,—uø€ @à¬ò½®2pÎVyûiå¯.½û¹Æ~Zù],Í›{×ÔØzíïùd�Kmä_Ê?îÓ¾jG-s髾ƣ1Ð_˜/üå~íՇ†7µ©Ë·®%(ž]zfS_kég�üœ³Æ£ù4®7þò5¾.kŽeÕwþ[Á¿šÎ·&ëñRÇ @¸&Pßñ\‘zç×÷?õ«šÞÿFšs²¾Tk¿ÚºñÏ8û¥ï1êºø2õ[«¹•î<-Z,§õ�ñ†uä�ònÙ'TÒ3^ùz0ºyÌQ,Ýã¹F±6ôÖm5®u�›—rÛ¿Èzõ«©Ö-ý™æ€ @àš€ÞßjK-}Õù}ÏzÆ#_ï™Sl-­õ{lγãw÷4Ò¤«i\·‘ï<öÄ88ñ—_n]ŠÜÀf\}uÍZÅ~ÐH—ŸW§e^ÔÚÔ§Ó=O­WœcÖ9kLùºº¿üKWsMç¿ü«éü™æ€ @`L {çK­úŽeóÒ Žõh¿ZåœO[ýüK¿ûtVãwz§Õµd|æcÍò³¹Îšb·ô¥ÕØuØ“ààd_ø ·«‡…7ÅկéÎ5²y©6cùzªù/ó™wî½âú3k;?ÇÔX޽±—•žqúšÑqõ˺©6[�3‡@€ °& w¼l£Øz¾ª_Æ+_ï…ºT—¶ú®Û±«9�÷ŠÕ¬Û·µn+]Íýªÿ–äI€€¤q>_‹Ý�êN­>®•õ%ºöeõ ó¦Ü±jîm9‡îM±­}ÅÝ¥¹SÏØ~ZùjꓭƙÇ @Ø' ÷·l£Xº/ÕÛO;Ò½ŸYåòÒ¸ñsM»¾Ö>kg·©Ý“º?B€€?òE=i™zhó:³«¥¸ŽQ}= ½ù—¯¦Øþ›0ùÐx£Ëãæœ^“çÕÐÒFWæíÛªO¶Uœµø€ @Ç è½.[ûÝPuö]—qõU¯wDé3«\æG±õjs^�“Zõ/Ó½­É¶æk캙UŽvrœüÀ7ܾFÚû¡¤)ªßizzó.Ô4–êj󲞿³[zwiLë�oMVMµÙjœ9ù«|­'† @g! w¸Y«ùŒíËúÒXö»|æì{c>³Êe¾úÎ󾯨•–¾kFV÷BƒÀCpðŒ/=ˆDÚ¸ÚæÍJ«-kÝGÖµiõàó_þm5Þè @}sóïq­;­Az½4ßHËœ}Y5õÉVãÝ\ÖáC€ �³ÐûܨÕ\Æ~T_ûÎÏâÌySn«œ}Ù]ßuî_cÏ™º5Yµ´™³ÿ^õù™õŸ*  �†zXäæÕ±mE⇋ôìç:çGV:oöGÖcÕñ3Öø> �ï8­êËz^ùÇ~ÚKú*_5ÅÙ<^jòGz­#† @øJ@ïp]ëtiÖW~—·–òΗf=mõk¬ñ­Ußs˪9¶ÿ&6®s¿ZbÝÖù[Çž„'ù¢t›z`Œ6µù0Q�ãjµkzΜS5Ï­þ¹ù—/ͺ¬j½ûžï’úÈ;—š}[ÕØÿç~ç>„‹Ói™Ç‡ @Ø# ÷ºÚªæ8íÌW®æç&½ÆÊ9?³™K¿Ž§¸».ò‡ž¾jGm–õA?)NúÅ—ÛÖC£Û´Z·-Ý>œÒ³¿BÒìÛªVCoàíwVµ9®}[�éÍ¿­4å}ÕXó8çq2NíRúÖfškd]—Zú«|ÖâC€ �3ÈwÅî¾»|jöeÓ×XÖR¯¾b½'fmj™³ßÙ™6¯Î™k–ï–uÖÒ*¯fû}~ŽôÏ ¼—'ÀÀËÅ7Ý ³Íªµ¦ê޵ˆôk¬¥6ð²³ZõIMãyÓ_­ê|©Î~µ—ÔUÎZÚô5F×Fºjg¹n,4@€ pVõ�19ŒrÖÓ¦¯1ûÊ8}oÞ]g›º}[ÕØ—M?sÕ÷Ø#›ëRMmîWõŒ»~™Ç?!Nø¥nYˆn£j½Z“÷O­«“¦‡£êµyWËX¾l5fnôÕ·jŠ¥çÕiÊ«e]ÆöeÕ²þ]ùütîSùôf¹Ï*<@€ �J@ïp£Öå¬É¦¯12žùÞ¼{Œ´™ëü™–9�Yãœ'}­Ým¦«Fy5Û÷èós¤Và�‚§øš·oR†Ù¦µæ»x4Ùè¡£ æ¬Çk‘M_c©^š}¯Åµ¶�~éöÖ×5ÛO;ó•«MãÒ @€î' w¹Y˼}ÙôÕ?ã‘¿³1Ïš•ŸyÍYci»—îÁÍëÅÖmk½uì ppÂ/}ó–õ ðF6}u÷C$óÒ˯Í}ªîXDõ×å¿úÛ¦æõ³ïõùPÀº¬sÖ²Ÿ´.¶–¶úŠÝ<ŽãjWùZO @€ÎJ`õÎ8Ê[ŸÙ.—šüÑÕmÞ«–±}ÛѸžõ}»¿ëj,=ÇJß}°ø'ûGð¿Kûï¥ÝqÛz˜dÿŒõ Ñƒ27ÿžOÖ—nÁ¾­×âxd³oç[“UÓ8né[³�å\ƒ… @8N`öžéœ­F·Ÿ6}פ&ÿÈU7÷«øÈصVëU“ž­Æ™[úÚ,‹(x)¼Ô×¹w37èá�\?,¤uþÞbÆUz€jl¨9–æ9»¿ø;/«–qúÎÙf½5Y5çÞ£ëØºm­·Ž… @8FÀ^™·o«>öÓ¦ïiõšåêf?ûÎrY·ëç:ª¯XMcjlþáz™b^æ«ü–у$7³5Ö¤ÖüÐq½ãº0׫nv�6þÙgw,÷ÑZf¾ó²jªuK¦9—¶ë›y|@€ �w£wÈʧ«³f«>öÓ¦ïi©;¾ÇîÔ5xNéj˯­j5®õÄ'&ÀÀI¿ü`Zz¨hSÛY×8ïø¨­ñ×x>ð¼ÒF—æërÖmUc?mõ»XššÇx�ø„ @ø.£Ímê�o-íÌW®æ­¥Õ}*ÞÝìg_ûñlÕwö­øÈý?Bëµj9x­ïó;îF Üà:žY¯Cýü³¶²×›ý¬÷¡€4�]¯NŸiÎ¥�ù5§8[rJ€ @à>³wÊÌ­|çeÓ×ꬥn­æWºò>õ�QëϬrj“�!†h^?qàWz�t›[ë�5@õÛyy Ïã;âziìÔV±Çt×w65ùjîÿ]ÇÖG¶öÕ¡C€ �³ØyoLFµ>ãη–vׯu],mtiÝ].õôs|ëiågs}jW>ý¿Br*�€S}Ýwݬ(ÞÈv¾µ´;ºÞc»OêÊå¥Ç#ßã¹.c÷I;ókN±šÇ|�ø„ @x½+ÖVµŒíÏlænñÕ'/­/cûUϸó­¥�ùÊÑ Ðà Å‚8  ‡–7½�o-­†Rijé¿+_?Ý×ód6s�¯Zõs_û5ö˜ÖݯÓk®‹Ý @€ ð\~Çô¬³Ø¹™ír+-óò륵¥–ñÊw>íÌWŽ�!†hN›ÐÃ)7ÆÄ-y÷‘UÓø�ÿ–l>Üßërl«.ÊyÜÎÏùj¯ú;±jÔrŒw…O@€ �ï$à÷È:GÕ3î|k�ÝÕ´Õúªq޳ã«6÷I-ý{ó9þ ü÷ò߀œà6¹Å�ÿ^Z“ï4—e®ó­Íl—KMþ,ÖZ2_ãÌu~ÖËWsÝ{tw5®]å²€ @à�Ù¦¥ËU-cû¶Z‰|ÇiÓwÝÈÖ1º¸ö=2¾úª¹Oõß’ñ‘uo2ÿýÐ9©Ë/NúÅoܶuC¼êæ>;6ÇÒ¿ Ö™;½jŽw­æ¨µÖª®¸Ó\Ÿ6}÷I­úŠ»–}»<ÚÉ ð €“ÿÈÛŸü @eÝÆ·j¯ü.o-múuÎ�tå]S­úds>5ù#}•«ãC€ <ŽÀl£;ÊuzjòW«•[ùÎ˦ŸõÖWZæ«ßÅ#Múøëÿ>.8àŸÁßx yr3mß6óÖVÖkwÝ‘1Ü7mŽ“ºýY~–s, @€Àíró\G™åT;Ë;·²Ý8«>5Ÿc8—š|µÝÜ{õ×zko–Íÿ§øONÿOà=ˆVݬñƒË}2v]Õvä¾®ÍØþ̺Ÿm]ŸuÛU^u®q, @€Àc èýnÕV5£¼õ‘Õ¼Îy ÛÙÚ¿ÖucÖ>®©ÖcU�WøÀ„ů¨nvkÜÕT-ût¾µjë8ŠÕ\—þJ{ëX>²OI}„;5Å8€ @ßF`gó»ªqÞV‹µo›ZÞL—·VmÃùª{üÌ�´®ÆµüôÿƒŽ p`Ø/‡Ý¸Ó4f§§Öù»Z®¹ëSçÏššË±ì×zëÕîÖÕ~Ä€ @ÇL7¼1Ôª®æ3Þñ=UW»«iŒ¬íÆ´v´–Í’Ãÿ ÀÀ œJà�‡ºn’3>âg­—\µŒG¾ûÚf�µ´«|ÖâC€ <Ÿ@·™ÎUÌò™ù+sÛšm­ÛÑk�m›cÌ´·ÿÝ¿a+*â/n8PÿÕf9ó÷ø^kŽÑi5_c÷±]å�Ö¹ @€ ð݆¸yUWó§ï±WZæ�úž#mޱ£ó—ÿ¤„E€€+$•À�‡9ÌhC�úQ5~ާÚ»ÿHßÍ» @€ ð;Œ6Í^Ý(_õ«§U=kv|¯«Ž“zú9fêlþ¿Ð èpÐQA»"ð€C€³nº3N_}2N6žs]}§Íê�“�õÍ:|@€ �çnŠÿ-c–ïr�¦¡vôZ“qú³ñþ-ûÊÔþüìÿ΄8¤¾X¨øè¹ÖÏâšóâFúj=³~«¾ž @€ ð{ 7Ëÿ–<Ëß’Ë>ékºU¼¢Xû©góÿÁ„8¤® l\wúªÔ�w�U]µw5_gy�º~Ywo>LJ @ø=¦æË2ïÍëN»1ªVã®_W£º­Ææ EÿpÀ?…Ã~è@ë|Ô†ýQãfG@€ �§Xm®Wy/vU×åw´®Æs.-›ÿ%"  Â=wtðNÓbFú*×ÝÈl¬[Æëæ@ƒ @ø}VíU¾ÞѬ~”ëôN«sµ1›ÿ â‚ @¤Çžx E¬6ïÝBwûìÖus A€ ü»îݺ¼óYŸ.×i9ÞÐgó?DCbA€€ Òsßp  �nÈ�Öû¦Žö;Zïy°€ @ßKàèfúh½W´ß¨~¤{ž¡eó?DCbƒ�(™ø¦C€œôÑïÝñvër­ø€ @?O`wƒ½[·{G;ãíÔ´ó±ùo±  ÀÀX”Ž <á`<ù8st´~<3@€ �ßDàè¦ûhýî½Þ<.›ÿ]ÄÔÍp0£Cî�;4×OmÀjÞC|)† @¸›ÀÍð;g¾k^6ÿwÒ§û>Pà<‹À î]*þ{ Ò€ ¼�»6æ÷"`c/Aú%ðG;P�{ ü‚Ý�>èïåG@€ �‡øÑwÂ_ðNüˆ ò·𠀿õ}½Üjù5ÀË}¥Ü @øíØøÿöoˆõ}¾ -!ÀAÀZÔB€ Ü@€�ÿ ÐèòZ8x­ï“»ùGà(ð]@€ üaüDÿy,}H€€!¯@€ƒ€Wø¹@€ ð<lüŸÇš™žO€€ç3gÆ ÀAÀ@gJ@€ ð‡°ñÿC_K½™ÿ€›ÑÑñ/à�þ—¾-Ö @€žK€wÅçòf¶Ÿ#ÀÀϱgæ'àÁþdàL@€þÞÿÀ—ÄF€€‡¡d @€ @€Àï%ÀÀïýnX @€ @àa8xJ‚ @€ ü^ÿ¶œe¸Št“°IEND®B`‚ic11މPNG  IHDR szzôsRGB®ÎéDeXIfMM*‡i     ¬†bóðIDATX �W[LTW]3wfx:È[a0 UMÅÄ(!šøcbìŸ� šê˜`Ó´ i¨•˜ôW�~ÊG±111¦>b[`!U›@Adp†�®};›Ü¹Ü™ROrfŸÇ~¬³÷>ûÜqÍÏÏÃÚ\lœ{Ù ëúdz䛥Îx¥I„={é]]]_ú|¾J‡½„KÑh¿·´´\à&– "@ìôþÜÜ܃yyyÕÚ¿NÑÙb*ž��…×ë=ÔÖÖVÐÞÞÞI™ñ¥€p/VcnnΣڅGlj¨ÇcžÅUSSÓF/4Q$‹¼Î¤Í €)`7$‹ö5կ멩©â W}}ýWÍÍÍ_PÄϽ¤ ¨B;µƒ°ÎÝn7Ä ’ eee†¯�üˆ„¬Ê­@t]©uOÇÙÙÙÆž={¾=|øðçäÍ䞣'â’P”jSe:·SÙŸšœDzf¦Ù—µ‘‘tww#æO]]ÝwôÊôÙ³gÏqÊž˜ŽaQ¦Jelï½gΠëV<¼pÁt»ð¦¥¥¡¨¨Hn Ã0©ßï÷8pà‡ÖÖÖýdñ Ÿµ%õ€2*�Gxåþ|þE¼~Á÷ï133ƒŒŒ dÒÕÕÕ�k)Ý:eß¾}ÍW©cTõu ‚ʨ¤¼ýòø1N_¿Ž™”T55¡aõjôwv¢ôÐ!äæÉENh‹Jáüÿy€õ3ÓÓHáõúchß_½Š{/_B‚““—‡›6aàâET^»†>zak[›5,T=[[”ˆ = ¿;†àíÛè>z71Ó]¶ ÓŒuèõk<ðù௪ºݻñ�I)y ‹±›DòÊ©9®j"á0³²ÐÓß]eb…çyöгgø»·ÏV­ÂÏGŽàñÍ›x¾cœ?o–eÕa¥K Œ"¸ùÔ)¼nlDá»wØùô)\n®‹¼µ›‹¶G£'�¦œÆ}¢Œh˜€–ш¡IÉ.-Å"9íeo¼yc'5nÕ'cks �Wº™Š§ÙÏ1Ë ‚ˆ23ìÓì`JF"¥W ˜7·™¨{'&PHàªÃjÔ:Nê¸ruLÂÞ?OaF™n&%Ë�›ËúÆǵ0ÁI#Ø®;w …Ìy2ŽD@… ºVÜ[Ì<¨¦1?C"Mê‚),Æyb^~ŒÔ ã/WôŸäQ&©êITˆC`Z#R¾s'2Xû'ùÌî>q99ø©¬ Qfº—EÊCê!_ŽD%[¶`Û“'Hå§×T 7yäODé*¹1 I9½Ä� ½}‹ôíÛã^Æ%°3 ˆ,ž²îøq<½|õyÒüXI'�&¤]·£„IO¯*Ê3˜ˆÃ4V¤¬åýÏÏÏç%ð-ú�š )B¥'j XŒ¬UîÚ…Ì[·Ì‡HŒ§ð-PvjÕ‘h¼$*,@ĵ%|‚¥ÉXŒÊº·òê8uÀg߈Z…œ”‹QiNÆe]d´Ë<¦3N¯¬³žÄLJ 3¸^Í^Ìþ1ÿ�)¶¨‰á!ö>Ú“çb¡9�£}ìßóÅ!€¸ÿž® z"?{tIEND®B`‚info>bplist00Ô X$versionY$archiverT$topX$objects† _NSKeyedArchiverÑ Troot€§ U$nullÓ WNS.keysZNS.objectsV$class¢€€¢€€€Tname_assetcatalog-referenceTiconÓ   €Ò !"Z$classnameX$classes\NSDictionary¢!#XNSObject$)27ILQS[ahp{‚…‡‰ŒŽ�’—°µ¼½¾ÀÅÐÙæé$òatomes_1.3.1/misc/macos/PkgInfo0000664000175000017500000000001315212624223016014 0ustar lerouxlerouxAPPLatomes atomes_1.3.1/misc/macos/install_lib.sh0000664000175000017500000000371515212624223017400 0ustar lerouxleroux#!/bin/sh lib_dir=${MESON_INSTALL_PREFIX}/Contents/Resources/lib function inst_tool { libf=`echo $1|sed 's/\// /g'|awk '{printf $NF}'` # install_name_tool -change "$1" "@loader_path/../Resources/lib/$libf" ${MESON_INSTALL_PREFIX}/Contents/MacOS/atomes-bin } function lib_copy_dependency { local lib_path=$1 local lib=`echo $1|sed 's/\// /g'|awk '{printf $NF}'` if [ ! -f $lib_dir/$lib ]; then echo "Library: "$lib", in : "$lib_path cp -R -L $lib_path $lib_dir # install_name_tool -id "@loader_path/../Resources/lib/"$lib $lib_dir/$lib # install_name_tool -id "@rpath/"$lib $lib_dir/$lib local liste_dolib=`otool -L $lib_dir/$lib|grep 'dylib'|grep 'opt'|awk '{printf $1" "}'` local liste_dopath=`otool -L $lib_path|grep 'rpath'|grep 'dylib'|sed 's/@rpath//g'|awk '{printf $1" "}'` local rpath=`otool -L $lib_path|head -n 1|sed 's/'$lib'//1'|sed 's/\/://g'` #if [ $lib == "libjxl.0.10.dylib" ]; then # echo "liste_dolib = "$liste_dolib # echo "liste_dopath = "$liste_dopath # echo "rpath = "$rpath #fi for dolib in $liste_dolib do lib_copy_dependency $dolib done # liste_dolib=`otool -L $lib_dir/$lib|grep '/usr'|awk '{printf $1" "}'` # for dolib in $liste_dolib # do # lib_copy_dependency $dolib # done for dopath in $liste_dopath do lib_copy_dependency $rpath$dopath done fi } liste_lib=`otool -L atomes-bin|grep 'dylib'|grep 'opt'|awk '{printf $1" "}'` mkdir -p $lib_dir for llib in $liste_lib do lib_copy_dependency $llib inst_tool $llib done liste_lib=`otool -L atomes-bin|grep 'dylib'|grep 'rpath'|awk '{printf $1" "}'` for llib in $liste_lib do lib_copy_dependency $llib inst_tool $llib done #Extra stuff because you'll never know cp -R -L /opt/homebrew/lib/gtk-4.0 $lib_dir cp -R -L /opt/homebrew/lib/gdk-pixbuf-2.0 $lib_dir install_name_tool -add_rpath "@loader_path/../Resources/lib" ${MESON_INSTALL_PREFIX}/Contents/MacOS/atomes-bin atomes_1.3.1/misc/macos/Info.plist.in0000664000175000017500000000344015212624223017120 0ustar lerouxleroux CFBundleDevelopmentRegion English CFBundleName @PACKAGE@ CFBundlePackageType APPL CFBundleDisplayName @PACKAGE@ CFBundleExecutable @PACKAGE@ CFBundleIdentifier fr.ipcms.atomes CFBundleGetInfoString @PACKAGE_STRING@ CFBundleShortVersionString @PACKAGE_VERSION@ CFBundleLongVersionString @PACKAGE_VERSION@ CFBundleVersion 1 CFBundleSignature atomes CFBundleIconFile atomes.icns CFBundleIdentifier atomes.app CFBundleDocumentTypes CFBundleTypeExtensions awf CFBundleTypeIconFile atomes-workspace.icns CFBundleTypeName atomes workspace file CFBundleTypeRole None CFBundleTypeExtensions apf CFBundleTypeIconFile atomes-project.icns CFBundleTypeName atomes project file CFBundleTypeRole None CFBundleInfoDictionaryVersion 6.0 NSHumanReadableCopyright Copyright 2026, Dr. Sebastien Le Roux atomes_1.3.1/misc/macos/atomes-project.icns0000664000175000017500000131354215212624223020365 0ustar lerouxlerouxicns—bic12 ¶‰PNG  IHDR@@ªiqÞsRGB®ÎéDeXIfMM*‡i  @ @FQB° IDATxÍ[[lUÇ?®mlccƒyÙ�\ ¨TUQT¡DMúU�Šˆðˆö�¨ý讑J M«¶$?Q‘’ŸVB±%)ªq ·©”D¨Ð�æaûâ÷«kßålÆçÜ{Žm*FÏÌž=û5{ö<ÎuÞØØ˜‹“ò�2x*ã ›*N d‹'ÜT¹`\^.Åó�›B.D.à8äû™FA|yy2²}_Ê•¨|ÉÚµkÌ›7¯¦¯¯oÖèèh>„º/F€ÁÇ@´³³3}ñâÅ6ðî¬üh�Oq< \«ß~ûíŸ544ü8L‚¯VGXo2twCCC®»»»çСC�|hˆÞûaÎndʸ?]¾<�N—‘Êú9’À; ¨.Û¸qãovìØñ}�Y„\ ¾Yå� »8K€®^ŒY)¦âQ)[_ÔNÅI'?\ÏÞÞÞÂM›6½4888ÖÔÔô'à_Gðf,&Ä5@>×½ž eEË–¢[PPàŠŠŠèì.ܼyó/0£X†‡Ñ¦¸fÄJYA¢êPB†á¨*¥èq,=€`½½½ÝUUUmÙ²å¥ 6|x ‘gl9ÄñÉ6©¤€3•,-ÖS©”+,,týýýA9wîÜba?ø�>|˜�ñKàqw˜–'$2€2›âqñDƒkß&ާÐÜ\uu5ë%XûÑ9zôèŒi›®b J©(¸U(W=Œ ÀLÐ@³gÏêh—Â~‰r¤¹¹ù}о1#Ä6€”V}~™ ןù°ñÄaP,++ ÁöÈÈH9Œð2‚äè±cÇþ‚qô„~ô%^‰ ¥PÜWÈog§>z€v *¶nÝú2v‡Ÿž•’ôèâœan}µµµÁ9€��p&âpIRyyK¨nß¾}�9 Ô4rÖkt"�9S.¥sõ�S™ü×*H¥¥¥�›Ãµ'¶@â°/*¯X±båÞ½{·íÚµëWàЋYÅìK‡3¬ã°?J†Š‚ƒÎô•" Î7�{�šfà”<€ã­°†ÞD5Wÿ"*Ýw®.W�u]2kVàÞoi„éƒÇP/>áåŒ3%°J«`¶úg§O»÷Ÿ|Ò�yê)×¼y³ûâÂ7000iˆèZ£f‘ ƒ¨•Ÿ9D1 ƒû Ç/‰÷ß×_wõÝÝn ê‹ÎŸwgÞxÃݽ{7Ø÷…oé±îÃý¶�Ÿ­�ØÂ bKõ…•taFw&â¹Pyóã˜ï‚JQô÷ñÔŽS&Šdè§0XFö|ú©û'NsßÀ€ÛÈ‹»Ú§Ÿ¾g»#-»ÖÅχÙ6ÇÄM‰ `‰J c= .< zéÚ5÷ówÞq­·n¹Ué´«]¿Þ�Ç©®bçN·¦ªjRôM«¤óÛâ—«Ll1²„Ã`¶_õ/oÞt¯57»?#ÐᜀÛ,pGpœ-yè!WŽ}}æp£^6¥I@¼…Ƕ`â›­Œm€°ËP#~[ÜNœpüøcw7³æ)T!ê)s»0û)sÓþ3,�E™ƒq,-«$ûÔžm'Å6€%f…²ðvÌp!”)¯¨örngG?úȽÖÒâ®öôXԠ·OÜq] q GY¦‚ßÂ8à?€Žÿ_)Õ6CrV@ -UÂ(Ðñ\×Áƒn.\ùüó.ÿÑGÝ+Ç�»‹ØÒÂ@f�e1Ö½Rh}ÞÛëÊËËÝ,ŠxÆg’Ò¬KÁ$û’¦D°Ä%a7®^u=¯¾êV£Þ‡ü{Ìúñ¶6—‡ãlTÁEçÖ’%Á2XP¢A>èës˱Ò dñ“ÒķЇõ‹f¶2ZˆQd$fB‘PÜ${Ñ_*¡@ÀÔ Í £¯.ß‹÷½ÁEøÚE\x žMçnÁ ¸„D[ý>ÿ°6ãUÜÓgD‚Õ@™‘-[Ü¿kzâ w WXºV9¾ì¤ ä ”„’ƒpëQ(�Kþx†qº`¨��$7‘x4:†˜Á� >,•³mÕ“”± `‰úÌø¾ÓØè–¼ù¦K=ö˜ëÂv–lß…{ãacëQ ¡¦AäÇ´;DÊ ^Cœèƒ²6µâ$Ø/à2°^`�@|Û¶uK+[=±|&lÓåøb»låJ·³OׂÒP¼€A³ˆÓ͸Ò4Öÿ„0v F¹�‘MX<îÃŒðXlù²î·5ÖÂËV&2€%î Á»;_p¾½jÕWü (÷züš"0 ƒw,¾u�g¶éÈCØûýt†ëEþxðbÌqaF0¬sV€ •l�0Û^VWçðƒ"‡ïS�ëÏF\HaF«°jpý�J¤QŒ.nhpð†žë×]ýåËncS“ÃÆé¸5ž}á·ðÝwƒ­—wŽ™ŽbÇ+´U–u¿=¯»€3ñm:Å ܶ:‹ò²þ`l ÆÔÃ}¸TÝÆÖI`ÿp)xGŒ©­‘C|þ„ÅM‰<À'j³Om®Ñ¯#|‚GÎ|c Í^ºÔ0D$ηn p†«/²©B[¾Üýç‘GÜÙS§B¥ËÛ°!¸rkÖE޼Krˆ–H”½RJzà å Oãd)ž½jñÒ áÿ…ãñ,sã#×!×BÙäy0N%âcÏ| `I~Õû÷»Kx>ÏÃj¨¯N�ú•UÜÖÉ#NJd«|T�9Þ{æ÷M¬]¾î_‚1ÊŸ}ÖA‘z´…1³T˜A� KY)NbÖ³Xvƒ*|7ཀ|ùÑ”ŸÍ$KÍ~¥-Nlˆg«Ÿ9rÄ̓ò<·#wcÍþ ×BQF|þÈ� Ki*JÅ­Ò:sH)ŽaÀÓ9@†¡,‘¬lìÏ•b Œ�e¦z ³ÅµÊ« £ö”_Åù+/¾òpö¨°”¦²R˜<¤ëRŠu*m×¶ð,ñ’¦Ä»€µŒ,l5öèþçžsg0kç ôÂ={‚_rð×øÁc�éÒtazgÞŽg=ªíÃ%ƒà*�SNÙ˜VŠ=ÿ»ûö¹/víry˜5~ìä-‘Ù®[+œ¥eg–8¶Í:q}X- �ª'2€T}]•Êrç=žnK·×¡Å'e¢àVa‹6N0_&� +@ÂX×7Ý\i�[œ0ZÂgqÕV]¥í·0ÑLRNÉb@æ~Œ¥ Z‚ûø¶-_qGý‚sa*�SNËb ÁU§®ñ*¥˜UDu•Âe³ýqê3² øŒ(˜RT]ý¶Ì…«~•v¬êÙú„cËÄÐà8Œ,Ž_gÛæ0º£R8¶TŸJÛ§>eˆxÆÇÖEƒ¥…ۺűxÙpü1ÙÚÓ6@6â~ŸšueáÙ~Ö'¿®Þ\ü®Ií8 ±QDôÉïÖ†\BÍÈðÙOBOÄ4&#+åÍiˆ¸ÀafòO·Ä™œ° %M˜ãl=.�Q©q¸<ñœS¨Øÿ8 b#óF‹/߸ÈÄIê@¾œÉ˜"2Å9ð[%/wW�»‘ù2uïç\�DYùa¡ 9çï„)sà¦Î¥òÿüçiÊ6•D—§x#çïìFáY—AN€H�°ÎtºQ©®­ Î¥¸„þk©É–©hôIEND®B`‚ic07!©‰PNG  IHDR€€Ã>aËsRGB®ÎéDeXIfMM*‡i  € €HŽw! IDATxí�y¬]G}ÇÏ{ö{ÏûÛñÇYìlmMB �Š– @ªÚŠUðEm¡H  R�PXJ$"@š–$�"65¢ªŠ€´IJQ Yq Ùc;vìØŽ—ç%ý~Žï×Ïœsî½çÜ÷Üf¤¹3gæ7¿ùÍü¾ó›å,wèÅ_ÌÚrCrmñž(¾ê¯ö:l5ÔT{e•^¼ž€f6Ve¨ü<~¸¢t”oE«»ñ\‡¾1-L#ŽßשŸÐqp‚£C2ùƒ©ýŠ(ߊŸ"žðåšðÿ BìU»öt< ØËlw8‚ o Fá#ò£òcA@Ø"(zØ:Åï–ßÕñã ùžÃ} 3úÕö\Á(šüô|à'îØ±cúÎ�;ÇÆÇÇG÷íÛ—@#„Ž:ìœÚ™+_òï›2eÊÞ›nºé±-[¶lUC¶Éo—ß)OÛvn èk ЀM=ÊŸ�¿÷Þ{ïT×µ�6Y�À‹iÏýž={²Ý»wgk×®}àcûØ=ôÐS’ûyyÀ° xfƒÃbM€òúuh3o 0[mOje}¿´YÞ²R:óæÍ;ù‹_üâÕK—.=FÉ åçÊÏ�gú£Tl£ZÚõ �­À¬î@‡®øp Q>Ö`ïÞ½™¦µlΜ9‹¾öµ¯]³hÑ¢£Õ–"òÅïá‚~€C0¦[Ù„Mº�o¿ñ^å²Ð'›={öœË.»ìŸ§OŸ~”ø‚9òXÁ‡š€ÚzHëÉ•)¶'†‰Beõ�Wt!= À ¼ð ™”?çšk®¹rttt¹ÊÓ?,@Ðè/xá§„S)vªã)ÚA§[žááá,ôÚäk¦ír²©S§fJ›'\¥°,⤶MÀCÆ 8D_îÐ0<„h’' |ŽÇ±ظqc6kÖ¬lddü£h˜É{:˜Ô h ô‡�ÁpÐjß™m„!¨Rñ~ë…¯- Žص‹ó Mü3fdccc‹®¾úêÐåRùì &¥%h¯F÷ìRŠŒ¥×©$V.–ãÒaì½ \¿~}€Ž”%¸L|–ÉÎFXNJ´5¶+v°ã]1h�ØõCWAº@V`óæÍL9fΜ‰%XvÕUW]ªlƒÀÓÁ¤Á„ Õ¹îäÉ"3fåw~ƒ± ÄhW�ÅW\yå•—t@žÎÄ2²ÝpãÚú·±Ñêh@ÖV`ûöíŒü\ù†c®¸âŠ‹%€wœ²Eda8)@КVxȯ�¸R˹n@@œužià§M›–ï ‚@pÜå—_þ÷bÎÂЖ`Ò€ Ð1½:wp1ì•_ÝrÅú|íòáµã„8ït”€i¶ˆ:1ñ‰¿Ty,AèH,ƒ \Qa+@Ö^åuÙ0l �µY„õ†ñ*ŒúÐQ–4[ƒpgàÝ�A@¸bÅŠ?¹à‚ þB<Š–€ÝAk €ù„::êpp–Ó °ÌN_·n]¦sÿ<es8„ÃÌèý(ßæŸ¸×Я\¹òÏ>úÑ�îøò—¿üMµ‰!Ü)Ï )ûà£2ÎSRnàp‡õ'öÄ–¦ ^ñ{”sGpÛ¶m¹â­|ômH–c} Ý@¶xñbŽ‹s0üñïùð‡?¼û«_ýê·ÕJ ’¬ðÝ´~M�``@è&\S|вt;¨Šs<ü8 Ä®#Ê@ÃSEXŠ äÀZµjÕûÎ;ï¼q=vþ/âa<– 1´ €~”ÕOY:¨[—ª/ ÈÂ3îc`+ß°@–X Èk®¹¥¬C¢|q¨"uþùçïþÊW¾r­â¹ùWhðrª­‚¢½»Ö�êД¨ÝÒ§ø4�“Ë£×+z”È`4E ›•_Ç ñŠt¦½x‘ò_ðƒÜúõ¯ýßT¥[ñ¼�ú"´ª£/ ´ Xéb�[Yh‚ ùä“Çté|­6|ãßø‰Ø3úY Зë÷í`ö§€ˆ§^çÉs›sÅ/ùËoi„p‹3wn¼¯» û-ßm}Ðh¤{¤£xÞvšËÚ»œÛ@h�‚¡óuŒ†©�ôM›6=xÎ9ç¼OüÖËóF²ßFÞ'=O­Z7HÂÖv½”©Í¼ ˜îg‡ã((eö]�ËùÚ¼ w^:ŸPVà8å1Ðx~åsò”ïöìZ€¯+UY'Ôå1:· …Zñ¤¯ãŠ@p™°ý1š ?|x²·ÆON àÆÂ Q±ìI�fÙm 6¦¸T#ÊhÍ;AÃ3„~zÈHUS+½ �ªÙ�Kå×Io‚GY=‰Ž� e ãUíUu¸½e †G:hà#�©Gñù�­¶ 7�ÆÖqÝÒ×áY‡æ©Ç˾ÿ©Oesn¹%_e±·Z³re6÷�ïÌÎ~ÛÛò}>Û2nòX!uø†í)ƒéR4ÎW�žóëT_‹¦ p t© uéJ™ô‘ÉÈÿ�”¿LÊŸ/>L²¬¨vÏ~éKÙ�µÕ{Ý;Þ‘+qèS”9¥¸P,—)£­Còl"ÞØ\Ò�04Ô¾›rEZóè'|ð®»ò‘�òy<—w·ìyƒcóu×eO |Ä^É9×Pbâ¢-4ƒr@�ÆÇîrÅ0FÛMû÷ÇÖ¬ÉÍ>ßsa�µJ~…¼¯§?õT¶öÑGó;vúpøã}¿Èr¡|eD.LÉÊ“ªòSåºMoe ( AcºqÝÒwÃ;¤Åï‘R= 0ý¾Ûn¬­xnöØW- ݆2“�,UtÎån2î¶7Éó/„¯ÛÓÖ¥?PI”³üijăGnðË?.¿K~‡ü <¬±hÑ�‘O|]9ë¶«Š_U¾DíɵbÜè*‰šlT·¼0ã/èþûsÚâ=}ÜqÙôGÉï¬`úóE Â òCçž›Í׃1ÖY5Ò)oúmU~L†~ÓZ@•Pnh],¿Ÿ²æÇ8·jñwÍM7ew+þfÝߨÌmò¬ÀÖùó³}o~sö;o|c6,�PoèEr� åJ)ØL›¢«Ê7Ÿ&Â�À «+x·ôU|YÀÝ&Å_}ã�Ùíz›WOXf³5¯÷ôÓÙœ³ÏÎfÜsO¶^ßþ{äÝïÎÆÎ8#;GOçŒhïÏ@x Tuöo¹S ¶œÐ•ÑTå›O?á@à©#h7´uøAƒ¹JJ¾þŽ;²Ë¯áœߥùü{¯{]6méÒì=RôŒ‡Ê8ë¬lÚ’%ÙiZ ÎîœAP§n·¥JÉðJјG�úz¡iu…¯K×mQüÓÏ<“ÝðóŸg×>ð@ö”,€o^S•¶CoíŽëéžÛN:)ÛuÊ)Ù�}¹vmö·Þš}­°À éŠqnûŽhÞgô³í³ýóoúÍŠ< «r†^ëd> ôN JAnS]™¢]Þò4¶ €ºÂéPêZ�Á?£›0(ä„ÓN;° ƒ–Ñ ¼¥øë|0ºÀ+묩2çS:£:Ìÿˆƒ1÷_Ú œ*?Ú@ày@d±ìe †g]Ýü˜|ý¤µ7¨L¸ÍÓRüÝ?úQ¶î;ßÉFu†‘yû©§fsÞò–ìÜ·¿=¿-»G£÷_eê(¾¬’DÞpgô³ÌŸ¯–ù-˜Ý&°¬—˜!k�òm ØÚ…m)ƒéR4ä§ò\W“áK-h�«™b™Ê߫νGÊßöùÏçwä¸7¶k%ÿŒü�Ú«ïÕ3ßÔ~þ½S׫Û+eï<úèlš¬È°Nõ\u6[ûþ¢ù7ƒwK+À ¢¦%tûÊY¦è:åÃúú‰·€”@nX*ÿÞÛoÏÖw”Ͻy€5ú†“OÎ.½ùæìq€-[?nŸxìÒQïA/FdÃRæ‰J+swÊêœ)L—ð:K�¼ÜÞêä§Ê–ÉÚM^«w- uc� §jD2 sÏ7RVËóÉ i¤°§5ïÒéý8À³‡›;ZGÇÂŒ)Ó"¯Ìa8>X<„:íªj�²¼2yëæµ€: p÷؇N~ùý÷gK�yRÀ4)‚U|•8ú;Ïl—æê¹Û¥äú0Ú•ž;ñ\ ô:rÞ'Ú�ªßÏd¶üUò”ÕQÆ£,¯ªÎªüV§€²#X1_»yàÞ<æÿ×òŒ÷ݺ!óŠüAo~r‡¥ÕÜ=®Q¼[ÊÝ,ÆDž;hÇe1^”g´ç¥ëƒ ÚRì€Ì¿ìy6LXñ\#ð�!ylyX¶'eºMS–ŸÊ«!b×$­€Fº¡1‰Ry'�~zö?º3C[;TB·nÔ܃žÐý•¾£3_¥ÙOš—·+}§”0“¬üÝC#^ôKÊFùZùg²9D§åv€ÇubÈBpáG”ÊM‘UßïÊ ŒÊ³ôb°x0ä6¦”Y–_–‡ MºÖ§€¢°n\1�ëQ)í­^˜M9ÿüìQ]?)¯”r³öçÏI�~%p h„ß§­ÛVÍéã¢Ù©ø.�î\ùŒ|€O\눋ÀAñýÄ/Y¥ª'ž>›)+Qµ ¼AàV±­  îT�^f zÉÛß�þ~w@JTçs¼ øòÆ+^ýêüì+52ô½ïeO¨Ãõ×Ýù—’Â(£…2’ E“�pÏù„¤ãeIò¹! ·ƒ§´=âÿ¬¬ÀQ:(s¬Ö l m X "{J‘ðs;c4uòÊdê5¯U¸Q)áŠù\ûkî$Fô¸¥´qÍù»•7¬çú†ÒrÅ2ê‰ã­|F¿Öùµù�Ä#Oï”Ù¨EÞbÍó< ”rl o–B'k®Ü&ËãM*?•g¾1~ý¤uàß‹xÙ*�SùX,@ œ.D8bƒêPúTY�izŒkŠ€p`u*EëÿP8Ï| Båí•ß!T¹»TïÚÎZ+`ïr´/ÕFhÊòËÊ™Sa+(k@YÃÝ(L)Ÿ_|Tñ]çœã¬hˆ}Èbe†TŒdæ~,ƒÀ”{⦠C•ˇ° ŽÇÆoÆ;ÊO-«Ú›ê«Tz…X]g·€”U� ; KÃ(‹ºnŠÅyÛ‡Òáã¢ó÷SíÿuZÂℤÄï•Ø©iÀëÂâa–Ë”µ=•ö‡ù4 ©FÒ TCQ>óëJ=£·vãP¢Ê磟¸”•/Y(�)ÙiBE},ï×tá“A”�%H¹T;¡¯ÊKñì7½u”5Ì /k–@ŸTÏæbÊKÜfZ‰Ð2úq¤¡æv¼`z‡ÚÝÊO-Òr~ÁÏÊì¨ BÊÒî”ë%¯¬Lªž:é­ LhòÊòž|¬§lý–9ýgýKŠ ,öXùÛ‘Oº�¦äIùO¨®‡õÀ¼9T„M*»Fç@¸(k_¯y»©°5ôÓ@ʺ<áTY�7è¾2Çx›¢9øÀèfô«ìAJ·¢‹`¯U׋Z,>¯ðW[·f�[µË(s o8a[Š<ªòŠôm\·+/&pYô±|¬Àêc��±;(�á!æx{‹³âC PL#Qà­?6+|H‡QÏ>ñD6ÎC(湟sþë'†¼t�DÛåüX›ÉK¥»\a+H VÖ òRùLìªîÚј©€G»Xí£HœŸ eö‡¤ü™L7(Øk„XLîÛ´)Ûüë_g›ôiLN·imág“(îÊÚ˜j{*=oW?@YCÊòh# ÁÓõÆÎj[ᆥ,}w}ÿ¾¢t@�R‹ž/ÏA+tVpâQGe'iêX( K�ÂL™xåAÒ}:*ŽáNå?‚ma ˆŸjo·é]Q+»Õ£`KÐkÃ\ŽÄ̯ëÈCÑ�yä~3Î"УE8âòìÆ®Ô3ü©#ލ£åja÷œLþó çlÜ(rÑ+Ÿƒ•È� ›G#ÌTþìA<P €uójÙòåÏ8²(ôy†ÛC=ĽNàÚ®,Ý4M†­ lt(x*Ý4a>Swþ¨ƒËÜ^™ýaÝòå87wRðLù]ï�2¸ç�ƒ× )j¡”7SŠÏÁ•çìÿAÑÜœ¡Åà‘À6�ìÝR6; 8“Ï©„�°]Va‹Q¿NjÓw¿›Íxî¹ì.=uô¼€ñV}€jù1Çä»Î4XÏØ•);—k2|Iš&¹vx…J Ù§Ò¡Iå1ŠÞñ¦7e·\}Èê@|XŠž#E�jôíTÇo` ¥­ûŒê˜KÕeZòǤÔQÝš×N`›þh\@`*0f)þ§�?žÏ÷»$ñ?œM“åÐÄ“ÿý×üãÙk/º(Ö€û“ ­ Õ¹©t:½,+Àv0꤄iR6/v0*§ë Ÿ#ÔÙÓu‚Ƚ„~]ñӹ®FTß)?ýi6¢÷Ø ެ°ÒG¨®ÿÜç²w_vYDxáC«ÃulħÒŶ1×±•�ñË!xÌ¥Ò¡­Ê£Ã8>*0¡®ƒíßÊïäaèY´-à.`“Ní¢ž²óO8!ÿg%×]¯yM¶Kyt&p;JžÏÎge1Oç ;t¨ä"»„¢Kµ?•^,ßëu+ˆ “jé©<ø8 °DïîÍd{8L?/nNÕœ ìP>Ý;O‘†£,(Ò4¼ի³×ÿ[}a„Q�I])¿HžÎÅÉj¬Óû‹>-©/òCœûà�ŒZ›BÙR H¥S¶˜Ç5¾x$<¦-܈FâPgôs+fT Ái/z„òu×QQ¾ï¾;Ÿx’à.y@È”ÀÃ#;5ïÏÑšÅs6`ÏZ ÚXL‹Cúƒ´&Ü@´¨à�&–Gö}Åã>½#€ãЇmœþX'¿fòˆø‘‘19Q?˜ræõ³åy:i‘üä‘UbGñO-ë†Õ¬ßü&çÎ^K¤GT²Mò£¯=TŒÝ'9/…Èé´;V'˜Œw#KXÎü‹å¡‰åÅÒûI+ÖÛÆu+¨#hØÑeôE:®‹£<,_¤óº�›W]eß2EúXZYz-W‡·iràŽt¥uÃnËuK߯ýÔ+K«+c¯tbb �¥Å•¢K¥›GU>tő버”�åÇÒûI ë,«·H×ëõ@,@/ÂÅKs'¥ê Lª\±ŒiSôݤ§h‹u¯{-WäS÷ºuÔiPšTƒReIOå¥x…驲ݦWñLñ ˵oM ë¨Xõ¥Ò»•>1^±´ï],-V6Lë¥LX¾,>)ÐOƒ«Ê’óe�ãY7­Œo*/Æ;EÛoúÀÐTãb|biî òúÍ7/‡eüš¦1¿¦Ã� —Ôéè2¾Ý”‡¶úb½uÊÖ¡é…o±L�ë @/�kXŠO*=Æ#L‹•«›ò!+W¤)^÷R¦È£Îõ„ Ž�Ešº�SE×K~Ud­CÓk›Šåú½>,P§Ñ)%�nÇËè«êK•-+×K™2~½æµ€ýo?ö(Q/S·L]U¾›T—Îô„½” Ëwâ}õm„_þh},½Û4 æu»-ß:}]ÄèbiU÷R¦È3ƒ~¦�qîóýW=þ6i¬|½¤;Ôˆp=¶©ïÑéøJQz)SdZÆ£Ó§< ‚ È¢ëë¦`¡�G÷'½£³í{¶LYuùõÀƒwaèc[#ƒ¬ •Ïãú=»Ø·ž™Õ,XGuhjVי꧟ùæߟh úëÜÞ�$¡xô‡ç®yC‹÷2ù*/ðêß3}®3¿ö÷ ëíQ!üæP ï¿¢l¾TÍ·&x ¯FðR4`ÀÚî•{VbÏXXÌŸÈÙ*�e¡Ék}ù§~¾ uB GŸbæQ0 à¯Ò}‹…¥¯éßž¯²¹k ‹Y²ùçÁëàÑÿ2Ô5ŠÅÓ§X &¬ƒ¬±) /`z:Ó GPœÁ€ÀV>áeåÓ;õ�­€A@ÿ2¨° ÄégžRêË ô�³�€Òá�âí}ÙÕìúÕÞ#žÓO;OÑÞ]_‹@WÛ±á(Þ#ÞŠwž‹¼Öë+Ù!ŠÇãü¤÷åt@�G ½¬üB‡tyYTr~Ý„òse5¢d{P$i^Ψî�¦”«éýn5‹uIEND®B`‚ic13X‰PNG  IHDR\r¨fsRGB®ÎéDeXIfMM*‡i   gêI@IDATxí½é“Ç™æu@)‘RSuµÔÝó±gvl­¿ìŸ½Öf«=4ÖmÝ=#±EQ¼I$ÎP÷¹ÏÏ+ž„—#"3"ψ¬p3O÷ð;Þðçñ×=<<...²¶š™¶¶ý:´[}«½�ë:< Ýãb[ï³óŸ\÷ŒZðŒšNÒ:Q§4³ŸŽþ�VЬ‡µÐ4(| ðØoI…9®sg'�"p˜Ý¬#„Ù= jn”€ßǵ?´�‡Ù½ í~g%ƒ;uia¶¾Æíˆ Haú?�!€ü1�ñÛ²^á8‡Å×±ô‡uþÉK ½Á‡;ì99À¶çzV§;;;'/_¾>&lID° ˜Fg Vþ`:°$&ë‚S×€_€7øƒ»»»{¤gñòèèè@Ï8–5àš¼!›0= �t$`‘Œß�)D·ãðÚè¯4+ÿ÷ÿÆ?ýÓ?ýzssómu†e�0Ëêd‹h¸ÝÖermUWFÕ¤]:I@äÛ“CL’}Ï.ÐkHYßê`ï €îm•9ÿ(àÎ9‚œº¬5%`� wÃó ðFçÆ[o½µø·û·/y¦úÓŸ¾ùôÓO´ |!t$Pó9 J>3( ~?l»&ÚÆ`Å€:S”mЭuñ³�@üÞTM@q‹"�õ›7o¾÷á‡þïrßðÿ¯o¾ù†·�€›ì¾ák¼ÈБ€¥2wf�´Ýà·k¼û_üIžÞå+.éužH2Àþ|A0�»Öni:°©ð­ ì(nAë_Kp«KŸuž #KjD·)ÀmüÖz$ ²Ô�F”A—}‚€ls ¶Å¥¥¥‘À�~ñ‹_üwiwоüòËÃH ÔªŽI¨Bü¬ À Oݘý!ƒ þ·i´oZ[⬠u£ `y–"Ì––ÖïÝ»—ýÃ?üÃS…_|üñÇ_ñÅU›Ù‘@UI•¤›5¤ÍЉÀ$àí¾Äu¦á€ôRë&›ì*n« îl}î±5Q£Þ š¥¡ýq¸Ž­5ß'i!¦úÞ#h €â™ ,²& <«º'4�gJËšÀýï¾û®è6¹ùT I* k5D÷Ñy"ƒ›æü>®Ãˆ� àà€£²L£~XÀ¯xv€ö4�[2ºþEñš€�Ÿ‚Ÿ"0 \Ê¡ð·UwžÂ»™R`ÜɧTe¥jÆÝ.ZŸޢô~fvM”Kz,s|Ô@{4¥û|–ýÝßýç \èT¡2M€d©éH •H~Ý*(¹‡.¸!ä) ø¸?~Ò3 €x€Éל$éG/6ßÕ>�ÿÊ ¡®ÿ¿H¨ÂT ÄÍýDB‰;f|m½uåQ~„ƒ¿ˆ ¬_ ’>&•ë5�ÛÊ¿B=Ú1øœ²õvàÛû÷ïW!§ ß”« _S̵5\ÛG?™OIÀn\ƒ×b­  àg@:Ççx¥¿Þжá÷¤ ü£¾&ÜR}"€xMÀE§.€G Àt$p)‡pÀfî�'íœódz»CË7¾ýާ…y¬�ÎÝEØ(¤ó!ï(.hz;ðÒЧÄh$}5¿ˆ2FÞŽ"at@$ŒÎ;9 x“A ˜4i¼·*' >—"pó'Ú1x�&@@8Y(NŸûSu¿#�\0sEñ¨RÐ º IÀàO]7'ÖØÀZiY .6yÚ  hŸš@èÃhŠ»ÐšÀýï¿ÿþj¦¸€WþŽ$‹¹"€W϶ó5E))›ŠÚÇȯóæ âÑ09诸„«,4A8“Fpƒä"€tM Œ®= ´’ÒNEgh’izûÊdÐÆa¸ÿ¸,®Ë,õàLÐ Ò[pY±›çá¯áø¦øŽÒã^èOd^P¦4�ïDx¹)ߘ]Âm®5 ´†è�i�ü¼ ZZî°ÔÏuè~ˆ€5€øU ilœÖ×*— ÛZ ø½àK¢›ºþ×\ˆ ÀYR÷Ú’@k€'FŠ;Qú'u=‹:'u/ýÊ­{Ÿ1¸)7Îï8‡Å®ýi[>£?.iL.‹ô¦`¶ cßqM ÿß� ½`MÀUõ#ƒkI­"?ÅÎm¾b�Û�›ÚÐø!€x À�n×éC@þã0¹üƒÔm­¼ÿóŸÿüBk¬ d"ÞT1׎®5¸cVé]š×%P&?Ö9 z_¹ÎÃè�Ÿ<©@¸-eعAPÔ›ú„xQe\èOew®¿!{ "è§\²Ì5Û,t­  ¨#va““€‰·ÈD@À:a&‚4q6±_a|B|Gdò³üíÀ†®ÿ­�&�õÑæšÊ:š;Mç6C>­1�?¶ŸqÚ4¿®Ñ6´cðM—‰& B`Mà�þž<-ö“¼Š¹$0×ðêYv¾¦I ˆœ hk ý ½ïÍavŽ&ð¦Þ œë¿ϵ$€&�‰º5!3PÔ™.o¯™¿³n¯�ÖLé\¶  "€¸ýè{Z„âùWée7~—ò”æâ׿þõ¾/¾ýöÛ>,ù)6ŸkM 50kÐÄ�­óOVJ1qÅ~ZÃulã0ù×wWšÀ…4Þl¨Ž @¬ Äëø{U,ÿÜ’@k€JÇh4¡ ÈcX3lûSÐ [šÏÀ�Ãý¬cׄ@úta0-Ã׹˖a,ý‡O�Ñš€> ú^D@Õñ¨oÿÜ“@« î �¿¹´€­ŠIÓÅ€�ýQ™”—_ÇáÊ»&{M@ûδHÈ5šÀIT. �?×$Ð@ôäép�)—@Uù$  öËkÀ:Mìâüi™Îƒkq¸ý4 ÷[¸wçÎ�s…]ìííðv@>òÃÓ§OSð[sKøwîX%`S¨ý¸ö”ë"cð ¤!¯5ò¦Æå¥qáëÊûùµOà\‹„h™ ÖŠ $@¥¼›œ›5�kIq'ŒŸp矎úÉß$a×-âðC&Çár4ƒ?®Ãa‘K¿çƒ¡·Æ_]èXòå šÀ“'O¬ Ä,c?é熮%èv¦ˆA:¨9Nk�€ô ¯Lœ–xÛ4=á"“u�4ücùx;à5o ø�5¹ž˜KpàÉ̓t?tæy7© ¸¶&ƒÜr( #ÞqrùŒ˜³1aM`_FgœkÛðÃMÀU@ñ¢Q+�KðêÜæI@@ë�ÜE­Ø)Ø�.7ø‡ëxêðtÀõÙ�ÓÛ¯¸ Y4�LoNtÔØò¿ÿû¿_ˆú­ 8»×¸n ´šüÀý$fíΪ=“ª@LÛp/éýøšöØO»ŠH€4ñ[�²ö“.²hÖNägM€cÅ8^ìáãÇ�D‘0ÖZh5”=Ü.¼�0øí–ÝE è2Cœ-iJÒn*ê§²Kœ'°ººº¢º.Dý4¿"l% ´‚`zwŠøáó §afQç4îkPuïÛ "Ÿý®£JY¬ðs"°¦á|°üeùãòñÇ–r|�?¶„Ó–’GYàH1Öó5�Ç;;;f»n^kI `)wn{$>ö§wÇqÿÌÖÜÃÃÃL#pHNšX­8C8áÄÇåà'.¶¤sz\Ò”ýï€ÖÐþFvIm:Õ†ï’EÖR =­$�ŽôäâÎÓìÌp° дâûYò¡ìîî-Àåá´¤qù„bǹl®|lIgëpÒ¹<—•— ó¬Êþæ›oʽ!ó¡¦�ž={~_Ç$@o ½0Ø€žPg&/�̪ÝÀVßíæ€¼Ò@‡9‘ë2q‹,$!h´ïY®c£znÊ~ òY á¦1$ÐJà¡MÒLºüI¶}še—ÉÉà¤-¤‰­ÁňŠTÁ@þ”B¢ü'.Ÿ ´ñ5õÅõ;=aiœ¯qSkÒ"ŸÖÐîªíg �«ëSµùLûžiÃ� Àà�5w^Çåw5§•0Quµ+ƒ à,Àdð; ðc‹ÀŸ>½¦üØø:vñ²&ÒÙo—6ãÇÒvÞètá[ÿoå_øýÏ>þøã³|Ç $Èc20„æR�îe¦Dp­ €ЙÉJ –±�e1Êc—GÿtäOñ‘^§­Oë#ž°Ø…Åñø ü8œ°œ4�u¹oçÀ MN”æXæDš;¹AVM¸tº™‚^õ÷̵&€ž:ÏD%X0¸X`ƃ?%7,~ìw¼Ë/ºNëwZ·'½v¸]ÇÓV[âä_Ðᢋ:SðŽÖ~«%^Ô½ìë ÑCÅ�‰x;�€µ€F�Àµ V“Í´ÛW qËÈ÷åúrЄQÔaŠQÕÀ·ëx·É×vžº®Óá¾.r…ÅÓ^Âs» HØÐ´àÙc- >VؾܽÏ?ÿ|Wíàû,ï±Ö¡ \ �Ð;Ó 8€ˆy4×øcÐpÛ¸É~êÆi(/6¾.ræô¾N]âã0üñ5í—Ŭi)à®ìï¤ëµàƒþçæ_HYXÊ­�sCUÔl׿Šü`$왘Y×_õ¦‡m§Á7¨—Ÿ¦'\@ Ùñc?Czç±"ò8§q˜Ý8­ëvœ¯íŽ?¾NÓ:�ÃÓkçu9r¥Å,ŠÔ¶tïiðHÓ�måãÃi3ŸÌHÈ�i¨ š ZÈ×ÄÅ`ŽýÄ•™Aéâº)Ã×v]nzíðÔu:ÜØ¯ûX–°¥ÅÀm¹ü÷€ À€§h¶3%�Ö€ÎC‰ý\OÊL«žIµ\åV•ƒIzüÎûiáNãÏc°ê�kàÇ®«Ÿ™ÛJ˜™´ºŠÇ"�l±ŸÂë®_cÆUî0åè´°Éh«þñè 4Â\KHj#žÄ7"•7 OÃæíöu�žóÇ®Gn×~Ün `Þ:@w?ÃI ŒFÕ Òr‡-¯J9*›£¿¶Áƒ}8ÁL(×\kéÚ� Û”v jh…Fg¶æj?{v¦ã²¤“÷²qzá�é…·÷Ä_‰óÅ ûïrìÒ®ºyœ·ÈWyEåÐÎÜšbðÛ_Ô¬™„Í5ÌD¢m®T@cSÎ¡Îæßyò$;ÔtP8�}IÀ_ÛÜ V«>å�:¼;~›%0rÛ%§0úãª°ØÆeÞ3W0ÎQ¢ÊÓ™v}UÚ4L@¯½ëÙ‘Îãß{ú4{©?æxþÝwÙñ‹Ù¢€ @‹: cuk+[»s'Û|ë­lóöílýæÍlUál晤r¦-£˜q•çrŠÚS@ed0Ê­Œœw®`di\Óÿ¾Àÿ䫯²¯ÿíß²çŸ|’eß~›->^dÓséäëëÙÅ­[ÙÒ�~”­øavûƒ²{￟m‰òÏd@&„k*Òø¶3ÚÇ�²¿u`Öåb¿ohœî¤Ëg[‡)+Œ\6#?àÿþ£�²Ç"€ƒ¿ü%[“°ª)€ß]1æžëôž�ø?ü�Šô½kxÏu®5ƒÍíí  @ñˆŒÛ”=—¸Þ:u¦åÕ-Çù�O®ë4c&i[C݈2�þ!ð£þ£ö#àþL£ÿ–À¿~t”ñ¯t� ÈÕ ˜Ù‰@"÷X°»³“�±f #µßùÙϲÅ7Þà‡b3 ˆËïüÃK 5ߢ7Å?îòFiË4ó²Úς߮ÿBÀgäü›ùù’ð6Úu&Â8ØüùË—Ù±®_hM€©ÁMM V´0¨�`HzÅ _Û+ù…G΢¸:aés¶Üq•S§í³JÛJ˜•°æ­Þ½ê{®Ñÿ…ü˜ó¯ç#?à_“5 Ä‡)€Ü+Š··—í}ñEvpãFöòÝw³U‘@&B(ñÑ R`©¸ÎÌX׊šÖgÕ�Œ§"€—"€½G:·âÙ³0çô¶�-€/öýA{� 4MÈ”÷äÁƒl_¯ 74=@à°î )¸Þô¾Ók§súã*×匫]ÃÞÏ$ò½zR“(½+³± 3£0�ß“Õc…ù>À㢠øT ޲9”üñËZ XÑtáB¯ YÜ×´`“ׂš,k ?uLÊÞ™H`® `Ú�mÚõ�ÚX8ÒÀ±¬¶ÿà{ï*.D€6€èѼ&À {E§úsÍʑˠO-à¯Jer$ÿ(&-·ny£æ¥í“Ê;þw4“jiWîX%`@^¬Á&àjE¶¬ž7)ð¹¦.»uAWV_ÃS‚hbÓ6Í•0é0éòÓ‡3ékTs�a•-i'ß™ü¨ùñÖŒú¨ýŒü„sƵ5ÂÎ¥âë¯qÂþ�›éˆÜËÅÂô=’ÉGeɤò•LF-oÔü# cL™çŠÆ$“kS {û7µr¿¡MÀ¨¿/ ?à¿ÖŽ¿OîßÏ¾ÒæŸ ;×YÞÓkÀ7lýÛePùQóéX¿*:ü¨ýúúï”�Úÿë¿È¶ð‹Pÿm‘�”ºNÓ¹³—Àµ"wÄi‹}ÚõzÄ j¾Ôù}½Ÿ®m»ñ¿|ªÝ{÷µ�gGÀ¿!÷Ž4ƒ%¬Åâ)ÿ}�ø�þRöHiذ®Í;ÛRýo ðo¾™­é­ÀŠÒž‹4Ž4mØ×î¾—í�ß{/[¸w/»©4oèíÁ-‘Ášˆ!¦7ê ØN[]}å˜kH™»\ ÃÅLºüª­òˆèÃî>šQÿ©øŸÿ}ö™FûOôÁÏ·é äû¬ ¨pvò­Ê²à@#ø ÿPêý ¥¹%ІÏzEÇ ßÑh¿¯C@–ß~;[еÎË–ey•àc‹\Löûºê=ÅéR9û~ã4uü.oØrFÍ_§­“N;×0iá5©|:s8ÙG#ùý¾æõŸèàŽÿ|-"`ÄßAøÝ>m‡Xì{©×w_ ØOäe�û®Fýå¿%RXÒÿ ‘ ©ú;²Ëù´X¸§|·”f-? ÀšR¿A£lskÚx�sE“z“*wX$xäòˆœ�øÌó °ß ð_‹>•ý³TùÇÅ»zY¥]‘†^dGÅŸ ø{^ê>§¿!²`wß™Tü=©ü{š÷ï üKÚ3°¡ô/¯#C³�øÈÈ£|L„§ö²Ãÿ¦ÏÃò¨[â¨åŒš¿n{'‘~®`jj™½_à~ è5Ïÿ Ð ðßêß�øÏd_æïô‹î:ÐÙUá=ÿ™@}àeweê½þ¯úü]iDzïý5â£E<°·d·u ±¤ /».jÇ<…qß`[Lë fÝØ?��»¼q´).Ð3’sfÿžTýgúþžÿ�@Ï«½¯ä~¡wû�ru߇wôF~ÆÈ/øY÷ ø¥\h1ï@ø¡Fþ—íY8ÑȤkæýú'ËÜ”ÿ-•Ã4‚pL,Cü¶i\Hœÿ ;‚»Œ¸N†-o\å¸]mp[Eéjƒ€ÇÝFÔþ—Rõ¿Ð >Ÿj~ÿW�úßhÎÏfžçz•·§é«ûìØëk~N¬â‡�y þPö±üa$ÃøYðó¸±è�L”�íÊ¢ðÙ°M÷œ,‰æ»­ Ï--Îqu°q•ãvUu«ÖF|�4¬ì3êkd®‘ÿ[mæùË×_gŸj‘ï3Í÷ ü,ðõFü ª? °CŒîÚʧWú*P–E>HaIàç¬?þ h1åÙÈV`ÀÏ:°)kãØ®ÃËÜ2yTÍŸ–›–7j9ÃæOÛÕÄëV@7�6ÑññÙÁ÷X@ÿFÇo}Ìk=vóIõ,2Ø1Tñ£{ä_�¹ è 9ø™.0AÀB +ZÀ’ÈË ŽÏ�!2ØV[1´Ù6¾‘ÝOã$p­ &õ4†­Ç#�wð…_êþcù˜ß‹þ¢Qÿ]?‘ª rÖ„Ó| T{€i€FþK«TÅi#@¶¤)@Øå§¸ø¾HÇváþ™ìmÙóünSL„ùþârœ¶ÈMÓ9QÚ~a£–3jþ~m›uܵ"€Y »JýŒøÞÁ÷µÀÎvð}‡ )À Íó÷þãÀÏr] @-ðë$Ï+ûøigXÔÕ_ÚA Òð%á÷ýšÚòvDEÀwXQ9”Õ™ÙH`® `R�m\åzDcäìÍótö쳃ïS�ÿíâûu?ÚÁFçaú‹êÁ`ôgÔGõ�Ôÿ�@Ä€V°„vøu]T'S€ç²OUî ‘ëKòsž€»¡ì~R¹[~u‹µç¶þºí�dú¹&€I n\eÓ‰Pù÷ü'|ž+5ÿ¯z¥÷þWº~©ðtß(u‡Å?ø¸s€û5Át`YïüÃÜr`:P`˜€0 ØÓ=<èVå®éMÆ–{ÄŸ.æÙê C›nb®`ÜÀå™éùp†‘À²[Îáa±Ljtü—XÎëÎàkò`ùÒŽ÷ùRé×zz•Þ狼ƒï‘ÀÆlЮ  €Œþ?Ÿû³òo@לˆeôwÛ�Æ.iÙÀ"à#Éf+·7ä.Éšb—IÛåçQ·|—S7¿ó¹¾ºù�o–î\À$@+Ðhå}_ süGžæât‚5­’ok§Üº\®SK»ÜY(‡|¬ì³ƒï�ŸîàÛa®/ràãM1ŽõPó~_6¨“ø\ý�ãËšr {z À¯‹Ô8Wà¶,‡…Bܯ ?Ö²(+¯Íá~öm¹‡VÀ¸;RZ—‘ž?Ð8ð¤’ï °{z Çap¾zs¶ªýó{ú˜f]Ûgyo¾*»‰Ëš‚?Õdß;øòŸW{_³Â¯òîàC¯ íIÔÂL6a* è·ø—6#¬ØL˜®°@k¾‰À2Á� éF1£–7jþQÚ>«¼­#€ô!MRp€_€}!À?Õ :Ïõ?x»ýkv,ÿ…Èà"'ÑX,ýèGÙª¾™¿ýÓŸf?Ö÷ó·¤xÞKçÞÑý¯´°÷¹V÷Ù³?ß³ÏÊ~å|£Ü0d$ðÇ ±<�_¼úϧ¾q|YÕ䃎t�ûýdW°ªË ·k2¨RnY}]øø$Ð:àÖÇÕyÊÊñHt"`þ'_~™=þè£ì¥þA÷øóϳsxI£øB®¦ŸiÁìRÐa‹Z¼;Ñè¾!õ`0’2"ò9îmæù«¶ð~®Q¿pÄßs½RRo\ /h—-×ù¨Ò0ò£úXý¿R¸.ÈËZÀ¡Êz®{}.ðój�ÁX0 @ŠÔ›Ê?½v=n£¯«ºiyuËqþºùª¶¯ éZE~ Ó ~¨ýOØ'ÿþÿøÙ…4þsYİ$í6t~Á‰ÀMú#­àóy�5-@lO•þ3íÙÿRi—zšÿOeÄ�ÅÈ~!`Ÿª]¾œ«ý+ ƒ�"«evþå[…Ш„r/2à�‹��uÏ[*»)뵃ßî8Ë[ÖÅ ’@«`ÐÍ Š¯J ¨þG,Äi¤ßùøãìåŸþ”]|öY¶¢kþ0“_üy�ÔéO”žã´q÷”nOÄq.À�l�ÎÊþw"�§*ûPé§j»G�›Ïzý™ì’@*==;þ €eµ9ì¨HÜ r@€nʾ%Ë[�X€dL¸~vËd’Æ;"»œºù�Ïí«›ßùšè^+¨úx=÷T€},пø—ÉNDšó~,Çe_!]#H¿¬…À'Ðך:z.xškX ¤¶n¤OŸkÝy\ùëÖ;̽N:Ï\À(Âlkøø–k´‹´F=æ¾�ŸÑ d{Œú"ƒ}�ìDe°Õ—Nw 9%œ²Aý?ü²øc2¢‡{U›–Õ~63ÕUÿ};NX P™l]Þ‘nI2J¹±ú�¿ý-¹Ù¹sE)³�$V€!ËG3¨ûŒ‡¶ 2  ãó{Úå“-Êj¨Sˆâ ÃpÍHŒßš€]Âj˜Ë’_eè]«¼žŸh®©“QðËò…_j�à_�dG&õó:ð‰î{[ö�¹`½�j£>·4Ý‘ÙùGÍçrRù6ùz®`¬‚V'î×!5mC§×õ©€¿®µ‚-nK«í74×ßê«,´€0Hì�à�ï‘zƒè‘ À'¡êð=ð«]!,®[í‚Ö”þ„¼#ñ™ì-�žOþ\„ÅF4$È%ÖLmO‘ˆÚvsAãz\À £º\æ¶ømý™„ÓÙƒ¨¸fÄçk¸ Kˆ‚Nϼ;”AxD=2ˆ�©<©¡M˜ôü“� €÷Êc´×œžUÿàr­øžQ;ÐLh¯Ñ© hG/‰9ð�ÐK¬î{_S€¿¬úcðÛ�Üm)²ñ–Ty%ØÏ±n9Îçªæw>§çz-ÊõOÃ� ˜„ Uø3LN‡ôX/øB :»Òò§™ªy¢‘Ÿ¿Ñâ”]FbÒ0†ï (lêàX…—´ø1�V÷‘~\ÒÆFå[`޾' Nî�]�kÊÃß}�b €ï(Ke‡¯å/[ è´€Q$=|ÞÑžððõŽ”sX"¨š�WVõoêO1¶~ù˰»oA§ðkÿ¹öù£ èN�]�þ‘À×:;ÿ;åy©0ŽÕHd düXâq!“nÕyŽ%¯€Ì»ù°A Ê0âGšž:oðøvIè±"¢+éCiWh”.˜«çQ&ÜX¸škðÓ%Î ä�À ‘ ¡]±F�þö»Î²’ÓçWwd6ÿ°ùÊî£Iá­$€‰ P@¢£ò/¸?ù/ÿ%»!p¿Ôwúðè?ÿS§_< p,@îd4ê­‘ö¡ÀH1üpŠ0®m‚À*ÿÆÃ–áùÃ,Ѐš¦ö„²7u`É[ çš4ŒüX•Y:ú“>o/¤sªz÷D‚�G€†1�X”qWå>Õ½°3�uÞ6^ßn§ #åÑò\ H|�ÈHOg\×è~WŸö†£±EÏô—êÀ'Z`Ï–Úc‘ľÔÿÛKuìpÔ¶*`‘`x &ù|li*?‹…, p1 j8àjº‚zó}Àhkð“Ç~\@Ïè�¥LÂÊ q”—M€zùà‰\ac�â‘I]9B\LoX |¨2oŠ\ÂÆ ÕÁtƒ7&�-D` ¹ƒês|]M€²1Ãæ6ße­Íú½PWä<`:"k›ZÐ d õþ†€þHkûÚ篳Á‚ Ÿ½ªcóu À uª‚ÛÈ¥£‡· TOÑ�5úcÃè#:¶I—x[€kKûI ú{ô'ÎFí i}»yýA`3“ò­ª^»;�â½À‰AoËÞ–Œ¯qeiÕ¡îqE÷‡úÎ_„[N!O…Je©žÝ×s•ÉB`zb²ðT nq3Ò¼AÆq‚ÿ¨ùªÖSRýL‚çŠÆ-A:D¬~Lü ñ3:²‡>í@WÚ£² ´»a½@À ù¬4=ðS×3þÔ’†xl:÷'Ά|Ô�;ÈäuF¾eX`ù¢Ïà¬TFTÀ´Èƒ¶ÔÖ›*/œ$¿I–òm k£éÛxC­&€Q…]–?wGŒAÏstÍȸ"Ð ÌÂn�.ÖðöE pÒùC¼ÓãÙ¸#9ž¹¿þò‘:Nvü&Ü"“— A±IèD–ÿ1`m LeŠò £&ŸÄqaoÉn˲¸èµƒß® ײNŸÁ€*{ÑÃæ6_¯âxZG~(Ó’-õAŒòqÝöÓ)9Hƒ3øGœB(j, “a= ¼ò“K™aM@õ¥ßíA^FOõgþoð;.®[u¼fÊÒ.´e  À”¯•S!€�¦ø1þ8Ä'±½ºèô`HÀ²¯Pt—dH ´Ž¸OƒoÈ{®œ?®'Öç‚0À¦€÷–^ÞÕ+ÃmæÀϾ&Ý%„B.wýáø)?@•t±-*”x@ϼ À€ Mà P=?á„Ù½Œyõ…›<*; S8Û“í�ÄZ€ˆÕ'¹»ÈœúüìR¦n[†Íï|uë»le³[C<?ˆi‹4®MÀ£“ÛqK†>xç�°¸õ@Gˆ=DΘ¸À5¶aŠ�¤¹r P¼çþÀÇŽ‹1øíÆà§ŒÔŸBFeôÖÔ¦L¦õWbÉ-u—’@k`”§5.â`DŠÉÀ€X—ð†4€;ÒVcMcû+x©ÏÖ O €t€ÚÀ¶[V é#K»zùå-+3§,Öø>€CÞ‘emëµäšZ²§Ï1½öóÈ«è8Õ|uÓl@Ôï­ hô,›@'°jÊ|˜ÎÃ5~ÄDÛg`R @gÔ�_û[7†0ÀËÔ…2ðÏÈ„ƒT?ߪ=¬/ø°äé).×XƒoFMžÛjçšFí4ýòv �“iÁº€¸!»¦p„Ê|w¢ÄŒøžûçí¡MM7a-@r{!€óm›ƒØlˆ ÀÓ­~ÏÂ÷ë4<“:¦n>§wuës¾&¸—½¸ -iY ÛUÀMmÚÖÉ;7!�SМŒqç6 `¹ÆT}-i\þÖØ2íƒv´x$`a5õVlgÐÔZU¦ÄP+óŒÏ¥0샨šÏép!æýº%{PXø�a€FžAù»ê Öó~œ˜®\V¥l:¢ÓE.cjÏæõXÃô]H l R»X ƒäO× „XÛªRgš¦ê=j¾ªõ #¯Iå™K˜”°ŠÊ¥Ó,kÞüúV€?åxm¶ûkz�ä@{­•F}F~ü˜8­ë¶K~\§‹]‡Û½,±÷ ðƒZ®øqvrà¾ÀÏ´éžÚ篋N†R€öØ mlC;-²¹ €Q>l~?lùtxM€ôŽÀ\!·œ+¹äü!¯Á»Œò˜˜vó àNY˜Ô½ }õëø<-àG£á¯Íøß¨ÍÿàƒCHZWŽì–àÄ þO�~CåôQ×hKlÜ®ºä5l¾¸î¦ûç‚f%d:–Ñ?ð _û©3‡Q|ˆ†õH@ÀÖ`ÄÅ~Óü©qž8¼(Œx—»I8çpfà‰ÀÏ9ÿê¦È޵Àj=®®Š"á�À®ÊäOSoë^ؘž´¥¡db`V©£KÓ_­&€a;°ùŠD€¯ŽÉHÈ–àmiØ}%Ôî¢L}ÂL˜êôà€Ãh¯:zsü≋ÓÙ™âò7‹ýqüÄE–íÉ"[‚sÿºÚ¾ƒP;‚F t€´ª|¹+ÞôN É”­üx=@Ùj·«Ó^‰®uà‡øêfï  UÇß𤳰õAÏuVÀ°&|2,@ñ�@ø€œy¿ê Äà« i¸Æ��Ó¹„•YÊѽA:á#• p„8_ ®)žO{yŠFÀ‚hÝïØNVyo«œ;ºgÞ¤k�?Ðñø[GÜö°$0l>‹º,?áhëæ]�ø¦v®ê¤ ý™€³Vr Ù° P@Œzá<@ °`%Æá±{sõ—xûqí'Î×v £4 ¹´ƒRø’/Ñ 8ü$|-(wCaA+Pº  Ƚòõ í/0ñ‰AL5|b�UÿÔEÞ¶qqUGöô9ÖÍW5}ܶ¦ú[EéƒkŠPižC¶~,ÿ#0¬&~‹€´• c( Æ Š¯ñ‡ãÚ’Î~»ª7êÃRO\— ‚cYÞé£`oêzCq,Š.ËVù«qj‚øSÑ}Õ{ àŸ„Ê¾¬3Í÷Ðý”J ÀÇkF%Ž*ùIƒêËwháO6Õ¡ƒ‰�Sñ& �  ¸½S�#6.ÓõT)Ûií’°s�ÍýAÚªãÊù.?¯›»ãT£°6 |€Vkj]˜¦\ H@jý‚Ú´=Çž•‰0àm–/˾D#ˆŸ‰ývëŽÐuóÕM�8šjZAM^Ú®pø§O¯ÜœÒ¤¯ƒ @„Ñ_.r�úø­ ä …Þ*Æéb?ðËÒ~þ,’a‘.œbä4ÔázíF›¤\ˆÎô¶àHŸEóÇ)¤ºŒÕ>‰%¹E-G `1�¿ÛR9áøpù!UOX|¶�&€àG3sMfêº"&yx%vƒíÀ²74ê±Á™Î]Çx„ø9{‹À‹Áƒ—Vœ¦õ5À—೑‰7Ô{ªkFg,»ôÂ1f®#¯‡6BL[ÂéF"@‹Ö²(2¸À ¼çrË4î•ö°3�¿Ã]ĪƒÞd�jÊÒÄ.~LU�ÀÏ}Ré/[Ӭ߹&€i‰Ú�“#ÄßÐß„ÝÓÜÕˆ·-¡Î2·ƸܰèÇ?übÑ^¾Tu#ñ úˆO,ÿDøÙÊÌÛ ¦2Lc8Œ}úÊ—{œ3¥~ÅcÐvÂÉ>Šg¶§Q (L_d:€6€-Ð >')Ï-É��„¼é(¿dñƒ74hF?MhCÝ[ŸKöA ›¡“ `C›ƒ6$4€°˜7�%O-¬ºK“¯ýž :ƒŸ|” à :Ââx®mÜÜÜ^æìý½¡6ßT=œpä¿hlÌ�Âñàò³òÏÔ hrÉ¿ÿ>[98o)ø#ÕSÙ#Ù“Ÿü$[§í¬-È.m`Eá&)î cðýÙMeüÔM_PDcƒæ‚š"]: �mK§ÿìÝw³Çþ7÷ïgO4’U5¨ó~Fv©¾hÌ��5êÑñùCQ€Ã¢Ü …±àˆzÎk;wj�þ®× 3±xe�6»ƒ;mU—úLKjWX¯øOÕæSµ�}�õ§ZAÑ~[rú©¶NßRÚKÝE�j× À[²7Ÿ=»\_Ð=Îý³Np.r}¢:ŽõÝE =Éá†HÃs@��¯ƒ§û¹"�V@ÝŽ[7½%U5éèx,RÝÑAwô]ÀêÇ.¦ÜUGÅ�ÈϸŻxFkVÕÃæ…C$l¦Q£?Ú¯íí<ÒQVSõ¾Ò²â|øYs MjKxÕ‡«ö0RÇ$à)‚�î•ûå^o øï äo¿x´%44™]þu‘òH‚7*H }Š­Ãüsñ>kJ»,Y£=,üÍß\þÛP>ú»­v•­Gx3i×ÏÔM߯¬¦ÄµŽüš"À´´ë‘6�ïw Àõy(K”�Î;úFR€Á°«ŽÅ;þXƒQ® r 톼DJìò ^3Çf¡�Qš÷ØŒZ—ã¼KO\:¼lX¨c4HrC Å1�§|ãêŽüIÍ#_ÆrbÏ¿6,ñ €wþjÒnØK Ñl˜Ë¯ ÐK"ËÊÓdtI‡,Ãì^yÏE'Ò^~ûm¶ûÖ[ÙÑînX˜¤MX¦N¸hSö+†pÌuÔZE~PWž^ƒ.ÜÁ%¯ÕnÉnË¿)@ð•jk™aÞO§fäg> `�ò =@(S^Ù±Y²iªA#€ÈÂt¦@#8×üýP£ø ­ì?ºw/»©ë7´^²)’¿^„f›ù52ä3d“äÞ¸ˆ<،ąSY? ܰˆ@Óû‘nij¦UPW*Ã>èQò‘•œCBÃ)Áh ;”eî{Åä×üê Ìãƒê¯<€'n9]6+Ý^Á�Ó\){–Ü« ¿}5ɉ·º÷íšÔý¥§O³E‹Â6`•¡íAK{$Û…!€RôÊw¢|Grùä2DC²€ß#}*;_;^E÷5uÓ÷-lF‘sM³�)�Â[‚!¦¬Öûûþ´M¨ý~ŸÏÈŽÚ>ŸUÀ@`YÕwUs\ˆÂÐéšî¾¦èe O¥Ü—PçפÂóZpK‹§ª‰˜pùsQd‚Áet×ô(hÊs ù@Äýqcð+ÛØMÛž˜K¨û ê¦O{Žó{ä £1 `”fÎÎHu9&¦9žª|oôGýÏGÑ~ü�ˆ€ÂF˜eM-¼@øz‰ Qû{`EËÉåîA2Bnᵡ6Ùt¤4›ÊÃ|Ÿû÷¼JÄodã ¦eIDAT¥ [ƒUVøFA€ô”mðóÁõ3Sö׌ãœþµI@ÝôIö™^Î%ÌR¢t†žUG Ÿ³j!ê5õ_� ‹~ê¤aáOàà=•9¿ :¹Á¿$à~ÖÜéòd�v?àÅâß�½%{CDÀHh<ÇýšFñM-èešœk>�šÏ‚ß�ìYˆÔk¸Ä+™³! ¹ðö�)&>`¶ ‘úiÓsAsEu…_7½ûL•|¤a¥~[£ö™:4b‚QgÄ„¹¿üŒˆAõ7(/Æ#«þËR—Wd{ „!Es~z#¼šD§Ò‡Ë=ÍàI±º¿Ûr·ä²@º û>±±ý—×}¼>ä3d@nÒ€¨™ EâzVùÎÙ ¬½‹¤äÒær6ðc·ê3T5�8p«4@lÌ\@SNçÂnøœüŽìœlPCÃáŒþéµ°òc ~6·ð‘ óþ0÷'Mà -¦#tº½ ˜Ý“½!K-ô� ¢¬êóAszÖ=Î$§Cx_rÚ•{(¢[a†ÃE”YÄÀð³pˆ_ ÏÞy'[”]À@›ô:Ž»ŽþkIUØ¿¨3 Êçx\FÞÓsJð]uj·˜ö¼¯JÝå‹Á Þ£3j1j(/&t[ÔZ�ŽÌûW˜ûËO¼ë §ôC«lé4ÀÌ�€s  Ù¼-{“¶Êeàü\“Žû žýH2ZÑ{üó÷ßÏŽþcÅeš„×z¥Ò�Cz^†­Ñ"Æ m»ÞP¾ú8Yº|Ê‘±ÌìÆaƒHÁy¥ µìÇϰeÍnGs™‹n«ƒbY‘ü¬po üì{ûíø²-ÌýóÎ ø±,’­ ŒüLBÇžÁ­!:J:ÂójŽ{`N¿�»\3º3â‡MKrÑp¶æÜ�Â]cØBÌç¼+ï½O_êž_(ŽÓ‡Nž?ÏÖô¦Àu#´àDr9ÿÅ/²µ_ý*»õë_gÛ"‚u½%± FåÀñµÃT̵6sA“~˜uËwGc.Êfÿg ‹\Û>à¿%ÿ¹âÂaŸ@ýÕÝÂ÷üÒ8>‹y?£oWà˜»ë%H• ÈÍc°üa„˜¯Gxæðž‘Àå:XÚ/¿e(í�]×3&÷ŠÜxŸÏº@¦��ŽE§z½§U½°PÊTé ™½ýv¶ö›ßd7>ü0ÛÖèCG±Qù‹H ¬^Â1ƒFøªéz7ÔÏ\@å:›æ×|¨ûlñ®ÖÞ�ËáÙ=u>¾nXá5�‘k‘ûý½•Ö1Î{¥ÛSo‘åzu€³ó•žûüa„—Ÿ´áq#<~ÜzÚŸÇ‘¿ ü”Š - /ëû~;÷ß?lóÝ}ð {ñÅÙ‰4� }ò»¦sW¤%lhʰ%­aóîÝl]×äšõ'6<µ%­Óu_W·ÕP÷aN:=�ˆQ„C2ö5bíék¶#ÙE�`·5’-êÏBîi^Ë迨‘ŽïéOµi…Wb,ªÓ?‘Z{ð‰÷ª¿:ó°ærl+áím/ ¿-¸!·GòCü X µ‡ôÈÓà¶KXÇÙÏý¤ÏÙqô æþ7µ=øP[ƒ—´¸w¬B´‚�7ßÌÖEL�6µ¾rSþuä$YšBþH  N×ëöQjÜžë¤ ´Žü�҇ׄëÐ�¥¦ ÔO´“í#×wßeKß|“½ûÙgÙú`eKqá ©«[ê˜o¨áa¯À5|Á¾�°˜•ƒ¿¤ (º&¬_¸ãSWM ùp1Ä�ÛÄunƒÕn\¯ë·;î¶ÌcysE“zðeå2Š+ЇoýElý±Ì×ê�Ÿ¸°°'qPÇŠtïj‹ý¡ÈÒÎxŒýÄÙ WSzi�'v�[ÇPFlbÇáöÇéñÇécQzŠÒ8í0®Û3îr‡i˸òÌŒK(uÊ¡3`}#{�äçš/×ô1p ÔTÿ4y0€3Œö9ø!“€ÝT0 íÒQ±éµÃË✞v�&vSˆœáí›' ÎJ”גܹ ½r:íì [wµcíBëËg«Œø€Þ°ÐµÓ„têÌlòƒõhoðǮɰƖ¶Àø‹®ÞÏUÓ ÁOx™ˆ´S5šÞ×eírü ò«¦+«§Íá×’ÆùÀè<B±©¯ÒÖµ_ý\›�ø¯:æþVû© c eåïÚ9üâ@#=Gbi¸M_ÈEš@·@ý&ûqS¿Ãp1¾ùµý�{}$0àN=è±UM7¨ÇD«ÚÅwKߣè3Ö½Ï?ÏôÅ[åÿ²üL0¨þ¾>�Ù|¢M@+úâmM_¿…/õ¿®�jn'õ[v Õ¤e qÓúœ¿j¾I¥¯ZnÕté}6ñz.`–‚¥3ð9ê]�þGRÿ_B"€E�l›ñ��‡�™ ` �üŒú{L”çÎï~—mÿò—Ù&ߺ3¥ÈGüÔ-›N[R*Õ�;­¯;·“è  T‹Ó­èCž[úN à¹N¨Ñ¤6Ëôõß‘H€“l–ô~Ÿ.Q¾ùø‡/9›‘?ø×u¬Õ�Ÿÿ<ÛâH+m.½Ã¬úÛµúo—Ûq»ìÜbaPÕ¸0s˜Ö[µÜºùœ¾nùƒÒW-·jºH4�óv0â#¡ÎM}Äó¦ÖÎÿñ³§RçŸë›} x({.Í`QDÀ+Âsi œb{¨uƒe�ÿ¶Fþ[|�mÉÏg¯|Kyécà;,v­îsî�#ÞR—ýI ÕPµÃ�;]Ú?!‡ZÞÔÇ<¬äs\Õ²üÏu�žFùc- žk»0;Ù4¯ˆ,2Ùõýèò0KÀ¯ë5ƒo7»ý&ƒ¿êý¥íN¯•3häLËóµË­›¿j¾ªéÜžÎ}%�VÀ«Û˜­�ˆeî¾É×|"Önë‹—šìêP�}¾ÿðß~á Oů(íºN¼aq%?ÙÆÀ7È}]þÙÞyW{,QÖtGC<¡ôAs è+&hÍ9¨rMZÀ†>òÙåðöù+5þ òP^× 7 ÄqøÇ=òWAzßÎ讯j~×;(}ÓÓù¾›ä¶Žü�›$DÚ(é ¸€³&�‡{SS@½/ö½äy�σž8“þ&Ê IÏ£kKu ´Ž¸µª˜f:Ꜳ×L ÖþøsÖx4sÞô±?Õûr&å¦íˆï©J�Î_5_Õô³JWåž›–¦•Ð4!Ò:`¬î€w\çø˜@L$1ø ëL³%À3ŠŸ³[ÛíËó‰¸AʨF8G[á¦à÷¨GÖ—Ñß®5ÇÓ`Ê/2nCQÜ0ai=UËw¾ªé«¶mRåV­¿ é: `ŒO‰çNÇÈ è¹6øqéäqGw»=¿¯ÇØÌ®¨N= Ì%„½»,ñL*�GkƒÚ`ð§@óHë|½ÝAí_rû=²*‹�ÛY–¦_¸ÛUµœªé«¦ë×¶8®jyUÓÅe7Ýß@ø~M*í£­1 SðÇ ð½9½¯Ût¿mx&]_—@kàõ¦O>dXÆùðìviyì'�-qÎo—°Ø”…ÇiÆá/«'n{•z\NÕ|UÓÏ*]•{nKšŽ¦ð¤ÜQíUÙ/®(}ÖI`¸–0n°••—†§×Uà°ùª–_7]Úžq�ìn�ëT~Õt.wTwÚõ�ÚÞ~ù»Ëý¤ÓÅu˜s Ì•`fžÖ3›t}“.\rr;�Ô®¯nzçÕ­ZoÕt£¶§ ù;   O¡kC'�I`®4€A24³�+Ý r_µÞaÓ;ŸÝºõ9ŸÝª#¹ÓÛu½UóWM?«t¾¯2·j»Êò7!¼Óšðº6t˜‘®•0.›ù•W5�Ë©›~Ô|Οºeí÷Èîz]ß ò«¦s¹£ºÓ®oÔö“¿Ó†‘Z—§“ÀœH`.43õ¨Ïd\åÔmGÝz릯۞²ô®wÐHíü“NïzR·j½UÓ¥åÏÓu§ÌÓÓìîe¦0¡Ì´5+Ÿ  æ=O•®M�¦$�¦i°fÌœá6�%£zä˜ô3w=Öç|£Žì–׸Ës¹©;­zÒzû\öç>é§Õ$ >‚°ðf þ©?‘®Â¹�€ÈÈý¹×�£s\4oÓ4K!ZG–JE×#aÅä¥É\Î M jºÒŠ*FL«žAͩҥ¡ŸËº/*v&ñMÒ€…»ç3(á�é$Ðd „¾õW÷Ù¸O7¦ýMÔbAÁ çúÛì@�‘ÚŒ¢N5“š]ï M`ÔÆM«žAíµÊAŸU=±à~=¨ú©Æ7Y°;˜j—è*Uœ©,÷cnc̬5€X(±ßBC€§KKKguVRóÈç‘aVíW½é}øþÆU~Y9®wZõͪôUú¬ê�m‘6à>_ÖÔ‰‡7I°0bð7‚&þº æF€»¼¼|ª›:‘Å5Ä$Ј{žµ`!üv-° Äç2�?þüììŒö®È.�ŸŸ/b5š,Øæ…]™({ÔqE©;(>N_'mœÿ ¼ƒâ«”‘ÖYt­¹iQp/L2íù‡õTá¥߯muòJ[Oåy {}*ŸóÓoOvvv>£ÏÊOÿ5Äàw?WôlÍÌ@‚E€€Õ°k €_ñ'¿ÿýï¿;==ý?·¶¶þãääd]þ5¹«"„HA�vIÅA�r‘^!‚qˆ¹ HÇQOYƒÀ[–oÚáã ‘QÚ¬~0Jö²¼¡Ðø¬K�a¥ê3E=ш�=ZYY9|ùòå“?üáß© Xp¿v?·›©½ipÙ�ÄጞñõTý90$Ùz„_UØzd7äÇnæ.qk²¤C# ß’,å|[y;ÓI`,0`q¯h¨º>–=’=”=H,a¶¤3)˜ÎgI3Ó$›X° ¶`rðˆNÇÅàO Àåwn'�qIÀ}Õ÷SÀÀã�OZ÷o—ƒ;SÓ@±@’�èNg@¸a=@®Áïô¤5aàïL'�Q%`°âº�š�è�¶&‚"ˆûú¨m9�V Æ,‰Pc[ðv<úÇZ‚óØYH]�$úÆýÔ#ºIÕÞÖD€ûµó»,Ü™™&7oá"$€‹Pq bâͺ™vcù=ú;½óØU’ÎtYí~ÉÀdk"ðµIÂy\ÆÈ�µ€™‹ùB ïÃ@�¯fAôv­ö§à2:·“À8%`ðÆýÒ}Ó@���ßá¤#_ÏÌr�FÌ”zR¸ôX0)6± ¤Õý¢‘ß$çïü�Æ)úcjM¸öÇ Çï8çg›†.kæ�kÜàE8\†±À,XÒ™<ú“®?RèÌ4$à>I]î«1Àí�]çÁÅÐõí¿ ™ÁïÌ ºg„ˆ1΄@8×»�_+º—7õsÝ™Nã�@ XûqÝGí�¯é»w¸n„™éF XÑZ€I€hƒ×€OÃ}�k—á°Îí$0ªRàúÚ�¯cà;œúƒ¿ £?�i „ƈp#c (öûºÈ%¬3�&-ƒ:u©—°8ÜþЦ¦€ŸÆ4ŠBƒŠI ŽöÚ¹EaQtçí$0Q \w^Sûgºï¿H �#€´‘ÑÔ �òuG–DçÎBWž6 I£}Ú6®OE� ]S(KÚ…w˜¸šô2°°ÖJÓV�·RØ]£ûJ Í}ñÿ+Ôq¹/æ½IEND®B`‚ic08X‰PNG  IHDR\r¨fsRGB®ÎéDeXIfMM*‡i   gêI@IDATxí½é“Ç™æu@)‘RSuµÔÝó±gvl­¿ìŸ½Öf«=4ÖmÝ=#±EQ¼I$ÎP÷¹ÏÏ+ž„—#"3"ψ¬p3O÷ð;Þðçñ×=<<...²¶š™¶¶ý:´[}«½�ë:< Ýãb[ï³óŸ\÷ŒZðŒšNÒ:Q§4³ŸŽþ�VЬ‡µÐ4(| ðØoI…9®sg'�"p˜Ý¬#„Ù= jn”€ßǵ?´�‡Ù½ í~g%ƒ;uia¶¾Æíˆ Haú?�!€ü1�ñÛ²^á8‡Å×±ô‡uþÉK ½Á‡;ì99À¶çzV§;;;'/_¾>&lID° ˜Fg Vþ`:°$&ë‚S×€_€7øƒ»»»{¤gñòèèè@Ï8–5àš¼!›0= �t$`‘Œß�)D·ãðÚè¯4+ÿ÷ÿÆ?ýÓ?ýzssómu†e�0Ëêd‹h¸ÝÖermUWFÕ¤]:I@äÛ“CL’}Ï.ÐkHYßê`ï €îm•9ÿ(àÎ9‚œº¬5%`� wÃó ðFçÆ[o½µø·û·/y¦úÓŸ¾ùôÓO´ |!t$Pó9 J>3( ~?l»&ÚÆ`Å€:S”mЭuñ³�@üÞTM@q‹"�õ›7o¾÷á‡þïrßðÿ¯o¾ù†·�€›ì¾ák¼ÈБ€¥2wf�´Ýà·k¼û_üIžÞå+.éužH2Àþ|A0�»Öni:°©ð­ ì(nAë_Kp«KŸuž #KjD·)ÀmüÖz$ ²Ô�F”A—}‚€ls ¶Å¥¥¥‘À�~ñ‹_üwiwоüòËÃH ÔªŽI¨Bü¬ À Oݘý!ƒ þ·i´oZ[⬠u£ `y–"Ì––ÖïÝ»—ýÃ?üÃS…_|üñÇ_ñÅU›Ù‘@UI•¤›5¤ÍЉÀ$àí¾Äu¦á€ôRë&›ì*n« îl}î±5Q£Þ š¥¡ýq¸Ž­5ß'i!¦úÞ#h €â™ ,²& <«º'4�gJËšÀýï¾û®è6¹ùT I* k5D÷Ñy"ƒ›æü>®Ãˆ� àà€£²L£~XÀ¯xv€ö4�[2ºþEñš€�Ÿ‚Ÿ"0 \Ê¡ð·UwžÂ»™R`ÜɧTe¥jÆÝ.ZŸޢô~fvM”Kz,s|Ô@{4¥û|–ýÝßýç \èT¡2M€d©éH •H~Ý*(¹‡.¸!ä) ø¸?~Ò3 €x€Éל$éG/6ßÕ>�ÿÊ ¡®ÿ¿H¨ÂT ÄÍýDB‰;f|m½uåQ~„ƒ¿ˆ ¬_ ’>&•ë5�ÛÊ¿B=Ú1øœ²õvàÛû÷ïW!§ ß”« _S̵5\ÛG?™OIÀn\ƒ×b­  àg@:Ççx¥¿Þжá÷¤ ü£¾&ÜR}"€xMÀE§.€G Àt$p)‡pÀfî�'íœódz»CË7¾ýާ…y¬�ÎÝEØ(¤ó!ï(.hz;ðÒЧÄh$}5¿ˆ2FÞŽ"at@$ŒÎ;9 x“A ˜4i¼·*' >—"pó'Ú1x�&@@8Y(NŸûSu¿#�\0sEñ¨RÐ º IÀàO]7'ÖØÀZiY .6yÚ  hŸš@èÃhŠ»ÐšÀýï¿ÿþj¦¸€WþŽ$‹¹"€W϶ó5E))›ŠÚÇȯóæ âÑ09诸„«,4A8“Fpƒä"€tM Œ®= ´’ÒNEgh’izûÊdÐÆa¸ÿ¸,®Ë,õàLÐ Ò[pY±›çá¯áø¦øŽÒã^èOd^P¦4�ïDx¹)ߘ]Âm®5 ´†è�i�ü¼ ZZî°ÔÏuè~ˆ€5€øU ilœÖ×*— ÛZ ø½àK¢›ºþ×\ˆ ÀYR÷Ú’@k€'FŠ;Qú'u=‹:'u/ýÊ­{Ÿ1¸)7Îï8‡Å®ýi[>£?.iL.‹ô¦`¶ cßqM ÿß� ½`MÀUõ#ƒkI­"?ÅÎm¾b�Û�›ÚÐø!€x À�n×éC@þã0¹üƒÔm­¼ÿóŸÿüBk¬ d"ÞT1׎®5¸cVé]š×%P&?Ö9 z_¹ÎÃè�Ÿ<©@¸-eعAPÔ›ú„xQe\èOew®¿!{ "è§\²Ì5Û,t­  ¨#va““€‰·ÈD@À:a&‚4q6±_a|B|Gdò³üíÀ†®ÿ­�&�õÑæšÊ:š;Mç6C>­1�?¶ŸqÚ4¿®Ñ6´cðM—‰& B`Mà�þž<-ö“¼Š¹$0×ðêYv¾¦I ˆœ hk ý ½ïÍavŽ&ð¦Þ œë¿ϵ$€&�‰º5!3PÔ™.o¯™¿³n¯�ÖLé\¶  "€¸ýè{Z„âùWée7~—ò”æâ׿þõ¾/¾ýöÛ>,ù)6ŸkM 50kÐÄ�­óOVJ1qÅ~ZÃulã0ù×wWšÀ…4Þl¨Ž @¬ Äëø{U,ÿÜ’@k€JÇh4¡ ÈcX3lûSÐ [šÏÀ�Ãý¬cׄ@úta0-Ã׹˖a,ý‡O�Ñš€> ú^D@Õñ¨oÿÜ“@« î �¿¹´€­ŠIÓÅ€�ýQ™”—_ÇáÊ»&{M@ûδHÈ5šÀIT. �?×$Ð@ôäép�)—@Uù$  öËkÀ:Mìâüi™Îƒkq¸ý4 ÷[¸wçÎ�s…]ìííðv@>òÃÓ§OSð[sKøwîX%`S¨ý¸ö”ë"cð ¤!¯5ò¦Æå¥qáëÊûùµOà\‹„h™ ÖŠ $@¥¼›œ›5�kIq'ŒŸp矎úÉß$a×-âðC&Çár4ƒ?®Ãa‘K¿çƒ¡·Æ_]èXòå šÀ“'O¬ Ä,c?é熮%èv¦ˆA:¨9Nk�€ô ¯Lœ–xÛ4=á"“u�4ücùx;à5o ø�5¹ž˜KpàÉ̓t?tæy7© ¸¶&ƒÜr( #ÞqrùŒ˜³1aM`_FgœkÛðÃMÀU@ñ¢Q+�KðêÜæI@@ë�ÜE­Ø)Ø�.7ø‡ëxêðtÀõÙ�ÓÛ¯¸ Y4�LoNtÔØò¿ÿû¿_ˆú­ 8»×¸n ´šüÀý$fíΪ=“ª@LÛp/éýøšöØO»ŠH€4ñ[�²ö“.²hÖNägM€cÅ8^ìáãÇ�D‘0ÖZh5”=Ü.¼�0øí–ÝE è2Cœ-iJÒn*ê§²Kœ'°ººº¢º.Dý4¿"l% ´‚`zwŠøáó §afQç4îkPuïÛ "Ÿý®£JY¬ðs"°¦á|°üeùãòñÇ–r|�?¶„Ó–’GYàH1Öó5�Ç;;;f»n^kI `)wn{$>ö§wÇqÿÌÖÜÃÃÃL#pHNšX­8C8áÄÇåà'.¶¤sz\Ò”ýï€ÖÐþFvIm:Õ†ï’EÖR =­$�ŽôäâÎÓìÌp° дâûYò¡ìîî-Àåá´¤qù„bǹl®|lIgëpÒ¹<—•— ó¬Êþæ›oʽ!ó¡¦�ž={~_Ç$@o ½0Ø€žPg&/�̪ÝÀVßíæ€¼Ò@‡9‘ë2q‹,$!h´ïY®c£znÊ~ òY á¦1$ÐJà¡MÒLºüI¶}še—ÉÉà¤-¤‰­ÁňŠTÁ@þ”B¢ü'.Ÿ ´ñ5õÅõ;=aiœ¯qSkÒ"ŸÖÐîªíg �«ëSµùLûžiÃ� Àà�5w^Çåw5§•0Quµ+ƒ à,Àdð; ðc‹ÀŸ>½¦üØø:vñ²&ÒÙo—6ãÇÒvÞètá[ÿoå_øýÏ>þøã³|Ç $Èc20„æR�îe¦Dp­ €ЙÉJ –±�e1Êc—GÿtäOñ‘^§­Oë#ž°Ø…Åñø ü8œ°œ4�u¹oçÀ MN”æXæDš;¹AVM¸tº™‚^õ÷̵&€ž:ÏD%X0¸X`ƃ?%7,~ìw¼Ë/ºNëwZ·'½v¸]ÇÓV[âä_Ðᢋ:SðŽÖ~«%^Ô½ìë ÑCÅ�‰x;�€µ€F�Àµ V“Í´ÛW qËÈ÷åúrЄQÔaŠQÕÀ·ëx·É×vžº®Óá¾.r…ÅÓ^Âs» HØÐ´àÙc- >VؾܽÏ?ÿ|Wíàû,ï±Ö¡ \ �Ð;Ó 8€ˆy4×øcÐpÛ¸É~êÆi(/6¾.ræô¾N]âã0üñ5í—Ŭi)à®ìï¤ëµàƒþçæ_HYXÊ­�sCUÔl׿Šü`$왘Y×_õ¦‡m§Á7¨—Ÿ¦'\@ Ùñc?Czç±"ò8§q˜Ý8­ëvœ¯íŽ?¾NÓ:�ÃÓkçu9r¥Å,ŠÔ¶tïiðHÓ�måãÃi3ŸÌHÈ�i¨ š ZÈ×ÄÅ`ŽýÄ•™Aéâº)Ã×v]nzíðÔu:ÜØ¯ûX–°¥ÅÀm¹ü÷€ À€§h¶3%�Ö€ÎC‰ý\OÊL«žIµ\åV•ƒIzüÎûiáNãÏc°ê�kàÇ®«Ÿ™ÛJ˜™´ºŠÇ"�l±ŸÂë®_cÆUî0åè´°Éh«þñè 4Â\KHj#žÄ7"•7 OÃæíöu�žóÇ®Gn×~Ün `Þ:@w?ÃI ŒFÕ Òr‡-¯J9*›£¿¶Áƒ}8ÁL(×\kéÚ� Û”v jh…Fg¶æj?{v¦ã²¤“÷²qzá�é…·÷Ä_‰óÅ ûïrìÒ®ºyœ·ÈWyEåÐÎÜšbðÛ_Ô¬™„Í5ÌD¢m®T@cSÎ¡Îæßyò$;ÔtP8�}IÀ_ÛÜ V«>å�:¼;~›%0rÛ%§0úãª°ØÆeÞ3W0ÎQ¢ÊÓ™v}UÚ4L@¯½ëÙ‘Îãß{ú4{©?æxþÝwÙñ‹Ù¢€ @‹: cuk+[»s'Û|ë­lóöílýæÍlUál晤r¦-£˜q•çrŠÚS@ed0Ê­Œœw®`di\Óÿ¾Àÿ䫯²¯ÿíß²çŸ|’eß~›->^dÓséäëëÙÅ­[ÙÒ�~”­øavûƒ²{￟m‰òÏd@&„k*Òø¶3ÚÇ�²¿u`Öåb¿ohœî¤Ëg[‡)+Œ\6#?àÿþ£�²Ç"€ƒ¿ü%[“°ª)€ß]1æžëôž�ø?ü�Šô½kxÏu®5ƒÍíí  @ñˆŒÛ”=—¸Þ:u¦åÕ-Çù�O®ë4c&i[C݈2�þ!ð£þ£ö#àþL£ÿ–À¿~t”ñ¯t� ÈÕ ˜Ù‰@"÷X°»³“�±f #µßùÙϲÅ7Þà‡b3 ˆËïüÃK 5ߢ7Å?îòFiË4ó²Úς߮ÿBÀgäü›ùù’ð6Úu&Â8ØüùË—Ù±®_hM€©ÁMM V´0¨�`HzÅ _Û+ù…G΢¸:aés¶Üq•S§í³JÛJ˜•°æ­Þ½ê{®Ñÿ…ü˜ó¯ç#?à_“5 Ä‡)€Ü+Š··—í}ñEvpãFöòÝw³U‘@&B(ñÑ R`©¸ÎÌX׊šÖgÕ�Œ§"€—"€½G:·âÙ³0çô¶�-€/öýA{� 4MÈ”÷äÁƒl_¯ 74=@à°î )¸Þô¾Ók§súã*×匫]ÃÞÏ$ò½zR“(½+³± 3£0�ß“Õc…ù>À㢠øT ޲9”üñËZ XÑtáB¯ YÜ×´`“ׂš,k ?uLÊÞ™H`® `Ú�mÚõ�ÚX8ÒÀ±¬¶ÿà{ï*.D€6€èѼ&À {E§úsÍʑˠO-à¯Jer$ÿ(&-·ny£æ¥í“Ê;þw4“jiWîX%`@^¬Á&àjE¶¬ž7)ð¹¦.»uAWV_ÃS‚hbÓ6Í•0é0éòÓ‡3ékTs�a•-i'ß™ü¨ùñÖŒú¨ýŒü„sƵ5ÂÎ¥âë¯qÂþ�›éˆÜËÅÂô=’ÉGeɤò•LF-oÔü# cL™çŠÆ$“kS {û7µr¿¡MÀ¨¿/ ?à¿ÖŽ¿OîßÏ¾ÒæŸ ;×YÞÓkÀ7lýÛePùQóéX¿*:ü¨ýúúï”�Úÿë¿È¶ð‹Pÿm‘�”ºNÓ¹³—Àµ"wÄi‹}ÚõzÄ j¾Ôù}½Ÿ®m»ñ¿|ªÝ{÷µ�gGÀ¿!÷Ž4ƒ%¬Åâ)ÿ}�ø�þRöHiذ®Í;ÛRýo ðo¾™­é­ÀŠÒž‹4Ž4mØ×î¾—í�ß{/[¸w/»©4oèíÁ-‘Ášˆ!¦7ê ØN[]}å˜kH™»\ ÃÅLºüª­òˆèÃî>šQÿ©øŸÿ}ö™FûOôÁÏ·é äû¬ ¨pvò­Ê²à@#ø ÿPêý ¥¹%ІÏzEÇ ßÑh¿¯C@–ß~;[еÎË–ey•àc‹\Löûºê=ÅéR9û~ã4uü.oØrFÍ_§­“N;×0iá5©|:s8ÙG#ùý¾æõŸèàŽÿ|-"`ÄßAøÝ>m‡Xì{©×w_ ØOäe�û®Fýå¿%RXÒÿ ‘ ©ú;²Ëù´X¸§|·”f-? ÀšR¿A£lskÚx�sE“z“*wX$xäòˆœ�øÌó °ß ð_‹>•ý³TùÇÅ»zY¥]‘†^dGÅŸ ø{^ê>§¿!²`wß™Tü=©ü{š÷ï üKÚ3°¡ô/¯#C³�øÈÈ£|L„§ö²Ãÿ¦ÏÃò¨[â¨åŒš¿n{'‘~®`jj™½_à~ è5Ïÿ Ð ðßêß�øÏd_æïô‹î:ÐÙUá=ÿ™@}àeweê½þ¯úü]iDzïý5â£E<°·d·u ±¤ /».jÇ<…qß`[Lë fÝØ?��»¼q´).Ð3’sfÿžTýgúþžÿ�@Ï«½¯ä~¡wû�ru߇wôF~ÆÈ/øY÷ ø¥\h1ï@ø¡Fþ—íY8ÑȤkæýú'ËÜ”ÿ-•Ã4‚pL,Cü¶i\Hœÿ ;‚»Œ¸N†-o\å¸]mp[Eéjƒ€ÇÝFÔþ—Rõ¿Ð >Ÿj~ÿW�úßhÎÏfžçz•·§é«ûìØëk~N¬â‡�y þPö±üa$ÃøYðó¸±è�L”�íÊ¢ðÙ°M÷œ,‰æ»­ Ï--Îqu°q•ãvUu«ÖF|�4¬ì3êkd®‘ÿ[mæùË×_gŸj‘ï3Í÷ ü,ðõFü ª? °CŒîÚʧWú*P–E>HaIàç¬?þ h1åÙÈV`ÀÏ:°)kãØ®ÃËÜ2yTÍŸ–›–7j9ÃæOÛÕÄëV@7�6ÑññÙÁ÷X@ÿFÇo}Ìk=vóIõ,2Ø1Tñ£{ä_�¹ è 9ø™.0AÀB +ZÀ’ÈË ŽÏ�!2ØV[1´Ù6¾‘ÝOã$p­ &õ4†­Ç#�wð…_êþcù˜ß‹þ¢Qÿ]?‘ª rÖ„Ó| T{€i€FþK«TÅi#@¶¤)@Øå§¸ø¾HÇváþ™ìmÙóünSL„ùþârœ¶ÈMÓ9QÚ~a£–3jþ~m›uܵ"€Y »JýŒøÞÁ÷µÀÎvð}‡ )À Íó÷þãÀÏr] @-ðë$Ï+ûøigXÔÕ_ÚA Òð%á÷ýšÚòvDEÀwXQ9”Õ™ÙH`® `R�m\åzDcäìÍótö쳃ïS�ÿíâûu?ÚÁFçaú‹êÁ`ôgÔGõ�Ôÿ�@Ä€V°„vøu]T'S€ç²OUî ‘ëKòsž€»¡ì~R¹[~u‹µç¶þºí�dú¹&€I n\eÓ‰Pù÷ü'|ž+5ÿ¯z¥÷þWº~©ðtß(u‡Å?ø¸s€û5Át`YïüÃÜr`:P`˜€0 ØÓ=<èVå®éMÆ–{ÄŸ.æÙê C›nb®`ÜÀå™éùp†‘À²[Îáa±Ljtü—XÎëÎàkò`ùÒŽ÷ùRé×zz•Þ狼ƒï‘ÀÆlЮ  €Œþ?Ÿû³òo@לˆeôwÛ�Æ.iÙÀ"à#Éf+·7ä.Éšb—IÛåçQ·|—S7¿ó¹¾ºù�o–î\À$@+Ðhå}_ süGžæât‚5­’ok§Üº\®SK»ÜY(‡|¬ì³ƒï�ŸîàÛa®/ràãM1ŽõPó~_6¨“ø\ý�ãËšr {z À¯‹Ô8Wà¶,‡…Bܯ ?Ö²(+¯Íá~öm¹‡VÀ¸;RZ—‘ž?Ð8ð¤’ï °{z Çap¾zs¶ªýó{ú˜f]Ûgyo¾*»‰Ëš‚?Õdß;øòŸW{_³Â¯òîàC¯ íIÔÂL6a* è·ø—6#¬ØL˜®°@k¾‰À2Á� éF1£–7jþQÚ>«¼­#€ô!MRp€_€}!À?Õ :Ïõ?x»ýkv,ÿ…Èà"'ÑX,ýèGÙª¾™¿ýÓŸf?Ö÷ó·¤xÞKçÞÑý¯´°÷¹V÷Ù³?ß³ÏÊ~å|£Ü0d$ðÇ ±<�_¼úϧ¾q|YÕ䃎t�ûýdW°ªË ·k2¨RnY}]øø$Ð:àÖÇÕyÊÊñHt"`þ'_~™=þè£ì¥þA÷øóϳsxI£øB®¦ŸiÁìRÐa‹Z¼;Ñè¾!õ`0’2"ò9îmæù«¶ð~®Q¿pÄßs½RRo\ /h—-×ù¨Ò0ò£úXý¿R¸.ÈËZÀ¡Êz®{}.ðój�ÁX0 @ŠÔ›Ê?½v=n£¯«ºiyuËqþºùª¶¯ éZE~ Ó ~¨ýOØ'ÿþÿøÙ…4þsYİ$í6t~Á‰ÀMú#­àóy�5-@lO•þ3íÙÿRi—zšÿOeÄ�ÅÈ~!`Ÿª]¾œ«ý+ ƒ�"«evþå[…Ш„r/2à�‹��uÏ[*»)뵃ßî8Ë[ÖÅ ’@«`ÐÍ Š¯J ¨þG,Äi¤ßùøãìåŸþ”]|öY¶¢kþ0“_üy�ÔéO”žã´q÷”nOÄq.À�l�ÎÊþw"�§*ûPé§j»G�›Ïzý™ì’@*==;þ €eµ9ì¨HÜ r@€nʾ%Ë[�X€dL¸~vËd’Æ;"»œºù�Ïí«›ßùšè^+¨úx=÷T€},пø—ÉNDšó~,Çe_!]#H¿¬…À'Ðך:z.xškX ¤¶n¤OŸkÝy\ùëÖ;̽N:Ï\À(Âlkøø–k´‹´F=æ¾�ŸÑ d{Œú"ƒ}�ìDe°Õ—Nw 9%œ²Aý?ü²øc2¢‡{U›–Õ~63ÕUÿ};NX P™l]Þ‘nI2J¹±ú�¿ý-¹Ù¹sE)³�$V€!ËG3¨ûŒ‡¶ 2  ãó{Úå“-Êj¨Sˆâ ÃpÍHŒßš€]Âj˜Ë’_eè]«¼žŸh®©“QðËò…_j�à_�dG&õó:ð‰î{[ö�¹`½�j£>·4Ý‘ÙùGÍçrRù6ùz®`¬‚V'î×!5mC§×õ©€¿®µ‚-nK«í74×ßê«,´€0Hì�à�ï‘zƒè‘ À'¡êð=ð«]!,®[í‚Ö”þ„¼#ñ™ì-�žOþ\„ÅF4$È%ÖLmO‘ˆÚvsAãz\À £º\æ¶ømý™„ÓÙƒ¨¸fÄçk¸ Kˆ‚Nϼ;”AxD=2ˆ�©<©¡M˜ôü“� €÷Êc´×œžUÿàr­øžQ;ÐLh¯Ñ© hG/‰9ð�ÐK¬î{_S€¿¬úcðÛ�Üm)²ñ–Ty%ØÏ±n9Îçªæw>§çz-ÊõOÃ� ˜„ Uø3LN‡ôX/øB :»Òò§™ªy¢‘Ÿ¿Ñâ”]FbÒ0†ï (lêàX…—´ø1�V÷‘~\ÒÆFå[`޾' Nî�]�kÊÃß}�b €ï(Ke‡¯å/[ è´€Q$=|ÞÑžððõŽ”sX"¨š�WVõoêO1¶~ù˰»oA§ðkÿ¹öù£ èN�]�þ‘À×:;ÿ;åy©0ŽÕHd düXâq!“nÕyŽ%¯€Ì»ù°A Ê0âGšž:oðøvIè±"¢+éCiWh”.˜«çQ&ÜX¸škðÓ%Î ä�À ‘ ¡]±F�þö»Î²’ÓçWwd6ÿ°ùÊî£Iá­$€‰ P@¢£ò/¸?ù/ÿ%»!p¿Ôwúðè?ÿS§_< p,@îd4ê­‘ö¡ÀH1üpŠ0®m‚À*ÿÆÃ–áùÃ,Ѐš¦ö„²7u`É[ çš4ŒüX•Y:ú“>o/¤sªz÷D‚�G€†1�X”qWå>Õ½°3�uÞ6^ßn§ #åÑò\ H|�ÈHOg\×è~WŸö†£±EÏô—êÀ'Z`Ï–Úc‘ľÔÿÛKuìpÔ¶*`‘`x &ù|li*?‹…, p1 j8àjº‚zó}Àhkð“Ç~\@Ïè�¥LÂÊ q”—M€zùà‰\ac�â‘I]9B\LoX |¨2oŠ\ÂÆ ÕÁtƒ7&�-D` ¹ƒês|]M€²1Ãæ6ße­Íú½PWä<`:"k›ZÐ d õþ†€þHkûÚ篳Á‚ Ÿ½ªcóu À uª‚ÛÈ¥£‡· TOÑ�5úcÃè#:¶I—x[€kKûI ú{ô'ÎFí i}»yýA`3“ò­ª^»;�â½À‰AoËÞ–Œ¯qeiÕ¡îqE÷‡úÎ_„[N!O…Je©žÝ×s•ÉB`zb²ðT nq3Ò¼AÆq‚ÿ¨ùªÖSRýL‚çŠÆ-A:D¬~Lü ñ3:²‡>í@WÚ£² ´»a½@À ù¬4=ðS×3þÔ’†xl:÷'Ά|Ô�;ÈäuF¾eX`ù¢Ïà¬TFTÀ´Èƒ¶ÔÖ›*/œ$¿I–òm k£éÛxC­&€Q…]–?wGŒAÏstÍȸ"Ð ÌÂn�.ÖðöE pÒùC¼ÓãÙ¸#9ž¹¿þò‘:Nvü&Ü"“— A±IèD–ÿ1`m LeŠò £&ŸÄqaoÉn˲¸èµƒß® ײNŸÁ€*{ÑÃæ6_¯âxZG~(Ó’-õAŒòqÝöÓ)9Hƒ3øGœB(j, “a= ¼ò“K™aM@õ¥ßíA^FOõgþoð;.®[u¼fÊÒ.´e  À”¯•S!€�¦ø1þ8Ä'±½ºèô`HÀ²¯Pt—dH ´Ž¸OƒoÈ{®œ?®'Öç‚0À¦€÷–^ÞÕ+ÃmæÀϾ&Ý%„B.wýáø)?@•t±-*”x@ϼ À€ Mà P=?á„Ù½Œyõ…›<*; S8Û“í�ÄZ€ˆÕ'¹»ÈœúüìR¦n[†Íï|uë»le³[C<?ˆi‹4®MÀ£“ÛqK†>xç�°¸õ@Gˆ=DΘ¸À5¶aŠ�¤¹r P¼çþÀÇŽ‹1øíÆà§ŒÔŸBFeôÖÔ¦L¦õWbÉ-u—’@k`”§5.â`DŠÉÀ€X—ð†4€;ÒVcMcû+x©ÏÖ O €t€ÚÀ¶[V é#K»zùå-+3§,Öø>€CÞ‘emëµäšZ²§Ï1½öóÈ«è8Õ|uÓl@Ôï­ hô,›@'°jÊ|˜ÎÃ5~ÄDÛg`R @gÔ�_û[7†0ÀËÔ…2ðÏÈ„ƒT?ߪ=¬/ø°äé).×XƒoFMžÛjçšFí4ýòv �“iÁº€¸!»¦p„Ê|w¢ÄŒøžûçí¡MM7a-@r{!€óm›ƒØlˆ ÀÓ­~ÏÂ÷ë4<“:¦n>§wuës¾&¸—½¸ -iY ÛUÀMmÚÖÉ;7!�SМŒqç6 `¹ÆT}-i\þÖØ2íƒv´x$`a5õVlgÐÔZU¦ÄP+óŒÏ¥0샨šÏép!æýº%{PXø�a€FžAù»ê Öó~œ˜®\V¥l:¢ÓE.cjÏæõXÃô]H l R»X ƒäO× „XÛªRgš¦ê=j¾ªõ #¯Iå™K˜”°ŠÊ¥Ó,kÞüúV€?åxm¶ûkz�ä@{­•F}F~ü˜8­ë¶K~\§‹]‡Û½,±÷ ðƒZ®øqvrà¾ÀÏ´éžÚ篋N†R€öØ mlC;-²¹ €Q>l~?lùtxM€ôŽÀ\!·œ+¹äü!¯Á»Œò˜˜vó àNY˜Ô½ }õëø<-àG£á¯Íøß¨ÍÿàƒCHZWŽì–àÄ þO�~CåôQ×hKlÜ®ºä5l¾¸î¦ûç‚f%d:–Ñ?ð _û©3‡Q|ˆ†õH@ÀÖ`ÄÅ~Óü©qž8¼(Œx—»I8çpfà‰ÀÏ9ÿê¦È޵Àj=®®Š"á�À®ÊäOSoë^ؘž´¥¡db`V©£KÓ_­&€a;°ùŠD€¯ŽÉHÈ–àmiØ}%Ôî¢L}ÂL˜êôà€Ãh¯:zsü≋ÓÙ™âò7‹ýqüÄE–íÉ"[‚sÿºÚ¾ƒP;‚F t€´ª|¹+ÞôN É”­üx=@Ùj·«Ó^‰®uà‡øêfï  UÇß𤳰õAÏuVÀ°&|2,@ñ�@ø€œy¿ê Äà« i¸Æ��Ó¹„•YÊѽA:á#• p„8_ ®)žO{yŠFÀ‚hÝïØNVyo«œ;ºgÞ¤k�?Ðñø[GÜö°$0l>‹º,?áhëæ]�ø¦v®ê¤ ý™€³Vr Ù° P@Œzá<@ °`%Æá±{sõ—xûqí'Î×v £4 ¹´ƒRø’/Ñ 8ü$|-(wCaA+Pº  Ƚòõ í/0ñ‰AL5|b�UÿÔEÞ¶qqUGöô9ÖÍW5}ܶ¦ú[EéƒkŠPižC¶~,ÿ#0¬&~‹€´• c( Æ Š¯ñ‡ãÚ’Î~»ª7êÃRO\— ‚cYÞé£`oêzCq,Š.ËVù«qj‚øSÑ}Õ{ àŸ„Ê¾¬3Í÷Ðý”J ÀÇkF%Ž*ùIƒêËwháO6Õ¡ƒ‰�Sñ& �  ¸½S�#6.ÓõT)Ûií’°s�ÍýAÚªãÊù.?¯›»ãT£°6 |€Vkj]˜¦\ H@jý‚Ú´=Çž•‰0àm–/˾D#ˆŸ‰ývëŽÐuóÕM�8šjZAM^Ú®pø§O¯ÜœÒ¤¯ƒ @„Ñ_.r�úø­ ä …Þ*Æéb?ðËÒ~þ,’a‘.œbä4ÔázíF›¤\ˆÎô¶àHŸEóÇ)¤ºŒÕ>‰%¹E-G `1�¿ÛR9áøpù!UOX|¶�&€àG3sMfêº"&yx%vƒíÀ²74ê±Á™Î]Çx„ø9{‹À‹Áƒ—Vœ¦õ5À—೑‰7Ô{ªkFg,»ôÂ1f®#¯‡6BL[ÂéF"@‹Ö²(2¸À ¼çrË4î•ö°3�¿Ã]ĪƒÞd�jÊÒÄ.~LU�ÀÏ}Ré/[Ӭ߹&€i‰Ú�“#ÄßÐß„ÝÓÜÕˆ·-¡Î2·ƸܰèÇ?übÑ^¾Tu#ñ úˆO,ÿDøÙÊÌÛ ¦2Lc8Œ}úÊ—{œ3¥~ÅcÐvÂÉ>Šg¶§Q (L_d:€6€-Ð >')Ï-É��„¼é(¿dñƒ74hF?MhCÝ[ŸKöA ›¡“ `C›ƒ6$4€°˜7�%O-¬ºK“¯ýž :ƒŸ|” à :Ââx®mÜÜÜ^æìý½¡6ßT=œpä¿hlÌ�Âñàò³òÏÔ hrÉ¿ÿ>[98o)ø#ÕSÙ#Ù“Ÿü$[§í¬-È.m`Eá&)î cðýÙMeüÔM_PDcƒæ‚š"]: �mK§ÿìÝw³Çþ7÷ïgO4’U5¨ó~Fv©¾hÌ��5êÑñùCQ€Ã¢Ü …±àˆzÎk;wj�þ®× 3±xe�6»ƒ;mU—úLKjWX¯øOÕæSµ�}�õ§ZAÑ~[rú©¶NßRÚKÝE�j× À[²7Ÿ=»\_Ð=Îý³Np.r}¢:ŽõÝE =Éá†HÃs@��¯ƒ§û¹"�V@ÝŽ[7½%U5éèx,RÝÑAwô]ÀêÇ.¦ÜUGÅ�ÈϸŻxFkVÕÃæ…C$l¦Q£?Ú¯íí<ÒQVSõ¾Ò²â|øYs MjKxÕ‡«ö0RÇ$à)‚�î•ûå^o øï äo¿x´%44™]þu‘òH‚7*H }Š­Ãüsñ>kJ»,Y£=,üÍß\þÛP>ú»­v•­Gx3i×ÏÔM߯¬¦ÄµŽüš"À´´ë‘6�ïw Àõy(K”�Î;úFR€Á°«ŽÅ;þXƒQ® r 톼DJìò ^3Çf¡�Qš÷ØŒZ—ã¼KO\:¼lX¨c4HrC Å1�§|ãêŽüIÍ#_ÆrbÏ¿6,ñ €wþjÒnØK Ñl˜Ë¯ ÐK"ËÊÓdtI‡,Ãì^yÏE'Ò^~ûm¶ûÖ[ÙÑînX˜¤MX¦N¸hSö+†pÌuÔZE~PWž^ƒ.ÜÁ%¯ÕnÉnË¿)@ð•jk™aÞO§fäg> `�ò =@(S^Ù±Y²iªA#€ÈÂt¦@#8×üýP£ø ­ì?ºw/»©ë7´^²)’¿^„f›ù52ä3d“äÞ¸ˆ<،ąSY? ܰˆ@Óû‘nij¦UPW*Ã>èQò‘•œCBÃ)Áh ;”eî{Åä×üê Ìãƒê¯<€'n9]6+Ý^Á�Ó\){–Ü« ¿}5ɉ·º÷íšÔý¥§O³E‹Â6`•¡íAK{$Û…!€RôÊw¢|Grùä2DC²€ß#}*;_;^E÷5uÓ÷-lF‘sM³�)�Â[‚!¦¬Öûûþ´M¨ý~ŸÏÈŽÚ>ŸUÀ@`YÕwUs\ˆÂÐéšî¾¦èe O¥Ü—PçפÂóZpK‹§ª‰˜pùsQd‚Áet×ô(hÊs ù@Äýqcð+ÛØMÛž˜K¨û ê¦O{Žó{ä £1 `”fÎÎHu9&¦9žª|oôGýÏGÑ~ü�ˆ€ÂF˜eM-¼@øz‰ Qû{`EËÉåîA2Bnᵡ6Ùt¤4›ÊÃ|Ÿû÷¼JÄodã ¦eIDAT¥ [ƒUVøFA€ô”mðóÁõ3Sö׌ãœþµI@ÝôIö™^Î%ÌR¢t†žUG Ÿ³j!ê5õ_� ‹~ê¤aáOàà=•9¿ :¹Á¿$à~ÖÜéòd�v?àÅâß�½%{CDÀHh<ÇýšFñM-èešœk>�šÏ‚ß�ìYˆÔk¸Ä+™³! ¹ðö�)&>`¶ ‘úiÓsAsEu…_7½ûL•|¤a¥~[£ö™:4b‚QgÄ„¹¿üŒˆAõ7(/Æ#«þËR—Wd{ „!Es~z#¼šD§Ò‡Ë=ÍàI±º¿Ûr·ä²@º û>±±ý—×}¼>ä3d@nÒ€¨™ EâzVùÎÙ ¬½‹¤äÒær6ðc·ê3T5�8p«4@lÌ\@SNçÂnøœüŽìœlPCÃáŒþéµ°òc ~6·ð‘ óþ0÷'Mà -¦#tº½ ˜Ý“½!K-ô� ¢¬êóAszÖ=Î$§Cx_rÚ•{(¢[a†ÃE”YÄÀð³pˆ_ ÏÞy'[”]À@›ô:Ž»ŽþkIUØ¿¨3 Êçx\FÞÓsJð]uj·˜ö¼¯JÝå‹Á Þ£3j1j(/&t[ÔZ�ŽÌûW˜ûËO¼ë §ôC«lé4ÀÌ�€s  Ù¼-{“¶Êeàü\“Žû žýH2ZÑ{üó÷ßÏŽþcÅeš„×z¥Ò�Cz^†­Ñ"Æ m»ÞP¾ú8Yº|Ê‘±ÌìÆaƒHÁy¥ µìÇϰeÍnGs™‹n«ƒbY‘ü¬po üì{ûíø²-ÌýóÎ ø±,’­ ŒüLBÇžÁ­!:J:ÂójŽ{`N¿�»\3º3â‡MKrÑp¶æÜ�Â]cØBÌç¼+ï½O_êž_(ŽÓ‡Nž?ÏÖô¦Àu#´àDr9ÿÅ/²µ_ý*»õë_gÛ"‚u½%± FåÀñµÃT̵6sA“~˜uËwGc.Êfÿg ‹\Û>à¿%ÿ¹âÂaŸ@ýÕÝÂ÷üÒ8>‹y?£oWà˜»ë%H• ÈÍc°üa„˜¯Gxæðž‘Àå:XÚ/¿e(í�]×3&÷ŠÜxŸÏº@¦��ŽE§z½§U½°PÊTé ™½ýv¶ö›ßd7>ü0ÛÖèCG±Qù‹H ¬^Â1ƒFøªéz7ÔÏ\@å:›æ×|¨ûlñ®ÖÞ�ËáÙ=u>¾nXá5�‘k‘ûý½•Ö1Î{¥ÛSo‘åzu€³ó•žûüa„—Ÿ´áq#<~ÜzÚŸÇ‘¿ ü”Š - /ëû~;÷ß?lóÝ}ð {ñÅÙ‰4� }ò»¦sW¤%lhʰ%­aóîÝl]×äšõ'6<µ%­Óu_W·ÕP÷aN:=�ˆQ„C2ö5bíék¶#ÙE�`·5’-êÏBîi^Ë迨‘ŽïéOµi…Wb,ªÓ?‘Z{ð‰÷ª¿:ó°ærl+áím/ ¿-¸!·GòCü X µ‡ôÈÓà¶KXÇÙÏý¤ÏÙqô æþ7µ=øP[ƒ—´¸w¬B´‚�7ßÌÖEL�6µ¾rSþuä$YšBþH  N×ëöQjÜžë¤ ´Žü�҇ׄëÐ�¥¦ ÔO´“í#×wßeKß|“½ûÙgÙú`eKqá ©«[ê˜o¨áa¯À5|Á¾�°˜•ƒ¿¤ (º&¬_¸ãSWM ùp1Ä�ÛÄunƒÕn\¯ë·;î¶ÌcysE“zðeå2Š+ЇoýElý±Ì×ê�Ÿ¸°°'qPÇŠtïj‹ý¡ÈÒÎxŒýÄÙ WSzi�'v�[ÇPFlbÇáöÇéñÇécQzŠÒ8í0®Û3îr‡i˸òÌŒK(uÊ¡3`}#{�äçš/×ô1p ÔTÿ4y0€3Œö9ø!“€ÝT0 íÒQ±éµÃË✞v�&vSˆœáí›' ÎJ”גܹ ½r:íì [wµcíBëËg«Œø€Þ°ÐµÓ„têÌlòƒõhoðǮɰƖ¶Àø‹®ÞÏUÓ ÁOx™ˆ´S5šÞ×eírü ò«¦+«§Íá×’ÆùÀè<B±©¯ÒÖµ_ý\›�ø¯:æþVû© c eåïÚ9üâ@#=Gbi¸M_ÈEš@·@ý&ûqS¿Ãp1¾ùµý�{}$0àN=è±UM7¨ÇD«ÚÅwKߣè3Ö½Ï?ÏôÅ[åÿ²üL0¨þ¾>�Ù|¢M@+úâmM_¿…/õ¿®�jn'õ[v Õ¤e qÓúœ¿j¾I¥¯ZnÕté}6ñz.`–‚¥3ð9ê]�þGRÿ_B"€E�l›ñ��‡�™ ` �üŒú{L”çÎï~—mÿò—Ù&ߺ3¥ÈGüÔ-›N[R*Õ�;­¯;·“è  T‹Ó­èCž[úN à¹N¨Ñ¤6Ëôõß‘H€“l–ô~Ÿ.Q¾ùø‡/9›‘?ø×u¬Õ�Ÿÿ<ÛâH+m.½Ã¬úÛµúo—Ûq»ìÜbaPÕ¸0s˜Ö[µÜºùœ¾nùƒÒW-·jºH4�óv0â#¡ÎM}Äó¦ÖÎÿñ³§RçŸë›} x({.Í`QDÀ+Âsi œb{¨uƒe�ÿ¶Fþ[|�mÉÏg¯|Kyécà;,v­îsî�#ÞR—ýI ÕPµÃ�;]Ú?!‡ZÞÔÇ<¬äs\Õ²üÏu�žFùc- žk»0;Ù4¯ˆ,2Ùõýèò0KÀ¯ë5ƒo7»ý&ƒ¿êý¥íN¯•3häLËóµË­›¿j¾ªéÜžÎ}%�VÀ«Û˜­�ˆeî¾É×|"Önë‹—šìêP�}¾ÿðß~á Oů(íºN¼aq%?ÙÆÀ7È}]þÙÞyW{,QÖtGC<¡ôAs è+&hÍ9¨rMZÀ†>òÙåðöù+5þ òP^× 7 ÄqøÇ=òWAzßÎ讯j~×;(}ÓÓù¾›ä¶Žü�›$DÚ(é ¸€³&�‡{SS@½/ö½äy�σž8“þ&Ê IÏ£kKu ´Ž¸µª˜f:Ꜳ×L ÖþøsÖx4sÞô±?Õûr&å¦íˆï©J�Î_5_Õô³JWåž›–¦•Ð4!Ò:`¬î€w\çø˜@L$1ø ëL³%À3ŠŸ³[ÛíËó‰¸AʨF8G[á¦à÷¨GÖ—Ñß®5ÇÓ`Ê/2nCQÜ0ai=UËw¾ªé«¶mRåV­¿ é: `ŒO‰çNÇÈ è¹6øqéäqGw»=¿¯ÇØÌ®¨N= Ì%„½»,ñL*�GkƒÚ`ð§@óHë|½ÝAí_rû=²*‹�ÛY–¦_¸ÛUµœªé«¦ë×¶8®jyUÓÅe7Ýß@ø~M*í£­1 SðÇ ð½9½¯Ût¿mx&]_—@kàõ¦O>dXÆùðìviyì'�-qÎo—°Ø”…ÇiÆá/«'n{•z\NÕ|UÓÏ*]•{nKšŽ¦ð¤ÜQíUÙ/®(}ÖI`¸–0n°••—†§×Uà°ùª–_7]Úžq�ìn�ëT~Õt.wTwÚõ�ÚÞ~ù»Ëý¤ÓÅu˜s Ì•`fžÖ3›t}“.\rr;�Ô®¯nzçÕ­ZoÕt£¶§ ù;   O¡kC'�I`®4€A24³�+Ý r_µÞaÓ;ŸÝºõ9ŸÝª#¹ÓÛu½UóWM?«t¾¯2·j»Êò7!¼Óšðº6t˜‘®•0.›ù•W5�Ë©›~Ô|Οºeí÷Èîz]ß ò«¦s¹£ºÓ®oÔö“¿Ó†‘Z—§“ÀœH`.43õ¨Ïd\åÔmGÝz릯۞²ô®wÐHíü“NïzR·j½UÓ¥åÏÓu§ÌÓÓìîe¦0¡Ì´5+Ÿ  æ=O•®M�¦$�¦i°fÌœá6�%£zä˜ô3w=Öç|£Žì–׸Ës¹©;­zÒzû\öç>é§Õ$ >‚°ðf þ©?‘®Â¹�€ÈÈý¹×�£s\4oÓ4K!ZG–JE×#aÅä¥É\Î M jºÒŠ*FL«žAͩҥ¡ŸËº/*v&ñMÒ€…»ç3(á�é$Ðd „¾õW÷Ù¸O7¦ýMÔbAÁ çúÛì@�‘ÚŒ¢N5“š]ï M`ÔÆM«žAíµÊAŸU=±à~=¨ú©Æ7Y°;˜j—è*Uœ©,÷cnc̬5€X(±ßBC€§KKKguVRóÈç‘aVíW½é}øþÆU~Y9®wZõͪôUú¬ê�m‘6à>_ÖÔ‰‡7I°0bð7‚&þº æF€»¼¼|ª›:‘Å5Ä$Ј{žµ`!üv-° Äç2�?þüììŒö®È.�ŸŸ/b5š,Øæ…]™({ÔqE©;(>N_'mœÿ ¼ƒâ«”‘ÖYt­¹iQp/L2íù‡õTá¥߯muòJ[Oåy {}*ŸóÓoOvvv>£ÏÊOÿ5Äàw?WôlÍÌ@‚E€€Õ°k €_ñ'¿ÿýï¿;==ý?·¶¶þãääd]þ5¹«"„HA�vIÅA�r‘^!‚qˆ¹ HÇQOYƒÀ[–oÚáã ‘QÚ¬~0Jö²¼¡Ðø¬K�a¥ê3E=ш�=ZYY9|ùòå“?üáß© Xp¿v?·›©½ipÙ�ÄጞñõTý90$Ùz„_UØzd7äÇnæ.qk²¤C# ß’,å|[y;ÓI`,0`q¯h¨º>–=’=”=H,a¶¤3)˜ÎgI3Ó$›X° ¶`rðˆNÇÅàO Àåwn'�qIÀ}Õ÷SÀÀã�OZ÷o—ƒ;SÓ@±@’�èNg@¸a=@®Áïô¤5aàïL'�Q%`°âº�š�è�¶&‚"ˆûú¨m9�V Æ,‰Pc[ðv<úÇZ‚óØYH]�$úÆýÔ#ºIÕÞÖD€ûµó»,Ü™™&7oá"$€‹Pq bâͺ™vcù=ú;½óØU’ÎtYí~ÉÀdk"ðµIÂy\ÆÈ�µ€™‹ùB ïÃ@�¯fAôv­ö§à2:·“À8%`ðÆýÒ}Ó@���ßá¤#_ÏÌr�FÌ”zR¸ôX0)6± ¤Õý¢‘ß$çïü�Æ)úcjM¸öÇ Çï8çg›†.kæ�kÜàE8\†±À,XÒ™<ú“®?RèÌ4$à>I]î«1Àí�]çÁÅÐõí¿ ™ÁïÌ ºg„ˆ1΄@8×»�_+º—7õsÝ™Nã�@ XûqÝGí�¯é»w¸n„™éF XÑZ€I€hƒ×€OÃ}�k—á°Îí$0ªRàúÚ�¯cà;œúƒ¿ £?�i „ƈp#c (öûºÈ%¬3�&-ƒ:u©—°8ÜþЦ¦€ŸÆ4ŠBƒŠI ŽöÚ¹EaQtçí$0Q \w^Sûgºï¿H �#€´‘ÑÔ �òuG–DçÎBWž6 I£}Ú6®OE� ]S(KÚ…w˜¸šô2°°ÖJÓV�·RØ]£ûJ Í}ñÿ+Ôq¹/æ½IEND®B`‚ic04ARGB$ƒUG„w„ÿ„ƒx„ÿþ€‚x…ÿþz�x†ÿýQ�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�w‡ÿv�‡.•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒªØØ�ÙÍ®±€‚¬€ÚÛÛÚÖ»»Äš� ¬ÛÜÜÝܯËÛÛÚ«� ®ÝÞÞÈ\MÇÝÜÛ«� ®ßÃw*•ßÞÝ®� °àÑ)OÚàß°� ³áâN (¨áà°� ³ãäw.5F�Åá²� ³äå©v ÈÛÕÜã²� µåæÌÙééèçæä²� µåçéêëëêèçå´� ¶åçéëììêéçå¶�•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒªØØ�ÙÍ®±€‚¬€ÚÛÛÚÖ»»Äš� ¬ÛÜÜÝÜIÃÛÛÚ«� ®ÝÞÞÏŒaÉÝÜÛ«� ®ß�mck�¿ßÞÝ®� °àÄdj�›­Úàß°� ³áâ„o––šÄáà°� ³ãä�|¥©ž.²á²� ³äåE‹ÀÎÛÔÜã²� µåæ¹×ééèçæä²� µåçéêëëêèçå´� ¶åçéëììêéçå¶�•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒªØØ�ÙÍ®±€‚¬€ÚÛÛÚÖ»»Äš� ¬ÛÜÜÝÜIÃÛÛÚ«� ®ÝÞÞÏŒaÉÝÜÛ«� ®ß�mck�¿ßÞÝ®� °àÄdj�›­Úàß°� ³áâ„o––šÄáà°� ³ãä�|¥©ž.²á²� ³äåE‹ÀÎÛÔÜã²� µåæ¹×ééèçæä²� µåçéêëëêèçå´� ¶åçéëììêéçå¶�ic14óV‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATx콉–#É‘��Ü*kíîê&5?) GÔPsþ÷ÎH"‡d/Õµç¾è~–qQÏ™db1?ÇaîækÜĵp÷ðØ¹¾¾•{xvä¾Õj±Ø tߪ×fœÊ:ŠGD`÷Û®¦ �B ( �Bà‘(à€¯§ÿG½šÜ(ê?´Q§³æ‘(à��¯×^Ím,õ_ÚØS[ö@ìÔTÚ×!½€›P­øºSP¥· �;Íý×Z�íº8êhï†@�Ü ¯‰ÜEþpT¤xîd0/à?úÇTm�‚@�Ìû7‘;Ý”R“÷-—ª¨`!°uÜe`0o�lÝuSÜ P@H½#ùÏ"ô¡ô!}Û�ŠÛŒ@Kæm¼Å¦Moã£2ZÈ*¾M”0ålß�ü3�ç°kïÓ‘Ö§ïÓ¹ž’…À¶!p‹´@Öåp‹MN O”)ƒ`ŽŠl8e œà¯$ÿLâ9ìÖZݬ¸Ë•,¶ �LÚ÷P¼Õ#ë[ÙW—ËÔ¨À‰ l:eôœáòo Ú¥¬Ï2‡�iý´p›F¼\!°Í˜¼�AŽ;l餋ÌõSl ™˜9äwxš$Ížÿ˜ÃÔÕç\W¤qO(# ¦Òm5Ð�Å;’¿ÉiOM[Zgi=Òº.ØïË“óW¸Øt&Y›ãgÙ†‰÷ypËyouèk]@ P?›†@�ôŸQtN5y£ë [×Êœ¿/ÍéH;òÙå°u% �mAÀ„ìãÍqÂŽ÷…­C^uy³ŽÿñÖ¡›H«‘€¢ŠoeðO—K'³/ŒÎz‡‡$»+¶iT�®M³‰#�ÝPØé% �MG %çw™=˜o ŸÿSÎG:.ën4·É÷‰š¸ NiÖ�­7¦�¿ÏjKÄijϤî°eÎçpN£ ô¸!y“Z¿…Àv#$œ h‰Ûq?ÿ3tŽóÿjã6Rµ·‚”» CQ� @`ë €tMÀVå8áÖg"w™ÃCeœÇmÌ’îSÉB`˜ aà8²õ&|ô„ùoÎÒy¤—Ÿe PG¸2ŒDÉuG  €þ3˜ ™pëMàYî¾|ùrïéÓ§{WWWÈ] ²ÈïðXR'i]Ý,2‡­“´ž`¹B`ëÙŽ‰W?îÒ®-ÏÎή𧧧�ù�÷ÿŒtÂH׋Ì^Ñ[.ò–p —R¬!eÜ>iÜp¾Qd™ =ñð/^¼ØûöÛo~øá‡ƒgÏžíËï]^^îâ!w¤ ƒ[¢7ñwrLøŽÓ9÷é&V¿…Àv `bfþýVØÄ�ÔÿëêÓ§OÇÇÇŸ?¾TøRá³!ÐÆ³ÀÌÆ²ÏÑò•ЇNéÖ�­6°âgœ1Ò[oÒGïð®žø÷¿ÿþû'x�îËíÊÙ°!ùg ‡é‹‰ß�]ŸÎi% �MA #ö‰Ã±yqqAÖé¿q©¿Ü™þrç8òäÉ…*¸Ôˆ€IÉÿ5ÇóÛ¤oC‰·^Ápè(ùÔŒøß$×o!°>l­À·ç4YçY“½t·Â"øýÃÃÃçÏŸ?}õêÕ3Ý€ }5³«Ó;&ÿNFœú!v{$œ%a;§9^²Ø$àÓöx¬Cê?•G<ü?’þâüüüTÿAü®ˆWqÈÞÞäÏ ]–¹I·oâ§œÃÎç<W¿Ê02%× �­5¦œ¥ _¥#‡|6ö”o÷w¿ûÝ“?ýéO¯~ÿûßûúõëo5"ð@dS�>ä�.K¤Ñ“»eÖ¶ËéÖ-ZêIjÑUV}…À]óã°&zÇ‘Y§ë>ˆ×:Õ1ŽchøÿäèèèøÃ‡'?~<Å¿{÷îô—_~AÞ�02ÀÅÝŽçŽQ?qò;¬à„sʘ€¥"ë€@7gɤïsæx–„¹dä/ÝÞoûÛ§2¾ÿÃþð{¿;88øF÷+È>ŒÉñS¾Ãº�Mèhœ4dv}ºœ¾ŒpË@µê4}@›f¢·^ÿƒ0\Vñ _¥32p¡¡ÿc{‘ÿg‘ÿûÿüÏÿ|ÿç?ÿùýßþö·#ý'%Ø“!p®2ùlò·7ÙlPÆa’hŸÿk Qní(àæ̉k‰×qdö¾qŒÉ_é{šûö_þËÑÀþY‹ÿ¤)€t @÷)— ‚W<ê’t¦Ï9_Ú¢uêû¢«¬ú �1º–Çaº&þœ‡4â]Þ(œãÒ3÷,r#à›o¾y§…¸?ªØÁ¯¿þz%càZig*Ãô7F@þ_+qŒi™ì.# ੟M@  €É³ØwC°Î$ž%F@xæþµøïÍÿÿAòÿ×ÓÆÿ‡ ôð SÏÊ<áÓ—i®ëî´,•VÜ“»%å°+Î:ÂÈì)ªu6z¸??ꌀ#à?+Ï�Þ¸Òÿ‘§ÿ åÙQx$Iü7ãIDÎä»ùõS~ÎG9äúbÍ(Â]mOèÈT®X5Ê>#&þ>ibZ�üD7–{{{ß*ü…ÿIU›üÛÍp«+’RÀŠœˆ í†ùÑ’Ã ;�ôì³1 ëõ\þXy�5}u¬|ûz5÷\#sgÿò/ÿr*ý~7-ðùÿøÇÑÛ·où_³ ýK5è uk¸P¿úRF€)¹²”psj¸ àÚ›A7ñg‰°ÏJ/ðÓÍÇõE¥õS³gŽ�€î+‰!€³A  ÿ¹}àO0 d€#à·úOòTðÝwß}«©€_ÿþ÷¿¿ÑÓÿ¯'''#F ”ÆÛíÿ<Ç󨀟êm´FzÊF¾2„D¹•F  €/§‡?®]¾´a“ÿøé_…Æ+ýuó!½\!PÌ�@Kô9žÃ¹ªLþè;#€Wnã~&#`OÀµ^¼ÒZ€E_i=À7z1ç™ì��Ÿ~úéì矾`«íÿ;ßܬ‰ßOÿH“¿eÎKe‘’+‹À¶íŸÝ7Ÿ0ÇMúC FŒZÉBà´D߯sU&ëzF0¤ßáh:ैþßè?º«Ï´^çƒÖ°`pGú�n=€«ì“6rÚ,#`œWý©é€1X%¶Ýà\´F€u&ÿ!ic F0xú×�'^í{è“ÌM³\!°Édò7ñ'ÿ;Åù_ŽDü¸=‘ÿ¡þ/Dú;Z øYSŸÿøÇ?~V¾í ðYk>kf`Wo äÿy £ €öO6Í —«…�-¢_ ¶ÒÀ"oÐ÷ŸµÓ²tºIßr< àOpƒ¹ÝLÓjE �B`&&yg$ž�ÓÉÿ/Œôšx®5ßë5]îêUÝoÞ¿ÿF ßü¯ÿõ¿Þh*€7 صÓÿuK7EÜëÛ¹3Ùpšeä¡Cê‹ó;­d!ðhl�ÀŸ°CÛ2ƒo]–„³7ùOHˆß#]~æ&Ss¹™ …À}0"í©Ça¤þ‡ñß“€{ÿÕgšø^é»ЀÀsÖÄš§š ð¾,Tö¹÷Œß(D8» Â熠>Lèræ ‰ÀÖ ¸íŸ•dëü§î“&ÿ‰€Îpù¦©Š…À]hyÒñ, ÷ù®Ö0Ï�|.`Wáç ø�·TŽi€íÝñNkŽº ‚0Z‚v¼ï¿í4šœ9 @&ú¤¶s9Ôå �G`Û € xþsç°ó˜ôûäžþÏ1 Ì1éBóJÝæÍZù �­G åOÇ‘�‡gÁéæG‘¸YCùZðQSŸ´OÀ'MáíhÓ ¶Ž5Z,x_Œ1†þÌcÒ§sêç8~߯ª\!ð5”0ùgÍ\ÂÓ<†éa´Ãÿ_sRªl!PÌ�€y´#~!]K—ÞÅi੦^kQàïÿõ_ÿu$ùJ‹ß°OS2Lä}÷W‹ÌéYOù!Ä_FÀ<¥(ʸA:ÿ‰ ;îp+'È_ùcÏ^3Ò�†ÿõC�¿j§ØjLþ!èR:OÜLŒxõOSšxúZ‹Y Hø?ú�~üñÇö Pñ�n=@û¤î8t 8®à„Cßy˘À«"Œ@À›Åg’¿ª/ÔMæ^SÃݨ”B ˜…€‰Ÿ|#ïŒrøã=F´QÐk�<“ð½FXÀ“ÿ‰ì€w2Ž0ä¨d‚´›x›F;�"8žå¸\– ?$e|A»%zR†Œ€œ7¦tó˜Ø »á°à'ü—f*´Œï"êÚÄ:L~›xlÓŽÉÇ�Ì^eû§(|‹Ü‡üEüO~Á›Z øAßøøÇ?þñ£t×z5ðó‡>ëuÁ�¯X@[í(:\78Ôï#!PÀ0ð™ü�+ë�§t³©'£T²Xµ �êGv$~K’Ïe ^Ìeoªü²&@o¾þÍo~ó;•»–|©M‚Þh:àÍŸÿügF kÿÿiG¼Õ¡;‘Î $G~õ­­’‚@ÓaöŸ;ÿÑž�ºgLŒL¯¶R �B`™@þ8¤}&È–…»äÑHÀ‹å^S„5 x©�ƒI×>'J?›²?@áS´uäk �‰²ôKý�е•T¼XeÌFÒF9'H¿‹Ç(€þ³N›]cå( �¹'F^x‘°ùÑz˶BòáÞwYò�¿+Cű0@áï4÷ÿ”µ2^QNŸ>ÑÈÀ;•?RoÔ´ãY:L“vµ&ÀH”\ ʘï4˜Ü§JÝ$b9_µ›“kè&¼9G¸^GòØçÂ�æè_Î3Ïz‡‘xœe_[ÔßzçS¹X€”£ñûþ3É'’Ï)§Qö øø?þÇÿˆMŽ��Ù*àó›7ovøœð烺´£®ÊåèO�•’KC  €ûCkc€‚øsUº�ðΪ …@B€ÿDkçÿ‹uNÏzë(c=2{××J×k=q—C§°fv¯µú_#lüZ‹ÿoÿöo#¬ ø•o0À·(âº:9+ž³ä PÔŸ22b^8e Cj‚’.étnf· g*Y·€€íLÐÖ™ ³Þ:çAÚ»§9N{t}uH­bÑ™=$SÝš€‘¶ ~¦õ¯ä™&ˆ5ZÈ>}î‹EóåãAm>ò0uØgäòÑ)õwB×VVñBྔp_än¬“ÿñëÿúå®vû)áþ-VÉB`ƒ¸áß‚æ0‰›¬‰;l>$Ýeœ?ÇÑÙQ&{òéißÉV:난1Dü¯= u¯ÈÌ>¬ Pðh\øæ‰�r­'KÖ9nò·Dß:Ê…SŸj$À`”\(eÌç˜ìU$ü¸Ý@zõã +àX®Xw½¾ g;Êæ¸õ–¤Û£sÙ¥~¨Ó‹ü𔓒Ek¤?ÐZÂOdÄš€—/_Æš€?þñ�ŸTæš5Z$xÄ>Ýš€öOÕÆ©?;FÊȈTøA( îY\J‘§õq#鯲´…@!ð5tDUô‘=:ûiítDäÏnÄÛÑê‘àÖ<Õ“ÿw¯_¿þ�Ö\kmÀ ?ûüúïÿþïó®  [í½Å–Oßt€ãÆ2Q§ÔWçwZÉBàÞ”pºöz;Çí?qäÑsž²}õ•®(æ@bÆÁƒ&ûY2WK9{×ù·^iªvgGžÒXðŒ)};€}µàÅ/¿üò”ÿ¼¾p*Cà<·Ó…Ûûñüíâì7Œ ˜ |ú¤6't*[®¸eÜ6ÿ©‘cÏ�àîUU‰B ¸+âÀ{‘neø‡ÄÐ�? Š0mȱ¹×5#ŒÈ±O€–~+ÿ’ÿ¼Þ dMÀ{å=¦@ç h“´Ã9î|Hëk: £RáA  €a˜Çä®,�NîÝ i¸·•Rl8þ@Þó†ÃåˆS6{çAù§ºU, �X |Ü+ŸKw ƒàù´OÀ'M|úÃþð#âèèè3ëjM€Q-¹ê”°êg¨úWAø�.bvØÐ sZGÜc#ÁyZé:�Cu22Ð壆é÷¨GÆÂs9¾;iŸ€ïÞ½óš>$Ô7§ß÷ Ñê(×êh2»B}®é€ŒJ…ïŒ@w†¬·ØYÚÞ‚¥, �aZbv™=5äxn[€ÔíIã Þq$Äï:P˜ÿ7÷Ì]v Ô”À÷äUø)kô–À¡²]ÿüóÏÇZзO@{� ž×(:v}‰ž2ˆŒôK}˜Ð�k¨@!0�2f4GòøO­ÿá8Ç ·ûP¥+FÚg}“þ¥Ã¤Üv®/Œõ{¿�µ4…@?eôã²tm¾!-½±jàÎ<öùÙöû9øOÀôìÛì4ô„ûõÛ3�}.ƒ ´X  üµ[Ó_°«Ð”0HwÍ §\!P|=ü—éNTHšÓ¶$£Ã–…q½Hžþ1œ×iÄ1úœÒœûtß`Ÿ€'ZðBkâÛ2N´&€}Úƒã¸Éž¦ÎÄŸÃä±sÞˆ«Oe™’3(`&DwË0t³¸[-•»(Œ$ !gIZ&iÒ†¼ëé“Ôázl¸nÿ—©×aç•¢e§@%í^3  ¹ä¡ �o´iÐKêaŸé?(è}Lö&î¾øÍpÜ 6BÙóãúÀ¡Œ€€Ju�2nc²�þƒ7¤…TºÆ•€G¹ùXu¼L„óÑôœíñÎ[?åúò¢w�[ÒÊ´Þz ‘‡r¹…a~ˆ6ôL(ßsÉ}�$Ä>ZðI¯~þïÿý¿³O¯j«€£¼& ÚÑ��€Yò �PW PnnʘªÊX…¤› wZ»äÅ!³ÏºÈ0åÇDù†ðm¸Nt¸¾~uyvEþ, i ÖhQàÉŸþô§ëï¾ûîù‡ÞjZà×ÿø�ÿðš÷ÈÄÝgd�óM3¢‹ü¨O5`„Kö"P@/,¥, �ÇFRí#Û¾~‘×Îadë�'ËLþÖÛpû&§#�Öéè@ ÝËPöݬ àÛL h›€çoÞ¼‰5únÀ©òÞçÛ™øs¸ëB Ññ—�Ñ©ðeLÀQ‘B X ÷LÂ&{úï0Òñ4?.�´' ox4 ×ÕgtUÒPì@¹nàZùµ€5ì0Ò+�'2 üí“5² ç8EíÐÓÖÍ�Y{[º|�ÜÆ¦4eԥЋ€oœ½‰¥Üz–}}˜˜gM?Èëþ ³§|›6T§ ¤Éߺ\OŸ |žüÏÎÎ>ë5ÁX@}¬ àÛÚ+`çŽûPÉ·#&~ ‡éO�€X¹ ʘ€£"…@!°Š@â�q–ô³Õ‘nOºÃÈ!G}#Àžt\[_.—ëW9^ dJ î±ZPÈnÁ¯Yð?ÿçÿiqàs};à­¦~ýË_þâ5m'sœ0žÏÛ™à³à2¤å0}/#ÀÈ• ʨ ¡(V7“/áVGçÑÝÕ·�ɼ cP÷t?a0äzÜWº¤0SH6 ÒÐÿ÷ZÀÁ'¬ �?¤¬öÈk n» œlÙ9=¿Ãmç�ò:†22’[.`Ë/€:üB`Õ€xM¬#³#n�ÖäsZ.C˜zíÛ¸Ÿþ‘äq}­sÿ’ž2ù�ßë× Àí ðJžO _kŸ€Ó�5©ª[ÁLê„iË€XRÈùÐ9Ìq”:ån†§ ‡ÍC€›U¹B`àÚn ××;²ÏƒƒõC˜¸N¤}6Lü–ÎãrM½�,>꺙 ]«{*k´[à‘¦Žþå_þå3e{Ö¸Ê1ywŠ6î|Œ`�x4Àzò—`4Jލ€1( �uF‚ÏÎqŽ;ŸuŽ›ÌMÜH¶ö(ù\Ÿóºì Iç `q › ½xþüù÷2Nþíßþíš5ïß¿gMÀÛnM¤oHRÖ^ÁpŽ·ŸžeP8 G�Ü`¹µ¿elí©¯/6ÙdlrFâúⳎ:“Èm0 à¸ëËmZ—ê¢C{]œiö ø^eò>횀›ƒpeý²o4`È †‰üj¿Œ€~\·B[ÀVœæ:ÈB`3€t["ö‘’Öúœæð�Ìäï××g´õЯnèŸ$<Õï+mGéÚ"àI¬ S·&Àß  „=AÚMÜémž>#Ày\¯ª #©Œ€@bû~ÊXÑsÎ�¦\!Ṗ€‰y^ÙÖÚ=™‡1‘Ã?SyÀmx-@[—ã‰ü©’ÅG¤©ö ØÓ[ñäÏ>¬ øçþçñ·diŸ€]6&šâ2±çl}Féä/# #µ¥á2¶ôÄ×aëŽD ¡.ÃQ¯ÉòÅp[´;Dþ΃Ì>ôWu@Àܯȧô—Ïž=Ó6ߟjŸ€+ÉgÚ'à�¾ðöÿüŸÿ3zûö-d>ôT`BÏ{({¸YF™Dú¤¾,Л¾ÔïŠ!PÀŠ��êN!P,x6ûyk6yÛð婯ϠŒõsð(dË¢À'ò»x¡W¿õêÛÈxÆ>p2ûÈèûvÝÁÍ"í!#àVYµWF@@º?elÇy®£,6¹�pÑ·®O׿qÜäïâ´C&zçEŸu}ýqÞNÒ¹Ø'@’/²&€�|7@þùº5<&Þ9¿õNC:-ëúŒôÅá�PÿÇñ\I…7 �2è|ÞåÆó@]Z«f ¿‡=]«vÿçüOëé­7bÖ·qôvÔÝç!}n¢w�–™ü©Óy]–];»¶nHš˜‘~òÏmßõ¿žëÙßjVõyD€)¶ ~¥Y€~ó›ßœQVkžkàݯ¿þúöÿïÿÍš€yžÐ¿ü—ûFH¥>ç�º…WM|Ám#Celäi­ƒ*6HÜD<ëû¿O×ÖCýn'7ùÐg?¯!àzڶ׃]¾³_À%‹•k´iP¬ ¿ž5k ì>ƒÀ›µiCFÕOäÕ±–*ê|Ámèá=Îaqƒ(WËA€ÿ„ŠËáÜÚ´ÿà´4×kÂö€Gܦ‰½Ã¹}‡s}­Îq¤úİþ¾û¨ØõŽòv€b�`lÜì@Q€€Ðíˆg�þ,縑}F€óqs8úF‡&‹Wl(`Ig‘›LöKjfeªåXËmË>Ÿ³ø¤¯ý¶ yZg -K¼ÕÍ:SÔkŸÉßõSŸ‰ŸôÏu»­Ìyº0ŸÞa$€z»i‚+Õ»+Óß|óͱ¦ŽþÛûoG¼•à5>|˜wM@ÛlŸ@ȾŒ€­ Œ—°�'µ©ØD Yéë« †Þµcð~�¿äkdœýë¿þëõwß}÷LÄÿV¯¾ûë_ÿ:ÒÚ“v®êËÁßhÛ8ÚYFyâé¿ëS�€È†¸26äDÖaÛ€ä›IÓq¤ÃÆ�8Îi‡ràÇu#ñ�ºÉŸ¸ëBšÜ[âoã4åzs³YG¸ñã5 `àR¯ ² p¼&@ëÂ8ùŸÉí� »o£ º4d�–ËÛ0™Ð‘©Üz"PÀzž·êu!°µ@¾�e+3 ¤á,s8ë"“~¨ÏÎa$>ä¡ü<#®é:³nF8F”gWeYÀAþû ?×>±&àÓ§OgŠRÚIª�ƒéód±>e�`Ÿ`P¢mÐñ×Â@ƒ±æ² €5?�÷í~ßMð¾uU¹Bà®Üõú›E Ô—ý]ûCþ¶ âÙ»ÎÜÎ4C Íçò¹-·™Ûé±&@y ˆ~h Ö¨Íxò×ÖëÛGjëúøøøèôôô(­ ¸±‚¾4ÜÆ¿¤Ü„úŒR0ʸÁh£~ËØ¨ÓYSFÆ™ˆ­Ÿ&MÈäɤœË¸>“?ÇH�Ã9_Øí´²/o§S³;ܯ)£§þoÒ>Wß~ûíS}4èkȯ)ȼ%üYqŠö•Co#Àap­‘ÐXcWÀŸ¼êz!P,“²k&n�8o  ŽC¶�Ë÷I×צ éiBilL_Xp%àLú+ÖhŸ€Ã7oÞÄÈ€$zö˜EøCkTtâÕBâvžˆ¸Ž»Œ#³†² €5òªÚdL™Ö÷•™fP׬'ÿ\'ùÝ~ÖV_B€àþgññk…÷X E‚± Pß8Óè@ß>Ê>v™Ä Û;CN·i}­ Ȩ¬Q¸ €9YÜ\Ê-�mÇwˆH–‡øæÖ̵4ízšfÌBÅç©%ëSùX §ý0$!ã—ôKíÇ}�5ZÀš€X¨ø‘ ‚cù‘><”ªš¤î¾µ.HzFc�dkt²ª«…@!ð¸˜ü§ôÐéYæ²C#&zËöh[=qŒ9Fž(þ �žú/4%pòúõë‹îÛ‡Z øž5ÿùŸÿ9zÿþ½I;7‰Oy—H^Ü4C ×ùu¼5pƒÛÊþ–°àSã?ü‚«­ê �Bà‘È>ëîô<�»ß¹Ó¬’9y:òGS]¹=^EÔ:€ ÅY°§ïÊ ˆi­ 8“�׸ZK¾ã–Ó:ÏDYáPF€‘YAYÀNÊ�u¿„¦ªÊB xLðCMçtè|oèˆúVqë-Û Czå³ûh À¾òzMÀÓ9Ö@Üö½‰Ü:ǧ- tž‰Qwí‰\‘xK:üÙ³_R3kS-X”{<ÿ)Dõx |eËwù?·x·!�eÛ%ãf™Ó³Žpã½& æHé¿êúŒ10Ò·Nõ½€“ßÿþ÷ìÀ¾ÇZ"Àš€�9×ä?q­ È'gMÃe¬é‰«nÛ„D‰-ÒÍS_G ã9}Ú·î.}ɤï�‘Ô•GnëÎ}%œãmÞ.#ªÿqµu¡í‚�øá‡s…¯^¾|y¨o¼×'…ßÿýï÷š€¶*âi¾ÉÀ 2H³Á'N}©‘€ÀÇŽ–ðØg Ú/ �¹€,ç ¾¹êj3™T-Ûtâ´�rÓÒ\¾•6 (;Dþ”ñq·ý³ž<� �òìkQàHÀ™ÂöîáááíûÈ8ך€i¯ Y^Q—ê2¢y~ìtœeŒ�e¬ÀI¨.…Àã!0…D£S�3Þ®�[O=9Ÿõ–&û>é<­tßZÙæë‰c°è�{<_ŒÍ‚Vó»Zä¯)�3Þ'¢ïó|k8NÚpIÎyHwŒÊH =f° €ÇD…Ûžv#[ánW×V�E_?&ÀyoÑmç6‡êÒ粄�¯Ob´ÎÇ=KRŽ<ÉÇšÅy ÀúWd“�uš÷?Ó”À©ÖÄ>§§§³Ö´DŸãy€6ršãe˜Ure¬ÒÙ¨¾…À\@ ��¥ åx&Y‡Ég’tØegÉ\yÛ8:÷‰pŸs™¾Q€ik¨w𛕮²»ÊÃ>Ï»z.ÔÞ©<òúÕ«W‡Z ø^Óf¬ ˜Ú %zDÀ¤ïü9#,j$Àè<’,à‘€¯f �Bàî@ Cd7-mVKÔ™=ueׯ�Ö§ÏýkÓs¼Ï ÞÖ@—ë$ž]NËÇ�õÊï) —¸ï+ýRþZýØÕ>Z à5ì0mM@n>‡Mþ/“¾óù;¢¾”`0A–ð W“…@!p QÈ-KjCgGÎÒú,�ß2§Ý%<«�œžÃ´Ñ¤£kÝP³žpŽ7uØàÛOÕÓAÐ Ètk>+í´K'Ï`éâ}º›ÔÉüÑF—à2œ‡9Ge¹–e<0à�Õ7–r…@!p7øßôýwZ]K¼9�4Ç!wâ<åÛ¡ËOýSÆžy|‡]Wn3‡©·'Î Ò�ùÕq­vΕïJá°8´7À¹Öœýîw¿›¶&â6yÝTHÿr€7ùs^Ò‰»Ž­ŒòЮ €‡F¼Ú+ ��E@<Ç;Üw°mñÖÈåz='�óò‘ÞåÙå«� ¿ °Œ�+­à5Á˜øöÛoùvÀÖüøã�ך0¡�I[Å2©�û €ó ñ”Eæü9N¸Œ@x`WÀ^Í…Àã"`òµœ§7óä%äê¼9ܶá<Ö;ŽÌaŒueçx+�ÇúGg½ä®FâÛÊð~Ùå�}X ¾\ËÈk&;rCì­nܬ�¿‰Ÿ|ç<—0Fâae< ÎÕJ!P¬™\ïÚ—�VŽ<�쬼mºãH� aO4ký„R‘V߯�_äkÔðT>JªYöY+pÍ”€ö è[™›øn¥É?“>ywyâ— 0Ê•ðPHe;¾A|e5U|I|íùºQ/©»UíàZà|¶27Ù^/Ž[Ú ŒÃ¤Ù£k]¾†r˜|ÄOQ ë º<ç"û‰5ZxúOÿôO'|;€}p’;ú®@”é~LÞ&öœæ°§ˆ·ù‰—`¤P–ð€`WS…@!ð¸´Ä8OoLÊäÍáieÉG[YNËo’·$oSOé»Îû—Ëv’Ç~¦bM€êç_žj³  I¾p o|Ы‚ÿñ�ða!“v®¦ÏÈ:Êàm ä:F†Ó1×Â@ƒ±$YÀ’€­j �BàñøZb„xïë(›�ê™VŸ I9ÞÈ:â”ïó6|¼–óô�¼ò¬ 8$¿ÂL쨽 …¸Ö·öž={|¡�çŸ>}òz�1awmïÓ‘ŒÞÓÄqÎëËHTÛeËù)`9¸V­…@!°"t÷U½�tïã(Gû.ŸÃ}õ™ðIsØ’:ð&û¾ò_¡‹�U?œÀùv$-ÝŽÚŒéÍ0Mp$}»O@&~“º²M8“˜”1ù[FaÚW_†êœh "wC  €»áµ°Üº¦V×&V´mø¬ÛñnÓýxžsӿɸ�FÜyr¸ï¿kÂ'Íe�&~� ô•�¦£Ý)ž€ñšåÃ�ÊûIÄœÀÙÙÙ¹ö 8Up¤Ù�Yk¦uÇÓ9O�—ð W…@!°~˜|é9á¿ëÑPVdÅžVŸÓl dI%ӌڱ±à6-ïÐoFx;à¥Ë`¨Ý î/^<Ñš€�ìÀ·º5ÎjÙ÷”“uÒe½�e<ÈÕD!P¬'±ÉxG�ë‚”s<ןõ™ü3ñç°ËR§É]KümÜåZ©|{Zk”Æ~W”Wxçàà`_kbŸ€nM@ß·2Ùç&n,¡ògÔ¡Œ€ŒÎ†Ëx@°«©B X? ãÖßç(¨בè­p(ºçµn#€z3ùSÝ=ÄüTý€äŸËó%Aêã ÔÌî®t×'''g2XpÖµCƒö¨r¸Ë2! ÿ>C�r賌‚j·Ö_ÿSÀ×c5ðÇÓu9èÔÌÊVñ—Û–}¾[⢽V7„ö¢úÖsßÌw�4ÿ=Ò¤÷H+àc~¨ýYú|gév‡tèyúw>‡³tØu¸O`ý çò’×wuìcŽP�±U0eUÏÍ{‚§§^p­i€a´§}˜ Û]\; @ÙLþ6¢Nµ_FÀ]ÐÈ;>¹é¥. �B`%€¼Lh[ºƒmÜúi’2­£Hâ'¬'Ý‘¦»ÃÀG§•ðm‘HCÙÖç>ß*0#¯ËµÒõôé[]Ž;œ ×5$)ƒg� †ýùvÀËN'qÍš€X mƒ÷e}z÷îÝÇŸþc€* ,DŽsü&vû·Œ€Û˜,USÀRá­Ê �B`‘L#øiiC}0Y[:$‡€C’އüÐÓ±³†t:‡©#»wž,sÞ¦ùpÎïp+§åËy1rH›æ”W6ÀÞSí@žÈ3ŒÀ‡ƒ0HÜ•�(×2`¿=0 ´FnÒʘ�ÑÂrL^Å «¶** �B`9@r&EKZ"ü5Îäé: þl˜ü ðS´óR�¾­§¯_9/e\_.Û†Û2Ä[�ër?w>úër}ýòñ I·‡à¥ò7Ø-ð@i<þ_ëË�cà�ŽŽ.4Rp¬tÏ�f¯`8dzt²Œ€ŒÆÃe,Üuªš›B¹B`Uh¯ÇYdÕöÛ$—%yr½[:�¸‰Ïíb`˜Xs·�Ó\i®Ãù�¤›œÛrNw~òÚ·er¼/,â÷Ù鮋~q\í±ºo”M€…|$µŠ]Ÿ¨¯�£f›‡ttz×㹬u–2å,ÑÏõ;l½óZf=:ë§…]&×í¶Ý7Ò¨£¯ÿèÐ4Sßtǯ";×*ë‚×Ú'à@S%õí€OoÞ¼Ú'ÀÍð�oÂ}£äÏùl D=Ñ:SnnʘªÊX«ŽÄ•9€¸=}'lç°ÓÛx®ÇaK×ÑÆÑ»ž¾4ÒÑç6& çò}Òy[iâ·~ZÜi°DŸÃ7½ùÒÇ;ÉVÁlLŸ¨,ñp^ ýbAû1J�÷ 0ágÙUÂ$Žœe”�‘»c¸ €;VÙ �B`=€ ³sÜ$IšÃCib´q<ýã¬k¥3Zïx–9-·IÇsغ,§…Û4â}¢g!£½æí#L^Ò�¹/„éç•mÏû¼T~ö ÂN&m>!|®ºó>Q Uè\£rœz|­ëŠLˆ2&à˜?RÀüX­tNþ°å �Bà�ü ì¸%¹¬’ÎsÃk7õú׺YÒù³t™ÜÒsÜáEHêh=äOãÝ÷�¼&ÒœžõÊËzö àË�8e»>‘?Ç ŒÒcM€²I¯žjM€–Œ×D9Ò$ׯ1°FlX8kÎWF€Q¹ƒ,à`UÖB X/ -;‡‘}Þ¤HšÃ-vÄæ§à¨'ë(ë¸ÛͲM#ë¬[¤¤®ÖÓ¼×.Ðâ>î¾¾y„€rÉí©Ü3­ ø�ÚÂ@ ¨*5W O þüù“Þ Øûå—_X™g'¯ú˜!#€2®‡2Ó‡Z:S\SÀ©¤B Ø :2ºE‚資ø A|6¬³¤L¶Î²9Ò†\Nsx‘’º²§�=:ÞpàxˆCì{ÎK�õ–ΣªøvÀxM€ô¼-«Ê«+;Ú`käÛ5tÇnLâVHZ×h½³–`$æ�eÌRe) �õCrÂeÙ†‰÷y2´t=&}$åw8Ëhü?Ôáö-©Ûžºé?„ïãà˜18îÖ»ër¿ºzXð÷LyØ$ˆ5ìx ùK\*DÝ­ ð>è†<Õâœî)Ë›Ô/¿Q-#à .SCeL…guõZ�ά`O ŸÅžaœ¯ d¶ÎDÇ1ÛûØ�C–9O¦œóºŽ»J÷“rßGö•A×zÚ¡Ï�?Îå"Òý ËÇEܘè\¬ P˜�QбÊ0ÿï§ýX ©€3Òµ`_þ”�5%�/8‡‘ö †£“íÍ�<¤“µ~g!PÀ,„*½(ÖÉ®#§ 9?:œ=ùÑCŠHë‘8Çû‘¡çÇeÛ$êïsÖßGö•A—õŽ[YçpîxôäñšãÙM!À-ÏuÌßuù”mo§kãúåË—¬ ø¬5ŸºoÜ;IøÖQEën¬•­Éß@–AТ5/`˜R…Àæ `2Cf¢3i™Ð-9rÂä‡ð[׿±¾OF¡9h«uYçð4™Ór˜z‰gß§Ëé9L^· ÒÁ‡D�Ä �d¾¼&@ñ ù+M#ì° Py®%½Oi­—*tH;òä©€ iv6 /Ù P@HE �B`³€¨pH{ˆ*‡M^&zÒLü„M~Nwœz³.Ç ÷9ç§Þi.§;<�$Ï´|NÏy²®/L?}ÌÆŠ|àˆÇ¯.�¹Føl"_ä;<µóÁ Å Ç>Z è}Lþ‘Fº<®O’ÇZ:q‡)_n�2€Y¶Ú¾e·³*õoÛñ® î÷íDzÏdrGîSÆÇ�Ä·Äoã©5;ç§ÍÖ“Ï}™%s�w »ß.“ãg9¦|›6Oœ<öÔaÜgç<–à–Šc°. žü)/ý‘âÌÿ_(ÌcMÀoûÛSM\±@{ìh߀öâ˜φ€»Fþ #@mÖ+�F'É2, �ÕE@÷ð1ñæ°{l�s8K“~–&r—#NºŸj�ŽÌaÚŠ“ÖçœßmõåAצç¸ÃYö…s=¤Û[ß–qzŸ<ÐgÜr~—áøxSÀy1´ ¯ >Wø;•�Ï+=HY_>}útW¯²&KìZF@€Ð[Ï!dGþìl #LʈäÊH`T°(VÝÃÇ„Û×S§#³Ï¤ER‚¨ì©+ç7ñ“×y,ÉKxšŒÄž—smNs}éÖe™ÃÔçx£³Ÿ¥w>׃‹,�‡ºp9¾Æ™m†õjážâÏÉ#Ç«‚|N§¤ Ö\Æš­ <ç³ÂdìœÉ¿�S™}^�ó&OF%É2, �ÕGqDGsØ=·‰Cf1µ>×ç¼è²§.Çî“èúœÛhÓÜÏVïøPºûI¾6ÜWÖy\_–m¸/ŽÜ�C>§ÛÈ¢/"ù}¥aüYºca~¦ôkv TüRûœÉ¸’]p¦µ; HS(’Cï¬åéwé­.U±�Á2¶ó¼×Qk�D±"û\&"‡MRH“?’ôLþ„[¢oã´‰.ˈôü8_OR¨†ŽÁùûÒ­›%©£/Ï,]N'<ä©=ºiú6ÝqK°s¸í¸‹øw0ä^ȳ'À�ôOHS¹K¦t®Y¨ò×oß¾m÷ €èýÚ$nÏÉ7Éß\á7ú2® €ê·(ÖˆrEân ÈqäƒpìHÏä�€#Ÿ½ãÓ$i}Ž:¦9÷(O›>·~HRÿPúœ–Ã.7-�Ó²l�ã ­1x+€×_ɳO€Fü/Ï¿ù曥Ÿ«,¯žË8~ÿþ},T€ää˜ô¿±ônô™üÛ0ùÑ!·Þ•°¥—Òr…À& Àµ ±øšv8ë CF¤YúØIƒðýäoi²Bæ0åÚ¸ëÊÒy²î>aW.Ûê’”uZ[—e·yI›'Ýù��7륃°Yx ¥(k>)Ìš€FDül|©7X€q°«ðŽŒ‚Lþ„c¤@’66ÑKUd}® €>TJWk…ÄbÂuØdƒÞaä ÷|9<§¡Ïäïú�9LIÇÛð—ZoB9_›6Oœ¾õ¹Vï¸%e¶ÌºvúМžÓút9}(L߆\›–ã³Âó¦;_Ÿ´Žþ9ÜJðFgßæÙÇÇ�ôdÏÆAZø÷ò—ÜñïKBÔçŸ>}:á_H’ÿJo œWÄoO^“=ÀàúÒút}e­£_Ó\›>-žÓ¶¤�Ya§I÷Ó鮓xës¸Ë1 °#²?©3ÀÛ±6@i,8~ýúõ'íxªº®´U0‹N•æ×MüC ‹üBŸ+ •5Ôå?ßvÿÑ»¼éøÝ•€ý„Ìè@{¾Úã#�ó!ímÐ:ÈI~{ÒF:že({~œßImÜúY’>Msmú¼ñœ/‡i+ǶÌéY—õ„q¤go]’þ4päÓ»êܰcà¡Â ñÔèÀG‘þgax¡áÿké/4p¬46 "�G�Ä-{E#~s‰•#PÀŠ …À&!Ùîž8CeRF’†ÌžLŽ;œ%áÖ‘?»6î´!½Ó‘¹ïYïp›>o|V¾¶íœßaK÷¥-ã¸ó!vš¥Ó87ØÒó!v ä+‚¼ðƒôçZ0ñSÏÙ_ÿú×�Jc·@?“>F'!ë|R¾\ iD@õmõ~eèj)W›�€îóq€6LÂÈìɔӷÎqä�ËyÉÓÆ‡Ê éÝ÷yÓÛü9î°¥ûæ¸ÛÈñ¡°ó"sž·Þ²MCߥíˆèuzb¯2 ðJòŒÅ‚Z€�p¦·>Êàí�üäïp&œx¼ �èBG·•® €­<íuÐ…Àæ#�I'-$ñ‘Îð?a!ù’¹®v~ëfÅ�oš:—iÓ§Å�fI¹�YOÚ¬8yì¦åÍim˜8ÞįúØ)� žJ÷Jä?Òú€'Ò]3ðÝw߽ѬðÀ¥Â¾Ÿü[òWÒ-#`¬Sû[; P—Á :þÛì¶ýø}îÏL,‹8–¶ÿ³ê'?yÚrôÅií¿ÜO×oIZç¼·ém|ž:\W–}Ç0-½/¿u–¹|_¸/_Ÿ.—íKou9N8ÅŒ{ž×ì+ŽÀþ�ý±Þx¥‘€g2 Ø;�‰ß#–6üôïßTóh@>„­ —°u§¼¸Ø\ ¯Ã±Ü:hž:Ékï Ä]Æuå4‡ûd›?ç™––óÝ%ì~ºLoõCéÎg9”oHïrYöåÍ:‡[IÒaðmÈþZÃÿOÅûlÌÎ��?dŸ�€LöCaWÀ õ[‚€ ÅDnâµ>&:Ò�ÇeœÇzÇ‘}ºœÞ†ï›¿¯¿mÝ9>-NËá\>‡çÉ“óçð´²9ÍaK×A\’†àþçÛa( gá3ùûÉ?˾Qê´ `¹2ê( ��Di Ýê4§›¤-�¯�ÏÒ;ý¾r¨½YõÝðåp®6½�·%g¥·ùç�·õæxVtg_OüH‰½§âþ'àÃAÈ„ïðÐÓ?]tZ6¶Ú((`Þ+÷+òé¾UºOw+Ó)6íxÖú•ìꢯ‡–©?ëÚöœæ|YfÀ²ž2Ž;ñÖ9_«_TÜ}¿k}}}mëhó´ñ6ÿ2âm›q¦v´NƒWÇ“¿òîIg²o%' ÒÞ‡@ÜÄï°¥ól�,`ɧ¼½¸—Ü\U_l ü·†È2§9ìÿ¢Ëd}&u뇀t=Cé_£ÏýøšzúÊõ{HßWÇ¢umÛm<·'l0X±ßKú&ÿ,]•Iß2ôjw+ß(À—Åä´‹y ÍU•…ÀÖ!ÐþÇ P;§eR »Œ¥Ë:ŽÌugý"Ã}íæúçéì:r}9|ßróô‰vfÕ?+�:xúoF2É÷…)†sÚ— äFï4vÜ:#  €/ÁBCó\Ì m°*+ �[Cø@âÿ¢Éß„ÕêgÁçü³ò-+Ýý_VýÔ{×c\TŸæiWmAÐ}#&÷VÆ!qXi}FÁ@öÍR—ð@çsž ü�º2W3ëÖß¹ª2­-³®GˆÈ®/¯‰Ê’¼.Ó—ßum£œ�Œå¢qr,Õ–É?¤ÚËÃþyJ wÅ:‡- .Ãð@IDAT¿\0¹Ä–…ËØ²^‡[l#‰ k^âw¾UÁËd8ÔŸEôwV¹mcšuËëm˜È³!`]–t‰xŸC¿Õ†@}—Eé �B`ã0aµ$7Dœm¾Ud•ú; £¡¾ÞK“¿d~âÏd߆iÆäï47M|«É ÊðåP²(6ù@’Är»÷ ¯Sûð¾ïqSÎF€‚&ô!IvÒp–m8·ù§ €-9û³n[Cæ†"0ëúÎO¢³ò"—™7¿Ë=–\µþ.º?ª¯þ"ë9™ü}jÐmýÓ?`0”R®( �B A`]ˆßÝ^µþ.«?:æ>™ðsØ0•LÔ@£‚…@!PdîJb~êÍuýuð…À0Aþ<ùË_ŠðÏÎÎFg''£SùKáLú�Œ2JÐcÚhOŸnÇïv’O¹¿ù¤ûMñ–ì‰�ë¸ã(ÁM�õ»ÉèÚÈDž �‚ —ʳUú2¶êt×ÁwC2ÆcœË89>}þ<ºPX ñ(†ÄEÞ›ÀH_pí?y2Ú?8y 0SJÇ8Ðc>9=¬e³1`C ë¢@ýl ÙwƒK_ˆ¿Óg2Ïá­ÁgZÀ"P\B›~ãÛôã[Â%±Ô*ƒ¼;²‡Ð!üK†üEôÈ3ÿñÇ�c?6’À�šzpaŽö0$ðÏž�ž> ‰q°ÇÔ€<£€kÂ>*™ò³j×Ϭþ—)‡´Ô¤Uë_ÛŸyðQž–è‰[çð�\*¾ëZyëzæªß…Àà̼>Ä�d¨ÿD„oöáÃèLñsyäÕééh·#íÎ2î õÃØéÛï=>:xùòÆ¿z5:Pü‰Œ�ð2 )€ZO}™,rxÜh¶�#€c·°58,ê@ËX’UO!°Æ@´�¿úk˜ÿÓ›7£�?ÿ<ú$ú믣+W�¿ä@Ç;63 34Ñ?É/¢ß{ñb´ÿÝwá$¿ývôL†Àóo¾ c!�ÄÂÁd Ø0ù[®1ÜÕõ¯CÀOù_WK•®oÔ5PB@Ä+ýµ¸ïLä~üéÓèÃ/¿ŒÞþõ¯£·ùËèTFÀŽˆ÷ýûÑ.Ò€Šî%!kܵ €+ÿµŒäŽˆ~ÿ7¿íÿðÃh_Ó Ï4µÀš¦˜ØëFüv$Ÿ½›(ò7%…@=ùåeP#_ à<ÅûnZ}ºyêZ•<ëÞÿUÁñ±úa¢vû<ýǰ¿žü!žú?ÿøãèèÿÿío£3Å÷ôô¿¯4¤^ ˆ»/t%ï;ñ ý˱_Aþšë¿d$àèhtÕ­)ØSÙk…÷dì‰è!ÿ+ù- ®±ì1Âh`açÖå:¼k?Ûóãã]–œÕ¿e÷§mÙí- Çu«· €%œ±|1çðšª* �¯BÀ7Zú�ŠØ?2ì¯'ÿO"ÿã¿ÿ}t ñ¿{7zùëÉ}_äÄ­Vyò�iI €1ùîFx]ƒ@«ýF;l"¤õ¼N¨6wex�—Q‡C­À�´>` ùcð¿òËRÍ”+ �; PÀÀš'«‡0É[7¦y«<�…@�¿Èy)bgÁOþ ûóä¡ðåO?�öÞ¾�'È_¤½Ï“;×·|68ޱ@�"wȾ¤â"zÖ\Ș8!.ý¹ÈüLaÖPž�v€ºýBæÿYN#\®(æC  €ùpºs.߬î\° ˆä�gñŸ €wšó?Ò°?OþAþ2öxú‘È÷¹Ë�8u²¦ È_£ñJ¡žú¯EþŒ\h*�<�ÿ‰âÚU âlÄ(@Ý«�yèßS–´[ÿ5P(WÜ�2îŽÙ½J¬úMjÕûw/ЫР&èñk"x^õcµ? þ˜ógØODÍÐÿOÿªÍÞÃÿhŠ'Œyò^ÈÀa¢ýK õ_jà¹Ö`<�ü?Óë‚ìñûIš@]v¾Ž-­Ÿ%s³ò>Dú¬þ?tW­?q¶¡�2¶á,×1 ûúŸkH>vøÙóŽ?Oè¬öß—ôœ?Oü&~Ë<€€·ƒŽ™#@²ûj@�ŒHw¡:¯4"¯ʸùcœÉ(8ÓT@l,ÃÀ®Ïà8òhyg‘•ë+Yl;elûPÇ¿•ðe¿ØáOÛûžèIBæU¿xòOsþ&~$”Œ‡ä=`ÀÏâH Èß‚É_*%hÏ—jóROúç"úsíp.ò?Õ» `ºa$C€=úÈâÇå´PÔO!PÌ…@sÁT™ �ÍBÀ#ãWÿDÄcÀ#"ØxúGêðMþ–&&�"lò¿¡éi8^²&@kâÃB"ÿ³×¯cÛá=&8È�­‚ý”ßÊ<@W#Cý3(`&D뙡n‚ÓÏÛ¶ácr4*ÄÇ#zâ>Õûÿç’× Ø1󮾟ô‡$Äï4ŒH<éxë,ƒÈÕF”c± žø/…P?øîÀ®ŒÈŸý®dàòÓ~KþÄ9¯í±RnÖùž•ÞW'õ>–[µþ¶ýY5¼ë<­z»e¬úªþK@€)¯`ÈýT¤Ë«€×ZÀö¾&ph·ÏCüÜ<ð|á�<&w$¤ÏƒmôÕ±«>ìª=êÚá_Ë_ÊŸËÙ— òg“ åƒP�8ŒÇ&nß’QªŸB ¸…@· )E!°Ù˜<zg ä&#àBá+éø¸Oaç!HâÒùl@ÓþÇ ŽŸ¨“6ôäO=|[ ‘?ÀF€žü/ÙI�| ‰øUl7ñgIz P®F  €al*¥Ø8 Iœ†Ð�@ÀŒ°[ßY+&§qóÀx*‘Cò&üóÆp™±Ä �ÎØˆ¶Eúl€ä…ÈŸQ žüýô¯ª¦¿��|„ˉr…@?eôã²òÚM¿±múñ=ö9BªŒ° ë )o‘=äßz9ÄÏMÄFy1˜ ñÖE}4žD=åã� Oá‰ãÕ'ú;Ë» òáy ݵ.÷Á}zh9«¿Ëîßc·ÿÐx¯k{ü?Ë…À!0¾ùwD)f r�èõ†boJ´q´9ý&×ô_ú”=åø¬p´™Ê¸5Ê•[?fëwD«Ùã2Vó¼T¯ �¥"„ª†ˆu¨ñ–N3ùç0åÛ¼Cufý¸? û'Bë½Mw<×]áõB Œ€åŸ¯2–�qµP¬�â„Ë+•50‘<+’ ?— Ϭ/÷‡pÏÐ?u˜ÜûdNŸÕ^¥ÛŽ@­XÑ+`Ý­ßuïÿŠ^‹í–Þ™ge=_ÞcÛ]öãgcOûve‰Í‘œÿ:¯Ë;Ÿe,Ûª¹XYÚ€ónàB¤Û7`â¶€q`#’GOg#€<}FDÔå‘ÿeGþãŒN` 0õu@ÔŸ†Ï[rpiãÁ’²åÖ�:Ë;ge,ÛqÍ}pŸn\`ëÖß„ðQºdB¤qÂcO\$óî"[†Þ!`Èø‚°ÈwOùíâ÷S¾ÉÞ:HÞ:ÃAÚ6âi_q jûRí^éÀ|`G_Üѧ€wf ¦Ò@TªŸ|#M²Ц‘5“?a�X2âÀ[1€ ¿‹À€ôŒ`L¼Øô¡¢…@!ðu”ðuøÍ]zÕ ‚UëÏÜ@>RÆUÇ ‚ÏŽ8$Ïp?ž�êœi¿ÿð éÃ;>¾ñ Ö“þ©FNTÉ©¦âu<åÛS™}=�{ŽßÄŽqñ£·T0\ˆ×ý¤½áã=Õp©áþëo¾íBþ¯_�4°Ï@· †þ•¿Å½�Ó`«kã}yÐMs-žÓò>DZß1åv—ÝßÇn?k…‡@‹Ã²j*ˆ È_d~Þ‘þ¹HüX_×û Ñãõùß�’ø�<ýða4’^–Bþž¾÷!mÖHÑCþ?‹ùl˜üÛAzòòš{ Äë~z¢gÈÿBäÿ›ßŒö~øa´ûý÷£'2µ€ùæþ!êlë•j‚ð[brÜ’üå �B �2úq)m!°v˜ümœŠô!þc‘ü'}ò÷í§O£wzêGñë©ÿ£Œƒ�’—Ò=•p(àPäûò—g�à^GÆAêB%“?€�€<įrñž¿Ýóý<ù3ì¿«'þ=òO04p¨ùÿÞHLÛ߄גü¬xS¼¢…ÀÖ#PÀÖ_À¦ ` †ü5p*b?ñùü8úùýûÑO�+²ÿ¤<ø�ò»2¾‘î[߈l`¸~Ož›ôË“¿ ¿•¦gÀˆ×ý4¯-âgÁßµÈG¤Oþx† Ãà@Sûò1ü?ƒð‹ì7媭ãxLÊxLô—Øv{ƒ\bS+Qõ¦/äžñøZsüÌ÷‹Äò¿è$OþÌñìæùÅÐ0?Fò�ÿHe�T¹¯ü2ž3€A Æbž†îÙ¡/öëW^ Ç_êƒèƒüEØñ-þµŒv÷‹­…EèW”×Óý®æúãu?É=æüå´ðï@iìFÈ¢¿ñÊêU�ö>ö6޾=÷}y\~^ÙÖ9«\{~få_tú¬þ.»�Ýþ¢ñÜ–úÊØ–3]ǹ1p3g�sû�>’§}æ÷�DäÈO’õDCý’ïñ x/ý;•ù¬:Îä/äµh 6ü9ñ?Q]Oå=pÀŠ|ó¾t»*^á奸Ø[€'}‘ø¥Vñ³­0›û°—ý wÞ‡ì;¨'~žú÷•Æ®&í>ɉËú¾xÖ¶›ELÎW²ØFÊØÆ³^Ǽ¶ŒIWÌŠþ‘}Ìñ‹àßusüÌóCøÌíPä'ùcù#$e=r`€Q ‘üSåy*ùDOòÌɳ�4¦ ve@°€ñˆØP@eÙB˜í„Ï4—.Ï\ÿH¤?’ÉSþ�¼çÿTòPž§þñ¢?µ#–ÝÓ?'ª�ü[½‰>絎¼å �Bà6eÜÆ¤4…ÀJ"`òG2p¡‹è?w û~z÷nbŽÿƒH›ùý�"ócå§Llþ#Ilîƒßí¼ €ÃΈùd`ì© «óc êd*€·Äþ±ÒàL¤~"ò?Õ¾K^ï“Àæ>H �gÌñkDáPžp|�POÿ»3FLê4çp¹[ç<ä/WÔ0ŒÍJ§øf·Ò�œÒ¹uïÿ”C»W„ܺLøžç‡Ä™ïgŽÿ=OüšÛG2Çï~Hæø?)ïgùOª›á~œ[aÞÞûü{Ÿ_Ù‹ �ôÎ�>Ÿ Æï«ü�tL`0ɪñÚ �=¾((Â?ÒÜþ‹üDüá1dD\ˆèY'[ü"yÚ—ôf?&î>IßûôC:çG>„£Ó\ßù�–Ñimÿº?�Ýþ¢ñÜ”úÊØ”3YDZQļºˆÂgë^æúOò×Ó9’ùý7"þ7"þ_%ßj€¡ˆÿ½òBþÇ"ê3¡ÂB=œÉÿ&vG‡ç}ÿc=™Ðý¾Êž¨llÊý €'Ò=W{vêÓâƒÑŽü.Rù.UöL+ýODøg�?¯û©ì®ÈÿZuójá©ÏõóZ ýÞKþ,ù7ù¿Ë@~{~#jyˆü!ÞðjÉSù‰HZ¬:€ Eê»zrß“|¡:¹!3 À(À�†îµa áóÊàH#Œ‹üˆòÔ!ÏP?F #&lÌCñIbIêÆµDîø,Ù–uY®(ú( —G×ú†øè™³ëÖß9kaÙLì¹Btá¥ôGzbe½žüÏô"R��ü$yúÏ;ùý"#àGùŸ4ð ›ýhç'j1iÄÇ?m\m3Ÿ�ã"fî_/â�®X ‡ ò/¿VŸžÉ¿P¾OïŒtþœá=ù3@˜7øžÀ.^y0(ÂPyä)u¨M¾3F€â&yÇa_WN›&)‡sž›ØMÜáÇ’>Ž¡öû®�¡¼‹Ð?v»ýE`¸ u”° g±Žaíà†Ï~¾ž®êç]þð"sˆŸ½úòŸØ·_†ïö3×ÿVy>+o¼Ë/Æä4ÔÞ"dòÄî�}®�Ž�É`Qaìó¯8ïø_«ßÇ"ýc^”äSÂŒ`L0�@¿ØEãáHž‘FÂ�ÌK�›0,)Òº¶éÓò·å+¾ºÔy\ι)`9¸V­…À �¿Ÿô!~vïcß~æöí?($�”ÿHºˆ·d®Ï�ÿ]ÉŸñ�±Ç ·"ežÆ1 oVëCà¬Ò‡¼O5"ÀÎ�|+€Ñ‚ØèG}gtàTOü¼È›ÿ0ç�Á”õ1F„¤>9‹!ê¢M·?ËPÑ u“}–¤á¬»‰Õï:#À¹ôè£Nå‹@‹Å³j+¦"à›YŒtOþlèŸçe~¿ó¿jxŸ¡}û"ÿå?ÙòNÿ9eå/EȘÚp›¨rñÔù–ƒˆÃàFkò—d4 žÞP>vÄCFqÖœk$`< ¼Aæ]�8UÜ#�? i“¼á £ë\&ô¬wºeÎg]ÉõG`Ú9_ÿ£{Ü#(àðﻀûtЕ¹›XõþÍ} �˜ÑdO I†üí!}væóú©4el ‘‰o`0º@š ’|„õÿ0å �%!PÀ€õMËr MT•k€D^¤É<¿‡ù?ê ÿ�Èžwù™ßçÓ¼,ìcnŸwù‘ÇŒ¨Ì †CgÄ(BWç½â—3ÙZòô„oòïññ�ã �wø`Ï€˜�…ìÉ�‘ )æýÃxP¾›RQ4~ò=` £ ¼ˆ@�aXHfçÿ‘eN«p!PÜ�2î�ÝÔ’u³š Ïv$B¶<1cˆÈùhÏ‘ÿ/oߎ~ÑPÿÏÝ¿tﻡ~ˆÿ½òBþ¬ò‡ø!¸Çtat$„/òÎOÿC7ó1ùÓyÊwÃXvuÎsl`À"ÀØYP˜ìÊs3Â`d$ˆ]ñÖ"Vë-U´\!PÌ@  €Uòv#D$Bº�³{sü¼Î—¿Î÷NOülàÃðþG‘=ž=ûy§?<åTò�}û%ÚåáÿlÄj~žþmˆÄû\KþˆòÉëû*Iº±Ða�ù¿TÖ�Ž.z§ªÆA§[2ã(¶�2¶ü¨ÃF"±gà Bg(Ÿ9~ ëÿ¤×úìYè÷Q$ÿA á3Äûõ{ž_MQßcŽ@ïÌîÍwOññôßMÄZ€# �RZ¼ H?eþ§Þie#ÇÍ� b±  páSÃ|*Üw¥µ#ä'mÈå4Âóög¨¾Ò›Œ@kzv×íÆ¶jýÍDáK]x)üµ>ˆŸþÌñ³Gÿ{æó%ÕÂ>“?’/÷}RÞÏò|.—•í¸1UÍIŒQh?]û㪇ôÇ^ý‰áÿŽÄƒø?Á÷õ�òÄ«~"ü�”§.ç·7ÜÀðÆ@<ñóÅæ@êk¬‘ ÏòÙðyŸ+Ò;¯âáœgÜ''< œÕ¶ûøP]zìþ´í?ôñ?ÎëÖNëvƪ¿KA€~ óCø�¿ßågeÿ)Cûzòçþ7"<«üy�â¯×ù öÉg^ÛOøcò_J�ïViKüãy{Hß¾!o÷?$$Ùó¤¯é‚üÞ”§;MùY='úå½xú?‘ÇCùx3Br¯|&ú>I[YßéåÖÎ_ Ë?_e,ãjaÅâ�ÇB?‘y|¸‡y|†ûå‘|�ïG‘þO�‡ü™ßç‹~G*yñÔêE~&ÏG?tõ ’Å…‘›Ì!ôLþ8>¹ñq¸ «ýýÞ?a†ÿ{Ê¥*zƒÔ‹÷{ÿ¼ˆñ„p$¨ó�aùÇÛ’¸Lò·zÇ‘8F*Ê­e,ÿœ•°|Œ«…FÀOH†úyò�¹~=Ùé¿ë†üñÿÍ^ºšðü>2Ftœ<ÕŽIsŽ;è\ÇWŸ¸±zø’õh@tWimÿ‰‡ÑÀ°¿H?ïüe1îá<€dÞŸi )vF|ª:÷$Ÿ¨6LøYÒl_<Œ’{ô©ŠÛ„@+z¶WýÖö�›pë|cÖzò&M¼É£›¾ ¥­Ÿì}º¦šÁ¨ûç>a‹` }†üÏDüÌóóD�¯òé3çÿ³ü?dü¤'öïÿ¤iÜø8Zlãƒ=[bBwN‚ôÕLƘ…c⧯=ý娯ÇG7•‡2lþïýwÆCè{ÊSd–sýLðe@žþ?IHòôÿDÞ¯rÎbM€¤Ïã4IÛ_sÍP~YnV¿|½.«ý¶Þ¶?Ën¿m¯íϲÛoÛÛÖxÛzæ—|Ü|'æÓ;‚�ùuÂöÜÌÝ‘O¤{zºÜgx™§LÅqùF‘Ã.ÚæÉú†äí!}>Ðãù}$Äÿ‘…|"dx ýÇë}’ï¥{«´#?O«8“Wng•ÂAüÎî<†íEâ<ý‡ŸAÞqœäé?Ê;<£ì¼x0 Àû¼—ßÕùÚWL¼�ì#êÎ@çzqúеC™r«�@�¿åœ£2–ƒëV×ÊM7ž°!ZæÔ!MK…/å!ãp�@úOÇž¸ÿôCÒ ÓžóX×JÚƒô£ê˩ȜM|˜ßÇÇÞý�¼Â,ìûHºŒ‚±WŸ™ëÇÇ»üm«¬yòǃ/R:Œƒy\”§ס°*˜§èÌŒ êèŒ ãý58`0ÿÏyc €ÂûDmÄ éùxç´õ´ÛêrükúUe�|}ydðñ{µ=(à‘Îc¾¨© S›�Õ¿öÃë"Ìâ‡(!Zix=Q#ÃPø\þJdÌÍ>œäþ“'£‹/F/_ŽÎ%40~ÒÙÄGgôԺׅ}#p?‘ô G˜'F ŠðêÛ÷2·Ï¾žã÷;ýÌñ³‘ÏõÑþ£úÇ�´}7^õw�| ¯rHXÊH/ ÇÃùÒs¿æ8@3íòD¾®¼ëB·G;¼Þ`ÍÓ?q .Œ‚ØÁPÒ;ækp(LßòuAçëæ&vû×en§<Œæ±û÷Øí? ÊÕJp Ìú3=@Þ7Èxª†ôE°1ÌÏÓ=�¡ž‰XÏ´bOüRiø •ËnOÀ©Èÿò—Ü{öl´+#`÷éÓ�û’‡Ò"å10®!"ŠWù:Âçó¼Þ¯?öìWœE~ û3Ç�dÈŸ§þ�ŒèxL<kë v:�q�Ÿøî0ë£ðñQ+áØý¯+gòwŸƒ¯Å(ÚP%�?Wž…��¿_¯“‡€0� âã‘úÉ5»¨þRw¹B`Ý(`ÉgpSo8ÜLyºöœú™HýT„¢¡ôˆ_;å�½}{ãß½]ȸVü•Èöš€ävdìŠüwEþc‰!Ðé_½½�ùÍ71$ÔPÆØÄÅ0Ìí«?|�ïƒ æöù8ž×øx�¼g¿òŸ¨Oã!_Œ"¨�®3uwõƒÂ&0éK; ƒð79Ç¿>^H?Â]>p¦,£/1C�uŒ+»Cò§¯xˆLþŒàжüž|ô ©CüÈñ¿ÈÒgŽ?_enö“Ô¹<—[³°1AÇtJGþ¡#Lëäéq>/¤/bïÿž&&TÆÙS-1 ó€Àh £<õïËsnîBü4×…$×K¹B ¸A  €ºVíÆs×þøj¸<ìOþ"Õc‘ìѯ¿ŽŽDúŸåOåÏå/:y-ã`GOÝ»òÈ‘®I&nþšß¿|þ|t%�ÉØQïêé}W’Qƒ'"é'2Y ¹Ÿd1 ŽX¤Ç¨„ò1ÄÿFäÿ äßžßGΜã÷�®‰4–înœ_žÐ;-Ü®…qHÂèåZ:œ¨²T>ðÍD`o"µtÃ_!ã:PyO°ÓëØ�O)s¾1Ø#à.€¯Ý»\ówÉË!» ÂáfõoÙýiÛ_v{�é6¶QÀ6žõ¯=fÝ€YÄÇ|?ÃþŸEîÇ"ÿ“�É_È_i`G¼'¿#×{w£] ³Cü<ÉÙ9ÄSu^*Oàºéë‚ѵŒ€K‘vìÇ€ HBð†6ÄyGÿXž¡}Þãg¿~ü¯òïU~ãæø b�„à!û+‘>{÷ƒ£'Ö�Ÿü}.,UWœ ,å�ƒ’Þû?0wÜÉÿ¦Â®mE…áÉŸïð�…Ú’do6âúð¢@ȧõÔgÆ*FŒIª%/·]²Ø6ÊXÂ÷ Ær MÇsxÿ“‹A¿jÙFÊXðY÷ ÆrÁÕ?nuEw³…¤Ç#�À“?äñÿïh$»¹í)_x…ybãé?žÜt$ù†;Bú�¿Èš7Î!-ÝìñE8“!ù�´ðP:ĆdƒžŸe,°e/26óÑh«úñ<5òd¹1süWCÂ'HŸ·%0Dâ1²¢2<¿öÝ9áÉ:Î+zŒÎQg@ø±÷¿êˆí_æµík" õ'F$öÇxƵ ‰1}¤¯�ŸEþeÈr…@B  €Æ&}“ææÉP*�?Õö©†þOº¡žþ¯´à�¡ÈGi¢çž0ÄÃs&ÒÎ7|ȉ�¿pã'/ù #žöt§]Ê`´áBS GšÓ‡˜x½’dnû3€ÒÁÀÐèÄ‘ú^õ²ˆlÓ]�·°bÞ’°¹ö€_3H^y0ÒbX|Ð+Ãÿ*;€���AþÝùXôõ¥&'×çLËEãúÁx*ÿ\ž…�qô×Fe&÷ia7Bžì¾öxf•oÛËm/#ÜögÙí·íµÇ´ìöÛö*>ėÓÖçâÌ»þ±£ŸžÐ=ìò�ŒÎþú×ÑÅßÿ>1ï/ÞCò&ÿy nú?2È_Ä#y®§ö‰¿`Z@ÆÅ…ˆèR„t©4$_�ÿ«Ÿÿ©t�E¬'PÙ�v™ø!iÈ[ãh,ØâÇ#1‰B¦a I§ŽŽøÇÛwä–üCYˆÉc@þ,åUÎ -=üÿXÒWF,ù4ð+y €YûпLö}aòØÇKÛ‚@kz¦ú¦ÅM4è‰àýaæ]ʸÖhÀH¤ ™@ô¿Éßa¤Ó<9Ûs£çÉ�ãøâ©’p!":•î³þ�ÈÿƒÂ§êK2¼Và¦tT0nbàË3lwtÂcüŠ#àÖ�Äh€£JÀŽáøº €øw„/† /£œêˆ•ÿ’ñV€ôqíq|1ÔÉSÉx T}cº'F0Rg* �ä§éâÆ@+0«=úºL·jí/ûx—‰å&Õ]À&�Í% d^7*$s®ñTßIšŽø€´AàiòBúö–ö�_I±Ò›ù}¦êç5Àð"±3y†ˆMãJGp™Ü¨kÓ]�{GÚñÔ.¼xr&.�C3ãîa˜)  Î¥Â|�âÙ•{H,M‹œç˜æQß>ÉȈ}Ô§'·tÞ€ð<žã˜EŒy¬ÕV!ðДðЈo@{�ÞFäN‰Ï†€ãH¦ôBZxòû©Ép¯ÉŸ4-^ÿ‰Å<¿�ÝìÏðJ¿�‡<ÔO¹pÒo�Ó13á{Ø?$:ãaip(#²Ä1$doAÆN€ª‡ðC¦É?® õ36ñRcŠIáCõËS>Œ^pÝ´äÏñµŽ<y,mû/V�2Vá,¬K¸iª¯ßp¸4ñëØúÈ¿Õù/åTU¥kˆ@+zÒVñ餣�@ÌDa„¡Ç[I:ž �Q@;nðŽsÓ‡Üãõ=ÝÜêeAoXã2HWó– à\GÎÓžA„½e¾Bi"»kƒåÜH�JyòÏ€âà1Aþ3�s¤úÂ�CÊ{èÿ±¯G®‡x-PFׯòZ £ã…ÇÆ©Â}Äß§{ìcã´Ìêý^¦kÛìöèϲû°L<×¥î2ÖåL­J?¹u7Wºt—Û’É9K‡]—G¸©óÅÀ]½÷ÿD‹ uCÀó1 'Z�b@F?0”ï�VÒÎ*¹?÷×}lãÖO'Ç,\؉aÿ˜÷ǰ0.ÔÀ'ÉyঠùïKò@¼ ¨p>Gd GOy­“ÑÞ8T<^U8LKå-‚y{ÅdÒGþE2�q6çkÓç͹‰—[,e,ÏÍ­-ýùLZ÷¹yú/l `CæøXÜ™ËØÓk|†…^còWk ¸ñçé©nž”â ò„¦�è·Â«âÆ8v2Ù[†!CZê³Ë„.?áwäï)€1ùSÖå-3ÂÇŽžú™ªaßý<à<�%¹.àm á<ùLJt Cdßê©Ë×q h¬–³Pçf9ç¥ €åàºÙµBª&Ë;±)é0Å¡¢¾^óŠ=ùÊ(`î—WÂXèµ±�¿oþ]˜u®;n&{üÓ.2Âô—0ýíÂ!»þ�uî:z { žø=€t¤ëqù,…%(1Ïé3� €œõ±Â`ƒ±Çy¿Tÿ0Æ#ºâ›’LYÄÛ ›Þ8°”>žV7áÓ_¿ à6‘¸‰¸ÊÜ"Ó›l“¿ªïkœÛnë°>úÔµÇ@FÅÛp”ïôu™ø‘&~“?qê&­kc¢ì@$Œ)å÷1ÿ¯¼ Ñw= T³5xq�à8ÏL` ØŸ‹ðãX¥ãmún¢ŸGRo>Æ&- ÄÚ=tÚöÚã]4m{‹®¿íÅo( ®„;!`₨2©ûm]–ܸ!l†p!ò7é“—w¼IçéŽx,h¡]j5û¥žüù¤mÌq‹Üh;» ()¨3nö¾ù+퉂XÑ;­«ƒ¾@–D—áþ{çÁIŽkéTÉ–™îqoÍÿÿe»ç¬3oº»¼ÜÞÉ…dE:)"•’Às˜A$‘¼ áßýŽ>ÐHj7çeù Ÿ;fàìí@ úm|¹ÊO¼ì"ƒ-#™ª–D‘Qû©?œî`ûŸ]€Ï|ß# ‚ØÅˆó@yë(:ri‡Œ,/Zxi(à¥ÑÇcH€f€Ï< Þ§ä¼ë"ËåpØÒ'²m�_ûÃÐk€‰wâãë䫼 ]ŽÈ™Ø æוKä5LöËÒQeéeêñ¿Öíö‚Ҧ⠸[F“ä)¸L$š,x~ì°ê'Ê6ÃöÓzÌÓl)xÊAÌeúúO�Æ–œ3P.„ ðÿ"€1pã¢ß ¸î@_ΗaÌdV( ¼ ”ðJô$ÃÔËä›#+vƒ¾iv Œ4yh¾qϺp†éŒkºZÑè�í¨Œ\¬þE- ½šØMèI£[å ¶dæ“n‹C=F·mX£@ï>ôÔÉ+ÿ þ8D×sù1 À ÐTÇv\fǯíHß¼À%€ÏŠÜà/»HËpÌ•ïÕ>#1?8Š-ߣ,gÀ–(úÒ-PÀŽðØ„2&;@W†&ömŸòq“˜V›gœS�ò‰Våz&o¹:‡2ù¶ D LÞ/r;ÃJ_º¯Z_[ü"pû¦6®õ EèGµõUmð*`&xƒ�ÔEp[NCÝn”e’—ŒH0Ä�‚Òé€,9!xgìA‡vÜW¨b¼c¿ñ¸â°Ñ ¿+ä½ú7Å)Èào}K­ã¿ŒÓcÅ?•Œ,Å¿iqÙ-õO:Xê‡Ê}ϧ5÷ç°-}dðÿC}äI‘SQžáé� òqS`'Ëùæé ã ݇}Ç7¦£×ù˜ô¶þºý¹Û{Œ­ªîz ”°Þ6{çømi¹â¶?j.{Ì<ãàë|â«÷ï×>,¾*.þô§Å­â�>Ì3ûoô¡b¼–UòT*hœ€Cé»Ud«Ÿ/ú}Rü(û(ú°W[ŽŸÄÿ.ÙgåÝh’�U|g0€Éí™ÿ ¬4¹7ˆµò.KÝÐ XM¿)ÉŸôµ2&.ëúAÑÕb€¼AZ²H›Z i‚©y—ƒö9Ê.‘κ]š—AŽñ*ç�¯*rýŸ YŒ^mÅ7¤?nÌ}˺Äsœ¸l„Àc‹8*ì°ð^Ô 76JöWÙþ²@NÓuÆýRþ³Œ§BY`“ÊØd�G潤‰„ÉŸ•ÿÅÕU€Â�Àÿ“€ÿà—_×zYÏ9ý©ÞÚgÀ&H~ïp�Ÿ�üÄõ};€ÿQúùßE?+²âÿjŠS ˆH¡‡µdãw@#7 yµ2¤•÷¨O„àa r¢” y#Á}À_ú ü¦è„Ý=µNäSóôtð%Ý�ú?ø–Æ&¬œi™þÙ.Mþ)m*ÄWsßBzØŽ?ÛÿŸh–~«?W ü¹<08’ ŸäŒ£�8xç‘~Iÿ_ÆS¡,Ð[ €Þ"¤™8^ÚäÁxâûðZ‰3Q²p¦ˆp§x­Ï×v„ ÖH€WäP¶Ýqnòló‘cÁ*ÿÅ)â à t |ˆ•Ü((j@ªÖ†3åæ¾˜§?1ÙS»ˆAÏ�à àGõ7ÊÁ+Z�Ø•@/I€¨êDZý�úè‹h@žé2µ*§Œt­8²ÍpóyÖ?¦Ë:{Ú@‘ñÇ}¢q©B4Ô@ÍKÿØNW¯rî4ÇŸú÷”4ðÿ…´x¾!áÇÃ�ŒsØ¿Žæ~Sæ¥ý�óøŠ/ ”p sàÐÉÔí¡�ïÂóýuø �ö¥€ÿò/Y\üÛ¿-nykŸ€ûDÀÍvñ­vN$[È!¸eu ð�:€k•»Vùïr>Ëà:ÿï¢8°òW>÷|Qü�#b€¿êl?ö³K>àöB'í8*÷)ˆ€k  ¢L[Ãöâs�ÐÕôª‘ŸÚ²¦#ʘ‡’oª~ Ûü²Í° €œ˜u¹Þ²öÏ¿]ß)€]q~Âj€ù†Ý×núãe[¦.vJ_~}Z܈žpo€ÚwdÒŽ¯úI×ÿ¹îÿ»âo6âŠÜÈv¿¿ü·mÊ€jÍ8É·Ž(+ÝX«-?yÀêÑ7ë9•S ¢%@.éÌ4@YúpV~ðÔìùÐÖäæ¡”CÑÀÏÊÞrë‚® S—KuÇÊ�v׌ 'N|8AäÃKÎNqÛä¯â³Î!ßPÊÎE~/À…ÆÀ;°˶Ëd¨ywú©Æçö‹–æ²@9sYöê ð×d =Óª=­þÉËwï7¿þº¸‘@¼û�ÿXÜýóŸ±:»—ƒÐ;ÜÉÏJ�U¾€?šð/ÑO’ûq.¨ƒ9Ó,¤}ÞRºüu^”E/Qýˆ•ºÚä†Ä[(2U€ÐTì{JB~ô¡;@ÓídJҦ旒y9�êÛp÷?|k'tõ:¬kíë( ¨:®ZQ‡Ôúás€¤Z��eM4;‰ã¢Vè#<÷Ä‹�D/Û±bõï÷ØMUe%ĸUʘ*”^ºÊxéGx¢ñy’�;Á¥“q˜€ßhÛžË_t3àW¨î ˆ›û”w+ð¿ùý÷è…à+v@�­}ùû*Ðü‰¬þÿ¥ø¹›§a(õ¡9*¹\‘6J@p=Ò£� žH;Š\¶ðWxÙ»°£ J€¼€1dÐÂhýàoüÎnJXG—¹«ùèR¿6:®7FÕç¦}÷¥Éc�U6Nc–ŒDZ¥YY?U o´ @Ôoôùªa\ÒP ð*6ð–�QÊÊXÚ¡~_žÊx!Çô�“m½Pž øßÊ~oä pIúF; îP>×a¹þÏêŸWùÆ$«òLØñj_Åv¤ë»ê¿ èØˆvÐß"×uE ô&§•5„MðdÀðY¹à¦ô?Ò–1>úÙœ€Ð ©o~Œ¢y¦ËÔÏr×G§�SdnËõw¥n¬<€)9c@õü\\Žáž€f™èg8„ÊëÏ¿>=ÖIJvt†ñXàGÅsõ‰Çã³ÑJg€g¦“å|óôÏã@–ƒåY¶ß×ïõï£ë!eÝþ¡Û{ˆM^c�r^ãQĘýGæÚ/ï`' &L@P‘a<.¨<®ñóß7Ý0x«§|CôDÆMƒg-¢‹ ;13 ©~€�úëÕ鸩Kø ]�Š «Tø>4¸]ŠÑ­ÈV?«}oûûÚ€3“¾ÊŒêÒWÆ Áý6E>)ì:¦Yf>×E§cþ”ßÐåñô”ºc²¤“1²ÛÃöƒE$ÃqÜà‰Ô=tàüàóÀ8¿ù<Ýö^ƒýõ¹NžùC�«Ú+ Ìi�ræ´î Ó�'ÁpDçxOüøk5Ï ƒx|�Ë'¬òu# ã­sLãÏÎhø‹€z„$\ƒR ö1!§tä‘‘I�¼¦5ÊÁ£×àŸoü½µ¿ÔÐý*/ôÑ·ÄøQo]D�ó¬’tN»´œ€œï:Y¼m OÒc”ü �±ò$GÜ(JÚাĥôªŸÝh6h�. €›ã½ây1ЕúòA2^p÷xÐoxõ³ü±ž¸L>ïÇÊ•¬,ð\-PÀs=rOÜï{MüLö¾Ü/ â%Aßô¶ÀS�?o ¼ÿóŸ×z,�É—sDm%Ÿy|Бíe.(¨ ² 7?ùlEÓþ›Œ²cÁÀ„ÎDìhy`Ö1%–vÀpn|5ycÑeRÝeÅöky.‡ ýD@?S—7]Q–tÊ.C ,é]èPIUÄû»qã�t°òüy‘Î纟0c �“qDÞ«_¿*Æ›#é—xú†£9ö@¾éSŒ#™¼Ø²Àì(`vOÓÀ1LF+}ÐdÏ$ТI•Õ ï àÞ€3&Z@Ur>æsÏõý¯_—«/åáú÷zaÐB7 .D¿)^‰¿PäÕ®8è Ní0È�ߨ`b'6å™à³Œ<‚ë™4b€~¶í‰ÿ) “ÞŸB. ?]Éy¤ûz.ã<—T~"|Ž®“ËÝ@IDATuYu�ŸÓðÈMs=×u½Pµ;6ãøÅ ™DouœnpÜT–þïʹ‚¾™m㘰 @y €§H³kÁ.ã弨õ;PœcÚ¦Û}ˆŽÌðÓ·ÿÒÚ›Ád/Be9/â0Î?&O y²€Ï1V�ꎿp'p \p &aÇk9gº9ðBñJñ^ÂzgÀ¿¤ïJu¸››šLæ^q¢‡©8úB¢ËôU_q$Òs¤Nv.à‡À„ŸÓC•”˜@s ¼ëdž2ciË{NSÇà/§jxÛŽ@¯ÏuzJ¹ÜÏœ6oJ]óP‚ë¶tŒ™Ò€”{8–ÔàM‘Ÿ¨8T oDŸ/œ3ìþ܌ʻ$ø`Pô�>*r>oŠëúŽŽ óZ þã:>æµ@9óÚ÷Åi÷äÇÄ ŸcžøÙô™*qnyMÄl½Æ R )àø.ùwÑ;Ý#ø¿—ü­v>KƛޘÀ™Ô‡©€‰;Y>& (}j“†€Ø Ïù�·Nêç¨äx@o]@ȱ—�¥)ï�ydÖ5æ sySë�¶ñ"ÊdYN›·ÊY†‚,o í(a3. àx€ãÀ9`G±U9á˜ÆqvßèŸb8¢œ§Š›@?÷=—‹s ¶ÉÁFõz²Í_¯æy9óÛøÅ´àÉ�‰~SŒ•á2çrØ*¶€À–ì /9”Çÿ^à¥�€K€NíÄŠNô§ Ý!m”É=À‰¾QXð§ŒAA È' é@:E7éEÿ�ª|O­Äòœ†GžCNÃorrÙ^}Ë�²Y–Óc¼u»ŽÓM'Ú}\â ‚J3ÀŸOòv­·ZóÚt¿h ç1Hõ‡Õ?o”ŒûVÔGv.2¸gžº9 o™ÏÿÔOYàX €#=ˆO=Ùôí{"Ä\΃æ˜w\Π7Ši2Δëü¾†üVy—zràB»¼¼…kÉÚìG×O`Â?tà¤XÒGMâDr¸¼ýàØòW€’ éˆ@—[J~ä9�)õ\yN÷r׳j€mGdY�ëAÝ7ëpšvp´WÀŸoE@[Ñ >g²lj>Ž«”†s"ÊÊ?Þ¨~}Qÿâ©ñœ_ôq—{è£ÏýCŒ�öÆÂ¶¶ÝDZº‘=u{S�ç!6x uÊx Gy¦12I ü€{–9íü¾üɉôš”)�„VZ…œÚN]^´¯•oĈt·~ðb'=ë£\ŽËÜå/eÆ¢Ë8/§×ñ. Ð;îþè£n¶ÕXšr.“óÍ÷Ôz¡)pܼ ÐòØ7²#Àq÷“ËCs.Op âÅ@ñ+õ‹'x7OðT@œ¢ô3Æ”øœf ¤ ‡S4Z?e�,PÀ F} *=az2„:äü3ŸmÄʔJŒ'˜”Ñ£´c.¿3ÏdÞt,§lµ�^µý¥ÝV&&uMúÔ>�2ƒÀ¤¯t€&<±ä;æ¼^F:‡œvYSúBüÍCs�¬Ë<ù¹�¹¼å–‘îË[�éº|ɱÝòOuQ6Äð—œË=aGé ›[ߌÔGJ¿ø\p8ôMý=“ý.ÄóX 4B÷“>¯‰Œ‰sšüC�eF3=+Õq•Ýg;fåÌfÚ—¯8O†y•Ÿß“'ÖÈ/§{=;¦›%âZz¿tþŽOìÕŸ';ªT1œ€¯¢8|ð­"/â3ÓÜ»À±òý!q(ð¯ëT?Æ|ž¯«3¥üÐíº½)mUº~X €¶˜�ëÿ,³5ôDŠ=>hLúê‡'@¯ú{:t•IW v¸ñ/¶j•æšmÜ0œˆH¥{¨•ÆéÀ  /ìDϘ,z€ÔüR²üíå.ÓSëp]Ó«}SdYŸu¸N¦ä1¶‡×]GÑÙ·­¶¢5É¡€.7Ö9Ò—xCÔçjè Oàî8ït|ùå7ÑKÆ¢ç,ý'ªÌ®‘1zL´Y¡,0¥Ê˜Òš#º^ú$‘Çøèí`ËLs^L¸*Ãr8âãM€¢vÜJ2QP[Áiâ‚ÀYvŠˆM>¤“çz`rþJFKä|·a'€—ÿÀ\ÞÔrSÆA^�óÖÑ]Ë�”ÃFa+€Sú žgbœûôe] §?|"8Vö¢8|(è«úõ]6åÆEòpPx7€�au—òùoYѲÀs±@9ÏåHy?=âxòÌ]ÎàO¾ƒyïØ àÄú˜¤ç€X€¦Úò8h•›Äg\9 ï`Þù¦äç¼±tÖسòü³@›ûØÍå·ÑÜWxµ��°4l&Yv¼#DñCvpè;€üŸyÃ$;¼ œNÙ|Ó{|.÷T*‡àsfSx&(à@ê©'‰©Ûïõ1Aö2ÒDƒ@žDmvd^t)à{«}Ðû>èÛ·zAÐ7½+€oÐïhVž©úч,¡‘ný¡¬Óüi|‘Ž*1¢—¬�ƒëCqìàÀ#Ïe2ŸIý[Q.˶¥³®M|ÖÓø8‚âóñõq5ݤrŽ<úd'€'øT0àÏS_ä\©¿ñ^¥Ùèû¾-ÝŸëý¶åÏm—C·ß·7÷øz{Wúa(àav«Zk,�'‚ ü÷¤êÝË çÿwúhЯïÞ-þöË/±z»Ó[¿)~TÔƒ(vÐ ]®p[«KW¥%¿ÇtXOþc;.ošÛˆ­>ië†'�6ß§�·ŽöåI\^,­8’õÔ ÐFŽÀÊc�² �-x:àB¶§¯Û^ ä1ù<&MÈçüRR¿e�ça�r&>N=Ô¾Ö‰!�{b’Õ„‹Ì׈YùS>­üÕg„¿ ðã-n*ÇK\Nõ½€§pâêÇ@Bz4‚ć�3êC‰ü�ç6r:·×M†ÍÒ¹z(ëЧ-ïé¦rÊKC¿�y¯æ�éܧ•ÉF|ˆ7òÊi?Á÷ È6xS÷ÙiSäù\w¹¢e�çb�rf8RL ¯mbèÇKÚ%”4 O í`à­€_´À·¸~ øÿSàŸ�*×››çÝé•¶5®!d~n`(ï° þPç™üM³jlŠ}Ékv€žúÉæ¡w,írëhno?j§ åçÌ¢/DîÞ (þð— �áäs5ó*º6¯?ç)[¡,ðœ,PÀs:ZúzŒ“Qß'ÒyõoÊN߸Ò=ïå¼S¼ý¨>1&"€MðÍ;oí;@y€wþ@ah‰6s`ÏÍYðQÞ öD}Ÿ¤Ùuc@èËñVþ¤‘ïûι×Í ‚,§ûºS¥ÑÆú œ² ÀÇ�äjÅêgàZN€ß È댹ÁÓ`O3æ7QÊU( º2æXõù _¡,ð,PÀs8J/ �wÅN€åAl+i l\ñ9ÑÜ÷Ì{ ÈsïÜÉsó=µÓœ�l ¦ ëͼûp¤4ïܪß\°Àk�ù: ß`Ø;KS.ïcÉN€å2yœ¿ÊÏÅå<—#Õõó©'š}Û›3سâçe@gÕ(9¯L×ãç½:ÚzŽ$ A쉛væhÿêäœñƒ¤=—ˆì¹À1áœôT{óä›Ï“îûŸØtz]´5g˜»½^?–¹Ç×·Wé¥Ê¨3á`è'ÒŽìð¹Vžàæ¿+ÅKãQåx=0Û¸ŽóN‡™„I[}�`žtŽüq\>wÁ“?Ô1çÃ[ži_fŠ4ú2oÙ‘RzMäü!p?�šòjà/²9ßàå@8d¼50ƒ{Ïû<6hA³Ì|4T?²6´}¤ *íd�rv2SšÊyr„'þDžà®Þ Qr^ÔÂsÛLÚ�'ñ©úô$z4žXýkl?í´q®ô‹òVª§—©¥àÌØµÕôÉodõÿQiv˜x ðB‘ƒ;Ôï€'ä<§}.“îyd� Ûìå¾=¶×êö¦�ÇUtÕå¬Ú£R¶€'ËØ~ÕÄË=wzЅ⹜. po«¶ƒ‚¿&|÷/€™´ú°„�f(@Á �ùÞŽ”è5ž!’vݾ|ÖO8…h_�2DòÌ/k-Óæ¡Ög™ÓÛ¨Ëo ôÀ �ÜPp&YýóR ¾ øsž]‰¯hÐ�—)Ïïè/ 8í],Ÿ/Ûô©Çÿ\Ûg§°Ât(`:[–¦=-�'˼ˆà°OèOÏg‚y� åê¨Í}�BÓejUÖƒr.O>Ø&'ýYOßžÁ?—A7åúˆ¼½¾>Ý—wzS9åa�¼2Îi«8&Šð]ñ3�’M9y50àÏ<hðçœ[ãMÑàoY�?F�&xŽ˜F[ié-P@o‘JÔž,¡Üp€\È;<"È*-Ê+?Àî=ÕDO~rš|ç.ÐgÀ߀œ›à‘÷Áº¡„~¼Î_æ.]šù±2–¹ióëh.ãúkdBzÑ:s½'æ½@7øîçÖ{Å_otŒ¸Dp"ð�Ýñ£a|*3Æ?ñÐ^\óØ=þ÷/ndO? ržþDžúòö5é²ââ%,8¬üý~Yˆ�?â\†ýfýQŸ„iÞÁüˆ»Œ)eˆc«ÿmõݾÛCgæÝF–÷ùÛÒYÇ&>ëéx€à$òˆ]¬¬NE¬y£ç¦snSÞ¦î횇à§J¸¯„}Qä©. ø½ØÙŽÀØ÷2ÚGF˜{ ÑHûéÛrr™)ùC·7eßK× ”ðÃÅÐý°#s¤+±«É§ Vÿ€ r›`ÑÝÁá ]5S;í Üæ¡98?SxœvˆÎËõÆøÜÆº:nßtLϘÌå·Q×¥\.+žkä8Î;½’˜7î®ÞV(Šà—± ðÑ9æÇýn.?õ@?–¦ß–Ã;ôçºåEËOm�ržú¼òö=9°ËÜÒš”Y� À¯ô¡‚ß4@ÏíC‰‡™ë å ú¦È\¬N/sÐuaSÞX�]Ë�•³L”±òÇ&÷:^ë™>ëŒìL鸑Sã6½·#€-|Dâ?ô7úÜ(;ý{86€?O¡ì¾áÏ oêî: =ôx܇¢e�},PÀ>Öª²“Z O’ø -Z~v'`ÒlWFŠè‹©úÊwpàsP~ËÛ¸ì<_Èò\�nëí˹Ý^¾KÚu×Qt�—£e‘µÜú�Ë|`ðç=û€> Ê?ã�‰^eÙ§ìÐ2Ô;¼ð³ús%™Á?¾(çeyxB/s:2õãóÙé¢e�c±@9Ot$=)º½}ÌJßV¢*³E pð€+¢nšc{™—µà2<ÑfÕÇAfžŽÁ;À;GËL)‹nÒý7å¹N¦}ý]ór¹m|×G…_ÕƒW>àÊÊÇÀùq¹@r^¹‹sGÞpI@rìÇJZa®ó—>¸Lá—}Ty/çÚ¶÷ìÇ(zçê7º7…¾]ú7g8t{sŽå5é.àG»ÿs ÉgÛ>öâæ?|¯Çyûvñéû÷Å­¶”¿)¾Qä³C‡èýÓd*“ªúºâ¸SÈ|9/CÌ€ËA³ÒÔíƒËôò±4eÇB/wzJ™>æ6èsЬô½ÂŽbä©>Η׸ÉSrSœ"i΢ƒÜÔ<}å±ÀOêã¹úF»8 ~4'…ãQùëÞ �úï4|…²À±Y €™�Hýñw30vÊà[ïäüÚ€oß¾ÅýÆß¼ßMõ´¥„X¡ŠG€É½ÉWC®q„Àc8=PÏõ�—uY†b—]i¤K亮ÓYék_~SÙ>ÏiúèÈx‰Jc)À>vå’+¶×à �œ—Æ€(PÍM§¼˜Gý¹`Ž9rƒ¿Á}­ÿÿœG­t?Öå<Ö‚Uz Š8ï//¿\]->5ð¿ø¿¹æŠíáC¬þÔ,ˆø‹€ª>¯Ò€˜w  `¹Rx©3DYú7¥³Êæ°OÚe{Š>d}t;ô�<¨£Æ ©2aå°Ü@:« à‡UÇ÷ `/Ò„PëÉô²œã‘õrË2õØÖQë Þãè)— %øopôD¹.žU7;Bœ|3". 4{ƹ`½ý¸÷H}PúDø‰ßÕ�kÚ—D÷q2ø=Õ¹»‡)ªè+²@93ìú³?̸Ømø<°v®t€x!'€·>¥]€!ˆgrg;8o#ÏÑ…§VƒSà<Ên¯±|dû„¾|N›7EoÏ�¥³Œþ÷ctÿ<6Ê›wž(+mFãà/[ö¼;À÷D>ÀOl—SârL³+NÁ˜þÔÔN,íÐ' ¬Õ_lÿ2Ùk^ Àо Šö½´�BT£/9ö9¦»e<¦±¼1ëd}ý>M=d–gj¹©ŠÆø©â1R?ó”ußÉËÁòVÆG1¨d¶-}‰§Ø àÆOêáèàzü=ç‚¢é°  rq.v}pŸ‡®¸M@ûDvì>ÄË�ÔÖ•}‹^Ǹ4!ÝömÔo„r>èõrèÿ?}º/ŸëNÁÏÝÞÜú§°ÁkÔQÀk<êG0„“u'Û¾á†PÑpäØ_eí Œu!ˇCÜü§~… ÊÙ‘¸”N.øÓ'ú£ô®ývÊ °µ‹>•Êx*ËW»?Y€ Ñ«£ü™ÀU2¢&Z‚áš'íÈ<ÐO´­þ¸/žÔÐ7ø›jr™Žõµ�1²ÌSç!Áõ]w]¹óÌ÷T: þP;'ñ\¼’‡pÈsp¿ÑeÞy™®É ›²ìü½=à+»®?à¯'FD…è£h€ÿ¶ö£Æò‡qÚ� 'à�b\‚PŸwv¸‰ÕÁçºÓEˇ¶@9‡¶øDízõp¨ö²à{x0¢&y¶_ya [±LÔL­?¦×‰Œ;¢¦‡`Ú¶là逯~Fd²' À·€Š` O½œF¶oÈõÇxË Žjƒs<SVýDî‚'ÿé}€"”Øô"ÆÐê*û§í5)ÎDD�牀x̲õ-ô¢Gyw²u<…Ȧ|v Øxè=Œ‹{Ø`’¼½Räå@<À�ÛÛôR ¼ýO¿f>×m+ä„þÿÖ§—¥~üöõä<ŒëÛ{nú6ê×W«€×wÌ�~ÄL>€ÿ¹€ÿRO¼|Ћ€ÞéI^ üNû•ò™„y\+&Õ§ ¤“¥úø³%}¿ÎhåG»   ,ËÔt¿Öï6ÖÑÖ¾AŸõ*/eŠGó -2f;_PṼ̬‡6žQÁ‡ ~%`�¸U>^ÜxÒÄÁ6ðh»?>ÚQ�Ø-Ð1xÌ=Œ ÿ*Š-Îųúçk�ß/Õ÷“(ŽÑ:';Åù©úPïø†@©Žç�Eç¨L1¯Ê˜×¾¥}O x" @“8Ïÿ3¹¿×K€x-ð;9o‘ ˆ¸I+V�jzÒ ‰>nücÕoª~»î es`¨ãRòã·¯ó#g=g½”ã-ËT|¬¼UÐ÷n‹ŸÂ8Óøˆá¨l½èðØœÀ‘cA:"M+ÒþŠÀx$‹ Þ+~ƒ=ïÜ^ÔyCùe­8ö!C�"àzÂ¥ú'»÷è8ì{�=c€>Às÷ÿÅ/jà;ýWô®4ÚÍ€ïs:Ë]ÖŽ@.çá½vŠÝ°K…ù,PÀ|¶-Í{Z ÿá½€ ø8ià-Àª‰˜›Âˆ' jˆ~«?€Î°úüqè'å­ü2Ñ~Ýwhs=—[©¼C"×3¿�†-•O�YýóY\>ÉŒ�cj\¼�1Oå2"ÌásÍ~qŽ� 8«iŽ:WŽ”Ç×úC×�ÿ N@“¯€uˆèP»8^‘‡Œã‘�žûˆ ¬ê ëîˆåÓ_ÆÄŽÄgE. Øà¸ã$qC¢Ý”¾ö‘öÂêo~ä>÷¡Ê‡²@9‡²ô#Û9ôÄpèö²yh;VV* ª0ÜI’iåbÂׄ{ÐÀDM¤�Š€}€?ýØ àOžË®ë }‹ëÊï#Ïv1?B�@Šýù��?¨Æ„ø€€Œk匟/4Æqkz8~^Íìv8JŽŒÙG-À`T<•."|l­Ó_Eú–CÔ%�Ð()b;ýSw¹G€ãú9VÔ‡26ñ8™|)0¢t~Sšƈ�xk¡ ƒ>Ï ¤B§áäøÊ8¤µ«­�ðŸš'½HSSòL OèA¬üú€?;€E\Ð$¿üÝ÷€Áht¹L±Á¦ñ÷y9m¾Q;¬FÃ�îK Ÿa&²âVþ>&ÐÖŸ|œbpJ7“ +f¾æT@é�xzCù€*õ�ó¨ß°ò×›þV.äñ'ÞýH¢¬ôp`/€XtÓ=ñB!À¿Å8¶h£¾ÆÈÓon<åë€\ êÕ¸DÛúN†·õݾ�&?ú8H‡CÍ,Gc›ö`—ÿ*þª‚mòª} Á–p CïÛÌÜø¹õooß¾½ü\Ï|¦ÆàE«ˆš�ã4�ãjú²}º/?¦wÙÜú÷éK•}¸Êx¸íªæ ðäæ &¦@MxPƒ7]I/§Ê:2¦Ò20<µ&ípDãÈÈKeWT©ÏD³Oðx5Ã`e> ègÝdu[!xë‚b'€6ÚE€¸Ó_ãô ü‹¦zgÇFõÃNÔjºèC|îWÇ'ÀoÖH#J}˜R'lÝìãÆÉo–\–uFGCO+k>(úˆj#ì ¯vyë`8\*ðå�7àü‡úMßYµóÄÃ7½›âZO§Ü(^j×Âo,D'6;kàå‘Ä8WT{œé‰–«?ýi?|Xœ¿}N_<ÄY Øö¦–EfË7_´,ð ”ð«U�Y-À„Ǥ %ðKP¸¶ìå$?T¶‘�Âàä ¾õ{[Ÿ<&Æå1R'Æ#qÓšÒ�ã�³&Xö‹•´(+V¿ÐÇ/ó�Ú)€Ç ð‡*fàYÓÔZ±ÇcSÛ¤i ½Œ‹mr€ß[æŒ/Y²°©Ê�pV½Èi ½Qw$/‹¢?YO[nžvèý]ÔqêÂ�QÛþ7Šß•wýñãâFñö�?W_¿Æ;üå8Ы{=Œ÷èüàÞêCÏúúûßÕr|mð^;+ç=ýè"ÝÎÁÿ‘,+¾,°«ÊØÕRUî ðÄ6Pµ˜ú\[Žɼr>HçEœ&òMæÇ —ZùsÂíû÷‹{E÷ g23QÒ»„þøõé87wQ´c™¹õïØ�*¶§ÊØÓ`Uü°ðÄÇuÑ·ý_´uú·?ÿ9ÃºÑ ê‹â©"[¯s&å£-&yÚ¨ V’šÜcë^u<U ˜¡|‹èüyÓ‘Õ92·cà ê‡ú�øýñC�ªO°®6ÉÐ[üê «þØâPlã¨xÈŸÖ¯ØM‘Ý[Œ]}âi ®Áûº:¶ÅÖacøÑ ^³‹»�Ûhiç,©eÑžD8`—ÒïHZ† èÁFa·Öç·r~Ѫÿƒ€ü�â•Ò~Œ1v¨¯qÉåÒÇG ôë|æqÂ?Ôî­t½ûË_·ýk´y÷îÝ‚ûÂQµ#À.‰�Wï ¯PØÇåìc­*{P 䉎Õë[m•þ¢R8êÉMš¿‰²õ:§¸Pˆ€©vãîq€H@E¶´%‹Ÿú+"“ÉPh1E2V•|c`¤c¢o9ÀC�[²;ÿF¥'SëŽvÈS›¶ñ¡ÁchO}À&áø0~(^¿€‘Ëv‚—­Ç;ÉÖ‘/Ë0Ö> ³sòpŽDṋŸ�NýIçÒE>ýK½¡n¶¥ø �þ‡æà \ê’@ïÄÎãSyœAœ<ÀŸ§#™ÿðWÝké‚r¬ßhGÇáœ{´ãåc”Áßö+'@©Âƒ-PÀƒMWaO~yàZ  5ÿâwÅ+MÖ¬Ìæ ^Y0´N àðÐdÍóëLüE¬ü%‹mlQBÈ5áG Y‹±"Ô÷Ø €nÔ¼u„²=è³CØ‘„ÚDný¦.wHmÓÙ$죱€¬Ž}oà÷ÈÆ':Ö(õ\•ΑÒa×®óŒ½Ù.6P‚ãHðqþ¬6þª»ú¯Ô�ú´1ðMv&Ð'Ð~Ë€øsvT?Þ_ ;ô‹ò¢ìâöªn¹þÏy,пûý÷Å7鉾 ôOõtÀ à¯r¯¸'@ýcÜ9’M('`i‡úÝßåìo³IjÄä7‰¦q%sëï[�º½<ÑÁò|øJã;=2õNè¥xî è'À¾o;¥Û$ŸËà¯<úà•3}‰« Ç]öLøÊ�I^e‘ø%"�»ÊE ÀŽàïGï ëêL¦>^Ûú·±=Ù.\t ™Jx²;)8Ya?Ê9*�kíl¯¤¸Ø=Å8 íX¸ÖŸÓ8„Ÿ[ÿCúTu~¶@9?ÛdrIÿg˜¼�× �É�q6ÚOäs™ ^“iÜÍ«LÆ“hôG}ÒŒ—¦^žIÕ€PåòlýÇ y¢ý¯ª°©b]²6ŒËÚáRŽ€•Ý‚¸$ >d:D;sVexä<"ÐÄ/þouCß;�2Ûô8±]�.•5�¿‘ƒp¡VþÔ;S9tø|ñùév¨øs~£?8.r'Ú¸ÕS_t™‹'âýû[œW~�¶`.1øsIÀ™CŒûU( l±@9[ ôØìÿÇZèÀŸt‹�×¾FC�BÅ<ùüWú`�ѤL&áØÊ¦žxV²¡ª¾Çê_“6”½<¹¯è\Óµ× Æ2J  ¿ÜqQšUv|tI4. �†Ç h4nÊDŽ€žã0f8Ž›ä|‚øœú°¥/0~/Ê%t�4Ýè°€ìTåÏàÐØúG—bçV–&]9� GÝâã �Ëø¨7Àºþ'¥8ž*ošÁŸÉT…ޝ’�Þø%Š6 ünŸûE¸!¢Ú�› E}"[üœ‡¡ªˆl üùßø¿C{”­P³@9cV™@VºÇ1Ûžíû³«åá˜PÙ xh@KDé ÍXQ]Tæ £mQŸ~4:EÎŒõçqŽê*á¸8DÙxß{üªápUØÐ#xŸ”ޱý¯myžÖ° §>¦ÐXÁ‹â‘þŽ>¯$Šs”3ÔN4ê«]Vÿ€~Ÿ€ïsm¼ÛÀß@�[X¼Â: ”°Î2G.?ôûÐíõæg¥;rn/´àèÄãtš~&Þ�‚Êö!Vþè Jßk¢úðÆìa�A)§Húíwî/Y¬*Éoúú¾Tº³@g§åQhe°#Ç3•Ùén$äf<ÎÞÊ÷IÌ ¦x¹¯ãÅàÓ½ñÂ'VÜŽ´§@?8çˆÞ¸li^%D$Ïý¥;–¹® ýꇷÿ¹��{n œ/Ž^鯣>·ì „‚öã¼,Ë|Ÿ?¦#—ß—Ÿ[ÿ¾ýy­åËx­Gþ�›É‚7 LyE*»q=�U~lk\{Ž/À_ubBN@¬üí4' Ÿ¼rSLð ô™òê'_ ‹¬ƒ¾üÃ9Q»·8Š8ñ` :¯|O@ö}zÙòóüõÿyöþyôº€çqœ^e/=˜jf€É›À R†€6ÁÀªtLü;XÍÃà¨ÎàHÏÊ€‚nâ¶@]õó ð—ÏäÀ´­~å?Þ¢€uã=Z]§Y\7ðÿ"Ê÷& þoå4ìœSñÝ΃8�äÀ_ûƒƒ€cÈý¬ã}ö@ÍøK?�FT›¼Üˆ­ÿØ�#âË`Ü'Ðos¤>ÊQ;T( ô( ·È‘¦çþÏ­›Yûö™´r ŸÈ$è‰0¨d±ý¯ÂûNq.oðg�ØÚ@8�ð�L¤+=u>upØð«•éÇ›ÇZü,`»·ª[ß8n:ŸÂA´ Õ1Â1ˆ(9«îXyëxáhòöF>å|#ÝD Œ›)«˜i"«|"mç´ó%B/sz êóÊŠ¾ÿЬ/ÓÒ4’ÿCð�9çúºY÷0 G0sëD×^tÕr^ôá}Yƒó$õà­‰‘›§Ø>�´&»�“¢¢Wü¡ÝDMþ¬ ƒ* b𔻥  Êá4ðþĦ'Vþè¨0›|^Ð@¶´WèLx¬Îq9ÎáäQ¸�=€OdŸ¯ò¡ŸS¶þõÞÿ{ñ÷ÚŠü ô¦¬îYñ£›viÏ7BYùá]Ç@iõçÂíǹ¢>qîœêЧFÚùõÚ9¾ˆ-7U³C`ÜÊX €:ŽÚLVc“�6Ø÷t×X4' &mµ5¬ú5éøkÒ€»›8WÀŸ<ÅÁqHà?8èjåvíc•ÛÝqéçÖß›uŠö¬Êõ\¶qy3 o$^ëÀ×v oŸUÓJP:ï /®3ùüDñ€öWt ×c¢n×ücÒöÄ�® ;Yðì2,èØ—!Í*ßùPdŽ€}€¿Ž;4^%»Êãxßu¼xÏbw�Ü”Ç wUßï›°n@�`0Ç /€:Qƒ?4ó8þjÿ^7‹Þóå?¢x#�KHôÑç¢Ê;d€‡w$?çù¿ãz�¥½>·õX½ëêÓ'ˆXa ”0�KË�,à‰€É™7¾×ö¿ðþv]Ÿå…)|Eí“"“öhø•àßèL2L.€¿¢fšezDÑÊäÞ&'êp³_<òÇ£Üù�åWØnª)5l9€°æ-{ÐfQ‚Ë#Ë‘ãJÇŽ‰ŽU~dŽáôotüntNÝ)Þ+.�+~Mð%3ØX_¬âÀJP[}ÍÈ[¹¸.)€ð ñÌ¿ú¡ÕïÇÓë|IéŸ-öl›§Sžh öÊÝrê°}oð‡²•ï|%—÷ƒˆ¢ÃŽtµ:”w]Ž|ìþ4ç÷‘ˆãµ¿:'nt‰iñúJ€ŽñµêÜê±@ÞÔçÈùåþš.]P)UX¥ø¥óV‘��üùÏ‹7ÿé?-Nÿíß§ûÛâBé+9 ç͈>Ó×ÑK:‡ué^žëÿz-PÀë=öÏzä¬ÐùPvx=0²˜$5:&⸾ø+ò‰×KÅ nâRowã™oîþf Ø;1YvkžÌᣠÕáš¼ë_ôŒ]ÉVœ•}-›˜6ê4p7€CIù²5@7é‰â æÎç8èäã8_ÉãX£GÑ|P•q}ª0œ$#-‚3Èñg7'D]OúT;L×êëþñe>�G|0(¶ôÅÇç{Q§H{Ñz cÀà/ ¿gÕÿ׿.Îä\ȸ�p)ù¥ò/Ô¶�Ú8çÜÿFÑ�å¤âŽ€î  ÿ~Sôf€ëý¾ç×ûþ÷þ7ÿûâLñRñ;j3ÚæTÆxW‹èÎ<éÈ#ô4—)¾,PÀ‘œþ£IwöîÆÜýÏúቱ:ÓDÍYùŸ±ZC®Þôþ€?@åq¸��¯¥8ìc(�}QVûñ’OÔêƒû7Ô{&Ì(\vØ@†¼�yHÎc2‰-÷F-GO ÿªÙ9Ž£òYñüÉë€ÐEGÕ‰ãÐQçKa]™>ßi_ ç&Sœ‰xªCà«KL7Š×Šqþðv@â—/‹;ÉxOŸñ�¨s+î#‘utx»;Nñ=mïŸhÕðŸhÕ.z®K—ºàRyj'$Î1h:¯òÍ÷”ñŒ�Ýãì©ËZn;8½/�Zß¾íWùÝ,PÀnvªRG`�~R´\ûqg¿’lùBlãôoµ:ƒþ±ý¯|h¬Þij"c€‰Ú %ñ²Œ¨Wq‘O9ŸÖÏj_1nþÓ$—¤ã9…<ÞÜs@›ÉÁ›"3…w iß|x»œõ¯»†ï;å½½O}Ç�xÊ×ðe†Ðh‰§�| €Ç^Cñqì Mžó3ÇŸ2Š„±t–›Ïž`ËÔG€cʪ>î-Ñq@×êÿZç+~VûÐ;�þý?þ7 ~Q¿x+%�ñ](Þî8¼Y0tÈ`«?"+€_m9fÀ<}…ÏãÍ|�Çešó<Ö¢e�ržèÈÌ9ºðÜõ÷6a¾ÕªŠ‰•»°¿ عË5Y®Í² ;U¼ìßèÚì{Ñ÷�²à­X¶`Y±s3à­v øÄ+—E±dù¦2Žñ¶?êþZ¡Å*­9±BÃxâ°„Ã�ˆñ( ;BñÝF] Ûàú¼ÁŸU|8’E›JSžk÷q_”‰%ô‰ïi€?ù䵨äÀûÜ£ëÊ÷ò1}–A܆ÓÞ m ðêgù��¹Ï½áž�<ï¸n‘sð?ÐCYñ³€@äî~îò�Èn€êqì×Q�º«3ÀXúq"Ûúò¶Å¦:›ò¦Ö·©­ÊÛÝåìn«—ìOþ+ze‡I§�ÿµ¶ó¿ ìÿÏú:Ûm¹~Uü®ÈöëÙo¿-ÞéYí?k%ö]+²rÞ«ì¥(_|óÇU ì¼eÅ•]¹‰ë„ë¶ŠÜÈÁš ?j¢fõö�É@õMä~ô/dšŒŸ*¸¶Æs/qþÜŽûLÉ#+sQ;ÈØŠ�-}ñÞ¶ä©ãçôÅ.A[á ˆRŽtüü™xBÈ:Þÿ—L7ñÖ‘ËŒéŽ[›æ]:œo‰·,z H+àå¦Óøp�Î%^ìGPôwZÑã¬ðy™||$ŠsOzxS$Ïø¹‰5v8ǰt‡˜Ç o‡Àus>ã«Pè-Àÿ¹ÂŒð¤4c/ZuLÀd®©ü_µ¢ÿ¢øY×\?'à^€.ཀ¿üóŸ‹ïâã@9 —ŠZ|Î@—ÅxbàLŽàχƒbÒÕªíD‘ç¿¿2Ik«—•ÿ7MÒÜ37o%`¸€î'´ÚGº� �½u(Àíäæ±O8*‡ �ò¦Mf‡gÁçv€õ¬OÔÛø¹ |ÄV7çI48Y¾ŽïËïRŽ:—]¦Æ ü¦Q‡qé¼a›ÐæÝýìHñ2 Þp©së»Î™ïºY�ó5®÷«\ж{ç�xÎo÷•ÞØIj62ˆ›Òþ.‘ò}¹ñ–´,°ü¯—ÊÇiVíŠL¬¨ØøªmýO~â9c;·Ú¸Á!ÐÄLwýý!`�ëýšL¡_µåÿI«{âGÅÏøï’]+Þ*òšÖ3­üßJÎ;Û‘½‘Óp*=P¡w¼~ðç5¬Ü(x!½—Z‰]ig�7¾Q[áˆrÇ÷%7g©>«áX¹±šK1úìÉÕ´Èé±éYj£}Ò¬Æû2® �^ÃW?àW¶÷ þÃŽ€dèé©ò|®�Ѩ£2ó¹œeÎïiŸß§ÇÊ[¶­¬Ëe ï`À'm>Óàuî@9O3?8­LÖåvÖQ÷jÏ`Ÿy—q¹\×y–Ñü1…¾?aÛcêà+éK9¯ä@?—az"Ð×V?[þ¬ú¿üë_‹Oÿ÷ÿ.ãÿû‹oÚâçìxæZþF ®2 í ¼Qš-Ø|MŸm~tò7žý?ì5™³ŠÇ!Ð ùãCA*Ë[Ûpx×Ü; �€¸Pe‡Éë‘“*SrŽ#OÓpìPˆФ Îø‘ET? và×^ÃWÙüV† ¶ÿ%‡ÇÙ ]¢ ’­Ð&—x°ƒíåº|Ë\¾Ogù:>ë§ ¡×“ËdÞe£R«×Ëœõù—y¼eNCiËN€û(#Ëå#±åÇõM îcÔ2ÊfÞu3ÝÒle¿b ”ðŠþ± Ý“/4ÿG=ñ“@ÿËÿüŸC¼–l!'Þ Øýs9 oTçL|<³-=šÑã¦>¶mÃРoØÀiàqÙî'Q¼¶|ãÆ?mý‡3МÍü�6ŸÁà6o Hóê\ß…OÚ-B©3\so|8ðŠ+×ðÕ×�5¹ËÅΆò ø‘V™Øú—<Úƒ6¾Ò„L]Æò]Ò¹¬yÓ¾>rBnÓé1™ó2íyÒ9äóyNÃ÷‘v‘úæ9�r¹1ýYF½ÜxtìB]f8[½¬/·U|YÀ(À–(zð¤É5Õo8ÚÒÿ�ÿ÷ÅÇÿõ¿ßþû_|UüößþÛâN«}^÷Ë|‰MåÙê?ܹ.K@�É9®Ï*ïT»ñ|?7y¢¼›=nÖâ¿"»áh€—¸Ä@›\Ñù˜tȽrwÊêð÷'p¹žï:b€Ç1`ëj‡`å>@¢¼|=?Ú‘| ð­4¢ê˜³lÛy¢ò{:Ôiùû¦7éËy™ïÛèóržà¾/S?ÿú¼ÉÔçæ:ŠÎuynÁúœ6u<S;}ÚrSçgŠnÒÊë,PÀ:˹|î?ö¡õÐlÛüð\ógÛÿ³VþŸ´òÿô?þÇâZNÀõÿþß‹[ɸ럕k€˜¨y§9|€»#îÎ+{ÊÀ‹Æ+�Eyá €ËJ_ÎÀ7Qóº# øãp9@eÓÄ:6źÜÕLòˆÃª\üÐ饀ÿ‹â¨ 2”7ð›Úˆ-}åg0ˆ6UÏTÙ+ùM»ž©ÛÜ”Þ%/—1%øÜÜ—.kÿ¨ß§{pvz¨÷rôõ2§�ç6Çè˜íz€Ïió¦®o:ÖÆCe¶µë3® ÏßåÌp ùCVØÏ¬Ø¯µ�Ï V¾k…ÎÍ~€?Ûþ¬üoDïµpªký<ªgå6�¸) %üá|Ž À‰`À||XÀ#°¿Ñã\_ôX×7Qžñ¾÷ê_ùܹí�Ûs›¦´ã›í ¤ ®ƒ–X½C #‹É[”:ï$g€K¤ ÎgEcouô½TÚ`í’n:]­ÌCÓ®gêörzžz.×Sçõò}Ò¹,Á;RÞ`o¹ÓPó΃¾„À8°c…ù,PÀL¶})™Ìó“ZþèìÄsþùØÐ]ÿá° žçõyIO<·/ œ¼#±a‰"x€­~;ð.ï|ŽO|—ðY+ÿÏ͸õ—T&Ž+T:ˆèqt+xÑŸ¶ðU—òô}xw¾øpš~Ú  `ã#­H ÎùO|.C½”¶Ó¨KóÐ]Ó.gjN¯£›ÚXWg�<ë¢ a“lYâG§M3è˜‡Ž­ü‘爎œ†·,˜–ï>ZžÓðN›ï�Þàoù˜Në.Z³@9cV9B™'ƒ¹ºvhýž=®ý×c}¼Þ÷£^äó‡¶û¿ðJ_=Û§Ë ]óPTÀ’hð_çÜià�x‚ó¡è° x"àÊöü[­²Ø!P�ˆÀc|u°ÕãOäxä©«wƒÿŸ|%�¶iŠÞxo¾xÞ¡�ò†˜ÒòJÓ>ú]f)úQ'§3Oy§M³¬ç÷I[Ÿi®kÙ:JÙMå7å­Ó‰Ü¡¯ßËû´ÏI×# o9@ ¿.¢¯ÏË2·7FݦóH;"3o°'�yÒ9ôéœï1õò]Ó½þcÓ·ë8^{¹r^ûpãgò¸ÓêŸû|ØÿþþÏ⣶ü¯ÅßòhŸVý4'+1¿ùW噊]xO�PvxS^Ä‹�.Ô¾p¯{.tI‚'nÚ5_†²:·#¥~LÊ­ÌÊ5|•%ù⡌cxǾÒv@È‹ØÊ÷i‰—ù­Ü¦tÎ3oj½9½Ž§ìXže=Íåû<§s™Ì�å[–iæ]?Ëàr¾e¦9>™ÓPóä;¢ÃüíóÝæE¿ƒy·»�º^ѲÀ¾(`_‹UùI-à‰“gô¿ ìÙúÿMàÿINÀB÷œàðèžZµ0æü(Áàez5ø;=.ÃÇ‚.Ôß à o'8rxÇ€)ô ‡A”•=«}tEûJC¹¦Àû:~ä+íÉ<Æ£4刮“?å¤Ãeƒ¦´Ø•¼Mi癆þ õ]ÎÔ}pÚ4ë± JX—×ë+—e™Ó�¥öœ^G­o]>ò\†s3§��œàs·§ëò¢Òš·3F‘刊œv�5ªŸµ˜]v+Ìcæ¥ e�'±@ž8ÃH;8r.äðl¬²ÕKNX¯ú{ h¤D‚·ý òyA–ã­&uÚa€· žò¢ 9'’ù �ʪ€&enî»R=®åÓ?·Ï„̶=Àn �m|¥=qÇ%ƒVÎ[ü1‘» ú/æ'‡@ÙC~Ô[“v9ÓAçË[Ï&º)Ïíç>÷å]¦—ç4¼ƒu9�©Á:Ëvå{½N[§Ï_ô™ßD7µkÝ™ÂçHýœŸÓ›t?÷<�ù¹�ãû_À1•ôiî?Õ¾ú¹ÁŠ×ô^ëå?|Þ÷ZñT<«pØ`¸›ïiv0!€�Íà¯ä°ò·>겪çÝÿ¼)0.;ˆž)�œkþá40ð¹†ïù¸¦Ï˜ ôxËúëµÈs”ªYÒÖkê6sÚ|Oû²}þXzL†Ë3oYOוéË‘^ ÒÖµ®ÜCäèD¿ink�@;.×·™ûhš#urÞ&}ÞXÚºœ·®oÎßF§Ö·­½ÊŸÆåLcÇÒòH œ0¡¸~‡? Qº½²‡'Ž€LäZ{\oý®¨—G\BÐ�U?iëìõ¹ @]è¥�¼R�-~ÉØæ�•¾èþÚ¶dB\qš ùX”ªù>éue-7u»N›"7oše™wþ&º)/÷!—˼Û˲ž'},!÷×}BfgYØÌ÷u�ÎÔ/×/¾,°¯ÊØ×bU~Z 4ð׉eÒàÇ hàoÀ7„-0V¯jÞš÷^‘2È¡\Èwüü]EŸ@Úõpb›_ êâð”s4è÷TùÞú7eb‹R¹"ß5�Ë�ñc2ƒ‹©Ë˜ºNo£Ö³+EŸƒë8ý\©Ça èg>�ËA–¹¬e}Úò¢e�)-PÀ”ÖœP×s›&éosì m6ts´©³Ì€€ ô¹Læ—¥–zásãàYÝÇ¥Ñ~5O`7¸gšytí£?©^N�ñ›d9ÏÇÉÔy¦–»¿–C ›òs^_6*·—˲©ùmmŒ�ð>}ئ?ërY·ét.ÓóÛÊXW_ïXÒ}ÿ�½¿Çb·C÷£€C[¼Úûa_�_OæIGŒ«[øËZË ¯î¹É�WûrÝŸ­ÀÞïúw¹Ð/yÖ‘ye­†ÂLjúÈðÛèßò¨£²Ð]#ÈeszŒ·Ì”ºæ{j½Q@?cesç÷zÆÒYOÈõÇÒQè•ü` Ÿç¯dÈ5Ì#·@9G~€^z÷2ø8ø¡ Þ´3D”%»EÞ€·ð} Ÿ ¬/ˆêfÞúBme2qÐMÇ€ìŒñèÙéK.“ÓæM)g~Íe3ß×Ëy™�†ôcY®7–gÙX¹œ÷ÚxìWNÀk;êÇ;ÞrŽ÷ؼøž¶¯ôƒ6À n¼AyµÀ]ÿlýÖí�ç¶{žtLØ+‘ÕüÈêߎAü9½¢§×›ÀÜåèGÏo’9oE—ó2o™éX›Îƒ:X‡ÓEw³v+'`7[U©y-PÀ¼ö=íSOÖSëÒ-NøÜ®>ÆóFà9U<ÑËx’ñn~¯Ü³€ HƒúÀâ–f÷#€ýeë‚®ðj'¾ ÈíØègÀ<6Ê<é]"½Ïåœî)ezÙ®éMuû¼¬3Ô�Ë8ýXzh@ìû?uûÛô÷ùûÚ¯¯ÿØþO­oßñTù§±@9Oc÷j5Y€É€ôÏß¿_\üùÏ‹}ðT/âYè­|wÊà‰¾Ñ/ßà‡(ðí ˆ�K×7ègê¼õƒx-§ãT‘¯âàœÄ €8ð¢»F—Ï4Æ+=¦ôÕ¼i/sÚ”ræCsÝÌ[–ÁW( ”^ŽÊx9ÇòY�„Õ?+ÿ³çrÎqØí®ñô�A"iàN0°“6¿– PYýß܉÷Š·�âœDTþ:àÇaèóQd™Â¯‹ô9çåô6Þù¦èqã³l¬œõ8¯hY ,ðò,PÀË;¦ÏfD€�·.½pÖv®ü'Š 9w¬Æ5*"àïÕ;é ô¾ÀåìPÞ²L­{ØhÀ�ã�# @<zøciÆè:ð9Mß-3íe9�yÊ;ÝÓ>/ êÇò\ÞyEËe�×g�rŽä˜çÉyŠ.M­oŠ>�ép?ßäÏöÚx«€[}èö·ß·ïÞ-n$¿??_¾$H7ÆÇy:e€¼w¼öõå;v|. ð¡·Òuµ8‘rú§?-ÎOÕ6—%è›Á�þšß…º<´çIœgÚËrzŒ·ÌÔzI¶¥—¥žö·ïcß;н|ªtßþÔí=7ýS÷wj}S÷×®§€×~ÉøÙB?¿¿ÿõ׎€¯r¾ê‹€·r nø2Ÿ>Í{¢�AzS`^Åç{¼Ð;^éSÏ×ú¿«Ýë³³Å�ÀþDí^þõ¯‹³¿üeqþoÿ¶x'z¡þœá|h€8¶Õï¼1Êćê˜Ó˜ßò1šóÍgºŽG×XX'+[²²@Yàe[ €—}|�ztŒXe_hµ}%Àý �¿×—ïþßùeq«Õ8Ÿèå©€Xåss ‚€>;†¾ÞXÙ@r³ßµž:ø.€¿S»oäœýío‹7ÿù?/.DßʸÄàÉ„æìKc|Ò9nÊcŒ¶Ñ:J—Y—¶¼hY ,PÀåÔyð¤0hÅ€v¨øßÈ'8Úø®ƒ?÷ ,äPÎ ���å�ó¦à}l¦Ð5…Žmã�º¿s·×럻ÿ�Õ?u§Ö7Å9öu”ð�ú‘Œ™IÀ<«ìpì¬¾ß ŒoÐÕ.ÀB7Þã (r�À�òˆ'Š ]6x#GàDuOD ÜÁQzãQB¥yÄ�ÇûîÞ¾�kþ§lûËÑ8S[WZý_‰gÛðgëÿðWýuÀžåŒa,m9´ç-3¥ß™wZ¡,P( Li�r¦´féÚÛ€N@<(`>àJ°¼û_+qòÞˆ¿¨¯ÿõ¯ˆ7rˆwÚ †S {†›å #À}Š·Š7rÓ9¬ø¹Ö.à¿ÀP—D­üVÿ§ê—��þŽñYfG6VÞù=ÅxÈ2oYѲ@Y ,0•ʘʒ¥çÁ0Æ£€Ò×øðþçë+9ŸÿùÏÅÝøYq!�¾ýÇ?b5£§¸÷ä>à/‚Çünˆ8¢§ºÄp*Ð熿«ÿú_Cÿ….\*BÏU‡þøw;ô7¾ùž®+g9óØ¡Êe�²À!-PÀ!­�ÚšzÂ?v}ièkYÔ�íwÀX×~|@ÀÍ‹�ây}Qv¸‰/VøÚÒ_ðæ@.@å<,”Oùø¾ Ošò¢gr.ô¨ß%Q»¬þ}¶þ¡ùÑ¿ØûtñÌ»²žÏå3éc �í�/íjL}çnêö¦Öw(»W;ÏÛå<ïã÷bzÏèI `²ý~§=“¹oøã�üçñ+õw�þ5O¼ùvÀ�€?î hÀ¢²P@Ÿ›#ðÚA`W�kþq·¿ôú±åß­ø Þ™º�Y6Æçræ¡Ä e�²À¸øÌíÄ�·üº¤å¼®ã}ô£58¦ñh @™\þq“ €ÿ»ü{ÿïÚÊ¿þü9nä¦Á¸q°]>à>v Þˆ†3Ðè©®ñóá¡s¶û¡rh�ëþ»>òG_{ÐwÿM�ï²–C+”Êë-À¤œ€õö™"§€)¬X:&±@ÇpÆZ*/oÏÊÿRà£;þ¯µÊç=ßüßtàw¢Àß‘¶ücU/Ïò«~ÜØ'ŠCð°W„æ;ý¹ÁÀ½�Òg—ɼe¦ylðÊe�²ÀS[ €§>¯¤ý]@o?%àI@f ÈY­óÝÞÓ*‡àLÎÀåðAÀ߀T@[ü ð‡¶–�D–Ñ^n×í�Ñ\Çõ,£ô¥ƽ)̽²;tû}{�_éãõ]æ¶@9s[Xúû?óš|–M`§Þ @æ¸:ø�.OÞ™¶ðÙ%àF>€XÕs=Ÿ­ýLU6t5ÝèÌmdÞ€ÍÑeÆèºrî{Ѳ@Y ,p (`æ£@TØÝ¶ jpÏ ‹œ G¾xd¤ ŒÇón‚òC‡(÷°Åïv2íÛ!݃¹Ó}žå™f}ðÊe�²À1Y €c:¯¼/=H¦Ù ÍSP‚A˜íýs^ ¬<òïÄS/6EWBÄnÚGƒ¹Û!m>Ó±z½l¥•( ”ÊG`�rt„)ÃKÖç±A öØÎà¸È'Æ£‚ló üÉ‹4@Š”w=S뀬Ïíš®þ,‡wÌzà­;˜úÙÉùÍa2랺½©õ¿6}>.Eçµ@9óÚ·´ïi&:OÆðŽ€+�<;¦–S™uP6G—ƒæ@y‚Û2Í�ÌióN›º^Os[Å—Êû[€ÿX…é-PÀô6-��´ê`°µS`€'ŸIÁN€�žòÈœ6¥¼uÀ÷¡m§3¸�ñÈ,ϼë÷íTº,PØÝü�2oYÑÇY €ÇÙ¯jÏdÿÙÕ ân�'ä|—£®ùL]Ám˜'½-ì)gÀ·ÌÔ:¢‘ú) ”eþOæ±@9󨵴îi�þOH÷2+@KÈà¾�wù¨Øý¸ëßD3ÈÃ;mšëvÍÌšôvmÄNЮå]nÛx¦îßÞÔú§¶ßsëïÔã/}ÓX €iìXZ&¶“pžèY‚'gè®ÑÝs]ÒY·yè¶h°ï©u¸­¢e�²@Yà˜-PÀ1�WÞ7ÀÎÀ èÄ3øû’€Mæº.cùµþLá©c°G¶Ž§œuÀW( ”ÊÇl�rŽùèTß@X æPÒ¾ÙjÇ /Cš`šMšÁÚ|¦=oà7%?Ǭ»ø²@Y ,pì(àØ�PëŸÁhªî>7}ý<~ƒ>² üûžæº™Ï¶0u¤,ü:àÏå²Þ}xt2<¶=Ûö�}ÎmõýŸº?SëŸZ_¶ÅüÔý›Zßc,?[ €ŸmòhIò?Za)X±@o_;€€� §(°,+˺ÌC7ñÎ7ÍúŠ/ ”ÊÏÅåÌx¤ "36ñêT÷6%mà7À÷#Y¶É`Ð{žz–A�¦~Êe�²À3´@94*3?a¥ªYÀ` °Ãà{JqËl¼>�ÜÇËzs:ç÷<é e�²@Yà9Z €çxÔŽ ÏÈCu¥oÏ ÞËI“gyæÝW×uêòÐÌ»ŒeëÒ–¯£}ýuåž‹|ßñŒÙ|ʱöý™º½©õ¿6}SëÒ5�ʘΖ¥é -à µ|ä=¸ìXw�gJ™Ì�Õ)YY ,PxŽ(à9µêóZ Œ�µe½#Ð+q9Ëû´åEËe�²ÀK°@9/á(ÖÂÛ{[~™±,P( ¼& ”ðJŽö±ƒß¾ýÛV~[þÔ‡ýÐíMÝÿ¹õm³Ï¶Ý™}û×·wìúçîï¾ö›ºüKßÔö:”¾úÈò¡,]í”Êe�²@Yàˆ,PÀŒêJY ,P( ”e�reéj§,P( ”ÊGd�ºàˆFîJÍ,ç½þ¹�ï¹÷ÿØÎ¡ÞžÇ~ÍþØì×÷gj{N­¯ïo¥ŸÆµð4v¯VËe�²@Y ,ð¤(àIÍ_�—Êe�²@Yài,PÀÓØ½Z- ”Êe�²À“Z îxRóÏ×xÍî±-M­ï±ýéëÏÝ¿¹õ÷ãéÓOÝþÔ×äûñõé~¼S·?µþצ¯?^û¦§¶×¾íWù¥j Î„²@Y ,P( ¼B ”ð z ¹,P( ”ÊåÔ9P( ”Êe�Wh�ºàô§rÍï±}˜Z_ߟ¹õ?u{}ûÛÒûÚãØ¯Ù÷ãíÇ÷ØþO­¯ïïS§_úøžÚ¾‡j¿veéj§,P( ”ÊGd�rŽè`TWÊe�²@Y ,p( ”p(KW;e�²@Y ,P8" Ô=Gr0úkjOÝ­cëÏÜö˜{¼sëŸÛ>ûêïÇûØkê}ûÏ]?žmé©Ç;µ¾mý¯üã´@íçq©^•Êe�Wk�ÞAyµ†˜yàåÌlàR_( ”Êû[ œ€ým¶o�röµX•/ ”Êe�²À °@ÝðâkÂÔ«�©õõÇ`ný}{ÇžÞf�ÇÞ#Ð묾©í9uÿ¦Ö7õx÷Õ÷ÒÆ³ïøŸª|í<•å«Ý²@Y ,P( <¡ÊxBãWÓe�²@Y ,Px* ”ðT–¯vËe�²@Y ,ð„¨{žÐø/¹éþšÞK+c{êñNÝþ¡¯¡÷ýlûÇ®ï¥ý¦¶÷K³Ï±Ž§vŽõÈT¿Êe�²@Y ,0£Ê˜Ñ¸¥º,P( ”ÊÇj�rŽõÈT¿Êe�²@Y ,0£ê€�{HÕý5¸C¶ýÚšÚ>SëÛfÃckï±×è÷ïcÛëí÷X}Ûú¿-¿ú³ÍB• ÔÀ!¬\m”Êe�²Àƒ-Ð;LVTW,PÀŠ9*Q( ”ÊÇb�þy�D9óÚ·´—Êe�²À#,��€Ì?BeUm¨{êT8J ¼ö?ú±�[ÿžúûÜ'u?þ§ï±õgnû—þi,P;ÓØ±´”Êe�²@YàYY €gu¸ª³e�²@Y ,P˜ÆåLcÇÒR( ”Êe�ge�ºàY®ù:Û_Cœ¯¥ç©ynûÌ­ÿÐVïÇóØkäÇ®ï±ö�z|�íÏcë¿´ñ<ÖÇZ¿vŽõÈT¿Êe�²@Y ,0£Ê˜Ñ¸¥º,P( ”ÊÇj�rŽõÈT¿Êe�²@Y ,0£ê€�[ªŸÎý5ȧëÉxËÇÞ¿ñ^?\Ú�÷Øî xøÈ–5§ßcûóØú/m<�µÇK­_;/õÈÖ¸Êe�²@Y ,°Áål0Ne•Êe�²@Yà¥Z €—zdk\e�²@Y ,PØ`�º`ƒq*«,0•úkªS鵞¹õ?öš½ûiÚ÷wjýngWzlýÙµßëʽ´ñ¬gÉg�Úxœý¨}oúÓ ¼eEËe�²@Y` Ô|ûH³–ðH¶ê÷þÓ²´”Êe�Mhsm�ÿ&#í˜WÀކªbe�²@Y ,ð´¨…Ö´ö¯{ÖÛ3Çõ%+g¡?拲±�çÐýëÛ{êköýÉvìýëû»-ýÒÆ³m¼3äç¹»v Ö¸vÖfƒØ'ÓÊ ¦?¬åªVVY ,P( <Ä#slžƒ¢òÕ×)àçS` -3r‚þ¬½$e�²@Y ,ðX ôspvú<·µNîüÿßÞÙö6±$Qx7 Äòÿâîì+Á ܄»õŒ}†ãv��ØN2Μ–ÚõÒÝÕ=gÊUå± ‹£)ú·ü6ŽÒ:ܰ&E@Ðhƒ@'B �Ï­ÜÛæ6szëž´.¿¸ýíÅ�¼o­Lòß‚$Š!P¾u"K§1ÓžçØßœÚÞi®òp+OízGbµòTx”%ò6KìQµ>O¿Ýî€ÿ М”ÇÅ1Ç8+ƒ@X(;á%‹v`I¬í€²K•`��_ÓZY+¥’ýçÔüÐ ‚@8+wEeMrK5j¤00îÈÊÁX6V§²‘B@H„� G@±t"ùn8+ÿ–ßÜÎ ”ìwR9¨öv¦3ë)"P>ð/kòšÚë=ö7“=ÐÀS»žca{ldUòõB@|·u�ÏÎk|Q4¿ø}»q}qÝs 9V�ÞüøñãÏï«öå�?þøXß9^”ãbz�ÌVEµÇÀ¯¦lê™çÍ׸^¼lH¾+­7Ô]—ì�ì™önЙpìžÇ®çH§°á—v {‡Ú(¿ó£ğ†o| {ÇÚ8v½_ÏmùûØó×/BÙámß™ÊïºäzlHnh ý5ÆÚ«««�^¿b‰µuê^òg?õöÂü,ηó%/½ÀÆ„¼¾óÒA§º'${^|ýúõêÇŸ_¿~ýÏzc]¼|ùòßE/kì²™úwÆ ÞËñ¹æŽãÈ4çWšÓ½ÖÖ§3f–0ó“ì}]Ïä†6p_{ß—];ú½°å·ge÷6‡½¯kÚ·÷±ÉzÊþ}^Oùíèâ¡âkï�Çúã“~�—ïúojÊ@«øïû÷ïÿEŒýòåËÆ›Î^è¦bv uû�gdÂÒÚâ €µÓ‘õ¸ñmö“NNm{ëxƒüéÓ§«7oÞ|º¹¹¹øüùóÕ‹/þQ{]Ö÷ôúúúɿƇ‚`] ŽÆZ?ô»¡—|SúkhÿûøñãÞ¾}û™X[æùð¥ŽýÁ–Q�Û¥“Ï™]aÜcí“m‹+¸“Üèr*ÏPºñèàE‡ékú!ÙŸ¼{÷îªÞŸËA¯^½zõéùóç/J&ù?«¤ÿ|ÍAñz2 ¯ôd`(j�ñ©|ušèJšñë&¼3>hŽÎ�ŠgpÊñˆ:ì@+@‰¹C’†ª—~ø„_2É^I UüYúkèÏŸ?|ûöí{}¸ú^O(ÚX,yØ‹ýÖ½ÈVò÷1Ƈœ00 {!É,ì’W—[ŽE2UB?&߃ç¾(<S¯?_ë¡Þ™ëcȲ3|=P²ìkoQ�ÉÏXÓ‡&�äÐ ‚Àc#àÉD¼’-Ô“4¼>Á‹¿^ë ê|ßõ.�ÏÞäÖ6{è,ΗzÈÿ:/òb iÉ�›îÉTN �; :§×q6ÆÕ‹šì¹?6 ${¬Uò-Õ–Mæ¥� 戀bgS܃WÒ�ŠŸJØ¢½ß&wÍ…öìúþœ¡•¥ƒ.²-½ð›Žs(¹ÊQzTކÓ)ák�dÙe= ªu*”ü�²^Éßm¹}ì¥� 技Ç=Ψ8J ôX¨˜õd¯dßRóõÎk¿––Ù¡¡O+R¬Ü‡ ɺc´ÎƒŒ“1Ï)©¦D-ªu`Í: Öè kTÀK–­–Ö”´ ‚À¬P,%ö)Š¢“ž˜Øv%ôâ¡íñ‹bÇ;öZÛ­Ìœ´ ‚Àc"@Ìó&Y±êñP2:z/±{ÂWàó´¶¥¾'|Z�› ¸£�d݉p0OÌ»’p»Y®OþPl¨hm˾hMÝ*Ð¥� æ„€ÇQñЉÄAç%+>Šz’‡o g�ìȶS°iet‹o)VŽA’ÅA<ÙJvÇ�ÇÑ|^‰ÍçË1¡žø•ôõ©_»Þe¸Ý¯•5/4� ðXû¼¹¬¸è‰ºåIꊙžàwñš/ª}D9�ŸÃåVÏØ¢Z €ÕíÆ<©Jv �“Ñ|îJ³zeNÛå˜81‰^…€’¾(6½—¸µÏÔ¾ÌM A Ìb 7ÉPâa/F¢ó€y’Û SŒ•ý21&tÞZÙÇçؾÕ8‰V➎£y“žäN“Ì<¼(¼ öPò-ÕXˆ‡ª¥¡A ÌâŸ7ÉŠ‹N‰�’Ὣ@'^ŀσ—�)ZS†9д5‹-ê µ HpOþÎãdÞZGÓz (‰�ÎZñJö¢*jÊdòOâ�´ Î b šxhÛ•À�·]Ezç{ë´û·<º±‘ FaaÌb îóDà.Ð:2ÎFë%e9T _ ¾•Ñ÷ºÛîíáãðiA �9 ÐÆK�Iz§ðÞ=‰£Gv�ä)ª5nS¼Î±E—œücÑÀ–7¬8 ‰Ú6œOIYTNæ”yú„¿�²¶d¯¥‡¦� Î�¡â�zÌ„'nJ'¾GÑ©û:Í• §`†œf¤00ŒÅQHÄSƒ£‘Ø¡JØîlZ Õø¶ÐÚ}´–¦� ÎÅÑõ¸)¾—È¥ƒ:¿k�Æ >­A Ào@p%b´.÷œ'TR¯u$z­gŽ:óÚÂA{NQl¦� ÎÅÐEw›~Hâ3í)üZYúÅÑÅÍïp %b9ƒëzŽ£äÏ:Æ{É[Œ{ò×>¢š¥MéW£y A Ì�—=^:Q%xdéÄ‹¶s¤w*TеmÔ-ýû€YìÜzÅú¿–º—|ÑIßã¥k)6[�äÞ~š?5&}hA`îŒ ·ê<çv¾×5¯7&�ÏéñèhÌZ’ÿ ‡Å?XûCKp’´·ÑyÖÊvŽd%w­w:5¦}4W2´§óñðA �¹"ÐÆMÎÙê$C½û\×÷æ·s‘½i�ëÏç €¹@ó€%_Q׉×T]c-mç2®¦1ÉОÎÇÃ� æŽ@/ù¶:déZžëkÇZYHß®ÑøðÏ¿GaáL €ÆvÌl²dè¯|¼µ¥±v®äÐ ‚À¹#àÉ™kqY|K}c>î<óÔ¤Gv>É_­i €Ä=E€¯Pâvê|oî°… h¾T­,}hAàÜØHÈu1.Oñ\³Æ Îû¼7ÍtùÞß¡Yñ)¶14�" �©D-ʸxQ×ùzïÍiÇ}mø ‚À9"°‘�ëöÉ\£Ï/êã®C¿Ñ’ü7à…#ÛÌ‘E€œJè=}Oç¶Â� Î�^¢î鸾žÞuâE»˜$ùwa”)¦±YTUÀ¾)6~—¹¶l|ràºðA �§ŒÀTâžÒ w^ã#Mò¡è2)º°l*ïð$`sá~i_Á°ßBf� Î��I|Ç¥í\—俹õP €ýMθEa0¹Vøï›�ñ ‚ÀG`g"ßwíIôûšçOÓ¦ˆÀ ï(Ç?ðØY‚@˜ GÅÀÄà¹àð(çÈ€†ýO øÄÙ.� ð0$¡? ÎÚ%O„ÄÑ8ø�m‚@8+þv¥xxÌóרól‚À|Hòœ{“àqpÏ®A � �ÿd@G»~üÁþIEND®B`‚ic09óV‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATx콉–#É‘��Ü*kíîê&5?) GÔPsþ÷ÎH"‡d/Õµç¾è~–qQÏ™db1?ÇaîækÜĵp÷ðØ¹¾¾•{xvä¾Õj±Ø tߪ×fœÊ:ŠGD`÷Û®¦ �B ( �Bà‘(à€¯§ÿG½šÜ(ê?´Q§³æ‘(à��¯×^Ím,õ_ÚØS[ö@ìÔTÚ×!½€›P­øºSP¥· �;Íý×Z�íº8êhï†@�Ü ¯‰ÜEþpT¤xîd0/à?úÇTm�‚@�Ìû7‘;Ý”R“÷-—ª¨`!°uÜe`0o�lÝuSÜ P@H½#ùÏ"ô¡ô!}Û�ŠÛŒ@Kæm¼Å¦Moã£2ZÈ*¾M”0ålß�ü3�ç°kïÓ‘Ö§ïÓ¹ž’…À¶!p‹´@Öåp‹MN O”)ƒ`ŽŠl8e œà¯$ÿLâ9ìÖZݬ¸Ë•,¶ �LÚ÷P¼Õ#ë[ÙW—ËÔ¨À‰ l:eôœáòo Ú¥¬Ï2‡�iý´p›F¼\!°Í˜¼�AŽ;l餋ÌõSl ™˜9äwxš$Ížÿ˜ÃÔÕç\W¤qO(# ¦Òm5Ð�Å;’¿ÉiOM[Zgi=Òº.ØïË“óW¸Øt&Y›ãgÙ†‰÷ypËyouèk]@ P?›†@�ôŸQtN5y£ë [×Êœ¿/ÍéH;òÙå°u% �mAÀ„ìãÍqÂŽ÷…­C^uy³ŽÿñÖ¡›H«‘€¢ŠoeðO—K'³/ŒÎz‡‡$»+¶iT�®M³‰#�ÝPØé% �MG %çw™=˜o ŸÿSÎG:.ën4·É÷‰š¸ NiÖ�­7¦�¿ÏjKÄijϤî°eÎçpN£ ô¸!y“Z¿…Àv#$œ h‰Ûq?ÿ3tŽóÿjã6Rµ·‚”» CQ� @`ë €tMÀVå8áÖg"w™ÃCeœÇmÌ’îSÉB`˜ aà8²õ&|ô„ùoÎÒy¤—Ÿe PG¸2ŒDÉuG  €þ3˜ ™pëMàYî¾|ùrïéÓ§{WWWÈ] ²ÈïðXR'i]Ý,2‡­“´ž`¹B`ëÙŽ‰W?îÒ®-ÏÎή𧧧�ù�÷ÿŒtÂH׋Ì^Ñ[.ò–p —R¬!eÜ>iÜp¾Qd™ =ñð/^¼ØûöÛo~øá‡ƒgÏžíËï]^^îâ!w¤ ƒ[¢7ñwrLøŽÓ9÷é&V¿…Àv `bfþýVØÄ�ÔÿëêÓ§OÇÇÇŸ?¾TøRá³!ÐÆ³ÀÌÆ²ÏÑò•ЇNéÖ�­6°âgœ1Ò[oÒGïð®žø÷¿ÿþû'x�îËíÊÙ°!ùg ‡é‹‰ß�]ŸÎi% �MA #ö‰Ã±yqqAÖé¿q©¿Ü™þrç8òäÉ…*¸Ôˆ€IÉÿ5ÇóÛ¤oC‰·^Ápè(ùÔŒøß$×o!°>l­À·ç4YçY“½t·Â"øýÃÃÃçÏŸ?}õêÕ3Ý€ }5³«Ó;&ÿNFœú!v{$œ%a;§9^²Ø$àÓöx¬Cê?•G<ü?’þâüüüTÿAü®ˆWqÈÞÞäÏ ]–¹I·oâ§œÃÎç<W¿Ê02%× �­5¦œ¥ _¥#‡|6ö”o÷w¿ûÝ“?ýéO¯~ÿûßûúõëo5"ð@dS�>ä�.K¤Ñ“»eÖ¶ËéÖ-ZêIjÑUV}…À]óã°&zÇ‘Y§ë>ˆ×:Õ1ŽchøÿäèèèøÃ‡'?~<Å¿{÷îô—_~AÞ�02ÀÅÝŽçŽQ?qò;¬à„sʘ€¥"ë€@7gɤïsæx–„¹dä/ÝÞoûÛ§2¾ÿÃþð{¿;88øF÷+È>ŒÉñS¾Ãº�Mèhœ4dv}ºœ¾ŒpË@µê4}@›f¢·^ÿƒ0\Vñ _¥32p¡¡ÿc{‘ÿg‘ÿûÿüÏÿ|ÿç?ÿùýßþö·#ý'%Ø“!p®2ùlò·7ÙlPÆa’hŸÿk Qní(àæ̉k‰×qdö¾qŒÉ_é{šûö_þËÑÀþY‹ÿ¤)€t @÷)— ‚W<ê’t¦Ï9_Ú¢uêû¢«¬ú �1º–Çaº&þœ‡4â]Þ(œãÒ3÷,r#à›o¾y§…¸?ªØÁ¯¿þz%càZig*Ãô7F@þ_+qŒi™ì.# ੟M@  €É³ØwC°Î$ž%F@xæþµøïÍÿÿAòÿ×ÓÆÿ‡ ôð SÏÊ<áÓ—i®ëî´,•VÜ“»%å°+Î:ÂÈì)ªu6z¸??ꌀ#à?+Ï�Þ¸Òÿ‘§ÿ åÙQx$Iü7ãIDÎä»ùõS~ÎG9äúbÍ(Â]mOèÈT®X5Ê>#&þ>ibZ�üD7–{{{ß*ü…ÿIU›üÛÍp«+’RÀŠœˆ í†ùÑ’Ã ;�ôì³1 ëõ\þXy�5}u¬|ûz5÷\#sgÿò/ÿr*ý~7-ðùÿøÇÑÛ·où_³ ýK5è uk¸P¿úRF€)¹²”psj¸ àÚ›A7ñg‰°ÏJ/ðÓÍÇõE¥õS³gŽ�€î+‰!€³A  ÿ¹}àO0 d€#à·úOòTðÝwß}«©€_ÿþ÷¿¿ÑÓÿ¯'''#F ”ÆÛíÿ<Ç󨀟êm´FzÊF¾2„D¹•F  €/§‡?®]¾´a“ÿøé_…Æ+ýuó!½\!PÌ�@Kô9žÃ¹ªLþè;#€Wnã~&#`OÀµ^¼ÒZ€E_i=À7z1ç™ì��Ÿ~úéì矾`«íÿ;ßܬ‰ßOÿH“¿eÎKe‘’+‹À¶íŸÝ7Ÿ0ÇMúC FŒZÉBà´D߯sU&ëzF0¤ßáh:ैþßè?º«Ï´^çƒÖ°`pGú�n=€«ì“6rÚ,#`œWý©é€1X%¶Ýà\´F€u&ÿ!ic F0xú×�'^í{è“ÌM³\!°Édò7ñ'ÿ;Åù_ŽDü¸=‘ÿ¡þ/Dú;Z øYSŸÿøÇ?~V¾í ðYk>kf`Wo äÿy £ €öO6Í —«…�-¢_ ¶ÒÀ"oÐ÷ŸµÓ²tºIßr< àOpƒ¹ÝLÓjE �B`&&yg$ž�ÓÉÿ/Œôšx®5ßë5]îêUÝoÞ¿ÿF ßü¯ÿõ¿Þh*€7 صÓÿuK7EÜëÛ¹3Ùpšeä¡Cê‹ó;­d!ðhl�ÀŸ°CÛ2ƒo]–„³7ùOHˆß#]~æ&Ss¹™ …À}0"í©Ça¤þ‡ñß“€{ÿÕgšø^é»ЀÀsÖÄš§š ð¾,Tö¹÷Œß(D8» Â熠>Lèræ ‰ÀÖ ¸íŸ•dëü§î“&ÿ‰€Îpù¦©Š…À]hyÒñ, ÷ù®Ö0Ï�|.`Wáç ø�·TŽi€íÝñNkŽº ‚0Z‚v¼ï¿í4šœ9 @&ú¤¶s9Ôå �G`Û € xþsç°ó˜ôûäžþÏ1 Ì1éBóJÝæÍZù �­G åOÇ‘�‡gÁéæG‘¸YCùZðQSŸ´OÀ'MáíhÓ ¶Ž5Z,x_Œ1†þÌcÒ§sêç8~߯ª\!ð5”0ùgÍ\ÂÓ<†éa´Ãÿ_sRªl!PÌ�€y´#~!]K—ÞÅi੦^kQàïÿõ_ÿu$ùJ‹ß°OS2Lä}÷W‹ÌéYOù!Ä_FÀ<¥(ʸA:ÿ‰ ;îp+'È_ùcÏ^3Ò�†ÿõC�¿j§ØjLþ!èR:OÜLŒxõOSšxúZ‹Y Hø?ú�~üñÇö Pñ�n=@û¤î8t 8®à„Cßy˘À«"Œ@À›Åg’¿ª/ÔMæ^SÃݨ”B ˜…€‰Ÿ|#ïŒrøã=F´QÐk�<“ð½FXÀ“ÿ‰ì€w2Ž0ä¨d‚´›x›F;�"8žå¸\– ?$e|A»%zR†Œ€œ7¦tó˜Ø »á°à'ü—f*´Œï"êÚÄ:L~›xlÓŽÉÇ�Ì^eû§(|‹Ü‡üEüO~Á›Z øAßøøÇ?þñ£t×z5ðó‡>ëuÁ�¯X@[í(:\78Ôï#!PÀ0ð™ü�+ë�§t³©'£T²Xµ �êGv$~K’Ïe ^Ìeoªü²&@o¾þÍo~ó;•»–|©M‚Þh:àÍŸÿügF kÿÿiG¼Õ¡;‘Î $G~õ­­’‚@ÓaöŸ;ÿÑž�ºgLŒL¯¶R �B`™@þ8¤}&È–…»äÑHÀ‹å^S„5 x©�ƒI×>'J?›²?@áS´uäk �‰²ôKý�е•T¼XeÌFÒF9'H¿‹Ç(€þ³N›]cå( �¹'F^x‘°ùÑz˶BòáÞwYò�¿+Cű0@áï4÷ÿ”µ2^QNŸ>ÑÈÀ;•?RoÔ´ãY:L“vµ&ÀH”\ ʘï4˜Ü§JÝ$b9_µ›“kè&¼9G¸^GòØçÂ�æè_Î3Ïz‡‘xœe_[ÔßzçS¹X€”£ñûþ3É'’Ï)§Qö øø?þÇÿˆMŽ��Ù*àó›7ovøœð烺´£®ÊåèO�•’KC  €ûCkc€‚øsUº�ðΪ …@B€ÿDkçÿ‹uNÏzë(c=2{××J×k=q—C§°fv¯µú_#lüZ‹ÿoÿöo#¬ ø•o0À·(âº:9+ž³ä PÔŸ22b^8e Cj‚’.étnf· g*Y·€€íLÐÖ™ ³Þ:çAÚ»§9N{t}uH­bÑ™=$SÝš€‘¶ ~¦õ¯ä™&ˆ5ZÈ>}î‹EóåãAm>ò0uØgäòÑ)õwB×VVñBྔp_än¬“ÿñëÿúå®vû)áþ-VÉB`ƒ¸áß‚æ0‰›¬‰;l>$Ýeœ?ÇÑÙQ&{òéißÉV:난1Dü¯= u¯ÈÌ>¬ Pðh\øæ‰�r­'KÖ9nò·Dß:Ê…SŸj$À`”\(eÌç˜ìU$ü¸Ý@zõã +àX®Xw½¾ g;Êæ¸õ–¤Û£sÙ¥~¨Ó‹ü𔓒Ek¤?ÐZÂOdÄš€—/_Æš€?þñ�ŸTæš5Z$xÄ>Ýš€öOÕÆ©?;FÊȈTøA( îY\J‘§õq#鯲´…@!ð5tDUô‘=:ûiítDäÏnÄÛÑê‘àÖ<Õ“ÿw¯_¿þ�Ö\kmÀ ?ûüúïÿþïó®  [í½Å–Oßt€ãÆ2Q§ÔWçwZÉBàÞ”pºöz;Çí?qäÑsž²}õ•®(æ@bÆÁƒ&ûY2WK9{×ù·^iªvgGžÒXðŒ)};€}µàÅ/¿üò”ÿ¼¾p*Cà<·Ó…Ûûñüíâì7Œ ˜ |ú¤6't*[®¸eÜ6ÿ©‘cÏ�àîUU‰B ¸+âÀ{‘neø‡ÄÐ�? Š0mȱ¹×5#ŒÈ±O€–~+ÿ’ÿ¼Þ dMÀ{å=¦@ç h“´Ã9î|Hëk: £RáA  €a˜Çä®,�NîÝ i¸·•Rl8þ@Þó†ÃåˆS6{çAù§ºU, �X |Ü+ŸKw ƒàù´OÀ'M|úÃþð#âèèè3ëjM€Q-¹ê”°êg¨úWAø�.bvØÐ sZGÜc#ÁyZé:�Cu22Ð壆é÷¨GÆÂs9¾;iŸ€ïÞ½óš>$Ô7§ß÷ Ñê(×êh2»B}®é€ŒJ…ïŒ@w†¬·ØYÚÞ‚¥, �aZbv™=5äxn[€ÔíIã Þq$Äï:P˜ÿ7÷Ì]v Ô”À÷äUø)kô–À¡²]ÿüóÏÇZзO@{� ž×(:v}‰ž2ˆŒôK}˜Ð�k¨@!0�2f4GòøO­ÿá8Ç ·ûP¥+FÚg}“þ¥Ã¤Üv®/Œõ{¿�µ4…@?eôã²tm¾!-½±jàÎ<öùÙöû9øOÀôìÛì4ô„ûõÛ3�}.ƒ ´X  üµ[Ó_°«Ð”0HwÍ §\!P|=ü—éNTHšÓ¶$£Ã–…q½Hžþ1œ×iÄ1úœÒœûtß`Ÿ€'ZðBkâÛ2N´&€}Úƒã¸Éž¦ÎÄŸÃä±sÞˆ«Oe™’3(`&DwË0t³¸[-•»(Œ$ !gIZ&iÒ†¼ëé“Ôázl¸nÿ—©×aç•¢e§@%í^3  ¹ä¡ �o´iÐKêaŸé?(è}Lö&î¾øÍpÜ 6BÙóãúÀ¡Œ€€Ju�2nc²�þƒ7¤…TºÆ•€G¹ùXu¼L„óÑôœíñÎ[?åúò¢w�[ÒÊ´Þz ‘‡r¹…a~ˆ6ôL(ßsÉ}�$Ä>ZðI¯~þïÿý¿³O¯j«€£¼& ÚÑ��€Yò �PW PnnʘªÊX…¤› wZ»äÅ!³ÏºÈ0åÇDù†ðm¸Nt¸¾~uyvEþ, i ÖhQàÉŸþô§ëï¾ûîù‡ÞjZà×ÿø�ÿðš÷ÈÄÝgd�óM3¢‹ü¨O5`„Kö"P@/,¥, �ÇFRí#Û¾~‘×Îadë�'ËLþÖÛpû&§#�Öéè@ ÝËPöݬ àÛL h›€çoÞ¼‰5únÀ©òÞçÛ™øs¸ëB Ññ—�Ñ©ðeLÀQ‘B X ÷LÂ&{úï0Òñ4?.�´' ox4 ×ÕgtUÒPì@¹nàZùµ€5ì0Ò+�'2 üí“5² ç8EíÐÓÖÍ�Y{[º|�ÜÆ¦4eԥЋ€oœ½‰¥Üz–}}˜˜gM?Èëþ ³§|›6T§ ¤Éߺ\OŸ |žüÏÎÎ>ë5ÁX@}¬ àÛÚ+`çŽûPÉ·#&~ ‡éO�€X¹ ʘ€£"…@!°Š@â�q–ô³Õ‘nOºÃÈ!G}#Àžt\[_.—ëW9^ dJ î±ZPÈnÁ¯Yð?ÿçÿiqàs};à­¦~ýË_þâ5m'sœ0žÏÛ™à³à2¤å0}/#ÀÈ• ʨ ¡(V7“/áVGçÑÝÕ·�ɼ cP÷t?a0äzÜWº¤0SH6 ÒÐÿ÷ZÀÁ'¬ �?¤¬öÈk n» œlÙ9=¿Ãmç�ò:†22’[.`Ë/€:üB`Õ€xM¬#³#n�ÖäsZ.C˜zíÛ¸Ÿþ‘äq}­sÿ’ž2ù�ßë× Àí ðJžO _kŸ€Ó�5©ª[ÁLê„iË€XRÈùÐ9Ìq”:ån†§ ‡ÍC€›U¹B`àÚn ××;²ÏƒƒõC˜¸N¤}6Lü–ÎãrM½�,>꺙 ]«{*k´[à‘¦Žþå_þå3e{Ö¸Ê1ywŠ6î|Œ`�x4Àzò—`4Jލ€1( �uF‚ÏÎqŽ;ŸuŽ›ÌMÜH¶ö(ù\Ÿóºì Iç `q › ½xþüù÷2Nþíßþíš5ïß¿gMÀÛnM¤oHRÖ^ÁpŽ·ŸžeP8 G�Ü`¹µ¿elí©¯/6ÙdlrFâúⳎ:“Èm0 à¸ëËmZ—ê¢C{]œiö ø^eò>횀›ƒpeý²o4`È †‰üj¿Œ€~\·B[ÀVœæ:ÈB`3€t["ö‘’Öúœæð�Ìäï××g´õЯnèŸ$<Õï+mGéÚ"àI¬ S·&Àß  „=AÚMÜémž>#Ày\¯ª #©Œ€@bû~ÊXÑsÎ�¦\!Ṗ€‰y^ÙÖÚ=™‡1‘Ã?SyÀmx-@[—ã‰ü©’ÅG¤©ö ØÓ[ñäÏ>¬ øçþçñ·diŸ€]6&šâ2±çl}Féä/# #µ¥á2¶ôÄ×aëŽD ¡.ÃQ¯ÉòÅp[´;Dþ΃Ì>ôWu@Àܯȧô—Ïž=Ó6ߟjŸ€+ÉgÚ'à�¾ðöÿüŸÿ3zûö-d>ôT`BÏ{({¸YF™Dú¤¾,Л¾ÔïŠ!PÀŠ��êN!P,x6ûyk6yÛð婯ϠŒõsð(dË¢À'ò»x¡W¿õêÛÈxÆ>p2ûÈèûvÝÁÍ"í!#àVYµWF@@º?elÇy®£,6¹�pÑ·®O׿qÜäïâ´C&zçEŸu}ýqÞNÒ¹Ø'@’/²&€�|7@þùº5<&Þ9¿õNC:-ëúŒôÅá�PÿÇñ\I…7 �2è|ÞåÆó@]Z«f ¿‡=]«vÿçüOëé­7bÖ·qôvÔÝç!}n¢w�–™ü©Óy]–];»¶nHš˜‘~òÏmßõ¿žëÙßjVõyD€)¶ ~¥Y€~ó›ßœQVkžkàݯ¿þúöÿïÿÍš€yžÐ¿ü—ûFH¥>ç�º…WM|Ám#Celäi­ƒ*6HÜD<ëû¿O×ÖCýn'7ùÐg?¯!àzڶ׃]¾³_À%‹•k´iP¬ ¿ž5k ì>ƒÀ›µiCFÕOäÕ±–*ê|Ámèá=Îaqƒ(WËA€ÿ„ŠËáÜÚ´ÿà´4×kÂö€Gܦ‰½Ã¹}‡s}­Îq¤úİþ¾û¨ØõŽòv€b�`lÜì@Q€€Ðíˆg�þ,縑}F€óqs8úF‡&‹Wl(`Ig‘›LöKjfeªåXËmË>Ÿ³ø¤¯ý¶ yZg -K¼ÕÍ:SÔkŸÉßõSŸ‰ŸôÏu»­Ìyº0ŸÞa$€z»i‚+Õ»+Óß|óͱ¦ŽþÛûoG¼•à5>|˜wM@ÛlŸ@ȾŒ€­ Œ—°�'µ©ØD Yéë« †Þµcð~�¿äkdœýë¿þëõwß}÷LÄÿV¯¾ûë_ÿ:ÒÚ“v®êËÁßhÛ8ÚYFyâé¿ëS�€È†¸26äDÖaÛ€ä›IÓq¤ÃÆ�8Îi‡ràÇu#ñ�ºÉŸ¸ëBšÜ[âoã4åzs³YG¸ñã5 `àR¯ ² p¼&@ëÂ8ùŸÉí� »o£ º4d�–ËÛ0™Ð‘©Üz"PÀzž·êu!°µ@¾�e+3 ¤á,s8ë"“~¨ÏÎa$>ä¡ü<#®é:³nF8F”gWeYÀAþû ?×>±&àÓ§OgŠRÚIª�ƒéód±>e�`Ÿ`P¢mÐñ×Â@ƒ±æ² €5?�÷í~ßMð¾uU¹Bà®Üõú›E Ô—ý]ûCþ¶ âÙ»ÎÜÎ4C Íçò¹-·™Ûé±&@y ˆ~h Ö¨Íxò×ÖëÛGjëúøøøèôôô(­ ¸±‚¾4ÜÆ¿¤Ü„úŒR0ʸÁh£~ËØ¨ÓYSFÆ™ˆ­Ÿ&MÈäɤœË¸>“?ÇH�Ã9_Øí´²/o§S³;ܯ)£§þoÒ>Wß~ûíS}4èkȯ)ȼ%üYqŠö•Co#Àap­‘ÐXcWÀŸ¼êz!P,“²k&n�8o  ŽC¶�Ë÷I×צ éiBilL_Xp%àLú+ÖhŸ€Ã7oÞÄÈ€$zö˜EøCkTtâÕBâvžˆ¸Ž»Œ#³†² €5òªÚdL™Ö÷•™fP׬'ÿ\'ùÝ~ÖV_B€àþgññk…÷X E‚± Pß8Óè@ß>Ê>v™Ä Û;CN·i}­ Ȩ¬Q¸ €9YÜ\Ê-�mÇwˆH–‡øæÖ̵4ízšfÌBÅç©%ëSùX §ý0$!ã—ôKíÇ}�5ZÀš€X¨ø‘ ‚cù‘><”ªš¤î¾µ.HzFc�dkt²ª«…@!ð¸˜ü§ôÐéYæ²C#&zËöh[=qŒ9Fž(þ �žú/4%pòúõë‹îÛ‡Z øž5ÿùŸÿ9zÿþ½I;7‰Oy—H^Ü4C ×ùu¼5pƒÛÊþ–°àSã?ü‚«­ê �Bà‘È>ëîô<�»ß¹Ó¬’9y:òGS]¹=^EÔ:€ ÅY°§ïÊ ˆi­ 8“�׸ZK¾ã–Ó:ÏDYáPF€‘YAYÀNÊ�u¿„¦ªÊB xLðCMçtè|oèˆúVqë-Û Czå³ûh À¾òzMÀÓ9Ö@Üö½‰Ü:ǧ- tž‰Qwí‰\‘xK:üÙ³_R3kS-X”{<ÿ)Dõx |eËwù?·x·!�eÛ%ãf™Ó³Žpã½& æHé¿êúŒ10Ò·Nõ½€“ßÿþ÷ìÀ¾ÇZ"Àš€�9×ä?q­ È'gMÃe¬é‰«nÛ„D‰-ÒÍS_G ã9}Ú·î.}ɤï�‘Ô•GnëÎ}%œãmÞ.#ªÿqµu¡í‚�øá‡s…¯^¾|y¨o¼×'…ßÿýï÷š€¶*âi¾ÉÀ 2H³Á'N}©‘€ÀÇŽ–ðØg Ú/ �¹€,ç ¾¹êj3™T-Ûtâ´�rÓÒ\¾•6 (;Dþ”ñq·ý³ž<� �òìkQàHÀ™ÂöîáááíûÈ8ך€i¯ Y^Q—ê2¢y~ìtœeŒ�e¬ÀI¨.…Àã!0…D£S�3Þ®�[O=9Ÿõ–&û>é<­tßZÙæë‰c°è�{<_ŒÍ‚Vó»Zä¯)�3Þ'¢ïó|k8NÚpIÎyHwŒÊH =f° €ÇD…Ûžv#[ánW×V�E_?&ÀyoÑmç6‡êÒ粄�¯Ob´ÎÇ=KRŽ<ÉÇšÅy ÀúWd“�uš÷?Ó”À©ÖÄ>§§§³Ö´DŸãy€6ršãe˜Ure¬ÒÙ¨¾…À\@ ��¥ åx&Y‡Ég’tØegÉ\yÛ8:÷‰pŸs™¾Q€ik¨w𛕮²»ÊÃ>Ï»z.ÔÞ©<òúÕ«W‡Z ø^Óf¬ ˜Ú %zDÀ¤ïü9#,j$Àè<’,à‘€¯f �Bàî@ Cd7-mVKÔ™=ueׯ�Ö§ÏýkÓs¼Ï ÞÖ@—ë$ž]NËÇ�õÊï) —¸ï+ýRþZýØÕ>Z à5ì0mM@n>‡Mþ/“¾óù;¢¾”`0A–ð W“…@!p QÈ-KjCgGÎÒú,�ß2§Ý%<«�œžÃ´Ñ¤£kÝP³žpŽ7uØàÛOÕÓAÐ Ètk>+í´K'Ï`éâ}º›ÔÉüÑF—à2œ‡9Ge¹–e<0à�Õ7–r…@!p7øßôýwZ]K¼9�4Ç!wâ<åÛ¡ËOýSÆžy|‡]Wn3‡©·'Î Ò�ùÕq­vΕïJá°8´7À¹Öœýîw¿›¶&â6yÝTHÿr€7ùs^Ò‰»Ž­ŒòЮ €‡F¼Ú+ ��E@<Ç;Üw°mñÖÈåz='�óò‘ÞåÙå«� ¿ °Œ�+­à5Á˜øöÛoùvÀÖüøã�ך0¡�I[Å2©�û €ó ñ”Eæü9N¸Œ@x`WÀ^Í…Àã"`òµœ§7óä%äê¼9ܶá<Ö;ŽÌaŒueçx+�ÇúGg½ä®FâÛÊð~Ùå�}X ¾\ËÈk&;rCì­nܬ�¿‰Ÿ|ç<—0Fâae< ÎÕJ!P¬™\ïÚ—�VŽ<�쬼mºãH� aO4ký„R‘V߯�_äkÔðT>JªYöY+pÍ”€ö è[™›øn¥É?“>ywyâ— 0Ê•ðPHe;¾A|e5U|I|íùºQ/©»UíàZà|¶27Ù^/Ž[Ú ŒÃ¤Ù£k]¾†r˜|ÄOQ ë º<ç"û‰5ZxúOÿôO'|;€}p’;ú®@”é~LÞ&öœæ°§ˆ·ù‰—`¤P–ð€`WS…@!ð¸´Ä8OoLÊäÍáieÉG[YNËo’·$oSOé»Îû—Ëv’Ç~¦bM€êç_žj³  I¾p o|Ы‚ÿñ�ða!“v®¦ÏÈ:Êàm ä:F†Ó1×Â@ƒ±$YÀ’€­j �BàñøZb„xïë(›�ê™VŸ I9ÞÈ:â”ïó6|¼–óô�¼ò¬ 8$¿ÂL쨽 …¸Ö·öž={|¡�çŸ>}òz�1awmïÓ‘ŒÞÓÄqÎëËHTÛeËù)`9¸V­…@!°"t÷U½�tïã(Gû.ŸÃ}õ™ðIsØ’:ð&û¾ò_¡‹�U?œÀùv$-ÝŽÚŒéÍ0Mp$}»O@&~“º²M8“˜”1ù[FaÚW_†êœh "wC  €»áµ°Üº¦V×&V´mø¬ÛñnÓýxžsӿɸ�FÜyr¸ï¿kÂ'Íe�&~� ô•�¦£Ý)ž€ñšåÃ�ÊûIÄœÀÙÙÙ¹ö 8Up¤Ù�Yk¦uÇÓ9O�—ð W…@!°~˜|é9á¿ëÑPVdÅžVŸÓl dI%ӌڱ±à6-ïÐoFx;à¥Ë`¨Ý î/^<Ñš€�ìÀ·º5ÎjÙ÷”“uÒe½�e<ÈÕD!P¬'±ÉxG�ë‚”s<ןõ™ü3ñç°ËR§É]KümÜåZ©|{Zk”Æ~W”Wxçàà`_kbŸ€nM@ß·2Ùç&n,¡ògÔ¡Œ€ŒÎ†Ëx@°«©B X? ãÖßç(¨בè­p(ºçµn#€z3ùSÝ=ÄüTý€äŸËó%Aêã ÔÌî®t×'''g2XpÖµCƒö¨r¸Ë2! ÿ>C�r賌‚j·Ö_ÿSÀ×c5ðÇÓu9èÔÌÊVñ—Û–}¾[⢽V7„ö¢úÖsßÌw�4ÿ=Ò¤÷H+àc~¨ýYú|gév‡tèyúw>‡³tØu¸O`ý çò’×wuìcŽP�±U0eUÏÍ{‚§§^p­i€a´§}˜ Û]\; @ÙLþ6¢Nµ_FÀ]ÐÈ;>¹é¥. �B`%€¼Lh[ºƒmÜúi’2­£Hâ'¬'Ý‘¦»ÃÀG§•ðm‘HCÙÖç>ß*0#¯ËµÒõôé[]Ž;œ ×5$)ƒg� †ýùvÀËN'qÍš€X mƒ÷e}z÷îÝÇŸþc€* ,DŽsü&vû·Œ€Û˜,USÀRá­Ê �B`‘L#øiiC}0Y[:$‡€C’އüÐÓ±³†t:‡©#»wž,sÞ¦ùpÎïp+§åËy1rH›æ”W6ÀÞSí@žÈ3ŒÀ‡ƒ0HÜ•�(×2`¿=0 ´FnÒʘ�ÑÂrL^Å «¶** �B`9@r&EKZ"ü5Îäé: þl˜ü ðS´óR�¾­§¯_9/e\_.Û†Û2Ä[�ër?w>úër}ýòñ I·‡à¥ò7Ø-ð@i<þ_ëË�cà�ŽŽ.4Rp¬tÏ�f¯`8dzt²Œ€ŒÆÃe,Üuªš›B¹B`Uh¯ÇYdÕöÛ$—%yr½[:�¸‰Ïíb`˜Xs·�Ó\i®Ãù�¤›œÛrNw~òÚ·er¼/,â÷Ù鮋~q\í±ºo”M€…|$µŠ]Ÿ¨¯�£f›‡ttz×㹬u–2å,ÑÏõ;l½óZf=:ë§…]&×í¶Ý7Ò¨£¯ÿèÐ4Sßtǯ";×*ë‚×Ú'à@S%õí€OoÞ¼Ú'ÀÍð�oÂ}£äÏùl D=Ñ:SnnʘªÊX«ŽÄ•9€¸=}'lç°ÓÛx®ÇaK×ÑÆÑ»ž¾4ÒÑç6& çò}Òy[iâ·~ZÜi°DŸÃ7½ùÒÇ;ÉVÁlLŸ¨,ñp^ ýbAû1J�÷ 0ágÙUÂ$Žœe”�‘»c¸ €;VÙ �B`=€ ³sÜ$IšÃCib´q<ýã¬k¥3Zïx–9-·IÇsغ,§…Û4â}¢g!£½æí#L^Ò�¹/„éç•mÏû¼T~ö ÂN&m>!|®ºó>Q Uè\£rœz|­ëŠLˆ2&à˜?RÀüX­tNþ°å �Bà�ü ì¸%¹¬’ÎsÃk7õú׺YÒù³t™ÜÒsÜáEHêh=äOãÝ÷�¼&ÒœžõÊËzö àË�8e»>‘?Ç ŒÒcM€²I¯žjM€–Œ×D9Ò$ׯ1°FlX8kÎWF€Q¹ƒ,à`UÖB X/ -;‡‘}Þ¤HšÃ-vÄæ§à¨'ë(ë¸ÛͲM#ë¬[¤¤®ÖÓ¼×.Ðâ>î¾¾y„€rÉí©Ü3­ ø�ÚÂ@ ¨*5W O þüù“Þ Øûå—_X™g'¯ú˜!#€2®‡2Ó‡Z:S\SÀ©¤B Ø :2ºE‚資ø A|6¬³¤L¶Î²9Ò†\Nsx‘’º²§�=:ÞpàxˆCì{ÎK�õ–ΣªøvÀxM€ô¼-«Ê«+;Ú`käÛ5tÇnLâVHZ×h½³–`$æ�eÌRe) �õCrÂeÙ†‰÷y2´t=&}$åw8Ëhü?Ôáö-©Ûžºé?„ïãà˜18îÖ»ër¿ºzXð÷LyØ$ˆ5ìx ùK\*DÝ­ ð>è†<Õâœî)Ë›Ô/¿Q-#à .SCeL…guõZ�ά`O ŸÅžaœ¯ d¶ÎDÇ1ÛûØ�C–9O¦œóºŽ»J÷“rßGö•A×zÚ¡Ï�?Îå"Òý ËÇEܘè\¬ P˜�QбÊ0ÿï§ýX ©€3Òµ`_þ”�5%�/8‡‘ö †£“íÍ�<¤“µ~g!PÀ,„*½(ÖÉ®#§ 9?:œ=ùÑCŠHë‘8Çû‘¡çÇeÛ$êïsÖßGö•A—õŽ[YçpîxôäñšãÙM!À-ÏuÌßuù”mo§kãúåË—¬ ø¬5ŸºoÜ;IøÖQEën¬•­Éß@–AТ5/`˜R…Àæ `2Cf¢3i™Ð-9rÂä‡ð[׿±¾OF¡9h«uYçð4™Ór˜z‰gß§Ëé9L^· ÒÁ‡D�Ä �d¾¼&@ñ ù+M#ì° Py®%½Oi­—*tH;òä©€ iv6 /Ù P@HE �B`³€¨pH{ˆ*‡M^&zÒLü„M~Nwœz³.Ç ÷9ç§Þi.§;<�$Ï´|NÏy²®/L?}ÌÆŠ|àˆÇ¯.�¹Føl"_ä;<µóÁ Å Ç>Z è}Lþ‘Fº<®O’ÇZ:q‡)_n�2€Y¶Ú¾e·³*õoÛñ® î÷íDzÏdrGîSÆÇ�Ä·Äoã©5;ç§ÍÖ“Ï}™%s�w »ß.“ãg9¦|›6Oœ<öÔaÜgç<–à–Šc°. žü)/ý‘âÌÿ_(ÌcMÀoûÛSM\±@{ìh߀öâ˜φ€»Fþ #@mÖ+�F'É2, �ÕE@÷ð1ñæ°{l�s8K“~–&r—#NºŸj�ŽÌaÚŠ“ÖçœßmõåAצç¸ÃYö…s=¤Û[ß–qzŸ<ÐgÜr~—áøxSÀy1´ ¯ >Wø;•�Ï+=HY_>}útW¯²&KìZF@€Ð[Ï!dGþìl #LʈäÊH`T°(VÝÃÇ„Û×S§#³Ï¤ER‚¨ì©+ç7ñ“×y,ÉKxšŒÄž—smNs}éÖe™ÃÔçx£³Ÿ¥w>׃‹,�‡ºp9¾Æ™m†õjážâÏÉ#Ç«‚|N§¤ Ö\Æš­ <ç³ÂdìœÉ¿�S™}^�ó&OF%É2, �ÕGqDGsØ=·‰Cf1µ>×ç¼è²§.Çî“èúœÛhÓÜÏVïøPºûI¾6ÜWÖy\_–m¸/ŽÜ�C>§ÛÈ¢/"ù}¥aüYºca~¦ôkv TüRûœÉ¸’]p¦µ; HS(’Cï¬åéwé­.U±�Á2¶ó¼×Qk�D±"û\&"‡MRH“?’ôLþ„[¢oã´‰.ˈôü8_OR¨†ŽÁùûÒ­›%©£/Ï,]N'<ä©=ºiú6ÝqK°s¸í¸‹øw0ä^ȳ'À�ôOHS¹K¦t®Y¨ò×oß¾m÷ €èýÚ$nÏÉ7Éß\á7ú2® €ê·(ÖˆrEân ÈqäƒpìHÏä�€#Ÿ½ãÓ$i}Ž:¦9÷(O›>·~HRÿPúœ–Ã.7-�Ó²l�ã ­1x+€×_ɳO€Fü/Ï¿ù曥Ÿ«,¯žË8~ÿþ},T€ää˜ô¿±ônô™üÛ0ùÑ!·Þ•°¥—Òr…À& Àµ ±øšv8ë CF¤YúØIƒðýäoi²Bæ0åÚ¸ëÊÒy²î>aW.Ûê’”uZ[—e·yI›'Ýù��7륃°Yx ¥(k>)Ìš€FDül|©7X€q°«ðŽŒ‚Lþ„c¤@’66ÑKUd}® €>TJWk…ÄbÂuØdƒÞaä ÷|9<§¡Ïäïú�9LIÇÛð—ZoB9_›6Oœ¾õ¹Vï¸%e¶ÌºvúМžÓút9}(L߆\›–ã³Âó¦;_Ÿ´Žþ9ÜJðFgßæÙÇÇ�ôdÏÆAZø÷ò—ÜñïKBÔçŸ>}:á_H’ÿJo œWÄoO^“=ÀàúÒút}e­£_Ó\›>-žÓ¶¤�Ya§I÷Ó鮓xës¸Ë1 °#²?©3ÀÛ±6@i,8~ýúõ'íxªº®´U0‹N•æ×MüC ‹üBŸ+ •5Ôå?ßvÿÑ»¼éøÝ•€ý„Ìè@{¾Úã#�ó!ímÐ:ÈI~{ÒF:že({~œßImÜúY’>Msmú¼ñœ/‡i+ǶÌéY—õ„q¤go]’þ4päÓ»êܰcà¡Â ñÔèÀG‘þgax¡áÿké/4p¬46 "�G�Ä-{E#~s‰•#PÀŠ …À&!Ùîž8CeRF’†ÌžLŽ;œ%áÖ‘?»6î´!½Ó‘¹ïYïp›>o|V¾¶íœßaK÷¥-ã¸ó!vš¥Ó87ØÒó!v ä+‚¼ðƒôçZ0ñSÏÙ_ÿú×�Jc·@?“>F'!ë|R¾\ iD@õmõ~eèj)W›�€îóq€6LÂÈìɔӷÎqä�ËyÉÓÆ‡Ê éÝ÷yÓÛü9î°¥ûæ¸ÛÈñ¡°ó"sž·Þ²MCߥíˆèuzb¯2 ðJòŒÅ‚Z€�p¦·>Êàí�üäïp&œx¼ �èBG·•® €­<íuÐ…Àæ#�I'-$ñ‘Îð?a!ù’¹®v~ëfÅ�oš:—iÓ§Å�fI¹�YOÚ¬8yì¦åÍim˜8ÞįúØ)� žJ÷Jä?Òú€'Ò]3ðÝw߽ѬðÀ¥Â¾Ÿü[òWÒ-#`¬Sû[; P—Á :þÛì¶ýø}îÏL,‹8–¶ÿ³ê'?yÚrôÅií¿ÜO×oIZç¼·ém|ž:\W–}Ç0-½/¿u–¹|_¸/_Ÿ.—íKou9N8ÅŒ{ž×ì+ŽÀþ�ý±Þx¥‘€g2 Ø;�‰ß#–6üôïßTóh@>„­ —°u§¼¸Ø\ ¯Ã±Ü:hž:Ékï Ä]Æuå4‡ûd›?ç™––óÝ%ì~ºLoõCéÎg9”oHïrYöåÍ:‡[IÒaðmÈþZÃÿOÅûlÌÎ��?dŸ�€LöCaWÀ õ[‚€ ÅDnâµ>&:Ò�ÇeœÇzÇ‘}ºœÞ†ï›¿¯¿mÝ9>-NËá\>‡çÉ“óçð´²9ÍaK×A\’†àþçÛa( gá3ùûÉ?˾Qê´ `¹2ê( ��Di Ýê4§›¤-�¯�ÏÒ;ý¾r¨½YõÝðåp®6½�·%g¥·ùç�·õæxVtg_OüH‰½§âþ'àÃAÈ„ïðÐÓ?]tZ6¶Ú((`Þ+÷+òé¾UºOw+Ó)6íxÖú•ìꢯ‡–©?ëÚöœæ|YfÀ²ž2Ž;ñÖ9_«_TÜ}¿k}}}mëhó´ñ6ÿ2âm›q¦v´NƒWÇ“¿òîIg²o%' ÒÞ‡@ÜÄï°¥ól�,`ɧ¼½¸—Ü\U_l ü·†È2§9ìÿ¢Ëd}&u뇀t=Cé_£ÏýøšzúÊõ{HßWÇ¢umÛm<·'l0X±ßKú&ÿ,]•Iß2ôjw+ß(À—Åä´‹y ÍU•…ÀÖ!ÐþÇ P;§eR »Œ¥Ë:ŽÌugý"Ã}íæúçéì:r}9|ßróô‰vfÕ?+�:xúoF2É÷…)†sÚ— äFï4vÜ:#  €/ÁBCó\Ì m°*+ �[Cø@âÿ¢Éß„ÕêgÁçü³ò-+Ýý_VýÔ{×c\TŸæiWmAÐ}#&÷VÆ!qXi}FÁ@öÍR—ð@çsž ü�º2W3ëÖß¹ª2­-³®GˆÈ®/¯‰Ê’¼.Ó—ßum£œ�Œå¢qr,Õ–É?¤ÚËÃþyJ wÅ:‡- .Ãð@IDAT¿\0¹Ä–…ËØ²^‡[l#‰ k^âw¾UÁËd8ÔŸEôwV¹mcšuËëm˜È³!`]–t‰xŸC¿Õ†@}—Eé �B`ã0aµ$7Dœm¾Ud•ú; £¡¾ÞK“¿d~âÏd߆iÆäï47M|«É ÊðåP²(6ù@’Är»÷ ¯Sûð¾ïqSÎF€‚&ô!IvÒp–m8·ù§ €-9û³n[Cæ†"0ëúÎO¢³ò"—™7¿Ë=–\µþ.º?ª¯þ"ë9™ü}jÐmýÓ?`0”R®( �B A`]ˆßÝ^µþ.«?:æ>™ðsØ0•LÔ@£‚…@!PdîJb~êÍuýuð…À0Aþ<ùË_ŠðÏÎÎFg''£SùKáLú�Œ2JÐcÚhOŸnÇïv’O¹¿ù¤ûMñ–ì‰�ë¸ã(ÁM�õ»ÉèÚÈDž �‚ —ʳUú2¶êt×ÁwC2ÆcœË89>}þ<ºPX ñ(†ÄEÞ›ÀH_pí?y2Ú?8y 0SJÇ8Ðc>9=¬e³1`C ë¢@ýl ÙwƒK_ˆ¿Óg2Ïá­ÁgZÀ"P\B›~ãÛôã[Â%±Ô*ƒ¼;²‡Ð!üK†üEôÈ3ÿñÇ�c?6’À�šzpaŽö0$ðÏž�ž> ‰q°ÇÔ€<£€kÂ>*™ò³j×Ϭþ—)‡´Ô¤Uë_ÛŸyðQž–è‰[çð�\*¾ëZyëzæªß…Àà̼>Ä�d¨ÿD„oöáÃèLñsyäÕééh·#íÎ2î õÃØéÛï=>:xùòÆ¿z5:Pü‰Œ�ð2 )€ZO}™,rxÜh¶�#€c·°58,ê@ËX’UO!°Æ@´�¿úk˜ÿÓ›7£�?ÿ<ú$ú믣+W�¿ä@Ç;63 34Ñ?É/¢ß{ñb´ÿÝwá$¿ývôL†Àóo¾ c!�ÄÂÁd Ø0ù[®1ÜÕõ¯CÀOù_WK•®oÔ5PB@Ä+ýµ¸ïLä~üéÓèÃ/¿ŒÞþõ¯£·ùËèTFÀŽˆ÷ýûÑ.Ò€Šî%!kܵ €+ÿµŒäŽˆ~ÿ7¿íÿðÃh_Ó Ï4µÀš¦˜ØëFüv$Ÿ½›(ò7%…@=ùåeP#_ à<ÅûnZ}ºyêZ•<ëÞÿUÁñ±úa¢vû<ýǰ¿žü!žú?ÿøãèèÿÿío£3Å÷ôô¿¯4¤^ ˆ»/t%ï;ñ ý˱_Aþšë¿d$àèhtÕ­)ØSÙk…÷dì‰è!ÿ+ù- ®±ì1Âh`açÖå:¼k?Ûóãã]–œÕ¿e÷§mÙí- Çu«· €%œ±|1çðšª* �¯BÀ7Zú�ŠØ?2ì¯'ÿO"ÿã¿ÿ}t ñ¿{7zùëÉ}_äÄ­Vyò�iI €1ùîFx]ƒ@«ýF;l"¤õ¼N¨6wex�—Q‡C­À�´>` ùcð¿òËRÍ”+ �; PÀÀš'«‡0É[7¦y«<�…@�¿Èy)bgÁOþ ûóä¡ðåO?�öÞ¾�'È_¤½Ï“;×·|68ޱ@�"wȾ¤â"zÖ\Ș8!.ý¹ÈüLaÖPž�v€ºýBæÿYN#\®(æC  €ùpºs.߬î\° ˆä�gñŸ €wšó?Ò°?OþAþ2öxú‘È÷¹Ë�8u²¦ È_£ñJ¡žú¯EþŒ\h*�<�ÿ‰âÚU âlÄ(@Ý«�yèßS–´[ÿ5P(WÜ�2îŽÙ½J¬úMjÕûw/ЫР&èñk"x^õcµ? þ˜ógØODÍÐÿOÿªÍÞÃÿhŠ'Œyò^ÈÀa¢ýK õ_jà¹Ö`<�ü?Óë‚ìñûIš@]v¾Ž-­Ÿ%s³ò>Dú¬þ?tW­?q¶¡�2¶á,×1 ûúŸkH>vøÙóŽ?Oè¬öß—ôœ?Oü&~Ë<€€·ƒŽ™#@²ûj@�ŒHw¡:¯4"¯ʸùcœÉ(8ÓT@l,ÃÀ®Ïà8òhyg‘•ë+Yl;elûPÇ¿•ðe¿ØáOÛûžèIBæU¿xòOsþ&~$”Œ‡ä=`ÀÏâH Èß‚É_*%hÏ—jóROúç"úsíp.ò?Õ» `ºa$C€=úÈâÇå´PÔO!PÌ…@sÁT™ �ÍBÀ#ãWÿDÄcÀ#"ØxúGêðMþ–&&�"lò¿¡éi8^²&@kâÃB"ÿ³×¯cÛá=&8È�­‚ý”ßÊ<@W#Cý3(`&D뙡n‚ÓÏÛ¶ácr4*ÄÇ#zâ>Õûÿç’× Ø1󮾟ô‡$Äï4ŒH<éxë,ƒÈÕF”c± žø/…P?øîÀ®ŒÈŸý®dàòÓ~KþÄ9¯í±RnÖùž•ÞW'õ>–[µþ¶ýY5¼ë<­z»e¬úªþK@€)¯`ÈýT¤Ë«€×ZÀö¾&ph·ÏCüÜ<ð|á�<&w$¤ÏƒmôÕ±«>ìª=êÚá_Ë_ÊŸËÙ— òg“ åƒP�8ŒÇ&nß’QªŸB ¸…@· )E!°Ù˜<zg ä&#àBá+éø¸Oaç!HâÒùl@ÓþÇ ŽŸ¨“6ôäO=|[ ‘?ÀF€žü/ÙI�| ‰øUl7ñgIz P®F  €al*¥Ø8 Iœ†Ð�@ÀŒ°[ßY+&§qóÀx*‘Cò&üóÆp™±Ä �ÎØˆ¶Eúl€ä…ÈŸQ žüýô¯ª¦¿��|„ˉr…@?eôã²òÚM¿±múñ=ö9BªŒ° ë )o‘=äßz9ÄÏMÄFy1˜ ñÖE}4žD=åã� Oá‰ãÕ'ú;Ë» òáy ݵ.÷Á}zh9«¿Ëîßc·ÿÐx¯k{ü?Ë…À!0¾ùwD)f r�èõ†boJ´q´9ý&×ô_ú”=åø¬p´™Ê¸5Ê•[?fëwD«Ùã2Vó¼T¯ �¥"„ª†ˆu¨ñ–N3ùç0åÛ¼Cufý¸? û'Bë½Mw<×]áõB Œ€åŸ¯2–�qµP¬�â„Ë+•50‘<+’ ?— Ϭ/÷‡pÏÐ?u˜ÜûdNŸÕ^¥ÛŽ@­XÑ+`Ý­ßuïÿŠ^‹í–Þ™ge=_ÞcÛ]öãgcOûve‰Í‘œÿ:¯Ë;Ÿe,Ûª¹XYÚ€ónàB¤Û7`â¶€q`#’GOg#€<}FDÔå‘ÿeGþãŒN` 0õu@ÔŸ†Ï[rpiãÁ’²åÖ�:Ë;ge,ÛqÍ}pŸn\`ëÖß„ðQºdB¤qÂcO\$óî"[†Þ!`Èø‚°ÈwOùíâ÷S¾ÉÞ:HÞ:ÃAÚ6âi_q jûRí^éÀ|`G_Üѧ€wf ¦Ò@TªŸ|#M²Ц‘5“?a�X2âÀ[1€ ¿‹À€ôŒ`L¼Øô¡¢…@!ðu”ðuøÍ]zÕ ‚UëÏÜ@>RÆUÇ ‚ÏŽ8$Ïp?ž�êœi¿ÿð éÃ;>¾ñ Ö“þ©FNTÉ©¦âu<åÛS™}=�{ŽßÄŽqñ£·T0\ˆ×ý¤½áã=Õp©áþëo¾íBþ¯_�4°Ï@· †þ•¿Å½�Ó`«kã}yÐMs-žÓò>DZß1åv—ÝßÇn?k…‡@‹Ã²j*ˆ È_d~Þ‘þ¹HüX_×û Ñãõùß�’ø�<ýða4’^–Bþž¾÷!mÖHÑCþ?‹ùl˜üÛAzòòš{ Äë~z¢gÈÿBäÿ›ßŒö~øa´ûý÷£'2µ€ùæþ!êlë•j‚ð[brÜ’üå �B �2úq)m!°v˜ümœŠô!þc‘ü'}ò÷í§O£wzêGñë©ÿ£Œƒ�’—Ò=•p(àPäûò—g�à^GÆAêB%“?€�€<įrñž¿Ýóý<ù3ì¿«'þ=òO04p¨ùÿÞHLÛ߄גü¬xS¼¢…ÀÖ#PÀÖ_À¦ ` †ü5p*b?ñùü8úùýûÑO�+²ÿ¤<ø�ò»2¾‘î[߈l`¸~Ož›ôË“¿ ¿•¦gÀˆ×ý4¯-âgÁßµÈG¤Oþx† Ãà@Sûò1ü?ƒð‹ì7媭ãxLÊxLô—Øv{ƒ\bS+Qõ¦/äžñøZsüÌ÷‹Äò¿è$OþÌñìæùÅÐ0?Fò�ÿHe�T¹¯ü2ž3€A Æbž†îÙ¡/öëW^ Ç_êƒèƒüEØñ-þµŒv÷‹­…EèW”×Óý®æúãu?É=æüå´ðï@iìFÈ¢¿ñÊêU�ö>ö6޾=÷}y\~^ÙÖ9«\{~få_tú¬þ.»�Ýþ¢ñÜ–úÊØ–3]ǹ1p3g�sû�>’§}æ÷�DäÈO’õDCý’ïñ x/ý;•ù¬:Îä/äµh 6ü9ñ?Q]Oå=pÀŠ|ó¾t»*^á奸Ø[€'}‘ø¥Vñ³­0›û°—ý wÞ‡ì;¨'~žú÷•Æ®&í>ɉËú¾xÖ¶›ELÎW²ØFÊØÆ³^Ǽ¶ŒIWÌŠþ‘}Ìñ‹àßusüÌóCøÌíPä'ùcù#$e=r`€Q ‘üSåy*ùDOòÌɳ�4¦ ve@°€ñˆØP@eÙB˜í„Ï4—.Ï\ÿH¤?’ÉSþ�¼çÿTòPž§þñ¢?µ#–ÝÓ?'ª�ü[½‰>絎¼å �Bà6eÜÆ¤4…ÀJ"`òG2p¡‹è?w û~z÷nbŽÿƒH›ùý�"ócå§Llþ#Ilîƒßí¼ €ÃΈùd`ì© «óc êd*€·Äþ±ÒàL¤~"ò?Õ¾K^ï“Àæ>H �gÌñkDáPžp|�POÿ»3FLê4çp¹[ç<ä/WÔ0ŒÍJ§øf·Ò�œÒ¹uïÿ”C»W„ܺLøžç‡Ä™ïgŽÿ=OüšÛG2Çï~Hæø?)ïgùOª›á~œ[aÞÞûü{Ÿ_Ù‹ �ôÎ�>Ÿ Æï«ü�tL`0ɪñÚ �=¾((Â?ÒÜþ‹üDüá1dD\ˆèY'[ü"yÚ—ôf?&î>IßûôC:çG>„£Ó\ßù�–Ñimÿº?�Ýþ¢ñÜ”úÊØ”3YDZQļºˆÂgë^æúOò×Ó9’ùý7"þ7"þ_%ßj€¡ˆÿ½òBþÇ"ê3¡ÂB=œÉÿ&vG‡ç}ÿc=™Ðý¾Êž¨llÊý €'Ò=W{vêÓâƒÑŽü.Rù.UöL+ýODøg�?¯û©ì®ÈÿZuójá©ÏõóZ ýÞKþ,ù7ù¿Ë@~{~#jyˆü!ÞðjÉSù‰HZ¬:€ Eê»zrß“|¡:¹!3 À(À�†îµa áóÊàH#Œ‹üˆòÔ!ÏP?F #&lÌCñIbIêÆµDîø,Ù–uY®(ú( —G×ú†øè™³ëÖß9kaÙLì¹Btá¥ôGzbe½žüÏô"R��ü$yúÏ;ùý"#àGùŸ4ð ›ýhç'j1iÄÇ?m\m3Ÿ�ã"fî_/â�®X ‡ ò/¿VŸžÉ¿P¾OïŒtþœá=ù3@˜7øžÀ.^y0(ÂPyä)u¨M¾3F€â&yÇa_WN›&)‡sž›ØMÜáÇ’>Ž¡öû®�¡¼‹Ð?v»ýE`¸ u”° g±Žaíà†Ï~¾ž®êç]þð"sˆŸ½úòŸØ·_†ïö3×ÿVy>+o¼Ë/Æä4ÔÞ"dòÄî�}®�Ž�É`Qaìó¯8ïø_«ßÇ"ýc^”äSÂŒ`L0�@¿ØEãáHž‘FÂ�ÌK�›0,)Òº¶éÓò·å+¾ºÔy\ι)`9¸V­…À �¿Ÿô!~vïcß~æöí?($�”ÿHºˆ·d®Ï�ÿ]ÉŸñ�±Ç ·"ežÆ1 oVëCà¬Ò‡¼O5"ÀÎ�|+€Ñ‚ØèG}gtàTOü¼È›ÿ0ç�Á”õ1F„¤>9‹!ê¢M·?ËPÑ u“}–¤á¬»‰Õï:#À¹ôè£Nå‹@‹Å³j+¦"à›YŒtOþlèŸçe~¿ó¿jxŸ¡}û"ÿå?ÙòNÿ9eå/EȘÚp›¨rñÔù–ƒˆÃàFkò—d4 žÞP>vÄCFqÖœk$`< ¼Aæ]�8UÜ#�? i“¼á £ë\&ô¬wºeÎg]ÉõG`Ú9_ÿ£{Ü#(àðﻀûtЕ¹›XõþÍ} �˜ÑdO I†üí!}væóú©4el ‘‰o`0º@š ’|„õÿ0å �%!PÀ€õMËr MT•k€D^¤É<¿‡ù?ê ÿ�Èžwù™ßçÓ¼,ìcnŸwù‘ÇŒ¨Ì †CgÄ(BWç½â—3ÙZòô„oòïññ�ã �wø`Ï€˜�…ìÉ�‘ )æýÃxP¾›RQ4~ò=` £ ¼ˆ@�aXHfçÿ‘eN«p!PÜ�2î�ÝÔ’u³š Ïv$B¶<1cˆÈùhÏ‘ÿ/oߎ~ÑPÿÏÝ¿tﻡ~ˆÿ½òBþ¬ò‡ø!¸Çtat$„/òÎOÿC7ó1ùÓyÊwÃXvuÎsl`À"ÀØYP˜ìÊs3Â`d$ˆ]ñÖ"Vë-U´\!PÌ@  €Uòv#D$Bº�³{sü¼Î—¿Î÷NOülàÃðþG‘=ž=ûy§?<åTò�}û%ÚåáÿlÄj~žþmˆÄû\KþˆòÉëû*Iº±Ða�ù¿TÖ�Ž.z§ªÆA§[2ã(¶�2¶ü¨ÃF"±gà Bg(Ÿ9~ ëÿ¤×úìYè÷Q$ÿA á3Äûõ{ž_MQßcŽ@ïÌîÍwOññôßMÄZ€# �RZ¼ H?eþ§Þie#ÇÍ� b±  páSÃ|*Üw¥µ#ä'mÈå4Âóög¨¾Ò›Œ@kzv×íÆ¶jýÍDáK]x)üµ>ˆŸþÌñ³Gÿ{æó%ÕÂ>“?’/÷}RÞÏò|.—•í¸1UÍIŒQh?]û㪇ôÇ^ý‰áÿŽÄƒø?Á÷õ�òÄ«~"ü�”§.ç·7ÜÀðÆ@<ñóÅæ@êk¬‘ ÏòÙðyŸ+Ò;¯âáœgÜ''< œÕ¶ûøP]zìþ´í?ôñ?ÎëÖNëvƪ¿KA€~ óCø�¿ßågeÿ)Cûzòçþ7"<«üy�â¯×ù öÉg^ÛOøcò_J�ïViKüãy{Hß¾!o÷?$$Ùó¤¯é‚üÞ”§;MùY='úå½xú?‘ÇCùx3Br¯|&ú>I[YßéåÖÎ_ Ë?_e,ãjaÅâ�ÇB?‘y|¸‡y|†ûå‘|�ïG‘þO�‡ü™ßç‹~G*yñÔêE~&ÏG?tõ ’Å…‘›Ì!ôLþ8>¹ñq¸ «ýýÞ?a†ÿ{Ê¥*zƒÔ‹÷{ÿ¼ˆñ„p$¨ó�aùÇÛ’¸Lò·zÇ‘8F*Ê­e,ÿœ•°|Œ«…FÀOH†úyò�¹~=Ùé¿ë†üñÿÍ^ºšðü>2Ftœ<ÕŽIsŽ;è\ÇWŸ¸±zø’õh@tWimÿ‰‡ÑÀ°¿H?ïüe1îá<€dÞŸi )vF|ª:÷$Ÿ¨6LøYÒl_<Œ’{ô©ŠÛ„@+z¶WýÖö�›pë|cÖzò&M¼É£›¾ ¥­Ÿì}º¦šÁ¨ûç>a‹` }†üÏDüÌóóD�¯òé3çÿ³ü?dü¤'öïÿ¤iÜø8Zlãƒ=[bBwN‚ôÕLƘ…c⧯=ý娯ÇG7•‡2lþïýwÆCè{ÊSd–sýLðe@žþ?IHòôÿDÞ¯rÎbM€¤Ïã4IÛ_sÍP~YnV¿|½.«ý¶Þ¶?Ën¿m¯íϲÛoÛÛÖxÛzæ—|Ü|'æÓ;‚�ùuÂöÜÌÝ‘O¤{zºÜgx™§LÅqùF‘Ã.ÚæÉú†äí!}>Ðãù}$Äÿ‘…|"dx ýÇë}’ï¥{«´#?O«8“Wng•ÂAüÎî<†íEâ<ý‡ŸAÞqœäé?Ê;<£ì¼x0 Àû¼—ßÕùÚWL¼�ì#êÎ@çzqúеC™r«�@�¿åœ£2–ƒëV×ÊM7ž°!ZæÔ!MK…/å!ãp�@úOÇž¸ÿôCÒ ÓžóX×JÚƒô£ê˩ȜM|˜ßÇÇÞý�¼Â,ìûHºŒ‚±WŸ™ëÇÇ»üm«¬yòǃ/R:Œƒy\”§ס°*˜§èÌŒ êèŒ ãý58`0ÿÏyc €ÂûDmÄ éùxç´õ´ÛêrükúUe�|}ydðñ{µ=(à‘Îc¾¨© S›�Õ¿öÃë"Ìâ‡(!Zix=Q#ÃPø\þJdÌÍ>œäþ“'£‹/F/_ŽÎ%40~ÒÙÄGgôԺׅ}#p?‘ô G˜'F ŠðêÛ÷2·Ï¾žã÷;ýÌñ³‘ÏõÑþ£úÇ�´}7^õw�| ¯rHXÊH/ ÇÃùÒs¿æ8@3íòD¾®¼ëB·G;¼Þ`ÍÓ?q .Œ‚ØÁPÒ;ækp(LßòuAçëæ&vû×en§<Œæ±û÷Øí? ÊÕJp Ìú3=@Þ7Èxª†ôE°1ÌÏÓ=�¡ž‰XÏ´bOüRiø •ËnOÀ©Èÿò—Ü{öl´+#`÷éÓ�û’‡Ò"å10®!"ŠWù:Âçó¼Þ¯?öìWœE~ û3Ç�dÈŸ§þ�ŒèxL<kë v:�q�Ÿøî0ë£ðñQ+áØý¯+gòwŸƒ¯Å(ÚP%�?Wž…��¿_¯“‡€0� âã‘úÉ5»¨þRw¹B`Ý(`ÉgpSo8ÜLyºöœú™HýT„¢¡ôˆ_;å�½}{ãß½]ȸVü•Èöš€ävdìŠüwEþc‰!Ðé_½½�ùÍ71$ÔPÆØÄÅ0Ìí«?|�ïƒ æöù8ž×øx�¼g¿òŸ¨Oã!_Œ"¨�®3uwõƒÂ&0éK; ƒð79Ç¿>^H?Â]>p¦,£/1C�uŒ+»Cò§¯xˆLþŒàжüž|ô ©CüÈñ¿ÈÒgŽ?_enö“Ô¹<—[³°1AÇtJGþ¡#Lëäéq>/¤/bïÿž&&TÆÙS-1 ó€Àh £<õïËsnîBü4×…$×K¹B ¸A  €ºVíÆs×þøj¸<ìOþ"Õc‘ìѯ¿ŽŽDúŸåOåÏå/:y-ã`GOÝ»òÈ‘®I&nþšß¿|þ|t%�ÉØQïêé}W’Qƒ'"é'2Y ¹Ÿd1 ŽX¤Ç¨„ò1ÄÿFäÿ äßžßGΜã÷�®‰4–înœ_žÐ;-Ü®…qHÂèåZ:œ¨²T>ðÍD`o"µtÃ_!ã:PyO°ÓëØ�O)s¾1Ø#à.€¯Ý»\ówÉË!» ÂáfõoÙýiÛ_v{�é6¶QÀ6žõ¯=fÝ€YÄÇ|?ÃþŸEîÇ"ÿ“�É_È_i`G¼'¿#×{w£] ³Cü<ÉÙ9ÄSu^*Oàºéë‚ѵŒ€K‘vìÇ€ HBð†6ÄyGÿXž¡}Þãg¿~ü¯òïU~ãæø b�„à!û+‘>{÷ƒ£'Ö�Ÿü}.,UWœ ,å�ƒ’Þû?0wÜÉÿ¦Â®mE…áÉŸïð�…Ú’do6âúð¢@ȧõÔgÆ*FŒIª%/·]²Ø6ÊXÂ÷ Ær MÇsxÿ“‹A¿jÙFÊXðY÷ ÆrÁÕ?nuEw³…¤Ç#�À“?äñÿïh$»¹í)_x…ybãé?žÜt$ù†;Bú�¿Èš7Î!-ÝìñE8“!ù�´ðP:ĆdƒžŸe,°e/26óÑh«úñ<5òd¹1süWCÂ'HŸ·%0Dâ1²¢2<¿öÝ9áÉ:Î+zŒÎQg@ø±÷¿êˆí_æµík" õ'F$öÇxƵ ‰1}¤¯�ŸEþeÈr…@B  €Æ&}“ææÉP*�?Õö©†þOº¡žþ¯´à�¡ÈGi¢çž0ÄÃs&ÒÎ7|ȉ�¿pã'/ù #žöt§]Ê`´áBS GšÓ‡˜x½’dnû3€ÒÁÀÐèÄ‘ú^õ²ˆlÓ]�·°bÞ’°¹ö€_3H^y0ÒbX|Ð+Ãÿ*;€���AþÝùXôõ¥&'×çLËEãúÁx*ÿ\ž…�qô×Fe&÷ia7Bžì¾öxf•oÛËm/#ÜögÙí·íµÇ´ìöÛö*>ėÓÖçâÌ»þ±£ŸžÐ=ìò�ŒÎþú×ÑÅßÿ>1ï/ÞCò&ÿy nú?2È_Ä#y®§ö‰¿`Z@ÆÅ…ˆèR„t©4$_�ÿ«Ÿÿ©t�E¬'PÙ�v™ø!iÈ[ãh,ØâÇ#1‰B¦a I§ŽŽøÇÛwä–üCYˆÉc@þ,åUÎ -=üÿXÒWF,ù4ð+y €YûпLö}aòØÇKÛ‚@kz¦ú¦ÅM4è‰àýaæ]ʸÖhÀH¤ ™@ô¿Éßa¤Ó<9Ûs£çÉ�ãøâ©’p!":•î³þ�ÈÿƒÂ§êK2¼Và¦tT0nbàË3lwtÂcüŠ#àÖ�Äh€£JÀŽáøº €øw„/† /£œêˆ•ÿ’ñV€ôqíq|1ÔÉSÉx T}cº'F0Rg* �ä§éâÆ@+0«=úºL·jí/ûx—‰å&Õ]À&�Í% d^7*$s®ñTßIšŽø€´AàiòBúö–ö�_I±Ò›ù}¦êç5Àð"±3y†ˆMãJGp™Ü¨kÓ]�{GÚñÔ.¼xr&.�C3ãîa˜)  Î¥Â|�âÙ•{H,M‹œç˜æQß>ÉȈ}Ô§'·tÞ€ð<žã˜EŒy¬ÕV!ðДðЈo@{�ÞFäN‰Ï†€ãH¦ôBZxòû©Ép¯ÉŸ4-^ÿ‰Å<¿�ÝìÏðJ¿�‡<ÔO¹pÒo�Ó13á{Ø?$:ãaip(#²Ä1$doAÆN€ª‡ðC¦É?® õ36ñRcŠIáCõËS>Œ^pÝ´äÏñµŽ<y,mû/V�2Vá,¬K¸iª¯ßp¸4ñëØúÈ¿Õù/åTU¥kˆ@+zÒVñ餣�@ÌDa„¡Ç[I:ž �Q@;nðŽsÓ‡Üãõ=ÝÜêeAoXã2HWó– à\GÎÓžA„½e¾Bi"»kƒåÜH�JyòÏ€âà1Aþ3�s¤úÂ�CÊ{èÿ±¯G®‡x-PFׯòZ £ã…ÇÆ©Â}Äß§{ìcã´Ìêý^¦kÛìöèϲû°L<×¥î2ÖåL­J?¹u7Wºt—Û’É9K‡]—G¸©óÅÀ]½÷ÿD‹ uCÀó1 'Z�b@F?0”ï�VÒÎ*¹?÷×}lãÖO'Ç,\؉aÿ˜÷ǰ0.ÔÀ'ÉyঠùïKò@¼ ¨p>Gd GOy­“ÑÞ8T<^U8LKå-‚y{ÅdÒGþE2�q6çkÓç͹‰—[,e,ÏÍ­-ýùLZ÷¹yú/l `CæøXÜ™ËØÓk|†…^còWk ¸ñçé©nž”â ò„¦�è·Â«âÆ8v2Ù[†!CZê³Ë„.?áwäï)€1ùSÖå-3ÂÇŽžú™ªaßý<à<�%¹.àm á<ùLJt Cdßê©Ë×q h¬–³Pçf9ç¥ €åàºÙµBª&Ë;±)é0Å¡¢¾^óŠ=ùÊ(`î—WÂXèµ±�¿oþ]˜u®;n&{üÓ.2Âô—0ýíÂ!»þ�uî:z { žø=€t¤ëqù,…%(1Ïé3� €œõ±Â`ƒ±Çy¿Tÿ0Æ#ºâ›’LYÄÛ ›Þ8°”>žV7áÓ_¿ à6‘¸‰¸ÊÜ"Ó›l“¿ªïkœÛnë°>úÔµÇ@FÅÛp”ïôu™ø‘&~“?qê&­kc¢ì@$Œ)å÷1ÿ¯¼ Ñw= T³5xq�à8ÏL` ØŸ‹ðãX¥ãmún¢ŸGRo>Æ&- ÄÚ=tÚöÚã]4m{‹®¿íÅo( ®„;!`₨2©ûm]–ܸ!l†p!ò7é“—w¼IçéŽx,h¡]j5û¥žüù¤mÌq‹Üh;» ()¨3nö¾ù+퉂XÑ;­«ƒ¾@–D—áþ{çÁIŽkéTÉ–™îqoÍÿÿe»ç¬3oº»¼ÜÞÉ…dE:)"•’Às˜A$‘¼ áßýŽ>ÐHj7çeù Ÿ;fàìí@ úm|¹ÊO¼ì"ƒ-#™ª–D‘Qû©?œî`ûŸ]€Ï|ß# ‚ØÅˆó@yë(:ri‡Œ,/Zxi(à¥ÑÇcH€f€Ï< Þ§ä¼ë"ËåpØÒ'²m�_ûÃÐk€‰wâãë䫼 ]ŽÈ™Ø æוKä5LöËÒQeéeêñ¿Öíö‚Ҧ⠸[F“ä)¸L$š,x~ì°ê'Ê6ÃöÓzÌÓl)xÊAÌeúúO�Æ–œ3P.„ ðÿ"€1pã¢ß ¸î@_ΗaÌdV( ¼ ”ðJô$ÃÔËä›#+vƒ¾iv Œ4yh¾qϺp†éŒkºZÑè�í¨Œ\¬þE- ½šØMèI£[å ¶dæ“n‹C=F·mX£@ï>ôÔÉ+ÿ þ8D×sù1 À ÐTÇv\fǯíHß¼À%€ÏŠÜà/»HËpÌ•ïÕ>#1?8Š-ߣ,gÀ–(úÒ-PÀŽðØ„2&;@W†&ömŸòq“˜V›gœS�ò‰Våz&o¹:‡2ù¶ D LÞ/r;ÃJ_º¯Z_[ü"pû¦6®õ EèGµõUmð*`&xƒ�ÔEp[NCÝn”e’—ŒH0Ä�‚Òé€,9!xgìA‡vÜW¨b¼c¿ñ¸â°Ñ ¿+ä½ú7Å)Èào}K­ã¿ŒÓcÅ?•Œ,Å¿iqÙ-õO:Xê‡Ê}ϧ5÷ç°-}dðÿC}äI‘SQžáé� òqS`'Ëùæé ã ݇}Ç7¦£×ù˜ô¶þºý¹Û{Œ­ªîz ”°Þ6{çømi¹â¶?j.{Ì<ãàë|â«÷ï×>,¾*.þô§Å­â�>Ì3ûoô¡b¼–UòT*hœ€Cé»Ud«Ÿ/ú}Rü(û(ú°W[ŽŸÄÿ.ÙgåÝh’�U|g0€Éí™ÿ ¬4¹7ˆµò.KÝÐ XM¿)ÉŸôµ2&.ëúAÑÕb€¼AZ²H›Z i‚©y—ƒö9Ê.‘κ]š—AŽñ*ç�¯*rýŸ YŒ^mÅ7¤?nÌ}˺Äsœ¸l„Àc‹8*ì°ð^Ô 76JöWÙþ²@NÓuÆýRþ³Œ§BY`“ÊØd�G潤‰„ÉŸ•ÿÅÕU€Â�Àÿ“€ÿà—_×zYÏ9ý©ÞÚgÀ&H~ïp�Ÿ�üÄõ};€ÿQúùßE?+²âÿjŠS ˆH¡‡µdãw@#7 yµ2¤•÷¨O„àa r¢” y#Á}À_ú ü¦è„Ý=µNäSóôtð%Ý�ú?ø–Æ&¬œi™þÙ.Mþ)m*ÄWsßBzØŽ?ÛÿŸh–~«?W ü¹<08’ ŸäŒ£�8xç‘~Iÿ_ÆS¡,Ð[ €Þ"¤™8^ÚäÁxâûðZ‰3Q²p¦ˆp§x­Ï×v„ ÖH€WäP¶Ýqnòló‘cÁ*ÿÅ)â à t |ˆ•Ü((j@ªÖ†3åæ¾˜§?1ÙS»ˆAÏ�à àGõ7ÊÁ+Z�Ø•@/I€¨êDZý�úè‹h@žé2µ*§Œt­8²ÍpóyÖ?¦Ë:{Ú@‘ñÇ}¢q©B4Ô@ÍKÿØNW¯rî4ÇŸú÷”4ðÿ…´x¾!áÇÃ�ŒsØ¿Žæ~Sæ¥ý�óøŠ/ ”p sàÐÉÔí¡�ïÂóýuø �ö¥€ÿò/Y\üÛ¿-nykŸ€ûDÀÍvñ­vN$[È!¸eu ð�:€k•»Vùïr>Ëà:ÿï¢8°òW>÷|Qü�#b€¿êl?ö³K>àöB'í8*÷)ˆ€k  ¢L[Ãöâs�ÐÕôª‘ŸÚ²¦#ʘ‡’oª~ Ûü²Í° €œ˜u¹Þ²öÏ¿]ß)€]q~Âj€ù†Ý×núãe[¦.vJ_~}Z܈žpo€ÚwdÒŽ¯úI×ÿ¹îÿ»âo6âŠÜÈv¿¿ü·mÊ€jÍ8É·Ž(+ÝX«-?yÀêÑ7ë9•S ¢%@.éÌ4@YúpV~ðÔìùÐÖäæ¡”CÑÀÏÊÞrë‚® S—KuÇÊ�v׌ 'N|8AäÃKÎNqÛä¯â³Î!ßPÊÎE~/À…ÆÀ;°˶Ëd¨ywú©Æçö‹–æ²@9sYöê ð×d =Óª=­þÉËwï7¿þº¸‘@¼û�ÿXÜýóŸ±:»—ƒÐ;ÜÉÏJ�U¾€?šð/ÑO’ûq.¨ƒ9Ó,¤}ÞRºüu^”E/Qýˆ•ºÚä†Ä[(2U€ÐTì{JB~ô¡;@ÓídJҦ旒y9�êÛp÷?|k'tõ:¬kíë( ¨:®ZQ‡Ôúás€¤Z��eM4;‰ã¢Vè#<÷Ä‹�D/Û±bõï÷ØMUe%ĸUʘ*”^ºÊxéGx¢ñy’�;Á¥“q˜€ßhÛžË_t3àW¨î ˆ›û”w+ð¿ùý÷è…à+v@�­}ùû*Ðü‰¬þÿ¥ø¹›§a(õ¡9*¹\‘6J@p=Ò£� žH;Š\¶ðWxÙ»°£ J€¼€1dÐÂhýàoüÎnJXG—¹«ùèR¿6:®7FÕç¦}÷¥Éc�U6Nc–ŒDZ¥YY?U o´ @Ôoôùªa\ÒP ð*6ð–�QÊÊXÚ¡~_žÊx!Çô�“m½Pž øßÊ~oä pIúF; îP>×a¹þÏêŸWùÆ$«òLØñj_Åv¤ë»ê¿ èØˆvÐß"×uE ô&§•5„MðdÀðY¹à¦ô?Ò–1>úÙœ€Ð ©o~Œ¢y¦ËÔÏr×G§�SdnËõw¥n¬<€)9c@õü\\Žáž€f™èg8„ÊëÏ¿>=ÖIJvt†ñXàGÅsõ‰Çã³ÑJg€g¦“å|óôÏã@–ƒåY¶ß×ïõï£ë!eÝþ¡Û{ˆM^c�r^ãQĘýGæÚ/ï`' &L@P‘a<.¨<®ñóß7Ý0x«§|CôDÆMƒg-¢‹ ;13 ©~€�úëÕ鸩Kø ]�Š «Tø>4¸]ŠÑ­ÈV?«}oûûÚ€3“¾ÊŒêÒWÆ Áý6E>)ì:¦Yf>×E§cþ”ßÐåñô”ºc²¤“1²ÛÃöƒE$ÃqÜà‰Ô=tàüàóÀ8¿ù<Ýö^ƒýõ¹NžùC�«Ú+ Ìi�ræ´î Ó�'ÁpDçxOüøk5Ï ƒx|�Ë'¬òu# ã­sLãÏÎhø‹€z„$\ƒR ö1!§tä‘‘I�¼¦5ÊÁ£×àŸoü½µ¿ÔÐý*/ôÑ·ÄøQo]D�ó¬’tN»´œ€œï:Y¼m OÒc”ü �±ò$GÜ(JÚাĥôªŸÝh6h�. €›ã½ây1ЕúòA2^p÷xÐoxõ³ü±ž¸L>ïÇÊ•¬,ð\-PÀs=rOÜï{MüLö¾Ü/ â%Aßô¶ÀS�?o ¼ÿóŸ×z,�É—sDm%Ÿy|Бíe.(¨ ² 7?ùlEÓþ›Œ²cÁÀ„ÎDìhy`Ö1%–vÀpn|5ycÑeRÝeÅöky.‡ ýD@?S—7]Q–tÊ.C ,é]èPIUÄû»qã�t°òüy‘Î纟0c �“qDÞ«_¿*Æ›#é—xú†£9ö@¾éSŒ#™¼Ø²Àì(`vOÓÀ1LF+}ÐdÏ$ТI•Õ ï àÞ€3&Z@Ur>æsÏõý¯_—«/åáú÷zaÐB7 .D¿)^‰¿PäÕ®8è Ní0È�ߨ`b'6å™à³Œ<‚ë™4b€~¶í‰ÿ) “ÞŸB. ?]Éy¤ûz.ã<—T~"|Ž®“ËÝ@IDATuYu�ŸÓðÈMs=×u½Pµ;6ãøÅ ™DouœnpÜT–þïʹ‚¾™m㘰 @y €§H³kÁ.ã弨õ;PœcÚ¦Û}ˆŽÌðÓ·ÿÒÚ›Ád/Be9/â0Î?&O y²€Ï1V�ꎿp'p \p &aÇk9gº9ðBñJñ^ÂzgÀ¿¤ïJu¸››šLæ^q¢‡©8úB¢ËôU_q$Òs¤Nv.à‡À„ŸÓC•”˜@s ¼ëdž2ciË{NSÇà/§jxÛŽ@¯ÏuzJ¹ÜÏœ6oJ]óP‚ë¶tŒ™Ò€”{8–ÔàM‘Ÿ¨8T oDŸ/œ3ìþ܌ʻ$ø`Pô�>*r>oŠëúŽŽ óZ þã:>æµ@9óÚ÷Åi÷äÇÄ ŸcžøÙô™*qnyMÄl½Æ R )àø.ùwÑ;Ý#ø¿—ü­v>KƛޘÀ™Ô‡©€‰;Y>& (}j“†€Ø Ïù�·Nêç¨äx@o]@ȱ—�¥)ï�ydÖ5æ sySë�¶ñ"ÊdYN›·ÊY†‚,o í(a3. àx€ãÀ9`G±U9á˜ÆqvßèŸb8¢œ§Š›@?÷=—‹s ¶ÉÁFõz²Í_¯æy9óÛøÅ´àÉ�‰~SŒ•á2çrØ*¶€À–ì /9”Çÿ^à¥�€K€NíÄŠNô§ Ý!m”É=À‰¾QXð§ŒAA È' é@:E7éEÿ�ª|O­Äòœ†GžCNÃorrÙ^}Ë�²Y–Óc¼u»ŽÓM'Ú}\â ‚J3ÀŸOòv­·ZóÚt¿h ç1Hõ‡Õ?o”ŒûVÔGv.2¸gžº9 o™ÏÿÔOYàX €#=ˆO=Ùôí{"Ä\΃æ˜w\Π7Ši2Δëü¾†üVy—zràB»¼¼…kÉÚìG×O`Â?tà¤XÒGMâDr¸¼ýàØòW€’ éˆ@—[J~ä9�)õ\yN÷r׳j€mGdY�ëAÝ7ëpšvp´WÀŸoE@[Ñ >g²lj>Ž«”†s"ÊÊ?Þ¨~}Qÿâ©ñœ_ôq—{è£ÏýCŒ�öÆÂ¶¶ÝDZº‘=u{S�ç!6x uÊx Gy¦12I ü€{–9íü¾üɉôš”)�„VZ…œÚN]^´¯•oĈt·~ðb'=ë£\ŽËÜå/eÆ¢Ë8/§×ñ. Ð;îþè£n¶ÕXšr.“óÍ÷Ôz¡)pܼ ÐòØ7²#Àq÷“ËCs.Op âÅ@ñ+õ‹'x7OðT@œ¢ô3Æ”øœf ¤ ‡S4Z?e�,PÀ F} *=az2„:äü3ŸmÄʔJŒ'˜”Ñ£´c.¿3ÏdÞt,§lµ�^µý¥ÝV&&uMúÔ>�2ƒÀ¤¯t€&<±ä;æ¼^F:‡œvYSúBüÍCs�¬Ë<ù¹�¹¼å–‘îË[�éº|ɱÝòOuQ6Äð—œË=aGé ›[ߌÔGJ¿ø\p8ôMý=“ý.ÄóX 4B÷“>¯‰Œ‰sšüC�eF3=+Õq•Ýg;fåÌfÚ—¯8O†y•Ÿß“'ÖÈ/§{=;¦›%âZz¿tþŽOìÕŸ';ªT1œ€¯¢8|ð­"/â3ÓÜ»À±òý!q(ð¯ëT?Æ|ž¯«3¥üÐíº½)mUº~X €¶˜�ëÿ,³5ôDŠ=>hLúê‡'@¯ú{:t•IW v¸ñ/¶j•æšmÜ0œˆH¥{¨•ÆéÀ  /ìDϘ,z€ÔüR²üíå.ÓSëp]Ó«}SdYŸu¸N¦ä1¶‡×]GÑÙ·­¶¢5É¡€.7Ö9Ò—xCÔçjè Oàî8ït|ùå7ÑKÆ¢ç,ý'ªÌ®‘1zL´Y¡,0¥Ê˜Òš#º^ú$‘Çøèí`ËLs^L¸*Ãr8âãM€¢vÜJ2QP[Áiâ‚ÀYvŠˆM>¤“çz`rþJFKä|·a'€—ÿÀ\ÞÔrSÆA^�óÖÑ]Ë�”ÃFa+€Sú žgbœûôe] §?|"8Vö¢8|(è«úõ]6åÆEòpPx7€�au—òùoYѲÀs±@9ÏåHy?=âxòÌ]ÎàO¾ƒyïØ àÄú˜¤ç€X€¦Úò8h•›Äg\9 ï`Þù¦äç¼±tÖسòü³@›ûØÍå·ÑÜWxµ��°4l&Yv¼#DñCvpè;€üŸyÃ$;¼ œNÙ|Ó{|.÷T*‡àsfSx&(à@ê©'‰©Ûïõ1Aö2ÒDƒ@žDmvd^t)à{«}Ðû>èÛ·zAÐ7½+€oÐïhVž©úч,¡‘ný¡¬Óüi|‘Ž*1¢—¬�ƒëCqìàÀ#Ïe2ŸIý[Q.˶¥³®M|ÖÓø8‚âóñõq5ݤrŽ<úd'€'øT0àÏS_ä\©¿ñ^¥Ùèû¾-ÝŸëý¶åÏm—C·ß·7÷øz{Wúa(àav«Zk,�'‚ ü÷¤êÝË çÿwúhЯïÞ-þöË/±z»Ó[¿)~TÔƒ(vÐ ]®p[«KW¥%¿ÇtXOþc;.ošÛˆ­>ië†'�6ß§�·ŽöåI\^,­8’õÔ ÐFŽÀÊc�² �-x:àB¶§¯Û^ ä1ù<&MÈçüRR¿e�ça�r&>N=Ô¾Ö‰!�{b’Õ„‹Ì׈YùS>­üÕg„¿ ðã-n*ÇK\Nõ½€§pâêÇ@Bz4‚ć�3êC‰ü�ç6r:·×M†ÍÒ¹z(ëЧ-ïé¦rÊKC¿�y¯æ�éܧ•ÉF|ˆ7òÊi?Á÷ È6xS÷ÙiSäù\w¹¢e�çb�rf8RL ¯mbèÇKÚ%”4 O í`à­€_´À·¸~ øÿSàŸ�*×››çÝé•¶5®!d~n`(ï° þPç™üM³jlŠ}Ékv€žúÉæ¡w,írëhno?j§ åçÌ¢/DîÞ (þð— �áäs5ó*º6¯?ç)[¡,ðœ,PÀs:ZúzŒ“Qß'ÒyõoÊN߸Ò=ïå¼S¼ý¨>1&"€MðÍ;oí;@y€wþ@ah‰6s`ÏÍYðQÞ öD}Ÿ¤Ùuc@èËñVþ¤‘ïûι×Í ‚,§ûºS¥ÑÆú œ² ÀÇ�äjÅêgàZN€ß È댹ÁÓ`O3æ7QÊU( º2æXõù _¡,ð,PÀs8J/ �wÅN€åAl+i l\ñ9ÑÜ÷Ì{ ÈsïÜÉsó=µÓœ�l ¦ ëͼûp¤4ïܪß\°Àk�ù: ß`Ø;KS.ïcÉN€å2yœ¿ÊÏÅå<—#Õõó©'š}Û›3سâçe@gÕ(9¯L×ãç½:ÚzŽ$ A쉛væhÿêäœñƒ¤=—ˆì¹À1áœôT{óä›Ï“îûŸØtz]´5g˜»½^?–¹Ç×·Wé¥Ê¨3á`è'ÒŽìð¹Vžàæ¿+ÅKãQåx=0Û¸ŽóN‡™„I[}�`žtŽüq\>wÁ“?Ô1çÃ[ži_fŠ4ú2oÙ‘RzMäü!p?�šòjà/²9ßàå@8d¼50ƒ{Ïû<6hA³Ì|4T?²6´}¤ *íd�rv2SšÊyr„'þDžà®Þ Qr^ÔÂsÛLÚ�'ñ©úô$z4žXýkl?í´q®ô‹òVª§—©¥àÌØµÕôÉodõÿQiv˜x ðB‘ƒ;Ôï€'ä<§}.“îyd� Ûìå¾=¶×êö¦�ÇUtÕå¬Ú£R¶€'ËØ~ÕÄË=wzЅ⹜. po«¶ƒ‚¿&|÷/€™´ú°„�f(@Á �ùÞŽ”è5ž!’vݾ|ÖO8…h_�2DòÌ/k-Óæ¡Ög™ÓÛ¨Ëo ôÀ �ÜPp&YýóR ¾ øsž]‰¯hÐ�—)Ïïè/ 8í],Ÿ/Ûô©Çÿ\Ûg§°Ât(`:[–¦=-�'˼ˆà°OèOÏg‚y� åê¨Í}�BÓejUÖƒr.O>Ø&'ýYOßžÁ?—A7åúˆ¼½¾>Ý—wzS9åa�¼2Îi«8&Šð]ñ3�’M9y50àÏ<hðçœ[ãMÑàoY�?F�&xŽ˜F[ié-P@o‘JÔž,¡Üp€\È;<"È*-Ê+?Àî=ÕDO~rš|ç.ÐgÀ߀œ›à‘÷Áº¡„~¼Î_æ.]šù±2–¹ióëh.ãúkdBzÑ:s½'æ½@7øîçÖ{Å_otŒ¸Dp"ð�Ýñ£a|*3Æ?ñÐ^\óØ=þ÷/ndO? ržþDžúòö5é²ââ%,8¬üý~Yˆ�?â\†ýfýQŸ„iÞÁüˆ»Œ)eˆc«ÿmõݾÛCgæÝF–÷ùÛÒYÇ&>ëéx€à$òˆ]¬¬NE¬y£ç¦snSÞ¦î횇à§J¸¯„}Qä©. ø½ØÙŽÀØ÷2ÚGF˜{ ÑHûéÛrr™)ùC·7eßK× ”ðÃÅÐý°#s¤+±«É§ Vÿ€ r›`ÑÝÁá ]5S;í Üæ¡98?SxœvˆÎËõÆøÜÆº:nßtLϘÌå·Q×¥\.+žkä8Î;½’˜7î®ÞV(Šà—± ðÑ9æÇýn.?õ@?–¦ß–Ã;ôçºåEËOm�ržú¼òö=9°ËÜÒš”Y� À¯ô¡‚ß4@ÏíC‰‡™ë å ú¦È\¬N/sÐuaSÞX�]Ë�•³L”±òÇ&÷:^ë™>ëŒìL鸑Sã6½·#€-|Dâ?ô7úÜ(;ý{86€?O¡ì¾áÏ oêî: =ôx܇¢e�},PÀ>Öª²“Z O’ø -Z~v'`ÒlWFŠè‹©úÊwpàsP~ËÛ¸ì<_Èò\�nëí˹Ý^¾KÚu×Qt�—£e‘µÜú�Ë|`ðç=û€> Ê?ã�‰^eÙ§ìÐ2Ô;¼ð³ús%™Á?¾(çeyxB/s:2õãóÙé¢e�c±@9Ot$=)º½}ÌJßV¢*³E pð€+¢nšc{™—µà2<ÑfÕÇAfžŽÁ;À;GËL)‹nÒý7å¹N¦}ý]ór¹m|×G…_ÕƒW>àÊÊÇÀùq¹@r^¹‹sGÞpI@rìÇJZa®ó—>¸Lá—}Ty/çÚ¶÷ìÇ(zçê7º7…¾]ú7g8t{sŽå5é.àG»ÿs ÉgÛ>öâæ?|¯Çyûvñéû÷Å­¶”¿)¾Qä³C‡èýÓd*“ªúºâ¸SÈ|9/CÌ€ËA³ÒÔíƒËôò±4eÇB/wzJ™>æ6èsЬô½ÂŽbä©>Η׸ÉSrSœ"i΢ƒÜÔ<}å±ÀOêã¹úF»8 ~4'…ãQùëÞ �úï4|…²À±Y €™�Hýñw30vÊà[ïäüÚ€oß¾ÅýÆß¼ßMõ´¥„X¡ŠG€É½ÉWC®q„Àc8=PÏõ�—uY†b—]i¤K亮ÓYék_~SÙ>ÏiúèÈx‰Jc)À>vå’+¶×à �œ—Æ€(PÍM§¼˜Gý¹`Ž9rƒ¿Á}­ÿÿœG­t?Öå<Ö‚Uz Š8ï//¿\]->5ð¿ø¿¹æŠíáC¬þÔ,ˆø‹€ª>¯Ò€˜w  `¹Rx©3DYú7¥³Êæ°OÚe{Š>d}t;ô�<¨£Æ ©2aå°Ü@:« à‡UÇ÷ `/Ò„PëÉô²œã‘õrË2õØÖQë Þãè)— %øopôD¹.žU7;Bœ|3". 4{ƹ`½ý¸÷H}PúDø‰ßÕ�kÚ—D÷q2ø=Õ¹»‡)ªè+²@93ìú³?̸Ømø<°v®t€x!'€·>¥]€!ˆgrg;8o#ÏÑ…§VƒSà<Ên¯±|dû„¾|N›7EoÏ�¥³Œþ÷ctÿ<6Ê›wž(+mFãà/[ö¼;À÷D>ÀOl—SârL³+NÁ˜þÔÔN,íÐ' ¬Õ_lÿ2Ùk^ Àо Šö½´�BT£/9ö9¦»e<¦±¼1ëd}ý>M=d–gj¹©ŠÆø©â1R?ó”ußÉËÁòVÆG1¨d¶-}‰§Ø àÆOêáèàzü=ç‚¢é°  rq.v}pŸ‡®¸M@ûDvì>ÄË�ÔÖ•}‹^Ǹ4!ÝömÔo„r>èõrèÿ?}º/ŸëNÁÏÝÞÜú§°ÁkÔQÀk<êG0„“u'Û¾á†PÑpäØ_eí Œu!ˇCÜü§~… ÊÙ‘¸”N.øÓ'ú£ô®ývÊ °µ‹>•Êx*ËW»?Y€ Ñ«£ü™ÀU2¢&Z‚áš'íÈ<ÐO´­þ¸/žÔÐ7ø›jr™Žõµ�1²ÌSç!Áõ]w]¹óÌ÷T: þP;'ñ\¼’‡pÈsp¿ÑeÞy™®É ›²ìü½=à+»®?à¯'FD…è£h€ÿ¶ö£Æò‡qÚ� 'à�b\‚PŸwv¸‰ÕÁçºÓEˇ¶@9‡¶øDízõp¨ö²à{x0¢&y¶_ya [±LÔL­?¦×‰Œ;¢¦‡`Ú¶là逯~Fd²' À·€Š` O½œF¶oÈõÇxË Žjƒs<SVýDî‚'ÿé}€"”Øô"ÆÐê*û§í5)ÎDD�牀x̲õ-ô¢Gyw²u<…Ȧ|v Øxè=Œ‹{Ø`’¼½Räå@<À�ÛÛôR ¼ýO¿f>×m+ä„þÿÖ§—¥~üöõä<ŒëÛ{nú6ê×W«€×wÌ�~ÄL>€ÿ¹€ÿRO¼|Ћ€ÞéI^ üNû•ò™„y\+&Õ§ ¤“¥úø³%}¿ÎhåG»   ,ËÔt¿Öï6ÖÑÖ¾AŸõ*/eŠGó -2f;_PṼ̬‡6žQÁ‡ ~%`�¸U>^ÜxÒÄÁ6ðh»?>ÚQ�Ø-Ð1xÌ=Œ ÿ*Š-Îųúçk�ß/Õ÷“(ŽÑ:';Åù©úPïø†@©Žç�Eç¨L1¯Ê˜×¾¥}O x" @“8Ïÿ3¹¿×K€x-ð;9o‘ ˆ¸I+V�jzÒ ‰>nücÕoª~»î es`¨ãRòã·¯ó#g=g½”ã-ËT|¬¼UÐ÷n‹ŸÂ8Óøˆá¨l½èðØœÀ‘cA:"M+ÒþŠÀx$‹ Þ+~ƒ=ïÜ^ÔyCùe­8ö!C�"àzÂ¥ú'»÷è8ì{�=c€>Às÷ÿÅ/jà;ýWô®4ÚÍ€ïs:Ë]ÖŽ@.çá½vŠÝ°K…ù,PÀ|¶-Í{Z ÿá½€ ø8ià-Àª‰˜›Âˆ' jˆ~«?€Î°úüqè'å­ü2Ñ~Ýwhs=—[©¼C"×3¿�†-•O�YýóY\>ÉŒ�cj\¼�1Oå2"ÌásÍ~qŽ� 8«iŽ:WŽ”Ç×úC×�ÿ N@“¯€uˆèP»8^‘‡Œã‘�žûˆ ¬ê ëîˆåÓ_ÆÄŽÄgE. Øà¸ã$qC¢Ý”¾ö‘öÂêo~ä>÷¡Ê‡²@9‡²ô#Û9ôÄpèö²yh;VV* ª0ÜI’iåbÂׄ{ÐÀDM¤�Š€}€?ýØ àOžË®ë }‹ëÊï#Ïv1?B�@Šýù��?¨Æ„ø€€Œk匟/4Æqkz8~^Íìv8JŽŒÙG-À`T<•."|l­Ó_Eú–CÔ%�Ð()b;ýSw¹G€ãú9VÔ‡26ñ8™|)0¢t~Sšƈ�xk¡ ƒ>Ï ¤B§áäøÊ8¤µ«­�ðŸš'½HSSòL OèA¬üú€?;€E\Ð$¿üÝ÷€Áht¹L±Á¦ñ÷y9m¾Q;¬FÃ�îK Ÿa&²âVþ>&ÐÖŸ|œbpJ7“ +f¾æT@é�xzCù€*õ�ó¨ß°ò×›þV.äñ'ÞýH¢¬ôp`/€XtÓ=ñB!À¿Å8¶h£¾ÆÈÓon<åë€\ êÕ¸DÛúN†·õݾ�&?ú8H‡CÍ,Gc›ö`—ÿ*þª‚mòª} Á–p CïÛÌÜø¹õooß¾½ü\Ï|¦ÆàE«ˆš�ã4�ãjú²}º/?¦wÙÜú÷éK•}¸Êx¸íªæ ðäæ &¦@MxPƒ7]I/§Ê:2¦Ò20<µ&ípDãÈÈKeWT©ÏD³Oðx5Ã`e> ègÝdu[!xë‚b'€6ÚE€¸Ó_ãô ü‹¦zgÇFõÃNÔjºèC|îWÇ'ÀoÖH#J}˜R'lÝìãÆÉo–\–uFGCO+k>(úˆj#ì ¯vyë`8\*ðå�7àü‡úMßYµóÄÃ7½›âZO§Ü(^j×Âo,D'6;kàå‘Ä8WT{œé‰–«?ýi?|Xœ¿}N_<ÄY Øö¦–EfË7_´,ð ”ð«U�Y-À„Ǥ %ðKP¸¶ìå$?T¶‘�Âàä ¾õ{[Ÿ<&Æå1R'Æ#qÓšÒ�ã�³&Xö‹•´(+V¿ÐÇ/ó�Ú)€Ç ð‡*fàYÓÔZ±ÇcSÛ¤i ½Œ‹mr€ß[æŒ/Y²°©Ê�pV½Èi ½Qw$/‹¢?YO[nžvèý]ÔqêÂ�QÛþ7Šß•wýñãâFñö�?W_¿Æ;üå8Ы{=Œ÷èüàÞêCÏúúûßÕr|mð^;+ç=ýè"ÝÎÁÿ‘,+¾,°«ÊØÕRUî ðÄ6Pµ˜ú\[Žɼr>HçEœ&òMæÇ —ZùsÂíû÷‹{E÷ g23QÒ»„þøõé87wQ´c™¹õïØ�*¶§ÊØÓ`Uü°ðÄÇuÑ·ý_´uú·?ÿ9ÃºÑ ê‹â©"[¯s&å£-&yÚ¨ V’šÜcë^u<U ˜¡|‹èüyÓ‘Õ92·cà ê‡ú�øýñC�ªO°®6ÉÐ[üê «þØâPlã¨xÈŸÖ¯ØM‘Ý[Œ]}âi ®Áûº:¶ÅÖacøÑ ^³‹»�Ûhiç,©eÑžD8`—ÒïHZ† èÁFa·Öç·r~Ѫÿƒ€ü�â•Ò~Œ1v¨¯qÉåÒÇG ôë|æqÂ?Ôî­t½ûË_·ýk´y÷îÝ‚ûÂQµ#À.‰�Wï ¯PØÇåìc­*{P 䉎Õë[m•þ¢R8êÉMš¿‰²õ:§¸Pˆ€©vãîq€H@E¶´%‹Ÿú+"“ÉPh1E2V•|c`¤c¢o9ÀC�[²;ÿF¥'SëŽvÈS›¶ñ¡ÁchO}À&áø0~(^¿€‘Ëv‚—­Ç;ÉÖ‘/Ë0Ö> ³sòpŽDṋŸ�NýIçÒE>ýK½¡n¶¥ø �þ‡æà \ê’@ïÄÎãSyœAœ<ÀŸ§#™ÿðWÝké‚r¬ßhGÇáœ{´ãåc”Áßö+'@©Âƒ-PÀƒMWaO~yàZ  5ÿâwÅ+MÖ¬Ìæ ^Y0´N àðÐdÍóëLüE¬ü%‹mlQBÈ5áG Y‹±"Ô÷Ø €nÔ¼u„²=è³CØ‘„ÚDný¦.wHmÓÙ$죱€¬Ž}oà÷ÈÆ':Ö(õ\•ΑÒa×®óŒ½Ù.6P‚ãHðqþ¬6þª»ú¯Ô�ú´1ðMv&Ð'Ð~Ë€øsvT?Þ_ ;ô‹ò¢ìâöªn¹þÏy,пûý÷Å7鉾 ôOõtÀ à¯r¯¸'@ýcÜ9’M('`i‡úÝßåìo³IjÄä7‰¦q%sëï[�º½<ÑÁò|øJã;=2õNè¥xî è'À¾o;¥Û$ŸËà¯<úà•3}‰« Ç]öLøÊ�I^e‘ø%"�»ÊE ÀŽàïGï ëêL¦>^Ûú·±=Ù.\t ™Jx²;)8Ya?Ê9*�kíl¯¤¸Ø=Å8 íX¸ÖŸÓ8„Ÿ[ÿCúTu~¶@9?ÛdrIÿg˜¼�× �É�q6ÚOäs™ ^“iÜÍ«LÆ“hôG}ÒŒ—¦^žIÕ€PåòlýÇ y¢ý¯ª°©b]²6ŒËÚáRŽ€•Ý‚¸$ >d:D;sVexä<"ÐÄ/þouCß;�2Ûô8±]�.•5�¿‘ƒp¡VþÔ;S9tø|ñùév¨øs~£?8.r'Ú¸ÕS_t™‹'âýû[œW~�¶`.1øsIÀ™CŒûU( l±@9[ ôØìÿÇZèÀŸt‹�×¾FC�BÅ<ùüWú`�ѤL&áØÊ¦žxV²¡ª¾Çê_“6”½<¹¯è\Óµ× Æ2J  ¿ÜqQšUv|tI4. �†Ç h4nÊDŽ€žã0f8Ž›ä|‚øœú°¥/0~/Ê%t�4Ýè°€ìTåÏàÐØúG—bçV–&]9� GÝâã �Ëø¨7Àºþ'¥8ž*ošÁŸÉT…ޝ’�Þø%Š6 ünŸûE¸!¢Ú�› E}"[üœ‡¡ªˆl üùßø¿C{”­P³@9cV™@VºÇ1Ûžíû³«åá˜PÙ xh@KDé ÍXQ]Tæ £mQŸ~4:EÎŒõçqŽê*á¸8DÙxß{üªápUØÐ#xŸ”ޱý¯myžÖ° §>¦ÐXÁ‹â‘þŽ>¯$Šs”3ÔN4ê«]Vÿ€~Ÿ€ïsm¼ÛÀß@�[X¼Â: ”°Î2G.?ôûÐíõæg¥;rn/´àèÄãtš~&Þ�‚Êö!Vþè Jßk¢úðÆìa�A)§Húíwî/Y¬*Éoúú¾Tº³@g§åQhe°#Ç3•Ùén$äf<ÎÞÊ÷IÌ ¦x¹¯ãÅàÓ½ñÂ'VÜŽ´§@?8çˆÞ¸li^%D$Ïý¥;–¹® ýꇷÿ¹��{n œ/Ž^鯣>·ì „‚öã¼,Ë|Ÿ?¦#—ß—Ÿ[ÿ¾ýy­åËx­Gþ�›É‚7 LyE*»q=�U~lk\{Ž/À_ubBN@¬üí4' Ÿ¼rSLð ô™òê'_ ‹¬ƒ¾üÃ9Q»·8Š8ñ` :¯|O@ö}zÙòóüõÿyöþyôº€çqœ^e/=˜jf€É›À R†€6ÁÀªtLü;XÍÃà¨ÎàHÏÊ€‚nâ¶@]õó ð—ÏäÀ´­~å?Þ¢€uã=Z]§Y\7ðÿ"Ê÷& þoå4ìœSñÝ΃8�äÀ_ûƒƒ€cÈý¬ã}ö@ÍøK?�FT›¼Üˆ­ÿØ�#âË`Ü'Ðos¤>ÊQ;T( ô( ·È‘¦çþÏ­›Yûö™´r ŸÈ$è‰0¨d±ý¯ÂûNq.oðg�ØÚ@8�ð�L¤+=u>upØð«•éÇ›ÇZü,`»·ª[ß8n:ŸÂA´ Õ1Â1ˆ(9«îXyëxáhòöF>å|#ÝD Œ›)«˜i"«|"mç´ó%B/sz êóÊŠ¾ÿЬ/ÓÒ4’ÿCð�9çúºY÷0 G0sëD×^tÕr^ôá}Yƒó$õà­‰‘›§Ø>�´&»�“¢¢Wü¡ÝDMþ¬ ƒ* b𔻥  Êá4ðþĦ'Vþè¨0›|^Ð@¶´WèLx¬Îq9ÎáäQ¸�=€OdŸ¯ò¡ŸS¶þõÞÿ{ñ÷ÚŠü ô¦¬îYñ£›viÏ7BYùá]Ç@iõçÂíǹ¢>qîœêЧFÚùõÚ9¾ˆ-7U³C`ÜÊX €:ŽÚLVc“�6Ø÷t×X4' &mµ5¬ú5éøkÒ€»›8WÀŸ<ÅÁqHà?8èjåvíc•ÛÝqéçÖß›uŠö¬Êõ\¶qy3 o$^ëÀ×v oŸUÓJP:ï /®3ùüDñ€öWt ×c¢n×ücÒöÄ�® ;Yðì2,èØ—!Í*ßùPdŽ€}€¿Ž;4^%»Êãxßu¼xÏbw�Ü”Ç wUßï›°n@�`0Ç /€:Qƒ?4ó8þjÿ^7‹Þóå?¢x#�KHôÑç¢Ê;d€‡w$?çù¿ãz�¥½>·õX½ëêÓ'ˆXa ”0�KË�,à‰€É™7¾×ö¿ðþv]Ÿå…)|Eí“"“öhø•àßèL2L.€¿¢fšezDÑÊäÞ&'êp³_<òÇ£Üù�åWØnª)5l9€°æ-{ÐfQ‚Ë#Ë‘ãJÇŽ‰ŽU~dŽáôotüntNÝ)Þ+.�+~Mð%3ØX_¬âÀJP[}ÍÈ[¹¸.)€ð ñÌ¿ú¡ÕïÇÓë|IéŸ-öl›§Sžh öÊÝrê°}oð‡²•ï|%—÷ƒˆ¢ÃŽtµ:”w]Ž|ìþ4ç÷‘ˆãµ¿:'nt‰iñúJ€ŽñµêÜê±@ÞÔçÈùåþš.]P)UX¥ø¥óV‘��üùÏ‹7ÿé?-Nÿíß§ûÛâBé+9 ç͈>Ó×ÑK:‡ué^žëÿz-PÀë=öÏzä¬ÐùPvx=0²˜$5:&⸾ø+ò‰×KÅ nâRowã™oîþf Ø;1YvkžÌᣠÕáš¼ë_ôŒ]ÉVœ•}-›˜6ê4p7€CIù²5@7é‰â æÎç8èäã8_ÉãX£GÑ|P•q}ª0œ$#-‚3Èñg7'D]OúT;L×êëþñe>�G|0(¶ôÅÇç{Q§H{Ñz cÀà/ ¿gÕÿ׿.Îä\ȸ�p)ù¥ò/Ô¶�Ú8çÜÿFÑ�å¤âŽ€î  ÿ~Sôf€ëý¾ç×ûþ÷þ7ÿûâLñRñ;j3ÚæTÆxW‹èÎ<éÈ#ô4—)¾,PÀ‘œþ£IwöîÆÜýÏúቱ:ÓDÍYùŸ±ZC®Þôþ€?@åq¸��¯¥8ìc(�}QVûñ’OÔêƒû7Ô{&Ì(\vØ@†¼�yHÎc2‰-÷F-GO ÿªÙ9Ž£òYñüÉë€ÐEGÕ‰ãÐQçKa]™>ßi_ ç&Sœ‰xªCà«KL7Š×Šqþðv@â—/‹;ÉxOŸñ�¨s+î#‘utx»;Nñ=mïŸhÕðŸhÕ.z®K—ºàRyj'$Î1h:¯òÍ÷”ñŒ�Ýãì©ËZn;8½/�Zß¾íWùÝ,PÀnvªRG`�~R´\ûqg¿’lùBlãôoµ:ƒþ±ý¯|h¬Þij"c€‰Ú %ñ²Œ¨Wq‘O9ŸÖÏj_1nþÓ$—¤ã9…<ÞÜs@›ÉÁ›"3…w iß|x»œõ¯»†ï;å½½O}Ç�xÊ×ðe†Ðh‰§�| €Ç^Cñqì Mžó3ÇŸ2Š„±t–›Ïž`ËÔG€cʪ>î-Ñq@×êÿZç+~VûÐ;�þý?þ7 ~Q¿x+%�ñ](Þî8¼Y0tÈ`«?"+€_m9fÀ<}…ÏãÍ|�Çešó<Ö¢e�ržèÈÌ9ºðÜõ÷6a¾ÕªŠ‰•»°¿ عË5Y®Í² ;U¼ìßèÚì{Ñ÷�²à­X¶`Y±s3à­v øÄ+—E±dù¦2Žñ¶?êþZ¡Å*­9±BÃxâ°„Ã�ˆñ( ;BñÝF] Ûàú¼ÁŸU|8’E›JSžk÷q_”‰%ô‰ïi€?ù䵨äÀûÜ£ëÊ÷ò1}–A܆ÓÞ m ðêgù��¹Ï½áž�<ï¸n‘sð?ÐCYñ³€@äî~îò�Èn€êqì×Q�º«3ÀXúq"Ûúò¶Å¦:›ò¦Ö·©­ÊÛÝåìn«—ìOþ+ze‡I§�ÿµ¶ó¿ ìÿÏú:Ûm¹~Uü®ÈöëÙo¿-ÞéYí?k%ö]+²rÞ«ì¥(_|óÇU ì¼eÅ•]¹‰ë„ë¶ŠÜÈÁš ?j¢fõö�É@õMä~ô/dšŒŸ*¸¶Æs/qþÜŽûLÉ#+sQ;ÈØŠ�-}ñÞ¶ä©ãçôÅ.A[á ˆRŽtüü™xBÈ:Þÿ—L7ñÖ‘ËŒéŽ[›æ]:œo‰·,z H+àå¦Óøp�Î%^ìGPôwZÑã¬ðy™||$ŠsOzxS$Ïø¹‰5v8ǰt‡˜Ç o‡Àus>ã«Pè-Àÿ¹ÂŒð¤4c/ZuLÀd®©ü_µ¢ÿ¢øY×\?'à^€.ཀ¿üóŸ‹ïâã@9 —ŠZ|Î@—ÅxbàLŽàχƒbÒÕªíD‘ç¿¿2Ik«—•ÿ7MÒÜ37o%`¸€î'´ÚGº� �½u(Àíäæ±O8*‡ �ò¦Mf‡gÁçv€õ¬OÔÛø¹ |ÄV7çI48Y¾ŽïËïRŽ:—]¦Æ ü¦Q‡qé¼a›ÐæÝýìHñ2 Þp©së»Î™ïºY�ó5®÷«\ж{ç�xÎo÷•ÞØIj62ˆ›Òþ.‘ò}¹ñ–´,°ü¯—ÊÇiVíŠL¬¨ØøªmýO~â9c;·Ú¸Á!ÐÄLwýý!`�ëýšL¡_µåÿI«{âGÅÏøï’]+Þ*òšÖ3­üßJÎ;Û‘½‘Óp*=P¡w¼~ðç5¬Ü(x!½—Z‰]ig�7¾Q[áˆrÇ÷%7g©>«áX¹±šK1úìÉÕ´Èé±éYj£}Ò¬Æû2® �^ÃW?àW¶÷ þÃŽ€dèé©ò|®�Ѩ£2ó¹œeÎïiŸß§ÇÊ[¶­¬Ëe ï`À'm>Óàuî@9O3?8­LÖåvÖQ÷jÏ`Ÿy—q¹\×y–Ñü1…¾?aÛcêà+éK9¯ä@?—az"Ð×V?[þ¬ú¿üë_‹Oÿ÷ÿ.ãÿû‹oÚâçìxæZþF ®2 í ¼Qš-Ø|MŸm~tò7žý?ì5™³ŠÇ!Ð ùãCA*Ë[Ûpx×Ü; �€¸Pe‡Éë‘“*SrŽ#OÓpìPˆФ Îø‘ET? và×^ÃWÙüV† ¶ÿ%‡ÇÙ ]¢ ’­Ð&—x°ƒíåº|Ë\¾Ogù:>ë§ ¡×“ËdÞe£R«×Ëœõù—y¼eNCiËN€û(#Ëå#±åÇõM îcÔ2ÊfÞu3ÝÒle¿b ”ðŠþ± Ý“/4ÿG=ñ“@ÿËÿüŸC¼–l!'Þ Øýs9 oTçL|<³-=šÑã¦>¶mÃРoØÀiàqÙî'Q¼¶|ãÆ?mý‡3МÍü�6ŸÁà6o Hóê\ß…OÚ-B©3\so|8ðŠ+×ðÕ×�5¹ËÅΆò ø‘V™Øú—<Úƒ6¾Ò„L]Æò]Ò¹¬yÓ¾>rBnÓé1™ó2íyÒ9äóyNÃ÷‘v‘úæ9�r¹1ýYF½ÜxtìB]f8[½¬/·U|YÀ(À–(zð¤É5Õo8ÚÒÿ�ÿ÷ÅÇÿõ¿ßþû_|UüößþÛâN«}^÷Ë|‰MåÙê?ܹ.K@�É9®Ï*ïT»ñ|?7y¢¼›=nÖâ¿"»áh€—¸Ä@›\Ñù˜tȽrwÊêð÷'p¹žï:b€Ç1`ëj‡`å>@¢¼|=?Ú‘| ð­4¢ê˜³lÛy¢ò{:Ôiùû¦7éËy™ïÛèóržà¾/S?ÿú¼ÉÔçæ:ŠÎuynÁúœ6u<S;}ÚrSçgŠnÒÊë,PÀ:˹|î?ö¡õÐlÛüð\ógÛÿ³VþŸ´òÿô?þÇâZNÀõÿþß‹[ɸ럕k€˜¨y§9|€»#îÎ+{ÊÀ‹Æ+�Eyá €ËJ_ÎÀ7Qóº# øãp9@eÓÄ:6źÜÕLòˆÃª\üÐ饀ÿ‹â¨ 2”7ð›Úˆ-}åg0ˆ6UÏTÙ+ùM»ž©ÛÜ”Þ%/—1%øÜÜ—.kÿ¨ß§{pvz¨÷rôõ2§�ç6Çè˜íz€Ïió¦®o:ÖÆCe¶µë3® ÏßåÌp ùCVØÏ¬Ø¯µ�Ï V¾k…ÎÍ~€?Ûþ¬üoDïµpªký<ªgå6�¸) %üá|Ž À‰`À||XÀ#°¿Ñã\_ôX×7Qžñ¾÷ê_ùܹí�Ûs›¦´ã›í ¤ ®ƒ–X½C #‹É[”:ï$g€K¤ ÎgEcouô½TÚ`í’n:]­ÌCÓ®gêörzžz.×Sçõò}Ò¹,Á;RÞ`o¹ÓPó΃¾„À8°c…ù,PÀL¶})™Ìó“ZþèìÄsþùØÐ]ÿá° žçõyIO<·/ œ¼#±a‰"x€­~;ð.ï|ŽO|—ðY+ÿÏ͸õ—T&Ž+T:ˆèqt+xÑŸ¶ðU—òô}xw¾øpš~Ú  `ã#­H ÎùO|.C½”¶Ó¨KóÐ]Ó.gjN¯£›ÚXWg�<ë¢ a“lYâG§M3è˜‡Ž­ü‘爎œ†·,˜–ï>ZžÓðN›ï�Þàoù˜Në.Z³@9cV9B™'ƒ¹ºvhýž=®ý×c}¼Þ÷£^äó‡¶û¿ðJ_=Û§Ë ]óPTÀ’hð_çÜià�x‚ó¡è° x"àÊöü[­²Ø!P�ˆÀc|u°ÕãOäxä©«wƒÿŸ|%�¶iŠÞxo¾xÞ¡�ò†˜ÒòJÓ>ú]f)úQ'§3Oy§M³¬ç÷I[Ÿi®kÙ:JÙMå7å­Ó‰Ü¡¯ßËû´ÏI×# o9@ ¿.¢¯ÏË2·7FݦóH;"3o°'�yÒ9ôéœï1õò]Ó½þcÓ·ë8^{¹r^ûpãgò¸ÓêŸû|ØÿþþÏ⣶ü¯ÅßòhŸVý4'+1¿ùW噊]xO�PvxS^Ä‹�.Ô¾p¯{.tI‚'nÚ5_†²:·#¥~LÊ­ÌÊ5|•%ù⡌cxǾÒv@È‹ØÊ÷i‰—ù­Ü¦tÎ3oj½9½Ž§ìXže=Íåû<§s™Ì�å[–iæ]?Ëàr¾e¦9>™ÓPóä;¢ÃüíóÝæE¿ƒy·»�º^ѲÀ¾(`_‹UùI-à‰“gô¿ ìÙúÿMàÿINÀB÷œàðèžZµ0æü(Áàez5ø;=.ÃÇ‚.Ôß à o'8rxÇ€)ô ‡A”•=«}tEûJC¹¦Àû:~ä+íÉ<Æ£4刮“?å¤Ãeƒ¦´Ø•¼Mi癆þ õ]ÎÔ}pÚ4ë± JX—×ë+—e™Ó�¥öœ^G­o]>ò\†s3§��œàs·§ëò¢Òš·3F‘刊œv�5ªŸµ˜]v+Ìcæ¥ e�'±@ž8ÃH;8r.äðl¬²ÕKNX¯ú{ h¤D‚·ý òyA–ã­&uÚa€· žò¢ 9'’ù �ʪ€&enî»R=®åÓ?·Ï„̶=Àn �m|¥=qÇ%ƒVÎ[ü1‘» ú/æ'‡@ÙC~Ô[“v9ÓAçË[Ï&º)Ïíç>÷å]¦—ç4¼ƒu9�©Á:Ëvå{½N[§Ï_ô™ßD7µkÝ™ÂçHýœŸÓ›t?÷<�ù¹�ãû_À1•ôiî?Õ¾ú¹ÁŠ×ô^ëå?|Þ÷ZñT<«pØ`¸›ïiv0!€�Íà¯ä°ò·>겪çÝÿ¼)0.;ˆž)�œkþá40ð¹†ïù¸¦Ï˜ ôxËúëµÈs”ªYÒÖkê6sÚ|Oû²}þXzL†Ë3oYOוéË‘^ ÒÖµ®ÜCäèD¿ink�@;.×·™ûhš#urÞ&}ÞXÚºœ·®oÎßF§Ö·­½ÊŸÆåLcÇÒòH œ0¡¸~‡? Qº½²‡'Ž€LäZ{\oý®¨—G\BÐ�U?iëìõ¹ @]è¥�¼R�-~ÉØæ�•¾èþÚ¶dB\qš ùX”ªù>éue-7u»N›"7oše™wþ&º)/÷!—˼Û˲ž'},!÷×}BfgYØÌ÷u�ÎÔ/×/¾,°¯ÊØ×bU~Z 4ð׉eÒàÇ hàoÀ7„-0V¯jÞš÷^‘2È¡\Èwüü]EŸ@Úõpb›_ êâð”s4è÷TùÞú7eb‹R¹"ß5�Ë�ñc2ƒ‹©Ë˜ºNo£Ö³+EŸƒë8ý\©Ça èg>�ËA–¹¬e}Úò¢e�)-PÀ”ÖœP×s›&éosì m6ts´©³Ì€€ ô¹Læ—¥–zásãàYÝÇ¥Ñ~5O`7¸gšytí£?©^N�ñ›d9ÏÇÉÔy¦–»¿–C ›òs^_6*·—˲©ùmmŒ�ð>}ئ?ërY·ét.ÓóÛÊXW_ïXÒ}ÿ�½¿Çb·C÷£€C[¼Úûa_�_OæIGŒ«[øËZË ¯î¹É�WûrÝŸ­ÀÞïúw¹Ð/yÖ‘ye­†ÂLjúÈðÛèßò¨£²Ð]#ÈeszŒ·Ì”ºæ{j½Q@?cesç÷zÆÒYOÈõÇÒQè•ü` Ÿç¯dÈ5Ì#·@9G~€^z÷2ø8ø¡ Þ´3D”%»EÞ€·ð} Ÿ ¬/ˆêfÞúBme2qÐMÇ€ìŒñèÙéK.“ÓæM)g~Íe3ß×Ëy™�†ôcY®7–gÙX¹œ÷ÚxìWNÀk;êÇ;ÞrŽ÷ؼøž¶¯ôƒ6À n¼AyµÀ]ÿlýÖí�ç¶{žtLØ+‘ÕüÈêߎAü9½¢§×›ÀÜåèGÏo’9oE—ó2o™éX›Îƒ:X‡ÓEw³v+'`7[U©y-PÀ¼ö=íSOÖSëÒ-NøÜ®>ÆóFà9U<ÑËx’ñn~¯Ü³€ HƒúÀâ–f÷#€ýeë‚®ðj'¾ ÈíØègÀ<6Ê<é]"½Ïåœî)ezÙ®éMuû¼¬3Ô�Ë8ýXzh@ìû?uûÛô÷ùûÚ¯¯ÿØþO­oßñTù§±@9Oc÷j5Y€É€ôÏß¿_\üùÏ‹}ðT/âYè­|wÊà‰¾Ñ/ßà‡(ðí ˆ�K×7ègê¼õƒx-§ãT‘¯âàœÄ €8ð¢»F—Ï4Æ+=¦ôÕ¼i/sÚ”ræCsÝÌ[–ÁW( ”^ŽÊx9ÇòY�„Õ?+ÿ³çrÎqØí®ñô�A"iàN0°“6¿– PYýß܉÷Š·�âœDTþ:àÇaèóQd™Â¯‹ô9çåô6Þù¦èqã³l¬œõ8¯hY ,ðò,PÀË;¦ÏfD€�·.½pÖv®ü'Š 9w¬Æ5*"àïÕ;é ô¾ÀåìPÞ²L­{ØhÀ�ã�# @<zøciÆè:ð9Mß-3íe9�yÊ;ÝÓ>/ êÇò\ÞyEËe�×g�rŽä˜çÉyŠ.M­oŠ>�ép?ßäÏöÚx«€[}èö·ß·ïÞ-n$¿??_¾$H7ÆÇy:e€¼w¼öõå;v|. ð¡·Òuµ8‘rú§?-ÎOÕ6—%è›Á�þšß…º<´çIœgÚËrzŒ·ÌÔzI¶¥—¥žö·ïcß;н|ªtßþÔí=7ýS÷wj}S÷×®§€×~ÉøÙB?¿¿ÿõ׎€¯r¾ê‹€·r nø2Ÿ>Í{¢�AzS`^Åç{¼Ð;^éSÏ×ú¿«Ýë³³Å�ÀþDí^þõ¯‹³¿üeqþoÿ¶x'z¡þœá|h€8¶Õï¼1Êćê˜Ó˜ßò1šóÍgºŽG×XX'+[²²@Yàe[ €—}|�ztŒXe_hµ}%Àý �¿×—ïþßùeq«Õ8Ÿèå©€Xåss ‚€>;†¾ÞXÙ@r³ßµž:ø.€¿S»oäœýío‹7ÿù?/.DßʸÄàÉ„æìKc|Ò9nÊcŒ¶Ñ:J—Y—¶¼hY ,PÀåÔyð¤0hÅ€v¨øßÈ'8Úø®ƒ?÷ ,äPÎ ���å�ó¦à}l¦Ð5…Žmã�º¿s·×럻ÿ�Õ?u§Ö7Å9öu”ð�ú‘Œ™IÀ<«ìpì¬¾ß ŒoÐÕ.ÀB7Þã (r�À�òˆ'Š ]6x#GàDuOD ÜÁQzãQB¥yÄ�ÇûîÞ¾�kþ§lûËÑ8S[WZý_‰gÛðgëÿðWýuÀžåŒa,m9´ç-3¥ß™wZ¡,P( Li�r¦´féÚÛ€N@<(`>àJ°¼û_+qòÞˆ¿¨¯ÿõ¯ˆ7rˆwÚ †S {†›å #À}Š·Š7rÓ9¬ø¹Ö.à¿ÀP—D­üVÿ§ê—��þŽñYfG6VÞù=ÅxÈ2oYѲ@Y ,0•ʘʒ¥çÁ0Æ£€Ò×øðþçë+9ŸÿùÏÅÝøYq!�¾ýÇ?b5£§¸÷ä>à/‚Çünˆ8¢§ºÄp*Ð熿«ÿú_Cÿ….\*BÏU‡þøw;ô7¾ùž®+g9óØ¡Êe�²À!-PÀ!­�ÚšzÂ?v}ièkYÔ�íwÀX×~|@ÀÍ‹�ây}Qv¸‰/VøÚÒ_ðæ@.@å<,”Oùø¾ Ošò¢gr.ô¨ß%Q»¬þ}¶þ¡ùÑ¿ØûtñÌ»²žÏå3éc �í�/íjL}çnêö¦Öw(»W;ÏÛå<ïã÷bzÏèI `²ý~§=“¹oøã�üçñ+õw�þ5O¼ùvÀ�€?î hÀ¢²P@Ÿ›#ðÚA`W�kþq·¿ôú±åß­ø Þ™º�Y6Æçræ¡Ä e�²À¸øÌíÄ�·üº¤å¼®ã}ô£58¦ñh @™\þq“ €ÿ»ü{ÿïÚÊ¿þü9nä¦Á¸q°]>à>v Þˆ†3Ðè©®ñóá¡s¶û¡rh�ëþ»>òG_{ÐwÿM�ï²–C+”Êë-À¤œ€õö™"§€)¬X:&±@ÇpÆZ*/oÏÊÿRà£;þ¯µÊç=ßüßtàw¢Àß‘¶ücU/Ïò«~ÜØ'ŠCð°W„æ;ý¹ÁÀ½�Òg—ɼe¦ylðÊe�²ÀS[ €§>¯¤ý]@o?%àI@f ÈY­óÝÞÓ*‡àLÎÀåðAÀ߀T@[ü ð‡¶–�D–Ñ^n×í�Ñ\Çõ,£ô¥ƽ)̽²;tû}{�_éãõ]æ¶@9s[Xúû?óš|–M`§Þ @æ¸:ø�.OÞ™¶ðÙ%àF>€XÕs=Ÿ­ýLU6t5ÝèÌmdÞ€ÍÑeÆèºrî{Ѳ@Y ,p (`æ£@TØÝ¶ jpÏ ‹œ G¾xd¤ ŒÇón‚òC‡(÷°Åïv2íÛ!݃¹Ó}žå™f}ðÊe�²À1Y €c:¯¼/=H¦Ù ÍSP‚A˜íýs^ ¬<òïÄS/6EWBÄnÚGƒ¹Û!m>Ó±z½l¥•( ”ÊG`�rt„)ÃKÖç±A öØÎà¸È'Æ£‚ló üÉ‹4@Š”w=S뀬Ïíš®þ,‡wÌzà­;˜úÙÉùÍa2랺½©õ¿6}>.Eçµ@9óÚ·´ïi&:OÆðŽ€+�<;¦–S™uP6G—ƒæ@y‚Û2Í�ÌióN›º^Os[Å—Êû[€ÿX…é-PÀô6-��´ê`°µS`€'ŸIÁN€�žòÈœ6¥¼uÀ÷¡m§3¸�ñÈ,ϼë÷íTº,PØÝü�2oYÑÇY €ÇÙ¯jÏdÿÙÕ ân�'ä|—£®ùL]Ám˜'½-ì)gÀ·ÌÔ:¢‘ú) ”eþOæ±@9󨵴îi�þOH÷2+@KÈà¾�wù¨Øý¸ëßD3ÈÃ;mšëvÍÌšôvmÄNЮå]nÛx¦îßÞÔú§¶ßsëïÔã/}ÓX €iìXZ&¶“pžèY‚'gè®ÑÝs]ÒY·yè¶h°ï©u¸­¢e�²@Yà˜-PÀ1�WÞ7ÀÎÀ èÄ3øû’€Mæº.cùµþLá©c°G¶Ž§œuÀW( ”ÊÇl�rŽùèTß@X æPÒ¾ÙjÇ /Cš`šMšÁÚ|¦=oà7%?Ǭ»ø²@Y ,pì(àØ�PëŸÁhªî>7}ý<~ƒ>² üûžæº™Ï¶0u¤,ü:àÏå²Þ}xt2<¶=Ûö�}ÎmõýŸº?SëŸZ_¶ÅüÔý›Zßc,?[ €ŸmòhIò?Za)X±@o_;€€� §(°,+˺ÌC7ñÎ7ÍúŠ/ ”ÊÏÅåÌx¤ "36ñêT÷6%mà7À÷#Y¶É`Ð{žz–A�¦~Êe�²À3´@94*3?a¥ªYÀ` °Ãà{JqËl¼>�ÜÇËzs:ç÷<é e�²@Yà9Z €çxÔŽ ÏÈCu¥oÏ ÞËI“gyæÝW×uêòÐÌ»ŒeëÒ–¯£}ýuåž‹|ßñŒÙ|ʱöý™º½©õ¿6}SëÒ5�ʘΖ¥é -à µ|ä=¸ìXw�gJ™Ì�Õ)YY ,PxŽ(à9µêóZ Œ�µe½#Ð+q9Ëû´åEËe�²ÀK°@9/á(ÖÂÛ{[~™±,P( ¼& ”ðJŽö±ƒß¾ýÛV~[þÔ‡ýÐíMÝÿ¹õm³Ï¶Ý™}û×·wìúçîï¾ö›ºüKßÔö:”¾úÈò¡,]í”Êe�²@Yàˆ,PÀŒêJY ,P( ”e�reéj§,P( ”ÊGd�ºàˆFîJÍ,ç½þ¹�ï¹÷ÿØÎ¡ÞžÇ~ÍþØì×÷gj{N­¯ïo¥ŸÆµð4v¯VËe�²@Y ,ð¤(àIÍ_�—Êe�²@Yài,PÀÓØ½Z- ”Êe�²À“Z îxRóÏ×xÍî±-M­ï±ýéëÏÝ¿¹õ÷ãéÓOÝþÔ×äûñõé~¼S·?µþצ¯?^û¦§¶×¾íWù¥j Î„²@Y ,P( ¼B ”ð z ¹,P( ”ÊåÔ9P( ”Êe�Wh�ºàô§rÍï±}˜Z_ߟ¹õ?u{}ûÛÒûÚãØ¯Ù÷ãíÇ÷ØþO­¯ïïS§_úøžÚ¾‡j¿veéj§,P( ”ÊGd�rŽè`TWÊe�²@Y ,p( ”p(KW;e�²@Y ,P8" Ô=Gr0úkjOÝ­cëÏÜö˜{¼sëŸÛ>ûêïÇûØkê}ûÏ]?žmé©Ç;µ¾mý¯üã´@íçq©^•Êe�Wk�ÞAyµ†˜yàåÌlàR_( ”Êû[ œ€ým¶o�röµX•/ ”Êe�²À °@ÝðâkÂÔ«�©õõÇ`ný}{ÇžÞf�ÇÞ#Ð묾©í9uÿ¦Ö7õx÷Õ÷ÒÆ³ïøŸª|í<•å«Ý²@Y ,P( <¡ÊxBãWÓe�²@Y ,Px* ”ðT–¯vËe�²@Y ,ð„¨{žÐø/¹éþšÞK+c{êñNÝþ¡¯¡÷ýlûÇ®ï¥ý¦¶÷K³Ï±Ž§vŽõÈT¿Êe�²@Y ,0£Ê˜Ñ¸¥º,P( ”ÊÇj�rŽõÈT¿Êe�²@Y ,0£ê€�{HÕý5¸C¶ýÚšÚ>SëÛfÃckï±×è÷ïcÛëí÷X}Ûú¿-¿ú³ÍB• ÔÀ!¬\m”Êe�²Àƒ-Ð;LVTW,PÀŠ9*Q( ”ÊÇb�þy�D9óÚ·´—Êe�²À#,��€Ì?BeUm¨{êT8J ¼ö?ú±�[ÿžúûÜ'u?þ§ï±õgnû—þi,P;ÓØ±´”Êe�²@YàYY €gu¸ª³e�²@Y ,P˜ÆåLcÇÒR( ”Êe�ge�ºàY®ù:Û_Cœ¯¥ç©ynûÌ­ÿÐVïÇóØkäÇ®ï±ö�z|�íÏcë¿´ñ<ÖÇZ¿vŽõÈT¿Êe�²@Y ,0£Ê˜Ñ¸¥º,P( ”ÊÇj�rŽõÈT¿Êe�²@Y ,0£ê€�[ªŸÎý5ȧëÉxËÇÞ¿ñ^?\Ú�÷Øî xøÈ–5§ßcûóØú/m<�µÇK­_;/õÈÖ¸Êe�²@Y ,°Áål0Ne•Êe�²@Yà¥Z €—zdk\e�²@Y ,PØ`�º`ƒq*«,0•úkªS鵞¹õ?öš½ûiÚ÷wjýngWzlýÙµßëʽ´ñ¬gÉg�Úxœý¨}oúÓ ¼eEËe�²@Y` Ô|ûH³–ðH¶ê÷þÓ²´”Êe�Mhsm�ÿ&#í˜WÀކªbe�²@Y ,ð´¨…Ö´ö¯{ÖÛ3Çõ%+g¡?拲±�çÐýëÛ{êköýÉvìýëû»-ýÒÆ³m¼3äç¹»v Ö¸vÖfƒØ'ÓÊ ¦?¬åªVVY ,P( <Ä#slžƒ¢òÕ×)àçS` -3r‚þ¬½$e�²@Y ,ðX ôspvú<·µNîüÿßÞÙö6±$Qx7 Äòÿâîì+Á ܄»õŒ}†ãv��ØN2Μ–ÚõÒÝÕ=gÊUå± ‹£)ú·ü6ŽÒ:ܰ&E@Ðhƒ@'B �Ï­ÜÛæ6szëž´.¿¸ýíÅ�¼o­Lòß‚$Š!P¾u"K§1ÓžçØßœÚÞi®òp+OízGbµòTx”%ò6KìQµ>O¿Ýî€ÿ М”ÇÅ1Ç8+ƒ@X(;á%‹v`I¬í€²K•`��_ÓZY+¥’ýçÔüÐ ‚@8+wEeMrK5j¤00îÈÊÁX6V§²‘B@H„� G@±t"ùn8+ÿ–ßÜÎ ”ìwR9¨öv¦3ë)"P>ð/kòšÚë=ö7“=ÐÀS»žca{ldUòõB@|·u�ÏÎk|Q4¿ø}»q}qÝs 9V�ÞüøñãÏï«öå�?þøXß9^”ãbz�ÌVEµÇÀ¯¦lê™çÍ׸^¼lH¾+­7Ô]—ì�ì™önЙpìžÇ®çH§°á—v {‡Ú(¿ó£ğ†o| {ÇÚ8v½_ÏmùûØó×/BÙámß™ÊïºäzlHnh ý5ÆÚ«««�^¿b‰µuê^òg?õöÂü,ηó%/½ÀÆ„¼¾óÒA§º'${^|ýúõêÇŸ_¿~ýÏzc]¼|ùòßE/kì²™úwÆ ÞËñ¹æŽãÈ4çWšÓ½ÖÖ§3f–0ó“ì}]Ïä†6p_{ß—];ú½°å·ge÷6‡½¯kÚ·÷±ÉzÊþ}^Oùíèâ¡âkï�Çúã“~�—ïúojÊ@«øïû÷ïÿEŒýòåËÆ›Î^è¦bv uû�gdÂÒÚâ €µÓ‘õ¸ñmö“NNm{ëxƒüéÓ§«7oÞ|º¹¹¹øüùóÕ‹/þQ{]Ö÷ôúúúɿƇ‚`] ŽÆZ?ô»¡—|SúkhÿûøñãÞ¾}û™X[æùð¥ŽýÁ–Q�Û¥“Ï™]aÜcí“m‹+¸“Üèr*ÏPºñèàE‡ékú!ÙŸ¼{÷îªÞŸËA¯^½zõéùóç/J&ù?«¤ÿ|ÍAñz2 ¯ôd`(j�ñ©|ušèJšñë&¼3>hŽÎ�ŠgpÊñˆ:ì@+@‰¹C’†ª—~ø„_2É^I UüYúkèÏŸ?|ûöí{}¸ú^O(ÚX,yØ‹ýÖ½ÈVò÷1Ƈœ00 {!É,ì’W—[ŽE2UB?&߃ç¾(<S¯?_ë¡Þ™ëcȲ3|=P²ìkoQ�ÉÏXÓ‡&�äÐ ‚Àc#àÉD¼’-Ô“4¼>Á‹¿^ë ê|ßõ.�ÏÞäÖ6{è,ΗzÈÿ:/òb iÉ�›îÉTN �; :§×q6ÆÕ‹šì¹?6 ${¬Uò-Õ–Mæ¥� 戀bgS܃WÒ�ŠŸJØ¢½ß&wÍ…öìúþœ¡•¥ƒ.²-½ð›Žs(¹ÊQzTކÓ)ák�dÙe= ªu*”ü�²^Éßm¹}ì¥� 技Ç=Ψ8J ôX¨˜õd¯dßRóõÎk¿––Ù¡¡O+R¬Ü‡ ɺc´ÎƒŒ“1Ï)©¦D-ªu`Í: Öè kTÀK–­–Ö”´ ‚À¬P,%ö)Š¢“ž˜Øv%ôâ¡íñ‹bÇ;öZÛ­Ìœ´ ‚Àc"@Ìó&Y±êñP2:z/±{ÂWàó´¶¥¾'|Z�› ¸£�d݉p0OÌ»’p»Y®OþPl¨hm˾hMÝ*Ð¥� æ„€ÇQñЉÄAç%+>Šz’‡o g�ìȶS°iet‹o)VŽA’ÅA<ÙJvÇ�ÇÑ|^‰ÍçË1¡žø•ôõ©_»Þe¸Ý¯•5/4� ðXû¼¹¬¸è‰ºåIꊙžàwñš/ª}D9�ŸÃåVÏØ¢Z €ÕíÆ<©Jv �“Ñ|îJ³zeNÛå˜81‰^…€’¾(6½—¸µÏÔ¾ÌM A Ìb 7ÉPâa/F¢ó€y’Û SŒ•ý21&tÞZÙÇçؾÕ8‰V➎£y“žäN“Ì<¼(¼ öPò-ÕXˆ‡ª¥¡A ÌâŸ7ÉŠ‹N‰�’Ὣ@'^ŀσ—�)ZS†9д5‹-ê µ HpOþÎãdÞZGÓz (‰�ÎZñJö¢*jÊdòOâ�´ Î b šxhÛ•À�·]Ezç{ë´û·<º±‘ FaaÌb îóDà.Ð:2ÎFë%e9T _ ¾•Ñ÷ºÛîíáãðiA �9 ÐÆK�Iz§ðÞ=‰£Gv�ä)ª5nS¼Î±E—œücÑÀ–7¬8 ‰Ú6œOIYTNæ”yú„¿�²¶d¯¥‡¦� Î�¡â�zÌ„'nJ'¾GÑ©û:Í• §`†œf¤00ŒÅQHÄSƒ£‘Ø¡JØîlZ Õø¶ÐÚ}´–¦� ÎÅÑõ¸)¾—È¥ƒ:¿k�Æ >­A Ào@p%b´.÷œ'TR¯u$z­gŽ:óÚÂA{NQl¦� ÎÅÐEw›~Hâ3í)üZYúÅÑÅÍïp %b9ƒëzŽ£äÏ:Æ{É[Œ{ò×>¢š¥MéW£y A Ì�—=^:Q%xdéÄ‹¶s¤w*TеmÔ-ýû€YìÜzÅú¿–º—|ÑIßã¥k)6[�äÞ~š?5&}hA`îŒ ·ê<çv¾×5¯7&�ÏéñèhÌZ’ÿ ‡Å?XûCKp’´·ÑyÖÊvŽd%w­w:5¦}4W2´§óñðA �¹"ÐÆMÎÙê$C½û\×÷æ·s‘½i�ëÏç €¹@ó€%_Q׉×T]c-mç2®¦1ÉОÎÇÃ� æŽ@/ù¶:déZžëkÇZYHß®ÑøðÏ¿GaáL €ÆvÌl²dè¯|¼µ¥±v®äÐ ‚À¹#àÉ™kqY|K}c>î<óÔ¤Gv>É_­i €Ä=E€¯Pâvê|oî°… h¾T­,}hAàÜØHÈu1.Oñ\³Æ Îû¼7ÍtùÞß¡Yñ)¶14�" �©D-ʸxQ×ùzïÍiÇ}mø ‚À9"°‘�ëöÉ\£Ï/êã®C¿Ñ’ü7à…#ÛÌ‘E€œJè=}Oç¶Â� Î�^¢î鸾žÞuâE»˜$ùwa”)¦±YTUÀ¾)6~—¹¶l|ràºðA �§ŒÀTâžÒ w^ã#Mò¡è2)º°l*ïð$`sá~i_Á°ßBf� Î��I|Ç¥í\—俹õP €ýMθEa0¹Vøï›�ñ ‚ÀG`g"ßwíIôûšçOÓ¦ˆÀ ï(Ç?ðØY‚@˜ GÅÀÄà¹àð(çÈ€†ýO øÄÙ.� ð0$¡? ÎÚ%O„ÄÑ8ø�m‚@8+þv¥xxÌóרól‚À|Hòœ{“àqpÏ®A � �ÿd@G»~üÁþIEND®B`‚ic05ÉARGB�Š Œ |Š¡mŠÑŠÿþƒ‰Ô‹ÿþ€ˆÔŒÿý}‡Ô�ÿüy†ÔŽÿûs …Ô�ÿúl „Ô�ÿø\„Ô‘ÿ̄ԑÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ñ‘ÿÐ… 6Q�TQ5 …‘ �¢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰À؉ÙÃŽ›�¡¡cˆÂÙÙ‡ÚŲ̀  ¦¯¶w‡Â€Ú‡ÛØÓÒÑÒÓÔ‡ÀۄÜ»®Ñ€Û€ÚÙÁ‡Ã�Ü‚Ý Üž´¨ØÜÜÛÛÚÚÁ‡ÄÜ€Ý�Þ Õqb{´ÙÝÝÜÜÛÛÇÅÝ�Þ ßÛŠ !6²ÜÞ€ÝÜÜćŀÞ¶´ž2 #3xÖßÞÞÝÝÜćÆßßÓ§| 3?Å€ßÞÞÝŇÆßàߨ213‰ÚààßÞÞŇÈàááÛQ � #3KÍáààß߯‡Èááââ} � 03›ÞááàßLJÉáâã㦠)ZÏ€áàLJÉâããäÌ (*33-$c�¶ßááLJÊããäåá$+€3 :Urˆª¤ÙâáɇÊãäå寀J?]|¡½ÊÓÒ¹ÊàãâɇÊää忥¸’½Í×ßäæçæäãäããʇ ËäåææÊ¡ºÝè€éèèçææåäãʇËäåæççßáé€ê ééèèçæååäˇËåæççèéêê€ë êêéèèçæåäˇËåæçèééêëëììëëêéèçæåäˇËåæçèéêëëìíììëêéèèçæåˇÎåæççèéêëìííìëêéèçæåå΢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰À؉ÙÃŽ›�¡¡cˆÂÙÙ‡ÚŲ̀  ¦¯¶w‡Â€Ú‡ÛØÓÒÑÒÓÔ‡ÀۄܘmÏ€Û€ÚÙÁ‡Ã�Ü‚Ý Ü#ŠØÜÜÛÛÚÚÁ‡ÄÜ€Ý�Þ ×–6?²ÙÝÝÜÜÛÛÇÅÝ�Þ ßÛ¦h]m¢¼ÜÞ€ÝÜÜćŀÞ‡Š±r^^eƒ©²ÖßÞÞÝÝÜćÆßßÐZ^^c‡�©ªÈ€ßÞÞÝŇÆßàßu[Vhj{–‘§©·ÚààßÞÞŇÈàááÛƒ^cr’œ”ž©«Îáààß߯‡Èááââž^`xšš“˜§©¼ÞááàßLJÉáâãã¸^^„“’”™‡�ªÎ€áàLJÉâããäÐ^aˆ¡¢©©�ƒK ”ßááLJÊããäåádl™�©ª­bzÙâáɇÊãäåå«!d©«¯·¿ÊÓÒ³ÊàãâɇÊääåæJ_½Í×ßäæçæäãäããʇ Ëäåææ»b´Ýè€éèèçææåäãʇËäåæççßáé€ê ééèèçæååäˇËåæççèéêê€ë êêéèèçæåäˇËåæçèééêëëììëëêéèçæåäˇËåæçèéêëëìíììëêéèèçæåˇÎåæççèéêëìííìëêéèçæåå΢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰À؉ÙÃŽ›�¡¡cˆÂÙÙ‡ÚŲ̀  ¦¯¶w‡Â€Ú‡ÛØÓÒÑÒÓÔ‡ÀۄܘmÏ€Û€ÚÙÁ‡Ã�Ü‚Ý Ü#ŠØÜÜÛÛÚÚÁ‡ÄÜ€Ý�Þ ×–6?²ÙÝÝÜÜÛÛÇÅÝ�Þ ßÛ¦h]m¢¼ÜÞ€ÝÜÜćŀÞ‡Š±r^^eƒ©²ÖßÞÞÝÝÜćÆßßÐZ^^c‡�©ªÈ€ßÞÞÝŇÆßàßu[Vhj{–‘§©·ÚààßÞÞŇÈàááÛƒ^cr’œ”ž©«Îáààß߯‡Èááââž^`xšš“˜§©¼ÞááàßLJÉáâãã¸^^„“’”™‡�ªÎ€áàLJÉâããäÐ^aˆ¡¢©©�ƒK ”ßááLJÊããäåádl™�©ª­bzÙâáɇÊãäåå«!d©«¯·¿ÊÓÒ³ÊàãâɇÊääåæJ_½Í×ßäæçæäãäããʇ Ëäåææ»b´Ýè€éèèçææåäãʇËäåæççßáé€ê ééèèçæååäˇËåæççèéêê€ë êêéèèçæåäˇËåæçèééêëëììëëêéèçæåäˇËåæçèéêëëìíììëêéèèçæåˇÎåæççèéêëìííìëêéèçæååÎÂic10¾ˆ‰PNG  IHDR+ƒsRGB®ÎéDeXIfMM*‡i   ÓÝê@IDATxì�‰vG¶lÅQ”dËînwßÿÿÂ{ŸÛ–Hpz±è ™U)Ž`äZÅ3æPÙUqj:¸½½ý�Þ jïe_³ŸA � ðzÐùVN¸^ÏÏ‘•� Þ-‡ïvϳãA � ‚@A � Þ)¼£;»‚@A � ‚@ï�ÞïoŸ=A � ‚@A �w„@ ïèÇ~ﻚçÿßû¿€ìAàåÈ1èå°ÏÌA � ð�~`m�ȉ×ÿ¸Ùµ ‚ÀA Ç¢7òCe™A �=Fà /¥Ýã_7»ö!'[ùG‚@¯�|à5þ*YSA`ÿH`ÿãw¹‡!þïògÏN� Þ)¼¹Ÿ, A ¼iRxÓ?ßþ,þöƒýA3{‚@/ˆÀíSÎ�‚ÁS¢›±ƒ@û�@ ûÿ¿ê= ñÕ?O‚@G …€‡c—žA � ðD¤ðDÀfØyBüçñI4� ö�öæ§ÌŽ� Þ>ù ÀÛÿ ßÜ„ü¿¹Ÿ, A �‡#ð¤�˜½‚cêÑIÏ ‚@xvrÀ³C¾¿>ÂIÈ“ž$Í ÿRóÎ,)¡ ‚@xÃ<åUÿ��÷¼áQYzAà‘Hà‘€|ïÃü$ù*~ßqï›ÿÞöìA l"°+9ß5osô»Ö½ÇIà.ˆñ� Þ)¼§_û‰öõÈÿcó]ÇÛ5ï‰�ͰA � ðÊØ•€ïš·ËîN�5厙BÀ–8ƒ@{�@ {ÿ?í>ù¿/ñ¾o¾A¹o¿ûæ{žÈ ‚@ØîE²µË»äï’3Bo®ß\lc¬6àˆ‚@Ø{RØûŸøévð ÈÿÁž‹Míä®}vÍ›š'þ ‚@�m|[¼ŽUõQ¿‘Ï}æbÎÙ�)lÀ#� °w¤°w?éóìÐ3’ÿ9r>±-[|4f|A � ŒÀ6Â=Ÿò{Ü‘ìûô¶ûLùʆ°Ä‚@xó¤ðæÂçß�Ÿ$ÿ,¸'Ú½=Ê™òáw�ãX•Ûò¶ÅëXу@A l#Ù£øÈ· ÉQŸÞ×ÛŒ9òm›«ÅSØ ¦$� Þ )¼™Ÿêu,ô…Èÿˆ��|=HÛr~6ÞÏ;� ÞÛˆõT¼÷÷ö6ûüm6ãõ9ÛæXÇSXC%� ðæHàÍÿ„Ï·;�ÿm„º_lŸ?g÷1�5å'þÐØ¶¾ž;2� ‚À6b=Š÷¾ÞžCµÏ�³ûØÜ¸ÄfóSØ_âA �×�@ ¯ÿ7z+ÜBþçˆöhý}~µ«NßjW½Ž{ÿTn?Wßú\_çD� ‚À~#0K’µësñ>ÖÛ¹©Xï¯ö”θ5Vç铹)ŒàŠ/� ðvHàíüV/¶ÒG ÿSĹúï«WzÍ5½¯ÚSºûZÖ<ûªÜ¯¹Ñƒ@Aàý 0"ÍuïGñÞ×Ûôï}Õ¶nYóG¾G¯­æÛ_}Uw¼É6àˆ‚@x¤ð&~¦ç_ä#’ÿq®¾‘¾«¯3êC|ÊßÇêXÖk_ûFr×¼Qßø‚@Aàm!0IˆW»1ïc÷±k®uK¦¶ÞË[-q�k{[ŽÇ¬ùMOà$q� ^5)¼êŸçe·…ü³¨žðöö(§÷Õ>#ݾ^öã`ÓœWõm¾Ö±ûSût¡µ¹KÎ:9JA ì5“äxµ×£xï«vÕ¢ÚÖ§dÍŸËY-mcìÚwNwßµL` E” ‚À«G €Wÿ=ü÷„Ù¶%;9ÒíëeŸßÛ}~o“_›ãÕWõmqrwÉ©cFA �·‰€‰õÔêçâ}lÎvÌ’ù¬?TzÍî?²klJw¿µL` E” ‚À«F €Wýó<ÿâ¶F$·÷U»êìLµ­[Ö¸}Û¤rÞ}Æpß*ë8Õo}.>sÿÈ ‚@xûTR<Ú›¹x�U�qªmݲÆíÉ‘¯öíõÞîû÷ñ‘�¯µŒDdAàõ"�Àëýmž}eOHþ+9¶nÉ~ZÉ‘ÏØ8VǨ:qçôÒcX:nÛrÊO|.æþ‘A � °¿˜0Oíá(^}Ûô>n{$G>Ö…ß1ÛHÚȿͷì¹Ù×¾|`�D” ‚ÀëD €×ù»<ûªž�üW²l}NŽbö��uË‘Ï1dÕɭͱm>â£ÜÚ/zA ¼O*q!PãÛtÇçä(V}Ug=Sö(¶ÍGœæ1—ÖêoîØ€#FAàU!�À«ú9^n13€)Â[ýÛôQŸý#Y}#°ªßàáëý#_Í·néþ¶‘#Ÿãs1çD� ‚Àþ 0$¾e÷¦âÕoÝ’îÖçd�ÝWße޹b4ÏÛë-Øœª¬�(A � ðjHàÕü/·�G$ÿì„Éð}ä(·úЫ½ë<µOÕéïfÿ®öTžý‘A � ð¾ØFtû¸mKв¾‹$§æõzo{üê·ï>²æÎéÄZË�F"2� ðz8~=KÉJ^=1ÞeyåTúœÍzj¼·kl¤×|tšó–Ö]{”ãÜm±š=� Þ&&ÑS«Ÿ‹×˜õûHr9N!½U›5MÙÄF­Žé¾S’þŽõúhì\`H`MœA �C €ƒþuL…@�[Ÿ“5†Îñ é­·�Ïü5†íf?¶ÇœÒ¯’\�ÑKb“-E€IhA <;)<;äozBøn#ݾ*çô>†}gûòå ·“¬}X‹óùô�õuNñmäb¨µ¼2æÚ×¢«øJïcÅÝTÏÙûc� ‚À~!PÉv¿g»ÄZwǯ:W¹Ö/..ÐëFzµçtr9.õ9øiŽ-­Ýÿ2žûŽ$#‘s§¥p’8‚@/‚@ /û›œ”½ÛH·¯JôÞf û«¬þC‘þÃÏŸ?7âÿñãÇ󳳃›››Céë"Ä]¾ Û󫃫õ¹Í×"ú3Sècîâ}³‚@ï �!Ù‚Bð+"-¿ÄÖöåå%ú­åéééíb±¸Á7(´\b?±©kkËÚ:Vö” ǹS’¾>6Þ3E€)hãA <)<Ö¯n&Ä;.j*Ïþ‘ÄWýS¶ýk ùÿôédÿP'@GÚONN¼5ßÿQ1À¯£ØkBoÒoé\ãRüÍÕÛÎHïû WA ¼!îÙÑÚ ©ßwþõXö[^]]ÝJ¿‘¼¡ ãÞ�Ž7*Ðç¦+´Â€üĶmäºqlå÷qÛHòûcš}½t>Ò}ÈY7í#Çñ ß:%� ž�žâ7?�àÞÛs’X�ÛžòÕ¸Éÿѯ¿þzñWAàH�»Ž®¯¯MÂ���7ŠX$ñºõ>Û½ô¸øiÛìeVûëý*®¨A � °ÇLXzö]d¾AP}EocØFŠäßÞè˜wóýûwÖnnt¬ƒü_sG€s4(Çú{›*àç:çµ9e�šÇÅèçøÜ1¯æ�Æi>íGŠ“è$‚@xZRxZ|_íè|bqî;’øªß¶%ÓZJïvå_'=GºàHw¬7�Bô!ç½dàêGg³d;6’øhci-ÿŽ|5^ô6±£� ‚ÀÛ@`Ž,¯÷.»6Š‚_ǯµ§æY¯Rîv€®øK½†û_ëX�¿V1ü@wÜȾU!à`uWóšøs¬©6º×e}©n[ãx¾m’Áœ³1°ö=E€ Db� ž�žç·: íÚz›˜}HëöÛ·³ÔsÿÜúßnû—Þ :Ù9V!àX'@GøâÏ�p6])¹S p I®‹¶¯ãXGº9ß¶d¯Øku�»ŽE A �·�€ ûÄž˜p�o)}¾mK’¬sÕ_ú5…nžýWãŽ7Š:þ]«Àñ§‘oî ‡î+_-X÷z�Þˆ=´µ¹»ÎöÍÉ®ËSû›"À8¢� ž�žæ×5 ܬ¨ïƒmßH·ï^R':\ý?äê¿Î�(«p¬£ctÍ)uIø+©¯:'KÕf_ñÕ­úzÝ6Ò�¾Ö«œòל•>ì?È‹+� ^ÈìÖw%áa_‡°]Àé~–«DNn[€Ëÿ:6¯ã`+r+öA>îà.Ž'õNLü’µy}Ö‰÷�»OQ€ü6ÿJJ,‹;Jò7ûÃÎo8c� ‚À“!�À“Aû:^�8üÌâz"[môŸÞ¸ê¡�öÌ¿¤Éÿ‰T�S�´Gt~ÄE’5Ñ—ƒà»ÀŽê¼b#†]ý#Ÿ›ó§lû«ìûÔXô ‚@x;ÀO·­¶æ@ö«M_¿ÖcÔXÕõ¾€kÙÜûÅ1D} üèÿA:�ð•Ža š”>%='²'ÿ•ôS¨¶Ì�ã¶ã©¤õ‘Ü:û¢}¦oZA <1)<1ÀoxxÔÙ…ªÛ®>ôj“Ó7çLIN@xóÿ?þñ�cm§l_¿~=ÕKuñ¿µ�:ù9âĈ€I>’b~ûÐÙXÄÈWãµ_]´ûÛ×Ûö¯ä¶ý¾K #fA ¼ ðЦŸÌ¡¿Ž9ë!úñ°)Ðjl¥ó²¿+ü¶éÿ+¶¿ÿþûêüüß5/ TÿÖäã‹×¼,�X÷HÇ$ÒKÖîõ['otg€óÞhø}Ì«º“ìsrí#Ç~ç7) RØ@$FAàiHàip}«£ú€>µþ>>²ñÝgkÄß}xþÿŸÿüçÉÿüÏÿœýûßÿþ¤/œýòË/Ÿäÿ¤¯|Ñ?1yçdÁä©1«mûm›¼÷þ>î<ü´Þ^z§ýŽ[Nõw<2� ^'ðQ3¶.޼Q’þÿ¿áwžØ{K×ñl'&?„þJr]@±¿ta@dŸØ¥ä%E�ÿþ÷¿—þ÷ÿ÷RÓq n„~U@çøX¥çEöº}äO5Æs¿šƒ�m¤»OÍYf¯þjý)l #� ðø¤ðø˜¾Õ}@î×o/�‡ßÛÈçX/7ˆ¿:6›Oþ‰ôŸªp¦;>ÿöÛo¿È÷E€_´}Ñm�§�j~äê„ÁWü™g}Û¿uäù¯9½ŽíƼÖçä®ysc$‚@σÀÏ�ü~…úÿ¿In ylx­sI©6~ú)—«ûÔ®¤^6EÄ÷Q/)ˆô«p±øë¯¿Ø.t\\¨�p¡ŽOÔ8(rGÀ�î›kÇ]õkRñZÀ‡íu!ÙLü9&÷>¹†Íc0&:’6§¯yØ­­ŽéÓîÈ ‚@x$Rx$ ÷l”§v‹ø(§÷ÛÞ&] h/ÿÓÿÝú¦í‹Š¿ŠÿÕÕÿ¯:™ùªg!ÏtbÄùÁšð뼩Ù�}õ?;BžwȺeÙî[eí_ýу@Aàõ# ãéÿ÷ß!ñu �»âŒå¾«¡Ö¿ãžÓ>'Ùž£åqP×>ÌæxÀÈ ‚@¸)ܯ}Íö�ºß?û-Gqb}¼ú¬WiÂ�Ïz“ºÂ$²Ïsÿg\ù‡øë€¿KþCW:~וŽO:'àÜ �‡®­õEg�½¬¾]uòjó˜Õwýgûßg®ŸÍÆ?;Dú� ^=&éýBážöéÿÝVw’S侎#½ Z}«µˆïÿ(@þÙ¸ü¯F!àB¤ÿo'¿éÿÓ|fàPþ=p«¯å\SPŒwä@Ôù××Ü  Úëçi_%1ï(’�8ëR×6úT#Ÿy,ɳ>’Ä��¾nç�ÕÚ%� ~�~Âw5@#Ø{LÌ)Öçd#îÊ]K} '"ûŸtÒòE'5¿Büåû§NlþÐö™±uR°�VüRuƱ*4ã¶ûí"û¹véóšsRxÍ¿NÖ‚ÀÏ"0Eþõÿò­CÃK�4ʯc;nI_ëγ-)î¾,(ñow¬ŠÎu•ÿTcœ(Εÿ#ù—ÿRÇJn!àXx£±˜¨½l@ý¼\d‹¯ëý�miò�¤qŒ¶Þƒ?ôclšuË‘Ï1ädÓ¾þl2+� ‚@¸)Ü­ýÌõÛ{gÛÒ~KüÞì«Ò±)¹&û«q6lÏ#]á8Չ̙®üVàWm¿kû—üÿÖIÎÏÏ :­óɼ[hÎÕŸUß꺣ï’s§Ó9–°îÑeW‚@B@ÿo¿ƒÃÈw'i¢oÍó8–tq|@ø[ȹŠS¸”l�¨àí"À%_Ûwýùòѱ¿åE€:6^*÷BÇÏöù@ Úˆ¿ žºJyޛ։{�øLø-‰“?jîGÝyÖ-ék}N’·Ñ8Æ #ú¤� ‚À# �À#€¸çCø`nYw_¿wn•}öùÇñ?Ò�þ3�Ôðý?žýÿ]'7­ ó€_9Xͱ–ŧвé|�xÚO °„ú'H× ‚À+C ç’½]—;s^Ÿc{Nö±Uq€7Rð­ÿ�øS  ö·úBþ•w«ãåµ6®ü/tœ¤8p¥"A;.*÷`¥óf@/Õ’œJþñ›ø£›lÛW%q7yÛÈê³nYãö!·6ŽñÚ÷�r·–„ ‚À;G €wþà vߤ»�„hü]e+èÄy¬+üÛäVÇ�ÒÏ$?iû¢šõulÅê< ¥=K˜Ÿb䌂@xZzþØÛÌ>òyUs±Ú×y#‰�ÿ�ÖºŽm|©æZòRq;—ï[1¹ÒyQãÿ+=w¥;å®ô®Ü«?þøãRÇÊC>HÁ€;ôÜÿ•Þ@>È'!ólõ˜i?­më.`;¯Þ!Ð:®þ�صUŸu$�\û°íG_7á’"À�(A �‡#�ÀñÛÇž>`ÏIbs¸8>¥ûÊ?yè¶)èdˆ—5‰ÎÆ@iA � ž�JÎûyæb}î.6ÄŸ�f)•c^;.j¾#BâõrÝ~�<™çî¸O�|‘ÿëPUøÄ7EôúRÀâï¿ÿ^¨pñÿ÷‹ùgªv|^ÙõXMŒ†Ï»’qô¾ÀZk>}Ãý�Ø´mºûÔüeÏÕ_a’"À"1‚@÷G €ûc¶O=|�ÝeŸvÉ%ÇcZI“~ÇÚ �NfTh¤�A�Ö±Ó‚@A ü,S„~ÊÏ|s±¹õè¶Wg±ÛñPs²)tTÈÿWÿ•ûQäŸ÷ã\ëXiB­´ÃcÝp¦+ÿ窜ó©@™ßÿüóÏö¥nyl@cÞHÞp�tß u}¼®džõT{Šü�ŠŒ9j^3±9�x;Xåa·&lR0‘A � �À@{g]|f·{»n5§ú§ôFúëÜÀÕŠ.0hZA �çB@³óO[Èýƽ¿Ø>^Rhk¹o>åÜèJÿÙª ³}‡<›ÓSÏDþ¿éªÿ7޹+€= p«G®Uà-ƒ7ôW€1yœ€"kÃvó*ùw¬d˜ô÷’¾äÔV‰>þjW½Æú1êxíí¿°áŒ‚@;!�ÀN0½‹¤zðg‡«ÝëÕ68øì·néñl÷Ò…€�Ûþ9qmœ¥� ‚@øYL²GãLŦü£1æ|ðׇåÇ1±Ým bÏ»4e»+àV¤þZ^Ý~�ÅNW…ø¨8çvíe�*´—ÊÅ ¹êÍ`H$ÖÇmt±ñoAý1éöݽtÜù–øëÁ»ÚÖG’þô#¶ÑØ€ØpÆA �­¤°¢w—PÐSºA!îmäsçl•¾€“oØÿòüÅžÈ ‚@��Çš‡pÌQ|[üí¸ÇN­´G\áçÊ¿Iù­È<ÇÒ#ù9‡ãe¹g*|–ÿLyÇôÕ•~Þ¥s«@ûR€ ŠÁøñSD�ª7 êNÅF_ hñÁ~BÖ‘>Þº¬]&øvTÛúH:ÿŽÔ¾¦p•8‚@ó¤0�O¢›ôÞÑ)?ñ>ÖÛë«ÿÊEo'@õö�05ƒ¹áS³‚@AàAp,s6Š�|Îß&™k4>�Ëão�þF„åã%€í-€H�Í�ÙÈ¿\ å¶ÏêVþ3¥ikŸ ”}­G.!ÿ"ü'*p¯;S O~ÕÚ»˜�¶Ë�ÕÄŸ|“Ö„¾­™à;¯ÚÖç¤û­%˜i_è“‚@; �À ½ƒ”þ€_íª÷P«qëöÏIN|2ã¼õW8âä¤úɉ«õîØA � î…Ç’9¹->7ÙÔ¸øëƲ9®q`k„Î/Ÿu¾ Àƹ·óóÉ?né¿Ò±òJ’ÇÍ[È¿žùoä_ïø.ò¢±xv`ã  ù_ ¯á6ÚFÞFdi˜ø“gò¿­�‡1ÁÙŽUé¼I fS;2Ù)� ‚À;E €wúÃk·w=PƒPŸ‹]}Õ¶~¹.prâmŽü³¨}l:‡ÙÇÝÊ>� Þdz§}çØG"cT½t†çº‰Óñ@{±Ÿ$·õs{ÿ…®ú_ˆô_è3�¿üòËŸüã�?.‡Ëýj—ü‘ÿJ/<ÔcW*p×)>v£Óv9(¹À±âζín|¥¶VmëHk°Û~ôuá6Œ­“¢� ‚@«"†w‚Ç-»ZãU§›mKUíª»¾~«Wþ7t»×_à¨ß<©%ñí»åìÈ ‚@��€ŽEw­¾ª×DüÞð×<ë–î'›ãÇGŽŸVw |P=@5€ãSÎTø¬ÀB¤ž›”z{ðõë×3ݰX~)ðb¡O.(èS� Æ‘ŸG®•ãc¹%á] ˜ø»`{×þž“±zÝ WÿƸ+\œ·‹‚@KrÀ;ù—ÀAqbW§ü¤÷±9Û1¤7Oi{N¶B')uó‘A � ^ :NÝ{)ôé·:ˆÇt±Î׎�+’‹ ñ¸äŸÜ#Ú(Àü‚$îøüù3€s‘þïß¾};W�àû_ýÕŠº à†;´ñ^€ö¥#X­�c7­?†/½?þ$äÿ¾…úy¾‘ŽÏ�¼j7?û+,îøÝ)2� ðÞHà}þ ðÁu—½ŸÊ­~ëU¢{cëU6Ò¯ØZê˜=ü ¤� ‚@xíTîYõ]Ö]ó­#­¯Æðq´}!@¤ßE€v€ryÀò²¿È°úÀÿOT8Ñÿ[�œêÅ€¼°ouåÿF&dÿF0�\ËwŸ¯Я'üÛ}@ÕÉ�k=ñ'—ý˜óoŒ—"À1‚@¤°Ç~wس¹œ>Vmë½dJ|÷ÞtâÒ®r0z•èiA � ^ :NÍ.e.N¬n d»êC’ãcûZÀjÒöÅÞ™£v Ñ—~&"ïEñž^ˆ�@#ÿ 诛nô(À•È>_ °þL w< À¼.TÉtÌIÜ›‹ÄÜ|.áõW½úGºÇi +ç¬ýQ‚@ï�Þ÷¿X+ #qû-G>Ç�sºãHNÖ’“�¼Ü¹ €Éˆ±©aÖvÇQƒÑƒ@A <5•kV�ym#ëÖ¯ÉyîSmçr ”ߟ ”*C7ÈÏN±9PÊ×lIÈÿ'‘yäñ*ò««ÿWz€¯œ«pÌS’Ä>(•G<휬$»’~_õ·ìÇ»«ú=6>Çz_?îÚðX;¢� ‚@^¸ïÿ8øuûØÛ]¸™S9Õo}N›ÚLü‰[‡øo�/Žóë‘A � ^;=ïìí©õ“ç�œªËlw¸/ÇxµFpU<çª÷­<ÇKÈÿ‰ì�"ò—"ô—’g²9Þ~Pî�¾pÍ‹Eþ/ã‘€KbÊå�­€½*Ì‘è>f»FÇð‘�)Ý¿ÆñaWI®›c¶×Rûœ"À�(A �å·dƒC¨Y£1òõ1çì"Éé7üM׉N»ÊßKOŒ$¦V]у@A <;�óÚ¶Ù5�ü~«95æã^9ú@Ø¡+ý>Æšü_Ëw£íZ„�wp—Ý /øÓ»ÚÎõn€o_ßÊ´Bþsªm‚ðãò)øßßòïõo×y•üã«öÔÍfÚ÷~�³} A ì+ëÿÙïëf¿~ °>ðî:�ûÁzŒ±2FA �)¦ø(þº¹¿x{áþöê ýãÀEuœ[ø9þòì?Øn!ýô¡¿á??;ãuú2ÀÅo¿ývñÇ\×-ÿ4Õ.ÛÝ%p¥í@� ðb@Rvm¾úï|ÛµÀ1¿ÚÎí¥‰;ûUIÿȦ¯ó7Æ)l #�÷Š@ ïõ—¿ß~›ÌÓ �ö3²Ï6ç;�ÈÇqÛó-gÏß ‚@oþ®ÍÅò·õ[åúxÉ¡sý¥éª �¨À»Äý?_p3€ˆ}«|ýúuY¸¸ç_\èå€ }1yù×fòݰßÓ{rï"ã8¶k ÎáuŒ$yÞâ @„ÑÿFRŒ ‚Àž#�ÀžÿÀ3»çdMùæâÎßE’³uÓq™ƒsÛ˜½. zA �÷ˆÀˆ·ŠÏnVÇÌv'€�ŸÊi$ö¯¦GþOtçÿÇOŠ_jkä_·ÿ~ùò壮ôŸ‹ôGê.�ïþùç!�(ÿF.ˆ³É??ÁèøŒÏäžœ¾1F_ص@ß~Nûªôœäâßh)lÀ#�wˆ@ ïðG„]®`ës²Æ¬³ ô;›OZV±@*-� Þ:6RßËÑΓSÛÊnÇYŠnk1~^ øY�˜¨R�Í‹ìŸ~ûö�¯*÷ƒˆ?ï¸RŸFþË£?&ðDÛ¥Éÿznué}ÛGY{Ï_Éõ1ö&H8Õ„Ç?Ò‚@ûŽ@ ûþ oß?,�ÙÛö÷²æYÉêëuì�MÇãÙ;tÌnë°Ä@·�ãyƒ'‚@Aà�!Àñkî¶-VŽƒ>ÖúØØÈ®H¼ g&ÿ\ùL|à#wˆì+tz,?_¸ù믿®ä[`j;P!€÷0/€D{“:ÙÈicJšx»àõîr'}�?Ò=69#]îe^)ŒÈ Þ)¼«Ÿ{ç�åÀY·ÚÑ^|#Ý>÷w^ïwüŽÔIo)n…€Ö¹\ÅÀN A � ðVù‘ÏûGÌqKÇ,‹Ÿcêš»(Ï×q¾ÙoÄ[1l®ôsGÀ™ülÇ8¹ò¯Þè1€+ݰ�ë\sðbÁ6¥òýN/¡ÊeRõ,×T¯ô»P}ôÀÏú]À×·õþ)Г|ï?}ªÞ�ÑlíOŠCdâ A`ŸH`ŸÝûíÛè€íˆyÃWsGzŸëû'¥N0Lü›´�¤yA‘A � ö÷ÖÄŸýÄv«z“ͱ²‘äÕ±³é:„Šß��/�—røQäþR~¶3È?q®üó½ }*P„Ÿ—òÂ@ßUÀnËã?Ç?ˆ¹õág�ø!ûýñ½·§¶¶OÅa»Ê^cR}M)ÜA%Ž ö�öù×}Ú}«gtÛ–ÌÞûmï"Ÿvõ=� ‚À+@`DæG>–Zý#]\¶í¤凨xY äŸBÀµäµˆÿµÈ<òŒ1!ÿ"ö�üëÖÿs PÞ±bGÊãÊ¿Ç5éG1ßDsžÃ¾ê�mòïB€szÛþ*=îr§WE%àÇWeíwG×þ¥p•8‚@ØWRØ×_öyöË]Ïfi�XoWŸcUr’³¾€ä]›Žá»¦&/<;ù÷ùì�ïÕ„•ðíÕŽegfðïÞK:UŸtx¬ÉùzL|«¼v^ùÙ™?Ò­þ7"ü·òÝ�#²®[þÏuûÿù§OŸ.ôe€óß~ûíâ?ÿùÏùj>îà»�—ºC€þ—zqà�Þ°žoG¥èbé¶K€ÜZ¨¤Ÿ‚Þ®ùèëxÂÀc­ýQ‚@û†@ ûö‹>ýþô »·ë ú¶7çÙ¶\“'D� ‚@x�rÝ–·Í&i—œ]öÕ\Õ’>U÷ø˜ÓM¤¢ëc-wýS@ê&€#Þp¦"€øÿ§/âú—ÜÀÐ*|é_Ⱦá_ˆø_èk‹¿ÿþû‚±WE&ò§LJÂ�æã}%ûD]€„;¶kàÇèwI-�çuÝ!ûÂ)E€Šdô ö�öòg}ö�òÁ”‰«nÛ{/ÌvÍm>�”pðmþ^ºsdA �÷ˆÄ�V¥õ]ð€üÓ}• ßõ˺inùñÿÌ 5v#â ~þüù£8ÿ¹¶ï"ûçÿýïuÁq»«@Eò×ä5ÅÁü&÷w‚r0ñJüÛ9Á(¹óѷϵ¯Jw«XØG±$E€5Q‚@ØGRØÇ_õé÷©?À2cõ¡WÛ+êý¶�k»]™ “N>ó‘A � ^�éJÆ{».¸�U»êu<÷·Yuâµ/6qû,I#æ¦+ÿ­ ø‘ôöI@=ûÿIqÞÀs‡0}(ü­«þ§"üíS�ÄU ¸QþÕªàa*+ùwÀò>cšðÓǺ¥}H°À¿Ñ´_)l #�}B €}ú5Ÿ~_êICÕ=sïÃöædï[Û:Y¹sð#Ó‚@A ¼&Ä×Dü¹ÖeâÏ|èÕÞ¶†þxŠ ßõ#²?jkWéå—û�/œê±€�"ûè�ü3�ž¸Ñ£WºC`!7¯˜šþÉ» $GE€]Ïz’ï~ö{øGúzY ±vD A ì )ìÉù »áƒh�jä«ñª“ëÍþjW=„ßE� ‚À›C@äqƒ”cÓ*Ÿìs¶ídíë±F>ÇêœE÷•í¶ ü^L_ãµ;C~\ÇÚ>ŠÜŸé*ÿG}ìFÔy7€ Wª ,xy úRh_  ÿL[‚±™Ñ6ñ'bIþ}î`,Ïa�mïShÜ„�ñ'Ä‚@xƒ¤ð´X²¤£©û¶·Q>¾¿£ë$_kèÕ¶?2� ‚ÀK!`Òü˜óÏ�©ã`› iÝs�|ŽY’Ãø«†b2ÜtÅ�í€U<²*ÒÏ‹!ù|pMþuõÿJï¸àÆùù¬à%óLLºWﯾc«WÿY‹ ?:ÍriÍÿõþ9Ëv•Ž!›Ø�6Ú¯aìNrA �7€@ oàGzá%îrÀ%g”g/Ù%û†ºŽµ!þ “‚@¯qÄ51¯: ¯vÕûØ}v>Úo»ôgþUkÊÊ®:áCù�õR@> p�Ô\Wú4àAÞ(ýJ·þó€sÝð�b�BGÄYWW€<·ñA‘ëzåŸ.¶Ý']×;��>’“ƒ)Ì"”`o �ÞÒ¯õú×êƒì¶•Ö<ëHëÛú'¾§¬NF÷tï²[Aàçxïÿ}@,¦�ßÜ÷��ò{_o³þÞ×ÛÝGïãÑl{<Ù -cH6rŠâÿAd²‹~Ù—}#› bá¿Ð ÏuÀù—/_.~ùå—‹ÿüç?íS€Jç=—HÝ5p¥î8У^Æ}¥‰? ç®þà»Oó?Æ‘ÿêg\çoÌ!sÎIz{]äm4wüI1‚@¯�^ùô—Ç�snó.ùkÙ|œxô[MŠ‚@Aࡈõ®sêŠÿwýs‘ÿó¿þúë»ÞÐúª@ƒ™ü3î¨�Î œWÉ›WÆ·î¼]$ka®‘tÇm7¹Â¥³ˆ‚@x#¤ðF~¨=[f=À[·îªOH†Á8ƒ@A ܹÖcŽ,Oåà¯ýª]u&¨vÕCŽÆêsɵڷêε�ñF ¿cÊmI«¹ù ÏüÓ­= »}%@Äþ“r—9U8ÖÜðMäÿo‘ÕŽù×]7ÿïÿý?¾x¢>^ì’°3N%þUg­sÍ„Ÿë½t É:î�}á“;@'-�7‰@ oòg{ÑEs0œÛî³8à-é[õ�±|b²áŒ‚@Aà'0ùe“å~8çÔ8¾jÓ§÷õö(§úvͧ­Î¿‹¾ìµ\§uKæf+íPäòÛ6ÅÚWDö?ªÐȼ|�ü‹ìŸêŽ€3]ü?mÌŸÊ�šî¸Q1àJ� ,dR˜jwH¶G¾Jþ+ñßXø`ÆrÎH·Ïs’;Ò×CkßSX£%�·„@ oé×Ú�µúlY÷ªùtÓ¨ëÄÔš9¥;72� ‚À}(Ç—a7â•hW»êtîí: 1Ú®c‘;7q7�i‰¿êÇkp?¤|í¶ÿ>GýY° íkÊÍ?ä��þO* ðhŸlä_Ń®ôÂÀ…\¼ð¾çœ&à,Íݤ¿—K@ÉÜlƒ¸Ç c¤Û×÷Ù±X+¼œ_"Qƒ@¯�ûþÏøõîIVöZà ;·õëôAÛrç„cuÒ±öE A � ðÔ@€i•8{N“ã)ÿ(?žç©±Ú·êäÔÖ�E̾)éñê¼ôöO²ì×X¸ˆiã„x$àDÄþ£x>ÄÿR€�•üëêÿÕçÏŸºúN®ú\Òq¢m#ÑŽ�îàÇrA ¾?·`ûFº}žÏãѧ÷µ˜ö ¼†1wŽ A ¼&RxM¿ÆûY‹¾#iß N>ÖF” ‚@Ï„€¸]›©çwø«¯ÚU§sµÑiµos¬þô¹Syµ:yέ²êÎóú1<÷*.ÑöѲí÷5f#ÿ’׫íJE€k½ý¿ÝÀ•¾ÈWô€s=ðMý8ßl•ƒ~^Ù�gÇL¤«Dow¬úÖ"€šü÷ç ôë} Qýž‡<ûG’~“ �„…ÇšÌK � ðHà5ü YÃ:†ŽØ91†'tiA �·ˆÀSÿÿkŽ¿1÷\| Ï©~u_x¤ÜmÜ ÐÞ  ;ÎuÅÿB¤â®"Àů¿þzþ?ÿó?íS€Ê½¤>ÀÝ’—×××Wzqà�êÓUcBw€0:;âB>Zo/½Ë¿&ùöÙÞ&É}@Ñþ cž$2� ðHà5ü ¯w OÁ=æ”lhèêøëE'+ A � °#â‡k2^»à§ÁÑk^µíïe«òÏ^w?ül"àë®u¯ÅAb´®?N¶V`<ÅýŽ^¨»ÿ?_ˆàCò¯™K…€�R/ô^€…¾ °Ð×TX\è%�‹?ÿüóêÀ˜sŸ ô¼È; ce³H¸csEúÔ¶�ü›Ü37ÍöÒÒ_a�"À�(A ¼VRx­¿Ìþ­ËíýÛ³ìQA !`’ #_m•¤÷ù½]sëszí³"ékòÏíü.0—×Vûxlǰ¥ÐÏR®V�­×ñRÀ�º àÓŠü+õæƒü¿üòË©®ö‹ÿŸŸ‹üŸóx€Èë+?� @¨çÈ?ӛأ�c�S ÷)xLÆáÇIç8n»Ip†ôK A ¼JRx•?ËÞ-jóŒgyPe'í_K3­×8',Õ¿we‡‚@A`?l¤{´wÄÜàŒØ5d;¹K«yU_‘ø6„×±MªO{L`µF>à"ïXß "À'=À;Ú© Èþ(¢ÿMüÿ›Ú±Š�üë.€…!þÛÈý.»kòï±Lþ-·�aÂOžõ^:†ä¼óC‹@'-�W‰@ ¯ògÙ«Eý8»Ù}·Òg÷Ñ“‚@Aà Xä;dÞSV"nŸû`£OÙ½¿«·oäÃO£@óœHÛ–öAø‹MýµAð!ÀÈcm|%€¯ðnºÊ–y|J@ä_¼ÿtý©@È¿î¸Ò¸ åRØåø?Êa²VP�4!wÀùÄÛZWÒq™­9�œ^·ÏcéË‘`V ¬�Q‚@¯�^Á�ðJ—àƒ_]ÞÈWã½>Ê·oJöcÄA � ð¦Ü áØ}ƒ+⯹#Ûœ²æ�Æê}ØîkÝãc£CðݰiÎAÖ;œ¿* Èüq€æ¹ÕX홑 8ã3�T”×&Q¿Fþå¿TQ€—n¼ °M¾ûÈ8„ž±-ém½'ûÄúÁ$ŸØH·I£¿õæèÿ XôþØA �—D €—D¿çî¬ìíÈ7‹‚Ž›÷î3;`‚A � žqÀ â=5uÍCßfoã•Ľ1'ºÇ¬:>š%EëU¢¯ ~€ûµo�ÈÙnû×;Öwˆä/ÄýO•ÓÈ¿æ¿ÑÕÿ+ÝpÉ“òs>:wN ‰î‰tµ­WÂϺ\�KŒ|ŒcÿH·Ïó)½5úô¾e@;§ýÆ–]ó7� ð¼ÌýÏöyW’Ù^;> >t�µ¿õ‘l>+{è|é‚@AàÙßÛ Û,ß¶G$ÏýݯÚöÝ—O:ß’q¬{mU«q¸Ú_‹FÝ~ì¯b'+·ù_ñè¿Æá+M'&›þ]éÖÿFþ) ¬úñ@m&ÍÈ£ètâ­°°ò»€‰ø.às›úQÏ1¯Ûþ‘ô˜C HÚo�5̉3� ð\¤ð\HïÏ<ç¶ýÙÓì 'BiA � @Àäx4j.úÈ®¾:政æLñOûëœöÕþÒ7puNôU\œÿ¨½@6/<ÖX7"øííþºà‚ÛýÙøL Š¿ÿþûÅüÑÈ¿ úBàåRÛ_ЋVŸd޾M‘êZ �m¤Û¨(à˜I~oÛ?%É®IX¤`4#ƒ@xQRxQø3yA � °@‚'ˆó½v¯Žƒ^md¿åCç­ý:>U`¸(a™"À™8ƒ@xJRxJt3ö£3|wüœ?Ì ”XA �—B nÖ0eãŸk:֭ãJtoëÄ*žk$ñÙÏðU÷zð£×†-âßœ%†ÝvlUàºÉ<<ÉÇþ¨çû?‹üT¿FÌeßèêÿ• Xh;ßR¨Ë¨ú@WkP°~ÖfÂ_w¦êŒWÇq úœ¤¯›sm¯¥ö9E€5Q‚@xRx”3GA � °·@x§ˆ2;ÝÇG@8gJÖ>äÔmÛ•Ô{�½ÏózçÙ®Ò¹ÈÚ ù,‰iœF É•ÿTRâðXy'’g*\‰ü_Q ]›Ôkžù_èêÿ9��/ÿÔ Í6Æô]°ÎN¸€¯êØu'Møñ[ßE’?Ù„IŠ“è$‚Àc#�Àc#šñ^5œ€¤� ð0Þû?s„èaˆ¦×[B€ÿ/ùo€ù§þÜum^¿%ø[GNm"ë�÷�Ÿ«Î¹ÒÛÖ~$Mr}àe æ H â$ûšB€|×äŠð_èêÿ…ž¸øüùsûÀ¯¿þzñÇ\W.Ÿ d»ä jÚ�ä|Ôj€¸m$m½æN'fÂ_uû¶I÷An4pSëÝÈ�‚@øRøôÒ7� ‚@x7Àe§8Zëí9�œ»M29Þú1Ý¿÷�löÃûR¥Èu#ûøÐGsás³Ž$ŸÑ·î¸ó%åj·úkŠ[¾ÐBês¬­½@Ÿü,R¿€Ý«µ¯üãÿ8é_諈…¾°ÐK›üóÏ??(ÏS0`+(¬?»$öØl&û«´�"@½  êäÒwDÔ·‘÷ñzl{þ  ¬Q‚@O€@ Oj†|||‚ðø#gÄ ‚@»#Àñèg8ÚèxÆxwJŽVHnݼ.�1êãǪ�Î6"þø=}Ñݬ�ˆñÑ¡mòqµ{MþGcpSÀ ïПtuÿR9×Únå?ÐEþõdÀy»3àï¿ÿ>ño·%H¿UÀÄùǼÀ„½'ý?2–q~K"£1—=~ŒMkØ&ÝÏy¶›¹`‘A <6)<6¢/� ‚@Øk ¼â¥wö±÷o³ûœ?’ø¼õýªí¾Õ×ëýÚ«�Îæ"}ÓR_mÇíCâ¿qG�B ÆV ¼`}·öëå&ë‡* Ëþ(îÿMÿODøqµE¨(p£WüÙ·^ý—¹nË�X›kŤ½­IÞQÀÅrîþðË¡<Î6I¶ÇŽ'ã˜è»¿m“üŒç†Ÿc2z�U�¸oÿ¯új<¥Ü*ÞVüPd�ÛüÛ';¹o·ýËOaàHï8Ñc§*œêÖ �üóxÀ·oß®»D*Šü3½Û��ZzLƱæÈ?sÖÜeïÍ¿ÛÈ¿û³†‘¾­ÐiA �GF €G4Ã� ‚@ï‘´;…çÞ×Ûb4êm²öµÎÞæø"±QÜ~¯Ó6Rä¼õéû9×óZŽˆ?1·•¾þJ€Æ½—G´+ÞÒÛ#Êã–~‰eQ@üÿŒ€®ô¯É¿Öv«bÀ•ü—êÇùìú%ž¯ÈžHW»êt©E/Þ² ¹¡2†s¬ÏI:“ßÏ�ÝpÖŽ(A �G@ €G1C<>«âþÆÀ:nØ1‚@A ¼4›îËÑ|<ëûy¬9IÌý²ïÌÙÏË8ö›ÄãÍãµwóš8v»¿ûÚ·²ˆk.™í�Æ�Ùî.€èò)@�@ö[A@}>é®>Ø®üË¾Ñ ¯õXŸ ¼�›óÙÑg“m“»Å|eŸ“Œ6¾¤‹ä O�€˜œ›Ì;õ�lÆvs®íµl@PZAà‘Hà‘€Ì0A � ‚ÀûD@$mƒTÏÙ} ÄðÑàyŽ÷²%”?Ľ÷Î*sÕ�Žæ™Hˆ:ãW¿çƒ‡;×>çZ’Ã4ç“ÞU™Ku%�WqÈÿ‘úžèŠÿGI®ìs•ÿ#cɾÑÝ&ÿçºýÿ»b' - b@IDATˆ—i“idÕéj²O!À:‹´MŽ}—Ù³Ï>Çw‘?FhÂ#w p‰+�‡!�ÀÃpK¯WŠ'iï�üþï÷·Ž=Ï¿¯ŸCÙ„ñçFyºÞÛ~ß§Z?óî26ySktl$wÛ¨:W»‘vüèži2ï>HÏkÝ1÷ÃÖØ2—ûÚÉæ'Gc±†U.:w\k §ºÒÏ# ’ ‘þ‹OŸ>]üòË/‹¯_¿^üñÇL¡^QPÛÑJ^ª`ÀðsÍ…ç@þ}7>ÛH·QQ€˜ ÕíÛ&ݹÑIxôëÜȉ‚@Ø�vA)9A � ‚À»FÀ¤õ1AèÇ´=%™›˜·Ç\‹Ç2Ç4ñ÷\^qoîƒ$^%:ÅÆ©º}½lIm˜`0îà…�¼'€q¸#€BÀ™ Ÿõ5€Ë_ýUÜÎóá·ß~;Õc Ú†Îö×_è«v(°æõVÉ>1 áŽ�Šôõmäß}èO³½´ôWx¤°F#JE €‡"—~A � ‚À»B’k‚ü\;>7'1o]OOæûùˆ{ˆvŸÏ¼Äݪ>ëÉ?¶Ç•Ô&ÿÈ6Œr¸à”ÇTø¬;®”ËÝ�ùò…¯œ‹ôÓÎEúÙÚU|¹y©àB½Zsõ›Ø{wzIn_j?�ïÂÀ6é¾Î³Ý$àh¿=æF,FA`RØ¥ä� ‚@Aà€øšç¡×m´ ÇG±)ŸÇw|d{–}?ÍÒcYšìcWÝù– 3ä–¯ ×俚 |€[üMÖU8RA€O~ù׿é¥��ü뎀…wýD ¦šm&ÿ빕]}CÒ¾Òîøœ$Ýßy«!–0„�s6b1‚@ÛH`B‰� ‚@A`…€¸×š˜?(uüª×¹ð{«~tü»´)þØûm3n%ÿö{ιy+ñ·ÞK�ù×<�üËÇÎ@°) ‹ÈŸŠØŸiî=ЪŠÁÿOdŸÒTÀnäŸÇøT ìKåQØ¥�„l·1%M¼]p>qǦæ!Nþœ¤¯sz»5°ÛæszdA`�@ k(¢� ‚@Aàé€Ïš³õ:³NÅð“?jøûXo÷ýê�ĸK uîЭÿ׊-äç%�[ßÈÚ&ó×+ý.TßD׿6áǰ>'É«Eì; ¼VØÜ‰Å‚@˜B €)dâA � ‚Àxê’“‚Oàò|Hoý4økëmÇF뮾ª»’«ÿÛîpß©¹WÄ~ãQûV}¸úߦ•Mã%€ì3/„0Ÿ2‡î v$ß©¶�²?i;•¯sõ¹QAàZw,T ‡ó]�qjÃöÖûm»O%üÎ|ø6Áw¯å¸X&óÎc¼êÙ?Fù‘[}Maâõ݉Ç‚@èH G$vA � ^q¹ua¡ê£¥÷æ8ö}›¹£%ý­[âózðU?1Z�›xµ—Ë¿ö‹”·‚^t÷‘Þ¾°Š7b»ê#qÀýþÜù?ÑUþ�²ÏøÜŸä)ciœlgggç*|W H«my&î+þôsÀ: »€Ï�~ýR}Öw‘s(FûÍ8iA �­¤°¢$� `8ùJ A <�·þÿ�§âWàRÇ®¶1#Žn»Ç¿ú§ô¾Ï”íµô’+ñøúm4k ¯®Åy+bß̪+_é?ú­ú7ÉØÊoWñqj=Ž%¹í¿=ßÏíþz @ÛDþŸ?^üòË/‹þóŸ (8ðÍ@^ x¹’zMÀÕ�6/¯—S¤ºèc›|tÚ¨(€ß„¿êöUI¼6Àć L„Ñd|Ø)Î Þ%)¼ËŸ=;‚@A <&â_�¤zÌ9Û1K÷±ÄO3Ÿ«yèÞœ�tŸ^¯9½îñí·='‰y£Ÿu÷ñX^³×J\¤»…GkµÏE�‘ÔJkàðRÀCÙ8Ž ÷2×/ ùÿ$ßv¯9™ôöëׯ§2ú*@Ûôµ€…¾p¡—ès�|&ÐKGÎU»‰±™è“Oƒ|ãƒøW½Ï£ïˆ¨ãs I«>ìêÇÞh`&ÎA ��:@b� ‚@A`ðÐm\k”3åó|uLriøÐm;×>û-ˆôü#‰Ï~ƶmÙÏׯ§'õä;DZêÄt«»ú¯9ÛûÈW_ '<ÀWt'Àg®WäŸ9t'À©Hÿ…ž 8ñ?çkº[ ,7€JœM´¾6ü=¡w|ŠüOÝ à~ž—±G„¿÷ÑÏës_�ÕölÖŽ(A ��:@b� ‚@Aà!@X{îU}#½ú˜›VÇ©9èÎi‰«?öMÉšÛëÌUç³ÞK÷s~/‰{~çNÙö�ˆ¿}–Œ…¾šO]Û•îö©@bØŠ·;DþÏDü¯” !o· ¨0pôéÓ§S}à›¶ŽþüóOˆùÝpóßÿþ—GêgM°I¹Oƒx»0’&ù£1+Ñ÷ü½¯'öÃñVøô¹£9ã Aà"�À;üѳËA � ‚ÀÏ# ¢µAœqŸs,Gýˆ¹A|«íüÞçü]$cö­ú¬W‰>·y¼®^2ŸI½%>çmñ[#þ«ÜæS|7ò}Ôv­+û7²ù—}¤»Nô2ÀSmH™Ç \žÐ�WʹԸ<ÏPÝd®¯¼£�šA‘?0êgýYƒÇ±^%¹Ž£›ö?� ‘‰3�òo � ‚@�ˆ€¸×da`[Œe˜t{IîƒôVcøhSÒ¹#ÙÏUmë–î�=Úˆ�Öà5/Ççxl÷)_¿3�ùÔ¿í¨rÚÕ{ùy €«ÿbÎiùL`#ÿË¥pWÀ‰ÿGx<€¯´¾zGÀÍ—/_®þú믅r.”__°�`/W§®™øã¶ŽœÊwwæsÎHï×C®}U÷xM §6‰‚¤�A � ‚@x VÈiߦüÎsÜÒ~$>7�]}Ω¾ª»¯%16�eÿ”¬yÖ‘ÞÜ϶sì·ô¼^[/áâ,é7¥—„ŸµÒWc>Wûé{#’��îü‡üCü?!q3ŽúÝè¹ÿ+Õ.õÈÀ…r9n_ ®Öÿ ½½Ìÿ5ñ'jòϼè}ó¸&ñþá{?ýœÓ�1kƒ…°òx³¹ � ð>Hà}üÎÙË ‚@Aà‰Ç’kü4ó/ç�¤—æ\Ûu tÛ}¼·û<ÇG’9ûy«mÝy–ŒeÝ9øêÜuÍ÷žð;×’þΫ:qõmä©ùéw?Iß ÀãGÊ᥀—ºÒ&ò©í„ñÔíF¾+½ p¡·ÿ_Èÿ}Kò\‹ ã6E¬Müù`òor_ûŽ|Äí÷øØè–Îéãøï4°¯;�8‚@x—¤ð.öìô[E@Çð·ºô¬;� ðnàÿÝ»ò¯úÿùÚ§úÑ{p«Ï`�|Žõ²ÎG¬Ú½ŽÝoô©óY·¬qû,+é'¯Ú+]©K‘Í(ó­|�ä².ÙÜ!p$y,»‘]ñçÓ€ ¤^¸Ð#‹ß~ûíâßÿþ÷‚9•ÏgÙ(\±©h#LóAØré�ÿëb€ Îîmû‘&ûöÙ®’ØTAÀýÖ¼„CÃg팂À»D €wù³g§ƒ@A �׎€8[[¢y›m¯Û¾*­;¯Jb¯ú§ôš‹nÛz•ŒaÛk@Z'nÝr@ôIkm³oBrD÷Pä�;(ÜJ§ p¢í#_ Pà³ÅH~»5_…€S™ }€›úTà‚¯ê%�Ü)ðaU0ñŸ’^úHš|#ý8ÀCŠuìQA€¸çª¹`Ÿ"À"1‚ÀûD €÷ù»g¯ƒ@A �W€€8ÙšTO-§æ ³ÕfÛÒ±Þ¶NBàûV}&ø½ÔUóºå¾ïÚìºë&ð$ô:c3žc¶�gé±,ñ+÷PÛ­t/ <–ñå‘€SmgúÀB6ä¿í¬úò™@ñþs‘~Ú¹ |*°-ûFrý©ÀÍ ­´ýÁïí‡w©±C&üHÆ«¾eÖö¿ôcŽ‘to¯�œ�¦}M`‘Aàý!�ÀûûͳÇA � ‚ÀGÒËæVu|½í¼]¤Èñ�´ê³Ždƒ¬¯È÷�b†×ÑK& O%úÖûXµë8îo©Ø�Æ@˜`·«Þê�Ïw\jÍÜæßv’€ŠG«À·óóóïºâϧナ· ó €¯Úãþ<ÖîÍÀ"ÏãXö#9ßqlô9YÇpnõ50„�ÇÞˆÅA`ÿH`ÿãìaA � ðÊïÜ Ë½Ý/—ø¨á¯±Þ®}ˆíÊûFyøì·ÞKæsŽ×U×dŸ×eòŽ�N_z›¾Î·ôx²MþÛcãHcYGòIÀSMs&#óꋲ¢»Nu»¿ž8!¯�­«þ7ºàZ6ï¨Wÿ­³ìû´zÅŸ9|GÀøÇý1² ?ëU:Óãl%÷ì»pØšç�#ƒ@ØRØŸß2{‚@A ¼aÄÉ6Vßó3âu«ÉöWú”¿ÏÙýüÎÁ?·9éù‘¶›Rþ˜ÌÛ5eÛoɘÖWcËÕîàK¼€IÍVîG­ûF„žõËüñ©@ÝæÏã<.Юüóx€î¸æS�rñAH?ãÝ—ü÷$ÛE µ¾ À…|SÍ„Ÿ¸uKûÜ—uzÞª;Þ$ÀçmÄb� °¿¤°¿¿mö,� ‚@xeˆs­¯�{i#1ün#žFÜ›ó,§ü5>ÓqKr¯e] ú¨Á»™gêê?qbî�¬>û•c²±å.ðŽ_ùW×C>ÈÕþ�"û|*ðT¾¶8ùoô2À+Þ ;.äç|yô‚ƒ6óŒöiåÅXs±™ü��Y ²Œå<ë¿õÍ^3–pK`Ÿ„‚À>"�À>þªÙ§ ‚@Aà]!®[¿óÄv!ü}¿‘=W ¿Îü´^6çà�Èöº@¸ÚŒaÛÒ>æ”Î-ýôo¤–�Rq |àD}>Šø/Tà*?�З¯\鎀K]ý¿Pü\±Q²=* 0LmÛHy-Ô~S:ã-wêáǶßóÙÇ8UÇÞh`#,Üo##�ýC €ýûM³GOˆ€Ž‘O8z†A � 0F€ãÏÜ6îõ¸^8¢y¢u¤HsÛD”×ñ:s=vV½æT�qÓͶ¥Ç@Ú§uÈ\9�ÍÐè´•Ï$—0Ÿ à=ÇÒyÉs.¸êϧõRÀÅ—/_.~ýõ×Å¿þõ¯‹Uœ—òõ$ŸÔk®´~h3qçNt¶;?Õ}µ]%±Jü«î~k ‚þiA ì9)ìùœÝ A � ^'â\CÂü:W»\±nu¶ê³NöÑÛ}ö‹>µÙFšôWI.먾Þ^�ÑåN�CŹ‚ÏËx<€¯œêŠ?Ÿ üD@ä¢O»ýí·ßNñyÓû.u—ÀB/\è«J`sá«Ig„I7ÒÄßÅÛ£î&ûŽõ6~û�4¯ÍöÒ»ú+lSØ@$FØORØÏß5{‚@A ¼# ÆÞžb·+©·.bÜHw•Žõk`m»6ÆèómÏIˆØ^ Èzi€¸#à„ê€OŠ5ò/«(v¨‚À©ˆþ7qÿïºC€O¶qTà«<`Ò¾ ð>n²Mþz€} ßiîë1±ÑçdĹ՗"À1‚Àþ!�Àþý¦ïv�8†×Žw Dv<� Þ >v-yèô²§ŽoôÛÖw[œYncŒ>‰î7çxO¼¾]ÖàuŒrí3Á'×ú6¹ê Ù•Ú¿º¬ïpQ€À©ö‡/ð©¿F¢•Nî±^x"ò¯›Nør¤œÛþot'ÀµìK™÷ý< CÐL⫎�‚€‰½%9£fÂOÌz•îãqˆÍ6pÒo¹5ov�ƒ@x•¤ð*–,ê¾,�ç÷í•ü ‚@oŽ{lÏÍÑLð!þ&Ñ.8Ö¯ÉkÝé©ãyõ{^Ƴ>%éGŒ5i�"ëzy^¡e1@‚+ý7Êãnû_¾QPoùWƒð‹ÿŸž(†N7¾p£;®x\@ýxIà}ßhrmÉîÔ» ë¾úoIÎTcœJðÑ{Ÿû:†]uÇ›l;Úÿ˜1‚@x‹¤ðµ¬y 6ìA � ^3·Ê«è;êÿÔǺ^t¶QŸãõ7Øe}ô›Êëý&üÌa½—ô±¯äÉÅnyþ¿‘_òV¹�ü‹çsÙÿH„¿=€TN»ò¯~7zÀµ®þ·O’§ñGŸ„€×�e`Óz¹ôþ(`ßç.òÓ'EÖ=Ï$ѧãTÓ>çN€)pâo�Þè—e/ÐA7P� ‚@xÓ@>!¿ÛÚ¶<âlOÕXc¿Aø½.Çêü^Ó¶uÑw.gã€ùiÖ-É·Žd|åBì›”ÍUþæGj#¶¾ò/ýXäŸG˜GÝxáß•ÞÐÈ¿b§ŠMè²­�~xŸäØÞ6qëH“Ëêëuì�6àµáŒ‚À›E €7ûÓeá#tŒ¹ã Ï‚@þý= Ì™ä…Èùÿ<ðü÷ÿ”Í�ßÿ¿{ÊçØC×J¿Ñ÷˜–F¬_‹ýUnË™ŠCè™�ùÑ‘äZ·TŽÜ›„Ÿù=®òÚ”w+BámÿëV í|Yú%›^Ø>èÏþóŸÿ\0–b|6°mèljÚ�Ú6RmâÏÉ Åò—�Ñh?|µ€×v•ø§ Ä6à�͆3Fo�ÞäÏö¾ÍÁ{Ô|ÐÅâ A � ðÜp\šâHs±ŸYçܸ�}œì÷ ÛûPuì:Չݷ™ÈOõóøHçŽ|ŽõRãBøÑÖ~ŠÈIÞ–<ÞðQÏüŸé}Ÿ?}ú¹Ç¿¾Ñöáëׯ'z,@¸”X\*¶ÐKß¿?Ôçya`]zµbbmâ¿k!Àdßóö6~û<¿×eÛ}›ž)l #¼MRx›¿Û»_µê@¯ ŽOámm×¼¹qvãg�—ìK¿?Õg½Ïñº™ß›}•&ã£þÞÏ*�¿«\õ…äB²ùÌßä^w€·úSà3�—Ú®åã�~ýõ×Ý@ï?¿ÐûŽ”Û®`ÈÇcý?ŠÞíVï£O-Xïól“oRßû«Ò9îCl£ “6‰Þ)¼½ßìݯxu€~÷8€ ‚@x�pœ‚>e»Ï=nŽöÁ>d¯W_Ýwæèê8èSãØßË]É?yZ¿º·ý¡´—úAîñKÞPÐ]—²¹Íß?0_8Ô;NEôuÁÿû‰t¥7ò¯;èÇ'§È:ã¬ÇbgcÔ;ЧÆõ0Œ] =º}#é~HçV¿AŠˆÄo �ÞÖïõnW«cMÛwËw Dv<� Þ¯ ĵ�|5>¥÷ýz›~ø³õkglûªD÷6š¿_Wo�úÌùLèû�kYózŸcU®öDîZdËl¶?Ø®üë1€F„I„íó™@N$�d¶CWýot'Àµ —‡"ÀCÿ�ZAAÒïÜR®Éf¢O‚õ*ÝÑc›mÂ4E€Y„ ¯�^ïo“•� ‚@oˆ§ÉòCw££·ë¸Ä£�ÖlßHâóÆüÎñz�ÖûØCÖë±j_û î"ì-4ò9ÞKåBüÛ‹ÿèŒ.�›Gn´ÝŠØ_£kÚ­\ù—ͧOã‹èíGà–®T¸¤F ±6^Àjíº5çÊgIޝþ›üûêÿ®?:c8׺¥ç@ÒÈ#F«úÒ³ú«}O`‘Aàm �ÀÛø�Þå*u\y—û��A �ýA€c™Iï}÷ªïÛÛ£ñ~öØ9Z+¾:·s�Ö½–Þöz,û¼Þïøœ4y¯9uë5o¤Û‡dÝê×N1¯Û}l#{ݶs-Y;Û¨Ñg*6Ê·¯ïSmx¸ïئ;¾ê™åN®ð»(ÀKþ*qnw (ù‡ôTþÖ&�¯\é=—Ú.x4€;ªd¿fto áæKûMüô¾w0ãùÇðØ&ÿ–äMéÄ6š°H`‘Aàu#�Àëþ}²º ð®à„+-�׉À[ÿïsŠœîŠö.ûß9sÔgÊ?µÖÑÚF¾©þ»øë:ѧ¶~,ÖáµXö9{*Þçc÷¹s¶I>ýFúʧ!Ö¤¿é}®ºsÞ¬å6ÞLN{@œÿ¤_äÿ’ÛþÏÎÎ.?þ¼Ð׿ÿþû‚»”Çc¼@�¯ ð A=)pÕ"P);·Z ع“k€~¶«ÄŸ"(¤�=C €=ûA³;A � ‚ÀË `9š}.æ|rh&ÄöOIòçÆõxô¯z?žç³t|dOùì·ô–u�Skqß©¸Ç"¯ÏÙfW2_s­;>%™[¹í꿈û‘T^ Ø*¬GWùOeŸé–ÿ >‹ä_ŠÜ_ÿë_ÿ’zóA…€S}`!}¡w\j[è=)°8øûï¿]à€_xߊ8k¡ °k3Ùw~oã·Ióšl/½«¿à#,†±�ÄA ¼()¼(ü™<� ‚@Ø'Ä�¶øšcÝrW,ú|ìQ«þª;wНMùéGljséù�ÖGq|µyîÚÇqb#ï3‘w?¤sj¬êŽOHÈÿúE�ZWñÛŒ-›ÀG>é®ò_ÿòË/PÐX8oô%ÞÐÈ¿ÖÚ¾ IìèÓ§O'"þ\ò?ÑÇýõW{±Ÿì[>¨±w!ìÞíñ½Iüý~÷™’&úÄ­ÏÉ:ë¸ó<´ßwüµcô ^�^ûÌ‚@A ì)â@wŠÕWõmÔܪ»>·ªÛ÷3Ò<ÉVÇ·Ï9Ûæ©}k®û?4ÎX£¾&ôž«ÚU¯ý=N/É×:úP$ß/ TÚD›wÜ*‡G®•×>(?ñ#ùØNtgÀß*P8h?˜®úߨp-ûR¹sWÿGdzäó].&ºç¢OÕ=>ožÛ¶¥s‘äx#n_Sº?Ûâ]ú†É£Öû«]‹Ö§¤Æ†Ðª{k¼ = ÿ¡ül¼ ‘Ý Ð˜¿|íS�²OØ`þ¿]ù×�·º+ }-@.ÎÇç £]«$Lø-é7†Èfóx­[ÚçŒIŒVõ¥gõŒ„�ó6b1‚@x9Rx9ì3sA � °çˆmé)¿Û®œ©ŽUû3No{쟑¬Ëã¢Û¶Ž¤Y:i}o�ÊŸ¾ MªuüšdBoßœí1FŸÖÅ�¤!–ŸÔ�íÊ¿|­2 ?�4Ò¬|bp~Èÿ©$çÜ�ü«ß�ný¿–ÿR}òk/�µm$Úñz€‹?þa�FÞôµµ¯\Ö=ö$ÑßbÓ)lB+¼8)¼øO�� ‚@ûŒ€8К³ŸÛì»ô!§¶Þ&V}&Úµ�õ³î5`W�>αô8–u^ûœ;Š‘³-îq�ScÉþ Î�ÚÚ”mÿH²ùÛK¥·G˜S>ÞЪ²i±ç�cÈ¿¶�ºÚ&ûd5ý�ìk.õìÿOh ÎÇ�Vñ^0¦c&ãU¢·Âªc-´‚…ü?v~•4#Ïÿ�<�É¿%ݧô;CkßS¸ƒJAàåHàå°ÏÌAàÙÐ1øÙçÌ„A �×€ÀSÿÿÏdõ5ìëC×pŸ} L«õ'§b_u¯ÓýF1rwþHNõunŸ²íï¥Ö ×r_V…€õ~á—�"„Mšé£ù[1€uȾ÷¿Ò».ÏÎÎú2Àåׯ_úT wÐÿЏ6ú ù” ?HJßêî€3½øï³ˆýÕ¯¿þz-ÒOûðåË—IݰXè³€ÿ…>x¨»ÚÕ} «Æõ}?~ü%!Çfë¯úCÞ{Ÿ\“�|šÇ¯ääës[çúG˜äN€ Hô ðB¤ðBÀgÚ ‚@A ¼u ¾�á©FÌqKrçÈþ¶1§æšó×¹É3ywŸj;×Ò1KüÖ-!ÿÒyD@B/Ðg%Úãçmÿ|% Ý âÀšü³½ðøòòò‚M_ ¸ùWúQ#ÿ¤ªÐr/éØÁ'Æxä²Íå*¼n›Ý’ë–øhØ4÷]Zú+ìRX£%¼ )¼ î™5� ‚@÷FòiòLçÞ¾÷€ƒuüA¸¹Èanú¨�ãäÔuV‡<·)¿ã÷•uN÷í}¶EÜÛ;,É·NŽõ*Éé§ùGø¹ýV™ç�ã€õ§•Ç×ä;ÑÅÿï"þ|1ðH¹ \È¿îàŠ?„_½ú/sÝLº×Ž�R‰?Å€]‹ UÉ¿çê}=á'¯÷¥šiAàHàÁÏÔA � ‚@؆¤sD°·õ{Šx%æUg®©5šX[:oÊöºûñíˆô\µ/ä[„|íª¶ó{Ÿí‘TŸvŠGŒ+ †hó™@ªg"ö�üËn/$¦nGtëÿ±äšüsÕ_äÿJ©—Êc¡Sä_¡u39_;¤@ÂMø-‰Wû>í±WgÏ=ŠmŒ V`°áŒ‚À³ �À³ÀœI‚@A � pÄ“ÖĺêŒTmt·)Ýñ]eågèwJ¯ã:·J�g_‡¾½=å«óìª{Î>¿÷Û6Á'ßúÉà;ùWàF㱩k»Òï+ù�øâ×á?†ü«aCÊ?på_�\« p©;xIàùßF¤‰S@0á·”kgÒÎþ1Ž¥ûö¾êïuìuÓ¾¦°F#Jx>Rx>¬3SA � vF@ühMþwîô‰&îSCß–C_ö‡V‰~ÕûXK~¤?ž»ΤÞþj�tû&ä’ékWÅýo•Õd#ÉRoØ_}°hä_äžò‚Àc|¬ƒ<=p­Gx\à‚˜Üë·z­¤®6?nPB·Þ“G–?Ê�BÀ2óîßJôݧ÷yž»½'<Úç&°‰;<)<²7� ‚@D@¼hƒTo³8ͽºA^Y­êuünÎEzýöÕþU§ï6ÛãßGzÞQ“yǪ=Òí«rµßMuàÛûy¾¿½Pc\‡µöy@]éçÓ�‰×8¼ðïZ_ ¸T`¡9Nµq¾Þ“|Æê}rÝiäµÂÂ*R‹¬Éw˜Ôß 8k½E·Ï’.S:±�Úï†ÍF FO‚@ Ok ctŒâ A � ðÆ€³m;®Õ8zí3¥C��ìûBU×1êÛÇ«m¢O?û{©õʵ,t ô}°•sCA`5'í.¥·óq® þ*\~þüù’ÏþöÛo‹üã<Àû ®ÈYmôUê�Ú©v€>èm-’äcÏ5r|2c}$ƒ6÷5Ï«>t܃�lb£9Üg$ûqF9•°ïmÏiéx/‰÷¾b÷Ÿ ä<\Ë»åN�+=p¦[þDò¯%yd ÝAðõëW¾p©"À‚€¾°Ð;.õÉÀéº"Àô´$âÄ{¢ùvaݶÔÙFžÉ}/éhŸu$}î4a—"ÀTâ��@ ��iF A � ‚À«BÀÄu´((mJŽúMù¦æÂÏøŽ[·ôüŽ�ì)ßÔZêØS9ö×yñU»�øõ—¯²Ï«6CjkWý%¹eÀDÿ5üK®%[sÎÙÙÙ‰øþM_8ÒÖníù¿eÓÛóôÄß}*ùwŽpŽ%s1–›í‘$‡Üº>÷­¾6–ö7E€†Dþ�§C €§Ã6#� ‚@AàÙwZÏ5¥¯žXaþ~ &ãHñês¾}^boãùœo¹KŽs‘&ëöõ¶××Kçm‘<Àt(f$½]Ù·Okåñžû¿‚ù+�mù\�úèÑ>ø]Û±®ú«[ëƒî à.]ÀK·¼C°˜�ä»°K€aü�޾è#é¼~=Î'¾nÂ7E€5Q‚Àã#�Àãcšƒ@A � „dÙ„¹2òUÂ^uúõö”ÏsŒò›“ýºªm]ä»Ý`ÉxŽMÉU®ÂË·ÿcÓmµi½·ºàJâFw@”ù'_þCùÚ§UP�਑nruûÿ�(ÿg?è«ý½ÔÐk’�Þ7“z“ù)I¿¶nI÷éÇZÛ&kG”  � Ê ‚@A �ýD.&NÖvnJß¶çôõù«úGö}|äîÒ*©'¿ÚU7–ŽMI ¥ÔFþÛ˜Ú7À„ló&ÿöy@Ékù×�h, À§WbIþõŠ€[>¨;(ð’À]¾ ´5 Gwƒh×+ÿ}ÀÄÝù#ÉäÍI÷svÕoÀÀcÃ#�ŸF €Ÿ†0� ‚@Aàí#`®5%fÅåÖ„Þã÷>lñ‘ÞÇZr÷§öíB;›žÛªm½'úäNÅÈ]í3;xˆ®»ü•ÎS˜··’Ø­ I>±ö©@1>xL>ó@þEü¯uWÀ%䟘ÜSŸ€@÷$ºÚèm\ÉQ ­y“¸Ó<–‰ü6yg€9 €Ï\NbA Ü�î‡W²ƒ@A � ð&€HÖÖÛÄž’[1Ÿ7æBg>¯Ãz/½®>?ÍùKë‡Ýû¿¯ñ^¿è�¾Õöšð[wܲö±o•Ë—d¶¯hÉknÛ*"óÄÈ;R¤ÿDòT�ü½ð�+ÿ¼/`¡íBsp>ßßÀÀl½_®�¶^ÀÊ[‹¬ÃwlþcZŽMû}é~žÛýðßiÚïî Gx8)<»ôÜCtŒÙýÊ.½òï÷½üÒãý,Dbœox&øQÿÿ#lþ�Z²ë#IÜù½¾‹MÎÏ4ÖT›mzbUŸ‹¯ò”².ˆpé]dÀ/[»{{¢a©4b,}uÅ¿‘xůtÕÿŠÛþ?}útùåË—+½ðòŸÿü'�0Þ_\Iˆ»jWÚß§¹@tÀp!­·ñíBþ+ÙŸÒk£m8c� ð Rxlé‚@A � Ð# žÖ»ÖÅbp8K­÷²�a›ÿ‘kÛzs<âŸ~Üj�ôJè«î\û°­[®|\6nà+Ç"ò<ÐH¯ôö™@nû‡Õ‹èÓxd@¡›*œè�—ò-æ[� }2ðRŸ <Ћ©�»?�#?$9ÿÚ\`=Ž�Šî³K1€\æ2±÷Úl{¬&…KŠˆÄC €‡á–^τŴ ‚@Aàí!À1ÜÇq$¾—ìÕ}|ä{ëHσþ­¯ÚU7‰gΪ;§÷Ùv‰�}‘—ÙÞ Àÿc|ÄÔôhÀµâŸøL Š¼,ÞÞ ý@w‹ï_¨ îq!ÒÄçé,òˆ®6wbEŒÍŸüÚì¯Än¼‡˜ÏczÍë5�ö÷Ž�%�­¤°¢$� ‚@A lC@Ül�2ÒñÁÝzI'ûªn’æ¾Ö‘5†=Õœ7ïý}~µMâݧÚΫ>ë–äX·Ô¾ÉÝÈ?ÏPh$—«ûjnU¸Ò yù_#ÿÄèÇ{ÎÎÎøL xÿù‰ˆÿ‘ wð€Ä²* )ùW…�NøZ€6¾Ø¯;nT¸VìR¹Û^È’ûÆIß òopzI9öcÓ웓ä¹y³Mûœ"À,B �iR˜Æ&‘ ‚@A �{"¡¥�¤ û}%ã¹ÏœNì1š×î±zÛäÝñjWÝýì³´‰oµo|! nÉu1@ž+ø°|È÷�®îƒmkêëOŠ÷šüó~]ý‡ü_iã%�ŒqßÖq“_õ·4q÷ø&ú¶‘öÍIç3žç®ºãM€psÞF,FÓ¤0�M"¯ŽiA � ‚ÀÛD@\Í$÷A’½öUÇG3´Ýœ?ñ§§·ÚdÞÓTÛù#1û-5d–ÛöMî:„pó–¿cŒU€é”ÖZ#ÿ �h;V¼�ù×3ÿ<*À# bê³~ ¬äÙ›}Uš\#Û'c¬«’ÿÿÏÞ™hGŽ#KVKnU]ýúõÿÿäÌtWUfj»ZÈ—I©Ípå»°`Hr$Í�b­s!¿Fí¿‰‚B6A§ °G {(¼vô;þµ1ã A � „€ÿf› <…ú)”xÇV¾ê¬‡Ö~‘�m}|/;ŸŠëýëüÐÙ¯êÍ/QæA8;È1åáÁ,`tñ-Uû‡¨ÿb?«ðÿ"Ÿ¶Å_ñ·Z¸Ñöÿkíø©ã»lü¿¿å€Zð3ž^îwxQÀzbæ¹ÖŠÛÉ1Ç?ÈÂÏc}`�"�C²pˆG¤7ŽÀîoâŸD†2ùüO†.�ï�÷~þçÿû×y’öç]•Í›>väá

ó>7¬§ÛÜg/[?Gk.|z¹Æ¹°GWùc~Žj|2í®þ“ƒ¦Z~Ÿ›ô<ýÿ‹Lwº²¿k€Z€êþkÅèâÿõµ¶ÿ_ÿþûïWÿüç?þë_ÿâõ€ø_+¯l‡Üˆ;¥»QsQmjï@vñO.ü�çvök”öéyäƒx¦ç�O„ vd gBA � ‰Ú{¯?˜óµª¯¼}�ÏSRr×1U¾·Y†ÒFcÜYsZW {ë*­ùÌט^gÛÅ¿ÚÔWÛ …v»ú¯ùÞIlE¯ntµÿ7ùW*òym`{] èÙüñI‹è¯XÐÛ®�uœ‹çU�u:k<'A_è[Þ²@þ-‹øõ‹Ž…4a–E€D"�1YãmA � ŽB€¢�"ô-6�{Žn™óïÛH×ûô²qÜB‰eÌîÇ㟓ÝWïg=Ô±U×#ט_cm7µÍ½ùJéF·\ª¨çžº¦onµЊÍMõ<›noÅó �³¯_¿²ðƒC·|RÑÿ㯿þºøïÿ{&žâ}ˉKÿ.öÅ4rضe!à”E:ô‰ö`Ì`ÁœF!�²pG„ ‚@A ¼Oj]4Ç3sÕZÍÝ´ÆV�y(ý®Qò¬ùT;þÎ OÉ艫­úÁÓzŸê?g«ú5¾õç4ëˆ5_)cÓ±3€üîXÀ_WõÏUüSìSõ·‹ÿzýŸÄÝ„DÎõ@@>ëø¤ÂŸ× 6 $³pp£ƒS‹fâÈEÁÏdLŶv¸µ÷ÔñKoòôcéÀ$‹÷ø† ÈÀH¢A � ‚ÀiP�Mu×i Þxów«¼uk´âg~ %¯qw¿½<ò™Ó¡5å½Í}¢¯|õ¯¼}z�åžRÄKw¡Ÿâ½u�Nj?ð†b^: ñV,«>� -\êJ?Wþ÷Å?~’Û«åã+÷-w÷£/¼mF¿Ìañ_*O1÷' š{�m#ŠŸã°/6æ­ù­ú-&‰1¼S²ðN?ØL+� ‚@Ï�À®¦<Ì\u•·:ê±5Š¿}*oÝu_îgNFßûØw e }«ºÊãWeóñýÕëF”<s+扛|DZñÏÕÿsí8(þw]Ÿ·…ÙZ“¿†pÎmwºúÏ‚Áµ ?å»å- £¶¾À®;jáßæ¿Ï…Ÿm#jû!WÞöFÛDù Ó‚@8@ pDA � ‚Àã È{‹u‡Ç<¢ÌiÔª¾òöélë)¾î{Ä[7Gɇ�VóŒdëì�¼µMÅ÷�{ÍÓÛçlÕÏüåŠ6“£°æž {Š[^@á��…‘Öš¯|ðÿ$8Sñ«ç\ià§b¨x `Ë7C¥~ÐÜÔc-ÔÅ'q¬eâ�g‰ÚÕ¼³`RqúHdà#}Ú™kA � &J±¸Š ¾ª¥†~#}Õ™‡:ψ’Ü>æ¡#_ûUZ}áiŽÝIë²ýÖ(ýÖ¶$»¨·•G¼u•2î\¾§à?S1Ïí-%=Õ½¹í?'Šn¶ûóÆ€ÏPœõ€€; «ÿWº-à§Ž ¥زÀEûÿÊ”aŒÚRÑOlµo]Ï#4Í?‹ˆDøèdࣟ™8þéH A ¼¯ý÷…×S5æú”ùžj\[òœú9Õ9;‡1°m eŒ5îù”yzÌŽ=Fv¡O¬ãzª9IuŽ�+ÿíö�IöíÐÏ*æo¥?Ø @¹µPÀ-¼ðú·ß~»Ö"Àõï¿ÿ~õ¯ýëJæ¶0 ßk­´Cä�þ¹(á£æ“Þó^ @gÛnÕíÆ݅ý%Ú>=�|Ð4¯, á##�€�üégîA � ‚À/A@õǾ0¥Ã^ö æô¶�b‰ÙÚ\Û¿—­nêyšÒŸçá1õ6ôÖÍѹ<èOÉè=øQëãðéc\¤;~Mv¼©ý·RâtÈ]÷hK¿nÔ÷éîôÚ¿³ÏŸ?óz€+ÙxSÀµ(ÄÞ¶‚ý�?þø,ù§Šý«?xSàÕ»8ô À³…EOʉX |þجg1bm!ÿº€LsÁoZuæ¡mN0µ ‹,T@ÂX²ða?úL<� ‚@x.Tkü[ú9%fKÞ->µ´9º–ƒ±÷mNç><_ûõzòÙ§æ¶®§½Í;âñ§OÛÜG‡u¦#l}t.ÞáiK²m¦ø;gOíS)îŸjÝì¯mÿ’Û‡ªûü±Ýj»?—ò[ñOåÿÏþs_(ëµ�¼&ð‡ ýŸ*øüý÷ß—’ÏÿóŸÿœI¦xßûŠŸk.ò«½.�Ã>s øødêyòb³J³n'Æ[רpÉ"À">"YøˆŸzæ‚@A ür(ä\\Òy•+¿4°Þo$;¾öe´×÷rõ}¾Žù¾úŽÆe;”Æ¼ÖøÞ¯N?ŒË(Gõƒ·O¯w‘n}/×8ó=uŒiíϾØ4Þ Õþ<à“xVš«~´[DÛ-2q‹€‹ç¶0¡Å>ëø.ž<çÿýïÏÄßñjA- ìýIzdó"@¥NábßrOÝo-òÍ›Syçéø¬²`„B?$Yø�{&‚@A <7g¥Î:¹»§ÊsòŽ d¼k­ÎÉþ`Õë{ül_£ô_}��¿çG2:7��|smÉV wâ«\yç°Î”˜9[ñá1ÿ¼ = �ñº<8Ðøë_ØŠa¹RðÒÖ”ò¢MT·Üéêÿ�lìð•{R÷­é½Ír-þY�p¾ÊÛ×ù� ::xÛÌ›ö¾È³M˜d`�Þ;YxïŸpæ‚@A ¼(ä\P2¨^îZí•ß[sÕ>Ñ÷rõýUüÜ|ªÞ¼i›u#Šs¬¶ªëyËPbŽmk1¥Po©«¿ùêc�éÈf�©··HæÿûVü«xçF]ÄßÝ L( [­Ü4¹ëjzNÀ…¶þ·É+æN‹7zUàµL?ãE±'·¹E€%À]ð»Ó¾àÇ^uøU¹òÎÑ(“Ÿð8ÐGï�,¼÷O8ó A � ^ Õ'ÛÇÄâ;×v5ßœõ^o¿]Êï [|ìkZcè¹RûAG¶^gyä��æü=ߌ“ÞþÖ/Ñ-¾ª³ÛÓûÉSùkÞvÓ3££˜e‚—Põªão?)g+¼µ õ®ž–_ ÚQÖ@<P[ÿY5¸ÖÁƒ©Ø@ðÜ!Óls‘î«ýst.�ã¡4ÆÙóUל¶ü‡=([âÞYxb¦‚@A ¼^Tc,¬ÉÌdͧ·o™½‹?ûö²õ/E=§9ZÇetæ+EÏüªÎrµõ<²›ñ!ÇZÛâCŽêg¾ôÖUß‘½ê૊ý¶@±ÿw’I#S«•y0`c¦>.tÅÝ¥â?é (?cÛ¿x£—\kà§òðjAê…cw¸@‡¶Ü¢£×Tnûæ.îMqñ#]ï»OnFdÀ`„~²ð!>æLò£ 0ýQÿ(ÓÍ<ƒ@Aà…àïM=Ö†±ö÷ÉÅö\âñ1ÅoÄ[­­ÆÚf~îß¶>¶Ê#ÞE8yFÇTŒ\ù'Æz÷[u•_³«O¹œ“Ÿç´!Oóxd¿‘î–Å�fЂÔxp ~ªÿÛ»¯Ùþÿ�üãú¯¿þºþßÿýß+Ò4ãÍ͵ü¯Åë¹€×€|.êt#ºïk2ÖEâûÝ5Çᇨ1Èh�yçG?§#§íð hþÎõÀExOdà=}š™KA � fP�3cy}jÆJ=fÊÍ›V]åm¯ûR>ì´ZÿT­æñµØ¯¼}«®ò#»uŒÝ<1â™7· |ÒBÀQžòϼy3À5WÿE)þ)Ôµ.pËÊÂÝüñIEÿ•¨Í÷ Y ¼›Y˜+¨«¾.x1@]·6÷ÔBç3oJ’žGgø}Í}hÛ;… ï�,¼ƒ1SA � ‚À»ºoÎú4ú§êƒ<} VuæÝ¾=o]¥Ìr.¶öç\øÏé±ÛjÞÊ×b¾òö©ºÊ/ÙG~ò§¸m÷ûkìÿÞR5üZá+þZ l¯ lÆÝDϵ0ðIEþOü¬üÔÃ/´; ×Zh¹0é‹ê^ž[èF]�«/òçtŽÇŸÖ�£-’”yï¼ò3¼3²ðÎ>ÐL'� ‚@ à"±ç�Nµ[÷Xú”9É¥b¬ éÞ¾•’„\Ö!›‡ºÕþ¬ƒÎé«Ï_û¨:1U¶_ÕU~«½÷#‡…~»çŸ_‹M§+ûÒóÌ€í¸Õ“ÿÛUåh÷ˆžëy—*üUëÿ¤ƒ 4Åò°@î ˆïÛƒ{ré�] ‡?8ó΋~NWÇh¿ªË"ÀÞ#Yx�Ÿjæ‚@A �w€…l-¾+Ïô�ñ©¼u•bw®‘¿íPZßÏN{ØŸu[¨û´ïœ\‹ýÊÛ¿ê*ßÛ6¹ì^ù§1´Ê_SHnõ€ìá·¢šþnåEŸsù—z.€È§K pÅßj1àF < .¸—º5ËÄqÜLÔ2ÔWû{*ӾЇ¯­æ�+øÉ]ýˆ·\sð€e  ‚À;@ ïàCÌ‚@A � `T»˜}1ú˜1;ÕŸmüUv^Û{zë*%Qµ!�ìèiØhµŸ¦˜t¶[·F{ÿZ [åÊ;®ê*?²[7 íâé’C>¼ €â½Êz3@+Ž5o©r祻6éx[À- ÔbÅ? ¤¨ï¹|TÛ¨÷ðó ÜSlÄZ�L«ùÚ÷úËå¢�*þµVÀ˭؇ªq¿?‹ÍIñÄÿ=àJWÿ)þ?ËN=ÁNr.2·vÿ�îK¿À†@IDATü[nYXŒè‹~ŸÀ¦» ’çñ#™ªù iîÙ p€H„·Ž@Þú'˜ñ¿*êÚW5° &¼^úûãþßTbøPð»¡~?×ä9pçß5ä´Ž˜ªïåj›ãçú­¹F>* yß^3ÍñîsÍn¿žj®RQç2ÍFÛŽΟu°•¿=@”†³‹íüoíZäU�×¼àŸÿüç•´tp)z�‡b´Np}ÎA’…æ‚Ý.uÀ}[‡ï({RìîÏ|Ÿ»usüaV’ª 'Ç=°GÞYxKŸVÆ‚@A �W†€ Êç}ÔúkN¶~�2Öêƒ<°­Uy ï¸S(cqñs…¿õ[)}ØÞ}i~í�€Zˆho �üYW÷oD[Ñ+r«ç\ËN}óûï¿Säc—êöN‹—*ö¯8ÜôŒ€ ôÊÀZ8ßO”Œ[õwñïŸÅì–G°»¸ï)þÖõ±[íï#¬²°G#Ì[F oùÓËØƒ@A �‰ÀT—½øÜ]@¾Ä@è{„ƒõK”ñ[}ªÎó±Oo›Ó;îXÊ8Ü*_‹õ5Þö5J?3>m@ýs;5ÂmóoW¿ÅSé_kÞý7òi‹ÿ¼&PÅÿOÿ?õf€Ÿ*ü)þÛ¤¤ã¶¥˜m}ÁÝËý"‰|«ÀlÒÉ0Z ÀäEÓšg¤kvÍ;‹©ðo�,¼É�-ƒA � ‚À=¤ns¼íÏAUíÓÎñ{‡òÖ¹‘¦ê*ßwa›i�µJ£ó½\m=ß‚»5Og:«Ÿ‹s;Ty�·}�’Û}N¾ÏÛãþUÐÒÜ|B]ˆÕf€Ë3-´+þ m· àC“ÿ™v\ªàÿ¡bŸ×^Hn`Ju'ùV Î׺æÇÔª~IçEü}õi?Ÿ”æ+u_Pü°Õ6Ò5;@1ïê>¼%²ð–>­Œ5� ‚@/]ƒ¨úåŸ}öó®:ó=íнoäµ¾ò§ú×�µÏeÙýn‘]Üã[y瘣öí)y³¿@¢ H¡»¿x/ÜŠo…?Å?ùTð_hÀ'ü/¸Z à¶Šu.ÿ»hÛÚ¨€&Žƒ󦵨Ÿã[âòÃ}�~Žb¼ÛH×làv o �,¼¥O+c A � ‚ÀG@µ×ƒÂzIg[¥@Hý6§«öžïe×�äzªæ"Ýù–dÛÖ(¹Y‘±»¸Ÿ£v·}N¶¾QÍ-‹ˆDxÍdà5:[A � ^ªuö#2oº7ˆéªý)yúÚÕŸ»~—ø‘¯u¦ŒÍ<”VsZ¶Í2´ê�iÄŽô;ëòÏQlŸË²‹÷ç ¥ßðIý}Qñ~«+ü­@×ß·ªï5ä]ã!�ò½ûý÷ß?ÉÿÊÇÏŸ?¯tðªÀ+-´ >¹L{pì;Z À—…�¥�­2>ôÑS|܇íèh“í;íôSóÌ"À"^+Yx­ŸLÆ‚@A �WŒ€ê�ÙÑ-ÙfƒžÉÀXT޶ìæMQš7]Òa#¾=ß�ݺ9ßjñµ¯jwÿÖ¹àG¶ÍÔ¶GÒý[”‡×~Ñ.€ªú¡ðåM"»†ÊcƒÊÆÀO= ½*�·è� Déîd;ð¯±âmßÂßÍúº`›wXQâÉY)~Öõ<2­Úwšéç„…Çu`‹^ Yx-ŸDÆ‚@A �WŽ€ œ#¬:ø*?p~Fýªül=TE•Í›®Ùñ£‘{�oŽ�¯uК£êGü’¯ÇQã¬ë }|zÝ ò¹®ìó¤ÿKõí hñlã¿P�H¼ ½!@´5ú¦i§À¥®ø×q©+þ¼. �Já/· PÄ?<¹¦~Z’C•c\ì÷Wÿ­ŸÂ‡¤ÿôïâ}Žw’j·®Q0aòÊAà!�€Wôad(ëèwêþ�oå‰DÎïÛu ã‚@Aà±ð7·¶þorµ½ï1úƒú‚yS�ÑrO±W2yÑõ|Stvëæ|«}‹�û­q.êÑÙ>ÒÙv,U.nàêÿ�ÖZ7<8P<õ„‹íVøâƒƒHˆX]é¿äÊ¿šº>¿ãU�<,PnÄ×+û„Òú"zäƒz÷�<Çc#çáÉ{¯³Íýâ7âÉC«ö�fúÙ&8ap`ˆ^YxB†‚@A �·ˆ€‹È×2vÆÓ×]U7â­[¢Ì�¼Õ§êz™æ˜�tÿsN¿s}_àW<㣩ÈÞ?ÈÏü#éþŠï\妒çy7:à¥r½Ü†�BêósÅ\|ÿþ}å_z^x«�ײ]É»­(´¨û¢{÷E¸å]Z˜+økžZü×Â~Žwlµ[×(óî9pˆ^�,¼ðé6� ‚@oÕ7mø¦¯e.O-FÑYñÖÍQæ6²õs¦ü¶´‘ïH7Ê5ׇ‹|bF¼u'Ðs®öOqêþüB[÷¥ÒJÀù9Å7¼†¿ ¿¾áCñÏko”ãjÚAÀN€¾‘ì>aoÝÉ.Ü}Õß«?ˆªs–>¯ ùžÚßÔvË‹”É3áE§ƒÀ/F ¿ðt‚@A �·Œ€jšÃGçã�ñ…§ë/ä%Þöe ÄŽlÖ{šk²ýjΞ¯>#žqÌ5÷ØG¼uÇÐ · ê}ÅqµŸ]wb]ÜÔò?×ö~¹µ�š¶®ü³õ_ WZ ŽÅƒº€¡÷ÍýX� ÷´ºÀ¿)öyÀ°îðqÞmŽúa¿9ÙúF™¼ðèÇà!üJ¾¬¿²ãôFðǨ?øÛácSuø¥½]òù½ÝÏ.#k¼õï÷ÚÿïÌoÍg #ÛŸ2—s>%õ<¡>T žñzwz¨Û™ ½vèÁoO†Í)óðx;'W½ù5JÎ곕ïý�×÷åXÏgDë÷mÄ[·•ªO¹žó?;Z—ü¿�ÚµüØÒ�;$Þ×½“p«sƒ‡þÝüöÛo×z=àõÿüÏÿ\¯szÍÃeç:0ˆik[Z`� f7øqÆQÑïbßÔ‘k²ý¼0¬‚À¯E ¿ïô‚@A ¼S(�jÁS§ÙÛzÙ¾szÛŸ‚ÒÇ©�ùq¸t Š5Š}€­(t?øî.ôÚ{ž:fÞc›eîsE÷¾U6oJüˆ_ÒÙ¶…âSý*ï¾çt5¶Î³bjÞ´ñ.æ—(y_ó¨™Ú+ýšÀöVüÈ)»Èí­ ¿) Q©î¾}ûv)»ÖŒZ»Öyt¥sêJ <×[Há¶vòzÅa´@Žº+À9Gtn1_÷1Z¨öƒ¼Â*‹ˆDx)²ðR餧 ‚@AàÝ!@AD!vJ{Lì)ýõ1Ký3§z¨hÛ‡£§øWéÖŠòÐÐã‡mˀ㜸—­Ÿ£ôwJs?}ü’¼dc ½½×UûˆéÖr8ÆÏ žf¹ñæ·ÒšÇùÔ§Øö @ô÷Yr+î§ÏÝ[8iÚ!;m¿ [.uþüä é��¼5 �H¢w:‡úwn! ú�²@¼s›¯´M_?ܾæ±ÑFº�A 1ñ&äGx!²ðBÀ§Û ‚@Aà}"@Q4ú¿×W¹ò¯æEQïbž*Ôïñãg=»–ów›ãm7alÛ­ùñë奼½­——ú�³›cÉd«ó«¼?CÆeþ”–WòAS_´"WýñÁ¶gˆÖâ_ó„× RðRí¿Uà_ýÅ‚y¼pà“ÄÔ…´©\ãY•´ PÈ@#lA � žê•7O‘ª¨O•kË€æÆ^Ç@q�_õ­2v®üs¨¨k;¶öm?òÑL­¯ã°nŽÚ×9Lñ7o:—c¤wÞ‘­Ï×Ë}ÌÈþ�ó;c5ojüȶ�J•‹‡¶S~¥j»¸%€·ˆ6ŠΕi ÿz8`ûà±éÜáM:�®)äk«_®Ê»à¯¾ÖUŠ}évrÖ…xëÜŸuäª<2m¤Û H4!?‚À/F ¿ðt‚@A | (¤úÿñ{]/÷ȬÙ{ÿ5™|}ézä:xâj¬y :?€]l§ÐÜÒœ£æ¶®CÍWÇVõ•ïs:oOḵ|ŸË2yÖxÛ·ÒšÓ1o•çxûzàT:åi/h[=”¿íË“üØÀ–Šp _±»&=;ÎÙö/¾� lû×qË«e#ž¸QÑ.ô«¿u•bø…¸�"·íæ+u¼Ç€¯ygéš�¹‚€CƒÀ¯B ¿ éô‚@A |8¨gNýÿ1±Ç=êk¤«s1o?dŠ®ú«hÛ–[ÈCƒVÞ:÷ל¦#]µWÞy+Ån¹÷­ò_Ç»…'ß’_“ùÞ™ù[_sÖñ®ÙñÝZü;W¥Sl«þõù’ì�·;V'…4ÖÖkÚ†**õî@©+ÿ¼*ðšW;ÍwúA`-ž+� }rBÕýî${H±�šóßÓ>Æö^?”™3ó£ Ï„@ž ؤ A � ‚P×Ôÿñ×äQÌs!ÉX¶´:þÊ;–<¾òOQXé–~ð±ŸyËî§ÒÑ8ª½çkÎ�í¯ò½m”Û>£ÜÎUmkþøÇ×óä ôÎiپ͠ö±\)}ñÎQb{›óMz‘ Zo÷ °mÅ­tÚò©ÉâsÛþoÆ2én\ü+ÿ•“¨Wn°Ï´}?3v«ëÕoÿßöÿ.öMÝÏšl¿F5Ç, á¹ÈÀs#œüAà !à?äohÈjAà— °öûQ…Ë³Žƒþ—wÞ�³Ê•Ç¿—­ëçb¿ª¯ó�ºéÛ�‰Øiléÿ*þZÅÿµôívÑýYùnu ÇÍ?ÿùÏ›?ÿü“[î�ÕÚíÚe¢ahu@·˜”vÿáeÇÖEü½йíE�_ø5ê@ûÍÉÖ7Ê\˜û�2Bx&²ðLÀ&mA � NA@µ@+ÌN‰%†øÚ�Gºê_û5oÚÛkl­[ª?>Øz]�­<~´JÍW?øÚgo›“É5wSûšãkîêãø>ÿHßëzy*˜gÇÚ÷a¹Ïãñ™b§UìzÙ:óŽï)ã¤ø¯”˜iA`¯Ÿúl·ˆçV€ÏZø"ž«úmõšrq/…p+†É¥ãN‹—*úUï_±xpõãÇ�Ké¯ôÜ€³¿ÿþ›ÐZ<~°6/ …_òïmôƒn‰ÊUçñ×ø%Ýh.½ÙE¿m–¡`N_uÈŒA‡ÔÔŸåGÑL£¿”�·)&\Z“Ì3.TûëÂÿ�öª@ž! ÆmøÔÅ„–cúá>ª®çëBÀhÀ 5Î?:ó#Š}Tð�tø¶6a±eì G!�€£àŠsA � ^*ŠTäÚª¼ÆcW1ÕòAiÖÕœ#ÞqØk¾ö[m5ÏH_ãªoåGqÕ^yç[££ëkZuð–+­|�éÑUý¿ds?½ò–£�Gvs�_e> ûèk¿òçÄlžü>/;:Šê‘ ]Õ9k»¤“[{5@{P v \è�—,ð†‰¿þúëìÛ·oímÒiÀµ yrœÒˆ= ~¡\ä“Ä[WéÜXȋ߰� ó£ �D �0áA � ‚@x*ôÿAMÞ9ÝHoÿ:ü8ÜF¼s™:O­Aælö1u?¦#ýHgÿÇҹܞ·)ý˜7­}÷º^®ñ•·_O·øô1ÈO¥›ŠîvuÞy{]•ëx{_°öáâ=¼é4þz @ —ý']ŧòg!@©vEcôGç’+9Ú‰,Ý�ŠþÉ<�×öWï]´5¿j7oZãGº‘}äg´òsñÕ‡‚¼?°WX!Ó UîqlNå‡ã\°C�ž”\½ÏÉÚ®ü‹¿•#ħ5xlóG©\í$—¾½!€ÇhWÀè5�÷‰î óªÛuòð§êN€Ã/Ö.†\UïÜèlч=îò8þ��9k¾³öQ� d`Hq A � ‚ÀK @Íãÿÿ+? öÚzyΆ_Í=Ç×øž÷­¯r屯ɣÖ­Ñ>÷œÿ›‘Îñ½íyÉ·Ú*O¿U6oZíÖ-Qlߵد2|ÅιúùãSmðè8(ò‘é£ç¥;—ŽÂZìm+jå¯ÐvÕ¿Õ$–›²ü@o›nõпÿ¼R�€ŸÊÇ.Z-–çø�ç}±Î‡cTø~©yßOµÓr¥÷óœc†šw†ÈDy*Y8¹Ä�g@@¿ãŸ!kR� ‚À[G€¿ª‡†Ó¨;*�s•Í›övËôƒ‡yS|hýX컳Îÿì㎕ç3ß[úœ÷–{ŸŠ–>®Úm³îÙ¾ôÑãä|Øh[åêg~‰bc.ô=&Ó]ï÷ýãïÃÅ<>öïi�ÇæXôð�i¾-@ñu.�í«TW’ÙÖÏÓý¸"+zpâ£×"À�vÜüñÇ×zEàõ´Kõ�úã}�"çç,Ð�޾¡Ûmu¸·ÐŸL×þ1snû!ÃW½uôd=|m5¦êÏ\z8E6"�€�@Å-� ‚@¯ ÕûÊcCW²u¦ØÍÛ¥Öª´ò®ÃÐmm·åO‘×úë<þ-ÖñÕžþY¡ã“øÏ,ðxåb€þi^8ØÑÒµ7üöÛoÄ^s[€Š~®ôÆvœëu�{�m�ö‹¸îZ’©/òý%±Þc¨ú>#6ûõ¶†�æ8kE˜A 3ÀD‚@A �׌‘ëøÚz›uÐÊ;®×“»êìg½åž®Ùñï}¶È}?½ì9õú­òR|o{I¹ö=â­«Ô^à¡€7òqáÍÕøþj=¹Ûm²Ý}ýúõR…ÿO ÿïß¿_é�çÿÚp§[¸e`T8�tJ·/ÂéŸ/–w`[jäóqÄ×þæŠý9}ëWsÎN€¥O ¶Md`Lq A � ‚ÀëAÀ…UºÚ�­ë)~UOViåk^xûZßËÖ›V{å±+;çsQãÒçïõ/)×¾G¼u¦ý\�Á�ã¾Î>ôªvò,åêmU†w.÷ÛS�AníEŸtõÿ³ì·*Üq»�žbÜ¿"Pâþ™Ê}§bÿBWÿ?éªÿÅ]èª?±gZ¸Õ‚…|-¾+ßüºø×ËÄÁ/5|üEt?.êçô}>û÷ú&ƒs£ ÈÀ�â‚@A �·€€jƒÜӡïê t¦Žµ\“�tÇØñís¬É5ÿVžœ4ÏekÜȿ׽¤\û6¿F=wcR©Ðù@Çþ>o�goG®:ç#Î9;JQ˃üx@«üÅ_¨°¿TÿI¹jANÆØšò°pþåË^+È–ÿV@+îNc¿‘îF;úE€–ƒ4f:Š?y8ê€Ê;Ä9üåÉmLSÀï|ÐêSõ�g¾Lþ�!Š °�,l).A � ‚@x-èÿV y<ȵ!÷:ìÖU»u¶[†R_ŒhíË>Öõ²õ¦Õ^yìk²s¬QòÔæ9Uüœ~ͯ�{I¹öm~ŽöóB6Vã5½?Ûª�X䪫o¯C¶¯û”ª5Û,WºdãóÈ"@E+ü&²° ¦8� ‚@Aàu# Z`±øÅN«~ÖY¯ªªÙ{Ú§¶Y×ËèG:û÷öÞwM®yžƒ¯˜Ôü½þµÊWOë\À˜V±6O…¹ù5Z‹||i5;ùjsá�N}SÈ^HÇ"ƒû$Þ…r“qãPÞ;ÝïÏ3B½ß Ðl(TûsõÿZökåú$Å?E{Í'±µ‘ζJ|-üw“<,þ«¿óÚ~Dk܈wÜÈÎY"åY˜C&ú pü±K §"�óçTä÷+Ð?Ñ¿¢›ôqüÎ}.è}8�¿TýšŽXû8ÏG Ksîm¿RÞÚ—ýæhý\íÃyTùc?gâ}ô±Îë~‘9¼(0Ù¹ ýUÏiûN9¯DÛ–~îëÏÕÿý€É‡q4ýüqË.€ÿûßÜÀÂÁ�ÞÀ΂ (þz6À>ÌÌ€òËÏÅ¿©ÿá3„5•qâ·TüÛ>—'ú ðddàÉ L¢ ‚@A =e®ÖUÞºJ+o_t£û\s_?Kçvño›càÑI¦À§Øæ¹_tì‹éxU`ÛA0Ñ6ñívŲÀk)ú¯TüÿäM¼1àÏ?ÿ<Ó"À­(ºû»—}ùÍC]¸£_jäs!slµYulÕ…G#�€£!K@A � ^*r6ÉøÑ =o�‹/ûA)Ð(ÆF�8ns¼ãæìU�ïšì|ÏIÃRÙ{Ýc䥨­6ûõ”ymÑáÓûYg:‡çD=ìן+5?6dÎ5ó•ù¼½@<¯ ôIÉÛ=þ8¸/S©(°ï(öµƒà§.õ¶€¶[à¿ÿýïÏ ÐbñÍÏq“Ì‚ÍEº¯öÓψoÎ+?œ J#W¯k†b³ž�,< ŒI‚@A �׃µP=™åÊ[gê »™‡R”Ñ*_ýléjLÏãïXl#¹)7üpž5W÷³æWís1½þ1r��ãSµU¹êÍ÷´úW¿Þ·ÊæSet`oüÜgaSû"Ãd:§Ø§vùB_j­ø—Ž[.§­ÿ;‹†"'«RÝòz�sжüóÊ@Úo¿ýÖžÀó´€å˜ÍC½€OåëB€ˆí9î¿P»Ü–m3%~®·dŸ‹‹>ìÈÀŠ0A � ‚@x;¨À9(¸�}ô³¨zó¦øVÞ²s`[jØ)Új«º-<±Õo$×üK6Ï8Ïbu 9E>z±­Ð–ؾ ÍÆôìPã½�¼*ðF‹×Z¸Ò"[Ú[H Æ—Ë ¦$ç@¦y!À:dZÄŽÊä®>þ"£3_‡ì1¾ÃQ~l²ð±?ÿÌ>� ‚@xgPMÅP›™åžb´Žz©�1,_Øw5•µ‡”XÛ+o¯^wŠì\kÔãXóc �i£ø^wª\ãæxÆ^mU®zó¦Õ¯ò¶¯ÑQ ºQë? çÆÞ²}¡=/™‹«þÞö§âÝWúÏij€ºm@ºÛÉFÞÛ¯_¿òпk]ý¿Ö-¼U =C@~4Ç›¯¾/ü«ž/�kt’¡w³Ý¾¶¡ñŽ '#�€“¡Kà[D€?4iï�|¾ï÷³ÍÌ^�·þýÒ?ùÏ "øüÊ>ÜŸ)“ƒç¨üH¶_¥ù» ¥-|öáÄ0OÓÊ[çþmC®ü©2q[ãxê¶–sdïuKrµmá™_õ«rÕ�ø‘no¿ž.ùb[kä«9+ïóJ3Õ¹y.~ÿ~íCWð9_¹ªÿM¹ØÎÏ-íß$·„P=ðÖ»þçþçš®�EyX 'PÛ …±ûB¾¶~1À…¿OÀºPã*ï_LÄÀ›â3Çc;hšø8×�-BèÈ@�Hä ‚@A œ€€þß,}ø’­÷µ<Š©:óPÚˆ·®§¾²ïØÑ"5Eà�ÎÔ<ýÛ:oµ÷¶SäÖÁ?<&�çˆÐ×µø‘½×-ÉÕ¶…÷àÖ|×ìä±Ï­¾•'®ÆZQâhö7ïóÄ´9M?|®Zç¼è§ó–×Ò>éø¬Zþ«(‹.Š›]; - 6ùñ,€[í¸Ð"Ã5·Hߎ¿þúë|Zp×s”âß¿)¾»/æ\Ô½ÞÅÿ½æÈÍ'‹½ð³d`š‚@A � pú|_/Enõ娱=�?:ŽÊ[×SC¾ú�LÆa]K4åEO³ùªÎýŽt޳ÏÙ>ÐSã¨ýUþ”|kñsöª¯Ö± ó–«ü<€Ú¥j�/:X�{kr×»ue_äFÛþ¡¼&°]åWLÛÀ¶í ¸Ñ¢À…níàË]õ,P�×…€ÊË4Û\ðã`ÞÔ:¨ ~StÃÌvhŒòC#�€ýñ¿�Éë÷Ûû˜Hf‚@ïþFû?ø(¦×Õ¿}ä· =æ˜jžáUä£÷S)>ȦÇH×ûŒä9ú-ÍcÛâ‹�ǻտ÷;&¾únáçÆWcëx¬7íã«~Éf?Óê;ÒÙnôÞñ=­9°Õsª—e“ûy[�� )ø?KÿEÏ æáD•xÇ=ÿm€â_E>ü»Õw¡Õ¢¼&ðV;ntkÀ¥üÉÕÞ êF.ÿðÄZöB€ÿA…š;ÛœóPñ曢ü˜µ .¾aƒÀYr¼iô{íM�?ƒA �÷�«ü?xå×fnßJ‰q.ÇW;< ÚóÖ™RüëÊçÞ=¹G‡sb³ßˆâgóPZÕÏÉèÉ{JëóoÍqjÎL|õÝÂÓGõsŸ¦½­ÊæMO�©ñæMÉi¾Ò9¾úÏñÄÖ£úñ�šôœ4\ñ§oWûE¥n�bÿ³ úöÐ?]Ñ¿‘ÌUÿö¤ü'¾mñ—ÊUÿ›oß¾]ýùçŸ ûDN÷b[!n™™¯…?ãA_uWùüðd‘­ÑŤÂ$‹‹}Þgþ®gÌŒ´—C ø¿öé9�ežû÷“ ‡å ¬ŒéÔ8§s|�üÒQ¯úÛ�s976t>ÐÛgŽö>ä°Îü¹ñƒñÔüG„6×ÇÄ’à˜xûšŽâ«mdGW[õñUGÜ’\mæMûXëGt¤«ñ½Ý6ôõ°~DÑѦs”“�b¹}!'Òòéÿ&ûOQï%Û•èµ(;ît±ÿ\…ÿýµ õ;nô*@­\“� Þð6¨n�jß°{!ÀÊZü{1À¶JýËÃÿÄÎÉ5¦ç‰u\o‹ÈÀ‚@A � ðëPAÑŠ˜5Ú� šŠ•ƒ¢ }ÌþŽ'G`ó˜Ü‡©ãzZÇ„�FLmkrõÝÂ÷ù¶ÄT�¹êŽá·Æ÷~U®<}¯Éu|Õw ¿–ß9L{ÿ‘Þ:håkì½ã«¯yÏy$s~«x/.çía€èµÅÿ\E<;>‹ç5�ßt\ËÆÖÿ3]åç5�—¼@‹<ðœ\ò¹“ÿ¯ôŽÉ´k½�8¹9jÁß#¤ƒºø7•j߈Û}‰w9ÌãP¿4èí;¢ø;¶Æ¡gÙÐ�ÈÈ@΃ ‚@A ¼ú¿üAql݈ΠßµƒXûPôÐØùŒ®6d êzX‡Ÿ‹m¨õÎa[õëù-2>Ç´Úï1qöõø-K·Æ÷~U®<ý÷òœ®×÷qU®|Wåêw o_håkîÊ�|úØ*KsÜNÚýô9m�|h\Ùo ²_²Ÿ_EûWñ­øçjÿTì·ý‰¿�ŽW ¶4Äë;ÂkY@¸Vlk?~üØixX œÝ‡¨Põ‹û<“ÍSmsEÿv@ˆ«yš±�ñØ/ÊA7Þ*Yx«Ÿ\Æ‚@A ¼Iô�ø¾ˆf–MO™±K�‹ýž§?ê‚z óx¬G¦¹†èiµ-ñ½m$£;¦y,ÇÄT_Ï­êŽá·Æ÷~�•=Æcò,ùVÛ©já¿û"í¼+ïxÓZÄãWe|¬3u\µU]ø ÐÈ@N„ ‚@A ¼(>(fGtiˆÄŒEm®øG��í䩇ÇáüPë ´ÞÖ”E_}F¶‘Ý~[©Ç°Õ¿÷ó\zýVyk|ïw¬Ìxú˜‘®÷9F®¾æM�G•Í÷´ŽkÉf¿ê3âí7¢è|®ësªsã\…;Wõ)ôyM ¼öoø¬Â½ØÖø2µê{Ák¯É¯[Ø%ÐNzyµÅ™ðã¾_åǾûÒtßlG3Z ¨_àÝë>Îvlð¦Øh½<Ô1;�×¹Z`~|<²ðñ>óÌ8� ‚@xaôø¾pf(½\u#[?||F‡óØfYÅN+ú+u]àþ�9,kŸJ±W[ŠïšmdwŽ­ÔãÙêßûy½~«¼5¾÷ëeúëukò(f¤[ËSíæM×òÙÏ´ú[gZm•·½Òʯùú\圆gQ Ê1mág€û+ÿ⑯dçÒ?]Pº÷ÿæ÷ß¿ë¹�Ãßj'·ðÆ€vûÁ]s¡NbŽQá�Þ~Ÿ+Ы¯}¬#¶òÎ5ÒÙúAÈÀýà3í ‚@Aàe à 8q³lоçí;¢øö‡s ¯Å>ÅQ•](™ºß^¶J«ãïyûô~[d|Žiµïcâì[ÇjÝ1tKüœO¯_“ן-~syª~ŽïóÛÏ´Ú«®ê+oŸJ+¿Å×çTÅùþüÔù®Tm«?lWþ•�âŸ[¸·ß5Žr¿½Õk¹ø­Bÿú·ß~£Øw¥no¸ýòåË�tì °÷Uó|A¬ÛZÝàºû2MNâœ÷¿,vNÎQCFºjgÙp€ÈÇ|²¼™gÆA � ‚@xaô¿ø¾H©C©zxš‹›ÞÏ6üú›u桵øW­ƒªùчâÌC‘iðn櫽÷9Evþ­ÔãØêßûyn½~«¼¬½÷?V®ã>&¶únáégͯÚ�ñw\¥•w.tÖ£ë6îÝŸ¨Èy{€üZ±ÕÁb€N£»¶õ_Wõrs­"ÿZ»®´О ïJ{( ²žp­¶ÿ{€/F-ú]¸óÅñ�Ý »/ÔÎ&õ~›?|møùKgÞ¿Êo‘ñIûÀdàø™úÇC€?~iA � ðºàw³ Ø9¾Ž¸þ.Ÿ‹ÃÇ~•wáO>óPòpàk¾—=ô4ÛÍ7åôÃ>Ö­Éö[¢}Ž%ß_i3ÎK}®ùôöceúîcêxzÛ’\msü¨?ûšö>UßÛªl¿%ZmßþÁ©zrÒÐép1Îëü(Âu:µ™íu�Òý�ê§èOé W’¯äÏîô@þÇ+Û-²ÝðÀ?ÿü“]< Paç,´±È_lkû¾%Õâßÿ”Aí³‹¸ÿ¹û²íäêg½u÷á‚À YX(æ ‚@A <7*ZA½Ô>´]Ýòлó˜Ç ÞÅ>² ~®ü›'§çp?ÖK«ú�æ^·U®y³…ºï-¾¿Â¬¶´5¿ÞÞËôÑëzÙãØªïýª<ǯ�c.®ê·æp̈Žt}^ûXϹ®ƒ'ýï‹gtøéðCy àW‰¿)ŽÂŸmþwÚp®ÿâû÷ïÿý÷¹v´[ äÇŽv°ËànP;çÅÜé÷×ÿ£Ý ×�¸z‚Yv¾ZüWžø^vÎÐ p–€œA � ‚@xE¨¨ØÙæMë0ÑÕFqŒÎúžRìPô»!ƒ_xØs<±Õǹ¬Û*ÏùY¿Dû¾–|ŸÓf|·ô±æ;²÷º^¦ß‘nN?òíuU®ü(ç’½Ú*¿–§úö¼åµ®ÏoýtÎPäóJÀÉ­]ù—K[ ãÞí÷Y>_D¿É�â¿Ýûïý‰¶â_´íP¢ž@Bû<,�g´· Só€‹w¾´}ñøeVÜä'ò`û?:ü½€Lév–ü �,0Â� ‚@Aàµ!@�R‹^dZÕ!Û¯Rë¡´Zôï4÷:Ç‘wÄÛßýš¢¯üÙ¹F¾Õ6Ç÷ýÍù=—|Žikþ#ûctŒíÔø>î¹úV~ëxj̈Ggýíû²çþÔZ¡,=ÍO÷—ùBõþå'_upUÿnÚò¡«ùö“Ì÷èVüUïß^kGÀµxn¸àÊ?>lÿ'·l¼I€X_ý÷ ,3__üûdsÁ߯oç)Þ¶¢Æd`ŒK´A � ‚@ø¥¨`ØÒ•¯ƒéÑÑ(ŠÍ›¢¯<2�bÿþÀ×ŵmø[Wù‘;­ÚFrsüèã.{Õ1¾û '`Fx®¥]‹™³�ô#ý�ô[u£ø>ö¹úV¾âÔë—dÛFÔº~½žs^MêÝ•ïlßç‘ÿí5�*â/u°€­üíÊ¿¸eÀ ¿vå_1lõ¿Q¡ÏTû_ÝêàÊÿ™n “;ÙoµÀCy.ÀRá_FÅ¿‹ûÑBs²¾_@—ÈÀ‚@A � ð: €©EîHf¤ö©vx·Ê[gêr8O¥•wÌ’®÷™“­Ÿ£îcÎnýV?û?–.a¹”{-nÎþúQŽ‘Žñ�ô½î¹÷�ëc¤¯±æ×hŸÇþèiÓ—Ի+ÿœ?:X�éâ“Ú®óÖ}Ã"€·ýsõ^õýõõï¿ÿ~¥‚ÿ‡|¹€ÛZñ¯|m‡zºÕ1ºâïÂßTn­€‡z!ÀÔ:(­/ô{yäÓó#d ç@A � ^ ,µ¨µlêaörÕ›7ŗ昩èiý¸/Ûð³½×a£9Æ´êšCñ™“­_£µ�9ß->s±Çè�ã11ö]‹]²ÏÙ¶ê·úy¬ÐQL¯;Fî}�í«Ž‰\Î×Sçµ¾Êè|®ˆòοV¬ÃO ùŸU×ó¬€ ÕîÈÿW0ЧçŠ>÷ú_ñzÀoß¾ýÔó~èh¯ ÄGqw’oµ À=~M ‹ü%Ú¦9�y÷¥}¸ à)-]õ'¶ÚYȉ‚@A �W„@-TÖyiøÄ÷9j^ ¡©: ø ¯´ò¶U]sÖ�jÙí·…ö¹F1[|Fq[uà÷˜¶ÿû(¶×õr�˱¶ÞÿXÙ}÷qÖCG6ë֍󨝿«ºIß>X(ò¹`/êÿK¾€íþò7²]ë\»’ ?UäÿÐ"ÀwÝ À;}{·ÜÈ~­[.´p!»o [¾TôÛØÐÙ>¢ø¸µ±KØ}Iïcm C²0„%Ê ð2ô˜^féõ£"�óïmòÏ]½mt^~ôk߯­Ÿyì뜖çfi¿j¯yÐ[^¢øÑ—ó¹ßªë}F2ºcšû™‹éûŸó{¬Þó>5ÏZüSÛGùFº:Ÿ%{oëeòôº^v_sú%»cæè\ìäߊeÇâkªbŸ{ö]¤KuÎ[¸êË!wŠì:×~h±à‡|êÞÿŸPšô·’yØß™Š~n!h÷þ³ 8òÖbßý¸À·­Ê y°`”æÂ'åg؈@6· ‚@A ¼$*DŠÆèÓœw‰’¿ÚæMÝÿšl¿-”\´¹ù­Ù·ôqªÏܘ¶æ[‹?ÕÞÇõòh|k>#ûÝȇþçôul#ëLk®ªsž^gÙ´Æë\’ú¾©€wQîb�ŸTü‘ï7?äý»Žk\í?Wñ©§þŸkGÀ·ÈçFϸb€b9j�ïü=mÃê|‡m®è'�ý*%†fûNР5¾¹\Í'?Þ/Yx¿Ÿmf‚@A ¼sôü~Q€©"¯µ>fäoS|F<:šk ËÖU¹9nø1ÊUÃÖìÕ÷Wð§Ì±Žk-þ{Ó˵ÿ¿äßÛz™|#Ý’¾Ã(¾ê¶ðιæk;TOýç¤váÏ€¶@ºÏ:¾Hþª‚ßD¯EÛXP±!zöçŸÃmWÿùÏ>q €âœÓÅ9òè¨öÊË}±Íóô1g[LãûE ï÷³ÍÌ‚@A �wˆ€Š‹ýÕxŠad·^¶~+unüÍ;Í=Ç»Ÿj·n�Cs½ÿšûô±O%Ï�mkþµøÇØûØ^^ãšÿȾUGß#ß¹1�|«nŽw¾jïuÕfªƒ›ÿÛ«µ@˜Ä‹3]õg{·|ÒÑDÛ•ùÝá««üç_¾|�¶â_Ïàõ€Ü&ð½ÛPwT¾.ÔÂßü–"~­Ø?°kÙà“ãƒÑ,|°<Ó A � Þ'ú¾Mì˜â›˜¾h®º%žÎú¾œËc±OØÊ�S]G9Gvts9ªÿSñ�ík-þT{×ËÇÌ)vdéèoN?7–9ÿª¯üRÕoÄ[7û,ìÏk�{\ý÷Àgñ,|“O»òOñ¯ãœíhÅ¿b®tõÿ‡äÏÚðIvVørºà7E7w¸ðÇn^ì¾--8fï&T²PÑ‚@A �7€E …ñˆ2|Û¶NÅyì_exZÍ O«¶*7£~Ôë¶Ò¾�>nÍnûY>…zž§Ä³ÿÔöµ|KóX‹�³«?e }½¼„µ}M«¯u*ìy% ¿Wí ¹tì à­Ÿt°ðU5ý-¾:ÚÛXP»Ñ¹v­«ÿ<ð»žðY»X àŸ+ô­oÃéü\ø� úÝ—’¨û‚~Q`.nïÇ 5æ½¼K—Ÿï�,¼÷O8ó A � Þ ú½ÕLÈüˆbçÿzl[›óØß±®ª\yü-;¶�±~ ]‹]³Ó‡}àû±¡{L{l¾µøÇØûØ^ͬÖü–ì§ÚFc±îØœsþ½¾Êæ Û®öS·âÙ”:_‹íñwõu�âY öJ>?uèâÿ÷¯Ú ú¿à«þ¦äï�ZðÛæâÙÍ:ËØ¬«üÈn]èF øÃÏÔƒ@A �·‡€ �}�k~D×fæ˜ê7§ÃÇE5>–Í[ný¨zëÖhŸ¿÷ßj'î”þûþ¶È�íg-þ{SecXçVí[ôö™‹Ûj·ßˆ.å~¬­Æ›7ÕXÄî¿_íD—Ì \ý„mÁD5ÿnQ@ ŸY ø×UÿWWWië?MÏÿû\wÔâ¿ò@@_.ÞÍWŠO-ò« ß7çêõÈ6Í)»F(½c]Þñ‡›©==úùôI“ñÍ �ÏÿÍ|Tr ïýü.¯éƒ^Ãÿ±ã'ÍQeó#z FÎÓÇöú‘\cêx«~Ž'_m}ü±vrõ9jþSù~ÇæY‹_³ÓßœO¯Ÿ“×péãú9®Ù—ÆØçš“Ÿ¢�>G•+¯1œ|Õ&¾="¿OÂîNW÷ϼ @úK©ntµÿ«îýÿ•mûoÅ¿xn ®üôµtÔBß~è<Æj—ú`aÀ6ô4bz]3äÇÇE ÷³Ï̃@A �WŠ€ŠŠÅk¯«²ùJ™…Þ]…Á1Uw ï~O‰%†xã5Ûmùõ>ö} ºe,�õÅ�tKóßêÿÔ~Kc¶¥¿%Ÿj›ãëªÏ¤—ª]-§˜ç™·¢œœ¼ €ÛÚÿØà¢_î:/ñw!ݺPOüZÈï¾»¾•n¸0PcíÓëЧ}@²ð?ôL9� ‚@xý¨xxPüöº*›7e†æ+=u棅ç�˹fŸ‹«zrÐFþÈϺ5û=–z|¿"ÏZ_#ûH77Öc|Éq¬ÿ\¿§äÚÒ÷ȧê*ï±Íè8 ej»(à)ìÛ»‰£øç 剀mw1-V6èÖâ¿ÆÀS¼Ci.ä­ßiw?«®òÕ~ÉÖûF~gdà�} ™NA � ð~Pñ ðíuU6¥¹h7=™¥x÷9—{Í>×ë='ëÓRëý—|G¶¹ü�Í;êkKÎ->äù�tý8¶øô1sý�üŽÕ�2ž¥˜Þ¶&Æ«�vEŸ×òÔ¿ƒ*~Ú´ ¢÷ î  |!O-þ‰Ý}¡. ÷aŽ—KZ¸G ÷X„ A � ‚À«C@…–µÓ@IDATFS-HÑU¹ºÚÌ×½®ÆžÊ;ç\¼ûŸ³£Ÿ›Ï\Ì\Îcó›ÎÿTýÜ<œoÍn?Ó-þ»ÚÔOC·ôû=ÓÏÈ·×õr?FÛu^‰m;xhoh[„%Ïà íѶ <,<¶ø÷p\Ü›¢7¿û1^p|õ¯ºð�,|À=SA � Þ*&Šä*ÃÓ\üVyÄÏÍžxûÛg¤³­RâÜÕoåGýn�­~}žjÛÂ?f[ò3¾c|Ý÷–˜->Îw*ý}ôc[êsd霳Úà'™/E=Ûþ9ßÛ+Yð"€(;ÚmâY æØƒ.hŽó-¦ØÌ{€ý«<§CŸöAÈÀýà3í ‚@Aàí!@R Ô-2³$f*`fù§@£Ïcrz¼s9*s>§èû~û~zû)}l‰9µŸ-q[|¶Œñ9}žbŒs9æôÌgdÓ9 õ½æÖM .ú§;v·h§€w¸˜_£m ¥;ú‚»uÄÐRüïpÈϲ°NLA � ‚@xmP€Ô¢t${Ìö›Š«7Sâ��ídz¹³#�×–ôÆ«ú>G?5ÿˆlŸkñköјނnm^Kö 6 n¾{lío+yà ªú÷·ÈÎ.€z @_ÌÏÉtÑÛÐÑÐׂß|_ô7çâoêUþƒ!�€ö�¿§é.ý¢ž›ç)1s¹¢zòù<=¦ÉÞ ¯ý÷èp¬Ø3þ%Ÿµùõ±}¾^vß5¯sX‡lÿ5Ù9×hŸgÍÿ5Ùçp|‰1ÖÏæÔþ×r¬ÙOí÷5Å­ÍñH»Ü©¡wMç:2 \åo¿ØVÀ7Ãt‹€lM·BIZý�iÖ­ü;ï�?üÜÂ@õ[ó±oè;B ïèÃüHS©¿|?Ò¼3× ‚@x»ð·‹âø”6Šíuõo㨟‘õs¼u–¯u[Æ^ã¶ø¿Ïñ­Ž˸·ø¼–Ïã1ãØ:Ï5¿‘�Ï•ÑekÏ0•� ø%J*Û�v$×Eì½Lìè—Œ}�û€jNŒywàá} �€÷ñ9~¨YŒ~(2Ù ‚@x³øoØ)ÿkÛÇÍå[Ò×#¿%Ý)À×þN‰ÿU1ž÷Sõw켟ºÿSò�ó¼ŽÅh©¯cƾÅwä3ÒÕ1i>Ú­Áû�ÂÅü%Ö>-O‘ûb¿ìÄTÙ±#:ôÕܲ0Bëê²ð?Ô÷<¥µ_¼ïyî™[A ¼ü÷ìØˆ¸QÌ\¾‘ÿœtknç<õšƒØSóÛïKû?õ¼Ÿ·çÌ}Ìçð«Ç±µ¿‘ºþ3®s•�ŸVø›uA?¢¸ÑZl¡U?׈ÛZø�r<6~”3ºWŽ@^ù”ámG`íóöLñ A � ðkè �¥Ã#rÌÈwdÛª#¿}ÝרÛæhŸcÎï­è·bðZæýãxŠKŸïVL—rl±�2�QÌH·Ô¿æ·¿ú/ßÑA ëÍ›¢7?±Íwi€ýzJ®×Û÷²æ™]{4Þ/“€÷ûÙ~¨™û‹ùC�“É� ‚À›AÀ϶Höer½?¶­:ƒÓû£¯}Øï½Ó‡÷ŒÁKÍí¥ú];w;.�;.ÜÛN€©?ù•bª²ãLm7E?WÄÛ†/­æ@íècðKû dàƒ|Ðïyš�ýeýž±ÉÜ‚@Aàm"à¿m}1:7›‘?º>~ä眶Y>•ö}žšç¥âž �ÿT<žzÏ1ô©Çp*ÇŒùTß§š«æxp ²ÆT†ØËÖ™b7?±-ÆÅ<öº `|íã¸5ê\ÍO8dÀboÜž€7þ~ôá?Õ/ë�Žcæ‚@¯þÎS4õþ½ìYÖ¿ŸÇäwü­¹—ü޻͸¾%<ž{¬}~côÒçB?®§�ææ… 칃®l3¥¡§ÙîÂÙ|s8âÇcb�è&®¯�,¼æO'c;�çø~ô Þq@ð}Çn¦‚À£xìïÇ¥BhKî�/3¹ª«“Ý’¿ú‡#Ðãû^p}ªyôø€âSå"¿N«¹µbŽ2Õé`P#Þ:SüF »‹ÿÊ�|£ C.†Ú(ƒ@A � Þ }!ÕËL��73±74Pc;Âþ Mã`¨O9—§Ìu0È×/¸¨¯”Q[ö �iUo�õÍaòñÖ…�Y²`š‚@A � ðv à]ueFµ›óy»3ù‘¿u|ëøŸMç}ïçœwðU›ðѪ«¼!¯:øÑ•ëíK¬ýœj¿5]µ‡§dà�~°™VA � ð± ¸ê «‘®GÅEY¯ß"÷ým‰ùh>o ßÇŒõ˜ÏÕý¼Çó‡âßXL¼eh=p³­òö©:x6ø•oÆéG͉ÊþÕ'üF øÃÏÔƒ@A �÷……U_T¹Øb¦½í±³¯¹›ë=Äßã>ÅcÏŸ§Æ÷¸Ñ®{k|ûâÛüDÑÛ6¢½ŽÎz²‹ùÊã»Ôzß^^Š�í"�€wø¡fJA � ‚ÀÇE`´`4Ž-¸}íÅWëKñÁ÷y‘7¾¯ý\ìŠ@¡è¦A—ŽêcÞt®øOABi›ÈC7CÇ ‚@A ¼ \(=åhÉéã)ó&×cûŸÝ{ÃØX½ÆyÍÿµègØÈ4Só½ÜœÊ�jwL¥ÅõÛÇ>pˆâc �ãsÎ,ƒ@A �†€ Éç¸ZêÜ@úù?ØGõ`ºÁ÷$C8½–óÏ…?55/µ ðµŽpø^¶Þ»ædôÕ9- �€8"�·�@ý‡ámÏ$£A |,ûû[EÆ,`�ÍíÄs}ïÖâßþ^€Ö/y/;tÉVýÂPr Àýà3í ‚@A ƒ@ ýcÐ:Þ7ø.cöð¡è̺%j›Ã{Ùzè’­ú…C²0„%Ê ‚@A �а·Pˆõã~+rð]þ¤Þ>Ý•OÈEûµÔ>ÖU¹ò¶‡�£ÈÀQpÅ9� ‚@Aà-boùS ¾ËŸÞ[ÀgÚ @Áî¢} µ�¨råm G#�g Y‚@A � @€Bì)›Š¦§L÷æs‹ïGÃïWásl?ƒÏ_”5ZCí‹>_ŽŠNø“È€“¡K`A � ‚ÀS"@¡õÅÖSéMå ~ËׯÄÇ·L;˜ úžöƒÆnŸÞ9<�,<Â$A � ‚@xJ~e¡ö”ã~-¹‚ßò'ñœø¸ðïFà‚¾§¸¹à7íB³Ðùqdàqø%:� ‚@Aà™ PK;�à·ŒÝSãS®ö׎}÷몿ylKvû…�£È3Ž‚+ÎAàq<õšÇ�&ѯ �œ¯íÉx*úÇ¶Š³üÞOþûˆÊ;rc>»? ¥0Üÿ‡\tø7}§{�ç‰/ýý}éþ ãþ¼$zësLéÉUÁoÒçÆ‡sôââ¢Ý¾õ!ýùåå%ƒó¯)Óªë�Oõ³¯õ#ºÿuÛ'‹z²Ð#9� ‚@8�©ÀçŸì»ÛÛ³Fá»cŸTúÅ6²O…ü¾”lþ€¢'y¥Sì\ŸŽŸ³G‚@èÐï7~Õì™MòÞ­—÷†Ó~MM:óPó�ûÑ"yöc;::ï�,¼ë�7“ A � ðLPÜ—Ôû·ÿ: xõ¦%V+Ušå[¡>þ=?’ÑYÏ‚@mM?)û¨UŸ‘=º ‚À�™âÿð—Ð.Ð:ÓQºè‚À“"�€'…3É‚@A |T0ïK执ˆ¦ø¿¹¹9»å¨¼ä}‘ÝÛ�¼Ïkmwá?m³=7Eo~¢ÞŠÛÐ)Wýïý~<îŸn‘À>½¾„„ A ðûdÿ+¦ò@3É{»T•zAà—#�€_y: A � ð† Ð÷ðÍC}å_Å>‹7××{k.èK³¦.¼-7:-´âž¢~:öždÛˆ·¾=íX6·Qñï¿ökqÖW�ó…� æÐدråçR ßê·”#¶ °G {(Â� ‚@k ‹Q${€âÿšèÕU㇠‹û~~Z¸Ðô(ü]è#ïyéï°Iׯ2-´¸¾Ÿ2É~AÀEþ¨èGg{I6�€€¾ÿâþÕ´ç'}C`ŽÀS‹úÊãŠ\�Aøþ›�#�m¡�,|à?SA � p*„Ûš•Šo÷þ—WÿÓÁm­ÉoßÄójkÎ5'O ü­ð§øWN=b{'OúKåÁîÖ ünkÿ�m� û¾È_“�+4� °‚Àþ×]ñ³꣘Ã�§G O�i2� ‚@xŸLÅò¨ø§Pö}ÿÞ@ñõóg;ÚÀ8ç…oWø'Äœq¿T ßvåßÅ~¥ºµàB¯Úb böqü7};Ý: ­íê}ó‘¾- LcXâÛ8è¿,"ô‹ø¤� Œ€~G¸°GÕöÕæ�§ äÝÿÚ|Š„Éñ>ÈÀûü\3«gB þøL]$í3"�ÏïÁMê7�€ ãýDTôÖÿ$±³�¿âý”ËýW?~ì þž÷€ZøWÞ‹û>»þU�·+û—Ÿ>Ýï(ü�xËÁBÁijs€üè�»I·Ÿ»|ŒIÏãWmU†5r¤Í#ðX|üyÌ÷ð¾-Áoùó]Ãç)ÎåØò%¯>•_žÀý"1£cÿ«s-QìA 9‚@A �SÑÝþîø¶½_Eþ-÷ökë=´ò7lõ×Õþk-Œ¨wø?ÞZüW~ÿ_lY@Ç?ðó7õ:ÎÅ·[DÛm¢—Ÿ?Ÿµ¨üE&Æ·° ãÉÏÁÜ+]:5ìgä´ ‚@A`Ë/…->%eØ ð8²ð8ü‚@AàÝ @¡í+úÂûCWþÛ“ý)ðUè߈r˜oT…ÓO”…€*ßiÁ€ÖþÓ¥ÈnÒt)K2m_üÃO:ë)Ø)ôÛQŠ~Ëû_¾ì ~¨Ž (2vX@жC€ÎNlY 8¸„��‰€~ÌÙgÖ/Š@^þt‚@Aàõ à‚ÿ–â_E¿·ù#û ÿÕ÷ïg×:ØâoŠîFò-‹æ‹|Çû”‡ÿzýŸoãK¡_‘èÚ=üÓ•Šþ3ñ.þ¹ïŸbÿâë׳Kü�7E'û'&Ê-Ÿ¦¾Y\à6út!?ºšoã\â±;|Z}÷ý+®Ÿôœ¾÷‹ž�,<+¼I‚@Aà� @1¬ƒÂÕÅÛöÏv-´ú© ÿù÷ßí¸úë¯/z%ݵŽ;ÿ,ÜMÇž—ž­à¦ô·ç Lm'ãQÛï P‘N¡ÏÖŠx/4ÊU~ ýoßZñÝËêþ³|>éàv„Ï’UÅŸ±°ÐÞ ÞE½‹ÿ-E¼c«ùcâ‰K Aàu#àïö3Œ’_�4Ó�”ŸAàÈÀ3‚›ÔA � Þ ÚíPáÝ v¨Pn÷ûs OôŸ~üùçÙ�ÿþ÷ ús¢,œM…ÿˆ*Ñ®Ø/E¿‹ÿúŸï¾à-¨ð¿› ÿºà€VüÿöÛn`¢—÷…ŽKžY0-fPط⟢_ ÜÐv06À¢ðM±òÃB¥+!1� ð†ðw{ë�õ;¤þj«aÇêklø ðh²ðh“ � ‚Àû@€¢·µøŸ®U@·m÷§ðÿ®ÂÿûÿûgßÿóŸF¯µà\ ÿ¦•?ìà¿àzì‹àd,Ö;v°0]ý‡6ÊήþÿþûÙ…ÆwAñ¯«þíP¿:>MÅ»­�~¹ò?ÿ, o-þç ë+-S‚ÀGÀßí#§á_s[Âæ¶ÄÆ'lB ›`ŠSA �€E7Å¿¨w´‡ÿ©€®·|W±ÿ· ÿ¿µð÷ÿù?gÿßÿ{v­EŠoŠŽ‹‰6™¢œ"[ÖC%ý^îÑe!¢6\ôPÿm!€úa€âºòO¿Ÿ4/çlÅ¿âÚÃ57æz1õ‡ÿäoi.L‰1ïÇäÛÒg|‚@xYü‚QÌý¢™Ó?A—I´–‚À[EÀÿ\3þSbŽÉße‚ÿ2>±�çDÀÅï\Ø)„[Á¯â¹=ôO”+ÿÿm»?÷ý«Ð¿ÒÕÿvhz-z-Ú ï©ðç9, k·¨wó·µÄéðßû¨(ßþSÑ;Ѷ q¶]ú:¸ªAa¯ã\<!l²æÉÂC;”“],п£�¡m‘`¢M¿µáo¼ái–á­ƒO{žÓúù=͈_W–Çâ÷Öñyìü_×§™Ñ�e²°ŒO¬¯�ú˹ò¯hˆJAàm" ¢¸Í*¢ÛëýT´³Ý¿?UüÿЕþŸºêO±«…€3¶ýëÞ®¼_zË=WÞ•§]ñŸ p®®×«ý”ÄõÀV۾蟔–ÉÓ¶ð³€Ü*®)ô›�Â]cho€'–yÉ®UŒöB|Yà¸ö€ìÍG”‡ò0Àý¡ðíµ�âyXàRãïR-‚z™Xÿí²Ÿå¥¼±� ‚@xJ²ð”h&׳!PÿIªü³u˜ÄA �÷ŽÅq™ã~€«þ*èý´ÿŸæ¹ò¯âÿŠ«ý:X¸+ m«?ÅY¨WÜkÁo¾. ”¡4¶Ž 2…ó~`Ò‘=·°@¡ÞŠ®üëhÅ¿ÆtËÁ€t,4›âÚ€r°0ÀÃì4÷¾E`§xÜOÿcÜæ—1ÑA � ¶!�€m8Åë• �”^É‘a� ð¶ `ö &žb”ùš«ÿ*úyµÛý¿ëø¡B¿mõgëÿ´ÝÿF¼.åß¶üså:Øv_j±ï€J=œJ÷c”¾'yUÚèîTàS¨·Fá¯þÛ�^sÂNñOáߊÿ�gËq£8žðéóçýÁ‚�¿;Üp':*ر£·¯ù^¶Ÿiµ£K A � ð+ÈÀ¯@9}< þñÚÒê?U[üã‚@ø�L›»y¨ Þïímÿo[þUäóº?øÇWýo8&Þ ÜÀ}þ~àÞU^®ž×bÄÏ}ûEåàá„Ømû¿°µ…õáÂÛv_ù¿SQ¦ãV‹íŒ…Ä‹òdX¸Õmí–éiü]ñ¡OÙRô?%šÉ‚@[ÈÀV¤â÷ªÈ?R¯úãÉà‚@xEÔ‚ºñS1Lq|Ë€®”{@{ݯúÓñS‹ÜóOÑïÃϸTñß(ö}lØ,u1`?¶/ëÛöïꇞþØþ_î4^ Øhª€ ûé`á€ãREþµŽOÒ·â_ùhm\ÊÛ8õÕ +?úÅè*›÷ß,ÆßëVÒÇ‚@AàQdàQð%ø¹ð?IKýlñYŠ�-� ðáPáY‹Šâö €é€ëiÀO]éÿ®ÂŸWý±€þ�é¨þ\;Ú½ÿ*”)ÒÛQy ]�’ (�׌ÀTĶRVüžÂëh·t;~èêÿßzú?÷þs¯?Ûý÷Ûþ-«ðn…¿æÏfyó—ÊÛßÿDýb:·Q©�Ž1šRÀ7^zÊvîÑo j›y¨¶÷SäãËߎý¡âŸíýŸ¦˜¦—Ì•ÿKn`@ ssÐ36·-2¾Ž™Ëë|¡A � ž �,<’Éó*È?Q�û‚ßãðKtxí¸xn…´ ÚF)ªu¸øç7*ì¯ueÿFǵ¶ü_O÷ýó0=¶úóÄÓs-ðà¿KÊ­ðst*ÑŠ0³~ ?û¦mË¿�‰Gvƒc ¶aoÅö—/g<€ã\Ç™ŠüvL;Úí*þyõß'®þË\Ú"€tüެ‡ûƒ¢o}LÊ5Ù1“û>–¸Q›Ó�|OÑÕ±ŸÿÞc‹ÿ{Ç7ø¼÷o@æ÷žÈÀ{ú43— ‚@ P„´­þÿÓUm®lóíßÅÿ­ø;ûmÛ¼øv•_òÇTð·ý)®Ýó¯¼sEÕ34Ê[U†Ÿk.ä¡\Åw�o�c« OÛ똫*Î40î´ À- ªøÛmÜVp£€[É7,ÈÞ-°K òa÷�y ?¬¾z#¹�§,V´ê‡ (Ç[¶=4� ‚ÀS �€§@19‚@A ¼v(þu´íìÞÖ.ÚîqWa|¥âÞ‹<1ßÅ?Wû}´â¿_ØXü»è7.óйFñn;ü¨ø¯…> £Öv hž¼°½2Ps<Óí ía�SqÃB€¯üSükî,\kÎçì`ÁC¾� ‚ÀS!�€§B2y‚@A ¼rXØ/LÅ? û[Tèsuœ£ßЮøSðs°0ÿ—šw_ô»à§@¶ x�ûÃz(�ŸÚæ ôug@�9à)Ü5Þ;ŠyÍ—­ûª¼w Òsÿ?Å»òϾ}Û-ˆÈ÷FÇ…lô%÷iÛ¢Åÿ„ë¨�÷Õ}‚°Óª®)ôñÕǼ}Bƒ@A <�,<ÁÄ� ‚@x Ôâ_Å{Ýp¥—ûÿ¯gv´]²¹à§à5ß®þ# ƒþ Üµ®/ú-]å)¯‘û†~tÔâÿ¾4ßEW¹-~¨Ðg@{ Å?˜PükQ€ÅŠ®üßp�¶#l¦¼Ò°½5€¢ßÇt[€‹zò/£waoõ1o¿Ð ‚@§"�€S‘K\A �7†€ ÞVü³à]*îý ¶ÿï8íà-è¶ú»è7.ö¡ñ½ìBßøÌC)Ø¡£†­?jño¾�­ùZ±¯yï jvH¾U‘Ï@+þuåÿö·ßîXN<÷€Fl³h{ 9Nx sAëBÀ~l“¾Êø¦� ‚@x Yx z‰ ¿�ü#ø‹gÝåüygh7�ZDv¦&¶â™«ÝÓAQëƒ+ÿíY»*†)ˆÙ*Ï•r~çûþ)|]Ô/ñ½Í2té`Œ£f=E¾\ð[îãл/Æ ><ſ혊x)ÛmíÍ<P‹¼þ°Ý1á`Œ¸å�E¾Gí˜pl‹ÊÓã�OÕùûWu³mÈÕ>§w\¥Õ·ê·ò��¯ãÞÚçGò ¾ËŸö>9¿–ñ‹5ƒ@ŽA+¾A � Þ*S‘ÊUðvÕ»îP±ë‡²þV6|Ú?ÝÎÊj.¨ç蟺;€<–áÝv½í$óP| ÿðP²�^¶¾Qͅ۸矢cocÁƒ"Ÿy‹çhXˆz¾íYŠ£ð÷b ;#h}‘Bþ‘®9O?þ?{g¢ÝÆŽ,[Y²OwßûÿúnO’übP²T4Z$kA™HÌÁ"U‘@¡åײ­7�@#Ð4/E /E°ë7�@#Ð4'€€)ªˆj^ɯç°òïÕn0Q$™CóÄ`M’™b%ë“8Ë~¬Ný]‘664úAÊ´e á7'sì¦è�$sIÔܶò5gv;ðŠÀé�­:ì0ñ¿±¿GŽ­ÿ�xâ>¿$úcè®})kÚîÐ4�@#м�v¼Á®ß4�@#Мƒ¤òÊ;È¿cuòïl{—-;p¼dõX*É®ä?oˆ¤ÜÒPÓèK [úXö»%=qIþ±â�`uõ_öÈVÿCþCÖלׂÀ§ýÇö’±¸mÚ?€ý¡ü—Œ¡ë6�@#М?½àü?ãža#Ð4�@#°Ž@Èfäz©W³V¢\õ},Ë-Óûê>;:a9މñèü9D¡¶A}ÒUަ[4�@#Ð4OB O‚« 7�@#Ð4§ƒ@%‘[£ÄÕd– Ò!³Íä'o«òë%B°ÝÍJ³Kb½Räù^+ó}šðY1Ï:&�¬°ÌÖÈ~òŽÇ®úK;m.mÇ´ße�Fàyð}{Êwùy½t­FàíhÀÛcÜ=œ}³õg?ÌÆÿÏâß½ŸþéFùéúúAJ¿ªQùÊÜDMÝdw� :)—Õÿ¤wÉ{U¼Sä™DÊjÙ¤)—¸–_mi‡º É_¦3G‚äï�‡qÀÁ@r×oPí¯„]å7®ÿMýµº—Lú×ðXGpÝ\×sÏßzéø½tþç…ô / �v\Ò§Ýsm�F ¸h¸ v„èÞÜ\]+Þ|þ|uóåËÕ½â•ôß²A„!¿�ãI�…\Hô> À5¿¦Cà!üq�Oˆ d:m�‡GA•±§ì1òž9Ñf‘¶�ó–dîàc‰äµÒ`å4yªkǃ#ŒK’Ò¹´o*íÿ{Éd?2�Û|ønç{þqFÕ#iö#Ѐýøtn#Ð4�@#pR¬ÝŒÚ6H+$Ö„VòF¤Ö&ÿ²!ï•†èÆ p Á¬Zn™†ÀCþq$P>tB•i�:Ä8�É;J޹@ø·ØÇ¼‘v 'Àù¸,‰}žæU»†¼q  Ô«í(ÞÙ�@#Ð4�ÀAÚp¢.Ð4�@#М�leVÿ¯YýÏVÿqE~!¼ÙrMýºR{• µ–ñѧ!e±£'D�¤~Èdiã(9œÌÍŽ€Ìs8&ù—Ý»d_ÛP‰¹û]�õ}äý)�´|ª¬c©öÖ�Fàuà»ö”ïïëöÞ­5¯ƒ@;^Çn¥h�F øP,oR=8ݼ²¢B˶vœŸ!ý< fÀÜ0fÑ…tïsP´ñšŽ�ri«:°'DÙ�Œ }¥|dÊU9ÜćøKz·Ã˜·íÌ`'x€›w€#�v6šÿóòeºÝR)—:[#q(­NÛ�F h�5Ú°†JÛ�F h�3D’i;Èl='À]!ŃàB¢CÐ!¼¤CÜCÀ#�-:’PÓÔ­éè.8þ¤ÉèÈJ棧þ1röͼˆšg"ÎŽ¹ý_:Ž�8ì(‘m’pTœaqÀ’°/Ó³^QŽ)SŠ·Ú4�@#Ð< �v< ¶®Ô4�@#МËqÍ€<ÿ�ôHźêíUnȲ©¤2]Ó!àô=='^ëaƒJ‡N§í’^¶‘¶"“¿S2ÅlûgÕß‘•ÿAøsÀ|  8â ˆ\ëËJþ’Ð/ÓžÜâÏ1eU:Ù4�@#Ð< �v< ®.Ü4�@#М("¬u„¶î€øû Ùs@%ÿ̲]ÉûÙ¦\µ']‰>ùþj#�}-ÄŽ<šð«,å·âp,Wÿ™/¤¾@º‰>Rqk;–u¬!ï‘äU=iäÖî %,딬V�Fà À÷—ïi‡FàThÀ©~r=î½7P»àÙwÓµ«NÛ�G ñ=«.Ù¼�}7 ÉÛ’lSO§º�…Ü;Ž­íuÕ;Ûâ!ƬŠûyH¯êóì=ò“Ú �Ç)€Nˆƒ`™Þän¹ëË€$$=Ç·1oýÝ"òÊY¦é¯ÆäW›Oþ×|=¿17œ>ó௿®®ˆ: á“l¼1äß«ÿ8*ù�`¸5ÒmâÏg°üm\³Õ&åײ­‡Àò38®Öñ¥ò];¾Æi•<„ß¹Ïÿ´>­m#°�vìǧs?õŸOÕ?Ð{(�@#ÐüQ¸ ‰¶®4ýž¼!­Ër|'" 9FZѽá�qì -ˆÿ�┲‘®�Ž€Bò±E�¤<:a»¥�-vòvÅÌ¥ÊhÛ˜#N ïvേ}IÈþÕ¿ÿ}uõ¯]}’€x-;$Æ àÇ&„ËÖA€j3ã~ik�@#Ð4�ÀÇE ÷³¹ø‘í"ù»ìXÐ4�ˆŒ‡ü›,C·m¥Ñ‘eH2ä?'€H0² é'^ÝßOý]݆Óç’ü3¬Z&zdò‘ÚXlûb� z%ÿS×¼¼«�ù@ü‰YùÿÏ®>É ð©8> '@Èžÿçÿ�#ƒ”Þ¡h�F 8Úp*ŸT�Ó4ùï ¡h�Ý<"È"ëqlíPKÂ\wذ²À~Hï'ˆ?§ŽµIÿk䟇ì§\MÇF¹ÚªáÑÜ”Ymu>“ð«Lôìlðöÿáø-òÿ[„ß+ÿcÀÜò¯²9ÀŽ€�ÿ!ë[o�F h>:íøèŸP�ÏCü)Ã�n‡F h.ÿþñXbÈÿout¯úKZHs¥Ÿ8VÉsBþ­0ÑÏÄÂa7áV[kÿFKßEþù<*á_¦É[ Ë_tú¬¤¿êq„ðϹ©Î´1Çú«ÿ8 ÿ¬þ×rx€ÊÛ€6ì°T[v„ ;4�@#Ð4'‚@;NäƒêaîGàÁþ:·h�ó@À¤x�üé =œ“üËÒ™3ÖvØpwg²?ɼÚ`WõÑàYgÀ\ÓûêV':}Uâ=sˆ é�´ƒcù@vàÐ#sõ_öy@Ù`ò?üßéÿ=ãÃlÑ4�@#p2´àd>ªè.úl2mo�KCÀd²¯‰Oò/⟕KåM‰®Iöy‘Ú½g@zooçóÿ<pMÕßGâ•ý¬Ô#x^C¢ÓŸçXdˆÿ.iG€Æ:ß bÏ#{wò¿u8Õ¢Ô�@#Ð4�À‡G þ#êî#øûò¹F h.�Aþy `Ë @ºÄ�$Y+ä¬þÛ °r[üsà5Ž‘`ˆõ1$8e"_tä¡°Fø«­Î)«þ[Rce^~­!ä_[üí«ÿlÿßzg䀱ýéà€M ó�F h�€@;>À‡ÐCx=Ú!°ËÆg?>�û2úúz~ôCÁ$žB!óU—�ùï#«þK+÷?~þ¼úñë×FFÇ®øSÛû)Þªþ/µõKmߊàÞâ¾Â! »Wý‡£€ÏÜ;$É«„|©W²_u¦�4:a ‰e{¤!ý±{‹¿ÒÙÉ�ÿÈ{¶ûgËÿxîÿZ¤ÿ·"äýZö¶ÿ9@sök5_æêk©~ þÇ\ókeÖl4™p(?åª|N�Zÿ�~Ìõy¨�sÎ)þ§Žï¥Ïÿœ¯ížÛù!ЀóûL{F�@#Ð4g„@ˆ�‰.¢)’OHÿ~D벑Fÿ чü�ø³èØ~}ÿ~u÷ãÇÕ�ô{•¥ŽÛ–�k�|·!û�¥Ù �Þ00!¯¢^Ë„ðW9ªïiϤ_ý;=¤mc\>¼Pº’lù÷Ê¿HýÕÿþïÕ§ÿùG?ó/ù[ñFñËpÜ,Vþ+ÙŸäçHñ ¸Ôj‰}yT8”ŸF�-—ò-�F hh@_�@#Ð4�ÀD ÄŸ¡¡!ûuU¿ê}VùWt&ý8ˆ"úÓ) ô­Èÿoí ø-ûo¥«�¹Ó@„ÂiR]¥Æ'€Ç©?ý�udÈ?²þ¥®ìG�ú ³Mõÿ›1(9uˆ¾Vì·"ÙEî?áP¼N€O"ýDœ7ÚðYe>ËQ€àf<ÿϼ'Ù–¾ ±Ì2Ë%}¨Ì¡üÒT«�@#Ð4�À³hÀ³`ëJ�@#Ð4�ÀÛ!òIOqdeß+ô¬Ò�Èö}~Hý$üÃfû ÿl÷·@iÛiC;>Éà(;[ýÕ7Ä”çß9`nùǦ¹I‡/Év„ø«È#‡¶JúI'¸múSœÄ?º Aü‹´ß�=Ò'üò=v\‹øyÀ‘ÿ8®ãМ€£É>:a)7Ö­¿•ÐW}«ÐHÊ_«Ó¶F h�Fà©´ੈuùF h�Fà é_“Yñ¿A÷VäÐ!ÿßYÙÿ>žï'Ý„'Á ÿ–IKÞkÀ QunÔæµl7Úu §ÿ¯n^îàùzè0äž�ÕÿHò îÈ8 Ð×¢Ì;Cœ^õW©5'@>ÜO+ø÷ŠS±ÿ¤ÕýßZù¿«ÿ7CÇÀö;XùO”ÀgȰ$çŒWX–ÝU®ÚÕ9”_Ûj½h�F ؇@;ö¡Óy�@#Ð4�À@`•ü/žóÿ%¢ž-ÿ88àïÛ2ŠÐãÀþ]eLúµ²�ü)ùcHÒlýÿ¬r_�*ûE¶Ïêó ó—à“ˆ°·ûKŸ+ÿÒmAÔ+ùñǶFúC¤“7š±é��´·û«Ï)ǘ¼#@:«ý9Ý?þYòü¿VùÙúOÄ @4ñùÿŒ€çÿUßQN€­êÛcUßCKÌ÷•Û—G_É�Ü `ówÍVó[o�F h–´`‰H§�F h�?„@ˆ?ÝGG:æùs¿É¿È:+ÿ8 úÿˆð¯Å¯8p@þGü]ícS#W©Ü¿�*û—lÿ®|ˆ¦Iqئq²*O ‰‡¨G�¬ù±­É%éWS3�G;“ükLÞ 'ÀxÖÿŠ•~N÷ÿ-RñGrÊ¿ŸýÙç @¯üKBþ¿àP�kµq£ù·”ŽãÃD;¤ŽèAY#âk¶‡íP™CùËö:Ý4�@#ÐB ‡êüF h�Fàñ§ËIþ‡ �dû¿Ÿùagõÿ»Èû7=Çÿ�âߊ�~Ë‘þ„¿F�|åÿ[íü[íýGú½ &ÿ�øtýAºMú¥ó6ˆ<+ü„5R¬mÓÂã¿q §@:äß$«ÿ"ëWcÀ+þlù‡ô‹ÜsÊ?ÏùÇ0·ýËŽÀ‘UÈ>ÉÙ1ÃÐ×ÈùšmÖ[(‡Ê®å¯ÙÍv²h�F Ø‹@;öÂÓ™�ÀÇB oþ>ÖçñÚ£éÏ÷µ}ßö*qß×sʙ؊xLô%!øèSJÏ+ÿ¼Í�}"NoÿáG*~Å ùGWÄðKíAö·¤ú%}­|"ÏÿÑ8x ã°@ùŸˆ*Ëu:WÅE”µTî­÷:�P¹ *gQôØœ¡?”¨Žì¤YÝ'X.t¯üÓ× û&ýÒýì?¶±Í?§ú{Ë?Ä�$ÄŸ�Žlù'ª^žûgnv¨=vÙ™(rÍ)ÿ&ý~Eÿ¡c÷#’~)"ÿ�ê|£žúƒøßŽU÷*>xÉF„z³’-ýZýÞ(~VÝEäglÊË¡€Þ.?Ò^-W; h«Dy¦ó ýЭƒÊmÜÒor™_D±ò Ñǰq°õßÛüEð9ð�ÒHŸò/¯ù áÏ3þ&üÃÙ`ñgp ‚¹)²qXT}_>y5Ÿz5ʯe[o�F hžƒ@;žƒZ×i�F hŽD +s&ú"Ãý{_Ë‘égk?DßR¾¦ëëýpøTÿ8T6'þ“ ÝRm}WDwŠ·7ŽÆÀ˜æj¼tˆ{uÄ `€ÚÂÀ��ðŒ<΀�œóÕ�´•4¤Wº Ò-UÏ}×´tˆ?¯ñƒäÏSýч͇ü)�ôvÿ¡Sþ“lû¿†ü‰žñÇ�×üqØN ŸôÏ Rc[“ócÂ_í•ÜïÒ)¿ »ˆì‘©÷”¶S§e#Ð4�@#íèë h�F x#BþiÞã�}$ÏÙgµŸCý ù‰ìÝä䙸KGÆÎiþ[N�š§~ØðKcðÊ?c 2¦ÍÀø»Ù ;ˆþÜ ús€tïQÇ À6y—‡L+ï“Æaâ_eHµòçj¿{Ôõãíþ’Þ‘0Vúó ?¤#év„üW©<;Dò¯?�ˆnâ�T¯þýZi;Ô§ uƹC†tW2¾Ô3­”%]õšŸºûòS>r­lòZ6�@#Ð4Ç Ð€cPê2�@#Ð4�ÀX’ȯŸç†ôç ?ë!ìcEŸ|oëéIî!ú”E&Ž´_í'�8,¥[Š`Cú½óÒ­±DgZuË>D>äŸíÿót•õª¿H²wÄ@ÔSô³óè�iÒê“àUk›?ÆdŒÇÏøã±¿9¿Q¿S¼×ª=Ûü}Ê?ä?é¡›ÐË–r8p|–$Ú ²Ö%³ Ïü›\3^Eýy$q%àOÑ)[c�à‘ZÛMfµE�L™–�@#Ð4�À1´à”ºL#Ð4�@#ð–䟪Þ0ÈH?«þ·"ùHHþ·ñ,?ÒQ‡÷ñl¿í”©æ•}!ÿS—Í�HÚ±P%ú ÿ!à_8ã›Ïÿ«,[ÿ½ú¯¾‘7"è¬úO)Ý�@pU�CMþ‘ØÔnœ ^íWš•þÙ¿Êì��ζÿ;¢ûÄŸ¨gø‰>äOvûéÀ¦´ ½ˆ½’~•D_ùŸ%‰>·›úðÒçAGHõšŒ�ñ>E¯e©»/,Ë’Ž-r_ýÎk�F h!ЀCu~#Ð4�@#ðBn©Ýr�pžýÏê?Ûü½Õ_ÒD_„߇ø�“û­ë$d^ã÷Cõ‰&ÿEÿ%�U}¯ôK_ÊŒ"î ™•ù�t?ÿ/»·õ« ü‡ùG7ù)õÖH4§€¤Û@W4qU'¶QO6úg|~Dl„ÒvBHõkýTîN¤À­H=ÄÿV'÷ß)Þs˜ß û~¶ùã°:Äž·|‚Ø36EŸ%‰kwÆ«AoÆ-Iᎌm™váR>åªL™HãSúK:ù»êÖ¾kÙÖ�F h�chÀ±Hu¹F h�Fà „pWé“þE¦ÙÀª¿É¿VøYýÿÉÏ«ûŠü{èêdzü&ÿÈ…Î*?}…PO}Ø:Ä~®Ê+½¥“§òïÿÄá0‰Æ ¡¹Nœˆ-m§=Õƒôóø�ƒþH'dœ8î†àv8n‡àöÿ÷ê·tí È3þúç€ß q‰éo’8¾H~Ʀˆó¢Jô�ÆTÉxwµ-Ë$�$Ô:ËC›Ëv’¿”i#öe½äG¦\ËF h�Fàí8„Pç7¯ˆ@߬½"˜ÏhªñhT%DýØ)/˛Ȋôš€#‘U}ÿJd•ÿ«È>„?¤¿êÞ 69Í?¯õCOšCýjð {5HÇf’/ Ñ'lÖ»­Î?^�Q¾9&š˜+íWð‰ôs0Ÿ‰?+ðÑUrM«dPÒΉ1ïéü�="RE¦mM_–K:rWòwEê$ÔvbkÙ4¾Ÿùð1FÔ£hŽG ÇcÕ%�F h.��þ]ÒÏßk•¢Ìj¿_÷'�íþèœÌŸƒýæ!"úÑãˆdÅÿ»ê~S̶“}·Š8ò*¿�x>žª“^ KòÏ =6Hó­ˆô/‘pÞ*òQ¦oVý—Ä?i^ÈM…Žä3 ÿ ²"Òí~á`'€ÚŽ`¾:PmÇÀA~y güÂ�•ÿÿ1?ï/䯭¤’ÞÍ î‘Þ¡ ɸL°%¥0:‡Jº�Õ�-—>Ž‘µMÊ'yL]¦h�F XC k¨´­h�F XA ä²ÏŠ?ižëGBò}¿ˆ»ùÉEÚ&ÉöVö!ü^áò›vØÎ3þ‰jÃ:RífõâÏêÿÜ@ÿ²…ôG® ݦ.«úÐ_t"$9;~ˆhgµ’ ±7Ù� p8t,Ÿ‰·É¿tí³ Àj.òˆØ`©4¤'‡÷ÙùW{~€H¿’Þò™1¨nÞÀ<íPÿHv$ê|3oÏSe*Ñ>VO9Ïg´Uõ´½O®•¯íÖº±W[ë�@#Ð4�À!Úp¡Îo�F ¸xBüºˆ+ÄF‘ßy°ŸH;ÛýYñ÷A8¤gK¿Hÿ×AøÑ!þ¶I’ïz£<õY…Ç�À‰ÿ!ýYù‡ø?…üçC4ñW"t7iÈ?[æãÈ��Þ:ÏÖzÕÉ€éñŽþ “Ú¡MÚgÅòOÐw¥9Y¢+Bü³O;8¦@$ŸUÿ[­þ{�@ø!ÿ‘Ñ©§ö ýÞ!™±0c% i&�¤_3j¼„J¬£#£ï*sÈž6öIÚ¨¡öYí­7�@#Ð4ÏE€ÿç�F h�F`þôùœ¿H9«þv ¢îSýErY½ÿIŒ.ÉÊ?dÿï¥äð?*ã��}µw[eÈ5ýk0&·C¯N€Œó T݇YmJ“Î#uå±+0²@IDATÂÎóù¬ ›ìÒïgï!⊼€É?¤š²’8¸Ñ`ŒÆgò¯¹ápºkÚË#>€U|và@Nò?úµ#�ºjŸ�Þ%¡þÀh:¤3?�cè�B%ÜÑ#)Œžô.=åÒxÊ'}Œ¬m¯•N›kí´­hŽC€ï\ý_@­5Ûq­u©FàÏ"Ѐ?‹÷Þ4�@#ð�XÞð‘Þ:ìOdÖÏúCØEjYÁ÷ ÿ"ÿ8xž?’×øý€?N뤇þCus`તÝNa¡­ñ¹0ÒÁ+åhiSxé~€È5ÎVòMú•6ñ.’�_TÆ«êj‹ú”ç&#$œú é�Ý9;n\*¤@›Yýç €å#8¶úÄ?NÚæœUù�„ø›ü«_ïF(Òc¡Æ4BôHÌÇê»Ê¥í]’z‰Ë2ÏmsÙN§�F h�vô5Ð4�@#Ь °Jþ!áà `â/ÒëCþâ`Õò/RÏŠ¿ôáG²Êé'þ_Ñÿ«|løgB_ˆþ$ø²BÖ#«ÍŽüSës`ÚáÓ`²ô»Aþ} µ�þê `ÀÚQv˜üK7§­Dµé]JS–Ú�¶‹Øç-~@+ÿ<`ý'Æ0Ò~@c˜ç$hv¤Hz×})2¾:%mGB¶#«m—NÙeùµtÊ­IÚ^†”‹½¶[ËF xøþ-ÿ/¼OÏÝK#ðº´àuñìÖÎ�¾ùzÛ¸ñ}[|Ͻõ§Þ˜-Ë'�t`¶‘–ÎVVùçCÇ€}®ô‹ÌOò±é8òÀW9 °ñº?"‡ýÕ°$©b˜5{[ß——’tþ.[–Ȫ¿&îh¤�:�Ü�ï¥ggÄI‰õ­¾y¦mn¢oœCBö‰>ýŸ¤%§3`Aø=ÕåQ"�øÐ?õŸ•¤Ï�DgÞ”a,ìxÀPÃÚoPµ­éKÛ¾tíkŸNµÊ.Óµþ¾¼Zîœõ—b�ïÿ¹btéø¼tþçz]ô¼.�v\æçÞ³n�Fà"ÈM¾ ~ñ�9Ù>ã/»Ÿï—„ܲ ž-þÞê/Ò�Î}±±…²Ïa~ŽÒí =ˆ>¤ÿÊ©üÑ&«Ôì–éš÷"]}Mò/=�]Ó>�"êÒ!î�¢ˆ·‰<„Zº�äU‚ÆK¤ý§Úöù´«á_¢¿¦ÇùC$—“þ«ô«ýË@ßDû­? õ—éu,¶ä!�—7ãc‹=D™•÷�ÙšŽ€Õv507È7È6»~Cú…³ÀЇí–ÝÙ�Çä°“±ôÉx+cð8$ýFÆ¡<>ÄPvæËê?ùq(9ùÊOX»±¯¶]:õk^Ú;VRwY™>¶­.×4/G€ïÿ7jèïdE£õS@ §ð)õ�F h^„@VùYåùÏö~;ù÷¶~‘ô*çéþ�w¶óKšÈ#GÚ«ýJ³­F¥yD`¦£«¯ØæÆõ¢>±27°Ë›X¥ç�l!¿>ÀOÍ{ë¾H<ÏÛ«à–#€2¬ð{Ç„òq@º³òù¶@v;”‡œÎðÙgû?þÝq°ýŸù§ßÑ·w¨Mߌ�©Ç±ç1?ÿ/=ä²OyŸ G�ç&Û EŸÖj+zêLÌd¨:ùËtê’Ô[Ö]¦µÑù�@#ðþô÷ôý1@;žŽY×h�F 8!êjMó9ÏlýÑçÿµÉçU~ÙÊo=6Iò!ô?}6@•èŠ<ïgã‹î³þž~öâ¯X©nh“+Ý�qÙŠO¯¾Ë–Õ;Ô«í&Ý”‡øÓRÔ4;~ñÀÊ^ý;2$cœãcÌŠÞ ;;ü€ô8 Ž;$FYêÌ6Ñ ª“­ÞØW}–+u°­•IÙ]’:Ï©·«½¶7�@#Ð4KÚ°D¤Ó�@#Ð4gƒ€Éf™ in‘Ïÿ{­Ìgûÿ/È?‡÷�ü,s˜ù‰äsb?äÊá`kH>„ÓDHé~-’þKÚ$´Œó­UHmˆmúZ¦±ÏrSVð!§“t²'€w0_Õ#þR>ÄÿZõˆ>ìPù&ÿ´-ÝQ:6Vû³à¶<°u€Úƒœ{ ÔSvH;!$ý•ËcŒ#ÄÉÍ�w HR/múH¨ú°U‚^õTA.í¤�‰µ�ª/Û«y­7�ÀÇB ¿¯ëóèÑ„?¤ß:ä8p° N€é��^yV_‘¬„ã ½F4·>-ÝT¾(¨Ÿ£eé±öºõg<‰ƒøOgÀpP>DœÞ y«|H7N·) ùf„ŽJg´!á8xõŸ#ºâ=gÔçÿUßcBj;JÒfu€¿Ç€Tä¦ÇŸ‰êù3R:ýg\2¹pÁ¶ ¾aØú,ÔÏ2ýÚ]ún½v­½—â{îø5>íŠíñ4ÏG ÏÇ®kþA^ú�è½»n�7@ÀäM„6«ús{Yí‡ðûÙ|‘u¯ö“–›WþEð½ò/Òï]#�>ŸùW^çÇŠÿµïíþê;¤ß”±hžŒëÿ¢Wý5¨-b[Ó"Çkÿ΢ò9íʃ<×vHÛ  öX}'Ïå‡CÀxPOvÊLÀ±‰èß)ò¨�£l´õ ) î!÷�~?=¡óX7>_S&�rŸd�yk¡þ?ªúZÙcm¯Õαýu¹F h�ËA —óYŸÔLy^trC¹Ìït#Ð\&‡�Z•ce?«û‘tȾO߇ô£¯DNùßU~¾Æo�?Õ}�+þ!ÿÙ‰ð>™Jf£#—ºm"Ê8êv§—6&6ʆ4ÇÀoµÛ†Ð “üª‡ðSoË  œYõ�#`–O_ÈaŽAù{÷?ÊÚ ò�SÀ;$)g§�dõÒVdm+åÞBöÿ¸·@µÛl�F í-O�¾1:‰�©Ù¼ Ùr AcU’™mþ^Ù™·,„rñÏkû,!ýÃé2£lÊÛa âÏ)ÿ8Øòïÿ•¶@Ãð�Cyôeû#A¸Ô"IžõAäCè§Ä![ã²\iFµé)cܤæß`‰O¹ÇàÕÕÍ.€ìH™à‘v�ûBƶ¯Ì¡¼×hãP�ß4�@#Ð�v‰–�}7Hûò>ô¤zp�@#ðbLÐD.‘¬º{^„žÕŸæÿýûæ9|Š¿ò¶¤Ê‘¶@¤ÞD_má¨:mÏ-þÊ·¾�L(äq©“~· qm…eZ™qP.Ä—ßS냬ÏÕø‘Þzß°ÑõÜ£¤w? ‡Ý¥ý[-¹Õ&D?d_;pø•�ÿAþç›(�6VBpùO⟱ü%=;êêÔIý•®™žûè¹õ   �@#Ð4�À‘´àH ºØÇD ož>æçÒ£jÞM:¤ÖDM:‡ú ­îgÛ_åøG€¯"û¼ÂoMrª¿W÷ÕV¶ô{¥Xi¿ÊoÑŸ‡àalF4Ç…�Ì�ƸƒW¥Ï8’Ž4Á®„}�ö5òŸ²Ì—úH¯ð×¹‡°#k[!ÿCBþ¯eã0XÈ?u äé=�þ!ûzêRsIþëtÊÄaðT'€ªn…CÿŸåo5Ö‰F h�Fà•hÀ+ÙÍ| ú†jÿçÐøìÇçÔs?úç{Ì·Õ”�ÍäN$»W™‡„ôcƒô…ä³Ò�„ô+Ú@!ÿ¬úOG€tv˜ª­H¯�´Çqj‰ÆÊl©4ÝiuÊHçòu„}¡“ÞŠnéáO%þÁ*Ò¥¨²?äÜîÙùÏ€¿ÉOT®úC—ÛejŸèDrBöwIœ‰!ÿ29Ô6c;$¹&÷}'åjÿµó÷�õ5úb¾ç^Šß¥ãsîó?çk¿çvz´àô>³q#Ð4g…€iÁ !öÜ zE9"y<ãïgïEúÙžÉ!~GœÑùÿ6¶úóüÿ?œ ¶¶^ã'Tó ?úÊJòÉ�­±6txŒ¾Ø¦]„Ýiô�ì=ú$â);š¯b�æÅæþF]oñ�C€­ÿD¥q0&ÇÚÁ�~2¿è院§gðÃØS~Ù%×$ãZÊ]å–ö¤©O0ö1¶l�F hÞ�v¼!¸Ýt#Ð4�ÀnB~(a¢ù‘ßŠÅæþ þ"î> O²ê8¾�Õÿ*MüEþ‘œüÏJ?Ûý‰8ü¬¿ú ù�̘6m÷<>bŽIpÈå Éwtˆ5:e¢#IÛVôئí8}!WqKÛ…èûÑ¥½åŸG’Wû_´}(Iß̯Jtb;!ùþ¼Õiy€ë“] ÔIáOºÊ]y»ì˺I·3 H´l�F x Úð¨v›�@#Ð4{€ü7º$ä?«ü÷"è^áò–gû!íÈe#íþCô‡„ô'’ïú”§¤ú#ú™�'+ÿ&‡À1ÆJ÷©„Iò5`ëCN]·ê»ˆÿt dâ�ó„ªÇVäÄŽr#Òž#d?«ÿu@ò)ÿÌ@¿Ô®�8ÉÿÐ瀑N9¤×莱T‚_õTEî²×2ÑŸR6uZ6�@#Ð4Ç"Ѐc‘êr�@#Ð4¯‚‡à¿ƒd³�CüBú!ü¬ðã@çÕ~¬àCäYí_Óóš?äÔYù§ŽÚY¾ÚÏiõ�Cÿ †ŒË�"dŒ’§B™—ŒMºÇdÈß*‡äò]%º#uC„#G{ÇŠÙGVú%yþ߇›w”±Û>Ÿ_æÝךìþl%ãàa»È?R/!Ü8�dϵ@�Ô—:Ã.¢þTûl°(»Ú(EZm�F hž…@;ž[Wj�F x &T•ü«1¯¾k5ž•“ÿAúCþ½Å_DÞ+ú‘¬ðGÎoó�³`Hï ]vdÅ9bH ÉÞWˆßù{ÉÜß³n^õWOû§ÿd“ü B/kY74[JΖ vHJVòO?�ülù·»¬«ÿY~«ÕÉôGÉ:†JêíP>’Ï?ÒN€Q"^7”yu5IØ—iê°×àùUCÑwµQŠ´Ú4�@#Ð<�v<²®Ð4�@#ð\&ýY�ÈÑ�@ÊY­Ç rÏö~ä÷±�ß§úKÏkýþ‘Ž G«üyÆ?:äŸçý!û8üÌ7}­DæÅ3Ϊ?w΢^ˆ?}WŠnnãfë¿ó Ú”„—¤š�Vöÿ ~�JUR�Ž@¤?;¦C`”c,uü�ÚÛc¨c �|–¾ÎÔn&ÿ\*s3ì³li��W[Õ©¶L—¦¦J™–�cÚ¨õ[o�F h!ЀCu~#Ð4�Àë! Â3)ÏÐ!9‰&è"ëÙöïgýEðyÅß÷qÀdÿo�ìÿ7Rñ¿C·@$Ÿgú9ÜÀÔ•få»A¼œ.z&:ÇÉÈJ–—:騬‹ìBø!÷ѳýÞ„Ÿr‰› ®÷ä?£¿ôcòŸ]ãÛ‡ì�v"<¹Ã‡ ós—)Ä¿ÊìÉN;‡4ŽZÝä~IØ—éÚÆšþÔòkm´­h�F ؇@;ö¡Óy�ÀC`¹:ôÁ†wñÃ9÷ÏrrLH9—†ÜSiHVøÉ‡`Y*�­þlóÿ)ÂÿHÊÆÖÿ�þ-Àpðz?ê§¶-ÕöÏ¢Cø.-˜è †îÂ?€˜„?¤©Â?uêc/ḫa³òîö¨›¶!þ£¯ê° òŸ¼Òç²ÿ2”£TÆK ñ‡ìsöÃ/õñK:[ÿy »òe}=�q g´"Õ¦ä›�cOëמ"4ë¥ã;4ÿ?:¹WèüÒñ¹ôù¿Â%ÔM4G#Ѐ£¡ê‚�@#Ð4ûà=1¤Þû {¶÷û�?‘óö—4[þMüÙÊ�# rØyà«âÜú¯ü¯Êó3ÿ�}Å_êËÏùKz—¾÷ úÜò4_H©©ºô?  ï›mH-qnËèÉC*¤^ÚÛ%z%F}§ŠîöFKdÈúx)1H;È�ÿ[éÄŸŠ7Â麎m¤±–Ýu¤sãñ×Åþ`“žqòˆ®âOv¼´>}vh�F hv!Ѐ]È´½h�Fà( ,$$ßqè�ûØØÖÏ©û~¾)òž4¶¼ÚòŸWýÙ€`8æ�*c©ºlùgµß‡ú!³�;ã;j2gT²šÃÿ¢›\3GÈ,¤w¬Ä“ž±¬ÀŽä9qüŸG‡çQ5m é1Hß’£\lÇ÷¸¿$W)ÑÛýu}°òïUÙ‚Ží?°�$΋¸“-u}¥ËgNÏIekX’øšwŒ¾¬¿LÓF—i�F hÖhÀ*mk�F 8 �J®ÑYußZÙ9‡øcƒð‡ä[мo¥G¾ÉþpLG$8�^õŽø³@}@ØòJ¿öòvԄα$uÖÈIÈ!ý8ùŸv•}VXÔ›„™¾É;$ŸÕéáJu+ü?G©–G>+ï‹òìD’ngÆ�”çZÏœ@76Ïm´WI{ÕKw{ÕçÔÙÛ`g6�@#Ð4B }4�@#Ð< J:©ºÚϪ>¤?’-þß!í#²¥êƒÌÿDß]1:‡»¢[*�í» 4ެðV@Æy²|.SGÙBNI‡àÛ6Èÿ®G\þ À=\£„Ÿò� çÃÈ›öZ‡¼ÆEôõ!Ésÿy4;£dG@È¿IêßçÈî2\çŒWiBl™Û>Ò^¿/›ÚÛóùTkm¯êµLë�@#Ð4�ÀShÀSÐê²�@#Ð4F ’™èHžù÷ þrÈ?„]ä�gú9ÈÏQ÷!ój?ëÊ÷©ý|µã×øIÚ éÇ$Ùæ_u;°«?÷¯æùÿùüö…}nÙÒ^§ i qÅ’n„2Ž$n nä3þzå¼Ö[¶«4}ÕþªîªGmç™zÝ,¸n±xæÿ‹ä_Šœ`'’l¾¶‘²Q‰Íc=RW±½¡¶W V{Õk™Ö�F h�chÀ±Hu¹F h# IˆŽ$ÖGBþ!þ~�ß8À�CüþÑ«û|˜úˆÞ "Ÿçù³­IÌá~&eJg…ß�Œ¾CÌ,5HÆó0ÚŒú¼eˆ­>Xê|¾ÝiM}‹pC®Ç¶“Ù¡«ÐÆ€$DnR«'ÎkeÓÞhëÑ”2�¾fzµ·§sM° aƒüÇöEx±õ߇IJb�Ó@ê*ñ¯;(ó’ÀwhmÞÕ^õ—ôÕu�F h.�v\æçÞ³n�FàÅ@D‘L? ülû7ù[ý¿³ê/âÿõÛ·+^ã÷Uѯó:‡úýPÓ �ƒýì�d…ß$.rôb7Ç���)DnRçÿ7Ä–™¢'í�ì@ ¢=‰8Ä…ü›ŒRö‰Á¸§^$mDÒý«ßÚ�õô—òI¿PBæ™ «ûŒ‘4ÛþIsýBþÿ%É�ó®7¥C¼©‡¾$þÉß4µNäÉ;j;»ÊSfWݶ7�@#Ð\6í¸ìÏ¿gÿÎlÝØ¾sß—Ð]ã»ÿS†4<%¸t©CýI~ÐÒïU|ÿˆ~Îè^ñ_�þ-� ¨M“þ!kšÕØÍæ•ÉbíëCèÂäØP)»u°‘ï‰#�û#}Ùe…Q†öC�-•ösþCº¯8h»âVX¦·2Ÿžðµ«j�þ„Ø8ùŸ3pD¢Ç Àn¿ @’70R_ÿÒ#cË<°‡!Uåè@]BÚBO{è—*Ï™0}NÝS¨séøšÿ¹þ§p�ö?íø8ŸE�¤h�?Ž7I¦U�¼òçgìÙ†¯݇ü‰ìCú¿iÕê²{»?R«ýÿˆð•Óà›Úø®¶Yýgëµ·_K.·_Wp6ô¨ZZ_Ðç ©°�Ç ²o’!Ö{b-Î�Ú•m‰ÿVz´]Û¡?;nnæ��Ë�qNAo/±:йæ¹þ4;¸&¥óÖ€›!©‹.V¾ÁTÒ˜ÊÎ÷$sŠŽ<R§–«õÈO{”©úZÝÚNë�@#ðºäûøº­vk�Àû Ѐ÷Á¹{i�FàÃ#¡pÔH§›$äßÏá‹´?zÕŸò¶ùÉŸþEçÎC—à›Ú˶“õñòª+cQÂá0•JÉ “ƒdš:‹,æ„ûPinXM!®‡b £Ü",ñßJ×>Æ ^-ø©’ÿºí?uÒÏJŸÉz ™ñFÆ €ôê?«ÿ–Js]ò¨@¾�ÿŽã§ñT¨=º%$uäCM%!«5N»sÍM>éêgPu)mº½Aöí @g@Ý0ÆãÞR·ôõÖ*×}'Îíÿ²q-šüKgû?ç|æ;˜%™¤òÏ÷,‘ž·ÊîÒ•µ\·XR¿˜6í˰–W˵Þ4�@#Ѓ@;ŽA©Ë4�@#pÆL‘Q$Môóý"摬òç•~�xtVñcc{ÿ߃ìÿ=È?2:!˜»¢òo烰®«ÿuÀ OŸŸ— ë›-ÿ6lHÍC‡¤!’&“#»¥ ޲©Ûg€Étú‰ ’þaócÒgß{Ú~ͬŒsÙ&ö8œ�qÌ)²áàûá9Jr çxû?y |oBÔ—ú¦ÄæoÊT:uÖÊÔ6S®e#м=|ë÷“×lo?’î¡x9íx9†ÝB#Ð4'‹@½¡�z�&æ°¿;­ÎÇÀJ½Wÿ!þcEžö/+þ!üÿE—3ÀR:’íÿ¬îÓöª¤ï1†�~§±�,Âo4paEùׇ¶�.y!åܬšT† /Òn�¼E å¥µ~U¡O_Þæ_VÿyÀ�Œ¾SnÑå›&·Æ«ž’®Ä@È?ğȬþCüyk䟾VÁ`Ç÷Ç8«L¾_IËä{ÒË|ìµ ùËv×ꤽ–�@#Ð4�À.Ú° ™¶7�@#pæT‚ᩊ¸`ó*Ç�Ú¯áÑg²ã}yµÑKÓÇg̵:¯_tá5¯ßè�qp$=äÔÁ ÛÃÚg¸Õvå@Ÿ PÇ1út½'öÿšÅ™‹’ÙÀ€?•æ@ˆ?c%ô¼ÐŽÒÊó÷IùÆU"é:·Ø(F¨y¤÷å“·,O�‡x)nËÏåp�§Uâ>§>ÿCó;­O«GÛ¼ �v¼ ¿®Ý4ïŒ@nB,u3ÌM{Õ•˜7ÐØ—y�† Á7ø5Ò´vó°fK[ÇÊ×h#}y®JxÞ3ÿØ”ÎÈœöï•~¥!þÞæ�dµHÈ?z‘ÞPwHÿªøMuYí÷c»ÿ’(.Ó ·Ãñ<\µ"�¥Z®]›Æu uÔµüˆ|“÷İöÙa›×rÚL¿’βê×û«âÌ�ïÅ�Æ™UÿŸÒÙúoòOÇÊÏc88Ðß%•Ë÷�9QÆ8¡»Új'ÚS˜õ¤/óöå§ÞZêuh�·G€ïßÅþ¾=ÖÝÃë!Ѐ×ò[j�7F€²¾é2éGR¤sÍvhxügër^UƳ¾5½üﱨѥ}­Ÿ]eÒÆZ�jKý}å·æ¬Ê[ia¶ÜÒÏŠÿòŸÐy‰w:�µWøq°;$ÿQ¹éPûúÇóþôGãªkýÉ@.Bß±å!Ϻ®_)¯ÝiœØ7…7åÓè‘òa¥íèwôÁwÈéÒoò6E3 ×ü£˜Ó| @ã÷³ÿÂÖ¿Êc¤YýgW@«ôw�ùR&×»ÒÑëgS¿ÃÕNÝšç¶F›è )³¬›ü–�@#ðçèïçŸÿ z»hÀnl:§h>"º¹Îê57Â[:ÄŸˆ=ºd-ã)-nªC?ø‡}=¶*WI{ú•è‘�çÐ 9åS&uöÉeû”ÝW¿æ¡3çHlÙâï­ý"êÞê/‚Ÿ­þ“äÒoÂ?ˆ?ÎÒ‡äw•aõéôËxÆ„WIã>0:o'óº-%lãúVä: ù&íÕÿ�ñR¦T–šÏYûÏ,K¿¾¾éŸ¹IýÑ¿“ükÞ ™mÿúRyl&ÿ3+ÿ_ýêJ¥ý=ex+¡’ÿ|G—ßí]v7 ?ÉO¹l£æµÞ4o‹ß¿å÷²¿“o‹y·þú´àõ1í�Fà ð?\Ý`sŽb›Umog‡ì�è´ˆhM/ÿi{˜ãfݧ{þ|u#'À�ÚÁ Àö_•cg!íóOífÁ�Œ?km¤ý”[–Yæ§v¢ç<äÄEioñ1÷öþ ¹‡¸Cô½²?Ò±Ù€s@‘6�ŽUÇ&ì’÷Kºw0¶ ´åë Lk”Ú$Ü× ×¶âtpý"nâ=òk¯¦§múzdí;c~µ~_ÐhÖÕÿJþ�´æ‘mÿ_¤³;à/¾g\ÛJû{©¼8bg®Ö% õ{]íË<Þó'uk{{ŠwV#мý|#`»ÙWG ¯i7Ø4¯�@np¹ G÷*ÿ ú÷"œ!ùè~e¶Ø«®:;ÿAëÆ‚ñ¿—€>¸ÙO ä Ög,ûÒ©[e-�=s«eÐk¹]e(WóЉc 4¯þCÔ‰ÚªOäDëÃÆ6~¶ï{ ÿÐq8-;=ç@ò}F@•ÒÙòO¤\t$ÛáÕq~$u�êâq?¾†F'@SÖrÏY¾!H÷šþhoèH÷9ÆÀ¸k™gáU«1;$!øúB™È{‹t¶ý³òO„üs^€w¸H7áGªóã»&Øënš%ä»ëÏicš“7 {”µú{ŠwV#Ð4�À…#Ѐ ¿zú�ÀGG`y#LšÒ_ ?+ÜvHVý^Ä•ô²­å�3+þŸ)'òúûË—ÍŠ57ï".ôÇÚ¨õ–éŠ'åjŸËt-‹¾lwi«åk»±c[îŒ`ÞÁ(¯ñû©ÓúEî«„ìÿ3¿%iÃî•õ±Eð•ždô!rŸÈa QÌX[¾�K†öo¤¯%®]E¯úëVb:ÐgtåÔvSÿ¬~ž´ImÓ·#ÄèÉÛüX™SÈ¿1óá;ųþÙÿ’Îö"¯¤n¾“[»d7ùgþ¥Œ?¥ ©Wm›œþÛ4�@#м>íx}L»ÅF x%rcœæH×èUþJöÑ¿«²è{�4ˆ7ùÜœã€èûfž,¢È ;î•§L™Œë)7ì”M=5;Cm£æÇÛ2�’O�9VçDÜNáämû"ó�~Nðÿñã‡å÷!óº>H?§ùã¨òXÒÃ3ÒS¶¬ôo‘!ÆÄØ`‡#0(¶ÛYÓm㚆p"ùvZ:ræ ݶ�lÑmJ|—<¦b{“¾7=?ë/×iÈ>ß'¼Þ�ë�Àªÿ¿y=à­ìqpåÚg~þJfÕm@¾·ù^ÓvlèûB­³¯\ç5�ÀÛ �ïùZëyTp-¯m�ÀGA å“èq¼ }ãô2˜_ŠßÚ î–M7Õ“<¢+êÏ´ýdßb¿)³f—mÍPçdÀ_]ýV¼g2Q„ùZ�ÌòÜà+B`ªD¯1ù±ó Pv —Q ÛŸjƒø¯ðÂ…íþÿo â�àvEÈ?Äßä¿èØíÐX =�$;Jš±í àÕáõàZã;®H¶!síY®‘ŠSv®»„]ŸåšÝ6Õ�ôxhkD_û‹þŸò}ȘÞC2¢·ü�ï§à€ô[Ê–ó&vð9d§íä»l'í�Ï)X/Ó*r0¤N Ö¶¢'¯Ê}yµÜ.}Ùï®rçj¿tü.}þçz]÷¼.�v\æç~³~é?£³áD'Á�dn&-Ik.Þz/Ý«ð"³YͶ�•mȽÈéj„ä*ÏÛý¥gÛ?26;‚7다ÿ–('À�äçÉ÷Š*+™U‡Ü`SÄûï¨ü¥žk6’î™MÇæ¡iŒe0óê¾êx‹=˜”ˆÍü '$΀¤ÙþïCþDò½@Xe'€ü“=ÏûûÕå4?ë¯þLv4(¯xJ²â IâsëðÎ ¢é^Ë5â눼§Ä1ô\gO™‰?{úRÙ­õOÓ2MY×mÔºB÷o�:^Ê8�Ž\ûóÔù>*ÍwÃØ# ÌK:$Vã!™ß¿ešj‡Bê¤\m«êÉoÙ4�@#ÐTÚPÑh½hÞ�Ù5i2+Òé­ý÷葲݉¨nE± Àoê.£ÚØrd¦Üœ�Á¿+Äò3œèŸØ 2ŽC×+¦�~ƒÀRBdËÖ@æ¾¼‰Ï¶ä ±ùYd̓Õ|È}¶÷[WÚ‡òiÞ>è�ôÐ-•f€Ÿû—Ý2éHì*çSÿ‘Š?äTÀ `€Æé‰BãÏ1lù.¬‘fÛpBq=+F¢;2²èH’þ³Ñm8òÏ ·noê©[û:cId ôXÇ÷ô¤³·—¾ÆÕMätÈf'˜æãïÃøn@ô˜'ß_I“ÿ1o¾/Ï_r™væ�?©C±´³¬B™]y˲�n�F ¸,ÚpYŸw϶øãpcêÈÊ5z•Ò½º/"Ê6þ¬ÜgKÿ=D_ÛÕ«>l÷ Ž€8¬«}nÊWÄþZDßQÄ?:NôO’vDâ Žô�ôÏÒgT&¨;ñ­›qnÌë zÕW†eò�I¶ø{…_óó ¿¤Wø!ìÒq’vPN˜Eç�?y…Ÿ_ç§>ý¼³>«¹Õ™±ùü$¥vx']Á\Ó;¢‰àÈ›õH'T=¶9¨­sLlk™Ñ†íÒÓç.IÕ2‚ÚÒ×s=g¾ÈIüuÍ{õH“ÍÉ.ȾçEh—€}ù;²L§NËF h�ËF —ýù÷ì�?‚7¦^=¹„ÔÚ éÃêDHoqXŠè'=Éÿ÷ïWw+�‰¾HlÈ•êlu¾!3^Ùa7ÙDZ‡øW=6dÊ�]_™›æÉí97ç^ý—¬7êûnÐ7·õªúåš÷€ìPXämÕ!ïƒ晹FÖkéˆsŒùAú‘|¿ÝޤƒpÀFÂ2mãž?)O‘´�޽þ¶`ëÐ4�@#Ь!Ѐ5TÚöá¨7>ln~’nùñà&uFr¢¨É­)DöÒOÔÊ>ò×Ðíøöíên-Ê!p¯òZ w„ø£oIõW Gnì'Rlç‡ð‹Ð_!¯ ÷CŸò_ÿÚ8 $±Ùa ý³¢w.¨ŸÜ¨s]ú,v ˆåF}ö¹¢x\! ÊÏ8ÙòŸçú½�_¸ø5~’>Õ_’ç÷ó,?N^áÉê¾H;’IGz%“|õïþ†ô¡c,þ £—ñIíðž@¬Ó:¤’¨ëÌ�{Ò6•<zú_—£Mt·˜¾FsL²[v�©Ö‘þœ‡“ïÄŸC¹îë³ÿ¬øÛ‘©<ì|w˜—CΕ®ß}tB0IÚÆ=Rž"©Sm±/m{šì¬F h� C ö�÷t�?Ž€n|¹qõ ²ˆ¦ö’mì¬öCø‰Ðÿ¡wº‰ÿ?ÿ\ÝÕˆ3`¤@[Rý$äæ>iK98ùòñ·\è×ÿþ÷Õ'ÅkÈ•÷g�ŸzæFà&òÏ£qväÆ Ð#]A\sÔŸcTÝX©œ$?!ýšo"'ûû$ÿAú9Åg€¥tŸâ¯4ÄþV8x•¡CøMhdŸÄ&ú�Œ“±dlU'¯Ã;  ëfé¤|]a_ÄØ‘“ ÏÊÇ)ù¬S:;fHÏ<µ?í+cpÿØ Czlˇú;çTFÅ/Ç£¨ï„ÿSžg’�œHÈ?ߣ8˜÷’´/Ó¥ËUu­|lTXbJÞÒ¶Úp�F h.�v\ÌG}ÞíœÓù|MuSšmÿ&Æ"Í>Ø‚*²Šà'ä_Äÿ§>ý¢ÿõë&V}Øp|R�þU9k7ø¶áñÇ à8tœv ˆô_ÿç?WŸqL]ã½Ö¸¿¨ß4È5òÏ™�÷ß´?nÈw]³¹™÷xT–¬–;Lü…Í?DÍ߯ïƒðÒÿuèH¿ÆOmÚ i±®>�q\0†Mσì+=Ça­¿‘nñÐ52m©´¯«"cŸ’aRo„-–Ý2×%¬§�H2¢éíÿ¤‡mëÚO9ê~ Pçšaa›Ž1�Û¾7²ûlã{Ä×Èæžïù2�¾vÉeù¤S>¿/‘±·l�F h‚@;‚D˳@`y3t“zÅI¼5>¹©Ý9dˆ%«Ì¬’Kú™H"¤Ÿ( éÉGŸRDÿ~ÿ{H¿tËaÏÈ¿#¤{èÞ 0ˆ,ã[Þà;­Õú{ȾÈòo‘zœ¼ÐNéZvw»�ýOŠ×´�$-ý·ú»QzYàÕ�ÀgVÿEú?k¯4þ²#óYL]6� ŒˆJ@ ¬�4ÛþMò!úÄÿHl‡É¿Ê~-ºwh|Þʯö"y§yV/—˜x@ýçÝ8„¿¯®“DF}HœL~ÔD×ޔʛ‡ó-fCŸ¹“UÇQuçÓ�uh“”%:}®ÈQáQ?28ë£ý1&cPuþ}Ò&üã;Ä÷çVó@rV†ç„T䱇•ï߯HÙƒy~3“VÖÞ°,_ÓèǶ³·“™oÙ6]f.;º?yóKñ;u|ÍÿÔçwòhOà¢hÀE}Üç1ÙCÿDÎc–ç9 þÁÇàÓþERýÌ¿¤Wþ!ÿ"ó¬ô;†äCô帒ü$y�®:&æjÃd_$÷‘Õ~E?�Ë�q�´ÞÔcNy=Æ™¿¡�äcwÔ <×m¹]Ú'_‘1à8°Sç†Ú 9øI;"f�_¿¥¦�>ìQ¹lÇGÒvíƒøágå?º¥úçy¶ý;jü¼Æ�“üç!~jßmÑmJÒg‡Ó@ $žkÆQ×ÕÔ±‘Vü­ÈufYÒ”åóæú�´M_š‘ݼ¶�›}¯®«+ƒ¿D„ ÿל@=Ù|-#•G:6òy>ßQm/u^íÇ3ÿ~ÖÂ}Hÿc›¿ß€Tü¡öp°Å?ä?’ù3ß%�V>\/ºnì àúÉ5TtˆœÕàël|Þ&�š�¥lÈeÈuY¯ÕÚo½žyìÅäY®m×MØ?x`Î[)�-äŸïxVýõ 0üÖ1oŸ �3ØÄw›³äÓQÎ}�<Øñ‡ïj‚±U¢ÚÈ«ö5=õ[6�@#Ð\.í¸ÜÏþdfž›\õL`Í–¼–�Üìj(&›"£qøU"¯ó°¿á¸Ù¿ýûï«»ã`k¾ ¿êE~Â&rì¨öCüMþÕ¿WëP<ÜJo2’ö�ºÚÀà]Êž»dãŸ<-õ{ÅŸ1ý¸€8õ! �ÿ‘ ˆ?‘7 `7âÆŸ~å×4ÄܯäSÛkÒõå“ý%}Úÿ�~ €0ÀÀ«ý5Î倌�± 3ïD†×áã!`2¯aqÍ„ØC²!÷¾†�r2q-¹ yÑG_oÒ·‚>‡ØÇõ°Uf™ ìˆv`Ñ7iÉ­±¥lÚ!}"tm•|oøžN€æÃêÿÙLð%ý{#;ÄßÎ6éþí#�öqø3SÞZðç¶’Q‰-{µ­ToS#Ð4�À#Ѐ þð{ê�À›# ›Úy[Ë ®bvÜ‹,××ýýÔJ>Ïú³ê�ò�àþ¿ÿuü-ÝÛÿU�wž½'fÞRÄ7äß+ôêÏ7ã£ïÜÌ×yÏñɈn²Ï8ÕÖL‹H3n;�"Úl÷×ÃýW¿Eð±ùu`ºÁ¿!º+ÿy­ ¤¡®úW:Ûý!ð}"[þ£Û®öY݇ø{•Yl�þ¼Î/'ýsÚÿ|€y�yVò/S‡Š@È"Ããz4Y„@Âm'ä_ibÊ#‰&‚ÑÓÆRòý Ð.Aéa™r“1þ¦]Æ0úEÚ 9wÐ^Ê}«�š0ÎclÑ‘D;Î$³ýŸï;~h~üv€7’ès@$ý]“ÝNp íI·$�}%„Ð׬eÙZf-oi«mµÞ4�@#py´àò>ó“™17‘NÝÔrÃì �à`R¶ÊßE^ýä_«ÿD¿Òo8îDþïþïÿœÊgå=‡üE�4ù§/õâ�Ì ·QþÌñ ›Ç§ò�}®>§uú,Ù¼#@ý3~[»Ä˧û“Ö|ìP�Û²òŸ× BL²¸¶ÑÒ±÷ ¿dȽӃèÛ!0œÙê'¯Nªoù/Ò�%0§Ì+ú�>!ósXºfLuÝdõÒÍõ—“T޲þ¼¥›hª!È ×µ¿Òùnp-Ú–Ž°È!õM(5ë\Ãè‘Ç]ì À6bÚ8%É| ów 8åÕ~ƒ†ðÀ àƒ?•oò/«ÿŸGY;¤óÙPŸàωb'I0ÆõÑß´Q3R~™{-Ûz#Ð4�Àe#ЀËþü{ö�ÀÛ �Ï /6ÅìÀà3Æ#~ÕŸvÌSþÙþ?Vÿí�#€×"µ|"zVü§TܸOâŸt™éæüÁ�4’1Ò®ÇÊ�9ý q˜ÔHg…Ý7òH¢H:ö<óÿ‹7è-Wz} ‘<ßì¹t@$þÑ–~Nñ‡ô£Gb á‡èól¶û{w€l8 3j>Svfíy¢(T}cé¿_We N뺃СûÚã:"Æ =Ÿgˆ_Ò®£k€t%¶Öe'lþ>H®ÕMÆÈ!="í‡à‡ü[j ÓN™ÔÙ´tRƒƒ ÒÙ€£Íg|HâØóŠ¿ò-Gž�qÒq º-éH†Ò-Ic+é O%ò)o¼ÓHËF h�F`�v¬€Ò¦�‡À®›š]ö�7ƒ ‘nl ¹9EB¨ç"¸>ü�Š88è/‡þÝçvü¿ÿçiƒfn–‘^q“Žœv:Ux”–m3"gûOM£{Œj‹›vQ+—çæœÿy½�zìKʈ¤³+àn<óŸ•ÿ«ÿûê·"Ĩ’þ¬âªa;خϜêÿUòoEd"žéÏÁ~è5²"éñHf^™“íÎÝüI~1µúAÈuÆðÐCþ-CþuÍqmùú¥Üˆ[¤R¶¤ÉçûAp›V¶¯Š¤Üÿ(ë c “èÒïÕv˵Î÷f~wÜÀéý "¿ÙMÃ÷í—æÆj?NB~/²òÏê?‚ê€3ž²ù7,’v¥óYï5¬¨slX«lÝ.×4�@#pþ´àü?ãžá!p 7v¾Qåf¶D>ÒÞö/B˶ÿ;þ[E¶üûä‘}žù÷³þzà·¢_ýǶ¢Êrú¿‰¿Úãf{-†à¤\M3Ž–·Ô¤‰&ûŒ?iéi/õqÄÆçâ¶DÂpÜi~>PãE¿•¼aìƒy·:õŠ�•ý�ý5i€Æ‚£€W�M)GãîpèºpÈuUÒ¾fH¹vâ@Žò¹†Ý†®�„éæèô�•ä?ÔØ|o©o’:®U;¤çzF†ô[ãã{Q³ªž1�’ ®�zàÿOæ)ÉïÑgéÜXq(`v à0°#@y8*ùíÊOòOJ–dÿ©¸íª¿´oz{øûÔ~j¾ŽöÒþÍïuFùçZ9„Ï©ÏÿÐü!êó?4¿Îo^�v¼&šÝV#ÐøæÕ«ü"¤üCžºÒ>í_DžÃþˆ~Ÿö¯þ<ë�à €Ê]AšE¨yÆŸm7ÍÒ±q³Ñ™ä_dÒ“ø[‡þù •1Að¶ƒ;9?hÂOý�ÿ¤‘�{ì'ÜrÚ¿_(âÏsÿ¬(šHHRÖ}”±JípNè:áš›Ž]#»q0}®3®lÔ h@IDATa®[¾#¹~ýÐu³Kª(ìÓ"úLQ�ñŒlùŸoãŠS€1Ï‘h‚‡’>w„¹*`kÈ?»¾È>�u²ù»JYð›"í0Tš6–˜½”´§¾šžmc[öC~‡F h�Ë@ —ñ9÷,�÷A€›XÅzÒ¿Oû¡½Uô#!ÿ¬þ+ÞiÕ߯ûÓ!ìðsþ"Ë×ÄO|Aâ9þþ8|š¸òìмLòÁPqêÔSÚDHHXÛöîŸrwø¦@ÔÅÔâ Û¶K� 2DÜ$�kC‘ï‰Ûˆ^¤.r·6Ä>dÊ!ÝöpÐ/�,ûwŒUc¯ý»íÿb|ïHó;‡óõÛ94w×áwÀ�Èîïò�qð[Â÷™ !r“:é¿|ßê÷�Y: #¶ý×·ð˜€�~ÊCò{éŸ5òŸÏj�ôǦ&Ÿh{Í ð¬ÆºR#Ð4�ÀÉ"Ѐ“ýèzৈ@nîNqìÇŒ™›cGÝàr£™�yÀ½Èð½Vç”Sà^»8%ÿ7R1aPßXCðIW¢=yɯõЗ‘ñ%,õ9~àÆž¶±¡fÛº‘®¤,‡¡™‰yU_eôC?G³ó–~¦Gí"7©‡¿»ì%ZûÀÔëm×0·Êðy+fÕŸkΤ›t§k>å\>�]r\aÛ(ŸlÈ©ËJšø“?¾Ë&�´Å°'*òïïDìU¦ƒ3‘Á³þ.€kNü¯+ÿèv(?¯2S"¿/8ÀÓä>Röü¯éOZYv ðRŒ‚õŽæ?¼¹çŸ_·õ�êÔ?ßõYµµxíxn]«h!ÀMîJð¿hå!‰!ð!ÛK[Êí“i#e’ŽL›#ËèªDç¦>¶zƒ› et³žÃûêsý^í)²T™-©z¤i7‘v¹1Ù"m`§r.>wâ Ú“è“VÜr¤ì1×Ê(õ¶ëÊâZLÞ–T]ïÄùäA6‡Î˜m¯e¤Ÿ[¨EG�|¯ÙîÏ÷܇zJǨ#M7¯c”ÝDDvï&’Ür¨¸†¬„Ô%­ì…´�v_ÔXWn�F 8IÚp’[ºø˜L ›Ú©k¨Ö×lÉ’Y=ª÷D¤¿FÚK�›ôD©S��2!þäsê~ .§tHVCs¢?r>Û�®2�¢[sЇoòUÇAxAªjØNÕœÖÏ �¹Âá×™Wׇ`u¥=Ôk¦ê%?dòÐõ”ü*Ñ!�SŽ>lÃ>¢¯ÝQ.]Ÿ“äw ªD�c'€²AþÙýÃ9&ú’ÏßCl*ŒØÀgÂçî6)§–ó³’Þ¡h�F x Úð(v�@#°�ÜÐFªt]QäF8··�uôHôe\ËöŒ94ûæéèÇ„Ÿ[í•tÀVûÅb†L\’;”ÿˆøcS•ü×~'ù£ÜìW�t8øìs­…ø{õ?‡î‘?œóZõž×�ëüQ ½ò½œßÙ­Iÿ!ýH�'y4ZõG�œ¶!¿U¢ó=÷ã’¬þg€˜òûGÚ‡ #ÿ•ög20«ä?ºšÛ Æ|˲?A;©SõØö×îÜF h�s@ çð)ö�Ž@ÈìÄ?v$$=7ÒèÉ«zlû$å‰þĤ©G¬Ò!—±®ü'�:5ÄAó#HVû—rîP•ü£g¥�›p;dóM>7ÿ²™HÑqÕIw8_ôÙ; }]”Uÿå#)3¯•ŠLÚÂVõ¤¹®Fˆ–k=2ù¤·¢Ús™!!�‰ô5ó¤;D¦Á—à5f6³°ù^û».|ën¶ü[&{¶þ–ÎöGaT¿ÿþL–•¨«™­à:[–ý‰&úûñéÜF h.�v\§Üslþ &³£nš÷EŠù&y”«ú¾z˼ÿ¥¤\½QÏ {lô=yi›<‚ó¹YÑ;¤‡ü›ô+½ÜÀa`•øÇ€œ7ñ*á§í-'€{î?çŽ@®-Ï“ka¬òûQNøW:N€©SŽXÃ2]óŽÔiÑQmM§ú°‡è‡øGf,!š‹‘ÙûÇ/Æg•¹¡�þ^ë;Ì÷ß»¤g¿gÞö/Û ù’qð�ï½Û¸»éó7‚Ž‚ï&õô¿´÷Ò6žÞk×h�F ø´à#| =†FàLÈ 2Ó«z¦ë›a%|c,é›ÝQö9ä?íDâàG.’1˜p‰NÙØ¤:äF>y©›s“¥}€nÎí9{´ @yKGÀ¬3ڣ̓¶èR;\q.™L¯ì0ù×µå|$a)7Ö{Ò‘” ¬aß5g‚¯Â!�ôj›Ú‰d MÆBãU'}F¡¢Ç¼I³šoò/éš?[ýço’tÒÊÙa@]¥ÁGvœ.vŒ¼àN6á¹�Ô[¶·iµÿ6�@#Ð\í¸„O¹çؼ'ºq%˜,ô¹’(» Ä(=õ¸YŽm—ÜUfÞh«�ìà‡ŽH[¾I—Ì�wuÈìü´A^ú'�@}Gݤ³ûˆü˾k@nøgý´…Xe€­oÔÎ¥}æ&ÌCÚ0Vý½òŸ]äã@–rc}°'ý Y¯ÿÑ›¯É�þ¥¤ —˘žÑç)VÉïB~WØíà ?«ÿüñ›âß#Ù ÿäùm’|Ïù¬¥<ìPÚNÕãü>(é4²†š_íK½O–ˆtºh�ËC —÷™÷Œ_€@ß<=<ÝØÖPIöš6y…c�¬mÔzÉ_Êù*¹A_†êH)“û*Ésšyïï¯>)¢ÛÉ» Rr4¥)’D½A\rÜü;Ÿ<Œ5ß…žñ'ý=£ê)TÙÂ÷ƒØ„o1FÛøŒˆYù/ºó«=eí¼F2ßKõ“ƒ:ó]ªùéïÒ¹þˆõ5€¬öÿ~ü.x'iÅ/Š8rÀÒ ÀgÕ5¹§�ô’ì_:î¹þ^*_ŠãòsyéxÞ»þ¡ù÷ü¶?ð:uL¶gÔ©KB —ôi÷\�÷@@ÿ÷†ÜØî-ôòÌå(–éô€�ÈÍvÊäF>AžßçþoÈþÝÝÕ'âí­¸ÚõÕ�âgÍ�þì<à9ßÏäa—v‘Û$·H>8Êæ›2òV‚ ኽM¯ƒÀ:ê¥m>£'·Yë=ßÏü뺉œÎÙ|�Pg->e,Ëkª¤™чա+ϺúDrMF¢?…§ ô´Êòùó›Ác8MÀˆß…/ŠØ|Pà�”u=>áRÁõà]‘*—àß…‘Hùä=EÖvžR¯Ë6�_ׇïkãÑœí8¥O«ÇÚœ(ÜÜ> …p<Ê{eÃAÁF\ÛèŸó­¨1ûf[’×r@þyÂÿˆü«\È?y¹Ñ÷Y´£:q@ø!–c kÂcV9ÈaóW u;<�‰ßŽš-{pÔv-}HoóñÇá']tƤwŒùI×Â¸Ž¸zÕ6×VÒqp}ÇÀuK>¡êËeþå³&†üû1¥�¥ðâûÏ#9ЯÎs€Êðݧ�‹é6 ‡Jú)ûÜðZí<·ÿ®×œ:ù®®}YèÐ|DÚð?•S#pN ráÛèšß$Fã†÷½¦R3û_tŒ}-ÆÀ ³wÄ ðvŒ|nòÙ à•=³}ƒ€(»ªùÏÊ7ÿÜ8l9cz”Tù8 LF�y3O~‡½ìúü©ä¼ g�•6ŒënYœ¸þ�&ü‘²-w¤Ü²�KMó9ó{1ßaá†Í¥·¶ÿ�|êñ=¦¬w‘–ŽÍŸèÐi׿ £Ë%¦ÏÅœkÕ÷ŠnÞ« çF¾Ã9O¸ŽÔk²ÿ€°Í†ïÈ‹BýÄEpLJä$ ÔÌ«éfƒß+5Á©±ðGNÜøE·¯õ�@#Ð4o�Þx›Ç­GÝÜ>#‘`œÊ Ã›²¨:Å”*ï%øøPâš„�x6ì8|ÑãSýá£ó9É¡Nö‹¿“<%h[ò?x’ÿ$ýæ«sóT¨Ÿeàƒ‚qÕ¤žq™Ž…ytRozAî,ß46œ.·Ág$fÓ¦Œ-ª·@Á,Åü˜Ç¦_È›M }|@¾›­¶¼Ýöô%FØÍŸ6$ù+ªóè—»ýøÕz°ø<¶”s` 1tIg=òzÜÂÝ#³�7er¹6ñ¸?Oø#ž»ÿ_Dÿ•/øA]DÁ8‰¹ÏÉ5y¯ü©ÑþçÊ·êàÓWŽ{tûQÛÒ4�@#ðÖè €·vÄz¼�ÀB .„ᯩ5ég1\åÚªž6^4‹²ÈN‰¾ú…‡bOâÏoôMÅ'�7•Þ”$¿$þ?¸û?žØ6†o8ú™ c­úeREB X”$ü•ß’úIcŒÞm‰1Jlˆ›ÿØKCuÓd›CÆ?°Úôà’Lý@kœÈè¨u`æ‘«®Æ ?ÓÚïµ|9'¼DÌèŸiŒx3½¶›÷è·�oeòè’øCý>áÍÝê'ñn'j¬å{ÌS5Y—û™úZ’ÈW]|«Í×�ÑǼ PÛ6ß4�@#ðöè €· {�ÀM"PÀ$œtNžÃ/(I÷^Òïö£�È)ÞDiŸD%>èx zø§ò,ʱûÅ\ñÕØÝ†9°@¦*9ÛêØ¨Oxc`ø¤�Âý,ÄšJÕ0¦*ÛUIÀ–PŽÄ ‰|ü¡—J|ñ3?Æ’¤€>èÛòbœ—âÿnû<çz®û1 è7>s¯ó,¼cyÃ¿Æ `õAN™õÈsr¹RüV5qŸJ9—Rf~óð# ÝæYÛ$NS#dý*˜ ç:’ê áèŸH?o€5˜³ÉwÑU~IÎÅš‡b«É<º�#ˆV¿j«úâÞl#Ð4�À"ÐwxP{J�Àk#�E0ãZÇ–Åphü‘�6VvtµÐ•8TìY”Ç6S|² Ÿ§Hí ‰½)É?ò¼ P}HìThO …Ïx W-ô]4—ÈèHÄâŠé¬ ?ûL¼£Sz·üYû<Þ2žÈÐ$ùÅ�ùªDê¶Ãn'>쵉±Øª_̦Õr*çÅ\uý¢«1ÂïѳÎB=_öøE3ΫÌñ„àÊ©uÎ'‡Š’Çÿs�á:CÍÝÿlàNâï»þây`68IÚç�€èiOÙKèã7Û«>ñg¿Sôþl�F xËôÀ[>z=öFàÆpR¥1V TI—«�ó¬“êÌgŽOJâ$Ft¡±G΢ܛZlÓŽÄÏñ¡µ&É'ùÏãÿõ%€$wÅß<IWËœ$Ø¥:>¾$ŒÉ²â™²h—nÓ�vÑ•0g¬ýgÚ3>ñŒ3qç1Ÿx%�q×b™yH™d½ÒØÝfømóbΔAÏ|O–Í1¾–Ó~3fÖ#SçÄ9Éè8ìŸv„�cÎ}>VÇÜÇ~ޱè“s°Ë�dÎ0®'T®/¹óÊ€û/¬�ü ß¼ Ðɹô«$]ÍNßÝéÅ;eN䫽ÚÐWùÔº?�F hî �Þ¸§£Ùsin�,‚·$LcCçÊb6üD“¬‡®üÔä¬}õ…g±M»,º¡©‰'•}BÑÓ¶>þö@ØÐ‘À}åÑÿTžØ~ÿ/O�°y『¾ƶ*™ÃÊFÛµ`�ßF釅üðYµ÷¸Æb?‹þ-Þh¿7Þe¼WT2nJhxËà�-ØC¿ÒÑ6vó�‘Ó0}VyœîžZ“þè2ÎÐysìôq‰ê˜o¥ò(‘âr>Íe¥›}Þ«\�>�ƒÂ×Qþå_Mþ½ =wüuF˜æ¥€<9Àw”x$çÛ÷U:Jt†>”6)s‚¿²¥ÚT>1š6�@#м]zàí»w?òys �isMÜ·âó[æ¯*ý¸*™ùSõ¨’ê£:é!ñ©/ÎÃG U'ô¡—0‹bôx–³+™„$UìÆ×D…¶Iþ*¿ýŸn�ß/è*ô‹øoß÷ÏŸ?|Ó˜ù—ðPËâÿÿEõ«ü¾jÎߨj·m0 ƒÂ.ÓOc¯îØ2�ÊWóYì«ï_dlèã3oñbcÜòá8bs™Ûàû %ã1cØtŒ7ã‚×ø,ÞsgÌø¿�Ï|b{¬œ>Ò>2qu^ìÖŒ+>‘ëxöøÚ×µ<Çt:®iÊñ7~R@ùâËjøJñýþ]ßH�í±gÅo¹>er¯@�áÀ1ךüc\×À¸²ðQ<×9ð†g06Å?¼hp�Mf—×#{liƒ\ùÄ\Ñø­lÏ¡ËØž#ÖkÄx*>÷>ÿ·>¿×8§ºÏFà±ôÀc‘ëv¯ŠÀSÿ�¾êàï¸s þ�J‚]•VrÌ÷ýõá»ê7Õ?ÿþûâTˆÿ®úãëWßcüMÉ„) PñÜ1«‰s-î_ŠJñ‹Œ¯“q�Ñ‹hÏ¥²('Ñÿ¢ñûßs Þ:ñ$öIø¿•ä¿nüŸ|¨ÿ¨þKÕº ÀxjeLµ0Vì«Rm+>:(Ìó]± 5L«¬�(O>#Ð / ¯÷±á¢9„7­2ó²çÃp‡Î#‡§TZù“õçglÑÌ2úª«ülÓ¹°�%|¥ð©Ä™ce �¡×”ÊO:¼¨$� å‘uÊ}y™&v(%Q¡<²Î˜ÂbO\¨¼ãã*ìÏ’aD¢ïälÄó]Ìãÿüg’_§D}N ã«¶NšÀ<:ô*ó9±ª6|«=¶è"ã×¥h�Fà>è €û8Žïj½ ¹áÃÍBT•»þT6>i€Ä�e’ÿ¯l¨þAÒ?*ßµðÇ·o§äŸ¤_•äßÉ< àQ’dD†¢›kÕÃ{!­±UÊ£ü<®ï…¹($ý$ð𦒿h>$û®â·Ít$ü¢ÿý¯(ÞHP{â2FŸÊX(?gt’ùÌÜölÑã7óÑ% …“†„�,5¶$n+yk#âsL9~¦‰3ÑŒõÖ÷ä󱯥}’zëW‚†/”yŸùIÞ°€§Ì´êì0>âw¤‹Oh�…ŽªóÁµòÑ…Æ7í‘S*Ý%šc]ýÐíèÁ,NþñS¿þÎÈV“ó#vÎF›s%#G~ï%¸úÂŒkŒ“0“lìDëÝ6Øüd€Ÿ$aIc-~£ó`œyƾÚâ?ÓU›Y7·i¹h�Fàm Ðoã8½«Q’8¦TÞ‹£^Dš›¥>N:†<îÿQ‰°ï^±PÕˆÙ ùÿHò?ªŸï €/_>|×›U;ÀN*ćúó,‘0J|*ÅY+a/˜ýVm�ѿهŽÊÝz’ü$ý$þÔõ£ý²g¹ò´ýWÕwÿቧ>½@ß •z’ÖŸŒ›2û¢�®ú„w£ú!ü˜;ÅmÁsŒgKþ‘ñ³“¼J›-ù/íNާO·ñÑlqÄïŽéÔôð3sÄ©öAÒSu±Í4s~0ut}”9EuQ—6+ªóÁí±ÁG_e|Ré¼ò º§ŽsŽ»(Øò�%2›98¦<‚žÖÙˆŽëu®ÓxÚ{´ùÙ2Þï“‚¸fà_áã�ÍA¹óŸ 'ÿ’½yȱ¡ª­ÏxÙ8>èü}_ :Jý>®ìUWùÚ.±ª½ùF h�·‰@o¼ÍãÖ£^ °Z-ÜZõ‚°Üä8�¸* fë$B66>©²àŸè®ÿ‡<06¾ñ?Pâ9ùO0ôUâ�žâþ'ZõðIþó²¾ú?z'ÿ#y'‘wò?( ¾“þA· dÍÙI¿xâØ_”¹xá®þë½òŒm¯œ–ñ'kÚD·’±¡��[&9IAމKbí’\¸-ãÇNÛPÆÇˆ¹õ?™7]õ¿‚§]ŠyÆ0grô…âæñàWu¹D‡ÿÉyúLÛªžu‘¡{¼Î‡-ñÇ'rhÚδöû¾×zŒ !?pM’éä?NØ4Ûõ]„ÎÉ?®´Í&€ÀœT@Ÿ6ï=‰'ÿ‰Ÿ�N’°''ÿ²}ÆG•럟ñ>¢>¯E�í°©¹KpÆ?%ºÈÐj¯úðs�Q}ui�F xÛôÀÛ>~=ú�À¼Pi`^ -9Iþy¼5…÷°ðe$ÿþ €ølðÀ7=@{Ìô�H’µ%‰ÖŠ5á–”5´­5:ùÍþŠ•7øó/ü¼ ê %ñõN¾7¤ËF€“~�g£3�LU¡~@}gô¡Œç¡…yÕöÈ”èb¯úð'Çr÷ŸvI"ă=q¶ÄÌ)à>xìéÃ&>TÒ¨¿“ãx¥ÍÉóògblqǸ,—q0&ûB£t/ò¤óf]ä o–£‡^²ÅÝ«:GÎ’ÿ=¿ÚoåÓGÕ]Ã}‡ÆqS¾{>#oI½¾“Ë2Æäc¯ùý)?¾÷´·nÙè})Á"wÿƒ ß7å{Å5“äÿ/aÉ`€cAMòïsYöÊ×x2�a¾}§1L%í&õRôõâ±çÞ2b+�F h~7½ð»ïþž�‡,^ž½óø *¿ÿw2‰/ÿãÉ} à÷ÿÝîüûN ï †‚Q¯)ñ ¥ <‹eoh,Ùpò?^èç;öÚÈ¿égÀ¿ëåñ~'õjŸß÷‡FO|ƛʂ}Uöô+_tÁ¡¶«ºðs{c€RÉÃ\8f[’ >>öD¦¨�ýNÒö¨ïhâ _âlÎ`j\šY†2Ö1&Ó"«Ó“ß°#»\¢8ÅçÔâççžþRÚÕªóæ,éGŽ=¶ÈÐÄ�î¤Ùgì¡‹ãlú¹Ž6Û9 ÙI©ü|,%Ÿa>ü!swÍß�P}wýÓl™KióY°S_Û``‹Ì†!Gœ'¦þRýWõoU_GpµûÏM‰§ï�||¦¨}Ž]ðŽŒotðs©~³­Ê‰�øjo¾h�Fàm Ðoã8½ëQ-4Žlï´Wš< QŽ O¤ “lóN€ïºÃŸŸð@ÿ~ Í?  bp·Ë�þó.µã'$Ð^è&ðÅ' ‹Ç3ü¢'Ž“�ÉÿÖ�'¨Úøšä_4Éÿ?ây©Ÿ_ì§6$úþ¯3¯¸,â�œªÏ$ü,î£c\ÏY‚G�Ý¥~‚G¨ÂÚˆ¹Hv<—¡³¯øè s=Û8yýŒ5äKÄñÒ_â#WÝ�uÒYï˜â¯¢8;§–?õ‘gšv+=¶‡T�Gg›ÄLû𵟽¾«ÏcøqŒ“ úØÝ@Ô�§;4c.OÌ×aûã£öœ Ät¼ÇŒëÎÚlÉ¿æ9/÷û¬ã«F}àßr÷ù€ì`\ý��/%z C†Ïq�þˆÎÇsåK¼küVm[×4�@#ðºôÀëâß½?3÷¾ ¹ùù�Ä…qrÇŸD [èx)àG%Ú<à�€ÿüçÃÇÿùŸÿ÷?|üïOÿfL>RIü“±Ø¥²ÀB7•ó'¼hM2è»V»êà nÅbà›ª)›ª_Ô/wù�üë²àMéy€$Ÿ €lXV(wëNËp ‹¡Ñ©ÊFe§œ>Í>ËG�—¾x¶EÆ>ÔþŒŒ1í«ÞÇ`Ìqãã?ô‰I;'Ãnþ,è‡mü#MÜ×hk;6âŽj{táW´ê*OÛ½rd«1Âg¡œÇðÐU�41ŽèÉëÅ>�1ß«Q¶äQãóÆœlŒž�Oˆ€›1üF͉ ½ùëYì3ð JåD©2×Iÿ'ñwò/ü¾Jç*XSÝF6Ž ÏXù»�^:ŽIŽU°�e¹\,iÇ+|l¿“>µïy^¿sìÏÑ×½ÏÿÞç÷ç@Çhž �Þx.$;N#ÐüD ‹i¼0eÁ*žD�äžM€OJþÿRòÿ÷ÿû¾òè¿îöó»ú?´ðç?ÿœWéþ� áø!_ê÷‰w²A?c$ÐZC©…r—žM€Ô¼õ?ô¿²ýW>®âÿÁ_Õ�ûC‡Ìoz©,ìé#%|è¬GÎXc{*%ÞÜ_bþbÓøShãDZ:'…úiÍ?>¶÷…/� JF [ò/ÙýJGB˜²�¥è°y P„·òÖ 4eè,F?SŒÑU¾ê`ò‹®Ò£6بÂì]|*%>r¥'é៮û_‚¥OÚÀ îÇmL’Ñqž3Ê|ßøw�ÌÕI¾ôþoó†€ô)óB–ãwï,SÁ”škIîþ›ê˜°)ÀI?”v9VàÇ÷]°L²;Ë4;*ñ¯>5||*_ý›o�F ¸mzà¶�O�®x³� � %t² ™ îþÖ£ÿéÎÿW%õ¼ùŸ;ûüöþm �ì³à¤ÊÏD?h£àƒ|ý$/ ÿ‡¨¦Tõ[+Ff�ì¶Æá�%-Nþ‘Å;ñçN¿øZ³€ÝíÒ^”;tY´{Q.9T¬Ë,£dL”j‹îdyügâÔØ¿DÓØ]BÄ;©Ö<¡[•ìMtñµ½È°IJ~¡6N:^ö+êŒÙã�~£ød|ÇÐ9†t.—hÚœ¼ÏûOÛØfºg�:Wagt®³o�“¾£‹üœ4±9äzLă¿‘<>$~þÎ�Zù“äŸßþ»ý”üÓÞ1ð$žÚ'‰„¾·D´·ó\|°„Rs=ÉÝ? œHüý=õ&ËÀ<ý‚F⊧߇b›öRâ 'VhÕÁwi�F xôÀÛ8N=ÊFàÍ ÀBßKбÐßɼ€—ú'Jô?+yÿ‹ä_ m>isàwú•ìÿPÒõ €òÒ@Ù~° @Uó âWO$ÑØ£Œ%wíCsGÛÐIô½ ÿP6øŸÝ~jªn½X:/ÌË(§ex¤Ÿ4‰Pì‘ñˆ¾ê‘S£Æu�y£3/œü7QÏKs·½ÂSÎø¡ãX$©#Ù󱙩[—�‘´X#ߌwëgĶ;:øAÓö�bÄ?e��Z}ª~Ï–ñ³³'f9~¡‰]û«|ì×Њ'þ³ŒŽØU9´øp<¶„R¼�»(ç¿‹âX7%þ1Wê8Ó¼»úÝ+¿�Ûc‚`ÈIMâÏ£þ\ŸêÝ? Ÿ-A—mØ8Õ™fýÙqÂ>p® »\T¶þÔŠx‰ú `íÜ4�@#pôÀM†D#pG°èÔâÓE<‹Tdµúžð�ÿ‘ü“,ñdÀ%û¼� SdôÔlHG‚êÐ$ÚDH¡¿½Ê¨rÇÞ l�‰Ä?oðç�þõÎ?¼ïþÊÆ1HŠY¸3§$þ–Gß"¿ã í@æ„ËBNÃÙ/úÇÐÚ·ñÑØ]Å&‰†º2OøAýÒÄØhG޶EêË„s„X•Î1Ó× ø{¬øU~È™�Ô6gr|­ñ�n–£]ÙÑ­ª0¼êÎÚõÛsSú®Ç™�ÙÓñâ¸s®»ÈŽ�ÿïmJõÝ~ɦú®rþù:0B@’¨Õݳ`VK0œ7ü>9f Ç$OQðò@_ƒÀ\ØÖÄ|æk—ø÷xL.aÒöF hî�Þ¸—#Ùóhn/Y�ªø“E¿xþ¼�DŸßüóÿ®m—þôl �ðÿßÿ}ø66 <àÍép矅.ÁÙ<à}z’ ‰¡û¡¯QÙ&Oâ²%þбý–_ýóþ¿P¼ Zïþóž ¤ÿJ­×ÇÉé'�î„ÆOÝJ®m`´[écÝÆÁ<Æ\LÅ?tš· Ñl˜J&ÑHÉøM‡> ÔqWT¶qlÁÆS‘Es<Ïhú�>ã7¥}|*¿ÒU;<¥ú�4??W¶=úTð<ª{1~öü0n|ï¶F³¼CÿóqÂÝÄç¸gË évLh3 Çz«êËÉ¿¾·l*ù»)]Λ´¹gü˜£q ˜rGß×(ñÛâ½�c%°«É?ØGÿdç:\y©®.i77HÌJgŸ–�F hn�Þ¸íãÓ£kÞ.,VU²¸…ç'¼ÝŸ—~&y?)�üÿ©M�¯JôS¿)Ù‡çÑßýÕoXÕº Ô¼ €M�$§I6œ\(>‹êèèÏ¿«UŒlømþô,ñ—œ'xùOðöÿôÏÐ]Е š~ÌÑ!ǯú�bK»êݳÐ1Ÿš¬:‘Ð\IZ³à'�Ç\3NÆPyc£ãâxƒ:1¬ƒ%6J|ãc²‡øô騣ÿm¼´þ°æ+­|Ú¢£T¹ò'ëéó!z|ãážg4>3­ý?7Ü÷â2–øÀSÊ1ò1‰]™Š'Õuå v\¿ ~! x'ìƒÏŠmåkßåŸ+ÎCûmÿF h�çC 7žËŽÔ4;xy¯Å) S¿P W/z•pçŸw|Ôïú¿è½_õÀ%ÿ_Høµ�䟟øwÿêƒEèwþ €Ú|×Ïòˆ:Ý{�,Zÿªc‘�äßÿÎOcâÑÿºàwHŸŸä%€øy.£ËUOe~Ñ‹=+±£ _}WmWº³ 4?'§…:ÙÖsÇ?‘³ÉR»òqŒBÇÅ1Ý’ú@·*Òs^ÄJœ$ÿÙpóŒa棫ôˆŸm+]-ôYK•3¨pôø*…¯rõ¯qjü‡ð3ƳœXô…m¦Ø3Ž´�dŽ…“ÀÄ’ŸÍ‹è˜ãeÀw¶ -½ùñ¤ç˜S'd¥¹ß’ó<”™‚S6|÷_2É?›–P’}0C*ßGž rÜ’œ‡ªÉ¦ }JyÉÍ…§Œ«Û6�@#Ð\�@o\�U{6/Ž@W/ÞÑoè ÎÅ‹\-R��Œ§’ ý!™Šž§œ$A%§þwÿyAÉwyñ_~ÀàI à”$hüó6Tý“m*°±ð]O$|W|WÅøFUÿ©þ©€d6ˆ·Wé“~bG>*øýéOÏY�L©¾Ñ�,øÔ’ä9#q j~grÕcv÷Tð=깎?�Ymé'®/'2ÅnßÈÐ=ž€Õ¶u0úŠmÖïÉчµ¯6ø¹ »íœžmÄOûÐôù;(}r<ÓwŽíJŽMãò±r=~IH�ÌÊîߪ�ͦSÏ ŽŒÏ9â¨V¾s©×”Ùv2ó?Û�Lâ¯Wž~`±FÒo<φÿ €6>â¡à”c²ñÒ�o‚¼_jÜ9Jl³>òk¿Ký_æñVé½ÏÿÞç÷VÏ»÷m"зy\zT�À›F€?Äób  Ðm`$•Þ `ñOU¢ðCÉ8t{ŒXí|×KI9‹]6|— ž*=›ß”Àó_Ü‹`úªU:6þT|~n`ZytÄҸ؄€—ÄͼúÚ’¤rt椅>g2úËÌWŠª�½Ò9^ükÑÕvG1ç6{rô5ÆJWãf|• O'þU�¾êjì§ðÄ,ØnÇ#1«ýžv+¿èf*wŽ1•¤”d•ÿðÁFš7ê¤;mÑaÔqg¬lˆ¯× ŸÄ~g%¸�]ýß’錈0/6Øø¤êM—`ŠxQ°&þS 1ká¸Íºjo¾h�Fàöè €Û;&=¢Fà®ÈâÐ |¢£’dsGžElíwòBòÏ¢r,,ñ÷»ø©€ø<Âïä_1¾JÏÏ þ`ã`l¸½Pd©ê$#Tþøº’ü‡O ìªc(ã/å©–£Ã‚:Ëá-qe>¥œùà;ñJ±_lE_YZÔè‰]äÚ¦òNêQ¨oóƒò älÄf?¹#{þ5Xå±S?|è¬ÃE5çf|3~Ë|Œþ6}í?}íé¤úͺÈÐøUÝ5ú´ Mä¹rþ¤Î¶*Ïcx™øõ¼ªòOßi‡_ä´YÑ“—RZPù¾’äŸáLÛ¡sb*ÞçØhc^}»×ôMœwP8çóoóØ?›&Æ*\œü pø²à ÔqLü½¿]s±Ë—röÝ;©õéØÏïQƒèF�@#Ð4�B 7[7j�=X`ÖÅaå�XËî»ìY´j€Å)#'Ç$ðT%M$äüçWñ<†ÏF€Ë玽y*/ ä�n§ØŽ1Q’ÿÔ€¸´UõæBáÝ^~ÉK]<Óv÷4|Ão‰“Gqú°?s.¾n/ÔE6—1î“púÜú’÷·�iø³¢>’lAsÇ¿¾è/�ûÛ�1e\¡ 8�;ºPü—¶œ_Ñ%¤ý¥ß°Ä'~3MüJ+ÿªƒO©ö#ÝlK»EwmMÜç¤ô½w\ÒOõÙãñ­¶*G?QÎŽ[*‰©�3m)Ùõµ@”ó/I-¾>çh7bùš@?ï €˜å€yó¿¶�¶cJò_ïþ6l²d ‚XšÊžkW®Ç„L‰-òMû‡´9Š×¶F h�ß�@oü~Ì»ÇFàÝ!àÅ<‹zÍžäš$“…lʶ ÄoøøçJιËÏø$êö‘°‹wò¯ÄŸäßÿ*P' #¶y”CvŸøŒ>^®T�5”1‰×ÀølS[ÏúP»M/�ã¤ÚwÈô0Ç�ήŎ\KÚU±K­ùO õî?vJ¨ÇdQ%cÅ%üˆ•9¹µtŽ4Ïßø‡¯râ:Èè£êâ[u3�œRý£ ]Ù¢ƒÎ|tÐ$þUWýéc–ÓïM›ŠÛì�ÏlŸuU®<±ŽäØfªfOªŸãý[/<üßÔŽó�äŸÍ¦Ü½ÆO£>}Oäo¹ö!Û=æ[“_4®Áó“d’ÿ¿TÏ6ÀkøúÚ"y‰¥ú ^Н;Is={dónÖ4�@#ð›è €ß xw×¼gXlR¹ãçäH`°Hµžä»(ɨïþó¯þ”üû_þ‰ÿ*žÇöÏîþ�·úÿпü¦ÿइîNÍ#´rçQ>[åŽdäÁ;Y‘Îÿu€xÆž">Ki/¶‡Þ<~i#=~ñ�º`O<ñ,à½è�}б©Å$ºðPÊÿ$nvD' ¡Š�œäjûЇw;>Rתd>¡ø„‡RjÛ•®ÚágyŽûL÷üЧ¤MäJW¶ªƒ�¾Rai{tU¦Ÿ´�ù:†K|bÇÙûl›uUžã­äÄK»B}„eO‚IÒšsÓI¾dÇùî©�Ÿ4þ´©ç/çžÏ2ôáçùÝ™Ìü½NcnàbÝÀÙÉ¿x¶:ù÷€~!ª¨Ÿ¸Xpãøûˆ�žÐÊJgÃÎGõ�KbEnÚ4�@#pÛôÀmŸ]#ð¦`aÈ‚±R/Ið¥§xq/™$›»ûÜä倦âY؆ÿ¨;üNþõÈÿã±×þùàHÜQ½X�L\ñj#Á•þÄ»_tC†:ñ•�âM3Yš£üÉ{±��þJñâ{Èæ±\6b Û¦+qè)±*Å¥Ú�c‡OA·�‘þ‡¼=î�î Ö¹&æ/t5‡ª£AðAŸ’yGÆ–Šn棫þ{º#}ÚWZÇUõág{ÆvD“üCk™cUÛCxâ×¹]ú¨öÙÿ!rõ JßâùÎrtÙÌòQå;&;×€l¼yc@v¾›œ“)n'Áׇ(ß_qIþy…;ÿ«òÓt<` …©=$C·k®x¯¥§øú‹n’±E¿WÒ~ÏÞúF h�ÛG 7nÿõß½8:¬,>‘ÂWšCJÂÏ¢“?<~$¥< €Í º¨§Òù®"‹]ü´QÀfÁý€È€]íŸvƒþ¡dþ }¡ðè¡_Õþ“hêGñ¼�›ê„%Wß/©“&¼-Ä™‹ý“x"ƽ,ÃÇã�Ot§ ËfDc¡8U>2”‚¯«úبøÕF€<ôƒ±3nJåOšõgõƒ§¦T9úP|*_Û\âc]ʼn Zíð{•$Ÿ{åkŒ{Ž?Ûªl«®¶?²Wc™eâD—±Vùˆñ8ò=ÿ� õ†žâlTß}ν|çåò³HO›÷Tü�Ô„¹ÎQ, /¶Ž¸ëOÒOå·ÿ©–Ã,9Ž´ñŠxSdñ”³kS‘m|ä±÷‘!^µÙSÇl_uOèüÒü{~O·›67†@oÜØéá4oY$¬øª«ó¬ �ºˆ¬<þøåüW€OJ~PG°oÚ `áë1,¨7”Ôç)'ø$þ#égà‹6þõQ޲ͅ’ÿ·Í‹Ë²@'ÁÛxÙ3†1tN`äëq‰z=í“8ØLkã‰O¬_¨ÚÒGô4«|lÑ_¢´¥>º0—øÈ•�º7ôµÌ2¶ª«|ÚU]åcŸcT}øÚ¾Ö9¹Ÿåê[ã¬bGw‰'˜®|�ì³m–‰7몼Çg“=ß_SùäÜB¦ÖÄ•ï…ï7Gžš§„Ð×kò=– M®òÙ €R±…‡f#Š-¸å³mÈÁŸ2ËV^ñ‘v³«�5çÁTöü'·�7ƒçt¾GofÐ=ÐF` Ð}*4�ÀoA ,ç…àü4öÕBrKþIĹë?±$-´ó,‚Ñ/(IFÿOòe#�M€$þú™Á?JBþQ<ýo¿pë³ì¼|‹AȲ9•Å7å´”>ñÛ§|=)¼2c¥d~´ESiågÛ&3?ÚŽxb/ü©”=z²žìñ‰îj þµŒãaÕl«~ðu>•�ß%Ý%ûQœØ «8±c«5‰?Pðµ¦MèQÜø\¢Ä8Âñ’½Æ_ùκ*W>q&]NÌœ >g僙JòÏwêïeüDý=ÇoÌñ!縚ÝU ^•:ùvà'\³ àóR:_ÁO¶ã´«`ט᫽ùF h�Û@ 7nã8ô(�»A€…_‡•ß›àj¡Hû•ÉÁGU?úŸÅ¬‚û¥bü@:÷?hå?*‘Ï&<�úE7(ÿ(ÆßŠÿ—úú¬¸üæÖòá_p±|f~ZFŸx‰'Yö³¢Œm,¾YŒ{náQaÇ�BûÞIÕÉëÜ�fªÛ“ñ™èèaKÂ0§_�š±Mmì³Ð]¥b.ÔZª\y挜¹‡Òö>}ìùÆ>Ç«úð5Ft•b§’ä‡ÂÏ5~3­±žÂ·b8ÇÚ³¯ô×è.ùÄ>(GÞßa�Ñçî+úÔ³'°ë»Ècë.à)ßëøkÆï¢d¾P ÔI¨pqÒ�,ÞU8AsNp= äºàë"2ÇGÅ×Å…lcùˆQ=˜}Žî´4�@#Ðì"лд¡hž�,þœøŽÅ'q³]õ‘6³ =$ÿü.Ÿbzéøo^莅px÷ÅByld#€ÄŸ»ÿl P?p÷_±þ«¸¼hë/é>ã£>y€ÊBœ%´Û¢”è²`?iǧڰ(Çæ¥·dûI‡œ$ü¬M¶vCy£#Ž“Ñ´“nU¢…Vß*‡_Åx°Ž±¤¦ñj|àD™iÕÙ¡ø¬l³.ñf=r-Õ¯êÃcŸëœôGƾú'ΊâWË ŸjO»#ß=ûJŸ1Ôx+?ú®úÊg\Çï�¿Ë¢œS[EVuâªïX’[ÞûÁ|œ´ŸíÜ‘ì~kwÌ+¦O�Öd?|îþçå�`†P_sŒ†L,b‚k‘-”�Ø‹ÊlÚÏú–�F hn�Þ¸ýcÔ#lÞYxÖ�ϺÇ, �ü³`U²O!Iƒ&ùW2á¯|¼p4:ÌIþ½ 6$þÙ`cá?Šû·*wþ³ðYO° @[§j²‘Œ°tÎ�6±û…¸JÓ–Fû4rÒ3ü¢›iúÛžãÀ�ا^$ÛTÐD;ó¸Ö͈øYïi.Œ·Ã²Ó™âϧèjƒª«||ª®ò±C÷ôñYÙÑÕJâ:×jO?«Xéî¬ÏQ@IDAT§Òø]Â+q�üˆµ²_«¯~{|Æ{¨ôœG>/Ñ ßE~«îä_ß+'¯öøéïïÄh3LwO6¼Ê¼ÁHgضQ’ 0$ùGö&€0vâ/hÃû Q¾Û¾Fä8HGÉu8×&+‹>òLWþsüĞ۶ܼE8Ÿ÷Îû·8ŸóûF 7Þ÷ñïÙ7/†@ó̧tHL’} ¼_ê'™ßþ“œÏôíþõ³‘ð;é—šÊ{Hþÿ#ýßÚø‹—*¶“õÇ,´�üS¾NÆÑ]SÔžR½Y¤[7l¦�øÓþå'Ï+Þ¶oÄN;Ú¦ÒÅÌG}–Bÿµî­s?Ó´�>2´ê*ŸkuñŸc®ôĤr>†^Ú¨q®á3îqw›àwä³g¿V_ý*Ÿ­t؆ÞK_η-¡•ŽsÙÿzêfãwë´9š—|ï±€Ó\œôƒ‡0õuL”MoÀËf^:oHç é³ ÀñžõzA_‘á)ñ;I¿Ú£­× èš6�@#ÐÜ&½p›Ç¥GÕÜ YX>ב bþý“ä�Eq*›áw¨Ï#éÇ7É¿õ< [’oègu€³%2jï„å GËÉÑÜž±kŽÄ®…~£Ûð”ï–haW;�pjVø­�,?Nô3¼wé)Ø>é?cH³*3®U‰þ¥m|jœª«üžOÕ‡ßk‡[­sÂ9>Èá¡�-´­ø­â\òÙ³g\süÙ–CÕ…? >ïÔÔI?!T·M5‡üy›6ßg™ÞUÉw²N:¸e3º½^xñýçZÆ&ÿ0r¬¶k†|á)õúlEÑE†Æ?º´‹Zûˆ®i#p/pÞÏß…{™[Ïã}!Ðïëx÷lŸˆÀÞ¢ç‰aßLóKó?úÃxíÎK}$}9I†¦*áÚøè&ê»bÙ8˜ègù~âß ŽÊË©ÜAûÈbZG*‹j'0Òå¾¢ä'õ_ãlxޏôå üöúª¶ð´+ƒO`?-ÅGìôãQÿ?#žÚÔvØÒü^l{¥¶©|ü«n��ohõ‹ºÒ£«•D?=|µ'ºKeÆ*þi»gÇŸÇÚ/µÍ8æ~ÒnÄȹÇù]7œ´Juâ*ÿœ�ns47ù^ºvŒîož0ל)™?ƒþ%ñ—ޤÿ«(õ ø#Q_ët|rMäü¨×úˆ\±‹Nf—j‹®úÄŽ.|üÞ}êÜ+¦·ˆ[Ïï�J�©x½ð8ܺU#Ð<�½ÅD]­|.Ù¯q½ÀUÂæG�%“ìÇ^iâfaùE©Æ²-èé(r¨TÛ&ãÖÜø’à« ‡Í ÅÐo±ñÕfïSØ|ÓFô—B{Úì—|jûŒé]µA—vÕ^ù#ûÊ6ë�Z3®9V×Ìã{„Û5vbîÅÈXVö9ö%yoìi7S†5Úð=f3ÍI¿tœŸÙpâŠ]ÕŒ•J!æf™†37v¾ë/Ÿ$þ_Ä&ÿˆ«l‚'•ÍKðÞ®�÷Äå:·Ù‡‚.åȆOì5Nø'ñš6÷„@Îõ{šSÏåþè €û?Æ=ÃFà¦È‚0‹FÝ<ÐK>±ïµŸãEÆßwóGâ�Þ:Æè Ô“!Ͷ…y?—ÈѼÕ8´Âv`'’™7ã³ÌŸ+ ~$]´Û*±ç:Å#:þ.ØðŸKô‰5Û‘±á—ø×Ò+mötÕ^ùê_ù•OÕ…‡^SuþœùÕ¾®åég…qÚgLOñ¹ÔGúÚ£µ}å÷ü‹ž³ÇUã'¡5^â³PÎõ­–~„ÐÏóþÎ ø0ÇJá· ñ¾ë/ú¯0â_–òjT_ÁRX±!À¿.õÏ›† ÖàL,Н#’Ûчã ŸZª­êáã‹ÏŠŸý[nî�œï÷2ŸžÇ}#Ð÷}|{v�ÀM!ÀȺxÌÌè"¯l³_]l®ÚÎ:ÿ»1îxËÀÕy·±ŸE/¼l©Èš€ÃÙgðUoãs”~GçÆ‘q%ù÷¢~Œ×XÑûXˆgÁMµÃÉé4/|‡}³UfGlуÇ\ãs‰Žñ.Ýb Å©òi´ÒŶ¢+ÿèBi:WþZg{äUÿG:Ú�åQÁ‡räwä³êcÖÍò©Ç_?ãw@9sîUJ‚Já®v½û�Þm õŒÕ-8ç·cã÷õá9jJ•r­¢ú±ÍŸ'þUe€MMÎpGÿtItÃqâQ¸†ùZ1ñ6||¢õ50 ñ]Ù&×�7‰@ýÞdõ|¯|ìM�[C 7níˆôx�w‚@ý#š?˜×.W~+Ý”I"L¹ã¯ÍÊÙÝ-ŽWjM4FÚµþeô,ÞU˜gÆï…ü�³@PÇ:¿$Æ,þPpýÐGüæg2þ´Ý+ØRW>£¿Íy¦›ƒ˜ØÐUþ!>{íV1â ­u¾Û_m5|bÌú#™6Gئm�½çŸÙ~mµ¯ÄxL[Åá¼ãŒ9}ëN‰+<‰«ïVcuK^é�úLâOŒð˜ï¥x^c2á¡©l”ðxôß?�ìŸHTîüSyIà†!¶‡óÑßÚ^¢ehìUŸRíÑåZŸY[ÓF h�×A 7^÷îµx×dÁ™…á¼H\-,,þon‡~¥‹(‹`;%ÒbóñÝǰÙo4‚Oª×!e±žy�PXøg#À‰ƒdæ>ɨáC¥½ê‰³è�•n³*vÚnºoÓ]Ë�z’NŸ—tÕ^ù#üž=úPüÃCk=Jþç6é÷1”Xãø\Õ<}ïµYÅ›u—ä:�ê~�ª�ÏÅA ãM�•#Ïù[Ÿà»ìŠ#¼âæ‡nç6ö;+Á‰iå; õ‰p8{@2ɾß_Uý4jüϰ ŽŠÇõ%××YÆü\ÒýìWms»–�{F ÿ²øžçØs{»ôÀÛ=v=òFàM"�g¥×N$‹Ëº¨DWeb­tµ§™Zøú=ÆSÄq•jãÑÕÆ·ÀkL”$ðIŒà]XÔ?dûJNò�œ*ÀÎ’¢ÛŸ†£ü¢#öHì2ËØª=�V”¶TJhåW:;��#{µÕ˜µýЧ]چߣl¤Ö>jûU×êˆs-–‰™¾Wí/q¡sûY®¾ ~;·ÆØr÷ŸsØ k¡>G%û»U_9׳ °èâ.TNš ßd°âî¿_(,xó?¿ý÷)�—Žä=¿lp�Ÿ©Úpë5µò˜#Ÿ\Áº\ë·nÝÚF h�ß�@oünÄ»¿F Ø ÉfñXéf<`Ò&.³Œ~¥‹¿¶ñôìÖûšÆ”ä½—½èR$«ƒH7A½°ÏHcL)2£ÞF>æ°Éñ”KÛ<ÿ*sÄu˜Ê×øu|ÑW]åc§Íc–·R|ª_äkéÜo�Uûy(Oœ=,�b¥ÿ¹íï¹äÄÙ¡Ûù¤ñÀ“ÄûLe|ªÜ½æ»ë*ûÆ�ÏIÅÞ6˜»lgÇ Ý�°¢nâ¿jÞü Àwÿ%s]ƒÿ$]’ÿlÇqLÎ0T›\Åžñ‘¡´¿¶¯K#pÏÔïL�gŸû�æo�Þ¸å£Óc{vÞûÅù¥ç)~‘øÍ|ÕíøŸöGò^Œè½DÕ8êR•xÔl˜ª>TØáWôú%²­Šú~RÉ"}Ä ÆšÔϰ±ýÔœ’©!ãÉöÇÐ9ò^eóhÏ–¾Wñb;¢{XÑfŽ9ǹÔöÈ>Çzay>ÇèŽó•J’‹=r¥øù|>iã0îèóÛ~~@ÂÏ&"\Ÿr÷ÿó°³�MÚ3Ùü²Eùs�_Î-ã ¯’k«mE¶ñÂGÚÄ-±"ïÑK~sܽ8oUïó¿÷ù½Õó®Çý>è €÷yÜïbÖ—þ˜ÜÅ$ßÉ$8–,îzLç6—ä ç¶–’E5…þ�ä‡JÇÝY ib8ŽèM�]À.‡Æ¸±TŠï/ºEkû—ø*ÈË~Ò÷Á8ƒ‡eôµë3Û/É5Põ…Ÿk~høêScÁ×x+yö¯rÚ»j{iž¾k¿•çñ¥ýLñ“ÎßW±õœs�ÛªÚNóÁ¼—äŸé‚õì)É$óàÉOø�l|Våg_¥g£ \ÇrŒ“üCùú8p¬ì‚DØsÙÊ i7Ž#eÖÇÞ´h�Fà÷"пïî­h,³0Dµ’¯‹ua9Ë{1¼¬‹Û$Ä¡²H6< 뺀¿}Fð´âmæ8àË�a>Ž{þÑãO‘\°Ó2ÿdZ~Ò.m«ÃJ‡=úЪ›yäÇ”£ØØ’ð'ùÅ6Wú¯ñVòµc$Nð¾¶ÍCýž»�Ä ÝON›‡¯ÏñУ:‡J婢�7tn�Ü3c ™ë”“éùïüD€êä_2ì}^ Êwžkf¾Ç¹&çZ0Ë s±¤MŸ+1š6�@#Ð<½ð|Xv¤F x Y|Öfu±¾ÚW< Îk}ÓÞ‹fÁ*§Or·Ó´&ü+ž6©rËÌSý’œŽ13 |̃I�TÈ.£½uï¤BNñu,ÑoÊ?Û«_l¡G¶ø@g¿YŽï‘Û*ùG_m5FåWãH¿×Râ�õï,sŸ•÷Æ:ÇÁO:wŸ¦Ìx«œ‡¥ÆÇMüQαj¼S\ü3Qz_³Ä£ç:õY•;ÿÛÝñÞÖü\`;Ÿh+ßü,ÀKÎu™2ËV^øH›¸­bÍ>ñmÚ4�@#ðòôÀËcÜ=4�À,ë>‹ÃÊ„°©úV~¯�Ó’Î,ªý¸¿t6ìõ)ZÕ*ñö˘k(sð2Ƽ:Už¤`Ä Æ´Ï ÙâêcŠ0’ˆ´Ù(¶ÅxPo%öÐÍ0˜ª¯üì·'ïµA_kîøWZíáç~Ð×2ËÕVù`íf]lÏA_*~â†f¬³,}žà\òù_ÍÛ:記Œ¬âØWú\/Òì^iðÉOÒ&n5ÖŠ�_ÓF h�߃@oüœ»—gF ‹ˆݼð¨öæo�OŽ_Žã¬»fôi_}W:ìI"â‹LŸ®Ãv÷_ã‹ìôh ÿV‹qÐàýÝaþLDóIRvK’Å\åç2xf¿%'‹ãäÉ€¡:‘´Eªü™ÓB¨¾•Ÿ]gÛ,ã¿ÒÕ8ØWuµ �x5fåc¯ñ�xÚÎçÓJwã©¶¹¿‡È³oK±Õó —ú ‚ç|Ü(ü¨öq|ŠßûŽã{oLÎ6$3’{®M$ÿ~@4?È;¾Kçë–üÁ¾¾ âO©×a+®øH›¸ÖXs³oÚ4m�F x9zàå°íÈ�@#ð@X f�úÀ›û¥ö,–Y§xAÌYŠúcJÒµŸÁÿŒ Å.ž‡ý^öƒÃH¶)!¼‚-¾ö“Þ¼d·§1&µËˆ³ËWûh²‘Ù6Ë›ãsä�-öð«¤?¶ÐÚUÚG7ËÑQÚÌøù?ÕöRý%nhÆ9dŸ3ņœóÇ<¨†ç¼£øüƒª­Ï[kßLJ±ÐTÙ  çî?פ…ÿàì'’óm¼ �ÿ€ü³ À¹Œ“˜Ï2í/•´‰_�U¯ñØ},Õo—F h�߇@oü>¬»§D Œì¢Cÿ&êñ1‹Ã‡´©ç�zŪèY’z#:Ul«*õ›/^Š�D‹É�`XgARëøˆÇNÁ'¾Ñ� [ëŸmÝ èí¸øH_3�kô�•Ón¦Ä­µnT¾ú„¯±Ð=¶Ð¶�§Ê��»×îRµÏýÌí±K—d±~sþ@]5oüòÝ6¯¶ áŜøƒÁ¶)Œ’ü‡æî?Oä�þÝ¿|Ùe s,r¬S›Y–êbI›8ÖX9^¡ñiÚ4�@#ðûè €ß‡u÷ô˜¿¡Ë›êâÖçi|«…"g±û ú¥¸³ä¹�~%xU?�úùãÇŸ?}úð—èߢŒÇóýûw/¨³øFÿê…$늲絚Aõµ]óDçÇûGâÀÅ­m³½q¬Æ¸Òíµ }í~U�ÿÕ˜æ˜+Ÿ=]Î%b„Çw–çöOµÏñ+�cÇæóG¶ülÄßuÎ+æ?(<5ßÛÊ?v¨o±XQùú»8(É~^øgŠ,Lý“ñóKý˜ËfœáÁ[¥b\e/|$FÜ+òcéSãÌãzì8^«Ý½ÏÿÒüÞúñ{­ó¦ûmVôÀ •ÖݲøåÒ‰ø5}Ûpœó?üc�=qVmg癓%û)Ùÿûóçÿùë¯ÿ«úïþãääO%þT¨² ðUݪðÛýŠÑ'áˆk•+¿²G·QãW-sÿȵ&鯺=>Áž²ÇǾ¢œCi7óøWÛª=ö£óðÈ>Û*¯Æs�nîg´É·)´†ÚûNWŸ{åÁ#gYÅž'|·_” �$ÿÿ ãÜíÏ& ²7DÑùz+Jìz핸ÉðGe¾¦â›XðØsìBÑwi�F ø}ôÀïú{j�"�Å"ͯ˜ »¹Ï±�?*ùÿ4îú{@›ÿþý÷‡¿~==~ûíÛ‡ªßU¿ªreý‹…�‰Ù–M„½KèÒ镵ŸðÐUÍFt¶3¤ª‹œ¡b›u±QΩ´ _ϳj›ã`«¾µÏþ×Ê«~Wº�xù…î¸m äžýžõ`3Ψí)€àõ€Ž=›ÞþÿŠÿG:o£‹úȲ¡ãÉ’q6¶§yàeKò>_+eZ–øÇ8·ë¤?È4m�Fàõè €×þ{>@ Þñ� ‰y1�m¥K›¦oŽo•3ivu±Yù´›Ï�<Àcÿ<ð×xà‹’ÿ¯càYãú¢@¼tËO$èS'c~•G9ôa÷ª%ý‡2økë¼P'“˜{´ú^Ãëüò¸*­íèÛ\öôñÛ³Ïú‡Ê‰‰Îq/øg†«ïñ…¦wi�|×Bѱ@õÏD·'Äó¯L9W²@âÏ{x€ñŸ§ö6QË| ­6ø\»£�=Ž•�_ÓF h�—C 7^ÛŽÜ4Ï„Às-çÅ( ?ºToð€’~÷Ïoþ¿hà«~ð�»þšÏwµù¦ÊK¶¸³öIí½ðÀ„æ™ ¹‰0I@>«òPý*ÆSté¿Rø¹’ôSg}•3t”Jß,ÇŸ:§v“þÄÁçRÁ÷Èï’ýRü#ûcgv¡Ì£Åà`ÂV)–$ÿÛO„™7)eó“J:&´Ë£ÿ\»x!`ª“ÉŽÍñSÉF@®ÁV–�ùšÓ%ÿ={Ú7m�F x9zàå°íÈ�@#ð̰h¼”Äç1]óHìö%þs§_‰ÿ7ý¾ß‹dÙ¿&ù×Bùé?ÊN»÷Tœ Œ ¯øª³[ð ½°êXÂCçz)ñ¯sI[t{|õ¿†×y¶m$À§?råc=²á³²Ïº‡Êéû:Å.3¼¦õ»õ™“ÿ|çØà®~ÿg‘·mTJïä_˜ó4>ØiC¼\[} äë˜ò5͹&?Ê¥þÚ��ôyŠÚŸ�@#Ð4¿�Þø(w�@#p—•W™œ²À¬?ðÚpò?^ðÇB9�ý“üVòÏ;h÷cŸ¦òæÄ$Ë�“øÍåZÝÜî!rí>òŠ�š�úоòèR.ÙãwDI¸3Érø£¶³íR»Kö9Þ‘üØX´›ŠQéœL.ì“û»ƒÈÁS³Qéwè\ñF€ôÿ¨’üóØ?•»ÿ~ü_”6`¼½P¾ÞH…¢²ÈV|L6éä_Ä‹lÚ÷uó"TíÐ4�À³#ÐÏi|.Hª.•^<\Bèþì^˜jQZif]äP›×œ+ÛOÆ;¾i€7ý“t±Èf€ßü“üÿŸ’ÿOT=%À¿¦/éý~ifXùmÆ×&m×úm�ŸÈÌý!¯*× ô¡ñ¡{øJÃG_åÚÎ�®üй撘ÈðU¿âWák»kì³ÿCåUOÐ $žá~›(×(ÿ@çEÞS²Ýõ—.É?ÿ&� *í^Ç™3Û×Lh‘%º¬®¥Ièãs‰®b\jÓöF h�çA 7žÇŽÒ< ½(ºFpªI}ø,BW8®li—^iç7c+áËOø�T^ È^ˆÌ�|œü«Ý–&ؤ#¥Ý9I‚“ƒ]�Ëöƒ¦¿×”c6Ó9ÙŸíŒÝŠž´'{mWõáWT ˜KâÇ'úÈØ£«|ìoœN³`žÁþ¨Æï�Ïÿ±Ã7ê¶ ž—úš&ÊcÿÜùç)¦Ïª<€o}|‰æ¦EÎõ!×RÜ(«ëíÉò°Ï9îÜú©ý<µý¥ñÍã½5ùÒüo}~o}ü·v>ôxÞ7½ð¾�Ͼ¸ X°xÉ¡.d¢ËD«ºøÆºñ²o2ú!Kižö”,ŒOR¾ :&W|çJâ¿—ü×ÀégE£«þðékÖÏrÚë\þ¥Ì6äÙo¥û%P+î�ºÀ]~’îú›jâNü%çî~Àu0×BßõG–?×?Ó!ƒ]®�ð”´;Iûœc=¬u{7�@#Ð<�Þx jݦh^/Lµ(M©r]T²8­2þY°V}õ#•´M‹_¨åè ª2l±ËoF@ø–={ôPjMú³ ŸÐ¹Cô”ÐðñŸ©�ù‘s�˜áW¡.ÙWm^Z—1…^ê�ùá[ËJWíÍ;QçŠxöÉþ1�ðû(L¹ûÏ�*?ðƒúº(¨¯¬ƒçHä§b·ë'|½†"?´äZL»§Æzhßíß4�À{E 7Þë‘ïy7w€ ƺ€dJU—e|"gê+½}šļäÄ7M�¦o�q,u�O‰f݈.´Î®¶«zøØf}•/ù�äÚ'^Ñ£¶·d˵æ®ÿÞf@ij6}„¢¬ñVüc–k¬Ù†¬óùªBœk}¯ øH§§Žƒ9\Âä‘C»×fœ!uÀ×§�#ïÈyQ Ÿ��k +Àóð¾Öa“ŽX¹VžÜöL?ÛìP>Žbl×Öâßl#Ð4�Àó"ÐÏ‹gGk�W@ ‹F–ðY`†��¡Å–aV:Ë,vUY³Äõ2wè6ÿas|»Ü>§U�“ÿy€™å‡îéŽP¨mW~:/bà7Ó‹ oÐ!s¸Á¡½Å!%ñ÷KsŽh"ÖKæ‰îü§~þÛϤçÚXïöÃϺíúG\ùSªÎŠòŸ¨fߨ£GŸ6M�F hž�Þx^<;Z#м",ë2|èjhØR¼ðTŒ¤ó¦È£â‡Îr5½-t¬®*øQk²Ÿ�€ØTùF7—èâ¿Gçv×Êœ§Ä,çëYÓÙ6ËgÎ/,¬ú^é®Fæ~­ÿ;ös²¯ùû ¸åwþyÀOÈ–ú':>\ ]i?Ž×Ù&€ô¹^Ú>p®ºðÃtŠ¡´G5LjLŒð¥i³�@#Ð4Ï„@o<�¦hnŽY„†¯ôÒ(½pV /@CÕ}tg1X(wy=*þ•?~µ&ñ¯4ö§ÆŠ_åçv{¶Ù™Äm.´�>|èì{Ëò[ó-ãYÆÆY“ Ô–uÎp矻ýÞ�ìßÿKÎϸ^ºJ7SÞ àóÅñ5�Øè‹ �.v䔸"Wûž?~G6ì]�F h�@o<»nÙ<�ºøypã;hðÒóŸšYDVz#ã£ò/³Bý?´•þI¶3ª€~Ù–h¶NK㣞Úö[ÐqÛ üª’ü¯ôU·i¦¸]¸þpןO%‘÷Ûÿu>“øo/”¼ñ#ÉWö-•Aób@®‰¹ÆÂŸ\N¾‘«ÎúXÙ¢«ñr�N»[£óÞ¸2—=û­ëßúü.�ÿþoýø]š_Û�Š@oT4šo�»B€A•¡GÄ?5‰ÿG%†ŸT¿A?~4�LÅÆ¿ÖÚª‚gÁM?c½Ñ£¾ÛöHHRF2â„%|ÂUþ¨êxþbOœ™¦ßP앯þè)u,'Íù'~ñ=·œëã:ûÞ²üÇ|ËxNcãLËv×8ë¼À&e~ À£ÿ<�w|Ïà¿ð”×JhÎg6r-E=ó'×ôv²£;*óõ8r(m+«m�Àk P¿¯Ñ÷Ù<�Þx zݶhn�ú‡9|èjÀØ(|ÂoÉ?|ý$ÿ¢Nü¥ÿ${MþYd³ ÎRxæeêò;ÇÕ]V>c ᯟZñ«í”�ɉ� úØBÛ½J̣سm–;¦Ç´[õ½Ò]»ƒkÛ¼c¿Õ˜äŸßûûå¢$þl�üó^6hKâÍoÿs.r=D—sß¼üê55×ÐöøF_ý°U9>{úØ›6�@#Ð< �Þx~ݺhn�yqz´¨Ì"•6,vÿPR¸mˆÿHòÿ훟ÈIþC³ÀÚ/Õ*¸¬äÅÜìK#@2C�>´žZž’¡ÄI24ÓøîQüŸZc¦O�ûí3‡×èûÎû\�i¾6iÞËMéëÉ?ßîþãïÍÍq¼’´×ëføÖøF?_‡Ó.×ëKþ‰Ó´h�FàñôÀã±ë–�@#pãdQÉ0+ŸaÏ‹M’CtgÉ?ªËÇÿ‡�ÇeSýÛ[Å`a›ßá²�^-È3ަOD€Ä$ÉyBE^QtsÕ±<û�Õž˜—èH�vÝ2–=ÚÕ½v³þÒ8fÿ—’Ÿ:ŽKx½Ô¸ßpÜ\gækú<�—ÿmOÈ–'ü½Ðq#ñç:èÍLñùoõ:šëçœÔ_‚oå?ëfùR̶7�@#Ð\�@o\�U{6�ÀD`µ`Í4XdÖ‚/•…/wôùÝîø‡?ðOdŸïþs—,å»ìyyVtM_h­$ÿUŽ_†[eÎä=š6+:�o+—C]ÚïÑÃÆ7dÌøohH÷6®ló&Àvç_6¿PÇÁTò¶ íþuÕ¹žMÎû\3çëjôjzVð[•øÏvô³nÕ¾u�ÀïF žóé{¥‹­i#pËôÀ-�[#Ð< YPî-:Ó KU|©þí¿(‰?5OdÀ/”=�þû Új»É^ÐWµX6—f‰8 ßÃ{¥ð{•�Jõ?iŽ?ëXêñ?nµ¶Ò~Uã})þ%{âüNš1…^ê;øW¿•®Ú›ß˜¯3ȹþ�Ìó$€Ÿ%ñOå'¹óŸ ÿ,``_¯Ÿ5Q¯¼Â�•´‰2×âÈ+ûQ¼´kÚ4�@#ðxzàñØuËF xcdñ¹Zt2'þZìnÿòO !wû¿ëÎÿ�ïßn }ž¨›$�‰Ÿ…÷…4õ�¡x£Ã%¹á)+ÿ#Û©Õé¿øV=ül[ù­tsœ–ß ãŒô|áÏ~ ¹ÞýÏIüÙ #ù÷†�(×4bp�L‚žë\t2»ä:¹ÒÚ¦êW|úYÙZ×¼ó¹þcè>�ç@ 7žÅŽÑ Ž>÷Ò­ÏïÒø²øäXTßèÑmU‰¡7F²ÿ£>þŸ ù'ù÷{Æâxû½lú¹çÄŒ¹iÞËrd[6x&%ãɘÂWš¤åS‡{ÕÁ×yU>~èjIœY_}*�_­Õ_ãT~ö{«2s˜U$á�ê.‹¹×ïüÂ|÷*°Ûîþ c6r÷ÿñ$ý<�§üT“älp­óµ2ÿ𢹠äz*³Ë ÷êSíè3úªKLhìU÷šüSÇS1yÍyìõÝóÛC¦õ�ÀÛC 7ÞÞ1ë7�ÀK" …l’ùü @’g<þïš Ñíi�‰t~ûÏbÉ‹é—ë�Äfá_µ³a ·$sgú*\ãSý¯åu ¶;ü3�œzm¼:Î�ŽB\Jä“tÝ'mRÓ¢Ê5æŸv•Vߪ?ÛŸ*'î#©‘d ÂÞÉQp}dÌ÷Þ ý€på€$ÿÿª~’̵‹âdY•'xÏ mÎŽ�ôÈ>6â¡\ë¬C¯R“Å9±­6|«›Ç Ú¥x äœ} cí16A 7‚DÓF x7̰³ …¦:±gQK’/º%ÿc`{:@m²a@[|y€»fŽ ½wd5G’­ÜOtžïJÿݿʌ#µÞé‡O��v•¯qàWcœ}"W_x ±ÃŸ4—?ñO›ÊÓ2úËQÎ=.µ»d?�v,=6íÀ«P4’Ã9´¸6{%$×ß„³ïþ‹ç.?×/xð÷ÝñÛþª~ @vô%®qNúC¥óõnŒcNê‡Ú¤Úª>|âÄ/rìM�F hž†@o< ¿nÝ4o—Yh2·(QÌB˜»ÿ,’)Ë»ÿòÍ”ää—ä_úG'oîùö>²øßFFb,E�$ £yÙ]ÀâwúI%ñ‡�úÐÂ<Ò®òÄ©s ÿ˜øi[iøÄ«råc=²á³²Ïº‡ÊéûºŠ ¾èÍOjü=E?ÚŒ3êš^ÚG€W~ðU~¾Üù绬¹†q½cqøY5É?Ø»JÇñàlTºí»/>%‰{½¾Æ�½êàã¿gŸý[n~'{çz=_¹A�Rùèš6¯�@o¼öèþ�Fà·"PÿxÏ>G1/�;…X)iSil—hâÍ4í¢�|D/ù^²žd{¡Ø mĉ¯:п4š¶ܶ É[ò?lœÁõÎÿgáËOø�þxKö5qPÚl:ñ®¡”$òðÑÁ§T{tÐ=ß•¾¶k¾h�Fà:zà:œÚ«hÞ ,2“ü{ŸDƒ"}6 ù €7FoÈŸå/qLá‡îî’æ¥y.çn²-Ë‘mÙàJ%ýÍ5 ¥Õ‡Ð{ãÜëv5þè*Ýk¤§=%´òUg§É/ºÚ¦ê*¿Šµj7û]’kGüG¾ÌÜU¶$•g´Ä(§�/öf×€O(ñ3€/ã€1: ¿û'ñÿK•§òöz,²ù‚.|ô$ö‘‰ü\ª¶•ïì3Çh¹h�Fàzzàz¬Ú³hî”Yh†‡¦’Ì;1T²E?ÿàì)€´F¹³¶“þÞŠšŠãcöÄo¶M>bâzä{­-Çš €ª )ÞjLè(ÄH‰_µ…�Ï%Zý÷xbTÛóÈv©íë!òªß•n/&¾Ïê‡M•ïì@~£ÖË·‰Ú²ù�¸å €ü„Ç:aÊ]~°ç±ÿ¿Ty9 / Ì&€q{ùäºÞ¸=×JJüࣃŸKõÃvä;·m¹h�FàáôÀÃ1ë�@#pG°ØdjªyA]•0Ö'Ðí=à;ÿ²›ƒxÐQEî»h¾í4Ç‚¥Õ6£pd›}"3–ZIþ‘³ Z}à�ÊÞXÑSÒ¾Ê+þä}ü™vxU~%Ï‘fÿ‡Øç¶•ç¾®•ç~h‡N˜òÝt¢‰*ñÐ >4þqiºF¼œì‹‚­7„3/CîüSÿVuò/Ûö€Ñ†¾^Ê>b7=<?Êœä[¹ó‘6;æV7¯Ž@ÎÿÕ@úü]¡Òº[C 7níˆôx^�÷~á~÷ó×ÙÇb¼l”Çü¿ÿîÇþm“>I?~gU‹âÈ9™+½RÍ[Àyî$geج«|œVºØJ5h­Ùˆî¡q/ùÏs¨2ücÊÜn–ç˜OµÏñ+�ãÈF²'áç±s¾gPU6Ö°§Fý¡ï¨�>ÇÂŒó’¶O(oýúÈìÁ1™MNð%ɇçg$þµò3€TÚ¸JÇË“ü£Ÿ$úÁj–åv±¤Mk¬ð±Ý½4·—·6÷{Ÿß[;=Þ÷�@o¼ïãß³oÞ%,DXLÍÔ‰‚ôÞ¨T(eñ²% G *öÁ£¦X7¨wøÁ½ðŸ¨´’„áctè«êe¦öŸéÊ9q±Á_[W±«Ë8Ó~–£¿†Ò¶–Y®¶çàçøO•ç1Íñ°W¼Ž³æ»é„_2‰'%ßU~£ŽýO%ûXœÀŠ¢÷ïÀW•Xþr`³Ê¬§2|"¾7j¬5i(xSÙàiWáÆ†@*“ôƒ9¼Ë 9>èfݵÉk®³´IIÛÄ�úðñmÚ4�@#p�Þ¸ŒQ{4�À� �d�Nt^HjAùKò?ˆ³6,<¥Ø*‹`t¥"»Ö†wÂ3ï±üßfô‹,𿹀Mô+¾êŽÚÆ–XУºz më¹éÑ\öú¢Íï,/Õ_â†fNUžxfî»Ê¢Ü™æì¡rGÚwœEIþIBñå­õÔï:¶þõ:žn3Qž$À› vµ³Nü{*ÆxLÞ›-ƒ²�»ýüpgà_Õ�œ?‚—d¾k¾æ‰:IG¯2'ìè®MÔÓ–6”Ú. (öÊ#wi�F ¸Œ@o\ƨ=�FàHâÏÔ6~,hë& ÝÍ^q`\êYò?ûUùÎx–ü$µ$�²Œ(#90f+þäµÿIœ´Û÷úÕBÒŸJûĘù_[>N³çJ·=xUûJWíÏÍÏý=Dž}ëØªm�—?II©Ë8^è8“œðCó€ìlX/žï*ɾ©ô‘�äÒ§l”œ·ùnCßC߯í;›äŸÙoÉ¿°Èlä Œ¾ÃFkP®}Þ`Á¦,í;äðv(ñ-ª3¶¶«Ç ý¥¶g�Zh�F Øè € Šf�Fà= �E$s�y¶,a“ØGY4ã�m¯ÒÞmXœR-écè#Þ ^Ì™+x�Í3Èî2|Ï|ª{hµñÄh=Š÷ÛjÌèSÛîÚ¾^*~â†f¯ä MâIâïDTÔ:¨*ße66¼ñ“üO  ¯[•ßlC™:,Û&€x?ú/Z7r׬Iþý/EÁ�X\?“¤çº�Ì.¹îF†Æ·êV|Ú¦�´�~Õ¦u�@#Ð4çôÀ9-Ý9÷¾H¸÷ù½ÔéYqóB”Ä@ Z’ƒí'âñs"ê°(ÉÆ'ÑO¢ŸUiÏBÚ�ÓŠO¢r±*(ó­ Æf.[v¿ìÑW>ŽØbGyEg{äJá)«¾N–ÓgwÕ‡¯cŠ.ôRÛøѧÄxJÛ£1=Ô6�c–G¼r†œ6„m=Søž%áÇוX$ùJöW”wø;¬Xþ^Šz³AmØð&ý�ãXû£�¯ ØwJ½Žì¸Ü´ ³ à—J&ùÿWõðõu^•§,ê&r®ŸÁjÃM¶à›Â¹<·´}H›ôóÖé¥9›·:Ï{Ÿß[=.=îûD 7î󸾋Y]úcñ.@èI¾,Z´’²pÍ]I'þJ>}üøá³ê_ÔOŸ>üçóç_¾éþ™üYˆm$ŒRº÷X¶¤ ¸Î%øÄ†~ö�Œ�„:óÑ…¦ÍŠÖ¾æq¬ü÷t5ΞÏcõ×CÛïµ›õÏ%'Î�ÇÏñ‰oŽÕU[Î!oÊ žpÈ$®œÛ™¥˜èý]”黾‡¼<�ó1É?CÌKïJ˜kãc�_|`ï¡[M$/LòÏ£ÿTcV`¨JòÏæ'Ø»­dc$Š žNJÁmè¤vÁ–ò�ÄuÕ®ê³i#Ð4�À>½°�M[�Fà�"ÀÒ”,ÅüXÀ²ÐôÈE}ÇŸM%ÿ+ùÿ�èQî>r§‘„ƒ—iq'�YVa¾÷’JYèŸã3ö(ã‡>|l3Å>W6RgÛÜþ9ã»4–9Ö5ãŸÛ\’3–K~Õ~ÔæÈVcìñsûYÞkýÊÿœ‡�Ï,ñùŽ’€þL'G2*�Ÿ.Ê�k|ü=T;’W—Å›Êu]ñÃßI,~ò‘ó–ÔÒî^ 8ù%€š`~T°@§ê QüÙðôÆ GµŸ“ÿŠSMú«þÔÉñgÚ>´ÝqÔ¶6�@#ð~è €÷s¬{¦�@#p,*Ï®’ëÂõÀßå €$ÿ_õ4ÀG%þI6X+ð#¸æÉ|k‘.š$Õl>íö(N‰ MÍSÙý¥ƒI‘~PW¾º¡§¤ß“tü¹ë¸ÕÚšþ×Ö_µ—üWöYwI®½Vßð—hm¶i“cºGK['þòã¼Ê¹…™#Æwšä5ßCßñGO;Uì¦#Nôމ}øq À¯ö£¦ÖÑϬÇöÖ óðoú5Ïüë¿àÅü)5ñÿ,Ý–üƒ÷ðÙ6‡ãj|ÄÇî@úOʬ·òà#í\ÚÔ4�@#p€@o€Ó¦F x¿°4ÍÂ>4‰‚÷¯$“Ÿðø?Tžø¦ÄŸä_Ïü¼ƒ¦Eð=$—ΆåGR Õ¾ñ$F°u¼ØmXF°ÛÙ‰Ã\³ 0ë«|d!0üWå¡ã<ŠµŠ¿ÒÕ>Wöè®ñÛóÙÓ'öL«åg¿kd°®1fìë±ïÄò .|WIRëãÿ¾c­ö¡[Ò/_§iƒ]u³Á«§ÚœÐJç³D”âäxðV¼áðËO<ïéøðSŽ\ߨ$À7¸;‘P°4•=ÇB¬ 6JMü£³á�‰ó”ì²Ý�F xÓôÀ›>|ïwð«?ôè²x¿ÈôÌŸ¨,|'Ê9Æ¢8yÀö€îøûgk<>ûI1|çQúwS‚žù)Ɇ1.ú­MÚ†VŸðŸÜí¯}­ñ‡¢?*ôG9ò»Æ‡GcÇ~TÒÇKú¬ú˜u³¼7žø]¢{íƒ÷|ܪ<|ÆÚ"!sTS-kßåOrn½hZ?€MmÎxéð¡:i<ç:Ç¥%ôð\9¹¾‰OpãJåŸ.1OŽ¥(W±q>sMãÎÿ_ªükÀ¯ªÛSòŧ&üðÄñ1Áî0ަЂîÃÆG|Ô8�hÞM�F xwôÀ»;ä=áF ØC ›H,K½`­”…¬doðûÿñ@}  �•oÍÆÏ? -‹]éÞeaÞ¿Š@pÞ0~›\™j˹f=|ìÄ€ß+5nõAO¹ÔöŸ£îdúHß“z/Ùq¼äsɾu¶ÃÔö•ßqßUƒMÚWœà•£ÂÑôÑQ»*ç(CÍ˾ñÒy3JUl(ö*çû� ¨Ï§á'âB;ÛDáï¡€¥7D3'’ëÀA<É6þ¿%ÿâñÍ5ÔÇEm²y=8ùZ(Š-%ºÈM�F h^�Þx9l;òoD ¿ìwÒU¬Õ¼áy ÿî*ÿö�ÿàÇÿÇO¸óOòÿYwý?©² ð.ÏO÷Â)wIœŸŸËþéd’¿ËhKbœ•ÈÐÔ$üÐð±ÅŸ •¯AWýÄŽ�²×ÛQûkìø¤¤¿È3}Iûû’¼7¶´›)þÑÕ¶`=|°®´è·ÄqØ}„Ô¾ž)>ïJÈØ�ì‹ú»\älä_Ùñ½Ý’žà¡/éð£Ø6bÂ×¾Ooó,ó3@þ¦ùq§Ÿ9&ùßîþcW¥ ¾96`²âs=•«K®�ñ�þˆ¦Í‘OÛ�F höè €}lÚò¸÷…Á½ÏïÒ)÷Òóß[„Ò/6(Õ›JxÀöïõûÿ¿øí¿’…-ù—ì;�´»4¹7`¿4'bcñ�uÈØ¢¯¼› g'[#Î’Ohê*ñ�-þË`Cy©ßkì„Úë‹öO)×´¿äsd?²Í㮾•ŸýfùÈ7ÇŠ63]âUŒS:#<ä3´‡.ç6¿'@~«òû¡óˆß¹³!áú>£³jðH¼ì“ï¶7ÄççvÔÇ8COboô¬Í¾{n­|©cÎ$ó)ÈÁŠÍMžpJ%ñÏ~yàÀ\¸^Ò6×Îl’䋞2ËV^øH›¸]+~i÷P:÷ûÐö/íÿÞçwëÇç¥�Ço‚@o<­öýí¬þ ­t¿}`ÝáÝ"Àù•…ÄÌ#Sý¯IÆÀ'Ýý÷fTÉ€û'ù—þï­0c'O$`6(¸Æú 6à…?%Ø�ö'åøÄ–Ã,GºŠÛ5ôšö×ø\ÓWõ!æ¥rÉgÏ~­~åWuá/ÑÕô‡œ¸é?>ÑWŸjŸó,”¤–¿0$´èæJòÿç¸ÃÏ÷žŸøûO»Á{£@<ç·Fç1V>ç�ÏÆ(¿“Û˜Ë�­|Å�yî{²74Î_(s£RÀB|¾û¿ë 0¦ô&€aè�F h–ôÀ–VÞù£ZÇ·ÒU{ó�ÀCàœJŸ¶èRIì�à“èó€îü¦~ýjžM€?¥Ç�$á=�£,¿�hño%_|`,ÚƒµiI$ÎôU ]­Øj¬Ê×vOåÛ5±¯™Ãj,i·²ÍºK¾{ökõÕo�ϘVöè*�±‹J<ø*§�ØoOŸ¶ñ‹Œ¿t#MukY·-�>øþãCâÊæ€ïþ‹ò¨? ¿7†�øáãïºxÇÔóŸŽøöW\ûÄáF¨ç¯±@k²¿Éࡺ=À%gNÆ@2ØOÛˆ)=e–­¼ð‘6q«±àc¯||›6�@#Мþ�kãм úI€7q˜îf�u™I¡ûcÜÙÏ&@ÞàŸðžÈ�¨ÛÐ.AÞ e¾Y€³Ôß6౩:Y�\ ÉÄ^ÁVí‘+Ýk‹žä£¶?òݳ=$ÆHvöB=Z)îž}¥¿VÇ`«oå÷l³~Á¿Ò£ã?ÚR"ϱg}‘O)gi+6ç&g[θí¼UloÈæ ¨t´É](�ïr«¿í;?¾ÿÙŒÝ}ºÕè?cº×&žK0ôÞªÆíŠÏ»Œ£d(8:–¨‹üÑQæëkd/|$FÜÒ¶·Yߦ�@#Ð4½Ðç@#Ð4‡d!‰‹Ú,æ¹ÃïGýËÞà)llhÁkÿÃîÜH2ÀÂüÆâ¤›œ0\…bm>ò¿5xf†ù¤ÿg}1ÜÀr×oϾÒ_£»äSí+>º^9vGto¢5^úÀ7úè"ËäóOzŸ“Ã7|(çª_ì'ʇLìÄÄHòOˆ69ß½a­6b9縩| g›)eŒ‰÷Z48@)Ð-ù×87^sä¿ ³ î`ÆLÔƒæzš$~–éëRI›øÕX«M€ø5m�F 8!Ð?è3¡h�k`Q«Êb>OÔò3€�Tÿ§²è§ª ã÷Rœàh²¡$9æ$”$VG˜Å]ñÄ‹~{$++ÓƒtÏç!�üv›\²×†+ßYWåÊ'Î%ÝÊNÛ»™&îCi=ÞésÒqÎÕs‘s3ç!z*Åüˆ½ï‚Ú$ñ$Å?ïï;”ë6Q{h,Øø¯ÄDg_ßH9Íd`TÆ”„Ÿ9†Oâ¿ý @þ|·³qÂæ§>ÁœÁ!?ñ”`ÙÊ i·‡´M›¦�@#мgzà=ý;˜{ÿῃƒxãS¨ç<•…­óçî?wûÇ£ÿùo~2€Å?u´9-wo|²/0¼ÌÛÉI€ IDŠ9é“x�$leøŸé6£˜øBWµú¾$?’›—ìb‹L6ÅÄÙgÛ,jÖUy�Ϫ}ŽUm9ni7Óz,gÛµrí#}�ϵ¡ÛÎEÉ9órNÒÕ¦v’Ï­ýˆQ1#¹ç{�Žäÿ;²â¸ zbꥂÙ@f éùÊö},ƒA—äŸ$KüÅû'C‡žëä*ùÏõ4Iü,—îvÙ´‰Cb!cC®4~M�F hNô@Ÿ �À !0/lnhh¿e(·6ÿ,"3yéèΪõ¼¼þîKú‡oÚ×DaÓUFþ÷R˜IM"~‘µH§øsÌÛ³—~KÊp¨˜À×ZíÕýcÊÓaÓ½~®i{ø‰ÆKý_²Ó}õ©ü‘-~3Ít¢�¼Â¯Ó•=mK³ŽeÖIö¹(Ÿœ·Û9;Ú9¡ï»Ü‹q—ìD*�ß ž$4zx'©¢œ¿Ô];@IDATNþÏÓÆ]ô—�€Œ‘yÃÓæ øûs`?û.ùɶêÉÉ¿lP~ûïª1}¥Jþ’ñAUÙîæåù‡JŸk½õE{±¤Mu¬×êðµ�èj›™�ÿ¬�|ɾWÚ¾úÖç÷ÖÇÿΑãý Ð÷s,{&�@#ðŒ°˜øeAÇ"œ" —jÝøÈ"<”…ðÆWÇwÀ3ï9‘0#)Ø Ùw`Þ>àN¢}hÝ:y&FcÝÆôL!Ÿ&ãÙ ²gŸõU®˜Cz9Íêž„žGÿ¹ãï¤_<‰ÿ?²yóC²¯›Ò1ölšl›ÄŽÏàENm`®,.ß>÷âξWvÑn�@#ÐÜ-½p·‡¶'Ö4�E .$£."³8ÖŠÓf>SQÄj§wúI"*ÆG wpħÚ7Œ�ª9ܯ%mg ú§ÆMyjœS”‡¦ÿ½–GöÙVåÊ»Ê+>ºP5 ²¡„ Ÿs��ùÀ¯ê±ýRˆÿX£ŒÕý$nôñ©úèÆÀ’ä:íØ ˆß’]’µã'þ]¼ø³ €Õfýà7¨ç\tîYÅ>ô=d+ŸøÁq¨Ç ê»ÿêó«úÌ]ÿ¥ÿ¬ú‘¹3•<ÁfAôyÂaó‘­ònxåGÚÍî¹NÇ^åðs›–�F xoôÀÿgïL´ãÈqmëAvU÷}ÿÿ©÷v—§wöI IE*%[¶%\‹‰� "!€1èO;â3ßñÀxàÑ p$ $NpŒ’N‡ >zðWП$‰ A"a1¯px‘!qpð^wLIVT Ó¢{ÛŽï~£ýgæ@ùYúOÚo3Þ-ç{l{—ï8Z;}„‡¨.?J¼m(ߘT=;¦’¥r>îñ#zv¼�³ÚÔïѽ]Wtþ%<²@tPIþU™‡íR_?€Õžü; ­µíÍ€ŽK6O8YV›añ­Ÿ!GÚú°�±ž°X·ôuÎ@6> §f€»ýøKÀIüóm[ÑèÀVdÌ3y»@óSû¥1N§ŸBÿèŒÆ/Ù³ð’�ÞØ>üzT ÝÃíà�€½Õ¿}Dü²">J²—Ä0A:þ‰,FÇç÷U – 8%ò'êü·Žá9ó ¥$ÂåRß´_QóÓš¯�Ô~Ä‹�½ío‡êÏ1£R¾ù­gdúñwRyô·ÆúɸGm]îž~Ñ9øáu™àÈÑÞª“}6à!§J’LÒéÚñÚÄr¢N?û¤d½æƒš¡!ÍUÌÖ)¢r%ÿ¹ûï'ÙÈ+œÏþHª 7ª¼6À&H?çÑíùäØÃúÑâ16%øŒò”ãlC 9Œ^”fàE®1v<0øÕH îq+�t8I0.掟ÝUà»JáÈ7îjþ�}î‹–oâçðITãÀÈw:ø÷ƒãh›¾WßSöë¶é½Ô¾ó;} Oû9f½@÷ŠÏŽÖ~ç!¿hôs<)?qN¿—ø]æ><ú‘É|ÂëtáÝ6'›•ø³ °’ÏôG§púØð•Ðç.ÿ·�€løZ¸´£C0ºüdÌØh�òø–5NéA3<ßý\ßÎïU±2wþù0*É¿ŸÄ7¶(9üÂü<>þ%Éþ%]ŒsMæRßá�Æã�×â�Ùx-Græ1ü$ÄdÐ Þ�ƒ÷4án×ú‚ð Âô“àág:¼à×`¤_èÀKü´ïðRbþcõíú¿—Îø—úß×¾·uúžö �#¸ª|³ð؉¿Êgý@.tÇÝ�±è“1«Tš¿óVã#�èèãáQI•M€< ¶Ì1ðÌlj§ÆH‚ï €¢ûfÀ[ýkќ߮Èœ¡�"á?6)÷õ]�(ã{Æ{Ä0#:Œž½fàÙ¢1p<0ø•p€­€”²ã«”’Ћ×pËðÓJä‚N€ÞŸûÜû]@’)çå›%G’ó�Š#üÂ{H©up¯hd÷W”Œwi¬Ç¶wùkxÚ/ÁfÞØ«�Md6­sÝjK‚Èšp¿@úw<úŽxi{,Ä6ôQbg×^Õ‰h6«×m©H²êëÉ;óã®>xÕ…WòÿUÿ�îý—ôeú™’~ôþ3@æÌãüë_ÿil~ßýW{’ÿâ!cyAlÄgë)l†VŸ~�}¨ý¹GþÌÇaÞ}�Á¦)ã�ñÀxàôÀlü�}¦üû<°-¿Ï’Ÿ3òk�_PÁ©¼çJðξß÷ªÀÝ´Ú,yî’ð& ÎQØéð_¼N;ØÏüüÛ¯¢é˜'©ñTå[’£;5íÀ”އ÷½Pö�•N�ÓÛÏ:þ"â¾ñ�Úv^§�ðÎÓ”ìuü >Ç̾p’A 2ç˜âU’Àû D|ì}JÖ¼ú1?ö¨}•ð`tþx8Ò´®äš„uñÁ«2÷UÚà‘3­'½¬g3Z¿è?É,"$Ð%}Ò‹?Ôß:™#ºè+xg# û¼ì@ïQYs;j/Çí‹p*O�ðÿ#ÝØƒ�<öÏ¿¤î›þ¢øžpài®£™¯×‘[ïÿ‰|—Jߣ6äh§-rðŽhø—Jï{$s­ý¨Oç]²½ËüNüÚüÆþßytfìñÀã<0�ó×H�ƈvö€• õ�ýÕ/77z2WwäT?~ùòæã§Oo>Š÷�ªvWçÔç“*áo*ð)¾…ˆ{Ï4ù…bŸŸ�Nr£66ZHzÎ6è³×ê p[‡f>ð§’Kw<Ý;¯lOÓ/…ÝŽ}àKm;ÿÝù 'Ñãh%Yô9Íq*H"˜óž7Ë9&^û�b%©Ì9Ñiº„o;ªoÚt’‚®óˆöãÄ7Þ©åꯓkIYSÍ—qáßRÙðSùÛR8ר}#‘ûÊ�9H8×ê£6tÑNÛ.þ}ãMÛxàÈ}=µo<ðœ=0ÏùèŒmã�ñÀo÷@þÈ©Üñ_wýIð•èç`l|øðánò¯>To@5£Ñ$ ¡+äÿíóý%àK ä9 wö*™Råk×Îïò(‰®“ÆóßûÚº¤ŽÉ*ÁWƒ�èëmáu¹§Æûx»îKmGü�×éà�Œ#œ#µªæ NB×yÞƒ§vãÈ.¶�yOòñv*çEð3¨±Cçœ�f\ó¥•nsøá…^Âw‘•ü×|‘X›âqçšÚyÁ±Í…övûKã§-P‰½×·`õ>ëãY­{_ƒjý_Ü ` Ud=^ƒðœÃS±Lìºõ^ ó€ŸÀ6ô ²¸ëï*ÿ oð´ý“„Û¾êGÿ;ó—¬u îe騆Èíü½4²‘ žþGòÌƯͳðÚŽèÌg<0xr$H$`÷€Ò‚vª’~ʞІ@j€äŸMî‚~;Ñ�¤' ÄQŒÞW[ð§&GBhÈDÁUá91"á9ª´ï5Ž‚O äç]¢Ã,Ýx–J²çä_óïÐI¿Ž—ÏÚZÅwxØUz^¼µ 6ã%“!·ËC»”�‹Ö8�ç˜Ñ™“äÙoõöñö|¥ßs.èó<4ê ÷‰6ñöÒu¯6®!²N„�ðð#k¿Ž_9€nëxñrþÐn½Å�5±Úú½(ôáØø:†^ú¨?ã°> Ï+NþÅÏÝ m`<Š ýéÛr·ÕOø�n»wæ½÷·oWcRhßyj†5Œ^•fàUΙÌx`<ð”H`�„ŒIpx¿ŸuõÓ¯<p#Ù<€îœQ W8|bþÉ¿å½Êo‡ÉçW ¿Ü¶Ó4ñV‡B’”@ßao‹ÎÈ„.u?dÜ£�ŽÚvÞ}tÚdݺjž$z®à¡ƒu|Vâ_¸ïX«kÝUºw’Éŧ0�à'Î]™ðKÞsžÄÞPziô—¬~Šg:xà*9l«êë rÐÚ`ý{N¢íCÖþð\»¼I€. ýT±¶8'<íºüC¿T®aø�æ gMð=€�‚$ÿë5ÑÙzêW;ÐƒŽØ,ô¬À¿Túõ÷H¦÷Ýe{}ißyG:‡7Œ^ºfà¥Á±<0xr‹ð©y ËÀ÷+õ¯|䪂v¾ÀSg¡l |φ'ŸÑ3T(_¸”OœäˆaßÓV‰Ž!ø^‘9ª™*m):g%ô%½ißé3e¿˜ˆMv§áï¼Ktø‚ö$´æ žêMÑüÏ÷µ1®cºã>¶Ò“„q‡y´ÜPr$üI¸Á)ô¡�±;ÏI$ö•~¯ á.â{ÞÀ½ ~ä%ãqE{®À½"SÝnG·pÿÞÒ!�ÈºÛØ+Ñ?8OYFrø�óÀçÜ =m�è§Ò®B;#c7ú�±tÙbâø‡þñ;\Ñ}ÿˆ¦ò½“õøá| Ð¥ ~`�DG¿ž"çù î|먟ÈtøQŸ¬¿@ä‚Gý‚Ó>e<d­„ñzûàã�çê�Ùx®Gf쌞…ÎþÀ+X%ˆæ`Å÷Jî8 ÑéOœ%ÿjóSÈ2+õ¥á°‚NØ´ýAeÍY¾ Ø×à©ò›y‚ë­mÉUÿåºNw| \A8>”v^ôÖ±´üïø‰�}ì‡ðv™Nô‘):‰«ÏÍŸä�äßUÇ(I?OÇ8ñ4ެðœKx—ógÕ¢“øsw™„’š;ÍØAE†BÛ�s'vjtæÝñ(=â¥màx`<0x ˜ €×pgã�ñÀ“{ É Šƒ;PUàê/Òÿ­Þûw"¤ÀûSûÀÑÈG4“À<.üÆš^ä?æì`_xŠ} ݪy$=½¶ö.keMçž�:T"pVvšÆðá1Fèà}\d~fÉØGcìmßK«Ÿ�Nú5Gx¬[WÑYûk@Ç*�üÇ pú’\áuCðVIIß)QMÂHŸ/Œ+þò¹xà$¢´» …ã ¶œ³�ç6èB®x)ô‡.x˜ôo2Nj[ÿ À¦ùÄFwJÃ�ø‡/ûšÔÉ^lÆ�‚$ú=é_x%ÿ¼žÄ 9N.Õœÿ(ào œZnŸ(úÀž$ÿÁ3�š»ÿ~ü_cò€ÿWCáÞÄDWÖÅÙqšBûµÙ]þHgô¥tðôïôµ±§ýÏðÀ¾–þŒYÏ,_£fà5Õ™ÓoóÀk^ûüî[8™;�¤Ç °ø<à* Ϻ;J›ªï�jBZW‚ÎÂïûµµ­;œø¯ªÃûЕÜx£¥ðÈÝ�Ý9ôÿÞ’£ÃŽ£š1wÞ÷Žý£ýbg׳óHǃ Ö|³î³Ž×ÚÎ:ªr§?páÒá'dŸ=Ù⤺*~%1¥8¹—®3žú%ÑÆ>Ûȼ°Qeé2u¢iƒ¿—$€æWÿžô{œŒ'È&@6»-Öƒ-%¾¤éXâÔ }iïö…g!#¿¸0Þ^^6UÖ&|ü�_ ÇÇÖ!è^jïöÆ·VWzù(#2©ôÿLU›ý—¼y³ÀØØÅѶ}Ø$šhB?ü‹UÖ^¯¾þƼ±ï4ÂI}}¬NƒSÒ¾Ó' �ÿ�žK=¯µÇžKý7ÿµÛÿ»ý;ã�žÒ³ð”Þ]ã�ñÀ‹öL²vúpr‹Ô `eŽ˜�•?Òñyñ¾'ñ(Þ7m P�”à·6û¸õ½Cï¾@ö¾Òýßqút:x‡èüÚx÷ÙòضŒ}Ôoo»BÛKMÚUóÙñýn?O´x£KÇÉ‚$ú®jCžsȵ٠}THü¹ûOq’+»lƒ`¿k|–ƶèÜuÜG�½ó6Ú+µxÆ¥è*{ cÁ�ă‹·îþë˜ø €…#›„,ÉÚž4õ`ùNãHÉÿ3>Iž¡h'‹@Éá¬%'¡jê.4�’¤šyJ·ïî“P3~A6%¼½µùøŸòû Âx{‰]ðcOp`Ú±Ë%PöpŽøßžZn%ãÄ–¹àWùÈ6Ýqñ¼¶iCCèàf©�ö’9ƒŒ%þ:6’?KþÕÆö³¶ð'›@f„�ž°ôÛµÅ|Ïúr»ä’l±î¼y@¿ªêv*]_ãEwXG]Y'�,¼)ã�ñÀxà%z`6^âQ›Çã�Ÿæ�=ÐÛiLà§À’BèJàY8ü‹¥ú]lå ï¾+�'yY áþà_ðÈw…ï¡¥‹àÀK8zicŒÈ¿oÜÈ>Ô®kr÷éÛÛ6z%�cyJ2à¬u'gÁC«úñ~á¾óOÇiÝý/Úz„¯dS8%ç�âä´phÆNñÙ…l«J²¸ÌÂÑ‘ÍúОdrAéY8íMK<– Ç!É”N'ý/ž7Ä�MÀµ¤ã{ËÉ#Í–R´lÛ{ÜðdÏZ“²‡¹zC@Ç&Ç€sÌI?þÇ·‚g8mð�”¢Íɹë¤;| Õ�xñ1¯¬ã¤æ¼�„?@»‚Œêùb•²Ä”×�lf.}­0ŽÙ�‚/dK×Á±Úyؽæ|G n8߈ȵ~‘øº<Ð×Cfïh e“*rÇÏųð\ŽÄØ1¼(T:`Õ~ä•\šÉQ�zIö5óã³ æ×�ÿƒWî]Ó¿tÕûp·•ÿê³’~lè2àî+½-ñÏ.ßù§Y×1j‚ö~eÜ”àåï$ÿn†~�OÞ¯ãéÄ<íÈW›u1çâÙ_Rì�ñmã«=›.ÈP“üò*þË&ŽåÐ!Y6* }‡U2ØÀ¦Aæ¾ü%>mksJÙ…mwJÚî4\fd}"HÁæàfÌÏx`<0xƘ €g|pÆ´ñÀxà÷y ^,Hpç€&�AŸÐÉ'¶8—N¦œ<@²QÕ›$þ•ü¯Ä?2ø³W4twü!þ%ø§\‚iK{è@ÆK[ðnCÚ�§ô¶çþß½ÿ.}_û޶Ѭ×e»Pè½’ ‘üûÁ�jp’,Î…l�4² à¤Rý˜«Ç¿RrNu1Ÿw�±Î7ñœ(j>ÜéM’˜¤Ú hµ'¹$ùDg’~Tûè—<¶’”Ò¿8¹—þ$ÿï’ü‡‡¾ÈUt>´<Ø7Ma­VsÜŸqU2Кç*Â{?¯AÚëøõ¤á­Ýr’õñÔxèfÞøŠ‚�È‹o^ÉÐjß &ñòÀ¼ @ûÂŇv?tlµk¯µû:�­UY¾†ÐFmmR½ c0‡´›^­t½M⽑¥ú/²�ð¦ü9èkâÒ¬ïlH]þxà7x`6~ƒÓgÈ—ë /×|2/Øü6ýÚñK�wu „N$˜äŸÐ;ú�C_©j~Uå.L‰€œÒs‚j*IF«gô&ïþÑc…¥3ø}°øûDܶËí4Bð°­ã].m'‰“|ðï�]÷…þ¶¦É•uËδY§†à­’H%Ñ7ÜéJû&€uIΛ‚?R²~º–œSèåüD†„5‰?ç¡ù‚~7¿Ú�c¯÷µ  6'­È¤Ò_v{Lá´3ÃÈÀC?´ �¿pJ·õÈþ“Ô�ýfŒè¿¤Í¾¨Æ~-[ý˜'óå|£d.�?Ú#'ßákÿ›Aú¨ ¿cO6Ml[ñhó{ÿêÏÝþOªÿ¨ú)õáXøzÉØâSéÏ1öÚ+ý~@80ÇÙ6Hî«6 ¿ÞÜœ xÑï³.³&½v£WÍÃkU�¹QW?è.+<~÷ièvùà�½x¢ë¾r­ýšþûtÿж—nÿ¯ðÑŒ1øU˜ €_åég<0xqHp·N˜¶‚já¦+xw%(V%P>ª´¹îÊ_½´ø,I¿Ü=ùwŸ¾½þˆ_äëU‚ã˜;ÝyàØè­X3í}®òÍ‚MÃ9i›ÎY‡Ô.gZ6„YÏ®ÒHûYU›“0ùþl@4 R’¤ÀÌwüÐØŸÀÌü¬º|�mþðLð:œgþ2=P5É«ï<¾»Ñõ÷ùËÜE;YTBJécÓ 9C·jØ‚€. }_í�)ѽëÜm‰\tc/¾1ÛIôÕ˜Äß‘Lr\�T‘Á'Tü „;8 ¼&ñYð“ô�ôçN¶9>ªxÏwþ¥ÛOâ÷T¿Û/ÝŒÉx»ÑØóNã’ì;áß¡Æg¯ÇÃ{ym ¼Sµ ´Ú¨ôõ¼«áæ‹~HAÖ¶7aÛÔèAÇã�ñÀïôÀlüNïÏØã�ñÀ³÷ÀÌ�ш«m„ˆð …+$=Uñp €i‡ßeE¾®ÒƒåàÀÔ Öœƒ«æî¿}ÜÚ혮ã1ž’¯÷‚ßS‚îüÐ;ŒVúoã¤Í}Êî]ÿ®ïÝôí}-ÝÁ;ÄЩöqè´Â/ül@<6H„]E;)Fv«wlÿ‰ ÏSãŸ|U«ßmÐßU8�ùSß«bÉ?ÇкpôyMV²ž¤=›>N’±­‚?´“þÞ¼ÿøñÍÍäx{�kL¯#æ%çq^ØG�8&µ "¼¾Š^dŽÆã�_í�ÙøÕŸñÆã�ç6¸ÀL€à0�6A¥*¯r€Ùø–MŸW[ð]&G Ýk%IüdÓŸ~]нìtoßýZК.ÁÒs6cUæCÛšWÉÒ¶Xs1¾é¶w¢Z>€ç*z‡^‡�ßqúMÒãäM0›@ø@Ëmðûfó}½˜WT4`OŠÛDp—ÙógÉÿ>&‚œœÇIø;�ã›�ãÕž×$ƒ�“ n…1ܧø¦…ßZ¨æjë ÄtоKczNÑÎ|ðe«ËÏñ± ïôKÖ‰6¾/Iw6òèÖ ~[êûåóçSe@øWÕooÄó@|Œ]ªNžWö&ég¼à^ŸÜ½¯±<áÀ~ y§¤ÿ毿Þ|P½ùûoÃ¯àŒ§âÿJ€^ôˆGe-1ÖÎC >±½Þñô§½¯ÝðŽÆã�_å�ÙøUžžqÆã�í�Ì1‘3š@¸D‚ÔU+€tâÞhˈ^²/Ú;›ñò‡ Á0HÑ ‡N%Pßkڪߒ=iý¡ß²Ì:vß§-¡Ž÷y8ˆW{O ÀÏäQP¥Ë…w/õGÖmò 0UÙ†Ì:ç%ùr"¬¶Ðîs@»ñ‘u%éN›aѶ£ø;ý+JüÀÜ9&Ðñ/s&éóñQ;|ðžü‡ïÍ€’ñcîèlÕ nhéu „ ­•P%¹ì �è.ÓyMÕw¡gôlMûRŽýø‹9¥Òx„“Œ‹oŸ‘áÜm¼¬xÈúο ßðÝÿOŸÞ|ùçŸ7_©ß~£�o®TâïW °/4fU¢ïÇõY“ªð€ØâÍÄÛ6À þNwþ?þë_o>¨~d|6jNî+ž0à?’°F\ÄÃgÖqâ<ú?±Ö(ö™ ×§øSÆã�ñÀïðÀlü¯Ï˜ã�ñÀ‹ö@蘈Äš8µ'û$%¦‚§Ý² 4ÅmÅ!o‚\ �pAp‚î…û¼ªö3rGå?²»_C Æï;¤kF ìmª~]ES­‹5 �R~ Ÿñði²€D v:x5Yfç¥í^“͘ô�lx¡­7öÆ~˜×üܯæ™ùÒ«²&|<ÂS;t6x2à3�ûÿ÷¿§Jâ\ð›ê‡¶àä_Éùd^ÒëZ�Nû€l §»ýýÏÿ¼ù‹ä[4gÚ¼© ïøú#½þWƒø„6Uæ� ^Ø)ö‡ôwH?Ö ¼7c~Æã�ñÀ/òÀlü"GÏ0ã�ñÀëð@ºÌ¦Ó ²�® öœ„UûkK¦d£ïµ@ᙌÞ; Eˆ+¸w_‚ä´UÀuæ�*òýQÙ��µJ6Úd¼Ò�¦]rNÛ ‘‰ŽÖô0´ÆëýÁYo$#†Ð[õzÏkMþËÀY2�Ÿ¥'<ë*Ù5ãP3¦p ¼”އ÷+ 8qc0üTvš'Úë'Ð"§£Á1º·Fv“óf<Ö#w£ã ø¦�ô÷¯X¡;;4xo‡þ‘²ëEWçA{�Æn”²�yÄþ3™´Ñ÷ âó¬'ËŠö]A¨ÿ Iÿÿýß›¯ÿù�ë7áß„S?kS€„¿'ýg4fp X¿ ϯ~`Ç‹ä=›ïµÀÓ~õ€;ÿ¥ï-ÔëþH ¾ˆ?<íÓyà5Ř?X8g89w:þƒª§ûx`<0x°fàÁ®ÁñÀxàO÷@‚·øa§á;à&ÀN¸Hòàä¿ †$Эš¯¾+Üø¦“ô£SÕëØ-ù^9œàÀÚî£#÷#p×]æ—½¶±Ù¾æ%áØãÓø¥�—óÛwýµ¦²àŠþÄ�w6Hüÿ÷W}#œ €wµÀHò¿ ¶JO¯+ù縨-I6€®jç½>@¸žöP›“> ¨Í6X§i�Î�­¾>Wš¯,tå‡s( þ%xEÅ4�Æã�Ÿâ�Ùø)n¥/Õ ~Çþ—é�=~×úÄ¥$¸ë4VðÉ×°¹ø~Ìf@Ïè{–°ÍÿÐ>Í=ÌÞÂ'a‹¦-2"b?KÎA34z»àíQ@É™vºŸdOØ-^¶#�ꄘc I¤é–öØê„Ò ²I»°éGŒ~g6V·]ùÙ×`Ÿ�×—ÕŸ|J›çP<σ¹hÝ­ €à‚– ”I :ý5´*%ð>Ü‚OüÓçz¨ºì;l3ëÿ§,L<¯+ä4oCÖÇ2Umë¾ àv�¿þìzSÙH ¯ô-6<€êZGEÃ�}ûz ™ëñ]™º.~1b_ø±=ò�Ù(ءג|ÁÚ£B;AÄoßê�÷ï_•üQ}Ç«òë¾ Í“öºtü|€ Ï�þ$ü;ÔÄéiõáÚ̸© Î|ùïßRu½ö<À¸*þî¹1'õI[ü}Ç×M6}Ž`tÁ}œ]æZûnÓÞÿwÓ/Ýþßí¿<ðÌÀc¼5²ã�ñÀx`óA 5Á\‚Ê$üº³ô·ê¿tç鿸!x£…žÛ;ÎZî!dÓ­ÇnåbûT³× àÚ`Nò×�õšäš’ñB›ùŠ<_Í�㓹{�â7¯Ü%f�xmá'­S¯Y Ç?ëÈ1RÀ©Gø‰»Ú-YµÅ–êméð¬.ý›lcÝ‹v=]°ó³!i(»:½ú”ß sÞa/kçlÍ�ͨJÀÿÒu�wð�|ˆ� ŸÊG¹>mÀwá8Ôu!Ç+[ü¾~­}ðlÐæ 0=�ð–_×ç¯Júù6Á?Ø®¹òAÂ/º^á?~Uý&ÜÇY2ö…ä3O ÏAÛt²ðÁ¿ôeuøàÎ#8Œ~À³ðΛ®ã�ñÀŸé�°%€ƒG€ÉÝÿ—ÞP ù—È)°üG_žfàO¨:ùüG•$ÃwßZ"ð"=‹ýšcO(2ü³ Á6²T{ªü@1_>$`ï¸Ûà!SºÀ)ÐàOäéÝ” b–$ù÷»ò¢�i£=Ö¯>bßIöm�ƈ-ÈPLgìëñ¿mÜtîötœv'8êÓ“0?º\<Ï�ÕÇMü^�{M…Ùx­™˜Žs÷LI,9f$�4ÓFÕÚ´œÖ©×$°Ö-tÇÝU-ßh†u›‘Âñ32�þ=ýÄûá…ŽÈ%~Ú»NŸ²ãýA%)·OJ)~¡Ø†Â¡ÏÖ hü–õx£$ŸÄÿoU6Ö€’êJþ5^ ¾ cQ9VÁ ®ÇÿEcŸ7 B{~º&ëÖ¿Ÿñ+ 𫝽:Æ|”勺~UýFU»ç¨ñð‹Ï'áè˹eH›x>Þ'KËÜûyéH'ð)ã�ñÀxàgz`6~¦wG÷x`<ðj=�€­Cp?~­ó#É¿*Oü£@ò“‚[Nþõ¡‚þG´P�N‚�/¸ô°5ø×ô˜kj%S´ù®¿øyœ×<ùÉ�µoÒ‚oªTLŸÐ“^3ËŸåWl¡:Pÿ@?² _¼È$7]|«äGÅš±3xƒžBUÊŠ�W!cžæª~l /t`O˜‡×eæV4¾K[æêAêçˆ×Û_$®9¯cSþ0 ?…Ä’RþÉZ#Éw2XkÕë^ñ9½Àš`½ßÉedàSU¼^ Ï ú‰5Y7—èÈ#™ðîƒ]68�;Ü…7@Ù ü,œöØ„‚ÂÃ{^W�øÝ‚ïk Oô»ÿ~@í~ç^ãj¼�fŒ^×u@|pÆIâßqÚl‡6gÙ<°Œìâ ,6¿ézüU_ÿýïÓ¿'„§6û–¾$ý̨ê×fdº˜³} ü¡y�¨Cðœsðƒ?TßÈ�Æã�Çx`6ã­‘Œþx$XÃÁ¬9ùWÈ{¥y€;]ÿRpÉ¿Àbà‹h¾ŠMòÿA�Áµ¶îY':Ê5àN³e ž©àô«`ž“ÿ‚‹–ŒcùΛÒCÐ N÷q@'å–}Èa[ÞUÞ¨æ8¤ÝvI®Ó¶ý*5Ò f¼Æ·ÐüÄ�¨ò�¥·Óðl+ó«9=¯¢Õp«cÃKåjýš >r2ÈñÒü½núµ¾ð™“?Adœü±>éSÐÉ~ÇÕæ>â±¾Óîõ‚ñ½&iCµÊÂij}ŧÐ<4ðˆÿRéòÁ;$}å.7×%*ß,aà£*�6Jì Üý˜µgßIž1à±ðQI¶ïü·§òø^XI¿Æ[¸Æ�­¯Ž ö@‡Çõ ‰?ÇšdœcàÄZ|žÂ"ù÷¦¬ló(„öñc¾¬]ÏùX ø7žŸºÒ}é[×4é¥x ÑÿžÒe‚)è~�ŠiŒÆßå�Ùø.·M§ñÀx`Ö­„ÿ�’ÿwz’‹Wð›.™§ ãò„Äc k#k xÎUøÁ«wäÇã�ñÀ}˜ €û¼3mã�ñÀxàÀ Êzà†|î0å¼à SA´?ú§vîüÿG²ÜÝT«Òç¥'Me<8>HRÈìÂGÔ‰²ª$RÙ ­ßý·å |‚lp!(¾eiG'åVìÉ€�—ø|ží,¸ì.Úzëç(Ô?âõ>?Š×ìÏÔ,6V s ø·øÁ;ßBÈ•|èWã+ÖˆpŽ[÷k‰µe>2µYS^‹:Ÿïàâ‘8ºêœöZ-¿¢gúJŸ7`Öøk½ÂRí6�žØJ÷´�?´Ðÿ¨’Àæ ’ÿ¿©šK*O+¥Ähãø©ÊJÐä• €IúáQ•ˆÓîsZãøÎ¿t®'ÀU=JùÕêã?ÆÎ9‹•œË†Å'¹§¬ãÄ�~ÙñFÉÿ½¦ÅønCHýyòƒ’ü¿S;Opü³b1ôÕúðºÁÉ<¦äüëýwÞcô�ìx`<0¸æ�Ù¸æ¡iŒÆ<� -;£¬`Я(päZîüç‹â¼ð_‡ÿQõcµÜùâÁ¦êK+äwŠxÌ…Ù8�„N2�¼ƒ|ú"K°oæiþÁ+ &QR!°g¤è5“6dá£A— �RÑìã¥~ù·�<à1 渄§Æ“þgú{fsØìdSšÊË+ÐYKëëÛ+Km$ˆ^w‚^«¬µà‚|à“uÂGëŒ3œèZ™§Á‘¯± Ñ{jñ1Ǧ#bi§ìô‰{ÿ/ú÷Ê9á÷ÿeOîþÿKó¡þ›k•ìîÅö1•ÓoÁšOç�s§� €›Jþ}מ*ø{�q–øKO§ñ»Kù*I¦þ]•W–bƒ}…ÒØ$ˆ ©ðƒŠ~'=7J¸I´ÙÈcÿl‚ò4”_…’\Oú™¿«ÆÆNt­1CÃSÉx‘˱€Ï±ò½iéõÆ�ÆõµAù¢$ÿ3‰>wýSE¿N¿áßT³éC_óe_6uà•kës­/æŒ�£kù<Œ ^Ó­ýšþm¸_N¾tû¹ÃfÀñÀ=˜ €{œ3MÏÛ×þe<0<•fà©<9zÆã�?Ö{pæ`³l‘Y|ÚzûKóA´Šç¼öøÂóͼ3_hå¢ã“L}Ö\ºÌ'PGž~‘!©JA>4Ÿ>+q/¹$ÿ�ô¥�øÂ£Ãö/ã üs=Àb½j]PŒ³69X«ÂSœüKŽu™d?‰~h'Îêç�tTµ\£Ã·nø)àØR¼ÖbÛÛyÐØ}š�`õu2+[x}ÁIy6”óè>O,;˜+ýZM’‹~pCá�I¢_O�üóν7ÄgLªmPß3¨þ±ÕÊJ_p`Æ D^žÆ-¼Ûêä¿QUìÙÄ÷¾éu€¯ºËÿEÉÿ?:ž|Ï�¯ðï[¿êuÿ—6è§¶wlH– æÝ¯ñ ¼àîxðÓe‚GW×{ÐuXã�ñÀxàQ˜ €G¹k„Çã�ñÀ¹¨�qTŠ™®·¯`¶äzÛsÇ(3/ª‚]ŠƒuàAu; Uóµ?ݸ¼Eæ`=NNœÓ/ÉýDY´p‚î•táϦ;¾÷â“�å)ðU›m«OÓƒáƒOùC= 5±J­SÖÛ*ZG.µvœø‹—dß  Ö­iÖmý Ý ·\ñi£øi—ÂÃsƒ~bÑIò–Nû¤ÕOhlÇÏþpŸcÞÕ÷XjôÓØQ<Æì•±˜…÷в[ÅϳŠˆm>Áº�=Xg®©ÛÆI�šâ�åt©ÝÁ»ðñH4 û*Á Ò²žÐ8‘ì6$ùô€d�‘[6EoÆYò'{`­³rÂZ£¬­Q ç‚tÖ8ë¾ÄKÉ¿“>dTÑ“ ãè.¾iÆ¡VY˜x¶¯øàÚƒ›Ñ~rÞÂ2®qzòŸ÷õ?d@íNú±§ê¢±[z˜Kl2�ñЭ$úN­ ô`§í¨¹0ÏØØç•<2Ùè4¸õa7Ç&´Æðñá8ñ€’ù÷õ�Ø >|«ÀO”mÜùç›~2@í|`0×TS “П8§ßÈ]j ¿Ëá]çàã�ñÀxࡘ €‡zjäž•ò‡°/4;ðñÀÏðÀáz« ’À’v˜ .<¥¯Ý[nZ_ôeî%ÈLìüÀü«�âƒ@ñ °|˜S€åÃ$ k3 øœû~[�»eæÕÖíçð lÉf€ÇÓOìƒîxÚþ¡`MÕúÄgëšÄQíKYUî&{�‚+Q4,|çA›'èõ§q³9à¶r¿u¨3Æváðbsëv:Od[ž8{€ä_õ#�Èc—vÎ1'ÃØœ¹6Îpæ�þêkHâ D2*N¸;4÷Öî“T1BS™£,<§ËìH"oûu|ü¯•üSbÏõǺ�U; äC…Èûz!™÷Üùç[<€ ²%×�£vÚÂ�ލ§ÏÎKÛÀñÀx`Œ6mgÁ˜‚ºøP©ð»ì­dzyü¿oÀ÷¦Aé�ø”ñÀýhkÅ+/t­;wnk8tÅÀ•üKÞW’jé⎸q:Š®3Àjœü×xl>XÇ©ÅkYlJŸà¶³äЩfˆõ€’Úlð/ûü €6ÞŠ–üË^oÀgVt;6tx9§s>_„›]g6–~ÀÒ[�áGç¥>±ýRûïæ¿tû·ÿfü?˳ðgïW1ÛkùW1əijõë/�PÇm°Úàõ$ŸÇÌ©7 *©ÆáIîFuA)x_³îkÇ‹S|«8h'mœùVPjžh9àrE힨«¿Ë ì)Þî6ìh¶í‰?wø}\ 掿¯'±ùª#0øqøºQjX‡~$\k˜’5MâÉ:&Át%˜~r€DSr ‡/zé§R}žY'·‘cý 絃/ªŸeÇg%»Ÿ¨zÔý=êþ�cìâ"á7Žn�mžúeœù‡Æàj‘*Ôe×ßipûM<4£'þ…Þ!ó€öÓਗ਼«¯1å|f_ â{6xrÃÇ‘«øØ!£ÒñÐÀüM¿TÒ·ÃK²ÃŒÆ÷y`6îóδ�Æã�z€ Ì&Pµ'›7 š¿¨{õf€d³ À†€ƒV‹±§�ñd@ÇhÒ�‹ÉæäRxhÏ•æ  ’ô~ÁÈWéøbž#}îôì4A¸µ•ÛQ6eÀwü± ~¯çà 5øéXë·Ö(kÙ›ZÇNàµNSœüKÎwê•X:á/¹•ü‹î8çÕ eááZm*\g(P+ù×FågÕl|b@›X¶^�Q’Ý÷$¼´ÉÎ^NÚOœ5çˆäd øG�îÑ Üñ#óC½©ð�ÏXÁC¯¤¿æÉ\Í<Û�MCé´Ÿ�*èÛ“{®A”ÎÏ ó3Œ~²fà';xÔ?­ŽþHñžvÔÑ68y€µ– í‡çR�€˜`9O¼¯'ØÈSGO¨ D”BSÀiÑø§0U£6žù²1¸!ôV�è3—ªé—y ÿ=Åw÷¾²‘‚F‚{üo\°oÆ�lÑ–šcö}–0â”ñÀ=ÐÖ,kØI§x†¨Hò/ëÒ‰ºxIð}í!ᬤ“ ƒà@Óœœ¯‘�.œþ>w3…;׬6ب$ùwÍJðÿ‘žPÒ Iü“üc÷CΟ.¸WŸ¿âi -tÙ�ý—jä¸vÒ70üŒG:2þ9Kü7úìÃ…jó†MAúR=–|“c™k9cï%×?ú=´x]H¾Ã‡ö¹ñÀx`<Ì@<1ðÙ{ ,Ÿ½¡cà«÷@‚/&Úq]hªLÆÙèwþ½ óó�� ] ÌÒñ fÔ¯ ¶çØ ¶:¨&müЧ¨Ò¥5@IDATŽüž ü”>÷Ž“ä¸4=øÎv¨˜$Á²o=²Œ}(i: §Œ~¦8'X½¬½@¯ÁZÓÞ`M²>Åãß[®$¾’yÓ…g <Î�lGI)|Æ Ò·lð9 Ü’e`ÝýWòÿI²ŸÔç}U'»âûc€Ú,`>œcÑ#UwJÚ€;0Éþ¤›/U®›´QÀÑÑaôÓž¹#C ½lÑ\}= ”ü€ |ühˆ—DÞ6 ƒÞ‚à>î�†Gñ5ò„^ýEßcä¯*�ñÀxà�ôÀlü‘‡ýåMzþོcö'XÜ:p� 箳7¸û¯€¹?°6$¿ž�ÓÂXâ@áë NO!åÏ÷,óp!Ø)耛T"ãyc3<Ú*É6ÝÛÜÓ‚«Xß —¯P›Ê˜ªÙ„ɱ8KüKÆöïàÓo<ðXhÝù|Ìy�Šà<¡â$�ó¾d�D߸’O ÿÂ�Ð7ž~ÚHTÑÃx“ø³©à§46ç 6qwÿð µý£6îŽßÔoòñ?ô`*T÷bÝ;S4ü½îI?O„·…±’ð÷±» {òßÇC/²á…öxšã‚àò[ž ð5ŸŠoUs,¸þÙñÐíãÅ8øÇ¢•´7Ö½húw]¿·ó4ŽÆã�òÀlÌRxöȼgoèøÇz ÁA68•ä“;úü_i6¾² P¸ïü MpËÅy‚IôÔHZ¼ßPªb¸«lÌ\�ØL oÇÓÀkåÚ¬±#2¶It ïHÊžlp HTlre«íºfÈ´�žÒœ+-$ÑwBY|E{�÷NÁU}]PjMR_0I¨¿J�.ªJΑ…£ ÕNd×7tžø#€’ñÝuÌ€ÇÓf¦¿ü¯/ᳩÆÇ©§ÑNç cQ»óÁ¯U’ï$ÿÒ/I?ýá =›+täÐI‰=ô ïŒ/_œ%ÿÐTù‚Ú_°ßÔf¿U},¬PtÁ0zV|í<ãÜOx ‰<¶ßýZ§u<0øÓ<0Úaó%¸¸¯ÌÁû¼3m?ì9‚°#èÀVíI:}çY4‰>wÜüŸIF¹ëß+É¿ïr :ˆt�ÿ3&ñ�I>:d~$ † ¡áQ5/Ÿ“�â�DÒ£ú˜ûc?ht0OÐ]8~ƒÏUÃPãûXeS®'¶™ûÄž2øù¨µÇ@>;B×¶}mý’MxÚ7ÞWÍg½«Ý8ýDŸ¥Ÿôe<�k#@zÖà’ñkêþ�d©þkŒ~îþ“üëï$Ëõ ýTæ’±¿«ŽV�ì HÀ¬ÀØwÿ�õ@îþÃw•œ“äU èVˆÖ€è|’ò€ 4 ?ãe\xžWñú™§«æããX|’�·‡¸÷py§éŽf?ÊÜm`|U|Ûðkp÷ûN›è;ejû¦ H}£äÿmUo€«O®:I•ŽÛRx¯Ø¼W?UrXL¥×`èàáw½Á%îúDÈmÌIóvÒ�¿DãÿT6d쳂ö¹|eÈuHòÞlA~~‚âuPzºÎÎ?¦Ëµ_ã]ëmükúvûK·ÿgûgôÿY˜ €?ëxÏlÇã�Ÿà‹¹àÔuç™;d�ªÜ-s­52î#»<:L¬€1�ôO0û¢ÊÅ»ÁÜ37õн$àÜI<ƒá7ˆì÷úU¢Scz|`ðæßµ �¶ßv.eƒŒ^žXÃ9'XçNF™8ס´“{S‘Göé£$•Š<×£…/熟PßOªÿHŽ»ðœ½$þ_T¿²   È“ùÀ;p�ïd¤Ó׌¥âbñuE­�Ì!OÒŸy¥F:%¾¦=m;þ”ý¾î âO_ƒ7ßñ„…“Á/ªïT}�ç8¨ä8Ø]›h{Š’ãôºFÇ÷{ÀçÔÓï·bzŽ¾Ï³ð}~›^ã�ñÀxàToA�«‚@?v®ö< ÀS¹óï6fäÔ‡ê~’w�*ÚÁ'~îøOô;ãºÔœlGìQƒéÀ²Û°ÛÁ?�ohxÔ*·X8—a“ƒF7ã”Ù`y+?ãW×ôÑp¶³ »Ó­iÐñÀ³ôçÑ: ÷&ç,‰<çC'ÿZÿÜ�¾/ùwbJ¢^}I¦ù `žˆF¾-ðMwúýOhàm%¾$üŒMì'à‹‡ ü·?uPוؗkB‡àŒ—šäŸ`•6l^ªj²ð:ì+˜[Iÿ�ík.m¾öbo¯šOü¸oœécîêÏfBOþçºsæ¥!Æã�ßà�Ùø NŸ!Çã�—í¸Ð1xì :ø& VðGÒ¯wNÉ¿`’dRÝ?z€ŽÀV/³yšÒÇ츴w;Œ×<ל™#¼‚ƱJ¼Ç”>Çà�KO�MÂá$¿ü› €ø7mëØ,˜õ8»Z×AÇ¿ÇmÍ:©”¬cίfÎJ�NüÅK²šD?4ÉiÇ�¬«;úØà_ÿY¯ ‰·7¸ûÏ7Zòÿ^ þ{64.O@{#‚§T¸ú©á×Î:Ú©Ì„z´� ŠÈJ|%ÿÌ!~éíÈô²·Aã ªŸ`ƒ£hæÒûçîž8u<ýúØp|Ô�škÎþ·£÷ù¢ã�Ÿê_s4ççG΋uîê|õ{çZóÞ(à¼äî5|`%³;½I°y€B?6¸Ûí»ÿlPEsÇŸä?ÞìT›Ç纑1Ë+l?¶]40õ(ùg#>vD®ãb»à�TæYÁ/•.gÙMñuœŠßÊø.�ÿã—Kö©ænß—N+Fw»&…÷=0 O¥ï{l˜>ã�ñÀËòÀl¼¬ã5ÖŽÆÏØ`©$÷̾+ðó+JPs‡ºÃ î¯9.z ÆôWò߯õ8»ÛÑmsÂßæë䟤› ¶UÓOd4!yôÛÆSåο?H†o«z# ì°lú>‘-£f<ð[<Àšæ¼ôùPFç|àºãÄ»dsž%ÿ¡Ij飾”l€Ã'Ñ&'ÑõÇÿô@OüoÔÿƒª{×9G_lð7àÝSÒ ¤¢'µ?�öØžM¡.Èà dÀ�d)ÀàfÜós–ük.ø=›&†òÇz€Mù ×¾u}ª~ bËÇeã=„D÷”_ïŸs¬ƒVŽx­yÐñÀ³õÀl<ÛC3†�Æ/Å='�vÐWuB†;ß�lîüéK ˜ð.ðgúÁAn °Æ+L7Yx©î&›{ÐÈ|Sâ§KpéB7>Vuòß’~Óð«Ýr±q)d<ð‚=Àzæ\¬ók½__|ÏŒvUŠMpUp'¯}G;xõ§ïóß¾¨:ñW‚»îú+áå®?Éÿ'ªÚIÖ}þE“üs>úÕ�²•¦£’kJ cæ®?�`5m$ýhJ 8¶S“ü§m½òe3vÛö†‡‡¯À³ �'ò ¾±^ÍÕ×rÉó_Jìs ~)áÏqìö݇GÏcûݧsÚÆã�?˳ðgï™íx`<ðD øJ †ÊE‹ïwiøõB`Èã±¾C-È¿þó,Òß] 2‘OéxxO“ ,]5®Çk8ôª±3PsI2Îcù$î/è ¾ºŽÄS:Ä?ÖU0ãÚ§ü2%Þh6¥OYsR:¿ã�—î�vNym‡î×ᔜC+y?›Þ QE–óWÅwÍE³°Šp6ü/ÿô@’îüP[þm ò¾~‰ïäI§¯‡KÑýsÁŠÔ<�Í€ÜñG.шµéG{¯‘ÙadÂ_4sïUóYþîM æXóÌ+_t¼ñ!HB\›èSñ5) ö¿#�}ˆö¾é×y‡�†ùdÀ×ñû“)Eã�ßà�Ùø NŸ!_¯^úâ—nÿ�®¬kó¿ö‡Ÿþ¿ ›MÃK­`xÑ2œ µžÁt^Gý÷äßA;‚²ßãÖ\l+¼ÌA" OĪð]vxâÞûŸ ×XIü¼o.‘y(Äld)és¢N¿ië¼à»üN[®ü–>@ËáÇÖf¼xÓðH®”Ý9F}�œ1.õ¹¯í@Õ“³.Ù•�º¯Â{NðšýÏÉÖ±e<𣘠€õàôŒÆ ˜èO.ü�ˆÔ¥èzjVÆGo6bKÚ 5‡™I7Étªy¡­°4À{@I |G´úÛ�jDÛJøeÃ.YÛµÙïèÆxàyàagR�#š—Ï•™jx>'t­¡8ùá¼!é×yäĽ`§Á ÿVß¿T?Jþ†×ôÁ¿wŸ>½y«úæŸô¯ÅsÍF‚äsžï«<}@åî>¯!ôÍQæ�¶ƒÓ'^ê}ãIÌ¥ËÀX~hxüÄgë$|½v�ÌVŽôü�8’ߺ/r×Ó鎯B£¿÷üºü7ªÎ©H�¿ã‰�ÏÕ³ð\�ÌØ5<{ýá¿Ïè.\�ÃJþÎÝ<×û~o[+=ùÏXØåJ<ã�(´À׉CÚ€ z;¯ËNÐÝË¢[Õtá–ÛÆ_x³‰~½ºŸxSÆ/Í}Õvühi'aNÒ¼Cd,Ç9Ò”çÜÒu!w÷“sN'`LòïGÿû@’6TyD^ŸÆ?]ÃêZÆùÜÇ…î5 ;I|lïòà‘ D¶ã¡ióuD°—>îÞ~ÖÖæïë×üX×üÚìƒ OÂÛ:ª½ó‹uìò—èK›wã§x€� )ã�çî�ÙxîGhìŒ^œÌz@×i´;ño³sBžä\|d“¤7±'AmÇ6†ÇƒGp»A·U°+„Nr?ur_ÿ”ž[Æ-vt¯>M'ɇÇScþµ ¡¶ð°¹W÷)Þí¨ƒ�^†Ng Ö|3·ã�½dh'õ æ�ùÐ�ȸrn§„Ç9ãd_çy’þ%ÇwKþü¨k~@Iþ;þ%àÁùX׳¤Z: wç“°“¼Ç¦Øù$ûÐÁ;¤ïžüïc@§œµeþ`üã�OÉøÚSÐßs‘ßò]—è´ä‡\[á?6Qßåw:cí°�¹· ýxàO|ßK|ØÛÁ­å «*ª8¾Ô”އ÷�0õÙXÒµ6#h¡�…øçÎxÁð�.�?µ^üm3½•¡¿*ãZ¸ÆM]›�—€Üý0¡´Þ*l<ð|=�õz vË#/I~ÿp^6}§Y®5:§èƒŸßâñ>ÿJú 'Á†‡’ÿ¿”üPâ£Ä?¯ðøÿ[žÈãÿy€×Úõ‹s½WÆît’ùl¤ ~dm�èÈ"xi@MgcÑ�’1aóG®Cø¢oäÑûVm¹­k×i˜ÓXå ·1öF7ÑCtOúwú°Ó0‰æÎÿ/qó òD˜ €'r䨌Æx€À.AÝݽ”¤;¡“œ'p&ð}²¢€séKð �Jðª�R3Á¬ƒßJ¶Áá›'|Á ï�%AøïúÀkÛÆøõÁ?�_öØFpÉS±Ç¾t2x!Èt fi‡ïÉ?tàÚ�d•MChUÎ^ð&@ ç#®Jêß+Ñ÷+Úðãÿ| ¿`’®�¹r®S±÷g< 0È=€\t§¼ÒN‰<�Òéà‹_óö†@Ãs=ê×"?P>:»ny”Ó> -Ð㯉]D{¿K}w™‹Ê¦á‡<�ãøCJ¦óxà7z`6~£ógè—çÿayf/‹_ºýk"�ç4¿=@€îÕ�Þ*ÐæÃZ7‚ÔÞØšßÁ<¢»^ ¸0ïÅVŸ‡' žTu R]¶:Ðí¸ìKÐ L;pÕ“ªïû�é&Á÷XõÈ?øºÃVíÙ°\ìü¾‘§×xà‡=°Î£Ò²ã—BæZíº¢3Ð× |ÐyýA0à¦uެ„_¼çúôUçÉ¿«p¿O5ç ãˆZÕÓýö*¹$ÖIê¡�ðð€Ì©ËÁKÉUîÂK¿à¡Ñ±óîК ?s}Æ#õFžìµøë%ù~m÷u1Æ^€=QïøñÅÞewz >CÝW˜Ë”ñÀxà×x`6~�Ÿg”ñÀxàö��5ùÀ�ߊ¾QùAõ£Ë¿TÿþðáÍ'�%ªšÍ€Ïº“æ°é ‚#'øMzÃKhf|*[j%‹Vûý€’ïj¬5¦Æóûþò‘}ÁwTù ˜äy÷yÀØ#2xŒrNô>G¼´ÓFb ¼„Gö¦_`×^ ýƒ)$ôu7:' …g#º'üèœó(‰ÿW�c_u=’ØÕy÷�ó�sOxj’dÚܧ®WIâ¿B—^_Û4.%6ƒ3>ò�}^‘ D~¿v„¿×=á§ ÞQå ƒõôsf¾ªot]~óñã©þý÷›·Â©kC ×Eõÿ]å%mü.͸ã�ñÀ¹ø›0e<0ŒžÐ¼¹›Hå.ö{UßñW ù‘ª@sm(`&àæ ’‚ôwÑ-q”©ê׃g×ðJŸi) ´nÙ)cWu²]´ïzµ¶GÙ² ¯@}UVb/ù±ZA'ò“7Ùè›é;p<ðTÈŠ DoÇ�hØTŸ·½÷ßuОŠð¦ý"›D¿Ãà±ÉPçòáyñրλ$ô$ñlF’s.&é÷+9:Iþ©ðé�m$Ù\c:-Ö*Œ‡LJè£y!?e]7 �à©�¼Xe?O=x>šë76þúëÍÛVÙx _óµÔg]/¥û¬Ðö‹Êlü"GÏ0ã�Wàþ.LŒÆã�'ò@~ÔïÐO(À¼ó€‚ÍO *¿é®ÛÜŸõ=mèNÖ $+i°©’_ágðÒÿl€v�a~Ùn:Á-‰¸ê tKvÑ0*Az » _ãEŸ7*ÀvâOò-Vò� UÝÏšæg<ðc8­H-E©éx´†Ýq’XêžpC‡×õ‰}V¢T诟§‘M[Æ»£ó¬so½ ólmèÚÀOpç{Ýï8É?ÛKžs•~Ø /ØÐùÌá¨Ò~J¿~ì84:�©¡�½Fvñdg’Ï‘$¿îþg:Ox3„k"ÿ= ô$ý~MMïÙÎëxÚŽÆã�î�ÙèÞ|<0<‘zˆ&Yå *¯|PÍ+)Øü‡ä_ý’üë¿jß~à±vx§Oð‚{â�Ø¥ÀÛ�-Áí¥š1®@‚í^Lã£0›~'ÿòO’ý~ç¿·�Ç®5×è8ødå|@ÅŽ‡õé“DŸÀj¯J%�Ч0ýƒ&)Þ+×�΋ÜÄd ÕïŒïƒlx~^}¼  sË�¤^×�l�çuþuç_|6èH¦×ý¤ýð� ã§ ü¨ðx>:¨”uÍ8Ài£¢3xhxW«ìÍ&€ó×uÙ ?OÔ+ý ?Àuh/ÒóØ’¿�í7òã�ñÀxౘ €ÇzläÇã�ñÀwz€�ðè€þ o(x$ù¿QÍ·ßꉀGú¤Cð žmHyWתٰp¢M�›„Ù&—¡.Að”…«pt �èÔ8Nô•Pø®¿’ Þý϶«l±ý¦ŒžÈ9P<0¼#H˜Mþ^õÖ¸óÞœ’Õ DǪZ×IàÃÛe-ÙÈ?úª~¯‘…·Þ�×¹u'ùWû’�“_Hô…û•pÕ¼à;þðêºå �}ß ’¤wÛ‚«yÙœkê•ôß�ø OòO‡—ôgLÎȨ_�úà _¶-,ý†²Ð;n^"óÀ²xŸ|JÓ¸hx©$õ;ÎÆÄJöÁc#�;û©ÜñOÕ¿1Oªxï$ó®6r�b®)û5j§£ãÿZû}ýîkC勵_ógÃçnßÏžÿèüJäïѯsƌƯÖ1 ¤vœIÃs/H‚Ï¿ôF@mp×ߢßiÀ&Á%µ•Nw‚_Iþ;`«¦«-÷“ÞÕŸ ]Õíð3f`·§7�÷à¼ãô‹~ëèã1çV\/;ú G6õöÁ_¼².ûDŽxi§�„x �ìÓ'ýг×ÈÐ÷'aÿ¨u™M`¯´ÓÏ…ó ¸`ôyLµ%ù?³Aü3Zý]ú¢3çÌN3dxà.Õ××­žœG§ ïìsWœY‰ð’|®O¹ÆH†Í�·Úx÷ßÿ¾y'ÈÓß„ûÕ ä›&ŒsTãƒ@l ~Çf~÷:³'üÐÙpò/¼Á¡ëŒïö‹Î#ÿߔܿùÿïÍ[Õwÿó?oÞ¤þë_oÞ¨¾Wý ê{ù�W"üjR]ÖÏå Ê%Ú�­=4�>é×ù¿ÖÞeŒÆG˜ €#¯ o<0ü$¸æc€=ù¿ùüÙÿÐwþTf£`7%Áp‚cEÓ+P&! ('áwÕ†ÂÚ @Q§ÀþÞ½ùÈz@8¼›�¶%:LÜýé Ç=âôg~ŒQã˜&ùWP}ö²Í�veü» ç¥y ¯ñØÞ%z%ÃØèž|ïzÐ�½p˰é ’>Á‘ˇÿHü?HÚ¸ í)ý|êúrw?vJ¹ð�oüe�øÿ ?QE»¡µ[òöÇçdõÅF?¥£k"õl�(ëZ¥]�õTý¾²ðŸÿœÞ�ê|æ¼ö]v®QÚ4 ñ÷wM¥¿ÀǪ^±j§áõÒ¯/àÔ$üÏÉ?ªy�Áß/ÍÆÆ[%ý«þûßoÞª¾)ÈToäƒÍ• ®ßÌ=ÇóŒí‘ëôÎK[‡—dŽøG¼®kðñÀxàÏõÀlü¹Ç~f>ü„ܦÐ0:ÉWð˜ þ õ†GÿáK&�eäèOY�qé¶^‚êªbütø²<�ìxftÇIŽI& l€½ÂëúDžõM›ûh�Etp %²Á9'à!Ë8TCµ…îýsÑ/…sx@ãÅ[ü+2ZWµ£3×�ðáQLŸÐÓoõñ]y Tâ¯ëÉ»íÒùúEן;ÿ$ÿèR{¾ÑñU‰±_ ™Öyì;ëèCOÉt•Žu-ï=ãHÎ:ÑK?•�>qo÷k ôJö…wškɾ“%ð~…Xxßà ×Jþßµ'Ö€ú1w_«ÊOX¶ü.^§ƒ§Ý�úÙéðwxI.üîý‡ŒÆñ—¦ŒÆã�ñÀ/ðZj6¼@⟪;k}€;‚îÓì[Aq˜…“$ðˆ-‰?pUlÑ?Ž+�û¾3'èÄ?‰9´ªJ𔎇·Á�§éŒÝl$xn8O8¡aÇY�Ò�¯ÒYmÀK8O[Ç{NpÓ+ 9ç%}ÍÓ:óù#›�v÷‘lúƒÓ~£6Æ�-†âWá>¿€­p¾E�>÷w&Hòo(\‘©ãe|t'ý À üÙè›È{<Á‡”âG²´-]5ž�é  ÍÝâ­ ÆFþ�6�=¼—éÖËQe6^K­^K’þ^ðD§š×º‚GdVÕš ÎyE¥xlÖ䉼µQ«’ü§$(α×F€äH\#ü@Ørº„Fך�æïÀ™šä?áwˆSþ(¬5®Yá8#üàÞü‘ä_éÝ*›@ž³>¬Gñ(@÷/I?z:žÄ>ò†µ6£ÇI²ý�Èq×>¯|ÐZZxµ œÖ:ˆŠ×ý õØ<Ž~'ùÝßëºúx|ÖlµŸµ‰j9�S]<æSàG:àõó¥ã—äÃÜû¬k—Î[Ž�7ì;æHÕ5ÈÖÓÉ?›NØÙ( ]}¿¨-É¿Ÿ ᯠølø¿°‘^��pëk׎;× µùNƒÜã[–;ø<Þ_úËãþ�ï*ùÿ ;ÙÈÿx:kmR‚gÎÑÝ|�{Ò¾ãД´ž¸Ç¿‘ör‰Þù½Ïàã�ñÀx ˜ €xbàx`<0ø‰p`VAœC9î¢Uéwþ\Ó„mIŠüѬ$þ ˆy¿ÿCAC@²NúÕHÒÒ!#ž%ÿ’a€�2FuÛGp+%Ü:@ªÜÎâĈE¹Dº®™{ÿ¸3FÔæíòÐS~ŠâÙ@éx4|`Öb’ò�Ž °ãÈAï¥óÀIÀ£ÛëW<ú†GäÒ/ �ûŠOPCÍãûl„^6ˆ×ûç.oÆYc7rOèIGÓÅz�.ä:Ž<%ý;ï¡ø.÷=4}Rº-ðVÂ_i÷µ£ñÖ74×wº± à/ë+‘^×1üÀ«=zZàëÿ{zÜ¿%þ¾ëφ�xl°1°^#þµªÿ‹€®WÖÅky]Øp®#«2vѾÎð‚ïïÕÉñø7$ýNþ³Pc�m w¯òKx¸¨ã�Ž/á¥D60üKp×:0ýv:ü�ã�ñÀx`6f ŒÆã�'ò×uÃÃs°Žrµ[&°8ø{ GðìDë$ë+ r‡i?‚èIEWŠõ³T.êV;ãÐ~’<‡áÑλû6È/¸õOb”±WÉ�Ù^´Ç¹½Ÿ†:­Wà‰X²^Ë/ãŸØ'­G<Ú)mÛe�èK<ø)}�âÛK0C¤œ5C]ÉõFg­õµœþ]Ÿ×ˆx)ô=Ó­µÐiÚ—ÖJu Lž"X¸dú�ý>fÖšû—>úyœÒÑñŒ“~ Ÿ¾�Ü«Û*ܲ;Þõvþÿgï\´×qm›J¥vŸûúÿß¼ÏÓÝ»*ÉÅ„¹˜¡$¿Ëöâ,€ RS.G d»×ûöÒ8|)½Ïκû·ïëß¿Ô��§�ò}¢Il¹ ’÷}æŸ1S²Î�÷H®_#™×�~ÿ¬mC uúãמ"áçWB¾F"ÿ;Þ/øõ¾€_Ȥ<’~’ôw’ÿ¨|³~'$ÿ�̵0–ÄŸD¿“¬/¿åŸ¸1vš�ÚÞ³ò¸8¶™ ‚ÚG›2²ízëS �µí«~ÖMÀ“€7ó¼û¨MÀ¾�{ýEôìtqáÌ�-J~ t%´³Ò5?66òÑÿHüIþÿÑÿÐ@»0Õ&@Êf#y§¾¶ª$ â³îøgw±mJ] þŒÉ»}øFÙKþÓÿ´Ȭqñ<%ûU§Ÿ ërq�c‰Óâ+¤åeè|M:²êšI6µ9÷zÍ(1×£öÚÀ®Z}±)^¾ÎZPÙhâOÝÅO½ÙôÑ€h~Ä¡…™`…ÔiK×ÿù1†¢uäÂ?û›�±ò¯vÆQ4fÒSÙÅØ©éÁ$;_Æ´×´dõÙj?:åP¿Þ7·jŒj—Þ÷ë½ {êñþ¡ÄŸ÷®ÔCÒŸïaHþO“”“tGrýÌýxŸâ3þ$û)ûv$ü?þùϧ§¨ï1î-ÆsçŸäÿ7ó´ 6ðÉŸ",:Ézn™OD¬ôåÑþXO>æß’þé›þYoKö3é�ãȧ 8¦kå¨1²!e“œëë퇶‰ëb&`K¼°DÇ}&`&p".Âtá¬ýeÙ^;.p)²í%þØ£_ß�Ÿó�‹aýçÎ?ÉÿÄÅ4?õǼ™Ð·‹ÕÔ[‚Ígý•üs·.ÄÝK’ò3½a£°Ži-iÙµùØ@öqAñö íZc^%øHéy·Ÿ5µu¥lí)^{ê°r.�zÖò\F@Ù$™£×i““Ì×äœMm(ù—Om3–×G3%ÇD¿bgÌÖFg|Ž-1KrÚÌ·ùÑ'=_Ÿƒ8u]Õ7dží§Ù·£2éu�­_}’»P»±#Û§˜a˜ó«v�«ñ«­êý¸Oï[åØÔ'™‹÷>@,Ýùç‹ýòÎÈŸñþÄO’ø�*¾ù‘ +ùç§ó}*bÿŽ÷;>^À]z¾gà¹IÚùó~± ÀfO §'Hü[Í�ƒðÏÇûCê›þSF;ýv {Ÿù×qqlGT1îÇÈ.YûeCb•Þ^ÛU�µÍLÀ à ¿ŠÀ­ÿqôú·ýr墘úÆÅ*zHî–KrÌïeó�Öµra«Ê#²yáò'5.œ_¢þ•/ÈBf�¾_¡SeãÉ€OI5¬±†LºCÏ_ ¿×¨êÏhç%g»È…6¯9ÙHøÙ$È�„è“N»ïÀ7hwñÊØ¸xVò?]TsA]*ã©·þúæÐ¿º$ß6Éœ®5Ô~l´×ªüF’]‰>2kœ7é\PÔ„?úbË €hçº8çÒS[ÞPìÓ�ÝEâ%ô³êùÚjsLöæ[ãU]~ÕÖëKíµñꟓĦ¨×úhW{ÕGc4V²÷—]²ïŸ’ýpP_µ1Žvþ_§[þßs7�ä;Þ«òÑ}ÞoBWÍ÷ÂÒÎÄ?Ʊ‘0ÕˆÅFÀϨ¼G’øSIü§ ?zÞá/ ÎYÚ|¾ÿ%|ûšÄàŽ?k�мT‰Ê(¦ú�ê—mÔVŸüÕÆ÷+ËZüþ5ñ•kÅÞúúFk¶Í®EÀ×"ïyÏ&°öfö`‡ˆ _.€Hþ³r±Ûô¼Ð ýO$ë¿ãQØßñ¨«êŸÐ©|ÑUÞ ùŸýõ%ê_Qÿ�Äþ—¨¿¢O�û#ósÿ!_â":7 b޼ËÞ]�î¸sqN� D’|ü¹ÀC>- G®Ù Ð%$R•ãC'áÏGrcìŸð•Î…?í,á“ÿ7ÃÆ�ÀL �­fBú´Ðü5ï.Ècý{è±ë|ÌI¨©oNW?ɸt¤ÚuöÚæîº6¸x Níè£Mœ~€6v*¥¾w×9ˆ¯Mbé±Å£?Çç¿»õó®1öÚÅoN̘ٛ+z¿ä_ûꘑ.[/k tŠ|ÕsPû§Ž­öªËg”Ä�ú°U_Ú¼ßñÿúã±�£˜ˆþôÁ/|¨Ï¼GÆ{AÖHÎsS�÷©ð' y&í‘ÜóÓ|lRf’ÉúHêN>¾OâÏ{N“ôåü5É&m|ò3ÿ1ŸÖ(†O6õ�*+sô>Žú«½úõýj[š€ ˜À1øëb&`&p �¸H­¹ÊqÞí� [’þ¬‘lKgàïØø;ùšøóåX|ãõ{Ø©?¢þŒúIÿ_Qÿ#êï¨Øˆx<ò�Ì €�™ü‡ä#$Úq%ÎôN—ŒEþˆ5qaý•' jÂõWŒå¢œ‹o6 (¹iPÚlüŽ‹æ¿cI.°óÉŽ½\0çüš;|¦ .ÊUYõA‹W¿ê#ꇕv•Ò±ÏUùÌÉÇ9œ‰¡Dœ 6�ö’ulQõšb*>’Ц,´U2á‰F&þ!÷’ÿ˜KñðÏqm�´)ÕF¬Þ–íf?DWŒC|ñ¡3F¾½\Š³Ô§8øPúöÎúñï\µ×¿Æ”]¾jóÞ»»÷F½‡pž¢fÂýJþS²õ=Þ�ŒÏó²&ÿ¿#ùÿ_Ú—$íT6¤«q2韑™ì‡ï”øKgÞVc±¹^Ö<½¦ªíÂúÇÙi9o›C}Õ&]}–&`&p oœBÍcLÀšÀ§ä¿\ôrL‰ÿŸH²yìù'.pÿ�üG�îþ‡Ž�»ÿÚà°s ’ý_$ü‘øóÀŸÿüÏÜ4Ȥ?bIþŠØù@ØH¶2ùg .‚¹OÙÎ�ù˜\ì¦vîàò9Ûü¨ö£Êx~Û[mÅý7wθøfŽ�™ü‡�oëN.\¼§UæÏ„?.¶S†=/Òé×…nH.¼©èh%9öªW²#•+±îÛòAV]~²Míà>é-¾ÆÊ7ÏSëc^ÕLÖc¼ÚÄÉu•˜Š�²;ÇÄÏvÍ™±Úøª+¯�KÙbN6µ%™ Žiö�Y£pYÖçú��SýS²ö�¢÷ch«Ô9d[“uŒ’|Æ`Ÿkç&>Í߬ñ~A_&þ¼WÄûU&ÿaÏ�C…Ô�x%ê|6Ÿ�R’$õŽ>ï'ø² ]ï1¼ÿLï3øð~2çh㪞ýø´uçk†µG{Òu,_,™’2±[˜oçéMÀLà8Þ8Ž—½MÀLàƒ€,èQõø?›™øÇ]É|ü¿mäl´ä¿ÿÐGxà5* Ù×/¼ÄèH{’¤Løã‚˜�€¼H�5e‰‹ÈØ™È;´ºKKOÖ¶ö¼Ðå"›¶”¡slèùYܸGòO?þ\ГüóôOì]´†}Ú}ï✋mj³[äcü›IEꜬäƒMIp&ÆÑî¥úG’8{öà¾×.ýœú4F2ý£�yÑ'9ж½qÄ ›Ê¤5?ìémÅåu:­±éòãµ7錭íгW²ôç˜æ‹NÑØª�lµÿP}ÎOñ%çüN±3†Rcï,ŸÿùÔä^#ä§¾Q;ßÿbçŒóƒ5ÿxÏȧ£âÿ<2ïúˆŒ÷&¾õŸ¤ý%äŸHþÙ}%ùGÆû(ñó=ƒ÷’ˆ“ ~Óë{KúèýE’u„¯}¤Ú“-|¦u×c¨z;&[•¸]¢Ô˜Òçâªéb&`‡ðÀ¡¤ì·)üÁî uqÒ÷¹m#@âÛʤ…mJ¤ãb6ŸˆD=ïþÇ…ëo*‰Ôé €Ðkò¿ô@&ÿñ@n�ìÇ$ýYC'ùÏ þ�ü³.–c�¹FìQù?Âçnu±H&ò#“}Ú¡³y äŸ� HÿÍ4}íxIþó»Â¦D�Ø\€Ç•öÇÅ:é±®é"½ùä:ð�ö£ñœõÓFWÒÏoô^ê�âŸÚ^Ó×úwÓïÖrhüQÌ‘í˜Ø#ß9›ÖÙ˺†þo*}ÕÖ·ùÛœï5ñž�’v¼_ð¾�Ìä?t}9j¶›�'x<Ÿ÷MžlÊ/M�÷N$_Èøé½…×�ÞcÚ{H¶›�÷µ«Ž-_«mlÕ9–é5Óéb˜>ô ê!>£q#ÛèœT¿¾ßm08†€7Ž¡e_0�¸ÍÂÅ+Š.bãâ¶~æŸä¿&ýÓ—¶ înQIî§ïˆ»ÿõKßãî?¿��É&üȨ$ôi � D.¨s-,‰uaãb•‹äðUÂÆO rמ ó©â®„?$þÙn662ù�xyç?.ÖGßßÄɩʅq»ÀΤ?üxL7Ÿˆ±yAÎšŠŽíJ=JéȪ‹ƒljOç. Jþ§/ák6ìªøKGf;8Ë>ɰ©[Öæ7µ±‡MkÅž IóO{éW;ýšoˆé8u¾§c¬c‹^çÌ× A¢HÏñ៶]Ç4‡|˜kš§ŒÝ¹×ž·Åì}¦˜%Nµ-ù×¾:Fºdõ[Ò×úú~ÚÇ–º&%þ²�Ú™äó^¿ö“¶x?˜úè§Æ{Ïž-ÞKôU~,€v©øæ¹$v«¹–N×úæú°«*^¶�Óúvêîµ1ùf÷ÇXÙ%5FíC$cFen¬|Õ¯¶¥ ˜€ CÀÇвïf ðÇО“À”ô3©.hCê6û�»Vúæÿº 0=þ_Ÿ` *ßðL¢•/Tòÿ#ž`ƒ ¿è¯&íE'Éç"9¶>J»8~'!] áKøQói‚ˆÁÓ™¬Åš§¤¿Óÿ&‰�¢Çþó‹ãQÝ܈ˆXü/Ì„�‹hæcà d>ªcigiÿ_§ÿ·­½ë¼ÿ뻺*GÞ÷‰†|8GPäL¨²  ��_ùÔvýb=Å‘MmÎߤGÜÚÎ5pnÃN©íÉVûgt’,�ß)ûíLnÒa7Wö–X™¤å@òµ6séŸlá3饺�ëãÔ1EŸâCe—ÄFYj×>é’ýXÙ%3øJü>ƨ­8s2“í®“5Tû\[>#™¶x¯@òº×ÆïEõ逪ç{n·¦lê5 ¾A{:Û­O¯©�!;ÙÅ{$±�*±FöjÓ|’µoM¯ñëxé–&`&p(oJÊ~7A€? ·\¼þ퟽¼ mªy¬H=öÏüýwðùÖ~d­ôéó¬Ó�ÿ–øç¯„ÿ�Gýõ%üÙÈMüâi=‚ÏcùÚ à®<öXÈS&úl´J²Îݸ| ðòˆn>1€Œ¤Ÿ_x‰ÄÉSSò}?ê@´9N¾ƒ ¿t0曞"ˆ¸yñ12ñ/RŸ¯•}ï ÷ÿ_ûöžóõzw™“k+dÜZ%Æ\|’y%úJú3éüAßKø£=²‘ÔW¿ÚVÂ?m„/ºjœèýõ͵«=t•þ=n®]í#}dcÙ%«­×—>bñ@IDATÚkã×ú‰M©~}[}’‡ô÷>§´³V´¦LЋ3öjëÛ¸ŽÆj ²êø÷6µGŠbìZŸÛ²+µö‘¬6ô¾2WoS[ëP»—ê_’ƒºŠtIÙ-÷ ¬ñé_Sû£Ý2�û"à €û:Ÿ>0�/$�w§"Ö]~õ¯�¨ægüIüûwï±±À—Y‘ÈK¢¿G�/ xúÁ@ø>Gå#ïQãóù“}$üÌO²_+‰Y¶9îècƒ‚Í€üR­HÄIèx"€»g¹i€­$èq%ù±YÐ|¦�0m^âd,ÆpJ�Xõ‹þÔFæýøõedë}¾¸=XՔ܎¦Æ?y‡¬zµ�ÆÉÆÕ:¦ÆÂW>HŠÚœKmðÇ›ší°«MÜšÜK—]Éþ¨]“úû6çsZS;ÃöȯùGØ,ýÅxm�ô‘�@²KV[Õkµ÷zm×1kzí¯1ÐUªÏHÙ;gïûFí9öC s÷‰Qo«íªÿPŸ—õЦhmjoÉO±F²ÚÐk%fmK_²kò]“ŠU¥bXš€ ˜À¡¼p()û™€ <]\êÀiëN?�öç—TÅq÷Gÿ ûo’}êÿûz´G›Gÿù2«¬1>¿Ø*Ú$ÿäéG$ûϱQÀÝ’>�ÑÇgýóÂ7’qýº  ‘$Ÿ§r£"üž™ [T6Häyä;ïÆsMr•dž'(Jö3~Küe˧ÂGOð”�bÔM€én?ýÌ£š30Éîâ]ÍkH­@’5T}Ô†�*‰u¯k¼$1jÁNeÜHf°‘_/•Ì¿„¼i+ñç¼¢{´¶É~Óº‹ž¶Öε•>’­™>�?é)1·¾=™îò`臾s·«ßHÙj¼µþê‹N9fÌ!¾»¨ûq��gÉ¿ïµçlØ-kÿ^xèØ‘ß(Þ’�¹ó½¯­CìecŽK­O±%‰-©*»Ú#Ÿ%Ûh|�5Ò5fIÒçb&`k¼°FÈý&`I`tAIÌÿú³~úŒJîò“øÿßÿ»Ûhºll¼GRÎÝy$±ÔÎ ž}zn °Éx} n¤g)?S~ü5ùÏ�„�»ÿÜÙÍ‹S.¨£�¡‡qzš@OTIj+}ÒG[µÚ�‘m´žÞ&ß^ö~n›€ ˜Ào¬r¿ ˜ÀÃ]4b£Ö'ò‘ÿHÒósÿHîôÿŸÿ“šT™ßôI8ß®O2Ÿ²µ#p>ðÌ#ÿ<ò!Ù$àóú¹ÀÙˆuPIÎUÐs dnTD<’8’už `Ý$ç\†b�¤|«ìuÚ.&`&°FÀk„Üo&ððtq‰ä®}>î‰ùß‘ôó%ÿŽ;ÿÿæñîøG¢Oòÿçÿï§ßQ'� €ðáqúLöCVŸ·çIÝç øò±ÿ�ùQÆÅüY9#èQê&’îö“̧Κ¹håÎ|»xM™ƒãâ8lù±tqÛ6 ²]ÆåÆBøåFC§M€ü†ÿþ)€ð!þT™s…”€J‘.)ÛH*Ùæç_Qõå{’$â*Š_ÛØ2A&Š•íÎŽ­÷�Úø¶ñ5Ö4&ú䋜ôjozö¯Ø«O„Ë×HÊ]ƒsÎ1¾YŠÎkˆ"™�•võ•.ÙÇ’]òÔþ~\ß>&>cU긑­öWßÚ®zß7jc£ôãvÖý«ºÞïö½v±jߜ�·ÔV I敎¤ŒlŠY×)Û!R±%#½Jô¾-ßÞ~H[>Kk”�ä’¯ûLÀL`‰€7–è¸ÏLàá èBÉøWj$åùÈl�üÿ‹ÊÝÿxô?þÿõ¿žþPÙ(:Ÿë×çéóÑz.jU#n&ó±  �>*ÀÆ€žPÒ¯5åɉñ*Ø3ñ�1y×?.R¹óÏ#I#‰~ÉhȆÄOŸßÏ»ù$ÿ¬� �¨;ư¡ÎùDAn´Ä_c$³O¾»™7õ/4F•Eb§¨]O(ág Vú5ÿ^§Íy˜îØG;õÎÖ'öÙncµâŒô´Õ>ÖQÚÑÜk«oÏÞü÷l»ÿøðZ`^ ñšòÙVûw^þ]{ŠÓ�‘]’a#}d;ÄwÎ;Eq%«-Š�Ú’u ¶¥öRßÚXÍ7ò«}sý̽÷ÓšiŸ;Nãç$Ój]ÈÞ¯.‹¾Z4®Úz½Ž‘.‰/ºÚ§êýxµk|Åɺæ:¶Ú­›€ ˜Ào¬r¿ ˜ÀÃÐEc•ú€ßñxþô@$ÿÿŠ»ÿÿŽ»ü¯Ô–ø¿þÏÿùô'jÊØ`€Ä<:É ;ÝÅÇ5KÈ´—¶6èÿHû?tly—>Æä]ÿhsL²HòNŽã_z•$úz”?6¦/ö .6§Œ§²A ÚÆÕïÈ Ôð‹Á»q¶Rà²TY§ú¥sÞê&Éÿ?JÕTÆ©T½&ÿÚà1þI�Aøhž|�”v®'ÚŠ™ BŒ‘dNùLz*›»æ.BžŸ6†sTãîù•Õ¾§Æ×~Í…�²Ô®}Ò%û±²K^¢¿�Ñ·GsUþµŒúz[mW�8Ƕ5w?NvÉ¥~úô¾'doïÛÕ÷ºâ"5ßܺտ&™‹"YuÙ�çêýxÅœ“¹¨n]²Yš€ ˜À1t½rÌûš€ œH@ðO~õa÷¾~.k%á®í¼ó�þóe~â®?•oûÿ›/ý‹Êãÿ$ÿ¹ íWjô¿ÅÁ{È÷7*\n’ì!§$lFÏ>úF›b°y@̼k:v%ý½Œ®]I?:·$ö­äy�ö+5}~1à-d~�`Hm° §´1P_3UWìcdeÃ8µ{}S¾âÜKúuÄèòOaãæ”ðÓIovýAͱJ"¢O…øýçöç6Ò7üµ!@;××ÖÙÇÇë\ÕÎÄ¥½kž‹‘>²]r<±(užÚ®ö‘>²ÕñU_ó�ë¯1Ð)#ßjÛyíûÉÖ�ÿжæ­I}£ykŸtbÌ%ÓÕ>ç§8ÇHÅ’d¬ô5©yðS©ë”mIÖ±Ò%‡®v•súhL£¶]Û’ßµúÄ`nþcÏÅ\ÛMÀÎ' ë•ó#9‚ \˜ÀÜ“9û…§w¸%ÀE �ÍóØ=rÒÞ?óI~Ù_$ôõóþ<úOòÿ’dÿ)’þüF¾Ð/>2ÀfE‰œ¤îþÒæ²U—®½ÎX•]¤]Ò^mØ5Žx¤ój#•øOwò›m—öã^\ôS#™Ï;ü//OïQŸ¢þþõëéwÈ?QÙx ™l�ü7™z‹E¼¹ÿ³¬©/#›|諜Fº|{ÉXUÆ�ªúËšiSdç\‘ôçcÿѯÇÿe£Ÿ¢ãÕø´5;óNç·¯O€s3÷ººþê¼X&à €e>î5x ü1Ÿÿøü}~á26^C²ðwÙøwøùœÞõ�Gü¹óŸwúÃþ~Ó@ŒåŽ<—¢{I]צJà÷¾�¹ß¨mÅm(ñLJ~ÚTÖ¤M€šü+¹gà­%ÿÚ`@ýùØ¿6b#`ïî»�)öÊè¸d“cß®ìöç@[þ’ŠƒÄFUŒ:^z^p7¿»1mýŒÅ�Ïÿ“ø×ï�žk(Ç«u¤ {�-ÙŸ|ck¦�Uë‘ {d Ù·SñÚ•ÔJV%’ÕVõ¯îg.J�§¶«ýÒú±ñêºÐ)‡ÄØyîþ­þKã5fÉ¿?j+ŽdOvIõÏ%4£~lsþ5.>ò]“×Ë~\ßO[>s}#ûÈF•‘.ÛHV[Õ‰G[µoWßê#?¤‹ ˜€ \Š€7.EÒq¾…€þHÖÉF¶ÚoÝŽ!�›‘°“ðóÈÖ¦ó�ÿ¿Ùˆ;üx€ €Húù¢?>çÿí÷¸óOòŸ5ùç§üò'üÜ`­™èµEëRTRÉ>ÝÒ«ÔXlKºþ'7¸¨�ªÇüó‘’ý¨ù@läÍV7ò €v‘Wº\ñîW&‹Âº(ZŸô46ûH'&Éæ²Vl5^4§y¤ÓŸcb]ŠE[:’’qX{ÓSF_æ!áIçWùÐ"^‰Å$ÿôÒÆ/öì/~رeܦGsŠ ëì+>ÙÏ?Q´†9ý;ûû5ôíÑZF¶~\ß^³ÖOúß’¾íÿOûÖ6¦'”üó@Ûà3ÿÜõ"ñW�ï ˆÝ„½'¸DÍ䯓{ \ôÕ¶ôšì‡K–jÃ�ª æ!±ÇVõhNEýyÊ~ÜÅg@ŸùÏ„Ÿ'Zò?mÄ]žxÙó~‡@¹ØÕd:­{¯ËÖ�Qή¾’”s|”:ÇζX ý¹0#éŸ.ÄÛ@ÚŠGÿK´™»®E:‰=Eþ©7›ì5ùWlÍ›²�×z‰%?éÄ ã4ýijöIoíÑz4fçòá!»äWõ—Rç©íj?V¯qÑçâ÷c×Ú5¾”ÞVÛsúnäîßê³oi\íÅ™ë%Ò¬©ÚçÚ½½Ÿã�öRŒµ>â×uŽæ#ƨŒì²"«Ï’NŸ*먾µ=Z£m&`&p*oœJÎã¾”À3�wE;³›&p1$ÍúÜ?O(ñçÿG"Ï·þóÀßq—?Ÿè6x€;þS�1©G,¾ÝŸKM^Ùªµ-�ƒÑ%i/éS©Iµ1†ª IæT¢/ÅW›þ¸�žàî?ÉþŸ&yü??|þ_ß0}óø1>ÿ¯ra]«&aŠV1I—”m$9%Ûzì^’Çòé'eO²¦°ÕñŠ3ÉðÑøÛÆL±Z?þTyéj3ž2Í>*Š9ÍÑâcÏ �[Ó‰§÷BÅ”Ì>þ¡´ø»ÆÇ˜]WŽÈ®)V]ë@—ß%Æ÷1úöh®j[ò_ê«1FzµõqÖÚýØcü»�~Ê(Ö®g÷ïZõE—ŸHc¯¶¾]ã,õ]Êonì­Uí:o¯�|ªMú’õa«vµ%Y‡ú«^mýZÝþ>œ½Ž4ëȦ>KØ2olùìxm&`ßK < �LÉ?õ } žà#üÜß[Øžãi�çHøßIúk�Ø$J«”Î¥ªR³^¯ ”üc“Žì“}â’ÔKÖ˜aÎRÇçÜ\äè ÿ¨™ø·'ô€’îþSó—Ø¸ã‚»ÕŒ§‰Rëé%®«>lÉ6¸Hüõ%|’úƒVÇèâãñ™j¬Sº’ùèž.Âs á£xÄ"FÖfïÛ9fdï`¢>âÔ˜éÞæ•]þÙùÈŽüdKÃÇ<»æÎ/�㟉Gßû|W¿ž¾­uÌ­¯÷ïý–ڇĮ>K±FëXó¯±çtÅ•¬~kñ5¦Ê~|í«ñúG~_û±Õ¶â`;¤O>’š«Æ9Æ6Š£ñô­•9ŸÞ®ö!²úô:íZµ>ùÑ®ºú-MÀLà\º^:7ŽÇ›À—˜û#8gÿÒÅ8øÝÈ$:.^ùò?êô@$ÿ¿ãîÿôñß�ŸÿçÛÿõa‹+â|Ü)�»ÿ?£NÉbär”v•èºL�“á²—ôÓ¦äÚ‹d<6IæzmíSÑ8ü4§¾€�hàoÝýç‰îþGÒÏ÷è#ÓSí¢6'ÐE·ä4ën.Í9’¸Ê.½Oþõ3|l ómo kapdŽ›’~6ªžç£­Uï-9¾ÄÑ#ü9O³W�¹âª}šw×Ì(“mŠ­¹º1Sµ—˜ê¯±çæÄ‡2SìßÙ߯§o�ÖRm½ÿ±mÅ’ìÇW{ßwÉv�§êÌ¡2²÷¶¾­±È¥¾Q¿üûÄ^1é¯}µ]uù_BŽâŽlõxê—Ö@œ¥Ò÷×öHÇ&{¯k}²÷²®C1ªÍúõ p^}m]µ^� ÌðÀ<÷˜ÀÑný�ö½¯õw$éܹÏÇÿùìIüÿÝýŸ¾ 6^ÃöF�'ž¨|î?^5ª5á'ùT›þL62L‰"�(£KTwФtîø+ñ×#ÿ²áCQÒßK­[rç]þmËÙºƒgÀ×ÎýÔ(£×Rý%¼zŒÉØŒ'H”©}0üGœ#%þ½Ôk˜Æe�][™ô‡OÝÀF¿ÆN2M»Õ俊2ÝóŸ�ù7ÙKßNÝõÍé•Ùš¾ÖÏ”CüF>#[�wn.®[_�_õ:Wµ£SŽé¯¾Ò%wÑ–ãã»¶¶«êZÇh¼úzÿ¾-?ÉCûõ9çOí«íª×yS¶%Iìcü‰53²õóÖãèû··×1Ò%5Fí*{�¶lš£oË.¹Ö/¿9y,×¹8§Ú×Ö¿õõ�zÜg[$à €-ž¯ÉLà*¸Éïˆäÿ5’ÿ?í‘ÿG²ÿ¯¨ó�ÿ<úIÿk$ûø¼Ç#ÿ?bÓ€ä¶&ùJö%Iýú„·o㣱×+%ø’ô¡Sˆ‰^ý— {Õi×Êú³r,Q_ÚÏò+?ã8u¬|´Û+ýøEE‹§âÊv÷DK†e«Ç‹Þ×Ü `,q¢ˆ�.ùƒõWôë‘I6ÐY{Žiój|®'ú˜OÉ¿þé˜c ýÍ—ëÐz$gú÷Æì‚LÇ¡ùkì9]qæú«}ηúœ£ÏÅÙG¶¥¹û¾¾}H¼~ÌZû�˜Õ§�·Ô×ûÛîc3¾–¹þ9;c—úæb3f)ëû5cÔ7’u>­m4¦ú)Κ­ö£kí£1s}²K2Vú’¬}Ò5¶¶Gk±mÛ8Kÿg¶½z¯îQ xàQϼ�ÛL`" ?Þï‘Ðòè??ý—wÿcà7‰$ýÿŽ/øû;ê+�þ³}om v òKþØ'µµMBI{IcJ\;�>J&Ú�dŒ’ùQò/>¬A¾’aÚmÄ…|~d!ŽégT6Þ‚?÷Ÿ‰Èï8 ùÏ�’¶ ðc¨É‘D9t’^%þ¬�‚dn’nq©ºØD÷Ä@ÇŒÅWŸýG¦óH§¿:&çfMaϹCßKþ£]×Àºë˜FÀ�-ÕÏýu¾ê»§·±»p9j¸|ÖG¶9ßCíÕïñ/ƒ5Qj¬¾½Ô×ûöí¥±µïý˜Ø½ï)mÆŒJ]ë)ýuÌ\,Ùõ¾XÇ �úeë}Õ¦Ÿx’²�äÈgd�=ÆF̹2ê«6é’Ä‘¾$kŸô¹5Øn&`_EÀ_EÖqMÀn‚@½ÈEÏ €úø$ûÿޤÿ_q÷Ÿ'ø¢¿wû�'ÞÂï=*?óGÒLQb;'¹äT¢;’ÄÀG—¦U§�²›i_bÃW‰¾$vé¡N‰?sÓ§J‰0wþIüIðóÎÛ $ÿlð ¥ ŸÜ4‰1SœÐóÂ$ÎM²ÀG˜7çi²¶Ññc|=néôÿŠ>þp)é—žI}ôQÒ_z‹…]Y˜æŒ¾)ù=çg¼Æ2Hºd³íf*¾3ý;wyö?µn\oïÛÓ±µõÎõkWÜ¥q}ßZ»Æ\óíû—ÆÖ¾Côcb÷¾£ö16|çJ]ûœÏÈ~è8ùÕ÷ÈoÔ�M‰~õ]Òë˜~.õ�Æ/õ�ü{ãçʨO6IÆJïåRŸ|G>Ø\¶M€ó7z�n{Õ^� ìðÀ>·LÀˆ@ý#ŽNíŸà3ÿ¹wÿG}� €§°½ó™} a×)± †$–™ˆI?¶9YýÃm/IQ²�?º$:±•ðÓ®ºú‘¤tÚlbè s Ž+“6"ùÿÁ@Û ñÏ 7ô�Ö¢Òëú˜ÄK\@ÕMéâÂ8�•ŽTÏ®¬-ŽÚôOãB§p±&›6 ˜G±¤§Ü Øùk|µµx;S‹ßõ³a ùFú{cÛÕVõµñøRñùŒl}¼¾­1’sýKö¾ï�ö!>Ç®©�yîø>Þ¨=gÃN©kØYÎÿ÷ܘu¼þŸ×Uõýµ]ýz¿Q<ü–úú8§¶—Ö9ê“­—ZïHŽlêº=n›|^·y^¼ª1oŒ¹Øj&pçê…§ô¼›Éà;ô€öÀ�Øø¶|á_lpWœïÈä9˜)‘ICìKrJ›_m‡)KMÜ¥ã‡^þ‘N�a-è$mžàq~>ߟ�ú·äŸ/øË €hóÄCÖðáãÉ� €¨y„Ž“²gü˜ƒï à�ÏÏðI‰-ªØLÇLŒ°g;t�gœ6 ¤Ó·¶ÀÚä§¹¦M�6W„ÙKÂtQ'Yûµ®=¹søòM€ºŽsôÑq�2×7²WÛÒØ¾ï�ö!>uþCô>æ!cªO?þ�öÈÛRéç\òý޾~=zïÔܵŸ¾Ú®>£qòïû4N’˜k>ò]’£µá?²W›ô9ÙÇ�_µ�lô»Ü6�z^oûH¼ú{'à €{?Ã>>0�OêÅ£t$µ>À—ò…Ó± ðÉÿsØž£ï96ør¼‘gb3­I’Å)ù ½¶Ñû¦É†N¢Ž²×Ô±±/%ÿÌ�¥J’jÆeòǤÏù¿ÅÏr×^`Ã Ž› €LðƒEI¿¤’ú˜—?:S�1©Gl$ósl”Ê¡¶Iø'ÆÒ›Ì1¡§ÈÔ:‰M\¬íµw§ñÙ¬¶¦ïÅ­¶Ðë tÉ�kŽF�|�é¯ãz½o+®ä!ýs>Ø)Š%Ym½Þ·ë˜¾oÔÆFéÇ�lÕçX½�wîø>Þ¨�íJe¥ãÑ{jßG[}òÙÔ')IÙϕĕ‘]6IÆIïeí[Òû>Ú.·O@¯‡Û?Á=àšËÅLÀ’€.F«Ôwð-ÿ¿£NˆäŸ�¼Dòÿ3’ÿ—èã#ϱ ï ��’ÓNçR“Jÿ’”Ÿd¸§?mJMØ{�6u”ücÓ¼¡îÅ¡Malý@>Ú‰>?ó—qÛÓù«‘ø³@¢Ÿ5Ʀä¢[•­�Ä›?:|~O²}ð£èØuÌÄJ[‘â¨>%õ1qúÎI]œi\ßÞ- Å`-oÖvDÿ§Ž)ú1ý¬§ú÷íÚ']rηö÷>}»úJ—Ä—rn{åsœcb×5ÌéKñæÆTûÒø¥cPß%¤Þ¿.ë1z>£˜øôë–­—£ñ—°Í­³·×¶ô9ɺԧ5öí‘�|-oƒç´ýÖ•?Ǧ¹‹ l™€7¶|v¼6¸0�Ñ…È…§øÒp_½~þ gÒ‰-|Éàçþògÿxì?ÚTúxD>ï„—$xJLƒD¯«½&•ËOmà*ÉŸ“Jþ‘bÈF›qÄÃŽ.)í©ÆqÕïÈ'ZâÿÜ’õ×M€¸Þ%ዸÅï“Ùr �å\çØ®­×€ú÷døæ\'ÊÑØj«ºÖQmUÿê~æ¢Ôyj»Ú×ôÚ_c SjÿH¯¶Þÿ”öh 6Ê1sÉWráðu\ÕYÇ¡>ZÓ!r.áè×vH¬kø°~­µêZËȦ¾S$s�ÂLkÔœµ-}NŽÆ`“¿úGòŸÑ¸CmkñçXÿ\¿­¯ïÜãóxØolélx-&`Û ªÜŦLw¸¹x­•NÚøPq§ô¾$ÛØ”tW]6IƓ̳2äHó”ðÓO!æîh>æ—½®gdÓz$µ–é³ó1H¶ŒÕöŒ¥D|ט>·¯»ý$üùÔDø£Ž×Å 2k‹ÑûЇ�±šóD¹ —QQ§ w­§Úª~nÿ1±ð¥Ô9k»ÚÏÑkÌSô~Ì)mƨÔcÁ¶Ô®}U_·ÖßÇùÏÙ°»|&S%ÿJB{Ûˆ{�$ÿjC׸·÷©mùÏÙj¿tIÆT]1F6õYš€ ˜À5xàÔ=§ ˜ÀöŒ’ùšðW=V¯;ÞˆôLNi·š}üE¶5™ qøOÉqÓ• Ç3Sò/]1•ð‡ËÞ&€ú%éé²!5_•l"ÐÖçðëZ±S)Œ§T©˜ŒåO_芡 ],#³f ’à7úâŸÝ1T‰]ý'ÈÑØj«ºÖYmU_믾U?v\{®¾4~©onÍý˜¾]Çõ}´)½ÏÈÖûÔvÕGc±QÖüúþј 4ˆ%»åx*)Ǫ¶8kCàcû­OÈ®q5†úªTÜjé#¿j;DWÜê+›¥ ˜€ l�€7¶p¼0�눋ʽB»Ô½»þ\€ªÆ éŒ'õÜ¥Ÿºlk²&ÙèS‚: ²Ú¡>‘ô«â+�¾¾°!°47þê—.){•ô)QÏ>ÚUÖ ÆQtL›±é/¶é[üÖãC2&ç IÉv³Ecê›óÓ˜SdSuGµUýÜþëPýP¿µµ‡2ç·Ôw蘥}ߨ��Rç[k¯ùfÀòÏ¡þ½_ ñi}µÏú>8Ž6ðãQÒ¿e¿UÇí÷¬·4¶z®ÙÖúk,ë&`&°ÞØÊ™ð:LÀ®O€Ä¿•L@Ñ•ð�dtO~Eߥ­»>BÈgI’üR•Póæ¬Š �ññ•ƒ™ôKF3 +§.ÍA¥÷ÙªëâB—Ú¯±®7ý¥Ÿ ý_7ÒÞ%öøkÎŒÕõO¶Î®q§Èјj«z½ðé#[¬^ãõcûvõ•.‰/¥o÷¶Ú?§/�éûúö¡1G©þ§´Gc°ÕÒÏ¡¾9»ú‘‡øTë;pë7è‘í®} Ækœâ`[*òï}FöCm5ÖhLí·n&`ßIÀßIÛs™€ l‡@IöûEerI?I?�£ä_¶èÆg­F>U—MR ²’~}A’B?É¿ü±Q´°kíþí7°ÖqÒç$se_\¤£SXW¿FmTÈ?ÅL]I:c[,|'�þfÏ eù7û£ÙÃ9ýµ6]\#«®qÇÈê[uÅ­¶ªÓ_Ç¢×ؽß®¾Ò%ñ¥ôíÞVûçô¥1}_ß>4f?Ž6¥Ž?¤=òÁ6Wúø#¿C|FãlûL@,k².›¼éëmê[’Scã/ûÒØ%¿µñkýkóºßLÀ¾’€7¾’®c›€ Ü&�¸Ø¤èÿ¡¤_>M‘6I%Á’Ø)j÷2“âèWòÏ4‰?õ¯¨%ÙŒ¥(ñçqúT°Óî74Nsã?Òe#I—Ž/1ë]%ÿ¬qZ[Œ¡Ôq\ÓNŸÐ•ücÏ9Zú5=®ÒóB]c§6±[_ÎSüÔ>EŽÆT[Õ™_e¤�luüÒØê7§ú,ÅZ?×Ç�_íý˜µv;§¯Å8¤J�cg9ìßSÇÝ^=�o%î}mõGýÕVã«¿ÚÑׯ­õ2‡}LÀLà» x້{>0�íh ? #Ù—Ì�;O}m~i—Žìj4Ó&Ù÷“ ÷µ&×5ù×€b³Oþ‰E%ÿØ5V²Úª®~.nѵF|еFmTh�ôÕ±ø«�zKÔ'¿ÖÎyÚ\Ò3Ùg|óùÔ.}øÔøÒO‘uLÕ5GµUý˜þ:�2?²í¼÷ýO?§Æš›¿Ú«ÿ\Ì9ÿj¯ú91µÉ>®ì–·AàØó'ÿ¹�€cŽZ±Žc_0¸Þ¸…³ä5n†€/¾öTl�o¦ÿÚ@Îé»4t—ôÒÝ·e«Iñ Ì”4Ëï©9w´†¾¯£þ^r~Tó~´«dC ®5“ö2Fó(F/³¿÷/mü—|ÔwIYcU]k©¶9}η÷ïÛ'I?e©]û¤KîFïþÙúØò‘ìûGí‘mnüœ}-Æ!ýøÔRçªö[ÒÏ=†K$ÅçðºôúGñtŒ£¾sÖÎØscjmç®ãQǯñ7ßG}eø¸O!à €S¨yŒ ˜ÀÝÈ„?޹w‰¿úبz¼6 ùÌI\é[«<ÎOÕ7üK†i²É§Ê>.þýZ°©¨�vÕÕˆ¬ ?hy‘F¢Þ%îºx“ÏœdÎÚ×·Gqª�ôKÈ£êZCµ¢×q½ß®¾sz?¦¶�Ã8ÊÜÙ%wÞûþs¶¥1K}ýzæâÏùÉÿ�þêký¶ ðšÚ{¿íÃñêMÀLàKxàK°:¨ ˜ÀÖ ,%¼ô©ÒÙh²¥Ï`#àÔcW\%ÿÜQ'ùçKÿxlž¢oÿצ¾7’ŒÉu¢D©úÎ2¶©oIæýø–ì“ð«r>ªÄÙ«mäs¬MþçÈ:¶ê¬UåRz�Lì~ܱëÑ\—ˆSçVÜCl½Oß>&–|%çb©ßò> pÞ½ pŸçÖGe&pÞ¸ GG1¸5aéŦ‹ÈšXçaVŸ0Ô¤Zú’¬ñz½ÞÑ'É'ñ§’øS”ø#µQ MÉ:·tÆÎéôRêøôoÉ0)1Ý)Ñg*é·"‰Ýûk“ÿ)²Ž©:kR¹”^ãûÐqsëÔ\KqæÆVûhü¹¶¹ñØ)ýü;ëÇ¿kýžÖ½ßë1ú¸LÀLàTÞ8•œÇ™€ Ü �šØJŸ$É~ÔÚFW[ú¶ìUâó‘B~ô(žäh@ãØ¨OT_�—ü˜a½ô«ôºÆŽ¤ÖÀX%Yi#¡o6ìs5:fûú1šã{õ•~ 9ŠQmUg�µÔöœ^Çklõíû—úªoõ›Ó�™o)F훋yª}mœú‘£uÔ~ë�G€×„7ï¼ûˆMÀÖ x`�‘=LÀîˆ@ŸðêДðÒÖE£|S² P6ä'ŸlóOÙz¹ëÝýKŸ*©£tI{îògb’‚®'–Ũ2tÿЯRuÙfeMvIêqĶR¹ ?¦îÂ~³fWÿ9r4¶ÚªÞ'Ÿµ=§×ñè”êÛ·—ú–|5N_•ÞVÛ#½ÚˆÑ·çlKvú(£X»žñ¿Çú�£Øzïx�èýüÞ�ÕÇg&`‡ðÀ¡¤ìg&ðPò¢±$ü5AN=úT>4Yæ%¾ÔLš›®6²&öu@þÚ@V_Å­2\>úû2²õ>jWß) #±‡©™èg®2ï1}ò?GŽÆV[Õ'a¬zõA§Ôþª÷}ç¶[òØxsãæì£øØTê8ÙÖä)cÖbºÿ1 ðZò&Àcž{µ ˜À˜€7Æ\l5xý…aMpSowþÁA»n |òm>òí%þJä3VkK—¿{|µ @¥nÔMÅ@ªô¶¾O~'ɸ¨¦L‰ZMâ±·>ú/Q5×\¬Ú/ý9SmUŸŽ=ŒU¯>è”Ú_õ¾ïÜv�}ˆ¾4ߩ㉩RcÈfißM€×aÿ^ÿÝkð|&`&°ÞØÊ™ð:Là¶~±½õõå) ±%i}~~úñó箾¼<ýP}�´›}OáƒoÖ<—p÷‰7mdù3/:‰&Î!IîkQ |è£j£@c»t�«²×«ï¤Çq)þ:Lˆ2kè:nÎkžÛ&Õþ ¹›v¼© ¾KÈQŒj«z;†V–ÚK} ¿d�5§¯Í©q’í?­sG¾’} Ù·"ï=A\ã¿õã?wýkã¿úu¸6ÿµùo}}_}~߉€7élûXMÀ>à¢gºðRKâ ÿó¯_OÏÿøÇÓOêüÇÓÛß?ñÓ||+ÿ�x2àGl¼ÿù“ 1ɲ’w’hµ%•XG×”ì;Eýuì®g÷/vâ×Ä¿êJÖ‡öHïm½_Æ “Do•Môi éÓFK ®ÉCú…ånªý�Ù$uA»&å?’ÕVuŬ¶^ïÛuLßwév�«ê£yF¶:¦ê#ß9v000�mðÀ¶Î‡Wc&peºóÿ¬ €¿þÊäÿçù/Oo¿ï~–/’ÿgžˆäŸ'Þ#1Ö]qgmH'éF§ôI?vÙª_:·°³ñ@Á®j<ýÒ‘Òe—­ÊÚ—ñ#aŸdè¯QŸ£rœu`/á�>%ý“=æ'�üŠ¡?Å•íYÇV½&ÂÇê5N¯¯µë\øRzÛR»ï�Ùúq}›1”9û®×ÿš€ ˜€ ˜€ l‰€7¶t6¼0�« ‘Ñ€žøù@{àùí-ïüÿˆäÿGlÔ f`%Ü#]}Jú9`ÙÐûR“tú”¨grÞÚÕ&ÿ‘m®¯úæÝ~ÅmÉ>É¿’~I=ÙàT“aŒOÙìÒ¿BÆTÓ\ÄW»—}_ß_ÛU׸j«úZ?¾”9¿¾¯o×q}mÊšOß¿õyÜ’ýØŠei&`&`&°-ÞØÖùðjLÀ®I€²}öz =þ?=À€’ÿxJ ¿ Æ‘D“~J¢+±—®œCTßÒF€üå[ÇÉ6’uܱznp<}… ¶ò1€0ä¬ =“Ä�©§©Ýù¯zó÷¯ÏmŽÞ^Û»©öÇVÛH—m$G6æSé#[�s¨Þûõí¹yðS©>s¶‘Ïœ¯ìÈSÇÕÖMÀLÀLÀ¶EÀÛ:^� ˜À ©Ñgþ{�©÷žàî?`€�Äw(ùÿ�Î@$­|€¤WÉ¿’î¾-;ó S�ø±P%vmȦôQIú—ôQ¿l½$¶©r\Qó#%ùïŸ eξ™86Ùë´Ï­1Õ§Õ&½—¹ŒQ¤Kžb[Sû{}­=ZcTj¿lÈ‘}d[Sûçâö>n›€ ˜€ ˜€ lŸ€7¶޼B0�o"@¢D}ŽÏõóÀ¾�M€xüÿç¿ÿ�|îŸäÿ)úžÚ¹k$ižá¦+1—ÄG‰}¨{´k Æ(vŠâ¬Iü×|Ô/_dÖ`0=€­µõùÚý@€#ûÜÛ¨b{)ËÊs¥xµ=Òe«²êÄQ‘.Yýª¾Ö_}—ô¥¾¹9SKõ;Ä^}z}.Vïç¶ ˜€ ˜€ ˜ÀíðÀí�3¯ØLà«�òzù€¼û¯'øÌ$ÿï±)ðDÕGÚ�q%öJ¬G’¥c'ÑîïúgÂv¥¢j‡i²1–ReÕ•Ìc£ömÙû¾É/¨Owþ¹û¯/¬ÉÝ iÌıÉOz¬E>—’r/¦Ú’¹†âƒ�Rí;˲mmLí¯ºæ©¶^_jÏ�gŒJõ‘Mr©O>–&`&`&`�EÀ�u¾}´+¶~Á¼õõ­àÝl7\ùX2?‡ÞžøwùùÀ—ØøÉÿ;É< ðþ¯å&À{ôg��€÷Ãçã•´çÏÆO²}Ÿô×6.$ßu›Úè|(#©ä9ÒIô§Ç;éØ9†¨ïllıñÄž€P ÒóéˆðÍÍŽ»&þ«¶¿J�iöæ©mé’¬Az*ñ�lÕ~¨mmLí_Òû¾¾­õHÒ?*çö�b>šm�á}´hÍo«ýkÇ¿õãóú¿ö•µu¾[_ßמG7�ãxà8^ö6¸\,(é—ÄÆwüŒÄ–äÿ%ê¯H~Eâû?ù›o| >ð›oa§†ÏkÔñ�tW«.[°#)ד½Ô戕ôWv 1(#IB��Zuµó®~ôé›ýuw?7ØÈˆãx"Ño•Í�q¼?Bþü¯ÿõé¯ÿößž~Å÷!üâcØ‚™ÈïNh›‡|™_²nþ§êqGohÌHŽl¬MeM_ëÅ™³ÍÅ’?²úT{¯ê×�sÛLÀLÀLàþxàþΩ�ÈLàT‘쑼’оD2ÌÀK$Ä‘ð¿¾æÀkè¢>E}GþóŸ™4¿‘8ã£Ä•M�¬lDé“~Ú%úJ7çä.Ê8ù'NMú{�v¬pú&ÿLþãx§Í€8^m�ôóŇÈü$ÉÛx‰6l~'êw%ý$³ª¯t%¹UV]¾‡È%ŸÚwŠÎŠÖ¶kíþím}{n\�QõÑøÚoÝLÀLÀLàñxàñι�ØL  AÒÝÉé €¶À$ÿÚø‰o&ÿíùkHž`à=ü~PIú‘1 w>À�äØ �¯›ÙÝl5é¯:>j/mЧÚ'ÿرMŸë'ñ�š?ë§M€ÁÀsl¼Ç�ÿ÷�ÓÑÎ €™'àú5goµ%•_J*.’¢¸KzßG[¥Ž— 9²�luLÕ�ñ­ã¬›€ ˜€ ˜€ Ü?oÜÿ9öš€ tH�Hø)Ò‘T=À]íüÉ$ôoQù€'>ÿOÂ$ÿ<.Ï]ó܈~’ê| Ì™­=—üçZš�’}dÕéÞ­z,—’ú¦Çýã8§Ä?žv`ÍT¾Ï Ý Ž‰Äÿ‰'âŽÿS$üO!s lÓGx Æð‹ z@R<¿R£ÆW»—øô¶sÚul¯ÒÆGEkS»Ê¥¾Süêë&`&`&`�IÀ�yÞ}Ô&ððH®F›ýÉÿ_íÎ=<ö¯äŸÏÅSõÀT%œA™/ÌM6Êœ’r}] ŸôË®1s²ß蟘žh ÿ+É¿6B²�_òÇqÅq² ð#’ÿçÿþß³ò‘>ûO�>À˜[¿¶ßQáPçQ»—øô¶¹öšo×ë£öœ »ŠæT{$ñ�³ÍLÀLÀLÀ*oTÖMÀŠIUÝ ]?À/üRòOÉý[|æ?¿€»äQù9@=ðÊÏ#(fâOÒϸfnMø{=ǵ3ÐëÍœ‚DŸ2’Ø”ø�dÿ€¼ûwðÙÈoþ�ãÉ/d ’ÿŸÜù§Æ&Oð‘>ûÏ—æw´ €Ñ�ÿ‘-Ãã5ŽÚk’1½ÏÈ&Ÿ¾/Ç?²Ïµ5^ý‡Ê>î¡ãìg&`&`&`k¼°FÈý&`wM€d«nì=@ò5x‘� ¾ð'ÉqTîþë#ü ¤–¯Œ!ù�šßsäwD :µOþÃ4= ]r—®ÒÚÆSFr”ôã‡�š_ëa# ?‰??ý÷›?x”¿mèK_"é‰äÿåü�§—x@¿ŽÀÇ#ò ›dãä«~ÎU­q8öìsR v•U׸j“Ne­=òÉ�þÇLÀLÀLÀ®HÀW„ï©MàÞôIÑÖŽ�õ)Ù¯k«ëV"ËOò¹ÿü\|8¿ÇX>óÏãïBòe€$Ä$È?ã§_þþ;C>sGÿwÖ£¾G‚ÌGHüߨ `s!ôgdÓyj€2Ýý�ö¤gÏîŸ�WÛà˜ZrÚhö©M‰~¬ï-Öö’cÓçþ„þ#އ»þ<úÏãþÔ<Æ�|îŸÇþõ­ÿ’—|üŸÃà\Z{µ×¤Îw•U×ø‘�>Šúv­Ý¿#Û1ýÕw‹úèÿÎ×y­5­�ÿµum�ï­ßÚúo�ÿµ×¿u¾[_ßÚûƒûMà’¼pIšŽe&°y\Ì](ÑWk> À�íHœ_"ç.9�ÀóÀ_‘(¿Å’úü‚ÀèÿI4Éÿ�Ø͖ؓß!О ` _øÞd¶Iø£²9�wý[[ºà² Ý%þ�äÎ~n„¬zÚØˆˆõçO†ü•;þÈÔIòãNÿ/îøs矶õ�c¯I?L&>0Šù*»‘ÎúGöj;ÄÿÞ¯¶¥KVÙ$—úäSe¯Ó¦(ήåMÀLÀLÀL`›¼°ÍóâU™€ |!’µÙM€˜WO�àò$@úF2Îcï|î�§xÜ?“ÿø•ú‰É“O‘ü³€¬z> ÀøGM›|DýGèù‘�ˆ•H6Xº k'.R:öšôçcþÍ/í‘Äó‘…Zó{ Âö3*wþ_âóþS�6wà»ôÈ?‰?L~’ô·Ê±�*Kîí#ÛÈgÉoÔWmÒ%‰/]rdS_•U×lµÌÙ«�u000Øolá,x &`ßN€¤m¸  d¶%·ø�ðR^Ú| É&òÑO¬áÃGÞù™ÀHþ©lìµcà�/ d,²é)IRÙPâO\&m›l daÝø"c�HéÓ@ØòóýÈVéãqÿüå‚HìùŒ_ó±îü«†Ïô@Œå €Ü€M/U›%Èäó¬IŽc͇~•ê;ÛÛj{¤Ë¶$k_¯ÓV©ë”ÍÒLÀLÀLÀ¶JÀ[=3^— ˜À— y«›5Ñä‘ö÷Hp˽÷üÜ?ï—Ÿù�Íîüç7þ‡ÌŸ÷çèùmÿí#ºëŸŸöRòÏaU®Òçì꯲¡IQíè£8Õ6ÒeÉjëuÚ*š[mK000¸Þ¸…³ä5š€ |¹~ “’[f­wÞ#)ã.ÈLØIÔñ‹äŸÏÒ³ð‰~_ó—ÚÓùTl.ÄØ¼3sdLîú³m> PÚl Ps�ñQS¶xJö‘ôe»I6¸£OâŸ5÷×Oýå—’ôG?Ø“ŒãcmèÎn°Æ*‡yÊ8��ïmsmìbU™�bW{äSû¬›€ ˜€ ˜€ ˜À-ðÀ-œ%¯ÑLàK �j€t0“Û:cKnŸ" Î;ÿl `‹Ä:“’æHþÿDòÿ;êŸþ3õ¡?…þýüL ø;í¸›ž zÄÈoégc�ï .ßÐæž¾0üöJ´õ@nDbÎ/ ÔdŸoüïÛùeÜý�Dÿg<ðÄ@ÔŸ|éŸýÇkÌŸúCV½lÀ«Þù_Û`íJÚ{¹Ô×ûÖöܸ‘½Ú¤WÙë´)Ìçb&`&`&`÷DÀ÷t6},&`'P²Gb�›-É% }ù-÷¡çF>Ü ')ŽÏñçó�¿ãÎþO6H²#ÑÏä?’h¾€ä;vO‰yÄ ùç'IþùN>ïO™ÚÌu*èQë�’žȤ_ñ‘Ug³"Ö¡�<ñ6Hþã›ÿóÛÿcÝ$ÿú¶ÿ”¥�O´õ°ùÁº­y\3þK}}|qèí´—â¨o$« ÝÅLÀLÀLÀî•€7îõÌú¸†”$ ;7`ôú®8$ù:ÜݦMjÎG~r—žBÂ}ÔLŒ#QþwöÙH;2*wûUó.=IyÔר̑ó‹y×/Ì/ä‰ô�ï|9 z>:� “Ì—6æ&)'nTÖT×Á6~rÇ¿U}ÙOäOþ±q›É?²èصæKË<¸þ™›—¡‡ôÉOS1F¥ê²Y~¸6=¥ó±¢ûÒÖøÞúñoýø¶¾¾ûzµûhLÀ®IÀפï¹MÀ6I@‚õ‚©bÊÐÙ êØÈÏñÇF€~€Gúñçé’ç?á¯äÿ-í×ð}kO¼EòÍ—*éG’øïµ™?âÔ €^Ï�„›½ÎÀ¯Hþ©!#ñÿ�ýÿŠ5ègþ8žÜhÇ—IèÇÞñ§*9Ùµ})}..vŠæ‘žFÿc&`&`'àïJ½F81Œ‡™ÀUxà*Ø=© ˜À-àV0�“(QT¢©_ hȘS*É¿žÐ�ÿ¼£›/Üõ§*ñ�Ä›Ä?5 ’ñ7~°%ÿ|'O¨êK•ì#UIö¹C¯��ÈÚSÏ�Hg€5Ä|ÔüÞéå €½ÄŸ1Q/q÷_ìz–Õ~¨®“8çO¿ú¤kŒ$ý.&`&`&`&ðh¼ðhgÜÇk&0K@IátÇ¿óTRIBü¬ïhRcù?ù‘<ë õ^"™ç‘ÿ¬‘p³ �É<öÿª_$HÂOò¯ª¶¾ “~’ò²0éaÏM€&±k3 “øØ| ñÏo÷�ù÷d¬í9ú•ðçFóD�ô < 6 •¾&»Ó°8®Æ•^e¯Óv1000�G!à €G9Ó>N0�ƒ ��Ž ôqg?ëæ4%°ÑN½%Íy·?’y¯�;û™ô“øGþ'îö¿ö56Hü_Ë€ÚÓIy$öùÙüvçÒ[[‰n 4m�äóMÿ™ì“ð7[ÆÅŸcl27¢=ãuð-Åmx}úñй$×ÒLÀLÀ!Àßšþæ'ßÚGþ‰aØ olåLx&`›' d“äŸ-‚ÜPBŒ­Õ¼(ˆdüg\äOüEòÏE‰ýŸHòIü_B¦N»êáó³màO%ùGrñA²Ÿ Ì5éØ˜»ÈLÜ£�k*ö:6ýñ¡_¾:$1kû tNz?‡^½}­­XKR±-MÀLÀLÀLà xàϺ�ÙLà($ž*ÒI¸õDÀ;‰1É9¶¨|Óÿ[´ùB@ÿ”Ñf3 “þHæÿDÍM€¦gÒÏF@´IöŸ[UòŸ_¨ €˜CÉ?sîé­­ €ì/6%ѹ‰Qú½6[ú¦1i¾üÓ»évq«®y•‹¤0®Êlø008�Sú§Nã!&puÞ¸ú)ðLÀ.E@ ß©ñêökÎ>ÍC‚MÂO%qnm’ÿÉ}| €»í$õTÃÿ6’}ÿgú‘­N~ÑF� vÉ~Kè§äŸvT=P“þI§ŸÊ¢Yc“)ªN_Ô�iYÇïR5'Œæâ©IÖuËO6ÚUW¿åí8÷üÕÿÇ·sÔ+½÷ã_;¾kŸ?¯ïãµxŠvëüN9f�1�­ðÀVό׵J`í�Éj;˜À ^[õbóØ×šÆöãHÆy elà_Ó7üI½ó×BÇ?ñ§/ÚÔÜd(²ÚötbjLè‘/&ÿ,]îÊV=rIDAT&×�oÓ%e×qÕöWê£ùGóÉéb&`&`&`&ð™€7>3±ÅLÀ&$š}B¯öäÔ)Œ•LZIÆ#ñçn~~csd„’Z%ù<@âŸ_ O 0&ïâG|%ùŒù¤‡-“þ&'=ÚY°£¨�ê®Ok×Zvn}²Kª_ís%ñú2säWmŒs1000ø à €ÖLÀL “p%ø$�èJ$«ýTÄ!YÏ8l´‚ý5ªîÔsןÏõÿŒ ’}™`®%úðŸêmž(À?þÙ%þÌK‘ÿ4]¶�ÌñøcPwaÆ}òÇg­ÈwM§úôqés1000Ø'à €}n™€ ˜@ �Tò/Ù£ÉD¾7F{.ù$ç;ØÈB’•ï` ßðFò5u6°QÃGcHmsƶšq¤·~õUß]��þ*铦�mÔ®6ôQ%ÞÈ~ÈØ¹q½½Î�NQü^ÏNÿc&`&`&`&�¼àÂM¨û:ls ™|,Màs¯­Ñë�øz~ê'¹o P�õY‰~È÷HüIúõ+©ÇŸâ2–x!w¢ÈÒ'Ÿ]٠äß,Zs•½>jcS%�ô*çìòYëǯúŒôtð?&`&`&`&`CÞb±ÑLà‘ �h’lKÂBÉ爋óÞO1êÝýÏ_ ˆ$Ÿ¸<�wþIòIüCÖ¤_zt|„jÉð‡¡h¥OÉéMut<²-Iúj%XmKÙG6üUª.[3Òå77Vý–&`&`&`&`OOÞð«à.øâÿ.Nã&B¯­šÌׄŸE˽úÑ}@n�ôódr¦’øgÁÐtNWÿ�²®_ú’¤¯¯Lµfë}´¼~\ßÖ¸9‰¿‹ ˜€ ˜€ ˜€ ˜À:o¬3²Ç Øz"àõ�÷búN~ÌUýÚ^[Gݨ:G¯8™Ð+±o’þjŸkË>’Ø(Ä©¥¶—Ö¯¾‘¬6ô¾2_µÛ®c{]±F…1.&0GàÜ×Gý?47Ç–íkÇ¿õãÛúú½¾ó^ý[çwÞÑy´ l‹€7¶u>¼0� à‚䘋⹠b¨OñÔž;Ü~nµ×¤âɯ¶¥�$þ*ÒG[µ«=²OýU_²©o$£Jt00¸þVéïz�»‹ l•€7¶zf¼.0�M¨Ü�ùƒ^“~d­½t°u Çø­��lK’¾Ú?j³NÙ×|å·tlŠWe¯¯�w¿ ˜€ ˜€ ˜€ <:o<ú+ÀÇo&°J€µßáWR»4x-éïû—bѧuÌÉê£XZ§Ö¯¶ú«Tß!Ÿê·¤÷}£öœ »ªŽOkÖµ-MÀLÀLà+ ðwGO5�ÿ‰„å­ðÀ­œ)¯ÓLàªôG_èu öÜâú$¿oÏ�“]óª}ˆ�YZgß§öHVÛ)z?†¶*Ç&½J36•ªËfi&`&`&`&°LÀË|Ük&`’ÎCÿiP(ý˜µM€:�âȶ&«?ºæ–]’8£"û’õUÛ’Þ÷ÑVe=Ò%«Më¥ÏÅLÀLÀ¶B`ôwI?û»•5z& Þ K08�è•ÄK2tä;²)–æQ{MŽüG%sqä{ŒùVÛ’N_­¬k®­¾¹µÛn&`&`&`&°NÀëŒìa&`T%í’SçŠÆH0$“bù/Ib±> ~‡ùËWísählµ¡�*k�}¤k�–&`&`&p-ü�ý�Åîb·@À·p–¼F0�o!°öÇ[ðõÇ_þ5)-T~£¾¯²iN­¹ŸGýsvõŸ"Gcª ½¯¬C6éZ[+Û=JçWÛÜká«æ»·¸çžŸ­ó_;¾­¯ë¯7óÝúòúLàqxàqε�ÔLàL\Àé"x¤¯]à�9ýIõ¦ºî¹@ò•ÄOú)²ŽéuÚ²iµ{9·^ÛMÀLÀLÀLÀŽ#à €ãxÙÛLÀ&$ª5±FWò:9¡hüš…¬k™ëÙe«ë–.‰�ô9)ŸÚ¿¤÷}µ­XH0000�ËðÀåX:’ ˜À QUÒÏá*q­I{µ÷Húñôklïûm­¿Î%›$}Ò{Ù÷ÕþCõêWãõ:m0000�Ó xàtvi&ð HXë&dS2{�¤^k8ä´h�½oµ�tÙ$u콤_>‡ê5F¯Óv10008�€7ÎãçÑ&`J@É-‡¯Ílß‘ø×94§NC]W]Û\¿ìÈ:ö]¾U¢÷mÍQí½�6E>»–ÿ5000¸o\‚¢c˜€ <4�K&«Jîçä± ][ïWÛkºú«ìõÚæh�lÇŸýMÀLÀLÀLÀ'à €ÃYÙÓLÀV �ÔöÉ»©Oí*5¦Ú¾CW^çêmµ½¦Ó¯JLé·&ë:¬›€ ˜€ ˜€ ˜€ \–€7.ËÓÑœ€’›­bðúÎ;3küHâ)øÕ„^º¤VÑ·e_“Š/¿¾-û’\:–¾¯¶Gzo£-[¯³¦Ú7j/­û+û´®¯œãš±¯}|¼Þ¹¬ñß:Ÿ­¯ëëÛúkëü¶¾¾­Ÿ_¯Ï*oTÖ7I ÓïÛ›\´e…¯Y%ûºÈ?ôu<KhÙ5MOó¨_²÷“]²ï¯í5]ýUV�9ú¶æµ4000øzÞøzÆžÁLà �èÖ$\m%ÀuC@¶ŠIþK¶‘�üG1Õ·$븪3¦¶Gºl‡Ê>æÒºÜg&`&`&`&p>oœÏо‘€‹:åÈVû­›ÀµðÚ\Ú8e]£˜Ä©óœ—1õÿRÕ—úªŸô9¹‡>0000�¯%à €¯åëè&`N€d¸&çjW¹†H¾òëÛØ±ÕRç¬ö9½_Ûs:±F}k¶~ÜÜšl7000¸,o\–§£]€Àóóóe”HL�VLàFèu¬¤œ6zµKW‡6§«©˜èµ(žl½_ß/?dí›Ó—üŽéÃ×ÅLÀLÀLÀLà{xà{8{0˜ëšüƒ…d|)‘ïûjìšÈWûH¯¾‡èĨ~‡´GóÚf&`&`&`&ðµ¼ðµ|ý‹ ôIÇOçð&põu»¶€oMì5¶Ú´(õÑõËoM*Ž$þszß§ØÕ_6K0000�ëðÀuù{vx(÷ž®ß()¯cÔßÛj› ~½í’/¤[º¤æéÛØG6ùÒ_}OÑ׿?%¦Ç\ŽÀWŸýÿ¹ÜŠ¿7ÒŸ­ßÖ×ïõ�÷zÞ:¿óŽÎ£Mà±xà±Î·�ÖL`øÀê/òuÑUí²ÕC©ýØG>ÕM¯ã«>»÷Y‹ï~0000�ï'à €ïgîMÀL`–‰tŸÌãÜ'ؽOßßOÐû÷ý£9ú˜}[1æìê·4000Øolã0000�ëðÀõØ{f08›Àw%âß5ÏÙ@ÀLÀLÀLÀL`–€7fѸÃLÀ®GàÜ„{îÉ€CŽèܹ™Ã>&`&`&`&`ßOÀßÏÜ3š€ ˜À,�K%ß—Š3»Pw˜€ ˜€ ˜€ ˜€ ÜoÜÜ)ó‚M`ž€“¾y6‡ô|5¿sãŸ;þ×ô¹÷ã»&ÛG˜ûÜ×Ï9OÍ|ßµãóúÏ; ·Î÷¼£¿ýÑ>·}ßGàùû¦òL&`&`&`&`&`&`&`×"à €k‘÷¼&`&`&`&`&`&`&ð�¼ð�°=• ˜€ ˜€ ˜€ ˜€ ˜€ ˜€ \‹€7®EÞóš€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜À7ðÀ7ÂöT&`&`&`&`&`&`&p-Þ¸yÏk&`&`&`&`&`&`ßHÀßÛS™€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜Àµ¼\kbÏk·H`íwfoñ˜iÍ>×=Ûæ]þž}™ÀÚëóýý}9À•{o}ýWÆ·ùé·~~·¾¾ÍŸ`/о‘€ŸøFØžÊLÀLÀLÀLÀLÀLÀ®EÀ×"ïyMÀLÀLÀLÀLÀLÀLà xàa{*000000¸o\‹¼ç5000000�o$à €o„í©LÀLÀLÀLÀLÀLÀLàZ¼p-òž×LÀLÀLÀLÀLÀLÀ¾‘€7¾¶§2000000�kx¹ÖÄž×Làxk¿³{|ÄËŽØúú.{´—�vëün}ýçžÑG?þ÷÷÷snzüÚùÝúño}ý^ßy/ÿ­ó;ïèÎm>ç3t„û!à'îç\úHLÀLÀLÀLÀLÀLÀL`–€7fѸÃLÀLÀLÀLÀLÀLÀ7îç\úHLÀLÀLÀLÀLÀLÀL`–€7fѸÃLÀLÀLÀLÀLÀLÀ7îç\úHLÀLÀLÀLÀLÀLÀL`–€7fѸÃLÀLÀLÀLÀLÀLÀ7îç\úHLÀLÀLÀLÀLÀLÀL`–ÀËl�;LÀLàÆ¬ýÎïµgëë[ãsëëôã[;þsû¿úõñþþ~î¿tüÚñ{ýçá¿u¾çýí�öù»ýsè#¸~à~Î¥�ÄLÀLÀLÀLÀLÀLÀf x`�;LÀLÀLÀLÀLÀLÀLà~xà~Î¥�ÄLÀLÀLÀLÀLÀLÀf x`�;LÀLÀLÀLÀLÀLÀLà~xà~Î¥�ÄLÀLÀLÀLÀLÀLÀf x`�;LÀLÀLÀLÀLÀLÀLà~xà~Î¥�ÄLÀLÀLÀLÀLÀLÀf ¼Ìö¸Ã�ÀÚïÔ> ’½C6Ÿ=w׸õó{ëë¿»Ô…híü¾¿¿_xÆË†óú/ËskѶ~~·¾¾­�O¯ÇŸ¸ç³ëc30000¸(�µ •‹Næ`&paÞ¸0P‡3000000�-ðÀÏŠ×d&`&`&`&`&`&`&à € u8000000Ø"olñ¬xM&`&`&`&`&`› 0úÌÿȶ‰Åz&°BÀ+€Üm&`&`&`&`&`&`÷@À÷p} &`&`&`&`&`_FÀwü¿ ­3�—ožÏÓ™€ ˜ÀÝØúÅÁÖ×·ö¸õõ¯ŸûÏ#pîëãýýý¼œ9zmý×^ß™‡÷å÷Îoëëûò´ñ ÖÎÏÆ—ïå™ÀQüÀQ¸ìl&`&`&`&`&`&`·IÀ·yÞ¼j0000008Š€7ŽÂeg000000¸MÞ¸ÍóæU›€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜ÀQ¼p.;›€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜ÀmðÀmž7¯ÚLÀLÀLÀLÀLÀLÀŽ"à €£pÙÙLÀLÀLÀLÀLÀLÀn“ÀËm.Û«6xDþ�Þû>ë�~~·~ü÷þ;ôkü¯}ü^ß}¿ÿ=úÑmýõýèçÇÇ_üÀ}�O� ˜€ ˜€ ˜€ ˜€ ˜€ ˜€ x`ˆÅF000000¸/Þ¸¯óé£1000000�!o ±Øh&`&`&`&`&`&`÷EÀ÷u>}4&`&`&`&`&`&`&0$à €!MÀLÀLÀLÀLÀLÀLà¾xà¾Î§�ÆLÀLÀLÀLÀLÀLÀ†^†VMÀ®B`íwp¯²(Oz3¶þúÙúúÎ=Ñ>¾e‚ïïïËï];¿×>¾­¯ïÚ§×|–Ï€ù,óq¯ Ü?pOgÓÇb&`&`&`&`&ð-ú�“¾ý-‹ð$&p$o Ìî&`&`&`&`&`&`&p‹¼p‹gÍk60000øV£;ü#Û·.Ê“™À‘¼p$0»›€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜À-ðÀ-ž5¯ÙLÀLÀLÀLÀL`êSU~vªµ‰äEìð«r‡&`&`&`&`&`&`&pŸ¼pŸçÕGe&`&`&`&`&paõÿ…C;œ | �—o™Å“˜€ ˜Àðý;8‰g‚Ïÿðbè¹üÞßßÏ[€G_•ÀÚùôók>W}yzrx(~à¡N·ÖLÀLÀLÀLÀLÀLàQ xàQϼ�ÛLÀLÀLÀLÀLÀLà¡xà¡N·ÖLÀLÀLÀLÀLÀLàQ xàQϼ�ÛLÀLÀLÀLÀLÀLà¡xà¡N·ÖLÀLÀLÀLÀLÀLàQ xàQϼ�ÛLÀLÀLÀLÀLÀLà¡xà¡N·ÖLÀLÀLÀLÀLÀLàQ ¼<ê�û¸MÀ>XûâÏ#l1�·þú¹õõœ‰ûÔÖÎϵGÞë»í×ÝÖÏßmÓ=õ>?ç3t? –&`&`&`&`&`&`&pǼpÇ'ׇf&`&`&`&`&`&`"à ‘°4000000�;&à €;>¹>4000000oˆ„¥ ˜€ ˜€ ˜€ ˜€ ˜€ ˜€ Ü1oÜñÉõ¡™€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜€x@$,MÀLÀLÀLÀLÀLÀLàŽ ¼Üñ±ùÐLÀL஬ýò]ìŒù}Ô …\;¿ïïïW]íÖ×wU81¹ù\û ,Ïïó³Ìǽ&pKüÀ-�-¯ÕLÀLÀLÀLÀLÀLÀN$à €Áy˜ ˜€ ˜€ ˜€ ˜€ ˜€ ˜€ ÜoÜÒÙòZMÀLÀLÀLÀLÀLÀLàDÞ8œ‡™€ ˜€ ˜€ ˜€ ˜€ ˜€ ˜À-ðÀ-�-¯ÕLÀLÀLÀLÀLÀLÀN$à €Áy˜ ˜€ ˜€ ˜€ ˜€ ˜€ ˜€ ÜoÜÒÙòZMÀLÀLÀLÀLÀLÀLàD/'Žó000Ø�µß©ÞÔb‹¹õõ¿¿¿Žj;¦5¾[_ÿW“4Ÿ¯&|^|ŸŸóøy´ ˜À?ðÁš ˜€ ˜€ ˜€ ˜€ ˜€ ˜€ Ü-oÜí©Ýü��n½Ç÷'ûȶù£óMÀLÀLÀLÀLàé‰kÛO×·36ó2�/'à €/Gì LÀLÀLÀLÀLÀ‰€o`=ÒÙ¾­cõÀm�¯{\íhG4�Óoœ÷xº}L&`&`&`&ðÐf¯}šŠþÛxàÛP{"00000�{&àX÷|vïãØ¼pçñŽbÚ õç=œNƒ ˜€ ˜€ ˜€ ˜@!0]ë›UøvÞøväžÐLÀLÀLÀLÀLàÞ ø¦Ö½ŸáÛ<¾—Û\¶W}Eì^.Õ+.ÍSß:�øCyë‡p×ë÷ù9ïôÞ;¿µã{÷ͯ¥W�ù-ѹ~ŸÏÏõÏÁ­`ôf¹tí=ò \>Ôc ø €c‰=®ÿ¹o.u¼ô‘L[ü¡Ußã÷‘›€ ˜€ ˜€ ˜€ Ü#]çJêû¶ì‡ÈsÆß>wBÀwr"7x£7¡‘mqéÞXÄãN0000�íÐ5°d¿bìs}½¯Û&poœ…ï®�Þ„F¶%#ÙæäR<÷™€ ˜€ ˜€ ˜€ ˜ÀæÔ›VU�…êšwnÍkýsãª}cd«c¬?(o<è‰ÿÆÃ>úͧ{ÓüÆ¥z*0000øRº6–üÒÉÜzÞ艸ýú78µGR¶§ºPõ¯X cš€ ˜€ ˜€ ˜€ ˜À˜®q¿p‡6�UÞXEd‡ àMÏo|‚é0&`&`&`&`7K@×ÄUJ¿ÙƒòÂoƒ€7nã<]k•_ñF¤˜sRǪ~µ-MÀLÀLÀLÀLàVz-[ýª~Îq^*Î9kðØ�xÙ躼¬&àÇýøäûÐMà† Ä{× ¯þë—¾Æçýýº×«[_ßן¡mÏàó³íósíÕmõõëÒ[/A&[�û\_ïë¶ MÀO�Ì.@@ojŸdy£œ¦Ù¦N+&`&`&`&`&°\³ö×­¥Ý_÷®­�Yóu¿ LÀ£²ã�ôf5'û0zc“œúGo¢S§0000Ø �Á5¬®sçäÒQhÌ’�ûLà`Þ8•/D@ob’5lÚoš“OÙEõ¯LT¬˜€ ˜€ ˜€ ˜€ |%�S®AÛ˜Ñ5ïW.Õ±M`‘€7ñ¸s@€7±¥:2kÒ¢$ŽUßXßx÷:Ü00000�+àõ€ëT]ãö’UË6wô/Õ¹q¶›À'Þø„Ćo Pßä¤K§?àMu8ÎF0000øÚ�Œ9kÒÎF×»²U_Ù¾cÙžãÁxàÁNø7nÿæÕ·µ„Ñ›l¹‹ª7O'ÿBfi&`&`&`&p£t�Ëò«>w8ø¨ÎùØnGðÀÑÈ<àLõ Oº$¡«¾4Õ¡~K1Üg&`&`&`&`§X½Õͬ^}çôSÖà1&p4�—£Gx€ ̨ohó^ã7AÆ:~)¶ûLÀî”@\HÝé‘ù° °v~ßßý'⚯ŸŸkÒßþÜ~}|œ£`1=ÉúaM­¿Ö=æMíßnZ7M`Ÿ€ŸØçáÖg‡¼áôohŠ"{/é—mO¯ošè di&`&`&`&`[&Ð_»¶öèš·^㪿—ý¡ª¿·÷í»ïsÛž¼àÁ!–ÞHú>½9õö:�|°}Òë›'zm× ÖMÀLÀLÀLÀL`‹ºë×z½ËrÕFΕ9Ÿµ1sñl7�$à ¿%0z³Ùæâ�ÞÄdcLÕyô˜ØssÚn&`&`&`&`_N ^»JGJo Ø»ÞílÇ\ûŽ|G¶/?nOp{¼p{çìš+®o,UךzmUù {ÛÔ®o”õ ³ê5�u0000Ø ]³Jƺt�‹TÙè[²k¬dOvKX$à €E<îœ!PßpäRmzóRŸdoW[cÕžž(ožŠai&`&`&`&`›'P®cu�+©µ«�ì‹údŸóQ¿¥ DÀa²Ó �ú†Tu†éÍ«Úgm¼QêͲ—+kp· ˜€ ˜€ ˜€ ˜€ \�ÀèÚU¶²¨Ñu0ÝKv ¯×Ó²YšÀQ¼p.;�þ�§oWH}mUù©-™wÿo–ò·40000�MàZ¶\Ïê:YË’½úU}£ö[7�E/‹½î4�e¼ÕæÖ’ÞÌ4ºoc—m$sàùù¹¾q*–åXû�ïøCzÇGïC3�óœûÿcíÿßy«óès ¬�_Ÿ¿s ßöx¿>¶sþâ\¼w×°£k]ÙêÂ{[m£×Ò·kŸuX$à'ñ¸s�@}ã™{ƒêíj/JÞ8æu— ˜€ ˜€ ˜€ ˜€ \�€®Y‘}eq­ñº7Ü–ú £ëbùa£È¾kù_8�€7õnKo"zÑ�$XFºüÕ/Ùg¥Þ<µsª¶äœ¢ ˜€ ˜€ ˜€ ˜À�(ײoq(³×¾]G-_éUÎ郜+K}scl¿C޸Óz�Cªo"ý›Em�tÙ�Kºú?I%ûÈ ‹C˜€ ˜€ ˜€ ˜€ ˜ÀÙFצՆ^ô·Öÿéz7ÓÛXŸlÒG²Úz]mÅAº˜ÀoìáxÈFÿÆÐ·ç T?é#Ym½N{¯ò&©Êļ‰Î-Àv0000Ø�–èçRt-Ûl\Ëžò±tÜËÚ‡¾T4V>}[vË!à €9Ñ>ÌúÆ!}IÖ>é, ýSÕh//| g&`&`&`&`%P“é1×»l³P¯‘Y#mŠd¯g§ÿ1�5ÞX#t¿ýõÍCG9²©Ù÷«}ˆÄgµê�ÒÉÅnÝLÀLÀLÀL`«êuk¯·öÚ50‡¶t==×'$êW»—£þ‘­çöðÀžÔ/8$Þ ô&q ÙÇS›Çÿó³R¼Yöo _p\i&`&`&`&`Ðõi? ÚuÛlÓunŒA_{ €ÐøQ$«.ÛHÊ–ƒý� Œ¼ŒŒ¶™@# 7‘c~|�1§Ö·×××÷ß¿¿þÙ•¿Cÿw«ÿ ùŸñ;Ǭ%k¼©RXêÔ¦Ñ|P—J\r8´ïÀù>…kkÿdÿ.õç?ä8¯½ÆkÏ£k¯áÚóo�ÁÚkõ‘má·æ·°†¥×ÄÖwí5\{~Îϵ×píù—^£ê»öO�?Þsu}ªC9Iç�5h¾æ<]ãÖv\¶þgÔFý×­!ÿŽú'ôÿßÞ™hÉm#KtdËÛüÿw>¯²,Yö<»¢• €d¯ÕÅ‹sØ™™Á[†@—<ÿüÛZ›àÚ¦ßÏt¿õImÏ3zŒ=}¨=ôaOU EÝ÷4áÜ̪Vy5ÙÞ¥ÅP÷UnñÛùÏÇ�ÿþðáÃ_íúó§Ÿ~úýýû÷ß·Å÷۶оûî»ï>¨�Ú©¯Vo]ú6Ë»ö ¼8P®éÚ(¾RÙ¯Íý¿*÷½-5÷{½žÒ{Î×›ÍøÎú,¯¡] ¯k™Çs&oá9¯eޝ=�¶ö=÷‡Mã_Ëþ3ñZöZy´uðµ�\å}¯�ǵÍç9?´k{Ö·r𜟉Ç~ªÏ¦­ƒÝ§ê÷ü6Ÿeçfö”S—åÿÚ¯=Ó²ñW,¿½£¶½þÇŸÿøã�_Ûû«ÚùàóçÏ>XjU?¹Zê"ïxf3'?ÛòŒ)tü‹šÓ3uÊ�n…·òI>ì9ô¾ô4�nݶ§9'«K­ç[“=oþ›ÿN‹d[1?ÿöÛoýøã�Úoü¿mÿã©Íÿ¿-÷åÛo¿ý±-Âï´éW½ÖaY]¡ùÀvù@«½·~ço(¯øÔÎ~êé»°§97³í1féÃæ®móï⨟×QŸÛŸûÌÂfFçùsmí}þ›¼Ñ;•͵>7‡ý¿Hý¼ÚÚ{ï/jé·;/µÖdÓ×̪vÊŸû9nï'ËoíeÛÜ—€SNÿ„U¿íÿ­üö믿þÑ®?ùå—Oí›·÷Wõ[ú†Õø£«¥.rŽ{v¤Iw[žÅÁÉö´RBx«8¸ÕO6žë´H­í6µŒjj.cûi}wi»®OŸ>ýÓÍ¿þùç¿Úoû—ßü7íýõ×—ÿþ÷¿Ÿšôƒ6úmÁ]6üíÙ¾ÑÜîó�tù�ëB×ä²FNÇÎÉžÚÂDy éK«±ëŠ=÷/úÕ„ éÕÌåÈás¸ûô¯õ èÿl¾ôŸ™¶æ]#†«œ¿»�…?3×ñÇó�|« L[ó.j2©q,k¿qXüÔ¿ÈY—=ü{²qûëçö ¬¶ßÿðGû%Ö‡¶ùÿ wÙæÖ»mû ùì¹ü‡Æ}/Ï65ùj®¹‹.ÎrK¥Ø\v!ºEÜ⧺þLú˽u·7ªMÝ~Zù¾4#ûi/~ûßjþmÿ½”Ûb¹h}Ö©i[P¿4íS;øØÝï´ÑoµË†_Vuí:kŠ}Ðòg?êrÃq`ÐêÕ6ªW`[uåÔ"'\þÜÊù²× DíÌ^à.Üâ±Ø?–àó÷çïÒó3Î;´57Cü+$ÀÁÇ~(�)]ùߥá_tmÆóq"^tÅ#í¤_lòÛXñ©ÿÅÿ+•7ÿ-·4v-üÜ6ÿúÀÇöõÿ�í@—þnßð€¿ yÖË�4ÓU³<ã©8}÷¯5©÷üѽZ´!ÀÀ�|�k�¡…ª-Z½Ÿþâ÷t Ys³Ø9Y_CÍñÌ.‡:%m æçÖç]ûÕÿÚÂù¥ýS€Ïí?øQÿ=}+@›ûÓõm«Ó€ûïCoúóp`Ñ4®PTÛÓZ�ÚÂÆù;©=ÐépàßãWòîvaÙØ]à ¸Rü9½Ò†iA`B€ ø©«!°åÏ©6ã� Ÿµ’÷ÆÉŸrþi#®s�l»¼é¿°íþËf_yõ?ÕýãXšþ‹ÿíösûÆê§v Êú¹|jï´7M︹ùO_óËË�›Úò §ºÌÛ—u�µ[ïÕ.¹öî:ë“ýñß8m†Þø#0ý=Úbåͪ­ºWß±¬/×)>ÿ»ûS>ãå7ñ§š™¿lÞOu~Ûì¿o›ý÷íßûûý÷ß¿×Õþ[ïÛÔß·EVÿo˦_¶ÆMÓXço¨F÷ëçYTë«Õœý“æ�¾õ&ŸYI[Ú©ŸCÙs.E|@€ �Ý.6+í}0cû²gÿTcí¼á?Õ,›ýê·>Þ˜/›|å¥�toüÛ/–ç[ü¥½þÓþ)Àý7«té7ÿíPàK;øÒÆÒ·4¾­ü^l½gý<Êٗ͸…¹Œå«©�Ûâ·¹§æöF ð €ý`7<–þ¢oݨÖZ/ü½—.5�÷¯Êvi -’ºþn— lµ±ù³ƒÝCyY_5¶ÞJÎ5ÒÔªM­úг¹ojø€ @—ÓÊÃïšÒ{~¾{º&5û¹Y®¾cY_êg_67ð=ßZµÇóèÅ™«~>“|5×ÜEw?¥mm{j·ŽIÝ ÀÀø�^`ŠZrsšqúu*^8Ü×µ²k—Q5õumjé»N¶6õuó83«ûiìÜô+–Þ»š|¡+VS­›}[ëig¹¬Ã‡ @G%�ïu•�s¶ÊÛO+íÒ»Ÿkì§•ß‹¥ysïš[¯ý}?YçRù­üüœöU;j™K_õ5��~Ã8¸á÷­.ÞÔ¦.ߺ¦ xvi̦¾ÖÒÏùyÏ�î§q½ñ—¯ñuYs,«æ¸ç/§šžoMÖ㥆@€ pŸ@}ÇsEê=¿¾ÿ©_Õôþ7Òœ“õ¥ZûÕÖ�ÆÙ/}�QçЋۭ—VskºóXt pÐÅrhQ‹Œ7¬#߀”wË>¹PIÏxÍ×Âèæ1G±t�çÅÚÐ[·Õ¸Ö5n^Êel¿Ég½úŠÕTë–þLs @€ pŸ€ÞßjK-}Õù}ÏzÆ#_ï™Sl-­õÇØ¼Ï¿÷L#MºšÆuùÎcL€€øåѵPä6ãê«kÖ*öB#]~^=-óZPkSŸžîûÔzÅ9f½§c�)_Wï7ÿÒÕ\Óó—‚SMÏŸiÎa!@€Æzï|©Uß±l^ºƒc½Ú¯V9çÓV?Óï>=«ñ{zO«sɸ sž³ül®³¦Ø-}i5vö`88Øþ€ÇÕbáMqõëpªs�l^ªÍX¾@5ÿf>óÎÝUÜÿ™µ=?ÇÔX޽±—•žqúº£ãê;–uSm¶g€ @`�€Þñ²�bëùN¨~¯ùz/Ô¥º´ÕwÝ»vOç}ÅjÖíÛZ·•®æ~Õ_’ü€@à iÏ×b±u£º¥Ö‹�ke}‰®}Y-tÞ”;VÍc[ÞCϦØÖ¾âÞ¥{§ž±ý´òÕÔ'[�3‡@€ °�€Þß²�bé¾To?íH÷|f•ËKãf¼ÇÏ9mõ5÷YÓ8[ÛžÚ­cR÷FpðF>¨š¦m^gvm*îŸcT_ ¤7ÿòÕÛ_„É�7ºÿæßVã�Ô77ÿ׺ãѤ×K÷i™³/«¦>Ùj¼5—uø€ @àèô>7j5—±ßÕ×¾ó³8sÞ”Û*g_v«ï:÷¯±ï™º5Yµ´™³WõõgÖUñ PpP€0Ôb‘›WǶ‰éÙÏuÎ�¬:oöGÖcÕñ3Öø> �ï8­êËú¾ò=Žý´-}/_5ÅÙ<^jòGz­#† @¸$ w¸^ëéÒ¬¯ù½¼µÜ�÷|iÖÓV¿ÆßZõ}oY5Çö±óÃuîWK¬Û:_cëØƒàà ô=¦ŒÑ¦6Õ8®VS±¦…pvàœú¨ùÞꟛùҬ˪Öó°ïûµÔ9ï\jömUcÿäž�sg¡9=-óø€ @Ûè½®¶ª9N;ó•«yŹI¯±rÎÏlæÒ¯ã)î]M>ëé«vÔf¹Qôƒàà |yl-½M«uÛÒí¼pJÏþ^„¤Ù·U­Coàí÷¬js\û¶Ó›[iÊûª±îãœÇÉ8µVº´™æY×¥–þZ>kñ!@€À‘ä»bï¹{ùÔì˦¯±¬¥^}ÅzOÌÚÔ2g¿ggÚh¼zÏœ³|·¬³–Vy5Û»èëÏ‘þµïæ ppóñƒP‹Ãl³êÅ£ÖTݱ&‘~�µPj/ë1«UŸÔ4ž7ýժΗêìWÛR÷rÖÒ¦¯1zm¤«v–ë�…@€ŽJ ¾3&‡QÎzÚô5†b_§ïÍ»ëlS·o«û²ég®ú{ds^ª©Íýªžq¯_æñH€€~èƒGÖÑÛ¨Z¯ÖÃäÂâþ©õê¤iqT½6ïjË÷�€­ÆÌ�¾úVM±ô¼zšòjY—±}Yµ¬¿S¾þtî«òÕ›å¾VáA€ Tz‡µ^Κlú#ã™ïÍ»ÇH›¹ž?Ó2§1kœ÷I_sw›éªQ^Íö.úús¤­À;ñ1o~H- ³MkÍ÷âÑÍF‹Ž@ݳhÏE6}�¥ziö=×ÚöôÖmé뚌í§�ùÊÕ¦qi€ @�' w¹Y˼}ÙôÕ?ã‘¿ecž5k~æuÏKÛzéÜ<ÿQlݶÖ[Ç�üÐ7>² odÓWw/"™—îX~mîSuÇZÕ_—ëo›škÔϾççCë²ÎYË~Òz±µ´ÕWìæqW»–¯õÄ€ @à¨ÖÞGyë3ÛË¥&tõ6ïUËØ¾íh\ßíóv×ÕXzŽ•¾û`!ðö‡à­½kí�­Å$ûgüT �ÊÜüû~²¾ôöm=Ç#›}{¾5Y5�ã–¾5ÛYÎ5X@€ �ýfï™ÎÙjtûiÓwMjò÷\us¿ï»Öj¾jÒ³Õ8s«¾ö«EÜnêãÜö0<Ðâ�\/Òzþ¶ÉŒ«´€jl¨9–æ{ö~ãLZÆé;g›õÖdÕœ»‹îÇÖmk½u, @€À>~Ïõʼ}[õ±Ÿ6}×H«×,W7ûÙw–˺­~ΣúŠÕ4Ö®Ææ®›)æàf>Êgy-$¹™­±njÍ‹Žë׉¹^u³k´ñÏ>[ÇrÍeæ;/«¦Z·ôgšsi{}3�@€ pG`ôYùôê¬Ùª�ý´é»FZêŽc·Ô9øžÒÕ2–_[Õj\ë‰L€€ƒ~øü€iiQѦ¶g]ã¼ã½¶þÆ_ãùPÀ÷•6ºt¿^κ­jì§­~/–¦æ1î"~B€ <�Ñæ6õžo-íÌW®æ­¥Õs*ÞºÙϾö=†cÙª9îÙ¥xÏ~û¿‡ÖmÕrp[Ÿçs<� Üà:žYÏCý¼€Y[³×›ý¬÷¡€4�]¯ž>ÓœK;ókNq¶ä”:> @€ÀãÌÞ)3·æ;/›¾fg-uk5¿¦+ïC�QßѵÞñÌ*§¦1ià`ˆæö;¾ …¤·¹µÞ³¨~["�áûx³¯¸^;µµØcº�ë{65ùjîÝ�­�lí?ªC‡ @G'°å½1ÕúŒ{¾µ´[ýZ׋¥�.Í»—K=ýßzZùÙ\ŸÚ=ŸßþßCr(�€C}Ü�zX-(ÞÈö|ki·ÜÐõÛ}RW./Õ8ùÏu»OÚ™_sŠÕ<æ]ÄO@€ �—" wÅÚª–±ý™ÍÜC|õÉKóËØ~Õ3îùÖÒÎ|åhèà ‹q@@‹–7½=ßZZ ¥>ÒÔÒ¿S.º¯ï“ÙÌõ|ÕªŸûÚ¯±Ç´î~=½æz±ûa!@€^–€ß1}×YìÜÌörkZæå×KsK-ã5ßù´3_9†8¢9lB‹SnŒ+ˆ‡äÝGVMã÷ü%Ùùáþž—c[uQÎãöü¬‘¯æñª¿%V�ZŽq§ð€ @à9 ø=²Þ£ê÷|k=»UÓTë«Æ9Î_ý³¹Ojé?6Ÿcá€À»öo@ð˜<âŒÀ»Ö:ùžæ²Ìõ|k3ÛË¥&k.™¯qæz~ÖËWsÝ]t?îÕ¸v-—uø€ @ûÌ6-½\Õ2¶o«™Èwœ6}×�l£×¾{ÆW_5÷©þ’ŒY·Èüûÿ sP—oôƒßðØZ0ê†x­›ûl±9–îso�:i9‡-ãz,Ù‘_ï½'vmÎË€ @àåôÞu÷ªg¼æ+ØÚ¿7FOËy�òªÙÚ<ÆÖzêB€oäƒ^{ÌÁ·Ôm´ÑM}Íïå¥YïÙÔz~ÎÍykŽÓ¦¯:7ëŽe·jîÓ«w @€ ðtfÛ^®j÷|k²éû FZê#_cÌr5_ï™ùê»v¨óÛÿDt\Ÿo÷³ßúäZ¤Ö6¸YÓóGÚCæ ±Ô4'�ÛÓ\cëg°•î¶US}¯Öã`!@€^ž€ßë�{zÕoµºG­µVuÅ=ÍõiÓwŸÔª¯¸×²o/�vp|ààòñ'ßPYoã[µŒ×ü^ÞZÚôë<œéÊ»¦ZõÉæ|jòGúZ®ŽC @€ ðtfÝQ®§§&ßqµš¹µ‘ï¼lúYo}MË|õ{ñH“þ~û¿`àG#À .<ã!€î“›iû¶™·¶f=w×íÃ}Óæ8©ÛŸåg9÷ÇB€ <œ@nžë(³œjgyçÖloœµ>5Ÿc8—š|µ­¹»êËzk‹eó�ãðÿàðvÐB´¶ÑÍ/\몶eBîëÚŒíϬûÙÖùY·]Ë«Î5 @xZz¿[kk5£¼õ‘Õ}�ó2¶?²µ­ë�Yû¸¦Z�UubÜ#À7î!AXù€ÕÍn�{5UË>=ßZµuÅj®KM[:–Ù§¤Îá–šs1 @€À³زù]«qÞV“µo›Z>L/o­Ú:†óU÷ø™i½×òÕÿ3 àÀ$°Vzàž¦1{zj=«–sîõ©÷ÏššË±ì×zëÕn­«ýˆ!@€ö˜nxc¨µºšÏx‹ï[õj·j#k{cZÛ[Ëæ?É០ppF�S <á!€†®›äŒ÷øYë)W-ã‘ï¾¶Yg-íZ>kñ!@€^ž@o3�³˜å37ò5Væ<¶5ÛZ·E¯}<¶mŽ1Ó–ÿî߈°••ñ�¨ÿÚf9ó�ñ=×£§Õ|�ÝÇv-¿·ÎõX@€ �§!ÐÛ÷F^««ùŒÓ÷ØkZæ÷ú¾GÚc‹Îoþ“þ=ÜC‚P <ð ‡m¨Sßë¯�Ÿã©¶Æî?Ò·æ]‡… @¸£M³g7ÊW½ÆêßÓªž5[|Ï«Ž“zú9fêlþ/hôpУ‚v�Àä˜uÓ�qúê“qú³ñœëÕ÷´Y½s²³¾Y‡@€ 𲆛âÓ4fù^®§i¨-z­É8ýÙx§iß3µÿ¹€¯ýŸQàLp0�Cê’ÀÊ!€Š÷n�ký,®9On¤¯ÍgÖo­¯ï�… @¸^ÃÍòiʳüCrÙ'}Ýn-^£Xû_Ô³ù¿ÀA0!ÀÀ©û6Üït©Ô�w�U]µ÷j.ïrõúeÝcó9> @€Àõ˜n˜Û4›×“öƨZ�{ýz5ªÛÔØüoÂDщüQØMà•4ϧڰ?Õ8»ÙÑ€ @àE ¬m®×òžìZ]/¿EëÕøž«–Íÿ*"  ÂmyÐÛ€÷4Mf¤¯åz2ë!ãõî�@€ p}Ö6ÚkùúD³úQ®§÷´z¯nÌæ¿‹q…+€H� ¼à!€&±¶yïMtkŸ­u½{ A€ ¼[7Ü[ëòÉg}z¹ž–ã }6ÿC4$Vp°ˆôœÀ3è†{7ä{ëýP{ûí­÷}°€ @ÏK`ïfzo½g¿·ß¨~¤û>CËæˆ†Äl€DÉœÀ3äMŸzã½u¼­u9W|@€ �×'°uƒ½µnëmoKM÷~lþ»Xwà`,JÇ^à`|óqfï~oýøÎd @€®‰ÀÞM÷Þú­ÏúàqÙüoELÝŒ3:ävxä!€îõZð׺ï.¾C€ <šÀƒ7à�¼ó£îËæÿ‘ôé~&ÀÀÎKx‚ƒ‚ÇN• ÿc Ò€ Ü�GmÌ‹€�ýc Ò/�oöv �%p Ý«.ô�åG@€ �'!ðªï„WðNü$ämàoëóº¹Ùòm€›ûHy @€ píØø_û'Äüž�φ–�÷à `-j!@€@€�ÿ Ñå¶pp[Ÿ'Os"p |€ @o˜_ÑÃSà`ˆ†Ä-à à>Ež€ ¼6þ/Çš;½<^ž9w|¼tn @€Þ6þoèÃbª&Àÿ ÀƒÑÑñ-`AKŸs… @/K€wÅ—åÍÝ^�¯Çž;¿0öÎí @€À À;âø�˜â“ààÉP2 @€ @àz pp½Ÿ 3ƒ @€ <ž %A€ @€®—ÀÿMEwœ «IEND®B`‚ic11š‰PNG  IHDR szzôsRGB®ÎéDeXIfMM*‡i     ¬†bóüIDATX �WKHœW>3ãøv|O&>:ƒÍ4ÖH-”`‹Á�ˆtÑÐDºk7¡Ju%ˆ ÒEJ7-]UÒÐUR0PºH� ¥ÓfgÁ@ÒXL˜8¾uf´ß÷g޽óÏ�ÑæÂõÜ{Ï9ßùι�ôìïï‹Ù+G!áÍ…ßÞÞž�AµÓFÇùdQ‘“‹§««kUø .Õ°åvl6Žƒ;ÝkŠ¯ë¥¥¥¬„§¯¯orddäS¸ +HÂJ@ÝÒMœ{½^axÂá°·¿¿ÿóáááO#‘—€ nÑu•¦Nǵµµ‰D|_ } ÛJ謕È:„Õ¦`:wK×–——evvV2)êééùUÙ™žžþú ÷Á´V€Î€ò(�ËÊʤ©©‰·A|>Ÿ#�€ppð«ñññ÷aRœ“¯�6b™šc±Ø/¡Pè”±®Ã‚’ûŸL&…˜ì&ñx<þgooï»Xj‚X·@Õð/�eËÅ7dmaA^½pAÊ++�Ìia&–!T‚åœ X ÀÔ=§ �]¾,Áänk«¼yö¬s¨ÓFÃ7ç Z ¨ƒJ‚™cηvväû¹9IÔ×Ëñ–y§½ý äԻϕ­å%À€î œóÉýéömù.“§ìî–ÆÓ§¥»¼Ü)?m\Y;qÝXJÆJ€JÓáÞµk²‡S½|ò¤|{ë–Ü{öÌñ÷ãåóƒ’.)‘ß67åÄî®s\‰PækV ®Ö I\º$ á°|ÓÓ#I¼v„Kãªm·µI5°ý¾½-ï­®:Ô×QdþØÖ¨²oŒáTY]-ž‹åç3g¤ åO¡ÔÛ8í»¡�ìA·¼¾.øxÉ:²üõùsçjTe6KX èCDGŽß’0Ù*J¾Ï{)ÇŽáRË6¶fukË��̺¤4{VäÌÄJ€:¤{ÜÙÜì¸xñØ0°�2lj“ö>�ñ?èwâqçƒä¬x™¸ÂJ@�M�×ñIJáÇ‚x°‚k(Øw|ôeýñDz¹´$s �XY9  ®�•mLGŽ_ÃžÓØ�’×á ¶ÒQS#'% y‡1¹¶&eW¯Ê�Þ^Y¸~Ý9ŠEik‡Þ%ÒˆOlˆ{ŽÒWcÌ򿮦UUIkG‡¥ ç þä‰ìf®%¯áÿzˆXƒsþ÷ü¼|xó¦Ì÷õÉ2~‡3ŒJDA¤½ª¢Â¹‚ûѨ,�;'µ8¤<;Ä(Ô¬ ƒéÈñâ•+ò6²«Ã-8ÕÐ 5 QŽ+ÉJðó«7‡ÙÖÕÕ¼†ú™x&!+5¦ÔqttTîâ´Ÿ?/‘HD*�±êh¾vZn]SiÖ±•€*U2Pkg§4NN:™2kwpÎ5[úiPµS©˜*ó ƒvsÌ’+�JRi’àšQ½[æ%`šD¸®ÁUš¶Ô´?u0‰èX3vÍGN±TÚ¤ñƒïí­8¹õôäšvÎ3˜Y¸\÷¸�X�uþ åãÿ2ÿ!Ã-§1ðcô¿oÃÔÚðåxÙÏMl÷˜$’ �õëä_â˜4¥–¦ãIEND®B`‚info>bplist00Ô X$versionY$archiverT$topX$objects† _NSKeyedArchiverÑ Troot€§ U$nullÓ WNS.keysZNS.objectsV$class¢€€¢€€€Tname_assetcatalog-referenceTiconÓ   €Ò !"Z$classnameX$classes\NSDictionary¢!#XNSObject$)27ILQS[ahp{‚…‡‰ŒŽ�’—°µ¼½¾ÀÅÐÙæé$òatomes_1.3.1/misc/macos/atomes-coordinates.icns0000664000175000017500000132261115212624223021226 0ustar lerouxlerouxicns¥‰ic12‰PNG  IHDR@@ªiqÞsRGB®ÎéDeXIfMM*‡i  @ @FQB°pIDATxÍ[ylVU?´¥-¥@ Tö¥ û  ð/ k*(²Rt2“‘„‰5 @`�ð�Aĉ²:"AÙ—v©¬EZi)Ýæ÷»|§\žï}ï½R&Þä~÷ÞsÏ=Û=w}÷«V^^.AB5„ž¦AšUÇÙ‚ WY.hWÍ�GDñàVGŒCŒe;Ä'Ê@¼±±2²üDò T>±K—. êׯŸVXXX£¬¬,B=#Ààå _vûöíüï¿ÿþ*x߬üh�*A< \ë~úé§o·nÝú�n<nµá`Ð]Š‹‹%//ïîš5k²—,Yò9(ÐOÂì]Ïqº|r~~~2©¬3z¨d•’’’š/½ôÒ¼W_}uÈ4BLߨòV†]�!@WO@¯$Pq¯­Î«�NÅI'&æ�žqC† y÷þýûåüñàÿ„ú»À«²9!¨b8îUàªPViÙ©Ò���•øøxz«ã†þwt@†áF”i‡*1B…R¶ ^y ¨Bºáh}eR¥Ç¶ô€ù[·nIjjj|ffæ»/¾øâ€×±Ê†CPÙ~•RÀª 6-æ«W¯.qqqrïÞ=“Ö«W/F˜~e7näĘ<®�å ¡ ` Mñ xJƒcßlO/ ¸*`�ºuë2Ÿˆá0 åÒ/¾øâßhsõq�Ø^JyÁm…üòn4hF€ªU«–É£œOøÒÒ/¿ür+h_{#6€*á&¬Ö9S?\gÏ»µ''Åš5kC°\ZZš #ÌÆ$YöÕW_mC;zÂ=Ô…¡ à¥�Ü©�³­�ÖÑtUP#À4Bí—_~y6V‡É»víÚÚ×Ñ&´B@Pá´$Õ6~½îF‹mi„„„Æ`œ”‘#GÎEúçÝ»wïD[¡(Œ'6Ç£*á%¤Ü ‹FÃÆµñ._¾¬{3/Ј¬¯S§ RwĈó11þéÀ�»Aãê!°lᘷtÖUE™ôÕõq(’S§N™Þ'œ«#—Ê´´4Á™6jÔ¨0Æ‡Ú þ·€w?ˆ'„ÚQ1 Àè´®2)é±g5$&&JJJŠàj}ê©§Ta*m–F‰üÒÓÓfee-ìÚµk´¯ƒ¸» Ê€HVÞ7ëFÏ æKÈ�@¥oüø£\úäi‘™)u 0ãÒפI³àħÆ!OIâ¨70…�šNŸ>ýŸÙÙÙcá1'Á&1ê1:”Tn?¥ýê•S*UTT$‡FŽ”ß]»&‡öï—ß/^,III&ÒÍáÚÞA|Ò÷ŠmÛ¶m÷Ö[o�=zô�/@¬:UL{Š F Ä£r……Rx÷®‘´è—_Go¡ûsÖç™ H FÈ™‚$ 1yÞy<WD°B¥<€íi ¥kç•¶ ³óZ϶EØân;{V>– \B` 37†.4Qa¶‹ôŒìýáYv䈽s§¯®ÀˆSÚ �‡A20á… Ê#l»À° «!T9Öiž©–uLr*'G–;&;¯_7õúÃQ[Š /ã�tÀ%H^A�¤ ¥'8y)¶÷Ê+í i(¨0JØ.Ûù¼Û·åpv¶”A‰Zo¼!ÿÂì¾ p Řär°Ö7�ôz)ŒpøÆ i€u^/EH[ékJZvÞ�vX(ØÉ\{ÛÎç̆ ’¶m›ù€° ëóžN�$i1—4n©�Þ¿‡^/Fï×Â*�ˆ±¯á?yyò.BxøapÒwÂlC¨L¦a€ŸÐ°™¹å)@ó矗ƒkÖH”>غµ$Â’1ί`'w°8¬û%4 „Aò1,nCØÔˆn€Æ�¸ «]»¶¶«Û:ÙüN˜\ë�i`è¬ì$à,“y]Lf½?úˆwûr…ËÜ¥KR .^ k|u¬ï%0B9×wFxÃ5Ô¥$'?48I¶‚p/@Þ~�|Ãö>i6€-€ZØî;ÏÉ‹½ÇÍÌ(u†Ø‡5>FHŠlxòqÅ…C½`Ÿ‹�_%r^qçÊi eë£íq,•Ï`{L4·½Lm>^y[V¿¼¿i- T\•'Ø-OåÞœÂÓíÝ[X;:~iI„Qpã)’›+õ l7Lz)0Ü=L–×�Ü­[åê¨Q²#+K~�wèYÀ�§%bèl(ØÔýÑ^£74Æáæ/ØéÙÌâÑë° t¨QC:ãÀ“ CµÃÐIïÑCê´o/M01¶CLØ·Oò0"ß*DpògÙ†U údB›‰W^y²ž† ú`2Žåp-憸ã«W%=oÓ!~ Ò¡W/ù/瀞=%î¯ÁƵóv=i � @fn ý± âd6áé§åö§qØÁ·6I¼�ظq‰ÌþÏaOÐ:5Ujuì(±/¼`xr9´7E ¬ ùpNÀ&¬†p›„T[ €sBm,sCÏNܾ]¹ý<–+¼¡&Ëg01¦Â¼êÒÉ�tt$7úÊKS[V¿|h�‰·¼Œø„S‘tx²Z¶”;ï½'9mÛJ9 0Š7¥òèùd‚;@âj;·Ô†ÄÈ�Í߆{åCÀ&μ[ox1">{�®œ¶zµtÇßù‹%eÈiÖ¨‘Qž— ôâzñŠF_åñÂqƒŸ-¬ÖNá´Ê®ŠÑíbÐÓ¼ö¢Ëë8§‘�8~4m»áAB( A?�¢Õ³‡¨`×wÞ‘“Ý»Ký6m¤>¶Çïty§n´Ü`NEmg�³ØÚ3J€LÔåì¼Ö»¥Ä#�zP:ãµ×ÌSŽwÝîz „¾¶U™Üø»ÁÀn¬ÌsæU[hÍ+.çB=‚p�ÎöÚFy9ëÝà„ ¡ àH)\SÂÝò ãdg+ã¤ã×ÞY¯íæ¡&AÞÉ܆€m4úµ B?(-'¯PÐÆ¶@^ùM›6 >\š&;vì�•+WVx„W…/\¸PðDδU aó†€ÏOè!àCÏTóä¶hÑ"Á£JsŠ›;w®àÅ—ÙìÙ³G®ãdêÔ©BÃ|ûí·f>h€ƒPN‚óçÏ—+8:TfΜ)G�|7eåíe­çü4ÇŒPôb®p¦3fÌ�îXæx>wîœ1¬Y³ŒÂM›6•ž8à,[¶Lè%Æ “;8í¥§§K œ ·â|×åk×®5†Z°`�ùhÓWåÆ2óvYqüÒP°xå/bw·{ýøØ�箂OÖf¹ë…3Àùóçe̘1榈7ùögРAÆ;&L˜`< Y³ffcD#¼€Ãñzã>Á¼ø;ñüÊ� àÅÐ g�Mš4Éô.•£¸ÎOœ8Ñ(‚ovr×dÏ>û¬´ÁFˆõüúK·å†ˆFÊÈÈ�~ýú iq(p(1ؼ¼ ‚c·�úVÄxòá7¶V«W¯~»oß¾™l¬L¸Œ9ó6Œ¸ „1RI¾æ>@álïÖ†õ¼Ñ¢âhjX?„32`nY‹'¶3‘½€ÈG•žçäГ *LFnyF®Ê+ÜN™·÷ ´½¦ ×TáQtUÔGÒÀCà‘V(�!¿ü|÷Ýw‚‡‹¿º²râ;Ël¿|ùr¹yó¦à¥—³úW廸L ÔAp‰Ê6q¾àmft>iaìܹ³lÃ×!~ëóÍ7eöìÙæèÛg*Ç#0—Éõë× ÷œ0ù„{zÄ”)SŒ!y\æ‚‘{‹½{÷ò%ˆ,Æ# ½4¡a×­[ç!mtp(°I�9sFð§´téRÁcf£(•øì³ÏÌnŽK—D®ñ[¶l1^€',‚ U:á“ÙñãÇ…K$�F%¸à¬1½�÷œ ñêô¥!8l8?p>aïãù¬ñ²0=¯‚WÚÍ›77 ­X±B0ãš5�îÎÞ€Œ‹~„¯Cûp­ÍžNÇF‡BsIc/Ò@=pN—æ °víÚɼà•Vy¨¼!¢'åâÛÁÉ“'�GÐh”n¸foÑ¢…IiØÊ†ÐC@­æKKÄôHž°ßb`'å"^ŒÄ\t á‚,ƒ|³Æ7·—ñQ_j >ü\‹Âo(PVž�ùÏ÷�0åâ<s¨ü?ÿaËsRGB®ÎéDeXIfMM*‡i  € €HŽw$ùIDATxí� °EÕÇ; IdB€@XLØqCE>wÅR±\�Ï­QåÓEA,ÜEQÄ ¥Ü�\ bXš ;!ÛKr¿ÿ¯yÿG3é¹ëÌ}ï)]Õ·gNŸî9Ýçß§×¹3¦Ñh„ºÜ¹ºò®|U_õUØ0jLUåI”]Tzñ~ŠYÙ#SåÇëшJ0¨|+z¬ªÏ}ê+ÓÂ0e„ÂñkŸOèkp�‚c�eäëõ*b¢|+~œò$_î ÿS@�`�ʵzЂ5ôv£= Q0 /?A~br lt9j�€âäWúU ùêÑ‚ž0ØúUö¨`”¿¾ü¤·¿ýíó—/_>iÅŠW­Z5aíÚµj!TÔ¨s*gT¾ä_;nܸ5—]vÙ¢‡zèad©ü2ùò”m`´� §1À lêQþü5×\ógÅqß–£ÒFªx1íѯ^½: „Å‹/8òÈ#�Z¸pá’ûAyÀ° xzƒQ1&@y½:´‡™·˜¢²—je}¯Ô™Þ²ò t ¦OŸ¾ã‰'žxÎìٳ犗|m ×X�•+YRÇ¿Áaâĉ3Ï9çœ3t;[>3ƒi êÀ�âUè®]™"sôv’K—£åòJù°öÞ}÷݃ ØT–àtå³¹< `m„�áˆA-Pa;riûº£ *döó‹¡Ý€†xà�è"6ÜpC,ÁægŸ}ö©Š6ÜŒ8 Ê*ו<CdÆì£üÁ�ßÐ`�Å!„XÍ  Ðõœ³Î:ëäA¤ë€€…3e™™nô¹ð}åL}ŸËXéã(@ÖV`Ù²e´ü¨üA†¹_úÒ—N’ž°bÈ‘�áˆAm¨Zái~u\K!m9?pÍ8O7ð믿~œ�`Û3Ï<óSÊœ�¡-ÁˆA- bºu®àbØm~í¦+>Ï÷NŸÞûšçÙ€ƒ"è`ЍÃùZ1<^¬€`yÆl– »%¨*X[.­H_·•°�L–Ë¡[¾CZ?` ì@`\€v:õÔS�•èîFú W¢Ã>ê±ÒGå, 1.°�-Á´iÓv=ùä“ÿO¤³,Á° k€+‹°J—æÛíu¯òð\�È‹ÓAƒ€ñVÀ–€î`£�6Úó¤“Nú°Ø=&À0&`¡¨ïÃZ�*D…êÊ¥y䮻ʴ�(—¯iÖ¶n==$¶„î °:OðŒN8á(ej°X4, ¨mÕVÂäJOÃ$zX.SY|�Ä€1�½`kàA!¡»ƒ3fìuÜqÇ¡<7“gv0, 6¸R G‹KeæÚÊ't9P>@H»º[wA'Šö=æ˜cÞ«òA@WЗî o(V^]J/>ÇŠ©ãyiÞéµW ƒ­�»w„€A 8àãÿø{$ß,ù�å'ËÓôµ U† ÔµKóiu�{H«4i|.}ŽF«OyØq]´îl °x€°Ùf›xôÑG¦ôX‚"Б²LàUÖdíV^§Mà ÊÙvésÓëVÐêSGZh¶éÌÀ³ƒ€pΜ9/?ꨣަ<Š–€ÙAm óauTÔhp–Ó °Ì¦/Y²$hÝ?’Q6‹C8Ì< €�Ö�òmþ¹ö8þ­·Þú•ïÿû—ŸrÊ)_SR›Âò¼�²–|”Æq"õæúWXobojÊà¿[9;‚K—.�Š·òѼ)šŽñ�faÖ¬Y,G0l·Ývo8üðÃN;í´ TJ ’¬ðJN~U� o@è*\Uùeé´Qûxòc5oø9�Na)6Ùd“¬í·ßþÍï}ï{WéØù7•‡ðX‚Ê@P+zQV/i© N]ñy„Ãb< d`‡÷2°•o�ÖéÓÖoyŒÀ=[ÊZ$ŠƒCÉÿ¿ï{ßû>÷¹Ï}K×Ñü+4x9ÕVA—Ý»Úà‚·+Z§üíæÛ)ŸîÐéÓ{”Eëõˆ%Òæ%t¹ÂKzî}MˆPÐéôâ KÊï|Ç;Þñð¿øÅ‹$J·ây!µ¯žÑj€+®YèJiÆÓÏ8êÒ…640+Å gê­,Ì6­ÝV€ë´õ§²§é€A@˜�{¯ì¶Ûnc†#”ç2�.ºDùa ºwé£:ºî;ªVz/ù¥�ÇŠ_¦—=®øîwÃ]Ÿþt¬éyŸýlØmß}£R¬(žÉµGøië§ö�Wª ËIhopÏuz¸ßqÇ'jé}'ÜóÕ¯~õ·Ê“ÖÏ` €ž\¯o3?Dœz�.Ï6çœk¯½ö|™3¶8£sá}ßiØkúVϳÂh½ßÿÔ§Â&çŸ Cíþ[¾ñ±�…g½ä%q—Å i0ù¼-Ì5i qÎÏ÷Ð\B{ �ïs< úý÷ßýÞ{ïýfeu·F)WrŽ7M—^w›¦ku] ¶j�­ôk¯¼2,ùãã”mò¼ya—g?;ŽÎï•ò~zíµáì[omUæuâWiO@‹@·Kñ; c2Ó»+/s5+`íßG¾\F‡ëd< µ U¹©0Ztet·ü¿üö·áŽÃ‹oQ0š �_|ä‘a@@8ãæ›‹Ùµu�«µà#Ć1šLá:ãî(îÈ8ÀR-]@qQ¨LþLv±�”Õ�•‹ÏåÕ ­¯pÁŠ·¢cî1½W}èCa%æ}*¯ˆ\§EœËÀiжZJÑE1ûìýº)u•Ò4ظÔýtþ÷o3Nf¯ëV w<ôP˜)+ànÀÀlµ&�*²UYÓ'Û¦M㪺¦kw$Wðvèil¸Ývq Æ‚8ÿÂÈ¢ø~ßÿ~x¹6k6Q=C-xúƒ† ¤È šË£àu팎ØJékZ÷È´ia@'oÔ”Y! ›6q—ÞsO찃䔔+WŽÆ£Êè£U¼ùº Ûk.]æŽðe®,.G7mëƒ÷«ÿ·š–ì°C¸mþüp©NÕBcg‚Zò$õÓ�èMÜ»9d©ë1Lí®'Å1à[©86~dÇ£é�2j”¿P-|:ëÿGέ”ù¿CƒKï¹n ˜Öò·K/òq_–GŽ·šë²“4-y¶j�Éo÷}÷ ᣠd†¯—¿û¹Ï  KôvÍCȱIÎqæËP¢ºƒµŠ[£–¾BkúK5È[©{�á’ù�ý »´|Æ$¢_¯Á^ju”Õ�Ó¡ü°HÖ…� ­¼öCŒ£è¢V PV(3WÉ9ºi„“¤¼½´Q³ìÀã?rpœzª¦m'ÞrKT¼Îhé Ôš0^~­º,Â+%+�¨t®ñ(H¡:›ï—Š> ‹1�dÜõ²"ÏP¼A�®XÖL²uHe¼Ðñ¸\­“Q�„¾À+ÊÜŠîJ¡²9€É=ƒ>®Ÿ*³üf)ï<!:ñ  X¹)2é8za­U¯aE 8°ZêUm?Jtü*¾°1pÜ�k¡Ní¦tXä@.\Qa.WJ7­�í�ÒS:¼iÚ4®ªëuKXUÎI>�šdE~îÝÒèsñqÔ/ „ÿÙe—p�ZüU:WŸs¤4,Ã8¥[†¢ñ8µdè2'�†ÐÕ¯/ Ö×ò,d†3YÅtmà=g¥åÙÌð8ÏFâàO±LŽ+£·o¾nÃZЬpeq9ºi„!{ôn…oÑöí?´Hôˆ•›©‘q( ¥Ó²•W‚Í?!ñ¤Wü Å/Òõ­ÖvÚHš¤å†GLÔØâu·ªÛ!¿÷Ø#–– (Q>×–1ÒëT¬2zÊãëNx�¦�°6Ô!°+—�ü íçm±E8B3‚ãµãWæÆ)Í$M—c²Q6]Ž®B­yŒ,Áöš!<$/Rèdñ�Q‹_®ÁßR­2ŽÑ8c�ž{ËW„ÚV¾XÉw=ï¼0÷Ý£â%2áꨃ˜q…?�JZa†dÕªàeñeôT;kŒ1KÊ_ äh-c Ã´»8OÊßZ÷óåo–j•ÐC¦‡­úî²²º|eñz\¥®6 �“²¬P­èieº‚Èßé¾W¨%^®››Õ¢ËÜxñ-l¥¥ø§Ï�;ô�ÓLÔàr¦|Cf�º�û´Ø´BùrX±^8G~�üø_ÿ:ðB i J烌Eù—†.K‘–¦M㪺®Å…K•–ÆuBÏñBsà1Áư}`Ï=ÆŠ+súÌç£S@1ÌÖ5£}òÊ9èëÉlºýöa˧=-l ñ ,ÃÍ[äYwX¡§��¤+„Šr9ù‰,£;a™\Žï5¬eè„ÞŒ—8¼[]ÁŽ2凪U—:ñ³õ;‰!3€6ÝXñ¾ZËÑ+´ÿp§ÒÜ!»ü„w½+Œ×si­9Ys4YF'.uðµË›¦kçºÖ. .¡‹ós�ÇiVp¥Î\I_pS4²ŸªÖ:U �®càí¸½dæë¤Ð$ ò–�tR|YäA- ÏÐNälåÁà/¶“çHà©­K|®o+£ç**Ç  Öë?ð¬g…C~ù˸”æÁJ!­@ÀÚ@37Kñûh-`†Fÿ,<áù#‡1‰…tŽóT�<‘§Ìåäw§ËÕQY~ÝÒk@3a\¸"O3z±"r¼ÐR: ˜©ûé§<%|L'„†Ö4B�CF™kÎÿMÒ>AÎ1†ØE@y²�ëKé¼ l%“wê :èž�XÂvä'?§qÞ¹´Ž«*슅s:¡·Ã �Â3vWK=X<çÞA�­i�òY äYÎí ýt­L“Ò±$©·’�Žçù™(?½7�Câr®Œ/qEåòè–Ö”°z»¼ð™×ã�Wiµîjõ×תÏ#³¿­BVù6šÃDî1·FsþƒfÎ ÛÈäO’âiõÞú¥õ[ù ççøÚ÷Ž�Lƒ?ŽKiNW¤ïËÒùº¹¯Í/‹ËÑs4 ›£C£ÅÚL‘B?¢ñÀ.»,ìç�ag­èm¡éâí2ï«Å§áéÅï¤-橃JGù6û(0Í{Zá–Åa..¥q�ã-òø¾^§i'¬ u ÜN¡ülàõ�ͤÜwiFиøâ¸äËBνZ/˜À OÊž¥¹¼[½[>SÊ´Õ“ŸóFŽôº¹Úå!ß:Í~*G-hV1Ž+°½^çgܬ—@7:í´xž�BóbØêo~3ì &S¥|ÿm«[}ª|çEhß�L®xç×,xŠñN_eØ|Tå“”— ^̶z§¼ðãoÖr-ÿÉ>S~ž<ÿ2û¦›Âà ¢tþ½Ó  ßžÒ‘Þ­?÷üMÙgËÛ)o?ùWáj±9ÁÊ Ò ½S^· ˜Î7 7¸ ÅÄÄ£lö¬xº\úÌô:FâM#ì•·U^i|/×µ[*¢¬2Ú¥w’G‘×ÏØUòÄ>ñ¢Ø�ò÷Ë? —Jæh%ÏæÞý}:�s~ÎGÉ¢3Ý÷sô þ2ºóJCxëpµZ€º„î´"�c«'=)ÜwÖYá#_© {ív~õ«cË7<ÊwþÃ%?ϵõ²,u…µ Yå•°Œž+|;¼–ÁÁ]žùÌ0wç�ÃƒÚ `ó†xæ÷˜Z?|ž¾�çX¾*x�‡Cç]WX ¾Ì•Å5£[C'¼È?­›–ΙöíÙº…î1€Í¿ùÓ�ëÔ‘®™šÉßê9i|×µ L°v îô9þ þ=¥¹_§…£lrïû\Ë·i˜æizŽF\Žž£•ñš^ôª\ßÐMÁ‹…ì$�”—ëÔn@Ë)>M›Ê�£çh¤ÉÑs´2ÞVÏMã{¹î :-xŽ?G+«¼"oz�ÂqV¼ó€‡––òFÆÁŸ=Gs~iÚ2Z3z»é‹|�Þ×€N*©¬B:ɣțÞs�/*Ú<‹•˜£çhUÈï<ê4ûiùj]褒\ðT¸f×ey7Kã8·~òh•O«xçIX¯óp˜æ_Çum(+@ôNóH+®“´ÃÍ[öü´<½^×€2Á« w’G‘·xïÊËÑs4øsô­ Þ²< Wåj@N¸N*‰ô9~Óþô§?…øÃá[ßâs:�ñ> —ÛîÔ)¡+ô®ßAvÝu×ð—¿ü%üR§‰w×[Fê¿p+tŒì-oyËPzhÿÐøfêiyve÷kPË'cn¼ñÆ¡OÆT‰Ü{ôjÖ _øÂøî>•ýOýï/­�¯lí©Ó=wë=Ööyææ›oÎ8ãŒðÎw¾3ðUOöü—ë½¾—½ìeáä“O7é,ÊeQ‡eá<ÀzÉëš¾ßýG>ò‘pá…†óõE}Ì)¼Uÿ$þg�6fypð•¯ßüæ7a2?Ó£³ò’�Þ;Ð÷ÑåmòwÉëO â J«Å—?Ý*†V®Ö1@™ò;¥»ú¬j¬ìéß°(ô_zu‡b9ÀñÁ~0|_;~_ùÊW‚¾»_ØüÌg>~úÓŸ†¹sç†_ë`ˆ­ËÁ;ksèÌ3ÏŒ]  AÜ'?ùÉpê©§F\©WÎq×ë­ã�õ3(ÿ]zèoû[8XÿYôãÿ8è+Ÿ±kdíºvê Œ§Ýg´ÃW[P&|7tZÂå—_®ºêª¨0}^uú@UxŠÎþ}W'¼â¯ˆŸbýÆ7¾[¹¾»iTÆ–ze kpß}÷…«¯¾:*Tßä‹yaöÙ#8âˆ#ÂKtv…Ì;ϧ{t땲?ê�ªvÒ¿‰wÜqÑÚ0.xñ‹_<46H+žò¦-™¸Nê —>Í¿×ëÚ�¬“‚“ÞüŒê�9æ˜øeMî~™Šåw‡ÎýóÆJÂL:€°c �–L¿? æ9 (�Ç´lòßo¿ý"�îÕ±rÆ—éd1ùpmùú9sô þ2ºóª+¬¹ÂähÍ žòëºáfý(-L0ŽÏ¬bæïÒ=¢Ó¾´j}co¨" ’gýp—ľ}ý� iO`9¼7€ø�3 ý;×ÏÑçbô½¾8 œ%À¹UÃ˘^e—ÊߌF\Ž×iÚ‰Oy;½®� ÑŒŸÖ†9ßJ¯d3xó |S§zÒ¿{`!ð¬¼ímo‹¦þ¹ú 9FùÜo£—7Q(3ƒ£�>:üêW¿ŠéöÒ© ­Ï@Ò€ÀB˜|LžŒüà?ˆSNÆ X¡¯ýë�@³2µŠ˜y[�Ä|�†µ-L™ðíÐi} ®Þýîw)Ÿ|I;Goö TFàÑÓ1ó(ž�!­�Ÿhׇ˜£Y´hQØvÛmÃEÄ:ðÑæýõm@ò% J¦�‚±À“t¤ 0»8ꨣâ”Åcyȇ1�]®\9ü�ÒýŒªÂZ¦�šb MË Âs…ÏÑs4ò-ÒWéeO, °ƒF«nݹ´e´2:Ï!_ހŮ(SYúVtÇ;_¦�üV> |Lr?©â0§ä�ÇvBÏñ2'/:hEz.mÙóËxSqÚWÆ›£çh–¯#¡†Ÿ¾t5Èý_“ePªª€Z�>G£0�Ð;á-VT'iGoQþªïk@ÕÂþ·æWÄ*ê£6ä„.ÒXC?Oÿ±ÇjÝaúȧôév¦UvE~è9Z½È›Þ3¥|¶Þ bÅïýçË»¿øÅ/ü讞ÃÞSQV Û•ÉLeK¯_WXZ Ì\œ…”~�>ÓŠ?çœs;v^Ýk•G/ñøÃâ>SIžË®»Œ½¸Ÿüä'aŸ}ö \pA/ÙdÓÖŠÚg.MZÌš;‹:'žxbœÃÿ³Ÿý,°qÜ�{Öç©Tvè^ûÚ×>nÔÍš>B˜Ž½æ5¯‰‹?<ëßÿþwlÕ¬²jÇJá“õEp¦jë¿Ø6~ª¾ÎÚ>ËÀÈð¼ç=/.4½Z¯Š±ÄN!ë—^zi\0b>dbÅ�efx�ó•¯|e\`'’…)¿eÌ"2°k‰•¹è¢‹âTô�C‰KÑÈŠìð±}Í~‹^ô¢¡•KžåÙ¼µ9Ò­—PXæ^ÓåçʳÙþZ-Û®ºýöÛ©WÅ5ì÷Øc�†Ö㪰!šã´(ÓPå6´¸ÒÐ4«¡Å—†¶xRHCÛ¿‘_»�‘® †ÓÐlCÛ´1N;t‘_ÚÐz€þ~Æv;ì°C¼×‚OŒ Úô‰iàÕBOC ¡Å ï¼µ-ܘ?~C¦=òj¯áqrÍž=»¡�¥†À£O�ohÊŸ# 4¤ô†£¢ [”Uç²> Y¼Æ¼yóðQ”9xŽë yìU'úSÃp°<Ë—så©sê~l·ú#]ß»ÖàY×ßF˳¬³ûùôÏ´2vå°o|ãc¶]9„ñ…/|!ÌÕÖ.-Žý Â~Î{ù¬Ës€ÄN8!Z¶“þóŸÇ3ðÒÝ`1XnVåµpViÙ,A³w@ë†�>þ¥/}i8ûì³ãx‹�…Árq^ÀÛÅlGï{ß‹QØ<¢ÕÓåaÝX9<ýôÓ#?ùžrÊ)ñÁIúïA,†Ï' V n×—. -ûëT8æ7]™sAQ&¦€Pa¬´½þõ¯�ýªZFøÄ'>»N©ÅJÂÌr6“J× ×ê1ûl!’]˺€¾ŸAB6�P4˺œ À±ˆÄ‚‡N ²ñ P$׬0ʺdƒÆsXBF¶¬Jbâ9@�º`i¼¡µ`Á‚ð¦7½)¼êU¯ŠÏìçOß-€GÈô©EGåТ›?(G±ìŠbP0›4T:Ž™ŠŒæÙÔ<^žÅJ*Z´�·‚éÃiYϧ?FÉl ÙÑJyžVb£Eb¦€Ò÷Þ{ïØâc 6‡xæóŸÿü˜T¦;æp°jx€Ää ^ð‚"£°/�Ec/ƒ1OÚXȨxo¹ª û*—Š``„bìØÕc‡ŠcýÞ ¤Õ|ùË_Ž.¶ƒ‰K+Ó ¨¨xmÒºØÔ±#_€„ÅÁ¡|”ª¾;æÃ´ Ó à.¹ä’8ØCA8â貘) ­œ!&žÃ >0ÂÀ�ò$ƒë@—Á&Ò·¿ýíð�ï|'†œf‚Ë€¥£‹à`+ÏáÔR¿]í]@ª, G…Я‚vZ}/•å£]lµ¢,¶`™›ÓB8ûÇñ+L>»qìîѯ’7] –ðP‘6í^ÿ§uÒjéÿÉ—çb1ž©ÿ \˜|dB‰ŒMHÏÁPÒ£,ÓU€ƒc ÁÖ2³ Ò2£¬€�|ßóž÷DÓþµ¯}-‚Œ.ˆ1 g×P°Ké³…€™��1OÚ(âkþé» < ®\XÌ;èç0}>0ZŠ ï¤Ÿ¤Õüñ±*0—˜N{LÅ0Åçi1 …¡”‰É¶;üðÃãÜ�ѽ"Ž”ÑW.L4ûü8*Ÿ¼1×8ø™bQȇS@tX)Ð s5Å*áP¼”’€âP*ÏX×]w]¤Ñ×>,tʈå`: ðr®Øˆr<ÝÒjÙVÁ†¶ƒs›FE¡`Z‡M>!ž8”†ùF!Nã‚’Gœº"ŸãÈ‹gð¬œãyÍñxZ9`C¦b, ƒQº8ËVpòl¾NGw=W>óX&ñŒ£o;ØpèŠážk˜ÒR¾Ü@ÑñEÅ;?ÇÃfy¥i‹ï|,#ÃZÊ�riù©ƒÇ%¥sínŠë4îû冥 è´p®üNÓ™¿“ôðvÂïg8l'm;<ÎÏa7iœ¶Y8쨪`eù”Ñ›U q¹tíÒŠyçÒyŠ÷ݤ)æÑÎý° !‹<íVN+¾nâ[¥AÖvxº-S1]¯÷£íºL ÐíÉÇ×Íø[=¯,m³tݤi–_·qu ùpº…¤ÝTL»iZñµŠ·èíò™Ÿ°›4iúÁëžê6“_e›AŒ—»~Q1'`U´v�ãËÑZÉÕMšbž™<¨gׯ뼘¬£û*-€•¯Ïò�©D¸ŽJ’0g*.‰m}ÙMúnÒ%i–‡â¨ÓÕò)ŠYt|_,²o=â•mß�°Í”Õn~]ä1 ¼©c[%�¬ •¿¼Ý Èñ Ç‚H;Šh‡'Wžªhz>õÌòçJùÊ@ÐëR0'ø‡N¦°Æ)•�åYŒçMIî¡_ý'ô�ÿ‡²ù¬ÊæË—ú¼y¸Wþùûä� XÛ5j4][ƒ*v-,æ‰ï°r$ËB’�6ö¡=UBŽ:ÅÌ£`@°TP·XXêšúíZñJ]U@XÌ’Í?÷ŽÐiëª�6ŠÅS§nX4&¬�¬². '`zÔ7¡TŽ 8ƒ�­ü'Z¬šŽ~l ê—F…Uàšzf©'+Ð@ÎJ'b¯Ë'\›5@½Ú»Åbú©cÇé²{×Ó Ð�´6ï(Þ-ÞŠwœ“<¶WV²C�ÇÑø¡÷ä* ‚ ^$zBù… éð¶¨äx_…ò£²*QiyP”ò<ѺªRvîIÿ{É+Mk�oèIEND®B`‚ic13_ê‰PNG  IHDR\r¨fsRGB®ÎéDeXIfMM*‡i   gêI@IDATxí�”dÇUþßÎìÎÎl^eÉ’¼Vr’m¢cc‘sÎÙ€1>“�‰8d8dl2Ø`Â!˜lƒÉ6¶°$[åèÕjµ³qv'þ¿_m­;µ^ÏLO¿×óêœêªWu+ÝWß­[¡ëm[YY)êj¶ÉÔµî[¡Þê[õí\[á©�umgþ꿹æÕàU]H—èD�PÍ~Öqôo´‚j½¬mUýæd§0Ç5îè8ÐI8ÌnÑ„ѽ J®”è~×þTw~df÷|hó;*ܹK}³õ3n#6ÿ§2 €?¿-ëŽsX|ŽÜsx küÃç@zƒ=†;l¹U�ׂΰU%l_õ4¢‡ ü¯AnàÛÍÃ#½[à0?7îæp`˜U¤ÁnÐãÇå9³B_h¦ç™±¿•­†FÐ츹….†9®ý­,gDhZåGÐãÇ.µÜÒ³dãÝ‘ €Ðw€ FÑìxþóŸÑ-·Üò¬]»v]®Î°]#Ìvu² ´\€në}ú¬Ç)‚ÀÆï®æÈ�Ü*¿ì\P·²SÏ}îsŸöìg?ûc%nÖ3ámÐËïôl!µý ب³œf+'¿ÛB0+ ç´­ÇÈ/À?qøðá»Åã·9rä~ÑŸ:sæÌœÒXèûý‡l’·9G6ð¹ €æøåãÆ)@SSS¥þß ðBîÅþ??ôÐCì \e÷ ?³ÀàE†F˜+àŽLdu7øíF €½ÿí€?KÓ~|J–´ƒO8€0ÀþÖ‚`îZدéÀ.…oÓšÀ¬â¶i=àAi®u×wÝ"h„€9µN·*€füÖÚB@d²—X'šäCäBÀ¶%(mbrrr‡„À•7Þxã‹¥ D¸ÿþûÏ- _­!Ð�C%âG- úÜ�B€Ña�Ôÿ:�öU«+@•¡l4,ïR³WKÓ—]vYñ‚¼àI…¯Üyç�Þwß}e«Ù�²œêB7j�W+  ÷%®1çB/·®²…€]…'M@À7ÝtÓ‹÷íÛw@âmZè¦ t’`�0ƒ×àVMЄ „€:ŒÏú¯¡‰ëORµ‘|­-Zo;n4äGXt‰ç9·N´h¶ñ¿- î“@XÑ©ÏcÐÞu×]Q `[gÝFDn ௚ˆà·ßà_u΀66¤Cä@ÏM~?›ÎB@S€¤#ؘ©™™™«ZšÀA­¼MSŽ w3«¥Qó¢n|ê^5àÊüÉÕ(sa/3å:ÜN�wÙ�}ÒnüŠZ€™`Ð ØÖÏÄCßZ H»Šß&;¹sçÎ} Óij& wEš€f¥dλ‡Ûh=˜Ó)ªJ y[¨äq�ÚÒ„U„»Áo7 @Ί?‚@SŽ ?ÚÞ”Ž|³;ðáZد&ý«À¹šÖ�˜U%@µ z7!=#±£9£ÆÝ\XàZàúÝ ?[ƒ�þ€´& 8aß”Ü�8ͽ÷Þû L®öwkT#ºq& ¯šÈª×<Ö�8õÎ…€ŸÝ¦¸€@ ¾µ.Àд¶Ÿ¦{ ^tàÀ�}˽ÖÈ6 ˆF˜Ñ=ÜZ €ØÙz´±6Qëm ¥¡þ±tü­•ˆ�§ck6)0vòM*²T1]/ZƸÜNô~gv-Èz,s|]’Ô€Î8.i¢ûü1¬xÞóžÇ½+ºU¨›&Yn!�s¤õ\+Ð¥ MpE8Ès!`àãüøm g€`7ÓZ0I Ò�6v=Mç>ŒB=ÿ{ÐÊHªFD޶ü�L‰3oYï üè~˜ÁßI °Þ„> åë5�J¿ƒrtbð8ykwàáGy¤Œ0MúO¹òð3ÙlYÓ€-ûê‡Óð\hxÀ�kðãÚ€C¬µ4üL s| ¯ô×Ý:6|µ4�Õ¿ ÷ª¼ €¸&à¬sÀ£`!pžé‚Í–wü�¼sŽ‹G×Bó7ß~ÇSCƒ"s‚<¥ <*A€—F¹av ·ÙÒB 6€јúpÀïË ¥æËý<·�À� ` nBccZ?+_ìÓRÀÓµ;À?‰öèù-M 'ÉÝ-+j#xct Ø‰ò·8¬çQ”9¬¶ôÊwÐvFp“oLï8‡E×þ¼.ŸÑ ç½ÁÃÌ‘aìÅIh}w`E»¬ ¸¨^Â`K �Z ¿ÅÆ­>"ÈíÇÍm4~@œÐRÂíš>´~&—/HÐZÀ¡ë¯¿~Ek¬ ì”1[NliàŽY¦g44r ÿ X§0èýÜÉuFü¤É5ÂmÉÃþà&M@Që/ÄÊcE•=¥øe}†ì1 ‚^Ày)³Å miЩ#6aÃã€n'€œë„Yäiˆ³‰~…ñâƒ&ÏhíÌèù�=4�\0lM`¬@·ŽæNÓ¸Õà€�Om dÀ�íeL›§×3šÀŒN ^ì<Ñ$XxLŸ'ϳ}J’<³%„ÀX €§Þeã«: gÚšB/Aï¶9Ì®ÂÑ.Ö®À²¾E¸¬%4�B Y€2c!:u¦óÍ«æï¨ëk U“;çk�ú €Xÿú¶¡x¾*½]×�_B~¢YyÖ³žuF‹Œ+?üðc�?þx§‘ŸlcøXkµ£Mìl�¸0øsWôSž£�aòïTÜ%ÒV¤ °;0£2V$¢&×ð·?U,ÿØ �Ú^(£ ‚  u€k5k­ºµ–Ÿ§3pc¸ßut- Ïó<üÜr92Œ¥ÿðW`4�´& ?½O‚€¢ã¨oÿØ �Z €ØAu9h[“ÓEÀG¿Áß)OòˆùÄç®´;e/CÐ9�%-òŒ&°ò¥â±òc-Þ<®1Ý9P–?èR†½Ò°¦‰.~ÀŸçé4¸QˆáöS�–ßšÀe\VØÊéÓ§çØÐÇG?ùä“9øÍŒ±�ð+nÜ å€AL¦öãÚOx(Ï�ŒÁ/�¦´ÖH›ç—ÇuŸVÚ+H¯sËZ$D($¢&@P4 eorlÖ¶¤ˆ�0¾áÆ¿9èÅ »®Ï€A`!à8\@Ž&`ðÇ2\ú=º\a|šhE×’Ï)MÒŽ=jM Jû¡!°%€^`c*À�Ò~Õ1­5è WMLK¼mNO¸„É´n¾JþmìxM@€Ý>%ÍžÇFŒ¥pàÍ�ƒé×:󸛜<[ˆ 7º…ï8¹ü�˜»1iMàŒŒî$XÖ±áÇ»h.!�jyÑèX ¿¡Æ­´öÈÝ©v;»éb¸Áï8\ÇS†§.Ïn¤·_q3²h…vtÕØöw½ë]+½ÖœÜë<×NÔZø…ûMŒÚU}†U.€ØlC[òöø™úØO½: hâ®@·úC,Z€5�ùYàZ1®{ü‰'ž€�˜á°Ú �Z €n/· ¯' ~»ÝZÑMèn†8[hºÐîRÔµ²“Ü'055µCe­HôÒ¼EXK!P €¤w§ˆ/Ÿ¹fenF»ú•1h» *ÒÙï2ÊäÅ ?7kÎv’¿[ú˜?þhÉÇÏø£%œºt¹p”5>@б&p¶µ&ðÄìì¬%Œ]W¯¶B À\nÜúp >úóÄ8nâ+ÁÍ={öl¡8‘CÕz�3…30N|Ì?qÑBgz\hº}w@khO—�T�õÍÂô¿d k¹ >µ�Л‹�‡7Ù˜µqÀ|4@ó\ˆïeI‡pêÔ©¤8?\ƒçO vœóæÀG �­Ã¡s~Ϋ•7’gJþå‹/¾ø¬Ü ¤yþE¨éÀ‘cÇŽE€ßÏQÆ.A¥ 7Ô˜ás ‚Ù@µlõÝn �«*è0§ïä:OÜN!€@Ðhß¶|ø¨þDÈ ô~²± °KXeÌX €Êp·©È*|¸€,?Ä„ˆv;�Ÿ0 yEËÈýäÃxv.õÁÅ `аLäòâ›”!iò/Kðß�(Hб0 ΦR‚ Ö€—9 3ªr‡ÝÖ¼]Y^n·ðœ®Ó3elpt á/¾@¿r]ÿèº<Üh)+Æñèñ ÔSþ� Û)wEvNôËšBœ“2°¨5�mÇ�7à£KV �Jí ÔZœçkó»™èÂnu1Ø Â2ªzŽxƒ¿›ˆy»¤‹&>ãÇØŽËÃ]ב0[êË®�þ5¸WñÏT>;ª÷’üËìôhãˆO8®Œ¨¥ð‹#‡b†�ÿP*½�™\Î2>ã�ÏÐôãñ¶€ p1¢b†0 òÏ…@"jýô+?ÖÇ vùdaçgÜÜZ �Vëh—¨îK ?�«çEÕyIçŽéÀ�€Á5K,ÇŦmº¿–`Ó¹´… 4ØpÛV*»{¯ÁdñŒ±k?Ï•à'OÂ?–çü„E“?Dz\^îBÓÏRÓØo—:ãÇ"¸Ø ÐíÂûÕ†çÊ?¥:3ú/Ýyç�K­ƒ*…ÏíÆP–ÚÒ~Vܦ›--x�yŠy_4Î�+Î�>]ÌŸXÌ(Ì=WàÅÒÛß^œÔ´€Ót§çç‹Ë®½¶˜ £;€ÁD0†@þzʵ�U6ðs7Ò¸ ‡ù¹“ë°~´Ä›×ÖáÔ_³SK—ÈÞ,�`^Û‚�½å-oá+¤¬ L¶¬¯óˆ¤ìF»0VfŽÒŒºü²mÏëiP9=€D-Ÿ°gï¼³8)ðï¹çžb—žùŸ,�†aì ôÑBúnqNS€Bëû/¾¸˜Ù³'�êä——åg&ÅQ�Ÿ×ÉÏvS‚ÖO sþŽ÷³]ÂñÇçœÖ4ÏŸ�ÖùÈ��3!¡¶WíºZ¼;¢éÀ>¥c‹va;i#ŸŒ•“³N¦~-ôÍIý_Ò¼BàŸÒ_t¿{5½™Þ�&´RÿÏh�@ËßÅ‚Òq¬c€ì)0„›†xƒØ.qÑÏs7Ó�΀uz?ÛÍÃýÜÍu:ÜèW;¶KØ«ÅÀ}rùö€€5O©lG*j'Ìp^Nôó?BÀ#?Y%ð+ýÈþ&\+Ç09Ãχ6¿ý8Ð X±ƒ·ýÊL7`óÚë?'» >]‰Sœ%¼e¹6—}.m~K: Iðù=/ � áÝùý宲ª¤�'^§èUA·MôVýq üèöÊnSâj)6…3[¤�6à[`m? Ô‹:ÜsR‹zgµ¸7£ÿšß³\G§A@œÁÕ_fWD7!»­µØÎ§ƒP’Ú +ÚÕψf›£}Týãè�¨„i@%^ÃæV"vbüú“{Zø[�*?§‘~Vjüa©óïÓþþ“Ú×/öï/ÎjŽF€Ÿž¼¬‘|I`Ÿ×ŠÿÒÓžVL]}u1}ÙeÅdKÄ<1¬ŽþAÚ!¾Â¦Üzô§ùöãö—*¤‚iÀ˜Zå, þè²ê¯ÿ´'t÷á'Š»µšÿ?ñguâï æò—ä Rï9œÔ�YÏÅÁƒÅÄ�7S7ÜPì•ÝsùåÅi V…áƒýv«Ì›nu3ðá™ý¦5ýŒ«0æôÛ ‚=’ŽÜ?Ö ÌËŠo`­ô�:ÁfäËèåÏëÇ|v‰•~�øg4âŸ`¤×èþ8£¾À=ZÍ¿�m==ë°{QìÚUœ;p ˜@S`-@óý9iõ÷Iì:t(�þÓñÿð3ç©ëép»„G?Ïy½ ‹Æôeéœv­ô./擇ñܲüö;‹‘»c-FÎÝ TÀ�=º€^#þ¬FüG´Åw¿ÿ¿²�êù$š€@~\®¾�Qìí¤Fõ9�ð[Öˆ¿SôKÇtþòškŠ}—\RL)|RëlóaYý·?â€çà©»Ö]ñ9�þ¸Ê,Ú˜7á•0c%íPâ߬| ê¼'Åpü¶ RõÏh´?¡9>#þaÍëÔHŸÀ·üG7/zÖ”(©ûg¤êϲ Ñ]ßÒ.öéyAú9ùô§;4÷×—4 }W»Ø¦pÚmàÛ%Ì–zÚo7¯{¯gÒ”1eéœ× ôyºÈoÇ),‚?÷›läîX €‘s³ˆ�ÑÀÇežR O#¾Fñ»ü‡µwÿ¤@?«Ñþ”l?m½þÖVœÓhþ¨À?+•_û`Ån�ì—*zB`NAÏ+ΔúrF±/€@!pmÉ6úyÞ"¦œÔ3j'èD6Ñï°^î°è7;ßr·×aÑ]ˆõa»â´@~J–•ý{u²ï�ÿn�ú�K8#ðr¬7é°Å¤�&pJ#;Û}º?»8ÇH/a0%ÀÙ€I�ü´ÞÇiEëJœB�[røÒ‰7�Âbùöo4Ý ùš¾ŸëzÞ{°_Ò‘Ç×FxD9Ç*Vw:ª…ßðüÇôGd�}PjþC|x� ÁÀÈͪ~nhú0^ZøãyE~üçᄎdR‚ÁÁÿ]‹²ÉØ=ÿÔüVœµ‘�–¸1lœýäng 3è™ã³�ÇÊþI�ü ©øi´ðkuŸE¾'Xù×èÞÑèk“¢Hå_�ê?�ÕtÀèRtgU6GˆSÔRÔ‡½_Ó|rçÙyNK¥?ÐxVö”ÊÿˆæýG% Î0â# úÐË~ìS. iìó§½~ ÑœP¾'%tX0äÖ\×ÑîÆsassô€3.í‰Ük@äÆ&û»u¨nÎôv½—Ïüþ¨÷ñü‡[àQ…1âÏõ½Û-0OˆÛ K†­=©ýi»O.€þøKþlž–݃ 4œ5Àu]Ïg²ú×qnïêØæi38ЀÍàr‡2Üù;Du 2}tuÿTq\jþýZÕ¿U§öîð�j$f0Î ŒóbYÃhŸÀ¯4¨þLXýŠø'4ºó‡ÀÍ¢âOª.'dªÌ~êë:“Æþô‘ƒ£ó�µÈ;™;_7v¯•¾_¾yy¦·Û«\Óà¦_ó<ÿIÍéÕÂÞÝ:¶{«îé{HþS,çõ×bÚs€ÊC 0§g–‘ŸsþÛ¤ äõ]@ˆ ¯d¤zv´Áií÷3õ�~žÝvü�ŒéËÒ9�µÒ»¼²ù˜®ÊîX €*2Þ�Ïn¯:Bc:\Fü“ýãúƒõÓi,îÍj€*žoéõÊ?�K€ÓèO¤ÊLV+ûœÄæ£?dh'Töq„@� hmS(ÇÕÕ­c{ÆJ ú†MïŽlól¿]ê`¿éMÇâçõÙËgžÏˆÀKÕHà-ò= …¿ã¢Y�iÍò‹e�ô‹šß§_ N7þ ÈÛ5ê3úooiyY”Îß‚O«¾iÚ¡úìP:l.:ñ¼SX^ÏMç2Êækz»yºNïÑ´UuÇJT‘ÉîѵŸúF¬?áç¤SZÈãzà¹Oî}G8À#¡ »§‹3êF˜ô÷^Íï$Péõýëb»ÊÀú~W1¡Ñ€pÈ « ódü[ð´êC½v-€3züQ ¸0ñSBÐ|4MþìðÜ-KçtƒÒ;Ý8ºµ¼´º¼8€ŒüÇŽ)Nêvݳ² RáQ°šÎç´vé�ƒºDƒ�iж%űÀwL£üÃRñù[î{5ê?¢tœêK#¾µÑU__¹LW€%¿„Ba¿ìNù¹ë¿#øCe˜ÿ‘ÐÚ¥4tTxo-ÀÉêòN]ßqsk#"ã«Öi{4Œüç„ï{_ñ$÷êëƒóÁ—‚˜Ðÿéçô%�EýŸ~úRýņ?Ö(ô>�ôüi•ÿ. ƒ'%†a\kÀ²@�]رˆ]o{þà�â­¥ôªS‡Yµ}‡‚TgÖ/ñrP Gòá=ò\µ÷Ù«�ãWKPå—@‡æƒGµ/ìŽ;ŠÙ·¼¥X¸ûîb»Fð©–êÎb[ºTCjÌj”_yÆ3Š „ÃjØ=«ús{ù§¢a›´Ø‡X?Z þáÿ;ôŒ-R&&¬œRzê�6ÀvÈz*@>¶u¿ÛN}ÇÍ4`ß($ �àGõA�'o½µX”˜”À×ò¸SÃxžÀ"¡À¥›üãN_”,ߣ9ÿãA“XV¹çŸÖü;0 ÇÐ¥Hý…ÎBWÚi%_ €ìL¸.)Uç´†s¢›и_PßËjƒßü±k`uέz¡®oäcõj9X�0¿:RÓ1âB×Y©ûGÞñŽâ„ì~ÒÙ£TX°Þ¸Œ�\¶yDô� t�3 ПC8Ì¿£–ÏE¹qÀ·­òço¼Ì÷Wr—EùSªBk‡Ö+ü¿~µHÂDDÜ+€öŸ’vK�xôÇõnyE uÚ]èW^¿~Œµ°Ä6›b‡sXt¥�ií§Œ%�ì�s²Û€˜øVÀç®h´€�¢›Ñ >æÚ|]·Ðÿì“ÊŒ:.`¦QpÚ¯4€ ÁÃÂ�w'cÀ§‘^)m+_ª?qIà( OÛ¤:oW|ipR/¥çGIÞ£|YÜ£ç( á6ç·ëîð²ï«,�ó_/}Ùú¹¼*»c-6‹ñy‡âÒŒí€YvB‹z@�µÀ¿Ksý+õéí�¢A@Ì@jõœô¨ÓA�¬j¡Xùhñé¼¾h{@é‘~‘t€¿ø$ ¦•ºó@ÀL@iv*ÿµèœH|”)„ʸL‚-?ë ˜°ðÐÀŠñuò×±þc%}ë¥Ï�ïÎÊ©9îÈŸ×5Ù…õtF|À„˜08pÃ×t8Z›þy'аçμ{JÐ&!€+€¤m9ѲM—¾Ä#Ðâ×(Î $Z!©íòˆ!-{û�$8»žÓˆ¯¼Û~ˆ•žóÿ€–K>p±heùÅngØ`*À¤ìо¨ œ/®<ðË–_–Žò1ƒÒŸOuaºnýÁôUtÇJŒ’Át"w€íÚ×ßýŒg‹:°¤ÏgŸÑ:àLWkÉeà”Vý±§uàˆ¾¼sŸ�èPÐY@-,#©ïàa_Tü¢Ö øjϼ@•€À–\Ñðo>´\ ¿I Uˆ~E6Þ"„Vé„öbQ€å…˜iÑïP×}³�WÆ U œ8xZùpO�wÈ#®˜oka™úl& í(=eÚÌŠu)«v v”èïÒ¾UÁ›AO;¤Æï×ß²€F€Å¾%i-P-êvÝ9]§=«ýÿÇu¥öcš*<ª4'2Ÿ`´ÏÊ;©ð¢[’`4øBTZ¹ÇŸ@Ë%M€ð+]üQ�?†2H£ôü�˜IþƒÀ:‚ºc—á#S DHÚÊT»g¤ L+¿¨ 0±y~¤yxªc‡Ÿ²tN:(½Ó�£[+P—7%0_tÅÅ6�‡cÀ'¤œÖ� %�Ä,kÔ_¸êªâ¨hîUÜcó)fA@óè �™‹[Àe*ÀŸuмjï}{FvÒø$4’#°«æùßàW~m£´mC¸¿ ´Ç5z“ï•É~~YCnüK�s Ü?¸_õÉ× t»ä]—w\–U§+ÿFGØ’|þYõN‚º¼[ ç›y\õ¬5�9 …yM Ò+ÕR÷êOkôg /j”ä(-þ~�/�è€B–pTyÎð/A�ÖIuÐ2†pa-@_0úç %0RÞŠ£,ŽOI,"HTn)Þ·òõZë—Âå-ï5Ï3N k~†Æ�Z€¡µ~ƒ2 tÊ?‡fXôÚ%!p™€¾OŸÕš¿þúô_€´¨�5‡ç.ý�awiàÝ:pJB€Ñ6�˸- '¡ ?£ý’FS€ ãH€ž“ P~É¥]ö÷r�zÀo·åg·�…@0¹Œd%aPJ( 鎫޳J‡ ô‚"®×È+æg¿]ª4jãºø�º>Y~#ÖÁÍnƒ•}@»S GÌhŽ¿(uAà]Ôˆj p`J;+Z8*P0g>… ð1¸-K~€>uBå1)à°Z�°ôI ˆ6ÝÎKZ…­Rùyv@€ví2-º4íP>©îj ën·Ý”®ÃOš(/49ðY´&ÐI è�U%‚ÜÞq�Ø€®åŽá¬è ^0óÊ94XÂ-€�-:€ÏûÝO àmc *Ï$ÈG Ú.a2 �ži:ä£|’0PbþY˜„Wxt;Sy#Ž…A�Å(Ý*CÞŠ;ÇEiR¨éû¦|{€ûùkó>¥Ù¡òØæ´Àí$àaÎ×>Å5ÑkàÀX €¼õ“Ük¥�ù&€¨£»cóN³µ ðO ˜ù?#&{çéúnùÙökù MBùr� > @ï˜ô¿n@UþÉØ%?,Ïk@½X ˜�ÆÂÖÞ®|}J�)Ox­úš�”€(ã`Ðq v9ö* @„#¼ƒ¤Éù˜?·ªÓvÚådõm´<¦sxÌ×aÑíGïø~ùÄ<«êk°™Lw§p™qT#ΖpÏ�¿Âž.Ë._íá °ô�>Ûe!Ò:�òJÓåÃøÌü�Nš óÂ/Zþñ—Àn¿ês�mú›¯âø»ò¥Ù)àΨ¾3rw¶„#{· CØMàÂP¾8|IKÐn[ó*TÎS··ªnÝê ÇJ ú6š¾S~ÃźÓÓÙ-ÎYîÓ»Nÿ œHæä"<š÷êô€¤+l™´K 7�èÐÒz€›ÀÞ¢Yt€¯254¯ÐÊR‡sr9€æÁßš™`¹úkZig4ÂOé9ݬ¶¤ÅBžÕf†S{NiÑs·Â9lÄíC|qؼ¡îI“À ñÑäÏ1¿øõÒ;}^N.ÀLWew¬@U�w �p„cýlaÀ3öb� x¦N2â>.€0b¢B—±íÞI`­ }&@ù«ðódøm z €è“€Pú¶Q¦Ìë9ÑhÕ~RÀŸVûåÎ(œ{¹=w»ÎpõG—O(ßô%bívLI°Þ±Kí=(—¶Gž™GŠj‡®HC\ u¬C=Í»Z €A=,ú<_�y8ÏXâ±t| Â÷ê¬ÀÓºÓãÃZ d-à ‹9ô &i”¡µáz�ú× ø—ËîàwR¦ ëçô|V÷&žÐ�©}|Ó:A™ò@€´LäA›Ù\VþÞ\·:»µuc´;õ¦óä�:¶'vp¦œô»Bà¹Q‚à¬\ÀÏÚc,#l“À¡ÊfõžÝ„@[� N0Zçý§QÇrY�à™“Œ®ë3¢ç4#ÿñOuQŸs+åÉŠÖ; S ¿T#þÒjz°—5ƒVø¢Ÿ;;§{Ï¡õhÀB‡rÍ3ó¯•l$Žßç8 ‚FlRWrç¡8ûóNm AC |ºæÄ§¦¾ÿ·–�"Ð÷Ó˜ÚYS¸òÞ% ]"õ{�\€Ç!¦#ø]Wê„?mYB§øiËÚÆCCáKBüóñœ¾(me ÍEaÁ¤üŒú»äß§¼¸#A†0:+ÚíºB�iÀ’´Ž'Á£´”i›óKI³NŒµˆ�>õ“Ük¥_k¾”—wj Î0_,µøjâ:� \µý ÀÂ\V ¸ ~¬ �û ûæ½5qæƒ]h1<;̧øøžmèl ¦Ïˆ)/@² Û$¼¸‹€õ‡ôG)åÅ6 & %ˆDzì’òà» >$…ÖažœO1ø¯ëì”k}_Nïüúåcú*»c-ªÌx:Q~×—O aÓr/Õèü|m•ÛÓšC:`”MwP¦, Ǧ½xÅñ%Ÿô'•»C[8”¾(w§êËgÐÐÎJpqÊ¢æõh ²g%`Xö7Ò}…¥å? 韇>à‡¶®›èçÆ];ÆJ Ú1†E_6ß^t¶ñXEß§©ÀµZ à„àcwîó‡!¾Å7ˆñ¶[ƒÖÒÝÿ”ˆe1«è•–)Cš\YŽ ïV†z»gõÌö"À§ö<ŸÓ‚#ç&4(äÇô¸6”·ªLGdnš˜dPz§u:×ÑÏŽ¯ƒ;V  ïVǼóX  s18 Q•©ÀsP“~> r•»¬ Ê‹ûþÉ“-EÿXTÀy[6¯~tÊ�|™Z\ºgO`Ó\ó:Èa´•œÀ¼¦9+Zü›|ö³‹ ºõªüä?*“¿ÇQÕ£l¹c!Ê2½,�™W–¾,]·|»� ŒÍ,Ôq>€‚G$¦ìͤ^†‘Ÿ�“²SJ#„¥¯ýBþÙ—ûzeP2Žü¸JœFùýÒ^®�—êÌ}¬,ÊÏÁ&Î0ኳB×£M ü»*vH`°ÐHÛák´Ýª±^þwË·l¸Ë�ï1¾»²ùŒ‚n,À(7¬2Ý™Èß�ŸÎÄ¢Ûn©Ç×HUæ0ÎÃÒ¸°3ýkPϽLºbLÀOWŽ# Dχ?P×g´Š? à¶õÀ™êz‘òã¿ÿ{e¹L”rY¼é¦bEZפ³c�vt=ÚN]�:£ëÓvÉÝ©úÐÞh#OÖ[Ç&ýjÔNÄÎý«›U¯'·Ã#ˆkO¸GâÒ¡iWiô¿Q@bM€O‹qÓÎS3e§~ÊE`ôßÞhlÝqNŸ LÙö[Ëò"ƒQŸÿ p~à€ÀΈ‰¿_#;' ù®à6•Á"  _”àZÐt ÑíT87&í’Ý):þVÌâ'�¶ÃÛ§ZÔø6е[­Ð^ü€Á[o5JÞ¬�Žð'ŸÇ$ ø :@/!�ÎH8×ôaž[“ÇÅ•v?À?¨z\.Ð^Ü>' Ñ*8K�>,ªød¤y,kŽß>(¤´“<6¿~€…@.\¹È‡ ËuY¹€Vy›™om@dŠ_H '?í£³¹�¸QàˆîÓ4rråöõÒ8)È_mÏhd_5P˜´ ?B ¹ä›þ»¯2Ê œÖ”G:?  _"à^!{PÀ�‘ËMÇ·ˆ]žÛg!aÄ›NƒÛ),Æo´ßå�“ ¨¥Øè[ÅüÜÙ¨›ý¸‹?×p ïJ-˜½PçØÇ§>DúskÑwäƒE`[댾üù¦Ì€Ÿ³K–ÿñ_¤r/U=(}õ|þÌ“Nf€z»JºÊ޵€›„*ӮʠyX3¶„pÇ++¹¥/Ëý~ù:Þù¹¾ÀÁ ¾ƒš3ß •zQ#ÿÍ«9)˜îàÁúd[aäk à£ô2”ʪ~úŸ€è¹Îüb=_,°_,€F‚ªÏÈçð�4€NåÐ>[ƒÞ£øÍ“Nùu sóµ�ûÑw wº:¹[BÔé…ĺº£Å0 ¦¼tTXS€›t.€?èÜ%-€«Äl ~@œFÿVDZ3È…ÓänÚÒðYÝ¿L ? Ëêþn €¤ò£E(,·ùHÞ©=õ5èÝV‡ÛÍë×<¯�c)è(ƒ˜õÒwQ6*_çƒËb*°M[ƒ¶¹ž“‚,JpƒoúÏ>—åÄ·ñ° È™lú³�€ÛIõOe(]R÷ô}²˲º™Òì“eG"-òu¾G@l@»ñÝ8,ºø£…Þñ¹ŸçÈžmb‡õr×Jß­ü^eU%n,@U˜»õ SÒÁbçÄ�e„%n�„À!Ý%Èm=�h*pR ‚ék<ªn>×q³ xZa\¶]; œÙï¨þ+¶ §Ew•æ÷—Ë^$Àóg¡]rÓƒ3@]¬tù]gó$¶'ëDÛ‰ÞéªâÖ¡Ž9¯ÆJ ú†E¿Ñù:?�4<3ªòŒ;#€NH ¸F€ÏÌk¿�ÿÕï’=(¡p©¦\é=+ú³¢_‘Ðà@¬p˜‡€˜Ó³ªÿ4Ñ\¦©Æ^uߣ¾çúé-p©®ë‰ë6¸æÏyx§øNaNݲtN3(½ÓÙuz¿‡×Á+P†¯·Žîläc!ØX}¿DBà: ˆâq]½µ u�+ü+õ�¼Ë´]È—„òIÑÍIH_#ü—(íE²û% 8̳_€¹¾ïÿðüQø¸ÔÓ®ël7y�7§ÉŸ/HP±€ºÕ·Ö`Pf‹~Øùzd¡ûé÷<2 á{4R_­£µ'4¸æðábJ#ÿUúûðeÚ"<(aÀÅ�Œú;¤ÌŠnŽ´Êƒ¦“|zæ@sýƒ}¾\�úýÀO] z»æ�ÝTÙ?�è:…Å,úÅGZüƒÒçéÇé¹v`«¿¼¼ý ð£Ô]— ´ÏÕ¼Ÿk¸ftÕÖôc�;øç ¶ ¹q—c¸gô>7Nú½J{¹l:«<ö(ýŒÜ¸Ð×mÔ·ÊO>ôÔÓ¶`òvt¢©Rõ�·Ju[O]j'hlÝ:Ïz^Pl¯;`Þ~ ö>X¼›’º™®ØšzøábRnº…—óÿœØ&!qNšÁ”þ™ÇB gø¯èYèc‘uŸ»ù(9ð£ÊÁO�l]çøLXnòväñÍóð9PЯ3 ŸUÕ*!‚?B€{NÍΧ5êOþÏÿ{˜‘êÏ_€Ó7$¸A`‡Â–ï½·Xȹ‡Ÿ¿íz…ŸQ?�æCÈx[oà?õÍ¥ü}¹¾b¦«ƒKÝëXï2¼­�(Ó˜n4ƒv¾A黕›‡¯7ßné ÇòQŽSÙÏ<òH1¡Ñ÷‘#éòÍôÉ.U†Ã?s²Ût_߂֖µÀm={4]àŸ{Ó-ÐO±Nп]ÀoÛü´ÛuµK&>ºú×4 ºAóÍéóçÕµ®çÓ–õ|5ýk�wH.á<)•ÿŒìvù¹\‹+¹8»�àK†\*zNÓ„yi ËrE;¡]Fw­Gü^àW–mã:ým‚ÆS)Œµ´®•¾ßHµÑù:?—Ë3–»þÒþKíç/–ï éN>�øÜÕ¿,àûs`ŒêVõ-üœƒßåÙU¶« áÑøÙõ�qÑoºÖËoúaåÛ­l—ëø~å›®ŠîX €*2|èu|€†"²uèÈI�ê}=þüžó“Gç»UÝ:òc,À /bXôÃÊ·ÀØãŸÑ¼þœ, |ü%ˆE?¿d4ÂøôYÑ�ÜÁ7Í­@¢7ØívüIHdÛ|Ê&™^mìçô¸e霦,}YºAó5½]—SGMÀ}ÃmiÜšq€ÎçŽÇõ^¯¹¦XÖ)ÀãšÓsîŸ9¿ÿp™œøÏê îIÝÃ7£ûvK`LikÐÀ�.ù[àwgW6«ü<7æzáéO/æn¸!Ý8§£Àóšëok]Æåœóº|sòÏ(vÊÎèODh,üøðøÉÛ–2óöæÏ®Wî–¥sº²ôeéÍ×ôã쎅ç4HÛPãwsù¦€=÷Q,_ye1÷ÀÅ‚v–õuÞôO�ü;®½¶ØóÌg{äNëoÄÝæúüƒÔci2¹à‡vÖZ *ùÇá…Å6ÄN‰Ÿ|§´€ÝÒ<ç9E!a0¡~NS‚E�@\Á½ïСb·4�iÑÇ…?käg›—égâSoÔN4�nu‡‹ü0`§êƒ:ªý¹|Ÿ�íA¾»7Á‚ŸÖ¦t˜)C:ò+Í! �8pžvW—¾5žhû8Žþ¼½Ú *Í ÙÊÆíÏ;¥AÊ|žûvh¾Ï®À¼æÿóúÛä ÓáZýÏ@¤ÁMþãÆÙïvç|¯s›k%üêÌðaÕÞÐ1½1ø5†¯þà÷GAS á­­=Ô~ ü�üŽ~§oÜús Àr­ìvç-+¹¥/[¯�ΗühSt© ÏÙ~øÇ½€hXèRœh=÷7¯‰³�ôöã�)Ë×D\â§*ùv«G·ðM«I-@å¸V¡ Ñ-\-@lPϳÁOx¤7àqÐGKž<7f<90Ö`ÐŽ»Vzƒ­[V¾yy.× ·ßB Ö•8[ ž1ÝÜ—Kü8¯Xv§d¦ë×)ÌôÃÊ·S™1¬lù1MÕüc-ªÆìͨ�;¥ËØKœÁb:ÜÜ:m¤qXãvç€ùÕ�¢z1c)}âv¾9˜»u/êaZ»Ðî:æ®ór¸é^Æ�i{Ñ—¥seéËÒ š¯éíºœÈ[ÇUÝKPu¦oFýÜ)]ÏtÐÞÉï°œÖù4noÀ?ó°7e5bÇJ ÊøaÑ�*_—ë‘ÈÏîj<÷Š3nLý‘¦›¿,}Y:—S–¾,Ý ùš~œÜó›ÆãÔ¢¦-«8" ògˆcüªÄÍC›ãÊ£±Ðʾœ²t~ëeéËÒmt¾ÝÊÍÃ˪óy:×·Ÿ[6]Y:—W–¾,Ý ùš~œÝFç·Ûj±ÝÍÝð&*`6¼C̰ÖÀ8¿˜a½ó†gkç¬yçu”µçT�”µÓüªÃ¦& êË�Zjƒ Ó—•܃җ}ýÃÊ·_ùÃ*wÜóíÖ¾náýÞCãk¥˜ñUddS§†uä@-5€²ŒT`¬•¾Ÿf1¬|ûñaXån•|Ëò·ßûï—Ï(ãk¥Œ’QMÙ úq`PÁØ/¿ÍˆK `Ð1,ú˜/£Äç~îçÿû¿ÿ›Þ+Òù™Ÿù™â#?ò#Ûï9Ò/,,ÿñÿÑŽû�ù�ts/¦ë6ò8¾�¸�§,}Y:Šû¨�ú¨âA}¤tI_+zÑ‹^T¼ñ�ol×;¯Î ù’¶,}Y:×gPú<]·÷aº*ºc)ªÈè?üÃ?,Þýîwss|žSŸìÒµ]ÿöoÿ¶JÄzßzë­ÅW~åW¦ÿò¢ù—).¿üòHRYÿ]EþÐC¥«È¸ièiº„ÔÿJ¬l¥7¨bk"TüÀÙŒ•”ùâÏó=©pþÀü@?—nhFøûî»/½°œž@Fh ½îºëŠ]æÙ‰.¾ñ~ñ‘Yú²tÎÿôirê½[�Ò†ø€pÔ*wÐ|ËÒ—¥se¥wºn®ïVè_¥ð±Ubl¬Ëÿðgù§ À°a”ìfþþïÿ>Ñ"0n¾ùæbïÞ½ÝH+þL}sàðÛm}ÉK^R¹:Z!„DUü~íl@?­3ž9ÿÿñ'u˜;øŸûÜ禩#㺫wJßô³aZð·û·ÅwÜ‘‚ˆ{øá‡“á‘êÆo,¾ø‹¿ØIŠôñ�ßû½ß+þîïþ®8zôhÙá+^ñŠâ£?ú£Ûtö „~ìÇ~,}&œÑê«¿ú« Îïþîï�ê;u›0 }Ík^S\¢oÐñßúÖ·¦y<£;ŸG­ÿÆoüÆâã>îãœmÛeºr÷Ýw§ç�ÐJ®¾úêvœ=´¾üçþgâS¢çè[_ú¥_Z¼øÅ/.­�8¿Æ]°6¾•NHýªü—}Ù—ßù�ß™€üøñ‚ùr¯{ÝëŠú§jçÏšÁ;ßùÎd8¿à ¾ óÇüÇ‹ßþíß.ÎéÚï¨] HHíoüÆo¬Bé oxC[+a}‚:ZK¡œ7½éMI(¼öµ¯-¾ë»¾«8|øpª«ë€ ùº¯ûºâë¿þë‹W½êUNî�þè��<òHû¦am{ì±â[¿õ[SÝ(/^RŠ CÐÐ׊‚ûu¥yc†Ë�±ØddôèØ‹]¦³Û‹–8ÓÙíFïx»¦ûÓ?ýÓâÞ{ïM@ä_ó5_S¼à/ptÊ`Esûí·¯šï£50—¶%Ÿç=ïy) #÷oýÖo%`²ØÆ(J<#8€ýó?ÿsñS?õS‰Þõ{ûÛßÞ’ZyÌ@IDATL1fggS<ë »ôÑÒ"LX»øò/ÿò´VÁ·ˆƒ†:aÈ�ðqÞ§õ4 õùÀüÀäççž{î)>ñ?1-~"ø¨'4Xò¥.¼'õ³ú˜‰ó´ÛÎ(ó8Þn}Á£éì^@Ð%`Pú.ÙT*¸Ñ†ô:Â÷|Ï÷¤ (ÙîûØ�ýØPTh �ºnÃèÉöà{ßûÞæÿŸñŸáèäª_ø…_(Þö¶·%ð$òf›ñéú0(#é«_ýêâñÇOñ‰oú¦oj'uŸ©†:ìÑGD>û³?»`«`2„Ð <šÄ-·ÜR\©ï þÅ_üEñWõWm�áÎ;ï,ÞïýÞ/å÷®w½+å™ôca?>ÿó?¿8vìXŠbMãK¾äKR½ñÿßÿý_š‚°øÉnZ@U ÀÇù?ü­µàÅTÕüÄOüD{Ë€2÷B£5#*ê/£b4Œ�¨Ü€÷¡ú¡iŽ4¨Ñ¿ôK¿”À Íg~æg&À3_Ç\ýõiŽ�Š )ë®»îJslâ)†´/}éK‹W¾ò• ¨Ôƒ€øË¿üËä¿TßD˜|ÌÇ|LqÑE¥°gèã£ý×�üüxk?SO%:T\¬ob~äG~$� ¡I d>õS?µ=ýyÖ³žU|ò'rZg`q¡TUã~7B¡vÀ̯jç ^€šE9€ÈX°‹ª?@å� ñŒÖÑ0òž:u*! >ìÃ>,F'ÿ¯þê¯&ðóÀH € ~3"»ƒ2Š#4XdÃõèOþ/ùË‹ú r²ä¾O_ÆÀkâÐ,"ß�9Ò~fª€V`ó�ÿø�I°!äÐ^;êüýÑ¥ráÇ}ÑŸò)ŸÒ¿ÓROÖHÐ�ð7fø¨�€%±3–a‘é ˆ~i¥Ïóûæoþæ4 ’s[F7T[çË|}Àyü÷ÿw›Ž©+þ¹amàÏÈÌH›â]žG]hÞñŽw´àd4Ï Ú†º³ká|LÇNó~ÌW\Q¸€‘pÕðd¯¸6oïrk±Ž,’a“kh#œÀP.'mòµkÄ#h~ó73íÐxFÛИh¼"�‚��ÆlÆJTýÚzTX¶ÊèÔä÷éŸþ髯t{•_ñ_Q0ß& u]P‡"œ´CGSàßt@B€9Xóë¿þëÅŸÿùŸ§­;É¡ èøó jw!ª÷'}Ò'¥Ñ!�và2]Ç«®º*Í%œ|8€1‹•œTDØ0rÇ„š´äm•ßy3%àߊ¿üË¿œ´ÚF=„h•æðR _V›–5-{�þZýÇ¿ø‹¿È™ë-ËñNö„¹‚STüƒË!XQ]VÚ‘H•±ÒÄÈž†=Ÿ¥ïYxˆ,“/`ÎGÑ�EÛ ;˜~¹L¹íŒð š/ [—úÀŠÚ‘vIk׊*ܯÓåY JŸ§ïö<¬|»•çða•;Îù«m~'£tÇBôm4ý ùù…÷K·Þx—“»M¾ç9Ò�9ßüìtƒh“N[5wËiU{M}Œ’�%÷›²kÍ4kumH#êúæšz7ØÔz  ¬ô5]Ù9Û ôeßðòíWþ°Ê÷|‡Õ¾~ïk3ã `3¹Ý”5Ö°À¨S#P§·ÕÔµ’øu?̬Ý`XŒæ)Ü¢ËÙ¹åHªÿSÉ^·ŽJqCG˜iß×~íצבݖHJ¿+;…¬Cj'`nY!Ð�Ž+¹çw~'}ƒ?¥¿hþ�Æ¿ó^¦¿õòzNæåÆù÷ë¦ËÓw{6}¿|»¥w¸óñ3.GŒÿ÷?¹œ"ü¼Ïû¼v41ù³?û³ÄþGÀŸƒüOÂ6‘<�ò�ñ¹ßôýÚc:§çã#üÃqèüÓš¯óïæ:ßnñã^K°ÞÀcø›-Ÿ¦ü‘¦“án¿ÿ÷ÿþ_ú[.7ñr7~Ý —vpîžvÓÑ}Ÿ?íð>  µħÊ~ög6ÕaÌŸºýÏ!Uà‡6ÖI€l9ÀßYùÇž¯Ç ü³�?¤0ê1àÏ5�`_ìÀíÄ´ÿ }�8ÿôc ÄŸŽøcÿì¤õl&ƸbÌüç߆h�ÙXl)ÀµSü%–‹5õéàÜ{Ïwö¸ŠŠÿã#½ù·@ù•_ù•tC  Óÿç7öUlNn€Šá!Ôø®?À�d´E;Âøº°Í©Õ…¥ Ös݆÷„¦R§‘õÂU3d,@·ŽÂµ]\›eðsS ß×CÝÍ —zp9·òüÍßüMq(Ü»Gþ·ÞzkúÀ&ßÙãªn:)B„y´oÒéT.Â@•åÃ!\Âßy¹²›¯ûp“�ëóðí¯ó_¾¸Ëí=”Í�@|©÷ã?þãÛ—bò磟ŒêÌõ¡áz°N ¢žÌµ}Û/_¢-6ú[kºõö ¿ð Ó F|nŒ�Œ’–K<øài.$‰ã’Sî=À²ðȼËÝ\�Æ×€Ñ¬ÈÛ†ºÓ>´î3d:†!_¾‡52nUbmƒÛ†ÐàxÇÜžDþø˜¿ó…Ž{x¿\‡ŽÐñÝ Üº?Ùærqû­98ÿ:¸µ¹@ß‘ë{€NÉ ˆÅ<:`åb nÌáBŠNô¤÷‹¦RFITe¾³çÛsL=ù�7_Ì…&Ï—oùqšˆÕpÒaÈ›ÿò#|�–óf4¦³2]áòîÍ£´…ŽNZ¾)HGç"‘où–oIù#\¢¡nУâ#XðCÕ§ž\Æ7ÿ0|žû�o|c*�ÅQ®é„”p©?eGƒzÎî�Ø�/Ó-®KËëbæô>EFþ¾`ÄíCÝ tì^|Çw|Gšª}ï÷~o2uD»‰†6sq muþðÏÐîòºQoÚC»¢ù{ô{‰åàW¸Ø»¼¬éå{´¸\‹ûž»ykÆì™oõt¬lÓ�|-W¿¦2z2:%Wmq #9�‹N˜èÈt Ê`Ä|«>À ÓŒ€t8:é°ä(9«ò€Ô�…²0tDîÞcýšŽp„šÂ7|Ã7$á@~Ô‰z“?m¦\Â1luFÍ'ÞõGÇ7Xâ=�€‹úò#òÆÐn>UîüS ~XHu{IC}È?õF� pS�áFÞhX—ˆ–0v<übä‡Gæ%m³´ÀnÃå£|«Ð|¥N¼\Êu½ÐìrAç<ÆÅË)@þrP‰ùh¥c .÷º´3Oïg„÷â: ê0Ó êø÷}ß÷¥NE§CàpÍõ”©�‰òQ3™zЉɋk¼ß*�ˆŒâ¬U`<¸ðÓI%�i€âü#0eJ„j,kõž‹9éÔäÁçÊH�!­çþ<ÇÛ€ù�ˆ'å´§½èE)=Û¨hC”�`ˆ_;¦-”…@!OTjÔ~À|Çw$~¡aÀ/´#4'â¸�{1ð^�‡ y2ÍB@³ƒ/L�°Ð²˜ øDí&ÿ?ù“?Iü¡<ñä�¶Ã4Áw'òaOAàõé6â»>uv·„œžâò)m�pe_EˆX†šÍ�‚‹jÎv!4øaé^õªW¥GÇåöî¿çß®£ŸØÂÐYù:�À0é°Ü»Çgµéœ.›NÍt,î:t(�ÐP&À¢™`ȇ8oóÑé]øBÞ6oyË[’¦A8ih Ó€�A‹@{@`¢ A0r üâ‹@ÑÐ^¶a#†|™ß³¦€�·L#n¹å–ôÌmâŠs¦ ”‹@d}à³>ë³Ú tÄ—éÚBÍ‚t4.‚Æ‘’/Ãç|Îç$�Á”¬“1O�O'šº„m ÀÃËó"Ý /ÉŸû(€—/Üæ vÜ’ûz}„²2�»üQAé,�5Few"ê¸X°B]F­÷Í»Ä!HËÈ ÈéÔ¾ìÓ�Q�Å@žÉ‹[Šãþ>ùÄ©eÄoþQ†ùÃ� �± Ã@—�FôÈõ _ƒÐ4h"ì¨p+0Ú*>i,Ô ƒ/!ÏQë¡Ý�´5Öo¬ö3zÃoô¢aªd_Ð(×õå°ÖñU_õU«>pB™ñ€”óGw¬@U|YñsV€Ö³ìFÓâgTcÅCgåË5a lýxNÎ#�ˆgÖ<:²çŽö‘—Ësì”,¤ó§ÂÈÁÓ©\´0ù0²ÆÕq×/‚Š6°¯îz0ÊS>eÄÛ€Ù8€ õ>^î|ã—‚Ñ8Oá|Yxc�ÐV·Ñií"TŠ6ùR½Vã|™ZÜ}÷݉P3í@ t2ÔC´;No¨×Þð†‚GÔÞ1`ZG»·‚Ù‹€qDe$³ºÙï»Ãå a�F^lëÑ!1¨�t8 IÉ‹†*ì|aë‡C«Ë¬ž»#Ò‘cçm%KŽ?øIZÖ,à" Ÿèö¨ËtÅ‚„ú¢¥`qû/ÿا/�ùº}�Õf€Ï¶+`üL;à;ñ ,a6ñÜ�?'=Ú튆z™‡Ô¹—ez@úgè$!|aý…Êf Dû©Ó(¦2hO¼ß¸ á²bÆÅ¿%Ä\ìh¼è8R—y‘€Ó# £³Uä<-ûÉÐÑaXð‚ÖÀÈt>€’>“e-�8�†tHƒðy$Œé)�Œ!ïNê2qݾ:Ì"Yåãy{æï„öÄ�}’†�’xì54 ÒÐJÛš¬]�7@”¬Äó 3Ì!­Y˜§Që ±>‰X?ñ3dh›N|5=._*6�_ýêW'm†Ñ !¨/ü&ÿoÿöoOë91�Üïüºi69}Ÿ·„`Äcž ðyÁl;ÑY{Ô^:1‹qŒŒâ6Œ8¹átaü8æK_úÒ6°LëÑÜÏv_¯u F)�†qteÕߣ«ÓᲪïÅ<ž $ü6´ÙóáTñh0óuk¤u{¬Áí?\DZ¦d~ŒOø„OH‹­Äab9çC.üå0#=[¯iNH²N�0 -¬«PFäí…¹Ô?äÂá¨þmº t«‘¼\ÒzIm@Aa…`£.ôh€.òb›�ÎHçcTBpàwÇf$õÉ9ÂmFÌá‰geþÉ_‘‰g« C8B�Îèt¸ŒzQ¨PN´EÒ3ÇuGF*ÒBÇ(OGçÙB?£ ….»1_ü쮈´™…LÒÒ& ݾ*ä×hUx MŒˆ� Æ{„Ñ;¸ ØAë3(ý– p9ýFä�¦ëW½²åõ˧_üf•Ó¯ßhÉÍ&¯†5ã@£lâ ó²QEnt~eëår7JèWnÙòúåÓ/~³ÊéW�ÍŒo4€ÍävSVÃ�Šq Ñ*öBÊTÇ#UZh¥ï7²»\ç[–Þérw£òÉóÍŸ7±œ•uþ¿Üy%*öÜh{!Mul&ª¦ 5£äLÏHÓQJT�Ã~1]ÎZósºõŽìæ×Fçç|sw³ÊÉËíñܱ?÷ ßô¨*iø0ÂÌ)ø7ý�4Ž$ŒÜŸÛý84Ìq!h4ÞªiæBdZ#Ì•’®GÂ’ä]ÉœO?M ,]ׂJFlV9ýªS¦¢¡så�ûr¿lG_% ˜YÑ]†™-†Þ˜†Uæ@ê«¡¿ºÏÆ>]™úWQˆŒB‚.ëÿÞIT†k#ªˆ:ÕHJv¹ý4�õVn³ÊéWÏõÖCéWè³*'jî×ýŠßÔø*kf`#6µK4…­—Að1 ÷c ÜʘQk‘)Ño¦ÁÀEÝ,³SGÅ5�|FU��*7o‡Û·QùwËÇånVy£ª}•>«ò£í¤ ¸Ïw«êÐ뤘ü•C McÃÀ�Õå¤|•”/‹àZD!P‰6�Z0 ~»fXb¢.à<®[xïÕ%“Ô—›'uùãV£ ›&ÛÊlÕDÙ£Ž ÊÝ~ñ‘~Ú˜¿´ýâËä‘—Ùé™ûóz.Õ\¯)3Â÷£éß«Žƒ¤íGÛ!ž>ÊûL@÷úTkÎO¿]˜��½‡>+?ý× ‚ßý\Ñ£5#b, ¬f†]k üŠ_ÐwýÕí­ÿ KoÕÓÓòï”;%�°¡ N;©ìI ´XºJl›Ë€t#Êé–G?ðvK·Ùá!DÖSgõƒõ$ï–6eÚ>ëRKX©úLQ4âcÏé†á³º¡ø¨¾ˆô¨2Š€ûµû¹].%J…»5$†�ìZp*Ñ I¶á§ÆýѶ|É»«åÎ; C# _› €o+ocl XÜUªžçeù ŸRšË,a¶ÐY(X ,�RŒL#l"cÍl ÀÂÁ#:4Ž‹àÏ€óo܆Å÷U €ØO¶<´îßÎw¤¦ D†À$36Žè¦³€¹i=@®Áozh-0ð7¦áÀz9`°âº�Z0 Ñm-: €Ø××[§u§¯‚€!€ÕŒ±”„©Äf¼™Gÿ¨%8�Ýu3©É á€8@ÿøŸzD·@µ·µ ˆÀýÚé�îÈL�7saÀ…©¸1ñ–º0™zcù=ú›Þi스1 ÖÍ÷QØ€v¿d`²µ ð³…„Ó8�uWj½ŒT°øÑZt; ôøì03Ú ·kµ?Σql$ ÞØ/Ý7 ô|ü‡Žtm3Ê@*1RÐæÂy�“¢‰Œ†‘V÷;�ü1}ão8°‘ ?æÖ×þzüŽsÚ�¬Óšó¹hi4ð . Øaf,tý¡kÀ³pŸ¤,÷Õpû£ë4¸º¾ýçCFð;rÚ 31ÆY γÁn ÇgE·Óæ~žÓp`#8k?®û¨ýñ™¾ëp×�çJ˜‘ŠkDì¸|îg\›˜‡Ã·áÀz9�×Ïx|ŽÀw8å'F*S�*#)€ŒAÑïçN.a�i80lÔ¹K¹„ÅpûS�ª~*S)�*ÔY$ÆQ_{‚Û),D7Þ†CåÀ*p·JŠaÑ?Òsÿ�¸P9�W2L ò(?7ÀœhÜQp`Àó Ti´ÏëÆså@§J§Š_¨)t#m �Uz7°°VKSW†×’ÙM¥{r Î}ñÿLMÎKS‚KKIEND®B`‚ic08_ê‰PNG  IHDR\r¨fsRGB®ÎéDeXIfMM*‡i   gêI@IDATxí�”dÇUþßÎìÎÎl^eÉ’¼Vr’m¢cc‘sÎÙ€1>“�‰8d8dl2Ø`Â!˜lƒÉ6¶°$[åèÕjµ³qv'þ¿_m­;µ^ÏLO¿×óêœêªWu+ÝWß­[¡ëm[YY)êj¶ÉÔµî[¡Þê[õí\[á©�umgþ꿹æÕàU]H—èD�PÍ~Öqôo´‚j½¬mUýæd§0Ç5îè8ÐI8ÌnÑ„ѽ J®”è~×þTw~df÷|hó;*ܹK}³õ3n#6ÿ§2 €?¿-ëŽsX|ŽÜsx küÃç@zƒ=†;l¹U�ׂΰU%l_õ4¢‡ ü¯AnàÛÍÃ#½[à0?7îæp`˜U¤ÁnÐãÇå9³B_h¦ç™±¿•­†FÐ츹….†9®ý­,gDhZåGÐãÇ.µÜÒ³dãÝ‘ €Ðw€ FÑìxþóŸÑ-·Üò¬]»v]®Î°]#Ìvu² ´\€në}ú¬Ç)‚ÀÆï®æÈ�Ü*¿ì\P·²SÏ}îsŸöìg?ûc%nÖ3ámÐËïôl!µý ب³œf+'¿ÛB0+ ç´­ÇÈ/À?qøðá»Åã·9rä~ÑŸ:sæÌœÒXèûý‡l’·9G6ð¹ €æøåãÆ)@SSS¥þß ðBîÅþ??ôÐCì \e÷ ?³ÀàE†F˜+àŽLdu7øíF €½ÿí€?KÓ~|J–´ƒO8€0ÀþÖ‚`îZدéÀ.…oÓšÀ¬â¶i=àAi®u×wÝ"h„€9µN·*€füÖÚB@d²—X'šäCäBÀ¶%(mbrrr‡„À•7Þxã‹¥ D¸ÿþûÏ- _­!Ð�C%âG- úÜ�B€Ña�Ôÿ:�öU«+@•¡l4,ïR³WKÓ—]vYñ‚¼àI…¯Üyç�Þwß}e«Ù�²œêB7j�W+  ÷%®1çB/·®²…€]…'M@À7ÝtÓ‹÷íÛw@âmZè¦ t’`�0ƒ×àVMЄ „€:ŒÏú¯¡‰ëORµ‘|­-Zo;n4äGXt‰ç9·N´h¶ñ¿- î“@XÑ©ÏcÐÞu×]Q `[gÝFDn ௚ˆà·ßà_u΀66¤Cä@ÏM~?›ÎB@S€¤#ؘ©™™™«ZšÀA­¼MSŽ w3«¥Qó¢n|ê^5àÊüÉÕ(sa/3å:ÜN�wÙ�}ÒnüŠZ€™`Ð ØÖÏÄCßZ H»Šß&;¹sçÎ} Óij& wEš€f¥dλ‡Ûh=˜Ó)ªJ y[¨äq�ÚÒ„U„»Áo7 @Ί?‚@SŽ ?ÚÞ”Ž|³;ðáZد&ý«À¹šÖ�˜U%@µ z7!=#±£9£ÆÝ\XàZàúÝ ?[ƒ�þ€´& 8aß”Ü�8ͽ÷Þû L®öwkT#ºq& ¯šÈª×<Ö�8õÎ…€ŸÝ¦¸€@ ¾µ.Àд¶Ÿ¦{ ^tàÀ�}˽ÖÈ6 ˆF˜Ñ=ÜZ €ØÙz´±6Qëm ¥¡þ±tü­•ˆ�§ck6)0vòM*²T1]/ZƸÜNô~gv-Èz,s|]’Ô€Î8.i¢ûü1¬xÞóžÇ½+ºU¨›&Yn!�s¤õ\+Ð¥ MpE8Ès!`àãüøm g€`7ÓZ0I Ò�6v=Mç>ŒB=ÿ{ÐÊHªFD޶ü�L‰3oYï üè~˜ÁßI °Þ„> åë5�J¿ƒrtbð8ykwàáGy¤Œ0MúO¹òð3ÙlYÓ€-ûê‡Óð\hxÀ�kðãÚ€C¬µ4üL s| ¯ô×Ý:6|µ4�Õ¿ ÷ª¼ €¸&à¬sÀ£`!pžé‚Í–wü�¼sŽ‹G×Bó7ß~ÇSCƒ"s‚<¥ <*A€—F¹av ·ÙÒB 6€јúpÀïË ¥æËý<·�À� ` nBccZ?+_ìÓRÀÓµ;À?‰öèù-M 'ÉÝ-+j#xct Ø‰ò·8¬çQ”9¬¶ôÊwÐvFp“oLï8‡E×þ¼.ŸÑ ç½ÁÃÌ‘aìÅIh}w`E»¬ ¸¨^Â`K �Z ¿ÅÆ­>"ÈíÇÍm4~@œÐRÂíš>´~&—/HÐZÀ¡ë¯¿~Ek¬ ì”1[NliàŽY¦g44r ÿ X§0èýÜÉuFü¤É5ÂmÉÃþà&M@Që/ÄÊcE•=¥øe}†ì1 ‚^Ày)³Å miЩ#6aÃã€n'€œë„Yäiˆ³‰~…ñâƒ&ÏhíÌèù�=4�\0lM`¬@·ŽæNÓ¸Õà€�Om dÀ�íeL›§×3šÀŒN ^ì<Ñ$XxLŸ'ϳ}J’<³%„ÀX €§Þeã«: gÚšB/Aï¶9Ì®ÂÑ.Ö®À²¾E¸¬%4�B Y€2c!:u¦óÍ«æï¨ëk U“;çk�ú €Xÿú¶¡x¾*½]×�_B~¢YyÖ³žuF‹Œ+?üðc�?þx§‘ŸlcøXkµ£Mìl�¸0øsWôSž£�aòïTÜ%ÒV¤ °;0£2V$¢&×ð·?U,ÿØ �Ú^(£ ‚  u€k5k­ºµ–Ÿ§3pc¸ßut- Ïó<üÜr92Œ¥ÿðW`4�´& ?½O‚€¢ã¨oÿØ �Z €ØAu9h[“ÓEÀG¿Áß)OòˆùÄç®´;e/CÐ9�%-òŒ&°ò¥â±òc-Þ<®1Ý9P–?èR†½Ò°¦‰.~ÀŸçé4¸QˆáöS�–ßšÀe\VØÊéÓ§çØÐÇG?ùä“9øÍŒ±�ð+nÜ å€AL¦öãÚOx(Ï�ŒÁ/�¦´ÖH›ç—ÇuŸVÚ+H¯sËZ$D($¢&@P4 eorlÖ¶¤ˆ�0¾áÆ¿9èÅ »®Ï€A`!à8\@Ž&`ðÇ2\ú=º\a|šhE×’Ï)MÒŽ=jM Jû¡!°%€^`c*À�Ò~Õ1­5è WMLK¼mNO¸„É´n¾JþmìxM@€Ý>%ÍžÇFŒ¥pàÍ�ƒé×:󸛜<[ˆ 7º…ï8¹ü�˜»1iMàŒŒî$XÖ±áÇ»h.!�jyÑèX ¿¡Æ­´öÈÝ©v;»éb¸Áï8\ÇS†§.Ïn¤·_q3²h…vtÕØöw½ë]+½ÖœÜë<×NÔZø…ûMŒÚU}†U.€ØlC[òöø™úØO½: hâ®@·úC,Z€5�ùYàZ1®{ü‰'ž€�˜á°Ú �Z €n/· ¯' ~»ÝZÑMèn†8[hºÐîRÔµ²“Ü'055µCe­HôÒ¼EXK!P €¤w§ˆ/Ÿ¹fenF»ú•1h» *ÒÙï2ÊäÅ ?7kÎv’¿[ú˜?þhÉÇÏø£%œºt¹p”5>@б&p¶µ&ðÄìì¬%Œ]W¯¶B À\nÜúp >úóÄ8nâ+ÁÍ={öl¡8‘CÕz�3…30N|Ì?qÑBgz\hº}w@khO—�T�õÍÂô¿d k¹ >µ�Л‹�‡7Ù˜µqÀ|4@ó\ˆïeI‡pêÔ©¤8?\ƒçO vœóæÀG �­Ã¡s~Ϋ•7’gJþå‹/¾ø¬Ü ¤yþE¨éÀ‘cÇŽE€ßÏQÆ.A¥ 7Ô˜ás ‚Ù@µlõÝn �«*è0§ïä:OÜN!€@Ðhß¶|ø¨þDÈ ô~²± °KXeÌX €Êp·©È*|¸€,?Ä„ˆv;�Ÿ0 yEËÈýäÃxv.õÁÅ `аLäòâ›”!iò/Kðß�(Hб0 ΦR‚ Ö€—9 3ªr‡ÝÖ¼]Y^n·ðœ®Ó3elpt á/¾@¿r]ÿèº<Üh)+Æñèñ ÔSþ� Û)wEvNôËšBœ“2°¨5�mÇ�7à£KV �Jí ÔZœçkó»™èÂnu1Ø Â2ªzŽxƒ¿›ˆy»¤‹&>ãÇØŽËÃ]ב0[êË®�þ5¸WñÏT>;ª÷’üËìôhãˆO8®Œ¨¥ð‹#‡b†�ÿP*½�™\Î2>ã�ÏÐôãñ¶€ p1¢b†0 òÏ…@"jýô+?ÖÇ vùdaçgÜÜZ �Vëh—¨îK ?�«çEÕyIçŽéÀ�€Á5K,ÇŦmº¿–`Ó¹´… 4ØpÛV*»{¯ÁdñŒ±k?Ï•à'OÂ?–çü„E“?Dz\^îBÓÏRÓØo—:ãÇ"¸Ø ÐíÂûÕ†çÊ?¥:3ú/Ýyç�K­ƒ*…ÏíÆP–ÚÒ~Vܦ›--x�yŠy_4Î�+Î�>]ÌŸXÌ(Ì=WàÅÒÛß^œÔ´€Ót§çç‹Ë®½¶˜ £;€ÁD0†@þzʵ�U6ðs7Ò¸ ‡ù¹“ë°~´Ä›×ÖáÔ_³SK—ÈÞ,�`^Û‚�½å-oá+¤¬ L¶¬¯óˆ¤ìF»0VfŽÒŒºü²mÏëiP9=€D-Ÿ°gï¼³8)ðï¹çžb—žùŸ,�†aì ôÑBúnqNS€Bëû/¾¸˜Ù³'�êä——åg&ÅQ�Ÿ×ÉÏvS‚ÖO sþŽ÷³]ÂñÇçœÖ4ÏŸ�ÖùÈ��3!¡¶WíºZ¼;¢éÀ>¥c‹va;i#ŸŒ•“³N¦~-ôÍIý_Ò¼BàŸÒ_t¿{5½™Þ�&´RÿÏh�@ËßÅ‚Òq¬c€ì)0„›†xƒØ.qÑÏs7Ó�΀uz?ÛÍÃýÜÍu:ÜèW;¶KØ«ÅÀ}rùö€€5O©lG*j'Ìp^Nôó?BÀ#?Y%ð+ýÈþ&\+Ç09Ãχ6¿ý8Ð X±ƒ·ýÊL7`óÚë?'» >]‰Sœ%¼e¹6—}.m~K: Iðù=/ � áÝùý宲ª¤�'^§èUA·MôVýq üèöÊnSâj)6…3[¤�6à[`m? Ô‹:ÜsR‹zgµ¸7£ÿšß³\G§A@œÁÕ_fWD7!»­µØÎ§ƒP’Ú +ÚÕψf›£}Týãè�¨„i@%^ÃæV"vbüú“{Zø[�*?§‘~Vjüa©óïÓþþ“Ú×/öï/ÎjŽF€Ÿž¼¬‘|I`Ÿ×ŠÿÒÓžVL]}u1}ÙeÅdKÄ<1¬ŽþAÚ!¾Â¦Üzô§ùöãö—*¤‚iÀ˜Zå, þè²ê¯ÿ´'t÷á'Š»µšÿ?ñguâï æò—ä Rï9œÔ�YÏÅÁƒÅÄ�7S7ÜPì•ÝsùåÅi V…áƒýv«Ì›nu3ðá™ý¦5ýŒ«0æôÛ ‚=’ŽÜ?Ö ÌËŠo`­ô�:ÁfäËèåÏëÇ|v‰•~�øg4âŸ`¤×èþ8£¾À=ZÍ¿�m==ë°{QìÚUœ;p ˜@S`-@óý9iõ÷Iì:t(�þÓñÿð3ç©ëép»„G?Ïy½ ‹Æôeéœv­ô./擇ñܲüö;‹‘»c-FÎÝ TÀ�=º€^#þ¬FüG´Åw¿ÿ¿²�êù$š€@~\®¾�Qìí¤Fõ9�ð[Öˆ¿SôKÇtþòškŠ}—\RL)|RëlóaYý·?â€çà©»Ö]ñ9�þ¸Ê,Ú˜7á•0c%íPâ߬| ê¼'Åpü¶ RõÏh´?¡9>#þaÍëÔHŸÀ·üG7/zÖ”(©ûg¤êϲ Ñ]ßÒ.öéyAú9ùô§;4÷×—4 }W»Ø¦pÚmàÛ%Ì–zÚo7¯{¯gÒ”1eéœ× ôyºÈoÇ),‚?÷›läîX €‘s³ˆ�ÑÀÇežR O#¾Fñ»ü‡µwÿ¤@?«Ñþ”l?m½þÖVœÓhþ¨À?+•_û`Ån�ì—*zB`NAÏ+ΔúrF±/€@!pmÉ6úyÞ"¦œÔ3j'èD6Ñï°^î°è7;ßr·×aÑ]ˆõa»â´@~J–•ý{u²ï�ÿn�ú�K8#ðr¬7é°Å¤�&pJ#;Û}º?»8ÇH/a0%ÀÙ€I�ü´ÞÇiEëJœB�[røÒ‰7�Âbùöo4Ý ùš¾ŸëzÞ{°_Ò‘Ç×FxD9Ç*Vw:ª…ßðüÇôGd�}PjþC|x� ÁÀÈͪ~nhú0^ZøãyE~üçᄎdR‚ÁÁÿ]‹²ÉØ=ÿÔüVœµ‘�–¸1lœýäng 3è™ã³�ÇÊþI�ü ©øi´ðkuŸE¾'Xù×èÞÑèk“¢Hå_�ê?�ÕtÀèRtgU6GˆSÔRÔ‡½_Ó|rçÙyNK¥?ÐxVö”ÊÿˆæýG% Î0â# úÐË~ìS. iìó§½~ ÑœP¾'%tX0äÖ\×ÑîÆsassô€3.í‰Ük@äÆ&û»u¨nÎôv½—Ïüþ¨÷ñü‡[àQ…1âÏõ½Û-0OˆÛ K†­=©ýi»O.€þøKþlž–݃ 4œ5Àu]Ïg²ú×qnïêØæi38ЀÍàr‡2Üù;Du 2}tuÿTq\jþýZÕ¿U§öîð�j$f0Î ŒóbYÃhŸÀ¯4¨þLXýŠø'4ºó‡ÀÍ¢âOª.'dªÌ~êë:“Æþô‘ƒ£ó�µÈ;™;_7v¯•¾_¾yy¦·Û«\Óà¦_ó<ÿIÍéÕÂÞÝ:¶{«îé{HþS,çõ×bÚs€ÊC 0§g–‘ŸsþÛ¤ äõ]@ˆ ¯d¤zv´Áií÷3õ�~žÝvü�ŒéËÒ9�µÒ»¼²ù˜®ÊîX €*2Þ�Ïn¯:Bc:\Fü“ýãúƒõÓi,îÍj€*žoéõÊ?�K€ÓèO¤ÊLV+ûœÄæ£?dh'Töq„@� hmS(ÇÕÕ­c{ÆJ ú†MïŽlól¿]ê`¿éMÇâçõÙËgžÏˆÀKÕHà-ò= …¿ã¢Y�iÍò‹e�ô‹šß§_ N7þ ÈÛ5ê3úooiyY”Îß‚O«¾iÚ¡úìP:l.:ñ¼SX^ÏMç2Êækz»yºNïÑ´UuÇJT‘ÉîѵŸúF¬?áç¤SZÈãzà¹Oî}G8À#¡ »§‹3êF˜ô÷^Íï$Péõýëb»ÊÀú~W1¡Ñ€pÈ « ódü[ð´êC½v-€3züQ ¸0ñSBÐ|4MþìðÜ-KçtƒÒ;Ý8ºµ¼´º¼8€ŒüÇŽ)Nêvݳ² RáQ°šÎç´vé�ƒºDƒ�iж%űÀwL£üÃRñù[î{5ê?¢tœêK#¾µÑU__¹LW€%¿„Ba¿ìNù¹ë¿#øCe˜ÿ‘ÐÚ¥4tTxo-ÀÉêòN]ßqsk#"ã«Öi{4Œüç„ï{_ñ$÷êëƒóÁ—‚˜Ðÿéçô%�EýŸ~úRýņ?Ö(ô>�ôüi•ÿ. ƒ'%†a\kÀ²@�]رˆ]o{þà�â­¥ôªS‡Yµ}‡‚TgÖ/ñrP Gòá=ò\µ÷Ù«�ãWKPå—@‡æƒGµ/ìŽ;ŠÙ·¼¥X¸ûîb»Fð©–êÎb[ºTCjÌj”_yÆ3Š „ÃjØ=«ús{ù§¢a›´Ø‡X?Z þáÿ;ôŒ-R&&¬œRzê�6ÀvÈz*@>¶u¿ÛN}ÇÍ4`ß($ �àGõA�'o½µX”˜”À×ò¸SÃxžÀ"¡À¥›üãN_”,ߣ9ÿãA“XV¹çŸÖü;0 ÇÐ¥Hý…ÎBWÚi%_ €ìL¸.)Uç´†s¢›и_PßËjƒßü±k`uέz¡®oäcõj9X�0¿:RÓ1âB×Y©ûGÞñŽâ„ì~ÒÙ£TX°Þ¸Œ�\¶yDô� t�3 ПC8Ì¿£–ÏE¹qÀ·­òço¼Ì÷Wr—EùSªBk‡Ö+ü¿~µHÂDDÜ+€öŸ’vK�xôÇõnyE uÚ]èW^¿~Œµ°Ä6›b‡sXt¥�ií§Œ%�ì�s²Û€˜øVÀç®h´€�¢›Ñ >æÚ|]·Ðÿì“ÊŒ:.`¦QpÚ¯4€ ÁÃÂ�w'cÀ§‘^)m+_ª?qIà( OÛ¤:oW|ipR/¥çGIÞ£|YÜ£ç( á6ç·ëîð²ï«,�ó_/}Ùú¹¼*»c-6‹ñy‡âÒŒí€YvB‹z@�µÀ¿Ksý+õéí�¢A@Ì@jõœô¨ÓA�¬j¡Xùhñé¼¾h{@é‘~‘t€¿ø$ ¦•ºó@ÀL@iv*ÿµèœH|”)„ʸL‚-?ë ˜°ðÐÀŠñuò×±þc%}ë¥Ï�ïÎÊ©9îÈŸ×5Ù…õtF|À„˜08pÃ×t8Z›þy'аçμ{JÐ&!€+€¤m9ѲM—¾Ä#Ðâ×(Î $Z!©íòˆ!-{û�$8»žÓˆ¯¼Û~ˆ•žóÿ€–K>p±heùÅngØ`*À¤ìо¨ œ/®<ðË–_–Žò1ƒÒŸOuaºnýÁôUtÇJŒ’Át"w€íÚ×ßýŒg‹:°¤ÏgŸÑ:àLWkÉeà”Vý±§uàˆ¾¼sŸ�èPÐY@-,#©ïàa_Tü¢Ö øjϼ@•€À–\Ñðo>´\ ¿I Uˆ~E6Þ"„Vé„öbQ€å…˜iÑïP×}³�WÆ U œ8xZùpO�wÈ#®˜oka™úl& í(=eÚÌŠu)«v v”èïÒ¾UÁ›AO;¤Æï×ß²€F€Å¾%i-P-êvÝ9]§=«ýÿÇu¥öcš*<ª4'2Ÿ`´ÏÊ;©ð¢[’`4øBTZ¹ÇŸ@Ë%M€ð+]üQ�?†2H£ôü�˜IþƒÀ:‚ºc—á#S DHÚÊT»g¤ L+¿¨ 0±y~¤yxªc‡Ÿ²tN:(½Ó�£[+P—7%0_tÅÅ6�‡cÀ'¤œÖ� %�Ä,kÔ_¸êªâ¨hîUÜcó)fA@óè �™‹[Àe*ÀŸuмjï}{FvÒø$4’#°«æùßàW~m£´mC¸¿ ´Ç5z“ï•É~~YCnüK�s Ü?¸_õÉ× t»ä]—w\–U§+ÿFGØ’|þYõN‚º¼[ ç›y\õ¬5�9 …yM Ò+ÕR÷êOkôg /j”ä(-þ~�/�è€B–pTyÎð/A�ÖIuÐ2†pa-@_0úç %0RÞŠ£,ŽOI,"HTn)Þ·òõZë—Âå-ï5Ï3N k~†Æ�Z€¡µ~ƒ2 tÊ?‡fXôÚ%!p™€¾OŸÕš¿þúô_€´¨�5‡ç.ý�awiàÝ:pJB€Ñ6�˸- '¡ ?£ý’FS€ ãH€ž“ P~É¥]ö÷r�zÀo·åg·�…@0¹Œd%aPJ( 鎫޳J‡ ô‚"®×È+æg¿]ª4jãºø�º>Y~#ÖÁÍnƒ•}@»S GÌhŽ¿(uAà]Ôˆj p`J;+Z8*P0g>… ð1¸-K~€>uBå1)à°Z�°ôI ˆ6ÝÎKZ…­Rùyv@€ví2-º4íP>©îj ën·Ý”®ÃOš(/49ðY´&ÐI è�U%‚ÜÞq�Ø€®åŽá¬è ^0óÊ94XÂ-€�-:€ÏûÝO àmc *Ï$ÈG Ú.a2 �ži:ä£|’0PbþY˜„Wxt;Sy#Ž…A�Å(Ý*CÞŠ;ÇEiR¨éû¦|{€ûùkó>¥Ù¡òØæ´Àí$àaÎ×>Å5ÑkàÀX €¼õ“Ük¥�ù&€¨£»cóN³µ ðO ˜ù?#&{çéúnùÙökù MBùr� > @ï˜ô¿n@UþÉØ%?,Ïk@½X ˜�ÆÂÖÞ®|}J�)Ox­úš�”€(ã`Ðq v9ö* @„#¼ƒ¤Éù˜?·ªÓvÚådõm´<¦sxÌ×aÑíGïø~ùÄ<«êk°™Lw§p™qT#ΖpÏ�¿Âž.Ë._íá °ô�>Ûe!Ò:�òJÓåÃøÌü�Nš óÂ/Zþñ—Àn¿ês�mú›¯âø»ò¥Ù)àΨ¾3rw¶„#{· CØMàÂP¾8|IKÐn[ó*TÎS··ªnÝê ÇJ ú6š¾S~ÃźÓÓÙ-ÎYîÓ»Nÿ œHæä"<š÷êô€¤+l™´K 7�èÐÒz€›ÀÞ¢Yt€¯254¯ÐÊR‡sr9€æÁßš™`¹úkZig4ÂOé9ݬ¶¤ÅBžÕf†S{NiÑs·Â9lÄíC|qؼ¡îI“À ñÑäÏ1¿øõÒ;}^N.ÀLWew¬@U�w �p„cýlaÀ3öb� x¦N2â>.€0b¢B—±íÞI`­ }&@ù«ðódøm z €è“€Pú¶Q¦Ìë9ÑhÕ~RÀŸVûåÎ(œ{¹=w»ÎpõG—O(ßô%bívLI°Þ±Kí=(—¶Gž™GŠj‡®HC\ u¬C=Í»Z €A=,ú<_�y8ÏXâ±t| Â÷ê¬ÀÓºÓãÃZ d-à ‹9ô &i”¡µáz�ú× ø—ËîàwR¦ ëçô|V÷&žÐ�©}|Ó:A™ò@€´LäA›Ù\VþÞ\·:»µuc´;õ¦óä�:¶'vp¦œô»Bà¹Q‚à¬\ÀÏÚc,#l“À¡ÊfõžÝ„@[� N0Zçý§QÇrY�à™“Œ®ë3¢ç4#ÿñOuQŸs+åÉŠÖ; S ¿T#þÒjz°—5ƒVø¢Ÿ;;§{Ï¡õhÀB‡rÍ3ó¯•l$Žßç8 ‚FlRWrç¡8ûóNm AC |ºæÄ§¦¾ÿ·–�"Ð÷Ó˜ÚYS¸òÞ% ]"õ{�\€Ç!¦#ø]Wê„?mYB§øiËÚÆCCáKBüóñœ¾(me ÍEaÁ¤üŒú»äß§¼¸#A†0:+ÚíºB�iÀ’´Ž'Á£´”i›óKI³NŒµˆ�>õ“Ük¥_k¾”—wj Î0_,µøjâ:� \µý ÀÂ\V ¸ ~¬ �û ûæ½5qæƒ]h1<;̧øøžmèl ¦Ïˆ)/@² Û$¼¸‹€õ‡ôG)åÅ6 & %ˆDzì’òà» >$…ÖažœO1ø¯ëì”k}_Nïüúåcú*»c-ªÌx:Q~×—O aÓr/Õèü|m•ÛÓšC:`”MwP¦, Ǧ½xÅñ%Ÿô'•»C[8”¾(w§êËgÐÐÎJpqÊ¢æõh ²g%`Xö7Ò}…¥å? 韇>à‡¶®›èçÆ];ÆJ Ú1†E_6ß^t¶ñXEß§©ÀµZ à„àcwîó‡!¾Å7ˆñ¶[ƒÖÒÝÿ”ˆe1«è•–)Cš\YŽ ïV†z»gõÌö"À§ö<ŸÓ‚#ç&4(äÇô¸6”·ªLGdnš˜dPz§u:×ÑÏŽ¯ƒ;V  ïVǼóX  s18 Q•©ÀsP“~> r•»¬ Ê‹ûþÉ“-EÿXTÀy[6¯~tÊ�|™Z\ºgO`Ó\ó:Èa´•œÀ¼¦9+Zü›|ö³‹ ºõªüä?*“¿ÇQÕ£l¹c!Ê2½,�™W–¾,]·|»� ŒÍ,Ôq>€‚G$¦ìͤ^†‘Ÿ�“²SJ#„¥¯ýBþÙ—ûzeP2Žü¸JœFùýÒ^®�—êÌ}¬,ÊÏÁ&Î0ኳB×£M ü»*vH`°ÐHÛák´Ýª±^þwË·l¸Ë�ï1¾»²ùŒ‚n,À(7¬2Ý™Èß�ŸÎÄ¢Ûn©Ç×HUæ0ÎÃÒ¸°3ýkPϽLºbLÀOWŽ# Dχ?P×g´Š? à¶õÀ™êz‘òã¿ÿ{e¹L”rY¼é¦bEZפ³c�vt=ÚN]�:£ëÓvÉÝ©úÐÞh#OÖ[Ç&ýjÔNÄÎý«›U¯'·Ã#ˆkO¸GâÒ¡iWiô¿Q@bM€O‹qÓÎS3e§~ÊE`ôßÞhlÝqNŸ LÙö[Ëò"ƒQŸÿ p~à€ÀΈ‰¿_#;' ù®à6•Á"  _”àZÐt ÑíT87&í’Ý):þVÌâ'�¶ÃÛ§ZÔø6е[­Ð^ü€Á[o5JÞ¬�Žð'ŸÇ$ ø :@/!�ÎH8×ôaž[“ÇÅ•v?À?¨z\.Ð^Ü>' Ñ*8K�>,ªød¤y,kŽß>(¤´“<6¿~€…@.\¹È‡ ËuY¹€Vy›™om@dŠ_H '?í£³¹�¸QàˆîÓ4rråöõÒ8)È_mÏhd_5P˜´ ?B ¹ä›þ»¯2Ê œÖ”G:?  _"à^!{PÀ�‘ËMÇ·ˆ]žÛg!aÄ›NƒÛ),Æo´ßå�“ ¨¥Øè[ÅüÜÙ¨›ý¸‹?×p ïJ-˜½PçØÇ§>DúskÑwäƒE`[댾üù¦Ì€Ÿ³K–ÿñ_¤r/U=(}õ|þÌ“Nf€z»JºÊ޵€›„*ӮʠyX3¶„pÇ++¹¥/Ëý~ù:Þù¹¾ÀÁ ¾ƒš3ß •zQ#ÿÍ«9)˜îàÁúd[aäk à£ô2”ʪ~úŸ€è¹Îüb=_,°_,€F‚ªÏÈçð�4€NåÐ>[ƒÞ£øÍ“Nùu sóµ�ûÑw wº:¹[BÔé…ĺº£Å0 ¦¼tTXS€›t.€?èÜ%-€«Äl ~@œFÿVDZ3È…ÓänÚÒðYÝ¿L ? Ëêþn €¤ò£E(,·ùHÞ©=õ5èÝV‡ÛÍë×<¯�c)è(ƒ˜õÒwQ6*_çƒËb*°M[ƒ¶¹ž“‚,JpƒoúÏ>—åÄ·ñ° È™lú³�€ÛIõOe(]R÷ô}²˲º™Òì“eG"-òu¾G@l@»ñÝ8,ºø£…Þñ¹ŸçÈžmb‡õr×Jß­ü^eU%n,@U˜»õ SÒÁbçÄ�e„%n�„À!Ý%Èm=�h*pR ‚ék<ªn>×q³ xZa\¶]; œÙï¨þ+¶ §Ew•æ÷—Ë^$Àóg¡]rÓƒ3@]¬tù]gó$¶'ëDÛ‰ÞéªâÖ¡Ž9¯ÆJ ú†E¿Ñù:?�4<3ªòŒ;#€NH ¸F€ÏÌk¿�ÿÕï’=(¡p©¦\é=+ú³¢_‘Ðà@¬p˜‡€˜Ó³ªÿ4Ñ\¦©Æ^uߣ¾çúé-p©®ë‰ë6¸æÏyx§øNaNݲtN3(½ÓÙuz¿‡×Á+P†¯·Žîläc!ØX}¿DBà: ˆâq]½µ u�+ü+õ�¼Ë´]È—„òIÑÍIH_#ü—(íE²û% 8̳_€¹¾ïÿðüQø¸ÔÓ®ël7y�7§ÉŸ/HP±€ºÕ·Ö`Pf‹~Øùzd¡ûé÷<2 á{4R_­£µ'4¸æðábJ#ÿUúûðeÚ"<(aÀÅ�Œú;¤ÌŠnŽ´Êƒ¦“|zæ@sýƒ}¾\�úýÀO] z»æ�ÝTÙ?�è:…Å,úÅGZüƒÒçéÇé¹v`«¿¼¼ý ð£Ô]— ´ÏÕ¼Ÿk¸ftÕÖôc�;øç ¶ ¹q—c¸gô>7Nú½J{¹l:«<ö(ýŒÜ¸Ð×mÔ·ÊO>ôÔÓ¶`òvt¢©Rõ�·Ju[O]j'hlÝ:Ïz^Pl¯;`Þ~ ö>X¼›’º™®ØšzøábRnº…—óÿœØ&!qNšÁ”þ™ÇB gø¯èYèc‘uŸ»ù(9ð£ÊÁO�l]çøLXnòväñÍóð9PЯ3 ŸUÕ*!‚?B€{NÍΧ5êOþÏÿ{˜‘êÏ_€Ó7$¸A`‡Â–ï½·Xȹ‡Ÿ¿íz…ŸQ?�æCÈx[oà?õÍ¥ü}¹¾b¦«ƒKÝëXï2¼­�(Ó˜n4ƒv¾A黕›‡¯7ßné ÇòQŽSÙÏ<òH1¡Ñ÷‘#éòÍôÉ.U†Ã?s²Ût_߂֖µÀm={4]àŸ{Ó-ÐO±Nп]ÀoÛü´ÛuµK&>ºú×4 ºAóÍéóçÕµ®çÓ–õ|5ýk�wH.á<)•ÿŒìvù¹\‹+¹8»�àK†\*zNÓ„yi ËrE;¡]Fw­Gü^àW–mã:ým‚ÆS)Œµ´®•¾ßHµÑù:?—Ë3–»þÒþKíç/–ï éN>�øÜÕ¿,àûs`ŒêVõ-üœƒßåÙU¶« áÑøÙõ�qÑoºÖËoúaåÛ­l—ëø~å›®ŠîX €*2|èu|€†"²uèÈI�ê}=þüžó“Gç»UÝ:òc,À /bXôÃÊ·ÀØãŸÑ¼þœ, |ü%ˆE?¿d4ÂøôYÑ�ÜÁ7Í­@¢7ØívüIHdÛ|Ê&™^mìçô¸e霦,}YºAó5½]—SGMÀ}ÃmiÜšq€ÎçŽÇõ^¯¹¦XÖ)ÀãšÓsîŸ9¿ÿp™œøÏê îIÝÃ7£ûvK`LikÐÀ�.ù[àwgW6«ü<7æzáéO/æn¸!Ý8§£Àóšëok]Æåœóº|sòÏ(vÊÎèODh,üøðøÉÛ–2óöæÏ®Wî–¥sº²ôeéÍ×ôã쎅ç4HÛPãwsù¦€=÷Q,_ye1÷ÀÅ‚v–õuÞôO�ü;®½¶ØóÌg{äNëoÄÝæúüƒÔci2¹à‡vÖZ *ùÇá…Å6ÄN‰Ÿ|§´€ÝÒ<ç9E!a0¡~NS‚E�@\Á½ïСb·4�iÑÇ…?käg›—égâSoÔN4�nu‡‹ü0`§êƒ:ªý¹|Ÿ�íA¾»7Á‚ŸÖ¦t˜)C:ò+Í! �8pžvW—¾5žhû8Žþ¼½Ú *Í ÙÊÆíÏ;¥AÊ|žûvh¾Ï®À¼æÿóúÛä ÓáZýÏ@¤ÁMþãÆÙïvç|¯s›k%üêÌðaÕÞÐ1½1ø5†¯þà÷GAS á­­=Ô~ ü�üŽ~§oÜús Àr­ìvç-+¹¥/[¯�ΗühSt© ÏÙ~øÇ½€hXèRœh=÷7¯‰³�ôöã�)Ë×D\â§*ùv«G·ðM«I-@å¸V¡ Ñ-\-@lPϳÁOx¤7àqÐGKž<7f<90Ö`ÐŽ»Vzƒ­[V¾yy.× ·ßB Ö•8[ ž1ÝÜ—Kü8¯Xv§d¦ë×)ÌôÃÊ·S™1¬lù1MÕüc-ªÆìͨ�;¥ËØKœÁb:ÜÜ:m¤qXãvç€ùÕ�¢z1c)}âv¾9˜»u/êaZ»Ðî:æ®ór¸é^Æ�i{Ñ—¥seéËÒ š¯éíºœÈ[ÇUÝKPu¦oFýÜ)]ÏtÐÞÉï°œÖù4noÀ?ó°7e5bÇJ ÊøaÑ�*_—ë‘ÈÏîj<÷Š3nLý‘¦›¿,}Y:—S–¾,Ý ùš~œÜó›ÆãÔ¢¦-«8" ògˆcüªÄÍC›ãÊ£±Ðʾœ²t~ëeéËÒmt¾ÝÊÍÃ˪óy:×·Ÿ[6]Y:—W–¾,Ý ùš~œÝFç·Ûj±ÝÍÝð&*`6¼C̰ÖÀ8¿˜a½ó†gkç¬yçu”µçT�”µÓüªÃ¦& êË�Zjƒ Ó—•܃җ}ýÃÊ·_ùÃ*wÜóíÖ¾náýÞCãk¥˜ñUddS§†uä@-5€²ŒT`¬•¾Ÿf1¬|ûñaXån•|Ëò·ßûï—Ï(ãk¥Œ’QMÙ úq`PÁØ/¿ÍˆK `Ð1,ú˜/£Äç~îçÿû¿ÿ›Þ+Òù™Ÿù™â#?ò#Ûï9Ò/,,ÿñÿÑŽû�ù�ts/¦ë6ò8¾�¸�§,}Y:Šû¨�ú¨âA}¤tI_+zÑ‹^T¼ñ�ol×;¯Î ù’¶,}Y:×gPú<]·÷aº*ºc)ªÈè?üÃ?,Þýîwss|žSŸìÒµ]ÿöoÿ¶JÄzßzë­ÅW~åW¦ÿò¢ù—).¿üòHRYÿ]EþÐC¥«È¸ièiº„ÔÿJ¬l¥7¨bk"TüÀÙŒ•”ùâÏó=©pþÀü@?—nhFøûî»/½°œž@Fh ½îºëŠ]æÙ‰.¾ñ~ñ‘Yú²tÎÿôirê½[�Ò†ø€pÔ*wÐ|ËÒ—¥se¥wºn®ïVè_¥ð±Ubl¬Ëÿðgù§ À°a”ìfþþïÿ>Ñ"0n¾ùæbïÞ½ÝH+þL}sàðÛm}ÉK^R¹:Z!„DUü~íl@?­3ž9ÿÿñ'u˜;øŸûÜ禩#㺫wJßô³aZð·û·ÅwÜ‘‚ˆ{øá‡“á‘êÆo,¾ø‹¿ØIŠôñ�ßû½ß+þîïþ®8zôhÙá+^ñŠâ£?ú£Ûtö „~ìÇ~,}&œÑê«¿ú« Îïþîï�ê;u›0 }Ík^S\¢oÐñßúÖ·¦y<£;ŸG­ÿÆoüÆâã>îãœmÛeºr÷Ýw§ç�ÐJ®¾úêvœ=´¾üçþgâS¢çè[_ú¥_Z¼øÅ/.­�8¿Æ]°6¾•NHýªü—}Ù—ßù�ß™€üøñ‚ùr¯{ÝëŠú§jçÏšÁ;ßùÎd8¿à ¾ óÇüÇ‹ßþíß.ÎéÚï¨] HHíoüÆo¬Bé oxC[+a}‚:ZK¡œ7½éMI(¼öµ¯-¾ë»¾«8|øpª«ë€ ùº¯ûºâë¿þë‹W½êUNî�þè��<òHû¦am{ì±â[¿õ[SÝ(/^RŠ CÐÐ׊‚ûu¥yc†Ë�±ØddôèØ‹]¦³Û‹–8ÓÙíFïx»¦ûÓ?ýÓâÞ{ïM@ä_ó5_S¼à/ptÊ`Esûí·¯šï£50—¶%Ÿç=ïy) #÷oýÖo%`²ØÆ(J<#8€ýó?ÿsñS?õS‰Þõ{ûÛßÞ’ZyÌ@IDATL1fggS<ë »ôÑÒ"LX»øò/ÿò´VÁ·ˆƒ†:aÈ�ðqÞ§õ4 õùÀüÀäççž{î)>ñ?1-~"ø¨'4Xò¥.¼'õ³ú˜‰ó´ÛÎ(ó8Þn}Á£éì^@Ð%`Pú.ÙT*¸Ñ†ô:Â÷|Ï÷¤ (ÙîûØ�ýØPTh �ºnÃèÉöà{ßûÞæÿŸñŸáèäª_ø…_(Þö¶·%ð$òf›ñéú0(#é«_ýêâñÇOñ‰oú¦oj'uŸ©†:ìÑGD>û³?»`«`2„Ð <šÄ-·ÜR\©ï þÅ_üEñWõWm�áÎ;ï,ÞïýÞ/å÷®w½+å™ôca?>ÿó?¿8vìXŠbMãK¾äKR½ñÿßÿý_š‚°øÉnZ@U ÀÇù?ü­µàÅTÕüÄOüD{Ë€2÷B£5#*ê/£b4Œ�¨Ü€÷¡ú¡iŽ4¨Ñ¿ôK¿”À Íg~æg&À3_Ç\ýõiŽ�Š )ë®»îJslâ)†´/}éK‹W¾ò• ¨Ôƒ€øË¿üËä¿TßD˜|ÌÇ|LqÑE¥°gèã£ý×�üüxk?SO%:T\¬ob~äG~$� ¡I d>õS?µ=ýyÖ³žU|ò'rZg`q¡TUã~7B¡vÀ̯jç ^€šE9€ÈX°‹ª?@å� ñŒÖÑ0òž:u*! >ìÃ>,F'ÿ¯þê¯&ðóÀH € ~3"»ƒ2Š#4XdÃõèOþ/ùË‹ú r²ä¾O_ÆÀkâÐ,"ß�9Ò~fª€V`ó�ÿø�I°!äÐ^;êüýÑ¥ráÇ}ÑŸò)ŸÒ¿ÓROÖHÐ�ð7fø¨�€%±3–a‘é ˆ~i¥Ïóûæoþæ4 ’s[F7T[çË|}Àyü÷ÿw›Ž©+þ¹amàÏÈÌH›â]žG]hÞñŽw´àd4Ï Ú†º³ká|LÇNó~ÌW\Q¸€‘pÕðd¯¸6oïrk±Ž,’a“kh#œÀP.'mòµkÄ#h~ó73íÐxFÛИh¼"�‚��ÆlÆJTýÚzTX¶ÊèÔä÷éŸþ髯t{•_ñ_Q0ß& u]P‡"œ´CGSàßt@B€9Xóë¿þëÅŸÿùŸ§­;É¡ èøó jw!ª÷'}Ò'¥Ñ!�và2]Ç«®º*Í%œ|8€1‹•œTDØ0rÇ„š´äm•ßy3%àߊ¿üË¿œ´ÚF=„h•æðR _V›–5-{�þZýÇ¿ø‹¿È™ë-ËñNö„¹‚STüƒË!XQ]VÚ‘H•±ÒÄÈž†=Ÿ¥ïYxˆ,“/`ÎGÑ�EÛ ;˜~¹L¹íŒð š/ [—úÀŠÚ‘vIk׊*ܯÓåY JŸ§ïö<¬|»•çða•;Îù«m~'£tÇBôm4ý ùù…÷K·Þx—“»M¾ç9Ò�9ßüìtƒh“N[5wËiU{M}Œ’�%÷›²kÍ4kumH#êúæšz7ØÔz  ¬ô5]Ù9Û ôeßðòíWþ°Ê÷|‡Õ¾~ïk3ã `3¹Ý”5Ö°À¨S#P§·ÕÔµ’øu?̬Ý`XŒæ)Ü¢ËÙ¹åHªÿSÉ^·ŽJqCG˜iß×~íצבݖHJ¿+;…¬Cj'`nY!Ð�Ž+¹çw~'}ƒ?¥¿hþ�Æ¿ó^¦¿õòzNæåÆù÷ë¦ËÓw{6}¿|»¥w¸óñ3.GŒÿ÷?¹œ"ü¼Ïû¼v41ù³?û³ÄþGÀŸƒüOÂ6‘<�ò�ñ¹ßôýÚc:§çã#üÃqèüÓš¯óïæ:ßnñã^K°ÞÀcø›-Ÿ¦ü‘¦“án¿ÿ÷ÿþ_ú[.7ñr7~Ý —vpîžvÓÑ}Ÿ?íð>  µħÊ~ög6ÕaÌŸºýÏ!Uà‡6ÖI€l9ÀßYùÇž¯Ç ü³�?¤0ê1àÏ5�`_ìÀíÄ´ÿ }�8ÿôc ÄŸŽøcÿì¤õl&ƸbÌüç߆h�ÙXl)ÀµSü%–‹5õéàÜ{Ïwö¸ŠŠÿã#½ù·@ù•_ù•tC  Óÿç7öUlNn€Šá!Ôø®?À�d´E;Âøº°Í©Õ…¥ Ös݆÷„¦R§‘õÂU3d,@·ŽÂµ]\›eðsS ß×CÝÍ —zp9·òüÍßüMq(Ü»Gþ·ÞzkúÀ&ßÙãªn:)B„y´oÒéT.Â@•åÃ!\Âßy¹²›¯ûp“�ëóðí¯ó_¾¸Ëí=”Í�@|©÷ã?þãÛ—bò磟ŒêÌõ¡áz°N ¢žÌµ}Û/_¢-6ú[kºõö ¿ð Ó F|nŒ�Œ’–K<øài.$‰ã’Sî=À²ðȼËÝ\�Æ×€Ñ¬ÈÛ†ºÓ>´î3d:†!_¾‡52nUbmƒÛ†ÐàxÇÜžDþø˜¿ó…Ž{x¿\‡ŽÐñÝ Üº?Ùærqû­98ÿ:¸µ¹@ß‘ë{€NÉ ˆÅ<:`åb nÌáBŠNô¤÷‹¦RFITe¾³çÛsL=ù�7_Ì…&Ï—oùqšˆÕpÒaÈ›ÿò#|�–óf4¦³2]áòîÍ£´…ŽNZ¾)HGç"‘où–oIù#\¢¡nУâ#XðCÕ§ž\Æ7ÿ0|žû�o|c*�ÅQ®é„”p©?eGƒzÎî�Ø�/Ó-®KËëbæô>EFþ¾`ÄíCÝ tì^|Çw|Gšª}ï÷~o2uD»‰†6sq muþðÏÐîòºQoÚC»¢ù{ô{‰åàW¸Ø»¼¬éå{´¸\‹ûž»ykÆì™oõt¬lÓ�|-W¿¦2z2:%Wmq #9�‹N˜èÈt Ê`Ä|«>À ÓŒ€t8:é°ä(9«ò€Ô�…²0tDîÞcýšŽp„šÂ7|Ã7$á@~Ô‰z“?m¦\Â1luFÍ'ÞõGÇ7Xâ=�€‹úò#òÆÐn>UîüS ~XHu{IC}È?õF� pS�áFÞhX—ˆ–0v<übä‡Gæ%m³´ÀnÃå£|«Ð|¥N¼\Êu½ÐìrAç<ÆÅË)@þrP‰ùh¥c .÷º´3Oïg„÷â: ê0Ó êø÷}ß÷¥NE§CàpÍõ”©�‰òQ3™zЉɋk¼ß*�ˆŒâ¬U`<¸ðÓI%�i€âü#0eJ„j,kõž‹9éÔäÁçÊH�!­çþ<ÇÛ€ù�ˆ'å´§½èE)=Û¨hC”�`ˆ_;¦-”…@!OTjÔ~À|Çw$~¡aÀ/´#4'â¸�{1ð^�‡ y2ÍB@³ƒ/L�°Ð²˜ øDí&ÿ?ù“?Iü¡<ñä�¶Ã4Áw'òaOAàõé6â»>uv·„œžâò)m�pe_EˆX†šÍ�‚‹jÎv!4øaé^õªW¥GÇåöî¿çß®£ŸØÂÐYù:�À0é°Ü»Çgµéœ.›NÍt,î:t(�ÐP&À¢™`ȇ8oóÑé]øBÞ6oyË[’¦A8ih Ó€�A‹@{@`¢ A0r üâ‹@ÑÐ^¶a#†|™ß³¦€�·L#n¹å–ôÌmâŠs¦ ”‹@d}à³>ë³Ú tÄ—éÚBÍ‚t4.‚Æ‘’/Ãç|Îç$�Á”¬“1O�O'šº„m ÀÃËó"Ý /ÉŸû(€—/Üæ vÜ’ûz}„²2�»üQAé,�5Few"ê¸X°B]F­÷Í»Ä!HËÈ ÈéÔ¾ìÓ�Q�Å@žÉ‹[Šãþ>ùÄ©eÄoþQ†ùÃ� �± Ã@—�FôÈõ _ƒÐ4h"ì¨p+0Ú*>i,Ô ƒ/!ÏQë¡Ý�´5Öo¬ö3zÃoô¢aªd_Ð(×õå°ÖñU_õU«>pB™ñ€”óGw¬@U|YñsV€Ö³ìFÓâgTcÅCgåË5a lýxNÎ#�ˆgÖ<:²çŽö‘—Ësì”,¤ó§ÂÈÁÓ©\´0ù0²ÆÕq×/‚Š6°¯îz0ÊS>eÄÛ€Ù8€ õ>^î|ã—‚Ñ8Oá|Yxc�ÐV·Ñií"TŠ6ùR½Vã|™ZÜ}÷݉P3í@ t2ÔC´;No¨×Þð†‚GÔÞ1`ZG»·‚Ù‹€qDe$³ºÙï»Ãå a�F^lëÑ!1¨�t8 IÉ‹†*ì|aë‡C«Ë¬ž»#Ò‘cçm%KŽ?øIZÖ,à" Ÿèö¨ËtÅ‚„ú¢¥`qû/ÿا/�ùº}�Õf€Ï¶+`üL;à;ñ ,a6ñÜ�?'=Ú튆z™‡Ô¹—ez@úgè$!|aý…Êf Dû©Ó(¦2hO¼ß¸ á²bÆÅ¿%Ä\ìh¼è8R—y‘€Ó# £³Uä<-ûÉÐÑaXð‚ÖÀÈt>€’>“e-�8�†tHƒðy$Œé)�Œ!ïNê2qݾ:Ì"Yåãy{æï„öÄ�}’†�’xì54 ÒÐJÛš¬]�7@”¬Äó 3Ì!­Y˜§Që ±>‰X?ñ3dh›N|5=._*6�_ýêW'm†Ñ !¨/ü&ÿoÿöoOë91�Üïüºi69}Ÿ·„`Äcž ðyÁl;ÑY{Ô^:1‹qŒŒâ6Œ8¹átaü8æK_úÒ6°LëÑÜÏv_¯u F)�†qteÕߣ«ÓᲪïÅ<ž $ü6´ÙóáTñh0óuk¤u{¬Áí?\DZ¦d~ŒOø„OH‹­Äab9çC.üå0#=[¯iNH²N�0 -¬«PFäí…¹Ô?äÂá¨þmº t«‘¼\ÒzIm@Aa…`£.ôh€.òb›�ÎHçcTBpàwÇf$õÉ9ÂmFÌá‰geþÉ_‘‰g« C8B�Îèt¸ŒzQ¨PN´EÒ3ÇuGF*ÒBÇ(OGçÙB?£ ….»1_ü쮈´™…LÒÒ& ݾ*ä×hUx MŒˆ� Æ{„Ñ;¸ ØAë3(ý– p9ýFä�¦ëW½²åõ˧_üf•Ó¯ßhÉÍ&¯†5ã@£lâ ó²QEnt~eëår7JèWnÙòúåÓ/~³ÊéW�ÍŒo4€ÍävSVÃ�Šq Ñ*öBÊTÇ#UZh¥ï7²»\ç[–Þérw£òÉóÍŸ7±œ•uþ¿Üy%*öÜh{!Mul&ª¦ 5£äLÏHÓQJT�Ã~1]ÎZósºõŽìæ×Fçç|sw³ÊÉËíñܱ?÷ ßô¨*iø0ÂÌ)ø7ý�4Ž$ŒÜŸÛý84Ìq!h4ÞªiæBdZ#Ì•’®GÂ’ä]ÉœO?M ,]ׂJFlV9ýªS¦¢¡så�ûr¿lG_% ˜YÑ]†™-†Þ˜†Uæ@ê«¡¿ºÏÆ>]™úWQˆŒB‚.ëÿÞIT†k#ªˆ:ÕHJv¹ý4�õVn³ÊéWÏõÖCéWè³*'jî×ýŠßÔø*kf`#6µK4…­—Að1 ÷c ÜʘQk‘)Ño¦ÁÀEÝ,³SGÅ5�|FU��*7o‡Û·QùwËÇånVy£ª}•>«ò£í¤ ¸Ïw«êÐ뤘ü•C McÃÀ�Õå¤|•”/‹àZD!P‰6�Z0 ~»fXb¢.à<®[xïÕ%“Ô—›'uùãV£ ›&ÛÊlÕDÙ£Ž ÊÝ~ñ‘~Ú˜¿´ýâËä‘—Ùé™ûóz.Õ\¯)3Â÷£éß«Žƒ¤íGÛ!ž>ÊûL@÷úTkÎO¿]˜��½‡>+?ý× ‚ßý\Ñ£5#b, ¬f†]k üŠ_ÐwýÕí­ÿ KoÕÓÓòï”;%�°¡ N;©ìI ´XºJl›Ë€t#Êé–G?ðvK·Ùá!DÖSgõƒõ$ï–6eÚ>ëRKX©úLQ4âcÏé†á³º¡ø¨¾ˆô¨2Š€ûµû¹].%J…»5$†�ìZp*Ñ I¶á§ÆýѶ|É»«åÎ; C# _› €o+ocl XÜUªžçeù ŸRšË,a¶ÐY(X ,�RŒL#l"cÍl ÀÂÁ#:4Ž‹àÏ€óo܆Å÷U €ØO¶<´îßÎw¤¦ D†À$36Žè¦³€¹i=@®Áozh-0ð7¦áÀz9`°âº�Z0 Ñm-: €Ø××[§u§¯‚€!€ÕŒ±”„©Äf¼™Gÿ¨%8�Ýu3©É á€8@ÿøŸzD·@µ·µ ˆÀýÚé�îÈL�7saÀ…©¸1ñ–º0™zcù=ú›Þi스1 ÖÍ÷QØ€v¿d`²µ ð³…„Ó8�uWj½ŒT°øÑZt; ôøì03Ú ·kµ?Σql$ ÞØ/Ý7 ô|ü‡Žtm3Ê@*1RÐæÂy�“¢‰Œ†‘V÷;�ü1}ão8°‘ ?æÖ×þzüŽsÚ�¬Óšó¹hi4ð . Øaf,tý¡kÀ³pŸ¤,÷Õpû£ë4¸º¾ýçCFð;rÚ 31ÆY γÁn ÇgE·Óæ~žÓp`#8k?®û¨ýñ™¾ëp×�çJ˜‘ŠkDì¸|îg\›˜‡Ã·áÀz9�×Ïx|ŽÀw8å'F*S�*#)€ŒAÑïçN.a�i80lÔ¹K¹„ÅpûS�ª~*S)�*ÔY$ÆQ_{‚Û),D7Þ†CåÀ*p·JŠaÑ?Òsÿ�¸P9�W2L ò(?7ÀœhÜQp`Àó Ti´ÏëÆså@§J§Š_¨)t#m �Uz7°°VKSW†×’ÙM¥{r Î}ñÿLMÎKS‚KKIEND®B`‚ic04üARGB$ƒUG„w„ÿ„ƒx„ÿþ€‚x…ÿþz�x†ÿýQ�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�x‡ÿw�w‡ÿv�‡.•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒªØØ�ÙÍ®±€‚¬‚ÚÅǼ»Äš�¬€ÛÎr5¸€Û«� ®Ýݼ/…ÜÝÜ«� ®ÞÞÝ… $\ÉÞÞ®�°€àÞh„ÏÜàß°�³�áÉÙ�á°� ³âã«®¿¯¾Íãâ²� ³ää|zt…vËäã²� µ¿£¬©�ž­›ªÁ²� µ¶”‰˜ˆ•pŽx«´� ¶åçéëììêéçå¶�•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒªØØ�ÙÍ®±€‚¬‚Ú›»¼»Äš�¬€ÛÔ¦u€۫� ®ÝÝŠz„Œ­ÜÝÜ«� ®ÞÞÝ®ˆh¸ÞÞ®�°€àÞo©ÐÜàß°�³�á­Ù�á°� ³âã«®¿¯¾Íãâ²� ³ää|zt…vËäã²� µ¿£¬©�ž­›ªÁ²� µ¶”‰˜ˆ•pŽx«´� ¶åçéëììêéçå¶�•ƒ«š…©Ô‚ÕÃ�„ªÖ‚×Ê·�ƒªØØ�ÙÍ®±€‚¬‚Ú›»¼»Äš�¬€ÛÔ¦u€۫� ®ÝÝŠz„Œ­ÜÝÜ«� ®ÞÞÝ®ˆh¸ÞÞ®�°€àÞo©ÐÜàß°�³�á­Ù�á°� ³âã«®¿¯¾Íãâ²� ³ää|zt…vËäã²� µ¿£¬©�ž­›ªÁ²� µ¶”‰˜ˆ•pŽx«´� ¶åçéëììêéçå¶�ic14øÎ‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATxì½ —#·‘®ÍÚ{•Ô’eöܱÇc�Ï÷ÿÿÎÏrÇI–zï®}¹ïÌ—De’¬*ÖÂbà0€@ €ŒLæ@"‘£ wo� …»oµZ, < è¾U7®Çq*ë(îÑ›÷Øv5]( ”Êe�²À=Y €{0|�þïÁèÕ䣲@ý‡Õ鬃¹' ”pdž¯×¼š{´¨ÿÒ£=µu`wd��z”v3K/á&Tknv ªözYàJÏþk­Àz]u´W³@Í\Í^SÒþSæ¨LYà.,p%‡y ÿÑ»8¦j£,p/¨€̾ÀMäJ7¥Ôäuë%•, ¬�®2 0([³kwÝÔ7( 1H›½"øÏô¡ò!~Û�Ê—ÖÙ-˜·ùÖ6my›•К¬òëd�rfœí+€ðœ¶ö>e}ü>žõ- ¬›.�¶ �y9ÝÚ&— ¥§ê”C0eŽÊ3ï1X fº³xEð7XCÑä´©y¦æCÍë’½ù>™,_é²Àc·À ë`sÞéLÛ4ù¾ˆÝ²¬ó-~­ +ÔÏc³@ÍôŸQt.5xÃëK›×Ò,ßWær¨r9m^ѲÀºXÀ€ìãÍyÒÎ÷¥Íƒžw²™Ç‹|àM•ÕL@k¢Ê? ”À?]!�̾4<ó�¢ì®Ø–¡^[f>”€ŒÃPÚåEË�Ý-8ç¼Óб ùðù?e9Ê ™7æ\þE&îõ8à²qгºX{`øû¬¶@L>Ç êN›f9§smÀ' Ñqiý–ÖÛÂÉ-p;oàçÏyþ_mÞN@R{)I�I¨™€‰)*ñ,°ö@:‡`³ržt3�; Íé¡:–qó¨ûT´,°Ž˜aÀyh øðIóß"�©eÄžÔŸç  #B9¶DÑU·@9ýg02é6À3Ý|ñâÅÖ“'O¶ÎÏÏ¡›š.d‘%Ñé E'e�nMÒæ‰šO²BY`í, °�¯~*Ý•]˜Ÿ�ŽŽó¡èÿå¤¡Ö ÍQÙK!dË ¸d—b¬ Ê¸|Ò¸)|£È4>|òŸ?¾õõ×_ï|÷Ýw;OŸ>ÝVÜ:;;Û$îP9‘6…oàïèð�§# îÓ8W¿e�õ°€�™çï—Ò~¨þ_çŸ>}:=888ýüùó™Òg21;m>;üÇì @û}@®œ€>ëoå,°Ö^üœ3Fy úð�ÞÔˆûÛo¿Ý%j&`o[aSÁN€À?;9M_ ü¦ðúx.+Zx,è€}êp̃žžž†C�yúoœé/w¬¿Ü‰fNvwwO¥àL3}(ÿלÏÿmƒ¾ (Ñ|%#À£^È©8ñ‘×oY`u,°¶ÜžÓdžo ˆ8={ñ.¥ðÛ{{{;Ïž={òòå˧ºíújfS7, lü;yôìŽ4H:SÒ.s¾hYà1Y -3Л¯ÿA8®«|€¯Ê™8ÕÔÿ�£Àÿ³Àÿýßÿþ÷÷ýë_ßÿïÿþï¾þ“ÌlÉ8Q�ü?6ø›Nšìv ¨ã4E´Ïÿµœ¬Qaå,PÀø̉k�×yh޾qLÀ_å[zöÿô׿þµÖ~÷ÏZ øg=øN7°ptŸr�xåC÷¥3}Áò}eËæ©ïËVYúÊ èZž¤ èfø³ eä;Ù¨œóâóìÿ@àNÀW_}õN qRµ�7oޜ˸PÙ±êðx€‹' ÿ¯•�X ¬»ÐþÙ}3ð sÞ ?DqjÀV+Z¸‚Z oóY•Áß¼ž�ñ·ø;zðB@ÿ�œ€¯ôÝÔ�ÇZ¯óAkX0¸!þF·À*û¨€\6Ï ˜Èª?õ8`b�J<$ ¬»À¹h�ó þCÔÎ@Ìà0ú×�'^í»ë“ÌM³BYà1[ ƒ¿�?Ñøß)Ïÿr$à'l ü÷ôßx.ÐßÐÁÏzðù�üãgÉmho€ÏZ ðYO6õ–@þŸ·f´ÐþÉf9èp½ZØZ´òÂkéà‘7Ö÷Ÿ¶Ë2u¹AßtòÀ3~À ær3M«•- ”æZÀ oAò9¸¼¡üÿ €¯GÏ´&à[½¦Ë‚ÀM½ªûÕû÷ï_kAàëÿ÷­G¼IÀ®�þ¯›º)ò^@ÚÁ�É΀ËLC†©/–wYѲÀ½Y`íþ„�µM³ñÍË”tŽÿ) ð{ “çÙdj.7Sé²@Yà:0~BÑã4TÿÃøï‰�À=ŽÿêS=øV囚ЄÀ3ÖÄš9Gzà}X(ñ…÷œß¨D:‡)À熠>Lñ²p¥Ëwi�µsã¶VŠÍóŸº�ü§f:'Àõ›¦*[( \Å-N:Ÿ)龨µÃzžóCŸÉØTú™f¾ã-Õã1À¡öîx§5ûÝA8-@;ß÷ßvMÎ�@ˆ>©í\v…²À�[`Ý€lðüçÎiËôûè–þÏ1 áxéJ‹RÝ-¹²ÀÚ[ ÅOç¡]g±ÓøG™˜¯ ˆ©|­ ø¨GŸ´OÀ'=ÂÛЦAlk´Xðº6Æ ú3O@ŸÎ©Ÿ“üu«ze�›X €é?kþã’žq(‡ �þ¿ÉI©ºe�²Àâ0ŽvÀo ¨µt2à.~ÀH�žè1À+- üÝŸþô§‘èK-|Í><�` ï»'X-4—g>õ‡B9Cæ)þ]Y €±¥óŸ˜´óN·t ü%{þóš‘n4ü¯ïêüU;e�µ¶€ÁßFÈN¼TΈ›G#^ýÓ#=xòJ‹Y Hú%?ú�~úé§Cö Põ�n=@;Rwž?: œWr*Ào�)Ùr¦ìU™;¶@9Ã7ŠÏ©˜,ÔMæZ�†»Q%e�²À< ø‘sê|甃·8ï1 �‚^i6à©€o5#ÀšFþ‡òÞÉIØÇP@Éh7ù¶Œ:žEp>ÓI½r²Y*}—(à‹µ[ §dÈ È²ñ@7�©=º ~"~i¦R˰€í» ]�Q‡Áï1Û¬còqCsTæþ© ÞB·ÿ®ÒÏys@‹?èÛÿøÇ?~ïB¯~þðáÃg½.¸qƒ5´ÕÎÀ#”0¶CýÞ“Ê6|KeéÉ£Ýljäo+- ,ÁµuÎC;¿D‘s�ƈ×sݱÊ/kôVà«_ýêW¿U½ ÑÚ$èµ¼þë_ÿÊÌ`íÿ?ÍÈ·<ø`'Ó…!'€â�Wßja ­UôN,PÀl3ûÏ�ÿèNOQÝ3¦ff«­Ò²@Yà6-ø Žü[î"£™€ *¼¢ k4ðBíQ®}U~À§j�k�©ºôKý�âµJ*_X–ʘoI;HN�~—�Yýg]6_cI”Ê [@˜²à"iã£ù¦­BäˆLï».2ÈwuP q”þFÏþŸ°6@NÀKê釚x§úû’ñ&A-@;Ÿ©Ó4éPkl‰¢Âå,v î3©nñº˜ÚÇ#5t~iÚP`s¯ f˜P`Ÿ-ØûZñÿy½Èš€÷’= Bhƒ´Ó9o9¨ùõ8 [¥Òwb�r†Í<w‰Ü;¸w7¤áÞVIYà‘[ÀÿÀ{'Àæp=òÔÍÑ2ðÿ¤[ÕÂш5’ã^ùL¼9O‘Ó>Ÿô(àÓïÿûÏ8ûûûŸYPklÕ¢Ýå<ô3Tý+ ”ð]Àì´MÏepOœË´Ô: C:™èäh€iú-ôÈYx¦À·bG íðüÝ»w^À‡„úžé÷ $ZõZMæ†PŸëq@¶J¥¯l�r®l²Þ üaçýi{+³,P¶@ ÌÎCsDCηé¶@Ý‘2FðÎC~ë`f@iþß8Ü37Ù5P�¾EVé'¬ Ð[{»øù矴> oŸ€öA>¯ Pvú ýÈ é—ú0Å›h¨DY`ŽÊ˜c Š'jý'éê•HY ,°€À^0®¥¹*eC9ÊÐÕFë†ïÏ3]}±&à©Ö0Àš€oŸ‹¡}”n÷ @¥C3?§)ÿÒaJ.ë çDýžä/‹§,Ðo�rúírëÜ|Cºõƪ�+[à¾ÏϺßϱÿ,Pžc{‚]Ÿt_@¿#39æ:8*‹µ’gÄëº6xEð™ô_ðíÖøÛGGGûì §`ÿŠûÌ¡C3’åÊ À®l�r®l²ªP( Ü…XÀ–à´in¿â)‡žëår׳^¨#{°Ïøò~Àc‚ë)3ÊÇ=T�žém€o¿ÿþûCµç}ÞèÁ·ýë_Ù' ïÙ~¿g-Å�~–€`È©ÝzðÅv•ZÀå,`¤«ŠpéP( ÜÜü—èN)¤ÌåN›"è´éTee¬ÊèÀ².#�ÐTæ‚Ø' ûvûìj=Às­ˆoÈ 8Ôšö ho Îà{šr:N#ã`ÙÈ«OåØ2EçZ €¹&ºšÀÐÍâjZJº,P°a9SÊ2HS6­§�¢ÃzìX·ÿËèuÚ²â´ì¨¢Í èÙ?tOŽÀWÚ4èzØ'@üJzŸƒ½�»/?žn@ÁØÀQ°³ÌžëÃåô¨X—-PÀe›,…£ÿàÔ i)JWX ö¨°¸º½ „‹ÑlÉöxÕO½>YøÖé´)=¡NÍÇ °12ÔÃÈí( ò´Áç�䞉nk&!ö ЀOz=ðó¿üË¿°O¯j«€ý¼& ÚÑ��€yä†fÐUNV¨°°ÊXØT%X( Ü•Ý ¸³ÚE–Í1óB`Æ��ð' àÛ°Nx„¾~u2›Žô ÖhQàáŸÿüç‹o¾ùæÙ‡Þê±À›ÿüÏÿôš÷ÈÀÝçdžåf9ÑE~Ô§š °…‹öZ €^³³,P¸o ª}`Û×/dœ†¶Ñ2™fð7߀Û7ø»겎Gbê^N€Ä7Ÿ³&€oðX@Û<{ýúu¬ ÐwŽ${�odàÏé® Aì$DFÇ_N@¶N¥§,PÀ”9*S( ¬Š÷ Â{úï4ÔùH4?®uD„·<�uõ9�JŠ}¨×Í\H~OëXÀ>#½x(ÇÀß0XCÛtÎSÕ>m�ÌÜËÔõk&à²mŠÓY €ºz-àgoa1×Þ·}}˜çš~ ëþ@s¤~[6¤ÓÔào^ÖÓçHŽ‘v¬  \mî¨Î3¥·cä||üY¯ Æšô±&€oh¯€�+î@u ßÎøqœ¦?5€Å*LY €)sT¦,PxˆÄãLégˣܑr§¡C}'À‘rB«/×ËúU�Wy$÷X-(d·àW¬ ø·û·‘>Ó·ÞêqÀ›ÿùŸÿñš€¶“9OšÈçƒ ðÙ pÊrš¾—`Ë ”PBY ,ð`-àfð%Ýòè<¼«Æö 3˜·iôw£û)‡!ëq_é’Ò<Ø�²Q�¦þ¿Õšî²&@q�ºÚ# ¯ ¸ ìpÄrpy~§Û:–�ú:†r²%×<]Àš_uøe�‡n€×Àê44òæ9mŠœËrÒèulóýC‘±>œ€6¸‰O™ü'ïõkR`Wû¼TäÓÂÚ'àh`M@Ru)™A�4mÙ ¦T²<§9Žr°N…ñôTÙáñY€›U…²Àc´×v ¸¾Þ¡};˜?dë„:f'ÀÀoj×kô²ÄÐ5~0ºP¶T?Öh·À}= ØÿÃþð™º=k¬rÞ£Í[ŽY¼Ï˜�|9¶Fщj`bŠJ”Ê«l>ç ü9o9óœ7˜¸¡lìYä¬Ï²®;‡Ò9fXÈ&CÏŸ={ö­€Ã¿üå/¬ xÿþ=kÞvkíx«@”ºŽJFp¾ýœð<'€Êá@è8j&`l˵ý-`mO}xYàqX@6œ¡„¾ü¼£ÎàŸgrÌ8o}¹Mó’.:´Õåy,À>ߪNÞ' ]0>+ë§}³CN¦äÕ~9ýv] n9kqšë Ë�Ó€n Ä>RÊژ˜¢ü=`}}@«‡~uSÿÙ`T¿­² 9”k‹€ÝX€P·&Àß €=ÚMÞå­LŸ`땪p’Ê K¬ßO9ôœs£©P( ,fó¢´ÕÚ�ÌÙÈi€ŸGù1€ÛðZ€V—ó üÑ È£ ʤ‡}¶ôV@ŒüÙ'€5ÿüÏÿ<ùv€‚}í°ÉÆD3Bö,ÖçPŽ|9ÙRkš.`MO|vY`Õ-¨·Ðkð|qÜí�¿e 9fg€þJÌý÷9•¿xúô©¶ øöHûœ‹>Õ>ïô퀷ÿýßÿ=zûö-`>4*0 ç=$až€P‘>©/·cÐq_ê÷�Y €vBª;e�²Àò,Îæ¸¨fƒ·�ÏP}}uÌ_G[î*njà¹^ üöåË—l¼#gà)û€Éì  ïÛt‡0´‡œ€KuÕ^9aÒõø)`=ÎseYàÑZ@î\ømèãµ2Îü=@žvÐa ·,üÌëë�e;JçbŸQ¾ ÈšîðÝŧÈuk>*y@¾ ~]uYæõ9vè‹Ó1;¡þOòYI¥—ʸ£óy•Ïui¥š)ûÝíézh÷Îÿ¬>QÞF[Ìü6ßÝ}з#àözë4Íà�NËZ¦];Œ´‰!+àpù`�TmÆš€“““}Âïÿ{ö ¸Ð>Ýš€�Z�-ZéëZ €ëZ®§^{è)VY ,pM ¶Öœž¥9‡œ6oˆ˜¡ù綯ú_Ïúö—š•>ÏðH€í‚_ê)Àw¿ú՝ީ«5ÏôàÝ›7oÞþ×ýk¡9ø/-öÍPŠ>ˇnÙ«|±Û£L•ð(OkTYàqZ7Ï;Â>ÀïãµzÐïv2p#?ÇEëiÛr^k 6åø~Ì~g, Ty¬ ЦA±&y- °û6 ¢KCNe¹¾“)BVÓ嬿y«^—ÖÖ€/`ÙÒlʦ9�y!¤ô98 %f'ê/2`}Pë̼9é˜�̦ê²€ü·•~¦}bMÀ§OŸŽ•ÿ¤²Ã¤�ƒé‹ˆ˜ŸÄ#ÙçØ(Ѷ+èøka �±â´€?�×í~ßM𺺪^Yસêõ7@Ñ—ãUûƒ|Ûù­3·3Ëhå\?·å6s;]:ÖH–™€è‡Äšµ#­`MÀ�¾°¯¶.ö�ŽŽöÓš€±ô¥á6ÿ¥dœês(Á('`l£Gõ[À£:�u0e�²€- ÄæÏ¢dd2(ç:Ögð‡˜)p:Ë÷¥ÝNKûd;žšÝà~½G�ú¿Jûœýõ×OôÑ w¬ @^�óðçå©ÚW¾�§±kÍ`�å¬ðÉ«®—ÊË·€Aٚɛ'Ì›r(È ­Càú}ÔúÚ²!>M¨Œ-ƒé kÎå‹Îí°÷úõ똅ÏóhM€ªN½ZHÞÁ�"¯ã.'À–YAZÀ ž´êrY ,0Û˜³¤ù™7”Œ‡Ùz2è{ÀtH/ü!½3ê0ÍÀ>þ€à~®öÁÿ§z<Ûkçà#9|;ÀklG%'i¹Ë èÌù\§k& [hÅÒ嬨 sw}r¾hY ,p;hþ{ùÿw' uœ7åHÜnGi³C ÷Pò‚ü†ÚÇ1¸8>>>Òš€Ãú§:ð>ú~ÀöŒ5­Áöy ´ÁÎB9­eV,_ÀŠ�°ênY ,p= dО§ í ÿV×Uœt#?+ µŸêlj¦aGùx@oœèóÁÝ·.¼&@�ÞS§Û' U�¤Gûæ·ÀТ@äí8]3¶â ÑrVèdUWËe�åXÀ@ÐöÅy­´ò‹8³Àß oŠÎ¾¾uå±&@"8Ì œË8Q¿ø¤ð¶ì½{÷ðgM@Þ' õnœï[0´(Õ×�ŒÚ¯5a‰Õø)`5ÎSõ²,PX’úÀ{HµÁ˜:mì«3Ë @×¼‘Ö‰¼ÛÏ|Òê S<Óÿ,þ#¡ôë´H0êÛÇšèÛ'@â“�Aœ´£r¹yPókM@¶Ê ¥Ëx '‹›K…Û³ÀºÛwHnÏâ�W3×Ò¬ëi–0Ï*>O-ø›ŸêÇš�öÃIŒ_Ð/µ÷uÖh kbA òûrGúðPR57‰î¾µ®Hy9¶Æ ÑrVèdUWËe�ûµ€Á–@]ži®;4` 7m�¶å“Ç P``Wù§ð4ê?Õ#�ÃW¯^�vߨÓbÀ÷¬ øûßÿ>zÿþ½A;7ˆOyWˆ,a–#�õ…¼Ž·Œíö`ËXò©ñ~ÉjK]Y ,pÏÈ>ïîò<�»ß¹ËÌ¢Y™üaÇ#�®Þ¯"jÀ©ò¬ ØÒwöäÄc­ 8–�×X­©ßyÓY‹-3UWv('À–y€´€[8)CÞý-4U*Ëe�{°€~¨é\n'žï P_ªn¾i+0Ä—œ€Ø'@k¶%ë5OXp;ôr󜟵(Ð2S³:îrÚù@òåÜÒ‰àÏžã-5³2j±E…û³À]ÛPÝŸnØòUþÏ­½ÉÛÈ´í’ífšË3�t½& žP&ÐÙõg`¤oé{‡¿ûÝïØ'€}´D€5 ® ÈâZ�OΊ¦ËXÑWÝ. ¬“2@l™a}€NžéÓ¾yWéK}ïEWžpºÕ�ûJ:ç[Ù.3Òÿ”¼Ú:ÕvÁß}÷݉Òç/^¼ØÓ·Þë“Âïøá¯ hUøS£ùF€2äPf‡!NœúR3�ï;[À}Ÿ�j¿,PXÈ€åÀ·�®VÈ jÚ–“§}âP˜Uæú-µc@Ý!ð§Ž�»íŸùÈ4!x’ÙÖ¢À‘€c¥ìͽ½½]íûÈ 8Ñš€Y¯ y^¡Kú†œ€hžg96Æ å<€“P]( ”îÏ3@4:8Ú¼ùèÉræ›ìû¨eZê¾µ´•ëÉã°è�{<_ŒÍ‚”Vó›;Zà¯GÇr¼O@ßøÖ pž²/ÆQ&ËPî46*' é>“åܧõpÛ³nd¸ÛÕµb�e_?ÀEoÙmç6‡tñs]Ò–ë£8mðqÏ£ÔC&ÅX '½­#/ë$ŸC.ËÇ�ù’÷#—¸ï«üLñBýØÔ>;Z à5ì0kM@n>§ þ6^}Ëø;£¾”`cÜ-àŒ^M–Ê×· ¸eŠ6x”LÍÏÔò¦¹ì*éymäòœ¦�Ö  ^†ú˜ù¤s¾Ña€o°&à§Ÿ~ºÐ#ú´U-ƒú¤JXJ¤.4Ëç<ér0‡rîØàÕ\Y ,p¿0øš.Ò›Ed‘\-›Óm–1ßyhNãЕƒó-µŒù9Ï|ÑMÍ*Ä·$0?ëäcŸÖ¨/òòš€éŽŒ�½åMšUð7ð#çt–qºœ€‰%î&QÀÝØ¹Z) ”€2¸^µ;®;«2€ì<Ù¶Üy¨g  °§š5Š©LËoó–øÇšµзÎë—ëv”a?�bM€ô óÏŽ´YЩ(ßØÑ·>èUÁ�?þø#2hg5}@æQ‡hg ëpAÇ\ mŒ[¢åÜ’aKmY ,pÿ¸)0¼× ÔÍNzfé3àC©ÇÛ™Gžú}ÑÎ��×t‘¾#«Èš€=䕿qÀ†Ú;Uš� }K`ëéÓ§�ZxòéÓ'¯˜v×ù>ÅðýX€<Á²ž0�Bµ]N@Xâv~ʸ»–Ö²@Yà�X ¸õнN í»~N÷é3àSæ´):ˆû¾ú7àÅN�Ò&ðA¾È_ˆ·¡6ãq�žð˜`_üvŸ€ üu‰MƒŸ1©cð7�Ê´¯¾ éœj 2W³@9W³×Ò¤uM/M×cT´nöYµã]§ûñ"禕Éö¡Œ¼erºï¿kÀ§Ìu ~Ï ôÕ�ţݑ€ÉšÉŽ=ÒñLàøøøDû)9ÒÓ�ykfuÇ�²L9Ùw�.àŒ\M”Ê«gƒ/='�óW=ê L£šÓ³ô¹ÌÎ@¦(™åÐŽ�·iz…~3#ÀÛ/\@íp?þ|Wk>²WßèÖXÔ´o”“y¤uÊ °õpF®&Êe�Õ´@l0^Æd]€rÎgý™ŸÁ?N».: þðZàoó®×RÉmiQ`¬ PûàœS_é����m­ ˆ}º5}ßÈ`Ÿ›{BcðgÖ¡œ€l�;L—p‡Æ®¦Êe�Õ³`ÜÆë:ˆ^J£û±¬y‹8èÍàO]x× óõ�¦È—ÑÇA¨™ÍMñ.�å(°&à¸k‡aåt'2Eÿ>G�zð3�Šj·Ö„%nþSÀÍmøã麌KjæÁªáØ+¬�nû|·ÀE{-oÈÚËê[x<ûæy÷HÏ¿Gzè=Ò ø˜‚j?‡Ó™ºÝ!|Fÿ–s:S§­Ã}Â6Ü«®?@y-pSÇ>Á錭‚©+=ã÷�޼&àB�e£-íÀ#Ä®ÚYêfð·3:Õ~9W±î€ìää”»,P( < ^4§MÝÁ6oþ,J�6Ð ð“ÖHw¤ÇÝáàÃÓJø¶J”Álõ¹Ï—*Ì‘u½–ZO¿åå¼ÓÙ°®!J" 5íÏ·^t<‘ ÖÄÒm¼-çèÓ»wï>þüóÏ8¨´ar‚óãÜåßr.ÛäV9åܪyKyY ,°L ÌøYeC}0X›Z�à @)'þÌhtlÑ .'ã4:rÈyËdšesšzÈ,ïtKgÉeYœ€ÜÊfÉÊØz¢ýèî"Ó|8€ÂM9HåBNèï·¦�0«‘qY9óm´4‰é«xijKQY ,P¸ rESZ"}“`ð´€?;f<ж,u‰ð[=}ýʲԱ¾\·M·uÈ·<ër?œ·ýu½¾~ùx ”;ðbù›ì¸£2†ÿúràÄðûûû§š)8P¹ŸPæ¨dç3u´œ€l�[L—p‹Æ]%ÕÜ*”ŠÚëqXµý6ÈeŠLÖë´©ËÉøÜ.Ž€�5×qÛ¹Ì:(³ËA)78·õ\nydÛ:9ß—pOúìrë¢_W{¬îuSÀ`á ‚­j‡ªÐ`Ã��NµF‚M‚°×�Ölòø¤y$@ñ¬€cÐàÓx¦!§>Õš€>‹Íá•0Ç@U\( ¬–:€ºÔió¡9� yæçʵIÀle(‡§ÑðD�+äºæ™ÈÔ3…O>ëwÚ|Ëšf><óg¥]'ëvÛîeèèë?êÛŸ^¿~=´O€›ÃÀ_Œ‚×h€˜BÐ~AÌä} ø™vjƒÄ¡ó�r²å®˜.àŠ+ñ²@Y`5,æà¼A’2§‡Ê„hŒþ æµÔ‚æ;Ÿi.Ëm"ã|N›—é¬t[F¾/ô,dtÔsûH#K‡ ÷…4ýï¢Ä¶¼OÀ ɳO@¶ìdÐæÂ'Ò�÷ 5¨"Ñ…œ†å kð§Ìå™/YÖ°O_$HìâPñ€:*�5ZÈ&A¼x¤5Z0Yõ(#‘B›ÇÀ±caÑ,WN€­rZÀŒU¢e�²ÀjYÐrpÚ Š”9Ýal‡žÌ£®ón7Ó¶ ù6˜·LŠ®6Ò¢×.Ðò8>î¾¾y†€z)l©ÞS­ øžÚÂA )•zV O þüù“Þ Øúå—_X˜gGÖ~k˜!'€:ÖC§éC- Ä:3B93ŒSEe�²Àã°@F—@~Ž HÌN€y¦ÔiÓæ™öY޲¡�Ëœ^&EWŽô°‡Çy€�cϲ¤á™oj©âÛ“5âó¶`,•ççr 6´?À<Ö(¶kèŽÃÄÍ5¯5 ù-'À–X€–°€‘J¤,PX= N„LÛ4ù¾À†¦ÖcЇRÏy§3�Ưñƒ··lŠnGtÓßÇÁ1ã pÜmt=Ö ä~uzXð÷T2lÄšv ¼üEΔ îÖxŸxCµ—û€é¸ôËoèï²å|±ËÌT93Íóp õz8�y€=)û,÷¤·n[¿ûîëÚ¦Í3ÐÑ'G×w?3Í2mšz–µŽ«R÷“zN_‡öÕ�×FÚ¡Ï€?Áõ"ÓýÀËÇE»ñ8  ±&@i>„. Õáù¿Gû±&@�Ž)×z€mÅ#vVÔ#�|Á9 uT2�lo†ÈL�þX´~çY €yªò²@Y`¥- 9tà gà‡G€sD> 5Jp¾/=?®Û¡¿/˜ÚW^æ;o6È<§sß°‡m¯ °=»G`Ë3ó7�œÄ¶6º6.^¼xÁš€ÏZð©ûvÀذӀo*Ú0öVÆ\ƒ¿ YAk­�|9†)vY ,ðx,`0ƒf 3hÐM9rÒÈx¤ÍkeÌï£QiÁÚjCæ9=‹æ²œF/ùûx¹<§‘õqÛ û ð¡8¢< P>fP£x®Ç,”Ì…¨÷  ¬�bê€L~� G™ƒç‹6( 1HeËe�Çe€Šu¨rÚàe §ÌÀOÚàçrçÑ›y9Oº/X½³B.wzŠÌ,9—g™ÌëKÓO³m…v$l¯®œgÌðÙD¾ ÈwµóÁSåIÇ>Z è} þQF¹"¡�"cšZ޼ÓÔ¯0`�r sÛlÿùn»�‡¢ÝŽ÷¡Øýºý˜w¾ƒ«„«Ê_E÷�,Çàãpº~£Ö,O¿Ûˆœ�gÍ:¯’v¿]'ç�Ît(Mý¶l‘<2Žè°ÝHç`Sì�-•Ç+`]@Œü©/þ¾ò<ÿ?Uš/Æš€ï¿ÿþH� ÎY =6´o@{qÍÊgGÀ]C~Ê P›õJ ­“h9É•, ”–oƒäò5OkÔ=>€J$8�©A?S÷ÑõÈSîQ­Ë¡9MCyÊú‚åÝVŸ ¼¶<ç�δ/�õPîh~[Çå}|ì?Û-Ë»ÇÇ›–Å!Ðn€¼&øLéoT?>¬òeÙøìÉ“'›z5�5xbrò,€ÞF!äs°�4ý)'C¤P@2F%Ëe�åZÀ`·\­ÃÚt�ŸrÈ3h‘”è›#- 5ð#kSdIÏ¢QØóãz.¢­Y¡¯Ü¼Ls}Îç4<Çy|ËY[djtrûÚÎl3¬W ·”†Œ¯ ò9a‚ŠNYp±··k´6ð„Ï #؃›G™c^�åH#SN€­’h9É•, ”–gÝÜ—§ì šÚîÀfLä‰SÝWË@áåHœwº�Âë n£-£­Ya¨Ü}¥n›¶¾\×2æeÚ¦ûòð°t(ær;YôE ¿­2€]e_(²OëN´7À^€Êx5ðDŽÀ¡Êy}�ÀEäÙçûöâB¦Ï phµS3�-Êè qÛD×Üm7q«úW½ÿ·jœ5P>^>ô¡ò!¾ëÝåzmc úä3H‘gäO=Òô½�ô×<§3%ÝæÙaÞÿ«¯ÜÚ'kÞ,jûf÷EvæȨ?0G2|:ø³x²ù±Ê/Ø-Pù3í p,à\~Á±ÖlhF5>1ÀH¾o°¦­ƒ¿å%ë™,`=Ï{uY`iè7óLi,§ÉÇ�z†c �\%´òˆœ6HA þPÊ3ø“¦¿î³Ó9OßÚüP-7TÞö½•ë+7oEWŸÌ<^.'=Ñ�=)7µ¬Û&� D7´àB�¶ŸËöß øÏ™þ×:Ö ÇÖÁ›þ}Åí‹ægüys§‘ñEcJÈÀ Yú¡v\�òµ å¬åi¯ƒ. ,Çí=4çI;o­v÷Ý @…´hº7wb—ïÏ.Ëò¤á»�œ�”‘vÌàO9uˆ”þPê8Z‡Û¢ÈõË÷•Á£íY¡¯Ü¼!šõÉôñáÍâ·åΛb;§Û>`wÿ€ÂsEöØ—2Õ;ã1€ÎÁ UÿâíÛ·í>½_Ûà"qĈDò6¨/¢ÌžÚZ{' ])Êe�«[ µœ'íˆæ(ìIǯîÐÈ6]pd=æY„2dú‚ù–qêhÇ�ò þ8ä�ŸE)ë è˜Ü×!™¶|(oþEÿPü\–Ó®7KÆe™¶Î€í ­qx+€×_*²O€füÏN¾úê«C•Ÿ¨.¯žÈ8xÿþ},” †ää@É�=½1ÏåmÚ<èÚ‡rÖôàOZ¡,0dߨ畇œÀM_|�ë£2“È×åÏON"ê«0º5§{.£q­×P0è&¯�Áë"é¾Àu;¯o¾¶- %¢›º¦ÖO€ï‘¿©Û�æ4õÚ¼uej™Ì»Nšþµ¡å9?D©ï²œ6/Óœne)[¤ÜrPì-a¾xœ`î(ž+Ëš€OJ³&à�™?[Ÿé�Öàl*½!§€ )ǘ)�6œ¦Ü†Kž¸&(`bŠJ”Ê‹XÀÀP’&ž èOGÇŠP½Ç5:ûôiµ¼;îØèG~soo´ýÕW£í—/ÇôÙ³ÑöîîhGª‡ÁÑù?¦º×ÇË×w~Œ=_$3?ƒ?õМ6/ »r§[êz-ÑüÐ1¶|çMÑï´iæå´Ë¡‹Ê ×Ý.³/< À>:›Ìô_(~+þÙ³gÏ6õ½]&{çÿý ø´OÀÆ/¿üÂÌ@ž0è£ÞÀŸÁ¿M—C€¥ÊÛ¡~Ëe�,`@ƒFdä¬ô©€C�¾îУƒ�GGïÞ�NùetúúõèDñ\_|›ÔU;[ÏŸ�výëÑîo~tï›oF{r.ýGœþÖgPêë~!€ßý¶¬Ë)kÁßús�̳ŽL]>�—ˇÒóŽ+×˲óÒ‹–[®�šGœn)6…çØÊ ìáÇ爕–ï·ûðÝðËܨO>}út(À?E^—ÒÁ y•üŽÈfð7蛺 Z¡³@9u)”Ê Y` Ü:ÀSÿáèu­Ïþ�oÞŒ~úitü¿ÿ;:ùû߃žÉ)ð�ºýõ×£'øÃè©f xøËWc`€K3ñH :GÛ`r>§‘% ëþ€ Žå͇×þ®Íiô;Oº }e}¼¶^ÎÓ·Y¡-Ÿ•ÏeN›ÒƼ´Ë‡¨ûérë$߯\†Ý˜ØØïÔ™àí€X 2–¼zõê“v <’®smÌâ�#•ùu@.§YCRnªd[ [bÅiþó­ø¡ÜK÷»ý® @íIh똧šÖ'j86ùkÄðóÏ£Ãüctøã�£€.žw€ïÔçr¼@ûÆŽ6¤oSz6¡ 3Ṃͯí“󜻶”ùœRFÚÑN€eÂñèt k]Nç”ó‚ r> Ä®�|E�·¾ÿDëF~ôÿíoû¨2v äÒÉ ÏÉå2Ë<ò„|�À#�C±Ö¯–À¥Q¡,PXȵ3�ô‘žùðÐ�™Qÿ`®©ÿ ñÿ‘@]ˆº}'ª5#­ \üõ —oÃø3¿»'ã™núÈò8€Y€¡ {øÐI·Á<@&Oõ#Çñäh^K}Ü™Oº/dYÊÛ|_�Y<÷H¦-Ÿ•w™©ûæ¼ÛÈù¡´e¡Y&çÍ7mËàwez�¢x„E�̼=f± Öà ë-€�rx{À£þL¹\ þv¸ ìi» mÞüµ£å¬Ý)¯. ÜÜZš3Ÿô¼ÿÝ?Œ7þ[ŠP}Úm´%Ç|Ç�»´ÊXpªÿ™tœÉ`äÏÞ¾¾ÀIš™€s^€è ˆDÒØH»œúäÍÃ!pÞzɆ¨åZjyóçå-7‹ºßC2mù¬¼ËLÑ™û˜ù”ÍË#ã0K6—µiòD¿ô±S Ÿˆ÷Rà?Òú€]ñ.xðÍ7ß¼Ö8x„ž8Sš cüUtÉ ˜ðÔþÚΔÀeðŠuë~üË>÷óì™�`¨md ˜ñì_#ü#�ôYðw¤gþ;šöß`Ú_ ·5;ÀÍ…—¼¡Ž¡xÕW`FZô¥'¹ã×OÑ͈_¯^húÿâéÓÑ®F}§z+€Ù�ÜMÑãÀ±Ñ7c{,m9õàYòmçM©“ÓäÛЖ·yäûx­ž6ïãjùηåm9óL]wˆöÉõñrý¾ò–—ó¤S^ɸçymÀ¶ò8ìØè-€—š x*§€Ë ž�ŸË+G;(tä²óMuìቱî¡€u¿êøËs,h5 Єò®ÿ©Fðçr.ü#VA¸w@IDATÅM�â75�¿­rîÐŽž¯å®KäîÌ�{*H?ë ´l<àµA-ùo$Ôµ‹¼ƒ£}ƒoj~¦¹ÜitøØ YOæSÞæ]ÇtVù¬2׿*µ=\¯Í·ü¡r誃 ñ]/Ó>ÙÌsº¥èG€op]húÿ‰pŸí‚Ù9ðçÈN€�~õI.G@Æ#”0¶Cý–Ê=0hA13Mψ€�~Î5ÚÇÐî,£ �ö–ø[ln,¿#wj€ßÀ¥�½K?ºµÃK8¬ `MíátÐ@P�Þ¥rÊ 2оÐÇw�|œYÎü¬¯�—ËÛôuås?Z�}ùYò¹,§ûôÀ[Dæ:u³^§M­�¼"'‘ˆé¾€Ò\ZÄ þyôïtß,:í(Y¡€ºÊe�¹ÄÝÿn×?íÌ2:Ó £-Ñm ¤‰y€¥ÜDîÊÜ‘Éì Ÿ­ƒÏú€Ì([ K'm ½ÃËërømÈe¤£ÍÎa°S×móóø.¿.jož¾|l}²my›oëÌ+oåÍ·zs¾I+»±-‡*²õDØ¿«ó·ƒ}Kù¾HÍÏNÀZ;åpYÜrÐ|©…>Þ%¡5f\÷F¸Æ&[Ú¡÷Ùûù‡ @ŽçòX_°Ú_Ïü ùnÌ]:Gƒ?ÓÿÜ�‘uù¦ôk˜?º�s¡ÁÇô?΀g$ÿ�èuH·ÿ§6‚úiùÖe~ß±» ë¸-:ÔöUÛó±Ìª·ˆÌ¬ú7)kÛÈó@ÛCœójéùKvK¼|™å47Zòú|ã%màwÚô&‡³Òu˸åÓ×^Ü·Ü\©/ \Û-9Ÿ)éÈwà;¯1î¸m¤ŽïĦR:Ò2ï1à øGŠ|_ b7À)GúáÿWN÷õÉr”åtÎÏÒÇܧxɼ›¶ÓÛP÷•ª?Ä¿jÿÛ~´ùÜŽtã°b?ƒ¾Ó€ù¬hU}Óà«Ýµ| _·@g]Ì·Ð\©, \Ù}7ìÌs@ÍqF‹-ðç|[-tôÝ:€püü¿[@þS ÆLi÷Åéö?ç¼in·åµù,K;�)Ì:Öëg¶QN[ß¼6ç•£‡Ñ30 ô)s°\߉ g@í¯�P€/�%ÓE.æ%7YêÊW²@{“Ê› O#÷EBÔ“`–Îiôħ„õ³�Q¾1À@"ÿ)Ýü/�?íÓ7ÊMsŸü_4í+˼¾´mÐW¶Š¼>[Üä8njŸEú£6较{K9$ó†/À¨ð±ó˸£3¼È~G]©fÖÀW½!gy§3uÚ¦Óª¼›5:Ó¢ìS½–}Fd‘ €8¨yÖÏj¯Øb  …O¹c”ñZž£tŸÓ†dh»�bÏ´ïÿ•y9M�yydrhåsY¥§-À¹º©½\ßT: þAÕb~ÖïÇÐ2ø;m:åæJë”.`�ÎvkY Çܰœ¾D%` ¤Ðÿ‰vé;Ò§}Ù°‡]ÿ¶5bßÕJ­z¡—z8vÈãð5>ôQ:q&Î¥o¤ �6¤sC›éý/ÝêÛûú4øKE…d@Û×ϲ»%½v äÙ0/Sº@¾/Àÿrñ÷ISŠ�·hÑ9(`Ž�j1œY�?âMÂ]ë_·þÞäÜôÕ�g?Ê#RYé©güÊŸ ôõGTðÿ °ÿ(�·ð“òÄ(žŠ¯Ï÷�v5ð@×+|ë3ÍœjäNˆM{¤;ÖH†E~Þ3`CSü;¾ÀG@¼-9;ª¿£G |óE߃�ôy×e4<ç§ÕÑæ©ÞÇËjçÙ;Ëö¥[ýËÖ×¶y×úÛã›ÕŸY².c÷GÒŠ|u{ßMÛ2˵]¨¼,P@]e�·ÀÐÍÝ|(1žóCÚS€ÏÂ>�ù'ÑOþÏPÅÏšöÇø¬Èsÿ×ʖ븫ò&ç·E·qHÚgp^íãk~8Ä éÂAàM�c�ì�Dqž ô·äljºK¼-ÕßlFüÜôÓÍß ÐK9�ÈÏ my›ŸU·ÊîǺv㤚ªäó‰Jçg™Ì_ët9k}úëàWÝ{Cyø1"x3"g¤À;²¸ï­@þ]GY娙€CÉqÿOŠ§Òµ£È8l«Kë“mc@¼cftéÚ$j¶ f4½¤¸¯¸©çþŒö÷x `[£þpñíMý�#àãoÁ¼Í[:«,ËUúaY 9t,;9=Ôér˔Ф²e�U±ÀØ»ÿ.‡=íÏèÿX£ò}�ó{=ׯÑúkE÷ý£‹U~¬:'rˆ€>#Ó]5¢UYá0 ¯¶��ÿà/b[ºwcÊVëN5Ú?úõ¯Gûzæ�°Ç›zdÀÛŠ[’ñ �ã,ð·œ�»Íg>iÊ+<| èšåD…‡Û¥£Ó]:ŸÄœ~øö€zXÀ:¹+·}“Z5ý�­¿òUÂ,ù\æ4`ψŸÑ>ÑSþÇݳ~FþïúïÐЉ >Ž#ýXÉ/=Pëeý€«ýyçÿX#v^Œ¸*nÉ�ØŸW÷OîÇékêÿHŽÀ–è‰Fû¬ 8e†àBTþg¸ú¢ûã2çMû®�>žå—A—­ÙúÚc¼mýóÚ›\_­`ÊK¦zòæ9=D“¦JÚåØEËÔ³nŽ.Ë”4£õ#�p,êeóžÉó}�ÎIØ3õTyžóüG8 ²¯~�{1”gÔOÀÁ8 ï ¸ßkô~”^ÕãÌ�剸O¤‹ÝþΑÑhÿXÐèÙ± ôñ8�·RŽC¼Ì'Ý[K[¹Ê¯†tmðs‡ûx¹¼Ò(`À0Å. < Øûúâ2S/ò#ψÿ@À3ÚèßidÿJ^eû{üA‰<ç?àñõ�zGÚ÷]vC Ÿ‘ÿgFíÝï2rWÏìÀŸIŽ�ló‹Ì¡žóŸÈàM€X(~Ì H'€9ô2ƒÐþã¢qY›&ïЂ½ó./ºòàRôå¸òsŸPÀ}Z¿Ú. ̰€�½OÄe™’ön~§€9£~�>Óü¯ÖT?¯ð1ÅÏhŸ‘þaOT7@=@vÄä‰vÈU¾-=þ¢”ïv#{ÀŸ)~¶ô=’à€ ñ˜eð Në x¬�šîs†@Ýü–Z´Â£±@97<•åÜЀ‹T÷Í(ËöñrùMÓ«¦ÿ±÷×@½ÈymeÛ<:üŒß4èiônÊë{oúoßjÓžxÆß�?ŽÀG9±ÈOÀ¯í-бvIž×ÿûXÀè^`ÎBA-:°†²#`Èwå¬ð?Õ#€9lĆ@Þ2˜öc¦€ãr?p¸.òµá´ù¦®6D]o¨üªü‡®¯=že÷·ÕÓ|Û¿¾kþ¦mTýË(à²MnÌÉsNßXq)xôho|9ï4”Ѻ÷ê÷~ýñºÏûîLý3åÓþŒø•gÔÿž™êJ[õÆ¿E¬Ú�>ÓÿÄÍŽzFê“3�?� XÙ�pnð�„˜=RÜSd6 úÓ�¿�_Ü/aÞi^ùM•* ”°@9K¾â•§NgÝ�–lÜG¨Î Þwh.Ëàh½ÈÏûõóœŸw÷½ �güЇ�c ‚xÎ/€Ž)©šŒ¸û:�xýôÌ'ào9ñìÐOù+²à€�‚˜-اå�Ã!éʬÒNÀ¼ÿÒ¼ò‰¾J”Ê ”01ÅruCZ®=£6{ß±¹,SÒ'”ýúYåÀ¯)ý÷å¿}ÓQ�ö?hÄOüy¶‘:zº†Mûú‘y' ý‡Ð ÄX�þ)Æ €Fù8,þã¼çÏ:¶öÝlé``2�%-ù e�²Àò-PÀòmÚ«±‚^³<¦�z‘ê“my~¶oïò xù“fäÏ>?{öó.?àÿ¶£X(Ð�(y¦ü¯ZyòŠýüc +îä`]È 8×ôÿ†ÀÿŒÑ?i9@²€>; âxMo Äq‹†]ÐY¡,PXºÊXºIKaY`Ø-Ð#i4 N ?ÑÈ�çû'ŒöÅ ÔýœŸ×÷˜âçC=ñ.?ÓüŠñ~¿d÷UÇÏúÓ›†Éè_ŠÂ 5øG™òn<žÿø¬PŒ´xdxÞŸ Vÿvy+��Šbm£~E¶»¨Ü4ê/á˜ÐSa9`€Ãù1]ŽÖÒrÛ(à¶-\ú×ÚÜg—Ü�&;÷ äéù ��Ê3~žëCíã érl™»§ý›Þ}ªÅ«Z €«Z¬ä…2p,r@-°Ì«ß–·yÚ¤á{Ïþ?9”QÿG�}D_iùþ8±m¯ò³d?‰2’^zPÑÛÑ>'`Ò¦Ûï@>Fú½Ç3þuÀŸíH�Ýkžûs Ç:–˜Á`ô¯cÛUÞ¶ƒæè¶áe½æÏ¢Öi™«Öw½¢e�U¶@9«|öªïײ@{ó¿–’•Zýmžª€¾7í‰m{»é|^ã‹gùŒüå0õå½þ˜öÇ1Шÿ³ê³‹ Ù§F÷.šLù°Šyä?QBûÊ„£à>y�>àï?£þYѾ€Fû,ô…|rÙQâ8ó±¶yôÂëó!~__ŠWX ”°.gºŽ3,�ä6LÒêÊj~ÎÏ¢7Fú?wÛõþ"Êÿ¾œ‚¼O?Ï÷#v³€?ñÆSü†ðˆþj+;úâ u'#y õÇ_óëFÿ‘Ÿþ4��pØQðPù=Q¢ß Ü¶tÚù�î;9=«N••ÖÅå¬Ë™®ãœÈm™¢¤Yy;Çy¦ûy•ïçOŸFûø1âk9¬âçÙ~¬æWš:€$Ñ£â¥<ãï3ˆÚØüÕ6;ÿøw¼É8¾“C…GøÐMfì tÓÿ}͘ç> ‹Õ�xåÑÇŠ=sœÔíøzóM©ã²œvyѲÀºZ €=ó¾¡ uŸÝMÂ]ë¿içk«¿Íßäx[]ä±~P¥0¦üÀ;Pãµ>øÅ¿(ëùA{öG”#ÀWûbaœêBY(w—Á‹û¦¨™Ç­¾AÃ!0à3úÇ蜡ŽG†Ñ>ß8eô�À G8J³ŽÀ6EON;ÏyŒ~‰1tN£¿’sè“ëãYê62ï*éVÿ²õµ}¹kýíñ-»?­¾Ê_Ïå\ÏnUk…,ÐÞüÚüM%ëšJ °bÓ�à¡“ýú5âð癿@>^ã}«ÿ/šøEi6ïôüÔ¹›¹r79:�¨úT²úßéK%c�Ÿ,úK¯ý]’ïapŒ89¬ð#Ò^N”òPf"lk¨# CÚà“Ó¹I—ÃËé,Séûµ€Ïåýöâñ·^Àã?Çk}„€@m>—]5m]¦Ôw âlä£Ñ~¬êÜc¿~@_SÿŽ8±ØOŽ�‘éþé#¸j/¯/ïÑ~€¿ÔxÌ»v‘c O6þI‹Yt°)�p¼1�gøÌñ$j†yÛÚi¨�c¨ÍÌÏi5Yá�YÀçò�uëQu§€Gu:ë`² æµyó¯C­ËNCc•?€�÷ùy—ŸÏó:¾–ðZ ÿ‹"Ðg´ëˆð;^§�7® JIŒüSú’Þ®¯~õ/öûÏ3iºýRÝŽÁqz€4¯ÿÅÖÀ¢^6Q[8ØØÑ:�7pdjÓ[¢è:[ €zöoûµêúÛÓÆÍ(´eÎg˜7¤£å#O4(ùµ>ÀŠÈ4ÿ¾€�Ès~Vù¿ÁÐ4?N@|´G2oäYèwŸá’õ˜N×3wzNÏ÷ÕÇyhêaFþä‘Ñ蜭c kÄ[$Ð>m¡“µá(m§ˆ…ˆØ›èÇ>ÐÜ'Ò™'u3ƒëκBáC××ʲûÛêoóóÚãÜU¸} ”pû6®nÙC7‹ÌÏiw§�ç²Y”[ÓÑS>#}ÅØ«0W Ð�½ùáãt�â1€ÀŸ÷ùy—Ÿiþ‡Ü“ �©vEœú¸­¾rÜšÞmèxC[¨ gaK²|î—Å8<‡] ÚÆ ’Çã€ØHmy& ÞDPži/Ú¥í&.ðæ�Ì]*‘²À£¶@9�úô>þƒãFŸÃ¬|[æz‹…ëº5‘gü|°‡�õðŒ?¾Ì§‘>èáC=ïåDTÙgÀ^yf¼_?à€;rÏÔÇÀ.=Sޤ«¦¿í/7ð¡0¹é  €�(£S¨eBº¡.ÒVLM3BUŒç×ð(ïB´ŽNò¢è�éþ޲º?žñîŒþy…à×ó}(ÏøßIæ­"”‘þCÿ…ËáÔÏõ›±8ÛÅ–’‹íU»FH6�yü�\Ø[‚8ŒüÙè@öÛã<ÉùØÁQ›>¿C”sI!Ÿ×`ôüXÖEóêÌ+·žEé²õµíÞ¶þ¶½Ê¯†Ê¸…ó”ÿl9} M­�Jߨù�ï©À÷ªxž#£U`!€0u Å×鶉»»Aãyu+êÐÀOd šé{Fû~�Ÿiþx�_}ˆwú™úW$ýI²ñ:ŸtX« ØÆ@@4¥‘p¶·t\< ò`òÜßv4¥Ò6gäøêÚá¿Äç�Ÿp^óÆ@Ù )òþïùš!o¾é»Uâe�Ge�rnñtút‹M¬•jßÈ¡1/à=àiô}¢xª´ã…€z»€�€cS`OÜPÜyòd´÷ôiì8ÇÌ€æó�ŒøpŘæ°Ççyy¾¯èWùÞ(�#À3~ ʾÞÒ]=„Ã@v‘gÿþØBÑ#zʱ<ÞÕß%†C ‡*-å±éMB8]jç@m|ÅÉ`ôÿDv¥}_­@›w_/>¯æ»_mÞü¢e�u±@9K<ÓÜŒ|Óq¾èÍ,à›¹)3€ÿ¾¶Î=R}Íä|_ú¦}®úe�U³@9wtÆ|ù£æV®ߤ‡:N97y@z,>z÷nt@|ûvtøáÃè'@àåq@ëlvôìÅ m9w8ºÐˆÝ;r b”+ð‚ò ÚdÅ>ÓÐùwøC_+þCNÁ?ÄÿYô³úµJá‹kô¥×ž`t3jÃA�hÔ“mX€€38Ç €Ò±ò_r7½Þq â Ké]µÅ¬ �büú%mp®Zð÷ùšr_Ú|–³ŒyEËë`�rÖá,¯ø1rãæy<ÏûOˆ]ÿà§ŸF?þôäýûÑ9€.`ÞÝhOF¦šú?×hÿ\ôâåËÑÅ÷߇Ãpˆ<�F˜ŽGªÌ¨þ£ÚƒÆ6½j×ï�ÿNü}ú¥þ=Š @  ¨Æ( Ï�ãÔñâXŦ@¢Œõ·$Ç,@,´×¹&Å¢¼†ˆm�E9±9öÆ P @yœ•¾��h™>à‡W �…–lgÓåh--·m�rnÛÂ¥ÿFðÍ›Q਑ÄׯG?ü0:ü¿ÿwtø?ÿ3:Õ,À†™¸©PM K7û˜ÒÀ3�Í«mg_}5:ÕlÎï´o|ýu8rF{{£}õšgüoÔ&'€�ÉG}”üD«´Èoèd¸1Ú˜b«ˆ€§âÄ �cVEÇ�}]Fý€ŒþE'vjlA>�NìÆþ±'€ÚŒYÙÝmÆ[ô™óœ"ÍøúÉ`Ï@•ùÈW( ¬“ÊX§³½bÇê›7ÝÎÀgFÿrŽpþû¿GGýëè\yvªÛÖÍÝß®§žÁ(¦µ;@c“™3~ÌÈš ý… \èQô£x? ø”ƒðCç0-M?üŒŸÑi<÷]ù ›ô­0�ãü}+�maè1 €Œž%,U¤»O¶Vûñ@}8¥Måy‘�ßé òùZ*Ð_ êQ1dïÑb= ”ð@NDucÚù†Mú\@}Âè_Ïü?ÿòKLýŸèÀé?þ1:ûùçÑ3RÁˆ”‹P"ŽyÀ�MmNµðäùóщ¦ÿO43p&'àL#}âÏ÷ã¿(¯ôÍ K¾™m\¡0ÛoªZê§Ý('iâ çØ)ˆ÷ý¸LÿÇè_lð@y@`ë>auúäM�Xȶ˱3 Ú‹ñ8Þ¾˜A©;Œ"w`�ö¼ï /ÕİʶM•Ü¡|£¦Iß,LᱨïøãÇÑ�ÿÓßþ6:øûßGJ�ÄÛVÀ¯ÉûÑNGí(€�Ø€3 r*ýc�òy›àH âøQà´?¯ô±ðÐ ÀrÚ¼J£ï©oÎà‹?¼üuRbÔÀ/{p㈅²“§âÛ›~jîZI÷çÍ3-vx[ë¼ì €¿‚|mÑçû¨Ë¡Ê�Ýå<ö3¼âÇg'€Qù Sÿí⹿€�7oF»8¿�€|aÙÙˆ<€& ñ`Qá�€ÏâE¨|ÖŒÀG•ó.8*£?øsúÚÚ jê.’7øC'�Hè—À_²Œþüe¶äž±ø¯£~v™N@î3N€¿ È À±ú¹%ºÃùQß ö¦Ÿâå~!“óÈV( ¬£ò}r�¿Žù�Z €¶ëiÏ2Às9Ï4rßp³âàÏ‘�Õ[µ,(Ãð Î|P|/þg-ä¹3«Ï˜ ÑpP�Ê9}ào' œ‚ì¤cc$ÀªãçÙûd un!D_¥ŽY¦þy+`‡ó§¾0›càÏ4ƒ<üœ§«æ™Â«PX' ”°¢g»½™µ‡ÁMí&á¶õ/Ò·| ±-¯Fë§êxןÍ~”1l@’R.hGÚÈN@L%‹˜d[šþß‘¾f*[ì Pa‘¯ ö¼gÎH7�–IG€vq—L~'gÁuT2$;©¤„û�y³Ò“v:¡I•wY´«~�Ÿ”“WÌ;ÿù˜r{1  ïý+��§^ÿËnšNöBç§�o*ðeÅ•óÁ¡]åûf¸vräz&?ïºêv[/_›Cufño[_Ûö²û{UýË>Þ¶ýÊ_Ïå\ÏnUë–,0x£Ò ÜÛùÆŽ~lê£>0* À"Ýé&|@ÏåÔÃØÓÔÿ™6 "ðêà†òJ £Û=�ž(B¹�eФŽ•ö§@ÖeP,tÌZú來®=Ú8¡“v•vͧ^|ø‡Q<±'`»°›(�[ˆØ e·yÇðˆ‡�óÁ#€½4 Àc®Ÿ6Ò7xq;šûÛ‚S.«ôýXÀçê~Z_ŸVËXŸs½ÒGÊ !¶íÕ{ú8€ÿ†;Êttà cæ„ð XÛ€‡!P¾ÃL€"[Îò‡Øad eo{3c%`J^!”DÇ›Tñ^(£ìÈS�9Kû�Å|ÒíÑŽÚô?ú±+w¿ƒÒ79:ѯ$Gè+ ��bÆDtÙý—ÊÞ€p¬øY¥¤ »:?ÏtÎXÀó( u�3ø“®°:('àöÏU9·oãja p“žPñ%?MÍÇ €œ€µ ´ jÔ�ÚßÀﲘ�°£‘ÿ=N`6pãƒ3;ÒÍWç þú»©ß¶žÓokßsE@|C#÷åJ Áh�È­ÝQÉ1_:¡Š~=^cC6œ «Ý x±ò½ã¡gþ¤�އ."ý ¦\ih€/:£iÿmá»÷Ýwñ!>èÀi9àÔ(ßN@ÔÕûʱ²_ÿˆžUÿ@›}�î÷ÚèƒÚù g#ÞD n(KÀóm*@Fyœxá`ˆr ø€°"}¥ÍÐé›@”Óª7þŽ©äÂùõh?Ú»#{õcîNS™´iæ�¹ã~ÈÎ,ÂdÅ=«ðc‘¤ÊY Éš‰m(yÕ‡w`±ڮô™cŒÍ�Ô'ö8ƾ]x @ÄAñ5d'`üÍ%õóà,p×Ôƒ;È{èP9÷`ôjrؾa›Z2€nô�p!àßÔ´ý†VðàÀ ä0†�RÇ8 þÇz„p¤x¢iþ¨â©â¾t¿×"ÀwrÞ«ì“€CÕ9Rx¬Çú�Ÿ€0k3Œú9@1Füêg|‡@<äØ àïòÑFN£¯k'ˆt»½˜e�N;ð—ÌdjŸJäÉÈ›:M^m;†ÀˆG@”v þ»ÊãpðŠr¼�Ê/+pŒ„˜ÝP𙀨@mbkúÀõà…‚þ¨'yç‘u0ø›š_ôþ-�ïœÛ ˵@9˵gi[‚òŸÞêò À.£~Evdß~À@"팹〓Î8Ø�T×ô3€òﺸ/Ùøf€€‚ѦC{ r».DL�G-ê*Òÿ˜üå\°�}¼Á€uL°NÃ�ÈHV:¿ôâËqÆñJ8¢áàhp³¤m¨Óä P§ÇœËù®OFë`Æ3ÞƒŸ…—´ËÈð?Užõ„8wÐÈ-ùGmÐ.çƒœŽØ sˆ-;ß„0ÐgÚ‚¾{—ùæ}8¨ós{碀۳íDsßÜÇ›TXBbÕõ·&`T¹­‘ù®FèO¿ùf´¡÷÷Oµ3à©>|ªï0=Í;üìñÏwT“’xLÀˆð×HÿHSþJ;~”î÷*ÿ(p&Ø °IO›:êÆy@—ú¯Ú)M_bÚ^ F?Ãi° Þ%@uã�;ÔéôUÏLFþª3üèÍÑo‘ÐõÓN|™O6�éwéˆã•sC1ã!ù–q=ÚžÐx 6èëXÀ#!6bê?_úªýñqû˜®Zßõ†è²õµíܶþ¶½Ê¯†ÊXòyjÿhm~ÉÍ­�:FwÛè'r˜‚fúÿH«÷c €ÿL€~ª��)òÑ ›¥p®º§ÝŸªþ©žõ‰~è�È”ÿ'ñH}€*Æ&6v, ›¦nÊyêÅTµôÄs@Ÿˆ^@*}KÔéÒæS6)G¦ËC�Ž6hG<èG·Ûq[PÔé1çKž6ú‚ù®+Š$3€ï�Òôa—rµËFA·ÐÌ‘@cg@õ�7p xa"×LØF¼Léyþ£äû¨eŠ–£Ê¸…³jÐ7½…&ÖJ%vdT¹#ßÐxg$'€}úO¸�k4¦/ž+2 �oðÈ_¨î2ýŸÉ8ìFýo~žù;2ý?ö„ôDìÒè%O0çÔžê3JeJžG8¤¨ÅŸ±t‰F@wÇ P3(å]ô£׋c•Ήƒ¡vB¿in�FÈ÷…̧­œ·<<ŽC6€ÞxD€¼øLÁóqžöŒ«/ƒrܬ¯˜8êkXŸ°§ˆ€M˜ h�Ú{¦ckóȆøãÒú- ¬¾Ê¸¥sXà¿ÃbGnÄ|ù-f”g Xøñ‰`5³©|ŒðEyŒí‚)› áŸk¤.à?g@Ž£þ÷Нý @¨+ËE`2Fܦ”)žeDûBLóKo€7ú‡À %˜Žsò´ ë’õ¶2È8viìAm¡Ó4·ç¶L;Ý—úúd’.ŽƒÑ6ý1àøëLúsIñò´kDc@ýü™•z@ëî´ý�šgjùVnyGQšÊ÷k�rîÈþu¹™¡±À01ÀMþDkõ1]È2Ú ;KæŒÇT˜!ØøöÛÑ¦Þ 8Ý–#Àf?ñE;êªN€Y Œ. ö‚ÔiG çIwm„|—�Ñ¿t�ž|é åhÓ�t¯+�ºê[Ô�ZÖiäÐA·gê¶3µ^¨ƒÓ¦ª�€�èo0#Ê|xv¨¾´ë¾é3½‹·Ôß >Q €>͉ô ™Eú˜‚¨P?e�Gb�rɉ\õÃÈ7dKæ‘&ÔLuokԾǔ¾FóðwÅ;/žñ àÏ4 7x�¦ù/Ø@H#(»ý1� ó'x*¹Oš5àÀg¢ ðàéø˜ P;HŒÈ»úè¾ó´)F¨1•Îù#§ò€td”ëôŽú%?+dù,KÚy§3Eg.ÏyÒê÷¤/–ƒG”=ràx°�¹Pb^ŽÎϲz±/»ê}�Ñ�(ç§À_Ä!ì{ à>Ò'ú×IJ›7Ôï!>úÖ5d›Ùžëj‹U:îrVél=ò¾ú&2t˜”¾@ç¶fvå¶p4½¦Qý©ÀÿTø9g‡@@\€@d†€uçþ Å]éáY:+ÇÙUnO Ï×Oµx�ÎØ2ÐKÑàW:<%ÂAH @QåÓÙ€Á@dÒÏ„�@ÑÉÚ@ á„�IÁ²±bÀqL2ÁC7e¤»~™5¡Öaùœwa§ûä²nÊÉ;Ê^Sm«[é!£ñ˜ñ�<ÀÀJ]Ÿ¿È,éÍœ¯cEÚÇ`6 ηúkð7ðÓ÷ÍàÞR© ™Ûè3ºs°}Mó±>–c+౜É;Žö€1ç\‹;Ê #{nô¼"h裴KÀ¿!àgÔÏãÀðÿ¤ø=ê #IÓ1”}éि’bDA€¿Ò1’Ê¥“}gF@¼pt Œ”‘íçNjB�u9u]Òò}Ár}yúH �È;ÂwýN†¾‡ƒ%™°™Ž�\5ƒp':!>—Æô�¶ü²ç¡Ò,äµD€~†½±¯Êû"ÍÂGÎçô¦}»â¡¨rVøä=¦®ûoœ›ýÛ´G¿˜yÁ ð-â< ©‘Ÿ­|v)º9ÌÐwί$ʱãUNö$@&®9xqÎ;ÛÑOGÊsuÊëb�rÖåL¯øqr£nƒyÜÜûå9r£'5Q—OóŽ>+É‘ñÇxO›x4ý�L¸œÐ·ë³�@Ÿ=ê¬x—¿‘AΑ¢ìDš~)ã'w×–ÛœPä² u‰ð²žN¿«¸½I¾MP_‘þðØÛ±50öâÙЧ\�êò^T7qÄ‹t§Û §kQ¿'iëu™©ùPx9ÊùáØãø8FõïR˜wì]ìËèð‡Iíø‹ÀiÅ}ýrÙ‚;ÓS"–@m³(�·öã»Z,Êù¦ýY‘ëƒýœÓ¿EdBYý”¸Êxà'h¨{¾a •s“ºI¸kýCý5pçþø €“väx­ybv,g'€çþ¼;èIö%àe°�.ž/óz¯²¸Œú�K KãsB@ŒtŒ¡¦VžÀo¤Ôƒ?”vìж :ú`ñ®ºö£>é6Zq–3/Ql£ñŽÕg¾Ëo(�Sûœà„ :ê4êòy&ïÐÇ[nl7ÑÄcé<ÐùÚek`œ»x;AçÕí›úz0¥-ÊÈç´yPË8ošeÌ룭Ü�¾¾º}¼V_+sßúÛþÝ´?íñUþz(àzv«Z·ln¾I8ÝÞDÚ.ØíPN;ès´N×aûÚ§zM0žõSGñP‘çÿû@'À0¾�£v Cÿ�½ó€—æ&ø~½îÓL7½w0†¦Œcº!ÊH¨&TB�iÆ@L/!B B ½c:¦ƒ{ûzæ?ïæ60]Vÿç ó?ON pÅ0L£IØgŠÒHÏÊvÀAjÃPÕPPðP< {P5ìi?Àƒü¾#.e%q!µrôƒ28ÒÌ“ž,®Æ\y—|ðPµ¿Äa¸ÏC@òJ`rãâjiÓ’¤Â–„häg®/RŽ~*N„ ½R €„!¬ LN �~9!ÐäÙû`!é8{Î…s%â7(0»`JÇŽ §K7íðSür“tZz‘FÙA>-Ç3ž){Ǭ·Êí‚{‹ÀgƒYÕr" wŽ ÂX+{¨êF›<í¯ì$AÓûžwÆž‰{Gºw{ö«ˆK(w;êñ=B¶V @ðžôÞ3íèxÉ3í耄Ðd�ÀÛ„°&c†-‡mCÀäu;B˜>Ÿ—æ+’ôB@ŸÆ¤'Nû ð ÃMŽAïnh@7t ¨ €M LØ÷Í’f ßÇm‚·†3+tžEœêkÔPž1ÂÄhM ž‰‰3ü+d4”8¡yDU 8!dØã‰‡‹œ.b¬Öjxúíq{$}´v€ã‚BÉÙ»D˜:ÚÎ¥§å⹌ÖÍJG©a)À°‹ò‹F› ,4Dr®/cq ©ç™¿MÚvSÌd­0ˆMÂ@P³�Q +ÿ³„¡¬-€±˜?l s!ÆÛs´§¬‡4ó03’=[aZ¾…>�zÀ0oÏÏBêXÜBØ=oë))3ÇnçpW†zÒ}�a¯&½[軇PÒVÂüñ2çÚgÆ úÛè¸Ê³mËè¶‚Àå8 †œ\ÄÒŽù5£ç{jƒ@¾”³wC ~¬aêì}JÓãy4 x× f£A_ÞµBX¤ñ÷/u(ÌüAø2©z—–·I×B+K9KË…¤™§Ž•Ñc�0 ɇy`óÇ&`oIÇõ5{΄¬j»vÆjŒÊD¥mí#ŒHâÊ| kV°Y<©� ñÂ�ûqÒ3^™©´»’<è =ŽxMïÅõ™4Ê÷¾&CÚc•Î×w ��¹G˜ÿn¡5gb¿žg¾¬h€iØÓgeÏ�ºœ@ý¯[’¦žô�2»Ö ùzäù�Ô¾")_–\%ŸÕâWɶí)|¡#[l;¤.÷n¥eì™÷Ê»ôýMŸ}Ù6â]ÃoÇ€1y „0šÇŸ¯="CËt2º¥[˜K4¬.L`EÈ'‡×õ&îÍÂxöæt¾x ˰f?WB<+Nü¤œ2^iL™¤´‹–œ®¶·¾0@<õV˜¼É'”>ª—>eÚ¡œ„°C,üõ8ŸÐ œÐœôWûR¬ô •:´ãø›€§`ÒzM²„Z8à%8)£á@Õÿ½í‹3¶@Xª�zl \¬ìy>ÅQC> ½C˜ý…â×nÞ\­Ù{ïj­|Qr­„kD(@3 _�DæB€ ’ŠLü¦”!t<0ƒ˜NÇÍ/Iðž¦^ ÝO¼>^G«Gy<{Ãz@˜ ŽÕ%€½…qÀüaHz¬M¶Xu^ y|�nÎX¨1;¤}œ®À¡�ø¡40M`˜§/x{&¤Œ+GûJaŠ|x À†8*yÜv�û‘2ÊøåI«”S@BXék{„ÒGY…sŠ@�Ò>$Ô¸kf¡ß¼¨çÙ¶Y-ÂÃ* wKˆÀ¶Cû ñ®Þk¯jý�ÎyÉã*áu"Ð?mð^𮤂€½?>•¦ïeÃ!,Õ£ÍÖ(`“®ôÏÄq~"öqò|yžq6Á¯A ,?ÇÔ`hûÀüÅ«E¹0 ˜ÌÿLÑ LÚ© �šÝíÛ \Wô$Ðÿ:OsÒeøÆüM Ýòœ@ÝXýÃü× }T/åLb—Á@aö*”X[½�tÄ,Bcþ¦‰P!@à£__žÕI›28swRÎò€'LþÂóÎS‘„k/¸ Úuá…Õöˆ_!ã¸Sêé±D Wí»oµQÊl’º»d;€ÓôÆ�&ȶhAÀÞžqöù�ôô}#-\P`Z(À„F‚‰!ÜèHéÇÄjÎò,­îÙò¬n)´ žò07n•ãT»�Q)óøPÐÙ"¨õº<#(�w1v¥†KÏá­ ”÷ ZàaÐ<‹×Uw/®i0IsVÇž©k ŸÐ¼¤ëJÝB)¯ô€) Œõ²ú6¿@�:¬ê�¹CuRÚ×ò¸-�#�¶%Ðï‹”£,·W@pQ�€ÀUa¢g�0ù5çž[­:çœj¥„+Î?¿Z!À I_)ž-tÒ ŒD`ؾeKµJ4+d  ’±fœÑ­a@ï �²Ö{×€aŽA ã»x® 6õ·‡×v\{ãŸô /m«#.øë^7 <;zôËøz‰€È +s aÖzu¯À`å¿F`¯ƒ&=O>L^÷ü&B4àÛ „&A;Ê€�®ø%D‹¡WKH{äÉoÖ]<¢½lÊK=èÏ)‚ "Œn&¿�¬ü÷Æ¿Iüaþl¬a¬z4Ò> �¥ï«¤Ìî³Ï®¶Ÿ~ºêÝÒ?5”­pç�à}±÷"EÒ¿S”·wËÇÓ:Ká9í÷RèÓrèCŒ²ýé-ì ‰Y €MDi¶�…Ÿˆ}<-oÏV�+‚¹„Ùóß.LÆu¶0V–Ø Ì­/µxg?}fc¢•cSf/iÆD,mž e´õlÕß ukA@ÂX�ù¯80|®ï5�P@!ÆN›ÐUWÖÆoÚ˜&^…iGi+ùàÀ×û[Àßï}øæú1êâ$d[f£ìïï%Œ«„[…™oÆ¿EüfQí¯Çæ/åèŽÉ�qbTÕа'l»¶€0ܹukµZBsàí…CK·�|{·,$ÏÇ­l„A�Ť@-S߆…-ƒp (à'`_Ü&`Bœ�‘¥û²·‰U0€î{ Ã!±ò‡ùslM¨T‚ùŸ³2æd€: a†xë“2ô^û0aí)Ï©?¼à«^£•!K]íKÈmyë„ë…)ò­˜#Zè‚Wš»6T °ûL_âlŸ¨0 ¡¦KyðÓS àa8õÒg˜[HZßõÊ掰·0ûý…é²êg_Ÿ�Ë›ôša©cÌAŽ��=í”r;D°CúÆ'¢1Ü!Û»d|À¯ZÚ&Þ õÁýøw°îýrUf>šöyæ;´ :À2䥨EcÞ¾o~2öùéÄdyVÞç{xGÀñga¥‹6€{¶Êv7Íq×<«ZL1 äô\>£ÌMÒæX…DZt9†¨6´Sg i[™V®mÊáW­+qúÇž:«~VÆw¤ß¨û¹Ñ5Œ“rÐo4µf -L^ïÞ—PWþK…B)Ø/Õòàª^òM RüÀGèã$i†ôQÚ@½¿^˜õfѰ°/Ïëe|Tõ/eé žzÊø%¤¯Ôß-D%Û»¥?»dlwÊ‘@ w1¾2¦}ô“²Ö_ÿ ˜p= }Œ F'{Žp:(À!\P`IP€I'�hl"²< ép]<%e½GØ Æa|0æ3áÊYìΆ±]Ê«ú[Ò”Ù¥;x6FOˆÇY8÷´ð׌ü”áKŸôk}²Jfr@€Áª~l låoL¿>ô¢©€`-+ …Fh XIs¶ûë0Xaàܨ^žIS¢"¨˜¶@ǹ' ôÇÆ,ž­½<ˆ>ˆçR'Žõ!ÐЧ¹�œJí8°åÀ¡™X%ÂÂJÑhŸä$@%šN pòC5ÒNZ˜ lû8Ì�Ó_í¿{ŽhP`Ú(À´�Hà3†�t)ï'ïR}&yïX¯`‹0ÇÉ`þœØ e¹}N™‹0Ÿ¾*Þ·+…@IDATè(C‡é‚“22Ú‘gõI›ÊüÉ–:ªâÜÙí¶³ýhLó¡*aÚ*ا9ÐMà›fA™³<ÃÈQ³W0â=†ÏÊŸ8 —k�w ó]!!LØÊ˜`\ ¤}T�ºz²@àê7$Ÿ- ïÑ€!ãƒF‡£ƒŒ2w¬ðxH>°•ჿxÏüí*½?6\P`ê(ÀÔ I ÔŒÙ[híØ³MÞLæ·2„¤™ €áÛa^0 Œã`"0ÿ3eŸQò.è1Fe.0ª ¸>+iÏ|¿é„Yk¾”Å€‘•2~à¾YúCŸ”iGê™×´Þsn)B¹^}c�BÀ9µ½´gi sUA@B˜:ŒÛŠ¢–ß)8íÚâ‘~kª �gê+…%ì "°ç¯©¡ûH¨¶ RÞ˜?`þ2†}@Ú7 [0}¼½ ÚvÒòÌ‘ïŸ-= À4P €i…p4©è¤:\«2iø“Æ—þù6ý³ÅSÀümÕÇwTâLõ¬�· ÃÙKö�÷¿/ûÇÂ$ør +ZV�f!oô�H#òÞ5 ÞŠ»„1¨ùYõ£`¯ŸPûO}q)-Òg-ä~ÒüôÙÓžjú #Z碄Eà2eÆ" !0�4æF@ÊàÑ,èÉÁ�véžžX(Ñ9ᄎ6{ãÍöãGàè3ư‡øå|ÚÇ9À“ùÔ¶Òw TÆ…ŸÖŸ1ºUBpĈèò¢“’Ÿˆl’"Íò,Í(cÏÊ!` OyNlÆ¿Ÿ|\f»0/öÌÏ`+#A¬ÌmÕ©«UØb؇+ý2§iîæ†ãµ?ž•1B+|[å÷ËúúR® >à ]aÆ0{ùŽ~ H¶\l+ /­1ÒcÏ…Пûý1à# ! MÛ3Øhó§LËÃ$Ù7ÇÑ8NÀüe©8w4NòùZ ·¢!€Ñ³±zm‡\‡k N¯Æ•gu„ï5 öLjíß‹£ÍPšR.©CR'®×¸k»"(Ã" ôíX…ÃØ…Ás<�–@Wï=€¯ ê‰ÊlÔü0|eô2Øh˜ c#åTž´Ù†oŒßÞÿlqÿ^YÜBi6\P`*(ÀT C 1I 0ÛäíÛµ š<+ãCÊZVÿjs˜¿­¦¹ï<Îu²‰ Æà»rÀö÷â+—>{Ç“ j'ùhÐ ô5¾Â$âÒ¾ j Î0ÿ–H?Ž�àöêÉg/¡¿j8™aB�‘#PFÓ'Nhô2æÏ^¿Ž¯¤)-¥\iåïß)VtöÞ DFP`(À"½I“]O³¿m|sðl2'�x2n¾LÂÇã0 du åúÛs„)©a \„6`{/„±táR¸ÊèaœÒ.‚€åÃ`õš_ íÎ~eþ‚u|?»Às |ÁU…�^ã:6ôC¼ ’ω‚5â×J×ÿ®Å(ÁLê@cð¬ü)<‚pµLïYË ¼ÝŒŸhÔËç�+NÈ3hgÎÞ“4´ü.Â�ô³Ñ®á§è¥í-­ùišåEØBh�–iÆ)à'‹û0íyx˜Ûë`´â6‹ÊoQ?ï'þY‘Â\Ù @#€Â@g¼¾2xÁG�åäYo°“<]áJzÿê]p–t´Sí¤ôK…, ùÁ*aÚÐv�Ðy‹Ù«Ÿ–|Óp�ÂΘ?a*ìÂV L_˜?€•_)À 'È ¡°âgr°ÿÞäZ\>-…0%cÝöKÞ6¼”LmÃoÞ°øÂнK³¸áè™?u`þæ”ÉH]TÑ›…)mõ?*x‚‹Ä³ pVO-­+r©SnÅ |ÚWæ.8°€U?Ì’}l„,âõ£$é—ñ$ ©†”›"gêz]¹ƒ7}’~ÐG.öÙ"Ï[å¿Vöë•� ÃÞ� _„. õ,OЧ�ô׌þ ‡÷“/þ­”•ÿÊý÷¯ª¨ÖH|µ¤­¸œBÐv{8€‡½ F.K³ÐÒ›†)¼¦õš–ë~S.Æ`þØ`ÀÝÔ…±¢~Wæ/ éla(¨¦Õ@Ê¢WPæƒXz.íJ›üÁYá“OàC¨BŠàȶ׫ ¸O‹&æ¿¡ç×IhÇ yVBñ”G}ÏÇ…v ã®ø¨�0~ólÃØÍ�„ªaÛ@Æh•„«Ds°JöÿW›cÀµ¢½Aà²'ß\(Mk>a¸ À,Q €Y­ÀuQ(`L߇9DŒùÂ4`þÜÀª›¯ž-Öé{Éó6V¦â`þ|9Æ=–ƒÉã…¹¡êçn{¿ ½<¬çU˜‘�óó«…¹Ádù°‘× ,,¶óß&Ø$x®—�}ÿõç[ú•Bð—8–ú» soŸ\çË'~ñ{äí7² ²ZüjѬ"”zkYñ‹  ž4�Ç „lä¿Oƒ^<‡ ÌB˜Àhå&†\ÚP‰& HÇïú U²¾ÁA] SbEÍ {»0f¾°¯0–óÄsM-÷Ýcx¡0èqX€ý3ã?ÝßG�öPë}´-æ¦B‚àž“^ý»Tܘ¾â!!LÆ�g¯Uÿ¡£ ·�iyyn­çøw mÑÀè—…éëm�"pÁü± DX“Ïö+}ž×Š_�ð&í™0Gè=ãÌ3¡yA;ûN�.(0� ÅQaBH�1„4=žg›Œ« 6Æ<[œoïBÀfYeò]e.¢ Ø!eøŒðEâqcêæ´àÑó9*+ž’ï…c¹ò]¤Ñž2ü^h#âƒDx˜¾îñKã×c~êê_BeÈRν­OèLÿv#ˆçR „éë'†…öº õPý¯FýßókxÆoÌßÚñqmWÒlŒ}­ì™xΑ¿Ô}²÷Ÿ0ÜlP €Çi)þÑ;$×L€¶‰Î�õÏ~¼�ñ[9¾ˆÀʵ녴Ç>>Æ|0zŒûmµoÌU?—ÿè@RÖ± òÜg<Ò?âz£ _hœzúŠqŸZøЇɫV¤ï×6‰#@>ÿ>9si–aP`Ò Šó'�?z„��Œ­_í”ÆÚÞBÕ°Ò”>lFãáHàß„ùÃÐŒåŽÊü�4ÊüåA™zÂèaüÊ{!Ï8kÛBMìø‡¶Xùcá¿^<«}=Ö'´A`¥¯^ž=Óg{E™³Ô5&mc 4XæT(0:X¿{™ZG`èý=XzDÒàKHkÃBmƒzV§÷éÄqöš\Ò}õÿ‹%ÝÙ%Ò¹&4�Ëi"˜I'ÚŒMnÖ¨=[Hz:Æ<Ã4pþ–ÀµÂж 3ÚGö¦÷¿�l àÊZ¾À±@Œk…ÉŸçä–£žx/Ž ¹’¤÷¼–…yõøªwÅÛˆÎÃKãGÕ¯Öý*óº˜ÀªßN'(óïá=�®ž![ºõ¼‰7uVχÓÚIC_¶i;VnܬÎ,…iÿT›¥,\CX&ÝŸLj~"³g›ìlõc-Y:!L–•ëar0`>´·l \R Ð8Ã;WBN " ÀâÍÌÚÆ.®Ïp­p�á+îÀí= ‡œcþ‚“ZºƒÛLÓÀ—B�‡ªú¥ ž£|ìós�/Öý¬øÑŒ �fûü¨ýžÔ¨RÊ{& ]íYi,Ï–&àÕñÜÔy¾Á´¶|š•KCÚ$͇ú?A�)¢@S4�ÊôSÀ&u05†¯ UžÉ³4ò­,!ûÔ01s&lë|˜àé¢ €epb�f�ø9¶n53a�ñ“cL·_Êå!xxOYµ¢Ë¸ <‡³„m8…Oâ™h¸¼Ï×ûô|¿ôY¿´­÷ù˳ží—PWý=Æ��c¾–¦ô•2„ÞKS�õp¾>ñ”Ù§ÏiykÐÃKÓì9 ÀbS €Å�hf)À$ï¾Å½@@ç`}×cR„Á£€ùÃY ¶ óç¦À {`þ¤…cðIHQܤMhæŠ ^�¤µá¬mzîw*¹¦G=gû7K»›DX'¡®öBÛç×PòšhŒ9S¶ži B×Ç}™´.m[Z¯(èŠ!tEÙ Ãõ“ Mj �®á·…§Áß´¾Áµ0G_ê�ž«Kš 0GNl£@€50oñÈQµóDý¶ØØWì°àÊà¢ÐCH®”3ÆKè�Ç—xžà%ˆ© àË�§M˜=¡ªü6 †~9Êø¥mB=Þ×cþØE@õ=Zå¬î�[Y£«¥ól^šÊQçÃ\Ò¬œo+�k!¯ôlém†ÖƒéÇßÒÆ ‡…?lùqp‹ºÍ)@sZEÉ @ŸLhÆìKa¿°D`\PC=â¬h¹†—ïÀŒíóÁûˆpžhT mߨ%!gÜ8K#´¸šcc‡V“°Ïü]ùpGH Meö„ÒGn4?BÝï'”|´º÷ÏÊ_¼ûy@h�y£¥‰ã‡q¾¼Å N]H¾¼µii>?—gi‹!,å£Ý%G&þTð�$¦FV·h`ÜìÃcýÏçƒÏ‘h8·Î‡l¸µŽK‚Ðd�¤Ã²ÀR)oÂ@扦æ÷ùØy~B ûL(°ã}Ð@�üzôI¿iŒ~–oÏ„9?L7¨oÎâ“t‹ûÐÒ}HÜœ‡ci¦‰!LÓh.3E&xÏðA>M3&@ž14¦€éÁ9ö·{ÿâ·‹m«~Ò`þs g ,t}FÓ7/Åì ¯a« ¥¬: }Áâàa·ùaà§ûûÂðÙãç:_Vüúe?‰÷÷ú% :Àà �±7 ¡+ås¾IüØPÞ?[܇Äýs©ŽO·ò¤… LB˜¶)àÓõD²ØðaJøiÃ|¬ƒpƒqáøóéªWêòá Í²°·ÜG¿CVþ;…Üx�„ëEàŽ]µK�¹Kƒ�p±ƒáóîöçs¹„ž¢ÄÁ £?>¤ÇþÀ£‡ËÅ�ò1ë›æ l`±Ïoøs¬O-ú%�ýØãWæ/mrÊFo~Ã2üT(оH;^7K'>ÈQÖ»Ò³¥{Ø–F}Ï=—ÒH77�¾–X¦mÖ)kÒð‡íÿH�ŠJ (À’DBP`4 0iú‰Ìžs“)iæabh6ˆ°E4»$ÿ"Aã|aþÜ À÷ øx¡ ªº_Bcþ®Gk ž2|†˜¼”YJœP£è$v½öhÆo*}û,¯©üÑp¦Ÿ» ø€åØç×Õ>m÷â´�óÐ%—n¸ZhåqFO‹k‫›óéOÃ\;V&——¶Ïe @Gÿ_*—Œœq(À8Ô‹ºËžéDåXšo#Ý{„!óá>!Œ`Ìÿ,± Ø.Ì’Ë�85Sï»SFÀª­ä¯ë  8]ý˜vÞ€8ÚÒ9�¯“²Àwöû7IETüÊü–2}yî¸GÒˆëÊ¿Çø›®þià öìCðæÙ¼=æå¹´Œ=§a gP~Z>žë)=C¨§Ñ¸¹!ŒKÁ¨¿ì)Pš¨,ÝCJ(Òñ09$VÖXÆï‘�•?Ìú…’¯Ì_Ò9ˆë³2yFX-Œy�xÓl“2”T��vŽ©ÿûÒ$o £M¼ÀÇ@Q5R—½þ½·-gŸ€�U¿îõK¼¿ò—4újF}ž¹7ZøtŸFÜž-ÞiÜÒJ}¢|S—–MŸ Ž¥[h香!Léèt=‘ÌüiÇ7Å/·rIËð ³Cåsæ£8°&nÁã6À½D°¯øså¶@ Ïæ“¶âÑì’:«ðRuÿzIß ~“ ›$$M÷è{0w |Ýÿï­úõëwÒŒ<ÅËþX*àÁ‰rRp†BŸ†!(0�Lp6©ÙdçC,«~˜$Žãq[å4Àþ7êµÀl¬–«‚w‰F€»v “Wu¿„ëÄo„ñ‹ß,§6KˆÀ‘;üEÂ0w ¼Ý²zÇ&@™º„ÊØi0q°XµÜ— Uã‹ðÁ¤�Qß�‰ç"Ýëuå®’oÌ›pæ]¨“ I3/h,ˆ“†£Ì¸.#—fíÔåY™ƒÓD�¦i4—%G˜‚1~:çŸ�aâazsÊ}¹3_춈€ñ6¨ÑwJó_%L£¿µ’Çj“<›G ®€Ô±½xN Ø%p1"DØÐvÁ)Cu¤ }¬öU˜�rýsþ¦¿A˜?ÜäǪ_ ý>ÊüíÙúl‚‚=+^Ò¦ öœ A�têCæÇÊe²j“êêÕåÕ�ÌF€¾ü‚Î�È5t¡†&YT G?‰å&3òavæ`gØ  Ø(q*Ìÿ Yݯ¾ðBUÍcì·Q€­’¶U4›œ_!y¨âñúùa�³]˜?É=ƒj`†<.pà€æ¿Y|ßÂ_ð Ž`�e¿gü¶×O_L0foL>}¶¾{fïãä§d-Íâ„8ÒÛrƒ` Êo �åÇèlár§G›ý Mj«ë—yÖàÏ:¾~•Ïk@Ò´Òëa}'„ùáìTO¨ÕùHÐÞÂø1¸Û*i+åy‹¬ô·È¶À–óϯ6KÞyÞ BÀzñ¢wW£? ÿÔV€g*ôZa%8ö¼¶ ÜžgÅãÇŸ½~Îõcà§Çû`üGcúÆð�ѦÌ>M³þ’NÜ|úL:Îòý³¥k�Þ�åû´qâMà5)S‡Ã¸õë`“×5üAíGþtR € ŒKüù&@ä)l‚q7!Àâ>LQ¶÷„�½y˜*L¨Û·JÚ~RéRÂÜÏ—Uÿ&aúÏ=·ÚtöÙÕº .¨ÖаZÒWौÖ¬ÒwKÞ. wrÌP`ì‘tá s^žÙf`Åo*~=Ë/eô£=ªu¿„ªQ�pÞ¹~yN™;ÏM¼öUÊÖyA­ŸoqÇ£M×6¼6q XA�q)À¸P?&�ZâÙŒI ëþý°8¡1T.ö�¥­—m€­Â(÷•ø=`­ëDX{æ™ÕÚóΫÖÊvÀ*ñ+ðRO…�ÅÞün `þ«·lÑûvK:íh›”¸¨ö¹Åoçù1ö#n–ý¬üm¯ßVÿœ`ÈiL0M€õ‹t‹û�¸÷‚RÿÙâRΜ�[Z)¦l F¤—)}í}/—Šœi¡@Ó2�Ç’¥€Ÿ-nŒˆÉ2MƒA²?ÏÅ>ªÆ‡!; ÀΞ°R€•"¬`•„¨ùíX ÌÂs+}�üÝ’·F˜ÿÑ×  ¨ü9Ó��a*4fDèWüfá¯L?Ãü�á›`!x4aþ¼”Å[¼.ÔB ~ ^ƒ¢Qd @çÆ à«†0!bÇä3!B/R3éø¦ Ÿ-nuL0Ôõ™aÔÄ÷óF­¿Föö7È~ÿ–sΩV‹¯„é¯ÀËê…¤s2ëdü‚ÞÝÓ¹ÍBh“š=X~Rë|€œq ØDéÃ]¦Œ`‡h¶ ãÞ.€]¢Ø#€•h$ä" ]Å‹ À'€a£„ )³GŽ ¢Àš¿A˜ÿ†½öª6ôŒûÔ ³ïñƒñ÷˜¿1z aä>nŒ�0§¿–nÿB\jbòce|y_Äç[:iÁ”ŒæS €ùô˜Ù§tòk{Òë~Û„_l|ÇmŸñÛ%ûþ;„i³úß&Œ{§•„«ð’†åþ:ñkÅóG†•¢ò€~>˜4ÙØ%š¾2È·öȾÿz±àήF ®üEP ÿó‡i« Ï'4oB}¶4‹û�xÎK³} �óœ:`x—>û<âƒòÓò¹çFÛÿ¯\›ã¤u�ï øƒòÇé[Ôm�!´GË€hL&H˜ˆ… *ööQÿ_$ #>1ЯþÁaüæÍè� Àñ&pùÏaôãcK`·«„ùWâõŽ6¸ €KƒÀÉ9aŽùÓ÷åˆ[]Â4ni>T´!޼:—æ§Ïuu#/(˜O�æÓ#ž‚‹B�”‘ñÑVì0ÿí⫞ _,�ñ[¨+xI׋~z!€ï ìD lVŠW!@€=ÂüE*™;Ð[í{oL? SÆoÏô Ÿ>[_ÓpÓù¿Vf~êÜS]^®|¤‚ó)À|zÄSP`b€�•´©€°Z5ønLŸ0Õð§F`ki= €@˜?Æ…;Å®`¥0þN°GŽ "€LÛVþú4â©·z„ƒ¼™r%7j^ ^¤‚ó)À|zÌÌSÝäØF'& Ü=ÕiÇ7ůIU€Y³jF½5½0qŽù±Ê÷*žÍ#Àôùsc`é\¤^Òö\ù¦°b(†sÌ_òRÆn϶ò·ç4¤�xÒ-n¡€í§YœG™AnP™4¿ }ëÚLáÕ•%/…?køÛç´¿iýqûŸÂ‹çf0 a³ÒQ*(X “´Ða‘²OVÿ©wÅûQ꩘LÐêóÎ1ø4Íž­~Žù[!ÎÂ4®™ñ øw$ÒBÐmrP`$ Ì›ü`š=ÆÙ@…ùt=¸´Õ÷¨õåÙ3u‹—B«Û„ñƒ“ï›�Ä7 ,; ð~„f Ûa [úô ÀP˜7éÁ¤Íùx/Íåö÷û�ù›ÀªçB­/pW°êï1�“&Þ˜zÊüsy¤Õù´}ʆ —!,.ý·Þõ„9kðg ߯Ý+#fÏ}µœ×çªÞÝ|ÆWâ•ÜÝχ|ì–?5ð“:<{–а ŒÀÜÕó{ÖÉ âùÀj1þïâ»Îú›àã–f!yuž.‘_ruymÖ)Á"}êà¥ymÃo^×ø¦ðÓç´?±òO)ÔÍsÝÐ5 †¦“ M|0×ÕÂô×mÞ\mÜgŸj¥\Ú³ç쳫Ý´wq\Oœ�ñ7Ö Ã'Ã?îØÞ w ¼�Âìw £'ܳukµŠO ü57V뤭5{uOcð„>N^/M«£lÉÕå•êDúò¥ïa¸ö(@{´ HA�¡)„é[h¸�gµ0dä_ûÛ!ñÙ.i0s¬ûÈeA„»¥înaìÜð·[ýV‹=Á*ñ«%¾N<À*É7&o!íãíÙBcT>´²K|H¢{A�%G�–Ü�F‡f�ÊPeÕŽUþÔÿˆU8à€j§0ø’ÇJ~—|p7Ÿ ¿›ïˆ °Gn ÔÏþJ�=¢=0Ï~ÿjVýx¿ëEˆð€1yBóÆÜK¡§5eÂ-o ð «íZÞ[ÜÞ‡°¸ô�Öƒó(`(!˜?Gó¸ª ÀyÞÁ¶€¨ñ÷œqFµS<†�»ä[{ÄX�-ƒ=R®’Õ}%Œ�ìó¯Fí/Äj�±^ü:˜?–ÿâMДéƒ[ÎÓÒÃ-o ð„0ï@‹4N1Q.᧤ÙÜ$éÓˆ+ã'”9ÇÿÖ 3—Óûz”�sü+„yWìíf¿æ/ž*ãGÀ¯�ÁZÔþ¢X/«ÿµ¢aPÿÞ€ ¹|¼†ŒÔK].--ÏA� @· [ú*ô˜ì&@äl‚÷ÂVJiœî�gé®C­/éõ[+‚Á:I[/Vü;`þò…¿]â ±¨$}…”'\-‚ ²ò×#ÂôÙb0Ã?´ ÞЄÚO= Ki–Gˆ£\¸¥OÆÙÞå¥ßÛ¥ÓÃ:˘;&ðŒƒO'NÿlqBòaÚìék\˜7Gwcß!«û�²ÿÏwõ¾¨ÂƒäW" ¬¿Jâ\,dž[•á÷¿1 iÃÚ%4¹‰§ÎÒ,,•KëÅóÒ¡cBÀl�g³5^�í¤€Mœ>¤›ÊÄ{ÌV™¾0m4ëÛ%+{Œñ0þ�bý¿«÷¬u¥, ­a�zzß/�g`z¥ƒ“�óœóàKº9·´ƒA�é¢@�˜'Dè)m&ÿ&+%«£Ìf-}3&ŽáÞ.VË=ܰ æ/áÎ^Ü„`Pgð,c'Í|)TŽñ+°äÇÃN²ôqP~®N¤Í.Òñnò¾ÏnogófwìóeB›L}Èg{÷ÀØ9&(޵7ùxù.ê=k¾Ä½³r¦Ìß` =L‹S'\P (0ý Ã1Љ°Câ.Qм3¶zO»hïÌš£~sëz‰ô=ùÊȹ °'¤0xöp¬Ž…&äžIóÞòvÈ ÌBèhœb"숰Ë,ïŽgàö.Y `Ô¸tåÏõÀ«Äïî À)Ážù”ñ“Nšå§¡¶Ì^Ç ~‚³J�Z9?�2YNÚ¥múI¿ \º†ßŽÆ´ã ~~ŒÒgúb}°r<[9=÷—¸¥“¦y=ÆO]«ïaO¼=[L·öS8¤§.—æË¤ùG_nZâ�ïü‘–ÖŸßZ[z„A� ÀôR €é›ZÌÒ ¸¶ð™“†ƒÇ;ƒúJŒ&¹¾ù|`Ù³Õ!4ŸkË`ú�xê ¶‡au,mÐs†Õm+Lq0:Œ ?…7*œR½þ¬á[êWÓô¶ûß´Ý(7Ÿ!̧G<¦†L’ž1سSd-�t‹ ž½³gÂ4îŸsu,ÍÊ•ž-= À0ི÷v˜zQv8 „0½¢tP`¢ð – ±îÙ#f¨…–çë[<Zõ|ÜàäÒKå|�ˆšR€÷)„€¦Ô­\£Ñ-j&Nc°© `ˆØ„™ ­ ¡ÁñqK³ÐçO�/G^úœ–�ç @P`ú(Àô�I£®'ØYƒ?ëø¦+›&ý±:”5!ÀB^OËØKåÛ±¸…¹2¤¥ùVÎÂ\~.ÍÊ·¶ ¿mxiÛ†ß6¼®ñMá§Ïiì]OËÅs» ]z´ @g`’´‰ÑâÒ¨ŸD½0àòeÒ:uy†�§u|^ăA�é¦@Ó=>�]P``¸9!À*1ÊävšV÷lm—`y<"—þ}çˆj¸v)@»ô hA�Î)à'E·†=O…Ÿgå-LóÒgÊ‘–´úº ï\î]좭å3€)ñ®_øYƒ¿ÜðMûëWÞ¼²ä[ZZÖ^é£.•·z£äªc°G Û†ß6¼´_mÃo^×ø¦ðãy:):•é—À*(0�ƒ˜B.?—æ”ïËF<(˜m „`¶Ç/°_æH¶iŒ,i¾¥çÂaÊæêGZP€w(}ƒ*ÓK�ÐLïØfA�¡)0*µÞÐF…%O�x—fgˆC0%cÕöŸ¦mx)™Ú†ß6¼iÇwØþ*ïW]ƒÊ¦´É=·#·”Öv{mÃKñn~ÛðºÆ7…ϳI�ÐÌæ¸ÖA� @P`j(е35]bˆ„`‰ htgyR 4{ÍÀò¤LôzRàŒ÷mRÔn§�дCÇ€˜J ”ƒ©D6� &J�ÐL”Ü7óÅ´ˆX·ˆw­[úô…H߹Р,¤Ñ4¤„`£�þ&Ðd4 ‚A�Z „PKžñ3ƒù�OÀ ‚íS €öiƒA� @P (0õ€ Qך€~Û{n]Ão{f ßqû?ký |Çñúú]ÓwXøÃ–¯ï]ä¶E�дEÉ€ ‚A�¢@V|¿ºCâè @P (‹!ŒE¾råTåU.9A� @P (˜<Â`ò4o¥Å®ŒIÃ×faÖð÷%˜µþ¾óG<¥Ç¬½ÿó{3üSÛýƒ¨BïAP ( LRaª�[BÈ„°„3º – Bè~$CèžÆÑBP ( ¦Ža0uC’G¨kixÖàÂ÷«_ýjõ¼ç=/OLI}ðƒ\}ôÑÅüAð‹ )¼a÷|Óú…fFNn~Ûð¬c'œpBõ¯ÿú¯ö8/|îsŸ[=â�˜—Öô¡+|­ý¶á· Ïð´°køÖŽ…i{Ãþ? N„ÃQ €áè¥g€;wõ¬gU?þñ�‹Ø~üã¯îyÏ{V6l(–)eüõ¯­^ö²—e³ÿøÇW—¹Ìe²y‘8>¾þõ¯�0î^xáHcZA�%L�–ðà.×®½ímo«eþÐåw¿û]uÞyç�Ä,¾ò•¯Tï~÷»�wõêÕÕCò�P¦�V…ßüæ7³ÀÖ®][]á Wi<³#q*(€f ´Ý EØtGÛ€¼`uþŠW¼b`Ë”»à‚ –ËøÆ7¾‘K®.ùË«P‘͌ı)ð‹_ü¢:묳²p:è ê—¸D6/g›éöÀl÷fº° Àt�G›®_úYƒßß½èEÕ¹çžÛ§c)ræ™gVçœsN?»)|*”ÔÐW¾ò•«ýöÛOa¯�„‹Œ[ß�ÊFÛ†ß6¼ià—/Ê^éJWªöÙgŸ´Zñyø!cÖð¡‹µUè?žÛUã†ÕZR •€¡È…§™¨‡ß÷¾÷5Bq÷îÝÕo~ó›Fe}!¶ ~øÃú¤~`&Ô¯‘F( ^T†öûî»o#8Q((˜£@hâMXصkWõìg?{¨ýÂ_ÿú×C÷ý[ßúV…ð�:V'0¡½÷Þ;ÍŠç–(pË[ÞRiÏX§îjW»Zµ×^{¥Éñ[A1 ¦ŽüAÇiçÛßþvÅ=colXݲ½p­k]«b%|�ë\g$†,4)~ëׯ¯`¢8ŽÒ}úÓŸ®èëÿøÇ :mܸ±ºÜå.WÝä&7©î|ç;W›7oN»7ïùOúSõÉO~Rû ú±iÓ&=!Œ»Üå.ax€à|þùçWp€OÖ8p9�1ŒãÈ tþÑ�~Ta\ˆ=ïüµ¯}íêÆ7¾qCÔ(;sî_3sÝ „—`þÆxÓþuÔQÕ§>õ©¬`'êÏMozÓ�†…0Ë{ßûÞióóžŸñŒgT�yÌcæ¥Ù ò­o}kõÎw¾³¯’û¯ÿú/Í:øàƒ«'<á Õá‡^*º Æ~½ë]¯‚ù¥îÄOÔ¼W½êUÕ?øAÒ2<¿ç=祈;î¸ê™Ï|fuÿûß^hõ‘�|¤zÓ›ÞT}ç;ß)ª‚�ñœç<§:öØc«cŽ9fŒÒ׿üåíQA†m™ý÷ß¿Tu^ú÷¾÷½êïx‡â‰`7È]÷º×Õq½ï}ï[mÙ²ePñÈ ÌÂp¦†+�M)À„CɹÝèFºR†Yæœ ¹c1ÃøÓžö4{ÔÐÓÎâuÀ¼ÊC<  •ù[3¯|å+ûv †«ðècΕŽÿQ{Š'>ñ‰Õ ^ð‚±˜¿µ»fÍš¾æÀã—‹[�¦a†Ok §TÎÃÊÅKõFMOÛNÔë–!tK߀ÞX={´o†ýà;ÞñŽªþ'½$�7è(`‰ñPwçWª¨‘¹2x�êÃ<Œ/}éKW0Ÿ:‡ÉÁDÛfJmŒšŽzc¼’ƒNéÖ‰•-ݽÀÄ“ŸüdÕŒXÙRmÑ"@ï:‡g=Õ•[Žy0üp³G�ؘ½1 Œ…¨cYEç+k®� gâ.¹ºË€`"ƨ8P·çVñƒÔÐþŽ€¾ð…µGo~ó›«ãgëëümÛ¶U_úÒ—ô¢£Üž? ž=jTê9÷ÓŸþtÞ͇¹2¤Ñ¬ôÙ:Ùºu«îyÿä'?Q5®Ýð¾Å-n¡W#õ9‚Ö‡>ô¡jÇŽ ª@g„N6ä\Is�õ?tµÓ ¾îk^óšê”SNñIóâ—ºÔ¥Ôîâ7¸�¾'00hýç?ÿYqÁèí�w|kÀÞ)Ÿñ9 @ÃA¶A«é¢@Ó5�M °Z|ûÛßž-yÍk^³ÂøÏþqFŸcb98öÏ™´r+Ò°þæHÛç>÷¹¬Ó¸Ç=î¡ 3‹�Käß¾ðµôwÉý(+Pð‡±¡¹àø�9Œô`XOyÊSúÇ-�mBQn•ZÚC·úàÆ><ÆnÄÑë`‘F0Çp •™jf�õ¸�Ë÷ÈÃh`Ø0+›Ðɇñ°*ýíoë‹kƃóŒÖâ¼;Æ{ÏË9V…0Ê r0Á§>õ©ÙU¸?úÑ�®nxÃêùóÜ‘3˜)Ú��}ìcÙ}wŽrÒ¡‡º•’úŸvoûÛ+óÇFáêW¿ú<[!`PY\îu¯{U·¾õ­+VÖ_¬üS‡¦¤$ÔýJ BRªy��Cãœa(øð hÎù綆xØBÂsçš l -@Üô˜Žj³çt|CSÐŒn]—  k üôåŸ@“K¶‰|àE‹õÛÝîvʈËôÔ1Ùç; P NÉJ¾´ µz>÷ßÿþ÷>©‡ÁrËæ^xépî(Þql1'”˜(òÀQùÃàJïj�=‚ š Tø¹‹zêÅh‰±r‰P‰f'Þa  rf~×»ÞUµ©à�+Ï¥M\4h!Ðp ²ÅÈÁ‰´ À´R €ŽG¦4¡vÜì’�!ûç9ÇŠ“É�•]îka07öuS‡Ê£¼º‹dÈ/©åV¡i<³â9餓rYª�€isáÐ æ€:m+ÕÔ±—]²uã Õ6Œ¸äЂ°=�6¡Î¥{êV–ñÊ­ÆÉ/©ÿY©C¯)�ÆMÌ9Ê!8!d5aþïTÍ}Ùˆf‰!ÌÒh-s\ÿíßþm�a–‘„½gVã%FŽ�s0LŒÔêÛä¶î` ¥Õ«‡‰ð�1]Ρ’†{f–+gil”œíWûüÒêÆ þ9u½¯O¼ôDê¢öÄü�Q:õ@ýS.áÎx²õâÝW¾ò½Ö×§YMǯxEµm°´aÂA'†�eƒÓB�88¡‘€Yxßv³6ñ¶]×ðá‹Z—ÛêrÆ�ê5¶¹ß’c/­Ž ViÊž9+לÆÁêZÈuÄ9‡š™ëy±[hêên£Ë %üÁÛˆ&ïËw¿ûÝ,zÐ~�öÀ*–„ˆ:á§„;í¦ê®!Î9Ôöœ¬`OT—¾O£Â™T½®ñþ¸õ'EÇ¥ÞNh–ú/‘þqelΊŸîÁô°ÒçÚÖ’«ûòß »J«Ð¦êpâã>9Ç]ó0âaö–Kß=>̘ÉÕY•ð‡‰–VÞ)®¥û€ÑD‚ Á~ðƒ¬>—ðvë¥t£"*|öïsÂQ¡H , „°Lz–»Éùû/~ñ‹Å.`ù>ì§€=°:á A‰ù5Øb(­~QK³ ÆÕá›2tÎî—Úÿt�ÃöJ6MiÀøä¶'h�mˆнéÖ §9rFžÀǺ» (.(°)[ËqÔg¨Ï0°ç?ÿù�bÌå/¹ jht”[èRd�Q:–ÆÖDÊ´ÓúésIÓÁJÜ_7L½º5µ_(©áÑZÀ\›¬¬K0ÐX$§6r�ÒÑENÀÐýÖ · –Fй»Jå#=(°\(€iÔ¼]ºIÃ÷*kß/nt+­>}¹qâv0·—]b\ì±z¯û”°á”³Ì·< à†50+i$®zÕ«.PÇ—ð‡!"|`MŸs~üK0`¬©À‘ƒEZ êÿs.m]ä´u4þ cž)Þ¾ÿi^Ï)üÒûß´­^ÓzMËu ¿)Q®] „ ]z*4¿2éü²ù«_ýªzãߨyJ†uuL¨Ä¸R„ë˜SéÔB Þ9_XѧڄãÍ1Qk# ǥ̭FŠ3í×m½älêhÜÄF!ísQüT.–ó\ú3¬cOù“Ÿüä‚j¬þ1"cí¶¥[èPŸ7]Y–¶ `Ð¥“ ‹óA¢7¼á ö8/ä(!B‰gvu‚ñ6Ñ` mÈÙ/ð~�kC]ضÀ† jJ‚eÁÝ÷B”hL^I»C^¸ Àr¦@32ú] ÓŸ;ó�;î¸ìÈ`,Æ}ÿœûoº 㱜@>áF½ ¯±h‚»©ÿ=|êÕ 3§žzª~«ÀÃOã)<¶ >ó™ÏèÉ„Íq·õRøiûÃ>· /m¿køƒÚK´|<·C�Ú¡c@i‘\çZ:ÒuÇ;ÞQç 3I1¡ø‹‚Rts—ÕÝÃiÚ>+ó’ûüç?_=èA*e÷ÓO>ùäâ§~aŠ\rCö®Äx)_Ç0=Œ’aŒØ—-ÅKx „”„¸aë”.z'.azÚÓžV4xLñæØä±Ç«'(ô ›Ò+…ÏA�i¦@ØLóè,CÜ`ü¯{Ýë²=g¿™O¹r±KSæë¥ ÒçñYàTÕÍ·J®´Ï•çþù’¥?Ì©ô¡!ƒÅ7øÂ]α2½ßýî§'ÒUj‰y×1^ßÛ%ƒÃ¦0Î<ó̪tD¯$ˆ û p¾ñ�o\¤1·H¾ä%/ñ]ËÆÑÆ<á O¨¸6˜ã“8Þ�pÍ(0Êÿ²rúNו�¼á)Àð4‹RÕéÂ>9;ÌÊ3E“Õfºwle°`ëÁ»:=˜ò¾ð… ¦ÁE9ÄO<ñÄꨣŽRå¥/}iGíJj~îxÈCR½ûÝ﮼À�ñ#ÛG}´n‡”l?üpýZ]Î~¡¤EiJC>€Ä= 9×+ùœ:FÁþîû¥Õî@†|ޏä›cŽ9F/”2:CS„ƒ·¿ýíºEpÈ!‡T§œrÊÄü9ò÷Ї>T?$”;ŠWºE¡&ÚdUUbĨÿ›î‰—„ˆ: B]�\_�¦×¼æ5«#�<ÒkÃ&ÌM¾–XÛXd¦”!LéÀ,7´¸ðuzÎañõ«_]-×sùä•î„繩†  œýõaõ’ëmÓ[öŽ?þx=ª7,¼´ümns›êQ�z”žû/–˜wãMÛB]é+‚%!‚1`ë!çšØ°×�=@Môm",µÑ^À Lš!LšâÑÞ °ê}õ«_½ �Tò÷¸Ç=ÔÊ=§.ÎVªI,©õYæN`“0ìgd9Þ–[©¢J~Ï{Þ£«ö‹Y¬DùÈGV|à«ÜàªÊÏô ’彇…ýÀŸþô'ŸÔ�7"øfAÉž£t‡À·¿ýí¬j&\ªÓGL"Øx°§ÄGd·|ÙRذmêÿ•"})P l¦t»^uL|>ösá…fGânw»›®¦‡ýb^˜$–¶(Ï])]`0í¼àj”WgýϾ2lRX´�Ju 'TúЇY˜£ngÕ�‘çï¹ô§Ž15ùP7ð3WRóï#N?”ƒWÒ `ÁÊ:gCPj—;Þ ñ ‡ „&Lüƒü ~ŠyÐ�’à‚– { £/8"Ì�ârôŽÕižÁµ°mø)¼A[Z†G„“¥@“¥w´–¡Àk_ûZµÂέ™HØïnËÝûÞ÷V&œ[Ýæí²b~Üø±ê8 IDATá _¨ù05VǨª±"GÝ�ç£8æ\ºàx0tŽõ±JýêW¿ª*oðÁ�Õ;õ¡µ7B0YyO'W`zÇ–ÉÇ>ö±ê—¿ü¥OÖ8‚I&ʉ nî\Ó=æ1�©¸µ1w pɆà‰O|¢ªðs‚VÍ…ur"ƒÓlþà?¨¸×�q³“ 1 ôÁa‹qlj'aíE˜E ¬Xn’™Lžö=BïÙÁ³Ä D8ò~�<¯¿Î…Äדv衇^êîw¿û5äŒúÁ2I_C&—De ü•´‰“xc7dñp�ë4Á×ÒçxÁ“½ô6ñ…q§ô1ø%!ÀŒ�Cƒ‘°ª„™RæÁž1 XÏꥡµ. bƒ€øäÑg¶?€Çê7]q§ðÒgèimø<ðjJOO'‹­˜Tˆ(õ×ÃðxPßoéxø¹wøi/�{xäA[„ ®S>[>´�‘'‚B—Ç)…éŸSø>�x‰i9{nžÁµp±ájßð´PÊ«“g9Ô±{�üßN—k¹Oû�S?üáŸ*'†ØŸÚ&ž³»„øíÎï�øÎÄï–ç]â ñ{φ´eãB°l†zz;Êd9ˆñ¶‰}jœì¦6Œžb[ó¸°êÄ{×_ÇÇs}ôùMâƨýõ0š´I™Ü»0.=`òxÛJ^Ó¾D¹ À4S Œ§ytÆÀ­ë ®køct=[uÖðÍvbˆÄYëoà;ÄàŽPtÖè;B£Ê`¢ÍJ•®ÿô]Ão›Î³†ï¸ýŸµþ¾ãŽx}ý.éÛ%ìú^Eî8`êÍ@Ý®ÿ˜]Ão›Ä³†ï¸ýŸµþ¾ãŽx}ý.éÛ%ìú^Eî¨`TÊÍP½®ÿ˜]Ão›Ô³†ï¸ýŸµþ¾ãŽx}ýY£o}o"w „à8Ôk±n×Êi‡ß5~éP�ÛÞb×Oû3è9ðD¡ñò—}‡¥VJŸQ�J‡m7Ê×S 4õô‰Ü @P ( ,I „°$‡5: ‚A�z „POŸÈ ‚A� À’¤@Ø,Éa�N‚A�é¥@ØLÇØ„`:Æ!° ‚A� ÀD)ÀDÉ�‚A� @P`:(ÀtŒC` ‚A�‰R l&Jî‹K÷À.Î-–Âkûœm×ðGëu¹Ö¬á[îI³œYëoàÛl\G-Õ5}»†?j¿£Þp ÀpôŠÒA� @P (Ð1R£ãæ–-ø–íÐGǃA� ÀôR „€îÇ&€îi-‚A� @P`ê(6S7$�PP (X^HWûmÛ0-/j6ïmhšÓjä’éË=2 ¨ ‚A�–(€–YÌ¿D™HŸ$~úÓŸVøÔmÞ¼¹:ôÐCÓäx ŒDæ»X½�DºE©À¢�}z=÷Üs«_þò—Õïÿûê‚ .¨¶mÛVmذ¡Úk¯½Ô|ðÁÕ–-[¦·�Y–Ç|õßÿýß ò9ä�ê†7¼aµuëÖy‘…!ŒBµÅ©À„èÞ¶& -xÛ·o¯>õ©OUŸýìg«/}éKÕo~ó›ZŠÐî¯xÅêú׿~u×»ÞµºÝínW­[·®¶N.3ÅÜUC /׿8i)üqñê¦ø ‚÷õ¯=[d¿ýö«Î:ë¬ÀÙgŸ]]ûÚ×ήæ®|å+Wÿû¿ÿ›…WJßœRz ÜñIá•Ú5=…?køŽÚï¨7]`ºÆcbØœ~úéÕÞð†ê?ÿó?«3Î8£q»LThð§œrJ… ù÷¸Gõ¸Ç=®ºüå/ßNœ~÷»ßUüã³ ^éJWªöÝwßyßüæ7³ÌŸ‚—¾ô¥«Ÿüä'ÕÕ¯~õõ–SÂûßÿþêk_ûÚ‚._å*W©ùÈG.H�„Ñ)°re˜«�N½rÍÊ´Y’9]tQõêW¿ºzÓ›ÞT]xá…c÷ñ¼óΫÞýîwWï}ï{«£Ž:ªzžP]îr—nh�ßøÆ7²ÀV¯^]]íjWS!.-PÒPî ƒÒí ´Îr{>餓ªï}ï{ º}Ÿûܧ:óÌ3«}öÙgA^$ G¯)ññá DéB(Qf ¦³ª{⟨«÷¶»·k×®ê=ïyOõÿ÷Õç?ÿù¡UÔmãð.¦@‰™_á W¨.q‰K\\ÐÅJu(Â@Nkàª/ùèùçŸ_ýð‡?ÌöÚìÞ½;›‰ÃS ÿð4kZ#ô*M)5ãå`άLPÝwéößUwÙFÀŽ%fŽú?·JݱcGõ�ï|'Û[>Ô[»vm6¹$~ë[ߪzS³ºêU¯Zí½÷ÞiV<¦Ž¡˜º!i¡N8¡zÑ‹^40“;Vþ¨ðYÅ "† ægùW¿úUÅ~r�à ,Êë(4Ù7¾ñ�µM¶@†…S(1L¶VØNñÎÎ}³½ÂŠ;Í÷e‰{|~ûÛßVŸþô§«ïÿûzaj~.gbLQës~¡Ž´’�2*Ÿ~  ›_öý¹*ç8Q-Í8øg_Îâ´‡ÆW¿úUý@+Æáz1~7¹ÉM”f¥11XƒBÆ�mZþ›Œ¥µ…Vƒwêš×¼fcÛ�´ö¾Â%ò'K�ù³ÒdÛ^²­¥/ÿbtôùϾN~¹¶™�Ÿô¤'U¬ônzÓ›ªª?WnPLóéOº2Ïw¼ã:‰39Õ9ÃÇ>ö±¬jÚê¾ó�ïÔ‰ôˆ#ލþéŸþ©:HŽž�êØç΃~ðƒÊpJp8ÊÈØÝñŽwTú\ç:×)]�ìüÇ\�cÇZšcOñ¹Ï}N/^úÊW¾RýáèÅd²eRçb¥c�=v¨ûÚ×¾¶¢î ‡v!�I=çJûÿ”EÃsÚi§-¨ö”§T�ß"H6uЈ÷é­o}«jñ89ÞQÞÏ{Þóžºe˜Ó ‚ùÓE�:�Řô™sŽ?í?üÃ?(óG�?®±õQßâ·¨˜¼l !mû/ùKõ¬g=«úÈG>’fŸ™”èu^ñŠWè…CÅ™ VL/|á «w½ë]�™+•O|âºJ}æ3Ÿ©}Ë€^�T:kÏŠ�Õ õu¯{�®ØT–´¬\/s™Ë(½æƒk™ŸñŒg(N¹º¹4„�ÿùŸÿÉeiZI` sÌŸJÀd5�yb _4ÐR Ín‡6èÈ#�Ta€ ¦9„!h3ªûõ¯­Ûdo{ÛÛª·¿ýí*„å`•Tþ¹²uiŒ/(hâïúë_ÿz½£c˜û9X­¿êU¯Òÿø#Ð rhÝX”ŒCKõyGù/âyþ¹ 4ÜìR €ÇÎ3|o±‰F ^ö²—õUžiVw×½îuuå?.ó7ØôÂ’ûâ¿X=ö±�êÆA‹ ‘ú¬öîÿûû¬b5-†lLð£8˜Z¶R˜è¹’m¸{n‡Ààեܩ@ß™èÛr¨ Ñ6äV¡¥~ 8¢ ¦nêN=õÔâöGé¬| Ã?C{´)Ü48è¶AŒ6[÷º×½t5œÓb•è2lÛl=¤w( ó®Ž#d ù¸ï}﫚µ¾Ç»�ç=ïyÅ­A_¶.þ‹_ü¢Ömo{Ûy[Euu"oú(÷LߘŒ…"L#çPÞùÎwÖ½{TÄ“p|€æÁ~ðÈÌßãÈJ¯´Òô希ˆÉ|Tæïa¡rÏ}DÇ—AÓ€Z7çÀ¡)ó§>LÖÎæøÃVõn›ÌŸ6`þ%&Q²À.ûŽœ`[ªC[£:´ ÇwÜÀêm 4„Ê=§MÀŽ �w‰6 ½�/ÏØBÜínw‹ù‡¦a³ä`ØÏyÎskÃJp,[�a®·zNB˜ž±hÔÝ%‡´ÎTRÓ—ê�šŽ‘W3™— …÷  8Ï~ö³k'0V£ÇsŒ–Ú$�•,L�I,ÇÔ¬.«q4|±äJ†Ùw.ÁA@C…‹pƇ™ÿøÇ×ÒÎà kVRÿ¯ÄÌëÞ›¶VÇÖ Á;‰:×D€>M^ aøÞ±2÷ZŸ7lڛþßýîWÛG¶[ÐØa y«[ÝJ·îršÃã3ŸùLv Ùv0�ªÔöøù‚#[ƒhG~�ê³ÆÀìŽÝÌÙGÄ-ç0Fca…9 Ç$ ó/Á€ï~÷»«å=4_dK‚ Ÿ7«øœûîw¿«ÆK÷w· &�ºœyÎÑ,ÍiŸ‰º°ŠÁ(‘½ÿœã$ŒQÓæ\[ �‰!Úq‚£$8�7 �S 1¶•C?X©Â™ðKBK‰™sùO‰¡RgX­�§8btŠå=šÆ‚í¶øeÎ�´-Ù°bO¶P®u­k©•?Ì ¡ÊŒÕ°l§0ùfîÝäÝÁ˜Ð¿_Ü“Á‰è‹U>êïÔѧÛßþöiò¼ghÓ$d?ãë½ùp:‚ÿ‚ï*‚&%¾å‘Û2 Ÿ|qBÀ ÿ©O}jQHÅ�þÒOÞ-ûº'ôG æ]Bã„…9„fpô'<,/ÂÙ¡@³3V1erÂH+ç°ªfòI ¸reÛHÀ.]I\„�¿ÿû¿WæÅ/«pcbLV‡vXõ´§=­hô†jÜOÐCÁŸþô§ö8/ä v|¡�=XÚäÙV8´ <ðÀZ=ç`L؆§/ÓD`ò†1Á´aR0Söº±k@À`Øö‡Ñr”T«à�'Ì� ÆÃq=˜ Œº\ýÌɇÔÑgŽ~ú#~VÆW:3˜iêXÅ–˜e¡‚'‚×Dƒ/t¦}˜Œæ„�HÎ¿äØ·‡–0!VÉœÚ6xbD‰f‰÷ëxð€á#`ÅN9ŒærŽc–Þqü �†˜cº”å˜{ð¶º÷õ}ÜþÇw\ñ[‡~¸Ò †ÌXY‡Ó;\Þ•Û^ÂȺ²¢ÇñÅÂ’Á„OÞ)«cZ1þ¼Ÿ=œ„à´ï-ôå]´r·ˆÏB˜�±ˆ)ê¿’cõƒ™„c5 “ιƒä8ªm¾BǤi«3SK2¡pŸÀ+_ùJ5TÌ­bY5ú Žv˜ô°¢Î9VÕ%d2e 3öŽ6)ó‚¼@5¹ãW0Vo� &Ã:»„”2iâ™hYiQ#G7B`•l˜ Ùãe¹»Áë «7ú�/Y’#¦}°ú%õ?ðh;¥õJuȃqÂ``Ò,9% nk…U.š®§F 0ÚBW{ŸÀÃmã¡=`•€ŽhZxç0¶Ë9ú†‡V9ç%Û;0ÓœCˆà*;ÿƒ’#�Ó¹w›„ocæýèG³`È`þh“r†�T‚–ügñüw>ô¡é©ž ;¾QßÒsããËG|2˜?N¦Íh¥# °‚+9˜«žI8>7œsLH�~ô£U­ ó¯sL¤\4”Û €äaJæ8b—c0`Ô鬾ӉÈêÂP™Q¡¦ÎÚL™g�<«ª>ð�ªéH Ÿ¡ ý% Usα „vrMî'(1fÛfȵ1J�’ö� GΩ°âÛ/1ÊäV¿¾.*rü0-IºÊ·ú¤é[ªp¶ÔñN•4$iYÞQ¬ðýø[˜>ÌŸ-ªœ¶ÅÊYˆ€•s*^DS’sÐ�°Žþ¾ ƒ^Žü¢õA€7Û`¶Ç¯�= «àœCÝÌDœ[ÙäÊ�“†º±„g†a@¨Â›8GN@mŽ7‡š¸tæ�ñPù³z©cþ«„ªqö¬SWb€ìÛ²Z‡îÀdu>Èqz£´…Á©„¸~6 ®t*�Ujn/†TRo—êÐfIh€!˜¼¹œÆ…: h†u¼ô…Õ:q4xÆ/½¡/…��\bˆ¥¾"0x[Œ¦ÆÈ0w4’ÿ&cŒ`Ü„ùÓ´g>qÞ=+#ÂkÎa/Â{2H÷uùñâÃÍ>B˜ý1ÔpÑ ’ΡÍMú¹²ã¦qÔ(çXÉq �ÕkF Œ’�«0¿WÍ%.¹•«„˜&ñ&ÎÔ¦¹²ì§®$ÀøÑP ªoê¸.ç`‚¬ºÐˆ”&}_æ—Ó†Øä�c0\ÀS:nˆÐ–{0 C’suš†´|I­Î{[bÆïÛN¨§�ܾ¸/_g{¥¤u( Ãô•w5çדN:)«}Ê•'­ÄØÁß û%bÁÖtã("ƒ!È„[>`JǺ)“4ô댥ØM'µaá[;u!JÉõ&Lcª¦Î¯ò}3 ³4 “r)*NöKs*W_ÇèQ¢ r«ø’`«fƒëÛÊÅ1´úÜç>—ËÒ=Z˜ +»&®Ä¨0Àãx8¥x•êÐ&«ùÜ5³¥ã�Ànª§?u'ì½Mñ¥†“:ž|òÉEƒSÊ ã sno³4Ö¹:9|Ñ@”îè`Å^RÕƒ?eyßýxÁØKïÿ \ñ84 hË\9À¶Y¡S+ÇÏÌQ €™²<Â%5*¥a˜9敇Ô,• .eª\e[b î.JêZ4ÖŒ�X½æmbI�Ë᛫SjÚñ(«÷§?ýIUËöìC|Z]!&¥'åÁ›•?‚LSWbæu8•ê°".¶•"*qèÞDëÂ^u�!ÇŒ¡Ã[ßúVýÆ@IHlJ«´\‰FXÑûcp¾@NC⡠ç4Ui¹qŸòx_Í=਎?þx=Å`i¥¡ m ‡öé>÷¹�ž€©³!júÿ*µé‹C�¸hqèÞz«9õ´5‚ZÛ¦¥µò§÷Žcˆ9#`E8¬Ñû¶9ggøÉ£Íã$�ÉœÉÐ\Н¥û°dæÛ´ò%ÈŠ‰=R[½Zùº°ô�ð‡ùû ½Z˜Ò©„:FU aI(Õ¡�R�÷º£‡¹•5ýã~ Ž™¶Íü,i3ôÀ¹ÔWê@£\�´¯NÂ!|ùw�±àCFMÞÿ?Œý0êå¤@é4�Õ¾Õ�pq(€Å¡{ë­z£Ÿ8yuVØiùQŸsÆMÀbÁêa˜ ‚=ì’j˜½u›pKm¢ºfõ:l¿›´iô) ô—ýëaú[:Á�Ö¤î8˜áb!ôðà–NXê>TªS'h”VÑ‹—++êƒdËÈïeS‡û!Þÿþ÷[õÚæŒ,Ân(@7t�8Ôº æâ­æ»B.wL޶˜xë¬ësø”.bE36¦TjÓ&üìRŸ9- J´éÕÚ¬²±yȹaVÀÔǰÔ.Ìk˜É¶Ä¨êp*ÕAû€6ƒÉ:� KÂøÂHÓhŽNô¹tô0eÆh^üâçÀhGÙ¸DÇ."DðÆpD`üÍo~“…�ü[!Ôà% úè£kÇ9e˜n/ý×è8‰­08äˆ-/§0xFC0Èa#ƒýÛ0áfŸ!ÌþjJR?™ìk3‰•.8i‹¥Õ8ö¹•g©] ¥Xíå«%¬ÙmB, öI[%Õ2Lµª·£à›0¥œK™W®ŒO+]ßL[µúòuñ3¯Ã©ÄÌGJL4‡3̧dt™ÂÁz¾Ä„YÕrµ4Bw>𮥋µO_sy–h;`RW¢)èÚÔ>£tÌáœwºNceï{ŠÛ(Ï,x>áÍ‘IþC'v/¶ ¥­0ÚÃÆ„ÿh#ÏQð‹:“£@“£u§-±/Ο:·ÊàÏŠÚ�?|a‚½Xö4ù|*gˆq%&Ïu¾ÃLÜÄW2Æ»Ýín7oO¼­6Q‰– ñh“ Ú»ÓdµÎÞu /Ãâ¹ëŽ-f•îƒ[^B³ÒøÒJãÑÒdß¶Ð�â[b¬ho`æ~õΗ%sÚuÔQªÚ†îƒ\iÜøÿ”l-JÆ{h†ªærÛZÎ% РþŒ“Ï;ŠÁ �!…­��üãÕË_þò,xÞW„Öa¶¹²€"qÑ)§}ÚA€?pÝ>â)§œÒÿhË8« î©¿Ãî _pcÅ€ÀaÛ ¥ Ciµl½'<“áË^ö2Kž2á²ÇË„e®4 ¡V§Mƒk}¶�ú–ÇüqÇg ç…LÚ|xå „¹”Iºr�Ì=XÛ„%•-ÅKª-á„æ‚Õ-+Uk×*ÕYáSÇÆÔê²gLs®$häÊ–ðEÛ––o³tTÁŒ±Á{gu}qnªÌ¹:a§dhŠÖÍèc0Kí’_Ú*À ±nœ�Y程acz¡*þœ±c Ëà#LÑ'´l\ä5^¾}ôöå#>½`zÇfhÌJŸMªÖG=êQÅOÄj •7ç�¹WßÔ¶¬ °îg¢`9(™„ &Çù˜ˆlr,…X—Œ“ît§;©*ž‰Ê`À,rŽ•–}`†²8«Ã^(ÞÒ1lúÑ�~”S±ú§_0i«OÁÒÞµ©Í)kíÔ…”+ 1´Ý K òÌžÿüçSe�ã¡�ÂHᔘ0ÌŠU1cëë€o©ïŒ +w´ ¾N7:–Ú††0"+G˜ÓlÑQÚbåîËú8móÌ;{ì±ÇqGHÛ48%›Þ /TQgõÒÚäö$X×§åí9W‡44{Ü,ˆQ6ÜègÂ8w؇…€m˜Þ¥Ï–GŸK'‹ØóÚ«áìQ €Ù³"Æ|Uí aV%‡*“oŒ—VSÔ³I‡µ${¯ì¯¢æOUä¬Ä™4ÍñÙלC�ýÒ—¾´vÕ€…ôƒô ìÝÿÀd‚æ:\B�c�Öƒ/¥Ùå-¾ŽÅ™xù` Ú‘œ£oLÜž‰±õQZ±ó2Æcm•BÊaé_Ò x}N.�)Õgåǘ"˜•'hCÏáTR×"0JuìÖÅ®– Æû´ÓNË‘]Ç|}ùÒŠá’r¹¾‘ŽaÛ«^õ*ý$ñ»Þõ®ìþ?åè/‚˜µéÃ’q}ÀØÑ—%^r|è§äø|ó[ŸÎ×OáÚ3ï4Wnz衺g¶ÐȘ6Û:üøø‹;jjp|[/„ˆç>÷¹>©Gàá:ïÜûš³­èWŒÈTR l¦rXFCŠI�½ùÇ>ö±E0&"¬�YÝòu&>&2öƒYi±êd²àÃ%%Ã>`·I“g¾Î*07YÃÈŽ8âˆê_þå_Ô\qܦǞ?÷às=çXmsÌ1úq™tâáªRT’6 úú0¾™Žõ8‚¸á(‹‘!+£Òõ«Ø,<ìaS柪nK+W[Û Ã¥4ÑZ>´À>#°ÈgGsóÈG>R™ªqöù9�@J· lB„öª�æ–Ç„]ê‹d¬¼…% ®u=ƒ(ÁG.ÆÔÓ�1HUÜÀd/š¯$>ùÉOVíG&y‡Wn³ãŠÛܾ;uÍ¡AÛQ²SÁ&Á´^V‡#Æ7½éMú^C_„CìIÚ¨ƒ€fv“ÀÊÝÓÀ8s¹«ø‡>ô¡z/[^Ѓÿ cÍ>ûÙϪPžÂ€VWm˜$³7|ÑÚ ÄsD›‰Ã;LµB–OÈÿ‚«¼¹+ ´H`ÞàÔBJ+?¶fħ›!LÉøøÉn”îyÏ{ê�]¥ctÀæÏÊ…Ç1iú‰šýX´¥¶±æ&)V×LÔ¶B/áÁDÃ%&œëö_–3z!ð‰Ò×¼æ5Y¿øÅ/t£= #',¤•Q©r\ ÆlmY™ó2C²´<õri��I9'�‡ÑÕk_ûZõ<ãh†ê5«� W¢…×XyBVÃ¥íêÀìr}å�óé%ÚÑÃTXÁ£tÓ$ý`ëhTÞ¦qÈÁ'ÕœƒYâsa A„÷Žþó_yøÃ^ñéê’cßÞ³$P§õ¡»Ù$/¬<ÿAüÓŸþtý‚¸ñ¿( àV—ÿ7‚‚F¸¥A�ØXã8¯ÜûÍѨ®�i|;ÏyÎs²G©|nÀ° ógåÏ�þ0€”)L –X-Õ9´ìk–ž¯{ä‘GV‡Šz­AΚ¿Ä¼X§Ú·.Î~mÝ]uuëò  [59Ú• âX¥bH˜:4¬VSs§‚FWjÛ˜q )ׇ´Ü(σÆ�waÇÿ#½{/È‚›Ó¦åêÐÌÜ\I°|B4hU’1l-²&»xO=^Ľ°˜æÅs{ =ZN $&nö;‘Ö»pL6Ø0á§ ’ÕÒ‹^ô¢*Âañ@KÀ¾6N·¹Ím²ÌÈ`rv›Uظ†Iôå!yˆn`Ï�»�ulN .ƒ‰á› aØI´=ñÙJ>×fI�a…gjë´^©†xŒ}&�úú{ßû^ ZŸKçû?üðl�q�(S­ÓÖAb�“2KÞÑw¼ãC}Ü©I›¦�£,ö)lµåÛ'=éIz‡S8“rmÿ&…÷,µÀ,�Ö¸²@-ŽªoÐê¸ X˜#+qVÛXS³ŸÈþ{αšeß=Ý Ï•Í¥¡zç~ŒþØsÌ]Î’ÖcµÎ§aQ·Žâ˜¬év‡rÈ<ãFˆÊ4ç`^MWÀ¹úlß°—�î¯æÊú4èUš,anÞPÓ×+©Ô넆ÒÊ�vJBƒo“8*èÒÊ–¶S¦iõ1æÃmXÇ;�­KÎñn!Ȧ+u_–ÿgâSa×—ÉŤrïÌš{9Ø.k"0å`[ÿmÞ>ùkÚ<餓F¢•Á%ä=Gþ‹Ð�ÿ£ÙÑørŸ] „ ÀìŽÝ@Ì™Ü÷¸ÇU·¿ýí+®¹ÅÀ£±º/z ¨ý˜Øùóó}p:ëL˜ƒ˜;ýÔ…)s’ î²Úd"<øàƒWVÔ…±3,18�/“ø!ø`À8h‹�º´ÓÇ8 Íý,�¦|i ó£þ0ø/u¨ˆYq�x≪šMóíz@'û0KéZbÆ*ÇPQù– ¡INh€i× Ömøñ+Ñ�6ÄJLГO>Y…Z üêÞcÞ'TílÝä&7Q†k´óa©¯¾ ñ{Ýë^ú^ „@ëÜ6ˆÕAs“¶ýO|ÿ)Ƕ _Ùã {ü7Ù÷/�60¸„¼_¼gü7†xß¡;ð¼–íÿ'ì|0DÄp�šßÚA`‚ÙãÚB»Ó¥KéS²»Äa9Â^±Ü-/ÚŠÞ@z�6¿ª"y¿Fž×Š_çBâëI“}ÂK‰Šò2),–kÈŸñ™„€¿’6q/ºÙÅz¥ŒG{˜ðO“£WìÁcøƒ…4*Y&]&&Y?«&¶˜˜h`LîXØgd?’•#{�¨'�1³ê2بxi—‰Œ}ÆTýžö§ÔoÒÙççFuô°;àHmÂ1˜¢MVK¬¢`àÒÄ}âŸPÚ¥e�a+ÍaðMáðŸÄÂœÛØP•cÍÀ†Âd ó‡FŒ=c›³Ü¦ Öç9‡ÅzîL?+]V•¹>` CÉ9êÔ O¾N鄉§¡/ïã¼³Ü ˆ@K¿±¶÷cË»Êe6ôÝ. âÝõçä=<4[uÎæIìHx—¹ˆc—!Œ Â6ž÷—•8ÿâ%�…Á#äÒ*Ƙ§Éÿ“m&þ“x`óŸ4ØÀ$�w•¾áùß¼´¤si[üø2†ÐÐNGЈ÷‰ÿ!}@Р½’@æÛ*µïË xæDÖÚ½Gþ¿§KN�*FƧÊi¬2·‰¿¨ßîü‰sW·÷¯ìOˆG•ç=tÌ«÷¤àRt!\,,iÀ¿¼¬Æ™d 8;ÌÊê‚ÉÀ„£Ì‚yXMã0`&L˜3íÓ&íY[0bV¥É&ÇŒµÍǪ‡ÓÖ&p¬M&9&ЦLËÚ³³Ööl!¸›€4 ¾ÇBƆɺÁ xf|4ÐËpguž[•‚O‰¦Œ9>uF£4�gÚ(©ï —\½4-¥¡Í»ž†i�ôaæÉ;<ë+B’�­ï{Ú¦ÁkÒ¦águhϸ@Þ)ú#Eðd�’Â.ã Lû�ðl°�ϸÓ/|ú~åà® ؆7ô`ü¡›álþ‹ÃŒ%ð›´ox4 ž9A;€&4¥LlŒBµ¯aÕ[g�N0ãvÙVHã¦>+V1øÔ�Ó¿a'Ç´í¦ÏLʬö›¨_=£k  ?ŒƒY´Ñÿ†Ìöà¡eaTøœËÁKÛÌÕkšV×vSi9ơ߅cìês[B9zu�CÀœ. „0]ã±d°‡ÁÎ"»¿m·?i†�â?nûÓoßñ:œÛ¦w][‘×â@{´ HA� @P (˜ „03Cˆ‚A� @P = „Ð-RP ( f†a03CU�hºW_zùå¶MŸ¶á ‘ikoÜ=úaû;n{)ýÆ…7ÿAù�Ï Eþ$(€IP9Ú ‚A�‘)� L#ŠŠó(À>Ȩڣ@ØÄ«0•Xîôiïÿ ü{�½ë—:íÿb÷wÚðéšþ¿ „ :” @P ( ÌB˜©á dƒA� @P (ÐBh‡Ž%( ‚3E�°˜©áêÙt±»–fr×ôéþ¤©žögÜ=òi‡7.}Ûî߸øŒ[©õg\zLkýÐLëÈ^A� @P (è�!tHÜ ‚A�i¥@Ó:2�WP ( :¤@ØtHܽxH÷ “|ËÓŽ_ëÑSÓþN›MÀè=›«ÙvÿÆÅgÜúK­?ãÒc©Ö ÀRÙèWP ( j(@ q"+( ‚K•!,Õ‘�~‚A� @P †aPCœÈ ´E�tOµ-¸§køãîÙž¦ø¶ ßÚiN>Mñ.•[jý)õ3ÒÇ£@hÆ£µ÷ùÓõã–aP ( tB�˜oÇ$kc°W}O0ÿvP‚A� Àÿ·w­½mëHônÒ-ºýÿ¿®è‡] í½IH·mÒ›dw­£�IÉñ#–­C€žÉ!u4žËn:†@k�üÇ@ÚpÌÀ†@yš0FÀÐÚ/þþ @OT˜ÚÛ3=òG¼1Ï …¹_ÏkŸ/ïwìïì³³Íý|ù¼Sò¹]ÏÔõ`\c·Ÿ4ö€0#j:ÓÀÁâ KýÈR#`ŒÀ6Tb¬ÆàmL.~� €uØ$‘WçTtݺ5FÀ#°+9k1�ǸWKÏñÅQõ[¾‰£d‡+k\ÔµÖ#°'r|Îrm›MæÔÖ�µÎ¿ØüöÂ�´¯­tò_ƒÄŠ=!¾µ'Kû1“ϳëoömo?W¹½•s»ží‘X­Üa‡‰<Çbêw=ê¢Öû Àö·[pðÏÅIñã8;æö{¥0 E@c'xʤXk+ Œ©\´Ñ$ø˜–e®¤¾$ûçä|S#`Œ€Ø)wIi�r¦7\/dé`XÖW§´áB€H˜#`¶G€±´‘ü·7ì•ø7›9“ý(¥ƒÒa73íYçˆ@øÀ9^Vóšòõîú›€æF¯4pn׳+lÇÆ#öGìÕ§¬£±8¦–ù»^÷¹¯÷€é;¬ŽTsºg8”N:mÒ3Œ€0Fà%0¾v´ÄÝX_‹É4«±›:SAÀ€€Qaé@t2L!? á”ÏpL:iÅ–UFÀ#°]|ÄÞ0§2¬S&êVAÀ@”N'B#UžÆ*ÔÉ¿@å#`ŒÀa¸¸¸Ð'­93N“âäIs°¶êßü¾ypí¡ã¨>ó(P”"NŠ…Kkù;ßÀciÌúz§îG¾³¾˜ —¯÷Ü®oSN�8‰« ÑKÌ� ä°“)ÆcêHø,Uð€ö�o9�N�ð9?ºV¨mË1FÀ�!€äyyYbm,Ä_‘™àI±c9x7AÀÀ u�ì8”•®]Pž¾f�€0F`{›ûWˆµaî)ºŸ3�Ý©�F»+i¡¯.†Ž NA‡iÑA€ÇRÝã)µ±P·òe#`öƒâ*,ñCVP&R-Èç¸ÍÃh|Vžã‹¢þ ÀïÛ gà×5Ç cÕèÓÃÃÃß?VíîçÏŸ×ñ�ãE8.ì�^@ÆVA¹GáWS†zÌÓ¦kTOž6(¿”Æê¥K&çïz¦É *vÝs×õ8Ò>lè¥íÃÞ¶6Âïô([ñû°¡ïÃÞ®6v]¯×³)ˆ=ŸŸʶoSg ¿«:�êaƒr¢1ô¿>ÖÞßß_Gx½CˆE¬�S×’?öcϦgQ>Ï[”¼ôŽÐ'äîÎSÚêtL8!²çÅ·oßî¿~ýzûáÇÅëâÝ»w½Œ±Ëpd ÿÀ¨öpü"Çܾ@À8d4åWšý½ÆÖû3&–QTˆù&{¨ëin(‡ÚûPvåèaÃoOÊî&‡=Ô5Mí½k²nÙ?äõ„ßö@”|ì=x¬Ï1|Ò�óâ»þ§˜RhÿùòåË¿cïîî0ž:ö‚®³c¨úØ¿?#&,­-®èœY7>g?êè ¹gÇ+òÍÍÍýÇ�ožžž.nooïß¾}ûÏØë2Þ¸o@ß ùÇx)ºB àq–˜×÷�ÑÊù _‰qá�•dy–1oæ±áY�Í×—·¯{>÷’mg;7Þg³=ÛÔÁæ|W&w\�ðÅ� w�ÿbª$l$|ô+4~è÷„òSèA£øïõõõ_Ÿ>}ºE¬ óøðÅûÅ–P�Û¡î“Í™‹.0®�aíٶŸ“¸ÑáTš¡xã¡OZ¦w:èK²Ú?øüùó}¼nÃAïß¿suuõ6d$ÿ7‘ô¯:¾Á£à“~=À'¥ˆ=ú§ࣣ‘®¤¿á�ñA}4#pD¼8�SöGäa �XŠ˜[’4({èË'ü�‘ì™ô �"àïÐ?‚þúõëáû÷ï?âÃÕ�x € ÇbÊe/ì×õ kÉ_Ç0^rBaö‚$³°K^]n8’)*ù>ùÆx<Â'�‚©Ö¯:=¨vÌÕ1È´S¾™ö¹7)ϤgŒé¥QGÙÔ#pl4™�g²Õ$ žŸàÉ?v:Pv|ßT;u:ö(gÛØƒgQ>Ô%ÿó¼�Ó��–ÜpÓ5™Ò ¨S‡�ŽSëp6Œ³[í©$~ØE²g€µLþ¤¡Z³‰ynFÀ�9"À˜‡³1î�gÒmÅO&lÒZ‚ÏÉ�sAkvuœ!ËÔ�.²-½Ð›ç`r¥£Ô( NÇ„Ïu”iëÑ@¹Ž“¿R¬gòW[jöÜŒ€0sE@ãÎÈ8Ѝ±�1T“9x&ûLuL×+Ïý2 ³¥Aï¸X¹IV#;d8æ)…C²1QSå:`�u(°†O°†ExÊ´•iLq3FÀÌÆRRÄ>ÆBRè¨GLÌ�Ézò ydµûc=†±ò"› €öms 83��‰š2×ÓÁA‘ôÙ™ôù‰Ÿv´Ã^¶�eÌq3FÀÄiL]+ s3FÀÌ �£ä•§ÌøHªI|.tkh‡¶•›,C·øæ`åH²pM¶”ÕqÀÃÑt^ˆƒ¦ó阠šø™ôù©ŸvµÓpÞ/ËœgjŒ€8ˆ}ÚTf\ÔD�y$uÆLMðc<ç“rRœGÏ¡rÖclQÍÀêvÃ4©RV N†¦sWšÕ+æäNÇ„#ѳ`Ò'…Mí!®íÓÚsÝŒ€0s@1PePÄÃZŒ„N Ì£œ €<ÆKJûa¢OþÐi˲Ž-†w°~«áH´t¥àÑáhÚ¨GrG£ŒyHð¤àY`&ÒPõEyP6DÂÔ�¹"€ø§�2ã¢RÄFÊ൳€Ž<‹�ž6Z4¦”9 n‹-â å¿Hà<šü•‡“iËŽÆ1èQ€"±£c-y&{R1¥™ü�ø�Ž›0§„b yÐÜ™À•‚Ï�EôÊ×ÖqìŸyèú†\Ð c[à>7Šu�ì�álhµ¤LGeÂg‚Ï2ôµ®¶k{è8x7#`ŒÀÈñ’g¢^)xíšÄ¡‡¬:Ê-Ê5j“<ϱF—œüÆ¢ €5oX)à4H¼ ¹Áù˜”IédJ1�Ÿð§(ö€-ÚË”ã nFÀ�SA@c(y¥3Á#nRG¾F¡c×uœKJ�d7AÀ€€!,‰¸å0p4$vP&lu6®åð¹àÚ)KÝŒ€0'‰ãh�jÜ$_KäÔ�*?¶†c ¼[BÀÀo@à LÄЪ\s8!“:y®C¢çzÌaǼ\8pÏ…M7#`ŒÀ)#ÀZ£ÐmÒ·IüÀŒ{¿,S¿8ºø ýŽÁDLgP]Íq˜ü±ãµä[×äÏ}H9­¥_�úÕ#0o4^ÖxêH™à!SGž4Ï¡^)Q�.·^·ôïÿÌbÿ;àìÝLu-ùBG}�§.SØÌ:ʵý8¿5F½©0F`îô 7ª<έ2øZç¼Úu:§ÆC‡†ù¥9ù¯pXü€Î2�£ Ikë�§Sæ9”™Ü¹^ikŒûp.eКNÇÍ#`æŠ@Ž›8gÖQÕ®sU_›ŸçBÖÆ5ª[<ï'âé)F˜|IUGžc ìË4ÏÅ8Ç(ƒÖt:nÞ#0wjÉ7ë S—y\_Ë21 >¯áxùçß½°pÆ@r€‘"3sB¦ Ú⹃Žg[Ës)›#`NMθ•Égªó0¦ãÊcõ�•wò'Bu��8Qè &n¥Ê׿–-d€ó©Ê2õ¦FÀ�SG`��ãbTnñ¸fŽ�*¯càµq^Ñù{…fÅ»XǤh*E@žÉDMŠqò¤ªÓõ:^›“Çu­y#`ŒÀ)"0HÈqS2®Qç�'ÕqÕA?hNþ8zÁ@Å:³c [ ½¦¯éÔ–y#`ŒÀ©"PKÔ5®¯¦WyÒ*&NþUXŠÒ@›@QLM‘ñ—Ì•eý“Õ™7FÀœ3­ÄÝÒ Wžã=uò2.ª° •/x0\8-M Ó<Ã#pÚŒ&ñ‘K]çä?‚\7ä`£æŒ ƒæZâ?5ÁãFÀ�3G`4‘O]»ýBíqüiZ·-؃ãíäø[ÛËŒ€0sA`§¸‡<Žr?xeØ÷ðÔà•Oì팀0¯ƒ€úëàÌ]ü€H¼µƒ¿ÐÞÆ�“BÀ±ñõo— €×ÇÜ�ê˜{K#`æ‹€“ÿqî� €ãàî]�€0FÀ�ÿ;PºS•ºf5IEND®B`‚ic09øÎ‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATxì½ —#·‘®ÍÚ{•Ô’eöܱÇc�Ï÷ÿÿÎÏrÇI–zï®}¹ïÌ—De’¬*ÖÂbà0€@ €ŒLæ@"‘£ wo� …»oµZ, < è¾U7®Çq*ë(îÑ›÷Øv5]( ”Êe�²À=Y €{0|�þïÁèÕ䣲@ý‡Õ鬃¹' ”pdž¯×¼š{´¨ÿÒ£=µu`wd��z”v3K/á&Tknv ªözYàJÏþk­Àz]u´W³@Í\Í^SÒþSæ¨LYà.,p%‡y ÿÑ»8¦j£,p/¨€̾ÀMäJ7¥Ôäuë%•, ¬�®2 0([³kwÝÔ7( 1H›½"øÏô¡ò!~Û�Ê—ÖÙ-˜·ùÖ6my›•К¬òëd�rfœí+€ðœ¶ö>e}ü>žõ- ¬›.�¶ �y9ÝÚ&— ¥§ê”C0eŽÊ3ï1X fº³xEð7XCÑä´©y¦æCÍë’½ù>™,_é²Àc·À ë`sÞéLÛ4ù¾ˆÝ²¬ó-~­ +ÔÏc³@ÍôŸQt.5xÃëK›×Ò,ßWær¨r9m^ѲÀºXÀ€ìãÍyÒÎ÷¥Íƒžw²™Ç‹|àM•ÕL@k¢Ê? ”À?]!�̾4<ó�¢ì®Ø–¡^[f>”€ŒÃPÚåEË�Ý-8ç¼Óб ùðù?e9Ê ™7æ\þE&îõ8à²qгºX{`øû¬¶@L>Ç êN›f9§smÀ' Ñqiý–ÖÛÂÉ-p;oàçÏyþ_mÞN@R{)I�I¨™€‰)*ñ,°ö@:‡`³ržt3�; Íé¡:–qó¨ûT´,°Ž˜aÀyh øðIóß"�©eÄžÔŸç  #B9¶DÑU·@9ýg02é6À3Ý|ñâÅÖ“'O¶ÎÏÏ¡›š.d‘%Ñé E'e�nMÒæ‰šO²BY`í, °�¯~*Ý•]˜Ÿ�ŽŽó¡èÿå¤¡Ö ÍQÙK!dË ¸d—b¬ Ê¸|Ò¸)|£È4>|òŸ?¾õõ×_ï|÷Ýw;OŸ>ÝVÜ:;;Û$îP9‘6…oàïèð�§# îÓ8W¿e�õ°€�™çï—Ò~¨þ_çŸ>}:=888ýüùó™Òg21;m>;üÇì @û}@®œ€>ëoå,°Ö^üœ3Fy úð�ÞÔˆûÛo¿Ý%j&`o[aSÁN€À?;9M_ ü¦ðúx.+Zx,è€}êp̃žžž†C�yúoœé/w¬¿Ü‰fNvwwO¥àL3}(ÿלÏÿmƒ¾ (Ñ|%#À£^È©8ñ‘×oY`u,°¶ÜžÓdžo ˆ8={ñ.¥ðÛ{{{;Ïž={òòå˧ºíújfS7, lü;yôìŽ4H:SÒ.s¾hYà1Y -3Л¯ÿA8®«|€¯Ê™8ÕÔÿ�£Àÿ³Àÿýßÿþ÷÷ýë_ßÿïÿþï¾þ“ÌlÉ8Q�ü?6ø›Nšìv ¨ã4E´Ïÿµœ¬Qaå,PÀø̉k�×yh޾qLÀ_å[zöÿô׿þµÖ~÷ÏZ øg=øN7°ptŸr�xåC÷¥3}Áò}eËæ©ïËVYúÊ èZž¤ èfø³ eä;Ù¨œóâóìÿ@àNÀW_}õN qRµ�7oޜ˸PÙ±êðx€‹' ÿ¯•�X ¬»ÐþÙ}3ð sÞ ?DqjÀV+Z¸‚Z oóY•Áß¼ž�ñ·ø;zðB@ÿ�œ€¯ôÝÔ�ÇZ¯óAkX0¸!þF·À*û¨€\6Ï ˜Èª?õ8`b�J<$ ¬»À¹h�ó þCÔÎ@Ìà0ú×�'^í»ë“ÌM³BYà1[ ƒ¿�?Ñøß)Ïÿr$à'l ü÷ôßx.ÐßÐÁÏzðù�üãgÉmho€ÏZ ðYO6õ–@þŸ·f´ÐþÉf9èp½ZØZ´òÂkéà‘7Ö÷Ÿ¶Ë2u¹AßtòÀ3~À ær3M«•- ”æZÀ oAò9¸¼¡üÿ €¯GÏ´&à[½¦Ë‚ÀM½ªûÕû÷ï_kAàëÿ÷­G¼IÀ®�þ¯›º)ò^@ÚÁ�É΀ËLC†©/–wYѲÀ½Y`íþ„�µM³ñÍË”tŽÿ) ð{ “çÙdj.7Sé²@Yà:0~BÑã4TÿÃøï‰�À=ŽÿêS=øV囚ЄÀ3ÖÄš9Gzà}X(ñ…÷œß¨D:‡)À熠>Lñ²p¥Ëwi�µsã¶VŠÍóŸº�ü§f:'Àõ›¦*[( \Å-N:Ÿ)龨µÃzžóCŸÉØTú™f¾ã-Õã1À¡öîx§5ûÝA8-@;ß÷ßvMÎ�@ˆ>©í\v…²À�[`Ý€lðüçÎiËôûè–þÏ1 áxéJ‹RÝ-¹²ÀÚ[ ÅOç¡]g±ÓøG™˜¯ ˆ©|­ ø¨GŸ´OÀ'=ÂÛЦAlk´Xðº6Æ ú3O@ŸÎ©Ÿ“üu«ze�›X €é?kþã’žq(‡ �þ¿ÉI©ºe�²Àâ0ŽvÀo ¨µt2à.~ÀH�žè1À+- üÝŸþô§‘èK-|Í><�` ï»'X-4—g>õ‡B9Cæ)þ]Y €±¥óŸ˜´óN·t ü%{þóš‘n4ü¯ïêüU;e�µ¶€ÁßFÈN¼TΈ›G#^ýÓ#=xòJ‹Y Hú%?ú�~úé§Cö Põ�n=@;Rwž?: œWr*Ào�)Ùr¦ìU™;¶@9Ã7ŠÏ©˜,ÔMæZ�†»Q%e�²À< ø‘sê|甃·8ï1 �‚^i6à©€o5#ÀšFþ‡òÞÉIØÇP@Éh7ù¶Œ:žEp>ÓI½r²Y*}—(à‹µ[ §dÈ È²ñ@7�©=º ~"~i¦R˰€í» ]�Q‡Áï1Û¬còqCsTæþ© ÞB·ÿ®ÒÏys@‹?èÛÿøÇ?~ïB¯~þðáÃg½.¸qƒ5´ÕÎÀ#”0¶CýÞ“Ê6|KeéÉ£Ýljäo+- ,ÁµuÎC;¿D‘s�ƈ×sݱÊ/kôVà«_ýêW¿U½ ÑÚ$èµ¼þë_ÿÊÌ`íÿ?ÍÈ·<ø`'Ó…!'€â�Wßja ­UôN,PÀl3ûÏ�ÿèNOQÝ3¦ff«­Ò²@Yà6-ø Žü[î"£™€ *¼¢ k4ðBíQ®}U~À§j�k�©ºôKý�âµJ*_X–ʘoI;HN�~—�Yýg]6_cI”Ê [@˜²à"iã£ù¦­BäˆLï».2ÈwuP q”þFÏþŸ°6@NÀKê釚x§úû’ñ&A-@;Ÿ©Ó4éPkl‰¢Âå,v î3©nñº˜ÚÇ#5t~iÚP`s¯ f˜P`Ÿ-ØûZñÿy½Èš€÷’= Bhƒ´Ó9o9¨ùõ8 [¥Òwb�r†Í<w‰Ü;¸w7¤áÞVIYà‘[ÀÿÀ{'Àæp=òÔÍÑ2ðÿ¤[ÕÂш5’ã^ùL¼9O‘Ó>Ÿô(àÓïÿûÏ8ûûûŸYPklÕ¢Ýå<ô3Tý+ ”ð]Àì´MÏepOœË´Ô: C:™èäh€iú-ôÈYx¦À·bG íðüÝ»w^À‡„úžé÷ $ZõZMæ†PŸëq@¶J¥¯l�r®l²Þ üaçýi{+³,P¶@ ÌÎCsDCηé¶@Ý‘2FðÎC~ë`f@iþß8Ü37Ù5P�¾EVé'¬ Ð[{»øù矴> oŸ€öA>¯ Pvú ýÈ é—ú0Å›h¨DY`ŽÊ˜c Š'jý'éê•HY ,°€À^0®¥¹*eC9ÊÐÕFë†ïÏ3]}±&à©Ö0Àš€oŸ‹¡}”n÷ @¥C3?§)ÿÒaJ.ë çDýžä/‹§,Ðo�rúírëÜ|Cºõƪ�+[à¾ÏϺßϱÿ,Pžc{‚]Ÿt_@¿#39æ:8*‹µ’gÄëº6xEð™ô_ðíÖøÛGGGûì §`ÿŠûÌ¡C3’åÊ À®l�r®l²ªP( Ü…XÀ–à´in¿â)‡žëår׳^¨#{°Ïøò~Àc‚ë)3ÊÇ=T�žém€o¿ÿþûCµç}ÞèÁ·ýë_Ù' ïÙ~¿g-Å�~–€`È©ÝzðÅv•ZÀå,`¤«ŠpéP( ÜÜü—èN)¤ÌåN›"è´éTee¬ÊèÀ².#�ÐTæ‚Ø' ûvûìj=Às­ˆoÈ 8Ôšö ho Îà{šr:N#ã`ÙÈ«OåØ2EçZ €¹&ºšÀÐÍâjZJº,P°a9SÊ2HS6­§�¢ÃzìX·ÿËèuÚ²â´ì¨¢Í èÙ?tOŽÀWÚ4èzØ'@üJzŸƒ½�»/?žn@ÁØÀQ°³ÌžëÃåô¨X—-PÀe›,…£ÿàÔ i)JWX ö¨°¸º½ „‹ÑlÉöxÕO½>YøÖé´)=¡NÍÇ °12ÔÃÈí( ò´Áç�䞉nk&!ö ЀOz=ðó¿üË¿°O¯j«€ý¼& ÚÑ��€yä†fÐUNV¨°°ÊXØT%X( Ü•Ý ¸³ÚE–Í1óB`Æ��ð' àÛ°Nx„¾~u2›Žô ÖhQàáŸÿüç‹o¾ùæÙ‡Þê±À›ÿüÏÿôš÷ÈÀÝçdžåf9ÑE~Ô§š °…‹öZ €^³³,P¸o ª}`Û×/dœ†¶Ñ2™fð7߀Û7ø»겎Gbê^N€Ä7Ÿ³&€oðX@Û<{ýúu¬ ÐwŽ${�odàÏé® Aì$DFÇ_N@¶N¥§,PÀ”9*S( ¬Š÷ Â{úï4ÔùH4?®uD„·<�uõ9�JŠ}¨×Í\H~OëXÀ>#½x(ÇÀß0XCÛtÎSÕ>m�ÌÜËÔõk&à²mŠÓY €ºz-àgoa1×Þ·}}˜çš~ ëþ@s¤~[6¤ÓÔào^ÖÓçHŽ‘v¬  \mî¨Î3¥·cä||üY¯ Æšô±&€oh¯€�+î@u ßÎøqœ¦?5€Å*LY €)sT¦,PxˆÄãLégˣܑr§¡C}'À‘rB«/×ËúU�Wy$÷X-(d·àW¬ ø·û·‘>Ó·ÞêqÀ›ÿùŸÿñš€¶“9OšÈçƒ ðÙ pÊrš¾—`Ë ”PBY ,ð`-àfð%Ýòè<¼«Æö 3˜·iôw£û)‡!ëq_é’Ò<Ø�²Q�¦þ¿Õšî²&@q�ºÚ# ¯ ¸ ìpÄrpy~§Û:–�ú:†r²%×<]Àš_uøe�‡n€×Àê44òæ9mŠœËrÒèulóýC‘±>œ€6¸‰O™ü'ïõkR`Wû¼TäÓÂÚ'àh`M@Ru)™A�4mÙ ¦T²<§9Žr°N…ñôTÙáñY€›U…²Àc´×v ¸¾Þ¡};˜?dë„:f'ÀÀoj×kô²ÄÐ5~0ºP¶T?Öh·À}= ØÿÃþð™º=k¬rÞ£Í[ŽY¼Ï˜�|9¶Fщj`bŠJ”Ê«l>ç ü9o9óœ7˜¸¡lìYä¬Ï²®;‡Ò9fXÈ&CÏŸ={ö­€Ã¿üå/¬ xÿþ=kÞvkíx«@”ºŽJFp¾ýœð<'€Êá@è8j&`l˵ý-`mO}xYàqX@6œ¡„¾ü¼£ÎàŸgrÌ8o}¹Mó’.:´Õåy,À>ߪNÞ' ]0>+ë§}³CN¦äÕ~9ýv] n9kqšë Ë�Ó€n Ä>RÊژ˜¢ü=`}}@«‡~uSÿÙ`T¿­² 9”k‹€ÝX€P·&Àß €=ÚMÞå­LŸ`땪p’Ê K¬ßO9ôœs£©P( ,fó¢´ÕÚ�ÌÙÈi€ŸGù1€ÛðZ€V—ó üÑ È£ ʤ‡}¶ôV@ŒüÙ'€5ÿüÏÿ<ùv€‚}í°ÉÆD3Bö,ÖçPŽ|9ÙRkš.`MO|vY`Õ-¨·Ðkð|qÜí�¿e 9fg€þJÌý÷9•¿xúô©¶ øöHûœ‹>Õ>ïô퀷ÿýßÿ=zûö-`>4*0 ç=$až€P‘>©/·cÐq_ê÷�Y €vBª;e�²Àò,Îæ¸¨fƒ·�ÏP}}uÌ_G[î*njà¹^ üöåË—l¼#gà)û€Éì  ïÛt‡0´‡œ€KuÕ^9aÒõø)`=ÎseYàÑZ@î\ømèãµ2Îü=@žvÐa ·,üÌëë�e;JçbŸQ¾ ÈšîðÝŧÈuk>*y@¾ ~]uYæõ9vè‹Ó1;¡þOòYI¥—ʸ£óy•Ïui¥š)ûÝíézh÷Îÿ¬>QÞF[Ìü6ßÝ}з#àözë4Íà�NËZ¦];Œ´‰!+àpù`�TmÆš€“““}Âïÿ{ö ¸Ð>Ýš€�Z�-ZéëZ €ëZ®§^{è)VY ,pM ¶Öœž¥9‡œ6oˆ˜¡ù綯ú_Ïúö—š•>ÏðH€í‚_ê)Àw¿ú՝ީ«5ÏôàÝ›7oÞþ×ýk¡9ø/-öÍPŠ>ˇnÙ«|±Û£L•ð(OkTYàqZ7Ï;Â>ÀïãµzÐïv2p#?ÇEëiÛr^k 6åø~Ì~g, Ty¬ ЦA±&y- °û6 ¢KCNe¹¾“)BVÓ嬿y«^—ÖÖ€/`ÙÒlʦ9�y!¤ô98 %f'ê/2`}Pë̼9é˜�̦ê²€ü·•~¦}bMÀ§OŸŽ•ÿ¤²Ã¤�ƒé‹ˆ˜ŸÄ#ÙçØ(Ѷ+èøka �±â´€?�×í~ßM𺺪^Yસêõ7@Ñ—ãUûƒ|Ûù­3·3Ëhå\?·å6s;]:ÖH–™€è‡Äšµ#­`MÀ�¾°¯¶.ö�ŽŽöÓš€±ô¥á6ÿ¥dœês(Á('`l£Gõ[À£:�u0e�²€- ÄæÏ¢dd2(ç:Ögð‡˜)p:Ë÷¥ÝNKûd;žšÝà~½G�ú¿Jûœýõ×OôÑ w¬ @^�óðçå©ÚW¾�§±kÍ`�å¬ðÉ«®—ÊË·€Aٚɛ'Ì›r(È ­Càú}ÔúÚ²!>M¨Œ-ƒé kÎå‹Îí°÷úõ똅ÏóhM€ªN½ZHÞÁ�"¯ã.'À–YAZÀ ž´êrY ,0Û˜³¤ù™7”Œ‡Ùz2è{ÀtH/ü!½3ê0ÍÀ>þ€à~®öÁÿ§z<Ûkçà#9|;ÀklG%'i¹Ë èÌù\§k& [hÅÒ嬨 sw}r¾hY ,p;hþ{ùÿw' uœ7åHÜnGi³C ÷Pò‚ü†ÚÇ1¸8>>>Òš€Ãú§:ð>ú~ÀöŒ5­Áöy ´ÁÎB9­eV,_ÀŠ�°ênY ,p= dО§ í ÿV×Uœt#?+ µŸêlj¦aGùx@oœèóÁÝ·.¼&@�ÞS§Û' U�¤Gûæ·ÀТ@äí8]3¶â ÑrVèdUWËe�åXÀ@ÐöÅy­´ò‹8³Àß oŠÎ¾¾uå±&@"8Ì œË8Q¿ø¤ð¶ì½{÷ðgM@Þ' õnœï[0´(Õ×�ŒÚ¯5a‰Õø)`5ÎSõ²,PX’úÀ{HµÁ˜:mì«3Ë @×¼‘Ö‰¼ÛÏ|Òê S<Óÿ,þ#¡ôë´H0êÛÇšèÛ'@â“�Aœ´£r¹yPókM@¶Ê ¥Ëx '‹›K…Û³ÀºÛwHnÏâ�W3×Ò¬ëi–0Ï*>O-ø›ŸêÇš�öÃIŒ_Ð/µ÷uÖh kbA òûrGúðPR57‰î¾µ®Hy9¶Æ ÑrVèdUWËe�ûµ€Á–@]ži®;4` 7m�¶å“Ç P``Wù§ð4ê?Õ#�ÃW¯^�vߨÓbÀ÷¬ øûßÿ>zÿþ½A;7ˆOyWˆ,a–#�õ…¼Ž·Œíö`ËXò©ñ~ÉjK]Y ,pÏÈ>ïîò<�»ß¹ËÌ¢Y™üaÇ#�®Þ¯"jÀ©ò¬ ØÒwöäÄc­ 8–�×X­©ßyÓY‹-3UWv('À–y€´€[8)CÞý-4U*Ëe�{°€~¨é\n'žï P_ªn¾i+0Ä—œ€Ø'@k¶%ë5OXp;ôr󜟵(Ð2S³:îrÚù@òåÜÒ‰àÏžã-5³2j±E…û³À]ÛPÝŸnØòUþÏ­½ÉÛÈ´í’ífšË3�t½& žP&ÐÙõg`¤oé{‡¿ûÝïØ'€}´D€5 ® ÈâZ�OΊ¦ËXÑWÝ. ¬“2@l™a}€NžéÓ¾yWéK}ïEWžpºÕ�ûJ:ç[Ù.3Òÿ”¼Ú:ÕvÁß}÷݉Òç/^¼ØÓ·Þë“Âïøá¯ hUøS£ùF€2äPf‡!NœúR3�ï;[À}Ÿ�j¿,PXÈ€åÀ·�®VÈ jÚ–“§}âP˜Uæú-µc@Ý!ð§Ž�»íŸùÈ4!x’ÙÖ¢À‘€c¥ìͽ½½]íûÈ 8Ñš€Y¯ y^¡Kú†œ€hžg96Æ å<€“P]( ”îÏ3@4:8Ú¼ùèÉræ›ìû¨eZê¾µ´•ëÉã°è�{<_ŒÍ‚”Vó›;Zà¯GÇr¼O@ßøÖ pž²/ÆQ&ËPî46*' é>“åܧõpÛ³nd¸ÛÕµb�e_?ÀEoÙmç6‡tñs]Ò–ë£8mðqÏ£ÔC&ÅX '½­#/ë$ŸC.ËÇ�ù’÷#—¸ï«üLñBýØÔ>;Z à5ì0kM@n>§ þ6^}Ëø;£¾”`cÜ-àŒ^M–Ê×· ¸eŠ6x”LÍÏÔò¦¹ì*éymäòœ¦�Ö  ^†ú˜ù¤s¾Ña€o°&à§Ÿ~ºÐ#ú´U-ƒú¤JXJ¤.4Ëç<ér0‡rîØàÕ\Y ,p¿0øš.Ò›Ed‘\-›Óm–1ßyhNãЕƒó-µŒù9Ï|ÑMÍ*Ä·$0?ëäcŸÖ¨/òòš€éŽŒ�½åMšUð7ð#çt–qºœ€‰%î&QÀÝØ¹Z) ”€2¸^µ;®;«2€ì<Ù¶Üy¨g  °§š5Š©LËoó–øÇšµзÎë—ëv”a?�bM€ô óÏŽ´YЩ(ßØÑ·>èUÁ�?þø#2hg5}@æQ‡hg ëpAÇ\ mŒ[¢åÜ’aKmY ,pÿ¸)0¼× ÔÍNzfé3àC©ÇÛ™Gžú}ÑÎ��×t‘¾#«Èš€=䕿qÀ†Ú;Uš� }K`ëéÓ§�ZxòéÓ'¯˜v×ù>ÅðýX€<Á²ž0�Bµ]N@Xâv~ʸ»–Ö²@Yà�X ¸õнN í»~N÷é3àSæ´):ˆû¾ú7àÅN�Ò&ðA¾È_ˆ·¡6ãq�žð˜`_üvŸ€ üu‰MƒŸ1©cð7�Ê´¯¾ éœj 2W³@9W³×Ò¤uM/M×cT´nöYµã]§ûñ"禕Éö¡Œ¼erºï¿kÀ§Ìu ~Ï ôÕ�ţݑ€ÉšÉŽ=ÒñLàøøøDû)9ÒÓ�ykfuÇ�²L9Ùw�.àŒ\M”Ê«gƒ/='�óW=ê L£šÓ³ô¹ÌÎ@¦(™åÐŽ�·iz…~3#ÀÛ/\@íp?þ|Wk>²WßèÖXÔ´o”“y¤uÊ °õpF®&Êe�Õ´@l0^Æd]€rÎgý™ŸÁ?N».: þðZàoó®×RÉmiQ`¬ PûàœS_é����m­ ˆ}º5}ßÈ`Ÿ›{BcðgÖ¡œ€l�;L—p‡Æ®¦Êe�Õ³`ÜÆë:ˆ^J£û±¬y‹8èÍàO]x× óõ�¦È—ÑÇA¨™ÍMñ.�å(°&à¸k‡aåt'2Eÿ>G�zð3�Šj·Ö„%nþSÀÍmøã麌KjæÁªáØ+¬�nû|·ÀE{-oÈÚËê[x<ûæy÷HÏ¿Gzè=Ò ø˜‚j?‡Ó™ºÝ!|Fÿ–s:S§­Ã}Â6Ü«®?@y-pSÇ>Á錭‚©+=ã÷�޼&àB�e£-íÀ#Ä®ÚYêfð·3:Õ~9W±î€ìää”»,P( < ^4§MÝÁ6oþ,J�6Ð ð“ÖHw¤ÇÝáàÃÓJø¶J”Álõ¹Ï—*Ì‘u½–ZO¿åå¼ÓÙ°®!J" 5íÏ·^t<‘ ÖÄÒm¼-çèÓ»wï>þüóÏ8¨´ar‚óãÜåßr.ÛäV9åܪyKyY ,°L ÌøYeC}0X›Z�à @)'þÌhtlÑ .'ã4:rÈyËdšesšzÈ,ïtKgÉeYœ€ÜÊfÉÊØz¢ýèî"Ó|8€ÂM9HåBNèï·¦�0«‘qY9óm´4‰é«xijKQY ,P¸ rESZ"}“`ð´€?;f<ж,u‰ð[=}ýʲԱ¾\·M·uÈ·<ër?œ·ýu½¾~ùx ”;ðbù›ì¸£2†ÿúràÄðûûû§š)8P¹ŸPæ¨dç3u´œ€l�[L—p‹Æ]%ÕÜ*”ŠÚëqXµý6ÈeŠLÖë´©ËÉøÜ.Ž€�5×qÛ¹Ì:(³ËA)78·õ\nydÛ:9ß—pOúìrë¢_W{¬îuSÀ`á ‚­j‡ªÐ`Ã��NµF‚M‚°×�Ölòø¤y$@ñ¬€cÐàÓx¦!§>Õš€>‹Íá•0Ç@U\( ¬–:€ºÔió¡9� yæçʵIÀle(‡§ÑðD�+äºæ™ÈÔ3…O>ëwÚ|Ëšf><óg¥]'ëvÛîeèèë?êÛŸ^¿~=´O€›ÃÀ_Œ‚×h€˜BÐ~AÌä} ø™vjƒÄ¡ó�r²å®˜.àŠ+ñ²@Y`5,æà¼A’2§‡Ê„hŒþ æµÔ‚æ;Ÿi.Ëm"ã|N›—é¬t[F¾/ô,dtÔsûH#K‡ ÷…4ýï¢Ä¶¼OÀ ɳO@¶ìdÐæÂ'Ò�÷ 5¨"Ñ…œ†å kð§Ìå™/YÖ°O_$HìâPñ€:*�5ZÈ&A¼x¤5Z0Yõ(#‘B›ÇÀ±caÑ,WN€­rZÀŒU¢e�²ÀjYÐrpÚ Š”9Ýal‡žÌ£®ón7Ó¶ ù6˜·LŠ®6Ò¢×.Ðò8>î¾¾y†€z)l©ÞS­ øžÚÂA )•zV O þüù“Þ Øúå—_X˜gGÖ~k˜!'€:ÖC§éC- Ä:3B93ŒSEe�²Àã°@F—@~Ž HÌN€y¦ÔiÓæ™öY޲¡�Ëœ^&EWŽô°‡Çy€�cϲ¤á™oj©âÛ“5âó¶`,•ççr 6´?À<Ö(¶kèŽÃÄÍ5¯5 ù-'À–X€–°€‘J¤,PX= N„LÛ4ù¾À†¦ÖcЇRÏy§3�Ưñƒ··lŠnGtÓßÇÁ1ã pÜmt=Ö ä~uzXð÷T2lÄšv ¼üEΔ îÖxŸxCµ—û€é¸ôËoèï²å|±ËÌT93Íóp õz8�y€=)û,÷¤·n[¿ûîëÚ¦Í3ÐÑ'G×w?3Í2mšz–µŽ«R÷“zN_‡öÕ�×FÚ¡Ï€?Áõ"ÓýÀËÇE»ñ8  ±&@i>„. Õáù¿Gû±&@�Ž)×z€mÅ#vVÔ#�|Á9 uT2�lo†ÈL�þX´~çY €yªò²@Y`¥- 9tà gà‡G€sD> 5Jp¾/=?®Û¡¿/˜ÚW^æ;o6È<§sß°‡m¯ °=»G`Ë3ó7�œÄ¶6º6.^¼xÁš€ÏZð©ûvÀذӀo*Ú0öVÆ\ƒ¿ YAk­�|9†)vY ,ðx,`0ƒf 3hÐM9rÒÈx¤ÍkeÌï£QiÁÚjCæ9=‹æ²œF/ùûx¹<§‘õqÛ û ð¡8¢< P>fP£x®Ç,”Ì…¨÷  ¬�bê€L~� G™ƒç‹6( 1HeËe�Çe€Šu¨rÚàe §ÌÀOÚàçrçÑ›y9Oº/X½³B.wzŠÌ,9—g™ÌëKÓO³m…v$l¯®œgÌðÙD¾ ÈwµóÁSåIÇ>Z è} þQF¹"¡�"cšZ޼ÓÔ¯0`�r sÛlÿùn»�‡¢ÝŽ÷¡Øýºý˜w¾ƒ«„«Ê_E÷�,Çàãpº~£Ö,O¿Ûˆœ�gÍ:¯’v¿]'ç�Ît(Mý¶l‘<2Žè°ÝHç`Sì�-•Ç+`]@Œü©/þ¾ò<ÿ?Uš/Æš€ï¿ÿþH� ÎY =6´o@{qÍÊgGÀ]C~Ê P›õJ ­“h9É•, ”–oƒäò5OkÔ=>€J$8�©A?S÷ÑõÈSîQ­Ë¡9MCyÊú‚åÝVŸ ¼¶<ç�δ/�õPîh~[Çå}|ì?Û-Ë»ÇÇ›–Å!Ðn€¼&øLéoT?>¬òeÙøìÉ“'›z5�5xbrò,€ÞF!äs°�4ý)'C¤P@2F%Ëe�åZÀ`·\­ÃÚt�ŸrÈ3h‘”è›#- 5ð#kSdIÏ¢QØóãz.¢­Y¡¯Ü¼Ls}Îç4<Çy|ËY[djtrûÚÎl3¬W ·”†Œ¯ ò9a‚ŠNYp±··k´6ð„Ï #؃›G™c^�åH#SN€­’h9É•, ”–gÝÜ—§ì šÚîÀfLä‰SÝWË@áåHœwº�Âë n£-£­Ya¨Ü}¥n›¶¾\×2æeÚ¦ûòð°t(ær;YôE ¿­2€]e_(²OëN´7À^€Êx5ðDŽÀ¡Êy}�ÀEäÙçûöâB¦Ï phµS3�-Êè qÛD×Üm7q«úW½ÿ·jœ5P>^>ô¡ò!¾ëÝåzmc úä3H‘gäO=Òô½�ô×<§3%ÝæÙaÞÿ«¯ÜÚ'kÞ,jûf÷EvæȨ?0G2|:ø³x²ù±Ê/Ø-Pù3í p,à\~Á±ÖlhF5>1ÀH¾o°¦­ƒ¿å%ë™,`=Ï{uY`iè7óLi,§ÉÇ�z†c �\%´òˆœ6HA þPÊ3ø“¦¿î³Ó9OßÚüP-7TÞö½•ë+7oEWŸÌ<^.'=Ñ�=)7µ¬Û&� D7´àB�¶ŸËöß øÏ™þ×:Ö ÇÖÁ›þ}Åí‹ægüys§‘ñEcJÈÀ Yú¡v\�òµ å¬åi¯ƒ. ,Çí=4çI;o­v÷Ý @…´hº7wb—ïÏ.Ëò¤á»�œ�”‘vÌàO9uˆ”þPê8Z‡Û¢ÈõË÷•Á£íY¡¯Ü¼!šõÉôñáÍâ·åΛb;§Û>`wÿ€ÂsEöØ—2Õ;ã1€ÎÁ UÿâíÛ·í>½_Ûà"qĈDò6¨/¢ÌžÚZ{' ])Êe�«[ µœ'íˆæ(ìIǯîÐÈ6]pd=æY„2dú‚ù–qêhÇ�ò þ8ä�ŸE)ë è˜Ü×!™¶|(oþEÿPü\–Ó®7KÆe™¶Î€í ­qx+€×_*²O€füÏN¾úê«C•Ÿ¨.¯žÈ8xÿþ},” †ää@É�=½1ÏåmÚ<èÚ‡rÖôàOZ¡,0dߨ畇œÀM_|�ë£2“È×åÏON"ê«0º5§{.£q­×P0è&¯�Áë"é¾Àu;¯o¾¶- %¢›º¦ÖO€ï‘¿©Û�æ4õÚ¼uej™Ì»Nšþµ¡å9?D©ï²œ6/Óœne)[¤ÜrPì-a¾xœ`î(ž+Ëš€OJ³&à�™?[Ÿé�Öàl*½!§€ )ǘ)�6œ¦Ü†Kž¸&(`bŠJ”Ê‹XÀÀP’&ž èOGÇŠP½Ç5:ûôiµ¼;îØèG~soo´ýÕW£í—/ÇôÙ³ÑöîîhGª‡ÁÑù?¦º×ÇË×w~Œ=_$3?ƒ?õМ6/ »r§[êz-ÑüÐ1¶|çMÑï´iæå´Ë¡‹Ê ×Ý.³/< À>:›Ìô_(~+þÙ³gÏ6õ½]&{çÿý ø´OÀÆ/¿üÂÌ@ž0è£ÞÀŸÁ¿M—C€¥ÊÛ¡~Ëe�,`@ƒFdä¬ô©€C�¾îУƒ�GGïÞ�NùetúúõèDñ\_|›ÔU;[ÏŸ�výëÑîo~tï›oF{r.ýGœþÖgPêë~!€ßý¶¬Ë)kÁßús�̳ŽL]>�—ˇÒóŽ+×˲óÒ‹–[®�šGœn)6…çØÊ ìáÇ爕–ï·ûðÝðËܨO>}út(À?E^—ÒÁ y•üŽÈfð7蛺 Z¡³@9u)”Ê Y` Ü:ÀSÿáèu­Ïþ�oÞŒ~úitü¿ÿ;:ùû߃žÉ)ð�ºýõ×£'øÃè©f xøËWc`€K3ñH :GÛ`r>§‘% ëþ€ Žå͇×þ®Íiô;Oº }e}¼¶^ÎÓ·Y¡-Ÿ•ÏeN›ÒƼ´Ë‡¨ûérë$߯\†Ý˜ØØïÔ™àí€X 2–¼zõê“v <’®smÌâ�#•ùu@.§YCRnªd[ [bÅiþó­ø¡ÜK÷»ý® @íIh똧šÖ'j86ùkÄðóÏ£Ãüctøã�£€.žw€ïÔçr¼@ûÆŽ6¤oSz6¡ 3Ṃͯí“󜻶”ùœRFÚÑN€eÂñèt k]Nç”ó‚ r> Ä®�|E�·¾ÿDëF~ôÿíoû¨2v äÒÉ ÏÉå2Ë<ò„|�À#�C±Ö¯–À¥Q¡,PXȵ3�ô‘žùðÐ�™Qÿ`®©ÿ ñÿ‘@]ˆº}'ª5#­ \üõ —oÃø3¿»'ã™núÈò8€Y€¡ {øÐI·Á<@&Oõ#Çñäh^K}Ü™Oº/dYÊÛ|_�Y<÷H¦-Ÿ•w™©ûæ¼ÛÈù¡´e¡Y&çÍ7mËàwez�¢x„E�̼=f± Öà ë-€�rx{À£þL¹\ þv¸ ìi» mÞüµ£å¬Ý)¯. ÜÜZš3Ÿô¼ÿÝ?Œ7þ[ŠP}Úm´%Ç|Ç�»´ÊXpªÿ™tœÉ`äÏÞ¾¾ÀIš™€s^€è ˆDÒØH»œúäÍÃ!pÞzɆ¨åZjyóçå-7‹ºßC2mù¬¼ËLÑ™û˜ù”ÍË#ã0K6—µiòD¿ô±S Ÿˆ÷Rà?Òú€]ñ.xðÍ7ß¼Ö8x„ž8Sš cüUtÉ ˜ðÔþÚΔÀeðŠuë~üË>÷óì™�`¨md ˜ñì_#ü#�ôYðw¤gþ;šöß`Ú_ ·5;ÀÍ…—¼¡Ž¡xÕW`FZô¥'¹ã×OÑ͈_¯^húÿâéÓÑ®F}§z+€Ù�ÜMÑãÀ±Ñ7c{,m9õàYòmçM©“ÓäÛЖ·yäûx­ž6ïãjùηåm9óL]wˆöÉõñrý¾ò–—ó¤S^ɸçymÀ¶ò8ìØè-€—š x*§€Ë ž�ŸË+G;(tä²óMuìቱî¡€u¿êøËs,h5 Єò®ÿ©Fðçr.ü#VA¸w@IDATÅM�â75�¿­rîÐŽž¯å®KäîÌ�{*H?ë ´l<àµA-ùo$Ôµ‹¼ƒ£}ƒoj~¦¹ÜitøØ YOæSÞæ]ÇtVù¬2׿*µ=\¯Í·ü¡r誃 ñ]/Ó>ÙÌsº¥èG€op]húÿ‰pŸí‚Ù9ðçÈN€�~õI.G@Æ#”0¶Cý–Ê=0hA13Mψ€�~Î5ÚÇÐî,£ �ö–ø[ln,¿#wj€ßÀ¥�½K?ºµÃK8¬ `MíátÐ@P�Þ¥rÊ 2оÐÇw�|œYÎü¬¯�—ËÛôuås?Z�}ùYò¹,§ûôÀ[Dæ:u³^§M­�¼"'‘ˆé¾€Ò\ZÄ þyôïtß,:í(Y¡€ºÊe�¹ÄÝÿn×?íÌ2:Ó £-Ñm ¤‰y€¥ÜDîÊÜ‘Éì Ÿ­ƒÏú€Ì([ K'm ½ÃËërømÈe¤£ÍÎa°S×móóø.¿.jož¾|l}²my›oëÌ+oåÍ·zs¾I+»±-‡*²õDØ¿«ó·ƒ}Kù¾HÍÏNÀZ;åpYÜrÐ|©…>Þ%¡5f\÷F¸Æ&[Ú¡÷Ùûù‡ @ŽçòX_°Ú_Ïü ùnÌ]:Gƒ?ÓÿÜ�‘uù¦ôk˜?º�s¡ÁÇô?΀g$ÿ�èuH·ÿ§6‚úiùÖe~ß±» ë¸-:ÔöUÛó±Ìª·ˆÌ¬ú7)kÛÈó@ÛCœójéùKvK¼|™å47Zòú|ã%màwÚô&‡³Òu˸åÓ×^Ü·Ü\©/ \Û-9Ÿ)éÈwà;¯1î¸m¤ŽïĦR:Ò2ï1à øGŠ|_ b7À)GúáÿWN÷õÉr”åtÎÏÒÇܧxɼ›¶ÓÛP÷•ª?Ä¿jÿÛ~´ùÜŽtã°b?ƒ¾Ó€ù¬hU}Óà«Ýµ| _·@g]Ì·Ð\©, \Ù}7ìÌs@ÍqF‹-ðç|[-tôÝ:€püü¿[@þS ÆLi÷Åéö?ç¼in·åµù,K;�)Ì:Öëg¶QN[ß¼6ç•£‡Ñ30 ô)s°\߉ g@í¯�P€/�%ÓE.æ%7YêÊW²@{“Ê› O#÷EBÔ“`–Îiôħ„õ³�Q¾1À@"ÿ)Ýü/�?íÓ7ÊMsŸü_4í+˼¾´mÐW¶Š¼>[Üä8njŸEú£6较{K9$ó†/À¨ð±ó˸£3¼È~G]©fÖÀW½!gy§3uÚ¦Óª¼›5:Ó¢ìS½–}Fd‘ €8¨yÖÏj¯Øb  …O¹c”ñZž£tŸÓ†dh»�bÏ´ïÿ•y9M�yydrhåsY¥§-À¹º©½\ßT: þAÕb~ÖïÇÐ2ø;m:åæJë”.`�ÎvkY Çܰœ¾D%` ¤Ðÿ‰vé;Ò§}Ù°‡]ÿ¶5bßÕJ­z¡—z8vÈãð5>ôQ:q&Î¥o¤ �6¤sC›éý/ÝêÛûú4øKE…d@Û×ϲ»%½v äÙ0/Sº@¾/Àÿrñ÷ISŠ�·hÑ9(`Ž�j1œY�?âMÂ]ë_·þÞäÜôÕ�g?Ê#RYé©güÊŸ ôõGTðÿ °ÿ(�·ð“òÄ(žŠ¯Ï÷�v5ð@×+|ë3ÍœjäNˆM{¤;ÖH†E~Þ3`CSü;¾ÀG@¼-9;ª¿£G |óE߃�ôy×e4<ç§ÕÑæ©ÞÇËjçÙ;Ëö¥[ýËÖ×¶y×úÛã›ÕŸY².c÷GÒŠ|u{ßMÛ2˵]¨¼,P@]e�·ÀÐÍÝ|(1žóCÚS€ÏÂ>�ù'ÑOþÏPÅÏšöÇø¬Èsÿ×ʖ븫ò&ç·E·qHÚgp^íãk~8Ä éÂAàM�c�ì�Dqž ô·äljºK¼-ÕßlFüÜôÓÍß ÐK9�ÈÏ my›ŸU·ÊîǺv㤚ªäó‰Jçg™Ì_ët9k}úëàWÝ{Cyø1"x3"g¤À;²¸ï­@þ]GY娙€CÉqÿOŠ§Òµ£È8l«Kë“mc@¼cftéÚ$j¶ f4½¤¸¯¸©çþŒö÷x `[£þpñíMý�#àãoÁ¼Í[:«,ËUúaY 9t,;9=Ôér˔Ф²e�U±ÀØ»ÿ.‡=íÏèÿX£ò}�ó{=ׯÑúkE÷ý£‹U~¬:'rˆ€>#Ó]5¢UYá0 ¯¶��ÿà/b[ºwcÊVëN5Ú?úõ¯Gûzæ�°Ç›zdÀÛŠ[’ñ �ã,ð·œ�»Íg>iÊ+<| èšåD…‡Û¥£Ó]:ŸÄœ~øö€zXÀ:¹+·}“Z5ý�­¿òUÂ,ù\æ4`ψŸÑ>ÑSþÇݳ~FþïúïÐЉ >Ž#ýXÉ/=Pëeý€«ýyçÿX#v^Œ¸*nÉ�ØŸW÷OîÇékêÿHŽÀ–è‰Fû¬ 8e†àBTþg¸ú¢ûã2çMû®�>žå—A—­ÙúÚc¼mýóÚ›\_­`ÊK¦zòæ9=D“¦JÚåØEËÔ³nŽ.Ë”4£õ#�p,êeóžÉó}�ÎIØ3õTyžóüG8 ²¯~�{1”gÔOÀÁ8 ï ¸ßkô~”^ÕãÌ�剸O¤‹ÝþΑÑhÿXÐèÙ± ôñ8�·RŽC¼Ì'Ý[K[¹Ê¯†tmðs‡ûx¹¼Ò(`À0Å. < Øûúâ2S/ò#ψÿ@À3ÚèßidÿJ^eû{üA‰<ç?àñõ�zGÚ÷]vC Ÿ‘ÿgFíÝï2rWÏìÀŸIŽ�ló‹Ì¡žóŸÈàM€X(~Ì H'€9ô2ƒÐþã¢qY›&ïЂ½ó./ºòàRôå¸òsŸPÀ}Z¿Ú. ̰€�½OÄe™’ön~§€9£~�>Óü¯ÖT?¯ð1ÅÏhŸ‘þaOT7@=@vÄä‰vÈU¾-=þ¢”ïv#{ÀŸ)~¶ô=’à€ ñ˜eð Në x¬�šîs†@Ýü–Z´Â£±@97<•åÜЀ‹T÷Í(ËöñrùMÓ«¦ÿ±÷×@½ÈymeÛ<:üŒß4èiônÊë{oúoßjÓžxÆß�?ŽÀG9±ÈOÀ¯í-бvIž×ÿûXÀè^`ÎBA-:°†²#`Èwå¬ð?Õ#€9lĆ@Þ2˜öc¦€ãr?p¸.òµá´ù¦®6D]o¨üªü‡®¯=že÷·ÕÓ|Û¿¾kþ¦mTýË(à²MnÌÉsNßXq)xôho|9ï4”Ѻ÷ê÷~ýñºÏûîLý3åÓþŒø•gÔÿž™êJ[õÆ¿E¬Ú�>ÓÿÄÍŽzFê“3�?� XÙ�pnð�„˜=RÜSd6 úÓ�¿�_Ü/aÞi^ùM•* ”°@9K¾â•§NgÝ�–lÜG¨Î Þwh.Ëàh½ÈÏûõóœŸw÷½ �güЇ�c ‚xÎ/€Ž)©šŒ¸û:�xýôÌ'ào9ñìÐOù+²à€�‚˜-اå�Ã!éʬÒNÀ¼ÿÒ¼ò‰¾J”Ê ”01ÅruCZ®=£6{ß±¹,SÒ'”ýúYåÀ¯)ý÷å¿}ÓQ�ö?hÄOüy¶‘:zº†Mûú‘y' ý‡Ð ÄX�þ)Æ €Fù8,þã¼çÏ:¶öÝlé``2�%-ù e�²Àò-PÀòmÚ«±‚^³<¦�z‘ê“my~¶oïò xù“fäÏ>?{öó.?àÿ¶£X(Ð�(y¦ü¯ZyòŠýüc +îä`]È 8×ôÿ†ÀÿŒÑ?i9@²€>; âxMo Äq‹†]ÐY¡,PXºÊXºIKaY`Ø-Ð#i4 N ?ÑÈ�çû'ŒöÅ ÔýœŸ×÷˜âçC=ñ.?ÓüŠñ~¿d÷UÇÏúÓ›†Éè_ŠÂ 5øG™òn<žÿø¬PŒ´xdxÞŸ Vÿvy+��Šbm£~E¶»¨Ü4ê/á˜ÐSa9`€Ãù1]ŽÖÒrÛ(à¶-\ú×ÚÜg—Ü�&;÷ äéù ��Ê3~žëCíã érl™»§ý›Þ}ªÅ«Z €«Z¬ä…2p,r@-°Ì«ß–·yÚ¤á{Ïþ?9”QÿG�}D_iùþ8±m¯ò³d?‰2’^zPÑÛÑ>'`Ò¦Ûï@>Fú½Ç3þuÀŸíH�Ýkžûs Ç:–˜Á`ô¯cÛUÞ¶ƒæè¶áe½æÏ¢Öi™«Öw½¢e�U¶@9«|öªïײ@{ó¿–’•Zýmžª€¾7í‰m{»é|^ã‹gùŒüå0õå½þ˜öÇ1Шÿ³ê³‹ Ù§F÷.šLù°Šyä?QBûÊ„£à>y�>àï?£þYѾ€Fû,ô…|rÙQâ8ó±¶yôÂëó!~__ŠWX ”°.gºŽ3,�ä6LÒêÊj~ÎÏ¢7Fú?wÛõþ"Êÿ¾œ‚¼O?Ï÷#v³€?ñÆSü†ðˆþj+;úâ u'#y õÇ_óëFÿ‘Ÿþ4��pØQðPù=Q¢ß Ü¶tÚù�î;9=«N••ÖÅå¬Ë™®ãœÈm™¢¤Yy;Çy¦ûy•ïçOŸFûø1âk9¬âçÙ~¬æWš:€$Ñ£â¥<ãï3ˆÚØüÕ6;ÿøw¼É8¾“C…GøÐMfì tÓÿ}͘ç> ‹Õ�xåÑÇŠ=sœÔíøzóM©ã²œvyѲÀºZ €=ó¾¡ uŸÝMÂ]ë¿içk«¿Íßäx[]ä±~P¥0¦üÀ;Pãµ>øÅ¿(ëùA{öG”#ÀWûbaœêBY(w—Á‹û¦¨™Ç­¾AÃ!0à3úÇ蜡ŽG†Ñ>ß8eô�À G8J³ŽÀ6EON;ÏyŒ~‰1tN£¿’sè“ëãYê62ï*éVÿ²õµ}¹kýíñ-»?­¾Ê_Ïå\ÏnUk…,ÐÞüÚüM%ëšJ °bÓ�à¡“ýú5âð癿@>^ã}«ÿ/šøEi6ïôüÔ¹›¹r79:�¨úT²úßéK%c�Ÿ,úK¯ý]’ïapŒ89¬ð#Ò^N”òPf"lk¨# CÚà“Ó¹I—ÃËé,Séûµ€Ïåýöâñ·^Àã?Çk}„€@m>—]5m]¦Ôw âlä£Ñ~¬êÜc¿~@_SÿŽ8±ØOŽ�‘éþé#¸j/¯/ïÑ~€¿ÔxÌ»v‘c O6þI‹Yt°)�p¼1�gøÌñ$j†yÛÚi¨�c¨ÍÌÏi5Yá�YÀçò�uëQu§€Gu:ë`² æµyó¯C­ËNCc•?€�÷ùy—ŸÏó:¾–ðZ ÿ‹"Ðg´ëˆð;^§�7® JIŒüSú’Þ®¯~õ/öûÏ3iºýRÝŽÁqz€4¯ÿÅÖÀ¢^6Q[8ØØÑ:�7pdjÓ[¢è:[ €zöoûµêúÛÓÆÍ(´eÎg˜7¤£å#O4(ùµ>ÀŠÈ4ÿ¾€�Ès~Vù¿ÁÐ4?N@|´G2oäYèwŸá’õ˜N×3wzNÏ÷ÕÇyhêaFþä‘Ñ蜭c kÄ[$Ð>m¡“µá(m§ˆ…ˆØ›èÇ>ÐÜ'Ò™'u3ƒëκBáC××ʲûÛêoóóÚãÜU¸} ”pû6®nÙC7‹ÌÏiw§�ç²Y”[ÓÑS>#}ÅØ«0W Ð�½ùáãt�â1€ÀŸ÷ùy—Ÿiþ‡Ü“ �©vEœú¸­¾rÜšÞmèxC[¨ gaK²|î—Å8<‡] ÚÆ ’Çã€ØHmy& ÞDPži/Ú¥í&.ðæ�Ì]*‘²À£¶@9�úô>þƒãFŸÃ¬|[æz‹…ëº5‘gü|°‡�õðŒ?¾Ì§‘>èáC=ïåDTÙgÀ^yf¼_?à€;rÏÔÇÀ.=Sޤ«¦¿í/7ð¡0¹é  €�(£S¨eBº¡.ÒVLM3BUŒç×ð(ïB´ŽNò¢è�éþ޲º?žñîŒþy…à×ó}(ÏøßIæ­"”‘þCÿ…ËáÔÏõ›±8ÛÅ–’‹íU»FH6�yü�\Ø[‚8ŒüÙè@öÛã<ÉùØÁQ›>¿C”sI!Ÿ×`ôüXÖEóêÌ+·žEé²õµíÞ¶þ¶½Ê¯†Ê¸…ó”ÿl9} M­�Jߨù�ï©À÷ªxž#£U`!€0u Å×鶉»»Aãyu+êÐÀOd šé{Fû~�Ÿiþx�_}ˆwú™úW$ýI²ñ:ŸtX« ØÆ@@4¥‘p¶·t\< ò`òÜßv4¥Ò6gäøêÚá¿Äç�Ÿp^óÆ@Ù )òþïùš!o¾é»Uâe�Ge�rnñtút‹M¬•jßÈ¡1/à=àiô}¢xª´ã…€z»€�€cS`OÜPÜyòd´÷ôiì8ÇÌ€æó�ŒøpŘæ°Ççyy¾¯èWùÞ(�#À3~ ʾÞÒ]=„Ã@v‘gÿþØBÑ#zʱ<ÞÕß%†C ‡*-å±éMB8]jç@m|ÅÉ`ôÿDv¥}_­@›w_/>¯æ»_mÞü¢e�u±@9K<ÓÜŒ|Óq¾èÍ,à›¹)3€ÿ¾¶Î=R}Íä|_ú¦}®úe�U³@9wtÆ|ù£æV®ߤ‡:N97y@z,>z÷nt@|ûvtøáÃè'@àåq@ëlvôìÅ m9w8ºÐˆÝ;r b”+ð‚ò ÚdÅ>ÓÐùwøC_+þCNÁ?ÄÿYô³úµJá‹kô¥×ž`t3jÃA�hÔ“mX€€38Ç €Ò±ò_r7½Þq â Ké]µÅ¬ �büú%mp®Zð÷ùšr_Ú|–³ŒyEËë`�rÖá,¯ø1rãæy<ÏûOˆ]ÿà§ŸF?þôäýûÑ9€.`ÞÝhOF¦šú?×hÿ\ôâåËÑÅ÷߇Ãpˆ<�F˜ŽGªÌ¨þ£ÚƒÆ6½j×ï�ÿNü}ú¥þ=Š @  ¨Æ( Ï�ãÔñâXŦ@¢Œõ·$Ç,@,´×¹&Å¢¼†ˆm�E9±9öÆ P @yœ•¾��h™>à‡W �…–lgÓåh--·m�rnÛÂ¥ÿFðÍ›Q਑ÄׯG?ü0:ü¿ÿwtø?ÿ3:Õ,À†™¸©PM K7û˜ÒÀ3�Í«mg_}5:ÕlÎï´o|ýu8rF{{£}õšgüoÔ&'€�ÉG}”üD«´Èoèd¸1Ú˜b«ˆ€§âÄ �cVEÇ�}]Fý€ŒþE'vjlA>�NìÆþ±'€ÚŒYÙÝmÆ[ô™óœ"ÍøúÉ`Ï@•ùÈW( ¬“ÊX§³½bÇê›7ÝÎÀgFÿrŽpþû¿GGýëè\yvªÛÖÍÝß®§žÁ(¦µ;@c“™3~ÌÈš ý… \èQô£x? ø”ƒðCç0-M?üŒŸÑi<÷]ù ›ô­0�ãü}+�maè1 €Œž%,U¤»O¶Vûñ@}8¥Måy‘�ßé òùZ*Ð_ êQ1dïÑb= ”ð@NDucÚù†Mú\@}Âè_Ïü?ÿòKLýŸèÀé?þ1:ûùçÑ3RÁˆ”‹P"ŽyÀ�MmNµðäùóщ¦ÿO43p&'àL#}âÏ÷ã¿(¯ôÍ K¾™m\¡0ÛoªZê§Ý('iâ çØ)ˆ÷ý¸LÿÇè_lð@y@`ë>auúäM�Xȶ˱3 Ú‹ñ8Þ¾˜A©;Œ"w`�ö¼ï /ÕİʶM•Ü¡|£¦Iß,LᱨïøãÇÑ�ÿÓßþ6:øûßGJ�ÄÛVÀ¯ÉûÑNGí(€�Ø€3 r*ýc�òy›àH âøQà´?¯ô±ðÐ ÀrÚ¼J£ï©oÎà‹?¼üuRbÔÀ/{p㈅²“§âÛ›~jîZI÷çÍ3-vx[ë¼ì €¿‚|mÑçû¨Ë¡Ê�Ýå<ö3¼âÇg'€Qù Sÿí⹿€�7oF»8¿�€|aÙÙˆ<€& ñ`Qá�€ÏâE¨|ÖŒÀG•ó.8*£?øsúÚÚ jê.’7øC'�Hè—À_²Œþüe¶äž±ø¯£~v™N@î3N€¿ È À±ú¹%ºÃùQß ö¦Ÿâå~!“óÈV( ¬£ò}r�¿Žù�Z €¶ëiÏ2Às9Ï4rßp³âàÏ‘�Õ[µ,(Ãð Î|P|/þg-ä¹3«Ï˜ ÑpP�Ê9}ào' œ‚ì¤cc$ÀªãçÙûd un!D_¥ŽY¦þy+`‡ó§¾0›càÏ4ƒ<üœ§«æ™Â«PX' ”°¢g»½™µ‡ÁMí&á¶õ/Ò·| ±-¯Fë§êxןÍ~”1l@’R.hGÚÈN@L%‹˜d[šþß‘¾f*[ì Pa‘¯ ö¼gÎH7�–IG€vq—L~'gÁuT2$;©¤„û�y³Ò“v:¡I•wY´«~�Ÿ”“WÌ;ÿù˜r{1  ïý+��§^ÿËnšNöBç§�o*ðeÅ•óÁ¡]åûf¸vräz&?ïºêv[/_›Cufño[_Ûö²û{UýË>Þ¶ýÊ_Ïå\ÏnUë–,0x£Ò ÜÛùÆŽ~lê£>0* À"Ýé&|@ÏåÔÃØÓÔÿ™6 "ðêà†òJ £Û=�ž(B¹�eФŽ•ö§@ÖeP,tÌZú來®=Ú8¡“v•vͧ^|ø‡Q<±'`»°›(�[ˆØ e·yÇðˆ‡�óÁ#€½4 Àc®Ÿ6Ò7xq;šûÛ‚S.«ôýXÀçê~Z_ŸVËXŸs½ÒGÊ !¶íÕ{ú8€ÿ†;Êttà cæ„ð XÛ€‡!P¾ÃL€"[Îò‡Øad eo{3c%`J^!”DÇ›Tñ^(£ìÈS�9Kû�Å|ÒíÑŽÚô?ú±+w¿ƒÒ79:ѯ$Gè+ ��bÆDtÙý—ÊÞ€p¬øY¥¤ »:?ÏtÎXÀó( u�3ø“®°:('àöÏU9·oãja p“žPñ%?MÍÇ €œ€µ ´ jÔ�ÚßÀﲘ�°£‘ÿ=N`6pãƒ3;ÒÍWç þú»©ß¶žÓokßsE@|C#÷åJ Áh�È­ÝQÉ1_:¡Š~=^cC6œ «Ý x±ò½ã¡gþ¤�އ."ý ¦\ih€/:£iÿmá»÷Ýwñ!>èÀi9àÔ(ßN@ÔÕûʱ²_ÿˆžUÿ@›}�î÷ÚèƒÚù g#ÞD n(KÀóm*@Fyœxá`ˆr ø€°"}¥ÍÐé›@”Óª7þŽ©äÂùõh?Ú»#{õcîNS™´iæ�¹ã~ÈÎ,ÂdÅ=«ðc‘¤ÊY Éš‰m(yÕ‡w`±ڮô™cŒÍ�Ô'ö8ƾ]x @ÄAñ5d'`üÍ%õóà,p×Ôƒ;È{èP9÷`ôjrؾa›Z2€nô�p!àßÔ´ý†VðàÀ ä0†�RÇ8 þÇz„p¤x¢iþ¨â©â¾t¿×"ÀwrÞ«ì“€CÕ9Rx¬Çú�Ÿ€0k3Œú9@1Füêg|‡@<äØ àïòÑFN£¯k'ˆt»½˜e�N;ð—ÌdjŸJäÉÈ›:M^m;†ÀˆG@”v þ»ÊãpðŠr¼�Ê/+pŒ„˜ÝP𙀨@mbkúÀõà…‚þ¨'yç‘u0ø›š_ôþ-�ïœÛ ˵@9˵gi[‚òŸÞêò À.£~Evdß~À@"팹〓Î8Ø�T×ô3€òﺸ/Ùøf€€‚ѦC{ r».DL�G-ê*Òÿ˜üå\°�}¼Á€uL°NÃ�ÈHV:¿ôâËqÆñJ8¢áàhp³¤m¨Óä P§ÇœËù®OFë`Æ3ÞƒŸ…—´ËÈð?Užõ„8wÐÈ-ùGmÐ.çƒœŽØ sˆ-;ß„0ÐgÚ‚¾{—ùæ}8¨ós{碀۳íDsßÜÇ›TXBbÕõ·&`T¹­‘ù®FèO¿ùf´¡÷÷Oµ3à©>|ªï0=Í;üìñÏwT“’xLÀˆð×HÿHSþJ;~”î÷*ÿ(p&Ø °IO›:êÆy@—ú¯Ú)M_bÚ^ F?Ãi° Þ%@uã�;ÔéôUÏLFþª3üèÍÑo‘ÐõÓN|™O6�éwéˆã•sC1ã!ù–q=ÚžÐx 6èëXÀ#!6bê?_úªýñqû˜®Zßõ†è²õµíܶþ¶½Ê¯†ÊXòyjÿhm~ÉÍ­�:FwÛè'r˜‚fúÿH«÷c €ÿL€~ª��)òÑ ›¥p®º§ÝŸªþ©žõ‰~è�È”ÿ'ñH}€*Æ&6v, ›¦nÊyêÅTµôÄs@Ÿˆ^@*}KÔéÒæS6)G¦ËC�Ž6hG<èG·Ûq[PÔé1çKž6ú‚ù®+Š$3€ï�Òôa—rµËFA·ÐÌ‘@cg@õ�7p xa"×LØF¼Léyþ£äû¨eŠ–£Ê¸…³jÐ7½…&ÖJ%vdT¹#ßÐxg$'€}úO¸�k4¦/ž+2 �oðÈ_¨î2ýŸÉ8ìFýo~žù;2ý?ö„ôDìÒè%O0çÔžê3JeJžG8¤¨ÅŸ±t‰F@wÇ P3(å]ô£׋c•Ήƒ¡vB¿in�FÈ÷…̧­œ·<<ŽC6€ÞxD€¼øLÁóqžöŒ«/ƒrܬ¯˜8êkXŸ°§ˆ€M˜ h�Ú{¦ckóȆøãÒú- ¬¾Ê¸¥sXà¿ÃbGnÄ|ù-f”g Xøñ‰`5³©|ŒðEyŒí‚)› áŸk¤.à?g@Ž£þ÷Нý @¨+ËE`2Fܦ”)žeDûBLóKo€7ú‡À %˜Žsò´ ë’õ¶2È8viìAm¡Ó4·ç¶L;Ý—úúd’.ŽƒÑ6ý1àøëLúsIñò´kDc@ýü™•z@ëî´ý�šgjùVnyGQšÊ÷k�rîÈþu¹™¡±À01ÀMþDkõ1]È2Ú ;KæŒÇT˜!ØøöÛÑ¦Þ 8Ý–#Àf?ñE;êªN€Y Œ. ö‚ÔiG çIwm„|—�Ñ¿t�ž|é åhÓ�t¯+�ºê[Ô�ZÖiäÐA·gê¶3µ^¨ƒÓ¦ª�€�èo0#Ê|xv¨¾´ë¾é3½‹·Ôß >Q €>͉ô ™Eú˜‚¨P?e�Gb�rɉ\õÃÈ7dKæ‘&ÔLuokԾǔ¾FóðwÅ;/žñ àÏ4 7x�¦ù/Ø@H#(»ý1� ó'x*¹Oš5àÀg¢ ðàéø˜ P;HŒÈ»úè¾ó´)F¨1•Îù#§ò€td”ëôŽú%?+dù,KÚy§3Eg.ÏyÒê÷¤/–ƒG”=ràx°�¹Pb^ŽÎϲz±/»ê}�Ñ�(ç§À_Ä!ì{ à>Ò'ú×IJ›7Ôï!>úÖ5d›Ùžëj‹U:îrVél=ò¾ú&2t˜”¾@ç¶fvå¶p4½¦Qý©ÀÿTø9g‡@@\€@d†€uçþ Å]éáY:+ÇÙUnO Ï×Oµx�ÎØ2ÐKÑàW:<%ÂAH @QåÓÙ€Á@dÒÏ„�@ÑÉÚ@ á„�IÁ²±bÀqL2ÁC7e¤»~™5¡Öaùœwa§ûä²nÊÉ;Ê^Sm«[é!£ñ˜ñ�<ÀÀJ]Ÿ¿È,éÍœ¯cEÚÇ`6 ηúkð7ðÓ÷ÍàÞR© ™Ûè3ºs°}Mó±>–c+౜É;Žö€1ç\‹;Ê #{nô¼"h裴KÀ¿!àgÔÏãÀðÿ¤ø=ê #IÓ1”}éि’bDA€¿Ò1’Ê¥“}gF@¼pt Œ”‘íçNjB�u9u]Òò}Ár}yúH �È;ÂwýN†¾‡ƒ%™°™Ž�\5ƒp':!>—Æô�¶ü²ç¡Ò,äµD€~†½±¯Êû"ÍÂGÎçô¦}»â¡¨rVøä=¦®ûoœ›ýÛ´G¿˜yÁ ð-â< ©‘Ÿ­|v)º9ÌÐwί$ʱãUNö$@&®9xqÎ;ÛÑOGÊsuÊëb�rÖåL¯øqr£nƒyÜÜûå9r£'5Q—OóŽ>+É‘ñÇxO›x4ý�L¸œÐ·ë³�@Ÿ=ê¬x—¿‘AΑ¢ìDš~)ã'w×–ÛœPä² u‰ð²žN¿«¸½I¾MP_‘þðØÛ±50öâÙЧ\�êò^T7qÄ‹t§Û §kQ¿'iëu™©ùPx9ÊùáØãø8FõïR˜wì]ìËèð‡Iíø‹ÀiÅ}ýrÙ‚;ÓS"–@m³(�·öã»Z,Êù¦ýY‘ëƒýœÓ¿EdBYý”¸Êxà'h¨{¾a •s“ºI¸kýCý5pçþø €“väx­ybv,g'€çþ¼;èIö%àe°�.ž/óz¯²¸Œú�K KãsB@ŒtŒ¡¦VžÀo¤Ôƒ?”vìж :ú`ñ®ºö£>é6Zq–3/Ql£ñŽÕg¾Ëo(�Sûœà„ :ê4êòy&ïÐÇ[nl7ÑÄcé<ÐùÚek`œ»x;AçÕí›úz0¥-ÊÈç´yPË8ošeÌ룭Ü�¾¾º}¼V_+sßúÛþÝ´?íñUþz(àzv«Z·ln¾I8ÝÞDÚ.ØíPN;ès´N×aûÚ§zM0žõSGñP‘çÿû@'À0¾�£v Cÿ�½ó€—æ&ø~½îÓL7½w0†¦Œcº!ÊH¨&TB�iÆ@L/!B B ½c:¦ƒ{ûzæ?ïæ60]Vÿç ó?ON pÅ0L£IØgŠÒHÏÊvÀAjÃPÕPPðP< {P5ìi?Àƒü¾#.e%q!µrôƒ28ÒÌ“ž,®Æ\y—|ðPµ¿Äa¸ÏC@òJ`rãâjiÓ’¤Â–„häg®/RŽ~*N„ ½R €„!¬ LN �~9!ÐäÙû`!é8{Î…s%â7(0»`JÇŽ §K7íðSür“tZz‘FÙA>-Ç3ž){Ǭ·Êí‚{‹ÀgƒYÕr" wŽ ÂX+{¨êF›<í¯ì$AÓûžwÆž‰{Gºw{ö«ˆK(w;êñ=B¶V @ðžôÞ3íèxÉ3í耄Ðd�ÀÛ„°&c†-‡mCÀäu;B˜>Ÿ—æ+’ôB@ŸÆ¤'Nû ð ÃMŽAïnh@7t ¨ €M LØ÷Í’f ßÇm‚·†3+tžEœêkÔPž1ÂÄhM ž‰‰3ü+d4”8¡yDU 8!dØã‰‡‹œ.b¬Öjxúíq{$}´v€ã‚BÉÙ»D˜:ÚÎ¥§å⹌ÖÍJG©a)À°‹ò‹F› ,4Dr®/cq ©ç™¿MÚvSÌd­0ˆMÂ@P³�Q +ÿ³„¡¬-€±˜?l s!ÆÛs´§¬‡4ó03’=[aZ¾…>�zÀ0oÏÏBêXÜBØ=oë))3ÇnçpW†zÒ}�a¯&½[軇PÒVÂüñ2çÚgÆ úÛè¸Ê³mËè¶‚Àå8 †œ\ÄÒŽù5£ç{jƒ@¾”³wC ~¬aêì}JÓãy4 x× f£A_ÞµBX¤ñ÷/u(ÌüAø2©z—–·I×B+K9KË…¤™§Ž•Ñc�0 ɇy`óÇ&`oIÇõ5{΄¬j»vÆjŒÊD¥mí#ŒHâÊ| kV°Y<©� ñÂ�ûqÒ3^™©´»’<è =ŽxMïÅõ™4Ê÷¾&CÚc•Î×w ��¹G˜ÿn¡5gb¿žg¾¬h€iØÓgeÏ�ºœ@ý¯[’¦žô�2»Ö ùzäù�Ô¾")_–\%ŸÕâWɶí)|¡#[l;¤.÷n¥eì™÷Ê»ôýMŸ}Ù6â]ÃoÇ€1y „0šÇŸ¯="CËt2º¥[˜K4¬.L`EÈ'‡×õ&îÍÂxöæt¾x ˰f?WB<+Nü¤œ2^iL™¤´‹–œ®¶·¾0@<õV˜¼É'”>ª—>eÚ¡œ„°C,üõ8ŸÐ œÐœôWûR¬ô •:´ãø›€§`ÒzM²„Z8à%8)£á@Õÿ½í‹3¶@Xª�zl \¬ìy>ÅQC> ½C˜ý…â×nÞ\­Ù{ïj­|Qr­„kD(@3 _�DæB€ ’ŠLü¦”!t<0ƒ˜NÇÍ/Iðž¦^ ÝO¼>^G«Gy<{Ãz@˜ ŽÕ%€½…qÀüaHz¬M¶Xu^ y|�nÎX¨1;¤}œ®À¡�ø¡40M`˜§/x{&¤Œ+GûJaŠ|x À†8*yÜv�û‘2ÊøåI«”S@BXék{„ÒGY…sŠ@�Ò>$Ô¸kf¡ß¼¨çÙ¶Y-ÂÃ* wKˆÀ¶Cû ñ®Þk¯jý�ÎyÉã*áu"Ð?mð^𮤂€½?>•¦ïeÃ!,Õ£ÍÖ(`“®ôÏÄq~"öqò|yžq6Á¯A ,?ÇÔ`hûÀüÅ«E¹0 ˜ÌÿLÑ LÚ© �šÝíÛ \Wô$Ðÿ:OsÒeøÆüM Ýòœ@ÝXýÃü× }T/åLb—Á@aö*”X[½�tÄ,Bcþ¦‰P!@à£__žÕI›28swRÎò€'LþÂóÎS‘„k/¸ Úuá…Õöˆ_!ã¸Sêé±D Wí»oµQÊl’º»d;€ÓôÆ�&ȶhAÀÞžqöù�ôô}#-\P`Z(À„F‚‰!ÜèHéÇÄjÎò,­îÙò¬n)´ žò07n•ãT»�Q)óøPÐÙ"¨õº<#(�w1v¥†KÏá­ ”÷ ZàaÐ<‹×Uw/®i0IsVÇž©k ŸÐ¼¤ëJÝB)¯ô€) Œõ²ú6¿@�:¬ê�¹CuRÚ×ò¸-�#�¶%Ðï‹”£,·W@pQ�€ÀUa¢g�0ù5çž[­:çœj¥„+Î?¿Z!À I_)ž-tÒ ŒD`ؾeKµJ4+d  ’±fœÑ­a@ï �²Ö{×€aŽA ã»x® 6õ·‡×v\{ãŸô /m«#.øë^7 <;zôËøz‰€È +s aÖzu¯À`å¿F`¯ƒ&=O>L^÷ü&B4àÛ „&A;Ê€�®ø%D‹¡WKH{äÉoÖ]<¢½lÊK=èÏ)‚ "Œn&¿�¬ü÷Æ¿Iüaþl¬a¬z4Ò> �¥ï«¤Ìî³Ï®¶Ÿ~ºêÝÒ?5”­pç�à}±÷"EÒ¿S”·wËÇÓ:Ká9í÷RèÓrèCŒ²ýé-ì ‰Y €MDi¶�…Ÿˆ}<-oÏV�+‚¹„Ùóß.LÆu¶0V–Ø Ì­/µxg?}fc¢•cSf/iÆD,mž e´õlÕß ukA@ÂX�ù¯80|®ï5�P@!ÆN›ÐUWÖÆoÚ˜&^…iGi+ùàÀ×û[Àßï}øæú1êâ$d[f£ìïï%Œ«„[…™oÆ¿EüfQí¯Çæ/åèŽÉ�qbTÕа'l»¶€0ܹukµZBsàí…CK·�|{·,$ÏÇ­l„A�Ť@-S߆…-ƒp (à'`_Ü&`Bœ�‘¥û²·‰U0€î{ Ã!±ò‡ùslM¨T‚ùŸ³2æd€: a†xë“2ô^û0aí)Ï©?¼à«^£•!K]íKÈmyë„ë…)ò­˜#Zè‚Wš»6T °ûL_âlŸ¨0 ¡¦KyðÓS àa8õÒg˜[HZßõÊ掰·0ûý…é²êg_Ÿ�Ë›ôša©cÌAŽ��=í”r;D°CúÆ'¢1Ü!Û»d|À¯ZÚ&Þ õÁýøw°îýrUf>šöyæ;´ :À2䥨EcÞ¾o~2öùéÄdyVÞç{xGÀñga¥‹6€{¶Êv7Íq×<«ZL1 äô\>£ÌMÒæX…DZt9†¨6´Sg i[™V®mÊáW­+qúÇž:«~VÆw¤ß¨û¹Ñ5Œ“rÐo4µf -L^ïÞ—PWþK…B)Ø/Õòàª^òM RüÀGèã$i†ôQÚ@½¿^˜õfѰ°/Ïëe|Tõ/eé žzÊø%¤¯Ôß-D%Û»¥?»dlwÊ‘@ w1¾2¦}ô“²Ö_ÿ ˜p= }Œ F'{Žp:(À!\P`IP€I'�hl"²< ép]<%e½GØ Æa|0æ3áÊYìΆ±]Ê«ú[Ò”Ù¥;x6FOˆÇY8÷´ð׌ü”áKŸôk}²Jfr@€Áª~l låoL¿>ô¢©€`-+ …Fh XIs¶ûë0Xaàܨ^žIS¢"¨˜¶@ǹ' ôÇÆ,ž­½<ˆ>ˆçR'Žõ!ÐЧ¹�œJí8°åÀ¡™X%ÂÂJÑhŸä$@%šN pòC5ÒNZ˜ lû8Ì�Ó_í¿{ŽhP`Ú(À´�Hà3†�t)ï'ïR}&yïX¯`‹0ÇÉ`þœØ e¹}N™‹0Ÿ¾*Þ·+…@IDATè(C‡é‚“22Ú‘gõI›ÊüÉ–:ªâÜÙí¶³ýhLó¡*aÚ*ا9ÐMà›fA™³<ÃÈQ³W0â=†ÏÊŸ8 —k�w ó]!!LØÊ˜`\ ¤}T�ºz²@àê7$Ÿ- ïÑ€!ãƒF‡£ƒŒ2w¬ðxH>°•ჿxÏüí*½?6\P`ê(ÀÔ I ÔŒÙ[híØ³MÞLæ·2„¤™ €áÛa^0 Œã`"0ÿ3eŸQò.è1Fe.0ª ¸>+iÏ|¿é„Yk¾”Å€‘•2~à¾YúCŸ”iGê™×´Þsn)B¹^}c�BÀ9µ½´gi sUA@B˜:ŒÛŠ¢–ß)8íÚâ‘~kª �gê+…%ì "°ç¯©¡ûH¨¶ RÞ˜?`þ2†}@Ú7 [0}¼½ ÚvÒòÌ‘ïŸ-= À4P €i…p4©è¤:\«2iø“Æ—þù6ý³ÅSÀümÕÇwTâLõ¬�· ÃÙKö�÷¿/ûÇÂ$ør +ZV�f!oô�H#òÞ5 ÞŠ»„1¨ùYõ£`¯ŸPûO}q)-Òg-ä~ÒüôÙÓžjú #Z碄Eà2eÆ" !0�4æF@ÊàÑ,èÉÁ�véžžX(Ñ9ᄎ6{ãÍöãGàè3ư‡øå|ÚÇ9À“ùÔ¶Òw TÆ…ŸÖŸ1ºUBpĈèò¢“’Ÿˆl’"Íò,Í(cÏÊ!` OyNlÆ¿Ÿ|\f»0/öÌÏ`+#A¬ÌmÕ©«UØb؇+ý2§iîæ†ãµ?ž•1B+|[å÷ËúúR® >à ]aÆ0{ùŽ~ H¶\l+ /­1ÒcÏ…Пûý1à# ! MÛ3Øhó§LËÃ$Ù7ÇÑ8NÀüe©8w4NòùZ ·¢!€Ñ³±zm‡\‡k N¯Æ•gu„ï5 öLjíß‹£ÍPšR.©CR'®×¸k»"(Ã" ôíX…ÃØ…Ás<�–@Wï=€¯ ê‰ÊlÔü0|eô2Øh˜ c#åTž´Ù†oŒßÞÿlqÿ^YÜBi6\P`*(ÀT C 1I 0ÛäíÛµ š<+ãCÊZVÿjs˜¿­¦¹ï<Îu²‰ Æà»rÀö÷â+—>{Ç“ j'ùhÐ ô5¾Â$âÒ¾ j Î0ÿ–H?Ž�àöêÉg/¡¿j8™aB�‘#PFÓ'Nhô2æÏ^¿Ž¯¤)-¥\iåïß)VtöÞ DFP`(À"½I“]O³¿m|sðl2'�x2n¾LÂÇã0 du åúÛs„)©a \„6`{/„±táR¸ÊèaœÒ.‚€åÃ`õš_ íÎ~eþ‚u|?»Às |ÁU…�^ã:6ôC¼ ’ω‚5â×J×ÿ®Å(ÁLê@cð¬ü)<‚pµLïYË ¼ÝŒŸhÔËç�+NÈ3hgÎÞ“4´ü.Â�ô³Ñ®á§è¥í-­ùišåEØBh�–iÆ)à'‹û0íyx˜Ûë`´â6‹ÊoQ?ï'þY‘Â\Ù @#€Â@g¼¾2xÁG�åäYo°“<]áJzÿê]p–t´Sí¤ôK…, ùÁ*aÚÐv�Ðy‹Ù«Ÿ–|Óp�ÂΘ?a*ìÂV L_˜?€•_)À 'È ¡°âgr°ÿÞäZ\>-…0%cÝöKÞ6¼”LmÃoÞ°øÂнK³¸áè™?u`þæ”ÉH]TÑ›…)mõ?*x‚‹Ä³ pVO-­+r©SnÅ |ÚWæ.8°€U?Ì’}l„,âõ£$é—ñ$ ©†”›"gêz]¹ƒ7}’~ÐG.öÙ"Ï[å¿Vöë•� ÃÞ� _„. õ,OЧ�ô׌þ ‡÷“/þ­”•ÿÊý÷¯ª¨ÖH|µ¤­¸œBÐv{8€‡½ F.K³ÐÒ›†)¼¦õš–ë~S.Æ`þØ`ÀÝÔ…±¢~Wæ/ éla(¨¦Õ@Ê¢WPæƒXz.íJ›üÁYá“OàC¨BŠàȶ׫ ¸O‹&æ¿¡ç×IhÇ yVBñ”G}ÏÇ…v ã®ø¨�0~ólÃØÍ�„ªaÛ@Æh•„«Ds°JöÿW›cÀµ¢½Aà²'ß\(Mk>a¸ À,Q €Y­ÀuQ(`L߇9DŒùÂ4`þÜÀª›¯ž-Öé{Éó6V¦â`þ|9Æ=–ƒÉã…¹¡êçn{¿ ½<¬çU˜‘�óó«…¹Ádù°‘× ,,¶óß&Ø$x®—�}ÿõç[ú•Bð—8–ú» soŸ\çË'~ñ{äí7² ²ZüjѬ"”zkYñ‹  ž4�Ç „lä¿Oƒ^<‡ ÌB˜Àhå&†\ÚP‰& HÇïú U²¾ÁA] SbEÍ {»0f¾°¯0–óÄsM-÷Ýcx¡0èqX€ý3ã?ÝßG�öPë}´-æ¦B‚àž“^ý»Tܘ¾â!!LÆ�g¯Uÿ¡£ ·�iyyn­çøw mÑÀè—…éëm�"pÁü± DX“Ïö+}ž×Š_�ð&í™0Gè=ãÌ3¡yA;ûN�.(0� ÅQaBH�1„4=žg›Œ« 6Æ<[œoïBÀfYeò]e.¢ Ø!eøŒðEâqcêæ´àÑó9*+ž’ï…c¹ò]¤Ñž2ü^h#âƒDx˜¾îñKã×c~êê_BeÈRν­OèLÿv#ˆçR „éë'†…öº õPý¯FýßókxÆoÌßÚñqmWÒlŒ}­ì™xΑ¿Ô}²÷Ÿ0ÜlP €Çi)þÑ;$×L€¶‰Î�õÏ~¼�ñ[9¾ˆÀʵ녴Ç>>Æ|0zŒûmµoÌU?—ÿè@RÖ± òÜg<Ò?âz£ _hœzúŠqŸZøЇɫV¤ï×6‰#@>ÿ>9si–aP`Ò Šó'�?z„��Œ­_í”ÆÚÞBÕ°Ò”>lFãáHàß„ùÃÐŒåŽÊü�4ÊüåA™zÂèaüÊ{!Ï8kÛBMìø‡¶Xùcá¿^<«}=Ö'´A`¥¯^ž=Óg{E™³Ô5&mc 4XæT(0:X¿{™ZG`èý=XzDÒàKHkÃBmƒzV§÷éÄqöš\Ò}õÿ‹%ÝÙ%Ò¹&4�Ëi"˜I'ÚŒMnÖ¨=[Hz:Æ<Ã4pþ–ÀµÂж 3ÚGö¦÷¿�l àÊZ¾À±@Œk…ÉŸçä–£žx/Ž ¹’¤÷¼–…yõøªwÅÛˆÎÃKãGÕ¯Öý*óº˜ÀªßN'(óïá=�®ž![ºõ¼‰7uVχÓÚIC_¶i;VnܬÎ,…iÿT›¥,\CX&ÝŸLj~"³g›ìlõc-Y:!L–•ëar0`>´·l \R Ð8Ã;WBN " ÀâÍÌÚÆ.®Ïp­p�á+îÀí= ‡œcþ‚“ZºƒÛLÓÀ—B�‡ªú¥ ž£|ìós�/Öý¬øÑŒ �fûü¨ýžÔ¨RÊ{& ]íYi,Ï–&àÕñÜÔy¾Á´¶|š•KCÚ$͇ú?A�)¢@S4�ÊôSÀ&u05†¯ UžÉ³4ò­,!ûÔ01s&lë|˜àé¢ €epb�f�ø9¶n53a�ñ“cL·_Êå!xxOYµ¢Ë¸ <‡³„m8…Oâ™h¸¼Ï×ûô|¿ôY¿´­÷ù˳ží—PWý=Æ��c¾–¦ô•2„ÞKS�õp¾>ñ”Ù§ÏiykÐÃKÓì9 ÀbS €Å�hf)À$ï¾Å½@@ç`}×cR„Á£€ùÃY ¶ óç¦À {`þ¤…cðIHQܤMhæŠ ^�¤µá¬mzîw*¹¦G=gû7K»›DX'¡®öBÛç×PòšhŒ9S¶ži B×Ç}™´.m[Z¯(èŠ!tEÙ Ãõ“ Mj �®á·…§Áß´¾Áµ0G_ê�ž«Kš 0GNl£@€50oñÈQµóDý¶ØØWì°àÊà¢ÐCH®”3ÆKè�Ç—xžà%ˆ© àË�§M˜=¡ªü6 †~9Êø¥mB=Þ×cþØE@õ=Zå¬î�[Y£«¥ól^šÊQçÃ\Ò¬œo+�k!¯ôlém†ÖƒéÇßÒÆ ‡…?lùqp‹ºÍ)@sZEÉ @ŸLhÆìKa¿°D`\PC=â¬h¹†—ïÀŒíóÁûˆpžhT mߨ%!gÜ8K#´¸šcc‡V“°Ïü]ùpGH Meö„ÒGn4?BÝï'”|´º÷ÏÊ_¼ûy@h�y£¥‰ã‡q¾¼Å N]H¾¼µii>?—gi‹!,å£Ý%G&þTð�$¦FV·h`ÜìÃcýÏçƒÏ‘h8·Î‡l¸µŽK‚Ðd�¤Ã²ÀR)oÂ@扦æ÷ùØy~B ûL(°ã}Ð@�üzôI¿iŒ~–oÏ„9?L7¨oÎâ“t‹ûÐÒ}HÜœ‡ci¦‰!LÓh.3E&xÏðA>M3&@ž14¦€éÁ9ö·{ÿâ·‹m«~Ò`þs g ,t}FÓ7/Åì ¯a« ¥¬: }Áâàa·ùaà§ûûÂðÙãç:_Vüúe?‰÷÷ú% :Àà �±7 ¡+ås¾IüØPÞ?[܇Äýs©ŽO·ò¤… LB˜¶)àÓõD²ØðaJøiÃ|¬ƒpƒqáøóéªWêòá Í²°·ÜG¿CVþ;…Üx�„ëEàŽ]µK�¹Kƒ�p±ƒáóîöçs¹„ž¢ÄÁ £?>¤ÇþÀ£‡ËÅ�ò1ë›æ l`±Ïoøs¬O-ú%�ýØãWæ/mrÊFo~Ã2üT(оH;^7K'>ÈQÖ»Ò³¥{Ø–F}Ï=—ÒH77�¾–X¦mÖ)kÒð‡íÿH�ŠJ (À’DBP`4 0iú‰Ìžs“)iæabh6ˆ°E4»$ÿ"Aã|aþÜ À÷ øx¡ ªº_Bcþ®Gk ž2|†˜¼”YJœP£è$v½öhÆo*}û,¯©üÑp¦Ÿ» ø€åØç×Õ>m÷â´�óÐ%—n¸ZhåqFO‹k‫›óéOÃ\;V&——¶Ïe @Gÿ_*—Œœq(À8Ô‹ºËžéDåXšo#Ý{„!óá>!Œ`Ìÿ,± Ø.Ì’Ë�85Sï»SFÀª­ä¯ë  8]ý˜vÞ€8ÚÒ9�¯“²Àwöû7IETüÊü–2}yî¸GÒˆëÊ¿Çø›®þià öìCðæÙ¼=æå¹´Œ=§a gP~Z>žë)=C¨§Ñ¸¹!ŒKÁ¨¿ì)Pš¨,ÝCJ(Òñ09$VÖXÆï‘�•?Ìú…’¯Ì_Ò9ˆë³2yFX-Œy�xÓl“2”T��vŽ©ÿûÒ$o £M¼ÀÇ@Q5R—½þ½·-gŸ€�U¿îõK¼¿ò—4újF}ž¹7ZøtŸFÜž-ÞiÜÒJ}¢|S—–MŸ Ž¥[h香!Léèt=‘ÌüiÇ7Å/·rIËð ³Cåsæ£8°&nÁã6À½D°¯øså¶@ Ïæ“¶âÑì’:«ðRuÿzIß ~“ ›$$M÷è{0w |Ýÿï­úõëwÒŒ<ÅËþX*àÁ‰rRp†BŸ†!(0�Lp6©ÙdçC,«~˜$Žãq[å4Àþ7êµÀl¬–«‚w‰F€»v “Wu¿„ëÄo„ñ‹ß,§6KˆÀ‘;üEÂ0w ¼Ý²zÇ&@™º„ÊØi0q°XµÜ— Uã‹ðÁ¤�Qß�‰ç"Ýëuå®’oÌ›pæ]¨“ I3/h,ˆ“†£Ì¸.#—fíÔåY™ƒÓD�¦i4—%G˜‚1~:çŸ�aâazsÊ}¹3_춈€ñ6¨ÑwJó_%L£¿µ’Çj“<›G ®€Ô±½xN Ø%p1"DØÐvÁ)Cu¤ }¬öU˜�rýsþ¦¿A˜?ÜäǪ_ ý>ÊüíÙúl‚‚=+^Ò¦ öœ A�têCæÇÊe²j“êêÕåÕ�ÌF€¾ü‚Î�È5t¡†&YT G?‰å&3òavæ`gØ  Ø(q*Ìÿ Yݯ¾ðBUÍcì·Q€­’¶U4›œ_!y¨âñúùa�³]˜?É=ƒj`†<.pà€æ¿Y|ßÂ_ð Ž`�e¿gü¶×O_L0foL>}¶¾{fïãä§d-Íâ„8ÒÛrƒ` Êo �åÇèlár§G›ý Mj«ë—yÖàÏ:¾~•Ïk@Ò´Òëa}'„ùáìTO¨ÕùHÐÞÂø1¸Û*i+åy‹¬ô·È¶À–óϯ6KÞyÞ BÀzñ¢wW£? ÿÔV€g*ôZa%8ö¼¶ ÜžgÅãÇŸ½~Îõcà§Çû`üGcúÆð�ѦÌ>M³þ’NÜ|úL:Îòý³¥k�Þ�åû´qâMà5)S‡Ã¸õë`“×5üAíGþtR € ŒKüù&@ä)l‚q7!Àâ>LQ¶÷„�½y˜*L¨Û·JÚ~RéRÂÜÏ—Uÿ&aúÏ=·ÚtöÙÕº .¨ÖаZÒWौÖ¬ÒwKÞ. wrÌP`ì‘tá s^žÙf`Åo*~=Ë/eô£=ªu¿„ªQ�pÞ¹~yN™;ÏM¼öUÊÖyA­ŸoqÇ£M×6¼6q XA�q)À¸P?&�ZâÙŒI ëþý°8¡1T.ö�¥­—m€­Â(÷•ø=`­ëDX{æ™ÕÚóΫÖÊvÀ*ñ+ðRO…�ÅÞün `þ«·lÑûvK:íh›”¸¨ö¹Åoçù1ö#n–ý¬üm¯ßVÿœ`ÈiL0M€õ‹t‹û�¸÷‚RÿÙâRΜ�[Z)¦l F¤—)}í}/—Šœi¡@Ó2�Ç’¥€Ÿ-nŒˆÉ2MƒA²?ÏÅ>ªÆ‡!; ÀΞ°R€•"¬`•„¨ùíX ÌÂs+}�üÝ’·F˜ÿÑ×  ¨ü9Ó��a*4fDèWüfá¯L?Ãü�á›`!x4aþ¼”Å[¼.ÔB ~ ^ƒ¢Qd @çÆ à«†0!bÇä3!B/R3éø¦ Ÿ-nuL0Ôõ™aÔÄ÷óF­¿Föö7È~ÿ–sΩV‹¯„é¯ÀËê…¤s2ëdü‚ÞÝÓ¹ÍBh“š=X~Rë|€œq ØDéÃ]¦Œ`‡h¶ ãÞ.€]¢Ø#€•h$ä" ]Å‹ À'€a£„ )³GŽ ¢Àš¿A˜ÿ†½öª6ôŒûÔ ³ïñƒñ÷˜¿1z aä>nŒ�0§¿–nÿB\jbòce|y_Äç[:iÁ”ŒæS €ùô˜Ù§tòk{Òë~Û„_l|ÇmŸñÛ%ûþ;„i³úß&Œ{§•„«ð’†åþ:ñkÅóG†•¢ò€~>˜4ÙØ%š¾2È·öȾÿz±àήF ®üEP ÿó‡i« Ï'4oB}¶4‹û�xÎK³} �óœ:`x—>û<âƒòÓò¹çFÛÿ¯\›ã¤u�ï øƒòÇé[Ôm�!´GË€hL&H˜ˆ… *ööQÿ_$ #>1ЯþÁaüæÍè� Àñ&pùÏaôãcK`·«„ùWâõŽ6¸ €KƒÀÉ9aŽùÓ÷åˆ[]Â4ni>T´!޼:—æ§Ïuu#/(˜O�æÓ#ž‚‹B�”‘ñÑVì0ÿí⫞ _,�ñ[¨+xI׋~z!€ï ìD lVŠW!@€=ÂüE*™;Ð[í{oL? SÆoÏô Ÿ>[_ÓpÓù¿Vf~êÜS]^®|¤‚ó)À|zÄSP`b€�•´©€°Z5ønLŸ0Õð§F`ki= €@˜?Æ…;Å®`¥0þN°GŽ "€LÛVþú4â©·z„ƒ¼™r%7j^ ^¤‚ó)À|zÌÌSÝäØF'& Ü=ÕiÇ7ůIU€Y³jF½5½0qŽù±Ê÷*žÍ#Àôùsc`é\¤^Òö\ù¦°b(†sÌ_òRÆn϶ò·ç4¤�xÒ-n¡€í§YœG™AnP™4¿ }ëÚLáÕ•%/…?køÛç´¿iýqûŸÂ‹çf0 a³ÒQ*(X “´Ða‘²OVÿ©wÅûQ꩘LÐêóÎ1ø4Íž­~Žù[!ÎÂ4®™ñ øw$ÒBÐmrP`$ Ì›ü`š=ÆÙ@…ùt=¸´Õ÷¨õåÙ3u‹—B«Û„ñƒ“ï›�Ä7 ,; ð~„f Ûa [úô ÀP˜7éÁ¤Íùx/Íåö÷û�ù›ÀªçB­/pW°êï1�“&Þ˜zÊüsy¤Õù´}ʆ —!,.ý·Þõ„9kðg ߯Ý+#fÏ}µœ×çªÞÝ|ÆWâ•ÜÝχ|ì–?5ð“:<{–а ŒÀÜÕó{ÖÉ âùÀj1þïâ»Îú›àã–f!yuž.‘_ruymÖ)Á"}êà¥ymÃo^×ø¦ðÓç´?±òO)ÔÍsÝÐ5 †¦“ M|0×ÕÂô×mÞ\mÜgŸj¥\Ú³ç쳫Ý´wq\Oœ�ñ7Ö Ã'Ã?îØÞ w ¼�Âìw £'ܳukµŠO ü57V뤭5{uOcð„>N^/M«£lÉÕå•êDúò¥ïa¸ö(@{´ HA�¡)„é[h¸�gµ0dä_ûÛ!ñÙ.i0s¬ûÈeA„»¥înaìÜð·[ýV‹=Á*ñ«%¾N<À*É7&o!íãíÙBcT>´²K|H¢{A�%G�–Ü�F‡f�ÊPeÕŽUþÔÿˆU8à€j§0ø’ÇJ~—|p7Ÿ ¿›ïˆ °Gn ÔÏþJ�=¢=0Ï~ÿjVýx¿ëEˆð€1yBóÆÜK¡§5eÂ-o ð «íZÞ[ÜÞ‡°¸ô�Öƒó(`(!˜?Gó¸ª ÀyÞÁ¶€¨ñ÷œqFµS<†�»ä[{ÄX�-ƒ=R®’Õ}%Œ�ìó¯Fí/Äj�±^ü:˜?–ÿâMДéƒ[ÎÓÒÃ-o ð„0ï@‹4N1Q.᧤ÙÜ$éÓˆ+ã'”9ÇÿÖ 3—Óûz”�sü+„yWìíf¿æ/ž*ãGÀ¯�ÁZÔþ¢X/«ÿµ¢aPÿÞ€ ¹|¼†ŒÔK].--ÏA� @· [ú*ô˜ì&@äl‚÷ÂVJiœî�gé®C­/éõ[+‚Á:I[/Vü;`þò…¿]â ±¨$}…”'\-‚ ²ò×#ÂôÙb0Ã?´ ÞЄÚO= Ki–Gˆ£\¸¥OÆÙÞå¥ßÛ¥ÓÃ:˘;&ðŒƒO'NÿlqBòaÚìék\˜7Gwcß!«û�²ÿÏwõ¾¨ÂƒäW" ¬¿Jâ\,dž[•á÷¿1 iÃÚ%4¹‰§ÎÒ,,•KëÅóÒ¡cBÀl�g³5^�í¤€Mœ>¤›ÊÄ{ÌV™¾0m4ëÛ%+{Œñ0þ�bý¿«÷¬u¥, ­a�zzß/�g`z¥ƒ“�óœóàKº9·´ƒA�é¢@�˜'Dè)m&ÿ&+%«£Ìf-}3&ŽáÞ.VË=ܰ æ/áÎ^Ü„`Pgð,c'Í|)TŽñ+°äÇÃN²ôqP~®N¤Í.Òñnò¾ÏnogófwìóeB›L}Èg{÷ÀØ9&(޵7ùxù.ê=k¾Ä½³r¦Ìß` =L‹S'\P (0ý Ã1Љ°Câ.Qм3¶zO»hïÌš£~sëz‰ô=ùÊȹ °'¤0xöp¬Ž…&äžIóÞòvÈ ÌBèhœb"숰Ë,ïŽgàö.Y `Ô¸tåÏõÀ«Äïî À)Ážù”ñ“Nšå§¡¶Ì^Ç ~‚³J�Z9?�2YNÚ¥múI¿ \º†ßŽÆ´ã ~~ŒÒgúb}°r<[9=÷—¸¥“¦y=ÆO]«ïaO¼=[L·öS8¤§.—æË¤ùG_nZâ�ïü‘–ÖŸßZ[z„A� ÀôR €é›ZÌÒ ¸¶ð™“†ƒÇ;ƒúJŒ&¹¾ù|`Ù³Õ!4ŸkË`ú�xê ¶‡au,mÐs†Õm+Lq0:Œ ?…7*œR½þ¬á[êWÓô¶ûß´Ý(7Ÿ!̧G<¦†L’ž1سSd-�t‹ ž½³gÂ4îŸsu,ÍÊ•ž-= À0ི÷v˜zQv8 „0½¢tP`¢ð – ±îÙ#f¨…–çë[<Zõ|ÜàäÒKå|�ˆšR€÷)„€¦Ô­\£Ñ-j&Nc°© `ˆØ„™ ­ ¡ÁñqK³ÐçO�/G^úœ–�ç @P`ú(Àô�I£®'ØYƒ?ëø¦+›&ý±:”5!ÀB^OËØKåÛ±¸…¹2¤¥ùVÎÂ\~.ÍÊ·¶ ¿mxiÛ†ß6¼®ñMá§Ïiì]OËÅs» ]z´ @g`’´‰ÑâÒ¨ŸD½0àòeÒ:uy†�§u|^ăA�é¦@Ó=>�]P``¸9!À*1ÊävšV÷lm—`y<"—þ}çˆj¸v)@»ô hA�Î)à'E·†=O…Ÿgå-LóÒgÊ‘–´úº ï\î]좭å3€)ñ®_øYƒ¿ÜðMûëWÞ¼²ä[ZZÖ^é£.•·z£äªc°G Û†ß6¼´_mÃo^×ø¦ðãy:):•é—À*(0�ƒ˜B.?—æ”ïËF<(˜m „`¶Ç/°_æH¶iŒ,i¾¥çÂaÊæêGZP€w(}ƒ*ÓK�ÐLïØfA�¡)0*µÞÐF…%O�x—fgˆC0%cÕöŸ¦mx)™Ú†ß6¼iÇwØþ*ïW]ƒÊ¦´É=·#·”Öv{mÃKñn~ÛðºÆ7…ϳI�ÐÌæ¸ÖA� @P`j(е35]bˆ„`‰ htgyR 4{ÍÀò¤LôzRàŒ÷mRÔn§�дCÇ€˜J ”ƒ©D6� &J�ÐL”Ü7óÅ´ˆX·ˆw­[úô…H߹Р,¤Ñ4¤„`£�þ&Ðd4 ‚A�Z „PKžñ3ƒù�OÀ ‚íS €öiƒA� @P (0õ€ Qך€~Û{n]Ão{f ßqû?ký |Çñúú]ÓwXøÃ–¯ï]ä¶E�дEÉ€ ‚A�¢@V|¿ºCâè @P (‹!ŒE¾råTåU.9A� @P (˜<Â`ò4o¥Å®ŒIÃ×faÖð÷%˜µþ¾óG<¥Ç¬½ÿó{3üSÛýƒ¨BïAP ( LRaª�[BÈ„°„3º – Bè~$CèžÆÑBP ( ¦Ža0uC’G¨kixÖàÂ÷«_ýjõ¼ç=/OLI}ðƒ\}ôÑÅüAð‹ )¼a÷|Óú…fFNn~Ûð¬c'œpBõ¯ÿú¯ö8/|îsŸ[=â�˜—Öô¡+|­ý¶á· Ïð´°køÖŽ…i{Ãþ? N„ÃQ €áè¥g€;wõ¬gU?þñ�‹Ø~üã¯îyÏ{V6l(–)eüõ¯­^ö²—e³ÿøÇW—¹Ìe²y‘8>¾þõ¯�0î^xáHcZA�%L�–ðà.×®½ímo«eþÐåw¿û]uÞyç�Ä,¾ò•¯Tï~÷»�wõêÕÕCò�P¦�V…ßüæ7³ÀÖ®][]á Wi<³#q*(€f ´Ý EØtGÛ€¼`uþŠW¼b`Ë”»à‚ –ËøÆ7¾‘K®.ùË«P‘͌ı)ð‹_ü¢:묳²p:è ê—¸D6/g›éöÀl÷fº° Àt�G›®_úYƒßß½èEÕ¹çžÛ§c)ræ™gVçœsN?»)|*”ÔÐW¾ò•«ýöÛOa¯�„‹Œ[ß�ÊFÛ†ß6¼ià—/Ê^éJWªöÙgŸ´Zñyø!cÖð¡‹µUè?žÛUã†ÕZR •€¡È…§™¨‡ß÷¾÷5Bq÷îÝÕo~ó›Fe}!¶ ~øÃú¤~`&Ô¯‘F( ^T†öûî»o#8Q((˜£@hâMXصkWõìg?{¨ýÂ_ÿú×C÷ý[ßúV…ð�:V'0¡½÷Þ;ÍŠç–(pË[ÞRiÏX§îjW»Zµ×^{¥Éñ[A1 ¦ŽüAÇiçÛßþvÅ=colXݲ½p­k]«b%|�ë\g$†,4)~ëׯ¯`¢8ŽÒ}úÓŸ®èëÿøÇ :mܸ±ºÜå.WÝä&7©î|ç;W›7oN»7ïùOúSõÉO~Rû ú±iÓ&=!Œ»Üå.ax€à|þùçWp€OÖ8p9�1ŒãÈ tþÑ�~Ta\ˆ=ïüµ¯}íêÆ7¾qCÔ(;sî_3sÝ „—`þÆxÓþuÔQÕ§>õ©¬`'êÏMozÓ�†…0Ë{ßûÞióóžŸñŒgT�yÌcæ¥Ù ò­o}kõÎw¾³¯’û¯ÿú/Í:øàƒ«'<á Õá‡^*º Æ~½ë]¯‚ù¥îÄOÔ¼W½êUÕ?øAÒ2<¿ç=祈;î¸ê™Ï|fuÿûß^hõ‘�|¤zÓ›ÞT}ç;ß)ª‚�ñœç<§:öØc«cŽ9fŒÒ׿üåíQA†m™ý÷ß¿Tu^ú÷¾÷½êïx‡â‰`7È]÷º×Õq½ï}ï[mÙ²ePñÈ ÌÂp¦†+�M)À„CɹÝèFºR†Yæœ ¹c1ÃøÓžö4{ÔÐÓÎâuÀ¼ÊC<  •ù[3¯|å+ûv †«ðècΕŽÿQ{Š'>ñ‰Õ ^ð‚±˜¿µ»fÍš¾æÀã—‹[�¦a†Ok §TÎÃÊÅKõFMOÛNÔë–!tK߀ÞX={´o†ýà;ÞñŽªþ'½$�7è(`‰ñPwçWª¨‘¹2x�êÃ<Œ/}éKW0Ÿ:‡ÉÁDÛfJmŒšŽzc¼’ƒNéÖ‰•-ݽÀÄ“ŸüdÕŒXÙRmÑ"@ï:‡g=Õ•[Žy0üp³G�ؘ½1 Œ…¨cYEç+k®� gâ.¹ºË€`"ƨ8P·çVñƒÔÐþŽ€¾ð…µGo~ó›«ãgëëümÛ¶U_úÒ—ô¢£Üž? ž=jTê9÷ÓŸþtÞ͇¹2¤Ñ¬ôÙ:Ùºu«îyÿä'?Q5®Ýð¾Å-n¡W#õ9‚Ö‡>ô¡jÇŽ ª@g„N6ä\Is�õ?tµÓ ¾îk^óšê”SNñIóâ—ºÔ¥Ôîâ7¸�¾'00hýç?ÿYqÁèí�w|kÀÞ)Ÿñ9 @ÃA¶A«é¢@Ó5�M °Z|ûÛßž-yÍk^³ÂøÏþqFŸcb98öÏ™´r+Ò°þæHÛç>÷¹¬Ó¸Ç=î¡ 3‹�Käß¾ðµôwÉý(+Pð‡±¡¹àø�9Œô`XOyÊSúÇ-�mBQn•ZÚC·úàÆ><ÆnÄÑë`‘F0Çp •™jf�õ¸�Ë÷ÈÃh`Ø0+›Ðɇñ°*ýíoë‹kƃóŒÖâ¼;Æ{ÏË9V…0Ê r0Á§>õ©ÙU¸?úÑ�®nxÃêùóÜ‘3˜)Ú��}ìcÙ}wŽrÒ¡‡º•’úŸvoûÛ+óÇFáêW¿ú<[!`PY\îu¯{U·¾õ­+VÖ_¬üS‡¦¤$ÔýJ BRªy��Cãœa(øð hÎù綆xØBÂsçš l -@Üô˜Žj³çt|CSÐŒn]—  k üôåŸ@“K¶‰|àE‹õÛÝîvʈËôÔ1Ùç; P NÉJ¾´ µz>÷ßÿþ÷>©‡ÁrËæ^xépî(Þql1'”˜(òÀQùÃàJïj�=‚ š Tø¹‹zêÅh‰±r‰P‰f'Þa  rf~×»ÞUµ©à�+Ï¥M\4h!Ðp ²ÅÈÁ‰´ À´R €ŽG¦4¡vÜì’�!ûç9ÇŠ“É�•]îka07öuS‡Ê£¼º‹dÈ/©åV¡i<³â9餓rYª�€isáÐ æ€:m+ÕÔ±—]²uã Õ6Œ¸äЂ°=�6¡Î¥{êV–ñÊ­ÆÉ/©ÿY©C¯)�ÆMÌ9Ê!8!d5aþïTÍ}Ùˆf‰!ÌÒh-s\ÿíßþm�a–‘„½gVã%FŽ�s0LŒÔêÛä¶î` ¥Õ«‡‰ð�1]Ρ’†{f–+gil”œíWûüÒêÆ þ9u½¯O¼ôDê¢öÄü�Q:õ@ýS.áÎx²õâÝW¾ò½Ö×§YMǯxEµm°´aÂA'†�eƒÓB�88¡‘€Yxßv³6ñ¶]×ðá‹Z—ÛêrÆ�ê5¶¹ß’c/­Ž ViÊž9+לÆÁêZÈuÄ9‡š™ëy±[hêên£Ë %üÁÛˆ&ïËw¿ûÝ,zÐ~�öÀ*–„ˆ:á§„;í¦ê®!Î9Ôöœ¬`OT—¾O£Â™T½®ñþ¸õ'EÇ¥ÞNh–ú/‘þqelΊŸîÁô°ÒçÚÖ’«ûòß »J«Ð¦êpâã>9Ç]ó0âaö–Kß=>̘ÉÕY•ð‡‰–VÞ)®¥û€ÑD‚ Á~ðƒ¬>—ðvë¥t£"*|öïsÂQ¡H , „°Lz–»Éùû/~ñ‹Å.`ù>ì§€=°:á A‰ù5Øb(­~QK³ ÆÕá›2tÎî—Úÿt�ÃöJ6MiÀøä¶'h�mˆнéÖ §9rFžÀǺ» (.(°)[ËqÔg¨Ï0°ç?ÿù�bÌå/¹ jht”[èRd�Q:–ÆÖDÊ´ÓúésIÓÁJÜ_7L½º5µ_(©áÑZÀ\›¬¬K0ÐX$§6r�ÒÑENÀÐýÖ · –Fй»Jå#=(°\(€iÔ¼]ºIÃ÷*kß/nt+­>}¹qâv0·—]b\ì±z¯û”°á”³Ì·< à†50+i$®zÕ«.PÇ—ð‡!"|`MŸs~üK0`¬©À‘ƒEZ êÿs.m]ä´u4þ cž)Þ¾ÿi^Ï)üÒûß´­^ÓzMËu ¿)Q®] „ ]z*4¿2éü²ù«_ýªzãߨyJ†uuL¨Ä¸R„ë˜SéÔB Þ9_XѧڄãÍ1Qk# ǥ̭FŠ3í×m½älêhÜÄF!ísQüT.–ó\ú3¬cOù“Ÿüä‚j¬þ1"cí¶¥[èPŸ7]Y–¶ `Ð¥“ ‹óA¢7¼á ö8/ä(!B‰gvu‚ñ6Ñ` mÈÙ/ð~�kC]ضÀ† jJ‚eÁÝ÷B”hL^I»C^¸ Àr¦@32ú] ÓŸ;ó�;î¸ìÈ`,Æ}ÿœûoº 㱜@>áF½ ¯±h‚»©ÿ=|êÕ 3§žzª~«ÀÃOã)<¶ >ó™ÏèÉ„Íq·õRøiûÃ>· /m¿køƒÚK´|<·C�Ú¡c@i‘\çZ:ÒuÇ;ÞQç 3I1¡ø‹‚Rts—ÕÝÃiÚ>+ó’ûüç?_=èA*e÷ÓO>ùäâ§~aŠ\rCö®Äx)_Ç0=Œ’aŒØ—-ÅKx „”„¸aë”.z'.azÚÓžV4xLñæØä±Ç«'(ô ›Ò+…ÏA�i¦@ØLóè,CÜ`ü¯{Ýë²=g¿™O¹r±KSæë¥ ÒçñYàTÕÍ·J®´Ï•çþù’¥?Ì©ô¡!ƒÅ7øÂ]α2½ßýî§'ÒUj‰y×1^ßÛ%ƒÃ¦0Î<ó̪tD¯$ˆ û p¾ñ�o\¤1·H¾ä%/ñ]ËÆÑÆ<á O¨¸6˜ã“8Þ�pÍ(0Êÿ²rúNו�¼á)Àð4‹RÕéÂ>9;ÌÊ3E“Õfºwle°`ëÁ»:=˜ò¾ð… ¦ÁE9ÄO<ñÄꨣŽRå¥/}iGíJj~îxÈCR½ûÝ﮼À�ñ#ÛG}´n‡”l?üpýZ]Î~¡¤EiJC>€Ä= 9×+ùœ:FÁþîû¥Õî@†|ޏä›cŽ9F/”2:CS„ƒ·¿ýíºEpÈ!‡T§œrÊÄü9ò÷Ї>T?$”;ŠWºE¡&ÚdUUbĨÿ›î‰—„ˆ: B]�\_�¦×¼æ5«#�<ÒkÃ&ÌM¾–XÛXd¦”!LéÀ,7´¸ðuzÎañõ«_]-×sùä•î„繩†  œýõaõ’ëmÓ[öŽ?þx=ª7,¼´ümns›êQ�z”žû/–˜wãMÛB]é+‚%!‚1`ë!çšØ°×�=@Môm",µÑ^À Lš!LšâÑÞ °ê}õ«_½ �Tò÷¸Ç=ÔÊ=§.ÎVªI,©õYæN`“0ìgd9Þ–[©¢J~Ï{Þ£«ö‹Y¬DùÈGV|à«ÜàªÊÏô ’彇…ýÀŸþô'ŸÔ�7"øfAÉž£t‡À·¿ýí¬j&\ªÓGL"Øx°§ÄGd·|ÙRذmêÿ•"})P l¦t»^uL|>ösá…fGânw»›®¦‡ýb^˜$–¶(Ï])]`0í¼àj”WgýϾ2lRX´�Ju 'TúЇY˜£ngÕ�‘çï¹ô§Ž15ùP7ð3WRóï#N?”ƒWÒ `ÁÊ:gCPj—;Þ ñ ‡ „&Lüƒü ~ŠyÐ�’à‚– { £/8"Ì�ârôŽÕižÁµ°mø)¼A[Z†G„“¥@“¥w´–¡Àk_ûZµÂέ™HØïnËÝûÞ÷V&œ[Ýæí²b~Üø±ê8 IDATá _¨ù05VǨª±"GÝ�ç£8æ\ºàx0tŽõ±JýêW¿ª*oðÁ�Õ;õ¡µ7B0YyO'W`zÇ–ÉÇ>ö±ê—¿ü¥OÖ8‚I&ʉ nî\Ó=æ1�©¸µ1w pɆà‰O|¢ªðs‚VÍ…ur"ƒÓlþà?¨¸×�q³“ 1 ôÁa‹qlj'aíE˜E ¬Xn’™Lžö=BïÙÁ³Ä D8ò~�<¯¿Î…Äדv衇^êîw¿û5äŒúÁ2I_C&—De ü•´‰“xc7dñp�ë4Á×ÒçxÁ“½ô6ñ…q§ô1ø%!ÀŒ�Cƒ‘°ª„™RæÁž1 XÏꥡµ. bƒ€øäÑg¶?€Çê7]q§ðÒgèimø<ðjJOO'‹­˜Tˆ(õ×ÃðxPßoéxø¹wøi/�{xäA[„ ®S>[>´�‘'‚B—Ç)…éŸSø>�x‰i9{nžÁµp±ájßð´PÊ«“g9Ô±{�üßN—k¹Oû�S?üáŸ*'†ØŸÚ&ž³»„øíÎï�øÎÄï–ç]â ñ{φ´eãB°l†zz;Êd9ˆñ¶‰}jœì¦6Œžb[ó¸°êÄ{×_ÇÇs}ôùMâƨýõ0š´I™Ü»0.=`òxÛJ^Ó¾D¹ À4S Œ§ytÆÀ­ë ®køct=[uÖðÍvbˆÄYëoà;ÄàŽPtÖè;B£Ê`¢ÍJ•®ÿô]Ão›Î³†ï¸ýŸµþ¾ãŽx}ý.éÛ%ìú^Eî8`êÍ@Ý®ÿ˜]Ão›Ä³†ï¸ýŸµþ¾ãŽx}ý.éÛ%ìú^Eî¨`TÊÍP½®ÿ˜]Ão›Ô³†ï¸ýŸµþ¾ãŽx}ýY£o}o"w „à8Ôk±n×Êi‡ß5~éP�ÛÞb×Oû3è9ðD¡ñò—}‡¥VJŸQ�J‡m7Ê×S 4õô‰Ü @P ( ,I „°$‡5: ‚A�z „POŸÈ ‚A� À’¤@Ø,Éa�N‚A�é¥@ØLÇØ„`:Æ!° ‚A� ÀD)ÀDÉ�‚A� @P`:(ÀtŒC` ‚A�‰R l&Jî‹K÷À.Î-–Âkûœm×ðGëu¹Ö¬á[îI³œYëoàÛl\G-Õ5}»†?j¿£Þp ÀpôŠÒA� @P (Ð1R£ãæ–-ø–íÐGǃA� ÀôR „€îÇ&€îi-‚A� @P`ê(6S7$�PP (X^HWûmÛ0-/j6ïmhšÓjä’éË=2 ¨ ‚A�–(€–YÌ¿D™HŸ$~úÓŸVøÔmÞ¼¹:ôÐCÓäx ŒDæ»X½�DºE©À¢�}z=÷Üs«_þò—Õïÿûê‚ .¨¶mÛVmذ¡Úk¯½Ô|ðÁÕ–-[¦·�Y–Ç|õßÿýß ò9ä�ê†7¼aµuëÖy‘…!ŒBµÅ©À„èÞ¶& -xÛ·o¯>õ©OUŸýìg«/}éKÕo~ó›ZŠÐî¯xÅêú׿~u×»ÞµºÝínW­[·®¶N.3ÅÜUC /׿8i)üqñê¦ø ‚÷õ¯=[d¿ýö«Î:ë¬ÀÙgŸ]]ûÚ×ήæ®|å+Wÿû¿ÿ›…WJßœRz ÜñIá•Ú5=…?køŽÚï¨7]`ºÆcbØœ~úéÕÞð†ê?ÿó?«3Î8£q»LThð§œrJ… ù÷¸Gõ¸Ç=®ºüå/ßNœ~÷»ßUüã³ ^éJWªöÝwßyßüæ7³ÌŸ‚—¾ô¥«Ÿüä'ÕÕ¯~õõ–SÂûßÿþêk_ûÚ‚._å*W©ùÈG.H�„Ñ)°re˜«�N½rÍÊ´Y’9]tQõêW¿ºzÓ›ÞT]xá…c÷ñ¼óΫÞýîwWï}ï{«£Ž:ªzžP]îr—nh�ßøÆ7²ÀV¯^]]íjWS!.-PÒPî ƒÒí ´Îr{>餓ªï}ï{ º}Ÿûܧ:óÌ3«}öÙgA^$ G¯)ññá DéB(Qf ¦³ª{⟨«÷¶»·k×®ê=ïyOõÿ÷Õç?ÿù¡UÔmãð.¦@‰™_á W¨.q‰K\\ÐÅJu(Â@Nkàª/ùèùçŸ_ýð‡?ÌöÚìÞ½;›‰ÃS ÿð4kZ#ô*M)5ãå`άLPÝwéößUwÙFÀŽ%fŽú?·JݱcGõ�ï|'Û[>Ô[»vm6¹$~ë[ߪzS³ºêU¯Zí½÷ÞiV<¦Ž¡˜º!i¡N8¡zÑ‹^40“;Vþ¨ðYÅ "† ægùW¿úUÅ~r�à ,Êë(4Ù7¾ñ�µM¶@†…S(1L¶VØNñÎÎ}³½ÂŠ;Í÷e‰{|~ûÛßVŸþô§«ïÿûzaj~.gbLQës~¡Ž´’�2*Ÿ~  ›_öý¹*ç8Q-Í8øg_Îâ´‡ÆW¿úUý@+Æáz1~7¹ÉM”f¥11XƒBÆ�mZþ›Œ¥µ…Vƒwêš×¼fcÛ�´ö¾Â%ò'K�ù³ÒdÛ^²­¥/ÿbtôùϾN~¹¶™�Ÿô¤'U¬ônzÓ›ªª?WnPLóéOº2Ïw¼ã:‰39Õ9ÃÇ>ö±¬jÚê¾ó�ïÔ‰ôˆ#ލþéŸþ©:HŽž�êØç΃~ðƒÊpJp8ÊÈØÝñŽwTú\ç:×)]�ìüÇ\�cÇZšcOñ¹Ï}N/^úÊW¾RýáèÅd²eRçb¥c�=v¨ûÚ×¾¶¢î ‡v!�I=çJûÿ”EÃsÚi§-¨ö”§T�ß"H6uЈ÷é­o}«jñ89ÞQÞÏ{Þóžºe˜Ó ‚ùÓE�:�Řô™sŽ?í?üÃ?(óG�?®±õQßâ·¨˜¼l !mû/ùKõ¬g=«úÈG>’fŸ™”èu^ñŠWè…CÅ™ VL/|á «w½ë]�™+•O|âºJ}æ3Ÿ©}Ë€^�T:kÏŠ�Õ õu¯{�®ØT–´¬\/s™Ë(½æƒk™ŸñŒg(N¹º¹4„�ÿùŸÿÉeiZI` sÌŸJÀd5�yb _4ÐR Ín‡6èÈ#�Ta€ ¦9„!h3ªûõ¯­Ûdo{ÛÛª·¿ýí*„å`•Tþ¹²uiŒ/(hâïúë_ÿz½£c˜û9X­¿êU¯Òÿø#Ð rhÝX”ŒCKõyGù/âyþ¹ 4ÜìR €ÇÎ3|o±‰F ^ö²—õUžiVw×½îuuå?.ó7ØôÂ’ûâ¿X=ö±�êÆA‹ ‘ú¬öîÿûû¬b5-†lLð£8˜Z¶R˜è¹’m¸{n‡Ààեܩ@ß™èÛr¨ Ñ6äV¡¥~ 8¢ ¦nêN=õÔâöGé¬| Ã?C{´)Ü48è¶AŒ6[÷º×½t5œÓb•è2lÛl=¤w( ó®Ž#d ù¸ï}﫚µ¾Ç»�ç=ïyÅ­A_¶.þ‹_ü¢Ömo{Ûy[Euu"oú(÷LߘŒ…"L#çPÞùÎwÖ½{TÄ“p|€æÁ~ðÈÌßãÈJ¯´Òô希ˆÉ|Tæïa¡rÏ}DÇ—AÓ€Z7çÀ¡)ó§>LÖÎæøÃVõn›ÌŸ6`þ%&Q²À.ûŽœ`[ªC[£:´ ÇwÜÀêm 4„Ê=§MÀŽ �w‰6 ½�/ÏØBÜínw‹ù‡¦a³ä`ØÏyÎskÃJp,[�a®·zNB˜ž±hÔÝ%‡´ÎTRÓ—ê�šŽ‘W3™— …÷  8Ï~ö³k'0V£ÇsŒ–Ú$�•,L�I,ÇÔ¬.«q4|±äJ†Ùw.ÁA@C…‹pƇ™ÿøÇ×ÒÎà kVRÿ¯ÄÌëÞ›¶VÇÖ Á;‰:×D€>M^ aøÞ±2÷ZŸ7lڛþßýîWÛG¶[ÐØa y«[ÝJ·îršÃã3ŸùLv Ùv0�ªÔöøù‚#[ƒhG~�ê³ÆÀìŽÝÌÙGÄ-ç0Fca…9 Ç$ ó/Á€ï~÷»«å=4_dK‚ Ÿ7«øœûîw¿«ÆK÷w· &�ºœyÎÑ,ÍiŸ‰º°ŠÁ(‘½ÿœã$ŒQÓæ\[ �‰!Úq‚£$8�7 �S 1¶•C?X©Â™ðKBK‰™sùO‰¡RgX­�§8btŠå=šÆ‚í¶øeÎ�´-Ù°bO¶P®u­k©•?Ì ¡ÊŒÕ°l§0ùfîÝäÝÁ˜Ð¿_Ü“Á‰è‹U>êïÔѧÛßþöiò¼ghÓ$d?ãë½ùp:‚ÿ‚ï*‚&%¾å‘Û2 Ÿ|qBÀ ÿ©O}jQHÅ�þÒOÞ-ûº'ôG æ]Bã„…9„fpô'<,/ÂÙ¡@³3V1erÂH+ç°ªfòI ¸reÛHÀ.]I\„�¿ÿû¿WæÅ/«pcbLV‡vXõ´§=­hô†jÜOÐCÁŸþô§ö8/ä v|¡�=XÚäÙV8´ <ðÀZ=ç`L؆§/ÓD`ò†1Á´aR0Söº±k@À`Øö‡Ñr”T«à�'Ì� ÆÃq=˜ Œº\ýÌɇÔÑgŽ~ú#~VÆW:3˜iêXÅ–˜e¡‚'‚×Dƒ/t¦}˜Œæ„�HÎ¿äØ·‡–0!VÉœÚ6xbD‰f‰÷ëxð€á#`ÅN9ŒærŽc–Þqü �†˜cº”å˜{ð¶º÷õ}ÜþÇw\ñ[‡~¸Ò †ÌXY‡Ó;\Þ•Û^ÂȺ²¢ÇñÅÂ’Á„OÞ)«cZ1þ¼Ÿ=œ„à´ï-ôå]´r·ˆÏB˜�±ˆ)ê¿’cõƒ™„c5 “ιƒä8ªm¾BǤi«3SK2¡pŸÀ+_ùJ5TÌ­bY5ú Žv˜ô°¢Î9VÕ%d2e 3öŽ6)ó‚¼@5¹ãW0Vo� &Ã:»„”2iâ™hYiQ#G7B`•l˜ Ùãe¹»Áë «7ú�/Y’#¦}°ú%õ?ðh;¥õJuȃqÂ``Ò,9% nk…U.š®§F 0ÚBW{ŸÀÃmã¡=`•€ŽhZxç0¶Ë9ú†‡V9ç%Û;0ÓœCˆà*;ÿƒ’#�Ó¹w›„ocæýèG³`È`þh“r†�T‚–ügñüw>ô¡é©ž ;¾QßÒsããËG|2˜?N¦Íh¥# °‚+9˜«žI8>7œsLH�~ô£U­ ó¯sL¤\4”Û €äaJæ8b—c0`Ô鬾ӉÈêÂP™Q¡¦ÎÚL™g�<«ª>ð�ªéH Ÿ¡ ý% Usα „vrMî'(1fÛfȵ1J�’ö� GΩ°âÛ/1ÊäV¿¾.*rü0-IºÊ·ú¤é[ªp¶ÔñN•4$iYÞQ¬ðýø[˜>ÌŸ-ªœ¶ÅÊYˆ€•s*^DS’sÐ�°Žþ¾ ƒ^Žü¢õA€7Û`¶Ç¯�= «àœCÝÌDœ[ÙäÊ�“†º±„g†a@¨Â›8GN@mŽ7‡š¸tæ�ñPù³z©cþ«„ªqö¬SWb€ìÛ²Z‡îÀdu>Èqz£´…Á©„¸~6 ®t*�Ujn/†TRo—êÐfIh€!˜¼¹œÆ…: h†u¼ô…Õ:q4xÆ/½¡/…��\bˆ¥¾"0x[Œ¦ÆÈ0w4’ÿ&cŒ`Ü„ùÓ´g>qÞ=+#ÂkÎa/Â{2H÷uùñâÃÍ>B˜ý1ÔpÑ ’ΡÍMú¹²ã¦qÔ(çXÉq �ÕkF Œ’�«0¿WÍ%.¹•«„˜&ñ&ÎÔ¦¹²ì§®$ÀøÑP ªoê¸.ç`‚¬ºÐˆ”&}_æ—Ó†Øä�c0\ÀS:nˆÐ–{0 C’suš†´|I­Î{[bÆïÛN¨§�ܾ¸/_g{¥¤u( Ãô•w5çדN:)«}Ê•'­ÄØÁß û%bÁÖtã("ƒ!È„[>`JǺ)“4ô댥ØM'µaá[;u!JÉõ&Lcª¦Î¯ò}3 ³4 “r)*NöKs*W_ÇèQ¢ r«ø’`«fƒëÛÊÅ1´úÜç>—ËÒ=Z˜ +»&®Ä¨0Àãx8¥x•êÐ&«ùÜ5³¥ã�Ànª§?u'ì½Mñ¥†“:ž|òÉEƒSÊ ã sno³4Ö¹:9|Ñ@”îè`Å^RÕƒ?eyßýxÁØKïÿ \ñ84 hË\9À¶Y¡S+ÇÏÌQ €™²<Â%5*¥a˜9敇Ô,• .eª\e[b î.JêZ4ÖŒ�X½æmbI�Ë᛫SjÚñ(«÷§?ýIUËöìC|Z]!&¥'åÁ›•?‚LSWbæu8•ê°".¶•"*qèÞDëÂ^u�!ÇŒ¡Ã[ßúVýÆ@IHlJ«´\‰FXÑûcp¾@NC⡠ç4Ui¹qŸòx_Í=਎?þx=Å`i¥¡ m ‡öé>÷¹�ž€©³!júÿ*µé‹C�¸hqèÞz«9õ´5‚ZÛ¦¥µò§÷Žcˆ9#`E8¬Ñû¶9ggøÉ£Íã$�ÉœÉÐ\Н¥û°dæÛ´ò%ÈŠ‰=R[½Zùº°ô�ð‡ùû ½Z˜Ò©„:FU aI(Õ¡�R�÷º£‡¹•5ýã~ Ž™¶Íü,i3ôÀ¹ÔWê@£\�´¯NÂ!|ùw�±àCFMÞÿ?Œý0êå¤@é4�Õ¾Õ�pq(€Å¡{ë­z£Ÿ8yuVØiùQŸsÆMÀbÁêa˜ ‚=ì’j˜½u›pKm¢ºfõ:l¿›´iô) ô—ýëaú[:Á�Ö¤î8˜áb!ôðà–NXê>TªS'h”VÑ‹—++êƒdËÈïeS‡û!Þÿþ÷[õÚæŒ,Ân(@7t�8Ôº æâ­æ»B.wL޶˜xë¬ësø”.bE36¦TjÓ&üìRŸ9- J´éÕÚ¬²±yȹaVÀÔǰÔ.Ìk˜É¶Ä¨êp*ÕAû€6ƒÉ:� KÂøÂHÓhŽNô¹tô0eÆh^üâçÀhGÙ¸DÇ."DðÆpD`üÍo~“…�ü[!Ôà% úè£kÇ9e˜n/ý×è8‰­08äˆ-/§0xFC0Èa#ƒýÛ0áfŸ!ÌþjJR?™ìk3‰•.8i‹¥Õ8ö¹•g©] ¥Xíå«%¬ÙmB, öI[%Õ2Lµª·£à›0¥œK™W®ŒO+]ßL[µúòuñ3¯Ã©ÄÌGJL4‡3̧dt™ÂÁz¾Ä„YÕrµ4Bw>𮥋µO_sy–h;`RW¢)èÚÔ>£tÌáœwºNceï{ŠÛ(Ï,x>áÍ‘IþC'v/¶ ¥­0ÚÃÆ„ÿh#ÏQð‹:“£@“£u§-±/Ο:·ÊàÏŠÚ�?|a‚½Xö4ù|*gˆq%&Ïu¾ÃLÜÄW2Æ»Ýín7oO¼­6Q‰– ñh“ Ú»ÓdµÎÞu /Ãâ¹ëŽ-f•îƒ[^B³ÒøÒJãÑÒdß¶Ð�â[b¬ho`æ~õΗ%sÚuÔQªÚ†îƒ\iÜøÿ”l-JÆ{h†ªærÛZÎ% РþŒ“Ï;ŠÁ �!…­��üãÕË_þò,xÞW„Öa¶¹²€"qÑ)§}ÚA€?pÝ>â)§œÒÿhË8« î©¿Ãî _pcÅ€ÀaÛ ¥ Ciµl½'<“áË^ö2Kž2á²ÇË„e®4 ¡V§Mƒk}¶�ú–ÇüqÇg ç…LÚ|xå „¹”Iºr�Ì=XÛ„%•-ÅKª-á„æ‚Õ-+Uk×*ÕYáSÇÆÔê²gLs®$häÊ–ðEÛ––o³tTÁŒ±Á{gu}qnªÌ¹:a§dhŠÖÍèc0Kí’_Ú*À ±nœ�Y程acz¡*þœ±c Ëà#LÑ'´l\ä5^¾}ôöå#>½`zÇfhÌJŸMªÖG=êQÅOÄj •7ç�¹WßÔ¶¬ °îg¢`9(™„ &Çù˜ˆlr,…X—Œ“ît§;©*ž‰Ê`À,rŽ•–}`†²8«Ã^(ÞÒ1lúÑ�~”S±ú§_0i«OÁÒÞµ©Í)kíÔ…”+ 1´Ý K òÌžÿüçSe�ã¡�ÂHᔘ0ÌŠU1cëë€o©ïŒ +w´ ¾N7:–Ú††0"+G˜ÓlÑQÚbåîËú8móÌ;{ì±ÇqGHÛ48%›Þ /TQgõÒÚäö$X×§åí9W‡44{Ü,ˆQ6ÜègÂ8w؇…€m˜Þ¥Ï–GŸK'‹ØóÚ«áìQ €Ù³"Æ|Uí aV%‡*“oŒ—VSÔ³I‡µ${¯ì¯¢æOUä¬Ä™4ÍñÙלC�ýÒ—¾´vÕ€…ôƒô ìÝÿÀd‚æ:\B�c�Öƒ/¥Ùå-¾ŽÅ™xù` Ú‘œ£oLÜž‰±õQZ±ó2Æcm•BÊaé_Ò x}N.�)Õgåǘ"˜•'hCÏáTR×"0JuìÖÅ®– Æû´ÓNË‘]Ç|}ùÒŠá’r¹¾‘ŽaÛ«^õ*ý$ñ»Þõ®ìþ?åè/‚˜µéÃ’q}ÀØÑ—%^r|è§äø|ó[ŸÎ×OáÚ3ï4Wnz衺g¶ÐȘ6Û:üøø‹;jjp|[/„ˆç>÷¹>©Gàá:ïÜûš³­èWŒÈTR l¦rXFCŠI�½ùÇ>ö±E0&"¬�YÝòu&>&2öƒYi±êd²àÃ%%Ã>`·I“g¾Î*07YÃÈŽ8âˆê_þå_Ô\qܦǞ?÷às=çXmsÌ1úq™tâáªRT’6 úú0¾™Žõ8‚¸á(‹‘!+£Òõ«Ø,<ìaS柪nK+W[Û Ã¥4ÑZ>´À>#°ÈgGsóÈG>R™ªqöù9�@J· lB„öª�æ–Ç„]ê‹d¬¼…% ®u=ƒ(ÁG.ÆÔÓ�1HUÜÀd/š¯$>ùÉOVíG&y‡Wn³ãŠÛܾ;uÍ¡AÛQ²SÁ&Á´^V‡#Æ7½éMú^C_„CìIÚ¨ƒ€fv“ÀÊÝÓÀ8s¹«ø‡>ô¡z/[^Ѓÿ cÍ>ûÙϪPžÂ€VWm˜$³7|ÑÚ ÄsD›‰Ã;LµB–OÈÿ‚«¼¹+ ´H`ÞàÔBJ+?¶fħ›!LÉøøÉn”îyÏ{ê�]¥ctÀæÏÊ…Ç1iú‰šýX´¥¶±æ&)V×LÔ¶B/áÁDÃ%&œëö_–3z!ð‰Ò×¼æ5Y¿øÅ/t£= #',¤•Q©r\ ÆlmY™ó2C²´<õri��I9'�‡ÑÕk_ûZõ<ãh†ê5«� W¢…×XyBVÃ¥íêÀìr}å�óé%ÚÑÃTXÁ£tÓ$ý`ëhTÞ¦qÈÁ'ÕœƒYâsa A„÷Žþó_yøÃ^ñéê’cßÞ³$P§õ¡»Ù$/¬<ÿAüÓŸþtý‚¸ñ¿( àV—ÿ7‚‚F¸¥A�ØXã8¯ÜûÍѨ®�i|;ÏyÎs²G©|nÀ° ógåÏ�þ0€”)L –X-Õ9´ìk–ž¯{ä‘GV‡Šz­AΚ¿Ä¼X§Ú·.Î~mÝ]uuëò  [59Ú• âX¥bH˜:4¬VSs§‚FWjÛ˜q )ׇ´Ü(σÆ�waÇÿ#½{/È‚›Ó¦åêÐÌÜ\I°|B4hU’1l-²&»xO=^Ľ°˜æÅs{ =ZN $&nö;‘Ö»pL6Ø0á§ ’ÕÒ‹^ô¢*Âañ@KÀ¾6N·¹Ím²ÌÈ`rv›Uظ†Iôå!yˆn`Ï�»�ulN .ƒ‰á› aØI´=ñÙJ>×fI�a…gjë´^©†xŒ}&�úú{ßû^ ZŸKçû?üðl�q�(S­ÓÖAb�“2KÞÑw¼ãC}Ü©I›¦�£,ö)lµåÛ'=éIz‡S8“rmÿ&…÷,µÀ,�Ö¸²@-ŽªoÐê¸ X˜#+qVÛXS³ŸÈþ{αšeß=Ý Ï•Í¥¡zç~ŒþØsÌ]Î’ÖcµÎ§aQ·Žâ˜¬év‡rÈ<ãFˆÊ4ç`^MWÀ¹úlß°—�î¯æÊú4èUš,anÞPÓ×+©Ô넆ÒÊ�vJBƒo“8*èÒÊ–¶S¦iõ1æÃmXÇ;�­KÎñn!Ȧ+u_–ÿgâSa×—ÉŤrïÌš{9Ø.k"0å`[ÿmÞ>ùkÚ<餓F¢•Á%ä=Gþ‹Ð�ÿ£ÙÑørŸ] „ ÀìŽÝ@Ì™Ü÷¸ÇU·¿ýí+®¹ÅÀ£±º/z ¨ý˜Øùóó}p:ëL˜ƒ˜;ýÔ…)s’ î²Úd"<øàƒWVÔ…±3,18�/“ø!ø`À8h‹�º´ÓÇ8 Íý,�¦|i ó£þ0ø/u¨ˆYq�x≪šMóíz@'û0KéZbÆ*ÇPQù– ¡INh€i× Ömøñ+Ñ�6ÄJLГO>Y…Z üêÞcÞ'TílÝä&7Q†k´óa©¯¾ ñ{Ýë^ú^ „@ëÜ6ˆÕAs“¶ýO|ÿ)Ƕ _Ùã {ü7Ù÷/�60¸„¼_¼gü7†xß¡;ð¼–íÿ'ì|0DÄp�šßÚA`‚ÙãÚB»Ó¥KéS²»Äa9Â^±Ü-/ÚŠÞ@z�6¿ª"y¿Fž×Š_çBâëI“}ÂK‰Šò2),–kÈŸñ™„€¿’6q/ºÙÅz¥ŒG{˜ðO“£WìÁcøƒ…4*Y&]&&Y?«&¶˜˜h`LîXØgd?’•#{�¨'�1³ê2بxi—‰Œ}ÆTýžö§ÔoÒÙççFuô°;àHmÂ1˜¢MVK¬¢`àÒÄ}âŸPÚ¥e�a+ÍaðMáðŸÄÂœÛØP•cÍÀ†Âd ó‡FŒ=c›³Ü¦ Öç9‡ÅzîL?+]V•¹>` CÉ9êÔ O¾N鄉§¡/ïã¼³Ü ˆ@K¿±¶÷cË»Êe6ôÝ. âÝõçä=<4[uÎæIìHx—¹ˆc—!Œ Â6ž÷—•8ÿâ%�…Á#äÒ*Ƙ§Éÿ“m&þ“x`óŸ4ØÀ$�w•¾áùß¼´¤si[üø2†ÐÐNGЈ÷‰ÿ!}@Р½’@æÛ*µïË xæDÖÚ½Gþ¿§KN�*FƧÊi¬2·‰¿¨ßîü‰sW·÷¯ìOˆG•ç=tÌ«÷¤àRt!\,,iÀ¿¼¬Æ™d 8;ÌÊê‚ÉÀ„£Ì‚yXMã0`&L˜3íÓ&íY[0bV¥É&ÇŒµÍǪ‡ÓÖ&p¬M&9&ЦLËÚ³³Ööl!¸›€4 ¾ÇBƆɺÁ xf|4ÐËpguž[•‚O‰¦Œ9>uF£4�gÚ(©ï —\½4-¥¡Í»ž†i�ôaæÉ;<ë+B’�­ï{Ú¦ÁkÒ¦águhϸ@Þ)ú#Eðd�’Â.ã Lû�ðl°�ϸÓ/|ú~åà® ؆7ô`ü¡›álþ‹ÃŒ%ð›´ox4 ž9A;€&4¥LlŒBµ¯aÕ[g�N0ãvÙVHã¦>+V1øÔ�Ó¿a'Ç´í¦ÏLʬö›¨_=£k  ?ŒƒY´Ñÿ†Ìöà¡eaTøœËÁKÛÌÕkšV×vSi9ơ߅cìês[B9zu�CÀœ. „0]ã±d°‡ÁÎ"»¿m·?i†�â?nûÓoßñ:œÛ¦w][‘×â@{´ HA� @P (˜ „03Cˆ‚A� @P = „Ð-RP ( f†a03CU�hºW_zùå¶MŸ¶á ‘ikoÜ=úaû;n{)ýÆ…7ÿAù�Ï Eþ$(€IP9Ú ‚A�‘)� L#ŠŠó(À>Ȩڣ@ØÄ«0•Xîôiïÿ ü{�½ë—:íÿb÷wÚðéšþ¿ „ :” @P ( ÌB˜©á dƒA� @P (ÐBh‡Ž%( ‚3E�°˜©áêÙt±»–fr×ôéþ¤©žögÜ=òi‡7.}Ûî߸øŒ[©õg\zLkýÐLëÈ^A� @P (è�!tHÜ ‚A�i¥@Ó:2�WP ( :¤@ØtHܽxH÷ “|ËÓŽ_ëÑSÓþN›MÀè=›«ÙvÿÆÅgÜúK­?ãÒc©Ö ÀRÙèWP ( j(@ q"+( ‚K•!,Õ‘�~‚A� @P †aPCœÈ ´E�tOµ-¸§køãîÙž¦ø¶ ßÚiN>Mñ.•[jý)õ3ÒÇ£@hÆ£µ÷ùÓõã–aP ( tB�˜oÇ$kc°W}O0ÿvP‚A� Àÿ·w­½mëHônÒ-ºýÿ¿®è‡] í½IH·mÒ›dw­£�IÉñ#–­C€žÉ!u4žËn:†@k�üÇ@ÚpÌÀ†@yš0FÀÐÚ/þþ @OT˜ÚÛ3=òG¼1Ï …¹_ÏkŸ/ïwìïì³³Íý|ù¼Sò¹]ÏÔõ`\c·Ÿ4ö€0#j:ÓÀÁâ KýÈR#`ŒÀ6Tb¬ÆàmL.~� €uØ$‘WçTtݺ5FÀ#°+9k1�ǸWKÏñÅQõ[¾‰£d‡+k\ÔµÖ#°'r|Îrm›MæÔÖ�µÎ¿ØüöÂ�´¯­tò_ƒÄŠ=!¾µ'Kû1“ϳëoömo?W¹½•s»ží‘X­Üa‡‰<Çbêw=ê¢Öû Àö·[pðÏÅIñã8;æö{¥0 E@c'xʤXk+ Œ©\´Ñ$ø˜–e®¤¾$ûçä|S#`Œ€Ø)wIi�r¦7\/dé`XÖW§´áB€H˜#`¶G€±´‘ü·7ì•ø7›9“ý(¥ƒÒa73íYçˆ@øÀ9^Vóšòõîú›€æF¯4pn׳+lÇÆ#öGìÕ§¬£±8¦–ù»^÷¹¯÷€é;¬ŽTsºg8”N:mÒ3Œ€0Fà%0¾v´ÄÝX_‹É4«±›:SAÀ€€Qaé@t2L!? á”ÏpL:iÅ–UFÀ#°]|ÄÞ0§2¬S&êVAÀ@”N'B#UžÆ*ÔÉ¿@å#`ŒÀa¸¸¸Ð'­93N“âäIs°¶êßü¾ypí¡ã¨>ó(P”"NŠ…Kkù;ßÀciÌúz§îG¾³¾˜ —¯÷Ü®oSN�8‰« ÑKÌ� ä°“)ÆcêHø,Uð€ö�o9�N�ð9?ºV¨mË1FÀ�!€äyyYbm,Ä_‘™àI±c9x7AÀÀ u�ì8”•®]Pž¾f�€0F`{›ûWˆµaî)ºŸ3�Ý©�F»+i¡¯.†Ž NA‡iÑA€ÇRÝã)µ±P·òe#`öƒâ*,ñCVP&R-Èç¸ÍÃh|Vžã‹¢þ ÀïÛ gà×5Ç cÕèÓÃÃÃß?VíîçÏŸ×ñ�ãE8.ì�^@ÆVA¹GáWS†zÌÓ¦kTOž6(¿”Æê¥K&çïz¦É *vÝs×õ8Ò>lè¥íÃÞ¶6Âïô([ñû°¡ïÃÞ®6v]¯×³)ˆ=ŸŸʶoSg ¿«:�êaƒr¢1ô¿>ÖÞßß_Gx½CˆE¬�S×’?öcϦgQ>Ï[”¼ôŽÐ'äîÎSÚêtL8!²çÅ·oßî¿~ýzûáÇÅëâÝ»w½Œ±Ëpd ÿÀ¨öpü"Çܾ@À8d4åWšý½ÆÖû3&–QTˆù&{¨ëin(‡ÚûPvåèaÃoOÊî&‡=Ô5Mí½k²nÙ?äõ„ßö@”|ì=x¬Ï1|Ò�óâ»þ§˜RhÿùòåË¿cïîî0ž:ö‚®³c¨úØ¿?#&,­-®èœY7>g?êè ¹gÇ+òÍÍÍýÇ�ožžž.nooïß¾}ûÏØë2Þ¸o@ß ùÇx)ºB àq–˜×÷�ÑÊù _‰qá�•dy–1oæ±áY�Í×—·¯{>÷’mg;7Þg³=ÛÔÁæ|W&w\�ðÅ� w�ÿbª$l$|ô+4~è÷„òSèA£øïõõõ_Ÿ>}ºE¬ óøðÅûÅ–P�Û¡î“Í™‹.0®�aíٶŸ“¸ÑáTš¡xã¡OZ¦w:èK²Ú?øüùó}¼nÃAïß¿suuõ6d$ÿ7‘ô¯:¾Á£à“~=À'¥ˆ=ú§ࣣ‘®¤¿á�ñA}4#pD¼8�SöGäa �XŠ˜[’4({èË'ü�‘ì™ô �"àïÐ?‚þúõëáû÷ï?âÃÕ�x € ÇbÊe/ì×õ kÉ_Ç0^rBaö‚$³°K^]n8’)*ù>ùÆx<Â'�‚©Ö¯:=¨vÌÕ1È´S¾™ö¹7)ϤgŒé¥QGÙÔ#pl4™�g²Õ$ žŸàÉ?v:Pv|ßT;u:ö(gÛØƒgQ>Ô%ÿó¼�Ó��–ÜpÓ5™Ò ¨S‡�ŽSëp6Œ³[í©$~ØE²g€µLþ¤¡Z³‰ynFÀ�9"À˜‡³1î�gÒmÅO&lÒZ‚ÏÉ�sAkvuœ!ËÔ�.²-½Ð›ç`r¥£Ô( NÇ„Ïu”iëÑ@¹Ž“¿R¬gòW[jöÜŒ€0sE@ãÎÈ8Ѝ±�1T“9x&ûLuL×+Ïý2 ³¥Aï¸X¹IV#;d8æ)…C²1QSå:`�u(°†O°†ExÊ´•iLq3FÀÌÆRRÄ>ÆBRè¨GLÌ�Ézò ydµûc=†±ò"› €öms 83��‰š2×ÓÁA‘ôÙ™ôù‰Ÿv´Ã^¶�eÌq3FÀÄiL]+ s3FÀÌ �£ä•§ÌøHªI|.tkh‡¶•›,C·øæ`åH²pM¶”ÕqÀÃÑt^ˆƒ¦ó阠šø™ôù©ŸvµÓpÞ/ËœgjŒ€8ˆ}ÚTf\ÔD�y$uÆLMðc<ç“rRœGÏ¡rÖclQÍÀêvÃ4©RV N†¦sWšÕ+æäNÇ„#ѳ`Ò'…Mí!®íÓÚsÝŒ€0s@1PePÄÃZŒ„N Ì£œ €<ÆKJûa¢OþÐi˲Ž-†w°~«áH´t¥àÑáhÚ¨GrG£ŒyHð¤àY`&ÒPõEyP6DÂÔ�¹"€ø§�2ã¢RÄFÊ൳€Ž<‹�ž6Z4¦”9 n‹-â å¿Hà<šü•‡“iËŽÆ1èQ€"±£c-y&{R1¥™ü�ø�Ž›0§„b yÐÜ™À•‚Ï�EôÊ×ÖqìŸyèú†\Ð c[à>7Šu�ì�álhµ¤LGeÂg‚Ï2ôµ®¶k{è8x7#`ŒÀÈñ’g¢^)xíšÄ¡‡¬:Ê-Ê5j“<ϱF—œüÆ¢ €5oX)à4H¼ ¹Áù˜”IédJ1�Ÿð§(ö€-ÚË”ã nFÀ�SA@c(y¥3Á#nRG¾F¡c×uœKJ�d7AÀ€€!,‰¸å0p4$vP&lu6®åð¹àÚ)KÝŒ€0'‰ãh�jÜ$_KäÔ�*?¶†c ¼[BÀÀo@à LÄЪ\s8!“:y®C¢çzÌaǼ\8pÏ…M7#`ŒÀ)#ÀZ£ÐmÒ·IüÀŒ{¿,S¿8ºø ýŽÁDLgP]Íq˜ü±ãµä[×äÏ}H9­¥_�úÕ#0o4^ÖxêH™à!SGž4Ï¡^)Q�.·^·ôïÿÌbÿ;àìÝLu-ùBG}�§.SØÌ:ʵý8¿5F½©0F`îô 7ª<έ2øZç¼Úu:§ÆC‡†ù¥9ù¯pXü€Î2�£ Ikë�§Sæ9”™Ü¹^ikŒûp.eКNÇÍ#`æŠ@Ž›8gÖQÕ®sU_›ŸçBÖÆ5ª[<ï'âé)F˜|IUGžc ìË4ÏÅ8Ç(ƒÖt:nÞ#0wjÉ7ë S—y\_Ë21 >¯áxùçß½°pÆ@r€‘"3sB¦ Ú⹃Žg[Ës)›#`NMθ•Égªó0¦ãÊcõ�•wò'Bu��8Qè &n¥Ê׿–-d€ó©Ê2õ¦FÀ�SG`��ãbTnñ¸fŽ�*¯càµq^Ñù{…fÅ»XǤh*E@žÉDMŠqò¤ªÓõ:^›“Çu­y#`ŒÀ)"0HÈqS2®Qç�'ÕqÕA?hNþ8zÁ@Å:³c [ ½¦¯éÔ–y#`ŒÀ©"PKÔ5®¯¦WyÒ*&NþUXŠÒ@›@QLM‘ñ—Ì•eý“Õ™7FÀœ3­ÄÝÒ Wžã=uò2.ª° •/x0\8-M Ó<Ã#pÚŒ&ñ‘K]çä?‚\7ä`£æŒ ƒæZâ?5ÁãFÀ�3G`4‘O]»ýBíqüiZ·-؃ãíäø[ÛËŒ€0sA`§¸‡<Žr?xeØ÷ðÔà•Oì팀0¯ƒ€úëàÌ]ü€H¼µƒ¿ÐÞÆ�“BÀ±ñõo— €×ÇÜ�ê˜{K#`æ‹€“ÿqî� €ãàî]�€0FÀ�ÿ;PºS•ºf5IEND®B`‚ic05UARGB�Š Œ |Š¡mŠÑŠÿþƒ‰Ô‹ÿþ€ˆÔŒÿý}‡Ô�ÿüy†ÔŽÿûs …Ô�ÿúl „Ô�ÿø\„Ô‘ÿ̄ԑÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ô‘ÿÓ„Ñ‘ÿÐ… 6Q�TQ5 …‘ �¢­‰³°ŠŽÀ€Ô…ÕÔе{�¾�Õ„ÖÕÔµªvŒ¾‚Ö‚×ÖÖÕ½¦¹p‹¿ƒ×€Ø�×Á£ØµiŠÀ׃ØÙ‚ؤéÕ°f‰À؉ÙÃŽ›�¡¡cˆÂÙÙ†Ú ÇǪ̀  ¦¯¶w‡Â‡Ú Ó¡©ÕÔÓÒÓÕÔ‡ÅÛÙ 8S«×‚ÛÙÁ‡Ã�Ü ÛÚÙ«@5‡×‚ÜÚÁ‡ÄÜÜÝÜ˧` >V΂ÜÛÇÅ�Ý Õ©62@®Û�ÝÜÄ‡Å‚Þ Ù©(tÃÜ€ÞÝÄ‡Æƒß Üy8@F�­Ù€ßÝŇÆßààßßàߨF!?nµÍÓÞßààÞŇȄàß³†–ËÛß‚à߯‡È…áȤÆß„áàLJÉáââááââáàØÝááââááââàLJÉ�âáLJÊ�ã â>–zˆº€Š”¡”�ãâɇÊããäãz}Ù€ßÝŇÆßààßßàߨ�j’�ºÍÓÞßààÞŇȄàߣ ¨ËÛß‚à߯‡È…á²IÆß„áàLJÉáââááââáàØÝááââááââàLJÉ�âáLJÊ�ã â>–zˆº€Š”¡”�ãâɇÊããäãz}Ù€ßÝŇÆßààßßàߨ�j’�ºÍÓÞßààÞŇȄàߣ ¨ËÛß‚à߯‡È…á²IÆß„áàLJÉáââááââáàØÝááââááââàLJÉ�âáLJÊ�ã â>–zˆº€Š”¡”�ãâɇÊããäãzù ÀÛÿ ßÜ„ü¿¹Ÿ, A �‡#ð¤�˜½‚cêÑIÏ ‚@xvrÀ³C¾¿>ÂIÈ“ž$Í ÿRóÎ,)¡ ‚@xÃ<åUÿ��÷¼áQYzAà‘Hà‘€|ïÃü$ù*~ßqï›ÿÞöìA l"°+9ß5osô»Ö½ÇIà.ˆñ� Þ)¼§_û‰öõÈÿcó]ÇÛ5ï‰�ͰA � ðÊØ•€ïš·ËîN�5厙BÀ–8ƒ@{�@ {ÿ?í>ù¿/ñ¾o¾A¹o¿ûæ{žÈ ‚@ØîE²µË»äï’3Bo®ß\lc¬6àˆ‚@Ø{RØûŸøévð ÈÿÁž‹Míä®}vÍ›š'þ ‚@�m|[¼ŽUõQ¿‘Ï}æbÎÙ�)lÀ#� °w¤°w?éóìÐ3’ÿ9r>±-[|4f|A � ŒÀ6Â=Ÿò{Ü‘ìûô¶ûLùʆ°Ä‚@xó¤ðæÂçß�Ÿ$ÿ,¸'Ú½=Ê™òáw�ãX•Ûò¶ÅëXу@A l#Ù£øÈ· ÉQŸÞ×ÛŒ9òm›«ÅSØ ¦$� Þ )¼™Ÿêu,ô…Èÿˆ��|=HÛr~6ÞÏ;� ÞÛˆõT¼÷÷ö6ûüm6ãõ9ÛæXÇSXC%� ðæHàÍÿ„Ï·;�ÿm„º_lŸ?g÷1�5å'þÐØ¶¾ž;2� ‚À6b=Š÷¾ÞžCµÏ�³ûØÜ¸ÄfóSØ_âA �×�@ ¯ÿ7z+ÜBþçˆöhý}~µ«NßjW½Ž{ÿTn?Wßú\_çD� ‚À~#0K’µësñ>ÖÛ¹©Xï¯ö”θ5Vç铹)ŒàŠ/� ðvHàíüV/¶ÒG ÿSĹúï«WzÍ5½¯ÚSºûZÖ<ûªÜ¯¹Ñƒ@Aàý 0"ÍuïGñÞ×Ûôï}Õ¶nYóG¾G¯­æÛ_}Uw¼É6àˆ‚@x¤ð&~¦ç_ä#’ÿq®¾‘¾«¯3êC|ÊßÇêXÖk_ûFr×¼Qßø‚@Aàm!0IˆW»1ïc÷±k®uK¦¶ÞË[-q�k{[ŽÇ¬ùMOà$q� ^5)¼êŸçe·…ü³¨žðöö(§÷Õ>#ݾ^öã`ÓœWõm¾Ö±ûSût¡µ¹KÎ:9JA ì5“äxµ×£xï«vÕ¢ÚÖ§dÍŸËY-mcìÚwNwßµL` E” ‚À«G €Wÿ=ü÷„Ù¶%;9ÒíëeŸßÛ}~o“_›ãÕWõmqrwÉ©cFA �·‰€‰õÔêçâ}lÎvÌ’ù¬?TzÍî?²klJw¿µL` E” ‚À«F €Wýó<ÿâ¶F$·÷U»êìLµ­[Ö¸}Û¤rÞ}Æpß*ë8Õo}.>sÿÈ ‚@xûTR<Ú›¹x�U�qªmݲÆíÉ‘¯öíõÞîû÷ñ‘�¯µŒDdAàõ"�Àëýmž}eOHþ+9¶nÉ~ZÉ‘ÏØ8VǨ:qçôÒcX:nÛrÊO|.æþ‘A � °¿˜0Oíá(^}Ûô>n{$G>Ö…ß1ÛHÚȿͷì¹Ù×¾|`�D” ‚ÀëD €×ù»<ûªž�üW²l}NŽbö��uË‘Ï1dÕɭͱm>â£ÜÚ/zA ¼O*q!PãÛtÇçä(V}Ug=Sö(¶ÍGœæ1—ÖêoîØ€#FAàU!�À«ú9^n13€)Â[ýÛôQŸý#Y}#°ªßàáëý#_Í·néþ¶‘#Ÿãs1çD� ‚Àþ 0$¾e÷¦âÕoÝ’îÖçd�ÝWße޹b4ÏÛë-Øœª¬�(A � ðjHàÕü/·�G$ÿì„Éð}ä(·úЫ½ë<µOÕéïfÿ®öTžý‘A � ð¾ØFtû¸mKв¾‹$§æõzo{üê·ï>²æÎéÄZË�F"2� ðz8~=KÉJ^=1ÞeyåTúœÍzj¼·kl¤×|tšó–Ö]{”ãÜm±š=� Þ&&ÑS«Ÿ‹×˜õûHr9N!½U›5MÙÄF­Žé¾S’þŽõúhì\`H`MœA �C €ƒþuL…@�[Ÿ“5†Îñ é­·�Ïü5†íf?¶ÇœÒ¯’\�ÑKb“-E€IhA <;)<;äozBøn#ݾ*çô>†}gûòå ·“¬}X‹óùô�õuNñmäb¨µ¼2æÚ×¢«øJïcÅÝTÏÙûc� ‚À~!PÉv¿g»ÄZwǯ:W¹Ö/..ÐëFzµçtr9.õ9øiŽ-­Ýÿ2žûŽ$#‘s§¥p’8‚@/‚@ /û›œ”½ÛH·¯JôÞf û«¬þC‘þÃÏŸ?7âÿñãÇ󳳃›››Céë"Ä]¾ Û󫃫õ¹Í×"ú3Sècîâ}³‚@ï �!Ù‚Bð+"-¿ÄÖöåå%ú­åéééíb±¸Á7(´\b?±©kkËÚ:Vö” ǹS’¾>6Þ3E€)hãA <)<Ö¯n&Ä;.j*Ïþ‘ÄWýS¶ýk ùÿôédÿP'@GÚONN¼5ßÿQ1À¯£ØkBoÒoé\ãRüÍÕÛÎHïû WA ¼!îÙÑÚ ©ßwþõXö[^]]ÝJ¿‘¼¡ ãÞ�Ž7*Ðç¦+´Â€üĶmäºqlå÷qÛHòûcš}½t>Ò}ÈY7í#Çñ ß:%� ž�žâ7?�àÞÛs’X�ÛžòÕ¸Éÿѯ¿þzñWAàH�»Ž®¯¯MÂ���7ŠX$ñºõ>Û½ô¸øiÛìeVûëý*®¨A � °ÇLXzö]d¾AP}EocØFŠäßÞè˜wóýûwÖnnt¬ƒü_sG€s4(Çú{›*àç:çµ9e�šÇÅèçøÜ1¯æ�Æi>íGŠ“è$‚@xZRxZ|_íè|bqî;’øªß¶%ÓZJïvå_'=GºàHw¬7�Bô!ç½dàêGg³d;6’øhci-ÿŽ|5^ô6±£� ‚ÀÛ@`Ž,¯÷.»6Š‚_ǯµ§æY¯Rîv€®øK½†û_ëX�¿V1ü@wÜȾU!à`uWóšøs¬©6º×e}©n[ãx¾m’Áœ³1°ö=E€ Db� ž�žç·: íÚz›˜}HëöÛ·³ÔsÿÜúßnû—Þ :Ù9V!àX'@GøâÏ�p6])¹S p I®‹¶¯ãXGº9ß¶d¯Øku�»ŽE A �·�€ ûÄž˜p�o)}¾mK’¬sÕ_ú5…nžýWãŽ7Š:þ]«Àñ§‘oî ‡î+_-X÷z�Þˆ=´µ¹»ÎöÍÉ®ËSû›"À8¢� ž�žæ×5 ܬ¨ïƒmßH·ï^R':\ý?äê¿Î�(«p¬£ctÍ)uIø+©¯:'KÕf_ñÕ­úzÝ6Ò�¾Ö«œòל•>ì?È‹+� ^ÈìÖw%áa_‡°]Àé~–«DNn[€Ëÿ:6¯ã`+r+öA>îà.Ž'õNLü’µy}Ö‰÷�»OQ€ü6ÿJJ,‹;Jò7ûÃÎo8c� ‚À“!�À“Aû:^�8üÌâz"[môŸÞ¸ê¡�öÌ¿¤Éÿ‰T�S�´Gt~ÄE’5Ñ—ƒà»ÀŽê¼b#†]ý#Ÿ›ó§lû«ìûÔXô ‚@x;ÀO·­¶æ@ö«M_¿ÖcÔXÕõ¾€kÙÜûÅ1D} üèÿA:�ð•Ža š”>%='²'ÿ•ôS¨¶Ì�ã¶ã©¤õ‘Ü:û¢}¦oZA <1)<1ÀoxxÔÙ…ªÛ®>ôj“Ó7çLIN@xóÿ?þñ�cm§l_¿~=ÕKuñ¿µ�:ù9âĈ€I>’b~ûÐÙXÄÈWãµ_]´ûÛ×Ûö¯ä¶ý¾K #fA ¼ ðЦŸÌ¡¿Ž9ë!úñ°)Ðjl¥ó²¿+ü¶éÿ+¶¿ÿþûêüüß5/ TÿÖäã‹×¼,�X÷HÇ$ÒKÖîõ['otg€óÞhø}Ì«º“ìsrí#Ç~ç7) RØ@$FAàiHàip}«£ú€>µþ>>²ñÝgkÄß}xþÿŸÿüçÉÿüÏÿœýûßÿþ¤/œýòË/Ÿäÿ¤¯|Ñ?1yçdÁä©1«mûm›¼÷þ>î<ü´Þ^z§ýŽ[Nõw<2� ^'ðQ3¶.޼Q’þÿ¿áwžØ{K×ñl'&?„þJr]@±¿ta@dŸØ¥ä%E�ÿþ÷¿—þ÷ÿ÷RÓq n„~U@çøX¥çEöº}äO5Æs¿šƒ�m¤»OÍYf¯þjý)l #� ðø¤ðø˜¾Õ}@î×o/�‡ßÛÈçX/7ˆ¿:6›Oþ‰ôŸªp¦;>ÿöÛo¿È÷E€_´}Ñm�§�j~äê„ÁWü™g}Û¿uäù¯9½ŽíƼÖçä®ysc$‚@σÀÏ�ü~…úÿ¿In ylx­sI©6~ú)—«ûÔ®¤^6EÄ÷Q/)ˆô«p±øë¯¿Ø.t\\¨�p¡ŽOÔ8(rGÀ�î›kÇ]õkRñZÀ‡íu!ÙLü9&÷>¹†Íc0&:’6§¯yØ­­ŽéÓîÈ ‚@x$Rx$ ÷l”§v‹ø(§÷ÛÞ&] h/ÿÓÿÝú¦í‹Š¿ŠÿÕÕÿ¯:™ùªg!ÏtbÄùÁšð뼩Ù�}õ?;BžwȺeÙî[eí_ýу@Aàõ# ãéÿ÷ß!ñu �»âŒå¾«¡Ö¿ãžÓ>'Ùž£åqP×>ÌæxÀÈ ‚@¸)ܯ}Íö�ºß?û-Gqb}¼ú¬WiÂ�Ïz“ºÂ$²Ïsÿg\ù‡øë€¿KþCW:~וŽO:'àÜ �‡®­õEg�½¬¾]uòjó˜Õwýgûßg®ŸÍÆ?;Dú� ^=&éýBážöéÿÝVw’S侎#½ Z}«µˆïÿ(@þÙ¸ü¯F!àB¤ÿo'¿éÿÓ|fàPþ=p«¯å\SPŒwä@Ôù××Ü  Úëçi_%1ï(’�8ëR×6úT#Ÿy,ɳ>’Ä��¾nç�ÕÚ%� ~�~Âw5@#Ø{LÌ)Öçd#îÊ]K} '"ûŸtÒòE'5¿Büåû§NlþÐö™±uR°�VüRuƱ*4ã¶ûí"û¹véóšsRxÍ¿NÖ‚ÀÏ"0Eþõÿò­CÃK�4ʯc;nI_ëγ-)î¾,(ñow¬ŠÎu•ÿTcœ(Εÿ#ù—ÿRÇJn!àXx£±˜¨½l@ý¼\d‹¯ëý�miò�¤qŒ¶Þƒ?ôclšuË‘Ï1ädÓ¾þl2+� ‚@¸)Ü­ýÌõÛ{gÛÒ~KüÞì«Ò±)¹&û«q6lÏ#]á8Չ̙®üVàWm¿kû—üÿÖIÎÏÏ :­óɼ[hÎÕŸUß꺣ï’s§Ó9–°îÑeW‚@B@ÿo¿ƒÃÈw'i¢oÍó8–tq|@ø[ȹŠS¸”l�¨àí"À%_Ûwýùòѱ¿åE€:6^*÷BÇÏöù@ Úˆ¿ žºJyޛ։{�øLø-‰“?jîGÝyÖ-ék}N’·Ñ8Æ #ú¤� ‚À# �À#€¸çCø`nYw_¿wn•}öùÇñ?Ò�þ3�Ôðý?žýÿ]'7­ ó€_9Xͱ–ŧвé|�xÚO °„ú'H× ‚À+C ç’½]—;s^Ÿc{Nö±Uq€7Rð­ÿ�øS  ö·úBþ•w«ãåµ6®ü/tœ¤8p¥"A;.*÷`¥óf@/Õ’œJþñ›ø£›lÛW%q7yÛÈê³nYãö!·6ŽñÚ÷�r·–„ ‚À;G €wþà vߤ»�„hü]e+èÄy¬+üÛäVÇ�ÒÏ$?iû¢šõulÅê< ¥=K˜Ÿb䌂@xZzþØÛÌ>òyUs±Ú×y#‰�ÿ�ÖºŽm|©æZòRq;—ï[1¹ÒyQãÿ+=w¥;å®ô®Ü«?þøãRÇÊC>HÁ€;ôÜÿ•Þ@>È'!ólõ˜i?­më.`;¯Þ!Ð:®þ�صUŸu$�\û°íG_7á’"À�(A �‡#�ÀñÛÇž>`ÏIbs¸8>¥ûÊ?yè¶)èdˆ—5‰ÎÆ@iA � ž�JÎûyæb}î.6ÄŸ�f)•c^;.j¾#BâõrÝ~�<™çî¸O�|‘ÿëPUøÄ7EôúRÀâï¿ÿ^¨pñÿ÷‹ùgªv|^ÙõXMŒ†Ï»’qô¾ÀZk>}Ãý�Ø´mºûÔüeÏÕ_a’"À"1‚@÷G €ûc¶O=|�ÝeŸvÉ%ÇcZI“~ÇÚ �NfTh¤�A�Ö±Ó‚@A ü,S„~ÊÏ|s±¹õè¶Wg±ÛñPs²)tTÈÿWÿ•ûQäŸ÷ã\ëXiB­´ÃcÝp¦+ÿ窜ó©@™ßÿüóÏö¥nyl@cÞHÞp�tß u}¼®džõT{Šü�ŠŒ9j^3±9�x;Xåa·&lR0‘A � �À@{g]|f·{»n5§ú§ôFúëÜÀÕŠ.0hZA �çB@³óO[Èýƽ¿Ø>^Rhk¹o>åÜèJÿÙª ³}‡<›ÓSÏDþ¿éªÿ7޹+€= p«G®Uà-ƒ7ôW€1yœ€"kÃvó*ùw¬d˜ô÷’¾äÔV‰>þjW½Æú1êxíí¿°áŒ‚@;!�ÀN0½‹¤zðg‡«ÝëÕ68øì·néñl÷Ò…€�Ûþ9qmœ¥� ‚@øYL²GãLŦü£1æ|ðׇåÇ1±Ým bÏ»4e»+àV¤þZ^Ý~�ÅNW…ø¨8çvíe�*´—ÊÅ ¹êÍ`H$ÖÇmt±ñoAý1éöݽtÜù–øëÁ»ÚÖG’þô#¶ÑØ€ØpÆA �­¤°¢w—PÐSºA!îmäsçl•¾€“oØÿòüÅžÈ ‚@��Çš‡pÌQ|[üí¸ÇN­´G\áçÊ¿Iù­È<ÇÒ#ù9‡ãe¹g*|–ÿLyÇôÕ•~Þ¥s«@ûR€ ŠÁøñSD�ª7 êNÅF_ hñÁ~BÖ‘>Þº¬]&øvTÛúH:ÿŽÔ¾¦p•8‚@ó¤0�O¢›ôÞÑ)?ñ>ÖÛë«ÿÊEo'@õö�05ƒ¹áS³‚@AàAp,s6Š�|Îß&™k4>�Ëão�þF„åã%€í-€H�Í�ÙÈ¿\ å¶ÏêVþ3¥ikŸ ”}­G.!ÿ"ü'*p¯;S O~ÕÚ»˜�¶Ë�ÕÄŸ|“Ö„¾­™à;¯ÚÖç¤û­%˜i_è“‚@; �À ½ƒ”þ€_íª÷P«qëöÏIN|2ã¼õW8âä¤úɉ«õîØA � î…Ç’9¹->7ÙÔ¸øëƲ9®q`k„Î/Ÿu¾ Àƹ·óóÉ?né¿Ò±òJ’ÇÍ[È¿žùoä_ïø.ò¢±xv`ã  ù_ ¯á6ÚFÞFdi˜ø“gò¿­�‡1ÁÙŽUé¼I fS;2Ù)� ‚À;E €wúÃk·w=PƒPŸ‹]}Õ¶~¹.prâmŽü³¨}l:‡ÙÇÝÊ>� Þdz§}çØG"cT½t†çº‰Óñ@{±Ÿ$·õs{ÿ…®ú_ˆô_è3�¿üòËŸüã�?.‡Ëýj—ü‘ÿJ/<ÔcW*p×)>v£Óv9(¹À±âζín|¥¶VmëHk°Û~ôuá6Œ­“¢� ‚@«"†w‚Ç-»ZãU§›mKUíª»¾~«Wþ7t»×_à¨ß<©%ñí»åìÈ ‚@��€ŽEw­¾ª×DüÞð×<ë–î'›ãÇGŽŸVw |P=@5€ãSÎTø¬ÀB¤ž›”z{ðõë×3ݰX~)ðb¡O.(èS� Æ‘ŸG®•ãc¹%á] ˜ø»`{×þž“±zÝ WÿƸ+\œ·‹‚@KrÀ;ù—ÀAqbW§ü¤÷±9Û1¤7Oi{N¶B')uó‘A � ^ :NÝ{)ôé·:ˆÇt±Î׎�+’‹ ñ¸äŸÜ#Ú(Àü‚$îøüù3€s‘þïß¾};W�àû_ýÕŠº à†;´ñ^€ö¥#X­�c7­?†/½?þ$äÿ¾…úy¾‘ŽÏ�¼j7?û+,îøÝ)2� ðÞHà}þ ðÁu—½ŸÊ­~ëU¢{cëU6Ò¯ØZê˜=ü ¤� ‚@xíTîYõ]Ö]ó­#­¯Æðq´}!@¤ßE€v€ryÀò²¿È°úÀÿOT8Ñÿ[�œêÅ€¼°ouåÿF&dÿF0�\ËwŸ¯Я'üÛ}@ÕÉ�k=ñ'—ý˜óoŒ—"À1‚@¤°Ç~wس¹œ>Vmë½dJ|÷ÞtâÒ®r0z•èiA � ^ :NÍ.e.N¬n d»êC’ãcûZÀjÒöÅÞ™£v Ñ—~&"ïEñž^ˆ�@#ÿ 诛nô(À•È>_ °þL w< À¼.TÉtÌIÜ›‹ÄÜ|.áõW½úGºÇi +ç¬ýQ‚@ï�Þ÷¿X+ #qû-G>Ç�sºãHNÖ’“�¼Ü¹ €Éˆ±©aÖvÇQƒÑƒ@A <5•kV�ym#ëÖ¯ÉyîSmçr ”ߟ ”*C7ÈÏN±9PÊ×lIÈÿ'‘yäñ*ò««ÿWz€¯œ«pÌS’Ä>(•G<휬$»’~_õ·ìÇ»«ú=6>Çz_?îÚðX;¢� ‚@^¸ïÿ8øuûØÛ]¸™S9Õo}N›ÚLü‰[‡øo�/Žóë‘A � ^;=ïìí©õ“ç�œªËlw¸/ÇxµFpU<çª÷­<ÇKÈÿ‰ì�"ò—"ô—’g²9Þ~Pî�¾pÍ‹Eþ/ã‘€KbÊå�­€½*Ì‘è>f»FÇð‘�)Ý¿ÆñaWI®›c¶×Rûœ"À�(A �å·dƒC¨Y£1òõ1çì"Éé7üM׉N»ÊßKOŒ$¦V]у@A <;�óÚ¶Ù5�ü~«95æã^9ú@Ø¡+ý>Æšü_Ëw£íZ„�wp—Ý /øÓ»ÚÎõn€o_ßÊ´Bþsªm‚ðãò)øßßòïõo×y•üã«öÔÍfÚ÷~�³} A ì+ëÿÙïëf¿~ °>ðî:�ûÁzŒ±2FA �)¦ø(þº¹¿x{áþöê ýãÀEuœ[ø9þòì?Øn!ýô¡¿á??;ãuú2ÀÅo¿ývñÇ\×-ÿ4Õ.ÛÝ%p¥í@� ðb@Rvm¾úï|ÛµÀ1¿ÚÎí¥‰;ûUIÿȦ¯ó7Æ)l #�÷Š@ ïõ—¿ß~›ÌÓ �ö3²Ï6ç;�ÈÇqÛó-gÏß ‚@oþ®ÍÅò·õ[åúxÉ¡sý¥éª �¨À»Äý?_p3€ˆ}«|ýúuY¸¸ç_\èå€ }1yù×fòݰßÓ{rï"ã8¶k ÎáuŒ$yÞâ @„ÑÿFRŒ ‚Àž#�ÀžÿÀ3»çdMùæâÎßE’³uÓq™ƒsÛ˜½. zA �÷ˆÀˆ·ŠÏnVÇÌv'€�ŸÊi$ö¯¦GþOtçÿÇOŠ_jkä_·ÿ~ùò壮ôŸ‹ôGê.�ïþùç!�(ÿF.ˆ³É??ÁèøŒÏäžœ¾1F_ص@ß~Nûªôœäâßh)lÀ#�wˆ@ ïðG„]®`ës²Æ¬³ ô;›OZV±@*-� Þ:6RßËÑΓSÛÊnÇYŠnk1~^ øY�˜¨R�Í‹ìŸ~ûö�¯*÷ƒˆ?ï¸RŸFþË£?&ðDÛ¥Éÿznué}ÛGY{Ï_Éõ1ö&H8Õ„Ç?Ò‚@ûŽ@ ûþ oß?,�ÙÛö÷²æYÉêëuì�MÇãÙ;tÌnë°Ä@·�ãyƒ'‚@Aà�!Àñkî¶-VŽƒ>ÖúØØÈ®H¼ g&ÿ\ùL|à#wˆì+tz,?_¸ù믿®ä[`j;P!€÷0/€D{“:ÙÈicJšx»àõîr'}�?Ò=69#]îe^)ŒÈ Þ)¼«Ÿ{ç�åÀY·ÚÑ^|#Ý>÷w^ïwüŽÔIo)n…€Ö¹\ÅÀN A � ðVù‘ÏûGÌqKÇ,‹Ÿcêš»(Ï×q¾ÙoÄ[1l®ôsGÀ™ülÇ8¹ò¯Þè1€+ݰ�ë\sðbÁ6¥òýN/¡ÊeRõ,×T¯ô»P}ôÀÏú]À×·õþ)Г|ï?}ªÞ�ÑlíOŠCdâ A`ŸH`ŸÝûíÛè€íˆyÃWsGzŸëû'¥N0Lü›´�¤yA‘A � ö÷ÖÄŸýÄv«z“ͱ²‘äÕ±³é:„Šß��/�—røQäþR~¶3È?q®üó½ }*P„Ÿ—òÂ@ßUÀnËã?Ç?ˆ¹õág�ø!ûýñ½·§¶¶OÅa»Ê^cR}M)ÜA%Ž ö�öù×}Ú}«gtÛ–ÌÞûmï"Ÿvõ=� ‚À+@`DæG>–Zý#]\¶í¤凨xY äŸBÀµäµˆÿµÈ<òŒ1!ÿ"ö�üëÖÿs PÞ±bGÊãÊ¿Ç5éG1ßDsžÃ¾ê�mòïB€szÛþ*=îr§WE%àÇWeíwG×þ¥p•8‚@ØWRØ×_öyöË]Ïfi�XoWŸcUr’³¾€ä]›Žá»¦&/<;ù÷ùì�ïÕ„•ðíÕŽegfðïÞK:UŸtx¬ÉùzL|«¼v^ùÙ™?Ò­þ7"ü·òÝ�#²®[þÏuûÿù§OŸ.ôe€óß~ûíâ?ÿùÏùj>îà»�—ºC€þ—zqà�Þ°žoG¥èbé¶K€ÜZ¨¤Ÿ‚Þ®ùèëxÂÀc­ýQ‚@û†@ ûö‹>ýþô »·ë ú¶7çÙ¶\“'D� ‚@x�rÝ–·Í&i—œ]öÕ\Õ’>U÷ø˜ÓM¤¢ëc-wýS@ê&€#Þp¦"€øÿ§/âú—ÜÀÐ*|é_Ⱦá_ˆø_èk‹¿ÿþû‚±WE&ò§LJÂ�æã}%ûD]€„;¶kàÇèwI-�çuÝ!ûÂ)E€Šdô ö�öòg}ö�òÁ”‰«nÛ{/ÌvÍm>�”pðmþ^ºsdA �÷ˆÄ�V¥õ]ð€üÓ}• ßõ˺inùñÿÌ 5v#â ~þüù£8ÿ¹¶ï"ûçÿýïuÁq»«@Eò×ä5ÅÁü&÷w‚r0ñJüÛ9Á(¹óѷϵ¯Jw«XØG±$E€5Q‚@ØGRØÇ_õé÷©?À2cõ¡WÛ+êý¶�k»]™ “N>ó‘A � ^�éJÆ{».¸�U»êu<÷·Yuâµ/6qû,I#æ¦+ÿ­ ø‘ôöI@=ûÿIqÞÀs‡0}(ü­«þ§"üíS�ÄU ¸QþÕªàa*+ùwÀò>cšðÓǺ¥}H°À¿Ñ´_)l #�}B €}ú5Ÿ~_êICÕ=sïÃöædï[Û:Y¹sð#Ó‚@A ¼&Ä×Dü¹ÖeâÏ|èÕÞ¶†þxŠ ßõ#²?jkWéå—û�/œê±€�"ûè�ü3�ž¸Ñ£WºC`!7¯˜šþÉ» $GE€]Ïz’ï~ö{øGúzY ±vD A ì )ìÉù »áƒh�jä«ñª“ëÍþjW=„ßE� ‚À›C@äqƒ”cÓ*Ÿìs¶ídíë±F>ÇêœE÷•í¶ ü^L_ãµ;C~\ÇÚ>ŠÜŸé*ÿG}ìFÔy7€ Wª ,xy úRh_  ÿL[‚±™Ñ6ñ'bIþ}î`,Ïa�mïShÜ„�ñ'Ä‚@xƒ¤ð´X²¤£©û¶·Q>¾¿£ë$_kèÕ¶?2� ‚ÀK!`Òü˜óÏ�©ã`› iÝs�|ŽY’Ãø«†b2ÜtÅ�í€U<²*ÒÏ‹!ù|pMþuõÿJï¸àÆùù¬à%óLLºWﯾc«WÿY‹ ?:ÍriÍÿõþ9Ëv•Ž!›Ø�6Ú¯aìNrA �7€@ oàGzá%îrÀ%g”g/Ù%û†ºŽµ!þ “‚@¯qÄ51¯: ¯vÕûØ}v>Úo»ôgþUkÊÊ®:áCù�õR@> p�Ô\Wú4àAÞ(ýJ·þó€sÝð�b�BGÄYWW€<·ñA‘ëzåŸ.¶Ý']×;��>’“ƒ)Ì"”`o �ÞÒ¯õú×êƒì¶•Ö<ëHëÛú'¾§¬NF÷tï²[Aàçxïÿ}@,¦�ßÜ÷��ò{_o³þÞ×ÛÝGïãÑl{<Ù -cH6rŠâÿAd²‹~Ù—}#› bá¿Ð ÏuÀù—/_.~ùå—‹ÿüç?íS€Jç=—HÝ5p¥î8У^Æ}¥‰? ç®þà»Oó?Æ‘ÿêg\çoÌ!sÎIz{]äm4wüI1‚@¯�^ùô—Ç�snó.ùkÙ|œxô[MŠ‚@Aࡈõ®sêŠÿwýs‘ÿó¿þúë»ÞÐúª@ƒ™ü3î¨�Î œWÉ›WÆ·î¼]$ka®‘tÇm7¹Â¥³ˆ‚@x#¤ðF~¨=[f=À[·îªOH†Á8ƒ@A ܹÖcŽ,Oåà¯ýª]u&¨vÕCŽÆêsɵڷêε�ñF ¿cÊmI«¹ù ÏüÓ­= »}%@Äþ“r—9U8ÖÜðMäÿo‘ÕŽù×]7ÿïÿý?¾x¢>^ì’°3N%þUg­sÍ„Ÿë½t É:î�}á“;@'-�7‰@ oòg{ÑEs0œÛî³8à-é[õ�±|b²áŒ‚@Aà'0ùe“å~8çÔ8¾jÓ§÷õö(§úvͧ­Î¿‹¾ìµ\§uKæf+íPäòÛ6ÅÚWDö?ªÐȼ|�ü‹ìŸêŽ€3]ü?mÌŸÊ�šî¸Q1àJ� ,dR˜jwH¶G¾Jþ+ñßXø`ÆrÎH·Ïs’;Ò×CkßSX£%�·„@ oé×Ú�µúlY÷ªùtÓ¨ëÄÔš9¥;72� ‚À}(Ç—a7â•hW»êtîí: 1Ú®c‘;7q7�i‰¿êÇkp?¤|í¶ÿ>GýY° íkÊÍ?ä��þO* ðhŸlä_Ń®ôÂÀ…\¼ð¾çœ&à,Íݤ¿—K@ÉÜlƒ¸Ç c¤Û×÷Ù±X+¼œ_"Qƒ@¯�ûþÏøõîIVöZà ;·õëôAÛrç„cuÒ±öE A � ðÔ@€i•8{N“ã)ÿ(?žç©±Ú·êäÔÖ�E̾)éñê¼ôöO²ì×X¸ˆiã„x$àDÄþ£x>ÄÿR€�•üëêÿÕçÏŸºúN®ú\Òq¢m#ÑŽ�îàÇrA ¾?·`ûFº}žÏãѧ÷µ˜ö ¼†1wŽ A ¼&RxM¿ÆûY‹¾#iß N>ÖF” ‚@Ï„€¸]›©çwø«¯ÚU§sµÑiµos¬þô¹Syµ:yέ²êÎóú1<÷*.ÑöѲí÷5f#ÿ’׫íJE€k½ý¿ÝÀ•¾ÈWô€s=ðMý8ßl•ƒ~^Ù�gÇL¤«Dow¬úÖ"€šü÷ç ôë} Qýž‡<ûG’~“ �„…ÇšÌK � ðHà5ü YÃ:†ŽØ91†'tiA �·ˆÀSÿÿkŽ¿1÷\| Ï©~u_x¤ÜmÜ ÐÞ  ;ÎuÅÿB¤â®"Àů¿þzþ?ÿó?íS€Ê½¤>ÀÝ’—×××Wzqà�êÓUcBw€0:;âB>Zo/½Ë¿&ùöÙÞ&É}@Ñþ cž$2� ðHà5ü ¯w OÁ=æ”lhèêøëE'+ A � °#â‡k2^»à§ÁÑk^µíïe«òÏ^w?ül"àë®u¯ÅAb´®?N¶V`<ÅýŽ^¨»ÿ?_ˆàCò¯™K…€�R/ô^€…¾ °Ð×TX\è%�‹?ÿüóêÀ˜sŸ ô¼È; ce³H¸csEúÔ¶�ü›Ü37ÍöÒÒ_a�"À�(A ¼VRx­¿Ìþ­ËíýÛ³ìQA !`’ #_m•¤÷ù½]sëszí³"ékòÏíü.0—×Vûxlǰ¥ÐÏR®V�­×ñRÀ�º àÓŠü+õæƒü¿üòË©®ö‹ÿŸŸ‹üŸóx€Èë+?� @¨çÈ?ӛأ�c�S ÷)xLÆáÇIç8n»Ip†ôK A ¼JRx•?ËÞ-jóŒgyPe'í_K3­×8',Õ¿we‡‚@A`?l¤{´wÄÜàŒØ5d;¹K«yU_‘ø6„×±MªO{L`µF>à"ïXß "À'=À;Ú© Èþ(¢ÿMüÿ›Ú±Š�üë.€…!þÛÈý.»kòï±Lþ-·�aÂOžõ^:†ä¼óC‹@'-�W‰@ ¯ògÙ«Eý8»Ù}·Òg÷Ñ“‚@Aà Xä;dÞSV"nŸû`£OÙ½¿«·oäÃO£@óœHÛ–öAø‹MýµAð!ÀÈcm|%€¯ðnºÊ–y|J@ä_¼ÿtý©@È¿î¸Ò¸ åRØåø?Êa²VP�4!wÀùÄÛZWÒq™­9�œ^·ÏcéË‘`V ¬�Q‚@¯�^Á�ðJ—àƒ_]ÞÈWã½>Ê·oJöcÄA � ð¦Ü áØ}ƒ+⯹#Ûœ²æ�Æê}ØîkÝãc£CðݰiÎAÖ;œ¿* Èüq€æ¹ÕX홑 8ã3�T”×&Q¿Fþå¿TQ€—n¼ °M¾ûÈ8„ž±-ém½'ûÄúÁ$ŸØH·I£¿õæèÿ XôþØA �—D €—D¿çî¬ìíÈ7‹‚Ž›÷î3;`‚A � žqÀ â=5uÍCßfoã•Ľ1'ºÇ¬:>š%EëU¢¯ ~€ûµo�ÈÙnû×;Öwˆä/ÄýO•ÓÈ¿æ¿ÑÕÿ+ÝpÉ“òs>:wN ‰î‰tµ­WÂϺ\�KŒ|ŒcÿH·Ïó)½5úô¾e@;§ýÆ–]ó7� ð¼ÌýÏöyW’Ù^;> >t�µ¿õ‘l>+{è|é‚@AàÙßÛ Û,ß¶G$ÏýݯÚöÝ—O:ß’q¬{mU«q¸Ú_‹FÝ~ì¯b'+·ù_ñè¿Æá+M'&›þ]éÖÿFþ) ¬úñ@m&ÍÈ£ètâ­°°ò»€‰ø.às›úQÏ1¯Ûþ‘ô˜C HÚo�5̉3� ð\¤ð\HïÏ<ç¶ýÙÓì 'BiA � @Àäx4j.úÈ®¾:政æLñOûëœöÕþÒ7puNôU\œÿ¨½@6/<ÖX7"øííþºà‚ÛýÙøL Š¿ÿþûÅüÑÈ¿ úBàåRÛ_ЋVŸd޾M‘êZ �m¤Û¨(à˜I~oÛ?%É®IX¤`4#ƒ@xQRxQø3yA � °@‚'ˆó½v¯Žƒ^md¿åCç­ý:>U`¸(a™"À™8ƒ@xJRxJt3ö£3|wüœ?Ì ”XA �—B nÖ0eãŸk:֭ãJtoëÄ*žk$ñÙÏðU÷zð£×†-âßœ%†ÝvlUàºÉ<<ÉÇþ¨çû?‹üT¿FÌeßèêÿ• Xh;ßR¨Ë¨ú@WkP°~ÖfÂ_w¦êŒWÇq úœ¤¯›sm¯¥ö9E€5Q‚@xRx”3GA � °·@x§ˆ2;ÝÇG@8gJÖ>äÔmÛ•Ô{�½ÏózçÙ®Ò¹ÈÚ ù,‰iœF É•ÿTRâðXy'’g*\‰ü_Q ]›Ôkžù_èêÿ9��/ÿÔ Í6Æô]°ÎN¸€¯êØu'Møñ[ßE’?Ù„IŠ“è$‚Àc#�Àc#šñ^5œ€¤� ð0Þû?s„èaˆ¦×[B€ÿ/ùo€ù§þÜum^¿%ø[GNm"ë�÷�Ÿ«Î¹ÒÛÖ~$Mr}àe æ H â$ûšB€|×äŠð_èêÿ…ž¸øüùsûÀ¯¿þzñÇ\W.Ÿ d»ä jÚ�ä|Ôj€¸m$m½æN'fÂ_uû¶I÷An4pSëÝÈ�‚@øRøôÒ7� ‚@x7Àe§8Zëí9�œ»M29Þú1Ý¿÷�löÃûR¥Èu#ûøÐGsás³Ž$ŸÑ·î¸ó%åj·úkŠ[¾ÐBês¬­½@Ÿü,R¿€Ý«µ¯üãÿ8é_諈…¾°ÐK›üóÏ??(ÏS0`+(¬?»$öØl&û«´�"@½  êäÒwDÔ·‘÷ñzl{þ  ¬Q‚@O€@ Oj†|||‚ðø#gÄ ‚@»#Àñèg8ÚèxÆxwJŽVHnݼ.�1êãǪ�Î6"þø=}Ñݬ�ˆñÑ¡mòqµ{MþGcpSÀ ïПtuÿR9×Únå?ÐEþõdÀy»3àï¿ÿ>ño·%H¿UÀÄùǼÀ„½'ý?2–q~K"£1—=~ŒMkØ&ÝÏy¶›¹`‘A <6)<6¢/� ‚@Øk ¼â¥wö±÷o³ûœ?’ø¼õýªí¾Õ×ëýÚ«�Îæ"}ÓR_mÇíCâ¿qG�B ÆV ¼`}·öëå&ë‡* Ëþ(îÿMÿODøqµE¨(p£WüÙ·^ý—¹nË�X›kŤ½­IÞQÀÅrîþðË¡<Î6I¶ÇŽ'ã˜è»¿m“üŒç†Ÿc2z�U�¸oÿ¯új<¥Ü*ÞVüPd�ÛüÛ';¹o·ýËOaàHï8Ñc§*œêÖ �üóxÀ·oß®»D*Šü3½Û��ZzLƱæÈ?sÖÜeïÍ¿ÛÈ¿û³†‘¾­ÐiA �GF €G4Ã� ‚@ï‘´;…çÞ×Ûb4êm²öµÎÞæø"±QÜ~¯Ó6Rä¼õéû9×óZŽˆ?1·•¾þJ€Æ½—G´+ÞÒÛ#Êã–~‰eQ@üÿŒ€®ô¯É¿Öv«bÀ•ü—êÇùìú%ž¯ÈžHW»êt©E/Þ² ¹¡2†s¬ÏI:“ßÏ�ÝpÖŽ(A �G@ €G1C<>«âþÆÀ:nØ1‚@A ¼4›îËÑ|<ëûy¬9IÌý²ïÌÙÏË8ö›ÄãÍãµwóš8v»¿ûÚ·²ˆk.™í�Æ�Ùî.€èò)@�@ö[A@}>é®>Ø®üË¾Ñ ¯õXŸ ¼�›óÙÑg“m“»Å|eŸ“Œ6¾¤‹ä O�€˜œ›Ì;õ�lÆvs®íµl@PZAà‘Hà‘€Ì0A � ‚ÀûD@$mƒTÏÙ} ÄðÑàyŽ÷²%”?Ľ÷Î*sÕ�Žæ™Hˆ:ãW¿çƒ‡;×>çZ’Ã4ç“ÞU™Ku%�WqÈÿ‘úžèŠÿGI®ìs•ÿ#cɾÑÝ&ÿçºýÿ»b' - b@IDATˆ—i“idÕéj²O!À:‹´MŽ}—Ù³Ï>Çw‘?FhÂ#w p‰+�‡!�ÀÃpK¯WŠ'iï�üþï÷·Ž=Ï¿¯ŸCÙ„ñçFyºÞÛ~ß§Z?óî26ySktl$wÛ¨:W»‘vüèži2ï>HÏkÝ1÷ÃÖØ2—ûÚÉæ'Gc±†U.:w\k §ºÒÏ# ’ ‘þ‹OŸ>]üòË/‹¯_¿^üñÇL¡^QPÛÑJ^ª`ÀðsÍ…ç@þ}7>ÛH·QQ€˜ ÕíÛ&ݹÑIxôëÜȉ‚@Ø�vA)9A � ‚À»FÀ¤õ1AèÇ´=%™›˜·Ç\‹Ç2Ç4ñ÷\^qoîƒ$^%:ÅÆ©º}½lIm˜`0îà…�¼'€q¸#€BÀ™ Ÿõ5€Ë_ýUÜÎóá·ß~;Õc Ú†Îö×_è«v(°æõVÉ>1 áŽ�Šôõmäß}èO³½´ôWx¤°F#JE €‡"—~A � ‚À»B’k‚ü\;>7'1o]OOæûùˆ{ˆvŸÏ¼Äݪ>ëÉ?¶Ç•Ô&ÿÈ6Œr¸à”ÇTø¬;®”ËÝ�ùò…¯œ‹ôÓÎEúÙÚU|¹y©àB½Zsõ›Ø{wzIn_j?�ïÂÀ6é¾Î³Ý$àh¿=æF,FA`RØ¥ä� ‚@Aà€øšç¡×m´ ÇG±)ŸÇw|d{–}?ÍÒcYšìcWÝù– 3ä–¯ ×俚 |€[üMÖU8RA€O~ù׿é¥��ü뎀…wýD ¦šm&ÿ빕]}CÒ¾Òîøœ$Ýßy«!–0„�s6b1‚@ÛH`B‰� ‚@A`…€¸×š˜?(uüª×¹ð{«~tü»´)þØûm3n%ÿö{ιy+ñ·ÞK�ù×<�üËÇÎ@°) ‹ÈŸŠØŸiî=ЪŠÁÿOdŸÒTÀnäŸÇøT ìKåQØ¥�„l·1%M¼]p>qǦæ!Nþœ¤¯sz»5°ÛæszdA`�@ k(¢� ‚@Aàé€Ïš³õ:³NÅð“?jøûXo÷ýê�ĸK uîЭÿ׊-äç%�[ßÈÚ&ó×+ý.TßD׿6áǰ>'É«Eì; ¼VØÜ‰Å‚@˜B €)dâA � ‚Àxê’“‚Oàò|Hoý4økëmÇF뮾ª»’«ÿÛîpß©¹WÄ~ãQûV}¸úߦ•Mã%€ì3/„0Ÿ2‡î v$ß©¶�²?i;•¯sõ¹QAàZw,T ‡ó]�qjÃöÖûm»O%üÎ|ø6Áw¯å¸X&óÎc¼êÙ?Fù‘[}Maâõ݉Ç‚@èH G$vA � ^q¹ua¡ê£¥÷æ8ö}›¹£%ý­[âózðU?1Z�›xµ—Ë¿ö‹”·‚^t÷‘Þ¾°Š7b»ê#qÀýþÜù?ÑUþ�²ÏøÜŸä)ciœlgggç*|W H«my&î+þôsÀ: »€Ï�~ýR}Öw‘s(FûÍ8iA �­¤°¢$� `8ùJ A <�·þÿ�§âWàRÇ®¶1#Žn»Ç¿ú§ô¾Ï”íµô’+ñøúm4k ¯®Åy+bß̪+_é?ú­ú7ÉØÊoWñqj=Ž%¹í¿=ßÏíþz @ÛDþŸ?^üòË/‹þóŸ (8ðÍ@^ x¹’zMÀÕ�6/¯—S¤ºèc›|tÚ¨(€ß„¿êöUI¼6Àć L„Ñd|Ø)Î Þ%)¼ËŸ=;‚@A <&â_�¤zÌ9Û1K÷±ÄO3Ÿ«yèÞœ�tŸ^¯9½îñí·='‰y£Ÿu÷ñX^³×J\¤»…GkµÏE�‘ÔJkàðRÀCÙ8Ž ÷2×/ ùÿ$ßv¯9™ôöëׯ§2ú*@Ûôµ€…¾p¡—ès�|&ÐKGÎU»‰±™è“Oƒ|ãƒøW½Ï£ïˆ¨ãs I«>ìêÇÞh`&ÎA ��:@b� ‚@A`ðÐm\k”3åó|uLriøÐm;×>û-ˆôü#‰Ï~ƶmÙÏׯ§'õä;DZêÄt«»ú¯9ÛûÈW_ '<ÀWt'Àg®WäŸ9t'À©Hÿ…ž 8ñ?çkº[ ,7€JœM´¾6ü=¡w|ŠüOÝ à~ž—±G„¿÷ÑÏës_�ÕölÖŽ(A ��:@b� ‚@Aà!@X{îU}#½ú˜›VÇ©9èÎi‰«?öMÉšÛëÌUç³ÞK÷s~/‰{~çNÙö�ˆ¿}–Œ…¾šO]Û•îö©@bØŠ·;DþÏDü¯” !o· ¨0pôéÓ§S}à›¶ŽþüóOˆùÝpóßÿþ—GêgM°I¹Oƒx»0’&ù£1+Ñ÷ü½¯'öÃñVøô¹£9ã Aà"�À;üѳËA � ‚ÀÏ# ¢µAœqŸs,Gýˆ¹A|«íüÞçü]$cö­ú¬W‰>·y¼®^2ŸI½%>çmñ[#þ«ÜæS|7ò}Ôv­+û7²ù—}¤»Nô2ÀSmH™Ç \žÐ�WʹԸ<ÏPÝd®¯¼£�šA‘?0êgýYƒÇ±^%¹Ž£›ö?� ‘‰3�òo � ‚@�ˆ€¸×da`[Œe˜t{IîƒôVcøhSÒ¹#ÙÏUmë–î�=Úˆ�Öà5/Ççxl÷)_¿3�ùÔ¿í¨rÚÕ{ùy €«ÿbÎiùL`#ÿË¥pWÀ‰ÿGx<€¯´¾zGÀÍ—/_®þú믅r.”__°�`/W§®™øã¶ŽœÊwwæsÎHï×C®}U÷xM §6‰‚¤�A � ‚@x VÈiߦüÎsÜÒ~$>7�]}Ω¾ª»¯%16�eÿ”¬yÖ‘ÞÜ϶sì·ô¼^[/áâ,é7¥—„ŸµÒWc>Wûé{#’��îü‡üCü?!q3ŽúÝè¹ÿ+Õ.õÈÀ…r9n_ ®Öÿ ½½Ìÿ5ñ'jòϼè}ó¸&ñþá{?ýœÓ�1kƒ…°òx³¹ � ð>Hà}üÎÙË ‚@Aà‰Ç’kü4ó/ç�¤—æ\Ûu tÛ}¼·û<ÇG’9ûy«mÝy–ŒeÝ9øêÜuÍ÷žð;×’þΫ:qõmä©ùéw?Iß ÀãGÊ᥀—ºÒ&ò©í„ñÔíF¾+½ p¡·ÿ_Èÿ}Kò\‹ ã6E¬Müù`òor_ûŽ|Äí÷øØè–Îéãøï4°¯;�8‚@x—¤ð.öìô[E@Çð·ºô¬;� ðnàÿÝ»ò¯úÿùÚ§úÑ{p«Ï`�|Žõ²ÎG¬Ú½ŽÝoô©óY·¬qû,+é'¯Ú+]©K‘Í(ó­|�ä².ÙÜ!p$y,»‘]ñçÓ€ ¤^¸Ð#‹ß~ûíâßÿþ÷‚9•ÏgÙ(\±©h#LóAØré�ÿëb€ Îîmû‘&ûöÙ®’ØTAÀýÖ¼„CÃg팂À»D €wù³g§ƒ@A �׎€8[[¢y›m¯Û¾*­;¯Jb¯ú§ôš‹nÛz•ŒaÛk@Z'nÝr@ôIkm³oBrD÷Pä�;(ÜJ§ p¢í#_ Pà³ÅH~»5_…€S™ }€›úTà‚¯ê%�Ü)ðaU0ñŸ’^úHš|#ý8ÀCŠuìQA€¸çª¹`Ÿ"À"1‚ÀûD €÷ù»g¯ƒ@A �W€€8ÙšTO-§æ ³ÕfÛÒ±Þ¶NBàûV}&ø½ÔUóºå¾ïÚìºë&ð$ô:c3žc¶�gé±,ñ+÷PÛ­t/ <–ñå‘€SmgúÀB6ä¿í¬úò™@ñþs‘~Ú¹ |*°-ûFrý©ÀÍ ­´ýÁïí‡w©±C&üHÆ«¾eÖö¿ôcŽ‘to¯�œ�¦}M`‘Aàý!�ÀûûͳÇA � ‚ÀGÒËæVu|½í¼]¤Èñ�´ê³Ždƒ¬¯È÷�b†×ÑK& O%úÖûXµë8îo©Ø�Æ@˜`·«Þê�Ïw\jÍÜæßv’€ŠG«À·óóóïºâϧナ· ó €¯Úãþ<ÖîÍÀ"ÏãXö#9ßqlô9YÇpnõ50„�ÇÞˆÅA`ÿH`ÿãìaA � ðÊïÜ Ë½Ý/—ø¨á¯±Þ®}ˆíÊûFyøì·ÞKæsŽ×U×dŸ×eòŽ�N_z›¾Î·ôx²MþÛcãHcYGòIÀSMs&#óꋲ¢»Nu»¿ž8!¯�­«þ7ºàZ6ï¨Wÿ­³ìû´zÅŸ9|GÀøÇý1² ?ëU:Óãl%÷ì»pØšç�#ƒ@ØRØŸß2{‚@A ¼aÄÉ6Vßó3âu«ÉöWú”¿ÏÙýüÎÁ?·9éù‘¶›Rþ˜ÌÛ5eÛoɘÖWcËÕîàK¼€IÍVîG­ûF„žõËüñ©@ÝæÏã<.Юüóx€î¸æS�rñAH?ãÝ—ü÷$ÛE µ¾ À…|SÍ„Ÿ¸uKûÜ—uzÞª;Þ$ÀçmÄb� °¿¤°¿¿mö,� ‚@xeˆs­¯�{i#1ün#žFÜ›ó,§ü5>ÓqKr¯e] ú¨Á»™gêê?qbî�¬>û•c²±å.ðŽ_ùW×C>ÈÕþ�"û|*ðT¾¶8ùoô2À+Þ ;.äç|yô‚ƒ6óŒöiåÅXs±™ü��Y ²Œå<ë¿õÍ^3–pK`Ÿ„‚À>"�À>þªÙ§ ‚@Aà]!®[¿óÄv!ü}¿‘=W ¿Îü´^6çà�Èöº@¸ÚŒaÛÒ>æ”Î-ýôo¤–�Rq |àD}>Šø/Tà*?�З¯\鎀K]ý¿Pü\±Q²=* 0LmÛHy-Ô~S:ã-wêáǶßóÙÇ8UÇÞh`#,Üo##�ýC €ýûM³GOˆ€Ž‘O8z†A � 0F€ãÏÜ6îõ¸^8¢y¢u¤HsÛD”×ñ:s=vV½æT�qÓͶ¥Ç@Ú§uÈ\9�ÍÐè´•Ï$—0Ÿ à=ÇÒyÉs.¸êϧõRÀÅ—/_.~ýõ×Å¿þõ¯‹Uœ—òõ$ŸÔk®´~h3qçNt¶;?Õ}µ]%±Jü«î~k ‚þiA ì9)ìùœÝ A � ^'â\CÂü:W»\±nu¶ê³NöÑÛ}ö‹>µÙFšôWI.먾Þ^�ÑåN�CŹ‚ÏËx<€¯œêŠ?Ÿ üD@ä¢O»ýí·ßNñyÓû.u—ÀB/\è«J`sá«Ig„I7ÒÄßÅÛ£î&ûŽõ6~û�4¯ÍöÒ»ú+lSØ@$FØORØÏß5{‚@A ¼# ÆÞžb·+©·.bÜHw•Žõk`m»6ÆèómÏIˆØ^ Èzi€¸#à„ê€OŠ5ò/«(v¨‚À©ˆþ7qÿïºC€O¶qTà«<`Ò¾ ð>n²Mþz€} ßiîë1±ÑçdĹ՗"À1‚Àþ!�Àþý¦ïv�8†×Žw Dv<� Þ >v-yèô²§ŽoôÛÖw[œYncŒ>‰î7çxO¼¾]ÖàuŒrí3Á'×ú6¹ê Ù•Ú¿º¬ïpQ€À©ö‡/ð©¿F¢•Nî±^x"ò¯›Nør¤œÛþot'ÀµìK™÷ý< CÐL⫎�‚€‰½%9£fÂOÌz•îãqˆÍ6pÒo¹5ov�ƒ@x•¤ð*–,ê¾,�ç÷í•ü ‚@oŽ{lÏÍÑLð!þ&Ñ.8Ö¯ÉkÝé©ãyõ{^Ƴ>%éGŒ5i�"ëzy^¡e1@‚+ý7Êãnû_¾QPoùWƒð‹ÿŸž(†N7¾p£;®x\@ýxIà}ßhrmÉîÔ» ë¾úoIÎTcœJðÑ{Ÿû:†]uÇ›l;Úÿ˜1‚@x‹¤ðµ¬y 6ìA � ^3·Ê«è;êÿÔǺ^t¶QŸãõ7Øe}ô›Êëý&üÌa½—ô±¯äÉÅnyþ¿‘_òV¹�ü‹çsÙÿH„¿=€TN»ò¯~7zÀµ®þ·O’§ñGŸ„€×�e`Óz¹ôþ(`ßç.òÓ'EÖ=Ï$ѧãTÓ>çN€)pâo�Þè—e/ÐA7P� ‚@xÓ@>!¿ÛÚ¶<âlOÕXc¿Aø½.Çêü^Ó¶uÑw.gã€ùiÖ-É·Žd|åBì›”ÍUþæGj#¶¾ò/ýXäŸG˜GÝxáß•ÞÐÈ¿b§ŠMè²­�~xŸäØÞ6qëH“Ëêëuì�6àµáŒ‚À›E €7ûÓeá#tŒ¹ã Ï‚@þý= Ì™ä…Èùÿ<ðü÷ÿ”Í�ßÿ¿{ÊçØC×J¿Ñ÷˜–F¬_‹ýUnË™ŠCè™�ùÑ‘äZ·TŽÜ›„Ÿù=®òÚ”w+BámÿëV í|Yú%›^Ø>èÏþóŸÿ\0–b|6°mèljÚ�Ú6RmâÏÉ Åò—�Ñh?|µ€×v•ø§ Ä6à�͆3Fo�ÞäÏö¾ÍÁ{Ô|ÐÅâ A � ðÜp\šâHs±ŸYçܸ�}œì÷ ÛûPuì:Չݷ™ÈOõóøHçŽ|ŽõRãBøÑÖ~ŠÈIÞ–<ÞðQÏüŸé}Ÿ?}ú¹Ç¿¾Ñöáëׯ'z,@¸”X\*¶ÐKß¿?Ôçya`]zµbbmâ¿k!Àdßóö6~û<¿×eÛ}›ž)l #¼MRx›¿Û»_µê@¯ ŽOámm×¼¹qvãg�—ìK¿?Õg½Ïñº™ß›}•&ã£þÞÏ*�¿«\õ…äB²ùÌßä^w€·úSà3�—Ú®åã�~ýõ×Ý@ï?¿ÐûŽ”Û®`ÈÇcý?ŠÞíVï£O-Xïól“oRßû«Ò9îCl£ “6‰Þ)¼½ßìݯxu€~÷8€ ‚@x�pœ‚>e»Ï=nŽöÁ>d¯W_Ýwæèê8èSãØßË]É?yZ¿º·ý¡´—úAîñKÞPÐ]—²¹Íß?0_8Ô;NEôuÁÿû‰t¥7ò¯;èÇ'§È:ã¬ÇbgcÔ;ЧÆõ0Œ] =º}#é~HçV¿AŠˆÄo �ÞÖïõnW«cMÛwËw Dv<� Þ¯ ĵ�|5>¥÷ýz›~ø³õkglûªD÷6š¿_Wo�úÌùLèû�kYózŸcU®öDîZdËl¶?Ø®üë1€F„I„íó™@N$�d¶CWýot'Àµ —‡"ÀCÿ�ZAAÒïÜR®Éf¢O‚õ*ÝÑc›mÂ4E€Y„ ¯�^ïo“•� ‚@oˆ§ÉòCw££·ë¸Ä£�ÖlßHâóÆüÎñz�ÖûØCÖë±j_û î"ì-4ò9ÞKåBüÛ‹ÿèŒ.�›Gn´ÝŠØ_£kÚ­\ù—ͧOã‹èíGà–®T¸¤F ±6^Àjíº5çÊgIޝþ›üûêÿ®?:c8׺¥ç@ÒÈ#F«úÒ³ú«}O`‘Aàm �ÀÛø�Þå*u\y—û��A �ýA€c™Iï}÷ªïÛÛ£ñ~öØ9Z+¾:·s�Ö½–Þöz,û¼Þïøœ4y¯9uë5o¤Û‡dÝê×N1¯Û}l#{ݶs-Y;Û¨Ñg*6Ê·¯ïSmx¸ïئ;¾ê™åN®ð»(ÀKþ*qnw (ù‡ôTþÖ&�¯\é=—Ú.x4€;ªd¿fto áæKûMüô¾w0ãùÇðØ&ÿ–äMéÄ6š°H`‘Aàu#�Àëþ}²º ð®à„+-�׉À[ÿïsŠœîŠö.ûß9sÔgÊ?µÖÑÚF¾©þ»øë:ѧ¶~,ÖáµXö9{*Þçc÷¹s¶I>ýFúʧ!Ö¤¿é}®ºsÞ¬å6ÞLN{@œÿ¤_äÿ’ÛþÏÎÎ.?þ¼Ð׿ÿþû‚»”Çc¼@�¯ ð A=)pÕ"P);·Z ع“k€~¶«ÄŸ"(¤�=C €=ûA³;A � ‚ÀË `9š}.æ|rh&ÄöOIòçÆõxô¯z?žç³t|dOùì·ô–u�Skqß©¸Ç"¯ÏÙfW2_s­;>%™[¹í꿈û‘T^ Ø*¬GWùOeŸé–ÿ >‹ä_ŠÜ_ÿë_ÿ’zóA…€S}`!}¡w\j[è=)°8øûï¿]à€_xߊ8k¡ °k3Ùw~oã·Ióšl/½«¿à#,†±�ÄA ¼()¼(ü™<� ‚@Ø'Ä�¶øšcÝrW,ú|ìQ«þª;wНMùéGljséù�ÖGq|µyîÚÇqb#ï3‘w?¤sj¬êŽOHÈÿúE�ZWñÛŒ-›ÀG>é®ò_ÿòË/PÐX8oô%ÞÐÈ¿ÖÚ¾ IìèÓ§O'"þ\ò?ÑÇýõW{±Ÿì[>¨±w!ìÞíñ½Iüý~÷™’&úÄ­ÏÉ:ë¸ó<´ßwüµcô ^�^ûÌ‚@A ì)â@wŠÕWõmÔܪ»>·ªÛ÷3Ò<ÉVÇ·Ï9Ûæ©}k®û?4ÎX£¾&ôž«ÚU¯ý=N/É×:úP$ß/ TÚD›wÜ*‡G®•×>(?ñ#ùØNtgÀß*P8h?˜®úߨp-ûR¹sWÿGdzäó].&ºç¢OÕ=>ožÛ¶¥s‘äx#n_Sº?Ûâ]ú†É£Öû«]‹Ö§¤Æ†Ðª{k¼ = ÿ¡ül¼ ‘Ý Ð˜¿|íS�²OØ`þ¿]ù×�·º+ }-@.ÎÇç £]«$Lø-é7†Èfóx­[ÚçŒIŒVõ¥gõŒ„�ó6b1‚@x9Rx9ì3sA � °çˆmé)¿Û®œ©ŽUû3No{쟑¬Ëã¢Û¶Ž¤Y:i}o�ÊŸ¾ MªuüšdBoßœí1FŸÖÅ�¤!–ŸÔ�íÊ¿|­2 ?�4Ò¬|bp~Èÿ©$çÜ�ü«ß�ný¿–ÿR}òk/�µm$Úñz€‹?þa�FÞôµµ¯\Ö=ö$ÑßbÓ)lB+¼8)¼øO�� ‚@ûŒ€8К³ŸÛì»ô!§¶Þ&V}&Úµ�õ³î5`W�>αô8–u^ûœ;Š‘³-îq�ScÉþ Î�ÚÚ”mÿH²ùÛK¥·G˜S>ÞЪ²i±ç�cÈ¿¶�ºÚ&ûd5ý�ìk.õìÿOh ÎÇ�Vñ^0¦c&ãU¢·Âªc-´‚…ü?v~•4#Ïÿ�<�É¿%ݧô;CkßS¸ƒJAàåHàå°ÏÌAàÙÐ1øÙçÌ„A �×€ÀSÿÿÏdõ5ìëC×pŸ} L«õ'§b_u¯ÓýF1rwþHNõunŸ²íï¥Ö ×r_V…€õ~á—�"„Mšé£ù[1€uȾ÷¿Ò».ÏÎÎú2Àåׯ_úT wÐÿЏ6ú ù” ?HJßêî€3½øï³ˆýÕ¯¿þz-ÒOûðåË—IݰXè³€ÿ…>x¨»ÚÕ} «Æõ}?~ü%!Çfë¯úCÞ{Ÿ\“�|šÇ¯ääës[çúG˜äN€ Hô ðB¤ðBÀgÚ ‚@A ¼u ¾�á©FÌqKrçÈþ¶1§æšó×¹É3ywŸj;×Ò1KüÖ-!ÿÒyD@B/Ðg%Úãçmÿ|% Ý âÀšü³½ðøòòò‚M_ ¸ùWúQ#ÿ¤ªÐr/éØÁ'Æxä²Íå*¼n›Ý’ë–øhØ4÷]Zú+ìRX£%¼ )¼ î™5� ‚@÷FòiòLçÞ¾÷€ƒuüA¸¹Èanú¨�ãäÔuV‡<·)¿ã÷•uN÷í}¶EÜÛ;,É·NŽõ*Éé§ùGø¹ýV™ç�ã€õ§•Ç×ä;ÑÅÿï"þ|1ðH¹ \È¿îàŠ?„_½ú/sÝLº×Ž�R‰?Å€]‹ UÉ¿çê}=á'¯÷¥šiAàHàÁÏÔA � ‚@؆¤sD°·õ{Šx%æUg®©5šX[:oÊöºûñíˆô\µ/ä[„|íª¶ó{Ÿí‘TŸvŠGŒ+ †hó™@ªg"ö�üËn/$¦nGtëÿ±äšüsÕ_äÿJ©—Êc¡Sä_¡u39_;¤@ÂMø-‰Wû>í±WgÏ=ŠmŒ V`°áŒ‚À³ �À³ÀœI‚@A � pÄ“ÖĺêŒTmt·)Ýñ]eågèwJ¯ã:·J�g_‡¾½=å«óìª{Î>¿÷Û6Á'ßúÉà;ùWàF㱩k»Òï+ù�øâ×á?†ü«aCÊ?på_�\« p©;xIàùßF¤‰S@0á·”kgÒÎþ1Ž¥ûö¾êïuìuÓ¾¦°F#Jx>Rx>¬3SA � vF@ühMþwîô‰&îSCß–C_ö‡V‰~ÕûXK~¤?ž»ΤÞþj�tû&ä’ékWÅýo•Õd#ÉRoØ_}°hä_äžò‚Àc|¬ƒ<=p­Gx\à‚˜Üë·z­¤®6?nPB·Þ“G–?Ê�BÀ2óîßJôݧ÷yž»½'<Úç&°‰;<)<²7� ‚@D@¼hƒTo³8ͽºA^Y­êuünÎEzýöÕþU§ï6ÛãßGzÞQ“yǪ=Òí«rµßMuàÛûy¾¿½Pc\‡µöy@]éçÓ�‰×8¼ðïZ_ ¸T`¡9Nµq¾Þ“|Æê}rÝiäµÂÂ*R‹¬Éw˜Ôß 8k½E·Ï’.S:±�Úï†ÍF FO‚@ Ok ctŒâ A � ðÆ€³m;®Õ8zí3¥C��ìûBU×1êÛÇ«m¢O?û{©õʵ,t ô}°•sCA`5'í.¥·óq® þ*\~þüù’ÏþöÛo‹üã<Àû ®ÈYmôUê�Ú©v€>èm-’äcÏ5r|2c}$ƒ6÷5Ï«>t܃�lb£9Üg$ûqF9•°ïmÏiéx/‰÷¾b÷Ÿ ä<\Ë»åN�+=p¦[þDò¯%yd ÝAðõëW¾p©"À‚€¾°Ð;.õÉÀéº"Àô´$âÄ{¢ùvaݶÔÙFžÉ}/éhŸu$}î4a—"ÀTâ��@ ��iF A � ‚À«BÀÄu´((mJŽúMù¦æÂÏøŽ[·ôüŽ�ì)ßÔZêØS9ö×yñU»�øõ—¯²Ï«6CjkWý%¹eÀDÿ5üK®%[sÎÙÙÙ‰øþM_8ÒÖníù¿eÓÛóôÄß}*ùwŽpŽ%s1–›í‘$‡Üº>÷­¾6–ö7E€†Dþ�§C €§Ã6#� ‚@AàÙwZÏ5¥¯žXaþ~ &ãHñês¾}^boãùœo¹KŽs‘&ëöõ¶××Kçm‘<Àt(f$½]Ù·Okåñžû¿‚ù+�mù\�úèÑ>ø]Û±®ú«[ëƒî à.]ÀK·¼C°˜�ä»°K€aü�޾è#é¼~=Î'¾nÂ7E€5Q‚Àã#�Àãcšƒ@A � „dÙ„¹2òUÂ^uúõö”ÏsŒò›“ýºªm]ä»Ý`ÉxŽMÉU®ÂË·ÿcÓmµi½·ºàJâFw@”ù'_þCùÚ§UP�਑nruûÿ�(ÿg?è«ý½ÔÐk’�Þ7“z“ù)I¿¶nI÷éÇZÛ&kG”  � Ê ‚@A �ýD.&NÖvnJß¶çôõù«úGö}|äîÒ*©'¿ÚU7–ŽMI ¥ÔFþÛ˜Ú7À„ló&ÿöy@Ékù×�h, À§WbIþõŠ€[>¨;(ð’À]¾ ´5 Gwƒh×+ÿ}ÀÄÝù#ÉäÍI÷svÕoÀÀcÃ#�ŸF €Ÿ†0� ‚@Aàí#`®5%fÅåÖ„Þã÷>lñ‘ÞÇZr÷§öíB;›žÛªm½'úäNÅÈ]í3;xˆ®»ü•ÎS˜··’Ø­ I>±ö©@1>xL>ó@þEü¯uWÀ%䟘ÜSŸ€@÷$ºÚèm\ÉQ ­y“¸Ó<–‰ü6yg€9 €Ï\NbA Ü�î‡W²ƒ@A � ð&€HÖÖÛÄž’[1Ÿ7æBg>¯Ãz/½®>?ÍùKë‡Ýû¿¯ñ^¿è�¾Õöšð[wܲö±o•Ë—d¶¯hÉknÛ*"óÄÈ;R¤ÿDòT�ü½ð�+ÿ¼/`¡íBsp>ßßÀÀl½_®�¶^ÀÊ[‹¬ÃwlþcZŽMû}é~žÛýðßiÚïî Gx8)<»ôÜCtŒÙýÊ.½òï÷½üÒãý,Dbœox&øQÿÿ#lþ�Z²ë#IÜù½¾‹MÎÏ4ÖT›mzbUŸ‹¯ò”².ˆpé]dÀ/[»{{¢a©4b,}uÅ¿‘xůtÕÿŠÛþ?}útùåË—+½ðòŸÿü'�0Þ_\Iˆ»jWÚß§¹@tÀp!­·ñíBþ+ÙŸÒk£m8c� ð Rxlé‚@A � Ð# žÖ»ÖÅbp8K­÷²�a›ÿ‘kÛzs<âŸ~Üj�ôJè«î\û°­[®|\6nà+Ç"ò<ÐH¯ôö™@nû‡Õ‹èÓxd@¡›*œè�—ò-æ[� }2ðRŸ <Ћ©�»?�#?$9ÿÚ\`=Ž�Šî³K1€\æ2±÷Úl{¬&…KŠˆÄC €‡á–^τŴ ‚@Aàí!À1ÜÇq$¾—ìÕ}|ä{ëHσþ­¯ÚU7‰gΪ;§÷Ùv‰�}‘—ÙÞ Àÿc|ÄÔôhÀµâŸøL Š¼,ÞÞ ý@w‹ï_¨ îq!ÒÄçé,òˆ®6wbEŒÍŸüÚì¯Än¼‡˜ÏczÍë5�ö÷Ž�%�­¤°¢$� ‚@A lC@Ül�2ÒñÁÝzI'ûªn’æ¾Ö‘5†=Õœ7ïý}~µMâݧÚΫ>ë–äX·Ô¾ÉÝÈ?ÏPh$—«ûjnU¸Ò yù_#ÿÄèÇ{ÎÎÎøL xÿù‰ˆÿ‘ wð€Ä²* )ùW…�NøZ€6¾Ø¯;nT¸VìR¹Û^È’ûÆIß òopzI9öcÓ웓ä¹y³Mûœ"À,B �iR˜Æ&‘ ‚@A �{"¡¥�¤ û}%ã¹ÏœNì1š×î±zÛäÝñjWÝýì³´‰oµo|! nÉu1@ž+ø°|È÷�®îƒmkêëOŠ÷šüó~]ý‡ü_iã%�ŒqßÖq“_õ·4q÷ø&ú¶‘öÍIç3žç®ºãM€psÞF,FÓ¤0�M"¯ŽiA � ‚ÀÛD@\Í$÷A’½öUÇG3´Ýœ?ñ§§·ÚdÞÓTÛù#1û-5d–ÛöMî:„pó–¿cŒU€é”ÖZ#ÿ �h;V¼�ù×3ÿ<*À# bê³~ ¬äÙ›}Uš\#Û'c¬«’ÿÿÏÞ›h7’Ü\·jêvÛþüþOy»»«JÓ=ÌC�Pä@J*MˆµB˜‘‡d*9™ÅZçB~�Ú…^ØU;5{z`E3¯íã_û{~�@#Ð4�@# ü?ÛPà)ÔO¡Ä;6óYg=4�‹|l«ñUv>×û×ù¡³_Ö›_¢lá\@Ž)`±£‹o©â€(бŸUø‘O\â¯ø[-Üèòÿk])ðSý»lïo¹ ü̧Êõ / XOÌ\#×Zño;9æøùÁCøy®ì­h�Czà�–Þ8»ÿ‰o|#zú'#ПÿÉÐuà;@à½ÿûøþu~Ië÷.ËæM»äá{à|æýݰžqló˜U¶~Žæ\øT9ǹ°G—ùc~Žj~2íÎþ“ƒ¦Z~Ÿ›ô<ýÿ‹Lw:³¿k€"@uÿµbtòÿúZ—ÿ_ÿþûïWÿüç?þûßÿæõ€ø_+¯Œ.7âÎEnÔ\T›ÚÇW »ø'~Ès » û5JûTù ž°©ó<ði¡hvô@�F h�F x$hï½þ`ûØÎQËúÌÛ×ø<%%wžSæ«Í2”6šãÎr˜Óº\Ø[—iÎg>ÇT�msÿlÓXqu€tÚqö_Û{'1Š^-Üèlÿo*ò¯è*òym`¼.Pôì�?þø¤EôW¬èmWÈêçâyU`Þœ5ž/A-ô-oY ÿ–Åüê"€c¡M˜õ"À"-4cz`ŒKk�F h�F 8 Š6ŠÐ·Ø<ï9ºe›ØþÚFºêSe㸅Ëœ=Žç?'{¬êg=Ô±Yê‘s̈ϱ¶›ÚfŠÞ|¦ £Î-—*ê¹çŸ¡›Å�[-Dñ¯mS=ÏÅ··ây†ÀÙׯ_YøA×íŸTôÿøë¯¿.þ÷¿ÿ�‰§xßòÅe|º‹}±�¶mY8e€ýE{0g°`›fÕB#Ð Ð p´Ð4�@#Ð4�ÀûD ×Esü1[®Z+ÜMslÖ™‡2î%ÏšO¶ãï¼ð´‘Œž¸Ü²<­údÿ9[Ö¯ñ¹¨§8§YG¬ùL™›úþÍò»c�Õ?WñO±OÕ'ÿõú?‰» 9×Yø¬þI…?¯ $³pp£ƒS‹fâÈEÁÏÆ˜Š�v¸µ÷ÔñKoòÔ9Žt`Ò‹÷ø6×<@ @ÒŠF h�F hNC€‚lª»NKðÆ£Ø~·Ì[·F3~æ·Pòw�[å‘Ïœý¨¹(¯6�‰>óÙ?óö©:Ë•RÄKw¡Ÿâ=†G§ŽÚ¼¡˜—ŽB<Še�Ãr¡€K�éçÌÿ¾øÇOr¼*P>>s¹ËŸZxÛŒ~7™Ãâ?/dž8bî¿$hîu¶�(~ŽÃ¾ØØnmߪßb’66ï�^x§loV#Ð4�@#Ð4Ï�À®¦<Ìœu™·:ê±5Š¿}2oÝõXgNF_}ì»…2‡Ú².óøeÙl´œg$[gä­m*¾ÜsžjŸ³e?ó ”3Úl…5÷üSØSÜòú ol,ˆD _ùàÿI>,8Sñ«ç\ià§b¨x `䛡R?h ê¹�òb€“8Ö2ñγDí¿‰j»ûJ€MHµÓGB >Ò§ÝÛÚ4�@#Ð4�À„@*W1ÁWµÔÐo¤Ï:óPçQ’ÛÇGGÅ¿�2e£¶Tô›íÄ[Wy䃦íïE€DZøèôÀGÿôö7G ÀAG·F h^�×¾ÿ¡ðzªÆ¶>e¾§š×–<§~Ny›�Ãض…2ÇwŠ|ÊvzÎŽ=Fv¡O¬ã*Õ6IuŽ�3ÿqûÀ$ûvègó·Ò\ @¹µPÀ-¼ðú·ß~»Ö"Àõï¿ÿ~õïÿûJæX�ïµÖ¢ëÁ€üÓ?%|Ôü¥7ÅǼЙǶ[µ@û°awa¿F‰¶O呚¶«iá##Ð ùÓïmo�F h�_‚€ê�}aÊ€Uö$æô¶�b‰ÙÚ\Û¿ÊÖ?7õvš2ž·Ãsª6ôÖÍѹ<èOÉè=øQ«qøÔéŽ_“ojÿ­”8u¹ë¾]Ò¯…€�ýEº;½öïìóçϼàJ6Þp-Ê…bo£`ÿã�?>Kþ©bÿêÇÞxuÅUt=(ðlaÀ›勘 |þجg1bm!ÿ¼€LsÁošu桱M0¹ ‹^È€4ÿaè€ûÑ÷†7�@#Ð4�Às! Zã àß2Î)1[ònñ¡¨¥Íѵ̽¶9�ÇðöÚ¯êÉgŸœÛºJ«Î;âñgLÛèÌgŠžíË:ËÙVyd7ãC޵¶Å‡ÙÏ|.è­Ë¾#{ÖÁ3Wûq€b)þï$“F¦¨•y0`0Ó:ã�îRñŸÔ)Êϸì_¼ÑK®µðSyxµ õ±W¸@‡FnÑÑ×Tnûæ.îMqñ#]õÝ'7# zÀ`4ýôÀ‡ø˜{#? Ó?õ�²¹½��@#Ð4/„ÿor_›ÆÚÿ'ÛsyˆÇÇ¿o4·k›uøy|Ûjl–G¼‹pòŒúTŒœù'Æz�›u™_³kL¹œ“Ÿçĉ§y>²ßHwËâ@ô‡ 5ˆŸêÿx7à5—ÿÿãÿ¸þ믿®ÿïÿþïŠ4a¼¹¹–ÿµx=ð�ÏE�nD÷cMƼ@|½ ç8ü5­3ïüèçtä´þAm¿s=°·¢xOôÀ{ú4{[�F h�F ˜A@5ÎŒåõ©™+õ˜)34ošu™·=SìKù°Ór HüSµœkÄçb?óöͺÌ�ìÖ1wóĈgƒ(¸¹Mà“¾ˆò”¶›7\sö_”âŸB]ë·¬,ÜýñÇŸTô_éA�º8à¾!ëA�w3‹suÖç/hèhs@.ôñq>ó¦$©<:ûÃïøhÛ‡¶½S3�À;@ ÞÁ‡Ø›Ð4�@#Ð4�À»ºoÎú4ú§ƒ<µË:óßÊ[—)[9›Çs.üçôØŽm9oæs1Ÿyûd]æ—ì#?ùSÜÆýþš;Å?…·T�_¾â¯Õyh`¼&0Œ» =×ÂÀ'ù?Uð³ðS ¼ÐÕQ\k r-`R‹ê*Ï-Ô�ÑäªEþœÎñøÓê|n9ï\ÁOîìG¼åœë€,cp`h¡xôÀ;ø{�F h�F 0ª]̾}̈�êϘ–�×öjCo]¦$Ê6ä‘= -�ŠIg»uk´úç�Ø,gÞqY—ù‘ݺ�[ˆgHº|xÅ{Êz3@ÇÚn©¹óR�]›t¼-à–j1€âŸ‡RÔ×F.÷làž~þWŠ�Xë‘i9_lÇN½Û&ñY‡)Ë™ŸÂv„m9÷�½…Fà­"Ð oõ“ëy7�@#Ð4�@#ðN ö̵2ͺlÏ6ë+%6ëœË:Û¡´<Že|ݰgÙú9:òÍ…* yß^˜æx�¹f·_¥ÚV©¨sÙÌ qÅŠ  çÏê\ÊÏ¥áìâ_WþG»ÖyUà5/øç?ÿy%-\Š^ã¡­\ŸÓI²Ð\°Û%/xlëðÝeïCŠÝ㙯ù±[7Çf%©šprÜ{+�·„@/¼¥O«çÚ4�@#Ð4�À+CÀåsN‹1rý5'[¿F™köAž aØhYÞÂ;îÊ\ÜFü\áoýVÊö…÷XÚ¾x  "â-’?ëìþ�h½"·z>ÀµìÔ÷7¿ÿþ;E>v©nï´p©bÿŠî¦g\°@ WæÂù~C™À¸eÿ.üYŒÀny”»‹ûJñ·®Æznyü½�°êE€=ͼezà-z=÷F h�F ø�LuÙ‹o» È—˜c�p°~‰2_b³OÖy{ìSmszÇK™‡[æs±¾ÆÛ¾FgÆ'4>·P#|Ñeþqö[<•þµ¶›¢ÿF>±8@ñOç5�*þªøÿ©7üTáOñ%· (Ål«w•ë"‰|«ÀlÒÉ0Z ÀäEÓœg¤ »¶»2RÍ¿IzàM~l=éF h�F hî  u›ãmªºhŸvŽß;œÈ�7oi².óuÛLs¬uPc˜¯r¶U>‚ËŸœ§˜ÄìçâÜY^ãm_£äö˜“¯ÄóxÜ¿ úOÚ6¡.Äêb€Ë3-Ä…ÆmøÐ䦫.UðÿP±Ïk/$˜RÝI¾Õ€óÅÐü™ZÖ/é¼€¿Ïþ/-àç/¥ùL=?l¹�ta(¶;;7ß¼%zà-}Z=×F h�F h&^ºQôË? ƬÛ�uæ+­Å^y­Ïü©~ÄÕ¹Ö\–=îÙÅ=¾™wŽ9jßJÉ£˜ý-ý`@ ÝýþÅ{àV|þÿäSÁ¡«>©à—xàj1€Û(Ö9ýï¢]l´QM�󦹨Ÿã#qúã1È?G ± Þm¤ x��›6o �^xKŸVϵh�F h�Ž€j¯…õ’ζL��úmN—핯²ë@r=Us‘î|K²mk”\ž£i‰‘úœg€ ÃÙH½@ÁKOÑ ¢ÑR W@n àYþùç�ôWr¬ Stä«…t•ñ%~®ðÏÀ›ebGùÐÓðµ=óa,v낲ÝÂı¶�׌@/¼æO§çÖ4�@#Ð4�À/U¨öY˜Õó›¿n»u¦ÌÂ|¥s6ôäʼn¯6ˤ?Ž·| U1½;ñK²mÇRòNs�"Y�–bûR”7ߨöE¯X…ß7‚¥»ÕÙÿ]ú­~÷L¯ľ¡íóO¾È.þM1ùK˜uèk¼}Ñ»È7Å–Ûœ>ûìy¶<ã±74Ó¼bzà8=µF h�F hÖHõ؃¢x-ö©íª‡ž:ål>�•·ßÎØ¬7Ÿ)~سÎr¶-ñÕ†ìæ±‘ãÔæ‚ÞñK²m§P櫳öš+�ḠiÙ ±À³°ñG G¹íÂPà«ÿ·ºàF—ÿ_ià§TÔÜ@ÜR—9šó#À»ÀŸ£ø­�L|–(yhöÛIeëƒÛ} l¡xÅôÀ+þpzjO�ÀôOíéwÆ�@Þ÷ÇÜŸïó~¾}|ü¼ø¾dvÿvLO™ËZìÒ÷‡XÛ×ø‘ݺLÙr¢ñè²-Ëð¹å/Øæ+,�(ñäÌ?ë*�LËö�fú;aáyØZh^ ½ðZ>‰žG#Ð4�@#Ð4¯8f˜uðY~àüŒ ÆUù#dE–Í›®Ùñ£‘{�Çâk4çÈú¿äëyä8ëj¡�OÕ� ŸëÌ>Oú¿Ô8Ü @‹ç2þ ø€ÄÛ⠢ћ¦+.uÆÿ»ú¥Îøóº€•Â_6n ˆøåšÆ‰$‡<*Ǹدgÿ­ŸÂ‡$ÿŒïâ}Žw’l·.(˜°ñÊ�W„@/¼¢£§²Ž€ö©û¾™'¹÷·ë¶G#Ð4�@#ðXøŸ›[ýŸœm/Å{Ž>6ÈÇ æM=GË•bÏ:dò¢«|(ŠÝº9ßlßâãqsœ‹zt¶�t¶K•‹[8û§u€†Чžp±…/>8ˆ@ÄêLÿ%gþÕ4ôù¯ äa�r#>ŸÙ'”V‹è‘~è=>ò��œ‡_Þ{�m¿OZ¶ï4ÓߨÀ ƒC �À+@ ^Á‡ÐSh�F h�Fà-"à"òµÌ�ùÔº+ëF¼uK”í#oöɺÊ#Ó³“îÿÎé—bî£ï ü¬ƒg~4Ùûù™$Ýß@ñ¯â�³ÜTò<àF^*×Ë1 RŸŸ+æâû÷ïû3ÿÒóªÀ[]9p-Û•¼cE!¢î‹îIÜá–Gti`®àÏyrñŸ û9Þ±Ùn]P¶»ràÐB#ðBôÀ ßÃ6�@#Ð4�@#ð–P}Ó7}-Ûâùäb�åoÝeÛF¶ºÍŒ�ß–6òéF¹æÆp‘Ö·îzÎÙþ)Nß_èÒ}©´p~NñM¯éß/ˆÇ¯6|(þyMà�r\MWp%@m$»OX­;Ù…»Ïú›bõ‘uÎRóº�¯Ôþ¦¶[^¤l<¼èÔÆFà#Ð ¿ð®h�F h�·Œ€jšÓGçþÀøB ÏÓõòoûˆ² ÄŽlÖ{3×dû圕Ï>#žyÌ5÷ØG¼uÇÐ · ê}Åq¶Ÿ«îĺ¸=¨)ä®Ëûå5�Îüsé¿®´@‹ù ¦^›Ç±(îiù ü¦Øçú[hÀÇyG4õÇ~s²õAÙxáQçàÓB#ð+8ø±þÊ�{¬F`„ÿŒjç‡û(&ëðëövèÏïí~v=óF` �·þû^;~gûÖ|Ö0²ý)s9çSRo'Ô]Åà¯ww×CÝÎTèE׃ߞ ›S¶Ãóu윜õæ×(9³ÏV¾ú!¯u�åXoψæßÛˆ·n+Õ˜r=ç�+bHŽ×à¡S»–—ôãÀ•ïëÞI¸Õwƒ‡þÝüöÛo×z=àõ¿þõ¯kâõÝ�^ó°AÙ9 ãƒ˜¶¶¥E&Édv“gý.öM¹&Û/(à€q`m¡øµôÀ¯Å»Gk�F h�wŠR.xòfV[•í;§·ý)(cœÚØ>º‹@ç¡ð§X£ØWE¡ÇÁww¢×ÞóÔ1óÛ,sŸÃ(ºúfÙ¼)ñ#~IgÛŠOö˼ǞÓ娼�S󦹈w1¿DÉëøœGã˯ôkã­ø‘Sv‘Û[þ~S@P©î¾}ûv)»ÖŒ¢]ë{t¥ïÔ•x®·�ÂmíËë‡Ñb9òUÎ9¢s‹øzŒÑ"@¶äV½p€H /…@/¼ò=n#Ð4�@#м;(ˆ(ÄNi�‰=e¼³4>Û”»Š¶}8zŠ•nQü“‡†?l[çÄU¶~Ž2Þ)ÍãÔø%yÉÆª½ê²}Ä�tk9cŠ¿· žf9ñæ·ÒœÇù4¦Øx úû,9Šûés÷%|i¢ËNÛ/è–€K}~Òiz` o ˆ/’è�¾CõÃ�[È~§,ïÜæ3�Í×�ƒ¯yl´‘ngHlxý§x!zà…€ïa�F h�Fà}"@Q4:Ưú,gþ5£ÂvQÔ»XD†ç jÁ{þøYÏUK�íw›ãm7alÛÍùñ«òRÞj«òÒ¸s¶cs,ù�lyû2ïÏ�y™¥°å•€|ÐÔQäj<>Øxf€h.þå¾kúžðZA þOªý÷¯ ü믿XP"�ü%1u!m*×Åx/€J·F !Ð Œf�F h�F x ¨{TÞRõ¿êª\‘Y³Wÿ5™|µ�tÕ9o ¾ \ö¯~Ë«e#ž¸QÑ.ô³¿u™bøƒ¸�"·íæ3u¼ç€¯ygéÂÆ¶‚€›6¿ �^øUH÷8�@#Ð4�@#ðá ž9õÿ1±Ç=k¤ËÛbÞ~ÈÿœõWѶï–[ÈCƒfÞ:�NÓŸ‘.Û3ï¼™b·\}³¼ÆçùnáÉ·ä—çd¾ú#³ýÖçœy¾kv|·ÿΕéÕ¿>ÿO’}%ÀíŽÕ—B‹šk4Åš…ÆTE¥Þ}PêÌ?¯ ¼æU�ÄN=|§?æâ9ó¸0&_¨ÜÑï¾d)¶Qs^âà+­1¶WýPf›ÙÞ¡±•�À3!Ð Ïl§m�F h�F¨kò1þš<Šy.$™Ë––çŸyÇ’Çgþá) 3Ý2>ö3oÙãd:šG¶W>çñøçñ2_m£Üöåv®l[óÇ×8æ¸Ê“,Ð;§eû†Aìc9SÆâ3œ£ÄV›óMz‘ Z_îAaÅ­tºäSÈâ˜s\þoæ2én\ü+ÿ•“¨Wn°Ï´ý83v«óÙ_þ¿í0.þ]ì›zœ5Ù~Aµ�½p€H Ï�@/<7Â�¿xCøùšrOµh�_‚ÀÚþQ…˳΃ñ—º¯óÌræñ¯²uu[ì—õ™'? HhîÎ ]jDZøfÞ±£±m›£Î³D‰Åî6ÇÛnj¿¥Ü¶c~ ¥°^óÃg)o§?`çŽÊ¼©u“{Œ�Ís@oÊØ|æ;uèã�çDì´ \ÒÿUüµŠÿkéãvÑýYùnu ýæŸÿüçÍŸþÉ-wÈjq;�®2Ñ4´: [LR»ÿð’²°y/·½èùá ¿Fh¿9Ùú l Û~ l¡x&zà™€í´�@#Ð4�@#М‚€j�(ÌN‰%†øÜ�GºìŸÇ5oZí96×-ÙlU—c3�-SóÙ>�Yms2¹æ:1y¬9>çÎ>ޝùGúª«òT0ÏεŽa¹æñüL±Ó2v•G¶Î¼ã+ežÿ™3-ìõÓ˜q‹€xnø¬E€/â9««øÐ”‹{(„£&—ú�.Uô«Þ¿bñàêÇ�—Ò_é¹gÿý7¡¹x>ü`=l^@ ¿ä_mŒƒn‰ÊÇeßÌ�â²=óηFG1Ö9Ö24ëà-gšù3Ò£Ëú%~Éæqªò–^ã‘Ý\àg™ÏÂÅ>ú<®üùbF±/¿ÏÄËŽŽâŸzäBgõEÎâ*é䯈êª� ½à’…Þ0ñ×_�}ûö-Þ �.¸v!OŽSñ£ç䔋|ò�xë2�› yñ6°aû‡ÆV6�D  `‡7�@#Ð4�@#ðTè¸ÿ €&ïœn¤·ž~t·ï\¦Î“k�9›}L=ŽéH?ÒÙÿ±t.··Û”q̛汫®Ê9>óö«t‹O�A~*ÝTtÇÙyç­º,çùV_°vwñ�Þtš¾ ÂåCAÿIgñ©üYPª]ÑŒþàè\r%G|‘¥»SÑ#™‡òšÀzöÞÅs¦Ä.u™,Üÿp°>,üÑáãq�·¶Å8áÑ‹[‘l¿£è€£àjçF h�F h^Š)úTí'‚.·*Û–õ™ÇŽì¼•ÇnüR›óéGº¥ÜØŽ�Á?okæÉ·&ãC[óËvó¦9~¤ÙG~ÖA3?Ÿ}(ÈkÇžu`…Lƒf¹âNé�ã\°C�ž”œ½Ï—5Îü‹¿•#Ä'¼;—ù£T®ø’Koàqº*`ôšÀûD÷…yÖíyø×‹ùJ€ÃÖ.†\YïÜèlч#îò8þ��mÖöÎÚ´¢Ø€@/l©]�F h�F x ¨y|üŸùÑ\°çVå9~9÷Ÿã+ï9ZŸåÌc_“G9¬[£5÷œÿ›‘ÎñÕvŒ¼ä›m™gÜ,›7Ívë–(6Šï\ìg>cç\uûñÉ6xttŠ|dƨ¼tçÒQX‹½  �¢Vþ �³þQ“XeúƒÞ6-Üê¡7*þy¥ ?•�«h¹Xžãwž÷Å:?ú¨ð?üQ9ò~œlg<äLï#æ9Ç =´Ý½0D¦•§"Ð §"×q�À3  }ü3dí”�@#Ð4oþ?¨nFþß‘yœ³lÞ´Ú-3>tó¦øÐê\컳Îÿ­qÇÊó™ï-5ç½åžÃ'〥Æe»mÖ#Û—1*N·�¶UÎ~æ—(6æáBßs2Ý�~?>þî.æñ±¥9›cÑÃC¦EøX$€âë\šÛW©®$sY?O÷ãŒü­èÁ½ntÀÍüq­W^OW  ¾Ñx¼/Päüœ…†Q¯ ÝîR‡{ ãyÀtíÀÌ¹í‡ ŸõÖ1’õð¹å˜¬žm©8d°`›‡ÆV6è€ µK#Ð4�@#Ð4oÕ¦9§C_;u:SÇZÎÉGºcìøÖkrο•''ÍÛ²5nä_u/)ç±Í¯Qo»1ÉÔ èÜÑq Í[ñ¬vä¬s>✳PŠZäÇÛ¢ò¡ÂþREü'åÊ9i˜c4åa1àüË—/¼V�Kþ£€VÜ�æ~#Ý�®¨‹‘ƒ4f ÅŸ<ô|@æâþñ�ä˜Ó0Ç;4ûd}ðl/ÿÀЊF`½°¤vi�F h�Fൠ cÿ(Ð<äÜ�«»uÙn�í–¡Ô#šÇ²�uU¶Þ4Û3�}MvŽ5JžÜ¼MY?§_ó«q/)ç±ÍÏѺ]ÈÆŠb<Ç¡÷ça[¶‹œu™ÇNóâ�óí´‡ãâ£1âô¿ì®M(´ãU�ÊË=ý~Ê?óâ†ÜQüÿãÿ¸ã9:Ó¯T»uLº-àV‹×âã¡‚{¢þ’˜ó�èÅ+p»b¹²Í¹]Ì›â›yäQ[ô.½0B­u«øG¶êØ�@#Ð4�@#Ð4¯ Š.8ûB,Ï[îØ�ÝÌÛÇyL³Ý1¶YÞB·ÄTŸ‘¼e,|<ï­þö[Š«¶×*{^#Š\k3Ö¶C+�L³Í4ë\ìg~è#�Í¢‚‹uó²KuAm³xš?gþ¹7€5‹ôÑ$•ïþ-ÒÑbQ@ 7º€W^q�üö ÌOÍ@dÊFÎõ|æ?óÄßÿ¨îóV²}=¦TÑl³œé’�Ï£2ZÍoB 6ÁÔN�@#Ð4�@#мnT ,¿ØiÙÏ:ëUU…½ÒœþØf]•Ñ�tö¯öê»&ç<ÏÁgLrþª­²çUiÞ0¦e¬ÍG§07¿Fs‘�/-Ç`'_n.üÑil Ù éX`rŸÄ»P7ºòÞé~ž êýx€@ØP¨öçìÿµì×ÊõI*ŠŠöœOb´‘ζL™|.üwyXügçµ2üˆæ¸︑ œ{`ˆL+çè€9dZßœ€ÿìº5§"ÐߟS‘ë¸_�€¢Å0Ï6Æ[Ÿÿö£íBïî8ï_²~MG¬}œç#Ð¥m®¶_)oË~s4®öá{”ùc?gâÝk¬óz\dº&;·ÄATþNÛwÊy%—ôs_¿xÎþﯘ|˜Gèÿøã�[®øÏþÃ-,Üèí\YpÅ_Ï؇™Pv~.þM}Àg: •wœø-ÿ¶Ïåi}#ðdôÀ“AÙ‰�F h�F x^(ˆr�Ähèæ6ÛG¼uÙ'ç´>çG—çPeÇÛçX{õG>¦yܵ˜cóVÿ_)oË~¦þ,F4ëÌ;.Sóølià_»ãüÙ8'”…€¬× ýøÎb3��ŠvŠoÎè–í«z,�[ü¹ža!!d�)ÕÝ·oßxM`,èêž)p¥Å�s]%pþ×_ÙµRì.úMùBš7­±Uv®LñÉ…¿¿èøÔ–ýª­åFà(zà(¸Ú¹h�F h�—G@E;hb6È[zöÍ<±–G4Œú3×Å›ã,Wß%»Çϱø[†ßÚœk«ÿšß(ß]õ9F^òÝb³O¥l«u™·.ÓÌÛݨcŸk.âógéÜ.þmƒbs <:ÉøÛ<à‹ú¾ø—ŽWÆ�©ˆ�Û˯ ¤è¿Rñÿ“7ðÆ€?ÿüóL‹·Z è®…w•}ùÍC]¸£_jäs!sl¶YulÖ5ß�@/ Y4�@#Ð4�@#ð:P‘³©HÆ�­¼u.¾ì¥@£5â\¸ÍñŽ›³g=¾k²ó='eKmd¯ºÇÈK±[mö«”íڢçúYg:‡߉ÜíW¿+9?6d¾kæ •ù<Þ  ž×úKÉã<–©TØwûº‚à§.õ¶€¸ZàÿûßÏ Ðbñáç¸IfÁ�æ"ÝgûgćóÊç‚ÒÈUuaH6ËM�'A žÆNÒ4�@#Ð4�ÀëA€Z(wff9óÖ™z �ÝÌC)Êh™Ï~¶�t9¦òø;ÛHå†?γæêqÖü²}.¦ê#çØ9ž9e[–³Þ|¥Ù?óøUß,›wL–Ñ�½uðsŸ…}Lí‹ ?X�éœbŸÚå c©Eñ/·\N—þï,šŠt|Y•ê–× œSüsÉ?¯ ¤ýöÛoñŒž' +XPpQŽÙ<Ô ød>/xA€ØÚÈqÿƒÚå¶l›)±ðs�¸%û\\ë�=½°‡¢™F h�F hÞ*p .d÷ºYoÞßÌ[vlK ;E[nY·…'6û�䜉'Onž[ÕgŸ-ü\|Õ?Fαsþ!£3ŸÂ‡ì1¾Ã­üØôÀÇþü{ë�F h�Fà�!@!4C±e–+ÅhõR�1,_Øw5•µ‡”XÛ3o¯ª;Ev®5êy¬ù1‡Ç´Q|Õ�*ç¸9ž¹g[–³Þ¼iö˼íktƒnÔêgáÜøÂ»#ÛZyÉ|Xœõ÷eÿw*Þ}¦ÿLSøZøg< ^ ×èK†ÞÍvûÚ†~Ä;®i#p2½p2tøàM·÷‹@¾ï÷³í-{yûûÒAö³nÄsçÖÉoLÎgàí4oJ xzæG²ý2¥Èß�(�ðÙ‡ÿÃL3o�Ç· 9ó§ÊÄmiÌã©ÛZΑ½ê–älÛ³}Ù/ËY?âGºQ¼ý*]òŶÖÈ—sfÞß(ÍTßÍsñûû÷ó:ƒÏ÷•³úß”‹Ëù¹% ºøX� ¡t=ðÖWüë_ÿºf(dQÈ(®ÐB�Ø}!Ÿ[] páï/`^ Èq™÷Ž‘xS|æxlMÛ>Îu`k¡¨ô@E¤åF h�F xS¼×ã^Óï  YgJ§�xë*õ™}ÇŽÀ¶vüÑ™šg|xSçÍöj;EŽŽøã9y>G„¸®Å�ìU·$gÛÞ“[ó]³“Ç>k4ûfž¸kyD‰£Ùß¼¿'¦á4ýñwÕ:çE?}oy í“úgÕò_EYpQv])�4Øädznu5À…®éÜ }ô¿þúë|ZðÐs”âß¿)¾»æ\Ô½ÞÅÿ½æÈmO/dôšŸE f¡iC#Ð4�@#мv\ܽöy>åütœ¿/´+Ï8èè™·®RC>û� ¦të"Ñ”×xÛ‡|YçqG:ò ·ÏÙ>ÐSZ/�}J¾µø9{Ögž9dy _c¼Ž5­~kzÛMs¼u¦Ùf›íæ—(q¹á;÷y¡§»9/ßQ¾³¢RÅ›xÀõõýy òŸòñì€[®Ðo {}¥[.~þüy®ÎpwzMà­ø|¶Ÿ<£Ž¿Ç¨Û–æ…€%ž¼"ó‘[ÛÜ‹�DÿYB –Ði[#Ð4�@#мZrAðj'yÄÄtì¾/r*Oš¼½ÕŽLËþ˜ ÒŸ¼ÀØtòešy�m©àݲÞ6ÇŒä9�ó­Ñ:žýó˜ÖC×âçìYŸyÆÎò_ý<ç9ëMküšÞvÓ?§Co›yËžï]òU¿ÿ>OE,R± Ï:ÎðëÌ},ÈΊCq6žWò@-wUþjò¿ý÷¿ÿ}KnþW*ô£øç¶ùÇ­råv€ÝeÎ0¦£«öƒŽC´£¢Ÿø¬'Àºƒ` šw/Œ¦Cz`K+ß"ìØµ“~‹Sï97�@#ЉÀGÙßçÿmð4o{–áÓ)¨ÈK§ ª�ܶ›7Ís½u#¾ÚFòœý––ç1ò÷¼F¶-º-ñ#Ÿ¬›ãÉV힯cL«ß1ú‘ï>ö3?’³Íö:ß¼]ù»‡?2ßÙ©øß_ ˜ÏêÜçOxÿè$ó ¿hŠu»a €.Ã�ŠÿK=ðÜÅ?‹ß¿çÇ€ýá�"²í‹sô¥ÿ»À®P7¿v€šýàkÑÏhÖû�t|½`„š>@ @ÒŠ·ˆÀ´£‹Sï97�@#Љ€ŽÞ�Œx_îüÏËXöÿÂLá·ôŒP^ `wòxܪó˜ÙžuæŸ%yä“ç·Æ×üsþys>Kúcâ³ïžqçüòœ²Ï\ÌŸ›ýÍ›f¿ÌÛu·}Ά=·ìg}ÖÕï>Ö± ï-gùy ´Kuj�/ê,È=šÜõ.@�Ù¹ÑeÿP^gùWpÙ¿® ¸Ñ¢À…n]ÀŽ(ëY$  Ï ™—i¶¹àÇÁ¼©uPü¦è† ØÚ¡±•�^øÐÿûØxíßÞdžôV4�@#Ь"ðŽgù¿V·³êòÿ>|-C�éSÍ3<ëïƒ|Œáq2ÅÙÔóéªÏHžÓ¡ßÒ<·-¾øx¾[ý«ß1ñÙw ?7¿›çc½i�Ïú%›ýL³ïHg»mÐcxÇWšs`Ëß©*Ë&÷óX��C þÏÒQçyÔ<|Q%ÞqÏ,Pü«Èç�·ú-DQ-Êkou%À�n ¸”?¹â­¢närñO¬e/øj^ìlsÌCiÄ›Eú3k68ù6Ûœõ@ Þ4Ú¯½éù÷ä�F h¶#ðÑŽcùÇ6g Z‡l÷ÿEhå­3¥ø×™Ïð³ŽÜ£Î¸øÔùTÙóÃ×|0úcß%›cí·•Öü[ãNÏù�‰Ï¾[xÆÈ~Ó´Ú²lÞôÔ˜oÞ”œæ3�ã³ÿOlîÙ�ÏxÔ¤ç ÇŠð8Û/*u4ŠýÏ*èã¡:£#™³þñ¤ü'>.ñ—ÊYÿ›oß¾]ýùçŸ ûDN÷b£·Ì„ÌçŸù Ï:‰«�|>¸õÆ"[?¢‹I…I/,"ôñŒ½ðñ>ów½ÅüÃèör4þ/‡}�ܼ4:p~ÔN�?5îQ“}á༯õögüRÏgýí‡Î¹¼yØÐ¹£·Ï­>ä°Îü9‚ŽøÃ|rþ#BÃõ1±$8&Þ¾¦£ølÙÑå–ýG|Ö·$g›yÓkýˆŽt9¾ÚmCŸ»õ#ŠŽ6}Gù²Qì"Çi"‘Oßño²ÿåñþW²]‰^‹r…À�NöŸ«ð?㤿Ö¤¾ãJ€½ Pk×äãÁ‚7¼Mª[¤Ú7ì^°2ÿ^ °-Sï<};'ç˜Êë¸jk¹8@ àh¡h�F h~5:Ð>jÈYÿ)ÏZ¶8Êž Ó£þÎ*,¢˜™£u øÑÀ~©ÏþŽ'GíØ<�aê¸Jóœ°ÑˆÉmMξ[øšoKLöñœ³î~k|õËræ{MÎó˾[øµüÎaZýGz렙ϱ[ôŽÏ¾æ½Í#™ï·Š÷ärD¯KüÏUÄs…Àgñ¼&ð›úµl\ú¦³ü¼&ð’·h€ž“K>wò¿ãÕ€¾b@2íZ¯$†…¾Üô\ðóÃtwñoê9B‰ÛýˆyÛ 4|ì;¢ö�b?hÚŽ¾ à‘�-ôÀÇþü{ë�F h�EàØÂ­úWùÁÆ”ÂSGô»£ãª¸Sè¸yÆò´jÆ™ÛÛ–æ‚m­3cûPôиò¹æEf.¹[GŒç µÞ9lË~•ß"ãsLËãg_Ïßò±tk|õËræ¿Êsºª¯qYÎ|�Ërö;†·/4ó9wæG>56ËÄÒ·“vý�¶N>4ÎìÇ€ì—\ϯ¢ý«ø(þ9Û?ûñ ?ñÒñJÁHC¼~#¼&�„kÅFûñãÇ~ÇÀÃåü èöÓŠ€-í`|l�å&v”ÝZÞçüA´¹â=>¶“'wÏÉù¡ÖyNÕæ±­GÎüÙ9¶Òškœý¼-–�¥[ã«ß±2óª1#]õ9FξæM�K–ÍWšçµd³_öñöQtþ®ëï4Tß�sîœÕ§Ðç5�,ðÚ?t¼9à³ ôb£±SˆêwÁk¯É¯[¸J`Ú}Ä­·2áÇ}>Ë�}÷£#è¾ÙŽf´�wD£��íØàMÉG«òPÇÖi¾Î�ýçã!Ð ï3ï-n�F h^�-ÇŸs>Ö›²!™� +Ç·>ÚõQµn &h��މ÷¼™9eùÙßÔq[|3¢Äç\æG¾èðõj³¬b'ŠþL=†ÇF¦[&Ö>™b϶’ïšmdwŽ­ÔóÙê_ý¼ U¿UÞ_ýªÌxU·&�bFºµ<ÙnÞt-ŸýL³¿u¦Ù–yÛ3Íüš¯¿«|§áYÔ‚Ò§KøYà €ý™ñÈW²sêŸ!Ø1잨º÷ÿæ÷ß¿ë¹�ÃßêJn à�qûÁ¥‘‹¤î£Â›ý~¿s²fG³¯}¬Ã#óŽélkúAè€úÁ÷f7�@#Ð4/�ãKmÉn›)yÌ›ä.cÅÈäKÏQq4É9v*l= [ý²ïR¾ƒä“€Ž5�y-öÚ‡>ûGYfœÜñÉÖCiy~•·OõÛ"ãsLËcgß™f~‹¯¿Pçûï§¾ïJ—úó`À8ó¯|ÿÜ À½ý®‰p”ûí­^ÈÉÿkú׿ýöÅ>¸+u¼àöË—/7Òqu…½Ïú³›áÇA·Nl´|öì;¹ ‰ýb–<œ#©†‹ÙÎ6ôUˆ|<Á_ö�·å½Å�@#Ð4�@#ðKðÁùÜ KvÛ*%—ub"õÁQò¤ËcÆQóTÀ£ãá½yŸkÒdÛÞILö›óÁ¿%{Îiç7ojSçö8ȹãgÙ<4ÿªuP…y܉3ïüøÁ»™ÏöêsŠìü[©ç±Õ¿ú±­�ikñÇÚ«ÿ±rÞ–cb³ïžqÖü²ýÇešyçBg=ºÚ°qïþDEÎãmò‹bªÎb€¾Fwqé¿Îê+äæZEþµ®¸Ò:@<@¿•x( ²žp­.ÿ÷?Œ\ô#óÅÊ»ü¥3½ÿaÉ)5ì¶™7Å-ó[d|º}`zàø½éþùuk�Fà[`�âtžšXè¦"”yfYGÞ(B·ç§Ë|ÑïÛ”k/OŒNûQ­œí)ûDéb߈ŠÿD¹] î;«œ·£ÚH•íÈÇ6ræy ë³¼;ceÞ…?zóPòÐ�g$Có˜öϺpH>[eû-Q�»äó60[kk>Õ~¬Ìø5&ϩږäl›ãGãÙ×´úd}µeÙ~K4Û&~úÙî> Û�W2;Œ¼Î�"\_§ØipE×Rýý)z%ùJþ¼1àNäá¼20n�í†þùçŸ\ÀÃvÎBA$“¿Øhû±%åâ7Ù�¿}¦�=I;¶}¡Oœõ™ß5Ó,!Ð Kè´­h�F h�Àî8{—f–W!Ï™h {ºyS=ŽûlßõL®=o½b¢Å1ýýÑñ^G¡¯ƒw½ã+(¼ù½ã¡tùè4aP äèð»a7Æà¯íyû¬¸Ÿ¬"g#'Âf»yìð.ö‘]ðƒ­yrº;‡Ç±žXZÖï4÷º­rÎã˜-Ôcoñý>`µ¥­ùU{•£êªìylÕW¿,Ïñkó˜‹Ëú­93¢#]Íkëù®«ó¤ÿ}ñŒ?uýÔã!�<ð«ÄßGáÏeþwº à\þÅ÷ïß/þþûïs]!·ÈO»«[®à*ƒü¹m@íœ[s§[<^-þGW0]7âò̲óåâ?óÄWÙ9›6g½Ð_‚F h�F x6rÁ¶ç)61QŠÑ[ótAïxQSïø«+N±E¿ñòËÍGÈŒA‹ÿË—³ u½ 2�A PüƒW<ÔMüû8òNà~ÛkAç<§Ð:vž9àãñ+e»ÀÙ ™tÎí퀎x�“iå·ÈøÐ<ÆNÚö÷”˜m™�ó2¾[¢Ö|Göª«2ãŽtsú‘oÕe9ó£œKölËüZžì[yË#j]Íoýô�¡Èç•€“[œù—K,�q‹ïöû,Ÿ/¢ßäGñ÷þûA¢Qü‹Æ•JtÃ3H¨bŸ‡òÌ€xë:5/°#¢(w¯Å?úÜì�λ³\ÔgÞq#�mM�=½°‡¢™F h�F xJ†……¥ [â9ëO±¯Sf÷] z:WÈýzì6GÓAx]j{'ßÜâˆYùÝâìÿ·ogS¿LüÅׯg—,è,ÅAPbé\)@A¯b¹6ôyÃONÖY&Î:ø¬GÞÒêXÄT�åLíç1rÑ_uŽc®#ÞþÞSô™ß";×È7Ûæø:ÞœßséÁ瘶æ?²?FÇÜN�¯qÇÈÙ7ó[ç“cF<:ëçhË~|÷§…²ô4?Ý_f-õéu€ê_Õ9«7]ò¯µÂ/ö“Ì"¡Ö*oTïß^늀kñÜpÁ™|¸üŸÜ²ñ&b}öß“°Ì\Ü=?v\þ‚UŸ˜¿�r25Û絎o[æG:ç϶cû­qs~Çä\ÊqŠm„çZžµ˜9ûH?Ò1þH¿U7Н±ÇÈÙ7ó§ª_’mQëê6T=ßy5©wgþµÏáò}ù¯ T©Î\ÊgþµÀ-nøÅ™Åp©ÿ� }Þ ÚÿJk”Wœù?Óm ¢5Éë[íSx¨ —'-þy ü¹ØßíXôsdCÔªl�íáÔ�Š@/TDZn�F h�G!0*âÐ…^T̃ⓃpžuÐ|FÑ¥‚Ÿ~­ƒé ûþyvó×_g·tó¢ÈzB×þ¨˜Éç#`x.÷¿üã�³Oê—ÿüçÙ¥ü?i, =ü쓨ÞëuöÉóT Dÿ²é¨Ÿ´‹ š·?ËæsüFúì3â‰ÉcÌñŽ]ùÈá<™fÞù–tÕgN¶~ŽzŒ9»õ[ýìÿXº„åR9ûSèG9F:æ?ÒWÝ1rõ�c¤Ï±æ×hÍcô´iáKêÝ™¾?ê,ÈtñI�€¸*@û#뾈aÀ—ýsö^»ªëëßÿýJÿùr+·Dñ¯|q…z†U�ñg‡‘»Äƒ¢»¯ÝŽåp·f1´*Ïé¹ÿ|lzàcþ½õ�@#Ð4�À“"°V�q4»ïSÑI qÿ¿ 9ûOÑÿSEÿ•úO-\SðÿïÑoÿûßüê€.óÿô¯�}R®Oÿ‡¢Ÿ!ØÇѹNÕí‹` ‡(þuü®ë€÷zÀÂæí4oj;ôæ¡–C©?ÙǺ%ZÇñ<Só£·Î±Äänç²ÍþØmËüH‡�–m#9œ6ü©yF![|FqÇêŒã±qø¯Å.Ùçl[õ[ýòv�bªî¹ú;VÆ�\ÎW©óZŸetþ®ˆòÎ?òˆÜqÅ>EþgÕõ<+àBµ;2Åÿ ¾ÊÇ}îõ¿âõ€ß¾}û©çüP�‡�ࣸ;ɺKé÷ø5�ìÖ:ÓÝí0Ò¼€²1K²ýš6�@/ô¡h�F hž¨W[)>‰‰®bœ‡ÿqÏ,¨Pgà§ÎîÿP¿¢øÿÿo¶ól€nþRî~¤»|æíÓ´x€@/<€¤�ÀË!Pÿ1½ÜLzä�ˆ@ÿÞö§þÜÐ:«ãSdr–ß]ÚðÖéÑÙq¶_OÔ:»RÁÏÿk (��ù�³ÿ\�:: HËG¿æ¡¼A@Gø÷¯ýSaÏ“þuú×)ä壛xw™žŠgó•ú�è�ƒySæOË>¡H:Ë#šsÙ>ÒÙfêq-Ckœå%Jsw>oGÖUŸ‘Œî˜æqæbêøs~�Õ{»OͳÿÔöQ¾‘.oÏ’½ÚªLžª«²ÇšÓ/Ù3Gçb'ÿøñ9_óPûܳï"]ªsÞ ÀYÿ[ºÜÙ�üÐwí‡ö[?äûS÷þÿ„Ò¤¿•ÌÃþx–·Ľÿ,(޼¹Ø÷8äÌú,Ë6ë ´ÝNdÇ[·“úo#°�^ØT»5�@#Ð4�ÀiP ÑýŠ?Îô× *ôª{àFü�ú™ú¹ú…δ(ÀÃÿÎt MÁ®ët¹&7ŽÎóѰySâ§Ó{qïÿ%±ÊÃþYÀ'@øÛogçºB ºróf]Ï ñ–]Wˆêÿþ•�ŠW‘°žíÍ#:š}íÊGþqÎSÒäyzN•’׺Ìg]ÖÃÓª}§Ýö—XÚܶ­Ù·�rš×Üœ¶f[‹?Õ^ãª<šßšÏȾE7òaü9}žÛÈÇ:Óœ+뜧ê,›æx}—¤¾oú}»0w±Îºkèö‹|¿©ÿ�÷ïê×êœí?Wñ©§þŸëŠ®*Š=àŠ«Kç í¼sT.…?~ŽÃ¶ûQÀ¶ìgÿìk{D±¥Ú†l?ÌÖÒ»F ÞõÇÛ×4�@#м,>Æ„rÆ?.óW‘OùW‘™‡ý©È�³ýåAûìíÒé1Ûgº¦öŒWF�®Ü>’5e«3ÏÙ| .Y4 ž+TÄã9¤çM.þõˆ¯¸:�+nËýš@])¼U ^*Ôñô¾Øe[«Ì|ÐÑl¯|þËšÛ²C=ŽåJ«µ#ÛÇ4ë2ï±òܰÓòvî4ÛþŽråÈ5{öý¼18u¬µøSì5¦Êks]ò¯¶*“{¤[Ò×ùŒâ³n ïœk¾¶CÕyê??Tþ\WH÷Yý‹ä¯Z øMôZ4ÞÀ€Š}½Qô«Ö+ÿ$†Û®þûßÿ~âÅ9'»ø¹ží™WÈbÃwÔgÎ6òoÝ@ >À‡Ü›Ø4�@#м4mõ!z|ö™n¢=ƒré?gükß/° eåž½t;Šw„ù(·òzÊ×Ù9E¼X øçÈX«q¦ÿVz½ÓëL�ñæùÞû3ÿzŠ×YÜü Õ¢Á¥ž 3zñª@U¸T:ñÁµ·¨ 8(ˆ™3:ZæCq⟧Èçy2ó£¼yΙ÷ÔG:Ûæ(14�WýÖìøÛ§Æ>•<7·­ù×âc¯±U^›ãšÿȾUÇØ#ß¹9�|³nŽw¾l¯ºl3UçæÞÀ"a/X¸äònø¤ ¢qæ_~Z¼dŸpþ…·ˆèµ²é7¼�Û¾—+ò•™Ï ü,›ßý8¼1cJÌ’ß�]óì«Æ8¾{m/¼û�¸7°�]Úö@IDATh�F xŠ1/¨¸öCþx¸_<èO…=÷ûSìG×¥þ.ü÷WPü«è?S‘NñÏ-Q¬ë¬~§ýîe nù‹@¢¢žb?ž@>ñÅ¿b(túïL�ý>û̾(WÐâ�AW¸é¸z_Ô3·‘Œ¯mæ¡øÓ¶ä^Êçøì“uK<1y,C‰sËŸ�u#šc²Ýñkvbæ|r¾§â;ÖZü©öWåc¶)vdéoN?7—9ÿ¬ÏüÒÙoÄ[7û,ì¿×úîqöß znh,|“Oœù§øW?g@WDñ¯˜+�ýÿ!ù³®ø$;»~.øMc2Ù*ÏÅ:óRíÛýg¯Ú3Ä-Ù÷ŽÍ|Lzàc~î½Õ�@#Ð4�À/E€"ŽKí} ¯ö£øÿ®¢ÿ‡:—þG±¯âßEÿ]â)Ú£xŸÎÐïyã.¾óoæÙÐ("Y`Eš5ÏøQà  öx~—üëä÷ñßq[€r…M¾qt­â™"ŸÎ6UÕQDñÏÙ?ݹ§9èxú ˆÇf݈Î}>ÄшÙÒŽÉ=—Ï9l÷Øu.Þ&üªÍ±szÛ—èZìš�Üö�÷vÀ?E{l¾µøÇØkl•GÛVk~KöSm£¹XwlÎ9ÿªÏ²ùDÅÆÙ~Šb~x";J�¯ýWÜ ^k™÷¯ ϱWòù©®“ÿß¿êªÕÿûŸõ7%íüèG:`AïæÝšelÖe~d·®éF >ð‡ß›Þ4�@#Ðü2Tdø-ùÎþ×kü®ÕyÊ?ù£è7Oþ—.îÝWžæOÁÍüè¨×GÄl#Eí,Bè:]ªÂ3�Â;ãÞ}äX˜ |cB‘¯ T‘¯ë}wjùæâŸmba€ü£¦¢ l[è(ž¼Ž­vô4�m¿LkL–í·E‡ODzç`JËú�fýoÍ_#¶Ú‰;eü:Þù±ã¬ÅŸb¯1Y6†yÛ²}‹Þ>sq[íöÑ¥Ü�µåx󦚋Øý"^üÀ$ë'Wpö_ÆoR5ÿnQ@û•Ï,Püë¬ÿ�«««¿té?MÏÿûœ¯ÈÅæ�€±èìHÌg*õA‘ŸeøÚœ«ê‘llplÔȳuï�^x—koÔs! }äs¥î¼o�þüßÀ‡ô�§øØïç¨08ΜÇ<4 oî·×kvüª�cCë<ŽÍµ¿fg¼9ŸªŸ“×p©qu×ìKs¬¹æä§£æÈræ5ïb:Ù&^k~<€ÝÏ'aw§³û± ˆNýRª�íÿª{ÿ¿pæ_ûŠ(þÅs‹€w[y—ÃxsÝ;“lw,óËö*Û†žFŽª Cÿù¸ôÀÇýì{Ë�F h�'AÀÅ´ò–ãì; *þ¹ß^ÉžQàß©Ø×{³¢ó”ŠnöwNÁ/žÞgû5SŽ¢ã¡|ž£\Z>Ò55��}ái¶Çü¹ €Î™}ž ÎóîÜÑaó™ù.]°AcN‹™ÆØ©ð7VøÛœ—¸Ê£#·óš7ÅžÛœ>ûláó<¶øWŸ<ßjC¶Ý6æ][õ©ö_)o™Ëc}Fñ#ÝÒvoõj¿¥9aÛ2Þ’O¶ÍñyÙgÒKgËcW¤Eí(v»ùÜü•¸+úå®Ý×þü¨Ý‘ù²Zž£ù ��exÚ’lÛÎs7VÕÙÖôƒ!Ð ìïÍm�F hž�E—Š0 ‡>÷[ÎÜÿÏÞã’ûý€®ˆEŠ/È/^Û§BÛ .þ35_�ˆ}¤kÊ‘znÖ[·?’gÞSQÏ"@<(�¢Ÿh^ð"À´­Î5GU ì qã–uŽÃ†þ1ÍñKã›4/Ï.ך}..ëë¶d[æíg�·ÝòsÑ:î©ãlɳæ3²�tss<Æ—ÇúÏ�{J®-c�|².óžÛŒŽ¤Lq5<…=»Ÿhÿt Pž‹¸‹‰XÙ [‹ÿÏ. JóîËú�v÷7ë2Ÿ}à—lÕ·åw†@/¼³´7§h�F x (¶jçòøÐ‰î¯(‹g¾ª…ú9Å¿üxàOÙ�£mm”#n÷,s4KãÈØGÇ™·=œÒŸ½Ï4æLáÏ£ø×<öWxÊ¶å®ø-MÁ~𩺬ߒÓ>äqìHg»mÇPÏsãù�lèÖìsqU_çÏœ–Zõ_òÙæò?6ïh¬-9·ø�{ä7ÒÕylñ©1sã�üŽÕ�2Ÿ¥˜j[“óUHœÑ�ÛÄ,PñÓ¦‘xpH¾àÔ⟶wa|é+ïú?Ø”V}dzà#ú½í�@#Ð4�À#¨²{Ü?ÈÁ«hæþß�¯ðkÿâÕ~SñÏ@\ \ࢎæ#_Ž€ÝÙ�7Ä-¢± <<€¢Ÿä©Å¿§ã]œ)zóPÚZñoÿ�wÿý°ôÀ‡ýè{Ã�F h�§G€â+Ÿ¿¡@VÏWp Àð*®)úãÕ~¦Šõ-AÓó"2È>²õ°L}„,×}³ÍTÕ1rÌ—"?Š} ~þ·H·ö €Z„ªˆq­Ï²y°gy?Ù™œkKî‘ÏH7šcá{jËs%Ç©¹jžcçsê¸[Ç9f~Çøzü-1[|œïTú+ƨs[sdéœ3Ûà'™2»¡3Qô]a1 ¼ »(ùs5«ÄÛ‚æ8~Xð¦ØÌç�}°»�t¶5ý€ôÀüÐ{“�F h�Ç"P‹$d÷8#>Òq†|:cîgÄs¦gìoàA€*ö£ð¦èÏ]“­…?GØ.þ¡>ÂåHxÔ±»ÙNŽ}£pe4.Œ[¦E€}ñÏB€‹Ùö‹Ó¶ïs‰©øØF‘mSQ:óöůêlÛJŸsÍñ[s.ù1^Þ¾%ß5›ç>ç÷TãÔüuÜ:Nµ×ø§’OgKÜŸ§ÚŽSó<ÅçrÌé™ëȦï€Ô»Nvv){Å?…¿q ÀîN€Ý-Ú²û ÿ�TnCv]ÞÕÙÇ:drnÙ?ë›ÿÀôÀþð{Ó�F h�§D€BÉ= Ò\*ÏÙÿÎ<pôÀý-¼tM*¨xŽœóqjM:SdÖxÀ9Ýò2ü¾{þš¯¯BØ?øÏÅ? ^Ðöí¯vPlnµh̶©€•ýÐÁgšc¶ð9oõ_²Uß,{NY·Æ{Öük?u›–Æõç‘}žcœœÄ?v̵ø5ûhNoA·¶]Kö ¶Ø�è;Â¥ý±" L¸ÇÿŽýû[dg•oˆÝštk˜«:zv4PšùÃ�ÏÎÆ_ûßkƺloþ Ð àC~¯›¸´£žÛæSbærµþã!0:0üx(ôDŽùîs$Š?=¿ €�ýëó\DsO=]÷ý�ÀõÑ-t®ÇÂ@²#36Å~mØh^@ñšôî*öZØ¿Às–ŽE�ýÙ9ØVQ12fùOÖã—mÈsm«_�ÏqÛ:dó5î£Êãõ«±Ès8uìµköSÇ}�qkÛz¤]îÞCÅï™~üQð‹�ÝV¦[d›Û•e=ðU9ëØÅa‡.5|h[üÖ|v™úï»B ÞÕÇùq6&ï|?ÎV÷–6�@#ðk˜+€ª¾ÊQHSL«c³ÝGš¦�Ýšœ>Ë5w¶ ùi¾ž3·#pv?Š}ÿqõ‚‹Û°O<Û˜¼ÍÌ#ósÿ¿ðÁfZçŒ<7†õž�eç~б�ËÛbù-Rãc¼ž{<ÞcÇÙšg«ßcçslüSà½uÛÖüFvtKs”-ž `ªíÏEýL¶²‘Ìî ý%6ïâ�iŽÙI寶‰9�âŠg‹ï�^xŸâÛ†ÑÎøƒAЛÛ4�À³"°tXm–¡îÃÉqlù„Ç—ùHž£ÛÚлWÛœÛà¢~:ÓÏ"¯$ä¬?¼{\ mò•äÌx ¯ øÐêÿ6òTÝÎsü÷1¾žsÍqìêÌÈçÜÕö–äŠËkžû±s=Öÿ9·Ýߕќl[7ç¿Åwä3Òå14Ïý®Þ]>è·tÒÙžfÙ»ºLw;ô[ùøjÛz` zïÀ§ÞÁ‡ø‘6amÇû‘°èmm�Fà©X;È®ö*{>Yî» Yü|´éËŽ9†æXóÐÚG9í?²Å…æ ÝßÛOáï+¸ À ÓÙ_à³ÿ¦ûí$ŸÚsýÿZÊ»dóüææ†})>6jÃrä±6„´Ë‰œúy�wâ4‡a£ï[þÞ<Õ·æù¡Ësª"…5>Qø›u?¢¸Ñ"6ѬƒŸkÄ-îÖæ'ýcãWÒ·ù5"Ð ¯ñSé9�„ÀÚŽù¤¤Ô4�À;G`é€Ö›>òéìO½ïVRT'Þì±tŸC�æ¡>z>6ŸýÉÁ6EOWøl?W˜�¢Ÿ…€É/dÅæâßø@GÿŸF†}=§5:Ê1Ò�ò,ù;�Qþ¬[+û½4ïÏì¥çQÇ+øÕy#çmôç`�åcòÙ×9,o¡£˜‘n)—æ¼?û/ßQ'…õæM½K3µÞ»»L±-5rlò×vöUKH¾[/¼“ò£oƱ;æ�ŽWo#Ð4[ªç|ª~/«Ø¥ðçHó OºX˜lü ùi™Œ¹3üµï�² Ì•>�á�"Ÿâ?ŸýGÎWÈ¿ÿÆ$rÉ^ÿOÙÎðØ�í3Çç©Ú׺*[]²e?øÕfÊQæþHSrùPší–']Øžé�çcZ‡™f¶SOó¥àW5¿¿Ô?îûWñÏk}€oð"�¯ ØÎ©óÿÉ<Ô­þßÂVuöÑê[ebFºQ®ª;5®æyrcñrŸbþMäßÎsÎè©>oÍ÷àdÍ;w6£ÊÖ™b7?±E;vv*™Úï~gcÍ2uŽð}À2^oÞÚ oþ#üØðT;ë��bo}#Ð|Ö¤�µÏú§b—#QüâˆÔú‰{”êÏÉqsÔ~KÔ±Ù'¶‡¹²0uŠ~ þx dóá§äÜøÿD>ÿŸª<¾¶å¸ì—õs|Αù-þs>­o^÷3e|¯Ñ=gÛòÛ9v|ÍÙ Øs�´¶™‡ÒÐÓl7ÈæÃáˆ?�‰=b˜v}ÍôÀkþtznG#ð;ð£'Ñ�@#Ð<Ï}¼”¿Úe hm¿{†âŽyº^™}« þòrÇË™2:žª?Qdç‚çeÛÈðÉšæ£ZûgŠ_îÙvÀ{ŽUõsÎT©¢�CÄŠ“°aŸº‹˜ü [–�w+ͱ™Å?Ö>ÊÙºFà©ðoaDcíûûTó85�æÅþe¦Î#Þ:SüF ;»ZæwšþÛl@ 6€Ô.�@#Ð4�À{F€ƒîQé«Î24ú(‘Šh è³Tðߪè¿ùüùìšþåËÙ�ºŽ £_ˆ^èŒ:”Å€ôÊK×¹ø�Ùc£EA>Ñ,Sü;×o5?%ba‚‰O:D¢k~gÌM=xëås®ÛÅ@åb&˙ߘ®Ý�w�¿~o¼y÷•)›dÙ›çÝXÖ[gƒ�~Ä;WÓF`�^˜…¦ �@#Ð4�ÀûG`îàz¤¯º* å¢¢û3ÿ*š)þoUHßЧE€XPÑXðB€’�Š�é£aC3_òÕ¶í(ì]èk~QüýzvÏ‚vº ¢˜g�hà–Žm×FàC ðÖ ýÆóåÿ|fÞId:Çû3®vïÒÐWÞ¾ÄÚæ<ÐcýHg[ÓwŒ@/¼ã·7­h�F XB`®€é«.Ë™�ñjAŒÌÙQ_òŸ‹ÿ�]¿ýù3Š^·]¾üq5€xhmhÜó‘¬=m#ÎE>93ï+bA`šß�Šûèûœù÷ðZ8gq`ZØ/0ÈB£\ôgÙøe;©²ÏBê65ï�Qá?Ò½æ Öï–ÝQ´‰· ÍÛ2oŸ¬ƒ§aó..óaœþ䜨ìŸ}šÿÀôÀþð{Ó�F h>..:+#}ÕeÙ|.¶rª¨Ž–Šë¸@t\ "›[n)²õ´ý Š}ºx.ý§ð¿ÔU£³ÿ>ª…úˆ7ëײ‹~Sþ^ˆ³ÿwÿl‚tÀ~€:‹^PÌZ#1µÈ_‹m{#ðQðo†í÷ïÆû›×Љæ·ß!˜Ÿ(zÛF´êb³§íÌ6ïÒЙŸÜfIõ­òl`Þ'½ð>?×ÞªF h�F`�¹ƒè‘¾ê²œy�®Žñø»?*uq ¥OÏàìz½àV…5…ÿµ:ú£ðg€â?Šó)¿7Š1t~ŒÍG´ß”þ¦^ȲJgÿUäßiNôs.ÿçì?¼´ çÚžØ.¶mÐÀ‡îâ—,g~ÞªF (ø·Äoç57Í/v ¦š«wÐ¥ÎfÙnÞÔ�Ý|µ!wkè€ExÚØ4�@#м/Ž9p®¾Yžã�—ûGƒªï/ÿWÑT!íûÿ}@œùW…tÎü+–b=ñräëîE€i´ýQq>:¶¯Ïö×âŸE€ƒ+TܳÏ ðŸzÜÿÏ"6: ôn�@#ð,ä«ò¯y!@ûÆØ™jÞȹ³)Þe™ZWeô¹aÏ»7˦ٷò[|jLËï�^x‡joR#Ð4�@#0B íÕ^mKr¶™�#ÒrVn¿À`^Páüà!€*°¹Àgþ÷—ý«¸f ô4aô¦Äqdë–�ŽÍCó€ÏügÊ"@\ 9òÎþ¼@sô¾ ÅÕ..R°e9ó5Îòû6mÞµè¯rÞÖ%[öû¼~³û�y¨yÍÁöµŽ©ÂWÙzïÒædôÙ¹[#p€@/ÀÑB#Ð4�@#ð6ÐAæÉϱ<§¼è!쉷þ–³õê×P=ÈšùŸº§ÿo龫ÿPžŸ*š¯Tà_s%€zÜ y¢Ë¶?+?-Ät˜Cêðy £PùXL ×ÔcAÀ².ó¿›ú—ü«_¨gþ‚³ÿêš/ ± øçhyñà9òwÎFà-!°Tè¿Öߊö�[‹£Âß;hÞ¥UÙ9 K¶ì×üE >èß›Ý4�@#ð~ˆ¢üÈÍŸ˜§è�#ÍZèK¾MýŽb}’)þ¯Tø_™þÇ÷ïg?~ü8û¡…€ï²ý�ßwÍùŠœ³ítéîd‹7h nÀ.?:ÍG¶¹ðGg}8éOÌ*Îá#W°°@ç,æ)þÿøãìüÿ8;S¿øý÷³³ß~;»P¿ûöíìRöOt®TÐ\/¡xž@R‹�*{^Ð%ÛšßÖØœ§ùFàµ#À÷:ÌüGº×¶]ÚvEµY·Dmsl•­‡bË‹ÙÖ|#°Š@/¬BÔ�@#Ð4�ÀëE 4o™åœ?ú(”E½º¤§È§ÇÙ~ ÿIö™ÿ*ÞRÜOÝ<ô§®ôª¿«««³+-puÀ•&ÌU7œMg@~ñ>éöä“OÌK4/pŒ õ‘òþˆ˜bBzšoCÈ—öï“EÑ3ùgZ øgàœõsôê\ @ñ©+èû«¦E†ÝhóG…{Öe>g™ÓgŸæ��‚€sû±×€ƒæ–Ïü{JÞMÍQûAíc]–á½{³½i#p½p\íÜ4�@#м]Fͺ©øç¬~ÝЩ£»V�îb?h’9ûÿ�Ëü'ÊYþèÓÿ+-Üè €[-ÜÊF¾¸_Å>gã)¨ïä¯á“gç)ä§bÞžѯGÄèã¨ØÅ¥,*0†Šwîë¿S1Où�ûüUäGá?]ÀÀ¹ÎþG—-®�ï'”§^Àø.NàiU^Ó�üçbÐwkÞ|ÿóþ¨Êy[ý[ÉþÙþxÍ�Ý”;Sònk‰ÚæMÈ2|ÿF¦éÉôÀÉÐu`#Ð4�@#ð²l9ø�ó©z䃮MCŽÅŠõél?…> t.÷7O±ÿ· ø¿X˜è_Iw¥âÿ\Wè=�O¥¿bãÈVý‰½Ž‚’c€ÖQ¬{€³þœñ§èW�—øs¶ŸÂ:ë9ÿ—ÿê—ŠÙÿ\0]@app”>�ÑŸµÂad霯i#ðžໟ÷OU~ì¶û·•Çxlιx�·@'Ÿ9ZSàgßjk¹x4½ðh;A#Ð4�@#ðë˜;€�Ó{†Õnš{.þƒWÁÎU.þYÈ�3ÿûÿU�ÿ߉²`þFgÿ?Ó¥û"ûg�§2üì³ s®` Îþ×E ùmîàÄL�íŽE4Oñ÷ÿ(øUèsæŸN¡Ï‚ œù¿¤‹ÿ4-pÙ?gþãò(9™?cnh.>F®ÕVå³f¯þ-7�À=þýxÿwoy<§œÇ<€]ð›ÖIlÛÁÔ¨–�z`˜V7�@#Ð4o �µƒÙj¯2Û‹.÷x%Ÿt¾÷?.ýŸ®à‰þ?TÐCÿ�‚_ôÿSÿ©#ߨÓÀ7¨â¿q…ªx¦¨æþüýU*ª÷Ï`Nêø.Ѻ@ ÷Ý¢Å9�b]ãÄkütÙ?E~,p©¿þw§žö¯ÿ�³þ¢ÿ± … þ}'9ÅÕÍÉÖWÊÜiÖW>Œý§x§ð½Ïû¦*?åf?unÍ{T¬[W)›bÝh³°-ÙG1­kVè€UˆÚ¡x:òÁÜ)Yó?ÄSâóÞçßø>î²öýxi|·uÏýX|jüHŽ"YÅ< û^ÏYþ:…9gû'>dñ\æÏCþrÑïâÊÙâ²äÿŸ½3ándÇ•´«\·ûuÏüÿ9gޛöšøB b¥ï’ žCÁ-2eg ™©d‚Ê?”yöÿƒúfûÿ'úg!çCÎ]ì ( âM&Í €Ú†ðûê ä¿S˜¼õùŸ:~�Áç±}36}xGÐï#wäa§Iä+¡¯:>I[Ä?¶Cr÷‡==´lŽ Ð€#àtU#Ð4�@#ðÜ÷â}õOÙW€ƒ‹á{ê±™(Ëæíü‘�ý¢óÓ|‡²ÊO$ž@¶þûgÿ†�wü[Ù/Ñÿ¢¾¾©o ™sÒÞØ¹ßU›ço>ªìŒ™±¾�üCüEÂi¯ÐÁÍGèÇ} i]ã¸_µõ[þu±Í¯ 8@:Ûþy®ÿVwü‘ó'þ û!úƒìûQ~!ù€ÉE~% )Ç–2¾¤Z®>©«�¿]é÷rìçʵ¿µÝ©úÕ¿Ë�@#°C@ ã“x�ò„g-ÏŠ�BÛ¤è!÷±?FîÍí1uÛ·‡@ÞÞ1í5�@#Ð\&±÷˜ïê¿W1¦?t‹Ýõ)DŸ»ù›Yuy«?oö÷sþCº,=×�G°å�ü €ß ‰þ•öÊ,ëóU®ÆL0À�€�öü\Ÿç¬¶ü“}ê�_ ÿBªÿšåáã"þ?DæDJçŽþ/ÝåÏÝ~Þðo]ö�ð‘¿³æàŒ / Ò¼çj«:Mã{H.ÝOÿÕžrúIù�<æw¬îPmo�ó8@þCôk'±EÖºÖ�gA ÏkwÚ4�@#МF`�¼ŸvßÝý.~µ=º ¿ê­§ IVö�tsßáß�!ý¾«¯zKë”MöUÆoæRÆï/eÿàhÏX˜WÈ>W¹óŽÿÐo5?h6¤ÔÄ[Dœ5ˆâ{kÿw‘ð�Ú]`²¯¾òCÊj{£;ù¿”Œü]’L™<ãï·ÿ+À3þ³¬zoõ;ü’?îþ“Ù�Ô”fŠ-’Šcz꫌N»šj¹êÕç˜~¨Í!û±¾º®hŽ# ¿Wó \uZ�ò¬—©êÇ;îÚFàèÀ3€Ú]6�@#Ð4§€àž“ùmÚÕ'ö½¬A(CÄó¿IàEž£CðyÆ™G&'Àý¦.›w ÐN:wþñ_Èïf @óKÀwÜ€üCVèn<�üÔÜ û"Ñ•o  ‹¬ÿ‚ä+ûÑüïÒ¿K~“d€Ÿë—¼U&Pà_�îgý ,;ÐDæ¡bN5ÏŠ1ßìøP_mµ|L§n+¥¯­ºc¶‡¶;Ög×5�Àqô·÷î�Çε–«~¬£sýŽõÑu�ÀD ŠV�F h�—AB~*óYë(Ó£{E™-ôS1OÀÏð‹4çY~¤ïàKrŸçùW ¡w{ÉïêwKç™ÿ¢{c±\ÅÎ,_ôºÂÍOz-"Ú<¿ï÷hN!ùš;"MþÕ/ýcÀOþŸºÃÿƒ€ä·‘Mþ¹Ã/Ÿ[ü¤;ÀÖÈîþ× }*W2?–2Eê*ÁÞÒc‹¤ƒª§Ãj«zêÏ‘k»µ|NíÓ4ûèo)²òÇ{êÃnçCú~O.Ñ>©êØ(׿cÿÌ-~[¶Ôµ|Çtàü^z#Ð4�ÀË#!?–î[?ýÕ/ºÉ³ù� ù÷f¿Í©—ë¡Cúy†?™·úÿ)Ò�2#8”gÖ,P9¶:GÖÎ.îøOò?ÊU? ɯðkZ”Ÿ÷ÿI€j^HˆyÞºMŸˆÈ³­ß=ãÿCù»òWe~ö/oó7ùÑ'¸àŸ”ôÝ�É;xÀwÿùwÿúðü–±ásLO=’„ï}ÓKµ¹ï¼Ú¿hÎB`ëK2ù¬ÎÚ©x(x(rÝ®h�F ¸'“hwßú-lÉpH4åܱ'�ú}‘þüõë Ò/ð¹öÏø!•ýÓ~HÕ{€æí>éwèü”6"eóŠ”:¯n}•+ßø‘,toÿ—™@’Ä€_šë ätû«ÎýÉæçüµ¥?€ïÿûß|Ó[ÿ¿I²à“|x1`~€ ƒû’ôsÿHH¿¤óœC¼Cþk[Öº5Þ– ßN�@#pyèï–’Vb_ëâó’~ó'ó)úë>Þ(x£¶—õ<\ûXÏÿy΋ôÚø‰ç‘�ÅBúœé1ýj»Ú)›#Çzb Ù‡èCú}7¾èló7á�þK=Ò•Cú'ñO@u<ÛoÒ/‘Œ[Ë2lû¤ç>ÚÿÔðÊ‘¼èo¦Ü�T�@þÈô…N‚ÔûÍÿÚà—ŠðóÀ=À£¼éÿ‡Æp–/� 8�@€ ÌƒÌØ%sþ�ÊÌ£ž§Ñ«ŒŽ/©–«¾«Ý¯�m•µÝ9úÚþÊu]—8ßKŸß)Ì®}þ�]_þžžêçX½ú8‡ØWŸªëš:|�å€OuÛõï�¼Ç£Þkn�F xRzñ¸ÕÎWq!ÍšeÊHˆ}îÀÓ¶–s‡?oÞÏËú,ÕŽ»þl÷÷‹þF0€­ÿ •½Ý_~<ÿŸúñL%ú̃±-�¡XÖ7¯AH8„ÿ›ògoà…N�îš Þ*CP¸ƒ«ù|Ò]|~9€Ì…Œªû¦çø¿�ìŸ”í§Æ€è#gV_œÕž‘ ˜�r…M8bg±ù¬��¨HE�¬mÙR¬î>>ñmÙ4¯‚Àòmsçøl6lc#ð:ðÔºM#Ð4�@#0Ø"ñ瀳ծÚV�²ïì‹çî>¤?¢Ÿ7úCÚ÷~¶o”çsÿ"ûS‡ì�@Þúï€ì~¡ŸÆõóüZ”I¿Ê–YÿÖb ™®;hÇüïÊ�ÿ¯ÊÞz/l¤CWÂräû)Y6‚\̰à›îþ0ù¯[ý5wõi 2spíéƒ c£ï‘ùb‡�oeUí¥÷H*«žòjÛëd)lùžk[ºêb#Ð\‡þÔ]Æìzo�¼éÃÛ‹k�F xN*I¿Ï8[íbó]çA «�;ÿñ½;û"é)Cþós}¾Û¯r•«ž7ÿcOwýÝ’ ã1®1f>!ÿ‘¿­[>$^ô—d}´Í�÷o"Ô·"íþY@ÕÝŠ ×6iùQþhN�@T‘yAæyžòÿMÄÿûÈü„`ž÷çÙþÔžrîþ#Ù‰À:½Vú”î$ýP‚ˆ'Ç'ä<²ÚW[ê"OÕã·å³ÚÖrúoÙ4Ï‹€þNúƒqÈþ¼êÞ��,€t±h�F 8��ós|«ÏV»=Û ÊÜ97Ò`¶ÊÏ;ýèº{òï;ù²ErG?:Ä?žå�„øïí€ôS?2:ÆfŽÌ§æº®ªÏ«\µ±.IârÍÝ~?ž½ÇþIcÍ4üS&0À]y=. +›¬«/ˆ<ýÌG0ù»æóþÃ7�€ô‘ cäî¿g,KÙ!Ô5Ëô[ª¤;ú*k$C|Öº-û¹¶µ¯.7�ÀÃà{·÷wúá]­-óç2r­ïr#ðätàÉ!í�F hÞ:½ÜjWmSá5ñ;9�˜À‹øs?™gøù)?¶ïO=6Iîè‡Ø{kÿF²ï<ˆ¿wÈ¢2\eôóJø£Gfû=ïø¦~ä€È <“ô´Ãv« pæò� ‘‡àØ{þ?AÙyöŸG'sp[•MþékÉÌijÄ_Ž!¨9•• G�ŒO•©‹¬u«¾ås®mí«Ë�@#p?ø®Í¿Ñg4•¯ÿ„m¸Þ×¾ÑE›�‡#Ѐ‡c×-�F hÞ!÷¹<ÏV_ØL<‘CGÖìð~½Ô�;ü¼Üòï—øIÏOúÕ2; Ðo?6€\tÆpÖÄýÜÿ(£‡šG²¶ª{­òKʶÿ�x$$›GLZEÈñ†ˆccû½’i3²ñ¢¿? ó£Ÿ�y=€lûÏÿóÀÞKÕλÒVm2—�Œá~%™ÛÝjîvȼ™*?¦SWóVgµýV}l[~[¶ø·l�Ç!À÷këïö‰^ù“æ?k'ü¨>×ڥØF Û¸´µh�F ø �\øÍ>Ö¶[åI8Ex©7 �®»òyÓ?Ûþ�ôÏù}ýêŸôóÏø)ðåèÿ¦L�` ºßÝ—ž»ü&¾²“<.r)»òÔ‡Úä Ö’2ý(Óoˆ7„<:�Ä'mðOÆÆæž»þy»?ÏþÿÒÚx™ ?è �‚#›ü�ñÓãÈþEÕ1×™4v æØ‘•|¯z-×6§ô´‹ŒÿZƾe‹ËF xøžåoã#{¼ûòßÑ!û¾W—�"Ѐ×Í^�‡\è<¤Íë¯ôn=ÿ;,žCk|ŸÕ»>Ÿß'º »›pÑNõ}ª>]ágb9dÚÙ.[žµ�Ä�mÿ‰Ìÿ5È~%þØÿ„è'‹ð‡øÛF @íMvÕç¼ë]ô=› ßSΫVõ; =zú‘Î8ÌÃikßÁW]?u³ ÕAü?p§Ôq>9+0Âöþ~Ö­ÿTç]t3òºýâ¡zæ–lLÆ5˜j~O™Gjžû<Ï8«|­q×y*÷ü!ó4öKÇ÷iVù|½4~χm÷|ytàòŽIÏèõ�sÕ¸·¹h�'A $}«³cuø›@Z¹»›oB/ÒŠ ¹�îgüeçN?¶*0ñÑ÷sþHeDò½åŸ@�ògõQßä©õ]nÉJpç™ç§�u<�”«Ür“j«½ ¼ˆ8¤Þ� HÿNP€¾!û"ÿ¹ëo©z“ÿBÞ³öHïˆÐ$¸ó?wHÏX{ø”~¶æýX[ÿo{,‚ݾh�Fà8…P×_õ¢¨ê1¹žD#мIN’{‘έ´ÕÎdRþy‰ß$÷"é�òØýl¾lÈl÷�ÎûyÎÂùŸ€¡çÅÜéOö‹ÿÔ¶ü{ ½& ùežÛ+ØZÕù6“{õ�“ü›Ézô¥ÛIüUO»š�¡üó¸ñÓ~Gvvü" ÌcyD Þ¹OH0¨äß?OX쌙ïÒ� ÀÖÿ¦-Û]G­5�@#Ð4/�@^óñôÅÔ#Àë¦�@#p[~m¸åY4aο•EX!õÉ&ö"ë“èK÷[ú‡ôÏýÉŸ;ÿØ „øOYmÒyÎ?ˆ²ßø¯9Uòï�L·ä1íÇ ˆûH50©DÊ×>R÷È|è«älå7y‡üÇO¤œ7�ÿðsÿ�õAØëZëÝÿà¢È8©M|Ò.CYŽ>÷lO\èÿwO hw×4�@#`:Ð'ÂÅ#ÀžsK[åç´mŸF x¿Ü÷ïÆ–µ™þlhUÎ6~‘tˆ=$ßwý%!î§²‰¿ü¸ÃÏÛÿs§I[ JÐÀe�횤–¹2/ë’OšÆºésÞé:˜ì#£ãXÚL[ìE÷¼õ·>¿$€„àCöÙp£—ÿñs€ìà½ÎøŒDû¬¢Ï¶ä�>ƒ ¾Séwõ¹/y¿¯ÿ:^—�F h�sèÀ¹HµßE#ÐO}xzr�ÀE"PIû¹ÜjSm&Œƒ¸F‰ÄonõY÷OùAÚEä ø­þ’!öþy¿QæÎ>ÙÄ¿Jîô�òWé.h$g™±•™ËV>wýçø…äÛWcšøKNÒ�N%uJörg±yW?Úãëy‹t³ Àïß»èÎ?;ÈÞ   ÀÖÿúÉÝ}È?!f2zÈê=¦ìÙE€º—ŽöüŽÖ9®å#M»ªh�F ¸7¸7dÝà%8çB蟗œs�Õ4—�@%ì��éo} R» mÈ«džý‡ {k¿È?ÄŸ<·õK÷³þÅFÙ�2Ä?:ý)Ï]c¬YÖB'™:k¯6Ê�Mw÷ÚÇu8‰ÿÐ=†æâ_ÇL`À¸Q!?§!)ñl¾ ¹H?wúýì¿ôÿAþ ø°Ë?ÿ'ÜžnéGÙê¥ç€Øö§H~©Ï8êâ¬Tý«~Vãvj�F h€@Z7¹ú‚érŽEϤ¸BÌ2×µí¡rì�Ì©‡�‹¤ÿq÷óý"õ¾ë¯—ú}/öã§ü û‘þy?•‘¾û¯~fò_ÊlóϘHãÛ¶+ÎÏÔOÃS*ÓDž>Ñ•#÷‚©ß¿`G[ò|þÂ=È?¿ø�@À ÿ–ªçñ1?B6~p@†à'À|¿�ì�ñQÛ´“ép*A€ÃNû5ýÿk�.5�@#м xœ{”B /¨^è¦x&á{¥¾Ï?„Ú„TóLÛ!©ÃæíöKÒï»øƒð¯z~ʯ’þ H€­þ_Õ7�KéÞþÿ ¸íu©qަZ/}�ì�2í÷‚£Ãi[ ÏdÈ8dÉ�ýàçþ ý–”Ù�—®ÿXE�ýŒ=ßPêçqÔæ1Î|Vù€ ÀºÜ.7�@#Ð4Ï�@žáî¿h�FàUI?6‰-ŸIw!zJ|âgR(òrXåüI¿áÇ3øÔcgË¿Ÿë'�-ýÈQ®�@ö“ÿRÞêOÒ¿Iæ¥~XS&øÊÉDZsC†Tï†ÝõïNûļV û^¿�m‚ã.¿å þ&üÔ�\»ò1ý OŽ }ÍŸJ ¾’~‡‚êx7€_8ˆ¯2ë²}I8q, 2ö-ß­º¶5ï �|o²îµ{ËF x<x<†ÝC#Ð4�À"Á:'­~n5ÚÎTF7¡©G�:Ȥ_À'i9ô€Ü�€ `COY²þ¤wù!ÿ3 ÝÁ‡sù’>šiv•£#CœQI¶íÔÓŸ!õȱ  ’¶üO»| öΣgfF7Fçï �@€�Ÿl9¦Ô;I:°!_Ÿ;Èt´HêCdêxqK=媧¾e#Ð4�@#ðÔtà©íþ�F h^“²3g°úšÈ‰´‘¢‡Ü™ìRboÒ/¢ž²_ìQ—Íwë‹n2¿AòCøý€ò÷ÏùAþG[Û5§�ÓHˆi¶²gŽg.ûiÝ^!öÐdß!£¤\%U.Ÿ{ xÍãÎÿù߬Ƞlâ/i¯ºßýÇ>slù°NÿP­äC üÚn-kèN�À»@ Á²,v-ÇÞ²h‡@‡_·n�F xeVît6ۉȑ¨Ûi;›·ò‹”ûΰ:ÏôûnÿÐ}‡â¾d~ló¿l~™rd|ÜÄŒC¹ê~A�æ9E÷€1gæøâi»”}—\ _Ëšk%þån¿É?�ê‹Ýâ®Ìñ$4IòqV6ˆ|îþ_0&ëwúVÆfâ/éö’5a qAž“Òæßöi�F hƒ@ƒ^·m�F x5 MM[mÓÒ:}ŒƒL²ï7ùKún¿îìCàýb¿!«îøa'‹PÚW2e$DN�eâ)é€CÆÖ|˜ƒïü™y?‹·Óø›IöC¤ÚÕpÕé ÛÚëZ6©‡äCÈ%Cþ³€z× I¿Ié+A�7æ ÉŸ»+t,øUÛ†d@úå§ÉÕ–>Ó¯Ôßç í"s8`¸¯ÿ�nÚÜ\ù®dÒk9ö–�@#ðp:ðpìºe#Ð4�À+ 1zL:Ø~�915wobWl&Þ�t‘õ�~Æï䟭ýʼµŸçû‘S×KþÐ'Ù‡ø�Ì6ÿèýIì5nîî{\Êšsg^¿é�ä!m5�½DY9¤>â“;ÿ{þ) > ~¹ÓŸ daÖ½—™× óáO `o€ÖF@æ£úü©qslèËçÓÀ=„Ås©ß-ûâÖÅF h�FàÙèÀ³AÛ7�@#Ð<5Éû™�Ó>¤ßèZʾ+/"è­ù"õ�ˆÿ×Aòý~Òÿ”íOd²ÊÞ ¶&ýêË;†D‡pz¼±–ÌuÎAvtR䪻ò¥?4o$:Äß�Ù-©«úðµ?mî™ ÐÎ%ÀÏþùw—ïvÜ�ëøÜÍŸ;TÏñðî ô‘㣎U øÜP=ÇërÌïX�†èÔ¼ øåï ^Ëï„^d#ðŒtàÁí®�F ¸$êÕsÌëùyìø§ÚŸªÏšMEÖB+�›wÛUŸ7üÇÆ]ÿ�}äª.dâï`@ øª~É!ÿ.� ’yIs�Iº‰4¶a‡ì“LþݶÙx!á÷Tså4sÎù™ÿ!Ý–6Jó|eËGY…­Þ}!�ãíÿ!UN à“ú�ü; ºœî§Ì�ó0cG�Ìð9WãûsÊŒyhŒ—œË¡9´½h�FàùèÀócÜ#4�@#ðꜺøõ ž˜À©ùŸªO÷ø‘!o·”c㎯ïú™2’gýÙêŸíþ~±_Cîmý—?¤ÿ/µ­„ŸŸñ ±œóȯDšbkN’!öóNêä°£ãwrs‰ñ�„Ð+3Ÿ4_îGwÿ‡�UŽQ†|™Íùàçû5#õç]ÉúØ)p«œÇ0r ™#çQÆŽIýšŽÕ­¾§ÊOÙש±º¾h�FàzèÀõ»žy#Ð4g!1¸ætjþ§ê³vüLÖ†´.r$Ro¢ÙéG¯v‚Ø"‡îgü ¨ìíþC·]cr—ò_·™ç®sæx5Rë ån?wÿCþ­�º•üï•Gîˆ�µ,ò�¿G‚ðH†è�¼�8]ÎÀ€ ç}øÜ©ì·ük xl�ëyÕ‰^²®ùN/�ä ödŒÃß$Àž4Úº(�ž&ÙǹɄÙГíSüpß#×K]ú;&s,|žÈ‘]&ÿHÍ!wÿ Ìã7æO¿´ËÎÑiC—tª­�N|ÔqO¸vu#Ð4�À;D ïð ÷’�Fà} Rq­«=5ÿSõY÷ôƒ¨)‡ü; bžûAÖyŽßÛøyž_žã§Ì3ýBø!óèHÁϣحW©±sGò¹Ì6òÌõZdèyH?óÙ·­,ÄöQo?­}¦è’ź«®⟻ÿCæ1€BžÝ¸¶�ƒ�V˜CveäXÍ €Žå­Æþ�ü³æ¯Ì�Ñ1zdµ¡?&Õ>k?‡ìÕ§õF h�÷‰@ÞçqïU7�ÀGpÍéÔüOÕ³öÕD°åÎmˆ¿ÖOäŽ-ýy‘ßDøÿóõë òßCg[¿‰¿|#CòMøÕ7eG¤2w�=2ckž’9)_K2ñ×:äÞ�}ßåÇ®´¶¬ÏíSHÝ*G½}+‘ùé7Ù§N}¯ßÚ&c�!}~ÈÏçˆdÞPw°íÿ“r‚79~9†´M ½–™B-W�º§NÏÝÿSÏ·ûk�F x:ð28÷(�@#м\ø_s:5ÿ×CÈ í³ €7û'çå~Šøÿ[ù_É_¾Xg'„ÞÏñ�îòÐ'Á§ÿ�̸Œ?IãR¾–cVÉvvT)€½üÖ<×8|â;%•Ð2oòŸ]øP·æ9ÀÃ#õÉ1r G:2ï˜ä_¶zŒÝN¶Jþ«N}-oé›ñ~Paí£Ž»Öu¹h�Fà}"Ѐ÷yÜ{Õ�@#ðFà‚ÿšÓ©ù?¦~%ÿÙ@À[ûǶýs÷ÿ_Ÿ?ßü�È2�@øC­«œ@€‰½Ê9̵ê—Y.)¶bºxu�Øk�5�ºÍEÈw¦èÈèú¤Aîm‘îG"  ãCŠÜ•õÉq4¹WŸ!ÿ·²åx;0 ù"}Œ3wù¤œyQ>¥¯“­mÖºCåcmŽÕê¯í�@#Ð4o�¼ÝcÛ+»@r!øÐ©q!÷šé­Ïÿµñ}ì±=5ÿSõ¯y|OÍ­Öû[0¾ ÑóÍÀ¯ÚjÂïçõEäMø!þÑ%yÎÞõgÀØþ™ øÙp�— @æðØãx5í9ã80çÿ ¨¶¡ãG V>®£�PÿþIðCôÇ#±û|M�ú|ìù›y1'¶ÿ›èËøCzÈ$uÙÀZ|žÉÆÖ²ûMÝ�Ø’h›¹W�úZ®zÚž+OµÍøÇú;ÇçX{æðšéÔü/}~§°{ëó?uü.ŸSóëúFà%èÀK¢Ýc5�@#ðLœºø;UÿLÓ:Ùí±y­u¦"Ø+ÉJ9„ ùKd¿–Ñy>þtŸ¿ßЯ @l5àçþåó—꿌-þ�?H¿ÉŸ¤Ç‘|]Zsâçq“ðk„è{ƒÉg3mÙeÃ{^äb_ïú¼½Ý½` ¨Ñæ0÷5úœR#¤Ïˆ¿tÞü¯ýÞéñ‡¤²ÕóÀçkP&œ|^ÆVæhŸQŸõb#¥Œ?ô¤-[êŽÉÚïêw¬nõír#Ðìà{“ïmcÒ\¸¶#Öóm�F`AàÔEÈ©ú¥»+š×!»®¶v¤û€Ìsýyéž_È'òž­þ¼¨�ŸöƒøóF²Ÿû:wøÙúO À/\Bf�ô©Ìvñ÷–|‡¿,Ú䫜@À¤äØ·Òðߪ‚¶è‘b/­öZ®ú^£…Œ¹U}¬nË¿m�@#Ð4×�@®ÿö �Fà#8–NÕkûœu‡æµe� IöÝY‘ùUBôý6~z¿�‘!þ¼ÍŸ@딕 |†ô“°¤.ý2¶@ñ¸HeÏé9�ºð¾M¿Ç9hò?t¦íò©ùãŸ\É<:9äâ¿îP�}â{j¬3êù6íT&@Ð#ïzðÙ,eÏyyJB¶ñ 鎩.]�ŒOlµ|ªj9Y@IDATȆý>iíó>mÛ·h�FàzèÀõ»žy#мs ÇÒ©úcmŸ³nk^÷±q§ßwûµþz×ߤ_ä=[ûësþ•üCúËj—]–µL@cù§ßSàTòÒøœ˜]Jß�ú¤èÈdꪞ2òXÃô©wÈø˜@{òh7ÛäDçàJþëZø À¼ïÁ;A8FNÛœ ‘[CâòIŠ=íRŸò}åÚ_Ú²§¾e#Ð4�ÀÛE o÷ØöÊ�Fà #Âph‰§êµ{nûÖ¼îc×컯"æ?DæçîÖCÜGÎÏú…ÐswâÏsýäU÷�~ÙÙEà\õ1f¢ç!°Ž½çÆò5ûáöóîšÈ,£‡Ìž3A|“‡¿ûÁÞý�ÿuÀðÁï©RŽ'>é™ãívéÉ Ì€�êðÍš|ž zˆ÷!=ëpŒ_ÖVÛà·–Óö”¬}žòíúF Ø!À÷&ßË`²eK]ËFà’èÀ%�ž[#Ð4¬!«Ë©úÕÿ5Ë[s]m)›œ‰DÍ­ÿ”ù¿y÷òÏö}eþEþ)ß¿ÔÆ]9úWúSÿ(T‰>Æe¤Å”wÖ÷ñR\%z2(ÔºZFwž&É*ü†á ö¹û_Ÿý� Òo"[òèùÑ2ïµpÜÇü˜ã7åS¿àsUí�´Y׆=|Õå>S|bˆodìÇäÚ¾[¶c}t]#Ð4�ÀÛC oï˜öŠ�Fà #8–NÕkûÜuëÜÖ2㯶½²Ö¾Gþñ‡üð6ÿü¥úùY~•y±ÏôCö÷²ÚþgظëoÒò9æµ"¿–Ÿ¿‹è¿žÒ'éGu&ÿ‹ßÞÜk]*°2Q5YÍÝÉçþ¦âã/Éy–2wþ)å€ÜýwPhøržú\Ò­é#vùQÏš"Ýÿ°¡o%÷©Š§ îOÑÇÖÛÖ¼òý}/ëíu¾]:ðv�m¯ì¸ö ¨žÿ3œOØe.öÒå©¶©?vÄç!ãŸÛ&Ä(’vÑ‘ÌÁ9z¤ì¹Ûϳý5Cþ)³õÿÏBú!ÿµü§ê}Ç_Dßwý‡t@@:wwßs:µz{¬@Bÿ5t·A÷ùÃñ“]¢ï�[£�±Æ…6’è#s¾®;üb@ìñqËÇ0�šÙ �„Ý?¹Èù€Ö�>ƒ ¥ì>©Ó|Á!’¾£{-F ^«�êôß§’[c=UßOÑOÏï)P<ÜÇ¥ã{xæçÕ¼õõ�‡B{5;:ÐgB#Ð4€@.øï3•Sm¶ê«í¥.ˆ @N"?ŒBô›®:ßU±‚ôGÏ]þùr¿Aü¹óï€$wÿçÖÿè"þyéÛÿyÖÿ«ÆâŽîâfŠ-#Â�‡·Éë™|ˆ>ÇâËqµ”þqØyƒ>zÈñ/a.Ö«´Û�À’¶ƒÔ{Ù©›¿ =Ûÿ}Þß]ØÀÍŸìÃççè ý'óe è5˶·@eüÈàL|ž«lœÔW$CDGÖ´õÝŒoõÛ²ÕúÖ�Fày໺~ŸwÄî½x<x<†ÝC#Ð4�Bà¾Çü�Õ­“¬¾[„cõ?§\û\ý©#C«ŒŽ=Ûù}·_Ä�rô¿å_vK‘þH^ö7_ü'ÒÏŽ€YVÄ?Ù/ùc¼2Ÿu¾]A]@€ Cº9_�Ô›ì¢ KÈ>iꔇ=ä?„ß~:&hõQÒýCü¥‡üGÎÁê×L‡�L^�ú˜;FÌk%ÿ”½+@ëK €µ†ü§QÞ¡²Ã¥†è^Ï‘¹ƒgõYËGšvU#Ð4�@#°‡@öàèB#Ð4/‹ò÷I[þ[¶ûô‰ïSô±Ž9W6ÖH9wóù›eé}H¾‰~ѧm�}“øè‘òw @¤?�‚=I0Íò�ùÏ€9×uï¸\1A7áé¸Ä"ËyDv @BœláN¢)’&ÿêßä{ ¬äßåe.»ÿ9çé×üMäÕm‚&û*ûÜQ}Îaʬ5€ì‚p²ƒKp ™ß²±ì5­þµ®õF x9ò®#æûYm­7—Œ@.ùèôÜ�FàM#°^äZì!¿CöµŸÕï9/VBvêBe˜Ù„ ÂGVÙÛü¥s·Þµ‡ØsÈèlåO€ºÏ´Á†}HÒä?» ü¶k¬zçÿck¢Ì¡Ó>ës\ ÝJ�tk£Ì9å�°ô~0­YÇ ç]ú¶ÄŸ>h¯üqÿànÍø%8€Îd$Ÿ:eŽî›u(ííå @‡üs>EÎ €l9ÿé =xP&aKZëboÙ4�@#Ð<�<Ánß4�À¨û‡šóÙªÛ²mõ}®ßVÛûØBðÒ†q!GDÈ?Ä?ä?wÿ!úó9þ¡ðsýH{Hy¶›‰~é×äl-küÜùÏömˆÝõÊl߯¬XXÁÞ³A¸!ß…ˆ»Ì±Uf˾”ý@þ:¤ôµç«z€øÿ¢ýÈC:2Á“cúSö¸Ox¨27B ÑìØ h}œ_Ø|ž¡�\Ô;0æÈš™7²êçþûú�![4�@#Ð4{t`Ž.4�@#ðüp!,Ý·þ”ÿ±±ž£Î«k¬+eždˆRÈÿ”ÜÁW6Ùç'ûJöOøQ^äñ�„üóvîègW� c¬3K-xKÖy>&ר§1�¬ŽÉçN½É9v‘òy§^e߇ælç'� zȺûRyÊá—¾‘É´wôÂÁ&YfL|ž8ynY³d‚&û*ïIÍŸó)A€lÿϹ¾Jæ‹-󎙥P^SÚľ¶‰½e#Ð4�@#p �C§ë�F xb¶.ìë÷­?å_û~ =ó™ôED&:Òä[ѤI’Ûó@àEð¿òæþAþÿ£Ÿôãgü�d}ˆÿŸÊÑ# @6go± ¨«sŠþø\ËÆ²Ì"!ÜØEÊ Ti*®ãâÁ�¾ë/ò;ûÌñŠ”ÏÙ'¨�¾s÷Ÿ @Rúb.Ï‘2GúŽžw˜AÍ=äŸsÙ/2”Í>’ó\c�ô%ÉÜm/zlvÒÇ\_ -�FàbX¿¯3±žH#p&8¨v»<r�ô�6—´òžÿó�SørÑþÐTÛZW_î­Húž~GìöËDÊœèÏt¨’¢ªSŸ²dõ�öô{†œhŒ9Ôõ°ÊU†ìÏgô!ýÊؾÿEÄߤ?rÿþd€ü8�`@llíïô8&‚:?¢û8rÞ`+²uÈ:çç‘I$Ó¡ ä�ó‚ã´•i3 ´q_K™.f¢ß§L'ú3Ïä_ó÷ù¬6~ׄä7æ"ɼ $P¿ÔQF’¢GÚxäcËoËv¤‹ƒUôs,eÎÇ|ŽÕ=¶ý±¾Ÿ¢îÒçwj�×>ÿSëëúF x::ðtXvOÏŒ@ýçVõg¶»o…ÀÞEµ.°¹ó��çà÷dµI‡0¹m±Ëà¹ÌËôQÆ›¿� å©ã0Ê,ìS.:®§’Çb^Ã1kDú¤ÖPË%¶ùï½�¿”ÙþÿÛÖÿÜõ—DŸÌKý¼Æa.Ê�ž�I&ùdC¯ÛTeä©:wÊ� ï$ŽÏ¨§˜Þ«D7iÖ]þ�dÎSÚ«ÝæßûŒA‡/”Xß$ÿZ'Îï²s1åõ0¯‘™7ë¸eý%cO9zäÖR¨#ÑfKO›Z¿úo•Ó®e#Ð4�ÀûB ïëx_Õjs¡³Nú�}õër#ðÚpA^“ ’l?Efó"“©«-ú±DÛ¬™µÐ&庭Ÿ»£Éß-•œoì×Úöt}Êlÿß{é_Ê´™·ý³Ýß/óÓø�²NO‡€�-Ý…xrìU¬ä¿êøQÏ9âc1ÚÑ�øüÐñ¢Ž�@ž“‡ÖÖL€mþ!ÿ Rù¼®}V]}¼Xâ¼gÊ>Ÿ50wýùiIHþŽ¦Ë ù±–[­¿Ÿæ,ò}¢�zô5áCJ]Ú`«úCÊ´éÔ4�@#ð¾èÀû:ÞW¿Ú\]ýBzo�\´×…b›Ä_d—çÞ �£ÿed²”!ƒ ¤_SƒØDLšD8 ^Ö!öC7éÿôÉdÿ¢%r‚¼‘ͤ…v)…±¼ÖA®eé&Eš§·DYŽ�»ÿ~{ÿ�¼Ùߤ¿ØósHgÕ ­‰ÿ ÿ�®¼Íbi$;=:—||‘Cç±.¹¥c#ñ8$™s5ç eÎ.ÊHëò§Ùwÿ‘9o‘ÔUíÒ#Å—–Ìß ÌyNàVsâMÿ^ óÕ¹ŠíVõŸÁa~—ð—Oµ³ÊIÔKøÆç�¾Õ¾únÕ·­h�Fàm#Ѐ·}|ßÌêr‘slA¹˜:æÓu�ÀK P/â3žmº`ÏÝ|ÿÛ5ÿ’ÍAÉU§mÒ¤ …0ˆ ìÞ–.Ròï§A¦ üÊ·"û·üqó ™¶´ƒŒlŽú½2!d Ê� dÕ @øgÄ=eÈþ|‘ßÐý6ÿ¡SÏ–êøçÝ)gÛ?Ä?™°ÛÓòqÔs=eIÿaÛ 0²ê9KC]sþp×?ç,uUw@@í,Çyº<Æ~ÅÄœYÛ Hçœt óG*›ü«Î;ÊÚ9WƒÉª³4ê’r^¯¶ZÆ7ý¤Ýj;U_ÛµÞ4�@#ðöèÀÛ?Æïb…ëÑ»Xt/ò"ÈE{�\l&"!ø�ÿïÚâžüò¯r$õµ\ºê¯Cìt‘‡"ö�ý™UöVˆ•ôO�gZцýÉ~ê»ÄZLþå‹L ™;ÿóî½æï»÷CBöy‘ߟþ¢ÇFÀ»qª�Ø>Æû¡iÏ7¯cSy V×é!  ¦Î*‡ðç)GçQl io÷W�’$>çyF�òG{iÎ]ÎÇdÚŒvnüÊœÿ9ÿ¾3o2s’d�.Bþç¾oª#³Ö*«žº,1á“TmÑS—¾R>%ï몿®o�F ¸:pÇ©gy�õ"èˆkW5/Ž@½x‡´C¼yÞ?;Lþõ¶ûo"þ?$ W}ÔñHÀÁIù€ä;P¤*sçßï`êˆïŽ3íD¼ÖÔíÍ_m({ ’°ž¡û޽¾·ñkÎ~–¿HîþÿGkø²êÃÆ3þéËïFȫԩ_uÊkª¾k]—�×F Á®Ìc-ÇÞ²h�@�a÷Ð4ï.¬I&º°÷Öx‘uoõW9?ñç¤ÿ?ÿÙeéߥ'³ÝÂï·ÿiò/âü‘2âPb"lé÷Ïú!•‘G0€7ÿüçÍ ã@þ¥óÂ'eø@€rII.eˆ ¤ÝYþòó|¶©Êÿù"ÀRö¯¨ü—ÚàŽ;-®í/�@Ž�¥Žû”œkfB±er”9ɤ*¥û“QÙŸYíÌ@€Ê ùÛ8ôýJ‰•‘ù&2KÍ“ïÆ$ÿÒMüUòïGä—ÄNþnÔ\ Oô*i[I|ÕÓol‘±G²§¾e#Ð4�ÀÛG oÿ÷ �Fàà‚z¦qAñÏKþ¸»î€$[þ¹ëáÿö¯Ý|û÷¿o¾GJgÛó °E?Ûl"ÍIwT"I ¿Éû ÿ@æ)€ükgÁˆ[õùQ™çöysù‡¿ÿýŽø�~¸K™þ 8¼É"ï¬6µLàÛè�@Àüù¾¡;8 Èÿgeü½UZýË‚Z}BT«Dçü¶HÏ/~u²|/ò݈.IÀY¾œÃ&úÑSVØ/5q®²~¾û|'œTþAVÁ™:eïÐyžÝ`Âú)G§Ÿdúª¤{Ê©CÆŽNZË;ëîóX]õk½xmê¹Î\ÖòkϯÇoÞ x+G²×Ñ4/ŽÖ5™p±¯lâ/2œŸøó6ûñÿþÿþßÍ7e$ù'‘å™ÕOt¶ÿû*.ãÎ9@ša÷öâBâ)Cð!ÿ”ÙQÀÝ~~�™™”©ìÇÒY²F0áç'üÈŸåo9Ê&ôÒy$€_°,ºw ¨Ì� ¨“Z±œkjåUÁ·„쎬+òù(€õS³ã\]3m°)åÎÿ|  úç¢+8à¯üáï¸æ€¼ Çí&5É¿Šè!ýè\ç×X—å8ç9ï�eG†ðlI¹ØI=)ß›”c«ííX>2N1µÚ4�@#ðŽèÀ;:ؽÔF x:rá½×£.à}Ñ/òË.€�ÿo"ÜÖõœÿwv$ð?ÿsó�üßÿmùSõ&ã" Üí�©«ý½á(ìhÀÎìZ}“6" ?GÙwò¹ÃO@äŸÀ‚ß)À8é7=2à�y�€‚~ygwó¤ï´ñ#Øù%ò‹Æ…ìÿkɱ ¥ßè–Ã>õQš‘Ôwº,æ�~Î-Ω!Ñ�·¦›ï ’óIVÎWç¡ûüFWö¯ û«|))ç)g:³¢Ìœ9ç!þ hùîÿ({Œvâx€°`�|—�\¿/Ôc[¥º³ ™„ _ÒÚÎÆþh® �œû™öZ޽e#Ð< �< ·nÕ4ï�\lo-�:²@™—ì}ñççýøé¿/�^ô—¬@ÀÏ’‰üßÈ'‰ËyrÈ$õ»K}´ýrRåž/¤_Äþ'Y/ü-ó¸À8@�@�Ú±®¯"¾ë¯õEò(@tžëT$æQ}¼áÆÇοÍeŸÀ3çIÚRŽmïŽ?võeâçcRªì€ÕÐSÎyÌýžNYû^>6Î+Ö'¦à`€æ�$Wò?wè»ÁK½6é^¿°Éß ðAÇ~H2VRÎü;5ï�Sçz¾ï‹^c#ðX:ðX»}#мrñ½µ CÕnÒ<È?oôg»~òïëØöÿ“—ý)á÷Kÿ´C€gñ½õ_ëµ{&FUF‡0m¥P‘áÛž É�ä®lv+üdÎdÍ%$ÆR~SJÿ"²ñ—üøÞèÏKþü ’ç:Á&'�W×+ie2[åýÔ™ôç8"“·VÃ9 4ϹqN8 s$„?/üÃo‹ô»“ þ`•YcpbºèÉ!þïvü�q– 0áoHþŽ ówh•Œ‘DÝšµ�_êÏ-ǹ5^­o½h�FàzèÀõ«ži#м¹è®CåâüÛëŠHÿàî?‘ý¯zÞŸÌÿoÈ#p£ �ßÊ/RíŸáÓr-×Kþªg^ø² ™:$©ú™œ âámÙš+wüó“…ü*€·1«]¶3WÉ;þ‘ã§ÿü3Ò H€ü›èÉgÞ)–m3m�—M¿6Þ�ˆÏ~jýÔÇñ0ù—'öh¸À@¢ÍÆqÌ]drÎ ÎÏd¾g蜟–*‡d"k–ËÅ$°Éw*zp4nªùG†øך>LÀ&~¬ßm©—_ˆú*��ß-Ÿcu«ÿ–oŽËêÛåF h�ëD ×yÜzÖ�@#ðŠp‘¼&Ûd÷3öÚþÏ€lÿ' Òÿ…þI~Pùƒv|`»¿‚¼‘??ñròŸ;ÿ)CÖñ±s·ò�OõgÖö�°âˆ?äß¿T ^f6ßÔ/�»˜”ÙðYíxÖß?ù' Á�È8 _äf!µÛKªß"�{>]8�=¬7Z­õ.�c’:¤34uE÷ñÂ>ê6†™&ŽvÈ•ìrù¨ÇL ”Þñ‚ÄW2™Nªž2ò’X±Î*Ñù~9k­!øÞÀwe¬“]~'�Üð]áû@VBgý‡¤�†_t$mHiçÂÆÇZ¿–7š´©h�Fà�!Ѐ7v@{9�@#ð²p�”-õ~þ?oüáçÎÿW~êOò£v|ù·”O&Gê(d¿JHR‚ ¹»ä¿³àWÉÿ]ÍN3A Ù!ñóþìX`ÀðSßäáGÖÌ; ÿ_d'@]˜"F³>H u3U[ôYÙÊ}(ÈΦ[6*cÁ_m¾ë�ŸŽËôáQÆ9Ç+Ûš8ƹòo²¯óÅ.Õ"ÿ!±«\‡xí2Xä\�dNØù{`)}ÝþÏwåƒH¿¿ëø);x–6’ÇÈý[Œw+á{Êg«]Û�F hÞ>xûǸWØ4Oˆ@½¯:CPæyz?0Ùð•7ýë1€[ÙouçùAòF»ò€Jú·tÈ)rWÚ}bãÎã¡)1ñ‚(×ó' µ!„ÿ«|ö2„_ä>H‚�ã Iš„H$‘qvV*ƬñÛÒݺ?îƒÀÄv4Z˘W[ˆ}ì!ýñM™úªÏc–c·J:Pʹ™ @Î9“^Õ‡üúÎÿð§MÞ u�¸^*‰Ÿy®}½ûÁÏø¨ïÑO}�²;€ïޱæ{¡Dy+àÊi[ÝαmùÔ>Zo�F x[tàmÏ^M#м\D³ÀÏÔó@y;¾ðs |RÝ/¶ý+ÿ”~;€m‘þjƒ4­)„ {%U«eȉ‰™æé€îü3ß¼ðûí­·ÿó¬?wùkv0@ÄÅ�¨>’�RQÌ´A‡�‰$zdÕÝKœƒÀñ;ÏSe<ñ‰Ÿ¥ŽÁ´¡§º»¸#ÿ!°2_UšØiÖèü�ð3þ’¹ûñ÷  ù÷O†ÊŽÿìlÀ~H€ˆŽL:«´K›*׺Z®ú9ãÔ~[o�F ¸|:pùǨgø†xìÅf¯™®}þÏ�]=&ÖuŒ²€`À|)àØÀÛþ¹ð÷ó÷’z?Wø{wï!J¾3º!Yõ5Õ² ˆ*‘ô‘2¤}��€ ð ⫹}üôÉ;>Hú¥„š›u鑉¬LÒ'’Âù`RWt óàÄ\Ÿ#…ì>¶ïŠócûÚjrýÃÒ0çÞžM>3­þ£ÿ`²§CFñI»ªÓéh?û?¤ŒóÅçÍ”9÷ØÍRÏëZoýÜþ�ûÜöóKoí—Äß/ÓÔ÷è›Ê¼[ƒµà{¥Ì.^ˆ¸÷(€Úð�â¸æomôÈSK<×ïT?©Ïœµen¯™®}~§°»t|Ÿ{þ—~|O­¿ë�—D /‰v�Õ4W�Àƒ/¤ ʼèKW÷7tGýF" ÁþõÇ;r-ò=ÉûåÂ8ö•rdµGG¦>²ÚªîíÇ"þŸ”yYá߯\íC0‚@扄°0G9|ÒZرAZg½CGæßRí,±g�ÒPX¥ú )e.kJ¿à{,e¼c>×T7×=&�²¥ŽÝ^9 ï¢GµmÔklS[êi̱�™ðL®„¿ê©?¿×3e7ð ù‡ôßê¼÷û ò]Ð÷‰ÇoŒã§ ðýHö÷h”£G®ËÞDû”éñ]eÚa¯zígmÓåFà=#À÷„ïG§FàèÀ5µžs#Ð\6º0 à<¾›N @37ùáb�‹A¹ˆ¯ »»´¿#T§êÓÆc çèŒç€ˆþ'ÞAùc›è˜ùÄßDEý@büâ?ÉïjÇ Í¸³ÉE�eb¾(’=—F)ÛEs0Ádí$ùE®S!¦vÛyí_p¥­ê2–É c¸QÐ�¯Hd=LyêSìcý©OÙˬu§Å¾×VuÞåA`�sã)çÚ<ÏÕº³ú7V¿ê£âÕ'°„Ìóh A2§ ùÏyî¿ ún±ˆL°À€±z¾ä�‹ªûÜ~õ;³U¿UÞÇwmÛåF h�ëF ×}üzö�@#pi@°È(È2wÖÉš¯³.òu¥¿ ˆÐfÝ ÀÒâŸeR®©–ã‰ßž®ñàÑ£ëe‡Œ|$ð·¿ÝmSÆ_}@bØ®Ì? H?�ÙLþÕÖÁÕOB)Ö´WV½±Q�íª§âKÙsuÓWvæ›>Ýv´ÃNJ]”ÇÛU]ÍgÖ0×S°¡.DißH,:¦`_LÑ-1(¹_Ú+»Í¢ï¼Ž|æXÊ…ãás'R}ÍòÐsÌŽôxUU`É£6Þ ,&ù—-ÇÌ[ÿõ}ùD–Ï HÙgÑ[zÈþ)ò^ÛÒW§F h�F "ЀŠFë�@#ðîÈEöC€€Ðpqî»|‘c�ü$  }g€ø­c…U龇c쫞~â?0�ËËo´€ä;üØx€²Ÿÿsœä¦uø DúÝòïDz¤@pÐC¶�Ê`òƒ{l&ªÇIýCæg;°u´eœÚn×h|âGû’<Þû¾wixa*x»Š 6—‡´Ol¬!x ß,/}º¼´›ïyÀNûÑG|Ó‡å8FÕæs[0&Ïs(ú�þž Ÿk9šîñ$<ÀÚAI~)ƒºp²CþÿÐw†_È{ìKÊ `U=Ä~Ô 6Ú>4=E»Û5�@#м<xyÌ{ÄF x«„0IšÜ�»ÿ�ç¼ ¶þC¶M°ð˜“©Ãõ˜žº*Ñ;;fYs€üRpéGä;‰„‚O@óô3͈ŠüBvxË9/?t’ߎúìÈO%÷¬×ujO2ÉŒŽ�ú”¥g"7ä]‰^²Î=�¶£>~ÈÚÚÙ~!;Tvë QÇf;Ø�)=xÚwÔy)Ò7åh»«Ü}fúJN)WÿS:#×̹”Ÿ³DŸuý­$ŽK¾œ·$Û¤óX‰ŸÿûCß%“ìÊõ>Ïe«Ä¿ê+YÏw%öøîFëÏF x*òݬýmÙj}ë�À¥"ЀK=2=¯F xurq}¯‰@jt‘ÏÝðàÎ?ÏÖ#!þ!ÿñ Y[ 9š„©Ô§StÈFõ­ºýD,Üp·_’-ÿîúrÿ“æ8ŸùW¶0Soò¯¹ð‹ !(ª‡ì„ððNld¿ÅX×®dÓ¹§Hýèkú�2Ôä©J‹ÑŸû�NÃ$Ù2–ÛÄŽ¬þèe\|/)y c¾èε,|Öì5 ¿¹Þ”é§è³> §?tc×á{Ì?íŠÇš!û{YýÕ²}eK›ÒÕÕª`©Ïù¹ç;Å;HlýÿÛÈì˜ÕqއÀW�vÕN™Ò�N=©Ú(§ú9imO›ûöqÎ8íÓ4�@#ðztàõ°ï‘�FàÂÈEô£¦5ˆ“ƒc€ßù¯ê�-QÒJŽÖ:üb«¾Õlß�”„2„Dâó�çÿñ�¨Uâ¯À€`Î8BT$Lþå ùggeÒŽŠ ìüöl˜Á9HKü=ÙsW…rv@F�q´êq¨ß•vÕEŸ~«­Œ_ÛV·×Ò}l4¸¥ÖfŒ�'²ç+Ÿ£rW{‡_-Óv+Çç˜xâ ’MúÕgdìÈ·”8F~Ÿ�’è|Î[‚$îüÿ]ù›2Ûÿg`Ôó�¨„»–«�¾Ö2¶šNÕã[ Õk?èçôµ¶ér#ðÖÈÿ¦·¶®^ÏûC ïï˜÷Š�À± ¤GtûbMßûü¹ˆ}Ö$’ƾóÏs2wÕE¬oÿþ÷›e“ ÍcîÐÝx3;”!Ö´K}ˆet$ ‰¯eí³ê8Ž2*zú€¨ '»ÛÀÍõ‹Ï´aW_n£�Ìiöíš��6Ô׺Z>GgÞ-ËÒ÷Pwv|”Cšg›é´(ô·‘˜'i»vW÷ŸôïÌœÑY×’5MI0‰Äš�ÉZ·ó¼k“:úHŽÏ*W¬RF*{þÃÆ÷ÎY}ìÉÅ÷Ô÷3ç×:•K*³n¾ƒ…ªstøUîúçοe ü”Nà-xy÷ý üX0 kYîNØãÛ–<×o«íKÛÎYÏKÏ©Žwéó«sÝÒ¯}þ[kª¶·¾¾ºÖÖ�StàB]ß4�À=Ø#ÿÿÿú¯›ÛüãæÓ?ÿé­÷l©‡ ˜Tó ~ñ“|º¸‡8�y^)Õå ʤAõ¦î¶ê‡;ò?ŠŒN}ã™ü®`ÅÍõ‹æüEÁНšÿlšãÝýÿ¬Œüª5ðk‡>I!=Ñ‘� Ì³êÔÕ´×£>(�t»aKHû 9 +þ�á!½^Hee'õEriè¶ }ÖÙk·1¯QºY—-õØ÷|FÓß{ÚU`Ï<§.c Ó‡õŒµzýÃq°\ëì8>‚ 2ú!ߺÖè’�ÉdȬï€K;dúSÿ\Œ;6tο9’µRŽýeŽgýžƒO0ú¡¿|Oí§"yoçr0E’À®êØRF'm‘|¶ì»»>ŽÕǯe#ÐÜ!�ïcwî0iíòèÀ壞a#мùÇžá×2ö=dEìÞò?îü‘&p›€|üœ½Ñîþ‹üû"_}™À�ÁîhÐ0HŒ{¼6¬õ”Ý^ý›ðk¼˜oê²óœ?Äã YËß ûƒü ù—ü\‚�Fß!4;j"<Æt·Ê©.¿‹APhòŸÝ�ÞªÓ˜þLêU§á\É?ÇÂd™u£ÓHÉóÐX.Re{Ñ×:úO;w¢Ï“í¿¤øºŸb¯êZ7‰½œ¶tƈ}®w¬;åÙæ³Jb›ÎÅ–ºÈCþ؃W‘�LH-Çêç8u�eæn]’ï ™GR|JÙÅ¯”wÖ«øôZ—™r¼É|O'ù'e ›ô�v^7ëW×x$‰úØF“ƒ"~«\¤~µw¹hN#p�«N¯ª=Þ"x‹Gµ×Ô4¯‚ÿüÙÀ[ÿÙúË€øôå‹néÿØ‘ÉIþÙA¥­f�œ·†³�A‡L¢×ÆF~õù]ù‡æ’²ßÔÏXɪóØ£ìš/wÿ?#òÿE~ß”ØÛ qkª%èÊ¡2ö�Ùù„€¸ ¤gà‚]ŒÇ¾Ô%c«Ù`š£É¿¤ ³¤ôEŸLt�(T“T›\ƒiW?ÆŽo©�ëÉ|w�víæš˜Û©öá2>#Qç,›ç‰¿QŽ\mÆ�¾ðMйÚSFÆg•Õ'zðC<È @jSVÜùç=+¿oÙ<ë16:XøxÒæ”ñ/Xr\rN1oÖAò1E*'ù'PâÌŽ ‘ü·Lh/ŸÙX(Å›+õA›šð;”r\Õ·½hî¨ß¹X�}¿âÓ²¸$:pIG£çÒ4‡ÀÖ?{&yÐ.²™Ÿüó³ÿº£ù÷ˆ?A¤îü (~ä�ñ¸œ¯;°‘êeýÜ 9˜ôCþGþ.iâ�¶ZÆö�­þ�þ�ÿ`ûÿW|Ô7Äßb-�qI!m»ÒÝg�ã�u[s"/ÆW.!R&O�šŠSt$YóAúblØàðÝeÙ*1š}‡, i;í•ì�žº¡s·]°Â=eI°"CæSg›Êþõ 5áØ8c“îógH0ô $™z°+cÔ‹NŸœ?ž;k’ �º|_¼õ`5ªgݤŠ:»†|.Ž:t÷;$mR�NÝ¡´Õ¶ú¦¾ÚZo�ó8öÝ;¯‡öjž�”³~¼\®Äˆ±"ÑiW$ä ü�4é’uÏ1è›¶’NC†ÄïÙÕ§w„J’´%m%Ï“Jæ2ü£»Í¨Ë\"SGÙ™u-™~ÈÆ»ê£O×G¯rÕ·ÊØHô›TõØ�¯i¢\2¸8 ’ÿkd—ÕÀdVýBþ¹ûM`àV:ÇÎ.É9ée6s¸kP8†&èe²9Wù;kýþaà ÀX;í(#�—üÀ4çÛ!Y†ÚTÓn³²��@#Ð4ï�¼›CÝ m�‡"à y]€“ªþ[\À‹pò€úö~Bï“È?žù7ùÁv@Ä¢ªŽnñgF7AúmÐ;£>Òï$ÿDþªúùÒ¿ÿH­‰›”ç]Û¢ïй›Ë!í¡‹=ý¸ éQGµ®’(0sB®¹ ÿ*3oˆ*­ Cè¤Mâ�ßð§oûã«\çD{÷S|W›ÛŒz“wšØiHú§ŒLÆ':rœ#n6ì{kíS¿'k�+ô¡>¦cuiü\‘d°ÍãÆMÄÖÛþ5çªÉÿðÅožãÌAe’�Cƽ9æîõJ7Èd­a ¬Öl<6Ásö%{þUxð[ÓŽki{Ê-�Fà|¶¾kç·nÏFàùèÀócÜ#4�À@ ÙÇ–¥Úüîr*ÿRàwþõXÀ¯¿þºù%rýKäÔϫ낋’å2™‡æ€�êkïûŸë;I<ï�^mPöÿ‘#ÿER ‰Ñ83�ræ´µ†Ô�#iOßIµ¿Œ EÊ&õš„–c”ÌÓ¸Ž@€w BEçƒ ¹²$é`mñÃ>tšä`Nô�œé�¯Ú›LÉÑsBŽF–Ô/¶I©#Ü=•-é#zdlHö¤ª³¥î¾’õÌŒ›tc©óžÿñÜ?ë„üߪ.„—ó5%Ž)ÇÉAÚ3Õ_e�!ó’ »‰¿Ö–G‚ƒöÝ�i<,9öòw?ô±èóœ8ÉÅ)ã§IûÚ&ö–�@#p>ù�ߢ=�ËB —u[ÿ)€øççþøÉ¿džÿgû?$&i%´Øk}üNÍ;~‘[þô‹½JÈá^®D9ú�¾ƒN{Ú€­¤ÉÊÃÜÝ/¶sì[}d1E2wÒžT[ʶ¡/yo}ŒS3�¥½Êªãw(««mÀ¢¦àsÀÒJZ‚÷$¾Òçöw�O €šüë˜0 €ãó~̯öGŸkº¤¿�^/ÌÜ¥úØ"•˜/a’ŸFü¨µƒkŽDg�‘êfêÕ†ý5s8–.éølÍóÒç·5çj»öù×µ´Þ4Ï‹@žßîý™ètÏlwû(8/É\¼ßŠ0ߊTCþyþ™‹x´àçׯÎ?x€ ÁÕ{G¾ì�dÇu~iàð96Av°í?ÄŸ»þ?!þÊ–ƒèó²?g•£•É7á×ü#ýÒ?•³³€ñCü3—ß.ûYk*ñW®åRu/5ãx|ˆ­‘ÊÜ96Á¢<ôÔ!�"w¥ýyQÇ1 nèþ;#v÷5Öe²%·Ix¨'Å×êƒÕwxîÆÁ�vJ–·Î}oþÌ©f¥¼ê)#IøÕ´–kÝSè™×2Ž��úç»à¬sš ï`†`ÅîÿL¦ÎÅàéï†ì×öwŸcº ïãò¾kmþ@aáb0�Ä\èËR:8¬zlrÛK3ÚįÊ4Hý¹åøµl�F ¸.:p]ÇëÝ̵¦\ÈD®õ]n^ �\L3þÜ ’ý 2¯‹ï�"û?þñ�› „ü³=š o}ø�¿äC&Xð‹_ �ü©L ÀwE�,òÈËîÐø üÔ[ý`Ë?¤Ÿ»ýk†ôó5'àŸ\S�˜ÔYƒpÚ.=(~)×6è‡ì«_ú™dŸ±á·ºç�ù"“ÇüŒ7m×±ñËŠo]— )£þ ib5|çüw-÷ð£Žu͹oè^mG�»Yu‡Ï–Û}%ãdÍ´]Ë[ýenH%¯QÌoÈ¿·¾Ó¯2õ¢þî›õ»…ùÚëÙ­üníØBþ½@ëŽe‹þþ1dˆ:²ê[ÿÓNM�%rMécµo•ïã»Õ¾m�@#Ð4¯�@^ÿô î�ÀÖÎ=š·k#ð¬p~rñžñOºûî xÕAà?RÏ }—\è{b üRpàFÙ’» ì€<É/DâÐ"Ø�@Èÿ¯q÷ŸG Øæ?É¿|yÖßyèìøª± ý¾ Ywßƹ*M¼̻¢ôC ìÇÒ\»úÏ�äÍ @ê™ÇÈ{}c[Òœušoð®2DŠÖS—ïì›v£Î#Œ:ã¿øØs÷‘¾Ü6óE–@FÖ1%ÎYÇhãÞb«õ«nÇñQý«}ÕǼWóYåÌ9pÈp^(é-ïô¯z° ÎHŽvàG8›q•¼¶TçŽnb¯õ±þï`­#cg7˜Ôœÿ�ØV)v–�Ún©rq­_Ë8mÙ¶új[#Ð4�Àe"ЀË<.=«�À± ™$|¹0éÔ¼[ç6Þp+r�í»ÌÇv¾�mÿ~! Ê¾˜õ ø…€_z7À�tîh›ÉÏ.ú�,ÎwÀ5¶ƒØ�@‚Ê< ÀÏȳý~ÉŸl<÷O²Ï¶ìHt2J+ù÷�ìAR²ÆCmWûÖùf'Û_s26’ ø1€Aœcó<†/þ|7zIó/‡ì ^Ø7~£�ýÆqØÒÝeÆ�Ìߤ½@@Æ¥¾ô_ç=Òs�/²êô·–«mÕ)ß'¥oÖ…žõë¿´ÃO:x9«½É?æÑ'ët�$ßgÎ9ÕÃáGWט²v°c­¹»Ÿ @XïþÇ/k ŸÀkÑÁŒd¼FƒØFqŠô1 ÷TÛþžÃµ{#Ð4�À"Ѐ'³»z=]ä¼ÞŒzäw‰ÄE¤Å/iÿiQŠÍd‡íüåîjgÒϯ<Yr°@íØ1àþüùû;œiO� ;DþyÑà ²Ÿþñ†2wÿMö‘êž»þ.KGîV³wG5îæ�2k„àLb§2u´�OÕS—ž¶Ê©‹4Yd>É�~r)›|ª°YOûQçõW[ÑÝ¿ŒƒaŒeºòÔS?|â»'S_$©Úw–ß?«Oæù»×Ã,ô�<ÖÌY >Üå&±N´×�¶Ãû¸ÒΞ×ÿáu²Ve“{­Ý»´V¾cþ…„�M‚à’ 6ÇôõaÅ}«þ”m«Gâ��ºN�@#Ð4—‹@.÷ØôÌ ëJ©ú킦ֵÞ<œ�¹°NÿØ’}OÜć€YÛR£ q.î!ÿü,½5p€¼« Iâ€~ È?/DOr_) i²ñùv�g@ýç…Ÿ¥CþÿFàçÇ,¥OÉš�TšR6“ÕØða]’NÒiw*Ñ_¼Ò÷ZSl&�è#3çì£u¥ÎãªÞÇãÐ$¨'ežµ<ôÌ%>u¾{mÕGÎ�H¿ÔÕq°§»Æbž+ãÖ<êç:Ƽ~+ǙߔÉêWçUýñYëê:Òdžô±S_œÿI~†‚lœ7~^çþ­p0IŽã•˺v¾ß~¬Fk&ØF&`˜G¼n•‘œK5ƒQÊè$ʱ۠�ÔÕúU�oÚ§|®|h»sûo¿F h�§G O�i÷ø‚Ô œ¶‡j"™ç’ÜÄ2‰¹¾¡ñº$õkõTÿÒ. ù3ù—/ü1È?o÷71,#ï.ý‹òܰý?Y€ïdõïgüå÷Eú HgcsQo)=s yñw²1†EV?Ê&胬ØV|¥î¥Ôc\ul©NùÜ|ÍÛD•øŒL}Ú¸!£�YŽ‚]ë›iËoÔ¯éî¶i/ ³¿-=ã¥�Ö‘yïIFÀ7ó9%3£ø¥|YÛ2?Ê™ç¹ýÐfdðò¹Up Ìsï!ºœ/˜é{òƒ €êö0ÑÕôA©ÎåAt£F h�C /uÔ4—Ž@.Œï3ϵ Ô â ±±D§C¤r^¸þD õüü„€íìÜýûÁKü”èÎýOøŸ¼@Pýþ–†�;ÿ7�}=ïá¿’2ö�ôEßÊó®¸tÏKò‹:†€@ÂòVòè<Ž@Ú}Ú½v•ö0P_ôϼóH€ñp«�/êQmåÜ��ôJ!y?}�%~béŸO¤¼&µ³ïjÊòXûì²–W'lÇRêIÚ¦.ý¬åØ·|ÁdµÇ¶«¹û¬vôšï¼î4̓޽BùŽ‘Lv9:”÷òð±�¾GZImì× ³ÎãJþÙé o·Éýîù<‡%çïNì)ƒÁªc«˜¡û;9ì[zÚ¤n«ŒíÜTû9·Mû½/8Grž²òµü¾ÐèÕ6Ï‹@žßî½h® �G_tè"f’ÖNyHîºßŠØó‚¾[‘q¶û悇qo•'ù—�Ê�g÷!ÿÿëÝü€I…t!Ÿä~Øú/òÍ�UÿHŸj`ò?æÄÜØ±@ðAûn¾iN_•¿©ožÅþ*iò/�ƘÒkr Cvê©™eüd7ñ—žmk{:ý—z×ÑV¶�x±f¯›6š+ór `�¿[ûÐÎ)rWÚþ<Çg»åyVúk5žÑ×Öø%¯u[åuÞµ\õµíV]æ”:Êè±ÓzÍk¿eŽ�û)uœ—>7‹Äoã¡K¨éî8Rû5$Ö”µzë¿ÖÀw�ï �Bð€½w c&=xdíkY.öAÖ¿eÁ)íâ;eR­?§ìF'>Ö1N¸wu#Ð4�À3#Ѐg¸»o�wˆ€.æMQt1o2ˆC*¡@IDAT �På¹bªzȨÞ/,äßwþµ�ÿ§~ð¿0ÚDÒ>ºßÀ3ÿ .äÙÿ›è’B$<®úâÎ+ñø¢yñ¾È¿&fòQ!™\Ë–D_³„]í½Þ!)³¶Ì¯èc¶Å/�Ê?züSö|äǸ!‹ôí—È1þ˜³»–.™~*Ö’>’Ôï^ªu{÷(ÐÇV¿ØÒ?²æÚ}õÁ~¨œ6©¯¾[u±U¿:§Ì™þ¢×6è±#“«ÏÒvA×žØæq¥ËšÓ§úá˜ûH¥Oä$¯Gsç;â»ÿÒÙ‘Ã�Îu¾ƒþõ IêÁbÝ�ï“Ï{pkOYMöl)Si nµ\u7ê�Fà…Èù�áÖrì-�FàqtàqøuëF xƒÜ÷¢#þ‘]`WjâçîEÂo¹SŸ òàîü§‘øŸÚ¶ÿóË—]Ö/ ûWÔΗòU޾Ì2F²È??1øMóI[wÉl?æŸÁ"мŸÀï0�/B‚¯×6Ö³£s•Vbc½¾Óž6’!ª!ôµ¥mê—äOÚ Æ´�>¬hþc^XŒ¡ê,5w{…ðã/}nÿ'8@�czŽ.ùãÛ£ÌáH‹óªè—þVy^ëó¼êÜéôTëÒsæF9zÖ_}°%ÇwõÃ^Öéc„I~ÑÝTy4…ã™LÿÑ}œi«Ìñ³e‰«H¬ÙÄ^Ò;$Á‚s�ïáÊy gï}‡ü�©¸Ä è$üªŽíP™:ÒÚ&þk���|ÔvGܺªh�FàèÀ ‚ÝC5�ÀÛGàØov@jH)gW€·üCþÙ¾¯íþ<óOŽN ý´ÿM炟»ü�#C|ÑyÄ€»âîðC8¸ÛÏ�“êðÑ8&ÿ²sw’ sÞ"ͬdG3PÊÝþèô7ãî%ʪŸ*?Û(Ó ø0z™™>ÈšûLeÌÀºî` _ú8˜èƒ~Iµ?lµ¼ó¸û\ÛÕ>¢ßyïk´]ó¾ÇÝØ™Ã*ñ�í!z/k­²ÖG§>z•»ÒÞg%ðñ¥ÕV®õh}>/2¯½ž/»�õqgŸ»ÿ|·8çYß5ÿ€¤wH®;ò�Ï÷$e$6$é˜n}¤Í¡rì-�—D ž»Œ»–_r.=V#ðVèÀ[=²½®F x§.:NÕ38>5ùκˆ¸­\ôKŸä_–Ÿýc›?ò'ÛýW)_àë"i21tveˆ.D€±‹N™-ÆÜ7ù—¼Uÿ ÿdÊš´ïÄBD $¼0�P·£2–„m®”qÇ\ð¯i/ Ÿ½z•ƒWü\Æ^ú÷š3�1ŽÐZg�þµ&§Q¦ã7æ8�!åa³t$‰¾¢o•ítæGí;ýFnu�òVýj«óÜÒOÙ2—Cr?29eWŒÆ¾£Å¬¥Ì±È�q$6gµÉ¹N{Ò�ÚøQ®ëš=_–’5Õuò=K" ÷ÛÝUüŒ8ŒœïLê�9¯S‡oÕñ!ņŸÈjC_Sõ[ëR®ýÇÖ²h�FàõèÀ냞A#м¸Øå¢˜” ßß.’ED Pï;Òòç{øAb­S>¤ãw,kìÝ Qå^:øQ$ßI¶ûÿ¡ÌKÿþ&™—šükœ/ÊìàÑÈ´ƒ ,p#e\W c!ööQ¿3¡�6öŸQo¬ª¯êÒÒRu–š_ú˜ý®�ú-í§_UT/�w}eÜj‹o|R~ˆ¬ý¦?l‡RêNIÚǧêÇlµ.ãgNU¦‰=½æ]ÍþgC¾£õ® }ò€6²Iïð± ]Ùè¨l!ÿ ¨| )kc}lñ÷qbmZ:ïP™º­Gêß–õoë÷ù­¶‘Õ™D¤ôû*�}=~«C—�'D ž¿t»–Ÿp¨îªx—tà]ö^t#ð>8ç"÷±ÈÔ •è¿�;¾¨–ž y¶GGÎàÀb¯>§tÖßÉÑg‹¿?`ÊÞ ©R†€ðæ2€¿+ÿM>äßîDÒ7(EîJÛŸçú¬˜vÓÆ«î† ©žÈ¤Uî¬çfç·¸óLÛ-YmÑïZîæ{ÖPë«~ª¾ú®ú:Æè ô|^©l©ãÇ9Æ1Mæ—š|¼«áuÖ•ÌzHNi]~î_ë5Ù×Ú¾kÍd^Þù�:ò%ÓÞìäOû|×ÁÀçý=R&§-œjœ(§Ý–ÿ®§þl�F ¸F:p�G­çÜ4‰@.˜·&·UwÎ…uîôÕ@@úÊEÿ*3þêç»ý�9„øâóAä‚Gü—ê'ù—ò û¤zÊÉÜ¡ôÝJõGý½’ú‚¼ÌTËèJ“„HßYlþ�¨»—Ñ|Ývôï_ ^yb.�vîw´ &ø‘jygٷى�á�êqQHßs«ëÜÕì–öû£T뫾é¼ã_%úVy�çZ^º~Òâ˜x�¡±“ôã0ªãŽù ˆ›ú‹˜Ç0óÍÚžt‚�ïÌkc}Êþ¾”y²fŸ"!ÿªw©L޶�'•Y»¿ÃÃdì†Íç"mÔç<ï¿Qœõ[¾ñ¹¯|ʾî;vû7�@#ÐF ‡±éšF x‡p¡Ì…kÒ}Ë´K›U¦.}ßç9�ÚÔù¥¯ÈŒ¿Z†T±`5¢žÌrHÖ7Õûο¤É¿| +ôÇ£ßäÇãöƒ€Q¯ì»�.ÝãCã1§™FKH�uÆ�>#M‚C‘ö}×gË3mgO£O�=õ’ÕN›9îðõ°ÃÏwsñÁ¨ñí_׈=í"©�NýV:U¿¶©þÑ‘5Ó¦–ÑÇ1Ýën�ÿZÆy˶×Éù°óù;ÎÉ�ÝçªäÏ4n°†¹£~þˆ/ï™5ò�KÊ€ÝÐwÎïä�SîþÏuª­ñ{pÇú*3’º5¥Íjïr#Ð4�ÀÛB oëxöj�Fà‚È9SÌøc.ºÓ}ÔœþcKrw«_Ðàδ'°ùgÛ1Ä6?¬†�ÿ¼‹"ýE>ür€ß' ¶Ôùíå ò�Ä\qqsÊJ¤I¦e ]1Ù>väCeÛÑG_ñÇd}ŒvîûH380ú5ÎîHôC—i¿JŽnø�cáÿ]ÉýEõq™…ÊÚOÜ«}Õ)×L›µ¬c:ƒuÎÑ3ÎC$c�Ó�|rî"shâ|åœsP‡¹â«~s®°ãÏ8Œwa‰¹�3aÎ2ç|çLüµFï�$�¹´¥ k^ß’¿ [r Šy^ªr~?Ôom¿Õî\ý§ßsÛ´_#Ð4�Àó"ЀçÅ·{o�+D ¿™ú}Êñ=&é·^W=c®2ýá[ó1¿µ ä Â-¢Ž»�Þ ùƒ:Éz÷"òO;Hw!‘$êxl‚Bø<(Ñ6©ô1‰¸ê6{V»-;½�)wƒ÷l®(cÚSmÆ<Ürôm é'c °rrε·RÞ5ØøL_TU}Ãõ,Sí=ym<Žù¬Ï\ÓÛÚv«|Ì7}¥ï´/mÀ}fÙ9†œcÿdšÕÝ0>¾øª_ú“N?9ö´¹¤ÄÜ’¼^Í™¹ó]r@e?fC@öº€ó�œ;ì„Èú3Ÿ«’ú5á[SÚW[ë�@#Ð4o �¼­ãÙ«i� D`½ gŠÕFùÐ…wü¨?”ªOúA®ºûÄrD$‚ÒO Ä_N7m�nRÚîJûŸ‡ê¶ì[¶Cýã{*ë8ÛÌã‹~nÚò¥Ÿ-ûÖ<å†úÛØ›†|Œ¯ü'ÎKÒ¸3.¶ IAÒssbväJþýÝ€ù2NüôHç%ÞÛá�Î)úó¹ÇºÁcCÊåhJ;œéG;8PYû:àÒæF h�D /vÕ4׃@. 3ãû–iWÛDG’rQiãò‘6‹yöKÛäø¤Mdú�_“·CjšÄÃ[®%U¹Û.²A€¶$îÆò¼2Á‘g¥X3Æ>;i^sNUO}šD©ÞØIRŽ.eGâÓ®Êè£o·+ºUÍ�>ÄØv2�*—ööß²¹âôqŸL×ÕŸ9JÇêµ9Þ}^Ê?7Aº˜ç¶°$P_Ž7:õ>w‘˜æÇÜ2K¾“ Àñò?våø%€òóŽIÖfò¯ú[Õ'HºIYÿ–´Ã‘ãv¤þ1U™Ïcúè¶�@#Ð4Oƒ@žÇî¥8 �Ç^`å"ï¬ÁžÁé­Ïÿ¾ø‚Gm“r$‡`KÇö�”¾ê˜é§ÖE§.z$mÓ>ú,ËÂñ7ȇüj À3Ö¼~ÿ>®Œ÷ðBÀ?äÏ/˜ŒŒ …äPœú×=ºP}–™±’vgÈ.°ÆwÈ;Ô‘ÉÿðS€¬×;qX¿2~¼c+À<æ÷Z>¤sæ—6ñ¥¼¥Ó_­Û*c«)}WÛ1=ãó¹OÝ©þî;¿ûŒ}Žï©ù�êã½Ïÿ~¯�Ï©ã×õ�ÀK"Ѐ—D»Çj�«F€ Œõ"bµ¥É‚·ôضd@b,ê�¥´Ï¼R¦MôÈjKßÈdH/ ü$rñ‡ìŒô«ÎL°òÌžKæÎä7µã×ð�j@Ú�î·”¥^|í²è!”¬,µ0¯ÕòÀŠÒ6Õ.�vµî`o¦Œ±Yy¦‘>Ž¥qÌ8nbØ»uaK¦ý±œ¾ã“2²Ž]õ곡3cÎ2»L@Ç©Û47“ÿQÏ]ó™µûk=n3$Ç,v5sªõR>¦»á |p~Í›ï`ÞÀw�µBú±'@çï™Ê9¯ŽÉSÓ÷ù=œÒOm³Ú¶Êø×~jûÖ�·‚ç8ç§ÿÏÞ¹h·­3KÚ¹'ûœ™÷ÎY3çß¹O}%Ò‚IIŽíD¶kAÝh4nEÊf5AªxŠtà)µžs#Ðü¶þÁïÙ˜P.⃌}ÕsáiÇÑG|cÛ“'õµ}•¹ê&V"QoxOý¯Ž}AYu@väã€HAú y39‘?’„}ögËuøQ ÍŸ#ȼÐ"a7ìK{$xfœi§Ï1Æ­î·ì{63 Ÿs ÒOÂ7[ôUV_7m£_*K¿Ì’œs(ºŠ=dŸ_­à|uV¶ËÆùΪW9SYêé»úR6nêÓß0ºëù#ëH¾µ‘Î{ þ ünà’éó=&±~ÒV9u©¯å=öN�@#Ð4�üýcÐ3h�'†€‰Á¸H®S¯öszꑤ�ñÚß)=íãSËÑW‰ïj˸H¶RCþ½¥XzîNÓEÙw#å;‰¿Hבÿ/ÔK†´@\Ð!S!2=©r΂X‰Ö9´ª�ƒ&sÑ׺´9"ÿ8% ÌR¼·¬ý�¹nö™:H?™2¹ê±UIg)GÏØ“¢Ç72õCÒ‚ ¶±qNùùw¤°Ÿä_:Ç&6ÎWŽAHÿ‘uñ±¬6éùN¨ 'ú:(S‹åÁeÖÊw0ä?’G þ¼wãÖ€1æžùoÉu¬¿¦´‰­–÷t|kÝVÛØZ6�@#Ðü}:ð÷�AÏ h®.�¹¸]S.œ×ºê_}V½^0W�qÖò:öZ^ÇLû-yÒ¦ŽM0ÈŠM¤DìyáX<ûïçÿEHØúÿEo&'i!@«ëåÙl-j�öÕ–Ysf[ƒž°ÖA�×—5�[_!YÁ×rúIî¸?�F hþ:øë‡ 'Ð4O�zq»uÑÌÚrá\õ´«ÍU&[¶ÔÕþªžñVyʇqüˆÄÁñ@” ÿ"øo%!?ÙúŸäÿƒêØÀã�/SúQ ä1Õ`�ëM¬!óeþNZZÖ›ØÒ¡~ÔÍ’üÝO©Ãõ˜NÿÙˆBj{qŠ•kãÔaG'U²_uê·2mÒ6²ÚÐ/LàÂ,rÞЯ‰¿Ö Ùgõ>¿Ð±)[Êžr%ÿÔ³«ÅÁü‹c`�DÏKý>ù%ÕÏã.ý±’1`.Z£wÑh ¾s�ÿo²Cþ½ËF²Û™ï}γ*3o|öRüSª|ªn¯}ì-�§„@¾WuÎ[¶Zßz#p­tàZ�LÏ«h®�KÿÉ碚‹bRmWë¶ôu±ë…u­¯ýÆÛ9™~·$„ ¤‰OBÅGÈ?Ï\cçŽÿ¼ë¯�_Ȫÿ<|B+LäÔŸ·mg’OLf-LÛGTë©6ð˜äw]Û^ç†êÒŸÛã{*�6v©ú^›øT¹ç‹½ú¡ß…øãŸ>ªvHý‘MeúuÖ9K��ãð3ùç:º� >ÌIªúÁò`ŸY?ó6ÑWÏXK¶ÿß'�‰æoTÊù»A�ŸZ>§§]üÜQ4�@#Ð\¸ªÃÑ“i�kE€ Ú\Ÿ›cõÍ…pÚÖrtú£>íªýÔXÕm¿U¦¯Smr§ˆ‘g\dÈw)2ù—îmÿlýWà³òù³€d#é»·¬Kú NT?É´9ˆ`IøØcÝÓc`cwÚ‘e›õ¥Ÿ#uøÙîR =iÌiÊô[%~gl‘è5ã“ò–ۖĶ¦Ú—ê8oMüñ£Nóžç¥L`ì @ô"}Ϊ ù'ð„t`èôë`€¤ic™ôËæ±ä럔dÚ0�[ßÉ17¹=XâH%û;§2wýý¨ºŽÉ.ù³0~Ì{Ì9å|ïq»µÙâ?ºÙ-W¿=�>jÝV9ã´lžõ{ô”æÝsmV:°"ÒåFà[N'ܯ®ªç¿Cr?.z“Ö …­2¾i“ú*Ó×CÉÚw.ЫdˆÄ¢d"‰ÏÙ!ôïÙòOþöíæcvH~}ûÖä…ß)yü!ý»ÚA\Bâj-�Ñäò>)G?k�D–Nsn Át d’‰mا_&"ß‹Sú :)íS>XöÕFù’LñKk_±ïɵýâçïs—_H8k 0³D/™ó_Úrþ")ˆî€ÎÉŸ:' ©èÜiÇ÷>ôƒ®ö*¤ê�dcìèH#^í‡ÚÃ'}\�˜/ß3²wÏhÜìà±~ž3�$;sÈ?ô�´¿æMòzå;qú\ó”/õ€¸Õ¯�ü­ˆ%å*©3VcmU_ëRFî%ã¼Wy�ý¾í/â¤Ëßÿää.¨|êó?·Äç¾¾sëïúF "ЀŠFë�@#ÐÜ.0¸N:WƯúD�¬õ±�’÷·%ò#u1•DÄ�QxÏþ�"ì� ñÈÀkÙéÇÛ˜¥¿•ý«rˆqæ÷ ©Xž™Ì¹®5aONÝZ®þèµ/tÚ­2~éóTyí_öÔEß’ïcÿ´ß“µŸ´?'³–Hü¥ï�;Ø9ïn‰�G[�œÓ�úœß”ý“‚jã €ê,9�cCÒŽ~GvÏ)«Žï¥“ä¬Ã°–«mèˆ$wf@:ý‘™wÁy§ï•ß  þ-G=�:æÉ|ø¾ZRvläúÓ¿ÜáµI®)kbO9{t$)ÿj9ºú£xf¬ß�g¶¼^Î3E ÏôÀö²�Fà:ÈÅB�].�s-Ÿè«¬í£Ç'å*3î9 �€š$ ÉÝR»ø™ÀwÊ>*òŸ±MþErG’-Ëܹ4ÉP!nÈeøecŒ§žXSÖ8u­®UzH!˜�µw@ (ï¥A°ìß-IûôSÛ`¯åª§.í�—fÚî¥ÚߞϞ=ó£>ú� t„gúPýáLýÕÆ;T¤ ç í8·s>º›ÚcÏûæ ±)XðwµHK•I·ê†�9¸îàôëxS��$æHù§®f¿Psç;å]ú^~+�ÖÅ8ä¬ë{ ùSÈ¿ ẽïþ’hGò¹*IyÕW[ükÛèÔ]šò7åRÿök® �ß9ç¯iþ=—ç�@ž÷ñíÕ5�ÀF ^ 3ôZÞ³U{m½J|ëâ …nR�¹ðKȤ`€É¿ì&’Z¬Tþv¸ó/=¿@;~¿}ÝàuðñÌ IÖÁ*xaL=i¯-ÓæœL£øm•©#eœ”OIê’­�?×¶µ6uÕ¶êød>ÔmèÌúOùŒ•¸·Üý§€=™sšó™sÐäI¹Ø Ð&ú£Ž6”Éœã!ÕÌ‹ï£%¤¹–«®ºIþã¯~°‘ò�v{[ŽçË# lëÏz™/Á4ïºQ&ÿ²Í|OÇø´É|c ù' Çw2ä?ógý{ÉëU¥¿ë’™{•´­—ötü:5O�œóuþù~T[ë�À5#Ѐk>:=·F x¶ä‚!ÔYh..jýž�6õ";}ÜWB4LœD&è?Ù‘ÿw"ìøÎsÿ�e‡ç©6�ÈÿÙ¿È÷­ò$[£o‰IÜBp°=—”5EÎu�¸Êà;ÿà§2ZÆ‘òšð;—Ò.¾w)ã{*×±·üÖzÊ?úV»ØjûèY媫¸��[AÜ!Ù9�)ƒÜ<5Çü×€çx²ûQ™s›‰;íÈ!þƒtó½í£ÎÇXm�ÔIù•Ç|˜¿ë%Á‰þ±Aü™/ß#'ê¤@è}ç_’Gjæ# º±+‚O;Ï#R~±Qÿs|g'vÔóý”L`Âcžø¨k›”iIJýª»ò‚�Úþ÷viþ*9ïÿê$zðFà:pHíÒ4�À]ÈEpÚ¬åØ‘õ‚�‹ÝØV=~õ‚øýÔØl냋wæÂŽꙕ •ÊyÀ��Õá¹Òbä_~Ü©„üÿ+Òá-Õª !õ¦IFªñ)êZó^:СŽÁ¼nékøÔÄi·%ã¿SeêÒ?þ™ÿ–Lý*ÓdÚRŽŸ»Jæ˜yÒ­rPá¼DÇ;娢#!ô$Û4§Y7tÎOÿì¥Ê¼À’ï—óЩ‡ø;3®tl£ì:ù[ª½É$kÀWýd®‘YŸÇS½çJ»áK™;ôuÀWÙ´å—¾�¾½.ÆR²ŽTÙõÁ³»2�þ ÙKù;rJÒ–¾«Oµ­:åN�@#Ð4�üyÌ{ÄF h6È…3•è¤\P¯º+ïø‘þ÷$Ý¥*à¬yäNuÞà_ÉÑäL0 F¼è�¶yæÿ³êÞˇ—•QgòÄ%íÓ�âô TŽdÖj,…‡„ INJ=åj§ÿ=dÚ¦¿”·|°‘ðÙÊk��‹Êñ«å=Ûês®œuÈ/hUlÓœº�ð$ÀÔ…àÖ:ÛG›Ý*œßH¶Êûý’¼ÔÒýB”/ÉêƒñœCÌ%éÇÇ�qýQv„¨ ÙϱcLæ…7™À|€Ê `ãN>ýÕõU�@úå»ê,vÆH`@]Ì„)‡NIüð_}°×”új;¥ßÕÿT_]×4�@# k¶¡h�FàáÈ…pz^˱¯²^pSWËѱ׋âªS÷»©Î1:}û.«$ÏB³à'/ƒp¨ÌÝCþ»AØöÿYDä£òäûN9;BF˜_%ièÏ)±Î¬/kóÚ–Ænè3  ²8FÇ0p=TꓺølIã“Fk9>©Ïø‘k}lU¦>¾{娑¤µ�ƒõô'sKŽgæK—± ™²ñ^ê°YsÉ1‰wÿ¹óÿVA+Iö!9ÿ'ù×w`ê:Ç_�2dÚvÊã@ó3‚¤êIs.ZK¾¿™;’í’ðg¾~@rd·Mýf¬¹öÑFînKÏIcòýfž¯5OïvкùE€šò7`Ë–º*ñ›ka캶QN_ñKùœ¼«ÿ¹þº¾¸9··úp m«¢m�À!Ѐ+:=•ÇG€?ÚO9õü÷èÝ_.RO¥sý×öø®eúŽ-}QŽžúSåSóÛ«ã[ÃÊ û�Æ< Œ:žYþ$"ñ¯™_ à§?Šd|T;~zÌ»ä‡Ä?w;‘§Ñ“ÃLÁ®N=6H�×Ì1”ƒŸÁ–>¯j™ŠØödõ‰Ž¬ýж¦ÔU‰^³ŽëQ¹únõ…­úD¾“§œ9!•�ElÃ'¢ Ó-yËGãO[æ"i$J™—UBˆù‹)Ñ•ñ�¤Ÿ¶:§gV™ o¥ÇžòêG�Ö5Û�+6IÛñ×8|Bú§”�gÿýü¿tÞPß`ú>Úƒ}0¶T™ïì«÷ïo^½{gy#ÝYåŸÒßèûJ@€¹yW@ô!=gæÎÜ$9Nž3úH”ó7iOÆ7õ{åØ/•ôw*yÎ'ÎÕŸhzUO}þWbO¢x!tà…èç¸Ìþg÷�êóZç蹋ҺâÕ-ã»Ú.)Ó.óˆÿ)‰ÿV¢ AÈ�_Š&bP/¹Ùòÿ^$âƒÈÒ'ev|‘ä­åüÖ:;¼}YêGRƒ1¿Ú×ÖøOÕ=ÊÚ¢Cʰ�iˆšï6 [’ý+¡‘Ÿ@rÝÉ�ê·êi¸Õ¾$ê’uÌ<§ZFÇÛ*×>jY:ke¤1Úaý¥, L¼Üœ�‘@ çrЈŒÏI9Æ÷üåì‘lƒÏÜÒ'ù„ÞÄžÀå‘Y[ˆ´ë±Ýzü1Ö–î_Ö�Ïÿûòõc*{þcNž³æ:ç.;ã~Ù¿ù‡$ù»ò2É™G™:lìràûŸùów sÇÎÚHØÀdOÆ?tRŽ-m×´ú®õ]n�F ¸ �\†S{5�@#ð[ä"ø·«ÑVûÕ–‹åõâ9eÆ®>i_eæ—‹ìÈØÓÿ~&YÒAÇHï¤Cþ¹óùÿG9䟻©< À‹yL;:‹:äsJЗº¢Ð™Š«mZwê¼~•i—ºÙø@ŠNÉ `|±U=>Øj¢ß½ÌñI®>9nØ’j=¶RfÄdIÕîà<ŒÝwþiÆü”Ó3¸a£uÒ}>9I>¾Kë­æâo��‘ òΜhó³ÿ*ç{æ€ì–²¿ªºÊNú~ò([ý!ÿ¾«/I¢ÿöÓ§›7ÿüsó¦JõÃÅ"�¿7£­ƒZ‹¢Nëà|Mbýù»»1‘Cµ¯¶´GƯÚNÙW¿.7�@#Ðl#Ѐm\ÚÚ4�Àƒ"� ]:ÍñÞ¹x®õi_ÛnÙh³e¯6ôzq]uÚ§‰�D»楾lØÉz¢øæƒˆäŸw°íŸgýó&u/X{­L¢4îjVbFÝsI¬+X­º×¸®}�(Ú@ÓVårHt,ì¿Ê­ð©‰qjÖ14Áņ^ëötúÛª“ÙçŠdˆ?»B ™|Kg•§ò ±öÉËò*®jÎ žC-¬’�Yó´ºç1ô¬Á„ØÇ¦k®_H-óËÅÄbîb#puäü­Åë$÷Îç-û^[ö´¯u[ú:ÊøA¸Ãhâ€Mù‡ì dïE xéw}ç_H„A>dHDÎä_uØè繦¬mÞ9f¡ƒ$ÙV ÓÀöàr R9f÷Æì×TÇF¯™¹PF&Ó¾úT=}W[Ñ�̹цP:«œs€×Ìyâ²úAOB§/êœ'ëC'Õ2zìTIÏ|né©CÒ¦fúU9äßs oeFõw iÔÅNÙº¾GSLJ`Á¡Åî'ÈþWsÈÿ7É”‘¯É�ÉŸþ¢csÿc\¿ñ½ä×?Þ¼ýßÿû�Õ÷;�Çw”_þà‘ÿˆl?yŒ`$ÖBæû½þ=Ã[ôS’.·ÿ–mÏwL«E#Ð4�À :pœ®j�Fà1àb˜”‹äu¬\,oÙ·Ú¥¿µnµ§¼wa]Ç‹�¥ˆÀ$ÿ"ÙºŒ� ¤Œë�H”ß0:Æï»lÜùÿ¢>¹£è9©ü¢’Ö»’>“Èà0äÑùÁ9ƒýwå)€ë¸èd›#;ýT½–c_¥æÌzɨ ñçå�dìœ`ÀšÑñ‹-me:Œ�PŽ}⤾œ¿êÅ—ú´Cúü”¿mÈ‘³Æü=pãÃŒ?Ç�zDük]æáf­”É*O=>ôCÛ%yÀ—/|+Ò�•߈´ÿ„ü'�ùW¤Àï€øó]ežk~¥mÿï>¾y7È?¸óÈÿO=Àvÿ`lœÔ‡ŸýVì4ÈÚYÏôÛÐS_e]ª1V»KÒ]|/é¯}�F x tà%å°F_@½€uöŸ'¹ÞZ]Îí\PWŸÔa[ë÷êb_/œS^åÑx*ø‚Ÿ‹}ˆ‹.ü}ç¯\äs矀ç#‰Ï ¿Å—y*Oò¯zÞÀáË.÷ëlžž>×(,LþXBtäHÆ=¶È8\*!Qµʧ¾É:6·tl¤øD�Œ}G2:™ó »¸™Í�µ3 ™s«JÏ^¶ …4Q—œ)kƽ®›¹QŇôÌiÊØª cýŸ.n%Ö°]Î�+éÇ–<Ú†LSLlãÿ*¢ÿM$ý«2AôH¯É"û (Z`òo©ù'PgŒ5f°æ=¯ ˜ð]ãpçòÿ^wûù‰ÀŸªû©ï6 ¬˜¯€òáý·yÞºú|€n’h›¿MØÎ•ÓnË·ÖµÞ4�@#p�ÜÆ¤-O�zñ„—ÑS¢œ;ÿêòºÄ´Ýó¹O}Ú2fú�­–ѱŸ”êƒ |Öl¢i!`û?wå4Iþ¾ë/É/ð®^È®�÷jç÷0ÇÃD-C~"©ºÖL÷æW×à;ÊÂÚIXÌ„-åE¯é~¤¤mí7:Žéï¨Q)P_³ŽË,W½ö%¯¢ô= bél þ¾ã¯cmÒ/YË9÷LJÕç z$ç>ôO I�äϺ^é3Ú�öhË|°¹<¤ƒÔ+ϵ»óQFßI‹vJ‡ÏƒcÕ5aE7ÆÝrô‘Y‡u5anèô‚í�ˆý[þ7#¿–|¥ À+É2ºü«ÜñäÚ4.ý�˜9ã,âÏ/|×£<@þ¦Ì΀WÿùÏÍ+}ŸÙ…`ÕÖAÍ›÷ äÝ2o&¯O5Kt$)z•®ÐG|÷ʱ#WßZ×z#Ð4�À18Æ£KO�\H<�©ö�;#� ὆—Ô§m.²SF®ík9ú)I鿚(ó³`o x"c^Ô}±ÿGDÿýOÊEð?H¾'Kgë~^þ÷FdÞkÑzÌÑ L›þÁ®JÆàq¿/@}ýÔX?þý÷æûÿüÏÍ+W#|×!ÿìð߯áüÄWyMØð‹¤>zdlÈø¢“<†$¾kZ}×ú._7õø3Óµ|ݳïÙ5O �<­ãõ¢g»õÿEÒ‹¶œ»ðÙú.丂¿µní¿ú¥î”Ìé7í‘!~qÄ`.×!ºOy ÿ"kÀdDþüœ „.¿uÎxÃç�À!+±®u?�eòäu®ë^rt¦=m)_· )ªý¸bù¨}GG&3y£Ì¸E’õQžºÊœ”9ž~i$rØ!û!«."™6¬‰�ÖªCf±q~ $Jà0³C[UO¬c÷<Õ¶JÖyD¾GÙë”^ûqáÂƨãÎf£ÏYžƒ �ë·ÊÞMƒ,eŸDÊ!ÿHø0Èÿ[Õ›øK:0úq a fÌ YÉ?eRì& ÿTà‡ßôç);ÒÇñ»¾ãoDþ ôyw>ꇼ—è‡c›ó>z$íöôôYëc[ÛU{ë�@#Ð4¿èÀ/,Z»Rr‘ÀôªžénÙRײxªp^s‘{iªßƒµÝV_§l©Û“̉º¤\Œ‡üóì0?ÆsÿYþ� ßùYðo™«ž»ÿ¼3€ ±pP©rFpÿj›¾2îS–¬�õXj½Oé—&·ç<© h_ŽM­:Ò3N•Â":óZN�:2¹—dþΪãø;S=rØ �&þ²¯z0a=sË¢‡ì#³[¤ÚÒNMnµÇ椶ŒC²L©Ì98eñ1&nu·�¬i¶Rÿ󸠗ď&üº{Ïî™w‹„è)wŽ.™»ÿïBüÙʯöÙÀ±"“*ñ�Ž$ƒ¹Û¨à±ìàÍÿæÈ‡÷ðŸä_uh;wª0ØHóÜV™1HØV=¶øS¿¥»}ÔúØZ>mrdk9ö–�@#p?:p?üºu#Ð4�†Àï^üÔ‹æLî.¶\XïIú¤ŽTûEOÀõ @€L@¸à—ž­ÿ¾»/‰H†ñ^€Ï’&,Òiá î¹¤�Â*è.1ôºS/, Y ‘öG¸P_SÚÅVqDO¦G޽–¥Ó{Í'Ê>Æjãã¯9ä<˜åAü7˪Þ™³6gõ‡$¥|DøUqµmørÞ9Ó¦êîD½€Yu/k�Ï·S7rõó9­~f;ú¬‰~7Ò¦Uýgiâ€Èû[å÷dñCçî¿ó¸ãÏ�ÿú€ßÜO@Çè(kœÜ±gã%ÉñŠŽdwŽqÐx¼lÐ/ äžý‡àó>­ÏÇ™c©ìŸúÔ΀òç'ñqTObíÁÍeÕ¥¼þíÀŽ-ÿ=�:R­?X¶m©kÙ4�@# Çñ„FàZàYâN�ÀKG ÄçpØò»‹�þ¹˜&¥ÝžŒ²^€ãïw”~¦�ï³êë3ÿßDr÷a$ˆÉÄB#m5˜íÏáÃÄH A’XÙ r¬keÝØ’ÀGx §ÔU¹¶Kös™1ªOÊꃙ�ù ‰Îqâ¢bÞáWÙwù5W$õ>?�ɱ«œóM]̵y�š’ Ù眳Ü(S7뇛߬/ÛLèÃiü‡¬:þ´Ê¨úìë. ãj½ŒY“·× gÜÍ÷–IˆþÇQÎóþìàÎÊè´sê×A€*ÇX|§¶2ÇÏ8qœ5ÖOõÇ;nùçW?˜³�A;¶ý‹ü—ßùg€%„E�ñ¼Â¡c&qœIŒGÊqß’ÔãWÛD§ŽTë–þ|Êä<ÈÖrì-�Fà÷èÀïc×-�F ø#¬@ëp&{.¬±¯mcCV¿ØcK»-™¶u„ÿ“2oýÿï±õÂÏËþÞYË~î_ó¥ïF™¹…ì3Þ-]mÙ‘“~€Ž�ð}äx}Ó�ÿ7"ÿoÇÏ:ÀwXíœåÏšèßRúA=HtŽsðÏ1§û)éÎôÿ½rì-Ÿ&92ûµ{ËF ø=:ð{¸u«F hîŒ1çR.Œ·üNµ_/�¶Êô¹×õßÒc«2ýa« òá;ÕÕq’q!cïDß+‘ð#"ìIƒ&@8¾); 6¹³Œ­¦_”¢Z¯W?Féö<ëz|':¸ ƒ™Ð±Yj¦ËIeí gl#{ÜÑ�竱||9Ž"w[H¾ ¦lÑMüUo²¿J‚ʹãO{y ½)8‡’™oô*+ñ$ñA÷]é´vêHþ¤Î¥Ã‡uÍ7u[ǰbVšŽjo·jm˜›¾ òÞ É£Üñ÷û þÉúμA—tm8.ÌÑÇgÈ”ìé6¯‹µ«?Ž£¾ýK:–ÌÏYÇð‡ˆÿOýà�OŸn~*(ÁÝ?ÿ¯ycµgl?2@¬‰2%I>§†½–Ñ;5[äœÙªÃ–sk¯¾í�@#ð �ü¢µF hþ:õ"ùÒÉäÂhm»–éoË–qjÝ–[díÛ¹ä;Å�C ˆ0pב‹7ÈI¶ý×À{ÕVÿÜ…$MB2ôØ�Ï!™0•…¬ÈP88¬¾¥Ùiu`)àw´G¹Þ•7aW/ŒÁñ­¤ÒĿڤ¨™ÛýáwÐ@vÚÏœ>OÏp·ÖkV¤Ãç/Wæ˜-è–c}�ÿÙNm LùŽ5ý@r9%õüŠ:8ÜÍVdê—.›í V¯UN²SŸ™N¿ªLÿCð 5ë*TsÐEíª¬ÇhÕÂß±!Wì8¯Äy¿ˆý+añJ$~·õ}ÍÏò’ÀŸƒüð÷—¶`©¹y}C‚5óÆF_®c2Jé;¶ÔŸ’‡–ýÙ4�@#ð»tàw‘ëv�@#Ð<ëEñÞ0ñÛ«ß³çâz¯~Ëž6UâW/êÏÍgD²À/q0ù9   sæ>«îþ£?Æ„ÈX—D–)„iYœ‰lµ 'dôZ¿£CÊœG e“FõÁ± yÏq£¿é9ÚäYËàçã87œéCºç9l2]œB©“`zl51¿�ΕI@ÕÎÄŒéŸä]óµ ]yK7Q¥OeæݘR§Të\¶Õ‡õÛ¨>b¯R}ÐךóL¿�•êSÎã¬ÝÁI§R¦{v×€W$¶$‚$ôç"õþ)@Ž‘<½à/TPÀ¿À.‚+Ö[s0±m3ÆÊß ã3¯6têb.·Ä%>·µ¡h�F  Ï�F h®�\× eæûÖ¼sñœºµ|ûÚ6åHúŠ™þ·¤G\dÐ;DLþu¡Q€d@„|ç_’íÿ�îþó{èoE ˆXCöy–Bb]å´•úäS]KtdMà”:ìU·dëTxãŽNÃi/›‰¥Ž2„’Þ!ü–ô1Ê3P :Ú@ˆDçñÌ�Ñi/ýâ„/s•4ÒMðé`ÔQ‘å{s”©§�æR ¾¿_ƒÄÒöñ—-þîO¾ñ«e|lÇÉ#¶1O#Ÿ9kú.ã“$ÝÇGý"¹3o‰N–_½û=öUÒ3H' a'ãÏï6`€æf_æÁÚØPG;To,ä,fYý×”ãnlF…�+ã�‹uчK‹F h�{"Ð;î `7o�Fà±x¬ à\lŸšÆ®éñO]Êçd"¤�~&[�L2tÁ‘ãîîü©à÷г€_  ÄÅ/tƒl¤½$úsI`âµ±F­û@‡†-uCzÍò9Jk¹TÚb5l P6iT[.º@*­�:êñãØWÝm±‘u|�¤lø;«­”ÃØ’¿“helÔ>Ç¿öãzêÀndê}{îüËx°CpÑ⟺y·Â[²‰³Ö� <§”îÀ@™ sv¢n¤_š ØK¦?“rÉùó~è#‡ø¯ÒÇRÝÅÎ9fcXãG=u~L‚±¸û/œÀÑç˜`+žÿ?z XÐW0V_ÁIŸ>ò© {Rü(W}«>¶–�@#Ð4wC wë½�F ¸zÖ íµ\°UwÊ–:$)鑵ïU§ äŸøC:L2$±Sùÿ,Âñ¯üÞËþ^í²€GÔØ]C4|§×¥çûF‡ðŠ~vÅ`µ“\)õ=Jµ�ïwCGòŒ?þÎ[ºlŽ39zdΙHue?ä�ýçü‘ÎùPƒ$êÔ6Æá<#Y?Ÿ?è:¿¦ŽDûÐÓÆAìƒä²EÞº$ÄßäxÔyLl̉]ç°eIÿÌí0±ƒ/ý3ÏácÒ/Ûž„Èg€u•¹  Ùß’ôͱ«)c¦ï2ÐÜ^±€ñ5¿ €íþy€žÿùgí`Að¼œY3ëO¹Èz왇1.J=öèñ«åÒ¤ÕF h�;"Ѐ;Öî�@#Ð<7¸°>u!žõÆ/{ôÈØÒ¦JßÖX¼)Þ/[S%ÄÃ/�+€!ÿÊ” x€ü¾Rar©�ÍÄOúsJ�´�5¯¬�¡¬ô–€Ïš[õ°NßÉj›ãÁ1á½ d0È`,Ú;K'q¤¼¥×ùQ¯4Æ2ÉŒ>æPÉc=¯§Îù¢lÑI®O";Êö‡èêœä¹ƒƒØó¾l&ì‹ùÐÖ½ê#„x”縔ñ×Ó7ãQ'}õAŸ¹ë�4ÉGFW“Jü×€]&1Y!й+ cñS„ôoòÏÚ Xß0Ðܼ£Gí˜7kæ|±>lÿLBr=âSíØj¹4oµh�Fà7èÀo€ÖM�F ¸v¸`ÎÅ4s]Ëëü÷êsá�¾âWí[¶ŒYÇ�D@V\§Þ ;�@†xîÿ_²ïþS'{îHã©ÈÝÌsNZ­“ñ×Ú)“(êŽ>ÁçLªé/ÒràMà%;0>pìFßn=’1ýhœQwfjw¯V¿uœÃ4~YrÞu<ÎÁ‰á(û¼Â‘2çØ*unz{<„X$™Ÿ¯49ÎX#�I߯ƒŽ1昣ns~c^…ÚMb>ôpÀFþ[Ä?€È£é¨À\øþ$@_&ý¬‡µŽu廾¾À/Ôzý+ò÷®Ö®yÞÊêLÏ¥9Öp¤ŸKlçúíúF h�_tà­5�ŽÀz!s×w/ïÚÑoú?÷ù?w|9~§Öxª¾Ömé±!“Ö‹w†·CÇ‚¡œ»Îü$à>èN#ù£ò'åGæ#/ôÝIú€P(›ÈHæ¥féþ)KP=$~Œm…µ�e$}`/Òõ‡‘çq`&kÆ yX�‹Gi‡Ñþ̉y(‚ ág­™?ëÊÚÍez3ž¬ãÂä~ä[�ß…MŸ¬Û}×Ìþ{þçÆÿÛøü­ãÒã6[t` •¶5�@#ðLà"éÔ…P.¢¶|jÛ-}µaúI2ÙŠù@v”ò~€÷ „üÑO�}éø.¢ý,’ñE:;ØM€„xùÅ€ aÙ#<ìÊ?êÜ­kí¤[ö;®#dÄÑ#ÑCüý¨Æ¨�?Ò‰ãWô_ê´Æôä$+¾>_Y�Ω©³ve^rx”†Ý¤_uûü¤ *û.9ç':yÑ}Ç]vž·÷ã1’¼£à§‚_l³ÿ�T=wëý¼=uêƒsßÁìʬ�ï2ºT'ÖF�¿+’øc‹D?ÊZW-kñ¿‚‹/89Iº rè©Ëß‚ƒãá<ׄߖ}õër#Ð4�Àï!Ѐßí[5�@#põ˜¸èbzM¹¸Þº �ïžOíóR�>sQïí̺èŸä½¼í\d‡çÿ?‰ü³+òé¡Í;é¼À/+“„¼|WÝ7ê‡Á”�¡±¹â‰}xî IÚ]OõÛÓ.`^É” ¤ì €ú@ú\ˆ”�Sé?8§êÉJÖÄ÷eHÖå»ïØÏqÉ@IDAT²‚U>‡UÇN~þiÊAþ€˜“åsT޽J�ÇŒã~Eö½Õ~H?c¯ïï0Ùg,õéÌxcLÆ÷XÔ+Cò“˜e2?³¹Hý”`@;úER@eëÞúŒ�œ‰õã'i gÅA9òu[~µÙVýj[˵}ë�@#мt:ðÒÏ€^#мXr‘¼uP¶|°¥MÕi“rm=õP ld“‘!ŽwèçW“êE ¼ò/Òãç�ÕdÆä‚¡¼¦Û–ÕãúÊ[s6‰Ú˜ª ª°?§È _ã.{ä$û²¡{ÀÐ)ÇOê ¦Ìq0*yÔc¼žÎ'ë™øk]^ß°ùEx,EçøØO>&ï!ôª3áÒß“ÔE†ÌCü±©ȽÏ_�÷ÞÀ¼?v¨Îwÿi£ï¤ßyÌâŸùF2GŽkÖ´’Ú�S?ׄm¬ [γj“ÙÉõÒÜv|Y·3öb£Aý{@¹S#Ð4�ÀŸE ï­h�?ŠÛ¹ß¸^�ïù®ýÔrôU2Þ‘m”!'Ø'ù‡Ð+ñ/äÞù÷|D ðð]i!÷©2Ä…w¼•_%¬&"ª‹d¼èRŸLòœ…ÓV !Ûª@säâDmðBæÎÿ*í£>À›<ûU›9«�1–!ŸN‘µB^³.È+6­€ãa8_©WæÎ�~oï§­ÎG�¸óÜMÙwð!ÿÊ<.À¯ðh$ž7ïû1�÷·üAê!ÿÒiï;ÿHeßýW[“ò1?¾IÌ7™cIJ‰/9>–ô‡­ö;tÖ;íEg­ÉnËÚÕ‡uJ|��ÝÐmÔGl)ßEîµÝ³ß¥ïöm�Fà9#Ѐç|t{m�@#ÐÜ�\nË౓½ÚpÎCþùNð]p@ç¾Ð÷À;Tf€ 0ú ½3ós¤�š˜÷šk}­§ý$ùUó<ªÛho ÜÉ÷.øJòý­)þ«½ú´Þ4�@#ð°tàañìÞ�F ¸:BÊï2±\�ç=m×¾j9z$m¢#“¬© •J€»¤Ù�gþ!S!ÿùúIþåùç}´£¯_#F:ÐŽŒú¥0ÊL¤XB±Í�-™y(ÝúÄ+y‹ü'�<#}üÎô}k°§l(ku0 –u¾q<ävÙý�Á®œï’sÜ?¨öH“0}¨/œ�€ È‹ýr@ljGæ;äïÑ�tÉü8vÈÔE¯wÿÓ–ºšUœýgŸ{Œ™ºµÍÀÂku`@–¿6è£þMNÔU{|OÉê_õSmº®h�—Œ@^òÑïµ7�À‹A€ ãz‘}éÂsA]Û®}ÕrôÚnµ™ªj>¤�¶3sú­îx¾‡4(ó’5l�ÿ÷ÊÜ™ö�ÿ�I~§þí¨;ôH¯2“ò�‚ìOåssÎZgMö©¶-½ÚFcz÷š}÷_¾Õ†Î±Ë±Í_ž( Èì@a'ÎY’¤µQžßì:_¿Cþé¯dü &ðì²E€»ÿÊ~ö?�¤¬~ü�ú AÏ\ õÌÏýåþ*±§môôÉ<·ôø©é!�u³^÷%,‚²žKkùWWÇ~±Ÿ“µïs¾]ß4�ÀKF /ùè÷ÚïŒÀS¿Àèùßù�ß©Áµã{Éür±¾.œ¶µî\9íã‰Ýä ´$¾ PäâCÂËvÆ—ÎÏþq×ÿÓ�ä÷Qùà Dóî¦È†IDD)È…'öqXÁíIÁA´¦ŽØÊqC:I7ÉTÙ7å#¯:‚.&þ£Ÿ™éï 'ÎÁI¥ŸÚc¾àKâ3z=9y›??gÉùÉ»,ÞjgÀ�ÏÞÕR‚ô5IûðŸåQǹ?�Õ¢«è´¶¡<ûÖºTHp�ïáÈzVçææÃ‡››÷ï‘{wxLAA ÛÁ£`2†:!û‘©\Ëçì©¿Fù`ç×_ZÜSŸÿ9ØÎ­/ßßsý¤žþîÚ&m[6�üí#Ðã7�@#pEœº¨YëöʱoÉSKÅßÏŸ‹l@€üÆs‘! Zü /ü¨ù“ôÏ’_ÉÒ!®ùI@~À?y†„0)?éT–I¥Öƒ2ÛÇMøñSÙwn‡ŒâiÒJÝšö¤ªÇÖò"r|ì,)'¸Âù ¹ö�þ�ñÃO³t ÙõòÚéüö¯^(8à÷¨ìwÈŸó=™qj`-sTÉ[Alžñ½ÓwÉ¿>ÀwO:�"¼"ÿ×ò§O7¯>~¼y•`€üМùûüòàS£t§D?��kG ÿã®}ž=¿F`E +"]n�Fà…#p—‹š=ߨW¹BK}:yDnLp‡�¼ùI€]�ÿodé�«¯’_äǯðÒµ¯²AnLÆF?OB\ê|Yd ÔLüUFBæ!w–£­Ë˜”ñOƇ~Ü×h‹Íi-¬ýy) Ž9NÁ׎ÇHdÛÇ’­2;ØÑÂnÝg¿á� ¿�À| lùUÆü�”c]%Gx%ÿÕö]sø®ñý‹ºËÿ3?’À?ÿò80@p€µx`}²6òo¦ú7á7»èf�ÀC€óÕ‹7Îy¿äö�ͤj.G —cÕž�@#мrQ³.xË^mU_ÛR¦¾&“×a§®’ÿøa§$?äÿ‹H‡É¿$^ˆ/4i’$A’ØbÍn€ç’Œ Öd,%�!ëN~^›…b§,ÿÈÿ�ÿÈÔ#©>œ"¥þ<‡@ÅK:› Hð9ι.Ò\Ëü†Sö¹@Ç•ü ïþóò@és€ê飞ßïš™®ÏÉ5pTÖœxG��C¤ÿ§¶ü“ÙúÿŠüßÿ}s£ À�vÜ(Àã¯(ð{ Ô6ßSÆ;•*Yò9\œ×r©jµ¸Zú¼½ÚCÓÛA ;À´¹h�—Ž5!è‹-{µEß“é‹ú¤�H„ÝÏ�JüðäNç{ž"@%�ü>DëßADh }¥Í·Øè÷)¦�ÓD+ë’�àåÕÉfâ¯6”“ €O2DÝ„?lªž2²ÓÝŽCw¿lQ=ñ:/°ä—(x‹T™‹3ïP{ÿ:Ä?äŸó]™ —ßÙ ‚$ΑäµÌ¹Â_õØøU‚¹€€H>Ù„Ÿmÿõ€ðûx@óæóy&YçÀ<.IõïÁ%þíÓüIòÿì’1û\¾¥öù›tào¢ßc7�@#påì]ôlÙOÙj:)Á…”MTG‚Bš6Ù!*y wÿý“�"Cþ‰5ˆ�t}£ùQéÏ)Ð6c].F¹ëÏŠCò²ö�ÐÈ�}÷Œ�5§qË{#Àq‚¨Cøõ=“ý)…9€×"ÓØ%@ ŒÝ,§Þ� è"ùûbí—[·Iøåw¤sþhl?0v˜üsן­ÿÚà z}@sæ;ì<Ææ\tN¹e#ð àÏÿ­g°œ^ F /øà÷Ò�F ¸�½‹ž-{l‘ôIÊÝ~J™ZˆOîþãOæ.'w'!;<àgþ%'ù—®=Ñâª> 5�^þ÷Eí \‡‘e|â‰u˜À�u¸Œ�28�àIÈ„3z0H r~áÔé�б˜¸¼9Üág‹ÿ;•yÖ?ù�l§'æs_õÜý÷#y`Ý ºìÈ‘«½–YÙá_Ëš¿¾ñs<ÿÿƒ"ûlûŸÛÿ÷М�ÔG¾ç”«¾~ï ŸÕ¯Ú[o® ÎÕ½ @ŸÇ×v´z>{t`™¶7�@#ÐLö.zrÁ³uATÛœÒd’]\A%üR1Ó¸ØÊ�í[wþCþG²;É¿H /Vs ò“Ö” …²™Ü¡«ÒÄœ°k½KÐ ¤„üz6w ¬äÔeRŸGùhð.\„&ËþŽ@€ú…(Ñ)rÕ]y�EzÉšBæB&‘ؼsBk„üƒ§¥ê�`ê¾ðó¹qÕ[—}ö[k}°"EVÝ60'ql¢«È9чôOâ_tþù=îÀ×<¶ãÜáø±#�óÞ/”$ €�”y!§®¹ø»¤ñf@ºmòãüð ÿ ü|¶ùCü•r×_ù�ô7"þ¯ÉšÓkÍ‘Gü@}ǼVõ“5Ÿ“ÌõšRæ{MsºË\žúüï²ÖÇðmüÕîóZèÀµ™žW#Ð4WˆI—¶¦^ÛF¯r«Mµáë—Šlø–ÇDnHüŒÙW²trDŒøi5æÂ JÙºÊ×’ mÌr_Ó$ûÔi�øyw¸à(I2Ù—ž`ÁÖH-AH¿Ÿ/W™vd“À¯æŒ¡êNã-}b�nÃæ# ²�U¤ð¦ÌWîú³íŸ @Ê<ð†;ïƒìÿ ÷[ÿuîúœ…`‹xóNäŒ@€Þ‚y€��ç÷áŒpá`Ó8œ>W†ôü±kìWÿëùnÿ�¤uÈ?�ÆÖŽ€·ò!¿ùg¾òÈÐ×%rËÇ û£h�FàÑèÀ£CÜ4�@#ð¼à"/�•VŸªSŸò*Ó6>µŒ9õÓE:ØÚÏ/p§”í€äšü‹ø@þùI@v|AJ€]øùåiê„<¦ÛTüá¤y$Uâ6uU†hZjþµ ©Ã‚ÇzŒï(ãG½RÙ†NÆyDþeϸ‘2½èd03n—£KBöÁÒRºÛH‚3„Ÿ á·.[ô×Ùz/²�;û!ÿì ¸ùüù@þK€—^úο¤wÂhÚ06çõüžRVb'�’>_†äqîêçy^ög]Ò»�àÎÿ;úΑ™¯w¨-ç™t‰\}Ò.vwÔ�@#Ð4�‚@Öî´h�ç�ê“\\°ÔøŸ’µ›µoÚ‘¹ÛÈO¥ýP úPÇï/ê$wþ¿ÈòÿYþŸG=ï¨Ù$©üõ}ÒY›’9ÉF½É¤$¤3z¤:Ü-u=H•M UžÄUº‰?{‘î[å`®æ�Á̸€r@ 9t°s ©cæòÐýò?éþù"@é„°°áï:gÙÒïc§s7�Ü|ùâ_¹àÉ�ÿ¹ €s‡~†ô9”²Æ�èϬïºß·�¹ÏÖÿ*_kÏý¿Î€q÷ÿ¡v0-太ÇÖ²h�FàáèÀÃaÙ=5�@#ð¢àB½’p_mU¿ 0[€q°ç€·%€"a⮿3Ä_úÉòe¤ê›üøuÓ ˆ‘Úø9yéW‘Æ ý’&môA&�Ïèkì#ó’ú¢x8p"²¥¿>ן À”ò�ιœ£[;ÇòÏŽ‚\¹óÏË(û§%ý³€:¿±ûÎ?ôAô!û[Y_ÌÃsûé…Töóü<ׯÄåMI=çÁòЙ7}“êwu«[ü(“|ž�>–ÃçêWëZo�F ø=ø¿Ô©h�F ¸\¨‡pÒÑ^¹Ú£¯2í3!úŇ é0é•yú¡²Ÿ—& ²Ÿù!úW¤æ£ò¿ºkÊö2Rîˆó«�ßùH€kÿòk%kG­/;&ù‡ÌËÏYºRÙÇbÑg@öÑÙ^X„ü{l•Á»Ó/@#¸qÞp•ø`B÷óýÃn=6É�}÷£²Ïgúº�›tÈ¿ÏiH>d~ÈH²È>�èfy�ÿ£ö²QöñÔwâfÜÉG: é À°{‹?úȬk^>‡øjžþ.J·Ì´žœ7[26¹9Q®¶ªÇ§e#Ð4�ÀÃ"Ѐ‡Å³{ûƒüÎ…Âï´ùƒKê¡�¿ŠÀ¹ïG%ø÷™(㤯èUÒw­OÏF‡$C†ý²;¾ô÷"+dÈÿ'åÏÊ_F¦OÿŽº¤X‡I;LÀ°]Sóñ:¥O©9Öµ›¬SÏÜi32>Æ�ºj;H›l3«iH(;ÓŸ’û=¨Ïö³®1ú–„À‡ðó3~¹ó_åJúß ëØhO¿Á˜s9X#I>—ulØ�bò�Œ‘ÄŸ`ÀÔeã1 †ñr@ $éÇ/ Ô!ó¹ãï­üú~°ý}3‹øgËÿœ;çë¹b[%ëÛ²a¯ ŸšÖr­k½h�Fàîtàî˜u‹+@ /®à ô�;"À÷6Ä~«éZ_Ëõ;Ÿ>ª�þ ±<Óþ^„…ÿøGÛ™!ù*HÊ[‘$aâ´yÚ¿`ÒLGW’Bô#™ÖÔµ—ýyø€6Ý cà�T6^£\šM5´+rV<3%ë«=ÙÁ�QIGrÁ²ÏÿèÈìð UŽ„ô'YÔ×,3–üH @Ø£; s"O¿�2™óXçz%ûОó~HÔÖÄ¿fõáàvéoFæ;3·ûKgžk®ä¿ê«_ÖÈ:·êÖzü’Rû¥òwÛ]ÚûÝŽQþ¶ÓÛZ¾ÿÝC#Ð�‰–O�þGþdUOô…#pê®ÖUÈòŸ¤U¶õÂp Z|‘”w"/Dd>‰ü@þMˆÔ€ú7¹[ª‹MÈ¿^«fò±‚(hØ¡÷[dú`~üÏeä}¤9ÏbK�%öQ7[íù²ö‘~i:1>#Éšjfi)Cò9üN„HÙ ðH†ôÏ�²EGâ[É?:}&sn{¼a‹^ÏyŸëªG漷ι¬sØYç¸É?¶rç_Œÿp¾Ó=Rº¾X2¯ï†_ú§>LîKâoÛ�.CüÉÌ}äsD?~{Ü·þIU�-òT]|"ïâ›6-�F xÎtà9Ý'º6.,’ªÎ?ñþGdZ6Ï ¾Û!;YYl—~ïMÞô÷#€o"=¾ªéäEõ=çx¾–9ŽHŽç.¤>’ Ä¿!9¾ÑÝ?Æ…Ø«=²ê�~?2êç]ÿ”ÕÆíÆÜ³†*k}Õ«Ï9]�$ ÿ¤ªŸ²¥®åÓC€cìóuL}-?½õŒ�ëD ×y\zV¿�@ÿ£ø кI#ðȬßËZ®z¦Û–ŒÏž„t¼ay'²Ã{ØöO¢¯Ü‰e[5/ÿûªº/ÊÿÊ—Çð�jÐ"Òm‡ ýO¤_tç0�©ybwkºx.øŸi“1Á@@8oêz½ŽÆp`9‰¿ÊIrž@ò¹8š:¶µŒO|‡¬ÄßýÉŽ-:ÒçRý�õ,Ǧcu8kU¿êãXšôS²?ä´ÇŸ¢3ž‰9€�L}|p`ÿu¾éoþå»e†šð!E®úVÛ^ªýìù´½h�—†@^Ú¦ëíòÏôÀö²ž=|wsÇ'úž<í¸›Ï‹×~(�‚N@ uÔCþýÌ¿Häÿ�È¿wŒÎñ_ƒçÆ}ŒúÜå§oS"Ö™iÚbˆ,>•@†Ú­ú¤�pIú¥Åòü$k$€˜#ç›ý¥s¾°Ý¿Jdã|‚ü¯y%ûîW~UrzlI¹ËÕ¦±�–cä#�MyˢǖïRõ›mÕq¶ò‹åÆ’²Åî@s£.ö:ç uÖ3ש65U;:i•Õf‡þxÖpüçy¬•®åg½ø^\#ð‡èÀº‡y<r±ðx#tÏ�@#pÖ ¸seÆŠO•çæ�y+¢ÂKÑH”Mþeãg!1yáäÿƒÈ?Á|úYZ%}ý•$‚ºT¥õRÇÜR¿9OùÎTõÒŽöÉÓ·ÔWÛSÕ³>¤‰?’sd”}®¨ ѯ/ù³®ó;>ÿ*£Ó™siS×8>φ� ó¼‹].G‰¹âç”c'YI=dß„§øXǽØ2¦ûd|Úd‘Zkæs$e?¸�yÇ‘§‚{íݱ>/>UÚ¨�Ô§|JÞÅ÷T?]×4�ÀsC Ïíˆ>Ãõœú'~ªîBÑKjž,|WOÝÕI}$ �^å) o ; Ð&„î›ÊdîdfÛÿDþyQà;½€ ÔfЬ£ €ç¡�A¥N ÿàuž�Ö“;ÿ)gN0óŽÝs é«2z®åØŸ±«d“t•ëÝ.Šò¢?ˆÿGe‚G ІóŠ]#ÈY:ç]2u«ØR‡”ã­z wŠÒ-ýÜ1+õ{ç,sbì£4æâ9­úð­s_õC—ÂC¸¬uëj}æ[ú9%k›è-Ÿœ§þ_<¯Õöj�?�@þ<æ=â#"P/4q˜îºh6X/ÚV—µ~-ǿڣG⃾•°BÌrÔeù¾ÑÝ~Hþw‘#~𓲥‚Ÿ”?"Ç;ôª4_x"ý[ìCÚ.ý^©�³Í~F}]]tTO9¶Í>6ŒõBº’Bã(|�›y£¯k7MlV™¯qÓ:¹èᎿI|•Ò}ç_çI~Öâ_õìéG:è„98ª»mLågÜwêÓnKVúC§:/úÞ*WúïæÌ=íS~L™¹?æÝ÷ã!pîøÕ¿s�7‹î¹xtàyÇ^E#Ð4W�i§.ÄÖúZ>§SOªýdž’¢!ã…b(Sò‚À÷ÊáÿçÝ»›ÿ¥�_•ù¹@Þ7õA €_˜ú(¨©’éj¿—®±ÖtXµ–²V¨\ÌŽòlp]Ê\û˜åS™Ý!&þZŸ·ñË¿nççøOÂ�>yÖ¿ÞõáÏ.ØHS•WýT}êVI5­åZw_=}Ÿ’ÔÕú”/•Ì1¾™oí/õ[rõß+ÇÞ²h�Fà6¸�I[�F hî�@.æ+Q¯ÝQ_ëjù�¾¶ÆÀæ ™•[»I¡Ô¸üDà'mýÿ/Ýõÿª €.PäøUÄÿËÈÑý3kªƒL§/dhYlì!>4NúNwkû´Éß)’ª«Ìigœ"Á ì$¥ôHúbíW”êl¢{Mš#ǹê¾ó/;>ÎZoÈ}d¶ÿ#y?ç9�ƒýIüU—`À<ÿd[u yËV}j}ô-‰-‰ö�jŸÑ·$¶dæýœ¬¾Ñ‘$ÚnIËGüŠé–z‰Ï­Fmh�Fà… Ð€r {™�@#ÐüirâYǧ®ÚkyO§ýÚgÊé›2ÄOއ ©¥¨ÌcŒ|îüÿP†0Cô>k7À¿dÙÐIÌmÝà:>#iÌ=z‡}¯ŽuÌ$½b<íQF`Vïþ»ü¨‹ÿÉÌ©Ê�~ä|±ŸôØMúµž�}ŽwtŸ*‡ð»nâsDúUâܪ²Z^õµ¾–£W‰¾&ú|ÈTû‹^åªo•±­™9Æ=2}P^S­«zü¶l©kÙ4�@#p�ÜÆ¤-�@#Ð4ˆ@½@¯„{-×!k]ôHüÐIiïºa§†2¤ö5ä^’ĶuçßùäH߯KßHÒý$€äåƒPìHû1À}R%Ã*¯«ÔYÝj‡­ÚS®656Fà8°2¦è±!¯,Õ�Ø�!ÿ\Ü䎿¥Ön"/{H>eë:'Ù·Ä.ŸäýHpÊŽŸ*OL5Nô-©êÍúØ#iÝÊ#~d¬u¼Ø«D¿¤¼åWûOYVÊ«¬mâ{[mÓz#Ð4/�¼ô3 ×ß4�ÀD€ û�v†­åªïÕ…¤�Z6U‚˜¨1„ŒôS$Ž-üx@È�HýkeHbˆ¡ÉœÊ¼ð»Ú}Q~Ã{èOyM[¶ÕçdYã8EÆy”YÉa5©¸PÒ^ÙX¥ïô9ð?ßýRä0V©ÇvM)x¬r%ÿ¾ã¯‰'ðNúÌZSÈ¿·ús~È–­þÖ9îÅâ²$åK™dL¥oÉSõµ.zdÎsÊ�™ê8[zÖĶô´IÝZN»K$>Ié'eä–­Ö·Þ4�@#°�@¶qik#Ð4�À#!À…{±QFßKþÍv‘<pß´•³ï�ñ¾ÊƯ@ü?³[@ù_eîàE€<`9tÆ£|7:O«ã›w ¸<渮j-»'ùÖtTR]Åsú/ÉSØMÿ?¤ÔõEGr¬"CÒ±ùJÌYI¿wwhýCIßýG–L œ'ú É9µå§æ›öøîÕljt+�ü‘ñ2ÌV9¶*«žùV[ôÔ­ýŸ«_Û¥}dm[•çê«ïµêçÖ°ùý¾¢Å<öü»ÿ+‚²§ÒÜ�ÜÂî h�Fà¸@«©÷-3fúÈÅ_úO¹Î ¤¢÷CYƒßôXÀ‘ø¨À§ø¢ÀÕAÅ|‹”~ø�€CP ŽuVWÛ£Dyµ9Ü.¨ám{µ0 ˜ íÇ1j_BgާrÝšÏÝ~“Ž©tr%ÿѹб.??ï¯ãÉv2ç9/óãy̬©lö_íÑ#·Îeê"�ê{­KyKnÙ˜öµ.öÌ?õ—ÚÓnõ¯öª×þ«½õF h^*x©G¾×Ý4�À@€‹÷�úL7¶-Ÿ´©ÿè&z"Á!ÿö¤ø½$€"ÿEøÙð�äWɯ"�Ü™g‡À·!_É—ÄX�օһŸ)z䬸EŒmÚ¨/®¿Ô=¿=û¯–E ùÏ]}ʹÓo’¯c¸'¹ IæNÿԇݶAüyD‚“ü«Žsd3«�œ?›õ{í†]Íoõ{Ê–º-‰í±k¬©–£oÉ-ý¬öô{õIÝ9YÛnùž«ßjÓ¶F h^x G¹×Ø4�À• ÀEyÈ9S:W^}âJÖ¥šœ2‘ôæ ²Wh·çÁÝýéç®?ä?R¿ùBñ7ù§é„ÖìÕ9ÜU žRcÓ± {T»šÀâØ¢Úŧúÿi=ë ù÷¶~Ž™&�‹vä§ùDáw¿Ô!£�€@Ò�v¨Ìyå,ÿ©Ç¶!ê 7Ç‹¾%±=fbÍkª¶-=¶K%ýÇ7c�*¯u[íÓϹºê×z#Ð4/�¼Ô#ßën�FàJà‚¿ ˜fµE¯2KI;êÖ„�—ÝågÿR�'�ïEø¹ûÿ…»þäø®;Æ�å7�ÿÑð‡ôïjG¿�F[úLž¤|§ß½`³8•3ï`ôÛs~Ć̱~ßí—Í?Ç'黸Â’}Þí—ÍÁ�á?ƒ”É�| ñw¿œdÕùyD©i�QËÑOIê2m}Ojÿk}Ê‘øF?'«oÆH›½rìU®m¨Û²Õ6­7�@#ÐüB ¿°h­h�Fà ÀÅz%¡k™)œ³¥>2m2}ú§Ž�2$Ol/nöÁÆOzwü¥ó$y7ÀwÉôã>õÁóÿ<â8‰ûì}GYˆ½g‰m±×ÖøVS­'ôµ¯¥|��ʼnAï_•u†ðç.>¢*›ÜËÇd¹ê*s¬@�ÿ?ÎÁäZŽ~JRwß”ïĹ~¶üªmK?e«uŒ½–/µ]ÚîÜúº¾h�—Œ@^òÑïµ7�@#pÅp±_LµÚ¢‡T‚¾µ,ü }I�ÍØ”!‹¼ÝŸçÿóÌ?Äÿ›Ê�ÿÚàŸTÈsÈÿ×ÑþNä<Ðx§Ú™ ÇgøÜýO»È“„~´µÏЙÂÉ6™ã”^¯Æ3!— ùçBÅwü%ýö~aîŸîCêx œ@ŽgàØºÏÈAöm+º Q>œ'žKôò!в&!ι¼Êêƒþ)cnõ½ÖÕò–[$}V=clÙö|ӦʽöÕ§õF h�c:pŒG—�F hþ\¸Wr¿–3…\àïùÖúô±Úè+ÁÓ‘>Òÿ)„8wý‘&ÿ"þ�gí Àg’µå‘€_!UÞ!…¼×;ÿ|“ÏBÔÓeÈÊ—Hæ›L{ô™6ƘuIñÚ5ö$ïÒCþMôUùÿ c†þA™@~“üýˆøËƹáÇ@¢?Û‹í1Ë@›þ£Ÿ’µý!ó8•¶êW[-oéÕÆXk¹Ž—ºS¾µÏÖ�F hŽèÀ1]jî…ÀS¿ yéó¯$ó^'ÂNãÆ÷ˆ~ÞB |öŽA°KýV9$¿úÄVƒ\ú%€�mH1ÄODþ�ˆ>o‡¯ü¡Üýÿ®:ž÷çeìp@:¿ÀÏʽ•$À#¤ºÊª»òÄG>2AæÊ;,×¶c¼Õì2ÄŽu i]s…ü¢Õmvpwcpßkª9%óÎHÖh²/ûüÙ>Ù¼í_ÒÄ_óá7ùW9’¶¬÷ˆô«žrìÈ¿•µ„9vôHæ”=2>©HYÇØêw¯~µ×ò%ú:Vm³ÖQ>W©ÏVß±�;ã÷»ò’5ünߢÝsŸÿcÿ?qŒzŒFàR:p)Rí×4�@#ðèp‘yêBl­¯å-=6dMëÔ›8Š0Î@Aˆ¿ˆ6þÞ) ¿oÊlý'à_�„„RáwÆ?ú�uüy×_~¤•üçE…oTOv`ô‰¿[�¶‡de¯Tsk2á÷< Âd7œ¥¯[Þé÷AÓ˜Oí’o¬%ÔH™­ú!û–”å— {€d¶þû§üTα ùŸÇsÔ­wý©¿$3÷Kü.ñ©}E�¤}Ò%z|JÖ1÷úÜòYmµ¼§¯ýW¿KëNµYûèr#ðpæoîcôß}6�‰@Ýî»h�F`�½ ¨\Üï]\­íöʱGÖ‰`[6H(¤2;~(ày òýM�¾*óò¿¯ ðÂÀ/jóY™Ý�mGºl!éR�ŽFDùèοlHÖ €É¼z°T]ú�¤_ïh`­ƒ@CÖñ7é/ä_•àþ Iã:EŽÎ�±là|ô²¾QžÄ_e.PRN ev^ s¬Üí•+Ñ_ƒŒý'2KÝ'u—Èêƒ~—Äø¿“.i·å³Új¹êuN{öøìÕïÙÓ®e#Ð4�Ài:pŸ®m�F øKäB+@]µ§|Jž[m¹KþVDù[ú!ÿ£QˆµïüË–»ÿŸå÷Yï àŽ4ÄŸÇü˜’¶cžnOYö™6t‚Ùòâï—á ;}Òƒ¥lcØÜ¯l¦~7sÆî~s÷°æOšƒRÙ%æ5æ1çâcfÊ#‡à‡üWâ?}8FÅ?A€#Â?Ö†ÍÇuHÏátÖwI_«_ʧd­[uÊ¿“˜ëï¤Sí¶êVÛZf[¶un{>{öµ}—�F höèÀ>6]Ó4�@#ðÈpA_‰üÖpõ¢¿ú^Òv«¿=dÑ¿™I†Ð“ NÔ‰¹øîîüCþ?È//£û®z¶µóާA~OR/ˆñ²Œ¯Ç“ž¼c€LÂOÆ'óKY¦Cb®$É¡YÏöÿu€ñM›CËßÿÔ��Ê!ÿè$ðÉÝÿ�ýù¼¿æà»ú'$m³íߺÊógý¤¯„?oé��µÞ%3çûú×>¢Ÿ’µ�äctPïõyß~öÚ¯ösåS‹XÛâ»e;ÕG×5�@#Ðì#Ѐ}lº¦h�FàÊ€ìRwJžZí ŒJ …°B:ÅBÏüs×ÜùÿWö<�λL¸!»ÒIÌ•!ÀÃhqô!?ZÌ*ûÙÙ� \8ô|è;úìkŒËZ2‡è30vÄ¿ÙÇ}Í—õ‘•½>õíõh~\€ð\¿_â'9·õSGy‘Ø86Ô ×<ì>†²#�ôRŸº-ÉÒ·ì{¶=ÿÕžò)YëV}«Œí¾‰uýNÚk·eß²í�¹å»eÛkßöFà±à<¬ÿ{gËöXãw¿�ÀC"Ѐ‡D³ûj�F ¸3w½ˆZý×2ˆm•™ö5…XþäÛDPÙÏükË?Ûþ?ûæȼ0pö*ÂË�yßyä÷p|Œ*ÛQP3~É´UùO€þy}q1ŠœcŽ5QöúTæn¿ .ûZ›_(»wP'ÿ‡N^kÖÈ<‡þŠñ5Üù¯üQsð›ý%'ñ×ü¦Ž]å~0]3u>^¬kè9~µ|_]Ó=êí¯Öoé±mÉjC'Ñÿ]Ò]ýÏõ}I{>{öscÖú‡è£ö×z#Ð4�ÀápãÐ4�@#ÐüU¸Ð_ﮜšÐêŸr$m£W™>×±ð!û´UÎóï"•ü ÉÄ_äÿ_e~*ðÃׯóÞ@29—¤ï8Eá¼ý?D™ÆJøû=²Héðù+p˜™«ŽÈ©Ÿñ‡�¼µ ‚CëüÌš$Cþé=�5°¿Âaùÿ¤9² Ûû}÷_6‚ÎÒ9¨œ�9ެ+¾Ó¦vwÕ™ó¹6«O-oéØHô›´§¯~ñ?'kç|ïZ®ïsõ{ã­íÖò^»¶7 ÎÉõÇŸ»Çi�Þð�hv_Ï�§~AÒóÜS´ñ½¾çð»ô‹~â=23\ǤâLBgû>AïåcÒ/âÿQù“ò¿ÊŸG¦�Ïʯ٠I™vÞ¶/�å›wù±)»,?îòóòAgÞK¯Ù~jÏìØà¾$“˜+kˆvûÄ)^ˆqÚªáTÏ)Õ3zäl»ÑßÜò¯9@úywB¤P9d?2A˜ìðú²És$Ÿõ®mΕYÞÏ%uÕgÕSF’§JŠ}¯û¥2ã\êW¿sýŸ«¿d¼‡èã’q~×çÚçwn]O}þçÖw®þ¥¯ÿ>]ÿ¼èÀó:ž½šF h^,\À…øï��‹¼êmСd&ÿK9/|¯mì|yÿþ滈:/ä£þ_éÿy' öï]~4¢7È~îîãc©üVyþø€mè{ˆ?ïðOèIŸR6dsb<òHÑ$cs–_êã¿'ñ£ýl›òèÃý �µzÍø« ©ÿ(Œœ…!Ò/P”äŠÜýGˆÿÌ*s<ƒìûx3ß�¬i_l¯¾Ñ#s~EÆŽ$íÙµÇõ±]"k¿—øÿŽÏ%c\Ⳏý;mÖ>ºÜü 8Wëÿ“?1f�ÑÜ�ÜÁnß4�@#ðW8uáUë¢Gf²”Iõâ Û$±ª£ áý …¤Š¸`À×wïüÜÞÆïä_ïx%ùCÂÎOš0KÎ-ð"öo–<~r!ÿ”!Ñ&Åê3Rí €l<ª  ;ÿDªìµ©]ó�¡NÝ9™¶´wØÔ²ñb½Ô!åëvÒ™«ïúk^–R¤û%Š’¼°’þè&ÿªó±Qî{Èj«úïÜù§=©ös©­¶‹~JÖºU§LÊØ‡ÒeŸ¿Ó沞�½.çŸã^¥ßm·ÕWÛ�?…@Ÿ· éç!èÀC Ø}4�@#Ð\5\œ…èçBm-gm±¯qñd?$Bê7ÕC\àÎ~È¿I°|!ÿ´ån|È?��Wò �Î3ýlù‡ô;‹à³õ¢ÿòOeë*3/îþ;k>Ñ à}g�É„Ÿ’Ð$MÈåÖ‡Mâ¢4× öu÷z ¯Ø4/ÊòÂÄUWð£ßäQv@¶,mOÍ©ë�F h¶èÀ6.mm�F x@.r·æ"�5â�õö! "Ѿs/�GLþõ@ˆ*d2Œÿ7ù~Qæ}oEÜñ!™sºOÛ?µ¾§ø]øûÓ©¸V:p­G¦çÕ4�@#p‰�|\Z©;Ö¹„óÝsI.èük ø‹ük|že‡¨²íòϯü’¯€¤.;òÆH>/úû€TñŸR¶÷ ÜÚ ñ¼ @’GòX䟗z‡‚æ@P€ ¥t0Cò> <ȹóï;ú*û'ü´F$³+ wýCþ¬ÈÜÝÏX‹É¿Úr\¬Ë½Jô5Ÿ#û©gíkÛZ®õ[ú)[ê¶dµ­úV‰¹]cºÏ¼îÓö±è95�@#ðÔèÀS;b=ßF h�[@*. Ä/’Ž¢#O¥�ÕíÀ“2„—çÙ¿ÉÉ4ù‡ü›¸r‹È?;x ·ÿKBü?DßíÆJÀwýésôk]sáE€ß5‚þõ�Ÿ °¾ìXuʧ’× 1�cîøCþ“CøÐ\,U� éÑG2ÿZæ$c�^eÈ|µUý\}õE'U[-oé±�’[uÕ†NÊø‡ÒásËVëÿ¦~߹ݷýß\{�ÝÎãúÿ¦Ú£·l®�\óÑé¹=8Oýâ£çÿà§ÄQ‡�ï^8‡ïÖU�íÏùTÿKôôI›½y²íòž9øn¸æ±5ñV? øQÜ?u'»çI¿ª¯œ;þ}ç¯_o>(‡ø{Ëÿ ýÞ’  ½¢ LÐ[à™'srFé7iƇ¬yèY€¹ƒ�v¼ Ðë+º_¨2õ^?ëP’ÙÖágË?dß�Iÿa³]ãNÒ¿èà´’}Èzˆ~¤×%ßKä¥d?~,e¯ßZ=Ò˜�¶±mÉj«zÚc#�+¼~}®þ¿j®C{ˆù=D÷Aão�Ÿ¹Óö©Ïÿ¾ëïö�@#p9¸«ö¼2úŸÝ•�žN#ðà{¾·Öí•cß’ôYûÇ' N2‰oØçùvÈ2‰çÙCŒ?Êï“ò?²ÿ—êy$€ÝÞê/BáÿðåË�øK¾S~+Dßï �| é—/?)xCfõÂò qæNúO˜ � ÈöOv%P;¶ÿ3÷¬¿ª«è26Ú{�Ãfb.� †Ü韲ØBüƒƒw€óst¿ÒCöWé9R¯vÑï"/i§)oö{$ãF¿DVŸª§l¤såƒ×¯ÏÕÿWÍuh×>¿ë@©gÑ4�Àõ Ѐë9=“F h� €pT’~ªÉžoì«L_ØIul3‹ B¬ó“{jH8/³ƒsÇÿ“ò?ò ùÿ*2îû‰Ô¿çŽÿ þï?¾yK€7"ûdx¨¯ŒÑå…&ÿÌUù§^Jèù Cþ5ÎkÙ¸Ð\¼¢áëõ ]U3pàþTv)ŸèÙÞoò¯º;"MøåŸûQñw?*3®uÍ?z•è§ò%ÿTûÔiú·Æ‰m•´©¶ªŸª«~«N™”ö‡Òñ空cÏ¿SºöùýTzÔ‡B€ó«þý}¨~»ŸF 8ô‡F h�FàI!°wq¸e¯¶ªo-˜zR.²Às>xºæ?ZºL�€‹H;?„ÿÈ6ê\¿"³ÝbÉØÎd»ñ-ò±_ý/)³ôê·WŽ}KV[Õé7©êÕg¯~Ë'¾!×ù�F hþø{Ø÷È�@#Ð4€D'„½v·e�-ÿ葱!é{wÓM¾Eú@ÔK`î�?Ûÿ¿‘åù§vx[?Ïæk€W ¼ÖöÿWÿó?.{»>~Œ3$AuàÌL˜�¥tglÊ?ñçÎÿ‡‡çÿlðîµ�íÆZ¼¦Ñ�:<0$}×_}Aöy”!Á ¨W†ÌO©õGÉgN!ôÑÁ)6Ï¿ø¸¼Q¿S²4í6ê»¶Yíµ¼¥c#ÑÇ–´±ÔWŸKê¶|b{™y?D_ÝG#ð·à|Þúûþ·çÕã7O�<å£×sŸôÏ„¢•FàE"°w‘˜¿ [�µÍ9=ýD²]^ìߤ›·òÓ?; Ã!ÍߤëÝý‡‹WÕ³À/óSàF€W Ü(ðJ€í ì~ò'àíûCà�“ü£k ¿áŒóCwþ¨Ÿêÿûxàè£�Ä XW?~þ_Ò;$çOJç�ØY#D?ÙäØBðWÉcCŸ¿b€¾“+±ßó9eÏšâSËçtêI´­rÕ¢ìð#s~À.»«Fà¯#Ày½õ7ü¯O¬'Ð~ñŸÈ8„Ü bŽ>>oßg›?/õãMÿß”¿³Õ_Âï,ÛMÍ# 0 ?sQŸ53””Q#Ñ Fp@BãBþÉüª€u�ƒ¼Ñãîo�nvx‡€Þ@ ^À¨Ù;DòP�É!ý)‘ü1ØíÙ]§~�§ò¥Á ¨ýœ*§.’vI[zµ¥Mü·Ê[¶µ�síkýCè§Æˆþ»�F h�§�@žÆqzñ³ä0©/b‚DËF XàïÃ^ àTýÔúè‘ÂMÿlÿ_ówˆ¶þÝÑÿ©;ú?ÿßÿ»¹!ÿßÿ{óêÿüŸ›×£Ìvßñ' bî]ã®ÿ$üÌg 0¶2dßóXtîôÿÔ]ÿŸc‡ÁOõÿ“Ýü< Èÿú/|¥�üUe}¯G€çü³{Òá'çyÿÜõçb›m»@IDATï1¤~æ…ÄïþKˆü%>Ìy/k ³®êø§¹e³“>þ?{g[5÷ÿ}§””)�¨�‰Ò@<¥�¨HRf�yzx=¦×?SEf*„'z¼"ÅCÆ¢"…JQiN’æYã½÷¿ÞëžïiýöÝÓÚgïsö>ç³^¯}×Úkü®÷Þ¿s÷÷»&K³¼Yñ1qa}VÎü¢4Ë#_¦�y¿ÝÓÞwõOÆM@€qW{" " ­¨ò!æ Ö¾Ÿ‡’í”u®%NÙæbª=»üÛHÿЀ¢ï”þy·ÞšÌç"ÌT.Öý;}vWÇ…9Ì@!œËSþý2€�lÔµÔÕ»”œò¿Ô)ù|\Ï_qÅá±€^�wñ¶D kÀ"§Üûiþîã<é•ÿażAcÏ!ö‚QX&¼·pÚ'çoÜ?Ÿ•–WOZÚ…m¤Ót/³F€¿fí©«¿“ À$¨«ÍRሿeæ?†¬�¥¬8+#_D`6 Ä~HZ~ó¡faó‰ãã”Ë�þ›òïxŒ¡`‰Sò3¸0¥pÍÇwJ:€átüe�x…ß�õÇe£þy³ü Œ®> ~‰³œRÎiÞàêa&Ê<#ÿ œÜþÔ×оíöÏL€á •_–ò®^í·‘{»‡Ùð ò ã‚t+›•–¦¬´t|xoá*>yp´‘vYq–'+-+ŽüyñV—|hƒ€ mPU�" " '€‚•M ãÂpZXK3?L÷£ÿÌp×b§lß‹À)Ü,ðËPº�òÏå§ÿKØý¥x €»÷Gõ¹ºB…ŸöÒ÷Äå)ÿÃN¡wù¥Œþ›òoem£¿Nù_è–x—€7 ütx¨ø»tSþýèÿ`Ô¨ü§ï]~8rÕQö­l–O¿Òña\VØâ²|âpÔºô}˜F8/=6>]oVÝéw:«ŒâD ¯ø›Ñ;Þ×§'¹ûB@€¾<)É)" "M ìc2L·°ùacÄáø0õ€`À½N‘gø=R3XÀ�~“@WÖÂÞ7€«ßTO|3 Ï\`˘à¬Ã~Ú¿)²¹Qê½òï–,tû,d€KãcÀ§¹t|vŠ|?40ýhpuÀ,3n�k €�¯Óêøéøð>+lqø8{¶æ/‹½/ÞîC?�7L³p^ž¼x+g~^>‹—’d¤ä‹€ˆ€Ä� †–òŠ€ˆ€ôŽ S¨,•Ý[-ßÐ'Eåß]Lû_2ý ‹Ý [0/Ø€0Sýu÷¾ 3úï§àvÎ+þ>´,L›f0e?Ë÷Ë\}lÈæ‚N³]V‹+ï÷@Ñw#ÿ‹Lùw²cXäÚ5åßOõwå²|¯Ü”ü¼0¬¸²”û¬¸t~ßÿA––ö³ò„qeaÒqÔúé°Oücyø¢p^þ¼ø°®*yÈoùÂw;¬Gaè+Þm½×}}z’»dèÃSšQùX,söT–Oé" ³M ýA™woñY>™‚χ©mÈ¿ k€Søý&€ìàN`I€_ïÊû©øøîbäž{|Sô³|ß¶Ë—¥ü“f3ü€�r‹ñåŸ8äFù_äFþ¹e¸ñ®üp„ß•EÁÞ›Òï|¸„Ê¿¿ħÃY÷yqÄç]N´åÒÊâ,Ý|ê¶°¸²âÒiv_Õ·:³ò¥Yþ*y,¯ù”‘²d4ä‹€ˆ€”� Œ�ÒE`ŒÊ>þºþ‘×wùÇø¨k55ë|;Ñ7ZnÊ¿ýwŠõpôŸ=ܺ{ óý&|lôç.6ücW~Ìš^ùÏðý±|ƒ7u54FÉ•ÿteß6'\â”BÒ— âüñ€NQ_ˆâ?Pþf,t}bÂB—×+÷y¸ú.Ì3Gò«„Óe¸O_V�kr¹4Ë›NË»ã-œå‡qé0÷¡C†Q\Yù²ô²¶G-_V•ô2ºþÿW•>N2OßùŽ*ÿ¨å'ùìÔ¶t�€ ]{"’GD@D |@†JHú¾¬QÊúË)Ë(ÿÞ0PúQüïuSÿ½À�¬û�ø]Fß™GyÇù‘~ç{¥zpo3d)ÿ¦~z¥Þ• }ËïgP§kÏT!ývñÈÄ~œ:à/f¸ËËê|òbD`�|._w†Â»ð2ž¸0œuoåÒù,Þ‰:§î¬øt»7Ÿ2Îòøt˜ûÐY]a\L¸¬|YzL[Ê+" " ed(#¤t�™ €"†‚Ÿç�t¯T£0;EŸ‹�ÿQþïuF€%.Ìå�ásyæ9c—ŸžïÊ£ä›ÂŸe 0e>ôÍ0€oŠ¿SÕ—)çÎ7çëF>wù=\üL§ð{Ã…ó¸‹}0ø¥¤¹ûáå*ãÈ@aYµ®.LÒ—)ðæ“†«Ü§ë´û¬6ø²°¥gùa\:̽9dÅU)_%Ï(2¨¬ˆ€ˆ€¤ È�&¢{�©%€Â…2l.}oñ¹¾SæYÀ¨¹_ÿï (þþâø?¦úfxe…ÜUˆ:*ý¡! Œ'Ÿå7ßTQŒÜ›À½£”¦óÛ‹3€�<0¹Üåg8£†7VÀ‡Ë-p |½´'®´‚oñYiaÞ0–) Óx˜Þg…-®ŠOõ§]V\:OÑ}ÕòUóµ¥4ˆ% @,1å˜MN!öŠô@a.Ì`ú?ëüýÚŒ¥š£ùì8¿PéG¹ç²8»ÇG-µ{ £ŽFñ7ª¯ÈÆL.op™(ƒQÀ-œLá¿1 3œœÃ¦ü;™�¶ï›AQM_¦Ð›Ÿ—N|^+cé4fqøE÷–f~˜ßâ²|âp–ÙÝò÷_ÅO×ÕV™*õ*�ˆ€ˆ€”� Œ�ÒE@D@¦Š [ÝY^‘f„#€S¨s3žçâP®ý4{—/œþoJ=~Zñç>LO‡Qæ‰C5¶Ë©ïËÖ÷Òlý¿_à›àGõ2™Å?½Ê8 ?`ÐŽóæ(æðK_¦Ä_%œ.o÷é¶Â{ ›O WñÃ<¾àà«'Œ«w¹*2)�ˆ€ˆ€”� Œ�ÒE@D@f†JÆ�,ßC°Ñt[Àèÿ`Ëæ»ð<.Œ(ÿŒþs¹r(ï¦ô‡Ê~VœåÅ·‹ö—©¼÷ùË&é/3X>FÿQøY€AÀ+ÿ®,3Lù÷Kܽ�þû%N^ÿáôWÖ·éê¡]Sì͇Qú ÓòÂé2éûa›®þ¬°Å™Oy û€û'g÷–žÎÆ—…³ê*+c飔µ:ä‹€ˆ€ˆÀ(d…žÊŠ€ˆ€ô’ŠXô,”iw-· à`ÀâÁó�òoŠ6 v¨ü•tGÍâÌ P䛲oÀ¹·ËêõK\¼_@ƒ<¶û8;Á/ÌàA›áàÙ ´¯ôe ~Ú'ŸÅ¥Ãé:²îÃö²ÂWäg¥‡£ÍºnReëÊ«r" " "�& @šˆîE E£|<¶(V媧]þP!¬ ¥ÁŒâ;Ì2~�<_”b eyh p£éŒ°{…Ÿ‘t—ÎTzòÚúÔN.”u ‡÷?TæyíeÞ•|×v˜ÏË3�‹Y &2Î äsÞ}rfà]v…†€²¼–îÛÔ�¶¸,?Œ+ “:ÚÕ�ZGYùFÞß:Y&ßU�¥h™üâ;Úc(ã;Zíå¥GmÒÏ¿¼‡Ê!Í� 9–ªID@D`– ¤•Èô}›ÑÕÎŒJË¢�k Û°}wïÃø–†o÷aœ«ŸÝ‹€ˆ€ˆÀ´�`Úž¨ú#" "0N)^Î¥âÂya«#œö†-½Ž?ls ÀSq>>Œ„}}à"_Fž0ÞÒ«ø¾Â NSÊ­¬Õ›åçÅ…ñ„³œµ“•¦8È"ÀïÆƒ°Ë”—UVq"Ð52tí‰H�‰Èú¨+U òPðôý0¡~À¦ÿׯaP2�Íüe*þòJ¾O#=⢥¼ü&Vº•«âg屺óüÒç˜WPñ" " "0%´ à”e�ÁÉ•8¹çe\ó�¬ è“ó}ÿ>ïlx!WÞ}Qš½ûaY Sæ©ræI‡¹�qÖvL™Ø¼ãh#V¦0×å eÍ w]þ®Ë—Å4Œë»üa_²ÂÓÞ¿¬>+nv È0»Ï^=ˆ!€2ìc¯ü;ezÁ +$ ïw¿dáŠ+&‹î¾;™wï½É<ü»îJæ¹´yÎ €Â½Ô•AÇñïbZ>L4Š|x¡Èc00£e¹îø¤sï~üA[Þ� /u²Îwþ<.'ã|ŒƒË Þø0¶�c gÝgÅ9‘æ ¬<ñæÂ¸°Òóîôt˜ûgmÄ”Q^€¿é½DFºN@€®?!É'" "Ð �ô‡[úžFçį,;Åy¡S¢9ezñJ+%ó�`©Sþ.”ÿÁˆ;”z\žòO|žâoFÒÉ—¾†Ê¿“o¨ø;Þ0p¹ûd ü''ŠùÎÇ��`† . #€Ÿ00Àƒ †«ÜûBƒÒe­|?¬gÔ°õeÔzT^D@D@úB@€¾<)É)" "0Q¨½á ”?À)þ‹–,ñ3–Þyg²äŽ;’¥.�)÷K�í Ni6#@Þ,:GSøÍ÷í’èœ)ÿ¤YØ|opí ì/waŒpfàc@ù÷†ŒåßiûsþP�Ï ›bmiißwÆýcñá=á°|xŸÎ—•fyÊ|k£,ŸÒE@DÀð»‘ñOÿŽa45†-N¾Lš€ “~j_D@D`b²>æ&3Þ”`§`Ï™°xq²déÒdÞ=÷xå±S°—8…z‰PÊ=,Rþ}»´í.SþñÓâPúCŸðpô0âOûÃËÉ3Ï-U`úÿpÿðbÔß•³=0xøkÐw×Ì¥=üð%l.ŒO—É»·²E~ØFQ¾²´¦ê)kGé" " "Ð52tí‰H�ÎÎ@iv#ÿÌ@ùgäÀb§d³¾þÞÁ €ô(î¸Ð`÷æ›Â*ÿÄÙì¯ì»ûå Äal NNoŒpò —Ÿ™€À]~€À°p ø3ýß6dôj~Eåß”~S®Ó÷¾A]éû°œ¥eùÄ™³2v_ůS¦J½Ê#" " } @ž’dh� ¡Mé ÃéIœ²ì7tÊ?Š8;ý'ÎÀ(;#ì^évÊwhÈZ@f ðF„Á½Å›1 ÏàÛv™‡F'Çrä1@ üÛ>ôÃf ð•f¤f˜òìYÐgçÂpÑ}˜/ [™*>yp”¯ãꖫӖʈ€ˆ€ˆ@ ÈÐŧ"™D@D@ÆJÅÐŒ¹ »/�<8K×öÃ<„c�Õ[NùE@D $ÀoIÞÿú� I)ÜU2tõÉH®‰èúw×å+{h]—¿ëò‰o1�¼²âRq©¼#¡À Ì`}ýR7`‰»¸SX0ßùó¸îgpÆ‚�ÁÀûƒÙÄû4Dqá¡Â„ç¹0Ê>íx#í¹{ {#F‰Áh¿_ëÏl¦ú#¾“yæîMùǘakþ½ÒïêÆ·Ë÷ÙÅÙßGxÆ!¾¥ÆeÝ[¼Ï0Ècá"ßÚÊËS–žWÎâG-oõ´åw]¾²~w]þ®Ë×w¾eò+]D`|dkµ$" "Ðc(æ( Þ€‚Ìy7 `�)ç(ßNÑ^è”ì%+¯œ,Ye•dÉÝw' ÜÌ€…lèÒÈ�2ï¦$KÝÅ,Â\>Lš»|žAØîÍà� ®}Öû[ØXï�Ò?¸Pü˜À…ç9™r9CÀÒSÿç¹~Ð'ß·�¢oaWQ8L'Ÿ¹°ŒÅ™oùÌ'ÞÂæ[^ù" " " Í� YžªMD@D`Ê ”úÙå˜MñXg�åç•ó�¾Ä hßuW²Äm¸ÄN @ wa¹øÄ…—’6ð¹7c€÷1߆kwx´ a»œ,K]ûÌ@XÊŒç3ÒÏì|?+Á)þ‹�ËÅ-tq8€]ÿó ô=}Ñß²8òà²ò-KYö/éY./>+¯âD@¦�¿þwwúº¦‰ÀÄ È0ñG D@D@ú@ =Àœ:Å{è300ò¿Ä�ü/pJýBF÷ÝÇìbï÷ @ùwiK�¿”}÷Þ€À ¡ïÂ~´EŸ6¾7Xœk?¡�Á…÷,IàòÊ?a ƒ~&Ã@ѧ/¦´g…‹âHÃYù,%ÞâÌ·ü¡OØ\˜Ïâä‹€ˆ€ˆ€Ô' @}v*)" "0ÅP>çŒ@ ”dâQšCçó:EÞ èFÚÑ”vÖgjþRg@éÇO÷Þ`Œ„1¸ò\~ ºkéà²0¾_ïï”{¿ç€ó‡û7˜öÏÈ¿]ý§/E3è'ý /‹3?�F¼9K ï Ÿåòâ³ò*ND`z ð[0ç7xz»ªž‰ÀX È0VÜjLD@D ×P„™þO'Óÿ½‚ëFù—2€‘u§´3òÏò€….¿?–Ý)âKXà®dàÛ½Wè1 ð£üc0ÀP€’ÌEsüƒâï¦í'L÷Oùó˜Ò�âï”}.?ýÅg£þ ùwy½ b Í›rîû ‹ÁEÎîCYÊ}eíÞò‡~˜¦°ˆ€ˆ€ˆ@ódhž©jè1”×ô¨q8üáD8cëôÙÜÏoäçk[óïwæwéì²�½ôßÿN’;ïô×â;îH–º0Jü§ì/f-¿óý,îiY\3^îMñwJ¼ç‡á�xÖú'åß�úcp—ßø¥ßåó2 Â~ ýpõÛE×,œç[óÉWæ,�ùéüyñé|º˜ ü&¤�g£çꥴG@€öتf�)#àT§,Ïw£û(èþx>”õÁlvò_âÂLû÷#ÿNÉöGó1ýß�ÄcXê”SÞ—8Eœ|ð½Àù^ñçÃ×ñ£n«ßOõ7åß)ôLû÷”{W?JÿRw%n³?› €òÏæ~Ó?gd`9J¿ÿçO /�Ï”ò*~Va\•úȃ³ö–Ýé_�Y%ÀoÁð7pV!¨ß"Ð „©ªºO@”ÝF’PÚ"Pç#2]&ýbé^IG±v ý|¦Ø;¥�]8e~¡‹_â Lógó¾y?ÜÈÏï)àâmÛ#À û`ð÷ÅåŸ{¦þf£ý(þø~äߨø�éÿLý·ÑþùN®a™Ü=}åjë¹U©7ý\²ÊTÉ“UNq" " "0Md˜¦§9c}ÑÇÜŒ=puW ÀïFÞHRQM§Ó³î½b=P®a瀥\Î Àlf¸­ýü2Œ>�Ëw/3˜%Àô»lƒ@»GýGñÂÄÏwF¿ÁŸSø¡øsï.›ò?TøC埰cÂE�?ô ç]ˆCšùEù|¦T~+úé|y÷ŸU6LSXD øýÈûmîG$¥ô‡€ ýyV’TD@D U>4Ãë²¾‘†íÞGþ±¸<ßʇeòâŠâÓåu/" " "pîc¡�ˆ€ˆÀ @M�6…qaذ„qé0*°YwÊ=õ²Ž|6âî•w±9àb.}»PôÝ‚CÅ? S—+ç†ò—)ÿŸ{â¹¼`àÏ G¾�,^ñwáЦqY):«#Œ+ §Ë“7+®(¾¨~¥‰€tŸóéßåîK- E _dè×ó’´Y…úOC¯‡ˆ@,�²ß�0½4iæ¨?ËåÅgåUœˆ€ˆ€ˆÀ\2Ìå¡;�#€BŽ8Å܇y {ÅÚñóawÏÑ~(ßþx@§È3ŸPî½Ò�?¸LÙ÷Š?Ç Zü Ì|êGñ_δí�ô¤“g¹‹|ƒk8íŸ|A<á"åßòòšX8ô‰ÇW×å•Í‹¯ÛŽÊ‰€t�çáor÷$”D"Ðo2ôûùIú}êU…@úƒ³ìž¶Â<ö„R�‚¾Ôù(ßó',a?yî ý0œï –×Ò™@ýƒº‡a‹KûË„¼¯Ì@fÊ…eí¿Šâæ§ œÅYØGâÓaòâÒ~ç3¤þ±ü©hÝŠ€ˆ€ˆ€D� –²vŸ€>»ÿŒ$¡´E ì￉%ÚH×3'%z�‡|ð9p)ç£ÜûYġܛ�Â?H7€7 â|=®>§9'^…ÆçÞ¹´ŸÅ˜»o·öÒõ‡²Yž<ßÊæ¥—Å�Z¾¬~¥‹€LŽ@Ùß7¿�r" ÕÈP�“rMˆ@Ö~VÜ„ÄS³" 3J€ß!SÈíÃÓ~›ì47Ää>R}Ü`v€_"€€{—É\Ø»�ÂNœ+4+XýRg ¯ßH�x^‚rí|§][u•|“Å2soqκÓ,LÎó-�µ—ö)ãbóÇÔ­¼" " "0‹d˜Å§®>‹€ˆ€Ô"€BjŠ|‘OåaÞÒÆÌ`Ê¿ùÖÊ?qy‘^¢\›2�o—É™•fyÌóZ\è[zè‡aò†.}¦)," " "ÐÚáªZE@D@¦„Š*Ê~ž³ôÐ'oÚ@�[ž¼ƒ6(^^é(þ¡ Ë…+*×ÈÈ…Ë §Ó,OY¼ÕúaØÊ‡Kß/‹�ûo•Œ³pè…I“/ÆË[­‰@!û ÏËTö¡ŸWn\ñ}—\œê¶#¾uÉ-+¿¢¿¡²tk=̆-Ÿø´£í¬xËÖeaóMîз4óÃz,œöÉË… ýt¸ìÞÊ“/Ìkñø8KK‡}bðO˜/ˆž¬’gN�ÔMYyc›*¦ÛŠÄ·"¨šÙúηmùÛ®¿æcS1è$:ùX$”ˆ€ˆ@øH,RôŠÒô¬°Å™�üÆÇÑvVØ'þ±2Yq––å‡ùÓak“xÂvŸå§ÓÃŒ³ö,OVZV‹“/" " "Ð.Úå«ÚE@D@:J%µŽ ìŽ)ºV�ÕƧã(_EñÛI‡Ã:öÓù¸7Y,ÍîÍógñEᰌ՛¦[ØÚ°ûÐ/J ó)," " "O@€xf*!" "0%P6M�ÎêRVzY\˜na|\¬â–·²&o:-”ßÚ ã‡ñYaâ,>/ÖcyÃ8ÂæÂô¢8K“/" " "Ð.Úå«ÚE@D@:N%Õ”ê,Q³ÒM± Ë…ùÂôtØù¬¶,.¬ËâÌÏJ³6,O–æ) [~¦N»/ §Ó¸7–·¸Ð/Kó*," " "O@€xf*!" "0ePݽ¼tSX­lѽ¥YÝU –?”ÁÂæ‡ùÂpºMK ãÓa»} S>/œN³¶ÌËY\è—¥‡y¨G@€zÜTJjèûî´ËoJ\­‡Û@!ñmb‹Uð|òÞ{v–^toõ„y,lâǬ\è§ë´´t|xoaü0LY»O‡³î‰ ]X6Œ·ð¨éÔSV‡µÕU¿L~{·&%™|“’«j»eò‹oU’ÙùÊøf—_l™|“~þã#¡–D IdÐ[ " "  ðYô¡˜NÏ»ã³ÂÄáh«,\$º•MçIÇÛ}™O=–ÇêLß[¼ùm§[;òE@D`\ø]+ú¿`\r¨¨C@€:ÔTFD@D`f ˜B›÷ñ—þ0Lç·ô0¾,< l«;¬#Þ[8Ï/ª§jšå³6ì>í—¥§óë^D@D@D ˜€ Å|”*" " ™L9Í2�–ŽãŠÂ4FY«?}¦…áL!‘a]–/g÷æ“ÏÂæ[Ù0-Œ+Š�Í—ÕfºÝ‹€ˆ€ˆ€Ä� Ž—r‹€ˆ€ˆÀ¡¢*ýŸŽ³û0= Syѽ¥Í¢ÂMº\Ñ}˜†CÙÂ&Óy´¬pYþ²ô¬:'" " "PN@€rFÊ!" " • ¸š‚oL™µø¬ûte‰³¼e÷Yå­ýÐë#¾è¾(­¨Î0-+œ®7�§,=�_÷" "Ð6~—ìwÖÚÊŠ³4ù"Ðe2tùéH6�Þ06ëc‘ÎX|øñ˜UÆâ¬LÑ})ÌÆN§•Ýg•±:Óe-¾È/+S–^T·ÒD@D@D@Ê ÈPÎH9D@D@D š@¨ÌšÒO%ÄÛ½åIß[cYñÄY9ò¥ï‰ Ó¹]:-}OÞ¬¸¢ø°þ¼p^�–¿,ÝòÉ�Ià7Ê~“'ѾÚ�¦ÈÐIÕ#Ž@ß?`%»¯±øN–oÙ‡[Ï'¯ êÓ²î¡æá>-éa\úž2iæ·´t\úÞò™?jºÕ“ç—ÕO¹*yòêïB|×åïº|eϰëòw]¾¾ó-“¿,½ïϧ¬J��€ ! …E@D@D`|D¦•x«.�–¾'_øšUOºŒåóZœµúYiYqV¦(�ô‹Ò‹ÒªÔ¶S.k«¬¼ÒE@D`ÜøÝ²ß`k›¸¬ß3Í0Bò»F@€®=É#" "0²>éXV|øñ˜þ¸Lð¼a>‹Kçµö²âø¢òUêˇr…m„á0¯°ˆ€ˆ€ˆ@»dh—¯j˜a(ºY q^<¨ò”ãt=–//¾»•-ÊS$‹•˪ÇâÒr•±4ù" " " í� ]¾ª]D@D`Æ  g)Ãyñy¸L±&=¬/ŒÏ*[–^§L•:-OŒ¬Y²(ND@D@D 924ÇR5‰€ˆ€ˆ@&”áP¶LYJ²¥ùVŽ<ézô¢:²ÒÊÊ–¥çÕ‰ŒuÊfÕ§8˜$~ËÒ¿»iy´þ?MD÷]" @—ž†dé<�¾ÀJþv_1ñ�n¾eÏ·ìƒ�òyyÊê6²Yå«”­’ÇÚÈòÇQ~Ô6²äg\×åïº|eϪëòw]¾¾ó-“_é" Õ èÀÊꬔSD@D@F"0ª’P§|�2a'G-Ö¥°ˆ€ˆ€ˆÀd È0Yþj]D@D`Æ P�¢TW-_5_þQä,ªWi" "PD@¿=Et”&£Ð€Ñø©´ˆ€ˆ€Ô"`¸YÓú«T˜WÞâ«ÔQ”§©zŠÚPšˆ€ˆ€ˆÀx È0^ÞjMD@D@æH+Ú±�tù9•×¼i£Îš¢¨˜ˆÀŒàw(ö÷pFQ©Û"E@K¢p)³ˆ€ˆ€´K€�ÞI*à“l»]²ª]D@D@D@½" " "ÐA“0Hùïà‹ ‘D`† è7i†¾ºÞZC«ŠE@D@D`tãúW;£Q " ³D@¿M³ô´Õ×qÐã ¬6zC ëÿÉt]¾²Ýuù».Ÿø–(NoûùŽZÑZ×Që.&S-µ 2T“´^®®÷¯ëò•Qïºü]—¯ï|ËäWºˆÀøhÀøX«%��¾`RÝÑ­tš€ �~<ND@D@D@D@¦Ÿ€ŒÓÿŒÕÃn� ÏARˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@«´@«xU¹ˆ€ˆ€T#Puô«h¯€j-)—ˆ€t“¿ƒú�ëæ³‘TÓC@3¦çYª'" " 3@€äªÆ‚À¡.Š€ˆ€ˆ€D� –²Š€ˆ€ˆ@WÈЕ'!9D@š$ g“4U—,O@€å™(FD@D@zC@˽yTTD@D@&N@{LüH€qЇò8i«-�qÐoÛ¸H«�I(û�Ó¾“x*j³¯4 ¯ONrk ¬Þˆ @,e�¾� ¯ONr‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@"`)«ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ô•€ }}r3.wÖf0Yq3ŽIÝ�!†(�é% Àô>Û™ê™Fÿgêq«³" " " " " 5,¬QFED ³ún(“¿ëçÜö]þξØÁÄ·ëOh4ùô|GãWVZ|Ë�–.¾£ñ++Ýw¾mËßvýeÏGé"Ð'šЧ§%Y=�²yaXž€ Ë3QŒˆ€ˆ€ˆ€ˆ€ˆ€ˆ€L¦î‘Nw‡²Fÿ³â¦›‚z'" " " " " ñdˆg¦" EBàÕ¬ˆ€ˆ€ˆ€ˆ€ˆÀT�`*ãôwBÊÿô?cõPD@D@D@D@D ]2´ËWµ7@@ÊU…ˆ€ˆ€ˆ€ˆ€ˆÀÌ�`æ_�n˜?¿ø•q ÛÏOÒ‰€ˆ€ˆ€ˆ€ˆ€t‡ÀÂîˆ"ID`ú ôÝ`1íò/]ºt¢/¡øNë�ëù¶‹X|Å·ˆ@Ùû¡ßÿ"zåie|Ëkh7G™|“~þíö^µ‹À\ÅësóêND@D@D@D@D@fš@™Aa¦á¨ó�' @ç‘�Ñ È0:CÕ " " " " " " �' @ç‘�Ñ È0:CÕ " " " " "0¥²ÖügÅMi÷Õ­)# À”=PuGD@D@D@D@D@D@²èÀ,*Š� Ü~ûíɽ÷Þ[©–p4q•UVIæÏ×M%pÊ$c"Àß¨Ž l5Ó*ZÅ«Êg�@ø×ǾKþvŸZ|Ï=÷Üäë_ÿz¦ e&«®ºjòÞ÷¾7³l•È&ä¯ÒNÝ4ùéOšl¶ÙfÉÚk¯]^D@&G`Ü3w&×SµÜg2ôùéIv�™!ÀhâÇ>ö±‘ûûûßÿ>yÔ£•¬³Î:#×SÁ 'œ�¼ñ�oŒ)’|úÓŸNöÚk¯¨2Ê,]!ðÇ?þ±–(ë®»nrÏ=÷$|àk•W!�ö�økä¿=YÚa¦YžªMD@Z!pðÁ'×]wÝÈuSÇ¿ÿýï‘뉭 Ž2´ùæ›WÞ@-Vå�¶ ÔyçQ 0Э°Â ÉÊ+¯Ü¶ˆª_D !ùo¤ª Æ‚Y�ˆ€ˆ@}ç�w^îÆ±µNÊð‡?ü!JTF?Ù-¶\T#Ê,-`¹ÍYg�]ûšk®éÿ‡<ä!ÑeU@D@D@ª�  %å� `s¡ýöÛ¯±‘ðI˜qð׿þ5Šà£ýhŸ_ŠP6eîÞwö½ˆuŒþãØ@ND@D@Ú @TU§ˆ€4DàØc�MN;í´†jK’믿~ìKØ ­êYèÖQ3<øÁ¶(ù"Ðug®<æ1�ñ}Ô{ß›G-Ag�€ÖúÏàCŸ².kÀ){ êN»úþ£/ùûõ~ÜvÛmÉG>ò‘F…¾öÚk“;ï¼Ó[”~Ò÷M5\g-4Šò„ŠP[òUíç¤Û¯*g^¾®Ëßuùò¸Z|(�wžz˜°`Á‚äAz�UÛ˜Ê×X¥c¬¨ëòw]¾²GÕwùËú§t�ûhÀ},�NøÌg>“\}õÕ�ÊÄ´d ãÜ0VZqÅý)«¬²ŠÎCoô髲qˆ}ç‘kÕUWMö°‡yå_ÊØ¸ž”Ú�Ù# Àì=sõXD .¼ðÂä+_ùJ+’Žs€Å‹'gœqFT?Ö[o½„•µþ? ›2w„Àßÿþ÷äšk®‰–ÆÖÿë½�F§SH@F°)|¨êRgÈЙG!AD@Dà>p@ôºùûJ‡0Ü~ûíÅ™Je'fÄ8­ÿ�¡¥¼]#Pwý¿Þû®=IÉ#" ÓI@{LçsU¯D@zLàÇ?þqròÉ'·Ö6¬³Cy�ê(C¦i$´q•™4�Ë/¿Ê@?ð€hß‹®=PÉ#" SF@K¦ì�ª;" ý&ð¹Ï}.ùÇ?þÑj'ÆiàÀ÷ˆG<"¹ßýî§õÿ1Д·sn¾ùæhåŸN<ô¡í\_$�L’€ö˜$}µ=­4`ZŸ¬ú%"Ð;L>üðÃ[—{\{°ÚUW]Õ›þÿU�2‹@pŒßsžóœH"D ÿ´ ÿÏP=èºõ<$�ˆÀ Øÿýýºá|àŽÍ‹9.ð†nHî¾ûn­°Â 1ÍEå��þOå]ß �ã9¡� ŽlpȆŠð¼ÿýïïŸÅÃþðdíµ×N6Þx㩜ɀQ碋.ò×�7ÞèûÏZw¦¯sqŠÃ&›l’0›£-wï½÷&—^z©̘¹é¦›üÑ– ,ðÇèñw±Új«%[l±E²æšk¶%ÆTÔË{|å•WúçÈûmG„r çÊ+¯ì�ääxÂ… õÉ8\�˜yú5ŸùW@D@º@à¿øEr 'D‹ò¼ç=/ùóŸÿeX²d‰W^ùÐoÂ�·¤à¤“NŠîŠJ%J]èb¦‚¢€7¡° ÜŸrÊ)þÙüîw¿K˜Õ³)JðvÛm—<ãÏH¶ß~ûFd ™…ÿõ¯yÄå)ãÇþ /ÒŽ÷å7¿ùMò³ŸýÌûU—¨ €ï¾ûî ï(Šø¨îâ‹/öëêyüã+odIŸžò”§$¯|å+“Í6ÛlT1 Ëßyç�ÑG²é†“q8–&üö·¿õ×ùçŸï (ü­•¹E‹%�}ìc½a–¼Ók¬±FY1¥‹€ˆ€t�€ |(ID`¶°[ø>ð�èN3Z¾õÖ[×Ú3À”v¦*�ê^õªW%g�uÖ¨Õøò|ðÈõ0 ü׿þu$e›½ ¾úÕ¯z¥—ÑýºîŠ+®H¾ùÍoú …é¥/}iòš×¼&YuÕUëVY©FŠg=ëYÞÐS©€Ë´ÕV[%ÇsÌ0;³¾öµ¯yÙ!Žu¼cGy¤¿vØa‡ä}ï{ŸW"cêÁHõ½ï}/9úè£k¿c,(ϵÍ6Û$lÒ·í¶ÛƈQ9/m¼÷½ï­œŸŒßøÆ7¼q(ªPDæ[n¹Å?×c�=Ö cN&°fî¹çÿ7Åß}Ę´å–[&{î¹§_êÐÄ%_D@D ]2´ËWµ‹€ˆ@)�Ã;Ì�,—f 2ð¾Ï>ûøñ¬QÛ kfÐ ™‰‘Œxþå/‰(Ñ~Ö�6ÚÈO]®ÓÒÏþóäÐCMÎ>ûì:Š˰Lã�Cñ†…·½ím †FÝÛp—\rI”ò� p¤¾þõ¯'Ÿÿüç£ëðdüsâ‰'ú£-1t½â¯ÈÈ17Š÷ó+_ùŠWŽÓ3AææŒ»;í´Ó’½èEÞóþ÷¿?ÁXÔ¤cfBŒãù71;"«M”õ#Ž8"áXQþN›t˜XâÃuÀ$;î¸cò†7¼aø5Ù–êh–@;_ÍʨÚD@D`j 0:ù…/|!ºŒ`rÖ8†SÜb*iÊ€¢Ìzì.9vRÿÑ�~”\vÙe•Å:ï¼ó¼bøÚ×¾¶å?…EN�‘õ°®¼p¬"J=Œ ¿ûÝïNžö´§%x`cÊ¿ÉÈ{‚Ò�˜ç˜uÀ,dÀѤòom¢¼¢¿ùÍoNXÞФ‹Ý÷‚¥*¿þõ¯“ØÓ2ŠdfŠ7½éMÉ®»îš|ÿûßo\ùO·Íì–‡<ÿùÏO^ò’—øåé<ºèºó,$‰ˆÀ @Œ�c³¹=öØÃÓbôŸïX×” IÅ%¶yù×_}ŸTeZ2Jé'>ñ ¯,±¶|œŽÑhvŠoc¶AÓÿY®ÀÞm:–0ë%t(åßýîw“ÿø�ÿH>ó™Ïø éÂô6Â?ùÉO’O}êS�UÍ –|Ä8Ûô²‰S/دb¿ýöóûM0êÓq»“O>Ù/ `©K×f�›…Ú�®� «OFr‰€L=Fþ9‹u»í¶›ß4ŒMîØm½î†Q] (U°)[gφ~{íµ—Ÿ�Qg]ô¨ì(íµ×&{ï½wíõíy2Ô1 ˸ÜÇ?þñäôÓO÷Í1bÍlˆw¾ó� †©q:fßüô§?m¤ÉØÑ5³VFq(Þ;ï¼sò¿ÿû¿�Ïj¨#€"“œˆ€ˆ@÷Èнg"‰D@f€Óf‹¦Bç!`Ê0»ÉãØ•›]ü9ª+V�@ÑbæÁ¨£„]3ptG–qš@ÑúzFß1¤œyæ™y¨ÇÏFw/{ÙËü±vM4zýõ×'ìÐeÇ{Çr¦ù³Y!Ïc9>øÁú壶_ÇèòèG?Ú«xoë8–0tÐAþýik9I¹(Ãò¤k®¹¦nq•h‰€ -�Uµý$ÀKÑ5é^ÉV%Mò¨Â°(OqísS?üðZJ#¥(¶f£‡Ô; ¥“ëŽ;î¾ós%,¿c}Ü#¶eRÙôŽVK;{vLýFáæH´®8dát€¢Lþ2ÿŒ3ÎÙ°3.]tQòÉO~2Á6IÇ>_þò—‡e|óÒc ,QÁp‡_d¬26évùûeã=6­Õ�gm4å#+ƒlDh.-ì½ÕÓ–+O:[rU­7-Oì}Õv&•¯¬?“’KíŠ@ ÈÐǧ&™E@zMફ®òí±�`·pFýq›nº©WX¬Λ�u£îеÑúoF‘¼5Õ?øÁüæoìtß5ÇTø}èC#‹Ug*úÈ�ö¼6Ëcºe‡QÃl‡!`;=J[ÓRöâ‹/N8 ¢®;묳¢OÃ0cUìò /ùË“?ÿùÏuÅm½'”àªlÄÙº0j 7dèÍ£’ ='°°çòK|è�ßþö·þˆºX¡ŸùÌgú)µœ[þ¸Ç=n¹âöÁ½\BAĨ3˜jÞ%8°<ƒIèØ‘üõ¯}´’ÖaaÖk3ã‚MW\qÅ„ÙRØ=Ô5ÏL‡ÿÈG>’°S~��adiãTëû´úp?å”S’'<á ˽;Uú\Çè žqÌ N­xõ«_Ýè±�ì—Áu¿ûÝÏ/ÇÀ8É –Õuö{$@]‚*'" í� =¶ªYD@æàã}ÿý÷ŸWå†Âg<ã>+JSkÓ®î €Ø™Ö.}±S©Ó(R,qˆq¦€Ä”ÉÊ»úê«{å-­P!ßßøÆ‘f;`Tàˆº-·ÜÒÏÀÈjŸ¸n¸Áoh÷«_ý*z–‡ÕÉîéçŸ~²ñÆeå¿h�Ê¥2²ž{³Í6ó{Mð¼P\yw89€µüûÛßZŸYÁûÆöyXc�5ŽÃd6Fä¸ôÒKý(>ïfÇ~l È ›X»ìe›¿YŒIô«ªû€;6ôÔSO­š=3ï2ïñãÿød½õÖËü=¡ Æ,˜2Ó€å 1{5`à);‰#S@EÎ4Þ›®íi1ÓD�ŸJÕÿ×™Êî«S" "0>Œê^pÁÑ ¾à/H-ZäžÇ<æ1™åÇm@iùá˜\vÙeÉ9çœ3”‰©Ðlpãž÷¼ç%Ûl³ML‘¼iÀ¾ûî›\~ùå…eòé'³/8b�ÑþСÄqχâ�qæÙÏ~v²ÝvÛ%Gq„WŒÃ2UÂÔsÔQG%({U6‡ ëŒUDòé0ýÛvÛm“­¶Ú*YwÝu g$ 8ë[ßi}º}»çÝÞqÇ“'>ñ‰Ë=Ëc>˜ÿùŸÿIþùÏZTeŸYÌŠ‰5`„ˆ]ƒâͳÍÚ¬2Oà£�>Úó——^�2¾ûî»û¿5{gÃ2Äñ¾£€ñbPãâo“ÙÌ�8á„J7Ϥ<þ6bŒ¡, ‹€ˆ€´G@€öتf`4í�CÞW 0 Ì´da¦¹g9¦¤ÇŽœŒºr0 ÌH¬9NˆuÌj@J+رõXþP©:æ˜c¼¡ÂÒb|”Ÿ×¾öµsNX nRF óä… Ë˜þüÙÏ~6aùA¬C¡¤Ž}Œqu¦k:÷à@IDAT¢§ë§_5¹ÓN;ùåa:}bF Ïœ÷ å—ã$ÙôíÍo~srà�úÑø°LÝ0}Ç8Ć—¡Ã0�‘…–0r,^¼Ø+­œ¦Ày–QÄŽ"b¨s2³˜2ãlÀð]-*ϱŽï}ï{‹²¦aÈÙk¯½æŒöó,y�W[m5?!màÙ2{榛nò³˜9À{ñË_þ2ùùÏž;Ó„¿Þ¡´!®P@%Š@@ öÿ² ¨‚" ÈP’²ˆ€ˆÀ¨>úÑ�Fï2޲¿÷Þ{û¦ùH/Rùà&S¡«:FKéãJ¯™¯ZÇ&›l’p™Cá�qL'Gn”””&Ý-·ÜR{W}fZpÄ£˜8”Mö^@Ö2‡rÌoë¹Q^¦xSO¬b‰Rɬ…¢gž–…7v$:¬ƒ÷�‘vfÏqZ3(ØØ/Æ!? ±®ŽÑÅ6¬bà¹2‹CK¬ƒßK^ò’9[(ýl°A©‚NYÞ{.¸³´‚#ù[}Ò“žä÷©È2ø1[Çß¶œˆ€ˆ@÷Èнg"‰Z$PôÑØb³ªzÆ 0-›‘èX·Ã;x¥‹ñô(hV]̈10jzã�7úQüº€P¦ ‡Ë´¼pìHh^=Yñœ1Ï,‡X‡LoyË[†F”¥ 7ܰPéÌjƒçöÔ§>Õ+`‡vXV–Ü8”Qf0ý¾ê4j^Œ:u}~ñ‹_<Çà€âÇšûªSâ�gÖ@]ýÜe—]¼ÂF£aÈ{Í3ÈÚû"«¯”…[¬ÃM@ì² ú„£]•>q2Äïÿû¬®ÆÁ“Ù,�Àñ|˜M„ Ž£>ŒZ(ø¼/„¾üå/'éÍ@1àd¨CYeê(û¾‹�TW•�>� OI2f(û±Ï,¤H3”ìýöÛ/z:2Ê×®»îê¥å£›QØ2ÇÔôôÇxY; €Q×Q›…ÅnÀÖ–€£ô¾ñ�oDwɦ²cAQÛ|óÍç(ÅѺ¾úÕ¯úò˜òŒ®²¶¾ªÂVg$š‘þ=÷Ü3yÊSž24p0Õ›å&(x±®î{ÄŒ FªÃ6 o´ÑF•Þý´œUFÖÓe0ð÷ëb Ìd@ù¯"#K 0dÕqð4åŸ¶Øø#À¨Žÿ{1`âÝdÏ�Ÿþô§Ãj1�G€!D@D SdèÔã�0" ÓF%”´ckŸQø`g¶Šc¤4Ö5±€µ«QÊBeÈÚ©âþóŸ�Væ9~Ýë^çGe‘‰iΡBZ¥Ý¬<s˜–»{;£ùÌШjˆåOßóž÷ Ù³€‘v”qÒê¸: 4K?^úÒ—Û„;Ô�òNÄ¢è+†�¼=6òX°OÓâc\Ìô”kÞ�XÇRŽ'?ùɾF-fDÄö­¬MŒdÔ‹ÑßN ÀÀQ‡eY{Jh†€ ÍpT-" "°Fo?õ©O-_±žñ·]ñµéÐeåêF9ï;”)vã³b�B ÛÌ _æN&8î¸ã²’ ãØ½ypL•nBù·}�5 ø±�AUËÅДl6nCéf|»mq¬TŒ]f·ìï»&–9}ª:ë…ßN’ˆu¼Ãq¦œ7­ü‡2a4b& '€˜¨îL�°^…E@D@Ú! @;\U«ˆ€$ÿøÇ£7Czá _è">¢c”ú˜¼öxl €Ý×õÙ1Gýá˜Þ\‡e^ÝÄ£$Å: 3œ(PÅñ9³=ÆÙH4 i¸‘cLé¼uŽ[4ÅûiO{ÚœÍÓuÇÜ_qÅ1Ù}^F®Çe`=}Ù²ž¯ýëчò÷ôŠW¼Âï��­�‘ÿ,°°£?fb‡œˆ€ˆ@7 ÈÐÍç"©Jð‘“v(NÚä%ME÷“"ÀhØw¿ûÝèæY‹m»h³ñ_ÌTl½Ži´©%\pAÔh52V �éJó±ÇSÄçÝm·Ý¼ÒÄ8»ý7íê(DlHWuv»ÿÇþþÿ&g:pzA¬[g�uü”ñðä�Ø:Òùc�!Ì‚ò±Ç{ø{F cÏÑæÃ¿H©60p¼X¬òTჱŠ…l:¶Ÿé¶ÃûŸüä'ÃQÈ0¾(ŒÌ}ÓàÛ˜.]gC4Þ#Á*Ϧ ¼/udËãÉF�1ÃëÅG]z¶ÉÒ‰+¯¼2Œ* 3‚�‹1Ô0;ãÜsÏ-­;Ì`F—²wþ—¿üerÕUW…EKÃ,Ú}÷Ý}>Œˆ,ñ��4ÒDtßK1£¤½ì „î�oûÛI¬"D…f�éÁìÂ똾ÌZîwûí·'\UGšóêŽ�þ�âÉŒM*G}tžˆ¹ñÛm·�ŸiÁùò±ür+M%Ô1*ØÞU–30 Æ1ÚÎæ‚(ÿudËj …˜ÓbœÍvirä˜ãc�)æ1rœyæ™­�zQgöû†`Àà÷ƒc+åD@D@D ‹€–dQQ\o ôÝP&•‘ÀI>¼¾Ëß»›nº)ùÄ'>]Gjm¿ýö¾ïYÇuUáËÌv&�q¶À(Šxì4³˜ž\6Ó6Ì;í´ÓbŠø mÃŪ§-D50ÈÌ,‹X®GçÙçýýßu×]ÉÙgŸU=³/¨³Éý8í¢Š±"Ôf�ÄŒ¼‡å³Âu uäˆ5z!+†¸½÷äN:餬®Æí°Ã>�S²~? 7�Xå÷©�ff¶Š¾ó�´ü“nf_\u¼“4 “�EB‰€ô•gvs|[¬ÛgŸ}üH,Ó¡¯ëlýoLùQ÷¸úê«“ØM×lÄ•Q÷¦JSìñoœ²À,F~ÙŒ®-Wg†…Ê–u ü³_@Œ3þMØ÷"Ö™Mîk@1À€Òc‹5zQ?ûØ,Ÿ/ÇLâøû·¥#>Bÿˆ€ˆ€ˆ@Š€–¤€èVD@ê`zö~ûí=š¶PXÞüæ7×i¶‘2£êL…fš2 `“S¿ë(Âìµ€’m›À54£’k®¹&#¶8 …´Lù§†Xþpä#é7ßkrªx,SVËâbJsSëÌF1cTŒçŸ~ôf“ft)kçôÓOŸÛ© wvŒc`…ê•ED@D`ŠhÀ=LuED`r¾÷½ïE+b““vnË£b?¦ý³ù nٺ̹’æßqþøe—]–Ÿ!#9��éçM*ÂM%ÿøÇ?²¢ ãPËFÆ1<Åug”8fÄ»PP—È”ïg q“rľ‹Èkr”)æaßb™‡íõ—åC±Ëi0¢aÀbC“':„ýUXD@D`zÈ0=ÏR=˜”Ï�~ô£j}ôfGÙ ÎQhŒþãš\ÿÏò‹¼MòòÙÈo[;ÿ‡í^pÁám¥0|ÊÎ¥¿è¢‹޽‹qÖï…·¬þ:Š·ÉÑä{PW1gj~Ì>±íT=õ‚}bßcfs`HÇ{\ö(]D@D ûdèþ3’„" 'pÈ!‡$(Ñ}u(�l:vÏ=÷Dw¡ÎQh¦ø�„Æ {;õ³i®IEØW˜ú…îoû[*¶ø–8Ç¿ÈÅ*¢ÔUgÄ»HÒêÈÁ{ÀL6¾lÊÅ"=‡3ïbÌl”Øv¡¯rêE�÷˜�qmnbÙÔóQ=" " “' ÀäŸ�$è1»#�<²Ç=HüÎù_Èh~¬«£ø¡€¢lÅŒ¸–Éuå•W–eY.�Íß�£ICÄr�¸Féo¾ù欤Ü8Õ-Û•>V¥¿(Þ,-˜¤âÍh5Êw“Æ—:³QÌ#ÇlÆ.é¨jt‰­—h�5ÖðïQÛïqî˪�^Ð&€½z\¶ïbF˜ºØ×i—?vê-ùÙø/öè¹.>[[»†8Ve�2#ï´ÃftM¹:¦ž£`WÙho9ëlê†Wöô¡MMOëXþpÛm·E10ůh$4ªÂAæØ�ð(†ÒT6žŽ,a™;ï¼3‰5°.Óô™1‘çPDcG-�ŒÂ›×¾Å×Uˆù€nrH¬ðåØ<Þ˜Wu±†Þuxã³`‘c)N¬cä¿l¯ˆØ:•_D@D`z ÿO4½ýVÏzJ Ëâš×ÓîIìøìg?›°xZ\@¬"+S@›ž€¢ã˜ö�2Ö¶âô«_ý*zo… 6ØÀ+ÿeŒb^ã»ã}ר÷£û/ ü7µü‚±³QÖ[o=ß~Œ1Ãßyç�W†dNº½óUŒ^wÜqÇœ²Un˜YÐö{\Eåèúñœ$¥ˆ@‡°©ÛGÑ!‰FÊMŒ‹U@1Ö=üá÷£ÚeçÛÇÈAÞXÅÉöh{ÝôQGÛ•d³Í6óeÊŽu‹åÏrv¼Gñ.‰®*4kî9 "Æ1žw¡ŠB\µ^f£pgŒ«³b”S/Ê Ìæˆ5dÑ_XÚûÓå˜M2Ìæsï|¯³>N5ÒßùÇ63pÀµŽÌë2 (1k¹cG~Ù€Ž‘Ê2E¨'Ž1ŒqväaS#ÐYm_rÉ%ÉÉ'Ÿœ•”ÇTô-·ÜÒ§xVgŸ}vn=Y ŒDó;Ú$ÿ¿þõ¯ÑÆS¼Ëf8dõ!/.ÖB=62#GÝvª<î¾û?cÁém¾ÇÖŽ|˜eYß Yq³ÌH}ï�æ¶`îOŸ%©ˆ€Ô&püñÇ''�tRtùM7Ýt8²]¸F�cŽ9&j4‘µü((–UÖÅ_uÕUÑïÙÎöM®û64Ì(@�ªê0t`4È26V­£,ß¡‡­Ð1ú6v[i¥•r›@ù7#Fn¦T‚)¼Mb�@ˆÔ9øpÇÁ �*ﻡŒí/¯uÖYÇyX6J_–n2¤}þnc÷‚Hס{�Ù! Àì<ë^÷4ÏÊšßëÎJøÎ`šù�-JÆK_úÒÒ#Ý¢+.(ÀÆs±;ãÛ2€* #¿±Žéÿ¸¢�ícë´ü0ŽÝ��%13¬­*>ëÄ�=öØ*YçäÙvÛmý=›Ó¹XE”ºlä½É©÷±r ä®»îº�/‰•ƒ£(1°ÄC8õâŒ3Î(z,Ë¥­çöÀÈT…9£ø¼Ç±³Yø»�=þp9A!"PJ€oNÛJ1)CÈЃ‡$ûC ï É_ü®}þóŸ¯uN÷³žõ,¯ô¢üØñnÅ-ÕK ?LP²êMÌsáû»u¢¡ qü^ÓŽº¯¿þú¨j¯¸âŠèQô¢ŒÏá}ï{_‚ÂãPú7Úh#?MŸQã";�¥ÌÀ`€¼ýLþ¢vÓi±Š7}D–ÅÛÚÌ“�Í8c�Ï«3 a”S/èožüÖ?|Œc×\sMU¾øâ‹y�«ÈW*Ì3t]þ®ËWöèú.ÿ¬÷¯¬ÿJŸ-2ÌÖóVoE@j¸üòË“/}éKÑ¥Ùtm§�vòåØÝý1�yLtU „ÚúÝï~Wµ¨ÏÇHb‘ ¬¬Ž€©ÿì߯zåµ×^;asÆÇýØiôUê?üðÓXŘz1ñ‘ÍùŒç9žs¬ƒ¨:Šwžÿûߣ•US¼«Œˆçµ›Ž¯ÃÚäh{ý¿Íº¨ÊI¬à‚ .ˆÞ‡!Ͱê=³f9ä�äÜsÏùÚ×¾¦S†4˜5üf‡ÿ÷ÎZÿÕß~� ŸÏMR‹€Œ™À>ð�詹ˆ¸×^{yÅ‹iõ¦tŒCô²ä,b Db£›U–ÄÖK~ÜXwÖYg%7ß|sl±Âü(£ûØÇ ód%bÀxâŸè“ÊŒD:bÏ‹·w¯ª"š%c:®Žâm qŒâ�n7}_Gx`ˆŠYŽÛ³]Ö_}¿Ô h?‡°?ÌÒˆ=Î�û¶Új«°ªÆÃ,+Úwß}ç̶À`¡#G­ )Öz D =: =¶ªYD`Jüò—¿L¸bÝÆo<Üøïq�{\«Î¥e³õöéø¢{Û (�¥ÕQœQ¸ÚRÿøÇ›h•ýk¯½6A©iÊ1EüU¯zU­õØ{ï½·ÿàeÆHÙèx¬"JÿLñ.«;†E]9XÀR„¦\ìl”~ °ˆ™ÖÛF8Þ÷æfŠeóÃþ0úĪm°”è­o}«ßÇ$½Ô‚ß™?ÿùÏÑËoª¶­|"Ð5Y¿Yq]“[òˆ@H@€�†Â" "�"À†\ŒþÇ:”]”:JÓºÇéQŽu13n¹å–Øêý¨uÑÔöè ƒ›o¾ypW=øÍo~3¹úê««ÈÉÉl‚½èEÑ#óT÷¤'=)Ùpà }ÍUöˆˆUDù8Åû&ïXDzÿC“³˜’NGÏy£ÉL‹ŽqÞô¦7%Ï}îs“­·ÞÚoŠÈ8ë¤QøYkŒ‚Ϩ.Wú=”)S"³Ú}ñ‹_\{ô”SNñ#ž¯yÍk’g?ûÙ^‡aÚ1KEé¸ãŽK0hŒ2õ™Y"¶t�©ÿU6H¬3mÌbÞt¿Ó÷ubS¼ËÞ­t[E÷±ìŠU0 1’_÷Ý:æ˜cöà=Æx¶Í6ÛøÙHö~Q/†>ŽdéÊgœá÷ˆ]Öè?Æ�&ŸgÕç¡|³E€¿¡ºm�*“'ëÿŽ6äP�"P—@õÿýê¶ r" "ÐCŒ üñÑ’£\0uÇ™î“c²º€²Ž¯±ÆÑk¯©óî»ïN¾÷½ïù«¬�t:ËÎ>ûl?EÚFµÃ<›l²‰_O»‹ºÕÁˆŸûÜçü…R?Ö8£(¢a øç?ÿiÙGòÙéߦþ3í¿lçk¬Žâ�€Ò&µX9X‚ÀRdhj"”×·Þzëy1Æ W±Ç^šÑ¥Î² ŒA¬»eƒJfóüèG?ò—ñÁø�±­ÎžVGèkúHCaèúó¬$©ˆÀ˜0ö€ˆn�QÖ‚ã3:ÆôØIº6�|ò“ŸìGÀÇÙ?ÖÙ­õßûÞ—<ÿùÏY,FHc�Ú«Ú(33˜ �a¥ŒMygª¸Ø‘hFhíd�ªm”É�rÉÎï1ÎFÿë(Äyípê­·Þš—œoŠy•½¬Œ ô9Æ™�*¦�°~¦ò?ó™Ï\nL˜'6ÌZþ¢õü±õÙï›ÖÿÇ’S~˜,�åç7NVµ." 'pÄG$œµëX;k Ʀ›nZY©‹m§jþº€*{0µxÜŽÑ[\‘ÂÁÒ‚�vÚÉçëâ?(„ìkÀÒò-¶Ø¢òшl¼˜·B^_M�ñΫËâ‘áŽ;î°ÛJ¾ÉQW!Îj$vuØßgŒ!"Öèbíð|ëκ`éÐK_úÒ¬nw&N3:ó($ˆˆ€D� —2‹€L;�ýë_Ég?ûÙèn²ÞÏ=÷ôåámRáŠfP ®€©ðe‡)ey›JÇÀôñ"m|ðÁµ¯¦dͪ‡÷‚ M)Dùgt¾ªcÔ½Ê a}uÞ°|VxŻɿ‹X9X±þúë{ƒ‹­‡Ïê_:.ÖÀ4{þö˜}³Ï@ºÝ~ðƒI•c!ÓåÆuÏß?†,f±È‰€ˆ€ô‡€ ýyV’TD` >üáWÚ?-Ê.»ì2\ßÌZô.¸ºFwËvxG™Úwß}ÇÖM Ö�£ü—MegÝ>»˜Orÿ…4qŽ4ã;þÇ>ŸX…ÌФâ«£sû`(kÊÅÊ�åÑã}Ò#Ρü¬ÍE9¿îºëÂèÒ0ù«ì@Eë¹uù‡rˆánk×|k?F‰dœ5÷_üâ£GŒi¯ŽCÑç(È=öØ#aª4ʼnÝþë*ã^xaô©uÞ²þÖQ¼›7ùêÊ�A„µùU]l;Åø›àys5áxŸ˜E‚A騣ŽòGûU™¡ÓDÛV3I8šp«­¶šcP“ÀÉ�þ� ?ÏJ’v€@�ÑÔˆ=AòQÌ 0¢ÉÆq±Ž�ý½÷ÞÛcÝy�)÷±mÆæçý® êû²ãŽ;ú�?üðäw¿û]­YeýB©bývÌæmÔ‰ÒÄÑŒìÀ¹è?ûÙÏvÓoÃÁ #Ðî»ïî×¼[[ˆ‘h”iøuF¢ÓŠwÕçirgù± 1u`ˆ ïf ɪ—¸ùby`8Âø‚ÏßmUÛ¿¶Ï@LÊäAfN�!ïÒñÇŸœvÚiÑÇ–µ¦£Üo¾ùæ¾]{—,�e%üM6eä°z‹ü&yµS7­ëò•õ«ëò—ÉÇ,)9�jd¨ÆI¹D@¦˜ÀG?úÑèóÄÁÁˆ‹ñqΦn]t($g�uV”h13¨˜³§»J¦+ÿæ7¿IÎ<óÌ‘Îgôž)ì(�\(¶{~Tg\fŒ)PþžúÔ§&'�tRròÉ''7ß|slU™ù12 œ15zõÕWæA9â½àÕÅ*Þ<”6f�ÄMŠd�•<»º3²daŸŠóÎ;/+)7ÎfCÄÈñÏþ3¹òÊ+sëÌJ°vbfªdÕ“Çï &ú€Qi·ÝvK~ÿûß'§Ÿ~zÂé%M8êÞl³ÍüRú*]„i—%,ãXöÓDT‡ˆ€ˆÀòdXž‰bD@fŒÀ§?ýé„‹cÖXãëùÈGFM+Ž­”üL}¿øâ‹“sÏ=7ªšÛo¿=*?K˜öαv(¬FIûûßÿî/fY°¬ 1u[^ŒLÌÀÈ„‘‚ åýÉO~²eñï F€»ï¾;á8Cþî(Çoïj8º?,4 ôówÌÅß±œˆ€ˆÀô�`zž¥z""0>r™&ëøØç£ºËŽiØ;í´S©ˆE Aiá Šòžð?:ÎÔd5”jS¬³”l[ãOyF( ›\æMÕ ò̘ÞÌy”»«¯¾:¹æšküsÄ8PÕñÜY–_ ÈÚ¦C)«òCPöšvfDI×[dœàÙ6íP€c�ou 3±Šúfý²÷ß–֖Ïóå]æbÖËwø{»å–[ü €*ò·goj0$''" "0�d˜Îçª^‰€D@™«£D63‘ìL¥¯2  i¥…vµ·‘{”(F!�¼çž{< ¸“/Ë(Ð6,úËj.Öê3ê�âÄ2vYgäyq¼va,Ba·’dí·Í¥¬~”Î,ÃB%¹¬î˜ô6Œ YíWÝè®é¿Ÿ,YŠâx/¹Ø;ܽÇü½Ù»Lw\0L/µ±²òE@D@¦“€ Óù\Õ+è$}.”�®9좩ê“VðºÆKòtŸF*3Téýíþó’„" "0Õχ4jCD@D@D@D@D@D@D 2´‚U•Š@;ú>‚ÓwùÛyªÍÕ*¾Í±ìbMz¾í>ñßv ´[»Þßvùªv˜&2LÓÓT_f‚@ßÿ“ï»ü]ÉÄ·ëOh4ùô|GãWVZ|Ë�–.¾£ñ++Ýg¾}–½ì¹(]ºF@€®=É#ôý?ʾË_áM4‹øNë�ëù¶‹X|Å·]íÖÞç÷·Ï²·ûTU»4K@€fyª6�¾ÿGÙwùÇö k6$¾5Áõ¤˜žo»J|Å·]íÖ®÷·]¾ª]úN@€¾?AÉ?ÓúþŸ|ßåïúË'¾]B£É§ç;¿²Òâ[Fh´tñ�_Yé¾òí«ÜeÏCé"Ð%2téiH¨A ïÿYö]þ�l¬EÄw¬¸ÇÞ˜žo»ÈÅW|Û%ÐnízÛå«ÚE ¯dèë““Ü"èûò}—?x� Šo'KcBéù6†2³"ñÍÄÒX¤ø6†2³¢>òí£Ì™ð)% @GŒÄ�X}ÿ³ïòÇ>¯qçßqo{z¾íò_ñm—@»µëým—¯j�¾XØ7�%¯´I ïÿIJþÑÞŽ¾ó+ëý¤û7ëí—=ŸQÓÅwT‚ÅåÅ·˜Ï¨©â;*Áâò“æ[,Ýè©eý[ºtéè�¨˜š0%RÝ�"2ÑQšˆ€ˆ€ˆ€ˆ€ˆ€ˆ€L ¦äAª" " " " " " "PD@€":J�)! À”˜7o^¡øK—.-LW¢L͘¦§©¾ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@rÀ(ZD@D@D@D@D@D@¦‰€ Óô4ÕÈ! @E‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀ4�`šž¦ú"" " " " " " 9dÈ£h˜&2LÓÓT_D@D@D@D@D@D@D ‡ÀœxE‹ÀT(;vÒ�.“¯ëçÔö]þI?ÿ²öÅ·ŒP¿Óõ|Û}~â+¾íh·ö¾¿¿}—¿Ý§«ÚE`¼4`¼¼Õšˆ€ˆ€ˆ€ˆ€ˆ@� ”4zÜ5‰>d˜�‡¬.Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ zD@D@D@D@D@D@D`È0Y]ôˆ€ˆ€ˆ€ˆ€ˆ€ˆ@�¬5ÿóçK�ÊÁ¥èŽЛÛñ$ñD@D@D@D@D@D@D  24AQuˆ€ˆ€ˆ€ˆ€ˆ€L-�¬YSÛYulª ,œêÞ©s" " " " " "P@@Ê}%M͘ºG:;Ò�õì VD ë?â–.]ZTLi" "0µî½÷Þ䕯|e²xñâÊ}ÜrË-“w¾ó�•ó+£ˆ€ˆ€ˆ@¿ ÈÐïç'éE@D@DÀ8÷Üs“_ÿú×Q4¶Ùf›¨üÊ," ã$ Á�qÒV[³B@€YyÒSÞϬSÞå±tïÎ;ïL.¹ä’áõ�ü#¹å–[’Ûo¿=! É’%Éüùó“•VZ)Yyå•“‡>ô¡Éšk®™¬µÖZÉl�l¸á†>n,«˜aüã£{ÿ�‡<$ùóŸÿœlºé¦É‚ *•¿õÖ[ýß}¥ÌƒLüF¯ºêª1E”WD@<ô"ˆ@³dh–§j›0�®º.ßu×]—üö·¿õ×ï~÷»äòË/odYÅꫯžl½õÖ £�O{ÚÓ¼a`¯JÿI/!)“oÌbÚ,“Ò|cúÒFÞ2>£¶kÀpwÿûß?¹öÚk+)ÿÈ�áo³Í6Kî¹çž(q)ó“Ÿü$ªLlæ¶ùÆÊ›¿LþIÿý”ÉÛßqç/“_|G{"e|G«]¥E@š$ @“4U—ô�ÀÕW_�|÷»ßM~ô£%ç�w^# Ã5×\“üßÿýŸ¿H[o½õ’]vÙ%Ùc�=¼2‘ί{�x§Ÿ~zT¡G<âÉ +¬�<øÁ®\ΊVþ©œ½äD@D`Ú`øÈ2É 2mOzºú#Àt=OõF*`³°N8!9ꨣ’O<1á~œî²Ë.K¾ô¥/ùkã�7N^ô¢%ûì³O²Ê*«ŒS µ%SCàŠ+®Hþõ¯EõçQ�z”Ïϲ�ªîøCÕ¬sò-\¸09þøãý ý�ÏA3s7ÌÁØãxG×Yg�˜"Ê+" "�C@€0Š�i$ÀzýãŽ;.9ä�C’K/½´]äCð€H:è ä%/yIòš×¼&Y{íµ;!›„�¾ˆ�þO¿ýèGûî±@UW§êfÖîx€÷õÏìàÚ{ï½£ì¿ÿþÉë_ÿú¨2Ê,mÈñ×h¤Ug›æ·Y¹ê覧±þvç�wNÞúÖ·vFùé°±³¶ÝvÛäýï¿_—¦+,"�O ÎÈ<F櫎Èó;RÇ€�áAz�_j åüg8+)uÞÕ-¶Ø¢ÖÒ“Yaª~Š€ˆ@ bh)¯ô�ù1½žÑ“ .¸ ó=`9‘Gé§ 3Sá¶Ûnë¼ÌP&M V©bJõøÀ弪R~á…&7ÝtStWm¦AÌ^Ñ�¨@oľ«ìSÁ—SN9¥7}” ³G ëw”�VåD ‹ôfvñ©H&h€ÀâÅ‹“Ã?Ü�úŸzê© Ô8Þ*8bÀk_ûÚñ6¬ÖD g˜=ó·¿ý-JjSÊc¦ÿÇ*n&P�¶¬¬üé"À2´ØY$,áˆÊ˜wuº¨©7" "Ð,íÐ,OÕ&� Àf`oxÃ’?ýéO��g!¥¼ë®»’ûÝï~£T£²"0µø;G±Šqu”òº6d$L3bžÐtæ=ÿüó V1î1�yŒÏ³YeLýÊ+±í×Îÿ±Ô”¿K4 KOC²ˆ@Î<óÌd×]w� å( ¿úÕ¯üùã àQ"0uê(æøˆem~UW§�•VZÉoê¹êª«úýª¶¥|ÓI ö¨J(Øiš0�ï„z%"0~2ŒŸ¹Z�ÖsÌ1É ^ð‚äšk®i­�qWüÈG>Ò7©ã&¯öúB V1G)_k­µülXÅ]{íµ Çwƺõ×__£ÿ±Ð¦8ìôfŽ`XqÅ“ûßÿþSLF]�ñ¨ö?ÿøäQK" 5 °ÞÿÀ¬Yº¸a«¯¾º�GyàcŒÑÃ;î¸Ã_wÞygrýõ×'·ÜrKqE‘©‹-òŠ £‡YìDV§ì"0uØ4ó¬³ÎŠê O1#ª±Š› ¤Ñ[#!±Æ*Ž„åÿ›˜wU¤E@D@Š ÈPÌG©"Ð _ûÚ×’}èC�ÉŠâͺËM7Ý4yìc›¬±Æ•¦ïbøÇ?þ‘pòÀ_ÿúWÜ`Ö:¹ª‚®³Î:~ó'ö�Xžgÿþ÷¿—O(ˆçúÿ:mˆ®¤¸òÊ+®§õÿ1´”WD@ª� 'å�ÎøÖ·¾•ì¿ÿþ™ÒÄ ½Új«%OúÓ“§<å) #ýiÇLâ10u˜QDü{î¹'a$’�š­ßd“M’g?ûÙ~³§³Ï>;9餓ü1NéúÊîmú¿6+#¥ôY%;¢ '•�ÙTíŸÿüg²îºëzcCU£¿ë¹Ü™º�õ{2«ÏlVû=Ê»ªÿfõ­Q¿E@Ú @TU§Œ‰ÀÏ~ö³äÝï~÷ÈÊ?Ó+ŸûÜç&[mµÕœ©ö(úŒþ?ìaóë…«LÅg4’³Âo¾ùæ„uÔyêSŸšp†8òž{é pà4 22eœ1±JF:SÊcöÕøâ¿˜ÜvÛmÉ 'œMXÊ[4²©,û®�›õÀT¾ê”ˆÀ„È0!ðjVF%p饗&o{ÛÛ¢�ÿ ÛåÃêYÏzVòŒg<Ã�ê“Æ¨ ?£„øÜ› ×öíãbíæÆoì�ðãXBF7Ø`o`³BFË3�ñx@YV¥‹ÀLˆUªñˆG$+¬°B­5ÕìóQÇiývjÓW&ö]åÿ N©À€Tåÿžé#¦‰€ˆ@;dh‡«j�V 0ÊþÚ×¾6ú<åP(6õ{Õ«^å§õZð¾üå/'œ"�v Øs fêg,ö.¸è¢‹’ .¸À/W`Šóí·ßî§:3뀑Ò5×\3a3 7ÜÐÏjHËs+_LÝEyQÌ®¸â ÿΰ }d‰ý]yå•=g Bô‘çÂTñ´›”üi9òîËäk[A-k¹‘Åý/ùKÂÌ#6Ï\²d‰«¬²Š7Àñø¿‚ß(~Ÿø¿’>Ñúd>φþ�Õ=ß¶ßÇÑGµ!ã" À¸H«�ÚÒ?úéûÚ÷´à/~ñ‹„)ôuݶÛn›¼ä%/ñJu 0Ue{\Žö@¹á#éÐCõÊhؾmØäÇü§�vZò«_ý*ùÍo~ã•âª:Œð{æ3Ÿ™ì¼óÎ�Δ¨*CÕ|ç�wžïç‰'žè•M>èª:Œ›o¾¹ï'KD˜2.‡a‚+ƱT%v“9&˜ 0aì¡Ï,7iñ³]Ž?þøäŒ3Έš¹ƒlÌÊÙrË-ýÆšÐì7°®€Ù51ËjP˜½ãP8c”)އâŽB’vwÝuWòóŸÿ<ùå/™œrÊ)•ëå÷Ö{íµ—çÝÖ;‘–7ëE’¿c. •œ®‚ñˆ+ËhšU‡Åñ~3{cýõ×÷FØvØÁ/ɲô¦ün¸!óýþõ¯ÝÏÖêãÈÙº#n컘׿¿ýíoý;Å{uÉ%—D6xŸ04m¿ýöÉsžóÿo^[ãŠçÿÀÓO?Ý÷ëœsÎI¸øÍªêàû¸Ç=Î_ô�ߨµÖZ«jqå˜�y²˜M€ú›tŠ÷-à^Ö®Ýù¤¡ âÛe÷øeC‡|IãÛÞ¶ûÐ_è,þpÑ­æ>xWsJÇÃÜ(Øjî#àaîo5÷ÁºšûÏseÕA¿¬{ø8W­—"n Ckmóñ±ãŽ;VZ?Ÿ%ÄvÛm—¼èE/òI|ˆ<éIOš32Ô¶üY¿7(a?øÁ’O|âs”ŒW¼âÉ“Ÿüä„UŒU\žü|¤}å+_I¾ÿýïg~œV©;�™PÞøÆ7úe éô¬û<ù²òÖ‰CIãTˆo|ã^I¨SGº 30v¼á oH¶Ùf›trÔ}ÖóOWð®w½+ùö·¿�Ž.¼gc:Ž«ÌãË~|´cüa¶#ÁY Š1KU0Š1úÈÅÇ,£vU\º}N¿8ì°Ã¼²;ú™×Ö»îºkòŸÿùŸÉë^÷º¨™@J>øÁ&Ì.ào+íÒò[ú¾ûîëß)»¯âŸyæ™~‘*y-ÏqÇ—ü×ý—ÝVò¿ð…/$Ï{Þó†yQŽa~ì±Çú‘ËaB�3b`ÌR©¬1±Uæñ¥”0f… ˆýñ�ôǨ¢ðWù›‰•Ãò3Ëj§�vJ^ö²—yE´H>+Sæ¿üå/¯µQdY½£¤c(«bÄÌcM<¿Gu”7âa¨jÊm¶ÙfÉ›ßüæd·ÝvÙŸ'–¬>O>ùää{ßûž7ómѤÀ¡|—]vñ�*uÇÈŸUߨå³êLŹ&–Å?K¿éÄáø¾Ýí®sÓkÝÿÅ×9#ʵnÅun¶æµî¼Îý¿s›+Lj×â”oqÄÛ•Žc MÙ…läñ2üðÞEù´"Ÿ4~{|gý�þ™:(_r"ÐY(Yq½éP¤ (ÉU6Ï˪ö‰O|b²Ï>ûø$FCP˜Æ7iÇÈÔÞ{ïí7<ú裇¼lˆ‘"f¤2Ý—³Î:+9øàƒFÁ›þ¿Œ¦#�<Ò+ܯ~õ«“w¼ã¾iÆqÏtàC9ÄÌe)¶£ÈÀ‡"§7pñA‡i³3F©7¯lì¨6ï°�ÖÉHòw¿ûÝ¥²êÚc[Âh«¹·¿ýí• V†‘çOúÓ G`6í˜fŒ1‹w/Ö¨`SªcŽÿC~Ò‡cC¬‹m‡ú·Þzkß Sü™Iô�ï|Ç+Ó±mgåg ôÿoïÜƒï»Æû·ª~�é?LÇŒ?¾Ô¥¨TTR‰Ô=†¸KJÝïwE\ªÆ¥1Š"H#u«k]2¨k\"jj ¥�¢ªZÑF‚\åûÛ¯ýý<çû|Ögí½×³ÏÞçìsÎû™Ùg­õ¬û{­½ÎzžuÙÏþók¡�´Q Mô‘¿øÅõζX/“ÀìÌ3ϬËÏ}îsÃ}Ý——1–.S"f%®̼_úЇê±%òDû£DFðŠW¼¢^E#K…ûÛßþöúècÉX„2‹‡ÿ%M,<œtÒIµòq¬<•®å°’+B` àóyLÖúrV±Ø=�ðÔQGMBø·ºP&¶C>þñ�¯�'pD!á®�‚áïIOzÒìøã�¯W£†þ­Ü˜¬ñ‰4V:P8,“ØŒ`B{¾õ­oÍ®jY[¾��5±Ý7:Ñæ\íYg�U¯˜R&&�ô#v+ 0+þ›êƒÐÌøúþ÷¿?c”wm áß—ÅL´_·�ÿ÷i{;Ç1Ø5!¶#8ñéÏE•?œ?æHxó ØDŽô”–��#(¿Î=÷ÜÒ(Åá(?[É—-ü§d u|Ík^V,YZ(θ_aJ„ð�0zgGÓK¢cRŸú3^°³åÞÄxqÆgÔŠÿ¼à³1…ÿ´ü(šPn0&“÷ÔúHZ^¹…À6 À6´òšÕÑŸE÷Ÿ·¯Y•). Ñ?2æl4+ÔlofE�?aVݧF”ïÖ·¾u}F•I+Qb›&GØÚ�¢yùðl3çH_7X±ÅšU;„ÜÈùþEËÆ¹dv;°2Ú§?¶åÿ•¯|%Üf¶ª �yÌcêÏZr¤dA�±ˆ]€mD?;í´Óêö@�š*¡`�Ü«A›DÛ¹�¢ÁλG°C¨A @1E;�I(B8–4´’�óÖS!Þ™—¾ô¥³'>ñ‰½ÞúÊÔˆ; î(!vv=íiO«�Ep÷Â2 üŸ÷¼çÍþò/ÿ2<¶•Ê…¿ø‹¿ØuÌ®-Î~(Ë'¹G¡H�Õ! #«Ã^9 �b¾öµ¯Õ“Üâ.àð€z;..·ŠLþ]2K±"pñ5‚>Ä*í3žñŒz5¸Oü!âpñBè«^õªÙ=ïyÏ!’Ü“ÂçžQ !äîÉ �Áט,SŽ¡”s}¶€³-›»¸Ôqhc þTˆÉ ;øN÷PÄ ÿ÷»ßý&'l¾îu¯«Ïa/ZO¶p³Ó%Jc0@nû0“×N8¡þ4[´Ì«ou)Y µòÑ�£[Þû*ÖE6þð‡ë»& §¾æWÿ}]8æÃÑŒbVô·’t Ãe¥ü¶õyë\Âȶÿ±�‘Dëòô§?½÷»ÐPÎöY8ˆ–3E$Š™eÞC-£Â �MG@ €MoaÕoíà“n}ˆsð¬øóg{øá‡/ü‰¡>e; _ˆ|³xì2YúLˆù¼ÓÄ–É{ßûÞáÛØ‡È»+ &˜¬2-º›Ëû¢ß6ï*Û¢þlF€H¿3�Ò‰ö˜b¿kªsm]=ì“[ÿ§v{|Žð)/ŸŒÞ��¦9uJGV‘Kˆö[�’|"aºÎÿ3v±›%æ åæ³žõ¬pÑøú _¿™*ýîïþn}Äd¨c4S­§Ê%¦Œ€Sn•mëàfhÎcF ¡…o·C1l�Ü4â !ßBsxQÌ8Sºè6N„â?øÁ ßf¿h]Úâ#ü?¿Z-\„¦¶̪?+‡˜þbRŽ›ÐïJ¿ °&CÅe<àK lÏç‹¥ÝþOº}\¶VºÒ\Zö±Ã±[…¾°M]@Ý>úÑ�Î~ö³ŸuVsjÛÿ)°]Ú´àE/zÑì-Õç4§LŸüä'C;£Ø™„Ò`Š+ÿ†3c$€!"S,�}ËÏR9 !PŠ7å›I2@IDATrÑZ”¸éŸ?׫]íj³ë]ïzÑè“þùç×·4—LL»*Ã%o|JŽI"_± ¥ióù¢E'R¬ÄÜùÎw®Û¢«,©?+j�{Üãf_þò—S¯°›‹ß¸ÔŽ]!׸Æ5j¡–z²Ê‡ ³èöWUìx¸îu¯.¦¦È ²|¾Š›à‡\ùG8§¢d`µ}ÑvÈ�OÿæŸÊç[!ÆQîÖáxŸ­%”l¼Ã(nQŒr4�O‘þøÇ?î•»M(';1¼"2—ùòÙB.£]„�¸\õZ׺VÝ·À�ÿ"Æ'ŸlÝçÿ±ï£)¢ãÑ"uR\! v# Àn<ä“B ï÷Öù<Ĉ‰ÿ&¶œ/²úfŸ¼å-oY¯5]&‰€Ì1VÁøF}bÍå„}¾ ÀÄïcûXŸlë8ÔëÆ7¾qýyÅÝèF�}�‰#ŸŠ"¯óÎ;¯W~¤Á¶hMx¶%<5€­Úù&»ô;¾u¾‘ÞÍo~óZh@0O� ¸¡”ù�ÿø�ú¡]¸l°ïd›²æ”%uˆ*ú*Æj{¾z€BÊpF�AˆA@F¹Çý*(ûã‚ñqÇW+£i0žP†RB(ãL;u¢/åÆwú Šc.üÁ~P¯ÀìC yá­m»Gè·Œ5~g q£—ê!D!’ÎïüÎïd?ÿÇ¥�Ñ/xìúÙaÇkºÆ:Þuè;ßùÎŒÿó>—>¢æÿ®KÙÄnÆ‹>^Gyd}i0}««^(8 ÙqÀ{QÆSÒOǾ>åV! ú! @?ÜKŒŽ¨}VU˜^ûÚ×®Ï.›3za—˜Bñ"7ì3ÉáÒ@&‡ž˜HÛmѬ–³’ÆjÎmns›;*8Wù…/|ÁG)¶ó™:v°bTJœ©=å”SJƒï Ç$‹KmµÅ°ŠD=†¨3«EïLfQ|ñ‹_œq#vŸijÏ>»žðsÁS„˜Üyab$聆ÍLRMpÆgÔ_h ßÅç�<þøãg7½éM['׬¢³òÆsÄGÔɲ’È–óÏþóa�ŠlˆVŒÜx¡e)ÚÊ„PÁwÆyÏ»¾z‚ Lç;ßÙëü:B6»AÊ£ÔµúÏ»‰ ùû¿ÿûõÃî�.¡Œ¾ƒÐ �;ÀnûÛÏ8fÁ3úÜÕAé †MÄøˆ°ï•9ˆ¯|å+›¢dùwºÓ�f¦ÀÎ2Ó>�€Ì§þPàD …ÒI'�4W¨Y|”3×¼æ5ëÿÆUÆYÆUþGPŠ0æ2³’U²¢4@ À˜ÞD(¶ØÕ%úJ,þŸØç‰þD¢/b',u¢�Ñ÷Qøðp¸~îsŸ«æmÊJÒawéF>GêË%»‹# Àâ*!0 |kÚ&s‘ ˜øBLÖøãÞ$bËíË^ö²^UB˜çì6#V=˜¼#œaÏM\�™3‘d¢Ç™Ì(1ÙG b2_BLæØúßGg’v·»Ýmv‡;Üa¾e”~@`âÅÑ�œ A_cU’I.Ê.ÆÊáÑV~„øsÎ9§V<´…Kýú(ºÒ4R7udÂͧ0QHP/0L@™Ä‚1ÛúYmg5†öfo“T°c•‹óÂ}A¡† ¶Ÿð¢X L´Â�M²)›ØhÚäè£�žñ�ð¯~õ«ÅEsÒ'ŸRŠ®þ“nE˜÷ÝíëŽàŒðOQüx¬ ÌØáÃ{ÏŽ‹�|ä#¥ØäÞµC)èŸ7»ÙÍjÅÂ?m–<«�Õ Á- ËØAÿf·}œñ‹>ôÒ—¾4<®�ý°M@9ÁŒ�x¯¢d}(¢,µ“Òp†KŒÀŠÍ³Ÿýìðä•"²:ƒ@ͤb++«ÝLtÒIMÀý–p„˜¬ÞD?9ˆÇ N©€•œ>G˜X=ä!©W™©ýA‚Ç E®zs+‚‘­<#0rt�£QââC„ݦ‰j.=¿j˜ó�ðtŽ:ê¨Zl+ƒß‚Е#Ò¢ß=ó™Ï¬WòraÚxfö Nú}w:¹¶thC &ãFL¶9{ݲN›" P—õUPöR�ˆòôÉÇ׃6¾ãïX·9y!` œ¡dA¡ÓF(Š8þ]FàE¨ìC´?;BPšQn„0”Ué{ŠmÈn„Ù¦~“–�thÆ=ú»|>õ©OÍÎ=÷Ü4x«E uí"vø;gØq!Ú ¡š2#pG©k,gÛôS…Œ¡'žxb=žPòàhxúþVRVÞç»Üå.õN²(6Öô•¦1�]fQâXš ÿðü'ÚdIZ(Äy¿x ”aüoñ_‰àíoû®#!„±i~lƒ/B`¹H°\¼•›(B€@¶ÓE‰ /äL¼€MgŠá9?ÙçSa>O~ò“ç+lÃŽNÞ˜ø!H# >úÑ�CÄIV»V>P0ô¹œŠ ÿ#ñˆùú[È›&Œm@Ðø«¿ú«ÙÙÕ–~Vÿ"ÄN¶¬FòB®¶l«¼”; ü,˜´‚;X%µw¶é²BÇc;/ˆC¿‹¬¸V¼‡ÜÀd"oÚ£ïÄ—rSžè™j[Qõ+¡VÆ63*˜#¤ÒæQECß¶§ 9‡M›{æ7¸Agî @på²¶1†°“ ¡¨C°ÌÝñAß¡ß X1Ž›`Ý‘“–‹´ø´Þ•ÓvhDߥy‚•…¶ä²Ô¨%2ÿ9bÌŠî¢cúÄ;ÃÂïÔ".<(GX€@Qò–ê^vP™€±lh²÷¤)ÝEߟ¦tÅëˆÀboû:ÖXek€—Sõ¹ýŸ$È„Ž5¨jQÙÆÊÖÕ(!4q+²M(™˜ ,Bw½ë]gLT¹˜-Bl1ç(A×Äç…/|a/¡aÂŽ7°Zx‹[Üb¡ Ý 'œ0{Ç;Þ©f½•žzú•À¶èçQÁ˧‡ÐÉ 0Ûãý–òÓNLnM!P:4a‡-Þ}ú»F˜äÛ{ˆÉ.+‡/ÄÎ$?ºJmçò»ú�/Et¥Ôò±wͧ×f�*H‹¾uÿûß¾ò�öf‡M¤žÄ3¢�¢ýA½ïòE¹f !„„'Êa<+Û�fD1gù¢ˆö;úý(B(X¡Eì\~”ýä“O©c…Üvѯ8^UçÊÃ.Ž�±£§”PPú }<”¦´ôü6;ÿô9Ú–ÿŠEÇ&ŸŠ”쌿ԓcsÖ˜£�ïŽH�Õ! Àê°WÎB �¦ós�vŸ.µÝ*}•8¹rÀûÀ>Pñ¡É?Çg·ŽC@¹Äc¼‚1'ÂÛ_ Ç;MP„çÆÕ>7ÿÛx`y¤ì¥aÉã˜cŽ©ßMlޱy‘÷¦4…B )š±‘�X|z.JLN8_ÌD­þ¦gŸO;í´pu˜À±²! !ü[!H;JŶ Ò—³ÿ¥«Ô–·0CL¸˜¨–Þ¿Ídõ‹´"eb’Êc¬µ¥�_t›0qXUâ6nà-ºLžNO?ýtÏ*²sÿ€õ¶Á"œEQ* úEd…/šõ£-¢Š¶eG•?ìâ!Æ;v°jžñÁvãO¦«C@ €Õa¯œ…@4üÑó·$dŸhzûd¶�Kdò�î(±­aŒUOVc‡žäô9GK»"ü3!Ï .ÿ÷>gË…Jœµ„XiÎ¥Å. �Pލ+ÊŽ.bõ7z±#»\ºhS.™âN&êC“l.¯ŠÒ=îq�ZˆAÃ¥ZCnså3`QaÎÎåGÆî?ˆî@2ECTx‹ ‰>´?ÂÐÐ}�Ë+#dÛâûˆäƒ Ï�0<âB5>¯ÇQ›e�}M&2æñY¸(žc�ÿçO„hW»�íñ&xGÒ( [òUŸNþ©BÀÇk²säÔSO­ÿÙ%$B`»vÖ´]Ø©¶B`øÜOt[,a5 Zäìs�À„~¾ýío‡W=�;¬Ô¹�Ô i›ŒY˜Ô´6E8N…Î÷¼ç=i”N7Ÿ”‚X¥G٪ߙøN€¾u¥ž]ô�ï|'|Ù%Â&Ĺzc_?àKbÍVaˆ² -F…eÊa €ˆ`Ž�U4X›Dò¡ÏG•?û«sÓ(U¢;À¢�s»Žç¤ñY±††¹°Ž�ŸÿüçëÏÅ�‘]J™–ankÛH=ûôUË'¢¬êª?÷ 8‰ý‹Ý?(9V4´òØÊÝÍcãpNØïû>pé%G–¸³„K5ûìl³úÈB`½�`½ÚK¥Ý¢Ÿù2H˜81y±‰‚ñ×Ùì#³e“†ÙNjÐÐôYq¶­Â¦ðeâ“�v>ÒóÛìLú4!»ü±-|_¿ÈÙq˃ºæêiþfFÏ ÏÚtÑK߬ 9³Ï®.†äýã=´UÓ\Ú}yQ¬è£”ƒw!'44•£�ðfmQ Ü‹®‚öɧ©žžÏîŠ(™ò)"·åÁe˜üàgúЇÂcA[º‹ú�9})rk{ß>D>Cþñú(±2Þç¢Äh>Ñð(öÁ‡'%û´^Ê/q£ìãB[l(øe“õñ’tF�õB`ïH²^åWi…ÀRk5ÀW‚3�}ÁƒIZ[Ûüúä9vœO|âá,ns›ÛÔqØRÚGx-ɰd{{šŽÝ,Ÿ[¥ÿøÇ?žïtSOÚ“•ç¡VÍrý£ÏgÎPäê™V**ÔŸ•B°DðÊ•7Í#êfòÿ©O}*�Õ~&Ì_ ƒ¢BÂ?8y¡¼¯h>$ ì´‰(ú´ý”V¯(Á×÷ vA ô#|±óbjDßalá‰Ô-Ú‡|>(Ñš(R°íóÿÑ”÷ªù(|›Þ/¾6%cn[=ø´-ÏÛÞö¶:JVŽÐÙÃ]+¾¿·¥%?! ¦�€Ón•n XdÀÐÛŽ‡†?2IáR<ÿé ’²0‘dÁŒUX+Ct‹4ñlò–SJ|æ3Ÿ±¤‹M»iÞ¯ÒDð-ͨO]Qäê™æ™³F;G„�4ß6÷§?ýéð7µþ©3‚Û†‡&ÎSs®:B& F•CÑ6áèIªh()gTHD0¤¯3Æ¥GhJòk Ý@ßfœ‰*=¬ lógw·ÓG>gñ—eÚ¶üÈsî,ˆ*3¬¯ò^Eçž{nøXÇPy�‘ŠÞ¦‹¹aŸ G£wwt•óüóÏŸ¡œ65ï Šuî�9úè£g·»ÝíÂ_3hËsŒÿ¯¶üä'¶�fUë6£¢º �"½pÍŠŠ€9ue-ÜúŬP�>7WÛŠ»á3¤ÉÄ(J¶r’ Æ|Ã9ºëƒÛ”™ô!¥Ÿq*Å·´üѺ"ÓÓz¦ù!ÐFoç6eÇ�‚BZ®>«†|.B(ƒ¢Â2e0¡*"¼±ú×WÑm“h�ƺ%žUÓ¨à„ÒÃ>ÑöæLÿñÇ?{êSŸ:iáß÷¡HÛ‚%«ï²¾ɧ+}Z»Â­ƒ?}�ËXÛþßûØÇŽ^Wü_½ûÝïž=á O¨•÷½ï}gg�uV¸Í› ;ôÿWS>â �mG@ €mïªÿäè³âJ%xÛ&“«hG�¸À)J¶ýÀ˜ÔGIc“ÛT0þ§ú§pQ­žEcN˜˜ÈóI±5Õ3M#ºÒL|[‘Œ®j§y7¹¹¸�û"ĪÜu¯{Ýúl®] ‰_6*,Ó'À Áaì³ÛÖ&E ¯èÊ÷B"سË(ªä²:[_/iC„§W¿úÕ3¾½®$ý1€9})ò¾Eû*å&»?c¨zôùÿ*ï¡Óá‚_ÚÁ”ȹôï|ç;×ãPÎo,ÿçœsÎìQ�zÔŒcïz×»>†0VY•®»�`7r �•#Ðç|9“§¦ ‚V^¡LJ„Ö¯ý뙘Í,Òd"‰"dŒmØ>g>Ã%›D#”yŠn—%®}2«é»Ê%øú24ÙÔ¢çJ›ê™æÑG0† àËÅVðè7µi Þ=vbä.èòé÷µG…*Ê‚àP)[´Mü;×&œ¤õŽæC|ÚŠÖ©ŽÔòÅ–¤¢e¹è¢‹fzЃf§œrJÑå˜-Å]šŠ-Zvù\iÆQ;lUÙ̵«tR`>ɲ†ÙÏÅEcO Ø%ÊÅ7=šUt�/+�¤5´0”Ö‰ÏôEÉnçïÚ�™Ø²³As(A!­[Ÿ•Y[ nRƤyDݼ ÿú¯ÿŠfª)cJ#G…7m´G´FÛžò[Ÿò–xÒ�Ö™8àË{\¢ô@ø?ñÄg}Ž4‘תˆã6ÑUyv9DÛ–ve¼Žö¡6\x�£ÇÚÒ[µ_‰€2ò¿ç<ç9£��%8°£ínw»[ý)Ë’ð #„ÀjÐ%€«Á]¹ �Fú(l²Ã„m]ˆI_Óê2ŸkòkªÛ$¡ÈV䦴ºø}V—®s�ëì¹¼Œ s4-.cUŽz¶):ÚðíªŸùGËF<ê µ]ÔÆ.—èÅkû«óõôï!…º î'zœ¨” k× ý$B¦”ˆ¼ \pA}¾wì|H?*t£È Ý1‡ã¢e¡�QBP–¶÷�zò™C¾¯Þ§_¿±rOÙ'PÂñòIÎ>‚9ùGú C2eÕ�ïuÅe¤ÌË‹¥g‰Âé!yÈŒ/·œzꩳ>» ‡¨ÛÿþïÿÎîsŸûÌÞÿþ÷×öIsˆÿ¯>ù*ŽØ¤Ø––V=×�¨àKňsùå—w^¼¶. DWÿ©—)†œHæðBÙ])¶� éª8®qîm€PEpqX)}å+_ +ÝúoˆQÅRŸ|Jê� rÞyç•�‡‰ôÃg=ëY£ÿŒ'\DÈÃŽ~uÌtŒ¡à\<íG}0�*S([O—PŸÿ�’tW†�OŒù(}»N”�÷þÁ~pþŒ3Θ¡L_¡„@ÁeŒc)GWQ/å)6)6¥%U��A 7�+©Ü…^¸6çK»êÓçSˆL~¡’U’®üÛü9³Ï§®"Ä' ™¼1‰óÔ§ž&�]Ï>ÛyY¥²sÃm“U„Í(�!(ø2P_>·!1[ ŽÄ‹„� Uœæ„ÿÈjy4ê€�H;G £¬HGÈÚ>²]’þ"J�®²¼ãï}ï+)FgÞ©Þð†µ°ŒÐß•7 Ò.�UˆŽ3ô›ýÕÎþ‹"ÿGÑ>ÄxA>¼GC*Ðú(ø‚ÌÐÇK:¶ ã}T™ž'œpB­8àRÓüÇ ©+(ZgÜ'Ÿ|òìôÓOï »ŒmÿIäßgñeåVB` ¤U¥)@ 2áòÙp[{tbíãOÉþãÿ8\„k°ë|¸¨ÏY^ÎfB© �˜“†)Æž¬"¨¡TŠ‚ø§õLÓˆ®F2qãL2B“Û1ˆ›à£»1쾃±Ú‚]_ýêWCÕ¥ À«DHô G…7v=ðmrÚ:r÷H´í)£)LÉç˽ˆ=Zg_–¶>ÎXü‚¼`‘¢Õï97«ßêV·Úó©OK˜]6Œ(}x/L`ÇôõË_þr‹Rdr×ñÇîC¢¦Ô,*\A >ã*[Ö£õ-(Ê`AÚú[.úÃÑG]c{ÄGÔ;8ŸÏ�3Ë<ÀÞ³[Þò–¹bŠ'„ÀŠ�`EÀ+[!Є€ xMþM|„æ¨Ó”ÖªùÑOÏQ^&Á%cSŸïÄßèF7ª‹•Nâ8w%» z,AØÊêQ”šêéÓa•%*Ú�C ¾\}V í]µ6ñé ag·It²n[·#Â2Іè9uS4DÛ$*t#ˆ"�¢dZ¹- ã }±KéñÚ×¾6|Þú yp‰¿¯/«À´)J'°  %Êbî!øÖ·¾eəև"mû“Ÿü$¼Êl_3ZðŽ~ÉPègà9Ö»\|K H[X2ìþ¸éMoZc>Ë»Î.²åøËøÃð#–~‰ÉΪ7¼á 3”EaIÚ #„@¤è��b �Q°KÔ¢‰óGÞçÁh>Ëz(+Ic‰o†Gω#$ڀ鄽O{1©£®]Ûi'&mg�uV8 S´MèÁ�³×²-à}&Á¥ù ÀDÉŽaŒ¥xŠ ¨”¿�ðFŸŽ¾sÖ&mm�âÉýÑ výÐm�²4z—G‰Òãg?ûÙì-oyKZõ"÷ npƒúÜ´õ+"QoŽq À+Ь±“Ç.‰-�Ó§}ùË_.M~ÎúÐÐmÛg\eLçë_ÿúóòE-cŽÉѲøð¼£·¹Ímf(Ö¿_}¢�ÿ¡?øƒ?¨ƒð0&ÿÛ¿ý[í‡?J£! E&éZ¿2m¥%„@?¤è‡›b �Ñ`µ«qÙOôæ>ù,#NŸ “ã±ï|ç;Ãç™h11ä\vJQ¡‹øË¨ç9çœS¯ ¥åmssÑBJ×NŒ>BíX‚‚¯Oô^â"4@~»uÍè'ŠÊ!„ÚÀÊVR”h>¤i“ùˆðÆJtT¸°¶�(JêÌVh.*‹�•¥­ÎùÈGÂÊÊÀJíÃþðù½ Œ(üNŽ>g”û¶-})r´%º«‡:ÓWÉÇ+<à/J}þ?„)Ë&}‰çðßq>ÿ§?ýé …ÿ›^ñ��Ï�¢äS¤‹G2˜ŸØ˜±HZŠ+„À0H0 ŽJE †€M2£ ¢ÝçÏš­£S]‰(­StbNºlms‹!“Êw¿ûÝ¥U˜‡;òÈ#k»ÝÞ?÷¨,}cדò½¥Ç &g•!Î…·QA�w"zV[r~}„”1¼ka;—w/*¼!PQ¦¨°͇<øÚ;"J·>moBC›ÐÝ„_?ZgÒ*)ˇ?üá¶l³~Œ ܘNg C@㲿!(Š98s¼A1ò?Ý€’м†nW0cŒŒÇÆüÿˆ–gÌðô3úœý'±C„]Yöð~£ÐåÜ>J'vrÀ¿øÅ^Ç IƒV(ÿÆÚ-5&^J[l"Rlb«ªNk�·=³Ñgó…/|av¿ûÝoתєÀ@AñŠW¼b¾òÆ*×_ÿõ_ï)b� މÍXôÖ·¾uÆEqb‚…ðÚ$”õYq»ž¬ÒFÏÿ#(˜¢£Ký‚ý$*�DÚ‰°}LœÇX�c%.B& ‚U„¢B¢­ÜŽ­hà}æ[–Óã3‘úåÂF%Jœ/}éK¹ìZy÷¾÷½ë1Ÿ<ت�ÞҹœKa9!ëCÁœÝ3ÑÏÍч ¡êêëÈŽœè¦ìžãèÓ6ýŽ1ÖÆnvð`Q¥x¢ð;î¸ãêý›¢Ä»Án)¢È)¼)ÆÁU© �Þ°¢ÆYêè¥\dxî¹çÖ—ûØjlïB ‘ Åi§�6{éK_ºK±qÇ;Þ1›SdUÑ`‚A>c[ _÷º×…“f7tík_;{~·ÏÖqê9æDõ%/yIG.—B`@H³›ñs`qé!ÛJ#„ˆ‚!"�DÒ·°}¾ �Ò€ÉóP)Cá­�¢Áv)EÛ$Z'ŽC1D ]íÁ8ÑWéÑVg.W‹ö#êÆûqQÚ�1ʼè…x}Ú–zGï°v‘fW›Eüû\�ÊøM¹D7‚U.,ã-Ç?xü!”\4ÌûøÌg>3üÁ8ÙgÇ[®|â !°8ã-—-^6¥ ¶V�ú[ç_ÿú×gÿœ#Û9ûäÝç¿ÿû¿gxÀf/|á w ÿ„GXd"žÞ]Ð6Énʇ[Üûìšðé�Q§SN9%¼ú�0líh«]>/ìÑ•ZâPÏt²måNËžº‰Ÿ’�ËùåOúÓi�N÷íoû: “ú¶<¹.ª¤1�¤ViÁ}]S¿>‚Š¡¨À—æÛäŽ ¨Ô ¬˜ ³k¨­Î„‰ åÄiR4´åE¿�^´Ø”eX„¾÷½ïÕ«‘‘4¬¦c“¯ó7¿ùÍH’uXÎ^“»…P¶‘åÕÆûEûqÁœ�‘÷­O½-ý…G´Þ¶µÝcÑeG‰Ñç虥K×™ºÊO{±0qßûÞ7Ô7 ”2‹àkéÈB`ÆYº¦lJEl-w¹Ë]fó7Ó«þŸúÔ§fûØÇfw¾ó�çñ»þÜç¶|èCš=ç9Ïi¼õ�I« 7¹ÉMvåÌerQbR?Ô ŽÇ볟ýììmo{[´8³c�=¶^gËcÓªxŸzr“-·¾Œ¾pÆ7AÛÜ>LÎÎ¥P´U”ŒLˆ±Õ¢¦4†6›òiã7áR"ˆ¤éþèG?ª¥§ñÛÜQ¬Ø¾K_C@Í•'Ç#ÿh>¤C›sL'wI\¾Ñ£”ͬ’7•Ÿpmdå±0¤ÓW0&�¶²0Eɶ]›‚¡$~ «§÷‹¶-;’“h×ÈΖèöêˆÂ�üìh‡•?_ÜQB=ŠÁî_0òe2ž7-§O‹ÿnË7:餓wƒ¼éMoª�‘ÿ‰'ž8_¥·¸fâßUÂFêÁ±µèq)Æ þë#ùXd !0RŒƒ«R !À$„í¯Üž%þðŸñŒgÌnv³›u®(EÓ. ÏDê¹Ï}îìóŸÿ|kVÆZlË?eg’Ð%Hæek9Ù-nq‹œw/Þý×ÍžøÄ'†·Ü3±Eñ­ë¦‰Ïþýûë0‘v9p®÷w¸Cëíó–gÓÐüÉ›4Ÿð„'Ô7CGÊBØ;ÝéNuV/»ÎwF/Î×ÓH·Ïq‰\]|½½Ÿl¯F�…â©Ï½>³sæö/xA}”Çx%¦ ËM €¦4¢B"—ƒqk{ºné7ám{Ò£N9Eƒå×eæÊ½°Ž4Ú”V†è¹sâ!³âŽ’0WVK;5Ó÷ÚÇe«õ«_ýêÙG?úÑ4Z«›ã6”%Ú‡~ðƒ´¦›óä}3á_þ\øïº×½n$x–cUïz×»fÇüüÿÈ—Éðö¼p&™Ü+óüç?öÿðs_úü#ñˆ¹Û[ØýÅQ:ÛN�ršãi·½ím}°¹�òZÙçÌKŸº°£/ª`.C^‘1²©ÌiäB :Ð7Å£"ÀŸåŸþéŸö΃óz\,Ūî2 aˆó�ò'Ò)ü³’ÆVe/xلľQ);#.¯Ã$�EΫ³º½ø�2³ƒÃ„Ö6e~}„›³Ï>»ÞUÑTG�[W&¾O}êSg\ %.¬¼ñ�o\Gã“eMyÁ§]¢ß€g%�ɰ­º¶¥¿¨ŸmIŽbÀíØ~‹æÏ„÷ïxÇì¨£Žª¿6�›ÀÉ’òp„!z'ƒåm“¨¢!”]´ BiI}JÃDËÒ¦ôðyFÏÛÓ×P1¢ìòiuõCÖÛ?÷¹ÏÕ—µq¹jôH”oÛ®ü½ÅõE©GÙ›È×+bçöú>Ä-÷üà³Q-ÿ¬g&Bôk^óšÙÑG½Kø')Ú�ÿ�®U0៰üO1Wh:úG˜ãEꮾ(ñ?u)ˆ£é*¼ý� ?vŠ)FEàAzÐB«ž\îu×»Þµ×e‚iÅlÂÐd"D°}œ3ï¬H”Lìž¼íô¤'=iö¾÷½Ï)²³E˜/N@œ¹õŠœ\\H]9bEBØLÉ×cûþýû÷L”Óð�õ}+Œý}¨­ži¾Þ�%âØŸ–·GÓ´ðì ³´�Wbò.°síë_ÿzIðy_æ.;_ö8õÔSëÏõ²’ŸòQ⡤B‘ŸRîr`”¸/zÑ‹Zÿ³|¹Ò4KÝ(%úM´c¥Êîè˜TZ~…BàRÂB6!0)Xýºÿýï¿P™dï~÷»×[Šs�®ÄmÒ� Ç9ô|à³{Ýë^³cŽ9fö–·¼%tß+,39ÀÊH”˜€?ýéO¯/´´¢&+á(Núœk%/.]ü=y¿»�‹[U£„RãyÏ{^½*W’¯ÃNv‹ð ø¨€ìËÉ–|ûT"íáÉç—Úû¶ yt)|N£—%š0ÙÑ@ýRJë<¦Ò#§ÌLË“ºÙÃÑ¥´œæNçnŽ30æÜínw›qÿK_¢MQ‚qY[Txîs¹ý�q²„ ‹“ôPÛŤ%éû0|e…ÿ4ŽO”äG˜âxìc;cwÂ+_ùÊÖÝyvil®?å–?÷°û¥î¿ÿû¿{“Ý„ögþ4)ÿ�×¹Îuê6aœ !0 vϦQ&•B�N>ù䯋€JAbë5ŸàcâÁêήÏÈÙÄ'Í¡ñÌ3Ϭ·r#0>=؇P�OÓʱ�-�¦Íê žwÞy¡¨œ÷g–UmÎ9ö!ÊÌ™ˆUÆ ÏœIøQBðd¢Ê®O¹<<% ÛEow»ÛÍ¢g¡-êh—LbgeÇ瑳/rœ>’KÓó¬l¥¦�kö[ßúÖ¥Ñw…ãtÚ±ëÎ "Ñ·þöoÿ¶>³‹‚/z,bWÆ;Ž6a9ÞxÑög /—Ö¡œ´¾mi¥¦aйˆ¢¡é®�4?sû|sö>ýÐvWäÊâó@Y%vá¼øÅ/ž±ýœ´Ròé›�{"P¸òÞã÷˜q�Ü¢„�†âµK±ceðfNPí*Ï9çœ3ã½ñé4ÙQ^ŸuÖY³'?ùÉõ.³#�·³§s>õŒ3ΨVnÙzŽÏd·­ü°BX¶í2ñâB?VÃy83<1Iã|7Enû+y0abe•òD‰‰—"!̳•Ÿ‹sùPOVM8÷ÉÙÆE¾"ÀÅSì€XI¶Û½»Êþ�èsŸ‰*«2ôGTOXI'§PaÒù�o|£žD¿ç=ï ¯âø:°³á¡}h-²Rhß0÷arö¨hgÀmõ?M“>44qt|ú+šô5)Ú�vE0¢ß±Ý™mÙl-FèYdBž+›í”°Õò\˜”G_�*ÈÜ#ù�o´íéW¼CôåÜ{›Ö¥Í� Q¥ý�w™¶ìZ±.rÒò"Ðßóž÷¬ïÓ@`â�ck¼»ŒÅ(_9úCùÇìC¹ã6iySwý…+ŸåÞ ”X`MÛ³õ…,ï ž²zžœ9bÕD¬„³ú¼ÈJø'?ùÉ÷› Pó?Ân'ƤT8ç—ä…â%wƒô¹‘£Uö%†tŒc¼/½³ƒ1å0ýe»Í(?ÿ÷mÄÿ"_$ .Ÿ†åž}hÿþý³#Ž8¢Žj;þÚÒIßÕ¶°òB`1¤X ?ÅÞ0Ò?Ü)TïÁ~p}¹]nµ£où8‡h“ƒ¾i,�íÊLô˜86a΋o£´èC¬„p©Š2&nL2Ql°‹P6„0Fº^(¶IOZ>êQ�ꥰôY=äA@AH£<¬Ò2aäÌ3JœE”–“Ó‡=ìaóà[ÝêVE[œ9Ž!jmE²$n¾%q Ã*Û‡ûœå¶<¨kÛý nH3ÝP’6ÂUtëvŸ|XAD€‹‚mi{ÒÏ ¾OðDW1MéQRÙE¡Ë n‘´¢q­mKꙦÍ }ˆ¾�âµÏÅr”aåš)!}û³CåiO{Úìñ�|Ÿ¢íŠƒr�ç�o|ãœÏXË Š ÆÙ¡Åãlî¿Å˜E‰ÿ:vŒð@(PT¢`¢Švv•!ì3†-Jà�ÞÞãœbzÑ<_�þHÐ;ÅKC€‹w8s¢–VÀ`F¶€�ÚFOyÊSfï|ç;ÈHŸÉMŸ3ýme3?&P|B� “ž?üÃ?,Š->&[D¹MÑÉ?J�Ò"Ÿ‰�‰[b¯ýë×Á¹Ù¹tËst˜ LPšGIºÂ tâ3`l¡]b…œÝ4Læ#ŸÙêÓ&&$FÚ„>�¬í»V*£m„ðU„EêÌ;Œ0Ìjðºõ¤/õÔ8:ÓwçL_œPèr.½­/²«âôÓOït))cíP;â|~Ô Êý7Fwìøt½…ϘÄ8jÿóì4ÜDâ?Ñ+�6±ŽªÓæ" ;6·mU³ B€]”˜›@6É骫ãS%V‹¹Á¶û³½’•©(1‘xÉK^Òy®:šîPá)Ÿ¥ M¶¨š" $�è¶kÒ´•×®>R’$ 猩ﺓlV Û¡\]¢mB¼·(I8+^JÑ|Hׄî>ïR[¹Æ. ýÁg݈w �³Oßoúý˜8쯶—CmǨ˫^õªúx[x ~ì¿1§ˆ‰î^YUu9^È‚„r²­�VUFå+¶)¶½¨þkƒ+˯xÅ+6âÏ¡…ÕòÜ$'mî@ˆ›iü±Ü¬ü#,ÚD”ó¨&¸ôÉ“ö=餓úD5ítâ‰'Î?mˆPÆÖÿˆ ]mf%›-ªôÏe}�/g¬ YŸ‹ˬZqF9B&¬Gò!ý¨ÐMã€ÝI)cWØhY¨oTéñÄ'>±×'L»Ê>¦Ÿ>äËûz“›ÜijF·ÓG .á’q™OäѯÖ�øolºðk_ûÚä«ÀÎ0¾jÂÿï0Jq‘ÓC`=FÄéᦠ�• p‡;ÜavÊ)§Ì·Ö­¤ dÊ*Ó 'œP—Ÿ•Ä®KµÈŠ0oxò["(ÊBQ‚¸ÀÊVk0Ùþ»(1Q"�EËañ€¸ ›Kí ¶™c/i7KƒãßúÖ·ÌYd¢TaÂ6‹/Ä;V¢œ*Hjô &¼EvpYßôŽPŸ|H?*t³bˆ(RŸ’z ôˆ–…÷:º»‚#•Y'²¶]ä}â¢ÚRÌh”°%Ç^øÚ;µ¦®`¼å"IÆž´¬\ŒØçRÁRL‡‡bøÑ�~týÎP—>Çá†(‡ÒB )º1R!0˜p›/ÛŹù}]ˆ‹�¸­þ…/|a}Þ�IuîŒcS}¸…ùå/y}™_S˜eñПùÌgÖß]'O¶ªßüæ7${޼ùÍož„‚‡‹QrÜô¦7­ëÆöàcŽ9¦hÂíÁàïèÅUv|�Ä—!j§®l^öîƒh9Yec%”-ùv™WIQA˜4MHŒæ\(Æmîê“OIú\„Émû²²Dû!°Å�ä·ª°¼oü·Ðïûc·ä/ƒ8‚„à_Z^Þ“§>õ©õ]-‘ã+˨‹ÏƒÿI”«¹ÿFúïT‰q’ûP|a§ÿë¢D-Å•~”RŽ—†‘[L)¦Ø**“hA€?×£�>zvòÉ'Ï÷¸ÇO‚Z’Í Á� òžýìg×ÛÆmåá2:A¾Ë]îR/»tÒ7t¥l’ó˜ÇƒU²Ú–¦ßGØ\µ€:p–›K(­Ï¦õÚ�`’®úuåÁj3_¸ˆ^–ÝþOÿ¦Mhvî”R4Òµ¶�(JÊÓ§ÚUð…“3Ïò‘£Ö¹�€òò¿ÃøF9Ï:ë¬ÙÇ>ö±…¿0“á”Ç{ŶyVË=þ9ir›>—â"lSvvW-ë¿!­ï'ý�~gÿ ”›yɪÇí´¬Cºtóÿ�ˆ*­U! Àª�W¾B`þ™Ì0‘8öØcgŸûÜçêïÁÿô§? õò$˜ ° ¡ÿÎíÌ›É)}Úº-NTÐÖÛêìýØEÂEh§žzêìŸÿùŸ½× v”d|‚�ψòói·‹.º(”vß¶mÊ�–/ÖpoËg>ó™QTþOP‚§J¢¶ö§¼nŒÛÜ¥C_c5�2ò¿yñÅ7UiP>+æ(TùO¡ž{Q’·)œŽ:ê¨z<"Ú›w %ë²þóÙuÄíÌÿ1„€±ˆq]màë;5û:—}jXª<ÓG@ €é·‘J(Z`Äöìïÿûõ�ÈLn˜à³:ÀåkÑ˾Z3ÛñäŸK˜Øâσ c«á�”I<+äœk´‰BIÚ]aH‹I^VÊ¿ô¥/ÍÎ>ûìÁ¾½�à‹Ð�BÅ&Ç”‰|©+_×®ò.âO9h_ðE@¤žÿò/ÿ2È u ~|‹c ¶Õ�¶Û_ML™¤"/BßýîwÃßÊ6Ì£Âæ"ål‹ þ÷»ßýjEÂ+o‹|CÜ™üwÜqu_²¼y£V´[×Mè>]„…è –)";.¼ðº¯ú¼»ì}òéJÆÀ¨mˆ²ð.ñ~1v°K‹¾Ó§�}é?¬€s JWÆ+#î\ˆ’Õ3²�¾-ê̪0Â,ʉÏ~ö³µòc›´PÆÒß)/ÊÆÿ¾ã0í�‹råù�ît§z|EIó�ï|'|gIŒ´«÷Œ©”Ûx¡`äÿáÚ°>Œ·£=âˆ#êÿ"þçÁEý›wûë_ÿúŒ ‡$Æbþ‹P|ïO””¿6¥Å�eQZB@ ƒÀaщÀ0Ù*•e!Pý¹–äeî6?î‡À´Çܘ]ÏU«0(—0íñnìæöæ¾êþ·«?ækVÛ'¯Yi¯Uý¹]³úüVõ'zÍêæšÕŸãÿ£J;õ:lgP—q§ªØ{Ó^¸z'5JÄ®ò±âÊ“[¾m%ˆ•&?úÑ�êçþçfLÎÙÚÜEàË;“V虬äVóY½Ã�p¬N�MÔåßøF-dR?&?Là˜_zé¥EÙ#ä2‰bbÉ$�]L�ÀE~]uêjK3jr“>Ÿ€âB5Vp©3Ên…¦-KAÑ&šlñçIw10f’:”0`å¢ìÑUgV™ÒrŒ…¯•³Í¼ì²ËêÝ ô-”0(ؾýío],ǤÝúJ+�;íBŸãóƒsìj!¯R¢M�9æ˜Òàóp_üâgÿùŸÿ9wwYxø‚ÇΘÛ|îO»Gw7 4Ó‡&Ú�w'B¹~‰OXæYôÊÀ®”cŒ_]„@hc/ï,JHßˆÏ Ÿq—öAèŽ(~Ù¥ÀN§EÉÏ'±ŸwÞyõ8…ðO½¯xP q\ ¾ý1¶ò l"$£lB@·'ŒíhR¤Ì¾|� J)'ÿ‘—\rÉìòË/¯íð~üã×cîÏ~ö³Îw’± aŸÿ”û÷ï¯Ít #_ÂòÞÒ®üŸÚÿJ®|VÎ&“2®¿øÅ/ê`àË{ÖÔ·ù5¥c|úïåâœ)«'ÊO» ˜Ž(}9{ŸúçÒ‘Wñïó�*�cv šwÕöª/ý²Âùüê?ù§•æüjîõÓjŒ=¿š“ü´RΜ_õ)èŠ�‡ v3ÍŽÛž”weå×õP6ÂÔeÜ1½»bÕ~m&~ó Öýl_"! 6&¬’ð (þð‡?¬· òΊ‡ÿ_(˜0BàÀd’…‚Œ€Ï„¦mÂ�ð„�ô™0yX&1Qa‚ÎD‡‰Ž aÒÆJ“:&JÔ�Ÿ‡I4“ÌÜ�:0)cå,] _HVü˜Ô3±s„$èç?ÿy]× .¸ žTSWêO™™ØcZÑ^)ÁCiÃd®ÏÝ iz97m!ú\ºR‰?FXÞ V4éô¶»Bà�’Í„„ÞÞ!ú¤õ±TyA»Ð·þ­¡Ì‰ÿäOÛö¡ˆ€HúÔ¥m,h*C4òhz'›ò(寪Òö•({ ú >ÆcÞ]ÿÞ‚9qšÞ[„´ý• é4Þýè×úö¡6Ü©3c eDÙÁÆJqJ”·´_1~Ó7(/cýDš´ï! 1ɼëÖF– eÚˆÿÊlÄÿá»þ+ø¿BèÇ$ß!ˆü)+ÿu”ýÆÿïŒ/üçS~êüù?¤måbL¦=—¥à÷å—]�aЀañœ\jÕŸpº"nî6?[ñÇîÝ]«ÿøkÀH=aos–eÄŸ>B N&2L"„@Ã$!‘‰“&c¥“·H^}ÃR7VÉò“ŸÔwTÔ—¥Æ$›º1qb’Fý¢xGוlo(VϨ§í@p(%Ú‹vdŠÒá!'`”¦WŽòFÚQ^¤´,|Ó|snÞ'l¬°Ùd:ÎóL`MKßVCKÓ²tÛ&íΛ´EôÂPò0E…O«ËŽBÄ L]á›Ú¾+^‰W?LûèXeAPc…™¥í@_AÁÊûjŠ„Ü{ Ö`!SúFâ䦸ù0ø1^¡„AYÉÓ4nQÞÆ)LùÏa|^d h+Ÿ/+ÿ�”“‡¶âÿ2‚)åçÿŽ=Ú]TZ¾®tðGØgŒ¢üØ©C$}Þwû¯çž~×çý/)«…‰”Ïâ,Ù¬Š¨KÆ\Ù�„À0*È‘ §d…€&Q<ž˜|!lð0áaâˆÂ‹É&&˜üé3ýÈäËç=–�I«³Ô‡‰«kLÞ¨/õãœzQ”š`ƒ9õún”•-å<“;ê‰0a»9¨?íH©+íÈ„Žº¦‚§¥;–™æÇÊkYé2!æá6ØÛ Þ'ÜÁÌ`ºp _"ôŒMôóeäC=;¦B]ø/KA(ä¶tˆw–{V˜y‹i„HÞ[L{oKÆ'úܲÚ6Ò®”� îxŒÀ›úÚ®Æ*ÞžU¸£dñ«è¼Óü�ð~ó?Â�z!ßþ+WY~òf¼á1kúå·~føƒ;D_ã¡Ƴø2…€Ø,¤Ø¬öTm„@1üÁó,{Û~q ÈDØ &5ùè´aI;–“¯ì ˆÀ5E¡k‚P©H (%ºeY Ëol“ñÈþ‡ÆÎkÑôM±²®ï¹)(Úv"lZÿZ´Í_l2l× ! „€B@! „€Ž€vlx«zB`“Ð ö&µæÞºl{ûN½þ›¾BØ…ÿªë¯òí3ÄÙ¦Þ¿7iÕD¼èM8! „€B@! „€Ž€Žlx«zB@! „€B@! @@ õ! „€B@! „€[€€[ÐȪ¢B@! „€B@)Ô„€B@! „€B@lRlA#«ŠB@! „€B@! ¤PB@! „€B@!°ìÛ‚:ªŠB`mèúîÚTD] Sï?S/ߢ�¦úµ#xàÀ�ö÷íjßU×ó³ +ýIDAToêå[uó Ÿö>íøÈWlÚ°I­©º! „€B@!°RÅIê^J!”‰" @0B@! „€B@!°ŽH°Ž­¦2 ! „€B@!°Tr+ü9ÞR ¥Ì„@)‚€)¸B@! „€B@�uD@ €ul5•Y! „€B@�I àwxûU®"Qk ¤BìB@½rr! „€B@! „€ØL¤ØÌvU­„€B@! „€¿Â?pÒJN,�}KÉE™! 6ýéo@#.PµÿàUQÅïÀ�‹@±WŠ@Wûo{û Ÿ•vOe.¶ íØªæVe…€B@! „€B`[�`[[^õB@! „€B@�­B@ €­jnUV! „€B@! ¶)¶µåUo! „€B@! „€Ø*¤ØªæVe…€B@! „€B`[�`[[^õB@! „€B@�­B@ €­jnUV! „€B@! ¶�}ÛZqÕ[�½t}‡xo q„À!Ö½ÿ¬{ùµÄfÚºÚgÕß‘WùÖ»ßM½ýÖÝÅK¯öYC¥  í0$d ! „€B@! „€Ø`¤ØàÆUÕ„€B@! „€B@R2…€B@! „€B@l0RlpãªjB@! „€B@!  ) ™B@! „€B@! 6)6¸qU5! „€B@! „€†€†„L! „€B@! „€ŒÀ¾ ®›ª&„€Ø(º¾ƒ¼Q•¡2ÂoP'”dWû8p`¥¥�zùV N•¹ðYu ´ç¯öiÇG¾B`�Ѐuj-•U! „€B@! „@O¤è œ¢ ! „€B@! „€X'¤X§ÖRY…€B@! „€B@ôD@ €žÀ)šB@! „€B@�uB@ €uj-•U! „€B@! „@O¤è œ¢ ! „€B@! „€X'¤X§ÖRY…€B@! „€B@ôD`_ÏxŠ&„€B`Rt}§zR…ÍfÝËàÀ�L­¦ÃêÂwêåIá36‹¥¯öY ?ÅBàÚp Ù„€B@! „€B@l,RllÓN¾b¹¥¢•†{?Ç›|íT@! „€B@!0›1·Ý3¿mà /!0:RŒ±2B@! „€B`›ÐÖ6µözÕU €õj¯M,mN#Z×Sç&6·ê$„€B@�­F qî»Õ¨¨òKC@ €¥A­Œ„€B@! „€Ød´€µÉ­»u“`3Úqj1׆jàÜ„æT„€B@! ó¹®ãÉ*–Ž€K‡\ ! „€B@!°éhQkÓ[x=ë·o=‹­R¯´—mÏ ‹¦¬×�ê�rÝ«°ÑåWû,Ö¼›Ž_WýÐâW[~mè¬ÞOí³ú6Ø¢ä˶¹w.üÁ¥ªFЀ(bÛ~ÑÁÅÇ7{άyÕ­ùm/⪹B@! „À&"`ó\3­Ž©Ûø%æ"qKÒW˜ A@ € iÈ V#7åx­E—" y ! „€B@L››™–~“_Vn!°R,ßFGÎ B9^¹ðÆk2ÛÒ“ŸB@! „€˜~ÑÊÛ«‚Úœ·©Ì]þMñíÔOn!0“@� �¶�$õ³Á)åû|, ¼=v?xb÷nŸˆìB@! „€B`Š$óW?ߥ¸æÆl¢¦0]qšÒ_ÔH ŽPŠ@n°ÉñšÒË bÆ#Ž·³4’vSžâ ! „€B@�ÑðsW³cš}§»æ» /2÷Í…ÍñF¯·2X?¤X¿6[e‰ýÀâíV¦”‡Û ƒ™òæn?PúÓÛ}B² ! „€B@�© `sV3«rÙ<Ó(Çï�oqÍLÓ3¾L!Њ€­ðȳ?àXϳÁËüÌLù涸æžïpƒ§¥!S! „€B@L7�µ9®™Vvsc¦d~Æo cþ2…@RÁ¤@øÉÛ‰fƒ—ç7ò(m°LÍŽ2È[! „€B@¬ �ÜÜÕx®P¹y0Þm|‹îçÓÆ“)BH‚K�+Ò�'u{�R?ÜöX8s›Y¯þgK /S! „€B@Læ²n>kó\LOm|ÎÛsixÙ…@+ûZ}å)Ú`òæ¶É3‹�ºá/gÖJ€«\å*~à´´dn0]ßù®þH7¸öªšX �Eß�®÷o±Ò)ö¢tµ¯ÚoQ„×;¾úÇtÚ¯j‹É67×5ž/xÊónìžR·÷“]´" ­ðȳ?ð4 P)ßÜ­&gK¾òB@! „€+GÀ欘éCávü[ç½U°6’±y±…ƒÿ K¿B ) �Ú‚`mƒˆ 8ÆL`ÉÙ-¼ù[ã7š6xšæÔÜfnA;¨ŠB@! „€kŽ€›Ë^YU¥qî›øQk kvo6Ù-fµù5Å�`u€*ùA$,¼;g7f›Ýü÷˜&ìcP%!„€B@! F 77õ<ìNðÇ~åŽÿžùnU˜”GùŒgöœéy©ÝÜ–¦HìB@ €]pl¥#Rw(>œÙs¦ç¥vÜ»I{ȘA´©â ! „€B@�) °#è×E±¹ì�¹lŸ]¤eóàÔô~ØÛÈâZ˜Ôm|™[‚€[ÒÐWÓfo3½ŸÙ)ö=�  ©9p”œB@! „€/ü›½Ê€ù.J€ˆ"ÀÏ‘)#nÈÌÔ^{êGt! @B›ëï«eŽg~˜©¿¹KLÂt>6PJø÷°Ë.„€B@!0Uü¼5µï¸»æÀT­m>Ýäg�˜¿¹S3çŸã¥ñäÞ@¤ØÀF¡J 6H a¦é™›íÿõY)Ët¡^JR! „€B@#`óÓ4‚çÛÇõîjÚú«ê¹¸z.aÞZ™—UÏ•ý×WVT°Kè·:ÍÓ¯âx^¤Ž–F$ŽÂnRlQc·T•�"ˆs §¹Ís‡jLð7†·ÃKÝ.1çñþdœ¤“)Ë6Díp°õ§ªšbß\vŸ©Æ¼)Â0É2Ið;Ø,ê3ÓèžkÒ�L5æí ãÝÎ^‡17¦Ù+j»ç9û.?ãcî(®Ü1w¹«¬—U X•¼ÿË_T‹X¿¬„ÿ_2—­ì—1·­zå‰<Öi,îºNÎô<ì�…9èÚýÛæW‡›ÝQäÚD¤ØÄVí®/w©´×ÖóÍîMìöP"³{s×êæÊê¾”+«Á²V0>£5­Ô+*Þ¥•àâjÐý ý*l-ðc®zæ<ܦ ¨üçvÎ ü»Ux¨Æ†ð8ÌLùøAÎÿ c÷o)λc-ÁUý™-!e±(„Epüøz—ÆÇØçP�¹Þ)û�âc‚�’)ÒÄߥÆaÜWǹk>î&Þ—�_¥µË½×W©Lø¯üj@…Ý.@弬þÙpqµýÿâJÀƒàòjw€)låL«RŸ0uw{»ÅOÃx~ÎÞ”F.¬x‚€Ò�]Õ` ª­œÄÇ‹Ÿã“dê׿6?L{H2w›Y+Ð’VæeUœÃªmTª�óŠê(ÀeÕe€s»îwž«VáPØê¿)Lè÷Ê�šGº@‘š9^ª±1ÿƒ¬ªB;Ê�÷ü‹¶Ë”`· 9&Š€úéDFÅ-HoG^“A ¤Ÿ"Œg <ç%þ&ø×þ;~»ì;‚ü<œ…Á¬úw™Uþµ°�?ñwÂýÚÜð¸ñ¿šÃ^VíX½´Òp”õ²Jpi5§½¼â1Çõ¿·S>ÿXu=¯®ÃN8ïovL c¼Ômü\ØÚ¯š»¶Åññe_s†Ö¼ *~�j°2aÕL¢§vscÚcápÏÏÝïø{w½¿¦Í^ ï;ávÙ+a_%ìï«Îû_õjW»Ú>žê.€}UÑ÷Uƒ,_¨…~ÌÔ]ñHk¾#€0äáL«O­ ¬=U˜¹}‡g‚¾ñ+ö+x5íÄ3'æÜÏ3eB@! „€#°KX©æƒÞmv̹}'ŒñæÿN˜ZØOíUÌk!x;|ük³R^Ô ó¯ÜWTóÁ_WG®àÎ*Vþ+¥À•BàŠ*-v�¾™ØsnãçL«~fÇôîʹËÏ»±CÄ1ªíUÙ=Ïüdn(Ú°¡ [P-^ôRA5 kƒ„Å÷nìч� "½+(«‡4$y.¯S˜‰`ßdoS<�þ˜ö¤nãWAæaàA©éy©·'‹ëy² ! „€B@ìLSž·[irî*ëšR¿.¾ùËY¤È²ÕLX›ìþF>ލà{w—��ÑÈÒlr÷ô, nzã›IºÆ']ÿàçÝf¯Øs~jÇ ÖÈÛÛxæ'S! „€B`/ÌßRòdarö:ÀN˜œ½�g~2…€B@! šÈÍùdñR{í©!à�À£±}v‹RAµ$¬ >ÓÐ5;&� åæ&Ì¢äó n¸Í4;îÜCÞžïÝf÷&vˆ8žR·÷“]! „€B æožšÜðí!¼Ù½ÙÄ7¼ÍÄÏ?¤ëÝ»/S©�²·é”R$liš ·&H°& µ¤b2 ¼¶™]E±ø>�ÔÎiÂ?v·ÙkFËé5=–®ÏÓÊdù’4¼¦Çû›ÝLâxêrû°² ! „€B@Ä`^ç)ç¶¹!áÌná¼;µž9"ü6?ïßä6~jú|-ÏKíUvu™ÌLýS·…k3ñm9Rly¡ú FÅ6(‘EjÏñMxÇÞD¤E¸”,LË?g’6üÜCšÆÏÙ�‡ ÖSêö~Ø»üÓðr ! „€B`[`×F©¿w›ÓÒ2{Îßû™Ýó6?ïŸÚÍßLŸ¶……çí¦É¤."!0R ãF'Â@„àj¦¯,¼”|X‹ƒia½ÉÀg+ÿf’^“"€¸^ø·t�oî¦2ÀOòkây?³cBÄñ”ºKý|8Ù…€B@!°í0Ÿk¢ÔÏ»mH\³››Ûû™Pn&~fÇ,µ[8‹Ÿº-OÏ7&äMïgöƒ¡ýúð‡¸² �)@¶ÐÉ`á…Ws›™Bbƒ |Ï™“É@gÂ~“ii¥é{7é›2»¹½Ixܘ–/vKÇìÞ¬¼÷ø§<Üž,=ÏÃÞÄOÃÉ-„€B@!°æp9Êñá¿Ëžó7žÈsvxÆ÷fjOݤo¼ÔnycBæ6{ÍÌüX8‹—1¾™æŸº�/sK�`Kz j2`4 µ~0!Œ¹S“¢��°M `~Ä�,oâ{á;<ãcÖÊav˯òšû›Ÿç™ÝL˜}Ç:7ÌoΨ,9ž÷—]! „€B  æu)¥¬çy?³çÌ6^Sziž¾ÌØ�|8ãyÈ̃®C¿MüC!dÛx¤Øø&îUA‡6aÕ�4LÊ77…ðöÔÍ@‰�ii¦&q<�ôLèOMÂÙC8³§fåµÇÏxÞôvÒÈQŸ°m~¹´ÄB@! „À¶"�Î=M~Æ÷¦·“n{¼ÛÛMx·pfz¾ÙÍ$ŒÙ1½Ýû¥vK»Éôå"LJ/å{w.ž÷—} �` ½¡Ê 9AÕø©iÉø�Åâ{^.<GÂ#¼CÞ�Ýf’¦ô‰›òpÃ÷Oއ?äÃy·Ù1!þ çЯùâ²µù %›B@! „@Šs¸&ÊùÓÛIûÛì&¼[Þô~9{Ïû‘fêöùx;e7jãÈ̃®C¿MüC!dÛ ¤ØŠf.®$C›ÐšúçÜM™5 : €ä™*HÇÊ‚éí¤Exxf·²XX3sü*Z×Âx·Ù½ÙfÇ/%Ò ! „€B@,Žs¹6òþfÇôvâ{w“½D0÷aºìÞŸ¾w5Ð0Pzáßòô‡*˜ÝL+‹¹›L7g7&D:FÞn<3Ûü,ŒL! „€B@�8móLó3“ÔÍîMo·0ž‡=ò¤Â}—;’v–òBð=¥nï×iG6è ¤…€Õœe•é©`pð® ðrö²Â4‡b%m�¹áYž¹óÇ„¼ÛÛÍÏLÞx˜�ùtíußÌ4¼ñe ! „€B@İyfS,ïov3‰cvoz»…�—>m~©°ïã¶ùùp¥v_ŽÔŽ"­IøÁµ1�¥Ø˜¦¥" $^˜MÝdj<t,¼¹Ó‚Yxµ=M‚¿�Sš–Å¡,mvóÇ„käím<óóf.®÷—]! „€Bà MsÈŸ\8ã™I³{ÓÛ- <Ï7÷"f©" -ƒå ònì)¥¼Ô�†—{‹�`K¿ç.C‹A¡6gZó7wÔLWüIÏ”–/¼¦‡ür~Æ7“0f÷fjϹáA–ÆA—~…€B@! ÆB I¸õüœÝxÞl³ã—úÏ›Ôw©°ïãšÝÒ07fÊ3wάG~´úAk³ÂJ°Yí9Fm€¼€kî6ÓÊA<ÀŒ×eZº&ìûð¦€GÚé“ã·ñÌÏ›möÔ·'�“çË.„€B@!°msJï×e7Lo§tÆó|ã¥þ]|üM)з)�4¼¹ÛLü Ò �F¤h„fó=»Hr­ñs¦H¼’�ÈÒ°|LØÇ�>¤íy]nKÓâXøœéyØ!‹е×mü&3�ßN|! „€B@l;%óF�QÞ»svãy³Ôž†Ë¹á5=”;ççùÞîÓ7¾7±{²ðž·Ç®Õÿ=�lC €­jî…*Ë€b‚lÎnîÏÂ{ÓÛ-Žç¥vÜ9òqsþâm9Ú°åÀW¿eÁr‚oÊóî.{ÎßxÞôö´æ×ÄÇߤ&q<™¿çaoâwù¥éÈ-„€B@!0m‚n“_ŽïyØÍ�š”ÜxMvóÇôvÞø]<ïŸÚsî&ü™VÿkôS! €ºÁ.FT��¦Ín¦÷7^—ie·p‘4,®7}:žoö6ÿ6?‹/S! „€B ?^xNSió#l›¿ùu™¹tºâ¤þ> óó<ìP©ßÁлï6%üï‚cë:°õ] Q— ëÃØÀeq¼ÛÂ¥¼’Y\ ëÝfo3-ž™iùŒof—?á,ŒÅ‘)„€B@!0,Ìﺨ+L“¿ñ›Lò5?+ƒw›½ÉLã§ári¦q,LjZZ)_n!°í؉»(vSw.LÊóqrvã¥fšnÈÂy{¯Ž˜üø8‰×ÜYfX! „€B@�Ñ(~»Â˜¿™Öìfzž¯LÎßx©™¦aþ)ßÒ÷þM¼\ «­ÿs$d1¤0$dîB C �€s<ÒÌñ=/g/åù2çâ¤ùû0©ŸOËìixã§fi¸4žÜB@! „€1Z^—TW¸Ôß»Kì–U.l)�4|Ø\𯋆•ðï‘“}Ž€s(dIP @Ò©�ìÝ»kENyÞÝd·¸fúpÆóf—¿+»B@! „ÀòÈ Ó¾mþÞ¯ÉNZÞÏÒ6ž™i¸~ÇÒ6Ó§ÑÆ«ýtîß ’™" @ŠˆÜ»è¡ ~—°ìý±[Y}9^ꟺ-Ž™]þÑp^¦B@! „À0äâ\Ê]áRïövK»‹çý£vËÛ>�¾Vþ=J²ïA@ €=�ˆ‘"ÐS à“i¨=?jïJß§GØÔmñ›ø¥þN¦B@! „À4hš­tMþ)?u?ÇKù>L‰ÝÊ•¦ãùÞîÓô| ÿ»Ð�#‡€9TÄÛƒÀJŸf*t{··Ç»½½-=óË…ÏñÚ›f[\Nv! „€B@�å"Ð(ï£Í?ç—ã‘T ? ãÝÞÞ–ÞN±÷iüymûŸC!K R´€#¯Ýt(�ÓðmîÔÏ ×Äï*O[¼®¸–·L! „€B@�é"Ð(,ï¹Í¿�Ÿ�ãíd×åîB1�¿+¼„ÿ]pÈÑ‚€-àÈk/J€½‘vsRÁ;u:å¥î\˜Ý¹tåâùp‹úû´dB@! „€˜­sUÌEý©i.�”—ºsñraWDþ‹`R ¤PW#°"%åJ`*�0vŠ „€B@!°Tº„ë.+lW¸œ /Æòì4%üwB¤ R$€ÈY†À‚J€œžãQ˜&~—_®"miõI/—‡xB@! „€ÓC KÐîòOkÔ¾É/ÇÏñÒ¼²n ÿYXÄì@@ €€äÝŒÀ•¢KxÏ´4Ni¸\â ! „€B@¬¥wi8_ó¶89¿ϧ×h—ðß�<:�  y·#0‚€ £y4¼U*/Þò‘)„€B@!0.Qa:ÞJ�×¾‰où4šþ¡‘GR€¤ 팤ð™-x—¦WΗUv! „€B@�Õ#P*`—†+­QIz%a²ùIøÏÂ"f)`)h3KP4gÞìà£á›s–�B@! „À”ˆ ÝÑð¥uí�®„ÿRˆ® )ÚБ_�•äµ*|Uù†ðU`! „€B@�…è-€/˜óBùJø_}EŸ# À Y–…ÀŠ‚E‹*�Q_! „€›�ÀB‚ù¢H°_AÅ�"p•h…‹"0��n¥ý¢ø)¾B@! „À ¬tN8�9ñ *‘õB@;Ö«½6®´Ú °qMª ! „€B`êHðŸz ©|£! ÀhÐ*áRDÐRX! „€B@�HðlRlV{ª6;L@¡ ¶B@! „€Xc´E�OEoD@ €Fhä± H° ­¨:! „€B`yHð_ÖÊiùH°|Ì•ã �"` +K! „€B@¬üר±TÔÞè+½¡SÄuB@ú:µ–Ê*„€B@�å" ¹ârñVn«C@ €Õa¯œ—Œ€ö%®ì„€B@!°hޏ�¤"†€ƒA©„„€B@! „€B@L)¦Û6*™B@! „€B@�Á�`0(•�B@! „€B@�é"ðÿjJEê<zŠIEND®B`‚ic11ʉPNG  IHDR szzôsRGB®ÎéDeXIfMM*‡i     ¬†bó,IDATX �W[HœG>»ë=ºÞu½/µ&¢bh^ñÁ‚ Z © ¡JQ¤ R…Ò�‡‚/B¡�AŸê«‚E¨¶¶Ñ$j¬b´‰ñÒ`¼¬ö|£GÇgWëÀìœ9s.ßœ9sþYÛññ1éÍÆ�ç�Ü:ÿŠô!˲͋Fý(ÖÂZƒ‚‚² k>Y�‡æææ~kooÿ™÷°uUœîÞû ..._¼�EfÞ#6|xxH���Ÿuvv&twwÿÀ:›Wa÷6GŽ££#œJ‡ŒÐ¾Æ€µ[AAA'GáKV‰dY§ßf ¬ŽÀ´òľðCBB [iié×---�XÅÉk~AˆAëh¡Ïív;! È…ŒŒ {YYÙ7MMMÍ—�ð @7®¾ŒúšÐÑÑÑäv»åååß6666°l8¯#q! aTš“¹u4Ùo}}�†††è4"ÅÅÅßqTöúûûâõ÷ÖÄ4FÊâãe}ãåKÚûð�BCC)99·�‡�Ng`uuõ÷Ÿò&‚¼6‚+$�!L)###¿¸\®[Â÷7îííÑä�;ÒÒByuu{Òa›Á|ccc¢¤¤¤‚ét{Æ#�ë‚Vš¯*ýúêõMNRJEÕ0ID“,;f¾WŒ`à$ç¦dWÿ\]¥'&è�·o)ˆ³ÞSP@/ö÷)Ï g±å•ˆFºsÐpº¹¼L/>¤aóÐÁqh=Ü7##éc>ûßß½£òÝ]uîç°O(Ø@tLÍÈ…‚t(�‹�'ûýûôŒwì`cÿ:�´Gû 9×¹/¾y£ÀŠ®u¼2qª £Â†úêÞ=²±ÓÛÛdGýç]ÿÍôë¹9{ú”^OMA˜œƒwitü…¤Ûn7}qó&á0ÃÙñ툺årQ:ó“fgi� êzp„¹©s@E 9€†9î÷çEE4±¶FÏŸ?§`>†|Î�òìlrݽK‰: òú¨˜–#½Y Dpp0=bÇ=yBQ%%ôIf&EEE©o�€Öý€gâCÆÀêT7&kñœýé¹¹ôQz:ñÛÁg–‹îÿ Â2êGƒ˜»òó)êñcn¹bþäˆu¼Rİ(cŽÆ7ÃÔLò&9ðŒÄ�®„]×qª©©¡e.Jü‘¡"NƱ±1`"øFìììPUU•®ªh‰’uÁ@8ïëë#ÔÿÑÑQJKK£]¾ÿ½½½äæë‡‡ÈÖÖ–JÎæf¼ANšèÊÜ4ú ‡4¿r¨««‹ÆÇÇUÆ/..Rmmí…ì^ã«9==M)))g¾ÄŽŒg §„€cç¸ëYYYTYY©œåääœÙXYYQ÷>žË´Þø[�Z;°!öt¡�d±§§G…{xxX…�NœõÌÌŒŠÂW½ÂÂB|ë‰_à , ÑÒÒ%&&RRR­ò—³­­Í'Ÿ€z›K-Þw³\b1ÇãyàæsG"&$$Ðüübplist00Ô X$versionY$archiverT$topX$objects† _NSKeyedArchiverÑ Troot€§ U$nullÓ WNS.keysZNS.objectsV$class¢€€¢€€€Tname_assetcatalog-referenceTiconÓ   €Ò !"Z$classnameX$classes\NSDictionary¢!#XNSObject$)27ILQS[ahp{‚…‡‰ŒŽ�’—°µ¼½¾ÀÅÐÙæé$òatomes_1.3.1/misc/macos/atomes.icns0000664000175000017500000211316315212624223016717 0ustar lerouxlerouxicns–sic12d‰PNG  IHDR@@ªiqÞsRGB®ÎéDeXIfMM*‡i  @ @FQB°ÆIDATxÕ›Y�T×yÇ¿Þf§§gaðšd9Ȱ$@,²•ˆØN$•Ë®Šã$òC*©T‚³Tªì<äI©T*±_’ªTÊ®”KNT±PY•[DÉ6‰U0 Ì ÌÒ³tÏô–ÿïvŸÉ�¡§»�FËWœ9÷ž{ιçÿÿ–³Ü&�Ëåìà �?ì0«Ë˜…¯›½wØì—n-©4£qÞ—�îS¿s*àÛÚÍ^ë6kj,´š4Ë^3;÷†ÙWΘéÒ¦•âëLÅWX1\a½ûVMZýãÒ|‹ÞP§„š…2Ødöñ€Ù? ù WÌ.«8FDQ5 V­§»èè7�?îîVµmVŠr®Û”V˜­×óÏë2¦´„\$„”WM>0ž�³mÒ´§y´ß¥$ÐV[(±,d—28¡jƒ’ó]Þ»|`œ�I˼�™›K ´»'—ºÑ8àë•à¦^VÀ£ªÈFÀeáŠWD>ï¥KÊÏùîy¦á¦2 ðÄ,RÕÜà!ÀóãÆÆè[¶ ͸ÒD!�®Ç”˜%.šÕ%€+©jÚW_›äï›ôööÖuíܹ/ÝÜ|h,ÛöÎÀ€5 ZB#ÀÆ4Uóÿ�Í^R.,«Äš€œÄdQÁœÞÙ±cGýµ%K�yè¡CÉúú]©HÄXƒløhCƒ¥ ÖýTS“]]¶ìæ©k×_I$Îjp©)­{H¨ŠÜw `mܾ}Õéžž¿okûáD4ê�gôÁtÚŽmßnÿvà€5Åb¦Å�ýâùçmè›ßlOîÚÅØ?ëK€¯êªð¾°aÏž=O>ù�ÝÝo¤kj^@ë~©ÉdìJw·é¹ý׎ö‹ lüÁ½*ŸùÌŽ`£7ã Ã]{uªñ羸@àÀ�†žÙÙ¯O¶¶þv¢¡¡£è@eîµÙ¬Z[5ìäXróf[ÞÌ”¯�¿lYoÇž=«†^~ÙÅ ¡jRU X·n]mÓÁƒ{ZZ¾?ÜÙyhQð~(•²°€dúD4Ð5¶·[¸FË£‚,Ý¿ÿ ]2F"¿?jÜ{V ؽ{wxdzúñø¦M‡÷V¢#Ò~°¥ÅCåTÛ¾lÙîÀ“ $žxز”•YÀZu¨šsÈð\¹LÓ¢�]Ãd¿Ùe¥èÑWõÞ>•Ë­½¿–©««Ih`!™iDe O£1 ˆ�“& 4`Q i‰–W¸HÄødT.�Ç­½°ô=šwˆD–t>ýô§/½øâ øIŸW±ÂG› Ü¿¶O*”Zlh(¦ÞÒð×°�šÍážÁâ»!¨Ó8e<$Šû…â'A¤ +ඈ¬�¿|aÝ7­_ÿˆ²W”Ð>¡‹)‘…QeÁD œxj(DQÎ#õUÊ;Ÿ$ Œhq2ß1‚è?ƒö5àà´8CóÒÞ<ð~4ß{.à!繫ã˧E씂b9©im]ÓõÜs¬Kü±k¸cñ •HÀÍo)Aæ4¶$Ç*Š‹€Ô |í” «˜ŠEûZèÌ=s`]�~R¸¹ñ PßaßÂȹÁp�{E¹|^ƒ$ÄÇ'&¾]®ƒ�,Á Âpâ®9ÒbFÀ5˜¸v$8ð´q×zVé”iiY×õÌ3¿¬ÖX³©htU¡Ì#€6´,�oE"}ˆœÛ9àtP´�` .A†_ümT^~È7–{׬٠;p$ |šÈ×-õ÷6¨,ŠK/\¸\“L^+ÕÏæCDw'hŸéaŽ'Éǽ€™/Íÿõ·QÉ�Œ?úÉO~^M¸×…—êª)J@¡ÝLÿE­ê4;––1À%8íSÎ,�o,]]Ê]w­g9’+/ýZïéÚC‡~]Îpƒ;²‚R0¤š¦¦|jõÞyÛŸ  \bðø;‹°yÏéÁ=óçêcT–òî�vkrRMXz•–èæÍ¿Šzl;ÈõòÊdQ¤€§êGGµ@,-a4Œ‰3`šùµïè®]=îÝulNä%'ú4»œÑêÐ#‚z‹ˆbAdõ×¾ö9=¸›*þ‚¼(…÷¥†B¡.òî¹b:áœÏ3uüž@W ¬+s9 IŽ@Ú<Õ>' rDô]½j‰ñÅzµ��kC��|YwVÀQ†[äÍ�³ØE9Ò Éd&ŒvË_y‚�À²�b@h—À{£<÷´#Žˆ0�Å/^´á³g‹!6·ïÞ½Qo„g m’Ê�Éž>}Z�é-ð”æÎöŒèRœ–hw_ß,moСh�ÚÖ«,à¬ID„TWJ°ˆ®Š Žˆ¤ö ~ÑG”§ ´æö~A XDÙ€XÎL2q‰j€¥„ï޶~€G‹€s¥ÊIÆ S»@wië’¶ëä1‘8*ÿ¿©Y#!Ë‹ tD+NÞ�]Õ6«²ñóçmBm£+VxÓ­¬àu��K§âñ UkU:£„Ôhj�PH“&n—rh¤–î¸q#7Ì‹JHŠO\˜¿<»G¦5>éÁäø$Ö$¢ÚtЧq¿p<¶TA´Eà&tF§Q)ÕgÅIÛ9"t�QcçÎyGmµ"±··÷…GΟOÊîÚ¥†þ+Úá*‚ÿÕ5³"�}δˆ˜çÏ% `&PÃTrvöûj¼[©¨p2Ô* Èj°qÁ ÛçUVyк„�‘‚¶‹vV(„ˆ˜v‘‘P¿“ׯë�2éE6Gy³HhÔ³T¿­œœ\û Ê%u/ÓÑѧ:UåU³?Wkº&„gLc™³†’¨’Öºø½BXË—øþ²jÐ`k•‚ Ge7¤�víj×׬âË�–ÐM:IÖW›µ � øˆØzò¤=yô¨w`£e–·`¬¨Û’Åì׆!sØìëºõ¸ ·D‚·u¦ œ¤cãã‰Úd²è>µVþ©[ bú~ôЪv¸µ@¹Þ+|Á±lãFkìé±”âëõŸ¯[ç�X¡IùD@v"mJ«ò‡Ü:’òŠ™"IžTB@æúÉ“gf‚Á£®‘Ë1ý:ùrˆ]žÄ 2ñ6}ù©ä¨Ûõs'9P–ˆˆå›6yD\Ö»ŽèZ¶íIPJãx–ƒl ”··˜ý’.Î`ù²äa¯„—LÝÅ1µ—iɧë¥ý°ÎÕY¼ÊÃòÛ:‚áý½³)MÆzz’ƒ²Î-ü¼�KÊ9ÈÀÆ i\'<ò¾ÀI~¡T6ÈWø(š^qõjêêÚµjŸ—ùz�"¸Nj½^PÀj—yBHÕ%›Õ!”$�ž=vìÇš]2}ßúÖÿè=Ù‡ÍþLþY‹�òföðÄî™òÆ V—P<2[–UBR}™Ìß*¸ü*7DøzY@ˆ“^‰g"Ê£Zà«Õ”‰3g~š¾uëÖÍ#GNÇOžT0÷°Å�‚sošý�V ¿/ðlPÀâù²4ÌìŸuÉ0IèŠÜ ‚• úy k•öÔë¯ÛO{LßÓôáCż¬N®Ð¤è¯?uêͬîÀ÷¾÷fâòeM@^€0¯!'ö¹{@ä.jŠ;lö—�˜ýi—†‚MbWt®yÄì&Ð-ÁDáÈ£¿¼p±˜Èœ±ªÈòóçK4Íuhz@“ãòõmÇ�Û%-a¯®_o±2 ¥býÏ\¿~%90Ð?uî\ß𫯞U�t:©)$›]Öwà¹w@è:¨Æ£—Ìj-¼AïQ™ÊOÆT Єo!¤œ{øñ,@± ..û�.M//÷ê÷ûZåë_�Jùþ'ëw~ï~ùËÖÈGÏ2"°S##7ÇÞ~ûÌØ‰}Ù©©dZIÍ —Ô�]˜»:ð@(Çïði‚³a½†€ò¨ƒö! ^HúMfþ?_”t�G~µ~²ÖlK»ZÒ;t1â›ÿ®ò¾Õ«­¡ t;'™ééx¢¯ïBjlllð¥—NHgGF&Ó /¸ðÞ&Ç2HÔ!w€ƒáq(ж¹†ÀçÑ:$ð aÔ�×ui�G?×möð2UdQ‘�÷ùÞ $aYßSñøÈìõëÉÁÁÁá×^;•ÓWÏéþ~¿;`q׋åÎ`øÛQ¾ÐtŒ…¢}ˆ€Gõ!€MÍII PŒæWR>æç? Ò#Ïš^yåç'Nžüßôøx<Ñß?¢"^Ä€Iô'§MWæîÉXWæÚSަ5ö’þ:++£-3º"1Ý9 ˜Usg1*ÎË¢ü~W Rm“d žp$îy›šÐ%æå6ˆ#‚�9m;°.wåŽë;iŽ�ß‘rDNƒ¡P¶h?‹ Á!°F®Ç÷ ݸ‘“ !¬æ]�!à8Kð£‰K�ãºðB“Öã{“Jú,E@@óè¿®7{„Åg´#áM¥Ÿå·™hð,7ñ{?T‡rÇå}¬þïXJ�‡/è¹"Êã€'´"¨[ólîm³ÿÚ£ºuÚ×5 HSÔ÷Tþ¡�E×ø�Fئ ÷!³gWš=¯ðÚ¥¨’Âïš½s,ÿJ€¢u °>Wß±«Ýû*‹À(ċХJ1¹ÀŠ�éTH/™�æ¹À@CÂ\ú(€×xÙÕ.{D€ðzŒ1儤0ç"à"?nàY‚ú¼mº¡ò‡QJÅ&^¶Âh"0gã×~nŽÎÛ>2à5îÒ@D$0  }ÖC,0¸GK„‡VY)ðsePX 8Ë0ÿ‰‰éí#)ÿ+æ@LYÌIEND®B`‚ic07.v‰PNG  IHDR€€Ã>aËsRGB®ÎéDeXIfMM*‡i  € €HŽw-ØIDATxí�w�]×}ßÏ{Û °»‹ºˆB$!€¤ÉQ£ ɘâH¢d[‘25Ƕ<²Úd’H£H3Š'3jžIKÊÖ�¦"9Šb[ ©fS�!©Bª�QˆÞûö’ïçìû>œ½x»Þ¾üf~{ê=çÜóýžß)÷¾»¹ÑÑÑp]J÷@N¢”Ú‚ÖÈ%ŒŒH‡­êCÂW¥ä®`,$Ð5÷­Ô²`k_SÐðàëD‚‘ *w¾/µóÚÍãyL¾Ap+`Àš‚xMàt\çQúÜÙ!,V”—dw±d³u�·ú„{¹æde.7S£÷o—êÎ1í6°¶ƒ¡[ ’/H�JÎÎã| .å€÷®Ñ;s—¸ªîãZ”!uöÚ6;ë‚&^ó|DVNQ|�]%˜Œx+E�[¯iÀU(X=rMà„l4šÿ #š9½”žVüNé&)Û>òxbOóS†  <®Á'ÞiUÙ×UÙ(uÚ´ #ñˆð<Â7Šç·ªÍdÀÅVëÔ/쓾(åð‡¸ØÑ%̾¢ˆPôc)à‰·B„ª˜z­ @4j×h z¥,9±¡3@ a”²G½tò¢�Däøíþ~-/—zÄt\Ï.ZQÕ#UÙ¨éê ~î7®Òµ¨‘%ø´H¬Ú/5Àö§.~ò鈑ϱðn•³S^mWQÕ/׌Àô ÌtSèìlÍßu×ûŸ¬kûú×##ºd`Ä3Úm R 1Ÿ)ð„°íE©¼—[¸ìª�k†B£®««kÁ¬ ÞµsùòÖ\sóŸëœ6l\·.ÔoÜ(;0Í>&a€¢§F?#_뇰[»ÃM!|ooÛ4OpÉž†M»J®yɳ¿|ùò…«ï¸ãÁ} v�éë{ŸÀ/"PW_÷ú€Î^ŸNn0žYüA Ö Œ|-wˆ2?ò;ð‰ÔDpº²V—¼¤ °víÚ%7¾âž;wYKÿ†fÌG¥= ëŸ}6,—«Ó¼pP I±çî¦Ö šïwê)àÑ�! HðË;ï CsçÆ³ léîž×ºzuû™M›ö+øÙDpØp˜Ë«N®j¼ÌýÊů{Ýšcõõo®­ýã\ ºÉóŸŽÀCT[CãÔ„Çî½7,ؽ;49v/X†Ÿ¯cI8&3n¹å¶Yî8(LA6Ð&‚ÉáxQUîUK€ 6¬\pï½ËNŽŽþápcã;OÌâ±ÍÅ €ç5¡ +ý\cc|{ÇW|]KKøáë_òëׇ&ùSi˜7ov˪Umg·la‰`¤€çbÕÎÿÜÓUG€Ûn»mÅþÎÎùÍ>ÚÔôöCšçËVûÞæ…yó �Úã÷ÝWslû”ržÌ¼ùæ—�8qxÇ–-X�›õCŠª�ÿ¹±«†˜{xÝ­­Ÿil|óþ.ÞÄ*Cdþ9ô‰#_—çt�Šd³&`Z(%µí-7Ü0ãìöíœ Y¸Ü’úWunÕ¿ ð�ïxÇ’áÁÁŽº¦¦¿ÐH}Ôzðûúâ›>ñ°G‹>UQ,Ò6Ǿso¼14¶ê�Ÿ äÄÏ~öõ>ùÉP2$@9%¶‚žÒšƒ©¢*¥ª-À-·Ü²¸õî»g ×Õý•Nì^S©´ùÏ%‹;ÊfÈZIK‰Qªn—Jõãbƒ[Ú„(¡¤* à»ö,ZÔ´hÆŒ¯6´·ßÞ›ŒÐ)u«i\ü©ÌÜâÅ瘸»–/õ™Å_6sMccS]ggóàáÃŒt¯) ºÃ¼šY0.U'4¶jdݺu­÷ÜÓ•oiù~nÆŒÛW®¼½÷ \Rã~¾¿lxæösÆÿÜè÷þBeϼå–{–¾ë]÷*`§J¿¦D ­*¥j,@îÞ{ÛÖ76þº¶³sá¶… §¥³›%_^+þœNSð©�Ñ×Xœ‹µ:¹\]MssÃpOOŠéÏRD`¹Á󤪓+nr·ß^—ëìœÑ<þ [Ö¬Y8˜Y•W¬ÇXýK@'�ù�¡s<÷C€Ez&Ð�<1<—ë|Ÿ¶„¿»üƒ|«R >®•ê¿QÓ@¶JE_y¡¡WD˜Ü9-M÷ß(¬][+j¦µ‡˜ûµúÏËô3ú³’`Œ*Ù‡5¿3�èKÀNÁÇo‹ÀÚ+QUrÉ&Kj¤ Ò¦Da9 Ò¢dïT‘|¹º… v¯¿ýö“MoxÃ>½”A9µ\�Í_É0…ƒ7LUie)øØéK%ÀŒÕ«ï¾ñãG¡ ª±šÌ<ôUZ­¢®¼ÐÀ Êks¹/é0ôŸñØô÷¤ÐX/T~êÉÎ\œöå°î—í´%¿dÉ’móæ}gÛªUùÓÃí—³?èùšÚÚ�×ú¢ 4<šÿÕ«C½Ž†/Et*8Èôgj£c ðWÕZ€M(¿—Ë}MÏËï¸E?‚ÔÝ593w ýðŠÞ÷[ù7ë×±zSæ³òšîO^® z#guSW×#Ûo¸¡îØððXzpCÒåþ`þ!@©‡En4ˆSD9udãâ‘o—›ÄO—¥~«CJžŠÑ�½Y¿™_ÂB½?Ó”}EŠŽbh³ùÕ[2¼yRú7Ï„ðßLûs´á•¯¼©véÒÏÕ /š®ž*�LF舎uçhKYË�2ƒVÚP†(ÇuÝ7ÝtÉ@—…‘ÁÁž3›7?±õ¡‡¾¬ Oq)ÅpâžÐš�£†ª�’Ãð÷Õ:"YÁkR¼(Áê…Œî4@‡A Ò¤m²oÿòV±ý¹¾ ¨‘ºW½êÖÚîîi´7�ÖÔ,šàL]y§]ôí0"òù±.| ~Y¸reàÁrDe7×65ñ“Âìè§ëPOtD¨ 9�ærÿg‰¬6W9dº„ÖCÄàN‰§CÕ�í²s �.Yr·€ÿWûº»[en»•tE%Z+Ù°QÍýzY$Ôj7Ðuˆ7ºÆ[òÕñX¸ðT0f¸Ä? ‹¯_õÑ�¾uËCý­.¥Û0”ç@–良Ě*—}ôÑ„¯i¾¿³ÏpF?Ë!€&£O&€Á'¬EaxváÂWÛ°áe ‹K͵ÊrÙeT€Ž2ªE‚A­˜Œ÷óøé¨Þ Ña~9sÿXIñoM}ýŒš™3ç*`+`—îÃ�á„(o�]qñ Ž éÒ‚ð <¶Ê­¥õögÝ-]ÿôêW‡#7Ý4kHàðµZðõJ Ï("D¿Fz¿ÚUk‚£[Ïj+0M5vu­]ùá? º zJâЪÙÒ˜¢hÅG<Ój·×�7Ú5Ï£ÄhquFÏç™GGµâÔË–uêØ+-X¦AÚÁ©^jÚm}  èõ°²OUò mõ��ZB•´t%†“.Æ�Aº¢R¼cÍK9ïùÞ.-å½›ÅOK\fSV4\Ë´Q�I ¢yUøJ ¦„WÅ `+@£ ¾Ú:CùtûkjݬY+V|ðƒoR�Œ‚TéJ”îcv½âR$€Z’7àt…»Ã.­ÅBtJ™"ÿ´ /Ö«Ô7íÜuj�Þ¹ËËðöÍt %3© ¼L;*3nd*⇠×® Ô¾Y²`•$€w4,X°JÕ|@ÇoàrJ—_Q¡!–ZL8�вDM•W]öH!À³‚!?w5ïôé°ðøñ°eéÒ¸S`¥="³:¬ÎÆ(#ŒÂ ̱´)¶Q`R&{|zä`šÚ´+c >MSE  öµÊü›è$UH(ÒÀ@2VãÒïø‰ç8åŠIjjtR‘£u›U°Wº[ÊŠ(ÌÝ †:Žé A$¨gM ­‘U`¾-W¸’Ñ>("1·ëM¡0 À€�*q5èAEóïJõµ­Y×ÕK+i(¾®­má²÷½ï¼u7Ù¥›X â^1¡1–üQù¼ÿgO"€Be‡H¢à’¾W?›Ú¦W©=ŠpÝÍ&ÅÖÀ*ÄÑ h_%þèkq¤s˜4‚AÑÙ‘ïQN:/’@ÇÙ¥|H ¶D2Êß«—DZ L¥¦©iŽ^ß "¿+5 ìÚ `è„òG….žŠ€OQt¬ûy™÷ãÌïœ[bæ9ɰ›úIߦíÕ�ttú”žŸï*¼¥ ˜©RG¹ûzu|½öÝuÒZÖ r#éÈT> ÄÐìáG<ÚMPJ“¹?KJ]¨ˆØ+ÝìX8¡i ¢URj[[ç.}÷»_«2 <.€£î–+ú®ÀØTk�§BøkuÝ¿-;h)@Ò%ГŒ„‘­{SGGtê—3|,õs=éfš �E’öh‹Àñ]½®‡zI‹ŽÝ`3šSU¾âH‡$Œ~ŸEdG>y,€DÇÔá¤�±Jª¿]oWb;HÙX�™ëÖ½BÞïISØÏ–õ5ëÆ×eãBÅôÈèn}?Ozì°'¥,ø˜ÿQ,úÜüùá»7ßv |î ¸8 ÐQÄä°K…(G®ýêì~`P3¼ Ä(V<åœþ…F=@C€‡«¬qÉפR½="À-dOž=[QK�olœÕý§úJµÁ ãÚ Øe-�b1®ÉÓH+�8nÑ4 <¼GDÐÿ°¾¿ˆ¡Ç½ñã¸"@[Θ˜ÔR2˜Y"([çŒLô­ÒyHÃ\Íž]§ˆa"˜âÈg�`  *@ãO•8òbþ)3ÍC�ë‚7Šó㢪ƒéà HÐ#‹P©é+Ð~ûí÷ªÎ”&�ÌZœ °ø/»è΋âA<ü ‘àïCø/ÛE‚ߊrã'ÓÈE±df´¨ãØw㲇Ád`´Ÿa…žªë#€JcÛxžÙ7P)èY?àóCÇ«-ãÄ$(^$ a®Q½gµ[9tâDbmR!ÑéàŒEï|ç�*.K‚”œ `(/«`‚,Ü1™FE üí™/XºuØ.W 5¾F#冯¡¡yC2ß¼d�p1¿¸å£ 5êè™Y\^À„eñÎ@�Ýë·ï—4”Ã#$ y²J>—A;x“‡Ñoq¹—r©‡)Q9'zzBë™3a–HZ‰ç:š3û®»Þ²ç‘GžQ �޳2úÕøhTéûË&cè©:OŠ€,øéAðDö‹R ­¢6.9uêuúäÊýÅó_Tqô>D!"”ƒîE±}€ØKg„Äñ©ßq¸ˆ]Ê„X“FyÛo—tK†,±hÖ”Äö°"sìWD€�ÒÇ0Ý 1^uõ]ÎGÅÚ«ú1a%J£l ðC ”©>ê®]»ž892òs…K‹:�Cž ökD15P0…2u À°×f@PÀ›HÉop™>xàƒHÅ×缩ëtÜ´>ùõ“Þ Jœ̴Èrýú©Yã¼X«ëM�~\,€­@“r«¼¨ëÆU&æa~XÛ™™à†|ÒP½_�ω¥Ð©,òXØñÈ5®ÏûyñÓ‹šŒþRà»FØ~\€‡iœýÙ¼Š'�6ˆT'4 š”nC™®ƒ³»Þò–wêr ëBÎßx³Z�¸<2Ž…*=Ú ~ÖŒ‘àBHÛ¯å‡Å¡F'o9À¦s5MD0÷CTÊu™N# Xlý˜,iÿ¥y³ñäϦ;,÷¬ÚÉ)!g•m}ëgßsÏ •U |[näÊ 0ÿx——’+06úåêf&·Ù£cK`tÕÊ ð;½"° ¤;_D$Ç¥e3ï³ï÷µäA²yKÅ;.ÍïëpÕÎSZxa .ÿO ?øà»UBJF>a\”õîe‘R@9N�€m¾-€ÝH=àb¡WŽwÜ ëë!�§ 3(‚¸¬8s?æ `ñuÎc—ôRþl~ç#^¤ê‘¥âIJR¢�SÓqÇ‹T#ÝDÈ’€ãá’ØTª.gÂJ& V N vî<Övü8ˈ€ÝkÒ4ÀQðy£˜’S€²bößñ΋5°:޲,Îï°Ý4oÁøê 瘲›¯¯o[öÞ÷~Hô”žXÍ^+0!¸Ó„XÀgJˆ–`Ó¦M}¤®î+\1(Y7[zšÎÂ/=SÀ"0Åð< 0ÕŒ#eùú‹ôC€J� úV´ßÎëIa§Â€Ÿ%$ˆq—c18)hp�c ¿1ð½.PgVìЂw÷‹à$»4$+�ú:F< c¬XâK•ã8»Ùò å2ú+i¨F¿!h¹ñcûÏòB¦· °¸Ó*$µ'$À x‹8¨Î­Üäx©· ÈéÊß&@Çd»c9ÎýMãSÿ¹Óå|7pM„˜6ÝVà¢ÀÝH�>ûÑË9²œ©ç¢Ä#Ü`§¹=vK¥¥qWÒ_WgØ5øŒ|”ÕíEcTέ\Rá"Ë~¯†nغutÎa_fáeÌ 2+u4�óCWª©izêwÞé° 55 ·>üðÓz�=òM‡™¦õ?Ž] ýá)`xëæÍŸ=ÒÐðWî§©¸qàÎϺiÁ^ॠ�ðÙ¯k[YT›²¤pY“ÕAÒ¥ñs2¾¦‚n\ñŒ½yØV,€Á· ̆iZ¤0ïGè×GXNY"(e2`HóÛ>Ù|„›³ ˆ�ž2NT®ËHÓS¿Òk5ÍÔ”šjÈ7Ea7°á‹_ü´~G “¬’$€XH0-rÉÐ4 žŽ[A€×>¦,‘­Y`£ú Y@œßù(ÇeÑ2§»•Ùpﴂ˯œxK¨RÏ\.V@;‚Vµ€³æß– ¦M×ÁÐ% pÑȯïå Ä”EÒ*À~—μó;ÍyŸ†³y§é¾&ÍGœHÄ#îý½a«Ö:{Ž ý"D¥íñMŸùÌl\´HoÈ­€Á÷4 Ÿ+P.Øÿ£#Kwí�¥O«OU°u9�Z»—Cïë [²~‡qí'¯ýi¼ãœî4»´C;msrDë‹múiù^½EܧõŘ1ä⩉>3שwÒÅ °zg?89µšÎ¿º,¦�H€ºþþÑÚ2Ÿ ¤ÍaT�{EÜ ØeåÏö�0âøÔK9—'Íg6�¯w:a�©Æ‹N2ñ²KŸâ‹/ˆô&‚‹œŠ{ãG?úo›o¸�Ÿex*0ð¸ÞâVTÊ"@¡`èСCw²¡áÑJ´Š;->60¸>ácåïxòâϺN·ët‡íNït¶�ËPüj /¬ö©-X„�²{¤=òkžŽÍ)çOÝÌ™Ýú:¹M=]‘µƒ-áT0;¯i±ÏÏ‹½¸0,ìm¬©Ù]‰VQF^GHg¢ŒFæ~:pR!�8»¤á·¤ùíO]üV�z\û!å¹L׃+ðK§³Ò>=ÍìÑcãNµ³cöl×~éîè(#àÛÛm0²2M°øf V™ n AC2¨”ß. « ¼\A€gîO;߀¼‰\šâ4ûí:×€Û¥~“Îù©Óš±qjе§´H<¼m[8¡_K—#ËÞóž?j]¹A@O­ä¨¸ ’rå*´ !Üe­ÀÌÆDlû˜‡Ýé¥Z ˆü)A�ë|¸VƒŽ‹²ž¡.[â\edý”£üüž—[†4è»ÁáˆT� íúÍäÅJCgçššÖÖRg�SX¬.Ó~žÊNY¦bÔ3cB]޶é]úJ ?/�/›ÐùÀ«�@WDç“Ç`¦ñÄ!N³›æ·ñšdöD¸D@�†ëòpÝ–‚«Sôª|¶9‘aPýÑ«­ãÑ;Âñ½{ã¥óG¿x{ëÚµ<*f´ÛØeÀ_±o ”mØ Ä‡Aê¶Ü¾}?jkû†ö&锅ů“ë½üQžù3Ýá.=”8F-q‰Ó|�],ðù©ø<ýæ1þlMá#z)”í^¬ß�zRQ»Ø¾Æ»êZÀTF®b@ DŽÇE ,YǾ„Þ¸`ÁúÚY³88$lF;ë\&jT¨ßǾ6V`¦bÊ�² P¨‹ÊGvîܹ©qݺçtÓ!eóé(xðüÜ»qãåô, º8G@ž²¤`^ò=—ÕˆìE(‹2fþyŒ:w¸�Ãõè% ?B|V—^‹_`0zÛee樾r±>çÿí"C«¦ V|Z+}ˆÐ'²ðU’h”Óߢ£âzÞk,% ´$õ󵦮�Béí|»¸P§‚Qšº»ïÔ§u¿-TæK@·p“뛤x>´ŸÐÊ(›о8©FtnÔÅÕ€G_#Ý,}^ŠP<<âòêh"þ²k¨pP§¨ K%YÙ~ìØ(ûw~õ;‰¿ |oÃ<:pÁÕhŠ‹9—æüi<ù ʈoÒôÒ¬ò[D´ÙùÙèKS·Nóx»t&×i´c†À"°fèWýñ‹dúºÈ�¶}Ìïþ1l ¶ `×i„ñ£¬úzexæÀ687{ö]7¨�‹Æ ŒÙ…°D6ïõäa¯¨sãÍÕåbÀÏËH¹lû!‚0ÂzL(S"@¡T*îïï߬ÎxZþ—OXÛ$ jhÜúéêKUƒa”G°ê¾æ¿fhЦ|Ò!ù4ýö.å¤`€_§‘Í8å+<>WzÅÅùù¬|“ˆÊ¿–é“Û/  j7�j` 6¥š©K;R"4D  �ÿs)þ¢µ`xë×Ú|¯áÕZ)韄/<¥/õ*ŠÅbj ô×âw‰'$eOU(|hÛ¶m?©_½ú*°,pÌ>šQÿµ‹æÙ™W>!ãÏÈØô·È:@mÑJ\âLü´:Ö¬íj“¦¾^ଶ}£Ú1@:w2"Pàß¾qc<§#£” ’óE&\,GÞH–üœa4ä_¥2jDŠÏË ü\QðÃÕF®MF‚J€þ¤Ýå/5ªùŒ_뮑‰ö?ujêÕ™ �ÖŠ|H#—C¢Ùòói×rÀW;§E°*íp§ø"¹îébˆðÖï~7Þ? ¸€Š @&’¼±£Éƒ­g¨“GÄyùB�®-_w� ‚oWíë‘uŒ³¤âŠRIÐþK\s À|SP_ÚŽ‡0´<¶^�Ê›B­M€VÓA;#_DaäU«4Š �Ë–…~­ Žë¹Öm2"Ði¾gk“oM$Îà.LwЇD€MŠg&†åÃ8©D/RxÔ–žžÑm‹.ZX£ŸßêçÓ!'M�5£pÔ™­êÈÍ·�š&®a}0Oÿ�´]ÿ¥¬F»�MŒlF0 "ÜÛo ‹m".À@ÌØvìØV>©ËeÒZ™ÉÈhu¦1ÛñS8?ÍÊ‹(s~óU>m·ðO¨¬Xf-]ò"�øŒ#Âß¼å-AïTãèL�òèxF9lüŽY£ ê"I€�š/dñ%Ä�“) PZ41[¶lùÁþúú/Œ«a’OÐ4ªã¼¯xƒð|¹ì±õÂDhVÇUâ›=“4iZ“jEÞ…«V…Ù² ¼Ýœ“2ßc ¶éÓ{§´³àH�= P‚º",•BâÎjtÅC„erSðÍÜó~u\Q¨‚‹[jD3·cúuŽò…0^Ô_PQWTô`gXÿ”Šãþx‹:6íýõŸýÙÿ(„cÜòþ}§ÖqìÐØ?rÝ/€Œx¤% Ç5…ëkd�ãJn :~ÒÐøb)˜ÉëÁ­„p#º×‘~y ­ž]dDà»@‘šõþ'δÊB«Pnp®K�Zø]M¢ÒI ßNˆÀÒv½ràù|àycÉåí�ùöèë»:úmÔJ>�íô0%‘Á‚†$,Y4¾ î;·~L»T© XTJbÛ6oÞü­†%Kêtÿu\ÁŒ~E°áæxë&meÚÜ ?±gä¯fat£¼gË–ç7ìc_W› 2n)Mo9ü4„ÿ¤ƒœk èòô ¸ÐCÚ08Ÿ—ÓÒ£â„Ö O>Âß+èlò»�¸TŠáŠ@µésì�µÚôë�È?¶Ô’.À­Á�àË]¨2sµIœîÎul8þ“Ÿ<¹ã/ÿò{jg)�‰ã–|kÙ<¾õx›Bï£ÿ<„� ü.]”hïûmÜ?ùd[?|"HG²ëp½„©Å߯{(Ö[I¨ì Dõµëlüþ§Ÿ�ßw_ø4·[G«çkeÌSÁj”ÃßúÖc»}ô9µm¬cýcŸíü§Ùõí�P úÜ×Bøà›Cø‹ù!,bëG/xJ 3°àcëxLºYÿ‹à‡!<^ˆ& …;dµº-¸Ä¥’€¤žºŠàéÐwwßøÄñõ*2Å;Mr¸7hsoÖ¤;ƒ$ëe÷îyôÑÿyô?ØN³¤#C}}z÷[ãGš;6ëf Lk–ye¨ùfÚÂC‹CXÆ$ cÉLÅ€ÏÖpGßÙ·åeFðúÑ$(E„xÊ[”J â»h×®Ïô÷i{Ó¦wà^ù�ÿ:uâ�×AG(¼é»w«¸¹E: áèôJȶO|âs½{÷žû ÐÈÐÑ£½#t&ÍLÄïpêfãNóø–ÝÜ.Ý‘Ì{ß/Bø¿ÕŠ]usCx¯–ÂëhÄɾz<„ŸÒWB¼_.à$¿É@% ¥~û哊@£56\Eâæ[¶lÉÍÚ¾=,Õ6.þÔKdà‹Öp—MZ$¿û‹_Œ-¢µŸÿ“? ý:7˜ø:¹£_¯llúÈG>«êq#½/¾xJ£;ÊDpaûqSuÚdq.oR¨Ü-ðú¥Xÿ:-ô>­µ@³.®Qõ«€¤+MJê¤{½90 ›¸üÓjÚP”Š@¥åׄðö9bíR5Lÿ8²……"Ô¨-J8­'zk{,ü®¬À ½sOj¼­hϦ üÁÓ§�nÿÔ§¾Ðê¹Q=`îݱƒi”æÑ�©‹? § fófÓöõÎï°ËæÖQK< `íQ°‰Pß`‚ðGyM—K¢€�²NL iˆ'!Àý!<¨ýëC:‡žï9+]¸ÐBZÂ3ÿz¿YþÛ¤´†ùŒ–-ÐCP)é;p`çî‡~LåÅ]ÉhÿÀ™M›ŽÄðxÀKd�–ºiZê7Î[*L ð¸©Tƒ� Pp >ñ¨ Ç�Â&€I@—[éê³Ùѯ¸©½1—û#�þ1ÍS|á¼­ wJ«HcA£y,¾¶²DÎå™@r$¬è‹–3[¶üêÐã�?£ ;vðЩS½§7nÔùH±Ã Œ]òÀÔ?Q\©<.Ënš¿Õé×*o@!�pÆ]‡ßjðÉ�PŽÛlx䛌3üç …–-/Ïåþx~éÔ¿Öè�GÞ¶P°[H/p'~BÁ]jÿžà?~ûÛ㿯è ÊÉŸÿü™cO?ý�ïß·ïäÙÍ›mÎ B¶óÓxw˜]§M&>Íc?nêw>ǧ.i”æQ°(t]ã³2€�k%LÔbRQ.ÝlÒP s*ËÜO¾ó„‚Ë–E!,™%íP Ø2Âi½Í¿ @Í´Ê­7eõ’ZÈ=õTh¾ÿþIGÿÑ'ŸüžÌ÷Y7�œÙºõpïöí�‰:?ídü©f¯IÓìwž4ì¸ÔÅŸ*ù}{××8½tй¦ éÊxºÏ]XŠ®Ãõ>#ÒAS6n•é_®…s>çu´åäŠÖ§4¥e´Ü„ h%×.{ñÅpHDH{äÐ7¿ù��ÇO6zòÙgw÷íÛ§ÅpHß,EMä¿PéÖl…‰O•f;¯Í¯ËÄuº^~*=•Ç» ’|läBŒ¦5?K×C[h @®×Óôñ«~Å�“² ³¿F#~%&ß-Ì®XÜJz‚V¹•ä‡(\ËÔñ«¯|åqý7‘!À¦Ž|ÿûÛ‡Ž÷ú®P„ÝÔïÎ'.«iZêOó9Þ.iø­»éÎçQ––UÌ{`«ŠÒR¸–úø…õ¤-]ŒŸ®õx"/uÓÅvñk£sAÒÅ”÷ÒÅ#0Ý:(ŠfJI¢ÿE¹îÁ4×B‚Ãßüæ6Ý%¬åܹ¸ÜHê:=uñ£ÇáÔMÓìOݬŸpªn“Ë$ìtú™Û«¸¨ØXG�€n¥S”ݰºdQƒr¨˜Š¦£]ZÇÁO·”–±÷‚Æn½óá@Ç’гÊ|f2�ÏyÓëðÓa¸V‡K¹ÄYÉoŽºlês:qöOણ¤æ{’¡¿]*¤—¼öB‘e@…rf�ŸˆöÄÓZ�d‘�w2ñÍÑé€]JM À@ùÚÔ,Â-õ;.œú|Í8°ÙW�“ÊTÏ\.øAzDÜëîU÷â)¥í�b§˜ÌK!@e(�½ƒ‘ªãÉž%€sY×@»i”�ß×árMÌWÉÎU™U/å ÿkáF¯uISD0ÿ„ý èÞ'oš?¨ž•J Qž5�W³Ä‘fàR¤‹5¸¸©¦éÔ‘†Y$‘÷š–r �{!„ÿ·D¿I€w°ÿ÷b�y¡g½JÁïž7Ê ø¿” Ù”mðÍ#€4òLеº“Ãaò⿸:!+å€r¾'4^¹_ðé_ >þ4 JF–)�M½‡£¿‘d%œd4klH\ÔÀ5àæ˜Çšüu™¤Ê%–}tW¿ÐáÏÏg†°ÓO$(ؤT@ðYè(xø…~¬kþ¯‚€ �d1àY×é.ÊaÜ8Ú¯µù[÷=e™v‡ðOsµ“Û§„À:Gy(8µ ¢Lkä üŸ>=ö#@G=òq ¾ãÒ<& ®>·3={p•}MH¹ˆ#N=4òìØTÀ‹ ˆ‹µÿ¿™£a¬VÁ*€(sþ!�}@Ÿ4ùA§ œ1ȹŸ"XàrĉÁ¹.SìýD¯¼~ÔY8sÞÃ#–M´&XÂï+ ÃÖ�‚=ÒMz œ“ÕèѼÿUEà ƒ�Àdf /‰ƒ~ªi®K…z`*`�sâ Î� HElè á_ˆücÁ¼|G6‡ð5åaV€qhJFJÁVBðBd¹.ì�©0ÙB ëB”‡ÌYxÙ` M\Ça ý|ñª�PÐ�ó�O:(Æ8ˆ/÷eÙÿ*ïÏäÈEý+J“ýHÅmVY]t�bÛꀽ‘ë}]ëK•Ê£ð CYvlR=9™e� ™gò Fÿ~9æûqÎ’q 7 ·”e+Š{é¿É²ÅÛJžUÜL–½.kð“iÅ)èbpÛ‘ø—ª“Hq]C ‰ì2u À. ô T§Qû õ㟠‘σJ�¾w,ËFÕ•–¦ÿüä1’=g8—«Ép¼(wVÁDÊûŒfÙ9@íbp&裫HàW˜YnE†`­k$‰]¤®ØEaÞïUýb¥òü õA}yJÀ?.°fš ¤QßàGi@kœö+˜ÐìÅ;@®h0Œ#�üšüÜÏeÙôãš¼–eoÞÈ2ml*j/�›ƒèÎ$ˆÝ¢®Ø-I€zð3Šÿ…øóþÀgÊÏt>‚¿8úÇ®Ûxøö¬N=BûsBócrÿÏ¡,»  ûÐ0gBàGO±)äõŒ€YC—îR]p—<Åù…¦³¦¿- žµÿˆ:†0ø0ÊøwbÈër¹²1©ª¿ðT–]?¬ Â÷³ì�«YÆAÝÅ·ýž(*ÅÃ3Í0Ý%A’Æ�ÿë€;—Ý�))„=«ÎüOåY¡ó0àgÎøÙð3ø d†dœ‡iy�Z;P ‚)Rm8äM~•}Zé§Äÿôz–]“`S�j xªw5ø!8yL̸d—îP]p‡‚;HÅø1¡è1M÷O1ê{äüLým bƒßܲ0øá —ü€ßù@/ip�LicâÏ�ʲ+ºÎëeÙûzJ ¿T<ÏæìŠ­…SM"Í’ènZ";ã]°3yÈÜêˆø¬ù¾Á_¶öÐÔ¶¢S=6ÌH#/󑆑zŸÐlã°Â)äOËq†ˆ$²ãÈ »‘fÂÎó9­Ë[H kZç 'ýZ¥rZ}|üˆÖãüpÜðcÔ÷È�’à@žÁ €¢|;£×<Ï’�M�—á‚ßÕõ±A\–d5WTƒˆƒ0Ðz÷a];ýß5;•ØÁÊÿ¼@ýß |ÏhpˆQ¿ ø¿ ܨ4-�‡qÇ›ƒpF‡]Aå­ª^_Þv¦ÙeT"Ù#òC\ŠSƒÝMÁ$Žöÿu @û²:p95½?*„}QÀ; ’¼ÞÇ�bDàzœ‘Y6Pò–q��R]7×Áè`4ï?¤¥À3Ç•¬GƒŸhG�½¨hcê±ÿ©š%̓°+]jS]Ц b6æÛ»ýe ä¾Áo …·Ÿ°�ïºH/ �Ò?#cðk:„t\hþSö h\ñö»‰èrw)€dv@]°a´¬€`üF’ÁÁN\tÅ4‡àˆRüN÷5<Ÿ”!š”Qº*CÀª ꦫ‰œ*ÃÉKÕ©z-º/IíÂëÒ(�¤"àW À"øv£CQìœÃÁìÁ.ç5§.üæø]m`ÀŒDŽ6‘ä¦Eî"殞<\Þñ\¦KmHÁué“Às•Êѧõ’ŸŽÞ=¢—|ú@�‘AÁj¿9hóúð2ê³ç`¿÷3<“?º²ëpý`L¢PJ"�üŒðøá±*ª }¦ø»Ô†º  !´,BÇ—„žßº©C82’"P£ßý'޼ �Q_e3ÎÀA%'r.ÊéÑ^¥Åzb8ú]¯xEuq \> 6Ð�FEÉw5q¢è.5“@×4“ÌÁŽLÝûž{äD ÒmÂPäöʧ‹Wåq3g ›ÓüpÊ`8ªy?åíR+ ØÊ¶ÊÓM; 0øÞ!æ¼À™àz �»ÃøMø½æç ?¯c À<–S0…#�~ç Ü€ÌØÚXæÈç¼Îˤîvß�”ZP×´ÎLJ€ÑTýU!êÓ&ÞËŠø®Ð3Øp1”Q øœÔÁèë>© ~–pò⨊Üõ:Ýy©§òÞ`&™*ËŒq4©èïË*K—Ê$Ð5eR9¸q¥ö®ÎÝ‹ü‚Îà !_Â& Bƒ³�8~©¸Y]ÄÇz�N]Ì äøªpì\"�xƒ=Æá'Þ—“·Keè€2©Ü8@5>ã hq ,:#€Ft)˜t‘FY#�òÄ5s±~ò8ŒAá‹ rù‹ÀíŽÍ°_¥65Ïy©ƒKt©…º …p` àž'€ø^»7¯‘gðS†xÂP»†Ààwú�InQqT“Ú¸�¹›dNì§<þ.µ�@×´ÎAIòæŸúÃýÆ1¨èÀN”Á 9ïØF Qd:�2sE5ÀOºgá#7èá\“Ñ_üSµçM�MxG›Šl/ørò–^Η.æ#—Ú”÷ºK_€ÐãŒñª€¶ªˆym. €½dÕà4ø‹Ã¨Gøˆ>#ÐiÛŒ�¯ÃÙ�Ü\¾–e§ƒDŸäÉb àG¼4ñeä&•¥uズ ã zóÑàs¯áPU¯Ý¾%°þï:ÿe�ðçe&�©ð‹†¡ˆ4@îi~<#>ÎÀç"Ã=NFÁmSh‹Ÿ¸fTlF³|Ýø‚º  �ƒ Sp øquï«ëëï*üá//--Êœ‘2L2=p¦ˆF›4�ðTT$ç‹à/Ào iÿºÀϯ­WB·yI–µ]z³rt|×ìÛoàƒkÞÙá~Wûá¾P±R­Žè½Ùêù7Þx2{ÿýñÕ¥¥dÊ€oÐl*ÅÅ| nÙøvù™îãxaH?†ûT_>§éÿ»š È4%Û–fHïÒ%Ð5;Ø}–½hÒ,@à®22òÏõqýÃôçÖáÕëŸ|Rí‘hX‰BG>Ê •C‚ˆNòà ~8£;Fðsv€©?h×!¢OÏeÙ+—õe`Ë&E`Ã*–.ïÒ%Ð5;Øý�]Sÿüþ'žxâÅþþþ—n:Ôsub¢²>8ø‚À?¢|éþÏMLd—žx"[¿|9«È­/.6l “ ' "ÎlämùA(yñÇÍ>ÐÍÈ�Ónÿ…KYö‘€ÿžÂD‘=ÕlçÊòçr1½ë/‘@×”åD�SOû…ýþ¯ôööþaUëþêÈH¶V­’†K479™-Œ�gkYïÌLV•€Œ"�Ifx4Å%€’SÊyôÇxä§V¦ýŒüW5òÿ4ËþV‘7”‡$_®È•Ô4-æ%ä8š‹¿K-$Ð5-„s?%å~Õ©©©¡gŸ}öËYOϯLNöÜ�»2?ÿÒàòòÈüÐP�F~ýÝ žžÎƯ^ÍŽ]º”øõ›}™>’FxFmÿÀ 066^()�g@Y S~†y¦üZó_Ð|ÿ=‚Y�Ÿdƒv/¸ªïR3 t @3ÉÜGñ9øÁaÏÀÀÀX­VûNV­þAOoo¥:8X™QäìÚZM#?_ÍÜҳћ7³Óo¿��?¶ºš�+‡ž $Ð2b3<ƒRïØ°°ðP øqÅ©?õð¨OÀ¿ð–F~�Z{T øµ.ã1YzŒK•wÿ5—@×4—MǧüG}tü¹çž{~½¯ï©Ë‡Õn�ŽŽ®ß¾ýó}««S ƒ:ß'ÀúU�¿õ ô#ùGWVÒ‰@€ÎhO‰)9ÀL£: Ì6Ñ€<�þùÈ¿& _RþKûºfëÚíÿ@uÌ(𗞸_6È‹i1Þ~U×¥fè€f’éðø|Ô¯�ŒŒÖˆÿ«+ÕêoÕzz*«ƒƒÕé¾¾ÑÊú:ký¶z�p˜Ï|Åi>Óþa9jÁ~­Ù“s> iü Ð èµÉ÷ñ{YöCÅ­)Ïšâ~²@i3ÞÌDà·ª']¤û¯¹º ¹l:.ÐkGÿðàààÙ§_|ñ‘«‡W?8:~ûö—jkk-ö ²Œö=íÝÖµµµ W‘c„÷Ÿ5> žÓ†áÕ#GÒšÿÄ•+ÙÐíÛÙaÅS;éÈefÀˆ¿ØÛ›Í=òH6{êTZ2(®²4<<>06öÈì{ï]¼õ£]ÊV4ÍØ<ÂSEºÃŽ3Øc8 Ç»ÍIqÝ��HÛP{š²M%Ýä{&�j__ßɪF{Ù‚ïdµZ¶<8Ø{³¿¯*¼üàq]K€>ÍŠঞ ¼öôÓ ì?úQö° ÀI]àˆ(É øâ, Ve€Ÿ}6»þ�oÔgjdµ§çáý½Gjããÿ0ýÓŸ^Y[Y‰à5hÍ öbØ �<æu~š• @ü’DÔ5mi?³0êëú•ì×~íÈÀoÿöç?]\|ilnî­ë_éd5Í×ôÿŽšH©Ÿ½‚OOœÈççÓ2À†àªâ.NMe£ÚXÖèNCX 4?È[ÐŒã†ò}ª‘F3€åãÇ›ˆÆj¹0Ø3<<@[s¢X™3¨‹@7À#oUž´.µ!�®hCHû•%?¨©õV«�d}}ÿt¾¯ïå•ÁÁ#:ÂÛöT¿Yû™/°–ŸÕHÿŽÎôkFàé?|yt4›JÀuuF*†`^#ÿÇ�=–½söl6 £Á^Brñ"wuÅx‡£Ap\3î¼MšÐ�Žè€(�ð{Ä?sæÌ±çŸþ‰ÛCC‡¯MLÔÄ'õ©Û/i�ÿÙeFþ] 4P=«ªï¶ÏéÓ¦ž–F|ž"/~^£{UK…Cׯg³³i‘íùö’FöíÜ8|8›TÞ2ÐäÈ¡cßûÞç´péöÏ~vymi Ûˆ Ø" mœn^ÌW ;ŸªîÒvè€í$tÓ㈯�ý'þokÕêÙªFçJ­6"ð7æÖ»Ñ¬úÚ¢z×G\&ðgý365½¿56–½væLv]3…ç^{-{(Pl‡A�eÔâÄÃS/¿<Ñ75õã¹?¼¶výz¸øà j§9ó8ŸÓÊšÑ�+H k Ù� À×hB'ø>{{bbT§÷j×—–^žŸq©¿ÿ)6÷”eך¶®©>K=ÐGø×Ó¨oc�.ÂZ#�Ï4ÅÊú´Àt„ö%‡«:F|áØ±léèÑlPF£'/Sllmpp×;9ù~µVãr/Yí�œËÌÄGYØqÎG½]ÚF]°�€ö:YÀf&®Ùõê³===ÿL;ü� |•™¡¡ÉùÑQ6ÝÓÜ®¶ é<$Òóf׋(ciðÁã�gïiv°þè£Ù!�>lV´OU¼•3 �§v|ä©âî¿í%Ð5ÛËh×s0âëô�óN?ò�o \�šªÝ˜žþúÐÒÒ?Zxd]#þª€„Û â�PE ü´KÏ�âúVÀ–K3¸Ì¹½6Ìã¿ñ/<ôPÆÓ‚qÍF‡96ÔšzÆÇÇ}õ«§gß}÷¢ö®®ÍÏ\(¸,ƒQ°ã  ë$O—ZH kZg/’¿êå§«^�û]�Þ;¬‘¿¢wò�Ï­¬Lqzoî!mvù½ãïQ¿ðµ™WÉ×þÅ&ÜVÚO=•�;}:­ûd Øð�\Ì_î?vìá©o}k¤ïøñׯ]›^šŸ×�Á~²—¿O2Èá4�­ˆµ.ø%…ÐÞjÚr�³zF|±“�¼ürÏåññê­[·¾Ö¿´ô²vô§Ö½À”žëßA$ ¤ëxи$‰?®„8ixIk}ç'¼$D}FcI±MQ=CC¸�7.ô öh&á¢ðèw¹ãð;­1ú;C—·'�®hONwœ ð«°ö½jÿHü·äéïéï¯èàÌ#½zE—Ñ~§'øî¸1yAx»d¤™S?†�w@T™×CõÿÅ8Â1.úc¹®è€k'Y üìW~åxïààñé+W¾Ö·¼üËË==ŒøKñµÃ¿“*ï>/KãÜþ†c½ÏèÏÒ�ŠH#œâdÛjê�)µ”)”jÔ�á‘Ïþ¸6<×Ο¿¡½&E*^º˜Þ ߥvv×îòbJñüµìäÉ>½óMm¨ýúµ#GÎhÄïáO»oéíº¼Øù—ã½�8 Hkmॵ‰ ½9#¾Îùg£ÚèÇÉì„ú§¦Ò^ÀׇNŸþÉ¥ÿð~8îß ñ¤¤a›B�Ž Q]ïÝJ kîV‚yùúo~³–92Õ÷;¿£ol-ôèy;¨øºFÕßXÔkºr»tµ;¬&ßýß~ªbô¦m2NÛ‘ œ'2#2;¥ÚððÔ ÜÚââM½ÓüSªËë0w•ÛßéÅr.ßå-$Ð5-„ÓnRcĝկz{I§ö¾-0éKë=Jû¼v¦ùW»ÕíY>&÷8vÿ#jìç­Z è¡hê1wýßMˆ—w•Û¿“ô»nÔƒPA×ÜÅ]¸{u‚oâ‰/}iôÆà`íöððQý[ŠÿýTmú¨µwq¹».J;¸á�Ô&Úçõ¿ü­ÚÁ�1“‘˪Zÿ—�ØQC1Ž„ߎXûÍËâH³mÃߥH kv ¬˜U ¯>ùä“G4ºÿã�ZíÅÞ‘‘j666¨øgc¾NòE6¬ù+zÛ/­ýÙ,!�ö$ÙÏÚPÓþ>½#з;Ë7Í<Úqp7Ýœf9žp¾B眺�L;Ô5íH)Ïó /èóy«Ã‹µÚà!­÷gWW?«�½_Z«Õþë5�â®Gô¥í¬ œ4rª4‚g:Ü“öJ*ô¨O’ÁÇ èà�Þ¸[ªôôôö=:¢BC‹×¯ÏfËËè1èË Á¦.„¼Éiõ:~·�<Àå» Í›+¥ªêe�‡tjï»ú,Ï3=££Õ›ÃÃ:ÉöŒ>Ç•-ìp¼ÍËîN6výÃî¿ÑÕNå¾óF£à¸»á½‡=tì;ßùúìc�½qå?ý§×æß}—Ï zTwSËÂ1.ü<¤Øí¦ÞM7;¶l×´¸5}ÏÓO?=0£Ò}ùåêÜíÛŸZ_ÿu�ø¿Äsó5íšó}§Szì§OE4¥MIöÚ$‚ÈÛ,Ú2[ïèèq{ Ó?ùÉ{2úÙ€M•8 ˆ~wÇ€·A ÜK©o$v À†,6ùñÏž=û¸¾Á÷-}i÷±¹ÑÑÊ•©©ãƒóóŸCÓîù!žM­ÛY€ö2?Æ%Ô°ö×Ú½ÂwòçþÄ7£zŸ¹m–÷®âõC¥*�£9öGžšÒ6'/ݼÉ*ù€Q×”ÜpFþìç~®oµRyRGg~O;å_e·|YÀÁÝodTÀAJ:ëϳû|ã/Å5é”ÁOrò³¾Î]“"w­ºkütYm` wuyyU–Ø ˆà/óøæ¶s”íRè€ $F}«}ÿäŸ<¥V¾®p~mpaáaŽîîÖg¸Âåî™tüFŠy³FDà“‡0Ç~ûµùׯ�þ]Þó蛜*ý_zý‰ SøÑsÿtè'Ì Š—³°‰·Àá½:í8¬¯þêã&�ƒCŲ»®ïÐ^ý [b¾¢?vm×›z?WxWàW*cåŸW%�ó°L¯Á�êWb_Ò¢ë8dq¾ƒV¨ð€öçʲ›ÏgÙ4Ÿ˜¾$÷±œÊ¬Oü®8~ŠòÍ‹ÜÕþM–}xx¸ï‘GyºÖ×÷Ô5ýÀÆ ý¬Öµ……¯,/Ÿ˜èI‡XØÛÁFXjÅýò/ßý¯ú €Ú-ã—^ß�;ÿÜ—2²`�–Â*Ï'¿vúÙ/×qǼþ4À 77¸ ~ÂÅ4âè"ñÎ'o—Џ+ Âü\ü¯Éý+\UÄ„ï’÷�0z19jŸr?£åÀ*ß‚b¹�çÿÏz�{C`FQ�‹FžôRi‰´>888¦ÿÛš=þ®¾UWám·[ƒƒã3kk5�áO§Øb�ƒè÷Ùÿø«?;í§ùNë¸Ëü~`uBmìç¾;Lœã <æÄxòv©D;2Iü3z ô¡çäyL#½$ûeIúQ>vˆ9…A¥üÜ£—;Á]’!Á‘�üTÌÑ-„³Êÿ‹2G´6xçb–ñrˆ‹õÑñY65ÕßÿÌ3Oè×tž¾±°ðeýÒí#œ×gôãUÝMÓUxP) ˆ•4ÃéaCþôÍ?u˜û`GÿñCeB%™q¿¸G‚VàPuppbü‹_|Zƒzn½úê‡óú]6?ú vsšŽßê¥SÝÙÃî>@ñÖíȨðI¹ß–ûIÂ}šúfªÏÖ<‚Ÿ;`%“·¡hV,f”ØS9½™Îà1 ý¿=›e§ô^èÿ)0­hÈzýzyèÐxvøð·Öþ«[##‡xE÷^n;µr¿ÿÉàñ©qf;¬ÝÓwþäo—ŠBæ^áî5 øGGž|ò¥Þ‰‰‰µÙÙY¿%Hgp4 Ž�BÕÊéŒI¨ á;ûÑ]¾3iGàa ò*ð�~7ö)>Á¨Gþ8úüí wŽ2.—}Z'ÑuÎ*IøÏÆ´pN³Ïê ?qb¨ï³ŸýLexø˜òdë}}cÚä{A#ÞcŸºTâÝf=ë|²KFÀ£~4ÆÈfÃzn•(IþÐá!Îÿßëõ?¿Ÿ ‹ýz,xX³&—ÍÀÞ,Þ*ˆ’]Çt €„`Ú‘øR^Š‘þ�#6 ÅÄHgéË›üV68wH¹#ä·ùv9Å�ÖÌà×õ¤à!- þ� {OUÕ&&ŽV�ùnuh諊#²G»Ü¬$º¤‘ŽMNF<ä‰kEI y Þ«%ÔÐáÃéåŸüèg«KÝYÚÖ£Á¨ êcµ)†oN:® ~ !R[à·+•C’Þç4êEà?†`ןÑ?ŽŠp–´¯¨|Ü”ËÀwÈÜå”>¢%6æÊœfÚÝ?¬ÙàIývÝÄ´G-MMÓóíçõJëåÙVÉÉs�ÉÀM�Ûósc š $™ÊèóeY¯Ž—‘ËGÎcCŒÀn¿ùWvýfqzExdø‰'>{ä{ß[š}ë­OæÞŸ™ Á�º•ù­NæäC=Ù è ’ Lm�î§%Éß•r|Kþ‡<íϧì�ÑŸÊ,q¸Áì‹EåÂpWœ¿˜—»ŠSžª6ôјÑS2¿´ªM¾%�JËccýšîU–.åX`Yþ¬ñ+½:ó¯of+¬ÿ™È�ÌÎf½·µËÒäsyÜ(Þ§zÌþý×ïN�<õÔÏëÓa‡d�þRà¦Zƒêà¬Fч³jÁÉ‹zbýP5wUÞ›Z�ì;$I~æ¸~Üb,˾*ðŸe´gAÁ§ÿ–6RÆE‰sg�¾ïi8ÈùH×& O²[}}£úU�'N�Z™ëë{N‡Zάj]ZÑèÖ¥ $Ð äÌôs[ºIÉ`l5ú÷ÈñxªÿϹâëÈ\Ãéqê¾?6ÕiÀÁž‘‘ÁõååYí0#ÌùØÐýQµfµ"�r‰w7%‰œZIù1IíŸi*þuñG<òc€Ÿ�O%¸†„å·ÔåÝDÑp‹dÃÀ“�Oä>>~íÔ©ï,?¾®éþ16¦–»à/Š­ìvŒúâÃ¥²yEï«"Eå€Nó�.jþϨÏïÑkwX±]Ú"�aä]8a»<óªdŠkP~2?ߨ)¾OŽõ¿^˜jdßO�ŒÑ€~GðÔ¡o|ãÆì¹s—ÏŸ÷R€q„F¢ö.säA•y�„oX-õ`RІ­Ð|§V”›ùPI–¹(uƒÛW‘ø‰ƒÌ¹¸ëzäôÇÎ>Ôl�;¼$ƒ°Æ�WÈߥ¨¬ýùÖŸŒe‹ì[’‚1�‘˜”!acÒ¤S�‡´ø%� ˜¼þÊ+sùüy· nVCÆüÑ 6Q%I§Cä!­k$„¦¤u’k~OûËÀ_”0á(yKi“Æ�Šäxîμ”îSmò]Ô§§¸K�¼RÐ5F(�j¬áp]ªßädz�…¨ŒAý‹²*|çF G³¬‘aÝ‹N!͆ªãã�r×û¦¦^+ª��_f(†# qÁ9Ä$€ðK-gNÄdâ�ßΟ$¬2p@Æq— KN¼ëãZ*äpT9«éQÕȃúY%å}ð¡4%@ÏÈGZ8ŽIuØ&Öf b–,%ؾØÔËpx6Ã{8Â\ÏF'^“ ªµÜxÓJYhJ¯4kʾ¦Ñz�õ½GþÈ·“P>¦û©rz�>ÝÛíŠíKzMïy:txü…Žœ<é§V)xT™o¿U4åÓ,€ðK`­”Ì¿�:•I‰5s–²ÁÏ2Çhžë‰cr:ŽÝ~szÒ�âyü‡! ~Œw‰|”!¯gòv 0ê³ñÇ2–~;Òñ¨O^ùkª«'CÒ)›Ånè`иÞx¡grrâæßýÝ.\à„(j‚C=Püp«£ÓbÝ'ùÉ(%<ÔÔ¨ó/Àˆä"èa“Ó㼌øŒþœÏÕi¾ôlsÇàHà“fÀ4_¿¾“ ³ë/…^ÖT@^ßÝôš«fŒ~i&�xô«L§}‹T Ç´2šö³VgЀŒ6Íä‘�ú©ÎÜ`ØL Y¹²FÜÃ8í WúœN�Íüñ9]úm¹f �FÀà‡cÐ}ÒQ×�Š]Eµ4\2wÒU¤j£Ay$ŽQð<#?3òOþ#33ÙÓçÎe:±öþÉ“ÙM�lÜ—K{6<§Î €>˜ A2Vz忟ÃF“æÀKýÉ;ã7õ à ´kìÔãäO´ðæàO3•ü}ÌvRǦFÝÃÀÖ½ÔÌ£½�âÅ!«$•b\á“aì&1+ü@‘qµ©ÓLÿQ•D0‰"·?O*eäÁ!a�öVt 0Í�Ó}Bþɹ¹lLŽgÑ—ôªéÜØ ¤z¿ò~šªÞIùÓhX¼�©+ʼÏD{‹”ú¢È$µ3…á´9ow*—û‹åS€/À&ÇÆ¨óšo)",+¸kûõª¾º „¼�æÝüÉ0?ŽøÄŰ €9éøáÜò>pTjr)T%‘ª$“¾¼‰"ÀIQnÆÉç‘ðè€^'Ñ“Q , ÆApâ ü¾;Îãk‘n¿ìvݬ‹s„5mJ‰Ó#1`G¡ ·»Á5bv´µÁ‹í&\$F{¦ü<óg @ØåÊòË;,¹¥e”Œ*hèU=<ìx ¶jЦÉÑ¡6Ð1 ?‚tjÚȯþòáÐt ÿÀP+Px«d@Rí‚ ’— ?F S}üv˜ZK:<ú¹3Ë›ˆ0å6qÝ3îh:ÃNš”?ù„\é=Ý @Tç�’ûHyü¸†,Õ¶ôAÒZ·Ëq49�0zÊ¨Ïækf.ó¹¬y ýNÆTe?{OúÂO­¿ ÿäÉÑ•™™ÙÕ™Ô ‡êÀéDôÆY­FÅÉoµ’÷Á¡V "ÀV4j§ŸÈ¼–°•8rKÕÜ"$#ÌK=$”3¹sÇ9é–ó²AÈ�!ÏaÓ>Jm�+ÚÃp£ŸºvísžÚRl탊¼»ñŸrOÿ™úï„0v’¥Y÷÷«vÿï‡Ñ¿Ú×72zæÌó=cc£·~üã×®þÇÿÈf �~ßsÔ?úOª­~3 °J*úàS+PÕ(^AŠd²°‹ÕŤY¹J7âO>ü¸˜åç`Kz«MþMi©–ú?Ç»×ÇpÝFfÉ Àî1ù 8×Y¿ÂÎÿoÒ�Ä´Ù¥u=×&¾Ìùry9·©Á�§Â.GºëÇߊ�ƒ\Zû« Óîáý@z0ÒìØ32GW¦§¯]Ͳ÷Ôn€làÓüÜâ —9MŸR:ãéä}`¨•HÓwU“Í4’#-ÚR4vH@Ù9^Q‰'¯RwÞkzàü‘#ÙÇr3%¿ÌK>ˆ: ‡á±~ü®³lV�Fã"p¨pˆk'¹ T›f¾žjÎ5ñ›šùI§F~Öý€fu¸®"ÏAߘ(¼ªYÀ¢ø‚ Ôü"Ïgt Õ}?ÌÔM­äêàµZÂí/}ŒãV&¿n׃µÐÒðé™ÅUIgUjQe9à™€Ák�Y} Ì@ 6qv.O»ùâÔqUà'�>š]Ö»�ë5O‘…¤ùz®qg™qéZ s=Öß)OaF@™E 6"·z|-Rð§!GeÓ«´Ö#? X×] “rz=´ñŸúØü+ç7ß(±Õ'YH uÇrInI�VT7Kö8nÍW…7Íj¶ÖÔ1­¾€*«HGVWË€ŸÀ­Æ¢¨*cGØ®•š)ÛÁ£–@vΫË$©}*àÿ¼6ôE’8K/Šå' ¥ì<Äㆄ'—õåšKSSÙ2J-âmÀYv¶wH´‡ºËî Ó¨’v¥MBéJj \ ISôÀÉ»J}Sùd\à'ÿGÅÄ›Ûïp=¥þ¿˜Æ¨ø‘QÙ5bÙV~qÚN]‹23:„µ"¾¤ï èžô WƒN%}fHo >÷™ù/f^{í�«ögïÐ9«ªAï¸dŸó<Ä&/“[§Qæ� –àg¹øŽ €FÿÚx)á�5ÎUY¾:‘&’$"=)™8ñøU_2ŸêõÕW?ûÙì6»ÙPTøzLÛÿ}�ØÇQ íâÚ´‹‘�÷ hOcF�*µu‡í  Z“ê0ÍÀïz›qÕ‘Èé1L�Àϯ4’“·˜ßåZqåÁ.©¾%€Å¥¥lY`M×HO:ÜôŸ8ñ¬ÞxX_ š—x_ÝáVs;à8nsÑè5qËÒ2 ¥�0’^ë½üUyÖ�(H2¸ˆ£"8àBÚ¤•€O4µ?¯×}oI©8ÌTŸW€ýåÊAæõÐÆÇ›;…kCÅøzìF[I'¯ó“Ά#Ê`ÔN#7‘yy<æ:ÍI†\ý-‘È¢ ��ÚŒ“rz=$¡Kê~îo@:�¹óFÈM¼¹ãá´ƒ"Îìl^Å�aÒýé×µ1�Fº'é4˜ä_•Ÿ¢v8ü6ì1�[ç°ËPNÕ={ÛÉB_å‘ãy¾~ }ˆ º¥fõB’ø‰·T ¸ó} Ó}óÄÙŒŠ%ÀI'øäw~y·P«´-™áü\×~¸ÃæÄ­HÑWÕ8íIà×ì€ÍCN$º¼²n!úŠv¥=¢:x©§è(M\+^OÝøïüÔí©"×39¯Ã͸ r;ó¶ëS9Ù¼ú¿º°�­2�Ÿ}�N4õèÿÖÍ@n��BŠ~ÂŽ³º: &ˆC8¹€ä; ÔÊ „$m^”tþTÀŸ–ÿ9Iò4£‰IùÅ=BÊTŠšGgIÎJ‘nj´½-GYòPÆwÄeÈ�;rsç÷õŠñ¤“ÆÈÆ·—Õxš(.•ò³WÀ¨g&€aÀ(˜’€È§>%#–¨(¥mòS�¸V¼žºñßù©[íL?ä4ózlóÿyRü”³1Á�c�ÓŠò°/PÕ’ ¦¥rèÔ=}+²è±Çžzôÿpmæõ×ß¹öçþžº� P/êfÕÍ~çE•­ÚòljeÐôä.gÙ½±÷Ç’ÌÇ7ôv¯FîÓˆ‰%ˆc�ؤ£î8Æ™Ç�y�8îåà„cSå‹TWÌSNm‘¢¯KñW4êÏk�˧³Ó& "žŽ‹'ð �ݤ�Ɉ§¾~@´øÔŒ×S7Ò6§~«d\‡ÓvÂÝGÊP�� ñá<›ê€u=L­W|š ¨÷t@¿$Ôüø3=˨­Êœ£7¹C½pÜ28*ê4ºfGœUø�Ø heZ�[hgäÎi¯þÏ%­‹òsLxLÀJáíK§åâ¢tLDELû‘¾+O ywÁwó7ãä…Ìë¡ú®¥ÌÐtšï 2ò§Ñ¥¹òGŽqÀaô˜©žGõP_*K9\Ñp1§Á®ûêieþ˜ÏÀgúÏ À€u¹fœ~˜¢Ÿ8·Õéæ–�ÃÊG-Ìæ5 à A~!ˆÓ‚‚Núf€Öì<»Ð÷VtHuD…Š`·Z:ÞFutZäÜ´ H…µ2I¿Õß×Là²FîÿWK�¿þT8?©™À‰,û§zï?}2œ�}Ï�,ŠR$�+$͆ÀR¦ ~¸ïå‹NQ›ˆôv‰)ÿœž:ð#iä/ €ÁŽt)[À¨Œ›HÊÇ.;ù¸3iW^@¬âtOhwŽ´èLDœ)ͤ¬: ´EäüRú†ŒÄ7s®¸x çw:¼˜ÇiÄ{äo~×Q¦ŸÔãnÅ}}sÊ“‚Ëa¦õÕ&¾ß8©£Û�dê Íÿ×_Š`6à‰Ãï4tÙÀÜ:ŸÂÕ45¹ ‚Âá/:âÑŽ%Mí/É1 N¦O8ûáÉ�ZXx{lffb}tô!�jÇ™²)­9åJG†d}¤�ÌìçQUºCÄ+~¸�¼‰sÈ'½jL�ÊÉñæN‡cà¤mç¨Óy\YØiÎÃŒúÌ�XÿÛàÄtûÝFê�Tïö·Ã©«X'aµ%½<IJLáaqÂHr± àG(;ªaP£ÇøáèpR¡îüäI*'~ P¶":��˜Ä„‹Î†  ›4óúõëïÎÏÏßX9rä˪\+‡d(ÄÚ'f~N(Ó&¡”°&Gƒ¹`±!„1ÌÒèolwYßù�]1.†í‡óÇ´f~€|™Ô,ÛÅÓ÷¿/«˜r"äÇ£ÁeÉfY³ÞèÄw˜Äª¹· �¹ã#w~sÒÐ{ô�?pD›Ë%Òùè þg?†"ú or€_FàÜÂÚÚUUDÚÎÈ`OF@€fTÇq 'ëEAU+ qcá©;4]‹ŽV”…É�ƒ¸¶®Ó‘Ý–zêÐc|ô»â¢ßa⨟©?#?CÓSÁðÏõ›;©&>Æáw\+^ÏUÿïòâI1$/Þäå!vU{:~â7ói~D$=¶Ø˜xdGÿñË~Ò1šðXh Únh4p¦'` !Y0p0/:Em!tfÃÕëÜ’iÇÜ�cÀþàìzzz 0û4¤}Vd"}O•–ÈaÄ©®-kÒ\‡9q;¡x�XŽ 5Fý½ùãuðÓúØŠË8¿Êù%�˜—‘êQ»;ê± ¾0püø“½ßúÖÔôOú×·~úÓ˺�Öáxt�Óœ ~ƒ?eÁÂ�ÚÜÖ¨Ó�`áS¤EðnF9ÂêÉR¾MqÍ –ÆGå~*«OZê�ÂÏt5qü¥*±’Â3ÒRÎ.^„8ç€ó™ÇüøËâc~S3?é´«�µ¿ë2§­P¬›¸b8æqz+ž* ÿ¨/ÏÏy"PÓÙ€N{,(ýªÖëW…'{''ß’kB:€6à£]$½.:òÙaµk¸×t-¦ Á�CppSô;.rêÒPœf1~÷üRR~'�Azj ÎŒU#›W,šNåso‡ &xt±å1OŒ·ßé9íb€Û.o±l1LyÚn*†‹ñN7'‘ò¸´(y"Û «¯UV¦Xǽ oœ Ü~Ðmèt1ÝỸîe¿Û¸�Ú–4‚¢Et#Ài^~Ào¡áÇ_t.ãr+R,Êí>¡|ùèžö4=eãÏÇ~QÖä<µ÷§›vN/*u™rgG�œ§Ècoc~—a½oð7[û˹NÇ›—Åû:Å´OùíÈ×çp�ì°Ø�{•Þ±±É©—_~lìé§§´·Â†Þ{T7°Í‰·aàŠùu0a´E�|ÚÎû<& Èá"¯�ö‚U1A ÑB½ñÃC[’w5ƒ` «b#Ö¤¬é‰€Ò0 ´æäµa !Aá·ø·kh;€¢ïµ3ðow­ÝN§íÈ¢¬–§ÒXfaæt8h@}è¨Oˆ©m}G�~îÈ/þâøÌoü—ÙO>yeui‰�ˆÁÊFÀƒ˜�Oá ½  ð}Omz*À&£;Ô üÍ�_7,æÞQQiC8�$d„—3¹INéð¤ìpÏ(gçÖ†ºieyŠù\¾Œ3ò{íߎˆuSmŽäôb"<ˆaí\ò­÷o# B3àxÊ€Â}ÑßÝïŽ @nõô{œiúŽ*΀#$(ÆÅpÖ³ººÖ£çÇk1x'ßÊ”Jíñ?78] —¦#Rdü(t2î, gÝ·ï´o‘—åå:ÈðÃ˨X.æ `LÀŒi±œóÁ!§Åxâb¸žsëÿ�YaØ `O SIŸ ?{öÄìÔæ?úèF¶´ˆÑUóvT#†¹AX9â“ڈ߷”køµŸ;홀^Hƒ„‹®¸!˜Â“·n­N]¹²>ªŸ¯uÀ¨� øþ_�™… îVfÅ\yw�¿�߬~Çãs#œîðnó²kr ÇË‹`0Îݾþ.Õ§½€ÏýÞ÷~éÈË/?£Gƒzw-?Ýú‚Ÿ8j9~ €,õÁ8Ôd¸Q÷¶!ÝèdJfqô'Oþ�ééÛ#kk—õjnïíýx]°Û\uo’ØUuºÛ(²œ7£¤A”~SkŠñÅð¦Ì\,¿*SNýyäxç�õÓœ‡[Aš9ñø›‘ëi•Çe]¯Ã%<-ŸT�Y[\µ¤ä½�ê9‰[[X¸Ñ;<üšvùájƒ½õ ÀÜipÏH7Äq;¹Ëj^k¢wK ÎØðã>Ïõ퇯ÌÎÎþlffæßÌU*-°ñ…ðÎ!¤Ø¢ýÅ|; cøÚ�_úqYê�Ž™Žü8‡cžÝjSlƒý澞Ã9ÎNž„&³‹�íÀ�qøËÒœÇé÷ýñà;žH@‰ 3ôÀžsõ¼áÿú§Ÿ~ú¾Âçû>ó™~}bêye¬ÿXÈ´¯Þ¦è��ÚI|Y^âùÙý÷  X?y;ÜÎy4åN#=#9~ˆ<„á~SYœÓ"o'_¼N|Ý ¢/÷Ÿ:5¾27·¸|U¯¤ð^s}€2À?q›#TûÍ£Î+ùþ":±[„¦!4F϶› p sˆ’ æ»%-G~ƒœú}]¸G}òGÇ,€°g.ãò;i§ûfÞnÙ�Ÿ›øƒ¹i·–{ž¯wjê3'~ù—¿{üWõY}>Œ¯Ø�ƒV#>iÎcàKø�¥€¼÷'щ]¡|& å`:'`=ÀbÚù:c,x‰<ºœ¼ÿÜ�/mIŠáÒB%‘×Ïý¹)€*Õm`átFvñzߘ×.źð郎¯A¹¼,{÷õŽŽ>ŒS{—oLL¼�}ü1KPôÑF lô7ðé$~°C>–·÷-íš@ëàÞˆD`à�Þ‘@íÛ{ÂÄÍ¿xEƒªÈcüCÀ2ÿ�¹XwYx»º¹î^]»¬=wWÜ 0ðmÐU;€ÈÁ�V°ú =g tŸÑ®€’™Âá:6]°ç î3ÑÝes¬ @YU€­èb>ÒL1ŸãÌc¾vô“üeùšÅû:÷#_[ãc´��ŽâGGmb>üN‡&o×H&Ϙ"qNÀÂAsm¼€×ìí|ìÃ’ìò½“À†È¾ÁÝ üÑ�—Žý®ûŽv}` „™‚Á:| œ(ø€PùñÇúAÇtsó'Ã<ªÛ”�½%Ü�Æ‘w_�Ùkò4Š™€Ÿ ÔÁ/#09=½~øêÕõ‘ééô†Þ^7fßëgä××�Óô¿Uc˜†—9—)K+›ºÇ|.ÛŠ—ÕAþfñ­êê𴾩©Ó'çw~áäïýÞóý?Ì�_ÛÀí7ÀÍ�Ó9˜ö´€a¸ohÏf–@>àÝ €…‡01ë‡nÜXÐ/ÏN��gKÚOï¸ðAä6, +ê�ãàÑÅ<.ëôx& U¼ÿÜ®fUÓ¾b›åí€øž±±Ó£cc§zgß~ûãÅ�>*{`]�3Ç¡Ï`ˆå-q„“^‹ß´ç HÁ3i!­ÍÏξ%©ýÛÅÉÉ/êM¼/(�/ï+µ4á�½nÖr¦û8€ß (ÔëØœS�S>y‰/‚ßmŠyËü1_ô—åmG9œÚ|Ÿ ~ü åWiøi*n°ýè­Óêeë ÇïòÆýC÷Ú0 àš29�|C�8Ÿ=üð }˜ã´À·ï qû¬ÜDäJÞHÛ©]cô‡àÍêàZ&ƒ›rø]Öm+ã.Û.÷õÌwZNù1švíï¨|›�s?qv1Þ]†;½¾oè^´ÚÀÇŸÜââ"§×ú+•yI°c„ÇGC¸« ŠÃÀS\ƒvï­“@IDATï“È`s½Åp̃?‚Ÿ0D™èê±õÿ®o»¸˜nYY§™;OÎùÎ"?v¿ÍèŽ~GðÄ‘ï~÷ÅáÇ{ûÚ+¯¼«¥?€k@GÀÇ8t5†ÉÇÍíV[¶¥{ihL})¿WŸÛV$´.¼•ÜeO8ú�^ä±<€Ÿù†·C±¬¯ecáòÎSäN¿[îzc=Ä•ÄÛÔgÕ±@çûµpjäÌ™©žÑÑÑù�?¾"pK­Ð8]f ~sn,úÍׂ8`„¿ã©Mm¼û~ �|t@ qCAÙÝý…v«ß¿È ÃÍÀÈõ�Ÿû~¦ò­¨X?a×W,ç¼æ¤G1¿ÃíäÙI^ÕÇ«À,Žù�€E¹õ³£¾ èþ”píôÕúúúªýýCÕžž´£¯ltÇÀ·1h¶þç¦FcÁ‰d½ãgÛhc‰´î" # â±ø8�ov”HKškG¿Sóñì€0¼ôcð G;Uùºn‹9e�ÖN=wšÇ×+^+Äó& _üóú6 þûŽ4FIE=¢ôðg?<¦9žAG¸ãéžÍ‚$°Šv½ @ȶ^Öþ¸ø­è‰ âǹœÃ¿Ùë¾Î w~ü�ëv¼ÃõÔ­ÿ›¥ãc¸Ìï8ó­WªÇ�7’›:¯“*2‹2 ò³/У>ðÛ�û+ÂyõáÐÓ/½ôœ~Rlðæ�~ôÁâùóe{€~»™À}³°q£+èŒ)ú·¯€ §a�Æ¡ð�ö·ji4wR¾UÝ;Mãúeäøf<–!�óÅxÉ‚�ªÎkä_’¨é{�PýÇ k”~:Le›´"Ö¶/~íœýüçÇz&&ÆWnݺ%À^€GztÖà‡¶!ð˜A^0E€ý0Çr#³³ëZ8e«-åô©0%íùn² ˆ£Üð—�&«‰Xïã0pÈeȃßyc|=gý¿ãWÌïø"/–‹é­ÒœÏyÌoN|tôQ÷ #À~@úõ`åM(Ñl ­ûÄÙH¿$,ÎÆ!ûBùÞ�kÞ7^©Õõsbƒ½##“•¾>¾nÎM3èñÃ6N3'ÇƒØ @Ç;’öÓl2ׯ¯÷ë‡%æFG³ÕÉÉli wŠ;É]ÃðÙðT+< ƒ±ÚüÀãè¼UÞÍ%;'d½u¿#w+‘ D?ýˆSAtž–ìÌio 6;› ˸�h6Я¼ý2�~º`RÛù,´AŒíÂïÑÕ(†‰Ãaùí7G�º@BH„5Ìoº“x¯¦�ýʲ¤j¥r¡{Ìóñ;�Ó,€v‚f‘œÆˆ¨¾¤Ñßq1Ÿý.ï<;ÝñÓwË—ùcœë.ròع}9úìxq$ׂÓχ‰§ßaP>>²(£Ð'£�co€½‚N9G Ï‡��=ûì窵ÚÚô믲°±Ð øÄcï=݆ÇK8·’òuíÇ @:’Œ‚)s#" JËÝä+Á ð£ä&ÀaÒˆã]>v̨X–ßùŠåÞ ¯K}Ű¯áø"wâËéôÙàðãœ×õçytÛ³¹eíTåø û�ä4"C9 > YuÂŒ 62rlôÌ™¤O‡O®..þ¥ À´ºb�Û˜£vÄ¡BÊïÍ@{w$í‹È%�UôôJ³ìµ+r?ÖÎÉšÖ‘)�O…ï;qgQÜ´ß""2ÀÇey]Îe‹aâcáí¨˜¿¦|Œ³¿/^/æÃÏÔßÎ}Œel8óržø”é¥=Û^å÷¡"ö öà T{{‡q}ú|¸éÕÍÆˆîe€Á§ 8”?ià«£7÷ÓpßhÒ�ëׯ¿3<<üof�¹°\«ýºâ÷Ýp'}7ÙØÚt×ÀVžr¸ÁTØ#"ñie©§îÏÿ” ƒP&.:÷Åyé§ûë^ûeåòÄ©,çÀW9; G†l²$P}ƒ2žC ‡Þb/`m GÀG¿ ‚Á9ùÐm¸ˆT´꼃Aûml=ׯÖéVÿ™3'ô4€lèJF@ ÈR ©a®¸ ÐÄV’ÆhÈè/Åm lÀ!+õvázîæÆÃõ8ŸyY|Œ³;îúàä�޶ÓOúŒ?öÅþX?ù]‡‚iF Ùr2¬Ê¾€ÜŠ‹0¸l2ÐzœÒ÷š¸Y8.Ž3à퇣ÃÄÛ_4` ‡ú�·£¨c €¤‚€:ê@wÊÀ +:Jœ2�Cd¥f4ää ‹ÇüøÉ× õšöþ¿ÛÞŠÇ4üvôÉ~ú qÍúTOœë§· 3ʃŽ%ñUÍ–5+X¼};íŒê[ûcxT´���æÇ¼ö“¯c÷öÛÔA/u��ìPüûN9´ëË)fj¼lZŠR{4Ä”(yi‡T_"òC×CõzÊâ�n^,×,Þù¶ã¾&ùÊœûÁï:Ý·¡§|^?’ðF`U�…e ²>É“Ùé:·ŸÕ4+¨!㽦ÞÞÁÁÓ§OŒùË·æ>üðêò¥KÞ ôˆoc`C`ÐGNË^@µÓ–÷@Š-ï÷gŠ~Çí;šÜEfü .�±£;­#\D34‹eiÍâ¹®‰°²ûÁ1 (³�ÃÝôÂõS‡âúbšã"/¦;\Æcœý,uðÃq}üi8· «çlþ¿,qr mª�«á§„…7²%�*Ô•3ýÎ_š êéžQýd M°£I¸²Ù€óÀÉC3ñƒ5ü„ë˜'ûi’0,ó^Ý`^$Y×�]ÅÊïˆTùnKî$Ä.uš@éE46¤[É͉‹dÐÄ8ûc™Vùš¥ã.r®G\ŒwX\�L.ݵ‰›×0 ´1¶“4“ã]¯ÃæÎWà =’qM£K˜6¬k/`ðË¥aX³®ɽW<µIõòÄ`7÷´éÕL`rø©§¦–._¾¹|ýzqбO6øq4ÛÎX#�V4Ò&‘üûJnÔ~5!!„†›¸ys½Oë¾%}=gFV�£Á�D§ØøX'F ÝE @ÙÀŠn^ì õõ YÞbÙí±Þ2¼v™?�ã`NŸ _ûaæ“4]ÀLg#lèàE¢Ôqýô½Ò\šu©îd œ{°tófÚ0L÷AíÒSƒA¹Ý¢ÚÐС±³g¿¬ÏˆO\ÿÛ¿ý‡kþçï«nƒ ‚�ïtš‡ŸxãnßOº!jÓ½%¬ë7Ñ�tëÖÂÐòòÕ¹µµsCCÃz>¬yugPÞÞt1ÞÜMÑXÇé?M¶â›»8LÑOœËã�¿/æwØÜåb¿ÃöçœY‡q8¦Ëóx4–S{l†Â™ ñ`¢"'’8êrþ2*¤ó>H�À�ƒ\Š+áÇ%¿ò1#`I�r棟—aF�ö| •Ý i/`¼ïèÑq½!88ðᇪìr>Ü`G—£#žfXÇ£@ÿyS�´}£}3ô87Q@ë·oß~_Iÿvvbâã•ZíëòŸ&o§ÊÇ.uE?ò±ÎŽ43�†(š•ͼØ]³üÅòÛ…]?ùÊüŽóµÉ'0Ŷ ½½ê#§òF(å(Gz¹‡ÇuK�okƒŽS|<õò õÝ3ê§OæÛô/-³T€‘9GBYw¸Ái—~dfZKIâpÌvkF �5ˆ"Âî43äq~šB>0çæJ4ÙÑõº•S½¦}5yg‚­_¸pá#ñ‹½�<²¨çóºÉ§î8BùUÒ‡>ýÒÊ]tn¹?Ž4‡áRÞT^ ÛZ×±N}‘nÅIË]cä׬†WxGeèxa’Âjæ]ÿükrŽò¢Á…´$r_- êt\ª!üs|ž']—‘Ÿ©¿êCέˆtzŠK~Õ³¢Ù³+3€~~�)7JÌäîdF 2µžÁÁ¡þãÇGWfffWgg›�?Æ»yæ`ÎÝ"#ÀXHsï9u’°€ê¼6–¬ lVnÚù·B72·ð ôðÛx&á4x³z]y"ã.ãÄáò6ðaÞÕgäçÝýA¦ÿ‘Ø`ãm|x8†e•Åñ°E9 DÒhÚíþÀ¹Žûw{ò8¦üüRT¿fñµðn5ÀȉmÁïtÕÞðÇð»<3“ͨmÞ¯�ÁK38%·MÕ��‰Ñ³g_Ð[‚ã7ÿþï_½öqN…Œm�¹ãà4‰xûåMäG‚4S6 ’lè½6�b,$¸]]LøEZ@0iã#€—9·ßŠÃÄÙåàKuļÑﲑ7K/Æ;\ƉËÇ�y?ŸÏxþ1<}Ê+\3� ê+ƒœÒcúÏr€‚ÎpzOþ%Å-S§òpC“ �Ȉxx¤<\Ã¨Ž¢ k¡D£4ñéyž¢en.[–3:io3‚œèíIÜ‘%œ½€�'¾ CH‡—®^½|-Ë>T6ƒÝÕìpšâ0~òBøÁMÇFÁy‚}‰çÞÍ:Á¨ßIHE=¦þ»Q|`�óþ(;ÿ¹mQê²6£üP8�º)Lý¸KšZSŽY@2 4ÿh:# í”W~¦ý|ÊÓÿR9ä}1P.ÍRã²H'¯9þUƒÛ—.5ŒÆ`@Oœ8bÜ6mÞ ˆàÇ®¸dtŪñ#Ñ\Êqd˜½VÒYPÇžQ'€¢�êáú`O;¿S©Òî ` Ñ±Ôbh»{—/üí–«×^þ¿xM‡#·ŸY~ÖÝ86ùØì–’!H§íœ·üj)–Q‹%Îû :˱ i<3ŽóÒGt9mR§d˜N øõ~2ÌD f[P.Ñä�ÿϽ±N*ú¹jqF0|èPÆSN–Ñ–™ÁÆÁ �þ¨…ý6TÅåcˆ+’ó¸<3“°ìí7Ë{ìËßν²ÐðÛÝ›«ïä*RFÖüŒþɰ@iPÒ\Q¼¬^߀²EÏ•½QÖyb®?Æá/æ�ᢟpp€Ǩà/Ži=m¹“ÁÇeø¼W¿êb³ ÎQ^²GÀS6 9G�÷‰÷É`ôÉ`Ô´Œ �(: Âö§ˆÂ?§µ*G_]�9qkÚs˜½r%4ƒÂ^ÉdDûýâER?)jЂ#ª´>#÷¸Ü?äNlÑd—ƒ»¬¼)œž¸ÊÏ/k§qG×t÷ȳ+DC÷›¢àa I�÷N£×º”9�¥�?�Ö H‘p¼wø£ÃIJ1/e[Q1o Û9~®'ξÀÃ'¹ëQYq­ßê²Û¥ùiV¡Ì,p75ý^á�®ÏÍfäïS¸_#ÀÉ?+„A͵ðãˆ/’ÓËòºÒp6«2sr´·(7'7¤�Bý`ÐVPŸP� €‹ºjÖ/Èýªq?‘+ 6QWtÔ‹£‰�Á^Ì:Á¨�IHÊ´®�Y¿”dE£íœ¦g+€mŸ(Ý]eMSä5µ%­ý›LS fÀ‰°  ’s¾h\åñ;O¬ÏþbšÃp;Õ�¦éê/Óð|ߎÓý-S]×¼X—3�ß`V�©ÿëõ™îsÆŸ†­§¼ 2�$ èL÷Yç3â÷¨OÌöš4Ff˜ëËð¾ÿŠŸãé¯û2ö"è+Z�RÐ2”¢ØÂfñʺ‰\Îu˜“Éu‡ƒ¸.``œØË m´³W›…ÈKr]›œüBßéÓg'/\ÈN( £�RYTVª³ªk3ÀOßöšâ5ÒÕtíÔ^"Ú¹"£´"À­ pk8 òiôË}G*ÅVñOei±ÒsI'à0÷¡GŽ4¾d¼¨75 UeªúŒ}ï¨d7¡4†h @’»8åóköªl¯ èÕ2åggA½ü¼ Èoj&ðç²ìµ�³ŒŸ#ðEç*¹Õ±D`F€aP3[)ˆr4¡Ž0yÛ�q™kÒô{Í] Q(p𯿀Yñ ø­äûÇ ü8žµ�„º!žÏà—uÙ,K†@U§“uJ£ ‚ß”_7µM~ÀŒ£Î´ —ƒ�GûÓh¯ôý&ÚÌ{8Né¥Ót{AwVX“#+õM·öGû@|ºO1²Ä_ÖóX–:¢#Í ^Wûx™{ÎYÌgI0 #@^å\/õqqÆ1crZ&<¥¯Œ<ªò‡õBó§Šb&@V@îbpWíx.É„¢ZâwL�fܹõ……… ¥þL=œÖ;O«gÇvÜ»;,`cÊèÓ£�Îü ¬ÜxÖª™”3m P+Š_•óêrãçÌT.<ús…fÍË3w¦âLË!ÀΔðsý4ÈýI!]OÊþÑ&mW°S7ë|Oõ�/o]¨äÞ{igƒäç¸.¯õ"/fZ«šð1��ŽC<# õC…#§O¡ÆTu1ܸ^îi•NZ’{ÎN¯�+Ž0†Iƒ3= N~ÀÁï2Šn ÇyÆ 2ý8õüÌ“YöËG³ìÇç²ìõóYv=Ïj#@1ªäöË[C.ÏÏ:ÉØêѹžK—.}8;;û/=ú©¦\¼ÛyÏ R…j�”�) £jº¹RÈ´i¥t¿$ó[†[~Ï0îRYÕË”@MIáB9 ñ�8{r0¡¦äW<<‚mS�μß\}£�Ì0\½š­¤—‹$§}”EËrH WYêc¡ÄÑ×$‡BZY0æ�þtOòº\Ÿãh Ó~FóØ6Ú¹ü(7åPî¤à┵!\åN¨Ì1}xðÚy |J¦*¡:ct &òþ€ÃÛòN24ÖÖNK¬E�#Y¼¦‘òº„»Doïy]Î3jO§Y§¦×JÕ€ôM ù4uçK¶Ëš°iéY„�ï©¿êa×�lXƒ3UO”ƒø^õ±Ó®c#Ål Jò“aà”ÞÐÄDý ñÍÀ˜ 9\D‚ý«’´�ºu+;qùr6¨ÃHu¸½>¨åÊQžVÉO«ÝžüŽn2® 4S–üÌÛ]FÞAåTŸ:•eß–A˜ú$ËÞ–ÓC‚TÅ(N7àPìRòït&ÐIÀ2.ãõîÞ£ÿ¾B ÀÓÈ/@§e€”)Ûnž]stðgYÏò¤@€fŸ a”—M-À˜hd(Òzüõé¾¼ŒäÇaœ±Ã‡ÓŒ€>, œÓ:´ÃÏ‹"Ï÷$òØgâQ,x3:võjö⫯fSzô•0‚ÞÃqB  ÿ§U¡ÛQ4HÔQ~£ØÀ§=Ñ`(ø¨–½‡Ä�kà¶ €¢¼ üѸk\¦í=�N2j÷&¹; ¿7Hå’ÈGžýVp€_ i)Ó 4Sgôg@˜—X¸ÉÌpÉP—âÒQY‰ôq Œ ×¥-ˆ3f^ ’¼x“�¸Év·fFšÐä”Fu× -3Äq÷h‡ €Ã´×w–:ì@¬Á'.¤i?$ŸÑ&á×Õ>£¶ß“ðLÀE ~•n�«A·’_3)xSê$àÆGÞ´á{’``q©ÞK.=ÔE}SË®�àM6N·1XVyOýYóó†¯Ù¦åDøe"Ü6ŽvFôYðuˆÇ†·4rÏ3S8ÑH1OòÄ¡hñ~F¤8Þe+€'×}6ä)µ¢E…&e]¯9y¨�4œ!ifñ+êå …ÿ� €Î m)FñHîB¬Îq1_ÃßI€FÑØÍnã|@£Ñ»îÉ�$#8ëûô!J]$­ùýy^ﵺâRÏAl §™ƒf½ª‡�›öJ)}Sþ¨¦³žú{„Ûõ¾ð Ó£LžäIJ‹7ùèÅ9O€3( ²È¹g�ûèÊÄ ò˜Ö¬\Œ�†‡ëB¤[7àÑ`¸,ùœf]Á䯚 k9pQKž6j:¹É(˜È—pNU8ȼ*üï$@G¢£©l—u°Ð�Ý `>HÁÚEã“Ó ü]׊ ¥6‡˜¬kº ðÇuª‘Gs]ð·’âÎÒ˜M ë=†Žèª(_(š¾v-›“”(8ñ€Ò÷Ð\Q Je²:�xS,gTQ¯Á_48.ç:]>rò�nIJxǼñµ}‰ø¡Ìد§Ö‹G?y1ìøäXC5ëÑÿ;ɤÓèèø:L¯v[y gYŽgî{Bù™Âóº´ñèq\�Ñ¿D†Qªntj›òVµ `&À2‚ƒª‹xܽXnOúòUÊÌŒ�B´&À>L|lØîŒ`ZFäÜ©SéØ÷!í ª£ nrœ_4Nw~ë†ãc]ÄÚ¡Ý —Þ`4¨( €b¹Z«œ|E.unþñÑ=BS½…;ù�•RCi<2�'7~ãÆú�€¹¬5õ-=šßà©zœxu }þ)«H©­Sz›�¡Ñ‰¤ˆûõñ *�dˆ»kKhO8!½Å§'1 hº3šÌçKžx@‰ÿ¢ž6,>÷\vCû Ïÿìgéõä²|ÊÚ¨ÃÀµ(Öm}@©ãõ¨Šˆ5Ê£�!¨(ÞQTÑŒŒš‚ßM¢, š°…Hì$r'àÉToß¾%½¡�pLhCí¤â9y¹;$å€X÷{ôO7\ eôOOýsj&ýF£UŸŽ"²ŒàuXÞ€ã @—ö^ì8#Àè.i/fQ.-íÔ„5-ÏØ<´aO÷\ñ·5Ȱy;¢'Oè¾�Òìâý7˜�fn3Š3•çdŽºp&ë å¨Ëåá®#G=ÉŽ’w¹°« ž0U°¥P ~ŧ ðŽ ²YÀôôô'ÒÏ��}ºÔÓÃûÕ»k¤ ÞøCAÒÍ`Ôgºhñ·)ƒ?I›YD>5Å´[G›—êfÛ�Ù{Éï÷aVÓû=ëç\È2ZHÃ�@«éwJ'hŠ÷�8œË}ž¾³~×ÙþL¯ý&Ç›\‚»Üe‹<¯Ÿ7 ñÆÁÚªF¼ýð討tšÄKC²wRðÅJ Iût‡Ò àÆ�7å~Ö÷ðÃ:5÷5¶[ä©zäÇ,€Q›ÑßàWØ7*^s‹•˜$/c‘-ίØöHñ�8íW"ûXe׿G(θ û½Z`@ § ãŒ`V÷ì‘#Y�f ã:Š<ÈìAùÈ YÖ sòðn[ö#žs½ôÃù‹œzqćk ÉZ£Þ-½1xYF)~7ÀXáTí*̉'\çζ¾>Ü© á)o¼ý ¦ÎÀw…t¿ c’à÷Ú?ÿvrãÌÙ0dæÐ¯ %ްò‚KüÛIñÞ¦óÄ }ÿOF˜×”ÿ¶Þòci€\Ñ7|ölvCOμùfvTç F fÊD"Œu¼Ä1>8Æ€úðCþmqç7¯§nüw<\¨>¢z¿®:§ÄÿJó¿-àq\¢þX~„†š*.Q':Eƒ¡Ý}ÈLˆé¾ =ó—Ÿc¹iô—õOŸú�™þGrcgiðÔXågöÀÔŸ�L¢h]ê< Ä=Zǽã¦éD¡ŒÀMÝ·9}q#ÖûÍ&ôFâ°f )RÔü Pa0pFŸ�ó+9qŽ7Ï“@ŸÜ¸®;©ºmShrt8œ*b8úQYÊ5ˆÄN$ÙÀWòïæy,?ë¿|§ð³i—¦þ¬q€—îDnøýz~†Š%@—î ôËXOhÊ? Ç·yˆ}€› ¿þôÓÙëÏ<“ÝÔ=åž)Æ¡š¦§#{õ׉êÃõ%űuÆ~Eo"Ç›K ¯ª-¯hÞÿ}Í 8ÝÌo›y©BÛ0mjÄ>Üw8Tï¢`íÏË>陿.°åЛ¢¢5N‘úç†vc“�!© øLÿkšúwéþ�€gìÒó[‡¹A­ýù3À¿”ßOßoszh?FC§ö1TãX°_“Ã0�NÞH.ëøF§DÓj×[Wôí@ùi¢§üTý<¾™_Ù6¨ ­Kx·\ê-Þ%#€¤Ò;þùÓã>ÝèôŸ9øëÜúß *Þ(m³¦·ÿX[¢P•.Ý_Ðìmjj*ÒS‚ÃZû�éÇC8ŒsHÓÿÅ¡”ñ¾ã'."�'�›ëœ7­Øæ®ÏasÐ�_œo‚£L{RY…á¾tôW Ç8%oP'Ë•þ[>ëþåzÂ×wÒwù6úÑžO€gíß8ð£RI‚ìúsp¤É¨M#"¹Q¾Yüwœ a4PdÙ%>zûö:_`]ÒT}QF mŒ<ë~>Þ�¥OdäæZùŽº*âê¢$¡º·ñßqnàgÝÏñÓ%íÒþJýÑ AKz¶†|»65jþ“O>ºøÇüêÒÅ‹,Í¡Mùt€çIMÛOÉ:LRI>7àèðØ"¹2ôÈ~¸Áîr{‘s=®ËF"N~ª*º¤Â!^ÞMy†“·¡öò»YÉ*�¡‰F6zW ÌwýÓ‘_Uä˜ÞôÓÑÏtæ›5»÷�ägÁõåâ¯ÍÞU[»…ïJú–àòÂG½?ûî»çdÝ£þÔýŠ›{÷ÝK+·o³4k¦F^Žéaû:›xÌ3yžÃH‰‹(R°A& Ý@¿ŠDºõ¦h¢�øŒú4ŽÃC8?Q�·Œ<^•¥m×q3€B‹‘[rú+¯5b±g5E`‹½í…6ÀçY®�Oæ”5¿–é÷ýò8±-DLn7‘WQ™öwG~Kg︀½&·RÿV¸®³Ü� k}¿0ûÎ;ïŸÿWÿêïéÛå[XvYçaý¾$à-È,¢ ×l¬CŠÈsŤ£1�¼¤—€2ðëz<5XգõCÏ"J'T[¤¤ÖÅÈVáŽ4Ìâ45�2[ŸŸŸ¿¨×jÿdqxøÊr­ö’:õd«ŽÅ4n Ö9ZoKÊ<æ�~k…o°婟Óc™®÷% ßï›^8þýÅK—xÕE¿aRX?(²<óÆ+lWæ�—ßÊ9±wQ'îþV£ÿeç}B3€)ë�õ¥~ñ�Â6 pçá"&ÀO‡1â{ÔøŒöŒrš\øßV;Þ‘!¸¡¨fä¦�î¾6Ë»%¾# @ÞÊ(³õ‹/^–ûÓÚK/}ªOiŸ” [€¸ö—ŸŽr7Ýœú^áD‰’h©nâ*Ëî1ï–ʺmI@6ŸßÇ9ÃCÄêÌÌ�?øÁë—ÿý¿7ϰév(n'aªpýEγû‹r—ü[:ƒXóÄ M7«8=oCƒ9¾ÌĆ¡Ô^óc ~¦ý8€5-?p—õ(ñ‡fÙûŠ&«iK{�Ђ» dqù”½“ ´pvt$8­ù »þéiÓ.=öÓfb«­KÍ7�ƒÃZ:ðž?§Èºt÷X¾yó²Fø—gf82Ïæ¬ÅO`}ùúõéù>¸¬$À`%vž¨'�a牜<ã‡Gª`.fÙßhи¢Áã ñ£Îä X'â ƒlœN^ç§8Ÿ5?#¿Fý+êä{ºî{zŒÈÈï¢eœ¸fNI�Ëû²Ø&Ø”IÔÉÀ£ñwDÞõ·uæ†$‡Ðc»ôºo·ÝhŒo Ïù‡uLtX/�tiw$°|õê•Kò'?ýꫜ¡�,rëÁvÜzâ|„íw}GNZ)]’�»ô”óiô?$�E Wn�°°®Õsmüwþ²ÑŸ©?Ë'Ä_~+Ë~ðA–�W�ì.jÛ^G:9ù°7[~9¨“ �Ø9aÜxίM?~äá¤Ü5�îÂñȯaJj¶ÄHÂo‡ôpœШÏÈßÛù%‘öIk÷óó|^�è´rjìÎ×E®ðü‡^ÒóyŽÌ{„·ø#o¦ðä! ²?–k寗*ÿŸÔE#ñ%�Èß×8—ÿ„xœyèd'‡L66\¢q8¯ýYóç;þ¯eÙ9œ÷4 à ‘‹¸˜Ãîa÷+úWäΣbtð }Ó´¿¢½ÓšÀ=÷öÛÙO>™Ýà}“5ÿ†8ê>$gŠRä“ÔCú$5/û´[—ëyÐùüG¢ý¯¿¿2;‹îG±Öý++kÚÁ�#ñVÚ˜?Æ!ÖŽþfåc]ø›‘1\øçÕÇd>§ßôT#�»¡<ŽÂ¤8 ð@ã‹Ñ0œ SFþôXK\;›_ׯã'ú�Pd䬾”«ˆ}tœ/ÓWÕÔÉÀ2Ĩ¶MLû�è—cŽè÷ ½Ç=¤0礤ãJ©Ðw¿‰^¸rEXi�E‰±\×É»÷WnÝšËAÅýQ¹_Œ+†Éç8ófeoNcñ—‘U%q!rY{Ÿ ¨¯ 7Ü'4 8É»ÌâL=qa_ˆ†�d¦7 àçîSmø}¨uÏ»šþßP:¶!‚¿•Ÿj‹ŽKF9(¸I� 7¨“ �´ámŸõ>.ð?õÖ[Ù„ü*ÅÍ¡‚fwºX±oZäÜ‘bþ=¬ŸÍ^¸ýÖ[oúGôcÉÂbÞà2+ssË?Ê Y´QQ›ÅµÊã´"w]p§Å8ûÝx$ë[Ô¿Š@zEsóï˲ ÇõÑÞÍÓ§¿<ð,À}!£ð3òkšŸÞ”Q¹ Qÿ¯Yû+ù`#h³‹D¿ãÌI+seý&ñ›¨“ x³k4zT_oÔ×[ÖóãÀü:/TÓ‡Æõõ×I�ú|ÁeLa¬3à禤¢ƒ?œúËT6Ná-ß,sK–ï éÄ`¿ÖþÒ{þ«³³·/_¾°2#¡CkwBu±)nM‡4fÞz룥k×ØÇ²øêé­h¥t‡Í�qö›Çôã]—Û^ o*3U¡nEn ÐjÔÿ�üW¹˜PË—{+S¿*}Lî� ¢Uá‡bçeV®hÔOo ª®ä® üLhUR̜ℋÎép;—'l¿¹ã”´Ai´I”ðªfÆÙ­®ÈTÆäUòº¦â  M¿© ²GÞ}7;šƒŸÑËÜ0Ÿõ»NðE@ÅEBj–\¯®7¢Žý>HÓ=’»qý•W^½ùÃ~œË'‰E7ÇâAŽú)ž•Õ¥™�^EœÏÊç°ó4 ó;lË;®È›ÕÛEžVd=„[«²†ÿ{çökWuÝá}·ªà¦0 jÍC«Š†¨©úЪ}I+µêS¥JÍCÿ´þ•ªH}h*%¤(ˆ–$„‹ 6ㆃm|wßÚûÛgžµöÙì½�³¦4ÏsŒ1çškœùs®¹.ûtûß™J~!àç¢�Qõ`ÞüÛŒ¹gwL>Ìö8&›}‡Sï?ƒæ+t” ²)dž½@îy¡ð3³Î\™z)rø6·íí8ßµ üÕùs~3àw²´ç³]™˜˜íÆó3\äÚ3¿ÍÇI ~x@úü›ËaŸÈe¯“ôÚÙÜÚ;ñØc“ iO±ëÏlæç_üÈÇ�”rM~úR®Û³„gŒNÁ<=Án \ÌÃWy¦þãK~˜Iªs ZtdÜ&¿mmk¹�¯²z,åÒª«|ÕW9< jî=s$�o`%p-;÷—“ZèÉwð_D÷¿Yy^ ÏŠ`ƒÕÎÍÒè—l$†¬$Û·Pú]3{)|_¶:yÚ£WÈ·ÝÿO¹Kë:¢ç€O/·ñ÷åà ÷nmmðc›û’ýðF÷•ŸŒcΖ F`N�ÿNMO?>ùÞk¯MøÕ!¼¥GßùÖ·&[YæŸ Ø‘ß›Ëfþ{óÐß ¼ÓÒ¥Ó§�Ÿ|é¥ÿ¹tüx]âçʼnéC8×rÝže=³©TyÜO‚ZVßÊZ½å–Öz‹t§µ±¬Þöì§rËÐ6Õqg¨´}*®eì]Ï£»¯Å™oEɪ`3!`lÄ�ø‘‰¶MöÅ>Úw‡%Ô5W¹¶Ô5+ƒ?¶Žçl>� –Ìâ/ÜŸ[.Çɉª<ŠyW¾å÷tnó=Ž÷éü|vÏw•Cõ6åkù°ã¾£G'û²GðP^'>~öüñN<Š—îË—_øV ÿ‰¼�Эöâ>xy†§ëà“95§ÍïÁOοýö{Ù¼;yùÄ ¯?ë`”w@Z¦•*«¼6­Ì²´ÏNÝ¥N«kÛQ_mµi)ç�l(1tjfÈ9¼àÉ 9†` ¼‡ÌŠI™¶µ-ù˜u}°oö*€+üÒª³Ô¬åÞ´Ž€Žnf‡õÙtîŸfA`’k« ¶û2³ß�>¬W¡$<ÊYâIdì²v¡/ôj6÷omMžÍ,þÉp™�}l©ƒñTÏÉ/!1_ß”·â¿8zô½�øÃŸÏ:écÔÝ`ãaœ<^{ñòÙ³lÜqº�^YKûú­Ínº>=î²oÒ*ƒïK+Á*uØ ì ôÊ3쪭ö¶cûõØö�óm³À¢Ø£# ˜ÖȦµ ñË~fþsýÿxfÿ3?�ÅËäêÑ»ÔzP�`O]ê@ñ ¨Éqº_5ä¶N÷b¡sWÏÅæV¤lÜ�É{ï¯_nèü Eg’˜•›vP2çÓÇ+«Ô6Re¾ð8µŸð´Ûæ>ðcSå eóµúÚoä½iåà»Oô÷O&™YÿÏs�þ ÀtÙïìOGÉ‚ÏV�¦8åzÏX‡zØCYp—Šì|î ð;pŸ80ÙÌË>Üó¿U·ýò2Ìg¹nÏÑå•ER™ÕSâ­¸£y%öȹ_rÛxÇ€¥Žƒ%lÇW™:Q-÷ɬ+mm”·´Ú©’ Éûêa[í-ɪ^¾¶ÛÖÓgÈågì6âÐ’V ÃsŒedÕÆ¶8|›ìí3Ç!3”[ZeLŸùk)ðÇ®Ãte)Ëórð$sËï÷\ö³aøº%¼@òhÌæÈЃ†ÆÖóx›4³ô¹×vªïèw-W;tdrS啵”z‚•áÆP�’Š Í:$i{‡fKëPŒYoª}‡§RÏÊù’é“Kxlo*­,|gcãÑxä‰ç'“ßÏrÿ>6ý;ë;óCõ¼žÕ£ž±g¯§é±%ÐàµûóC�%_ø¯Í‹·ÍJóÞûåÌîçs~º|�2Çð°“Èy+îý“?úÑ;Q!'ûO´,måµ\ùÖ~�6Ò¾~¨kiµíÓ õG[õµxR+«¶-O{Cmªké¶6–ÙëzÕÿ‡¶LùéG~¡k[@?4/1Dë0­ª®´¦êƒ–çX´Yå…OùÕÆ‡x:»’àð›~Ë/¶™6Lx�2Þ2éɶeÿ[Ÿ•Àæ±cg>ÿéOß=ûè£Ü_'yO»7®ä“Vª3|7 cm3‡VÖÇÛµÚÆ�l‘�m·u«¼­o¹¯N_=í*mÛ¨ºE<—Œ�m@å[yTó@ ѯ<Ñ�úÑ1Ô!Ʋ\Þaf™ æ°;çf{úCßè7}G¾²/V¸Ý×½ÕR<§G¯«\9¿ ¢�„w°Çƒµ-ëHqBòUÚ­S§Þÿ8Ÿ~Šˆêþà-û¹ZëÊß ]Ƴý¢µ=ëôɬ_mZ~›Ú6˜™Lõ·µñu ì´yËÓ¬Ÿœ‡+X†šCµW‡àPЯøÿèýÓѯÛ7+ €OЀX½£õ”T(õYExÛ�6x¼×7cô&{(í´mS6À'cªómfÛ?a¦GV£u_Ùz¶ÙWVWiå©ÓW’ Ém}µ±|3²4ѵÑWGŸTÝÐycC‚2¶-w½ôǾÏ. è:çÌ�ÃuËG¼-u>ˆ¤ú å·Ä?+ œÝø[ ê5(:ÀÃáÙÄ£V¾Ø®×±õ?Ѷ�Î< sgGOU©Û�e)ry©¶•Úž�ü"ºHgؘ•µ4&;l¬S�Qe}¼í¶:7©l ;m¿ò5+�_çd H9c¡K A†]›æ~,m´6_{ù¶�ðÏSìÍC£žá áIU6•Le€•ðy~že)�Çkݶ½¾²öùÏø�pàJ+¨å+íã­ÛÒ^p¤ÛØ©«´ö©Êµoõ–¥­�rè"]k‡mÍ­Þöl3æsÞ’Œì•„¦1`>Dk×ñÝ­¸{Q�±ƒ¿í =k›9Û Â À³g‚Ó2T›J €�|Þ30øÝ¥N1ûÓ×nÕÏxš!×A^y@Þtå•ÖzðÖƒo�QËò•·åÚŽú!ªí�^ù�r2ç€m{.Ⱥº·söÊ1÷\*þÁg+O«œ4OUt˜täé ËÕ3ʤŒ4–û¼ìÎ 0ó£ãéÀÏè¬ÉzÈàMÊ¥3¹ƒ]ê`‡ÞL¦¾uk[Î2Ô²´•)‡.⣞‚pf§½”vI–+­ý¡Ïêj_ä[]×(uÊàV6Ò5÷À*@7‘3Ê`yŽ*(©-O¥S9uuHÚvåüS§ü6þ]EÀÏ›ï&^€þd²3zJ­ØV°»*PVÑߎ~Ë¥ð •c³�p#2LíFm�_ËØ“‘õÕµR»MÙnWª~7j¬kû¶;.ããà1íôÀª=ùEFë¿fæÿ^è‹™�ä�@€ zAѶiP9”‘OrÄWˆHQôÌøä3ɇ§ôFö¬ZÜ×DÛ6ÕŽv”ÉÛ¶@]DÑ™i§ÖUŽ ^="×�â<Õ‘o€@i@ïè¢*ø ,ý ù‰f^ª®æ•ð6c™¦à«¼Öƒ§KdøÚE»ÚROS[Û·-õÖgø8vL7ï�Uõ…üÞú¥€ð:(â~þn³?�¡‡**@ÄT¤Vàó`î Äædò‡±÷7¢®j­oYjÓÐ*ÓVZ»#¨¥vSåRåRä$èüÎãŸ/ë�U€nŸLÏ}”—Í@žîkƒ€'Zݲà›Yö3ó—ðqúðJDy°Û¸NK[ ×PuÚ×vlO`K±¡k¼RtØÝöGD9æ˜î|¬*0È»��Ûx‡ríÿïAÀw2ÿQ:ô  6‰*~ÅÆ•@Ø.a[í±%ƒLV�Ï—ò ÑÉ,ÿ�å-Âw ¸ &`Îá¬*]ìÚxhÛ¡ oÙcÐ]ëÔîw|¦wìÇ4zà–y`À�ÞÑ îÍ€�¾æ+ì8g­1H ³�z)€ [Q&Ò@ž3?³>»ý€Ÿ¥€ÿÑ¡ÉäåSyÿ?r)¸}T BÑ×råûê"³{Æ"dvŠ~œéq˜n›VÊ É—3õ¾‘eøKéПÜߢªHãÒÀ@pö‡š "ËúÌü „“g3ÿñÿ� S‘Ͷæ@@ÓTå)ÉÔµÔn(7 ú;þÙølLkê�U\áà‡ïp{4`̇9?y"€ `IPxÈ)“» ˆ½ƒÀ7„íR_ ^Úê–ÿ œœoz}ðv®ù³ë&à'&Î Vø¶Œ]+«åV_Û­3?òq¶Ç cZ©VĵxíhÀx>ùR.~tüW¼r(�ÛL¤ØÌ `?Ï Ô à>€´AQèTË’”'ŸÈì"3ÿ»'²á7[öŒªU+¨ûxd­Ü²íi¥+–Ç?ÎÓzx`•`Ç* .¹‘møÃì¿åúüþ|îëîG³1˜¯þüCVûy\Ø àe@{ @£"ÍM¿Üjœ�þ#þ+Y|~¿´6Ó…*·~Kí]0uç;>”�ŒimêŒiôÀžóÀZ¼ˆf�3£’(o;{+Ü‚àS€‚ûšSœ·A=R¿mц°·<2AO Ø�iôÀžôÀÚ¼7 ‚‘àw%Øà±i��¼_>âÉcО@ZÁ_ƒ€`¾á—ºãuÿ׎‚½ä�µ 8nv9ð˜e%Á;û;ÛWJ@�ÌÀ!�h[¢-s†€³¾t¼×¿Í¥ca/z`íN,+Á©o+à[ÞßЂŸ2 'ImŸ2¼åœùþúG#c=°×=°–§–•×ÚÊ2ŸL¿ÉÑ@`¨4ê.Õ` ø¡5 ~( ø•Â[?ì˜Fìm¬ì]€›q[60@ø\À þ:뢞_ À·©‚àÜà“üqÉßzp,ïy쉀—Kp 5P6PtUfeø¾TA/ø; ÇjîìX‘ô52ÊFìeì™P�œ`Ø+ðÛ`°Û*@0·Ë}Ë]@A_½>òw¢þiõ’ £É²IEND®B`‚ic08„o‰PNG  IHDR\r¨fsRGB®ÎéDeXIfMM*‡i   gêI@IDATxì½ù“d×uç÷2³ö½º«w ‚ €&ÐA�@$%Žkd-#i¶Gޱ¡ñÿcGLÄüd�#ÇXšñÈ �4 %ŠHbh�Þ—ª®}ó÷só}³N½z™•Õ]Õ•]�'êÖ¹û»÷¼ó=wy÷½¬¬¯¯g]êJ +�SÕ³ÛÝ^w%Еè銡+�»•@E¤:ŠŽj‰+’§œðM~ÍF.–é†÷H]°G‚}Pª ௩ÏÌ(}äEQ¬) ›Û^-fî†÷V•®ÑÝ[„Ú_®TN Ñ/ á�«CƒrŒ½rB{å…ÞªÐ[Y–“¿2¯´}.Ëþá?Ë)èÑÝ€/rÀ�ÃàRzwV Iì!ug{(܃Rµ~Zˆü=€oÅ>�PÐ�ó�O:(Æ8ˆ/÷eÙÿ*ïÏäÈEý+J“ýHÅmVY]t�bÛꀽ‘ë}]ëK•Ê£ð CYvlR=9™e� ™gò Fÿ~9æûqÎ’q 7 ·”e+Š{é¿É²ÅÛJžUÜL–½.kð“iÅ)èbpÛ‘ø—ª“Hq]C ‰ì2u À. ô T§Qû õ㟠‘σJ�¾w,ËFÕ•–¦ÿüä1’=g8—«Ép¼(wVÁDÊûŒfÙ9@íbp&裫HàW˜YnE†`­k$‰]¤®ØEaÞïUýb¥òü õA}yJÀ?.°fš ¤QßàGi@kœö+˜ÐìÅ;@®h0Œ#�üšüÜÏeÙôãš¼–eoÞÈ2ml*j/�›ƒèÎ$ˆÝ¢®Ø-I€zð3Šÿ…øóþÀgÊÏt>‚¿8úÇ®Ûxøö¬N=BûsBócrÿÏ¡,»  ûÐ0gBàGO±)äõŒ€YC—îR]p—<Åù…¦³¦¿- žµÿˆ:†0ø0ÊøwbÈër¹²1©ª¿ðT–]?¬ Â÷³ì�«YÆAÝÅ·ýž(*ÅÃ3Í0Ý%A’Æ�ÿë€;—Ý�))„=«ÎüOåY¡ó0àgÎøÙð3ø d†dœ‡iy�Z;P ‚)Rm8äM~•}Zé§Äÿôz–]“`S�j xªw5ø!8yL̸d—îP]p‡‚;HÅø1¡è1M÷O1ê{äüLým bƒßܲ0øá —ü€ßù@/ip�LicâÏ�ʲ+ºÎëeÙûzJ ¿T<ÏæìŠ­…SM"Í’ènZ";ã]°3yÈÜêˆø¬ù¾Á_¶öÐÔ¶¢S=6ÌH#/󑆑zŸÐlã°Â)äOËq†ˆ$²ãÈ »‘fÂÎó9­Ë[H kZç 'ýZ¥rZ}|üˆÖãüpÜðcÔ÷È�’à@žÁ €¢|;£×<Ï’�M�—á‚ßÕõ±A\–d5WTƒˆƒ0Ðz÷a];ýß5;•ØÁÊÿ¼@ýß |ÏhpˆQ¿ ø¿ ܨ4-�‡qÇ›ƒpF‡]Aå­ª^_Þv¦ÙeT"Ù#òC\ŠSƒÝMÁ$Žöÿu @û²:p95½?*„}QÀ; ’¼ÞÇ�bDàzœ‘Y6Pò–q��R]7×Áè`4ï?¤¥À3Ç•¬GƒŸhG�½¨hcê±ÿ©š%̓°+]jS]Ц b6æÛ»ýe ä¾Áo …·Ÿ°�ïºH/ �Ò?#cðk:„t\hþSö h\ñö»‰èrw)€dv@]°a´¬€`üF’ÁÁN\tÅ4‡àˆRüN÷5<Ÿ”!š”Qº*CÀª ꦫ‰œ*ÃÉKÕ©z-º/IíÂëÒ(�¤"àW À"øv£CQìœÃÁìÁ.ç5§.üæø]m`ÀŒDŽ6‘ä¦Eî"殞<\Þñ\¦KmHÁué“Às•Êѧõ’ŸŽÞ=¢—|ú@�‘AÁj¿9hóúð2ê³ç`¿÷3<“?º²ëpý`L¢PJ"�üŒðøá±*ª }¦ø»Ô†º  !´,BÇ—„žßº©C82’"P£ßý'޼ �Q_e3ÎÀA%'r.ÊéÑ^¥Åzb8ú]¯xEuq \> 6Ð�FEÉw5q¢è.5“@×4“ÌÁŽLÝûž{äD ÒmÂPäöʧ‹Wåq3g ›ÓüpÊ`8ªy?åíR+ ØÊ¶ÊÓM; 0øÞ!æ¼À™àz �»ÃøMø½æç ?¯c À<–S0…#�~ç Ü€ÌØÚXæÈç¼Îˤîvß�”ZP×´ÎLJ€ÑTýU!êÓ&ÞËŠø®Ð3Øp1”Q øœÔÁèë>© ~–pò⨊Üõ:Ýy©§òÞ`&™*ËŒq4©èïË*K—Ê$Ð5eR9¸q¥ö®ÎÝ‹ü‚Îà !_Â& Bƒ³�8~©¸Y]ÄÇz�N]Ì äøªpì\"�xƒ=Æá'Þ—“·Keè€2©Ü8@5>ã hq ,:#€Ft)˜t‘FY#�òÄ5s±~ò8ŒAá‹ rù‹ÀíŽÍ°_¥65Ïy©ƒKt©…º …p` àž'€ø^»7¯‘gðS†xÂP»†Ààwú�InQqT“Ú¸�¹›dNì§<þ.µ�@×´ÎAIòæŸúÃýÆ1¨èÀN”Á 9ïØF Qd:�2sE5ÀOºgá#7èá\“Ñ_üSµçM�MxG›Šl/ørò–^Η.æ#—Ú”÷ºK_€ÐãŒñª€¶ªˆym. €½dÕà4ø‹Ã¨Gøˆ>#ÐiÛŒ�¯ÃÙ�Ü\¾–e§ƒDŸäÉb àG¼4ñeä&•¥uズ ã zóÑàs¯áPU¯Ý¾%°þï:ÿe�ðçe&�©ð‹†¡ˆ4@îi~<#>ÎÀç"Ã=NFÁmSh‹Ÿ¸fTlF³|Ýø‚º  �ƒ Sp øquï«ëëï*üá//--Êœ‘2L2=p¦ˆF›4�ðTT$ç‹à/Ào iÿºÀϯ­WB·yI–µ]z³rt|×ìÛoàƒkÞÙá~Wûá¾P±R­Žè½Ùêù7Þx2{ÿýñÕ¥¥dÊ€oÐl*ÅÅ| nÙøvù™îãxaH?†ûT_>§éÿ»š È4%Û–fHïÒ%Ð5;Ø}–½hÒ,@à®22òÏõqýÃôçÖáÕëŸ|Rí‘hX‰BG>Ê •C‚ˆNòà ~8£;Fðsv€©?h×!¢OÏeÙ+—õe`Ë&E`Ã*–.ïÒ%Ð5;Øý�]Sÿüþ'žxâÅþþþ—n:Ôsub¢²>8ø‚À?¢|éþÏMLd—žx"[¿|9«È­/.6l “ ' "ÎlämùA(yñÇÍ>ÐÍÈ�Ónÿ…KYö‘€ÿžÂD‘=ÕlçÊòçr1½ë/‘@×”åD�SOû…ýþ¯ôööþaUëþêÈH¶V­’†K479™-Œ�gkYïÌLV•€Œ"�Ifx4Å%€’SÊyôÇxä§V¦ýŒüW5òÿ4ËþV‘7”‡$_®È•Ô4-æ%ä8š‹¿K-$Ð5-„s?%å~Õ©©©¡gŸ}öËYOϯLNöÜ�»2?ÿÒàòòÈüÐP�F~ýÝ žžÎƯ^ÍŽ]º”øõ›}™>’FxFmÿÀ 066^()�g@Y S~†y¦üZó_Ð|ÿ=‚Y�Ÿdƒv/¸ªïR3 t @3ÉÜGñ9øÁaÏÀÀÀX­VûNV­þAOoo¥:8X™QäìÚZM#?_ÍÜҳћ7³Óo¿��?¶ºš�+‡ž $Ð2b3<ƒRïØ°°ðP øqÅ©?õð¨OÀ¿ð–F~�Z{T øµ.ã1YzŒK•wÿ5—@×4—MǧüG}tü¹çž{~½¯ï©Ë‡Õn�ŽŽ®ß¾ýó}««S ƒ:ß'ÀúU�¿õ ô#ùGWVÒ‰@€ÎhO‰)9ÀL£: Ì6Ñ€<�þùÈ¿& _RþKûºfëÚíÿ@uÌ(𗞸_6È‹i1Þ~U×¥fè€f’éðø|Ô¯�ŒŒÖˆÿ«+ÕêoÕzz*«ƒƒÕé¾¾ÑÊú:ký¶z�p˜Ï|Åi>Óþa9jÁ~­Ù“s> iü Ð èµÉ÷ñ{YöCÅ­)Ïšâ~²@i3ÞÌDà·ª']¤û¯¹º ¹l:.ÐkGÿðàààÙ§_|ñ‘«‡W?8:~ûö—jkk-ö ²Œö=íÝÖµµµ W‘c„÷Ÿ5> žÓ†áÕ#GÒšÿÄ•+ÙÐíÛÙaÅS;éÈefÀˆ¿ØÛ›Í=òH6{êTZ2(®²4<<>06öÈì{ï]¼õ£]ÊV4ÍØ<ÂSEºÃŽ3Øc8 Ç»ÍIqÝ��HÛP{š²M%Ýä{&�j__ßɪF{Ù‚ïdµZ¶<8Ø{³¿¯*¼üàq]K€>ÍŠঞ ¼öôÓ ì?úQö° ÀI]àˆ(É øâ, Ve€Ÿ}6»þ�oÔgjdµ§çáý½Gjããÿ0ýÓŸ^Y[Y‰à5hÍ öbØ �<æu~š• @ü’DÔ5mi?³0êëú•ì×~íÈÀoÿöç?]\|ilnî­ë_éd5Í×ôÿŽšH©Ÿ½‚OOœÈççÓ2À†àªâ.NMe£ÚXÖèNCX 4?È[ÐŒã†ò}ª‘F3€åãÇ›ˆÆj¹0Ø3<<@[s¢X™3¨‹@7À#oUž´.µ!�®hCHû•%?¨©õV«�d}}ÿt¾¯ïå•ÁÁ#:ÂÛöT¿Yû™/°–ŸÕHÿŽÎôkFàé?|yt4›JÀuuF*†`^#ÿÇ�=–½söl6 £Á^Brñ"wuÅx‡£Ap\3î¼MšÐ�Žè€(�ð{Ä?sæÌ±çŸþ‰ÛCC‡¯MLÔÄ'õ©Û/i�ÿÙeFþ] 4P=«ªï¶ÏéÓ¦ž–F|ž"/~^£{UK…Cׯg³³i‘íùö’FöíÜ8|8›TÞ2ÐäÈ¡cßûÞç´péöÏ~vymi Ûˆ Ø" mœn^ÌW ;ŸªîÒvè€í$tÓ㈯�ý'þokÕêÙªFçJ­6"ð7æÖ»Ñ¬úÚ¢z×G\&ðgý365½¿56–½væLv]3…ç^{-{(Pl‡A�eÔâÄÃS/¿<Ñ75õã¹?¼¶výz¸øà j§9ó8ŸÓÊšÑ�+H k Ù� À×hB'ø>{{bbT§÷j×—–^žŸq©¿ÿ)6÷”eך¶®©>K=ÐGø×Ó¨oc�.ÂZ#�Ï4ÅÊú´Àt„ö%‡«:F|áØ±léèÑlPF£'/Sllmpp×;9ù~µVãr/Yí�œËÌÄGYØqÎG½]ÚF]°�€ö:YÀf&®Ùõê³===ÿL;ü� |•™¡¡ÉùÑQ6ÝÓÜ®¶ é<$Òóf׋(ciðÁã�gïiv°þè£Ù!�>lV´OU¼•3 �§v|ä©âî¿í%Ð5ÛËh×s0âëô�óN?ò�o \�šªÝ˜žþúÐÒÒ?Zxd]#þª€„Û â�PE ü´KÏ�âúVÀ–K3¸Ì¹½6Ìã¿ñ/<ôPÆÓ‚qÍF‡96ÔšzÆÇÇ}õ«§gß}÷¢ö®®ÍÏ\(¸,ƒQ°ã  ë$O—ZH kZg/’¿êå§«^�û]�Þ;¬‘¿¢wò�Ï­¬Lqzoî!mvù½ãïQ¿ðµ™WÉ×þÅ&ÜVÚO=•�;}:­ûd Øð�\Ì_î?vìá©o}k¤ïøñׯ]›^šŸ×�Á~²—¿O2Èá4�­ˆµ.ø%…ÐÞjÚr�³zF|±“�¼ürÏåññê­[·¾Ö¿´ô²vô§Ö½À”žëßA$ ¤ëxи$‰?®„8ixIk}ç'¼$D}FcI±MQ=CC¸�7.ô öh&á¢ðèw¹ãð;­1ú;C—·'�®hONwœ ð«°ö½jÿHü·äéïéï¯èàÌ#½zE—Ñ~§'øî¸1yAx»d¤™S?†�w@T™×CõÿÅ8Â1.úc¹®è€k'Y üìW~åxïààñé+W¾Ö·¼üËË==ŒøKñµÃ¿“*ï>/KãÜþ†c½ÏèÏÒ�ŠH#œâdÛjê�)µ”)”jÔ�á‘Ïþ¸6<×Ο¿¡½&E*^º˜Þ ߥvv×îòbJñüµìäÉ>½óMm¨ýúµ#GÎhÄïáO»oéíº¼Øù—ã½�8 Hkmॵ‰ ½9#¾Îùg£ÚèÇÉì„ú§¦Ò^ÀׇNŸþÉ¥ÿð~8îß ñ¤¤a›B�Ž Q]ïÝJ kîV‚yùúo~³–92Õ÷;¿£ol-ôèy;¨øºFÕßXÔkºr»tµ;¬&ßýß~ªbô¦m2NÛ‘ œ'2#2;¥ÚððÔ ÜÚââM½ÓüSªËë0w•ÛßéÅr.ßå-$Ð5-„ÓnRcĝկz{I§ö¾-0éKë=Jû¼v¦ùW»ÕíY>&÷8vÿ#jìç­Z è¡hê1wýßMˆ—w•Û¿“ô»nÔƒPA×ÜÅ]¸{u‚oâ‰/}iôÆà`íöððQý[ŠÿýTmú¨µwq¹».J;¸á�Ô&Úçõ¿ü­ÚÁ�1“‘˪Zÿ—�ØQC1Ž„ߎXûÍËâH³mÃߥH kv ¬˜U ¯>ùä“G4ºÿã�ZíÅÞ‘‘j666¨øgc¾NòE6¬ù+zÛ/­ýÙ,!�ö$ÙÏÚPÓþ>½#з;Ë7Í<Úqp7Ýœf9žp¾B眺�L;Ô5íH)Ïó /èóy«Ã‹µÚà!­÷gWW?«�½_Z«Õþë5�â®Gô¥í¬ œ4rª4‚g:Ü“öJ*ô¨O’ÁÇ èà�Þ¸[ªôôôö=:¢BC‹×¯ÏfËËè1èË Á¦.„¼Éiõ:~·�<Àå» Í›+¥ªêe�‡tjï»ú,Ï3=££Õ›ÃÃ:ÉöŒ>Ç•-ìp¼ÍËîN6výÃî¿ÑÕNå¾óF£à¸»á½‡=tì;ßùúìc�½qå?ý§×æß}—Ï zTwSËÂ1.ü<¤Øí¦ÞM7;¶l×´¸5}ÏÓO?=0£Ò}ùåêÜíÛŸZ_ÿu�ø¿Äsó5íšó}§Szì§OE4¥MIöÚ$‚ÈÛ,Ú2[ïèèq{ Ó?ùÉ{2úÙ€M•8 ˆ~wÇ€·A ÜK©o$v À†,6ùñÏž=û¸¾Á÷-}i÷±¹ÑÑÊ•©©ãƒóóŸCÓîù!žM­ÛY€ö2?Æ%Ô°ö×Ú½ÂwòçþÄ7£zŸ¹m–÷®âõC¥*�£9öGžšÒ6'/ݼÉ*ù€Q×”ÜpFþìç~®oµRyRGg~O;å_e·|YÀÁÝodTÀAJ:ëϳû|ã/Å5é”ÁOrò³¾Î]“"w­ºkütYm` wuyyU–Ø ˆà/óøæ¶s”íRè€ $F}«}ÿäŸ<¥V¾®p~mpaáaŽîîÖg¸Âåî™tüFŠy³FDà“‡0Ç~ûµùׯ�þ]Þó蛜*ý_zý‰ SøÑsÿtè'Ì Š—³°‰·Àá½:í8¬¯þêã&�ƒCŲ»®ïÐ^ý [b¾¢?vm×›z?WxWàW*cåŸW%�ó°L¯Á�êWb_Ò¢ë8dq¾ƒV¨ð€öçʲ›ÏgÙ4Ÿ˜¾$÷±œÊ¬Oü®8~ŠòÍ‹ÜÕþM–}xx¸ï‘GyºÖ×÷Ô5ýÀÆ ý¬Öµ……¯,/Ÿ˜èI‡XØÛÁFXjÅýò/ßý¯ú €Ú-ã—^ß�;ÿÜ—2²`�–Â*Ï'¿vúÙ/×qǼþ4À 77¸ ~ÂÅ4âè"ñÎ'o—Џ+ Âü\ü¯Éý+\UÄ„ï’÷�0z19jŸr?£åÀ*ß‚b¹�çÿÏz�{C`FQ�‹FžôRi‰´>888¦ÿÛš=þ®¾UWám·[ƒƒã3kk5�áO§Øb�ƒè÷Ùÿø«?;í§ùNë¸Ëü~`uBmìç¾;Lœã <æÄxòv©D;2Iü3z ô¡çäyL#½$ûeIúQ>vˆ9…A¥üÜ£—;Á]’!Á‘�üTÌÑ-„³Êÿ‹2G´6xçb–ñrˆ‹õÑñY65ÕßÿÌ3Oè×tž¾±°ðeýÒí#œ×gôãUÝMÓUxP) ˆ•4ÃéaCþôÍ?u˜û`GÿñCeB%™q¿¸G‚VàPuppbü‹_|Zƒzn½úê‡óú]6?ú vsšŽßê¥SÝÙÃî>@ñÖíȨðI¹ß–ûIÂ}šúfªÏÖ<‚Ÿ;`%“·¡hV,f”ØS9½™Îà1 ý¿=›e§ô^èÿ)0­hÈzýzyèÐxvøð·Öþ«[##‡xE÷^n;µr¿ÿÉàñ©qf;¬ÝÓwþäo—ŠBæ^áî5 øGGž|ò¥Þ‰‰‰µÙÙY¿%Hgp4 Ž�BÕÊéŒI¨ á;ûÑ]¾3iGàa ò*ð�~7ö)>Á¨Gþ8úüí wŽ2.—}Z'ÑuÎ*IøÏÆ´pN³Ïê ?qb¨ï³ŸýLexø˜òdë}}cÚä{A#ÞcŸºTâÝf=ë|²KFÀ£~4ÆÈfÃzn•(IþÐá!Îÿßëõ?¿Ÿ ‹ýz,xX³&—ÍÀÞ,Þ*ˆ’]Çt €„`Ú‘øR^Š‘þ�#6 ÅÄHgéË›üV68wH¹#ä·ùv9Å�ÖÌà×õ¤à!- þ� {OUÕ&&ŽV�ùnuh諊#²G»Ü¬$º¤‘ŽMNF<ä‰kEI y Þ«%ÔÐáÃéåŸüèg«KÝYÚÖ£Á¨ êcµ)†oN:® ~ !R[à·+•C’Þç4êEà?†`ןÑ?ŽŠp–´¯¨|Ü”ËÀwÈÜå”>¢%6æÊœfÚÝ?¬ÙàIývÝÄ´G-MMÓóíçõJëåÙVÉÉs�ÉÀM�Ûósc š $™ÊèóeY¯Ž—‘ËGÎcCŒÀn¿ùWvýfqzExdø‰'>{ä{ß[š}ë­OæÞŸ™ Á�º•ù­NæäC=Ù è ’ Lm�î§%Éß•r|Kþ‡<íϧì�ÑŸÊ,q¸Áì‹EåÂpWœ¿˜—»ŠSžª6ôјÑS2¿´ªM¾%�JËccýšîU–.åX`Yþ¬ñ+½:ó¯of+¬ÿ™È�ÌÎf½·µËÒäsyÜ(Þ§zÌþý×ïN�<õÔÏëÓa‡d�þRà¦Zƒêà¬Fч³jÁÉ‹zbýP5wUÞ›Z�ì;$I~æ¸~Üb,˾*ðŸe´gAÁ§ÿ–6RÆE‰sg�¾ïi8ÈùH×& O²[}}£úU�'N�Z™ëë{N‡Zάj]ZÑèÖ¥ $Ð äÌôs[ºIÉ`l5ú÷ÈñxªÿϹâëÈ\Ãéqê¾?6ÕiÀÁž‘‘ÁõååYí0#ÌùØÐýQµfµ"�r‰w7%‰œZIù1IíŸi*þuñG<òc€Ÿ�O%¸†„å·ÔåÝDÑp‹dÃÀ“�Oä>>~íÔ©ï,?¾®éþ16¦–»à/Š­ìvŒúâÃ¥²yEï«"Eå€Nó�.jþϨÏïÑkwX±]Ú"�aä]8a»<óªdŠkP~2?ߨ)¾OŽõ¿^˜jdßO�ŒÑ€~GðÔ¡o|ãÆì¹s—ÏŸ÷R€q„F¢ö.säA•y�„oX-õ`RІ­Ð|§V”›ùPI–¹(uƒÛW‘ø‰ƒÌ¹¸ëzäôÇÎ>Ôl�;¼$ƒ°Æ�WÈߥ¨¬ýùÖŸŒe‹ì[’‚1�‘˜”!acÒ¤S�‡´ø%� ˜¼þÊ+sùüy· nVCÆüÑ 6Q%I§Cä!­k$„¦¤u’k~OûËÀ_”0á(yKi“Æ�Šäxîμ”îSmò]Ô§§¸K�¼RÐ5F(�j¬áp]ªßädz�…¨ŒAý‹²*|çF G³¬‘aÝ‹N!͆ªãã�r×û¦¦^+ª��_f(†# qÁ9Ä$€ðK-gNÄdâ�ßΟ$¬2p@Æq— KN¼ëãZ*äpT9«éQÕȃúY%å}ð¡4%@ÏÈGZ8ŽIuØ&Öf b–,%ؾØÔËpx6Ã{8Â\ÏF'^“ ªµÜxÓJYhJ¯4kʾ¦Ñz�õ½GþÈ·“P>¦û©rz�>ÝÛíŠíKzMïy:txü…Žœ<é§V)xT™o¿U4åÓ,€ðK`­”Ì¿�:•I‰5s–²ÁÏ2Çhžë‰cr:ŽÝ~szÒ�âyü‡! ~Œw‰|”!¯gòv 0ê³ñÇ2–~;Òñ¨O^ùkª«'CÒ)›Ånè`иÞx¡grrâæßýÝ.\à„(j‚C=Püp«£ÓbÝ'ùÉ(%<ÔÔ¨ó/Àˆä"èa“Ó㼌øŒþœÏÕi¾ôlsÇàHà“fÀ4_¿¾“ ³ë/…^ÖT@^ßÝôš«fŒ~i&�xô«L§}‹T Ç´2šö³VgЀŒ6Íä‘�ú©ÎÜ`ØL Y¹²FÜÃ8í WúœN�Íüñ9]úm¹f �FÀà‡cÐ}ÒQ×�Š]Eµ4\2wÒU¤j£Ay$ŽQð<#?3òOþ#33ÙÓçÎe:±öþÉ“ÙM�lÜ—K{6<§Î €>˜ A2Vz忟ÃF“æÀKýÉ;ã7õ à ´kìÔãäO´ðæàO3•ü}ÌvRǦFÝÃÀÖ½ÔÌ£½�âÅ!«$•b\á“aì&1+ü@‘qµ©ÓLÿQ•D0‰"·?O*eäÁ!a�öVt 0Í�Ó}Bþɹ¹lLŽgÑ—ôªéÜØ ¤z¿ò~šªÞIùÓhX¼�©+ʼÏD{‹”ú¢È$µ3…á´9ow*—û‹åS€/À&ÇÆ¨óšo)",+¸kûõª¾º „¼�æÝüÉ0?ŽøÄŰ €9éøáÜò>pTjr)T%‘ª$“¾¼‰"ÀIQnÆÉç‘ðè€^'Ñ“Q , ÆApâ ü¾;Îãk‘n¿ìvݬ‹s„5mJ‰Ó#1`G¡ ·»Á5bv´µÁ‹í&\$F{¦ü<óg @ØåÊòË;,¹¥e”Œ*hèU=<ìx ¶jЦÉÑ¡6Ð1 ?‚tjÚȯþòáÐt ÿÀP+Px«d@Rí‚ ’— ?F S}üv˜ZK:<ú¹3Ë›ˆ0å6qÝ3îh:ÃNš”?ù„\é=Ý @Tç�’ûHyü¸†,Õ¶ôAÒZ·Ëq49�0zÊ¨Ïækf.ó¹¬y ýNÆTe?{OúÂO­¿ ÿäÉÑ•™™ÙÕ™Ô ‡êÀéDôÆY­FÅÉoµ’÷Á¡V "ÀV4j§ŸÈ¼–°•8rKÕÜ"$#ÌK=$”3¹sÇ9é–ó²AÈ�!ÏaÓ>Jm�+ÚÃp£ŸºvísžÚRl탊¼»ñŸrOÿ™úï„0v’¥Y÷÷«vÿï‡Ñ¿Ú×72zæÌó=cc£·~üã×®þÇÿÈf �~ßsÔ?úOª­~3 °J*úàS+PÕ(^AŠd²°‹ÕŤY¹J7âO>ü¸˜åç`Kz«MþMi©–ú?Ç»×ÇpÝFfÉ Àî1ù 8×Y¿ÂÎÿoÒ�Ä´Ù¥u=×&¾Ìùry9·©Á�§Â.GºëÇߊ�ƒ\Zû« Óîáý@z0ÒìØ32GW¦§¯]Ͳ÷Ôn€làÓüÜâ —9MŸR:ãéä}`¨•HÓwU“Í4’#-ÚR4vH@Ù9^Q‰'¯RwÞkzàü‘#ÙÇr3%¿ÌK>ˆ: ‡á±~ü®³lV�Fã"p¨pˆk'¹ T›f¾žjÎ5ñ›šùI§F~Öý€fu¸®"ÏAߘ(¼ªYÀ¢ø‚ Ôü"Ïgt Õ}?ÌÔM­äêàµZÂí/}ŒãV&¿n׃µÐÒðé™ÅUIgUjQe9à™€Ák�Y} Ì@ 6qv.O»ùâÔqUà'�>š]Ö»�ë5O‘…¤ùz®qg™qéZ s=Öß)OaF@™E 6"·z|-Rð§!GeÓ«´Ö#? X×] “rz=´ñŸúØü+ç7ß(±Õ'YH uÇrInI�VT7Kö8nÍW…7Íj¶ÖÔ1­¾€*«HGVWË€ŸÀ­Æ¢¨*cGØ®•š)ÛÁ£–@vΫË$©}*àÿ¼6ôE’8K/Šå' ¥ì<Äㆄ'—õåšKSSÙ2J-âmÀYv¶wH´‡ºËî Ó¨’v¥MBéJj \ ISôÀÉ»J}Sùd\à'ÿGÅÄ›Ûïp=¥þ¿˜Æ¨ø‘QÙ5bÙV~qÚN]‹23:„µ"¾¤ï èžô WƒN%}fHo >÷™ù/f^{í�«ögïÐ9«ªAï¸dŸó<Ä&/“[§Qæ� –àg¹øŽ €FÿÚx)á�5ÎUY¾:‘&’$"=)™8ñøU_2ŸêõÕW?ûÙì6»ÙPTøzLÛÿ}�ØÇQ íâÚ´‹‘�÷ hOcF�*µu‡í  Z“ê0ÍÀïz›qÕ‘Èé1L�Àϯ4’“·˜ßåZqåÁ.©¾%€Å¥¥lY`M×HO:ÜôŸ8ñ¬ÞxX_ š—x_ÝáVs;à8nsÑè5qËÒ2 ¥�0’^ë½üUyÖ�(H2¸ˆ£"8àBÚ¤•€O4µ?¯×}oI©8ÌTŸW€ýåÊAæõÐÆÇ›;…kCÅøzìF[I'¯ó“Ά#Ê`ÔN#7‘yy<æ:ÍI†\ý-‘È¢ ��ÚŒ“rz=$¡Kê~îo@:�¹óFÈM¼¹ãá´ƒ"Îìl^Å�aÒýé×µ1�Fº'é4˜ä_•Ÿ¢v8ü6ì1�[ç°ËPNÕ={ÛÉB_å‘ãy¾~ }ˆ º¥fõB’ø‰·T ¸ó} Ó}óÄÙŒŠ%ÀI'øäw~y·P«´-™áü\×~¸ÃæÄ­HÑWÕ8íIà×ì€ÍCN$º¼²n!úŠv¥=¢:x©§è(M\+^OÝøïüÔí©"×39¯Ã͸ r;ó¶ëS9Ù¼ú¿º°�­2�Ÿ}�N4õèÿÖÍ@n��BŠ~ÂŽ³º: &ˆC8¹€ä; ÔÊ „$m^”tþTÀŸ–ÿ9Iò4£‰IùÅ=BÊTŠšGgIÎJ‘nj´½-GYòPÆwÄeÈ�;rsç÷õŠñ¤“ÆÈÆ·—Õxš(.•ò³WÀ¨g&€aÀ(˜’€È§>%#–¨(¥mòS�¸V¼žºñßù©[íL?ä4ózlóÿyRü”³1Á�c�ÓŠò°/PÕ’ ¦¥rèÔ=}+²è±Çžzôÿpmæõ×ß¹öçþžº� P/êfÕÍ~çE•­ÚòljeÐôä.gÙ½±÷Ç’ÌÇ7ôv¯FîÓˆ‰%ˆc�ؤ£î8Æ™Ç�y�8îåà„cSå‹TWÌSNm‘¢¯KñW4êÏk�˧³Ó& "žŽ‹'ð �ݤ�Ɉ§¾~@´øÔŒ×S7Ò6§~«d\‡ÓvÂÝGÊP�� ñá<›ê€u=L­W|š ¨÷t@¿$Ôüø3=˨­Êœ£7¹C½pÜ28*ê4ºfGœUø�Ø heZ�[hgäÎi¯þÏ%­‹òsLxLÀJáíK§åâ¢tLDELû‘¾+O ywÁwó7ãä…Ìë¡ú®¥ÌÐtšï 2ò§Ñ¥¹òGŽqÀaô˜©žGõP_*K9\Ñp1§Á®ûêieþ˜ÏÀgúÏ À€u¹fœ~˜¢Ÿ8·Õéæ–�ÃÊG-Ìæ5 à A~!ˆÓ‚‚Núf€Öì<»Ð÷VtHuD…Š`·Z:ÞFutZäÜ´ H…µ2I¿Õß×Là²FîÿWK�¿þT8?©™À‰,û§zï?}2œ�}Ï�,ŠR$�+$͆ÀR¦ ~¸ïå‹NQ›ˆôv‰)ÿœž:ð#iä/ €ÁŽt)[À¨Œ›HÊÇ.;ù¸3iW^@¬âtOhwŽ´èLDœ)ͤ¬: ´EäüRú†ŒÄ7s®¸x çw:¼˜ÇiÄ{äo~×Q¦ŸÔãnÅ}}sÊ“‚Ëa¦õÕ&¾ß8©£Û�dê Íÿ×_Š`6à‰Ãï4tÙÀÜ:ŸÂÕ45¹ ‚Âá/:âÑŽ%Mí/É1 N¦O8ûáÉ�ZXx{lffb}tô!�jÇ™²)­9åJG†d}¤�ÌìçQUºCÄ+~¸�¼‰sÈ'½jL�ÊÉñæN‡cà¤mç¨Óy\YØiÎÃŒúÌ�XÿÛàÄtûÝFê�Tïö·Ã©«X'aµ%½<IJLáaqÂHr± àG(;ªaP£ÇøáèpR¡îüäI*'~ P¶":��˜Ä„‹Î†  ›4óúõëïÎÏÏßX9rä˪\+‡d(ÄÚ'f~N(Ó&¡”°&Gƒ¹`±!„1ÌÒèolwYßù�]1.†í‡óÇ´f~€|™Ô,ÛÅÓ÷¿/«˜r"äÇ£ÁeÉfY³ÞèÄw˜Äª¹· �¹ã#w~sÒÐ{ô�?pD›Ë%Òùè þg?†"ú or€_FàÜÂÚÚUUDÚÎÈ`OF@€fTÇq 'ëEAU+ qcá©;4]‹ŽV”…É�ƒ¸¶®Ó‘Ý–zêÐc|ô»â¢ßa⨟©?#?CÓSÁðÏõ›;©&>Æáw\+^ÏUÿïòâI1$/Þäå!vU{:~â7ói~D$=¶Ø˜xdGÿñË~Ò1šðXh Únh4p¦'` !Y0p0/:Em!tfÃÕëÜ’iÇÜ�cÀþàìzzz 0û4¤}Vd"}O•–ÈaÄ©®-kÒ\‡9q;¡x�XŽ 5Fý½ùãuðÓúØŠË8¿Êù%�˜—‘êQ»;ê± ¾0püø“½ßúÖÔôOú×·~úÓ˺�Öáxt�Óœ ~ƒ?eÁÂ�ÚÜÖ¨Ó�`áS¤EðnF9ÂêÉR¾MqÍ –ÆGå~*«OZê�ÂÏt5qü¥*±’Â3ÒRÎ.^„8ç€ó™ÇüøËâc~S3?é´«�µ¿ë2§­P¬›¸b8æqz+ž* ÿ¨/ÏÏy"PÓÙ€N{,(ýªÖëW…'{''ß’kB:€6à£]$½.:òÙaµk¸×t-¦ Á�CppSô;.rêÒPœf1~÷üRR~'�Azj ÎŒU#›W,šNåso‡ &xt±å1OŒ·ßé9íb€Û.o±l1LyÚn*†‹ñN7'‘ò¸´(y"Û «¯UV¦Xǽ oœ Ü~Ðmèt1ÝỸîe¿Û¸�Ú–4‚¢Et#Ài^~Ào¡áÇ_t.ãr+R,Êí>¡|ùèžö4=eãÏÇ~QÖä<µ÷§›vN/*u™rgG�œ§Ècoc~—a½oð7[û˹NÇ›—Åû:Å´OùíÈ×çp�ì°Ø�{•Þ±±É©—_~lìé§§´·Â†Þ{T7°Í‰·aàŠùu0a´E�|ÚÎû<& Èá"¯�ö‚U1A ÑB½ñÃC[’w5ƒ` «b#Ö¤¬é‰€Ò0 ´æäµa !Aá·ø·kh;€¢ïµ3ðow­ÝN§íÈ¢¬–§ÒXfaæt8h@}è¨Oˆ©m}G�~îÈ/þâøÌoü—ÙO>yeui‰�ˆÁÊFÀƒ˜�Oá ½  ð}Omz*À&£;Ô üÍ�_7,æÞQQiC8�$d„—3¹INéð¤ìpÏ(gçÖ†ºieyŠù\¾Œ3ò{íߎˆuSmŽäôb"<ˆaí\ò­÷o# B3àxÊ€Â}ÑßÝïŽ @nõô{œiúŽ*΀#$(ÆÅpÖ³ººÖ£çÇk1x'ßÊ”Jíñ?78] —¦#Rdü(t2î, gÝ·ï´o‘—åå:ÈðÃ˨X.æ `LÀŒi±œóÁ!§Åxâb¸žsëÿ�YaØ `O SIŸ ?{öÄìÔæ?úèF¶´ˆÑUóvT#†¹AX9â“ڈ߷”køµŸ;홀^Hƒ„‹®¸!˜Â“·n­N]¹²>ªŸ¯uÀ¨� øþ_�™… îVfÅ\yw�¿�߬~Çãs#œîðnó²kr ÇË‹`0Îݾþ.Õ§½€ÏýÞ÷~éÈË/?£Gƒzw-?Ýú‚Ÿ8j9~ €,õÁ8Ôd¸Q÷¶!ÝèdJfqô'Oþ�ééÛ#kk—õjnïíýx]°Û\uo’ØUuºÛ(²œ7£¤A”~SkŠñÅð¦Ì\,¿*SNýyäxç�õÓœ‡[Aš9ñø›‘ëi•Çe]¯Ã%<-ŸT�Y[\µ¤ä½�ê9‰[[X¸Ñ;<üšvùájƒ½õ ÀÜipÏH7Äq;¹Ëj^k¢wK ÎØðã>Ïõ퇯ÌÎÎþlffæßÌU*-°ñ…ðÎ!¤Ø¢ýÅ|; cøÚ�_úqYê�Ž™Žü8‡cžÝjSlƒý澞Ã9ÎNž„&³‹�íÀ�qøËÒœÇé÷ýñà;žH@‰ 3ôÀžsõ¼áÿú§Ÿ~ú¾Âçû>ó™~}bêye¬ÿXÈ´¯Þ¦è��ÚI|Y^âùÙý÷  X?y;ÜÎy4åN#=#9~ˆ<„á~SYœÓ"o'_¼N|Ý ¢/÷Ÿ:5¾27·¸|U¯¤ð^s}€2À?q›#TûÍ£Î+ùþ":±[„¦!4F϶› p sˆ’ æ»%-G~ƒœú}]¸G}òGÇ,€°g.ãò;i§ûfÞnÙ�Ÿ›øƒ¹i·–{ž¯wjê3'~ù—¿{üWõY}>Œ¯Ø�ƒV#>iÎcàKø�¥€¼÷'щ]¡|& å`:'`=ÀbÚù:c,x‰<ºœ¼ÿÜ�/mIŠáÒB%‘×Ïý¹)€*Õm`átFvñzߘ×.źð郎¯A¹¼,{÷õŽŽ>ŒS{—oLL¼�}ü1KPôÑF lô7ðé$~°C>–·÷-íš@ëàÞˆD`à�Þ‘@íÛ{ÂÄÍ¿xEƒªÈcüCÀ2ÿ�¹XwYx»º¹î^]»¬=wWÜ 0ðmÐU;€ÈÁ�V°ú =g tŸÑ®€’™Âá:6]°ç î3ÑÝes¬ @YU€­èb>ÒL1ŸãÌc¾vô“üeùšÅû:÷#_[ãc´��ŽâGGmb>üN‡&o×H&Ϙ"qNÀÂAsm¼€×ìí|ìÃ’ìò½“À†È¾ÁÝ üÑ�—Žý®ûŽv}` „™‚Á:| œ(ø€PùñÇúAÇtsó'Ã<ªÛ”�½%Ü�Æ‘w_�Ùkò4Š™€Ÿ ÔÁ/#09=½~øêÕõ‘ééô†Þ^7fßëgä××�Óô¿Uc˜†—9—)K+›ºÇ|.ÛŠ—ÕAþfñ­êê𴾩©Ó'çw~áäïýÞóý?Ì�_ÛÀí7ÀÍ�Ó9˜ö´€a¸ohÏf–@>àÝ €…‡01ë‡nÜXÐ/ÏN��gKÚOï¸ðAä6, +ê�ãàÑÅ<.ëôx& U¼ÿÜ®fUÓ¾b›åí€øž±±Ó£cc§zgß~ûãÅ�>*{`]�3Ç¡Ï`ˆå-q„“^‹ß´ç HÁ3i!­ÍÏξ%©ýÛÅÉÉ/êM¼/(�/ï+µ4á�½nÖr¦û8€ß (ÔëØœS�S>y‰/‚ßmŠyËü1_ô—åmG9œÚ|Ÿ ~ü åWiøi*n°ýè­Óêeë ÇïòÆýC÷Ú0 àš29�|C�8Ÿ=üð }˜ã´À·ï qû¬ÜDäJÞHÛ©]cô‡àÍêàZ&ƒ›rø]Öm+ã.Û.÷õÌwZNù1švíï¨|›�s?qv1Þ]†;½¾oè^´ÚÀÇŸÜââ"§×ú+•yI°c„ÇGC¸« ŠÃÀS\ƒvï­“@IDATï“È`s½Åp̃?‚Ÿ0D™èê±õÿ®o»¸˜nYY§™;OÎùÎ"?v¿ÍèŽ~GðÄ‘ï~÷ÅáÇ{ûÚ+¯¼«¥?€k@GÀÇ8t5†ÉÇÍíV[¶¥{ihL})¿WŸÛV$´.¼•ÜeO8ú�^ä±<€Ÿù†·C±¬¯ecáòÎSäN¿[îzc=Ä•ÄÛÔgÕ±@çûµpjäÌ™©žÑÑÑù�?¾"pK­Ð8]f ~sn,úÍׂ8`„¿ã©Mm¼û~ �|t@ qCAÙÝý…v«ß¿È ÃÍÀÈõ�Ÿû~¦ò­¨X?a×W,ç¼æ¤G1¿ÃíäÙI^ÕÇ«À,Žù�€E¹õ³£¾ èþ”píôÕúúúªýýCÕžž´£¯ltÇÀ·1h¶þç¦FcÁ‰d½ãgÛhc‰´î" # â±ø8�ov”HKškG¿Sóñì€0¼ôcð G;Uùºn‹9e�ÖN=wšÇ×+^+Äó& _üóú6 þûŽ4FIE=¢ôðg?<¦9žAG¸ãéžÍ‚$°Šv½ @ȶ^Öþ¸ø­è‰ âǹœÃ¿Ùë¾Î w~ü�ëv¼ÃõÔ­ÿ›¥ãc¸Ìï8ó­WªÇ�7’›:¯“*2‹2 ò³/У>ðÛ�û+ÂyõáÐÓ/½ôœ~Rlðæ�~ôÁâùóe{€~»™À}³°q£+èŒ)ú·¯€ §a�Æ¡ð�ö·ji4wR¾UÝ;Mãúeäøf<–!�óÅxÉ‚�ªÎkä_’¨é{�PýÇ k”~:Le›´"Ö¶/~íœýüçÇz&&ÆWnݺ%À^€GztÖà‡¶!ð˜A^0E€ý0Çr#³³ëZ8e«-åô©0%íùn² ˆ£Üð—�&«‰Xïã0pÈeȃßyc|=gý¿ãWÌïø"/–‹é­ÒœÏyÌoN|tôQ÷ #À~@úõ`åM(Ñl ­ûÄÙH¿$,ÎÆ!ûBùÞ�kÞ7^©Õõsbƒ½##“•¾>¾nÎM3èñÃ6N3'ÇƒØ @Ç;’öÓl2ׯ¯÷ë‡%æFG³ÕÉÉli wŠ;É]ÃðÙðT+< ƒ±ÚüÀãè¼UÞÍ%;'d½u¿#w+‘ D?ýˆSAtž–ìÌio 6;› ˸�h6Я¼ý2�~º`RÛù,´AŒíÂïÑÕ(†‰Ãaùí7G�º@BH„5Ìoº“x¯¦�ýʲ¤j¥r¡{Ìóñ;�Ó,€v‚f‘œÆˆ¨¾¤Ñßq1Ÿý.ï<;ÝñÓwË—ùcœë.ròع}9úìxq$ׂÓχ‰§ßaP>>²(£Ð'£�co€½‚N9G Ï‡��=ûì窵ÚÚô믲°±Ð øÄcï=݆ÇK8·’òuíÇ @:’Œ‚)s#" JËÝä+Á ð£ä&ÀaÒˆã]>v̨X–ßùŠåÞ ¯K}Ű¯áø"wâËéôÙàðãœ×õçytÛ³¹eíTåø û�ä4"C9 > YuÂŒ 62rlôÌ™¤O‡O®..þ¥ À´ºb�Û˜£vÄ¡BÊïÍ@{w$í‹È%�UôôJ³ìµ+r?ÖÎÉšÖ‘)�O…ï;qgQÜ´ß""2ÀÇey]Îe‹aâcáí¨˜¿¦|Œ³¿/^/æÃÏÔßÎ}Œel8óržø”é¥=Û^å÷¡"ö öà T{{‡q}ú|¸éÕÍÆˆîe€Á§ 8”?ià«£7÷ÓpßhÒ�ëׯ¿3<<üof�¹°\«ýºâ÷Ýp'}7ÙØÚt×ÀVžr¸ÁTØ#"ñie©§îÏÿ” ƒP&.:÷Åyé§ûë^ûeåòÄ©,çÀW9; G†l²$P}ƒ2žC ‡Þb/`m GÀG¿ ‚Á9ùÐm¸ˆT´꼃Aûml=ׯÖéVÿ™3'ô4€lèJF@ ÈR ©a®¸ ÐÄV’ÆhÈè/Åm lÀ!+õvázîæÆÃõ8ŸyY|Œ³;îúàä�޶ÓOúŒ?öÅþX?ù]‡‚iF Ùr2¬Ê¾€ÜŠ‹0¸l2ÐzœÒ÷š¸Y8.Ž3à퇣ÃÄÛ_4` ‡ú�·£¨c €¤‚€:ê@wÊÀ +:Jœ2�Cd¥f4ää ‹ÇüøÉ× õšöþ¿ÛÞŠÇ4üvôÉ~ú qÍúTOœë§· 3ʃŽ%ñUÍ–5+X¼};íŒê[ûcxT´���æÇ¼ö“¯c÷öÛÔA/u��ìPüûN9´ëË)fj¼lZŠR{4Ä”(yi‡T_"òC×CõzÊâ�n^,×,Þù¶ã¾&ùÊœûÁï:Ý·¡§|^?’ðF`U�…e ²>É“Ùé:·ŸÕ4+¨!㽦ÞÞÁÁÓ§OŒùË·æ>üðêò¥KÞ ôˆoc`C`ÐGNË^@µÓ–÷@Š-ï÷gŠ~Çí;šÜEfü .�±£;­#\D34‹eiÍâ¹®‰°²ûÁ1 (³�ÃÝôÂõS‡âúbšã"/¦;\Æcœý,uðÃq}üi8· «çlþ¿,qr mª�«á§„…7²%�*Ô•3ýÎ_š êéžQýd M°£I¸²Ù€óÀÉC3ñƒ5ü„ë˜'ûi’0,ó^Ý`^$Y×�]ÅÊïˆTùnKî$Ä.uš@éE46¤[É͉‹dÐÄ8ûc™Vùš¥ã.r®G\ŒwX\�L.ݵ‰›×0 ´1¶“4“ã]¯ÃæÎWà =’qM£K˜6¬k/`ðË¥aX³®ɽW<µIõòÄ`7÷´éÕL`rø©§¦–._¾¹|ýzqбO6øq4ÛÎX#�V4Ò&‘üûJnÔ~5!!„†›¸ys½Oë¾%}=gFV�£Á�D§ØøX'F ÝE @ÙÀŠn^ì õõ YÞbÙí±Þ2¼v™?�ã`NŸ _ûaæ“4]ÀLg#lèàE¢Ôqýô½Ò\šu©îd œ{°tófÚ0L÷AíÒSƒA¹Ý¢ÚÐС±³g¿¬ÏˆO\ÿÛ¿ý‡kþçï«nƒ ‚�ïtš‡ŸxãnßOº!jÓ½%¬ë7Ñ�tëÖÂÐòòÕ¹µµsCCÃz>¬yugPÞÞt1ÞÜMÑXÇé?M¶â›»8LÑOœËã�¿/æwØÜåb¿ÃöçœY‡q8¦Ëóx4–S{l†Â™ ñ`¢"'’8êrþ2*¤ó>H�À�ƒ\Š+áÇ%¿ò1#`I�r棟—aF�ö| •Ý i/`¼ïèÑq½!88ðᇪìr>Ü`G—£#žfXÇ£@ÿyS�´}£}3ô87Q@ë·oß~_Iÿvvbâã•ZíëòŸ&o§ÊÇ.uE?ò±ÎŽ43�†(š•ͼØ]³üÅòÛ…]?ùÊüŽóµÉ'0Ŷ ½½ê#§òF(å(Gz¹‡ÇuK�okƒŽS|<õò õÝ3ê§OæÛô/-³T€‘9GBYw¸Ái—~dfZKIâpÌvkF �5ˆ"Âî43äq~šB>0çæJ4ÙÑõº•S½¦}5yg‚­_¸pá#ñ‹½�<²¨çóºÉ§î8BùUÒ‡>ýÒÊ]tn¹?Ž4‡áRÞT^ ÛZ×±N}‘nÅIË]cä׬†WxGeèxa’Âjæ]ÿükrŽò¢Á…´$r_- êt\ª!üs|ž']—‘Ÿ©¿êCέˆtzŠK~Õ³¢Ù³+3€~~�)7JÌäîdF 2µžÁÁ¡þãÇGWfffWgg›�?Æ»yæ`ÎÝ"#ÀXHsï9u’°€ê¼6–¬ lVnÚù·B72·ð ôðÛx&á4x³z]y"ã.ãÄáò6ðaÞÕgäçÝýA¦ÿ‘Ø`ãm|x8†e•Åñ°E9 DÒhÚíþÀ¹Žûw{ò8¦üüRT¿fñµðn5ÀȉmÁïtÕÞðÇð»<3“ͨmÞ¯�ÁK38%·MÕ��‰Ñ³g_Ð[‚ã7ÿþï_½öqN…Œm�¹ãà4‰xûåMäG‚4S6 ’lè½6�b,$¸]]LøEZ@0iã#€—9·ßŠÃÄÙåàKuļÑﲑ7K/Æ;\ƉËÇ�y?ŸÏxþ1<}Ê+\3� ê+ƒœÒcúÏr€‚ÎpzOþ%Å-S§òpC“ �Ȉxx¤<\Ã¨Ž¢ k¡D£4ñéyž¢en.[–3:io3‚œèíIÜ‘%œ½€�'¾ CH‡—®^½|-Ë>T6ƒÝÕìpšâ0~òBøÁMÇFÁy‚}‰çÞÍ:Á¨ßIHE=¦þ»Q|`�óþ(;ÿ¹mQê²6£üP8�º)Lý¸KšZSŽY@2 4ÿh:# í”W~¦ý|ÊÓÿR9ä}1P.ÍRã²H'¯9þUƒÛ—.5ŒÆ`@Oœ8bÜ6mÞ ˆàÇ®¸dtŪñ#Ñ\Êqd˜½VÒYPÇžQ'€¢�êáú`O;¿S©Òî ` Ñ±Ôbh»{—/üí–«×^þ¿xM‡#·ŸY~ÖÝ86ùØì–’!H§íœ·üj)–Q‹%Îû :˱ i<3ŽóÒGt9mR§d˜N øõ~2ÌD f[P.Ñä�ÿϽ±N*ú¹jqF0|èPÆSN–Ñ–™ÁÆÁ �þ¨…ý6TÅåcˆ+’ó¸<3“°ìí7Ë{ìËßν²ÐðÛÝ›«ïä*RFÖüŒþɰ@iPÒ\Q¼¬^߀²EÏ•½QÖyb®?Æá/æ�ᢟpp€Ǩà/Ži=m¹“ÁÇeø¼W¿êb³ ÎQ^²GÀS6 9G�÷‰÷É`ôÉ`Ô´Œ �(: Âö§ˆÂ?§µ*G_]�9qkÚs˜½r%4ƒÂ^ÉdDûýâER?)jЂ#ª´>#÷¸Ü?äNlÑd—ƒ»¬¼)œž¸ÊÏ/k§qG×t÷ȳ+DC÷›¢àa I�÷N£×º”9�¥�?�Ö H‘p¼wø£ÃIJ1/e[Q1o Û9~®'ξÀÃ'¹ëQYq­ßê²Û¥ùiV¡Ì,p75ý^á�®ÏÍfäïS¸_#ÀÉ?+„A͵ðãˆ/’ÓËòºÒp6«2sr´·(7'7¤�Bý`ÐVPŸP� €‹ºjÖ/Èýªq?‘+ 6QWtÔ‹£‰�Á^Ì:Á¨�IHÊ´®�Y¿”dE£íœ¦g+€mŸ(Ý]eMSä5µ%­ý›LS fÀ‰°  ’s¾h\åñ;O¬ÏþbšÃp;Õ�¦éê/Óð|ߎÓý-S]×¼X—3�ß`V�©ÿëõ™îsÆŸ†­§¼ 2�$ èL÷Yç3â÷¨OÌöš4Ff˜ëËð¾ÿŠŸãé¯û2ö"è+Z�RÐ2”¢ØÂfñʺ‰\Îu˜“Éu‡ƒ¸.``œØË m´³W›…ÈKr]›œüBßéÓg'/\ÈN( £�RYTVª³ªk3ÀOßöšâ5ÒÕtíÔ^"Ú¹"£´"À­ pk8 òiôË}G*ÅVñOei±ÒsI'à0÷¡GŽ4¾d¼¨75 UeªúŒ}ï¨d7¡4†h @’»8åóköªl¯ èÕ2åggA½ü¼ Èoj&ðç²ìµ�³ŒŸ#ðEç*¹Õ±D`F€aP3[)ˆr4¡Ž0yÛ�q™kÒô{Í] Q(p𯿀Yñ ø­äûÇ ü8žµ�„º!žÏà—uÙ,K†@U§“uJ£ ‚ß”_7µM~ÀŒ£Î´ —ƒ�GûÓh¯ôý&ÚÌ{8Né¥Ót{AwVX“#+õM·öGû@|ºO1²Ä_ÖóX–:¢#Í ^Wûx™{ÎYÌgI0 #@^å\/õqqÆ1crZ&<¥¯Œ<ªò‡õBó§Šb&@V@îbpWíx.É„¢ZâwL�fܹõ……… ¥þL=œÖ;O«gÇvÜ»;,`cÊèÓ£�Îü ¬ÜxÖª™”3m P+Š_•óêrãçÌT.<ús…fÍË3w¦âLË!ÀΔðsý4ÈýI!]OÊþÑ&mW°S7ë|Oõ�/o]¨äÞ{igƒäç¸.¯õ"/fZ«šð1��ŽC<# õC…#§O¡ÆTu1ܸ^îi•NZ’{ÎN¯�+Ž0†Iƒ3= N~ÀÁï2Šn ÇyÆ 2ý8õüÌ“YöËG³ìÇç²ìõóYv=Ïj#@1ªäöË[C.ÏÏ:ÉØêѹžK—.}8;;û/=ú©¦\¼ÛyÏ R…j�”�) £jº¹RÈ´i¥t¿$ó[†[~Ï0îRYÕË”@MIáB9 ñ�8{r0¡¦äW<<‚mS�μß\}£�Ì0\½š­¤—‹$§}”EËrH WYêc¡ÄÑ×$‡BZY0æ�þtOòº\Ÿãh Ó~FóØ6Ú¹ü(7åPî¤à┵!\åN¨Ì1}xðÚy |J¦*¡:ct &òþ€ÃÛòN24ÖÖNK¬E�#Y¼¦‘òº„»Doïy]Î3jO§Y§¦×JÕ€ôM ù4uçK¶Ëš°iéY„�ï©¿êa×�lXƒ3UO”ƒø^õ±Ó®c#Ål Jò“aà”ÞÐÄDý ñÍÀ˜ 9\D‚ý«’´�ºu+;qùr6¨ÃHu¸½>¨åÊQžVÉO«ÝžüŽn2® 4S–üÌÛ]FÞAåTŸ:•eß–A˜ú$ËÞ–ÓC‚TÅ(N7àPìRòït&ÐIÀ2.ãõîÞ£ÿ¾B ÀÓÈ/@§e€”)Ûnž]stðgYÏò¤@€fŸ a”—M-À˜hd(Òzüõé¾¼ŒäÇaœ±Ã‡ÓŒ€>, œÓ:´ÃÏ‹"Ï÷$òØgâQ,x3:võjö⫯fSzô•0‚ÞÃqB  ÿ§U¡ÛQ4HÔQ~£ØÀ§=Ñ`(ø¨–½‡Ä�kà¶ €¢¼ üѸk\¦í=�N2j÷&¹; ¿7Hå’ÈGžýVp€_ i)Ó 4Sgôg@˜—X¸ÉÌpÉP—âÒQY‰ôq Œ ×¥-ˆ3f^ ’¼x“�¸Év·fFšÐä”Fu× -3Äq÷h‡ €Ã´×w–:ì@¬Á'.¤i?$ŸÑ&á×Õ>£¶ß“ðLÀE ~•n�«A·’_3)xSê$àÆGÞ´á{’``q©ÞK.=ÔE}SË®�àM6N·1XVyOýYóó†¯Ù¦åDøe"Ü6ŽvFôYðuˆÇ†·4rÏ3S8ÑH1OòÄ¡hñ~F¤8Þe+€'×}6ä)µ¢E…&e]¯9y¨�4œ!ifñ+êå …ÿ� €Î m)FñHîB¬Îq1_ÃßI€FÑØÍnã|@£Ñ»îÉ�$#8ëûô!J]$­ùýy^ﵺâRÏAl §™ƒf½ª‡�›öJ)}Sþ¨¦³žú{„Ûõ¾ð Ó£LžäIJ‹7ùèÅ9O€3( ²È¹g�ûèÊÄ ò˜Ö¬\Œ�†‡ëB¤[7àÑ`¸,ùœf]Á䯚 k9pQKž6j:¹É(˜È—pNU8ȼ*üï$@G¢£©l—u°Ð�Ý `>HÁÚEã“Ó ü]׊ ¥6‡˜¬kº ðÇuª‘Gs]ð·’âÎÒ˜M ë=†Žèª(_(š¾v-›“”(8ñ€Ò÷Ð\Q Je²:�xS,gTQ¯Á_48.ç:]>rò�nIJxǼñµ}‰ø¡Ìد§Ö‹G?y1ìøäXC5ëÑÿ;ɤÓèèø:L¯v[y gYŽgî{Bù™Âóº´ñèq\�Ñ¿D†Qªntj›òVµ `&À2‚ƒª‹xܽXnOúòUÊÌŒ�B´&À>L|lØîŒ`ZFäÜ©SéØ÷!í ª£ nrœ_4Nw~ë†ãc]ÄÚ¡Ý —Þ`4¨( €b¹Z«œ|E.unþñÑ=BS½…;ù�•RCi<2�'7~ãÆú�€¹¬5õ-=šßà©zœxu }þ)«H©­Sz›�¡Ñ‰¤ˆûõñ *�dˆ»kKhO8!½Å§'1 hº3šÌçKžx@‰ÿ¢ž6,>÷\vCû Ïÿìgéõä²|ÊÚ¨ÃÀµ(Öm}@©ãõ¨Šˆ5Ê£�!¨(ÞQTÑŒŒš‚ßM¢, š°…Hì$r'àÉToß¾%½¡�pLhCí¤â9y¹;$å€X÷{ôO7\ eôOOýsj&ýF£UŸŽ"²ŒàuXÞ€ã @—ö^ì8#Àè.i/fQ.-íÔ„5-ÏØ<´aO÷\ñ·5Ȱy;¢'Oè¾�Òìâý7˜�fn3Š3•çdŽºp&ë å¨Ëåá®#G=ÉŽ’w¹°« ž0U°¥P ~ŧ ðŽ ²YÀôôô'ÒÏ��}ºÔÓÃûÕ»k¤ ÞøCAÒÍ`Ôgºhñ·)ƒ?I›YD>5Å´[G›—êfÛ�Ù{Éï÷aVÓû=ëç\È2ZHÃ�@«éwJ'hŠ÷�8œË}ž¾³~×ÙþL¯ý&Ç›\‚»Üe‹<¯Ÿ7 ñÆÁÚªF¼ýð討tšÄKC²wRðÅJ Iût‡Ò àÆ�7å~Ö÷ðÃ:5÷5¶[ä©zäÇ,€Q›ÑßàWØ7*^s‹•˜$/c‘-ίØöHñ�8íW"ûXe׿G(θ û½Z`@ § ãŒ`V÷ì‘#Y�f ã:Š<ÈìAùÈ YÖ sòðn[ö#žs½ôÃù‹œzqćk ÉZ£Þ-½1xYF)~7ÀXáTí*̉'\çζ¾>Ü© á)o¼ý ¦ÎÀw…t¿ c’à÷Ú?ÿvrãÌÙ0dæÐ¯ %ްò‚KüÛIñÞ¦óÄ }ÿOF˜×”ÿ¶Þòci€\Ñ7|ölvCOμùfvTç F fÊD"Œu¼Ä1>8Æ€úðCþmqç7¯§nüw<\¨>¢z¿®:§ÄÿJó¿-àq\¢þX~„†š*.Q':Eƒ¡Ý}ÈLˆé¾ =ó—Ÿc¹iô—õOŸú�™þGrcgiðÔXågöÀÔŸ�L¢h]ê< Ä=Zǽã¦éD¡ŒÀMÝ·9}q#ÖûÍ&ôFâ°f )RÔü Pa0pFŸ�ó+9qŽ7Ï“@ŸÜ¸®;©ºmShrt8œ*b8úQYÊ5ˆÄN$ÙÀWòïæy,?ë¿|§ð³i—¦þ¬q€—îDnøýz~†Š%@—î ôËXOhÊ? Ç·yˆ}€› ¿þôÓÙëÏ<“ÝÔ=åž)Æ¡š¦§#{õ׉êÃõ%űuÆ~Eo"Ç›K ¯ª-¯hÞÿ}Í 8ÝÌo›y©BÛ0mjÄ>Üw8Tï¢`íÏË>陿.°åЛ¢¢5N‘úç†vc“�!© øLÿkšúwéþ�€gìÒó[‡¹A­ýù3À¿”ßOßoszh?FC§ö1TãX°_“Ã0�NÞH.ëøF§DÓj×[Wôí@ùi¢§üTý<¾™_Ù6¨ ­Kx·\ê-Þ%#€¤Ò;þùÓã>ÝèôŸ9øëÜúß *Þ(m³¦·ÿX[¢P•.Ý_Ðìmjj*ÒS‚ÃZû�éÇC8ŒsHÓÿÅ¡”ñ¾ã'."�'�›ëœ7­Øæ®ÏasÐ�_œo‚£L{RY…á¾tôW Ç8%oP'Ë•þ[>ëþåzÂ×wÒwù6úÑžO€gíß8ð£RI‚ìúsp¤É¨M#"¹Q¾Yüwœ a4PdÙ%>zûö:_`]ÒT}QF mŒ<ë~>Þ�¥OdäæZùŽº*âê¢$¡º·ñßqnàgÝÏñÓ%íÒþJýÑ AKz¶†|»65jþ“O>ºøÇüêÒÅ‹,Í¡Mùt€çIMÛOÉ:LRI>7àèðØ"¹2ôÈ~¸Áîr{‘s=®ËF"N~ª*º¤Â!^ÞMy†“·¡öò»YÉ*�¡‰F6zW ÌwýÓ‘_Uä˜ÞôÓÑÏtæ›5»÷�ägÁõåâ¯ÍÞU[»…ïJú–àòÂG½?ûî»çdÝ£þÔýŠ›{÷ÝK+·o³4k¦F^Žéaû:›xÌ3yžÃH‰‹(R°A& Ý@¿ŠDºõ¦h¢�øŒú4ŽÃC8?Q�·Œ<^•¥m×q3€B‹‘[rú+¯5b±g5E`‹½í…6ÀçY®�Oæ”5¿–é÷ýò8±-DLn7‘WQ™öwG~Kg︀½&·RÿV¸®³Ü� k}¿0ûÎ;ïŸÿWÿêïéÛå[XvYçaý¾$à-È,¢ ×l¬CŠÈsŤ£1�¼¤—€2ðëz<5XգõCÏ"J'T[¤¤ÖÅÈVáŽ4Ìâ45�2[ŸŸŸ¿¨×jÿdqxøÊr­ö’:õd«ŽÅ4n Ö9ZoKÊ<æ�~k…o°婟Óc™®÷% ßï›^8þýÅK—xÕE¿aRX?(²<óÆ+lWæ�—ßÊ9±wQ'îþV£ÿeç}B3€)ë�õ¥~ñ�Â6 pçá"&ÀO‡1â{ÔøŒöŒrš\øßV;Þ‘!¸¡¨fä¦�î¾6Ë»%¾# @ÞÊ(³õ‹/^–ûÓÚK/}ªOiŸ” [€¸ö—ŸŽr7Ýœú^áD‰’h©nâ*Ëî1ï–ʺmI@6ŸßÇ9ÃCÄêÌÌ�?øÁë—ÿý¿7ϰév(n'aªpýEγû‹r—ü[:ƒXóÄ M7«8=oCƒ9¾ÌĆ¡Ô^óc ~¦ý8€5-?p—õ(ñ‡fÙûŠ&«iK{�Ђ» dqù”½“ ´pvt$8­ù »þéiÓ.=öÓfb«­KÍ7�ƒÃZ:ðž?§Èºt÷X¾yó²Fø—gf82Ïæ¬ÅO`}ùúõéù>¸¬$À`%vž¨'�a牜<ã‡Gª`.fÙßhи¢Áã ñ£Îä X'â ƒlœN^ç§8Ÿ5?#¿Fý+êä{ºî{zŒÈÈï¢eœ¸fNI�Ëû²Ø&Ø”IÔÉÀ£ñwDÞõ·uæ†$‡Ðc»ôºo·ÝhŒo Ïù‡uLtX/�tiw$°|õê•Kò'?ýꫜ¡�,rëÁvÜzâ|„íw}GNZ)]’�»ô”óiô?$�E Wn�°°®Õsmüwþ²ÑŸ©?Ë'Ä_~+Ë~ðA–�W�ì.jÛ^G:9ù°7[~9¨“ �Ø9aÜxίM?~äá¤Ü5�îÂñȯaJj¶ÄHÂo‡ôpœШÏÈßÛù%‘öIk÷óó|^�è´rjìÎ×E®ðü‡^ÒóyŽÌ{„·ø#o¦ðä! ²?–k寗*ÿŸÔE#ñ%�Èß×8—ÿ„xœyèd'‡L66\¢q8¯ýYóç;þ¯eÙ9œ÷4 à ‘‹¸˜Ãîa÷+úWäΣbtð }Ó´¿¢½ÓšÀ=÷öÛÙO>™Ýà}“5ÿ†8ê>$gŠRä“ÔCú$5/û´[—ëyÐùüG¢ý¯¿¿2;‹îG±Öý++kÚÁ�#ñVÚ˜?Æ!ÖŽþfåc]ø›‘1\øçÕÇd>§ßôT#�»¡<ŽÂ¤8 ð@ã‹Ñ0œ SFþôXK\;›_ׯã'ú�Pd䬾”«ˆ}tœ/ÓWÕÔÉÀ2Ĩ¶MLû�è—cŽè÷ ½Ç=¤0礤ãJ©Ðw¿‰^¸rEXi�E‰±\×É»÷WnÝšËAÅýQ¹_Œ+†Éç8ófeoNcñ—‘U%q!rY{Ÿ ¨¯ 7Ü'4 8É»ÌâL=qa_ˆ†�d¦7 àçîSmø}¨uÏ»šþßP:¶!‚¿•Ÿj‹ŽKF9(¸I� 7¨“ �´ámŸõ>.ð?õÖ[Ù„ü*ÅÍ¡‚fwºX±oZäÜ‘bþ=¬ŸÍ^¸ýÖ[oúGôcÉÂbÞà2+ssË?Ê Y´QQ›ÅµÊã´"w]p§Å8ûÝx$ë[Ô¿Š@zEsóï˲ ÇõÑÞÍÓ§¿<ð,À}!£ð3òkšŸÞ”Q¹ Qÿ¯Yû+ù`#h³‹D¿ãÌI+seý&ñ›¨“ x³k4zT_oÔ×[ÖóãÀü:/TÓ‡Æõõ×I�ú|ÁeLa¬3à禤¢ƒ?œúËT6Ná-ß,sK–ï éÄ`¿ÖþÒ{þ«³³·/_¾°2#¡CkwBu±)nM‡4fÞz룥k×ØÇ²øêé­h¥t‡Í�qö›Çôã]—Û^ o*3U¡nEn ÐjÔÿ�üW¹˜PË—{+S¿*}Lî� ¢Uá‡bçeV®hÔOo ª®ä® üLhUR̜ℋÎép;—'l¿¹ã”´Ai´I”ðªfÆÙ­®ÈTÆäUòº¦â  M¿© ²GÞ}7;šƒŸÑËÜ0Ÿõ»NðE@ÅEBj–\¯®7¢Žý>HÓ=’»qý•W^½ùÃ~œË'‰E7ÇâAŽú)ž•Õ¥™�^EœÏÊç°ó4 ó;lË;®È›ÕÛEžVd=„[«²†ÿ{çökWuÝá}·ªà¦0 jÍC«Š†¨©úЪ}I+µêS¥JÍCÿ´þ•ªH}h*%¤(ˆ–$„‹ 6ㆃm|wßÚûÛgžµöÙì½�³¦4ÏsŒ1çškœùs®¹.ûtûß™J~!àç¢�Qõ`ÞüÛŒ¹gwL>Ìö8&›}‡Sï?ƒæ+t” ²)dž½@îy¡ð3³Î\™z)rø6·íí8ßµ üÕùs~3àw²´ç³]™˜˜íÆó3\äÚ3¿ÍÇI ~x@úü›ËaŸÈe¯“ôÚÙÜÚ;ñØc“ iO±ëÏlæç_üÈÇ�”rM~úR®Û³„gŒNÁ<=Án \ÌÃWy¦þãK~˜Iªs ZtdÜ&¿mmk¹�¯²z,åÒª«|ÕW9< jî=s$�o`%p-;÷—“ZèÉwð_D÷¿Yy^ ÏŠ`ƒÕÎÍÒè—l$†¬$Û·Pú]3{)|_¶:yÚ£WÈ·ÝÿO¹Kë:¢ç€O/·ñ÷åà ÷nmmðc›û’ýðF÷•ŸŒcΖ F`N�ÿNMO?>ùÞk¯MøÕ!¼¥GßùÖ·&[YæŸ Ø‘ß›Ëfþ{óÐß ¼ÓÒ¥Ó§�Ÿ|é¥ÿ¹tüx]âçʼnéC8×rÝže=³©TyÜO‚ZVßÊZ½å–Öz‹t§µ±¬Þöì§rËÐ6Õqg¨´}*®eì]Ï£»¯Å™oEɪ`3!`lÄ�ø‘‰¶MöÅ>Úw‡%Ô5W¹¶Ô5+ƒ?¶Žçl>� –Ìâ/ÜŸ[.Çɉª<ŠyW¾å÷tnó=Ž÷éü|vÏw•Cõ6åkù°ã¾£G'û²GðP^'>~öüñN<Š—îË—_øV ÿ‰¼�Эöâ>xy†§ëà“95§ÍïÁOοýö{Ù¼;yùÄ ¯?ë`”w@Z¦•*«¼6­Ì²´ÏNÝ¥N«kÛQ_mµi)ç�l(1tjfÈ9¼àÉ 9†` ¼‡ÌŠI™¶µ-ù˜u}°oö*€+üÒª³Ô¬åÞ´Ž€Žnf‡õÙtîŸfA`’k« ¶û2³ß�>¬W¡$<ÊYâIdì²v¡/ôj6÷omMžÍ,þÉp™�}l©ƒñTÏÉ/!1_ß”·â¿8zô½�øÃŸÏ:écÔÝ`ãaœ<^{ñòÙ³lÜqº�^YKûú­Ínº>=î²oÒ*ƒïK+Á*uØ ì ôÊ3쪭ö¶cûõØö�óm³À¢Ø£# ˜ÖȦµ ñË~fþsýÿxfÿ3?�ÅËäêÑ»ÔzP�`O]ê@ñ ¨Éqº_5ä¶N÷b¡sWÏÅæV¤lÜ�É{ï¯_nèü Eg’˜•›vP2çÓÇ+«Ô6Re¾ð8µŸð´Ûæ>ðcSå eóµúÚoä½iåà»Oô÷O&™YÿÏs�þ ÀtÙïìOGÉ‚ÏV�¦8åzÏX‡zØCYp—Šì|î ð;pŸ80ÙÌË>Üó¿U·ýò2Ìg¹nÏÑå•ER™ÕSâ­¸£y%öȹ_rÛxÇ€¥Žƒ%lÇW™:Q-÷ɬ+mm”·´Ú©’ Éûêa[í-ɪ^¾¶ÛÖÓgÈågì6âÐ’V ÃsŒedÕÆ¶8|›ìí3Ç!3”[ZeLŸùk)ðÇ®Ãte)Ëórð$sËï÷\ö³aøº%¼@òhÌæÈЃ†ÆÖóx›4³ô¹×vªïèw-W;tdrS啵”z‚•áÆP�’Š Í:$i{‡fKëPŒYoª}‡§RÏÊù’é“Kxlo*­,|gcãÑxä‰ç'“ßÏrÿ>6ý;ë;óCõ¼žÕ£ž±g¯§é±%ÐàµûóC�%_ø¯Í‹·ÍJóÞûåÌîçs~º|�2Çð°“Èy+îý“?úÑ;Q!'ûO´,måµ\ùÖ~�6Ò¾~¨kiµíÓ õG[õµxR+«¶-O{Cmªké¶6–ÙëzÕÿ‡¶LùéG~¡k[@?4/1Dë0­ª®´¦êƒ–çX´Yå…OùÕÆ‡x:»’àð›~Ë/¶™6Lx�2Þ2éɶeÿ[Ÿ•Àæ±cg>ÿéOß=ûè£Ü_'yO»7®ä“Vª3|7 cm3‡VÖÇÛµÚÆ�l‘�m·u«¼­o¹¯N_=í*mÛ¨ºE<—Œ�m@å[yTó@ ѯ<Ñ�úÑ1Ô!Ʋ\Þaf™ æ°;çf{úCßè7}G¾²/V¸Ý×½ÕR<§G¯«\9¿ ¢�„w°Çƒµ-ëHqBòUÚ­S§Þÿ8Ÿ~Šˆêþà-û¹ZëÊß ]Ƴý¢µ=ëôɬ_mZ~›Ú6˜™Lõ·µñu ì´yËÓ¬Ÿœ‡+X†šCµW‡àPЯøÿèýÓѯÛ7+ €OЀX½£õ”T(õYExÛ�6x¼×7cô&{(í´mS6À'cªómfÛ?a¦GV£u_Ùz¶ÙWVWiå©ÓW’ Ém}µ±|3²4ѵÑWGŸTÝÐycC‚2¶-w½ôǾÏ. è:çÌ�ÃuËG¼-u>ˆ¤ú å·Ä?+ œÝø[ ê5(:ÀÃáÙÄ£V¾Ø®×±õ?Ѷ�Î< sgGOU©Û�e)ry©¶•Úž�ü"ºHgؘ•µ4&;l¬S�Qe}¼í¶:7©l ;m¿ò5+�_çd H9c¡K A†]›æ~,m´6_{ù¶�ðÏSìÍC£žá áIU6•Le€•ðy~že)�Çkݶ½¾²öùÏø�pàJ+¨å+íã­ÛÒ^p¤ÛØ©«´ö©Êµoõ–¥­�rè"]k‡mÍ­Þöl3æsÞ’Œì•„¦1`>Dk×ñÝ­¸{Q�±ƒ¿í =k›9Û Â À³g‚Ó2T›J €�|Þ30øÝ¥N1ûÓ×nÕÏxš!×A^y@Þtå•ÖzðÖƒo�QËò•·åÚŽú!ªí�^ù�r2ç€m{.Ⱥº·söÊ1÷\*þÁg+O«œ4OUt˜täé ËÕ3ʤŒ4–û¼ìÎ 0ó£ãéÀÏè¬ÉzÈàMÊ¥3¹ƒ]ê`‡ÞL¦¾uk[Î2Ô²´•)‡.⣞‚pf§½”vI–+­ý¡Ïêj_ä[]×(uÊàV6Ò5÷À*@7‘3Ê`yŽ*(©-O¥S9uuHÚvåüS§ü6þ]EÀÏ›ï&^€þd²3zJ­ØV°»*PVÑߎ~Ë¥ð •c³�p#2LíFm�_ËØ“‘õÕµR»MÙnWª~7j¬kû¶;.ããà1íôÀª=ùEFë¿fæÿ^è‹™�ä�@€ zAѶiP9”‘OrÄWˆHQôÌøä3ɇ§ôFö¬ZÜ×DÛ6ÕŽv”ÉÛ¶@]DÑ™i§ÖUŽ ^="×�â<Õ‘o€@i@ïè¢*ø ,ý ù‰f^ª®æ•ð6c™¦à«¼Öƒ§KdøÚE»ÚROS[Û·-õÖgø8vL7ï�Uõ…üÞú¥€ð:(â~þn³?�¡‡**@ÄT¤Vàó`î Äædò‡±÷7¢®j­oYjÓÐ*ÓVZ»#¨¥vSåRåRä$èüÎãŸ/ë�U€nŸLÏ}”—Í@žîkƒ€'Zݲà›Yö3ó—ðqúðJDy°Û¸NK[ ×PuÚ×vlO`K±¡k¼RtØÝöGD9æ˜î|¬*0È»��Ûx‡ríÿïAÀw2ÿQ:ô  6‰*~ÅÆ•@Ø.a[í±%ƒLV�Ï—ò ÑÉ,ÿ�å-Âw ¸ &`Îá¬*]ìÚxhÛ¡ oÙcÐ]ëÔîw|¦wìÇ4zà–y`À�ÞÑ îÍ€�¾æ+ì8g­1H ³�z)€ [Q&Ò@ž3?³>»ý€Ÿ¥€ÿÑ¡ÉäåSyÿ?r)¸}T BÑ×råûê"³{Æ"dvŠ~œéq˜n›VÊ É—3õ¾‘eøKéПÜߢªHãÒÀ@pö‡š "ËúÌü „“g3ÿñÿ� S‘Ͷæ@@ÓTå)ÉÔµÔn(7 ú;þÙølLkê�U\áà‡ïp{4`̇9?y"€ `IPxÈ)“» ˆ½ƒÀ7„íR_ ^Úê–ÿ œœoz}ðv®ù³ë&à'&Î Vø¶Œ]+«åV_Û­3?òq¶Ç cZ©VĵxíhÀx>ùR.~tüW¼r(�ÛL¤ØÌ `?Ï Ô à>€´AQèTË’”'ŸÈì"3ÿ»'²á7[öŒªU+¨ûxd­Ü²íi¥+–Ç?ÎÓzx`•`Ç* .¹‘møÃì¿åúüþ|îëîG³1˜¯þüCVûy\Ø àe@{ @£"ÍM¿Üjœ�þ#þ+Y|~¿´6Ó…*·~Kí]0uç;>”�ŒimêŒiôÀžóÀZ¼ˆf�3£’(o;{+Ü‚àS€‚ûšSœ·A=R¿mц°·<2AO Ø�iôÀžôÀÚ¼7 ‚‘àw%Øà±i��¼_>âÉcО@ZÁ_ƒ€`¾á—ºãuÿ׎‚½ä�µ 8nv9ð˜e%Á;û;ÛWJ@�ÌÀ!�h[¢-s†€³¾t¼×¿Í¥ca/z`íN,+Á©o+à[ÞßЂŸ2 'ImŸ2¼åœùþúG#c=°×=°–§–•×ÚÊ2ŸL¿ÉÑ@`¨4ê.Õ` ø¡5 ~( ø•Â[?ì˜Fìm¬ì]€›q[60@ø\À þ:뢞_ À·©‚àÜà“üqÉßzp,ïy쉀—Kp 5P6PtUfeø¾TA/ø; ÇjîìX‘ô52ÊFìeì™P�œ`Ø+ðÛ`°Û*@0·Ë}Ë]@A_½>òw¢þiõ’ £É²IEND®B`‚ic04‹ARGB„Á¾‰-ÿþ^†WÝÿÐF…=Ç€ÿõF�+³i¯ƒÿ’�u†ÿå/�)Æÿ| €=†ÿÒ%� ð†ÿd€Ɔÿ½$€ž†ÿýò^l„ÿ,èÈåÿš•ÿÿûᾕgJ7DE-ÿÿ¥bE0  ¸ÇRˆ,ˆ„`ˆ†‰D¤£#ˆ dA‡  1‚q‰= € &3#‚ …²1 )30‚DH€33‚ �,3-ƒ �23‚ €*(‚ #)32)!`”T€ /�3.&l±T€^`/2-& <[§¥"ˆ+vj˜” ‹XZ ?‡T\^]}£„Y€^o�©u„ B[^`h’£©ž‚ X[io‡•”©©e‚ .^^ix�™‘¤©—ƒ [^f†›˜��¨©R‚ Z^c‘“‘•—†–Š‚ V^l“Ÿ¢©¨”|<‚S]w£�©™�‚ Œ§”{Y‡6§” ‹XZ ?‡T\^]}£„Y€^o�©u„ B[^`h’£©ž‚ X[io‡•”©©e‚ .^^ix�™‘¤©—ƒ [^f†›˜��¨©R‚ Z^c‘“‘•—†–Š‚ V^l“Ÿ¢©¨”|<‚S]w£�©™�‚ Œ§”{Y‡6§ic14yá‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATxì½Ùs#I’æ‰ žŒûÊŒÈʬ̪Êê®îÙí–ž‘Ù‘é•}˜~˜§•�ÿz_fe§·«º*�È8HFðAì÷3àC(=$H‚ i*4ªšÚé wÿÔÌÍÍ«ƒÁ ’)[ [ [à²,P�Ú‚j#î8Ée2º“ˆšy�“cú¡î…ùfˆE2Ý páeÊÈÈÈÈȸa¨f§÷†ýâùp³fd�ßT«­õJ¥µ]©´Ûâó£zÄ-ǦZÃQ}å`Äûâ1Žâ{*„L üÎHîi4/¹§öö_‹o‰ÇúG²GñÓŒü)B>55ž)Håól¦ÉtÝ-иî˜�/[ [àb,°V©, ¡ïì×5•¸.ä¬ ä ä+õP2ݨ<Õf�‰Ë Hú(ƒÈ8 ¤uÅAzɇҽ’ðJºWÿ·‚Ôe¤ªEecÜ€ù`ô”"æV˜GLÉùßõ°@v®Çï˜�"[àR-ÀsüÿT©¬Èx¢ð‚ €oˆ'2rA�JCV¾´@ˆ[å&¤<ŒøS>fÈCÀøWq,$H÷ÿ©ì¿â Hµ¡P$7mNºå2ŽŽºtŸx1Œõwž�…2] dàZüŒù ².ßcfž-§Öÿ Îà>ˆ I‡±!Â: È+OR1càÃ�ÆŠW‰S�tûÊ¿ p¨øÿI¡ŒÈ)Æ-›ü#'�8ÜÁõ1;��[#óÏÚÙø¬¾Üùl�‹± ÷�è5òn ›Böúò¨)øv¿¬Tî Ÿ*ý+©¾ÓͤXÇÀ;€ò1(:r#ƒ´œ| páµ§º¶Uÿ[%ýüm¥ògññBèÁaSa7E�TKv(6E÷h ßÃÝsà¤Áˆkú‚¬RæGÉùßçi�ÂõõyDîu¶@¶Àl-ø/V*·ª·åÜRí+Öñâ>Ý8j+•Ê·BçүÓT>7¦à8¸ÑUb’á&£+܈ • ´­xMéË �µ`GkZ˜8A 7üoä¼ùw9 ’QCTm² ·L]´CwzìÒ}v0[¦ÏÕ\§™²²²ŽX€‘?à¯Ä—BÁ/…z�‡cÞa6ÉÕN¥òPàüHoàÔ úpHI0ªÂ$!£°‘–¸€À«Ò3ñHœ™‰UÐ�õ¼9€,çã/ TzMü½üˆ*M–áw‹îÒÜiptEŽJG Ï ’ÿ>à:Í”-�-�-pÄBµ&#¡Þ—BÇ¿R¢fÜ? "²Fø‹Ù®ÐrQyÒ³ú8ýªÊ¡/£ˆ¸F[Ð5„4 Do(}Uü õ8ï¨ÎÿGñšœ’÷z;áÇðª ÙL–át ¹þèÜÒ�‹‡@žôX ;X"Óçb�ì|.¿Tîg¶ÀZ@#ØêøýOMý×õ.ÿ¢¦Ýï é¾P³¿òý5èçróðá–�Žž<t–%&")!¨ðŒ¼è$×úôkÑÃzÚu¸òá$¼ÓìÄKÇßk@mj6£¯Y‚Q–Ô„r�›Šrl=e87ƒìæ%Žë*ÊÄ3e \i pýdÊȸáøgͤ ,WïT*z´^Y€ßÿVhøH¼ ` T+Y'δ»Aßз`nà7W–�†Ïè 2äEgÔ6�‹NzåY�ƒpO3_©�‡å¼Óº½2°ù£¸dÖ R-ä&£l�9Õ:?‡A7LÄGÍ&=~”Ë1àrΟy¶À•²@v®ÔÏ‘;“-ði, Àl 8ÙÐç ¡Ö3!Û3Ý+þPa”ü~2ìÀ�„<1ô�’Jžþ¤AcôÉüI‹õÛ@ç~hh¾ pOñ�ú´ ~þYÇögÅÿ,'`W€s è±9ºãEYÉ)=Ý‹�™�q—å äuX-Ó•µ@v®ìO“;–-pyÐè¿5§]ýÔ"›ú|/þ+�æ’ÀsY¡Ë�à—<]óÎÈ)‘!óaìãÿF]R�Çh:’ öFZÇAuú(ÞÕbÀ{j‡Y øšêijØ¿+gàeÑF‚¥ÍAtÑÝ0§4å8yèìÐ%=:ÈÝÆòÿl�+f�ì\±$w'[à2-Àœ5íýšÙº­KÄøkžû'°÷Ô?7 8Áà‹€•–©ÇDz$Ð2ÊšE�´pÚ„Ç>Ð'=Ÿ"X ì¨Ü‚—À_ÇñoRSÔUOâÊr„h¦˜7ê þ±ù‹‡Ó³œ-ðÉ-À5“)[ [à†Yà?W«!áònç»,°|,pÿµt÷…Z  $Óü�ü üæ_sЙ€\¤NDZ‘@L¨ i öðÈïvh×uX¯ã˜“þŽò|ùT·+•Ÿ4Û±¥G[?+Hæ Bª,6ëªàÇ¥‡¦�oä_¥ºóš›'ó«b�ì\•_"÷#[àr-Ъ1EþD ùDòS%Ïý(ÌscˆàGþ8¤¸Èp�/ÊŠŽzŒŠ#i&£-ñ„–£#/u"SG d‹ñXz•Ó“�Êé´�@GÇñƒŽë¸¾*Ø“Àödu³e\ÉÓéÝ3QWqF€:q²`3e~,Àuœ)[ [àæY £‹ÿ®ûW ¿UøRaEºä€ï‘¿97 ƒø‰�÷—ú@‡È „4�‰Gd¶â:¸MÒŒÂè‚Þ�84P¹¥´Žú@�ØRX>ÀDp�]± §yS±Yš.’óÃ)Ÿ)[àJX ;WâgÈ�ȸ\ ‰Æ»B#€ÿ Ôz®Pšñå½*£œ€ù ºæ r䊦8:‚)Êè"*Z†SŸQ“¸ëFG nî:áΧ2óJg¶ã¶@ ¾ªã;Ðñ½ÑÍïOÊÊ!QÕO n†tòÒ-ç�q7­ä1‘‚“ž)[àÊX ;Wæ§Èɸ< °Ÿ®�«&DâÐÔ¿ Ïh?)F9‚~” üæF?â–�xŽ+i" F¤$Ÿ–²È -2Šu5ÿW^^̯SgFÄÁuçÓu½ ãYÖvÁï´xð½¾ðN�7í.PÜ Oî²õî–ã.‹ÉÜUD(åÍ�0_¦Oi®ïLÙÙ7̬ì7b�N àï?7ƒ¿y£hç@=Èðb�jŒ‚¤ApPÒd9r£(œüôÙu»ÿ.oî2ÄÉã0Ò·5p @¯ ð=�5­üI¨ÿ“^!<”à�‚\ rܲ¹»Á¡GÙåènqM@*›×`†LŸÒÙø”ÖÏmg |" ”9qÀÀ$ð7蛃rü‘!ƒ5*r£ä0õƒC`=T…(o”u]R�ëE6‘îrpH€�ñ‰ãU=¹­¾ò˜àPqM¤‹…¢©i�.¹TcMÛGŠÝ$„Ž:®_b¦l�˵@v.×Þ¹µl�+aÀÞÈ�fv˜8Î /èwYËŽÃ PQ¶.%êŸûAÜrä”'N1!tQNÊ’.çúþ¼þØTXQôo«žCû¦f~Pš�ÙÅ©ÙU9y9üØâÎg3H•Èz¸&´w°h”–Y¶À¥Z ;—jîÜX¶À§±Àÿ^­¶5êïjº»+Ð[ÐÈ÷ }-ï‰nkB«¨gÐG&€b„bÜz8èæ8²:Èq8dn9¡`Jþ3FŽìà¬N/Æ�N¿á 3dž,Îg‹ùT0_;D7¯ÐÑôK}&›+:R§â‘øËtn–º�c [‘œuYθ pÂgÊȸæÍëáö}Ÿ¾�Sy ðTÆ®ì›?Ç�À@¹G. €¹õ–áeAê1ø“nŠ2HHu? ;6Oæ—a�ì\†•sÙŸØB²y>ñ‹ð¿ˆ?ê0æy8¯ŽGü€¥èt\!�Žì€rnвuæ !é‘#;�ŠÜíE2Ç#8NN€õrø«]¶A¹ÚãdÒ\Žî¸,‡ãî! wÉéÎ?LÍÿ³.ÁÙ¸#ç&²>µ´È­.¤aóŸ%Fý„1xùàQ_”�`æ¤[†ãè çƆÿ�Ñqó˜™úAJsò!›Œªè��—8�ãã¦Ç À(4¤ãÛ¼ø@S"}­ØÕã’…]ÉþV€J$ŠÝuõN3·~÷!ºûÄé^Þ.ØÌüR,�€K1sn$[àÓZÀÏ»éhÃ…O Hs#qd§›;_äÎ[äª&úH1nd„O"ç/ÖOœ~Q–à>–ñpÜM¥¯(ûCl¤ ’–ü¯„ú¿èƒA¯äð­€HÅ®òî M™"øÇ.“kÔézH/¶�.S¶ÀÌ-�€™›4W˜-põ,¸�*F–"øÛ ˆÈQÍHe]‘“^Ô•ÅmÒ"¹_Qg™¼î{DÕˆ¶ÎK>ò“†ì~Gîc9< X¥ŒlÒÕɪø•¿*ðßÑÆ@[JŠä.D�eƒ8ÍA1n=Í9�ׇŸ“E�y-fÊtÑÈÀE[8ן-pE,`e¸ð a$\ –”1RÁ]‡õæ1�óE�ŠŽëA†H7ò!C ‡â8ÝyP;_äÈ1Ð'Êu±ï>nåi)¬(,(ý®l²®²¼&¸£<¯T ÅŠtœ@^ƒ½»€®L¦îb^ò ²€É2]´²pÑÎõg \ èB¯F$;ü�Tgå´sRYL’�ndƒ<<†Qò˜QŠ<¶EÛ”Ggt�9�|]qÞ‚˜c*@3%|aEëd#&NÈ^FEàž”�²1/qw�®â‹˜|è¤g'ÀVÉüÂ,�€ 3m®8[àjY@ŇqÆèb�4§ >¢ãÊ�'¦Çv,Ã!#^‘ƒ˜ErßÑS?Û9�Lû 07B…Tµ¦ÿq˜�ÝU‰ÇRùI]¡.çC.vŒÓñLÙf�iOî ë@®8[ [àb-Àt2-p±tp‚ÑÍrY|’©øTàëºá­Á–~iäsˆmK=nϲyÌ7�ìúݧþþ RU}ÁˆY§•§íù\g<ôby3S¶À…X€s?S¶@¶À5µ€Á_:Àrô�>Fâer*Òœç8}Ìãvà �ÑŽ< ‡ Ý[縒¹­¨Gç8òq�¶i§xŒî7Bæû5ò§Îªâì H•d9‰b7Šù�†Þ£ÿ²z‹é´™œdùœ~. dà\æË…³®¦üͻ´' ÜÖ[½÷¯ –4Å='¤á9÷0,‚'Ge�e8TÔ‡¬wDs0ðsÃq  è*:ÀzÈušU‰GÙy�^”é“õ±ô‹Ç´©þÆiJÉMS�ɺØiTk]䔥Œ»�‡MZ¦l� ±@v.Ĭ¹Òl�Ok�ßk›¶·½# [¢¬¿®T¾ÿjA²> Ô� ˆDCÍð¿õÅ<.g½Ëõ.�ôŒÝÓì ñ@7ˆÇÆ<ìºã`Ä$�úʸÔã4ËpÈ}°œ”£Nƒƒ¸Ž�äôü_í%É]qšã®.Æ]õ$^–—zíÛÎñl�™Y ;33e®([àêX@èÑÕÅý@HòBóB»Ù<°>ÐŽ€wOÀ$DBoŠrÔYoÓ�уb8Y3Å.ç#}vXýHi gÇòC8ÌPÁù$Žãei¤C¤™,;ää!N_g±dÙ"@ºáìÇ> E�æôGwž@]™²fn�ìÌܤ¹Âl�Oo!FWˆóPü[õæÓ»Ø®ø‚tcÀ=5:•ÅIƒÊòX_ää5 ÚôqØ�˜à›�ÑÍ[îþÚ�oÜžÛu?È�ìr9=ò(;_ä¤BZ1©¾£ö!¸Iâ&tÄcše—�ñB3Gš¥N§S§'?Ðeʸ0 ø¼°rÅÙÙ—o�(ŸøåkO¾¢ÜXA–2T’:‘Q(Æ‘§E¢˜4+ÎààðH Sÿ¿]¤rîK¬3æGŽy8.S,c9æ�2eˆÓב' f!)M¡‹ÜUDó:O¬ë8™üüD.'1S¶ÀÅY ;gÛ\s¶À'³€PˆÏÜ&$9m'@0S”­;-§—�E½ÔU¬×õOâÓ¶«|<ˆ &ŠG 7P›îNs]‘;-Öퟞ)[àB,Oî i Wš-�-p¹ð«€è»,Šm!;\Vû“Ú‰ýˆ} ù‹€ì8÷K‚ãeü¸tš(+unc\�O gʘ¥8É2e d \ ,l€Êšvóœ”ÿ¤t*&OY8Òè"Ŷ‹ñiª,–q\<²¹ê2(�š¸�Ú<æ9­<©ŽŠ×iŽ+çɘÖùÀ´–Êù²®¸Hð { �Ó‹ûÍ:Þÿ�`6ñˆ †“2�®ºN$ò•…âÌ‘=–±¾¨sÜíÁ¥ã�ʇ@Ò¢\–·L§b©,uD*æ%-꘨äÏG“eù¼ˆ×àyëÊå³²>‘F£ÿ1`@·…0?Iñ?üûBª'ºØ‹?VçrGº "•,›“^$Òh²9@ Ð;�9z¿óO~NÞÞÀ@ç 1QÌ_Ôwz”­+Öå<#À·¥xúh’úC— òæèŠÁiæTíÃ-ãÅòŽSŠqË>ŒaŽü?[`ÈÀ Œ˜«È¸BH€!M3zÕð¥ðFñè‚ç <6žeŽ!ÊÄMÖGNCŽ[6§i€:ä|ÄwžI�r@Ìk€8EÀy””òÃ#Ó‰CeÜy#§m �'@ì¸`°?.Ïqiªþ#r~в3û�Ï<[àÌÈÀ™M— f \9 Põ/ÃÙtðô…ÆW•ÊÖüpo€;Ê´Á�Ž#CŽ›µGÿ“æ-ÃM*„n® Øéè ‘ùbˆi–)7‰Èc²¹ë(ã¡]Þž0à öEÓbþ(Óâ�õQ¶®ÈcäDÌôäǶFæçµ@vÎkÁ\>[àjY�"^•Ñ-ÀÆ(œ ð>’�te@i�ªƒ·e¸‰|´á¶Ð»,z:èxäîWÔ�V¦ŽX¦'Íí`f8'ž… ]tÄŽ£xÔ';-rËÔ{Û%/ÝΔ-03 d`f¦Ìe |R ãH\à–ö˜þ,§•iÀy9ò":9�:¯ â&çƒ�º'ÏiB,o�?�&pp–°™DwÕrW¶‰y�92ëj†ÿ­wûPèm®˜?ËÙg²@vÎd¶\([àJZÀÀ4b<>ß A×€xp5¹-C�±ÈäµÎùby䲸õçåô‰:Ìqˆ<à‘?À� <îjWŽ#é1Ž ¹œeó¨GY7E�e§ež-pn dàÜ&Ìd \ $>@ Ð#0ºe~Ç#¨¢‹ñI²²�Áœ<�ù0vô?iî)ȦXÎ2ü¼ÁÇbîú‡ýø„è(Í]žÄU"Ñ4édŒ‡íxQ—*å�õF½Íd]æÙg²@vÎd¶\([àêX`ô  AƒA€øÓ*w2àpð(�Aî‚‘Gu~8DËI1úGê€,,Æ-èÛ2Üqx N‹éQç¼>fÅöß•#°'à­ü"[mI‡O¹ûÃØÇ¦9)OL/ÖÓbý–ÍËÊ9-ól�3Y ;g2[.”-ðé-0~:8ÀßbHi€?hÆ ¢Ä`ô‹ÎÀ¹+$¿ATb*ë8�!›(Ë¥ÆG‰ä#nŽ:–�qô“mL“�%ÊŽ]á@ñ-¥¿üµÁkÙég98ÊB—¡"j‡ÿc²ãÎãx‘;ý8î2ÇåÉiÙg²@vÎd¶\([àÊX€ DàÛ‰[Ÿ´‚€àI¢�ÐàH=q,²�˜dtyÉG9’Ë¡#�ë° �ã–áÅ@½Ö!;X·Îycœc$îcg`K ÿR{'üðN£é¶ä l*è/݇̇±‡u\Z±ŒË¹M4mþbùÏ8µ²pj“åÙŸÞ£Ñ Ë`q Ið3 `І£ @8¦+Œœ4â\â®Sâ"�˒ู37Y޹h7êÜgs§9y…ë:E±œ5[`6ÈÀlì˜kɸ ”,üDìÀ‰ôl{OßxɈ·£gÜÊøZ€ø\`Y8.K^t%%²s©ÆD€0ùL±Qô¤GqÝ$róøèÖ�Þqú;)pl²A ¬ðà  §| ÅîN’)ÓJªÉªl�«g�ì\½ß$÷([` 8Ælst¥aCƒ]=ãþE_ÚÒG�þòXÒ·ÿ%…T`àG@©ÈÜàˆÎD¾H¤YG~â6Ü嬓ª” ü$¿7àGNGvàØ�íøqp\Nb쪢S‘ËL•¹�é›Ûps©7‘ßdu·`èƒâvì0Ý�Œ+Ãó}�þ+ õ_Éàƒ?›Š¿S¹è¸9•JM9éÖ9oä£ä#yœßi±ë&ñXwQžT&ë³Ne�ìœÊ\9s¶À¥YÀ˜Y°¶Ñn·WþO¾Uø}­^oh±Ÿ¾÷[¯èÙ?¼] 愬þoÙ�t\BGðß×#€= ¨Öj øëÛÛio´¢ �(¢qwÎ2qÀîˆ\ê1¡�m�à8Üaø£�hè‡|Îo_£ý­M-úûYûhÊSyöÐóh@Ù!7;Œ ÿ[g>)ŸË¸»eù£Îù�«/æ�r,›ål�s[ ;ç6a® [`¶Ð(¼þàÁƒ¶žñ·%wð­íf³¾£¡þn£Q ·öææî d5ªÕ/Ôú‹¾2ê)ÈÉú€l�*z5°r(@³•C�úy,�Êœ—7à§ ±Ð¯©qpKÏû[âsïßW76*KZ°(g€wÛ!h÷À„@ ��—–Òt„8  Èsv,§ƒ’B6!Q-"²ÁÞ2m£3gÄï‘ÿÈØðokê?�þ_Ë l«Ì¤¿›…CŽ[NÊ‘ÞräÎoî´Xº²xÔ¹¼y,S”‰gÊ8—²p.óåÂÙ3³À?5âïþ Ïå|©çõ�zÆ_oµªz¯_©�Ú^³yÿ°ß¿' _–P=ðÈàÙ¾^ù;±S59m�ý¼žûät5õ¿H�À«8?�EU§)vÀàåæ1i`|0ÊcÀ½2WÒ*¢q;pâ´í€ÎSþpSûÿMÿ�þñ ÍßúSÔäæà¦¢ÎiÖ“Ïrä.oî4ç7·Þ<æ·9ù óa,ÿϘ‘²0#Cæj²Nk�âÈ_åÁͺô…; Ïy¾¯©ü¯%󌾪•ýBÞFM€?¯í{ꇇóûš8Ôt~šÒŸ†pý/lnV–^¿®,Ê è øý+ Ð7øô ChPT@›87€Ø³´îÐ#›KÏD' ¢r Ñ@6ø›ÛÀ9!h�ßž€_GSyùZŸ>ð¿—~Wa¯à(÷˜Ü$ w§ÈcÚ¸àHpys§Ç:¢Ó£ÞåÍÉÓ].ól�™X ;31c®$[`z Ìkß}÷]CSý�ÅÅźžç×{»»õ�V«þ®ß¯ík¿¦ôï·ªÕgƒÁà=—ÿ-Ïæµª_*èd”¯æ ‚Ó·ü!'ïý{ê¿ËÔ?³J&þúhPrp9àÈÞE`&�þ '�Áß:8dntCgÔ‹¼ÐÎ@mÕ—ÄéΜÀHŸ¿Àÿõ•ÊÏJ“O�ª¦ªXu”•4N³\ää·.–µ~”|$OÌoÙ¼¬\*þ9�yHÊb¶Àù-�€óÛ0×�-0•ü ÷þ`ìÚ�;wÖ¤ºÅ†>ïkóšÚ¯(lW«ËõýýoÚ4Å¿@¡=mÚÃ3~¦øgAÔ @S›Až›Aq$O>òá@ÎkN9„ÈGv\¼HF8xDj;#>ЈWmìŠïð‘?í2 ´%'à­t;ª‹ª"¹™¨C¶e§E]ÌC:d]äQo¹Ècþ2ÙùÇir‘3e ÌÄÙ˜‰s%ÙÇ[`þ www絉Ï}Mï3Âÿ¢^«­éy­ÞlVõ¬¿z ‡`§Ù|xÐë=п.»òi‡¿¡0åÿñ½ù0B/s"h¼á87 í�œç¥={gžFâÈ�Ó]:;È�mŒrÒyäðÇèkT¿¡ú7ÄߎŽ�¹ôïäl(ì¨;nÂÍŦœf^–'ê�¡b1Ó-›;ñãhÚ|ÇÕ‘Ó²޵@vŽ5ON̘™Œ{zM¿9/ð¿'ðçÙþ÷jáArô�i~½š×Ô3þE½–×íé9¿Þç¯ðŒßaV=”¹wË€¹�{Üé�ÇÈdPw^e¯ `Zô%Íõź�!ê2!SÆ`Ç¿''ƒ…}?¿UPZ«Lz< |¼ß�“°§òTaŠMYgÓ��¼(;_ä±¾Iù‹ybù(“/Æ]ŸËgž-pn dàÜ&Ìd µ@í×þð‡?T766j•gϪ‚¦Zeuµ6h·—«ÕÇ_é™þ_iÕþ¬ÜÿÓs~�}ŸÀ‚¿Qqæ68ÐÍ�7ñQ?IKqÁ/3ÈLÅöÓñ·Ûp~ò9H<‚´ œìò!(>~Oñ´Àoo«Z}ÿªZ}£gü?)¿¼#-h†"`:NS�ãE^L+Æ‹ùcœ¼¦¢ÞqÒ‘¡¨jÊÿ”_¿¡uå%²6[à”˜Ýæ” çìÙ×Ñ€ÿ‹/õÿŠî×+Â¥ÕæíÛÍ/ôq¾÷z¾ÿ^Sü/ûý »»_éÿ=ãïöûzÆŸ^ãà ¸ 2~ÀÁK8³ 8Àí‘z)X«_Ú ²¯-ƒé+|No¤ }æ%s3a�À¢Co‚Áž:#�/MóËáé�v%ìÁÕFÒ« ü@¶•SÔ©6K�Vk}M[¼{·³¿±±Ó{ýz·÷êÕŽÌU›Ól”‰‰t(òãd×w^V±¼Í�i”Í”-0s d`æ&ÍÞD ü£ã®ÎÏÏ/õûýÇR±UïÓZµÊ¢?¶ç­ò.¿FµkÚÕïqïàànC£À_ÏþÓ«|e?ä,@üÍk ™>î �7——+›ú€Ð–ªÞXÑk„šâ¨ÌÉ hª~�‹º@±"Ùà�ðigÀñ/.VÖ×+{ ûjËùà}T�G:ú¼ñrKàßm·;þ·�dMÀ ÷æÍ.ÇT ºcŠ z™ògÍ_VÖý1�uÇCN£ßŒôLÙ3·@vfnÒ\á ¶@ðjt½¨•ý�d‡ïtïþ�ø"¯ï)±:zWn¿V[–“°Ü;’þ;…¿“MÖpÒs~EÒn};�ø)si„`ð×.‚êˆf¤«Ô‹èб8 ``CÀ�wîTþüðar:ÿ�?(e'�†¸Q NHÓø�³NÀàOþ38þ½/¿¬ìÈ 8B²¡¨­ÿmÚJ7¯š`ìììîýôÓ&û#ˆ¨Š`*ʓҭ?§M—�²uð¨EÇel*ò!»œóež-0S d`¦æÌ•Ý Œ@ŸÃ­Vþë]Ò½ËZ�¶ÌôôË��_wö÷¿hÜÖ†;-½¿_ó>ýv’�†€v)&3 ÃSXò,ÿ}·[y­Ýÿø07ƒ¸ p¶cÀ‡‚^2ý¯¯jâávÃ85ÊcT“ø9=r£Ûï¨ïôƒwâÛ««•�[·*;<�.-ˆÔ7©y�f9rËä‰ä2‘Çô,g ÌÜÙ˜¹Is…×ÕðÓÀZSÛ+Ñ'Š|§»÷w¯u=Ï_Õ3þµêáaÐÇ Hϸ?‘�†Îêp:.ÐïÉx'~È(\Žie�RYœ5€=ÉPñDEsÜ#sf¶µÚS#ÿWZWðNë jrªr4“2î«ë=�ӌɲ9zwü¨›/ê]>ò²<ÖE^&»ž˜†.ÆGÑ̲fk�ìÌÖž¹¶kj�øƒ‰„4@®7+ù?ÐÿFùþ^@¿ PÓ&>úzOÂÔO:òç'‰N23õ¾¦ÚÙ,ßïò;_‘3Å>Ðè?…’ѹ‹¶"Ý"·0žX[«¼Ò¿-­-hËÉhËh«_¬î;%¹йKÖ•ñ²|Ö•å�:ò™¬'Ž •ñ¢n˜sø¿˜VŒÇ¼YΘ‰²03æJ®›à×ûÛß.þæ7¿éjƒ¾E-¤[à}þíN§º£Oôît»U-êûµó©lpGN{÷§•ýiáß2Lu/JŒÑƒ6phœO O>f ÍTâÊ·'�ÞXÿ¢|³×«t´@S��[âéÍå£nÚ1·?P]=‚rLx‚¼Ó�f Zú¢RwîÑ£µ•¿ù›ÞÁÆÆvoss·¿µµ§ýv+Zß0�hÂÍeŠÓwu.cî2Ž›[oŽ>ÊÅ|Åø({fÙ³·@vfoÓ\ãgl�ð�±P_ìkh1_§Óy @{¨wùïi#šjMïó×´¹�žý×´zý© <ø¯õ„Ž.~5 Aïbˆ½÷œc�>?œÖ $ðH{Á±.€/ êë…é‹‚é³Âz+ .'€7 Œfðü¼@ˆ:Ëä�–ô;´›ËËKƒ~ÿ°Ön7÷_½ÚØùrc÷ÏÞ8xÿ~ïðà v!Ên"6g¹ÈcÞX‡eÒ‹ò$�õðH.yLÏr¶ÀÌ-�€™›4Wø¹Z ŒúÇø¸½½ÝºuëÖm½>÷\‹ü¾Ñ±}•òÕjUžíã èŽÍk~k*´*9½‹vUm0>0uÐr±¯èi4ž�{â8À[9ûš`&àÖë×i4_ר{áýûäD4³l /r§Ã§%€úââr»ÑH3�nwŽ�*îííïýðÃÖ¡f%&�›#96iÙé'q—/+7)-ê§©Ÿü™²fn�ìÌܤ¹ÂÏÑ%àÊU5òoê½þ[JÿRqöíÿkÉ <ÓH_`¨‘nCz®%½§€+Jv1»Í1ôúrÑpê'4âþD1àŸf4;`ð×®}ÉFÝŠ€_6ó;þ?€œ°æ`~¾Û”—¦x}pp°·ÿúµv&Jû,Ä*£ìŠÑAN›$;ÝùS¡P®˜ã–]¦Œ;SÁ3e \¨²p¡æÍ•_e úß}÷¿ðý÷ß³]/‹÷:ïçç«Z_ÛŸ›«j{¹Å���zðXãß»Z,·Æˆw¼m¯¦¹Dƒ©ÁñS7Ïß�¸ÞF¤ wþcjÞý5'/rŒ§cìñ3úDí¼Õ@0¥oÈ `u?³#ä‰ý®l·­<úÜqese¥²£Ð×,B]o´Ø‹@z-ª®9pÅÇñjUû+k�åQžä´ZÍ*�f’s\á1ÈŽŒ•òºËD,Çô¢>¦óOJ‹ù,Çz‘!ýŒþ!‡Šü?[`–ÈÀ,­™ëú,,ð�:ZÝÙÙ™[XX¸«ø}©ïk±Û*ÀÑÔó}½&WÕûûsÛÍæó^¿ÿ°qp°èçݼ×Ïbµ+M`‡ÃȈýAJË1ý<²QÍœ!-‹üxíoC3^ÿ{§•ÿ}½ çør¿ÆN€ü¯ó4ï²4_FîiÎuÖ;-Æ�oRZÌ[”‰O"×WVÿ¤2YŸ-p. dà\æË…?c €yÐ:Ú·ÿ®0ÿ+Å¿ÑÈõ�F”üŠ4°ÔÞóM}çvÿðp]›ú,2’æ3½Œfãè÷ÊÙ!�þ øæôßr‘ŸæØ"zYö|6NÓ{�ü[þK½ïÿNü`pôü>�þõ{hÒa&]w7|ÄM–ÍÑ—å·Î<–/ÓM[�ËÂ]&ò¡6ÿϸ dà‚ ›«½ÒãRh·Ûszt|W€ó+Aþßyž‹+Ua8õ]Óóì–@¬%ð$ §·™âO$\ÑcÅ üG ¥ñ· ?ET³<žÈ'àþýʶ6þ©kú¿¡Ðä1€öÀö)ÌÎð¡¸+1ŽŒ*K·.ò˜×e‹º2=yŽ£²6ŽËŸÓ²Îm�ìœÛ„¹‚«l�¯¾úª½¼¼¬WÔwçô§77×xøÿPÓnvÕÝùùÚ›^ïþÒÎγÆáá}硦õð|?}°€èy¦}•²¤o ìq ñþCåGÀñäôŒŽ™Y�ôÜ F7¥güì.È(_ÏöëÚ €…~¼‰ß�Ο~¯­õ%¿J[ _W=»OÏÿ§hæø,u­ ˜›ëèÕ�Åù/Vë««ÍÁöö>¯*ìk_OHÄzâÏ[â˜ÙéÖãÇé�·ÈcŸœ–¸²Ì³.ÂÙ¸«æ:?¹4ŠL¨õÍ7ßtá�¦ùïj žoÉh�Ÿ–øWwçæÖôþøW�ýý{�~°ã#9<¯¾òÏøO°²a΄:ÙAâÒqô×ñû½ÿ‘)?ä� a·M{C{ðx¤ÆG†”tƒo ðßhÊ[ þÒBÁQ= Þ¬ˆ��x-°sÿ~OÇQë½zõV{lîþøãæáŸÿÜ?ÜÚŠ;Ŧ£ìîŒÁØŠÀ‹ùcÞbÅŠ:â˜Æàïò)_^ü‡É2]´²pÑÎõ_ºFàŸðOrW7Ó‡r¾gšY#ÛªûéŽF¥¯7v«Õ»zwüŽžñÏQˆ€4 0åÈ÷ÒpÊ ôðãÀd¨›ýèY½ßûOÎÀ”Óñig@9²iùª¾/`„ƒóå?Ö°Ð@§<´‰ÙôÚb[k –ôûÖôfÁ|oii¡6?ßì½|ùNý8®Iƒp±þÓèËê/ê\<š9�ü‹ÖÏñ ³@v.Ì´¹âOl�„8ê»ø}+ùoôÜ~0d¤¯xEŸ¹mh+ÚÎ�êù~‡éò�,½Æö; Ô9L�þí¤Ã¥Å|Lù�ßû—€}°SZ A¡ˆÝÿ÷šÖ#ðÇ– šÑŽm÷å\p°hÛi'T=u²fÚêw]³:óZ[°¦Ç mµqpðîÝ»F§SÚ†ÜÇ£.eÿÊòN“?T1]—Çc?Æ™³�-pÈÀEX5×yià¿^ou»Ý¶¶ìmkŸþêƒÿôŸØ§¿ºÓhÔ¶wwözOõŒÿ™–ü©üëLOä8ž÷_G`'…�Ž7‚=àÌ,À)ÔÔytbŠˆ† Òù‘2V7Ú™Ku.ÒÈ¿¡=èDúƒ6Úi,,Ì ü[rp’ï§´IÍõÅxìiQo¹¬¬ó;-Æ­sù̳.Ü®Ö o*7�-0; h”¶Uô‘žÍö®K\—#°®�dô׬îë9s]ïòomo?éíï?oöû·5ÅßüyV X]ùUü30WјA•UQ†\Ed‹qyé›õUz1ŠbW‹ñ²V§ÉãrÇå=.Íå3ϸT dàRÍ�›…FàŸ�þ²âOTï ñå7y¾_c:[¤ÝüÖô.ÿ}mäƒÐbäøó.ÿuw’�dsloÙÝy(¢Z”Ëê$Ý'€>8^–Æ:wÏü4ÕŸÔÍ“ê,K/Ó�¦O9o¶À¹-�€s›0Wp™ÔÕ^ +R=ÕJÿßi&௅úúf­ˆWà”U@ßÑk|óZý¯7Ò'æqXáÿ¹¯òOÇ9áŸ>ò(SÌñ Uœ¨ž„`E=qëàq9¦ŸØèì2Ä.ÅZ­�:Ëîêqyœ×ü4y]&ól�K±@v.Å̹‘YX �ÿ?ÿs«²¹Ùªt»Ú4¾ÞÚyóæAs0xª‘ÿs…_kZgü?�ôb×õ9ÿØ®8<‘è öæã¬ñÙ¿l5í‚¿BkGžºIwp[©ŒÚÇ#¤YšáLMŠ;ßL¹¼B- lèM€N{}}ž¯jMHïpg§'¹—6I:ÚàG&:š<ŽM0N�pÖ´XG–³.ÜÙ¸pçÎc�úð«^Ñ”¾VüÝÖK|·õßí·õú¯Û{{OõŒµ®�Áñ¡ž«ÑoÀÿGvôC`Ûâ2ðOð¾€¾xúì/ ÿ�ÑÍ�@Cm±Í/A�e* ýNíÑ€p.‚ôcKkA–Û÷îÝYúþûAûáÃ¥Þë×›z%p«§Ï÷67Y—hš¦äqp¹ÓðiÚ8M}9o¶À™-�€3›.¼h ðÞpýa¸üÞúwì ¨=£Î˜3 Zñ/›±/BrN Æî–ñ¨ÃÐ~ ½¢W©ähÁfÚPãô‹° ÇÔÒ~Kí[·j³Ó\Yéî¿|ùs�sdssG³IÓ´;<ÿ>˜±XÆf-ês<[àJ[ ;Wúç¹¹�+€?èP­ÌÏ74ÍKi_èŽû½Fª¿?hµø„oW£ÿ®Þ㯱°ÏÏ÷¯û"¿�Μ€°÷?é|» ˆ^ ­yFýãÄÑÄð3R|ª n�>ûÛä- 9zpA€ênë¼YÖVÃí¸¢Ù€yÚÓ#€ÝÝ?þñÍÞ‡ã,;hteú¥ŽJ•÷h+9–-0# d`F†ÌÕœß ôÿñy=¼Qù§ª  ê•��Zeo¯Vé÷qæ"|º÷©Àýåÿ«ÃhÅyÜó÷ä3¬Á3# "—Qéˆnd·4êŸö½[Èàî8ܺȑõ{¥¯ý5™ú×fA<¸hÒ,GS§Q³Òju9±tþÔwwßÕ——ѺT�Md9š*e˜ðoR¾Xß„¢cõiòŽ e![`ÈÀ,¬˜ë8³èKW+÷wíÊúúZ«V[Õ(mM«õ5�­¥ü} üU}¬§­éþou¬»æÒ™½¦�$ð8\§ÅC·ÎÜiŸõÇqƒ½ó8y”�ïSrõ‡C�‡åI]s™bÞb¼¬|±lŒOS¾¬Î¬Ë8³²pfÓå‚çµÀü?ÜëõNóððŽFlÏ4\|ª„{jCÃÆº>É'G@»÷K÷HºGºy/ç;æÇ¿ÀðY‰fò“á>F8Jg·ãÒ>ní¨ÆTûá1é“òË\B¼x¨Åx± ¤—å9NON‡Ç÷Þy"GΔ-páÈÀ…›87Pf�øñJßçÓÈÿŽ–‰¿P™ß ð¿LóÆT0tjºk.ê.º/«÷¦êŒ&æÔN6±yÔ¥ §øQ­(w8E•—“•sêƒiÊÚ<.Ýi±\™.¦—É.Ï”-p©ÈÀ¥šûf7V úÏžé 1ûµJ¯WkÏÏ/(Ï]}¹í…�ß ü3¶XX˜–ï”c«Œ$~Ç'Ú ›Žì:1Ï‘¦‹D' –`Qæ•u>tôD³)k4WY~§›¨}(Å2Q.æËñl� µ@v.Ô¼¹r,0þÊwß}· wÀ—¥b÷¾½³ßÙ™Ÿ¯½×‡{vçæj½v{MÏ÷¿Ñ³ÿûŠ…IwÏlÕ�-Q¤(“[ö¾óÏj{«ÿ ¼ 0r>®µ\c€7'W؉ë·Lë8YËÉ> ½mÐÔ¼ H®E“ÅnE}”ÉãxY~§›;¯ù$}L�õf9[àB,�€ 1k®Ô�º±moo/,//?�îI µÚ ¡ÕàU½¦Ue¥¶€ã‰Ðá¾ Ì»ŽÌ§·€Äœ’È äĬöO+ÿÏøÞ}ª-’xzÅOí¥÷þµâŸ×þXù_§mœ�OIåÓÿ6›yì¡uæNsnŠº¨�éȤaÁåHË”-páÈÀ…›øÆ7à›š°§Éÿ}…od•ßj\xG2å©j¿~£¥÷ÖWË yà”§Ž‘Æ§øXà xÓ¨Ÿ×ï�Ѧ�êE*Ó9 ¥Í~ØíO¯ý¥M€Ô.ïáOÛ¦ëš)‚±Ê±©”`Fó—飊ÜéÔ£màŒÓu9¤rzóå8óºžÌ³Îl�ìœÙt¹àIð�Lù¸¡i@X[ À;üÿA Àë|GHÓÿÃaùMúHÞùØCã}@ÇÜ´óÓþšŠO³Ÿ¨)"QŒ[†Ç�¨=¦ýÛ íÉ?±þKL(žr4m]ä6]�Ýuºë™TG,óº|äż9ž-p!ÈÀ…˜õæU Øýõ×ÝN§³¤çü‹KßüÝß5¶ÛíÚÎÂBu§Ý®¾ÞÝ}:·¿ÿ¼ÕëÝm óµZc_£Ñ¾€�/ô©Š†‹òm–°€†�§}ÿ?ÆJÉÆØvÆöµà¦í¤ø¨½#¿¯3^2OÍÏ/¶ïÜY_úÝïö´Eð|okk»·±ñ~ï矷ß½Û-t)s™Lv료Îqsçƒc¢/Êézȳ˜.ÓEY ;eÙR¯nêܸ *à¯_�õiÞGpMô¶5ݫϾéÓ=úÝFc]»ú=“s°^?8h3íÏÇ{4-|ã¶íÚììÿûbàã?ÒE$I?ÌÙ[)-i°7/fš¤/æØ]Ê‹@IDATû$qvœ›[jÞºuw¡^o´VV÷_½zµûï÷÷ö†@Ñ„îjÔG™tÇ-—qëœ7šÊ:8�X�)[àB-�€ 5ï�©<ݼìËòkªÿ;ñïêó ü‡#Àê¡ÖìU««‡‡kúpOÐç£=öïÏtJ ölý …ñìÀ¨*~È|›Ýÿˆ`Ôê¸ùìZšMMÌÔp�ºÖ%tKKÝZ§ÓЫ§=¾¨oDS¥óZ-›ÇNXgNZQ¶ÎÜée¼,OžÀ*™.ÌÙ¸0Ó^ÿŠG£ÿñÍL£þ%ùo4uù÷’Sâh¡Y_žÁa«U?`„3h‚`HyôoKœ‚ ðØûã?£¢þ1ˆ"Ϛʀݺ2nݬûqÖú´.¡©·–ôÖIwÐíÊXÔ”úÛÛ[�n÷å¨Þ¢�àe.n¦ìÕÏêýÝn÷©ž£~Ñ<8`Š¿Á³ý‹üxÆ?¬#ÿŸ‘Š(TD®ô»Èî¼î7^ýO\�[üƒÒ•(Ÿ¶kz—s¼È�~•¹Îk›"r䲸õeœÃ,Ó[Wf§Áù)ã¾eù³.[`&ÈÀLÌx=+ à_}ðàA£ßïßÒ»ü_èfùkñ7ó+',9üá· ÜY¨èÌ¿?K—U&?MFSåãÒ‹iŽOâeu;/i863qËäÉ”-03 d`f¦¼¶¥›Õþþ¾&Iõ‰ÞÁà éï0¼Çdxt¨©åjÊ1à…ïôŒßÏ÷ͯ­•.ùÀÒ�¢6á ÅG3LõöÞû7ðË[K=þOâÌÿ�V a�Zæ3ohvFsZ¦v˳äe½>®þ²üY—-0 d`&f¼>•¤á<‡ó�ÿX¯ü—ÿ²PÑzÚzÞ¿ßﯾÝÜäþ'�ÃÃûµÁàvšÞȰ‚?<à¢ðÜð¯Ívr$°·#€3pNŠ¿+r1ОÖy¦m~Ùס)Ç#íþfÎÙ…™—#[ׂÀ¹¦ö¨î>{¶®�‡ý÷ïw67w¶¶vú[[ÅéøI&§o“ÒN£÷èóºí™w®0[ d ŸÉcà÷Mìõëv[7ÄÚÂÂ=�úý¾žý¿ ^ì<Ö3þ%=㯰‰��€lÆË·¨ùP;üoä‰ùbú4rþãòó˜�Ýþõè­Ìôô#S¶À™-�€3›îz àoT5íØ×> Ö•þ\7ï¿ÒÿošÍ¶¿Õ;¡ŠÀ?Ú8í¨n% Ç1cÔ=âéÓ¿Èç}ìÍ£ЕécžÏN>º'Àðz9 ܥÔ±nƒ¿‹ì|v'ÓÕîpv®öï3“Þ�À?ÞXª‡yý}ñjä+ „î$€5(Ò�Hߌ•s0ÜÕH³{^™É�ÜôJúiÔ?ÿ$�fô› Á_Sð¼ú7~ïÆë3"Ø[†Çp~&�´õ|+mtôº´9¦•ébú´²ÍêüÔK`Mäôa,ÿÏ8‡²pã}EÃÈŸîrSáfRm×jó Vø­ðÝðž�A4ÜÝOù”yNÀÒÑgŽ‚™>¡FSþzL#(�# ®àŒ‰éwf¬þñ½ÿä¸�c ´0n*ê,›“)ÊãBŸŸ�L¬nù´@R>,R¬{Rœº œò\sH™>¥nœPÄmÿ¹=sóñ}÷ÝwlÆÓúæ›o4§_miOþúv³YÛ^\¬é³¼µÊÜÏõy¾ÿLùž+ÏSñR⎓éÓZ ý#' �üGÝAŸ ?šHSÿ8ò§iÈ(dÙqÒ?cª±@ëæZ·n-νx±r¸··wøþýþáöö^w·øZàø'Ð1[> ü�¯Œc:ë©Çua^ô™²ff�kéGVŠM”§2¢êr¾²ûÛÝe; %ÇéÎV{½ÞR«ÕZW¸­µLëZ˜ÕîÍÏ×Z Õžžó¶Ûw´YËW*pW¡ãƒÌüêZ€—"X†ɺ"w>ë/ò#'uHD_L³.òPä³Ù¨Þnwµ/ÀúüóçýúÂBçàíÛ�ý_~ÙØþË_ÞöÿøÇž Æ`�Få˜ç$Ù¶r>×ã·61陲fb�kå”"Fòeù¬†‹÷>ËÔmYƒéòksÖŽA8ÎØ ò´¡Ù²¶î}¬gû_Jÿ\‹Ãôª“¾wV«j£–ê!Ÿî­TxpW!;g=+.±Ü‘XíúLJÇp\—\æ¸Ð×lnj„2Ð�ê½Þåß�÷jµ'õÁ€�ü¾í×jkõ§�{èŠntÔ—È•:žùÕµ¿Õ8ð;÷ï~Óâœö7.žÌÄ‹aÜ6í‡> ¶¤-¦œ#$´nµµ`SßÂþ¥>7§¯*�Gù˜#™`ÄËÀݺbÞXî$Ù*ù��?ÝSN{/QùLÙc \)à…F¥+•Ê-�å·àKxùä põ™’g ˆ®,.ˆŠ@?ÉpòãÜêßé¡ÝÛ�Jå�ÖG¿ý±RÙ“:R*™‹:-–:ZŽ:¸p�vî ^ûÕ¯~µ¦éý5aâÚ~µþNÏ÷õl¿Vétªïz½/÷÷¿Ð7|o)4µ‹_Ú»ÿ@®•:pšvsÞ+bÿjéDاWý}Þõ×ïË[èb¾‹ì:m¥½rhW¡É€ÚÿŸ�€ä\dÓ—[·_ ¾HÛé'8×�–î'穇~øž„œ)[àÔ¸RÀ]9º"Öuu|)þ\GsßWH¼b8JÎ|ëˆ+_ºå0ÄÇ9P:E¡ŸþMKwÿ¨ü€?>ÂYÈ›9u”É“tè tñ,ÄñpÈpíÓS½¥iþgâOå<ÓÒ%¨ZoµªU-òëiáßN³ù@í¹¥¯÷5ôà°¢7ÒÞýÈ™>/ øs€¼|x'Í™á ?ãïOÜh�¢Þ'²Ö”Tt¾U´h®¢�ó†ßP_лŸ±žk sXe�ë³Ó8ä¢î,ñ²zÐé§f»‚ø>hRçÙSYàJ9©·ôE®u]I/þJGðWÄUc™« "n=" „å68âÿ*Äoé@÷4ƒðRIz"p&ró.ã'Ét…<£.�ÅuMÃ94Î+~Lp<øÿVáwºñãšÄÔGzôžÿ^£Ñ•ÐÝ šŒúùloút/ ‘é³³€ÏñÄõ2êNïü³ñq~×Ñoë¼³#m~_�°Gý¤Ÿ…N:!ËÒúºÚgê¿- ÿY¿úe’Yuý�ͯ.ŸVömé´åŠù©‡À½„´²ŸFêLÙ'[àR€ÒŠs�Ò*aµRYÓÜá¹>Sö¼‡¶ ýv¥òk=¿ <]ºOZ Å«�<\¾ =® 8AÄJ÷{â_ݪޢ×# V´6 ²©ð~ÄÕŸžÚßPo6ä�Dõ4m*ÆÑ» Q¶Ž²tËÝ'Ï$t»ÝæŠh~~~EÓúËzÆ»¸77WÝÖB?Ýl«ú,ocsw÷×�~ÿ‘¦÷ñªû�4Å/àÏtM,è+Œ·üÉ]<£\vä'¥Ëø¤5�éè¢þȾv#�GÙéæNÃ\ÖEîô¨;«\öSÝ€Ÿ$ây-p©€ÀuN¾¯3ÿ™ø3�íZó7¼:8ƒ5–ÑGD+OÌ„– è¸Jì Ç+DÑD>ûá l Òá°ÙM_åç•¶Í"A>ý…@}ÄÙÞ‹±²ø¶Òþ]º×l€}7¡‰ÊâTerzä¤ç0¬wþ#\Ïö;ív›M|x�ÿ±žïÞeóíNVÕ'Kù`O}·Ù|xxpðPÀr]+ÿYÜg /ò;bÎÏ3b°÷þÿŽëh|¢Á£\v N/K›FOTËð¦©çsÏ“FÿGg|ûg0·Ywwþãò—ö¹›6÷ÿZàR§GãßHþ^án¼Jt%4¾Ë:Û—p8ë¹:b@ùŠ ¼É7¥¢ tfä[Tî Ø{®ƒz} 1ª“w}ç•Ö—þ­I¼R<6£èÔq—‹Ü2õ”‘fïëšåoè IåK9ßé¹î—L¯êÙ~u´â»v Y�A£±Ø krxÅ�çûý<PfÓÏO'ÀO{þG@Gám€}ÏúÀÊNNtÖ9í[7ë¾\™ú&?ÿ÷mˆ[‰Í·þ´ÜõWŽ<ÎweL”;òyZàBžõ—™ã_† |_WÈ×Êð· Oœ‘«Ægvñ£#r8å"þè#G€Q?á.qÈépÚr#þJõ2ò+ç€Y²�*ò¡öƒ¾Ÿ”ßùJ¹ÌÇÆV÷»Tæ×Ø,èL�rFŽ‹ü8¬K ÿXˆC8²Ã$~’™&�˜ècšãðx��Tÿ眮ߡ¦WZ««·^¼ØÕÂËúÁÖÖ»Þë×ï´Eðû½~à~€é‹� 5šŒtëŠyO§ߺÒO¡óBþ"SF™²Ng�™:jÚÛÏ>•üDgj›3‚ èo‹=“|G!9~sÎî(GN€Ì‡±ÿãÕf9‚?:®Ú¤.ô´�#¢E°5éž(ÔU~U�þ¢¼?ÈQø‹­SEMQFç¸yÔ¹Ì�//w++ëÕÅÅÚsü�¦ñîõz�´ýè=íä· E~éù>ÏøùgºÞH'ÌìÓ›:\€žGëdý5}hA³- Õ¹9fÚ{r¾õ}€÷{KK¯ô{°&€[J¼MYæ^�‡G]”IƒbÞbÜ÷ôÈ®™>@þ)‡±ü?[à €3#mMWe|¢3�zÙ׿Åb¦]´d ø9ƒ§u”5gñl'î@&® _è)ã«ÕW�¯¸Q¼ª|HWw¥­Yf-J·õ\JÅß³?€œ„wZÀ 4*rDêVV:•[·æ‹‹ ƒ¹9>Ë{Äîý¯icŸ/u3á­ˆ®œxÌ”é&[@£~žû�ŸùKÖy‘tè!Ÿ·ÃØ0>Édñ䜔ç$=»ü ×Áéj�ÜÒ€ =–Bï>�TÇç–ŽÅ“áG6gŽ]¿»nÊKÊø3p ÁÔè¢ì‰WÛ|å¯ð3ò×[)ÄÓ�˜¸a„0rŠ? qn%˜­,m:¬ízh«xë"=S¶À‰˜©2r+ð�ƒÑ>SÿŒüáò Ã}öFî+Èg¸²�ÏvdénË:âÖÁ©nGÀ€ã±]�û¸ôôO�7–•ÖÕÔÿ=Å÷Ô÷†œ‡]àO6ª3Åæ“NÓû 5ÝӨ酞%~¯‘>oC| ¡¿ ›cj1S¶@ø‰—�µæ%YJU>IcâI:Fú|î—©ÿV·›®f$†3ᱦ g0;Á·™¢ìô"?mþXã:N=¾•ñó¡Ï”-0µÎåü÷ju`ÔØÕ™¸ yí_ ½è,\R<-ò+>ó7ðÑn²À™ÌÙ ùl·œ”%ÿ|ƒG™+„:|…¸>x‘¢n$WuŒ¼@`Ûà¦úÎ(½£á?‡§z;óÚº·ÓÔj~mß;××'y÷5RêµZxueå±=ÔsÓuM÷/ËèÛÍñ›k�x®b…´ÚŸÅ,!ðúçhA v€üèÝÎS6âuQ-OKòi¬éöSÛ¡ õæ~�#À[ 7‘dçªavôVÀrçáÃ;kÿð»ýwïÞ÷77wöÞ¼ÙÖ+‚;%‹¹•aF~ª(§Ÿn¤ŸFVÖñíÐù]õ§[�²ü&–Êt¢ÎåW4 ~ [ ä_êlüB•®éìäÖ5õ[6ð›söÆÏjËE”‡Cœù&dÇ-S6Ê® n²Ž¸Ë[fðçê"MrZ(¨Y º^Ÿ››[Ò‡{n üo˸¥óÔ¥Ô´G»Ò×WÒ4p[7ñÇÞ,hÆvU>S¶ÀðüÔh:�§€½®ž�€_o†T 8 r“ìsÈ£ïF¿_ѧŸå¥$~“¦>Œ*@†Ì‹rJ¼Iÿô¥×—–ni«æ¾‰´÷ß¾}µÿË/¯kúÓëÞÆÆ¾?]äþ`sò“9îÛMŒGÙéæ¶°ãæ.CÜžˆÃ3e Le�3;x™ÿçp�ßSµôk�‘ߊ³ÁÏm�…·T1‹çŽ,ú3èGÎëÀY�쳻ȕ”}‘Š7(_uE^V':®Ø2¢<€¯*ú§7x-°¦åÿDëþEÿ}…§Zàÿô°ÓijZ ¢÷…+ZáÏͼ«÷Š^çZÑ(ŠYƒLÙG,ÀjÎ5¿ÿÏ«ÿ@çN€ò�wƒ” ñ_†ª4{zCM³8ÓmBæÃØð?:4ey†9oÎÙ ªÇyóZÏsK3­ÆÂÂJ}qq^‹xký÷ï÷t3xÛïõ¸/Øtü<Å8ºIÁyͧÍG~nS)?Ž¡Ö(äŸLÉ4Ùgv¨RgšÞôK;æýNòÿ*™Õí-�‰Œ]’@~ÎTdx1ølGoYâ™8Dzñ ÷UGºåÈ ä¤›¨Ší 5Gë@çþêËÃz¢Úœ­¶$à ð•·z‡¿�VJË z¿Ÿ�øÔ™8øÛ'rõ™g $ pŽþ)0ÒMý§-åØ1ü=ê—0´7û½½4õÏL@ÒŸáÞ¯dÓ$Ùé7Š3ò‘ Ç íZ§³RY\”çÕ¬ z½ýƒW¯6ô»qkó­Î=FÝqúb>ý¨l1�oKÖS†ó$? H–Èÿ&Y`j€“I[ûÍ ØyMm^h¿ m°žk|òTgü��wÄ[œý~¸uœ©Qö™ ÷Ùet�Ó†±aÜrñå8¼(ãºÌ]�y,c‡�1Ÿ Ö»ÿÕ�Fcn«Ù\yßéÜÓë}ûóó�ô¬ÿžFë©­éÓ½m¦pÓ¶½£i[‡ÛÈ<[ÀHç+`�ÃGçL⼡«\¦l�- …¢nB%é�À?]ÊÏ¢À“(åå³yrpFyš:Ÿig쀜ÔÀMJ?úV?·̉ãQç´ãx±ž²¼ä±™%'`(æÿÙ[¬žŠ´¹?»â±ˆí™Î´oTèk�ãqžû¯¨¢ôp;‚¿�€È93'9ñ ¶ ‡ƆÿÑ¥VP·Î²y~ç E“ˆÞàï~âhÁ#à_y%�z§Õ꾟Ÿ¿·Óí¶õ~ÿZ¯Z]ÑhmUÓ´‹ûÚ:”‘‘醜)[àTˆ`o¹¬Ò ·8ãx µ‡éeÿ ixÊ$™ô‘<Ð[Zì–®??¤Y€²:o²nþØ.-–)|»2ç¶Çâx‘Ÿ”^Ì_§§ÏN€Œ�©ÜS#ÔºN.-~[S5Ïtv}/þ·ƶÎ.¾êLJ}ŽÌŸ™ÇqŸµpòÁ¡¨j†ÿÑosÄœNÜàïüæÃš>Ôã²€?DžÀx-•>Ô³¨Ïó¶w‡[øîëÕ¬¦^Ýj鿨dA7áô*|tƒ¦®LÙ¥à™J |¬ôÈðŸ8ú/? Ÿ(rd~rÖˆs=ò‚Ûù¸7^£‹=íÈ-saÜ¢L¼bÞbÚYãÔ qÛË”-0ÑS;¬|Wf=òO ÿîêÌ|Hz”LEô9O8ÓÉ?éŒWRJ‹¼(ûŠƒ;�¢ntvÌIƒHƒÐó®õžnv{âïÅ~¦ÿù âÕƒ……V¯Óié}ø¥�µpcä™ \“Ê™)[à�?ãÅ:—ÆkÊœªŽç™ääxNjÒ Oz™Œnþ©^ÉœÇìýÏšm~_©kQ+{èuÖI­ÜL½>¤/yÎ5VW—–¿þúÖþë×ïvvöÞ¿ßíomí•ì àÛ�oS¾íù6å¸ù$½ÓÍÉGðø…úõ3æu7óÄ<ù¨§v¨ŠÝü8ÓLÄõÌûðÛ!ð™XÆ©ÃúxæZv:²ÞrRŽôn§9N_]p»Â´kð7'=ÄÈ}Gïïo(¼Õê뷺齑žÀ·?h´CÞïç]‡LÙçµ@às>É©LAç_r.líü×ñpý4Ô§¦úÖP€k—«JK�µ4ËuÞ#¾Våµø¯£}­ic ž7´ÐëÞ«Wowøáíοþk_¯òÑ·1Œç[“upë£u1/ö‹q—‰·4·á[e2e ±ÀÔÀ#ãÉûñ@ á8à÷ÙiN>{'ÉNWÖq^t&ËæœíqŸùI1úç~û )r²Q޼žñW^ äRx) çsZøXÑ{þ)Øp””)[àôˆÀOÀ` `K:a@>UW—ŽÖj»­>h[«š’Y˜€£?„^ù�Óžkú GC€u{++?í/,4µ~â`ï/Ù’€9'ßš¸ýLÊCƒÅ4ßòHƒHw]ÄÓíl¤Óò$žPl²eºÉ˜ÚÀHÌÿs–™pT‚àÀYX >;}“å·Þ\YÇy-›û* /ãÈvƒi§þä¡g¢< £ðÍ©³LŽºbžYôãfÔá·|kL?¹�[ ºt«ÅãíÇò4yœ÷$N]é¶È})? �52% œÊ |æú̆Ÿtž”NÝÅô‚Nå�™3 ‚{™³³Œ£›6(ë8¯ë‹uZvš¯Îj€Ùg·ãä7eò + žàxq ×9ŒýŸÚå�iÝœ‘™õc1!fÁãΔ--À9’Î'�vҹù2íù2m>7�ãN·Îz¸CÌ“åé,ptOnñvUvÛ9«ŽþP–Sjš:ÈOÞLÙi@?•´ž¶»ûp¦Qˆ3Ú�3yÚ3�|Päee]‘ÛùH7RÕƒàÀT=Ïr·uÎGï@YÚ³#@:uº±dêNeuijz=Þ<‘#�öæËfùzX@ç@zî÷‚?΋I�£&-òaììÿ‹çå¨&6â]_3goàÆ–Ô«õfcn®Ýºukþpÿ@K÷+»»=})p0a_ÌMà6ãÛJ”�^Ìõ.uÔã…›‘R3ÝX L=p_&ò¼ñ�!žUE¹Ì¢1éÄ¡ã8í9ÐÙ�̵WëÃ9ÓÑAnù™Ö'2y¤iãôÑÒ¬“8vÈC€Ì�Ï|âNlÃbùÿM·@èxÕ�v,üC6È_¤�"ð#�â<¶øÓâ?É,ä•¿ô8ë"ûsÍêÖ¾íF·»Ú¾ÿÁêßþmeïÕ«×z#`sïçŸ7wþüçÍþæ&·ƒ»o)Ü¢¬›$Çtòó‡œætn¡miR2¿ �¬‘ÿ�<ÀÉ‚�þ/�8|ë—ˆ�/že)EE½ãÃÔáç?Ž“ÆèöžÉÇ�Бùb NÑÇ«ËýFO>enƒ7{þ[ïòîG¼Š”mlò¹¼�‡ôDÜ\/ã¦îö2¿ú¨&ð÷Š;e3>ŸCæÖŸ†�?”M£~ÅÓŽj£©>â$§àÌÿÿ +3Ý\²É*VåUyàû>êþ:4 æ@‰ÃUÄBOS3W775?Ãu\¿Ûޤë¯!ò-‚\8SÏÅ#�¤ì³x|`ŽëHöØ ó"ÀW¼°@Pßö�¬<šÌ»=lF#p%$T>û÷‡X”ɶä¯8»�Àgÿé €8ÞÔ—MŠøqˬ»vâ—ûhÞ‹€{q(б¾]†.ø;Üu’ï]#ÞàÑŸåæÙM¡Ý™:vŒv.œáCûóbÛ-%çý““µ×Ÿ?¯ñ·¾Û§§kGš¨�5IƒO˜¬[ ~Ü.bdQä'.«òvÀ¤ßPñï|›÷Än~Äw�¼OÜhMºí§XD*±vÿÝ%~·aìNÝçg¦ ŸŒ[îùGòר÷Wÿ��pƒ4oh²ˆ×™.<í0ÔoÉÇ’äÙÆºEØ>3îêpkwü€"üÄaÈ �gü×µFlðüÜt#V�™Îí"c„“øIµÐÙŽ#Ìgü$®PÚ´|åÈÛRÂ~v|¼vþåK<É¿§ÅÀ¯ú"à'}˜‰{šr@›€û⇪¸‚`ˆ#]õÁq†§‰xf`¹+ŒøV#ûA-ÓX¦Ë[×™”˜gì;ƒ„|ðš( €Hü>ó‡Ï�ÚÊâ¥h'|c*C…³|®pQ¼àjÀø ÀRÑî5î¾ pùz §)v:Cɼq–×è,s�>Œm9=²Ð0È£·û£â‘F`ð ½oõMÂÐ7ªéŒuŒpŸýC#õ¾%à 䨸(â¤L”´÷µØÞ~þõëÚÖ«W‘¬¹ À_Û·È·g!l�+ý!HÃê—„�M$~ÑLÂÝ" åcq5ÆŸÛŠûð>7ÝaöE Ýþ±@:×·hiŒ ?'Ú¥d0oœu+¦I\àÞ?‹hd#¬,q%o5O=ð7-t²ôACÖÓ”1¶±ÇE‘xš0x@x4ŠbÐ|‹PÑðÌÈm;a9#¼¶@î+<ôÇb@žëZÆÇ{&:ëç6©ûDj1Y“ü¹ P_@>Ú�Åâš$M‘Ÿ°eR…g(ù¬é•F Û'òû¤ÅÝ>i÷EÇ·­—|ˆí·v1غÐ@ÑHqa@ÁG.�±ˆEþ³í<ºì¶È(jƒñ;s@}¯Ì èR:ðWn0Ô »‚a‰®�.u5?–áƒé œë‰í†?ôO,C„d�+AëJ¦ñ-„ŒÐ¡Åöà ågšQë3xF.:˸”Or÷=˜¿,öÓýØaO|4dÿÈú -®[ÚÏó…­Û¦ ž �°0Èõ‚/&ÿ™DS&€’ïÛ€' ÏñÍ›[Ê;žøËÐ…:Žui3“xÛz¹�ýŒ¢`Höì3n#ñà¼Ä�ímÉ':žW‘˜„Ͻÿxÿ_˜+·Ô“èÆ“øñ3—KHËÂtãa FoYik^&WüXׇ󴯉];(p7ÂSŠÀ�@ $%Õ �’ =Z26½(xØåâÑWbl�$u½õ9ùsIß6ÆÈ(~ÐOäÀW¸÷1-¹ží² ŸÔC–õö:’¿&U/œüÁ$'#' êt ýó#àx]ÁmìßÐïäκˆ=r×I6A.»XPHø`¼H�ð™‹e¡\ñ�?n¡ÛãV}ð" ð²Ûºâ®>wÍÙ„XÛTbCÑró5™mæá¶š�ý‡N‹¼ñ�À±'D^(sö—Ù…â[ŒNŠÁüäæm”ñ<vN´$y'|0gÿå€ì÷®h'ÿ¶=FVŒwmWÜÿWmç]õ÷�·£ñEˆËBÈz–—¼wK¶±m ¥,�a�d±‹Å#·O‘#<Å ^¼× ÒhñC,Ýèñ(Êx^ m‡ 4#u&Á£'™sVÏèå^?ÚÉß €ÌCçöh 0n¸ËßZ_hyYǼû~éå’ªù³}ô«MÐ|wg�ÆJ!3aa"¶²šÁJb‘üIfNh%¶ç>y©7߇ñÃ>öÀ‰ÌBÀW°+KŸÏUÉÛ±îDç[qù_ý!ù�°¢ø6@ƒ l­0Ý0l­3ŸeÖ]{Ê´_¦Èžp†,OÜÿ×h0ú ]òd‹,ó}4ŽÐó°ÛÌ~�y4ç>d:Û›ŽÆæü°]Ø‚�ÚQ†Àv‹øÆº±Ï¶¦}Dv·T!h)9ø ÖØ~»¤fÁ#œ¼+6Ñô Ö6ÃgqêâGEÇÒtÆÐ€cgÜH/ûä——¶,($ü\Ð-ãëÒëU*'tk-˺廱­>Ä+ê£ú“¿ƒxs¼>™lë��v~øá7/þë=ÚùíoŸM?þzöþý}"ø«¾è錡Ën馃–ïvU¡·]©ŸÇ»mešs­žX†,<˜âr;gáTB˜/¿3‚Q.yD[Vb™‡=¾Ð[¶0€�e¶·ÌþÑ›®aüÌü 3ŸåÐøl3„·mSóòyôWtÙo&mYØ€U¢-c»ÿØáJlcâØÆa#kå&X–9pæ�-Ïxž®´óÀ‹0õ‡øb“Ûë£Û¤o5£„Ù?>ö#ÝD “‰ÚŠ€�F¼’°ØØßµýý÷S}pœ¾{÷V ô– Ô€;– kïÓð¹ä„mÚzóÆ–gl�!óúØisWW'èFx"¼PR]Wòç €x€QE¢ÍɶÆcçQæQgŒÎ´È&¡Aò(įmÁ”,+}ä>Y—ý©zøêê¸=ãÒÖõí¿�§žýÕ| ³>h~+sò�+’Í$ÿœH 9~W•4ÊŽÞÞ1Éû˜nå³|'}â�éè¾ccŒ0Ó%_êÂIû3O—ý” €Ú¥ÿìw´çqcû„o ã(n§ óç?3Oþ/Ú6ûñÂ(éoëÿ^’ü¹098x~¼»»u~vvzôã�Ÿä€——<ÅôaO£èû辺¹u%hO¥Ø4s˸ O†,"¤Îø¹0Z9¹Ô&gË2¦¾yÓøCdº‘4º¡­¾fWú4_b×µï>L{.}6–»oyЙ‡¶ t Ðcoìã0ú¯I;pkI‹IšäbÄ#Ÿ¸s {l¯“¿1â.>¦kPÆlßÔêÿ¥¾}€½pâ7ßî»pdûìµ&Ëúei/„cŒÎø™üáŸñÉÿeƒ:À~ccGÿ ¸µ¾³s°þìÙùÆîîóµóóÓÓÏŸ?éoƒÿ&ìïO¥Ìrv[�Îõ³�ýXï³öãŠaÐúD‡ïžH†,<€Hþñ �¾˜8¨Ú­�,l¡íļãë‘j{ä™v[Ô7 ®�å`Óø2o\«‹Œ6øãŸ©&ê©Ò¢ê•­�úСþ± 96%¸-äÖ[f>×AW“»~®kÚõ©‡Ì…‡˃Ñ�滄„a‘\úúÓÕ¿âJŸÛ~6[Øtš}övt‰ŸmriëÎlgÞæ>ºiæJ|BœëØ®†Ý<4‰?'ë©;Äç›Ü�”èC _“IỈ繾Xér&zC…1ÁUÀ8˜ñg©(v|PaC‘œÄbP¬ ÜÑßO$'dO…öÄ3Ì-ëÃeÝ>»Eòh‹}­q‡—ÚáG`È Û|Þ¯gTP‰‘䀞iŽE£�BÒuÁΣ<>rAîz`À¶ØØ».¼åÐè ¦³h÷Ç~molßgš´¿*ÙÙÛ[û¼»»öIÿðA €OâOxz{ ¸îO®æ¶�ÙÎzìK™í¼Ma«ã»ð%š$‰P2pÄaØð‘˜Ì)·¬¾³ÿb[Ùñ±Íy»JºµÍl;vJ]Mæ:5�çLt$'}c/\×xžOë†b÷Áö™‡nK$~ÑDÁWöNõÏ—§úó«©úÉø‰«¢Á#ÜBúßð”Iàsé“g›>š Ⱥ’·Î‡úy/ø>ïÞ3J˜0‰TvòGækJ1I‹cç¤K]èlcŒ4ÀhôÈ Aûcy9Zá]0¥=Še¥=6Î4Ùq¶ÿ^IÿÝ‹kž?�Wø,ð²@ß ¹íRžyÛ£s]ÓÁkw…É^Û7¹e »ÇÐlEÚ.õ5¶©í·é.ù³-è¼]}ØvCgp]ËJÞò¶-Øgý`Æ y¶Y䣦*kÇB˜C» hi✯ 9ùóØ$}þнëàÇ“ÂÇj~üa fÀtÇîàÀÌ4ü*ŠÜ„Zæû|g;lGx¤X*£yÀeä�üy|•çXxaà…vNþ™ftå‚�G½È×£{ÓÆy”šÎÚ”¬·°åq@ÉžÄÿ“þè——/×�ñïmà›@n'ûq?²¬F»¾16ž”ãŒÞÛdC’ÌWºd»{нßkº}':þD§Ý¾è>4°g›’†7Ø�ùÏÓ“\'”œü¡‘Q7×/ù²­›ðô¥„Væ+Æ, NÕ?’? D5ÎþÛ:í¥áÒãÈ/�vÀFEh&všùŒK�ùç:Ð@)›Ç75Æß'�Á �˜ %ø¯Jøï5•ýEüÿѤ¼Û–=-v%�wI¼È£Œ @V#8ë±Aä£ÁteZël]Ç6øÍeª‰íL“ñ¹ 8’‰lܯ#’¿Îþù àϺìÿE·2Øn‘,ëÝdµúÈmÓ§Ç&vÔ1Fç™9{`h”‚°Õ½ÝjjLúsÒê·ZJã~¹’ù®ßj3ŸíwgüôÅ…Êî[v¥>×µM‰]§”›·¾M’]¿-¨çºøê£ÝÎu±ûδü9Þ¸æJÀ©Æ €“¶/yQ‰-ã‡~‚Y Œp½(v›[[{›/_¾|öÏÿü½¼\œ~ýztþùóÑ鯿µßˆ0K—kËV‰ñ_k#�ëmèXëÞG`ð@臭)ÉÔÈû“¶jW#fªòƒè”𣲭ÅÁ&#Ó#*�Ró€:$j×7 ïÉÇ4~  y¤B›ㇶ��•ô•Ô�TÀ§íe}ûã>?gÿ$ÿë\òWSׂ¼mÙ�åî_ÖÕhÛ;y!@È 5ê3‘·‰!¬�Þáßí/µÙõ»mßý�‰¬,ô·µíp– ¥±Ë`ŸY–éRŸùœüynž‚M¶3o™qng´?¾L#R‰ãC²-"ñk1ÀÀ[*<ÈbÙ¯ Æg‚o«¯ôñ‘ƒn©lmîï¿Øùî»ßê Œë[¯_??y÷îÃÉO?½?üãß§ïøpà°Î…é]–™ž§³�±muîvyèµ´Ð�=ƒ¿jŽÐsöµPB�jļÓü••-¾gT1¢M$]�²Œ%žIÞðê9ù»®G;zdðÌg �/'úÄ€‡û>D9Öý~Ÿ@Ü�žy à.!oWIÓ¶Çý¬õËuŒ«É_“|—TñÙNä`û â&ùrÁ»Ælkô‰þä‚Â},qÖA¶)é�¬„\¿O‡M^øþ?ö®6]ú¹ ¾Hþô…¸Ÿ16´ áó@ —-7<´æìßÇê]t÷±µÁ`}w÷¥f—u½¸¿ùâÅÁæÁÁ_ôQ¦‹é‡_×þú×/ÚfDz8a³»Ð™/íélïúøó"€é’}<þA�xä°L†;§+‡JþªôN£å�¯g“¿þìúrÀhò(3v,áûÀ¶`�NË<êÁ5°lº¶ø¤ÿV €_Þ¼‰§ýñå>‘hXœj¢ã¬ç®�~¸ï™¦î#46™·­eŽAøbb§Žq;áÏ$ÕpÚ,—lâl|Ë�ûJŸâ5?úHÛe¡/–™Î¸¤¯ÃS'í̓²?^0~|ÀIl{c|/jc^ûCt´ë>dû¶]Ž“ %|¶ôTvÜû�3Éâõ@m ãýÆ78.r—:½¾±±½¹½ý‚ÏéJÀwñ‘ åÛóÃÃC-ÞjûsYòthšC§´ÊÛÀ4’ã"€8kv–õù±ÜØö£+õ´/Yì t$}Õéö':å=ä£×õ� ÿÀ6crø†E@ÏèóÀL‘<7\ð…@} h7¾ Є>B+Óiìadæ­_„çÙg4Åm´S„ævþ�2Ë,®€ÄÊháMF—Ø)A";@´>h�êŒ]l_®kLåLcg8ÔeÊ/º|ÿY…ø5añý_þÿ* Àõís•nù‡¾¸µ¦¬Ï}6=ÏŸ&m’,ARH¼Lè!ƒ®  ®­Tèy»ÜÚŒEHÛúEý 0Jœe%}ž:%¸ÍRO?]S\ö‡¯Õ±Ì¸ô×'/íñì«\úìÝž1vô]uÙ'Ü`AÀ­�n¿HFNàx J{,õ53ÊçG@Q&Ó2À]ü>DJ™ùU`Ú¼æƒÇ¯ÛGG?Fx„¸Ñ€o028Ë&•Æ’±¥qì‘äQ*Ñ xt[ïQçˆÎõÁ‹€À=ÀÇ%þ·z˜ïP  ¯1é’,ÿñ®?W <²ñ�i±½<º!}Áî&P¶áþÙ§õÈM£+ytWê2á«DòWŒxÍ›8óNöNú$„8Ó#!r{!ømȶÃô!•èSÛ·H8ø5oº†³  ^†eù\·FÛ˜H!ùS Ó™>`Gür½šßëÈÚýþkõ­Ïº9ý`ÿxÀ­xo p[`KÛy¡Â¸àøáÆð" Oƒ bóìx—,GgÞúe0u)Ô±Ÿ˜ÒµÇç”Ç7Zð?£`äð}€í–.G ÄäI%�^�Â<Ú©ä6Œ;G"ìëHÒ]ÖÿIñùËë×k_ÅseB·(šïhR>C¦ :^”nKdçËíØ·ùš ²Û·ïþ¸=ËáËíÈ:ÛƒCNÒo ¯ER7Š&ôð£‰>`*‘DHæ‘- ]ª×Ñ´×–ðO.ø/iËÀú 7峯]ú'ÑS4®ºÂ ´Ã—eÆÙM–õסٺ]"ã@IDATgÀ¸áš_Ú¬µ+µx€1†‹&ùÇxÁŸì¸0ÂÊ"À`Î…à²+j²Ržm2]ó‘õ™ÆÖö"cú�ð#0dÀ ó@w ËêS�œCMu¿jļSâßÓ3õÉ·ÀÒ1�fÀÎÀ,2†f$çQ 7Üì/õâ)½Ëÿ^WþÆÑ,âl¦5·ûŸõÒpèðؾäѹ¯ÐÛ™/±ýY^ò–—þjö¶±.÷˺˜èÛ‰ý‚„OòŽÉ\tÜW£¶�û¾:ÓÃ'²¼3ómÁܦû\Ã�ßÖŸ“¾±û7ƒqäՇݘõ×ås[ö±Ó&…„Oá¡?0I1'Ʋo‹ü^Gïv©ùéëK!÷>û‹�ø žq!û¸  í�´¼ÇºF€ÿ àÕÀÝݽí7ožïýã?œ�诂Oâ•Àé”é‹€rrQàs±n‘,ëk4~ì+·=Â#‹À�€79húû¤òEÏÄk Xû^gÚ¯u©ý�ž|£Ä»áädDƒŒfóŒ4xÐŒH�À<:%]ÆÐðÉ™~¾äÏeü»ˆìÚÉþ¡©Î`¹e™·-õó w·¿n;÷šä €y@’Kýþªa\‹�¾ ½&}Î÷0I KòW ¢•Yºu(ú#.¾1íöjº_}8Û@¶m¸Å|­ŽëÎÃnLQ¬fŠå}>\¿O¿jyÙžycöm�nûÁþëž Ÿ Ö�<È(ãJ ‚XØO[wDýPü&z-ðÅÖ›7¿yö¯ÿz¶ùêÕþéû÷O~ùåãÑŸÿüëÑ_ÿÊ”Fˆû S&»Çú’·ľ÷þ癀‰¶<ûw°‡a›ú«àµ/~« ÜÞ|þüàäíÛµ(Ø<ýòåDßàq+Œ²0…±[(ÖYf¾†eÞÙS°õ9¼ËµKÇçš�<®ße Àî‚€í¹î÷Ôˆù�½µµÏrÈz¡Dü÷$\€ŠyDyÄ�‘{Ä‚sqÂvá2 °Üþ–WX¸Ãè©O;€qÃÍþÚéPÚÜ'÷Ñò;Çš I°\îçÙ¾|ÈŽâ¡?ëÔ©HÂLøOþLö­ÜÉ?¬$ë­žm ™}'�Ý~ˆþ´mG²=ƒ©�lÎ6M�˺CyÛ»mó‹°ûOò÷À>ŒùX¥¾ÝW\.ê õ°1.°ÿ¹ÇeqÉ�Ç Wˆ Ë W#›# ÀÆöö�nlëuÀ—“ýý×úT°Þc>=9ùñÇ2å``ªâp‚.yëÐgÛf,“ÎG–gŸö¦ÄT>.Ýã‚! ¶˜Aóim�ïð6 ¯Øx®; -¯tæÿ[M…¿Ê˜+‘äÛ†6$sÎßÔ¨âJAŒ=âÀåè„7dÚ2:Ç-‡¼`��zØQp­-ëjí ìË6öid™· Ü¥}É×ê¹íNÇäKÑd æ>?%€Ô€+3àI ¨N—,ó$ßÚÆäN"hj&–m÷ œ?t´Qb*#[7Ö—õÌg–Ùwo¹qio¹±ûï+ÆÖƒùȶ5Úñ¯é�-Ò»Þ¼~´ûtfŸg{é»}‰­ _ ô¾ç ´Ÿ ¿ƒ¾+±Ntæ¯Ï,nq+uM‹�ççÓé'] x»ñìŸ*%´¹p˜±;"ä‰î³ÉòE´aü—S£ÛñJ€âòh`è€ f@”…ÁÔ�î·ÖhýQ©åÿ•p]ÉxŸ{ðz,j]·°Ý“ƒ—Jö/•¤_¨ñø† ^0ê\ÊÑ*U82¦CHþ,&ÜѬ³­u,hû²�+#¿µš øq;Ð@É7ÒÛýuÒ�ûüJö\öçì?ÎüIR%äÉ]™²=¶è|µ ÌÄOYWB0xû{“>þÜþPlçÆ®×Ç#/ml»,Æ�=t~ðÏm/ë{Y{b7\ó[ëC)s=äÐ%ÆS®c{‰i™+ë|#Ì¿*.< ÀǸâíÕUÎhޝì¿#ôG ý&€Ž%혘¦wIÃ× xŸ}ÖÕêΓÉm7�A�ðÀ#0dÀ@ò`êÛܰÑ-�/,d´®dþEeG£�Þ3ÿu¥„7Òÿ�ý½Jüƒ  ô-j£Ñ�@GÃX�Ø/ÓO£ÍvÐNúYî¶|„€-s[7žë¿¶C ”m5ÒÛùå^{Üïo/ùCû9€.ç¦=±³· ‡NÖ²‹³=ê¨tÉŸ ŸÚp»ÆÑFnÇ48Óöa|�Î2×1ž§³ÍP̶qÅE1ž¹ô¿Ê¶j}"Öó`Qûèí£F[fì¶àÄ1¤…Þ©ä<É_‹�x8P˜±€,þZ˜˜�°\f? Dð ";º¯ôÙôÉóNíói¹šåЋc~Á ÓñçžG€Ü»ØÑÞÙ™v=d1ˆt?೘¿*É‘ãŸtö¿¥olˆßà*À�’¿nœ‰ßÿ�“¬)Ðæ©,Ày¦% ˆ[Ú�ƒÍ Ë�Ñ›gè ^Œ`ãvÝÛÔ06öëv,Ã>·—õ5_7•q韄÷üu†¯úéÀõCx]͉€Fá=ÑgºÖ!ì’ I ÞQ»Au®$~ê»­Œ3�óö—yÓÆ¶Éxž.Û ¥ñGò'ñS¸&É¡s{ŽíP¿óì†ú¢mïc˲ÿ,«Ñ–•È$øXlk¿ƒãÁŠgþqö¯q,j4µŒ0 2˜iˆ)ƒâPfy–eÚõ²l^½Ò¿m]_ÍwS(ô<äÜEà�‡4`™LÈô¨ê> Ï3�Ë7ÿ-~¯ÛZ|§U¦š8xU�ÛQ\Á•òD—�;dy^ +õ™‡6oŒÏ æÑC»d›>[׿ÖFÖÛ�íÌ/‹I´_8m3~œPÚÉ<’™7�¼L&è,CŸ ’¿ë[Ÿ“¤u×h×µ®�G^ÚØÖø¦zü° ’¾¾3Ñ] ð¶•m9Ö–/‹—­Ï6öì›®iëk¾sýlçØµ2”Xô Çeþ'@qˆ@ÛWö§ëØHèØ Ð"žÿ ˜èû“³³3­ÞµÀ>;czàâ Ó¡§¦š!¥VGUgêÎói[lFx²`3½ÃÁ}…dý ¯òu›à5úG)¶5Šß©Òs�Êáá]�KÅ•cF,ŽÁ»cðÐòßà)u5ÐNd\ʲ¯l›eø�w[Ak²3Æa©GÖöc}æ¡oNü`?å�?ø…`&t`�;Û`ïzÐ}�íM—˜º–e?¥,ó™ÎuJz‘ÝP=‰Þ—ÿÁðeòÏmãwH|r�L©_Ú åmÜÏ,÷¾6¶�ë´˜c…/Æë�Ó©\5cÉRm„Åм´±¡×õQ ß<ÿ×=Ñ`ûì×_?鯂?�üíoŸ�þò…��æÂôHÀ)ÈÌ[߇kvªÞùµ/ÎɸÐc?ÍÎÅr„�! €¼£=À,ËüBZ·Ž4rßjÄmk$ñ·ÂïUéwmÙ–|W·Ö(:¯ê>'Ìuñè“(F"�Æ^0R‘YŽM†øx W;yá×�i×7ŽwÜ5±uïºC«¢ >°Í>�•`}¶íÚ(�ð‘ü•„â?¸-ƒ’öïI½�¼Ÿjbp=lS,-î°}Ú&ó•|–•tæ]Ù"è³í“Û_ÖC»�ð)^Xîz%Î~ÛÒfOýEõJ›E¼ÛËv5Ú²Œ]LÔ7g:K�ê*@\ÕF|`aßñ3BÎüõ&ÀÖ‹?hžÚÐk�Ï”üÿvò׿þ|®Kkù o_1…P˜™:<•d™mŒeÖÕ³¬†í ß’¿Û�ðH"°Ì Ó„ÁtÆO–]°Ð½�_ôlÀ‰ü�ª÷2<‘ùþ �ÙUÑ÷¢p9ߣÏX¢™L€bàÛÖY欟I<Îþ5q�"GàúÆÈ¡yÂ=J;!#§‹Àõ³]–AnÚ2è¹ mò™~Øoé€!N€“NæM[ŸyÓ®Nôƒ¼,èl_â\ÏtÍ>ëúhû¶¾ä-Ï8Û˜Sròg`¹í²Ÿ�íÊ8Õì-£Þ"ûÒfŸu‹hë3v¿Z̸=Õ±Aòg!À±Å‡�¶�¶#ÛÅ-º�•€ç“gÏ^oîím+®g[ïßsö¯�…i'¦¤2Û÷ášÛZgì‹¢jr„‡�el+ƒ�öÀ3m,U§Ÿ‘黇*¼šÏÇ-6õ,À{½øÊ]Ô×]Ïe^„Å€3x £Žå§‹G¥ñL²ãµC×Ï:‰;è’Ï 3�ƒéh[“\øi'dî—ëÔ06øÊ»ì°]Ãõÿb×�ýkÒ�[Ú¾k/Ü>àÄÓÇcc´YY²ÚõúpŸ½åó°}Ú¦ä-7.õæÁ.åÀu¯ƒñ騩?ľ´™Ç£èCi×h.åÖgœløfêKH¢§°ðåè.b3Ä ›jclo9Û.¢ûô©ß¾ ­ŒïBp€“F’ÿd™íN>Ÿ8©©eæË€žv±‹i7—2óC±}a�14ÐM… ;þ>¤,\xcXhyF2°fýnÐeyI㢔E]*ï¤ÿUù«0ýÙÐôÊ`‹¢2¬ù åÌü –|ýÍÆÆÉ³óó��ÓÓW[ÇÇç'LT$=i_,c_àW… 3t´&7ŽŽxPìb¹yá`�¯Œmg¹ùŒIöNþ�éý¼M`"Ï Ús›™¦5ÞòŒ¡�ì§‘,þu�>ËEúZ=êääïÅÀu|•þñ±L2b_Ú,Ãc Ч²^£¹”g[tæ[;\à»§º À1É_ ¨m®È�0<Mâg¿°ƒj…‰�éÁS„m,‡7]bÛÖ0¶~¡íÀ•òƒù?œ ^¤Mʉ߃!ï|è\lŸeЖk °v®N!¹ý¿!š�F¹’ü+rÛ>:=ý¼uzúvs:}®Éfûlkë@—"wÕ` V|^ŠI®ê¨�<ãÉ žä'ù¹è#É4Á±Œª�£7ØÎgú±à€¤Ø¼èø,·«äkõ-3ÎíQ¿,Ö—¾-ϸfS“QÇrãE~–Õ;ásæOâÒ‚²¹ÕF¿Önn£¤Ëx-ª?ľf“e´qÞõÜGû°œm+uíö2þXD»²áÍÊy[Ê[h$’ú#À9˜´eaÞ#Ô”¬+åæ³ÍuhüPÜNn³S�ä#<�,»ð@³ó=<¸<³�m459¡BçÁdÞõÌ—zäWàäääëñññ;M&M4ÓéÎΛéÅÅk-^Ë!Û{³À•+Mdt>6˜ä¡I0xa’GcÃÙbì]�u>Z92Cønhû(mûLÌ�÷P¯î§ís8Ì4xYr«è ¦KŒÞ²’vÝŒmkœu«¢ñMò'ñ³ðÕ€Ûls}§åþY†w²ŸL£ÏÔ=-!ÅWÛïÏ«N».Ø-ê‡õÆ}¾³>Ó}öוãÛ Ÿ@>û¿Ív¯Ûß²}ôþB· ŸmktMæ6„ï/c;Îþ…¹*à«Ü Oã B5ïG�êºV<[gÞÓ‰å7Åøµo|�ð@#°ì 9¢ulk{9®)е"qUžmsbg ežúCeØèìÿ«'_¿~ýU¯MÖõ­îų�|n¸}R­5¾mÔNnlp€&¾ …™¹wÎFÏdÈähu°‡ÏoŸÖÁwE~Lçz7¦é³:ól+Ðnó n4�Î6C°ëÍÃnwžÍMu´‘¯ÜÔß]×§ÿå¾Ê;¾Ø—~¼–gÛVã�º*Œmßoª°¸bÜÇâØõíwij˜=ûç€Ë%'dÓ„?Û”4þ‡È² ¾™§Ë6ð5‹À² o 3\(Ð@ Ø-*®•õ“}Y6ë¹£3¾˜É³ëgg_ôÄñ±&™S9t¿‡ø¹¾M9‘1IŽ„ïtÿš']$á¸"€ž:ª v QËC_Úr±’vÝËÀ©?U}i�&n·‘ýf}4>†Bö‘ëXn\Óe™éš½uÆØ¸ #ñS¸ @âþúð"9¦ø(íKý|äz×å]¯×ú‚LmÇ$!Lòçá@?c;b ¡}Oy²;yþüÅîßýݯþû?<ûüùèôóçÃÓ�§ïÞªRL)žw kY¬›gk›².<:v£mð¯ 8zBÜ—|$áaD`©;¸¸TÇ´6Õ˜­æ;£,Ø Û2öÙon7T†)ºûšüèL,<1·˜ã(޾–7˜:i ‡øØ0ì©ÛÌ:9 “v†Öÿy¶1í ¿m£[d=6.Ès{¦aû[5v»CübK²wòÏ—ý‡Ô¿¯6l—÷9}\–²]¥O×A.ðU/�1§p ŽÐhsggëåËï/þáÎ7vww¦ïß¿?ùùçwúc wÓ��õ.ó%A®•<ZoY‰­ïö§³L/æõÝ1ª0Äò ÑøsO#°Ô€m`ç¶;Ú;ßÉß Û½ :Ëæaû¢É!�}ÑÎ%è‹Ušað‡ÍýO’Âѩ˧Kî‘Ä9Ó-›ÀðEÁ†c.Ž;޽¶^$±F©Jªåã²mU€å0¥®±h~±sq®›ëA›7Î~æÑ‹ì­7žç˺em�üIü¾ô^Æ�Û¾o˜mð>£oËð¶]„ó6cÛc=:ûŸJÎ�Ê\²é1eÃÏD@1ÚXßÚz¶ypp¾³µµ£+/O^¼ø‹>¼®Ïó÷'|Z�@{Ž…Î<¡·,˳,Ó¥ŸšN.£=l™¨°hk„�¥l‹°&;ÞÀ÷×ó`ÁÎÜd4+üÒ‡>`�ûÑgw·rOŒ-ÎAb‚æ$ðî[Èd›y££~;‘FüŠïäl�ÛÄÎt¹Õè€yzúæ@cÝüR'×3½,Î>oJ»íeüä€È®ãk™vïÊ–íð~¦Íeù!ýt¬R;Œ,üa�nÍÅ-€ -¬x °uCClúê"§~Nþ^ ÜÔï¼6‡èh?ï�²Î"}i_ÖÉ|¦çÕµ�qé·•3nctjŒ‚Yð0`·(·�z#Ì‹×Ú Ò¢â¹·fg�q͆>dy3ùÌÊjúy}u÷ 7Zè€æ�@Žeï|hŠ“mçív"3o•:²Ì[¾»]0>€æ€oy  éÇò¿L€í$Èä Ä¯è¼ )XŽ�ope ®”+F¾ÑµmtÉ¥Æcg?¦m—±é¦…æ×²EØ}ªÕͲy´Û˜g³H‡ŠæWá{QÛ‹ôôÁû¡f»H?¤Î"CõØm£\ á3F9@ùƒ n€íÃ#p5ù{.%ðó„Þ²e1ý¹Nê�pÏ#p£ÛÖ.‚ÔI;ä¹dIgh€A7Ü.øŸ…~öÃêÉ�èXHΆ—à«1ñ2ÙbO2³ã²"<í Ï`l:ëKÀ¸áæÿ–¶‹øùÞm飬Sê}¶Ÿ1uJ»ÒOæKÛE1+í³/è²~Í>Û Ï<>Ê:¥›yPú4¿ãÓm«ÍnÜŠöí€øB Æ)˜±ÚTÑâ5¨ñ§ Ô«�»[¯_ü§ÿôæôË—ÃÓ¯_OÎõVÀÙ§O¼ÀAL!ŒËÏÑËÖ)ë©Ùî{n¼`ÛE†Gr÷ù›Ðè/²¼F7µ.=¸ÁøêÍ" ßæ¡j<±ºÿï…g[‘¤�Û Ø‘À™¶Ÿ;YØzê•Ø²FsiSÚÍã]·Äó|—¶Ëòø&áƒýÔ¿_ûËífzÙ6ª=ÛìýŸé¡Û“ë@§ÒMWú\·þìT»¡ù2 Ø‹�¡M=;Ž\½°?yùò»Ýßÿ~új2™èc@(Ç?þøñóÿþß§kÓ)ó¨>S<ïzŠùÒÞ:ã>ëó\¯]§K®±Ú“§îmV²`ëÚE@wL#jK<¸*:ª2É3ˆJ™D1-‡·O쇂ë€xbÆ ×ýú�À™‰×“0V^t5 }.Vg¹í,϶¦W�s{«ðç³}’¾–áÕí­¢Ïßʱ(–õᲯة°õU}¾{mSü&û@Å·¸Êª#Ðÿœnïmîï·ý›ßL„¦¯^ýxüìÙ–n§œnþéOŸÎ¦üýI5ù3aPœ¸Í_Ûó«^|<®9WøØ`e €60e²v¼òàÂÆƒÆtÆÔAo_™ÆÏ2À#ò\3×€d"Œ®ûõ$WdÄgU-õju-óÿ¼€m»V[ÂrcĦûpéüí³ënŠñMqògàE€u7mã¡×'NúlKÉÙ>×-fÀwâ €d ŒQ®ŒÐÅg}2ÙßØßŸèUÀ}à‡õ��-ÅîtúáÃ'�_1�¦x®�Ð2ÛÜÛ¿\ÇîƒÇûq¼ @ î1¬zÀ¦2ÐHÞ`€ÁÀ-�ÂùȆÎÉß¼Ä3‹×5Fß´ëÂuD÷Åýé«wåíd¹L Tl°&ØXàC%ž\¥ën ´úhÓ=˜â…€;àþ¸Žyë�ûäÖ—x‘}©/ùÒßPžxä´¯¬¢�E>ï¾þ–õÙãç:urûÔÏ피m-ïÃî ¾°Zš±ÇUâøo€ö ÉS±¯7¡ªýÆ‘¬�iÌîX¯�}9{öì­®ìêƒAšp™K™(ÞÅróàRVòÙ6Ó¶`ûk—Ç>¦#ÜìtÐÞÈ›IòõóÈ}‰(Û0hú1ˆ¤/q®ŸišcÈUññ>�·¼B;h¨ c6`òUBwâ�‰–‰™•Æ u™üÑ× õÑMò¥ z Ä�ôÛýÒ'{/Àîç·ëÙr-Ó_öíP(íK?5ÙPÿ¶«ù@Ö~w@Ïp ~„kD@o(rd\'b킌ÀR�e¾”¹Îl?¶uÛ`v¯†Ñ¸ ÷VºHÈ€À1‚kx%x°”˜Adyé³±h|c7 ³·fu�œsðb35©Âw;†I–eÂA3AS°q '�­ÉÁ_}0OG�Eú>¿}òÒ¼¯�ø)^”¶}>þ²¿†Bi_òøÉ²Lic�==eÊk€g²åJY,L‡´1ÚD¯æ ë5�pcCažÌ¼å×ÅžwÁöo™çÿ%¦¼Œp'Xù@Ñ;Z'”Œ…d'ÿ<Ð<@0Юd‰,‡±m£i~³þR~yïßýºÔ=ÊAŒ�×®q�̃)ì«ø˜�°¯tÉÄ»ôrÎ�\Ÿ�åÆó½Ü¾–~P¼ðýËïK?—‰}öþR¯´/y|Ôdó|×ì‘U€éÂWX@Sb|VìGÑœô'‚OaÞìùVf] ÛÞ¸fSʰu‰©¥mSh„û�•/òêàö_D2Hò1]Wcà^À— „0Ð>2”|èôµ±s}CŸS î…sºòHrP=S=àŸ23|;Á棓ÐÄ‚MñˆKv‹â‚ÞåºqÒÆ²¾ùÄŸmÀ$c_X¦MûZ¦Žb=¥�R?c,¦´GŸë Ï<ú²NÖ—ö%OýÙd}¦“¢@™Y´W®ô?ÕÉJøÇÀÍ͉þ!p{òúõ®®ªè/§§z`MØ¡3Ô sí<}­NŸ _ö'rfî‡ážDàVí62¨ Nì~.%ƒÊ2졽@gÈ4²’»M½»s||±yxxÁ?�]è,ïL½K·°×'„ ˜�x6Û�æO‡¼ÓÀ¦¯$*Lð” æ�³®F/²[¤¯ùì“áËå&—û¯Û'êåÜ×Ïû(Ÿ×÷yºžmñøŠµy;îºñÖSg_�€¾ °;98x³÷÷ÿû7ÿã¬�¼ÿáôÝ»OÇ?ÿüëñŸÿüéìèÈs/ª ‡|· Z¹e¶éÃe'lçúÆø×9ÅøF@°ûÀßÅ€íô1íAèmGîÛ–1plgÚ˜Af°Ì|ÖY¶¶­ÕïîÉÉù„€ž4>ןgM··×N„Ï5ù»c]…'F´8BÙnMÀÞ1ÉòJœ˜ìK¨ÉJ›oÍÓGŠÿuïù÷mkM^KöØÕäß:>Ë´ïm0¾FÝg$~ù0�›+ãmßOÐv}kkoãÙ³×¼°¹»»wòñãßN~úéoz¦åB:Ô@—ºÄÏÁëC:ó„Þ²>,“+6Ô³OhÏëОϡG¸G¸õ€Vö±Ó¹¬ÜƒŃ$4'xclL‹ 蜊Ët«^cp¾£ä¿­nè¯3×Δüy-Žûݧ~ß»³~šD\¼2¨0°sØñ\@;AwÑñ¾›¶2ó™¶¾†‡ÚÕê^GF{åÙÐ~Ôìj2÷-ëšÃ¡Ñ ϼíï;^¦ßÙ¶'1Öcm{;eÜ÷(Ü«þmL&»kûûot%€…À}#`�9—Oë“Áï”ý5غâDmYÉ#¯É�®×‡© °;¡)Üæ.,²îIn}àílw¼úñA.†r Å€Q]cëqm裭_ÛÖͰÝããs-Î&Óé™>:r¦ËÿëS-t©{]÷"²�®Þc'j�eù8åᬎ]ÓÆ(2]ã£ò€ŸÒ�«Xnlù\Ö�§°¨�ý—öe¥~Oý<ça?�Ǿô™íÑ�UøÚŽÇEÆeÝr»¥�³~Õa ÄÃ-_VùùÐýÿ=½B¹·¶³óK}HiãüääËÖ»wo/vv8Ñâ ®ÏÅÖ™g—X¶ ¦¾ÚuC6.šû�ïlPl.ƒ ˆã^¸|&¹¢˜“Rc‘½4º€ããã¯;;;ÓÁño|“éÅÅoN/.žk9z gÏeÔ}L£­2"G L"%o;ð<Ý}öuÛ´ÏþýÔ¿ËlC¶í£½èIŽ€“¤i°ëÛÙ}ƒ¼ ·Ð7¢ãr KÝWÑë�³ßð¼Jbδu‰K›’·=16=s8^ ¸'#òÎ\ Ðþ÷æûr¿yæV«ž l€+À/ZP›}cüËÉÉÉÏ$= {<ÝÙùÝt}ýÿ:]_ÿ�þ!o[Fã �Õ�Ñå~�u•噞µºŽö}ö¿ÌÀý6¦·5:ËæmQßBà1-ˆÅ€íá€ÅŽ«N¹Ì ߨ�&ù3wRœ¸ ·e%¶�å™Ï´õÆtºæ›zè\_dØ�GøÆ¸óÛ[Y„X?NþÆÈ���4o€�mÖ”ü¿þMÿ;~$úÝéþþ{ýWæôLÉ_£õ��ޏ'eB+ùžj+¯º=üQ8ë÷ÀWú:í>cg:cÓ}~,')ÚÖ4@nº‘<¼ß!ÛÐÚÄV·ÛÉÿámí}í±çLp­8!×t‹dóê²KçÕw¼ÚovÄß"ßdÀ†²q5¬Â “ü3Xf»œü»D¯ ™¦>þÖ”üYðÿØïT6·~Õí±M´oÔöIa8B˜¬)7…e},k?´å€yÛç>”˜¶²lž÷‹!ï:ÈÌglÛ‡ŽÙÎ8Ä+Rè8°±�Á•j£h¹hŠ-o8q{.å î+¶EoÚ¸¯ŽåtÔt‰ÑÅ®†áÛFà›-ŠÍö€ ¹3` –Û¶žÁ˜ØXfš:ØAŸ]\ð7™g2„·Oô#T"07@µ¤çg\ñ¢Eú¾zY>Ôv.~óƒE€e}~æÉ­+}Xžû M2tB,iê +±}”>íÇzð›Ò>ûqÛ¶YÖŸëÕpö�iÙ2¾8 ÁãaU0™ìLž={¹ûw÷»7ÿí¿M�ÿå_Þ響œ½ÿEßøröå‹çZÂϼ»@8óÐ×)Þ­®‹·íêäk|@AùÖðÍ\ ÐXÈqpÂÎ2ÓPæTØ#Ï Þ@]r_y°nÄC"àýdì:%o9xžnˆ>ûºMû¾ÄÎ /jýÈý6 î+öaÛÜלܑ÷_¤ ³R�?9A‡áŠî¢�Üåžö"[ämÍt®?Òƒ# ¿ Þ™ì￾øî»³ç=þôÃ/¦¿üòËáŸÿüËôË—-NäÌseNØ–1_Þ¤Ø'þ\�Æ 7þ~³|ó[^,Ê@9XLàËEzäÔuiürËáò¶v#ôD  |�ÙòâZ’\Þ˰´E¢çž¿ïûç§þk}Y$Co¿¦éM­^–“ØœÜèS¹°­mðgÝm@n#Ó«j«Ïg–kã ›^UûOÔ�þxwmoïõÖææöæÞÞËÍçÏŸé3Á›ú4ðÉæ_þòqúóÏž�äͳ+,[že%½È½Ÿë²ÿ'ºgî×fß‹!aÒÕ É:xa€W2lrò÷@l’ýe Û’üíûR;R‹#À„ 7\ý×6Æu«a¾úê•Ó/|öŸ¥Ÿ²Ï™‡6ozÞU„ì›áM0…äoÞv%�¼&³ýªð]·áöŒÛíà`aEØÜÜÑ"`kcgçÅÅóç»»»gg'g?~œìîn©hÏ›æ�ûäÖÅö.çæmðèæ:¸7 €Ôù<0Xd% Ë:×#÷€ƒ·L¤|ù @sÙ׉“÷CúêE€“?üP ~Þ^óÆø)õÙwNþ¶s]óØc 3ÝHnþ›ÛÁÛªýß´‡÷­?7Ýžo\¿=‘Ú`,q¤ž³ ˜L¶.ô‡A’1øS>ÛCûD-Ûë`]2îøo1Ìîå€@´¢öL€�Ip²ÏôÕÅCó @TžHHPyO™Ö×l-³Í ‰Á?£MæM/˜3™‘•Å:ëÍ—vóx¹ (mð…,ûÄ�¶F¸ãÜûWÒíÂ〠ñÀaPA»`çAf¾ü Ô#<Ê�Œ\ò%'NãG¹ñãF�è�Ó©´}%Ï—¶±¬�·¼{~¦S¶Á§ý"ÿ*˜(|¸÷ bR,HìÛà�FVMþ¡ó`|Páx¤@‚/Ïúá½(x¤›=nÖ�Èse¦��-3Ï|jÙPL7Ùâß'sØ�ð "ð Ä…E¨¸àÁ‰ ΃>ì…ó‚Ár0€Í�)Nò$|Îþó/ÓöŽÛ2F`hêÏäyÓIÛó¨yã>¹õC1~òIõFøx0 €›2±s+€Ä€r²÷@̓,êmêÌûôôBج”ô·À¬,ÖÎÇ‘Âü@IŸý“øËÿ¬b“X‡Ò`º¼gm}cÕØ™v½Ì[Vú)m̵³ý]àUö©Œß]ôÿ±·¡¿C×—w·^ìÿÓ?}Dz󣣣ÓOŸŽ§Ÿ?­1W2°=wBgÞó®å×Åöol¿´=ÂFà!.�Š-˜âç°d309>^Û>:Z›h!°qzÊ2ÖN•(ÎTÀð#<à�<œü·ôÁ3/XÜ-$4|•‰Í2ë—ñ™m©ŸKÖ}kºÜæEýÉö™^T¯¦“-*7–­óIàýý—;¿ùÍï4®×õß'ïß8ùé§_ÿýß/¦Z ¨'e’»iæÚZ²·¾Ä5Ûš,˜¹{#žÏÑ^í5ÂmGàÁ-Šçœ @'4â�~¦ìž�]ì]li¢Ò—±ÖÎUN¶·×øgŒ3’ĸP$0�@Ø�$~ìOŠK™ ,ºÉÔwèÌñá:`CŸÌú§‚×§²½w¸�,ô9àW[¯_¯ëóÀû[/^L~ùå¯:R.¦oß~Õ}Uw<ÎÃÌ·žSM—ö}rì¬cë½@ÆŽžõɸ wn@Lü<´‹ƒ'_ð ô` <ÑÙÿÞááÚ–¾Å¾©Dq¦äpæ?UÂÈB1þ<¬�DHøy€ì:É%'÷Z¶Ïl7/ZÙvð5Ù<·­+û³L{7©»L;£íÒпnëöçKÝØÓ•€ïôAÏuL\è_¿Nž?+‡NÌÌ›™ö¬£^¦³Ÿ›Ð·áóºý©õEqãàáv" ¥‰ÅÅx¯má\ �·*{ë[[Ìy„ŸB2f›7Îò>Ú¶ó0u ¹äÌå†â ²xÄ«ŒÀcIv  È 4ëO§Ó󳳟ÏÏÏÿ�ðÆéÅÅÛ³õõ7=øFõŸ«ŒPF€IÛÉmQâjk»²­eyúãBò7½¨Ÿ}íä~Õhd”üw¾n˸ô�=�ëZÖh�iãÒÆòUâÛlþ�s¿-#fÐ)vd�î ó¿ Àn`eðRà¯[Tµ ÙŸ¼íµ>> P�×J…�e@PûOÉä:nË„Ôñî/ð"Àý°¼Ñ^þZî+XÛ®¤/=­–ºËözÚò8kÞ¿½q·ÚÈ=loJü‰ñç@sÌ—„ßóf¦è±k`×5ÎuTu��\§=À¨:ÂmEà1,(_>bYvýúõH+ËŸõÌW-þvº³óvªäº¹¹¯Àoo+Ð�Â/8‰ÎØUò–ƒçé²Ýuiúã¤ïE²U€û^ÖÑVŽI­ml°KæCYü¸N!^){m”îis&ñ×bXúùÕE ¹ �w¦9˜îº¬nÛFOs#ðl`;ÃÆ"€ÁËb™å"ÐÙÿ‰ ¯¼|RÙ˜¼ys¢‡c¾×;(ÿ ‰üdE©£míá#Ç|%˜žÌó„�,'ľØ®O�|‘MnŸäï{þ^ØGn#÷uˆÞuÝ·YÊm3õ\w(Îm˜îÃöÙ§/å¥ý"¾¬¿ˆÏþ2]Ôsf ±bèñV˜�ìª#°±±¾±¹9YßÝÝ�¼zµ¿ó»ßíŸO)gºOº6�úVªw‘ñm-[–ñ¢¶°¥Æ™¶Ì8 éO¹�Ú‡ì--Â5<ÚEûu„[‹ÀúÆÆ–^ |¹óý÷¿½ø/ÿålûûïŸM?|øõøçŸ=úñÇ_§?ýÄI’“1»‡ÁëRÊ­·\“e½éØõ­o^ hÇWtC0þÜNü ',íLÛä­96¶#1]Ò=ž¤˜Éº�Œ9b¯¤äcéæºeâÀ}#Ùç×þ¸°Êâ>¸}|›²A¶5¦N=Äß}·ñ¶×úÛêœ"ñ+®®Õe«‹€›»»/.^½:ÛßÚÚæ»'¿üò“¾°qvxx¬ßpç°ïvÕy¶©Ñô¿&ÏíÐV\}ÐX$b·�iàÜTÃÈÊÒ„uLü«^Lê‹ï›ezD{¾À‡|ö¿¨Ë´�mîwIg_Yg92ÃÚ¶÷ 羯ªo$}ùŠÝ–U¹ýÔ#Ð^x±¥ï\ìí½ä+�úVÀ†nœlþøãGÕrRîv�dÐ¥¼äk6Ùʼë#ò­ÆÃ¸hâr+¿�bÐÞ`P•I>ͼWâg[óì®T|2‚2™e>ÓA…p^Ò-íkAÄ&Ã<¶ÃÆ ®À»Øf<¯Öáß4¾K>ëjm—úE|ÍÇ"Yés‘ý"}Ÿ¿>ù"ÒsÀ–e@µÑd`@Ñ×2ã­§õíígçÓé—Ó—/ßMö÷ù:Z¹kà�¬3ÍA[³Í6YŸíí  ƒ¦¸ÎøJ ‚q[ð(EpD¬")å‡ýTè]D¦ä?^ WA“|N‰.0“>IÏÐÇ—rÛ/‹³ÚÍ¥|ð/ë–mg¨}îuJ¾Ïv%Ôd¥ÍCà½ÆeŸ+r-Ü»1X½R©×t×NÏ΢L…eݳyÌ•þGþæàm€úwœ¨À±K„MûØÎ|‰Ñù,¿fƒ [ì€Ê�Ó(Æß›EàÑ,¸ @(¸b$D‰9Q*Ö…mkG¥ñA@£`ŒS˜ˆ›p7UòÄl}Ÿ³š|™:´•/ó³€GîRkcÕ²²Ï9CÛºN�¡¾oÓÎý6ž×V¶�ÎEõ8l9P7Z¬�s­QHþ›ú³® í[þ­“§Ã¸=0­G /œÐ9ü >Å2óCð²u°w¡m½¡=þ?€â°rx4 €"2^ar P•��5&~G£3a3ñc—é\¯&¯Ér�¡´ýÐ/òÙ^ õyS;÷é:~¨ûXÀÛb×Ú]d_êk>É–õ±¬=í_§N­ßöc\³)esl9ùš"cŒµ[è ×Í>Ö½êf ~Û‹~�t¼BÐ…âzD@}!`]—\6õOig—ód3§ràç’çÔ,_�€~à3† ‚V�Ǻpt†˜¡vöû$°�8Í3AbR’pçEj‘�šž69Û/__j>æõé1èØæe ´_Äñ]ú(ëd}»ïô´×Ú™äú޵cZ@OEO´¿'Úïä¨�ÂdøxF]ÙÆÈŽ€þ.x¢ïl}ÿýoþó>Ù<8Ø=ýôé³þ*ø³¾ ðyúóÏùï‚ûŸÜSHƵ¾¡Ç…K>È`Ó"GXUã€ØxÀ,Æ—þ�lΨâì¿Kø¢™¬{!Ûf#Ë�³®�.mi—ÅW çAécžíC×±­Ë@i¿ˆâÛ>Œ©�‹eàv,Ñs®�ðIþ\Âã/»7ÅoòL@›ì‘‘ôáC��h_X2je]eÙÜÜÙ9Øzõê7Гƒƒg'ïÞý||pðËÚé陇ŠRNà™æ$ìË-3Ÿ±Ì:»,7íº¾ï㫹Ôa…x¬ €¢q>ÈÑX’戺 2‰k²í…š¾&³ƒy:ÛdLÛ$|߀¦ Ÿçkž.ûÈ4Û¸ ”öËòCÚ*}öÕaÿ©0ÓsÖÞžý“èsá*@W¤Ó{ìᑇ=.ãVU_;£¼ý]°>t°µ¾¾)ü\ €—úLð¶n³œ�¼}ËgÓ9è) ôÂDŸm2m‹°ë¨©®-í^ ‡ùÐA…õó"ð˜̆ž3}5—W®êFID =ò®žù—ÇbsŒ^�vèJ|Õr¾Lö¾`¾¯ÝìÍmgÙc¡Ëý°h»JûeùEþçéi+·×î;ßà6Ï�Èw.d…-í÷míðy›ôY �°âêTö߈ÇßyØØ˜¬omlè»:í¾Ð7¾WPÏ.?é*ÿžêÝ�±52Óžk³]¦é…yhÀ<?à)èFXqë€AÈ€ñ`™zëèèbëø8.%òÐÑE;±œir9Í+HOÊ#Ž€EP™\=ÁÎK¼ØÌÓ—�µOËs]èvŸæmk<χm2¾©}öe:÷YÙ†í†âëÔ¿N�¡ýÉvn§c›u™&NsÊÌm&ÕÓ»`ñŒÀTô· À’ñö@<+ «,8QŒ¢¦K:w½=¡Ì¢'K³'"XŽ€np+@ñ¥8ƒ= dši¡V²�icìMãÓPóc[pts¼ àpÝ ?ºC6Ń ìr%ZýñÕÞáaë2�íj42öûÒûÓû²Å]Ëð²ç0 €XhÑ~*úDÉŸ[Ý3¦U�·â6‚ªŽI?ï ôåÇ�œ¬µ#ªÉþºòÒ/»¼Ï—mc?Ž‹€ûo�É£[´ÛÛÍâ¡{ËÖééÅŽ®èÛ—LJüšP˜˜Î´ˆ gA³š#ÑЕLÀÛI9ôГ:`]Æ�fù_|ô{C?ÂíGÀû—–L÷áZo²mÞ§:öbà:ÞŸ²oGÔ%–,¾ [’¿“;ò¶·âV�žðG„?ßÀ¸ˆ0,þ¹ü6@wè«’“0»%ËKÚvÈ3]ã˺ó|Óo èn�Ǻ $$ÆÕ0Mt±§[ÛšH6Iøº �ü¹0B¡3ñ`2Ouè2m›¡x¦1öva"7]Ú�üj#À~3dÚ²E8×1 ¦x:ùë˜ ° 6âÝ‹x>që#ž0-ù¶|ì긽àûâ¹¢ÄâÜø³Düe@'qvaœWl‹M=¯>: fãö=$Ëñ÷Zx” €â6¥·¬ë À†.¶— /¸´˜'•kEõTòèM‰£Mm)ïΙ¨ LÈ™·|®ÕÓ¸ O}{°ÈúÒ'| ¹¯5}¶Ï¶YžéE>²-ôªíkþj2÷£Ô•|­�¶Y„]×vðİ,yŸ¢ËöÔÉ ÷þ�™q)¹¿°ÎU<×ñ]÷ò¯ ǃs5O¾*`Οð�b²©‡÷7¬r.@IDAT·^ïþá¿{ó?ÿçéôӧóϟ¿Nß¿ÿªïø»NðìŠåŠpöG.ì¿X9˜Q�04�rÀÆ‹€¹ñÐA?¤¹šUúél¤Šs3™ç »�œc÷d>7n’Ä@ò'ñsE ï6l7»�}6‹ô}õ¾…<ǹÖþ"}Y§´/ùÒ~‘�õ`Ó¥ö_­Ø¿÷/õMÛ|ö«1Â8d\òf€¾oð*!ß áçoijC~f /ÜÄSǺu²¡|¾ùòåûÿø�[Ïží�|øðöä§ŸÞþéOkZ)FÌ›'þr1`Þúëb'0@›#¬ �v@lÚE@�°=ý#É_*8&fán0ÐÇB3ûÆ�Éž„OòßÖ“Ð, Ê$`§Èk�}^G_«s×2¶a,Ò—uKûE|_}×3Æ®¤Í{ÿ€k%·AÛgÚ6è�·…èð` €xF€+{¢ÉÆ\ à6ßà-ž@èkxaÌÿÑIßx6Y_ÿA¯în>þJe�ÿd8ûô‰äÿž�µ…~ŠeË`ןWü3mˆá&xÔ €60 Êy°H?¯î“ÒqtÆ® 7è<)›ûEú¾zw!Ïq­µ·H_Ö)íK¾´7¿È.ë¡3oì?Àû×ûÓòF[ÿÅŸÆX%škþÀÓ<±P•½1 ÿŒäï¾�ÅséÓ~ñ9Â&ßPÂß»ØÝ}39;;Œç(NN_½z§ð°)µäm™‚ÛÙÙ~Yœ}ážÝ< "ð„‰�CaàÌ (]éÒß�Ÿ}þYÿEþ'Md´§K`»ºÏ¸+û•ÚpôH°Ï¼ÀqOvU(:v’0κZ{È2ØÞ²Uëíw•¸ìcé{‘ûy6¥®äÕÏz×5Î:hÅûLaŸš¶{èl_£-˶ÈüÆU)ø²pK€+m{Ø2)𬅫j½ß² :ã¶žL5(>Úøu½µ±E ô0ådc{{_·v6&žŽFì¹4ÓþVá»­ªÝîp[à(ê¢Öqìà®�§´à8÷ñcš ?{öì­ÿ.vCgõþÿÝOüA²q  d x†8ú<ÉZ˜1&ú!˜zعô%ˆìß¾³l¤û#PΗ%OÍRVò}Þ³´‹íá½OÁ.ìï<^�[O}ËKYYßõ܇³PåWxà÷LoMxHP‹^!ŒçdcϨŸ, ,{Ò9G¯jûÙaNÈ% Ÿ‹í´óbþ5oœmûhÛ‚]Â6*Œ´'½S•kÂSXxà�YäAvqzzzòõë×·{{ÜÞÚür:™¼=ÙØø¿O7âkÏdÿúš±}tÕ\i9)ÏÉÊ“u–×hOðØ»ä$ÑçÇõj>GÙeˆS†’GWÊ2oº×ê[Fï?ïS°÷3v% s[èÌÛOö™éÒOªKâÛJúÜà;]’×bšdöC‚, 'ÇO6ß\~ˆ`PœœÍg\êÌgÛEtYÞ2ï“b€Ëb„¹x ÀÀ °ð ‰ÁòéÓ§ÉÞjðe{{û']ø›ÎþÏõ€Ð3Ýø�t#àHÀqf€"C;iÆD퉺cCq’0Ÿ}Öhû«éFY÷âUB)+ùÒ~(�Š÷eÞ¿C´ã¾P×¼éF2û‹.×iÛ'é³åNþx#±;ño©_QœüÅSÏÉßx¶ÑGÎÍ~(Ï£„¯,Ö[^òrÕ‹°Vê×ôø( s:€Ÿ–ŒÀSYÅ‹Ëô·×Ÿx§õXåÓÚË—ç;ÿ ü‹&†x£ÃšpT–Glyžl1˳åYÖ¸ºüm'çN€-‰�É·/AÔü–~ph;;/û±¬Þ~2.}f]�.Û¬ÙdÙûy6¥®äi«”e¾F[VbûBî’·šxy›¶<ÛÚwÖY–cŽÌ¼icä¦Á~»3xÉXÀ2®),b‘ 6Ð@è¡U i�E@C68˜ÇÿãEH´¹;ÉGˆ“Îrl3]«›e¶wTñKý\ÐùÊn³³�Œ0(Oq@`<@s�údÙf¤ŽÊ8ÒÚÉñJP²¼�$cÆ}ÆÈ-CîäÏ;ÿ^ØlŸ–Íã±yÊ�÷q(ùš,ÛôÑ9¦¶»d}¦ÙW¹dÝÚûÚmR'Ë Ñ•²>ß­}ŒgÙ�I¸EWµÚÛ,ô ðÚ©¾ÊU¾º©±¸½BÐçþ±É x&雯%vË/væ3�eöeLøL»Ž“=õ(€w_Ã�¿ƒ#ðTy€”tæ5Üâ£@ÈfåƒCú4 »£R“cÐÂ|w=€ ¸„¾ Ù¶Öƒ½`r¥X‡-tYÇr·Yò–?5ì8y»Ky)Ëü"ºÔ×ø,s?Àyaçý›õ‹h×Éþ=6²®¤mƒÿ–æÁÀHø‘]ˆ #8Þ +ù³(àr ¯êVáÚ–Šžˆ�E€DO.o°½Ý ºLâæ £í,ƒÏ´õ}Xæ�Û¸>gä6°a‰<…—%…ܲ�@; {�9³OÔ儜õØ ÷ÀWj ûÉõ³Ì¾¬jØñöv—<òRVòeÝš¾”ÁçR¶Ã>ÊÅm\{Ÿ»™7=Àw÷«lIü\úg<óiá3] àaA½ ¿6A'šmà ïÃ=)¸ú “²±“sÉ3÷Z¶ .ëÙ?rŠùX»=©}±‚�} €&ŒÁ(ËЕ¼íŸ4æˆÍ@�ʣ؉?î¯j¢œ�<£ƒ7¶!2Š`'Û”u,Šçõ ¥¾æ7oËÐ:5?– iÓ¶CÚ+ý•|ÍGic¾Äî‡åö_Û:^ìKïcë2Î>‘»^¶)i×±mÉc�,ëM£ƒvL‘ b 7Dó×ÃzCàœ¢äÏ×ðx3€? ;g‘šýQG<ÏÄ3ÆÈ6¬ëC@}pgëåËç{ÿüÏ/Ï��OÎONNÎOξ|!t. j—˜‘Á»8agëú°w‹Ü\ñƒ¿¸- xkÍ–v&Ö#Ì�ÀSYx`ŒL;8y€qÏò¶ñ•ø(FAk�¿¹Ç!fž”á)e‚@7ܰߡur?†yžíûÐ:}vËÎW‹ìK}ÉÓ�R–ù>Úý/õ™·MÆyŸB» Ý?Ù×Ú~s¿²Ì´}aWʬÓ_ÎøÝoÙÇ÷ô<·ø¨�Á“†>”ÏÏõïÊ÷o¬ëÓÀ[¯^}¿ÿOÿ4Õí�ÉôÇ�úO€�Ç?ýôñë¿ýÛ©î•D"Ö¦pàÞfñ"œ k€ˆä¸ˆ0,üy* ‚cÔÅ2c¿æG¼ mz+‘¾7³('ØrÒEOñ$k~Aû3êÜF¦gŒz˜²?=f3âëÔ™q ËÀ"ûR_ò´UÊ2¿ˆž§GWö§÷«Î–göï2Û}[��ÜgdæMg;Ó´g=öÚþ]0’‹ä±89Y›*ù¯ {/‚)=0ÙÙ‰Û\-ÈÇ ®"�Yõià}ýÀwÛº°¹¿ üñpë|:=]ûã?kÀ¦R<˜7Îò>Ú¶‹0õ�lgŸº£ßjð®i,Çß+xŠ ÁÇ«yð8`r4Ð}8î›×ðLO¤­<24ÅɼmŒm¿/koLôËÖ½N�Üžé!؉«Ï¶Ô—<õJYækt–åv-›.õ–S’¿ðËÆ9û^–v[¹?ø€·®Ï'z¿¦`ñüË Fò—Æy.Û»|A\CZÛÌBà1ÑÒà™þ0‰Û“ƒþ$hK‹¡Ó³÷ï?iÿn¬M§ X5ùw‰YúÒÆºR?¤P?—îDòDà©,||2 L;4ð—àËÿÆ—š‘J �†L#ã!* ‚]›xC‹A[œ'Yx—ÒÖ|Æö“eסÝ×Eus{CëÌó¹¬�Eö5})+y÷Ïrã>yÖCçâ:`bžePîÓìö¹n©Ï:Ûç}QêáíÃv%oëKmÒ§ïœUÆ™%‹= ?Y» ÐŒ ™̨ŽËÿúKìº>H@[ø‚i}6ŠûûËýiÒ®ú¼«ÿÐ&]œ_œœ|ÙüüùÝÆ³g»\ßÑÍ6)'w‡%ëVAçÄoš úVíŽ0'OeàäQÒðYæ:#^&š`™$7„#˜ ‡&? OÄNù©ìrij]ÊÌ Lß½7iß1XÆÇ¢:5})Ë|�®Éè£åC»x;ï?×…w]d¶s=ëJ¹õ«Àöí¶ðYÊÌ£kír¶blÓqÀg»¸J [<$ÈgFù›aÀ“ Wü|@Ü"hõaô.¿ à8b OæG\�Gd,˜èDσ9†ÐyMA^+¹µìyÉgÛ>zÙ¹aQËú£_ËÖb_Ú”¼ãa¹qŸ<ë¡k¥o¹®±ÛÀ™cZÓÛ6Ûe™icûêã-7v›e½VïE-c8Šìã€0:Ë�aàyK >¤ûÿž`Àà‰äúûñxU0ž!�}Ú>]ž¿T­¾�PÏh³¹¾µ5Ù88ØÖF]hÁ£?S8ç•@o2SA!²¬¤Î.ëD‚o}×Éí"o�x* …Á´1rèà·tù÷ððb"¼Î<:#�~$lG#®G Ž:©À@™íDAnéF)-�¿qÏ„u©½·’Eö]Å–È}(u÷™_Ôïš>ËjtMF ,Ϻåc¿*î$(ï�X,‹ïp¸Q’ûˆºà”r·kù¼º5+’Ñ[’>'| �3|?€Ž1]n‘å¹ ]“/<;>^Ó_�¯å«a¯íå+ƒ<Àí?C�}}sZ;]ߨ›¼xñfïøûïÿ×ÿZ?ùðá×Ówï>MùåÓ×ÿø�Ï:™òš‡p¸ta�¬F[fìz`d€“Ö!Ï|¶g ¡ç…éDà©,ʽÍ1 7œø-]Ø?:Š¿Ý<Õ‡@uNu™ŽÂ¤¦¿ ¶íˆ+à¨Ë"Çœ�Ävs Î&Éb@lYÀçR¶ƒ.CÉg]�Îó@¦±]ÖWÍÿmÉʾº�>9ú¬ë£k~l›±éÖ/“*32§O` ³�9N‹f¦¦œwû?²™øì¥m²}¦gÜ£>Ä¥õ³-ñMõ#_èk�­t,Œ©Ï°}¢OÛ9¥ÓëàõÁøž€lXÜGÐâ$¾ À‹Ž›{{{ú.ÀÏ'?þøó] ØüùçC-l¸O(Nèl¦eÆÖõaÛÍÃÙo ˶M¡f c3BŠÀSZxç×0²�oO§;Z™sgn“ûxZ�µïõr%`íáß³K»ÿvHŽRCÐyboéXŒ{2'é;ùç@çD^œ Œ³Îô\éËLµ¬/Ûš1¼c&÷ËM×dÖ�³~íº¶-±}"W‰€b¤«ek›Úo@>å Lüd4uà]ÜV c¸Î<: o÷'.õ«/±à ýRñ º§Ÿ¶×]gà‰ `:øvÀ è#:ñ,rÎøY0_þuð¾Âúd²7Ùߣïìm|Ç"@ÇñÅéááׯ;;ïôy`6›âÄ^òl²uƶ1î“[Ÿ1¡Ê|®¡Ç`„ËÜßÑuÙÇS\úÑÁÄÀð1æÁ`ì6â ·vtrŸŽF$.ŽÐ�&ijz‚À¤ s†Ø4Å‹óÆ�¡dJ])s»¹tŸ<ÛaSúËú»¢Ë¾–|­}6–»®ùy�‹ê±7âì_ûn’%èø0{½K”Ô%žìk°®Ä5{û·mÉ×ê¬Bæöú|Õô5™ëg�iclj´e‹ŽYVq`¡½­}¸åÒ.”‰¾?˜Øÿ®¼d¤Ð°c‚ØŠþÿÙ{³ßJ’,½“dp‹="+²2³kiUkC4ƒ ½ 0Oó— Ѓ �ÐRI]•k,Ü— ïå2ßï¸Îs�æw!‘A?€Ý³Ú1sss;æææ~»sê¶–]/8� œ?‹€ó9OÊÏÄ… O‚ŽÔÚåRh À²i¼u`ÛGæö‡¨ºv�À˜ë¤�tdûØ ]L„k“ïì÷£Ð¼è×//9Õ6†æðœ,ïÃÙÞ6Î[bô9à3áê>ñàœè —LôW;¢ÿªÿýfé`o¼¼ü7ã••ïÎY&´Ó�€ 0?�QHž0Èù®�‹4'Jj.Ü«2KþJÓO•×»yãZÎ\Ží²¬–ç&2ûž–·Ïf^yÍ.ËLƒ3M�ZžáÓÏûÁÿu�ÇuR˜bÞ&|cþR—¯ç�…IÈ9·ÕI@xK?´»ë•iL2}KðŠ…'eðǽKáX ¥,ó¦mkŒÜíeLyˆb“ v<&rY¼J{„Ù0ø ÁÕ$ i¦¸MûPÁ–•˜¦A`—ùšŒào›ÜTØ\®î稦;”Õ÷ß› @qjÝŒQG§Qð?;>>ÞÖD@oèœï_®¬¼y¿¼|4bykyù™ì¾)| ìŒઠÐEÏ7 þ,m2 p�˜0x;¥<Î;�­Ÿçë|š:Ø:ƒåYö¡èYe•ú’§^¥¬ä³ :ëKZv š„ž÷óÜŸ ¿AÒùÜà\ â‚R^cßéƒùóœÓ0JûZþÚ$ lwìä®cæmo�ùÈ´øÏµà/¿1h]Å`!Ú½Ã<êR�ÞrlJ°MøQY1«ÍtãÑ´g›‰¶Zo—ÝYø¤ÂSG‡ä ^Ò¥Þv%v³Yî|öGiü5ú°Àù´…ð¾ýÜÇ '½–âÜŸžžŽ•X8Ð À�¾þúùòwßéÛ�+Ï4øüî¾u�Û/W¥¯bM¦šÍ~|O|÷ï € d÷ ^bÛ̃²m–™6¶�Ë4ÿ1qY—ZÙ¥ÍMyç3¦,h󉿮ŸDð癬0Pðßl'®j\`ÊËMïăOuWË®wþHg,žÝðœãþâã|‹Ÿxt@¦3oyΛóDæùº;~ùˆGÂȺzP•Ö][³k<êlS£‘‘ߨyâÆ”RûoƒØ9ùº`2Í*À'í#ÕŸÛk‚6‡æàíCÍ<2ó%Îy¡g%ògÈö–SuÑ„V§Õ¥QÜ·ßû8(Ï1�¡L<7Ò]ŒôMÏËÓµËËñƒåå3õ— zÕó·ƒ{4.˜;¾AßɃ7Øô¬bjvùzÎ4¾2m>Ó³ÊüØz×±¯ÜR¿o[pI‹�TmÌ�,ù;èëü9øk¯ŒN¡þ.·8äå¼s››iå/& ²ßlËZÓD½VÖ:[ÆcßšAÇøŒž<.ÃXy{Á6mYvÖ!´¾•Å1KÆf¿.)ó@L&5Q‰ã4�è“Yo›ÌGÆâ‡ã.m¢]T'¾6¨÷Ñö´ÿD™:'q^t®¼©°p}ç¬ÊÙxðøñó�ï¾ûöå¿ÿ÷£ÑÖÖÞùÁÁñh{ûøtkëhéä„*’8$RôÍ÷锥è6Ùot=É(/Oº=Ø ÜÝèc¹ ¥þòá¾NÜK̯u‚šìËï·=BU&' FÝ$ ~ìã†k~-3κity-—¼ó"Ï 9u-³Éu7¿}õµ÷R¿oÛFÖ&ßñkòËþ±éOÜÏüWu>IØõAh¤óèÀ{NñœÊböFAdÐÆ\x—c¥€‚(oJ™¡ã ¥­u¥¼µç#?¾Øç´"y 8¶RÇ]ÈK™ùšOËz}«>|HˆÝñ�…¢,½š«|j˜O—4û¿K¬·6W?~¹ùÍ7çúÇÀ5}`kôöíÖÊ�?n��ÎONjßpÐ/1MZÊhŽY‰<þÆåa⃉€}QÖ½Üp_'tNº<X®éw·i°Ñ ¿ µ@ @JÜýÇ €è²Æy@÷ l¼Pi=Æyà†v²¹yÛ�)ß;뜧†gÕy¥ßYyJý4>ëLg Ͳ¼pŒŒ:‚^î�M<óoïü ä¤>ˆÀƒ_|éüƒ±_'зÁžGúì E>ÉÁIžÄy©•'¿Ýùò1Q)ËMƒ ¶Ã&�_÷[c  x|ý¯oÀÙð £¼öœu–Ù])³lߨuIuŠÚHu´{h>$D›ÑŽëÿôvÏæŠ¾  Õ¡õ�=×jÀM¨ž£Óï¿ß;ßÝåPHì%Ÿå¦Kì<%Æpл¬P´<²‰UñØ÷np'\_7%¶~À·i >ž8ø_{Àà›åÁ×p#]ì׃|-:ëk´ëa›š�,ÃÎyJyæç¡g•YêçåmWÃÈœTGFT&k ¸^ò� šhÌÔ •ÑwŸ^Ip0�ÀOðoo Pf,µØp¢úD Rõ#øKí\Nh{y3oÜÒQv¬¨ ‚¿> Ö|úW|í@v…gÕ° .µ¦·®ÌXó×Éx I@|FXõƯ}ƒÑÅŸ i¢¶šÛ¤,äy}pSûÖ/76ž?¸¼<׊ÀºÎÕH+{šk¨>§˜*ÎCÛ6ce °ûÉ¿¤É`KÀžÀÛŸ†¬û³7à>N|²9á$À¸áÞz¯”6¶pÛeEðç®_ƒ�S<ÿgàf ÎižVľ„Úà6M†®–j~mg]Í/º\¯>›Y>¬/ñ¢þJûÌ›îÁŒ’ 0Ëú,׸ׄƒ&˜ˆ�ïÔçc.ëÜòü¥ÚòÀòvr°‡Ï� b…@õŽ>%‡±o =ŽèwЮ“±eð¦Û<¹NØeCïbéEÁ5°‚>Kÿèæ’7û�®ôÐ0ñµQÓg´m2mß¶…�‰TQ'ô‘˜ h�À¹ÎŸææ9o<йŽóÝb|Þ –—5ÇSj�ð¥@M Ö…Wõè/º•TTÚU5M6ÓÙÆ2cìl+2€€�¨Ñ>tãÆ²ùÅ—€£‡ë§f.9çþÌéû:ȧÍ�Â8ëJz›2ϽãÝH1HsÝkŠ÷þuç´£¬=PÓB¦K|—­—¯ch§ieä<}vÙÆõ/m³M©«ñ³ìK}æ3�oóS0£Ïè½äÏëužþNþç»|‘( ,&L2Ö€½:àÇž€ãCåa|މ���ú‘ú ÐùÏ}º;&¤ö®Ö�_1YîÚøÚ(u–c—él‡Ü~,ÏöYÆÇƒâíªv!ÐÛ/v¼AÀ£�Ø# Œþ‚–(®½@Õ)”j¹pb–—ú\ͬ«~l‘öÙpÍ/upr~°þy,Ð5ó—6¸ÏNnNb'®xl˜³rƒN¬ðº’' 6„Á™¦ó%=g®™90 €6_â2#ú\—R_ãí³¦›%›•·¦Ï²>šrÑY_à¸ÃÕqÆr?�W‰;~¾ƒ?2nâ"-Ú&SŽ›‘ŸqÆYhîV#øKÆ+ƒÄëƒ-͇„ôW]‘�Ñzâ&�ú9•e#÷ñ‹æØ ü|žóÇó~¯H¯*Êõ¼ È~¸V ÈÍgôÈKrƒóbçÄcöÐFñ!!Ú¸Íæ3Ãkú�ڜչz%Pç†*’„3]“Q�\]óØÐÃ;p#E¸ì†kx˰qb5Ày\—¦½&:›Ý|žøžùÏ¢A|bÁ%}%&s�L7˜+'& < 0&Ð௠Р̀qÃ-þëÁ½Ì‰¼–J»²üÒ_©/óß„/˨ù(múø,¯ÑÈ,ŽV븸 'ÐÇs~�'^ñó€ÉÀ‡Ê�:Óor)Œ³|9°Kª_,É+@³ó=+ä'�ǸÌù!Év�ɦóä—¯‰Wþä?¯ty ÈwG`O®¼é\„í² ºfßÉÔn¬�ĨÎö &ñ%AŽ…¿þ�ßÐ9¡J99àS ÓÆØ™®a©£ú¶ƒn°j´eÆnüäz ‡çm… È�ȧ>ˤÆ>Ígú{_'œ<Ÿ@ã¾SØè‡I@_ûLÈýŒ6ßýGÐwàg`fõ@ZÒÙ›m,›uÍ•zø>™åÆ”Q–‡ÌzëÌ£û0˩ϼéSÏVF b% ê¸9 ðÜõüãy¿02îÌ�»÷þ2‡Î&ò¨okŸy? ØA“‡¾#yËDZ“—Äñ »âþ¸ãWâîŸ×þüÝf¹Ž®S–QŸÛùí·ÏzÛÙÆ2—m½ù˜$µ ¶9Ѿ|d(öpmº­œ9Ù#"o¬þ´}ÁýÝhªzõa :‘«m:c\EQ-&>9é"ºê‰ðû”D8¸ÃÔhüà’¶Œú’7ÏC‘¹i£[‘_í²Ï}"p_':‡>ñÓ°m<«¸&4@Dð3°(ÅÎhî"Ilãj�fQÉÏ*›�Ý�idðN%�¼¯¬¬ƒÎЗ'ÛÌ¢KŸ¥}Ÿ¾”›/1þ,IÐcÔ"Ô#À·˜;x0wý]àç8Ûc½Ëà¯*L—õUùy�co¬V(`ç €'Èâ‘�°÷ PXœAɈ8´E,ýûîŸI€üEðŽ7 œ‡ÌêRüöéjö5™ó½ìš)v¶qÕêQÚcv:þK="ð·˜ ö &Ú9Á¯iRè4ç@¹Ô4“«ø¸„r±ÖƒI/”ž·ø‘ð–Ò»6Å—¥E¨®}fÚ‡ƒ9�¼Lè 4Ÿ›ìæìò¨/ÚŸS�ú™Á}�øÖNêä)lîü?»;y‰s°PqÐ7î þmp™¨aM6aP0}×]MnØ we™è�Ù¾´Éò¢:7bgù+õ}¼åfä"1êq×ßò×yŠ;~vѾÓ“´±[\y~µ±Mu ØDý[šºE°o@GÏÞ€‘8ÞÈá"� X²˜ ë5µØä+²g (?�°ãÜG>å§|Ó"ƒÐas[È>ÊòÌ×l²¬Vô®c`#ÿ7pvrÿ7àM‚èœxîĆÞMí p>˜Ìõàïà‹ Š3�Bðçì£ôJé/JÄ-‚ÿ¶R œnû1]b"à&j¸†G—“÷8¿ýšwÞÏß» ³4 lùdûä��Ì[Öh†ß©-ÐÝù+˜Ä�»Áß+4}NxŒÓѺÎôÔÒZ%uóC;akÚ69¦Ñçú”öY—óÍC—¾Ê<5})˼éF¦ºÒé»% â,õoj ßÔGc #à·vÍ%B6rýz@éÔ�/H:Jð^;g�`Dò 0 8å½}t plDO>täáÜÇ÷ý¥wð��L”bç¿Ìb�½ ü5dÐ�á«Õµª�ÝekÙWY–yʵ�ëPîƬpÄ €&¼-×®2ã›DdãA8)¾6¨ö�¶\$ø+/ |¬p¨‚OcÆaÆ�€â­#>±Àà_*ý^)ìjàÀŒÎÍ•±½Ë²>7<�ö¤t@ôSé3‚{7hÏ�O’O´yã«S¨‹ƒÉ+X<@âbaPjƒë}ƒ²¡à£=¸ûW0ñò<ÿgB �# Õ×^¥¼äg][Ög ]KÔÃvÐÊDî²k6ØÚÎùnŠûüã¯Ôõñ­Ü½0°êv§ï²Ëß8ž÷ë<ñe?VXöÿÁõ7.ëÁ¿ Ny"Ï¿¹nÕ61Z·86üÉ +L<ˆÀ/Þ»þéÏ´}Ú|ËXŠPò�´ùµ.Ë¡s¹ä«ùëêÛ£·㨷ŽÌGƒÚ >dÂH™Äm¯Ú�ýçê+gm ÒМ#úW¬ +®ê  ›úã¯'Ë_ýbõôtuMÿ¯²zrr±qzz¡ö�S£Ñ!°êv-¼~6õÀÿÕáÕá[•ñ­F‘mõÔmmaÜ~ª„­“lØq)ºÃÊ –ϱ–NÄŸ6«"Õ¯%¹ ¹P×ìÈœ¨'48ò«  tüÈ>iø4¯ú�×dùeº«ÁºlêO,ø*Ï bg\J� n÷"èëø»àßÞýÇŽ Ïüi' Æ ÷a¹�s �oR2u¿Ëk{š¯¬+ióÂÝૺ1_Kê·Ý@4Kþžõ÷×›4ÍÇΓëÎÒ4dzN»ÐâË=¼OžÁi7õûèFnDÛK«‡ƒ.™¯åö&¯:ï:.·fÚW×Á8çungÑ» �l�^m§H[:S»ž¨ÝlëèÇ[#«ô)°’NÀÆåÚÚó¥§O¿]þã—5Ñ|ÿdoïâÉîîå“í틵ÓÓKY]¨ÜK¿1U€×h»®Ý~¿×$à•v(åBÎ €ÚfÜn$øO$VW$‹àß´áÆ…V.77­<{öÕ-ý¯.=\_¿|¬6×]<+ñÎ�pl <6X¾–åCW­ÓŠF’§ÒñÇ/…ÿ zQRÔ£ÅLüè‚I@DuÖù­eóƒÒ²ø#M$~‘ˆ¢ÈŠ©iø2qhn¢Ò޼k02ûÿIíŸaö aIV›„.ù„&ËÿcÝáÆ@qOZ¯ÖPȸƒŠ¤A—A³û³µQ<ÿoåå€Í&û©—ö ëKLd­Ü¥8P\óØC–3Ð¸Žæm„¼”Y7/îËŸä®»]ßÖÉ4Òúê›ÜÑ;ès'ìùÄ÷ûu.üüíð3Çå9� M:&O. ö}éâAÑúFýÕê€Ú�•L€dmOhÄØ@™H9Öú¼õñÙ…m³l:—K¾š¿\?ë-sóÆÙ/2VMhàŧ@4}lLŸÓØx¡M°ÖÔþúÞ°3iu€�ñˆ€¿•ÞT›éÞÁ?0š2‰®$h×Õ´Ê&ÛCê8ÀÈ…©¾üpßr°ü22íi%aKø�&#-Œ•FZ`€³ù03¦™7íêQ´i0E¶Ó|S}¥\å¯ùK»ÝKà$èd”'Ômáflù€Û a 4# I��N³¦”m»‰zC¦-›…Ë�Ø<8%J‰åo :LØ¢Ôd'X|`ÙS<´ƒ|Ж%9äm!µÄU;¶N­‹QÁž6ŽARØ4ƒ/“îðƒoYýÖÖþn[çÏ)sÛv+´“‚P´›h&ózN_Ìã«y±!Ž §¤h×àÔŸÜiGl§åC·ˆ¿ZÛ;¿Ë)m\‡lg[סĥú6Nü�b�”n–x,Ê;zgZ1å;¼nÈ&Klx›UUa=Ëï?Û€ð%Þ~Ev4åÆDXhc"0 Þû¦lÉ6eÿJéOJz¼ðÿmíØ~³´´óV{d†ËE’Ì;pµi*ªáª�Ñ1 À7@2ÝH>òï½�¸õø¤OÓ K¦÷—ìz,m×¶_´£yc5«èº<4úŒnþß|Í”t¬ Þ”p#Ì»ï\•ê ÙÜùÅsb Rqµ¶>ÝÀÔ8_«Ç“ë€ÓYп;Y`ÉÀY|+gI�,?Ï�€OÐG�®M%O;tçhVý¾4½ÛPmã6¥�.üyõ� ïà˜‰@›bE€~¡@ŸjÛÇý¢l.ôîÓ蜯ÏW¶™‡vݰuœÏº²¬’·} ûxìžÄuE[òj!·ÐKíd*þ®˜ €Ú�@LÖ]w¤<ˆü’Û_‰¥ �Ë…‡&9ÂB;ø#Ë—ë €0› ëï+Õ篪ÛêAóVÀ¼›]<ÈUvð7¦:Yï*“Ïù¡?:Üë @ÛÚ>‘eã[þ«ž ²R¿6ïÆpãPŸ.°h Í<ÁÀÊy‘u“€`ø©Ûš¬u‹ûøO{‚#E£kóÔ»œ“˜M`qlƘ†y[ûVÇ#ºƒLw‚hÛÃeÓM 5uŠ ­,È¢ž­yèu бÌÏÝ,K®Â‘WvLLÛ?<`Ì=úéŽÛm£öb!˜sËÚž´�3îbÈâÑ–Ú)Î?íE€¢5�ÏØ;/öî9Í™i—iÚØöÆùlƒŒ¾¼&Iñ–€>_Œ�–È”˜ô­Ä5*öv´1ådp$E]&?‰I‰–øÁ› ü_ ?VúF²W*Uô‰&|e�ê¸tÊÅX–1ÕÅÆÕF‡dÆ*¶Ó‹ ߬üª‡ §¢�|B¡9™ š'.õØðâTw ï5jJù@ƒÃ°L8Áa‹ý— Ž×  $–çƒÎƒlè\EÄ Û´l Ì^=A°?Ö”u˜Æ£«$ê+*›g�Шx.¬Š?œ‰;l,ùñ‡c:ZùâX”'ŽA6Qnòkÿ}Øm¦¸•å@Ý-ïë8â9?�?¥ì3—›Û;Ëï ív¡o]�ùhô¦ 8×:ç± |®à¥eNJÓèS¢üÝnôÔ„ïV�̺ŒQÛÞ^J¾uÑ!ë;ÁD-o­\ì\OÜg:ë,7¶­>‘à²$, 8l¬f€ä9aŸ“Øû1¦Œ2y€šºx­€¿NÒÒÿ‹¶œ'³!pGßøå7Ú @/8Ó+d!aŠ»²¸ÌÛl¹i0` m¿Ð¿ €¦é}ÂÜ�ÆÉéÃãñxWÏS¿×@ñHÊx¼¼üâLI¯ùÕ¿Ú ü¨k€äb�€ç‚5XÆ Ë I’ ƒå².!d|Å-°h^Â�„Î2á©�ܰ36�Â|‹ñê :—Ä@Î A5v‡‹ï=t¸l0¾ÝQLGy”»´ÇõhëCÂ÷aîúY¶,[êkY´{[>õóñAÐÓ:—¹Ý¢ÝÕ®ÑÆê'œWd±G€;ÿ¶_ƒý¸€�…¼IçMÅçsÐSú„˜|>W>w­¾OWÚÎÃç2±7ï2Êc0_âZYŒ>ž¬GÎ$À‚²œ(?'±®—yûçä(mœ};âÚ?:zÞ(øJé�ª×è±>=¬ý »ûšì ë5ï  è\T¦)Àe–#ƒ7ø0&°ú™««nGÇüxÀ9¸ï�O4'ƒ'B'çüäädWø�¾.µ¯ Àïõ1Œ?hý†Χ*ï°Û|"i€Œ�RGÏÝ=€ž ï ûNªQ4ÁŸÿzgÐá6_L ð7ø1&´yᨇ0K�¾ƒŽeó¶¼\LÜÊŽk/v‚‡»6èWhç�¢< ƒŽ3)�ˆßVWÒØœb•´xçÍu¸A�röûC·ç.Ú°mSŸ—ho&Yôeý¸»¥�ˆçA<&f倞$ìåjŽ:¾¬Æ Œ�VAŸ‘䇻+àÚ£g¨a•�1tJQ¢ø¨›Œc@å2 eh½Eð�n¿2 ]ÉçÌØ$}¡šÊæv±a×Rj³Ž–2èVF>øÀÐJܾ¢Ûö„æuÖ.è3à<+![~ÿ> ù®’ƒ3è;‹œlsžè{ÙFê[ƒËµ£²Î¹<Ó%Îy³:¾¹ú¸êILr»¡/“D¹^Ù/´y0x‰)ƒr9W$ó ðÔc]üWJ<•x¥ô[•µÁ#=¢`ÜÇÜÅP áb²Þv` ÛÀçÃ϶ê{¶n8¨dosÒÍ<§ñlæÇÉå„sÈç;;;ûJ,ý²ôäÉæÚï~·®%د4úþƒÜ9á¿XP¿Œ;j ‚|G�÷¨ƒ×Çd,›e&à68¹}¸["èó6ù,�gé²=oí¯µŸlj™F-Wšh&'ù@9P%ßÃï½m�è§ê]OH“D�ÅyÀ*Á™�nmÿi{hŒ¤Ç—e} k›cïºØ‡yt–A²Þ²yqämë×mOý]n‰]N)‡wÂfU×=äDò e“tMg,q2ƒË�ÏþM;Bƒ=�ƒ=  ,¼&lIXWÞ—m¾¯E�4ØÓ‡Š~V=™œËÎî¨Jk*êª .Œž" °óùðB‘~˜›äÃLªG€ëm›O´y[–¼å_îz¢.VU_¤qÇß.?ÇÒ?t›" ¦ÁÔ~¢×3°0y`Ðd’ ˆ»tÉXˆGò£G+±GÜõ˜m=©¯ûEÐÞЄƒâð¼MÀnkÜÙ‹Ž µôô= ˆÁPº>@ÿº&ìÀïb+@w�4`Ø ¿ÂW õÚz•˜ÀKýòÇ®OØ4ç‰ÆÁð;´À-@Ÿ§Ï ó©Û5}ÙŽþr¹¢“x…Ðû˜Ä]uÒ÷_!2*[÷ÿ’.LÃnß9?‰üD�ùåÞÞÒËýý Ñ»ìÎ2è¾ähöP�NžÉÿÓ££%ý/ÀÔ es,ùxòñ£r™ð¶AÍxEù¾½FFŒ¡±$[Sb_Ÿ&>>מ€ŸµLðgR¾¸<4àb3ÎzŠFäj4’æ{§,¿Sz˜\5vnX7¼±uŠˆúŠSóÜÝ Ñ35èEðW ¦Ç"cà‹Ä]uJF{8кgwX¾ðÁsT?wüþÐÚS5Ê€«òG#“ßK­Q±:¥X�þâö!5wk”£äz9뀇X¨è÷ÊA_tLð-¸Ÿ�uMå1AôcõÏîÚ‘-vNÎ; cïk[_.Óù³�eó`–發ÚÝ]úîÍ›¥¯¨]F #›•ˆ†ŽŽà5MŒøc5ýðÔê›Û§v×=ùÌƒí§†©W†ÖfUò Œ/4à�…øÇÀ m<ÿ³hªž‹Æ…‹4�kìJŒ�eíªÙ§DÌUÐ}P&WÍë“Xâ+‹É­ÓÓ}Ó9Û|žt¨�xìØ°O@Ή€ Ϥ€<Æ�ðã†ëÿíÊÒ@DÐæ“¢Èò¾húÀ­ÿ(ŸzÈÞwûù•¹®~¯:0´À¼-@ßYü몛6¯â…DT ïv{Ôßá­3eL–i`[l �2š ³º¨K[lì»Äèò@éH†¬Œ|èH~Ê„}–e;Óà|Œ®züPV–YŽ.¼íìKy— Š öøáaüªt/´ ðo´pô·ZÒãÉí�8Ô£íjˆU‰{»ªaìÜ<Øš¦*Ð΃ΠûŸØ@_ªémw#ú=}[}ŸÕ00Ÿªy«§ÿËœëB¾ÖJ¾Ñ^éãÚ²pì²2&|ŽX.×.á§%ìržLçã6�1´#l¦Ëh‹Î‰¶'’Û{Hö´¢”|U1¸Êæo�‡ Àdúäõ5´¢d·_`2çÀyÁßw ´ÑÛÁ ´yÀ�ÿ.mnxš’2Ùïâ½+$ÙÀ«�ü™ (ÅÿÚ;Þý�gÿm]¿€S2ÂØ\/ÜõsýðUAoäP£ßëΔþoÀ“^¢B\‹ “g¿2¾ÞÌ7ÒÉ ˆÌzìMÛ6cë²2—“mkÇavä³?cçϼË—´e޼Æöƒ>GYxO°uBÆLøûbìøF¢ô+:ƒ¸°‘Qm²07 ÷¡‘@VÒ¶Ë~ÃX?øÓ°§ŽÃyK&MÒ�î[¹Q¡sºesúÙ£‡üÕ·¸»v��`ÏÝ>wÿí 6Ü€Y6=éå*G7!a™1åQ¥x+€TbžùÇ €ž»ÞÅdäª5´ÀÝ·“h6 2 ¸d¯@ñwÃ’�y 7¼G€ë„þNš¸ÉcœóøZõµ.Sio_Y^Òö‹Ú©ä‘sÖ—Øö–ªÈ@IDATC®3y\'×= Òe8Ê:Ømè|ÆÈIŒ7ä#@zH¿¬s£›“�êØ3ÀE7ÜÕ/rìÉßGÛÚMãjÃß €«¦¤� îæ�C¾vqqù@›w"@q낎÷Õ� }gìLŸ4nƒxl üª0‰`wü`ýnÓŸŽ1z!rçŸã s×̳Þ' êÕ.�Æ„—2•¸Ó¿PÛÇ—þT7ßùGÛ«NÙW­¬A6´À¯Õ1I¥O©{VµG`�I@{Mb×%ùtMÄ>áy÷�ŸëÂ7®+k'*oÿÉ“¥­—/ãÑÛº?¬iåÍØ¶9t`ï<Cû8lc_–92ÞõAËçkÝ6ÈHŽÀ`=eè¡mk‰I“/0�Ò“�VÆw¨íBä5p€ÏEÛÈ:Š3�vWÍ|T›~tÛU€am=ñ“O¦ip üüa†Î%Ϧ¹æ]õ.1ø\@Kô6p{×Wõ�ÞÇ E°'øëÁqîãS¾Ùk·ÊEýTWÁ>ö h�ä[ÿ<÷gµ‚|Ô?çÿõ|-ð![ &¸Ln�Yõò&Á¸&U0}œ=Nå ®é+x¦kêPnôNÁ8Öþ„§‡‡KÏ”À«šÄõ%þMc L+³«wkWòŒ˜¥,û̾3íë´y ¶§Œa‘#óqÀ;!wŠñF<˜`ÉÑË$ÙÛÌ®¤� µ*�¡”#su2�Ë#OÜ Ýf0LhÅÜŸJœõÑÇÖõ|n]§ÿÁÙÙ%Aq¤e¼‘.Vîþy½‡�Ú|6 ú^ þÈt Á_R¼úÇ„€ãæ=H㛳»7¯Ê<1‰+@uˆÏ±ªÝc×?¼0Ó_X ?C |º-ÀõÅÞ–žé׬ø ¬kÂÿ7ÀA&ÈI\¦ÃVü›5=†x¤1Ïþ¸ÆLcíë.Ë­CæTÖ¯ämgŒ>ƒëvÙYoÿ)…ísƾ–< `zкĵ‹97”�ßUÃ�iªy0eäŸvøa4íg˜Ð‚]t4¬û“µäc'èæÉÉå†.ÌU.<.V]8}V>'ˆE /“"t:¦¸ëç¸t·Ý­DSÝþHÝÈ5Onxt]ð×`Ç•üQ�øÚwÿìà<°ZМƚÇA6´ÀgÒêËÜõû“ÂL¶Kàfƒÿà“Ù,Iç¨àèPæ)yxà˜èÓÅ'º¦vŸ=‹Ä&[‚?ã[Fªš¯Rf>Æ1%¦ž¥¬äñ� 0¦52=+òÚÖíâüÈ‘y¬ã YNþ1öHV^FA›‘uQÈÕ *9á+óÐ. ì*Ûæ&åSF¬j1üL´€ØeÐ 0—ËãñɃÑhWèkÍÐÿ²|~þPâ6u¡ò¡¼-ÂIúô¡üìþw� ¬.Þ­(вüï‹0.éP.ð=Xå»Á�ã2 çª #/Õ…÷þW5HúÙ?�ZàKhú¹¯³Øp[]ï`ižDïw„ˆ+A“&Þ'€ ä$®­ŒÅÆêåX×Ö˜‰¾øsÕሠ�xäåÀ¾À@Õg£Šßlo…i0õ7o:4õ ¬ŒÉOªzÀut5ì2¬sù`ËóU@F«q=ä*�×`¹eŠ«�q.�<Îg? ãÏë–uáÛ?C± @F×àÆ^:99Ñ«¹ãýü¸¶¶¦?�[ë¹ÐךA¿ÒFÀWòóJ]Ã'Òù}¬Á Cy×ßÙE�k¡n0"ø+Ñí=8awàš¹‘3ŽËŒ2)›:(ðÇò?xéü¶Â]Ôeð1´ÀçÐblC�>&é¾nUy®KÞ$àÑ€±Wr4™výr :¨²ÂàUò0¸•~à}‹œ€l‹ÈØ6øÎ‰åD¦<‡7v% ¨Mr9ÔÑeYNÆ,«Ñ>f×-eAÔwè¸ÎEbk¨Éû®Í�ß)7ù&©ÕŠI€×Ë G£Ñ¾ÏO²Ÿ��mŸ<{ö§ÑòòŸÎ–—5}^þ*¹üôHO84”&>ú£»·9øFàý‚ì¥P€§|î„"ø³4Ê�¿xRÔ• §×ÒC�†ø`-{¸~Õ÷Y Àw×­J=ÓÒ½îVš ξ¤ÏQˆ 2¨•×2W°'Žv`—g,Ñ5°ßv¾ŒñK"Ê‘XNåEI{"x__ã L>O¯¯¯oëüëé·ßžèëÖ´ð• /8‹Ÿ$ÐGÚ~Á?Mb" J3 DýÁ$î² À`º|kÄý¸qk˜ËŒÀ© þ¬Äõ`h�{Ø\\�ñ-�bìç*=åCB’ó-žå¹Z<6�s;¾ü=@î«.ç·_œ` ›U¦óÙöþ~ÿþ¡d|„‡I€¾¿¿¤/ð…o—“ë*UwŒÈ³ë,+y×aNdz"ÿ®®«‚Kàjàvš¬´u5ÈÃiÈù±Ef¹ºÂÍ^ &4e8qNÙââôôôD‰É¨þ rieýïÿþ· ’{ÚÀ_C’ç“zïÇ@d·M°uràß­`£7\ýwZCLÓá-ôÔ…z0Øé.gE‰�àÏîhê¶ÅÂágh�/´|�ÆÊXÏ1òv€V'ySii…ÍÊÂ\-D0×}Ü Ç>Ë…¹öØ0Òµö¾}#`Wßàm„œÂ�líSä5ðun[  �Œ­Ç——ü ø¬�˜€m缬@SNŽˆb;ÿèlƒ°Ÿ’e�¾Í¢j�D<²´ôJ�$NTö©&I#%æ(>l0‡¸ä¯É,ÏvÈìËyðÀ£'¨_è´.6·ÞuLÃ×––_Ïõ K"è«dœ{Q¾ÛW”í–Ýiïô¨Ü£ÝˆV9¦£LùXî×Îä$ Fþ‚Z¬Jp"ëïwzƒ³¡>Õ`‚̵²®÷ùþXÈÑ‚kž ÏÄ Ã[æÃ@lÜ~ñ"> 4’¯ÇÇÇWI+ ø!x=Žˆœð3käÈz|p÷Ï�ø‘¬< Àw\ø ì à=Æ„ ýäògÚÉYÌc¢²ËÿתÃè…ª¥;Á•½«È¿{ÔTÃÃÕ„&{¦ín\R΋oš Þf[d0LÔjpcûDfœÍ³Üy²þÓ¡ üª�ƒ÷Üßr߸³àn›¤Ù|l'ÝißÅÁ¸‘Œ¯ùôdƒúx Á‡�¢¬j0‹gÿªº!ø_k½A0´@´€'0\3\+\ÿ˜Í�|K€;è˜ h@qTáÃ@Çí`¬ëíH¯:¿ÜÙ‰¤·ž–6ÒÀ‘Íùå¦+ :C®CIÃ�¸½fÚâex‚= Ê�&àÃ3–x%À¼D�βŒÑÏìK� ñcEÛ¯E¬ªŽÏTçŸüR=Îôxb_«<1ÉÍBÉgô‡HrÛ;÷Aw † Àµ&éŽQ`Ó(ÍgY—éS%èm,ù1ˆÿ-í^½‘`Ojƒ?�Xflƒrø¸ÅºÁ2®6&å‘TV¸“a°Öþ{Z^þ¿Eu†¬C |±-ÀµË÷2¸~.uípíg`“ ·Œcþ ÑD,,Ä™éz#øê£@»ÏŸ/�¸1 øk%àik‹=wí¾Ž¡kãD–M£ó ÏþøÁ+ʃŽÛ]aÊ%ø£³_0iòˆ%H`[‹úxû2–Oþ î±ò­ª.Ï49ùNº ÉÎ5!á‘°›€,T—jgYIÃß6ÉÅÔÃF?Ã`¢9®1œ¼2e#ë²ìÓ ‹ ÞÁb@5í^ÿÓ`Ëê}]ô1 à‚×@@0fu`Ð AQǼëŸr¼â€&|ôgMi€¡†˜ÝL’™@�jÀõu¦`þ€ýº¾ø(c#âÿM4q8UâÊ?”Ýš>ƒÎ�ÿC}è‰Vذª|úo”HØMóR£‘)IÔ»LÈ�Ï娀~ÞqȾŒÃAëÃt‰[ÿ«*ƒ‰Àšøs•ýDø¡U!Q ÌM#ëKR]Ó!ëƒÒ�ËÏàÞL4`NX¹Q-¿ÊÙüEðÿ©P°íEÁ_u›è5ìí€ÁÀAßÁ¹mnq\¹ñpãF4fF8ð3‰çþœ˜Ì3i< ¿C -0«¸Î¼G€k�¯˜²' ö°7@A�àJÔ39?ÑŠÀ¾VÖø¾€Æ‡'š È37 €þ¦ÊçÝtiÝÈ?Ñ»ÿ.øë¢î–ÿ™è("à�|×Oà7�ŽûE�Æ1˜Î ´êæ�:å €ö—‰ÉC -p7-+º¦X˜tüWø—´)0:ã†Ò]£+Â|€ äŸO�$ãµÀûû±z0O­¸ÎûÆ� žØþ¸Ãçõ?ëøÜùmY- ¡Ã`_¦3†j6�fò×>³T#Å瘟^ok šâI c@ ež7ð;¿q_“eý4ìza˜Ô›Æýc¾qÃ׋½;iµ–Á_wûqÇÏ@ »€x  ý¶�/ÓnL|›f áî?hê¤äÀïåÿÛ×è¶G4äZàËmnøs­ wžÿów盇‡±ã£ÅÜ�çô›·o—žìí-­ë±A\ÃÒw×u…ö5lZÚM%qG�=‘Ö‘Ó�Ÿ;/ýcG"�ýÚg [&óóàYÉuk'T/'W3Ë2Myð€å¦ûpiï|Æä2ï<�fÆï0˜Þ@¹OL·üµÑ+˜½·É½$°.ðö}¥n×?+èn¾¨p‘i»Ì�´Êc÷qü£_[/?ï/Ç# Mn['—=ࡆ¸ÞyÀc‚ÝCþ‡ºËøîÝÒÃííØ@À ­éz}¡·ø«àu=0äkÛ2cë] �ÑCS&8ßÍ;ªr—ïÕhV|çŸo¿]FV¶‰@_ò}ùŠ ¢ªø.’}÷ùGä2ÉU�ÌÏÄ࿉è @î�¤þkûºöW�Ɔ?•ËEää^C@�»Íú—y½L ½Ã`›$7bIÇÅÅ$€à¯ò»êD»QWt -0´Ài®/ý»iì 3v<&-=ÒàÑ�?ÆF<‚0òÀ�õ¨à‘îþ×…yܘ¯w*Y^ç\Á–Yœ—±°˜@ÏÝ?c˜ƒ½1öNØÆX"l5Œì¦)—¥:pHT 1ô¼I¦�m�FØ_Ã5¿¥Ì_®é5˜MXJçY¾¥øc1]°Q!a6íÄG~,k+z*ÝBÉ#®Él? Ó(@ gYКij~îôÕNüÙß.ç£?±/¡q5ü-0´À‚-pyv6ºÔŸ–é+§çš pÓ<7¬®Œß½ÛÔk~›Ê¿©Ì8 æÄu\Ƹö‘ç„ 7IqÝ',2ÆËáì‡HèÊ1Éö`ÒÓÖß÷5 ”å~^?âƒ?+Jñµ?mBòëI7-wÈ7´À}o�Ëñxtv||p¶¿¿7ÞÝÝÓD€•ô ¾<³¬£×��Wþüó MžŸŸœ¬(àmaÚÀ×\d8—ã ¼¯õŒ%9˜VtöÆí�ód¿Óh²MÓS‹í,3æØSb�Û|‰±1Ø~m{ÛeÞ2ç'ðGð޲ôH'°6gr8½0L*MC£¹¥vèÃË£Ñ%ŸÈ\Õ²ØX7VþL¦ž�°¼ýOô�kîüyu'z„'r½¡(¦”•|a>“õq“Á�–iËè£þÉš>,ïý³@RÛ 0´ÀÐ7kýÙÏèüððàôõë·ïÿò—7g‡‡§º¾ó¥yå¸ò³6öm<~óf|¶»»rþþýC¾§9ø;(âÚ×tÆÈSJW62C¦³Œ¼Î�<Óðö›iËæÅù8œ§”Á;ð·+Q¶ä®"U(iËŒ³Þ20€Î`zš=¶Ö{ 4oÌáÌ„a0½‰hDt\² fseårMÁžÀu¢Àëà¯÷j¦å½;�ƒ};  W¸'ôa ÷Áß]…&=ùâ2æ¢ZU[±ìÏýlêã"|•l€¡†¸} Ä ÀþþÁûï¿·óŸþÓšø#5v^ˆ ^öóðùÅÅÊøòòáùåå @O0Î�š1ÄÁ=_çÈÍ‹œ Íƒ Øz<‚6Ø�y°ýÚ.ó7¡9òùØŒóñ›¦|Õruk´uÙÖ²š½íÀ%d{tæiv'û.óVùaPm–©Â²_-/y +dUî Ó�ð–„}&Ì]÷@îÝ3:¬»íØdÇÊw× ¼‘t·]{Å.Ž#U3Q’^‘Ög �wüñ¬_e‚Yú'èÇ’?2ê6ÀÐ÷½ô¼žg÷º‹?+˜{ùÞ—×Ìíìl�Þ½ÛÒòÿáåÉÉhé쌸Uæ/ùίîtùw»s|Á†m¹lúÃW«£Þr_É`‚¨;óÐí«ÀôÓ>÷GvÛ:49ü-ðù·Àå¹¾Æzz¬eûýñþþþùÁÁaUe©ÞG«ëÇ—_ˆF»»§¿ü²3ÞÙ9¼�‰cÄ´ › yùÑh¡ÑdéR�ï’€Gà'1 úoï’žxÌ¡ L‹�€< °9´Ì4™ËŠ#�[gºÄÔÇŸ±åÆüðÐN/¿2�t.à�J¨É°±¼Äeþ;ᇀśÑý+çt̲Okà?ûa2à.$zÏDjï¾ã®_�7^ÿc%@“‚Ú À¼•ï;ðÜH¦y<Kþºëç™lþc%€Iu`h�¡Ñ489y¯à½óþçŸßœþô“¾80y¹A_�þìèèäl{ûd´µõþâädá €‚à…)&\� îþqFBFr3æ;‚Ir*‡p>l çÃÎcWw@­,óä�MKøEž•ô3æXó€Ï1) %ðá'Õ5r›k™>„`˜,Öª¹ÿå>·˜—»°öÝ?ótîü[Ÿàj"Àh þzæ«L nQ—ÜvãF�/iïúgÙCÏü™Ä�ÿ-W \ö€‡øZàRßâÕÆ»cïí£üÇŸ÷ÿËù%Žk2à——ŸùÀrq¡eÿK=F÷Û4\ó[“¡¹P¼$ð)è_¤ þÜù ‘;yÜAgZdЮ¶¦±1o{c*m€®U™å¦k˜2sÂ&óÔ¹ä‘q¬ú<H�¤é…\ýlÔ'ÇÆ:ãœïƒÐà§YÓ›¹aíþÕåÔµv|~~þVÁì¯JÏÔq^èeÌG$E¸Ç2dõìÎ�^’SæË^<Á–É@qÇ]ÚΪ¬;ÓÆ¥Œ «k4Êgâ¡;vû0´ÀçÞì¸ç½{-µ�Ø|§;ø|)pMNð½ÇÛøóÑèd´½ýötkkOwñGgÄû(±Ý•ró¥¾�·<°®Ù3¾c¾‰‡ŒÚ¢»!Ù†‚b`dNåØCð¬•Â36ØGÆèá ™¶ Œ?¨éŒ=ö€sÊß4˜DÐwà×ñ^ˆ>%‰éîÿ½Úä�ð2™ºx‘°¨œÌÎc<áðC0Ã`J«“NJ-éϳF‡ú#�Ÿe¿¡tª�³ß�——¿ÑÇ€¾Ñû„¼pç‘΋//�{g¦É_k d¾KûyËì†øT[@Aÿäüèè`|pp çõûèî®wûÉ»y&Å��>à3Ò®ý�ñÛ·»ãÃCVœ‰KÛ•ý4Y™ß|Î×ÉtìP›ìk"�'®Æ´ªfÝ4ûl÷Aéa0óæ~•OÞå®^µÑ$`¤¯néûõë—¿ýíû‹ÕU=h_&ø—ƒÁü%ΰôES»ø¬+]øb2.õ³ø|à¶-eeCqñ•2çðП{ hÇþ©^·ÛÿÃovÿóþáüøXñašKä*ÈçKÆôf áä„WIŽ]8¼²iÜÏâ] ÛÍË3¸PÀ;T°{¯›ŠmþÍG*_iC²çn6{HðsŒ%š ¶­agFWB> Óà2¹ñ2vàGfÚ˜Áš“GÒqzàHÁ~ëhiéG-‡üUeŒ•w¬<blχ£tçúÎa˜ÌhR]‹|°ìW™ÇÃX�t­ò·Xúªíòò¾.ŽcMÆú‹[ŸÐ%MQçGŠìö—©wü×.œ�ùY;ÏÛyÞÏ«v¼þW<ûï+uV¥­Ï:§xÖ¯òøàÏ%X›ÿâ5@=ûW›ö=ȇøx- ývççc=ÇëÎ}¬ µÄ‚ îâY6A+øo�··wNÞ¼Ù׫w‡ÇÇ 9¯é�…©£Ër}gñ¶ ¬ wN�0ˆ�wuË»¥�€�4¢ð`]¸KØ…uñC¡LèœÈ “±mÀ–¼ÌSßì>'N.¼>˜“•?wü+i¬¯'qÌJ;�4è\äâ$îªçê[çªÁ¥¾‘NÊ-3.óÀçzXoì|UÁ¿û«_y,/šŽ'ÀhÛ÷þc2€Ìévµ¹–Ûí†áB‹ÿWÐ�÷þ?ŽàOà�Äe€¡~åÐ;÷gzftúöíÖÁ?þãOÇÿëù£;®YÙµ¹†²L_Ê9=;{ÿþ<>¸3ùÉÝ ;9Ì|�î/s2/v9ÿ<|¶�^t=_(òJ‰fH;ºÝ_ÓhÁ_ý™®f×'ü2Y`ŒšäI€íÀµ$q¶í"ì™iÆhp™rà÷À+<¿e @¤cÜz§gþ?/-ýÂ#ÙòV¦€‹*±uaÔÚY†­aºf›eø(/ê3oðÇÙ0p“.†ó \,ç<Öyò­Ä? ®isñšðª0ÏÔ/µ´©]Ö÷E´�60àQ@l3Ì: ë3†Î‰ÉËþx¾úÇ’?ñëÄÿZà.[@ßÌÄÙyŽØRÀU�žZœ‚ÿ�žáïè»ù»'?ü°÷þÿï½"ƒ»8Ⓐ즵¼–e}¦­Ÿ†kº,ƒ^ýx#àT2†š— üÚøT{žjðDÜTbbIÑi…ÅUOå¡…˜úÃqTâp.9ÝøÀ9Q<8'þö¹ÿ¹ü™ÒX·÷ñæƒîþ·5ÙÙQGØÑlp·p—‹2-“‰*Xžq¶™E—zxÀþLû�³ÝLFä™Mô+´�?ž÷kÙãôté±þrøQ›Nµ¬IAv$:CyÑ”|¶�‡¦W%n¤Í/:>ìŸõÕ]¿ŸùÇ_üKþ¹©ú[€WðôռË£££³ããCMšnZ™ËøQ‹ }qOKÿ[úðξîâYâe05”]¾&Ã~–Î6%žæÏ¶5Ël3Î6Ћ‚‡ð²Võlü�‚ÈUæT ÷Bø¹Ò3Ѽ)G'0‰€oœƒ¿épNJÓù ÑÁ—©,�€�ÌnãÓÒ?AŸ• –øüwüßè¸ö4)ð’¿]RT¦]tM†°M g}¦�༠wõÛ'¿²˜A € ô«ªÛIÀ²þmpC{“ž.½Üß_z&|øôéÒ�&ìêêì æ¶õ/{¢ý¹çG™ª Ÿ÷�ÝþíÝ?‚îüµ*0ÀÐwÝü[žÞÁß×3ø­“ŸÞJ»ø¯ºîädàJ®Ê辑޷?Ð$àðòøxÚÀùr—Ï2mšÎzã>ۚϜÇôMpÎ=/ä‹×ô²‚䑼U…Ù1¿÷liéÙïÄ?ÐÈô”]�DFGG‚ 4«Æ8#ð;ø#ï �Á „ ºL¹Ì2ø·wýùU¿˜0‘Ñ3ÿ·ZúßÖ$`_x_Í ºêû0jÅ•²’ÏUÍ´í² °lÈ2ÓèLg[癊‡ ÀÔæù•^`ÓŸ–üYxªÀÿÕîîÒ+¥mÉy 0R e• –ß+ÕõETQÍÕz“{š3›{ÓÏü×õÌŸÀïçýà†¸ëÐGsN´û~OË÷¯÷ÿëý©ýã®wßÀê}æ'tZA¸Ð[cýyÎøâð�øÀ@op°º,7_“YWâlÛG;OÖO“Y7 £ì³á¦ÿæ ×t`MìT�sO�Ö¿-ÇÄwp{r­Ñœ= pðwà7¦€‰ÂZÞÏÚÉeº°ïüÁÜý“twX—sö6èÞé™ÿJo¥÷k€˜Ùu »¸šNY»v¶Þ2øL÷é[³®æ3Îy³|.z˜ÌÕL׌Ü7¯)îD €¾¢»þzÞ¿¢à¿®»ÿÇGGKO•ž)=W:Õ¿é=y²´&;*ãÕW±>y_}íÏú²—e¾£5!‰I€°ô?|ëß­7àZ h¹þ‚;vásm\âù=êB À½§]ø»ïúiçð¿ÿ÷­npuI¸+ß*YóW“q^z¤ôòà`é‰ð&›åœ ‰”+ä2]1cËçŹešüe�óUbl›yËìîo °iOKðG<‡×sü#–óg´FÙ—´yï­Òöù¾^Û^ü<гOwíRf~–]Ö×òXfœí˲³ÎöÆ¥­å5óLA÷™äë(¿ŒøË|÷oŒc;t­aÜ üø¹ãw¯4¾px¤:ñìG+¯µÜ¿'¹ïø=œS„i»w±ÖYoÞú,·lVq5;ëJlÛR>•ç\ 0_ ¸/–ýr¾Ü Xñ~ÿ†>*È’ÿS=óªàÿ\“�§šo3pð÷…b×® ùÛbz”Á½«&+{¸ó xh�©-p~~Æ;ø£ÝÝí6ˆk,NpµŒŸ„]ÀŸàÕøNõíü9ÞÁw÷�†kºY²YzêŠM¶+é’wž—~Ð9ÿ4>Œ“½ù—Éycì¡Í/+ˆòúœn¤ãŸôpò¥oì—hl´B‰»rx~c�iÆ2¹*@tí óøƒ_xc?QÝI<þäˆô{§:oëQÏü÷$cjwÆiÚØ2ø,³œéÒÆú+[ä³(ù,«é"Ó~h�²XÐÎý#ýëÝÖñŸÿü“–ñyåÊpÕí®O¬»Ôk|#Ýý�µpÔ~…¯ÓµŽ2ŸiÔ™Ÿ‡vž>[ë�ûì�Ï«³/ãœÏ²E0¶7�rhÉ|ÐL4œ) èqÀm <Òk‚üÚ#�Y¯þ^Šg¼`€ñË74`!ËãZ.¨<øY=ü�üDu’>+¼îÇŽÿ7 ú?hƹ->þê,“ì’âÌgl½m�e¹icÛ9O–›.àÛ`œ¡Ožmªô0¨6Ë•P›×èµteTR Ò,ã³{?¾Ã/úC�æŠÇ]¸L™tÇOÐ÷ç} þuÇÏà¹V^h@Q—V•ß3f_xë6Úá_Ïã§}÷¿ìA©6AZŸqîe–s,”©-³«Gétà?ÛÐù¾ŒgôºÍŽg÷Í`WO×-JE��Oðîé#<ÛGþó»Ãÿößø�}“µF[ÎtÍ>ë3�mí'ë3=˶¦·Ì¾3Ÿé\Nik;ãlkÙ"Û›€‡šFÆ €F­ˆ³ÚS·´ü�Ò m|¬ý þ_üs”„VFV<ž1r= 1z�¥ê_è|ðmC� “xÿS#nS†'DtÂ<óWàgÓß/ÂúØß5·9hSŒycËà³,ËMƒKÚ²>¬,‘§Ô#Ï�õ–#›† ÀÜMÕõCõË€wžàëº" këË…Þ�?>+1ÈÀ†¿uåY#Á_ÏúŸé®ÿ±ð†¬˜)û™™ž%‡7|ù��þh#^l»O�¾ ¸'eœ{åèï�ã?øßvÿó­ÿᵿ›´ö'ž‡¸?¿×&»÷ ÜǗ•»«Lª®ßÁ‡^øŽôúÝ[½ƒ =ùî ½}Û§»`ic;ãšÞºÎ2è’ï+¿f×—ßò2OÉ»îY>�Ì65œeЋ@@Lƒ§Ñ˺ûæotùNÀCÙr,�É¡¨¹Ìò|;ž-·ãÙštl"|*o<˜”£-´€~x$��Žø/ó$ÀKÿt®v5€÷ûß(í+?¢ìR¬«˜ª¶ÕíÅäϩ̓ó×t–Ýææ†a0»©Ü÷°4 Œ®Õ¯ëùý¦ž×?¸¸X&ž)�õ~¼þ/xéB�š3��Õvú?ÒÝþC6ûñì_ÁŸ À¦–ýü=Sö$À• _LÆü¢» @.l ízgSËÀN[¼÷¯ ÿ@)¾ø§òãc@9ó@ -p© Ï+w»|9ïtk‹;§ ÐÊ�» òLëʘЅ^Ë÷§£·o÷µ°¯?âɃ±óOú¸òi98ÓÎWâYvÙGi›uóúÍyjþJ½ýÖl­3ÎyK™ùÎ2èE �s¦óðczB§@|Ìsvt©y¤€¿¡U€¸ã׊&A?he➉Âou€Z<ˆa¯›0 ià¡LX9z§|ï$ã £³aÇ$ƒ•:X>öÀ¿úíIŸû\nWhEdÚ<Ø´õg]I›7Îù2­",ƒ1 ®å� ‹ü €)­¥m¢CË>§œÛ¶KL¸‹_åQ€î’ þ|ßà&\B¬0à#?ÛÛKÏ„ŸèΟgþ^pð7öáÊðM€ø÷?•µDâΟIA\Z]ÕÊ¢gòîqºæ–Å €ÿº^I\ô(Ž•ãõc�™ÎƒÏ§ôžÞùhô~¬ Àñ÷ßÿrü?þÇ/•Êç.Ò¨¯¿uôÉ õÿÙxŸgø§Z ¨­\åi¼™÷ÑX–º’/mÌߕ߲¼’ŸV^ŸmÎcÚØỹË�³, æüñbL6=™¶,°‚¬VÛ—.„c"À- #cX‹ÃZäÁ§ÒñÿëRðƒ^!è0A='EÁ¥÷Ÿ”¾Mœ':â;Ñ�É'%›yæI"Ô´�ÛÈtÆØØÎô4ì¼ÎßGÛ¶+k@Ÿ>ûåo°›8TZ þXD‡jqtÜ‚Æ&`ýøxy]Áw]œ€H€¿P >ÍÝqy†øÎ?¯ü=ÒÝÿSmúcç?›g˜óì¿\à ¹"5¦Š#è³   ûØ_ z`[–K> ëYÊÃ$…IõÍö¦»Çø×±p×ö£ @þÆåðû‰µƒúÀE  å8q¨«5ç[ûìØçïßÿÓ?½Ýù�ÿñ§dèî�Èômp™·ÏoiŸe%�ùÒgÖA—ü,{ëkyû|Õl§ù±®ÄöŸå™îÓc3 : ¦3.iøHº½~¯Ä#x6wæ!«³imC§±î…> °¡ „|Eð•‚Ó)«�NµA¼Ã äJ[šiü¬�U4Û�Õ"«àöȸ¤á�²´¦û0y¬sþŒíDz’·ü&¸z°Ó„Ã`Zë\u¤Üɧ刎ý@+«Zˆ%r&z®¯ [Z‘Œ`Éž€ ñÜooi•-4L¤äìãŒNï "ì3ð!�!¶é�üfÓ`Ò™‚ù{ÕíD ÝàOsôÎý{îâõÿD|Ü)u5®OÜMÔAÎÎOß¼yÍŸæhÇ=Ë®tSÕÝdàDïîcz^lŸÆe¾Y~�Ïv™·¯,+é’wãR_òÙnšnš]Îg;ã¬3m°Ü8ËÂ`ŽŸ|a›ÎºÆ[nLLgÌp:u¨SuÊ]¥Ÿ%#6HËEt6òWÄå]ýOŠøo¥?T¢Ocj œÜ5Œ¬/á—„Þt‰çÑÙ¿óšÏØå”2ç¡LÛFsúrV/«0L* ÔÞý»óäÎZ£ñ`yãM�^o(Nj“\{§¼¢à¾¦»óM%–ë3°ÀÖ˜èn�³ËY°ä$M þØ•ÀcˆgZQx¡Õ„—š\ð/‚öé“ñ©ùîóç‘X©€Ïz<«<ó_Ñ C<ûÉø´[@wðcm´;` _Ïðwõñ–Ü3¸{¨77Kô­2ä|­�çõ'¯_ï)ßÀ>j¸”á¾”ÁgY¦ÛêLvË)ö9o�OtN™ÏtÎß'Ï6³üe™.}d�iãš-: ë2ʤ7߇=ZŸÇ9ë,3ÆÖ´qä“zêvŠh#&Z5`È‹ßbdQ€_Ž�‚ÒGçdŒTZÏòÿŽlôVßÄŸ}àöAíTò–l¡3†ÎÉzÛdÞvY]KÎoœm�ÝYð—¯hhðõpFÛס²<ìµ°Ìóÿ ô8IkIñü}/ÁÔ™"¶ Ьä :®.'x'û�è¬Ëô[½ìòí›7ñ]÷$ŒÝ»Œ�t7ÿ@“‚ÿ‘–ó 9wþlö[“횟ù똘 ði·@LŽŽµáî�þòöõhgG¯k'¸ úœrúhƒ›AŠ=,z^ªà¢I„Ÿ×ÛÁ„­„™Ï4öóðØÜÄnZžÒg¶-éY¼�c–]Ö;�1º¬/é’w¾g?耜7ó¡Lzó}¸bb¸j�MÛfO}¬¿ø¥ ™"Û©FÀ]�ILö4ªlJAGŒ ƒÐŒWJVžÙF’Jd{®“D× ·Ï4©-¶£³ ]ÉgûšËJl_¥Ü¼ýNLnrçïVÜuìNkLGíKDÁЭŒFlha³KÌ\­“ìLdМ]ŸyŸad�Ï;? #ÉVâ+¯¶¶–~÷óÏñ7ÂX8år ÷õç=<8fEÂvø„¦L?ógÃ߆þ‡`€�ÓjNA>Ïæ³îJv�Ò`¤¥ûƒ“ÜÚû‡øQ“ÞÕÎPžr—¹(ÆgÎSú-õ%_æ-õæK¿µ|óÚ–yK~šŸymíøÌ7‹w¾“ÏyÑ™7mÜXLÚXVb.{ƒi?ÈM—ºÌ3lQ¶mM#/eÚ0À3üøŽ€p¶Áp¾L#3Ÿq#½þëö—´eç!¹‡Ð,ϲ’¶¯šÜ2ÛÔ°mÀ€ë‡6¿d˜ÔÛÊ ¼ú»¥¥¯ôDü+�•¯Œ_jsÞ²6©¬h³Ê2I½’�V°°¯{ûÀþƒÒ %>jÑÌ Z,Yô`¡À>ÛœYh>Oà±ãLs»m?øS‚´<Ðòþ¦Je)~]‰÷ðÁüc`|AP�üüßådœ{•ËWQQ�lWÒØ ð‘Z€)¾þõŽoåë]ü=Ëï–ïõ¸ŠS3 B?Ò?æ�¾{÷N¯ñ\¾Ï Ëé6؇O3ò,»)Ÿ}dºÏ_¶É´í³¬¤KÞyŒûôÈÑÝÔÖõ0.ý”|Í®&ËùÐjrËl3/fø2†.yÛX¦Ló aæ�­£wžlk×ß<¨ñ–‡Aú±�Î2h'�5Œ,ËÍ÷aû4v^ó³pö›ëfä0èo·èT_i Ý©/�ÿV¦«àü‚>“cÉ|§Xv¼ËªyÃ’>„ÕšíÓe¹í�ey�·­qiß'/íJ>ç+u%ŸmMO³Íºšý4:À>¦Ña8åÇÓC×ø,ó�‡Œ:�‘™6Ÿõ%mçQöðƒÜ)Ë t5pÛÔ0²ZòPXÃȲÜü,\+g–Ì>³]íç’ €éÍÄ&“UîþäÿV½éß(ý=wè}îÒ59pð *ÖÇŸ “0禮â'z,: <›dÂÖµÊÞÅ öðÍ�çzÿBk¤—JL x €d€ —“}Zn™ùŒÑ ð+´€ž¿ë-’øÏéO?½>Ökx©œ"u–‰•€FÖ­M#žßëÙÿ{õ=j�ºàü5\“QÒ49º¬Ït™7ë¦Ñóêì?ÛgY–C—ü]ÙÚO‰g•Y³ï“•rxƒ�«�·Ü˜áÇ`º†‘e¹ycÊ5 ®ÛÔ& Îkó` Æ[=?n�F–“‡Åi8ë Ë”ý™žÇ¦´5oÜsxó‰‡ @½�ºN¥;ýU1_)1ø?•þ½”†k'AÃ'Y<�]l^Qž‰^ _gðYÓ;X`v‚1Pâ-¾ðLø•ð×J¿UŠ«GÞ`¿R]+#÷BÛeŒȲF2ü~Œà €>¿û^_ßÛ=üŸÿóõÎøß§r9-ÀT¬sÈ·üý=ŸÊ¾|Ó|ÍÊ[ú̾úhçéÓ—e–v³xû/ñ]ù­ù)ëT–m¾–׺—¶¥>ó%]ã‘ÍW5œeÐeÂw–Í þ_¶7]æ³ ÔxËà ýäóbq–¹�k˜¡y gt™œÏvÓü×t–Ù/ü�^ý#Ÿ!â„™+º//¯ý?ZºWp®^õ\A÷µË¿V«ÿN-Î’þ:—¤Gñ¡~0‰ÞšSî�¹ÇʬŸ]Ðî%>Ûö�_ûÀ–ÿ`"²&L>níø(6«ž €�š_ûgra ÄGŒØá¯Þû_×÷â5@ñÌßìÀ×ÿÞñüþTÏòO‰çsçÖ�=_ÌÓ+xo´|¿s¾»{¤½^ §¸ ®å©Éì?ë2m}‰³ tÉ—öæ§ÙÖt}~KÛì¿�ž×WiWò5ÿ5Ù"ùjù-Ëx�nðpcL^Ó`'ËÍ×0ÇŠÜÃXæ3]æµ®”›Ïe›Î:þ ¦Á%mCbI—2óàœr¾>Ëmk\ËÙîÖÁŸ&´B=%ÀÿFgà�꥔ê�êeÿLø÷ÂüQE}-ýw¬'ÐôîœÈC2ÝHš_Î8à3öÙ»'€sYÐNèxAðä„z’(×¾ñ—“}»¼°ÓŠ_-\цÂÚSfƒ!ß2^ûS.çç#}÷þ@Ïá÷ÏôïwÚÄÇç1mŒ]¶Í´mJÜgSÚÁ¶o¸æ·&ËzÓyØB6�G7o¢|lóD Ó}~°J}–™Îº„ÜÐæM—8�5ÚC*ùLÛÎ|MçrJ[çáZw²Í�„Ø1@Û|èÿÕÍ´zÙ+¥¿Skÿᥠy/ØÙð”ÏÝ5‰�zùN›Þ‰ìTöTøÐ cŸéŒs ¦'�z@£çãÛlg…BÃW zêãžfŒoû4vy¼Ïà×þâ½ÝýÇ— µ"0LÔp @ûþÁhkëíû~x«Í|œ&ƒO¹y5ýäó|­\èÝûã³ím¾Å?ÏGx쳆³,Ó”Ù¬<¥ß’wÙÆÙ_i;KWêï§}—e”|Í®&#_Îk›Y¸Ì“í3m»,ƒž<\•Øùóð†,óÓh†#ôÔìá)ç±M–Ù^Y®•eY #ë|º�L“ÇC¢e™/ixË2®ÑøËööoŒŽaÙɶÍç¼¥¸ &m+ü!Ðù# §ÿ�zàÿ­ô©‘è.ú�t¼ÐÝqÓx$zª?Gî½Æá¼Õ U�3ä�é®ÈÆÁŸÞÁz°ÁšmÞ”Iðg2�¯ìÃtþȢ퀻þ ½÷Ï»ÿ@4SÓTÁ?³[ &‡‡ÚÀ÷nÿþὋÏWË€hê &ƒ~Öų{&úHÔ…°OW¶É´»L)3_ê]‡RžíM—¸Ì[ò¶/}÷Ùeû>ºÌ[ò9_©+ùi¶YgÚ¸ôSò¶+1v}¶Y^惱©Ù‡“~jÖe¸�6ozÌq`çá±äÑYÖçO&]ùض5Â9~(‹˜.±‡FË3oœil3_ҙ϶¦Ñ—tw÷~À3ÿoµkÿÿSR°|¢ô7 ®ÿB˜%VžzÌ?�æ ¦C»WÓ3-¶»Z Kð™;å’iüºg¸lü‘ÏvL˜ðÉ·òD;¯±'ð¦™<Äg‹õÌÿÞÜõëù¼žÕ�ùpI—渂ë�úJWP¾“×îûmýçý¶VöÏÞ½;>ÛÙáRòé&§y{1î£gÙ¢/ó–¼m²Ü2ct‹èKûœwš.—×G—¾²]©+ùi¶óèlc<ϱdÛYt©7?Î6ÓhtóC˜¡F[ž•ð“‡Cìi?°å泬ô+ó‰²2o:cèYPöŸ×>ì!ÖzóàL£¯ñ–•zç3gÞeI|wPÆ…»óü™xzªGäjéß*ˆ²Éïwj�?Šþç¿~LÏtà'ø“¸N4 6er¯E˜×€³ »‡�™y÷ûs¹ä̃éADòÌ]g0>Ñ“ðÁ¬�,s¹Ý Пä\œŸžëÿé÷µT g÷y¹^'rby¾i“ŠLçǧrIËö§¯_o뼃ô¾õ%Æg)ƒ¯ÉJÛl“éš]Ögz–­õ9tÉg»RWò¶5.ýey¦K?%Û¾<–—e•¼íJœí¬«É¬«ášÌ>ЙÏt£�ï7W5ÚÃþMS‚icÛ1”£j(¿Ãgõ„>%g5þÇËxö>|ôŠÔ�üº­Ë=^¹ûuY¿Žø­ùŽl¯Ãw´&u/»óˆkë×.ŽæÕv^Ñöã:â>ýiýÀO}HŽüýM5ÆßÖàÊÿÐôÝP( ”£U„gp¤uô(-ÓህïÄQ!�Ž6òrˆäå(=:œ ô(“Ç—ïšyoÿA}Íï~}­¼õÓŸ^¹_ÿøqý“Ÿkõ�?>üç¿ú½V¾ï ñïù_÷|ð®ïëüøMÒ³&�ÚÏíÿºZ¿Yï×÷àË/ùà?« e.ù—Ab�gŽÎ§][b络9±­Ù»m×c»lLÏÕýº|Jœ>âhŽÉ›1æûêÅŒ]ãõ=3Ï©1#¿ÔÁCæÞIÇ9uHò#D×q]wLf}Ç|FvçJ„‡ðOBÕA]"üHVÏiWLY^ìveì9lü z|_]º @UòÇõùßT…[m üoUáßW!~S�ÿÇ„¦ï`3`ãi 6QyŽ*Zd"¼r±‡#~‹|µÁ äCgîbÏðÈ�~�Ž|�£‹ÿüw·þóßÝjøà�ŸÿüÊ�Ï?¿òø—¿¼òqm~RúOöÿXè}ÚÔø~¨ÿ{ÿ}½‡ÿ}Ýz¿}åqý¯å¤Ñ tOïßPß·ÿ¦~x织wïúa=J ½JÌ\ò}õ`òú¥î>ãºÊé—|út¾Ë·Æ÷˜.׿5ßc6seüëÒ™÷T­ÉXŸ—¨~ Ó/9�²Èi"ILuyê#¯úäÕ%’ÃØÔŸÂ›~Ê „­SêúóW!ºS§×ôK9y|�œ›F|ú—Ëë#zÚ¥¢:â>­êþ¦Ž†¬WâëÉÿ] >øy5ûO}ŸÜ»½ù#sÔæ&€#Ë#YD×G©†G&zŽ )�"yrÁsdd^Ž dIÞ8õi¼%€�«þÛÕø¿ÿÅ/®ÜþË¿¼r¯ÿ£Â'5Ø|X6~ôçÃòû€_|O¨®üÔ‡÷nÕüõû_|ñMýèÎê OyGÑìKñœžoÔ/îݹ_ï×?¾u‹rùÇH¼þ#éN‰1®ûª×xcÖì[ú-ÛZÞÓeãÄn?&g\úªÓL6®cÆi;¦Ù·bµ½,2¯Ç"|®#ù­y°�JžJÀħÌÜœö ôÈ ”~�Çnl·�Ÿ>Εé·“Î>Z7´ò#Dwlô×ÿ®S=%ƒ#~™ïUè¯æ:C—nPGçu´þ¦^šÿÿªñw¥ãs?ª«þºæ=û�?6´? :8âÈað‰ð9J\dp‹xÕ¡ÑÑÆQCNlæ.v5¯¹ð�¸úçmðN5õïªÉW ÿ»ßþöʃ_ÿúÊGõ6À‡5>©ñAÙøÎ?WÿûŸH¨¨wŸêgrù¿÷·îýéO_ßþçþ¯ú>M²;|¶H}ýžrѽ{�Õ¨šÃG!ü£}>ÇÙœäÉ\Çüµgœ:1m[|ú¯ñ¹¶Îw9st[—ÓW^ì¾]N¿nKY?1mð]ùméNµå<Ƽ)ô8�Ï=ו¼>‹ó mÄÂgŽ5>sÀŸ—8µŒy<17§FÐS‘¸uJÔ__°ó[ºô­ÐClç‘O¡¬!þ)Ã�†~Ýæë“zu¾Ž �TÿÆš?‹§¿]*â ?�*}^õ�~6~›>è0ßÖÑN‘=bᓺ>�ü�=zàO¡ÌÏóâ(ãù’ë£ú}›�ë+îŸÜ¼yå“jüWKþ¨þmðòûÿuõÿV¨~ݲ¿[_ûóèîÝ;u~¿ÕnYWÛTýe©ܹù૯øÎý�+õúåÏÓ…,‰|Gslá©¶-?çMŸá3f”3ué ßåWåkžŽ£9·Ö`|úŒtköÔË¿†ú�0uÉ“ ê:äú¤ßÈ®_G}ó4�¹º?2¤ÏNz±GrxŠ#ƒ§+Ðu�žþôÁÎzÕ‹æ2„õQ¯,¦^>±óÈ[d�¶0Ÿ+¹RñùZɃÏM¢9¶ÖùÊm—rÀ“¦ÚMðüã®wóª=�Ÿ£Ö±¶ Ïèèöh!q'­?z$€P¢üβËi^ãŒI_�:ñãºÀþøÎ�eóó£u‘üû÷û¹õ_ÿfø­¾ƒóæ�úÎð¢zòÊ‹Aè!tÝG™ç‡/GŸÏ•çíçøVñ‘çíܺPýßz¾ƒwÿ[ú÷–Í€ÆÂ:a¸ô�ö¬ü´~)ï~ýfþõ‡7nܪßàçÃ{,ɘÄ5ž¼ØÒžº5½>bÏ1ŠKß5þ"õð $ÏQ1?<É럈2Þ�耻ˀBÞùç{oøs´ž—ê;ôøñ�å—ô¾þúfɤ“vK{Öôù°)(=¿“_ßß¿ýÃW_Ýzxû¶âñÝÅŸÎgÜ)±é>}_Õ<=O—Ï;'ñ§æÈÜÉoÅë'žâ»æcÂÏ¡|*æ³ÆëÏŸ•s&ªÏø´ßuêGq©ƒ—1o»I¸  t­ §,ÑS”ˆžÓ¸Åk3g¹bä·Ûy(ŸqÊÉ«ûàù9°�øÔOþ·F~PUþ¬Ž¤ßU…ÿG�ªÆö»?A_Gá²ÈM€� �ÚDüyýR'¿8ƃ±¡ª‰ŠÎ(Þq!ÖËÝ€õè�!t�GçàyæÑˆÌ[\¢s€7íùW¸�>|R_Ÿ{ZÍÜ)ËzÕ×öîÔÕÿw÷ÿô§·ÿå_¾®÷óÏÓÄ]j"+'�î<ò–¯6±çNýylk¾æñ[óÙ^—¯ëé8Zƒ>¹–‘.íÉë+æê@(m�ßy¬×Ïø¦.yæàØw.ÿlºÒ¯ã{×ÌwOçÅ m©Ñ~c@bNQÔd`W†ï§@O¡ t*¦ïxäaYgùˆ¸Ëo!6†ÇHnÐ¥mñÔ¨ÜÞ]ø Í�fGõ9zúþ<ñCN„?e”ÛÐ/õðù¤åè(|’kO�kAï_“zdŽ@e1Ÿ'<µá ¸Æwæoß¾ÿäúõ{¿øâþýk×Î^½—ÏsôìvþbªïñúßÖWñî-?ä³[‚O yq¤ÓŽì]÷2rÆÊ‹®#åäGëK{òé›úSøŒíü19ówß´�ø‘n-‡¾âš_êG¾ê@‰˜QöÔw¾Ç¥½Ç*§�'póˆèõï¨Ï¥kþ»’Œizíî@Ö�SuótÅi �y ;&ï¼wþòÇ�ù¡Ä5^?ìÖÞGÚÌEì;E~À|%¨¼_ù[š^Éeby#]…òé—ñð�~âN{öu�§)æÂ_^d=èEyd�ÿ̨ÛïWoݺûäÏþîÁG}w·þ%n¹HÏ–Õš¾ß¿/ǧõá½ïë+|·êûûw÷ÿ„‡¸µAî5[×�|OÑuŸ”Ï˳¦Œéò–-}Óï¼|æ�ïræÛ²¥ßˆW'Žæ2¿>¢úÄäOñÃÅ­éõåD ߇qú¥}Ë6òÓ„9ßµ+¼ÝòÞþã~� ±ásÚ¢~ž¾R¯îT$?¾�¸“¶¯ßÞ 9�#ÔèÒOY_ü3&íKÜ»xl\ø Wü¯Â±;ÇŽ4(xÌwdg-yd³.±5ÈU�27¶”×xלÏÁMÀ‡» À½úÞoïß½ûÕw_|ñíaγMŸ%A;|f{Êû÷õ!À�ë÷÷ë-o‡�ž’ñ#Û–®Çu9cÓ–<>[rÚ’ïq[¶-ß­8mbÏÓåôë¶.ë+³§ßšoêõ?†“|ÆÁCkö‘�ñ˜þú$:W÷SŸØyäyÅ¿Taû!6ÖÙS�òÇÐÓ~Égyðr=øÂsÜ䱃ÎQì�Oy:ä|ÿn‰—àk€¼Ï q´ðа`×àùÙ =ê<¢Ä~”é§>ýÒ–üȧ¦^ÖB=¬Ñ#h1Ô¹’ðÉüØRî<ó»ùÄ¥õþݸWÿïÖ½/¾¸^Ýÿ:y‹<�·[ãR÷*ù­üݶ%oÙXoÚ“ï¶.¿¨¯qâ«Ê›yÌ-¦M~ͦL^ÿSñXì©yôË|üù8\ç)x&×»|Òf¡ï+µº.¯[|FÀS]?…¥ì© ñiƒ‡:î´ë�Ë:Êìq’Ç|·ëj_tíù­ÏøŽX.üêÌyäˆýÈIåä=²Ð%éÛѹh²}Ó� Ž>ŒÇà«xyéÌÑÕçTv.â!åŽ;ëóv׿:ˆ+þ)¸'S'&�òÛ[kè¶óÈoÚ×ùĬ³õM[·§í?²ŸªËy�9/nåH[òΑºÎ#3<)ƒ�úä{¬¶y5O%Þ Ñ4ã3œ~òµé§3__N[ž=eéËêS‡¼F9>æOù ëcmŽwVá7\ñçQbÓóH9yóˆ2.õÉc·±Òü¹áp#ঀõñ¥÷û5 �¶\÷ⳑ×Ðß®Kydw­øy`�øÔéç’S–çiÈÃS}×Ö�ùG>]—ròäÙ’·l=öT_ýÄž§Ëé—¶ÔË‹é—üÈ~^�þ#T7šS›ˆÏhtû–œÇ‘~§àlþTé-PÛôp<ìOM‡S›§G|G§7õà1Êãrtìi'�|â¿oWÿ<™ ¿àI.·¸ y•ÜtÌ#HžXH9qgyþ¨Lxæqàósl 8’ýÄi[ã­…qäØSäô�×~*批ÇlÙºï–ÌÒ»ý]÷I9yroÉ[¶›¾òâ–o·¥l|ÇôIþEýzÜ«’=Ä\+üh8·¶”åAÉœ‹ü>ž¸}" óu¨;>5_«ƒ¢ ò#L�¼¹ÖptÜt]�u]ïõ¦ñÂoh¶6TŽ74=dG—ÕƒÐG:}3Þ+}Öòi�ܸ>â8ãñòìó 7¿üzcºÙXÐçí&`�NmxÊò§bžÈ�éº.ã7Ò/²>ùnÙ»-åäÉ»%oÙzì–¯¶Ž>/õ#YÛ1\[�qÇìú%&Ÿñ/ªçuÏaŸ÷êû^Ÿ”y—�r3°¯…ÇÖ°4ísžâðí§Âïñ„þÀæïqB¾ÐŠÿ]@5µgûÉzÙ<"D_É.w½v»|"|š*…æjßæ�Gݾñ.6 è8 š·Ø…G�„ä�o§}öØõ)ÃC�¤55&eq¤Ãv¬Ywûyeç?®­ÕÝ~9}“'wÊÉoÙôOñ]ó1Çf\÷I[òé—<>õ£¸î£oGý<>À5}»}6ÿ]Í.ë£ÇŸÏ¿ËêõÓv¡ù ¹ÈÝ`�A®îê² ˆf·¼°Ê£WÛš}Mociìy€+~6èØ9Ëé§^H®S�L×åü:¤ôÃAyïÌt£�¹ëYâ1]÷Ù’Ó–|Ÿã˜q6ªq É+öý¹?�³S«±Ä˜çÔ ÷ÝïBnö/ÊÒëL²Ü ±BÙmz©Ûy=×{ƒÔmÁ̃"exš{¿€Ž¡]97œ;áïÑ�|ú¡ï„.výö¸¤­u˜샰Ôå‰:y}R·Æã«ML�¹F:Ö“1é‹-åäG¶Sté#/’?ù.¯ÙÔ‹wªncìy‘\æËØäµ¯Õ~ËÞóè :ôѦ JÛe;i[€‰ÏWÀc¡6Ï74Æm¸\HÓ…Ûìw€‡^Wg(…åhð�ÐÈ+ªÎW7mêÓ?ùô�7Hsï|$}lþ`~n?|g¼&c;/“(_¹<wdš®CÎF�|ÚÖô#ŸôM~4wÆk_[ç1û(.u#~¤cžÔwY[Ǿ¾nïò©y{2´Ÿú�çî±ë}mDì}ŒldË\Ïñ—õ„¼+ó||Ù Ìãç´ ^¸ @{Úüû¹«œ�ª¹ú›g(|=ó×eõ"öC"•ˆ?óû¾îgò0hö9ð÷¬Yì�r�É�Jc"ò;ª3r±aoÃ¥ŠØGüH—¾Ú;¦OŸ;eãXsê;ßí]Nÿ´�ø‘ÎøSlø@[1Ú×�Ø5ÛH¯.ã:ß׳LP]¯lí•suø¨ß³K>uø-4OÞVbâ¬Àë­ÀEÞœéÓœ}¸÷lDYgœŸ¶î‹ áÃ$#DÇœØA6üw¾ëïZ¼íïætàÃpË´Jú¦ºØôS×Ü34y—ØŸ®S^³mÙ�3}Ô�}šÆu}׭ɩޱ¯Iý1Ì5ã Óõ¹�{}{žÌi|ÇQLÆa‡ÔøÙø—ºÌ‡Y�7V�‹¼XŠXg´å.‚g7xÏ>ž½Ðu:f;³ÃhÁÆ‚\ÝóÕ>6ÜÞgýv¿�ôn@®·ÔϹ;©»½Ëú‰{;b˜Rçò^®å`>m£¹SwŒïëÇÿ]ú$ßãÓ&/®ùb‡\ûˆW—(ŸyÕ%®ñÎ×ÑZ‹Æç<=¦Ûˆ‘ÒÖuÊóƒ{‡JLfVàÍVà¢nìÍ r6£á®�¹,¹g+åŽÚA'ÐG˜ƒ¹iè4vnÿ‡Láøô €g`s•Ë’7q‹×F|§Ì‰Mæ Q·º¼-ì6ò Ký¯¯së§Üí©ï¼Ï©ë‘»mK~›1¢k@–ú:Ðw¿ôÑ~ ¦Oòæ³¶ðÊ ”¾#^Ÿ�s]Æ/Ì|˜˜xç+pQ7ž^{µ®º—¯ªÈ3\?›á³¥Ónó×7exõ"sÒà¹å¹`S €�·¸Cà€\g©—œɯN^ygÙ=ºQæPÖÚ—³wéS-¯û)8òIÝ)<óê×× ü2ẖ%ŸjK?ùŽÌ'u^¹¯ ÿ´)§.yí‰òéŸ5N›#cÕ�óê�"LšxO+p‘7‡—¤.}yùbg8GžÉF< Ô'¯.?v›¿ˆsytÈlØø¹š¿€\¼óu,Óж¦ïñÈæw�¤¬õwWÝÔ+�0u[<¶´÷åhK}ç]ÏyqT¢Ô½ ~”C]bò<eù.«³F[~ÓyäµaÎŽKŽùž=e™4+ðþVà¢nèÁ˨Ûî‡;4[š¯�'Ïžý ÈKÚuËYCQÚ�múÚ™‡+{bàYþ"zß`} }sx(±óÝ_Ù8åÄV‡4u>]å;?’»Ž9Ð¥^Ý]“þʧàVÒ&/’û¯]\‹ÑJé‹n$§ÞÑë`¼öQ\÷IY„Œ?ÃÏæ¿Ôf>Ì ¼×¸ˆz«´ðÕP¬3å²È3&|ÊyÖ”'™gAu9IÚÑëK^7èhì6ýbÒ»ëèèœ"��_’…{’²q‰Ì·ŸóéžOsç]zù}ز¬äõQ×Q{Güº.eøµal·WÈjL·)w4gםɸ¯Ùö¦eM�Å¥ÞçiM»ym0_÷Gw Ùक़̬À…­ÀEÜøb-=ú»júŸ•ÆÆË•6ž8?Éë2Ï¢êNÅJs Ϫ*Èk“‘GdÜ©sžâÇ\é§ :Ø”À‹åOdh†u²©’Ïíkh\ÇÌ‘¶Î#�†ñØ ôé²¶ÔË‹™GÝ1ÌùóÄtß\gÖS½s¤œ¼ùô›ïáS‘I³—´u°4ÿzM¯ÞªÞ(Åò€ï_hžø�jðÛü¼o·Ù,ˆyöñúUÈB‡3«Š†Ø]œ&cá_Å`}òɃ4}†o?¨+¿µ©qÑfªc²~kH¼yõQ—zuΗ¨_ê:_ÓÖž¶®Wñ•»N½Øí#]cEm[rÞúŠ9oòØgó_ª0f.o.ê€W”>{•;­öó`æÉ¸®ïëHyÄ“ J[—±¥î¯ýe‘µåºäÍ«,®éÓ®aƒÄ�0¿ª·Ôa>Ì \ö \ä ÀòÚÞØo|¡iz\ùÿ¤?Î“ÝÆ32xÊ]€r;œÁá¡3gÚ�êÌã–]è X¾ã– ßþÜFrn°#ö©F2îêG©Ï«Ë%�øœK^̵¨ëXË=¬7yü¶dm¯]¯5r­Î¡<Âôé<ò�æûø‡RLfV`V`P�‹¼X.¸«É?¬q§žûÍ_~Zu¥ûq�y?©f÷qñò€opF&t ì<6È«}ÑÙMä�µÁwÒ–¯ÌÊbêäAGú©iòÜýàk‡÷jPðn�Ò=-;¡¸öÊb¦éÒ~ OýäG˜sÉëW)ëN<¤.ùnë²¾k8òßòÅŸç™ßó¨͹øÍO9&Í Ì ¼h.òÀšÐ×þ\ãÿÔ¸V�þ¯?ºråW…¿ª³è/s@cdР9;ËÛ°AF6þ…Ü0è‹�³uæXÎÞ©;¯®w�µn©žçàsñù�4 s»F½Mâ&àimžÖ†)§sJt¦Mì¾iÛâ]ZæMžXåÄÎ�dtŽb‡ýÿ÷õÄy¿û'µø ƒƒ®dó9Kgó–/õ™�€Í„8sgeÊ<Èêá•GÝÝÖ°Ãêƒì¨&¿lø�d½Mråûèê“OÅæ”É»,Ñô¢±Ê#Ì¥uÿ5Y=è ·ü–ËŸ-9mò#t^q4÷(nä‡.}“Ùæ‡÷võš�³³/Y�˰àî6w¸ÓýÅ_Ô[|-°žø_ÔÙû¯¹Nó§Ù•8³;Š]Ȇ®,fó'&ý8ƒÛì=³›Tv^躺.mú€6}ù¼ýÏÞa#Pöåöù›š�ä‘_vŒÊ¼¶tõ‰�GîºRÖ� Ò¯Ëk6õ#Ìô¹Gó˜ckn|ž£y¥ÿ\I¦bV`VàUà2lê‚vé�\ä~XÍÿƒºðÛâo×/½KƒöhõI„Žnà&@ŸDÎúȉ%.„ÊΠŒnkd‚uV›?HãwÔR…y\»£Çµ3zRÅaƒÄ¿$ &¸;µÓ(wÔžˆOÊò£%j[‹q>üôQ'jS!åäOÕ3B×,šÓuŒbô9Øfs§“ffÞV.ÃàLmi€t:ºMÛ¢» °)ƒòÅ®y8»ƒÆ$hQqÐíí:#̆Ÿ<Ï›çÌ{ÿŒ’UÞ;µfÊÁǾ­ñU�ýO', <§MgÃïÛGºî“òÈ_]bçGr-çÐü±C`®¿Û�əǩ#B'É/8›¿e™8+0+ð¶*pé6\ârÛÛ¢)Ò”iÞõù€å­›÷VC/×3dc76Ç´¨ùLwØËèF#»¦¼Í¾Ë^ñ»àùrK¤ä‡•›»"ßÔ:øïðy@.LmºS–¡�1`æÉé;²ŸØyä®+Õ™Òu9ç2^ì¾êG>êá!bš�ßJLœ˜xÛ¸,OÀOù@��«`�†èg¸ÀÆÀæ�€R/”M[¨ÞØÄn7ÎäÃ÷Æì6ÉgçêÝÙ�@G7Þ¨çÍ€ïë9^¯uü©B¿©Aã÷?÷iûtÚGúÔá—òß}•;�Üu¥:º`”Éø£^Ä__YJ^ÝüÀÞ¡“™˜x×*p‘7Ãru¸'ÕðV#¼_x§ÎêwªñP?ôA5E}ÿpWÀF®ÎŽ‘/$$#›Øy›ïÈu sô†�lÓßã“zÎ|Å�÷þáï–Ï­Š¿QëäC’lHmJ§î¨]̘Ô�ôÚ·0ãäáGrêÊåP:ýÕ9w–P¾>Æ�Áy¿Ôg>Ì Ì \€ \ä /�'oy.qïÕUþ×õÄÿo5¾�ËáF�ŸU7øy5şׂÏ8û'õ$Ü1@B4zäDø%.r"|9 çëhW²ƒ‰t²>ªÑ/w7Àz^q‹Ç¦ÝæÔ&v{….„ZÃ�u>Î Ì Ì \€ \Ô @žÀÏðÕì– @)y àzý4ðõêKÿ£j’¿ÖÙæosÏ×:›?<1ŒÑÀ 6›¿Xª9o¢yA;Vò6l4†x›ÿ~ð€jø_×'þþTŸôû¶ô÷ë9Sö 9EN£^L[òÚGxŠ_úÈoaÚjù‡—A}–]Ö¨ØéŒn^ù÷òLyV`Và"Tà¢nxm<‰ƒò|ÂíA ÞïæSïWëí€ovåʧÕ0YN[]ãa5è«ÕØütðÕCp@&¤ùCÈt7 6û”ñSßÉ9�ÇüÙµ²»eÓw#PM}ùI_°wÔmÿ[õ¿¯ë ÿ?Õ“çÓþ™ÒéÔ)wÔæÈe¦þExs979R—r™/ >”#‡¾æ:ä™��ÒMš˜¸¬¸ˆNðRò©³\­Kß5¾©fþ¥ü´š6·Äÿ¢šæO«aÿ´ºÇg|3 .�ŸÂÑY4ú6ztòÅžá‘;¹X—è\ z;2<—ð4±ÖÏFç~�{ŒjþßÔÕÿõÂïË7S%vym°Œî¯Î˜”;�œº£í<ˆ¯/•è±AâNš�³³³—´qÀKÉI~mœy©«9rkœ;ÿQ�þQ5ì›U”ß•ü×Õ9>¬Nù�ÕnBR›¿˜ÍŸÍ�M?7è Ž;í³®´¶h»£Èzè¸Ê§«;êŠÿ‡z�ÿ;Þç¯ûñ�?ïûß._ܘÊtò¢úS1ãà»lžnC¯NT·…iƒw�×*uè¡Ϋÿ]Aæã¬À¬Àå­ÀEÝä+êI?uðèŸVsP·Å¿©Žø¨67KæC�÷ë«�ÿs›¼Ihàtôèàiún�mü¢‚26ð�œÃ¼`òv4Ðæïæ„ŽÎ&ÀÁƆ[þõa¿?×{þ_ða¿Úp'à^Åànºµ)rz}Aý;Ÿ>Ý–1ݯËé+Ê믜 ^½~¥ZtàB³ù[‰‰³³—¹y`ÓàõM^y¹¯ùC îðS¸üîÊ•/?¯þ^_øymþÆ AÐÔí, ¿¢Ï�€¾6±Üwà“X$äbÉ ŸóÉ÷ �¿ü²ëJÿA=¯ïê‰}õŸW®ü±69uà�Î)L/š>åä·ìøuß./“ˆMY>1cå-Gnèóä™4+0+0+0+0¨ÀEÝpâ§çÚHlÊ݆žfBý¡.�oT3ÿÏrúI©î•ÌghðW«Ñ_­.ó“Ÿ1JÏ¿æƒËd3à°ñ'–y!tR_  YÝMäÊŸ51ö<Ÿæ¿_òòÉþÚ|UWûßÔ�oùNº6М&ù´w}Êk¼ñ >}¤]Þ\úªßBKcLM5iV`V`V`V`«nÀUßÕ¢zÒ4Ȧ ¬.ûïâÈC5·Õ8oV#ÿ%r Éoå“ðju k5>¨¢ýUÝø¼šü_•ßg‘Æ2lþ"9Yò¥>C.ev;ôt¸ÞêkÀ€¯ö}[›˜oyuÉ£ðûÊÅ�”N!ªs:ôò#ìö.“úäµwÄÇ�ÍQ}Êݧ—_àE?iV`V`V`V`¥ô«‹Hyò‡ïƒ>Üu‹\�òa½_ÎW¹½»ÆVS½V�ôZ}.€¯ ~ôã+Wþ¡Þ"xZÅû¬ìŸWó¿J!y;€eãÙØôÅR-„,¹dx;œ˜ÍŸnÎm~F]á/XWþhü%Yký’û•Ì/þÝ-Bœ‚”�Wçt[˜±7Z¶yÖl£\êŒmþµ7¿^àI³³³Ç*p!7û»>wšP'šÅ¨ÿò�ù‡_W#­|_ ý‹r¤F×êáƒâ¯Õà“ßW­ßøqm>§é3p¢3ÁÓôÝŒ69q¹.Ä‚ �açéàäÕà—æ2jÝ÷ ùe¿/ë}ÿG®Ø%|�¦6½2>êÿ’OÁQÌHg.çKÔ›(¯%p ƒ‡xÉñ�4+0+0+0+pb.ä ž»MÁÒéÏØÙ“Ñ=ª+ê'5h0‹ÿÒ׫`�ù:]m¾¬ ŸUÂOj\Ûw%>ý¨lŸV¢ú¡Áå·>ðn€ƒÅ«˜ØE€,°ðq ~¦˜&þ ÆèÉíFÀ €wêjÿ‹âyÏÿÍ¿ü –Ô£)Ý~º�ü"Ã¥›OLý(/v‡1úeì¾¼K ÒŸyÅO&Í Ì Ì œ³v°¿ �ý•ÆA#A'¥ÝFt ŸÐd«³ø Òl—_ ¬bòVŸøEéYø«WÓÿÀ»œM€‹p,ÎQ x\ü÷…ß2Š¿mħæ»Jwç-GÉ7ØŽÞó/ÏC“ÏçG:äDøS‡±=¾ësÎä�Sç¼ÏSW¯ œÍŸ"Lš˜˜x� \Ø µØozs¡‰@ö^í#¤ñè·ðÕ|ŸÔoèÞ®&þE5[~/€_¼VNl®•ž Àïj’‡…×øE®;‡áÛ¥:$·ËíqÙÿuÝ~ø²Æ×•‡¼v¿å[ Üš`ÔšÀ»µ¸SþÅ1*Ý—FÙdŸ«>‰ð/:Èk¬s¤nË6òϲț�—~Ò¬À¬À¬À¬À TàBoöõ°apáM¢¡3�{AîÃõ�ë‚·ë;ö4ÿ•ä#éël®ÕÕþ½>®I~^ã1ÍŸ3è°è.„Ät7ºöyûáNm0®×{ú¬¹þ«|– @¹@ÞŽZq�+ß°ì¨]ïê3BÓž‚äO?çéÒ&/¦ÿˆçy1 Ùüwu˜�³³³/\{Ñ 'x�i*ô\¿�'{Ê�_rT£æ¿>®+îêÑÏ> _߸Q›ƒ¯jð³*0ÿ^ø³J¼|7‘ *öÀ—È„Wiþ$§Ã¯®äÿ\o3|Ã�ùð�ÄRC„CâNzöÈz%׎,/2UçÕ�¯b˜Ì|êÕ)‹êÝȈÚçmÿ*è¤Y�Y�Y�—­ÀeØØ8D ›Q½HMåE|iºÈð�r×=)¾zw½>®îõ¨øO¹U_21Ë�É£¨ˇËWäÿ|]›~¢¸¾É·ì p…Ä�4~dM˜Fù³ /~Ròê@Ÿgò£çI¾Ô+ƒ�W·†6é5{×3¯ºÑБÓqð�ïùWU&Í Ì Ì ¼¢ \– å²ñÐD.yã‘Ñ#»1€ÏQâ"'¯ù ×.ÏÕ%ªO„wà+/ŽtÚÀÌ/Ÿúôµñƒòæ/Õ¤Y�Y�Y�Y�W]� ¿ˆ‚ÑP  –fB6ÜlV6gu‰äI·ëÒï\ä±Ùwl�k2®ãÎk÷Hž$׊N¾#ëM�µQ¿%§M~-WÚáG~67úÍOýó Nš˜˜xŸ€¸}ìÝš‹Í•†)ƒØ×š?¶5ÚÚÐôÌ™È|Ú\²Q[®…Êò‰ðkÔŸ~®5ÑF¬YÝ1^?bõ=¦ÓWÄß+~7ÚÀI³³³³¯©—q@)i.6š,͘f”¨ÝF­\nÏ9¤äÕKm :Y»¶ôM¾\yà%ò$!«“_C÷S·Åw›2sÂ�F6ÿôçâßµçsšü¬À¬À¬À¬À+ªÀeÝP>›¡�Éæo¶¥Ÿ›b’lÐè’×G]bç™]äP'®Q®× mÀ#LÝO~lŽ”sní^ñ» P�ï¤Y�Y�Y�Y�×\�K·àʲ¾`s¢¼4W›� ^»2v7Ä$�L©ÛÈežDb°�èÁ%dùDø5"/v^ÈóÉêG˜ºäÍ—ºäÓ¾Úü畽"“fffÞ@.Ý`_SšdS²iÓ°hÂ�Í�vQ;¶Î#›#yu ó’ ^Y>±ÌùDxÉ甲:pkبñ‘ï¨-õò[6}À^ù‹ô~òLš˜˜˜x¸¬KKC‚@/ÍÊFäF=~k›â¥�޼6~xtÇF¹,>#D—”ë†W–ï2Ï'm)Ë¿(’—ØŒW¶éƒÎ_ì¤Y�Y�Y�Y�7U�K¹àJ3~ÈFÕkni\4nH„܈èŒ%7z=<ˆ\e:ØäAˆ˜5"?4Btkƒç£mÄ«ñ•_CóeÃOÞ8^|'Í Ì Ì Ì ¼¡ \Ê µµá´Ï,¦¨=�ÖÆD³¢iCò dCÞBòdÓGÆk”ù`‡‡œc'íѹÎ-L<ãЄ²6±û«Gvl9ظ @x-à'Í Ì Ì Ì ¼™ \Ú €å­�À“v7 ЦJƒ²AÓ¼•å;ÚœGˆŽ™›s§êR_¡«ÍD~h„©ƒ ž_ê•Em)Ë‹øt¹7þ'nÂÊ6iV`V`V`Và WàÒoöõ¶iÙÐi¼4,zQ�-c’ÇNãlìÈò[h<>ò{v(£$·$nñÚ³i�tÝž²<è ‡Wú½ù»×:qV`V`V`Và W`nžœ¦DóQ6,2~4{]6ÿlÚðÄc‡?e”ÛÁO”̯œ˜k…WñêFÈóêú®KÞaãGNþà?¯þ«2“fffÞbæ Šo3Ú¿@“’l€üK_Èf�Ÿ›ålîèR&WÊ£ AÆt^<…˜ò9$ßmúˆ‡Fñ[6ýÁ¼ÚïÍ_?çgM“ffffÞBæ оßø žÍŠæMmüÊÙØåÉ,?Bò¢w#Ðý‘!| q'�öèsÀ[Þç£ÜmÙ¤õa÷Cvä&@�þ‡ Oš˜˜˜x;˜€qݳIÚÀhj6švô�ˆ5þ®#_êÈ£,&a?Fù¶øn³Q£ßú%n5þeï¶[ü´Ï Ì Ì Ì ¼Þ Ì Àz}iX47}6ôèx[`ij…6ì—ÅJuÈ%Ÿr}‰ðk²Í\Ÿ-Ôt¸3~^ùŸç•›¾³³³¯¹s0(0W©õyš9 Œæ&Ùè²n/Ûô‰‡2�r"|’q©“gÝ’|"üHV Z ‘¦oó‡7ÏlþUŒI³³³ïR²‘½Këzëk‰[Õùσ¸ò§±I6mô OÝ©Hœ¾#^¸FÄ3wÒHVv^ÝyІÿVýØLš˜˜˜xG+07ç{alš6<¢ÑÑ€ÙØÈGrÚ’¯°C\ç•ÁNäX#×™v;º¯ÎX�ç©~Ä{Õo=ô5sMš˜˜˜x+07'¼(û·ô¤¹Ù|mx6t7 ~êôéH^uò#D׉¸N£æ«.±ó#™Ænã¡v‘úõuMyV`V`V`VàªÀÜœøb´M€MÎÆg“mþ4CxH��>»²|"<4jö;Ëö£�/y°ó#Ùç—ˆßH6'¥2sNš˜˜˜x+puž«_ìUÙHЦlãOä[ u½É�dcÎÎ#CißiÖ{#V¶Y9âÕÑèó66~øƒßlú”rÒ¬À¬À¬ÀûS�yà_+Þþ—É@#¤!Bð<›l6ü5$Ææ.¦JÛN³ýèz;�œƒŒ½Ù+ã'�Ÿ¹à'Í Ì Ì Ì ¼'˜€—x¡ö›²MÐFOÖl¨øäà®@ÊòÄ%¯ BØœkQœð ¿ë!DžõÊ�ÐFŸ~É/¹æÕ?e˜4+0+0+ð~U`¾ð ^¯ýÛd²yƒ6ùŽ#ŸÔÉ»2d)yuÇ�Æ­5xôÙÔÓO½¨Í|óûýTbÒ¬À¬À¬À{X�¹x /Ú~C`ã§i'Ÿ²z›M¾#+U*Ñ´!›w6sxeQ?ð ««|øI³³³³¤sðš^Èø� M=ц/¦Mž•ÁCâNz±Ç3 ½RØÜ;æ`áç-þ+øŒš˜˜x—+0?ðú_š¨O3i¾6|›üH6^åSÐùÁÑp �œÉŸ2Çô™˜˜˜xÏ*0ï¼Æ¬}6À™lâ6zôkºÔÿ¢hS!9Õ›y¾Ço5&Î Ì Ì \° Ì À~AcS�3÷F¿¶9ȘóðK3¯€lò�ŸÍþ<�¾³³³ïyæàzcs�‚Ü ¼Ìj{Ã_6óýý—)éŒ�˜˜x+À‡Ð&Í Ì Ì Ì Ì Ì \² üY” þ|ɽIEND®B`‚ic09yá‰PNG  IHDRôxÔúsRGB®ÎéDeXIfMM*‡i    øµ…@IDATxì½Ùs#I’æ‰ žŒûÊŒÈʬ̪Êê®îÙí–ž‘Ù‘é•}˜~˜§•�ÿz_fe§·«º*�È8HFðAì÷3àC(=$H‚ i*4ªšÚé wÿÔÌÍÍ«ƒÁ ’)[ [ [à²,P�Ú‚j#î8Ée2º“ˆšy�“cú¡î…ùfˆE2Ý páeÊÈÈÈÈȸa¨f§÷†ýâùp³fd�ßT«­õJ¥µ]©´Ûâó£zÄ-ǦZÃQ}å`Äûâ1Žâ{*„L üÎHîi4/¹§öö_‹o‰ÇúG²GñÓŒü)B>55ž)Håól¦ÉtÝ-иî˜�/[ [àb,°V©, ¡ïì×5•¸.ä¬ ä ä+õP2ݨ<Õf�‰Ë Hú(ƒÈ8 ¤uÅAzɇҽ’ðJºWÿ·‚Ôe¤ªEecÜ€ù`ô”"æV˜GLÉùßõ°@v®Çï˜�"[àR-ÀsüÿT©¬Èx¢ð‚ €oˆ'2rA�JCV¾´@ˆ[å&¤<ŒøS>fÈCÀøWq,$H÷ÿ©ì¿â Hµ¡P$7mNºå2ŽŽºtŸx1Œõwž�…2] dàZüŒù ².ßcfž-§Öÿ Îà>ˆ I‡±!Â: È+OR1càÃ�ÆŠW‰S�tûÊ¿ p¨øÿI¡ŒÈ)Æ-›ü#'�8ÜÁõ1;��[#óÏÚÙø¬¾Üùl�‹± ÷�è5òn ›Böúò¨)øv¿¬Tî Ÿ*ý+©¾ÓͤXÇÀ;€ò1(:r#ƒ´œ| páµ§º¶Uÿ[%ýüm¥ògññBèÁaSa7E�TKv(6E÷h ßÃÝsà¤Áˆkú‚¬RæGÉùßçi�ÂõõyDîu¶@¶Àl-ø/V*·ª·åÜRí+Öñâ>Ý8j+•Ê·BçүÓT>7¦à8¸ÑUb’á&£+܈ • ´­xMéË �µ`GkZ˜8A 7üoä¼ùw9 ’QCTm² ·L]´CwzìÒ}v0[¦ÏÕ\§™²²²ŽX€‘?à¯Ä—BÁ/…z�‡cÞa6ÉÕN¥òPàüHoàÔ úpHI0ªÂ$!£°‘–¸€À«Ò3ñHœ™‰UÐ�õ¼9€,çã/ TzMü½üˆ*M–áw‹îÒÜiptEŽJG Ï ’ÿ>à:Í”-�-�-pÄBµ&#¡Þ—BÇ¿R¢fÜ? "²Fø‹Ù®ÐrQyÒ³ú8ýªÊ¡/£ˆ¸F[Ð5„4 Do(}Uü õ8ï¨ÎÿGñšœ’÷z;áÇðª ÙL–át ¹þèÜÒ�‹‡@žôX ;X"Óçb�ì|.¿Tîg¶ÀZ@#ØêøýOMý×õ.ÿ¢¦Ýï é¾P³¿òý5èçróðá–�Žž<t–%&")!¨ðŒ¼è$×úôkÑÃzÚu¸òá$¼ÓìÄKÇßk@mj6£¯Y‚Q–Ô„r�›Šrl=e87ƒìæ%Žë*ÊÄ3e \i pýdÊȸáøgͤ ,WïT*z´^Y€ßÿVhøH¼ ` T+Y'δ»Aßз`nà7W–�†Ïè 2äEgÔ6�‹NzåY�ƒpO3_©�‡å¼Óº½2°ù£¸dÖ R-ä&£l�9Õ:?‡A7LÄGÍ&=~”Ë1àrΟy¶À•²@v®ÔÏ‘;“-ði, Àl 8ÙÐç ¡Ö3!Û3Ý+þPa”ü~2ìÀ�„<1ô�’Jžþ¤AcôÉüI‹õÛ@ç~hh¾ pOñ�ú´ ~þYÇögÅÿ,'`W€s è±9ºãEYÉ)=Ý‹�™�q—å äuX-Ó•µ@v®ìO“;–-pyÐè¿5§]ýÔ"›ú|/þ+�æ’ÀsY¡Ë�à—<]óÎÈ)‘!óaìãÿF]R�Çh:’ öFZÇAuú(ÞÕbÀ{j‡Y øšêijØ¿+gàeÑF‚¥ÍAtÑÝ0§4å8yèìÐ%=:ÈÝÆòÿl�+f�ì\±$w'[à2-Àœ5íýšÙº­KÄøkžû'°÷Ô?7 8Áà‹€•–©ÇDz$Ð2ÊšE�´pÚ„Ç>Ð'=Ÿ"X ì¨Ü‚—À_ÇñoRSÔUOâÊr„h¦˜7ê þ±ù‹‡Ó³œ-ðÉ-À5“)[ [à†Yà?W«!áònç»,°|,pÿµt÷…Z  $Óü�ü üæ_sЙ€\¤NDZ‘@L¨ i öðÈïvh×uX¯ã˜“þŽò|ùT·+•Ÿ4Û±¥G[?+Hæ Bª,6ëªàÇ¥‡¦�oä_¥ºóš›'ó«b�ì\•_"÷#[àr-Ъ1EþD ùDòS%Ïý(ÌscˆàGþ8¤¸Èp�/ÊŠŽzŒŠ#i&£-ñ„–£#/u"SG d‹ñXz•Ó“�Êé´�@GÇñƒŽë¸¾*Ø“Àödu³e\ÉÓéÝ3QWqF€:q²`3e~,Àuœ)[ [àæY £‹ÿ®ûW ¿UøRaEºä€ï‘¿97 ƒø‰�÷—ú@‡È „4�‰Gd¶â:¸MÒŒÂè‚Þ�84P¹¥´Žú@�ØRX>ÀDp�]± §yS±Yš.’óÃ)Ÿ)[àJX ;WâgÈ�ȸ\ ‰Æ»B#€ÿ Ôz®Pšñå½*£œ€ù ºæ r䊦8:‚)Êè"*Z†SŸQ“¸ëFG nî:áΧ2óJg¶ã¶@ ¾ªã;Ðñ½ÑÍïOÊÊ!QÕO n†tòÒ-ç�q7­ä1‘‚“ž)[àÊX ;Wæ§Èɸ< °Ÿ®�«&DâÐÔ¿ Ïh?)F9‚~” üæF?â–�xŽ+i" F¤$Ÿ–²È -2Šu5ÿW^^̯SgFÄÁuçÓu½ ãYÖvÁï´xð½¾ðN�7í.PÜ Oî²õî–ã.‹ÉÜUD(åÍ�0_¦Oi®ïLÙÙ7̬ì7b�N àï?7ƒ¿y£hç@=Èðb�jŒ‚¤ApPÒd9r£(œüôÙu»ÿ.oî2ÄÉã0Ò·5p @¯ ð=�5­üI¨ÿ“^!<”à�‚\ rܲ¹»Á¡GÙåènqM@*›×`†LŸÒÙø”ÖÏmg |" ”9qÀÀ$ð7蛃rü‘!ƒ5*r£ä0õƒC`=T…(o”u]R�ëE6‘îrpH€�ñ‰ãU=¹­¾ò˜àPqM¤‹…¢©i�.¹TcMÛGŠÝ$„Ž:®_b¦l�˵@v.×Þ¹µl�+aÀÞÈ�fv˜8Î /èwYËŽÃ PQ¶.%êŸûAÜrä”'N1!tQNÊ’.çúþ¼þØTXQôo«žCû¦f~Pš�ÙÅ©ÙU9y9üØâÎg3H•Èz¸&´w°h”–Y¶À¥Z ;—jîÜX¶À§±Àÿ^­¶5êïjº»+Ð[ÐÈ÷ }-ï‰nkB«¨gÐG&€b„bÜz8èæ8²:Èq8dn9¡`Jþ3FŽìà¬N/Æ�N¿á 3dž,Îg‹ùT0_;D7¯ÐÑôK}&›+:R§â‘øËtn–º�c [‘œuYθ pÂgÊȸæÍëáö}Ÿ¾�Sy ðTÆ®ì›?Ç�À@¹G. €¹õ–áeAê1ø“nŠ2HHu? ;6Oæ—a�ì\†•sÙŸØB²y>ñ‹ð¿ˆ?ê0æy8¯ŽGü€¥èt\!�Žì€rnвuæ !é‘#;�ŠÜíE2Ç#8NN€õrø«]¶A¹ÚãdÒ\Žî¸,‡ãî! wÉéÎ?LÍÿ³.ÁÙ¸#ç&²>µ´È­.¤aóŸ%Fý„1xùàQ_”�`æ¤[†ãè çƆÿ�Ñqó˜™úAJsò!›Œªè��—8�ãã¦Ç À(4¤ãÛ¼ø@S"}­ØÕã’…]ÉþV€J$ŠÝuõN3·~÷!ºûÄé^Þ.ØÌüR,�€K1sn$[àÓZÀÏ»éhÃ…O Hs#qd§›;_äÎ[äª&úH1nd„O"ç/ÖOœ~Q–à>–ñpÜM¥¯(ûCl¤ ’–ü¯„ú¿èƒA¯äð­€HÅ®òî M™"øÇ.“kÔézH/¶�.S¶ÀÌ-�€™›4W˜-põ,¸�*F–"øÛ ˆÈQÍHe]‘“^Ô•ÅmÒ"¹_Qg™¼î{DÕˆ¶ÎK>ò“†ì~Gîc9< X¥ŒlÒÕɪø•¿*ðßÑÆ@[JŠä.D�eƒ8ÍA1n=Í9�ׇŸ“E�y-fÊtÑÈÀE[8ן-pE,`e¸ð a$\ –”1RÁ]‡õæ1�óE�ŠŽëA†H7ò!C ‡â8ÝyP;_äÈ1Ð'Êu±ï>nåi)¬(,(ý®l²®²¼&¸£<¯T ÅŠtœ@^ƒ½»€®L¦îb^ò ²€É2]´²pÑÎõg \ èB¯F$;ü�Tgå´sRYL’�ndƒ<<†Qò˜QŠ<¶EÛ”Ggt�9�|]qÞ‚˜c*@3%|aEëd#&NÈ^FEàž”�²1/qw�®â‹˜|è¤g'ÀVÉüÂ,�€ 3m®8[àjY@ŇqÆèb�4§ >¢ãÊ�'¦Çv,Ã!#^‘ƒ˜ErßÑS?Û9�Lû 07B…Tµ¦ÿq˜�ÝU‰ÇRùI]¡.çC.vŒÓñLÙf�iOî ë@®8[ [àb-Àt2-p±tp‚ÑÍrY|’©øTàëºá­Á–~iäsˆmK=nϲyÌ7�ìúݧþþ RU}ÁˆY§•§íù\g<ôby3S¶À…X€s?S¶@¶À5µ€Á_:Àrô�>Fâer*Òœç8}Ìãvà �ÑŽ< ‡ Ý[縒¹­¨Gç8òq�¶i§xŒî7Bæû5ò§Îªâì H•d9‰b7Šù�†Þ£ÿ²z‹é´™œdùœ~. dà\æË…³®¦üͻ´' ÜÖ[½÷¯ –4Å='¤á9÷0,‚'Ge�e8TÔ‡¬wDs0ðsÃq  è*:ÀzÈušU‰GÙy�^”é“õ±ô‹Ç´©þÆiJÉMS�ɺØiTk]䔥Œ»�‡MZ¦l� ±@v.Ĭ¹Òl�Ok�ßk›¶·½# [¢¬¿®T¾ÿjA²> Ô� ˆDCÍð¿õÅ<.g½Ëõ.�ôŒÝÓì ñ@7ˆÇÆ<ìºã`Ä$�úʸÔã4ËpÈ}°œ”£Nƒƒ¸Ž�äôü_í%É]qšã®.Æ]õ$^–—zíÛÎñl�™Y ;33e®([àêX@èÑÕÅý@HòBóB»Ù<°>ÐŽ€wOÀ$DBoŠrÔYoÓ�уb8Y3Å.ç#}vXýHi gÇòC8ÌPÁù$Žãei¤C¤™,;ää!N_g±dÙ"@ºáìÇ> E�æôGwž@]™²fn�ìÌܤ¹Âl�Oo!FWˆóPü[õæÓ»Ø®ø‚tcÀ=5:•ÅIƒÊòX_ää5 ÚôqØ�˜à›�ÑÍ[îþÚ�oÜžÛu?È�ìr9=ò(;_ä¤BZ1©¾£ö!¸Iâ&tÄcše—�ñB3Gš¥N§S§'?Ðeʸ0 ø¼°rÅÙÙ—o�(ŸøåkO¾¢ÜXA–2T’:‘Q(Æ‘§E¢˜4+ÎààðH Sÿ¿]¤rîK¬3æGŽy8.S,c9æ�2eˆÓב' f!)M¡‹ÜUDó:O¬ë8™üüD.'1S¶ÀÅY ;gÛ\s¶À'³€PˆÏÜ&$9m'@0S”­;-§—�E½ÔU¬×õOâÓ¶«|<ˆ &ŠG 7P›îNs]‘;-Öퟞ)[àB,Oî i Wš-�-p¹ð«€è»,Šm!;\Vû“Ú‰ýˆ} ù‹€ì8÷K‚ãeü¸tš(+unc\�O gʘ¥8É2e d \ ,l€Êšvóœ”ÿ¤t*&OY8Òè"Ŷ‹ñiª,–q\<²¹ê2(�š¸�Ú<æ9­<©ŽŠ×iŽ+çɘÖùÀ´–Êù²®¸Hð { �Ó‹ûÍ:Þÿ�`6ñˆ †“2�®ºN$ò•…âÌ‘=–±¾¨sÜíÁ¥ã�ʇ@Ò¢\–·L§b©,uD*æ%-꘨äÏG“eù¼ˆ×àyëÊå³²>‘F£ÿ1`@·…0?Iñ?üûBª'ºØ‹?VçrGº "•,›“^$Òh²9@ Ð;�9z¿óO~NÞÞÀ@ç 1QÌ_Ôwz”­+Öå<#À·¥xúh’úC— òæèŠÁiæTíÃ-ãÅòŽSŠqË>ŒaŽü?[`ÈÀ Œ˜«È¸BH€!M3zÕð¥ðFñè‚ç <6žeŽ!ÊÄMÖGNCŽ[6§i€:ä|ÄwžI�r@Ìk€8EÀy””òÃ#Ó‰CeÜy#§m �'@ì¸`°?.Ïqiªþ#r~в3û�Ï<[àÌÈÀ™M— f \9 Põ/ÃÙtðô…ÆW•ÊÖüpo€;Ê´Á�Ž#CŽ›µGÿ“æ-ÃM*„n® Øéè ‘ùbˆi–)7‰Èc²¹ë(ã¡]Þž0à öEÓbþ(Óâ�õQ¶®ÈcäDÌôäǶFæçµ@vÎkÁ\>[àjY�"^•Ñ-ÀÆ(œ ð>’�te@i�ªƒ·e¸‰|´á¶Ð»,z:èxäîWÔ�V¦ŽX¦'Íí`f8'ž… ]tÄŽ£xÔ';-rËÔ{Û%/ÝΔ-03 d`f¦Ìe |R ãH\à–ö˜þ,§•iÀy9ò":9�:¯ â&çƒ�º'ÏiB,o�?�&pp–°™DwÕrW¶‰y�92ëj†ÿ­wûPèm®˜?ËÙg²@vÎd¶\([àJZÀÀ4b<>ß A×€xp5¹-C�±ÈäµÎùby䲸õçåô‰:Ìqˆ<à‘?À� <îjWŽ#é1Ž ¹œeó¨GY7E�e§ež-pn dàÜ&Ìd \ $>@ Ð#0ºe~Ç#¨¢‹ñI²²�Áœ<�ù0vô?iî)ȦXÎ2ü¼ÁÇbîú‡ýø„è(Í]žÄU"Ñ4édŒ‡íxQ—*å�õF½Íd]æÙg²@vÎd¶\([àêX`ô  AƒA€øÓ*w2àpð(�Aî‚‘Gu~8DËI1úGê€,,Æ-èÛ2Üqx N‹éQç¼>fÅöß•#°'à­ü"[mI‡O¹ûÃØÇ¦9)OL/ÖÓbý–ÍËÊ9-ól�3Y ;g2[.”-ðé-0~:8ÀßbHi€?hÆ ¢Ä`ô‹ÎÀ¹+$¿ATb*ë8�!›(Ë¥ÆG‰ä#nŽ:–�qô“mL“�%ÊŽ]á@ñ-¥¿üµÁkÙég98ÊB—¡"j‡ÿc²ãÎãx‘;ý8î2ÇåÉiÙg²@vÎd¶\([àÊX€ DàÛ‰[Ÿ´‚€àI¢�ÐàH=q,²�˜dtyÉG9’Ë¡#�ë° �ã–áÅ@½Ö!;X·Îycœc$îcg`K ÿR{'üðN£é¶ä l*è/݇̇±‡u\Z±ŒË¹M4mþbùÏ8µ²pj“åÙŸÞ£Ñ Ë`q Ið3 `І£ @8¦+Œœ4â\â®Sâ"�˒ู37Y޹h7êÜgs§9y…ë:E±œ5[`6ÈÀlì˜kɸ ”,üDìÀ‰ôl{OßxɈ·£gÜÊøZ€ø\`Y8.K^t%%²s©ÆD€0ùL±Qô¤GqÝ$róøèÖ�Þqú;)pl²A ¬ðà  §| ÅîN’)ÓJªÉªl�«g�ì\½ß$÷([` 8Ælst¥aCƒ]=ãþE_ÚÒG�þòXÒ·ÿ%…T`àG@©ÈÜàˆÎD¾H¤YG~â6Ü嬓ª” ü$¿7àGNGvàØ�íøqp\Nb쪢S‘ËL•¹�é›Ûps©7‘ßdu·`èƒâvì0Ý�Œ+Ãó}�þ+ õ_Éàƒ?›Š¿S¹è¸9•JM9éÖ9oä£ä#yœßi±ë&ñXwQžT&ë³Ne�ìœÊ\9s¶À¥YÀ˜Y°¶Ñn·WþO¾Uø}­^oh±Ÿ¾÷[¯èÙ?¼] 愬þoÙ�t\BGðß×#€= ¨Öj øëÛÛio´¢ �(¢qwÎ2qÀîˆ\ê1¡�m�à8Üaø£�hè‡|Îo_£ý­M-úûYûhÊSyöÐóh@Ù!7;Œ ÿ[g>)ŸË¸»eù£Îù�«/æ�r,›ål�s[ ;ç6a® [`¶Ð(¼þàÁƒ¶žñ·%wð­íf³¾£¡þn£Q ·öææî d5ªÕ/Ôú‹¾2ê)ÈÉú€l�*z5°r(@³•C�úy,�Êœ—7à§ ±Ð¯©qpKÏû[âsïßW76*KZ°(g€wÛ!h÷À„@ ��—–Òt„8  Èsv,§ƒ’B6!Q-"²ÁÞ2m£3gÄï‘ÿÈØðokê?�þ_Ë l«Ì¤¿›…CŽ[NÊ‘ÞräÎoî´Xº²xÔ¹¼y,S”‰gÊ8—²p.óåÂÙ3³À?5âïþ Ïå|©çõ�zÆ_oµªz¯_©�Ú^³yÿ°ß¿' _–P=ðÈàÙ¾^ù;±S59m�ý¼žûät5õ¿H�À«8?�EU§)vÀàåæ1i`|0ÊcÀ½2WÒ*¢q;pâ´í€ÎSþpSûÿMÿ�þñ ÍßúSÔäæà¦¢ÎiÖ“Ïrä.oî4ç7·Þ<æ·9ù óa,ÿϘ‘²0#Cæj²Nk�âÈ_åÁͺô…; Ïy¾¯©ü¯%󌾪•ýBÞFM€?¯í{ꇇóûš8Ôt~šÒŸ†pý/lnV–^¿®,Ê è øý+ Ð7øô ChPT@›87€Ø³´îÐ#›KÏD' ¢r Ñ@6ø›ÛÀ9!h�ßž€_GSyùZŸ>ð¿—~Wa¯à(÷˜Ü$ w§ÈcÚ¸àHpys§Ç:¢Ó£ÞåÍÉÓ].ól�™X ;31c®$[`z Ìkß}÷]CSý�ÅÅźžç×{»»õ�V«þ®ß¯ík¿¦ôï·ªÕgƒÁà=—ÿ-Ïæµª_*èd”¯æ ‚Ó·ü!'ïý{ê¿ËÔ?³J&þúhPrp9àÈÞE`&�þ '�Áß:8dntCgÔ‹¼ÐÎ@mÕ—ÄéΜÀHŸ¿Àÿõ•ÊÏJ“O�ª¦ªXu”•4N³\ää·.–µ~”|$OÌoÙ¼¬\*þ9�yHÊb¶Àù-�€óÛ0×�-0•ü ÷þ`ìÚ�;wÖ¤ºÅ†>ïkóšÚ¯(lW«ËõýýoÚ4Å¿@¡=mÚÃ3~¦øgAÔ @S›Až›Aq$O>òá@ÎkN9„ÈGv\¼HF8xDj;#>ЈWmìŠïð‘?í2 ´%'à­t;ª‹ª"¹™¨C¶e§E]ÌC:d]äQo¹Ècþ2ÙùÇir‘3e ÌÄÙ˜‰s%ÙÇ[`þ www絉Ï}Mï3Âÿ¢^«­éy­ÞlVõ¬¿z ‡`§Ù|xÐë=п.»òi‡¿¡0åÿñ½ù0B/s"h¼á87 í�œç¥={gžFâÈ�Ó]:;È�mŒrÒyäðÇèkT¿¡ú7ÄߎŽ�¹ôïäl(ì¨;nÂÍŦœf^–'ê�¡b1Ó-›;ñãhÚ|ÇÕ‘Ó²޵@vŽ5ON̘™Œ{zM¿9/ð¿'ðçÙþ÷jáArô�i~½š×Ô3þE½–×íé9¿Þç¯ðŒßaV=”¹wË€¹�{Üé�ÇÈdPw^e¯ `Zô%Íõź�!ê2!SÆ`Ç¿''ƒ…}?¿UPZ«Lz< |¼ß�“°§òTaŠMYgÓ��¼(;_ä±¾Iù‹ybù(“/Æ]ŸËgž-pn dàÜ&Ìd µ@í×þð‡?T766j•gϪ‚¦Zeuµ6h·—«ÕÇ_é™þ_iÕþ¬ÜÿÓs~�}ŸÀ‚¿Qqæ68ÐÍ�7ñQ?IKqÁ/3ÈLÅöÓñ·Ûp~ò9H<‚´ œìò!(>~Oñ´Àoo«Z}ÿªZ}£gü?)¿¼#-h†"`:NS�ãE^L+Æ‹ùcœ¼¦¢ÞqÒ‘¡¨jÊÿ”_¿¡uå%²6[à”˜Ýæ” çìÙ×Ñ€ÿ‹/õÿŠî×+Â¥ÕæíÛÍ/ôq¾÷z¾ÿ^Sü/ûý »»_éÿ=ãïöûzÆŸ^ãà ¸ 2~ÀÁK8³ 8Àí‘z)X«_Ú ²¯-ƒé+|No¤ }æ%s3a�À¢Co‚Áž:#�/MóËáé�v%ìÁÕFÒ« ü@¶•SÔ©6K�Vk}M[¼{·³¿±±Ó{ýz·÷êÕŽÌU›Ól”‰‰t(òãd×w^V±¼Í�i”Í”-0s d`æ&ÍÞD ü£ã®ÎÏÏ/õûýÇR±UïÓZµÊ¢?¶ç­ò.¿FµkÚÕïqïàànC£À_ÏþÓ«|e?ä,@üÍk ™>î �7——+›ú€Ð–ªÞXÑk„šâ¨ÌÉ hª~�‹º@±"Ùà�ðigÀñ/.VÖ×+{ ûjËùà}T�G:ú¼ñrKàßm·;þ·�dMÀ ÷æÍ.ÇT ºcŠ z™ògÍ_VÖý1�uÇCN£ßŒôLÙ3·@vfnÒ\á ¶@ðjt½¨•ý�d‡ïtïþ�ø"¯ï)±:zWn¿V[–“°Ü;’þ;…¿“MÖpÒs~EÒn};�ø)si„`ð×.‚êˆf¤«Ô‹èб8 ``CÀ�wîTþüðar:ÿ�?(e'�†¸Q NHÓø�³NÀàOþ38þ½/¿¬ìÈ 8B²¡¨­ÿmÚJ7¯š`ìììîýôÓ&û#ˆ¨Š`*ʓҭ?§M—�²uð¨EÇel*ò!»œóež-0S d`¦æÌ•Ý Œ@ŸÃ­Vþë]Ò½ËZ�¶ÌôôË��_wö÷¿hÜÖ†;-½¿_ó>ýv’�†€v)&3 ÃSXò,ÿ}·[y­Ýÿø07ƒ¸ p¶cÀ‡‚^2ý¯¯jâávÃ85ÊcT“ø9=r£Ûï¨ïôƒwâÛ««•�[·*;<�.-ˆÔ7©y�f9rËä‰ä2‘Çô,g ÌÜÙ˜¹Is…×ÕðÓÀZSÛ+Ñ'Š|§»÷w¯u=Ï_Õ3þµêáaÐÇ Hϸ?‘�†Îêp:.ÐïÉx'~È(\Žie�RYœ5€=ÉPñDEsÜ#sf¶µÚS#ÿWZWðNë jrªr4“2î«ë=�ӌɲ9zwü¨›/ê]>ò²<ÖE^&»ž˜†.ÆGÑ̲fk�ìÌÖž¹¶kj�øƒ‰„4@®7+ù?ÐÿFùþ^@¿ PÓ&>úzOÂÔO:òç'‰N23õ¾¦ÚÙ,ßïò;_‘3Å>Ðè?…’ѹ‹¶"Ý"·0žX[«¼Ò¿-­-hËÉhËh«_¬î;%¹йKÖ•ñ²|Ö•å�:ò™¬'Ž •ñ¢n˜sø¿˜VŒÇ¼YΘ‰²03æJ®›à×ûÛß.þæ7¿éjƒ¾E-¤[à}þíN§º£Oôît»U-êûµó©lpGN{÷§•ýiáß2Lu/JŒÑƒ6phœO O>f ÍTâÊ·'�ÞXÿ¢|³×«t´@S��[âéÍå£nÚ1·?P]=‚rLx‚¼Ó�f Zú¢RwîÑ£µ•¿ù›ÞÁÆÆvoss·¿µµ§ýv+Zß0�hÂÍeŠÓwu.cî2Ž›[oŽ>ÊÅ|Åø({fÙ³·@vfoÓ\ãgl�ð�±P_ìkh1_§Óy @{¨wùïi#šjMïó×´¹�žý×´zý© <ø¯õ„Ž.~5 Aïbˆ½÷œc�>?œÖ $ðH{Á±.€/ êë…é‹‚é³Âz+ .'€7 Œfðü¼@ˆ:Ëä�–ô;´›ËËKƒ~ÿ°Ön7÷_½ÚØùrc÷ÏÞ8xÿ~ïðà v!Ên"6g¹ÈcÞX‡eÒ‹ò$�õðH.yLÏr¶ÀÌ-�€™›4Wø¹Z ŒúÇø¸½½ÝºuëÖm½>÷\‹ü¾Ñ±}•òÕjUžíã èŽÍk~k*´*9½‹vUm0>0uÐr±¯èi4ž�{â8À[9ûš`&àÖë×i4_ר{áýûäD4³l /r§Ã§%€úââr»ÑH3�nwŽ�*îííïýðÃÖ¡f%&�›#96iÙé'q—/+7)-ê§©Ÿü™²fn�ìÌܤ¹ÂÏÑ%àÊU5òoê½þ[JÿRqöíÿkÉ <ÓH_`¨‘nCz®%½§€+Jv1»Í1ôúrÑpê'4âþD1àŸf4;`ð×®}ÉFÝŠ€_6ó;þ?€œ°æ`~¾Û”—¦x}pp°·ÿúµv&Jû,Ä*£ìŠÑAN›$;ÝùS¡P®˜ã–]¦Œ;SÁ3e \¨²p¡æÍ•_e úß}÷¿ðý÷ß³]/‹÷:ïçç«Z_ÛŸ›«j{¹Å���zðXãß»Z,·Æˆw¼m¯¦¹Dƒ©ÁñS7Ïß�¸ÞF¤ wþcjÞý5'/rŒ§cìñ3úDí¼Õ@0¥oÈ `u?³#ä‰ý®l·­<úÜqese¥²£Ð×,B]o´Ø‹@z-ª®9pÅÇñjUû+k�åQžä´ZÍ*�f’s\á1ÈŽŒ•òºËD,Çô¢>¦óOJ‹ù,Çz‘!ýŒþ!‡Šü?[`–ÈÀ,­™ëú,,ð�:ZÝÙÙ™[XX¸«ø}©ïk±Û*ÀÑÔó}½&WÕûûsÛÍæó^¿ÿ°qp°èçݼ×Ïbµ+M`‡ÃȈýAJË1ý<²QÍœ!-‹üxíoC3^ÿ{§•ÿ}½ çør¿ÆN€ü¯ó4ï²4_FîiÎuÖ;-Æ�oRZÌ[”‰O"×WVÿ¤2YŸ-p. dà\æË…?c €yÐ:Ú·ÿ®0ÿ+Å¿ÑÈõ�F”üŠ4°ÔÞóM}çvÿðp]›ú,2’æ3½Œfãè÷ÊÙ!�þ øæôßr‘ŸæØ"zYö|6NÓ{�ü[þK½ïÿNü`pôü>�þõ{hÒa&]w7|ÄM–ÍÑ—å·Î<–/ÓM[�ËÂ]&ò¡6ÿϸ dà‚ ›«½ÒãRh·Ûszt|W€ó+Aþßyž‹+Ua8õ]Óóì–@¬%ð$ §·™âO$\ÑcÅ üG ¥ñ· ?ET³<žÈ'àþýʶ6þ©kú¿¡Ðä1€öÀö)ÌÎð¡¸+1ŽŒ*K·.ò˜×e‹º2=yŽ£²6ŽËŸÓ²Îm�ìœÛ„¹‚«l�¯¾úª½¼¼¬WÔwçô§77×xøÿPÓnvÕÝùùÚ›^ïþÒÎγÆáá}硦õð|?}°€èy¦}•²¤o ìq ñþCåGÀñäôŒŽ™Y�ôÜ F7¥güì.È(_ÏöëÚ €…~¼‰ß�Ο~¯­õ%¿J[ _W=»OÏÿ§hæø,u­ ˜›ëèÕ�Åù/Vë««ÍÁöö>¯*ìk_OHÄzâÏ[â˜ÙéÖãÇé�·ÈcŸœ–¸²Ì³.ÂÙ¸«æ:?¹4ŠL¨õÍ7ßtá�¦ùïj žoÉh�Ÿ–øWwçæÖôþøW�ýý{�~°ã#9<¯¾òÏøO°²a΄:ÙAâÒqô×ñû½ÿ‘)?ä� a·M{C{ðx¤ÆG†”tƒo ðßhÊ[ þÒBÁQ= Þ¬ˆ��x-°sÿ~OÇQë½zõV{lîþøãæáŸÿÜ?ÜÚŠ;Ŧ£ìîŒÁØŠÀ‹ùcÞbÅŠ:â˜Æàïò)_^ü‡É2]´²pÑÎõ_ºFàŸðOrW7Ó‡r¾gšY#ÛªûéŽF¥¯7v«Õ»zwüŽžñÏQˆ€4 0åÈ÷ÒpÊ ôðãÀd¨›ýèY½ßûOÎÀ”Óñig@9²iùª¾/`„ƒóå?Ö°Ð@§<´‰ÙôÚb[k –ôûÖôfÁ|oii¡6?ßì½|ùNý8®Iƒp±þÓèËê/ê\<š9�ü‹ÖÏñ ³@v.Ì´¹âOl�„8ê»ø}+ùoôÜ~0d¤¯xEŸ¹mh+ÚÎ�êù~‡éò�,½Æö; Ô9L�þí¤Ã¥Å|Lù�ßû—€}°SZ A¡ˆÝÿ÷šÖ#ðÇ– šÑŽm÷å\p°hÛi'T=u²fÚêw]³:óZ[°¦Ç mµqpðîÝ»F§SÚ†ÜÇ£.eÿÊòN“?T1]—Çc?Æ™³�-pÈÀEX5×yià¿^ou»Ý¶¶ìmkŸþêƒÿôŸØ§¿ºÓhÔ¶wwözOõŒÿ™–ü©üëLOä8ž÷_G`'…�Ž7‚=àÌ,À)ÔÔytbŠˆ† Òù‘2V7Ú™Ku.ÒÈ¿¡=èDúƒ6Úi,,Ì ü[rp’ï§´IÍõÅxìiQo¹¬¬ó;-Æ­sù̳.Ü®Ö o*7�-0; h”¶Uô‘žÍö®K\—#°®�dô׬îë9s]ïòomo?éíï?oöû·5ÅßüyV X]ùUü30WјA•UQ†\Ed‹qyé›õUz1ŠbW‹ñ²V§ÉãrÇå=.Íå3ϸT dàRÍ�›…FàŸ�þ²âOTï ñå7y¾_c:[¤ÝüÖô.ÿ}mäƒÐbäøó.ÿuw’�dsloÙÝy(¢Z”Ëê$Ý'€>8^–Æ:wÏü4ÕŸÔÍ“ê,K/Ó�¦O9o¶À¹-�€s›0Wp™ÔÕ^ +R=ÕJÿßi&௅úúf­ˆWà”U@ßÑk|óZý¯7Ò'æqXáÿ¹¯òOÇ9áŸ>ò(SÌñ Uœ¨ž„`E=qëàq9¦ŸØèì2Ä.ÅZ­�:Ëîêqyœ×ü4y]&ól�K±@v.Å̹‘YX �ÿ?ÿs«²¹Ùªt»Ú4¾ÞÚyóæAs0xª‘ÿs…_kZgü?�ôb×õ9ÿØ®8<‘è öæã¬ñÙ¿l5í‚¿BkGžºIwp[©ŒÚÇ#¤YšáLMŠ;ßL¹¼B- lèM€N{}}ž¯jMHïpg§'¹—6I:ÚàG&:š<ŽM0N�pÖ´XG–³.ÜÙ¸pçÎc�úð«^Ñ”¾VüÝÖK|·õßí·õú¯Û{{OõŒµ®�Áñ¡ž«ÑoÀÿGvôC`Ûâ2ðOð¾€¾xúì/ ÿ�ÑÍ�@Cm±Í/A�e* ýNíÑ€p.‚ôcKkA–Û÷îÝYúþûAûáÃ¥Þë×›z%p«§Ï÷67Y—hš¦äqp¹ÓðiÚ8M}9o¶À™-�€3›.¼h ðÞpýa¸üÞúwì ¨=£Î˜3 Zñ/›±/BrN Æî–ñ¨ÃÐ~ ½¢W©ähÁfÚPãô‹° ÇÔÒ~Kí[·j³Ó\Yéî¿|ùs�sdssG³IÓ´;<ÿ>˜±XÆf-ês<[àJ[ ;Wúç¹¹�+€?èP­ÌÏ74ÍKi_èŽû½Fª¿?hµø„oW£ÿ®Þ㯱°ÏÏ÷¯û"¿�Μ€°÷?é|» ˆ^ ­yFýãÄÑÄð3R|ª n�>ûÛä- 9zpA€ênë¼YÖVÃí¸¢Ù€yÚÓ#€ÝÝ?þñÍÞ‡ã,;hteú¥ŽJ•÷h+9–-0# d`F†ÌÕœß ôÿñy=¼Qù§ª  ê•��Zeo¯Vé÷qæ"|º÷©Àýåÿ«ÃhÅyÜó÷ä3¬Á3# "—Qéˆnd·4êŸö½[Èàî8ܺȑõ{¥¯ý5™ú×fA<¸hÒ,GS§Q³Òju9±tþÔwwßÕ——ѺT�Md9š*e˜ðoR¾Xß„¢cõiòŽ e![`ÈÀ,¬˜ë8³èKW+÷wíÊúúZ«V[Õ(mM«õ5�­¥ü} üU}¬§­éþou¬»æÒ™½¦�$ð8\§ÅC·ÎÜiŸõÇqƒ½ó8y”�ïSrõ‡C�‡åI]s™bÞb¼¬|±lŒOS¾¬Î¬Ë8³²pfÓå‚çµÀü?ÜëõNóððŽFlÏ4\|ª„{jCÃÆº>É'G@»÷K÷HºGºy/ç;æÇ¿ÀðY‰fò“á>F8Jg·ãÒ>ní¨ÆTûá1é“òË\B¼x¨Åx± ¤—å9NON‡Ç÷Þy"GΔ-páÈÀ…›87Pf�øñJßçÓÈÿŽ–‰¿P™ß ð¿LóÆT0tjºk.ê.º/«÷¦êŒ&æÔN6±yÔ¥ §øQ­(w8E•—“•sêƒiÊÚ<.Ýi±\™.¦—É.Ï”-p©ÈÀ¥šûf7V úÏžé 1ûµJ¯WkÏÏ/(Ï]}¹í…�ß ü3¶XX˜–ï”c«Œ$~Ç'Ú ›Žì:1Ï‘¦‹D' –`Qæ•u>tôD³)k4WY~§›¨}(Å2Q.æËñl� µ@v.Ô¼¹r,0þÊwß}· wÀ—¥b÷¾½³ßÙ™Ÿ¯½×‡{vçæj½v{MÏ÷¿Ñ³ÿûŠ…IwÏlÕ�-Q¤(“[ö¾óÏj{«ÿ ¼ 0r>®µ\c€7'W؉ë·Lë8YËÉ> ½mÐÔ¼ H®E“ÅnE}”ÉãxY~§›;¯ù$}L�õf9[àB,�€ 1k®Ô�º±moo/,//?�îI µÚ ¡ÕàU½¦Ue¥¶€ã‰Ðá¾ Ì»ŽÌ§·€Äœ’È äĬöO+ÿÏøÞ}ª-’xzÅOí¥÷þµâŸ×þXù_§mœ�OIåÓÿ6›yì¡uæNsnŠº¨�éȤaÁåHË”-páÈÀ…›øÆ7à›š°§Éÿ}…od•ßj\xG2å©j¿~£¥÷ÖWË yà”§Ž‘Æ§øXà xÓ¨Ÿ×ï�Ѧ�êE*Ó9 ¥Í~ØíO¯ý¥M€Ô.ïáOÛ¦ëš)‚±Ê±©”`Fó—飊ÜéÔ£màŒÓu9¤rzóå8óºžÌ³Îl�ìœÙt¹àIð�Lù¸¡i@X[ À;üÿA Àë|GHÓÿÃaùMúHÞùØCã}@ÇÜ´óÓþšŠO³Ÿ¨)"QŒ[†Ç�¨=¦ýÛ íÉ?±þKL(žr4m]ä6]�Ýuºë™TG,óº|äż9ž-p!ÈÀ…˜õæU Øýõ×ÝN§³¤çü‹KßüÝß5¶ÛíÚÎÂBu§Ý®¾ÞÝ}:·¿ÿ¼ÕëÝm óµZc_£Ñ¾€�/ô©Š†‹òm–°€†�§}ÿ?ÆJÉÆØvÆöµà¦í¤ø¨½#¿¯3^2OÍÏ/¶ïÜY_úÝïö´Eð|okk»·±ñ~ï矷ß½Û-t)s™Lv료Îqsçƒc¢/Êézȳ˜.ÓEY ;eÙR¯nêܸ *à¯_�õiÞGpMô¶5ݫϾéÓ=úÝFc]»ú=“s°^?8h3íÏÇ{4-|ã¶íÚììÿûbàã?ÒE$I?ÌÙ[)-i°7/fš¤/æØ]Ê‹@IDATû$qvœ›[jÞºuw¡^o´VV÷_½zµûï÷÷ö†@Ñ„îjÔG™tÇ-—qëœ7šÊ:8�X�)[àB-�€ 5ï�©<ݼìËòkªÿ;ñïêó ü‡#Àê¡ÖìU««‡‡kúpOÐç£=öïÏtJ ölý …ñìÀ¨*~È|›Ýÿˆ`Ôê¸ùìZšMMÌÔp�ºÖ%tKKÝZ§ÓЫ§=¾¨oDS¥óZ-›ÇNXgNZQ¶ÎÜée¼,OžÀ*™.ÌÙ¸0Ó^ÿŠG£ÿñÍL£þ%ùo4uù÷’Sâh¡Y_žÁa«U?`„3h‚`HyôoKœ‚ ðØûã?£¢þ1ˆ"Ϛʀݺ2nݬûqÖú´.¡©·–ôÖIwÐíÊXÔ”úÛÛ[�n÷å¨Þ¢�àe.n¦ìÕÏêýÝn÷©ž£~Ñ<8`Š¿Á³ý‹üxÆ?¬#ÿŸ‘Š(TD®ô»Èî¼î7^ýO\�[üƒÒ•(Ÿ¶kz—s¼È�~•¹Îk›"r䲸õeœÃ,Ó[Wf§Áù)ã¾eù³.[`&ÈÀLÌx=+ à_}ðàA£ßïßÒ»ü_èfùkñ7ó+',9üá· ÜY¨èÌ¿?K—U&?MFSåãÒ‹iŽOâeu;/i863qËäÉ”-03 d`f¦¼¶¥›Õþþ¾&Iõ‰ÞÁà éï0¼Çdxt¨©åjÊ1à…ïôŒßÏ÷ͯ­•.ùÀÒ�¢6á ÅG3LõöÞû7ðË[K=þOâÌÿ�V a�Zæ3ohvFsZ¦v˳äe½>®þ²üY—-0 d`&f¼>•¤á<‡ó�ÿX¯ü—ÿ²PÑzÚzÞ¿ßﯾÝÜäþ'�ÃÃûµÁàvšÞȰ‚?<à¢ðÜð¯Ívr$°·#€3pNŠ¿+r1ОÖy¦m~Ùס)Ç#íþfÎÙ…™—#[ׂÀ¹¦ö¨î>{¶®�‡ý÷ïw67w¶¶vú[[ÅéøI&§o“ÒN£÷èóºí™w®0[ d ŸÉcà÷Mìõëv[7ÄÚÂÂ=�úý¾žý¿ ^ì<Ö3þ%=㯰‰��€lÆË·¨ùP;üoä‰ùbú4rþãòó˜�Ýþõè­Ìôô#S¶À™-�€3›îz àoT5íØ×> Ö•þ\7ï¿ÒÿošÍ¶¿Õ;¡ŠÀ?Ú8í¨n% Ç1cÔ=âéÓ¿Èç}ìÍ£ЕécžÏN>º'Àðz9 ܥÔ±nƒ¿‹ì|v'ÓÕîpv®öï3“Þ�À?ÞXª‡yý}ñjä+ „î$€5(Ò�Hߌ•s0ÜÕH³{^™É�ÜôJúiÔ?ÿ$�fô› Á_Sð¼ú7~ïÆë3"Ø[†Çp~&�´õ|+mtôº´9¦•ébú´²ÍêüÔK`Mäôa,ÿÏ8‡²pã}EÃÈŸîrSáfRm×jó Vø­ðÝðž�A4ÜÝOù”yNÀÒÑgŽ‚™>¡FSþzL#(�# ®àŒ‰éwf¬þñ½ÿä¸�c ´0n*ê,›“)ÊãBŸŸ�L¬nù´@R>,R¬{Rœº œò\sH™>¥nœPÄmÿ¹=sóñ}÷ÝwlÆÓúæ›o4§_miOþúv³YÛ^\¬é³¼µÊÜÏõy¾ÿLùž+ÏSñR⎓éÓZ ý#' �üGÝAŸ ?šHSÿ8ò§iÈ(dÙqÒ?cª±@ëæZ·n-νx±r¸··wøþýþáöö^w·øZàø'Ð1[> ü�¯Œc:ë©Çua^ô™²ff�kéGVŠM”§2¢êr¾²ûÛÝe; %ÇéÎV{½ÞR«ÕZW¸­µLëZ˜ÕîÍÏ×Z Õžžó¶Ûw´YËW*pW¡ãƒÌüêZ€—"X†ɺ"w>ë/ò#'uHD_L³.òPä³Ù¨Þnwµ/ÀúüóçýúÂBçàíÛ�ý_~ÙØþË_ÞöÿøÇž Æ`�Få˜ç$Ù¶r>×ã·61陲fb�kå”"Fòeù¬†‹÷>ËÔmYƒéòksÖŽA8ÎØ ò´¡Ù²¶î}¬gû_Jÿ\‹Ãôª“¾wV«j£–ê!Ÿî­TxpW!;g=+.±Ü‘XíúLJÇp\—\æ¸Ð×lnj„2Ð�ê½Þåß�÷jµ'õÁ€�ü¾í×jkõ§�{èŠntÔ—È•:žùÕµ¿Õ8ð;÷ï~Óâœö7.žÌÄ‹aÜ6í‡> ¶¤-¦œ#$´nµµ`SßÂþ¥>7§¯*�Gù˜#™`ÄËÀݺbÞXî$Ù*ù��?ÝSN{/QùLÙc \)à…F¥+•Ê-�å·àKxùä põ™’g ˆ®,.ˆŠ@?ÉpòãÜêßé¡ÝÛ�Jå�ÖG¿ý±RÙ“:R*™‹:-–:ZŽ:¸p�vî ^ûÕ¯~µ¦éý5aâÚ~µþNÏ÷õl¿Vétªïz½/÷÷¿Ð7|o)4µ‹_Ú»ÿ@®•:pšvsÞ+bÿjéDاWý}Þõ×ïË[èb¾‹ì:m¥½rhW¡É€ÚÿŸ�€ä\dÓ—[·_ ¾HÛé'8×�–î'穇~øž„œ)[àÔ¸RÀ]9º"Öuu|)þ\GsßWH¼b8JÎ|ëˆ+_ºå0ÄÇ9P:E¡ŸþMKwÿ¨ü€?>ÂYÈ›9u”É“tè tñ,ÄñpÈpíÓS½¥iþgâOå<ÓÒ%¨ZoµªU-òëiáßN³ù@í¹¥¯÷5ôà°¢7ÒÞýÈ™>/ øs€¼|x'Í™á ?ãïOÜh�¢Þ'²Ö”Tt¾U´h®¢�ó†ßP_лŸ±žk sXe�ë³Ó8ä¢î,ñ²zÐé§f»‚ø>hRçÙSYàJ9©·ôE®u]I/þJGðWÄUc™« "n=" „å68âÿ*Äoé@÷4ƒðRIz"p&ró.ã'Ét…<£.�ÅuMÃ94Î+~Lp<øÿVáwºñãšÄÔGzôžÿ^£Ñ•ÐÝ šŒúùloút/ ‘é³³€ÏñÄõ2êNïü³ñq~×Ñoë¼³#m~_�°Gý¤Ÿ…N:!ËÒúºÚgê¿- ÿY¿úe’Yuý�ͯ.ŸVömé´åŠù©‡À½„´²ŸFêLÙ'[àR€ÒŠs�Ò*aµRYÓÜá¹>Sö¼‡¶ ýv¥òk=¿ <]ºOZ Å«�<\¾ =® 8AÄJ÷{â_ݪޢ×# V´6 ²©ð~ÄÕŸžÚßPo6ä�Dõ4m*ÆÑ» Q¶Ž²tËÝ'Ï$t»ÝæŠh~~~EÓúËzÆ»¸77WÝÖB?Ýl«ú,ocsw÷×�~ÿ‘¦÷ñªû�4Å/àÏtM,è+Œ·üÉ]<£\vä'¥Ëø¤5�éè¢þȾv#�GÙéæNÃ\ÖEîô¨;«\öSÝ€Ÿ$ây-p©€ÀuN¾¯3ÿ™ø3�íZó7¼:8ƒ5–ÑGD+OÌ„– è¸Jì Ç+DÑD>ûá l Òá°ÙM_åç•¶Í"A>ý…@}ÄÙÞ‹±²ø¶Òþ]º×l€}7¡‰ÊâTerzä¤ç0¬wþ#\Ïö;ív›M|x�ÿ±žïÞeóíNVÕ'Kù`O}·Ù|xxpðPÀr]+ÿYÜg /ò;bÎÏ3b°÷þÿŽëh|¢Á£\v N/K›FOTËð¦©çsÏ“FÿGg|ûg0·Ywwþãò—ö¹›6÷ÿZàR§GãßHþ^án¼Jt%4¾Ë:Û—p8ë¹:b@ùŠ ¼É7¥¢ tfä[Tî Ø{®ƒz} 1ª“w}ç•Ö—þ­I¼R<6£èÔq—‹Ü2õ”‘fïëšåoè IåK9ßé¹î—L¯êÙ~u´â»v Y�A£±Ø krxÅ�çûý<PfÓÏO'ÀO{þG@Gám€}ÏúÀÊNNtÖ9í[7ë¾\™ú&?ÿ÷mˆ[‰Í·þ´ÜõWŽ<ÎweL”;òyZàBžõ—™ã_† |_WÈ×Êð· Oœ‘«Ægvñ£#r8å"þè#G€Q?á.qÈépÚr#þJõ2ò+ç€Y²�*ò¡öƒ¾Ÿ”ßùJ¹ÌÇÆV÷»Tæ×Ø,èL�rFŽ‹ü8¬K ÿXˆC8²Ã$~’™&�˜ècšãðx��Tÿ眮ߡ¦WZ««·^¼ØÕÂËúÁÖÖ»Þë×ï´Eðû½~à~€é‹� 5šŒtëŠyO§ߺÒO¡óBþ"SF™²Ng�™:jÚÛÏ>•üDgj›3‚ èo‹=“|G!9~sÎî(GN€Ì‡±ÿãÕf9‚?:®Ú¤.ô´�#¢E°5éž(ÔU~U�þ¢¼?ÈQø‹­SEMQFç¸yÔ¹Ì�//w++ëÕÅÅÚsü�¦ñîõz�´ýè=íä· E~éù>ÏøùgºÞH'ÌìÓ›:\€žGëdý5}hA³- Õ¹9fÚ{r¾õ}€÷{KK¯ô{°&€[J¼MYæ^�‡G]”IƒbÞbÜ÷ôÈ®™>@þ)‡±ü?[à €3#mMWe|¢3�zÙ׿Åb¦]´d ø9ƒ§u”5gñl'î@&® _è)ã«ÕW�¯¸Q¼ª|HWw¥­Yf-J·õ\JÅß³?€œ„wZÀ 4*rDêVV:•[·æ‹‹ ƒ¹9>Ë{Äîý¯icŸ/u3á­ˆ®œxÌ”é&[@£~žû�ŸùKÖy‘tè!Ÿ·ÃØ0>Édñ䜔ç$=»ü ×Áéj�ÜÒ€ =–Bï>�TÇç–ŽÅ“áG6gŽ]¿»nÊKÊø3p ÁÔè¢ì‰WÛ|å¯ð3ò×[)ÄÓ�˜¸a„0rŠ? qn%˜­,m:¬ízh«xë"=S¶À‰˜©2r+ð�ƒÑ>SÿŒüáò Ã}öFî+Èg¸²�ÏvdénË:âÖÁ©nGÀ€ã±]�û¸ôôO�7–•ÖÕÔÿ=Å÷Ô÷†œ‡]àO6ª3Åæ“NÓû 5ÝӨ酞%~¯‘>oC| ¡¿ ›cj1S¶@ø‰—�µæ%YJU>IcâI:Fú|î—©ÿV·›®f$†3ᱦ g0;Á·™¢ìô"?mþXã:N=¾•ñó¡Ï”-0µÎåü÷ju`ÔØÕ™¸ yí_ ½è,\R<-ò+>ó7ðÑn²À™ÌÙ ùl·œ”%ÿ|ƒG™+„:|…¸>x‘¢n$WuŒ¼@`Ûà¦úÎ(½£á?‡§z;óÚº·ÓÔj~mß;××'y÷5RêµZxueå±=ÔsÓuM÷/ËèÛÍñ›k�x®b…´ÚŸÅ,!ðúçhA v€üèÝÎS6âuQ-OKòi¬éöSÛ¡ õæ~�#À[ 7‘dçªavôVÀrçáÃ;kÿð»ýwïÞ÷77wöÞ¼ÙÖ+‚;%‹¹•aF~ª(§Ÿn¤ŸFVÖñíÐù]õ§[�²ü&–Êt¢ÎåW4 ~ [ ä_êlüB•®éìäÖ5õ[6ð›söÆÏjËE”‡Cœù&dÇ-S6Ê® n²Ž¸Ë[fðçê"MrZ(¨Y º^Ÿ››[Ò‡{n üo˸¥óÔ¥Ô´G»Ò×WÒ4p[7ñÇÞ,hÆvU>S¶ÀðüÔh:�§€½®ž�€_o†T 8 r“ìsÈ£ïF¿_ѧŸå¥$~“¦>Œ*@†Ì‹rJ¼Iÿô¥×—–ni«æ¾‰´÷ß¾}µÿË/¯kúÓëÞÆÆ¾?]äþ`sò“9îÛMŒGÙéæ¶°ãæ.CÜžˆÃ3e Le�3;x™ÿçp�ßSµôk�‘ߊ³ÁÏm�…·T1‹çŽ,ú3èGÎëÀY�쳻ȕ”}‘Š7(_uE^V':®Ø2¢<€¯*ú§7x-°¦åÿDëþEÿ}…§Zàÿô°ÓijZ ¢÷…+ZáÏͼ«÷Š^çZÑ(ŠYƒLÙG,ÀjÎ5¿ÿÏ«ÿ@çN€ò�wƒ” ñ_†ª4{zCM³8ÓmBæÃØð?:4ey†9oÎÙ ªÇyóZÏsK3­ÆÂÂJ}qq^‹xký÷ï÷t3xÛïõ¸/Øtü<Å8ºIÁyͧÍG~nS)?Ž¡Ö(äŸLÉ4Ùgv¨RgšÞôK;æýNòÿ*™Õí-�‰Œ]’@~ÎTdx1ølGoYâ™8Dzñ ÷UGºåÈ ä¤›¨Ší 5Gë@çþêËÃz¢Úœ­¶$à ð•·z‡¿�VJË z¿Ÿ�øÔ™8øÛ'rõ™g $ pŽþ)0ÒMý§-åØ1ü=ê—0´7û½½4õÏL@ÒŸáÞ¯dÓ$Ùé7Š3ò‘ Ç íZ§³RY\”çÕ¬ z½ýƒW¯6ô»qkó­Î=FÝqúb>ý¨l1�oKÖS†ó$? H–Èÿ&Y`j€“I[ûÍ ØyMm^h¿ m°žk|òTgü��wÄ[œý~¸uœ©Qö™ ÷Ùet�Ó†±aÜrñå8¼(ãºÌ]�y,c‡�1Ÿ Ö»ÿÕ�Fcn«Ù\yßéÜÓë}ûóó�ô¬ÿžFë©­éÓ½m¦pÓ¶½£i[‡ÛÈ<[ÀHç+`�ÃGçL⼡«\¦l�- …¢nB%é�À?]ÊÏ¢À“(åå³yrpFyš:Ÿig쀜ÔÀMJ?úV?·̉ãQç´ãx±ž²¼ä±™%'`(æÿÙ[¬žŠ´¹?»â±ˆí™Î´oTèk�ãqžû¯¨¢ôp;‚¿�€È93'9ñ ¶ ‡ƆÿÑ¥VP·Î²y~ç E“ˆÞàï~âhÁ#à_y%�z§Õ꾟Ÿ¿·Óí¶õ~ÿZ¯Z]ÑhmUÓ´‹ûÚ:”‘‘醜)[àTˆ`o¹¬Ò ·8ãx µ‡éeÿ ixÊ$™ô‘<Ð[Zì–®??¤Y€²:o²nþØ.-–)|»2ç¶Çâx‘Ÿ”^Ì_§§ÏN€Œ�©ÜS#ÔºN.-~[S5Ïtv}/þ·ƶÎ.¾êLJ}ŽÌŸ™ÇqŸµpòÁ¡¨j†ÿÑosÄœNÜàïüæÃš>Ôã²€?DžÀx-•>Ô³¨Ïó¶w‡[øîëÕ¬¦^Ýj鿨dA7áô*|tƒ¦®LÙ¥à™J |¬ôÈðŸ8ú/? Ÿ(rd~rÖˆs=ò‚Ûù¸7^£‹=íÈ-saÜ¢L¼bÞbÚYãÔ qÛË”-0ÑS;¬|Wf=òO ÿîêÌ|Hz”LEô9O8ÓÉ?éŒWRJ‹¼(ûŠƒ;�¢ntvÌIƒHƒÐó®õžnv{âïÅ~¦ÿù âÕƒ……V¯Óié}ø¥�µpcä™ \“Ê™)[à�?ãÅ:—ÆkÊœªŽç™ääxNjÒ Oz™Œnþ©^ÉœÇìýÏšm~_©kQ+{èuÖI­ÜL½>¤/yÎ5VW—–¿þúÖþë×ïvvöÞ¿ßíomí•ì àÛ�oS¾íù6å¸ù$½ÓÍÉGðø…úõ3æu7óÄ<ù¨§v¨ŠÝü8ÓLÄõÌûðÛ!ð™XÆ©ÃúxæZv:²ÞrRŽôn§9N_]p»Â´kð7'=ÄÈ}Gïïo(¼Õê뷺齑žÀ·?h´CÞïç]‡LÙçµ@às>É©LAç_r.líü×ñpý4Ô§¦úÖP€k—«JK�µ4ËuÞ#¾Våµø¯£}­ic ž7´ÐëÞ«Wowøáíοþk_¯òÑ·1Œç[“upë£u1/ö‹q—‰·4·á[e2e ±ÀÔÀ#ãÉûñ@ á8à÷ÙiN>{'ÉNWÖq^t&ËæœíqŸùI1úç~û )r²Q޼žñW^ äRx) çsZøXÑ{þ)Øp””)[àôˆÀOÀ` `K:a@>UW—ŽÖj»­>h[«š’Y˜€£?„^ù�Óžkú GC€u{++?í/,4µ~â`ï/Ù’€9'ßš¸ýLÊCƒÅ4ßòHƒHw]ÄÓíl¤Óò$žPl²eºÉ˜ÚÀHÌÿs–™pT‚àÀYX >;}“å·Þ\YÇy-›û* /ãÈvƒi§þä¡g¢< £ðÍ©³LŽºbžYôãfÔá·|kL?¹�[ ºt«ÅãíÇò4yœ÷$N]é¶È})? �52% œÊ |æú̆Ÿtž”NÝÅô‚Nå�™3 ‚{™³³Œ£›6(ë8¯ë‹uZvš¯Îj€Ùg·ãä7eò + žàxq ×9ŒýŸÚå�iÝœ‘™õc1!fÁãΔ--À9’Î'�vҹù2íù2m>7�ãN·Îz¸CÌ“åé,ptOnñvUvÛ9«ŽþP–Sjš:ÈOÞLÙi@?•´ž¶»ûp¦Qˆ3Ú�3yÚ3�|Päee]‘ÛùH7RÕƒàÀT=Ïr·uÎGï@YÚ³#@:uº±dêNeuijz=Þ<‘#�öæËfùzX@ç@zî÷‚?΋I�£&-òaììÿ‹çå¨&6â]_3goàÆ–Ô«õfcn®Ýºukþpÿ@K÷+»»=})p0a_ÌMà6ãÛJ”�^Ìõ.uÔã…›‘R3ÝX L=p_&ò¼ñ�!žUE¹Ì¢1éÄ¡ã8í9ÐÙ�̵WëÃ9ÓÑAnù™Ö'2y¤iãôÑÒ¬“8vÈC€Ì�Ï|âNlÃbùÿM·@èxÕ�v,üC6È_¤�"ð#�â<¶øÓâ?É,ä•¿ô8ë"ûsÍêÖ¾íF·»Ú¾ÿÁêßþmeïÕ«×z#`sïçŸ7wþüçÍþæ&·ƒ»o)Ü¢¬›$Çtòó‡œætn¡miR2¿ �¬‘ÿ�<ÀÉ‚�þ/�8|ë—ˆ�/že)EE½ãÃÔáç?Ž“ÆèöžÉÇ�Бùb NÑÇ«ËýFO>enƒ7{þ[ïòîG¼Š”mlò¹¼�‡ôDÜ\/ã¦îö2¿ú¨&ð÷Š;e3>ŸCæÖŸ†�?”M£~ÅÓŽj£©>â$§àÌÿÿ +3Ý\²É*VåUyàû>êþ:4 æ@‰ÃUÄBOS3W775?Ãu\¿Ûޤë¯!ò-‚\8SÏÅ#�¤ì³x|`ŽëHöØ ó"ÀW¼°@Pßö�¬<šÌ»=lF#p%$T>û÷‡X”ɶä¯8»�Àgÿé €8ÞÔ—MŠøqˬ»vâ—ûhÞ‹€{q(б¾]†.ø;Üu’ï]#ÞàÑŸåæÙM¡Ý™:vŒv.œáCûóbÛ-%çý““µ×Ÿ?¯ñ·¾Û§§kGš¨�5IƒO˜¬[ ~Ü.bdQä'.«òvÀ¤ßPñï|›÷Än~Äw�¼OÜhMºí§XD*±vÿÝ%~·aìNÝçg¦ ŸŒ[îùGòר÷Wÿ��pƒ4oh²ˆ×™.<í0ÔoÉÇ’äÙÆºEØ>3îêpkwü€"üÄaÈ �gü×µFlðüÜt#V�™Îí"c„“øIµÐÙŽ#Ìgü$®PÚ´|åÈÛRÂ~v|¼vþåK<É¿§ÅÀ¯ú"à'}˜‰{šr@›€û⇪¸‚`ˆ#]õÁq†§‰xf`¹+ŒøV#ûA-ÓX¦Ë[×™”˜gì;ƒ„|ðš( €Hü>ó‡Ï�ÚÊâ¥h'|c*C…³|®pQ¼àjÀø ÀRÑî5î¾ pùz §)v:Cɼq–×è,s�>Œm9=²Ð0È£·û£â‘F`ð ½oõMÂÐ7ªéŒuŒpŸýC#õ¾%à 䨸(â¤L”´÷µØÞ~þõëÚÖ«W‘¬¹ À_Û·È·g!l�+ý!HÃê—„�M$~ÑLÂÝ" åcq5ÆŸÛŠûð>7ÝaöE Ýþ±@:×·hiŒ ?'Ú¥d0oœu+¦I\àÞ?‹hd#¬,q%o5O=ð7-t²ôACÖÓ”1¶±ÇE‘xš0x@x4ŠbÐ|‹PÑðÌÈm;a9#¼¶@î+<ôÇb@žëZÆÇ{&:ëç6©ûDj1Y“ü¹ P_@>Ú�Åâš$M‘Ÿ°eR…g(ù¬é•F Û'òû¤ÅÝ>i÷EÇ·­—|ˆí·v1غÐ@ÑHqa@ÁG.�±ˆEþ³í<ºì¶È(jƒñ;s@}¯Ì èR:ðWn0Ô »‚a‰®�.u5?–áƒé œë‰í†?ôO,C„d�+AëJ¦ñ-„ŒÐ¡Åöà ågšQë3xF.:˸”Or÷=˜¿,öÓýØaO|4dÿÈú -®[ÚÏó…­Û¦ ž �°0Èõ‚/&ÿ™DS&€’ïÛ€' ÏñÍ›[Ê;žøËÐ…:Žui3“xÛz¹�ýŒ¢`Höì3n#ñà¼Ä�ímÉ':žW‘˜„Ͻÿxÿ_˜+·Ô“èÆ“øñ3—KHËÂtãa FoYik^&WüXׇ󴯉];(p7ÂSŠÀ�@ $%Õ �’ =Z26½(xØåâÑWbl�$u½õ9ùsIß6ÆÈ(~ÐOäÀW¸÷1-¹ží² ŸÔC–õö:’¿&U/œüÁ$'#' êt ýó#àx]ÁmìßÐïäκˆ=r×I6A.»XPHø`¼H�ð™‹e¡\ñ�?n¡ÛãV}ð" ð²Ûºâ®>wÍÙ„XÛTbCÑró5™mæá¶š�ý‡N‹¼ñ�À±'D^(sö—Ù…â[ŒNŠÁüäæm”ñ<vN´$y'|0gÿå€ì÷®h'ÿ¶=FVŒwmWÜÿWmç]õ÷�·£ñEˆËBÈz–—¼wK¶±m ¥,�a�d±‹Å#·O‘#<Å ^¼× ÒhñC,Ýèñ(Êx^ m‡ 4#u&Á£'™sVÏèå^?ÚÉß €ÌCçöh 0n¸ËßZ_hyYǼû~éå’ªù³}ô«MÐ|wg�ÆJ!3aa"¶²šÁJb‘üIfNh%¶ç>y©7߇ñÃ>öÀ‰ÌBÀW°+KŸÏUÉÛ±îDç[qù_ý!ù�°¢ø6@ƒ l­0Ý0l­3ŸeÖ]{Ê´_¦Èžp†,OÜÿ×h0ú ]òd‹,ó}4ŽÐó°ÛÌ~�y4ç>d:Û›ŽÆæü°]Ø‚�ÚQ†Àv‹øÆº±Ï¶¦}Dv·T!h)9ø ÖØ~»¤fÁ#œ¼+6Ñô Ö6ÃgqêâGEÇÒtÆÐ€cgÜH/ûä——¶,($ü\Ð-ãëÒëU*'tk-˺廱­>Ä+ê£ú“¿ƒxs¼>™lë��v~øá7/þë=ÚùíoŸM?þzöþý}"ø«¾è錡Ën馃–ïvU¡·]©ŸÇ»mešs­žX†,<˜âr;gáTB˜/¿3‚Q.yD[Vb™‡=¾Ð[¶0€�e¶·ÌþÑ›®aüÌü 3ŸåÐøl3„·mSóòyôWtÙo&mYØ€U¢-c»ÿØáJlcâØÆa#kå&X–9pæ�-Ïxž®´óÀ‹0õ‡øb“Ûë£Û¤o5£„Ù?>ö#ÝD “‰ÚŠ€�F¼’°ØØßµýý÷S}pœ¾{÷V ô– Ô€;– kïÓð¹ä„mÚzóÆ–gl�!óúØisWW'èFx"¼PR]Wòç €x€QE¢ÍɶÆcçQæQgŒÎ´È&¡Aò(įmÁ”,+}ä>Y—ý©zøêê¸=ãÒÖõí¿�§žýÕ| ³>h~+sò�+’Í$ÿœH 9~W•4ÊŽÞÞ1Éû˜nå³|'}â�éè¾ccŒ0Ó%_êÂIû3O—ý” €Ú¥ÿìw´çqcû„o ã(n§ óç?3Oþ/Ú6ûñÂ(éoëÿ^’ü¹098x~¼»»u~vvzôã�Ÿä€——<ÅôaO£èû辺¹u%hO¥Ø4s˸ O†,"¤Îø¹0Z9¹Ô&gË2¦¾yÓøCdº‘4º¡­¾fWú4_b×µï>L{.}6–»oyЙ‡¶ t Ðcoìã0ú¯I;pkI‹IšäbÄ#Ÿ¸s {l¯“¿1â.>¦kPÆlßÔêÿ¥¾}€½pâ7ßî»pdûìµ&Ëúei/„cŒÎø™üáŸñÉÿeƒ:À~ccGÿ ¸µ¾³s°þìÙùÆîîóµóóÓÓÏŸ?éoƒÿ&ìïO¥Ìrv[�Îõ³�ýXï³öãŠaÐúD‡ïžH†,<€Hþñ �¾˜8¨Ú­�,l¡íļãë‘j{ä™v[Ô7 ®�å`Óø2o\«‹Œ6øãŸ©&ê©Ò¢ê•­�úСþ± 96%¸-äÖ[f>×AW“»~®kÚõ©‡Ì…‡˃Ñ�滄„a‘\úúÓÕ¿âJŸÛ~6[Øtš}övt‰ŸmriëÎlgÞæ>ºiæJ|BœëØ®†Ý<4‰?'ë©;Äç›Ü�”èC _“IỈ繾Xér&zC…1ÁUÀ8˜ñg©(v|PaC‘œÄbP¬ ÜÑßO$'dO…öÄ3Ì-ëÃeÝ>»Eòh‹}­q‡—ÚáG`È Û|Þ¯gTP‰‘䀞iŽE£�BÒuÁΣ<>rAîz`À¶ØØ».¼åÐè ¦³h÷Ç~molßgš´¿*ÙÙÛ[û¼»»öIÿðA €OâOxz{ ¸îO®æ¶�ÙÎzìK™í¼Ma«ã»ð%š$‰P2pÄaØð‘˜Ì)·¬¾³ÿb[Ùñ±Íy»JºµÍl;vJ]Mæ:5�çLt$'}c/\×xžOë†b÷Áö™‡nK$~ÑDÁWöNõÏ—§úó«©úÉø‰«¢Á#ÜBúßð”Iàsé“g›>š Ⱥ’·Î‡úy/ø>ïÞ3J˜0‰TvòGækJ1I‹cç¤K]èlcŒ4ÀhôÈ Aûcy9Zá]0¥=Še¥=6Î4Ùq¶ÿ^IÿÝ‹kž?�Wø,ð²@ß ¹íRžyÛ£s]ÓÁkw…É^Û7¹e »ÇÐlEÚ.õ5¶©í·é.ù³-è¼]}ØvCgp]ËJÞò¶-Øgý`Æ y¶Y䣦*kÇB˜C» hi✯ 9ùóØ$}þнëàÇ“ÂÇj~üa fÀtÇîàÀÌ4ü*ŠÜ„Zæû|g;lGx¤X*£yÀeä�üy|•çXxaà…vNþ™ftå‚�G½È×£{ÓÆy”šÎÚ”¬·°åq@ÉžÄÿ“þè——/×�ñïmà›@n'ûq?²¬F»¾16ž”ãŒÞÛdC’ÌWºd»{нßkº}':þD§Ý¾è>4°g›’†7Ø�ùÏÓ“\'”œü¡‘Q7×/ù²­›ðô¥„Væ+Æ, NÕ?’? D5ÎþÛ:í¥áÒãÈ/�vÀFEh&všùŒK�ùç:Ð@)›Ç75Æß'�Á �˜ %ø¯Jøï5•ýEüÿѤ¼Û–=-v%�wI¼È£Œ @V#8ë±Aä£ÁteZël]Ç6øÍeª‰íL“ñ¹ 8’‰lܯ#’¿Îþù àϺìÿE·2Øn‘,ëÝdµúÈmÓ§Ç&vÔ1Fç™9{`h”‚°Õ½ÝjjLúsÒê·ZJã~¹’ù®ßj3ŸíwgüôÅ…Êî[v¥>×µM‰]§”›·¾M’]¿-¨çºøê£ÝÎu±ûδü9Þ¸æJÀ©Æ €“¶/yQ‰-ã‡~‚Y Œp½(v›[[{›/_¾|öÏÿü½¼\œ~ýztþùóÑ鯿µßˆ0K—kËV‰ñ_k#�ëmèXëÞG`ð@臭)ÉÔÈû“¶jW#fªòƒè”𣲭ÅÁ&#Ó#*�Ró€:$j×7 ïÉÇ4~  y¤B›ㇶ��•ô•Ô�TÀ§íe}ûã>?gÿ$ÿë\òWSׂ¼mÙ�åî_ÖÕhÛ;y!@È 5ê3‘·‰!¬�Þáßí/µÙõ»mßý�‰¬,ô·µíp– ¥±Ë`ŸY–éRŸùœüynž‚M¶3o™qng´?¾L#R‰ãC²-"ñk1ÀÀ[*<ÈbÙ¯ Æg‚o«¯ôñ‘ƒn©lmîï¿Øùî»ßê Œë[¯_??y÷îÃÉO?½?üãß§ïøpà°Î…é]–™ž§³�±muîvyèµ´Ð�=ƒ¿jŽÐsöµPB�jļÓü••-¾gT1¢M$]�²Œ%žIÞðê9ù»®G;zdðÌg �/'úÄ€‡û>D9Öý~Ÿ@Ü�žy à.!oWIÓ¶Çý¬õËuŒ«É_“|—TñÙNä`û â&ùrÁ»Ælkô‰þä‚Â},qÖA¶)é�¬„\¿O‡M^øþ?ö®6]ú¹ ¾Hþô…¸Ÿ16´ áó@ —-7<´æìßÇê]t÷±µÁ`}w÷¥f—u½¸¿ùâÅÁæÁÁ_ôQ¦‹é‡_×þú×/ÚfDz8a³»Ð™/íélïúøó"€é’}<þA�xä°L†;§+‡JþªôN£å�¯g“¿þìúrÀhò(3v,áûÀ¶`�NË<êÁ5°lº¶ø¤ÿV €_Þ¼‰§ýñå>‘hXœj¢ã¬ç®�~¸ï™¦î#46™·­eŽAøbb§Žq;áÏ$ÕpÚ,—lâl|Ë�ûJŸâ5?úHÛe¡/–™Î¸¤¯ÃS'í̓²?^0~|ÀIl{c|/jc^ûCt´ë>dû¶]Ž“ %|¶ôTvÜû�3Éâõ@m ãýÆ78.r—:½¾±±½¹½ý‚ÏéJÀwñ‘ åÛóÃÃC-ÞjûsYòthšC§´ÊÛÀ4’ã"€8kv–õù±ÜØö£+õ´/Yì t$}Õéö':å=ä£×õ� ÿÀ6crø†E@ÏèóÀL‘<7\ð…@} h7¾ Є>B+Óiìadæ­_„çÙg4Åm´S„ævþ�2Ë,®€ÄÊháMF—Ø)A";@´>h�êŒ]l_®kLåLcg8ÔeÊ/º|ÿY…ø5añý_þÿ* Àõís•nù‡¾¸µ¦¬Ï}6=ÏŸ&m’,ARH¼Lè!ƒ®  ®­Tèy»ÜÚŒEHÛúEý 0Jœe%}ž:%¸ÍRO?]S\ö‡¯Õ±Ì¸ô×'/íñì«\úìÝž1vô]uÙ'Ü`AÀ­�n¿HFNàx J{,õ53ÊçG@Q&Ó2À]ü>DJ™ùU`Ú¼æƒÇ¯ÛGG?Fx„¸Ñ€o028Ë&•Æ’±¥qì‘äQ*Ñ xt[ïQçˆÎõÁ‹€À=ÀÇ%þ·z˜ïP  ¯1é’,ÿñ®?W <²ñ�i±½<º!}Áî&P¶áþÙ§õÈM£+ytWê2á«DòWŒxÍ›8óNöNú$„8Ó#!r{!ømȶÃô!•èSÛ·H8ø5oº†³  ^†eù\·FÛ˜H!ùS Ó™>`Gür½šßëÈÚýþkõ­Ïº9ý`ÿxÀ­xo p[`KÛy¡Â¸àøáÆð" Oƒ bóìx—,GgÞúe0u)Ô±Ÿ˜ÒµÇç”Ç7Zð?£`äð}€í–.G ÄäI%�^�Â<Ú©ä6Œ;G"ìëHÒ]ÖÿIñùËë×k_ÅseB·(šïhR>C¦ :^”nKdçËíØ·ùš ²Û·ïþ¸=ËáËíÈ:ÛƒCNÒo ¯ER7Š&ôð£‰>`*‘DHæ‘- ]ª×Ñ´×–ðO.ø/iËÀú 7峯]ú'ÑS4®ºÂ ´Ã—eÆÙM–õסٺ]"ã@IDATgÀ¸áš_Ú¬µ+µx€1†‹&ùÇxÁŸì¸0ÂÊ"À`Î…à²+j²Ržm2]ó‘õ™ÆÖö"cú�ð#0dÀ ó@w ËêS�œCMu¿jļSâßÓ3õÉ·ÀÒ1�fÀÎÀ,2†f$çQ 7Üì/õâ)½Ëÿ^WþÆÑ,âl¦5·ûŸõÒpèðؾäѹ¯ÐÛ™/±ýY^ò–—þjö¶±.÷˺˜èÛ‰ý‚„OòŽÉ\tÜW£¶�û¾:ÓÃ'²¼3ómÁܦû\Ã�ßÖŸ“¾±û7ƒqäՇݘõ×ås[ö±Ó&…„Oá¡?0I1'Ʋo‹ü^Gïv©ùéëK!÷>û‹�ø žq!û¸  í�´¼ÇºF€ÿ àÕÀÝݽí7ožïýã?œ�诂Oâ•Àé”é‹€rrQàs±n‘,ëk4~ì+·=Â#‹À�€79húû¤òEÏÄk Xû^gÚ¯u©ý�ž|£Ä»áädDƒŒfóŒ4xÐŒH�À<:%]ÆÐðÉ™~¾äÏeü»ˆìÚÉþ¡©Î`¹e™·-õó w·¿n;÷šä €y@’Kýþªa\‹�¾ ½&}Î÷0I KòW ¢•Yºu(ú#.¾1íöjº_}8Û@¶m¸Å|­ŽëÎÃnLQ¬fŠå}>\¿O¿jyÙžycöm�nûÁþëž Ÿ Ö�<È(ãJ ‚XØO[wDýPü&z-ðÅÖ›7¿yö¯ÿz¶ùêÕþéû÷O~ùåãÑŸÿüëÑ_ÿÊ”Fˆû S&»Çú’·ľ÷þ癀‰¶<ûw°‡a›ú«àµ/~« ÜÞ|þüàäíÛµ(Ø<ýòåDßàq+Œ²0…±[(ÖYf¾†eÞÙS°õ9¼ËµKÇçš�<®ße Àî‚€í¹î÷Ôˆù�½µµÏrÈz¡Dü÷$\€ŠyDyÄ�‘{Ä‚sqÂvá2 °Üþ–WX¸Ãè©O;€qÃÍþÚéPÚÜ'÷Ñò;Çš I°\îçÙ¾|ÈŽâ¡?ëÔ©HÂLøOþLö­ÜÉ?¬$ë­žm ™}'�Ý~ˆþ´mG²=ƒ©�lÎ6M�˺CyÛ»mó‹°ûOò÷À>ŒùX¥¾ÝW\.ê õ°1.°ÿ¹ÇeqÉ�Ç Wˆ Ë W#›# ÀÆöö�nlëuÀ—“ýý×úT°Þc>=9ùñÇ2å``ªâp‚.yëÐgÛf,“ÎG–gŸö¦ÄT>.Ýã‚! ¶˜Aóim�ïð6 ¯Øx®; -¯tæÿ[M…¿Ê˜+‘äÛ†6$sÎßÔ¨âJAŒ=âÀåè„7dÚ2:Ç-‡¼`��zØQp­-ëjí ìË6öid™· Ü¥}É×ê¹íNÇäKÑd æ>?%€Ô€+3àI ¨N—,ó$ßÚÆäN"hj&–m÷ œ?t´Qb*#[7Ö—õÌg–Ùwo¹qio¹±ûï+ÆÖƒùȶ5Úñ¯é�-Ò»Þ¼~´ûtfŸg{é»}‰­ _ ô¾ç ´Ÿ ¿ƒ¾+±Ntæ¯Ï,nq+uM‹�ççÓé'] x»ñìŸ*%´¹p˜±;"ä‰î³ÉòE´aü—S£ÛñJ€âòh`è€ f@”…ÁÔ�î·ÖhýQ©åÿ•p]ÉxŸ{ðz,j]·°Ý“ƒ—Jö/•¤_¨ñø† ^0ê\ÊÑ*U82¦CHþ,&ÜѬ³­u,hû²�+#¿µš øq;Ð@É7ÒÛýuÒ�ûüJö\öçì?ÎüIR%äÉ]™²=¶è|µ ÌÄOYWB0xû{“>þÜþPlçÆ®×Ç#/ml»,Æ�=t~ðÏm/ë{Y{b7\ó[ëC)s=äÐ%ÆS®c{‰i™+ë|#Ì¿*.< ÀǸâíÕUÎhޝì¿#ôG ý&€Ž%혘¦wIÃ× xŸ}ÖÕêΓÉm7�A�ðÀ#0dÀ@ò`êÛܰÑ-�/,d´®dþEeG£�Þ3ÿu¥„7Òÿ�ý½Jüƒ  ô-j£Ñ�@GÃX�Ø/ÓO£ÍvÐNúYî¶|„€-s[7žë¿¶C ”m5ÒÛùå^{Üïo/ùCû9€.ç¦=±³· ‡NÖ²‹³=ê¨tÉŸ ŸÚp»ÆÑFnÇ48Óöa|�Î2×1ž§³ÍP̶qÅE1ž¹ô¿Ê¶j}"Öó`Qûèí£F[fì¶àÄ1¤…Þ©ä<É_‹�x8P˜±€,þZ˜˜�°\f? Dð ";º¯ôÙôÉóNíói¹šåЋc~Á ÓñçžG€Ü»ØÑÞÙ™v=d1ˆt?೘¿*É‘ãŸtö¿¥olˆßà*À�’¿nœ‰ßÿ�“¬)Ðæ©,Ày¦% ˆ[Ú�ƒÍ Ë�Ñ›gè ^Œ`ãvÝÛÔ06öëv,Ã>·—õ5_7•q韄÷üu†¯úéÀõCx]͉€Fá=ÑgºÖ!ì’ I ÞQ»Au®$~ê»­Œ3�óö—yÓÆ¶Éxž.Û ¥ñGò'ñS¸&É¡s{ŽíP¿óì†ú¢mïc˲ÿ,«Ñ–•È$øXlk¿ƒãÁŠgþqö¯q,j4µŒ0 2˜iˆ)ƒâPfy–eÚõ²l^½Ò¿m]_ÍwS(ô<äÜEà�‡4`™LÈô¨ê> Ï3�Ë7ÿ-~¯ÛZ|§U¦š8xU�ÛQ\Á•òD—�;dy^ +õ™‡6oŒÏ æÑC»d›>[׿ÖFÖÛ�íÌ/‹I´_8m3~œPÚÉ<’™7�¼L&è,CŸ ’¿ë[Ÿ“¤u×h×µ®�G^ÚØÖø¦zü° ’¾¾3Ñ] ð¶•m9Ö–/‹—­Ï6öì›®iëk¾sýlçØµ2”Xô Çeþ'@qˆ@ÛWö§ëØHèØ Ð"žÿ ˜èû“³³3­ÞµÀ>;czàâ Ó¡§¦š!¥VGUgêÎói[lFx²`3½ÃÁ}…dý ¯òu›à5úG)¶5Šß©Òs�Êáá]�KÅ•cF,ŽÁ»cðÐòßà)u5ÐNd\ʲ¯l›eø�w[Ak²3Æa©GÖöc}æ¡oNü`?å�?ø…`&t`�;Û`ïzÐ}�íM—˜º–e?¥,ó™ÎuJz‘ÝP=‰Þ—ÿÁðeòÏmãwH|r�L©_Ú åmÜÏ,÷¾6¶�ë´˜c…/Æë�Ó©\5cÉRm„Åм´±¡×õQ ß<ÿ×=Ñ`ûì×_?鯂?�üíoŸ�þò…��æÂôHÀ)ÈÌ[߇kvªÞùµ/ÎɸÐc?ÍÎÅr„�! €¼£=À,ËüBZ·Ž4rßjÄmk$ñ·ÂïUéwmÙ–|W·Ö(:¯ê>'Ìuñè“(F"�Æ^0R‘YŽM†øx W;yá×�i×7ŽwÜ5±uïºC«¢ >°Í>�•`}¶íÚ(�ð‘ü•„â?¸-ƒ’öïI½�¼Ÿjbp=lS,-î°}Ú&ó•|–•tæ]Ù"è³í“Û_ÖC»�ð)^Xîz%Î~ÛÒfOýEõJ›E¼ÛËv5Ú²Œ]LÔ7g:K�ê*@\ÕF|`aßñ3BÎüõ&ÀÖ‹?hžÚÐk�Ï”üÿvò׿þ|®Kkù o_1…P˜™:<•d™mŒeÖÕ³¬†í ß’¿Û�ðH"°Ì Ó„ÁtÆO–]°Ð½�_ôlÀ‰ü�ª÷2<‘ùþ �ÙUÑ÷¢p9ߣÏX¢™L€bàÛÖY欟I<Îþ5q�"GàúÆÈ¡yÂ=J;!#§‹Àõ³]–AnÚ2è¹ mò™~Øoé€!N€“NæM[ŸyÓ®Nôƒ¼,èl_â\ÏtÍ>ëúhû¶¾ä-Ï8Û˜Sròg`¹í²Ÿ�íÊ8Õì-£Þ"ûÒfŸu‹hë3v¿Z̸=Õ±Aòg!À±Å‡�¶�¶#ÛÅ-º�•€ç“gÏ^oîím+®g[ïßsö¯�…i'¦¤2Û÷ášÛZgì‹¢jr„‡�el+ƒ�öÀ3m,U§Ÿ‘黇*¼šÏÇ-6õ,À{½øÊ]Ô×]Ïe^„Å€3x £Žå§‹G¥ñL²ãµC×Ï:‰;è’Ï 3�ƒéh[“\øi'dî—ëÔ06øÊ»ì°]Ãõÿb×�ýkÒ�[Ú¾k/Ü>àÄÓÇcc´YY²ÚõúpŸ½åó°}Ú¦ä-7.õæÁ.åÀu¯ƒñ騩?ľ´™Ç£èCi×h.åÖgœløfêKH¢§°ðåè.b3Ä ›jclo9Û.¢ûô©ß¾ ­ŒïBp€“F’ÿd™íN>Ÿ8©©eæË€žv±‹i7—2óC±}a�14ÐM… ;þ>¤,\xcXhyF2°fýnÐeyI㢔E]*ï¤ÿUù«0ýÙÐôÊ`‹¢2¬ù åÌü –|ýÍÆÆÉ³óó��ÓÓW[ÇÇç'LT$=i_,c_àW… 3t´&7ŽŽxPìb¹yá`�¯Œmg¹ùŒIöNþ�éý¼M`"Ï Ús›™¦5ÞòŒ¡�ì§‘,þu�>ËEúZ=êääïÅÀu|•þñ±L2b_Ú,Ãc Ч²^£¹”g[tæ[;\à»§º À1É_ ¨m®È�0<Mâg¿°ƒj…‰�éÁS„m,‡7]bÛÖ0¶~¡íÀ•òƒù?œ ^¤Mʉ߃!ï|è\lŸeЖk °v®N!¹ý¿!š�F¹’ü+rÛ>:=ý¼uzúvs:}®Éfûlkë@—"wÕ` V|^ŠI®ê¨�<ãÉ žä'ù¹è#É4Á±Œª�£7ØÎgú±à€¤Ø¼èø,·«äkõ-3ÎíQ¿,Ö—¾-ϸfS“QÇrãE~–Õ;ásæOâÒ‚²¹ÕF¿Önn£¤Ëx-ª?ľf“e´qÞõÜGû°œm+uíö2þXD»²áÍÊy[Ê[h$’ú#À9˜´eaÞ#Ô”¬+åæ³ÍuhüPÜNn³S�ä#<�,»ð@³ó=<¸<³�m459¡BçÁdÞõÌ—zäWàäääëñññ;M&M4ÓéÎΛéÅÅk-^Ë!Û{³À•+Mdt>6˜ä¡I0xa’GcÃÙbì]�u>Z92Cønhû(mûLÌ�÷P¯î§ís8Ì4xYr«è ¦KŒÞ²’vÝŒmkœu«¢ñMò'ñ³ðÕ€Ûls}§åþY†w²ŸL£ÏÔ=-!ÅWÛïÏ«N».Ø-ê‡õÆ}¾³>Ó}öוãÛ Ÿ@>û¿Ív¯Ûß²}ôþB· ŸmktMæ6„ï/c;Îþ…¹*à«Ü Oã B5ïG�êºV<[gÞÓ‰å7Åøµo|�ð@#°ì 9¢ulk{9®)е"qUžmsbg ežúCeØèìÿ«'_¿~ýU¯MÖõ­îų�|n¸}R­5¾mÔNnlp€&¾ …™¹wÎFÏdÈähu°‡ÏoŸÖÁwE~Lçz7¦é³:ól+Ðnó n4�Î6C°ëÍÃnwžÍMu´‘¯ÜÔß]×§ÿå¾Ê;¾Ø—~¼–gÛVã�º*Œmßoª°¸bÜÇâØõíwij˜=ûç€Ë%'dÓ„?Û”4þ‡È² ¾™§Ë6ð5‹À² o 3\(Ð@ Ø-*®•õ“}Y6ë¹£3¾˜É³ëgg_ôÄñ±&™S9t¿‡ø¹¾M9‘1IŽ„ïtÿš']$á¸"€ž:ª v QËC_Úr±’vÝËÀ©?U}i�&n·‘ýf}4>†Bö‘ëXn\Óe™éš½uÆØ¸ #ñS¸ @âþúð"9¦ø(íKý|äz×å]¯×ú‚LmÇ$!Lòçá@?c;b ¡}Oy²;yþüÅîßýݯþû?<ûüùèôóçÃÓ�§ïÞªRL)žw kY¬›gk›².<:v£mð¯ 8zBÜ—|$áaD`©;¸¸TÇ´6Õ˜­æ;£,Ø Û2öÙon7T†)ºûšüèL,<1·˜ã(޾–7˜:i ‡øØ0ì©ÛÌ:9 “v†Öÿy¶1í ¿m£[d=6.Ès{¦aû[5v»CübK²wòÏ—ý‡Ô¿¯6l—÷9}\–²]¥O×A.ðU/�1§p ŽÐhsggëåËï/þáÎ7vww¦ïß¿?ùùçwúc wÓ��õ.ó%A®•<ZoY‰­ïö§³L/æõÝ1ª0Äò ÑøsO#°Ô€m`ç¶;Ú;ßÉß Û½ :Ëæaû¢É!�}ÑÎ%è‹Ušað‡ÍýO’Âѩ˧Kî‘Ä9Ó-›ÀðEÁ†c.Ž;޽¶^$±F©Jªåã²mU€å0¥®±h~±sq®›ëA›7Î~æÑ‹ì­7žç˺em�üIü¾ô^Æ�Û¾o˜mð>£oËð¶]„ó6cÛc=:ûŸJÎ�Ê\²é1eÃÏD@1ÚXßÚz¶ypp¾³µµ£+/O^¼ø‹>¼®Ïó÷'|Z�@{Ž…Î<¡·,˳,Ó¥ŸšN.£=l™¨°hk„�¥l‹°&;ÞÀ÷×ó`ÁÎÜd4+üÒ‡>`�ûÑgw·rOŒ-ÎAb‚æ$ðî[Èd›y££~;‘FüŠïäl�ÛÄÎt¹Õè€yzúæ@cÝüR'×3½,Î>oJ»íeüä€È®ãk™vïÊ–íð~¦Íeù!ýt¬R;Œ,üa�nÍÅ-€ -¬x °uCClúê"§~Nþ^ ÜÔï¼6‡èh?ï�²Î"}i_ÖÉ|¦çÕµ�qé·•3nctjŒ‚Yð0`·(·�z#Ì‹×Ú Ò¢â¹·fg�q͆>dy3ùÌÊjúy}u÷ 7Zè€æ�@Žeï|hŠ“mçív"3o•:²Ì[¾»]0>€æ€oy  éÇò¿L€í$Èä Ä¯è¼ )XŽ�ope ®”+F¾ÑµmtÉ¥Æcg?¦m—±é¦…æ×²EØ}ªÕͲy´Û˜g³H‡ŠæWá{QÛ‹ôôÁû¡f»H?¤Î"CõØm£\ á3F9@ùƒ n€íÃ#p5ù{.%ðó„Þ²e1ý¹Nê�pÏ#p£ÛÖ.‚ÔI;ä¹dIgh€A7Ü.øŸ…~öÃêÉ�èXHΆ—à«1ñ2ÙbO2³ã²"<í Ï`l:ëKÀ¸áæÿ–¶‹øùÞm飬Sê}¶Ÿ1uJ»ÒOæKÛE1+í³/è²~Í>Û Ï<>Ê:¥›yPú4¿ãÓm«ÍnÜŠöí€øB Æ)˜±ÚTÑâ5¨ñ§ Ô«�»[¯_ü§ÿôæôË—ÃÓ¯_OÎõVÀÙ§O¼ÀAL!ŒËÏÑËÖ)ë©Ùî{n¼`ÛE†Gr÷ù›Ðè/²¼F7µ.=¸ÁøêÍ" ßæ¡j<±ºÿï…g[‘¤�Û Ø‘À™¶Ÿ;YØzê•Ø²FsiSÚÍã]·Äó|—¶Ëòø&áƒýÔ¿_ûËífzÙ6ª=ÛìýŸé¡Û“ë@§ÒMWú\·þìT»¡ù2 Ø‹�¡M=;Ž\½°?yùò»Ýßÿ~új2™èc@(Ç?þøñóÿþß§kÓ)ó¨>S<ïzŠùÒÞ:ã>ëó\¯]§K®±Ú“§îmV²`ëÚE@wL#jK<¸*:ª2É3ˆJ™D1-‡·O쇂ë€xbÆ ×ýú�À™‰×“0V^t5 }.Vg¹í,϶¦W�s{«ðç³}’¾–áÕí­¢Ïßʱ(–õᲯة°õU}¾{mSü&û@Å·¸Êª#Ðÿœnïmîï·ý›ßL„¦¯^ýxüìÙ–n§œnþéOŸÎ¦üýI5ù3aPœ¸Í_Ûó«^|<®9WøØ`e €60e²v¼òàÂÆƒÆtÆÔAo_™ÆÏ2À#ò\3×€d"Œ®ûõ$WdÄgU-õju-óÿ¼€m»V[ÂrcĦûpéüí³ënŠñMqògàE€u7mã¡×'NúlKÉÙ>×-fÀwâ €d ŒQ®ŒÐÅg}2ÙßØßŸèUÀ}à‡õ��-ÅîtúáÃ'�_1�¦x®�Ð2ÛÜÛ¿\ÇîƒÇûq¼ @ î1¬zÀ¦2ÐHÞ`€ÁÀ-�ÂùȆÎÉß¼Ä3‹×5Fß´ëÂuD÷Åýé«wåíd¹L Tl°&ØXàC%ž\¥ën ´úhÓ=˜â…€;àþ¸Žyë�ûäÖ—x‘}©/ùÒßPžxä´¯¬¢�E>ï¾þ–õÙãç:urûÔÏ피m-ïÃî ¾°Zš±ÇUâøo€ö ÉS±¯7¡ªýÆ‘¬�iÌîX¯�}9{öì­®ìêƒAšp™K™(ÞÅróàRVòÙ6Ó¶`ûk—Ç>¦#ÜìtÐÞÈ›IòõóÈ}‰(Û0hú1ˆ¤/q®ŸišcÈUññ>�·¼B;h¨ c6`òUBwâ�‰–‰™•Æ u™üÑ× õÑMò¥ z Ä�ôÛýÒ'{/Àîç·ëÙr-Ó_öíP(íK?5ÙPÿ¶«ù@Ö~w@Ïp ~„kD@o(rd\'b킌ÀR�e¾”¹Îl?¶uÛ`v¯†Ñ¸ ÷VºHÈ€À1‚kx%x°”˜Adyé³±h|c7 ³·fu�œsðb35©Âw;†I–eÂA3AS°q '�­ÉÁ_}0OG�Eú>¿}òÒ¼¯�ø)^”¶}>þ²¿†Bi_òøÉ²Lic�==eÊk€g²åJY,L‡´1ÚD¯æ ë5�pcCažÌ¼å×ÅžwÁöo™çÿ%¦¼Œp'Xù@Ñ;Z'”Œ…d'ÿ<Ð<@0Юd‰,‡±m£i~³þR~yïßýºÔ=ÊAŒ�×®q�̃)ì«ø˜�°¯tÉÄ»ôrÎ�\Ÿ�åÆó½Ü¾–~P¼ðýËïK?—‰}öþR¯´/y|Ôdó|×ì‘U€éÂWX@Sb|VìGÑœô'‚OaÞìùVf] ÛÞ¸fSʰu‰©¥mSh„û�•/òêàö_D2Hò1]Wcà^À— „0Ð>2”|èôµ±s}CŸS î…sºòHrP=S=àŸ23|;Á棓ÐÄ‚MñˆKv‹â‚ÞåºqÒÆ²¾ùÄŸmÀ$c_X¦MûZ¦Žb=¥�R?c,¦´GŸë Ï<ú²NÖ—ö%OýÙd}¦“¢@™Y´W®ô?ÕÉJøÇÀÍ͉þ!p{òúõ®®ªè/§§z`MØ¡3Ô sí<}­NŸ _ö'rfî‡ážDàVí62¨ Nì~.%ƒÊ2졽@gÈ4²’»M½»s||±yxxÁ?�]è,ïL½K·°×'„ ˜�x6Û�æO‡¼ÓÀ¦¯$*Lð” æ�³®F/²[¤¯ùì“áËå&—û¯Û'êåÜ×Ïû(Ÿ×÷yºžmñøŠµy;îºñÖSg_�€¾ °;98x³÷÷ÿû7ÿã¬�¼ÿáôÝ»OÇ?ÿüëñŸÿüéìèÈs/ª ‡|· Z¹e¶éÃe'lçúÆø×9ÅøF@°ûÀßÅ€íô1íAèmGîÛ–1plgÚ˜Af°Ì|ÖY¶¶­ÕïîÉÉù„€ž4>ןgM··×N„Ï5ù»c]…'F´8BÙnMÀÞ1ÉòJœ˜ìK¨ÉJ›oÍÓGŠÿuïù÷mkM^KöØÕäß:>Ë´ïm0¾FÝg$~ù0�›+ãmßOÐv}kkoãÙ³×¼°¹»»wòñãßN~úéoz¦åB:Ô@—ºÄÏÁëC:ó„Þ²>,“+6Ô³OhÏëОϡG¸G¸õ€Vö±Ó¹¬ÜƒŃ$4'xclL‹ 蜊Ët«^cp¾£ä¿­nè¯3×Δüy-Žûݧ~ß»³~šD\¼2¨0°sØñ\@;AwÑñ¾›¶2ó™¶¾†‡ÚÕê^GF{åÙÐ~Ôìj2÷-ëšÃ¡Ñ ϼíï;^¦ßÙ¶'1Öcm{;eÜ÷(Ü«þmL&»kûûot%€…À}#`�9—Oë“Áï”ý5غâDmYÉ#¯É�®×‡© °;¡)Üæ.,²îIn}àílw¼úñA.†r Å€Q]cëqm裭_ÛÖͰÝããs-Î&Óé™>:r¦ËÿëS-t©{]÷"²�®Þc'j�eù8åᬎ]ÓÆ(2]ã£ò€ŸÒ�«Xnlù\Ö�§°¨�ý—öe¥~Oý<ça?�Ǿô™íÑ�UøÚŽÇEÆeÝr»¥�³~Õa ÄÃ-_VùùÐýÿ=½B¹·¶³óK}HiãüääËÖ»wo/vv8Ñâ ®ÏÅÖ™g—X¶ ¦¾ÚuC6.šû�ïlPl.ƒ ˆã^¸|&¹¢˜“Rc‘½4º€ããã¯;;;ÓÁño|“éÅÅoN/.žk9z gÏeÔ}L£­2"G L"%o;ð<Ý}öuÛ´ÏþýÔ¿ËlC¶í£½èIŽ€“¤i°ëÛÙ}ƒ¼ ·Ð7¢ãr KÝWÑë�³ßð¼Jbδu‰K›’·=16=s8^ ¸'#òÎ\ Ðþ÷æûr¿yæV«ž l€+À/ZP›}cüËÉÉÉÏ$= {<ÝÙùÝt}ýÿ:]_ÿ�þ!o[Fã �Õ�Ñå~�u•噞µºŽö}ö¿ÌÀý6¦·5:ËæmQßBà1-ˆÅ€íá€ÅŽ«N¹Ì ߨ�&ù3wRœ¸ ·e%¶�å™Ï´õÆtºæ›zè\_dØ�GøÆ¸óÛ[Y„X?NþÆÈ���4o€�mÖ”ü¿þMÿ;~$úÝéþþ{ýWæôLÉ_£õ��ޏ'eB+ùžj+¯º=üQ8ë÷ÀWú:í>cg:cÓ}~,')ÚÖ4@nº‘<¼ß!ÛÐÚÄV·ÛÉÿámí}í±çLp­8!×t‹dóê²KçÕw¼ÚovÄß"ßdÀ†²q5¬Â “ü3Xf»œü»D¯ ™¦>þÖ”üYðÿØïT6·~Õí±M´oÔöIa8B˜¬)7…e},k?´å€yÛç>”˜¶²lž÷‹!ï:ÈÌglÛ‡ŽÙÎ8Ä+Rè8°±�Á•j£h¹hŠ-o8q{.å î+¶EoÚ¸¯ŽåtÔt‰ÑÅ®†áÛFà›-ŠÍö€ ¹3` –Û¶žÁ˜ØXfš:ØAŸ]\ð7™g2„·Oô#T"07@µ¤çg\ñ¢Eú¾zY>Ôv.~óƒE€e}~æÉ­+}Xžû M2tB,iê +±}”>íÇzð›Ò>ûqÛ¶YÖŸëÕpö�iÙ2¾8 ÁãaU0™ìLž={¹ûw÷»7ÿí¿M�ÿå_Þ響œ½ÿEßøröå‹çZÂϼ»@8óÐ×)Þ­®‹·íêäk|@AùÖðÍ\ ÐXÈqpÂÎ2ÓPæTØ#Ï Þ@]r_y°nÄC"àýdì:%o9xžnˆ>ûºMû¾ÄÎ /jýÈý6 î+öaÛÜלܑ÷_¤ ³R�?9A‡áŠî¢�Üåžö"[ämÍt®?Òƒ# ¿ Þ™ì￾øî»³ç=þôÃ/¦¿üòËáŸÿüËôË—-NäÌseNØ–1_Þ¤Ø'þ\�Æ 7þ~³|ó[^,Ê@9XLàËEzäÔuiürËáò¶v#ôD  |�ÙòâZ’\Þ˰´E¢çž¿ïûç§þk}Y$Co¿¦éM­^–“ØœÜèS¹°­mðgÝm@n#Ó«j«Ïg–kã ›^UûOÔ�þxwmoïõÖææöæÞÞËÍçÏŸé3Á›ú4ðÉæ_þòqúóÏž�äͳ+,[že%½È½Ÿë²ÿ'ºgî×fß‹!aÒÕ É:xa€W2lrò÷@l’ýe Û’üíûR;R‹#À„ 7\ý×6Æu«a¾úê•Ó/|öŸ¥Ÿ²Ï™‡6ozÞU„ì›áM0…äoÞv%�¼&³ýªð]·áöŒÛíà`aEØÜÜÑ"`kcgçÅÅóç»»»gg'g?~œìîn©hÏ›æ�ûäÖÅö.çæmðèæ:¸7 €Ôù<0Xd% Ë:×#÷€ƒ·L¤|ù @sÙ׉“÷CúêE€“?üP ~Þ^óÆø)õÙwNþ¶s]óØc 3ÝHnþ›ÛÁÛªýß´‡÷­?7Ýžo\¿=‘Ú`,q¤ž³ ˜L¶.ô‡A’1øS>ÛCûD-Ûë`]2îøo1Ìîå€@´¢öL€�Ip²ÏôÕÅCó @TžHHPyO™Ö×l-³Í ‰Á?£MæM/˜3™‘•Å:ëÍ—vóx¹ (mð…,ûÄ�¶F¸ãÜûWÒíÂ〠ñÀaPA»`çAf¾ü Ô#<Ê�Œ\ò%'NãG¹ñãF�è�Ó©´}%Ï—¶±¬�·¼{~¦S¶Á§ý"ÿ*˜(|¸÷ bR,HìÛà�FVMþ¡ó`|Páx¤@‚/Ïúá½(x¤›=nÖ�Èse¦��-3Ï|jÙPL7Ùâß'sØ�ð "ð Ä…E¨¸àÁ‰ ΃>ì…ó‚Ár0€Í�)Nò$|Îþó/ÓöŽÛ2F`hêÏäyÓIÛó¨yã>¹õC1~òIõFøx0 €›2±s+€Ä€r²÷@̓,êmêÌûôôBج”ô·À¬,ÖÎÇ‘Âü@IŸý“øËÿ¬b“X‡Ò`º¼gm}cÕØ™v½Ì[Vú)m̵³ý]àUö©Œß]ôÿ±·¡¿C×—w·^ìÿÓ?}Dz󣣣ÓOŸŽ§Ÿ?­1W2°=wBgÞó®å×Åöol¿´=ÂFà!.�Š-˜âç°d309>^Û>:Z›h!°qzÊ2ÖN•(ÎTÀð#<à�<œü·ôÁ3/XÜ-$4|•‰Í2ë—ñ™m©ŸKÖ}kºÜæEýÉö™^T¯¦“-*7–­óIàýý—;¿ùÍï4®×õß'ïß8ùé§_ÿýß/¦Z ¨'e’»iæÚZ²·¾Ä5Ûš,˜¹{#žÏÑ^í5ÂmGàÁ-Šçœ @'4â�~¦ìž�]ì]li¢Ò—±ÖÎUN¶·×øgŒ3’ĸP$0�@Ø�$~ìOŠK™ ,ºÉÔwèÌñá:`CŸÌú§‚×§²½w¸�,ô9àW[¯_¯ëóÀû[/^L~ùå¯:R.¦oß~Õ}Uw<ÎÃÌ·žSM—ö}rì¬cë½@ÆŽžõɸ wn@Lü<´‹ƒ'_ð ô` <ÑÙÿÞááÚ–¾Å¾©Dq¦äpæ?UÂÈB1þ<¬�DHøy€ì:É%'÷Z¶Ïl7/ZÙvð5Ù<·­+û³L{7©»L;£íÒпnëöçKÝØÓ•€ïôAÏuL\è_¿Nž?+‡NÌÌ›™ö¬£^¦³Ÿ›Ð·áóºý©õEqãàáv" ¥‰ÅÅx¯má\ �·*{ë[[Ìy„ŸB2f›7Îò>Ú¶ó0u ¹äÌå†â ²xÄ«ŒÀcIv  È 4ëO§Ó󳳟ÏÏÏÿ�ðÆéÅÅÛ³õõ7=øFõŸ«ŒPF€IÛÉmQâjk»²­eyúãBò7½¨Ÿ}íä~Õhd”üw¾n˸ô�=�ëZÖh�iãÒÆòUâÛlþ�s¿-#fÐ)vd�î ó¿ Àn`eðRà¯[Tµ ÙŸ¼íµ>> P�×J…�e@PûOÉä:nË„Ôñî/ð"Àý°¼Ñ^þZî+XÛ®¤/=­–ºËözÚò8kÞ¿½q·ÚÈ=loJü‰ñç@sÌ—„ßóf¦è±k`×5ÎuTu��\§=À¨:ÂmEà1,(_>bYvýúõH+ËŸõÌW-þvº³óvªäº¹¹¯Àoo+Ð�Â/8‰ÎØUò–ƒçé²Ýuiúã¤ïE²U€û^ÖÑVŽI­ml°KæCYü¸N!^){m”îis&ñ×bXúùÕE ¹ �w¦9˜îº¬nÛFOs#ðl`;ÃÆ"€ÁËb™å"ÐÙÿ‰ ¯¼|RÙ˜¼ys¢‡c¾×;(ÿ ‰üdE©£míá#Ç|%˜žÌó„�,'ľØ®O�|‘MnŸäï{þ^ØGn#÷uˆÞuÝ·YÊm3õ\w(Îm˜îÃöÙ§/å¥ý"¾¬¿ˆÏþ2]Ôsf ±bèñV˜�ìª#°±±¾±¹9YßÝÝ�¼zµ¿ó»ßíŸO)gºOº6�úVªw‘ñm-[–ñ¢¶°¥Æ™¶Ì8 éO¹�Ú‡ì--Â5<ÚEûu„[‹ÀúÆÆ–^ |¹óý÷¿½ø/ÿålûûïŸM?|øõøçŸ=úñÇ_§?ýÄI’“1»‡ÁëRÊ­·\“e½éØõ­o^ hÇWtC0þÜNü ',íLÛä­96¶#1]Ò=ž¤˜Éº�Œ9b¯¤äcéæºeâÀ}#Ùç×þ¸°Êâ>¸}|›²A¶5¦N=Äß}·ñ¶×úÛêœ"ñ+®®Õe«‹€›»»/.^½:ÛßÚÚæ»'¿üò“¾°qvxx¬ßpç°ïvÕy¶©Ñô¿&ÏíÐV\}ÐX$b·�iàÜTÃÈÊÒ„uLü«^Lê‹ï›ezD{¾À‡|ö¿¨Ë´�mîwIg_Yg92ÃÚ¶÷ 羯ªo$}ùŠÝ–U¹ýÔ#Ð^x±¥ï\ìí½ä+�úVÀ†nœlþøãGÕrRîv�dÐ¥¼äk6Ùʼë#ò­ÆÃ¸hâr+¿�bÐÞ`P•I>ͼWâg[óì®T|2‚2™e>ÓA…p^Ò-íkAÄ&Ã<¶ÃÆ ®À»Øf<¯Öáß4¾K>ëjm—úE|ÍÇ"Yés‘ý"}Ÿ¿>ù"ÒsÀ–e@µÑd`@Ñ×2ã­§õíígçÓé—Ó—/ßMö÷ù:Z¹kà�¬3ÍA[³Í6YŸíí  ƒ¦¸ÎøJ ‚q[ð(EpD¬")å‡ýTè]D¦ä?^ WA“|N‰.0“>IÏÐÇ—rÛ/‹³ÚÍ¥|ð/ë–mg¨}îuJ¾Ïv%Ôd¥ÍCà½ÆeŸ+r-Ü»1X½R©×t×NÏ΢L…eݳyÌ•þGþæàm€úwœ¨À±K„MûØÎ|‰Ñù,¿fƒ [ì€Ê�Ó(Æß›EàÑ,¸ @(¸b$D‰9Q*Ö…mkG¥ñA@£`ŒS˜ˆ›p7UòÄl}Ÿ³š|™:´•/ó³€GîRkcÕ²²Ï9CÛºN�¡¾oÓÎý6ž×V¶�ÎEõ8l9P7Z¬�s­QHþ›ú³® í[þ­“§Ã¸=0­G /œÐ9ü >Å2óCð²u°w¡m½¡=þ?€â°rx4 €"2^ar P•��5&~G£3a3ñc—é\¯&¯Ér�¡´ýÐ/òÙ^ õyS;÷é:~¨ûXÀÛb×Ú]d_êk>É–õ±¬=í_§N­ßöc\³)esl9ùš"cŒµ[è ×Í>Ö½êf ~Û‹~�t¼BÐ…âzD@}!`]—\6õOig—ód3§ràç’çÔ,_�€~à3† ‚V�Ǻpt†˜¡vöû$°�8Í3AbR’pçEj‘�šž69Û/__j>æõé1èØæe ´_Äñ]ú(ëd}»ïô´×Ú™äú޵cZ@OEO´¿'Úïä¨�ÂdøxF]ÙÆÈŽ€þ.x¢ïl}ÿýoþó>Ù<8Ø=ýôé³þ*ø³¾ ðyúóÏùï‚ûŸÜSHƵ¾¡Ç…K>È`Ó"GXUã€ØxÀ,Æ—þ�lΨâì¿Kø¢™¬{!Ûf#Ë�³®�.mi—ÅW çAécžíC×±­Ë@i¿ˆâÛ>Œ©�‹eàv,Ñs®�ðIþ\Âã/»7ÅoòL@›ì‘‘ôáC��h_X2je]eÙÜÜÙ9Øzõê7Гƒƒg'ïÞý||pðËÚé陇ŠRNà™æ$ìË-3Ÿ±Ì:»,7íº¾ï㫹Ôa…x¬ €¢q>ÈÑX’戺 2‰k²í…š¾&³ƒy:ÛdLÛ$|߀¦ Ÿçkž.ûÈ4Û¸ ”öËòCÚ*}öÕaÿ©0ÓsÖÞžý“èsá*@W¤Ó{ìᑇ=.ãVU_;£¼ý]°>t°µ¾¾)ü\ €—úLð¶n³œ�¼}ËgÓ9è) ôÂDŸm2m‹°ë¨©®-í^ ‡ùÐA…õó"ð˜̆ž3}5—W®êFID =ò®žù—ÇbsŒ^�vèJ|Õr¾Lö¾`¾¯ÝìÍmgÙc¡Ëý°h»JûeùEþçéi+·×î;ßà6Ï�Èw.d…-í÷míðy›ôY �°âêTö߈ÇßyØØ˜¬omlè»:í¾Ð7¾WPÏ.?é*ÿžêÝ�±52Óžk³]¦é…yhÀ<?à)èFXqë€AÈ€ñ`™zëèèbëø8.%òÐÑE;±œir9Í+HOÊ#Ž€EP™\=ÁÎK¼ØÌÓ—�µOËs]èvŸæmk<χm2¾©}öe:÷YÙ†í†âëÔ¿N�¡ýÉvn§c›u™&NsÊÌm&ÕÓ»`ñŒÀTô· À’ñö@<+ «,8QŒ¢¦K:w½=¡Ì¢'K³'"XŽ€np+@ñ¥8ƒ= dši¡V²�icìMãÓPóc[pts¼ àpÝ ?ºC6Ń ìr%ZýñÕÞáaë2�íj42öûÒûÓû²Å]Ëð²ç0 €XhÑ~*úDÉŸ[Ý3¦U�·â6‚ªŽI?ï ôåÇ�œ¬µ#ªÉþºòÒ/»¼Ï—mc?Ž‹€ûo�É£[´ÛÛÍâ¡{ËÖééÅŽ®èÛ—LJüšP˜˜Î´ˆ gA³š#ÑЕLÀÛI9ôГ:`]Æ�fù_|ô{C?ÂíGÀû—–L÷áZo²mÞ§:öbà:ÞŸ²oGÔ%–,¾ [’¿“;ò¶·âV�žðG„?ßÀ¸ˆ0,þ¹ü6@wè«’“0»%ËKÚvÈ3]ã˺ó|Óo èn�Ǻ $$ÆÕ0Mt±§[ÛšH6Iøº �ü¹0B¡3ñ`2Ouè2m›¡x¦1öva"7]Ú�üj#À~3dÚ²E8×1 ¦x:ùë˜ ° 6âÝ‹x>që#ž0-ù¶|ì긽àûâ¹¢ÄâÜø³Düe@'qvaœWl‹M=¯>: fãö=$Ëñ÷Zx” €â6¥·¬ë À†.¶— /¸´˜'•kEõTòèM‰£Mm)ïΙ¨ LÈ™·|®ÕÓ¸ O}{°ÈúÒ'| ¹¯5}¶Ï¶YžéE>²-ôªíkþj2÷£Ô•|­�¶Y„]×vðİ,yŸ¢ËöÔÉ ÷þ�™q)¹¿°ÎU<×ñ]÷ò¯ ǃs5O¾*`Οð�b²©‡÷7¬r.@IDAT·^ïþá¿{ó?ÿçéôӧóϟ¿Nß¿ÿªïø»NðìŠåŠpöG.ì¿X9˜Q�04�rÀÆ‹€¹ñÐA?¤¹šUúél¤Šs3™ç »�œc÷d>7n’Ä@ò'ñsE ï6l7»�}6‹ô}õ¾…<ǹÖþ"}Y§´/ùÒ~‘�õ`Ó¥ö_­Ø¿÷/õMÛ|ö«1Â8d\òf€¾oð*!ß áçoijC~f /ÜÄSǺu²¡|¾ùòåûÿø�[Ïží�|øðöä§ŸÞþéOkZ)FÌ›'þr1`Þúëb'0@›#¬ �v@lÚE@�°=ý#É_*8&fán0ÐÇB3ûÆ�Éž„OòßÖ“Ð, Ê$`§Èk�}^G_«s×2¶a,Ò—uKûE|_}×3Æ®¤Í{ÿ€k%·AÛgÚ6è�·…èð` €xF€+{¢ÉÆ\ à6ßà-ž@èkxaÌÿÑIßx6Y_ÿA¯în>þJe�ÿd8ûô‰äÿž�µ…~ŠeË`ןWü3mˆá&xÔ €60 Êy°H?¯î“ÒqtÆ® 7è<)›ûEú¾zw!Ïq­µ·H_Ö)íK¾´7¿È.ë¡3oì?Àû×ûÓòF[ÿÅŸÆX%škþÀÓ<±P•½1 ÿŒäï¾�ÅséÓ~ñ9Â&ßPÂß»ØÝ}39;;Œç(NN_½z§ð°)µäm™‚ÛÙÙ~Yœ}ážÝ< "ð„‰�CaàÌ (]éÒß�Ÿ}þYÿEþ'Md´§K`»ºÏ¸+û•ÚpôH°Ï¼ÀqOvU(:v’0κZ{È2ØÞ²Uëíw•¸ìcé{‘ûy6¥®äÕÏz×5Î:hÅûLaŸš¶{èl_£-˶ÈüÆU)ø²pK€+m{Ø2)𬅫j½ß² :ã¶žL5(>Úøu½µ±E ô0ådc{{_·v6&žŽFì¹4ÓþVá»­ªÝîp[à(ê¢Öqìà®�§´à8÷ñcš ?{öì­ÿ.vCgõþÿÝOüA²q  d x†8ú<ÉZ˜1&ú!˜zعô%ˆìß¾³l¤û#PΗ%OÍRVò}Þ³´‹íá½OÁ.ìï<^�[O}ËKYYßõ܇³PåWxà÷LoMxHP‹^!ŒçdcϨŸ, ,{Ò9G¯jûÙaNÈ% Ÿ‹í´óbþ5oœmûhÛ‚]Â6*Œ´'½S•kÂSXxà�YäAvqzzzòõë×·{{ÜÞÚür:™¼=ÙØø¿O7âkÏdÿúš±}tÕ\i9)ÏÉÊ“u–×hOðØ»ä$ÑçÇõj>GÙeˆS†’GWÊ2oº×ê[Fï?ïS°÷3v% s[èÌÛOö™éÒOªKâÛJúÜà;]’×bšdöC‚, 'ÇO6ß\~ˆ`PœœÍg\êÌgÛEtYÞ2ï“b€Ëb„¹x ÀÀ °ð ‰ÁòéÓ§ÉÞjðe{{û']ø›ÎþÏõ€Ð3Ýø�t#àHÀqf€"C;iÆD퉺cCq’0Ÿ}Öhû«éFY÷âUB)+ùÒ~(�Š÷eÞ¿C´ã¾P×¼éF2û‹.×iÛ'é³åNþx#±;ño©_QœüÅSÏÉßx¶ÑGÎÍ~(Ï£„¯,Ö[^òrÕ‹°Vê×ôø( s:€Ÿ–ŒÀSYÅ‹Ëô·×Ÿx§õXåÓÚË—ç;ÿ ü‹&†x£ÃšpT–Glyžl1˳åYÖ¸ºüm'çN€-‰�É·/AÔü–~ph;;/û±¬Þ~2.}f]�.Û¬ÙdÙûy6¥®äi«”e¾F[VbûBî’·šxy›¶<ÛÚwÖY–cŽÌ¼icä¦Á~»3xÉXÀ2®),b‘ 6Ð@è¡U i�E@C68˜ÇÿãEH´¹;ÉGˆ“Îrl3]«›e¶wTñKý\ÐùÊn³³�Œ0(Oq@`<@s�údÙf¤ŽÊ8ÒÚÉñJP²¼�$cÆ}ÆÈ-CîäÏ;ÿ^ØlŸ–Íã±yÊ�÷q(ùš,ÛôÑ9¦¶»d}¦ÙW¹dÝÚûÚmR'Ë Ñ•²>ß­}ŒgÙ�I¸EWµÚÛ,ô ðÚ©¾ÊU¾º©±¸½BÐçþ±É x&雯%vË/væ3�eöeLøL»Ž“=õ(€w_Ã�¿ƒ#ðTy€”tæ5Üâ£@ÈfåƒCú4 »£R“cÐÂ|w=€ ¸„¾ Ù¶Öƒ½`r¥X‡-tYÇr·Yò–?5ì8y»Ky)Ëü"ºÔ×ø,s?Àyaçý›õ‹h×Éþ=6²®¤mƒÿ–æÁÀHø‘]ˆ #8Þ +ù³(àr ¯êVáÚ–Šžˆ�E€DO.o°½Ý ºLâæ £í,ƒÏ´õ}Xæ�Û¸>gä6°a‰<…—%…ܲ�@; {�9³OÔ儜õØ ÷ÀWj ûÉõ³Ì¾¬jØñöv—<òRVòeÝš¾”ÁçR¶Ã>ÊÅm\{Ÿ»™7=Àw÷«lIü\úg<óiá3] àaA½ ¿6A'šmà ïÃ=)¸ú “²±“sÉ3÷Z¶ .ëÙ?rŠùX»=©}±‚�} €&ŒÁ(ËЕ¼íŸ4æˆÍ@�ʣ؉?î¯j¢œ�<£ƒ7¶!2Š`'Û”u,Šçõ ¥¾æ7oËÐ:5?– iÓ¶CÚ+ý•|ÍGic¾Äî‡åö_Û:^ìKïcë2Î>‘»^¶)i×±mÉc�,ëM£ƒvL‘ b 7Dó×ÃzCàœ¢äÏ×ðx3€? ;g‘šýQG<ÏÄ3ÆÈ6¬ëC@}pgëåËç{ÿüÏ/Ï��OÎONNÎOξ|!t. j—˜‘Á»8agëú°w‹Ü\ñƒ¿¸- xkÍ–v&Ö#Ì�ÀSYx`ŒL;8y€qÏò¶ñ•ø(FAk�¿¹Ç!fž”á)e‚@7ܰߡur?†yžíûÐ:}vËÎW‹ìK}ÉÓ�R–ù>Úý/õ™·MÆyŸB» Ý?Ù×Ú~s¿²Ì´}aWʬÓ_ÎøÝoÙÇ÷ô<·ø¨�Á“†>”ÏÏõïÊ÷o¬ëÓÀ[¯^}¿ÿOÿ4Õí�ÉôÇ�úO€�Ç?ýôñë¿ýÛ©î•D"Ö¦pàÞfñ"œ k€ˆä¸ˆ0,üy* ‚cÔÅ2c¿æG¼ mz+‘¾7³('ØrÒEOñ$k~Aû3êÜF¦gŒz˜²?=f3âëÔ™q ËÀ"ûR_ò´UÊ2¿ˆž§GWö§÷«Î–göï2Û}[��ÜgdæMg;Ó´g=öÚþ]0’‹ä±89Y›*ù¯ {/‚)=0ÙÙ‰Û\-ÈÇ ®"�Yõià}ýÀwÛº°¹¿ üñpë|:=]ûã?kÀ¦R<˜7Îò>Ú¶‹0õ�lgŸº£ßjð®i,Çß+xŠ ÁÇ«yð8`r4Ð}8î›×ðLO¤­<24ÅɼmŒm¿/koLôËÖ½N�Üžé!؉«Ï¶Ô—<õJYækt–åv-›.õ–S’¿ðËÆ9û^–v[¹?ø€·®Ï'z¿¦`ñüË Fò—Æy.Û»|A\CZÛÌBà1ÑÒà™þ0‰Û“ƒþ$hK‹¡Ó³÷ï?iÿn¬M§ X5ùw‰YúÒÆºR?¤P?—îDòDà©,||2 L;4ð—àËÿÆ—š‘J �†L#ã!* ‚]›xC‹A[œ'Yx—ÒÖ|Æö“eסÝ×Eus{CëÌó¹¬�Eö5})+y÷Ïrã>yÖCçâ:`bžePîÓìö¹n©Ï:Ûç}QêáíÃv%oëKmÒ§ïœUÆ™%‹= ?Y» ÐŒ ™̨ŽËÿúKìº>H@[ø‚i}6ŠûûËýiÒ®ú¼«ÿÐ&]œ_œœ|ÙüüùÝÆ³g»\ßÑÍ6)'w‡%ëVAçÄoš úVíŽ0'OeàäQÒðYæ:#^&š`™$7„#˜ ‡&? OÄNù©ìrij]ÊÌ Lß½7iß1XÆÇ¢:5})Ë|�®Éè£åC»x;ï?×…w]d¶s=ëJ¹õ«Àöí¶ðYÊÌ£kír¶blÓqÀg»¸J [<$ÈgFù›aÀ“ Wü|@Ü"hõaô.¿ à8b OæG\�Gd,˜èDσ9†ÐyMA^+¹µìyÉgÛ>zÙ¹aQËú£_ËÖb_Ú”¼ãa¹qŸ<ë¡k¥o¹®±ÛÀ™cZÓÛ6Ûe™icûêã-7v›e½VïE-c8Šìã€0:Ë�aàyK >¤ûÿž`Àà‰äúûñxU0ž!�}Ú>]ž¿T­¾�PÏh³¹¾µ5Ù88ØÖF]hÁ£?S8ç•@o2SA!²¬¤Î.ëD‚o}×Éí"o�x* …Á´1rèà·tù÷ððb"¼Î<:#�~$lG#®G Ž:©À@™íDAnéF)-�¿qÏ„u©½·’Eö]Å–È}(u÷™_Ôïš>ËjtMF ,Ϻåc¿*î$(ï�X,‹ïp¸Q’ûˆºà”r·kù¼º5+’Ñ[’>'| �3|?€Ž1]n‘å¹ ]“/<;>^Ó_�¯å«a¯íå+ƒ<Àí?C�}}sZ;]ߨ›¼xñfïøûïÿ×ÿZ?ùðá×Ówï>MùåÓ×ÿø�Ï:™òš‡p¸ta�¬F[fìz`d€“Ö!Ï|¶g ¡ç…éDà©,ʽÍ1 7œø-]Ø?:Š¿Ý<Õ‡@uNu™ŽÂ¤¦¿ ¶íˆ+à¨Ë"Çœ�Ävs Î&Éb@lYÀçR¶ƒ.CÉg]�Îó@¦±]ÖWÍÿmÉʾº�>9ú¬ë£k~l›±éÖ/“*32§O` ³�9N‹f¦¦œwû?²™øì¥m²}¦gÜ£>Ä¥õ³-ñMõ#_èk�­t,Œ©Ï°}¢OÛ9¥ÓëàõÁøž€lXÜGÐâ$¾ À‹Ž›{{{ú.ÀÏ'?þøó] ØüùçC-l¸O(Nèl¦eÆÖõaÛÍÃÙo ˶M¡f c3BŠÀSZxç×0²�oO§;Z™sgn“ûxZ�µïõr%`íáß³K»ÿvHŽRCÐyboéXŒ{2'é;ùç@çD^œ Œ³Îô\éËLµ¬/Ûš1¼c&÷ËM×dÖ�³~íº¶-±}"W‰€b¤«ek›Úo@>å Lüd4uà]ÜV c¸Î<: o÷'.õ«/±à ýRñ º§Ÿ¶×]gà‰ `:øvÀ è#:ñ,rÎøY0_þuð¾Âúd²7Ùߣïìm|Ç"@ÇñÅéááׯ;;ïôy`6›âÄ^òl²uƶ1î“[Ÿ1¡Ê|®¡Ç`„ËÜßÑuÙÇS\úÑÁÄÀð1æÁ`ì6â ·vtrŸŽF$.ŽÐ�&ijz‚À¤ s†Ø4Å‹óÆ�¡dJ])s»¹tŸ<ÛaSúËú»¢Ë¾–|­}6–»®ùy�‹ê±7âì_ûn’%èø0{½K”Ô%žìk°®Ä5{û·mÉ×ê¬Bæöú|Õô5™ëg�iclj´e‹ŽYVq`¡½­}¸åÒ.”‰¾?˜Øÿ®¼d¤Ð°c‚ØŠþÿÙ{³ßJ’,½“dp‹="+²2³kiUkC4ƒ ½ 0Oó— Ѓ �ÐRI]•k,Ü— ïå2ßï¸Îs�æw!‘A?€Ý³Ú1sss;æææ~»sê¶–]/8� œ?‹€ó9OÊÏÄ… O‚ŽÔÚåRh À²i¼u`ÛGæö‡¨ºv�À˜ë¤�tdûØ ]L„k“ïì÷£Ð¼è×//9Õ6†æðœ,ïÃÙÞ6Î[bô9à3áê>ñàœè —LôW;¢ÿªÿýfé`o¼¼ü7ã••ïÎY&´Ó�€ 0?�QHž0Èù®�‹4'Jj.Ü«2KþJÓO•×»yãZÎ\Ží²¬–ç&2ûž–·Ïf^yÍ.ËLƒ3M�ZžáÓÏûÁÿu�ÇuR˜bÞ&|cþR—¯ç�…IÈ9·ÕI@xK?´»ë•iL2}KðŠ…'eðǽKáX ¥,ó¦mkŒÜíeLyˆb“ v<&rY¼J{„Ù0ø ÁÕ$ i¦¸MûPÁ–•˜¦A`—ùšŒào›ÜTØ\®î稦;”Õ÷ß› @qjÝŒQG§Qð?;>>ÞÖD@oèœï_®¬¼y¿¼|4bykyù™ì¾)| ìŒઠÐEÏ7 þ,m2 p�˜0x;¥<Î;�­Ÿçë|š:Ø:ƒåYö¡èYe•ú’§^¥¬ä³ :ëKZv š„ž÷óÜŸ ¿AÒùÜà\ â‚R^cßéƒùóœÓ0JûZþÚ$ lwìä®cæmo�ùÈ´øÏµà/¿1h]Å`!Ú½Ã<êR�ÞrlJ°MøQY1«ÍtãÑ´g›‰¶Zo—ÝYø¤ÂSG‡ä ^Ò¥Þv%v³Yî|öGiü5ú°Àù´…ð¾ýÜÇ '½–âÜŸžžŽ•X8Ð À�¾þúùòwßéÛ�+Ï4øüî¾u�Û/W¥¯bM¦šÍ~|O|÷ï € d÷ ^bÛ̃²m–™6¶�Ë4ÿ1qY—ZÙ¥ÍMyç3¦,h󉿮ŸDð癬0Pðßl'®j\`ÊËMïăOuWË®wþHg,žÝðœãþâã|‹Ÿxt@¦3oyΛóDæùº;~ùˆGÂȺzP•Ö][³k<êlS£‘‘ߨyâÆ”RûoƒØ9ùº`2Í*À'í#ÕŸÛk‚6‡æàíCÍ<2ó%Îy¡g%ògÈö–SuÑ„V§Õ¥QÜ·ßû8(Ï1�¡L<7Ò]ŒôMÏËÓµËËñƒåå3õ— zÕó·ƒ{4.˜;¾AßɃ7Øô¬bjvùzÎ4¾2m>Ó³ÊüØz×±¯ÜR¿o[pI‹�TmÌ�,ù;èëü9øk¯ŒN¡þ.·8äå¼s››iå/& ²ßlËZÓD½VÖ:[ÆcßšAÇøŒž<.ÃXy{Á6mYvÖ!´¾•Å1KÆf¿.)ó@L&5Q‰ã4�è“Yo›ÌGÆâ‡ã.m¢]T'¾6¨÷Ñö´ÿD™:'q^t®¼©°p}ç¬ÊÙxðøñó�ï¾ûöå¿ÿ÷£ÑÖÖÞùÁÁñh{ûøtkëhéä„*’8$RôÍ÷锥è6Ùot=É(/Oº=Ø ÜÝèc¹ ¥þòá¾NÜK̯u‚šìËï·=BU&' FÝ$ ~ìã†k~-3κity-—¼ó"Ï 9u-³Éu7¿}õµ÷R¿oÛFÖ&ßñkòËþ±éOÜÏüWu>IØõAh¤óèÀ{NñœÊböFAdÐÆ\x—c¥€‚(oJ™¡ã ¥­u¥¼µç#?¾Øç´"y 8¶RÇ]ÈK™ùšOËz}«>|HˆÝñ�…¢,½š«|j˜O—4û¿K¬·6W?~¹ùÍ7çúÇÀ5}`kôöíÖÊ�?n��ÎONjßpÐ/1MZÊhŽY‰<þÆåa⃉€}QÖ½Üp_'tNº<X®éw·i°Ñ ¿ µ@ @JÜýÇ €è²Æy@÷ l¼Pi=Æyà†v²¹yÛ�)ß;뜧†gÕy¥ßYyJý4>ëLg Ͳ¼pŒŒ:‚^î�M<óoïü ä¤>ˆÀƒ_|éüƒ±_'зÁžGúì E>ÉÁIžÄy©•'¿Ýùò1Q)ËMƒ ¶Ã&�_÷[c  x|ý¯oÀÙð £¼öœu–Ù])³lߨuIuŠÚHu´{h>$D›ÑŽëÿôvÏæŠ¾  Õ¡õ�=×jÀM¨ž£Óï¿ß;ßÝåPHì%Ÿå¦Kì<%Æpл¬P´<²‰UñØ÷np'\_7%¶~À·i >ž8ø_{Àà›åÁ×p#]ì׃|-:ëk´ëa›š�,ÃÎyJyæç¡g•YêçåmWÃÈœTGFT&k ¸^ò� šhÌÔ •ÑwŸ^Ip0�ÀOðoo Pf,µØp¢úD Rõ#øKí\Nh{y3oÜÒQv¬¨ ‚¿> Ö|úW|í@v…gÕ° .µ¦·®ÌXó×Éx I@|FXõƯ}ƒÑÅŸ i¢¶šÛ¤,äy}pSûÖ/76ž?¸¼<׊ÀºÎÕH+{šk¨>§˜*ÎCÛ6ce °ûÉ¿¤É`KÀžÀÛŸ†¬û³7à>N|²9á$À¸áÞz¯”6¶pÛeEðç®_ƒ�S<ÿgàf ÎižVľ„Úà6M†®–j~mg]Í/º\¯>›Y>¬/ñ¢þJûÌ›îÁŒ’ 0Ëú,׸ׄƒ&˜ˆ�ïÔçc.ëÜòü¥ÚòÀòvr°‡Ï� b…@õŽ>%‡±o =ŽèwЮ“±eð¦Û<¹NØeCïbéEÁ5°‚>Kÿèæ’7û�®ôÐ0ñµQÓg´m2mß¶…�‰TQ'ô‘˜ h�À¹ÎŸææ9o<йŽóÝb|Þ –—5ÇSj�ð¥@M Ö…Wõè/º•TTÚU5M6ÓÙÆ2cìl+2€€�¨Ñ>tãÆ²ùÅ—€£‡ë§f.9çþÌéû:ȧÍ�Â8ëJz›2ϽãÝH1HsÝkŠ÷þuç´£¬=PÓB¦K|—­—¯ch§ieä<}vÙÆõ/m³M©«ñ³ìK}æ3�oóS0£Ïè½äÏëužþNþç»|‘( ,&L2Ö€½:àÇž€ãCåa|މ���ú‘ú ÐùÏ}º;&¤ö®Ö�_1YîÚøÚ(u–c—él‡Ü~,ÏöYÆÇƒâíªv!ÐÛ/v¼AÀ£�Ø# Œþ‚–(®½@Õ)”j¹pb–—ú\ͬ«~l‘öÙpÍ/upr~°þy,Ð5ó—6¸ÏNnNb'®xl˜³rƒN¬ðº’' 6„Á™¦ó%=g®™90 €6_â2#ú\—R_ãí³¦›%›•·¦Ï²>šrÑY_à¸ÃÕqÆr?�W‰;~¾ƒ?2nâ"-Ú&SŽ›‘ŸqÆYhîV#øKÆ+ƒÄëƒ-͇„ôW]‘�Ñzâ&�ú9•e#÷ñ‹æØ ü|žóÇó~¯H¯*Êõ¼ È~¸V ÈÍgôÈKrƒóbçÄcöÐFñ!!Ú¸Íæ3Ãkú�ڜչz%Pç†*’„3]“Q�\]óØÐÃ;p#E¸ì†kx˰qb5Ày\—¦½&:›Ý|žøžùÏ¢A|bÁ%}%&s�L7˜+'& < 0&Ð௠Р̀qÃ-þëÁ½Ì‰¼–J»²üÒ_©/óß„/˨ù(múø,¯ÑÈ,ŽV븸 'ÐÇs~�'^ñó€ÉÀ‡Ê�:Óor)Œ³|9°Kª_,É+@³ó=+ä'�ǸÌù!Év�ɦóä—¯‰Wþä?¯ty ÈwG`O®¼é\„í² ºfßÉÔn¬�ĨÎö &ñ%AŽ…¿þ�ßÐ9¡J99àS ÓÆØ™®a©£ú¶ƒn°j´eÆnüäz ‡çm… È�ȧ>ˤÆ>Ígú{_'œ<Ÿ@ã¾SØè‡I@_ûLÈýŒ6ßýGÐwàg`fõ@ZÒÙ›m,›uÍ•zø>™åÆ”Q–‡ÌzëÌ£û0˩ϼéSÏVF b% ê¸9 ðÜõüãy¿02îÌ�»÷þ2‡Î&ò¨okŸy? ØA“‡¾#yËDZ“—Äñ »âþ¸ãWâîŸ×þüÝf¹Ž®S–QŸÛùí·ÏzÛÙÆ2—m½ù˜$µ ¶9Ѿ|d(öpmº­œ9Ù#"o¬þ´}ÁýÝhªzõa :‘«m:c\EQ-&>9é"ºê‰ðû”D8¸ÃÔhüà’¶Œú’7ÏC‘¹i£[‘_í²Ï}"p_':‡>ñÓ°m<«¸&4@Dð3°(ÅÎhî"Ilãj�fQÉÏ*›�Ý�idðN%�¼¯¬¬ƒÎЗ'ÛÌ¢KŸ¥}Ÿ¾”›/1þ,IÐcÔ"Ô#À·˜;x0wý]àç8Ûc½Ëà¯*L—õUùy�co¬V(`ç €'Èâ‘�°÷ PXœAɈ8´E,ýûîŸI€üEðŽ7 œ‡ÌêRüöéjö5™ó½ìš)v¶qÕêQÚcv:þK="ð·˜ ö &Ú9Á¯iRè4ç@¹Ô4“«ø¸„r±ÖƒI/”ž·ø‘ð–Ò»6Å—¥E¨®}fÚ‡ƒ9�¼Lè 4Ÿ›ìæìò¨/ÚŸS�ú™Á}�øÖNêä)lîü?»;y‰s°PqÐ7î þmp™¨aM6aP0}×]MnØ we™è�Ù¾´Éò¢:7bgù+õ}¼åfä"1êq×ßò×yŠ;~vѾÓ“´±[\y~µ±Mu ØDý[šºE°o@GÏÞ€‘8ÞÈá"� X²˜ ë5µØä+²g (?�°ãÜG>å§|Ó"ƒÐas[È>ÊòÌ×l²¬Vô®c`#ÿ7pvrÿ7àM‚èœxîĆÞMí p>˜Ìõàïà‹ Š3�Bðçì£ôJé/JÄ-‚ÿ¶R œnû1]b"à&j¸†G—“÷8¿ýšwÞÏß» ³4 lùdûä��Ì[Öh†ß©-ÐÝù+˜Ä�»Áß+4}NxŒÓѺÎôÔÒZ%uóC;akÚ69¦Ñçú”öY—óÍC—¾Ê<5})˼éF¦ºÒé»% â,õoj ßÔGc #à·vÍ%B6rýz@éÔ�/H:Jð^;g�`Dò 0 8å½}t plDO>täáÜÇ÷ý¥wð��L”bç¿Ìb�½ ü5dÐ�á«Õµª�ÝekÙWY–yʵ�ëPîƬpÄ €&¼-×®2ã›DdãA8)¾6¨ö�¶\$ø+/ |¬p¨‚OcÆaÆ�€â­#>±Àà_*ý^)ìjàÀŒÎÍ•±½Ë²>7<�ö¤t@ôSé3‚{7hÏ�O’O´yã«S¨‹ƒÉ+X<@âbaPjƒë}ƒ²¡à£=¸ûW0ñò<ÿgB �# Õ×^¥¼äg][Ög ]KÔÃvÐÊDî²k6ØÚÎùnŠûüã¯Ôõñ­Ü½0°êv§ï²Ëß8ž÷ë<ñe?VXöÿÁõ7.ëÁ¿ Ny"Ï¿¹nÕ61Z·86üÉ +L<ˆÀ/Þ»þéÏ´}Ú|ËXŠPò�´ùµ.Ë¡s¹ä«ùëêÛ£·㨷ŽÌGƒÚ >dÂH™Äm¯Ú�ýçê+gm ÒМ#úW¬ +®ê  ›úã¯'Ë_ýbõôtuMÿ¯²zrr±qzz¡ö�S£Ñ!°êv-¼~6õÀÿÕáÕá[•ñ­F‘mõÔmmaÜ~ª„­“lØq)ºÃÊ –ϱ–NÄŸ6«"Õ¯%¹ ¹P×ìÈœ¨'48ò«  tüÈ>iø4¯ú�×dùeº«ÁºlêO,ø*Ï bg\J� n÷"èëø»àßÞýÇŽ Ïüi' Æ ÷a¹�s �oR2u¿Ëk{š¯¬+ióÂÝૺ1_Kê·Ý@4Kþžõ÷×›4ÍÇΓëÎÒ4dzN»ÐâË=¼OžÁi7õûèFnDÛK«‡ƒ.™¯åö&¯:ï:.·fÚW×Á8çungÑ» �l�^m§H[:S»ž¨ÝlëèÇ[#«ô)°’NÀÆåÚÚó¥§O¿]þã—5Ñ|ÿdoïâÉîîå“í틵ÓÓKY]¨ÜK¿1U€×h»®Ý~¿×$à•v(åBÎ €ÚfÜn$øO$VW$‹àß´áÆ…V.77­<{öÕ-ý¯.=\_¿|¬6×]<+ñÎ�pl <6X¾–åCW­ÓŠF’§ÒñÇ/…ÿ zQRÔ£ÅLüè‚I@DuÖù­eóƒÒ²ø#M$~‘ˆ¢ÈŠ©iø2qhn¢Ò޼k02ûÿIíŸaö aIV›„.ù„&ËÿcÝáÆ@qOZ¯ÖPȸƒŠ¤A—A³û³µQ<ÿoåå€Í&û©—ö ëKLd­Ü¥8P\óØC–3Ð¸Žæm„¼”Y7/îËŸä®»]ßÖÉ4Òúê›ÜÑ;ès'ìùÄ÷ûu.üüíð3Çå9� M:&O. ö}éâAÑúFýÕê€Ú�•L€dmOhÄØ@™H9Öú¼õñÙ…m³l:—K¾š¿\?ë-sóÆÙ/2VMhàŧ@4}lLŸÓØx¡M°ÖÔþúÞ°3iu€�ñˆ€¿•ÞT›éÞÁ?0š2‰®$h×Õ´Ê&ÛCê8ÀÈ…©¾üpßr°ü22íi%aKø�&#-Œ•FZ`€³ù03¦™7íêQ´i0E¶Ó|S}¥\å¯ùK»ÝKà$èd”'Ômáflù€Û a 4# I��N³¦”m»‰zC¦-›…Ë�Ø<8%J‰åo :LØ¢Ôd'X|`ÙS<´ƒ|Ж%9äm!µÄU;¶N­‹QÁž6ŽARØ4ƒ/“îðƒoYýÖÖþn[çÏ)sÛv+´“‚P´›h&ózN_Ìã«y±!Ž §¤h×àÔŸÜiGl§åC·ˆ¿ZÛ;¿Ë)m\‡lg[סĥú6Nü�b�”n–x,Ê;zgZ1å;¼nÈ&Klx›UUa=Ëï?Û€ð%Þ~Ev4åÆDXhc"0 Þû¦lÉ6eÿJéOJz¼ðÿmíØ~³´´óV{d†ËE’Ì;pµi*ªáª�Ñ1 À7@2ÝH>òï½�¸õø¤OÓ K¦÷—ìz,m×¶_´£yc5«èº<4úŒnþß|Í”t¬ Þ”p#Ì»ï\•ê ÙÜùÅsb Rqµ¶>ÝÀÔ8_«Ç“ë€ÓYп;Y`ÉÀY|+gI�,?Ï�€OÐG�®M%O;tçhVý¾4½ÛPmã6¥�.üyõ� ïà˜‰@›bE€~¡@ŸjÛÇý¢l.ôîÓ蜯ÏW¶™‡vݰuœÏº²¬’·} ûxìžÄuE[òj!·ÐKíd*þ®˜ €Ú�@LÖ]w¤<ˆü’Û_‰¥ �Ë…‡&9ÂB;ø#Ë—ë €0› ëï+Õ篪ÛêAóVÀ¼›]<ÈUvð7¦:Yï*“Ïù¡?:Üë @ÛÚ>‘eã[þ«ž ²R¿6ïÆpãPŸ.°h Í<ÁÀÊy‘u“€`ø©Ûš¬u‹ûøO{‚#E£kóÔ»œ“˜M`qlƘ†y[ûVÇ#ºƒLw‚hÛÃeÓM 5uŠ ­,È¢ž­yèu бÌÏÝ,K®Â‘WvLLÛ?<`Ì=úéŽÛm£öb!˜sËÚž´�3îbÈâÑ–Ú)Î?íE€¢5�ÏØ;/öî9Í™i—iÚØöÆùlƒŒ¾¼&Iñ–€>_Œ�–È”˜ô­Ä5*öv´1ådp$E]&?‰I‰–øÁ› ü_ ?VúF²W*Uô‰&|e�ê¸tÊÅX–1ÕÅÆÕF‡dÆ*¶Ó‹ ߬üª‡ §¢�|B¡9™ š'.õØðâTw ï5jJù@ƒÃ°L8Áa‹ý— Ž×  $–çƒÎƒlè\EÄ Û´l Ì^=A°?Ö”u˜Æ£«$ê+*›g�Шx.¬Š?œ‰;l,ùñ‡c:ZùâX”'ŽA6Qnòkÿ}Øm¦¸•å@Ý-ïë8â9?�?¥ì3—›Û;Ëï ív¡o]�ùhô¦ 8×:ç± |®à¥eNJÓèS¢üÝnôÔ„ïV�̺ŒQÛÞ^J¾uÑ!ë;ÁD-o­\ì\OÜg:ë,7¶­>‘à²$, 8l¬f€ä9aŸ“Øû1¦Œ2y€šºx­€¿NÒÒÿ‹¶œ'³!pGßøå7Ú @/8Ó+d!aŠ»²¸ÌÛl¹i0` m¿Ð¿ €¦é}ÂÜ�ÆÉéÃãñxWÏS¿×@ñHÊx¼¼üâLI¯ùÕ¿Ú ü¨k€äb�€ç‚5XÆ Ë I’ ƒå².!d|Å-°h^Â�„Î2á©�ܰ36�Â|‹ñê :—Ä@Î A5v‡‹ï=t¸l0¾ÝQLGy”»´ÇõhëCÂ÷aîúY¶,[êkY´{[>õóñAÐÓ:—¹Ý¢ÝÕ®ÑÆê'œWd±G€;ÿ¶_ƒý¸€�…¼IçMÅçsÐSú„˜|>W>w­¾OWÚÎÃç2±7ï2Êc0_âZYŒ>ž¬GÎ$À‚²œ(?'±®—yûçä(mœ};âÚ?:zÞ(øJé�ª×è±>=¬ý »ûšì ë5ï  è\T¦)Àe–#ƒ7ø0&°ú™««nGÇüxÀ9¸ï�O4'ƒ'B'çüäädWø�¾.µ¯ Àïõ1Œ?hý†Χ*ï°Û|"i€Œ�RGÏÝ=€ž ï ûNªQ4ÁŸÿzgÐá6_L ð7ø1&´yᨇ0K�¾ƒŽeó¶¼\LÜÊŽk/v‚‡»6èWhç�¢< ƒŽ3)�ˆßVWÒØœb•´xçÍu¸A�röûC·ç.Ú°mSŸ—ho&Yôeý¸»¥�ˆçA<&f倞$ìåjŽ:¾¬Æ Œ�VAŸ‘䇻+àÚ£g¨a•�1tJQ¢ø¨›Œc@å2 eh½Eð�n¿2 ]ÉçÌØ$}¡šÊæv±a×Rj³Ž–2èVF>øÀÐJܾ¢Ûö„æuÖ.è3à<+![~ÿ> ù®’ƒ3è;‹œlsžè{ÙFê[ƒËµ£²Î¹<Ó%Îy³:¾¹ú¸êILr»¡/“D¹^Ù/´y0x‰)ƒr9W$ó ðÔc]üWJ<•x¥ô[•µÁ#=¢`ÜÇÜÅP áb²Þv` ÛÀçÃ϶ê{¶n8¨dosÒÍ<§ñlæÇÉå„sÈç;;;ûJ,ý²ôäÉæÚï~·®%د4úþƒÜ9á¿XP¿Œ;j ‚|G�÷¨ƒ×Çd,›e&à68¹}¸["èó6ù,�gé²=oí¯µŸlj™F-Wšh&'ù@9P%ßÃï½m�è§ê]OH“D�ÅyÀ*Á™�nmÿi{hŒ¤Ç—e} k›cïºØ‡yt–A²Þ²yqämë×mOý]n‰]N)‡wÂfU×=äDò e“tMg,q2ƒË�ÏþM;Bƒ=�ƒ=  ,¼&lIXWÞ—m¾¯E�4ØÓ‡Š~V=™œËÎî¨Jk*êª .Œž" °óùðB‘~˜›äÃLªG€ëm›O´y[–¼å_îz¢.VU_¤qÇß.?ÇÒ?t›" ¦ÁÔ~¢×3°0y`Ðd’ ˆ»tÉXˆGò£G+±GÜõ˜m=©¯ûEÐÞЄƒâð¼MÀnkÜÙ‹Ž µôô= ˆÁPº>@ÿº&ìÀïb+@w�4`Ø ¿ÂW õÚz•˜ÀKýòÇ®OØ4ç‰ÆÁð;´À-@Ÿ§Ï ó©Û5}ÙŽþr¹¢“x…Ðû˜Ä]uÒ÷_!2*[÷ÿ’.LÃnß9?‰üD�ùåÞÞÒËýý Ñ»ìÎ2è¾ähöP�NžÉÿÓ££%ý/ÀÔ es,ùxòñ£r™ð¶AÍxEù¾½FFŒ¡±$[Sb_Ÿ&>>מ€ŸµLðgR¾¸<4àb3ÎzŠFäj4’æ{§,¿Sz˜\5vnX7¼±uŠˆúŠSóÜÝ Ñ35èEðW ¦Ç"cà‹Ä]uJF{8кgwX¾ðÁsT?wüþÐÚS5Ê€«òG#“ßK­Q±:¥X�þâö!5wk”£äz9뀇X¨è÷ÊA_tLð-¸Ÿ�uMå1AôcõÏîÚ‘-vNÎ; cïk[_.Óù³�eó`–發ÚÝ]úîÍ›¥¯¨]F #›•ˆ†ŽŽà5MŒøc5ýðÔê›Û§v×=ùÌƒí§†©W†ÖfUò Œ/4à�…øÇÀ m<ÿ³hªž‹Æ…‹4�kìJŒ�eíªÙ§DÌUÐ}P&WÍë“Xâ+‹É­ÓÓ}Ó9Û|žt¨�xìØ°O@Ή€ Ϥ€<Æ�ðã†ëÿíÊÒ@DÐæ“¢Èò¾húÀ­ÿ(ŸzÈÞwûù•¹®~¯:0´À¼-@ßYü몛6¯â…DT ïv{Ôßá­3eL–i`[l �2š ³º¨K[lì»Äèò@éH†¬Œ|èH~Ê„}–e;Óà|Œ®züPV–YŽ.¼íìKy— Š öøáaüªt/´ ðo´pô·ZÒãÉí�8Ô£íjˆU‰{»ªaìÜ<Øš¦*Ð΃ΠûŸØ@_ªémw#ú=}[}ŸÕ00Ÿªy«§ÿËœëB¾ÖJ¾Ñ^éãÚ²pì²2&|ŽX.×.á§%ìržLçã6�1´#l¦Ëh‹Î‰¶'’Û{Hö´¢”|U1¸Êæo�‡ Àdúäõ5´¢d·_`2çÀyÁßw ´ÑÛÁ ´yÀ�ÿ.mnxš’2Ùïâ½+$ÙÀ«�ü™ (ÅÿÚ;Þý�gÿm]¿€S2ÂØ\/ÜõsýðUAoäP£ßëΔþoÀ“^¢B\‹ “g¿2¾ÞÌ7ÒÉ ˆÌzìMÛ6cë²2—“mkÇavä³?cçϼË—´e޼Æöƒ>GYxO°uBÆLøûbìøF¢ô+:ƒ¸°‘Qm²07 ÷¡‘@VÒ¶Ë~ÃX?øÓ°§ŽÃyK&MÒ�î[¹Q¡sºesúÙ£‡üÕ·¸»v��`ÏÝ>wÿí 6Ü€Y6=éå*G7!a™1åQ¥x+€TbžùÇ €ž»ÞÅdäª5´ÀÝ·“h6 2 ¸d¯@ñwÃ’�y 7¼G€ë„þNš¸ÉcœóøZõµ.Sio_Y^Òö‹Ú©ä‘sÖ—Øö–ªÈ@IDATC®3y\'×= Òe8Ê:Ømè|ÆÈIŒ7ä#@zH¿¬s£›“�êØ3ÀE7ÜÕ/rìÉßGÛÚMãjÃß €«¦¤� îæ�C¾vqqù@›w"@q낎÷Õ� }gìLŸ4nƒxl üª0‰`wü`ýnÓŸŽ1z!rçŸã s×̳Þ' êÕ.�Æ„—2•¸Ó¿PÛÇ—þT7ßùGÛ«NÙW­¬A6´À¯Õ1I¥O©{VµG`�I@{Mb×%ùtMÄ>áy÷�ŸëÂ7®+k'*oÿÉ“¥­—/ãÑÛº?¬iåÍØ¶9t`ï<Cû8lc_–92ÞõAËçkÝ6ÈHŽÀ`=eè¡mk‰I“/0�Ò“�VÆw¨íBä5p€ÏEÛÈ:Š3�vWÍ|T›~tÛU€am=ñ“O¦ip üüa†Î%Ϧ¹æ]õ.1ø\@Kô6p{×Wõ�ÞÇ E°'øëÁqîãS¾Ùk·ÊEýTWÁ>ö h�ä[ÿ<÷gµ‚|Ô?çÿõ|-ð![ &¸Ln�Yõò&Á¸&U0}œ=Nå ®é+x¦kêPnôNÁ8Öþ„§‡‡KÏ”À«šÄõ%þMc L+³«wkWòŒ˜¥,û̾3íë´y ¶§Œa‘#óqÀ;!wŠñF<˜`ÉÑË$ÙÛÌ®¤� µ*�¡”#su2�Ë#OÜ Ýf0LhÅÜŸJœõÑÇÖõ|n]§ÿÁÙÙ%Aq¤e¼‘.Vîþy½‡�Ú|6 ú^ þÈt Á_R¼úÇ„€ãæ=H㛳»7¯Ê<1‰+@uˆÏ±ªÝc×?¼0Ó_X ?C |º-ÀõÅÞ–žé׬ø ¬kÂÿ7ÀA&ÈI\¦ÃVü›5=†x¤1Ïþ¸ÆLcíë.Ë­CæTÖ¯ämgŒ>ƒëvÙYoÿ)…ísƾ–< `zкĵ‹97”�ßUÃ�iªy0eäŸvøa4íg˜Ð‚]t4¬û“µäc'èæÉÉå†.ÌU.<.V]8}V>'ˆE /“"t:¦¸ëç¸t·Ý­DSÝþHÝÈ5Onxt]ð×`Ç•üQ�øÚwÿìà<°ZМƚÇA6´ÀgÒêËÜõû“ÂL¶Kàfƒÿà“Ù,Iç¨àèPæ)yxà˜èÓÅ'º¦vŸ=‹Ä&[‚?ã[Fªš¯Rf>Æ1%¦ž¥¬äñ� 0¦52=+òÚÖíâüÈ‘y¬ã YNþ1öHV^FA›‘uQÈÕ *9á+óÐ. ì*Ûæ&åSF¬j1üL´€ØeÐ 0—ËãñɃÑhWèkÍÐÿ²|~þPâ6u¡ò¡¼-ÂIúô¡üìþw� ¬.Þ­(вüï‹0.éP.ð=Xå»Á�ã2 çª #/Õ…÷þW5HúÙ?�ZàKhú¹¯³Øp[]ï`ižDïw„ˆ+A“&Þ'€ ä$®­ŒÅÆêåX×Ö˜‰¾øsÕሠ�xäåÀ¾À@Õg£Šßlo…i0õ7o:4õ ¬ŒÉOªzÀut5ì2¬sù`ËóU@F«q=ä*�×`¹eŠ«�q.�<Îg? ãÏë–uáÛ?C± @F×àÆ^:99Ñ«¹ãýü¸¶¶¦?�[ë¹ÐךA¿ÒFÀWòóJ]Ã'Òù}¬Á Cy×ßÙE�k¡n0"ø+Ñí=8awàš¹‘3ŽËŒ2)›:(ðÇò?xéü¶Â]Ôeð1´ÀçÐblC�>&é¾nUy®KÞ$àÑ€±Wr4™výr :¨²ÂàUò0¸•~à}‹œ€l‹ÈØ6øÎ‰åD¦<‡7v% ¨Mr9ÔÑeYNÆ,«Ñ>f×-eAÔwè¸ÎEbk¨Éû®Í�ß)7ù&©ÕŠI€×Ë G£Ñ¾ÏO²Ÿ��mŸ<{ö§ÑòòŸÎ–—5}^þ*¹üôHO84”&>ú£»·9øFàý‚ì¥P€§|î„"ø³4Ê�¿xRÔ• §×ÒC�†ø`-{¸~Õ÷Y Àw×­J=ÓÒ½îVš ξ¤ÏQˆ 2¨•×2W°'Žv`—g,Ñ5°ßv¾ŒñK"Ê‘XNåEI{"x__ã L>O¯¯¯oëüëé·ßžèëÖ´ð• /8‹Ÿ$ÐGÚ~Á?Mb" J3 DýÁ$î² À`º|kÄý¸qk˜ËŒÀ© þ¬Äõ`h�{Ø\\�ñ-�bìç*=åCB’ó-žå¹Z<6�s;¾ü=@î«.ç·_œ` ›U¦óÙöþ~ÿþ¡d|„‡I€¾¿¿¤/ð…o—“ë*UwŒÈ³ë,+y×aNdz"ÿ®®«‚Kàjàvš¬´u5ÈÃiÈù±Ef¹ºÂÍ^ &4e8qNÙââôôôD‰É¨þ rieýïÿþ· ’{ÚÀ_C’ç“zïÇ@d·M°uràß­`£7\ýwZCLÓá-ôÔ…z0Øé.gE‰�àÏîhê¶ÅÂágh�/´|�ÆÊXÏ1òv€V'ySii…ÍÊÂ\-D0×}Ü Ç>Ë…¹öØ0Òµö¾}#`Wßàm„œÂ�líSä5ðun[  �Œ­Ç——ü ø¬�˜€m缬@SNŽˆb;ÿèlƒ°Ÿ’e�¾Í¢j�D<²´ôJ�$NTö©&I#%æ(>l0‡¸ä¯É,ÏvÈìËyðÀ£'¨_è´.6·ÞuLÃ×––_Ïõ K"è«dœ{Q¾ÛW”í–Ýiïô¨Ü£ÝˆV9¦£LùXî×Îä$ Fþ‚Z¬Jp"ëïwzƒ³¡>Õ`‚̵²®÷ùþXÈÑ‚kž ÏÄ Ã[æÃ@lÜ~ñ"> 4’¯ÇÇÇWI+ ø!x=Žˆœð3käÈz|p÷Ï�ø‘¬< Àw\ø ì à=Æ„ ýäògÚÉYÌc¢²ËÿתÃè…ª¥;Á•½«È¿{ÔTÃÃÕ„&{¦ín\R΋oš Þf[d0LÔjpcûDfœÍ³Üy²þÓ¡ üª�ƒ÷Üßr߸³àn›¤Ù|l'ÝißÅÁ¸‘Œ¯ùôdƒúx Á‡�¢¬j0‹gÿªº!ø_k½A0´@´€'0\3\+\ÿ˜Í�|K€;è˜ h@qTáÃ@Çí`¬ëíH¯:¿ÜÙ‰¤·ž–6ÒÀ‘Íùå¦+ :C®CIÃ�¸½fÚâex‚= Ê�&àÃ3–x%À¼D�βŒÑÏìK� ñcEÛ¯E¬ªŽÏTçŸüR=Îôxb_«<1ÉÍBÉgô‡HrÛ;÷Aw † Àµ&éŽQ`Ó(ÍgY—éS%èm,ù1ˆÿ-í^½‘`Ojƒ?�Xflƒrø¸ÅºÁ2®6&å‘TV¸“a°Öþ{Z^þ¿Eu†¬C |±-ÀµË÷2¸~.uípíg`“ ·Œcþ ÑD,,Ä™éz#øê£@»ÏŸ/�¸1 øk%àik‹=wí¾Ž¡kãD–M£ó ÏþøÁ+ʃŽÛ]aÊ%ø£³_0iòˆ%H`[‹úxû2–Oþ î±ò­ª.Ï49ùNº ÉÎ5!á‘°›€,T—jgYIÃß6ÉÅÔÃF?Ã`¢9®1œ¼2e#ë²ìÓ ‹ ÞÁb@5í^ÿÓ`Ëê}]ô1 à‚×@@0fu`Ð AQǼëŸr¼â€&|ôgMi€¡†˜ÝL’™@�jÀõu¦`þ€ýº¾ø(c#âÿM4q8UâÊ?”Ýš>ƒÎ�ÿC}è‰Vذª|úo”HØMóR£‘)IÔ»LÈ�Ï娀~ÞqȾŒÃAëÃt‰[ÿ«*ƒ‰Àšøs•ýDø¡U!Q ÌM#ëKR]Ó!ëƒÒ�ËÏàÞL4`NX¹Q-¿ÊÙüEðÿ©P°íEÁ_u›è5ìí€ÁÀAßÁ¹mnq\¹ñpãF4fF8ð3‰çþœ˜Ì3i< ¿C -0«¸Î¼G€k�¯˜²' ö°7@A�àJÔ39?ÑŠÀ¾VÖø¾€Æ‡'š È37 €þ¦ÊçÝtiÝÈ?Ñ»ÿ.øë¢î–ÿ™è("à�|×Oà7�ŽûE�Æ1˜Î ´êæ�:å €ö—‰ÉC -p7-+º¦X˜tüWø—´)0:ã†Ò]£+Â|€ äŸO�$ãµÀûû±z0O­¸ÎûÆ� žØþ¸Ãçõ?ëøÜùmY- ¡Ã`_¦3†j6�fò×>³T#Å瘟^ok šâI c@ ež7ð;¿q_“eý4ìza˜Ô›Æýc¾qÃ׋½;iµ–Á_wûqÇÏ@ »€x  ý¶�/ÓnL|›f áî?hê¤äÀïåÿÛ×è¶G4äZàËmnøs­ wžÿów盇‡±ã£ÅÜ�çô›·o—žìí-­ë±A\ÃÒw×u…ö5lZÚM%qG�=‘Ö‘Ó�Ÿ;/ýcG"�ýÚg [&óóàYÉuk'T/'W3Ë2Myð€å¦ûpiï|Æä2ï<�fÆï0˜Þ@¹OL·üµÑ+˜½·É½$°.ðö}¥n×?+èn¾¨p‘i»Ì�´Êc÷qü£_[/?ï/Ç# Mn['—=ࡆ¸ÞyÀc‚ÝCþ‡ºËøîÝÒÃííØ@À ­éz}¡·ø«àu=0äkÛ2cë] �ÑCS&8ßÍ;ªr—ïÕhV|çŸo¿]FV¶‰@_ò}ùŠ ¢ªø.’}÷ùGä2ÉU�ÌÏÄ࿉è @î�¤þkûºöW�Ɔ?•ËEää^C@�»Íú—y½L ½Ã`›$7bIÇÅÅ$€à¯ò»êD»QWt -0´Ài®/ý»iì 3v<&-=ÒàÑ�?ÆF<‚0òÀ�õ¨à‘îþ×…yܘ¯w*Y^ç\Á–Yœ—±°˜@ÏÝ?c˜ƒ½1öNØÆX"l5Œì¦)—¥:pHT 1ô¼I¦�m�FØ_Ã5¿¥Ì_®é5˜MXJçY¾¥øc1]°Q!a6íÄG~,k+z*ÝBÉ#®Él? Ó(@ gYКij~îôÕNüÙß.ç£?±/¡q5ü-0´À‚-pyv6ºÔŸ–é+§çš pÓ<7¬®Œß½ÛÔk~›Ê¿©Ì8 æÄu\Ƹö‘ç„ 7IqÝ',2ÆËáì‡HèÊ1Éö`ÒÓÖß÷5 ”å~^?âƒ?+Jñµ?mBòëI7-wÈ7´À}o�Ëñxtv||p¶¿¿7ÞÝÝÓD€•ô ¾<³¬£×��Wþüó MžŸŸœ¬(àmaÚÀ×\d8—ã ¼¯õŒ%9˜VtöÆí�ód¿Óh²MÓS‹í,3æØSb�Û|‰±1Ø~m{ÛeÞ2ç'ðGð޲ôH'°6gr8½0L*MC£¹¥vèÃË£Ñ%ŸÈ\Õ²ØX7VþL¦ž�°¼ýOô�kîüyu'z„'r½¡(¦”•|a>“õq“Á�–iËè£þÉš>,ïý³@RÛ 0´ÀÐ7kýÙÏèüððàôõë·ïÿò—7g‡‡§º¾ó¥yå¸ò³6öm<~óf|¶»»rþþýC¾§9ø;(âÚ×tÆÈSJW62C¦³Œ¼Î�<Óðö›iËæÅù8œ§”Á;ð·+Q¶ä®"U(iËŒ³Þ20€Î`zš=¶Ö{ 4oÌáÌ„a0½‰hDt\² fseårMÁžÀu¢Àëà¯÷j¦å½;�ƒ};  W¸'ôa ÷Áß]…&=ùâ2æ¢ZU[±ìÏýlêã"|•l€¡†¸} Ä ÀþþÁûï¿·óŸþÓšø#5v^ˆ ^öóðùÅÅÊøòòáùåå @O0Î�š1ÄÁ=_çÈÍ‹œ Íƒ Øz<‚6Ø�y°ýÚ.ó7¡9òùØŒóñ›¦|Õruk´uÙÖ²š½íÀ%d{tæiv'û.óVùaPm–©Â²_-/y +dUî Ó�ð–„}&Ì]÷@îÝ3:¬»íØdÇÊw× ¼‘t·]{Å.Ž#U3Q’^‘Ög �wüñ¬_e‚Yú'èÇ’?2ê6ÀÐ÷½ô¼žg÷º‹?+˜{ùÞ—×Ìíìl�Þ½ÛÒòÿáåÉÉhé쌸Uæ/ùίîtùw»s|Á†m¹lúÃW«£Þr_É`‚¨;óÐí«ÀôÓ>÷GvÛ:49ü-ðù·Àå¹¾Æzz¬eûýñþþþùÁÁaUe©ÞG«ëÇ—_ˆF»»§¿ü²3ÞÙ9¼�‰cÄ´ › yùÑh¡ÑdéR�ï’€Gà'1 úoï’žxÌ¡ L‹�€< °9´Ì4™ËŠ#�[gºÄÔÇŸ±åÆüðÐN/¿2�t.à�J¨É°±¼Äeþ;ᇀśÑý+çt̲Okà?ûa2à.$zÏDjï¾ã®_�7^ÿc%@“‚Ú À¼•ï;ðÜH¦y<Kþºëç™lþc%€Iu`h�¡Ñ489y¯à½óþçŸßœþô“¾80y¹A_�þìèèäl{ûd´µõþâädá €‚à…)&\� îþqFBFr3æ;‚Ir*‡p>l çÃÎcWw@­,óä�MKøEž•ô3æXó€Ï1) %ðá'Õ5r›k™>„`˜,Öª¹ÿå>·˜—»°öÝ?ótîü[Ÿàj"Àh þzæ«L nQ—ÜvãF�/iïúgÙCÏü™Ä�ÿ-W \ö€‡øZàRßâÕÆ»cïí£üÇŸ÷ÿËù%Žk2à——ŸùÀrq¡eÿK=F÷Û4\ó[“¡¹P¼$ð)è_¤ þÜù ‘;yÜAgZdЮ¶¦±1o{c*m€®U™å¦k˜2sÂ&óÔ¹ä‘q¬ú<H�¤é…\ýlÔ'ÇÆ:ãœïƒÐà§YÓ›¹aíþÕåÔµv|~~þVÁì¯JÏÔq^èeÌG$E¸Ç2dõìÎ�^’SæË^<Á–É@qÇ]ÚΪ¬;ÓÆ¥Œ «k4Êgâ¡;vû0´ÀçÞì¸ç½{-µ�Ø|§;ø|)pMNð½ÇÛøóÑèd´½ýötkkOwñGgÄû(±Ý•ró¥¾�·<°®Ù3¾c¾‰‡ŒÚ¢»!Ù†‚b`dNåØCð¬•Â36ØGÆèá ™¶ Œ?¨éŒ=ö€sÊß4˜DÐwà×ñ^ˆ>%‰éîÿ½Úä�ð2™ºx‘°¨œÌÎc<áðC0Ã`J«“NJ-éϳF‡ú#�Ÿe¿¡tª�³ß�——¿ÑÇ€¾Ñû„¼pç‘΋//�{g¦É_k d¾KûyËì†øT[@Aÿäüèè`|pp çõûèî®wûÉ»y&Å��>à3Ò®ý�ñÛ·»ãÃCVœ‰KÛ•ý4Y™ß|Î×ÉtìP›ìk"�'®Æ´ªfÝ4ûl÷Aéa0óæ~•OÞå®^µÑ$`¤¯néûõë—¿ýíû‹ÕU=h_&ø—ƒÁü%ΰôES»ø¬+]øb2.õ³ø|à¶-eeCqñ•2çðП{ hÇþ©^·ÛÿÃovÿóþáüøXñašKä*ÈçKÆôf áä„WIŽ]8¼²iÜÏâ] ÛÍË3¸PÀ;T°{¯›ŠmþÍG*_iC²çn6{HðsŒ%š ¶­agFWB> Óà2¹ñ2vàGfÚ˜Áš“GÒqzàHÁ~ëhiéG-‡üUeŒ•w¬<blχ£tçúÎa˜ÌhR]‹|°ìW™ÇÃX�t­ò·Xúªíòò¾.ŽcMÆú‹[ŸÐ%MQçGŠìö—©wü×.œ�ùY;ÏÛyÞÏ«v¼þW<ûï+uV¥­Ï:§xÖ¯òøàÏ%X›ÿâ5@=ûW›ö=ȇøx- ývççc=ÇëÎ}¬ µÄ‚ îâY6A+øo�··wNÞ¼Ù׫w‡ÇÇ 9¯é�…©£Ër}gñ¶ ¬ wN�0ˆ�wuË»¥�€�4¢ð`]¸KØ…uñC¡LèœÈ “±mÀ–¼ÌSßì>'N.¼>˜“•?wü+i¬¯'qÌJ;�4è\äâ$îªçê[çªÁ¥¾‘NÊ-3.óÀçzXoì|UÁ¿û«_y,/šŽ'ÀhÛ÷þc2€Ìévµ¹–Ûí†áB‹ÿWÐ�÷þ?ŽàOà�Äe€¡~åÐ;÷gzftúöíÖÁ?þãOÇÿëù£;®YÙµ¹†²L_Ê9=;{ÿþ<>¸3ùÉÝ ;9Ì|�î/s2/v9ÿ<|¶�^t=_(òJ‰fH;ºÝ_ÓhÁ_ý™®f×'ü2Y`ŒšäI€íÀµ$q¶í"ì™iÆhp™rà÷À+<¿e @¤cÜz§gþ?/-ýÂ#ÙòV¦€‹*±uaÔÚY†­aºf›eø(/ê3oðÇÙ0p“.†ó \,ç<Öyò­Ä? ®isñšðª0ÏÔ/µ´©]Ö÷E´�60àQ@l3Ì: ë3†Î‰ÉËþx¾úÇ’?ñëÄÿZà.[@ßÌÄÙyŽØRÀU�žZœ‚ÿ�žáïè»ù»'?ü°÷þÿï½"ƒ»8Ⓐ즵¼–e}¦­Ÿ†kº,ƒ^ýx#àT2†š— üÚøT{žjðDÜTbbIÑi…ÅUOå¡…˜úÃqTâp.9ÝøÀ9Q<8'þö¹ÿ¹ü™ÒX·÷ñæƒîþ·5ÙÙQGØÑlp·p—‹2-“‰*Xžq¶™E—zxÀþLû�³ÝLFä™Mô+´�?ž÷kÙãôté±þrøQ›Nµ¬IAv$:CyÑ”|¶�‡¦W%n¤Í/:>ìŸõÕ]¿ŸùÇ_üKþ¹©ú[€WðôռË£££³ããCMšnZ™ËøQ‹ }qOKÿ[úðξîâYâe05”]¾&Ã~–Î6%žæÏ¶5Ël3Î6Ћ‚‡ð²Võlü�‚ÈUæT ÷Bø¹Ò3Ѽ)G'0‰€oœƒ¿épNJÓù ÑÁ—©,�€�ÌnãÓÒ?AŸ• –øüwüßè¸ö4)ð’¿]RT¦]tM†°M g}¦�༠wõÛ'¿²˜A € ô«ªÛIÀ²þmpC{“ž.½Üß_z&|øôéÒ�&ìêêì æ¶õ/{¢ý¹çG™ª Ÿ÷�ÝþíÝ?‚îüµ*0ÀÐwÝü[žÞÁß×3ø­“ŸÞJ»ø¯ºîädàJ®Ê辑޷?Ð$àðòøxÚÀùr—Ï2mšÎzã>ۚϜÇôMpÎ=/ä‹×ô²‚䑼U…Ù1¿÷liéÙïÄ?ÐÈô”]�DFGG‚ 4«Æ8#ð;ø#ï �Á „ ºL¹Ì2ø·wýùU¿˜0‘Ñ3ÿ·ZúßÖ$`_x_Í ºêû0jÅ•²’ÏUÍ´í² °lÈ2ÓèLg[癊‡ ÀÔæù•^`ÓŸ–üYxªÀÿÕîîÒ+¥mÉy 0R e• –ß+ÕõETQÍÕz“{š3›{ÓÏü×õÌŸÀïçýà†¸ëÐGsN´û~OË÷¯÷ÿëý©ýã®wßÀê}æ'tZA¸Ð[cýyÎøâð�øÀ@op°º,7_“YWâlÛG;OÖO“Y7 £ì³á¦ÿæ ×t`MìT�sO�Ö¿-ÇÄwp{r­Ñœ= pðwà7¦€‰ÂZÞÏÚÉeº°ïüÁÜý“twX—sö6èÞé™ÿJo¥÷k€˜Ùu »¸šNY»v¶Þ2øL÷é[³®æ3Îy³|.z˜ÌÕL׌Ü7¯)îD €¾¢»þzÞ¿¢à¿®»ÿÇGGKO•ž)=W:Õ¿é=y²´&;*ãÕW±>y_}íÏú²—e¾£5!‰I€°ô?|ëß­7àZ h¹þ‚;vásm\âù=êB À½§]ø»ïúiçð¿ÿ÷­npuI¸+ß*YóW“q^z¤ôòà`é‰ð&›åœ ‰”+ä2]1cËçŹešüe�óUbl›yËìîo °iOKðG<‡×sü#–óg´FÙ—´yï­Òöù¾^Û^ü<гOwíRf~–]Ö×òXfœí˲³ÎöÆ¥­å5óLA÷™äë(¿ŒøË|÷oŒc;t­aÜ üø¹ãw¯4¾px¤:ñìG+¯µÜ¿'¹ïø=œS„i»w±ÖYoÞú,·lVq5;ëJlÛR>•ç\ 0_ ¸/–ýr¾Ü Xñ~ÿ†>*È’ÿS=óªàÿ\“�§šo3pð÷…b×® ùÛbz”Á½«&+{¸ó xh�©-p~~Æ;ø£ÝÝí6ˆk,NpµŒŸ„]ÀŸàÕøNõíü9ÞÁw÷�†kºY²YzêŠM¶+é’wž—~Ð9ÿ4>Œ“½ù—Éycì¡Í/+ˆòúœn¤ãŸôpò¥oì—hl´B‰»rx~c�iÆ2¹*@tí óøƒ_xc?QÝI<þäˆô{§:oëQÏü÷$cjwÆiÚØ2ø,³œéÒÆú+[ä³(ù,«é"Ó~h�²XÐÎý#ýëÝÖñŸÿü“–ñyåÊpÕí®O¬»Ôk|#Ýý�µpÔ~…¯ÓµŽ2ŸiÔ™Ÿ‡vž>[ë�ûì�Ï«³/ãœÏ²E0¶7�rhÉ|ÐL4œ) èqÀm <Òk‚üÚ#�Y¯þ^Šg¼`€ñË74`!ËãZ.¨<øY=ü�üDu’>+¼îÇŽÿ7 ú?hƹ->þê,“ì’âÌgl½m�e¹icÛ9O–›.àÛ`œ¡Ožmªô0¨6Ë•P›×èµteTR Ò,ã³{?¾Ã/úC�æŠÇ]¸L™tÇOÐ÷ç} þuÇÏà¹V^h@Q—V•ß3f_xë6Úá_Ïã§}÷¿ìA©6AZŸqîe–s,”©-³«Gétà?ÛÐù¾ŒgôºÍŽg÷Í`WO×-JE��Oðîé#<ÛGþó»Ãÿößø�}“µF[ÎtÍ>ë3�mí'ë3=˶¦·Ì¾3Ÿé\Nik;ãlkÙ"Û›€‡šFÆ €F­ˆ³ÚS·´ü�Ò m|¬ý þ_üs”„VFV<ž1r= 1z�¥ê_è|ðmC� “xÿS#nS†'DtÂ<óWàgÓß/ÂúØß5·9hSŒycËà³,ËMƒKÚ²>¬,‘§Ô#Ï�õ–#›† ÀÜMÕõCõË€wžàëº" këË…Þ�?>+1ÈÀ†¿uåY#Á_ÏúŸé®ÿ±ð†¬˜)û™™ž%‡7|ù��þh#^l»O�¾ ¸'eœ{åèï�ã?øßvÿó­ÿᵿ›´ö'ž‡¸?¿×&»÷ ÜǗ•»«Lª®ßÁ‡^øŽôúÝ[½ƒ =ùî ½}Û§»`ic;ãšÞºÎ2è’ï+¿f×—ßò2OÉ»îY>�Ì65œeЋ@@Lƒ§Ñ˺ûæotùNÀCÙr,�É¡¨¹Ìò|;ž-·ãÙštl"|*o<˜”£-´€~x$��Žø/ó$ÀKÿt®v5€÷ûß(í+?¢ìR¬«˜ª¶ÕíÅäϩ̓ó×t–Ýææ†a0»©Ü÷°4 Œ®Õ¯ëùý¦ž×?¸¸X&ž)�õ~¼þ/xéB�š3��Õvú?ÒÝþC6ûñì_ÁŸ À¦–ýü=Sö$À• _LÆü¢» @.l ízgSËÀN[¼÷¯ ÿ@)¾ø§òãc@9ó@ -p© Ï+w»|9ïtk‹;§ ÐÊ�» òLëʘЅ^Ë÷§£·o÷µ°¯?âɃ±óOú¸òi98ÓÎWâYvÙGi›uóúÍyjþJ½ýÖl­3ÎyK™ùÎ2èE �s¦óðczB§@|Ìsvt©y¤€¿¡U€¸ã׊&A?he➉Âou€Z<ˆa¯›0 ià¡LX9z§|ï$ã £³aÇ$ƒ•:X>öÀ¿úíIŸû\nWhEdÚ<Ø´õg]I›7Îù2­",ƒ1 ®å� ‹ü €)­¥m¢CË>§œÛ¶KL¸‹_åQ€î’ þ|ßà&\B¬0à#?ÛÛKÏ„ŸèΟgþ^pð7öáÊðM€ø÷?•µDâΟIA\Z]ÕÊ¢gòîqºæ–Å €ÿº^I\ô(Ž•ãõc�™ÎƒÏ§ôžÞùhô~¬ Àñ÷ßÿrü?þÇ/•Êç.Ò¨¯¿uôÉ õÿÙxŸgø§Z ¨­\åi¼™÷ÑX–º’/mÌߕ߲¼’ŸV^ŸmÎcÚØỹË�³, æüñbL6=™¶,°‚¬VÛ—.„c"À- #cX‹ÃZäÁ§ÒñÿëRðƒ^!è0A='EÁ¥÷Ÿ”¾Mœ':â;Ñ�É'%›yæI"Ô´�ÛÈtÆØØÎô4ì¼ÎßGÛ¶+k@Ÿ>ûåo°›8TZ þXD‡jqtÜ‚Æ&`ýøxy]Áw]œ€H€¿P >ÍÝqy†øÎ?¯ü=ÒÝÿSmúcç?›g˜óì¿\à ¹"5¦Š#è³   ûØ_ z`[–K> ëYÊÃ$…IõÍö¦»Çø×±p×ö£ @þÆåðû‰µƒúÀE  å8q¨«5ç[ûìØçïßÿÓ?½Ýù�ÿñ§dèî�Èômp™·ÏoiŸe%�ùÒgÖA—ü,{ëkyû|Õl§ù±®ÄöŸå™îÓc3 : ¦3.iøHº½~¯Ä#x6wæ!«³imC§±î…> °¡ „|Eð•‚Ó)«�NµA¼Ã äJ[šiü¬�U4Û�Õ"«àöȸ¤á�²´¦û0y¬sþŒíDz’·ü&¸z°Ó„Ã`Zë\u¤Üɧ刎ý@+«Zˆ%r&z®¯ [Z‘Œ`Éž€ ñÜooi•-4L¤äìãŒNï "ì3ð!�!¶é�üfÓ`Ò™‚ù{ÕíD ÝàOsôÎý{îâõÿD|Ü)u5®OÜMÔAÎÎOß¼yÍŸæhÇ=Ë®tSÕÝdàDïîcz^lŸÆe¾Y~�Ïv™·¯,+é’wãR_òÙnšnš]Îg;ã¬3m°Ü8ËÂ`ŽŸ|a›ÎºÆ[nLLgÌp:u¨SuÊ]¥Ÿ%#6HËEt6òWÄå]ýOŠøo¥?T¢Ocj œÜ5Œ¬/á—„Þt‰çÑÙ¿óšÏØå”2ç¡LÛFsúrV/«0L* ÔÞý»óäÎZ£ñ`yãM�^o(Nj“\{§¼¢à¾¦»óM%–ë3°ÀÖ˜èn�³ËY°ä$M þØ•ÀcˆgZQx¡Õ„—š\ð/‚öé“ñ©ùîóç‘X©€Ïz<«<ó_Ñ C<ûÉø´[@wðcm´;` _Ïðwõñ–Ü3¸{¨77Kô­2ä|­�çõ'¯_ï)ßÀ>j¸”á¾”ÁgY¦ÛêLvË)ö9o�OtN™ÏtÎß'Ï6³üe™.}d�iãš-: ë2ʤ7߇=ZŸÇ9ë,3ÆÖ´qä“zêvŠh#&Z5`È‹ßbdQ€_Ž�‚ÒGçdŒTZÏòÿŽlôVßÄŸ}àöAíTò–l¡3†ÎÉzÛdÞvY]KÎoœm�ÝYð—¯hhðõpFÛס²<ìµ°Ìóÿ ô8IkIñü}/ÁÔ™"¶ Ьä :®.'x'û�è¬Ëô[½ìòí›7ñ]÷$ŒÝ»Œ�t7ÿ@“‚ÿ‘–ó 9wþlö[“횟ù똘 ði·@LŽŽµáî�þòöõhgG¯k'¸ úœrúhƒ›AŠ=,z^ªà¢I„Ÿ×ÛÁ„­„™Ï4öóðØÜÄnZžÒg¶-éY¼�c–]Ö;�1º¬/é’w¾g?耜7ó¡Lzó}¸bb¸j�MÛfO}¬¿ø¥ ™"Û©FÀ]�ILö4ªlJAGŒ ƒÐŒWJVžÙF’Jd{®“D× ·Ï4©-¶£³ ]ÉgûšËJl_¥Ü¼ýNLnrçïVÜuìNkLGíKDÁЭŒFlha³KÌ\­“ìLdМ]ŸyŸad�Ï;? #ÉVâ+¯¶¶–~÷óÏñ7ÂX8år ÷õç=<8fEÂvø„¦L?ógÃ߆þ‡`€�ÓjNA>Ïæ³îJv�Ò`¤¥ûƒ“ÜÚû‡øQ“ÞÕÎPžr—¹(ÆgÎSú-õ%_æ-õæK¿µ|óÚ–yK~šŸymíøÌ7‹w¾“ÏyÑ™7mÜXLÚXVb.{ƒi?ÈM—ºÌ3lQ¶mM#/eÚ0À3üøŽ€p¶Áp¾L#3Ÿq#½þëö—´eç!¹‡Ð,ϲ’¶¯šÜ2ÛÔ°mÀ€ë‡6¿d˜ÔÛÊ ¼ú»¥¥¯ôDü+�•¯Œ_jsÞ²6©¬h³Ê2I½’�V°°¯{ûÀþƒÒ %>jÑÌ Z,Yô`¡À>ÛœYh>Oà±ãLs»m?øS‚´<Ðòþ¦Je)~]‰÷ðÁüc`|AP�üüßådœ{•ËWQQ�lWÒØ ð‘Z€)¾þõŽoåë]ü=Ëï–ïõ¸ŠS3 B?Ò?æ�¾{÷N¯ñ\¾Ï Ëé6؇O3ò,»)Ÿ}dºÏ_¶É´í³¬¤KÞyŒûôÈÑÝÔÖõ0.ý”|Í®&ËùÐjrËl3/fø2†.yÛX¦Ló aæ�­£wžlk×ß<¨ñ–‡Aú±�Î2h'�5Œ,ËÍ÷aû4v^ó³pö›ëfä0èo·èT_i Ý©/�ÿV¦«àü‚>“cÉ|§Xv¼ËªyÃ’>„ÕšíÓe¹í�ey�·­qiß'/íJ>ç+u%ŸmMO³Íºšý4:À>¦Ña8åÇÓC×ø,ó�‡Œ:�‘™6Ÿõ%mçQöðƒÜ)Ë t5pÛÔ0²ZòPXÃȲÜü,\+g–Ì>³]íç’ €éÍÄ&“UîþäÿV½éß(ý=wè}îÒ59pð *ÖÇŸ “0禮â'z,: <›dÂÖµÊÞÅ öðÍ�çzÿBk¤—JL x €d€ —“}Zn™ùŒÑ ð+´€ž¿ë-’øÏéO?½>Ökx©œ"u–‰•€FÖ­M#žßëÙÿ{õ=j�ºàü5\“QÒ49º¬Ït™7ë¦Ñóêì?ÛgY–C—ü]ÙÚO‰g•Y³ï“•rxƒ�«�·Ü˜áÇ`º†‘e¹ycÊ5 ®ÛÔ& Îkó` Æ[=?n�F–“‡Åi8ë Ë”ý™žÇ¦´5oÜsxó‰‡ @½�ºN¥;ýU1_)1ø?•þ½”†k'AÃ'Y<�]l^Qž‰^ _gðYÓ;X`v‚1Pâ-¾ðLø•ð×J¿UŠ«GÞ`¿R]+#÷BÛeŒȲF2ü~Œà €>¿û^_ßÛ=üŸÿóõÎøß§r9-ÀT¬sÈ·üý=ŸÊ¾|Ó|ÍÊ[ú̾úhçéÓ—e–v³xû/ñ]ù­ù)ëT–m¾–׺—¶¥>ó%]ã‘ÍW5œeÐeÂw–Í þ_¶7]æ³ ÔxËà ýäóbq–¹�k˜¡y gt™œÏvÓü×t–Ù/ü�^ý#Ÿ!â„™+º//¯ý?ZºWp®^õ\A÷µË¿V«ÿN-Î’þ:—¤Gñ¡~0‰ÞšSî�¹ÇʬŸ]Ðî%>Ûö�_ûÀ–ÿ`"²&L>níø(6«ž €�š_ûgra ÄGŒØá¯Þû_×÷â5@ñÌßìÀ×ÿÞñüþTÏòO‰çsçÖ�=_ÌÓ+xo´|¿s¾»{¤½^ §¸ ®å©Éì?ë2m}‰³ tÉ—öæ§ÙÖt}~KÛì¿�ž×WiWò5ÿ5Ù"ùjù-Ëx�nðpcL^Ó`'ËÍ×0ÇŠÜÃXæ3]æµ®”›Ïe›Î:þ ¦Á%mCbI—2óàœr¾>Ëmk\ËÙîÖÁŸ&´B=%ÀÿFgà�꥔ê�êeÿLø÷ÂüQE}-ýw¬'ÐôîœÈC2ÝHš_Î8à3öÙ»'€sYÐNèxAðä„z’(×¾ñ—“}»¼°ÓŠ_-\цÂÚSfƒ!ß2^ûS.çç#}÷þ@Ïá÷ÏôïwÚÄÇç1mŒ]¶Í´mJÜgSÚÁ¶o¸æ·&ËzÓyØB6�G7o¢|lóD Ó}~°J}–™Îº„ÜÐæM—8�5ÚC*ùLÛÎ|MçrJ[çáZw²Í�„Ø1@Û|èÿÕÍ´zÙ+¥¿Skÿᥠy/ØÙð”ÏÝ5‰�zùN›Þ‰ìTöTøÐ cŸéŒs ¦'�z@£çãÛlg…BÃW zêãžfŒoû4vy¼Ïà×þâ½ÝýÇ— µ"0LÔp @ûþÁhkëíû~x«Í|œ&ƒO¹y5ýäó|­\èÝûã³ím¾Å?ÏGx쳆³,Ó”Ù¬<¥ß’wÙÆÙ_i;KWêï§}—e”|Í®&#_Îk›Y¸Ì“í3m»,ƒž<\•Øùóð†,óÓh†#ôÔìá)ç±M–Ù^Y®•eY #ë|º�L“ÇC¢e™/ixË2®ÑøËööoŒŽaÙɶÍç¼¥¸ &m+ü!Ðù# §ÿ�zàÿ­ô©‘è.ú�t¼ÐÝqÓx$zª?Gî½Æá¼Õ U�3ä�é®ÈÆÁŸÞÁz°ÁšmÞ”Iðg2�¯ìÃtþȢ퀻þ ½÷Ï»ÿ@4SÓTÁ?³[ &‡‡ÚÀ÷nÿþὋÏWË€hê &ƒ~Öų{&úHÔ…°OW¶É´»L)3_ê]‡RžíM—¸Ì[ò¶/}÷Ùeû>ºÌ[ò9_©+ùi¶YgÚ¸ôSò¶+1v}¶Y^惱©Ù‡“~jÖe¸�6ozÌq`çá±äÑYÖçO&]ùض5Â9~(‹˜.±‡FË3oœil3_ҙ϶¦Ñ—tw÷~À3ÿoµkÿÿSR°|¢ô7 ®ÿB˜%VžzÌ?�æ ¦C»WÓ3-¶»Z Kð™;å’iüºg¸lü‘ÏvL˜ðÉ·òD;¯±'ð¦™<Äg‹õÌÿÞÜõëù¼žÕ�ùpI—渂ë�úJWP¾“×îûmýçý¶VöÏÞ½;>ÛÙáRòé&§y{1î£gÙ¢/ó–¼m²Ü2ct‹èKûœwš.—×G—¾²]©+ùi¶óèlc<ϱdÛYt©7?Î6ÓhtóC˜¡F[ž•ð“‡Cìi?°å泬ô+ó‰²2o:cèYPöŸ×>ì!ÖzóàL£¯ñ–•zç3gÞeI|wPÆ…»óü™xzªGäjéß*ˆ²Éïwj�?Šþç¿~LÏtà'ø“¸N4 6er¯E˜×€³ »‡�™y÷ûs¹ä̃éADòÌ]g0>Ñ“ðÁ¬�,s¹Ý Пä\œŸžëÿé÷µT g÷y¹^'rby¾i“ŠLçǧrIËö§¯_o뼃ô¾õ%Æg)ƒ¯ÉJÛl“éš]Ögz–­õ9tÉg»RWò¶5.ýey¦K?%Û¾<–—e•¼íJœí¬«É¬«ášÌ>ЙÏt£�ï7W5ÚÃþMS‚icÛ1”£j(¿Ãgõ„>%g5þÇËxö>|ôŠÔ�üº­Ë=^¹ûuY¿Žø­ùŽl¯Ãw´&u/»óˆkë×.ŽæÕv^Ñöã:â>ýiýÀO}HŽüýM5ÆßÖàÊÿÐôÝP( ”£U„gp¤uô(-ÓህïÄQ!�Ž6òrˆäå(=:œ ô(“Ç—ïšyoÿA}Íï~}­¼õÓŸ^¹_ÿøqý“Ÿkõ�?>üç¿ú½V¾ï ñïù_÷|ð®ïëüøMÒ³&�ÚÏíÿºZ¿Yï×÷àË/ùà?« e.ù—Ab�gŽÎ§][b络9±­Ù»m×c»lLÏÕýº|Jœ>âhŽÉ›1æûêÅŒ]ãõ=3Ï©1#¿ÔÁCæÞIÇ9uHò#D×q]wLf}Ç|FvçJ„‡ðOBÕA]"üHVÏiWLY^ìveì9lü z|_]º @UòÇõùßT…[m üoUáßW!~S�ÿÇ„¦ï`3`ãi 6QyŽ*Zd"¼r±‡#~‹|µÁ äCgîbÏðÈ�~�Ž|�£‹ÿüw·þóßÝjøà�ŸÿüÊ�Ï?¿òø—¿¼òqm~RúOöÿXè}ÚÔø~¨ÿ{ÿ}½‡ÿ}Ýz¿}åqý¯å¤Ñ tOïßPß·ÿ¦~x织wïúa=J ½JÌ\ò}õ`òú¥î>ãºÊé—|út¾Ë·Æ÷˜.׿5ßc6seüëÒ™÷T­ÉXŸ—¨~ Ó/9�²Èi"ILuyê#¯úäÕ%’ÃØÔŸÂ›~Ê „­SêúóW!ºS§×ôK9y|�œ›F|ú—Ëë#zÚ¥¢:â>­êþ¦Ž†¬WâëÉÿ] >øy5ûO}ŸÜ»½ù#sÔæ&€#Ë#YD×G©†G&zŽ )�"yrÁsdd^Ž dIÞ8õi¼%€�«þÛÕø¿ÿÅ/®ÜþË¿¼r¯ÿ£Â'5Ø|X6~ôçÃòû€_|O¨®üÔ‡÷nÕüõû_|ñMýèÎê OyGÑìKñœžoÔ/îݹ_ï×?¾u‹rùÇH¼þ#éN‰1®ûª×xcÖì[ú-ÛZÞÓeãÄn?&g\úªÓL6®cÆi;¦Ù·bµ½,2¯Ç"|®#ù­y°�JžJÀħÌÜœö ôÈ ”~�Çnl·�Ÿ>Εé·“Î>Z7´ò#Dwlô×ÿ®S=%ƒ#~™ïUè¯æ:C—nPGçu´þ¦^šÿÿªñw¥ãs?ª«þºæ=û�?6´? :8âÈað‰ð9J\dp‹xÕ¡ÑÑÆQCNlæ.v5¯¹ð�¸úçmðN5õïªÉW ÿ»ßþöʃ_ÿúÊGõ6À‡5>©ñAÙøÎ?WÿûŸH¨¨wŸêgrù¿÷·îýéO_ßþçþ¯ú>M²;|¶H}ýžrѽ{�Õ¨šÃG!ü£}>ÇÙœäÉ\Çüµgœ:1m[|ú¯ñ¹¶Îw9st[—ÓW^ì¾]N¿nKY?1mð]ùméNµå<Ƽ)ô8�Ï=ו¼>‹ó mÄÂgŽ5>sÀŸ—8µŒy<17§FÐS‘¸uJÔ__°ó[ºô­ÐClç‘O¡¬!þ)Ã�†~Ýæë“zu¾Ž �TÿÆš?‹§¿]*â ?�*}^õ�~6~›>è0ßÖÑN‘=bᓺ>�ü�=zàO¡ÌÏóâ(ãù’ë£ú}›�ë+îŸÜ¼yå“jüWKþ¨þmðòûÿuõÿV¨~ݲ¿[_ûóèîÝ;u~¿ÕnYWÛTýe©ܹù૯øÎý�+õúåÏÓ…,‰|Gslá©¶-?çMŸá3f”3ué ßåWåkžŽ£9·Ö`|úŒtköÔË¿†ú�0uÉ“ ê:äú¤ßÈ®_G}ó4�¹º?2¤ÏNz±GrxŠ#ƒ§+Ðu�žþôÁÎzÕ‹æ2„õQ¯,¦^>±óÈ[d�¶0Ÿ+¹RñùZɃÏM¢9¶ÖùÊm—rÀ“¦ÚMðüã®wóª=�Ÿ£Ö±¶ Ïèèöh!q'­?z$€P¢üβËi^ãŒI_�:ñãºÀþøÎ�eóó£u‘üû÷û¹õ_ÿfø­¾ƒóæ�úÎð¢zòÊ‹Aè!tÝG™ç‡/GŸÏ•çíçøVñ‘çíܺPýßz¾ƒwÿ[ú÷–Í€ÆÂ:a¸ô�ö¬ü´~)ï~ýfþõ‡7nܪßàçÃ{,ɘÄ5ž¼ØÒžº5½>bÏ1ŠKß5þ"õð $ÏQ1?<É럈2Þ�耻ˀBÞùç{oøs´ž—ê;ôøñ�å—ô¾þúfɤ“vK{Öôù°)(=¿“_ßß¿ýÃW_Ýzxû¶âñÝÅŸÎgÜ)±é>}_Õ<=O—Ï;'ñ§æÈÜÉoÅë'žâ»æcÂÏ¡|*æ³ÆëÏŸ•s&ªÏø´ßuêGq©ƒ—1o»I¸  t­ §,ÑS”ˆžÓ¸Åk3g¹bä·Ûy(ŸqÊÉ«ûàù9°�øÔOþ·F~PUþ¬Ž¤ßU…ÿG�ªÆö»?A_Gá²ÈM€� �ÚDüyýR'¿8ƃ±¡ª‰ŠÎ(Þq!ÖËÝ€õè�!t�GçàyæÑˆÌ[\¢s€7íùW¸�>|R_Ÿ{ZÍÜ)ËzÕ×öîÔÕÿw÷ÿô§·ÿå_¾®÷óÏÓÄ]j"+'�î<ò–¯6±çNýylk¾æñ[óÙ^—¯ëé8Zƒ>¹–‘.íÉë+æê@(m�ßy¬×Ïø¦.yæàØw.ÿlºÒ¯ã{×ÌwOçÅ m©Ñ~c@bNQÔd`W†ï§@O¡ t*¦ïxäaYgùˆ¸Ëo!6†ÇHnÐ¥mñÔ¨ÜÞ]ø Í�fGõ9zúþ<ñCN„?e”ÛÐ/õðù¤åè(|’kO�kAï_“zdŽ@e1Ÿ'<µá ¸Æwæoß¾ÿäúõ{¿øâþýk×Î^½—ÏsôìvþbªïñúßÖWñî-?ä³[‚O yq¤ÓŽì]÷2rÆÊ‹®#åäGëK{òé›úSøŒíü19ówß´�ø‘n-‡¾âš_êG¾ê@‰˜QöÔw¾Ç¥½Ç*§�'póˆèõï¨Ï¥kþ»’Œizíî@Ö�SuótÅi �y ;&ï¼wþòÇ�ù¡Ä5^?ìÖÞGÚÌEì;E~À|%¨¼_ù[š^Éeby#]…òé—ñð�~âN{öu�§)æÂ_^d=èEyd�ÿ̨ÛïWoݺûäÏþîÁG}w·þ%n¹HÏ–Õš¾ß¿/ǧõá½ïë+|·êûûw÷ÿ„‡¸µAî5[×�|OÑuŸ”Ï˳¦Œéò–-}Óï¼|æ�ïræÛ²¥ßˆW'Žæ2¿>¢úÄäOñÃÅ­éõåD ߇qú¥}Ë6òÓ„9ßµ+¼ÝòÞþã~� ±ásÚ¢~ž¾R¯îT$?¾�¸“¶¯ßÞ 9�#ÔèÒOY_ü3&íKÜ»xl\ø Wü¯Â±;ÇŽ4(xÌwdg-yd³.±5ÈU�27¶”×xלÏÁMÀ‡» À½úÞoïß½ûÕw_|ñíaγMŸ%A;|f{Êû÷õ!À�ë÷÷ë-o‡�ž’ñ#Û–®Çu9cÓ–<>[rÚ’ïq[¶-ß­8mbÏÓåôë¶.ë+³§ßšoêõ?†“|ÆÁCkö‘�ñ˜þú$:W÷SŸØyäyÅ¿Taû!6ÖÙS�òÇÐÓ~Égyðr=øÂsÜ䱃ÎQì�Oy:ä|ÿn‰—àk€¼Ï q´ðа`×àùÙ =ê<¢Ä~”é§>ýÒ–üȧ¦^ÖB=¬Ñ#h1Ô¹’ðÉüØRî<ó»ùÄ¥õþݸWÿïÖ½/¾¸^Ýÿ:y‹<�·[ãR÷*ù­üݶ%oÙXoÚ“ï¶.¿¨¯qâ«Ê›yÌ-¦M~ͦL^ÿSñXì©yôË|üù8\ç)x&×»|Òf¡ï+µº.¯[|FÀS]?…¥ì© ñiƒ‡:î´ë�Ë:Êìq’Ç|·ëj_tíù­ÏøŽX.üêÌyäˆýÈIåä=²Ð%éÛѹh²}Ó� Ž>ŒÇà«xyéÌÑÕçTv.â!åŽ;ëóv׿:ˆ+þ)¸'S'&�òÛ[kè¶óÈoÚ×ùĬ³õM[·§í?²ŸªËy�9/nåH[òΑºÎ#3<)ƒ�úä{¬¶y5O%Þ Ñ4ã3œ~òµé§3__N[ž=eéËêS‡¼F9>æOù ëcmŽwVá7\ñçQbÓóH9yóˆ2.õÉc·±Òü¹áp#ঀõñ¥÷û5 �¶\÷ⳑ×Ðß®Kydw­øy`�øÔéç’S–çiÈÃS}×Ö�ùG>]—ròäÙ’·l=öT_ýÄž§Ëé—¶ÔË‹é—üÈ~^�þ#T7šS›ˆÏhtû–œÇ‘~§àlþTé-PÛôp<ìOM‡S›§G|G§7õà1Êãrtìi'�|â¿oWÿ<™ ¿àI.·¸ y•ÜtÌ#HžXH9qgyþ¨Lxæqàósl 8’ýÄi[ã­…qäØSäô�×~*批ÇlÙºï–ÌÒ»ý]÷I9yroÉ[¶›¾òâ–o·¥l|ÇôIþEýzÜ«’=Ä\+üh8·¶”åAÉœ‹ü>ž¸}" óu¨;>5_«ƒ¢ ò#L�¼¹ÖptÜt]�u]ïõ¦ñÂoh¶6TŽ74=dG—ÕƒÐG:}3Þ+}Öòi�ܸ>â8ãñòìó 7¿üzcºÙXÐçí&`�NmxÊò§bžÈ�éº.ã7Ò/²>ùnÙ»-åäÉ»%oÙzì–¯¶Ž>/õ#YÛ1\[�qÇìú%&Ÿñ/ªçuÏaŸ÷êû^Ÿ”y—�r3°¯…ÇÖ°4ísžâðí§Âïñ„þÀæïqB¾ÐŠÿ]@5µgûÉzÙ<"D_É.w½v»|"|š*…æjßæ�Gݾñ.6 è8 š·Ø…G�„ä�o§}öØõ)ÃC�¤55&eq¤Ãv¬Ywûyeç?®­ÕÝ~9}“'wÊÉoÙôOñ]ó1Çf\÷I[òé—<>õ£¸î£oGý<>À5}»}6ÿ]Í.ë£ÇŸÏ¿ËêõÓv¡ù ¹ÈÝ`�A®îê² ˆf·¼°Ê£WÛš}Mociìy€+~6èØ9Ëé§^H®S�L×åü:¤ôÃAyïÌt£�¹ëYâ1]÷Ù’Ó–|Ÿã˜q6ªq É+öý¹?�³S«±Ä˜çÔ ÷ÝïBnö/ÊÒëL²Ü ±BÙmz©Ûy=×{ƒÔmÁ̃"exš{¿€Ž¡]97œ;áïÑ�|ú¡ï„.výö¸¤­u˜샰Ôå‰:y}R·Æã«ML�¹F:Ö“1é‹-åäG¶Sté#/’?ù.¯ÙÔ‹wªncìy‘\æËØäµ¯Õ~ËÞóè :ôѦ JÛe;i[€‰ÏWÀc¡6Ï74Æm¸\HÓ…Ûìw€‡^Wg(…åhð�ÐÈ+ªÎW7mêÓ?ùô�7Hsï|$}lþ`~n?|g¼&c;/“(_¹<wdš®CÎF�|ÚÖô#ŸôM~4wÆk_[ç1û(.u#~¤cžÔwY[Ǿ¾nïò©y{2´Ÿú�çî±ë}mDì}ŒldË\Ïñ—õ„¼+ó||Ù Ìãç´ ^¸ @{Úüû¹«œ�ª¹ú›g(|=ó×eõ"öC"•ˆ?óû¾îgò0hö9ð÷¬Yì�r�É�Jc"ò;ª3r±aoÃ¥ŠØGüH—¾Ú;¦OŸ;eãXsê;ßí]Nÿ´�ø‘ÎøSlø@[1Ú×�Ø5ÛH¯.ã:ß׳LP]¯lí•suø¨ß³K>uø-4OÞVbâ¬Àë­ÀEÞœéÓœ}¸÷lDYgœŸ¶î‹ áÃ$#DÇœØA6üw¾ëïZ¼íïætàÃpË´Jú¦ºØôS×Ü34y—ØŸ®S^³mÙ�3}Ô�}šÆu}׭ɩޱ¯Iý1Ì5ã Óõ¹�{}{žÌi|ÇQLÆa‡ÔøÙø—ºÌ‡Y�7V�‹¼XŠXg´å.‚g7xÏ>ž½Ðu:f;³ÃhÁÆ‚\ÝóÕ>6ÜÞgýv¿�ôn@®·ÔϹ;©»½Ëú‰{;b˜Rçò^®å`>m£¹SwŒïëÇÿ]ú$ßãÓ&/®ùb‡\ûˆW—(ŸyÕ%®ñÎ×ÑZ‹Æç<=¦Ûˆ‘ÒÖuÊóƒ{‡JLfVàÍVà¢nìÍ r6£á®�¹,¹g+åŽÚA'ÐG˜ƒ¹iè4vnÿ‡Láøô €g`s•Ë’7q‹×F|§Ì‰Mæ Q·º¼-ì6ò Ký¯¯së§Üí©ï¼Ï©ë‘»mK~›1¢k@–ú:Ðw¿ôÑ~ ¦Oòæ³¶ðÊ ”¾#^Ÿ�s]Æ/Ì|˜˜xç+pQ7ž^{µ®º—¯ªÈ3\?›á³¥Ónó×7exõ"sÒà¹å¹`S €�·¸Cà€\g©—œɯN^ygÙ=ºQæPÖÚ—³wéS-¯û)8òIÝ)<óê×× ü2ẖ%ŸjK?ùŽÌ'u^¹¯ ÿ´)§.yí‰òéŸ5N›#cÕ�óê�"LšxO+p‘7‡—¤.}yùbg8GžÉF< Ô'¯.?v›¿ˆsytÈlØø¹š¿€\¼óu,Óж¦ïñÈæw�¤¬õwWÝÔ+�0u[<¶´÷åhK}ç]ÏyqT¢Ô½ ~”C]bò<eù.«³F[~ÓyäµaÎŽKŽùž=e™4+ðþVà¢nèÁ˨Ûî‡;4[š¯�'Ïžý ÈKÚuËYCQÚ�múÚ™‡+{bàYþ"zß`} }sx(±óÝ_Ù8åÄV‡4u>]å;?’»Ž9Ð¥^Ý]“þʧàVÒ&/’û¯]\‹ÑJé‹n$§ÞÑë`¼öQ\÷IY„Œ?ÃÏæ¿Ôf>Ì ¼×¸ˆz«´ðÕP¬3å²È3&|ÊyÖ”'™gAu9IÚÑëK^7èhì6ýbÒ»ëèèœ"��_’…{’²q‰Ì·ŸóéžOsç]zù}ز¬äõQ×Q{Güº.eøµal·WÈjL·)w4gםɸ¯Ùö¦eM�Å¥ÞçiM»ym0_÷Gw Ùक़̬À…­ÀEÜøb-=ú»júŸ•ÆÆË•6ž8?Éë2Ï¢êNÅJs Ϫ*Èk“‘GdÜ©sžâÇ\é§ :Ø”À‹åOdh†u²©’Ïíkh\ÇÌ‘¶Î#�†ñØ ôé²¶ÔË‹™GÝ1ÌùóÄtß\gÖS½s¤œ¼ùô›ïáS‘I³—´u°4ÿzM¯ÞªÞ(Åò€ï_hžø�jðÛü¼o·Ù,ˆyöñúUÈB‡3«Š†Ø]œ&cá_Å`}òɃ4}†o?¨+¿µ©qÑfªc²~kH¼yõQ—zuΗ¨_ê:_ÓÖž¶®Wñ•»N½Øí#]cEm[rÞúŠ9oòØgó_ª0f.o.ê€W”>{•;­öó`æÉ¸®ïëHyÄ“ J[—±¥î¯ýe‘µåºäÍ«,®éÓ®aƒÄ�0¿ª·Ôa>Ì \ö \ä ÀòÚÞØo|¡iz\ùÿ¤?Î“ÝÆ32xÊ]€r;œÁá¡3gÚ�êÌã–]è X¾ã– ßþÜFrn°#ö©F2îêG©Ï«Ë%�øœK^̵¨ëXË=¬7yü¶dm¯]¯5r­Î¡<Âôé<ò�æûø‡RLfV`V`P�‹¼X.¸«É?¬q§žûÍ_~Zu¥ûq�y?©f÷qñò€opF&t ì<6È«}ÑÙMä�µÁwÒ–¯ÌÊbêäAGú©iòÜýàk‡÷jPðn�Ò=-;¡¸öÊb¦éÒ~ OýäG˜sÉëW)ëN<¤.ùnë²¾k8òßòÅŸç™ßó¨͹øÍO9&Í Ì ¼h.òÀšÐ×þ\ãÿÔ¸V�þ¯?ºråW…¿ª³è/s@cdР9;ËÛ°AF6þ…Ü0è‹�³uæXÎÞ©;¯®w�µn©žçàsñù�4 s»F½Mâ&àimžÖ†)§sJt¦Mì¾iÛâ]ZæMžXåÄÎ�dtŽb‡ýÿ÷õÄy¿û'µø ƒƒ®dó9Kgó–/õ™�€Í„8sgeÊ<Èêá•GÝÝÖ°Ãêƒì¨&¿lø�d½Mråûèê“OÅæ”É»,Ñô¢±Ê#Ì¥uÿ5Y=è ·ü–ËŸ-9mò#t^q4÷(nä‡.}“Ùæ‡÷võš�³³/Y�˰àî6w¸ÓýÅ_Ô[|-°žø_ÔÙû¯¹Nó§Ù•8³;Š]Ȇ®,fó'&ý8ƒÛì=³›Tv^躺.mú€6}ù¼ýÏÞa#Pöåöù›š�ä‘_vŒÊ¼¶tõ‰�GîºRÖ� Ò¯Ëk6õ#Ìô¹Gó˜ckn|ž£y¥ÿ\I¦bV`VàUà2lê‚vé�\ä~XÍÿƒºðÛâo×/½KƒöhõI„Žnà&@ŸDÎúȉ%.„ÊΠŒnkd‚uV›?HãwÔR…y\»£Çµ3zRÅaƒÄ¿$ &¸;µÓ(wÔžˆOÊò£%j[‹q>üôQ'jS!åäOÕ3B×,šÓuŒbô9Øfs§“ffÞV.ÃàLmi€t:ºMÛ¢» °)ƒòÅ®y8»ƒÆ$hQqÐíí:#̆Ÿ<Ï›çÌ{ÿŒ’UÞ;µfÊÁǾ­ñU�ýO', <§MgÃïÛGºî“òÈ_]bçGr-çÐü±C`®¿Û�əǩ#B'É/8›¿e™8+0+ð¶*pé6\ârÛÛ¢)Ò”iÞõù€å­›÷VC/×3dc76Ç´¨ùLwØËèF#»¦¼Í¾Ë^ñ»àùrK¤ä‡•›»"ßÔ:øïðy@.LmºS–¡�1`æÉé;²ŸØyä®+Õ™Òu9ç2^ì¾êG>êá!bš�ßJLœ˜xÛ¸,OÀOù@��«`�†èg¸ÀÆÀæ�€R/”M[¨ÞØÄn7ÎäÃ÷Æì6ÉgçêÝÙ�@G7Þ¨çÍ€ïë9^¯uü©B¿©Aã÷?÷iûtÚGúÔá—òß}•;�Üu¥:º`”Éø£^Ä__YJ^ÝüÀÞ¡“™˜x×*p‘7Ãru¸'ÕðV#¼_x§ÎêwªñP?ôA5E}ÿpWÀF®ÎŽ‘/$$#›Øy›ïÈu sô†�lÓßã“zÎ|Å�÷þáï–Ï­Š¿QëäC’lHmJ§î¨]̘Ô�ôÚ·0ãäáGrêÊåP:ýÕ9w–P¾>Æ�Áy¿Ôg>Ì Ì \€ \ä /�'oy.qïÕUþ×õÄÿo5¾�ËáF�ŸU7øy5şׂÏ8û'õ$Ü1@B4zäDø%.r"|9 çëhW²ƒ‰t²>ªÑ/w7Àz^q‹Ç¦ÝæÔ&v{….„ZÃ�u>Î Ì Ì \€ \Ô @žÀÏðÕì– @)y àzý4ðõêKÿ£j’¿ÖÙæosÏ×:›?<1ŒÑÀ 6›¿Xª9o¢yA;Vò6l4†x›ÿ~ð€jø_×'þþTŸôû¶ô÷ë9Sö 9EN£^L[òÚGxŠ_úÈoaÚjù‡—A}–]Ö¨ØéŒn^ù÷òLyV`Và"Tà¢nxm<‰ƒò|ÂíA ÞïæSïWëí€ovåʧÕ0YN[]ãa5è«ÕØütðÕCp@&¤ùCÈt7 6û”ñSßÉ9�ÇüÙµ²»eÓw#PM}ùI_°wÔmÿ[õ¿¯ë ÿ?Õ“çÓþ™ÒéÔ)wÔæÈe¦þExs979R—r™/ >”#‡¾æ:ä™��ÒMš˜¸¬¸ˆNðRò©³\­Kß5¾©fþ¥ü´š6·Äÿ¢šæO«aÿ´ºÇg|3 .�ŸÂÑY4ú6ztòÅžá‘;¹X—è\ z;2<—ð4±ÖÏFç~�{ŒjþßÔÕÿõÂïË7S%vym°Œî¯Î˜”;�œº£í<ˆ¯/•è±AâNš�³³³—´qÀKÉI~mœy©«9rkœ;ÿQ�þQ5ì›U”ß•ü×Õ9>¬Nù�ÕnBR›¿˜ÍŸÍ�M?7è Ž;í³®´¶h»£Èzè¸Ê§«;êŠÿ‡z�ÿ;Þç¯ûñ�?ïûß._ܘÊtò¢úS1ãà»lžnC¯NT·…iƒw�×*uè¡Ϋÿ]Aæã¬À¬Àå­ÀEÝä+êI?uðèŸVsP·Å¿©Žø¨67KæC�÷ë«�ÿs›¼Ihàtôèàiún�mü¢‚26ð�œÃ¼`òv4Ðæïæ„ŽÎ&ÀÁƆ[þõa¿?×{þ_ða¿Úp'à^Åànºµ)rz}Aý;Ÿ>Ý–1ݯËé+Ê믜 ^½~¥ZtàB³ù[‰‰³³—¹y`ÓàõM^y¹¯ùC îðS¸üîÊ•/?¯þ^_øymþÆ AÐÔí, ¿¢Ï�€¾6±Üwà“X$äbÉ ŸóÉ÷ �¿ü²ëJÿA=¯ïê‰}õŸW®ü±69uà�Î)L/š>åä·ìøuß./“ˆMY>1cå-Gnèóä™4+0+0+0+0¨ÀEÝpâ§çÚHlÊ݆žfBý¡.�oT3ÿÏrúI©î•ÌghðW«Ñ_­.ó“Ÿ1JÏ¿æƒËd3à°ñ'–y!tR_  YÝMäÊŸ51ö<Ÿæ¿_òòÉþÚ|UWûßÔ�oùNº6М&ù´w}Êk¼ñ >}¤]Þ\úªßBKcLM5iV`V`V`V`«nÀUßÕ¢zÒ4Ȧ ¬.ûïâÈC5·Õ8oV#ÿ%r Éoå“ðju k5>¨¢ýUÝø¼šü_•ßg‘Æ2lþ"9Yò¥>C.ev;ôt¸ÞêkÀ€¯ö}[›˜oyuÉ£ðûÊÅ�”N!ªs:ôò#ìö.“úäµwÄÇ�ÍQ}Êݧ—_àE?iV`V`V`V`¥ô«‹Hyò‡ïƒ>Üu‹\�òa½_ÎW¹½»ÆVS½V�ôZ}.€¯ ~ôã+Wþ¡Þ"xZÅû¬ìŸWó¿J!y;€eãÙØôÅR-„,¹dx;œ˜ÍŸnÎm~F]á/XWþhü%Yký’û•Ì/þÝ-Bœ‚”�Wçt[˜±7Z¶yÖl£\êŒmþµ7¿^àI³³³Ç*p!7û»>wšP'šÅ¨ÿò�ù‡_W#­|_ ý‹r¤F×êáƒâ¯Õà“ßW­ßøqm>§é3p¢3ÁÓôÝŒ69q¹.Ä‚ �açéàäÕà—æ2jÝ÷ ùe¿/ë}ÿG®Ø%|�¦6½2>êÿ’OÁQÌHg.çKÔ›(¯%p ƒ‡xÉñ�4+0+0+0+pb.ä ž»MÁÒéÏØÙ“Ñ=ª+ê'5h0‹ÿÒ׫`�ù:]m¾¬ ŸUÂOj\Ûw%>ý¨lŸV¢ú¡Áå·>ðn€ƒÅ«˜ØE€,°ðq ~¦˜&þ ÆèÉíFÀ €wêjÿ‹âyÏÿÍ¿ü –Ô£)Ý~º�ü"Ã¥›OLý(/v‡1úeì¾¼K ÒŸyÅO&Í Ì Ì œ³v°¿ �ý•ÆA#A'¥ÝFt ŸÐd«³ø Òl—_ ¬bòVŸøEéYø«WÓÿÀ»œM€‹p,ÎQ x\ü÷…ß2Š¿mħæ»Jwç-GÉ7ØŽÞó/ÏC“ÏçG:äDøS‡±=¾ësÎä�Sç¼ÏSW¯ œÍŸ"Lš˜˜x� \Ø µØozs¡‰@ö^í#¤ñè·ðÕ|ŸÔoèÞ®&þE5[~/€_¼VNl®•ž Àïj’‡…×øE®;‡áÛ¥:$·ËíqÙÿuÝ~ø²Æ×•‡¼v¿å[ Üš`ÔšÀ»µ¸SþÅ1*Ý—FÙdŸ«>‰ð/:Èk¬s¤nË6òϲț�—~Ò¬À¬À¬À¬À TàBoöõ°apáM¢¡3�{AîÃõ�ë‚·ë;ö4ÿ•ä#éël®ÕÕþ½>®I~^ã1ÍŸ3è°è.„Ät7ºöyûáNm0®×{ú¬¹þ«|– @¹@ÞŽZq�+ß°ì¨]ïê3BÓž‚äO?çéÒ&/¦ÿˆçy1 Ùüwu˜�³³³/\{Ñ 'x�i*ô\¿�'{Ê�_rT£æ¿>®+îêÑÏ> _߸Q›ƒ¯jð³*0ÿ^ø³J¼|7‘ *öÀ—È„Wiþ$§Ã¯®äÿ\o3|Ã�ùð�ÄRC„CâNzöÈz%׎,/2UçÕ�¯b˜Ì|êÕ)‹êÝȈÚçmÿ*è¤Y�Y�Y�—­ÀeØØ8D ›Q½HMåE|iºÈð�r×=)¾zw½>®îõ¨øO¹U_21Ë�É£¨ˇËWäÿ|]›~¢¸¾É·ì p…Ä�4~dM˜Fù³ /~Ròê@Ÿgò£çI¾Ô+ƒ�W·†6é5{×3¯ºÑБÓqð�ïùWU&Í Ì Ì ¼¢ \– å²ñÐD.yã‘Ñ#»1€ÏQâ"'¯ù ×.ÏÕ%ªO„wà+/ŽtÚÀÌ/Ÿúôµñƒòæ/Õ¤Y�Y�Y�Y�W]� ¿ˆ‚ÑP  –fB6ÜlV6gu‰äI·ëÒï\ä±Ùwl�k2®ãÎk÷Hž$׊N¾#ëM�µQ¿%§M~-WÚáG~67úÍOýó Nš˜˜xŸ€¸}ìÝš‹Í•†)ƒØ×š?¶5ÚÚÐôÌ™È|Ú\²Q[®…Êò‰ðkÔŸ~®5ÑF¬YÝ1^?bõ=¦ÓWÄß+~7ÚÀI³³³³¯©—q@)i.6š,͘f”¨ÝF­\nÏ9¤äÕKm :Y»¶ôM¾\yà%ò$!«“_C÷S·Åw›2sÂ�F6ÿôçâßµçsšü¬À¬À¬À¬À+ªÀeÝP>›¡�Éæo¶¥Ÿ›b’lÐè’×G]bç™]äP'®Q®× mÀ#LÝO~lŽ”sní^ñ» P�ï¤Y�Y�Y�Y�×\�K·àʲ¾`s¢¼4W›� ^»2v7Ä$�L©ÛÈežDb°�èÁ%dùDø5"/v^ÈóÉêG˜ºäÍ—ºäÓ¾Úü畽"“fffÞ@.Ý`_SšdS²iÓ°hÂ�Í�vQ;¶Î#›#yu ó’ ^Y>±ÌùDxÉ甲:pkبñ‘ï¨-õò[6}À^ù‹ô~òLš˜˜˜x¸¬KKC‚@/ÍÊFäF=~k›â¥�޼6~xtÇF¹,>#D—”ë†W–ï2Ï'm)Ë¿(’—ØŒW¶éƒÎ_ì¤Y�Y�Y�Y�7U�K¹àJ3~ÈFÕkni\4nH„܈èŒ%7z=<ˆ\e:ØäAˆ˜5"?4Btkƒç£mÄ«ñ•_CóeÃOÞ8^|'Í Ì Ì Ì ¼¡ \Ê µµá´Ï,¦¨=�ÖÆD³¢iCò dCÞBòdÓGÆk”ù`‡‡œc'íѹÎ-L<ãЄ²6±û«Gvl9ظ @x-à'Í Ì Ì Ì ¼™ \Ú €å­�À“v7 ЦJƒ²AÓ¼•å;ÚœGˆŽ™›s§êR_¡«ÍD~h„©ƒ ž_ê•Em)Ë‹øt¹7þ'nÂÊ6iV`V`V`Và WàÒoöõ¶iÙÐi¼4,zQ�-c’ÇNãlìÈò[h<>ò{v(£$·$nñÚ³i�tÝž²<è ‡Wú½ù»×:qV`V`V`Và W`nžœ¦DóQ6,2~4{]6ÿlÚðÄc‡?e”ÛÁO”̯œ˜k…WñêFÈóêú®KÞaãGNþà?¯þ«2“fffÞbæ Šo3Ú¿@“’l€üK_Èf�Ÿ›ålîèR&WÊ£ AÆt^<…˜ò9$ßmúˆ‡Fñ[6ýÁ¼ÚïÍ_?çgM“ffffÞBæ оßø žÍŠæMmüÊÙØåÉ,?Bò¢w#Ðý‘!| q'�öèsÀ[Þç£ÜmÙ¤õa÷Cvä&@�þ‡ Oš˜˜˜x;˜€qݳIÚÀhj6švô�ˆ5þ®#_êÈ£,&a?Fù¶øn³Q£ßú%n5þeï¶[ü´Ï Ì Ì Ì ¼Þ Ì Àz}iX47}6ôèx[`ij…6ì—ÅJuÈ%Ÿr}‰ðk²Í\Ÿ-Ôt¸3~^ùŸç•›¾³³³¯¹s0(0W©õyš9 Œæ&Ùè²n/Ûô‰‡2�r"|’q©“gÝ’|"üHV Z ‘¦oó‡7ÏlþUŒI³³³ïR²‘½Këzëk‰[Õùσ¸ò§±I6mô OÝ©Hœ¾#^¸FÄ3wÒHVv^ÝyІÿVýØLš˜˜˜xG+07ç{alš6<¢ÑÑ€ÙØÈGrÚ’¯°C\ç•ÁNäX#×™v;º¯ÎX�ç©~Ä{Õo=ô5sMš˜˜˜x+07'¼(û·ô¤¹Ù|mx6t7 ~êôéH^uò#D׉¸N£æ«.±ó#™Ænã¡v‘úõuMyV`V`V`VàªÀÜœøb´M€MÎÆg“mþ4CxH��>»²|"<4jö;Ëö£�/y°ó#Ùç—ˆßH6'¥2sNš˜˜˜x+puž«_ìUÙHЦlãOä[ u½É�dcÎÎ#CißiÖ{#V¶Y9âÕÑèó66~øƒßlú”rÒ¬À¬À¬ÀûS�yà_+Þþ—É@#¤!Bð<›l6ü5$Ææ.¦JÛN³ýèz;�œƒŒ½Ù+ã'�Ÿ¹à'Í Ì Ì Ì ¼'˜€—x¡ö›²MÐFOÖl¨øäà®@ÊòÄ%¯ BØœkQœð ¿ë!DžõÊ�ÐFŸ~É/¹æÕ?e˜4+0+0+ð~U`¾ð ^¯ýÛd²yƒ6ùŽ#ŸÔÉ»2d)yuÇ�Æ­5xôÙÔÓO½¨Í|óûýTbÒ¬À¬À¬À{X�¹x /Ú~C`ã§i'Ÿ²z›M¾#+U*Ñ´!›w6sxeQ?ð ««|øI³³³³¤sðš^Èø� M=ц/¦Mž•ÁCâNz±Ç3 ½RØÜ;æ`áç-þ+øŒš˜˜x—+0?ðú_š¨O3i¾6|›üH6^åSÐùÁÑp �œÉŸ2Çô™˜˜˜xÏ*0ï¼Æ¬}6À™lâ6zôkºÔÿ¢hS!9Õ›y¾Ço5&Î Ì Ì \° Ì À~AcS�3÷F¿¶9ȘóðK3¯€lò�ŸÍþ<�¾³³³ïyæàzcs�‚Ü ¼Ìj{Ã_6óýý—)éŒ�˜˜x+À‡Ð&Í Ì Ì Ì Ì Ì \² üY” þ|ɽIEND®B`‚ic05ARGB�?N–²ÿÿíL•"�ÿ°0 •ü€ÿ³@” žöÿÿçxA’ …÷�ÿ©c7�péƒÿä^0ŽTÔ†ÿ~4 ˆ%8³ˆÿÏC‡ZñüÌIªû‰ÿøf+…÷€ÿùŒÿ¸<…‘ÿôW&„¼‘ÿ¢8„ŠÂ�ÿëK"„ (b�ÿŒ3 … 0ò�ÿáF…Ó�ÿýv/…±�ÿËA…|�ÿþb+…O‘ÿ¶>„0þ�ÿﻥ< ‚ ä“ÿæ:‚¹”ÿk(��ŒÿïÚ·±€ÿûj2�oˆÿéЭ‡nbYVŸðî›T-�;̓ÿøêȤ}i_TI>4,*2JVN9€è€ÿùãÀ›zg]RG<2(  (&�,�ÿ ÀxcRE9/& ƒƒñ€ÿ¬]>(�ZØñ¸cA •4JO@%–#&“�@ei<™n—ž�2—<‰³Æ U—,„®ºœJ– SŠ�j”. AuL”  ,,.‘ �  33Š@L€ ‚  %33,‰[�ˆe ƒ  .332ˆ~¬µs …  �3(ˆ…³Àx € �31 ‡ b•|'‚+�3$ˆA- †2€31‰€  †"�3ˆ € †�30‰ € †�32ˆ€ †!2€3,ˆ � ‡ *233 ‡� ƒ   !+3'‡ € ,33%"  W`3…€  †3*Zˆ¢¡x„  1ˆ3*.›Å¿“)„ +‡30*!(‹­«„„ )#„3.(€Hwt8„ RjtlM2331/& †„ Dx¤©�A,$“W�¸Í¢J—w§¬’1˜>kqHÕÿ‰@T˜.T[^8MP” RZ^^Zfg�˜ ‘OZ�^Zt~©©G�D]]‚^fv�©©“�T\ƒ^bvv¡©©¦0‹S…^y“��©…‹UX]€^`eiŽ•š�©¤‰HTTUb_dlp�•“�£�©v‰&\YU`qhmrv”—•‘ލ€©¡‰*^^]_iiqu‡š™—”Ž��©aˆ\€^ _msx—¢�™–�—�©œ‰W€^ _ms…›¤�™–�—�©¨GˆR�^ js“™š™˜•Ž�Ÿ¨€©�ˆP�^c{•—˜—•‘‹––”›¨©©'‡A�^_‹•’““�Œ›••�v�š¨„‡0[€^ q•’�ŒŒ”¤©© †€v~ˆ‡\^^[q�™†©š�vF‡U^]av~§ˆ©›nˆN^Yrv�‡©žŽn4ˆJJTvŒ„©š‡c/ Œ H¨©©¥›~Y”W’uLÿ®ÿ‰@T˜.T[^8MP” RZ^^Zfg�˜ ‘OZ�^Zt~©©G�D]]‚^fv�©©“�T\ƒ^bvv¡©©¦0‹S…^y“��©…‹UX]€^`eiŽ•š�©¤‰HTTUb_dlp�•“�£�©v‰&\YU`qhmrv”—•‘ލ€©¡‰*^^]_iiqu‡š™—”Ž��©aˆ\€^ _msx—¢�™–�—�©œ‰W€^ _ms…›¤�™–�—�©¨GˆR�^ js“™š™˜•Ž�Ÿ¨€©�ˆP�^c{•—˜—•‘‹––”›¨©©'‡A�^_‹•’““�Œ›••�v�š¨„‡0[€^ q•’�ŒŒ”¤©© †€v~ˆ‡\^^[q�™†©š�vF‡U^]av~§ˆ©›nˆN^Yrv�‡©žŽn4ˆJJTvŒ„©š‡c/ Œ H¨©©¥›~Y”W’uLÿ®ic10Fú‰PNG  IHDR+ƒsRGB®ÎéDeXIfMM*‡i   ÓÝê@IDATxì½Is\I¶­‡@l“Ùܪ«÷î@Íõ&oveÈd¦©4Ô¯—ÉLödºU™lÑj}±‚N?$Ѭm騭ïãgªˆå§‰ÙÕÕÕV$� ‚@��™¤;/ûèjSVcöÑH_[c«lr7•úÇÙ:{]ÞÇ®uÄ죫½¥¿ í{ntA <¶Éyä4‚@A � ‚@A �d`8I� ‚@A � ‚@x,dà±|’9� ‚@A � ‚@+˜å1¯è$‚@A Ü)‹gò·ÿ]ÏÔÿ¥ñIã?iückë«‹ÿz‹#Ó¯Nû\üß•pþÿ^ÄÏ¥̹è4±ËE¬æû¸kôà|ëó^ÏÔëd®ä\é›þ§´æÕA›uRŸÅ·mÍÜMì¾®úž�^ÚyE‚@��l<ÎÏ5g‚@AàÞ! ò¿ý¿nmíý¹µµ/r¼{ -Ò½'½·§¡Ø‹V|)û Ë·Ú.¬sLä�3Aï}ǧ4õgÎã‹%7’Zlj_Ô_¨èL›çgZÏù;iÍ9ÿ–-é¶RLÈ)ÚÄ^U×çì»/zʦvR²Y0 MA �{‰@6îåÇ’E� ‚@x|ü—ÙlïpkëPLóèXZÄø[¬ÿHg{(Òܸý®vÐHïk;×ͽv+A#éö­u¬eܤ¾Æl£uWÀRðµÖ¥øŽרw�6Øø¤ø'm|Öü�¤u—Ã'm~|Ò]žºì¹ÂÐôkRýjSTýj÷9û®A{ô9ûè*ž[cù�khÄ A Ü?ú3ïß ³¢ ‚@AàQ  Ûà·_ͯú‹ŸˆÄ?׉�ˆŒ7­Ûæ�ü€Ù%DÖÎ fâ�íZ™Mz_53×»MœZ´ã¶$~¦;¸ò¿.k™ë: 𩥆¸æ~”z¯xÚ ØÓ ïµËq¥MÈm-w¥hiפúÕ¦è&¾kÑý ç럻}ò½´œ¿v1wôðÄA ܲp?>‡¬"� ‚À£GàWqeÝÏíÿG"ÉÏÅ‚_Ë~©-²¬½�­g€Ûì'ì’ÌÂ]…1kç=ÜÊa3Û™š×læ³a€Ïq°ÍÔùƒI¶§Èû²ž…¹Œiþ{ÕêbÿÖ?eïÑOç{¥»Î4>éý)´¹ƒšzí˜#¿N#ßK«>öªÁùÖú¾·}jŒM«g# ›†':� pÈÀýù,²’ ‚@�]æßÖåï}1ÄcäbÁ¯uÂoн•ÿÂ,Ò6ɰ�Æï´chÄõŽ“íðC±~µêßâu€c²!@�å‚\Ç0Ýå¿õÿiìkÎŽ/¼Ð]ŸôŒ{ñˆÀ:aYËõ.нTÏí}â›Ä\ƒ^7Xƒëéß ¹Z³´s7@Uü ‚ÀÏG ?ÿ3È ‚@A < ¸ò­+á{"ÕÇb‰Üúï €?Àïb’ܰ˜%¤ÛŒÒ,”˜Å¹ªÉy®mò ‹òKwi8)Mž¸�é”kÑ Öâ^Åÿ…uªmò¦sþ¤ó=Ð`OÁmdNJ­ñ2jŒ‰Ž÷Múø”O¼ö7ªp<ò½ż¶šk½r7@…4vAàç"� €Ÿ‹Ž‚@AàÉ  gà·Å¹€—ÿqµŸ =°õ/×àN€&h3ÊE¨ù}Œ\ݨµ£}¿öôñé)6ÜR5O½k°‘EíÜ™ÿäQ†]Í£”oø¤šú£ëŸüí5Zò|æ×?W�F¿”:»Ï�|b�ÖeßšÓÇÞD¨»Iý&=S‚@wˆ@6îÌ´ A � ð”ð-Þ›žóÿ<'Åb‰ÏÄŸKsÅÿÍÿ]ão²s/X$ÒëyôúO³Î¾vʧqÞ~sž¸�áržo_šçþ!Ô§\ù—ýN±?Å®åó·wl*nO}osÈ)©µÔŒ|bŒù'FÏ«¶ÂK!ïœ5Éjëvм`‰XŒ ‚ÀOD ?ü:� ‚ÀCBàšÍø»a9þ}a‹)r»{û›B/¹k¢·ÞoÙ¶Öƒï¯ôÀ¿é=\õ£7æ¿{äj9åíª8?`ÇÖÕ&«\7TÒjFšX³[Çð³mM 6ÌØcä+¶£uó•†ÜéÀË_i|Ög¼ñð_ç/>”õåûëK„Ë•êÏ?éî´üs=>q¡šsáw®¯àË®ìÖìö?€–SñéЉâxµ‰Ù·®±j;ß6ä´\^,‘ ‚À�G ?ó1� ‚ÀCE`Wo·;Ð\É>=Kl\[±öâ<ÿqÁ÷Ý™ü/b/úMu¿Š¾‹åëÿx! dYá/äöI jìu䟼Åv¯ÍN]‡®1lû¶­©ÕzÛ 6²f©ÜÀÀ‰Æ+�s ýö‰€Á{È\ÚÄTs©Z6 > ÃÓÏÒèó; ¥gÚà°ßKX»¿Àg¿Ú¯5¶­™ÓD7ØÜÊfÀŠA �ÿ�þîÊ‚@A ��Àî‚üŸˆ%žˆÂ1ž‰´6­Ø6´iÍ›­ŠÐsëÿ/ª«Ø/ò¹ ~,É{ÚsMü±=£/±]µãU÷6¾Û‹Y­sö©Ãæ|ViåXnû¶­�G¸À%Íéð"À�ô ˆ^�þf/ü ÿ�º­â½®øT³÷ò?hþLs(Q¸ §®ð�ˆ{ѯšÛ·míc;ßûµÎý[ú<Ð‚Ú @G‚@Aàû!� €ï‡m:� ‚@xl슌rÕÿDú…ˆë+�àKÙ/ÅÜ^ŠÅíÀà`¨Š5‚Žo¦'}¤¹�þWÒ\‡ó��eÈñ’ð㌽ôh´ä"‡íúj³¦‘8^õÈæüˆ[÷¶|Nß�œÉ¿Ô:x"�JjWöÛÚÐÓ ­ZÌw²ÿÔíÉ×™&_¨–}ƒzZr¿•¯­©“èÇœ*5FÎyÛÎãW›®ñçÉY<¿Õ±�» OtAàû � €ïƒkº� ‚@xT@Îþ]Ïù‹ÉqëÿÉ‚ü¿•ýFDõ­Èú�0ù9“—®ìO.,ñ@ã™j¹-^wÂ7Í/Üa.cŠøw�Ì¥ÝÇœC#äW‰×éûè)¢î<ºúr—ßv@™ò,Ýß~ð\Î)kâÊÕr[Lê\ñ¨ç�vöDüy´âRõ§z,@¯X{J´ÚTX§€Ø¶�f8NMŸs̵½_ã䪸ײ6*<±ƒ@w�@6îÓt A � ðXØym$^'Èÿ7bp¿)Æ[üyƒ?W¸—ŒÑ6†'Ùc¾æp'@{‡€bèö5Š·aÛš8¶‡Ì¥M ©¹ydÙfžÎY;^uµ©Ã¯„¿\±çžåg3€¿·¸òÿLögiÞ°l縰¹ÊÏ»x™àŒz�Û™ò4èåS–¹‘Ðv4‡9͵ç8?ÒÄjÝ”\«¤öXU—\A |#ÙøF3=� ‚ÀSA@,®Ý®+Ñ<ðR>Wþ{ûW±Æ¿ ‡¶`i\`wˆâ¼#€M6vozSè ù§�^SCŒ�ô¶c-¹øáÚÙ^'9Ûèj;çø„öÛ¨]ù×îÒÎc —üA |²ð]`MÓ ‚@ �Å3þ;zÆ|Gð<þŽØÛŽ¾ö� Ô»ÿ›†>çV¾ÂâÏ ùZ?žåçÛþöU¸ÏŒ6©Øø áhÀ‰£{Û±ªU¶d“Ž×¶…ü&bFJ­íUš\ž§ãqå¾½Úžc»‡óàÃóÿS¢9lj ¾a�Ç->jðüÿùÿ !F}¡ ð�|;€Æ…¾àB»´¯‡�:ÔT\‡Úxþ¨Ö1Öùç£õzú~­o¶~óõ€&‚@¸kø7(‚@A �™ˆãžþ0Ø{äùsžõ?Ð%}®êãêÇ¿ˆÍñ¬ÿ/¼ùÿq nçŸñG۱и;û òÄ‘ª«]s­pñÃ556eÃF‘^÷1òÎÙçx°^toSÓ¯Çu֚˘jÓ„M€çÂõ³ì3�+=ÀמªîTŸÙ©6N埽—þ8�q–p[ñ2{}›~|t^ 6=tœ¾}òÚAi{(®o±|K@ƒ!?‚@·F€§#A � ‚ÀGàßz7¿eýHŒë™ØØ1Z„“ÛýÑ_5Þ *ÆkÕ´«ÿʵçÒù£BõËM€ÞƇåÁ=ª�mßöH«lI¢É#®›{_~:ÿ%²ÞÒù4Y¥kÛƒ‰°]Žk�M¾j¹Ë5s¹ž\4¯mHóÂD> ^x¡Ü•0æ«÷Eú?2´)óQWý?êN€�ªÙÖF‡Rªi©&>´ý‘öG9Ç\cíxÕ£cqZÌñ ÞvÕž[cÔZ®ØÈ&€áˆA Ü�lܳÌA � ðèøo"�"–{GºäÏ×ôq{?/úãkë^ÊÆ-û•X�ðßþß¾þ‚ÏðF@oãÃayèj;†^7TÒj¬©·½0‡~Í­²aŸˆuµÍLù¬G¸µ5ZSGÜZæµótZ£n°ñr¦M‚+Íß–½/}(Œß)öNL_û6[{ê»M�î8×ç÷Y›´º�Ô%n2ÿ¦õôä£gÞh�‰�“M€:‰� 6D •² ‚@�=ë?ÓþÉ#ÌçÒ¯u¾oÄÔøª?nù‡ü?WîDú…šçÓù?^vÇBÛ˜Òª¿Fúñ5ïZ ÕPºåWéšÃ¾�À6‘^;F¼æì[s&õ5†íó«Wþ©blhðm ¼€gý™ƒÏ•ÿc¹àþ§Æ?dï‹ð9—ýÏuG€öZ+Úq¸Ÿ%œ¦O}¤YqN½Ï³¸>uÕwMtA lˆ@66*eA � 3z°[rOòP„“+û¼xدҼéŸÛþ�¥�Ä6Ù$@ãóœ:ä´½Í& óD×AÌCsš=ÒÄV ¥[¾×Ì©Òû5·‰ ÓD¬«m¶ê˜}×¢a°¬Á¹ê×ó#îá �Åü]ù<€Ë×'ò˜Xó"@6`Ž4ø;X/U{.瓊>hC`[wl½§êœ[§Õb#á8ôò`6âP œ1ûÄ,žc?:� n€@6nVJƒ@A ÍzPÇ€£ÚÔCÐÕHoÿàý€y€ÑˆA lŽ@66Ç*•A � -ºo|¦×ùCæy«?wð5\õÿ] ìobn×àµì\�æYtnùßV=$”Ñ€±y@Nm[kn‹¡G¶ÂKöêkç6ÑÔôBŸuRÙæÈv ÝÛÕ‡Áº†ãÚFãƒ5]l&âÏ{(ƒü»Ý¥æó�h>‡Ka|®ÚO*ü ûPwð·óh¹©xY½Þt~_DZk/ò£5šs4,Öä×ͽü A �[#� €[C—‰A � ¼=]«Ýþ5¸Ý_�oëvÿ]ùß>šÞ6Ïsÿmˆ�ñ²?^þçÁmç�¡Aì=ˆaóÚ5#Ý ô*[ée�kÑÈ:]kÚ„þp¦™u¢¯±Þ®>õøfîØäˆ#Øä¶CÛžÓk¼×x.òÿ^¤Ÿ+ÿ´sóA}?þ‹†ÞéðIws\ªæ­Û*ߺ\¼ �–½p\/c”ïë7õû¾ö™Ï¯Êˆü;îÖc؈!w¹ÆyÇü A çG¬λžcôìÖ5US·¨~ÇÐþÍü� šª~ܶñ\›"þg }Îmè.�3½@@îÖ™6Ø  K°–y'R{º÷Hû`äk`ó¦½ �ãÔêv”¶©Õl~ä‘€%1‚@“d`š$‚@A <¸ò¯gü÷Eþ�ô�ÿ±X _/Ç8Ãâe~âŒË—ýý¢8/lÒ�Í%ùmÀÌ(BÃâУA®×טm•^«%n±Ýkò޹¶jç`•SRk¦lÏ'�ͨ¶cSšcSofKBŒ�86÷æ?�“öß Àgw¦z®ø)/s|/†ÿI¤Ÿ;>éóæ1^ 8û0?¬­ÐOŸk÷º°�¿·û•èÄûÙhpäGA`ˆ@6†°$‚@Aàq!ÀmÿúÂø}ÃcÃçú€¯ô{!&õ\슫ý/ĶÞHóu|ýß 1L64x}¹óœÚ€©y0Ç6Ú>ºçSúZž8RóöGšXÏ_sÞÄ›y#›:çÈOÙä¦=ܻڎY“«âs‘殌}}~|#ïlàŠ>²«Ø¾>£w"þï…í{´jv¥)ºÔ#¼0اCŸÛýt¨•âš^{’×UI~oSã˜ç-ûqg@6 KtAà:Ù¸ŽG¼ ‚@�žù×½âí{äE_ˆ¥q›ÿižõ#öÔžõ³jŠ¡OT{¨ØŒ â¿jP£9×H#?5¨Ej~Êo…‹Z×86òG1ãH8¾s؈٥mûèU¶ó½v4Ç€ÍZ›¯GXíˆÌ³9ü p&½§q¨ñL¹¿û§êøüvÛÖ1.t'_ÈÇÈ~BK¥—šØ&âyëjko/ßsœ³_5¿ä˜ˆW-w)îç9ËDŒ ‚@˜#� €ü&� ‚@xðÂ?ý£¿/bؾæO êµØ�‹¿[úUöki=%О)çÖÿc±D8€0º`�ÖØÄúÓs¬·ñ× •\«©>6Bĺ·G>1K�瘙£s#ŸqÆ”í~ÖµÎ=§´�Í\ÛUcëó~¾!àH!|Þ×À#@³!ÀÝW\ù×çxª«ÿŸ£–9#!î¥Õ¼ãÖ57²é1uŒU9÷§†QɾûõºŸ9íý¹  Â;� 0G ùMA � ðàmÿbM¼ì�Ûú}€ž Øú]ãoÜ ¡äÅr"ïû 1Eô.0À!õh�êckî$ñwžšUCékùêÛF#ôA¬çÞzßu�-Ú)}wßêcG¯²�G##ßqúÁt­‰ûضñEä[\6Ÿ—¯üCþÏä]h6xLØ!ÿçŠ}Òx/[ÊmÚ²ä~%Ž%[Up‹€û�¦ú8ÔTiëW�Ô bÔ÷s¨ňG‚@Oþ=�� ‚@�¾êO¬ÏÏŒ?;jwˆuý¡Sÿ»Æ/²!†�4b3ݶ!ŒüÁÛ¢ÀºÚÄ<4ï+Û1ôª¡ô2_mæØ¯z•Ýçð{q_ÇÍùäˆ[¯²Éyp æ˜ÁGjÞ±yfþ“9 ËÂÞQ-äWŸäÿB}/õ´¡Zbú¯} à©>¿OÚ-x§Z6�ø¨ú–Ô޵ГãX×þ£˜óžC�áBgí¶e6¡.‚@ À¿ç‘ ‚@Aà‘# ¾gúGŸÛÁynœ»xqoúçùàq€Æ°d/™$¿Ø>ºÚĘG̺ÚV›åZF61„~–){”'6b�îáÜÈ'G¼ÖÔXǯ\ìËüÊ&6%w±&6K†ì¾hDŸ‰¾`ëTú£óGÅßiàý¡>mq3Á¥~/ÜâJï€X/}ÙßCè_aµ=u,NÇ„d3Ïñ¾ÇŠ� ‚@A Œ˜A � +¼áÏ,jtް0þ(€È׳굎ÙibÔÛ®Zá�⮫zS»¯Ã¿+á\F,sUœÏÁ.öm£× ǤÍçe-Óë!Ì;x‡Ã3éç"ÿ|%๾ò�»Ž;ã¥€Ú 8×Îô�ÍVŒ8·–Âé÷RãÕv]�U›¼elW¨¨BÃa8Û{˜`É;ŒDtO�l<åO?ç‚@O ½®‘Ã;#ưG•5öºAjFšØ&Ce˺‘íXÕ½½‰ïØã&ÂÚWÕÖ|µkoÇÁhÉReWß6z•°ÛÔÛÖ±¶Eö÷Ts¤cñRGî¸à¥ºúÏãÏÿ,–ÿYdŸ��Ϫù¤¯ħM]"­¿—p, AF¶cÖ†ïuö¶×îxëÍ×6C;èHAà)"� €§ø©çœƒ@AàI"ÀÌÈŒ `Dø0%e?ˆ�óǶ¿J»n•V«oÞ /£5ÄGlp*¾jΪ\ßìÌR™W}ÛÌñ V…53ø¼lÛ_ÔñÎ>òC‡¯¼Ð}Üò¿­Mþþ;VüƒÈþÕ½W\ï‰ÔEsµãNÅ9ô] KtߛڬÅs ±‘]cÔT¹b# wTHb� ð”ÈÀSú´s®A � ðdà‡0šE |0¨ XUÌ©>¶{Ùîµó*]Ö:f]s#›B½eÊ&_s®¯š40¯ºÎ÷1² PQ‰‚À“B OêãÎÉ� ‚ÀSF€ËÁ•@šÝ¡#òOýªá¹US�ßëZc[e­Ö>±?²[Á¢f�íù®ûÍšÌ6kÇ­�ë}Ç{ N0V‹}æcWññÑ£Qj·ÕsOãP¤ÿJš¯�äð�EôŸéó>P=¿l\É8óÿ¬<¿ ~Sa)›Ö÷µÕŸ²½à ¦-½Á„öz­ÔR| t$� ðäÈÀ“ûÈsÂA � ðTàùï‘À„`V"~×6Co:`^ ê«v|•Ö”6‡ĵ¶«®¶ëk ©¹ydü“ºžŽbãÙ×£ž×÷£Ê9Øjð¢žaFK¾ÚÕw-±‘(¿­ž{‹Ï�gþ÷eiœ2ôà{m´+ÿš©ß� Íù¬øG ~XªÅ˶SÍrk¿U~Ía[ê|ÇМb…ɶ5=jæô>±HAàI � €'ñ1ç$ƒ@A Ì/õŠ`?°&´YÖ÷-›ô`лêÞVºå]_µsÖäl�t�õöÈ'6%ë{2ÃÚßøóyôbFK½m´…5z«¶kô9nCð5oG}¨q¡žmÈ~¿¨½Rí™jyI ï8P?©å¯†[ÞµfÙ§‰à�ì–ü –9&úhb:µk1¹Kñ1—�A �§†@6žÚ'žó A �'�€ßxî“ý?EŒÄ޶õ?z&&4%ú¢æë U?¨ï5ŽMÙΣ‘ê÷1ç­�·�F¦â}®ßð½+k´¿N×ø¶öqœˆ3êfq¤²[Ç\ï~ÖóóŸŠíè³Ü1+f z,ŽùN&Wý/T÷Iã£Þ ð§4w ð÷!åw),s]ÏZƒ�Œæ«µ†‰zÛ>ubH­ŸGæ1ÛÑA �'�@6žÄÇœ“ A �ÇŽÀÿ1›íˆÑíêö¹ÝÿEãXCWvwÅ|võl÷k±¦?DðÞj`?&*Ùڗͦ@cZ›jÉMëû:>�>†�T]íš«¶kj ÛRóŽ�ôC¬ó]3¥7í;ª«Ç!�ΕɺÆ9Ö± ô×´?´>ïÖƒ>ŒÅuhF�âhZ×ör—BœC®ó®Ž|_ÛûîQã¶­YâµÛ6|øÕÆÏ‹A!‚À“C Oî#Ï � ‚À#Ew òßÞò.âÏ׿Ó?ö‡bJ¯•ûCþobIoĆ^hË>ÐàñÆ�`I£A~4\;Ê9¦©×æöþ¨Î5ÖÔØ^˜­ç:{”w̉øsosfêz´i�mj÷Ç·�gÈ{Õ ¿× ?ú°8g‚z6fè² @+jå¸CÙ¤f8q"Èñ¼¶uvÍ3§BT!ãPî¹´u§ öV¾°Á�A <²ð>äœbA <~þ/‘øW"óz­;ßùÎÞÑ'bCÏDüÑ/ûUlé�×/„ íXSТ:œ«±ÛØ|£y5>²éÃF8F/} æˆôñyôö?éÛ÷ÅêFy÷ib|6ÌG#îåÏ mòoíýŽð �ô«®=¢r·FSŠLÙóìf?}ؾz¯±›Ú¬áÔë&€}÷C7ñ#3Ù0"ÑA ±:˜[ý)[e×êªoÛš–‘]c®COÅkÍÏ´§Ö縵,kÅÖg¹ÄßBߣrŒ…pË? yù€æp¸:J¹§]ÓÔ®«¹6a�C/Ÿ²Kk¬·©éë=mh¼П›çº/:‚@x´dàÑ~´9± ‚@xJˆä툹è&€/wˆÙüªñ‡â—æ­ÿ{l ›½ÐË;L­aGØè› •¯¬'�ô=³&o{¤k¬·ñ«¸W�Ù®¬¯Öù}Ü}ªîkzßµµ¿chÇ­û˜™­ûRÇ NÌŸ!ºßPhYCN5í%€š×·¡ÔBŽÖß[ê18&Bld·d÷ÃëdΈø“÷`ª{×ã�� ÙxtiN(� ž"b3Þx&›çüßhpåòÿŸ¥¹ýÒÃt ’ȳß-0¥=aQ¿làzç7Õ‹u,ûxžãÖÄmW]m×´Býè}ÇWéÛÌ¡Œ‘¹½&·©LÛq0†Å"¶Éyë…õ¯ÄßvW;ãE€äø£PsÚ{dúð”cÓ’ñ3Å0³¯¥®“¸×Š�Ï%_‡ãµ_¾"°A—A Ø–Q¯:od3ç&ƒÏšM4ýDø¹ýÞ¿§>íÎÙÏø´¿µõ™ÛE$ÚhÃ6Z/T¸µ£ã&âúÑi�úP_koãÓw—ãµ§mt$� ðèÈÀ£ûHsBA � ðTàu˜¬1“�ù@üˆ£=FŒÈµÎ©üsêý©:ÇÑUj¼æ§¶·û˜ýª{©Ç˜GÖÿ4n®ìý>î¼5ùÞ&¶éZêÜ:¯Æ�Ñ&šÏ»’ÿÅ=ñLmä_ßñYúT¿#—ìè;"÷EôOuÌ3´æœéwëôTCéSÅΤ”ÔSç˜ø瀬ò©Y5ZƒE�kýò2@C‚ÀcB �éÓ̹� ‚À“G’oSÁ€¯ä¿·W±¤QŽþ5Ž�ÔØ”=¯¼^[çÚ¶¦�í…¹Iùÿ$Òß~½Äü/eë¿•R—>*\uÚ«ê9m‹{86ò�³ö\tͯõ±ƒ@�l<ø�0'‚@A`Žÿ¨›ÁX›á˜ìWM#znµ}¼>Vkû>RkÜg*æú6q1wd;†vÏ3NŽÕröG¶cSÚ=�ÇÇîÅÇèãý<×Mõ _ŸµI?ñÎçq‘] ßþ¹˜»+–¿¯M€#é÷"þ îà׋÷\êø\ý§ü.¥?­©þ¿�¹=œ³^œæ*÷¨Úók,vAàQ � €Gñ1æ$‚@Aà©#p,DÎÚ%Z؋َµ‰?ìÛºÆ{fÔûš¶dMÎ�b5G¾ŠsÖäl£‘ª«ÝçªßÛ#ß±ÊîÜŸ\ãFld;Ök÷ ޏïϳÓ?Ý—Š‘Mß:jÿïHûì©U¼n\,ÖÉ]û"þúñX›ªŽwG´+ÿšv©Ø¹Øÿçy‹¶¿ sRêÒ'‹&õ”úçˆ/–Þ`r]�a¯ž3Ôz `ëJ2L&‚@x€dà~hYrA �U@úz!æÂ±¢Qœ^µ¶÷É�buNo/¦,ûV¿ö²}Ý÷²oíõÚïue­Sv?Ǿ™¢�QçSSóÎUí>£ù®£¦ÇÓþ(ÇgÊÜîn€¶ 0w ;êÁË"�4ž‰ñ’OnO,òÂ@Xð™lÞÀß�õ�Ìÿ^ÂÒŽ7’Q¾Æl3×k®Ú=k�cMó.Œl\ƒ%N�l<Ð.ËA � Ð# Û¶'8• ‘¯~µi\}l¤Ææ‘뱚·=š7ʹΚÛ ³¿Æ\ã|ÍÕØÈ6tüU¶ó½¦·c¶Ñîå¾ë¬ÉYjld3¿®ëãø|¾äº[¤½`QGŠ_ŸCùçg œJ·_ Õ_Èàýl |”ör× ‡C6©�WŽºÏT/çëqˆá{ô¾k¯Gv¿e,/\B#�Œ@6ð‡—¥� ‚@耙Uæb†“«ÃŒhsn¤9^ïcø–Mj]ÜÞ^s®êÞùĪ/Žm©Œpd;6¥éãܨ§c«t]Oo»·ñªšžÕŸ°¹¬ éoWþ¥¯äÓ–w\é÷ˆ·þÃôÛ•™|#Àùï5~ä:ôWÂ:«pŠ–š#nÛ¾m4b�]ëm�� ÙxcN"� ž:úîöFb`,"hKòiC²�îm…š8·‰fuHÕýÜyÅ—ŸÎ;RýÞ¦f*æÜ*]sÕ6&ÄŽ�ôqÇj›ºuš¹®±�ƒøHúùžK¼Ï9æxõG¶~ZXš_‹¹#�Ãï�È?/úã=‡Šèؼ €—îȦÄmen$^¾‹™O ý­R{×~î_�ÕÛÛs\O¬·‰éÅ ³YhPäG�l<Ð.ËA � Ð# Æ2«äŸ<Ìf4œ³6ÂïÅó‰»nJ÷s=Çõίò�³v�^;SMØ]•žíÑÓ1tµûÜȧ7sççÞ íOi“üȦï¨71‹kF²OíÁï�Ç¢Oû�âýª™1ÈKÜrîÝü§OÉ0mÚ�ãzîhNíWk§³ï¸ë«�m ªMÌ›ÕVŒ_2?зúQ¾Oq¤Gk Îñjãôœi×W� A ºÆzÛuÄçG~Íõ¶Ù=|™íA½mjV u>¾m4â>¶Ñ£q‹{Ù·voü‘Í<Ïvõ™WãS6Øtdy?<-4¯í0-êú6æ®Å�õ}9ö”LÍqýh.§ä›ªís4ìîM¼�¹tAàA � €ñ1e‘A � ¾FÀä¿f¸z»�FxÌzÌh¬©©¶'�´ëЈuµûšV¸â‡ëkÉT_×ôsìOi�s¶ée6‡®ƒÚêÛf‚�¸nS»¯³�FÜwî}ù¹éqú:|º�lÇÀ¥ü™³¶…ß®þËe½žŽ¾ é!¸«¾›¬ÍçB­íªY›×Ó¯s“þ© A Ü+²p¯>Ž,&� ‚ÀfL�•%“1{1®ÌfSÛ+r=~o»¦j×ôzª†¸km[·¸f•öùöšfqè~øU»ÞkÀŸ²™Gn4Ç9´ó؈ûͽùOǵ®q¼?Ž}ס{Û1tOüñMþÙÐqü í‘Í= Ê[Kjë¹~]]Í‚«6§�xÏ£BdÛÇu/ûó™ù‚@x@dà}XYjA <]„ß„½ýß‹�qëÿbœê»ÚÅföEâ–ß×®Âå êdlKµCoRßÏ­sj¯j»¦Æ°k/ÛÖÎ{͑C�lr°·ucA€+¤~3@÷s®úÕ&ßûŽ¡ÝÛâz4âlja÷>užãü*Ýã„ÏF}ØjI\£o­è�¥žÊªÉ®s��m½I�úúXÖÄú^Ä"A �…@6ÔÇ•Å� ‚ÀF`÷o[[{‡úÇ{O¤lOd¬ùb({ÿmkë÷[[mm½ÝßÚz­üså�4ö•_nTü`6f7¶«®µ¶]�ßÛÕwý*½i}_‡ï¡ó»fãO ˆ,b‡ È>C¤·ilއï¹^Ó*ß9Mkó{Ÿx�á‹°¦Mûyý>þĨ¥3õïËÜbíåÕžý<×ß´®ïQý¾Gí_ëªÍê¬kÎvÛ“»’8‚@xdà!|JYcA Í>ï8súœûÔǬ™C¾Î�ªw�óø£Qó>Žcö£ƒ@�l<˜�* A �§ŒÀGqÚzýÃ}ÑSùE,ä­0á–ÿ·Š�ˆ´>[l°IÀà�}Õ­¼à&¸Â�,½]}×Lé¾vŸš: ê&ýÖ&úü�S7ìSWÙ[o㻯Ì&ÂpùN€~�‹’k=‰QW{÷¾ç¹_­½É|÷ÍqÎÇèµóžK¾ä´¶¶ `¿”¶ø4|(Ç­§òëâž�žê]kÜϱÑ×ø\ìûŽ×¹®!fÛLjA <ø÷0‚@A Üofº�WŒC{[ÏÄ>ô¾¿­7Ò¿Iÿ®ñ‡rí½Ú8Ð&À¡Hë�bzgà—wÈn{éÇ"õÝÇ['}Mï3¿_·Éºu¿À:<Q7èÓ³7û�}‹‰?=…éFÌÓs«fÍîO¼žW�×9›Øµoµ=·§�‘«£æKÜoþo›Š“²¸ ß§Q󮳦f”Å7íçÞ½î�ã~}]õ}>h×;V}Ûunì ‚ÀƒA æ£ÊBƒ@Aà)# Ê¿ÙzÉ{À+i®þCüÿ¦ñ¯þ]‘Ö�¥VlG,¦Ý`6£y_‰s½¦�b½Ên…‹µW?gä×¹¶Ýþç™ð[CÒë¨ÄßhêW‰7„Ûò ÿ>NÅ`Uæ#ÔÛùĦd4—Zúõ¹Úƒéõ<úõÏ:§Ÿ§ã¹�S.G{9_7ýÕCjïQl^uÆ~žkªv/ÇêqC{m®�›çÖZbžSûÅA Ük²p¯?ž,.� ‚ÀÐ]Ñv€"/Å<|ÀßÄDþ“|Hc$Ö°�y—ñO³›QÖ9kj¦lÏ'_kG÷ñu¾çºg¯MÌÑÞà�HÔ¬ȾñCãó>úûØ`zaþMçŽæô±êW»_#9ÄÚ¶}t?´^ßÐR¡–¸zJ8eæT¹IÌóúŽ£G°öõ£æRç\oÛï5ó"A �‰@6äÇ–E� ‚ÀCÀß¿ÞNb #ù‘2blwqüÛô5[ãø#›X�ßÅ:ï¢Ç}\ÓMÎKë÷¯ÚcU NÙs¨3·‰ÕùØUj?â>N­Yeû\¼^÷sœ¹Ø5oû¦ÇZµŽä‚@ß�l|wˆs€ ‚@w†€‰Ik¸Šy¬Ê}ëjÌ|nÓç[æÖãÕó«v_3•«uOž-šW7 lWrÜCèCÕßWb½Ï¼U1÷qÿZëX_Ó÷tÝ*íµÑß¶u�Ùö1FÇ^uœä‚@?�lüô� A � °9b_‘ ïÉBèÍøê ‹%�r^ÏÔœÍÏvóJ¯ÓÇÞ|æÓ«œÂ¨Æe�>>“ƒÖ׸Å(^cÔõ>=ûXõ}LÃ~_Óç]·JÓÃkr¿ª{Ûõ«z&‚@¸—dà^~,YTA �‡�€™˜Ù“Ö]�ý|ŒÚ³��jjý�´ïÓZ¾á¼ùH=hãÓòG][“s¼¯ëý©^®#ï^ØHÍá×|Ÿ#oq�k𱫦ß1|K‹Ï$W£ƒ@÷�lÜ÷O(ë A �'�C0ªôþ2w—LÄlÈÍ{ßñuÚkš\ôºkòô¯cMùOO�Ÿ¾�nkÖáß¿)Íô©�–Su®ÚÌùÄ]ïš>Vã}®‡¶ö¢¶Šk©©65žç5â÷ÃsôÙ´H^j A � î! òßV&¶ÑH /DÌ>z=Ï~ûO÷ýöN?¾ƒ×nÍ ªý#W4uÜ©ø�\ÛÇ2®¥•;^cuŽãÔU{•?š_c£¹Ä�þóèúŸý<ûSú«Žõ«_%A Ü#rÀ=ú0²” ‚@F 'Ÿ”ØÁ�‘,¤˜]×ß“dÒ{í®/ç+ï®zÐØç:¥¿:ø=x­÷`)›,aôüÿèW ÿX«_mŽ9ò‰×¾Ô ›Æj­ç¶‹µ�ã®ësöѶ™c¿Ær'€ÑŒAà^#� €{ýñdqA � ðèÉÿ¦˜ÅXo:ï!ÖqŽ>Ï^ß·óñúîú¼kÖTíÑ•_]ì…o\§ÐjY»hm¿æ°‘š«>v_3й¦ÎÅÈ[jÞ1¯Ã¾k¯Ú¶kñ]ŸM£‚À½E ÷ö£É‚@Aà)"0 ÿŒÙÎÖwÿŸj|Öx¯ñ§XÇ?”|&ûXc_öŽÆ¶žïCïHo;¦üäcKö¢"l†æ]Ǭ¯%oáLõYç0äGpX3úBƒ“=× æsA“[%Ì?[ æSÏ îãÊœjFrÓ¸{Œæõ±êÛžÒî‹vMµ‰Õ!ÂßÎÐsµÔnå8iböWÙÔº»ïe¿Ö9æyöG5Än*îË<÷&æxµ©Áw~$� poÈÀ½ýh²° ‚@KÂ)½Ð&À©XÆ�¿„ äÿH6ÿ–Cø5öE|Ù@a4†‚‰óªÿJÈ­ŠOå¿j¤€�ß÷Û4N]R÷BCÖÑ2›xÎhÄǦ›]–~€ãÔM÷ëµÊ–ëîR�sÛ¸{X×>¶�[§©§¦ÖÙ¯±Eß 3!û½í©Î㯳é1šW{;ïXï×®©1Öൌ4µ#ñÚ�«~o·5±‰—o0\ÑA Ü7²pß>‘¬'� ž,ÝÕ“‹¦EHϵðYÿp¿Ëø¢/ ve_©àBú™ô‘Ʊrèf«FæÖ^–Ò�š·í øØÖÄÖ µUÜ«ÆFý<ÏõöÑ‹«ÑKvIOê=ðk-õl¸ù*®�Úp~j~í…½i�kk}µÝ·�U»úžÓk×ôõöû¼7=è#ÛG¯I{ªsŽÙ'?eS[s·ñGsúÇð:zM­ÅçbŸy^±Þîë=/:� pïÈÀ½ûH²  ‚@K‚±$ú›‹ÛŸEÂ>*ø—äŸ[ü/;±=‘ý­ñ\ö¥|wOuí‹Êa)ŒUâ´æ¯×Mõ]ÕÃsú÷äà£bu@R-€dq y9qO™Kq í«ÿèþ1Opï‘v Ú}ë}Ç­ÝÏ>zs¾ïgJ»_�ïþu¶q•ö­ÿLóÇ…fxšãÔô1üQ­ãSsˆ»oíi{”ŸŠßT|̾¾Æ«í:bumŽG� î Ù¸7E‚@Aà&MëÁÿ ØÏó;v¼™m›šõAã•îø¨Øgå.eܸò¨qYY vr—~;�N¨'×ë®lc×}ú 5^mêð=LN=ßñêSà €Z`"k.Ì©â�~æ1èã|Õ %£¾µ¨Ï×\o�jûØ”ïx¯} Çí£‰õc‘o¿à <°ý«bM™[:V}ìQÜóVå¨!_ûy©ùyäëã9~Síµ1¯·í{m­w¸)Ä©AàG!� €…tŽ‚@A`3L(¨^ÚzëßʼnOùú™å¶ÿ3�*â�Üp¦ È?w°IÀc\Ènä„Í�®2Š9ï9ê3)Ô¬Ê׉>Ö¨¾öémz0‡¸{ !¤HíGÜWúÉ/Hk‹õuÌEjO¾ €>Ô¹VæÒÅÉOI_?ª«ÇqÞ1ëïcΡ�ibëÆG€[N·µïCÚ'?eS».×÷¯¾í¾¾Åýí÷ºöèsök�j×<}ÈmÒÏó¢ƒ@?�lüP¸s° ‚@c&žÿ§B1Ó¥üs‘ÒÏ|Wþ¥¹àƒÈé� û¤Ô/¹ä¯ €=ùĵg0ߨŒ»úr—âœ5·Ãïµó#Mm•ÚÏq×8çþä{Û14¤Ôs¼.ê ÂÚH?dž<›®“Ù„ZK?—Ìu¯Qm�ѧúS6uj<C×¹Ž÷±Þ¯óœ³^•£fÕðñ‹F†¥Ú>¤cø›ØôºIÝè8ýz\ãø”öq§òŽ×ºj;‚@¸÷dàÞDY`A óñÝ·Úä"A �{ƒ@6îÍG‘…� ‚@h˜\ÜT·É&mº  Œ„˜ þMó,ÌsŸ^SSk=§jæ#}]ï�gƒàD@IDATÃÇl£¯cî}ùéúþXTøxÖ}Ìqt?¨EïmûUWÛó¦´kÉWqý(Vkk�ã}Ì>šß kv•êh»G‹˜küû¥°ÅSbécþ˜jÜ1æ|‹ÝÏ·�®k·Ôu8fíµŒjˆ9N}õ},b¶©‰� îÙ¸WG‚@A`ˆ@%Ã1Žv»6š‚Júña$ý˜Š÷uöÍlFÚ½ÐSRO‚žÇëûSçXo�|ú¸'yû}ŒâãVÝÛ½?Ÿùe®ûÔº©˜çŽ´ç׹ޡûá}|�o"O�mtÝÀö Wë 2‚—XÍ÷¶çïké9Š÷=¨CêüydsÎsª�=:f_ñ¼vçì{}[ù&C‚À}B ÷éÓÈZ‚@A Ì0Á°&j{J/±ƒÈñ\LÄlÄöm4�=Ï6‹ V5¹u„y–>6ê[cÌóqÝcJ{yǵÕïmûè›Øõ8ž×Çܳj¯ÉµýÜÞw}í1ªq¾ïëx%ÿ¶Möí/4·ÿûí�²¾ÆêGµÎ®óúc¸íQk¼×97ÕÓùoÑôžê¿j�ßrÌÌ A |Ùø&ø29� ‚À�#`BáÆ&U;wM›¸é÷åËÛ(¨›&~«ôµ¦r¨5›±Åúy#Ÿùz }ÌÇp¼?sj $µ†^µ_­÷:ˆÙ®ºÚ®©±){TKl$ôðp~•ﺊãÄF¶cÖ•äû÷Ǻ¿úïZå 'šVˆáÅ®1lçl÷yæô½\KζçCjßyäzÇj-vß§Ö�lŽ3}­×Cü¦Çè{ÅA |²ð]`MÓ ‚@·B Õ¸ýš‡m,kLÔ6%þýJa.£Áˆ[c#ŽÍ½õ?=o¹àEfº·õTŒx•Z_ã¶Gkô:jMo»¦×Ô96e�òÄFƒUú¹›øS5£ãã÷ÄÚ¿3&ÿè›á/jëǦèò÷Ž´Å5ÄêGcÛšúMìÚ·ïé\Õµg�Û&�Ô5Ï#7ûI÷bæ·ö»ÙÑS‚@¸Ù¸h™‚@Aà;#`RQ †mk/aé‹},oц‰˜� !s›nx®µ„ÏÁzMžØH¨¯â¹Žyžëœ·¦Îö*]ûõk$ç˜ëª¦o•êÛ¶¦Û~o»Ïº¼ë¬ÝÇšxµWù>ֺ׹/º�ü¯žÿ‡ôë.€ö;µ¨m6s$þÈæÞ߇q ~…ß¶u­›²k-5H�a#£cÏ3㟞çl�ïØ”f®ÇMæMõK<� ðCÈÀ�9 A � °“‘‘6ÑpŽf޵Æg‹öb"�¤ñ-"j34ìä6cÑr9—ҧ׎¹¾jrU|Ž�|÷«55Ö¿ö¯¶ç«¶ýZkÛÇùÎõºö#·I¾ÖùXU»‡{Û÷‡�¸ïÜ›þ¹®ž¼Gíéyî\sŽE� îÙ¸C‚@Aà&U�l&µ¸G»MÛ] s$¬±a%› •5ÕºO¯©í…š^\çÜȯ½™OM�yŽ{;‡_m|ϵ�ž’¾/u}Ì>ºÚ®Ý$F­Å}zMÞ±‘=5*î^E_ñ»!ÿjÃo1´ˆÿ9C6ãBãR~«]¨«Ø§�ÅÇ”¦Î¹U¶ûY{޵ã}Ç©³Ôõ9Ök××Úѱ˜7Š�bý1â� ~ Ùø)°ç A � ¾ À×…-<ô&ƒr×Ù†Ìùí·ûsõƒM±HÜRÃßô±•~EH£wÏ”œCW¡qýÈ'×÷dN�U›ÒÇð‘©cͳ_ÿt½3#ß±ª«Í\ü©˜s«ô¨ÇªúMr|æ ÕR~©�û éK´DÿBWüÏdÿ)û�ìÒå–͆€þkÒCNp›WÏ:oÝÏųõ[s~Ôù^»Öz*ßÇã� î-Ù¸·M‚@��ÄŸS‡t0ÌßíWí:ôònØ™ˆÚÿÈ7–'Í$6ÐäÞ°Mm­·¯p‹÷š^µ!¶N<×u½OÜ1ëQmŸÕÔ^ΣW­³ÏUßvÕÕvïëmü:˜S¥æz›º>fŸÏÒv¯ý¹/4WûÛ~M9ÓïÆ™êÑ\ùGÖ`à/Õ½—þ$}J�´þ[ÊÔG°,X›Öõózß}¬ÉW»¯ÿVÿ{öþÖµe~AàÆdàÆ�eBA �oC ÿÚ¢15F›Ì¥¾‰ˆY³EÔf òï7··»(¢æV‡ï F¾'�ÕWºåk�cUcWi [ègqŸÞïãä³®±UvŸÃ葉©æúxõ±í�t��ìzljF£æª=ªuŒÏ²Úþ¼[hnççÊ?„þ³¦|F3ô;Ä•~4ä¿Ý ÿ£üS�zKBêÇÒû}®MXü¨¹uvÍ×¶û|ï».:� ð¤ÈÀ“þøsòA � ð£èÈ?$A{ô¾ã#½¬å%€ÿ= ‘¶FEÖ® ñ::B¸$�Sqà�±´s-P~ôñ‘O¹{9ßëÒ²™ÎãLÙ}®M\ñÃk¨%}Ìþ*]s«lrSƒ5Lå6�û÷Àõõ³—ÍlpUÿ“~W øm@öõû„Í­ÿmÓ`ƒ€_3ZõR?†>×ûµv{j~�KMï÷óîÒÿ‘ǺËu§WO�l<ñ_€œ~A ü8&È¿ˆÅªA}Í×ùÄ;qÛZ|À’\ÃÚ#BèÇhàüH+½ìG¾Ö“³´…È¡¦—Q®ÆÜsJ×~®!Ví)ßsGëšÊõµöGºÆVÙäÖ ÖsÛ£ÏÙÇ[ü´;d·;”ãnõg¼;ñ—ÏmÿÜ €f“àTì¿ÞÐCnÑ£\�mb»Ÿk­Ÿ:Žó£úus<7:� ð(ÈÀ£üXsRA � pÏ€˜ Uco:ÚäZ/×nýIãÙþö2@Š }~~@$îÚø&…›jMisX¨ç8†Fœ›{Ó?7­ë;Œæõ±u¾{r#éãÕ·½J×\oÛ×1jê ^ýÛØþüs}ÏþCð¹ÒÿNã/‘ÿ??i#@qnù'�>U ›¼€V#éawM�WÛù)=ªu̺Ÿ;ïëâ� ž$Ùx’{N:� î–ÛŽ¯NCälæ+ÿ4…©Aø_å'æ¸55£Á¼7»rO´cÔV!VÅs‰Õ\íå>SÚsk/Ãs¦|Ç«õécÕ·=¥éM®æmלk¦ôMjG=üùZSƒ½ðyë»@ú£r<ïÿ§^ðO žÿ?W¬}K€¦påÿB¿_õ–×ÃMlS©s×Ù5ß÷¿m®ï?� ðèÈÀ£ÿˆs‚A � pÏ€¬ hÛ-PbΡáí ¤Æ«½Å;DΖäñÕŠEà–ÃDmÛ5U;¯²¯-u5oŸZËTŒoüªËï@ûåÛ;ÿ òÿN¿GlüÇ;éînãClòÜU�–rMÜךä”}mâ8§ëZ¦EAàÇ!� €‡uŽ‚@O�ÅóÿÄ$¢Ú}®ÖŒêˆYxã?ßßÎíÙÜÎý^“!pÿ!½/ƶ«�€ghŶÑK­ú]Õmû€0=lÕ4òˆMŒÍkçˆa#ÎͽùÏQ¬æ¿Õö:éSí‘?#^ÅçãØ”ïøH×öÈwü¦LS󜯚 ¡U£Öb¤‡wPò B�í|øYl?�lü<ìsä ‚@xš@<ˆíªç™Õ?¿ªWàRWp¹�›·µÿ¥é‡ŠíËn_(òw¢ô÷•ßWî@äÍæ±™j—4‡¢´c&üä{›ZHi/S1÷ïë×ùÌõ\7ÏùusGù³½J×öÈw|¤Á—ø”öòýð<â«Hÿ"×Þ�í>2‘›Â¤,1� 6åê?DÄ‚}Óá¹U·"úÜÀ[Ú?‰˜sŸ+ÿÉKéç"xG²�¤�úRz¦±§±$ý4D¼8çzÂOœ�XC"©«â\�ݵÍZëqzŸãÕX­­¥ÏWßö*]sØ#ßñÛh“õ:×14ñêÛ†èëw¤ ÙËGb»—ÒSR!¤¦÷=ï¦qÏûÑzj�?z9^Aà‡!� €u‚@A !éØdŒàÍkuzvûRãLíen"sÛ�>½ðL„ü³Æ;ùÏ?‘æN¾žG¸ýÿÂ�™cB8ò½à¼ý¶ý ^…ÔXÈsŒ›õ}ßQlÓž}¯Ñ¼¾¦úØöGºÆúZû›jð£¶×žOÜ9×9††ô{@þm£É+ÖÈÿBó;á�ç[ Vç�åGg´ Ÿ+9à‹� 5ÙxÔoN.� ~&‹+ÿ£%@:¦†ëkÞ±‘nu‹ }ƒ[»€/ØÚש;•Ã]¤?³! üùx_ù? ¼òÁ˜gÛÚ¤’œÉ¾cÕ'�ŒXÔ(6¯ÿäØÌ±vUï;^õ&5®_µ®Q᪫M_üëmç×iÈùªòµ¦ú¶­+ég ç|,¥WIoï{îMãž÷35kF€"‚@x”dàQ~¬9© ‚@øÙtäbQG]^ï}jkÌvíÁ·\èÁÿ³gº@„îê@O1®üÐ?öJ¿�nWþE !ÿ;Òjv¤±¼€æ°ˆ£dm‚H©ä¿2&òäª8Fý¾U¼NúLÙ79F]�×Çí�t�­²ÉÝt€szíX�c{˜ÜãÛF³€®u¶®Rá­ñ‘=U{“øTíèx7‰}¯¾7YCjƒ@?�lüô� A �dž@GþûÓƒˆÔA¾ú¶k»×5­Kÿ<Ï/Îßnû¿�qªÄG½@7´—ý}ÄÐàï=Ý À•ÿg"êgšÇWÂ}µÈ¥yKOü]ã<šX/>F¯>'3šKͪܺüº¹Ì·ôÇùŽU½©MݪN›ä©síÈv ]ɵ½Àñj½ÜUr8Wõ¹¯9ΖHAàQ!� €Gõqæd‚@Aà#©0±°]5K·o�xÞÜüÔw·_jœêûÛÏEúe¶‹ðÛ~l‘»‡²ug_ÿùç…€/¤yoœpyp/¢×°¡©y¬Wý{Ÿþ·ÖÁqG²*7ªß$ÖkÊ7ô¼‰íÚM48º®ÚŽ¡G÷6~%üØ&ý蚧ׄŒ`®±o±}ÈÚñè ‚@¸c²pÇ€¦]A Š�æP·‰ôuÕǶ_uo�|bý«Ã÷pÜ~¯EÚ¯‘ÿ…Ï~^ü±?cˆès¥ÿÂ/ý—Æ{½?‚Gâ·»TÏ!ïZnÚó¦õw¹ÞŸyì»<�ô A |…@6¾‚$� ‚@ߌ€ùë*¾k²ßëñœ��ݽÃÃCÈÿöÑы˽½“íÝÝç[ÛÛÏg�øzõŸÛúgÑ´HÝÑÅÙÙ m¼8½¸x1»¼<Ñ8ÔÆAÛèϸ.Â)‚8)ÔRƒædzÛ›J­˜W[°ôÈ®±µÍ›2»¾®ú¶«^e“ëóøàä\ÕÄ=\gߚσaíØBsÛ?WþOEì?3¤ÿ³ÿ'ä_ã£âÜ@þTÇcí~„pzˆõÜ»þsUîzåjï®ú¬>J²A �{Ž@6îù”å� ‚ÀƒBÀ¼™EÛéžôÛïk}ò3½`÷êàà`çðð™Èÿóíýý—"þ¯õ€—"ÿ¯TèÇøé¡ïùë6t÷ÀùÁÁ³³ÓÓggçç϶5vvwgçç{ÛÚF¿^jÌ6ºÚÌq¬ÆG1°©ñÞwŽøª± û=ùÇçàÊ?5 úõ†È‹ bÿv€ô÷¼xÖ‰a[Ww×yÃm}×ýÓ/� poÈÀ½ù(²� ‚@xDTμΞ"ÿ_æÎt¥W/ÿ;Ô-ÿÇÛ{{/tÛÿ›Ùîî/zÀ/ÚxÛÝ”æÒ¢‚W3ÍÛ½ØÝ=ºÐ;ÎDüwö÷ÏÎηwvövÊ€êø&ñĪ|9À—¨cužç[7è sü^œ·žÊ÷ñM|zöÒÇ𫺷G>±:zâoéŸÊu›í|H}{áŸþ;‘ÿ÷Ÿæš�´;¤y<›Mqbj¯Q¬æ±G5£X?ï¦>=¿Gß›®#õA �†@6~Ô9PA f¿êjslü~ŒâàUëìïêSgß¶ëLüñm‹È·;¤!öí*¿®ú¿×À_5´ ÀUÞú®~¾òß^¸X–ÔON5‚@wˆ@6îÌ´ A �§‰À―;W j¼·Í±kœ¹_ùzáßîÕîî�nù¦M€WÜþ¿³óVþmüMs&ÿM§™jfzàö¥¾.PwlŸŸžnk#@÷þkû {ƒ¡îÅYÓ¦õÂ�ØFC>G¤¿�3oJ`{îIMõ«=šßç{4Ç1jGÒÇ«�m�í|­ǧlòÎU�íáÇ6ñ·-}%âÏK¹ÊÿIö‘ÿw"þ½ÛÚú‡6>ª†o `Š5_Ø|ž·Žï}úÿÈcýˆóÉ1‚@·F`ò�…[wÌÄ ‚@Oøkpb|4WèwONNv.//wtU^/ò?ØEkl_íï·yºJ»ÕìÅ3ü§h=ÿ¯ñ\ïx.Âÿ\|ý…nùç€/´1ðBS^(¶òßtml]íìli`K�l�kè.€-½K`k¦kÄz!à|áú6€¶ôÂÖW´0‹²Öq¿æ"Öý¦@ë½È�læÒß¹êWÛ5Öäz©ëôzjMÍ×8vŸ«¾mô*»Ï¹Þ¦�m]m³p´I~ã ÿr(×lþ-®þkp‹<ï¯ €6´ À;>j#@ÿµÃ{9õðØë¤ÖLÙîQóŽY;gíxÕS¹©x�;eßv.óêõ¿mïQ¯Ä‚@wŠÀÊ?îôHi‚@Aà‘ P.˜ûŒà—&û½�ñß—<{öl_ó£Ù—º ÿ|gg¦«û[hÈyÓ²uµ²¾;;>þU·ýÿ*ÿâ¯ñL�è­Á1VËl¶¥ãlé.€-ݰuqp ·ÃA!ÅU4twÁÖ•6´9Ñ4öü}ðÚÀV ;0NígÌvjŽÄ1l¹é`^­­¾í‘æ8Hµë¤¯Yå“s~d÷9×T ¡Çibý¾Æ¥>ŸàWúí[\ùç…<óÿ��Ù<À ¹Êïå©ÓRF1'û\ï»n�ö¼^×y«rÔ9_çôñ©ÏY—wÝ&ú.{mr¼Ô� ¾ �l||™‚@O �ŽøWŽ9Eþ[üùóç»züþ@ßâw¬çî�4šÖÕücîcÝÊ¿¯gü·Nu3¾^ôQŸiÂLÏìoírƒþîîöåþþ/Ú x«ñJëx.Ü�µ6v6a ºSàËê{.ÊØˆ= 9mÌé¤âíIpiÅgªk'!Íq&þL­âüˆüSW }µ]O =œ[å»®×ÌAˆ÷B_Ë(ïºæ«íœcèj×¼sSzDü©÷kq¿Æ¹H=Ïñóœ?ƒO®ÙºêÏ×û½“ÿ~a·ü±A0Øð)°ü^úÜ*¿æl[÷}«ïëQŽXÍOÙun?§ÏݵϚêºîºú� ¾�l|3„i‚@O�BþÍ#«6gm\Yxà/mnù?>>>€øk#à¹.èCàO´ðB±]Õ?ÒnÉŸAÄwµ «þ3nÑWŽM�mÿ—�üoo¿3owˆip'Á.~­@òu·ÿÏ´`òß6¸3@1¨ãÕ‚J¢}R~<Àì¦×ý±�¯Äžše¿bSá­9æW_ncUŽ‘Gð‘^Ï£óŸÎáy^ÍW»ÏOùŽ£WÙÎ�ô:òO¾'ý5&"Ïþö‘ýS�Ï"û§ºêß^ú'Ÿ¯ûû¸|`»`bÙŠ)Û§ë|õ§ì¾¶Ö9×k×X“ßÄ^UçcÔ>ŽÝVÓ«ŽÛöɼ ‚ÀC ? ê(� æ“èÞ^~ål7­+ÿº�¿½/â¬q"ÒÎUü—"ÿ¯UûRWüy±_{&_·èóZ¾-|]ùowèÑMß>Qís‘ý�v€ô�nÍgÀkQÉX`)<@_Èþ·þ/6x/Àå)ÔQƒãªŽÏþ7ò/›L1ÜyNºr…z~Oþ�SªÏ>¡‚�=Òä-®·¿©®óF61ÇG¶c«4çΠfdó&@ÕØ‹ nýgËÂÿ‰gûõ .511�þ»N6©¡ÇT�ãÖõxŽõºÖÜÔv¯›ÎÛ´žþul:/uA �{ƒ@6îÍG‘…� ‚ÀAÀœ”åÚ®Ú'cæÓ‹“·˜�¹Öšùˆ�‡àÚŸÒ̯9¹Íw|¤©©ÂüM…~–j³�^e;¿J¯"þÌã3bx`à_ŠÜóWþ!ýôV?¾æïƒÞðÏ•ÿÏšéo[;Ü) _÷7z@GZ+>eöþº8yϱöœª�³®óVٵǔ]{º†Ø(îïìl¿Ö×ö�j#àT/î;ãmþŠ�iS@ÄöI/ýÓ.ÁÚøEÿð¾Ò-ÿÏwô ¿v öu°m®Êë­ÿ[|À’t/ˆ÷]² ­a~u-Ò¿ôeóÀ¡®!ˆFè†òù¢˜ºà@õ|ß 4ôƒÛ¸:ä.É.çé%Ïîö|—d^SçMÙšòÙwmÍa÷BݦbÌ­™×ÛøÎÛŸÒœ³sØScAöùš?¡ß¾î�«ýøí*¾®îóüÿ_ºòÿŽ+ÿ|åoùçVÚN ‡ïÅKZ•ëçà×ú)ÛóœïµóU�j£nÊv®ÏWßÇÅœ[¥GóˆMÅWõJ.� ðSàßìHA �'�@Gú+WlüòÿêÕ«C=Ët~~~¤M€#mêêÿ‘6uå~ç\"ï3í̶÷÷g§Òz¹žžßž]]^>?¿ºz{z~þ‹ØÙ+‘ÿ“K^âwuµ§7íose¾^yçå|\u÷û»øp|»¿nYØÚáöþÅh¶ˆþ.dÿãÇåÀ¾^×6 ÿÚ ` ’ý‘ X=ªì¨�¹¨qmÕÞ †¸¾ê·=ÒÄzqß>n´vr5^ÏǶµkíÃÄm£í£GCäÝq®ôCø!ô{bØ"ü�ÿ÷&ÿòÛóþê«’kK–{Mê’°§¤ÏUÿ¦öºcÔ~}mÍMÙÌ©¹‘ïX_G|�0g4o[×+ù ‚ÀOE ?þ<� î懽ÞñßßÛÛ;Ö ûNDüÛÀÖF_Çw²£¯éÓ­ò³]m\éê?Ïìë{mˆØÏDäŸiãൾÖïµæ½Ò#ÏÙÐûÚ ˜o,®þsßÀ­÷íyý¯nH¸%b\ñ‡üCöuu¿iÙ\ùÇÞ㊿®þ7â/ò¿_îØï6 ÿÞ¨š•™)™ìÚ7SªWÿ‰v¯‰Õ!wÒw®êÞÆ¿©x½ÖÌ·�®Ã¹Ãî1°�fÀÔm÷¾H¾>­ù‹û¤y¡·úŸ*Þ´l¾ò¯mðùþš?î@XÂM¥žB�[{ÝÖö<ëÚß¶s½vÞÚù›øýæ›S½ë<×8VýØA �{‰@6îåÇ’E� ‚À�B`âêåŸÛ"ÿ{"í‡�]ñ©9¯ÐZã+�—Ü ¿}uÄ¿mèkõfº+@oò§×‘®è¿P�ºà¹îXÞ �8ôòÖÿö€6î”ü«¿oùçŠ#ü"ù»{Ö~ÿ…Þׯ�°ÀWðGƒÉ%þŽÁ¤Lhe./E×6›f]€ƒíX~d«t¹0²‰Y˜a=ˆuµ½nÇì[çí�lãá €‘V¬½äoAø?Éÿ,ÂÑç…Üî�fÀq¿ñŸv±ž{Ó?½Ü¾¢�oÚÏ}VÕ;gí9Szª®Æ±WùîÝ×9^õTMí_뱯å´ÙwÍï‹ã� ~Ùø¨ç˜A � ðÓóMÖf-n¿½ÏmÿÒÏ5^iî[ýmÿ­ñFÏôï\ÐPWëõUz3^¨§—÷ñJÿoÛÉ?�}¬¯Û{&û˜¡[ÿ�ô þ¾ˆ9Üwþ²½rå¿ÝàÇ(øFñ#íÊÿ‚øïqÅ_Ïû3Øàª#ý"þè6t=yŸ¡ã›è÷š?&|eö‰˜ù !¼f¥&úŽW¿‚¾ÎæÔ ®µÝ‚å‡ëJhÒ¬ëvQÃ﵎�H?9Ç�˜LØí‘}} íŠ?IJÿAWûùº¿åN€ö@åÐç:ŽÃ’/kî}ý“üHúø*¿æªí¾ŽõÚytŸ³_s›Ú}>BÏÚ·oðã[æÞà0) A |?²ðý°Mç ‚@¸§4¦>½6óIk6öÏûŸhîKÈ¿b¿Éþ]mx‹¿.û«ÂÎOîùG7Æ êªÿ�ní?ñ×#õWl ˆ”ïiß°¼âÏsÿíùæÒó…—þm‹Rò¼ÿî‚øóÜÿþb#€«ý:Ñ­}¤ßöâˆ?„½ßp¼’X(Âù›äb{«äŸ8¾AŸÒ*YÖŒlÇÐUV!ɱ{q¬×Ô[7Ì©³]5XÕA®ú"óíimÍ´Ûû?ê-ÿï=´Юøk޶m–ßÀ†_û7’©%÷µ®«qbUª¿‰]çVÛs­kÎvÍmb3¯ÖÙïcfîh¾ã5WíMz§&� ðCÈÀ…; A �{ˆÀˆkV.*&?ãÍÿÜp¢õ·; ÿ"ò—þ�È¿4£ÑööŸÛù•×-ý;"ý»bzQÀÕ®ªÇÿ›nÌ7áGWû.0ã¿�w´+þ¼ñ_¼ý¿Ý é‡ìKï¡5ôìÃò€ÿŸ½oing²ERo¿®ï³¾êˆ¯#*¢µé‰ZLô®WóæÿozÓÝ3_•m½(Í9�‚AIöõC²Q¸™H$@ð�rñ$@Ð’é’ €|†D*ÂM6$rKIeÖÅ9u1R64m ¨ŽÒ&�‰6·-©n—ŒÇ�*ó|i�¥%ú-úšDÄŸ›ýÍù‰?Îúßaã¿[d|êïhG¢¿BÿÜ$0H”ƒ^¶íôÚì:[ÛReë/�~JÒ%eOIùÄ2åÛfS[ÖS·å¸�ê­LùÄ6–wõ›òw›#à8G�€Žâ2ø GÀp^ �šŸ§—â™´…øg�¾û òÎ? ÿмùÿ)©��—ŽÙ|¥Àðy@•_Kn½`=îü�ÀÁ€ð]C ÈJ«k¦_Rä_’çB²Ë²N�çK‰.¥eZ)�íâ¬þÔ§­‡û–?ËJò�ËáȘ�ªß%Sc—MçÙ&S¤ŸÁÙ©“Ô3À¥ý ÿS�ÿ;ÿ›¿ðù¿ÿîtþ_=lÒÊÄí5±½Mê/¶Ùr¬Ç}°~—Mu’qqÙú=V·}±­²µKW�¤ìV².N)[ìãeGÀpÞ¼ù%ð8Ž€#à¼$ éùo¿ýVÜÞÞæ£Ñ¨øý÷ß±YŽIðD^,‹"Çòüì®ßϦشÄ>›æ9gå³Ê[ñ�ªú�åñ_A†¯1m <†ã•a ?úè"7ù5;ø×'Ñ$xÉ“né›ã™«˜Q&™Ç95Ëúe£ŒsÓ^ý$¤ÚóƒX‰mYŽûT™õÔS,JDÕÈ~<&ú0ÑnS\V]êx²µI�‡õ-™Ÿðª¬ŸyKgÉ>û¡$á‡ÎYÿ`ƒäLþ_˜ý¿A¾Cæ¦ü@ø, ÜìÐ4˜CŠË²§dÊW}[ÿØ·³õVW²µIúRgýÕåÇþu Úž’R}¤úLÙžr|úœÕÇúþb¢�]þ²U¯—-±k?ÖûgK¼Ã_"(€]û±Yþü[¶Z}YãS~ Îç96óYà�zþ4 Ÿî«a½¿ÏG”b²,ò­}IÚé«ú¸�-óôXf’?û±LI}Ñ–ê[íØ‡Ú‰dÇ2uì”�})i|*§¤elÒÛ¤Æ�Õ”×ðáýe-ƒO‰�BP  0€Ì6M€ä¤ÿr Ùp º’4œXª-íq:ÄûØrJ—M2>&˪‹¥­{ª®>Ùþ©‰}ÄýX›ê$Ÿzoç8ŽÀ‹#à€‡Øà8Ž€#ðZDÄ?ð¾_ý•ïÚ“ô�™AúÇ(�á»Éؘ�/îãs}\ÇŸá]ý¬â§ü�ù ?´É1£½¬ªOØÑÿ�€‹®@0QƒUg…¶6ÀÚÅÿµÎý1Ç!0"Ý’"ÿ’"ê–\K籤S2©ÌvìC‰vÙÈŽÔo,Õ¾&Ṙ.%í*Ë7%Ù�v¥”ÞÆÒ¬�ºÊVÊNÉñXitÎðW(/ d´c  9§úÜB Ö+Îücùÿ-3ƒÈÜô�íØ”‰‡³).Û:«Ó/å{ˆ-öQ™R:�%=–»êäK%k{¬®>vIöçØßWu)›ê\:Ž€#pÔxà¨/�ÎpGàPRäm³ÙlÆ¥ÿ Œ°“ÿ9ü˜/(¸Aðs}$þܵŸ:\6›ç–ýÓDÿ²@xe`ÌÝüAþ xdܵ?`0@ä_ùz/í'ÂlÉ7uKúY¶Ym86é”J²±L]ýÉ®2‰-“µÇ:Yý™¨“éJ²=pÓ^mSn!±NÉê²Q¦˜m²§tÚìØâ2I:ÆË™~®˜sz�Ôac_ ý@çñÂk´¡¼ªI?gÿIþ¹€�îòÏC+Ñݦ¸lëvéq;–­mWy—_|LùÆÒú¥ê¬M:Û´éq]Ü?ÛÙ¶mõ±Oª�|biûtÝp�£AÀGs)| Ž€#à8Ï€€x^#ÏÎÎò>R=ëb2ÏMü$¹*€‹ê-ü7‚ïéóS~�]�úI…h3A€€³ÿc,ÿ@|—žÍúy¢A€8@IÈ)Û²½fÖŸ,U䟺Xkªƒ 3Þ�™Q'1fb[ê ¿­ã°ýÂ-$Ú˜$7¥‡ÿ驆eÙ¤Û2Çò•VÇXà ’vØIüIâ™ù>?Iý¢î·™õ·e´á'Ù. ¸ uàÇCíJìê1)öLÙúƺÊmÒŽ±Í‡ö¸Ží¬]eJ%µ±å¸�êž*mññÝ ñ�§öííGÀx1<ðbÐzÇŽ€#à8¯…@ ïxV\ŸˆþÜ®�?£üùHþ„þ�̃)†D¹ÑÀÊF ö<Ó0ûÏ¥ÿC¬ èCò“~á“} Àw£×ò˜VŒ8“x+Çä_ö¸Í!e2Tú±±$1¤]íÙŽ~”$üôUûÇØVIº$í�|¬Mu:v\¶ã¤—açF~øÞB˜½'ù¿å§ü¸¤Ÿdž}ÖíBå 9ع‚€³ý ðS€ì'lˆ²†CW¦¸,í6Ó§¸ícÊÖwŸnë5ÙÚ¤ü(å“Òãº]eÛçctö÷›jo}RõnsGàÍðÀ›_€#à8ŽÀ3! ~GÙèØ÷/ìj?†�Kÿ?A~Eæ'ü~ù§ -B“ŒOð,óuèfüñ‘õ5?PÀ£É/Q.P.AÒ(3ýðäOi2º:ºÄ³dÁ'ñù—d�|¬„y+±ŽÉJùÓ³¡Ø/.ׄxk¶ŸýÐÎHp8–ŽA™Ê0o�É–©+Åã£�6Ù¥KªžãIeúÑâÎ|¾ÇOâÎÏø…÷ù§ØÙÿv³»Xè@_¤fªåphJ(|M ¼ó_˦¼i¶õoh·eyX Oœ­×¾>lýcuGíÚ¤ü(ck‹õCÊô‰�¡×µ•5.ÖÛ¶ÖÞÖÖ펀#à¼9xóKàpGÀxFÄ)Ùeà†ËåR€fðà ü/¨ÿŽò¯`û\€Gy<¿“øS‡d™Aê¬�dp`Ã�¹b ¶ÝÓ76D3ÖiâÈlV€R䟒>›½—¶�t¸mðª¥ì”L¶lmª“TI>ˆs3Ö“U‘(«N}j|*SÒÆ¤þb©:öi“-K§Œ3ÛÐÆñìÊ8‡5>K.ß¿Ã*�ÿÛ�ä?Y®»‚]RrÜáð Ôv® HéÁ?úG~‘ù b8näimÏ¡«�XÚÃÆu*Ó§M�ëReÚlb_¶?ÖÉ–’j·IÚñw¥ÍOþ.GÀx3<ðfÐû�GÀpA¼;ÿý÷ßó›››îùùyŽ%ýÝáp˜O§Ó²û�ªÊþùþÏ Kó³›ñ/_WÙí¯çCÞÁv‡ÝûñÙ¾küïªàgü° Hû9Èâ³÷c,íiÿæ]~’þÍ € ™ŒI=ë5ø¸NöW–û8ëåCb2ƒÈ$ÎÊ´[½ñU› 3:Å^Ä£Î!RQhÓ1±B‡{'(3ˆBƒ6ó!E¹„ÎàÀ!ã�[HôU²º®�¤|TÞz•ƒ+@x/0óüXFfúK·ûEОAv™� ¿$Q }XA|W«%ö\¯Wø´äzUa¢e¬,¡Ä¦c“š!µ”kó–P›-cK�¾±l³õOÕÕ.–Vl‹ËÖ'¥Ë_u¶Lm6ã#þQ[5‰Ë²ó7Æ:OŽ€#à-8ÚKãsGÀùïþýï/Aú{LØ�¿Òß?ê—eÙC}o²?Ççú–ƒA§�Mû½^6,ŠÎv|¶/Ãçû.¦³Ù·^U}ÆW.³ª:‚pö@~»\â¿„?ƒÍþ5Ù;å+ó•ƒ$GA™&áß§«^2ƆväGƒ'q¥�Çɱ�_Rh¤t¶ñ ã PHú9ó/6 µ§Õã1…¾è�Hbn’t‘d}kÜÌ+å²¼×ë6"ýlgõ@ú»ÝAƒ¹‡•$|R²*ñEI|Ž‚A—Þz±X®§Óª‚\ÍfÕj>¯º³ßû¯:s¾!°7iØ)GÕí“¶­|e³e«³že¥”nýUK¶�mqÙúìÒã:–™ØŸú †ÿÈ÷©n䫲KGÀpŽý%ò:Ž€#𱩷ü-Ãþàúå{ñ�@ü¹‘ß�€1܆ ³ãðѾ ¹Ì@²:H?|0× úX–Ùb¹<Ã;_°"à+®�ÏAþ‡$aл$­ T ÔÖ�ZÑ縥S*“ø3éÌ(™Iº�T],áÚqÕÑÆÙý%°'¦AB_ÔeÎø— ¸=¼/¹‚ÞC[\£f\ €È¿ÆÈãPgj“›3Üøð_[cc¿mz†sèôz�u¿ßYC® +fè”l§ö’[6ܘñÏ×y^âfì“üy¾Áܼ¸ÿ¦ ý‹êîn�%-‹êövQÝÜ,øê@—+8èûÄ®™b¹±ÞŸ†Ê�•ìW}³mª¬>Ûê¬=îK}ÆR~±Ô±¬ÿ>]}¨-˱MuVÊ/öµö]ºí‹¿±¸Ÿ­z/8Ž€#p xஂ�ÁpG “3LüHÌÞ“ôŸ#ŸQ"$ž¹¹ƒج„�ïêw@¼B™�€uYŽ1‹|…¥Õ—xMàí& `#�Ñvò'×mf­Ãì5—x³�&ÿâ!VRer”:· é†é—$¹Neâeí,3ÑÆeòÄ�„²Üd�fê ô1»=@îÏf ÆÄ`Û{¬ ¨ûÑk\@F¥ãÑ®D[œÂj£˜X,EØ)¥³�ʸ·:!€s``5vªÑ¨SA.©#«ûŽsè‡÷�+ô·B` jžñnîVU ò?[ÞÞÎV779êÃÐ ©ÖXÀ>ê®7ÚaÿêTóÞxÅmlY§¦þÚêb{ì¯úXÒ/¶±Û¬ß.]ujÏ2“úLÉ�Çý¿ò‰ÛÝ{$4ü®âc&¼Üä8ŽÀq à€ã¸> GÀp>< ^–ÓIç?&‹—XÕ_œá9›ö‘Ĺ¿BùShÇ�øQAÒLìe˜Ù?‡>Aà äÿ,à  ‡á½n�Wê$²§Ð�DN"^Òè²A`f’ò ©×6•å#‰ê¦mL¶Žø+0yžâµ ›y¬átÚ©�‰3m\ À¶¡L²}@aY«è³/‰ÅYÉ6,‹è[iÏ�$®á €É>ö•XM&� yÉÌ}&꾬Tÿá¸9›˜ùçÊ”œÜÄ û=¼†ÒëÞÞÞuÜZ Àî°Bë¦K¬ØÃ&vÏ$¹)Ýÿ«!Ý[6šì±”Ÿì¶luÖ+íÓm_òMÉ”íÐcÐOí¥Ûr›�öTb[µOé²¥dª?·9Ž€#p´Øÿ¿í }`Ž€#à8ï�ÀØïOq‹[b³¿ïýs¹ÿ.�×ðÿ ùå/x"g�€D4Ìþ³›šLªÜÁoûK²Iþù @ ÈV û$ý$ÿèK’}�ZÙ§djʘe¶ÚŽBØPä×J‚bË¡£„M>¬§Þ¬�æŒÿw˜=¿e™&Ùg€@dŸ3ÿÜÀÚØO<Ó/ò?´lÎ�GÈÞXg’~Ú´¯%�§$ÿfÆ¿æìÿÙY§:?ï,‘ÈLò•.ìZ°Ù'”óµ”ûM”è{��ö°" ÷=ׯ`y –þ/»\ €¶ì+Jì6Nvmu»|ÔÆöûÛ:úÇå¸[/=–jcû“�µ=EWß¶?Ù‘jGÙ–·úÁoJm¶ì^pGàXˆÿ_z¬ãôq9Ž€#à| D~ âT‚(…–PsÖÿ Êü„ßwÈplfLC# @=ÉfØ}3»½Š²�øc·õ|Kè¡- i[>eØÉMl&é©–Ä‹™ Ø,{›dª“NI µ`Šw ý7 Ðbæœ_h`€Á&êø*C§ÄlC»ÆÂzõOòogëŶڤH>ë¥KÊÆˆüS*±žç¾Ù€°€ååegy…7I ãc³½lAg;ÿ‡¾0ó�É…{§‰,Sp¸1Ìb³à{&p•O]ÉvÛf£OÊOþm2ngûHÕµÕË.ÉãIOÉ”McT�íÃê¬oó‘_\¯6»¤ÚJ¶ùÚzêžGÀ89<pr—Ìì8ŽÀ»G@(ûå—_Â+Xò?ù+@ê?�Ô~…üHür`”$ûJ�Nz…É™}á…iþõFÖmÕ.6øô�v2ŸŒ´d¿MAà¨'OÓddË)�`È.]²YPïÀåÿ üòÿ'H4^¹m5óÏýØ ^ qPÂÄäÃq(X@[J§�ã·IíÕfk_à €‹‹N…ÀâúÚ6 :Ûm%|½6®@áýË»·V¶FXÀãv\,¸½A¯¤TØ›b‰¥ÿó.6»Ìƒ¯ pxºl±±¥TÕIÒG9¶±¼«®­^vJ&�£M¶ùÈ?®·vÖ1ÑfíqY>”‡$õeû‘.É~ÚôCŽá>Ž€#à8ŠËàƒpGàc"RD²ÓíüñG·sv–wþü“²‹w¯»�»»îÿëtû»s�Ö ·KÂKø_¡ÑhÕìŸHì9{¬wöIâIò�g÷È|jeˆ ɪw‘H3ã¨'ìu=ˆSÀ‹˜a¦›ä›ï¼sïyÖsÆ=øÑ×dΔ[b¾¹pd¹÷öˆ?>Øò’«Bæ«È$þ$ýCÔéËaöŸ×ˆ× ‰ÿ2s L’ÒYÞ•9F�Ûö%�ý–ýQ›6ìÂßYblKŒ›Ÿ•ä¦aã?¾ÀÌ`V3�ìášsjÚáX üs| \õze·,‹¼,ùIJn^†ÖønC ³…E6JA#›Ê’²KÚ~b}W™ím}ÜŸêR2e³íãzkŸ=Õ‡l‡Hõ¯ã©�ì”VW½KGÀpN œÔåòÁ:Ž€#pÚÔ„ßžDÞù·+;ãq¤¿ìœŸ÷X¦ÏϧáÝëž¶‡ÝÞþè/_°\üS±Z]`éø›ø ÃÿÃy� D¶^JN2)BiöÞõ˜9ò|i#k ±‘þúýÞ¿/ù>üDÉ? t›T€}¦ô[Îø#ß’øƒHÏX`€Ç}ÌõËÂa�ØÖfv`Ë$úǵ€œ×r!Éqƒä/@ø8—lhƒÈGèyXhtZ©#쪓ÜWÊN›õSÙÚ¤·Iõkeì«~å£ú]vùZiÛYû.ݶ‰u•%wõãuŽ€#àœ8‰ËäƒtGàtH�þ{žúÛoy§¶x~>à=�Ðfš‡ø&üïB×Ëåß^ÿ<ïv¿¢î¯\àj@R‹È+$ÿüî¼H—¢?†pž.ºG.pEüÉ\DØÃ× ˆíØÍ�Iö¨ð.>I½Í ÈÆ~Ô—t[þ1Ò<åj\k®8xJ²¬Ëê¶/Úm¶uÔm]Ðy®õý2Ǥà8ƒ$.œý¯wû³ÿ8âÅûŒø½bâp•¬.›¤NQå6)?IùÙ¾cÝ–éßV–=–¶M\§²õÙ¥³Î&Ûžö¸,í»²ü(™â~T–Üxù¿Ž€#àœ(8Ñ çÃvGàˆÈ?¹"“$öðÿÒÅçÖzýÕjTõûÌðŸ�èOÐî ËÖ'œ/7Ÿúû„UWxgúŸPã]r4Y…ÿ‡‘\jöŸ3»Íë8ÐG X²”{€ïu’|,/AKB3ÿxI½ƒ�ç;H®ˆ>%û°eÙhoË3,™›ÿ�DóU|ân³Çе`Û8ícVq=ËÊ©¾T—’a@àküZÇ^Y€œƒð‡ÏþaÀ :P�h£sˆ�ùÊežV*¥N×ÚÚÚÈnûµ:ëÕ�|e³ÒÖIW?±T}Ü^~){[]쫲õ§í1iWÛ]u�9†û:Ž€#ð&xàM`÷ƒ:Ž€#ðþØAþųÎ?þ‘w./{ë²åUu¢u‰vá=�ÕKLM_‚ÔŸaÇô ¼?~†À6Ic`Pá2Íú‡÷Ùë@˜©Øgx@IDAT%áý€Éžõ–N^HöÀ†äŸ;Þsùÿ¯ˆä‹ø³½µ©?ÊTžƒøÏ˜1€cpf�Kí”9”<ïbW¬KÕË~¨ ¯Ž™›†OBÎ�רôo�÷ý×8—5ê׬q.Ϻ›ât6ÉêÛ§xïÓnW/�‘‚JmvÇÖÑß¶µuÒÛ¤Ž¥>¬ ¼x¾G’ìiŧq—¯mÛ¦³?õ÷­º”´¾ê;–¶Ý.=®;¤LŸÇ&�OílÙêªwé8ŽÀI!à€“º\>XGÀpŽ�ù× ÅYÞè½?Ï×Ã;ÿ#´;‡ý ò äw�ϯXðõ}�ùf«û˜�íc濇 @„=Hô›LBkÊ<ÐGK– J`8+�ÁUÂÒ¾Àúƒ³’øÙ2u&+¥‡¥ò Ì$ÿ\e2WðxÌOHb\’ì‚z[Yu©zÚ8–°W`œœñŸ‚øß�ôßàÝ2ä.lÌ `—þV¡l^—à^7ŧÒvt{ê±¾«�êvÇÖÑ_ýK·’º’ÚµIú©nŸûÙrÜ–e&ú´åà`êU¦ŒûŽm©zÛÞuGÀpŽí¥ñ�9Ž€#pzDä_'@ægÙŸÊYg:ÍA { ¦#¼ó¿Køk�ÿoÐAþ†2÷¢ËAÚø�tLù¯sr¬ÈµõÍŒ?¶ ä�,€yÚÒqm6+H€Iþñþ?pì`�…*!·µ·ýJë«z.“g ,™‡d°�+  �z,jK±´Ø—-óŠÛ¨KöÑØêóû p>Iÿ€;Èh2êñ‰>,À­ Ü^)q¸miW][ko 0FÛg¬ï+³›ØÇÚT'i›lgÛÆzªü}•8;&«ÓÇÖÇuêÃ¥#à8'‡€Nî’ù€GÀ8jÂo¹ õì÷ßÏf³Y¶\.Cþ�Õ ¬³ÂÚ|Èõ:Ã{ÿýâ¢":ß`F:¬@ûk‰7w޿ýQ`™=6€D%V# -Vvtð©Çö{è`¯‡ ½XF&�Ry3Àû2í¤Îªß'm{êôæDÒŸw‹¢ÈñŒõh4X-‹õb±É_ã7ÑÍ‹jµ\V°¯Öó9å&Cï,¶9øtþ.¿¸ŽeÙÚd ²”¯l:'ÉØnË)Ÿ6í»RÜ/}iSN•ióä8ŽÀI"à€“¼l>hGÀp^�ˆðóÀ /üå—_Ê‹‹‹fú±—_w>3¨ªj€Yýƒy·›ã}ó Kü3~ñ/[Bñá +íÜàï+\˜?� ^ ìÀÖá;þœõôÊ47u\ú6©@K PÇφfÞ¹±g9ÈmQç #À2uÄÖbvÆáÊöÜRPèØ*?Yâ7€×WºY‰)ÿ~¿×�eU­ø^^3À/iP¬æóE5�.Ö³Ù²º»[,¡woo¹bcÍÀÀ“�}ßОÎ.=®‹ËìQ6É”Mu’÷#¹¿t¶�ôØŸåCl¶½ÚXÉz¥6;ëãc©�KGÀpNœäeóA;Ž€#ð:Dä_ÜP¥�ÀÍ–ƒáp8w™`ÉòA€‰t®à{ÓøŸM¢Ú1Àw÷1šaiõFnüw�2¿p"ˆí×;=Î�¾ÎY¾ß£ð8?ålÙ‡R¸Œ¼”v–_³ý"þ’²o.ýf úÜ� B¯¾¹1ßör±èôæóFbælV¬áÏd™tIÕ³ü”lÛS‰„sæo ÇÆ‚–ý÷ò~¿Ê&“p ø½äY¯W¬f³ùêîn¶¼½�£ŒZž-ðÃB¤Z!ðÄd!Qá¸u¡Mgµ­K•ë.‚�o,wùÄ}ªmª�lôióKÙÕŽr_[ÕKª�íÃuGÀpNœÜ%ó;Ž€#ð:€è‰›µJðÌa–ÿ3�}¾Ã ýM•±}:Ȉ '7ƒ$yùÉ@öñ�µÎ9|.°ôûåsl„'î>27ýóôˆ—Í©¦¶>Æ×–­ÞôÃ[Â�wš@€Õ0~AG™³ü$úa–ÿs¹x'mõZÀ`6ëôëÌ:²/®¯ @gYIº•ÔwåC_à1l¿:æ³Hþ¶HôñûÁûþaHü}p§A¬(óá°‡Yÿéòæ¦ù›]ÃõѶõÝ7JÐÐŽ 9Ô?ö‹�gËÒÛ¤ík—�êèou•­�º-Ó‡©Í¾©ý¹u<á˜ú�”Ÿë×[;Ž€#ðªxàUáöƒ9Ž€#p�³G#U™²Ñ§Ó)ßù sÙ>Iÿ'<‚Îwú¹¤Ÿ3ùaesh=Èà‚׃ßùŸÀw Ÿ1ž®ùIÀ¤¯FÏ‘ìE‹ûÛUû†2o f~}+P½|ëŽà¦KîÀeÿ°‡OòÕ¯ °*€�î@ò¯™¾P²lÛ2"éÃ,ò/){›LõOÛO'ÜàŒ†u±_6\cM 1Í�g�€@{ô ¼*“ žø «*¾ €÷høÓaÚ5ì¸>4HüÃ>”Ñé›ò“MR}ZÕÅÒú¤tù«Ï¸¬6)»Úì’lwHÞÕ‡×9Ž€#p2xàd.•Ôp�×A€ÜĉºÊÒ›2ˆ‰¾ÿ?�ß%š’ø�ÎÏøñ½þ>>1�&÷Ýrö3|“¶™ïûsÆÏ>æ9û ~˜öW€áÁIÅ6 ÍÚã²õmÓ·Úë:ŠèS2 Ì²|b‰0@rObfþ¡kæ¿Àòþ)–þsu@?22nÈwÿùJ@øta=HÖ1í’¬SNþ”Mþê;îŸögJÍ ü6Àÿ³° «ª6ø«ð Â9‚$yøú±¨ª%6\®nnfu@`×0ìiìóS½N•å6½­ÎúÇý©.–òkë3¶«¬~ÔžåØ¦:ÛF~»|m»”®>RunsGàdðÀÉ\*¨#à8/�À†©'�#î(>Êx à ´˜ íE=ûOâÿ l?@ô !„�¡õ~þ YcF™3þ%ž²ñ¾ë5¥Ü]>�]ȱn_}ëáxMñiAÖ)³]¿Z2€/>t°1äF¢—÷k—ÿÞ÷×Ì?mÊ%ȳ"]ŠÁ¥¤š­³¶Xß°¾­X<µç�ŸB¾Æì>wÄàÌ?~;+Ÿs?€9VäØ8P+žzt�Zª=ëÚ’­“.É6ÒÛ¤í7ö±íSºüÕ˱-®;¤>öQ¿)iû—îÒp�“CÀ'wÉ|ÀŽ€#༠ $1'd9•9€`Ç—ËJÄø Wp®àìÿß�Eæûü›DÒC�‡A&Al|°Z 8û«µÌžøïÄMcê6Û.c?[ëÁW׌2 }Gâ5çì>góS‰„Ÿ÷B˜ùÇŠ’Îþ/(ૺOR²ÍFû®ÜH�ïÙlü­�üEõ�Ó}¿Z-ðŠbë*ÌþÏf3î €Í ¼6дQÛ¤… vt»ìÖÇêj#[›¤ß!uÖ/ÖUV?,+Ѧ,Ûcd[[k§®duÙ\:Ž€#pxà$.“Òp�çG¤ûÇäÿùŸÿYàS~ù¿þë¿x§?ç¬>6öËAîóÛ>Vä¯V¾×ä¯'ãälÊá”evww÷}UU_zxï3¶˜ÂŸ` ÿ}—�9ÞïîV\Ò�Y_¸@â ‘{@I‰<=@Dð�mË€ú†@Ò·Î)4cÛ®r\g�¹UÇë¦l�"}ÏY„ ƒô ¹¾l;éVnéhà >7VYë È6œŽÇ�9òr4ꬆÃΟ#Äìz»ƒ›?düÀÑsÄ9ÂÆ•8½­3ŽÎìqE¢•lq¾¬gica`LÀx�xÊÊ,·¥}>‚ŽíŸª«�dj,ª“´>ÖÖ¦ÇãS{úÛ6²?F¦Ú·õ›ò}̱Ü×p�7GÀo~ |Ž€#à¼à–xtAøû“ɤ�}ÇúØb¬ÏÙ|ä s3²>v&_‚aŠŸ2‘Ï8[Ò}šç_;Uõ«–¯ñ®ö%æ,'9”8«Œ„_€&€!„Ùÿ×;í÷w$¨u tIžk`“¦ÆÞ4ÇeãúæªÎÈ2²6í|…€÷èä}ŽLÉ}‚9Ù¿›L:3ä‚‚k2Ø Üë+àË 6â{‘ À€ÕiÇM�¤êÛüSõÖ÷1º|%Ù·ôXê¸)kKéêK}°ÛTg¥ü¬´õ±.¿”=¶yÙp�“DÀ'yÙ|ÐŽ€#à<�ˆø³19ß¹Íï Aþ¹‹ÿ³�Ì#J,�òó}˜oÄ[ÊyxöŒ¤¤ž›˜ñ3~Ÿðe²kl\v�w»/ð©¶ñ ïýƒˆ–Üü/Ж„,Ø‚a–w+�£{: ‘ü]’uʦWKô­.kkÓåûÒ’LL)¥[¦fum.‚øªÀ ÷Þ rÎ/0ƒèOà €:Ð�­‹œÃ«_:93îÕ° ÷+–Ýo&àOãžµpÂXZHmÝ!ö6ö£ºX¦êÚŽ«¶¶M›¯µKg{eÙ¬T�¤êXŽ“õQ½dìëeGÀpNœÄeòA:Ž€#ðt"ò/^—ýúë¯\K>ßó:_`6ÿäçrLòÞ×ÙŸ*Û�þð)?îP^á½.À–.Ñî�„ ˆÿ¹&núÆ>ì €zaóÓOꣶL‘þ[s¡U_c&;‹mú>xm»}¾?So™VÌÄTÛtâ׿ `F¯°t¦užƒèsùÿ3ÿ\°â d­à«$ü!¹µàgNæ¹Úf™Ný)=Z¸Ô¾­?Ù%éŸÒe‹¥ú·íäcm)¿T=ÛÚöq»]õÖ7¥Çýîí‹4¤:r›#à8ÇŽ€Žý ùøGÀx>ÄۂľbafðG ;gÈ—8Ô5Wx¶½†Ó9‰:fìùþq˜¹g0��ÌàodQL–˜õGù ËþÇ Nlà6Äk%v3ÇÔéæ½’2e­x¾Óú`=‰wP*‚ÚÞ¼ ?Tñ‚ëâÓµMgÓ¾ú�×ëü³,[¦®²t®.a° ŸÑëÌAæÃŒ?–øß�øßB2Àeÿtî@VÀ—{`—ý@`ë^BÇ-òëœõ‹EPÙέ­M—ª^6IùRÊ&™ª³~©z¶U¶õÒwÕÉgŸŒÇ—Ù^6É}}z½#à8G‹€ŽöÒøÀGÀøyHØë^¬ :6þg_õAü¹äÿ¤ÿÜ¿0£Í7�w0߸[•³?X¾ F”¸³ýÌXv=À'Íèo㯔 ¤á8$ü\–m¥¿&‰ø[©þ,ñ7:«Ã©ýÑÕ¥•¶�µ?—žbX´Yû®²^+@è§$ÿ ú7ÌœùG™›þió?¾ÿ6„�{¬‘äÂ.ü¸Åï7¤Î@Ø«¦Ÿ›í·CµðÉnmûôT½µÅ}ªN’õV�ým}ÊOþ’ôyŒß!¾v �=Žü]:Ž€#pôxàè/‘Ðp�gC€ìE &çÅñÊs¯b3‰?·'áÿŒüùøkÎ*ÃŽâ&ž¢Y®3Ê%–ø—h_ÂZ€4q÷ÿ²Â+ôbC‘ý 7=UO�@À’ý”n»2Ä?\SgËV§Ë¾²éæEÕ6¶F»2 ]þ”\i‚ *7+ø ˆýäÿäÿæì,¸ÜŸKý%¹ ,ý§ +xχû¾–*׿ú”’à±cNÙl}›®v’ô“Þ&­O¬³Ì·µ¶àPûÐO¾²ÇR>±Ÿµ[]í­¿êUGÙÔãï]£[×GÀ8<p WÉÇè8ŽÀÏ!@^g¹](ã}ý°êF 6Üàžk¿B~Gþöo�xì]o»ÈPÝ }PáSü˜ñ_¯ñ¾Ž¥2=êTû«èò9°�€ý… nêÕ3eª)[är�OÜæ©e10ɸŸØ®r¼€®¸ù¿9?.õç†Vâ«¡ÜE@)`²¹Ïezy¿€§ù˜”ò�m¶œÒ­->¶êÚ$ýU·KßÕ/ÛÛ>b_õ{ˆ_ª­Ú·ÕR¿«­×9Ž€#pTxà¨.‡Æp�ÃÇ&�Ïûí7~ί‹%ý9Þëïâ³~,ç«ñ8ûíü�ìÏá0ð˜uUe7Ð)oAˆf77gÓªú„ÿ\ëõ6í;G>yŸ`Ÿïõ�ø.53É{x‡Ÿ<3¬,ìÑÐFê¬×)Ø:Ù\>Ñ$¤¹�¨Û²z¨�×±ñ­¯c(s|œm½ô2¼*Âû›Lnmä"_,—|�"dÞg)�Kþ™¹ù3÷àf€ì‹™{pKæð•  ;þ…¬eÿ?1üçiŠ7ÆÂœã³?É™‡½âìlP^^Î{?~Ìñå�nÕŠ™ ²ªeó3ŒÛm¹MWª—”}—´¾ût[¿«O[Ç6Oi§>âöûÊ€<úá©'—Ž€#àœ8‘ åÃtGÀ"@~ðûᅢ-ûP{ß¾}ëáÁ¿‡O˜õð|Ú�ÇýYžw Mc|²ß@ÏH|�ø.z6„ uã»Ùì{o¹ü Öð ›÷�ç«Õ²rÏïž…Ï÷ñsjÌÜÍŸAŸÉ·Wâuô†Œï8}l¦«Ê©fÉ>Eæ)SÙ�å¨}p¦ñhï-~1b�û�Ÿî+9SÒ�Í*B_!�,-&ÿ²Ý�üó]ÿäÂýÏ~xï‡@V="úÚ—mÝ[é„äR”|Oû Öø±¯‹UÎà7 }YÍçËÕtº\Ïç‹Õl¶\"wPA€Õê9NK}HZ8d“´u‡ê©¶²I¶õµ¯Þ¶£o*ÓÇÚSeÚBrò/$\:ŽÀ)#à€S¾z>vGÀøP�ôÛþïÿþï³ýý¢(FxŸŸù áÂåü#,ïå ܰ¤>ãwÍ—˜Q ›š�ü£œ�@ �ÎlÞ÷¹Z.¯@²Î±{ÿ«úä<‰¿V�˜5ùmÅËõWB`ëfÀ1YVæl}›N¿‰3ü¼¾Ìµn=êÌ H‡ŒnËÝ=ÖÞáÇ}·qçò}’®6ap€ïö‹­1@]RúmHþà§ÿØ áþEô³).Ûº7Ô+>´‘çö$èuƒ~Ç+¬ÞYÿ ö¼šNç ýóêîn¾º½�-!;ýÕ ìÿîÎ^r�Æ®SµuVW[Éç¨Kõ‘²é˜)ùÿØ—å]9u<·9Ž€#ðnðÀ»¹”~"Ž€#ðž ˆÎû— JL1ë?Aõ9ø7òã»üA.Aø^>I;Y¿ù‡YüŒdŠïé÷Að?¡þùН �W:ÛÞ“´iV ?_]�W,Ú!ÖYVæ�âú¶a6~á¶@isÏl}Kúàmn϶#í¶ó¾R`Ž Už)��xÚÄÜ,ñ·6.÷ç'ÿ`�e²¸?€’Ú¨|L2àŠ^ѽuYö�O—)Ã9Êåêîn ò?­no§Kì剠¿Ø±ZÍçU¸Võª‰M³ä¿„ NÖfõ]~�©³¾©þS¶¸Í>ŸØ_e¶S[é‡H_ö/]:ŽÀ»@Àïâ2úI8ŽÀ{FdàžµNò�W÷×}ä1ˆû9&¯ _Á�’ú…�øÙœ�ôói—:ß/Ñêás}g˜í?«6„Ip7óC ,¹ùçìiÐ�ü¿é­¦!–T¸®õèb=tª}ðá­¦ŒëN"‰{e{ÖŸõ²³ŽùSqg*lê‡ch?€c³ÁúqÙÈõûÿ!€>HPûgò³w…ß.ßÿï"0W‚ð¯:\ÎÏ=Ç[õz%¢ýU¿‹/YQð{…ÄjUáµì€…=[±Ž�§ý˜dý­þÔ>Ô.Õ×ÏØÔo,Ùgª_úÉ.+ã~œü?@Ä Ž€#pêxàÔ¯ �ßp>[¼ “ƒ?á7—Я!¿¢ÌOù}A¹Gò†§[Îöœ`ƒÚ �­ CÐ�ÿ3ÿØ%pÝ+0ƒH2Æ$aA²L½î"têÿ¼ öf n3¤²œÚX›ÕC=¯-®sÈu ÌøS¯ëÂ-DÝfÛÑuÞW|å„„�)�¾R_€Ì—ØÀ²µ”Î×èÏeÿVÚ=ž8¼×k¶Á¹ r�� ±ˆ‡HEÎOnv«ª� ˜õ/³ðO@þñzÀ2ÇkÕ`€µX±¬v$B§duÙ$m�ÕSõ²ÅòÐv)?õµ«N>’)_ÙR’6kWY6õëÒp�w�€ÞÅeô“p�÷Š@CÖ7|ާ)—á½ÿ«¸Fz ¿ ÌÞ‡ôo°ýeë§YcC’ µß·¤ž›– Z˜nípE@d‚9¼ ²o%:b?žÞ¢¯+ =%íðäomôÍ=Á¥ 4³ÿ$äu@÷Sð³mtøxï3­°3ÿá“}V¶#3Š͖Þ`0À $ÄuðJ£»‹¥êßXæ,þ\ ÀÏlb{Žu‰W*ÈŠ»ýcÉ?7õàðIþÅb±¨†Ã)_Á›ûÐ)Þ[Òšü$Ó^÷dÙÖ«�¤­“žªKÙäOÉú}>±¿-[]ý¨O+é§rª�µ¹î8ŽÀI#à€“¾|>xGÀø >‡%ÿ2¦ûº�­ø¾ð7”ÿ kW\B½•HØîS† » ý`XòÚnþÇ5ÝÌM"1S²ºl._^‘C3G§+¸SZBÏU$ý$ÿu ´5÷ÂKƒHÔIþApÃæFm>9YKÝÑ)Ú²}*óÞå9¤Ú££I'ßëÇ7 ;E`ØØ�[ûcGD$¼ó�«Ã×*|`ŽMgXP‡¿]]f�*ûS²6««^ÒÖY]õ»ä.ÕI²Ÿ6}×1lÛÛ>â:•­Ÿt+é§²Ú¸tGà]!à€wu9ýdGà”QêüñGw:�f777]|é+Ã'ý2”ÿü/ÿ’u>ærÞð@ÿ_”ggAÇ €³NU�×»÷_€ð\¢‚ù ùˆÔ@³ž$>! ’ e¡g} žd]tq$àª% ?‡ÇºgKõ½�û·a�IÈ_:é>Õqâ{Qå6Év¬³{°l3}Ž=ñŠß(óæÚâèKæU5ñïcO€fýK¼û_ w´É¢‡œ® =Ä÷1>/Õ¯Ã!Lj}X¶6é’ìßêöx®;Ž€#pÒxà¤/ŸÞpN<Ûçÿûßñ™ó~ ²ÏY¾>éWÂ^b%oÉ÷û±ãyv�ÍÌ8Ó7Ç'Íæxåÿ å9Ë�ÿøóσùü{QUŸËªºÄ4þú AÙØ7ù ïR7; £Ì÷øá?Uà|Ü!¤Œóç#6<Ûb¶•­$¶û1D�š=5µMÙTGù˜ú}¾©~Sm¬Íê¶}›þXÿ¶~Üî8ŽÀ‡AÀæRû‰:ŽÀ[#r/®Æ¡ð _=LÜñ3~\Æ?Äìÿ.Cèõ>gòr,½Æ{Ì\ªßáÆ^´QÂ'«úý/slúÇwÿWUu�•¼(<@ ä›Ãz÷9¼�6ZZϲ¾5.~ü—C@ÁÞ€²ƒL±¸Ø—÷�ÛúSWf;««LééIjÉC:yŒo[�íã±þmÇu»#à8'�€NúòùàGàTˆÈ³ÿ9H|yâ?Á»ügð3|gðå;ý#Ìäg¿å�ÍƒŽø$WgØ÷»³,Ë+ÈOëåò¾þ}‰%Áø@þK2~º¯B;‡7ÙWœÊó¸qî#öûêw´çõ~*+S»XrtÖF]™¯ð7¤²$Lï!ñtv¥¸>.·µ=ÔOíë¯v�‘‡ãP¿ÇÛ}GÀ8i<pÒ—Ïï8§€@DþÃûû],ÿï¡n„ ÀÎãªâ,~·{ò –?á{¼Øü+¼žbAú7ìŸáèÝî9Hþź,ϰ øô È?Vpçð@ü³ÿ”°ù+§p×6FÞLᆪ¥ô}­õÛ×ÏÏÖ·±³ØnËVO_õVR�3ÛÊ'ÖY>ñdO�§—öôéï¹|ž:ÖCŽÿÔ¾½�#à8'‹€NöÒùÀGàH‘Œ;;;;缇üôç ýŸàËÏø}¦I¿ »Ÿ“°óC` ïL$n�Àà Ä~´.ŠfûGXN0Æ*€vôò´ Îø7Kÿ¡k€œ'ýO‰§½­î˜Nø9Ù™úJIk£n3ñPù˜°y…±AðÔCÚ~Úú8ħ­mÊ~Hm>möÔqÜæ8ŽÀ»DÀïò²úI9ŽÀ" N$6úë¾0¬—ý_bÌ$ÿßAø¿a†ÿgù¡o–ýóh,‹ÛAÇ~=”˜ÕÇN�ë>}Ìþ÷AþK”7+ئÎaöŸA¶õtÒÄW0.óäb[\~Kv±°¸..Ûqï«S=e[¶ý�¼že:e{*)›­ý�cÈG2>n›=öÛUfÏÑÏ®cx�#à8'�€NúòùàGàD÷j$^À~}ë–ý�ðþÿ9Èý'œËäÈ£.gè yi>ïER�/�£œãi—}áÛ_�¼âòÿ�V„¶5áñ—d�§ÓCÀ޽ʔÒuVqYvÉ}õò{Nùì,Õ‡l”Ò9n•wÉç<¿#ëËB¡¡¥lªÛ%i'ÉŸí/nßÖ/í»êâ~Tnk£z—Ž€#à¼;<ðî.©Ÿ�#à  õaÏ>ŒgÃÍ~ÿ=ëÌfؽo™ãq3öÃ<ËÆ ägx ½„—þ…ü†6ßÓi={Þùç‰q%@ÝaX! rÏ:O§‹®ë£RíÏ{!N±-.Çþ[åú~ ÷›ô-‡Ÿ+ì;˸~_™£‰}4BÚÛêšóã9¾Àyj ¯ µÒ‡’¯ !$ˆ‚Š¢»BçVU„�ûâßuÞ­ÐÐíÓkç‡ì]9Ž€#ð¾ðÀû¾¾~vŽ€#ðŠðù»9Ü�û·¢syYâ¡»èôûe§(ÊÁbQ®{½âÏ››KÌþÿ(çó¯ùjõ©X¯Ï1s?Âûû=D rÎÒ/ù @d~Æ/ìäoÞáoŽãÊûFÀ¨+ã¬ïo6E˜î¡°u´Úr¸Mu«ZI÷Zȸ×ÂjÚäsßý‹hû˜b\oËÒ%yŽüR%K¡ŒQSçg4 |Y_Ýèð3›X�ÃÍ6ƒÏk�ë3ØÍò¼ÙïçxŸh=™Œ×‹Å²CÂ�Wª¿þš¯PF®(3|nd5ŸWÕl¶\Íf T�o#A¼¯©|%÷ù¿dý1Œá%ÏÏûvGàQxàQp¹³#à8÷€TðÁÒ¦û26ùùïƒD «UÕïñ¹¾A†u<œæ£Ñe±\~Aýg|ºïjUUg àþ‚`$€˜�ü‡lÈ?IŒ§wŒ€%ýôÇãqU–cÌðO˜€ÌM@´Æxš¾\t:|ïÿš+¸ÈªjÌMü�ÁÂ:÷䤬YðÂDL'áò�0d¿�µE¤?Ülª¯èdÑꡚ÷Èa û)É@M†¿7¸çb¶¹«¬:JæpÎötNµd �ÿzË!Àó|ƒs ×å ÿàoÐfø è°3(È3,o¨¦Ó»Õt:e `q{;íþõ×tžçkü}Yu§S® ÐQ ™`lÓåÛ&m»ŸñikëvGÀp�gBÀϤwã8�òÏ`&ÉbÐéô±ÃØäŸâã;þç˜e¼ÄŒäÅ:Ï/0UwÿKøœWØ$dúµY€ ~¾/,ÿ§Dn>çwB$…€xz$"ôVZ�ݱ,мétã±:¥?˜ñÇ=Hþ>ùÂÄXÌ“ãN%[ˆNÎç2¼�Aúiã²æ  }Ù.5€#µaÌ\ºP€ì÷º½ž–óg\€r‰@äÿ¶êõn;e™-à^TÕj ò�v?{ªlÏË!¹ ¥C|vµ?¤Nçco‘T»×Kê¸nsGàhðÀÑ\ ˆ#àœ ò¯O+©ë~¿�Mþ&«õúí>aùö5¼¯Á4ø‰¿KÌê�á8ÆRÜ1ôIÁú°å$wk<°Òo$mûžpOGcCè·¾%ûò1R7{lÓ›£‰Ìã> ä¿&¿aÙmyÆ=ŠëÜtðòÊcîoëkuŽ;ðcžH?Þ“¿—$þ8WÕKçÍó=‘„@bA€çÖòcü8•nÂßïöû¼ЇÎWx² ­Öóùby{ @B€'»[}êmvV磌›7>�ñUÛŸ•<&Sê¼65þ¯#à8|ðÀOßpGØz¸d£XW™’¹À²ÜÁº,GØŒì„䚆ü†Ê¯x¿@`‹:�ü>Èÿä~€i¼t<­ã ‡[!Ò/�C`öô>°dŸg¨²!ü:ñ°@]°w„Õ_)�á6ÙnÞù§M÷—•lûF÷œeqÒ%Í)5*ëx~aFŸ$ŸdŸ™Alü$ʬ›BnéMOǯà:wqíÙÀ?¡ã<ò5V`À%6]¬° }¼ó¿Æ†Ü °gâ’øN@íÀÛf´ûê Ø!>¯,Ç¢¤ó:¦ñil.GÀxu<ðê�ûGà©°”:Ú”i“NYàa¼�‡ì ˆÚVpÖÿ+Ý/èê_ fþ Ôx% @@ @=sÎO®”‘ŽjOïKü¥ó|¡óÞPÚ§Ûz’øp‹è[ò‚ÌYâæ6‡oH’:à3K1³T·¶Îêôµe궬óÔ xߟä9§d@XP¢}8ožë Ÿ/Çþ\ „Ÿ�ÂÂÌÿˆ"x¸"ÝÇ}Rá3€e�ÅŠAæùím«ð|"ð°Dx¶àM4;ÄGÍä+)»d›]õ.GÀp~ü$€ÞÜpÞ? |(Ý—ècs��ÿø€ìçx‚æ†_àðòW”/j²�é»Ð=Ù ^(ÀÇÓGF@¤ßÊðHÝ<²É{Œ¹žù¦Ô ¾ÿÖiÓ´õVç¸m9|œ›fÿà§ÿò^/ØÞú<Ÿãø$þ¸v›—ùÁþ›ëÌ V ŽW´Âìÿ¢;ŸÏºÃá>Xb€¸4î:Ú£ÕÛ†{ˆ�ÚîòÝU§ö.GÀpž <�Þ�#༲ÿÇE‡Ÿòûò¥èüïÿ�w–Kþ½Ì±´¶RV>´]a�þ*£$ð°ôj4ú‚ ü¾âü3Ä/Qu†<ÆCûO»%Ž“þû» ÀÕÓ‡E€¤?JdHʬjÓm3úìM H¶48¨¯–¶?k~ˆÆ}�q]S6çcÇïä7†óº?5ž˜Ò½Š…GaŸîÀcXâŒî}Õæ0Év„Xò�V»|wÕµõý”6ì+nDzµY]ÇNÙTçÒp�“E ýz²§ãwGàpðp̼8ÑÖí\_÷°svzPUý56Öâ’~ì¢ÝÇrý>§Ø¸¹X˜x#é¯'à°œ?ð®1ßùÿ Â�>.¡3€ØA§ÄôOoÁ�~<½sìÍI=Î<}ë#8±Å>qY}½¦lÈ;jõx qËÖ–*Ç}xy ^~ áV% ûê­¿|%m�ôT�µY]m~FÆýí*Çu?s\oë8ŽÀQ"à€£¼,>(GÀxiÈßÍ1¶õßïò?�úÝî¸ÂF~E–�±!ßïÎŽ¹¬ľ!ýavM\¬ä«Õ%6ïû„·s?ã8WpŸ@ÑŽA…Cß¿5Ctõ£ °}3ÞŸµìûä} Ý”Öò8]Çz\«Ã¼w1Î}=¤ÚÆÄ_º~ówŠ—7†ÒÚ¬¾®C|S>ÖfuïP›ü÷IÛõ¸㱯?¯wGàäðÀÉ]2°#àü,†üóáOIzÖ¹¹év‹²ÂÎMü@æÏ1ÛŽÙýs8só¾3®@Æã3fü%7=múévÏ /gÿ/°R€m†¨,ê¶ñäDØ»Bº•VgS•£nZí©6m}Ä}¾EÙ²1«s,,Ç6;Æ}õÖ÷Ýëu`2œ§ÕïOœ·Á.8ï=·µCÚ¥|R¶ížïK�ñ½oõP³ýĺ-³e\~Ø›[GÀ8Q<p¢·í8OC Aþù Çt/çsn®ÕÃÓð/Ñž£â ›ks6ÿŠKúñžÿÕ¦IÓæ¾½‚y>DÀ`Ò?A~ àŒýÁ±›¯¨t‘F€7ãý ¹ñ‘-¶³6eÛ´zÚ¿êïi­ßÊ2O«ÒýSù�¶în�r^þØ&¨T'){J¦|~Æf�‘êÇÖïÒm[«³ ˱mW_^ç8ŽÀÉ!à€“»d>`GÀx*†ü« >è1é¡o£_]uÝn¯â’}’øn÷\ÊÿDþ+úù¬wþÙ $¥Brg.õçŒÿOÒ\ú/½„Ý,W·ؾ77§Æ9¸ã“Ü ·î÷¹dŸ+.ºëõgtô�ÁÙéæ9Nµ2öîè„,Rù¶û• „æ´i#Œ’¦ª±©NÒúHW�¤ì±´õÒ%­ol‹ËÖ÷1ºú±’zœÓ§û:Ž€#pxà$.“Òpö!À7¥¤Ÿïà÷úý~�———=ÌÜ÷rlîWu»ù¼(²r?ϳeYv†,Cgñïgýþw°‡/èã ó5€1ȶ\qéü ëç¤Ê$ÿ Æ!S§¯ä ŸHLâ÷.åߨÌ9†ó«Ï�žS޳ ÐO˜ì;ö«hfÎe“LA¢ºXZßT�lô³ºÚÉ&™òcSsKlŠý›ê—6å¸ë×yÙp�“DÀ'yÙ|ÐŽ€# ðPÏ4›²_ý5¯ªª_ų€ÌCÌø�á:Da6°$³„e™åÝnV�0dµ¾ì÷Yÿþ}Æ^Ÿ _ �q >‚pŒiïº#ð<ð.kË©#„ŸïMf{«ÓV2Jëó‚÷ô¡,-å'›d8oŒµ™ÑçyÔåp>8'‘I­¸¼ày¦®É‰Ùx» jém’§ÖV'»=}kKéÖ¦vÖF�Iã£.[lg9Nm}Ù>؆åØ÷åeGÀpNœôåóÁ;û ÖèXê_€ðc#ÿ@þÏ¡ŸA?‡ûùO�½.¬À¿hÆYH¸D¡™¸Zaé?쟀2—þ�0ÃØ§÷ÇFÝÏþ5hnæ–ƒ±^yË÷1Éq ¾+óþg~¡dÙZê©ú”MmYΛç ò&¨Á2gþ±Ògó€|`¿uuäÒ"@H{J—-–©>b•éÛ¦«ÕKÆmT¦Ôx©3±�Mq=ëä£:[¦®²|m™6OŽ€#༠<ð..£Ÿ„#ðáЃZ�xß¿¸¸¸èó~xè¿ù¿bFù å+0ø´‡e� ‚ÏDÂÄYþ3hg”@—yÌvxr,ÂA><äÀK!ß_,ÛWuÁ.BÏûšÄ2d£×÷ø}]Üá3•ŲâîÚìm~ò—ÄïpCüqn$û!À%ÿ$û”´CåZ¯ç[ />ž—xK5p×VÙÚdÓÊ.Õ¥üÛllÃdÇ”²m¼6ÿîªW�üY–Íê¬ÿSÀÿ;ì±ÕÎ¥#à8'‰€Nò²ù G`ÃÔ܃¾à·îƒŒ0ûŽÙ@nä÷m>ÃþOr£@"Øœc�P¬I”H,6 …à3Äkœù¢b½ÝW7O/‚€nfu—i�Š|ëû7ÜÇ–ø‡@ Ô÷ù�uϘË–öùoÕs¬ü­â\xná]eX‡}µÎr8ïg<ÏïŠ]ÐZ�§¥²¤=UÙÚä.ßCû¶~êOÇSY>”:[wH½õaÿJVÇm³ù�x @ð¸t�SFÀ§|õ|쎀# ‡4ÊFŸÏ±Å_Qp– û‚×x~ûÆŒòä1'tðÄÚèÉ/p'ñ�àÓƒ�„¿Þ Ø”} áéUР̓Ù\·õ²‰Ø²KÒ¯ rHsMžƒß†Ó{ÓþýžR]Ù:«Ç¾ª“T=Ëü�rOò�ÞõÇ«;Aöz$k›¥²“A(™º}h³�«KõA×Åå”�m/]í¬¿tJ�‹~L*oJ›q¤ìq½ÊV²/õKiuëçº#à8+Ëè'á|hô°FÂÃ[¯×(ú(sã¿s ” ü+œ¸´ÿžPG%È~°ÕýtaËñdØe† ÓŠáó‚Ô=9/ŠïG&Jé*S*mÕáþå}2 /g¾ ¤�‰>JV—í'dÌÊÛUª½l’ìS$_KýIþs�ÿ�€ü¨}ÂñqŽáŒŸù\Cß§÷�¹øtðï´QYgÈvô‹¥ê)ã:•­�tÕIÚö±ÞV¦ÝŽ=åGÛ®Äã33InJ‰qßa!˜¿�€ÆMŽ€#pBxà„.–Õø(à‹L%<˜ás~ÝÙl–M§Óî·oß‚$Ÿÿå_²Õåe¶^.³uUeÿ—ÆÉ$ë@Ç €3,>ïVÕ:ºÄŒ!?åÇÌ ý¸³ÿÉ~œÙEH†(ì}"T—ŽÀ.à ` 31ŸÙtjïCêqÙšäx+PDŒ­ï1èé3~Èìš±ÖçÇó´+´àXϳÿk)ÀãºÀŸFÈ‹nYy¿_ä£Q/??ï•óyU­VUK¤Bfi£wðw{ n~Žš·/W›¤�R›�ìò£´¶6]~”ö–¡?Sl³å�Çæ_ù˦ó¡=Îô‘­é÷�„žKGÀ8I<p’—Íí¼_ðlÕýí·ßÊ>>ŇçÖå»ú—“ɤħýh/fø\ßeQdsÀ°3,øÏ®XÆ à;úÿyw÷y1ŸëUÕu±^_bC€I¶Z ñ$WâÉ-ãûþKÌ2W G„=B@àýBëgvlX²/ò©@À–ÄØÉDÚÒ®º¶6¯molõCÆ!IÛ&e³õUÇ=�?¡Ý|�ç=¬Žèãoå¨8;›÷–ËþzŽ�RWóùr½X,W‹Åb5�.Y®�W··ËÎbAh™y{µÁ¬ºXZØãº¸L_ÙR:möøÖ—uL±�e&µ‹Ë›ÚÝÿª ½¤‡þ<°8¯u�ãFÀÇ}}|tŽÀ‡A€TõÉvIþ±Œˆ™ü!6ðâ!v€ê!3&¨˜ÕKŠ^/›áÓ}.ý…Ä WQƒ¬¯Eñ5«ªÏÕrÉÀYä^w½î’ð‹ü‡ƒ›Ù2ô¬a|èýD_�˜øãø Ùß3{wZ}O³7¯ Û5ùHÒ×êj+›¤ì.#ø7_4Éʲ×ÅßÓ|8\®1ãÏMM°Z¢‹Uýõl6¯¦Óyuw7«noçË››y÷榳D< Z,*Ó#o7BKºÄ¶¸L¥¸NeÖ·éq]ª¼ËƺÔíÂã1鼨ËFi³ÚÓ&�þžGÀ89<pr—Ìì¼/ð,ª.�W¬buê|ˆ À³þüßÄ;?ë7Á+˜x‚e <ÈRd˜åâÓZÆMÏ*¼÷¿Ärø|BárUU@²JȰ€Ä_™�° àÁP4$—ŽÀ3! òŸ’Æ8düãx¦QM7�aR�ñ=š|Ã�ðÏ#þØ‚€þnVØ ²KÚþhÓ-ôðÿß ÆÖËŽ€#pxà.’Ñx¯ðÊœ[бü“ôëÈþˆä›ùq¿ ä+Ø/ð€zš!6 `!üÞ�<áŽñëÅ2ËÎ8¸Àê€3t:Ä{®aý«šô?x`kHft®:?‹€!ø¡+–�M¤ßÚtÈ?”ºÂÚiŠËjÿ–R¬IcˆË²[i}¬n}\ß�ä|÷?+ þÝ ³ùøsÙ]åy‰€@¯;ò»»^5”Ø3¥»ÄëS¸÷V«Ùl‰MçÜ N¼­x$i–KÖ)ÅuqY~”¬cÒå¶¾±}W™uL¶?雚ûc¨lë¥SZ]¾ŸÊ.GÀ89<pr—Ìì¼𠪇+žP£s³¿ÑhÄ÷ÿ¹ìŸ³ý$üüŒßgJ<”^Â�'±,<•²+TÒÎO„A0£?ÆÃï»cFZ’ŸAóÞ¿fÿ}QñôâÂO¢¿Eúëºðc`#¨¡üˆ>Öÿ]?»ë¡¬êP¿gà vˆëÏ¿‰ødKIµg]¬Û>¬žêÇmŽ€#à=8úKätÞ=zØ {Q…8ëÈÿL¹€äÿ;Êßàô- rO–¸%sóÄ>ébS€¼O‰§Ø>}øô¡—XŽÃ�Q¿•›}Þ=ä~‚oŠï]Þ³µ :D›ë‘¶lu½µY½®>!V—Ю:úÛz«ÛºØž:ÎGµáo&—ôóó¥=0ü°`…Õ�²\âïàrÕï  ½ƒyÿU�%WØp– ‡E‡öíÄÛLp[]^²µIùQÆ>Öö�m”Ø7“ƺ)¥ÿ�}U¦7õ¸L»úe�tÚ=9Ž€#p2xàd.•Ôø`߾гQ%žG¹ ßÿçòÿÏ�ügÙß ÿ"$ÂÓgü‘Hæë}ðØ–aß¿5w¿¦,Ð_Ž'5¬oí ]áÁ–þj')[¨ð�DÀ’ÿ�$QØÜ�÷RC‘]e+wÕY¿·Ô÷1¦]õª“|Ëó8…cãï÷D)ðþMÅQÖ+,íŸü£Ž@ÀçújµÀ—æx-€ûx%@·¥ OéÖ&Xdk“ò£”ÏÏê¶OõÛâ²ÎËÚ9f%•­¯³ü\:Ž€#p2xàd.•Ô8-ðÀ©‡¨´üã�¬3�nêf³�\.³>ù‡÷òجjŒYú3<ž^�Ð_Cræÿô_è^„½‘$P<¬­;-Ø|´ïÞ£†è½.뇒‚ U—²éþodª³#³Yfí©uq?±Œ?Á v†~ž|¿t—Ë;lø·ÈAþñ)Ài1ÜaU?X`å€]À¦º)]6INI¶6I?Õ=Ug;��úc�'Ú¬Ýê?s¬ø8^vGàÕðÀ«CîtÞ7œiÂF~ùï¿ÿ^ƒüÏ?ÿ,‘ LÆx¦,*¼[:«²Ìf�)—ä÷û�˰ßt»ÃÎÍÍ�r±ø‚?PŸ°,õ³¥c<�r?â�ð ?}Æïø7ïóÒCOŽÀ#`™„t+­ÎÓP9œ‚[¡Ì@S-C¼ ¿.çæNîf5ÌÆ-üÛþÏÖ1ÚÝ~ªÆ²&«Ç�²ÎÖÛ²µÛvmvëãzD•'@IDATl¦*+V4:lÔ™í>]õ±d÷±-.[Ÿ§èjC©¤q«¼OrLÊÖW¶TøÙqßDѳM]wGà8ðÀq^•#pr„'!ŒšäË÷¹�——öbŸ©>–öÖøˆ t¦EÁw ³tî>�ÏRuŠ^/ÃŒT�€¯ëùükµZ]#_ Íô±”5¼˜Jò¯€vóç*­89ð|À² ¦”´6«oZ  É~”·l ÔAu’�:V¢ê§L)Æwh}¬N?–­MeIõe}dsùD¶ƒìD·a¦.¸SºlV²ÛÖÖÉû°,¿”ný¥SÚÄöL領ùWu²Å>¬�³|­ŒÛÙ:×GÀ8Z<p´—Ææœ"þ-fü‹oß¾õ1)2žÏçcÌþ�©Ão‚c¼—_â{T˜ ÄþT$òÝnÆÍ÷`ÀÇ©ñy>|³Aîú�wR?!˜pŽÕÜÅ¿�©–�ú4™+¸¡Ÿoà§+àòØû°Ò² Ž_åçRš~‘|JfüL z]× t¶9NÂü¢¦k’MÒ€6å”ÝÚ\í¤Ÿ·¡.‰tIÈê:°l’ÖO¶XÆ>,ó¸òS½ì*󱄮$Û¦”¾Åcù¶I;Ž6·;Ž€#p2xàd.•Ô8>"òχ¤Îx<.@Úû¨ƒä_@ç&~ ñ—�çÈýúÉŽk'ñ‚*žÐ�ÀJ”:ÜàöKûóuU]¬Öë fÿûp¿@þùÙ>¶^`kOŽÀ‘"~ õؤSƺÊö4‚��2HìÉò¥L¤´5áø ¦ãJÙx(Ú÷ÕµÕ?ÃP?fqà¾ÌÛDpK—$VÒ)™èkmmm­OÜŽåT½µK§Ô1Úl´ïJ<Ö®¬s²}ØcZ»ëŽ€#à=8úKätŽ’v32éø‚Ô�;ï÷9Û—säOÐ?Á÷öOxj²t ||ÿ�Ì ;¾€lãe§3ÁŠnHòVà 9ôðÎ?Ê\à¯NOÇŽ€~('u•%5~ÕIÊÞ,éW šñ?KÕñ7µõ3mziŽ{oy;-ü%Hžö8'ÜÜô\ðï/‰ÿCòÏÛP—Iº$�žÒe£db{k³eÖÇuÖ–Òi³c²åØŸåÇ&ŽÇf¶×ñ¨k¼Ô=9Ž€#pRxà¤.—Ö8Jø Äät:-° `€ÿ1l ×Xð’»øEé©*��²ðþ>‰ v±ïÃ6@0`€ïSðTÊ÷ÿû¨-¸j€¾Zò/òÏ`€ï°ôŽ�æþ¯Ç©²•©Sdž¤¾&øa©?WÍ(o~?ü =̦Cç­’ePñvÕÉ—>©ÌúCÚ«—{ÐmBIhU–n%;“ŸÕwÙT'ÙÖŽv%ú2éR§Êª£Ÿí›å8¥ÚÓ·S9ö�ûó²#à8'�€Nâ2ù �ãBDDB$6üã÷¦Iàà ÎúCÿ‚üÍ~ Á„gC²ÎÆ÷]ÑŠ„·ðW€ÐóCÔüJJ ¬ È!ƒÛ‡¼i³Ñ›aÿÇ8jÂý�î’N€÷83ɾˆ?öÒïþ«Ž� 7¿-Úët¯ÉòòÒ22M6Ik§m_–¿dÜ�ì. Þ.„VÒv&›$ëR:mL¶ùÅ’~±Í¶g=“|6¥ír쯲|­ÔmCŸTŸÖ®~RçaûtÝp�£GÀG‰|€ŽÀÑ# £ ±é_x£nV@çÌÿ/Èÿ„|È ¦úU.ÿgacÛ™ðz d2¬Óq‚�ÿãœ2¼™S9>'ëÓ�úzÀƒ €!úq?,¿æHÌ*5Ž”í)þ�m“:®Û ›¿±[·jY&Ô±dÃ6ël›”oÜV唯l”ºìôWÒ±X¶õÒåwˆd¿‹të)ýrL÷qGàUðÀ«ÂísNÌ(f�ÿ÷™;ŠNQ` þuÑ9?Ƕü¾ë—åÿ篿¾Oæó/sÌüc7À û vîÃo€§¨›öÜì/là"–ðײ!8)˜ö�›T·9Lj€ØDjlb©:kÓì~�ømHZŸ×ÖŸ“é|ˆG¼Ò'ÇŠenÊW"èÚ¼öIŸöñY–ãU’2+Ë~> ò³³Q9›Í‡Ó邨®–Ëj…o¸v–ËeЋªƒ\-KJœ~¸Dµ$º ¬½Íû¨Ì~¤KÒÆÄ2“ú¤n}ÚtúíJl§¶Òé¿KçÔ†¾žGÀ8 <p—Éé¼>|2ŒŽº)ÿùg¯óý;?É× ý5ñž~Ýë @øû‹ÉäËÍlöµ\.¿ |•¯Vg ;«U‰EË]¾«ÏÀñr³‹?Ç}OŽÀ{FàÐ;œ~‡ú¦ðú™¶©þöÙ,kó•Ï>þôÔ¤>¬ràßfØ(ó² ™Ÿíâo‰‚ÁÇÿ†´ÁÿÀŽ¿·3ϳ¢èuñ÷{=ŒŠ³³‚¹áåÃaYá[®«ù|±žNçË»»Å Á�åÍÍ¢ss³F`…NéËÛM—5¥[›Æ![JÒÇöK&ƒzlS?ª“¯ühß•t<ù[‰¯Ãs¥�Ùúê80{rGà4ðÀi\'¥#ðjDÄ_A<þæáçêªìôûƒ>6ùÃæ~#ü16ëá)hÜ)ËÑbµº†ã5lט9ºdø ±UY™UU—3þ�üstfmè÷j'érŽ�Í�J?®‡ƒŠ€ô°¶‡-^ß²‹íªk)xiÀß ÿfãCè$þaÉ?ƒu}hÓÚ©WÄà>"ÐEXÐëõ»UÅ¿çUxÝ q�n¿_V³Ù´šNg«»»i÷æfòn?,¨*6·#/3íºÜ)]¶Ð¾öµ¶¶>äƒ&Í­¯ãȦò>_ú·%µµ’¾,3QÚ¬c†JÿÇp�SBÀ§tµ|¬ŽÀ #ÐBþ·€–Ër�eC¬ýœ`òè3øxç,ÿÈýùº(.Qw‰öKÌ$]"p††ôð vûçò½vïÇ|Xæë³w/|…½û·D@?$�!.ÓN[l�˻ګîµdŠ¥lûÆcÛ�ȇeýø;Á/Ä™³þøÛ³™ý¯ëñÉиí;懯ÐøÛ�ãoq¯[âÏúj6Z�1G¹¨°Ä«º»»]M§· þV tü¯¬° Eþy«êR¦ô]6ÕQ2±Ÿ”�uÖGe{\Úâ2mmÉúê¸òÕ±(“™ÿßÄ^6êCí\:Ž€#p´xàh/�Ìx]øcލšdߨ0+„ÀAÑëMHþaä.ÿW˜IºÆÌÑÏVëõföÏ0³Ï Á„+ànþÜá¿CÒßd<À‡ ÀÖáyXOŽÀûE@?*�á¡åØ�íc[\Ö1ž[>†ñľ*K6cãß’ùzVŸdÄsCö!ƒŽº`¯¥V°�§G À¿ù$ûØ€Ÿ[]õzüß@«+ ì Ðà €W,oo¹OW ¬áWwwËeŸ_eݺõ>/§.‚t]b[ßf“�= k³:}l™:“íÛ–CeË?¶­t¹ªLi³êƒ$pØ‚Ä Ž€#pÄxàˆ/ŽÍx-øðbŽ¥‡šbkö«³õÃUQLðÄs‰ÃÏx0ägþ¾B~ÑŸ`sÀü†( buÀ¾%Ü­k³äŸAè|%À_0è»úáÐ�ORÄeÙ)ÛêÚì¶ísèbYq_Önuù¥l¶ŽãçŸ#HòCf€ïþ7KþkŸàß0€ÍÓá-’z¼O‘óýv¾JA¢_¬«ª¬Gë~†@@˜ùç«Z¸v«õr¹XßÝͱgÞÍI óÒR�/±µI—dÒS’õq¿ôcÒq-oZÝ·SÙJõemñûÿª£ï–?ÿ?êAÁãÒpŽóÕñ±9¯€ZZcp¤g}|çŠÌöOðÄÈ×xˆü‚òtõúOf%–•–$ýx ê�à—¨g9‹OnaÃ?ZKÿ%[ÆâfGàÝ ~õÙX�¦]å¸.å_wû¢BÌë¹ò ?’{f@üù¾?É¿6ÿCå¦ÒêíÊžk¤ï«àN ñ²·Ù­É«+Îô#0Gp`ÃÐQÎØõo0˜.{½;\¾‡‘!Ð+Px{òRÆ’õ²Y�6¦T›}þlg})Ó‡IÇÝ”û—mR™­·úÃ=èA€Ã0u/GÀxC<ð†àû¡�·F€+Ñâ‡V[[…%fí8CÝ%ˆ;—þÇ4ÉßPþÈ~”`öëÍQHt°éƒ¶è�!À£xr>üQ(Åz\–¥­;Än}~V@Öè°­M›�–ù7+ z½Íë¿#‹èoÊCr"@ 9ë�É” üÍæ~ ¼,|¡}�/·,ÃßkDq±9à³ÿslx‡¯ôò^oó÷ýþvd;^Ž”„¹©kÓSmékûkkK;S¸ Ù†Ieê²Q?$Ù¶ã‡÷û`ó¿oèžKÿ/ Iüð,õ0Úù?ŽÀGF ÔB "ÿ*’]*üéR¯e¨#ßYAJëßæŸ†ùì8|ÊÇÚ¨óüe“ÜÑ¥W½.¼<á­kËöòé2Ê×Ö±©ê­.›ÚHª-}¥S2©�ô`Ä?¶>¶©,i�#›¤êâ²ì”Êò¡ ÇÇï׃×GàhðÀÑ\ ˆ#ð<ð¡Ãô´­Ÿ�á…άß�†ýù|TõzÃ|½­ó|ÈÜ]­ú�`0ÀeüLÔ™™¸‰_·ûËs?ã0ŸÐWŒQÉ@Á A $ôõä|D,ñ�ôf€µÇYRÏ €-ó}ì8°õs�;{û²˜X<k·zìçå£A`ûÿ%úÂ= g=/¥•ü.[ª^·ƒí'e³m¥S2i¬jgmÁÁü³ËÇÖ© ûNeÕ³�Æ.›KGÀpŽ ÕåðÁ8?‡€!ÿzb‡Ò³ÎýWÞùí·~¹cÿ3�ÿ3|‚ï ßÐ>ù?ïöËß=ìqÙg·{…>/‘¯Ðñ%HÿO<èþ÷„h{rDð!Ã�ÏJ['ˆ¿z6¿!ý$ÿ©Ì ì!ÖÇú7Ä,).rC¨M,ië>/‹@ìêúÁ¦n[¨”¼tVÒcŸ�>¶�ü÷µ�ëÕ�ì”LuÝZÔm:ćþô³¾¶L½mìlëÉp�£BÀØ�êrø`�§#� ÿzX¹—ø¤Ó³ü>ñ„÷øÏQq}–]‚D�Ø�ëh&ÿ¾-+6 ïüC=ÃÏÆxÿ€:þ=‘Ý� Gà!`}XæÏS§Mv#Ãj€º^?š@è¨I~`™uq@à�Éÿ¡W7žbËÄÂÚ­~è±ÜïeP  –¼Tʺt<0mL²YI».q›_ªmlkëGvJ&{ûèx›šÍ¿¶ÞÚwéìG™~V×¹Òúæÿ2�×SŽÃ><9Ž€#ð"xàE`õN�×C€‰£ÉfN2¼ÿŸãóNý¢ªÆœcBÿø ¿Ï胙ä^I}à*g~6ÇÂaÒ¿‘�ÎæžqŠº^í]:�šð[‚¯ @óƒ2| ±égLiI>ˆ³ìŸuª—.ùFHïb6©ºØ—íiØ:«[×�ÝÆ¼LÔcÉA¦|d—?ËÒ%±©ŸÿÏÞ›,G’+kšôÙ9Ę‘yNÞºÕ«zƒZµH/ê9Z¤7½èwïEKÕ=738¹;ûÿ`ö;ÕA˜»“A !¨#0u3ƒYHr�àØ«S”ײchÊ;[ßõضi˦Òé�W÷@N¼úO� H<«â`ĸ"#màÇ7žÚÄïLËþYÀSÿ/ *þ¡åÿ*Pá�~’ËtT÷ß«ØåŸïF¨@‡ïFCÏ¢râé�_ÕÛ‹'Ll'ä”"—l«gG)˜/slžà©?yª[5û$ýv’WÿL´Së@›gøê’ Øõ@¿ô¿ú¯¬ì à éÓ˜Ÿ¼±Õ’Á�úµ^-·�!=ó�¤x:¹��¤ûå‘ßÂ)¿/×ec».›tz =�xQäÀ‹º7�§^Ö Zƒ*­*æ±QßBOÏÆ öUü³F)( ø7 èþ]…>¶¸« »š;©øÉX+ô²¾# M½ƒM´œ‚ôÀ�ï�>Ø×u@p´Í%ð7­£ÜwÁ–kÇïô –'ÿ}ð_&ðR}}Õôôd+âÙ?Qñ7xx¿N“îßÿçgòOä'jA|c½–Žå–A·ðÈkÙ³—’¢nÇÙýoù.·kCÍ‹4åêå´7Sz =�x³È €7ûÓdÃÒ=@à-®ãÿößþÛhµZ�nnnÆëõz´ùòet'z#\KýKþ_ïôš>Ÿòoqvv>šÍ.D¿¿Ó+ T>êÉâ')ìèÏgý~{Xk›ó`îáDÚG’ÜôÀóy Fþ�¾h]ÓŽž™=,×–Wý@Ћåa×tP}1t_”³Oæ¡ÓÒkñ\&áw÷§ÖX_‰kBj2šjÙ|>›,—ºƒ¼_¬ooW:_7º¿lt_Ñ­§@ʬÅã§‚íÈ ­qx¤CvЉºÐ$ó:ªû¿ï4«õ]/|²ËšŽúÖu]Ö5�0=�H¼ºràÕ‚oo€n¾ñæóí_Ø‚žç qÀÇ~Ë‘þÙb±˜éÝý™t·Yæ ~¥AÚ5Oiæó“›étDþØÃÛÙŒOŠ}Ð îO­ø]e> ¾Ó$À™–ó3¹�)=�x¸S6Ä$¸s¤ÁIQ·ã´y–=¶l?¦ü1�vK'ò"ë†ïÜâG^âßÏå\í‚þÙd:]Þ-—g³óó›‘¢ü;ýét|wss»¹½½Ý\_¯À×77«ÍååJôíúêj¥I€µZŒ)~â9�}¼(�x]šäS¼¦‘™îd}Ó-Ëb»Á�‘ƒsïÜ@(A“lÚxä¿ô@z =ðÚÈ €×þYÿ¡ñ‘æ¾—úÎÍïÀ1(ý5&öøÁÿ>¦Gÿñÿ1ûðáÃéRI“§[¨1ÚRöNuA�ÖËåh5�î þÑTmÖšÐSÄÑf6{§`ÿñÓh壞L¾Ó$À©~ ¹*a ¦ô@zà‰Ø^¨}ùHGé^}ì“ײšÞ1tD]µþ1ôN§~L�^‡rέb–=Õ~ËfòžìN­‰î3­[Œ‹ÓñÅÅ­>»™±ªE‹Ö——ך¸¾»¼¼Y}ýz=VÖ}ftû¯m4Pÿ4ħ+?1¸!²C¸å†”‰ö" ŽÉ:àæ�Çu"Üõ¢kýCPoÉå—j‡&�H¼®ràuýTíO£]ßœ"ï¹ñ¡*õø†¹¯Î�òñx¶É€xl ‡Äßʸ!ê-æÊ§òË…ò;Mœ+¿~.Ûï”ùË� üõ’~©NKýõ�¾éÉ�Vèé?Oû?+øÿ$ߥÇF€g*1§T¬¬Ñ¾d¥ÒGzÀװε Ëá»\­óTú9ìítÐ ‰:·ú~ÌÏÑ^×™ðÛ= à¢ûÆL÷�¥n@k‚=îæž2=W๺ººÜ|ýz9Z.§ãù||«×V&××ëÛÉä–WÏÔ ÿ¬üÔà5¤¡æ á–F½È3ë…&™×Q]½Æ‡`«Í~êoh»º]ÀLé�ô@zàÍx 'ÞÌOñ°!Á¢o.±@ä áQÿ¹qêlÝà|ókÕõc›#_£Œã^oø& Ž%;~2݂㙒ÞùgÀ…tÙÄ�]û?‚÷� ú4  ½ø˜`#1ÙTR¬?mô¹>M|ñ®/óN?•μßÌOìLé�ôÀS=à —òà‘¶Mó Í‚ÑFÄѯéhcŸ,ê=ßé¤÷¶žáÕ­ÝVÞ*$òÝ< ß�M]» VôËÜuÑÓ™‚ýÅæôôo=õŸé³²“M6K£ëÍbq3ÑMGKêUü¼œš†Ï!<Ê}Z›gh;À¨é¨N²nG=ü�}’õ k^œp›Ðuyô3¥Òé�7á�œx?Ãn#J´¶Ë‚Š7KÍ3¬õ"ße^ R×17:ëÔm«ù¦�j/>{«“GþžöG š§áÔx®åþg<ý—ÝOÊìÚÿŰ ÖìËy]µL(1! „ÌçúΕÏD�KïLå½@¾pÔÙ–Jé�ýà‚%;™64¿†.SÃZïÚ6ŽÑݧsLGu"^Û�2ðVj·uk›I¿¬Ê,2+ôä_5A2!0Wð_öØÌõÈ6›jEÀXË'Ú•v}wuu«WѦ¼vFe~¾{GíS .SëF{QfmA“Z¼NÒþo}¤n“5-‹Á?<2ºNÝýXÔ[§¸¡ Óé�_Ã9ðÆ~çí]b·]¾É˜iãCÐeÞ¬ož´É7I·ˆ>Ø~|÷Ön®Güž>nŽÏ8ÐÙ|豂ÿïûë8/4ã©?»öÿÑç(°ŸÈ�»ÕŠ’&ÿ¸ædéi“€ÑBN[È b2¥ÒÏä_ÄCð±Õ” 9ªi‹†ø– t}ÈÆ�ü}2ìîÓ9ToÊŸÑÜ4tOQž�y�Œû‹öÐæ·ÚðT»þß®uCÒF|_V¼õFŸ¤±À|>Ñ„€OE ?k„4tˆ‡ì�n,k} ùÆk4ÉmCÿØä2Ö�4øPÞÖÁÍWÙ@Âô@z =ðÈ €×ðúãê¬o0.]óM×Ðú߯›0u×tÍó Ñí�´ñƒÇð–n®´¥ÑàÈkáðêŒxès�±Îô&ïýÒ$ÀÁªª?ÿ‹äÓò´_ˆmݧ üG½±Ácuz�ón*>OþÉ9 'dJ|/Ä ý¹êÄæ÷L‡:gË ë¶ÁwFõ"^—Kúûx@÷– Oòu¯`EÿF{Él„o´ÇL�¼[ƽf­/ꀷzúµ:=½dU€ZÈ=ŧd ùyá =ˆ[×�2¶ �d›5nhÝÈlâøâîÿÔsÓcù0¶¡©—Ìô@z =ðRÈ €#=K‡}¤êcÔj›ûè(ká‡x�i×cu}#£ Æ£ x±}È"¯Æ‘G[uYäuÚÖûn®�óÅÇЂ‘ÞÎïßOoµ„®]û¥s¡µ˜ôÙåßÿÐÁÿ©AØ¿‹O@/ �I=±�ê~áõi\ÓE9ÿ¥ÒOò@ûÂm_ÐuݕʥÛa[ºW4ír5 ¿Å³þSà¶Sí ×ôSlº ¶šötüî·ÐmêØHÂõ€Î§²@çdYËOeõ9&z£uí|ðz|{{5:=]Læó™6Ÿõ Šð3¶În¹aÔkñ¢œ„ɇaºãÿßå)Á$vÜd–G\ìLé�ô@zàmx '~ÝðFÿ]Á”>ž¦ÛN¦ÿ‡²zrüµ…]VåY[=”j]ô4uìE)¦ÝrFו�¨sôá+¯Å[±Ñέò�ò•òßÊÿKüÊÔK‘ñ&:„Sw”¢£nÄ÷ÃVO?ßoÔ»ÏÆ·ÈâoÙÂ'ÿøÇ?¦çççÓëëë©^�œêI¾¾Ò7)y%äZ;÷³kÿµ²~ËðíÞ#>º—77nV«h?ÿߦ›ÍG=…9×ù¹àܤBÙ8Yi©¦–e–¼ÑÃ-ÙÔ™›ó-‡˜eÓé�–޾Âà ªŸêLɺvõ´µË¾n­Óªô•y±“¥)¦AŽ••Jè•`œãTÖ„æÉd6ë²ü¡nñDïœ_õÞzå£Îê= ûÔ€ >?w RIJˆû4:TÆe£~´cèöպȓ\>–Á¶íÃ�tä—²Œ1s@t_âé�ôÀ÷ô@Nìñ6Á¿†bKõÜKAb{bø’Å+±¾‚î2+€œIÄm§"#9�|Ù)7ËÐÃp úÙBèIÕ«uy…#x-Ù�ÿká72x-{%~ìTô8•ú‡ÅGIâÍpÇP”ÙpÍ‹tÄ­?d§æ»,ð9Ž1Ö¿�u7$à_(/�šXè þR\ÞÁ_èÉ>ŸZ]é½ÉÙB¯çkÙåJøj>ÍxÿR7×׿�W«ßµÔò³Ê¾×ï}®=——š``Dàï ‚ÿ’=¸Þ×ꔥÒ/â.þmîƒÜì;à5O×+�nÙH�àßÙòiÝë-:.‚ýrœ#8<ù@[Ì—¬MOØøD"ù¦—¿N‹³ÖCÐ=ŒÓ\wyÁ÷iï¢Ð¾–úg´q ɺÂ�z–YßrÓÑV”Y|®D]®›¦i# ºà9 Pü‘ÿÒé�Wð@ŒE_¡ú7]%O×g’”åÖÂÏÕk_(Ÿ«Õê½�åÅizs=º†o;=?|'Ù*I¶v’Êí쾆ܺȰOæÇR`_ª£&”.Åø[ú_5qðU|2â“ÿ÷~Îr({CÂ#ùºSÄáÕô1¼ºLM»®­sÆ2Ï�Û—MøñãÇ™nøK fÏÉ àÏE—,úL gS>¾¯Äçúxr¯­—ØoI´²èÉz±øt3™ðôŸ €“õúbÌ€N=N(¿'˜ 𠀸¤ö¹:í¥Ò=@'àŽ`+%À%˜¥Ww@i]³…ßâWî[ ß qGzl…Gëãƒþøw&x;Gš-Ùã�xª‚s:˜gÜ3Æ [.·É: Óé�ôÀwõ@N ¸ût�øLKíO5Lã‰ÿ'õâ|r-æRšÞ=¦ø™{zÙÙⱌåØ@§ð£Ê–S¹ Á¥ÿ?Užoº/TŽ'ÿ°WâÝôt4/ÑwIu�5íF´øÇòZ6(ëòÆ�øä{%êr};øb±˜)èç-Žò ?-™ü¬Aí'ÑŸ•?iÙ$+LøuõA> „õ+¯…2 Àg–ÈúMÏ%»Ð@YA ƒ;×ÌÂROÿÙ«¢úe@e"ôûµ˜Ï”H¼¬ÜP‹;�é¹Éº>É~^Þû7¯—ëÒïô€ß9¹}JµËêx8¶ÒÇ)ø'à׫OÛÀ¿àòE ú‘Ç_¯à‹§øà—.ãåÿÄ>�}/ö)ß<ôŒ¶x–F�¯iÊ�b{ZtQz†Ôãls>fèˆ[ž0=�H|äÀ€›õä|¤5þe€TÌÊ7×ùæú?{¸SšÞœT1Ahßq"ë‚[ǸeýDìŠö¶LMP¨¼¶+(CHL­ôš¯|Á„@0C©ï’â!¹ÂoŸlH¿Å7èlw™v]/ Ëï¤ €1S§^Õßp½-´à\{ðäŸÀÿ‹àï‚¿ ¾+Á�tKãõŸÀ]çNg—Ñïx¼Ô¤ÀR“ –þka© b!ãeÀr°(S®� {ú/:Sz =ðúà2.W¸‚Û2  à×[™u|ݪùoåJ¦¯qЏyZ,íïƒz?é/Oý™Ð+O^òï§þL”lŸDÉ¿-ÜýnW<]Á·§Àn¹O™X&Ȩ̂ž‡Ë›FÏ8pˆ.JOø‡=çºx«®ÒF]ó¹`í­¤Óé�÷@N ¸Xê�ôò¿†#'K-¹Öjú“�Êj*ÿåSÞÞAÀë»<Á?Éw ïNæ›¶4åxÏ?ò¬ožhž(óé7XåÉ¿~Ô¿Õîÿ� ö ê¢^>ùpZ5=—¬¶3u×t«=ÏÍÃ×­¬“‰Óéd©wúyïŸ %&˜Pâœú§2¯—ðxLhÿ£õƒÞˆ¥§ú¼ë?Õ¬ÎT“勚˜ÁS.eËrÿÞ†ñÚY¥‚ü—H<»º«·3kX®a®K´‚%ðï—À¼¿nÝm‹ïjxþÿÏÙW4mqLdO(ð/›þüÏç/ÇŠ/¬ðç?â´ø,Á¿! OWCN‡}¸å†4ËøŒ:Æ�±žšÞ'C÷9uÔÙÇ€}p:Æ #ÿ¥Òé�ïá�œð²>ÅGÇL`]6ÎÀob°ý›øÿ›{ÑÛž<&÷îFy ÷ÝèrÖ«iñy矧ü| P_,OþÿCp®MÇbÔÍ”èÅ“a¨¢§Ê[åÌÖÙõ7ÜfѳBêÌìÀ{Vhü^O¸Ê •!øÿ/j<ô‰yý“™~ðKo ă–_èfJ¤^Ý­+1N”‰V�—×úV·Ê~�¢}ŽÔ²yžà˜yÏßåó¬ˆ e_Öùáþ_îW÷íç´öiÐÂÍóé�näµh¬[Ç80ÖMŠå¡c=‘w²ÓC[Îût¢½Øî¡2ÉO¤Ò/â�Ÿv@Œñ×ÐJ�î'Z_†Y<5噋z݉›ÓùžœUn5ý¿ëIí¿NNþ¡Çç_XV¯ÍÀ;Ù`÷&æDÖÆl°TRAóÄÞ¦xW0$ÝA‰XÀòìSð^º_EU#o´ká­ÚÏçKâ“…NÒ-Í€‡‚e@çžÏ·}Xˆ@3Öâmqè> ì$"Ín%Ë‘µt†äæÇ2ð  Á[Ùe%~rš¼{÷n¢¥ü“ÓÓÓ‰Þé×*ü�Ƭ3�_§&�îf³Ñ5Á¸>ãW è›Íf¤Çÿ#mÌ÷I+K¾( ÿMø}Ô;þ|ÆïB­aŸ‰…žèÏËþ—ü5f¿Â%xpÓëÁqM[/az =ðí`RîˆT&ïÐuV™ºãÙÒ¾¶#ÜSǶ܀Î!ù@±ge·¼yàÚÙ™ÎÊ€L?˜<Ý5»û‰ïyþÉãÏßÂ÷ñ,3¤¦!»QNú±|ä#7 îä:LÁX–2­\—�ejYÒé�ô@zàE=ðÓNôÁÿBköçŠRÙ ¯dõÊsõº A–Ç—õñ¬Ë&á ‚_hM,4ðO•ýC¼Ï*ÿ^åÎ)«Ìn쥇wàOo_ãðH-hvœZ8<"ï#.Ç¡‡ýe.ƒW®$¿QÛ Ü){K”Nâ]R Gðô¼–Ìfà åå“�ôo„c»7L*ˆ¾‘Eiù)‰rT3”Zòo¨<¶Ñ's:??Ÿ³Œ_p¡§÷s²È¹®¸m>[,F·Ú¨�Ïö]kʉMûÈ�´ó߈À~³Z}¸¹»û]ø}Þ¬×'ÚôO?Á?åqù zEWåÙÅ¿l¨AqY€B¦ô@zàõ=POˆ.Á¿ZF§ãN-Bã4~?$CÞJÑ^Kþ¼¡Nô~­SÓÏѾ´ñ&<Ð�Š»Á?<~rŸ¦Cx-·^ 9КM² ðšç2–Y·ÖCîd™é!ˆ­CùX[Cu$?=�H<›~Ú žük{õ…"Ô3Áç êyJ~®.´ðY™�+ °�éÅ¥7STö»‚Þ/ŠÌ~“þì(/…ójÀ6Hv°\Cß]† Lì$l:Ò> s¤Åæ7,ªç½òZU^ ˜Iw…>A?�dš  Ðv2Á?rr_÷F>aSÁKÉ/UæRôWM ŽŠç„¾™¤ænÝeü±�ãØb³‹¿žüŸ)À?Õ²Õ3åSMœjàLùôf:ÕþU ú5ÀRVžú³‹„ÞÛi‰«.´üÿóúîî·MÈ—ëÍæTŸð›+OòyòO^õ$Œ�üá×�‰ K<=�øŽpðOÐïjá™6nhÁ­~…•7‰ÖýOMÓè§”9Ænê¼Y´NwNó[¸y5ä ër-ôà“¢¾é–Ìz¥�þYÇeÌßc™!½}õ •I~z =�xûý”IÁ;KýyÚ¦€•¥ñï±~Í“üÂyêZzz÷ÊôàÅD¶âñ&"ïdþ‰2ÊLÙ÷aµÙ|”ìÃÝfÃ×%Nõ›ø�©Ð<ý/ÙOÿ3¥Ò¯ì‚zR öMGY�—«ÖüR°Ý)~ËÕý-eû&= p§kXÜRYFfy +Õ$4ø©}Z�ó“ïÃ-¯!ž¨y5m`¬£¦÷ÉÐ%YœzŽM”Û—±í¹žÈ;¶®ÔK¤Òßä⼟2)ˆ�(È]èÏÕ˾WË{ülâ÷I™'úËVï ¯ï�‚•ÝÿYVÏ»ÿ¼cO.»î@Ç@Ÿr5mû†RÙÞYÌëëB´M‘N¦>ãÊñºW Í[ LÐÞ2@zñ\uA8Ƚ¬ÆJ½"+ þ§ÈÿdE+ îäOаé`¯&ìm%ÚÅaGø--äéþL›ï�jÿGgý¤I€ŠöÙÑJóô^»Pèé=�à]¸Þå_ê‰þÅj½féÿ¹^(¯(øŸk€�\—'þ<õ'{@ùœ_N|Ëo—eÓÏç�üƒ;Àï¡iC*¦"שūu^›¦Jûd.ÓÒ9–g x@Íí7ª� ÷éÎÏîÓÀx„”kéGÛA·Æëò5mG¸ÛUó¡÷¥XÎzÔãÜj#z>&—I˜H¤^Ü?í;à+Xå]–þ¿WøÅSüò½uyõ�ž_‚v{9ö‰çÏ䠥윉`ã¿SÙ Ø.¯ �p(KTr§ˆ›äît�‘GžHOðD~$Á?“<]fåƒv Û}Ê/²´›'þjÿˆcpF7f‘+Ñz„]‚DÔs£J¯Tžºà=%qûÊ’﫳´3ØÇÖ·$Ê+ÞÏYþ/œ§þDÿ&ü³àÑ¿)OJ°¯`]Á?ߺ*ß´Ö¤@™ �…™–óŸ* _ò5•ã|Z*P˜i´4&``A øûI€²ü_x¦ô@zàmx tZûÊ%È�¿eÛŽ �Ðlã†ATÐ!~­gú±ú.÷-ð˜Î´Ö�®y´¡Åû–¶eÙ×÷ÀNà¿»À?7§-¸O_ㆄñ!ˆN]>–3^ëÕ´m´ôá‘hÃ1 [uŽe]W<¦cì¦Nz =�xvü´êiK`¬ž–'á|s�`íÑŠþ7áÈÛä^^Ïç™+¯ Ìä$]–ÔZº,»ßééEîЖÃ'A;EÜ<×ohp(KÄoÈk D‰åÉ¿poä¤hù§É€¢øÃF»™˜© Kÿ þÙS€ý¾ªâ©* (æÞB¢ùåxÁIÐÆ ãȶƒ:åÇzÞ¯¸Pðþ±úù,$ŸñûC™`@º Ÿ³ˆž%ý�\»³äŸÕ3}  ;·4 å}&Jà_Aä™Òé�Wò@ôøïÿùðúT:›ž.¸?1¼?úûƒâ ñïK&öÃ{à>ðç ó³ûrÂk¹õjˆ{j4ÉuFÙ1tÔw»À÷%׃eê ¨ÝÈ2¥Òé�ïæ�Ÿv@d`®gzR­/â�hOÀ“ßÕ#¬ý»2¼�DÏì¼ï¹ Ý@y?{ï奼q É´ñÂìùÆA·#B·¯âqœåÉ¿øe†žäwúWžþÓž] ¸Ðm[Ýæx È•˜D a“=ùÊÀ_ÊúJb™|pQ‘ÛD56µeä�<¨>¥^ì;ík‡u"tÙºœbþñL¯t«+Xò?±Gö™ßBGÞʪ̔ɀ΢Ø�ô³Ü_D ú©‡§ÿ÷ÅH÷�‰€Lé�ôÀõ€ƒÿFÀï+èÌQD~‹†G²^G½Îw†­Ú÷ɬ?¤Hæ²  ðÄç©»Ù>�ùÙ÷á–׫u¹–Žy胓(gÜ4Ð<Û=ÄC¾/aÇ9ÚŽMmßÛ'€ïŸäK¯«¹‡1¸LCÛÍOnz =ð==À5Ë5ík—«»ðb#|ÍÃc 9æ(‹eŽÄûÞdG»Å‹ nkä=?T¾%‡WçÇÔ™ºoÜ\š×*·©6À�ó¹œñùùröñãé韞¯NO'¥“•v¿m´¯ðí­Ôi{!Áþôˆ—§K¤q@Í3�̧}ä á¶U—ƒ&E[çžgzR' În‡iËÍ/eäB&Q\�Lé�ô@zàE=ð&'è uÔÄ¡,¹wŽôL�gyßÁ«È²+�¾S_võ¤_TàŸr}ц�ü߉ÇûÛØ)íŀ߸¡{ì.*¼ïÑ#-Ûž¾…Ë ›‡R¼ îÃ-��èÛõùX cdŽC"MûÐã8ûÇÿœ'e£AA6Eü$¯°AàH-7ª÷VºÜÍW ü�Lð•L`¾NTAs‡Ò!ùP¹§òÇ'ïÞÍNÎÎfš˜�,Síú?»›NgÚÁ6šÍ7›Í?t—þ¢û4Ÿð{§O÷±7„f º/#ðé¾òù>Avó/›ùéL‹�þS—åÒé�Wö@¹kT�<ÆíÊtršÜvj\÷îÄÊ-�à_ýBÉà”5¬�rß;íëŒ÷µ¥.íu»Ð}sywvv~·Z­ðoØ÷öÓ§+Ñ·›››ÛÍÕÕjs}}»º¼¼=¹¼\iœp§‘ƒOƒí墣†çËÀx qÎ>^”F»‘néDø¾„Ýx ¦)s αdJ¤ÒßÅor@G®ÑQ ÔËÆ{‰ë�½_éQ Öé5a:x—žþóÎÿp©ðù¿SõÂL(`'ø‡Êzløî¹ Í“h+káðH”«SäÑþ¡„ÌòkÜzÒNüB]ÀV»ðm/#å59ËÌ»\‹Qæy5b¡›ø¥l_i†àJÿ•|©Ï\I—ïJ\’«èɰÝâ[§%¯y5í²À}²¨§­øôôÿôt® €åôâby2›-õ$cyÇ’ÿÙìTã˜S=¼ø¢Oø}ÖŠ€ÏZÆÿ~zww.-ôDcJE<ý_ñ¹¿0À¦~9°ëê¤Ò?šv:)wÁ>ÁOÓ_¢W®wd=^´ÑQ_0ê'øBH¡á+— 饾Æ!ñ7ówޝ·Vó"qW>ă_g—Iøã{@ç;3=ý_ŒçóÓñÙÙJ÷F~ò‘&Î'Ó.×××7›ËË+þ7ë¿þºb…Ÿ*+ºUœâ¥L€h´x¾Z2óbÙ/Ú�&íãuÃÿ]w<Ûָ޾úËéW�eJ¤Ò/æ�·:@Gȃéò¾µ ïë—Ïñ2Ø"ÑKº§ä"“vþçÓÿ¬¸d×uì2ü*z-ÈD èíz(K´•�Ü û’�Å:¦[ÞP¦<¾j3džœdn}äøA7iöð“0剾xÿ¨0ð·lü-Áß þÿV™±pV¬EßðJ€ô0 üÞé¸zy_Ÿù›*èWÀ1^.Ïïæós `ÎÅçܹÐòÅ� ö?èîüQ“ï4 p¦Ï÷± l Yžø‡à¿¼ {úkô÷vrÖ—ø%<Ð�ÑK�‚޽ô£}0¿Ë£ïÜýåîÃD´eÁytX‡Ò1:‡l<‡ü1}º­L;cç9Ú�6žÏ:×·ËÿGš˜ÜÝm´RN\vÍ™Í6gg_×—zÜÿõël²X\2INÝܬ®//G'WW¾GGˆ §Å1<_Ö�eáÈ]Þº‘÷”S{¶¡‡]–G™ñRŸ'r"€Ÿ"Sz =ðxë<í/KÎy�ŸM×€<ÝßÞ„îëÐJ<­~¯aåß«w%óI@>iǰkp€^šŒÎ¡,•­Žñkš„]Ò¾»‹eû ²˜m^¼Ûg�JFt;|œ>v"{NßK·Lž—A®L Ÿ _ ²?Àÿ—àB�9§4sÞlˆ©¾X©NEvU×¼¨pHŽî!�Cr�ö‹œÍæZpª'ÿ þßëiÆ=±û §ø4 ð^AÿÅf½¾XßÝü_0 —ì°€ þÊ*€µöe2@Ð+JÀ�*ñô@zàÇñ@¹ctÍugåkÚtYþ/=ø1oƒ|üÀ˜ƒí–Cè¼^2¹ý±Žš鈻ŒyÀ¡lݺlÍOúÇð€‚Õ‰îs3Ý+YÀÏÉ’–©î§3VÑ­¯®šPŸk2`z;ÕÇ„ôº»î£›;­ÐuÀ�ƒä{´O÷ÎNw:ó  ËFܧYmË:@R”Gºû¶yQ7Öo{‚AÇl[ð\μÚ~Òé�ô@zàÙ<ð–'h<}Ý~ÆOørìU�»W¥÷ToËŽn|°dp±OË t…?È‘o{û Llïè‘jØq»ÿ–EžñV¯oÞ>ˆ¬•±ë¶#瘉ÆÉàðlÛrÿüÒ)O¥³ÔN>'chå¥2_X`úž•|Š�çZØ[ ÞȾÞØV#ôÉ)6#5ýdáàx:ŸóÎÿRÁÿÅx:%øÿ¬üIù7 p>jàrªÀþT+NõäÿT³ódOtÿi“b Æò–G^â?€x@ª¥s�Ç"´"`:�ŽV«¹î¥§ üçkè± ²×Ýz½š°Àr9O&c�!|?7ä �ûtçô0nyÆ ±aÜÐ<à� d¤(ï8÷ÿ-»çtõ�,�õš�¬•­!î”Ãòuœ—)=�x^¼å uO”Oø‰æ~%»§‚êagÊÚʽ<ñg™¶qV0$ÛF¦Cx«—Ž<™ØöôæG8 ÙSR}lبyЭl]êæø¬?€”s»ÑqàÏ»y<ùç œðð³´_ô\ôRùBY«ûˆ •E�Ä$Áÿ•)�¥]îÃ(ôÏòšoù1°e7–Û_‡VhÐ2×gþNõ.ã…4Lü¦3åwMkü®¿i`?×Sÿ™ò\—™îÌs²&&:Þ²ÀƒÿƆ$žHüx(�S¨o¯o†q�Õ ÎÄ_Áø÷žEV .0=àwZâa×�pMוZnh9tä™6D/Ê].áæ�ó뉿¦ÿuŽOµoÎL¯Ê­´ªn¥`­I€¹î­åÉ¿bÙÍtµºÑF€×Z0-üîp}ÿö)Ï©±’×e†ô|ê¹^Zá²àQM2¯£þ¯ËGmè}Ùm�ða-ÉI¤ÒÏà�·:@==/Oÿ§Ówe`4bÙÿ'Ý?‹æÕ“ªÐCº3–ÿÓé�ŸÒï}Þ™è}~õ]FÏ80þG8‡Ž+¦šŽ2ã»�š¹Çúüm~ šçZÕíúOùÂ%øg+zÛ‰¼yè÷cHÁ$@¹�—ß4´Z7|–ýóÄÿrrsóuÝ­à«éúäúÔ1nÙ>~ԩ˵d´ì�X'4É¼Žºÿo{÷œ6†^+£mPôP}ègJ¤Òßä�7;ÀÎ}î)9B÷Žîã7Ë èÒ!ôcÙ'ôvw+îX÷u7tÝJ}Û&·ç¤L�\ÆüØË·dæùØ )î �®é‰º96ó„ØJØq½øÍå€uoÓVKµ@IDAT¢IOÖ\¨ž*Ëë+ÞÝòUõ¯ÈÒ+Yß\iRàV™ù²“«mU…,òïéù|ªOø‘TLõ=b-è¯ÛÜoª!ˆíºžx·ÔwÏÎ~—þg Nyú¡‘)Ÿÿã´Â™Òé�ôÀ½X�áÖl ÝùÞùù°rŒ½_î™(Á7À‰²VU�Lf3Íð³jœîºŸ@¦œé'ö÷á‡÷b~tîëþñŸŠ»œÇÑ®e8·%‡OвHƒ»}àNÖ7½R¾eÃü}mÜg7eé�ô@zàÑx“ÿ®Ã `¥7tðIéޜ͜=ƒŒ€—\þ¦Ýë¢ÓÂÍ’"y–¥^¯æYÖ‚¶UË|¼ðk<ò�9›oÚ�:ìSx¦�ûrm:¦Þ¯UðU6\ä«7ªƒêøÃT¿ Ÿ ¼V”­WJÖop­Oàúk¯ˆv…cšDsc‚y�ž–ž\\,4°Ð§üzï��‡ì쯧rË2ʼ·Ë®¢ M°Ìÿ7�J?Jÿ�£|6r.È)“)=�HtTK[ÉÜ‘E×™geß Ð ¨xHß|C‚ýò„?°òÁ¹§µÊv@›­êݼ~ òÛ�æ¤øÇ÷§¿/CN£cqŸrèÇruù(Û‡ãÑX¶EËÉú‘7„ÇöR®•ë².Só“N¤Òßä�79Ày€�ν {[‚~&üó˜Ö+ˆÖäa:×<÷¾È[¸y®³E«èöŽõàÇdYäµp'2—�WãæEÞ¢ÍǦq ɰ£Úÿ]&Ji�³‚û²@~Ù´QúŠóË ÀXÁ??Ë_â}•ü«~öø*zÌ~’¡Ë ÌQU�Zü‡¼ÓS>;´˜žžžÝ-g“åòT;úŸé³Dg€ž•GMµå@kÀ:×’D–üÔ ~»@4íçÉ”H¤ÔSÑý„íØ eB çU¥v4kYMï(¿2áNÚ06ž'AÊ$€‚{&xêoXþþéY ™' ¢¿¢ÝÄì>ù÷)4^NŸþH[¸O9ô�•·ô¨bylS¤Á�ÜÓÇ@ï|ŠÍcêM�ô@z =°ã�79ð_ÕD=.Ñ!A{Ý#ÒsêÝò™H�"SÎ�ÿIJØ×42RÔ‰<ËŠR¯Wó,ÛÇ÷1Ú¶ËÀ7¯ÆÑ�g¾ñÈ7Xó±[Ów¢ò^�]6¨íè0 ¿ñÒ=û5ÌcWC¼nU€Èÿý—dÿΫl¢‡ïo¥s£ßš*I†u•-þ.��†ôÄŸà_Oþß�‹wšx7RÖ€ó�–Ÿ²@„ jÛ°Yž:ÓÈõ�ª,ý×gÞ4¡½;û”ù/=�H´&ðŠøî j'™oXËß Ýì(«ÆYÇÐby‚~‚}`ɺ#˜W&z¹q&2ý¤Á¿6ìN}Ãî¾Ï)äK¢…ñpå†äûlR¶U>©–uÜûÿ¶}ÏicØ!¹�Õý‡s”mq®'vVÜ2I¤Òßèbå7™X@r€êžÖ�hŽI‚~gxd‚ÿCØiû5Oj;½³ë·N„5½/E[Ö«ï>Ö1?Â}822ɸaǽ?Fû¾�ÑeÍ3´\Á<îæg`¿YÙÀQp)^HH ½”ø|Jp#å•ý_}íÊúÐ(N‚ŽÕæ¿+« ÿ ½[zFЯ§ÿ?–åüZÒ¯Áe™°¡ÊëPÏt—eÅÇq¦AüR7Þ2Pë'�Hüâpð4>à’®“VìÇèVE�&[�ë¾ÂÇèouä ‚ùòn?A¾—ùë½ÿ8`�¢G™#ü¸¯�)û<à ß°»×ÓpN{ŸB-Ü—:–·xÑÖ>9zÑ–Ë™o:¶ ^L–E^ ¯Ûíì6˜Žå�µË$žH¤ŽòÀ›œøw5]ï‡o×…»÷ŒGä`¿†Pk÷1»Ç5¬ƒ×kyMӞȃ&™×Qió‡ {}Ûñý7Ïe€5¾�Gdþ¦Í’"¼ò£'Ê“ Ù+ûH�ýÊ“ô¾¿òÕ€¯ú½(‹9’›îª#o˜ÏÆ ØYö¯'ÿïYίÁæAÞéç’LP '½ç¯ Ù/`.;eNIÒ…*wû†Ë§$=�øù=à@ß0q `¡-ëá–�(èmñ,{ Xw¨O©#Ú¨ñr<:vøe™¿‚}ö­lüWV0AÐëàt |Jc²Ì�êŸú@N#Ó‡ð–|ˆ‡oZöñ‘×6áÅäöF8åZÉí@îìzlÏå£~Ë^òÒé�ôÀ“=ð&'8žîÜÇÀ¾{Jî`ßx„PéA�šŒy¤ÁI‘é"ìåæ×<Ó†¶iÚÐ=>tÔññÂoáæ÷áÈHÖ‹°“tõFÓÓQ'úŸ)Md�Mõ¼§ÀµtÖ’•,?çXp£¼ÿJù«tüt“$ TvR‹‡Â._;þëéÿBÿ™“ïô¿é1ÔïÊÿ�>mNÝ(]›T— ÿ8²O1&)2¥Òé�]ôAþƒ W«Pîä "U‡øQç­à±£Ž8¾pP_–÷ó¾?™ €~À6ØïuKÌþ|+™íx pšûT¯!§’y-Ü<ŸrèîãÑ~˃£kÛÆ�1¹ ‘îö×|ëÛ.Ð9–sy·Ûåj{I§Òé�'{€çÕ“îðJ[þ/‹ŠÖX*Î[�c'Ytüسô·�”Á)lá6j�HWÑ�ÊÍ:ƒ[×Ðeܳ›¶èÞÿn=ÛÖ¸uè-7Ä>õ#Ö¸ÛäÝ} }ÚÛ+3¸mXT=Oùû÷ü™˜20Ÿ^Ãt²~vhÙ¿öÚéÞÏ��Y¢±îÕcÝ«»aÂzÍðHò¥àË¢†èìãEùsàØˆÉ틼íe™=Ž>¹n³í´dûì5ªHVz =�8ί2À=àÿQà÷?õ„UKý§ÿ§²6‚›*èŸê½ð©"Âsš þ®»ÁgÊ{õŒ,)gI6c¹K8räŽA¦÷4^ÓQfx(KeG'Òà$l� k¼ÿZo¨‡GϲˆSmÉZ<”ñ 6�ã™i¡ÛºÑEFr{"Îï@9CN*ôài‹p…GàÒáQ;"²^ågçAÑ´àZ6 ­×C5„Ôa­$i-öê¿3>úøñËøüü³–ÿø³‘ïð/”_å/�Íé�ôÀï÷y|Ǿd¦¥y+—ÞFò.Æ�¬éùDÓÒÙÅiã#M•¼†±à à>NLá-Ù>ÝØÌ¨ù‰ÿä Ð×+zÚ“g®  åæììlöáÃÍæFûÿÞÝmæçç³ÍZÑÿÍͪÀk})xµZm®¯×ëÛÛÕÉ on‡8Ë— |pCd�ÁÑ%ÙF ‡mB;¹¼i ÛyQ¹u"tC¼h#ÚN<=�H<ɯý ‡.õôW;­ñTv©`©GÄ,Ñ^ªAÐïDÿ!úê yûƒàrE…¥Í¤ä%6pzQë´px�ÉRßê�0âØm¥CüVO™šßâQŸù†­6Ô<|ÄÀt¬ëoÙàwà‡A7ftm[í*“Èõ—'½˜À¦@NRÐ?Sšk=‡¯eý3Ôÿ·“ÉO’Ö¢™#Р¢ðǧ§Ÿ´óÿoeé¿Vh0~®¼P�ì €K2¥Òé�ƒ¨û;{’öÙÍê O°LH¯Lì /Ýeû\wC±S2^‚å±2릊 ü•SlAÄiÖ]ó_ù²ú×ñÀX¯ãMuŸŸÌç§“ÓÓ›;Åû3>  ÿÙùùr}£èÿúúæîêêfuyys§|û÷ß7'ýu'™† Ýe È)Å%a(ô� ^”’êò–#«që[tòe mÛ–EXëÅú]Ÿu¢Ì8¶"m'žH¤žä�W™ø]Ã%õè¼3~¦œ«g;W/H&È?×pê½d¿)pü]¼Ï¢?ÀÍ$Á”ž�€“À2fø¦�G¸GVg±¶¼ˆ£gºG‹^ ¯õ¬Ó‚¶Ë¡•�[f¼†±œe”ie>«'\�ËÅþŸeæQ–ÌobÜ倴>Iøˆà_¿;ì² €§ÿ}ð¿¾ÔÀ©è¥&:8�.VTk°p¢MþÈwþ·ÂÙaz£¬�Ëþ?iàƒál߯`Çaá™Òé�ôÀľmø£¯þÃÁ=AÿvÁŸ‹¾õ™´tð�¬tx±îžg–ƒÿÑF=&Py ®þRiÈòŸvÔ2Ó†/ÕÖ´ûcy@÷b­Ð MðkˆåÉr¹ÒU£“[ׄnôúlïbr}}5ýúõJÁÿÕø¯¿&Zñ§ hsw­U:Zß¼9µÀ q„qÃÈ‹ø1rôëºl#Ê"œärÕý§Î:ÅöÇ6¹<Ð:”­éÚ^Òé�ô@zàIx• €s Ÿ´ô®ÊÏÔ¾S÷Q�§üuï…M™nL,4¤*ßd'h%àlAzLødã-ïP–ÊV§…›$aÏ)âæ]Ž» º…aõϺ†•x‡Ä?Øexi…ȳ ¾“Ûbšß=øÎȬ'Û,ûç8hÖH›;ŽôʇWÀc�ÿLÁÿ©‚ÿsÁ å3M\ˆ®A©–öŸèí ÙþLˆßí,ÝÉÐ{§Áù; 6ÞiÀ}¦aÇBY³idJ¤ÒGx òÒsÿ]p ]‰{ú¢Ò1ùØO¾ä<ý/‰ ¥R^¼ºÚvJ½¾ƒý;üì�¯¨ÿ”ÿžÁ¿�»4¾ÿgž¡eûè(‹¸Ë&ü5< ó—÷a˜Xè¾½Ö]\,%M ŒuÃ_/—ËÍÕÕWÁ¯£¿ÿæ@.–»ÍííZ“·<0�§8…|ÉâYnˆÃ�IµíÈGn}pR-�¼¢þ¹��µc/Ê�cv}ÑFâé�ô@zà›=ð*ÿŸ†Pš`À©nïÔÃ}Ò‘|üM=ù“²TÊäÀ…†QЂL ®`¸³Ê N ;6Ku«[ã¦�$l’ ;êáË÷õîè#?¤÷°ö]>#@'î«»(÷ÿÐe}ç^´õ[/ríóPV¨_(Åì³ÜŸ§þç úß)¿'k˜ðOÝ6úýSžü³±<=ý—ÅÑ©2_8ÕèȧzŠÆ9΀ÂMJ˜H¤x öwÆ ¾KŸFÿNPÏÐ�¿'àc=e&€óÀm$¼NpÈZ]Êüô—úÑ'¿à €º=ÐöA-«ùÅ?•R­S‰“ü…<@¬¯ëeÂ+ZÝr§ëb¤kb¢Õz3M,Æ‹Åb}yÉ«~MHYS` þWz@+ÆzX@âò qj•K¥‡ÏÉÃV¬çÚ:ÇžòÑ~ ‡WçR~‘ �­ õLé�ô@z é�W™P/V>§!+Þ«eü,÷ÿ§ò™ `€Sá˘UFÛÆöQcM×PåJO ¼†–AÙöÄ-Ü< ;N7XóMëx÷&ô¬ñXÈüRn_&øÇ7èDÜõ‰ÝLÔãºl¿¥ˆmý莤·³@' îûÓ‰‚|ö`É?+>ˆþ(ü“îyŸ4(``ûÝh‚^`5@�ˆKo®Á2Oü窇WEØC€M#¥Ôq·š¼ô@zà—ö@ ¸{�A8xYþïLÐ)reúQº2|q ¿7ÝñIÝA�ëþhƒV=wt‘½òxß÷CÚqh<çÂÈé<À³~=í×¹Á²ÿÑx½ÖF>ÓùhµZž,·ÚüïTKgÒ₹Ó$Øj¢ §§§W7|%àþáôâ’0ºƒûR²Ü0êÃC?Úz �î¾Dý$Û߇Å^×åp¡œôÊ�‚[–0=�øa=ð*ŠÎx~2S�vªÌ+¬ø¢üOå?Åû¢¬G»'Ü4 ”ÎŒ2Ê ¹JÀÊ�a(Ó»"‹°Æ¡e©luŒ·à¾u %d:ÖiˆoEˇ õöAüDÝuðoz_Yd”÷ èx´‹á,�$›Ý{ÿ‚*W&t/c@�ñOÊ ÝßXðQð‹ Ÿòû¨I€í'¥84Xè2gYO¤?Õ�‘Mÿ&tsîp~Ó4W/4Sz =�Øï‚vú±-D�àœ§üܽÈî{€LP% ú£‚ ÕóŠÀÿ¬Ç˜žà_�Égúר§ºØsÀÚnMï«ÝCúÇèì«#e?�îîºWº¢{÷LÏø7ºfÖº÷¯µåïR{üp_kåËúNj£À+­˜j•÷o'.!N©îÂjãQ^ëY$E{‘×IwíÃsyã@Û?&¹MÖ²‰ž³u·P}JNl½‘Hz =ð¼Ê€"z–~Ï5°9S@È €ÏêéþïOÁÿ Þ C#ýuÃ&éšÑ¡L!tJá=¸å5T‘mYã†èïÑ¢ÛÂk=ë´ írGh%ä–E¼¥kžõ(7” ôIøË:þ]_QøïÐV¡^rø üù?Ox€òSê~6Ó$À©ò¹ðÊŸ•¿(ÿ¡_ý7–Ñ /¹¼ßL”�w÷�ašp?úf@Öœ9™Òé�ôÀlƒ~õ¥?Ò8Çà¿úï tJŸé2Ôår±^x1‰f³?¸þŠŒ „·­;ê¿0î~Æê‹�"#ñô@ô�?“ñšè/ç·‡1:Çunßé“ú(T9ïËçÿ´ëÿÕäï¿/GËåL«ý<„@…SÍÎ^Ë­gˆ�!d$tIQ¯¦£Ìx)tÄ?Û�6�cËÙ¦jÚü„é�ô@zàÉx‘ jãÿ®ç#z×¢è^;¸�L´é�x'ªp¢­þ?‹Ï’Þ÷ÿ¨ž�ÿxÏÿLy)šÉ�mðè;½ ù-ˆü¹2µ-ã†ð�÷èöNQó[´Ë|È�Æíª_zÀ:‘g?DˆÜÉe�džø³ä?äñJOåoô”ÿf4Z^j™ÿ¥6ø»ÒRÿÕ|~{wzº^Ïç•߯f³wz²v®§§ÚE{©§m,埭4ÐÖÎÀå“ì®íA±ï¤åëAµÚ��?NÈ”H<ÉîS€Î6dº†ÈÍ3!8 ��èÓØ7€¬‰Ð“�$úº�&8»—‚òª2ûR-­iÊš·z2:Î.ËDíö8„sœ¥¿F!Ó/ç΀rМ1‰„¡s£[µ§±¡î÷Ìð�ß‘ö àB@¥¨õ œrðH-ܼFýZímÃkÑÖwÛ\öh{µ.|gd7 $Ém�?u-º-�$ÿ§Òé�#<ð"ÿWz[�ñ¸”w²Ußd_((œ‹÷IÿT°ø‡V|V0ù^²3AÿÒã`e÷Šû e-Â-oA|g¾qCøÆ{´è¶ðZÏ:ßúN·¯N|ä@Þzñ8í ôHèšMþÙ´‡|ÓÃ[MÝjÙŸÞç[^O§ç ü¯.g³Õåb±YŸ��ï–˵üÏ×ãñ' ÞkÀ{®äRïÌÖ¼?¨ûq€e¸ePY�)Te¦ô@z =ðxľ¤…Ëy¨†XöX—¤o#ø/+Xé¤DÿzT} hE 5oKËÖïÛPÚøÈ÷íu.åø—)=pœÊðBç�dÈi¶·Ü°UÖ²¢K‚OŠõÔt”/…ñÏõ¸vlËx Ñ�ívÙ„é�ô@zàQx‘ žüÿ©`^Á>OôÙ�ý\Ø3²z.ò'M|Qå¼ëÿI™}Ðe²`B�ɰ³d;t”Gç9²Ìlí7ľñÝöÚ5¿E»Ì÷„òñNû¸,3 Ä¿¤øG>ö‘ñÔßÁ¿&yNÈe@›üh`¡|vµXÜüß.—w›óó©Vlð¿_�Çð¿Ó ûLÇ¥rÙó�÷ý×— ÁòTŒAr?ÀT™Òé�ôÀóz€ <æ!ëÇê •|úQ‚fú6ú=&J]¾tŸŠöï‹»q¢¬à½l‡ož u¶�¶«Ý>ø%‹O*zËé�¦t¢ëÉÿn2Íé³·Ü+Ƈ :Ñæcéº,å�M.k}ÚH‚?”‹‚þm�‡•¹ ÀnI˜Hë�™`Ù¿žþ.´äŸOù±¼Ÿ'ü¼ëÿZAâGM|ÿ“‚Æ�ð$gŸù+Ï<Ð×�^ÞPïh}Ë£nÄ-‚ªb[‡qCÊïÑ¢ÛÂk=ë¼4ôÝá1õø¸\9à‡}…Œ„œÔoº� ð×*�’µì¬M~f7“Éòf>_i`s½XŒoOO§|Xïúmø_èIÿ;M\hð{.{Kå™xe ,�ÆË*Õ‘)=�H<‹Tû`õ�=Ëjø@Q Û0Œ:5¯§é³ œKf‚³/c^Ùû$ÚùœºÊÞ( ~¢oQ¤·åbð&(Ãä…'gÝv›m&Lò€Î»8äàò¥…G^­gY iÂY´sˆ¶.z�M´�„�˜ ³â¹½ÈŒ»¼õ¦Òé�ƒx‘ ÞùW/Æ'ØxªÿN­`“?‚}Þùç“${§€ñ½žô_gr€•å‚Ë}YåÈáÕ5ïZŶåáÈIØuŠø>žeÒ“·ÊG�îr†ûtZ2x­zááG£à5�ŒD½è0 W0 pÝML5°¸�L6z àäv>Ÿ¬‹™–ÿŸÞiB@åÙòL§e€&ÄccÀòJÈö©?ã~2€Áåv ­z2¥Òé�gñ€û–�1Œþ·$•§_£¿+©§wxOµßêuqúî’¢Ü>‚ÀßN ‡ßçb£ÇËý4ÇAû±!˜)=pÀ÷'I{€OUëAƒbÞøDç˜ò¶UëC£ó˜äöP¦Æ¡cFÇÇf˜)=�H<Ê/2 ¡ËTAàBŸû;W@ÈSÿß”W/ÆîþlþOóå3€| �àÿTr&¶+x  õ*C#rì[¼( .Ó[Û‡pä$ì;E|ϲ·ñ!A|LæÙ‘Ž8w¤¸€÷ÿ þ¿*{À­öÐ&£›Ùlr;›-Ö³Ù©¾|£´ïTïBÁÿBŹ� ýî Áî‘ý€2B?]R™Òé�ôÀËy€6fjzJP[—‰´púQ‚ÿ‘vÿ/ŸTP]Þ©‡G€ýÔ´¯l/ÛZ·®¡êŒ�ÿ6è·¨ì �²�!ÇóSÛ�å~EÜ¡îWpzšïSºæGže†øÒx £¬…ÃkÕoÝ(J¢M$êÊEAÿ¬[è| ÀnI˜Hë�™Pà7Y*˜ç‰®ÂÓýOÊ¿+kk€“ªçú ÙL™o¿kÀòî?Á^™ °¬ÿVoˆ9ÊLZVÓæ· Lnm¶póZ0òÀ�¨ç9SëîUÛ·NÍßG·ÚiáCýfÅ7Çu!‹+ü €^+¸Ÿé5€“Õd2Ñ»üsM¬´«ÿù�àÝdÂ(wª�/»óÝŸY¡…«îò ÀÎ`2–¸À&ðtðß—}P�-yä,m ´' øëîźŸü—§ÿòEì»]}ÂôÀŽüÄzè�ª/Â8¬iáæ¶ÊZ¡õàZÇx-‹4¸“í˜>úx÷Á!;O©oÈVòÓé�_À/2 £‚¼Ï®žìƒòoê�þü7Á—_Y@'7M.8´Êð}øKü[< ¹ ñcè¨ÛÂe¶ØEF²Žñ}0ÊÀ�lËôKBù³´ù)uàçnw_š¶›ßÂѤNÊy@ö ó�_Vè½ý©òDAÿ]Ÿ7á%ø×+,–·ý94PÎXÝýt·ֲɠ2Sz =�xvз8Û¸iCó)SM#�¾ÔýÛ£ÛwÀn:–,òŒ#Ž ó€ü‘îå¬`Ø þc݉§ï_8\ûð(¯õ,«!­©uá¡GBqx5yà$Ûì¨ãþ»m”ʶä6˜N˜H¤å�™ÐÓÿ‘z'=ÖÝ>Ý«ìþ¡^í½‚Ivýßöp—Ђ›¶,Ò±üsâªvÛ.ì’"Œx”íÑ9¹¼iC÷æµ¾yw¹[òšWÓ±¼q×�>‰�žâwOù„ç`ß�åÿÎì ÷ýG-û×’ÿý]Ö‹ þõ#ëW•�’¥ËpêSøßex™Òé�ôÀKzÀý�¡û¦#n= SÄÍ;6Êz"àXÛ€½a«)s€o}hðȯy}cøJ�'ÊD…Ê™¾«o/_1€gŸQÎõ}@©ø x`TÖù�Fúòïx:Ò ÁÑb±˜\\,ç?ž®þùÏ›Íf³>¹½Ô?ák¥�ðõÉz͇6ÆA\[ëD^ ‡.øí)òÐ!aû1ÉÇËÀ‹™Ûl½ÇÖãr Óé�_Ø/2`²Œ¿Õ+R)yk©?áž{¼ˆ›wªø¶|¬_9Ê�¢N¤�ïƒQVãÐ1¹]î¹MG�ˆÇ?âèÔtÍ«å5ízà“b[Ày¢S–ï j—þ“Ûž’ÿ–Ž3OüYúÏ«x%`3ŸŸl–Ëmöwr'\ïýë‡Á¿tœbÝæ%L¤ÒßŨdõkÛì¾Êý–it†Ú!þw9ˆ#+q�ouÓ†æ¯LÌŠU øôÙå>ÝãSùg¦ Ô¢¯nB@þ@?Sz ö€&¹˜èÿù|9>==›®V·'«ÕJç�všOïDonnnW×׫ÍÕÕ-y|yy»¹¾>Yÿý·‡4qy>ñjØÒ1�fá–mÝ:YßòÈ«õ]:ÎèwY.7/Ôtô\x¦ô@z =°×/6À‹ýeP è^É=•ÿ­[Cz<ób/øOÔåà‘Z|ó,ß[2xNØj¥!¾}VËíClEܶ#oo•�º¶eXžþk°«]üKfÿkádxlôGàoÈJ&xú_&xò¯àŸ‰½ó_&xú_žöK'Sz =�xu :ðWÿTð‡&(7Üñ¿÷Á†¾T},õzœ{R‰Ùù4aÉà}&ðwÖ#Ý2«Ê„�t2¥¢ÊÕ£§ÿzò?ÏfËñry6Õ“}ñï´zd<^,¦ ô¯×——×Ó««ëÕׯ×ë¯_Çú¢�Â`–”g ˜äÔ$y8!|ä‘g}CËÐ݇#�e" NÙ:Õúµ—wã\bü­k(Q¦ô@z =p¼^d€�ÿÜ‹¹)îÉ càN¯fƒýˆ»<±ïºZº–?V§Uɶ"yE©ÿ7Ä·ŽýõàE]ójeà1Y×<Ó†æšO ®ÍûN´{ÿÉ•Á—dá@è+ ½áŸáÎ éè€òôß“Úù¿`¿•²:az =ðëy€~ÈYýÝ6ø'Èp¦Ï2´žû0÷æ½Ä·Úå·nƒGÐ?Q.Pz[¾üRžþ÷�àß6™0=<À^?“Ñd2?ÑÀ¤Äô\ŽÚj2™i`±¾¾¾Ü\^~Uð©“ñTûßÝ1/ÀBC†G"m‡-�·Of}šSëÁ³HŠ:-:òÀI.ÛQûÿcßuDÈp˜à?ò"ÎB ½�Ó¸X÷×—Òô@zàõÀ‹LàK »ç´oé­à!#;è7tÀoˆþ1YjM½}ü– Éu¶pó"<G�„ý˜âÝ¡%3¯ög´Þ’×¼C´mnõ4 ++4àeÆýJ�üW=Éÿ*øwýÄ¿†Ü™¹cñÞ?Ëþ·OÿÁ@ËvÉ®´‡>ÞŠ�dz =�x9¸?r`OE&ð'Ƕè2±UðÞr:6Fhé‰çwûKð/Lu¼L”À¿‡ý~úïÉV´úû·ìªlÛwð‘++Æã¹ûµbØ�ΓÑFï�Ìæó¹V.FWWë!Ât¤½„Ê9$�µ^ ˜,7¬4 ‰‹Ïà )òL­ñC¼¨k/z× Ÿegø¿ë7Œå±ÃðØ>.ëÔõÂÏ”H¤š öt.‹,ý&¹‹PC¨�Uôh1»—kAx�ÉR?J¿¥gÞ10êÔx‹†çÄñ´’}†l¯e¶óX}—«íѶ²@:V\÷iIÿ’5 À¾ÞýŸ›qÄË+*[&4x.Kÿ= >7ó¡ã�mJ<=�H¼¸Ré—êàßȜоxã^ ‚ä7ŒÕýuy¢/?” _pòVFßŽŽ ”˾>:5q< sb¤1ÆT+f:wîôÀa¬ój&z¡‡7ãùüJy¦¯�5 …ÍæN;Nô:€ø 'ã©å¡�!U´ð]Ÿ¢QyC:è;Õúæ)릌í1LŽÁ?|çR?3)È•x!Sz =°Ï/2@…v/Œ8²ÇL¸‡‹P&¶=_ä·pt�jù>>º¤caÔ­qh’muTûéɃ®}‡ö!ü�Ü5F=Ûµ¬n£Wð¾?+.ôÿ­àÿ_ÚØ�¼Ò=‡@(³“uyߟ  nèJ¦Òé�×ôcgõKå #°žˆ2ë‹ ¾SÄÍûÞ0²ˆGÅÈïqb ?ý/Oùå'&Øøo&ˆ ëfJÔ(›j€®½¹Î®¨©Ì'³ÙJ�þJßh2 \h·l6···w··7Z0»�NÙiR?r*C¬8¼iá-Í2?Bøœ¸æAƒ“Ì7´lˆÿPª/”Hƒ×ù�=ù1_xà•d¤ÒÑ/6@%ù$z«Ø{Ò“ÇIhçºgƒFf~ÄÍ3”ÚVϼ¢S-‡&™o¼ñ�“l³£ÒæûÎQëG¹eö§¡u€‘7„[Ïål×´!üò ît³í^PðÿÁÿÙÙÉÿ:=í–ùK�ºÈLQG¼ ¨5øc" $ãÐæu’üŸH¤¾¿Ü AÈLð䟬‰O÷cMH‹„¾,ô-/[nˆNÄ9L²ŽÕ“þçò“ðIå¿ðX$ù/=<@´ª=tRééÀ+6å¶–ù+ŠÕóþÍJrN£�ÆkMÜè+WúTà¼_€±î¤ë†‡ðcå‡ôæD�Øpä$ëtÔãÿ3ìÅVýôß–°ïì:-K˜H¤šx‘ 6d8É=_ì)éÍÈL��2ÐîÑ"{‡_Ó®¯Å�vj}'Ë mo¶t"œäò5^„úýc°Å¯y¦ ër5ylt+QŽDà'x àJ«¼`Ø£[Jìþkñv5öSÇìkÀ4Sz =�hyà¨>H}HéË<Ðò_ “$úçHá ÿ«ñg«mÈî_Ç ¯(¯„ €gk_ú©=À¥JoŠìÞÃM�ïîVš¸¯×—ãÛÛËÉ|¾ÐfÂs6Ô䜇ŠöÅ|¹Â]ú5n^„Ô±Ï&r×mÝšýÔDÝCù�Mù3W<ðJ2Òé{àE&lœ!S–ôбu°?Ô“Á'Yñ(‹|ã†ÖƒŽÉ6ky‹o�c!õÔº‘qëùnaóÀ�ì?ÓÀÈ3î²Ø3Ϻ@×c=xC Ý:óÛyâHÆ–íÕ¸D�JöÝþºp=H¨åI§Òé�c<à>˺qå¥/‹AIÄ)éˆ×² ï¥SÀG:âu;¢Ì8Ð8úÆ kI§^Þ¸qˆâᑸ„Ÿ‚»\ ÙDîú¬[ó ¿%Eû5iÚÎD]N|‹·³lzà'öÀ‹MhÁd þ �è�öåZÚú‡dîù cYÛˆ²(·mègü©Ðõ´`ä•ÞÚ Øë;’ËÑ>Ë(n<ÊÍ’|Lõð,‹nœ¸1ÎïÎXq[ÀmüØäI€Z?Ú-m¯Ýu�¤Óé�ô@å�Ø'yõR�ô'Δqÿby•ÍG“Ñæ£ ¿P�¡`¾æ×ô 5'ͦv<@°ßç>ðG\†=ô¥í¡‚eð÷á­r±Ì¾²´!ꚺ\ä�k®m�´ÛããúÖú²|z =ðzàÅ&𕃯°ÿc¯µ§L”Ñæº7„®“í™o:–iáæEqì=–¦LÝ[cc_Ïõ]_äaÓ6¢>©Åë$»ÿÑke~טѡþ8°¯ýRm&þ<å7¾£È YƒÏ"—€z3¥Òé�c=à~iø÷ýÄŸ Ë·vcÀ>„[9ÊáÕ´õ^ÖAzM»îcùÖ3¤ünÛ Ó/é�îé?5Äa 4—°‡-ÜÝ:Cr˰g|ŸMô¢]hR‹×Iîÿ[çžsßþÈwŒ×´�g s@í¤Óé<ð¢v1LôX~‚ ^gëšß¢‘‘† e¶a)Ø—uùÈÛ‡[ßöÐ�¼šŽ²ˆ»ëo{ë(¨pëÀ6$aÛâXÆön-hî‰� þ·^I$=�8ÂÛà^ºàîc¶xäoùØ<øï“G™Û×âYö0ô¡Å\M·êÒ�e‡è–í䥞ϊD‹‘Ç¥ëá�ô¼Útmß:Q6Ä‹|ðV²ý(‹<ðšŽÇJ9äð2¥Òé�8Nßa>'AÀHr¯¾/èGÞêÕZ<ë¶ y.a”�;¡S¤�Ûzûð(oéÙžý²¯‡¶ŽÛfÝ–�šGë»M5úPò1x ¾íc§nï!ÛÛò .=8ŽƒÎÚ€t|œepê2µ^Òé�ô@z òý�~â¢~¤ôEô'GØêcZ¼bhÏ¿§”Ùcî›D­>¶Å£øQVÓßÔ�,œx’<,¡08—o„ð�á•Ëþ@YlµlG¾q )Úí8÷±_j�} }’íFžq ÉeÀÑ?”Ð!;ð�8<~ãhÜe€�NXF{±|Ëø?–K<=�HÔpð,·zÖ‡àV±G¬g~M›ÿ’0éÔsˆnµe_p¿OÖ²•¼ôÀ3y lüÇyíÛ>0âÔfÚÃCdÆkXË ±c½(߇[t;ñ�“\_Guÿ£ ëXŽÌÙ<Ã[Z-™_°g¦ÒÅ/2€eÀÁ½ýM¯dž¡{0èkÐ)ò̯á�nÔ3Ž.xM×6Zt,gÜv"Ý£=î2$ôŒFÿ¯æ¹ľCYÇ6¬c>ºæ¹ðP¢Œ3¿™³WDûàžô9d·%¯m=ÀR( ¬ãñ´ì%/=�Hà�ð»Ÿ1/ö)ws>Ƶ¶õ˜2ßC·ž$p�ö#´,azà•<à‰C5ÃÃZÄ¥ ]Ã}2w±\Ô Žn–DÛÈH5Ït'íþÛÆ� ¹u(QÓ±²H£Ÿ)=�øÅ=ð"+uF-ÃŽNî¹Z°îÉbë›4ÏмHGýˆïÓ©e-^Ìõ¤F¤�ºñýyx‘¦×†nA÷èÔîö·H¶�·¼õ[ž8SÞ¹Ö•h›ìŽ=’aGÝÿ‡Ûm‰ùC嬷…CƒX+¼ÕÁ·Û—0=�xyÐ8�ÕCE|¢)M2|gˇZ†œdØQ‡ië}OûȈ» /î±RŽRÇÈþ+Á1x̲á~Üæ¦žË£ñx2žLf›ét9Y,Îî..n_¾ÜŽ6†$'›««Õf½^�nn \__¯á�ÜÞ®ÖÀû!RZø”5´ “ß‚»<0Ú†&Õ<Ó�´û‡>QqÛ‚çm�¶ÌK˜HüâhÅéÏâõÊ#/¯{÷`C°nÀ¾ž­Ö…¶Ý–¬Å‹úoÙŠrp²zCó �[<ìãgîdÆ�¶ ±NB“Ð’"ÞqîíÚ–a¬¯…¯e ÎuYêˆuS?™c·Mè:!3?–7n¹émyª|fJ¤ÒG{€>ƒìÀ?BÿqÀú®àGësª€Þ‡±tJpß÷³îi�ð þ� ƒ½o¬»SGé�oð€&�8­&ºngãétq·XœŽ×ëÛÙjµ:!þ×Iywss£ ÿFAÿ�þ›Íׯ·«¯_¯×ýu²¾½Ýœ¬× #â�§ê>­¶ü18ºÑ~¤mgˆWó£>8 ÛC¹(„´?Sz =�xà�› ¦Ò5 Öɽc Ö=[]ºU®¥yûìÚ^´í².×¢-s oŸ ÓÆ á£C0MÝ‚ðÈÀÑwr¯n^¤�£ N޶jÜ:Qß<êfúÜmpYÛ´e�h“3ÇIB¯N‘g;‘‡~M×6’N¤Ò=@€Jö“}Có<Pó].V�dØQ÷ÿk~Mßk¾Ö úÏ}·'€+OÿËýL>òÀv%€Ž¤è½Îe­?³8÷F£Éh:��æóÅx³9Ó8Š¡ˆ–šN''³ÙLW›ËËKÿW«¿þºZ/WZÍs§ ‚Ííׯ#MõÞMý\†Æ rÔ¸‡!Çò©¦U¦¯~k¿¥yÖ��6ìËQ·>–(K<=�øÅ=ð¢½oÝin]mÆÜ* .×·dð†øÑFÔ‰¸uj4ÙA~ ö댎y”u@ ¤·Ž48·-×ãulîÕás—A'Úv0t½¶c]èk}·Ñed¦$·ÈqÆTëB£Gªe·ûo½h»”ëŸNEÝÄÓé�ôÀ^ôÁl Þìû©¿'L[ƒàCiŸl¨Ì÷æ‡[õ^ésulî{éÓ òüƒ—Üó·vI<£Ê»þãñX¯ÌF“Ér4›­Cé¼ë•€©&æwWW_WËålru5Uà/íñ‰^ X�Yþ¯¢�zi”‡†0�F8åIÈIе®ùÀ}2Ë�$Ûî¨ÃÿÝ—õ±¹Dž‘Üë»Í�4ÿ§Ò¿¼že@ƒ€�Nìÿn¸5*€›®!E-‚6_—5]Û°~ Æ2µÜõG~äÒó’¹1:ÐÇÉ-œr¦[�€[è‘Ü“Ñ7?ÊÀÍ�ú.C9õL(@#sºÅá¡ë. ŒåDnu»~Úî„­˜"íº±éd9¶Œ[ŒõD~âé�ô@z énSdû�<øÖ�··ˆ·*©å5Ý*óÚ¼j"À}k�j¿ïA%ðW[=°}ú/—yíCÉúBp~iÀ�öÐ*”�ÎÇ»;í P&X0ŸŸ­—Ë¿´:`¶™Íj�ÜHor}}+úf¢ �c8EJDˆªyàÈH‘gÜpHn>pÈ2’åÕÕgü¤¬³ÛÍeÊʶ�–3¥Òé�<ËÀŽE GóžI¯¤äN©£úÿfFh|Gñ‘ÄcmDýˆ»Ú!|Ž�ñ:ØÇÉ1#‡¦ =6A6°Æm—Þ;fóÅÞ¦ØÆVoïò®ƒ þØ OÄvÚžá¶!Bb[h+)¶ <ê@Ó.t�$Ëc¹Nþç*€àŒDÓé�AˆÇL€¿/ø·ÜejÃð¶&¶OöuŒé6ø®ç«…F'Nlýû³ù%�çõ=À €»»Ù‰øë<k%Àìn:��V«åÉbq;žÍ¦â�Ö:'µb`=ÓæÚàz}zÊpËk ãPĸ!ÇlÜ0òáÈ]_,ïr@'뙂Øq¢ŒËEXã®;–µ�„é�ôÀ/ìâÐIêuw†H 6¬c;¦Ñ·žÛFÈÖºM±MàÑž•̃w|—5„×J¼—º{¦µ´’—HüòàŽDvpï'þÆ-Zߎ۹£õÌÈ‹8âš¶�ï C`¿ý¬jä5ÚC¿KÞþ:–r�’= ÐëaÂeÀ3¥žÍÝ Ó ×¨Î½‰žþÏt¯ï6›õÉ|¾&à—l:åšÕЄ×þõ5€›É_]21 “Õ§¦‡Ðqèqd$ó #ï18º®œä::ªûO=‡’í¸| F8ùÛ‡êNyz =ð“y€xôÅ“{$*2nXóÌîË”k%—�2Û‰<ð¨qËj^Í·]n;13€c ø�‘SÞ9Á¯q í -½7=¸u�Õm«iÊ9¹,å�©Ã�=zè8G:¶Éõk]ÊÐøÀˆ‹,| 'ÛqŽ û¦mÏúM˜“M·$3=�¨<@Pƒ|þ@ó#Ž>9¦šŽ²·‚ð·Í´ž¡>Z¯(¿Ž¹|þOrÓÀ¢ÓíÍDÒÏí6dXÔM<•aCG(úgR‹«Tp5ѧ777×wËååêôt¦ &V�|jÇaE 7Ï�²-©¶;Äï´w‡@æÙ†émžõÜCË�G}ø™Òé�ôÀ|ó€t8î”v*P/T„;ÌŠh¬t†ÈcÊ£cûߢKÙ:;P‡^ÓðcO î,´à.ËRŽËÇ <âðÐu®ëÅžS”Á+»?ës;Sí¤«Oïœ,noOnonNV(otC^+—vë×Þ(ßUððYÐ ÇH;9.çOâ­Ü¾Ø>ÙB“ÏÀ0À�â£qÛ9º@*¦^ßõµüú-z�Ð'•~¨‡Ð…ç ?BëÆ¦ÂÛ—É){ŒÎ¾:ɾµ�³}µÓý¯üôoé\ð€wl9azàÑàÊ-…º“q[¾0}M±Aàxº$Ûí¨ûÿ¶sÏé°¨oó ÑÌŒÕ5_âò�åüŸHü²øæ €–çtÆNÉ*-že?$lPì}9(Ó>À]˸cÑK£~Ä]ˆ.9ù¦ý”ß2ø1a³Nð¬G& þg}ð¿Tð¯ïí–@ŸrL¬5À$ÀNîye �ž²mÖx±Ã?%d¾cCS^?ËöÀ'…yàŸënªyÑ&3=ðó{`ïõñ̇¿­ë%®»=ãÛÒ©N` Æ ú[¸ÛeÙÐñ[¯%ß'ké+oÏqoM[ç$ÎÂ/]¼uÿž?Á~Y ¿m'z½Rå2¥Þ†8}Bw× n¹ñ–<Êj}ŽÔòcqôœ\ŸiÛ7mõ¬c^¤Á÷eÛK˜H¤ÊJõçpƒ;¡­-œeêU½Ô/;,ˆN‰øÖIÙ×k[†ºírpv�ŸúÇ%üÖ’¢Ý޳ûßuL5`äéÿBOÿ7šà©?²1|MÜêZVÜ*¯„o{S¬à  NÛká–üsžp›1g�U·éòôà,‹ÇŠ RáE}ˆF>t¦ôÀOè_­CÛ'{ àzy”­ÆŸÀj�ø´åÁ$úž0„çLÀ�"nÞ[ƒ±?‹øíô‘Ò3@À_rü›F/æ#ªH•ôÀKy@ù�O]×ažOSøtÖ‹xͳÌp_Ùcu°áäúLc£•Zz‘ë†s´§Kù¾X®ˆ®I<=ðëyàEVüJnŒ=m�ã‡ûîv�>r9ëC;¶ÌÐ:±<½ þ=ƒËã&Ú´=xµNY @Í@?H&øŸ(³2àz6+“2àTf í‰ìE»à¤È7¾�ˆ™Tt°Î�̸hëaÿ^´kÊ 7EÛÜôG£‰§~`øˆ‡Ðâ!â{m4ËÇk-6â¹ñ¾oˆfü—öÓЖV¦ÐcÚùÝØ çÂÇúhÓ• úMúIçòÄ?ÿæ·>|t¥Y =ð` f�¡}-5¤‹2ÏøÄ„eߊSž„½˜Ü–È«u�YÏ2Ó–A›gÜ�RN×nÑɉ\’)=ðëyàE&xv‹`A~=¿–#ö±rz1ÿÿì½ÛzÛ<²®ï“ü£{<ó`žÌu0ïÿêÖXÝâx#{Õ ñeJe�’¼Iì4ê T»¯ `‰Bˆ¢iÙVs1“Û\äç…Þ À/6ÄF5_¶ƒu¡ßîà‚p²µçÄâÿ2¼üô#6Nc“|ë#.ùi€cÇf_È�úVÛ}­‹ÿoºX�s`KgÛRí¢?°Äµqc¾ßlYßÀPF>^üÜ9ò}:¸Ì!Ÿ‡ ³g‡¿’—±ºØoœãÂ-ž(“ÜÔ&Û¼ UwÜèR–µÉ×|b~5w޳_u¹öà%œ5s±ßøûôÿ¶!>ü 7Åó¾?™xð´ô•36åÊñÕ¸ŒŽl ÜÜÈýWªüâz¾lCÎÍÜØÌ¡mðQ�Q�ÿ° ¼Æ€ÌZéÀüñd!ä°.ÏEw(ϱYf&Ï‹dþüþ_{æanÔ“>8~â|@³Å£ßü·Æ"ŸÍÿ-_\¶g„½Ù¦ Lûb¬Yn9yI„œmv‘+ò7RžòϘjs\¬?yZ?æÁ–eôA£hÚg`:¶,cªz³ù¹›bf¶`ïå˜?»sð inhã™Æ:/þÑ—ÚíÕÒ§c|’³çëÙ Ä7Õ¨-ìCfŽTv ´Ölm`ò›bðQ�wQ�íOÚéã‘3 ˪²H[æØÍñÙ8DnÉ~ÕáÙ¯½‡ÓÇŸ›>ãvŽ'>ßãá€VhðQ�ÿ  ¼Æ@·\±p<áÏàý§�3«Çë싞}Y+Ƹ߀g[–�e&·¹ÈgáoÆ_.6L;ãRÇO?pˆq°à�¿®;ÿæ ~ùí/ÄE"|óñ›žÀ³ˆsÌæC‡Ð{²}ËÅÂEΖ‹ Õ©Oì¿î¾Ú_æ ‘ó(Ã!ò+o-ãuTàCV }f¦‘+Ë1gù‰>}v0+Ÿ‹†[ñOÃøù9ÖðRžæƒ–*�A9¸í³��Æ] ³ãÓÞ_õU½ó–¶ZƒCúêÄ0¶Çã¿r7ÄÁÇœyHÁæ­*sÏöö;ø¹€¥�¢‰3Ua“‡8ËÚ*ϘçÈÆÀ!Ç„L_•²¿úÔsøÜÀ¨‹GÏÇ¥}ðQ�Q�ÿ  ¼É€? Ž1Ë0ÙüÑT0ëKr.gcdc”37N :±.þåù1rðRΣ ŽÝ1¹øgqÏ·ý\@· …àÈjØ›@IDATæ`S = 0~pë]ÓÅ¥ûκ²ý£Ï}O²¾Ù>å5ŸþÌÅ>áŒ9âÛBÀ‹ß°Í¯ØÐ� üaðó"çð‘-CÃö>É–ó×ø!˜�€#•”ŽÌŸoü½æâßx1s’"ˆ+æw;gXƒ:Þž=lÎ|ðy‘ÇÜnÿ�Z¹�ý5õÐG~wâ·ížÊ E™é Y¾æ#ûR9÷g>8ä·ÚîÔ¬­Çs² l•±y ™c4*0*ðT�×ÚÈÐ\¾˜]Ú¥‹E¾I:qÆÙª‡Ïpo¹¾?c\ÅV=ã”áàrsŽM΢ÜÙŽMŒñÙ–c•Å-qq™G7]ªo9µe¹½wqaèïûI†‚߯·ý—±èç�€üUïo¾Žuã³®,VŽ=ã•õñ±¨ŸÉ‹tmè!· 8ø ôlh³Î¥,Ǭ Ï-ç˜ÂƒO^}ê9>c³ ¶êÆg;r^h#×E>˜Ü2ž± ëW–“‹?§çíüè4ý!î%k’�Õ¦‡O•³­�N,<Ëâ°Ÿ©Úz:xã̛Ǒeskã)ÿ\¤ÎÄ.ºÇ$?¹`Ú ä\¤ÜÇ"h8F^¿«çåÔ]Æ49Î×'¶¶w^O¶9¾‡I‡iÉôTÜ“ãi@XøÜV2�¿2<~–´³€ÍVsåØê3ç¦Æ¼½W·l›æÃ\_fÐÖ⸙OÙ€Û¨a“ßË1ŽqŒ lOÙ^8•™<à�råø–09nIv‚²?óiW7Ù'rÆ¢Cä±§ ÷X±Û‡vlƒFFþC*ðN.;%cÑÊ3b†™ýÌ6|›ì¬Ïr¨MÇæŒïÑ!˜¥8íæ6—öªcǃŒÍÆ¢ÜÅ?\Ê~0Ô$c]̃«2:n¸øÏ¸pï%ÇLRµ¡ëÏ>í=žsWÖ×f=›|â´õôìS&v¦¸ mßøk�‹ÕùO†œ/v¬Øè·ÝY€=Ñüíg¾€Æ_p)dˆ£Ï®€ç/A×çaµg½ÉÓ¹šíäŸõž¿žßUÏñy°\v%÷raÓ®œu6lÞ �q[£¯Ú?²žç-duy3ž ý&g=j¢­•ÁZ6e¼Œ ¼ƒ ü¼#ÀS•© R®¼çÃVã2.ËæË¶*«ÃÍ›mÕ^}è•Ì#×�^[#8ôA££ÿax� J¶3éÄõ„›'µgžÞŒÓ³ó~äÜ;ZIbŒ�žŽ/çsœp rgؼøsó‹ƒã§±@Œ¾¼¨W†³‘â2±öâ�œÉñ€•ìOžmÈ�1ê[ëò+8[F-ÙÌ/\φ_;¨§gŸòM@Dä øIo}†Ü6Ö¶}å|öM¾¶)þf«ù Ï6ôA£ϨÀ|Î¥ØU[:ïvpaÏú,OøY¯ý¤|³«ÚVrÌ1Y¨ñÙ÷\™œk­.þë&ý:®Ê“võ�ÀÓ‚þÉp«/Í�yÞCž7¢MÎ6ä'ɇaTà7T`Zôûûÿ˜×ò©‰ìT§œ9ÆŒí�0æD†Ð!ǃܳa‡ômµ§¯5ø¥FtÆ?Í6,££|êúüÕ˜E¬ßú;9ódže±OCN°ðLÆc«¾ŒËrÍSu°Ù†LãsÚõáwÑO-XüÓ ŠU'™E¿ 7ôá—²¬­ÇgÆW[O¯½æÅÞk§nžÞÀôìÚjlÖ{rësº°µÿùÛ..èóEpÕç€í˜r~]mÁy�Pû4`ðQ�+à9/<ëYÆßôtþuu€³dÃ.¥˜fšô:†ì3t•×¼«àâô3§™\6÷È™»ï-þÍ#wl•W¿úGáµnèÙ–dæ»Ö¢ÌsþþŸCuC öT#°ƒFÞQ<%=•™²´)˶²<Û�klö÷bz6càPιµü´¡“ã9ä1÷x/ßsûéå¶Q�Q�P�רp‚™7ªí€˜QzÏh3ž³�|I÷ñµ˜êC'g&ócËò’޽—ƒXåº�?¾ÌYÈ£{ŒyAo.ã]ôËÁбõ‡ˆ©äx«¯g¯¶¬÷dûÂgÓ–yŽ}®ÝÄs,kzîc–½°õ‚‡6d.rC·Ní§“ßþôÑw“ɘ¦O2©ÚâN|îÛ Q�=ð<–õ,ãÏúŽœÏ»�³/Ÿ“Kö'}ç|8«n@�ƒíÅ÷l½œØ\Ü˵¹�íæ€g¹×ßG·MsY;Œ,{\Øœ¯‚3§Að¹E�Xø7;òV˜ysŒ—Q�ßS�í‰Yûþù3ì4ä’6í,ôm.ü]ü;~ô9ÖxüpâÕÅÒ/ò>òX+¶g×FNðêK²~ðȹa“Ä-�\ö‰ßg¯8õ<^ÇPýØÁÏϘ�[Áù¡‚³M,g·Ïز,fðQ�*�ÏàYïɳ-ÎAåùùÓ¬«}gÞ™‘·k¸Ž½y«½êÛë¯Ï‰Yϸõúysq_¹ßú×MpyLÊKܱèWÿˆœšÑ*%[›G§cõÿÆ� Ÿs­\×ࣿ­,úóÂ+sŠzÂ+{Úb¯rÏÆ!‚3v­?rA9ßÖÒ·e¬8¸}d2yssL¹¿,×ø¡� Œ üáx­ '’V®X¤î|óÏ¢5',|!ÀÎZ=ŽM;øc‰Ø�íI�ñY&lMÇDZq\ptäjÇÆx*SÂÏÍ\ÚÔáY&þX².äΤ[öiǦœã”ñå–íÊróä~ª=û�§/Û÷�ÑXyþÆ_[ã\ô¦ áœ×;2ŸüÄÔÅA϶ÓÙPFöWÀó]N„ò�ó¯éÓy˜åÖK>?³œ‡p¨} —sõäçÆ™+}6›‰|¹¹�þØÔõçsïã/û¾ü¿ÚO-s‹ãËs*ò¼øWÎc,øìò¨Ào­@ÞØÄS›i¹M�“ "Û+¶çŒ¬¹�Ë6Ç´dþFä®Ç–múäk¹†oT`Tà®Àkl8¹<)Süv½=�…o&g¸%.ÿRsöêqâÍ� f‰ÀéÏ2ø¬›/cÍÉ¢;Íälwñ/�i3<“ãÉ6åÜ¿6¹>u�iIoSshÏvz1Øh.îå½oýñ‰7ס|鸌_òbÏÇøør:¯Âý¶¿É“Îs� ¼» ÄysÞiœ´qŠF;;;;¹¸8;ýüùâ⯿.îîïâÌ}øôðð°Ùl8‰C†?|Úlü^ek�S:>¦Ñž¬M.®rÒ,Ù¦.vòc3'2±P¶m-˯9Æ8¸�ÈlW�ÿ>Nâ;‘c'!Â� Œ |Ä ¼ÆÀ“ãŽÙ”¿Ðt³w4‚3Óò<8‹bl¶gY¼GؙŖxŽYÊÆ™Ð<Æe½Ê9.ã•{œãu–ƒ#7 RÞǷ蟯5^�võçrël|®6õ%¹Æ›'ss,�ùŽ­ø¬#‹Uîñ<¾'ßòóÿ¤ÃÊKÿw†}^œí$ ÅÕ>ô?ºždÕ±k“7Ût¾dÛÎ9´½þy^åókIvÙ¯MÞóõlâ×øsâöÅàÏ­.ò³¯'¯�÷£øœöñéx˜ólÒ’\ýŒm�̳„[ó÷|Õ†NîlW^W×ç…vvr†{î/Cç;²¹}Jªqè½ùœÎ2ǵ£Oï¶)Ë9G–äV§|-ɳ¯¦—%ß’=…®æÍ¸×’SmÞ ¯þ×ìûµrš§Ì1{ÃÄw¾cQÏ\…ÞäànhÛYøƒ4*ð+s!ßúŸG»:½ºúr ý‹øªŸÛNÎÏOÏ¿}ûñxss³¹¹¹Ý|ÿ~›·›Ø¸ûþ=Öþq@¼Äay‚3µ®Éú+§2=[/WÆ"CÄBâ‘{6ìKTû7WæU6†jµ¼ãN€¥òû¨ÀŸS�×ÚpBi•¹‰×¿¢±øçÛ~þ‚ò¦3Ï1-à�œ±–¸88˜%rLbÔÁ›{ŸlnbÍ£Íæíéæ7n˾êϾ*÷tl/!��ŽY»Û‰Éñ=ì>Üš¿ç˶5™qá¯|gŒ\L{1¬ ï�y¼ƒ £ò8ZhΉA½“w˜>Nò{¾$s4õ.‘†õ‚¬îŸ¸|Î,Éäʾœ{ɾ³†Ïy{òKbk>rÓzÇóœñ<'¦Žý5ô:ÿ¨ËKÌ=s›Žý,d7vî˜ð%ÍPGÞEbázóçÅéùùÕ§‹‹/gWWÜîÿxrzzgqGÀõýõõ�³ëëë‡ÏŸÄ§q¾?nâ�øµÀרÓ�0µ®Éúå„U|ö)˧næK t|�y�×lø—ˆ¹/sf^åÓúu'`l,•yØG>~^k`§±ÀoLÌ$ü9ÀvßQ0ÃØô«ƒS–÷bÅÕ™K=Ç´ÁdC’éʘl;FÞfúùJ¬y•_¶a?ð,ë˶,W?:$f«-¿:ŽeD?×¾8ýòš?Ûׯ*n ³æ×G߯c˲>í9ßq1í¿Ö¡Ïħ}'p«Ð¯ùžÖwŽÍ}(oSŒ×\ßóÊÛ!Åû¬ÝslQŸj°³aЉ7ÏNÉêùTõp(=ÏVãÔ�Á³�÷rbÛ×üYùÍ!ß×ç{ò¯Ì1ÝùG¼œÃ·Åñ+sp^üóm`n”}ШÀ{«@[蟞žÇâÿòäáá Yq7ÀéÃÅÅÅéååÕé—/ßO®¯¿=|ÿ~qyyö�àywñt€ÿ›SŸ›)×¼'k“SåÊ{>l�Ø*«ÃÇ’ {�–r{û?âÒ›>r«±|ÞÇs¨Ö Q�?°o²@�ncbq¦Aϳ 23;FÔÃåÊ™o#·¯Ä/1’8mè‡ÊÆš+sóÈñå¼èÆËµ©÷86í࡞mëyþkk/“y³d3¦KÆïÃè'¦—G?¾,ƒWG†2fkI¯\Dç‹`/ª±)Oðœ§ÉSl“'¶éœ0^×Ös´Oߢ¶¯û¾œã¹ro\Ù†|Lc9>�kÉž1kñ÷ÖºsGígÁî|§¹úɋ俗“ûк€4*ð +ó_û @tyuzqñé!¾ù:�oÿ/càóÉÍÍUÈç›Øˆóøñ$nû�ŸÜñ3€ÜÿÄ)ïôÚ“±Ar°â2£9㫾ä—Ç‚.iWÏÜ|زœuìK œcoýŒMJ2hTàÏ«Àkl8‘t«3È“»Øz´qñÁ,“›‰² 9:‹Á—mè¸52wÆ™‹¸žlŒy‹\»±™ã³¯œ§'k[âäÂgC—²Íþô=‡/åÐ^ù±}ï±öâ�Áäxsæø,ƒU7Ž˜jk¾éÂß¼ðZ¸Ø6—ÜœŽGûœ‹<\hË þa+à{ ïÉ.¬æs‰#�s aë¢+é;ø)Ö(áºú³oÕ'¼æÉ€5Ÿ¸C0bá5Ÿ:¼6û/¯~û3‡ú{æ‡Ì3= ¶hÌ3ßä#Ûø¸µ°·Å¿|ÂR[cÃ4hTà]U ÎÍÓø Ó NOãyñg?¯/.î//ïO؈Å4Nã‡ÇûûÍY<àäËîpŒ)×Ó|Ÿ¬¿r† ­Êæ®öŒ×¯xlP¶o-»¯äƒ*Žãì}óÎæX2'× Q�Q�?¬¯±ð¤$1ô‰gÚUõ©ÿóÌ,Ç4;È1t�g¨Öa²—ÉXmÆ¢‹ÕfúŒ­Ü\=nsƒÉùsLÆ`W¯\Ÿöš£ÚÑí3c_KîåîÙéϸz 9öÌ>Çg™õ¿X¿ÞÅv ÙØ.� ëö—w‚Ï‹~rf½äêÇ«ï= RVßZúÛ{Žs’¯ÉÕ×Ó±A9ßÖòóuÍ·/öÿÏžŽ—òتŒþÜöÖã>þH�Ø7ÿtüœU¶yѶYŽ:>Ù8|D9*ðË+Z§�ü€;â±q~_r‹̱øéÝÝEû�öññáq³¹}ˆ‡Þþ|w œsÀ4`>S󚬿òCb÷aðÛ·ØjC‡è¿G9¾úñÕ–1øêqÅEã§¹HCø*ðZO&ÿ‘|çÛg+x¯YP}UÏvä:Se›±OqbàØ Œ—}ڶ蟹ÄT{Ö•å9ç’L.|¹-å“�o —í‡à3&ËæéÙôÁó±e»qK~°br\O6‡øž®�xüYïåÌ6°æœí�‹oùæo1,\ÖýúæÄCø¨àýÎm>Ž8æs£‹Yè’²\;¼Úªž±=ü±þ×ÊQû]ÒóñdÙq`£ù{õÊ—òj'_¥ž­b^¢÷æ“¥|›å„ç⺾Ís,øYÕ‡6?˜©¥ð!Ž ¼Ÿ œœÄ©��ñèé]Šßü_ÆFûCü?{ßþßăox6ÀÉçÏqrsêû�f^“³_œ<û^"3xâ!s#kC†²okÙÿJÌZsܵ¯ý™bT`TàCUàµ6vš¿ð�hÜkÝGcÆAg¦u†AÆV›ìÄ�·…8Ï‚ÎPæËâ 1[mùµ‡·o9ÑY®zöe¹öŠ/ÓÚ³¯'WzmôeŸâ«ž1Èø‡¸øãÛHx“ãâz–Ãö÷—/Ÿ¾þüéÇåå§›øýÝÝùù§ø­¿Ã‹ŽíÉŒÇs28îã£û5§£´Ÿ5=ûråCø¼à�ᵇF�äÍW†ÝÆ•/ä�¨«ÇÔRî‰óØJ÷ÿqj»+ãУîÔÔšÃk›Ó—y–ª¯ÉÕ×Ó±I9§¶Ì÷ùÁ¾&÷»O¦Oû­Ü¹{–sLοd¯˜¬¿79ÏŒmMǧŸc9Ÿ—øÂÎç?¾0�çwçy¹½Rà4*ðî+ðøØ;Q±ñ‘ÐדµÁ¡£»rÅååŒWξ%[¶#J_ÆcÓž� ŒÇ�ñCø*ð&Ô…E? yÈÙÐ…}Ö™m°» €/·Þ&~È<âóÌ%f‹Ü}·kÝjK¾%»9²?ËÙ¯¼6¶ž/Û”3GV§uyOÖ‘¥œC;6ò÷Ñ6´XØ798ú}ðïWWŸ¾ÅüGlÜÆÀÝäÏ9íç9<�ç¹ñu,½œØ2®b²_9cªmïX§ o/Î�ÏqŒÇ>f;ðkÜk¾9É^Z�|®ä\Úá¼Oê`š Á÷HÒqÏþCåŠC—Ì­._²ëÏüì!˜œóP™¼6b”å1µ…?\\Ò¦¾ÄsÌæwØ™'2-éKöËæÖ|^*‡ŸM€xšzãK›ó@ÔÉêºð'§¶ÔÝGÞSvOÑíf€6¹§²:í•g¾Œ×DZ¯ÉøÍ›qÆU?ºdœºý«Ã{l¹‰Çær.íâø*ð¦܈Å,ŸÄÅmèP¯Ÿ­§ÿZñêrs¢×fF±ò<–,‹×fnù&.öXøßF»�Å= |þ|ÓÏBÿ:þ×ñí¿wàgs Ý-`òWâŽÑc:&-±½¸šS�Üⵡƒ2vk)¯\¬³à€CÊò­uçuB6›ã@™íÄ6CʹµŒ×W¬À\ï)ç}z°ë«íýÆï{&'§²<ÛªÜÓ—lkv|™rßÙžåC0Ÿåëç cz2q4ûܦÏÜê[äϺ.éÚ37W¶ýJy_]ªEgñ?/ØCöüäÿÝöqþö?ül Ð6ÑNÃ×6¢Þ­Ôr…Ïœ¿²,£¯Q�gW`wáOþãtªV†C=;¶ŒSŸcÅá«vñÕ·¦çdÉÜêpÇžmU&.7ç^ã†>*0*ð�+ð&üà¿¢ÝE㱬ÌÓ¥Ú<û¡· Žà.úëF³±K-\³OÙtg/}ðJbÖf¸œÓølËrö#/å=¤ßŸódY ¶ÚôÁó«Œ2¯cÛZãý‰‹ë»h,ìoã~nó—#ÛÜpcàµ~à82ÏctÜÙ¿$׋éùª ÝØìëÉŽ¼þf‹ æ¶€A™ä–W;|¢96l,sžŸ¨éýe¡b¬‹sšpðU לDYŸå¨½r㓞åë{„¢\yöU¹§/Ùžc'¦GޱçëÙůáðÙXì+Ãóâ¿úðWª6u9ø,þ·ÖýŒÓO–s¿Ø³/ë!çó“ÿws•Ú¢?oD-Xà³c½Ém#Àþ¦Z±)°Z7ñƒ� ¼Ÿ pê{úËùx¬ÉúåÍ!xpÄ@KøêëéÙ†lNä}D¿µåDž혼9Ç�GF>@Þd€ãæ'|ÓÏl÷Û~g7àø{›Ì>¹…º£“K•ÅÂ!Ç•g TqÙÖéÅ~“©Å“ƒÖógì�GFþ� ¼é³ {É™½·ð÷¿‘¨œxg§CdûÍÜ™›¹z~}Έr°Êòl«2:2ïV{úÚóg[•ÑmfS—kw¼y,Y§Žl¼¿õg�Ïoü¹åŸßûóà?8›s‹‹peâv6$}cªãß×ݾçÓFm²L?YïÉOÆâŹΡ“w‘ð6ç‹>Ç‘kº�ŸùbÂá8´s}§õÎÂGÿôž6]yâ|&ÄÍŸ}Äg¹êk¾©ï™UlÍ5'¡‡¯˜¬‹Ï±È5ÞÏCʼnosn�×&Fn>ôc©ÆTýØ|/Åçõäl³/lÚåáË‹ôöÓ€ ïŸ�€¶ø�˜üLøüÕîðâÿñ¶à‡O2iÆ&Uôn+Ðß`Zv’èÉk6}r]Y® žû©úš/c‘É-‡žíúáb*£]=ó¥œ3äQ�Q�R�7ÛàøùÖj Á™Yœ]°á÷î8³‹›Èk-ÜÍO>qYÆ/Ù':XI{¶e_µ›_Œ<Û«,¦æÒ¾ÆsLOÆÖk5'Ç%SelöƒOjwÄÅÞÀ⟧ÿóð?ú\(rAØšrpó™ëWò||‡ô›�¹Ž[Ÿö¬g™~²®¼Úº(o¸¨[£jOI¨6žÀ·ßäNþùâ›<ä0_Šâáð=7B½Ç›-ê=û¬ýÄŸüÞ_?ɳ\õ5Ÿ«1köš/c×äçÆ™s->ûò¹Ÿíȶ˜ovÿÚ+·o8>)ËÚàÇÚsì{�©]®ŸcÒ¼�Ÿ“ŽìÝCmñÇßî?·üÏw„Ì<ïŸM?�ò´ÍƒNÍæyÈþøÍˆs5Mó`´ÉÛGbòf¹úõUNhµ¡C9GÖ‘�éÉk®%ö5b ö%Ǧ½Ÿç˜&¦I£‹ÆQ�Q��T�7ÙàWÑXÔ;£8»À!7Ü`áŸÿ~ûÏìÔkäÐnÎdr0ú9¦%œùsŽ}¶žßxûS_êö)Ës<¶¥Ö‹6ÇbΪcÏwÜÄ-ÿÜÀÂÿß±@cQÓâå ,Ë迉êñ: ãÀ[díÚ²®lÌšFg¾f+ÿÇâÓúQÛYϱaŸ/ü•áƒ^­;ïSdE×Ve’mÑïû°Ä¡þCup5ÆØžo ›ã²üœ˜—Æ×>ÑkËøÔ3Î`“²¼fÓ÷»x™æÏ6ãɾ,ç±b¯¾Ð9OÝ0l‹÷dcѾóm`ç €ðµgÐ}ÔšØyî§ŸN]Ç&@~C†üÎ*À¤àÄç£ik•г=ÛŒ/_Ãä\­³’›ñ=[îÒ¶Õ–_í¿"ˆ·é[Âê|T`TàWàM6báÿ¼�EþM,ä¯cVùí_Ñþ'Ú×°ó|À³˜]Ø8 ÞdxàOiÔ4°ssC2f'ZÕÃ4ÏØÈ‡¹É'U{µUÝØ%¾„ÏýæØlïÉÚàµQ—fãÂ,š ‘ÆñMöÜãËÄ7úþæŸÅ?w´ßüóW¦[ÿÍ—ã²\sfò>Å÷tëÐóa;¤�¥Æf?¶}:ýŠ©9–tcÌ/ûL^l¯qÀ¼ç�1‡c™óÉÊkÉœWïœzµè YœŒr>ïg™šJ|^Y—Ê'û²Ž¼�è«×ˆÓŽLu\Ø� Œ ü!x“ €xà&î¸�ó{Ì ÿŽ �ÿ7êu3Êy4.þír²ñ‡ðµ1qWÀ“ êíì|[øcïm0[ƒk‰Hæ®ð%{Å¡/a—ìæà˜z¤]FîÿLÈêÚvnÍ�û|›~\°ñÍ> ÆUIx¾í§µ�€i€‡üÍ‹žüAõ}ïO=¬Š·f¾7à«mIKœ~ôƒˆO‹“�äËã™q‡$ÿ‹žCŽã˜|n[¿.�5{ât7Ç[Ã%X2´OïaZ`'vÍ^û{I¬ùsŽ,ëÏ?-棙#Ób.j61râ•áê[é竾%ÿOäÇ•˜h=Šão…S@ÑXø³Pÿ,üy1ígwS€µÔ^Cž*¿�‹’Þ@ãeTà×T NÙ“ó“óóËÓ‹‹/g_¾ÜÅâÿÎÿâÿ¸º¿½½{Œöp}}÷xssw÷ãÇíé�wÿþw¬ÿÛ§2�|J3zm•ã«O|õUý9qäØGŽƒü¹§® ‡òX¶–ñ:*0*ðá+ð&·qíÀ@$¿ŽÙæïØøÿâ2íœËµ¨ØCؾEûòÜЧE+wÌ3‘3<0m±ëlD2lÚCœ7�!r�;†ì‹˜,›C›| —ñȌ󪸬W}©qìþ~¿ßŸÎ7ÉíIý\@'â˜2±�áAÜößžø<éÿ>âÈý§Q~Oë±õ|K6bó{e¥´U¼¹zÿ"Å8 �v[/ïɤïð¬?Û&y^¸¢ƒ“þÀ÷ÚC“§£m&u9F寣&K¼%°fûxÇ‹¸%{Ŭa×|KyŒYã/‰%ï±ñâá4æ,9²º~øZ?K~íÛè�ñš?£Œ¸ê+GÁgÝ»Zè„åœvñßòÅ·ÿØXðû­?ÏÀ–7ô±0·ˆi2¹íï#Ö™ñú°89�õÿÙÙY´Ë“ËËÏñuÿ=«ú‹x&@œË§§_¾\�ÿøñcsss³ùþýÇæÛ·›ÇïßOøkVaþôã“ §ü4¹Ì²¶Ê©ÕšM?<çT'Vn.åêC?„òq ÛˆEæ‚ÐKplö›9öA££¼oµ°‰›¦Øø³É¿cVñ›&–›ø¾æïàÿíð˜YÚóƒŸàÊi‰3ÑH&1ki‡gªzö#3ž}¹*¦ê‡öWûQ—“¹6j‚MÎ,ü¹]ÿ6ï÷±x‡³ˆ¿ Î&c¬¤�E>·ý³ø÷'Äö6jŽ�ª¯½g=_ÏÆ±[ÃüžU[O¯Ý>±q¡Ÿ/¤Õá=Ò_|;èÈ·³ ¨ù‰Í¶’ë#«¹=¹ÙâØõ©sÌnšÈçåZ)WnÑ´/éØ+fÉfŽCü»&÷ú^ÃWßsâs rn.üåúèwM^1™ªž}ï]æ³¾6¤ñs·#çx§9�M€x @«'‹~÷�­Ý€¾¶rÞàîZ¬¬â­yêoîgÒøUˆ39þdÅéö€ÍæË§«+NñOçççgqGÀEÜðyóãÇ÷ÍõõõýÕÕù}˜ØX<¹¿xøöí..P9}Û)œXäÊÃô³d3ËBìšÏØ:.ìKd¿rb뢿ÚÄ:–¥ÜÃ>*0*ð�*ð&ñÀMÌ·q'Àu,öc¹ë ®'â¹1³pWÀ÷¨ÑG HÃâç›ÿ«hfŸ}- mÖŠ¸6{ÊYøB^t cË:¶}Dÿ䄲¼µìÚzþ¥8ãáövMÎÇŽÌñÊÛ@üGvË@¼m‹y6�YÈKG%5`Ûïþƒ·�ƒˆñ€<®û‘õ¥÷”cêù¬]¯úˆÕ¯­§gŸ2±O(.¼Yì€iyС°-.¶ˆ'ã †‹ü™È;éóÂçÔçŒû„tÔs]Ú¡NÇÖüÔG�úioòdkuÄ�tÔFk¶ŠQ‡—mkvqÏ�;$·}¬ñ¥þ��!�-æ²ö�æÎa¹?å}|m,É—?»Ž[Ï®âœÇ팎Z!·qþ_ªÎüÀ†0¼-øã=ð[ÿvæ þÏe#€�Ûö“ÓÔñ2*ðË*Q<àü‘;..8/cN‰§œ]<œŸ_=\]]�^__„˜câ�Çø9À§‹ /9}ý¸TαkË1Êp?&æ[òõ°Ä¬Q>pöç8ùØg2­å¥Žñùß×GÀ� Œ ¼÷ ¼É@,)7?¦;>Gb÷ô!f�vG@¨ÿ ÿ·°¤-þ™Lx Ïø 6ôFÎ<•;K‰Ë i™ªž}o!Ï3æBrüоqé—×ì½6oÄtwñŸ ÷Ó7ù?¸�jÜУy|ïOä>üïOü @®ÅÚ{¸ä³næÉï6ýÚ×t}æêrÿ/æ‚FÊ6e|Èâ’üd,`Œ ùÉF@òÙåGå{+ÏtÚf>ÕÌ��f›¼…Ì\gœ“/ãžÈ×Ó[P¼ä|Ú2_ó¯ùȱϟûéÉÏ�ïÅiƒÓXHf�Å¿öÞx°™G¿zåÕ¯þÑ9ŸW[=–©^Ó3‹p^·U@Ä ·Å>¶À6ØýÆ¿-ôÁE{² 1í½�üÉ{�}ШÀÛW€ÛQÎcÁÉ9üàâñââêôòòëÃíí—ÿqGC‰3õ�ç<~ùrÄæG£Ç§�L¶!ñ‘:DÛÃa¯9Äb—ŒU—×Xqr/¡Ác«-Ê·�4ÆF€%|TàcV ¿ú{á±Ä×û›øíÔmÜãÏo¨âiw1ë\ÇÓþþ~œ»¸K€É†ÉõsÈ_£�kÏfÖq+ÒÈ™ »ràÛlX¹˜p7Â,Ño�«¶¬gy©/0PÍ[õ-j—1ÊðÜ8nuäØPißÖsÀÍ´ Ð~Óõû�ŸHŽM]ÎÃy`åØþtZ{O×|Ö¥ÖÔ÷Mû>�<`Ä›÷ çâZJêš2ÏùšÌÿçß2‹¼ý?¾Ù/Úÿ  z«÷„OuÀ>û¬�¾¢ÏõÒNñ³\õ5X©â´Ë×ük>â÷ùíc‰¿4>çíåÂfsÁ§y9òç çDîå}¦Æü úTÏq‰E}› Bvþ�cÏ.üë&9À·˜x�rn|ƒF~UÚ¢•;¶žÅ·ü±p?c¹�+Îûøæÿsûæ?üØ7›»‡¯_œ~þ|q!`g;•C†CrÒVŸ6pÊòjC7^YÌ>½ŽÉó"QàÊ×Þ7ëÔjsÀñWü’n*òŠÑ¶ÆÁr!¾HøÒÅ~ÃO`6ö�µÏöO1;‹|<‡ÕêñÙfÍàԉÜl‹Ùšc¼Œ üâ Äÿcí�ñ ÿ)«Öè>^ã¼E~ˆÞ°™ÊËÿ»»Ûxà÷°_<^^z£æ”†ˆk‡Â³¯ÊK±Gn(ã—ôŒUÎXäJâ̯߅?ö^7ø¨À¨ÀP�7Ùˆº0Ál¾mù}ÜÏlëo&˜Óÿ ÿXÜÿ#Ú÷X¬Æ#V?ÝçÛÿMÕŠÙÈ ý.êá•À`'2çV{»Wú|N_½líw—äŒ *t¸6žRKqi=¹ýÖ?þ,þwÚôP?üŒw�^êï×ZÕ·¯ð‡`jÞ¬ï#ù×0‡ôŸãk¾_quœ›}ÈÄš{‘Ç5çPõÏýNçY^,5_ØwhÒç8œ³p˜Rz9,¨ vÆT|ª£œ95‚vxØÆãÜÇíLÜ’ŽýŒñ=|öý í¯§×cêa´‰íql4üpmâÍ纻<ûzr/G÷[[k¼$A‰5_åv°j½ ˆ¼~ZÕé/îÓkŸÞ‡�gœ±‘‹…?ïÁ Øàí'ÁýÿXè¿cʨÀË+À™s§-a>Ïâ™§ñ³€Ïü$`sqqÑÎã�§gÛ8àœækœ¼b–äìwÚàP¶gY욬Þ#óWŸ¹õÃm`³ÜÆŸëq@­âÐG>HÞj`ïá»XÈB�-Vø\0Ë00f[ˆ�œ�Ú죱p0yñ�LÞl+!]•>È)Ë·ÖŸvõŒÍ6ípsê_:ìÜvßZü§5ËÚ‚[G¸ÍÍtžÞÏ­þü柇þ±àoOñ�Xû•3ž:6lú{¾Cü`þâø­ÅsާÆ[ÏšS;}ô|Úr>åÌ—ÆØ´ÓECè;‹\úÍ~M6û÷BJwåù8ªïwêóøcÈê™{ü;œ:1ðTÔ'z3¦ñšöéà*ÆØ}¾_áÏcY“׎¡Æ�µy êð˜¯ZÓ&¦æ©:xÈÈ�|«í=¿?ãÛ!8V�÷Ð^òñ!¯Í\êSN>|ø•…=1Ü!Ô~À‡>-úX<9 ½�˼m�ƒøA£ï q¾ò€jOH8§ræŒR¿>l=yÍV}9¯ù´�U†çØæØób|…yØ‘mUÏýÅT06(РQ��V�ß²À}þñ—Ú"ß'/þÙ p†’SXg£µoÀä…~oñ¯?ç£òfîØ°)‡¸H—å€ïbœÜÂßâ?œðá{p›‹~ê§ WgÑ==ð�;Xüó0?òº¸Écql½ã]ó‘cŸ?÷óQeëâ±{ÄרµœúèǸœC?>e°�¶Ì·ž-¶½ÿ\lOÍ‹zôÖö)�åÍn’î82VÛBÈ››óXèL}‡OÇ=Û¦º´ÁMµ°‹pŶÉ®«­êÚ{ØìûþÚß’¾v ½ðûšðŠ]ÊÉbZÏ’}µ}=“ñ¯%;vóU]ûHLïø°«]ûd£ºü5cÓ*‹¨-è›ôó¥m_ûS�ÁóÜЋù=¤Q�_VNË�S3tNomrmr¸$/Å,áͯ±ÕGŽCÉ\=¼c³ÔŒ;6¬Èࣨ¿e€ú°Hå›jf.X|ÓÐáØ˜]œaBœ1ÛË ,?gEe}æ�ç¼Ø2ã82“ûŽLrCô± ãÏíÍÂ/ðíOùÅ"¾ÝΜ…¾‹ý*·ƒõvÿé6x€ýØWc>VÆ’i)FÌ>¿¸�Ì­—ÇẕÛ‹Û—3ÇUlÖÅõx»ˆ�óª-ö8Ç‚¿q^:ò|ÑßP?_ìSÿ6Ëöx•¢�”kÝ“[-¦¡4?uA÷¸'níT[‰âϘ挗¿fëÅŠ—÷ré{�øœkMÞ7޵XÇIZ^è#Çœµc{n_Ï�Û7ö_åwa¾Äë8ÄU{O·6Æ #kŸbølÐø“ÿK› ŽŸdlÈb <#€…>ØxðZÛ˜þ,ÛÑÿWF÷ƒF^¯ñ�$£miW×ÎéŒ,[}Øôá“}K±ÆÀkŽê3öCÉœO›vu¹vx>Žlò¨À¨À;¯ÀoÙðIl@ÎB>i%/Ð�qà,pñe¨3�É΋ìÊòŒíÉÎløzr¶õâµгãg» .~y‚ÿulø§üš zýKœÅ¾·ýóÄÿù6ÒÅZoŒØ Z×­õçû¶Ï¿–Ã\•×c·fûŽÇ¸^9ª_ŸöžŽ{�“s&Þÿ©µEp:'Ìï9Òôt¾Ì9’ШØ6.ö'›ãò+¸ÇA_Ê‹|:¾æYîÈZ¨Ïœä¹6KrÅ¡C¿µl_—ìbÞÚO?ûúp,Ï忇ÛXð#gÞ“�]êœ3íÃÏÀI8_㟫ç1“£êKyÅŸ�/ËøÑÉ×ãᶪ,èùª}srDmãˆåNxjàÛ]Ó\Óþ/ç½ j¬ãhžñ2*ð*°]üÛq;µCáÔG–ãW–gòRl� Ê1êk>0ú‘!ûXÂâï5ðö…_û Q�Q�R�ß²@m¼€™Ã9‹Xf“íå@AÎ>ØlldeNN(Ûˆ·/¸¹×89£y²ŒOÊö,g?²y´Ë‰©Ä¹€ÛýÝà þ­Åâÿ[È`¨ÛßD,›÷±�ÐnýŸôö'ýÊÅ–c¨c\²;Þ}~pb�k~l åcËǼt|ûðK~íö‘udì™çþÛBÖ÷>xÓ§ r¹3Ÿ«ns^.òÍòÜ7ù'}ÆþÁ:=áÓ˜çã+ºÇ¤_}æ‹Ç½&W_OÇå|[Ëîë[ûÃÓêøÑµ)³(ì5ýâ÷õ¼„[²ïË÷ý|ö¤,¯ÙôÁk-ÐÉÓãSœ=¶ÿG§Ï7¶�M@r0¯„}^ø‡ ¹ýé@Þ_bð‹›tìƒF~Wâå´„ø ¹�¦…ão§=B�1Ù¦\y/2´”³ú²Ž| ÙoîÓcîñœÛ˜˜.Ƴra†<*ðÞ+ð[6¸€ €íÿ?gPuøÎ<ØiØ]ì†8ÏŒÎ�™ƒçâd�“c93.áöùk\?Ϡ̢Ãg°À·ÿßcáÿw,üÿæÏøEË ä'-.¬Úb?8·ý³!_û @oŒ ÍqZç2ܽ~ñûòˆûèÜ:y¼ûŽG<¸^ŒþìÓfLÖsÄà˼]às‘�s­]„£O¸ÖöfÙ“y¶àЈã‚?¨ÝÞrí/ë øÆ/uÜ‹ºÇì±&½ qÒÛ1b¨z¶µ€„éùޱ™o)æ5ý‡ô‘û;V¶nKqøi1?­6qò¥|KvâÞ+MŸ¡yxUÇ¡M>ƒ'aÉžq½h#¹râÃÆçˆ úyÚšÞéÓ¾ùÇ9À¸ØwáßòNc$óEÛ8ÀfŸÄx_pâ�ûQ`”Y®~}òŒ×&Ï>e89Á@æGÎqè�¸­¶ÿÕÜæ…¯µ¥ŒÇö»”gØGF~A~ËÇÅC!f é6ln`cBGf°Þêâ< ÖY‹E0D ò¯3¸LufÍz–�ɶ,ë—ã;„»Ï`€Å?ßúÿ;þÿúòåÓ¿¾~mÇG>þUFo‹;.Ƹ¨›¸6ÇÎ:b«º8}ðŒ?Æ/v­1§Në1”k[c—|Ú­ëoøž ±àò|hœ�⛼Ã9‡¦‹÷æö‚=ó)c"g{Bø”ïw°| ³Ì±Í:ŠÇ�oò/ò ›É ûtpc¬ü­ý‡ŒÁ±<—r `XüË݈MËþœÏsï�±å¸5ü¡¸µ¿ÒG žC½ãÄÖ«i²µÞ¦>sÏÙè‘Ûÿ#Oûæ?ÞǶ €Îsâýl1ô�¹!þ{Ã>çF̨À«TÀoý+�³4òÓ<Õ•áö*k“ƒ;“ñK2¹ðA9çÖòÓ¦~ 7¯1æ‡ÛðUœøÁGF>H^k NNÝ2pÀç˜@âá1îxˆK¾‡ØD»�vö;ãá;añ��žL‹ÿ.-z‰1V‡:ù"ng3 æÀo¹Ð\YÆŸõ*ã7ù"Äx¸ oðÛÿoi#,8xOóÜGO¶_}U'W¦—úÉEû˹³l?Ùv¬¼¯�}þCú[ç!ù—âslŬùæ1s¡-MÝm•åiáÅ]ýØ×Ìsž†úùB\ì·¼Á›~’] 4û†Ü#ûëù޵å\ÈêOøT‹f·.tæ1/q¤_=Çj«˜ª‹“¿µ¿7Fû–—pû€Ó¦s±qÿY#¯ýbÿ¨Äç'Ó>lÅ¿d×_y­º9”Åh§{óL6ôyˆ÷­énDü¼Á¸öÍØø3‚4fž9ŸyøUØÎ3qZ6:‹Tž�œ��Ÿ^\œŸ}þ̵òÃf³Ù^n=pÉ:}ï²ÙxyÉ鋽ò0=±íÃc®*«ÃýȀͤ=Û‘É“['ñŽ)÷÷ܾÏÀŒ Œ ¼Q^k 7<&'�ìÇÆ% ýë�ÿŽ™ä‚_¿' üöWC>ù‹ÿóØ8Ìy̶çl „¯5d’Ú²îE>åÌ™ÅiÛÁ‘�8ŽU›>äL›íÊÄÑ<Î̽B¿ØÊɅ;àk$ŒXâ3i×–ýÕæP/Ö>þ¸ÇŸëU�Lϯ� lÈ my[€‡� mùí¢>É ·½ZÍß’ÛG(yÌÊ­¯X,�µåÈ/iA‘Ís¾l�µU;:”ý[Ën¼rÖÆe3ÄGyç#�#¨—믣£ï®oµÀD�'&[³‡£mÄ÷?Bþ3É¿bF¹ÎxC¾ ù*À­îs´ËØøx.â†øí Ä,dâgÒwæÊräh?´Ÿ±êp_OnÎɯ »dãØrãò¨6r¬5r;®×–qUV‡CŽ›ØJú°¯ù�õÕ~þd=¿'‡g«yº@nß¡ËÛg$ëÈ.üƒ7œ|Êãû(_ rȱÏ;þiŸúÌ�ö›àl˜äµó¦ŸÏU|í8'Pý¦¾ñϤ,Ç¡,϶9°#düZLÅÕT/õ¯õ�ûÚ×OÆ>W^êû1í¹ý·4†—ä|­X?5_ÏÞ³Õ¸Þ±ölÄa7ç1rÉ×ÿaã³Æ‚_â³½‰+€¶�ÿvíõs±OßÙ†Lt³™dðQ�W¬@›u¶ßø_œœŸ>¿ººûô×_wþçuvuu‹üÛÇ››ÛÍõõÍ=ò·o·÷ß¿ŸÜqWÀ�ކÿD<Ù•3‡µÓ:ñlC®8ýÕ‡eüÖ²ûª?[«60Ú�mø«Œ­ƒ±ø� Œ ¼ã ¼Æøú¡g¢�ô϶ø ÀÃå§Oüà:œÿŽÊEÈ\>ð¸ÕÛ°aÿvÚ_ðXø~ ˜³ð]…m»[<ô'Ól×ïF¾ÈÓüpìðC¹Ä…Ød8„‚ƒËÔ³eOæm,ü³ìF€Ç–9¹Ô‘/6LjýO¬´fïÅè×g.í9®ç˸?YöØ­S>V|Úó¢[[ärÁ­=è>éúfÝM€â·/ûPŸ9óÃ…:9+6¿½#6�³ÅN1æ£N¾™ÀB“Í>bë_x'¶w¡Còv,öϲqk¶ŠQ‡§­ê=ŒXy/Fß!ñ¯‰Éý>G^;|µÅ9úÄ–1¯=†çä{ë˜ü¹È}-ÙÅP'0pH¼úÖúÓ¯7ö9rÄÌŸ½�YüŸF>x³O‹ÿMè'Þ@?öxßYðÇèmó±ˆ|Tàu*'[»åÿ2nùÿŸ•M<·‚]ªÓ¸+àìôêêòáG|ÕÿãÇõÙ÷ï×§××?6çqCêÙÙã&îØÄFÀ§ ¿bm§øô�›eNû5[õqDÆÈ³ Ê>u¸ù�!pÇñ4ó›Îå2—¢Ù&.þK j3hTàCTà56–”IÁ‰¡bb{w7Ý öÍ€6qû>ßþ³ð�àÿŒÆOx@Ì8l´Å¿Éå¹g¦¼à×/>/úñc3¬¶ÌÁëƒCø{¶æœ|Ê`+™'۱űï47êqà͓奱Ó£Þ±€sÜö¡ŽO[Æ!Kús >ìÕVcЗ0bÿTž�ÛÎÇÊ'b¢¼˜�¿ÝÞPû¤‘‡|SÎÜW–í/óúªÇ(•sÜŽýö½óíŒ'ë?�øgt/·¶vœ´ÊÍ<sÃOÇ>Ûí"Û×lúä5nŸnœ¼âµË÷ùÁíÃìóÛ×i¼cÌy�i.þáW±ú¶¨?÷•Ï$ßjO_©�k•>_-@ûÓ蟖š'ç\’#šQú9õsÈâ¿}ƒÿ¼ø§·èG<*1<ðtzÿÙ à àó Ž<‹w…ШÀÑ`åzrrÿw¶;âÿœG~JÊsb¡qruuõp}ý-þ÷g±ð�ßÏ=<òP€¸;à6®e=…ážöÊúühȦ²|ŸM?<çí騠ŠË¶(/Ñ{9@IDATŽÅ¸Ï6dcàƒFF>@ÞjÀÉ W¾åßÄ‚ž žÀƒþ¸œàÁ7Áy&Àß±Àý_!s7À=‹ÿÀ1Žqû¥ ãðÍ3mˆ P°þÌ]Üg|–‰NÙœ•ƒƒÄ)Ëõ£Cà jßZ¾êß·øg@,<ËdCÏ}æñãÏä1È«Ýü5gÆf²X1yLÙÖÃê‡Û÷>\ŽùÓä�÷†‹sI™ ãÔÚ‚?.žóïý]gifÝœÏu²¨HXqŽŠ|àwÆœð;"Ÿ~�¡È-¾äÚ—Ó±Èé«��úLÖÓç±d\•Ñ%Ç®¯¶}úZlöõrWÿ!˜:ž^Ž%ÛKb—r:fr/51rÇ!_ËýQ}|¡Š£&Ù¶¯FÙ_ãÔsNñø²<�uõËç��<>»�¸ @ÙxõÀ±‰éç´-þÑS_±XÛêÆ >*ð‚ 0ëÄ9z·ÿÇÍ©ñ‡*NOOâÿÏ3tž °ùüùëÃåååÉååEü5î ˆ;Tî㮀»ðsÿ?§3�ÓÖS»'÷lÒ�©yÚG¢`klÖ‘�Y³ãËT�ÃqðQä²=ËèÆÄt0îˆz x÷x­ €<ÉpÐN¿í$fˇl¿Ùÿ›�±�ÝÄWû7÷Q}ºŠ™… €öÍÿ´³zÁ<à,;$“ì Ncf‚ìp«=}�GÙxg9tòd¿²qŽ%cµ‰�÷lÕŽ.�§å�ý4lpsÊôcs¬ðc¨w,æ ¯,›W›:Üqe_϶„͹”—âõÿGq.„9à‰s¡ÝÌÑØØiá‡À4žåɦ½š2U<ùÛâ"븾7ês®5Á |xP¾ÈWfÔ½œÕ¦Ÿ�5ÆÛì‰Óϼ€áx<&y$LÆë«|-v-¾ÆíË[ýk¹ÅîëC\�¿$¶—¯g£�ÚâžÉ1T>þa:ÿwŽDÛßOŠ5êùÖlÄÙ¸¬g¹çÃ6ÅæÏ wñðù…й  aÙÒ[Óƒû ? ­Ùqæl9b,âÐ� <·q^mÀ]¦½‡Áv™l–�Œ¹…²okÁ86æZ aTà½Vàµ6êñ1‘åV'‰‡XØßÆCcáÀ1�‹hí‰ÿ1³üò=‹ÿ<‹;®bÑÿ%p71û´;H^‰NhÌPv.FÝ888ðYF‡Ì%£œ¹ù°e™P¶«ÃÅ"gÊö¼ð¯²Ož¬#ç±:sçþz²cΜùªlŽÜ7±™ôe{η›ýÊKñúÿDÞÞ>P�sQl+‹ÿ {Šñýh¼Ø¶ÉW^¹PŸb–Pæo~°Ä@Y• x÷Í_ù„Ï‹²LG¿s®…r¿­[ó|Üôß0ôEƒ–xö5`Âö|=›¹{ñk6}½œÙ§\ûÑ.ßç×ã/‰íåëÙè#÷£ÎP»Üøªk¼_�Z/?“=4ØìϺyôwôº0WŸ>q±ƒíú!:7>Dp46ù±ƒwóϸ$}êƒ� <«q"q»Ä6›çq">Äÿ=›h�——÷,þÛós6�÷÷w§_¿þ8ûúõúÓååYü^%?€!pêúß‘²§ýoL»\¿œ|Êrmð×Ó³ ùP¢/Èü[m«c£9um|n£tN†>*0*ð^*ðVûŽï!îˆõý§Mü½¿Ì>/g¶½4>ç:D¦¿¥vHüŸ„ás-ñ­wýuíýëù심ø�Õ‰#fŠmG`ŽàèmMsäó=ŸÃàØð™l±~h?_bpéÿ¬-4æ4ûØF�×Q�ã+ßúÇoûÙ¸ˆÅþöÜŒóŠOAض—c±ø?{x¸y¼½ýqúýûÕYü$ ~Ð6¦Û)21Ï‘s\�Ͼ*Ó=xìRŽ×v 7¾Æ`﵊‹�öØxR”ax'x� &œ<éphK¾ÞÄ…}¦¸3`»wŸã1ëòLþLà—�¯Bާ¯´$'$ÚÎÊ»<ÆôŒ‰™¿o:2-íRC y “¾¯¤a2_“«½}KõØðÕ&¶Ç=Žœ\Ö3†ã…Ö¸¾-rù5ãìOÛ’n6qêâÑ«›þž?$f«ÿº–Ûl‡`Äöø!cœ¿Ý�‹cð;:Ìy±²Oüç"[l¯ï[¾˜Ž¸FÚŽÑ3¶'O�r¹vYWΜz¥ÛÔ_Û yöaw,•ׄêâÕÁí‹1ׯñ·Ïþµ0µïªÒ�1«ÌL\¾ÜŒ¯ÜÕþ;t?#Ïé{-–cÄ_yîGŸ¶^]²m©¿^žŒíùé3cCåÆçóHk„³À90ÝÀâ ^eô}´±/Ãðÿ'U€Ù¦{¼Ûs-NØv‚óœpí¤Œ¿PÑäpmm?spj›ï¹‡Õ&g˜‡ÈâàŽ2~‰oQû_=n‘U'?Ÿßq'€|TàUà56z‡Ã©ÕÉÈø6YLJüý•O÷±�ç–ÿïaûw8¹)à"ô“ðñWàÛ‹ˆàèñS�6Ó� ‘Ÿðì¶gy°ËEà›œK�¶y§c*w6[ã6Ï®à¤%¹çÇFß•8>~[Åõô^>qæñ¸²~9>qÚõÁ{¤_Ÿ8Ç´¤‹¯8íðçúrŽ�.Só.ðýÆç÷þq–co혃溦^ÐW[»öa Ó;ÒÓ³¯ÊæË¼Œ‘Ìó¹D|ÁN=—¨Ÿçˆ‹ÿ –&)˱+˳­Æ-é‡Äô0kùôÉóø´U~¦Æ¼¥îxàUFç‹7fešq½q­ùzø÷ló³QÇÈ1VŸ¶Ì‰óóQs ÷je|_m[uûp¬ú+/yùüÒø?ŽñsG€cemEË›Ìuê„ÌŸf°2…mШÀ›T€´¶ðß.þ톓ŽSÚ“¯'cƒÄf¹Æ/{¨l^8d¿Èö½ÄÁ¬qŽ\Õ�5¿úࣣ隷µ�'/Oûר9&„ögcAÏÀ·ÐÿílúfŸŸð×Ú­þÓå"ßÞŸ„¿q~[~ŸÀ³¾DÌ—¸Äl—I�=�K�v'¡·¦LîÀ/6ðø¡}|‹Ú¾ŠÍ¶%ÙãcL6l¶¥8ì`2U=û�õ3>eìŽnï ¦¾šcI UÿÖºlÏ1æ0fŸ/ã>¢ì¢Þÿ±`j‹~tûWF7f^Xµ"åªw*q�¼¨G9Ä–1ûämÛnH¯q|á‚î(•ÏcJÃáó1'¹åbLŽKN€²<Û�¡5_õ·€³f[Š7æ¿ØÛª¼šlr昌ïÙ«­êįÙôÁƒø,òo�ÇŒôè¢Î@šs’Ñ�Éð+˳?Üó ˆª|kݾêË6eòfbL4ì´,Wl¸U;º}VK~bÄ#çF\�r þ¬#C½þôé‡gÛ>{Å‚‡òø·–?ãÕE}ûÖ?K;ßúÇ'¢ù±+O|çèýädc]`àWíÆf{µe}Ÿ<�¡¾_í\¡�ˆWn û<æ$ŸLÛ� Ž}IîaŸƒ¯1KyŸk7®ò|\Õ÷;uÆes¡�îb?sqòß9î×î;fž››º˜š>'[åˆ×œ+‡õìÕVuâµÉ;9Ûg9ìp6ü¿îq0wõþÚé‡g¸ @(•`~˜*‚iШÀ›V Îav«9ålôç)žå%˜vêN¼C,ÔÃõìØr :¤m«mó)/ñ.kO×Ö‹Å7hT`TàTà­6øà¯}øñ1‰t) øøeûWÚOb€ßûóçÿø‹×øw\,p‰±ào‹þXðÇS\>�Änú_üiÁÀ߆ü ylü„€ òƒù›ù4e#·6䥮٧œy•Ñ%Ƙ›c[ŠÇ¿Dø8†¦g#xh騩Ïå¾Ödâíßþ–lÚ3N¼Ú±AæßjË8ýï™Ï‹.�YäO-þDѧ‡¸�:û{òê±ù‰rq!ø{Åf}Ÿ<õÇûå{é{‡Þä: kÁ©E#¸2†%y‹Þ¾®a²o)Fûk`ÍÕãKù{Ø_is\púò,ó€ÞÏ~å8ߢ¯úYzIÔÍ|Ö´ê‡ä7FlΫ Þ³W[Õ{ñŒŸëöÿpŒ΂;ŸUö¶º >ÿ4õÑ>åȃFÞ°íöÿ8eSÈ4NaíÊràÊòjC¯yj¾Ó“͇è 2ÏVûiW_â5Nv¶,{|™7ø¨À¨À;¨Àklðw‚ñ�œ0z>1K¼ÅÄ7ü÷ñ0Àøcñ•}¬ƒÃx üö“€øOÿs\0´>wþ6 à\^Âã�ÿ ß&6Bçï»\DŽÏáowpáààz\¿3Zæø<@팳gÃ.éWïqÆ"Åñν1Šƒç¸l×G߃¾6&ñ`hw¦vñ– “œû:T&4÷gÚCmKñæÉ¼—3ûß«ì"6/ìÝ`ñÏ&@ÃÄðŒá`¸ ö¢X^ù —0ûìä0oÅ¢÷|ârÿ¤™tÎâ<öf6Ï„é²)¯õh˜ÜW–qfýX9 Ç>×¾”#ç«òsbjŽ·ÔŸ�…ÿZ—¹c;ä½û;ùsÇYã¨A¶õtŽ3cöw;g[²Wì>=ç MãåsÞÿÁ'Oûì·o÷ÓþR@İØ÷Ûx[üO¶øóìdlÇ`Ž­a¼Ž ¼r~~Û¿M¼«súy rj#ËÁ+˱�Yʓ㫬wLÙVík>Æ›‰|6íêµ/ôoÌࣣ¿±±6þ%İoÐÏ„ñ úø×ì÷À7ÿÑ®ã¿ù¿£ñ-þEèíÛþ�W�$M�?%xýWä!i,¤/b#à*.4¾þ>°;?[[ÜÂÃ×J\žÑ”Ád_¨3®'cëù r-F¹�µå˜µâÄЯ2¾,‹•ãó¸/œHÆ×¼øµk>|U¯/ëk6sƒ‘ò˜´õø¡¸^ìï²¹°oÃqáÛ¾ƒGãOýq!ߎ+qƪmwøgZZ<ˆ©~í$Xòi‹®l\ÖçÁì ¾GöÃ…¦ÙŸ�Ê« W—åªgß’ÜëK›<Çj[âÇ`Íñœc%gœ4l¶ü­¿6¸Ø:¾z¬žg÷»ô·ÇœóZƒž-wög;rÍYýYïa«­êÆg{’óçÖç}pŒq¤»w„O[oÿƒ» Ðæ�8Oø¿ˆ¿$ŸcC4*ðÆðÖºáÔ£Aí4œ¸:œS¾úªÍ�Å.çÙ'ãwLb—lØ¡~ëÙõi3†¸«›ÇSÎx€…|Tà=Tà­6æ}9È5{ž@ãg÷ÑXÿÞÆ#üY—óüi$8�żÿß·‰‡oøÃ×äð7þÿlï8ý7ÄŸäA€_w‰øÁÎ@^ô‡oÞh‰¦Äv€?Û•Ã<Û•á˜cˆ> ÿè¶æH/b“iU\Â÷ìÚZá#+ãA–Ó‘dˆcÅVyöõdlæ²^U£¿§c“zñú2w¼ÙöÞåödÿ¸ nÏàÛÿhþàè±sa--Öüúj¼vs.é­ãÃ_X,DöÏrÖ®-ëÇÊæÈ<çÈvå꯺¸5þœ˜µ|oåcœ¹åÅ~–Å`ƒöþCωmÆ·{}é8Öâ{Ç™kÓ‹Í~ŽºbjΪçJ™+ç¨ø¬ ·O2ù¢Írôyº ý¶Á:wøXü·oýù«lLñlŽN3Yù�GÞ®?ÿ §ž§ŸœÓ¹ÇSχ=ãÅ=ÇnLαφ_ò8ÐÛGtr`·M¦Æª­Æd=Ç yT`Tà7Tàµ6ꛉ›-6ýÚÑ+�c­ù?€;¹´Ûý'Ýu¹¾YÿWÜ ÿï±Yð-øà+-â>Gb~ À]<°µÐOÃÏONã§M&™ —x@~l’³ ¹G â —(Æñ‰ÆOòÏZQ¶[}öaÏ"ò‘£ÇŸ•p 2§9²î˜=–}:9ĘnþrþÏ~½úßÿû¿þïÿ½»ÿϬ~|Ü<ÜÇó«ïî6ÑâüÜlà··\ÂybÊ9�‘3gÔúåít/XpKöêC‡2~kéÛªOÝñ¨Ã±Õ–ýÊö­>ø¨À¨Ào®ÀklðÁ®îjëé½É¤æ±<=,>ñúÕÙ1ØÄâù.~Gð#’M€Øø�h_ðƒÿ˜‹ÚO ‚ó×b¿`¶qyÑ6–8Il!ÎrµáË„?Ó<èl ¹.þÝ¿³dŸS§‹£6Žébª7&mpå9O>ú•gL“ëEiÕ§€_e >¨êÙ†,YêÅâó«8‹üFÓûƒœþYo¸×|¡ï…÷hîÆñõp=_/§¸v0¾3¡d{õÍØ#˜C\YžmKé2v Sík1K¾%{Í}¨þÒ|/�Ïã$Wn.ò+·O±9Ç>ÙØÞù¸/öµüŒá¥ýïËñÖ~jql-똲ޓ{6ûµ~�aFp` }þü�‰‹sˆç€cÆL³HÃ�—Q�ר@{èßÉÉÙéÙÙùc,þO¯®¾œÿõ×_�±À¿|xxˆÿ›O¯¯oooïîoooon»»¾¾ûm³Ù<~¢mOQOÕÌ&:äi\ýØ3¦ÊÆ‘#ûС5þŸñÈ�~ò¬µNxõÁGFÞQ^c`íp˜0œ4À©÷&"üÚ‘3åØ+Nÿl� …M4¶]cnw\ðS‚ð6±¨ÿr»�Í8ûÛÿ(ò,ƒ]jáÚä”s#u®®�‹�|ßuà³…8“1³¡ \tMÄ…T£‰ÿôˆèsp=ìZßøvb¸p³/âúÝ5+±9ÖÍ[ý¦[²ã×gcöù2î­dÿ;89µ¹§Ñ§›ÂŪ¯rþ�xONÇ×àEÇ–û« ]l»PãBÏ‹=x¡£,Š ™elêÈfζ}öŠ-åÚzßöµ-þã}b ³Œ^Z«mØÞŒrîÎû6÷+®b°÷lVŸöçpÇ@¬ò>þœ~–bì«ç_ò-Ù{9±=7ßsãÓR¬vx•µÁÝ0—¾CŽw c¯y~-õUíôýÒ~÷åx©¿7fluÜKýôìÕ–õ}2þB,æ¹õŸÅ}·û‡ÌsO8ŸÚÂ?b&tž0hTà­*ÀLsÕÅéùùÕ§ËËMœ‹qêÅÆ@ü$àòìÇ�ï±Ðÿ¾ùöíüáÛ·³;ÎÓ¸9 6îã!½|ÅIÎIêÉ®,gèY®¸ìÏ8e¸”c±�éÅ›¹Ç� ¹6ìŽI>hT`TàUàµ6–‰I O*êNNÄeÿRžŒÏ˜»ƒ‰ ~pG� €vœ1ógoB¹Ž$ߢý3ÚM$¹ŸÆâŸŸ°ÎnA,ü ®öw `‡äKr>0YçÛÿu`/!‹¦õŸ/®¸p"bº€ªÁsLr€ÏÇ‘\MÌc®¾E�‹5ÆuÀE}ÛG•ÉŸ}ö׳‹­¹Ð×ê þ%ÜÅ>98üÔŠ ÝùáÔ}Â�s¢Oié}S}ÆU;¹ô!ëצŽoN¹ò¥â²?Û²œ1Y^Ãô|=[Î÷ù˜œÇ`—Ʋ”£ÚÑ{� dÿúé+ËK}j'W¦cΩw¬L¿/ík_Ž—ø—b{öž�zôìÕ–õ,çxíòð9¯µM°,þÃÏÈíÿ¼«m tþíA€Á�÷ 4*ðšˆÿ‹ÏNÎÎ.âsý™ó­-þÏÏÏãoL]žÆóN®¯¯N¯¯/ã�³Íùùiœ«<àôï¿o?��qY9!qª*˳MYN¬²|ɦnî%Û’�>Öˆ¼4Ç¢Îqrýl¿ú3÷ Q�Q�ß]�¶0~á ø`Ó2iÓ®.F;º…¾Ïø¥˜Œ9a x³kw¾Ù߄О +üïac€¿À³¸ô8 ~�ŸÌˆ’`DLwÖã@j Ó|€ø$ereÊ:nÐwn—ã‘»¾8B.˜)÷–9F}2oá“Òóå¾ôg[ÎÓäø�³cQN r€¨ˆ¶žŒÍ~ÁI=>û§ žã³?cöájÜ1:csá¿Ä9cÛ±QÇ ß„_õ2õÛ{Û§© ÊêOƒZ‹Rýè�sdÊö“—sd›Hmrí•g–sþS1û|kø{Œ|hÎCqK}¯ÅW_Ö‘sË dH|å[ï뼚û�óê¥=Ò×KûÙ—ã%þ¥Øž½g£>={µe]y�GÚ6oÿG ›œÿØé—¿ Ðþ4`œ?< Í6/­7Ç4hT V€/¾é�ÏóElÄe›rÏ׳‰ïñcñ½ÕvHÎC05oÖ÷Åg–É�Þk,üiâåÆäþ_[¶¯×:÷–ÆG?/íc_Ž—ø—êÐËÙ³ù^Õc¬Ø¬+gžëG®ðµù5dþßm¿ñ‡Gã.€¶›6â·ØÛ;£K í7ΈÑû ?±qÎ�ò €ø?8nC9;� (žÿ· ~m›çÑNÂÿprO¬ˆ‡ž|ùr?8�yÎKÄ|zöäló4Ö&§¼Ê•ëó-È9ªM½Æd{–s.dûÖžyõƒ4*0*ðŽ*Àºö­ˆ|þÐ/Éöïä¡Ï1è=LþcÍ| è q ?b•-½}ÓOüc3€?÷ǽYWÑXüÇ/>Ýo,¾Ù ÜoàClsF¯œAbƒ�¡%ž°Êô[cÈ8rWÛâbkjüÿek¶'àã ûúÇïñ·Ìõb±tÖ˜œ[;ð*ck_U£¿§c“zñú2—sfß³äxÈÙÚôž-.ü'ì³úyÍ Æ õÞÛ51Õ�nž,ƒÝGæ’ƒÏòZ|ÅU½Æë߇¯ùÑ÷åÜçí>rÊ™#»èGV?do�¡ϵ·ÈOÎ×èc_Ž·ðïË™ëʵ¬ñYWÎqÉæÜËO¦Ì[>é|óÏšê,š)ìNÿÛ�×Q�ש?Ø.äùˆïøCˆù?LÿU·“ùñl¿>½»»;¿¹ù¾ùòå"6â4==áZ.ÈÓ™˜ž\mâääPîqüæ»dÃ.åmrúÉÖ¾±›9²80ƒFFÞY^¼À$Èb²“ƒ“FO~Pâ—Tsê_Êî!6>EcÍÌZÞu:1§qà�_cÑw|Ç×пç�€Üð-dÖü;D  G`Ú‘ŸíY UŠAêš‹5Ù›Ÿÿ0bà'›(p|ëÁÏì>”ǓӇ¶O±��Þ Ä‚šúM›^ðM­óÞeä«ÉŒkþ'únzØv쓞;å(<&íÙVe0âñqA¸£W¿ºõ"¦�ñ˜[ÎâGÍ˜Ž»™Ú얜ا÷¤å¢F¹Å…/Béw§Kúx q‘½Fä_ÂØwÏŸmKò¾~{~ûÄ·$Wßstb2å¾²=ˇ`2¾Êûâ÷ùÉw¦ö»¤›«Ç±­µ¥œ¯eÏçTÍéx«ýXý5úØ—ãWû©Mî³êµFÕ¿¦gŸ²<òÆ¥EËΫÿw0f°Mp¾ù�o`?ñ'›6í;çuä$&Ó¯ú/÷9ä�[f¯8§hœKlÌçT|ëßìq³¹9Ýl¾Ç_¸Š?xù)~0ÝÀKC°í”nA}Yå9¶ç˧9~hŸm‹Ú¾“mÈ9º}WY¼Û¢„ñQž>ØDømxñÀž‘3Q8©(Ë÷„În'•Ù�s'S�Ñ�^å¸lh·ûǯ>}ùïàÿÀøWU„±qÀ‡ðÞ[Ü‘ÿ‡ØùZ±§þ³ŽLnIœ:\Ï—q=Ùãíù´™¿ñô>æ÷Ö÷t‡›à=pÞçµ÷'û3Nnóxô©OçÒö“7«M÷’\}‡è`–(÷“1KöŒ9T>$×kaŽýÚ·2<ëOÎŒ9´�—à诞C/É׋}�>öåøÝ~Ž›1@‡Ö³Ž9ëYÞfÝæ'wÏG·¶Àøí?›÷ñ‡ù®­´â|c”óÿ{“LÎiôa4*ðʈ/fRƸ+úöôé\emrÒ‚‡ŒA^³á—rŒ6cÕáâì[–ñ÷¸A££ï¤o½àa29Ô¦/s'–l#n‰zx°ÆèϺ2k{žÀ_ àOþ+­áà«u6Ú ÿÐO¸°àV‚ &“ â¸Lq¶›7´j„è£Å*Ã!ì[iû:õÍß��¿7ó‰Æ —ñ[³‹øæÿ26Nb`~2<¿‹ä ñŒ©Éo<\ô0‚i;m»û%¯Þ¾YÐ"kƒ÷HÿŽÏ‹Ã06çBÔÜÄ­ÉøíÛ±aƒ´#/ùªìu�§Pl^ø·÷5|³M à÷FÓ1¬.|ß2¯2º¶zŒö!¯þž^±Çêä¬1ös¬Ý¸CùRþü¡¸œ{ŸLN›} çÅõïËùš~ú^:—^«Ÿ×èc_Ž_í_êï{ÅVÝó¥¾?®ý�ϸ�ÛÿuÁYü·Ÿ°y¸[€;µÛf@àã¶íæÇÇÿáorî“wШ@¿í´œ\ÈP¾P–ã¯8}ò5 >,”sm-?mêpñÙfl¶‰Ó—Ç»-Ç5[»�¬ãn€\ž!� üÚ ¼Õ¾æ‘:‰ ×‰EÌŸýkù2~wqAð#ŒßBn·iE0׬ù¿óú Ž�¹ôpV;áçø¸ €k|Â4,¦æ˜ü�ž qÝB’ m±à;‹~®bÓásôÿùÿgïM—cÇu6];ÛkUíîøºÿôýßá‰]µ<ätðPzÓ0LJÊÉNÛ`3HBERCÚ`I•v<úÏö•YÛ©èß�š�ÇÑp¨Å"5Ðâ¿D�à™Î‡'Eƒ‚m’V&u =Ÿ:)¨¼I¦ÿ.‰'¿¢ß)v ï?âhøb|$›ÊoTa2[‹|ŽUÁ©Ÿp`OË¡b(új Ž ªñ€>K_rß ïS|ñ"D.žt#Œ>ÄW« ñ�±^5Û):²;DW6S ü[?’MñynÊ®õ©s–sŽ2Æ|\ZãAy¤»V=jüŸž/\yŸó4þ–ñÏêÂ+\ëì5¹½ uþ*�M6ŵègS øÀw¦ŒÀ¥"`wým®f�¯Ï]9t:u¼Ø•áñ$Ä£pAxòïåà$¯×q:žp ·»˜¤'™héyË·ìŠ;'ó»ŠLÂŒÀFà,�úrrÇ̉/fe0èáÈǒ콞·�rÉào�XÙâûÉÙð¡Yd?Û&À£Á{£™¢PI6n-Xå•“³�€èÍâƒeã;xÐàLƒÁ-i3a/ëØ]9{|·[ØÝ�¿mq¿µ…û,3û�Û7îíc3Û¹m°øgRS²Mxø †eqXjÔß·¤Jôå|, ^}‰¾ž'|¨b´‘6—‰|ñWÚl²V*:½P8�$+Ñ-žø^I>Àkrøc %«F¦§•¶¢Kû¿jâXµ²Ú�§Ú;e”nħÐ5x$ï·ãÔy’M�5ŸÞnLîu=~¬�÷1„ã_e×¢_P|‡|^JFù±_�»¬s”1æã’ò–ï¿Æ#ž5¾çy\ñ/Â^®ñ‘Å?¾d6J2ÈF©]%ËuЮÕeÖ5’ëF¦ŒÀGEÀzç˜)žŽŸ$(^„èÔxÑÎë z=O{�È�2h%ù ¤~$d1�ãCûöØ0‘› RÂŒÀGEàR:¹Õhexà¤8Ä+ ?µAõhïõ¼lk‹xþ°”i_\ÛdáÙé<úgpi°,ôY¸[æ%ü²ˆï鲈7QÉ=N´Ø÷ }áÔ±ÈÑï§.¯(Y‘F¯ì.†ÍuÊDgÞðÁÿß,l‚dm`ð,Ùd¶óÐ=æhvåÑÈòþ-Î,Q@™�?#1¡#1 3œ:*õ’7<É Ä6NÞ䇨àhÊd|· þ¢L< ê…ŽÒTžô�5ÉU?Ñ‚²Ñqjm=ÚL\¾jÒñ*Ó‡Å?µ]µØDÞM¢ŽêUã×xÒŸ‡ì‡dc¾O±ó�\þ�ÊZô Š/8Åï%u¨Ç¹úZ«žç(cÌÇ%å-ß5~�G\jü©<ÅUú=d¬g d \÷Œ�×ÊkÈm€ÄÉõ¡û·ÂÊŸŒÀe#ðöñÆ]¨�t]ÑÂ#¤~-d5}ñ¼œe÷µ éˆTùžޝ˜¼.¸2z£ŽêTóý'�Èœ9—ÚP59±ýIîqƒ-û!ˆmL~€‘¬¥Ç€ÝC¿ÙYx‚þÙ–ÄcnåŸ çýÿ’…+‹~Ê埀o²×�rG›Ù«�øf»\Ú?ÚÆÃl~{»°Gïl3àÁž°·n·3«})ŒI“l&=– {å#»¶äëN½êˆìM+L¿àï:¯”¸ï¡ô<Ü/ö­Ž5ü½Y¿“Lc(ž-í19v:6-‘�¾l<ŽžÊƒ/¼£_o?„GY�†ç“êàyŸ¢ãm¢~¤½.ø˜<ê×èsøð~ñ3›µ�Ù�»òë¡ú—ç ?Wù§–1dO]©ç�ÎGÈ©‡¯C,3Òè+!#ÉÞëz¼Ózÿ+ƒe”3?eÀ c#8×?ñ¸ôÝÚ?pçŸoç”Å?e“ñ•)#pÙ¨“•éºàRéG™§½^ÔG&]áÒ‡/(ºÅó|ðC’êTÆ^¸êèë`§d¾pH�S7#pj.¹àëÆ‰®“ÝCÉ„ z{�#'ÉOG½ý•ޏ-]éEùXð[Ó©ñT`,ÇËjøÎöK+ƒÏ– ÿÇÆI{0 ›Á¬ç|`;·ÅÿÌ2O/ðÜ#O#»g kž¿(�–ƒfÍ/¸›ÌIæa«™ÒiÉ#?XO—úôøUò|x’‰?X‡~‚*Aù,›"¾ÔD|¨Î~’.\°f'™`M§Æ;D¿¥Ûâ×Ê«ñNµ¯ùü(uWÖb_�ǰ… ~å¶~TL[å;Î�Vº´¼U®çëøÕÓëG\mˆ0êõ´�†p îö¿�V§ýF@Ãìþò: ‘¢ŒÀ@Þßõ—2—º§‡È"O42tI‚ÈH-ȼ}Äe $yç•'úPHÝT_lE Æ:ÁW=ÐÏ”È\8—Þ:É‘Iq?pü�¥Ö€Óâ{-�±rÇä¾ p[Ûo×6ay^¯×�v'ãÎ&&ö`À­½ À×Yûo—¦°´�ÿ-m ƒÝ·¸+¢¢ß¯KûÉ¥á”�@±®M"û}ßz7I}'ëõ¢_O{uh%°#_t,S6@ÚD*¼¾­…_¸od÷–{…ñv1ŸTÃ>otÅ‹Ð+I¯…{}á^W<à¡|o;„×üÖxC>>[F}}f±ÿ^îñÏ®ûW+ŸØ �C-o•7…ïu<®c"^„½|?îõñàî?£¦] ËB¿Ù(Éüv£lGæoFàB ›‘éxR\䉮Éà©ËÖô¼�ÇÑ%yÛŽ3Ì“ŽìEA•�x-#‹õ‡—)#�ø \z€fø�#âÐ<®æ{}ñŽ�~@’}Í7z5¾lä§¥Óâc?æ[eì¡Ýíç €5OØbÿÉ } <åhsë9sûàæÞtlàÞ&;V�-“ž^ýo—h]¹CC;mWhã•V#ëqA#ß'7”½ŸT×lá‘b9ð¢ÌóÀ÷e@Xò´Ç%+Jè1ñ wt|•Å;Ö·Å�zÐ}ÛßA¯u¼ì\~£�?êµèš}�ײ¿¾ê $ëN¿‡âK˜éø¿¡sçÒòXóVy-~´�ô��Éi¿ïE…×ûçÉB¿¶ À¦1}µl÷6y׿D‚³DÀú^éžô4çœî)ˆH¸ô½^äÉ(½åÑšäËè8¯¿’½rÚ˜ÊÃÆgYx_èfÊd>!Ù°�ÏÖ-å÷':ÍÓÉÜg¯ëõ°;5É_Ë�Êné�Éñ«6µÊhùnéÃçÿÆîþ¿X<Ë£ýFãÇö6«Åbñ¼^.­·Ûß¶ð˾a°±ÉÁç€E™ýtÇa¨Œ¯#£-ýÄÍZió7–®#iRW-]Zçqhù@$(ÈûÔ:¨žïqÌŠOƒò2D{™ôññ·z‰.°¯§xè_urñÜ׳ÆÛ ѱhÁ!]/—�ˆO¡k:-üC’¯—ìj<É®Rï˜õ€øÐ¯¹M×^7b8t]R^ó �ëÔÒ•ž—×pñ»RJ_â:PKðK¦:dÑz;®%èøkŠ—'ž˜�×ÇÿéxºÄÉtGÏíç D.}Ï.èýÀ#Åò¢®tвýx;ñ€â{Þ18õQ[¢ý¹Êˆ~“Îd¸È€+«uRÃ×@³drÕò#ù±På´ü�ÉU.z-èŒÉå'B6xàÅüª k|^ý6ø¸^­þ^ßÝ­m |yc‹»óÁßÞ™³¡:Ų¾Í„�»I›«@‰n6ÌlKÒäOŠq¢i|‡p\¨\_á’‹FW¸d@2ùbá$\P:À«MŠ1Þ‚‡4‚cDì¨î×ó<îuÀ‡dÒ­éÔxÒŸ[ö-þŸŸ­CÝ•ý�áÔOò¯ÜÎÏŽs,ŸXê|Š2èKÊ[¾küÏ××Ë=.ñŸ1‘�E<‰ß’�†·Ïð{=’_üËO'ÉߌÀÑè/Pfÿº €³ÒM{¯Â¥«î'ˆšpÁcyØ©<áò$ùztœî·Å¯éÀC(ËŽ6)M)Cº 3�3DàÒ¾ŠþdWÖ‰ïuÁ½~K'ÚJû2¢-eɽþ˜Þ˜Üûòxy`µZ±°³;þ,þù ÀgÛàC€wÛ»»ÕŽçx]À>hò…mÜÛ¬æÁ;ú68@R?Ñc‚«àª“ˆîûß8qôB|õrl‹Ÿ†¾ïC8î÷¾zž¯c GG�ýƒ“ðCöm�:ˆ¯.éQ1�×èZå9¤1XÓ)†áG~{OFy¤Q¬ñö& -û‚ËOWQÝ�ºË¯…¿ •ôzžþô|ñ ×x~ù&]RÞò]ãG^¤}�…{á=ÔøZÆFôû@Ûµð]fáoê7;ë“ÈËèÒû*›f§§Èp—)#p`ú VÕ YÝ%áêÂ-9ºò-›ÏË„ ¢qïCò/ò¡}ÂwLjs„èÕêí“Îd.��ØÐÀà0xcYúj¾üˆ¾T¹SÊ›ª;ÅW­=¼ÆX^°nxÀÒÜpŽp~ó`¯ÿÿúE0ùà_¹óo•úeôƉûçÏjο4�‰›O6¡{·(ÖäÎôÞÓ/ jMñÕë{·…m?ØS¢üƒãK~À«©oz´§”çx¥Î½¡ê"Xõw Lb­iÉûöŠ|k²£ÿ�ÈSýµì[üªö骴AY‹~ ôíóø§WúU€¸úó*6í’rÓXþX™Cuô¶—MÏs#‹$%ðË�~Yôïù¾®½/Æô7}:SFàØpçÿíÝ<Õ¦¥ë™Œî9†G¹·iÉÐ!!÷8<ÑàÞšTãu’ö/6±,ñäOPõ/õ°�8Ûƒó'g»�”d2§EàÒoNnWUø>;Ñ´ =GÆ#¼N”JSƪË]ê0Uï]}íξ½Ú_Þù§LeûŸýõ×n¶ÙÌn·Û…ý×ñ½�žÜù_™pcðç$&qµdüx=á`m®3È¡uÍé'ƒÅ•ÃÑ×AÃU“}9½mäG¹üïËéëW6¨�ãu„ûíÛã8×…*ƪU¤Å¯AµÙ¡x´9��S“oÇ©¾>ÓžvÄì7¾K;?3ÆSÊ&ÎCçÔGÈ©§¯C,óÚë Œñ°2ËøÙ—ýfñ�Ìår÷¿×Û»1¿Ÿ÷¼D2‡G Ö�à)Ç˾ôáKW�Z oA¯#¨òk<|)IÏó�‰/= t�‘U'Ñèx¾ä²Cž)#�¸p.¶`\[³pµ~“ü‰>”1Ô ñÆI bA¼'kƒK´­éì8dªžLÕ—] òdu'Û3�evÃ×uÇÿÜåµêñ1üwݨRlœÐyM‘É'v=NÐØГ÷M ‡ÊÀç@ò¾„ bN*‡²C ÞäR·¢Õé—zºúÑ”:ªí½¯7`Šý#¦øS[°õxÍrùDÏãÑÎÓQoŒö¶SñèsÌîP}ücãëqª}­Þ§pûà‚âûº|6~j�¦œceŒù8Õ^Çk¨ʸ¤ü˜ã¸¾É*Se‰�^Ä¥«rÐÉ”È\0Ûpuö'¶ü‰î³¸ºÓíܽA½�7‚ ¡AÈ‹±—�Ú z ô홢?¤C�5xÚlåVq3®á=dŸ2›ä19ÜïOÎbZV�@yÜ ¬—VºL�׈ò½Žx{ÏÔ'Ø—'ŒO�©û¾.Ô‰$^G ÿ¢;ì©-¥ %pÑÂ=”^„j›`K¿¥mjt´�tÍæTÞ¥Ë8·ùzœ8èn?|�KïÔX¥ýa î:ßj–-�åE:ÖÑË=ÞÒÐ)› Á²Àçr-•Å¿ÙÚ«t….×↿L�#`=gnËÛùü~vw÷kö÷ß/Kû83�ï×|>ÛþóÏãæùyµ{zzY³)ðøø²þóçeûï¿·›?vý�OOuDhñ[¼šNKW-«•ƒLvàQÞXR]äÇCN6͇=�÷s•;VVÊ3�##ðTMB ‹YÍ�?”4hHgL_zÇBÊ;¥ŒSm)¿ÖfüFß5Þ±íþúvš$:Ȥp¿ ÐPXp°ášdkÂ(º7ò!™ Êñ‘ú•‰¼üöP6Ú (´k—| BùTÝ•�ª ™C+‹Œzµ:‰!öâ�Ç4$‹º-úT§Ú·êÕ⟻<ùÖ²ý@¯Ûª_ò/ŽC<¯|©—–û²¦àcõÁǘŽä@˺–wÿ-ZüÛ?åt±a#€>k²úÙÀÎ42eŠ€-þg»ù|q»XÜÍìï™÷÷kûêdñaOÌ7ýõ°}zz"Ïÿüy^ýóÏìf±¸µ¿qÞÍŸŸí±€ê"{º£ï–Â[›(ƒç»µäðI5~´�7–|}½_ù*ãK¸tí4ä$í’�—ð3e2gŽÀE78q݉¼?¹û6@×2#f·%ßÉkMfp¨ 4j²šŸ©¼sùÕΧÚ7T>m \ŸkúÝ]ÿ×'ˆù¹Û_+÷ëò4ì'}LýWð™N¤‰‚®Oèzº£Šï±¢2‹yð±¿ûÏ™¯“/Óó¥Jª;:ò5¤¨ ÿµŒ_¶Ç‘©.‚ð¦¤1ý(£§”y¨N,óPû!ýKùÆ/Y‹|Ñây>8I:•¿âÏ+_‡KÊ£ï1Ú× <êGy¤¥ßCÆÉ’­ý@-þ¹ë-þË«UÄ ÛL�##`ó®™m°ÀtµÝÂ6ŒžÛ†Àýö÷ïíNÿ£å?öŠÀÿèØ†Àúf¹ÔœP��n;„K.H­£¾—µpì¢Ìû’<ò [ÉûS�ÐT_´··ÓÒ&´¹ @(2eÎ�‹nPÓÊ&lNvNîZF^N|á‘°#!.¨äeâE(‚QîiÕÇóNÁ‡ü©>SÚ@ÐW>¥NßßV“DZ*¼Ÿô• ÷“@ É®?ôãŽÐ¯&ŒJ&ߢ{Èõ¾#Íd=”b=hY6ûɪä};Þ9${£ØÒ—¬æS²c þUF„òçc§ò[Édïa”EÚë^ ÿÈ2/Y¾}Ö‚È—þ�ÊÒ»TLÓïôp,t®Õ¬.-¯•ÙâµêRã‹'ØðÉèÉØM.›íïtöÚÛ¥ónœßk&’Ž€Ý,˜Ùãÿ û ó½-èw¬ŸŸïÊ÷l±o<Û‰²[ÿü¯Ó¿ÿ¾Ø>Á¬€Bè¶\êI5\d¬éÕäžÞJ-â•ñ!\�6�  ž›%ù“8k.¾@mí¢º?‰ûÚk�úÌ•™�ТoP´¡¯ƒAÀ%Ê|,ipÓ?§œvQ®Ú îóô²üÝ~pOO÷òs4ý„\‰I"ìž~ב¼�l ¢WîÐGy¤�M ¥Ü}™Ô%N›>SFÑ�¶´×§RÏ/¸x…èe‘'Ù”ÏclåÊðäSPzN-/êEÚû¬áQ?ÒØÔx5_Syçö§r/åÿøöY } üHKWuKø¹àxŒ�o—�ÇrÇè)QŠ>¼�d@KC™~°øg µ5×ë…Öôl±f]ؠɺ‘CÃzÅQþd&D€‘ÐæK»ãoÀ&bö4Àާlñoü[Ùâÿ~³X,ʆ©ùÛÙ_<ñM€ÅÃÃÓK÷—nØuà6.¹ l©­pAÏ‹x¤±!É?x�¿–ZºòǼWI»q’…«îò'›„�ŒÀ"ð!ª§Û€åOnp�äg ð|ìÄóƒ|R�×I®óW§ÔNñRœNñõ3lãäÎMøbÕÙª�qvLË<%Êñ´ñå/B™è`¾±“ “USî÷ÔöþÞLX{=ù,°Æ{£0@¨ü·“}™ÒÁ‡²x@ùöµucõð~¤+Xi‡ÆSÆË²@SµèïᬗiLõE$ž˜[óÛßJØ+ýâ¿ÜùgÇi·[Û_4olñg¯ð~¦ýÅvcÿð<ÿýûÉ^XÌ -й¼“èº‡G‚/y„ȇx^0"ø@IDATN’~ÄEUp6­u¥çùWjPö 3�3FàC7B½9Ñ5ˆD\wþ,Zƒù¢éƒ÷ÔÅ®»ó¯8úX|÷öŸÞ>&��4È8©ö“Qç³Ö!Å,êÞ¸èßëÖꌎøW=j<ɦÀcí±#EØqßÿª ‚ï5^Û)Ù�.:Q>FËï9a,ó¾/á³V/Ê!Ç»þ<Ê*¾6>ªNµz&¯Ž‹ÎÁšÖ%äÑçíëåu=îu„WäŒ:%[›ËN»­Åö}Õ-þy:€Mb“› hÂC#`wügÖ�è‰óòD OtŠŽuÃÇí”ÆÙ­íoWö€| ðqv¿°q• 3-‰n $‰/èåÒÒG&[á^Hæõ½ øÔD)£œŽESwŸU ©´­l¬ä ÚE$3gˆÀ§l0r2[ýý‰®“½=ÏÛÉà“"ÝqÛ¿Òok\·¤õØÿWo×aQ/Ýé0“ƒ´™ öeèT:œñèÒ1{=átó"wöoÊ…¯„®ôÅ¢cùÍcªÆ.ex=³-º@’|‹ö¼¢ÐøñúQŸCré«lÁ•Ñ«ùâI&¨²¥e7£Ï!ÝšlŠý�šoñ¦ØOÑ‘¿” Ï~3Àóñ#›ˆ·Êøl¾úi«¾=-�Kû8W†êI—”·bwß×Ñãòa¼2ªZ;€ZmIå ƒ| �\þ€µ[‘æOFà¸0:Ú¸×]| ¤'‹Ç͆'–åC�|+àö–¿ äŸxr ³ëЧ;Ч®éù’ b9¤�ÜëF\öð…÷èþÔ�ÿÈ} Ä§Ïø€öõŽ,SF #p¦|Ê@¨»NnA®Óì —LøÐáe¡¨*‰¾O*Ëó®WL¯¹®ß§nva'à,Êß,vŒJb#Aꄲ–�ü£gyÇ,›¨FÝ}Yšl`CjÑ�´ýí£&rùFÖÒ_Ðë ÷~à}DŠeŽÑ±NQŠ|Ì&ú£ÏíoJy*¨7ðãõÆü~'9íö}ý˜¶�ÃÇX¹ceœ*?´üXž§§à*Ï믌¡@;&Zü—マ%þ[ë¿ú‡»ƒ[tûѳèäOFàÐ%¼sm÷à Q†G”N ÷¼¨çe§àªЗ­$¾hÊKØÄìm�Åz#ßë&žÈœ�ÏÜÐ`Á‰MíqxÊ"�~ô!ÚûŸ’dëë3ÅîstôÑ?àÛ×>§>?¡TM4û‰¤&•ZÐ:�:l„­©c îõXTX.“W Ytùdõ(ehñáë…^¤ƒ­'ßàÑŸÖdâ ¢/\P<_'á‚è„WKQéšÍ)¼1ÿcòSÊ–íG”¡²"¤ì˜µ >6ŸYÇXç�¤i·ïëÇ”}c厕1&óïåçôåý ÷þ=nrÆäòTÐ2wü9>Œ—eñß�§E|Ì”¸Pèz>yœÎ'^ �ré â_8�$ß5žô…K¯F{¸’ê%ºU/Ã.f¯çëîíÏdNˆÀgn¨ÚþD/ÞýG‡¬�@6¢eiøð|’­çÕpÙMÕ¯ù¸$ï5Ú¸diéûmú‰dyãÏ$¾³D¼t 01-“Lx}bÊ¢iÿ @Oï'£ýÝÿ¢îqcì_ �?M`[´ J\úà>I§&W=½>¸l<Oü–úµrÄDoJŠú‡Ò¾Œhëeàcò¨ ýe´êEÙ>³ð�‹É[>~Ÿ¨ŸÛÞsø+{¬Œ!ù�l¬\äÑ~ˆö²)x_~w / ÿžWžØ¢xË|ŸMOhàäãÖ—“ #0�îÎ?jvá/OtxgH÷Õ¡†‹!ÖCk~~�øøþLÛÏác¬Ü±2ÆäcþÏ%÷õhá*ËäûqÕxC¹«ÀÈXh;6sËZøˆ žÁÑcG2eŽŒ€õ³® v]S�ªt_s­®[ãÃóz-jèõ e+Ø*«%ƒ¯¤²¡å§&O:ص²td“0#�8s>{€“\ƒ‡Nx ¾ ÞÊÑZ> Ýû÷|hŸ¢/»&œ6PWŸYtúøtõÍM€Ë·8íKS'«u(x’ÇÊéÀÂß?à”Š­CP“Ré´èRP_é¸òö“ßšlÈVåzxâ{ßЭ2|}¦èxýýŒÑòõÄ“KïøeŒÕOu*ëuÑòiñ$êûǶû>ÆÊ+£%oñkåÕt#oŒö~£.²ÀëG¸r ÀGÙl-Ðð�m¨Îy Àò›÷ÿO=fæ;SF`r^7dBU—…§®ìù^Ÿ$ž‡ð½�×'I¿£ÞÒ^NRyàâ�“¼ :Êá�¥èCúÇø’mÂŒ@F DàÓ6lÔÖ:\±«„¾Ù#9'¾Ï4Cƒ�tàià� I|ð(ƒG’Î�¼%ë<\æ—2©›ê÷¾-ø_7L»l ¼×MÎy"Pº®¹ÒdQ4,J€o<´fÇéõŠ ?$³ÛëË?lËúà¾\Ù¥«ºŒÑ”uà) ÉЙ*÷ºÞ·ê)P<ÁšÌëI^Ó—ì8æ÷Tù”º�•1ÅÇ©:ª°–ñïuN-ï»Ø�'Ƕé>ÆÊ+cL>æù©>Zöžïð2†Zì�å5)ÃËxÜÃò rË|xò±š‡ÔùÑ`ê[ ØE^Ç·^8‚×äâEˆwσöå´hl¢,Úy9¸lÀ‡’ÚÚ‚-?eÉ`ñkɇÊLYF #"ðiÔƒy`€“Ü?µ­Èà!:L‘6Õ}’¡äýî�zdHu�¥Õ6ÊRò…>ÏŸ+Cº);w˜p¤7ÅMN£I¼¦;®sÁ¦”ÖOTyZ LX¥'§º>ªnc4vQG¾Æd5¹|y™Ç‘«nâ{žR‹/y F»CiüF›XÖ©òè¯F�•Q³¹�º(Ç÷ÿ)Ó×Õã—ªÏWñK,ü9qL½Ïác¬Ü±2ÆäcþkòèóÚëzÜ•£q”ñU›‹�éð €ß@ý8;w‰fÎ�þR¾÷¿ðè‚E6€G¹l"4{’‰ô~"]“á#êõ¬w|Ù{¹pùí!v²Òó6‰g2GDàS7¨¯]lµ PH×�üÀZvª{”�Cv0‡’1™÷³/à‚åQ'ÕkjQª'PøTÛÔ›&˜cÉ&�ûTÓGÞOT÷‹wM\kú8ë}ò°L™˜JßøeBëhéîbª�|�Ñ®¼½�}ƒ^ëRXòÙ’S–ÊD×ãÞÖã5ßCò¨io;óqª|J=>¢Œ±zP‡)Y~Æê,½CàŸSúÕP™SʲG6T‡)þ‡ìÇÊ–|¬œs”¡²€”wˆÏCõkeŒùˆrêg¹ŒŸ‡ʾ™q<œp5xcžDF€‰®åÙílFžß,—‹Û»»åüááþî?ÿ¹ßþÏÿ¬ìµ”í-»R›Í†Ý)Ý;*FZ↓ º_ šh?‡¬éDù­®._胓$O|OÃó »VV9‚²ò'�„�ŒÀøô êja¿ à«ÏI³= @T¼péÕdçàÇ2ÇhÊT}Çljò.>zü_°¦™¼ëˆ€&¨R3&§$øS’é³ °Ÿ„3¡ÅN¼)>Téªl|(‰'èåž/™ä‚Ò©ù‚×âÙ!«ÙÉF0êJËÏ9a¬Ã9}êË×¥†ën¿ÿâ¿Ê¨éKôrÏOüûF€cÏ{ßÚ(£½mÄ£m”C£°Œp%[]™Tð@y"€õ—e¯–ßWº'd¦G€Ç]má»XÜÍîî¿ÿu³Z­om•ÏG¯æÿùÏÝÎèíóóz»Z­vOOëíËËjõø¸Þ<=­nžžè”tHºm {PæOùÀ†äip’ô£L|tjºð•¼®x޹τ‚v bˇ—)#�81W±@*›œô1wWå®Ñ~ÐÞI^GÑ‚è‘4uÔ°~ÔÅ?5¾ü Aìb}‡ô‡e,ø»Eÿ°^J??~²*¼Ÿ`Ž.Ú¥[ÁD[“m›´jŠZµƒª\"^Œœ•Ê”ÿh]Kª“·‹zø–É"]ã{�×tÅûhX«—¯Ã˜Üë~®:yNÖ€h©t-µø5Ýä}¯pì‡ÎÿC[;Åß�P.£]ÉVWml ·E™ukû†KŸyR@c«`p•dF`0Œ¤6–.nçó²°»¿ÿkþ÷ßl5í–öTÀì÷ï;[ü?o_6//Ïëþyž=>Înæsûbåfk›<@weÀ¤L ÀâEˆŽçEÑèzÚãQV£á‘d×QÝ/õõm­E¿Ú!¾dçý%žÈ�«Ù înÀŸèàä¸+è Ì•4@hðÀ6&éx~�‡üP¾÷ ®¶àG9êœB+>Ú¨µ÷ÿi{©ø +øÔĤÔ뺉öþà» ëžçm<Þª‡üúº‰'û1Zz@ïGüO²½®Ç£ž§£Þím�Á£ÿècLõ?’¦nµ¬;ÿq#€ºµÚÓâd{²¬�‰Ç:Ž”Üâ×dQ7Ò±%cr¯�n%éÂYþV>°ºµ>^ž0}-þ÷.Ì_Ýã^#‘ŒÀûXG²´à Û`ú5ÿõ«<×o›·³Åb¹µWl‘ÿ´ýóçqýøøhzóÍbq»]¯·³?º—¬[šcº®º ð)?êx¸lj¸×�zQV£áù¤ºÀ“?ñ€¯mȘ)#�8C®j€ö46üâßÂ�Jq€ÐÀ2…�nÔÃï¡|_•/Þ¹aYøÛ…åµÞùÀ¹c|>qâªÉim­R¥c´çÂåŽT-©³yé¾óú²=.G‘×—µŸÜ‹Fß—_Ãáù¬2½¯îy²lÉZ|ÙM�çðÑ*ç’¾[eNáS¯Zn-ü½nô­mŒõLúc"@ðãÃ)¥¶| ñ)/–�>¹ˆº×¦O÷Oð$•Éìžl�GÙlŠþz{Ø™2#0³»ÿs{Çÿn¶\–;ÿ3{)àÆú¶Ø¿ßÞßßÏžŸÿÝÜÝñmžà¿íÎ^ Xý÷¿/VF×i_!—yxR�!ž—{’ʩђ¡§2„½ZI¾ ku–�‡^O¸�z6ÁmM€TZÂŒ@F`4W·jì ¿ À`àÿ’aîm¼»ý♼¥w(ߎ•bÎÄz»Ø§ÌVûÏT`º99š<ú‰©xG8/ß��ùäýV:+I�áMç¥,•-\#p’×íõ$ƒÅYåGå ò¸Wmñ½NË>ÚJÇ2ÆèèßëɼÞGã¾^àd¿ð O|éI‚•¿?1ô�±ý-Yä�ÑÑo�–A¯�Ô×Scã~ño|ÿŸñ$j–m�V6Š®É€Ú„54SF`zè8<`¯`Äâ6Ÿ/ì.ÿ½}àÙÞ÷Ø>>.ËmŸÀžHÙòM€õŸ?/&·÷ª çÒ%M&ˆk႞çqä$NŒ¨+>ÐëµèþäÚë¢ç“äð|Yâ j^­,ý=�›>´‰gŽ‹ÀUn°»×¸Èr]Ö @‹5Xx¨Á¹.p¶$Ïoñ¼Ngõ:Pо¨z ^C�²S"  )ºý¤ô�™×y'´ɤgO‡Vgðø;ó`Wäž§²ñíqUÐã^qhù'Eºã¾ÿ•ž ×¨ñ¼ü³ñk¯ñ¡Žd-òµà÷ÐËÕ&ÁÏŽq–Ý Ÿhœ8¥¦Þ�LJ|ª�ª|èžÇ8ÉÀ~€Å¿Éx6›IE9z»zò…,SFà€Øœv¶ãÖå¬ÿñO‹Ýfs7_.WöŽÿz»\>lxB ó¹Ý­×«ÍóóËìþþÑtJw4bºm b)xïê oHŽŒäí¦ÒѶ8r?’G*KPrhŸ½}q››% ù“8:W¹ZO|h?X00J¨Œô$ƒVjñ%‚Sl)Ó×qÈß¡2ùÆ¿êÒµùõ5€Z›-'õ?2GL,ýâ¿t6&ªæG$vu–wÍ¢ìÞv?IåÞOŠ÷úБ÷® ÇÀgLâ Fy¤‡ô¢lŒŽ¾ÏEÇrÏå÷œ~¨£Ï~Ñq¯÷ÚvÎ8¥¯áÐ4Ô4kòÈ£k~áE;éy>8ÉêÈØø&Oïþo¤W”Í5ºv°IPl‡ÚØÛ$ÈÄXï)÷üí—ÇJ–výÞî {ód·µ>¶½]­žØ$XÍgÿ쟞öM€õÃÃÒžh=@1}Ç~wé/]·"džîïå¢%ʯx-ºf‹M-©LdÞŸnâÁ×f‡ü¢§Œ|Ÿr`ŠD2Gàj7lP¬= �†ò4€OÚ@‡¬¤AÆó�E>´×‰´üÉvª®·;§<ê¤zË—>þ×ѯ›’'ü¨„‰ã%‹ÝwN›Œ „Ô ]ƒe"ÛÓû‰³h*-HbÂëñŽÛñ5z\:ʇx¢Å¿¥w¨2ä+ÒâÇ|ŒÉ)ëºÔGù�…ÿ5´ãÔ:¨ïžDZ:œZƘê~jcí§Ceœ*+мVÏ'[b,$óþ?wøõ¤EÃôØh%ýò›?�Ã#ÀâÞ¬ìÅþ×Wôº^Øù²Wî [Ï·Ûg»ûÿdwþì[ücÀÂ6 ´(ÆDsA …Gèe-|ÌFv@U’êQËBãGeÖÄ*C>¡•¥/Zõ°pæ7œ„�C"pµ•FhàЉÏ@î³ßÐ@áaÅí–|ŠiñÇà±vÞ¯Ú;\}@Ð{HüÛG@í dÂÊ—I« ‹„tk¯K§Û'ÙïAF&E¼ã~Þ/möiŒöºÇⱌcý|†u÷™Å?tÜßë~F}¿k™ÄUçÔ¥Ú8VƘœz�éŒÉm[ôçi�G¿5Y…Ç(V²Å^›ZôË&:—>6±þIgìl³~ÇM™˜€“è¶à‚ð$ó¸— Ò‹²H«,ï |(©¾5ï9´xÂe_ÊËM…#aF`z¾Ê€#ÎâŸ]Rmh ÐÎi+*è•A¤W¨Ñˆ¼N¯z€'%¨«>®]=;ÞUT0+qÞ¨ƒAJ¤#”;WšôFªUô‹¡aèZê:SAßþh2,X”›Úom¡zÿï'rŽñ{ŒÍ‰Õ¼:sbàs\ü{YÆër‡�Øúsê%�•1&§NSt.Q÷!Ÿ­:5øŒVûl1çÝ¿ð/ïü¿è8T�”eNŽÀë¢ß»ª]ò‘wëþ’o´.Ä^=øcþYåž³î´ÁgÝõ”Œ2=~Ž:¤�áïxŽ [.+cLN‰St¯Ù[‹ •ÁX÷&óø¿õ}ÖlHFeÀ/~<(#ÓO�@¹”[ÜAº¡x�©æÓó¢®ì:ë×_ñ#|Õ8“Oyˆ4üOúSà©öSʸ„ޝ7x-·žP}¼ñ^&ÄÚŸ_—(e¬Œ19uªéÔx窿÷íñ þË;ÿ¦§‹gYì;;ž|ÒÀ¹e�‡‚N=ÑŒÀ¥#ÀÅ—L÷’j¸çE=ɽñ%F?5™xÒ…Ž ß­„�Ê–žç�û,?Ò�0#�˜�/· v±Ð?  A‘p ^Pb™Ï’5дx5¹×�ø¡úÑþÚ¿@û”Ä�ð‡F€ÎXM�E“a&ó²ó�ªøiؽ)£÷ñ†7•`2éôe\º Çøoµ>Y OSNËî˜:¤Íá þSλÃ=¿ZŒ•1&ÇÓ�×Ǧø—Îô%[\Ë†Ðødýû»ÿâÌ”ø°è±Á®`]éŒ5<ò¤'ˆ—):^œ„�Ç s„' Êõ<á*OÝ¡,;AÕKtÂŒ@F`$_v Ò. ~ ÷Ùo Ô—èï¹çy<Ú~ ½ÝîföȢݡØÍ6›››õš�‘w0nŒÏ„ŒÉ ©Lr@/'öäk¤î(žVWufßq#®Ø(›lô%M¦M(ÒÛCM�ûþ¶çŸò9$;¦ì)þÆtÆäSêu*ÇûŒÙëK&Þ% êr ßѧúgäC�ÕcÈ¶æ¯Æû.eÔÚv �¸øøFúßlÏ42æi3Ó²Z�È2eή²6Íoæóåíbq?xøµüûï¿¶ÿçÿ¼<¼¼ØäΦtëõæfµZ{|³}~^oV«ÍÍËËÚTÔ•k¾»{dÐ$é á’½4I¼Žê~ñ;–T'ôÀkÙ?Õ‹^¬/¼L�ŒÀH¾ô€]œYìjÀhA2‹?p =5É?ú‡7ep‹¶Ð>y¿žßÄç¶èŸ³ °^ßÌW+âq3+!±JÚÀŽw�V濎á‘àeÊ�ØñÔ3öWV&èô?Qw¡íüêk-è|íQéî_¹Öz«^Æ;þÈ$¿t¸?ªµƒòýW* ? SŽÃ�3TUã }®�ÐûÜ÷•ѱí õH�2òÎfóÛùüîv¹,»ÍfuÇ¢ßÒl¹œíV¶Ò~~Ù>>®Ö///»?V«ÿ½½ùóçfÓmì»´™˜Ë’£L4JÂ=¯†Ãó~k4<Ÿ¤ïyWùèzš¬9¼÷%\úÀL�ŒÀH¾ô@h›?ù4ýâ_ˆ ºÊÝÊø­cïë­ä:(žØ-ìÎÿl±¸±�€�`ño’²ØçƒF,ü�·à&/9b’•éÇF vlÑöâ²`êûIít’Éöè`ª/ ¶�É[vSù—ö?µçÔ£Mj—ð-eK~Îzx_—öïËò8åæ&€�Èåñ)1Ÿ¢S«©·ó¸tÅ‹Pr÷×?Êø–.J‰^0v÷¦l,m±ÿps¿ææåÙóùýýÒÿÏÛ§§'ÛxšýóÏÓz¹|æµ­Õv»Ýü÷¿\†u),æö³ïÞ½Žø@ÉZ<ÉK]L ߤ1ºÓzÕ=ª @elÁ5½¯#7¹9ˆ SF #ÐŽÀ—ßàDç„z¾¿ } Y éöæï€÷çqÇèwÎÎÁ°'vK»ó?¿»Ûñwÿùÿb&¹¼Pÿ¶°año<‚P‚dzZÐ�£éãkF ÕiÅ/ÐúÍþ£oùÔŸz¥O?Hí¬ÀCŸ„G(y J¿&’Õô/Í»¶úøöR·˜m\ØóЕÜÛ�ÿìQ~ìÇçncúŽÀ”c0E§Uʶ»è<WÆ<ó[Ʋ¾Ÿ¼×Zå&?#pl˜ÈÚ+å €Åâav_îüÛMãΗ³»»»ÍÓÓãæññßõýýb7ŸÏ,ݬ6›�m ¬Vóùí ¯�Ú(nyß­~ O~�:(‡Ô¢;iWáÒ-(_Ъg„Zô úvz¼U†ÊJ˜ÈX¾üG±²  ƒÖ¿ l€L<Ä^ÊT½O Ûìd¡oOØ«có›ÙjÅÂÇ3£ÙØôOlì &øåu€œø±ºÖu2èdQÇgƒ¨,©¸ú ë>¡_6‘€ô«½ÀÙ‰7�ϽZ�·^ùŒ2/Ô”ª[Ú7–1ô:UG'0‰ñ!ºª’ú©èÄ÷TÝ–�äO�À”xOÑ™^â¨f¿z­=n}¢\�O¹¨e飕à`t¶¾7·yÛòÆž(w¬ºo,ì•€‡íýý¯Ùóó?¶°à‰nö¬v»íÚÿÆ›÷uâ½ïΟÊà >HSlÐóúžLJOÒõj3õRÝ„AÙ�ªC~§èL±Ÿ2÷£¬)zCå¥ìøL‰ÿ_ƒõýX×�t¯}Â÷ �ûòÏœ+ÖwyÀ¾Ñ´äuN#fv—ŸÅþýîîîÅžxÙ.—öžçŒW¸oì½ÿÕâááÉnî°Ð]¤;¨î\.ÏN滼ô=O¸ ­.èyÂ�Þ4I¿ó�›‡„:ub¾ÍÏïøÙÉï�§.?`HA = $²�¾pïûSq^ÐG—¶Øç*ÀÓ~¾`¯†•E[©¼ñØàþâèÍbîS[‘…_StbP'�oJ:·úI1}ª¤¾ßt’ȶóðþwLþÞâ8ÎG•s\펷òí$³ ¨,žàñ%Ö-ñ;–¦èŒù�\¾ú>*ö;ˆÞ˜Î;£d�)±ž¢sTáf$ß‚½�W¾‡Âkåc‹O»ŒÀP¬¿u߸¹¹+OØFÀÎÿ6‰Û캼²7LñèšÛÝz½Z؇×ÿþûç†'ØØlèÆÈÕ�k8<Ò�n´¯ùÁGä˯d@¥èSüôõô:ÌÕI*¿1ÛÜ(qÊŸŒ@5ßjÀ·°"À³„ûAC<¿ø× #( ƒŒø-¼¥ïùC¸÷;¤Wd¦\Þý·OÄì| ÀüdÞ »µ÷ÁxìŸ ³H+߀ßo Œ:O…:㻤it�óà‰ðNh¿Ò#Òâ ŽÉÑ›¢# »x³)ùÜñ;VcòS޾Õ_[~¦è´l“Xb¬#}˜·º¶|FX×Þsua‡Q®™@úNè?^ooœHFàÔtw­øÀÌnÎ,éyKWg#ÀT ×¶!°Þ½¼<Ù÷ù8`ÿ €.ׂè‚I£™t=.ž —�áÈ}9ÐJª‡è”}MŽ,æšž]òòu€j`’ùã#ðm7Ü‘ÕàŒ ž2¯(±!¿€L¾¤Wƒ‡ nµ:Õ|¶yöý»H¬oÖëéžl¬ûcù›´ü6þoÛ1¾·¿ý ½ l÷ý¬`ÚHdÛå¦äKFàÔƒ=Úa™t“±Ó“O©ß¡>jú5Þ”²§êLõ�^̺óD&(=êàñ©uŠzøh¥!6còšß°X+*ÞOM®²Z2ÉkåyÞ�½×;÷íhù¸tZå~$Ÿ8øvFzJ]Kï§·cŒ+ã\/ÛÓSü¦NFàÈ0JÛ˜× ˜üÈYðÙlcwýïícOw|ÐòÂ2_ä{šË¡ªË´p¹‚?÷ºÑ&ú§Å*K8ÐëA“Äë¨á_•ÛÒBîu< ¾/ËÂÊ^Êžn9L~Fà'Eà[opÂsâÛåÄ��ã Ÿ¬ïGÆ€*; ,ÀC“lð“ê4•õ쉯ÍÚÒ‹]íqÿ,ß›Ò×ÿ·üË·´¼°í㥄�eàhº=¶ `}“.¬n!]W¼®®�Žä‚4O¸ ç á’U¾ç�OMÞÞÛÀ—L¸hÕhÃz>à—xFàÛo¸§8Úo„þð—ÁÁp¿øçî?´P4¨ôf£}ù–r�‡lˆ/Ûè«ðmÑÏ#Ï‹Åâ‘ {ìÖhþ�÷Å^6»Ýß–[cþ²¼6'[ûÊlù»›äV}ªÀ„�£" ÅÕQÆ'ý´r ±QÖ‚È¿„À—\ðÿÒŶ–jüSx± ?”Éïèz=ùmñ%Oø5#0p\u1´g…KÛÊåÑpÁžù5Û�µþ®èÜîIp ÀtbpAÚ/¼ëàÃò)~¼Ïˆ·høò >5©ÎÒLJ÷iôàÅ6ÃÏ”ÈX¾ý@å(ûA„Ô´è‡Ö€â!‡¤èÛoˆ?Xë»Ùÿbð�MTìU°[ûç¿ùÆxOÿ¬7›ÿØ#ÿË6^Ö77ûàÎ9/¯˜î óf‰€^‡Ø\Z÷ëté6{ÿ´ßç¸ø÷ �ããÐØÕô�åÕì|»"îõµ O´Úäiñ€5~ä¡—iZˆÿ¹â7æë¹&4f�[}Áɤ7°—u’üÍ|b¸ëß?þo}”9¥’æ—"£+ñÐ’##ÉÏŽÜÛxœ¤Ó«£¦ýʧ´¡•áy\uõPv 3?>?bÀÊ2ÐðPÄÇmh0ÑÂ_|ÑS:�/SúðJ�Äèa‹�¸æÇ¾ýgxyyæb°\.¹[±¶§Ê7lSàßõÝÝãj·[YÅíbÊŠnïð:À/óY«C_•�"°?Õ&ø¨éÖxC®Õòõ]eÄÈgmxžÇ‰v1Ë6‘ŽexZ‹Ml„#¯Ñð½NM¯ÅƒŸéó#�ë‘5Òd€þ°ÇÍW^� hš]6ýÂ_HG3kŽPÝZSá‚‘�Ÿ)r¯+ˆ-Iõ/ò£ šäm¡e?Ê"ZúØfÊd\~Ä€Ú«�è×½IË@¡ÄCûqá/Úë�Ÿ#áç�AËÖù›glì®ÿfµZ=ÛFÀ£m,­�w뇇G°EÿÎîþ³øç€¿,¯¬�í¹*}ކ§��C{SBunµ2?¢ŒZ¹‡ð¨£ÏZø ª ^çPÿQ_>=?ò†h/ó¸÷çqóÒ‹8z^&;xS6¤Ÿðs#P;^g¬Ýrñí7ʆ€p_Nì3^–xFà## Í€÷›ûîlÕÑ4O0Ê I¥û÷ÚëA·ä^œ$ÛŽêhpÕ!òk2xª›ô£=´rÔ‘-ò‚Ûœ8ÿ @QJøã#ð£6üÑf3ÀmÔ+�¸ø×¿õ61½„z…ý  Œž,³ÿÚòÎýö”ÿîž0ç¯a ÎŒžß><¼Üüþ=³�ÎmBó`aîü?[¥ì�€wƒk¥*ÉÊ-º5�v‘žâï›)~½ÎG”áË;§®>kñôí.xL™Ñ6ÒøŒì³e#ÀàÌÞÀçk^¯gKû 1þ² �GƒÏ6ù^Ü«/õÈ”x&ч¦cl¦”q)¿CeŸ£Ìsøª#2ÊðÙ/ü…{‡Ö)êŸB{[ႾŽc8 |ÙE[/í7jɯçyüÒö¾¬cñ±v޵‘rÇÚylÝŽ±i@�d·º{^)òšÚsL ÒæûD€[Øö/OöÑÖùí|¾¸±;?v“g9ÿûïûûÿû¶ÏÏ|ŠÿÞðÐöth‡olšÞuwßÅßt“{Ù)81ÇžäËð4xÔO6¢�J^ÚgñZ¾‘gÊüøüè wô5Ðy(1‹A¿ = Xmx™pï4I¾;ªû�ºQæiðšé ɤ“0#pX´ ˆð0/«­º~l©—-Í·ÉãZäÃó¹Vo‡<ÒÑfLÞÒ÷v‡âѧhiÞ—ø5¨ú5¼fÏë·t®�ÿÚplŒ'´�‹d¹ ÷ýº\8ÕOŽ-;í2爀-þoíõÎùry¿½¿ÿµøýû¯›ÿùŸ•-îw¶àßmžžVÛõzµ}yY ÜÿØ÷ MfzÔ¢tqƒêî¢#Þ¼œ"¦ˆ_áØùrj´ç�Ë6ú©é¡ÓÊÌ¿™‹+ɯè„�Œ€E 7^»ƒ„ž¥åþZì£ü^O¶ÊÿyM×Û�áölãþN„cÑJùIx×Á˜tŸ3�ê¯f_ã�³Î—ö¥ú#® AéR7ÙRÏšMäyZx ÆzH/ò©ã˜.‹:ÊÑâÎã*W2ùŠ:â%8Ö†1ù5µÕ×µ…�ÔW~©ñ:€=hÝâÝh&•„��@­ìÎÿÍb±´¿o}˜ÝÝýžÿþ½¹µ…¿Éf·öúçöééÉžx¶EÿËúŸžwOOÏëÿ½]YmíQ›þ)ê®n/OkÏ«áðHè×äȤîýz¼¦?&¯çeøne¯Þòõ’Îüˆüø €þ5?@�3PÆŽP[Ü×xcƒMÍ�GùðIc>;­W}ÃúÅ¿ 4fÎ�}çd"ÞJ’ ¶ô’Xˆg-³ð‡/èu(:¦ÏëŒÉÑõ:§B•%}ÑCPºL…‡pÉkÿØ"JSt†ì¯A6Ö†1ù5´ajjm <ޏ}ì½Çï½Vr2ë¡¶0_ØGŸîgÛí/¯ì»Î·»å|>›ßÝ-6ö(Ûx\ó!¨»»ùÊÿö&Ànn{«ÙŒÁž\º»ƒÔ}ˆ7&׉#ßèƒ+y9<Ñà5=ø1y=dÐäèK|ÿ€t¢>~2e~l~ü@åÈ3XŒ µ»ÿqÀëTŠ)¬Z95žì‘‘4 uT÷+Ù{¹ÿ@�{ëÄ3—Š“íV’asªÜ—;æËë~œ6Õ²üµ;ÿj[-5žô�-¹ç{\¶â=}JùòsØZüË7uÐÂÏã’[|¯síøwhá1h³.ü¸Ô¶-6õ3爀-öçötÊÝl±ØØ†‹ÒÜîþßmì ÐÿÚâÿî–Í€ùü–�ßÝËËÆž XÍm“ ¼`£W_Aßõk<É1.èyÂ�$ïÓÓEh?ø I¯£ÞþJÇsÑ÷™h᪮5_èeÊü¨ä€nžà¨3’öGÿ�Â/ü=Þ»µ2á ÕA6ÞyK¿Æ¯ñ¼¯Ä3EàC:Ôþô<¨jÃÊ—ð9\âe¤´ƒ¬…¿pmJ¨äqñjpªž·õ6-ˆ] ÷>[¸öSäÒ[è·|Á§®²Ò»fÙwhÃã«Çþy@cšà—?ÖgŒSºú„0Aµÿw¶ÇÿÖï©´¥¥mÜÛ+¿6Ë察Åÿ–ÿ†¶M�—™½`v úøéÖà‚†îñSyøòå@“j<Ï/Jö³?åĨ@_wpùޏÚâaÅ]²2?/¹àŽye#im0Ò`¢wÿýÂßãÎûÁ¨¸ƒ ��|ð?1µv8ÕD3ÇE`ß±¦.Þ¼ÞqEvV‡ø©éÖx§Ôç³li‡ÏÚТ_4:§¾Sc0¤çe5<ò Åóx­>Ò»Dlµx§ pAÕ#Êkuð65ùWàµÚÐâ_s›|�[øXýÕ‚Þ~œ ü$3÷KûÀ­�WöÜÿüÎð•}�¯ÿ¯nmÀîüó/6¤í67öïP›ÿ}šÝß/ŒgÝ›E?]ÉãSx^_¸ üå«Åó|p’·é8ïU– l€züœ,`¦Œ@F �@nTº‚Û@ªDšL ýbßãC þ|’n,�ÏÛF¼êÛö�UPx´M:#p\˜h�¥):c>¼üÜþ¼ï¯Še¿ø.™b'8ÖÞ©zC~bÙèÖxâË×±e7qoîâÊ·ú*óPˆŸS}Zæ¹õ¿C¦ÆdB[ËERÇTpªÿÔË\(Üñ·ùéÒósîün_´Wl.ÊËþ&ç6ùë¿Ýjõbÿð<x¸›-—èûWèâ¦ZR âI$á§ÆC&p_´’ø¢½­x‚±Lùð\yÈ—|&Ìü¨äÀÀáf#àõ­€wŠ (ÚiÔ“d£ƒQ”yžÇe ϧh�L:ïeZü zO‰g.-°¦”q)ÝVÙ‡”×òñÙ|&þŽ>m"kÁ/èyÒNIcz^ÞÂc9èÅìu¼ø‘öºÂ‰Å=ék ;|ˆïqoWÃÑ­ÙŸ‹7µ­VÞµ´¡V·!^¬w¤‡l‘5bÂÅôýuÌYÊ3—‰£¦�qs›“–gùçß�âô}{`¾Ù¼Ø»ÿ�‹ÇÇ?ëûûå-O`ßeºµL[x”KO�F¶t�¡G’x�_IrÑÞV< ô$D&XÍ?{çqÒã!SFà‡D 7;Ð < *5ˆ' LþiøJ’‹”OhpÒ�n§ñúÛÒ•ŸN®MÁWûÄ2�¯&~1k(ÙG´‘²”>²\•y ¤žšz\¾j<ɾ3üŒvF™ßùfÛ~V쾕kpÄ¡Åc^8„K!î#O´—�“�‘T¸xàJ^.Þ�žd²ƒT–¯„�Œ€‹@n¸`Œ \<ÄDƒ¸_øƒ3ééä^W•x-;’ô:jøW¾^µ´è|•$–È|å°`"•ý¢_¼;«ãñ§äñ/–-Zº‚5?’ñ£½·kùG·fãy÷>?-µ¸Öx§•r˜µúN æ-µ3^ÝØáÐâEÈÜR<Ⴘ‘LP2A¯ãyðk´×WB7&•éùÒ“,ÒèJ&zŸõdo> @x2ýÔøÅéO�Á`»„lÁ}fá?DËV:ø µèÈï´‡eÓýí_}ÑŸŽaJ3_',˜bÖâÓðs¤–ñÇÊòz³›"÷þÀ=ݲ—Ž`Ôkñ£^Ò_+Zè­Zgm3Ͱ P6ØxÝÐ";] áb']•ãiσOR=;îû_ÉåÃÓâÕüIoï‘×H{F"��|`ÂÁf $XX“0„Fø‰wÿ¥¡7Ó $ÑÒ_ôT(»n3`ªUêe2_/Ìe´ð×S‚šç~Dë(K¹UÞ%ë#ßC ¼):­ºÿ>ñŠß¥bðÑå~F/»ô›xæ”dæ„¢)82’x-èuÀ£<’ì;ª£Á¥ù¢£\|ü)E•?æšMñÅüžy¾f~Bò €‰G9  Sr|ÀÛø’k|Ï�)Ê=�®·iáÑgÒ�ŒÀWŒ‹¥Zö‹ÉOm~|Ý‚ÒUùÒÿ3`­.ªW ~F=J™Šùg·7ן}²üsF€§Þ.„ñ^[ûA]øô2�Gÿž'¡¯\ý�x‚^æqɇdè(I?òм¿É'Ý„�o�|à€C¬M€0PøÅµ÷Ÿ   Ýo€“4 y_âuoôÞFrñƒýë+Ýkò/èmÏd¾b´xú\[üKþQíTÝby]Ê÷u‰ =d‘ë,ú]Ù|uøYmþŒré”›)#ðU#ðö±ß uì×9b7WD§%“nM^Mù^G2 ÊôÕôà‰/\[ÉT¯èÓûO<#ð-#�GV·€5I<ü âÿâc'ÜÛjP’¨4$“N zÿ5yò2�¯,>³ø÷´Ï/j<~ζ˯ Êõ´/¯Å÷:çÀ)§µÀ÷2á‚ç(;}L‹@Æ|ZœR+#0›Ÿú¹"ã^÷ €Ž�ÌÏ=¥y¢)©¥ƒÌëMŽOùˆ<Ï÷Iõñ¼ˆK¨,ɨo¦ŒÀ��@nœpèÙ°§¢?ÆÅ?2e ½.~ •¼cÏGîeÒ�:â3ñGÖÉë|ÕM,#�øº`<ò™M%�U‚â[¶5~äAGÞ!eŸS××Cð„«¬O²Ÿ?"QÆÔãûÂT»ÔË\OÊ\Ñ&@Ÿ©a‘dn¡±Þñ¤ãeÇà²úz@+‰/Hùµu¡}ÆF´·‡§6•o}éŸWJ<#ð#�ç=ªû�Ĺ…ç3›Jš�ËŽÁ¨–<ÝZò:¯r¿à÷ø«Fb�ŒÀµG€…Q-Á÷wú¡}–MË^òsÂCË:T¿V×1ç^ÌQÞ¡>?ºŽµ8%/#�øˆO¼¶š‹‰æœ¢…œe¢½ìX;_ާå“l"ŸºÅ„®ô… FÝš}ÔI:#ð­"�'Îþ) Ž5�ìŸÐF@k@‚OÂΧßëD<ÿ F$éŒÀWˆ@\4Fzlñõ#ýb�uÌd2�ñÔýš3j®Y›£JgHu¨�ô=®9+ú-\ú@ïš$^G½ú=½=x̲÷õƒ'Zò„�o�Ü8ï¡eð` ©A ,@mÆZÈ|p%ù€ö|ÉßÃÚ]ãñ¯'ï•““È\eüÂ]8°•i„ôÔ H‹Ÿ0#�Èd¾Sºù¡6»"cþç!’È]“yžÇk6QMêêøºè� ?>E™§½žpÕ=eÉj¶±<é&Ì|ÛäÀ­{ ox4 j±_ƒ Hz@>€1ià’Ï(¯Ó,ö»?v‡ÙÖ=&7#�øèhô2ÕO<Ñ 3�Œ@FàgDàuñ¯…0s@pAâ \žŸo ôz½?�{¹ø@ïš$8v>!‹_Ü.—÷³ûû_³¿ÿ^-¶Û•Íûvl oþûß§ÝËËjmyûü¼Ú>=•<ûóg½úógÅf@<lÍ5k¸çE=Équà!'IîmD£¼) ;ù” O?ÓVpÏ—®êfâL�ï�ÜøØãZ\àùL�"}|-×ë²ð_ÞÝÙø?Û1ê•JØäæ–§좰5| x©HN‚Ž�}ZfÎÎAe;G9gK¶'xö8<霣Ìc}°€£â ^-I¯&;'�rÈ­$™`Kï§ò?".@ ò¹@IDATQÆO=~Ùî{|ݸ]Þ.w³åò×âáa}Ë]~{àÞ&€›ÿüçqóôô4{zzÙþùódùÅ6fÜûŸÛ›ÕŠ�ºLû€Õð!ž—iÐO× ”�x‘Ž:Э$Û!ˆÌËÁíÞ×ëË׫UPò3_1¹pá£ÆàÑ&ð<¤thåøø¿èZ-5hÕd{Øv€w {`f ž`€…ƒ])ºE¿á,þy%€'(´TˆF¦Œ@Fàó"ÀÔ‚2�•WìnÿÌÞñšÛ„Êv„ËBŸÅ>wþ7¶� ûQ� P6 ¦2T�”e2gˆ ²ûz8Ipl%½Îê¸_ÊÀÏ”çZy²“ιa+ð•Ï]æwò׊ß9Ûøeœ³¾é+#p…°»Mv'çvQž°E}™<²)°Xð=€»ùÃÃýúÏŸåöînas?›äÝîl>¸^ÛëöÄÀŒ/DY³4íë/&…Ž|tÄó�¨DY‹çùÂ�¾\O{ð˜Zõ�žürŒÐ@+û6×üÈGÂŒÀ·‰@n|À¡tOPšh„#îþ’a¯ÁI8°•vöÀ�=ÚuS M¾m°ßÍ ÷mà7zÇÂß&_d¾þR*ßh*�)#�øÄ°`Vö‹~îþ“%‹ðÒUfÁF™­$¹`KOü©zÒŸ ñ;%IO°e3&oÙ%ÿð|t¬éÏ]æáQI‹Œ@3ånµ=` ÷(ÙSÿ {"`¹»»{à›¶ð°Í€…Ýða£`g=~»³Åÿâþþå…�vI»OhpÏ÷¼!½\>"ßëD™h ·‡®%|‘¼nô�¬–½íœØæS%®ùóM"�t ýÀQénPTé 4l"ŽŽd X5’ð:ŽýÞñ wÿm‚³ Àðò¸?ÿÀ¤Ç²í>‹ŒM�L�ŒÀ'G€…‰rÜ j’Eü3ªÍ˜A}Æ’[¤?ÕvÌ·ä¾ pŸ¥Ó‚²lé%ÿ{D€>˜Çú{ËŸÜ îöóŒÂ†Û]þ¥Ýä¹³¯þovv§Ÿ�Ú®@ ¡w+ûêßïßOözÀ‚'°ëÃÇäo÷ò¨çeÇàTA>Á½ÑÀVò¶èD{xè eÙ3e¾erà«6l€Vé 2h€ºûïyèŠÆ|ï¡%É;Ê~—,üù{ `a˜öoåÝî–ç xm« ¯° ÀF°½¶÷‘HF #ð Ðø$kñ¯»ÿ@Ÿ¤ïy—Ä#Tf ¯6–È.ÖO6‘(]+Óû@î32Ùz}/�üïL·bqÎ6×ʨñÎYæ˜/õϳOyFàs"ÀÀÒÆe›àÍ–vÕØÚ¸V’Ug{ûòro²îο}òÏþðeöÏ?�ötÀâf±Ð“¿2-4ØÂ£\z‚´þ\ö@_–§Ák‰r}’½çÑVÕy-K¾‡ìªhþî�%žøŠÈ €O¤×*Kú 3_.¹p=‡Ì4lŸ?Úÿƒÿßf³y0œ ÅÌö þ±¼´÷ÿöO|`a ¸4YÁ ¬yN^F@`òÌÄ"¦?êA¢{Œ~,óÐò¢ý¥hGpŸ/Uæ˜ß©±òz—x‘b9¢�1ÇúH7ò‡ècl†ü}–,Û±�|Íü¹¸—$’ø– Ë+Ó@Í3[¸ä‚è•ÓÆÙ"#ÁoáȽ�ˆ#—_éIž­2ÀǶÊ^W<ù‚®áÞ&ñŒÀ—Œ@n|þa‹žp4ð¥çñ±Úó„ÁÆø/máÿ�ÜÛ&ÀÒÞóçŽÿ�½ö¯=îÿ`Š÷öÞÁƒåû‚m}À-Ʊ&¤üÚ#à;l³®,.4¡öxÓàÌ‚Z™5Þ™‹�ìN±Á@8°•';>“â)±Â–¤v�‹>–¼]K×ûó8ú¢�Êòãiéy›ˆËNÐÛˆ÷áwiG+ö¾}¯éÇþéšMò2_'\²•À=íùýÀ]äÇžl…Gˆ?ñj8<ùõDG9´Oª‹çµp꤄�ÏðåKzБgÊ|ùäÀuÂ8@ªVp€Ê~`’\ú‚Ò±§½Ö[ì¿Xz\.—ÿØ¢ßþ pÇ{L|ôewýÿ1ä/»ëÿ{s{[ á[v,ó$@¦ŒÀ´0±ÖdÙãӬǵ¢ÏH�{¸N Å,BÒ�ç³Z ]Ñ[ñöü®ú!'QáçõwHöªõ‹¾<-XÃßzšNÉ×t‹ëÔlµ£Å¿ÎVtµòuöøÔ:[ß‹¿ÕÅTpª«ÔË|™ðºçÛW>¨Õå[x”KO�æ×px¤h¯&‹ºžö6àS“Ê®é#kÕ£¦Ÿ¼ŒÀ—Œ@n\ÏaÓ€ãkO¸Ïâ{}áÞ—­ÿ·+Ûx´±o®ì“öQÀù|e›ÏÛùü_Ûø_ö˜Àlá¿¶M€�=À&‹>F˜)#0Å|§ÌD¼µ`’áhLþ®°—ö?µ:Š0â¢ñåñ©¾Ï©7%^^G8�Dý…wœáßCô½ß.ž % ô¼¡šyý!½k—}—vœ!Îþ‚jûßåÂ+^�=ï E¥‹ŒÀ§G€A¥‚]�à1X«ë�á’Gˆ7σ®ù(}áQV£=ÏÛ�×Rlt+cO�2e¾eràº+ƒ�²®ƒjl þͳ¥»»»¹áö/€s^ `ñÿÇ&9ÿn‹Ö»ÝÓúöö…Å¿årçßþ€ÿ‘å)�L�Ã"À¢‚…ÛG¤CÊ:D÷#êN>NàÊ’‰øY©Ç¯V?éyXÓ;†‡O¥.^ ÊÖCéŽñ¼ü«àµ¶©îC2é|èÛâqWÿæhÅy—)#ðÍ"Àš&í7:Z�]�u—<Â⺷•,ò ½ïHɼ.8e(ÉNt„^7Ê’Îü¨äÀõîÖÀ(�µ€�²àç‹ÿ¶®Ÿ­ìIþàÞàmSàß5ß…åο}9vÃÿÆÎf¿ìñÿß¶É'Æ¢›ò}¸ò¶:ñ^‰ 8“jÁ½`"r¬Ý�ûKø*/Ê´¸÷Oƒ_S‹™— Öm“¬…×ì"O>à�á^îý´øÒ“KïÚáwl‡o“ÇkÇ¢&ïûÞþL»¶s®ÖŽäe‰ÀÛ»ýÑ’®¯îÏ`=„K.ˆ¯¨/�„\>x‰×P–ÞgÃË!ÚË„Ï�¼Oá‚*ËÓ-]/«Ñò÷Õ`lW¬ÿ˜<êqš1K©àvî=_ò„�ï›çñM(uw ³ Í•Ìó%“É?Â�$oëipéá’IÑ_Çí~%Ou!úc:Ñ&éŒÀ—Š@n|òá²�—ïíipÒ çpOScñ"¿Ö^`!k›|ÕŸ²^óbñg¾Ù,g··w¶!À]ÿ¿,?Y•^ìoò€ZD“g=кݶk1’nMv ïP¿‡ê×êvò;´Øß Rv�:Œ¥!{lÇ|L±÷:1.žVYè «ÿ¡rï·…×Úíu§ÈkõŠ>j:C¼Sí‡|K6VÆ©r•s-зÇã•úqQܧ¾OëBYƺ½0‘ŒÀŽÀëxÝ}øo6»½±lO‡ÎìãPtùÙÍfÜ‘ù¢nq±A&hè›·—IG]á‚â±UBN’¿!\2 ì<\ÉËáá(ûz¢íáeÊ|éäÀõ¾8àÄš!?uòö~Ð�e%�8:û+7î×ÉÆtÑ.ÒS<c3Åï¹u Y_þÖ²ôdwîúœÃ_Œý!´×õø”z¡¯Ô‘{ÙZ>~~â±;±Fº–=x|ÛyÅ¿À—¬ð}b±ižø¬°Ø_Ì‹»Ùrùkñû÷_ÛÕêåÞþ-Ê^Ý-þóŸ;£×ÛÍfmÏ�nìÿ£ÖÛçç5¼ÍÓÓæfµÒ äiAÚ§S(ê œMŠ6ð¼®Ç%ÊÎóÀ§$lcö›ø�ÕsŠßÔÉ\uràú�8 4‚ªi¤Å?žËÏ¡å¦~F �~^^!÷\õõ‹zð¯¶ðŸ‡¨MÒF†§kx§=þ+[4=^£k¼hSÓ�—iZjñœfy9­F�4Ã/›ý9 .þå*”ž3»Íoúvq;ŸßÍïîv¿~ý^Ú7¢ìŽ�ýµÜØ£¢Û§'¾ý²{||YÿóÏËêÏŸÛ›ív·±‘²š¢;iLKÇË„ušõ†½ÿ(«é¡Cò¶gø_¾¢U†`­-ÞSšøÈ €/p�¬ŠØT[èÈ“,aFàÓ# «êÑa’®Åá'5ýoНCtÎYF\øÏço7úEÉAq9¤-çÔ%.$ §ð|Ó¥#xlUÓ.#ðY°¾{kÿò4gàf¹|˜±ø·d›s{-`¹½¿¿¿}zú³ûóg¹º»›íì› »óo¯lnþý÷UËØxhä;žtj2Ï”Oá’ÁœJ£�ùñ°¶èG®öp›¢ŒÀ׈@n\Áq T�ÊÀl„ |ðHkðB>–dûÞ¦Û�|ÌOÊ3ï#À\Â&ÊJWq¥ uRÝÎ [ets«vQÄJñ®Å¿¿û� ¾×m{ý<ÉPTwÕN±ñüÈ-›C`ͶÆÃç¡üCꑺç‰@ë�èýu´êVÐÊ'ºNóŒÀõEÀv´öOtO>üg«|û&€=`Oüº}|¼Û,—<%pËjøÖ¾À+kû㨾A:m™7‚GˆºxàQ?ʽ.8©fL�±ä댮Êþÿì�évã8“¦m-¶³ªfæëîÝ÷}=ÓU™éMòÄäK‡ÂI­Þç@±À EÅ�øhKÝ–âØ eà3f m|¼³6µ.2™—Ý\|¬ÿÜzšÝwÌ÷ĸ°Û'ïå»OOmK®bÑ&€pÔ)¯Â§n˱ñjçOó¤Üî’\2Ú’íÇÚý¢Ý¾r|k>1n£ë8wþ�_ðc.ï³yMo#¹°Ô · |Ö X?_ØfòÒžà%€W[¾ù_,ÖW«ÕÝËzýd‹ý¶A€ —„}õ¿Ý,ïïwwËõÚ÷úcg‰M c&]¦u¹•ôÈ€hSã§l=ÐÈG©~ÌK‹Ú£ãBÚØÀ_(ªƒ¼-Ÿ!màcž¥80©…y�ɼìn¸lìþÇ$Y;æpÇälܶ$SpÔG:ÚdºdW’e¿÷äÉ E ~až�Žö‰d ß@©�5�äÙ/Ê=èÌ�1¿Cu3«nfŸ3\U^¬ßj<¦/C;_êןó�[«¿YøÏi;ä•}ã¿°—ú-mõ¿±ßøom Ë»6‹çç‡M÷¢À«k[üÛ¿<Ù·ÿ÷ËþYÛÏxø1lêÁ¦F+FÔg:êú›Ê?¦ë¼Æ?å�U¤Å#+ôXJÛ&À��F|¦ ´ €r¶ØEd ÍÑ€'Œ*Ò2-ɤ‹8ÆŽò]ÿö>€˜›FOd@�jèD,®vºñD€s¨ß£ ÇÖIÎbÑ&€r™ñ9òvê˜c9A'б‰Óɦ„£_Ö�é°�Òçx�¯gàÔ¹Z>k˜cò/|kmßü[ß~¡3þÙôååùùÑTþÍÿ‹ý=àòöö~s{ûË~°²ÀŽ«0Qcù‚UOI&?éd‹|�_ôQltÒ‹–½××6”ކ?KÚÀg9S];hrAÃFt \YïƒVPd>¨Ù2PÈ“hM #-Sd€l:ÎzÞ ?ùD[ùƒkòh³}êxÔ­cP;"­Å¾°ôàH—b)ægÁSù�ÒzœÄƒ)ý˜oÓí—�R®³,óûÕ°k­XG«^—{ <_’î”~á¿1ùÂ踆ò­]³Ž‰©ë7ÖÕè–�Ï’{ Õ:W¬7‡fC‹ç2�ÎsÉj´ôÂØå¸Èl€¨u‘v‡=?ä¯ØÔ§:EG;|�¹oÛ % >KÚÀ;Sé)•©¢#ð¨g4HE*Éåc’ð€‘~µhTËÀ¼ ô_¿Ö&Á’ ÇÈ%Ù˜~Ê>ú¾'­Å@ kñ/ŒMÉNí—NügÂSç =pì1*N­þ9×®¡iÎ��sœ£S7H¿1š\<˜Åÿðí¿øß‚)ýuŠŸoÀ×°Ç:w^Zü–�ËfÀ»z_%4—HĨÔõ¥CV¢%ŽvY†.ÆÍ|ÔE»}AþÙy©d;ÚÞ eàÓd m|ÀSÅ&Íb714Y.ñ›ÿ8øˆŽþ„’\a¥ÏrénØ?ýDXŽt2ï`I.½&ÎÿY‰Úñq<ý‚ÁM´ýÂ’ ËÏ�¾ÈÇXŽtˆØÈÅ\ˆ~S>ûØNÅjúé ”ò�e™ŸŽúÖb�ô2ï]æ£çcUÏsVñ�€° `/J³?Tï^~ŠexoŸ>ûöš¤eàce€'^Á/c#F;\N½.ˤF¯¸’Eœõ5Ÿ¬SÜ^uR[ˆ‹êB&›ØÑUÚœZ.™�¶pÉlVJhÄkñ¯G8Lð5�OMßä-o2 æ ›ûâVV=ÿÆ}žg_ÅG]¤£M¶Ëº}ù±zö�%{-æK˜…iñ}Eƒsþ¢î3ÑûäÛSÃ9bžº�-Þù3Ð÷z˜�W¡_°ðgÑï¸ÿÆŸßýû·ÿ=f~Xô[ {‰ÚÐæWj5¢eàsdàí‚¿k÷«\Ý[X—v¢…çÊd/,?p¬'ó5vbî ÄÍ…Q–cROŽÑø–�‹e m\,ÕûWd“�øÏÁhÀ¥�©h+G¡‹Õÿ�9iô>`â&¿;®%]I&§16SzÅy/<Ö>rKiñõ:†Zn¥ÿŒx,Oç<êmðþÈç!ó´°$›Ûrùf\ò7›áfi´nžq`ذkvc¾øï¯U{Qšo¨gí>¸Wª°ÉZ>E^çŠoÿÃ%cG";É8¸,‹:Ñ5Œ¿t¢Á1f楋öÐ@Ôu’éOêÏ@œXÐg;»üyu‚ž¢ñ-'mà㜋±–h�É8.þ£º6èÉîµ¾ÝÅ¿ô¯v�j¨e€û]\¨êþeø–ì°ÉòZ=ç–Ÿ¢9ÇK\øC«DÑç>Þ÷ŒŸótî¶P_ƒËgà�¼Ïõ‰v‘®¥lzÌ<]7ÊaÎtȆ÷@ëi®O®[ƒ…ÉéY< X®h-_ v ¨[ƒ)t÷ˆ9JÉ"eŠ!YÆøe›Kt¶ãÑE Î¹@[¦J)Ö>u”ü›¬eàbhKõÁi@a0-LPhÙˆ—ò9 û9¶Í¦e`76îw¿íÖYèr¦ä‘Þ�òÊE›H¿Zœ‡:e]Ê8-úÁQ.úFò¹Èü…[é=ƒ6Xñ(´]‡,þUâ£ÿ¼Ð_H;íúå]Äp[®ßÞÿ‡Ѫk8]úEZü+¾_&Æ€º‰Î2ÙecH—eð1Þ›ò�²1û±}iwƒ–�O•�¶ðyNWÕrä±”¹88íêw¿ýW̆[öÊ€:“`-ò‘ /È÷ <Çø�؇øÄ¶LùG½õà¸ð×â_XvÔ=±Žš-6c0§ž1tÇÖ1å?Uÿ)ô—hÃW©c,ß§8ÆSÄkcÖ…úâÕÂX¦oÿ¹ÙØØõ‚Ÿ>¿4{ÊÂäËžæIè Õ+š˜É¸ýŒ %¤±—É ÿëkûMËbyµ\®ëõÍêÇ�ÛÍ_Ý­ÿã?þ¸ýÏÿ|äBØ>?o o¶›ÍöÊhƒíÕÓÓæj³Ñ%¦[gÌq¨» gÅ�^8˧xêŠ û(›CS©È—¸j#²CëQ¼†[.’�¶p‘4Ÿ¬ ,q°Ù7¸bàWŒc“�h³oüfÿÍ2@'Š&óL–ýÉ€¹ya‚m“â“Â{ÇäxJåÐÅ¿’sŽãRì†?N8Ï熩:ÑOùì{LµxQ.z.æºÄ6bk y²ÎïìXôoh«ák[øc‹žð€…]Çl8mò vØ86™øA†¹Ù?HvØ6h¸`¬K^/¯mñ¿\¯o_~üø±z|üëå_ÿòÅýb¹\¼<>>oŸžž¶OOOÛûû§ÅïßÏÛ_¿®6?r¹pÙÐÝK˜C)é$�ñŠåc<ºñŒò�}l«x0—>Ç À±]¢;Mûlø€hð¤Ìh’ <3\Š&ŠcCX[ô3Ô„£ ¾v¢Ý»%rMnw‚Ø„wg²�ùãÅsŸc3æ?Ggz?VlE³èW‘,â9q£Í%Ž#Ö×èËf€ó{n˜ªãXý)ÚŸÛ�ùSÔÁuH\°™×“úæý‹m°x÷ °Éx @˜M_Ü›?‘ §{^rÙI¯ºá´ \4ôSÛX¬Vë—Õênq{ûtõçŸîW/¶Ëu}{»Þ><Üoîï—÷÷÷/?>l~ýzx^­žì)“?ÛStm.�ˆ9 x ¤+ɲ}ô Žv‘‡ˆ}(›¢öAkñ¯z3¶ý<›Pûã�‡VÛüZΟ�¶pþŸ³¥±2¯î¶øŸ—§f5šÝ%£0‘dûsc̱›csÊöõ“~ŸÐw+›JX–(µ €}ë—ý9ŽM±~¿ p^Ï Su«?wû÷‰_;®Ié  tcÕ×|¾ðÇÆŠoØ5¼°…> ñÚMèŒY=Dyô§^Æ÷q¦kGO6Ô2pÞ XÇ´oÿ—/› �ÿßÚ–Gý_lñ}c? ° �›—ß¿ÙBÿ÷ó¯_«íz½ä^ƯlCàùéÿý¿îâ±^l å¦Ý¢#FíÐ’A—dQŸíÑE�?²¬‹v™ŽíTŒˆ#�¯ìsœÆ· |È ´ €yZNÖ¨sl¦êÉú±˜šÈg¬Å–Ù¡0Ö–Cc6¿Ëg€óxn˜ªãXý)ÛŸÛ’ù\ט~LGœþúÓ& ç<Ñˬl_x²0òñÎþîf|”�ý°1�xÕ㛂ØY\?ëf7´É´ \"Ö·Yîw/4ÆÀöº¾!`? ¸³—ÿý¸²Í+Ý{.Í`mïxyxx\þ÷/­¯ªó‚é¸âE s85úbª·ãºÏ/ʧèè'Z_è\Ô�M2I¢3í£eàƒe m|°2Òœ<ˆh B®RrÏ~%›NÖÿõÜ4M5tD:™0V»ï¹¬êÄ=Q“Ûˆ«*TϘû›1ÿ)Ç ‹•(=oJî㙪¿é�ËçïÜ0Uǹõç>¾_Ç"u5škÑ€oÿ¡øý?Øy-þÍÆuèE ›Ì¿á7¾††3mã�¿c ȺØØj2S-æ`otƒ–�“g€¾Æ‚ÿêêÆÞ°°'V×›Í�-øŸí›þçÅfól/dC`a6&zÙØ ®í]‹›6®íßL5L h"ݶ&‹úH˾€dº ²<Ú¸Cï#:ÚK&,�xp®{zúU>cÅýÛ&ikð3Ð6>âYyÛ& |o5»ì4híj×2p¡ pGT'Œ´“ÅãœÀ$ªŽ96§j£ÚÎ…M Ê;ÉñŸ—<Æã[Û"(œ·sÃTçÖï{|c퉺Hï[öºV{ßx&ô%^½´) X„`á¿´±h_Ô÷׿ûXÛ©Ãë)m39uÄvQOƒ–�“e€ÕêÕÕÒ¿÷ç¯í ~[Ô[·|ÙÚWþtPþ ãÅéçgþàqóãÇïå�¿Ø0ùµÿ[†aìúv‰ȧ謗�°â€?ÓâÁjK”A ¢^2µA¼07nìÕìj¶òi¸eàÃe m|¸S2»A°„£cIõ;ôʾù·Ñ‹çý¥F`¿ ll(×"Å<<(·‡ %Y¶iü—ʽ€þPìtÐ>yµ~²WÇtÇðÁƾ&T;dÖg~ǸÂà3S}½l"æz‚Ž:ê}læ÷±uÐÎ)˜ªcÊ?æ¤f{lµ¸ûÈ�mÔÿ”~N[§bœ[?§�S6Sm”É®$Ã>ö1Ñ=Ž#�Ó!c0`Ó‰f±ÏB_˜Í_øƒ¹þí>ëõ‚‰arßT ²pïuûð 1b¿·èÛܾv¬ïò;ëªêÅÝñŠc#À^ø`/ |ØÞÞþ\<<ÜÚË×öTÀŠ'ÌS —Êàv ­[¸YñeŽm�ßäý�© ýÆÖòi—v8b”F· ¼SÚÀ;%~nµ  ÁÞç Æg™ä2Í¼ä»Ø~¾uõü|µxzº²üêÚ&> é' TͤŠž¢{¼¬qß9tHuºH¿Y°s´þ3Èçò1¹º—çP�òͼäsplC¤ñŽtÖEºAËÀWÌ€®[[æ%?—bF™è±ëQ:Ú!:ãJ5þASô̰\x™ |½Tp°³¶ÙsÕW+üÃÀ0ºYÝÝq¾oÓ +ةΆ[Nš›š2=­Ä”\—f¢Á6c´ôŠ%¬8Ä£ÑË'ÛÂïjgô!¶âGɡݗy<óy Z>BÚÀG8 óÛ�;<ã€�ù8ÅšÜîÆ$+û¦meaLvذ7¹^Ù<÷ 1Y1ÝV˜‰GOÇ �þ~ ƒ©Ó©³‰×"°áþGß9ÔâeyæOUŒ� Z|‰ŽºZº,o|ËÀGÎרLéñÍ6c|ÔE:¶!Ê#-]kºF#�Mæ£ÌhŽXc[  ÿP7>^l�¯g‰YôûÂßdK»¯òÔ€ÿÓñû6€©C˜¶ùf½aµÃÔÈo4¢eà`#Àº%Å«PS양ƈ²-ÀO2xÑQåÐ@IßiûTûå�9Ó;m´k²m(k ¿{ÚÀ»Ÿ‚Ù Ð@‚C¤Åk�¢¼“tŸÃ ¶ìŸXñ€éxü�'Ø`‘Ï¢_… dž 2£Ùhð=3À™WçŠô� ëš„º�ñLZD NBvÂѬ$‹ú�ý2_ó›’뱃/œåâÁ Z>c¸vÆ ¤/ÉÆbª‹õDZñt�FŒ._¯Ñ^tÀ|¹ÇAÝÉ Å7ÌF¼c»×‚Yðs?oØàË}Øx6 À*ØP�ø7›½ÞL´ \&¯Ox×´JéÖЀh0 ËdŽ^¾ø‰‹£ø²ãÑ• ÆŸÒë°ƒŽí�]ƒ–�‘�¶ð!NÃ^�ˆƒ ެÆèz��Ý6Ù`#À'L@˜DØ$„ß*²ø·ÿ{½²ÿ�õG©�§´ Ä»Z©G �“‰·úL¤•Â’ ]I~¨¬ä§úÅ:¦–ŒØ¢Á¢Ugæ%o¸eà+d€ënd»)¾S>²‰ý›z猆m6âl1D³ð§ð�ÿ¥ ˜ö†±ƒÓÓ~¿6Þë4 ´M€.íó `áß_ÔGW×……Ô…K²š[â”ô1N‰F¦6H_“e9|ê�ãB×xù¡wš¹ÒQ�¼AËÀWÊ×P Æt5Ÿ9òR\dY¯WÅÖ5),ùVìÏd~ô’õ¼ß/{{Ý;õ]äÚê]ÙýVïßy±'ñøŸ5v>ÆZ=þNã¹oS7:Çjƒñ ZN’�Ý¿BÆ�€¡û™r§;öÆYyL¢?¼ô‡Ðò ž@2ø(—>âl eⳌS±c=�n¸HÚÀEÒ||%ì²s"i@™ÂÁ¥@Ú£ÿ<°¶ÉÅÊÂ/m‚B56¡ >Û èÞþÏ„‰ÇýÛˆþ'š¼¢6ÑÍ@쀵CT‡t}ߟ|ÃÛúÏ΢žÉ0²90f›uûòsêÏ6¹ô‹Šì#�5ҲݗÚ�c`3Sí˜ò‹-ÝT²«áS´¡[òV‡2q<Þ7—Ù~>ÛÖZ_³£oÖJ-–äÄŒ}[uHf|¼ú†/ýd±Ñ><ïÝY™Ì_¸küÃhô,üøé÷jc¼XÐC;&~ß.bˆvßöÑ2°o¬ ¼3ãp½^\==y×´—HëÁý†Z†.iôNíùl/»}hÅ‘Pý×ñ¢©ÀF |MŽ�Jö‹>è°Ë2ù4Ü2pÑ ´ €‹¦û¸ÊìÆ�7PŠ°ä · \<¥;2-þ‡Il˜({##_¢u$L’¥—ìXœcf¾Ÿ6ÄÂd<ò6ygm(Ò•b*›ÓαØÇú�Ånº× �çcàXÿ9uOÕQÒ—dcuíkŸcÕü£<ÒòçÚ“º’—®SùF¿¹üe+ýlîô�Ü2d*ll¬øÆ;uXñ—Z|_ÁMñwùôrtW¼7õUf¬C®›ãy#“qÃß6öbJû]Êre? ½]ÞÝýXýùç_/ÿöoÏ/OOö?ÒW/Ï?>n7›çëÇÇçÍóófkx‹îþþycOšÚƯ“¢kÅ.¯®6%‹ú1šócÂY&ñ€’¬Ó¼êT7¶*ò�¼ü„U‡ø†[Þ-màÝRXÅ…M€Ò€"™©±ÊºoúÇ,š®e`Ï pT'ÔÂßC0qµ‰åSü`hD¶ÓeÛ)>Æ�}$�˜c¡hñ¯?26´ ;áãXzN;Çê8Ö,vÓuýö˜Ê ³²ȶ¤§^.1ž|È0æŸmß2pÖ ´ €³¦÷<Á ›T¤�¥†Gø>jД-{fÀ¿©²É¤“Öžv “KÉdc '''Ÿç˜œ–b–d] _?i3E‹á¸ø×�ŽïÕû4ÔœvŽÕt¬ÿXìï¬#¯ÇÀ±þsꞪcJ?§ŽClr½‘¯Ñª'ê%ãÚC®ëu Ë/ÇÒ5å5™ê&¦haÕÓcz £ ÷‹ ž¡ÆÇ 26´€= ú¸°-›ˆwÝžvC[LxÑ®·˜ Zr¬Ÿ,|`¹¼]ÜÞ>Û¡ùæßnÖÃV«Õæ÷ïßÛûûûͯ_÷«ß¿ïŸþþ›Ÿ\]ñ4ÀÏŸÏöõ?Ý™.¬n„¥C&Z8Ëàsl�/òв‰ò(C^Å× ¾²ƒVld¢‘7hx· ´ €wKýqW6Ž Ú¦có×üsÂ$WïŒð»“M¿bãL¼_š@¾Â�Uý3ÛíË×"ç8Ñ®Ÿ4ï,þµð×F@^üã33Æß‡>6æ±þû´õ;Ø’ÏcàXÿ9uOÕ1¦ÓåºK¶Y–ù#êæÐÑú˜k®«mE-ZËÀ1H\î”Öw‡ˆL>_9WÚí´r/ޱ"=D;’¨Å,ÉÕF0%.øã&@Ôɇfs ¢í˜]Ô•ÚõSô±þSñ¿‹~êÜNåáXÿ©øè§ê˜ÒÏ©ãP›}ëŽö‘æ¯ë zª”rcèØJ2tÈU—bE[ÑŠm{ tŠž%¶ˆÒž°ÂKyá‡Òó¸Jæ ÿ~Ñï?ÝÆW›†}ÁìµbVg«AË@)þ€ÅÂß`÷nÛ¸^Ø¿U¬¶«ÕÍËÍÍ�ÍÍÍÍâæ½óo¿Ø,í=‹¿ÿ~° uMn~êd¢…©6Ò%;l�Ë H&u‘‡¿ã^íÅ×0~ªO´b‰ÇW2µ£¯É[.š�¶pÑtŸ¥²Ò "XƒO­rÙÖôMÞ2ptôí?“b&¯,ú�7�Ït>qÎ5ÖäSvÙoŠÏñ"Ÿ}Ñq*l°ðW�—.âót©�ûÔs¬ÿ>u}E[òw ë?§î©:ŽÕÇ6”beYækþÑ.Ò²/ɸö¢<^‹¢åŸ1zAŽ�¼$‹rùc7E«ž{/2}•ï�ê[,_üVëÀ‘&¶¾è·Ÿ ðW‚üÛ Žáݨ{J€ÍKÿªÓëBß e gÀž°þÂôiëb‹õïX¯Ÿìg)OöÀÚ6ü›ëƒ//ÏÏOö€G{"ÀþDj±à €ê®±«•dÒ —|£.ÓÙ>òÐ>ÔŽ(+Ѫ ûHc‹Lq²>ׇ}ƒ–�‹g m\<åg«PƒŠ°*ʼäG›HG›F· ”ÝýÜ™I«MB‡Nf<0ØäI2zÉÜ2}Lé“ù,v,fÖÑ6Šû` ›Ò•ð¬†a”Û¹o¨cý÷­ï«Ø“·càXÿ9uOÕq¬~N±‰íªÑµ¸\ƒJ|¾N±�õÈgJ†_¶�|‰Æ§±7ùÆio££Ñƪó}»Dƒù—ÿþóÓóí?1Yü»�µÅÿÚ×ìl)×ý$€8jc__C-CôÃÖŸVÖolá¿Y®×ÃÛÅr¹|¦_½¼llñÿ¼x|¼¿¾»»_Ø íÞH·ó®g˜®X¢³¬d'™0Í bœïFÁNërì¨�t¶+ñº>…k6Èclì#�>_ßÒK^â¥SüÈ#ë�^Åâhñ†K#/ZO¬Ì•A�ã•-þ}€˜Ä³vx}•öàÖàg€'l‘o�Äžñ÷U¶wNzYÙšÎÿö˜Êöykÿ`ïømøëúöveO °(Æ [ïº:ê³�t[˜�¸èÑ™xéÁѾdƒˆ¶Ø©èäÇqÆÅ?ò¡Ø5æGàРeà½2Ð6Þ+ó§­WR kPzS+ã�mÚ>Û_³>ØÓY¿�þiøÌðÃÿ°A~aA6’1 -ù½—ñK{”pa…/4 ¿‰Ýß;t:uHu@xÉ…ßd‰‰(“Ï),GÙ‰?.Å,Mˆ‘�Úý"]ª#¶ýÄX5»ccLùSïT;æÄ¨µÿ£ÈOq ÇÆ8·ÿœøS6YŸùCÏgŒiÅ‹2ѱ_FxÅȼä²W\ñà(ƒ¨>éçòøãS²�±Dc®:…ñ5=r£|Âlð‚`ýè*Àx¿ÁÃ›ÞæîÇ;¯”$ä½íÀ›šÍ„_'v6_Oh:¹ƒ¢ß 0õÂ^È𯋾3ÈLXÝ”$E:ë¥Ë¿š-:@vÐ’AQ×IÞÚHmÕt%:ÚÊ¿á–�‘�¶ð!NÃI¡  �t¹"t67xá\ïmà§ Úÿcü�ñö²`»{¿¼<c ÿµð�=Rxc½˜?ó†-³2PêŒ.cR*˜3iÄ>Ú�šW[„U—0rè\d?çvÏõkv-ûd ^_%¿)=>S6SúRŒìùHÏmsÉG׬0±òuu¥ºj2ù•êU=Q‡}汫ÉbüÛE ÅïmU)vßöc-›^Ÿa»Ïw?0=ï`£À_f“ ÷#.¾ÀV\ÃÄľ3zµïíó»eÀæ�ÌÕ]8|hxº¦ô%Z²ŒñÍ~²‰:è(Ÿmàl#¨Ž(ƒŽv²Éõ —ô›2\+jÐ2pÑ ´ €‹¦ûì•ÅAZEk°õøøøb ÿgûú?mBpkʵŸ®¹£?Ø·ÿ?lbðcs}ýþõ¿3ú“ÙÐ~ÍâÛ-Õ èN(Œ¡hÇÜûú‰äÐ�{“Jto0A¤ƒ>'„I­Wyhñ(KüTÛ.uSíhú¯™ú×Léñ�²)éK²±vªS=Â¥8ºFu} cu%_ɰ«Õ¡%}ö+ÙÖdŠcD[É%S[…{9=ÀŸG&^ïc�þù_"gÑÏ&�ý­›Óþóx+ŒÑ h/Aî6ðV‚®´Ïïœ�ÊF]R]K4@e‘G?Gí ùu\Ç‹«=’©=â…£�l² ~ªÏý™l;Ó6HCƒ e m\(Ѭ†%UŸ+øíÃÃÓmü¶1è–ü�«ÉŸ­<šì§ÿËÿ©ðÈ =#Ȉu£À · Ä Ð�è\%ŒÝ Ó„¡@²Œ¥�X6È"} >Ö&·; †’\~Ò‰ùíc¶M×207ô«1˜Òã;e3¥WýÙnŠ/ùeÙDŒMéÚC6V£ä›uµvÈ7ëKò9²hiÚ_;Ö¾½¶Iï/ö£PXìë|:oþâßlµ˜çÛѬMÇ�7,^˜: ý)oì¬Èh#¾@[Ûtyø¶ŸÝÓêÂtCÑÂ’ “²}tØG_h ƈ¼+íCvâe/^8ÚEÉ%�Å»¯]3íÝ1+�>kÚÀYÓ{‘à S…†0a17é­=ðdÀ;~²[Ëd²G{•˃=#øÓþ¶å·žØØ·üïëÒèµëÿÑ…ð ZægÀ;a˜¼ßÝ=<-O,þí)€ë ï°ŸXy¶»ºâšKƒ–�·:›©ÔYÀ×牫”’ g9|ÔE:ëáña2ÛOha^òˆ¥wÃ>rûÑ\Zv“¥tÐϦ`ÊfJãgÛ)>úîK+v¼f‰¯Ó½o]ªCufôY'l£®$—Lv‘/ѹ~ªèíø}? s_ü›|XôC›Ü‹hÃúÆØ0hûމÕóž[Þófu ó…¾á ª?ËÿÅ2ÀÂ_‹á×CTÇŽÓ‚šlŽ 5È.әרú¤ ¢N2ù‰—ì$G— : ú©ÝvùؤÚ/ Î¨}¶ œ+mà\™}Ÿ¸ "* .¢ÁXr >[¾þGnÙÊ?¸<ÝÞÞ>Ø´¶Ý|ñÿñhßô?Û€d ÿ•½pmßüa�­lÐì´ ìd@ ¡haÉÀô¡`²ËäQ8*K²¨?'M›J…: “݃›òžÇxp£›ã‡Éýg ¦ôøNÙŒéÇtcí*éb¬HG[É…£N´®ÏÒõ+�lÁŠQjÃ!ºì3ÆG]¢cO€f�Î €}Sº÷Cí¸§ímÀÂ_ 0r_ì›�}õï±=90�€xq=“yÙ5ü…3ðº! ®åÝÑŽ8c’�e™/ÙDY‰F¦N©xÈx@úŽ{•‹/ÙD]¦u¬ÂÒG>Ö-Zv · œ5mà¬é½hð8¨A‹�4 ’\�{áV¶¶ð·µþÕòï¿ÿ^ÜÜÜðW®‹—»»Û«û·ûßW›؆Àbqk7÷ÿeøÁlÛO”ņ'3À]oè|6Idòè'Œ¢…1-Üy½Ê£M¦OÁ«>Ú rñ%Z~‡à|¬‡Äh>ß/ô›1˜Òã;e3¥Ïõgû}ùO|Žƒ¼$Ó8£k5cü$ƒ>T×X;ˆŸõòSÝÒK>‡—­bô˜Å·zÝ�Àvø¯¿ÕG‹=õweææ›Ú Ðâ ¸=1¨«¯Ïk’ÞpÜp§öñ2 ®¤cí:L×eè"‘ÇF²ŒÑɶ¤“,Æ(Ñ9NäeT_ÇuŸÔ3ð�1Ä Ç8Š‹NtÔ7ºeàäh'Oé»Ô@δx5R6ü ��^þwmÿÍ·>­žŸÙO~›àaißü#3ÝÆ°~Zhlƒ–�·Èw³Ìïx09eÂ(ŒR´p”eþPˆñs ÚÔOdCÛ„Ø‹tÒË·¹ ûH.\‹õ¢kxN5_äSþØÄc‚ßæÔ±oÌlls¼lçöŸÊf_ý”})�%YŒiÙ–dÒ�écêg¢#/Û’LºŒÇê$Δžx5µCú¹¼bFûÐßtULªÇÞ@ÖêaÅ"Úmì÷ýîk±ü%Àf'_{O!^ó ‹Ú‚Mƒïš~+J·2¦+!«a|æè¢Ý�^í ¶ $“,}”ÕhÅŧTJ~ò)隬eà¤h'Mç‡ ¦�36YIm w£î÷þÙ¦ñ-£àηۑ‚9“Q› ú´Ÿ¨îLR{Ù0yïí‡��jG&;é§xì¢�hM^Á,ú…EÃÇ¢úæ`êð¯�ÚQÓ7yËP_ªecJlŒ9ñKud¿È‹Žþ’ ׎;_[ùZ•^¸ç¹b޵qÊ}ôÏö™§�Q&ÿ1™Ž­¯‡Q‰Ic6˜%>2_ê;tü� cÑ66²I`)ì/ô§ ¨ß 1'qƒ/’�·¿ù�æ] @ÓuJÙf›¨‹´ì�Í¡³�x°ê†s.à?UJ±ö©£äßd-³3Ð6f§êCj°«áØxÙH–yÉ_q[ø¿æÌìep@IDAT¢Qe€;! xsgµ å°èg¢È Ô訫ÙD¹K%=2@õ‹†§°ð×â_X:Ù‚�R¬N³ßg©�ûEhÖ_9êgµcœÒã7e3¦¯é²|>ÛÎicíøãµm$ŽºSÒÄ/O¬Cm(Ù•ü³¬ä/›¨+ÉÔÓi21c3ü𸟵Þ íed9¶,üMÆ¿ 蟮�×F€hÞ#€¬Á—Í@wrµ! ü:  a“1 )ÉÔY¤«Ù•ôÑV48Æ,ñȲ?†i€O­¸�}È^uD™ìn8iÚÀIÓù¡‚åA>Êbcó`£A(Ú4ºeਠЩv:“GMEGLm葉Ë&ÒQ†\å‘.é%+aÚ “^ƒ0þ±.h ê;I÷9¥Ç*Æ‹¾�þÞPß©eaJ�ߔ͘¾¤+Éj퓼æ#¹pl¯d+fÄñÚ�>^“‘޾§ clµ·WvÙ¦$Ÿ#‹6ÐÄÍ2k#ã3à´ÙI¦èÛù‹^ïºþ ôèXô/7›� þ�…?_ÿ»@ÆO£Û&YÿÚ`›C]÷îYìf;]0è°Þ×.úLÑècÝ‘‡І}@LJt,Öù‡=5Õ��×aׄ=iGƒ–�3f mœ1¹ïZ¥ªÏ|”�é°‹“ün88t¨�»÷8›0:ô´¿H ™îQ�¡t’wÞ�}M—măs=Q­zÀ&®ñÂØFˆÇ†¼TO´Ÿ¢s¼)û¦ÿÚPªå”¿)›1}IW’•ê©ÙEÛ’�dÂØ \·ï±ÞÚqÈ&ë‘—dG”gùE¹èÞ7NXÈ“�Õ,þµbññÙxéý›ô惽ìì}A¾Âa±oÿ.tµ°2¬iˆoí}§3`-kp‘ ì.øU¥N»ºœ0zÑÂS2ô9^ôهαà#¨ž(£u øEZq2– ¸AËÀÙ3Ð6Ξâ‹U Áƒ E ÇF +É£�h¶ç±e±Óain8U˜¸ö“Ñ�Ée/&¶âU¯ü„%GY¤£M¦±¨.p,ZüGõòW�Š©x襓­pÉV:ᚯô � ¨¯ÔŽvJ�ߔ͘¾¤+Éö­§C²ŒçÄÆ&^Ÿ‘FÄk³“\îSuëØrÍè³N>ØF]I.v5š8½ŽÐW%fFC,vþ2P6¾1`¶,ú}áo4 ¾åצ¼`e2Û °ªºGÿÙdhðE3P_øÇ“=t¹@—d$J¾%}MVòö$G–unØHect<>µ¬=²(Sû÷­c¬þ¦kÍ@ÛMϧVÆZEƒŽNvâ§0ö ZÎ@ɡ�öCmhrívdîhžøçKbÆ¢ €(óV>NÙ®Sƪ4·‰?púk¥ÚÂ)=ŽS6cú’®$›SO<ˆCtÆ5û(�tm,¨É£ï%iµGÇë>D—}"_¢UŸÕ¿3›Üù^îc·Ñ`§Ñ£ëËÖ0Åóï1ßþßüãgõSügfÓà‹g€Í€Ý �¡ëЬ¨ˆÎz„�äÂ’ G»,CWŠ/yô Ž z£lŠ–O G´Ú,z*vÓ· •�¶pTú>œ³5,ó’gŒ�@ƒ’xpÔGy£[NŸM ™(Ztï|AæÂ3‘.µ"êjtÉ/˨'–¹‹êðæ¶!ûuÞ»Ÿ1Ö®¦q_9êµcœÒã7e3¥Ïu—ìK2ùE]¤¥ò–mæ‘뺓M¼†%ûhXmž:ž¬—Çu’KyÑÑ'Étãç±ØG5‹;,øí[~6mû“¼#ÀäØûâ߯Oû[a—Quƒo’�n ¿ú1«KI¦n†rŠŽúìusiêT{Dƒ#k_P̈‰Ÿ€— ú-gÏ@Û8{Š/^AðÆ*Ç®d«AŽÁhâÏ"½kÕ¸ož�·g7!ê`»ÒWn¸ ö“VçÓÄÔ'÷è‘×0!¥{ ßQ}ì7‹„l§zÁÿÂØJñÜØ¹®sðjK-6íƒ)ÿ1_é.Q‡ê:Ÿâ8§ê>¶Ž)ÿ)=훲ÙW_²/É”›š.ÊEOaÅÓÇd/^z]›âçà«dHÌg¬]35›1½tÔ'ɦøš�ùÇoñ;³n$÷'µXÐ÷ Ç=Ï£ÿ´AßøûÏl åoýï±SÛ:[â7ø °saç௖׫Õòz¹\-onV«?ÿ\m~þ\ÛÙ²¿ŠØn7,‚7§½õÐÖc¬è„Ö謗�0Ꭵ‰AuFÙÛýEƒU¦b5}ËÀI3Ð6NšÎ,:Ð¥¢¨Öè£fÓä-Ge Ú ™¨ö“:uÄaŠ\záÜŠ’¼$Ë~ðÄW?†ÑEèÛE{ÓS1¦ôs+œ›“¹ñJv—¨£Tï\í;7[Ç”ÿ”žã›²Ó—tseÊm¶Ïüœ6*Vĺ„ѱQ§‚\%ú}šv—ò¤¶ë˜k6Ù?Ûgž¸Y¦%,{tÒg¼µ�ñ› �mÿ¶øó'^ì'“`±mAéu€Gä >L|á¿X¬lỼ½ý±ýÓVýOOÏ·;ñ‹ÅõÍ¿ÿû¯­ñCùýûyûøø¼}xxÚÜß?_==i@Ö­Ÿc+Ñ’e\³?DŽ�€zö:§üÔQÕ^bI&Þ }Ü®ù¢oÐ2pÒ ´ €“¦óCÓÀ˜}H ÅÙ×·Ù· Œf€Ž©ÎUë¤èÝÎîƒ~C$"÷Ä<é“L;A”EZzá:ÙE}¢üz*æ”~ߺÇr²o¬šý%ê¨Õ=&§]ç†cë˜òŸÒs|S6cú1]Ì]Í®$�²H+žd5Œ]¼DG ­¢¸Ò‹ÿ ˜6+µöê¸Jv%ÿ,+ùG™ì%S;¨Y*<€ÌêfËUæßøÛ�oüµø÷§L¡tEò‚Ärh6y¬ö)öÍ¿�'6n®nnî–?~üùÂ7û,fí�åŸÞ¾<>>ÚbÿÁÊãöׯÇgÊ?ÿ¼Øâ»yzR‡àÔª;”hÉÔ„ñ‘ŽÌ#Ç_ 8â§pl»lÕ6ø¨'v.v©pauÐ6”‰†O•�¶pªL¶8--³3À]-Þýâ]QA$cÞÀ}Ðí5áÄHtÆCóÐýS6Òe,»ˆ¡ÅcŸyň6’� Ÿ«®©üœâx.QÇ>í¤=ç†cë˜òŸÒs|S6cú’®$«å±de5:¶[6Çë@×¥dây@´p­�]®c‹y)µYvÊ•lJò}dÄ‹ö¢Õx+¾^éé¡ßÁ›?ã8›Ûçgÿ柧6ýOò•¸Ã›??°ÇÈ;l4) õ9×>>H´p»¸¹y¶÷=ø‚ÞÎÕâz½^/ÿúënûû÷½-þÛÏî·ëõï«ÕêúúÙøõksÅSÐ ˜*%zL–uÄ Ö¾rüøîj;>ò�2è©¢ú†Í€¶ ”4|lÚÀ±|gXã ’[¤�'ËÅÇQ²†[.’:®:`Æ4€I#ÝÛ;±hÃýÄ’‰ç —,Ò2Ê2Ù‚Ec+^XþÒEþTt¬?ÇÓeÛCøœ—CbLù\¢Ž©6 §ç†cë˜òŸÒs|S6cú’®$«ÕS³-å=ÚF:Ûf�®ÍŽ›9Ögåã8�ó¡c’MÖ#/Éð‹rùK.›L¯oüߌ™½-ã¸/þ-¶” ç¦ÿ9Õâ•é´Å`ÁÏËù¹ÀbeÓVdVüþ dž?DXèÛyZÙ†ÍÍb½ÞØ9â&Þm ÜÜÜØ·¶ðÓÿ˧Õjñl¿ˆÜ¾üúõdö Û-ˆÓމn ›|¤³L:á1ß96òª¯ã^ÛE¬)ȾØ#›*Ø©­sêÁ¾AËÀ¬ ´ €YiúðFc úXò¡+ Pƒ� ê¯uDz°hDËÀ~PÇíxÒ;žÏ!º ß› (ÕšÞåÂ¥¦Œé˜¨RÑc¸³|ý”ï«ä´Ô¹ã«µc9’ͱøuŒµ‘úÏ ÇÖ1å?¥çø¦lÆô%]I6§ž˜ë#Ò²‘¬†e'¯Ñ¸Ø�òLË÷+`� ÊW>&ôY'l£nJŽm´Q]È(Ò÷¼/ìý'f³5ÿ XnGSúx°N›½ÿ•àz=´—‘šŸð€,¶Ø·s»²oûo|“†Åÿr¹æ� Þ ððp·±'x9 �X›MÚâÿùyc?x¸² €þh8Å]`Œ–>ã9¾S6èU74à]²#]§z{Ñ^ˆØSEñl׋¥,^¸{ÕÙŒ[† ´ €!ߊ`0¡DÐe�n8k¸û©#Æ;m©3ÊΤɦîƒa¢¹£‡‘m¤£Ìúâ¨Dy‰Îu–lN!»T=jk-7ÒŸ_¢ŽR;©÷ÜplSþSzŽoÊfL_Ò•dcõ”죬F—Î�l#Ž×¨há¸@¼K_?¥c8·LǨÅúÑ•|²L]�s>‡…¾ÕÃïà‰‚2<°¶ÿžô°§ûí~+‹o®Ÿžní.ìüm­llñÿ`O<¬nnÖv®õ¦îC—€V×-}Ʋ'Ʊ41_ñÀ@”w’îSí³‘=1T²,·]ñb|ù4Ü2°wÚÀÞ)û4$\ ÅÇ@VÄjòèÛè–�ƒ2Pêp“�˜(2ÉdòØcçq”NA2/¹pÔ+²\¢�tQ]Š•möá§â¡çXÎ1OŸ¹Ú~Î<)7ÇÖ1å?¥ŸsœS1²~Š×±�á91¢M¤·$“̵ Å܈6�žº¾ç´·–Å.é¥#þ¾úè«ö!³ÂÂÜÏC¢U‡/âmÑîß ³x·ñŒdÍv0q |áoç–oÿüs€=0l ¸Eûø°ïÿYÄ/쬭¸&»³÷Ú2ûöÿ†·²§ì�Û»»ßË»»_öd@é  A—P¨-YÄÑ÷P?€¸€Ú-t„1›)úXt<Š_«Sú†[fg mÌNÕ§2̃†¿Ïà![aÅh¸eàr`‚ÚO}"Éä2É|C€i2‹½lJ2µ^qá¡)Ì]„EK'œý‘ D KþY±òwlûÇòqª:mã%ê?¶Ž9þS6cú’®$ËqÉ>Ê"MñÂ%™tôháØd¹É»¬‹õÄ8™.ùÉ&Æ—l_<ßX5{êk«ÚP³‘žø5›JÝŒŠ*òuÞâ€a&¢]‘?¨»ß0°ÇÈýŸü%‚S~ŠÓ‡6)ŒÞtÎ˶á÷Ì€wk@ìS´ôs’BË»'1�(ë$ݧô%›¬Óñ Ç' ðÇ>ú óþj{(oä®l-33Ð6f&ê™1(Ô&ã¸A£ýàu…¯ÑÔ�ÎÌ=�ÉœaïÈLÞíGlÜ6¦Aº(#^,,üµøÏ?l¢…‘ïK+ÖWÆ¥¼¿÷ñÒ¦KÀ±õÌñŸ²Ó�éb~jvsäÙF|ÆÔ'Y¬šë 8–h‡^6’ÇxñÚ”¾†å·�O-Ö{Êi¿Ž¥Öã˜�lˆQ±cd¤D�LòíEsuº�Õ图†}ñoc²}Ë|e�’»^ýDØÚî> Ó�ÚâÈÒ{êjƒºËÐ LQ¢%˘8’Jã§v(F–E94PòÉr7ìmuìòÏf@éw.Wƒ–�£3Ð6ŽNá‡P,�I.Ì�hªT´­Ù4yËÀI2 Î8lt÷P_ð3q£&…=½cÇûŒs˰¡¢…µø_Âò‹À^iÉ"žÒGÛÏJs.ïy¼±jϹð±uÍñŸ²Ó—t%Y-?5Û(�4qÄ×°ê’^CI–m¾;ÏùŽÉ•bt‘.ÿylýsü§lÆô%]IFæjòRV£í-} ¿Ô¢L´plqKrlTgI?æãGZñ�•bFÛ�J«ÝñXjm•m¯g¤óÑ.Éåî:‹ëv}|ùûnÂòûˆ€‹÷žg!Ï·úŽ­^·qmoßÛÉž €%1hí´âþŒõ .›�þ›~;œ~;%Ã7ÿê`N©ë{Ú�óYm¥Q¿¯<ûÀ1N'Ùý”©Ža×b—Ã>Úiñ¯…?:m @S†:Øh›–‘{g mì�²Oá”a -G&¹0ê8óF¶ \0ý$1׸Ó95écBg†ÅÅ?q˜ìeü&°Ùô“Â×¾ý—/ö@Æ�ôí§ì²¦&Ïvß�WØ'?òyÏ\Û†9þS6SúœŸ’}I&¿’®$Ã>Ê#u’GÌy‡«D,Zm–OŒ]²W}%�âí‹cýûú~{åB¹™Ó&ù[=öÏ(©‚zŒî>9ÁVവɟ`ñouêþxn™ÌhB1˜¯ûóTǹϱAqŠ ¤Å ©ÓÏi£¥&Ƙ=úh;FÇXò˲(‡T?4ñ§ ÚGÛ¸;7¢�ÓmàMJš`FÚÀŒ$}b nàÒ@$½Q6µIv · œ=tBuÐØ1�¶I›wR&‚´¤ŸÄùÄN:&¦ÐË™Z%/ü᥋_ø9¸³zû)ÿ·š&QtþÄ×°ÎyM ù±m˜ã?e³¯¾d_’�å/Ûgß(+Ñ’ ×ê‹×Œ®ÇlKŒh—ë/颬äŸëã�õ‹})�ò1u>ÔÙFÖî{½Lrp¤‚q\rÉL;ú¶`GÑ9vZ²¿‘ÙãÿÜðá›ÿ­-þýçS¶„lð~è7b÷àÔ¨K”hÉ„i¼há(;„–Xm‰²,‡?¨ƒ¶Sâ¢?Ö yc´ ìŸ�¶°Î>º‡>áØ^ds`ÇnÅ{ìwvöÝËõó³ûûoò´X2‰;ô“}+¬õœŠ›MË@)º+¢Ó�oè¤6‰óÉ�éüMF™0B ãixÙŠ†§”þ²™ƒ±ƒXoÉnJ_òÙWF..ÇË%Úyî:N*ƾú’}I¦>RÒeYäE 'Òðô “ùõ‹.öhñ�¾ùÅ¿¥zd+�b#ÏuËF>5cD›/êDOÕQ‹-ð›hŸéS´�˜ÇÎVWzz¶"¬§¢-®ø1�Ñ�¤ï´áÓbËFÒÌ#Gæ/ ´'ü ›Ëlm³µ1Þ7ȡŚf«{ ¹÷6÷ç`�Ï ô­�®-ïK+ëÅz}³¼½ý±üóÏ?nþõ¯‡Íýדß{ŸŸ7v޼\�Ÿž6WV6àÍÆO©eP]F9´0I>–&†â+^–ÁÔµ/ÄØø*ò9EõÙ°ØuD›)†t · 3Ð6ŠiùRÂ<d~ü`^l¾Zn·/«þwÍáåºÿ ƒ5_À6þÄB`Ÿ¬A4h8 ÜÕa#­P¾E¿C`÷=¿jbÈý�{aw_Ü¥@X6`•©Mù–°âí«Ã~Ì·o_Y›ì›±ãì�Í÷ÿ1›1]<²1»’.Ë"iÕeFs=ºfûù«„ök[ׄáÒ80:çÅ7Ö­X’Õø®ãŸÄ�¶ÓeÛOÎû¹´ãÕ"ß±ñ¾øg® XÇjt t~e‡Õ>´bF?÷§>mØØÎ&}ŽWúËÁr.`ïŸæVaþã±k} 绋,w¤lu½Z­¯×ë»Å�¬žŸŸ^l¡ÿÃòië—'[éßß?nŸ^~ýzzº¿Úþþýtõû÷ÕæçONYîoN·ÙDÙ1´NYŒ� >‚ÚeStŒýUW”A«W:Ùz,òÛ6¦ÒÞôd m|�~ÀÅÞªq `pˆ|X¬Á$Ú9mƒóÕÚnœ Ãö@´/þ}—¶¿²øßژΎºÓ=ï›íÆø&ŸMpxb§&Š:1L&â¾0ì<ÈܰÓC‹õ͈¡­ÿz�VÁ/Òâ#†žbŒÁ”~ÌwŽ®2éžãÚlÈÀ1ùžë;fWÓÕäùkvYù�dº À^ú~/¹_k¦cÙe†u­K§¦rͳ¦ðk_BaâÆº# HyÑ�Åøgö�Öèö‰}?M6½Ø1ÇoýE“ç¼П÷ÎoG¼làKtNS´“Îï6‡ñ €~€9‹ƒµ‹¹KÕïr³åi�…°Š{Á+VÒø·`²º\.­Ü,nnî–ö½¾}¡´%—ËÕj¹¸»»ÙÞß?X¹·M€‡Í¯_÷‹þY<ÛÏ6žl“ÀVÿ¹ÄS.Z˜ú�¡åŽõF:uÎÅÄ6ú  ¶â¡#È'ÊÝ2PÌ@Û(¦åK K2 ê%s�dùøxµ²˜)7tÀpûèþü¦nÃ�´×±€‚oÐ2pl茱'E^ÕõÖß|"F¿³~9Èð×­×½iú©òÆ) TGì±ú!Ð�D»LÜ�n‡æ{¿1Û’®$ãðJò’¬d;×.ùr­rý¾)&×õ®ë{ÉýZ5™ËÁÖ××Ú¢k}¤Íw‡Ï:ôd“å1vÔÕäÑæ Ð;‹{;fæ ZüKç›v¬·ãaK¦s<Æ—tê 1æmíñŸð)87¶!À‚^ úwx;çþW‚ffoP£Á>`Ç„'nì= wvNü}ûòh±²§lSàvóððkóû÷Íõ¯_¿Lè§ÛžØ\Ù�UOwìYíDë„e?ŽA6ÐÀ/7ŠDERm‘R~ª^%ÚH&;ÅA.Zö · 3Ð6ŠiùÔÂ8 äÁÝœÁA6ø_ñ€íÒ^ñ¿¡w7Lž`Öuµ±›¡mà^Ù€Þ-úM6|só©SÙÿQ2àѳÓ1ÅÛÌþð=í¾Ÿ¬û…ÀD­ç‡ü¡ÅâAuDeI¶�>ÚB—&©%ÙXì©cóýnº}r»�mÌã˜_IW’¯$/ÉJ¶Ù.óÑ'é¸&‡b}‹•6t�sýBûõÛë#o¢W=ñ飪'ÒQ È/Ó®,|ÄøYcE]Mm>)­s¨æk±ï_0/àØ­86£�ïtn#8Ç‚þ, ²È‹–m S§×kíñ÷˜¡YO­/Ä:K´};}õB±XÞW-†÷Ož¨UÜä¥ ØÅîï¸yY¯·¾¢·µ¿ÍWÆßmooï®ïïom#`m²»6¿|y¶Ÿ,noû€J9§ ZuÖ!“^X2pÉ^zé2OA´‘¬„£�ôÙ·dm±�E:a÷·þlÝ� ¯AË@=m ž›¯ a`°ÈAækÇŠïxY³ÀO¸ù±[Î.¸Ý4 n;´WÏV¿ArS5�¿dÇìµsƒöÑ2pDèo€:ðÀs¯ëû£/þû “¾Á¶—u Ÿ¦÷B \ܾ$�2â�Á”~ÌwŽŽÜd(ɲMæåsîöæz?¯óØeYä#�cšÎ¯4ë;`nYZôƒ�6Ìu¬k[´xüDçv rÕ;†­žÁ?ÓøåãÀ&6Y^’ÉoL'›Oˆ=3vl`_ôC[ÑOü�8vô|ô4¤@Ù�çP2l$�2É'eÔÇâßζ,æõÍÿ0æ‡:T—0õøâŸ8œo+|âq Ç‚}ƒJ^^x™ÂÒ²xcy\ZYüolñÿlôÆü÷özΕý@`óôòøøø|w÷ûåæ&ÿ€S„)P¢£¬f‡¯tµ8’G[bGˆ1¢<ÒS>Y/_b—ŠôÂ5én2Ð6†T|9‚�€#Йנå’yRúŸ¼Øäì…㋞€Öäǰþ Àÿv³õ��Ð>ZN›�رE«ÓÒ‘½\µúl”#Sañ/ÙgýEË&úI—q´ÍºSñyršùcê!Ö%Žá˜6^Òw*·Sú9mÝ7Fɾ$SÝcºšMÍGòŒ-×g,Züç ]»ÜK U†¦ˆV]âéŸÈÆ0¶²É´âHÎ}>úFû½¯}-Γûù´cÓÂ_?`tàq$ˆd;É;í«^rìEËf÷íà'›­újX¶<9ÀâŸ÷ñ”ƒ÷)žÎßìÛ¶è'‘üÀÿ†/°¬Ÿ�ú[ð?xûîß6ižìýS÷ö³€{þÀ¾€bàäÅS^£u’¥&F¤Åƒ³�tQí 3»Š!]¶ËzxŠìÄ +X6QÖè–�jÚ@55ŸOÁ žàâࡃš(¤'1·ö›œ=Yy°›ßoÛ—ýeø§éþÇå•m ˜•½È•&؃VÑ‚Pw|dKõ7Ü2PÍ€õ©ª…:'´:·ð ³¹q¼7v:.ìE S§ŠéÛ€lŒ�ºÎrÞ§âγ.[õÚ²Ò¤SzçØ`Wk/þ5~ÀÜ::ë�ùyì1ÌñŸc3–�ìŸy|K2Å,é²l_^±ÁÖOXr-R†E¿]ƒÐË^æ×ª™ë:{1ß�FÖÇÚÑY äȨÏ1to6è‡|ÔhüÐEÀˆrÅë4»q%‹¸#ê¡e“å§äã1”âÎhƒŸS³sl1ÀYóbü�÷^†>BÔK³>G/{lk49bEÚ|�K±h[˜^-¬€ù Aß°¾ MQÃk8æÚèÁ¾—Óï¿ØQv€Í uÌñÈ-¯ ûÙéÝv½¾µM‚[û‰)¸²/˜lÇ…ö�:¹qŠD“BÑ’gŒ�dÐ@æ‘å8ÈÉ;®ûÄ?BÉFúh›í¢{ô±d¼`*–ìnð ´ €/Ö ›:Â<°ˆ΃~/öO,¶Öß>ý`±ý·Ñÿׯavmé?/¶K{cAÖ¶@Ym ÛÂkm2ôür ÛÄ ZN›:ÚL¨(Ì„EóEï­S�K§‰XÆ¥¦Ê]�Î~Ñ.ëNÅ÷“ð�pY–ùãÄȶÔvt%y ñiYû¡0ÇŽM­þ¹¾cv%]”EšvÌà5èk’�4Åûv½•°ì¹ŽsÑNr~ËítÆ5_Ùq ú®É"� ó’�£O‰�2hbeP ä%}¶ÿ@|\èÍê�ÇuF눅û,æ"N¡Wlb�ѱ®­6eìÇÄ7þü” ß¸¶�›ï¸i¬7ûv]ß÷þm>~-pÏ1PŸw¦}pm±“×%Vøm^tú„±àÔëTHž±l±Ä£Ë~È¢-´@¶â#ŽvÈ£­tQ–}ѩȿë8]{ô§Ȉç¼õ)ñøX:ã`ã¢öñÍ3Ð6¾~ÐÑBg^�äâ•»×mž îMðÓþÿc›,þy Ÿ'[ôÿ°‡êîlÔ¹³…ÿ� ½Ø] Üú˜2ÙðE2@VgfRí/{êø�þ½û¡äÖö=×gÝ\^1æÚbWºÏgYæc=YÛ,]”á[“ǸŸ�Ö1Úî¹þsír;Æü².óŠ5Gžm"ibö¼n"`¿�÷oûízãË<6–¢{9ׯæ«NÃ[¤ÛÁÈ­ndqS€™0r—Y]àz:H•ôñh¯>/Ù/]Œ(?dcú’.ÆyGZ‹~5aXèÛ±AçZñ˜M†¨åü=¾Š›iÕã—hìÄ’�ËìX¼�ÙâŸ'Ëx Àõ#…ó¦öà¯?÷ ¡˜œëaØ|öŠÚÇ› t›¤[E&ñ4EÚO�I–1þÈÙBˈ|�î,_?W’_²Œ£O´ fAÏ�VÂø£¤ï¸þS›LÖ‡c];6�ù^h‹³/x¾u�Û¯Á#_ðð’�eG6Þðl<===Ú‚ÿ—áÃ+ÿ&·µ.mRõ—müaYùÓÞ°µ$1é_ª‡Ø ZN–:˜:kÄ^ÝÏŠ/ø¡mÒ5|Ó¯ÅÄè{Ÿ�"„;®ûŒ²]³�òSÒsîí%›’Lí’.£tËùûìÿÞ|lÿ¡mÙ'Æ>¶jϘϘNþÂ5Û(¯ÑÄÓ™š+Ç‹õƒ�6 ß0Ìâßî%ÝF@�‡ ³¥Ý@ÀÝË}AÖËÚt,ô‡bzê×â¬8&v�óôWÓ9DÚ�’Y´�Ÿè޲ z™ø)=qK>Ñÿè¸øÏ´ÿžk?G\8ê¡ÕÒÅó0(ƒï¾zâÊ'×QÓE;ÙHÛä4ßþ[ñÇþíyŸâ|©/ôjÃŽ¿õuú¶¿H¹ÇèywP­Óµßúã55¯$„4KW¢£LvÂQ§äfYäktô­:Äï‹©K XÂZÜGŒ}ÜÀWzÅQû™šÛåš:¬¬þVh_øts‘s±÷‡õ0(ô‚h;Ð|ýsssoëý_²»[Ù7ÿv3{°§~>¿¼ü}þ·= ÷h¿xf$²�€¥U~k™R½ª¿á–�“f€N«NÍ$Úú`·øg’EaÑÏ£ÿ¢á¥c¯K&cZZ’Í9ùͱ=Ô¦vO¯É©gŽNmǶD×Ú;»æóå‡ç>~slk6%yIFFOØqËá:ôb47 Ñ`_ôÛµ6,þ{z¶ë‘ÍÝ4Þà¾MÈ™ÃÖ0 ³ µ›¹›Ç3í||èyÕÕiÂ'}Þl2�rÑ`ñQ–åð@ôï$¯õÁÇXÒ_ç¿7«ÏÉ 3ž,x&z�ÛÙG-·}ÖNª'f¬/Ö!švaydcàÇÉ7ý<`†Ìs¼Ú±ò“ïK!@lbߌ¶þ�›€÷u;¿C]Ú>† ÄÇÿ_i�b�¾x*#�õÒ «x@öÐѦFË}áÅí¸ñÏ’¿6V¨ã™6—ô1h�â´Ù 9=„¦>‹?\'ðäb $�²9:Ù\k¡ δ󇎛¾]ÂáèwZ| }Œ]Š—eâi¾ðÂÈÞ@l<°¹Ä?"ùûtÿè�b[Dû“-l>÷qüÁßãØ]üc«ÓOY‰Ž2ù'êá�(£±�±ä ²®“–?©'‚|cýQO§AGg„®alblÅ‹23ið3Ð6¾þY¯]èÈã`Pp^Ø0[ÞÀâÿÉýëõú—á+·¶3ðÀ7ÿöÀµ^ pË{ Û�äÚ_¿‹½ßÒiéÄ@¤}òÍdšÉ••añÏL/ÿëu²qœ'àâ…½"]*Tht¦ôÙþž e ¢®FãuŠ%Ç­c‰´l¿V^=æ)ÿ)½ê�²«é³|Œ�º¹´õ®ŠX´èg¦ªßýÇ'´ àaAÄ‚]ðJÑw7èŸQÆß³ù•‰?ýÖ þÌ’Y¨bk·«›LO¨.ÇøáˆŠ;E»±}ÈO¼üÀQãFÛš}¶9#ŸüTeÎ# Y„>{ØuÐÇèK¾’[ý'Ê$Ÿ#ós΂Ý�ìÚÎßìëªÅÈùÖú“?€/2Éݺ}xúE¿]«:=\°ÐâI«h\DGy–E]¤ñ²Lþèj´ü² ü¡@;€Xg'é>‘˦´ø¯ùá-¿.Rûü¶hßãÔsÁÇR:jôyÐpûöŸ €—ÇÇÇ�ýàÁžøm`he÷³—Õö_ÿ²Íðÿ7¶ˆºµ'þ4û£Ÿ-À0z—*m²–�Sf Þ™àûÄÌ&Yþ- ßöÇ¢‰›0ö¢iTœ˜«‘Qé’}Ö+Æ)ñ)&Ž9F‰çX�_â˜N™ŸSÆÊy9$öTŒ)=uNÙŒéÇtcÇýæÐIJ¾ÂõÈ¢(&óoÿ û€]oþ».Yüç °XÏ€ÌoN½Îù £ô½ÜÛ`4‹Vß0¬ˆ#ìýŸÄB&ŒNt¬§D+NŒ)»¨‹2Õ%}ÆŠ}²Í™xåŽð¢÷üÐ7ÕÆJ;ú³S]‰£¯ùJN“â–\ý 6yG¦cê÷÷œƒp7c¯“�gÀìYüSØà‰ÙwísÈ@\üÂažªS‡†Š–L»¬CèH/™ø#ÒÙP¼Ž«*~ÝâUƒ-qUÐ0¬q;äÈ"ÌmSôiôÎ@ÛøÂ'wäÐ4€k‚× #a6¶ À`òl›ÈwÊê¿þkm7²[»¡ýi7·¿lòuo ©Gü¬´AÇ’ÐàtP‹èßîirfaOa€‰˜øh HÖq/ZX¶5^ò1œcd[M8³\ü”^vàh[£³�xÚ‰O c÷Ý!æôÐ\LÅ8‡>ÇŒ¼haŽ«F‡cæ*¢0¾ùg±cý‡2,üMV¢yTz ´! MÚä72ÚÖÓÔïvðVx\Ûž^Ú@|÷1ìc÷ëHÿĆ˜;}?ËàumdZcYíç aI/ß’>ꤗŒX¢Ñ ¼Ž>_C”Ò°ÚPÅäÉòËÂß¾$±[�aÛL6¬ΆÂyÂ×7½gù †¶è÷©ÛÁX®V–×öeÓrµZ¯~üX/þúkm?½°|xÂx5‰³72/º;4�Fa�Za% óÈ£lŒÆVñå—eð5 öÄØÙ]wìÝp[¢£ÏN,úŠõã©ú££¿XÚÀ;¡Nàrˆ1]¶m|ËÀE30ܽ¸™…šy4Ó‹M²øöÚ'Üspˆ³3IÇw.ìc;7f´›sßž²‰úM�è8áØŽïNǼš‹©çÐ瘑/ÑQÖ§®aú´/ôíšãQ-ø3ö—ý™�Ûâ×—}SH}ºî�&޵•xC;Œ÷y®mþy[MÇZÁýŒ«Pÿ@÷:ÉÞ`rb6.W~àE£È¼d�ŸC §CÌ�w"ÙI6…s¼)û¬Wû-ŽçÕòûüÔbÉ"ÖðÂl(Q=~Þ&Œ¦lº³ðÚr8é‘—ZãïC+.1EçºÅ»ž|Ð÷¬ø? Ø_ Ú““ÞônÙ—0ýš>õcŒî+@w|ö{‰åúz½¾]ÞÝýxùóÏ¿6ÿñO·Ý¢ÿjk?KÊããóÖÊ•=©º½¿ÞÜßs:tJ2&C1QÒÇÌEÙZ¾ÑV²cqŒ ¨ýÒ‰³{ÊF€vQ±��Á2ïGh´M��Œ/N¶ €/~‚GO˜�£† �N ÁF<8꣼Ñ-çÍ@?éñhô€¡Ñ…’ù“5Œ:>Ô&Þ%y”•h޹Ž3Òí¸/Õž˜§C뜊q.}Ž›y�䛞ÏäQ=?òoûfÇ·�|Û/�?ö/™áa"ª>¦6Œalií0Ìõ=`£©“)õú¸ 6Û‚•o`‘ÅBU‘wš¸QÞó/rê{¬ÎÉ/ÔÌÆÛŒ/4`1j|§}µƒ—­tc8dz­èâ¢Þ߯`1#vÚµ¼Ïýª³/‹‡|fEàçÚàÒg4x¿’}Ö]í$Îgç¹bw•gyñGþûŸØ»’†kÈ_PûÚÌ7íCà×׋ þFóD›Ú™B|FÖêziïí¹YÜÜÜmooÿ\þõ×fm‹»¦íÓ륽˜êqóû÷£=šú¸ýýûúéï¿yêôjóô´±'H‡Ò/ŒºFKV*k¶Q^ò‹2è)P}5»R}ÑGtÆq3€”Òfõ¢lí—¶Ð%ä+¶ €¯|vß›° ¬Ägü6Âë@�.ÆxkÛ^ø6'Mrº ô“`_Ø[Ôˆý7ÿ6)Bær&I¢ñ›*´A�–>âhå§¢§&×YŸyÚ1&“N{ŽI¼Ž^46ß”ƒcŽu*ƹô9î/]û"ÄŽŸ«Ã‹õ�ˆwúvÝé1ÿaño2çng˜xèúyçìÌRçpÃÂßÚÊµŽœxÐÔ!Úhr~€/ vÇÐ*Qft´eÁæ>&ÀdrµiÐE;ùeº °{=EÛG¶’õõ‹­â±xU§pž9¾¾ø7þ¶ØÏXzψê‰U£¹ë =nO‡3Ã8-»1 e-ÛØŽ1Z>Š�¿ht9±¼ù?pÞtîL7Ô–šÅ>?ð Ã\G.�±\ò©?xôŸÇþ××ÏÏ· {À2å W~ peo ~¹¿ÿýüû÷ýÒ^Fµùù“§ì÷Û—{OÕÕßë4d¬Ó ôJO²¤‹‰“>ë$¯ùeû³D«=Që(Õ}d+L§@¯' k<±K`Ãgû«ÀRb¾’¬m|¥³9~,  ¢¥äc#Y´�4ú %Y¶i|ËÀÑðŽÖO|D3éWar彌oI|Â…�Ð*±EÈ‘–LxL'›Kâ±IwI'Y Óvéâ±"‹|íå[ÓK>'–l÷ÅsÛ°oÜhŠ:¦bª/ùeYäEGiŽÛÎW…Ùf\ÄÇ·ü³@á ÿ¾à·‹oà‹Ì0r-þÏÂÍú�µ _®{ÿöÙhÚãm²øÀÀ›œ6ø¢Þü7¼ˆ6̬™lÀ^ˆÓëõ5š‰¼~ì½ .˜øèÛl�ê -¦ƒä0ÒAKŸåðÀ”¾³zýÜ×¾¯ƒc÷Çüû…ÿ¬Çÿ¡{ýÎ&Àk­³¨Ù9´h}öÆDŒ�Ž[rd‘† ÈO<¸æm"=fß·ÙôæãX }pZüûãÿäËbR…bþ&‚áÔj•¾³zýÌö±nùȦƫ^é?Å»ž¼XŽè³ô7Ï“Éü÷ÿá|ªNb ´éö[þJPýŽ>î¾Ö¯¿ Ø1Ùµº´'"Ö–?|K|CÀ~pk? ø±½¹Yó4€ÙqàÛ—çç�ý7ÕãæöÖö †Kßx H‘d¢Á~j ¢>óQiÙ�s,ds úE{ꢾ$ë¬^ùØPòb^ éä±êà\p>5úsg m|îó7·õ\¼@ 3�.Ê£ž:àÅè¸Úg{ô¿–™&?U˜,1ù©ŸTÛ¤H›²ecÀuøGY¦á#È7ÊÞ‹®ÝŸkòÜNÙE,:ÚŽsÉ>úÎ¥g¬®Z,ùÖô§’Ÿ¢ž©ÇèK¾YVã%GšÜÏ•cs­=8~û¯ßùó×~æ@ÿ�¥û+çY…:ö¿’ÍßoR}ûˆÇÓÌ[YdùŒ×0¼o€­x}Ó/Ì7¬ü� ›`ocï‡ÎëC/x¥$I˜cÅ ŒÑèeAuf}Œí� É¡çÌâ¿/¼ÐåÆzêïí­’ÌLæ±¼Ïèl_ÙJõI6Å×|äÿ¦y}^†—ýYÎè‹< À&•γêŽõðÔ…÷òkç?ïÓÄþ"`G þ[ä/,GKûFmÿÞsgøiq{û´Y¯W¶A°àé";þ�½àyóë×ýõÝ�í�,¯¯žžÈ†N…0I*ÑÊ\Ô#‹|�ÎvµX’×0ñj£xp¬_rù”ìe£Å>¶yñuŠ%?a—[_³Ëû u2Ý7Çmàûv.l ƒ‡0Ù¨ÑÒ��×AG ~áNß>[.“&À±0)ЄªÇíh¼ ÒȦxù g{ÉÏ�çÜ—eSô1ê"­ö�Ÿìe{ Ḻ:sçhÃ9ê˜jç©õ9^æ9Æ,‹¼h0ÅÎ ‹=-â™Ejñ¯Gú‡¿]z€Éº¿ýŸsÚŸW¿úˆ—ó|¯Xr…×ÓÜÔÍaÁq±ï²ÞÆý,j­Í¾øgáÕ·Ûm=š;¥øoò(;0þä/Ò}\^¢±•�üÀÐËWò’LºŒÇlC\?çfë�ú[>ØÐ€täÜé\ǼŸ¿üpÁÎKÇŽ~fŸ\¿ô1n–‰§^Ñ;•’kÿ ¹¥�)džÕ^a·uû��“ÝâŸþÉÏvúˆì?+fµÉ@r}½¶Â‹XìßÚ“vɾØ<·ÓóW/£íßí'÷×··7– ²qm×,éWEë” M–¢<mjt¶Žñá#¨>d%;é³nLžmá±§è›~-øóF€™ì€êÙrZ,ÿEÝŽac>MÚÀ§9U'i(o(¢¬F—*oA)+Mv¹ 0!ê'EÓ6o=|Ûo2·~ÞXM¬„Fzï�ÒGŽ‘Ô{³¥{oI¶oà£F3êö­ãP{꜓Çs·íñ§b«/�£s[ٚ焉ÿz `ç »ÞüÛ›’³ømóÈC{ƒûÍñ÷Æê±cˆNÛbl�q|ûvÖû_‹›ž ¶sâሌê>ðím=Ö\º¯3Dz�ƒ0êcL9 ‹6’ÏÁÁ�cø3~û=èˆkzç{DCn` ð&_ÁfÊW¦µ‡øã£xò¯ú$1¶ÒgÚû�åèÿ³w¦Û�äH–V„¤Ø2³ªº{Îé3æý_¯»2Vms?s\—Ñw'µR à´Ý˜ÃAè¤ìÏ{ãK0Úh×”ÄßÉüWøo¤(vÜ|gqŸ3Î2.Ýoœšœèiý�ÂÍÅÕ¯_?Þùò]¿ p®§ü¬lJpz8:YMɼ%¼êõhx|äâ¾À³,ó¬»$[âÛ_臦Öä?  GÉ}q[“d¼¾©Œ€7u9÷L^|³›··“¡8"ð’`ÂF²¯MÂN²Íç™Ï†6Ww�·µ MßyrˆŒb.-&Œ‡ÄŸ5( „ï�Üâ ÉЋõÜqÀ>á¨„ŽøQ€–OœéÕ<ëÁÍ<ãð³t¯ ßô¸¾Qš�¸ÞJò�èF’/]ð�îøo;’ÇcÑîCÚ©ö=Ú½]jÇ6@ zæA÷ðª‹ÞjáúèzÄ:œº¾¼<¹Òe>^qÍÚu[óá{]ß—ÑÓkÆÇ&»¹áF¼­S˜ŽCK��û’x=:ë¯á=[·“ýW–Uˆ?Jõ¯¶�’ùŸ¤··Dö™q’/Uù À¸})Z®æ <­u–MãõUE`¼ªËõ(�Í7µóÜ@¦3nù]8ÿ¿“Á¹W˜p[%6μ¹jä„?÷Ï–Íï]Í{¦—pT³¬G7wGêû±é-ø˜�w[‡ø´M�õ!>ª®}V’?cý@IDATþcÒicËvM¾¯¬êmÑŠ o ìóV\´}̲1t _ÍŸÌ�®Üîi§±ÓÁسn´â1ø@ƒ±ÏO H'’~Å–µËð £¶y=Óͯï ¥³¹ŸÆO¾†ÍïÌËrËÜÖ”?®5e†´Ñø<áOý#áoŸú‡¼õ~” 'î³¼Ò÷Ö‹GioÉŸcD#µ½lcÜúèî‹gÝ;ƒQü}À¿¥dnÆ×Tî(vúÇœÐÜ�ùœ ïqù>è¸:6Ö”ôßí!vEšCéðW~�®¼ì'ãèQ²ï‰ÓçYv(ìµ¹äcM—EÍI?ö±Ô b?Óð\…ÎÓ^”ÞœÑ6Ë­7àqF`çuyŠ^qSö©Ê¯4}ñ ݳßíë8Ø�Ç -ž„8ç ª623>úŸØøäš{ß%ãð*m½ç†û¼§V�%Úü%è±1vë˜Wá–¼êoÑö÷�¸ÛÇV[‘?¤�-Û%ùßã¨òLgýš;!’A’]hCøìó€~ý7îÄ? |ü¨ͽ¤1P[ôɱ ¯b±¶x'L²D‰Ä>:âñ$úè±ß�„‡=°áö—éX¿$Ï1ANŸ�u 1ÄÆ%Óà”ìÓº–Mw^òµíq¢¸øñ©?I¿+ºMßz;â…J‹Âr Wú…mŠnhöxÙ…ÛƒgÛl³†ÛÆ>°7ŽŒbÞì[qçóØ¿þí]ÜWÌÉIyÒ²îļ}…÷°Þ篴ù‡ø¶¯[³×‚Õ‡Þ!�á·ÁdV¥+¯Êí³¹Û´·Þ>�¶(µ xµ•—åG/µ|`™—?lkEÇmdý}Û8Tï¡mlÙ/É—øô¿'«¼Lg|Áž7ÒPt$ºнó‘Åw“Ñœ+íSQßrÂLRë¹Æxø”•XD²$¼Hú…ó”QNú»¸lÙ#ÃkW>09_?dÖ1 ùÒ‹ûŽÜ8�¢ö<Ž™D/Ö1 ¤­�NúñdÜŸþÆA€mh«ÙÎ.á½pi‘ˆ^Ò›^ì{¼Þð²^Åѧð]*½Å9±Õ¼ô�F'^ü€¯ÂŽëØ™Ë^ñÃ�þñÀ˜ëèr¿&ÛWƒò— 7m˜C�q¬*ÝãÙOO¶�=vµ`Gɾ'Îúk¯½u‹¾t-Ù§ W¬�W˜=#óXÀµÔL‹ 9HVøñD`ϵxΞ䛕v+í¾,ñ-¯pÜè5"ƒ~P<¡ qnzç“m`æä?ð>”kîQÞg<ëß’[ï%`~�íáûòz}¯ãÆWåõì‹—ûþX>÷õóж÷±_Ò9”Ϙ²MÆ·d’;fGe‡Hrà‰¿èµê?'ýÍÞ;C¹<º}S?YSr? {WâB,Häãßÿ ¢ë§œä×CèHþñád þçÒ|Ò¾×¶YVõu¾ÎÆ Ñ5¬EíìܻЪh:á7d¬ù_þ9ñ7=ÛF3ÍOmò¥é…­ø¢_uªÆTuàe[ÛXo_?ìì϶Ä;æd;`~Å5€Vuq›•ŽÃ¹3mûÑÅVx\Wϼ¨XDht˜€ÆFFTqxÖ³<óFëd{ë[M©:÷öu˧5«žùÀÚF¦+Ž~í#¼ZÐÁ6WtLßN.¸»¥¶éöàk¹ÿ=`7\ÇC�€ã¹ÏÑ“Þ�šy¹Kü¬³†ÇÍ¿¦0d#kðZ„Ú´Ä÷ýÙ¼°Y'éχà®èP)f^Å¡)¶™¨Û×%þ­ÆÃ16j÷)¶«_æUüÐv²lŸ#‡öñPý:¦CíÑßÇÇšNOÖã¹oU–é%<õÓ;¶Hþt �À“ü“ðGNR¼t`™mç}©-øÇVèS$Tt¬õ�^rÇÅ]‡\1$i纚¾V,æ¤_ •~t}8pÕp¾£�߈$ðÂGówìÀ}]‹4:krÆh?¯õÍߢ±CÇú=ÞNáÚéZ„oá¼ÿ‘øÇ='œâv3nŸúÇÃóB5žpi¶áàu¿NW†�Ãk¼òq�g}ä”-ºçc²œ^—äKül[ñ5›*«´}1d®™FÇ| %Ó½äö�þŒk~j©`Ò�rLÇt5ž§/¾Ii-ãn^�où€#Ï&$e†Ú¸ðé?˜8`Ãf(òχàMò´ðŠN.•βçÀ}Ï\Ò7ß�¾gü>cÁ¾Æ'û¬²û´ñÜ6¹ÿ÷i{û-�*¯´ûµ?ëd�žg<´®4©Dþä>Ð}T"ñ—�J2B‰×ŒÃkt(ÉËNŸR b}i}Ì{W¯ANòã@ãò@ð¡IÌä/~  _¢±§NQ‚e�(¨Tqƒ¿«.´íÀ]2OxNè#Ù‡§>û±Ä!A~=&»íBú|„Ž*ÑŸ{Š|I6+%¤ú«öUŽ©yà´e:ãÈ(3Oqç+1t-ü>È<Îý5nˆ�k½ò_-hý°i‡wæ!Ç]® ò4Àí×bˆ­ûÁ®þíØ�[·ê›Wu2�N¥áQzþ&Éíkíƒ%k¶Ù&ãØVÚþ ékö nóÍË´ÿ:Öl›}»=æÚ8˜£qÈ88Žëð’½È7¹oâCú£]À»©ÞZyÁ¸å lDàðäÄ´âšwóæ'ì$ý$þT6¡µº?ð{e‰oÝ-¹õî µÑ»w±­!ŽŒîãÜc4ÜÇÆ:nç>¶öñ\Ð}}H{[>î#¯6•®ýÍrã†èf\dÌüÄ‹D¾®Ùüé¿p’þ3ª’'ú>ºé€Ç}–|Òìk(‹4WMwWéE¢¯lçºÉâS’e|R“øÊ’ðH¶D{7½s]ÐÛ'`ͧ}Ìv\t(àÓàæ�üœüÏ8:©îøÀÏ+,Dh)Þ-z‹òÞp³¿ž½yÙ–öÍ_ÂCŸkFU™çN»¦ww,•÷žÇÿ¥Ïœô'ÿ\Ûüõ�pþz^¦°¥ïþëÞr(+dT„Ä|‡Çt•CS²M�^ã!Ëþ¡—JmgIo‰_í+m;úƒŒbÜže†žj™æŒ>¼:>ó2”šUt}ì'xãåå"0^.ö/Ùr¾ëͻԯl“uöµÏ68(1ùòFG‰†?ùð×vHDœŒ`çZ[m>ƒ½„Wè¬Û“Ã{Ê÷¹ìÛøÌ}B×úKýï�øbßӵ߭v¬w¬ð¡ýß²ïÉ+¯Ò9V=Y�'›HF�­â&’� ‰OþIò#áoð4A'ÿ`ç§LÛ¿çÃÑîõè?c> Ìck6ŒÙãäëñ‰9kŽ*ÖÖ,Wo´Hž)´Íÿm�ßz’9P`w=i6H[æÇx†¡Õ^,˼¦;y“9m©¿wjâχŒ û\³ï‚»ÿ…Ý%ÝŸ®ð˜´¿Öß}ú—í«?Ûg�<¬,_ûöº=¾yF¢O¯'ø/ÜÏ×——¼¸˜®mîØnŸYlžï“-˜m'|®¸¥[k!EÇ%ë®ñì�ÛÔ¸ÛÌ4 2ç€Ky-½> 3‡·TýJ[}‰oùdLŒ•þfž�tŒ#½hÛ6-`ã Eå…P¿/½Pó£ÙgŠ€oF/N¹YdK½5Ûìgà#��˜tm£N…Ç$m<'û†‘ì³ùÎÝ^}h/[êfÕžMöRY“ícsû%¿ægŸÏ·ûT0�ç>mlٯɫ¬Òôg^]ì¡£êú°3»ØÆ#©%ùïÕœü.]'À3¼O¬^³ 1еp, ±%¦±6µ±ÅžWüøZ€ Éÿ©ì¸Ëã ôë\Æ« Z5Šô"öMßø ›ýsñ!49ù�C %ˆèäÄ?làµj_�Oîãcù=ÄíÏq=İéVûJ£–ÇØk+ÛôpÛçx-á½!Äuä ‡Ê!€îõw:`>Rꓽ>š·cm‘¿¸ð_ð^¿ÄkŸþëþÑðv>ýÏ¡¡ ‡¯ân>ËáUûÊ#âfüR2�ªœülð— +¾B¡;¥×îŽÂ3Ž �¥�ƒ€XâZ?<�Éý7��uš ËÖävÌ!yvd<{È_´Á;7¡zã›»×1ßÈ=Ù¯×Æ’îà�,F &R{“ˆ ­ß0€9ѯ8ò^uKÍOèT´å–e¸&ËzÁµÉî–ß¼-ˆCëdܼûŒ Ûž�}z=ËŽÖ>ß§_[>•WýJÓÇOl/ê±áoc�›r]bt�_É?|ÝW>ܺiSoŸ­‰@Bû– ãñ¦5�˼ˆ¹tˆ§wȱNI9gñI´ÀCG�á7`Æ/àÝ Å 0úÑì ]ê\ÈtôK6Nö9 ˆþ ú``Ö‘^�oõ Û·Û>âë!ö‡´µ¤ëö븖ô·øø[òå¶ìÃzÙ¦âèæ8eÜ~ªNæG›Ì]ßøW‚º—y’Ž9ŵ�ßÐiîO¶‡g¾ñJÇÃÚ¡'‡8ð²~,Ý?Ùÿ#á­!né¦éŒ»ÉÊ«tõMòÿAõcƒ'ùÿ¡ú=A'Î<aì•^ûèÁ§x,àU7ÓG—ÒãM’þ«ÛªÉ?ý÷xìèÚ÷6qg}ÍûgŽÀå™"0ž)ÐGÜŒoÖ‡ßxüÀ(#�ÞTçïÌâ³ñ‚¯ E>ˆOÛ�g~Ò϶Ñ=d.7¯÷ÕëÙîË[zÿ[âïã7Û‚›6ÄøS�/·“ûûTíå6*¾Ô—ª·Dj¿¥¿$¯ü-šþ6Ïì �³[‹„Ÿ ºâï$ß< I¦ÑÙ¡¥Ãžm®òiÿo}ÿæñ¥=+‘�1P\¸�ød�ëɳ¤N¢‰#I=Ÿ¼â+ªä=Èî:tÑo¾œ¨ñ…6UÜ·¸�- IkRŠk…ÅÜ'’}é;áH{âGOU ÅØh}j¹5"Ðz43ª|, =Ÿ ªOÊÎý®cZk»ªßãõ|d=·Ÿãa¿=þ²®ýßáµkÇq Oÿ™[qMá1/mÜ`¦Á·*ÿi€5ÃÉ¿ÝqÏ0G{÷Žu†þÔŸOþ§Oÿ �«ÝÑe‡ ^Æ¡«¼§Óã‘?‘ünõKÂáñÉÿ×TY~)<À“µÈréõ+ËÅ{þÌ3¬>+?'üè"Ï•1eÚ¸ùØô zÌ�ˆ‰æIÐ=ÅÁ{¼Œ€Ç‹åkò”o®¼ùf5ÌcÊ6™Ϊ¾&¯úƒØ?¼'°yH5'ú;_@W›ô»u«Uìze‰ßÓ½/ïÐ÷<ëoAúc÷Í4Ðc˸õ¶ ý g?[6–g[óŽ Þ§�[6kò*«4ñɼŒ§Øy]¹>ì¯"Éô§û3dãŽ\÷�õ wpdøl| ˆÃ¯}êëkD½?%QˆA+`~3Æ�­é:±s&ÙŠïý ‚‡°á;P<þ�`ýW‚¾þn:ÚQ6ºuçv¾ˆOß"™¤àNø�sÂ/Ü|t¢MÃÙñí8aÝFàVaîã‚üVó‹1Ü’/Žåqåñ,u,_ëdð–üXÏòì«'˾²Ü¸Û7 >בd__ �˜‡âq Àýì¶³ïÌãð :l „ÇÀ™~lÐ÷ˆXÓÂûòc•Û„É£C@—Œ£»E÷tz<ü�?ñ©?ÉþŸ¥þ!šOÿ?©¢·¿ É?й_"»¥ö×Jð)öQõ2�ñÉên*¿gcCÆ€^­–oA·aˆ>ø(Ï�qðL�>’f|syÑ [ð\k73?ÛT½A�<~œX:±ªî$þ�7'ÿÐÛ3=Q“Üø´í’ü1ølÊ–JOÖã-Ù›�M¶3òj³FW™âÍŒŸk£¹+øäŸ¤Ÿ_õ�øcÃn\0’{é9ùÏÉ~øk¾˜3Ömw×¾Ñz[zÄ�ø·¸øN&~‘ÐKFÜI´xfÈ}ˆžå3žyØQ•˜ù? ã T|Úwìñîöéí ? p'þðì߉¿“þ�ÃÙP²üÖb~{eKžmÐ]ò“õžÏ}òxz}@oK^í²~¶w›–/ÑøC'Ë�»­ uíü]æbPµ�˜3Í�mÜ®a<™Òtz¸“°Fø?f°Þ)ц挖›Î"3éŒ×GŠÀ8x¤@¾7¾ÑÜUßp¦�ðzü¬3ð�§�›W °ÕØø*A¹“ø[G²8šg‚SÐÉ¥ÒÈz¼lóøÚû\O–yÆ+t¿à[Öã!cŒZØ‹�õ³ÞžûÐó·fû²ÜŸûøßÇþ¾:=»Ì[Ã[fu$kÆ¡[�OøÅχüê¿+'ö\û°mÐô ›ný¦/Ä'q®‹âD!~±5�ÈÂcçŒ7ÚƒN8÷#ÉY$âÒw!q ?b�|¡‡Ÿ©Õ©°£O’1СƜ0”Nð©¯x;‰?:´Ó }‡/œ‹ïbÌ:!nÂ̳þ>rëâ{ɇu^ºoŽAí ò%YÕ…®þö¥ík-^³¬]SæiôM´?ù�¹Ûæ¯û݃Nú!‡ mŽpÄWˆxߦ­ÆwŸ :TÌMpÓ†43‡ µ™åK:=;ó¸•óüKõ?UÿCõ›*·+¡ò'ÿ$ÿç�_Û{±¸Íª°ÄG¯'Û—WÛ¡¯Øº˜†Wk,MVܺOÙÿfCå¡�àë´Ï7\¾‘=šq#:¾\ØŒ°Q¡æä~[Šá^eДl;qÿõРѾúU¯ÒŒ¤Ç;d„Øß'F¹ÝûØÒǬ›ÛÍü}ñ}ì·t•WýLwðHÒSÉ�Ès7¸ràÇþ�øŸ·Çvy Š}4»‰ qû‰óÌÈ”q´˜µ•'Ö­MºN;o¬âCçÄȸáeºܯè_‹ÇÛíÐÆì—k^hìœüûÓ'ü;É?z-ñ�ƒÑ@—Üžy†n?ëÀË´u {6–nù°ÞKÂ�x—ŽxükwÉê¯GgCûv[ÈVã¦ëk¿ z¼¿ÎE¸ýõ *Ýãe;?à¯pð_ªÿ§Õ¿q âÿ@òÏoppÈR�’Û6¯Â%�¿òLW˜Û FÈ)ÀZ™;g”(–bÿ™mÞ 5´<1YGyªŒ€§Šìñú�o0u1ßÌô8ßlï�æV®’á_ÊÄf� DÛ4„sm(¦7™0Lô½’ˆ^�ïUDàvâ,t—¹ÁF¤Õ˜ð¶ÿf7ëg÷È)[ú[rÚÚzï:T^õMoA�=WóÜOƃ¬7®%¾m³¯%¼ç÷û%¿�Ág|)[ökòd1ƒ}�èoŠ©g706Þ’ÍxãA;ñ¨¤?Óþ€ÔFÙ3Äz©Ì’ö¶±¿•¼‡OÎy p­À ÎÌ]«ô!’~ j$üòÑÃ}HTC¡ \*–äÀ›Ç-|ÖYrÒt²MUµ�ÊÏôš}Ö{*œö×ú¹Oÿ²½õÍ«t‡eð–ô­cyèúÚ îð“ó�Æ�ð›—éÀ5Ÿù‘ËkþÍ`«àó›ÐîKô�—…zíÞÉ8êjû�öïåW3½;Ó¢÷áæÃ‡ï>~ütòÏ~:ùúõLs\7Ëõõéõ5ðæýÕÕ�²îÀ'qŽ1ñ¦áyH;¢GèO›†¸‘Vº–�Œg“Êç†�r®{ôT {|j ›ý ‡|¿Ì‰�Mk¦ƒgGþ¶¨“Ës…¤?>ýW²›ÑúâòTÁ]ÛÜê°m"fY¥gÁ!Þœ¹KûÒÖVÜ4>³œx@;.Æ ­ï¾­›yk8¾\µµÝcÂÜŸCýnÙ.É{üOýñâPñ2MW�p™7懜]Ùü]~á$ü|G7¾û/Ü¿ðoŸRå#@ÜIê)Æóµ÷hù.‚úðš½åÅ ]Á˜@ÌûûÞð°éÝ)ö»ÃL„çÝܧ&«4lóÀmî²%·ÞľçwIÿ)ø´ŸÇqhûØç1öڲܲ5:ËzøRÿY[rq[æ!÷×GØÞðŸ4_ù˜Èâ}ÜÊÐ÷Ü^‚ÓÄUòÿîݹêÇëóóÏ'?^œ|ùryò¯ݼÿïÿ>9ûñãêý¯_×gjûìââZø‰ð›³_¿nNµW½Q_h:’åŒÃ[JÎÍW¼n”Hÿ§’ñÿPý§v½*ëý¬úAõLU£�Ýɹ|’ݪÿЮøB߸ҼŒC÷A6Åœà›G{èñÔEÅÙqÃÏõ‹LüR†‚Ô_úU ú � ð{˜>FQ“s‰Ë,Š>«Ù(Èc %Ë3®KL(£ ¿S´NuùwãNÆÀ��¼i7ŠoÄ tï&‚g¾oBtw‹–Þ±°ê^|OòϦBLðÀÂ?Cá”Hôv½ ê7Š€'o—;x›/1?4Wâ€9³–üó>A=´ÜÇæÐ6Ñßz?ËòÏüŒÓ‡J›ç ÏËÁ)È×JÕϺÙvM/Û<žÛ]󷯞}¬é÷d•WèØø6߯cV+VÀ¨ çºT6‘ô£[ðúÉÿ΀tGy™p�ØÇî@_?Ö?áJ ¢øús�áG•mç×Þãªâ[ºqÀunm9ù§Ýøä¿ù‹†V^ðE{”ð/Ø£- Åöb=È5yO–ýT¿‡ÚT¥Ý~ã!>±Ï¶•ξܼl]íÖè,3Þƒø¥ s�vq·4|'ÿ̵8Ðü�ì4ïXsÜß.Ô\ôïÄú%}hö’^×t£ðk¥g|Оà³®n>~¼Ö!ÀÉéý×û÷_¿^�*Ù?ÿùóæÃ÷ï7ç²=}¦›ìSÈ8 Äa€ú> ´D?d™Þôù?~ÿ¤*ÑþKõeÒŸT98Uå.;•ÿsùú¤öþPý©gÿ¯”øßèàTøw9 4„oÙEHÀ©dç™o¹íÈàá©Æ“èCÃgŒ¢©òß~åë‡d|á�úÞÔE-ú#³Í²¤Cˆç1 GÏt†4�骇ÜUóåNòïC äQ¥Û-•_é®Ñ‘1·ÞÓ�[§‡g™‡–yŽ <ð ±±¾ímcºÂª�¼gÓÓ«¾ž’¾Oûk6K²ÊÏt™ÅQ«�Љ6Øðؾ7É¡#Y¦ÙHçÇþC&žý=e¨‡ïõp ê!×'Ö¿f:_S]3ž¸cíÄf ºÅHÆä+îAAüøžÞÁm€ß„3M¯á˜ ‡Å6àæ�»¬É³ëoÁûØlù¼�<�5�ñ!¾ÖüôÚ3Ïvkt–_ê+ò–8ß¹¾ÈN59`šk|m…z%û>úä~7Í�uJïïüKAçt‘I2weO3Ò;¿9=ýx}zzyr~~sòIÿqï�?Nß]\œëC¨ëóoßn>œ�Ýð+}<¥úIŸúëàäƒp%ß‘`·±ìàò]JÝ‹“ |%Ð)™þSY´> ÿ Êóý½v(ùàJíòÉÿ©êGÉHÌÑ‹^h´«—h·í“C¯ù (í—¿øÔ_xÈÐW¿¿«~ƒ¯!ü-á×껢qç l%@—ʯ4!‚·Uñ—u*�eî<ë™—iã¬kÑgÍÛ„áxéG`ôãò–¹Ü¾‰âfí›ÅðàñŸé €SžÐ�÷Nl\œœ±�¹ÒBN�%‹NL÷êÁm ƒ7�6ÍœüGÆü ²aàMßUóhÆ“Nèš~­!ÚzßÊòŒGuW™tµÌ0ë8Nðˆ]¢ƒ,ûȼª“eàÙfK·Ú>&�û±åwÝ%�ßùçií!8à“sõ/’|ú ®ÝE$ú�¸ÊŽžyJž>©ï5"×Oêý €òKò¯ï,Äîåƒì>«þ)úÒc§�;HüM/àðÑS�qxÈHòíúŒ¹ü£Ï§þúÆAüç’x¿Äû¡œr ÙSüÒ ×LÓžù7o Ú6µ`CYÓ™4Æë͇Q~Ãp³p£P|ãNÜ_ù ýØÊôø—o61±‘Ñ¢Íâ?7&~lbôf_H8°É¡þÊ#À„‹dŸqh^˜Ž‰(:xNî�TŒ6]ô£îô_k‰­@êxÓ™!¼¥ÚÑ�ßá‘?Ä}ßh¯SèE+òz"é%ò Ñ2¯‡Ã£ôæ™Ûʲìk²¼}íéßJo±5·Z/‡y¼Oí‰ã[ùKtÏ_õ±¤cŸ9fK¸u �p¢o›x‚‰Ã'xš;þí'ætÌ»¦ëäÕ{æ™ïðHüå+¾òÂ<œt´Ðãìr¨¯è{MúJýùùGýॾvp¿Gõñã�¾š¿IÅú€}€¯øÿðåOÏw>Mט¦®¨b¦:ëÒ¼çûõçê·¾{•þ \ðcÙ°CÑ£ 'ŸØ¹òƒ€Ÿå›üB4Ÿ‡Í ¼h?î;: ?Á“¾œØ‡1±O±‹è@£/Œ‰Oÿ!ñwIÛ¢y*€3�à ¢Ú+móe]¢«-þÐ¥϶ð¡­c|ˆm.öáv�®©1žÈ‘êà㠔߄Å�Ã�òà�Xi¡Õÿc‰/Å 0 ·*›ÑK°±ˆ»[4‰¿þ;KðÜøpð:# yà2oÄóá�ßÕỎ>@�·YëÛ)t.•βcÁ½¹éõ'Ë2¾¤‹Žõ Ñ5n¸dO¼Ð1Ìz½XV=�Ü>ø’Nnë±ñÚÏžÿ-�5yO–yà¦+t_?’zñØ¥EU¼àù;üDòŸ`Mþ½]if¾;àÃåh"Àurc}ô½Èúè‰{/íDâ¥ùDRà§HÎæ¤ vØpÓáO<÷&ìRß0‹þ%l­Ÿqt)ö n=pJÕ·nÕ›´o}-É{>m{L�þ{¬µ_Û’¼êCW›Jgðì;ëG§dØÙvæu�¹†žç� í˜“à17Îû9üh_ú¬iñ»øm¾…Å÷”üë‡ÞŸë‘�kèS%ýº¿6—œþüyò^ð4ATù=“¯òAâ£55’z’hÚb�Ͱáù±ú�G¿¤+ïÕ�¨âÍ8®ÄWK‘ô£NòÏO\ òÕ„+ÉÁc4´K/ú :ÇÆ8gŽ48ãÀ¹q ä_é >ùO?Eÿ-úƒºD;]\ݧ`ý4nˆ?Ë2ïU†W‹}پʗøUoЊÀ8ø�¦�Þе³Ì…›Å7Lß<Î ±Ž–ýœOPåžï)jsª¼�§´¦æxà«$þœäÆ qZГß�¾òÜNŒýÂüÀÈÛ•a$÷zãÞ�4½à7ܧYtZÚfä¡ní·üûþ©pÑá†?ûÄ¥ö«gs��î=™¸öµ×Ð}u6ìò,Ÿ“~Å4pC’ü†û 'ÿÆ9`ÍÍ5 ô†6x/¿7nµsD×´[4¿bíºêýÕ8;h’'å9  Ò.�{=l„v�5:xp Ã>ñPÝ‘£«vÍ$½Lš¼mgæ½[�$hèÜŸ»¢àØç‚8Økþ×ìKæ¸-ùÛ·y¬Õ§}dÚ3ܲÊË4z.æÛ~àÌEðvý-žø1/„—iækÖóV_+å·£x”½ãÍT5qoÞÉNÓºÍéÇì ”ôó;Tñ[T¢ã Ÿm �?¨R»$ÉŒ˜qx½*öÌ7žaÁõú¹“g1^ðZ‘™—õpFœ ‘‘ÁÃsÿ+”î{ÉR¥ëüC§Ÿõ?õ¸Ä‰þ›áÜܵ¾à¦3”ÊÁ…nâc_˜ÛcH†“ùÆCX^ÜlãZÞÆS%N;äÎÄÜ‘ âMF@ fÜipÜ,ɺ}]âscGá3>àˆÀVæÉ¢7e—À�<ÓÖa³T3’½Y]Xõ*]�¶äUÿ>tÛͦkt–7”Ç* 4ý—œC¶(†<â:iN꼦Ì×+éôÐU½ÜnÏøHyŽéV÷| ¬7Ûµ8δ|]*�ëI?_ðl›Ø�!o5“• >kuŸüM"Ðæ£�9¥9ÂŽšyÁŽš{>•¤©%U»P‰“ùa’î_Ï_ø;ëI�Ó×ýVׂ0œú. ÝãUùÞÉúàUo«àÿ>v[~‘»ý:ÖC|T]|VnÝ%YæW¦íÝŠgíP2ý˜‹‚ÌMãösLɾ²~=¸~9^i®¶¶;¹Ò‡NÔkÉâwt@ºš§ö�OWe’�\-³¾!|pW¡3^yÈ(ð]2n^Ž'<ÓÀŠ›¤/ĘqxîOî³Ç”_Gàé~¯à/Õïª?þÐGvIü_ú¿ ¢/•ø_JïB§ŠèÉ¥~ðRëAÇ×dÿœ¥u=†[ÛeÈ }©fyà¬s¹�eúwÆÇÀï|õûc÷ÍaØ×Ü�DÀ«7›Ñ�â�iæƒÃ·b£!çIšõ­×ƒkzk²ž¯ûò¶Þ²¼‡›g¨~³aŠM½úDœ·ÜÐý-ôCÉ�g8Ç=Éí è÷Ó¬g¹ý½o|Kÿìko¸o;8Lmõúï6ë&~Õ7}¶þdþŒs횯€$ôâù€v3mþ�Ãü¤ÊýÕðmG€ë­2½N÷qÌ'øÌ)„šëq?ŠÇ¡óÅŸª†ìöÖ9ùç îß'ø/t´ ß­-Yð‚Úí£å@넯¦Ûã-é6“®ËÖ må¶×tŸRVãuH[=[�ɱÌþ,ƒ—åÕ�õ¬“å=ܼ {íÆ¼LmÛ|�”¹§Ä>©˜«ªd£¼×9ù÷ó4þC†dñ^(=|“øçZèz†Æ¡sÙ¥áSÐuɸy—i <×%Z˜è46†B£¸¯èP=féBòÛŸU•÷ŸüC¶ÂãþE‰þOªx?”ðÿTòΓ×z¡©—*ô]]¹S݆ݓg¾u ç@ÇA@y4ÅðmGÀ_¯UÜD-ÜX�áç¡ýöG�î™§áôFŠNLLøI¸èì#¦pÓÉüƒB�Û8ÈðÊñ¶[ìz¼¢’7Ü!j6Ä)ªÆÀ»¥éÀÛ¸àÍöà”Ô&qcSïø™5^T,×ñt^²<Ú¶Mj³cv—u¨>ó�vîcî@åe:ãÑd3 ¾ÚVÜK- ¼åðÏPxè´ƒt‚nðŽ,é…?éƒì;b’7ð·®¹æŠfn‰¾¢òé?Oð™u›—Øá/W'Æ´ÿãA—þWè1]…îà¦�ÛLÔî«Çf®i +2ã@úÄØ�Ðà–ƒ»_È]'±J6ß÷ÿ,ø§ ¿?@ãÉùø·øª~Sý*~ S|ˆ²Wh^®¢À§,n‹vr]â»/Yn0´n=u¿s›G‡�'Žî’<_‡˜üÚ,pƒ¸øf04¿÷ÑéÙ Þo��ɲ3åZ0Äc*¢+vÖOtLÙÆË~½Òï„7Ùe;øŽÁû¼×dãkPãcܼËí$Ó¼‘}äá5ï�Z¦wUpé¸FLÅ˱Íxvîëg<äÍ~‡‚=^d»wáZ Ï8æ‚­Jæ‚{Å|J6'ôÖM¼°ÍtÓ±Í9me}áÌíè;8öñ:^Þr¸ÆÜùßÚµgÌ‘ð7yÜç’‡n;ˆûŸD‹ŠÌxKª2ß³†ßtxº`çžãþ£m mÆëÝÏIäGs‰¶û´^æW²Ü†u×à¡úk¾*«ãñØ·üÚ®§o>–ä™�~¥³­ýYÇú¢_ ïOظ"š;<sˆyÆS’‘ð¯\ RC.8H ß¹’ÑæOÿ¡‘ÓGÊCS)K¸e¡ÔôŒWcKLÓ@WÄÆ é8ã7nÚý‚ïJòŸ¤Ëyÿ¢P_û×í­áçP€_ÈWþW¶ÿ–Œÿd §p¿I¼T¼~ˆç \f3„÷…6i§VÚêÉz¼l‹].Ï1†ÜÞÑâãàh/ͳuŒ›�b8QÓ«o¢Ì3žó¸�:±*��WðØ<¶�l8JYËàÛÇlÊÉO£» ûì*<³mˆïxÎü%üŽÑ-#>)!^ª±H0ŽñoUãÑÈD~aÕ¾6qó‹‡opÚZŠ;ÎBD^ l?®—d•}ôÕÇØîé8'H˜06—,ó* ›xiɶp_`ÔÆ3N‰¼’¦o¼šàw}à7ûM©º�9Ç?èñò¶#À\`·9Âlöœ��kÎÅý+9÷&‰û|Ï“d‰wçÀ<'a-éçQlÖ‰(â¹Ìwþ[¹Å¦þd¼˜çþ.ÑÖRªÞ/óÁÝøRÁ÷>zKöOÅÏ}òø×ÚÚÒ_’›ï6*M›•—iãîÛV<ѧÎíiñH?…¹ÉWUâЉ„_s:¾¾-œŠ<Þeãd˜÷À\}Ð{€ö±s_€” 3že¡˜tMWèñ™mžñM$è[ÖÏãtâD¿A†OHŸ;“ÿP4É¿ìÿ–î'�ëƒjü÷É/õèÿ/.†L{³ì«·äÈöµ­ÌGViüÁweø[%ÚÐ{§¦LZ°¶¬Þ˜|¼± úÉC~ ÷q™u3¾�íÐyè“a¦Ù@z™Æï•=XY^p’ìñ·c“|í Ù~Gð ÄCÞ_l»Õ}ÆOuRÉ;>8¿v §Ø�™¢ã߃KãMM|çã¯ñlÞƒØåk²h#½G+ûøRÿ)ñšôƒ.²˜_ÖíÁ¬ßäøÉ‰|àȤëkç±q]:p¶•�9lç¾€'™ufØÚB%ŠõMø¦#óDó:>Ý÷H5Øö3oâ¾DެÍÿ¸Ç[5ãèÀ3T’ÿ† ¨êùˆ<\‘|¥’ý‡<É@£/Â÷js¼C÷tÖxöƒN.µ�,Ë8zK>²ÞKáî›Ç³Õë£×³±<ËàUºÚW»LǦûÆ?Õ4z‘È{^ižÅ{”hÖÏ8€òÜl�ä?æ¹h'ñ99îО«mLgýáE>¥Â‰{Ë7]aŽ%2�} ·œþÏ�~ ã2NÀS%©×ÿGŒ;þ� ¿ð‰ä_âø—€ÂÏÄCïZ#ºÃO~(1ü&wªÐg/´­nD¥ñLgÃu©á² _u<ð~Û2~ÛK?>"ð¼È+팳Am•�e¬Ðæ¹{Дķ}؈o8)®¼Ú×ŠÊ£Š´!Y,Y¶„clY¶ñ!bàD“$³{€^òIïø·œl°x—D–!ò¨’#‹OþÜÑ.è„ÜzÐÂáS,›ñàê¥ãË¢G…Ä©Ó1‹ÒúÍ ´q)4­€ÇÖzŽ¿¡ú¶¤ß¿ÜŸÿuŸÂwn·õŸ.Ö1�aÖËü�ÿ&Hs‡3Wüiý<ƒÒ}I¾è�„Ú<ÖÍ[Ò/æ×;R|7½ø ˜JÜï𙯂µDĬ=÷ÏV•^ÓA†�mL3Ú¥¶c~†Õg– Îø<–}û”cRm-3¿Ò´axÕ3Ï:È�#£@›´Ø;-©�¹$b‡n‚4E‹u¾š¤X¾D[Çò%þšò\h7ëgø–¼ê¿íþ;†‡ôÁ¶Ød{øk´ÛèÙgžõ–`mÇmÆzÆ@o«Ježn§Bt(æOÔòkƒñ +Þ£á¹òí ÏxƒPÏÉú[ —Њ×b\)NßÅû®äÿõo?HFèöVsý(€6é£ážå\rô¨ Ý4¸Ko,èÿ¶eü¶—þÎÀ}#dnúŽAchðþJ‹õ/ÕoJ þÖ¦ã$û,ü£d7PN@ÁI0ó(2î®q=»°‹Ç-Å�Ç~‘G“Óx*ýæ,|%4¬Z'“BžG™?�­ùyÐX\n1¦Ã-5cÄ )[�qæDðÐ+úÖ%~q=3Ï  pm\›/·Õº±ÓÆÌ[AîØ¯èщ@›;{�Fúw ¼v�îÌ!øÌQÉÞë�*t€*èyÎǽ¬uy²n°Vã×Cð½Àéô*Ôàçõa�Î>lcžiœš ´—CäÙ®â=ßUç)é}ÚÏc­}Á>Ë{´m²žyn?Ëz>�gÝŠ[nhÿÀÏrû�Ï•÷Ho6Á-˸y@Ê̲PLº¦× cp7�aÅ­—ùºÃ¢¸ßÈŒ3.vJ(˜œvOOö§¢ùþ?¿ð§ê?#ý'À“‹ÿ+Õ/ÓSü&À•tybàJÂ+ý{€KýëÀ+ˆ5w_hšq7k¸ë›Š{(о ap˜ÀiÇ4:z›æ›xA‚øMÊ8øM.ô�Ãä&É5›ç›+ø———q „Ÿ…#´É=×ýÄz{£„â%<†ôA�~PbñQÎõßG¢â�s”·�¶áÛ™4𴱌ÂFšÍ¦«±õfEpª`%}lç$>áÖÉP^&ÿö!è2û0ã>0÷»ÚWY¦�ÚÖ40ã’ר31#é$Áô'Ì;q·¿fÉ{56ù‚<æË/0ÃóAñ¢À ¯…ÆÆüPº¥'ÒRÙ5=9 l¦ÍϰédÖ"®¾/•YÒtfZ1ךað¥cùºØc;ë ¯I¿¯‰a$ÿظºÃ¢{…Øô$«1ë9¼"ÀýÔ›kÌÇt£Ê5ŒÃ*žT N{ÁFk�ýXð‘ãU´ änižï4×ôàùžÈv¾',Co�—ý€»ôl,Û‚¹?[º/%'>ã>}p<«�ùøX’™oÝLgÜ>¬—iôà"£d݉sûŠÌ•9›+›RªåKP*sèP +Þ£áõJ‡q ¥áåj=ëÒ'2Ø Á³œ,�Ÿ Ý ;±3ÑŸ¿¨þ¥ÊoðDÿ àƒ’ýŸJôIç?¨�{Ðú·¿ÄÏÉ´¼\è&]é•5úKru§_Ð躯]Úë�ô¢h�ÂæM—qð¦/ïöà˜äiâ3áó¤¯47ªåóM«€Ë‹‹‹_ÚÜ~;;;ã߉�üódî)‘øKwÞgUž¨F?Ó°œ�9¸}™^�F$õîu[GgKx Γ ÕEza‡>Kdí Tæ„Ý6‚1A�­bc<ôífì+6Á’?IiqèúîÉ2¯ƒÓרrH�yW‹õXŸè¶+¦îÑHúIø�üÃ#ކ\¯ˆ+<%:ÈO:.·˜8ÅÖ:3Lv3ïPdåÆÕMò|µÓZ8íJ¤·#§‰g_@lg(<Ì7­í–¯Qèc£ºVˆ]ÖØ‰åšá��ô"Àýå9×î5æ—×RÏ5Ï;’|Ö–ù¾ms–_içÙ�䇪¬@ÖìXC€­Æ×ŒÀq)zø/%úÔxûâ¨ã—âq€›·/?Ûd?ð· mj³åó±å9žÕ÷’Ìcʱ´­eÐY^}eÚ6ÖïÉìhÖ…®5Þ#ÅVY¥ñ�²'éôj�Ìëá/2ãkY–›Ò¦î .´�ûtâo;Å!~P0þ% à¥dׂïÏtðE6ßtð]ŸøSòÏWξI.ÞõW=) ·\ºÉ`,ð,s÷M?6Ô¢?´C%Læ�S �#½h9|ûÿ!`$_éŠtŽ€oCù7dO\]]}þoÕS½éë½ýúRàçõÙÙ7)ü©…ä/}Âx¡MÃ�à;Ýaç2þˆ�QÞ`تDŸàÌCÞ6¢1‘¨hjLˆ_ÛF2øÈ²\x´b^ƒlfçÊ&µÑØÏpnªÙ›>¶1ß±ëñÍ3ÄÈx…Iѱ\|è¨ê»“Ëxܼј®•Ø Ë_¼; -ó±�®ääþo‡�¯Édç5xÍÇŽà™ˆ;ó«µqm×?póÓœ0?ûÈ<øÐ;0ó„ó@Èá«Rì#ˆÎ 1C§ÏŽú`�¬G`áþ‹9Öæ«Äm‡¬™Ð<)-��5�û¿­'É�ÿÙŽ®oc®£+ÌgÏm·Waž÷=<ü5?Ø.Ñöë{Èzûð«®m–àÖ˜–잓Ϙ‹Ú®ÇÛ“[†Í’<ó­oÞ�eàØ˜G{ûÛ©¼·åÊË{Ðò5ˆÌ[¥ŽÇ1YƒYîJ[d¯´kˆ èÌÖýR}TLâ@8_øCv˜Ýˆ*Z¹~|h÷o%Š‹æ«üÇ€w|ò¯ DXݔȕÜ}5õ¨…Ëï~f¼×ÎÜ­uÚ¾² ½Í2Þæu=tTLðµÊMâ›Àø õéÿ•6µ?y@÷Jðuß\œžžþ�Ý×Ëóó¯WïÞýóòýû_ªWÂYtδ‰ø$§¾)íóÐ?Ö´õ’‰ÀfpçZ?J@è ‚1Ë„L||µÿ¸Ù†É Îæ’Mjl2e0„\t¯ {ÔBÿkYãUY¢#–¦é)Õ‰?1%Á„Ž'ÒXz£rÏx�óû\àò9Óî{k×6°g¼#›åMf7†³­.Ød•E<�¹êôb:²©²™nþfZ3^dÄYžã¡›ø\›ÐK�ù¾UVãµe<ä#`²ö±ÆD_4«ä¼&ˆk©úX#Ðç~m÷ìŒ7>zï.õy¡’Þì£Ëðg»&è–°“Äw ÷ƒyd~�Îù‡þ)¨'…Nþ}ñéÓw= p¡-À�“øER=ðI â&å­E€M�ªV`Ô6NÓ�žLÙ€ªæb±Ád3‰ï¢SiM%ÑšÈNt|§��kãÇ¿¿íÿA…~ղųÜ0ÛÃ3_0Æm9´ðZMh\õÀ¦==—Ï �[?h V‹{ºóX¤Ô•Ûø‰áÎUî\ó¹û"½?ó²xžª#ܧ| î]ËMâ^“ýè»ùÂùôŸõ_³>>8@€‡ÞBá^Š>ˆz–AÛ�ïÉJ÷tá¡Kéù�$w_Ý÷»’ãá8Žk=rL­ã˜Z'˪ï%ìm—uŒ#_*¶CžõÁ]ã}Qt†–Ú¾Òæ÷ ¼\°]*ô³ÊÝ÷,Ë<|AçZyødm@h�£BdTÝ•Äã�*ÿ!À.Δ~ýYâ?U¿Ëþƒ|F®(x-Ù/=ðC_€g÷B :të!{üì[ܦÛåÒ3FŠý³’Ò·@IDATfÙ¤1½Ú6óÞ>ÞÔå|”Á0é}³÷�`> ÍøÏŸ?YK8¸QâŸüëÓÿs}ùAõüúóg¾?t¥ÇÞ]IprzúQ Úm.ä$Àá(o0Ú²©Ü©l$UÙšÏÈY�cEFîP4�øþ?ËåÃxÖÉøŽãAŒ£ûf p”"ÀÄ÷�´„W=ÓW:¸QeñøùñãG~ý�*êû/_~½ûÇ?”m½ÿ MÅGÕ?U¨^èÎä†å EÀI}@�+Ó$ä”YAm]…7^ÙDBé#øØÖòfƒ,>Å’žä1Ѥ“­9ÀŸõ�Wÿ�B×~›Þ‚j<�9ðfÎØ¢jl>ˆ¯pÀ‘b2�¡ÃË1 =÷i6ÈÞ(ñ�¹¹·ñP8‚´9s7ãt-­ óºÑxó@ÓCÎÁ+0ey‚‹'Äc-gÝe]ÞçA'üu Xóºn_î›iëT¾yûØ Ÿ‹û”yßG§Ú<7M <þCÚvì°ÉöÕ_¥Ñ϶ÙÞü·LWÜþÜ|PÙ„fÜSólWió× ²\ðÑ+¹¯Yî¾Â3nh´y§=xÜC–™í11ft:õ�îFò@ÎDøÏ\ÜÉáJ `üÈŸìøaÀ_ª?Åÿ[ù1@ÉíZè³o«Q‡Ãý\‚øA·WhëM–qð&/ëƒå XqÓnÀt^®uàug‚Jöõ(ÀO%+¿”à± ðÄÀ•’e/|åh”W�´)ÌcÙIP›`wrhÕeƒ©üíŰâ;tëºLÈ8lІ3p)ò_'\ôQ¶¸x#Ë5—J‡¬7öÊÛ¢s#àIŸÄÁˆxó ¸ø|Ê?Wõ•ÄÿYK¥�ow”Rnü%³Áxˆ{ÿ�û=ébk¥×­KóúÚÖ(¾ŽõNþQyâê½2fmׯOëT %þr…ý“^”ƒcz’Þy�þ%n�FŒ¯h§éz æ™Fl^S °%G)ëdÛŒ÷|gùSã¼rmâ=‘kÕð€¢á¯•*Ý¢í«êÁϼŒg™ù†–}ùþýäÓ�'Ÿ~þ<ùpq¡ÿew©çܯNNÛœã�Þ±ºb_qó€”l7q¶_m“5é³ùGÏ< +ú÷þÆü ñƒ :.Щ²‡œýr@Á� $¿@å+ßÄÿ*?þRý: Ð/^jCϱޕ>¼V�ý½6ú×<ù+›æJØË–¥ä?óék듦ýÆÄÙqÝ»õqpïÐý6†Ü±@”÷ø¾Ñïê�D¿„ïu’w.l^›áy³€Ý\µYœ“S6ŽÚ<à} V¬ÙÑýgC£Í(ŸD¹ÐG?à~ç¯�ð;éˆ/xvЃ謕,7ž¡qù`‘̃«]o\ ϵ©>ã[5W|ê�Žê}ã¶Öí!ØŠ@¬½IÉký{­S¬½NücMÖZÅo`CöðøÊë¢jìÅåÇ{òxÊ+¬×_r¿Ü+uÆñ`Ü+y�Wu¡)=›I²ýšû³­ýøŒ“ësF²Üªñ€í½Ócìõ Ê2�qÛV^¦·pË+ü¤€?¿~=á à³>ê?ÖŸë €1ðÞI¥0^_Û%Üz=/ûÊ ý3DÏ!u¿µ¥âwËw‹ÖÚyÕe¼êË÷d�÷ d˜‚×ãW�Lü-FÀëŸ!cl8«k®NHƒçU�ÍaÈ4mˆËF*øËe¦Õ�°¢ «:GÚRÉÉ¿œü�üWïÍG8òK»É.ñ­`¹!ü†3zKROÿ&üL‰¿«xäv޾Fxް.jíbýñ:Ëú¯¾rXéµM:ñõ%e¯YçàÀU?.<ù6Oþz’èCxž|£CYã#ÏzД/óÁÝWpÊ’Í$]~Å®úZÖ~\ ï‰$þç|bÎ'çª@èÀsñ3<ó3~Y¶7Þƒ™Ç§ÿ_¾};ùœx àLs&žfPGc +ý˸é„G±Ÿ‰ê¿ötè¯ùÆ=ø™WqZ±²\s¦Êž�‚Ü»¬c[Ë3lýã×ÿ9ø"»_JcÈî½êßuÿþÔW¾”þ O¨ææ«û%YÖ{Žÿ6Œâ�Ð8 ±5„©‚~æg<÷UËÛë2`Ä5/-ùfÉA�ïê›Éò%ËuûÍ�ù£K©pâŽ××�¶‰ófÏ k¥™,‘ÄJ?&DUxÀÀ›Žé tî[ZÃƒÞøí7Ú–O6¨ùÀ‰><ã €óC‚aßI®=™÷ê¦ã†r‡—øô�þ’øóã~’üÇïj ú Ûĸ÷êÔPxܰþ°6Æú¯µ‹dŸ§¢@7‡¯W"ã)�U’ÿø ñø.ÖiVŠû�Jw{^Ç—hì­c_@ËlŸù•gÙŒ¸- Ÿ’¯˜ò˜ü™’e>5§ò}@áøl·SÁ�Í"·Y¬Çlº”Lg™ú@78à÷¾HNòŸüóú߀ŸÄø[ß”èÿ­;ù«Þ¡ÄW&0'ÔyHu ]@/—ÌË8:™^ÃÑ­~ªœä;T•‡½‹ÛÑòóºÆ€/é€5ó$— Þ8è"Ï:ðzzðGy£ˆ ÞVg ¾éàA³ákPÄ´xÚ^à ¡—‰kj—Þ‘µþxÂÆ!…xNîsÂφҟþû©€Hþµy廬±O}¡­iä·}™±“ 3n…ÌëàÄŒw)ò ¿xñ½CõÇ¿z¢cü©�nnÀ���'�€×­g^#ùOëëZüw¾Ðôܧ¼v.ù•RÖãÁXÇñEU²ÊN}nÇN:Ð:ˆŒšôZŽŒbܼÌÏ<ó{>¥wÃL’ñúf"°“à³SÉÉ?“ÀÕI|lÚà³Il5ãæ…/o$'‚×ÊúT'¢“ýè§äñ ’ÚéAëè£õh—wƒx¼¿Ø¦ÞÐN>H¢>*û¹T<ÓRŠCõÑI~¨O> ˆOþEÇ‚èGLç2"0"0"ðÌhëw¬E¬KjžJhç÷¡@= —;ë6ë¡ìO”Ô±jÆnž|ĺ�ÁF‰õ¹éÏ‘Wd·]éžÎ! |ò/ŸÐ$ÿ_”@ò‹ßUÏEs0p£§.¥üKOœ‹æ7ð±o¡{Ö_«¯}õª4maO¥ääŸðe:Ò‹mëu¡ãàu]¯—è­oCßœk}É7†õ3oÍvÈ^S´a`Ó@ Øð áÕêä´ÁØžvˆ˜O¥á‰ü-¥Ð¡?øHýt¢î¤]ã–ùÓX C 9>ñ'¿;“>Åý7 ¯‡W^¡é?•w!?úÏ!‰??üwΦZmÍ�þƒ·:÷A¶£ŒŒŒ¼Tb�Wãñ;ZŸx’Šõ�ïbÇïhåu¯u2Öv¢£¢¯$•C�X·ß6èB»˜®¹m¬¿D£[uÖxöƒN.=Yn½%Öy,H;ó@{€äÿ/ý Þ?þþ;j[‡ù™^Ã-[ƒ=¼Ì7�aüÚ?�û»j¾Ì¸æãt¥ß7/Ã5¼Ê ]ð�‹û´u*^u0©Éø5½Ž€×tµž¯¯¾)'ý]±¯L†ê±GÀc†lÊxcMo®5 e#ú Æ8ES¼QÄÎ~CðÀPØ�i'ûçkWþ¾ª ™ÄÈøOs?ÛXc‚·>N,Ú˜Üæ"D7h׿“öâ@^>åç;ÿœëßi§ˆ+º¹fŸx©x]Òº6¯�êKÆW»ÖÖHöØÔùwä—u¶¬ w\±F¢³1²ô([tOÇ<ûèÑðr©íd™q÷ßô“AÅ—÷¾x€€öÀ_:ø§8ps2o_Üz=˜yàûÐÖò¿ó/ +�N@†oâ;zð­Wu*í~›´­eÐ=ܺ1žŽŽí�¯Uü w6 N1œ¨ÝW÷±µq*]ŽíÎåãZ‰?O(¢úVÎD³=Á?%ÿ¦ú‰ßP‚‰Ìîv9œ¢�%_U–éŒÓjVtÀ8:ã@t8zo¦Œ€7s)<�z“à°ÇsCÈ\—nʬÛÃÍðX"À²¾UÐQ�Dº@x‘ˆÊ“"*@|²a ¨·ôà†ÜthN/“Õ-c‹FÓIþ­Õ] �Hê Dþ\+­ ’eÙ+‘£oÈâíÑBùŸ‹qCoŠ9†¼óø“ýúÝÔg]Ú%~�‡,bÈxxüÄú½�Û¶6í£šuâ_rØÉá+U smt¼É(Ö¾flè’ß8L@–Vç{ÑøöÚïvìÓm›Fnžu «ó ³ó*\ò]õ–hì9x¯Ïqy\Þ¿þÿQü¨¿PKíW¦{¸y=˜yïÑðzÕqÈ0ãŒz�g� +¾EÛ¿û޾ 2ó{¸y†Ø7´¯5èìÚsfë¶³-~sÍ/xs0}!hûØ—LÊ?$§~SBù]øM_øó³ àß^ ^qÞ\qŸ‚]íò’Ÿ}tí è„?ã%}Îå¾ýÏ>^/öWÕ(“»W}³0ß™÷ª9:{¿ø‚çÊÆ*%¢Ÿ“8WFW•bAìA[ï¡°àž«Ð7r�þ»Ê.BÉ· 7D®â1LqàÝÆ¿ü¥tÓˆ]8™¼Ø¬QFFF^}Úºk Þ/øO§:Øyê–µZõúgÜtÄ@‰-kpØ5hÜ1b…Þ±ió¼šg:㨛¯ú™žu·dÈ·ÊRÿ·ìzr÷½'[ã1&Ûöð ]õÉþkãbñ¬$¿  pò§t¿«þïò¹þM² õå‚ßиPây¡Ô¯2Ä ûQ Ýõ0qXi7’ù·m† �0â#ãÐÚŽM&ZOð÷jÊ8x5—êY:êÉëàÐF×íoÿà¡~‡þ1D ­mñ) x«N’ƒ_ûÙ6osrLòJÒOòß‘eó: +�n�—}ÜŸÇ¡ññ‰OÖu\Ð!Éç—¬çƒãŒ¯bE1l¸ûŒ¤^r¿™àʼn…Ž]Ø«]CÜF¬/###¯?±>:ùo‰<£òº°Ñ·O°†ã÷ ÎÊŒÌvجôòF'ãØUz‰·Æß’!_*´¿ïX–|ÂÏñ°]æ¹/¹_·Í¬þ°§æb�ÌwÛb/ó3n9�bÙŠE׼ǀô!�-û´Ìq±{pg°Æ±Ef>t¯ØºNø ÑoíÀâ·>KïOõ…äÿZÉå;=Àï|•ì§²üJúHç‡ÿŸ²�n·§pGñP&êq_é.þ)‡gY…9T„Œb�Œk+¨ÍX+ZSZxÌ9>8ŽïšC�òÄ�'ô1tlôá"ÐYǘ¹ºWqÐRÖÂв.’·¬ùsòŠ].•FÖãe›Cq'õ¶ÃŒGEÞæÂfQ5~(Pý�C�‡wÂϬ ³ÝN†Èíˆ$Ñ7M›9ñ7?ÇU*SšÝLƒŒ2"0"0"ð"kžÖØøÏú¼qÞ °îñ^Ò k$¥Â8Ð#íü~À °­—¬Ù×¢)øÄÎżCptÝG÷%óì H±.xÖ·¬ò௕:†5Ý,ËýÈü-<ÇȺî³}fÚúÚn Zß:¦iÃí ƒïÒÃÍË0ãØšÎxæe>¸KÕ¡_•gÝç‚Ü!Î\+îþÑÇZÑEnèä¿@þõßÙ~V½�î%~¤ÃÂÿ[‰ÿ7ñ¿ŠÄ•«oÒo¸@·¸{]áÌ5ûž,óv ›y†t�±ä‚ö¼Ú ¦�^Ö8|É…8ân0™]÷ífÜR®7ƾöCïX"P×/èN�DY|.x®‘Ðk³ô&nþôŸ ]“…^s�4[ôc†*’wúÊX<ÁùÓxô»ÉãSKŸw‰à³ÁlãòMp§²�‚ìdÏ»Ià‚ÆIþý¯ý|1l6s\è¯xQ„�2"0"0"ð¦"À§ÊãÿQÍšk°˜yå3nÈÀ•þµÝ‰“ÁØ›k f5¦Z7üw^�{M7n›lŸupcÜú™Ÿyæ÷xÈ(U6qï¾æ>Ý•îÇÉ}ß²p¿ªMå›®þjÑ3¯çžùÖ­¼ÜFn×80ãè/ÑYVqhÛ›¾Äc1Ì>2ϸã`½Ì¯,:ì1°A¾VÐã®Gœ"8ÈßóÇç¹l>êãÿ/¢ÿ-Ö¿EP¶OÎùNíÞ¨òU€Ÿâaò\…nçö*�eô‰ðÔZ'Cû1Ä6ž8æC€qÀeeß0¹]÷±Aw”×'ªô?ãm<¬~w*I-Ih«‘°²YÓF-ž 9nxÕÃÆ+jkb“¶ÞcÂ�C9ö÷ÿiƒ>_·1¢qa<*ñéÃ<ñ·%ˆÏTñɾ¡|CÓîÎ!€è;ñjmËt”���7�xa-l# š5Q¼ëv(�ß;2Ž Ÿú³^RY›cí–m<¯­Ï!sØ­à´±$Ç,Ëš›ñÖ|XVaO•=íØ{ünÇ|h÷ËÐ:kÐñ6D׸Û2]ýÀÏÅ40ãèdži źa{É:™ÿ\8í;´É=“3Xd¦=VßWèׂ>ãÀv‡/ÝIú¯ÄÓWˆ?ú÷Q4ÿ.�¯|V¢ùAw Oð£‚W²åI�ïÂqC7ö-4½¦ß“W^�vû=ßêj �°!‡6.4xÙÿ¯¢Œ€Wq™^¤“žÄybçŽXžy‹pòÊØ„ûÓïH~‘59%j¡½ñò&Άð{¥r+ݳy,^ÈYn3à±a¤Ïmœ´ �å!ó¸¬W ¾s�ñÁã_þ5èCo|Ò°ä¹�°FxS`�#ÍPa]ä)+’÷ø.l]yÌŸ5:ªt9Ä�߀­êµ¸¸Ú!ÑAß¡q 9e‰FVuÖxöƒN.=YnÜý5½íwKoKÞë·}÷d[þ�c—}TzßÖf\dÐæ™RÌ7œ¸»¯k²]Í] ;�gW2µ[e=ý_ÎXí×­é<ÿñ1Ýi“”v©Nø'îí«lO•Üó¨?¦‘ü á“ÿ_òs!»ÏÒ9“’þ� Ù—¿öOòÏAÀ•*_(þG©Å'ÿ‚òÁ~“œ¯ �nÜ«Ð%¹Ú)= =>ºtmSeÐ’‘øSϳp%øÌ/Dׯp|�ßø¨ä“ÿ€ŠÍòÄ~PÁ~k9”Ÿíñ—C”“ÿÜ–Çažéìë(ðqp—á(:±tcÔÎõ&sæyÒW»[zÜÆâ˜16KôÏ k£áù"gÕà³as‚š`æž0¦`{Œ…0õÍ“�$ß½ Ú•O˜KÓ áã‘Ä‹æ%'ú§ŠË™lã+ú” šj�yCŒ³QFFFF6#ÀÁ3k'?$xzv6}ÿ¿­É|E€µÜgÆ ç§ °Q5�?ÜcmGŸœVü]¼Ê*m{øÙ>Ó¶æb}xÙOÖÙÏ~À3½�ý!:9NØeºâÈÝ—*3�­‚-˜ñÊ3 ¤X·â!ì¼dý*¦¿Y^é¬ß“e^ƱËtÆí3óèƒ+rã†ìO¬ßã!'‹¯•ä²eÈ<À“˜SÞI®dc—“äq_Ýíê>Åý™¨Ûa.ÑèÛ§ûmè0!gØ·3QGø:Žð¢Q—–&0ü5™‡Po0ó<æ´MQ\<á†Nf�øú⣒ð‚K ž6`þ@ÖÙÁÃÃq¼Ü™àÄ¥�qî!ñ�¯Ê§Kó�JI�'(lÁîø>ãÏŸúŸµ„ŸC¾çÉ¿ 8º®2eD`D`D`D`+mÝ$ù�ßjÑíé9@ªH?Új° k;k½lãw¼ÞC·5;ÖûéÀœ æ÷˳®ß',Ãj�‡<ëBSz6“d¿WÛ[šÚkË:÷…øÌíeÚíYžéŒ¯µm=ë˜fù�eàëNÔþ¯5ŽKt寵°¤Ûëcæ�SÉ`óGÚÐüæìÖx†àTœø+áŸýµ�Cĉÿ`ÝÜ4Íô :K2ë/ ¹mñSKOVy™vñcœaSœôƒÃËtìÙ´FØ:GQÆÀQ\†£ì“Õ7ÍÒÄ]â{@wåãÓÇæ¨a$µžis3'ÿ�ç Â&Š$8`Ûl�Gr¯Ä5t–êB4fÿ ògg{Œ4L rÕF�þFB�Xc­74:†¡+½øt¿%ûñ@ÃIú-‰¿7ʈÀˆÀˆÀ�ðºë-ïGz`.¬Ó:ð{Íä�€ÄŸ¯ÄïUØ×Gž×ö–Ëa¯áÈýÞáþdø>ül“õáïS܇¬ÛãÝÇwö Ž�ìÛ>ÍËtƳŸêÃ~­c;óM3nù’�ùU/ó{x :ðÜv�†G±žaæ…ByéµÕ³©c_¢á“Ùâ7Cpjï ÷•;ÅcÎQÛ"‘÷.KõÃ5yOæ®gû†ÍЀl¦Eáv¸æ�®¤Uðèú6:ôr¨“Ÿžø&©½êéV�‰É?.GʽsàdWýõJ¸µ‘šWrpUþ²ñR�?èP¬7Q/þš'{Æ£cŠÅc͇~ yü&€ Ú~~Æ?~üx¿?ñ?Õ†”'à£ãOÿM»mü�2"0"0"0"°�´ŽÆ 6U¯­ñÀæ-@¾&@=á÷¤ÃêÉ÷�÷ˆæz V4ö^Óí«Ò¶RªÞÄ]çÛ§u+´Ï̇—kÏG¶ëɳ¿5Ûì ]û3¿§c=ë@SlkXyæg˜ñp’üd{Ë–xYNßì»ÊLgã†ÖYƒûèÖ>@›gÜ™-48~× 2ø î÷§Ý/üà;û§Ê& ÔܼÐ�‡ë/ù\“#Ëvk´õ:ëÐrûp»‡ŒåÉuÇÀ“‡øM5À$îMäÌóÄ¿8‰ÿHþoãñа8è$þkCˆ¤^›"’úù“’6a † 'è,”eÉ‚Á#±ód^uÙâ2? Оà�$ëá‹1rhPÆš“oDã{ÿŠÉÿŸJɆ8oµúZí玌ŒüæˆßÐ:Ìúìu_ ˆGú[|ü¾cè°½SâϺ˚2ÖtÕx* ñf™�:[ë)æf4e_žuël�¼ÊàQÐÉzÁL/YÖó�¼ÇO.VQÛæv00ɸê[ÏvkpM¶äÇü í'óÀ—b’ùKxöeÃ5ßÙ.ãµ�Ðæõpó€óÞF8}€¦’üóÈ?�l؇î'2äj]»Ÿ¨ÛWø˜÷ŠÝödæÙ?½²$¯¾­‡�ì+ã„  ³>´æO‡†Ù§Ä/WÆÀËÅþhZfBzrªSùXš¨K|Æ”e¾ Žf¬£#ÐÚäOþ­ÉEŒšd3I©u0JIj¬yÚd"‹C�¦´ql_°ä‰»w7ZLø·R±Á̇+>yÀã´_?q“œÃ'ÿ|úOR"v ¢�¯€à£ŒŒŒŒ¬F ÖPÖY½±~²þFò¯õšý8µ®©;´ä—ÍŽ5�Êû$É?¾fÞB/ð6¢žeÐèQÜ~¥‘=„‡=¥çc’L¯ÈsÍ2ãK>à»ÿÖ=V{·µ¯Ÿlo<ÃŒãºÇs{–Y×ü ³²‡Ä¶†µ­½¦Û“Õq;›…Ž�a�‡ŒêäŸL*Å6@ÉâSOÙÀrú$ÅÝÀ9mÕby–õxÕŽ!3TÓO¥á‡_­EZ:´xAGp^Az“µÇ«CÙG§Ú ú"Àæ¦Wùă͔W9ùËÈT)M²ã@`6è#[ò¾Õãs{˜¾Á�øȪÏ�D ª~'¦^ÂV?®Ä÷ý›üØ8žà£ŒŒŒŒ�XGµ¾ò5-Þƒb.|k/ë=z¬ç*è_ワà^Hn_ 'í[^ø¹%3Ϧíìs‰F·ê˜ghJ¯?“¤ïò ñáöàç6zþ{¼ìïP<·gÛÜó2Ì6Æ�®èV~æ-á¶AÞ+ÈÝ·%ÝŸ%¼ç»ÇËö=9¼%úç>fXqö1öaˆ�êCô|€œggø @<) Ý áµ*0x¨®weM§Êìÿµôü­écÏ�Ñq…ç’z0ïèà88ºKr4ª7„o†ÜAOüÞ •õþF"«µ6?l¦òE~Û ‘ôÞ©Ú(±Y¢Ö„–D:—ì7óŸßíÁö»Oî‹øuéøÞ¿Æ?o2…Ã#ÁÞ0~ÓžcÉÓ™“}úÏW(sßZœf:¤ãeD`D`D`D`3ZcëûÖ¦�´ö²î’üÇzÏ!o{?ã`ÀÆš.½µ÷°¼þû}À�æ¼¾Ûǽ��u캷SùKtî3:¶ÏmT�%_÷å»-·ÝóƒŽõŒW»/ó×pdµØ_å¯Ñ9^Æ·`ÏŸm,«´ù@úI&ËvŸ3ÏY®yöŸ¤²[AFu± �ª6üÀÒo –]ØUº+=ÙoÉÎíÒ‡\̇WeÖs¿�Ô¶;6Z‡´Œ”�¯==#ÏìWÐÔÒ�á®#Ï7Cæƒß™è0Ï//o8-?U}¯ïÑ¡o¤z}ç$Go¢”ù”]t4¿ÉBa¼<~ê:í�N…j}¾Èº.ó†ª]'èHòs²ÿׯ7I+p³ï·ÖñAÇ$ø1¯‰‡þÄŸ„ŸêC€ˆz ��Û^�öˆÀˆÀˆÀˆÀnb]ÝeDÅzκÌZMÕ¾åTÿI€}Ìüû¼WÊk¯ÒX¬é¼g`£àÑüNÁ6lš¬G#ª>lmw|4w3@ÿJã»ÐØ~êß$þøðáäÛ§O'gÚ·±£p¸Ía7�¯¾�²�K¼Pj/¹ŸîC–?nßy¼æ¹ hWx_♤ôüN’ý^s±€®>Í«°¶`¹ýí ™‹y¦ moˆžqCtá/U¢žõ3-<~ а© Ü«ÐÍ\hvŸ’íªÍ}dWöåПÌÿZ“^ü`ì3U~?Oæ|#ä(ÀïÉ2/OxÞ0óAL§ÑQ æk;ëüe±8:Ñ„r¦É#’Mz±Z¬É†Éã^*[Ïb‚er‹%ùuâ Øúá¸)!ѱ/¼Ï`Æ$ñq×CxHþËïW'ÿa—{�_ÁVÛ >Œ>ÈŸ|Ð?éã! ÇØàU§ÀŠ‘ãÛHu¬Ç±sLi>@ñ·ÿéèèèx�p~fÑÖ ¸qN.çì¸n)�ò¼VãHþI�UT¸+>tŽ��ãñƒÎXd“v{ö3ÆSß6ö�û¶ÿs=„LsÕB²¯º–û¢ë¸¯Z X‹ Ù1�q-ç9‹zc}¶lpŸÜoË[xÎ&ë¡ë‚OÛXW˦ø¬ƒÎ`¿YÆØZòlm»}0õìÛõ�Ͷu]Ï~2†nñ–;ásl›Íóþ¼ü�£c(’¹ª1Ýp·D¾´Ú -¨m³]Öy YŸeYN=ø¨¯óŠþÍÊ?Z«¯(ë ¯ÜÏäš�±ê³pc«ÇøºþÆž;ÿšðØà“G¼N´ Ñš&jHÆD&bëÆ6NûßE€ðãÀçøŠF¿ec^¿MÈáùý($°*�Hu6‚�ñ÷¹ÇÖP�˜1Fâ§!Õrd.ƒ'Þ} âÙúï]Äû€ò{ >-ï¸G G G Gàm#À¹Y…óv@á™÷NHì çoñ¦Á÷²‰9Rõâæö:ÇÇã’q½Ã¹ÞuP·}¶3íyÂõÇx|Ú:ÛqÝÅ6îô/•ìô~¥8 íøÛÍÍÑ·ÛÛ�GÛºvcü\ß‘øû¤>à>›Û&÷eJŽn²/è\r]ÛY�®%«å™‡\oÃmþZ66F¬"vÀÙ—i°û ¸/îQ?×û�®ëùíÑû?/Xf}1¥Ov)Ñ»Bw†þeÈvYWË=®Œ[~ÐçºÙæÕé¾ðê!þ” p@惛AÔiÍ×6C}M#_´UìDÄ™&ž#ÙwòÈŠzN>qÌDÄ£C‚Š÷¯’×’l‚M;öõ,~Xý>ñûñÛñ;•4HÖ C×PKj¾¶ÿHü“¿Ä.Ælºt˜q1ùEb_bÂd½àçÿÁŽ×“v>Rz_zzz~£Ä¥yŽó9‰¿øØÂ_êy,ó±ãQ×Aq}C}æ %ÏÌ�Þ`{lLÓ–Y=/Xf{ëÇx|Õ6–!÷Ó± ~ß*ùgë?�Üi¼\£~õ¨“}›Cýq_á§ú‡žº¶�ŸÛ¹=xË\Ï2ËÍ£Ÿ“eÙ¾–›7¶_ó‡Æ9Fyì´cÞm¶úâúS˜úŽÕæ#'þ™.uã §üÅT¶î®Dê~å0¶tS!j ¨öѲy5Y_xµÐ~zǘÌùÍ4¬yd†GÝfÀù&»Smãå9¼D'�5ÛÿóU¼@úHFí­ãƒF â]’UÇ>.H,Fž‚/½ðâÍ€5ùÇ"B¢½8ÉlI|:€8{<@§�e»L?©Ubg9±‹7%Kàß�ñ&iÅ)°âc vÐq�@�@�@�À‡ˆ@Ìiô„ó6iŒÎïܼˆO¾VçþÜaϯkv ¨wúy×ÏÌã+v;"/•À®c?æmo»Œ±oÙ"Ïuá�Z;Ô§#]£q/Ô�ÿxé¡úÏ‹ÿØmªÿqç_×t²�€2¾�÷Íߺ¯H-3 ö8  -™uÆ-_Y‡Þ¥–ã²M–Y×ÂÈ ®c~ ×ã2¿/¦ ×q{5o¹1z}ÎöCÆÐS…ì݉~�­+õãQdâã3€ÉµÈ7ƒ‚±Fér êºÙ.ëÊ�·B‡¿lÓòÿ¦²¾ð¦áþØ�ibÒù_gðGà`…Ïm¦±´ tÎ%ý¢‰ãbµzàÎç“'¢à�¤Q21Å€ôñ¢@É;¼^œôXMµ’þ|Pø ¬ß+îúó{©pA˜Ãˆ ξBÊ·ýs�£jâØdŒÄÌ„Gñ³þ‘ìë˜g'’ÄÇzˆ—êtèèèèø(çæaþ*×,»öì¸Üý�Ïè©.�=òh$ó"óÉSÌ3±Á¾…©ê¹Íýœãsh’~®ÁîBñx#€ùŒ¾s�pýÆx¿ïÈ;Z}Ëýpÿ£ ýÉ}5�nÜv5 ïb?æÁ@Æ™®uS<:ƒ}˜oá±±ÛÖú]1õ°Ü~æMo,mj~¬=|ήoêäß|¹þ‰—ÊO|—j/»uw^;´;¶­íêºÙ.�ÇòZV×Ç¿më¶^�ï ¯âÏÕ@cÀÈ)tÍc×:¸Ih´Kî~­mn+� new­ÉäJ‰âOÑi�/œ¨œÊi9_l°&óøïpÀøÇÚšàá™ì-¯  ‘¤:Y5®“äc*@=ú ®ýgh·­~uiØ?Ð:È- \ÆåN¹ïèœÌƒIúC~¸ë_lcÀŽ:îèèèøˆù®î‰Îã>ßת»4l-—Ý�±#R•ðgŸ¦3¿enò¼ó�e­†‹OÏ[˜à³æ‘;¹7F }R;<°Ò"��ôSØE¶\°Åü—°È€º]„Y–éZ*û<†¬7mŒ_JóÆèLƒ3½‹®¶§à>ײ,� ¥þÐÍaê¸mûʼiìÛl¸Ýýãg¬àkLgy²©“L^ òpÑNöGŸ³Ot®±màù×`]Ä`_èL[÷&¸/¼I˜™FêƒtŠç X­VÚñö°Ô"À�>Ÿs)ú»h}=&õœûkœ¯��/ôßq®‰$Š&!ÞBÃþq:ì�™ \�ÜÇѰéHø]9vU¡.àÖ8’{]Ô8.š�x¤,yôõ(y?jê`¶n klæcìîºÇLÒï"™i'þÃ]Õ˱"N­XÙ}Ç====Ÿ/àä™G!u-´™‹5? ™Ïÿ¦‡ù@»\'°yê—ùÛ¶ÌM¦s¤�yÞ²>ó™v½,ƒ6oš¬&Óö›ë»ÝZg›]±ÛÆ>Ó¹>m´Ú©å¶Éò]ÛÙ¦Æ\¨ZF“]1u ÔÁׯÖ6¦ÁÔì ¶³�¶ÌuZ8û„®K©Ã•Q˜–E¢¼Ðrû\™‡EýhoÂQ¶�0 UËW®�ìBÅšF ”ê¼Ï—úÀæèS4±ÄYDùGŸe¦}0—jÃ? þÜè9¸+¹ÿ®$èTǼr cf´M _U¾©á¯Zø* �Î,t8DÊG$þÅßÖÙ©$ÿCS墾þ��ð[®ßRF›’id¶ü¶üeåÓ>ˆÝlæM�bÆ xüAn~?Á…ß�ðË.ÓÔ&^ƸêÐ#Ð#Ð#Ð#ðëD ÎñœçË¢p|Æó«ä¼ˆy  »¦ãS‚$ý<>V½Ài!€yŠzs€�ç4Û纵ÈÆ ‹”’Ü ãÈ>¥…ÜŸQ£EíÞc«šõ5íúÆø0Í8]�Õ´ãDL kœõR7Á±ka*Ð.: ÓæCQþØ.ËrÓ5¶/äc¥¶ÉhñûTïš9]iGÀÍýÙÙµ^8óß”ü¯t²¼‹¤Ð"À9Z× ÒH‡#@rŸ NúQñc ¥‘ô§êA?®.f6‚² þIòo Ñoj|Ø¿9Z¦çp ¦Œ�çeh;læÚȶS>­ó‡ëŒý#§¸Íà¹>Ôÿ±ençUq_xÕðþ²Î9Hó�jÚ<|¦•篗Z¸!":Ð5�Ý-Ø ‰ï§.—·ZXß�œÜ³2 ;¨lûç1Λž�|.É´|Å,ùV):77Ø¥:¡s¢š0Él.>BVùµÿ�„}Ó'Ós8�7.Ì]¤Åñ¡T¼ïþ£Ë°ÍeM§{zzz>k8·s¾'ÙgÞ0»!µ#À×þyÈ4‰~NþßdQO»ò\åzÈLï7líÇõZ<2’WÓ`x꺾ÈÐgÙàkð‰Ý˜ïZŸec|–›&{Ë4¼“}0ÉTÆô‹‹Wê:Ñ9€Ç‰.gˆXGÝ<ΚÆÖ6¦Áì+Ë ]ϸ–ey]7óØåb?–Á«\ñ €1ðE<…òÐ[vy˜s~÷±­ÛÊu³ÎmÖýÌ?­Çl<øÒ9A—ãÕÅzö~`º/8 ¿š;FŽÉ‘q!Ïz“^,÷+ÙÞ(ñ×KcOV*·çççWò}qwvv%åZkÛǺëÂ�5úUwSµ.ðÐ:gŽt§‹‡äsHMÃç2TQlõ» gfŸÑŒӷ þzsJߨ?¡ÃZö¶-üGA°5X6…Ñ qal¥Ä8¹ÀK%'ÿ\üQ°wèèèèø " s>s0|N�ù <¿¿5§Tá`®‰¼@>°ƒŽ—þ©.s�®—†är˜—Z>$ _3˜ªžÿìϼuÑ�bÍ…š“XläÔ·dû@n3׳_dy<æ³m«íZ?&³Î˜_�B²Ή?´‹cázRÅb@=&ì°Á—iøÓÖßÿüùs©Ç8¿-•øßh‹ÅÓ³³³S­\J~¯„_¯Æ==Óéâorò‡ðR¥ïpŸƒKBïÄ>°“|ù‹3‘øa@–Ñ^œº‹¼ ’Ü ¹¡e2lM}ð¦?0æ m�åt‰ õ†ñs�WÊ�ø‹GïÄ?è'ÿF­tY�@�@�@�À/ÎýÌ 1‡”ó~¦'‰½êcÏ€>®¬«&îþy®�óû ·]ÆÔq]ä@Í#o•œÄºN8(ÜN–™v̻횯ý¶ø,ƒÎ<þjÞ²lkšäÚI¬é¸ˆ•œíª$SÝÔŠ:`CŽ™eà:n´‘cåXXNh ¥Cžmá3ŒÕÍrè\ÜNöSÓÙÞ¾°QÝ:éϦµ›ŸÝYO—ZrëÁ¹ÛûØÚG®“}Y_ãlŸuÈs±Î²Á·Îo²ÐütüœpÀR8€�[~8·=°[aŸO7þÜŸÞßÿ!áÕ©¾ IîVÇ?;Hþï1êð‚p±@õ‚#è\LP›ao›»úQWa .…‹Ó¶ßâCøôÏÆÓSù®’M¯wµ~j7Uß:cj›6Þò¨Ä]�”ô³p¬-�ÈyÓóÖB:êPìˆ8 â�e÷ôôôü2ˆù’Ñäsÿ£c~`·@Ì-šW˜[N”üÇüÂ<£’çøhŠæR‰æÊu@ÐüÏ܆�ç¸Lc’ùØm 1èÆÍÑ�Ú¤,õICÝÙ9Z\\�éýسË�bš› ¾ðçۄ6Ô2÷Çú}1mghñµÌöÈsqòoLòï»ý™¶Œ‹Ý õXðÍnnßã· œëe>Ó´3Æ#²Ÿ�dó7×£³=4v{Âvª?§ªw®r¡òE±úªØ±>B¸¢(&¦ãú_rÀ¡Ùp›¿-™m³]ƒ:,S¶c>v•ãÛ…:™6?ôGç‹W_è „½ÃK#àÄ1\ûr)^ó®n÷÷à5ÑL¸”‰8. glŠ]>E‚ZÓ¸`It$¸šüãN73èJ©ÌšúóNDŠÈ0!Zf]Óx¶øV; ½ `*¾ ‹ 4ñ�±Á¾”Ú]Oþëˆt¾G G G G`+š?â1²2¯œ*ñÞš;òÜ^*æy=Džóµ˜u �È{Ï}­ù›ÄE¯dÿöË—£óoß6 ò£Ç7�.´pª… ÝÔ°>û4Ð^ /¹o¦§Ú¦Î¾P�¡æñç¶íÛ|Nö#ƒ•É>´ïö;ù·Ü_мý�Én)d¿´m FæºÐ€ù ÷ø7Û"­yËÀc>ÐÍ~[¾§êÉ>Â¥vÙÌîÞ“ý�’Ïõ…Üýûæàw’û%àà•âÁ Á¹è¹�®d“ÛÆzóàÚ²–ò—Bn Ú¼iÚµ,ú ëÅW]è /ýIßú .´>xÇðX¤°×a?úž�±z]>ŸE"á·]¹8¶Ð>ó öR’¤êO”�Îr]8ù·]`·óñæ Û­c;Ù*>CâOrOâ_.Ê2­÷YlaO\+غ€«t�íèèèè ÌÇ/0w�d1W‹>¨ KÿP0�Æ}ª[\l!½¬YÙÛæŽ? $ûq³Auõ]磋åòè\‹v€ïÁô�6¹oÐæçÚ¶]8ùó›\šâ¤�8SHš��]¬Û¾ö%Uø³ÏœüÛ–ñ!ó®ƒ<úZ–õSt«nK–} Ÿ³Éö™V?OT•ò}½Ø{³°–¿{-¢œ|Õ€b± hìKż�-å^rBe`Øt%2 –#³n=6@Ër·ÝÂè�±ºè\Ú€½ë€ÝßLÛöà˜¥C�À®ààtñAK]ØÆµ¿1yË®–uþ9`²Ä�$Ú»ÀQP&ì\PM²Z.8ÀNúIdƒ&ñ…ÎvTþ`°‰Äv§,«ñ¶UÅ1Î %6ÄÀd± ‹#/ wÿ‹ÍÏâ§'ÿ9 �îèèè‹@,”y—»ÿËá=Kµ0Éþ=ï (˜ùh˜‘—ú5v;àØ …m¶ûÇ#ºŽà±€�ë1€/‹ÅÑÅj _´°V‰´_m{± ´CëB€ûíª‘6S@IDAT±@��ý ¯ík¾ec¿¶;™w‚Ÿ~Ó`ë�©ç¸â_ö‡ -Åm‰ {êxÀºì;äµ ¹aN�Ý”MÖAgÞmì‰c@}ö€HèåW/ü:ºÐ"�Üè6ÿ�Æ~£Ø�Ê€—‘üç»ÿ ›î†,Cg9t­ÛW�½_îC�m“Û¶¬Æøq±®ömù«bŽÝ=»DÀ|mk¹1zÓÆ–¹.û#ô»ÿ�±8åàIñéÄ?Î<,Hn/`wHv]¸à€NØ‹ƒMi#øBãÿ½�p°ýÖØž8pLâå~i@$ýº8«“ÿ¸HKõ{òïHvÜ#Ð#Ð#Ð#°K˜G˜[ ðÜy�Åx =CcgšÄÿ˜;òJÄ™«“À—$>p²§n ´åñ"B„L}â=_µ0ðõöVYÝi<€OìNÕî)}/éÓ\aÞŦÆÅÅ€<¾AÐ Z6n¿6·<·à¤l[°¯ðmÈIð±%³Í€¼Nþ³?Ùï˜ ù´|ÍÕ©õW c‹\À°É5¿¨Ü«ÿ AGÑÑ™âïи/e{®£’Ð<ˆÖ�,%3wÁâ#óšZžuÐYï:È YoYËκ]1~kß–{\Öÿ·.ÓõOô Ð^!¨¿‰KÈá í»%«CâƒÙuj½¼õGžeI$øLÀUl¾Qh…‹ .ŒãtÍ);•�~÷ßã1d™icÛŒbb+ÄÀ;b»?‰¿ wgâQÙÆ±Ä–º®¿ñÖÿöôôôôÌF€ù#æ›b¼dÞ�fe¦2ûxq¦´Š-üÌã1ï‘WˆŽGd픊èk?ȽàXÉ~¼PõWå€_¿-onâØá�› Üùg~<£¯á—=¹ýV?\oL×’·døA^ë,£�d¥$KuA^ì=.|@Æ“1rô–ã‡d×r‘¸oØN�ýMÙd]¶£³½il³½å£„!ÏÔ÷/ô_̉ ¯Pø¢±þ¡qÏK A„kÉa¶y ŽâFÖ�0&³…Ü€­!Ë-ËzËZvÖíŠí_.¹®ÛðXlŸmJ÷€ƒ†ó·qæ”�ÑFÖ[füôcó"œÏ.¦Ÿ$ÿ# n8’UMâ\pp‘`4­R*ûLf_?=ض{eýfŒ@ K6\�éâ&.Ì„Iþc€˜ê›þˆ±Ù ²ÿíèèèø°`a>œˆ&‡ç!_0´æd±ý_8wæ•Hþñ�¿âÜò�šÄþXsœi¾p¦ŸÂ]þ•xlbW¡üÇ�-\èÑzHÁ7£0 ï‚|¬ýÜ'ÛË|²½�Z²–;ú’‹È^�­‚s±½Ä1&Æâ1A» ’û¬ÇF�`7¦Ã~Nßò9%s¿¦Ú¬ëË–GÀ°c1@¾¾i¼+•¯¢:JŽÈ¥Þp.9ÍnÖü>²1Û,‡²ÿ�ä±mó‡Â´å’Ç×¢Õæà§/ ¡èÄD8ýO1G£Ï6¸­ydÛÐÿíxˆ‹3‹'zN­†1ZúHüu1à¤50:…D�yáàí—ú‰~/2�´Ùë�›FEÈ…Q@‰‰éHè)ÜáˆÂ€.xǨ]|Ô±*MtÔ#Ð#Ð#Ð#Ð#0�˜sdñ ¹†Té�yžù<Ïé!}ú‡;ñÌy îU�1Ç;e¾ªçpì-#¹gNǧþä#càk,,°õÿLï Ä€ä9£s[àÍH$Ú„Îà¾dÙݲu»­:ÖÓ/úL²dL6k98ÓØÀSŸ¸-Œ r �¸u_ nßø¥þ^PŸa‘ôÇB€0‡Z¼P}»—òZ<º{ŘP�üß*çŠ%áôÀß®2êe[êÆäÖƒ³M–g?Yn:׃n•ÚÖ>±5m›ƒâ¾pÐpþVÎ80}€f™Árø| g›G]_pÜÚx‡ >.|1`\¼ôáQè_l¹ p»•ìsÁÁäVl�Qã ·÷ß| ì]y¤ÂŸU,­p=†z|ðŒ¿žÉÌ/þc!ÀwjFºÔÅ=====;E`X<ÖÜSfÚ�êe£5Ïÿkî‹Oñ•=æò2¿yþËu i/t²#¹'ƒc¾ÜcìXTà gzà¹Þ p¡q(ì°?pýY@²EÀ6¦CXä¦wÅî[m?&·]ôOŒ1#v¡ŸxÓK<ĺ|’í’„‘üÛrʾ@�Ù߯á4×›¢³În�¹ ƒŒ¡Õ'žç=¥lØ¡Îñ’í¹ oÿ¿‘Í�D_Ä_ˆ'4˜Ù%¼L·dð@¶ÛWVׇúc?æ3Îíe¹é©º¶ÁŶöiÞvÇ}àà!ý¥r@ú@õAê[7Æ[ö�]û°�õæ;Þ%šØ è>eHÖ�— �œØ4I?zãb]ƒ.mñŽêƒgŒ·¼‰‰GgŒ¿Aç¤ß Äg‰w @oºG G G G G æ3æ+¿7€ÝjÌ�dÃNæÀR¼Ã _cl$›¿ÈY X“ìËïBŸ ¼ýö-ˆG¤[êQ€3->œ¦’y·O[žK3�ÛÛ•«?&Ç/:ŠwFä»ôd¥2Z}uË̃�Ì“ôó‘{èÿ´e‘{�Û¨+=×_ö3çÛúãCqá¥~Üñgˆ1LÙ­)¯Ž‚£k•¿¤ø!|)ù�hv°7—„ÖÔ²šoÙd™ýŒÉ�²od¹®m�ÝÎkùÒǾð$$]°G8P9h�]µæ-¯ñÜ�>§¯ýý^¼“v�Ú|š¸™LëgÿmæÇ‹¢‰9€‹èRžÐ%]Û?'ï÷·>`våm6Í(œü³(wö5îü–ô.»÷ Ao¹G G G G GàI º" ž¤“ð;é-4ò°°ÝÆúÝÿÎ�=³¾E# ¹âÄ…ŠÇèä?ÞêŸbÁÛþc@w;ò€¾ðî‡Bï@�@�@�@�@#± yŒ¹‹„þŒëÙYNÂÏ»xa ™æÄ¼@2œÁs*;x€wøå„ñÞäúDà… ø¢r¡w<3gÆuîùèSÌã Ÿ-]–A3zzF)Ù'4:p+&®oŒ-´3b0¹u´M™ƒ]læ|ì£f{|úïNñY¨­(¢Iò¹Ë¿Ð˜¯„Iþ(—âÙ°}'L“„ÖØÝÍ<4€�aYmcÞ>²?dSú)�ýÕ6–¿î ïúOÛ0qý�áÁ´t-™í¬ÉçÃýs �ûhDIä£[eòVÍÑ%ý°( c~4)&}3è5 ŸÊ– âä›Úoþ·uð´d¹cYÍÅ 0È ì?°.œ†Ä?%ÿÄ J©uûŸ�������2—q§=^ ÈüE¿,W¾& §Hö ̼H!i¥ä˜ºæ™7áﵸàG|ç_÷jëŽw¨|å‹*ô�9“þ°ž6ËÌ+o¯îkö^Ëà)ŒYшq‚sß ]lŸ±cfÔwqâßJþe`_æç0ö¯ smXŸúÎ#,,UnÕ?îøó¼ÿµbq­ñ_šäÿJåV…<6€@d@‹·ƒZß’Õ65Ÿë@ÜŽí-[gYËÆº1|c¾›ò¾Ð K6"ÀÝ:@‘¡›Ò7Ü%QNþ3�L:Ùˆ€&Mü€„‡¤?ËdÄå0hM¼†�B¦2$ô™Öä;¨äºÖÛÑ;à�É–³MM_bm>bRÆç>�ä€à¹ˆ)2CÜ&{Ó•=====o�X¤Ö|só[™¿HйëÌvü2¿“¸rC!´@‰YÌ�¾Ó æÌBçwHôøH€ÿ¥Þ À#ë››ø’ ?É?ï8×Nv  èWË[K^Ë<&°“xÆžß.Ä;ì3¸>u�èƒ[ÅíŒù©}»�1¹õ¯�is¬Ð^Õ'†Ä�—*¼ä�çü㮿„WÚÿ}CQœHþc€xvP×?#nM‹ŒfæxìlãnÍñ¹´ëAuý�t·¿Ô+cíà¹ÖíÖÚŒU_˜ PW7#ÀÁ˜ÿ LgãÚ&ëÚtOþÛqiI5iA'y-|^ˆ³Œí°)ò2Ñ>¸ D¡GVp<`l_¦�­x#ü8ªñwµ숕Æã/É=ÏMoúg€‹]4y GÞ)ã£ïš�����2ŸiŽb^cÞŠGݘÇTbÛ¿d1÷IïÌ+Þ_du¹ˆ¹²(b«¿üp§:îü³õ_ -0° €ÏF4×ú}쨲ߺÝ)~Ÿzµ­y01prOŸ�qSx v.ÔÀ.Ô¥�û¥yÀz|¸ŽÈ'`ßOI°‹M2 ’aÅ€âålùÿ.á­ °`©ðHÀZrxê0œ'‡Xé4rÀCãm3¦«Îõ§®—å®kÙÆÏ>öƒ/ý¯èÒ>]Äš—}àeñû�ks û#Çù˜.Ûuú¥à|PJü‰xµ1ì€.…¦ýã1€U‚/4ü�üë"!’ÜT7ô›Úoþ—ƒl Æt–ƒ]"†ÅQÜé(tDÅqÐØ‡ä_*9ñçJ,;ì¨Ó¡G G G G GàƒE€ù‰ù*æB°®(§*, 'cãÎ|ÜP([󑑨˜ålk:xùŒÌMíÄ£òÉ~ßég€ïüóˆ ¼[üì2‹Úœa¬®í³m¦­»0îlÇâ1ñ÷í\ÇöðÔ§J¼¯ÐÔ¥ Û–zcÐÒµdcõßAîGxþ?vè÷ù¡ñþ¥äÿ/­\jÜ<" #íèZv�Å{hù'Í4zó-ÛZ6eß²ÍáªÛA×’µê ³ÿ¬Ïôœ¯l{º/$Œ¿�“üÏà}@ƒ]|ÿ6AyÓ�jR&aÍAÚrpäÞ4|ÒA:Y­1‰}Ș�«bÅÕ» ÇQîÞüXäu ¯åb„8x›d$û,”Nø­�XíÞ¥nÙ#Ð#Ð#Ð#Ð#ðv`>£4ZŒ]º† ]+9?&%SBϼ殦乗Øq‡Ÿ;ÿa[®WlÏ ã™%þ$ÿ|�ÝØ×;ð7´í̶ìZ2»ñ¸ˆEä$þ$ýŠÎP°CgÈõm—rÒo}öáúö—qn'ËMÏém÷Øm«�8œ„y ¼éÿ§Æü]+ÿºÒ€d˜Scdþyí2ó-ZU†ŸÂzËÌÏùÅ>ÛÂ�»/Yf:ãÚ.ë ñåbÛ–ÿºÞAø¾p�0þVNòAz¨�ãÓ~í³æ-ï˜䄟 ¶ð¨|6 ›Â#78±7¹&íH^™ì™¸Á¥ v\4`7ó3fÔSF­3oŒëLg¹Ë /qq œèÇÅyĪÄ&ƾCŒðß¡G G G G Gà­"07{>c~c—Û©’õ3-°Càžk wóOµ0€œ;ø`ËÀÌ�­B]äßô€¯zÀ%þç*gºûª…€ãR» ´J½Œ­G>›^o|d[ûC6eƒÎ…¬Ô@ÒNÏb€‹uØ£÷ÝþŒ�ø£ÇŸ1urÖ+6Àmƒ3XnÙ˜¾–ÛÞØúì/ÓÙÎò)Œ=z Ùù 5cýâÃ�óÐ]}ãdûç·[° Óµ.ó¶±ïº®åµ�ù–¯Z?´›Kn7×ÍýËòƒÒ}à áü­œå:—ß*o=XÎ @Æ5 ïÆÉ>ý’ØBç6’~Mü,xå°·£wÄù «»QëÌcoìÂø¸À .Ð)>¦ãâ¨Ä+ Sêo<õ¿=====Ÿ*žÓX8ÕuÀ™ü˜ºHØ•ºñù@w'ðÆñè€Fìë’cÓ`¾ð·ë룯*± OF]vÈ/31vÆ"hÉeƒhÙ#hÈ6ÖYO!;­�Ä�±‘Ðg_¶§ŽŸ÷7ÆÖ èëâö2–Ù–È -=:Ë[Øúì#Ó®cÙ¶]�+{‡ÊbóÆ–ƒqe@oÞ¶ðYŽmÖ�ñÙO‹v=ëà�º­1Y7þ´êg³Z_óÙö t_8H»“*üãäÂ�¼;ô—ÎÆÊ·h’XëŒqÊ>`î`«D‚ .%d^°¼Ô‹Êïô§>»-ù”Ì:p³”±†t)‘ô+¾@j-l¢ëžuÜ#Ð#Ð#Ð#Ð#ðy"Àüæä߉?½G~ªù/%ëçJÖc€ž;ùº³öÉ1…91ã/ºãÿ7íøÆ€ðõµ�p"Ÿ~d‘¹—z5–(Àró5޹[Â<�ÉlSû„§�¤ÓÓ"X n®ï„ÞwõsŸiô¶¡ŽÛÊXâ€)Y¶1 ¦Î®�mÇh|å~´èº½†Í1c¤ã»ß�1U2XŽ �yÛÁ·äØ[ d~ŠÆ6ûÏ<4uÛ@[=¹Ží¨ëâ±´ìlPÜÎ_ÞÙØ�‰|L7”çÖ›óûËë}ÖðÙ'ø”ø×ìRR»•ô“Ü:á/8øl_;}g~îà±~ »û<{;Ø–Ä?è4þHþ.�Ð{1:Šê;ÎöÝq�@�@�@�@�Àgˆ€¼@Ÿ=ÏÅwý5ß�ëZƒÄýL ü¹ù3%ôgÂ~ €¤¹U.T'ÐbÁ-ø1€¼@›Ì½Ì¥S»Ôs°}Ø6æu1ö�<Óµö^pëlÑÛ=É><6¾ãï¤ßrÛg:Û¹n�]ÏØúº®Æœž1ÚÍÛMþy\×crêe;óîN]ÏòÚ®Å�É�ï ´Ÿû�ëey¦³ÍAè¾p�0þNüÏV6ÿã@g¾¶…¯õàvŒÀX°�³zºQh"ê—dÕÉ~àzÛIpc� %·øx¨š©>ØvŒ�íHàƒWƒö¸…}D<‚.˜~ÀcŸc;Õ¿®ëèèèèøhð<çä?óÈî¹ó¯Äý\óÏþÇ'üàY¸º::¿¼Œ÷8ñçEy¦ÁðçòñE‹_UØ ;„Y`ç"spÌ¥ÂËŒ-ŸÃØÙ_ö1G»>‰:ýãËr‘›kaÛ�à3NlHú‘�al(Ød,6x0€Îà:™7 ζYn�ëg;ÓÆ¶Íõs½mÛZ‡\ãóÝÿø)à%ö.€ú籫ZnÞÝ„‡nÉñQÛ!s�)ºÖµxËÀ€ÛÚpãi?÷![ŽÉ³ÍAé¾pÐpþšÎtgT7HÉr¶À¼ZóA×¼+×~,ïxÇÀ'e"ùo¹�Ÿ“$ŸR’>s—þ°)Émøxr´<¿�,`nµ%³l½±eð–±`8H=þ‚‰ &�‘È2aÿÓ#Ð#Ð#Ð#Ð#ð¹"à¹�çÿMóux»ÿ¹Þ ÀÀ…®9HæÏÙÀ�|~üؼPCvòŸ1ô™ê° À…E%ˆj`.fN5Ffð<=ÌÑVTx¬®ëe}‹v;vKϨ› :ìБä³Hà‚Ü:ô¹Xn›¯*Q`Û ·á3m;ÛZ7‡]Ï8×w›Y×òײË2×' ¤6ñσ™eе�uµ<׫ucu²|¬¾û�õІÜoËì×|îO–!·®Æ¶{Ü^%¬¿´SÔ¨€ùšeÿóú»óï–}v‰Œd•Ä•ÄLB[b1@Ã;ÀxÃ}ˆ¿ù s‡²Ìt�±E–K- ^c>IÄøUrâÏÅP@‰�c»ö¿=====Ÿ/Ìý‘ìsS!Ññˆœô ]+\HÎ;"‰g€¶ÿ_èî,(Á'ÑÏ…ÙÒ<;b÷@Á,Ä—„¹–anf>ÃR ¯¡\± u­·mKŸÛÁÞm»n�m�œ„{ÆδØÐcß*N†[:ËðÀÆhôµÎ~¦p«^-ƒ7´|µtYí¾iÜ„ pÈL‡Plj;äÈÌOÑØb—}ìCOÕGä~l$í¿¶³Öý€G—ûi›7Å}àMÃýK5æƒÙ±yc›é]�ý¾uvñûKÚÄD&೉q- £b ½&p'ÿÃÿµ²‹ƒ1ÞÞv9 ¦l¬3Î#Bf¹ióØyÀ "ÄŒ‹£ˆ]vÔé�����O溘ï4’~CÐâ¿è:�vÄ€v\hÀ…v\üü¹y1 * ¢-;UÝ(ÒñÒ@èH¢…3ÀqRãl“i×ÎW.®k»Ì›6Ʀ¦ëzîO¶Cæ6�s=hì�Œ÷¥7}ØŸý˜·Ý.¸U×2p]Z>mc�y0P0[þ ~$Þ!³ºæm“õûÒø ¾sÝ–Ymç:è î§ù–�ugß–#³¼Æ¶98î é/íÐÿ@y�ù 7mœíÆéÕê�ïÊòX¾+ËV°a¶&äNı&À²`Š,èÏú§šüZÈ»ýÄ[°Œ6ÑxÄÔËró`ƒëÀÇdÏm&~ßÙ¶á+àýާ¨ë�ñYnt9^|¡Ãعá˜B‰¾.tø2…‘øSOe¨÷´{]Ò#Ð#Ð#Ð#Ð#pÐh^ÒíqMú›¬üAŸÌã*à^×EwÐ6³³¸fàšcµ:>^.�O\‹““ÅâøT™®åŽ�è“`@[Î\ ¦øz$æfñÆÈ¡k,Ñ®; ‘} jñÙ¯m,ƒÏ4§Î¸·Ãi|páqжlš:‘ü§„߉?Ç…Å(ßý�GlÿxèÐ#Ð#Ð#Ð#Ð#ð`¾gI? ÿr¹ÐÝ÷%x½X,‹×iÍžçǯ›; yóìçÏ/-|¹¿¹Y«Ý-Dka‚»ÿt #ñãî?š*4ÜÒ#çÚ]�­°3øšeJ6æ³Õžmí?ã)v¹¹žå»âì+×1m}Íç6[´í[ÙX±¯ZÏïŽÌ8ë‘Q- :Š¡å?¦Ëò1Úí�³Í.rیճŒ @ ®×–a í’ëÛÏAp_8H['˜ù }Þ�ª—ÈÄg`´àLÉÕ‰î¼z€ïÌ®•Œ­™… $þ›5 K~!ÌX¸Ø  †�é¾DQB`Úx#ÝüͲL�Ùdù[ÐõÁTóîC–››Æ®¦c¼?Jê‡gü½Õ¿`'ý�uÜÅÁ¯|Ì9 ÷ôôô|´(ýà®ÿò~±¸ÕÝ÷Ûõ�²ðëëÛ»««Þ °K§uÝ´“]í‹û@gýõíüû÷Õúòr­E€ûõíí±!NµpÆ 'yÏIþÝ�cŽÃØí2_×dÛ,ËmØg–�µo¶¥îØ>ÛXVcl²,ÓµÎþ°±�mÌ[÷\ûŸò‘~ÆÔó.|" ÎaÌ4&S<:÷r�LÛ¦%C÷9õêö‘e¨ýšC[JÿÑÿ¬íB4ºØç ;ྰC�ºÉ“pÀû`ôÁ?…mûĽQö�ñB“× �háÍô¼Ð;Xy&ùe€†Hþc7~%`삘è!ù‡FnœéRg¨çú¾q–…ÁÈŸl?bònbl¹s²8nT!ìtüœ�Ì—»ú$ùq·Ÿäßź ³#¥C�@�@�@�@�À[F@ý÷z\r­„{¥€ÉÿÝÏŸWJƯ—þy­έvëÖ¾ ÷÷Ç_¾¿ÓbÃZmiÀñƒÞ þð«q5â¹Ö `k1€Ú.æäÄ[gÌŒ‹�1rÃÔll¿Ù&Ëì_¦wÁØ�õÅþ±1´dè, v]û«y÷¡…m;…­Ëþ‘íRøý±3v|U�ÃéŸ s ë¦øl—épRùÉú}iûÛç6¨—yhÄŸ¾pˆ(þž>8}àî�æAÌKã:_hÀC½À‰/ ‘üó.ÞÊþ«-D@™BIôKÉôÖÙ}ùŒ‰OøHYë-«yä-™íß×IÍ»–#‡nñYõË€“ÿxÞŸ—þ©Ä.ôÅ&°ù¨Üÿôôôôô¼Q¸.àz@[î—ÜýW"~½úþýjõ矗‹üã§îÂ×Ó\Í�uv';Ý”9þr}½¾¸¹¹¿Ó[ÿµq¢äÿL;.Ô¶:÷¸€¤¯•øÓP]èT–qýo X¶á6­Ë2Ó¾ŽÉ6YfÿØ›Ãö™mçdYŸû`¹eÆÈMïŠ]Çö5�|¬Ø¶Æsöcz/øcWh?Ÿÿ“ÌïðÏAzèjÝ_Ëñ“e/¥ñǰ2dŸY^Óµ|ø\²îUè¾ð*aý5�²å¤Ú†Â?B>¨ý�1† L}Ðé2Ggzö?Þ $+¾ +Ì€¸ÛªDŸ$§qçŸä¿ì IþÕ �¼2u†pÝ1¼K¬\wÛ�f“�†8^ªZc,ɽ·ø{ Þü¯E€l „7è3G'†Ðÿôôôô|°@wÚïxö_[ïºûs÷×_W$ÿ7ÿãü ŸVž[fszæÂ㯺^[é™õC_üÓ¶ÿûû/j÷.N�WϱS˜Æ­Ï´e`fÚFÖ‚zfÎvYgyö�¿V[¶AoÚ™¡%³.c·mYæ[´eSØ:|B×¼Ûªq¶5mŒ­ýXfl?æ§0£õ\ÍC W†¾1û¬3.n!lglù>xªnK×’µÚÃn й`czªÎ˜¯�ä}`§0u£‰øŸ¯ÆU*^È‹Iî¥ÖÝý%¼á“çþãíÿJú5Él’ÿ²ÐðôqE»,V`£2•ôç³A>CXn<¢$¯ðñ|)Á†›3NbŸ�O|?±xz6n˜LŠ| ÙhŒ·| SŸþ²hdzC(©ç“ºhë¿_üÇb@‡����Í1ºÁ_Ýáï&$ÈB:Hr¨öÝ^Ÿë¶hîþ¯V¼øo¡»ÿ žû×çønµàfùÏÞ,þþ÷k=ÐZðÙòŠlNŸë/õ´æÝ¦|Uc+•;=ß­+²£xþ€Ô…rAss%wGl+õÐ9d®ƒÜ°™Ýív‘»�ìÏt�ñg™}g<¥Ëv¦Ýv‹Ï:Ós?ØØ.ó–·pmWó­:–ñû™6®sžùwÉ:¿ Y‚Æ1ó¬suËŒ-ÏöY· ÝòñY®3GÓ/C¦‘Áoɸvßœ~\eܯr÷�Y¯±[8/à­7¤ýÏ&¾”€Û\`Œã³'gƒ¤Ûº[­“D¿$ü|=áˆäVÉo¼P¾è>Â�äƒÆÃ™ãmgœíóbG¦/[ü½Õß ~€ãgŸ÷ôôôüæÐÝwî¿Ç§øÖJy7´pÜ™xž<=Õî)ÑÅþ½þË»ëëË»››k=ïÐûôX€óªV›-YÝú.6QG× $úQÔèƒx‡“¢µöM±]\{pC‡Î�IúÀ4Í5‡AhËm#QÈŒëNºú1hÙdY¦[>²>ÓØÖ|«þ˜,�¥E[6†ñ‹Î¥Å×2Û¾ó{åúð¹ð[똈ßLY%Þ¶=^öÏÔæsûºs½¾°s¨ºá+F€óÉïuâÏè%kmóçlWËòÌ“ÀÖ /‰ÈHø•üG�vñ�½ž;²Þt�é62�/’düe¬Èü¢¿áÅìÀ†8tèèèèèHP¾>bûýz½Šmøz_wÜWz?>Ë—L7ä�vhNŠiN Z¸Ösÿ—`í¸^è%|«£ÕŠEì<%æî´dY½‹MÔQ¶üq2G’GÒÎì™1´mÀ®#rHþ©ƒ¼.ØS9`ý†ÛԷβ1ì6Æôµ|û]lj¿5ŸûoÚ[ÓS8ë ]êú–ïƒý›QÇ¿£ë›“ô×ÅÉ?8/ ØÎõ¤žƒç„ú9uæúñËéûÀ/÷“~ÈqÎhÿ¤¿8ù¯0Éÿ°•0ÓŠ�ÊÁå�ȃ�ôzHö‘³Pbe½[¾ßãi -Yî›õ5¶�“Æw÷˘½ý?’ÿRb�€X¯=====D@ó±¾D𠾟áÓ]÷ÅZÏâ?,K½O;ã‡|Í1óÔd~7<²pÀ€îúßèíû¼ùÿF ·zÀr½X° A^EN5Öæ˜Ü}šÓÛ.°ŒãŽ¿GÃ`’=_›�¼çâ„ÑI= R�SÇØr‰ž$³è ™¶l ÓF®SóÔmÉì3ë2m½1º ¹Í,7m½1rÓÆ-:ëMÛ~ŒŸ“[ßÂþÑ™6æp©òqb{ú9S!©2+Þ×ç¾ö³øh}à£ý"¿F87Æîéß9ýÓŸ]R%ýöÆ•“~.8$òŽ;dfЗ’DÃÝï!Á÷B@I€³œä(ÙÉÒ»Ù&Óî¦e`J$ñ$ó³þcmû'Ù7ïÄß²X$èÉ¿CÚq�@�@�@�À&¼~oó~%ÿJøoõþ�’ï[žÅ�íøñ:€Çpifõ´ô(£F’þd®×ëkÀÍÍ’ö”üóÀÅ}Ù  ò+O©Ú@ÎõeN?8RòÛÿU!’5ÌcÃ�®Irâ¯[ OEœa€Ikœ °«7Öaüì««3&§?-˜³oõ+ËZ´eS� ý2}(Ìïƒ/ãL#£´/ð´m\G¢]a.´»ú±Ýsü=§ŽÛû�¸/|ÈŸå—êç þqæ»ßò"‰~Í+ °$‡ÏAlño¸{Mòë;ü$þ.–“è¢Ï<²7†±=Ë3]w/ë¶h�%¶ôkŒ‘è“üçÂB@Yì ?İn¬ó====¿ex?ÞvÏ'øHüu7žÏð­þ¼¾»¼¼Ö]ø<1·nóUÔ4ÏLê‹ù£ Ï h»¿–j{¥6WZ àkw÷Ó�àêÑOÕ�Äîb¾dè;ÿñâ?H q÷‚4r/ÐÀ.EfƒÉb½@;­ÎZnŒŸ¦tضôY–éì{Lžm2�ûߢ§dÖ�sÁæ3=¥Ëv»Ðü&Ø9‘7v‚oìxÓÔƒ¨w`hý -ÙX³ûØŽùø4ò¾ði~ªOÑQþ· ™¶lï8!Núø4J’{'ÿ¦Õùa1ºð`CÈÌ׺P9©'Á/w¼c@ 0 ÿhI~ß‚ÜûQ§\ǘ~ŽÑ^ÜðÿØò¯Ïûñò¿Ø@œJ¬2Žø¼Ez====?ÌÑìàswÚÿÜ…¿^é|*?WÿúוtÛùÌx‚Ÿ§¬±±?µÑ€¾°Ö®ƒ;=v k=ÿ§®Õ'ò+ê<­·iaLžÛßņ"éS�dŽ�»¼×$uâ��$_ËÀCg\'ü´ã"r§Aâ“:S0e3¥«}îc›ëæþ™6ÆÎôF—õæ[Ø>[º1¿ º1l¿16`'û[g;ø˜ ë”nÊí¾õ¦ì§tS}ø0º¾ða~Š_º#œ#øgé�"0<ó_BSêv°\.Ø™7 (Im$±,”E€áÍÿð, ñ 0¶â•1ÄdÝMÝZg =±Ðx¹Ãï»ÿ$ÿñöFs·éÇÈŒõ®Ë{zzz~·Ä#¼P�è®ûBwàoî~ü¸Zþã?ÿûÿÔ€:§ñ””CÕ’MëÓB‚Þ;p¯þéMwúö€v€µ/'øžò?¥£szl€¸b) ]|€„�¹“M’—KNþ©‡�™6F– rüe™ØfGí½¡%C×’·döc\ÛÀôï¹�ëš6ƧéF–åæ_ó»Ð8—ü›çä9¼±ëHôšPÿ\‡hë5|¢_ÏòÑž¶ß·‹ÐJ–|Þ› „ÏMØeºYŸv•{%l÷jæ^ÍP|Έýrqb£ýM²ŸLÏõë}õ9á�ÈhT%ñ‡ÍiÑS²Ð›Râ1oÿg �}O˜½H•„ç8ÊõãxHN²Ž±Æ6�ŸÇØ@9»¸>Uëd�@�@�@�À;D@çìÇÓöfÜðiNœë–. }Ì?G¯ë‘ø€Þú¯;ðKžùgÛÿRwþÿûåÕÿï?HÆ“ëº?5ŸLƒlékYÍgS:ÛÍÙÌéÃ�ï¾/ô½’»{];0þ{%û¼‘ð8 2�L�„Žk 20�gÚ�ç"60p°½ycû6_ãçêçêÕíŒñ¹ß-Ú²1Œ_tu“×væËo~2�Þ<¸¦Åû]èüHˆ€X Òw2‡ÇŽø°£� Z!ͲL§j;‘ïUw§Î½—Q_x¯ÈÿZírŽ0d<ÿ|lr};ÈJü¯õBÛgggß$û*Ý© KëgªtªÕ‡ÀÁK'Ç0 ÌŸr0j>eÞtÆÐ†ì Ùïzo‰ý÷ڬu™7�±i|A›7m\ëá;ôôôô|€lÄYôç3{Z çaúûØr¯‹^~7ÛË7XÐóö?´íÿRÉÿ•žÁçÅKmÉ_Åó÷ÛSÝ­û\óyH-]-«ù¹ú‡Ôg_$y\�ñÌÁB^7º¥p¡k�Sáa’Á3•S•Š.ÐNe¢œ€%‹K“|}í"›òÝË‘Aƒ3´dY¿M_¦¾�¯9ÛÜN‹¶¬…³ z®£lŸe™7ÝÂú �àƒYŠ"šcc IþU.%û!|¥r­²¿R?X1£;†L·d-½íZ8Ûgºe;%{IÝ)¿ï®ë ïþ|¾h¢níÈÿ$Ð5Ï@ó9›8ײ ÄÿVÉþ¥ÊÑçÚ p&ZÓÿÃRåB'‹/QŽ�¿¨bÐê~>ÕŒŒ¡ëÆ�?¹^C=+rýYÃä¢vYë2oÚ8×Eæ‚<Ó-Y‡����.(´¡=î°óŒ½J¹Û~Ç3÷¡›ïjkz˜¯e‹¹õPwü¯ÖWW”k-Üè= >Á§;ÿë²Há>Û;xWY˶U·e‡,ÃX=ÛÌém·…UI>ZéZl!LBçë/ü݉¹�œE€sÙ6¯¤}sÅ–<Ö×;ðª÷òbJl°Í È2O‡ì_䇄ü#´hËZY–›oab“噇nñ–ƒõ>)EÏ~’yމ86tL–îJ…€K•kÑ·*KÙ Ýù<´'Š^êó¥õ_ÐõÃWí ‡�éoáqb ÿƒ@S8™ÞH$ã�:‚;”ô_«°pª6NT8I°ð7=@ùøädý“"OJ-Á±MÆ–ƒ§À>mS󖜘º?-²)¹õ-›Úç{zzzÞ5›»þëõJÏ×S–z¦}X¼žq÷ûåÆ;9—À§šº©°ÏÔ°±åý×בø³õÿîúúF/ß[èe|+=—Ï5 ¹�ý»ÕšŸ’×¶5OÝ–Ì>�çlæôöSc¶n³Cc¥dn¡d›»þ‘› ƒ;1_XÃM0w„¹�ãÄ3_‹€ÇJ8”žNæ"?è È2o{û¶Ý!1¾iç�ý´hËZ™ }1]cb”e5oòZgY —Ÿ-:$üKñîðóO»Ð1ÂN‘+Ñ,Pn8n„ùneì ßϺü0ÕΔî-úöâ6úÀ‹Cøû:`€ÑkB­ƒ€<ÿs@ÛÈróÔÕ¢ÿzuww;äöT‹¸¿SAƪῩü7•×ÀZ…Xy¾ÀÁg‚ ä¤E[ÖÂÈ긳ŒxŒñèr±]–Õ4¿[.ú�½€»ú7ÒQ¸Ë£ÄÿV…ëw0;Fб[@¨ù ñ³�!ÔÐ’Õ6æ÷±u�O‹ûÀ§ýé>TÇ}Þ¨;e9çcè|^x&oÍýwJúÙÀ|ÁKÖzÀJ 7Za¸ÖåÁ¬Ž�W2Z¯UAo <}89ù¢]ké_u>*ï‰Î˜~ší±` ×t‹“!KàG«!ËL׸U›º´ìjYç{zzzÞ1šäã¹ÝPòŸØSb}£D{³Õ^‰÷½ó4±m:�Ø·ëà¡®§>ªO¼ýyy¹ÔÝÿ¥èk½ÐòYËjžw‘µl¨ Lé6ó6»ø ‘¿S·Ô5DZVf¸ w€•LD¨ ¸¥è• ‰!YÏþŸªÎ…øá%qtÊ×:Ò4I¾y:Ô*‡MY€€Ý)aXþÐv=à–,×Ù•ÆPûßH·ÿf›mY #kZ@N³>ó™¶ ²ºØO-/¿-ö±À1Q’ûk’~îúƒuŒ�ü“ôSØ çfâXaë îw�]ívñ…Ísü=§Î®ýy»¾ð.aÿeå¤õO‚ÌçVŸ‡ h¡ÿþüüœd?&zÑäø -\Ëè«Nò?›“ÇúN3É¿N:<_ö7-è|òùÁÁÉ%�Ì�3κ�L�uŸ³]¦[vè]j½ù9½í:îèèèxŸè<ïЖ>±Ç]õxþ>±w¹ü믫õ÷ï\̧ûZ2M°ÍG&mõžUä wzùß�îÔÏ;-ÜiÑâN›ÜÉ�€ÚÏߪӒÕ~°Æäí¼~ö¶¨^Òp¤.’ÿx@Ì™ÿs0 wçÒ ³`À Ïu�C½Ø€#®c$ßÂ\Hc‘Mðõ’m1‚ƧuÈÞæ~úVÛdÞt gô.…øØÎ48ÓÖÌïÕ(ÞÀÖþ¸ã¯ßù§ÿŸº ¿Ôµ;;xé�°õŸ…!ù$Ð…Cþ>÷µ?t_Ý__xõÿ– ð�“ çeøŒ Ì ÓÂÿêBŸg»¼¼äÎÿRåìôô”ž«Ò×¥à•üë»nǧÚþÿ•÷ˆ^ÊP8Æág‚Púí‰Ë:d™6ÐÆ5ÝâÇdÈßø [`y�m‹|ª`g½ëtÜ#Ð#Ð#Ð#ðA"À%Ðz >±ÇÀšOìýùçåòÿø¹üÿïj¶§O“zOCUÍ“Od{,þGåäàóÌ KÝù?Ó³ÿÇÚ rÏç´ùÌ~§|¾­.º4Þ¤ú®h<Äà"‰w- œiëÁ!//^Ô£ƒ*èS­³Sô¾]-”ÖBIØà=…6ÛSbïÐÀB lÿæûï¼ýŸÝœäå p¡�µ½3Þ`~¸pëŽ|±XÓÔ±NíD‡ÁØtÜrÓYžeÈ�,ËôF»ýýÔú)�õ-Ú²)L,¬7�1É<|]$gÁÆ_q¸×ïHa÷‡é{’}ññ‰?Ѽ±“çüÙêïýáÞÍ×Xªä†1}ÖÕö-]mSûÈuv¡[þ¦dÖµ0íÕ;Ë\Çèç›8€Eùßôà‡ÄßI¿°' Z«i÷Àõ\]’úH€á3]Ž Žïû|O<õãe�ip¦é{ð7‰=4‹§èX8?²6ï€Þv�@�@�ÀG‰€|eû븿^ß)á‡Ö¾ö æíü;tÕ§èL“IY8ÐÀJŸÕ»Ôçõ.õfýk¸¿¾^®õXàñ&ù·ãä$È–¼–e>Ó8¨ù–¬¶yo>>ÒwëZãÈ:ÓõX,ö÷eÉ–�ž‰à3p<ÎöÿHü¹R‘!�l~q&¬õ�X`q€/�� ‹Ä�˜8¡ '¡‡Ày!ÀvNú±á`¶ðÆ™¶ d¼åÐú)¨ím[Ë3m¾¦©oÙf¼èŒ3mÙ9´Kæ¡UHöùMYØYë7ß³P =ñ™?áØñ¡:49îºm²}¦Ñ·øZ–íZ:·“í²lJn»–ß–Ìöcç2'oÙå:/¦ûÀ‹CØìäúü¹CµOjR’{’~ &'ü`ä£Ë‡iãpPþ 2'½%ñÝJ€Ñ5’ÿ°ÉÎÞ€ÞŒ~¼¡¬oÑ“2�Ý;2Zã箿^#¡Uà‰KŽÛx·º¦G G Gà·ˆ€æ¥ÿå|ëõ’d<¶âßÝ­gÝu-?ó;ò©ü‰3ÚÓÀ5ÏýÇ›ÿy€vp÷Ÿï«‚ë×>jù¡yÚ›ò9¥›«»‹¾e3&›’£ËP÷;ëv¡sýáòD‰$? #w‚I¹«påÃñôMåB™>_ø"˜Ï9cvª?§Ù±dÅGÐ$õæ[x,éÇþ¡)¦E´eÆè -:ä€û³áåæ3vd™ÎýÇïζ\¹ë"ênZζ™®uS|]¯¶mékxC¶‡Î|ËÆ²®ëÚŸå™·¬åç`²¾p°PvGUòÁ�•"4L á'ñè¶îö+¡�;ß ;Îò!ùgÁà!ŸÑæhë�é¶ipÄ«,°à‘‹·ýæQ€² ÀcŸwŒAoºG G Gà£D@çR¶ù¯yŸž¿_h`Á y”€/ô†{h]ÓÏ@c>ÖœãÓõXåA¯—èñF}^üw»RYÿüy«� Þ´¯€œD u’Ó]dÙ&Ó¸™ãçlæê¿T?×>zCÝ–åÆszÛ=¾õƒq—x©‡/D..%Ï’°%œ=±À.€o*Ê�î˕ɩŒÙ 0ü(vjœ;Vê ×K4ÄÁbŒ>—èH±AŽOë[´e5Vµ¡Ô¯û9¨m2_ÓæÁ5mÙö?P #£ó1,;ØÒObÏ®ŽØæO²¯·üóI¿kÉoÄ_‹¿á¥üþ²g îšZj‚‡†2Ós¼ý×vöa<¦Žœ:†ìß²ÎvÐæMï‚[~_$ë / _¯Üˆ€ä|nDf¾E#l³á>ëßœü—¤?’œ�zAÀ‹ טÄ$ò%é�»ýÐ$Ái! ¶º‹ö”7ÿ û4Y×1Îtø,1`|$úǾÓï»þ–6ÄCõÞ6ûD Ûöôô¼axŽtóß³ç»ö·úÌÝ�îÈGÑóø¼hw|zÞØ�'ÿÛvÅ+�hËÿB/ÿ[¾¼ä�˽X›�ÉM\Ï8÷gY¶£ñ™uSmd»1ºå/ÛÚ-Û—oµcßsºlw0ZI_|&PIà¢$ã\ùÄcJ¢o5ÿ¡ùmïeÏÿKÆ£1þ:t®ž·Í—60lεò_@IDATÐQÐHp-7FG[ð@¦3o¹q{h×·¼…©Û‚,oÑÈ,oÑ–µ0cFžqMÃSâǨ02~O¶üs·Ÿäÿº$û×zÁwüo‹œÅV Yà17%/MÈ]¶² S|Ö�Ñö5¦ßWnà\7ËkzÌÎrp]j:M—â‰æù‚¾ðüØõšóðAíó#|‹¶§¬·Ì݇.îüëÿ5'ù™ö@,£ÞP·(›¼“y’Y%¾±@ m¾ØÄ�ÿ’(¿õ€Çg<öãYnŒý�>ùƒáN¿“=û?lùgÀ‰Áï Ǥã���w�ù?;t^[î¹ë~«gñ¯U®ÖýuµúÉ˼gáñ”ý4ùÔe7ÉŽG”쯔ôß©ýÕúúz¥…€;-FðÀœD´|Õ²}øl›éÜÓZžù1šúY×â[²¹:µ¾åcL†| Z~Çlk¹/S¹~°X`åHŽý‰¸…’�sŠôSY©"É?ŸÔÅK<ÿÏã±`ªC4ˆ>'÷îDÆè9x�¹ä:ø°|Œ–I´…�mŒÑ�°5d¹eg}‹Ffy‹¶l 3~t×´ä%áÄÇ ÿ„ÙòOrÏ�þ+ý¶—×¥ˆga€g…ËŽGøÇÅÍênZnœm‘MñY· í6…s›c>±©íÌ[×Âø«åcm¼HÞ^¾^¹Š­Ï5]ó¶«\Ä�?¦«m?$ï΃ƒöB¸Èœø� ûÀÆ|Ði îü“ø+ù�€œüoŒU9×FøºÀ=SzëÀctøÖ˜¼ ŠÁ)‰¿âpvq;¼vÅþ­c1‡®ëèèxÏèëw¬”„/u÷ÿ–çð×þyyûÏþ\ýù§®ógÁ§j é”ä�ºG—|ðA k=n°Ö.‚¾[.×z< 'íú�¾ j›ÌïBgoÙÞò,£çúqý.>ÜgãÜ_Ë^ŠŸøÔÆ×,l_ëÊdÉÕ E²SE©tÕâ;ÿñ.%çñ™À±«ä¹äŽ» ¾;DBk{'þYæ:ØÏÑn˶Ɩgìö³¬¦k›Ì›Î¸¦[òµÙ çÿµ ÿæîÇ�«Õ¿þuyûŸÿùcñŸÿ©ëüxœ—‡Ó³jŒÑv¶¥çK„ñ ‚Å+)²G_¹~^Â纙nõϲÜf®“élãz¯­oµ9ֶ密Iu‡ø^ ëK}a’ýÀ’ó@4ƒ�©|U‰÷û}Ñ¿¨Pz m�Ýd ×c«> 2x~�l“y©½åÆè È uû–gœí-ϲ�ÌòmY 3fä×4|.UâÏèOþ­´j³ÐïÊ3þWWzóÿÏ££ïÿutô—êSMß Ý4Up|:°tAè ä.g¥åµÌâ.>tŸïúƒyüaàË¢@Ä¢r×Ù�����×6I/xó,>³Ìƒæ^˜†¬îêAm°/Ïsÿzáß�î¾ß”Ïïñ2¾…Xh!`q÷“/|mÁX,7¦Ò]ëÜ@¶oÙJŸýdºÕ¦ûVë\ÏØv™ÏtK_û<ßòá¶ß Ǹ7W<ºÚnõX ä©*¶’ßèK_•„\k1À»ø9:o‘dú?ËæXÉè ¸Èâà¢! 2`ä‚Ü4S/Ë3o›]06ÔݲýmØ…vL·0ñÎrxä¦ æ-ÿ$ù‘ÀsµúŸõ¦Ç0 Þíà… óÜ7`»lù/Ûþ±‰ÂAY$hõ¡Ëzzz>D¸Ã­ øz^{àu­mÌvø Ï5ú:³ùt9È^J¬õ¹¿õÕÕO%ü—zöþZå¶|`ųùòŸÛÌtn:Ëw¡©›íÞšwÛÆ­ö‘Ù¦æ³.ÓµÝ{ð´i¨ûfùká|CÛ[¼*oç­ò$—ì�…cn¡?ìk$?Ñò~`¾(_ÀéT¡ÁXE(v-™‹È�FìŠ7ÖÛ©;ô¬kÑ–�kºÅûÕöÆÈgJþÌ¿Kl÷/8Þå dÿ‡²|V¯XP‰Ïüa“º'òÉO‚¬î^ƶ›’e›·¢ÝN ç¾Bï ®WÛÛ‡q­?8ßÒîð—�@NüM s—ŸÄÿLk¦”ó —{MgkMm�¡)È•´æÿúzò©cj½å5où[áÜw·Ù’Y—±íŒCÇ@IêIøcÀI¾0ÏúǶÅÏwÿ‡‚ì¼Ó===0:g?~‚O/á‹OñÝÝ­ôÜûŠ—ò)MÒµöl�"·4SÌãý'VÚ°Ò3ÿWºë­…€ÞÂÏ‹øôò½ú üÔk?Ëw¡[¾ÆêÍÙî«k'Ëñ Ô²Ì�Ñu½lWëÁ·|ŒÉ�¿0æ|Iâ„L )�Ä–rí¸Ub%…íYuâ�ì¸PÅ\øAØÉ= >Eõã‡Bî‚§y!À4r‘]ˬ«1vøoA­³³Ü_¦3®éš'ÁGæ’yè©¢kOîöÇ‚Œh¿Ì�úÅKýô;ñ9ÇËRø$H¼é½üæ¦Ü¼»§–‡.e]ÖcdýF²ùk¹e->ëMãoª¿no »Ï/õ3ÕÆ³u}àÙ¡ëˤ„?ÆŸøc�Fc@ïK½hîLß)q]é®5‹+& äJdƒ ê”n¤Ê›‰[g¶ºñlcÚ¸¶…�-ÿNø‰� É¿“~ÅÏ´ b å°Ëzzz>Ptþ{à;÷ñ~=¯d|/âÓÛø¹ ÏB@ÕÝ©Sæ£éDÂ?ÙF‰¾n”üßj»ÿ ôýÕÕâA o²Ïmfzp•l²~Œ¦^ÖÍñûØÎùÊúì7ÓÙ˜Òg]¦ëzSºÚv~W쀺ý�ô0[—'n/ë�+ÑŒ;ËJ"y«¼fóسDZÉ¿2ÿ1ßdü�GÀ*Ô�| $€nñÈh¸^°­;®‹DƒÌt�]yä´‘¡æ­³Ü¹éŒkÞ2ÿƒÂgÚ<²\âfÓ¶Ì $ÿÜÙç~þœŸ1»4®yùŸx/d�w@îRæÝÍZf{cô€yã�tó™¡Ö׺l÷\šzµßº]û®±írýÚ_®cûlS×Íö£ûÀÁBÙý6HIÿðœ¦dñ€ïúkà‹ÖN)_õê0ÛþIþOµS`UÞ ÀÝmàý†±ÉeL?gïz¯�{½í=Ë3½mõx†µM`îþ»”dÿ8'û¦‰›„û€:º�ïèø°àÃΛGVz_Ÿ½»¥èü [ñ…u­ý:¿ù4ù(ܦÆõ#uyû>m)ñ_*ñç€Kµ»\³@/”ûì3Ó¹eË�Ñ�ѵ®æs½}tµ-<�ýíKOÕ®.÷¡öÌÙÌé7^žú±üиîO¾$A·Å+!åŽóJ÷B zèį¿nž7_ˆ¾Õ"ÀªÇØ]qÎÁ¦º<.0ÜõÏwÿ%G'ÿ`É2ø±"Õ 3ml?ଫåðe [ª,3ÝÂYí‚3’{xãÍ?1zãLK JæYmdà†dŸD_‹3$ûlù�gþ%,9‹+µ…ËÜÓ`ƒeæ3¶Î8ë -jºæÇìö‘c;æ×~Z˜:¹Þ¾6­º-YËï³d}àYaë•~û�°» Ñù€ ’%þß(úp ˜€Å—/G§ØRW<2¸ƒ¯ 5ÉT&ïÊ>íñ|w\Ç8ר’i€øœPHøë"ùp×?ÓÔëÐ#Ð#Ð#ðÁ#@öoà_¯ÙrÏ]îÀ_k;þ•^Àw-Z7ݶ`ëiÍÌÂ@³ŽVKC®€{½üo¥®´ýŸ÷¬ô%€•>È£Î+ÜTËW–íK·üîâƒzÙ®Åײl¿/=åkJ7ÖN]Èö‡àÃiúSûOª½É©‰ÖíØ¦æã%‘£ë ‹;ÿ$šºã!üM²¥*qr«äDåTº/ê¥ÈM œü[ÎÉ?�׋t¬U¨›åækì�!7´dÖ�Ë2oº…‘e¹ycRÓ–��ø·0 JæÙ‘Á]}û�t®”øS.¹ë/º¡h@W·ñr@/0$w d~ŒÞXnþ¶lZzËÜN‹ÏºçÐcuÜVÆØºdùí:¹-×iɬ;(î  gwöKG€$Ý%´ÈØàGÎË€¯JþÿV wúIüc¢P¢ê÷°À;Z“H–eš.Ô|îÖkÒSg¨¬£é›uƹ¿±€ÄÞwøµ/ý+Øz6 ƾ/ä0vºG GàãF Þ ­ÿwñ6þ››[Ý…¿^þùçÕ�>÷úþýºêzëT‰ÉSyûŽÿ»}oO‹ë¸¹¯µq§²>Ð@ÝæŸuc´C’õ­Lé­3®ëgùsuÙG¦k¯Áã¨ÛÝHó·öݺÁ&˃WRJÂy¬oÉ“ÍÇnî*+Á�ýéîÿµ2K?Â3ÿRÅ;”‡­q⤠Ë?¶€�ªKKn™1uð�e]Ýä5Ô6æ§0:ü™6ÎÉ>²ÌCçÄ¿AÇöŽß@%>ó§Äÿ§¾ÿùC¿Ñ:Õc‡@àD»)w ÔüFúø7ëM?j7”åÆÖïÂgÛçÒÔ£­¸cúºŽík¹ù¬Ï>3mÛƒâ¾pÐpvg¿M¼`L_xùïð€¿ÝÜý¡ÂÝþ¸ó¯$5îü+™ÕÌx$ ä)xõ“TïN¾ô¬Ôªo8Æî„¾,Ä ÿHþ/.¢„œìt_x÷ã£w G G`>ZôÝìà¥<ó¯çï—ºó¿ü׿~.ÿÏÿùqû÷¿ësÛ[àÓä£ði¢ÿÔæé…ì£ _"ÐGXÐ==ðƒð½’úæ |·÷Xo#ã³<ÓÔšâ³nŒžó1§oùmÉj?Ù¦ÖÕ|¶£ë:¯Áã3CîK–ïK·.O²ï¬G¾Å+�DoŸçγurõ%óÇÐzà‹ 8öئrªÊ¼ð«0 |"3xÞ "lÓZ@G‡v)8ð½é–?¶± žvj¨eæ§0º\ðiÞÿ c˜„Ÿ‚Þt…Y ¹ç®¾nU]kÕñ’äÿçÑÑ_?D«.'âÎ3AA[–º"2À]«yËÁ5d�é1›,¯}™¯}XNÝ]èÚÎmÖ~-¯±íŒ­Ïm[–ñœ>Û„î  cw2�ÖyqÄô“ˆ¹ƒÏ)°Æ’�)é§p÷?à1€Rx€¿p'}¼  Jþë`Õ©õ5�}KVûy ?w†Êú1šö­3nÊÊ"�pwß�°СG G Gà¹Ðy‡Oðq××WIÅãL4È´º˜OMÏmf²ž>ÁÏþë®;oÞ_h+þBÛÿoÖß¿ß,þë¿n–ÿ÷ÿæu^ÊÓ·—úÈõ÷¥§Úó5U�ëÖ|ÖÍÑcúÚgÍ�Õ“×õwáwµiÙ!{)ä±´.9¬·î O"©rLFŸ ìµõ|©Œÿ\IýW•/â¿ÉæFÉü­‰=ZózLâ¯JÔ‹Rä¬(Ä?°®ÔbuÁXú0da`¨4BK6ÆØ×t òÌ×4mg0?…Ñe½ùŒYM+Æ’±ØÂ@ÐJø±CÆö]�n¶ÿ³@Áe@·«Ž®µp­![]�8äûêr×Mã+ƒå[?%ýÁ¶ð»Ðµ]Ë�e-œÛhé‘ÙÆxÊnLw0y¿’>X(»£Ÿ+eºÅ§j›äÞôB¸ðÈÿ([ýã¥,ðB@ÉÏdëjO:yªƒ’–é÷Žg¬1¨u™Ÿ£ÑÛ̘3Ÿé±ö»¼G G G`çlî¾ß qû;n�ëÞÖZü½îˆoðÎΞgÈ[ÿ•ð_Þ]__êE|×¼üO/\êyü;^Î'¯>õÑ@¦ß›ŸêKÖ�Ñsýw=cì�)~JW×µ­ñ˜~J^ë2¿‹ßl äz-¾%Û¥õ^ êöó%‹u–íÂó•€{îJ Ç–tíÿ¿¦k&_FñÀ© /<¥HÇãz`ðè[ ¹Ær¡¦�‘íRd6\ÄÚ>Ë tcà�g½e-œeÐcEc’þÚwíu%�U&ÆðŠoúÿ®äÿRøJÅ%‘: 7ÿë¥{ñÒ?´°ÐË÷–z&Ÿþp=ïzƹ~-;$¿�¯l» Ͳ]ÍgÝ=UgWݘï–<Ëjÿ5Ÿmw¡©dÛCðá´ü©}gÝKè|¹b?n+ë�íÊc úŒ·Ò+9½Ðu�ð€[Ñy9à…0òó‚/�)qåëT˜Ç âz«^ °œQàM×XªA×¢‘¨; ,ƒùŒ3�-¼‹OæÁÈ\»i0¼lb‹¿øE2VÀÁ+Ùgà§bÌKÿ®…o‰»dñÆ� ý}ìÆMwj]æs·7–›¿Y^Ócv–g{dæk}æÇìlÓÒ[gÿÆ– ã÷M¡/¼i¸»Æ|>eà™þ”�ð[þIìÏ”ä³Õ?¶ü‹¦Ä€0;X8cá@#æ¿»žlÄ.�©'—šÇÏkÂØ™©%Ÿ’Yv¡ß¦­÷X,7ÿÿÙ{³æHv$K“±Ç]òfV.µt÷ˆŒŒÌ[?öӼ͟˜¿?RÒ=•’UY¹Ü`w2æ|p?‡JÀÒÉX®C®ªGÀ@w S v ‡8ŒÀa:ºÓϳï×$ÿJÄÏÙ„OÏá_pW¾ñ—:¡¯)÷xd@í\*ñ?½>>fÇÿS­8ÓclȧɈíõ{ëD=-VlJžÒÍÅJßä«_ê’ÿÒíÜWÓûöwä7Š‹=%õû�{1À£Ô¾Ó†/M¬[#7[}�äómà)Õ÷b´ÀÛ�?u÷å{—)nǺ%rÚ¶G”ˆ¶�é˜Ð3éÏHFUYsN«äõM °�॒z’Vð({|$‰'ÙçGE¦3È®à4Ž ¥ÚGìKË[¶+§ÞaÜ2tŠGGŸl—²Æ¢é ½*?� ?cwê*ù”Ê]*É?{ˆ¶GäKÈlVâNžâ«™’±züÆjó9¥O]�ëÕÆv©ïñ¶³¿m’Zgšº5¼ýMí‹L©øÝãça`�ƒyuk|>5XÏ›–­ÿ²©&ༀ €WJúÙå¿U=ûÿ†*¼U%ým‚;Vð€Ž.«Çtêà?÷@ùl”}œÃ–è}v3u|˦àð‡r�ÃF`# óÉf~Ý…×À¹ž»?e9¾îÄŸ\i'~%æÊ;ú…Mûš;hßn믕×Jø/Yö¯ €K­à‘ö¸Ôä@^|ß , ÆNyÄ;NêÁR~¿4Ö¾íÒçžo«}ž“÷c®�ž~„�ï»ä1;/U¬3Ö“{:ìž)1m¯¥ãšI…çÕY¶Î#'Jä?(ùg€äÿZ•Íy‹À+|ƒ�ø[•Ú�¯Åè<:óPËðTŠù”7šÍ§ñÄÌûà«lÚãé‡u=ž“DV�É-Y:6þc6±ÝñgüTß çŽÿ{ÉŒ«ž;:ºÐ€®lÛ#^àæyוß;û[—¾©«oî9ìÓ†k¡Ižùo+¸Û¯Så[%þßiÏÔ·ª¯Iü•ì“ôC‘Û€ø©r¢ö`ðŸŽyŽÞ%ycIçôiû|ïÌÔÃhÛx¥½~ac»ÔéÓöÀFà0‡˜ÖT²€çýYö¯„Ÿäÿúïù׿¾¿<>æ5å½âÓQO§ùääÀ-_m{sÍrÝñ×D@£Zyp¥•¹à–Oi4uKxÜӮʩ[ËOÅšÒ�Ú¹�Ï(Ö|‰mí[•{1«ö=¹‡Ý'q(ÕwƒÞÿ³wâ6RW1dë“ßõD×Iܵ¾T2Jiûè­$¦gJü¹ÃÿJòÕ Œd6ÿ¿ÔuÕµêGñm=‰3•Æ\уÕäßt»ã+†ÎÅe9)íf±œ´òÈ®î¿)8<×”JÞwI¿ySÆRUW¢m…dŸçüYêÏsÿTVèj¶=&Àª‹ö¸€ì˜4�j×±wøŠUÙݯ»,U_eÛ&–2¼KâÆ ÕÆºÄ�ÙÞ±¯¼mFql?§·Ý“ÑÃÀ“ õ¡!�€Ï‘¦_Õ °‘úµÍý˜`Ù¿ê÷Jþ¿ÓÛSIúyÞÿ•©xd*ÿÑdýGRfNþ°žÕ,OQt£Ê1§îK8ÆC#p�ogxñŸ÷Ð÷‹žÅÿùçJþÏþô§Ÿ/þó?ó|>pŸÒ,›Žpý�×�ØØß° áõ�V ðæm;xÕªR� Ý\ã»�Ív—ðÄH»*§®Ç÷°cN~hŒ%þs6sú<†´Mž’úµ|õïÉ=,ÛééGø¾JíC^ªX7ÂRßã?*1%û¼!!U²~Î>º~âù~苤æÝ€šx.ÝkÙ¼Q2ó½(·’OÐPV:‡­) 5²©;Í*qx!kl²ø �YvÀ{<ýQ'úÐÊoå¶  Æ²­Ð¸2À�ÿw:Áý]”ÇØs�Ç+˜xqmò¶i‘n÷–à>¬)JÊ” :JÚTÙºf¸ý0VýÓ×öik{ë’NÙ¥.}¦øûøLÅ[¬;L,ªƒáÄäù±Çã::7N„]¦âÙüÙÂbSe&mä#¯yΟLðú?M¼’ 3Ëü¨’Âó‹k ©Z©=œ“7NÕjl@ŒÔ-Ïj_å[Æ{ôbî#ªËS´é¶ô0‡xØè÷ÚÿÉΜc£Õ¾<”e@[À#çZsrr¦»þ'ùËû³û·ãó?þ‘÷_g©}ªrÚÂ÷ôKÙ¼é(F¶3²὘=ÛV}mcê~MÉ©ñµ�*÷üzØÈo¶5v•—´Q}C&f–ìWâkùOÿ9òÌØÖ³Œ5˜åOòßž� [|í÷üt9¥É�Wšx¥•o5 ðI®®µ˜0¸¡Ü0%ˆ ÁÜ�¤\§Y»»Á>ªû²ë”Ô­ì[¹¶r;#" ~§ëMÓ1·ÄßI5>Œ£^qÒ^éÇžõç9ÿ÷Jþ�ßm^ÿç•NÙzÞ“ç°ÔÃ[&ÅØˆn¬>}öìj[÷lÁ²¤\ù”Ó]ÖªÉöY£Ÿóź~˜¸×°œVŽ€Ï‰>Úݸ夷tm3½ëëgœÊž)ñ~öêÕIù3æ„UùÕpªÎä1ù <âŸiîÓ‰~‹½•Á¹óÿVwùß(ÑçÎÛP}¡_m™¿‚òGMöÁ8S@�ÊlStíàý_ÔüKýd©,zãØSgÿ'¤mÜ£=Ës”~ëYÚæ m ÿöXø›¾Ðß·Uë ë3*>ÑÖ�=ŒÀa¾ÀÐ�mõê†]öt?©UŠÌÝ÷©Ò¿k>å±ZÇnÿZòÿNÏÜ¿×Ýÿ“�gglÈf€¼Ð××·ö¹ÊS¶èª}ÊKø©øKüÓfª?i7ǧ~*fե߈¿��c™.‰±Æ¶Æ«òÚXÕ¿'÷°l§§£T» úðÏ·þ·l½ñ)]ÚÁ§}O¯“HË{ÏEYÂþAWB¯åÈ-–>xà�¢`MÏ&¯Ë¸v Œ¥;mÕ�àðÄܺ˜ßHi�ƒ‚Ñyó¦ÂaÛÝ÷-½QŒk�ÆÚ‰’ãÀ°Ý6Ñ¿5Îd€ŽóƒêÏ’�UOT¹ãÏ&¸1 „¥¬¡=[°Ä{²Û±nŽbO©vô6n¬goÿÔU>eÛ›¢ëë+­¶Öƒ›‡º³ ía©ß ˜ØË0‚”à\˜µÏ�6­²ñ»¶<ý¥dû¹’íçP'ƒü7 d‘„‘ò†DrË[n“$–sE§Zîð·J;ÛÊ3ÿðPžóg³?vüç€íu€èäËÿ þß�ÿTüKò9 æït‹$—þ–ºÃHü]u¬�9 �g(úy_Ù~·èö8=�ÓŽ—ãÎß÷‰¿*|«Ò5[ÆåP#p�/ynôlýµ&®´´]ëÚ7T‰5¯·ó© { :×Mê»NwÁɼêïæýû÷Ú|ïÃËÿµ›ñi?€|þ>£ÖxU^c[}-›:ÖœŒ]Ú,á«OÊKü—ØdÌûð÷ñq¿L—ĸ¯m�]å%q§|ÐQ2NOîaÕ›Ç.µMÿ'm|JF‡]ÚT¾êŸëÊ�~¥Ýñ/uõ@ÒOÒL"½ËmÜA¨”͕ƦQ®Û°‘o»º€G/òJöZ\Ð&ˆ§'ôDçÖ  4ycÐl³ò[µšmÉ8ù:Iy£²½RÌ+|0°¯©1(¦Éƒ©’ð“ü¿e ½ �øÃ}O¨Å;]­2Ň²„n<îúÌá==˜Û¬z˕ھÒjg9íŒAÁ³ØÎX•�?ÝýH­…Cà_Òä¹0�ÛçGcUN¼«{¡Äÿ…’nî?'$Yï’äÿF8•I(ɱž²¼µœÜ UÚ:NLîêÓÖ¶=ó/Õv[î¯ä?WìvùgAAkmq…÷(}0OÙ%úôŸÿŽD¶=ž–ð븵 ví¿®MŒÏñ™g¶o¬Qõ•cj»íßž»ü—'žoïþûïÜ|>óq~ޱ=´y�¯jx¶ýãGî¤óNûK’mM�\_\ox.<ÇeŀΠ>µŒã}Òìlõ¼=»îŸ¨žB¯Þ¿?Ó$ÀEÛ”OOæËeg»uO9ùOÑ7\O—Xòx¤<â«Ý¦¥yߌ7#mçø‘¾×ÆÈv ^ãÙÇt¤Oü±liƒ²&þÆcìSãõì—ÚŒ|�ï“r“Åcb¼'§>mà{zcÜúÑÚѹ®Nu¥D¢ÞtàÂH¤_8»…’èˆò¶€–õB·ÁÚ¼ê3®ßàEŸ+æ[Õ7’L(=qÐV°ÚÀ1­²Ôí 8˜¬�”9»îpµz.ù\¶ìhl—¥;ÇOgp®”“WàlüÇɇ-=“=+'lâ°òj™²„¦Må‘GØn¿mÛÆMý· zóPJ•+ÖÓ7Ç•5N•k»–Ý ö�V�6´¿¨Àyî˯x•«mÊ·x}QŸ‘l?g@šgJÛ’ýmbìäÿFIä5sÀ*¬`)ÿ¢B¯Ê�~&¸ÃÿR+Hüyåü[ñìüÏòÿö6±€ÿ<æjÀˆoÉ<ÿ-m�mG3ñOÝ#$ÅuÔ¦äªc¼3¥rÜcKúu$þ-Éço*™Ä¹Mli›ôy„ã¤+‡r�ÃìoôgS»k%ü$ÿçZVÏòúFµÛý™0®Q§ŠOC›ÙÄfb@—Zþ¦<ûÏÎÔ· mÈw©Ô‚kêÚ‡”“Ï>.ÁÓ&y⤜|ÕU9m—ðÕ?å%þ¶1ÅŸ2%§n-Ÿ±×ø>–mö§òUõaÊ®ê�]2Øœl¿Ç¤Ù‡ößû¶1ð*£K]�ŸÄH`ui+”í³$Ÿdš‰�K9jWͶ9 ÉqKú9ápÝHß0±t¤]UlúÕ0&䫽�Øk°%ËŠ‹žRm À¨r3•>Ó5&,xí(Ïã»"“¨·BxÇDÆÙ>+�–ÌXœªV´ &>WÖÅüš¶ð®Ä4ߣn³Òžmb¶O >ËHgܶ–«¿õдYʧ¿ùl#ã¸�µï£ÐÃÀ£ ë/#¨.Â8÷õŠÏ‰ÖUÙ¸é(Žõ:]mV¼$a|þ¼�ÀÛÀ6‘¼V¢Ø* ¿HNëLPÛ¢0èDiÔí5Ûäÿµ–û“ü›¶ õã5•‰ÑÜÀÿÁô&Z|µ_)]ºÕ3úéä^ÇDB¼{Þ_rûï ,íàgŽoâÐ÷ªªg8÷Ù®ÉÛþ¶ |~WË:Æ–ô#›åÜÒ�Fà0ŸuX eÿ$Ù$ÿº³Î{ÞèU{J²¹6�*y¹m7�Ø÷ý:><¢ >�kàB}ºÐcš¸øxzzÅnüj´ÆJ9y÷¯‡¡K|ÄOÙU]•G1GxõOyäÓÃ{±\Fú}ãkâ­±å8lošXå«<òYc‡-%cm�»XÏfdk|ôÖ勺ƫL›`èSWyë3ÎSË+ë.HÔ‰#çöú:]ùq‡ûƒ®”ž“ sÅ„×fr~Fƒ ¥À›¶`.܉ÿQ±9`ÆjB;Ns&@­PVŸTŒ¡ÞÆânÿ™øÅà™ý÷’y ÉikCUŠclùgÈtÆ;dc:Ñ^Jw.ù\ã¥÷‹¶×)^ÈŽIÌpqx±;ÞØš6ð®Žgy)ů–ž¯mÖèðI{ǨøÈ&í§øô7ŸmØ·êl³£,§³ñ¾éa`ß#ú ‰7Hþ}ô(TÙ¸éœÞv›eùºÛÎ’üvBWÂØ’c’BYµÛ߉ÿö€0ô³¿ ÙùùÚh‰?›ýi€�ÿxîÿ�Ú­ e5B[þ/ÊôÉ•ÿ%Ìû‘Í› j´'òPŽKu÷¼?É?5m’wŒ=Ð:VSrêÌ›Òø*ƒ“ÔsŒ»»üú{¶gþµù_[ €N•„¿Mlù/e¢ƒc8”ÃF 3JÿµüÿšeÿJö/ôlýé•vØ¿|÷îýÕßþöAï½çâsªä)ã“]'‘—²o;·1Ø Pÿ]ê€Wš¸RŸ —W’·+h7c�x÷/õƖƨ¾SrêÖòµ?Uv<Ó‘>ñ´MÞÅ6¦àûà×Äx,Û©c™Ò�úƒ%õdóYñ*Oùfœ}ñÙ>—6.Æ�õäÔU{0SÇmT™«69º�ÁG%¸×JdXVD‚Ë+ÙPW úØÔ–ìW^6ħb×èCx©ª]§Û~"GÏõAÜ7ê{ 윉›2<§’œ÷(0}eÕ“ '’IþyfÿXq˜ Àw÷œ² üVßhOfœT›V5>m¢*{»Ó=ó¦à𖧨íÒ&±‡ðî_öÇñæt¶3Ù'ž¼ý–Ðô«<þ.Ž…\yc¶}4z˜x´¡ývO$ÿyМ]êùѲõ“´í¼"‹–p3 „›¤›Äðù6 æ„Kqòuâ¸Ñ̶Ýþ¿=°½óOòßvÿgó?­x¥úZm›I_X9 ðTúÑ«>`tæ¡ËI²{þ £’ø+An´9ÈóI7ègÿÌ3�É3\ë{ü}Ú³þL°óÿë×m"�C›ØŽIÃPÊa#ðEŽ€~ëm@Ïû_j€åõ§×ïÞ}¸üÏÿ<>ÿ÷?Ö3÷Üñ—…‰¾Î€õ4ÃI£bU¦]ÍPh–BÝÓc ׺'v¯¾^s÷_E×Ë·NY#yCkíØ`ÏbµO9ù¥1Òg _㦼Äß6¦k�+ýæø9ý}û¾ÆoMö5Ž“ýœÂ²�i7ò¯6÷‘·!;×ìƒuÆzrêàÓÞX�’È‚;¡=Ó•RÛJ,ÑVDÛŠQï–þƒaƒ8üÖ¾aúÐÕH{� ËôyoU¿¿›ÀGX«æMéœ3ì¤æ¥×•cÛè�eú¬\h:®Ÿ• ³s?“»‚_-`Æ{T˜®P�x­ •ö¯ØbwÝ£«Óo}�‚euŒÄöśҋ·ÑÜÖõ0ûZgj<©uKhúUc•·œT<þ|�W�7¶¿¤Èœ³¤œ|Ú,á}n}¶Û”OçÚ–lëwÑžß&¶_–dîü·»ùØ,iE6~ý;þóÜ?Ïü¿â®¿¿þ�ÄŸÌnBb+ƒqÒ¯•¶ýŸAå‘]Ŷ‚ìä¸%þNþ}÷ŸI€G.õlSål>uÉÛÌ51g›Àѱµçý·/™ðqnÿ¶ö=ÐÃFàËÝ]ÿÈîÿm-³g—ý‹¿ÿýÃùŸÿüþôþÏwWÿ;w»¦J=�Tߊ­–¹Ö%ñÆoC?¶KäO±3¦yS¼)UÞ ›ÏÔ-á{ñz~=¬úŽlª]Ê#ŸµxÆ„§8†ib#þk³­Ç1%�Ž Jê7ȧϪ«òœÿ§Hã²Ýößz„³ÎxON<6#̺F•À’øëßî2ŠëB|³JÜÅkq·6ÆÝ–}v¸®Û^éáÿçšx¡ë½×ºòz#ŒM/EÛ€¯ízŒŽ:Ë6-˜® wwèY½À.ýïµ<ê�6ø;”EqÚ Â-à®ÀJš¦@“7–tÄOù9®©cX~ JY² ð”ák©úž�}lkù>4ãWÞ²é£'ÿÀãg÷¦ƒÏ;º›'¡äésžH-ßçXjœÍiRÉ9wüÛ Wô…äÖx�JuçF·vtªSå‘N­ÏtGÿ™zÞ 0U˜`x¥»ý$ýmó?M€5âWÅ�ô7o(Åt#M|2ÔQ['“mÂ"ù-æØ»³ÈDøž ˜ß¨À*ж¹¢h{³ÂV&dúvyÙ¶þâ«Ú|¶twÇ_£–ü3 À¤ Ïmm‡�ÃF`Õpc›+Õv“»%¸ÞØd<�OóçåŒ5âsDÓfªŸi—ü}|Ò ¿¶�%1Óæ±ã»-Óµí¥ýškliƒ’>U¶Î´9l?z˜õUWå‘�ñ}ÐÚ¦/=½1Û¦<ŧ¯ã™¦Î¼)6æGÔqÒö¯+I–µ7 ˆ’¨óüÛ[@'0ú¾[€3€ìtu£%ª>ÉA;|Û¼Oö,û?V}§øïEiŒ�ûĶc‘Y+„~hq,ÇIyŽ·~Š¢ËJ;)¯áG}œŠ‘>i7ÂÓ¾Wª�åž-˜õs4ým»Ãøo|'<"s˜xÄÁýÆCû„5ïC®²ñ¤öKšúÛüÕÕ3]@>kw¿II2EY@m:Õ’àvÇ|{wùFô¥äÙ ùs÷ŸMÿ^оÐ$€ïþó[¼ó U›î¸“þQâo»Joà2©M(áç5…íM¢�ßb~íáèìaÜ”VÍC¹ã©äüRãvU}¦JAǤ@Ú7…>ã8ù¯p—Ø3 °­<Ú°[ò¯6^ð·ÚVOè8æ�Fà0+G€{“ð_°¿-Ã×f|æ5! kˉ2?àŸú0ˆîöŸjGý½^ïDÏûŸj"€Ýö/õ|}{À^ŽÄ˜ŠSukä5¶Ã{Ûšâï2‡¥~ OÜ%v±É6ÖÄÙf¼‡ð£ø=¼‡=¤íô];m3<%õKø�×§Ïô1Z±*ÛÎtNo»9Úþ‹/FÛzc)/åñŶRš5ÖÓ÷0|\ìk Þã9Qꪪ-ûgÀKeä\âÝèƒäœÕ»»üqí×’{d 'Ûmm¶4ÏþP°cáløw"ÊÛØ#Åb[Á•ÂñݧØß¾#9qó¦øšOZydWûX^Jïë7Ÿ˜Y¦l­Kûä­¯›Šñ'3­z|vå©’PÛ&ol޶8üçݘ'úè_Ñ?Qã‡f¾úÈ“Sò=0b¹ëY›‹U²Ûîì\_s²UθÙà#Éå6é$¡ä™õöܺð©çÿÝig–ýSÙ�eõ»G49P½›N}êd/É'v·/”â>l¤ñgë£úÂr&Hü¿ÓŠ…ïySÁ–ö&òŒb>iòÜáõÝwG§oßîö=à±`%@ÚÒÓžÜyùð÷hI¿&¼"ƒG3Úä +ÅlÏþ›ºù‹Žà 9ŒÀa¦G@wøyǽîK=oOòº}ÿ”Ýø�./¹x�*þI²é'ÿwí¶,÷×dÃ…6ÿ;×J€ ½z©�ö¯ÚF-wOŸÚú¤3VÛ™’S—<±ªÜê�eÓê“8:JÅR~_c?$Öœïœ>û’¶‰/áÓwŽŸÓOµ7Ò­‰¹Æ–ö(éSeëL«¹–´EWå–qz>©_Â×K–½1Û"/å{¶ÆF”~W݆ޥú>S~¥ë7žÇç2îã6)çî|Û±GªØrp~“@ã•È·B`xÕvü–EÙ‘Ÿøgª� k2'$¦TŠÇ¾‡�÷ŠmS—ØÞ¶= –¸å–úäégÊ=>�eÊÞv½S˜ýLmk9©uPJÊ=ž¯BâÍ ì©“>LxøtrZ¦½±ð‰(©yÇ@NÌrb¶Mj»Ä>ñJ~Ÿ3 @r©Ú6$iTáî[^ŽLò/ÚÓm”^¦ Þ@ÒÏ^æÛæÒùW» ³#øòŸ€éö?„&ƒÕŠ#Åt#-ûÜ­ØÞùÿNÉÿ''Gß«þ¨ºd w¦¢up}Ž�ãFæÎÿ¥0^ÑGÛY2¸exþ>¾ûOòßîöçDµâƒó¡Fà0÷�͆W7××—š8¿ÖÀÕû÷t7þD;ñ¿6=p7ÙÏŸ5¿ë[rtr‡kµÁ•Ú½Ô>Wš„¸$ùo�h€æ'òTºóéÅÙbÕ&åä1O9ùª[+g,ó¦Är©XÊûâik_±zqzبÍ5¶£‰¯‰7²ÍxáGñ{xbµÍ*§íˆÇÇ%mŒA+^eÛŽpëïC3fï¿lôÆ×òîOÏÏX¥øLaŽ™vÉÛ7í8Qñ,þsN˜¢mOu­à‘Þ Ð²t‘–ø+ˆ'L[ÒÏ �²¥íî?²ì[Šy!ž»þ´×ªâ{SJ¯�`kKõIÙ¼)±Í�¨mлV¬Ê¶KŠ %±¥üÆsìkýµg¿žÞ:(zJRûðç7oš¶ðO^O>äßtƒœô}â¨mztä£ÓáõÑ N—ÌD¨´¤{›0¶áUõ±«M&âkv¥…¦$Ÿ¤7k;= cUޱP|]kâßúzÛ%%òšÂ’|‡ð îþÿøáC«?ß™ÈþšÏc1OàyöŸDŸ‰oÈ^¬:èM.¸ï»�÷6¹çn{ΟIÅ¡únûû`Wÿvz ‡8ŒÀªh·6+ØqÿLÉ÷éå»w®þö·ãóÿ÷có™€þ)c–<çÑÛrÕoë=êO²O?´�]ÿ›|¦]Ó‹âGÿÓ~Äß=Ž»ýNßjŸº_}ª<ò›ÃS_cV9mÍ›.±ÙäßDƒ>)™rPÉû Áz¸õ‹©.*¹úÔMc-+'¨Ôöì¸( x3@7Ø’Jì¨LlË'ÎÈÆFYþæ,%J!é3ï³1ÈmªM|±­OAiÇXëƒdS±·xËйÒV(gã?žùÿ^KÿYð«÷ï�~Íÿ�¨¸�=êcHj&ÀIþáÙ�=Ú+·±m›4yüÛø“ܳ¢€äßÚ[€I�VHü7æô0‡¸ï° àõuÛ@Kñϵ ÿôêçŸ?\üǼ?û_ÿëÝåû÷,a�*ü|]>ñ·“ÿOøÆò¶¬§tYË~ƒÛ3ÿæIþÁ>•äA"Û×Ô­ìSv,Ó%m¤í?ÒÏ�ÍÈϸi�3‡Ïé3ÞÛûú­m#Û�§8†ib#~�m�1%�ââ“%íŒW¬Ê¶ƒNéÒn-ßûOÛm¡ƒ·Í~ÎÖzSúmÞ41xJê6È'Ì:S½>¥½†OW[Z¹¹œó%Ýó­L@ŽÏÇ8GiÓ6ž£M1 4~Ãîø�ÏVŸòÖt–7ËHNÜ|¥ÄI¬òKdl\ÏòC(±\ß^©1ÓÆ:0óЩÄ=ùF£ðOYO9Ú_[yâ1%£{ùkU�Ä^êÛþòí†õZ:}³Ÿ«>ß’xÙ>Ó¾ò�‡"£§&o�u_ýptô+ÅüáåÍÍw’Y~õZKõ_ÊAiæ¦à ß‚,K•Ñ©ýV µ:vÆßšß²å—îØÄ€7寗s·É]k~Y¯T}®džG^�0 o•;îüףĹ½Ò�ZI2ÏügåÙ&Øàµ*+h�2EÑõ*óÑL.°Ê€Ú… OŠëciÁKü[m‘Ìok›|¿{€ O8Ð�Fàþ×7_?ñÍ�¼QýÌôÛi¥sˆþÙtT÷ƒt·ýTKðOõìÿ™–à·ª�øÏôÀÙåÏ?Ÿ]½{—+Fí'¾„§³i÷r�™í-á«ÿZÙm˜Þ×?ýF±FxúÂSz¶=ì©m³½¹þÌé3Vò#¿´�§Œl{xÅHÛ‘ 8%mG|µkŽñ‘~S¶Õ.Bì�Í6¸<ȂΗ ÖÃnŽ¿�~ΧöÃö#Š}»¤Ó•¼ýyæÇs0*·ô[¹)¼ý±™ãÝ?ÇC¦¤ßéÚÞÚ‘œx�7Ö£‰Á/‘m׳MÝ}ù<^Ç06Em;¢é›6Æ›âÓÞü“ÒÃÀ“÷7ÑXžtÿ{¥©JîIÊ[ÕQ¾•â�©ð|Ñ4KðÌ5eýBÝò Ë«<) ûÐG¿WÌß û�t¿RœïdûšØÍ‡¨ÂoÉ­£nK•�¯¨+€qõ¡5æØÖñ?ωÏ~$©¼@‹c�®•XkC¬MrOÒ®™ƒx%][2¯dÚjð/5AÀrîøóì?‰¿“ußù§OSÅǵ”+m-» �Mâ¶OÌöz�ovt÷]…eî×Êø¯u'þZ¯'å®7Ͼ_o–ÅÑß¾«Šû³Ú|ïÃ͇ïuçÿƒž»?Õ$À¹V\¶eø›»ï½Ÿlmpd3ÂñOÝœ\mçìçôŽg:g¿Vß‹›Ø\¼´5oZ}—à÷ñéÅía£Ø_‹mí•{ÇÑÃâW}«¼¤=|²¤�ñŠUÙv¦szÛÍѩ˧‘Î8}˜ãÝþÈÖzhÚO,ù‘½ýæhÆ2oZcÏásúÚì);xcðKKõIyŽ·¾GÁ¯|Oo,)Ç‘ò>ø›%ñÒ¾ÇgŒÔ'nÞzË=j›'§‡ €'òo¢Á< =SòûBwçßhà%Ãß+þQŠüƒ¾d/¸›/™Uì<Ùxj0túU0 À/¿éÔ@k=.úøÕßIß&Ä/þ�(ºV ½ª·Ší "+V+ÐÊ#c³�´hɺc�üSÛÝý­�Ȯ桚¸d@wöõHÑ6äjKå9î—Ü4Æóò/UwTIÿNÖDÁÞôO´ÝõßÞ­g„z´Y�Ř�s ŧû�›‡ºKÙü�Fà›–ß“ü_]]¶Mø.//5p©Wñ]êyx=Ã$ýí’?™Ûš‘43iÐvügÓ¿÷ïOØõÿJ+>ž�]´ÍÿX‚ÿé”@ £ö�›VÛÄ«î©åì‹ySúBI9ùª›“íkŠ=%åûÞ$6@IDATòKüöÕÖ(Î’>ôlzX¶1§OÛäïëG Jú§œø?§Ï¸ð”‘Ï”.}Z�ÇX�Ñ“§lSw_Þ}õePÆAgü¾üÈÏí¤¾b©ëñ¾L‚&o[Sâöxcé›¶U�nÎ6ý“'Ç·¼”:–í§äÔ™_BÓ¾'�°){ë¾ê1„Ö>¥n‰¾Ú?©|˜xÒáþ:Ó2î<ù ÀZý^ù«’ì7Jd¿WýIøOPý2Õ—ìI®jKò™à‹g N¢O¢®€m2>°—ÄôkQ=ipô£ªš=z-{1hÜuHŠÊ Út£¢XwÎZ¶¥ÏǶŸ ÆÞ5n•™h+4ÐV¨×Ø´�ý¸6'™WòÿJI«LÿJömùÿ6ùošDhôµkûÖ¥Ý}£˜VÞ²�y Å—bŸ�4/Ûî@#ð­�@[ç¿yþž„ûB¿ñsÝy¿P=×fxçm5@ôL2¿3]`§óHû™kàœÄŸÍÿxþ_«Î…]^]j“é/c õswl·OOÀkôi»–ßG[Ùf�—º9~N_cWy­Ͼ‡�Úù’mkŸ«<×÷9ýT¼)]Æ�²«:d—¼‡MᎵê¶ë¥¸±µ¼û•~#Ì6¦¶ƒ&6ǧÞ13o:Š¿F?ÕÎ(~ÏÇØ¥_Y¦äÔõxc= –øHîÙØvN—vûäs|æøl·Ú¦®òØö°ãÉdršC9ŒÀ’à„î“ú-{³ë.>Ëÿ�ÁOª¿•Á?H6}E2_“~dV0@àíD�8¡÷¤I>±Iüï 3`r uŒ®bw<Åt#m>ó/ <%éÜÀÆã“�eÓÝ àUy¶ž»÷±žXÚŒøj÷yÔÆ_Û–ã˜VÿÄGº´™ãGúQìŠWÙñLGú>ç7§¿oÜô[ÛFúÂSz1zØÛ‘ 8eMÜ�ÇmŸµXmÓþI³O‰¯åó² _âNa©Ÿã{úĦúj;ÓÚ·Þò ëM3¦1ŽÝ¼ib=Û¥nŽGïqÆméù$6Ç[?EÑ¥~©l;SŽÍü>èÜX­i#c­ñK[Çûlå0ðÙ†þ«m˜ЭªeýÞ€eù¿’ò7ª¿SýGÉ<»ÏR}ß9oI=wÒ�ðo¿„;\¶Ju7wÛ·<7Ýõ”ÁÑw…zÀ®CÒïxbP*Ý Ÿ>­÷¯�•¦`tÂ5}¸ªO;óIáÙ'À+>r„JØÙè��öÚ«òtÇŸ$ÿ-‰¾’ÿF‘™ Så™ÿV•ô›o“e€ÛV“»¾�7ß“S×ã‰éRõÆô0¿¸Ø<p¥äÿR¯Û» éW"~r}|üA;ñŸ\_^r ÈâŸ_bœýº8gŒÛ†[)ìIô¯NO/xÝŸ&.5ù@_˜�`‚%�d=>1:P劥~ÄWŸž\±Q¬µx�[å^¼VýR^boÓô_ÊW»”×Äýšmó˜á]|L¦àsüH?å;¥[¯Æ@¦¤ÿÙ|ŽpÛÌém·”Ï—@öéaÖAS?âmŸúŠY7GGmÚ�þ›Ùºí¤ö1Mß9Ìqlgš1¦øªs¼%”¶²¬‘m;ESyäg| Íc…_ã›¶5N�ÕÓË8É;F³cå žš&žzÄ¿ÁötŸïwãP‚ü“*wþÿ oõ?‹ÿg�iß’8sÆ…R™m�“¾M„Ül°“ù+}°`€m¯øL´ï0Tʈßh?}ÚÞˆ…•¢s\Sã¾ªÆÆÕ:ËÐ+ýÎÛ€øö6%þìŽÿ‚»ø¢¼Ï€$ŸÄŸ™ŽïÌ#à ӛnW]Ó7l;@;.s|öÍ<¾æMÏÔ¸©q¨±¤ÆÓîÀFà[}çµ€6þ»¼¼Ð{ïÏ”ˆŸ\¿{÷áò¯=>ÿË_Þëî|îÀÏáó3©å. ~1¾c«G®•ì_iåÁ5ÿm'®Õö’G2Þžî¤]•S7â«Ï9mFq×âžÒ‹ÑÃF¶#ü¾1F~µ�*�üŒ›Žüæôûð[ÓÆ[úDYbkÓ¥~Kí2î”OÕ!SªÿkÆÛ�žOêÊ;~^FU ¹ê-§Î|ú'fŸ5}®þÄ0Fœ5¼m+Í8Öõ0ëL{6‰MñÖA—Ž ífY#ÛÖ”8æ“ÂïCÅ1>G}œsv#½ýM«�qÓªO›”ͧ¯ùÏBŸeØ¿úF9ñìªî€³É�|/�gõÙ°�;ÿÿ$þ¿ˆ~§ºs»ãK²ï„¿éÑm' ø½ EVœæ"ú"øf︦´i~ËÞ"Öä×ébÞ<ù´3­“)3 ÛpGÚ"|ó8®’zúÀ[^«2»ÁÉ>›|/¾QñL ´×ñÉÊÞ ´¡ðÛò‰»Ýgpë’VÞvwüJÓÞ>iÓÃRà#ð-Œ€ÞÀûŠMÿxæ_Ïߟ]üüó‡‹?ÿùøì�<Örü‹rœw~:T¬Ê: ÜY!°³á)í2ª^\i¶QÓ�Üõ/™ ±ÛÙž®�t#¼úTyä—xõY+g,ó¦5Ö¯vUîùõ°}û­m£¶_eÇ3éÿÚlé;%û]eëLGúÄÓ6qxJê—ðÕg‰Ü³sÉv�%�ӧퟗNÄL¹úU}Ê#~ÃöKiƱØZ>ã$ï8¦Û؈öâ¤ê�Cs¬‰½¶TŸ¥²í¦hêàï#�üŒOQÆbJŸºÑ¸¥�ù´5fš:óÖA)=y£øŒwÿéÀa ý3#ÀIçÅÿ©\õLõ\¼vâ{®«ÙJþŸ+ãg×jÛPÆ¿Ñ7¾íÚ/¿ß ç�-™ß.ýoY¼“{t4UôsU&»³#¶ÓÊ7eçÿXT•· ­{'ûÐä±5Öîüo“uúæqÛx–8PYNáÊd€Ÿ{«¸O€•· ­¼±)ê˜=_t»ÂäÅN#9+ý}$ÓéÀFàþ# ï¨^£¡–þéÛçé°ÖIšïߨÀS»ÿ³áßÅõÅř]¾z­¥ÿZprþ§?}¸:>Î ÿ¬íK–Ý7Ó%}NÛ%<1Ó®'W,íÍ›.±­6Sòš¸Om;Õïªëõ­‡�üË6Û»ož²&VÚ�üÒž2²]‚o"ÜŽQcödûÍé–è3ÖžãÊÿò"W_÷—ø=Ý’þÙÆþ¦½Ø>Ž´±ÏÞv•®±�ò­q�ÝÇÔÁ¯)´™¥Êè*fÙ4mŒA+_eûõl«®gclŽNÅB—eI,Û÷l§t={cöãrì³–ÃÀgþ/¿q%nÏ”ø¿Ò­ü×Z¿úZߨWJL_+ñ­/O“Åÿ‹ðÔѰôŸ�úÙ°ï­(߯¶Ì߉-<Ô5'<ÀÏ<y®Ê¤ì(•nÐOŸÖQw¥Çƒ¹bhÞ”x$úPú ŸTã´+ylÉ3ø{&k0Žnªâ—Å}³ÎXÒ:a‘ºô…'™G¥êã¨íi°å_¼z¥%!ªÚÔ�½ žQyÄý¡FàF€Wìµ]ö?~lϺëÿÖÍ+ùt7\ÿÓòSâ+û¨åæä佞»?V=ÑòÿS½~ï\Ïýó @½÷³½0û�<ýúœòTÛ©ñµÿ#»Ä§|ªnNv\Ój¿¯>)/ñ·�iú�ø}ÛÖvRÞw[Žgšm­åï#ýj›UNÛßÃjŒ9y1zmŒ°)%û´Ažæ“vó?ü*÷z±ÆÆ¶s4Û±mbð·ÞŠU|饲ã¸��~ wþݡÀGâ@G#ÀIé¥>Þªþ gÔ¥oÿ¯”|þ(ù'}Ãy%wþ[•¬§†=߯¶±LV]ËNze¿KþÍ'…U©nýo„Åt#m>{~­.Ƀ!3ß“Áˆ%A÷™žÛ�è¨àPãP cal˜°Ž˜èkÔ| ½‚ßTumSepŠ)wò[BORï»ûÁ;ñ÷› žcƒÏv…À&Úáó0ûîøkàZIÿ¥žÁ?×]÷ =‡Ñ6仸8—ޝõòr÷9ûYß¶ë?‰ÿññ‰vß?ÕŠ€óö6íÀ_ž¿ßý”"hÅRN—‡Èé›|�›º?å3¥{Šx£6Fxío•íg:Ò'þÔ¶ÙöZþ±úú˜ý¨±«¼æ˜–úV»9yÔ‡9?ô”ôß ›Ïµxú>O¹œÉ’Xòi³–wœJ3Žu‰U>mÌ�hõEÙV¼g›Øo´Ž-X¯Ðþ¨T]Ê=ÞXÒ}òÄÊJ¿SNþ¾ºƒ8”žØˆ÷%³iÚeÜ/æÎ;Z}�ƒÊa¦Fà™×Wz��üÔ7ü×¢ÿ ú9‘ôÿFüO:ñüÿ¯Ey “lüÇ�þ݉+_8'°ÉËv/É?q(¦•oÊ™~½Y,ûW�®Ç£mó›Ý$8g0&¬3tkÀàø!{ÒÄ”v(Ä&Åm߇öÎ`޳‰®Ïm2Oòß’û¤Üñ'áWmš`@[€ß.È�9ŒÀþF€G¸û¿Ý�ÿ\wÝÏ®ÎÎNyŸÍøÐN¶¶>á÷OoVÉþ¹–ÿŸk³¿3­8¿RýxzzÙ^ÿ·™€°�éÎWLÅRNŸ5rÚŽøó¡vé¿ïØ/Û™ãGúŒOÙöð6бÆ6cÜ×/c,á×´3²]ÒNÚŒâ<ÏøKølk‰=6”)¿ª_cÛ‚wâOá5¾m?7¥_õ¿ý9Ìú¥ttŒöO}bs|ê3¼u•®±K_ü'cÈ•£x<Ñß·ô|ëñÆz4±%<ýÆÎµÊsxmÃöS¸mhËÅXRtU®˜õ¾d®½}6ÌðÌÿ¦KŸ>É#å0wF@wkÛIæèd£]è_êê™}è~PòÎþßIù;Q–ý³É«¾—ŽgÿÙ´ž×²€×õµ 'ý#*»–À&­ÚJbå Aubo½ÏðøSÀX€/>¼CŒÞ€Ž‚­ã7 ó‘}ñn¿ê W±öÕàŽÿö®[æO¯çþ�ü{Ù“·¶LÊacÚ²:&6+xß©îÂs'þäêÝ»´Ë×{YMlq½úïR—jûB«.4 pqurrqÄ+ù>MŒÚ«xÊ#ÞýéÇ6åµüRÿ}Û­ígϾ‡Õ~Îɽ=¬Æ±�éHŸøÛô[¯‰½ÆvªíÔ­‰9²Íx•¯r/F«~UNŸª›“×ú�Rý6hÙÚç1(mæêU^Òfú$¿Äw©M/nb#Þñ­75Þ£¶1Mc¦èz|Ű{è8»-h¯Ð¦K�7¶„¦Í}x|²Ò¯”kÌÔõl­GG±\éF{[ŸöÉãëËæJk\ä/²&¾È?Ëç픓z¡]ÿÛ }Q˜àî>wþ™àlþ÷Oâß*±ç5€Ô×âY-ðZø+Ñ[’Û]îJe»Kf+�-Ÿibæ“V9 q\ê/t$ƒ[×ãÁè/ÔgÛÑ:*ºZ±£`gl|ë>ã9&+ö·ÞTª]1Ö£µ¿¶Ù9›Ù®hwöIü·Ïú{ó??ï‡2p˜ð(èG€%þZÀ#íN¼žÇ¿<>~ý·¿}¸øë_�µ3o€¯ø¸Œþ�Ç_­>¸ÒcWjÿJo¸ÖžWZ� ©íÇ›¨ýHy_&ËPë{öÆd¶kÞqøcS‹ýÖP÷eʇv¼wø©$ÿ/·»ÿ£ócÍv›ø¯ù;Ôc9ȇ˜6ùÓ&€JÂ/•tŸkÙ?¯àkÉÿéÿøŽ;ówüû ~ï§”®=ýÓx�’ÿmD¨Þhï?ñí-Ÿ&2Vå3öÿ´«rêÌ›.±Å†’>UN݈¿�Ï(Vïa£6Ó¶ÚT9mçø9}Æ~,ÛÏÙF¶ O™;Î9ýTŒ)Ýš¸i[c~ 2}È2×ß´ýÒxúÞ» H<ù}ô¿o›Ò÷tSý´½)¶æ¡ÆÄråÁ“~‚b›̸ySìà)ÆF²mšñÖ¾bÖõ(¿Ø,=Ù˜ÝØW̺J9–û¶Æ¶ö©';ži¶5âË6Û{¬6î7ûOY+íG~iOÙöðVc<†|Ÿ˜ødɾƒÏÉé»OÞ—`îÔ\ۥ϶ñÕDzí—RûAí³³�iÏ׺Ͷm“Xòè)ŒOò`#ݾŠÛ0%®ù5´g;‡¡O˦îËRyd—x�‰®bU¶?—È£ËdÛ8^ ú%~&¾Ä¿Êö‰Äÿ¿ëþÿ¥|Rkû_éýRßÚ]Õóæo%ÿ‹ž=çŽÿo•xþZ”gýߨ›íûãDÔ ¿)¸+g4’V×”ÍCkÅŒb]ò©kF[;Û[B [ã®Ý”Á-'Ÿø¨bG;œ9*EW‹û”¶ØŸ¬k&³Éq’ØJí`í1ÖT&Ü÷ÁíÿP¾½x¦Üºí²Ï]öÍnûÐ�,k?}Ðý;íÓ>+µºÃ¬çî�E?h›ÿ�_ë™üíÝwí3jít•§lÑUû”—ðSñ{þ‰í£}Ç3�‹Yõ#¿þÿQÌÞÖ¶½Ô®×F[o�ß—`»ä˜°¡dSN|ŽO}Æ€§¤þ1øÚFOîaÙ—ž¾‡Ul\zº¥˜cìƒò߯݌�Þ—.‰OñKâNù÷t½~ìëµkl®­Ô'ohÅ«œ¶÷å‰é2Ç[ߣ=Œ¸à=]bÕÆ²iÆ©~U7ò±_ÏŒbߤ#qÀ™0¥º˜7Í~Í%þÄΚönŸ¿OÆt»úíŒÏ׫^iyûÕŽêf{“…ÍMhŽ‘¯ÈCʬ¿ž·ÿ Ý÷ß3À+ø´ùÞ¹&.y&?ž¿wj¼*ÛÚÓU,å%¼ã§m³ÞtIF¶=¼‡õÚH»ªOÝ~ä¿Ä×6¦£X‰/±MûÇà—ô¡gÓÃFý{,ÛQ{Sø”ný$>eM¬¥öÕ®ÊÙ&:JۼĦçÓ‚wâOáSqì÷µQŽÉ—0÷é{Ï-–öæç(}­6‰U™‚ÅÇ<'o¬ï÷éØxÏñÖ¯¡=Ûž:Ë=ÌýíéÖb+Û¬<—Às±(î÷JvüFõå|&¾œ¿ÅgéÉÿ« €ÞlÜ÷Ý…{ÝéÿAùQßXîò³»ÿ�J:¯D�äÿ·ª¼Ð+^H¾5à¤?W�$R±ñèFŠõ=Þ”‚-Åt#ÍòKMŸ”ÍC)IS?U«/íqf©Åý0ͱÃO XÆÖc ïjŒ~áGu-ÏQO+ýGð¡|k#Àÿ^L(Ñ×Ýô ž±o¯ÚûD/æ&ôÈ_‘EEß×Ŷ—Wþ]Ÿ°ôŸªÕçJþ7+>}Õ³ÙNòißÓ%–|µO]òÕ™’6=>±j_å´�ãGú³Ê#¿>òÙ÷ð¶�¸Ä ÌÅŸÓ/‰1²Yû±lG}áÙl(³lZmzxkÁ'â÷ô£8#|ªoU·DîÙô°ìú,#ÝZ-Å܆í—RûAí“XòKôØ{\±ßWÉX=~ ³.iòô1åä­s�ê~‰Ü³©˜ÛŸ¢¾LÙ8fRø/²&¾È?ËÓuêÿÐÉ„Zêÿ�¾Ñ¿RË¿Vÿñ?)Ñû�Î4ÜñoYµMˆ¶¢-átâߣØpƲ­ù¤ðµÚœ’Ô¶o†a›zë¦(¿ê,)›ïÑÄà³ÙI3}‡‡÷ñ@)–“LJ1¡Ø�GàIÎá=Æ•b“¾öwŸ ÷©Ä¡Ê7<?²»>ì]èUwç/.ÎØi_wØÏZ�ŸàžüŠ,Z!03‰@?´àLwÿÏ®Ž�ÙàL«˜°xÈ €^¿+–òž/JÚMÉi—ü”OÕ¥_�ïaÄ ¤®Ê©Û7¿&Þ>l×Û¨Í}ÅéÅïa£öîk;Š7³�jSå´�ãGú³Êé7¥Û‡]�ß“Á(SíõôÍiûQ}—è¦|Ò_<íùÒe_1ïÇ}1íÅéé¦0ëL{1³]¥=0ÛõxûäøbOIlƒ¬ÿt,{¦Üã�™âgšü]ÚWËÕÆq­Ÿ’«®ÆÅ0îKdää­O궒±å0ðÅþiž¦cV^¨uþ¯Yî¯ä�;þ$û¿Ó·úwêõTÛJ%�?n뢼ê�GžeÒ/ìΊ0ÎTSTê]‚Ší¨bg]å-C)ØQL7Òø“_rÚöd¼ý‹ÇÖ6PŠuI�cï3HòÖC]лú.?²Ç�øŽ÷@þ=àÝ7ü)ÕÿûÔ<ÆäÝNkìðñu�€’{Ö°ôÿF$ÿZ^ª¥öín;»íë»ã¯X÷Xgü¾ïtÂÇG7''êÛ…úv®‰€‹«ÓÓKMXh;þ=Ý¿ê_eìzXÅÓ&ù)»ª«rÆ1oŠ-eJNÝ?§ß´¶ù\b»›51˶ŽñšvTgÿÏE¹<ï}úD,Çì]zXß‹ÝÓõ°êk›­öÈÕ¶ÚXŸ¶i“zã`µôÆ mz>è+ž²yÓ´7¶„ölƒïÉsû=û9]OoÌÔq¹,®¼1Së¡.;ž”¿Dz˜øÿ*OØ'Ýò'wdVü¤³Ç?ˆþAà? ×Ómé?¯¤~'ü�*“m€“N:Í›‚sFBž¢èzUð-s˜‡¢‡Ž*>Ô,Ž“ãíÇ/ ÄÍ¿�ûµ¿c'õrÿ%^Ú:¦àCùÆF %ïÛG”ü“TŸñœýåÏ?Ÿè5{ïÏÿö·Ïæÿ“ã+r»Œü»¶Ï»xÄàY½àJ+®>*ñ×#Wš¸ÒkøæVÜ�ûég}»Ïwû‘¾#¯ûèìcZãÌÉ#?ã¦5NâUWå´5oºÄv‰Íšxkl÷Ý6ñ(÷íÿDz­ý¯r¯ÝĪ=2Å6¦‰�ø‘mµ_+gÜ꛺_}z2%cl�ÍgÅ«<åë8=Ÿ%:Û<¥�\Ò)'>ǧ>cÀSö©ÏXKøMîö¡×¯‘m¶c›)ÛŒü–ø:Æ×H9n.“£ì;¶ãUš}·ÎXOFW�»,UŸº_ý±©XÊ=ÞØ}húLñU7'çq`;go}õËËbl,W¹U]A¿ªR󄯪ó‡Î>|ô ÿsÝå%±ÿNßð¶@QIúÿEØSýgÎ,ª�@¹¬ }ÆÙIMü�ã ß‚ÞX�ÊtçÓã�õhbðKKý§l¾G«<²+Ç ï3Jʽ1HÌ>PîΛúN=íç°;ë‰mãç¿ ²Ûv¬”]VãnÓÇR)ñåÛo¨;ìºÃÎ3ö'ùËûóû·w'ÿú¯?i{€™#®úµ2ág}ô}åÕ„ÛJoûg¬ä{퀹¤í¿%vs6#ý}ûåx¦Sý¬º*÷bô°‘ßcÙf{OÑíQ²­”Ÿãçô�7cÃSÖôgãqÛ'c¬‰5²�kã¡úQ»‰ç1¹=Ójg¼çÓ³íaS1R×k£êC¦Ï\ª|mÅý6¥ÿæJ§ÆÂ±³=Û§.1ó½qÆ'Kµ©ú´­º)Ù:Sâ˜_B{6‰ÁWÙmôti›vKøôuìå¢ÜÔ6;ùkLþ Ã£ð -á}þ?”£k£¿ç¿UÂÿ⃪’ÄúãCÒ+ÿþ ž]þÙäï' Ïü/ʲÿ×Nâ·‰ÿ.Ùïɶ­”³¼ÇƒRR®˜õS4uðk íñ wIÙüˆÚÏzb˜Ï³8c‘2gìá³€Q)ö1µ.õÄ¡’°ç˜K<ºzþüèúÙ³£+Õkñ�nù‹W¯ŽÎ¿ÿþèò»ïŽ®ToÞ¾=úøæÍÑóׯ�^H÷JõÅË—›úâÅÑsùSõ=k•ø‡²ŸÐß—„–?ó TL£Ûõe7 î¼Óüï_nn®µ£þ^³'z*z¦ÇÎE/5p©gï¹Ãî6Lk{=¼bO)g[#~êF>#œX#Ýlg[ËiÎX §r¶¡ÛHwÛr<û™ÚÞÔãŒìI6´ýG%ê—JܯõBߎÓ_ýêèüÇ�®~øáèZ“Gšx®‰€—šx-=“Ô—L&<ôû§¤ü,¿¿¾¾Ö]øë#^Å·¡ÈWà³�–eõ³öi _íþ£géßkÙÿ{Ñ“¶é�\\ô^±Ç׬W*þ9ål{Äç1¤ xÊæMí7%§n Ÿ¶£~ÔöÓgŽOýÒøi—þsüœ>ã.áçâÍéGm¬õ«qªìx¦#}âklÓo Ÿ±«}•ÓvÄOùLéÏtÊ%m÷-gìß:Qú‘¶µOktÕ×mMásºŒñPÞ—GŽSeðÄêe�åuÌ}RÆ>ûãØ=¼‡ao|Ž:v�ö|±sßÐSª¼A?á–¡ö1f_Ë•VûÔW]Ês¼õkhÏ6±ÊW™¾ƒ�ð‘Þ>•:ù÷¥3zcÕÖ2m|µå0ðÕþé–uüÿS~Nò¯oñ÷JÔ¹«ÿ½’Ķò’φ¬ø­ê¯T±}-ú‚„ÒÉ~RpëÌ�¨â´3úoÌTf;»ŠYgŠÞe oÛÅŸ_u–ÄÌÏQümãx)sFqaL|&G¦Àã“rÚ:.¶ö‡ÇÇœ ÑzbÞ0À]%ï—Jâ/E¯ ®JòÏ”üŸ+ù¿T½‰ €WÒÝh€ÄßÉ?ž`À¡ìuXYÖvà׳í—JÆ/•ô_¶×ñ‰×3ï— Z˯ʴyo²@3z½Þ’Ñ6ÔJ€ mºwùL“Û»ÿÙFòn¯bkä5¶´·Ô>í’õ¹ÆNŸ%üCüGñkÌ”G>=¼‡‹2ÒÍásúŒ½Æ6ý–ðkbß×–~PÒ?åÄçø9ý(nâåïã?å3¥[s¼Ä¡¤OOîas>©ñsq{~=l.NO?¦ptY²/‰W~Éäi“<±�ÝVò©3^}±¡X?Å7Ãk�ù-ŽcÔÇ[†Á¾¦“U}•íN™ê�m6–Ë>«Ï”œºolŠ.Õ¥ÝZž#ǧú3岨<4e󦶓ٮp�þU–ÃÀWùg[Þi–ýë0Éü÷úcÿZßTžóg™?™;þìüÿU^ù÷k& TÙí· “ÿäIJ§*g*ôÐ)Åv¦‰™¯Ô¾à””“ßh§?±×8Ü*Žnýˆâh]ò“ñ@våìB‡‡º¤Ÿí+f[(m»}Ÿµ Tp–þ³à‚ %ó—Jê¹ëm<”ä_‰?+vZÀ €�Û 'þLÐÀ>Fi‹þµ¾þJ™öÕÕ…^iw®�øÏEÏT/®Eg›í%õÕ©c£ïJûšiÂá£vý?ÕÀÙÕfó¿3ñz€×æü’£æ×ì!òC|çÚvlÓQÿ{xú˜7]j¿Ô.ã&�Êsüœ~m¼%ökÚ\b;js‰oϦ‡=¤ |)ûŽëx¦KÛXj—q—úìÛnij»�-Oõ«¶mÛ9ŠÅv•_"÷lÀ²düÄ×ò\:ôJâæ¡Ù®qüSŸ:ô�UèÏÚ¶¦|¬›£y<#[ÛXŸ2|¯ßØféÙ¤~Ä×8ØU,åäÓÖx¥Õ¦êSNÞ~‰-á{~‰ƒêKcËëém›ñà¿êr˜øªÿ|ó�W†À³ÿzÌ¿Ýýçî>I>wúIú§Ê€ÞØîü£ÿ•ÐïEyL@÷Š7+ø¢dâ�nTåßÎ\èáM+o»¤2o>=̺M¬òÈK íRøÅ¯-øÚ¯Ç£ãì’…±1�JéñŽoº±¼û‰Þ6^+ÎóþšàŽÿ¹'”Ü_h‰?µ=û¯äÿZËÿ¡í%ÿL<“�ïø{ÀûÜíÁyÈèûÃþ{7J¯Ú]ÿ‹‹3=sO2¾y_ 9ñÛ«úF u’û0õ×ãTíyæàä„×ÿ�kùÿù•øË““sõƒO9PûZeŽ¡b)¯å=&éWÛHÝZ~m¬Qü%qF¾=<±%±Ó&}çø9}Æ­|Êkâ<–-ý¡dü*[g:Ò'¾Æ6ýà)Kü—Úe¬¥>û°«1žZž:îÚÛ&M~d_ñ%rÏf„�ï«øòˆxæë¥ŽÛª¸ÇÂ~Ø�!'–~Ømó ÙpŽ3ÒWûj—ròø¥lþ!tÊ7uKx÷¯Ú"ךÉ~�O,ã¹ èW[_íŸnYÇÙôOWéläÇòÿ_ëŒð[Q–üÿAü?�©~'žJâßx%øL(U'þÖ‘¬ÊïÖd@Êð–Í÷d0JÚ¤l¾G«|OËâ_vbî�uÈðs”¶©<2ãEWÎ0ãð`È·¿‘¦?3¦ù¤—Û €sݹ¿PB®ŸMÿ.T¡mã?aÙüÊ€øç¢/E_hÀ ÒÃ&€Ó—ûhÛß}³À¥^gw¡¤›»ï'—ïÞ}ÐÝø“«¿ýMûyîJ3ßIfjBo¼|­:“-ó$ûµùÛø�Íÿt÷^«ö=�Ç0â9‚Ôõä–>æM{ö=ldoÜt�oµíÅèaKüF6ûŽ—í¬‰½Æ–6(k|žÂ¶ö©ÊŸ£ÙæT¦t#ù¥>÷µ›ò«º%ò›¥Ç7Ëq ®öIÅX嫜vU‡L©6ôq>}idJ+擺O`•sÅÿ© ýq_çÚîÙ›£»Ú¢£d_l·Ñl>mWmÓ¦òéSu)W»5rÚš_C—ØölKžãBNÌr¥NîMÑOñĦ8öv?æ ø5~&¾Æ¿ÚŠ>+}{®otÛ@gîô³€×üý³èUå1€×²y•Í+%žL¼ò_’Q'ü¦`®œ½¦xô¶1oŠÅrò`–—дiŽúp Ë=j›Ý/;ŒÐUÜX¥¸KÞq8ÃdáøÁ­óx¸Mì�ÙÏ:ËPÚÀÖwûœÊÀ™Öu°Ûÿ™’ùsOh¹?Ïþ_ià™ýgÜíÊ&€$ÿl!™Kþ�ø›ª‰CÙßh€XÀ+ø¸ûÿóÏ.ÿú×÷çÿñÇ¥©Þ×â6Jö#ÖÎGïø¨Ç®¹Û¯Iˆk=û¿áÏÎnŽ4'!lwö…'äRÝ”mƨvkåŒ5âçbŽüŒ›Ö8‰W]•ÓÖ¼éÛ‘Í}c<…ߨ�z,U¶ŸéHŸø¾m36bd[5ÞSȵ�‡ô_û›7Ívl“Ø}x|(oƒ<þ'—TŠ/oL�5åVoŒ¾ÚÏú)š1§ìö¡[Û·¥möâVlNζ°Í²f<Ó¯ÆAW±¥²í“öb'–¼�ÅXÊ`®y 3Ç£•¯ù¹ô0�£ñ òZ#üâ•Ò6}ÛÙðo·@gŒÿ"ùSý�êsÉTN$�W’ÿLõ9_'üPÑ*ƒQ›sЊ¡wµÎ²©Lv6`”¥4m›cøZž£n+Ïø€ƒ™‚õŠõ¦=Ž<+g :ø¤àØNÚs›P qHþy ”z¡ €s­ë8Ó €6 Äþ”»ÿLh÷žû¡äŸd¿Qñ/IúÁ¶¸Â´BÒï’¼±}ø´ öÐ Ýu?»z÷îäBÉÿÙŸþôîä_ÿUo÷¼Uz_“ŠÝ–o¯HÝ'þꪽŽ�¹ˆ¶é«Ìúj~²ïct4mªœº_}ÖÊ£¸#œø”‘¾‡÷°©­�m¬‰ûX¶y�ÕFÆÍö–ŽSõq<Ó‘>ñ5¶éOIÿ”Ÿãçô·ò‘GíÎÅù�ð¹x÷ÑßÇ'û÷PbÕê˜Æ-C)ÙþŸú�÷mc=ÚóíÙ%öé?øD7¼uI“w{`Éã –•Ë�§*ôÅýœk³gÛÃǺJÑ�0tî6”*oÐO¸eSûY¾/­qÖȶ} šm$Ïq#�0p'ù¦‰U~'+ ?”å0�£ñ òZ÷ÿL‰9ûK�eu ÷è­¾Õ,õÿQüO¨»³qå�ìƒS= `Ù”3¼iò`®Æ-÷¨Ìwö=Þ”B —äÁªl»}Pbs†¨ô>±Ÿmàë$€åŒ�}-ö¥OyìŽMœ¬L · m:w­Šßs’{W­x¦Ê�žûÿ%�×GÖwi8÷7¾a7-äÍŸkÙPÜN²—ùЯÿÛløÇ³ÿì¾Ö&ô,þåÏ?Ÿë€óFŸ²¬‘ÓvÄ;u£¶ÒfÄÛw¤_‚÷ú“~Sú´ñSþUç¦#}ŧ䵱loZc÷ð6òûœ¶µOUîõ­‡�üÖØŽb€Söë!1jÖÊKÚž‹é¦ØSžR~ʶ|ln:ªØRl{¾úôd°‡–ìcÆâ]Rô‰!Oé¹Tqá[ª/…à)޹‘îÊÆ—R÷i©½íj?À�™ÚvŽVû9Ùñª�ñ}PbgY#ÛÖ”8æƒöb&–¼ûV+ß;cɃ~õËü9†Q9LŒFæµ {VåÛÌ€(_„ÞÝ~ÎÆY}††&�MÊÖ'µMbö‘ûî€9Þz(….ɃUÙv¡Älg†‡øº¿Œg¤JÑ»¢«ŒJÿÌó7öí…r×z}ü ½AîÅùùÑK= ðB«^*Ùo'ƒ­îùÕ•ž¹ÙÄ`€ÄŸG~I¥-À¿¹>"×^x­^_ßèm�¯�ZZî9@»zæÿøúýû÷<û¯Íøv¯àC§æý54u�"Û×t³‡§ÏˆÇ/uUN݈Ÿò©:dŠc™&Vù*/ñéÙô0bS�éTÛ˜îÛ6ã͵1§ÏXS|Õ¥¼¦�}Ûf?à)kÚXb¿$^�³Vµ1gä7‰GIýZ9}G|�9²K¼ú¬‘‰ãXæ“‹b›ÊWyÊ®Ú"?U¡_¾ 2íµ�vèm ͤÙÕ>ÈYR6_}Òþ!¼û0Š1§O¿´ñا®';&v�ÁFzاc:Ê}eû™Ïü>i/Vbð=ÙI>4yÛ�(ÇñM–ÃÀ7ùg½}Pü‘}¦L ßöœ€w%y„w9¢ÄE7ESç~˜ÚW!nõÑúŠ[îÑÄà)Äùš ãÁ™‰â¾ƒfáïçq2ņŠÊßÐçF™PbÿB þ‹‹‹£ggZò¼=&Àä€Û�^<«Úóþš x¦‰‚gÜýþ¥nû+ÙW½R½äU|�^^^‰g¼Ë¥CÑyæ~Ê•?S+´¯;þôÜÿí¾¢IVœ__\äü;s3¢»[l©œvɦÊ=,mFüR¿¥þi7;õé7âÓ~-?Š™øÚ˜kí³­9~NŸm?…m¶OYÓnÚ¯ñ[cÛ:5ѯìÃcðÙ×™2g“ú%ü\Ì¥1æâ §ôâõ°‘í_£úÎÉÄt\óU&†‹u÷•G~Æ?å˜|éBû)ûx}¹2Eñuhú:¦©í,ã›%ý�÷0ëBÝSb%¿&ö”ºÇ(5îÙ¶¦ôÏücÐŒ ß“�õþfûÇÛ/.æaà‹û“ì·C¬óçí¤Ðg=Ÿ1ÁùdÍIôµâ Ö£`µÚv —ÛÎoŠ·®Gƒ§Ðæç,´¿öŒâ>3nN¹�A]Ñ×’ë;É¿Œ½à¥&^jàŠeýÂ_*¹ÉMe&¸óÏ€tÏuçŸWÿ=C÷ËšÐî#wÿý ¾ =‡® ñ.®ÏÏ�±ŸþO­˜Ðm'NµàT»þŸ² ¯áÓ$“KWÔ¾MÉ©ñvêæäûÚ¦ß~®©_/mÒ7ù´™ãSŸ1¦ø)�ã™îÛ6ã͵1§ÏXÉ/ñK{xʜߜ>c¬±M¿ÊWyw©ÝÈ N”´�“Ó6ù9¿ª·¯iÕ#»¤ X•+fýˆŽì_ê›>ðûn¤Û²uÐßó[ƒ9®}*�ÓWûûÊ\‚Ô¶�}™’ycöAG©mnЇÎŵÞ4[œÃª¾ÊÄ£ø¸7Òã|º-G_#§m�7¶Oš±à³r )Ã�þ´«~Èßl9L|³ÚOÆ#Î |ÓóLBÉ—ÀI¿)x­ø3ÍŠ>u–Ó¦ÇËm§Ç›¢©ƒ§ÐÖÚRÇh­ÚÏÅ¢>û8ÙgÌ*oÌc‡Ü+ÄBç˜w&XÀ]~P‚ß&~„‘O2)p$ÜwþŸë®«¼ @ºg²û¥îÚk£;-ü¿¾Òø$ÿíü+=‡¯gñOo´ÿÎXŒ“ùþÀ�í Í„-û¿àοê…&Î$Ÿ_ëµ|ìÊ�Môa ßâ†O•3FmkJ^Ò�´™Š…Ž’öæMGúæø_Ç7­íTyd—xú$>ÇÏé¿´¸ÙxJCʉÏñsúŒ»”*»Qßkû•³�µ±ìkÚó£¤Í¹‹¥�ù¤æ3^«zÛ˜¦~M_ªñsD¿ú.Á§|Òÿ1y—/_zm¥�õ= ¸/mLÁá)ÙNb¶5ÝX�?3ÎØêq4>F¢�øªËž¤Oâû≟¥Êè*–òoýRšíáÓóKÌ6SÔؘ7µ_¶ ÿM—ÃÀ7ýçÝìôG¦à3_¥$‹- ÜRO@ÑÕŠ¿1xË=j}¥øWLÐëñƦhêà)´ó…v8ƒPFüF»ù´�}@—šøƒûл`NMœxNú}FC¦ ëµn› îôKæn?wþ¯´à¥öÐîv×ßwþŸs÷_“¿´J¾5`zÖŸ¥ÿºëÏ&|J¾O®��O.��?h7þSm’È�öJÅ«¬?Ü]_ý-oÛ1ÿp~~© ‡Kµ½©â?j@¯àË €Û~·ãLéè{êÍ›V}•Ón�®ÚVÙqMGúН‘ׯž³ŸÓ×¾-±_ë³$fϦ‡eÛsú´M~�ßÈ6ãÁSF¶=¼‡�bŒlGöSøcèFýK¼¶ûPyMì´ñôÇ%mF˜m¦¨uÄ0oÚÃÐY_)öãé¶œºo¬Ò^,cIí—X�_j×ó}(ƥǒöÓ ¼+˜yScI“ÏËð5…6²_K}Ýoì“·¿1Ó‘�íMÓ~Ê; ýßgq\Çœ“±K›äG:Û,¥Ÿž_b¶éÑLòG¼ý²Ývà[-‡ €oõ/ÇÅ ÿRn,I 'ZB(™3+Ù|RŸ¡�!Ã7íaÖU*÷��76ESïB[Ÿ«0îkÚgÌ< `¿Š�ƒ¹x2Ìg1þvæMÁØå¿­ßöØ®x©¥þWªIöyÞŸÊ�ÿï¾kZ"ð‹ZÀðµwÝi€ž¹gà\wàO.ß½ûpù·¿ŸÿùÏd£?îÝD¾Á·rü >•»>·õXb£WíiòáúêüüZôêFTך¸Òþ�Ìq3†yÓžM³½)6Kø)»ª›“—´·Äfª�%þklöm;Õ÷ªsÛ¦#}â_›-}w™ëûœž8¶1MlŠŸÒ�bMùTÝ”<ŠŸø”?:ÊcÚgì¿éÅæ3mŒWÌr�ö0âTÜXÅ‘+f[hÛ�Íñ=}b·Ç¯±íù?Öë#˜/[z}°6¶…¯2¾ÆÍ›ÚÏ—=¶ƒæe‘câ7*S6ngä{þiRä‚¥ÿzÿäò¯}ö§?ŸýÛ¿½+c[¿)'Ïß-åäõG½5¡ðQ‰>ÏgÜ4Ê# ÈJþý'cŒxº›º*§nŽékÌ%rÚŒâÎá©Ïxð.¶1_Ã?–íT?¦tûìÏšXÙ§5~÷µÍöà]Ï|ŽŸÓgŒ´Mž’ú%|õY+» Óµþ�a_cºo¦U�œ%íŒWÌrÒOŒÔ�ä´�·œöð.#ýZÜñå¯[À·!Ü9&=NçK!6`¦ÖC“Ç~ C×»ÂÏ›;}²r!u?Gæ=}bKxb§]O®íc¿ïRcîKvœå8F:ðž.1Û@kr?Òíl¿Ñß"c:Y“Ãóu(·'XŸ(Ÿý�4õ€ò3½$üÙ?:z«?ò%ƒ¯U_Êè…¾õœ4ÛY†D±Vp×]`œ¯zdÛ&oëFTî·ÎþØQ–Ò�õ'û‘l¼G9#¸½ž¾bsö=}˸Œ]Müѧð”:àØèákmç\ ÿíÛÉ@“G§§GGz€Éö`cÀ–ü?ÑõŠúL·õ©?µ¹áI�?aÍlÏ­m6ÙSåYû Ýy?×nügºûO=½øË_>œÿñ�›Ÿßô¹/§Î¼©="§ïˆ§�ÔU9uæM—ØV›%rµéµ×ÖøaCIÿ”ŸãçôûŽ›ñà)O݇^{=lÔ·}ØÖØUžkcN?Š—~Õ¦Êi;â«ÏZy7ñµ1÷mŸ}1oJ[Y–âioÙ|ÊÄ_"§�ã¤oå‘)öñ©ß8|› ~;¶5ƒäêcL 0v\Ö˜&oŒ&Á­]qIäËÛB—–lo©OÚ=Ô?cÁ�²æ6ë?Ý–=×Êø�|Œ›¦­±)ÚÓ%Ÿ‰•«}«ƒï'ýûæËaà+ÿë$úò¿½z«ª?&õ¥R¶WJê^ý z|tô{}ËÿEú?û­ô?éLò½êkUÝ÷Ýœ-¡œa*­˜õàkªÌ[ù ´Î¼)¸ù¤ÉÛ¦ê£ÊÆÓ'1xÎ#¿Ô%ï‰%oýZý³Oð–ͧÌßǰ�q¨«('*§àëbÞÔø£R|ÝìÖ‰ùºÑ ÃN…,Ë›j_¿‰ûwwë«Íÿ®uÇÿøæÃ‡÷,ýg€‰€�z&_“"þÏ$»QÛL¹Ç'Fœ5òÈ6ñ?×Vϯ‡Õ8iSusrúÎñszÚ¢¤]•SgÞôsÚNµ=¥ëõ½‡�b¬±ÝGŒµíÕ6«ìx¦#ý_â‡/%mSN<ù´�§ÜWŸ~Éß'æ}|²ÍoÌtIØPF>Æ“&o_c–“š·MÒä±Ëb�±”“·~GÉIÅn–1Œ#—)I§‰›ïÑ9,õ•Göµ¼k³Ž>ÿb ×ý‡ò�Àÿ®Üí7›;üß)ñçnÿ[�å¾S2gú[áÿ¤¤ï÷oŽŽ~#üW²ùN6¬xΑ„pD«»%Uf];pÇA^ÂÛ®Gƒ§sMéÙs– X‡Üã›Q|ÌÙոẋÖ‹ãö¡®ØšOÊß�ŽƒŒ¤ß”“gÈœ°�©Ô-ô ×Oí|ZêÞîÄkµx^w%^KJYžôsHãJþ?\ªŠž²¿ö¸Ô3øWLld¬äQ§¼–ŸòŸÒí³�5±Ò¶ö¯ÊS¶©ya@IDATëñ=¬ÆŸ“{1zX�cÓ‘>ñûÚfŒÊ§|ßøs~©Ïö’O›9~NŸq+_å‡Äšóéé%õUN݈¯>kå}Æ]ÒvÚŒÚ6>G‰E±ÝFÚ|&6Å[·”ÖöÒ/y÷åÿgïm›Ü:v-MI¶lùØçÜ;÷N÷LLÄü©ùÿý±?tDßslI¥w ž$µˆBî«T’�á$€…dn�*›››Âdçxá™wfwó¯2í–Ô‘·(•\JæÍ¿¿ý!F¶tÉÙ:à[†âáÎô-y çì5›Ê6ûÜ‚eŽÛÒ—¤û²žmí ¼š³ÆŸ¸Q�>ð�¿ þ½�4s¿Ç_¡¿Çáü¯ú?¢ÁCþ=:•ùŸ1ÿƒ¼Ä¿”ò B&Í.™¶+>Ck­éò»\Ò³{Ïà/ {Óp»ÒSÌ%Ò׬taH&ÏY<·§::®=ÁA×sŒä$€Oý1 \¦t$ìÞ‡®8üßûqþ¸Ÿïâó <7å;ÛÃRó¿à‹:Ý>œ#ŸïÿóÉ?Íÿ‡—/Ç ~‚/®àž*KŽwûZ:‡:Ëå¾g†{ìCèKk¸o¶ß wÌs 3Ü¿G ܼÿlk�’3¿ã{¸·W¿�u-±³=çXl ÅH‚ÏôìÛk{Þ»äƒËÈœ [âÈ'éñÂ\ºWCxe»Oº$|tÙ3¹7¯òTqÂ�™WbÝü{É–ujuüµåm CzUïãð(žÞîd Ë1·+L¾|3 ÷’¡|ĺ^åšùgx•c/Fnk¶¸k<÷K_’øÜ/»Â؃û·è9û‡zÏÿÃà[?ð¸ÃÿÏÑÄý¯üߣ©ûGt&ÿv\ðäßâ¯Ùÿ'þ�ø˜�ÿ3îîöäyøo}€¿€jÑï2#|W¼ó+ŒÁžYÐ/øÌ>“úK£ü™‡_>×á¹=Ó=Æ,ŸpçCf]Ï¡ÖÏ:¶7þèº ÔÑôÓá2Hòj¯`÷<ÆøÇ'þ>¼‹ãòû¸ ÿíÇø9¾OшŸ­_7ùõvosÏxúú_5à²ÿ8 ð–Oÿã$ÀÛ¯_¿‹õ¹?W(N’-Ý·¾w ßÏÞXø Ï!]ræ�“Ø¥˜-yÅ‘ÌùÖìYœpÉœ§Â+l·‡;˱ß³Î.k3ª˜ ÛÂ�q2žíj½ ËqÙ®bË|l çUºcĬÙk�w}-?#ÇlÅ·EVacÅ>Ü/=KßköÉvÎ%k)¦Êã¾Òß�.Ñn[Ï£¿ÕpÝÂŧ!L_¥+N>Å—. v­Ázä­Æžõöp«µfXÞÛš­î ðîs`Ü•?r(F’´ß“¾åxfÇ»%v g– žó»½%^I�Ÿé{¸žãÒ8Ïáú¥ù<ÎóÝE÷œ3ý.ù/‰�Å,í�†s²í¾™žc*;cž+û.±‰aä¼&ŽK×=\S¸¸Ø ·+]X–»ä‹Øƒ¸‚Ölñ$3_ø�ÝøŸ•c·¡ú¯ ^õÞòv.a’`ËöŒ®5Å‘íÒuž/òK⫦?¿œ ›eê�Í¿ùf{ç$?}÷‘ïúǧÿïãwïù ¾›ÿú׫wÿüçëÿû¹¿5òÇ}°]_ì÷|Þ˜Ä× >Œïü#ã“ÿÏ77âç?|z÷ί`­/kÔúšKŽ-œk­³e­ûæì9çæ}eÛ¹kúšßsß×טéµöl}Ç÷ìÅãÐw‰W¬ä!ãyÎ-käøYÏå1®;g–ç.üµØj}í£òÍò�ËçrIwŸÖ–×¾UæøÊÖš’Ê-{KŒs‡®¦õ–£�‹+ š'f9y.y{# Ïßé­�pÙ. æ:1²Ñ·åÙÊ_â]²þR¾%kùX³÷r•O’xé.Ñ«ÉÛSFå–ý3| ½ædÿˆRïùÄcÿ.Ž9¸Ÿ£áæ|ÊÏ¥ÿ\@óÿÿÄüCÿ-ðŸCòóHžóqÕw4‚§Þú_HáŽíÕc½³¿ÌÙö|ò�Uú>å§Â—°Êµ9Ë»dgŸòI.ù—|ŠGªÂd»t]1`Lž;Ör©çS�?~Ÿaž­+�µœ{‡¯Ä=øþ?—þóéÿ»ÿú¯Wïþ×ÿzùæþÏøq‹Ó`‹>Ü®õ/ å?`pâ»þq§ø)ÀOqÙ?¿Bð)šô‡:Pí�c]Ã×üK9²/ÛÊ-9óoÁ÷äØÃem†Çd[>É™ßñ=Ü=q—æÝ³Æ¥\â¾G·_ÓÝï9²žm�«ô Ë9Ölå�„ÏÈö=<ºOºä,Öýç¾ý¾ÿ=ë³/í­Ò³/sòZâ;.Ì¥tçe½²ÁVG7«%zPÂÒó'ò^xmº„#"riŠ+¶r)‡cè |â!/ŠWl¶…Ïä^þR÷UÇSaŠÉ¾lÃ&é˜t|LÞjJß#=O¥ÿð—ûS”<ú@®È7fÇ Š«Æ=â¯7øû��ÿ=cœɧÿ§U6ƒ¿bj%Á¾ÖÔžXßuÙÂÞÃ>+=ó*[q.}j4³Ýç:¹²½ƒ«QåÑ~\ºN,6Ó›~r¹­çš“øü/n˜c€+î�›ÿX8Væ§ÿâ nøÇ\öÿ.>ù§ù¿ùÿãÏã6lS£Ò+ ¾ð5éÜ™®—ú¯·¶_cÆu:cÆ­ð ›å¸/îØtÚ÷Cïᾎí¡óæºe{m?k~ò1œ—m÷I—ÜÂ…Ãð˜lË'™ýØÕ_ÎLϾkØ—ä Æ‡ï|fƒkŠ'®ð,3O¶K×?ÃÀû�ü¨Â�÷0990^ƒvå€ £·BkR|òˆ+ )Ü1t¸cíìøÆì| kvuxk1î—.I>ô¥éoQśŠròšÁ×#*Ð'¾ñ—wóÓ_"—Òiò4ÕøIÂÙ2)Qæ�1À5Äɶð™Ì|lqåær«žyØ{qØ£ÒÁ4à‰#\åA—ßqaOy\Š7ÃÀóäùwLöx]Ä_ÌgñI÷ÓøÔûiüìý“››OŸ_¿þwÃÿüé·ß>}øåþ_|ùTþ ?õŸø¿ŒïÞ¿ ys¼û>7ä'µ¾JÅ^¤K:æzå6“kñ{ü{¸Ú�ÇÌô5îš?ç]²÷äzhnÞ·¯?ó9çR}-nÍ�½]{�¼§l¯­·æ'ÃyÙvßš>óçœÙžÅ9NŒ�ìs{¦ï¾½¶ÇÎô-9+N…å5d#—ôì“�רpaYÛ£+piôzÊñàþV…9�‘¥cƒ`ù´Åj-ñ×lñ®)µ'å\³á­qf~Ç¥»¬}üÕÔ>Ü'Ì%z�IúÀ¤0ß¿0~Ã�Ž üu‘Tó/9š¼#žÏ0Ïlý•ÊœŠ'®ûз åw)—|’ÄH—œå¾&U»Ìs\º¤¸²%Á³.®ïc ï|YâÛ:Õô‹¯×EÈÏO¹ÉÝû÷i¸ã¦wã|?¿xñáËã€ß"€-ûÐa8¶M·Ñ䌦ÿÕû—/_ǧÿ7Üù?¾{ÏÏ~øT߀Ï×­ô%L¾™dÿÙç˜ëâ­aéß³\†‡ÛޝékþûÌë¹ïCÿšÇ¦µ%¯u|ž/ç̶s×ô5?¹Î˶ûöêK¹–|¾<ÙçöL'Þ}{l�“.¹–ÇypsÛuç‚Ëçr¦+V~ÙH�Ê',ËÓŸè©t-½¼.Š«ôâmC¶tánƒÁÓ[£lÕO:’®¡8ìJWk).ÛÂïKzMXc�í\×sù$Ý/ ©9; ¸*F>—è=*Ð'Šó-¸¸€Ž,¾0.妑ã_‡þâðÓü[ƒw¦ÃÛ:ƒz‹»[[Ãód›AÆLºoIÇ·u¨–ÎæR~ö–qap´wtxÂ+ ŽpxâºÔšŽeÛ§^`èÃÇå÷ñ)û³h¶ŸÞܼ{òüù‡Ï¿þúîãÏ?¿ÿøüùû÷OŸ~j�ã;òGä]çZ¾¸€7ÿúëuüüòmØïÆ ùοïy¥K²;é’&ßLV1×Â.ɳã~×u|Ž-éK>å’|,Ü-û¸Ξ:øú{â.åúz3}–;ó³=‹.¹—}Ù¾$Ç,æÒÜÄixî s¿ëp÷ØÎ•¾&×ö“÷ |϶xH×�·'FC1Ø•îX_ú¯ªµ,+�NðÚá-ÍÙk¨OÜñ6è'�°™.’�!é:˜Ö“Äï:¶�%Ÿó.ÕÉïcÉ–/Kâ…)—ÛÒ³T¸&˜_å)\R1’àÒ�êˆÄÐÆ­ ô €[%ùöžDþ²¨‰ãxåƒé“ÿ|ßÒ ÷â`HGjd]÷ s®ü’â`Ïtù–dåc,­`œ?ª† Ò÷HâXS1Øè¾á_¸re)¿¸²‘k“× qÇ �ø£ùìÓ§�qŸþ¿ÿüüù»O4àOŸ¾ýðÓOoßþüŽ5ÊaM|é0ÎÒëP3å„Opã¿71߯WÞÆ•ïâ'«¯(N’¼Ò%+L¾™\ŠÙës¾ëZ»Â*Ÿó\¿6×sÏôk¯©|’³uŸq�³E¿KžYl…WØl×àÎrÏp_3s²íÜ5}æÏ9³íqK¾Kx[cX×GŽÃçØLϼ5[y*™±œKþ»â¯œk²Šq ]C¹*ûÌGs'RË®À¬¼NìJ^3¼ýɯážF˜$>½u’. .Ý¥ëÎQΙ$N>ô‡¬í£²…Í$ñòÍtù%ÅÃ&=Kq·H8=6T Ol(Òc¦¼ˆÍéšlýÅñýú �€§“èKS¹Ä©ì™<q³Ïc*]ØL’G¾%]ëeÉ_�Ç_a'–‹�á¹…<·�‹7çŸÙÄí�£ù'.Þg�ïÿ¯øüìÙ›Xç&îÿ&î…ÿæíû÷oØ‹�ùaLšýØÛíçÆeþqçîþÿîC|ò÷x?ønü_Ü› Ö&ÞsHŸI¶;óÍð-1KœÊç˜ëy•Ï1×ëØLßÃ�å˜á{rßw¶·-¸ïi  Çs®ék~_o×ãЊ—t,ëØŒ-\q$·ÆeÞšíù3×}®_Ê#N#çϘۮ¯q³_±È5};ÕoæŸáŠ“t^…ág¸ï€+ü ëÆßËÕú– l< @*^k¼UZ“pá1î"—Ö:d?*[²Ò‰>Óå¯$˜ã²[Ë‹Œþ»¡J,Ë>°\ŸoÂË“¨%4r Ù: O'¶žà/–&y¥#’Ò+Ûc*=ÇŠSá¶Hçd{iP??¸Â²œùÀÉ!¾xH�¼†p$q>Ä]’øÜ/{&õº «†ó,þrrÀ'ñi{œJ�™xò6¾wÿ&nË÷úýû÷¯ßÆwòg—ÿG|Þr„�q÷†?sâF³'!â$À{.ý�~ø|só!ýŸòfIÆŒ­Ù—Ä(çR¬û\ß[q<‡ë÷Åõ5fú}­}�¼¾ç=ùˆcì‰y Ü¥=Ï|³}g~¶gqÂ%—â²o¯íkäX÷Íô¥|/ ™ñ»Ø+©©õ² ÎPÌL—&gq—àÄ0´ÖÁºý8õ÷›øÛÅjd[Š“òG¯7¤lIq®-•é:ëøÐž{]5ÑZ• &\ºÛUlö/ÙîC×$¯û´Žã'¬ÿfœJ±Ié›Êô¸I<‰ú«ÂNùׂÍÀ§“[›âô—J2cÙÖz∷6/ëŠU¾J S|%SÎ-Òk _v–•/cؾWù‘ÕÈ\8yÝl+é“X·o5þá'…¸Ò2N<‹¯ÄÕï>½ÿ6šqîÄÿêýŸ¾|óâÅ+r¥Á6ÎF¬u Â9v~à‹/þŠÇº?ǧý4üqéÿÇøZ@\7$ürë)F²Âä[“w‰Í¹«\޹žc³íÜ™®˜™ßñ=ÜKãö¬q_\ß»ë[Ös~ÖÝÞ’KI�Ÿé×àæÜÙÖ’Ù¿fÏâ„Kæ<Žgßš}�ؽ9ª=�iìÍ7ã;žuì*,Ob„)Þc¥o‘žg¦k�“ÌÏñÉÑʦ ô €Mez¼$nÈà_ U\‚WÍ¿š¿Ñðãàꯔ¤0IýÕʶø•ß}Kºr"Ê%YaÊ7ó9ŽÎð|dÛ£ê [ºKpr/apðûز�Ék¸­¼`>ÁÝv]¯…Ó±ÅgÜh/~Š/îºÿ>>íWÜ|xöìõ»§O_Þ<{öRë„ô­¯Ù™ãüs=þ²?ùôésìkHô‘ÿ;CüK%I.�ÝW­á˜ëk9�ëºâ›é{¸žcOÜ·ÌõcFgì9ç/î8€t ¾G×}Ž£3Ü¿GßÂ=¬p¾F^ó.öÖ=8O{ªÖ]òå[mçe{6óþ+)¿l—ÒÅA2„KÐ/ø�Äßè]�o¤“f±ºgG¤×6o—’® s™uò€iÏ~°¾<Îð/ŒƒF>í1ûöÚ9OeƒÍ&ëyŒtIùe»týoòœÁëq… ô €+ñ1¤ Ñgè_�C žþú¸Äï6:£’ŽIwî<ƺ_øšTŒ$|éH×åsLœ5L±H†øèÔ®š§–Rð•C:’ž1áH†¸«~T~ñs^ÙøÑ5±²+9ósË帀C§óþÈŒ{MÄwž~€ÀÃȇà¶ë°g¶ãÒJú¾îkÍj� ›­ï\×ÅwÌõ5ÿ·Ìݳ÷=u /Ãc²í>é’_“›×^³µgÉ5~öÏâöâ9ïµí-ûÙ²fÅ©0_/ûg>Ç¥»D¯&ùâÎtù•cÆ[ÂûNüT§ÇwU5™Ç›êß ÇÈ[&··7|Åé-qÂ…9?¶†tIp×+[±—È|Œ• 6›ZÓã*]˜òçØ™­çEÉ[^¿}àú5ýªiøù¥¿Èj²IáÒ—¤û²ŽÍКëK~­ãRœJzžJWb¥KrüÒ‘ÙÎ1²‘£Û=Jj(ŸÿÅÂö¡¿`¬çµ—î~âd+qydŽü¾†ç.¬Êí˜tq%U7ÏWè¾Mס.Ùî“.é±ÂR^k­ê8*,¯·ÄqŸëʱ†¹ßõ*Þý®Ï\?Nt†¯Ûޝék~Ïëú¥qä`x|¶Ý·E¿kül�œ›áü»Úžk¦ï]Ãó䨭>çU:˜pé’ZS~l†Û•.,Ë{Ëî7䔤ÇTþ�è-RÖ÷”!Çêm9”ßua’ZkÍo¯Ôߏ�.[º$|×gñ÷|ÊQIŵ¼§ ô €{*ìC¦}‹ñK4m ÿ+�¾4�¯¸™t®ëÊÆÈö=Gk)N¬%\>åP,ǯ‰O:RÜ,åã/ ?u”D‡Ï[䀯¿n3]y”[|áHù„Í8¾&1šŠC “¬0ù�òågjt¾�™u‹¯â{HùPky]´f…É—¥s]ïÌc\¯rºßõûâîYc϶äu:cÏ÷Å]ÚÇ’Ï÷³•wIÌ5rç—Ø9Æ�e¦ç·«Çœ{ÝsJG®éyÍl+Þñ ÃÏp߈î(ýÐøN+À .û A%¯{½-Ò¿·Ñ…+Æ¥â%ñ)~&�³¤ã»æÈÇ!Û%z¶µá•í>é’ð¥K*GË{¬@Ÿ¸Çâ>dj¾ 9ú«Âúèy ß+•WÒãÑî; 5&_Žñø¬Ïlp¦7üè~ÓC5ú’âKR;~&׸+'6>Õ6Ô1² HŒð™.R\ôµA>1ž{€GSI媤ǨV9.lßúL'læ.é\aw‘—Äî‰ÉÜ=ûßÃÕ:3ÓÅ•t^…¹ßõæR�ó±V“5?ÙÄ‘tì}kÌVžïkkÌVÞRîœã¾í={wM²g†x3]~ÉÏq¸â»t¾ù„¹=Ó+îÀú“•¦å÷^½ÖÓ‰ý›Ñ[&·+]eÂGÌ’„«¼®W~†ûÈuu,d˺l—®çÈ'ÜíU]σ‚[ÞOúÀýÔõÁ²r@})›†Í%òį¿îËxegLy„»�±¼~;Óá+�beKR5þHM5³HŸÄa3¨£šaü¥BGjήÀO>FÖÁ܇­!\¶$9ò€«Ü.3Ïmb|âÓšŽgÝs„®íHâžéK>Å\*•{KüCr´¯JVØÚÞªÇ\Ϲ*ßæ~ו۱™¾‡ë9ÖâÖüžËõ=qÎ%#c²%3§Â+lçÜœáÜ™¾•çñ[c®ÁË9*»Â–ö›ù{¸U¬â]J¯ø` q$+¬ò-ñÄÏ’†ðƒõå1ãköˆì7á_ ØÚ�U^ûé$ð7¼]rÛ ®·XÒÅ_º¤cKzöaßuhä©ta3©õå—-™q·]ïûŒ¨b ûÀù¾—àI<ûd Ò¼ò×e6¡fŸ°J:†Îð¿^²36ˆÇ_/ã²=^|ù�Â$9NŸ4þÔÅO ;Çõp ŸÖERS& ¿7ýâ|ð˜u0Ž<‡ãð4œ–yZÃ%º¦òd)¿$~×ņ¤Viøv¶è„‹wr)ç’OûZâ,ù¿Gîájm�q½ò “\ã»ßõ*Þý®/\?&tÆ×<¶¼~¶}oK>ç¹~혥|Ùw {-ÇÒ±n‰UÇ]w:cÉ¿ä;D/ǯ忶ŸýúT~aØ —d…É7“ãºøŽeÛ‡Ç8~¦{ƒsæh£+Ð8«@õoÅN Ìþ½�ó–ŠQqäÃïz¶Ý7Ó‰¹tøÞ*½ÂXËñ¼ö’ïÄ­êzr¶rïè÷^â‡Y€¦–qúW§¿È<Ù‘0é’‘²Ì>÷� xPž™-©|ÂÜv]~—ZGÒOðâÖ¤>>á¹MÝ”CuÔ åÔU¾'ÅIFš³çœ¡Ùô6.žü_kU¾¯<.á8O¶ÉÏG]K ˜lO'Ý}kºü.]'ç»â^Óžª¼òÝEn‰uŽëk{r®ëŠsl¦ÿ(Ü|üÙ~ˆ:ä5÷Ú[ö¸–sKç¬å»ÄIÌ5÷D®¥Éþ¾fÖeo•kùÆ‚ƒïžOF+]�®ÀƒV`cóZþ=ž<È>Þvùp[º$<×=n�î{Ø«÷'ö{*ý¹}à>){¶ŸN?¥‘Õ YõÁ_ˆjŠ£¿ ’‘˶¸϶xÊYù3æ6ú–©FÝ{t^äÃö“üåã“~ç)’õ‘œÐÞˆAwæÂ1\?xÏs«¤ÖÂç�±•WŒ�]Mù� qÖmœcN÷!]j¥/aøäw)Ýs Cº.ζæ¿KÅ.É%_µ7ç».n…É—¥sgºbf~Çï‹ûklÙ»ï�±·æŸåð¸Ì¹‹íy]_ËéÜ-:ùÎÝkß%6¯u­\äÉSk ÇføšÒ—¤|³ØŒ÷›m*Ò£+ðT :y'ò‘ñ7B tI¸þ7$Çîµ=×Lï¿A{«úÈù}à‘?A[¶M):ô‡bKÈàT[1-Rñå{(É4Õ´{#ïºüðÑÇ^¥W®š×õרÿbï6¹¯9.ÍOCò`­ÚúÀ|H²%I']Ò1×åGÎô?ãkñîW¬c®_âWÌ}Ê*w…UÇ�!ßL¯ü¶'~Æ�á÷µÞž¼ì�á1Ùvß}wlbey_ÙÞ²^µÎ–8çT9ò^ÖlÏ7ÓsŽÏñ³Ç&�¦âdûkºü3In†üYï7Þ£<ýÐø~+ÀIûZAu ü}ð·ù­\³†ù߸n»ÞƒÖ*ù úûÀ7ø¤ù‰ÿ/þ ¼8þ«�¿Oã_ìSTþåê¯Rz¨CÏ6øžáñ7Ã�ƒ^ñ*,Ç)®¦c»O^àºÀq×µ®òI:]C'Ä;û+)ÒQÂÉþ Ka¥yi\•Œ\>²í>Óu(YB¹óו¯Âä“tŽë•¿Â<ÆõK¸Š¹é9]¯öì~×ÅuÌõÊ_aãú®ÇmÑ÷äÞÃ]Z{Éçklå)Fr).ûîjÏÖ\Ë«8IøŒlWXæ¸]é¶”·â;¶‹�á|×å.Ýmx³-\ÿLÏ>åjÙè |ç(Nèï„Þ¢¹-ýUɹ²}�5:Ç#«@ŸxdOÈÒv¼ñ?òÆ…ø—ª?§p’'Ç‚â\×=d†Ã©|`>ãƒk东K¶$M:ºwÿä]¸xŠCò×Îm×+>þj(Wå[ò/ùÖò]»”×|þ?é’ФgYù„9w¦‹;“³¸®<3¿ã—p#©|²×¤øYzœëK¼ì“íñ®Wþ­˜çq½ŠÇϘù„K^›»%Æ–=låmÉ5ãŒÍ¤ýäu³½”Ë}9ÎmçÍtøÎ[²Ý'=ËœC~Ç…eét ñ°]϶|È™N Cþƒuxtl‹^æ©.öEZï t¾¯ '8@þ†ð6OÃÿ¦»†¼•·ÿ]£¬�3GŸxœÏË­]¥æÿô‡€Ëÿ!Ç¿Úñ "šUé9 ÄSàÑ™mà­Ø1Å�D^+ÛJžq·Ñ5Õä{ó¯+àx3/�5/)ŸKþ2ÊŸ%9Ö1·þºƒä“¼K®¥Xòûp;éy«nWº0I–‘¾$Ýçºâ+¬ò9o¦_7Ëç¸rßUÎrz^×ů0ù$�ãºü’•o sÿ}ëÕ>gkθ3~Ƴ}×|³øž×Çf8?Û—ú–òxN׉ÑÈø’-ßš$·8® [“Ú›Çf=Ûk9ñ‹C¬� wÌuÅUX_r«ê´ì ü`PÓ�Þ÷ûß »v�êxîS>íã´ò]U O|{O§ÿÃzüË—ýÇ¡¸ïdž9ŽÇì˜ë[Kâ1®+Þ1×åß"«8aH×iÖ}úItñ+©½àó¦?Ûü•cH¬ƒíEñ»-^–™§¼UlæV¹ÀàUS>d5´6>ê�[òmIŸIÂg>p÷Íôœcƛኟù¯…Wë»Tjo?ÓÅ�I�g+Vñ=Öõ-\çoÑ·äGrK^8Œ»Æ,åXòi]I¸ŒkÚwÉå±3ý°ããs„gLv%3FŽ5,û³½¶_c¦çœ²g¹…Kîâ÷›n•­eWàÇ®€þ¤%ÿM¹j¡´îU“v²GW�>ðèž’Û²üÞŸ �_8FHŽÆMN ¥sÜu£ µòUXŽ«ìY\Æ—lù\¢kê€7ÿº€=‰']’zÉWIò‘tŽç@¯|='îŸáp–|ž#ë[âàh »m�µe…É7“ðf>p÷mÑs¾“í5¾ü³8ð%_/LÒãÁËëˆ#žl—3]13¹5Îy9—ûfºb²?ÛÎsŸãkúšßóf=Û{såø5û¾ó¯­¿×¯ýJVñ`Λa⸜é9‡óð¹]é9¾²çùfúŒ«¼•ô˜[þ~£}«$ tº©Õß ë {ŸYåÞ—¡ÙßjúÀ·ùÌ©_’¯¨i‹wþU€³£Ë�Þ™óh(1¦ëWXÅ«°=9•Û¥rVL“Zhú‰åR<¶tÅ “­ã:�1ãÎð³Çžåt|O>¸Œ»ÆçÊ'™ýØ>œ'+G]�®À=T ÿÎÜCQ°”}àÛ{ÂÕ·!ŸêF¼{¹ýK¢�ŽÎ]†¾KŽY쥹§ctéÍ»óf{w^Ö=·ô¥\k>rø;Î+oï8¹fcÁÇ6}’B[_“3®òÉïy¶è—ùn;o‹î±YÏv•o “o&=ÅqÌõµ8ù=Æuù³¬8޹®XÇ–t|Œµ¸5¿çØÂu>:c-Îý™¿ÅÎÏ'].c¯}IÌÒòIVùgX…WyÀ„KwÛó&[qŽËÆX²Ý7Óûûø‡:öcW +Ðè |'èßÎéý™ëãâ�˦ŸªÃÉ»Ÿ#à‚rœ-rÅ—æVœŽ�ãÖüº®àd€ïÝuƒxŹ\µ&ò’±5n�·æ÷½9×u8Ùö¸‰®�K¤Çd=Û¾=|Ù¿d+6sϾ5Ûc+} “o&}mç¸.N…É—¥sgzŽÉö,ÎqÅ8–õ%{KügÍÏúΓ-éØZÌÿ,¯ã—¬yIŒ¯YéÂ$·¬QÕÀã•Cr¦ç\â­å�_ñ•�±œÛc[ï tº]�®ÀwU�>ð]=�‡ƒ¡��wô¸þ®F‡ æø]±HøÞ@g»â€m9Ÿl—äÂf ½i�û"é’žKX–[÷¡¸µœâeéq®gÞÌÖ>%ÅÛj÷§ÿªTË®@W +Ðøn*Ð'¾Ý§Rý+ï ŸÒ°ªÉÕ!é�Rº|YÎüà§…R�û\O´“9ãÌðS )ΕŽdªI—Ô‰Nàgp,Õ$fÖô+ŸÖÉ’¼ÂЫ¡õ·ú–øUaÚ‡$¸r¹”î~å˜H¥Tè’Üêsz¶µ½‡òåõ×lߟtI�6“{¸ä`l�©¸Ž¹žsV>ÇfºòÌüàŒ5Þšÿ�¥Î3‹Íë.åÈ\Ï™}{mÏåú–<§Â–òÊ'éñÂ�®;�!ÿÁ:< “tž°­RyÅ÷\®Ë/é>åpé<á·°þž­JÓ²+Ðè t¾§ ô €oëÙ̽øÙ=8ÞÁ@r Îów8®Âñ¡ÂÁòâSéãºs3>³Ggè8ÑÁ˜jäÕüÃá8ºlé’ŠU³¿$µV¤»Ïv¶Ä“Or–C¸x’Â%3î6zÔç3Sü£”=“ÐÜçº|Ž¡¯ÙwMn•«Â|ý5½ò ›I_sÆglåŠç13]\IçUØ¿sïK÷¼³ý:]cÆŸáĹï®ö]sUDZ¶'­YÉ-X•ß1å¨0ù²¬¸` qÖ¹í>×+®0Ɋߟú«:-»]�®@W໬@ŸøžV.s“¦UŸvÓØê��d@c¸íºüK>¹«Qù”Så™a9¿çF÷¦�Ô‚u‘®Ã.™cÝF'ÿl†ëÎÃsïIFÜžá|×Éávè˜åeä«dÆ<=>÷߇­õ¶æ®öSažwM—_Òó ›ÉÌ�ñ*¼Â”¯ò]‚yŒëÕ:î¿/ÝónÙ| 烹-]rKLÎQÅ,å˾*_Å©x¦X¤ëÎÍ>çI‡Ïp»Ò…e鱕ÏýèânµÅ“Ìñ‡ìOüÏÊÑFW +Ðè |§èßÞ»¥—~Ê»'æw=Ù¦ ޹^•¿ç¯8kØZŽÊïûÒú`š4ëÞü³x|=é'”ßcsã_ÙâKFÚÓó±f;÷.z^go®�ñМ*=K–wlIϾ-öGëÃÓ¼ËqnWú^LükÊ¥\îs]5]ÃÜïzïþ½ú,ßÞ<™�ÍðüäsÿL¯ò8w-ï–øµ|Z£ÊUaäSN—Kzå›åvÜã*ܱ%_ʽϼawÃ_–¥Á®@W +ÐøÎ+Ð'ùü4F±Å ´hXŸÒä2x‡äï’²=HGø%’5¦›³„¯Â,ä– _Ý›uN°M|jþ%‰ñZy¼ëÊ�Ìz@g5Æ^ä¸d\—×ÒqÏy³}ä9\éÂ�[õÌÛb¯å¯r̰=8eX[[IÏ¿„Éw‰Üã\×µOÇ\_ó_ʽKœÇ¢3´OIÇáøàþ.ŽäÖ\ίb®í÷ýo]O{@.éÙçü¼–¸Ž ó8aÎË:6ùdå±ú•µ»+Ðè tºQ�>ðí¾ Fo�*Ÿö?�¯<�'sœ-P³«Ców_Â�þîÊuçˆ7kꉛùrÙ[b¶p´7I5íjþ}=®Pã�N~Ÿp‰c*O–ÎGgH¬ÃcƲ=‹óY÷®g^eÃ׬üŽÁ‹çól‰¨ƒÛÒ% —.)L62ë—ØÊ“c}½ì›Å8>‹YÊë¾Jß‹‰¿GÞ•ëñ3]µ™ù®¯‡®¡µ%Ágºb\θÂ%g1à™sß¶ïEú–5ÅAj/½ògŸøH†b¤ËvéúäèÚOF+]�®@W +Ðè Ü{úÀ½—ø* lê±iX!2Ñè¼»ª&~ç%Ý%º—.Id•s sÿ]ÏÁî59—ä"&ß?>·gzæ­ÙUž5l-ç¥~­ëÒuåuÌuü a[tq% úÓÿQ‡~è tº]�®ÀCV OÇ\W=CgT¾ ›q·â÷Á#§†ï¹ÂÜï:Ü=¶¸kr-¯â×öšóxœt¤ëã¸ëÕºWù«øþ©=UªeW +Ðè t¸}à� ~ËÅ»«q5¹¾J&6¿#›ÙÊ…Ÿæéº0xjÖѕϱ5ðð5¿úŠ|b}llÕË[ .ï¼f“Íè�Y%G.t-à:9ŠDZAˆ÷ Ë²Ê 'ç—­øªñ‡κKS<¸œ@æ©õ�Õ x ñ0²®¸óË£pçñÞÖÄËÒ™žÓy3œXñ8vô¨™ —kºRÁËÜK°œO9f¹ïê¯Ö[ÃÜ_éK˜|[¥·Ç¸.N…-ùœ¿Uw^•Ûý茯Å;¬~xô=ϘۮÃ_²g>pùfzÎ-þ _ó¯ÅUñ–ó`ûðágX7ÿ*KË®@W +Ðè |½ ô €¯Wû»®¬~ö,O4ng¿È»/Ÿ"gLïÒ²t> 2à¸&ÝýØkÃù•ÆÐnKÇ�®Æ•Oùe£3ˆW—èpÅW¤tù:q…!²+}ìÁ¹ßRÅ“„€ÎÈò€žïC˜ó]W^I|sŒ‘þ¨ Ð’òËöpéò9w† ÷Xé9^øRŒs\ŸåÊx¶•#ãK¶û¤KúÞ…í•9G_aKqß1t†r¬/¶ã[ô¥\{|³µªyϲ%÷ärn^Ë}Ò]¢Ïì½¹òÞ•wKçxœã9¿ìJæƒÓ�UªÆº]�®@W +ðu*Ð'¾NÝﲪ÷±4k£—õFM /ïÄÔ£ûÔCg¸”_ 3öšî9Äc(÷Á:<ŠSåÎð•Çuj€-Lºðp�®á:9™ð¥gIœcØ 0�JWŒ8’—-)ž$8Cò`—bÄwŽcÊ9ñ‹ê4-½æSJñÜ–îy«på™ù¿&süš­us^�sÝùŽKß*«<Š•O¶K×Å“Üês:£Êqð|ñmáä\{ì­ù«œ3 œ±'÷¿Ê# YÍ-ù<‡ó3î¾Ktb4”[öªì†µDMè tº]�®ÀW«@Ÿøj¥¿haïWO â+Oùm{W~IÞµ-5³zW'ôÓ»_Ç„ƒ±¤ëÚ”bd+©á>aHås½Â²[{rŸÖÉÎlhÿK²ò9æºÖ†�î¶s*\~då&)>¶¦cYÇ%lÄQå8‚)]~·…eÞ._γ„WÜ5Ì÷äúÒ:™Wq�#]ÒùÂÖd#¬ŠuÌuÅ̤s—ô%Ÿr/q²o¯}éÕ:`žlÍÎçW:Øl*W'ßL*&Kç/é}C>ªÓ£+Ðè tº?HúÀ·óD«—õ?}Ö±ù'pñ©®àCï I‚�°­“8qµlá¡ Îï`Í•†tÉŒakMI°<ï2s² W£Ò…¹t=ÇÊîºl°ŒãcÈçÒqéYŠ/\62c~rH:Ró3N(>ÜJ9òm°á)Æå>óižç.z^gÍöµ–¸î«ô%L¾™ô8Çuq*L>ÉŠãXÖ×ì*ïZÌ^ÿµÖ`]†çÛkÏb—ŽÔÔ:²%ÁØY—½&‰'ë#wR?ÊÐ]�®@W +Ðø¡*Ð'¾Í§›Þwô×oBÒ°ñS€jüC¶~"�w� Ò 5}øf“<ò/)Écdû€Î•G±Ê�-Ýeæ¹O¹$áîäÒ¨t0á3I¼û².Û×ó)Ÿ¤|ØÒ×ä®7û®“[¯[’”Z~ÍO2ó×pù‘ ·¯¡çœÙ^Z7sÝ®ô%L¾,}ý™Ïq×[aòI:g«¾•çkä˜Ê®0ϱEß“#s=ÿ’oÆs<ëØÂ¤Kæµ²íqîîØ’Ž¯?õU臮@W +Ðè üxè߯s®žúÖnß�ÚÓ÷!£±7ô“üB€Þ’Oºßé^ͲޅŠ/ÛýÚHöEÊ[�¿¸øòеv¥ SNâs[9s.Çgºï«Ò…-Éìc-aZ[S˜¤p—îCÇÇÈR˜b³-w_ÆÝV¼c×ÒÉí¹²-ßé’k±#_ò¯²¶ì tº]�®À�W�>ðí=çê�ÙùÓ¿âáo1¹¤Ç™3ì_ ×'ÿ<éL;Þ5Îf¸N>5Û⺠O¶t¤¿#Åöáû‡›s(^¸$|éYºý’¡u‰­ta3éqâÃv,ãÙ—ý²gRù—¤ú%I¼üÚ¶ -!H¶¤p¤°,×|Ê‘ã®mç}dÛ×˾%Û}•.,KÖËØ»â\ ó<è ísIϾ»Ú¾fεäs®x3éÜ-ºò8w “éºÇ£kˆSÙîsn¶G|7ÿ*cË®@W +Ðè ü˜èßÖóN¿«1ô¸`|÷_Ÿþ‡óìgiÚhüõÉ?O¸-€wˆ[§šmñ}3z§)N¤=;�­!®l¤â”NÖ…)Þc2æ9¥#gCñò»]éÂ*¹„y~xâ G —”Oöš¬r,ŨÑ?J¾óÿ9ô!ÑÙ’¤m¯Ú–0䈛Hñ2G82ûîÓ®Ö«0í!û–lù$É!]²Âä“\㈇dˆïº0ÉÊçØVýRq ßÏš½Ä;œ ¿8.¥W|0†8’Vù–xâ#¥Ãר0|Ž»¾×�¿ÊÓ²+Ðè tº?vúÀ·ùü«77ä`¾ ƒ£øy²™|-@_ vi†{ q´°l$ÃqÙò ‚=ˆ+H<ð%]~IÅK:>ÓÅ­¤ÖÆçºÛŽKÏr‰W|x a’ôð(L1[¤s²ÎëŒyløoÙâH*ÇaG§G¥q·c®Ÿ‚ŽŠû¤ã’þ5älý­xæ¹-]’㓞å’/s+Û1וw sÿ]õß¶#k1„¹ÌºlçÏtqgr-ÎýK9àUC1î«°áï¦ßËÔzW +Ðè tºT O|ã¯Ý€OøÕô"5hâÔøóÉ?_  ùßz€w–Låv;à3¶ÖV ˜ð<”¼ŠW®-R9ªuòºÙÎ13Ûqé.]g laZSXÆ�Ÿ}²+ æ¸ì-R'$‰ñæ_x<7žN‡²´eq<.ë[89æ¾ì|,Zg+î¼5]~IÖ’.Yaò¹œéŠ¿/Îû˜mÕéS{v?C˜ëÂ֤Ǹ®8DzŽ�‡Çeß°»Ù/ËÒ`W +Ðè tº©} ä›ê�Ïdü àøÞ†ãéQž5ì4þ<Ñ4ÿÜ,PWÀ¥¹ãä�¤ÞeºDg²°tIaá:ù³Ž­¡Íc“CC¸°*¯°™$—|žW9…-ÉÌu{M¯üs[ûó¹„;ÏubÜFgdL¶|—è>ábGMÖi“”Cöš\âã[‹¿/ÿlí­¸ó*}/&þéש•Æš¾æ'�8’Unç]ê¿Fí™ua’Õ>=Æ÷ã1™ã¼Mz7ï*}Ë®@W +Ðè tî»}à¾+|¿ùéw?ECÏúôõq>à ÜÄ|óe€b> ' žÅ2Þ±º�ó±ÙSÓWv`j°õîWï|…ÇšgM8¸†¸²+_Η8á3 O>tF¶èúcÞ§Ûk:~q\Jguq\jWk˜ò¸ô×y>Ý–Îäà ‡“BšzéDQØŸá1J!èi›Éñ¨TcLtføŸÇ;×çÑÔýD£ì3üjøNM4ïr™4Žò hø� p ×…­Éܸg{-þþ¼o·+]˜K×ÙvžÚ«ðO~—<nÏtñ�¼XhòÕðsÆÈ§pd¼¨>#ñ‡äÆ€ -ãº0äl8g¦;ó]WI–ÖÛãË\·+}/&~%×0÷»N=5Öô5•lKÜ^NΛmÏWùðûGq’à ·¥¯ÉwËîOü)I�®@W +Ðè t¾FúÀרúuפ§£Gã¿ HóOƒOßÌø=šÿÑ´3CöâØTÿ�Ðé€{º#ü²y·{lþÎ0p½ÆŸ!,ëÚ�ûG@0 áØ•.L²ŠË±ýÉ¿ªÔ²+Ðè tº]�¯R�>ðUÊ~ÕEéÍü €ñÉ`àï¢áý{4æȉ€?Bÿ=&?ëFóÿ+$šb&�‘tšyÙ¡–�?ïzý�¯tIâ\Çf°£ò<‡GxKù%›mp0ÆR¾ÊŸù²%=F˜ËJW ¾j®ù«0u¶YfϹ.õ§ácS'ŒóŒ¯DÞjéðŽQùÖ°»Ä®å®ü*�û؃ۮ/ùàeÿÌv\º¤çYÂäC2rœc®‹çØLßÃÍ9ÖlåvézŽÏ¾ì_³��-l¦¢ñÖlåƒçú,®›U¦eW +Ðè tº_­}à«•þj Ó«é€>ùçÍèèí¢‘ÿ·x’ÿ-šÿ·1?Ťæyÿ5HŸèˆ˜4È’jþ‘$Z›AC2ëÃijÊ�'L9°Ñ³´4«ªbW‰G‚Ößí5]~¤ëžK¾­’Ø·êhá Gf�æ__àE‹‡“Ü8B'ˆ¡é?žàjN1´•ƒõÅ.)ÿ’÷!¤Ê�×bs{¯ßù•¾¿’޹Îþ5Öô5?y¶p2/¯OåqéºçȸûrîÊV¼Ç séºò¸”†e¶G\_òïåk½+Ðè tº]�¯Y�>ð5«�µéåèÛø =;=Woc¿Œ†ÿU<ÉoãÞódáYÌ_Cý-:¢['H@§ä’w´šøh¨‘pzç+éØ ,<,5镯ÂHŸñl/láÌåÇ€Ãí%]>—YÇ^›Z³âQû ϘóЙ¼8ôáE¢Kÿu[¼cÌg^`Ä„­%Â:éÂ�>ÿÚ:‡²´ö½äÇǘqÜçºÇ9.]r O\—®+‡c3ýRî,8Ãó�/>ù¥gÛs¸Ïñœ·²›ã„Ïd•K˜¤be#+lø»ñ÷2µÞè tº]�®Àc¨@Ÿx ÏÂÝö@oFߦ^w|ò6ßõÿ3. ¸‰æÿSÌÏñds#À_‚È�ÿˆ®èÖ :%oþ±}¸�w½špô.XÒ1ôµ¡€‡Îð\î?x¿4v寒ZC>_«ÂÜ_éÂ�®“KX–ZG2û·ØÞÝ¢¯Ù¼`fWp" âǧý¬}Ì7.ÿ'æ8ªmáªðk`wÉíåXÚËÖ5f<Ç×ôÊ¿„ɇdp É-ú5¸y�=v®½b…»-]Ò÷. ©áþ=úŒ«¼•ô˜[þnøo•¤�òð»g@IDAT®@W +Ðè tYúÀ#{B.ØŽNÐèÐüóœòU€!‹1ùÈÿiœø5@nø�h~ßÇ;Ùqgwi†�ÍÞ�4ú¼ÓÝ:ƒzêFü²ëpÖÆ–&~ ‡ufÇÄÉÒŸ‡™®üyâãù�ÍðÓùˆö)ž¿�1•Š0. øWÌ—1¹(@÷ä–ð4´É.ÿL7óeüÒ5rž™½g/äÈ|·×ôÊ¿„áchÝ-º¸Yzì’ÏyKú’Ïó£k*¦²å“Tl�Œ-Ùg¾nþU–]�®@W +Ðè üˆèßù³N×FÓ�¤Y§Q§Ë£ñ—Í»c½C®¦> �!5àCG(Þ’T\–Ä“ë± ÕCûr[º$éH×å~©.Yåq¿ëéd_ûøs¼4¢öãåÏ’É…ÅäÍ?6'ð‘*/ÐßcïÍ-ÿN•cO\溽¦Wþ&Üå�ãsžÛ®i§—nãØ^Ý×ʺ۞w†Ãñ!ž°E»›•©eW +Ðè tº?júÀðÌӽ鉦I§ù§›£ñFgð®Y�8’ —É�O: ¦ëðÀ�z.)þÚð}À•-¹-¿ö®|nKß"�ƒ¾eR/ñ¤K:¶4S㯞<ýÜ‚—ÆÛxn‘ïB¿ðäUØ|ú�ÔÄh¡ž†¶t ©¤[rÁÝÂÛËÙ“7sÝ^Ó+ÿ îr‹Î±‹·¦‹wˆ8Ô6ëÊáÜ «üâ¹t½Šq,ëØ>”KX¶û²U¦eW +Ðè tº?tÔþÐEøž^Ýòq/ïˆiäiúiÔ¥‡:6Ÿz:>8麸HÖÈX@' ýk ö}«#XØHæº-}‹túžI—øø×f> |¾ð1&/ þ7Qš|îÿ§)Û¯€ÏrŒÙ¶ÞÛ�3þ W†™_8<é×’{r:×uöâ¶tI÷WXö‹ƒdlõ‹ _3c²‘ åv} Ûâ»”ã{@×ð|Â$K_ò¯ò´ì tº]�®@WàG¯@Ÿø¾^¼ùU¯Î‘}Ž®mÜô�Î.~`8õ©? »t‚˜ÂÔ8º?ܧäpé%gÍ¿¿î–‘fK̵8¾orº-}IV>°µI�àHºæÓs9Ž®ç™ìñ€ˆ}Ï/ >éω>ñÓ•ã �£½ö€ MŸßú’NÌ’c�s‰K^縞÷%Ÿ¤û+,ûÅA2¶úÅ…?›â Êíº0É%Ÿ8YzŒëâ�1ÖìëËcæñ�,ÆÐFW +Ðè tº]�¼}àxÐÍÅ»àñF˜æ[—ÿ£ëjtÙ`L5�¡ž5þjú%‰#9�¦ôPÏ0l�oáyÞ£ÛÒ—då[šÔ/û+L|š&_:ð)¸ã!¹ìŸ+¸ÔŸïüëÆã+aó©?›IÊ<´ô©[böps>b3¶Õ^‹Íþ%[>Iö ]r gѸŽW˜üø–¦xHF•KØ’œùrÎ-6†r¬•ÇnøW Ôî®@W +Ðè t~ø ô €ï÷%Àç§to4€H5ú¡Ž¦žͼ|4ÿàt{Ä2ð3�Y'/\5ÿ®|ë¼üø|Œ ;ðuöâÃmé•\ÃðçI=“-‰O:RS¸ì,½ñG§ƒ9®•—ĸ žONü’»ÿs%tÒy ¥÷­ÞU�%ÆØ’⌷ä›ÅlÁ—òfß’-Ÿ$kK—\ÂÄAñ ®ã&?>&Ï¡t—â!ø4¤»t^egLù$å—]Ênè˲4Øè tº]�®@Wàâ ô €‹K÷íÒøñn›wÿ4ïjøÑÁ¼ñ×'ÿêüW|éÊ®²ùWnIx&ß^É~¼›ÈöÞ|â{N0ÙK²ò9†î“:¸]éâHÂA¯l0îÜ>â|%dÜ òè¯â5ð2æŸÎÉ€j ÚêÈ13[‰f~á[yâ#nïÕgñŸÙŽWúL$CÇåz…Éï/¿cðK9äS¼óK¬›÷QÓ~è tº]�®@W +ð¨*Ð'ÕÓ±¸ÞdÓÛúp¬Ôãc^.ùæ»ÜoB¾Œÿ ù·°¹%ÀÏ¡¿Žùóhÿ�ÁOÑ$Ž'ð�:(H³�“ Ú,Ý6SÇä ÷XK69³.Ì%qðà Ùè⢯ Å‹ç¶ô%龬cϦ:²%‰�FÞ¥ëáûö'¤f<‡ŸxÄüúë˜Å âUț༉ù.bÞÇ uº=JPƘ†ã{¸÷˜tŽ¡ÚOÆÝÞ£‹+ÉZÒ/‘U /‘ê„yÌL¯öUa9»GW +Ðè tº]�®À#©@Ÿx$OÄŽmð¦›ÞÖ¥ô* ß÷~�ÝM½ ý_Ñ€ÿDzù§È%ßœ ø%ô_c" Þ/Ñ þ1g'‚w6ÔdGÌ©±A�?6<¦0·ñ3È!Üm×ÅÉÒ9èÕ FƒuªáünKß"�“õ¥n Ÿü•”ŸN½�ŸâyûøGd4ý�Gì&šÿ¿BŽ¡¿ �×LJȧ%Ù²Ï0Çpl�¾5Þ–¼¯Â” CöV9‹É¸Û®³ŽÛÒ%Ý/,KçÌtbîw{ö¼ÂWŒóÑ•OØL"û±+Ðè tº]�®@WàQV O<ʧeó¦xž{Ù3,œ|"}à“›èø_†óyÌŸ¢ÿ¾èýžüóo�qUò·hÿFcóçà<õ¬Àf°0¼ˆ¹Õü4²jþéLði’K:’!l&¬Ã£8ç~éð4XÇmð%[¾J:†^Ù‘¹3“�t]Üãór«ùr\âOSï3^ïc¾‹É €W1_‡ÎÕoc¾�¸ê@ìb ßòšNÀŒ³ä›Å\³°¿¼VµßŒmµ�Wé²dOÂ|ŽIÄx˜Åx¼ô›sd¿r;~ ëËÿUÆ–]�®@W +Ðè tWúÀãz>ÖvÃmõ«ê�£7ôgx4zŸâã~îö~ %_ ç“ÿèûÆ¥ß|çûï�ÿþqxøž†þS4ˆ/H®Äè -€”>Ńš~Iøè \鬑ó9&]’x�Œ¹íºøYÂñ±dË·$ñ¹ßuŽYþ,åCj©t~pkü¥sé?W¼?6÷oây|_ö˧ýÌÀiþÑo�as² þ)µ­0Ë­‚/ â5”Ë%>·³¾æÏüKlí/Ëœ+ï%Ûðs}Éç<é3™óä=ºßsHÏü ÓP>ÙHÇfzæy|ë]�®@W +Ðè tº�¤}à‘<lƒ7âôÌHé9Íç |Œf�ïxßé§xÂ?EÓý!ô7!_Î×þ=&7„ 1>A擾@yöî[C »6 á�Æïs|™ŸKÃ߯“þ<:ˆçÑü?Òßiü"ˆß‡çW~ Îï!ߍ)< %D2iâ…�HE|òåæLybÍ¡cW˜ü’AÝeæf;rT#ãnK¯¤c蚬!Éñºí>Má²³,š®ã×4÷\öÿ:šÿ—ñéÿ_ñ]�?Cq|ߟ+Cx~9Y0dè,á[ óÌvŸt8yÈ')¿lIpé�IVûÊØÛ¹•. É Œª&zŽ$�«I÷Ítq‘›G7û›KÕÄ®@W +Ðè tº�ª}àQ=‹›á ¼ú\ˆ²‘>�ïS|}à“ñÀeþÏâžôàÏ"èY¼¸üøä?ôqÀðý#||màSœ$8-Jb¦ÿ‘$ì<òð{Ó�­Ü–¾$ñ¹_v%½ƒÃ�­™máH5þÂd#÷ˆçt\'n¸ >ýÿëÏøˆ�¼FúàŽmsĆº†lIá.ås)¿cߺÎ1ù1¸í:·]Ÿùç/�G¬ž'—Γ.¹´=¼üð{tº]�®@W +Ðè üèßö“Ìxz䥑‡§Ñª¯Fçgþ¸À«˜Eù{$cþMûo�=óþg�ÿ ž1ƒ÷,NpÓÀñ»‚œ0`AÉPO]‹€ßåi3�»æÔ&\F%ñ3ðIÀ†‡Ìw[z%Á—]Iêå¸lälFí¹Ã?“&ŸKý‡î2ôWÑô�ïü›ÿqã¿xžßƧÿÜì/à³¥Ã\´µÍ̾GV9¶b[Ö©rm‰[ãä¼Kö’�u*¿°JúKƒølçœUŽ[œnþ)S�®@W +Ðè tº?^úÀ·õœë�¼zÞ;ï>}ŽŽð}\ð&:‹WaÿÍ9÷àëôéü2À󰉦ù<@nÈÏò“‚œ 85ü®s€áÍ>à6~&Ï wÌur�d k¸.l‹T.qe/I|î—�%5–ulͨõI;ÚºÄ\ ý‡˜'=®òà'þþŠç”7á?óñJ§¥‘Œ%[¾Ì¾&«¸=XÅõ5+…å8 ÇgzæÝ—íy]×¾x dLcMXýØè tº]�®@W +ðCV O|›O»Þä{ß»÷HFŽhùþ?7„{ ;? øK$ýùø >Ÿ4ók\ ÀI�ßÂÿ"ü¿EÌ‹˜|uà9/":æ1îÔ©° ¿š~mX6~°-3h'^¥ƒ1È¥áº0—ò³�<2†-¬’òK’Oºä¬‹Ã¯"Õ­»S—øóœ�Oô%9‘Ï'?ñÇÍþ^ŧþ7!¹ù#7úã{ÿÚ’áö,Çíµ«µg9Ö¸[üp4|� Ë~·Ñ޹ízÅÝ‚å¾/·=qŒ­Ø�Ý�]�®@W +Ðè tº?TúÀ·ýtófŸ67²óÑ©9½o<|Ž&ñ}|¤ÿ&šDNðšø‰f1šù1oÿ#xL¾ðGLä“ÿ_ÔÈÓ™xwLJ6$>6:ƒ�l™Î­t0¹H?`aH ÷»¾ä‡'®Ká’ä�.©e‰,j=•øbrÓ>>õ§ù§¹çF|ÊÏ¥þü¤ß 3ô!CWwLÍR mIr+&þVYå%6ãÙöüöí=;Çuñ—rÎø³Xá9nfÏÖÞ‹{~ézù`+ßQ=½4§x_þ¯Rµì tº]�®@W +ðãU O|ßÏ9 ‚÷Áê�OG�â§è&ÞǧÅoÂùJŸüÇ ƒ›ÞÄägÿ=&þ÷‘�+hþŽž«FÃÊ ‰Å4C=ëDàÉç'À°ñ¯Í œ8•Æ Cò`+ÌýìLJÛÒ‘Kºü.É5qKR]:²ÐùÞÿ§hêǯ9Äs÷æØð¿>~Úϧÿœ'øÞ?30Nè ¶â[ˇ"_Å“ï¾äÚšøyý Ëœ»Úy�½¶ÖÏqÂ/•Ê‡Ô —†ëOºùWYZvº]�®@W +Ðø1+Ð'¾Ýç]oì%gG‚©ïý?÷!šp¾À%ýô§|Â<¾'ÞE‚è#Gçůð5�áû’[‰?eMxZ)?’¦_?séd|ñ*]ù¤ÕSä^ÉÌ‘]IÇзL?�ul5ÿYŽ'&žŸxnø‰¿q—ÿhð¹áßË�Üéÿå±Ùçëâ ±u>!o‘lÁÄ�¯!lM¯8^a9¶âTXŽ»Ä&/#ÇfÌm××âä×KAöšô5Ð}{któ«$ tº]�®@W +Ðøá*Ð'¾�§<¿©§ÖP³ {«ü�ã縛ß{®ý§ù�¤ïâë7ñ Éÿ%||ï|ò8¿ðsð¸'¿'Ï €ñ��¼96€�É@j“YzÓ�OqŽ{ž™®u� ñ²>œ Õ±ÓÞ —ž}Žg]]ÒuxêУY/OÀ�f~\@£ÏÝø‰¿¸»ÿ_ñü½Œù'Í>ÏKL®Ð×�#>o'2n—ùÙ¯’3î ¯r8viœçXÓgkd|Íöu2W/q²-™c…]ç¢þóz´Õè tº]�®@W +pèݺ�¿¼Ñ÷~v¶c5 3¿p5äüñó+£± ÇÛhúiôŸÅI€Ÿ�ÿF—H?Îwþ_ÎýÞ…þ°Z”Äš¡ž}â�íƒxòˆ/ G:’!Ûu0r0ÄsÝýƒ´áAùD•�Ìze‹—%Ý�:¼Jç$ÀÒÔ €øÔŸo¢ù�ÿ+šÿ>yòÏc£?–ˆ¾ÞÁd³í‡zzê´Í [ó-Å(Vr+Cq[å¥1c±â¡Z7¯±fçÎ÷çd¦+Þã†Þ >eèÑè tº]�®@W +°§}Àžj}.oòŸÆ(–¦1`H¬Ãc…É�ÏóaŒfòSL>|Æwšñ©??ÿ÷·¸óÿñ‚ù2°¿¢cù{4îÜpl�&þØÈ[IðGŒ&_!�þ4r<‹¤bO‹ï¤[®3,('�WÃu°l‹ç’u}Èv‰^ÙÂg’ã¬&ühü?‡�ïùŸ$'°ñÅä“|¾÷¯9nöÏÛëøÇë8‘ó:âIï[ ³´óÅ˸çª|[üW­SaÊ;óÉï¹g˜sÈçÃ}Kºb2ܱl»o¦ë9“„'ÝóIïïòS‰]�®@W +Ðè tº»+Ð'v—ì«Ð0¼—UcqðÅ&Ûãä[’4£\>þ.Ð×Ѭ¿ =>l~ò 9N��ö™¤[«fÀ'\:’Ÿ!y°n?ÊïÅp�laÒ%Ý_uvÂ�L:õ™¤á¿À0~ê/lîÞÏÉnäÇ�ÿ^qÓ?dÌ®À{Éßñ×¶fRÛGŠã˜ô%Ÿ8Yn‰ÙÂQÞ=\ÅÜU²&#ç9 ·ñÌÛbó2ØÂó5ûÓU£eW +Ðè tº]�®Àî ô €Ý%ûj4 Þ«¢ƒ1ÔD¬/¸|Š“†+߉Í&—ž«}M3Ï'úqŸ€ñ“taÓœ’_—ý�µ"Ñhþ�ò×hì ÞïÈèzÆÍC§ñîMÖé�„�EX¨˜�1MÐõAš`ø¼•–§âÀ½£Ë:vÔàì€ldøÇeþ¡Óôs“ŷȨ·&Í>—ýsç&zu@d;ж[aø„‹'ytÝ:\ù×ä%ñ³½°Ö’om/[ýÇeʵäÛšËy<õnïÑ}]é-»]�®@W +Ðè tºU O\T¶¯Dó@OëRÓp]RxÕ;OºNð{ò¯#øY4ÿŒ‘à]دÀŽÎhúC'¸*€ï¯?�Ùo1¹_7¤¹¥©ç“~ià ¾&›’.ɆÁ«ð —^I0 òÌkiT:X5‰Q——%|0æ±&§É_·ì}p9ðúø ?’Oûo{M?“çC÷€O*m-ÔÓó¼„ácˆãr†;g‹¾”§òUØÚ:—ÄxNâ޹ž}ƒ||pžtžjé.g8†s;x!Ä8­tº]�®@W +Ðè tvV Oì,ØW¦óæŸþÕ%[ÂVc îCøRÿë|é|Òÿ�†3r>±W“ú.šü7á{/"šüñ5€èBGóOóü§q#ÁßC‡ÿ)擘Üàyøøú?=x«é'.:Ílƒ3$]¯°A^xP¡ d»špÕݹÌzÔëtÀuº÷˜ã €ˆ'ÂÏ'þ\êÿ2ô×!ѹââÝñ“~ €¯¬�`{Ú¶ë:<ùdgŽû/ÑÉǨb+¼Â´·*Çšo)f¶–rfÿš]­¥—�|n{¾J£›U¢eW +Ðè tº]�®À¥ˆ¾¬Çc¯oüí—h"èk]êÀ.�{ðž?Š{Ž~±Æ € ½�D4ÿã“ÿxἎÉOòÓ€ãNþqe7äMûБAúG̼Øb> ÞóhbùZÀ‡˜ŸcÞ:@6†ÉAhÒ=IÇ�ÎÈr† òƒ$ëØK“½©»s‰Ç<~fÁtÍðs€›¾�Éeÿ¯CÒôÿ�>óeØ|Ɖ¾žÁ øìy×Ö].éÙ‡}í)ÇØ’âÞ¥œµüÙ�ÍÐz® CúÓ^áÂà1°Â¥ÀþÄÔ¡º]�®@W +Ðè t®Sz²ß@N¨qðF‚#r[½±©ü•ÏyOâ7æ?ħø4ªãó.æMÿM:ó§ÐŸ…$Ïøô_2ðaÿÍlüVàç¿?òðË¿ÿ÷˜ã šøÐO'ÐÙœN `�äIúÉ�pÝ: “„ã#㬩Qé`k“®N®ëQ¿S³��ý™ ü���!¹ÄŸ›þÑüÿ+~êïÏð�+0�‘Ÿ_ 8Ù‡ðxxG¯ì3ì¿E|t=?G¢ÑäþWüWüØÛhîùjw±I½ù—~ô�~Yà˜|üô ë7!ÿôD@pO>ôj°–†ô£™ë±uiCª³C2õ‘¼ÛP'¤KΧûãnÿ¡¿‰¦Ÿý½ŠÆÿeÌ¿^Ç í-dÚÞðd {†9žuÅ=¤äòz[±*ŽXFöÍìû6?çpÛuòúKÀí%�ctÓ¯J´ì tº]�®@W +и¯ ô €ûªì=äMWäªÆ††„fÝýr5ˆŸ�#®pÙÄßÂà“j¾»ÎwÚ¹¬�Ÿü5&÷„ÏúÕ€|"€¯@âJƒŸ‘ar/‚“ |üŒ ‰–f¸Ï\:ˆJ±O!cûO>†=~<ûºNŒc�‰ØAI³®“HÙ!¹£ÿŸ1ÿŠù:bÞÄäF‹¢‘Š!9ÓåGnÕ3O±÷%µwÏ¿«¸žk«NFÅÏx¶«azêe{,úÙèæÿ¬mtº]�®@W +Ðè ÜSúÀ=ö¾Ò'h04Ôld)ÿ’Ìý°s} çUø-,º×ñ½öh~o¢™�;Í? <_ Qz£ÑŒãÓ}ÿ˜ã^�ñ-&' ~ ùË'Ž' ÆIé’¾i×#ÇiD®1�Y?Úôê\­À¤):’‰äÝŸlkôO—ÿ�„Á?ú¸™µø+l¾ï¯_x”ã6N2 R‡—¹«lå“ï±ÈÙ¾À{öyˆøòXÅÊ›}àŽñÔº�^aâߣ+Ðè tº]�®@W +ðÕ*Ð'¾Zé/_xrÀ› é’Õb³>¸â:FNÊãø�ëø^{tÉoãÇwÚŸùÝ|Œ¡ÿF@4ÿã§�M¿šúgÁyï(i¾±9QÀ•㪚ýÙÔ†‚r#Ož�……Ê'ÿ¬Í§òo5Ö®+FL·~qØt†3éæ ÉÍüÆ�ÿ�1OWD¬ˈé� ¶Ç�”.ÛeÖ³í±ø¾Æœía†ëðkhß²]Ê—åŽq[ϘëÎÉúX³?ýe臮@W +Ðè tº]�¨@Ÿx€"ßÇjâ×h*|ä&ƒf„¾Ø½oŽsÿ’^õÍâËç¹iê?E3ËwÛoÞ.×§¡çÒù÷Ñô¿‰Í½à“ÿð�OûI“Ÿ2ÄOq¿ÌЉåÀ¹àÔø“‡ƒ•”®�Áed옳”¸�ëòiÿ›àÆ×òŸÜ†—ëÆ×Κ~r2M¿7þè ç«ü´âML¾.qƒÿ™?Ò)­d…ɇt]ÜŒÏlá)óµ68CöLXÛy[sÎÖÎÓ™õ*÷ØŸþ £º]�®@W +Ðè tºP�>ðE~€%ÔtT’åÁ5è}eW}°x3©X÷+�ûNX4³ã €øäŸÆyœŒˆOÿù´û]tï7Ѭÿdøú¾¿N ;pn HCü!:,š¬ñÉH¾À§ò§¦ŸÆß§ŸÐ†‚2F¶ÉÃô.NØQ²Í8Wp,¯B’Ëö‘œ$8=æX&|gÍ>¾8žÓ<Ú|UâmL.ùg¸o÷à¤tÒ05*]˜Ë­zæaßçä8fù×|ø³ø ?D|y¬8¾°šð,yê2–m2€i¸.¬eW +Ðè tº]�®@WàÞ+Ð'î½Ä¶@n:d³54£èê}]‡W�­Åzî�EË/Ð4?}ë‡MóÏ'ÿ¯ã@ü(À“ŸC'îÔøK'Aø~¦Žx>ùç2{z|>ùçk4åŸà'Ÿð‚Ö ×Gòðih“Øè‘cLïæ\Ç6Ÿðs€æŸOýùž>7ìãçùþ ?C¿P0š~áÁ=­Æ<æ¦Ã'~ü@`Ôè¤~É R3\f}‹ 羦öWåÇǨ|΋0—k~q�‡.|‹ÔÓÝm0Æ™ìOÿEéÇ®@W +Ðè tº]�‡­@ŸxØzßÇjjPÔÓÊFÒˆð!øYóa¶z߀¦c ‡`__É�ìÇøI;¾ð9N|ˆOÿßÑÔ3£‹GÒ³sé<üqà˜O'¸gÇÂOýÁåŠ�8—púd|€¼˜5u2@öØ bj¸¦®m"ùtŸŸ3¤)çú›øXþUÓ_qLÿŠùÏØ£ê<– c�qZ†¼ ¤ë†�¯D'X‹+NzðÈïkH—$•t¤ëò9–93[ø×’ì�±¶þ�uþXÅœ3VÅ» ¦§˜Cïæ_åhÙè tº]�®@W +ðÐè]ñû[OÍ +,é4¤øO�)wÊ…ÔPnaã‹òèÑ/�u9)G3Ûà',šùçq™À§8YðSèœ0xóo19‘0úl5úH. ȶ רèlŽIׯt]6ÍxLNdpy>'^Ɖ�?ãØþëeÌàAÕð%À²-^–,ícf;žuÙ.—ôì«l°ûš:Þµü[y³Ç¤Ë')Ü%>·ÑyÙd ›!\úû¡+Ðè tº]�®@W +ðX*Ð'Ë3q÷}Ð|¨Ù”îR͉säguô­C9œïñò;æ\ù…Íx‘|Êþ.ùé½Wñé=Í?ŸÌscÀ�a�4ðÁ9éákéÓ~|Zé6±‘{üŒ 2�Ýù80îö:7ÿW‡ûCO  ¯A·ÃÜ<ˆ­†pI8Ò+¹†áwŽìæþǤçZU{§òU|áǗð¥KŠ£ü'Ù—þŸJÑJW +Ðè tº]�®ÀW®@ŸøÊOÀ•—§ Q³‰ÎȘ•Ì“}ˆš?*oÅPŽgͯœ™Góý!šø·1oBçuû9tpîð6º0>±Ÿò‡dŒF>ÎŒ\Á¡Ê;ü` álšÕÒ1×åwé~×gû%V¼¾ìß+ÙzW +Ðè tº]�®À£¨@ŸxOÃU7A¢Aª†©¦´ÂãñÂ\*‡°œ÷ÿoïÜvIŽ ºëÿÿßÚ0`»£›G ¥²ª/¤4”4óžU<Ô›5 ~¤çí]ód¯ßXý ûëoÇ_ü/ú¿–MØgà•£)myÞì[Â[Þ^×ÒóÍÇd§:­‡.4ìÿ[¿Pƒÿmø×? ¨ ¥Î–Þûì剫«êØ.]W�l÷U�øÌï9÷ê~¦{{y½új¹}‹l¯øŽJ}Þ]®÷Œ!!!!OE Oõq<ü0P4tÖAÅQÅ|yÌýÒk®|ô—î‹>] yä`�r5léŸßÓ/Ô/÷ûïòügyþµüs‘ÿ\~#ÿúO.9úzÀúm€Å¯Ü¿o1žýZ©ømŠG®Úó6íýgé¯G—ú×Ög±µm=»löQ ­š³y�½ÖZl¤÷Ç'é:9î›éÔ×÷_Ño8׳]©?RÕ.wS¾–KïqèìùÚÿ1¯!!!!ÏE Ïõyœ>��¿?ýz»m4¼ø êÃL�©P¾Ñò>Ê©¹¯1ïIÞ,Çóÿ§¡[_ç_¤0 àúëë¿øw“ë€~1À’£þ«­KôM}c±æ¸o9 ƒÿz¾e�Uʯ¼Eê_#X¿y ¹ì³ÚKpQß¾°æÞúêý¹}sŸêQ—û:]>ü.]WÏšçqbHÏÇwV.ØÞöÕ²�ä=«ëO¿YL9Škuyòé}èѪ9›7¯!!!!!ð„rð„ʃ�T”:�*î«Æ=¶—[ãÔÖž£<ò«Ô°¥oHêOàõMÍöësû{þÚ£>úM�Ÿ|–·¨oqMrœ“âÚ˜ØzvMü·Uß‹lr•Rí[Ù®¨})p§ãséºúÈvŸë'9‹‘s¯dä½ýTÏêzÍb]~õ©ߪçOÿA!!!!ðlrðlŸÈýçÑ0RJ'kîÌ®ƒí£rg}ˆiø×ù%Ðu°~Ýÿæ[Ä[lÍYuÎLÍžM¤çã›IÅtNê:[¾ÑRíly©:tI׉íùZWûyÝÖ©ï5‹y�™îçD§od„@„@„@„@<�\<ÝGr×�4¬0xJgí 1乤>ï'qß“\ɚﱪ«×™|êupû–ÿZÏ™ˆKÖóÍì›Õ“ëRùœA~­joÞs¯ô¢ÊíNÇ'éºê�ø¼†ü*½W��lÕÔ5ʽׯ}jß»ÆÜöË&üø°%³B B B B BàGÈÀ�ú¸¦‡Õ@âƒ4:Òéh´ 7k{¥¦úd×Á§ËõºNW�/Î._íïy�î—5î}kLö(Þù;==æúljgR½º…©œªcwrϧ8½±«Ü‹×üGØÚsoÕ}”_}nw¾â#?ý$µ”›úO²B B B B ž–@.žö£9~°Û/dGÒ`LÇ�ê#W²Ö{Œ8>ú`�d7ðÏr�ö¥‡†´n�™O{x©Þ®ËfáGâGVµÉë¤rg‹8R¹�.þNîù¨÷<÷u:géb÷úÔ›u¦WWÓù¼'C•ä¨^:Ëu|‘!!!!!ðtrðtÉÝÒ0¢Á–¡Ämé<ÚHº†ÿ€|,�åó˜ì—¯[µ®ËqŸŸßý÷è:Ãè¼³˜ö$ŽôsàCëlbW¤úùÂF*†~DzŽëô‘ÏŸ‘ßs¼Oõ_µµ¯ÖÙú­êc]ç«}GCÍãLôÌŸþ¿‘ˆ!!!!ð¬rð¬ŸÌÉsÙ·T©aE‹A›!†¡ßý[ÅçZüô“¤ÎcϤë|>ìÏl�uºûô±‘Õ'›½•£…½YÇ_©¯ø‘Š£Ÿ‘]®|îÇF²v'�ätuîS-÷Íô-ûýµæv½ðÕ¡¿Úµöº[~ëÿ;ôh!!!!ÏM Ïýùœ:�"/k)Ö ¢år¤+¯«ax¥Žúb»¼«=ԇ屪+§úfvͯ¶×Ö¡¿ÚµVvV„@„@„@„@ü(¹øQ×åÃjÐa˜–®ÕÉηe¿¿2àz�÷èqÍûÜÛ‹]yŸØ39Êíüø�œ·¾‡Îï5³ót1Õv ?R9�ޝ“{>Åýa÷y�£~jÔO«Öuö–y,—úÚ»Úä¹ÔÐ_ŵÞò¸\ÛÜy �����ŸC ?糺tR +ö׸@ª§lvðI²ˆcÏbä<‹ä}vçéb�OµîGGÒ{Ï&¯“ª�-âHåv:¾™ìbò¹{ä»âŸÕø~Gó:^µ6¼FÃ>yHòeg…@„@„@„@„À�&� €ýñ�>¼†{£3ÜxÜu6bà'?½Üîr<þÕ:çïöñØH§Ž8R~×kÞÌ&vEjO_ØHÅÐG’œ.î>é�=ò=ÒÏÞ³žÄô~´¼æ¬Þý‰?=¼7ºdV„@„@„@„@üH¹ø‘Û]‡öá Ý¥t¿@÷M¹��Z�KïêjÎ#mÎýˆžôIíQcø$á£-ìÍ:þJ}­À�T¼Óñurϧ8ý±½_—Óå‘ÿU1úŽÎÃþ>ø»Nœ>d¾þ/¬Y!!!!?•@.~ê'wîÜ 1T1�â—d`—^mòUO�t-bÕ¿[‹¼p®©ÃÞ�öt�w »xõíÙ]_|ª�-�£#U‡~Dv9î“ÎCï‘=ª{¤¯—Ψ5;£û®Sƒ¤�KéY!!!!!ðc äàÇ~twœAŠ& = ÛÕ&Or4ð�üÔÔ=½ç£uíÅy®ö¦G•ê7ó±Ÿr´8öæ=ÿZ뱑êˆ~Ez�ô+vW3êu6÷J>{#}àG¯’\ßoý´ò§ÿ+†¼„@„@„@„@ü`¹øÁÞÅ£3Øx¹=X«­ÜZÇ`[cø»üêS-‹}±ÏHõeߣu^ƒŽõð8:R5Òµü,ߢÇ_éW+ð#ït|�Üó)î9WíQ]×{ä;ã‡ÕlßÙÐO{þ•Á¤‘!!!!?�@.~ú'xüü 4 §ØêàC�trˆIv>ùµó~«³y9š×”]õ¼5Ñã®×<·É«R9ø\wŸû¥kÕøæí_•;[Ä‘Êít|3ÙÅÜ'}ÏfÿQ.þ®Oç«ýºzÖ\·]W~ú±=F_ÍüÒ³B B B B BàWÈÀ¯ú8½™n°y|–Uïšv—øè?öGþn|gj´?g¡~&k>öHª1ï[}�íùguõó…�T }$Ééâî«zµ½Ï^LqžY]í3ªùkoò\2ôWé9ù‘Ì ����ø•rð+?Ö�oJšù÷²¯—$ú„®!I뛾Ò�·]'.yÖïµgtÞ¯j:½óÍúwùÕ§z½?-Å´°7ëØ+µ5Ûý{:ñ™ôØQ}–Wc²�úô^ÉŸÕÔ¼Q®ü ûÞwOWÿ¬����øurðë>ÒSoˆÁ‰�œÁHC“ÙÒ×3º `À­ý–’·á—˜|Zì¹Y×^Õ“½�vèjðíIíAŽïW}²µ8öæÝ^‰¹Oz—KŽÇötâHï-~—GõšWmö’Ÿ§ú®Øµ†ÞuÙ>øwº|Y!!!!!ðRrðR÷úf5ÕáÛ( Fô�”Ëà/ŸÛ‹ù¡—÷u½æÉÖª9#ßš|à…÷¦Ô‘Nâg¥÷¦Ÿ¤ÞKq-÷mž÷{$éáq÷uúÌGLÒuõ¯>�Ïô»×ö³Œz)Ç—òø™•Ä–éª'.™!!!!¿š@.~õÇûþæì¯È©aLJR†Ÿ*5HqÀ%õ’ ðH÷U½³Ïø”{ïªïûl¿®¾úª­=äÓræ›güJ�gTŸÛ�>ó)FÜå½ÖìÙzOÊáqÛõ½>ÔÏ$—]Žï….™!!!!¿’@.~åÇÚ¿©æ &2pihÒ°êÃ?—ª!)ß=—ª?»´·Ôn�tö ~Vª¾Ö¸Ïû£×3âw¹—£=}ÍlbHÕ¡wrÏçñ™>‹qåÌòÎÄè…¬ƒ¾ÛèHj8×›Ô#2²B B B B Bà7ÈÀoüT'ï‰çöK•ÉÀã<401œúe5’^wDWoÏëlù½ü¬ì/Y×(¿òÑ‘ø$kOåhUÿæÝ^ÉqŸôÎï>×k>1¤ÇñIŽtòGñê¯ö‘úYÍ,潕7zêÀ¯<÷ÑG2¿ý¥�—����ßL ¿ùÓ�¼·ÉE@WÅà¤K†-å¡3PËçºlVõW›¼{¥Î¤ÞZ®ožÏ¯ä ?g¼{<I–lç�íþ.Žo”[ëg61¤÷ÄçÒurÝçºÇݯ~¶¾žCõ<>äÏ|úE1+B B B Bàeäàe>êþ�ê"`ûßâ˜4¸ú£ ÿäÈ/]KùUw_Í‘íëL®×Ñ9ï½R{ÑÃ÷í|äJê½uKu,rܧØ=¶×¢»t�½ÎøbÒµŽäÔÕUßÌöúLv±=ŸÇ�輇š[mÏÅðGGÊ7zÔ;+B B B B ^’@.^òcÿø¦oß`(eà’�Î0¥‹�_:‹ZÙÊu[>lúyoוûèÕ�çÈÔ!½Æ}®+G6‹÷��ÜËñxW#_Íq{O'.éº÷Å<ÿˆNOÏuŸû«.›§ÖÈïÿH÷zzHf…@„@„@„@„ÀËÈÀË}äÓ7¬a‰¡�ªÿºà@5þŒ6QŽúi�Õ·ªù+g�$5ı]zl¤×|l½ßn©Ïluñês{O'~Dv9îéz?Šy¼óy¼êÔïÉ#ƒ¿÷Ð9²B B B B Bà% äà%?öÝ7Í0F"¶$.þu)àˇ^zü½º×áIíå{�òÜ?«ñØLW¿Ñ¾ªc�rˆKzþÌïy{zÇçÒuÎò(Ÿ÷qÝ÷‘öøÐ¯¼j×ZõÎ �����—'� €—ÿØØ_Ðð¤ÅÀ�”�˜.†XI=|#}q½åK—Ÿú‘®<-�ož�¯ê£-×7Ïû+±*ß3æu5Ëý®+O6‹3b#=ßQéµgô.ßÙå<Êç}ª.[Oò«Ýå‰)~¤|Y!!!!!ð’rð’{ÿ¦í@ ˜êbðçOúÝ–ŽŸZ$}|°w½‹ãû ©s�†sí×Å;gÅäךíµeì¿Ò‹L·Ïè].¾Nõé\žë:±=ŸÇ¥óø°ïºâÕ¦FR {3–òUÉK„@„@„@„@¼ �\¼à‡>{˺ ¾üó€Ý�®°†.ÅxäcÈÕ%=$ñã“]u÷-áK‹½F²kJnÃç9UWN÷þ¨Eªî‘Ëû�ѻܙO1â.]×ûšÙ]Ì}®ÓË} øU*çÈ£žZôܬ¼†@„@„@„@„À ÈÀ ~èGß2—Û=À§* T~€üÊTàºù®+ï;ç�íu%§ÖÈfÁûQ’=�ê{FßË%.9Ò}OÏù=ÇuòÝ'½{Î\ÐWr]üå0»ÎeÀž¤ï½Ò÷¦×ž¯Æ÷lï‹Î{Ǿ*µ7«Ó;Ÿò;ç#—˜K×É;*½ÖuêÝ'�a¦+Ö=ô”ü+ƒÿŠ!/!!!!!ðW.òCp–€.-vé i ý~ ˜üZªáY_|ï‹-†e:¯ú?zÁ­ë[÷›åRï9WõY1—®ëÕÆWý²G>÷“‡ÔÏHÅøù"OÒWµ==B B B B ^–@.^ö£¿ôÆ5X1¬¢K2pIj8ÓÀÏ�ư.ÉEÀ¢^ZôºT\Šüüô•ôEŽ|®�ljkü#©ÞgVÍw»Ó;Ÿöëüø:Ùùº>]žûª.›‡~úùÑ#•µžü²×•?ý‡Dd„@„@„@„@ü•oä‡à4�OCÖÒŸ5††`I=îwßZãê!ÿL*÷;gÐ^#½Æü\ªaé==ryoõ�ÙÄ�5¿óãëdõy?�¹NŽûª.»>ÝÐï9]_|’ùêÿJ!/!!!!!ðN ßxgmBàö{f5ˆÕa�j nŠÕ�_qù‰ÉæÂ@ú3,Þ—Î⺟­ú«í¹ô©>Ùâpti�nU¿Ûgô.ŸK×9OõÉÞó‘³'»K|ì¡s ¯2êÏG!!!! äà#�XÍ%À${îøvþ}ðgx›õ:S﫽TÇ»½j|ÏîzTŸŸµÛÛãµVvwßž~4NÞÙÕÈwäaÐGªÆuz�XÈŸ!!!!!`r`0¢îàOW—€¡µbòw�šó­Iê�ª‘Ž\ÔCël¾7e¿‘Ïã®+¿³é£3�Yêut�r«ßmt¤öêô™�ØÙåÊ×=u¸WŽûª®÷ðañ³ùÁ#B B B B Bà�@.ÞPD9CÀ‡­Û]€6|±ås?ÿ:ônkÕÐc&km­«ñ‘Í£ø¿z�–³åtþYOå×86²ætþ™�ØÙåÊWŸ:Ü{Ücòÿ×öô¦²B B B B B ŽÈÀ1NÉšÐ@vûF€4-I]éüÉ¿b,†ÿZC힤ÏIïQ­ÇGºj=6êUýªaÁ»“ž4î5{zŸùˆu²óéÌò{ ûÓpo¹Ê©qz,¡¬�����³rp–Xò[å€ÁV›t7I=ìX²u E�Kê]*WuäÉ-ê<Þù<>Óë¾ÕžÕÖØ^­â{«Ëqß½ËÅ×É=ß(.¿?Ý O­Þ?º~ÌÐ÷¸$!!!!!Pä ‰ù0Ý &Ÿ†=ÿFø¤-—UWÏÅ^ ÿÐË=gP­ï{óÎ_G¹î?£w¹ø:龪W[ïD¾ÙS/¨q)=+B B B B Bà�\\€–’]òê@+›¡Ð/æÉÇÖ&è’ô$Oñ?µ8‹ïÏ{»z>ê½çLŸå{ìŒÞåâCêLÒý©¾=ÛkGz×C¾¬�����‹rp\Ê>°¿  ;-bìÍ»}@1rG¶÷!Iϯ’:;û³GçSÌßg­¡ö^é{Ô^5æöžÞÅG>ùýÑ9ÜF?ë§N’Z—›7¯!!!!!§ äà4²Ì”K¥2ÈQ&›ÁÝ¥ânKŸå*ÿ̢ߙš{syïÚû‘‹¾]ÏsûŒÞåâ“Ü{t¶.gä'×ãÒµû+ÿ_²B B B B Bà:�\\g—ÊÔvþucÉú¨{õÉæ*þ•KC§ö›­u0]ŽäíåÌöñ{ºÏu�»®·÷ô.ŽOòêÃ9¼¾ú°%×å?Sø"C B B B B ÎÈÀ9^É>I€Ám¹ðJIœ’Ý£<ü þúýòa/ê_œsv�úžg¹]Œú.æ>Ïs]9nŸÑk®lê/ïó:ûc#Ý�ž?퉬����x0�\<hÚõ¸X¢ÿ»}+@‰µò;¹e¼ÿÎ~‘ ñ¯»Mõñ�IDAT–:«Î7Zþ^F9ò“7˹«½g¶ÇБõœÕ/[Ïhð—_‹¼‘$g•ö3";+B B B B BàÁrð` i·O@ƒž]P !±[òûŸøk¸ÄFçâ@õ é3É^Ê¡¿j]—]×^œ~µî»lÞû¹Ýé3ß^LqžÑE=ÈCÖó‘‡?2B B B B Bà äà  ¦åiØGà þ@5þhcú‘ì‹TýHWìÙ—³ÛÓ‰ïI½ç.G>žz@ q·Ñ%³B B B B B ¾‘@.¾v¶z'0ù€wÎ÷‚w�‹ü]W-=ÎÈ÷æýçY}Tç¹g͸Зœ*¯>·]÷\×=Gúì¡®Öà—Ô"¾Yy �����ø2¹ø2´i¼G€¿ómÿR@Ø÷Z(®Ru<ò1hwR>j�ª9¢+ïO.�qo‘sDv9�O{v~ùºg”ïþ:? rf…@„@„@„@„@| �¿—ÿñþšÎé'Øï`hWuÕe�ϧÎåÝ{¸N­|ZÕùÖäÛKWãñ£úÞ°ÄÌÕ×}ØîéäVYóeóÔ\ÙZÔT=¿ñÅ“—����øz¹øzÆÙá » Â‡fé<Š£#ñU©8¾#:¹.«~ÄVŽ/övßÝé®~4ˆSWãÕï¶úw¶û¤WÛë¤k‘³Yräöñ�E”����øù+ßA9{"à¡ýµ¯Õéµ²É!®ø$ñ“¯x·Èëbʧ3Í–âäìé5¯ÚÚÇ}Øî«:¶r?,ÿ|?b„@„@„@„@„@| �|à[0g“G¸] 0´»éÚV±ÇWýäϤbZÔnÖg?²æã?+‡ö­‘âä ±ÉU›ªòeÀ¦¬����x^ùÀó~69YO@é†i—}æ»—\yÐÕƒŸâ ê#©-â›õÙÆ�¬ùøÏJ�u¶'gOïâ^«}Üv½Ædg…@„@„@„@„@<1�\<ñ‡“£ hÕ@ÝÉa‘å+‡Zó‘Tn�ɧ…³>Ûø¿KvºûfºÇtÞ³öw½Çì!!!!!p‘@þ ÀEp)û3ìúð�ŽÔáБø°÷$ù.«ÞÙ#Ÿü_µÖé�-éºâÕçqtò\ºþ)/_ÿž¬����xnùÀs>9ݘC¨yô.[1†}ÅÉÅW¥rf>�K×"³>¿îÅ?WÌ=¼‡Q–âäÌä,Ford�tr#C B B B B ž˜@¾ðÄNŽÖ°o�Pì™í±¯Ð9ÓŸ”ÔÖÏJ�›ÞÃÔΟþƒ)2B B B B ž›@.žûóÉé&š‹²}°ùjÎÌöØ�=ÿ„dX¯Rg©¾j{ŽŸ�<÷ý•ÁÿŽ!!!!!ðôrðôQx”ÀäBÀ[ø?ó{žëªÁFºÏ{þ �a©3 #÷|í¹3ð·Xâ �����C ?æ£ÊA¿š@s�ྶÇFºï«�w¶ÿÞ°¯~o9îÏâM~„@„@„@„@ü<¹øyŸYNü v.Fîÿ†S¶[0Ô#•4Òó5þaœ!!!!!ð; üãw¾­¼«������'� §=B B B B B B ~)�\üÒ6o+B B B B B B œÀÿ‰Ð ÷\yžIEND®B`‚ic11,‰PNG  IHDR szzôsRGB®ÎéDeXIfMM*‡i     ¬†bóŽIDATX µWKlTeþî½óžéLÓ2�ÒLHŠ€– ¦ÝtÑ"À6ÒF0ºp£‰¬$Ñĵ 7®4.‰�ˆ.Ô…Ä Xb$´j�¶@[Ú’Nó`ÞwnýÎ¥3t:-­€'=¹wþûßs¾ó�Ç«,..âi¤CQ[�—,€ï0p¸O{9ÚÝ�a¾÷ä¢PÞ¾Ù¶ÓL˜Oo^þâ£Ù�€PŸÜ=Ð47ÐùfyŽª·oó–ËpSו§!Õ9 OŪNM/•Ôÿ@sGGÓDW×'ý�@v„Þþ¡’úûüƒBÝ�üçؽ{·{bÛ¶Ó¹†† MsÌ75!l·ch×.\Ñ´?¢gφ陥€ôF(,VHÁù�{?ëp|¨[,ub\ÓuTy<ð* xß>¨¹Üäà©S§ó‰ÄU>¾AÛë‚X·Äqý‘#]Ç�_Kz<Ÿœ UõzÛ´ v±VU5Ô´·7qY˜Ý»E ð°¢l¥?;ÕBU›;;÷»z{Š{½ßæ-–-q U…½ºº¸^wèÐQþðQ½ÅÅÇܘzåx0ʶz‡ET uz»ºÎ„� äþТP¼B-h••ÈsÝYUU|j«©ÙáÛ³‡Ýˆ*!$=VTnR¸ûK†ç}žiõúý­É½{Ïê.W÷¢ª®Ic–´O66b!„Õá(:Q4Í^ßÝ}Œ ‚j]„•SÌ!“L×ÊÂò¨ªÍ–͂ʕG¢“î +>ív#_[ ƒ¿½.×£ KwÎP¨Ý Ê0ªf|2Ö3£À¹qnùÍïÇû÷ÃJÇ©H§ÁÜÃ` 26²ÌyžÎ�‡.�À00�#M°ËEµZÝ ==¯pMŠ£bù³•÷Àø xë;àÓ««/ŒDÜjEŽN%Ҍχ´Ó‰<ajM�Y|R€Y ‡±²�+ZZÒ67š,”ÑuéÀÿ|uÃbùZ¡ÑÄ™× ™PÈ ‘MÅrÐȦœá>S¹&ÍIp/Õáð7ž<ÉÚ6kA²»ª˜) ˆŸŽÛ¦¦®(†7wÒ©Ô€-É¡&ÎÅ¡`åCŠ®°¶$¹" b£¦­­[.TéˆUY0Èf‚H&"‘»œfcò» %oU0�Ç… �¹ªÏæºöp‹Ô‚Ôy™,=Ij¹Üíå»ÌNÈK·S8õ¤ð ¬°H‰ú¡rm!“áÇ@²¤´Zwð ° ä„,“•tÝ0þ^¾K°Ð¸I»Ð- *À¯Ò%wR)ܘ�E*+±××·VlßÞL35TÆB ¦Á°D£×–�{‹8‘܋Ȁ¨¬ñJÆÐÈgî%6 ®'‡‡±pó&ÒѨ0¤{{»ø¦Ô‚Ÿ JæBÙ¤³.,ŒåƒÁż¦ÓŸ—YÏ�£2R êt&È},Æz¶­�]#ÇcŒ ¤¦¦ ãKeW$FFÌnR]®—_×´�œùü £û‚ ¸%!Xvóa…«§gˆU/“ �VÖÕ!É(­@ &äá’bä‰éiºH m`»®_G�¿éCÀ4çN×ÌÃãz¾ŒÚÌ1烺ÓÙÀ7àfn5Fè"¿áÄÉá%*µp�s¤ãüyl¡-™—1 ž¹x�æll5:Ü#8˜O;g>³ _(DRJJfM(ü ‰d#‘pêîÝQ{__6’;*ßê,_°*t:—,É!"M]&FFׯúYÍnæ=É-v¦À!gÿ’‹Fg²ssÓÌùhìòå[ñ[·¦�TJ¾SeÀåÏ1ÚYà({Ƹ|?XÉÈ—ÕÀkŠÒPÕÏ]ªúbšcw¬µ“'NÈ'÷Ó‚®gŒd2–š˜¸ý`xx$Ò×w396Fûæw Ìã‚rX˜SZ—Ó6@&=!“;L§N•0Щ(¾½D¸Ó06YÙëSbplist00Ô X$versionY$archiverT$topX$objects† _NSKeyedArchiverÑ Troot€§ U$nullÓ WNS.keysZNS.objectsV$class¢€€¢€€€Tname_assetcatalog-referenceTiconÓ   €Ò !"Z$classnameX$classes\NSDictionary¢!#XNSObject$)27ILQS[ahp{‚…‡‰ŒŽ�’—°µ¼½¾ÀÅÐÙæé$òatomes_1.3.1/misc/win/0000775000175000017500000000000015212624223014235 5ustar lerouxlerouxatomes_1.3.1/misc/win/Windows_prep_deps.sh0000775000175000017500000000121115212624223020262 0ustar lerouxleroux#!/bin/bash function prepare_deps { mkdir $1 cp atomes.exe $1/ cp atomes_startup_testing.exe $1/ cp /mingw64/bin/gspawn-win64*exe $1/ liste_deps=`cat $2|wc -l` let ldeps=$liste_deps for ((num = 1 ; num <= ldeps ; num ++)) do dep=`tac $2|tail --lines=$num|tac|tail --lines=1|awk '{printf $3}'` cp $dep $1/ done } # Win10 ldd ./atomes | grep -v "Win" > no-win-deps.dat ldd ./atomes | grep "Win" > win-deps.dat # Win11 # ldd ./atomes | grep -v "WIN" > no-win-deps.dat # ldd ./atomes | grep "WIN" > win-deps.dat ldd ./atomes > deps.dat rm -rf bin bin-no-win prepare_deps bin deps.dat prepare_deps bin-no-win no-win-deps.dat atomes_1.3.1/misc/win/atomes.ico0000664000175000017500000017017615212624223016235 0ustar lerouxlerouxx| hð(xø      !$'))*)(%"  %).134441.+&" "(.37;>?@><94/)$ ")07=BFIKKJGC>82+% !)18@FLQTVVURNIB;4,%&/8@IPV[_aa`]XSLD;3+# #+5>Hÿ=ÿ@ÿ2ÿikkjgb\ULD;2)"&0:Rÿfÿpÿtÿuÿrÿjÿ[ÿ6ÿspke]ULB8/'   )@ÿgÿxÿ‚ÿˆÿ‹ÿŒÿŠÿ„ÿ|ÿnÿSÿwsle\SI@6.& "Eÿmÿ€ÿŒÿ“ÿ˜ÿ›ÿ›ÿ™ÿ•ÿŽÿ„ÿtÿYÿysldZPG=5,&   &ÿjÿ�ÿ�ÿ™ÿŸÿ£ÿ¥ÿ¦ÿ¤ÿ ÿ›ÿ’ÿ†ÿsÿOÿyrjaXOE<4-'"  \ÿ|ÿ�ÿ™ÿ¢ÿ¨ÿ«ÿ­ÿ®ÿ¬ÿ©ÿ¤ÿœÿ‘ÿ‚ÿjÿÿwph_VMD=5/*%"  ÿnÿ‡ÿ–ÿ¡ÿ¨ÿ®ÿ²ÿ´ÿ´ÿ²ÿ¯ÿªÿ£ÿ™ÿŒÿxÿRÿ}vng^VMF?94/+(%"  Nÿxÿ�ÿ›ÿ¥ÿ­ÿ²ÿ·ÿ»ÿ»ÿ¸ÿ³ÿ®ÿ§ÿžÿ’ÿ€ÿbÿ�{tmf^VPIC>:52.+)&$" Yÿ}ÿ‘ÿžÿ¨ÿ¯ÿµÿ½ÿÚÿìÿÂÿ·ÿ±ÿªÿ¡ÿ•ÿ„ÿiÿ…€ztmg`YSNIEA=:741.+)&%"  ]ÿÿ’ÿŸÿ©ÿ°ÿ¶ÿÃÿÿÿÿÿÑÿ¸ÿ²ÿ«ÿ¢ÿ–ÿ†ÿkÿˆ„€zuojd^YUPMIFB?<:741/,*(%#! Zÿ}ÿ‘ÿžÿ¨ÿ¯ÿµÿ½ÿáÿúÿÃÿ·ÿ±ÿªÿ¡ÿ•ÿ„ÿiÿ‹ˆ…€|wrmhd`\YUROLIFC@=:852/-+(&#! Pÿxÿ�ÿ›ÿ¥ÿ­ÿ²ÿ·ÿ»ÿ¼ÿ¸ÿ³ÿ®ÿ§ÿžÿ’ÿ€ÿbÿ�‹‰†‚~zvrnkgda^[XUROLIFDA>;8530.+(&$"   3ÿoÿ‡ÿ–ÿ ÿ¨ÿ®ÿ±ÿ³ÿ´ÿ²ÿ¯ÿªÿ£ÿ™ÿŒÿxÿTÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿˆ…‚~{xuroligda^[XVSPMJGDA>;9631.+)&%"    _ÿ}ÿŽÿ™ÿ¢ÿ§ÿ«ÿ­ÿ­ÿ¬ÿ©ÿ£ÿœÿ‘ÿƒÿkÿ1ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ‚€}{yvtqnljgdb_\YVSQNKHEB?<:741/,*(%#!  "%'(((&$" :ÿlÿ‚ÿ�ÿ™ÿŸÿ£ÿ¥ÿ¥ÿ¤ÿ ÿ›ÿ’ÿ†ÿtÿTÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ�}zyvtqomjheb`]ZWTQNKHFC@=:852/-+(&#!   %(,/12220.*&" Mÿoÿ�ÿŒÿ“ÿ˜ÿ›ÿ›ÿ™ÿ•ÿ�ÿ…ÿvÿ]ÿ‰ÿqÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€}{ywtspnkhfc`^[XUROLIFDA>;8530.+(&$"!%).26:<=>=;84/)# Kÿjÿyÿƒÿ‰ÿŒÿŒÿŠÿ…ÿ}ÿpÿYÿœÿ’ÿ‚ÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ}|zwvsqnkifda^[XVSPMJGDA>;9631.+)'%#" "#&*.38=ADGIIIFB=81+$ .ÿYÿiÿrÿvÿwÿtÿmÿ`ÿFÿ¢ÿŸÿ™ÿ�ÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€~|zxvsqnljgdb_\YVSQNKHEB?<:742/-+*)))+-048=CGLPSUUSQMGA:2+#(@ÿKÿMÿFÿ‰ÿ–ÿTT ÿvv ÿ¡ÿ�ÿ•ÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€|zxvtqomjheb`]ZWTQNKHFC@=;87544458;>CIMSX[^``^[WQJB:1)  &333ÿ^^ ÿ^^ ÿSÿ{ÿŽÿTTÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€}{ywtspnkhfc`^[XUROLIGDCA@@@ACFJOSY'ÿ4ÿ%ÿijjheaZRJA7.%%^^ ÿ^^ ÿ^^ ÿ^^ ÿfÿƒÿTTÿTTÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ}|zwvsqnkifda^[XVSQOMLLLMORU<ÿ\ÿiÿpÿrÿpÿjÿ]ÿ<ÿqmhbYPF=2)  %^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿsÿTTÿTTÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€~|zxvsqnljgdb_][YXXXY[]Wÿoÿ|ÿ„ÿ‰ÿ‹ÿ‰ÿ…ÿ~ÿqÿYÿtnh_VLA6,# %^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€|zxvtqpmkigeddddf]ÿvÿ…ÿ�ÿ•ÿ™ÿšÿ™ÿ–ÿ�ÿ‡ÿyÿ`ÿtmdZOD9.% &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€}{ywusqponnoVÿvÿˆÿ“ÿœÿ¡ÿ¤ÿ¥ÿ¤ÿ¢ÿ�ÿ•ÿŠÿyÿYÿpg\RF;0&333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ€~}{zyxx:ÿnÿ„ÿ“ÿ�ÿ¤ÿ©ÿ¬ÿ­ÿ­ÿªÿ¦ÿŸÿ•ÿ‡ÿqÿ:ÿg]RG;1&333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ‚�€€Yÿ{ÿŽÿ›ÿ¤ÿ«ÿ°ÿ³ÿ´ÿ³ÿ°ÿ¬ÿ¦ÿ�ÿ�ÿ~ÿ\ÿg\RF;0&!^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿvv ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿfÿ‚ÿ”ÿ ÿ©ÿ¯ÿ´ÿ¹ÿ¼ÿºÿµÿ°ÿªÿ¢ÿ–ÿ…ÿjÿdZOD9.% "^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿVV ÿTTÿXXÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿssÿ››(ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿ—ÿ£ÿ«ÿ²ÿ¸ÿÊÿÿÿÏÿºÿ³ÿ­ÿ¥ÿšÿ‰ÿpÿ_VKA6," $^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿUUÿSSÿiiÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿ||ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvv ÿvvÿvvÿ�ÿ˜ÿ£ÿ¬ÿ³ÿºÿíÿÿÿÿÿ¼ÿ´ÿ®ÿ¥ÿšÿ‹ÿrÿ,ÿPF<2) &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿZZ ÿSSÿUUÿuuÿvv ÿvv ÿvv ÿvv ÿvvÿvvÿuuÿ††ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿ—ÿŸÿ¤ÿ¢ÿ«ÿ±ÿ¸ÿÇÿïÿËÿ¹ÿ³ÿ­ÿ¤ÿ™ÿ‰ÿpÿSJ@7.%333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿWWÿTTÿllÿvvÿvv ÿvv ÿvv ÿvvÿvvÿvvÿuuÿ¡¡'ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿ¤ÿ¨ÿ«ÿ­ÿ¨ÿ¯ÿ´ÿ¸ÿºÿ¹ÿ´ÿ°ÿªÿ¡ÿ•ÿ…ÿiÿJB:1(   ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿTTÿXXÿxxÿvvÿvv ÿvv ÿvv ÿvvÿvvÿÿ‰‰ÿ««6ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿ©ÿ«ÿ­ÿ­ÿ­ÿ£ÿªÿ¯ÿ²ÿ³ÿ²ÿ¯ÿ«ÿ¥ÿœÿ�ÿ|ÿZÿA:2*#"^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿZZ ÿRRÿjjÿvvÿvv ÿvv ÿvv ÿvv ÿxxÿ‘‘ÿŒŒÿ““ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿ­ÿ­ÿ­ÿ«ÿ¨ÿ£ÿ£ÿ¨ÿ«ÿ¬ÿ«ÿ©ÿ¤ÿžÿ”ÿ…ÿoÿ5ÿ81+$ #^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿVVÿYYÿvvÿvvÿvv ÿuu!ÿyyÿ‘‘ÿ““ÿ��ÿ‰‰ÿ¤¤-ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿ­ÿ«ÿ¨ÿ£ÿ�ÿ•ÿšÿŸÿ¢ÿ¤ÿ£ÿ ÿ›ÿ“ÿˆÿvÿVÿ5/)# %^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿRRÿnnÿvvÿvvÿ††ÿ––ÿ––ÿ””ÿ’’ÿŽŽÿˆˆÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¦¦1ÿvvÿvvÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv"ÿvv!ÿvvÿvvÿvvÿvvÿ�ÿ“ÿ—ÿ˜ÿ—ÿ”ÿŽÿ…ÿvÿ\ÿ1,&" 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿggÿ‹‹ÿ’’ÿ––ÿ––ÿ––ÿ••ÿ””ÿ‘‘ÿŒŒÿ˜˜ÿ——ÿŒŒÿ‰‰ÿ††ÿ„„ÿƒƒÿƒƒÿ„„ÿ††ÿ‰‰ÿŒŒÿ––ÿ¨¨3ÿªª5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ««4ÿ  ,ÿ‚‚ÿuuÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv"ÿvv!ÿvvÿvvÿvvÿvvÿvvÿvvÿyÿ‚ÿ†ÿˆÿ‡ÿ‚ÿ{ÿmÿUÿ,(# 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿ‡‡ÿ’’ÿ””ÿ••ÿ––ÿ––ÿ••ÿ““ÿ��ÿ‡‡ÿ„„ÿˆˆÿ‰‰ÿŠŠÿ‹‹ÿ‹‹ÿ‹‹ÿ‹‹ÿŠŠÿ‰‰ÿˆˆÿ††ÿ��ÿ��ÿ¡¡*ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªª4ÿ  ,ÿ††ÿttÿvvÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿvvÿ©©3ÿvv ÿWÿeÿlÿoÿmÿfÿXÿ3ÿ(#  ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿooÿ‘‘ÿ““ÿ••ÿ––ÿ––ÿ••ÿ””ÿ’’ÿŽŽÿ‡‡ÿŒŒÿ��ÿ��ÿŽŽÿŽŽÿŽŽÿŽŽÿ��ÿ��ÿŒŒÿ‹‹ÿŠŠÿˆˆÿ……ÿ‰‰ ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ££-ÿŒŒÿŒŒÿ‚‚ÿvvÿvvÿvv ÿvv!ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿj`VLÿ:2+%   "^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿƒƒÿ‘‘ÿ””ÿ••ÿ––ÿ––ÿ••ÿ””ÿ��ÿ‹‹ÿ‹‹ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿŠŠÿ‡‡ÿ……ÿ››"ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ««5ÿžž%ÿ�� ÿŠŠÿ��ÿ““ÿ••ÿ……ÿuu"ÿvv"ÿvv"ÿvv#ÿvv#ÿvv#ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYOE;2+$ $^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿjjÿ��ÿ’’ÿ””ÿ––ÿ––ÿ––ÿ””ÿ““ÿ��ÿ‰‰ÿ’’ÿ‘‘ÿ‘‘ÿ’’ÿ’’ÿ‘‘ÿ‘‘ÿ‘‘ÿ��ÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿ‰‰ÿƒƒÿ’’ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©4ÿ  'ÿ�� ÿŠŠÿ��ÿ““ÿ””ÿ––ÿ––ÿššÿ{{ÿvv#ÿvv#ÿvv"ÿvv"ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^SI>4+$ &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿ††ÿ��ÿ““ÿ••ÿ––ÿ––ÿ••ÿ””ÿ‘‘ÿ��ÿ““ÿ““ÿ““ÿ““ÿ““ÿ““ÿ““ÿ““ÿ’’ÿ’’ÿ‘‘ÿ��ÿ��ÿŽŽÿŒŒÿ‰‰ÿ††ÿ��ÿªª4ÿ©©3ÿ¤¤-ÿ‰‰ÿŒŒÿ��ÿ““ÿ””ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ‘‘ÿvv#ÿvv"ÿvv!ÿvv ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMC8.& 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿffÿ��ÿ‘‘ÿ””ÿ••ÿ––ÿ––ÿ••ÿ““ÿ““ÿ””ÿ••ÿ••ÿ••ÿ••ÿ••ÿ••ÿ””ÿ””ÿ““ÿ’’ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿŠŠÿ††ÿ��ÿŽŽ ÿ‹‹ÿ��ÿ““ÿ””ÿ––ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿww!ÿvv ÿvvÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^SG=2)   ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]]ÿccÿhhÿ‚‚ÿ��ÿ““ÿ””ÿ••ÿ––ÿ––ÿ••ÿ••ÿ••ÿ••ÿ••ÿ––ÿ––ÿ••ÿ••ÿ••ÿ••ÿ””ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿ„„ÿŠŠÿ““ÿ””ÿ––ÿ––ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ‚‚ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMB7-$"^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿggÿjjÿttÿ‹‹ÿ��ÿ““ÿ••ÿ––ÿ••ÿ••ÿ––ÿ––ÿ––ÿ——ÿ——ÿ——ÿ——ÿ––ÿ––ÿ––ÿ••ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿ„„ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ””ÿ„„ÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2( #^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿiiÿllÿllÿ‰‰ÿ��ÿ““ÿ””ÿ••ÿ––ÿ––ÿ——ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ‡‡ÿ……ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿ��ÿ~~ ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC8-$ %^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿhhÿkkÿmmÿooÿyyÿ””ÿ””ÿ••ÿ––ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿ……ÿ““ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿ��ÿ��ÿ——ÿ¬¬6ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3) 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿffÿjjÿllÿnnÿppÿqqÿ’’ÿ••ÿ––ÿ––ÿ——ÿ——ÿ˜˜ÿ˜˜ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿˆˆÿ‰‰ÿ˜˜ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿ‰‰ÿ›› ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD8.%333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿhhÿkkÿmmÿooÿqqÿrrÿyyÿ——ÿ––ÿ——ÿ˜˜ÿ˜˜ÿ™™ÿ™™ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ––ÿ••ÿ””ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿƒƒÿ””ÿ““ÿ‘‘ÿ��ÿˆˆÿœœ!ÿ§§1ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4* !^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿiiÿmmÿnnÿppÿrrÿrrÿttÿ’’ÿ——ÿ——ÿ˜˜ÿ™™ÿ™™ÿ™™ÿššÿššÿššÿššÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿ††ÿˆˆÿ��ÿ��ÿ——ÿ««6ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/% #^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿffÿjjÿmmÿooÿqqÿrrÿssÿttÿƒƒÿ˜˜ÿ˜˜ÿ™™ÿ™™ÿ™™ÿššÿššÿ››ÿ››ÿ››ÿ››ÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ’’ÿ��ÿ��ÿŒŒÿˆˆÿƒƒÿ›› ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" &^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿhhÿkkÿnnÿooÿqqÿssÿssÿuuÿttÿ””ÿ˜˜ÿ™™ÿ™™ÿššÿššÿ››ÿœœÿ��ÿ��ÿœœÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ””ÿ““ÿ‘‘ÿ��ÿ��ÿ‰‰ÿŠŠ ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^RG;1&(^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿhhÿllÿnnÿppÿqqÿssÿttÿuuÿvvÿ€€ÿ™™ÿ™™ÿššÿššÿ››ÿ��ÿŸŸÿ¢¢ÿ¢¢ÿŸŸÿ��ÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿ��ÿŠŠÿ††ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMA7," #333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿvvÿ™™ÿ™™ÿššÿ››ÿœœÿŸŸÿ§§ÿ©©ÿ©©ÿ§§ÿŸŸÿœœÿ››ÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ„„ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2(&^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿvvÿ‚‚ÿ››ÿššÿ››ÿ��ÿ¢¢ÿ©©ÿ©©ÿ©©ÿ©©ÿ¢¢ÿ��ÿ››ÿššÿššÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿƒƒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC7-# #+^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿwwÿvvÿ——ÿššÿ››ÿ��ÿ¢¢ÿ©©ÿ©©ÿ©©ÿ©©ÿ¢¢ÿ��ÿ››ÿššÿššÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿƒƒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3)  (1^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿiiÿllÿooÿppÿrrÿssÿttÿuuÿvvÿvvÿwwÿ‰‰ÿ››ÿ››ÿœœÿŸŸÿ§§ÿ©©ÿ©©ÿ§§ÿŸŸÿœœÿ››ÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ„„ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD8.% '.7^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿhhÿllÿnnÿppÿqqÿssÿttÿuuÿvvÿvvÿwwÿwwÿ˜˜ÿššÿ››ÿ��ÿŸŸÿ¢¢ÿ¢¢ÿŸŸÿ��ÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ••ÿ““ÿ‘‘ÿ��ÿ��ÿŠŠÿ††ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4*  '.6333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿhhÿkkÿnnÿooÿqqÿssÿssÿuuÿuuÿvvÿwwÿwwÿ……ÿššÿššÿ››ÿœœÿ��ÿ��ÿœœÿ››ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ••ÿ””ÿ““ÿ‘‘ÿ��ÿ��ÿ‰‰ÿ‰‰ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/%!(/6>^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿbbÿffÿjjÿmmÿooÿqqÿrrÿssÿttÿuuÿvvÿvvÿwwÿyyÿ™™ÿššÿššÿ››ÿ››ÿ››ÿ››ÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ’’ÿ��ÿ��ÿŒŒÿˆˆÿŒŒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" ")/7?G^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿddÿhhÿkkÿeeÿeeÿiiÿmmÿnnÿppÿrrÿrrÿttÿuuÿuuÿvvÿwwÿvvÿ‰‰ÿššÿššÿššÿššÿššÿššÿššÿ™™ÿ™™ÿ™™ÿ˜˜ÿ——ÿ——ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿ††ÿ––ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^RG;1&")08@HP^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿYY ÿZZ ÿiiÿkkÿmmÿnnÿooÿaaÿhhÿkkÿmmÿooÿqqÿrrÿssÿttÿuuÿvvÿvvÿwwÿvvÿ——ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ––ÿ––ÿ••ÿ””ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿ��ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMA7,"  (08@IQY^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿWW ÿTTÿSSÿeeÿmmÿooÿooÿppÿrrÿeeÿffÿjjÿllÿnnÿppÿqqÿrrÿttÿttÿuuÿvvÿvvÿvvÿ‹‹ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ™™ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ��ÿŽŽÿ‹‹ÿˆˆÿ‘‘ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2(&.7@IRZb^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿWW ÿTTÿTTÿTTÿSSÿllÿppÿppÿqqÿqqÿqqÿmmÿccÿhhÿkkÿmmÿooÿqqÿqqÿssÿttÿttÿuuÿuuÿvvÿvvÿ™™ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿ��ÿŠŠÿ……ÿ¡¡*ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC7-# "+4>GQZb333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿWW ÿSSÿTTÿTTÿTTÿTTÿSSÿiiÿqqÿqqÿqqÿqqÿqqÿqqÿbbÿeeÿiiÿllÿnnÿooÿqqÿqqÿssÿttÿttÿuuÿuuÿuuÿ……ÿ˜˜ÿ˜˜ÿ˜˜ÿ˜˜ÿ——ÿ——ÿ——ÿ––ÿ––ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿ‹‹ÿ‡‡ÿ‰‰ ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3) &/: ÿLÿXÿ\ÿYÿTTÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿ``ÿqqÿqqÿqqÿqqÿppÿooÿnnÿbbÿggÿjjÿllÿnnÿooÿqqÿqqÿrrÿssÿttÿttÿuuÿxxÿ——ÿ——ÿ——ÿ——ÿ––ÿ––ÿ––ÿ••ÿ••ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿ……ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD8.% )3Yÿlÿvÿ|ÿ}ÿ|ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿUUÿqqÿqqÿppÿooÿnnÿllÿkkÿccÿccÿhhÿjjÿmmÿnnÿooÿqqÿqqÿrrÿrrÿssÿssÿssÿŠŠÿ——ÿ––ÿ••ÿ••ÿ••ÿ••ÿ””ÿ””ÿ““ÿ’’ÿ‘‘ÿ��ÿŽŽÿŒŒÿ‰‰ÿƒƒÿ››"ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4*  "9ÿfÿyÿ„ÿŒÿ�ÿ‘ÿ�ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿYYÿnnÿnnÿllÿjjÿggÿbbÿ^^ÿ^^ÿddÿhhÿjjÿllÿnnÿooÿppÿqqÿrrÿrrÿssÿssÿssÿ””ÿ••ÿ••ÿ••ÿ••ÿ––ÿ––ÿ••ÿ‘‘ÿ��ÿ��ÿŽŽÿŒŒÿŠŠÿ††ÿ’’ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/% +ÿhÿ~ÿ‹ÿ”ÿšÿ�ÿžÿ�ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿUUÿeeÿffÿaaÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿddÿhhÿjjÿllÿmmÿnnÿooÿppÿqqÿqqÿqqÿrrÿˆˆÿ““ÿ““ÿ””ÿ––ÿ––ÿ––ÿ••ÿ““ÿŽŽÿˆˆÿŒŒÿ‰‰ÿ††ÿ��ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" _ÿ{ÿŒÿ—ÿŸÿ¤ÿ§ÿ¨ÿ§ÿ¤ÿ|ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿXX ÿ\\ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿggÿiiÿkkÿllÿmmÿnnÿooÿooÿppÿppÿssÿ””ÿ��ÿ””ÿ••ÿ––ÿ––ÿ––ÿ””ÿ��ÿˆˆÿ‰‰ÿƒƒÿ’’ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^RG;1& Aÿrÿˆÿ–ÿŸÿ¦ÿ«ÿ®ÿ¯ÿ®ÿ«ÿ‰ÿ�ÿ�ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿXX ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]]ÿaaÿffÿhhÿjjÿkkÿmmÿmmÿnnÿnnÿooÿnnÿ€€ÿ��ÿ’’ÿ••ÿ––ÿ––ÿ––ÿ””ÿ‘‘ÿŠŠÿ……ÿ››"ÿ««5ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMA7," [ÿ}ÿ�ÿœÿ¥ÿ¬ÿ±ÿ´ÿµÿ´ÿ±ÿ�ÿ‘ÿ’ÿ’ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿYY ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿccÿffÿhhÿiiÿjjÿkkÿllÿllÿllÿooÿŠŠÿ‘‘ÿ””ÿ––ÿ––ÿ––ÿ••ÿ““ÿ��ÿ‘‘ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TH=2( fÿƒÿ”ÿ ÿ©ÿ¯ÿµÿ½ÿÇÿ¾ÿ¶ÿ’ÿ‘ÿ�ÿŽÿTTÿTTÿTTÿTTÿTTÿTTÿUUÿZZ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿ^^ÿbbÿeeÿffÿhhÿhhÿiiÿiiÿhhÿÿ��ÿ””ÿ••ÿ––ÿ––ÿ––ÿ””ÿ��ÿˆˆÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿeZOC7-# jÿ†ÿ–ÿ¢ÿ«ÿ±ÿ¸ÿÜÿÿÿóÿºÿ�ÿŽÿ‹ÿ†ÿTTÿTTÿTTÿTTÿVVÿZZ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿ__ÿaaÿbbÿccÿccÿccÿbbÿ��ÿ’’ÿ••ÿ––ÿ––ÿ––ÿ””ÿ‘‘ÿŒŒÿ  'ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaUI>3) jÿ†ÿ–ÿ¢ÿ«ÿ±ÿ¸ÿ×ÿÿÿçÿºÿ²ÿ†ÿ€ÿTTÿTTÿTTÿTTÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ��ÿ‘‘ÿ””ÿ––ÿ––ÿ––ÿ••ÿ’’ÿŽŽÿ””ÿªª4ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ[PD9.%eÿ‚ÿ”ÿ ÿ©ÿ¯ÿµÿ»ÿÃÿ½ÿµÿ°ÿ©ÿ¡ÿTTÿTTÿTTÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿ��ÿ““ÿ••ÿ––ÿ––ÿ••ÿ““ÿ��ÿˆˆÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿbVJ?4* Yÿ|ÿ�ÿœÿ¥ÿ¬ÿ°ÿ³ÿµÿ´ÿ±ÿ¬ÿ¦ÿ�ÿTTÿTTÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿŒŒÿ’’ÿ””ÿ––ÿ––ÿ––ÿ””ÿ‘‘ÿŒŒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ\QF:/%:ÿpÿ‡ÿ•ÿŸÿ¦ÿ«ÿ®ÿ¯ÿ®ÿ«ÿ¦ÿ ÿ–ÿ‰ÿÿTTÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿhhÿ��ÿ””ÿ––ÿ––ÿ––ÿ••ÿ““ÿŽŽÿƒƒÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5+" \ÿzÿ‹ÿ–ÿžÿ£ÿ¦ÿ§ÿ¦ÿ£ÿŸÿ—ÿ�ÿ}ÿcÿ@333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿŽŽÿ““ÿ••ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ^SG;1&eÿ|ÿŠÿ“ÿ™ÿœÿ�ÿœÿ™ÿ”ÿ‹ÿ~ÿjÿ<ÿ421^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿkkÿvvÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdYMB7,# ÿbÿwÿƒÿŠÿŽÿ�ÿŽÿ‹ÿ„ÿyÿgÿAÿ+)(&%$^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿggÿvvÿvvÿvv ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_TI=2(Rÿhÿsÿyÿ{ÿzÿtÿkÿXÿÿ"! 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvvÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿf[OC8.$ @ÿPÿUÿRÿEÿ 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿvvÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿaVJ>4)   333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv!ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ]QF:/% ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿvvÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿdXLA5+"  ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ_SH<1'333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿg[PD8.# 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿcXL@5*!333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿkaUI=2( ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿj^RF;/% ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿvvÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿh]QE9.$ 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv ÿvvÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿqg\PD8.$ 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv!ÿvv ÿvvÿvvÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿrh\QE9.% 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTT ÿTTÿTTÿTTÿvv ÿvv!ÿvv ÿ˜ÿ‰ÿvvÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ{si^RF;/& 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿvv ÿvv!ÿvv ÿœÿ�ÿxÿvv ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ|tk`UI=2( ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿTTÿTTÿTT ÿvv!ÿ£ÿŸÿ”ÿ‚ÿvvÿ©©3ÿ©©3ÿ©©3ÿ„~vmbXL@5+! 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿTTÿvÿŽÿ›ÿvv ÿ¤ÿ¡ÿ™ÿŠÿmÿ©©3ÿ©©3ÿ©©3ÿ…€ype[OC8-# 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿhÿ‡ÿ—ÿ ÿ¤ÿTÿ^ÿbÿ`ÿYÿHÿІ‚{si^SG;0& 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿRÿÿ“ÿ^ÿoÿxÿ~ÿ€ÿÿ{ÿsÿfÿLÿƒ}ukaVJ>3( 333ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿGÿiÿ{ÿ†ÿ�ÿ‘ÿ’ÿ’ÿ�ÿ‰ÿ€ÿqÿXÿ~wncXL@5+! ^^ ÿ^^ ÿAÿkÿÿŒÿ”ÿšÿžÿŸÿžÿœÿ—ÿ�ÿ…ÿtÿWÿxoeZNB7,"  "+dÿ}ÿ�ÿ—ÿŸÿ¤ÿ§ÿ¨ÿ¨ÿ¦ÿ¡ÿ›ÿ’ÿ„ÿpÿDÿoeZOC7,# Nÿtÿ‰ÿ–ÿ ÿ§ÿ«ÿ®ÿ°ÿ¯ÿ­ÿ©ÿ£ÿ›ÿ�ÿ~ÿaÿndYNC7," aÿ~ÿ�ÿ�ÿ¦ÿ¬ÿ±ÿ´ÿ¶ÿµÿ³ÿ®ÿ©ÿ¡ÿ–ÿ‡ÿoÿ2ÿbXLA5+" jÿ…ÿ•ÿ¡ÿ©ÿ°ÿµÿ¼ÿÄÿÀÿ¸ÿ²ÿ­ÿ¥ÿ›ÿŒÿwÿLÿ^TI>3) -ÿoÿˆÿ—ÿ£ÿ«ÿ²ÿ¹ÿÑÿÿÿÿÿ¾ÿµÿ®ÿ§ÿ�ÿ�ÿzÿTÿYOD:0&.ÿoÿˆÿ˜ÿ£ÿ¬ÿ²ÿ¹ÿÕÿÿÿÿÿ¾ÿµÿ¯ÿ§ÿ�ÿ�ÿ{ÿTÿRI?5,# kÿ…ÿ–ÿ¡ÿªÿ±ÿ¶ÿ¾ÿËÿÃÿ¹ÿ³ÿ­ÿ¦ÿ›ÿ�ÿxÿMÿJB90'bÿ€ÿ‘ÿžÿ§ÿ­ÿ²ÿ¶ÿ¸ÿ·ÿ´ÿ°ÿªÿ¢ÿ—ÿˆÿpÿ4ÿB:2*" PÿvÿŠÿ˜ÿ¡ÿ¨ÿ­ÿ°ÿ±ÿ±ÿ¯ÿ«ÿ¥ÿœÿ‘ÿ€ÿcÿ@92+#fÿÿ�ÿšÿ¡ÿ¦ÿ©ÿ«ÿªÿ¨ÿ¤ÿ�ÿ”ÿ‡ÿrÿGÿ50*# Eÿnÿ‚ÿ�ÿ—ÿ�ÿ ÿ¢ÿ¡ÿŸÿšÿ“ÿˆÿwÿZÿ1,(" Lÿmÿ~ÿ‰ÿ�ÿ”ÿ•ÿ•ÿ’ÿŒÿƒÿuÿ\ÿ*'# >ÿcÿsÿ}ÿ‚ÿ„ÿƒÿÿxÿjÿQÿ#!CÿZÿcÿgÿeÿ^ÿNÿ  ÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿðÿÿþÿÿðÿÿàÿÿðÿ€ÿøþ?ÿøÿüÿüÿþÿþÿþÿÿÿÿÿÿÿÿÿþÿþÿþÿþÿþÿþÿüÿüÿüÿüÿüÿü?ÿøÿøÿÿøÿÿøÿÿø?ÿÿðÿÿðÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿàÿÿÿàÿÿÿàÿÿÿÀÿÿÿÀÿÿÿÀÿÿÿ€ÿÿÿÿÿþ?ÿÿü?ÿÿø?ÿÿðÿÿàÿÿÀÿÿÿÀÿÿÿ€ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿ€?ÿÿÿ€?ÿÿÿ€ÿÿÿÀÿÿÿàÿÿÿÿàÿÿÿÿøÿÿÿÿþÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÿÿøÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿatomes_1.3.1/misc/win/atomes-latest-win.iss0000664000175000017500000003507715212624223020346 0ustar lerouxleroux; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId=4DA2F2FC-AD2D-414A-8197-0DD52F1593D2 AppName=atomes AppVerName=atomes 1.3.1 AppPublisher=CNRS AppPublisherURL=https://atomes.ipcms.fr/ AppSupportURL=https://atomes.ipcms.fr/ AppUpdatesURL=https://atomes.ipcms.fr/ DefaultDirName={autopf}\atomes DisableDirPage=yes DefaultGroupName=atomes LicenseFile=COPYING OutputDir=Setup OutputBaseFilename=atomes-latest-setup SetupIconFile=setup.ico UninstallDisplayIcon=setup.ico Compression=lzma2 SolidCompression=yes ChangesAssociations=yes ; "ArchitecturesAllowed=x64" specifies that Setup cannot run on ; anything but x64. ArchitecturesAllowed=x64 ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be ; done in "64-bit mode" on x64, meaning it should use the native ; 64-bit Program Files directory and the 64-bit view of the registry. ArchitecturesInstallIn64BitMode=x64 WizardStyle=modern [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Code] var maj : Integer; min : Integer; patch : Integer; version : String; key : String; function InitializeSetup(): Boolean; begin Result := TRUE; maj := 1; min := 1; patch := 0; while (maj <= 1) do begin while (min <= 3) do begin while (patch <= 18) do begin version := IntToStr(maj) + '.' + IntToStr(min) + '.' + IntToStr(patch); key := 'Software\IPCMS\ATOMES\' + version; if RegValueExists(HKEY_LOCAL_MACHINE, key, 'Version') then begin MsgBox(Format('An older version of atomes has been detected on your computer: %s'#13#13'Please uninstall this previous version before installing any other', [version]), mbConfirmation, MB_OK); Result := FALSE; end; patch := patch + 1; end; min := min + 1; end; maj := maj + 1; end; end; [Registry] Root: HKLM; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Name"; ValueData: "atomes"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Company"; ValueData: "Institut de Physique et Chimie des Matériaux de Strasbourg"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.awf\OpenWithProgids"; ValueType: string; ValueName: "atomesWorkspaceFile.awf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Workspace File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-workspace.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".awf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.apf\OpenWithProgids"; ValueType: string; ValueName: "atomesProjectFile.apf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesProjectFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Project File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-project.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".apf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xyz\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-XYZ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ"; ValueType: string; ValueName: ""; ValueData: "XYZ Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xyz"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.pdb\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-PDB"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB"; ValueType: string; ValueName: ""; ValueData: "PDB Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".pdb"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.ent\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-ENT"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT"; ValueType: string; ValueName: ""; ValueData: "ENT Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".ent"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.cif\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-CIF"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF"; ValueType: string; ValueName: ""; ValueData: "CIF crystallographic information"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".cif"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.trj\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-TRJ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ"; ValueType: string; ValueName: ""; ValueData: "CPMD trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".trj"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xdatcar\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-VAS"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS"; ValueType: string; ValueName: ""; ValueData: "VASP trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xdatcar"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.c3d\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-C3D"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D"; ValueType: string; ValueName: ""; ValueData: "Chem3D Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".c3d"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.hist\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-HIST"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST"; ValueType: string; ValueName: ""; ValueData: "DL-POLY History File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".hist"; ValueData: ""; Flags: uninsdeletekey Root: HKLM; SubKey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; ValueType: string; ValueName: "Path"; ValueData: "{reg:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\,Path};{app}" [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var Path, AppDir: string; Index: Integer; begin if CurUninstallStep = usUninstall then begin if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path) then begin AppDir := ExpandConstant('{app}'); Index := Pos(AppDir, Path); Delete(Path, Index-1, Length(AppDir)+1); RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path); end; end; end; [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked ; Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked [Files] Source: "atomes\pixmaps\*"; DestDir: "{app}\pixmaps\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\library\*"; DestDir: "{app}\library"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\bin\*"; DestDir: "{app}\bin\"; Components: main; Flags: ignoreversion Source: "atomes\etc\*"; DestDir: "{app}\etc\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\lib\*"; DestDir: "{app}\lib\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\share\*"; DestDir: "{app}\share\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\var\*"; DestDir: "{app}\var\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\locale\*"; DestDir: "{app}\locale\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "setup.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-workspace.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-project.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-coordinates.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "COPYING"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "ChangeLog"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "gtk-sources\*"; DestDir: "{app}\gtk-sources\"; Components: main; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main Name: "{group}\{cm:ProgramOnTheWeb,atomes}"; Filename: "https://atomes.ipcms.fr/"; Components: main; Name: "{group}\{cm:UninstallProgram,atomes}"; Filename: "{uninstallexe}"; IconFilename: "{app}\atomes.ico"; Components: main; Name: "{commondesktop}\atomes"; Filename: "{app}\bin\atomes.exe"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main ; Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; Tasks: quicklaunchicon; IconFilename: "{app}\atomes.ico"; Components: main [Components] Name: "main"; Description: "atomes"; Types: full compact custom [Run] Filename: "{app}\bin\atomes.exe"; Description: "{cm:LaunchProgram,Atomes}"; Flags: nowait postinstall skipifsilent atomes_1.3.1/misc/win/atomes.rc.in0000664000175000017500000000266515212624223016471 0ustar lerouxleroux/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Atomes. If not, see */ #include ATOMES_ICON ICON "../misc/win/atomes.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ PRODUCTVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ FILEOS VOS_NT FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "@PACKAGE@" VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "@PACKAGE_STRING@" VALUE "FileVersion", "@PACKAGE_VERSION@" VALUE "LegalCopyright", "\251 2026 S\351bastien Le Roux" VALUE "OriginalFileName", "@PACKAGE@.exe" VALUE "ProductName", "@PACKAGE_STRING@" VALUE "ProductVersion", "@PACKAGE_VERSION@" :x END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 1200 END END atomes_1.3.1/misc/win/atomes-workspace.ico0000664000175000017500000020407615212624223020226 0ustar lerouxleroux€€ ((€     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}€��������������������������������������������������������������������������€}vk]J6$  ,BàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿáááøA+ 2KàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùK26QàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùP6 8TßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿßßßúT7  :VßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúU9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿêêêÿèèèÿæææÿæææÿæææÿéééÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿèèèÿâââÿÞÞÞÿÜÜÜÿÛÛÛÿÝÝÝÿßßßÿâââÿèèèÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿçççÿßßßÿÚÚÚÿÖÖÖÿÓÓÓÿÒÒÒÿÓÓÓÿ×××ÿÛÛÛÿàààÿçççÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿèèèÿßßßÿÙÙÙÿÓÓÓÿÍÍÍÿÈÈÈÿÇÇÇÿÈÈÈÿÌÌÌÿÒÒÒÿÙÙÙÿßßßÿèèèÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿãããÿÚÚÚÿÑÑÑÿ²²³ÿ��—ÿ¥¥¨ÿ¸¸¹ÿ½½½ÿÂÂÂÿÉÉÉÿÑÑÑÿÙÙÙÿàààÿèèèÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞúV9  :Wßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿéééÿßßßÿ¼¼¿ÿtt�ÿ|ÿ€ÿ}ÿ00mÿ›› ÿ¸¸¸ÿÀÀÀÿÊÊÊÿÓÓÓÿÚÚÚÿáááÿèèèÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿÁÁÃÿ00sÿ�ÿ›ÿ ÿœÿ�ÿ""wÿ˜˜žÿ¸¸¸ÿÂÂÂÿÌÌÌÿÔÔÔÿÚÚÚÿßßßÿäääÿèèèÿêêêÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿäääÿ||Žÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ--fÿ¯¯°ÿ»»»ÿÄÄÄÿÌÌÌÿÓÓÓÿØØØÿÛÛÛÿÞÞÞÿàààÿãããÿåååÿèèèÿéééÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿãããÿ22tÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ""yÿ¨¨©ÿ³³³ÿºººÿÂÂÂÿÈÈÈÿÍÍÍÿÑÑÑÿÔÔÔÿ×××ÿÙÙÙÿÛÛÛÿÝÝÝÿßßßÿâââÿäääÿæææÿèèèÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿääåÿ55yÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ""|ÿ¤¤¥ÿ«««ÿ±±±ÿ¸¸¸ÿ½½½ÿÂÂÂÿÅÅÅÿÉÉÉÿÌÌÌÿÏÏÏÿÑÑÑÿÔÔÔÿÖÖÖÿÙÙÙÿÙÙÙÿÜÜÜÿÞÞÞÿàààÿãããÿåååÿæææÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :Wßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿçççÿæææÿäääÿãããÿßßàÿ>>pÿ‘ÿ¦ÿ²ÿ¹ÿ³ÿ¨ÿ•ÿ!!oÿ££{ÿ¨¨€ÿªª¦ÿ®®«ÿ²²²ÿ¶¶¶ÿ¹¹¹ÿ½½½ÿÀÀÀÿÃÃÃÿÅÅÅÿÈÈÈÿÊÊÊÿÍÍÍÿÐÐÐÿÒÒÒÿÕÕÕÿ×××ÿÙÙÙÿÚÚÚÿÜÜÜÿÞÞÞÿáááÿäääÿæææÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿãããÿßßßÿÛÛÛÿÚÚÚÿÛÛÛÿÝÝÝÿàààÿãããÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿåååÿßßßÿÛÛÛÿÚÚÚÿÙÙÙÿÚÚÚÿ¡¡ªÿ~ÿ™ÿ¥ÿ©ÿ¦ÿ›ÿƒÿBBPÿ¦¦2ÿ©©3ÿ©©=ÿªªCÿªªÿ¬¬…ÿ®®ªÿ±±®ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¾¾¾ÿÁÁÁÿÄÄÄÿÇÇÇÿÊÊÊÿÌÌÌÿÎÎÎÿÑÑÑÿÓÓÓÿÕÕÕÿØØØÿÚÚÚÿÛÛÛÿÝÝÝÿàààÿâââÿäääÿäääÿåååÿäääÿâââÿÝÝÝÿÙÙÙÿÖÖÖÿÓÓÓÿÒÒÒÿÓÓÓÿÓÓÓÿ×××ÿÜÜÜÿãããÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿäääÿÜÜÜÿØØØÿÔÔÔÿÐÐÐÿÏÏÏÿÑÑÑÿÐÐÑÿ{{�ÿ|ÿŽÿ“ÿ�ÿ€ÿyÿ€ÿ‘‘-ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿªª€ÿ««ƒÿ­­™ÿ°°­ÿ²²±ÿµµµÿ···ÿ»»»ÿ½½½ÿÀÀÀÿÂÂÂÿÅÅÅÿÈÈÈÿËËËÿÎÎÎÿÏÏÏÿÒÒÒÿÔÔÔÿÖÖÖÿØØØÿÙÙÙÿÚÚÚÿÛÛÛÿÚÚÚÿØØØÿÕÕÕÿÐÐÐÿÍÍÍÿÉÉÉÿÈÈÈÿÈÈÈÿËËËÿÐÐÐÿÕÕÕÿÛÛÛÿâââÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿåååÿÝÝÝÿ×××ÿÐÐÐÿÊÊÊÿÆÆÆÿÄÄÄÿÅÅÅÿÊÊÊÿËËËÿ˜˜ ÿmmˆÿdÿpÿ++fÿ==‰ÿ ‘ÿxx(ÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªgÿ««‚ÿ­­™ÿ®®«ÿ±±¯ÿ³³³ÿ¶¶¶ÿ¹¹¹ÿ¼¼¼ÿ¿¿¿ÿÁÁÁÿÄÄÄÿÆÆÆÿÉÉÉÿÌÌÌÿÎÎÎÿÐÐÐÿÒÒÒÿÒÒÒÿÒÒÒÿÐÐÐÿÌÌÌÿÇÇÇÿ¿¿¿ÿ½½½ÿ½½½ÿ½½½ÿÁÁÁÿÈÈÈÿÏÏÏÿÖÖÖÿÝÝÝÿãããÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿàààÿØØØÿÏÏÏÿ¯¯±ÿŽŽ•ÿ££¦ÿ¶¶·ÿºººÿ¿¿¿ÿÆÆÆÿÇÇÇÿ››•ÿ[[ÿ22[ÿ==dÿmm(ÿtt-ÿvvÿ‡‡ ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªgÿªª‚ÿ««…ÿ®®ªÿ°°­ÿ²²±ÿµµµÿ···ÿºººÿ½½½ÿÀÀÀÿÂÂÂÿÅÅÅÿÆÆÆÿÇÇÇÿÇÇÇÿÄÄÄÿ©©¬ÿ‰‰™ÿ11eÿcc~ÿ††�ÿ°°±ÿ¸¸¸ÿÀÀÀÿÉÉÉÿÑÑÑÿØØØÿâââÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿæææÿÜÜÜÿºº½ÿrrŽÿ|ÿ€ÿ}ÿ//lÿ™™žÿ¶¶¶ÿ½½½ÿÀÀÀÿššŽÿ^^ ÿZZÿJJ=ÿffÿvv ÿvvÿwwÿœœ,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿ©©ÿ««„ÿ­­¨ÿ¯¯¬ÿ²²±ÿ³³³ÿ¶¶¶ÿ¸¸¸ÿºººÿ»»»ÿºººÿ  §ÿ((wÿ‰ÿ‘ÿ�ÿ�ÿbb‚ÿ®®¯ÿºººÿÄÄÄÿÎÎÎÿÖÖÖÿàààÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿåååÿ¿¿Áÿ//sÿ�ÿ›ÿ ÿœÿ�ÿ""wÿ––œÿ¶¶¶ÿ¶¶¶ÿ{{jÿ^^ ÿ^^ ÿYYÿVVÿttÿvv ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿ©©~ÿªª�ÿ««—ÿ­­ªÿ¯¯­ÿ¯¯¯ÿ™™�ÿ%%vÿ’ÿ¢ÿ¨ÿ§ÿ�ÿˆÿdd~ÿ¶¶¶ÿÂÂÂÿÌÌÌÿÕÕÕÿÞÞÞÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿâââÿzz�ÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ,,eÿ¬¬¬ÿ­­­ÿ\\0ÿ^^ ÿ^^ ÿ^^ ÿWWÿggÿvv ÿvv ÿvvÿ‡‡ ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿ¨¨eÿ¨¨ÿzzqÿ †ÿ¢ÿ¯ÿ¹ÿµÿ«ÿ™ÿ%%xÿµµ¶ÿÂÂÂÿÍÍÍÿÕÕÕÿßßßÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿàààÿ22sÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ""yÿ¥¥¦ÿ¥¥¤ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿWWÿrrÿvv ÿvvÿvvÿšš*ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿœœ,ÿuu(ÿ<<„ÿ§ÿ·ÿêÿÓÿ°ÿŸÿ€ÿ¦¦¨ÿÆÆÆÿÏÏÏÿ×××ÿàààÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿááâÿ44xÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ""{ÿŸŸ ÿŽŽŒÿ``ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿYYÿddÿvvÿvv ÿvvÿ}}ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿUUvÿ¥ÿ©ÿ³ÿËÿ¾ÿ®ÿ�ÿ((ÿ¾¾¿ÿËËËÿÓÓÓÿÛÛÛÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿãããÿáááÿàààÿÝÝÝÿ==pÿ‘ÿ¦ÿ²ÿ¹ÿ³ÿ¨ÿ•ÿ oÿžžvÿ‚‚Vÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿXXÿrrÿvv ÿvvÿ��ÿ––ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿvvÿtt1ÿ§ÿ¬ÿ§ÿ©ÿ¯ÿ­ÿ¤ÿ‘ÿ55oÿÈÈÈÿÑÑÑÿØØØÿßßßÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿâââÿÜÜÜÿÚÚÚÿ×××ÿ×××ÿ×××ÿŸŸ¨ÿ~ÿ™ÿ¥ÿ©ÿ¦ÿ›ÿƒÿBBPÿ  0ÿ‚‚"ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿffÿwwÿ„„ÿ““ÿ��ÿŸŸ)ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿ��,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿuu,ÿWW}ÿUU{ÿSStÿ •ÿ�ÿ›ÿ�ÿ++{ÿ²²·ÿÒÒÒÿ×××ÿÞÞÞÿâââÿâââÿâââÿâââÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿáááÿÚÚÚÿÕÕÕÿÑÑÑÿÏÏÏÿÍÍÍÿÎÎÎÿÎÎÎÿyyŽÿ|ÿŽÿ“ÿ�ÿ€ÿyÿ€ÿˆˆ+ÿVV#ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿ‹‹ÿ••ÿ––ÿ““ÿ�� ÿ��ÿŠŠÿ‰‰ÿ‰‰ÿŠŠÿŽŽÿšš%ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿŸŸ,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿvvÿzzÿ„„.ÿ,,tÿ~ÿ++~ÿ88oÿµµºÿÕÕÕÿÚÚÚÿÞÞÞÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿãããÿÚÚÚÿÔÔÔÿÍÍÍÿÈÈÈÿÃÃÃÿÂÂÂÿÄÄÄÿÇÇÇÿÈÈÈÿ––žÿll‡ÿdÿpÿ++fÿ==‰ÿ �ÿqq%ÿaaÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿzzÿ““ÿ––ÿ••ÿ‘‘ÿ‹‹ÿŽŽÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿŠŠÿ��'ÿ©©3ÿ©©3ÿ©©3ÿ©©2ÿ  (ÿ””ÿŽŽÿ{{ÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿwwÿ††"ÿ““&ÿ§§2ÿ¦¦zÿ¯¯¯ÿ©©ªÿÉÉÉÿÐÐÑÿØØØÿÞÞÞÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿÝÝÝÿÖÖÖÿÌÌÌÿ­­¯ÿŒŒ“ÿ¡¡¤ÿ´´´ÿ¸¸¸ÿ¾¾¾ÿÄÄÄÿÄÄÄÿ™™“ÿ[[ÿ22[ÿ==dÿmm(ÿrr,ÿmmÿ`` ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿŒŒÿ””ÿ––ÿ””ÿ��ÿ’’ÿ’’ÿ’’ÿ’’ÿ‘‘ÿ��ÿ��ÿ‰‰ÿ––ÿ¨¨2ÿ  *ÿ””ÿ‘‘ÿ••ÿ——ÿ�� ÿww"ÿvv!ÿvv ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©8ÿ¥¥�ÿ³³³ÿÃÃÃÿÒÒÒÿÛÛÛÿáááÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿÙÙÙÿ··ºÿqqŽÿ|ÿ€ÿ}ÿ..lÿ——œÿ³³³ÿ»»»ÿ¾¾¾ÿ™™�ÿ^^ ÿZZÿJJ=ÿffÿssÿaa ÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ``ÿyyÿ‘‘ÿ••ÿ––ÿ””ÿ••ÿ••ÿ••ÿ••ÿ””ÿ““ÿ‘‘ÿŽŽÿŠŠÿŒŒ ÿ‘‘ÿ••ÿ——ÿ˜˜ÿ˜˜ÿ––ÿ{{ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ¤¤[ÿ££¢ÿµµµÿÅÅÅÿÖÖÖÿáááÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿâââÿ¼¼¾ÿ..rÿ�ÿ›ÿ ÿœÿ�ÿ!!wÿ””šÿ³³³ÿ´´´ÿ{{iÿ^^ ÿ^^ ÿYYÿVVÿppÿggÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿooÿŒŒÿ””ÿ––ÿ––ÿ——ÿ——ÿ——ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿˆˆÿ’’ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ’’ÿŒŒÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ§§4ÿ™™‚ÿ¦¦¦ÿ¸¸¸ÿÈÈÈÿÚÚÚÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿßßßÿxx‹ÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ++eÿªªªÿ««ªÿ\\/ÿ^^ ÿ^^ ÿ^^ ÿWWÿbbÿ[[ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿjjÿooÿ……ÿ••ÿ––ÿ——ÿ˜˜ÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ��ÿŒŒÿ‹‹ÿ——ÿ••ÿ’’ÿ’’ÿžž&ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¤¤6ÿ——”ÿªªªÿ½½½ÿÌÌÌÿÞÞÞÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿÞÞÞÿ11sÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ!!yÿ££¤ÿ££¢ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ[[ ÿRRÿWWÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿffÿmmÿppÿvvÿ””ÿ˜˜ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ––ÿ””ÿ’’ÿŽŽÿˆˆÿ��ÿ’’ÿŸŸ(ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ}}RÿŒŒŽÿ²²²ÿÂÂÂÿÒÒÒÿàààÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿÛÛÛúV9  :WÝÝÝúâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿÞÞßÿ33xÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ!!{ÿ��žÿŒŒŠÿ``ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿTT ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿiiÿnnÿrrÿttÿ‰‰ÿ˜˜ÿ™™ÿššÿœœÿœœÿššÿ™™ÿ˜˜ÿ——ÿ••ÿ““ÿ��ÿ‹‹ÿ––ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¤¤:ÿ44fÿ¥¥¦ÿºººÿÉÉÉÿØØØÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÛÛÛúV9  :WÜÜÜúâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿßßßÿ<ÿ]]ÿ//Xÿyÿ€ÿˆÿ‡ÿzÿYYwÿ¡¡¢ÿ®®®ÿ¹¹¹ÿÃÃÃÿÌÌÌÿÕÕÕÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿÔÔÔùO3 :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÍÍÌÿžž”ÿ!!iÿŒÿœÿ£ÿ¢ÿ™ÿ„ÿ]]xÿ«««ÿ···ÿÂÂÂÿËËËÿÔÔÔÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿÔÔÔùI.  :WÔÔÔúÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿ×××ÿ››¦ÿƒÿžÿ¬ÿ²ÿ±ÿ©ÿ˜ÿxÿ——šÿ¸¸¸ÿÂÂÂÿËËËÿÔÔÔÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÕÕÕÿÖÖÖÿÔÔÔùA)  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿØØØÿtt‹ÿŽÿ¦ÿ´ÿÕÿÏÿ°ÿ¡ÿƒÿƒƒŽÿ»»»ÿÅÅÅÿÍÍÍÿÕÕÕÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿ×××ÿÕÕÕÿÑÑÑÿÌÌÌÿËËËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÅÿÅÅÅÿÆÆÆÿÆÆÆÿÇÇÇÿÈÈÈÿÉÉÉÿËËËÿÊÊÊÿËËËÿÌÌÌÿÍÍÍÿÍÍÍÿÎÎÎÿÏÏÏÿÐÐÐÿÓÓÓÿÔÔÔÿÃÃÃ×7! :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿyy�ÿŽÿ¦ÿµÿØÿÐÿ±ÿ¡ÿƒÿˆˆ’ÿ¿¿¿ÿÈÈÈÿÏÏÏÿØØØÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÑÑÑÿÉÉÉÿÃÃÃÿ¿¿¿ÿ¼¼¼ÿºººÿºººÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¹¹¹ÿ¹¹¹ÿºººÿ»»»ÿ¼¼¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÂÂÂÿÄÄÄÿÅÅÅÿÆÆÆÿÊÊÊÿÌÌÌÿÏÏÏÿ···í___i+  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿ¢¢­ÿ„ÿŸÿ­ÿ´ÿ³ÿªÿ™ÿzÿ§§ªÿÆÆÆÿÌÌÌÿÓÓÓÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÕÕÕÿÎÎÎÿÀÀÀÿµµµÿ¯¯¯ÿ¬¬¬ÿªªªÿ¨¨¨ÿ¨¨¨ÿ§§§ÿ§§§ÿ§§§ÿ§§§ÿ¨¨¨ÿ©©©ÿªªªÿ¬¬¬ÿ®®®ÿ¯¯¯ÿ±±±ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¿¿¿ÿÄÄÄÿÇÇÇÿ¦¦¦øfff}2   :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÕÿ99vÿŽÿŸÿ¥ÿ¤ÿ›ÿ†ÿqq‰ÿÆÆÆÿÌÌÌÿÒÒÒÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÖÖÖÿÒÒÒÿÉÉÉÿ···ÿ¨¨¨ÿ¡¡¡ÿ���ÿšššÿ˜˜˜ÿ———ÿ———ÿ–––ÿ———ÿ———ÿ˜˜˜ÿ˜˜˜ÿ›››ÿ���ÿžžžÿ¡¡¡ÿ£££ÿ¦¦¦ÿ©©©ÿ®®®ÿ²²²ÿ¹¹¹ÿºººÿ™™™ýhhh‡7$  :WÔÔÔúØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿ¼¼¿ÿ99tÿ‚ÿŒÿŠÿ€ÿttŽÿÈÈÉÿÏÏÏÿÓÓÓÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÅÅÅÿ¯¯¯ÿžžžÿ”””ÿ���ÿŒŒŒÿŠŠŠÿˆˆˆÿˆˆˆÿ‡‡‡ÿˆˆˆÿˆˆˆÿ‰‰‰ÿ‹‹‹ÿ���ÿ���ÿ’’’ÿ•••ÿ˜˜˜ÿœœœÿŸŸŸÿ¦¦¦ÿ±±±ÿ¬¬¬ÿ“““ÿppp”<'  :WÔÔÔúØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÕÿ¢¢«ÿ  ­ÿ��ªÿ··¼ÿÑÑÑÿÔÔÔÿ×××ÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÃÃÃÿªªªÿ———ÿ‹‹‹ÿ………ÿ‚‚‚ÿÿ}}}ÿ}}}ÿ}}}ÿ}}}ÿ~~~ÿ€€€ÿ‚‚‚ÿ„„„ÿ†††ÿˆˆˆÿŒŒŒÿ���ÿ”””ÿ���ÿ°°°ÿ¡¡¡ÿ“““ÿnnn™@+ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÁÁÁÿ§§§ÿ’’’ÿ………ÿ~~~ÿ{{{ÿyyyÿwwwÿwwwÿvvvÿwwwÿxxxÿzzzÿ|||ÿ~~~ÿ€€€ÿƒƒƒÿ‡‡‡ÿ›››ÿ²²²ÿ­­­ÿŸŸŸÿ•••ÿoooŸC- :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÏÏÏÿ¿¿¿ÿ¥¥¥ÿ���ÿ‚‚‚ÿ€€€ÿ‡‡‡ÿ‡‡‡ÿ���ÿ‹‹‹ÿ‹‹‹ÿ”””ÿ———ÿ˜˜˜ÿ   ÿ§§§ÿ±±±ÿºººÿÁÁÁÿ¹¹¹ÿ­­­ÿ   ÿ–––ÿrrr¤F. :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ———ÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿæææÿâââÿÜÜÜÿÕÕÕÿÌÌÌÿÄÄÄÿºººÿ®®®ÿ¢¢¢ÿ———ÿwww­G/ :WÓÓÓú×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ”””ÿîîîÿîîîÿîîîÿíííÿêêêÿçççÿâââÿÜÜÜÿÕÕÕÿÎÎÎÿÅÅÅÿ»»»ÿ¯¯¯ÿ£££ÿ———ÿzzz¯I0 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ“““ÿîîîÿîîîÿíííÿëëëÿçççÿâââÿÜÜÜÿ×××ÿÏÏÏÿÆÆÆÿ»»»ÿ°°°ÿ¤¤¤ÿ™™™ÿ¹J1 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¤¤¤ÿŽŽŽÿ‚‚‚ÿ’’’ÿîîîÿîîîÿêêêÿçççÿãããÿÞÞÞÿ×××ÿÏÏÏÿÇÇÇÿ¼¼¼ÿ±±±ÿ¦¦¦ÿ›››ÿ€€€»L3 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿƒƒƒÿ‘‘‘ÿîîîÿêêêÿèèèÿäääÿÞÞÞÿØØØÿÑÑÑÿÇÇÇÿ½½½ÿ³³³ÿ§§§ÿ›››ÿ‚‚‚¿M4  :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿìììÿèèèÿäääÿßßßÿÙÙÙÿÒÒÒÿÈÈÈÿ¿¿¿ÿ´´´ÿ¨¨¨ÿ›››ÿ‡‡‡ÆN5   :WÒÒÒúÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿèèèÿåååÿàààÿÚÚÚÿÑÑÑÿÊÊÊÿÀÀÀÿµµµÿªªªÿ���ÿ‹‹‹ÈO5!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¤¤¤ÿ‘‘‘ÿ………ÿ���ÿåååÿàààÿÚÚÚÿÓÓÓÿÊÊÊÿÁÁÁÿ···ÿ«««ÿžžžÿŒŒŒÌP6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÌÌÌÿ¾¾¾ÿ¤¤¤ÿ‘‘‘ÿ†††ÿ’’’ÿáááÿÚÚÚÿÓÓÓÿËËËÿÂÂÂÿ¸¸¸ÿ¬¬¬ÿŸŸŸÿ���ÒQ6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÒÒÒÿËËËÿ¼¼¼ÿ£££ÿ’’’ÿˆˆˆÿšššÿÛÛÛÿÔÔÔÿÍÍÍÿÃÃÃÿ¹¹¹ÿ®®®ÿ¢¢¢ÿ“““ÕQ6"  :WÑÑÑúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÒÒÒÿÊÊÊÿ»»»ÿ¢¢¢ÿ’’’ÿŠŠŠÿ¡¡¡ÿÕÕÕÿÍÍÍÿÄÄÄÿ»»»ÿ®®®ÿ¢¢¢ÿ•••ØQ8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÑÑÑÿÉÉÉÿ¹¹¹ÿ¡¡¡ÿ“““ÿ‹‹‹ÿ±±±ÿÎÎÎÿÆÆÆÿ¼¼¼ÿ¯¯¯ÿ£££ÿ™™™ÝR8$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÐÐÐÿÇÇÇÿµµµÿ   ÿ“““ÿ���ÿ»»»ÿÇÇÇÿ»»»ÿ±±±ÿ¥¥¥ÿšššßR7$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÍÍÍÿÃÃÃÿ²²²ÿŸŸŸÿ•••ÿ‘‘‘ÿÃÃÃÿ½½½ÿ²²²ÿ¦¦¦ÿ›››âS8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÀÀÀÿ¯¯¯ÿŸŸŸÿ———ÿ¡¡¡ÿ¾¾¾ÿ³³³ÿ§§§ÿŸŸŸåS9#  :WÐÐÐúÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÓÓÓÿÑÑÑÿÉÉÉÿ½½½ÿ¬¬¬ÿ   ÿ›››ÿ···ÿ´´´ÿ©©©ÿ   éR9$  :VÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÏÏÏÿÇÇÇÿ¹¹¹ÿªªªÿ¢¢¢ÿ¢¢¢ÿ···ÿªªªÿ¢¢¢êU9$  8TÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÃÃÃÿµµµÿªªªÿ¥¥¥ÿµµµÿ«««ÿ¥¥¥ïT9$ 6QÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÊÊÊÿÀÀÀÿ´´´ÿ¬¬¬ÿ­­­ÿ±±±ÿ¨¨¨ïT9% 2KÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿ¿¿¿ÿµµµÿ²²²ÿ¸¸¸ÿ¨¨¨ñ U9%  ,BÐÐÐùÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿÀÀÀÿ¹¹¹ÿ»»»ÿ«««ñU9%  $6ÑÑÑøÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿËËËÿÃÃÃÿ¿¿¿ÿ­­­êR7% )ÒÒÒ÷ÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÒÒÒÿÑÑÑÿÐÐÐÿÌÌÌÿÇÇÇÿ¯¯¯Ö$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ÿÿþÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþ?ÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþ?ÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÿatomes_1.3.1/misc/win/atomes-coordinates.ico0000664000175000017500000020407615212624223020542 0ustar lerouxleroux€€ ((€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $6J]mw}€��������������������������������������������������������������������������€}vk]J6$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ,BàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿáááøA+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2KàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùK2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6QàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùP6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8TßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿßßßúT7 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :VßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúU9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿßßßúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿÓÓÓÿ£££ÿ›››ÿÁÁÁÿâââÿçççÿçççÿèèèÿ½½½ÿ———ÿÀÀÀÿæææÿéééÿéééÿéééÿÓÓÓÿœœœÿ¬¬¬ÿáááÿêêêÿêêêÿÇÇÇÿÈÈÈÿëëëÿëëëÿëëëÿëëëÿÖÖÖÿ›››ÿ¸¸¸ÿÓÓÓÿ¾¾¾ÿèèèÿâââÿ½½½ÿÞÞÞÿêêêÿÂÂÂÿÍÍÍÿëëëÿëëëÿÔÔÔÿ¾¾¾ÿçççÿêêêÿäääÿ¢¢¢ÿ¥¥¥ÿÚÚÚÿ½½½ÿÓÓÓÿéééÿéééÿãããÿÇÇÇÿ¾¾¾ÿçççÿèèèÿÑÑÑÿ���ÿœœœÿÄÄÄÿãããÿæææÿØØØÿ¦¦¦ÿ–––ÿ¸¸¸ÿáááÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿVVVÿÿÿÿÿ+++ÿÏÏÏÿçççÿIIIÿ ÿÿÿJJJÿßßßÿéééÿ‹‹‹ÿÿÿ ÿ***ÿ¸¸¸ÿêêêÿ###ÿ***ÿêêêÿëëëÿëëëÿ³³³ÿÿÿ ÿÿÿÂÂÂÿ¤¤¤ÿ ÿ{{{ÿêêêÿÿ777ÿëëëÿëëëÿOOOÿÿÈÈÈÿæææÿ,,,ÿÿ ÿÿÿQQQÿéééÿ¼¼¼ÿ ÿÿÿÛÛÛÿtttÿÿÿÿÿNNNÿÁÁÁÿÿÿÿÿ===ÿØØØÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿåååÿåååÿåååÿåååÿkkkÿÿ)))ÿ–––ÿ™™™ÿVVVÿÿ˜˜˜ÿªªªÿÿ;;;ÿ³³³ÿJJJÿ ÿXXXÿéééÿ!!!ÿÿ®®®ÿ{{{ÿÿ&&&ÿáááÿ===ÿÿÜÜÜÿëëëÿëëëÿ888ÿÿ‰‰‰ÿ™™™ÿÿÿ„„„ÿÙÙÙÿÿGGGÿëëëÿ///ÿ###ÿçççÿëëëÿ‰‰‰ÿÿ���ÿ¥¥¥ÿÿDDDÿ±±±ÿ666ÿÿ444ÿéééÿOOOÿ ÿhhhÿ���ÿÙÙÙÿÿ ÿ£££ÿ³³³ÿnnnÿ???ÿÜÜÜÿ000ÿŒŒŒÿ¼¼¼ÿiiiÿ ÿ___ÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿ222ÿÿÌÌÌÿåååÿåååÿåååÿÐÐÐÿ¿¿¿ÿlllÿÿžžžÿåååÿåååÿ///ÿÿÊÊÊÿÿ@@@ÿæææÿäääÿsssÿÿ€€€ÿcccÿ ÿ©©©ÿåååÿåååÿ***ÿ$$$ÿåååÿåååÿ–––ÿÿLLLÿåååÿ ÿ000ÿåååÿGGGÿÿÊÊÊÿåååÿÆÆÆÿ ÿRRRÿ¼¼¼ÿÿLLLÿ×××ÿÝÝÝÿ"""ÿ"""ÿáááÿ^^^ÿ ÿ¯¯¯ÿåååÿ¾¾¾ÿÿXXXÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿØØØÿæææÿãããÿµµµÿQQQÿ ÿ???ÿæææÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿ&&&ÿÿÞÞÞÿåååÿåååÿåååÿåååÿæææÿ���ÿÿ‚‚‚ÿåååÿåååÿfffÿ ÿ¥¥¥ÿÿ777ÿæææÿäääÿÔÔÔÿÿFFFÿªªªÿÿgggÿåååÿåååÿ333ÿÿÛÛÛÿåååÿåååÿÿ333ÿåååÿ555ÿÿÝÝÝÿ{{{ÿÿŽŽŽÿåååÿäääÿÿ666ÿåååÿHHHÿ ÿÿ'''ÿÿÿÈÈÈÿ¤¤¤ÿÿsssÿåååÿÏÏÏÿÿ ÿ ÿ ÿ ÿÿKKKÿÞÞÞÿ111ÿÿ ÿ&&&ÿ¸¸¸ÿæææÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :Wßßßúäääÿäääÿäääÿåååÿåååÿåååÿ---ÿÿÌÌÌÿåååÿåååÿåååÿåååÿåååÿÒÒÒÿÿ333ÿÞÞÞÿåååÿzzzÿÿ‘‘‘ÿ444ÿÿ¾¾¾ÿäääÿáááÿÿ===ÿÚÚÚÿÿ)))ÿÚÚÚÿåååÿmmmÿÿ{{{ÿåååÿåååÿ"""ÿ!!!ÿàààÿTTTÿÿ½½½ÿ¾¾¾ÿÿ<<<ÿâââÿåååÿ---ÿ&&&ÿåååÿåååÿ¦¦¦ÿZZZÿJJJÿ///ÿÿ���ÿØØØÿÿCCCÿåååÿåååÿ)))ÿÿŠŠŠÿ���ÿœœœÿÿ@@@ÿ•••ÿÿ777ÿ¿¿¿ÿåååÿäääÿåååÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿTTTÿÿlllÿäääÿåååÿåååÿåååÿåååÿäääÿWWWÿÿ===ÿ{{{ÿ%%%ÿÿÌÌÌÿ®®®ÿÿ"""ÿvvvÿEEEÿÿjjjÿåååÿ$$$ÿÿ000ÿgggÿwwwÿ"""ÿÿdddÿ^^^ÿÿÿÄÄÄÿ”””ÿÿ€€€ÿáááÿÿ ÿAAAÿqqqÿÿ'''ÿäääÿÍÍÍÿ(((ÿbbbÿ~~~ÿ,,,ÿ ÿ»»»ÿ”””ÿÿ$$$ÿoooÿuuuÿšššÿ ÿ)))ÿuuuÿDDDÿÿoooÿÆÆÆÿ ÿ333ÿ€€€ÿlllÿ555ÿÜÜÜÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿÌÌÌÿÿÿÈÈÈÿåååÿåååÿåååÿÂÂÂÿÁÁÁÿâââÿXXXÿÿ ÿÿ|||ÿåååÿåååÿ–––ÿ"""ÿ ÿÿBBBÿâââÿåååÿ???ÿÿ%%%ÿ ÿ000ÿÇÇÇÿ111ÿÿÿ+++ÿÿ‹‹‹ÿÏÏÏÿÿUUUÿäääÿ...ÿÿ ÿ ÿÿ|||ÿäääÿäääÿ333ÿÿ ÿÿSSSÿåååÿGGGÿÿÿÿÿÌÌÌÿ•••ÿ###ÿ ÿÿ@@@ÿâââÿåååÿ{{{ÿÿ ÿ ÿÿÏÏÏÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúäääÿäääÿäääÿäääÿåååÿåååÿåååÿvvvÿÿ###ÿ|||ÿŸŸŸÿhhhÿÿuuuÿäääÿåååÿßßßÿÍÍÍÿáááÿäääÿåååÿåååÿåååÿäääÿÎÎÎÿÚÚÚÿåååÿåååÿåååÿäääÿäääÿåååÿÎÎÎÿØØØÿäääÿåååÿ×××ÿØØØÿÅÅÅÿ ÿQQQÿåååÿ’’’ÿ���ÿäääÿäääÿåååÿåååÿÍÍÍÿÝÝÝÿäääÿäääÿåååÿåååÿßßßÿÉÉÉÿÜÜÜÿåååÿåååÿåååÿVVVÿÿ¸¸¸ÿåååÿåååÿåååÿäääÿÔÔÔÿÚÚÚÿåååÿåååÿåååÿäääÿãããÿÏÏÏÿÑÑÑÿåååÿåååÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿ|||ÿÿÿÿÿ!!!ÿžžžÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿÿ444ÿäääÿ,,,ÿÿßßßÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿžžžÿÿœœœÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿãããÿãããÿãããÿãããÿÞÞÞúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿàààÿ²²²ÿ–––ÿ»»»ÿáááÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿhhhÿgggÿäääÿŠŠŠÿNNNÿßßßÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿåååÿåååÿåååÿäääÿãããÿãããÿãããÿãããÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿãããÿãããÿãããÿãããÿãããÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿäääÿäääÿäääÿäääÿåååÿåååÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿäääÿäääÿäääÿäääÿäääÿåååÿãããÿãããÿãããÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿßßßÿØØØÿâââÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿâââÿÚÚÚÿÛÛÛÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿPPPÿ%%%ÿ²²²ÿäääÿäääÿäääÿãããÿ+++ÿ>>>ÿäääÿ———ÿ222ÿ'''ÿbbbÿäääÿbbbÿ###ÿÿ111ÿ£££ÿäääÿ���ÿ ÿ¨¨¨ÿäääÿÎÎÎÿ$$$ÿlllÿäääÿäääÿ444ÿEEEÿäääÿKKKÿ222ÿßßßÿäääÿ¢¢¢ÿ---ÿÿ!!!ÿ???ÿÝÝÝÿäääÿãããÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿ³³³ÿ ÿ999ÿâââÿäääÿäääÿÊÊÊÿ ÿ:::ÿäääÿ!!!ÿÿ<<<ÿoooÿ���ÿÿ...ÿLLLÿÿÿªªªÿ±±±ÿÿgggÿäääÿáááÿÿ888ÿãããÿäääÿ222ÿ ÿßßßÿLLLÿÿÅÅÅÿÝÝÝÿÿÿLLLÿJJJÿÿÄÄÄÿäääÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿâââÿâââÿâââÿâââÿÝÝÝúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿEEEÿ ÿ@@@ÿBBBÿBBBÿ444ÿÿ\\\ÿäääÿÿ333ÿãããÿãããÿEEEÿÿÍÍÍÿãããÿÃÃÃÿÿ999ÿÛÛÛÿÿ???ÿäääÿäääÿ,,,ÿ&&&ÿáááÿäääÿMMMÿÿÃÃÃÿ………ÿÿŒŒŒÿ³³³ÿÿVVVÿãããÿäääÿáááÿÞÞÞÿäääÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿãããÿãããÿäääÿäääÿäääÿäääÿâââÿâââÿâââÿâââÿâââÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿÐÐÐÿÿ ÿÿÿÿÿšššÿãããÿ000ÿ"""ÿßßßÿãããÿIIIÿÿÉÉÉÿãããÿãããÿ777ÿÿÚÚÚÿ&&&ÿ***ÿâââÿäääÿDDDÿÿÎÎÎÿãããÿˆˆˆÿÿ‰‰‰ÿÅÅÅÿ ÿRRRÿ¶¶¶ÿÿPPPÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿäääÿäääÿäääÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿãããÿgggÿ ÿ|||ÿäääÿ999ÿÿÐÐÐÿãããÿJJJÿÿÆÆÆÿãããÿ���ÿÿvvvÿãããÿãããÿHHHÿÿÉÉÉÿ<<<ÿÿÃÃÃÿãããÿqqqÿÿ‚‚‚ÿãããÿÄÄÄÿ ÿSSSÿâââÿÿ666ÿÞÞÞÿÿ(((ÿÙÙÙÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿäääÿäääÿãããÿãããÿãããÿãããÿäääÿäääÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿãããÿßßßÿ###ÿ!!!ÿÕÕÕÿ'''ÿ"""ÿâââÿãããÿuuuÿÿ‡‡‡ÿËËËÿÏÏÏÿ ÿÿ›››ÿÊÊÊÿ)))ÿÿÞÞÞÿaaaÿÿ///ÿºººÿ[[[ÿÿÿ£££ÿ£££ÿ ÿHHHÿãããÿ...ÿ###ÿßßßÿaaaÿÿGGGÿ¿¿¿ÿÀÀÀÿ]]]ÿßßßÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿäääÿâââÿâââÿâââÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿ“““ÿ ÿ\\\ÿÿ444ÿãããÿÕÕÕÿ ÿÿ ÿ ÿ888ÿ¯¯¯ÿÿ ÿÿ ÿfffÿãããÿ§§§ÿÿ ÿ ÿ ÿÿ:::ÿ ÿ ÿ ÿ���ÿãããÿGGGÿÿÊÊÊÿáááÿQQQÿ ÿÿÿ ÿÌÌÌÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿáááÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿ333ÿÿ ÿJJJÿãããÿãããÿ£££ÿÿ'''ÿ›››ÿ´´´ÿãããÿØØØÿŠŠŠÿlllÿµµµÿãããÿãããÿÛÛÛÿ���ÿÀÀÀÿ���ÿmmmÿÇÇÇÿãããÿ¤¤¤ÿjjjÿ¯¯¯ÿãããÿâââÿÅÅÅÿŽŽŽÿÑÑÑÿãããÿâââÿÃÃÃÿÿpppÿ»»»ÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿáááÿáááÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿ¼¼¼ÿÿÿ€€€ÿãããÿãããÿãããÿ)))ÿ ÿâââÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿ¾¾¾ÿÿ\\\ÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿâââÿãããÿãããÿãããÿãããÿãããÿáááÿáááÿáááÿáááÿáááÿÜÜÜúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿ���ÿUUUÿÎÎÎÿâââÿãããÿãããÿÏÏÏÿÇÇÇÿâââÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿßßßÿ&&&ÿOOOÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿãããÿãããÿãããÿãããÿáááÿáááÿáááÿáááÿáááÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÝÝÝúâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿâââÿâââÿâââÿãããÿãããÿãããÿáááÿáááÿáááÿáááÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿâââÿâââÿâââÿâââÿãããÿãããÿáááÿáááÿáááÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿâââÿâââÿâââÿâââÿãããÿáááÿáááÿàààÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿàààÿàààÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿáááÿâââÿâââÿáááÿàààÿàààÿßßßÿàààÿàààÿáááÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿâââÿâââÿâââÿâââÿâââÿàààÿàààÿàààÿàààÿàààÿÛÛÛúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿàààÿÞÞÞÿÝÝÝÿÛÛÛÿÜÜÜÿÞÞÞÿßßßÿàààÿàààÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿâââÿâââÿâââÿâââÿàààÿàààÿàààÿàààÿàààÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿáááÿàààÿßßßÿÝÝÝÿÚÚÚÿ×××ÿÔÔÔÿÕÕÕÿ×××ÿÜÜÜÿÞÞÞÿßßßÿàààÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿâââÿâââÿâââÿàààÿàààÿàààÿàààÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÜÜÜúáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿàààÿßßßÿÜÜÜÿØØØÿÒÒÒÿÍÍÍÿÉÉÉÿÊÊÊÿÏÏÏÿÕÕÕÿÛÛÛÿÞÞÞÿßßßÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿáááÿáááÿáááÿáááÿâââÿâââÿàààÿàààÿàààÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÞÞÞÿÙÙÙÿÒÒÒÿÅÅÆÿ¶¶·ÿ¼¼¼ÿ½½½ÿÄÄÄÿÍÍÍÿÖÖÖÿÛÛÛÿßßßÿàààÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿáááÿáááÿáááÿáááÿáááÿâââÿàààÿàààÿßßßÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿßßßÿÜÜÜÿÖÖÖÿšš¦ÿHH†ÿÿQQÿ¥¥¨ÿ¹¹¹ÿÅÅÅÿÑÑÑÿÙÙÙÿÝÝÝÿßßßÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿßßßÿÛÛÛÿ±±¸ÿŠÿ¤ÿ¨ÿœÿ;;}ÿ±±±ÿ¿¿¿ÿÌÌÌÿÖÖÖÿÛÛÛÿßßßÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿßßßÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿàààÿÞÞÞÿÛÛÛÿdd‹ÿŸÿºÿËÿ­ÿ�ÿ‹‹”ÿ¹¹¹ÿÇÇÇÿÑÑÑÿØØØÿÜÜÜÿßßßÿßßßÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿàààÿàààÿáááÿáááÿáááÿáááÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿÞÞÞÿÚÚÚÿbb‹ÿŸÿ¹ÿÎÿ­ÿ�ÿ††�ÿ³³³ÿ¿¿¿ÿÊÊÊÿÒÒÒÿ×××ÿÛÛÛÿÞÞÞÿßßßÿßßßÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿàààÿàààÿàààÿáááÿáááÿáááÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÛÛÛúàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿàààÿàààÿàààÿßßßÿÝÝÝÿÙÙÙÿ¢¢¬ÿ‹ÿ¤ÿ¨ÿœÿ""tÿžžœÿªªªÿµµµÿ¿¿¿ÿÈÈÈÿÏÏÏÿÕÕÕÿÚÚÚÿÝÝÝÿÞÞÞÿÞÞÞÿßßßÿàààÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿáááÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÞÞÞÿÛÛÛÿÖÖÖÿÍÍÍÿoozÿ yÿ‚ÿxÿ{{Mÿ——Sÿ  ’ÿªª©ÿ²²²ÿ»»»ÿÄÄÄÿÌÌÌÿÒÒÒÿ×××ÿÚÚÚÿÜÜÜÿÞÞÞÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÞÞÞÿÜÜÜÿØØØÿÑÑÑÿ¼¼µÿzzÿXXVÿ::�ÿHH`ÿuuDÿ••@ÿ””@ÿššvÿ¥¥ ÿ®®®ÿ¶¶¶ÿ¿¿¿ÿÈÈÈÿÏÏÏÿÔÔÔÿØØØÿÛÛÛÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿÝÝÝÿÚÚÚÿÓÓÓÿÆÆÄÿ‚‚<ÿzzÿrrÿbbEÿaa&ÿss.ÿ””@ÿ””@ÿ””@ÿŠŠ=ÿŸŸˆÿªª©ÿ²²²ÿ»»»ÿÃÃÃÿÊÊÊÿÑÑÑÿÖÖÖÿÙÙÙÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÞÞÞÿÞÞÞÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿßßßÿàààÿàààÿàààÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿÞÞÞÿÝÝÝÿÛÛÛÿÖÖÖÿÍÍÍÿ••qÿzzÿzzÿvvÿjj#ÿii&ÿVVÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ˜˜hÿ¤¤žÿ­­­ÿµµµÿ½½½ÿÅÅÅÿÍÍÍÿÒÒÒÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿ×××ÿÙÙÙÿÜÜÜÿÝÝÝÿÞÞÞÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿßßßÿßßßÿàààÿàààÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÛÛÛÿÖÖÖÿÏÏÏÿ­­žÿ{{ÿzzÿzzÿxxÿkk ÿii'ÿXX ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ••Kÿ’’wÿ¨¨§ÿ¯¯¯ÿ¸¸¸ÿ¿¿¿ÿÆÆÆÿËËËÿËËËÿËËËÿËËËÿÍÍÍÿÒÒÒÿ×××ÿÚÚÚÿÝÝÝÿÞÞÞÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿÞÞÞÿÝÝÝÿÛÛÛÿØØØÿÑÑÑÿ¿¿ºÿ{{ÿzzÿzzÿzzÿzzÿkkÿjj'ÿ^^"ÿ……7ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ––Wÿ¡¡–ÿªªªÿ±±±ÿ¸¸¸ÿ¼¼¼ÿ½½½ÿ½½½ÿ½½½ÿÁÁÁÿÈÈÈÿÑÑÑÿ×××ÿÛÛÛÿÝÝÝÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÜÜÜÿÙÙÙÿÓÓÓÿÉÉÉÿ……Gÿzzÿzzÿzzÿzzÿzzÿnnÿjj&ÿbb$ÿƒƒ4ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ››yÿ¤¤ ÿ©©©ÿ��Ÿÿ€€’ÿmm‡ÿ““›ÿ´´´ÿ¾¾¾ÿÊÊÊÿÓÓÓÿÙÙÙÿÝÝÝÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÝÝÝÿÚÚÚÿÕÕÕÿÍÍÍÿ››~ÿzzÿzzÿzzÿzzÿzzÿzzÿ}} ÿ��ÿ‹‹ ÿzz ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‰‰@ÿ��~ÿvÿ–ÿœÿŒÿtt‰ÿ¹¹¹ÿÅÅÅÿÑÑÑÿÙÙÙÿÝÝÝÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÝÝÝÿÛÛÛÿ×××ÿÏÏÏÿ±±¤ÿ{{ÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿŽŽÿ‘‘ÿ‚‚ ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‘‘>ÿmm*ÿ55~ÿ°ÿ·ÿ¨ÿ ƒÿ³³´ÿÆÆÆÿÐÐÐÿÙÙÙÿÝÝÝÿÞÞÞÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÝÝÝÿÜÜÜÿÛÛÛÿØØØÿÒÒÒÿÁÁ½ÿ~~1ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ{{ÿ‹‹ÿ‘‘ÿ��ÿ��=ÿ““?ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ““?ÿ��<ÿpp*ÿ\\"ÿTT ÿ�ÿºÿ×ÿ®ÿ‹ÿ··¹ÿÊÊÊÿÒÒÒÿÙÙÙÿÜÜÜÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÜÜÜÿÛÛÛÿØØØÿÓÓÓÿÊÊÊÿ’’lÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿ‰‰ÿ‘‘ÿ††ÿppÿrrÿ‹‹8ÿ””@ÿ””@ÿŒŒ9ÿ+ÿhh$ÿSS!ÿTT$ÿTT%ÿTT$ÿ##„ÿ¢ÿ¯ÿ¢ÿ@@†ÿÂÂÃÿÐÐÐÿÖÖÖÿÚÚÚÿÜÜÜÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÜÜÜÿÛÛÛÿÚÚÚÿØØØÿÔÔÔÿÍÍÍÿ¢¢Œÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿˆˆÿŒŒÿ‘‘ÿ‘‘ÿ{{ÿwwÿooÿ{{%ÿvvÿttÿxxÿrr ÿUU%ÿTT$ÿTT!ÿ]]"ÿ__ÿ&&|ÿ�ÿ{ÿ  ¨ÿÏÏÏÿÕÕÕÿÚÚÚÿÜÜÜÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÚÚÚÿØØØÿÖÖÖÿÒÒÒÿÍÍÍÿ²²§ÿ{{ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿyy ÿ……ÿ��ÿ““ÿ••ÿ––ÿ‰‰ÿ||ÿwwÿppÿyyÿzzÿyyÿuuÿ__$ÿrr-ÿ††8ÿ““?ÿ��Fÿššœÿ——ŸÿÈÈÈÿÒÒÒÿÖÖÖÿÚÚÚÿÜÜÜÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÛÛÛÿÙÙÙÿÕÕÕÿÑÑÑÿÍÍÍÿÉÉÉÿ¿¿¼ÿ„„Fÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿ‹‹ÿ’’ÿ––ÿ˜˜ÿ››ÿ��ÿ~~ÿzzÿqqÿuuÿttÿyyÿ„„3ÿ’’?ÿ””@ÿ””@ÿ””@ÿ••lÿºººÿÈÈÈÿÑÑÑÿ×××ÿÚÚÚÿÜÜÜÿÜÜÜÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÜÜÜÿÚÚÚÿ×××ÿÓÓÓÿÍÍÍÿÆÆÆÿÁÁÁÿ»»»ÿ““pÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ}} ÿ‚‚ÿ��ÿŒŒÿ““ÿ––ÿžžÿ¨¨ÿ˜˜ÿ��ÿ{{ÿssÿ||)ÿ��=ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿŸŸ’ÿÀÀÀÿÌÌÌÿÔÔÔÿÚÚÚÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÙÙÙÿÔÔÔÿÌÌÌÿÂÂÂÿºººÿ³³³ÿšš‡ÿzzÿzzÿzzÿwwÿttÿyyÿˆˆÿ��ÿ‘‘ÿ““ÿŽŽÿ‹‹ÿ’’ÿ––ÿ™™ÿ��ÿ˜˜ÿ‚‚ÿzzÿqqÿ��:ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ——Wÿ¶¶¶ÿÅÅÅÿÐÐÐÿ×××ÿÚÚÚÿÜÜÜÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÛÛÛÿØØØÿÊÊËÿ||“ÿ}ÿ~ÿffyÿwwÿssÿqqÿjj ÿjj$ÿjj'ÿˆˆÿ““ÿ””ÿ““ÿ““ÿ��ÿ‡‡ÿ��ÿ””ÿ––ÿ––ÿ••ÿ‰‰ÿwwÿoo ÿ““?ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ››ÿ¼¼¼ÿÊÊÊÿÔÔÔÿÙÙÙÿÛÛÛÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÛÛÛÿ×××ÿŠŠœÿ“ÿ¦ÿ¦ÿ((�ÿOOrÿii-ÿjj)ÿjj*ÿjj*ÿjj)ÿ{{ÿ��ÿŠŠÿ„„ÿÿ{{ ÿ}}ÿ‰‰ÿ��ÿ’’ÿ““ÿ““ÿŠŠÿppÿ‡‡4ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ““Bÿ¦¦žÿÁÁÁÿÎÎÎÿÖÖÖÿÚÚÚÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÚÚÚÿ×××ÿ44}ÿ¤ÿÂÿÅÿ©ÿ§ÿRRsÿjj'ÿjj$ÿkk ÿooÿrrÿ||ÿzzÿzzÿzzÿzzÿzzÿ}}ÿ††ÿŠŠÿŒŒÿ““ÿ‘‘ÿ~~$ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‹‹Iÿ¹¹¹ÿÇÇÇÿÑÑÑÿØØØÿÛÛÛÿÜÜÜÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÚÚÚÿ×××ÿrÿ£ÿ¼ÿ¾ÿ¤ÿRReÿoo#ÿssÿvvÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿyy ÿ{{ ÿ~~ÿ‘‘ÿ““ÿ||ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿŸŸŽÿ¾¾¾ÿËËËÿÓÓÓÿØØØÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÚÚÚÿ››¨ÿ�ÿ¡ÿ¢ÿ�ÿuu�ÿ››|ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿŒŒÿ””ÿ‡‡ÿ‹‹7ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ““Gÿ­­©ÿÂÂÂÿÎÎÎÿÕÕÕÿÙÙÙÿÛÛÛÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÙÙÙÿ¢¢­ÿnn–ÿmm–ÿ““¢ÿÎÎÎÿÑÑÑÿÄľÿ˜˜uÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿƒƒÿ““ÿ’’ÿ‚‚*ÿ””@ÿ””@ÿ””@ÿ””@ÿ””@ÿ‘‘aÿºººÿÇÇÇÿÒÒÒÿ×××ÿÚÚÚÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÚÚÚÿÙÙÙÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÕÕÔÿ¿¿µÿ��[ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿ|| ÿ��ÿ€€ÿggÿ’’?ÿ””@ÿ””@ÿ””@ÿ””@ÿ©©šÿ¿¿¿ÿÌÌÌÿÔÔÔÿÙÙÙÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿØØØÿÖÖÖÿ½½²ÿ��cÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿooÿjj)ÿ``&ÿ€€5ÿ””@ÿ””@ÿ””@ÿ‘‘Oÿ²²±ÿÄÄÄÿÏÏÏÿÖÖÖÿÙÙÙÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿØØØÿ×××ÿ»»¯ÿ0ÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿzzÿqqÿjj(ÿdd(ÿkk+ÿ””@ÿ””@ÿ””@ÿ——tÿ¹¹¹ÿÇÇÇÿÒÒÒÿØØØÿÙÙÙÿÚÚÚÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿÒÒÐÿ­­™ÿ……Eÿzzÿzzÿzzÿzzÿzzÿzzÿwwÿjj$ÿjj*ÿ[[&ÿ��>ÿ””@ÿ””@ÿ  –ÿ½½½ÿÊÊÊÿÓÓÓÿØØØÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÓÓÒÿ¬¬—ÿ††Gÿzzÿzzÿzzÿzzÿzzÿllÿjj)ÿ[['ÿzz1ÿ””@ÿ——]ÿ°°¯ÿ¿¿¿ÿËËËÿÔÔÔÿØØØÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÑÑÐÿ¤¤‰ÿ}})ÿzzÿzzÿzzÿssÿjj&ÿcc(ÿPPWÿ••@ÿ••|ÿ¯¯¯ÿ¾¾¾ÿËËËÿÓÓÓÿØØØÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÖÖÖÿÊÊÆÿŸŸ€ÿ||ÿzzÿyyÿLLmÿPPmÿ""„ÿ„„Iÿ˜˜”ÿ«««ÿ»»»ÿÈÈÈÿÒÒÒÿ×××ÿØØØÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÔÔÔúU8 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿ×××ÿÕÕÕÿÉÉÄÿ££ˆÿzzÿQQZÿŒÿ~ÿ xÿll„ÿ¨¨¨ÿ¶¶¶ÿÄÄÄÿÐÐÐÿÖÖÖÿØØØÿÙÙÙÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿÕÕÕùS6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÓÓÓÿ½ÿ00cÿ–ÿ¦ÿ¤ÿ�ÿkk�ÿµµµÿÃÃÃÿÎÎÎÿÕÕÕÿØØØÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿÔÔÔùO3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÖÖÖÿ¼¼½ÿ„ÿ©ÿÄÿ½ÿ¤ÿ77}ÿ´´´ÿÅÅÅÿÏÏÏÿÕÕÕÿØØØÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿÔÔÔùI. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿØØØÿÀÀÁÿ„ÿ©ÿÈÿ¿ÿ¤ÿTTŠÿÀÀÀÿÊÊÊÿÑÑÑÿÕÕÕÿÕÕÕÿÖÖÖÿÔÔÔÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÕÕÕÿÖÖÖÿÔÔÔùA) ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿ×××ÿ]]…ÿ˜ÿ¨ÿ¦ÿ‘ÿ}}�ÿÊÊÊÿÐÐÐÿÔÔÔÿÕÕÕÿÔÔÔÿÑÑÑÿÌÌÌÿËËËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÅÿÅÅÅÿÆÆÆÿÆÆÆÿÇÇÇÿÈÈÈÿÉÉÉÿËËËÿÊÊÊÿËËËÿÌÌÌÿÍÍÍÿÍÍÍÿÎÎÎÿÏÏÏÿÐÐÐÿÓÓÓÿÔÔÔÿÃÃÃ×7!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÍÍÎÿxx•ÿ|ÿyÿ��ŸÿÍÍÍÿÑÑÑÿÔÔÔÿÖÖÖÿÖÖÖÿÑÑÑÿÉÉÉÿÃÃÃÿ¿¿¿ÿ¼¼¼ÿºººÿºººÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¹¹¹ÿ¹¹¹ÿºººÿ»»»ÿ¼¼¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÂÂÂÿÄÄÄÿÅÅÅÿÆÆÆÿÊÊÊÿÌÌÌÿÏÏÏÿ···í___i+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿ×××ÿÓÓÓÿÑÑÒÿÔÔÔÿÕÕÕÿÖÖÖÿ×××ÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿµµµÿ¯¯¯ÿ¬¬¬ÿªªªÿ¨¨¨ÿ¨¨¨ÿ§§§ÿ§§§ÿ§§§ÿ§§§ÿ¨¨¨ÿ©©©ÿªªªÿ¬¬¬ÿ®®®ÿ¯¯¯ÿ±±±ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¿¿¿ÿÄÄÄÿÇÇÇÿ¦¦¦øfff}2  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÒÒÒÿÉÉÉÿ···ÿ¨¨¨ÿ¡¡¡ÿ���ÿšššÿ˜˜˜ÿ———ÿ———ÿ–––ÿ———ÿ———ÿ˜˜˜ÿ˜˜˜ÿ›››ÿ���ÿžžžÿ¡¡¡ÿ£££ÿ¦¦¦ÿ©©©ÿ®®®ÿ²²²ÿ¹¹¹ÿºººÿ™™™ýhhh‡7$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿØØØÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÅÅÅÿ¯¯¯ÿžžžÿ”””ÿ���ÿŒŒŒÿŠŠŠÿˆˆˆÿˆˆˆÿ‡‡‡ÿˆˆˆÿˆˆˆÿ‰‰‰ÿ‹‹‹ÿ���ÿ���ÿ’’’ÿ•••ÿ˜˜˜ÿœœœÿŸŸŸÿ¦¦¦ÿ±±±ÿ¬¬¬ÿ“““ÿppp”<' ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÃÃÃÿªªªÿ———ÿ‹‹‹ÿ………ÿ‚‚‚ÿÿ}}}ÿ}}}ÿ}}}ÿ}}}ÿ~~~ÿ€€€ÿ‚‚‚ÿ„„„ÿ†††ÿˆˆˆÿŒŒŒÿ���ÿ”””ÿ���ÿ°°°ÿ¡¡¡ÿ“““ÿnnn™@+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÁÁÁÿ§§§ÿ’’’ÿ………ÿ~~~ÿ{{{ÿyyyÿwwwÿwwwÿvvvÿwwwÿxxxÿzzzÿ|||ÿ~~~ÿ€€€ÿƒƒƒÿ‡‡‡ÿ›››ÿ²²²ÿ­­­ÿŸŸŸÿ•••ÿoooŸC-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÏÏÏÿ¿¿¿ÿ¥¥¥ÿ���ÿ‚‚‚ÿ€€€ÿ‡‡‡ÿ‡‡‡ÿ���ÿ‹‹‹ÿ‹‹‹ÿ”””ÿ———ÿ˜˜˜ÿ   ÿ§§§ÿ±±±ÿºººÿÁÁÁÿ¹¹¹ÿ­­­ÿ   ÿ–––ÿrrr¤F.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ———ÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿæææÿâââÿÜÜÜÿÕÕÕÿÌÌÌÿÄÄÄÿºººÿ®®®ÿ¢¢¢ÿ———ÿwww­G/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ”””ÿîîîÿîîîÿîîîÿíííÿêêêÿçççÿâââÿÜÜÜÿÕÕÕÿÎÎÎÿÅÅÅÿ»»»ÿ¯¯¯ÿ£££ÿ———ÿzzz¯I0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ“““ÿîîîÿîîîÿíííÿëëëÿçççÿâââÿÜÜÜÿ×××ÿÏÏÏÿÆÆÆÿ»»»ÿ°°°ÿ¤¤¤ÿ™™™ÿ¹J1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¤¤¤ÿŽŽŽÿ‚‚‚ÿ’’’ÿîîîÿîîîÿêêêÿçççÿãããÿÞÞÞÿ×××ÿÏÏÏÿÇÇÇÿ¼¼¼ÿ±±±ÿ¦¦¦ÿ›››ÿ€€€»L3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿƒƒƒÿ‘‘‘ÿîîîÿêêêÿèèèÿäääÿÞÞÞÿØØØÿÑÑÑÿÇÇÇÿ½½½ÿ³³³ÿ§§§ÿ›››ÿ‚‚‚¿M4 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿìììÿèèèÿäääÿßßßÿÙÙÙÿÒÒÒÿÈÈÈÿ¿¿¿ÿ´´´ÿ¨¨¨ÿ›››ÿ‡‡‡ÆN5  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿèèèÿåååÿàààÿÚÚÚÿÑÑÑÿÊÊÊÿÀÀÀÿµµµÿªªªÿ���ÿ‹‹‹ÈO5! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¤¤¤ÿ‘‘‘ÿ………ÿ���ÿåååÿàààÿÚÚÚÿÓÓÓÿÊÊÊÿÁÁÁÿ···ÿ«««ÿžžžÿŒŒŒÌP6! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÌÌÌÿ¾¾¾ÿ¤¤¤ÿ‘‘‘ÿ†††ÿ’’’ÿáááÿÚÚÚÿÓÓÓÿËËËÿÂÂÂÿ¸¸¸ÿ¬¬¬ÿŸŸŸÿ���ÒQ6! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÒÒÒÿËËËÿ¼¼¼ÿ£££ÿ’’’ÿˆˆˆÿšššÿÛÛÛÿÔÔÔÿÍÍÍÿÃÃÃÿ¹¹¹ÿ®®®ÿ¢¢¢ÿ“““ÕQ6" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÒÒÒÿÊÊÊÿ»»»ÿ¢¢¢ÿ’’’ÿŠŠŠÿ¡¡¡ÿÕÕÕÿÍÍÍÿÄÄÄÿ»»»ÿ®®®ÿ¢¢¢ÿ•••ØQ8# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÑÑÑÿÉÉÉÿ¹¹¹ÿ¡¡¡ÿ“““ÿ‹‹‹ÿ±±±ÿÎÎÎÿÆÆÆÿ¼¼¼ÿ¯¯¯ÿ£££ÿ™™™ÝR8$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÐÐÐÿÇÇÇÿµµµÿ   ÿ“““ÿ���ÿ»»»ÿÇÇÇÿ»»»ÿ±±±ÿ¥¥¥ÿšššßR7$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÍÍÍÿÃÃÃÿ²²²ÿŸŸŸÿ•••ÿ‘‘‘ÿÃÃÃÿ½½½ÿ²²²ÿ¦¦¦ÿ›››âS8# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÀÀÀÿ¯¯¯ÿŸŸŸÿ———ÿ¡¡¡ÿ¾¾¾ÿ³³³ÿ§§§ÿŸŸŸåS9# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :WÐÐÐúÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÓÓÓÿÑÑÑÿÉÉÉÿ½½½ÿ¬¬¬ÿ   ÿ›››ÿ···ÿ´´´ÿ©©©ÿ   éR9$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :VÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÏÏÏÿÇÇÇÿ¹¹¹ÿªªªÿ¢¢¢ÿ¢¢¢ÿ···ÿªªªÿ¢¢¢êU9$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8TÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÃÃÃÿµµµÿªªªÿ¥¥¥ÿµµµÿ«««ÿ¥¥¥ïT9$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6QÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÊÊÊÿÀÀÀÿ´´´ÿ¬¬¬ÿ­­­ÿ±±±ÿ¨¨¨ïT9% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2KÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿ¿¿¿ÿµµµÿ²²²ÿ¸¸¸ÿ¨¨¨ñ U9% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ,BÐÐÐùÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿÀÀÀÿ¹¹¹ÿ»»»ÿ«««ñU9% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $6ÑÑÑøÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿËËËÿÃÃÃÿ¿¿¿ÿ­­­êR7% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)ÒÒÒ÷ÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÒÒÒÿÑÑÑÿÐÐÐÿÌÌÌÿÇÇÇÿ¯¯¯Ö$$$M2# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #&())))))))))))))))))))))))))))))))))))))))))))))))('# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþ?ÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþ?ÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÿatomes_1.3.1/misc/win/atomes-latest-no-win.iss0000664000175000017500000003513215212624223020750 0ustar lerouxleroux; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId=4DA2F2FC-AD2D-414A-8197-0DD52F1593D2 AppName=atomes AppVerName=atomes 1.3.1 AppPublisher=CNRS AppPublisherURL=https://atomes.ipcms.fr/ AppSupportURL=https://atomes.ipcms.fr/ AppUpdatesURL=https://atomes.ipcms.fr/ DefaultDirName={autopf}\atomes DisableDirPage=yes DefaultGroupName=atomes LicenseFile=COPYING OutputDir=Setup OutputBaseFilename=atomes-latest-setup-no-win SetupIconFile=setup.ico UninstallDisplayIcon=setup.ico Compression=lzma2 SolidCompression=yes ChangesAssociations=yes ; "ArchitecturesAllowed=x64" specifies that Setup cannot run on ; anything but x64. ArchitecturesAllowed=x64 ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be ; done in "64-bit mode" on x64, meaning it should use the native ; 64-bit Program Files directory and the 64-bit view of the registry. ArchitecturesInstallIn64BitMode=x64 WizardStyle=modern [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Code] var maj : Integer; min : Integer; patch : Integer; version : String; key : String; function InitializeSetup(): Boolean; begin Result := TRUE; maj := 1; min := 1; patch := 0; while (maj <= 1) do begin while (min <= 3) do begin while (patch <= 18) do begin version := IntToStr(maj) + '.' + IntToStr(min) + '.' + IntToStr(patch); key := 'Software\IPCMS\ATOMES\' + version; if RegValueExists(HKEY_LOCAL_MACHINE, key, 'Version') then begin MsgBox(Format('An older version of atomes has been detected on your computer: %s'#13#13'Please uninstall this previous version before installing any other', [version]), mbConfirmation, MB_OK); Result := FALSE; end; patch := patch + 1; end; min := min + 1; end; maj := maj + 1; end; end; [Registry] Root: HKLM; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}\bin"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}\bin"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Name"; ValueData: "atomes"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Company"; ValueData: "Institut de Physique et Chimie des Matériaux de Strasbourg"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.awf\OpenWithProgids"; ValueType: string; ValueName: "atomesWorkspaceFile.awf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Workspace File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-workspace.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".awf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.apf\OpenWithProgids"; ValueType: string; ValueName: "atomesProjectFile.apf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesProjectFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Project File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-project.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".apf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xyz\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-XYZ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ"; ValueType: string; ValueName: ""; ValueData: "XYZ Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xyz"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.pdb\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-PDB"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB"; ValueType: string; ValueName: ""; ValueData: "PDB Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".pdb"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.ent\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-ENT"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT"; ValueType: string; ValueName: ""; ValueData: "ENT Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".ent"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.cif\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-CIF"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF"; ValueType: string; ValueName: ""; ValueData: "CIF crystallographic information"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".cif"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.trj\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-TRJ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ"; ValueType: string; ValueName: ""; ValueData: "CPMD trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".trj"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xdatcar\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-VAS"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS"; ValueType: string; ValueName: ""; ValueData: "VASP trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xdatcar"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.c3d\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-C3D"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D"; ValueType: string; ValueName: ""; ValueData: "Chem3D Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".c3d"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.hist\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-HIST"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST"; ValueType: string; ValueName: ""; ValueData: "DL-POLY History File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".hist"; ValueData: ""; Flags: uninsdeletekey Root: HKLM; SubKey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; ValueType: string; ValueName: "Path"; ValueData: "{reg:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\,Path};{app}\bin" [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var Path, AppDir: string; Index: Integer; begin if CurUninstallStep = usUninstall then begin if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path) then begin AppDir := ExpandConstant('{app}'); Index := Pos(AppDir, Path); Delete(Path, Index-1, Length(AppDir)+1); RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path); end; end; end; [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked ; Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked [Files] Source: "atomes\pixmaps\*"; DestDir: "{app}\pixmaps\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\library\*"; DestDir: "{app}\library"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\bin-no-win\*"; DestDir: "{app}\bin\"; Components: main; Flags: ignoreversion Source: "atomes\etc\*"; DestDir: "{app}\etc\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\lib\*"; DestDir: "{app}\lib\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\share\*"; DestDir: "{app}\share\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\var\*"; DestDir: "{app}\var\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\locale\*"; DestDir: "{app}\locale\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "setup.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-workspace.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-project.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-coordinates.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "COPYING"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "ChangeLog"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "gtk-sources\*"; DestDir: "{app}\gtk-sources\"; Components: main; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main Name: "{group}\{cm:ProgramOnTheWeb,atomes}"; Filename: "https://atomes.ipcms.fr/"; Components: main; Name: "{group}\{cm:UninstallProgram,atomes}"; Filename: "{uninstallexe}"; IconFilename: "{app}\atomes.ico"; Components: main; Name: "{commondesktop}\atomes"; Filename: "{app}\bin\atomes.exe"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main ; Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; Tasks: quicklaunchicon; IconFilename: "{app}\atomes.ico"; Components: main [Components] Name: "main"; Description: "atomes"; Types: full compact custom [Run] Filename: "{app}\bin\atomes.exe"; Description: "{cm:LaunchProgram,atomes}"; Flags: nowait postinstall skipifsilent atomes_1.3.1/misc/win/startup.rc.in0000664000175000017500000000301215212624223016666 0ustar lerouxleroux/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Atomes. If not, see */ #include ATOMES_ICON ICON "../misc/win/atomes.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ PRODUCTVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ FILEOS VOS_NT FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "@PACKAGE@_startup_testing" VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "@PACKAGE@_startup_testing @PACKAGE_VERSION@" VALUE "FileVersion", "@PACKAGE_VERSION@" VALUE "LegalCopyright", "\251 2026 S\351bastien Le Roux" VALUE "OriginalFileName", "@PACKAGE@_startup_testing.exe" VALUE "ProductName", "@PACKAGE@_startup_testing @PACKAGE_VERSION@" VALUE "ProductVersion", "@PACKAGE_VERSION@" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 1200 END END atomes_1.3.1/misc/win/atomes-inno.sh0000775000175000017500000000132315212624223017024 0ustar lerouxleroux#!/bin/bash INNO="/c/Program\ Files\ \(x86\)/Inno\ Setup\ 6/ISCC.exe" PACKAGE_VERSIONS="win no-win" GTK_VERSIONS="gtk3 gtk4" ATOMES_VERSIONS="debug standard" for GTK in $GTK_VERSIONS do for ATOMES in $ATOMES_VERSIONS do for PACKAGE in $PACKAGE_VERSIONS do mkdir -p Setup/$ATOMES/$GTK/ done done done for GTK in $GTK_VERSIONS do mv gtk-sources-$GTK gtk-sources for ATOMES in $ATOMES_VERSIONS do mv atomes-$GTK-$ATOMES atomes for PACKAGE in $PACKAGE_VERSIONS do /c/Program\ Files\ \(x86\)/Inno\ Setup\ 6/ISCC.exe ./atomes-latest-$PACKAGE.iss mv Setup/*.exe Setup/$ATOMES/$GTK/ done mv atomes atomes-$GTK-$ATOMES done mv gtk-sources gtk-sources-$GTK done atomes_1.3.1/misc/win/atomes-project.ico0000664000175000017500000020407615212624223017676 0ustar lerouxleroux€€ ((€     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}€��������������������������������������������������������������������������€}vk]J6$  ,BàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿáááøA+ 2KàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùK26QàààùäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿàààùP6 8TßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿßßßúT7  :VßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúU9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿßßßúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞúV9  :WßßßúäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿÞÞÞúV9  :WßßßúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿèèèÿçççÿåååÿäääÿãããÿãããÿæææÿèèèÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿèèèÿèèèÿåååÿßßßÿÛÛÛÿÙÙÙÿÙÙÙÿÚÚÚÿÜÜÜÿßßßÿåååÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿçççÿäääÿÜÜÜÿØØØÿÔÔÔÿÐÐÐÿÏÏÏÿÐÐÐÿÔÔÔÿØØØÿÝÝÝÿäääÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿÞÞÞúV9  :WÞÞÞúäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿçççÿåååÿÜÜÜÿ×××ÿÐÐÐÿÊÊÊÿÆÆÆÿÄÄÄÿÅÅÅÿÉÉÉÿÐÐÐÿÖÖÖÿÜÜÜÿåååÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿçççÿàààÿØØØÿÎÎÎÿ¯¯±ÿŽŽ•ÿ££¦ÿ¶¶·ÿºººÿ¿¿¿ÿÆÆÆÿÎÎÎÿ×××ÿÞÞÞÿæææÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿÝÝÝúV9  :WÞÞÞúãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿæææÿÜÜÜÿºº½ÿrrŽÿ|ÿ€ÿ}ÿ//lÿ™™žÿ¶¶¶ÿ¾¾¾ÿÇÇÇÿÐÐÐÿØØØÿßßßÿæææÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿ¿¿Áÿ//sÿ�ÿ›ÿ ÿœÿ�ÿ""wÿ––œÿ¶¶¶ÿÀÀÀÿÉÉÉÿÒÒÒÿØØØÿÜÜÜÿáááÿæææÿèèèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿáááÿzz�ÿ‰ÿ¡ÿ­ÿ±ÿ­ÿ£ÿŽÿ,,eÿ­­­ÿ¸¸¸ÿÁÁÁÿÊÊÊÿÐÐÐÿÕÕÕÿØØØÿÛÛÛÿÞÞÞÿáááÿãããÿæææÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿæææÿàààÿ11sÿ–ÿªÿ·ÿÐÿºÿ¬ÿ™ÿ""yÿ§§¨ÿ±±±ÿ¹¹¹ÿÀÀÀÿÇÇÇÿËËËÿÏÏÏÿÒÒÒÿÕÕÕÿ×××ÿÙÙÙÿÛÛÛÿÝÝÝÿàààÿâââÿåååÿçççÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿæææÿááâÿ44xÿ˜ÿ¬ÿ½ÿðÿÃÿ®ÿ›ÿ""{ÿ¢¢£ÿ©©©ÿ°°°ÿ¶¶¶ÿ¼¼¼ÿÀÀÀÿÄÄÄÿÇÇÇÿÊÊÊÿÍÍÍÿÏÏÏÿÒÒÒÿÔÔÔÿ×××ÿØØØÿÛÛÛÿÝÝÝÿßßßÿâââÿäääÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿäääÿäääÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿâââÿ==pÿ‘ÿ¦ÿ²ÿ¹ÿ³ÿ¨ÿ•ÿ oÿ¢¢zÿ§§~ÿ¨¨£ÿ¬¬©ÿ°°°ÿ´´´ÿ¸¸¸ÿ»»»ÿ¾¾¾ÿÁÁÁÿÄÄÄÿÇÇÇÿÉÉÉÿÌÌÌÿÏÏÏÿÑÑÑÿÔÔÔÿÖÖÖÿØØØÿÙÙÙÿÛÛÛÿÞÞÞÿàààÿãããÿåååÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿãããÿßßßÿÛÛÛÿÚÚÚÿÛÛÛÿÝÝÝÿáááÿãããÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿÝÝÝúV9  :WÞÞÞúãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿ¨¨±ÿ~ÿ™ÿ¥ÿ©ÿ¦ÿ›ÿƒÿBBPÿ¦¦2ÿ©©3ÿ©©=ÿªªCÿ©©~ÿ««„ÿ¬¬¨ÿ¯¯¬ÿ²²±ÿ´´´ÿ···ÿºººÿ½½½ÿ¿¿¿ÿÂÂÂÿÅÅÅÿÈÈÈÿËËËÿÍÍÍÿÐÐÐÿÒÒÒÿÔÔÔÿ×××ÿÙÙÙÿÛÛÛÿÝÝÝÿàààÿáááÿãããÿäääÿåååÿäääÿâââÿÝÝÝÿÙÙÙÿÖÖÖÿÓÓÓÿÒÒÒÿÓÓÓÿÔÔÔÿ×××ÿÜÜÜÿãããÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿâââÿƒƒ–ÿ|ÿŽÿ“ÿ�ÿ€ÿyÿ€ÿ‘‘-ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿªªCÿ©©ÿªª‚ÿ¬¬˜ÿ®®«ÿ±±¯ÿ³³³ÿ¶¶¶ÿ¹¹¹ÿ¼¼¼ÿ¿¿¿ÿÁÁÁÿÄÄÄÿÇÇÇÿÊÊÊÿÍÍÍÿÏÏÏÿÒÒÒÿÓÓÓÿÕÕÕÿ×××ÿÙÙÙÿÚÚÚÿÛÛÛÿÚÚÚÿØØØÿÔÔÔÿÐÐÐÿÍÍÍÿÉÉÉÿÈÈÈÿÈÈÈÿËËËÿÐÐÐÿÕÕÕÿÛÛÛÿãããÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿààáÿ¤¤«ÿrr‹ÿdÿpÿ++fÿ==‰ÿ ‘ÿxx(ÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªfÿªª�ÿ¬¬˜ÿ®®«ÿ°°¯ÿ³³³ÿµµµÿ¸¸¸ÿ»»»ÿ¾¾¾ÿÀÀÀÿÃÃÃÿÆÆÆÿÈÈÈÿËËËÿÎÎÎÿÐÐÐÿÒÒÒÿÒÒÒÿÑÑÑÿÏÏÏÿÌÌÌÿÇÇÇÿ¿¿¿ÿ½½½ÿ½½½ÿ½½½ÿÁÁÁÿÈÈÈÿÏÏÏÿÖÖÖÿÞÞÞÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿÜÜÜúV9  :WÝÝÝúâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿÝÝÝÿ¥¥Ÿÿ[[ÿ22[ÿ==dÿmm(ÿtt-ÿvvÿ‡‡ ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿªªfÿªª�ÿ««„ÿ­­¨ÿ®®¬ÿ±±±ÿ´´´ÿ···ÿ¹¹¹ÿ¼¼¼ÿÀÀÀÿÂÂÂÿÅÅÅÿÆÆÆÿÇÇÇÿÆÆÆÿÄÄÄÿ©©¬ÿ‰‰™ÿ11eÿcc~ÿ††�ÿ°°±ÿ¸¸¸ÿÀÀÀÿÉÉÉÿÒÒÒÿØØØÿâââÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿÜÜÜÿ¨¨žÿ^^ ÿZZÿJJ=ÿffÿvv ÿvvÿwwÿœœ,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿ©©Cÿ©©~ÿ««„ÿ¬¬¨ÿ®®¬ÿ±±±ÿ³³³ÿ¶¶¶ÿ···ÿºººÿ»»»ÿºººÿ  §ÿ((wÿ‰ÿ‘ÿ�ÿ�ÿbb‚ÿ®®¯ÿºººÿÅÅÅÿÎÎÎÿÖÖÖÿàààÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿåååÿåååÿÚÚÚÿˆˆyÿ^^ ÿ^^ ÿYYÿVVÿttÿvv ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©=ÿ©©Cÿ©©~ÿªª�ÿ««–ÿ¬¬©ÿ®®­ÿ¯¯¯ÿ™™�ÿ%%vÿ’ÿ¢ÿ¨ÿ§ÿ�ÿˆÿdd~ÿ¶¶¶ÿÂÂÂÿÌÌÌÿÕÕÕÿÞÞÞÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿåååÿåååÿäääÿÖÖÖÿ``7ÿ^^ ÿ^^ ÿ^^ ÿWWÿggÿvv ÿvv ÿvvÿ‡‡ ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ©©=ÿ¨¨eÿ¨¨ÿzzqÿ †ÿ¢ÿ¯ÿ¹ÿµÿ«ÿ™ÿ%%xÿµµ¶ÿÂÂÂÿÍÍÍÿÕÕÕÿßßßÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿÜÜÜúV9  :WÝÝÝúâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿåååÿãããÿÕÕÕÿgg1ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿWWÿrrÿvv ÿvvÿvvÿšš*ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿœœ,ÿuu(ÿ<<„ÿ§ÿ·ÿêÿÓÿ°ÿŸÿ€ÿ¦¦¨ÿÆÆÆÿÏÏÏÿ×××ÿáááÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿÛÛÛúV9  :WÝÝÝúâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿåååÿáááÿ¾¾½ÿbb&ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿYYÿddÿvvÿvv ÿvvÿ}}ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿUUvÿ¥ÿ©ÿ³ÿËÿ¾ÿ®ÿ�ÿ((ÿ¾¾¿ÿËËËÿÓÓÓÿÛÛÛÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÛÛÛúV9  :WÜÜÜúâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿÞÞÞÿ©©žÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ]] ÿXXÿrrÿvv ÿvvÿ��ÿ––ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨3ÿ��,ÿ†† ÿwwÿvvÿtt1ÿ§ÿ¬ÿ§ÿ©ÿ¯ÿ­ÿ¤ÿ‘ÿ55oÿÈÈÈÿÑÑÑÿ×××ÿßßßÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿäääÿäääÿÜÜÜÿ¦¦šÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿffÿwwÿ„„ÿ““ÿ��ÿŸŸ)ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿ��,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿuu,ÿWW}ÿUU{ÿSStÿ •ÿ�ÿ›ÿ�ÿ++{ÿ²²·ÿÒÒÒÿÖÖÖÿÞÞÞÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿäääÿäääÿÖÖÖÿ__Dÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿ‹‹ÿ••ÿ––ÿ““ÿ�� ÿ��ÿŠŠÿ‰‰ÿ‰‰ÿŠŠÿŽŽÿšš%ÿ¦¦0ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¨¨2ÿŸŸ,ÿ†† ÿwwÿvvÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿvvÿzzÿ„„.ÿ//tÿ~ÿ++~ÿ88oÿµµºÿÕÕÕÿÙÙÙÿÞÞÞÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿäääÿäääÿâââÿÕÕÔÿff1ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿzzÿ““ÿ––ÿ••ÿ‘‘ÿ‹‹ÿŽŽÿ��ÿ��ÿŽŽÿ��ÿ‹‹ÿŠŠÿ��'ÿ©©3ÿ©©3ÿ©©3ÿ©©2ÿ  (ÿ””ÿŽŽÿ{{ÿvv!ÿvv"ÿvv#ÿvv"ÿvv ÿwwÿ††"ÿ““&ÿ§§2ÿ®®…ÿ¹¹ºÿ®®¯ÿÉÉÉÿÐÐÑÿ×××ÿÝÝÝÿáááÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿÛÛÛúV9  :WÜÜÜúáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿáááÿÒÒÑÿgg1ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿddÿŒŒÿ””ÿ––ÿ””ÿ��ÿ’’ÿ’’ÿ’’ÿ’’ÿ‘‘ÿ��ÿ��ÿ‰‰ÿ––ÿ¨¨2ÿ  *ÿ””ÿ‘‘ÿ••ÿ——ÿ�� ÿww"ÿvv!ÿvv ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©:ÿµµ£ÿÂÂÂÿÌÌÌÿÔÔÔÿÚÚÚÿàààÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿÚÚÚúV9  :WÜÜÜúáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿãããÿãããÿÞÞÞÿ¨¨¢ÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ``ÿyyÿ‘‘ÿ••ÿ––ÿ””ÿ••ÿ••ÿ••ÿ••ÿ””ÿ““ÿ‘‘ÿŽŽÿŠŠÿŒŒ ÿ‘‘ÿ••ÿ——ÿ˜˜ÿ˜˜ÿ––ÿ{{ÿwwÿ††"ÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ­­lÿ½½¼ÿÈÈÈÿÐÐÐÿ×××ÿàààÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿÚÚÚúV9  :WÜÜÜúáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿãããÿÜÜÜÿ¨¨�ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ÿeeÿooÿŒŒÿ””ÿ––ÿ––ÿ——ÿ——ÿ——ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿˆˆÿ’’ÿ˜˜ÿ˜˜ÿ——ÿ••ÿ’’ÿŒŒÿ��-ÿ¨¨3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿµµ¢ÿÂÂÂÿÌÌÌÿÔÔÔÿÝÝÝÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿãããÿãããÿãããÿØØØÿ‡‡xÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿbbÿjjÿooÿ……ÿ••ÿ––ÿ——ÿ˜˜ÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ��ÿŒŒÿ‹‹ÿ——ÿ••ÿ’’ÿ’’ÿžž&ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªFÿ»»¸ÿÆÆÆÿÐÐÐÿØØØÿáááÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿãããÿâââÿÕÕÔÿ``6ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿffÿmmÿppÿvvÿ””ÿ˜˜ÿ™™ÿ™™ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ––ÿ””ÿ’’ÿŽŽÿˆˆÿ��ÿ’’ÿŸŸ(ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ±±‹ÿÀÀÀÿËËËÿÔÔÔÿÜÜÜÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿÞÞÞÿÓÓÒÿgg0ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿiiÿnnÿrrÿttÿ‰‰ÿ˜˜ÿ™™ÿššÿœœÿœœÿššÿ™™ÿ˜˜ÿ——ÿ••ÿ““ÿ��ÿ‹‹ÿ––ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªDÿºº¶ÿÅÅÅÿÏÏÏÿ×××ÿàààÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿÚÚÚúV9  :WÛÛÛúàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿÛÛÛÿºº¹ÿaa!ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿjjÿooÿrrÿttÿzzÿ˜˜ÿššÿ��ÿ¤¤ÿ¤¤ÿ��ÿššÿ™™ÿ˜˜ÿ––ÿ””ÿ��ÿŒŒÿ™™#ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ°°Šÿ¿¿¿ÿÊÊÊÿÓÓÓÿÜÜÜÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙÙúV9  :WÛÛÛúàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿâââÿâââÿâââÿÞÞÞÿÖÖÖÿ¥¥šÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿjjÿooÿrrÿuuÿvvÿŒŒÿ››ÿ  ÿ©©ÿ©©ÿ  ÿ››ÿ™™ÿ˜˜ÿ––ÿ””ÿ‘‘ÿŒŒÿ˜˜#ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªª?ÿ¸¸´ÿÄÄÄÿÎÎÎÿÕÕÕÿßßßÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÙÙÙúV9  :WÛÛÛúàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿâââÿßßßÿØØØÿÒÒÒÿ  ”ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿjjÿooÿrrÿttÿvvÿ}}ÿ™™ÿ��ÿ¤¤ÿ¤¤ÿ��ÿššÿ™™ÿ˜˜ÿ––ÿ””ÿ��ÿŒŒÿ™™#ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ­­mÿ¾¾¼ÿÈÈÈÿÑÑÑÿÙÙÙÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9  :WÚÚÚúàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿÞÞÞÿÖÖÖÿÒÒÒÿÈÈÈÿcc<ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿiiÿnnÿrrÿttÿvvÿwwÿ��ÿššÿœœÿœœÿššÿ™™ÿ˜˜ÿ——ÿ••ÿ““ÿ��ÿ‹‹ÿ››%ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©:ÿ´´¢ÿÂÂÂÿÌÌÌÿÔÔÔÿÝÝÝÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9  :WÚÚÚúßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿáááÿáááÿáááÿÞÞÞÿÖÖÖÿÐÐÐÿÊÊÊÿÀÀ¿ÿdd*ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿaaÿiiÿkkÿffÿmmÿppÿssÿuuÿvvÿ}}ÿ˜˜ÿššÿššÿ™™ÿ™™ÿ˜˜ÿ––ÿ””ÿ’’ÿŽŽÿ‰‰ÿ££.ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¬¬kÿ»»ºÿÆÆÆÿÐÐÐÿØØØÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÙÙÙúV9  :WÚÚÚúßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿáááÿáááÿàààÿØØØÿÑÑÑÿÊÊÊÿÂÂÂÿ¶¶µÿcc'ÿ^^ ÿ^^ ÿ^^ ÿ\\ ÿXXÿUUÿkkÿppÿqqÿggÿjjÿnnÿqqÿttÿuuÿvvÿ��ÿ™™ÿ™™ÿ˜˜ÿ——ÿ––ÿ••ÿ““ÿ��ÿŒŒÿ‘‘ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©9ÿ³³¡ÿÁÁÁÿËËËÿÔÔÔÿÝÝÝÿáááÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿØØØúV9  :WÚÚÚúßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿÝÝÝÿÔÔÔÿÉÉÉÿ’’™ÿ‰‰–ÿoopÿ[[ ÿ^^ ÿ[[ ÿWWÿTTÿTTÿUUÿjjÿqqÿqqÿllÿffÿllÿooÿrrÿssÿttÿ{{ÿ––ÿ——ÿ——ÿ––ÿ••ÿ““ÿ‘‘ÿŽŽÿ‰‰ÿ¡¡,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªEÿºº¸ÿÅÅÅÿÏÏÏÿ×××ÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿØØØúV9  :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿÙÙÙÿ¶¶¹ÿppŽÿ|ÿ†ÿ;;aÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿ^^ÿnnÿmmÿhhÿaaÿggÿllÿooÿqqÿrrÿttÿŠŠÿ••ÿ••ÿ••ÿ““ÿ��ÿŽŽÿŠŠÿ˜˜!ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ±±Šÿ¿¿¿ÿÊÊÊÿÒÒÒÿÚÚÚÿàààÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿØØØúV9  :WÚÚÚúßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿàààÿàààÿÒÒÓÿ77nÿ‹ÿœÿ¢ÿ))�ÿHHIÿSS"ÿTTÿTTÿTTÿTTÿTTÿTTÿ[[ÿaaÿ^^ ÿ^^ ÿ``ÿggÿkkÿnnÿooÿppÿyyÿ‘‘ÿ••ÿ––ÿ””ÿŒŒÿ‰‰ÿ––ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©Dÿ¸¸´ÿÃÃÃÿÍÍÍÿÕÕÕÿÞÞÞÿàààÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9  :WÙÙÙúÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿàààÿàààÿ££«ÿ�ÿ�ÿ«ÿ²ÿ®ÿŽÿ--}ÿSS$ÿTTÿTTÿTTÿVVÿZZ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿddÿiiÿkkÿmmÿnnÿ‚‚ÿ““ÿ––ÿ••ÿ��ÿ—— ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¯¯ˆÿ½½½ÿÈÈÈÿÑÑÑÿÚÚÚÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9  :WÙÙÙúÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿàààÿàààÿ¢¢°ÿŒÿ¥ÿ´ÿØÿÉÿ“ÿˆÿRR'ÿTTÿVVÿ[[ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ÿbbÿeeÿffÿnnÿ��ÿ••ÿ––ÿ’’ÿ˜˜ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªª?ÿ··³ÿÂÂÂÿÌÌÌÿÔÔÔÿÞÞÞÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØØØúV9  :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿ¤¤²ÿŒÿ¥ÿ´ÿÖÿÇÿ¥ÿ::mÿTTÿYYÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ__ ÿ‚‚ÿ””ÿ––ÿ””ÿ�� ÿ¨¨2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¬¬lÿ¼¼»ÿÇÇÇÿÐÐÐÿØØØÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿ×××úV9  :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿ¦¦®ÿ€ÿ�ÿ«ÿ±ÿ¯ÿ¦ÿ))�ÿOO)ÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿooÿ’’ÿ••ÿ””ÿ��ÿ  +ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©9ÿ´´¡ÿÁÁÁÿËËËÿÓÓÓÿÛÛÛÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿ×××úV9  :WÙÙÙúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÛÛÜÿ{{–ÿ‰ÿ›ÿ¡ÿŸÿ•ÿ|ÿ��šÿžž—ÿjj9ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿaaÿ�� ÿÿxx ÿwwÿ’’&ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¬¬kÿºº¸ÿÅÅÅÿÎÎÎÿÖÖÖÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9  :WØØØúÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿÄÄÅÿ{{•ÿ ~ÿ„ÿ‚ÿ--xÿww†ÿÌÌÌÿÒÒÒÿÏÏÎÿŠŠ|ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿccÿuuÿvv!ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©9ÿ²²Ÿÿ¿¿¿ÿÉÉÉÿÑÑÑÿÛÛÛÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9  :WØØØúÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÂÂÅÿ££¬ÿ¥¥­ÿÓÓÓÿÖÖÖÿÙÙÙÿÚÚÚÿÜÜÜÿÚÚÚÿÁÁÀÿŠŠ|ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿZZÿnnÿvv ÿvv ÿwwÿ��,ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿªªEÿ¸¸µÿÃÃÃÿÍÍÍÿÕÕÕÿÞÞÞÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ×××úV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÝÝÝÿÅÅÁÿŽŽzÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ[[ ÿ__ÿuuÿvv ÿvvÿ‘‘'ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ©©3ÿ¯¯ˆÿ½½½ÿÇÇÇÿÐÐÐÿÙÙÙÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖÖúV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÛÛÛÿªª¤ÿeeAÿ]] ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿVVÿnnÿvv!ÿvvÿzzÿ§§2ÿ©©3ÿ©©3ÿ©©3ÿ©©Cÿµµ±ÿÀÀÀÿËËËÿÓÓÓÿÜÜÜÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÖÖÖúV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙØÿªª¤ÿll=ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿYYÿ__ÿuu ÿvv ÿwwÿ��-ÿ©©3ÿ©©3ÿ©©3ÿ¬¬ƒÿ···ÿÂÂÂÿÌÌÌÿÔÔÔÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9  :WØØØúÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÙÙØÿ���ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ[[ ÿUUÿnnÿvv ÿvvÿ††ÿ¨¨2ÿ©©3ÿ©©9ÿ­­šÿ¸¸¸ÿÄÄÄÿÍÍÍÿÖÖÖÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9  :W×××úÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÃÃÂÿ‹‹}ÿbb%ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿ^^ ÿUUÿ__ÿuu!ÿggTÿiiMÿ¦¦2ÿ©©3ÿ¨¨dÿ­­¬ÿ¸¸¸ÿÃÃÃÿÍÍÍÿÕÕÕÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÖÖÖúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÂÂÁÿŽŽyÿ]] ÿ^^ ÿ^^ ÿ^^ ÿYYÿSS'ÿll/ÿ??Šÿ†ÿ‘‘1ÿ©©9ÿ¤¤�ÿ«««ÿ¶¶¶ÿÁÁÁÿËËËÿÓÓÓÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÕÕÕúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÚÚÚÿ©©¤ÿeeAÿ]] ÿ^^ ÿZZÿzÿ;;ˆÿ ’ÿ|ÿZZZÿ��aÿŸŸžÿ¨¨¨ÿ³³³ÿ½½½ÿÈÈÈÿÐÐÐÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÕÕÕúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿ×××ÿ¦¦ ÿdd?ÿ]]ÿ//Xÿyÿ€ÿˆÿ‡ÿzÿZZxÿ¢¢£ÿ¯¯¯ÿºººÿÅÅÅÿÎÎÎÿ×××ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9  :W×××úÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÜÜÜÿÏÏÎÿŸŸ•ÿ""iÿŒÿœÿ£ÿ¢ÿ™ÿ„ÿ]]yÿ¬¬­ÿ¹¹¹ÿÄÄÄÿÍÍÍÿÖÖÖÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9  :WÖÖÖúÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÙÙÙÿœœ§ÿƒÿžÿ¬ÿ²ÿ±ÿ©ÿ˜ÿxÿ™™œÿ¹¹¹ÿÄÄÄÿÍÍÍÿÖÖÖÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÕÕÕúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÚÚÚÿuuŒÿŽÿ¦ÿ´ÿÕÿÏÿ°ÿ¡ÿƒÿ„„�ÿ½½½ÿÆÆÆÿÎÎÎÿ×××ÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÔÔÔúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿzz�ÿŽÿ¦ÿµÿØÿÐÿ±ÿ¡ÿƒÿ‰‰”ÿÁÁÁÿÉÉÉÿÑÑÑÿÚÚÚÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¥¥¯ÿ„ÿŸÿ­ÿ´ÿ³ÿªÿ™ÿzÿ©©¬ÿÈÈÈÿÎÎÎÿÕÕÕÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÖÖÖúÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖ×ÿ::vÿŽÿŸÿ¥ÿ¤ÿ›ÿ†ÿrrŠÿÈÈÈÿÎÎÎÿÔÔÔÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÕÕÕúÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿ½½Áÿ::tÿ‚ÿŒÿŠÿ€ÿvv�ÿÊÊÊÿÑÑÑÿÕÕÕÿÛÛÛÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÔÔÔúV9  :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÖÖ×ÿ¤¤¬ÿ¡¡®ÿŸŸ«ÿ¹¹½ÿÓÓÓÿÖÖÖÿÙÙÙÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÔÔÔúU8  :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿÕÕÕùS6 :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿÔÔÔùO3 :WÕÕÕúÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿÔÔÔùI.  :WÔÔÔúÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÕÕÕÿÖÖÖÿÔÔÔùA)  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿ×××ÿÕÕÕÿÑÑÑÿÌÌÌÿËËËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÅÿÅÅÅÿÆÆÆÿÆÆÆÿÇÇÇÿÈÈÈÿÉÉÉÿËËËÿÊÊÊÿËËËÿÌÌÌÿÍÍÍÿÍÍÍÿÎÎÎÿÏÏÏÿÐÐÐÿÓÓÓÿÔÔÔÿÃÃÃ×7! :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿ×××ÿÑÑÑÿÉÉÉÿÃÃÃÿ¿¿¿ÿ¼¼¼ÿºººÿºººÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¹¹¹ÿ¹¹¹ÿºººÿ»»»ÿ¼¼¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÂÂÂÿÄÄÄÿÅÅÅÿÆÆÆÿÊÊÊÿÌÌÌÿÏÏÏÿ···í___i+  :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿØØØÿÕÕÕÿÎÎÎÿÀÀÀÿµµµÿ¯¯¯ÿ¬¬¬ÿªªªÿ¨¨¨ÿ¨¨¨ÿ§§§ÿ§§§ÿ§§§ÿ§§§ÿ¨¨¨ÿ©©©ÿªªªÿ¬¬¬ÿ®®®ÿ¯¯¯ÿ±±±ÿ´´´ÿ¶¶¶ÿ¹¹¹ÿ»»»ÿ¿¿¿ÿÄÄÄÿÇÇÇÿ¦¦¦øfff}2   :WÔÔÔúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÖÖÖÿÒÒÒÿÉÉÉÿ···ÿ¨¨¨ÿ¡¡¡ÿ���ÿšššÿ˜˜˜ÿ———ÿ———ÿ–––ÿ———ÿ———ÿ˜˜˜ÿ˜˜˜ÿ›››ÿ���ÿžžžÿ¡¡¡ÿ£££ÿ¦¦¦ÿ©©©ÿ®®®ÿ²²²ÿ¹¹¹ÿºººÿ™™™ýhhh‡7$  :WÔÔÔúØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÅÅÅÿ¯¯¯ÿžžžÿ”””ÿ���ÿŒŒŒÿŠŠŠÿˆˆˆÿˆˆˆÿ‡‡‡ÿˆˆˆÿˆˆˆÿ‰‰‰ÿ‹‹‹ÿ���ÿ���ÿ’’’ÿ•••ÿ˜˜˜ÿœœœÿŸŸŸÿ¦¦¦ÿ±±±ÿ¬¬¬ÿ“““ÿppp”<'  :WÔÔÔúØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÃÃÃÿªªªÿ———ÿ‹‹‹ÿ………ÿ‚‚‚ÿÿ}}}ÿ}}}ÿ}}}ÿ}}}ÿ~~~ÿ€€€ÿ‚‚‚ÿ„„„ÿ†††ÿˆˆˆÿŒŒŒÿ���ÿ”””ÿ���ÿ°°°ÿ¡¡¡ÿ“““ÿnnn™@+ :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÐÐÐÿÁÁÁÿ§§§ÿ’’’ÿ………ÿ~~~ÿ{{{ÿyyyÿwwwÿwwwÿvvvÿwwwÿxxxÿzzzÿ|||ÿ~~~ÿ€€€ÿƒƒƒÿ‡‡‡ÿ›››ÿ²²²ÿ­­­ÿŸŸŸÿ•••ÿoooŸC- :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿÖÖÖÿÏÏÏÿ¿¿¿ÿ¥¥¥ÿ���ÿ‚‚‚ÿ€€€ÿ‡‡‡ÿ‡‡‡ÿ���ÿ‹‹‹ÿ‹‹‹ÿ”””ÿ———ÿ˜˜˜ÿ   ÿ§§§ÿ±±±ÿºººÿÁÁÁÿ¹¹¹ÿ­­­ÿ   ÿ–––ÿrrr¤F. :WÔÔÔúØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ———ÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿæææÿâââÿÜÜÜÿÕÕÕÿÌÌÌÿÄÄÄÿºººÿ®®®ÿ¢¢¢ÿ———ÿwww­G/ :WÓÓÓú×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿ¿¿¿ÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ”””ÿîîîÿîîîÿîîîÿíííÿêêêÿçççÿâââÿÜÜÜÿÕÕÕÿÎÎÎÿÅÅÅÿ»»»ÿ¯¯¯ÿ£££ÿ———ÿzzz¯I0 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¥¥¥ÿŽŽŽÿ‚‚‚ÿ“““ÿîîîÿîîîÿíííÿëëëÿçççÿâââÿÜÜÜÿ×××ÿÏÏÏÿÆÆÆÿ»»»ÿ°°°ÿ¤¤¤ÿ™™™ÿ¹J1 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿÕÕÕÿÎÎÎÿÀÀÀÿ¤¤¤ÿŽŽŽÿ‚‚‚ÿ’’’ÿîîîÿîîîÿêêêÿçççÿãããÿÞÞÞÿ×××ÿÏÏÏÿÇÇÇÿ¼¼¼ÿ±±±ÿ¦¦¦ÿ›››ÿ€€€»L3 :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿƒƒƒÿ‘‘‘ÿîîîÿêêêÿèèèÿäääÿÞÞÞÿØØØÿÑÑÑÿÇÇÇÿ½½½ÿ³³³ÿ§§§ÿ›››ÿ‚‚‚¿M4  :WÓÓÓú×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿìììÿèèèÿäääÿßßßÿÙÙÙÿÒÒÒÿÈÈÈÿ¿¿¿ÿ´´´ÿ¨¨¨ÿ›››ÿ‡‡‡ÆN5   :WÒÒÒúÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¥¥¥ÿ���ÿ„„„ÿ���ÿèèèÿåååÿàààÿÚÚÚÿÑÑÑÿÊÊÊÿÀÀÀÿµµµÿªªªÿ���ÿ‹‹‹ÈO5!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÍÍÍÿ¿¿¿ÿ¤¤¤ÿ‘‘‘ÿ………ÿ���ÿåååÿàààÿÚÚÚÿÓÓÓÿÊÊÊÿÁÁÁÿ···ÿ«««ÿžžžÿŒŒŒÌP6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÔÔÔÿÌÌÌÿ¾¾¾ÿ¤¤¤ÿ‘‘‘ÿ†††ÿ’’’ÿáááÿÚÚÚÿÓÓÓÿËËËÿÂÂÂÿ¸¸¸ÿ¬¬¬ÿŸŸŸÿ���ÒQ6!  :WÒÒÒúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÒÒÒÿËËËÿ¼¼¼ÿ£££ÿ’’’ÿˆˆˆÿšššÿÛÛÛÿÔÔÔÿÍÍÍÿÃÃÃÿ¹¹¹ÿ®®®ÿ¢¢¢ÿ“““ÕQ6"  :WÑÑÑúÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÒÒÒÿÊÊÊÿ»»»ÿ¢¢¢ÿ’’’ÿŠŠŠÿ¡¡¡ÿÕÕÕÿÍÍÍÿÄÄÄÿ»»»ÿ®®®ÿ¢¢¢ÿ•••ØQ8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÑÑÑÿÉÉÉÿ¹¹¹ÿ¡¡¡ÿ“““ÿ‹‹‹ÿ±±±ÿÎÎÎÿÆÆÆÿ¼¼¼ÿ¯¯¯ÿ£££ÿ™™™ÝR8$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÔÔÔÿÐÐÐÿÇÇÇÿµµµÿ   ÿ“““ÿ���ÿ»»»ÿÇÇÇÿ»»»ÿ±±±ÿ¥¥¥ÿšššßR7$  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÍÍÍÿÃÃÃÿ²²²ÿŸŸŸÿ•••ÿ‘‘‘ÿÃÃÃÿ½½½ÿ²²²ÿ¦¦¦ÿ›››âS8#  :WÑÑÑúÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÀÀÀÿ¯¯¯ÿŸŸŸÿ———ÿ¡¡¡ÿ¾¾¾ÿ³³³ÿ§§§ÿŸŸŸåS9#  :WÐÐÐúÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÓÓÓÿÑÑÑÿÉÉÉÿ½½½ÿ¬¬¬ÿ   ÿ›››ÿ···ÿ´´´ÿ©©©ÿ   éR9$  :VÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÏÏÏÿÇÇÇÿ¹¹¹ÿªªªÿ¢¢¢ÿ¢¢¢ÿ···ÿªªªÿ¢¢¢êU9$  8TÐÐÐúÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÒÒÒÿÌÌÌÿÃÃÃÿµµµÿªªªÿ¥¥¥ÿµµµÿ«««ÿ¥¥¥ïT9$ 6QÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÊÊÊÿÀÀÀÿ´´´ÿ¬¬¬ÿ­­­ÿ±±±ÿ¨¨¨ïT9% 2KÑÑÑùÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿ¿¿¿ÿµµµÿ²²²ÿ¸¸¸ÿ¨¨¨ñ U9%  ,BÐÐÐùÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÏÏÏÿÉÉÉÿÀÀÀÿ¹¹¹ÿ»»»ÿ«««ñU9%  $6ÑÑÑøÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿËËËÿÃÃÃÿ¿¿¿ÿ­­­êR7% )ÒÒÒ÷ÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÒÒÒÿÑÑÑÿÐÐÐÿÌÌÌÿÇÇÇÿ¯¯¯Ö$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ÿÿþÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþ?ÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþ?ÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÿatomes_1.3.1/AUTHORS.md0000664000175000017500000000114315212624223014153 0ustar lerouxleroux**atomes** program Author ========================================================= For any support request please use: [atomes@ipcms.unistra.fr](mailto:atomes@ipcms.unistra.fr) --------------------------------------------------------- Dr. Sébastien Le Roux Institut de Chimie et Physique des Matériaux de Strasbourg \ Département des Matériaux Organiques \ 23 rue du Loess, \ BP 43 F-67034 Strasbourg Cedex 2 \ France Email: [sebastien.leroux@ipcms.unistra.fr](mailto:sebastien.leroux@ipcms.unistra.fr) \ Web page: [https://www.ipcms.fr/sebastien-le-roux/](https://www.ipcms.fr/sebastien-le-roux/) atomes_1.3.1/codemeta.json0000664000175000017500000000776415212624223015177 0ustar lerouxleroux{ "@context": "https://doi.org/10.5063/schema/codemeta-2.0", "type": "SoftwareSourceCode", "applicationCategory": "Chemistry", "author": [ { "id": "https://orcid.org/0000-0002-1912-6960", "type": "Person", "affiliation": { "type": "Organization", "name": "Institut de Physique et Chimie des Matériaux de Strasbourg" }, "email": "sebastien.leroux@ipcms.unistra.fr", "familyName": "Le Roux", "givenName": "Sébastien" } ], "codeRepository": "https://github.com/Slookeur/atomes-GNU.git", "contributor": [ { "id": "https://orcid.org/0000-0001-5318-3910", "type": "Person", "affiliation": { "type": "Organization", "name": "Institut de Recherche de Chimie Paris" }, "email": "fx.coudert@chimieparistech.psl.eu", "familyName": "Coudert", "givenName": "François-Xavier" }, { "id": "https://orcid.org/0000-0001-6913-7388", "type": "Person", "email": "alex.ploumistos@gmail.com", "familyName": "Ploumistos", "givenName": "Alexander" }, { "id": "https://orcid.org/0000-0002-5184-7557", "type": "Person", "affiliation": { "type": "Organization", "name": "EDF" }, "email": "pgt@debian.org", "familyName": "Gruet", "givenName": "Pierre" }, { "id": "_:contributor_4", "type": "Person", "affiliation": { "type": "Organization", "name": "Red Hat" }, "email": "yselkowi@redhat.com", "familyName": "Selkowitz", "givenName": "Yaakov" } ], "dateCreated": "2012-01-01", "dateModified": "2026-06-11", "datePublished": "2022-09-01", "description": "atomes: a toolbox to analyze, to visualize \nand to create/edit three-dimensional atomic scale models.\nThe software interface offers a workspace that allows to have many projects opened simultaneously.\nThe different projects in the workspace can exchange data: \nanalysis results, atomic coordinates...\natomes also provides an advanced input preparation system \nfor further calculations using well known molecular dynamics codes:\n\n Classical MD: DLPOLY and LAMMPS\n ab-initio MD: CPMD and CP2K\n QM-MM MD: CPMD and CP2K\n\nTo prepare the input files for these calculations is likely to be the key, \nand most complicated step towards MD simulations.\natomes offers a user-friendly assistant to help and guide the scientist\nstep by step to achieve this crucial step.", "downloadUrl": "https://atomes.ipcms.fr", "funder": { "type": "Organization", "name": "CNRS" }, "keywords": [ "Chemistry", "Physics", "Molecule", "Crystal", "Molecular Dynamics", "Surface" ], "license": "https://spdx.org/licenses/AGPL-3.0-or-later", "name": "atomes", "operatingSystem": [ "Linux", "macOS", "Windows" ], "programmingLanguage": [ "C", "GLSL", "Fortran" ], "relatedLink": "https://atomes.ipcms.fr/", "schema:releaseNotes": "Release of version 1.3.1\n\n - Bug corrections" "softwareRequirements": [ "libgtk+3.0 or ligtk4 : https://www.gtk.org/", "libepoxy : https://github.com/anholt/libepoxy/", "libglu (Linux only) : https://gitlab.freedesktop.org/mesa/glu/", "libpangoft2 : https://docs.gtk.org/PangoFT2/", "libxml-2 : https://github.com/GNOME/libxml2/", "libavutil, libavformat, libavcodec, libswscale : https://www.ffmpeg.org/" ], "version": "1.3.1", "developmentStatus": "active", "issueTracker": "https://github.com/Slookeur/atomes-GNU/issues" } atomes_1.3.1/config.h.in0000664000175000017500000000242215212624223014530 0ustar lerouxleroux/* config.h.in. Generated from configure.ac by autoheader. */ /* atomes major version */ #undef ATOMES_MAJOR_VERSION /* atomes minor version */ #undef ATOMES_MINOR_VERSION /* atomes patch version */ #undef ATOMES_PATCH_VERSION /* Define to dummy 'main' function (if any) required to link to the Fortran libraries. */ #undef FC_DUMMY_MAIN /* Define if F77 and FC dummy 'main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef FC_FUNC /* As FC_FUNC, but for C identifiers containing underscores. */ #undef FC_FUNC_ /* GETTEXT package name */ #undef GETTEXT_PACKAGE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Version number of package */ #undef VERSION atomes_1.3.1/config.guess0000775000175000017500000014120515212624223015030 0ustar lerouxleroux#!/usr/bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-05-25' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: atomes_1.3.1/atomes-completion.sh0000664000175000017500000000124015212624223016475 0ustar lerouxleroux# atomes(1) completion -*- shell-script -*- _atomes() { local cur prev words cword split _init_completion -s || return COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} case $prev in -h | --help | -v | --version) return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace return fi _filedir '@([aA][wW][fF]|[aA][pP][fF]|[xX][yY][zZ]|[pP][dD][bB]|[eE][nN][tT]|[cC][iI][fF]|[iI][pP][fF]|[tT][rR][jJ]|[xX][dD][aA][tT][cC][aA][rR]|[cC]3[dD]|[hH][iI][sS][tT])' } && complete -F _atomes atomes atomes_1.3.1/compile0000775000175000017500000001635015212624223014070 0ustar lerouxleroux#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/Makefile.am0000664000175000017500000000554415212624223014551 0ustar lerouxleroux## Process this file with automake to produce Makefile.in SUBDIRS = data man locale src atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications atomes_mimedir = $(atomes_datadir)/mime/packages/ atomes_metadir = $(atomes_datadir)/metainfo atomes_bashdir = $(atomes_datadir)/bash-completion/completions atomes_docdir = $(docdir) atomes_doc_DATA = \ README.md \ AUTHORS.md \ ChangeLog install-data-local: # Bash completion if [ ! -d $(atomes_bashdir) ]; then \ $(mkinstalldirs) $(atomes_bashdir); \ fi $(INSTALL_DATA) $(srcdir)/atomes-completion.sh $(atomes_bashdir)/atomes # Program's icons if [ ! -d $(atomes_iconsdir) ]; then \ $(mkinstalldirs) $(atomes_iconsdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-workspace.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-project.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-coordinates.svg $(atomes_iconsdir) # Custom MIME types if [ ! -d $(atomes_mimedir) ]; then \ $(mkinstalldirs) $(atomes_mimedir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes-mime.xml $(atomes_mimedir) # Meta info if [ ! -d $(atomes_metadir) ]; then \ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes.desktop $(atomes_desktopdir)/atomes.desktop # Finalize touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi desktop-file-install --vendor="" \ --dir=$(atomes_desktopdir) -m 644 \ $(atomes_desktopdir)/atomes.desktop if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Remove doc directordy on uninstall uninstall-local: -rm -f $(atomes_iconsdir)/atomes.svg -rm -f $(atomes_iconsdir)/atomes-workspace.svg -rm -f $(atomes_iconsdir)/atomes-project.svg -rm -f $(atomes_iconsdir)/atomes-coordinates.svg -rm -f $(atomes_desktopdir)/atomes.desktop -rm -f $(atomes_metadir)/fr.ipcms.atomes.appdata.xml -rm -f $(atomes_mimedir)/atomes-mime.xml -rm -f $(atomes_bashdir)/atomes -rmdir $(atomes_docdir) touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi atomes_1.3.1/stamp-h10000664000175000017500000000002715212624223014061 0ustar lerouxlerouxtimestamp for config.h atomes_1.3.1/install-sh0000775000175000017500000003577615212624223014533 0ustar lerouxleroux#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/depcomp0000775000175000017500000005602015212624223014065 0ustar lerouxleroux#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/AUTHORS0000777000175000017500000000000015212624223015217 2AUTHORS.mdustar lerouxlerouxatomes_1.3.1/INSTALL0000664000175000017500000003662615212624223013553 0ustar lerouxlerouxInstallation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. atomes_1.3.1/autom4te.cache/0000775000175000017500000000000015212624223015311 5ustar lerouxlerouxatomes_1.3.1/autom4te.cache/output.10000664000175000017500000113426615212624223016750 0ustar lerouxleroux@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.72 for atomes 1.3.1. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in @%:@( e) case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in @%:@( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in @%:@( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in @%:@( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in @%:@( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in @%:@( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in @%:@( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in @%:@( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in @%:@( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in @%:@( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "@%:@define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "@%:@define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } @%:@ Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in @%:@( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in @%:@( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } @%:@ Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in @%:@( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC@&t@_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi @%:@ Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in @%:@( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/autom4te.cache/output.20000664000175000017500000113426315212624223016746 0ustar lerouxleroux@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.72 for atomes 1.3.1. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in @%:@( e) case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in @%:@( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in @%:@( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in @%:@( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in @%:@( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in @%:@( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in @%:@( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in @%:@( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in @%:@( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in @%:@( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "@%:@define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "@%:@define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } @%:@ Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in @%:@( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in @%:@( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } @%:@ Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in @%:@( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC@&t@_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi @%:@ Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in @%:@( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/autom4te.cache/traces.10000664000175000017500000012704115212624223016661 0ustar lerouxlerouxm4trace:aclocal.m4:1013: -1- AC_SUBST([am__quote]) m4trace:aclocal.m4:1013: -1- AC_SUBST_TRACE([am__quote]) m4trace:aclocal.m4:1013: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:13: -1- AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section 'AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- AC_SUBST([SHELL]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:13: -1- AC_SUBST([DEFS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- AC_SUBST([build_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([host_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([target_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.18.1]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:15: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AC_SUBST([install_sh]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AC_SUBST([STRIP]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- AC_SUBST([AWK]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AC_SUBST([am__tar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- AC_SUBST([am__untar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- AC_SUBST([CTAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CTAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([ETAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ETAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([CSCOPE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CSCOPE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST([am__rm_f_notfound]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__rm_f_notfound]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__rm_f_notfound$]) m4trace:configure.ac:15: -1- AC_SUBST([am__xargs_n]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__xargs_n]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__xargs_n$]) m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:17: -1- AH_OUTPUT([ATOMES_MAJOR_VERSION], [/* atomes major version */ @%:@undef ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- AC_SUBST([ATOMES_MAJOR_VERSION], [1]) m4trace:configure.ac:18: -1- AC_SUBST_TRACE([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MINOR_VERSION]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:19: -1- AH_OUTPUT([ATOMES_MINOR_VERSION], [/* atomes minor version */ @%:@undef ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- AC_SUBST([ATOMES_MINOR_VERSION], [3]) m4trace:configure.ac:20: -1- AC_SUBST_TRACE([ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_PATCH_VERSION]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:21: -1- AH_OUTPUT([ATOMES_PATCH_VERSION], [/* atomes patch version */ @%:@undef ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- AC_SUBST([ATOMES_PATCH_VERSION], [1]) m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LIBS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:31: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:31: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:31: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:31: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:31: -1- AC_SUBST([am__include]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LIBINTL_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDIO_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.ac:32: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:32: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @%:@undef STDC_HEADERS]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LIBINTL_H$]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LOCALE_H$]) m4trace:configure.ac:38: -1- AC_CANONICAL_HOST m4trace:configure.ac:38: -1- AC_CANONICAL_BUILD m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.ac:38: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:38: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([build_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:38: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:38: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([host_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:64: -1- AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_TRUE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_TRUE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_TRUE$]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_FALSE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_FALSE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_FALSE$]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_TRUE]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_FALSE]) m4trace:configure.ac:65: -1- AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_TRUE$]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_FALSE$]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_FALSE]) m4trace:configure.ac:66: -1- AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_TRUE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_TRUE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_TRUE$]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_FALSE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_FALSE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_FALSE$]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_TRUE]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_FALSE]) m4trace:configure.ac:69: -1- AC_SUBST([WINDRES]) m4trace:configure.ac:69: -1- AC_SUBST_TRACE([WINDRES]) m4trace:configure.ac:69: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:78: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:79: -1- AC_SUBST([UP_MIME]) m4trace:configure.ac:79: -1- AC_SUBST_TRACE([UP_MIME]) m4trace:configure.ac:79: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:80: -1- AC_SUBST([UP_DESKTOP]) m4trace:configure.ac:80: -1- AC_SUBST_TRACE([UP_DESKTOP]) m4trace:configure.ac:80: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:81: -1- AC_SUBST([UP_APPSTREAM]) m4trace:configure.ac:81: -1- AC_SUBST_TRACE([UP_APPSTREAM]) m4trace:configure.ac:81: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:98: -1- AM_CONDITIONAL([GTK3], [test "$with_gtk" == "3"]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_TRUE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_TRUE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_TRUE$]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_FALSE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_FALSE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_FALSE$]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_TRUE]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_FALSE]) m4trace:configure.ac:107: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_CFLAGS$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_LIBS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_LIBS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_LIBS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_CFLAGS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_LIBS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_CFLAGS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_CFLAGS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_LIBS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_LIBS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_LIBS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_LIBS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LIBS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:140: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:140: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN], [/* Define to dummy \'main\' function (if any) required to link to the Fortran libraries. */ @%:@undef FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy \'main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef FC_FUNC]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC_], [/* As FC_FUNC, but for C identifiers containing underscores. */ @%:@undef FC_FUNC_]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LIBS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:153: -1- AC_FC_SRCEXT([f90], [FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS"], [as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5]) m4trace:configure.ac:153: -1- AC_SUBST([FCFLAGS_f90]) m4trace:configure.ac:153: -1- AC_SUBST_TRACE([FCFLAGS_f90]) m4trace:configure.ac:153: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:154: -1- AC_FC_SRCEXT([F90], [FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS"], [as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5]) m4trace:configure.ac:154: -1- AC_SUBST([FCFLAGS_F90]) m4trace:configure.ac:154: -1- AC_SUBST_TRACE([FCFLAGS_F90]) m4trace:configure.ac:154: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:158: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:159: -1- AC_FC_FREEFORM m4trace:configure.ac:172: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:173: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:174: -1- AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_TRUE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_TRUE$]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_FALSE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_FALSE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_FALSE$]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_FALSE]) m4trace:configure.ac:177: -1- AC_CONFIG_FILES([ Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile ]) m4trace:configure.ac:186: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:188: -1- AC_CONFIG_FILES([misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in]) m4trace:configure.ac:190: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:190: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:190: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([MKDIR_P]) atomes_1.3.1/autom4te.cache/requests0000664000175000017500000002717015212624223017116 0ustar lerouxleroux# This file was generated by Autom4te 2.72. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', '/usr/share/aclocal-1.18/internal/ac-config-macro-dirs.m4', '/usr/share/aclocal/pkg.m4', '/usr/share/aclocal-1.18/amversion.m4', '/usr/share/aclocal-1.18/auxdir.m4', '/usr/share/aclocal-1.18/cond.m4', '/usr/share/aclocal-1.18/depend.m4', '/usr/share/aclocal-1.18/depout.m4', '/usr/share/aclocal-1.18/init.m4', '/usr/share/aclocal-1.18/install-sh.m4', '/usr/share/aclocal-1.18/lead-dot.m4', '/usr/share/aclocal-1.18/make.m4', '/usr/share/aclocal-1.18/missing.m4', '/usr/share/aclocal-1.18/options.m4', '/usr/share/aclocal-1.18/prog-cc-c-o.m4', '/usr/share/aclocal-1.18/rmf.m4', '/usr/share/aclocal-1.18/runlog.m4', '/usr/share/aclocal-1.18/sanity.m4', '/usr/share/aclocal-1.18/silent.m4', '/usr/share/aclocal-1.18/strip.m4', '/usr/share/aclocal-1.18/substnot.m4', '/usr/share/aclocal-1.18/tar.m4', '/usr/share/aclocal-1.18/xargsn.m4', 'configure.ac' ], { 'AC_CONFIG_MACRO_DIR' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_DEFUN' => 1, 'AC_DEFUN_ONCE' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_AUX_DIR_EXPAND' => 1, 'AM_CONDITIONAL' => 1, 'AM_DEP_TRACK' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_MAKE_INCLUDE' => 1, 'AM_MISSING_HAS_RUN' => 1, 'AM_MISSING_PROG' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_PROG_CC_C_O' => 1, 'AM_PROG_INSTALL_SH' => 1, 'AM_PROG_INSTALL_STRIP' => 1, 'AM_RUN_LOG' => 1, 'AM_SANITY_CHECK' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AM_SET_DEPDIR' => 1, 'AM_SET_LEADING_DOT' => 1, 'AM_SILENT_RULES' => 1, 'AM_SUBST_NOTMAKE' => 1, 'AU_DEFUN' => 1, 'AX_CHECK_COMPILER_FLAG' => 1, 'PKG_CHECK_EXISTS' => 1, 'PKG_CHECK_MODULES' => 1, 'PKG_CHECK_MODULES_STATIC' => 1, 'PKG_CHECK_VAR' => 1, 'PKG_HAVE_DEFINE_WITH_MODULES' => 1, 'PKG_HAVE_WITH_MODULES' => 1, 'PKG_INSTALLDIR' => 1, 'PKG_NOARCH_INSTALLDIR' => 1, 'PKG_PROG_PKG_CONFIG' => 1, 'PKG_WITH_MODULES' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, '_AM_AUTOCONF_VERSION' => 1, '_AM_CONFIG_MACRO_DIRS' => 1, '_AM_DEPENDENCIES' => 1, '_AM_FILESYSTEM_TIMESTAMP_RESOLUTION' => 1, '_AM_IF_OPTION' => 1, '_AM_MANGLE_OPTION' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, '_AM_PROG_CC_C_O' => 1, '_AM_PROG_RM_F' => 1, '_AM_PROG_TAR' => 1, '_AM_PROG_XARGS_N' => 1, '_AM_SET_OPTION' => 1, '_AM_SET_OPTIONS' => 1, '_AM_SILENT_RULES' => 1, '_AM_SLEEP_FRACTIONAL_SECONDS' => 1, '_AM_SUBST_NOTMAKE' => 1, '_PKG_SHORT_ERRORS_SUPPORTED' => 1, '_m4_warn' => 1, 'include' => 1, 'm4_include' => 1, 'm4_pattern_allow' => 1, 'm4_pattern_forbid' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', '/usr/share/autoconf/autoconf/trailer.m4', 'configure.ac' ], { 'AC_CANONICAL_BUILD' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AC_CONFIG_FILES' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AC_FC_FREEFORM' => 1, 'AC_FC_PP_DEFINE' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AC_FC_SRCEXT' => 1, 'AC_INIT' => 1, 'AC_LIBSOURCE' => 1, 'AC_PROG_LIBTOOL' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_SUBST' => 1, 'AC_SUBST_TRACE' => 1, 'AH_OUTPUT' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_CONDITIONAL' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AM_NLS' => 1, 'AM_PATH_GUILE' => 1, 'AM_POT_TOOLS' => 1, 'AM_PROG_AR' => 1, 'AM_PROG_CC_C_O' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_PROG_MOC' => 1, 'AM_SILENT_RULES' => 1, 'AM_XGETTEXT_OPTION' => 1, 'GTK_DOC_CHECK' => 1, 'IT_PROG_INTLTOOL' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'LT_INIT' => 1, 'LT_SUPPORTED_TAG' => 1, '_AM_COND_ELSE' => 1, '_AM_COND_ENDIF' => 1, '_AM_COND_IF' => 1, '_AM_MAKEFILE_INCLUDE' => 1, '_AM_SUBST_NOTMAKE' => 1, '_LT_AC_TAGCONFIG' => 1, '_m4_warn' => 1, 'include' => 1, 'm4_include' => 1, 'm4_pattern_allow' => 1, 'm4_pattern_forbid' => 1, 'm4_sinclude' => 1, 'sinclude' => 1 } ], 'Autom4te::Request' ), bless( [ '2', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.ac' ], { 'AC_CANONICAL_BUILD' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AC_CONFIG_FILES' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AC_FC_FREEFORM' => 1, 'AC_FC_PP_DEFINE' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AC_FC_SRCEXT' => 1, 'AC_INIT' => 1, 'AC_LIBSOURCE' => 1, 'AC_PROG_LIBTOOL' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_SUBST' => 1, 'AC_SUBST_TRACE' => 1, 'AH_OUTPUT' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_CONDITIONAL' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AM_NLS' => 1, 'AM_PATH_GUILE' => 1, 'AM_POT_TOOLS' => 1, 'AM_PROG_AR' => 1, 'AM_PROG_CC_C_O' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_PROG_MOC' => 1, 'AM_SILENT_RULES' => 1, 'AM_XGETTEXT_OPTION' => 1, 'GTK_DOC_CHECK' => 1, 'IT_PROG_INTLTOOL' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'LT_INIT' => 1, 'LT_SUPPORTED_TAG' => 1, '_AM_COND_ELSE' => 1, '_AM_COND_ENDIF' => 1, '_AM_COND_IF' => 1, '_AM_MAKEFILE_INCLUDE' => 1, '_AM_SUBST_NOTMAKE' => 1, '_LT_AC_TAGCONFIG' => 1, '_m4_warn' => 1, 'include' => 1, 'm4_include' => 1, 'm4_pattern_allow' => 1, 'm4_pattern_forbid' => 1, 'm4_sinclude' => 1, 'sinclude' => 1 } ], 'Autom4te::Request' ) ); atomes_1.3.1/autom4te.cache/traces.20000664000175000017500000012704115212624223016662 0ustar lerouxlerouxm4trace:aclocal.m4:1013: -1- AC_SUBST([am__quote]) m4trace:aclocal.m4:1013: -1- AC_SUBST_TRACE([am__quote]) m4trace:aclocal.m4:1013: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:13: -1- AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section 'AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- AC_SUBST([SHELL]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:13: -1- AC_SUBST([DEFS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- AC_SUBST([build_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([host_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([target_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.18.1]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:15: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AC_SUBST([install_sh]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AC_SUBST([STRIP]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- AC_SUBST([AWK]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AC_SUBST([am__tar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- AC_SUBST([am__untar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- AC_SUBST([CTAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CTAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([ETAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ETAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([CSCOPE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CSCOPE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST([am__rm_f_notfound]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__rm_f_notfound]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__rm_f_notfound$]) m4trace:configure.ac:15: -1- AC_SUBST([am__xargs_n]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__xargs_n]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__xargs_n$]) m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:17: -1- AH_OUTPUT([ATOMES_MAJOR_VERSION], [/* atomes major version */ @%:@undef ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- AC_SUBST([ATOMES_MAJOR_VERSION], [1]) m4trace:configure.ac:18: -1- AC_SUBST_TRACE([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MINOR_VERSION]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:19: -1- AH_OUTPUT([ATOMES_MINOR_VERSION], [/* atomes minor version */ @%:@undef ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- AC_SUBST([ATOMES_MINOR_VERSION], [3]) m4trace:configure.ac:20: -1- AC_SUBST_TRACE([ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_PATCH_VERSION]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:21: -1- AH_OUTPUT([ATOMES_PATCH_VERSION], [/* atomes patch version */ @%:@undef ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- AC_SUBST([ATOMES_PATCH_VERSION], [1]) m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LIBS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:31: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:31: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:31: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:31: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:31: -1- AC_SUBST([am__include]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LIBINTL_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDIO_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.ac:32: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:32: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @%:@undef STDC_HEADERS]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LIBINTL_H$]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LOCALE_H$]) m4trace:configure.ac:38: -1- AC_CANONICAL_HOST m4trace:configure.ac:38: -1- AC_CANONICAL_BUILD m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.ac:38: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:38: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([build_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:38: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:38: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([host_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:64: -1- AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_TRUE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_TRUE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_TRUE$]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_FALSE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_FALSE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_FALSE$]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_TRUE]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_FALSE]) m4trace:configure.ac:65: -1- AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_TRUE$]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_FALSE$]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_FALSE]) m4trace:configure.ac:66: -1- AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_TRUE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_TRUE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_TRUE$]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_FALSE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_FALSE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_FALSE$]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_TRUE]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_FALSE]) m4trace:configure.ac:69: -1- AC_SUBST([WINDRES]) m4trace:configure.ac:69: -1- AC_SUBST_TRACE([WINDRES]) m4trace:configure.ac:69: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:78: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:79: -1- AC_SUBST([UP_MIME]) m4trace:configure.ac:79: -1- AC_SUBST_TRACE([UP_MIME]) m4trace:configure.ac:79: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:80: -1- AC_SUBST([UP_DESKTOP]) m4trace:configure.ac:80: -1- AC_SUBST_TRACE([UP_DESKTOP]) m4trace:configure.ac:80: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:81: -1- AC_SUBST([UP_APPSTREAM]) m4trace:configure.ac:81: -1- AC_SUBST_TRACE([UP_APPSTREAM]) m4trace:configure.ac:81: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:98: -1- AM_CONDITIONAL([GTK3], [test "$with_gtk" == "3"]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_TRUE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_TRUE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_TRUE$]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_FALSE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_FALSE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_FALSE$]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_TRUE]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_FALSE]) m4trace:configure.ac:107: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_CFLAGS$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_LIBS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_LIBS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_LIBS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_CFLAGS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_LIBS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_CFLAGS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_CFLAGS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_LIBS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_LIBS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_LIBS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_LIBS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LIBS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:140: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:140: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN], [/* Define to dummy \'main\' function (if any) required to link to the Fortran libraries. */ @%:@undef FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy \'main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef FC_FUNC]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC_], [/* As FC_FUNC, but for C identifiers containing underscores. */ @%:@undef FC_FUNC_]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LIBS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:153: -1- AC_FC_SRCEXT([f90], [FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS"], [as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5]) m4trace:configure.ac:153: -1- AC_SUBST([FCFLAGS_f90]) m4trace:configure.ac:153: -1- AC_SUBST_TRACE([FCFLAGS_f90]) m4trace:configure.ac:153: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:154: -1- AC_FC_SRCEXT([F90], [FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS"], [as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5]) m4trace:configure.ac:154: -1- AC_SUBST([FCFLAGS_F90]) m4trace:configure.ac:154: -1- AC_SUBST_TRACE([FCFLAGS_F90]) m4trace:configure.ac:154: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:158: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:159: -1- AC_FC_FREEFORM m4trace:configure.ac:172: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:173: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:174: -1- AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_TRUE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_TRUE$]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_FALSE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_FALSE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_FALSE$]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_FALSE]) m4trace:configure.ac:177: -1- AC_CONFIG_FILES([ Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile ]) m4trace:configure.ac:186: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:188: -1- AC_CONFIG_FILES([misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in]) m4trace:configure.ac:190: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:190: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:190: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([MKDIR_P]) atomes_1.3.1/autom4te.cache/output.00000664000175000017500000113426315212624223016744 0ustar lerouxleroux@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.72 for atomes 1.3.1. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in @%:@( e) case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in @%:@( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in @%:@( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in @%:@( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in @%:@( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in @%:@( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in @%:@( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in @%:@( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in @%:@( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in @%:@( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "@%:@define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "@%:@define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } @%:@ Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in @%:@( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in @%:@( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } @%:@ Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in @%:@( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC@&t@_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi @%:@ Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in @%:@( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/autom4te.cache/traces.00000664000175000017500000020574115212624223016664 0ustar lerouxlerouxm4trace:/usr/share/aclocal/pkg.m4:62: -1- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then m4_default([$2], [AC_MSG_ERROR([pkg-config not found])]) fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:99: -1- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) m4trace:/usr/share/aclocal/pkg.m4:128: -1- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:146: -1- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:215: -1- AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:233: -1- AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/share/aclocal/pkg.m4:255: -1- AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/share/aclocal/pkg.m4:274: -1- AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ]) m4trace:/usr/share/aclocal/pkg.m4:292: -1- AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ]) m4trace:/usr/share/aclocal/pkg.m4:329: -1- AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ]) m4trace:/usr/share/aclocal/pkg.m4:344: -1- AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ]) m4trace:/usr/share/aclocal-1.18/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.18' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.18.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) m4trace:/usr/share/aclocal-1.18/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.18.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) m4trace:/usr/share/aclocal-1.18/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) m4trace:/usr/share/aclocal-1.18/cond.m4:12: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) m4trace:/usr/share/aclocal-1.18/depend.m4:26: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) m4trace:/usr/share/aclocal-1.18/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) m4trace:/usr/share/aclocal-1.18/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) m4trace:/usr/share/aclocal-1.18/depout.m4:11: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ]) m4trace:/usr/share/aclocal-1.18/depout.m4:64: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) m4trace:/usr/share/aclocal-1.18/init.m4:29: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([_AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl AC_REQUIRE([_AM_PROG_RM_F]) AC_REQUIRE([_AM_PROG_XARGS_N]) dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) m4trace:/usr/share/aclocal-1.18/init.m4:167: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) m4trace:/usr/share/aclocal-1.18/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) m4trace:/usr/share/aclocal-1.18/lead-dot.m4:10: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) m4trace:/usr/share/aclocal-1.18/make.m4:13: -1- AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) m4trace:/usr/share/aclocal-1.18/make.m4:42: -1- m4_pattern_allow([^am__quote$]) m4trace:/usr/share/aclocal-1.18/missing.m4:11: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) m4trace:/usr/share/aclocal-1.18/missing.m4:20: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) m4trace:/usr/share/aclocal-1.18/options.m4:11: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) m4trace:/usr/share/aclocal-1.18/options.m4:17: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) m4trace:/usr/share/aclocal-1.18/options.m4:23: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) m4trace:/usr/share/aclocal-1.18/options.m4:29: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) m4trace:/usr/share/aclocal-1.18/prog-cc-c-o.m4:12: -1- AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) m4trace:/usr/share/aclocal-1.18/prog-cc-c-o.m4:50: -1- AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) m4trace:/usr/share/aclocal-1.18/rmf.m4:12: -1- AC_DEFUN([_AM_PROG_RM_F], [am__rm_f_notfound= AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""']) AC_SUBST(am__rm_f_notfound) ]) m4trace:/usr/share/aclocal-1.18/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) m4trace:/usr/share/aclocal-1.18/sanity.m4:11: -1- AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl AC_CACHE_CHECK([whether sleep supports fractional seconds], am_cv_sleep_fractional_seconds, [dnl AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes], [am_cv_sleep_fractional_seconds=no]) ])]) m4trace:/usr/share/aclocal-1.18/sanity.m4:28: -1- AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS]) AC_CACHE_CHECK([filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `[ls -t conftest.ts[12]]` && { test "$[]*" != "X conftest.ts1 conftest.ts2" || test "$[]*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". _AS_ECHO_UNQUOTED( ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""], [AS_MESSAGE_LOG_FD]) AC_MSG_FAILURE([ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment.]) fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$[]2" = conftest.ts3 && test "$[]3" = conftest.ts2 && test "$[]4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ])]) m4trace:/usr/share/aclocal-1.18/sanity.m4:161: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION]) # This check should not be cached, as it may vary across builds of # different projects. AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[]*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$[]2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done AC_MSG_RESULT([$am_build_env_is_sane]) if test "$am_build_env_is_sane" = no; then AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ]) AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) m4trace:/usr/share/aclocal-1.18/silent.m4:11: -1- AC_DEFUN([_AM_SILENT_RULES], [AM_DEFAULT_VERBOSITY=1 AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls dnl to AM_SILENT_RULES to change the default value. AC_CONFIG_COMMANDS_PRE([dnl case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi ])dnl ]) m4trace:/usr/share/aclocal-1.18/silent.m4:69: -1- AC_DEFUN([AM_SILENT_RULES], [AC_REQUIRE([_AM_SILENT_RULES]) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])m4_newline dnl We intentionally force a newline after the assignment, since a) nothing dnl good can come of more text following, and b) that was the behavior dnl before 1.17. See https://bugs.gnu.org/72267. ]) m4trace:/usr/share/aclocal-1.18/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) m4trace:/usr/share/aclocal-1.18/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) m4trace:/usr/share/aclocal-1.18/substnot.m4:17: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) m4trace:/usr/share/aclocal-1.18/tar.m4:23: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test x$am_uid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work]) elif test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test x$gm_gid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work]) elif test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) m4trace:/usr/share/aclocal-1.18/xargsn.m4:12: -1- AC_DEFUN([_AM_PROG_XARGS_N], [AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])]) AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }' ])dnl AC_SUBST(am__xargs_n) ]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section 'AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_SET_CURRENT_AUTOMAKE_VERSION m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.18.1]) m4trace:configure.ac:15: -1- _AM_AUTOCONF_VERSION([2.72]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- _AM_SET_OPTIONS([]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([no-define]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AM_SANITY_CHECK m4trace:configure.ac:15: -1- _AM_FILESYSTEM_TIMESTAMP_RESOLUTION m4trace:configure.ac:15: -1- _AM_SLEEP_FRACTIONAL_SECONDS m4trace:configure.ac:15: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) m4trace:configure.ac:15: -1- AM_MISSING_HAS_RUN m4trace:configure.ac:15: -1- AM_AUX_DIR_EXPAND m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AM_PROG_INSTALL_SH m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AM_PROG_INSTALL_STRIP m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AM_SET_LEADING_DOT m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-ustar]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-pax]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-v7]) m4trace:configure.ac:15: -1- _AM_PROG_TAR([ustar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AM_RUN_LOG([$_am_tar --version]) m4trace:configure.ac:15: -1- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) m4trace:configure.ac:15: -1- AM_RUN_LOG([$am__untar = $gtk_version_number]) m4trace:configure.ac:107: -1- PKG_PROG_PKG_CONFIG m4trace:configure.ac:107: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_CFLAGS$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_LIBS$]) m4trace:configure.ac:107: -1- PKG_CHECK_EXISTS([$gtk_version >= $gtk_version_number], [pkg_cv_[]LGTK_CFLAGS=`$PKG_CONFIG --[]cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:107: -1- PKG_CHECK_EXISTS([$gtk_version >= $gtk_version_number], [pkg_cv_[]LGTK_LIBS=`$PKG_CONFIG --[]libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:107: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:110: -1- PKG_CHECK_MODULES([INTEGRATION], [gtk-mac-integration]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_CFLAGS$]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_LIBS$]) m4trace:configure.ac:110: -1- PKG_CHECK_EXISTS([gtk-mac-integration], [pkg_cv_[]INTEGRATION_CFLAGS=`$PKG_CONFIG --[]cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:110: -1- PKG_CHECK_EXISTS([gtk-mac-integration], [pkg_cv_[]INTEGRATION_LIBS=`$PKG_CONFIG --[]libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:110: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:113: -1- PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.4.0]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:113: -1- PKG_CHECK_EXISTS([libxml-2.0 >= 2.4.0], [pkg_cv_[]LIBXML2_CFLAGS=`$PKG_CONFIG --[]cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:113: -1- PKG_CHECK_EXISTS([libxml-2.0 >= 2.4.0], [pkg_cv_[]LIBXML2_LIBS=`$PKG_CONFIG --[]libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:113: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:114: -1- PKG_CHECK_MODULES([PANGOFT2], [pangoft2]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:114: -1- PKG_CHECK_EXISTS([pangoft2], [pkg_cv_[]PANGOFT2_CFLAGS=`$PKG_CONFIG --[]cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:114: -1- PKG_CHECK_EXISTS([pangoft2], [pkg_cv_[]PANGOFT2_LIBS=`$PKG_CONFIG --[]libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:114: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:115: -1- PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libavutil libswscale]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:115: -1- PKG_CHECK_EXISTS([libavcodec libavformat libavutil libswscale], [pkg_cv_[]FFMPEG_CFLAGS=`$PKG_CONFIG --[]cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:115: -1- PKG_CHECK_EXISTS([libavcodec libavformat libavutil libswscale], [pkg_cv_[]FFMPEG_LIBS=`$PKG_CONFIG --[]libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:115: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:117: -1- PKG_CHECK_MODULES([GLU], [glu]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:117: -1- PKG_CHECK_EXISTS([glu], [pkg_cv_[]GLU_CFLAGS=`$PKG_CONFIG --[]cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:117: -1- PKG_CHECK_EXISTS([glu], [pkg_cv_[]GLU_LIBS=`$PKG_CONFIG --[]libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:117: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:119: -1- PKG_CHECK_MODULES([EPOXY], [epoxy]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:119: -1- PKG_CHECK_EXISTS([epoxy], [pkg_cv_[]EPOXY_CFLAGS=`$PKG_CONFIG --[]cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:119: -1- PKG_CHECK_EXISTS([epoxy], [pkg_cv_[]EPOXY_LIBS=`$PKG_CONFIG --[]libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:119: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:123: -1- AC_DEFUN([AX_CHECK_COMPILER_FLAG], [AC_PREREQ(2.64) dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR], [ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1]) AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR]) ]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- _AM_PROG_CC_C_O m4trace:configure.ac:140: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) m4trace:configure.ac:140: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:140: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:142: -1- AX_CHECK_COMPILER_FLAG([$CFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:153: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:154: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:156: -1- AX_CHECK_COMPILER_FLAG([$FCFLAGS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:172: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:173: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:174: -1- AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_TRUE$]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_FALSE$]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_FALSE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:190: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) m4trace:configure.ac:190: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.ac:190: -1- AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) atomes_1.3.1/README0000777000175000017500000000000015212624223014637 2README.mdustar lerouxlerouxatomes_1.3.1/aclocal.m40000664000175000017500000017161115212624223014354 0ustar lerouxleroux# generated automatically by aclocal 1.18.1 -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, [m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 13 (pkgconf) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, see . dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION], [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. dnl dnl If pkg-config is not found or older than specified, it will result dnl in an empty PKG_CONFIG variable. To avoid widespread issues with dnl scripts not checking it, ACTION-IF-NOT-FOUND defaults to aborting. dnl You can specify [PKG_CONFIG=false] as an action instead, which would dnl result in pkg-config tests failing, but no bogus error messages. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then m4_default([$2], [AC_MSG_ERROR([pkg-config not found])]) fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.18' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.18.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.18.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([_AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl AC_REQUIRE([_AM_PROG_RM_F]) AC_REQUIRE([_AM_PROG_XARGS_N]) dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2022-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_RM_F # --------------- # Check whether 'rm -f' without any arguments works. # https://bugs.gnu.org/10828 AC_DEFUN([_AM_PROG_RM_F], [am__rm_f_notfound= AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""']) AC_SUBST(am__rm_f_notfound) ]) # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SLEEP_FRACTIONAL_SECONDS # ---------------------------- AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl AC_CACHE_CHECK([whether sleep supports fractional seconds], am_cv_sleep_fractional_seconds, [dnl AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes], [am_cv_sleep_fractional_seconds=no]) ])]) # _AM_FILESYSTEM_TIMESTAMP_RESOLUTION # ----------------------------------- # Determine the filesystem's resolution for file modification # timestamps. The coarsest we know of is FAT, with a resolution # of only two seconds, even with the most recent "exFAT" extensions. # The finest (e.g. ext4 with large inodes, XFS, ZFS) is one # nanosecond, matching clock_gettime. However, it is probably not # possible to delay execution of a shell script for less than one # millisecond, due to process creation overhead and scheduling # granularity, so we don't check for anything finer than that. (See below.) AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS]) AC_CACHE_CHECK([filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `[ls -t conftest.ts[12]]` && { test "$[]*" != "X conftest.ts1 conftest.ts2" || test "$[]*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". _AS_ECHO_UNQUOTED( ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""], [AS_MESSAGE_LOG_FD]) AC_MSG_FAILURE([ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment.]) fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$[]2" = conftest.ts3 && test "$[]3" = conftest.ts2 && test "$[]4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ])]) # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION]) # This check should not be cached, as it may vary across builds of # different projects. AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[]*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$[]2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done AC_MSG_RESULT([$am_build_env_is_sane]) if test "$am_build_env_is_sane" = no; then AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ]) AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SILENT_RULES # ---------------- # Enable less verbose build rules support. AC_DEFUN([_AM_SILENT_RULES], [AM_DEFAULT_VERBOSITY=1 AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls dnl to AM_SILENT_RULES to change the default value. AC_CONFIG_COMMANDS_PRE([dnl case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi ])dnl ]) # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Set the default verbosity level to DEFAULT ("yes" being less verbose, "no" or # empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_REQUIRE([_AM_SILENT_RULES]) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])m4_newline dnl We intentionally force a newline after the assignment, since a) nothing dnl good can come of more text following, and b) that was the behavior dnl before 1.17. See https://bugs.gnu.org/72267. ]) # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test x$am_uid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work]) elif test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test x$gm_gid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work]) elif test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR # Copyright (C) 2022-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_XARGS_N # ---------------- # Check whether 'xargs -n' works. It should work everywhere, so the fallback # is not optimized at all as we never expect to use it. AC_DEFUN([_AM_PROG_XARGS_N], [AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])]) AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }' ])dnl AC_SUBST(am__xargs_n) ]) atomes_1.3.1/Makefile.in0000664000175000017500000007624015212624223014563 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = misc/win/atomes.rc misc/win/startup.rc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__installdirs = "$(DESTDIR)$(atomes_docdir)" DATA = $(atomes_doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/misc/win/atomes.rc.in \ $(top_srcdir)/misc/win/startup.rc.in AUTHORS COPYING ChangeLog \ INSTALL NEWS README compile config.guess config.sub depcomp \ install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \ ; rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = -9 DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = \ find . \( -type f -a \! \ \( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = data man locale src atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications atomes_mimedir = $(atomes_datadir)/mime/packages/ atomes_metadir = $(atomes_datadir)/metainfo atomes_bashdir = $(atomes_datadir)/bash-completion/completions atomes_docdir = $(docdir) atomes_doc_DATA = \ README.md \ AUTHORS.md \ ChangeLog all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status $(AM_V_at)rm -f stamp-h1 $(AM_V_GEN)cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) $(AM_V_GEN)($(am__cd) $(top_srcdir) && $(AUTOHEADER)) $(AM_V_at)rm -f stamp-h1 $(AM_V_at)touch $@ distclean-hdr: -rm -f config.h stamp-h1 misc/win/atomes.rc: $(top_builddir)/config.status $(top_srcdir)/misc/win/atomes.rc.in cd $(top_builddir) && $(SHELL) ./config.status $@ misc/win/startup.rc: $(top_builddir)/config.status $(top_srcdir)/misc/win/startup.rc.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-atomes_docDATA: $(atomes_doc_DATA) @$(NORMAL_INSTALL) @list='$(atomes_doc_DATA)'; test -n "$(atomes_docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_docdir)" || exit $$?; \ done uninstall-atomes_docDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_doc_DATA)'; test -n "$(atomes_docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) $(AM_V_at)$(MKDIR_P) "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-bzip3: distdir tardir=$(distdir) && $(am__tar) | bzip3 -c >$(distdir).tar.bz3 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.bz3*) \ bzip3 -dc $(distdir).tar.bz3 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(atomes_docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-atomes_docDATA install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-atomes_docDATA uninstall-local .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-bzip3 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip dist-zstd distcheck distclean distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-atomes_docDATA install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-atomes_docDATA uninstall-local .PRECIOUS: Makefile install-data-local: # Bash completion if [ ! -d $(atomes_bashdir) ]; then \ $(mkinstalldirs) $(atomes_bashdir); \ fi $(INSTALL_DATA) $(srcdir)/atomes-completion.sh $(atomes_bashdir)/atomes # Program's icons if [ ! -d $(atomes_iconsdir) ]; then \ $(mkinstalldirs) $(atomes_iconsdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-workspace.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-project.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-coordinates.svg $(atomes_iconsdir) # Custom MIME types if [ ! -d $(atomes_mimedir) ]; then \ $(mkinstalldirs) $(atomes_mimedir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes-mime.xml $(atomes_mimedir) # Meta info if [ ! -d $(atomes_metadir) ]; then \ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes.desktop $(atomes_desktopdir)/atomes.desktop # Finalize touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi desktop-file-install --vendor="" \ --dir=$(atomes_desktopdir) -m 644 \ $(atomes_desktopdir)/atomes.desktop if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Remove doc directordy on uninstall uninstall-local: -rm -f $(atomes_iconsdir)/atomes.svg -rm -f $(atomes_iconsdir)/atomes-workspace.svg -rm -f $(atomes_iconsdir)/atomes-project.svg -rm -f $(atomes_iconsdir)/atomes-coordinates.svg -rm -f $(atomes_desktopdir)/atomes.desktop -rm -f $(atomes_metadir)/fr.ipcms.atomes.appdata.xml -rm -f $(atomes_mimedir)/atomes-mime.xml -rm -f $(atomes_bashdir)/atomes -rmdir $(atomes_docdir) touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/atomes.spec0000664000175000017500000001370715212624223014661 0ustar lerouxlerouxName: atomes %global upname atomes-GNU Version: 1.3.1 Release: 1%{?dist} Summary: An atomistic toolbox License: AGPL-3.0-or-later Source0: https://github.com/Slookeur/%{upname}/archive/refs/tags/v%{version}.tar.gz # Source1: ./v%%{version}.tar.gz.asc # Source2: %%{name}.gpg URL: https://%{name}.ipcms.fr/ BuildRequires: gnupg2 BuildRequires: make BuildRequires: automake BuildRequires: autoconf BuildRequires: pkgconf-pkg-config BuildRequires: gcc BuildRequires: gcc-gfortran BuildRequires: libgfortran BuildRequires: desktop-file-utils BuildRequires: libappstream-glib BuildRequires: gettext # pkg-config BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(pangoft2) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(epoxy) BuildRequires: pkgconfig(libavutil) BuildRequires: pkgconfig(libavcodec) BuildRequires: pkgconfig(libavformat) BuildRequires: pkgconfig(libswscale) # Runtime requirements Requires: gtk3 Requires: mesa-libGLU Provides: %{name} = %{version}-%{release} %description atomes: a toolbox to analyze, to visualize and to create/edit 3D atomic scale models. The software interface offers a workspace that allows to open many projects simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS ab-initio MD: CPMD and CP2K QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. %prep # %%{gpgverify} --keyring='%%{SOURCE2}' --signature='%%{SOURCE1}' --data='%%{SOURCE0}' %autosetup -n %{upname}-%{version} %build %configure #make %%{?_smp_mflags} %make_build %install %make_install %find_lang %{name} --with-man %check desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml %files -f %{name}.lang %license COPYING %{_bindir}/%{name} %{_libexecdir}/%{name}_startup_testing %{_datadir}/doc/%{name}/ %{_mandir}/man1/%{name}.1* %{_datadir}/%{name}/ %{_datadir}/bash-completion/completions/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/mime/packages/%{name}-mime.xml %{_datadir}/pixmaps/%{name}.svg %{_datadir}/pixmaps/%{name}-workspace.svg %{_datadir}/pixmaps/%{name}-project.svg %{_datadir}/pixmaps/%{name}-coordinates.svg %{_metainfodir}/fr.ipcms.%{name}.appdata.xml %changelog * Thu Jun 11 2026 Sébastien Le Roux - 1.3.1-1 - Bug corrections (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.1) * Thu Jun 11 2026 Sébastien Le Roux - 1.3.0-1 - New features (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0) * Fri Jan 16 2026 Fedora Release Engineering - 1.2.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild * Fri Jan 16 2026 Fedora Release Engineering - 1.2.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild * Wed Oct 01 2025 Dominik Mierzejewski - 1.2.1-2 - Rebuilt for FFmpeg 8 * Tue Sep 30 2025 Sébastien Le Roux - 1.2.1-1 - New features (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.1) * Fri Sep 05 2025 Sébastien Le Roux - 1.2.0-1 - New features (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.0) * Thu May 15 2025 Sébastien Le Roux - 1.1.18-1 - Bug corrections (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.18) * Thu Feb 20 2025 Sébastien Le Roux - 1.1.17-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.17) * Wed Dec 18 2024 Sébastien Le Roux - 1.1.16-1 - Bug corrections * Mon Oct 14 2024 Sébastien Le Roux - 1.1.15-3 - Bug correction * Thu Oct 10 2024 Sébastien Le Roux - 1.1.15-2 - Package correction * Fri Oct 04 2024 Sébastien Le Roux - 1.1.15-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.15) * Mon Sep 23 2024 Fabio Valentini - 1.1.14-4 - Rebuild for ffmpeg 7 * Wed Jul 17 2024 Fedora Release Engineering - 1.1.14-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild * Wed Mar 20 2024 Sébastien Le Roux - 1.1.14-2 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14) * Wed Mar 20 2024 Sébastien Le Roux - 1.1.14-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14) * Wed Feb 28 2024 Sébastien Le Roux - 1.1.13-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.13) * Mon Sep 18 2023 Sébastien Le Roux - 1.1.12-2 - Package metadata update * Mon Sep 11 2023 Sébastien Le Roux - 1.1.12-1 - Several bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.12) * Wed Jul 19 2023 Fedora Release Engineering - 1.1.11-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild * Fri Apr 14 2023 Sébastien Le Roux - 1.1.11-8 - Initial Fedora commit atomes_1.3.1/configure0000775000175000017500000113127715212624223014430 0ustar lerouxleroux#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for atomes 1.3.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/atomes] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in #( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in #( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in #( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in #( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in #( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in #( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in #( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "#define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "#define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "#define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } # Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in #( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in #( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in #( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in #( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in #( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "#define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in #( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in #( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in #( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } # Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in #( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi # Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in #( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/lic0000664000175000017500000000120315212624223013173 0ustar lerouxleroux/* This file is part of atomes. atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. atomes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with atomes. If not, see */ atomes_1.3.1/config.sub0000775000175000017500000010512115212624223014470 0ustar lerouxleroux#!/usr/bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: